ZGlmZiAtLWdpdCBhL2RvY3MvY29udHJpYnV0aW5nL21haW50YWluZXJzLnJzdCBiL2RvY3MvY29udHJpYnV0aW5nL21haW50YWluZXJzLnJzdAppbmRleCBhOGJmMzRjLi4yMGE3NjkzIDEwMDY0NAotLS0gYS9kb2NzL2NvbnRyaWJ1dGluZy9tYWludGFpbmVycy5yc3QKKysrIGIvZG9jcy9jb250cmlidXRpbmcvbWFpbnRhaW5lcnMucnN0CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICA6Z2l0aHViOiBgamFtaWtlIDxodHRwczovL2dpdGh1Yi5jb20vamFtaWtlPmBfXwogCiAKLUN5cHJlc3MgUGxhdGZvcm06IAorQ3lwcmVzcyBQbGF0Zm9ybToKIH5+fn5+fn5+fn5+fn5+fn5+CiAKIENocmlzIEJyYW5kCkBAIC0xMzksNiArMTM5LDEzIEBACiAgICAgOmdpdGh1YjogYG95dmluZHJvbm5pbmdzdGFkIDxodHRwczovL2dpdGh1Yi5jb20vb3l2aW5kcm9ubmluZ3N0YWQ+YF9fCiAKIAorTnV2b3RvbiBQbGF0Zm9ybToKK35+fn5+fn5+fn5+fn5+fn5+CisKK1dTIENoYW5nCisgICAgOmVtYWlsOiBgTVMyMCBXU0NoYW5nMEBudXZvdG9uLmNvbSA8d3NjaGFuZzBAbnV2b3Rvbi5jb20+YF9fCisgICAgOmdpdGh1YjogYHdzY2hhbmcwIDxodHRwczovL2dpdGh1Yi5jb20vd3NjaGFuZzA+YF9fCisKID09PT09PT09PT09PT0KIAogKkNvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCmRpZmYgLS1naXQgYS9kb2NzL2ludHJvZHVjdGlvbi9yZWFkbWUucnN0IGIvZG9jcy9pbnRyb2R1Y3Rpb24vcmVhZG1lLnJzdAppbmRleCBlOGZiNGU3Li5lZjZmMDZiIDEwMDY0NAotLS0gYS9kb2NzL2ludHJvZHVjdGlvbi9yZWFkbWUucnN0CisrKyBiL2RvY3MvaW50cm9kdWN0aW9uL3JlYWRtZS5yc3QKQEAgLTE1MCw2ICsxNTAsOCBAQAogCiAgICAgICAgIC0gYEZQR0EgaW1hZ2UgbG9hZGVkIG9uIE1QUzIgYm9hcmQgKEFONTE5LCBBTjUzOSkuCiAgICAgICAgICAgPGh0dHBzOi8vZGV2ZWxvcGVyLmFybS5jb20vcHJvZHVjdHMvc3lzdGVtLWRlc2lnbi9kZXZlbG9wbWVudC1ib2FyZHMvY29ydGV4LW0tcHJvdG90eXBpbmctc3lzdGVtcy9tcHMyPmBfCisgICAgICAgIC0gYE0yMzUxLgorICAgICAgICAgIDxodHRwczovL3d3dy5udXZvdG9uLmNvbS9wcm9kdWN0cy9pb3Qtc29sdXRpb24vaW90LXBsYXRmb3JtL251bWFrZXItcGZtLW0yMzUxLz5gXwogCiAgICAgLSBEdWFsIENvcmUgQ29ydGV4LU0gc3lzdGVtOgogCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvaW5kZXgucnN0IGIvcGxhdGZvcm0vZXh0L2luZGV4LnJzdAppbmRleCBkMWNlNGVmLi4zNDk2OWIzIDEwMDY0NAotLS0gYS9wbGF0Zm9ybS9leHQvaW5kZXgucnN0CisrKyBiL3BsYXRmb3JtL2V4dC9pbmRleC5yc3QKQEAgLTQ1LDYgKzQ1LDEzIEBACiAKICAgICB0YXJnZXQvbm9yZGljX25yZi8qKgogCisuLiB0b2N0cmVlOjoKKyAgICA6bWF4ZGVwdGg6IDQKKyAgICA6Y2FwdGlvbjogTnV2b3RvbgorICAgIDpnbG9iOgorCisgICAgdGFyZ2V0L251dm90b24vKioKKwogLS0tLS0tLS0tLS0tLS0KIAogKkNvcHlyaWdodCAoYykgMjAyMCwgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuKgpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL0NNYWtlTGlzdHMudHh0IGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZTFkNmUKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxNzYgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMjAyMCwgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY21ha2VfcG9saWN5KFNFVCBDTVAwMDc2IE5FVykKK3NldChDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVIgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfSkKKworIz09PT09PT09PT09PT09PT09PT09PT09PT0gUGxhdGZvcm0gcmVnaW9uIGRlZnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSMKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHBsYXRmb3JtX3JlZ2lvbl9kZWZzCisgICAgSU5URVJGQUNFCisgICAgICAgIHBhcnRpdGlvbgorKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PSBQbGF0Zm9ybSBjb21tb24gZGVmcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IworCisjIFNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHBsYXRmb3JtIHNwZWNpZmljIGJ1aWxkIGRlcGVuZGVuY2llcy4KK3RhcmdldF9zb3VyY2VzKHRmbV9zCisgICAgUFJJVkFURQorICAgICQ8JDxDX0NPTVBJTEVSX0lEOkFSTUNsYW5nPjoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9zdGFydHVwX2Ntc2RrX20yMzUxX3Mucz4KKyAgICAkPCQ8Q19DT01QSUxFUl9JRDpHTlU+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kZXZpY2Uvc291cmNlL2djYy9zdGFydHVwX2Ntc2RrX20yMzUxX3MuUz4KKyAgICAkPCQ8Q19DT01QSUxFUl9JRDpJQVI+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kZXZpY2Uvc291cmNlL2lhci9zdGFydHVwX2Ntc2RrX20yMzUxX3Mucz4KKykKK3RhcmdldF9hZGRfc2NhdHRlcl9maWxlKHRmbV9zCisgICAgJDwkPENfQ09NUElMRVJfSUQ6QVJNQ2xhbmc+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL20yMzUxX3Muc2N0PgorICAgICQ8JDxDX0NPTVBJTEVSX0lEOkdOVT46JHtDTUFLRV9CSU5BUllfRElSfS9nZW5lcmF0ZWQvcGxhdGZvcm0vZXh0L2NvbW1vbi9nY2MvdGZtX2NvbW1vbl9zLmxkPgorICAgICQ8JDxDX0NPTVBJTEVSX0lEOklBUj46JHtDTUFLRV9CSU5BUllfRElSfS9nZW5lcmF0ZWQvcGxhdGZvcm0vZXh0L2NvbW1vbi9pYXIvdGZtX2NvbW1vbl9zLmljZj4KKykKKworaWYoTlMpCisgICAgdGFyZ2V0X3NvdXJjZXModGZtX25zCisgICAgICAgIFBSSVZBVEUKKyAgICAgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOkFSTUNsYW5nPjoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9zdGFydHVwX2Ntc2RrX20yMzUxX25zLnM+CisgICAgICAgICAgICAkPCQ8Q19DT01QSUxFUl9JRDpHTlU+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kZXZpY2Uvc291cmNlL2djYy9zdGFydHVwX2Ntc2RrX20yMzUxX25zLlM+CisgICAgICAgICAgICAkPCQ8Q19DT01QSUxFUl9JRDpJQVI+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kZXZpY2Uvc291cmNlL2lhci9zdGFydHVwX2Ntc2RrX20yMzUxX25zLnM+CisgICAgKQorICAgIHRhcmdldF9hZGRfc2NhdHRlcl9maWxlKHRmbV9ucworICAgICAgICAkPCQ8Q19DT01QSUxFUl9JRDpBUk1DbGFuZz46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2RldmljZS9zb3VyY2UvYXJtY2xhbmcvbTIzNTFfbnMuc2N0PgorICAgICAgICAkPCQ8Q19DT01QSUxFUl9JRDpHTlU+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kZXZpY2Uvc291cmNlL2djYy9tMjM1MV9ucy5sZD4KKyAgICAgICAgJDwkPENfQ09NUElMRVJfSUQ6SUFSPjoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZGV2aWNlL3NvdXJjZS9pYXIvbTIzNTFfbnMuaWNmPgorICAgICkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXModGZtX25zCisgICAgICAgIFBSSVZBVEUKKyAgICAgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOkFSTUNsYW5nPjoke0NNU0lTXzVfUEFUSH0vUlRPUzIvUlRYL0xpYnJhcnkvQVJNL1JUWF9WOE1CTi5saWI+CisgICAgICAgICAgICAkPCQ8Q19DT01QSUxFUl9JRDpHTlU+OiR7Q01TSVNfNV9QQVRIfS9SVE9TMi9SVFgvTGlicmFyeS9HQ0MvbGliUlRYX1Y4TUJOLmE+CisgICAgICAgICAgICAkPCQ8Q19DT01QSUxFUl9JRDpJQVI+OiR7Q01TSVNfNV9QQVRIfS9SVE9TMi9SVFgvTGlicmFyeS9JQVIvUlRYX1Y4TUJOLmE+CisgICAgICAgICAgICAjIFRoZXNlIGxpYnJhcmllcyByZXF1aXJlIGxpbmtpbmcgdG8gdGhlIHZlbmVlcnMsIHNvIHRoZSB2ZW5lZXJzIGFyZQorICAgICAgICAgICAgIyBtYXJrZWQgYWdhaW4gaGVyZSBhcyBhIGxpbmsgZGVwZW5kZW5jeSB0byBnZXQgdGhlIG9yZGVyaW5nIHJpZ2h0CisgICAgICAgICAgICB0Zm1fc192ZW5lZXJzCisgICAgKQorZW5kaWYoKQorCitpZihCTDIpCisgICAgdGFyZ2V0X3NvdXJjZXMoYmwyCisgICAgICAgIFBSSVZBVEUKKyAgICAgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOkFSTUNsYW5nPjoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9zdGFydHVwX2Ntc2RrX20yMzUxX2JsMi5zPgorICAgICAgICAgICAgJDwkPENfQ09NUElMRVJfSUQ6R05VPjoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZGV2aWNlL3NvdXJjZS9nY2Mvc3RhcnR1cF9jbXNka19tMjM1MV9ibDIuUz4KKyAgICAgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOklBUj46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2RldmljZS9zb3VyY2UvaWFyL3N0YXJ0dXBfY21zZGtfbTIzNTFfYmwyLnM+CisgICAgKQorCisgICAgdGFyZ2V0X2FkZF9zY2F0dGVyX2ZpbGUoYmwyCisgICAgICAgICAgICAkPCQ8Q19DT01QSUxFUl9JRDpBUk1DbGFuZz46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2RldmljZS9zb3VyY2UvYXJtY2xhbmcvbTIzNTFfYmwyLnNjdD4KKyAgICAgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOkdOVT46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2RldmljZS9zb3VyY2UvZ2NjL20yMzUxX2JsMi5sZD4KKyAgICAgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOklBUj46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2RldmljZS9zb3VyY2UvaWFyL20yMzUxX2JsMi5pY2Y+CisgICAgKQorZW5kaWYoKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PSBQbGF0Zm9ybSBTZWN1cmUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IworCit0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhwbGF0Zm9ybV9zCisgICAgUFVCTElDCisgICAgICAgIC4KKyAgICAgICAgY21zaXNfZHJpdmVycy9jb25maWcKKyAgICAgICAgbmF0aXZlX2RyaXZlcnMKKyAgICAgICAgcGFydGl0aW9uCisgICAgICAgIGRldmljZS9pbmNsdWRlCisgICAgICAgIGRldmljZS9jb25maWcKKyAgICAgICAgYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUKKyAgICAgICAgYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYworICAgICAgICAke1BMQVRGT1JNX0RJUn0vZXh0L2Ntc2lzCisgICAgICAgICR7UExBVEZPUk1fRElSfS9leHQvZHJpdmVyCispCisKK3RhcmdldF9zb3VyY2VzKHBsYXRmb3JtX3MKKyAgICBQUklWQVRFCisgICAgICAgIGRldmljZS9zb3VyY2Uvc3lzdGVtX2NvcmVfaW5pdC5jCisgICAgICAgIGRldmljZS9zb3VyY2UvZGV2aWNlX2RlZmluaXRpb24uYworICAgICAgICBjbXNpc19kcml2ZXJzL0RyaXZlcl9GbGFzaC5jCisgICAgICAgIGNtc2lzX2RyaXZlcnMvRHJpdmVyX1VTQVJULmMKKyAgICAgICAgbmF0aXZlX2RyaXZlcnMvdWFydF9jbXNka19kcnYuYworICAgICAgICBuYXRpdmVfZHJpdmVycy9tcHVfYXJtdjhtX2Rydi5jCisgICAgICAgIG5hdGl2ZV9kcml2ZXJzL3RpbWVyX2Ntc2RrX2Rydi5jCisgICAgICAgIGJzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdGltZXIuYworICAgICAgICBic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2ZtYy5jCisgICAgICAgIHNlcnZpY2VzL3NyYy90Zm1fcGxhdGZvcm1fc3lzdGVtLmMKKyAgICAgICAgdGFyZ2V0X2NmZy5jCisgICAgICAgIHNwbV9oYWwuYworICAgICAgICBib290X2hhbC5jCisgICAgICAgICR7UExBVEZPUk1fRElSfS9leHQvY29tbW9uL3VhcnRfc3Rkb3V0LmMKKyAgICAgICAgJHtQTEFURk9STV9ESVJ9L2V4dC9jb21tb24vdGVtcGxhdGUvYXR0ZXN0X2hhbC5jCisgICAgICAgICR7UExBVEZPUk1fRElSfS9leHQvY29tbW9uL3RmbV9wbGF0Zm9ybS5jCisgICAgICAgICR7UExBVEZPUk1fRElSfS9leHQvY29tbW9uL3RlbXBsYXRlL3RmbV9pbml0aWFsX2F0dGVzdGF0aW9uX2tleV9tYXRlcmlhbC5jCisgICAgICAgICR7UExBVEZPUk1fRElSfS9leHQvY29tbW9uL3RlbXBsYXRlL3RmbV9yb3Rway5jCisgICAgICAgICR7UExBVEZPUk1fRElSfS9leHQvY29tbW9uL3RlbXBsYXRlL2NyeXB0b19rZXlzLmMKKyAgICAgICAgJHtQTEFURk9STV9ESVJ9L2V4dC9jb21tb24vdGVtcGxhdGUvbnZfY291bnRlcnMuYworICAgICAgICAkPCQ8Qk9PTDpURk1fUEFSVElUSU9OX1BMQVRGT1JNPjoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGxhdF90ZXN0LmM+CisgICAgICAgICQ8JDxCT09MOlRGTV9QQVJUSVRJT05fUExBVEZPUk0+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zZXJ2aWNlcy9zcmMvdGZtX3BsYXRmb3JtX3N5c3RlbS5jPgorKQorCit0YXJnZXRfY29tcGlsZV9vcHRpb25zKHBsYXRmb3JtX3MKKyAgICBQVUJMSUMKKyAgICAgICAgJHtDT01QSUxFUl9DTVNFX0ZMQUd9CispCisKK3RhcmdldF9jb21waWxlX2RlZmluaXRpb25zKHBsYXRmb3JtX3MKKyAgICBQVUJMSUMKKyAgICAgICAgJDwkPENfQ09NUElMRVJfSUQ6R05VPjpfX1NUQVJUVVBfQ0xFQVJfQlNTX01VTFRJUExFPgorICAgICAgICAkPCQ8Q19DT01QSUxFUl9JRDpHTlU+Ol9fU1RBUlRVUF9DT1BZX01VTFRJUExFPgorKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PSBQbGF0Zm9ybSBOb24tU2VjdXJlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IworCit0YXJnZXRfc291cmNlcyhwbGF0Zm9ybV9ucworICAgIFBSSVZBVEUKKyAgICAgICAgbmF0aXZlX2RyaXZlcnMvdWFydF9jbXNka19kcnYuYworICAgICAgICBjbXNpc19kcml2ZXJzL0RyaXZlcl9VU0FSVC5jCisgICAgICAgIGRldmljZS9zb3VyY2UvZGV2aWNlX2RlZmluaXRpb24uYworICAgICAgICBkZXZpY2Uvc291cmNlL3N5c3RlbV9jb3JlX2luaXQuYworKQorCit0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhwbGF0Zm9ybV9ucworICAgIFBVQkxJQworICAgICAgICAuCisgICAgICAgICR7UExBVEZPUk1fRElSfS8uLgorICAgICAgICBkZXZpY2UvY29uZmlnCisgICAgICAgIGRldmljZS9pbmNsdWRlCisgICAgICAgIG5hdGl2ZV9kcml2ZXJzCisgICAgICAgIGJzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlCisgICAgICAgIGJzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMKKyAgICAgICAgY21zaXNfZHJpdmVycy9jb25maWcKKykKKworIz09PT09PT09PT09PT09PT09PT09PT09PT0gUGxhdGZvcm0gQkwyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSMKKworaWYoQkwyKQorICAgIHRhcmdldF9zb3VyY2VzKHBsYXRmb3JtX2JsMgorICAgICAgICBQUklWQVRFCisgICAgICAgICAgICBib290X2hhbC5jCisgICAgICAgICAgICBkZXZpY2Uvc291cmNlL2RldmljZV9kZWZpbml0aW9uLmMKKyAgICAgICAgICAgIGRldmljZS9zb3VyY2Uvc3lzdGVtX2NvcmVfaW5pdC5jCisgICAgICAgICAgICBjbXNpc19kcml2ZXJzL0RyaXZlcl9GbGFzaC5jCisgICAgICAgICAgICBuYXRpdmVfZHJpdmVycy91YXJ0X2Ntc2RrX2Rydi5jCisgICAgICAgICAgICBjbXNpc19kcml2ZXJzL0RyaXZlcl9VU0FSVC5jCisgICAgICAgICAgICBic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2ZtYy5jCisgICAgKQorICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHBsYXRmb3JtX2JsMgorICAgICAgICBQVUJMSUMKKyAgICAgICAgICAgIHBhcnRpdGlvbgorICAgICAgICAgICAgYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUKKyAgICAgICAgICAgIGJzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMKKyAgICAgICAgICAgIGRldmljZS9pbmNsdWRlCisgICAgICAgICAgICBkZXZpY2UvY29uZmlnCisgICAgICAgICAgICBjbXNpc19kcml2ZXJzL2NvbmZpZworICAgICAgICBQUklWQVRFCisgICAgICAgICAgICAuCisgICAgICAgICAgICAke1BMQVRGT1JNX0RJUn0vLi4KKyAgICAgICAgICAgIG5hdGl2ZV9kcml2ZXJzCisgICAgKQorICAgIHRhcmdldF9jb21waWxlX29wdGlvbnMocGxhdGZvcm1fYmwyCisgICAgICAgIFBVQkxJQworICAgICAgICAgICAgJHtDT01QSUxFUl9DTVNFX0ZMQUd9CisgICAgKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL1JFQURNRS5yc3QgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvUkVBRE1FLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjk1MmM0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL1JFQURNRS5yc3QKQEAgLTAsMCArMSw0NyBAQAorTnVNYWtlci1QRk0tTTIzNTEKKz09PT09PT09PT09PT09PT09PQorCitCdWlsZGluZyBURi1NCistLS0tLS0tLS0tLS0tCisKK0J1aWxkIFRGLU0gd2l0aCBNMjM1MSBieSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKy4uIGNvZGU6OiBiYXNoCisKKyAgICAkIG1rZGlyIGJ1aWxkCisgICAgJCBjZCBidWlsZAorICAgICQgY21ha2UgLi4vIFwKKyAgICAgICAgICAgIC1HIlVuaXggTWFrZWZpbGVzIiBcCisgICAgICAgICAgICAtRFRGTV9QTEFURk9STT1udXZvdG9uL20yMzUxIFwKKyAgICAgICAgICAgIC1EQ01BS0VfVE9PTENIQUlOX0ZJTEU9Li4vdG9vbGNoYWluX0dOVUFSTS5jbWFrZSBcCisgICAgICAgICAgICAtRFRFU1RfTlM9T04gXAorICAgICAgICAgICAgLURDTUFLRV9CVUlMRF9UWVBFPVJlbFdpdGhEZWJJbmZvIFwKKyAgICAgICAgICAgIC1ETUNVQk9PVF9JTUFHRV9OVU1CRVI9MQorICAgICQgbWFrZSBpbnN0YWxsCisKK0RlZmluZSBURVNUX05TPU9OIG9yIFRFU1RfUz1PTiBmb3Igbm9uLXNlY3VyZSBvciBzZWN1cmUgcmVncmVzc2lvbiB0ZXN0LgorQ01BS0VfQlVJTERfVFlQRSBjb3VsZCBiZSAiUmVsZWFzZSIsICJSZWxXaXRoRGViSW5mbyIgb3IgIk1pbnNpemVyZWwiCitURk1fUFNBX0FQST1PTiBhbmQgVEZNX0lTT0xBVElPTl9MRVZFTD0yIGNhbiBhbHNvIGJlIHNldCBidXQgdGhlbSBjYW5ub3QgYmUgZGVmaW5lZCB3aXRoCitURVNUX1M9T04gb3IgVEVTVF9OUz1PTiBhdCB0aGUgc2FtZSB0aW1lIGR1ZSB0byBsaW1pdGVkIFJBTSBzaXplIG9mIE0yMzUxLgorT3RoZXIgY21ha2UgcGFyYW1ldGVycyBzaG91bGQgbm90IGJlIGNoYW5nZWQuCisKK0ZsYXNoaW5nIEltYWdlIHdpdGggTnV2b3RvbiBOdUxpbmsgVG9vbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK051TWFrZXItUEZNLU0yMzUxIGJvYXJkIHN1cHBvcnRzIG9uIGJvYXJkIElDRSBjYWxsZWQgTnVMaW5rLgorQ29ubmVjdCBOdUxpbmsgdG8gUEMgd2l0aCBVU0IgY2FibGUgYW5kIHVzaW5nIGBOdUxpbmsgQ29tbWFuZCBUb29sIDxodHRwczovL2dpdGh1Yi5jb20vT3Blbk51dm90b24vTnV2b3Rvbl9Ub29scz5gX18KK3RvIGZsYXNoaW5nIHRoZSBpbWFnZS4KKworVGhlIGNvbW1hbmRzIGFyZSBhcyBmb2xsb3dzOgorCisuLiBjb2RlOjogZG9zY29uCisKKyAgICA+IE51TGlua19NMjM1MV9NMjYxIC1DCisgICAgPiBOdUxpbmtfTTIzNTFfTTI2MSAtRSBBTEwKKyAgICA+IE51TGlua19NMjM1MV9NMjYxIC1XIEFQUk9NIC4vYnVpbGQvYmluL2JsMi5iaW4gMAorICAgID4gTnVMaW5rX00yMzUxX00yNjEgLVcgQVBST00gLi9idWlsZC9iaW4vdGZtX3NfbnNfc2lnbmVkLmJpbiAwIDB4MTAwMDAKKyAgICA+IE51TGlua19NMjM1MV9NMjYxIC1XIE5TQ0JBIDB4NDAwMDAKKworLS0tLS0tLS0tLS0tLS0KKworKkNvcHlyaWdodCAoYykgMjAyMCwgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuKgpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2Jvb3RfaGFsLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYm9vdF9oYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2IxZmUzCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2Jvb3RfaGFsLmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOS0yMDIwLCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICovCisKKyNpbmNsdWRlICJjbXNpcy5oIgorI2luY2x1ZGUgInJlZ2lvbi5oIgorCitSRUdJT05fREVDTEFSRShJbWFnZSQkLCBFUl9EQVRBLCAkJEJhc2UpW107CitSRUdJT05fREVDTEFSRShJbWFnZSQkLCBBUk1fTElCX0hFQVAsICQkWkkkJExpbWl0KVtdOworCitfX2F0dHJpYnV0ZV9fKChuYWtlZCkpIHZvaWQgYm9vdF9jbGVhcl9ibDJfcmFtX2FyZWEodm9pZCkKK3sKKyAgICBfX0FTTSB2b2xhdGlsZSgKKyNpZm5kZWYgX19JQ0NBUk1fXworICAgICAgICAiLnN5bnRheCB1bmlmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyNlbmRpZgorICAgICAgICAibW92cyAgICByMCwgIzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInN1YnMgICAgJTEsICUxLCAlMCAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJMb29wOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAic3VicyAgICAlMSwgIzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgImJsdCAgICAgQ2xlYXJfZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdHIgICAgIHIwLCBbJTAsICUxXSAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiYiAgICAgICBMb29wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIkNsZWFyX2RvbmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJieCAgICAgIGxyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICA6CisgICAgICAgIDogInIiIChSRUdJT05fTkFNRShJbWFnZSQkLCBFUl9EQVRBLCAkJEJhc2UpKSwKKyAgICAgICAgICAiciIgKFJFR0lPTl9OQU1FKEltYWdlJCQsIEFSTV9MSUJfSEVBUCwgJCRaSSQkTGltaXQpKQorICAgICAgICA6ICJyMCIsICJtZW1vcnkiCisgICAgKTsKK30KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9NMjM1MS5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL00yMzUxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjNzM1NwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9NMjM1MS5oCkBAIC0wLDAgKzEsMTAwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIE0yMzUxLmgKKyAqIEB2ZXJzaW9uICBWMS4xCisgKiBAYnJpZWYgICAgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICBcbWFpbnBhZ2UgSW50cm9kdWN0aW9uCisgICoKKyAgKgorICAqIFRoaXMgdXNlciBtYW51YWwgZGVzY3JpYmVzIHRoZSB1c2FnZSBvZiBNMjM1MSBkZXZpY2UgZHJpdmVyCisgICoKKyAgKiA8Yj5EaXNjbGFpbWVyPC9iPgorICAqCisgICogVGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAiQVMgSVMiLCB3aXRob3V0IHdhcnJhbnR5IGFzIHRvIHBlcmZvcm1hbmNlIG9yIHJlc3VsdHMsIGFuZAorICAqIHRoZSBlbnRpcmUgcmlzayBhcyB0byBwZXJmb3JtYW5jZSBvciByZXN1bHRzIGlzIGFzc3VtZWQgYnkgWU9VLiBOdXZvdG9uIGRpc2NsYWltcyBhbGwKKyAgKiB3YXJyYW50aWVzLCBleHByZXNzLCBpbXBsaWVkIG9yIG90aGVyd2lzZSwgd2l0aCByZWdhcmQgdG8gdGhlIFNvZnR3YXJlLCBpdHMgdXNlLCBvcgorICAqIG9wZXJhdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgYW5kIGFsbCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcworICAqIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgYW5kIG5vbi1pbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cy4KKyAgKgorICAqLworCisKKyNpZm5kZWYgX19NMjM1MV9IX18KKyNkZWZpbmUgX19NMjM1MV9IX18KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCit0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgIHZ1ODsKK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgaW50ICAgdnUzMjsKK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdnUxNjsKKyNkZWZpbmUgTTgoYWRyKSAgKCooKHZ1OCAgKikgKGFkcikpKQorI2RlZmluZSBNMTYoYWRyKSAoKigodnUxNiAqKSAoYWRyKSkpCisjZGVmaW5lIE0zMihhZHIpICgqKCh2dTMyICopIChhZHIpKSkKKworI2RlZmluZSBvdXRwdyhwb3J0LHZhbHVlKSAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikocG9ydCkpPSh2YWx1ZSkpCisjZGVmaW5lIGlucHcocG9ydCkgICAgICAgICAgKCgqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikocG9ydCkpKSkKKyNkZWZpbmUgb3V0cGIocG9ydCx2YWx1ZSkgICAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShwb3J0KSk9KHZhbHVlKSkKKyNkZWZpbmUgaW5wYihwb3J0KSAgICAgICAgICAoKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikocG9ydCkpKSkKKyNkZWZpbmUgb3V0cHMocG9ydCx2YWx1ZSkgICAoKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikocG9ydCkpPSh2YWx1ZSkpCisjZGVmaW5lIGlucHMocG9ydCkgICAgICAgICAgKCgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShwb3J0KSkpKQorCisjZGVmaW5lIG91dHAzMihwb3J0LHZhbHVlKSAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShwb3J0KSk9KHZhbHVlKSkKKyNkZWZpbmUgaW5wMzIocG9ydCkgICAgICAgICAoKCooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShwb3J0KSkpKQorI2RlZmluZSBvdXRwOChwb3J0LHZhbHVlKSAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHBvcnQpKT0odmFsdWUpKQorI2RlZmluZSBpbnA4KHBvcnQpICAgICAgICAgICgoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShwb3J0KSkpKQorI2RlZmluZSBvdXRwMTYocG9ydCx2YWx1ZSkgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShwb3J0KSk9KHZhbHVlKSkKKyNkZWZpbmUgaW5wMTYocG9ydCkgICAgICAgICAoKCooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKHBvcnQpKSkpCisKKworI2RlZmluZSBFX1NVQ0NFU1MgICAwCisKKyNkZWZpbmUgVFJVRSAgICAgICAgKDFMKQorI2RlZmluZSBGQUxTRSAgICAgICAoMEwpCisKKyNkZWZpbmUgRU5BQkxFICAgICAgMQorI2RlZmluZSBESVNBQkxFICAgICAwCisKKy8qIEJpdCBNYXNrIERlZmluaXRpb25zICovCisjZGVmaW5lIEJJVDAgICAgMHgwMDAwMDAwMVVMCisjZGVmaW5lIEJJVDEgICAgMHgwMDAwMDAwMlVMCisjZGVmaW5lIEJJVDIgICAgMHgwMDAwMDAwNFVMCisjZGVmaW5lIEJJVDMgICAgMHgwMDAwMDAwOFVMCisjZGVmaW5lIEJJVDQgICAgMHgwMDAwMDAxMFVMCisjZGVmaW5lIEJJVDUgICAgMHgwMDAwMDAyMFVMCisjZGVmaW5lIEJJVDYgICAgMHgwMDAwMDA0MFVMCisjZGVmaW5lIEJJVDcgICAgMHgwMDAwMDA4MFVMCisjZGVmaW5lIEJJVDggICAgMHgwMDAwMDEwMFVMCisjZGVmaW5lIEJJVDkgICAgMHgwMDAwMDIwMFVMCisjZGVmaW5lIEJJVDEwICAgMHgwMDAwMDQwMFVMCisjZGVmaW5lIEJJVDExICAgMHgwMDAwMDgwMFVMCisjZGVmaW5lIEJJVDEyICAgMHgwMDAwMTAwMFVMCisjZGVmaW5lIEJJVDEzICAgMHgwMDAwMjAwMFVMCisjZGVmaW5lIEJJVDE0ICAgMHgwMDAwNDAwMFVMCisjZGVmaW5lIEJJVDE1ICAgMHgwMDAwODAwMFVMCisjZGVmaW5lIEJJVDE2ICAgMHgwMDAxMDAwMFVMCisjZGVmaW5lIEJJVDE3ICAgMHgwMDAyMDAwMFVMCisjZGVmaW5lIEJJVDE4ICAgMHgwMDA0MDAwMFVMCisjZGVmaW5lIEJJVDE5ICAgMHgwMDA4MDAwMFVMCisjZGVmaW5lIEJJVDIwICAgMHgwMDEwMDAwMFVMCisjZGVmaW5lIEJJVDIxICAgMHgwMDIwMDAwMFVMCisjZGVmaW5lIEJJVDIyICAgMHgwMDQwMDAwMFVMCisjZGVmaW5lIEJJVDIzICAgMHgwMDgwMDAwMFVMCisjZGVmaW5lIEJJVDI0ICAgMHgwMTAwMDAwMFVMCisjZGVmaW5lIEJJVDI1ICAgMHgwMjAwMDAwMFVMCisjZGVmaW5lIEJJVDI2ICAgMHgwNDAwMDAwMFVMCisjZGVmaW5lIEJJVDI3ICAgMHgwODAwMDAwMFVMCisjZGVmaW5lIEJJVDI4ICAgMHgxMDAwMDAwMFVMCisjZGVmaW5lIEJJVDI5ICAgMHgyMDAwMDAwMFVMCisjZGVmaW5lIEJJVDMwICAgMHg0MDAwMDAwMFVMCisjZGVmaW5lIEJJVDMxICAgMHg4MDAwMDAwMFVMCisKKworLyogQnl0ZSBNYXNrIERlZmluaXRpb25zICovCisjZGVmaW5lIEJZVEUwX01zayAgICAgICAgICAgICAgICgweDAwMDAwMEZGVUwpCisjZGVmaW5lIEJZVEUxX01zayAgICAgICAgICAgICAgICgweDAwMDBGRjAwVUwpCisjZGVmaW5lIEJZVEUyX01zayAgICAgICAgICAgICAgICgweDAwRkYwMDAwVUwpCisjZGVmaW5lIEJZVEUzX01zayAgICAgICAgICAgICAgICgweEZGMDAwMDAwVUwpCisKKyNkZWZpbmUgX0dFVF9CWVRFMCh1MzJQYXJhbSkgICAgKCgodTMyUGFyYW0pICYgQllURTBfTXNrKSAgICAgICAgKSAgLyohPCBFeHRyYWN0IEJ5dGUgMCAoQml0ICAwfiA3KSBmcm9tIHBhcmFtZXRlciB1MzJQYXJhbSAqLworI2RlZmluZSBfR0VUX0JZVEUxKHUzMlBhcmFtKSAgICAoKCh1MzJQYXJhbSkgJiBCWVRFMV9Nc2spID4+ICA4VUwpICAvKiE8IEV4dHJhY3QgQnl0ZSAxIChCaXQgIDh+MTUpIGZyb20gcGFyYW1ldGVyIHUzMlBhcmFtICovCisjZGVmaW5lIF9HRVRfQllURTIodTMyUGFyYW0pICAgICgoKHUzMlBhcmFtKSAmIEJZVEUyX01zaykgPj4gMTZVTCkgIC8qITwgRXh0cmFjdCBCeXRlIDIgKEJpdCAxNn4yMykgZnJvbSBwYXJhbWV0ZXIgdTMyUGFyYW0gKi8KKyNkZWZpbmUgX0dFVF9CWVRFMyh1MzJQYXJhbSkgICAgKCgodTMyUGFyYW0pICYgQllURTNfTXNrKSA+PiAyNFVMKSAgLyohPCBFeHRyYWN0IEJ5dGUgMyAoQml0IDI0fjMxKSBmcm9tIHBhcmFtZXRlciB1MzJQYXJhbSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICBQcm9jZXNzb3IgYW5kIENvcmUgUGVyaXBoZXJhbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAYWRkdG9ncm91cCBDTVNJU19EZXZpY2UgQ01TSVMgRGVmaW5pdGlvbnMKKyAgQ29uZmlndXJhdGlvbiBvZiB0aGUgQ29ydGV4LU0yMyBQcm9jZXNzb3IgYW5kIENvcmUgUGVyaXBoZXJhbHMKKyAgQHsKKyovCisKKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAtLS0tLS0tLS0tIEludGVycnVwdCBOdW1iZXIgRGVmaW5pdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisvKioKKyAqIEBkZXRhaWxzICBJbnRlcnJ1cHQgTnVtYmVyIERlZmluaXRpb24uIFRoZSBtYXhpbXVtIG9mIDMyIFNwZWNpZmljIEludGVycnVwdHMgYXJlIHBvc3NpYmxlLgorICovCit0eXBlZGVmIGVudW0gSVJRbgoreworICAgIC8qKioqKiogIENvcnRleC1NMCBQcm9jZXNzb3IgRXhjZXB0aW9ucyBOdW1iZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBOb25NYXNrYWJsZUludF9JUlFuICAgICAgID0gLTE0LCAgICAgIC8qITwgMiBOb24gTWFza2FibGUgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEhhcmRGYXVsdF9JUlFuICAgICAgICAgICAgPSAtMTMsICAgICAgLyohPCAzIENvcnRleC1NMjMgSGFyZCBGYXVsdCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICovCisgICAgU1ZDYWxsX0lSUW4gICAgICAgICAgICAgICA9IC01LCAgICAgICAvKiE8IDExIENvcnRleC1NMjMgU1YgQ2FsbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBQZW5kU1ZfSVJRbiAgICAgICAgICAgICAgID0gLTIsICAgICAgIC8qITwgMTQgQ29ydGV4LU0yMyBQZW5kIFNWIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFN5c1RpY2tfSVJRbiAgICAgICAgICAgICAgPSAtMSwgICAgICAgLyohPCAxNSBDb3J0ZXgtTTIzIFN5c3RlbSBUaWNrIEludGVycnVwdCAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKioqKioqICBBUk1JS01DVSBTd2lmdCBzcGVjaWZpYyBJbnRlcnJ1cHQgTnVtYmVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgICBCT0RfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAvKiE8IEJyb3duIE91dCBkZXRlY3Rpb24gSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAqLworICAgIElSQ19JUlFuICAgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgIC8qITwgSW50ZXJuYWwgUkMgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUFdSV1VfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgLyohPCBQb3dlciBEb3duIFdha2UgVXAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSQU1QRV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDMsICAgICAgICAvKiE8IFNSQU0gcGFyaXR5IGNoZWNrIGZhaWxlZCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAqLworICAgIENLRkFJTF9JUlFuICAgICAgICAgICAgICAgICAgID0gNCwgICAgICAgIC8qITwgQ2xvY2sgZmFpbGVkIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgSVNQX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSA1LCAgICAgICAgLyohPCBGTUMgSVNQIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVENfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDYsICAgICAgICAvKiE8IFJlYWwgVGltZSBDbG9jayBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFRBTVBFUl9JUlFuICAgICAgICAgICAgICAgICAgID0gNywgICAgICAgIC8qITwgVGFtcGVyIGRldGVjdGlvbiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgV0RUX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSA4LCAgICAgICAgLyohPCBXYXRjaGRvZyBUaW1lciBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBXV0RUX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDksICAgICAgICAvKiE8IFdpbmRvdyBXYXRjaGRvZyBUaW1lciBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAqLworICAgIEVJTlQwX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMTAsICAgICAgIC8qITwgRXh0ZXJuYWwgSW5wdXQgMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRUlOVDFfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAxMSwgICAgICAgLyohPCBFeHRlcm5hbCBJbnB1dCAxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFSU5UMl9JUlFuICAgICAgICAgICAgICAgICAgICA9IDEyLCAgICAgICAvKiE8IEV4dGVybmFsIElucHV0IDIgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVJTlQzX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMTMsICAgICAgIC8qITwgRXh0ZXJuYWwgSW5wdXQgMyBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRUlOVDRfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAxNCwgICAgICAgLyohPCBFeHRlcm5hbCBJbnB1dCA0IEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFSU5UNV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDE1LCAgICAgICAvKiE8IEV4dGVybmFsIElucHV0IDUgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEdQQV9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gMTYsICAgICAgIC8qITwgR1BJTyBQb3J0IEEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgR1BCX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSAxNywgICAgICAgLyohPCBHUElPIFBvcnQgQiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBHUENfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDE4LCAgICAgICAvKiE8IEdQSU8gUG9ydCBDIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEdQRF9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gMTksICAgICAgIC8qITwgR1BJTyBQb3J0IEQgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgR1BFX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSAyMCwgICAgICAgLyohPCBHUElPIFBvcnQgRSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBHUEZfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDIxLCAgICAgICAvKiE8IEdQSU8gUG9ydCBGIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFFTUEkwX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMjIsICAgICAgIC8qITwgUVNQSTAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgU1BJMF9JUlFuICAgICAgICAgICAgICAgICAgICAgPSAyMywgICAgICAgLyohPCBTUEkwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBCUkFLRTBfSVJRbiAgICAgICAgICAgICAgICAgICA9IDI0LCAgICAgICAvKiE8IEJSQUtFMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVQV00wX1AwX0lSUW4gICAgICAgICAgICAgICAgID0gMjUsICAgICAgIC8qITwgRVBXTTBQMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRVBXTTBfUDFfSVJRbiAgICAgICAgICAgICAgICAgPSAyNiwgICAgICAgLyohPCBFUFdNMFAxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFUFdNMF9QMl9JUlFuICAgICAgICAgICAgICAgICA9IDI3LCAgICAgICAvKiE8IEVQV00wUDIgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEJSQUtFMV9JUlFuICAgICAgICAgICAgICAgICAgID0gMjgsICAgICAgIC8qITwgQlJBS0UxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRVBXTTFfUDBfSVJRbiAgICAgICAgICAgICAgICAgPSAyOSwgICAgICAgLyohPCBFUFdNMVAwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFUFdNMV9QMV9JUlFuICAgICAgICAgICAgICAgICA9IDMwLCAgICAgICAvKiE8IEVQV00xUDEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVQV00xX1AyX0lSUW4gICAgICAgICAgICAgICAgID0gMzEsICAgICAgIC8qITwgRVBXTTFQMiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgVE1SMF9JUlFuICAgICAgICAgICAgICAgICAgICAgPSAzMiwgICAgICAgLyohPCBUaW1lciAwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBUTVIxX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDMzLCAgICAgICAvKiE8IFRpbWVyIDEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFRNUjJfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gMzQsICAgICAgIC8qITwgVGltZXIgMiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgVE1SM19JUlFuICAgICAgICAgICAgICAgICAgICAgPSAzNSwgICAgICAgLyohPCBUaW1lciAzIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBVQVJUMF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDM2LCAgICAgICAvKiE8IFVBUlQgMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFVBUlQxX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMzcsICAgICAgIC8qITwgVUFSVCAxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgSTJDMF9JUlFuICAgICAgICAgICAgICAgICAgICAgPSAzOCwgICAgICAgLyohPCBJMkMgMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBJMkMxX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDM5LCAgICAgICAvKiE8IEkyQyAxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFBETUEwX0lSUW4gICAgICAgICAgICAgICAgICAgID0gNDAsICAgICAgIC8qITwgUGVyaXBoZXJhbCBETUEgMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgREFDX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSA0MSwgICAgICAgLyohPCBEQUMgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFQURDMF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDQyLCAgICAgICAvKiE8IEVBREMgU291cmNlIDAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVBREMxX0lSUW4gICAgICAgICAgICAgICAgICAgID0gNDMsICAgICAgIC8qITwgRUFEQyBTb3VyY2UgMSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUNNUDAxX0lSUW4gICAgICAgICAgICAgICAgICAgPSA0NCwgICAgICAgLyohPCBBbmFsb2cgQ29tcGFyYXRvciAwIGFuZCAxIEludGVycnVwdCAgICAgICAgICAgICAgKi8KKyAgICBFQURDMl9JUlFuICAgICAgICAgICAgICAgICAgICA9IDQ2LCAgICAgICAvKiE8IEVBREMgU291cmNlIDIgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVBREMzX0lSUW4gICAgICAgICAgICAgICAgICAgID0gNDcsICAgICAgIC8qITwgRUFEQyBTb3VyY2UgMyBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgVUFSVDJfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA0OCwgICAgICAgLyohPCBVQVJUMiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBVQVJUM19JUlFuICAgICAgICAgICAgICAgICAgICA9IDQ5LCAgICAgICAvKiE8IFVBUlQzIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFNQSTFfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gNTEsICAgICAgIC8qITwgU1BJMSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgU1BJMl9JUlFuICAgICAgICAgICAgICAgICAgICAgPSA1MiwgICAgICAgLyohPCBTUEkyIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBVU0JEX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDUzLCAgICAgICAvKiE8IFVTQiBkZXZpY2UgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFVTQkhfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gNTQsICAgICAgIC8qITwgVVNCIGhvc3QgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgVVNCT1RHX0lSUW4gICAgICAgICAgICAgICAgICAgPSA1NSwgICAgICAgLyohPCBVU0IgT1RHIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBDQU4wX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDU2LCAgICAgICAvKiE8IENBTjAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFNDMF9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gNTgsICAgICAgIC8qITwgU21hcnQgQ2FyZCAwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgU0MxX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSA1OSwgICAgICAgLyohPCBTbWFydCBDYXJkIDEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBTQzJfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDYwLCAgICAgICAvKiE8IFNtYXJ0IENhcmQgMiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFNQSTNfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gNjIsICAgICAgIC8qITwgU1BJMyBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgU0RIMF9JUlFuICAgICAgICAgICAgICAgICAgICAgPSA2NCwgICAgICAgLyohPCBTREgwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBJMlMwX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDY4LCAgICAgICAvKiE8IEkyUzAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIENSUFRfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gNzEsICAgICAgIC8qITwgQ1JQVCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgR1BHX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSA3MiwgICAgICAgLyohPCBHUElPIFBvcnQgRyBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFSU5UNl9JUlFuICAgICAgICAgICAgICAgICAgICA9IDczLCAgICAgICAvKiE8IEV4dGVybmFsIElucHV0IDYgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFVBUlQ0X0lSUW4gICAgICAgICAgICAgICAgICAgID0gNzQsICAgICAgIC8qITwgVUFSVDQgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgVUFSVDVfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA3NSwgICAgICAgLyohPCBVQVJUNSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBVU0NJMF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDc2LCAgICAgICAvKiE8IFVTQ0kwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFVTQ0kxX0lSUW4gICAgICAgICAgICAgICAgICAgID0gNzcsICAgICAgIC8qITwgVVNDSTEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQlBXTTBfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA3OCwgICAgICAgLyohPCBCUFdNMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBCUFdNMV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDc5LCAgICAgICAvKiE8IEJQV00xIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEkyQzJfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gODIsICAgICAgIC8qITwgSTJDMiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUUVJMF9JUlFuICAgICAgICAgICAgICAgICAgICAgPSA4NCwgICAgICAgLyohPCBRRUkwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBRRUkxX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDg1LCAgICAgICAvKiE8IFFFSTEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVDQVAwX0lSUW4gICAgICAgICAgICAgICAgICAgID0gODYsICAgICAgIC8qITwgRUNBUDAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRUNBUDFfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA4NywgICAgICAgLyohPCBFQ0FQMSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBHUEhfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDg4LCAgICAgICAvKiE8IEdQSU8gUG9ydCBIIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVJTlQ3X0lSUW4gICAgICAgICAgICAgICAgICAgID0gODksICAgICAgIC8qITwgRXh0ZXJuYWwgSW5wdXQgNyBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUERNQTFfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA5OCwgICAgICAgLyohPCBQZXJpcGhlcmFsIERNQSAxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBTQ1VfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDk5LCAgICAgICAvKiE8IFNDVSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFRSTkdfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gMTAxICAgICAgIC8qITwgVFJORyBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKworfSBJUlFuX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICBQcm9jZXNzb3IgYW5kIENvcmUgUGVyaXBoZXJhbCBTZWN0aW9uICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiAtLS0tLS0tICBTdGFydCBvZiBzZWN0aW9uIHVzaW5nIGFub255bW91cyB1bmlvbnMgYW5kIGRpc2FibGluZyB3YXJuaW5ncyAgLS0tLS0tLSAqLworI2lmICAgZGVmaW5lZCAoX19DQ19BUk0pCisjcHJhZ21hIHB1c2gKKyNwcmFnbWEgYW5vbl91bmlvbnMKKyNlbGlmIGRlZmluZWQgKF9fSUNDQVJNX18pCisjcHJhZ21hIGxhbmd1YWdlPWV4dGVuZGVkCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2MxMS1leHRlbnNpb25zIgorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XcmVzZXJ2ZWQtaWQtbWFjcm8iCisjZWxpZiBkZWZpbmVkIChfX0dOVUNfXykKKy8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2VsaWYgZGVmaW5lZCAoX19UTVM0NzBfXykKKy8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2VsaWYgZGVmaW5lZCAoX19UQVNLSU5HX18pCisjcHJhZ21hIHdhcm5pbmcgNTg2CisjZWxpZiBkZWZpbmVkIChfX0NTTUNfXykKKy8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2Vsc2UKKyN3YXJuaW5nIE5vdCBzdXBwb3J0ZWQgY29tcGlsZXIgdHlwZQorI2VuZGlmCisKKworLyogLS0tLS0tLS0gIENvbmZpZ3VyYXRpb24gb2YgdGhlIENvcnRleC1BUk12OE1CTCBQcm9jZXNzb3IgYW5kIENvcmUgUGVyaXBoZXJhbHMgIC0tLS0tLS0gKi8KKyNkZWZpbmUgX19BUk12OE1CTF9SRVYgICAgICAgICAgICAweDAwMDBVICAgLyogQ29yZSByZXZpc2lvbiByMHAwICovCisjZGVmaW5lIF9fU0FVX1BSRVNFTlQgICAgICAgICAgICAgMVUgICAgICAgIC8qIFNBVSBwcmVzZW50ICovCisjZGVmaW5lIF9fU0FVUkVHSU9OX1BSRVNFTlQgICAgICAgMVUgICAgICAgIC8qIFNBVSBwcmVzZW50ICovCisjZGVmaW5lIF9fTVBVX1BSRVNFTlQgICAgICAgICAgICAgMVUgICAgICAgIC8qIE1QVSBwcmVzZW50ICovCisjZGVmaW5lIF9fVlRPUl9QUkVTRU5UICAgICAgICAgICAgMVUgICAgICAgIC8qIFZUT1IgcHJlc2VudCAqLworI2RlZmluZSBfX05WSUNfUFJJT19CSVRTICAgICAgICAgIDJVICAgICAgICAvKiBOdW1iZXIgb2YgQml0cyB1c2VkIGZvciBQcmlvcml0eSBMZXZlbHMgKi8KKyNkZWZpbmUgX19WZW5kb3JfU3lzVGlja0NvbmZpZyAgICAwVSAgICAgICAgLyogU2V0IHRvIDEgaWYgZGlmZmVyZW50IFN5c1RpY2sgQ29uZmlnIGlzIHVzZWQgKi8KKyNkZWZpbmUgVVNFX0FTU0VSVCAgICAgICAgICAgICAgICAwVSAgICAgICAgLyogRGVmaW5lIHRvIHVzZSBBc3NlcnQgZnVuY3Rpb24gb3Igbm90ICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVMgKi8KKworCisjaW5jbHVkZSAiY29yZV9jbTIzLmgiICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc29yIGFuZCBjb3JlIHBlcmlwaGVyYWxzICovCisjaW5jbHVkZSAic3lzdGVtX00yMzUxLmgiICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbSBIZWFkZXIgKi8KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBzeXN0ZW0gY2xvY2sKKyAqCisgKiBAcGFyYW0gIG5vbmUKKyAqIEByZXR1cm4gbm9uZQorICoKKyAqIEBicmllZiAgU2V0dXAgdGhlIG1pY3JvIGNvbnRyb2xsZXIgc3lzdGVtCisgKiAgICAgICAgIEluaXRpYWxpemUgdGhlIFBMTCBhbmQgdXBkYXRlIHRoZSBTeXN0ZW1GcmVxdWVuY3kgdmFyaWFibGUKKyAqLworZXh0ZXJuIHZvaWQgU3lzdGVtSW5pdCh2b2lkKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgRGV2aWNlIFNwZWNpZmljIFBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZXMgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImFjbXBfcmVnLmgiCisjaW5jbHVkZSAiYnB3bV9yZWcuaCIKKyNpbmNsdWRlICJjYW5fcmVnLmgiCisjaW5jbHVkZSAiY2xrX3JlZy5oIgorI2luY2x1ZGUgImNyY19yZWcuaCIKKyNpbmNsdWRlICJkYWNfcmVnLmgiCisjaW5jbHVkZSAiZWFkY19yZWcuaCIKKyNpbmNsdWRlICJlYmlfcmVnLmgiCisjaW5jbHVkZSAiZWNhcF9yZWcuaCIKKyNpbmNsdWRlICJmbWNfcmVnLmgiCisjaW5jbHVkZSAiZ3Bpb19yZWcuaCIKKyNpbmNsdWRlICJoZGl2X3JlZy5oIgorI2luY2x1ZGUgImkyY19yZWcuaCIKKyNpbmNsdWRlICJpMnNfcmVnLmgiCisjaW5jbHVkZSAicGRtYV9yZWcuaCIKKyNpbmNsdWRlICJlcHdtX3JlZy5oIgorI2luY2x1ZGUgInFlaV9yZWcuaCIKKyNpbmNsdWRlICJydGNfcmVnLmgiCisjaW5jbHVkZSAic2NfcmVnLmgiCisjaW5jbHVkZSAic2N1X3JlZy5oIgorI2luY2x1ZGUgInNkaF9yZWcuaCIKKyNpbmNsdWRlICJxc3BpX3JlZy5oIgorI2luY2x1ZGUgInNwaV9yZWcuaCIKKyNpbmNsdWRlICJzeXNfcmVnLmgiCisjaW5jbHVkZSAidGltZXJfcmVnLmgiCisjaW5jbHVkZSAidHJuZ19yZWcuaCIKKyNpbmNsdWRlICJ1YXJ0X3JlZy5oIgorI2luY2x1ZGUgInVpMmNfcmVnLmgiCisjaW5jbHVkZSAidXNiaF9yZWcuaCIKKyNpbmNsdWRlICJ1c2JkX3JlZy5oIgorI2luY2x1ZGUgIm90Z19yZWcuaCIKKyNpbmNsdWRlICJjcnB0X3JlZy5oIgorI2luY2x1ZGUgInVzcGlfcmVnLmgiCisjaW5jbHVkZSAidXVhcnRfcmVnLmgiCisjaW5jbHVkZSAid2R0X3JlZy5oIgorI2luY2x1ZGUgInd3ZHRfcmVnLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBQZXJpcGhlcmFsIG1lbW9yeSBtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAYWRkdG9ncm91cCBQRVJJUEhFUkFMX0JBU0UgUGVyaXBoZXJhbCBNZW1vcnkgQmFzZQorICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgU2VyaWVzIFBlcmlwaGVyYWwKKyAgQHsKKyAqLworCisKKy8qIFBlcmlwaGVyYWwgYW5kIFNSQU0gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFNSQU1fQkFTRSAgICAgICAgICAgICgweDIwMDAwMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoU1JBTSAgICAgICkgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFBFUklQSF9CQVNFICAgICAgICAgICgweDQwMDAwMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoUGVyaXBoZXJhbCkgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIE5TX09GRlNFVCAgICAgICAgICAgICgweDEwMDAwMDAwVUwpCisKKy8qIFBlcmlwaGVyYWwgbWVtb3J5IG1hcCAqLworI2RlZmluZSBBSEJQRVJJUEhfQkFTRSAgICAgICBQRVJJUEhfQkFTRQorI2RlZmluZSBBUEJQRVJJUEhfQkFTRSAgICAgICAoUEVSSVBIX0JBU0UgKyAweDAwMDQwMDAwVUwpCisKKy8qITwgQUhCIHBlcmlwaGVyYWxzICovCisjZGVmaW5lIFNZU19CQVNFICAgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MDAwMDBVTCkKKyNkZWZpbmUgQ0xLX0JBU0UgICAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgwMDIwMFVMKQorI2RlZmluZSBJTlRfQkFTRSAgICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDAwMzAwVUwpCisjZGVmaW5lIEdQSU9fQkFTRSAgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MDQwMDBVTCkKKyNkZWZpbmUgR1BJT0FfQkFTRSAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgwNDAwMFVMKQorI2RlZmluZSBHUElPQl9CQVNFICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDA0MDQwVUwpCisjZGVmaW5lIEdQSU9DX0JBU0UgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MDQwODBVTCkKKyNkZWZpbmUgR1BJT0RfQkFTRSAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgwNDBDMFVMKQorI2RlZmluZSBHUElPRV9CQVNFICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDA0MTAwVUwpCisjZGVmaW5lIEdQSU9GX0JBU0UgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MDQxNDBVTCkKKyNkZWZpbmUgR1BJT0dfQkFTRSAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgwNDE4MFVMKQorI2RlZmluZSBHUElPSF9CQVNFICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDA0MUMwVUwpCisjZGVmaW5lIEdQSU9fREJDVExfQkFTRSAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MDQ0NDBVTCkKKyNkZWZpbmUgR1BJT19QSU5fREFUQV9CQVNFICAgKEFIQlBFUklQSF9CQVNFICsgMHgwNDgwMFVMKQorI2RlZmluZSBQRE1BMF9CQVNFICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDA4MDAwVUwpCisjZGVmaW5lIFBETUExX0JBU0UgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MTgwMDBVTCkKKyNkZWZpbmUgVVNCSF9CQVNFICAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgwOTAwMFVMKQorI2RlZmluZSBGTUNfQkFTRSAgICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDBDMDAwVUwpCisjZGVmaW5lIFNESDBfQkFTRSAgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MEQwMDBVTCkKKyNkZWZpbmUgU0RIMV9CQVNFICAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgwRTAwMFVMKQorI2RlZmluZSBFQklfQkFTRSAgICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDEwMDAwVUwpCisjZGVmaW5lIFNDVV9CQVNFICAgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MkYwMDBVTCkKKyNkZWZpbmUgQ1JDX0JBU0UgICAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgzMTAwMFVMKQorI2RlZmluZSBDUlBUX0JBU0UgICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDMyMDAwVUwpCisKKy8qITwgQVBCIHBlcmlwaGVyYWxzICovCisjZGVmaW5lIFdEVF9CQVNFICAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MDAwMDBVTCkKKyNkZWZpbmUgV1dEVF9CQVNFICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgwMDEwMFVMKQorI2RlZmluZSBSVENfQkFTRSAgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDAxMDAwVUwpCisjZGVmaW5lIEVBRENfQkFTRSAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MDMwMDBVTCkKKyNkZWZpbmUgQUNNUDAxX0JBU0UgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgwNTAwMFVMKQorI2RlZmluZSBEQUMwX0JBU0UgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDA3MDAwVUwpCisjZGVmaW5lIERBQzFfQkFTRSAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MDcwNDBVTCkKKyNkZWZpbmUgSTJTMF9CQVNFICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgwODAwMFVMKQorI2RlZmluZSBPVEdfQkFTRSAgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDBEMDAwVUwpCisjZGVmaW5lIFRNUjAxX0JBU0UgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MTAwMDBVTCkKKyNkZWZpbmUgVE1SMjNfQkFTRSAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgxMTAwMFVMKQorI2RlZmluZSBFUFdNMF9CQVNFICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDE4MDAwVUwpCisjZGVmaW5lIEVQV00xX0JBU0UgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MTkwMDBVTCkKKyNkZWZpbmUgQlBXTTBfQkFTRSAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgxQTAwMFVMKQorI2RlZmluZSBCUFdNMV9CQVNFICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDFCMDAwVUwpCisjZGVmaW5lIFFTUEkwX0JBU0UgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MjAwMDBVTCkKKyNkZWZpbmUgU1BJMF9CQVNFICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgyMTAwMFVMKQorI2RlZmluZSBTUEkxX0JBU0UgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDIyMDAwVUwpCisjZGVmaW5lIFNQSTJfQkFTRSAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MjMwMDBVTCkKKyNkZWZpbmUgU1BJM19CQVNFICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgyNDAwMFVMKQorI2RlZmluZSBVQVJUMF9CQVNFICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDMwMDAwVUwpCisjZGVmaW5lIFVBUlQwX0JBU0UgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MzAwMDBVTCkKKyNkZWZpbmUgVUFSVDFfQkFTRSAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgzMTAwMFVMKQorI2RlZmluZSBVQVJUMl9CQVNFICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDMyMDAwVUwpCisjZGVmaW5lIFVBUlQzX0JBU0UgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MzMwMDBVTCkKKyNkZWZpbmUgVUFSVDRfQkFTRSAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgzNDAwMFVMKQorI2RlZmluZSBVQVJUNV9CQVNFICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDM1MDAwVUwpCisjZGVmaW5lIEkyQzBfQkFTRSAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4NDAwMDBVTCkKKyNkZWZpbmUgSTJDMV9CQVNFICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHg0MTAwMFVMKQorI2RlZmluZSBJMkMyX0JBU0UgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDQyMDAwVUwpCisjZGVmaW5lIFNDMF9CQVNFICAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4NTAwMDBVTCkKKyNkZWZpbmUgU0MxX0JBU0UgICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHg1MTAwMFVMKQorI2RlZmluZSBTQzJfQkFTRSAgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDUyMDAwVUwpCisjZGVmaW5lIENBTjBfQkFTRSAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4NjAwMDBVTCkKKyNkZWZpbmUgUUVJMF9CQVNFICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHg3MDAwMFVMKQorI2RlZmluZSBRRUkxX0JBU0UgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDcxMDAwVUwpCisjZGVmaW5lIEVDQVAwX0JBU0UgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4NzQwMDBVTCkKKyNkZWZpbmUgRUNBUDFfQkFTRSAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHg3NTAwMFVMKQorI2RlZmluZSBUUk5HX0JBU0UgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDc5MDAwVUwpCisjZGVmaW5lIFVTQkRfQkFTRSAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4ODAwMDBVTCkKKyNkZWZpbmUgVVNDSTBfQkFTRSAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHg5MDAwMFVMKQorI2RlZmluZSBVU0NJMV9CQVNFICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDkxMDAwVUwpCisKKworLyoqQH0qLyAvKiBQRVJJUEhFUkFMICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBQZXJpcGhlcmFsIGRlY2xhcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqIEBhZGR0b2dyb3VwIFBNT0RVTEUgUGVyaXBoZXJhbCBQb2ludGVyCisgIFRoZSBEZWNsYXJhdGlvbiBvZiBQZXJpcGhlcmFsIFBvaW50ZXIKKyAgQHsKKyAqLworCisvKiogQGFkZHRvZ3JvdXAgUE1PRFVMRV9TIFNlY3VyZSBQZXJpcGhlcmFsIFBvaW50ZXIKKyBUaGUgRGVjbGFyYXRpb24gb2YgU2VjdXJlIFBlcmlwaGVyYWwgUG9pbnRlcgorIEB7CisqLworCisKKyNkZWZpbmUgUEFfUyAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSBHUElPQV9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JUQSBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEJfUyAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSBHUElPQl9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JUQiBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUENfUyAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSBHUElPQ19CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JUQyBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUERfUyAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSBHUElPRF9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JURCBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEVfUyAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSBHUElPRV9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JURSBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEZfUyAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSBHUElPRl9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JURiBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEdfUyAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSBHUElPR19CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JURyBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEhfUyAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSBHUElPSF9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JUSCBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUMF9TICAgICAgICAgICAgICgoVUFSVF9UICopIFVBUlQwX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMV9TICAgICAgICAgICAgICgoVUFSVF9UICopIFVBUlQxX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9TICAgICAgICAgICAgICgoVUFSVF9UICopIFVBUlQyX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUM19TICAgICAgICAgICAgICgoVUFSVF9UICopIFVBUlQzX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMyBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUNF9TICAgICAgICAgICAgICgoVUFSVF9UICopIFVBUlQ0X0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUNCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUNV9TICAgICAgICAgICAgICgoVUFSVF9UICopIFVBUlQ1X0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUNSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKyNkZWZpbmUgVElNRVIwX1MgICAgICAgICAgICAoKFRJTUVSX1QgKikgVE1SMDFfQkFTRSkgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVIwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVIxX1MgICAgICAgICAgICAoKFRJTUVSX1QgKikgKFRNUjAxX0JBU0UgKyAweDEwMFVMKSkgICAgICAgIC8qITwgVElNRVIxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVIyX1MgICAgICAgICAgICAoKFRJTUVSX1QgKikgVE1SMjNfQkFTRSkgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVIyIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVIzX1MgICAgICAgICAgICAoKFRJTUVSX1QgKikgKFRNUjIzX0JBU0UgKyAweDEwMFVMKSkgICAgICAgIC8qITwgVElNRVIzIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBXRFRfUyAgICAgICAgICAgICAgICgoV0RUX1QgKikgV0RUX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXYXRjaCBEb2cgVGltZXIgUG9pbnRlciAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdXRFRfUyAgICAgICAgICAgICAgKChXV0RUX1QgKikgV1dEVF9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdpbmRvdyBXYXRjaCBEb2cgVGltZXIgUG9pbnRlciAgICAgICovCisKKyNkZWZpbmUgUVNQSTBfUyAgICAgICAgICAgICAoKFFTUElfVCAqKSBRU1BJMF9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSTAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJMF9TICAgICAgICAgICAgICAoKFNQSV9UICopIFNQSTBfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJMV9TICAgICAgICAgICAgICAoKFNQSV9UICopIFNQSTFfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJMl9TICAgICAgICAgICAgICAoKFNQSV9UICopIFNQSTJfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJMiBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJM19TICAgICAgICAgICAgICAoKFNQSV9UICopIFNQSTNfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJMyBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlMwX1MgICAgICAgICAgICAgICgoSTJTX1QgKikgSTJTMF9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlMwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQzBfUyAgICAgICAgICAgICAgKChJMkNfVCAqKSBJMkMwX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzFfUyAgICAgICAgICAgICAgKChJMkNfVCAqKSBJMkMxX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfUyAgICAgICAgICAgICAgKChJMkNfVCAqKSBJMkMyX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJMF9TICAgICAgICAgICAgICAoKFFFSV9UICopIFFFSTBfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJMV9TICAgICAgICAgICAgICAoKFFFSV9UICopIFFFSTFfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfUyAgICAgICAgICAgICAgICgoUlRDX1QgKikgUlRDX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVEMgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVAwMV9TICAgICAgICAgICAgKChBQ01QX1QgKikgQUNNUDAxX0JBU0UpICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVAwMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1MgICAgICAgICAgICAgICAoKENMS19UICopIENMS19CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENsb2NrIENvbnRyb2xsZXIgUG9pbnRlciAgICAgKi8KKworI2RlZmluZSBEQUMwX1MgICAgICAgICAgICAgICgoREFDX1QgKikgREFDMF9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUMwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQUMxX1MgICAgICAgICAgICAgICgoREFDX1QgKikgREFDMV9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUMxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfUyAgICAgICAgICAgICAgKChFQURDX1QgKikgRUFEQ19CQVNFKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBREMgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1MgICAgICAgICAgICAgICAoKFNZU19UICopIFNZU19CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIEdsb2JhbCBDb250cm9sbGVyIFBvaW50ZXIgICAgKi8KKworI2RlZmluZSBTWVNJTlRfUyAgICAgICAgICAgICgoU1lTX0lOVF9UICopIElOVF9CQVNFKSAgICAgICAgICAgICAgICAgICAgLyohPCBJbnRlcnJ1cHQgU291cmNlIENvbnRyb2xsZXIgUG9pbnRlciAqLworCisjZGVmaW5lIEZNQ19TICAgICAgICAgICAgICAgKChGTUNfVCAqKSBGTUNfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZsYXNoIE1lbW9yeSBDb250cm9sbGVyICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIMF9TICAgICAgICAgICAgICAoKFNESF9UICopICAgU0RIMF9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0QgSG9zdCBDb250cm9sbGVyICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1MgICAgICAgICAgICAgICgoQ1JQVF9UICopIENSUFRfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBDcnlwdG8gQWNjZWxlcmF0b3IgUG9pbnRlciAgICAgICAgICAqLworI2RlZmluZSBUUk5HX1MgICAgICAgICAgICAgICgoVFJOR19UICopVFJOR19CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUcnVlIFJhbmRvbSBOdW1iZXIgUG9pbnRlciAgICAgICAgICAqLworCisjZGVmaW5lIEJQV00wX1MgICAgICAgICAgICAgKChCUFdNX1QgKikgQlBXTTBfQkFTRSkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV00wIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJQV00xX1MgICAgICAgICAgICAgKChCUFdNX1QgKikgQlBXTTFfQkFTRSkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV00xIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRVBXTTBfUyAgICAgICAgICAgICAoKEVQV01fVCAqKSBFUFdNMF9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTTAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRVBXTTFfUyAgICAgICAgICAgICAoKEVQV01fVCAqKSBFUFdNMV9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTTEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQzBfUyAgICAgICAgICAgICAgICgoU0NfVCAqKSBTQzBfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQzAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTQzFfUyAgICAgICAgICAgICAgICgoU0NfVCAqKSBTQzFfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQzEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTQzJfUyAgICAgICAgICAgICAgICgoU0NfVCAqKSBTQzJfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQzIgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVCSV9TICAgICAgICAgICAgICAgKChFQklfVCAqKSBFQklfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JDX1MgICAgICAgICAgICAgICAoKENSQ19UICopIENSQ19CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX1MgICAgICAgICAgICAgICgoVVNCRF9UICopIFVTQkRfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgRGV2aWNlIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JIX1MgICAgICAgICAgICAgICgoVVNCSF9UICopIFVTQkhfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVEdfUyAgICAgICAgICAgICAgICgoT1RHX1QgKikgT1RHX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEcgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUEwX1MgICAgICAgICAgICAgKChQRE1BX1QgKikgUERNQTBfQkFTRSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUEwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBETUExX1MgICAgICAgICAgICAgKChQRE1BX1QgKikgUERNQTFfQkFTRSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUExIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQzBfUyAgICAgICAgICAgICAoKFVJMkNfVCAqKSBVU0NJMF9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQzAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQzFfUyAgICAgICAgICAgICAoKFVJMkNfVCAqKSBVU0NJMV9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQzEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQzJfUyAgICAgICAgICAgICAoKFVJMkNfVCAqKSBVU0NJMl9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQzIgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJMF9TICAgICAgICAgICAgICgoVVNQSV9UICopIFVTQ0kwX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU1BJMV9TICAgICAgICAgICAgICgoVVNQSV9UICopIFVTQ0kxX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUMF9TICAgICAgICAgICAgKChVVUFSVF9UICopIFVTQ0kwX0JBU0UpICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVVQVJUMV9TICAgICAgICAgICAgKChVVUFSVF9UICopIFVTQ0kxX0JBU0UpICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1MgICAgICAgICAgICAgICAoKFNDVV9UICopIFNDVV9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUDBfUyAgICAgICAgICAgICAoKEVDQVBfVCAqKSBFQ0FQMF9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUDAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUDFfUyAgICAgICAgICAgICAoKEVDQVBfVCAqKSBFQ0FQMV9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUDEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDQU4wX1MgICAgICAgICAgICAgICgoQ0FOX1QgKilDQU4wX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU4wIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKworCisvKipAfSovIC8qIGVuZCBvZiBncm91cCBQTU9EVUxFX1MgKi8KKworLyoqIEBhZGR0b2dyb3VwIFBNT0RVTEVfTlMgTm9uLXNlY3VyZSBQZXJpcGhlcmFsIFBvaW50ZXIKKyBUaGUgRGVjbGFyYXRpb24gb2YgTm9uLXNlY3VyZSBQZXJpcGhlcmFsIFBvaW50ZXIKKyBAeworKi8KKworCisjZGVmaW5lIFBBX05TICAgICAgICAgICAgICAgICAgKChHUElPX1QgKikgIChHUElPQV9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlRBIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQl9OUyAgICAgICAgICAgICAgICAgICgoR1BJT19UICopICAoR1BJT0JfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JUQiBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUENfTlMgICAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSAgKEdQSU9DX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUE9SVEMgUG9pbnRlciAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBEX05TICAgICAgICAgICAgICAgICAgKChHUElPX1QgKikgIChHUElPRF9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlREIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQRV9OUyAgICAgICAgICAgICAgICAgICgoR1BJT19UICopICAoR1BJT0VfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JURSBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEZfTlMgICAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSAgKEdQSU9GX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUE9SVEYgUG9pbnRlciAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBHX05TICAgICAgICAgICAgICAgICAgKChHUElPX1QgKikgIChHUElPR19CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlRHIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQSF9OUyAgICAgICAgICAgICAgICAgICgoR1BJT19UICopICAoR1BJT0hfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JUSCBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDBfTlMgICAgICAgICAgICAgICAoKFVBUlRfVCAqKSAgKFVBUlQwX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQxX05TICAgICAgICAgICAgICAgKChVQVJUX1QgKikgIChVQVJUMV9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9OUyAgICAgICAgICAgICAgICgoVUFSVF9UICopICAoVUFSVDJfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDNfTlMgICAgICAgICAgICAgICAoKFVBUlRfVCAqKSAgKFVBUlQzX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQzIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQ0X05TICAgICAgICAgICAgICAgKChVQVJUX1QgKikgIChVQVJUNF9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUNCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUNV9OUyAgICAgICAgICAgICAgICgoVUFSVF9UICopICAoVUFSVDVfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDUgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVIyX05TICAgICAgICAgICAgICAoKFRJTUVSX1QgKikgKFRNUjIzX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSMiBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSM19OUyAgICAgICAgICAgICAgKChUSU1FUl9UICopIChUTVIyM19CQVNFK05TX09GRlNFVCsweDEwMFVMKSkgICAgICAgICAgICAgLyohPCBUSU1FUjMgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJMF9OUyAgICAgICAgICAgICAgICgoUVNQSV9UICopICAoUVNQSTBfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSTAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJMF9OUyAgICAgICAgICAgICAgICAoKFNQSV9UICopICAgKFNQSTBfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTFfTlMgICAgICAgICAgICAgICAgKChTUElfVCAqKSAgIChTUEkxX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX05TICAgICAgICAgICAgICAgICgoU1BJX1QgKikgICAoU1BJMl9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJMiBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJM19OUyAgICAgICAgICAgICAgICAoKFNQSV9UICopICAgKFNQSTNfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTMgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyUzBfTlMgICAgICAgICAgICAgICAgKChJMlNfVCAqKSAgIChJMlMwX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlMwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMwX05TICAgICAgICAgICAgICAgICgoSTJDX1QgKikgICAoSTJDMF9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMV9OUyAgICAgICAgICAgICAgICAoKEkyQ19UICopICAgKEkyQzFfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfTlMgICAgICAgICAgICAgICAgKChJMkNfVCAqKSAgIChJMkMyX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRRUkwX05TICAgICAgICAgICAgICAgICgoUUVJX1QgKikgICAoUUVJMF9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJMV9OUyAgICAgICAgICAgICAgICAoKFFFSV9UICopICAgKFFFSTFfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSTEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19OUyAgICAgICAgICAgICAgICAgKChSVENfVCAqKSAgIChSVENfQkFTRSArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVEMgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBQ01QMDFfTlMgICAgICAgICAgICAgICgoQUNNUF9UICopICAoQUNNUDAxX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUDAxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFDMF9OUyAgICAgICAgICAgICAgICAoKERBQ19UICopICAgKERBQzBfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQzAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERBQzFfTlMgICAgICAgICAgICAgICAgKChEQUNfVCAqKSAgIChEQUMxX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUMxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX05TICAgICAgICAgICAgICAgICgoRUFEQ19UICopICAoRUFEQ19CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQyBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RIMF9OUyAgICAgICAgICAgICAgICAoKFNESF9UICopICAgKFNESDBfQkFTRSArTlNfT0ZGU0VUKSkKKyNkZWZpbmUgQ1JQVF9OUyAgICAgICAgICAgICAgICAoKENSUFRfVCAqKSAgKENSUFRfQkFTRSArTlNfT0ZGU0VUKSkKKyNkZWZpbmUgVFJOR19OUyAgICAgICAgICAgICAgICAoKFRSTkdfVCAqKSAgKFRSTkdfQkFTRSArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBQb2ludGVyICAgICovCisjZGVmaW5lIEJQV00wX05TICAgICAgICAgICAgICAgKChCUFdNX1QgKikgIChCUFdNMF9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTTAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCUFdNMV9OUyAgICAgICAgICAgICAgICgoQlBXTV9UICopICAoQlBXTTFfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV00xIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRVBXTTBfTlMgICAgICAgICAgICAgICAoKEVQV01fVCAqKSAgKEVQV00wX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV00xX05TICAgICAgICAgICAgICAgKChFUFdNX1QgKikgIChFUFdNMV9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTTEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTQzBfTlMgICAgICAgICAgICAgICAgICgoU0NfVCAqKSAgICAoU0MwX0JBU0UgICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0MxX05TICAgICAgICAgICAgICAgICAoKFNDX1QgKikgICAgKFNDMV9CQVNFICArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQzEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNDMl9OUyAgICAgICAgICAgICAgICAgKChTQ19UICopICAgIChTQzJfQkFTRSAgK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0MyIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQklfTlMgICAgICAgICAgICAgICAgICgoRUJJX1QgKikgICAoRUJJX0JBU0UgICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JDX05TICAgICAgICAgICAgICAgICAoKENSQ19UICopICAgKENSQ19CQVNFICArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkMgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQkRfTlMgICAgICAgICAgICAgICAgKChVU0JEX1QgKikgIChVU0JEX0JBU0UgK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIERldmljZSBQb2ludGVyICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JIX05TICAgICAgICAgICAgICAgICgoVVNCSF9UICopICAoVVNCSF9CQVNFICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkggUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX05TICAgICAgICAgICAgICAgICAoKE9UR19UICopICAgKE9UR19CQVNFICArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEcgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBETUExX05TICAgICAgICAgICAgICAgKChQRE1BX1QgKikgIChQRE1BMV9CQVNFICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQTEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSTJDMF9OUyAgICAgICAgICAgICAgICgoVUkyQ19UICopICAoVVNDSTBfQkFTRSArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkMwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQzFfTlMgICAgICAgICAgICAgICAoKFVJMkNfVCAqKSAgKFVTQ0kxX0JBU0UgK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJMkMyX05TICAgICAgICAgICAgICAgKChVSTJDX1QgKikgIChVU0NJMl9CQVNFICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQzIgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU1BJMF9OUyAgICAgICAgICAgICAgICgoVVNQSV9UICopICAoVVNDSTBfQkFTRSArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUEkwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNQSTFfTlMgICAgICAgICAgICAgICAoKFVTUElfVCAqKSAgKFVTQ0kxX0JBU0UgK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVVQVJUMF9OUyAgICAgICAgICAgICAgKChVVUFSVF9UICopIChVU0NJMF9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlQwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVVUFSVDFfTlMgICAgICAgICAgICAgICgoVVVBUlRfVCAqKSAoVVNDSTFfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX05TICAgICAgICAgICAgICAgICAoKFNDVV9UICopICAgKFNDVV9CQVNFICArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1UgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQVAwX05TICAgICAgICAgICAgICAgKChFQ0FQX1QgKikgIChFQ0FQMF9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUDAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0FQMV9OUyAgICAgICAgICAgICAgICgoRUNBUF9UICopICAoRUNBUDFfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVAxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FOMF9OUyAgICAgICAgICAgICAgICAoKENBTl9UICopICAgKENBTjBfQkFTRSArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU4wIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFBNT0RVTEVfTlMgKi8KKworCisvKiBBbHdheXMgU2VjdXJlIE1vZHVsZXMgKi8KKyNkZWZpbmUgU1lTIFNZU19TCisjZGVmaW5lIENMSyBDTEtfUworI2RlZmluZSBGTUMgRk1DX1MKKyNkZWZpbmUgU0NVIFNDVV9TCisjZGVmaW5lIFBETUEwIFBETUEwX1MKKyNkZWZpbmUgV0RUIFdEVF9TCisjZGVmaW5lIFdXRFQgV1dEVF9TCisjZGVmaW5lIFRJTUVSMCBUSU1FUjBfUworI2RlZmluZSBUSU1FUjEgVElNRVIxX1MKKyNkZWZpbmUgUlRDIFJUQ19TCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQwX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDBfVkFMICYgQklUOSApCisjIGRlZmluZSBVU0JIIFVTQkhfTlMKKyNlbHNlCisjIGRlZmluZSBVU0JIIFVTQkhfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQwX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDBfVkFMICYgQklUMTMpCisjIGRlZmluZSBTREgwIFNESDBfTlMKKyNlbHNlCisjIGRlZmluZSBTREgwIFNESDBfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQwX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDBfVkFMICYgQklUMTYpCisjIGRlZmluZSBFQkkgRUJJX05TCisjZWxzZQorIyBkZWZpbmUgRUJJIEVCSV9TCisjZW5kaWYKKworCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUMF9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQwX1ZBTCAmIEJJVDI0KQorIyBkZWZpbmUgUERNQTEgUERNQTFfTlMKKyNlbHNlCisjIGRlZmluZSBQRE1BMSBQRE1BMV9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDFfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUMV9WQUwgJiBCSVQxNykKKyMgZGVmaW5lIENSQyBDUkNfTlMKKyNlbHNlCisjIGRlZmluZSBDUkMgQ1JDX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUMV9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQxX1ZBTCAmIEJJVDE4KQorIyBkZWZpbmUgQ1JQVCBDUlBUX05TCisjZWxzZQorIyBkZWZpbmUgQ1JQVCBDUlBUX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUMl9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCAmIEJJVDMgKQorIyBkZWZpbmUgRUFEQyBFQURDX05TCisjZWxzZQorIyBkZWZpbmUgRUFEQyBFQURDX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUMl9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCAmIEJJVDUgKQorIyBkZWZpbmUgQUNNUDAxIEFDTVAwMV9OUworI2Vsc2UKKyMgZGVmaW5lIEFDTVAwMSBBQ01QMDFfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDJfVkFMICYgQklUNyApCisjIGRlZmluZSBEQUMwIERBQzBfTlMKKyMgZGVmaW5lIERBQzEgREFDMV9OUworI2Vsc2UKKyMgZGVmaW5lIERBQzAgREFDMF9TCisjIGRlZmluZSBEQUMxIERBQzFfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDJfVkFMICYgQklUOCApCisjIGRlZmluZSBJMlMwIEkyUzBfTlMKKyNlbHNlCisjIGRlZmluZSBJMlMwIEkyUzBfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDJfVkFMICYgQklUMTMpCisjIGRlZmluZSBPVEcgT1RHX05TCisjZWxzZQorIyBkZWZpbmUgT1RHIE9UR19TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDJfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUMl9WQUwgJiBCSVQxNykKKyMgZGVmaW5lIFRJTUVSMiBUSU1FUjJfTlMKKyMgZGVmaW5lIFRJTUVSMyBUSU1FUjNfTlMKKyNlbHNlCisjIGRlZmluZSBUSU1FUjIgVElNRVIyX1MKKyMgZGVmaW5lIFRJTUVSMyBUSU1FUjNfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDJfVkFMICYgQklUMjQpCisjIGRlZmluZSBFUFdNMCBFUFdNMF9OUworI2Vsc2UKKyMgZGVmaW5lIEVQV00wIEVQV00wX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUMl9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCAmIEJJVDI1KQorIyBkZWZpbmUgRVBXTTEgRVBXTTFfTlMKKyNlbHNlCisjIGRlZmluZSBFUFdNMSBFUFdNMV9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDJfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUMl9WQUwgJiBCSVQyNikKKyMgZGVmaW5lIEJQV00wIEJQV00wX05TCisjZWxzZQorIyBkZWZpbmUgQlBXTTAgQlBXTTBfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDJfVkFMICYgQklUMjcpCisjIGRlZmluZSBCUFdNMSBCUFdNMV9OUworI2Vsc2UKKyMgZGVmaW5lIEJQV00xIEJQV00xX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUM19WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCAmIEJJVDAgKQorIyBkZWZpbmUgUVNQSTAgUVNQSTBfTlMKKyNlbHNlCisjIGRlZmluZSBRU1BJMCBRU1BJMF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDNfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUM19WQUwgJiBCSVQxICkKKyMgZGVmaW5lIFNQSTAgU1BJMF9OUworI2Vsc2UKKyMgZGVmaW5lIFNQSTAgU1BJMF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDNfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUM19WQUwgJiBCSVQyICkKKyMgZGVmaW5lIFNQSTEgU1BJMV9OUworI2Vsc2UKKyMgZGVmaW5lIFNQSTEgU1BJMV9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDNfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUM19WQUwgJiBCSVQzICkKKyMgZGVmaW5lIFNQSTIgU1BJMl9OUworI2Vsc2UKKyMgZGVmaW5lIFNQSTIgU1BJMl9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDNfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUM19WQUwgJiBCSVQ0ICkKKyMgZGVmaW5lIFNQSTMgU1BJM19OUworI2Vsc2UKKyMgZGVmaW5lIFNQSTMgU1BJM19TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDNfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUM19WQUwgJiBCSVQxNikKKyMgZGVmaW5lIFVBUlQwIFVBUlQwX05TCisjZWxzZQorIyBkZWZpbmUgVUFSVDAgVUFSVDBfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDNfVkFMICYgQklUMTcpCisjIGRlZmluZSBVQVJUMSBVQVJUMV9OUworI2Vsc2UKKyMgZGVmaW5lIFVBUlQxIFVBUlQxX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUM19WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCAmIEJJVDE4KQorIyBkZWZpbmUgVUFSVDIgVUFSVDJfTlMKKyNlbHNlCisjIGRlZmluZSBVQVJUMiBVQVJUMl9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDNfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUM19WQUwgJiBCSVQxOSkKKyMgZGVmaW5lIFVBUlQzIFVBUlQzX05TCisjZWxzZQorIyBkZWZpbmUgVUFSVDMgVUFSVDNfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDNfVkFMICYgQklUMjApCisjIGRlZmluZSBVQVJUNCBVQVJUNF9OUworI2Vsc2UKKyMgZGVmaW5lIFVBUlQ0IFVBUlQ0X1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUM19WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCAmIEJJVDIxKQorIyBkZWZpbmUgVUFSVDUgVUFSVDVfTlMKKyNlbHNlCisjIGRlZmluZSBVQVJUNSBVQVJUNV9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDRfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNF9WQUwgJiBCSVQwICkKKyMgZGVmaW5lIEkyQzAgSTJDMF9OUworI2Vsc2UKKyMgZGVmaW5lIEkyQzAgSTJDMF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDRfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNF9WQUwgJiBCSVQxICkKKyMgZGVmaW5lIEkyQzEgSTJDMV9OUworI2Vsc2UKKyMgZGVmaW5lIEkyQzEgSTJDMV9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDRfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNF9WQUwgJiBCSVQyICkKKyMgZGVmaW5lIEkyQzIgSTJDMl9OUworI2Vsc2UKKyMgZGVmaW5lIEkyQzIgSTJDMl9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDRfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNF9WQUwgJiBCSVQxNikKKyMgZGVmaW5lIFNDMCBTQzBfTlMKKyNlbHNlCisjIGRlZmluZSBTQzAgU0MwX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUNF9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQ0X1ZBTCAmIEJJVDE3KQorIyBkZWZpbmUgU0MxIFNDMV9OUworI2Vsc2UKKyMgZGVmaW5lIFNDMSBTQzFfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQ0X1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDRfVkFMICYgQklUMTgpCisjIGRlZmluZSBTQzIgU0MyX05TCisjZWxzZQorIyBkZWZpbmUgU0MyIFNDMl9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDVfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNV9WQUwgJiBCSVQwICkKKyMgZGVmaW5lIENBTjAgQ0FOMF9OUworI2Vsc2UKKyMgZGVmaW5lIENBTjAgQ0FOMF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDVfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNV9WQUwgJiBCSVQxNikKKyMgZGVmaW5lIFFFSTAgUUVJMF9OUworI2Vsc2UKKyMgZGVmaW5lIFFFSTAgUUVJMF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDVfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNV9WQUwgJiBCSVQxNykKKyMgZGVmaW5lIFFFSTEgUUVJMV9OUworI2Vsc2UKKyMgZGVmaW5lIFFFSTEgUUVJMV9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDVfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNV9WQUwgJiBCSVQyMCkKKyMgZGVmaW5lIEVDQVAwIEVDQVAwX05TCisjZWxzZQorIyBkZWZpbmUgRUNBUDAgRUNBUDBfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQ1X1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDVfVkFMICYgQklUMjEpCisjIGRlZmluZSBFQ0FQMSBFQ0FQMV9OUworI2Vsc2UKKyMgZGVmaW5lIEVDQVAxIEVDQVAxX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUNV9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQ1X1ZBTCAmIEJJVDI1KQorIyBkZWZpbmUgVFJORyBUUk5HX05TCisjZWxzZQorIyBkZWZpbmUgVFJORyBUUk5HX1MKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQ2X1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDZfVkFMICYgQklUMCApCisjIGRlZmluZSBVU0JEIFVTQkRfTlMKKyNlbHNlCisjIGRlZmluZSBVU0JEIFVTQkRfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQ2X1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDZfVkFMICYgQklUMTYpCisjIGRlZmluZSBVU0NJMCAgVVNDSTBfTlMKKyMgZGVmaW5lIFVJMkMwICBVSTJDMF9OUworIyBkZWZpbmUgVVNQSTAgIFVTUEkwX05TCisjIGRlZmluZSBVVUFSVDAgVVVBUlQwX05TCisjZWxzZQorIyBkZWZpbmUgVVNDSTAgIFVTQ0kwX1MKKyMgZGVmaW5lIFVJMkMwICBVSTJDMF9TCisjIGRlZmluZSBVU1BJMCAgVVNQSTBfUworIyBkZWZpbmUgVVVBUlQwIFVVQVJUMF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDZfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNl9WQUwgJiBCSVQxNykKKyMgZGVmaW5lIFVTQ0kxICBVU0NJMV9OUworIyBkZWZpbmUgVUkyQzEgIFVJMkMxX05TCisjIGRlZmluZSBVU1BJMSAgVVNQSTFfTlMKKyMgZGVmaW5lIFVVQVJUMSBVVUFSVDFfTlMKKyNlbHNlCisjIGRlZmluZSBVU0NJMSAgVVNDSTFfUworIyBkZWZpbmUgVUkyQzEgIFVJMkMxX1MKKyMgZGVmaW5lIFVTUEkxICBVU1BJMV9TCisjIGRlZmluZSBVVUFSVDEgVVVBUlQxX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfSU9OU1NFVF9WQUwpICYmIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCAmIEJJVDAgKQorIyBkZWZpbmUgUEEgUEFfTlMKKyNlbHNlCisjIGRlZmluZSBQQSBQQV9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX0lPTlNTRVRfVkFMKSAmJiAoU0NVX0lOSVRfSU9OU1NFVF9WQUwgJiBCSVQxICkKKyMgZGVmaW5lIFBCIFBCX05TCisjZWxzZQorIyBkZWZpbmUgUEIgUEJfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCkgJiYgKFNDVV9JTklUX0lPTlNTRVRfVkFMICYgQklUMiApCisjIGRlZmluZSBQQyBQQ19OUworI2Vsc2UKKyMgZGVmaW5lIFBDIFBDX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfSU9OU1NFVF9WQUwpICYmIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCAmIEJJVDMgKQorIyBkZWZpbmUgUEQgUERfTlMKKyNlbHNlCisjIGRlZmluZSBQRCBQRF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX0lPTlNTRVRfVkFMKSAmJiAoU0NVX0lOSVRfSU9OU1NFVF9WQUwgJiBCSVQ0ICkKKyMgZGVmaW5lIFBFIFBFX05TCisjZWxzZQorIyBkZWZpbmUgUEUgUEVfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCkgJiYgKFNDVV9JTklUX0lPTlNTRVRfVkFMICYgQklUNSApCisjIGRlZmluZSBQRiBQRl9OUworI2Vsc2UKKyMgZGVmaW5lIFBGIFBGX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfSU9OU1NFVF9WQUwpICYmIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCAmIEJJVDYgKQorIyBkZWZpbmUgUEcgUEdfTlMKKyNlbHNlCisjIGRlZmluZSBQRyBQR19TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX0lPTlNTRVRfVkFMKSAmJiAoU0NVX0lOSVRfSU9OU1NFVF9WQUwgJiBCSVQ3ICkKKyMgZGVmaW5lIFBIIFBIX05TCisjZWxzZQorIyBkZWZpbmUgUEggUEhfUworI2VuZGlmCisKKworLyoqQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUE1PRFVMRSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgRW5kIG9mIHNlY3Rpb24gdXNpbmcgYW5vbnltb3VzIHVuaW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmICAgZGVmaW5lZCAoX19DQ19BUk0pCisjcHJhZ21hIHBvcAorI2VsaWYgZGVmaW5lZCAoX19JQ0NBUk1fXykKKy8qIGxlYXZlIGFub255bW91cyB1bmlvbnMgZW5hYmxlZCAqLworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbGlmIGRlZmluZWQgKF9fR05VQ19fKQorLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkIChfX1RNUzQ3MF9fKQorLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkIChfX1RBU0tJTkdfXykKKyNwcmFnbWEgd2FybmluZyByZXN0b3JlCisjZWxpZiBkZWZpbmVkIChfX0NTTUNfXykKKy8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2Vsc2UKKyN3YXJuaW5nIE5vdCBzdXBwb3J0ZWQgY29tcGlsZXIgdHlwZQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmlwaGVyYWwgaGVhZGVyIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInN5cy5oIgorI2luY2x1ZGUgImNsay5oIgorI2luY2x1ZGUgImRhYy5oIgorI2luY2x1ZGUgImVhZGMuaCIKKyNpbmNsdWRlICJlYmkuaCIKKyNpbmNsdWRlICJlY2FwLmgiCisjaW5jbHVkZSAiZm1jLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgorI2luY2x1ZGUgImkyYy5oIgorI2luY2x1ZGUgImkycy5oIgorI2luY2x1ZGUgImJwd20uaCIKKyNpbmNsdWRlICJlcHdtLmgiCisjaW5jbHVkZSAicXNwaS5oIgorI2luY2x1ZGUgInNwaS5oIgorI2luY2x1ZGUgInRpbWVyLmgiCisjaW5jbHVkZSAidGltZXJfcHdtLmgiCisjaW5jbHVkZSAid2R0LmgiCisjaW5jbHVkZSAid3dkdC5oIgorI2luY2x1ZGUgInJ0Yy5oIgorI2luY2x1ZGUgInVhcnQuaCIKKyNpbmNsdWRlICJhY21wLmgiCisjaW5jbHVkZSAiY3JjLmgiCisjaW5jbHVkZSAidXNiZC5oIgorI2luY2x1ZGUgIm90Zy5oIgorI2luY2x1ZGUgInBkbWEuaCIKKyNpbmNsdWRlICJlYmkuaCIKKyNpbmNsdWRlICJjcnlwdG8uaCIKKyNpbmNsdWRlICJzYy5oIgorI2luY2x1ZGUgInNjdWFydC5oIgorI2luY2x1ZGUgInVzY2lfc3BpLmgiCisjaW5jbHVkZSAidXNjaV91YXJ0LmgiCisjaW5jbHVkZSAidXNjaV9pMmMuaCIKKyNpbmNsdWRlICJzZGguaCIKKyNpbmNsdWRlICJxZWkuaCIKKyNpbmNsdWRlICJjYW4uaCIKKyNpbmNsdWRlICJzY3UuaCIKKyNpbmNsdWRlICJta3JvbWxpYi5oIgorCisjaWYgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNMKQorIyBpbmNsdWRlICJwYXJ0aXRpb25fTTIzNTEuaCIKKyNlbmRpZgorCisKKyNlbmRpZiAgLyogX19NMjM1MV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL051TWljcm8uaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9OdU1pY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRiOWE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9OdU1pY3JvLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIE51TWljcm8uaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgTnVNaWNybyBwZXJpcGhlcmFsIGFjY2VzcyBsYXllciBoZWFkZXIgZmlsZS4KKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX05VTUlDUk9fSF9fCisjZGVmaW5lIF9fTlVNSUNST19IX18KKworI2luY2x1ZGUgIk0yMzUxLmgiCisKKyNlbmRpZiAgLyogX19OVU1JQ1JPX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvYWNtcF9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9hY21wX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZWU1MDAKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvYWNtcF9yZWcuaApAQCAtMCwwICsxLDI2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGFjbXBfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIEFDTVAgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQUNNUF9SRUdfSF9fCisjZGVmaW5lIF9fQUNNUF9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQW5hbG9nIENvbXBhcmF0b3IgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIEFDTVAgQW5hbG9nIENvbXBhcmF0b3IgQ29udHJvbGxlcihBQ01QKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBBQ01QIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgQUNNUF9UOjpDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIEFuYWxvZyBDb21wYXJhdG9yIDAgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEFDTVBFTiAgICB8Q29tcGFyYXRvciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmF0b3IgMCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyYXRvciAwIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFsxXSAgICAgfEFDTVBJRSAgICB8Q29tcGFyYXRvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJhdG9yIDAgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJhdG9yIDAgaW50ZXJydXB0IEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBXS0VOIChBQ01QX0NUTDBbMTZdKSBpcyBzZXQgdG8gMSwgdGhlIHdha2UtdXAgaW50ZXJydXB0IGZ1bmN0aW9uIHdpbGwgYmUgZW5hYmxlZCBhcyB3ZWxsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbMl0gICAgIHxIWVNFTiAgICAgfENvbXBhcmF0b3IgSHlzdGVyZXNpcyBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmF0b3IgMCBoeXN0ZXJlc2lzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJhdG9yIDAgaHlzdGVyZXNpcyBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIEhZU0VOID0gMCwgdXNlciBjYW4gYWRqdXN0IEhZUyBieSBIWVNTRUwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSFlTRU4gPSAxLCBIWVNTRUwgaXMgaW52YWxpZC4gVGhlIEh5c3RlcmVzaXMgaXMgZml4ZWQgdG8gMzBtVi4KKyAgICAgKiB8WzNdICAgICB8QUNNUE9JTlYgIHxDb21wYXJhdG9yIE91dHB1dCBJbnZlcnNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmF0b3IgMCBvdXRwdXQgaW52ZXJzZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyYXRvciAwIG91dHB1dCBpbnZlcnNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFs1OjRdICAgfE5FR1NFTCAgICB8Q29tcGFyYXRvciBOZWdhdGl2ZSBJbnB1dCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IEFDTVAwX04gcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gSW50ZXJuYWwgY29tcGFyYXRvciByZWZlcmVuY2Ugdm9sdGFnZSAoQ1JWKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJhbmQtZ2FwIHZvbHRhZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBEQUMgb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbNzo2XSAgIHxQT1NTRUwgICAgfENvbXBhcmF0b3IgUG9zaXRpdmUgSW5wdXQgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBJbnB1dCBmcm9tIEFDTVAwX1AwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gSW5wdXQgZnJvbSBBQ01QMF9QMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IElucHV0IGZyb20gQUNNUDBfUDIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBJbnB1dCBmcm9tIEFDTVAwX1AzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbOTo4XSAgIHxJTlRQT0wgICAgfEludGVycnVwdCBDb25kaXRpb24gUG9sYXJpdHkgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QUNNUElGMCB3aWxsIGJlIHNldCB0byAxIHdoZW4gY29tcGFyYXRvciBvdXRwdXQgZWRnZSBjb25kaXRpb24gaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBSaXNpbmcgZWRnZSBvciBmYWxsaW5nIGVkZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBSaXNpbmcgZWRnZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEZhbGxpbmcgZWRnZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbMTJdICAgIHxPVVRTRUwgICAgfENvbXBhcmF0b3IgT3V0cHV0IFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJhdG9yIDAgb3V0cHV0IHRvIEFDTVAwX08gcGluIGlzIHVuZmlsdGVyZWQgY29tcGFyYXRvciBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmF0b3IgMCBvdXRwdXQgdG8gQUNNUDBfTyBwaW4gaXMgZnJvbSBmaWx0ZXIgb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbMTU6MTNdIHxGSUxUU0VMICAgfENvbXBhcmF0b3IgT3V0cHV0IEZpbHRlciBDb3VudCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBGaWx0ZXIgZnVuY3Rpb24gaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gQUNNUDAgb3V0cHV0IGlzIHNhbXBsZWQgMSBjb25zZWN1dGl2ZSBQQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IEFDTVAwIG91dHB1dCBpcyBzYW1wbGVkIDIgY29uc2VjdXRpdmUgUENMS3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gQUNNUDAgb3V0cHV0IGlzIHNhbXBsZWQgNCBjb25zZWN1dGl2ZSBQQ0xLcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBBQ01QMCBvdXRwdXQgaXMgc2FtcGxlZCA4IGNvbnNlY3V0aXZlIFBDTEtzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IEFDTVAwIG91dHB1dCBpcyBzYW1wbGVkIDE2IGNvbnNlY3V0aXZlIFBDTEtzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IEFDTVAwIG91dHB1dCBpcyBzYW1wbGVkIDMyIGNvbnNlY3V0aXZlIFBDTEtzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IEFDTVAwIG91dHB1dCBpcyBzYW1wbGVkIDY0IGNvbnNlY3V0aXZlIFBDTEtzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbMTZdICAgIHxXS0VOICAgICAgfFBvd2VyLWRvd24gV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKiB8WzE3XSAgICB8V0xBVEVOICAgIHxXaW5kb3cgTGF0Y2ggTW9kZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdpbmRvdyBMYXRjaCBNb2RlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaW5kb3cgTGF0Y2ggTW9kZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbMThdICAgIHxXQ01QU0VMICAgfFdpbmRvdyBDb21wYXJlIE1vZGUgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdpbmRvdyBDb21wYXJlIE1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdpbmRvdyBDb21wYXJlIE1vZGUgaXMgU2VsZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFsyNToyNF0gfEhZU1NFTCAgICB8SHlzdGVyZXNpcyBNb2RlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gSHlzdGVyZXNpcyBpcyAwbVYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBIeXN0ZXJlc2lzIGlzIDEwbVYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBIeXN0ZXJlc2lzIGlzIDIwbVYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBIeXN0ZXJlc2lzIGlzIDMwbVYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFsyOToyOF0gfE1PREVTRUwgICB8UHJvcGFnYXRpb24gRGVsYXkgTW9kZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IE1heCBwcm9wYWdhdGlvbiBkZWxheSBpcyA0LjV1Uywgb3BlcmF0aW9uIGN1cnJlbnQgaXMgMS4ydUEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBNYXggcHJvcGFnYXRpb24gZGVsYXkgaXMgMnVTLCBvcGVyYXRpb24gY3VycmVudCBpcyAzdUEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBNYXggcHJvcGFnYXRpb24gZGVsYXkgaXMgNjAwblMsIG9wZXJhdGlvbiBjdXJyZW50IGlzIDEwdUEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBNYXggcHJvcGFnYXRpb24gZGVsYXkgaXMgMjAwblMsIG9wZXJhdGlvbiBjdXJyZW50IGlzIDc1dUEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisKKyAgICAgKiBAdmFyIEFDTVBfVDo6U1RBVFVTCisgICAgICogT2Zmc2V0OiAweDA4ICBBbmFsb2cgQ29tcGFyYXRvciBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBQ01QSUYwICAgfENvbXBhcmF0b3IgMCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIHRoZSBlZGdlIGNvbmRpdGlvbiBkZWZpbmVkIGJ5IElOVFBPTCAoQUNNUF9DVEwwWzk6OF0pIGlzIGRldGVjdGVkIG9uIGNvbXBhcmF0b3IgMCBvdXRwdXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IGlmIEFDTVBJRSAoQUNNUF9DVEwwWzFdKSBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFsxXSAgICAgfEFDTVBJRjEgICB8Q29tcGFyYXRvciAxIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gdGhlIGVkZ2UgY29uZGl0aW9uIGRlZmluZWQgYnkgSU5UUE9MIChBQ01QX0NUTDFbOTo4XSkgaXMgZGV0ZWN0ZWQgb24gY29tcGFyYXRvciAxIG91dHB1dAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgd2lsbCBjYXVzZSBhbiBpbnRlcnJ1cHQgaWYgQUNNUElFIChBQ01QX0NUTDFbMV0pIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKiB8WzRdICAgICB8QUNNUE8wICAgIHxDb21wYXJhdG9yIDAgT3V0cHV0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U3luY2hyb25pemVkIHRvIHRoZSBQQ0xLIHRvIGFsbG93IHJlYWRpbmcgYnkgc29mdHdhcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDbGVhcmVkIHdoZW4gdGhlIGNvbXBhcmF0b3IgMCBpcyBkaXNhYmxlZCwgaS5lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QUNNUEVOIChBQ01QX0NUTDBbMF0pIGlzIGNsZWFyZWQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKiB8WzVdICAgICB8QUNNUE8xICAgIHxDb21wYXJhdG9yIDEgT3V0cHV0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U3luY2hyb25pemVkIHRvIHRoZSBQQ0xLIHRvIGFsbG93IHJlYWRpbmcgYnkgc29mdHdhcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDbGVhcmVkIHdoZW4gdGhlIGNvbXBhcmF0b3IgMSBpcyBkaXNhYmxlZCwgaS5lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QUNNUEVOIChBQ01QX0NUTDFbMF0pIGlzIGNsZWFyZWQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKiB8WzhdICAgICB8V0tJRjAgICAgIHxDb21wYXJhdG9yIDAgUG93ZXItZG93biBXYWtlLXVwIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBzZXQgdG8gMSB3aGVuIEFDTVAwIHdha2UtdXAgaW50ZXJydXB0IGV2ZW50IG9jY3Vycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcG93ZXItZG93biB3YWtlLXVwIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQb3dlci1kb3duIHdha2UtdXAgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbOV0gICAgIHxXS0lGMSAgICAgfENvbXBhcmF0b3IgMSBQb3dlci1kb3duIFdha2UtdXAgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIHNldCB0byAxIHdoZW4gQUNNUDEgd2FrZS11cCBpbnRlcnJ1cHQgZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBwb3dlci1kb3duIHdha2UtdXAgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBvd2VyLWRvd24gd2FrZS11cCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFsxMl0gICAgfEFDTVBTMCAgICB8Q29tcGFyYXRvciAwIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFN5bmNocm9uaXplZCB0byB0aGUgUENMSyB0byBhbGxvdyByZWFkaW5nIGJ5IHNvZnR3YXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2xlYXJlZCB3aGVuIHRoZSBjb21wYXJhdG9yIDAgaXMgZGlzYWJsZWQsIGkuZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFDTVBFTiAoQUNNUF9DVEwwWzBdKSBpcyBjbGVhcmVkIHRvIDAuCisgICAgICogfFsxM10gICAgfEFDTVBTMSAgICB8Q29tcGFyYXRvciAxIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFN5bmNocm9uaXplZCB0byB0aGUgUENMSyB0byBhbGxvdyByZWFkaW5nIGJ5IHNvZnR3YXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2xlYXJlZCB3aGVuIHRoZSBjb21wYXJhdG9yIDEgaXMgZGlzYWJsZWQsIGkuZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFDTVBFTiAoQUNNUF9DVEwxWzBdKSBpcyBjbGVhcmVkIHRvIDAuCisgICAgICogfFsxNl0gICAgfEFDTVBXTyAgICB8Q29tcGFyYXRvciBXaW5kb3cgT3V0cHV0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgc2hvd3MgdGhlIG91dHB1dCBzdGF0dXMgb2Ygd2luZG93IGNvbXBhcmUgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcG9zaXRpdmUgaW5wdXQgdm9sdGFnZSBpcyBvdXRzaWRlIHRoZSB3aW5kb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBwb3NpdGl2ZSBpbnB1dCB2b2x0YWdlIGlzIGluIHRoZSB3aW5kb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogQHZhciBBQ01QX1Q6OlZSRUYKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIEFuYWxvZyBDb21wYXJhdG9yIFJlZmVyZW5jZSBWb2x0YWdlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxDUlZDVEwgICAgfENvbXBhcmF0b3IgUmVmZXJlbmNlIFZvbHRhZ2UgU2V0dGluZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSViA9IENSViBzb3VyY2Ugdm9sdGFnZSAqICgxLzYrQ1JWQ1RMLzI0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKiB8WzZdICAgICB8Q1JWU1NFTCAgIHxDUlYgU291cmNlIFZvbHRhZ2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFZEREEgaXMgc2VsZWN0ZWQgYXMgQ1JWIHNvdXJjZSB2b2x0YWdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVmZXJlbmNlIHZvbHRhZ2UgZGVmaW5lZCBieSBTWVNfVlJFRkNUTCByZWdpc3RlciBpcyBzZWxlY3RlZCBhcyBDUlYgc291cmNlIHZvbHRhZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVExbMl07ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMH4weDAwMDRdIEFuYWxvZyBDb21wYXJhdG9yIDB+MSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBBbmFsb2cgQ29tcGFyYXRvciBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBWUkVGOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gQW5hbG9nIENvbXBhcmF0b3IgUmVmZXJlbmNlIFZvbHRhZ2UgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAqLworCit9IEFDTVBfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgQUNNUF9DT05TVCBBQ01QIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIEFDTVAgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBBQ01QX0NUTF9BQ01QRU5fUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogQUNNUEVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX0FDTVBFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfQ1RMX0FDTVBFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBBQ01QRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9BQ01QSUVfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogQUNNUElFIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX0FDTVBJRV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfQ1RMX0FDTVBJRV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBBQ01QSUUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9IWVNFTl9Qb3MgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogSFlTRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX0hZU0VOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfQ1RMX0hZU0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBIWVNFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9BQ01QT0lOVl9Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogQUNNUE9JTlYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX0FDTVBPSU5WX01zayAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfQ1RMX0FDTVBPSU5WX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBBQ01QT0lOViBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9ORUdTRUxfUG9zICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogTkVHU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX05FR1NFTF9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEFDTVBfQ1RMX05FR1NFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBORUdTRUwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9QT1NTRUxfUG9zICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogUE9TU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX1BPU1NFTF9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEFDTVBfQ1RMX1BPU1NFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBQT1NTRUwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9JTlRQT0xfUG9zICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogSU5UUE9MIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX0lOVFBPTF9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEFDTVBfQ1RMX0lOVFBPTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBJTlRQT0wgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9PVVRTRUxfUG9zICAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogT1VUU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX09VVFNFTF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfQ1RMX09VVFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBPVVRTRUwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9GSUxUU0VMX1BvcyAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogRklMVFNFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX0ZJTFRTRUxfTXNrICAgICAgICAgICAgKDB4N3VsIDw8IEFDTVBfQ1RMX0ZJTFRTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBGSUxUU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9XS0VOX1BvcyAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogV0tFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX1dLRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfQ1RMX1dLRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBXS0VOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9XTEFURU5fUG9zICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogV0xBVEVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX1dMQVRFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfQ1RMX1dMQVRFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBXTEFURU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9XQ01QU0VMX1BvcyAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogV0NNUFNFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX1dDTVBTRUxfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfQ1RMX1dDTVBTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBXQ01QU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9IWVNTRUxfUG9zICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogSFlTU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX0hZU1NFTF9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEFDTVBfQ1RMX0hZU1NFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBIWVNTRUwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX0NUTF9NT0RFU0VMX1BvcyAgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OkNUTDogTU9ERVNFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEFDTVBfQ1RMX01PREVTRUxfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEFDTVBfQ1RMX01PREVTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBNT0RFU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX1NUQVRVU19BQ01QSUYwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpTVEFUVVM6IEFDTVBJRjAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQUNNUF9TVEFUVVNfQUNNUElGMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfU1RBVFVTX0FDTVBJRjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6U1RBVFVTOiBBQ01QSUYwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQUNNUF9TVEFUVVNfQUNNUElGMV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6U1RBVFVTOiBBQ01QSUYxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEFDTVBfU1RBVFVTX0FDTVBJRjFfTXNrICAgICAgICAgICgweDF1bCA8PCBBQ01QX1NUQVRVU19BQ01QSUYxX1BvcykgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlNUQVRVUzogQUNNUElGMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfU1RBVFVTX0FDTVBPMF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlNUQVRVUzogQUNNUE8wIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBBQ01QX1NUQVRVU19BQ01QTzBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9TVEFUVVNfQUNNUE8wX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpTVEFUVVM6IEFDTVBPMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX1NUQVRVU19BQ01QTzFfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpTVEFUVVM6IEFDTVBPMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9TVEFUVVNfQUNNUE8xX01zayAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfU1RBVFVTX0FDTVBPMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6U1RBVFVTOiBBQ01QTzEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQUNNUF9TVEFUVVNfV0tJRjBfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6U1RBVFVTOiBXS0lGMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEFDTVBfU1RBVFVTX1dLSUYwX01zayAgICAgICAgICAgICgweDF1bCA8PCBBQ01QX1NUQVRVU19XS0lGMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlNUQVRVUzogV0tJRjAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfU1RBVFVTX1dLSUYxX1BvcyAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlNUQVRVUzogV0tJRjEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBBQ01QX1NUQVRVU19XS0lGMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9TVEFUVVNfV0tJRjFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpTVEFUVVM6IFdLSUYxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX1NUQVRVU19BQ01QUzBfUG9zICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpTVEFUVVM6IEFDTVBTMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9TVEFUVVNfQUNNUFMwX01zayAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfU1RBVFVTX0FDTVBTMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6U1RBVFVTOiBBQ01QUzAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQUNNUF9TVEFUVVNfQUNNUFMxX1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6U1RBVFVTOiBBQ01QUzEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEFDTVBfU1RBVFVTX0FDTVBTMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBBQ01QX1NUQVRVU19BQ01QUzFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlNUQVRVUzogQUNNUFMxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfU1RBVFVTX0FDTVBXT19Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlNUQVRVUzogQUNNUFdPIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBBQ01QX1NUQVRVU19BQ01QV09fTXNrICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9TVEFUVVNfQUNNUFdPX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpTVEFUVVM6IEFDTVBXTyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX1ZSRUZfQ1JWQ1RMX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpWUkVGOiBDUlZDVEwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9WUkVGX0NSVkNUTF9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IEFDTVBfVlJFRl9DUlZDVExfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6VlJFRjogQ1JWQ1RMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQUNNUF9WUkVGX0NSVlNTRUxfUG9zICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6VlJFRjogQ1JWU1NFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEFDTVBfVlJFRl9DUlZTU0VMX01zayAgICAgICAgICAgICgweDF1bCA8PCBBQ01QX1ZSRUZfQ1JWU1NFTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlZSRUY6IENSVlNTRUwgTWFzayAgICAgICAgICAgICAqLworCisvKipAfSovIC8qIEFDTVBfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIEFDTVAgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKyNlbmRpZiAvKiBfX0FDTVBfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2Jwd21fcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvYnB3bV9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTlhMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2Jwd21fcmVnLmgKQEAgLTAsMCArMSwxNzk4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgYnB3bV9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgQlBXTSByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19CUFdNX1JFR19IX18KKyNkZWZpbmUgX19CUFdNX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCYXNpYyBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBCUFdNIEJhc2ljIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlcihCUFdNKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBCUFdNIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqCisgICAgICogQHZhciBCQ0FQREFUX1Q6OlJDQVBEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MjBDICBCUFdNIFJpc2luZyBDYXB0dXJlIERhdGEgUmVnaXN0ZXIgMH41CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UkNBUERBVCAgIHxCUFdNIFJpc2luZyBDYXB0dXJlIERhdGEgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHJpc2luZyBjYXB0dXJlIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhlIEJQV00gY291bnRlciB2YWx1ZSB3aWxsIGJlIHNhdmVkIGluIHRoaXMgcmVnaXN0ZXIuCisgICAgICogQHZhciBCQ0FQREFUX1Q6OkZDQVBEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MjEwICBCUFdNIEZhbGxpbmcgQ2FwdHVyZSBEYXRhIFJlZ2lzdGVyIDB+NQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfEZDQVBEQVQgICB8QlBXTSBGYWxsaW5nIENhcHR1cmUgRGF0YSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gZmFsbGluZyBjYXB0dXJlIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhlIEJQV00gY291bnRlciB2YWx1ZSB3aWxsIGJlIHNhdmVkIGluIHRoaXMgcmVnaXN0ZXIuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBSQ0FQREFUOyAvKiE8IFsweDIwQy8weDIxNC8weDIxQy8weDIyNC8weDIyQy8weDIzNF0gQlBXTSBSaXNpbmcgQ2FwdHVyZSBEYXRhIFJlZ2lzdGVyIDB+NSAqLworICAgIF9fSU8gdWludDMyX3QgRkNBUERBVDsgLyohPCBbMHgyMTAvMHgyMTgvMHgyMjAvMHgyMjgvMHgyMzAvMHgyMzhdIEJQV00gRmFsbGluZyBDYXB0dXJlIERhdGEgUmVnaXN0ZXIgMH41ICovCit9IEJDQVBEQVRfVDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKgorICAgICAqIEB2YXIgQlBXTV9UOjpDVEwwCisgICAgICogT2Zmc2V0OiAweDAwICBCUFdNIENvbnRyb2wgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENUUkxEMCAgICB8Q2VudGVyIFJlLWxvYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwLWRvd24gY291bnRlciB0eXBlLCBQRVJJT0Qgd2lsbCBsb2FkIHRvIFBCVUYgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVCB3aWxsIGxvYWQgdG8gQ01QQlVGIGF0IHRoZSBjZW50ZXIgcG9pbnQgb2YgYSBwZXJpb2QKKyAgICAgKiB8WzFdICAgICB8Q1RSTEQxICAgIHxDZW50ZXIgUmUtbG9hZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gdXAtZG93biBjb3VudGVyIHR5cGUsIFBFUklPRCB3aWxsIGxvYWQgdG8gUEJVRiBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUIHdpbGwgbG9hZCB0byBDTVBCVUYgYXQgdGhlIGNlbnRlciBwb2ludCBvZiBhIHBlcmlvZAorICAgICAqIHxbMl0gICAgIHxDVFJMRDIgICAgfENlbnRlciBSZS1sb2FkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cC1kb3duIGNvdW50ZXIgdHlwZSwgUEVSSU9EIHdpbGwgbG9hZCB0byBQQlVGIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQgd2lsbCBsb2FkIHRvIENNUEJVRiBhdCB0aGUgY2VudGVyIHBvaW50IG9mIGEgcGVyaW9kCisgICAgICogfFszXSAgICAgfENUUkxEMyAgICB8Q2VudGVyIFJlLWxvYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwLWRvd24gY291bnRlciB0eXBlLCBQRVJJT0Qgd2lsbCBsb2FkIHRvIFBCVUYgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVCB3aWxsIGxvYWQgdG8gQ01QQlVGIGF0IHRoZSBjZW50ZXIgcG9pbnQgb2YgYSBwZXJpb2QKKyAgICAgKiB8WzRdICAgICB8Q1RSTEQ0ICAgIHxDZW50ZXIgUmUtbG9hZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gdXAtZG93biBjb3VudGVyIHR5cGUsIFBFUklPRCB3aWxsIGxvYWQgdG8gUEJVRiBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUIHdpbGwgbG9hZCB0byBDTVBCVUYgYXQgdGhlIGNlbnRlciBwb2ludCBvZiBhIHBlcmlvZAorICAgICAqIHxbNV0gICAgIHxDVFJMRDUgICAgfENlbnRlciBSZS1sb2FkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cC1kb3duIGNvdW50ZXIgdHlwZSwgUEVSSU9EIHdpbGwgbG9hZCB0byBQQlVGIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQgd2lsbCBsb2FkIHRvIENNUEJVRiBhdCB0aGUgY2VudGVyIHBvaW50IG9mIGEgcGVyaW9kCisgICAgICogfFsxNl0gICAgfElNTUxERU4wICB8SW1tZWRpYXRlbHkgTG9hZCBFbmFibGUgQml0KFMpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9EIHdpbGwgbG9hZCB0byBQQlVGIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQgd2lsbCBsb2FkIHRvIENNUEJVRiBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxEIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9EL0NNUERBVCB3aWxsIGxvYWQgdG8gUEJVRiBhbmQgQ01QQlVGIGltbWVkaWF0ZWx5IHdoZW4gc29mdHdhcmUgdXBkYXRlIFBFUklPRC9DTVBEQVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSU1NTERFTm4gaXMgRW5hYmxlZCwgV0lOTERFTm4gYW5kIENUUkxEbiB3aWxsIGJlIGludmFsaWQuCisgICAgICogfFsxN10gICAgfElNTUxERU4xICB8SW1tZWRpYXRlbHkgTG9hZCBFbmFibGUgQml0KFMpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9EIHdpbGwgbG9hZCB0byBQQlVGIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQgd2lsbCBsb2FkIHRvIENNUEJVRiBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxEIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9EL0NNUERBVCB3aWxsIGxvYWQgdG8gUEJVRiBhbmQgQ01QQlVGIGltbWVkaWF0ZWx5IHdoZW4gc29mdHdhcmUgdXBkYXRlIFBFUklPRC9DTVBEQVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSU1NTERFTm4gaXMgRW5hYmxlZCwgV0lOTERFTm4gYW5kIENUUkxEbiB3aWxsIGJlIGludmFsaWQuCisgICAgICogfFsxOF0gICAgfElNTUxERU4yICB8SW1tZWRpYXRlbHkgTG9hZCBFbmFibGUgQml0KFMpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9EIHdpbGwgbG9hZCB0byBQQlVGIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQgd2lsbCBsb2FkIHRvIENNUEJVRiBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxEIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9EL0NNUERBVCB3aWxsIGxvYWQgdG8gUEJVRiBhbmQgQ01QQlVGIGltbWVkaWF0ZWx5IHdoZW4gc29mdHdhcmUgdXBkYXRlIFBFUklPRC9DTVBEQVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSU1NTERFTm4gaXMgRW5hYmxlZCwgV0lOTERFTm4gYW5kIENUUkxEbiB3aWxsIGJlIGludmFsaWQuCisgICAgICogfFsxOV0gICAgfElNTUxERU4zICB8SW1tZWRpYXRlbHkgTG9hZCBFbmFibGUgQml0KFMpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9EIHdpbGwgbG9hZCB0byBQQlVGIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQgd2lsbCBsb2FkIHRvIENNUEJVRiBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxEIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9EL0NNUERBVCB3aWxsIGxvYWQgdG8gUEJVRiBhbmQgQ01QQlVGIGltbWVkaWF0ZWx5IHdoZW4gc29mdHdhcmUgdXBkYXRlIFBFUklPRC9DTVBEQVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSU1NTERFTm4gaXMgRW5hYmxlZCwgV0lOTERFTm4gYW5kIENUUkxEbiB3aWxsIGJlIGludmFsaWQuCisgICAgICogfFsyMF0gICAgfElNTUxERU40ICB8SW1tZWRpYXRlbHkgTG9hZCBFbmFibGUgQml0KFMpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9EIHdpbGwgbG9hZCB0byBQQlVGIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQgd2lsbCBsb2FkIHRvIENNUEJVRiBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxEIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9EL0NNUERBVCB3aWxsIGxvYWQgdG8gUEJVRiBhbmQgQ01QQlVGIGltbWVkaWF0ZWx5IHdoZW4gc29mdHdhcmUgdXBkYXRlIFBFUklPRC9DTVBEQVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSU1NTERFTm4gaXMgRW5hYmxlZCwgV0lOTERFTm4gYW5kIENUUkxEbiB3aWxsIGJlIGludmFsaWQuCisgICAgICogfFsyMV0gICAgfElNTUxERU41ICB8SW1tZWRpYXRlbHkgTG9hZCBFbmFibGUgQml0KFMpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9EIHdpbGwgbG9hZCB0byBQQlVGIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQgd2lsbCBsb2FkIHRvIENNUEJVRiBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxEIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9EL0NNUERBVCB3aWxsIGxvYWQgdG8gUEJVRiBhbmQgQ01QQlVGIGltbWVkaWF0ZWx5IHdoZW4gc29mdHdhcmUgdXBkYXRlIFBFUklPRC9DTVBEQVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSU1NTERFTm4gaXMgRW5hYmxlZCwgV0lOTERFTm4gYW5kIENUUkxEbiB3aWxsIGJlIGludmFsaWQuCisgICAgICogfFszMF0gICAgfERCR0hBTFQgICB8SUNFIERlYnVnIE1vZGUgQ291bnRlciBIYWx0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIGNvdW50ZXIgaGFsdCBpcyBlbmFibGVkLCBCUFdNIGFsbCBjb3VudGVycyB3aWxsIGtlZXAgY3VycmVudCB2YWx1ZSB1bnRpbCBleGl0IElDRSBkZWJ1ZyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJQ0UgZGVidWcgbW9kZSBjb3VudGVyIGhhbHQgRGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSUNFIGRlYnVnIG1vZGUgY291bnRlciBoYWx0IEVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFszMV0gICAgfERCR1RSSU9GRiB8SUNFIERlYnVnIE1vZGUgQWNrbm93bGVkZ2UgRGlzYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSUNFIGRlYnVnIG1vZGUgYWNrbm93bGVkZ2VtZW50IGVmZmVjdHMgQlBXTSBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBwaW4gd2lsbCBiZSBmb3JjZWQgYXMgdHJpLXN0YXRlIHdoaWxlIElDRSBkZWJ1ZyBtb2RlIGFja25vd2xlZGdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSUNFIGRlYnVnIG1vZGUgYWNrbm93bGVkZ2VtZW50IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gcGluIHdpbGwga2VlcCBvdXRwdXQgbm8gbWF0dGVyIElDRSBkZWJ1ZyBtb2RlIGFja25vd2xlZGdlZCBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgQlBXTV9UOjpDVEwxCisgICAgICogT2Zmc2V0OiAweDA0ICBCUFdNIENvbnRyb2wgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfENOVFRZUEUwICB8QlBXTSBDb3VudGVyIEJlaGF2aW9yIFR5cGUgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFVwIGNvdW50ZXIgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IERvd24gY291bnQgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogQHZhciBCUFdNX1Q6OkNMS1NSQworICAgICAqIE9mZnNldDogMHgxMCAgQlBXTSBDbG9jayBTb3VyY2UgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxFQ0xLU1JDMCAgfEJQV01fQ0gwMSBFeHRlcm5hbCBDbG9jayBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gQlBXTXhfQ0xLLCB4IGRlbm90ZXMgMCBvciAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IFRJTUVSMCBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBUSU1FUjEgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gVElNRVIyIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFRJTUVSMyBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiBAdmFyIEJQV01fVDo6Q0xLUFNDCisgICAgICogT2Zmc2V0OiAweDE0ICBCUFdNIENsb2NrIFByZXNjYWxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzExOjBdICB8Q0xLUFNDICAgIHxCUFdNIENvdW50ZXIgQ2xvY2sgUHJlc2NhbGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY2xvY2sgb2YgQlBXTSBjb3VudGVyIGlzIGRlY2lkZWQgYnkgY2xvY2sgcHJlc2NhbGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBCUFdNIHBhaXIgc2hhcmUgb25lIEJQV00gY291bnRlciBjbG9jayBwcmVzY2FsZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY2xvY2sgb2YgQlBXTSBjb3VudGVyIGlzIGRpdmlkZWQgYnkgKENMS1BTQysgMSkKKyAgICAgKiBAdmFyIEJQV01fVDo6Q05URU4KKyAgICAgKiBPZmZzZXQ6IDB4MjAgIEJQV00gQ291bnRlciBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDTlRFTjAgICAgfEJQV00gQ291bnRlciAwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBDb3VudGVyIGFuZCBjbG9jayBwcmVzY2FsZXIgc3RvcCBydW5uaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIENvdW50ZXIgYW5kIGNsb2NrIHByZXNjYWxlciBzdGFydCBydW5uaW5nLgorICAgICAqIEB2YXIgQlBXTV9UOjpDTlRDTFIKKyAgICAgKiBPZmZzZXQ6IDB4MjQgIEJQV00gQ2xlYXIgQ291bnRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENOVENMUjAgICB8Q2xlYXIgQlBXTSBDb3VudGVyIENvbnRyb2wgQml0IDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgMTYtYml0IEJQV00gY291bnRlciB0byAwMDAwSC4KKyAgICAgKiBAdmFyIEJQV01fVDo6UEVSSU9ECisgICAgICogT2Zmc2V0OiAweDMwICBCUFdNIFBlcmlvZCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFBFUklPRCAgICB8QlBXTSBQZXJpb2QgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVcC1Db3VudCBtb2RlOiBJbiB0aGlzIG1vZGUsIEJQV00gY291bnRlciBjb3VudHMgZnJvbSAwIHRvIFBFUklPRCwgYW5kIHJlc3RhcnRzIGZyb20gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEb3duLUNvdW50IG1vZGU6IEluIHRoaXMgbW9kZSwgQlBXTSBjb3VudGVyIGNvdW50cyBmcm9tIFBFUklPRCB0byAwLCBhbmQgcmVzdGFydHMgZnJvbSBQRVJJT0QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBwZXJpb2QgdGltZSA9IChQRVJJT0QrMSkgKiBCUFdNX0NMSyBwZXJpb2QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXAtRG93bi1Db3VudCBtb2RlOiBJbiB0aGlzIG1vZGUsIEJQV00gY291bnRlciBjb3VudHMgZnJvbSAwIHRvIFBFUklPRCwgdGhlbiBkZWNyZW1lbnRzIHRvIDAgYW5kIHJlcGVhdHMgYWdhaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBwZXJpb2QgdGltZSA9IDIgKiBQRVJJT0QgKiBCUFdNX0NMSyBwZXJpb2QuCisgICAgICogQHZhciBCUFdNX1Q6OkNNUERBVFs2XQorICAgICAqIE9mZnNldDogMHg1MCAgQlBXTSBDb21wYXJhdG9yIFJlZ2lzdGVyIDB+NQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfENNUERBVCAgICB8QlBXTSBDb21wYXJhdG9yIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUIHVzZSB0byBjb21wYXJlIHdpdGggQ05UUiB0byBnZW5lcmF0ZSBCUFdNIHdhdmVmb3JtLCBpbnRlcnJ1cHQgYW5kIHRyaWdnZXIgRUFEQy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBpbmRlcGVuZGVudCBtb2RlLCBDTVBEQVQwfjUgZGVub3RlIGFzIDYgaW5kZXBlbmRlbnQgQlBXTV9DSDB+NSBjb21wYXJlZCBwb2ludC4KKyAgICAgKiBAdmFyIEJQV01fVDo6Q05UCisgICAgICogT2Zmc2V0OiAweDkwICBCUFdNIENvdW50ZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxDTlQgICAgICAgfEJQV00gRGF0YSBSZWdpc3RlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIG1vbml0b3IgQ05UUiB0byBrbm93IHRoZSBjdXJyZW50IHZhbHVlIGluIDE2LWJpdCBwZXJpb2QgY291bnRlci4KKyAgICAgKiB8WzE2XSAgICB8RElSRiAgICAgIHxCUFdNIERpcmVjdGlvbiBJbmRpY2F0b3IgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb3VudGVyIGlzIERvd24gY291bnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvdW50ZXIgaXMgVVAgY291bnQuCisgICAgICogQHZhciBCUFdNX1Q6OldHQ1RMMAorICAgICAqIE9mZnNldDogMHhCMCAgQlBXTSBHZW5lcmF0aW9uIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxaUENUTDAgICAgfEJQV00gWmVybyBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIHplcm8gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gemVybyBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gemVybyBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIGNvdW50IHRvIHplcm8uCisgICAgICogfFszOjJdICAgfFpQQ1RMMSAgICB8QlBXTSBaZXJvIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gemVybyBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSB6ZXJvIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSB6ZXJvIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgY291bnQgdG8gemVyby4KKyAgICAgKiB8WzU6NF0gICB8WlBDVEwyICAgIHxCUFdNIFplcm8gUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSB6ZXJvIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIHplcm8gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIHplcm8gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciBjb3VudCB0byB6ZXJvLgorICAgICAqIHxbNzo2XSAgIHxaUENUTDMgICAgfEJQV00gWmVybyBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIHplcm8gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gemVybyBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gemVybyBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIGNvdW50IHRvIHplcm8uCisgICAgICogfFs5OjhdICAgfFpQQ1RMNCAgICB8QlBXTSBaZXJvIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gemVybyBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSB6ZXJvIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSB6ZXJvIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgY291bnQgdG8gemVyby4KKyAgICAgKiB8WzExOjEwXSB8WlBDVEw1ICAgIHxCUFdNIFplcm8gUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSB6ZXJvIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIHplcm8gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIHplcm8gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciBjb3VudCB0byB6ZXJvLgorICAgICAqIHxbMTc6MTZdIHxQUkRQQ1RMMCAgfEJQV00gUGVyaW9kIChDZW50ZXIpIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgY291bnQgdG8gKFBFUklPRCsxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjZW50ZXIgcG9pbnQgY29udHJvbCB3aGVuIEJQV00gY291bnRlciBvcGVyYXRpbmcgaW4gdXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfFsxOToxOF0gfFBSRFBDVEwxICB8QlBXTSBQZXJpb2QgKENlbnRlcikgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciBjb3VudCB0byAoUEVSSU9EKzEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNlbnRlciBwb2ludCBjb250cm9sIHdoZW4gQlBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiB1cC1kb3duIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8WzIxOjIwXSB8UFJEUENUTDIgIHxCUFdNIFBlcmlvZCAoQ2VudGVyKSBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIGNvdW50IHRvIChQRVJJT0QrMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2VudGVyIHBvaW50IGNvbnRyb2wgd2hlbiBCUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIHVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHxbMjM6MjJdIHxQUkRQQ1RMMyAgfEJQV00gUGVyaW9kIChDZW50ZXIpIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgY291bnQgdG8gKFBFUklPRCsxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjZW50ZXIgcG9pbnQgY29udHJvbCB3aGVuIEJQV00gY291bnRlciBvcGVyYXRpbmcgaW4gdXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfFsyNToyNF0gfFBSRFBDVEw0ICB8QlBXTSBQZXJpb2QgKENlbnRlcikgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciBjb3VudCB0byAoUEVSSU9EKzEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNlbnRlciBwb2ludCBjb250cm9sIHdoZW4gQlBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiB1cC1kb3duIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8WzI3OjI2XSB8UFJEUENUTDUgIHxCUFdNIFBlcmlvZCAoQ2VudGVyKSBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIGNvdW50IHRvIChQRVJJT0QrMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2VudGVyIHBvaW50IGNvbnRyb2wgd2hlbiBCUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIHVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIEB2YXIgQlBXTV9UOjpXR0NUTDEKKyAgICAgKiBPZmZzZXQ6IDB4QjQgIEJQV00gR2VuZXJhdGlvbiBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8Q01QVUNUTDAgIHxCUFdNIENvbXBhcmUgVXAgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQuCisgICAgICogfFszOjJdICAgfENNUFVDVEwxICB8QlBXTSBDb21wYXJlIFVwIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gQ01QREFULgorICAgICAqIHxbNTo0XSAgIHxDTVBVQ1RMMiAgfEJQV00gQ29tcGFyZSBVcCBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8Wzc6Nl0gICB8Q01QVUNUTDMgIHxCUFdNIENvbXBhcmUgVXAgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQuCisgICAgICogfFs5OjhdICAgfENNUFVDVEw0ICB8QlBXTSBDb21wYXJlIFVwIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gQ01QREFULgorICAgICAqIHxbMTE6MTBdIHxDTVBVQ1RMNSAgfEJQV00gQ29tcGFyZSBVcCBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8WzE3OjE2XSB8Q01QRENUTDAgIHxCUFdNIENvbXBhcmUgRG93biBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFULgorICAgICAqIHxbMTk6MThdIHxDTVBEQ1RMMSAgfEJQV00gQ29tcGFyZSBEb3duIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byBDTVBEQVQuCisgICAgICogfFsyMToyMF0gfENNUERDVEwyICB8QlBXTSBDb21wYXJlIERvd24gUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8WzIzOjIyXSB8Q01QRENUTDMgIHxCUFdNIENvbXBhcmUgRG93biBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFULgorICAgICAqIHxbMjU6MjRdIHxDTVBEQ1RMNCAgfEJQV00gQ29tcGFyZSBEb3duIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byBDTVBEQVQuCisgICAgICogfFsyNzoyNl0gfENNUERDVEw1ICB8QlBXTSBDb21wYXJlIERvd24gUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiBAdmFyIEJQV01fVDo6TVNLRU4KKyAgICAgKiBPZmZzZXQ6IDB4QjggIEJQV00gTWFzayBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxNU0tFTjAgICAgfEJQV00gTWFzayBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEJQV00gb3V0cHV0IHNpZ25hbCB3aWxsIGJlIG1hc2tlZCB3aGVuIHRoaXMgYml0IGlzIGVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbiB3aWxsIG91dHB1dCBNU0tEQVRuIChCUFdNX01TS1s1OjBdKSBkYXRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIG91dHB1dCBzaWduYWwgaXMgbm9uLW1hc2tlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBvdXRwdXQgc2lnbmFsIGlzIG1hc2tlZCBhbmQgb3V0cHV0IE1TS0RBVG4gZGF0YS4KKyAgICAgKiB8WzFdICAgICB8TVNLRU4xICAgIHxCUFdNIE1hc2sgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBCUFdNIG91dHB1dCBzaWduYWwgd2lsbCBiZSBtYXNrZWQgd2hlbiB0aGlzIGJpdCBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4gd2lsbCBvdXRwdXQgTVNLREFUbiAoQlBXTV9NU0tbNTowXSkgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBvdXRwdXQgc2lnbmFsIGlzIG5vbi1tYXNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gb3V0cHV0IHNpZ25hbCBpcyBtYXNrZWQgYW5kIG91dHB1dCBNU0tEQVRuIGRhdGEuCisgICAgICogfFsyXSAgICAgfE1TS0VOMiAgICB8QlBXTSBNYXNrIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQlBXTSBvdXRwdXQgc2lnbmFsIHdpbGwgYmUgbWFza2VkIHdoZW4gdGhpcyBiaXQgaXMgZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuIHdpbGwgb3V0cHV0IE1TS0RBVG4gKEJQV01fTVNLWzU6MF0pIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gb3V0cHV0IHNpZ25hbCBpcyBub24tbWFza2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIG91dHB1dCBzaWduYWwgaXMgbWFza2VkIGFuZCBvdXRwdXQgTVNLREFUbiBkYXRhLgorICAgICAqIHxbM10gICAgIHxNU0tFTjMgICAgfEJQV00gTWFzayBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEJQV00gb3V0cHV0IHNpZ25hbCB3aWxsIGJlIG1hc2tlZCB3aGVuIHRoaXMgYml0IGlzIGVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbiB3aWxsIG91dHB1dCBNU0tEQVRuIChCUFdNX01TS1s1OjBdKSBkYXRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIG91dHB1dCBzaWduYWwgaXMgbm9uLW1hc2tlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBvdXRwdXQgc2lnbmFsIGlzIG1hc2tlZCBhbmQgb3V0cHV0IE1TS0RBVG4gZGF0YS4KKyAgICAgKiB8WzRdICAgICB8TVNLRU40ICAgIHxCUFdNIE1hc2sgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBCUFdNIG91dHB1dCBzaWduYWwgd2lsbCBiZSBtYXNrZWQgd2hlbiB0aGlzIGJpdCBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4gd2lsbCBvdXRwdXQgTVNLREFUbiAoQlBXTV9NU0tbNTowXSkgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBvdXRwdXQgc2lnbmFsIGlzIG5vbi1tYXNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gb3V0cHV0IHNpZ25hbCBpcyBtYXNrZWQgYW5kIG91dHB1dCBNU0tEQVRuIGRhdGEuCisgICAgICogfFs1XSAgICAgfE1TS0VONSAgICB8QlBXTSBNYXNrIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQlBXTSBvdXRwdXQgc2lnbmFsIHdpbGwgYmUgbWFza2VkIHdoZW4gdGhpcyBiaXQgaXMgZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuIHdpbGwgb3V0cHV0IE1TS0RBVG4gKEJQV01fTVNLWzU6MF0pIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gb3V0cHV0IHNpZ25hbCBpcyBub24tbWFza2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIG91dHB1dCBzaWduYWwgaXMgbWFza2VkIGFuZCBvdXRwdXQgTVNLREFUbiBkYXRhLgorICAgICAqIEB2YXIgQlBXTV9UOjpNU0sKKyAgICAgKiBPZmZzZXQ6IDB4QkMgIEJQV00gTWFzayBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8TVNLREFUMCAgIHxCUFdNIE1hc2sgRGF0YSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGRhdGEgYml0IGNvbnRyb2wgdGhlIHN0YXRlIG9mIEJQV01uIG91dHB1dCBwaW4sIGlmIGNvcnJlc3BvbmRpbmcgbWFzayBmdW5jdGlvbiBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT3V0cHV0IGxvZ2ljIGxvdyB0byBCUFdNbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3V0cHV0IGxvZ2ljIGhpZ2ggdG8gQlBXTW4uCisgICAgICogfFsxXSAgICAgfE1TS0RBVDEgICB8QlBXTSBNYXNrIERhdGEgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBkYXRhIGJpdCBjb250cm9sIHRoZSBzdGF0ZSBvZiBCUFdNbiBvdXRwdXQgcGluLCBpZiBjb3JyZXNwb25kaW5nIG1hc2sgZnVuY3Rpb24gaXMgZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCBsb2dpYyBsb3cgdG8gQlBXTW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE91dHB1dCBsb2dpYyBoaWdoIHRvIEJQV01uLgorICAgICAqIHxbMl0gICAgIHxNU0tEQVQyICAgfEJQV00gTWFzayBEYXRhIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZGF0YSBiaXQgY29udHJvbCB0aGUgc3RhdGUgb2YgQlBXTW4gb3V0cHV0IHBpbiwgaWYgY29ycmVzcG9uZGluZyBtYXNrIGZ1bmN0aW9uIGlzIGVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdXRwdXQgbG9naWMgbG93IHRvIEJQV01uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXRwdXQgbG9naWMgaGlnaCB0byBCUFdNbi4KKyAgICAgKiB8WzNdICAgICB8TVNLREFUMyAgIHxCUFdNIE1hc2sgRGF0YSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGRhdGEgYml0IGNvbnRyb2wgdGhlIHN0YXRlIG9mIEJQV01uIG91dHB1dCBwaW4sIGlmIGNvcnJlc3BvbmRpbmcgbWFzayBmdW5jdGlvbiBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT3V0cHV0IGxvZ2ljIGxvdyB0byBCUFdNbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3V0cHV0IGxvZ2ljIGhpZ2ggdG8gQlBXTW4uCisgICAgICogfFs0XSAgICAgfE1TS0RBVDQgICB8QlBXTSBNYXNrIERhdGEgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBkYXRhIGJpdCBjb250cm9sIHRoZSBzdGF0ZSBvZiBCUFdNbiBvdXRwdXQgcGluLCBpZiBjb3JyZXNwb25kaW5nIG1hc2sgZnVuY3Rpb24gaXMgZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCBsb2dpYyBsb3cgdG8gQlBXTW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE91dHB1dCBsb2dpYyBoaWdoIHRvIEJQV01uLgorICAgICAqIHxbNV0gICAgIHxNU0tEQVQ1ICAgfEJQV00gTWFzayBEYXRhIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZGF0YSBiaXQgY29udHJvbCB0aGUgc3RhdGUgb2YgQlBXTW4gb3V0cHV0IHBpbiwgaWYgY29ycmVzcG9uZGluZyBtYXNrIGZ1bmN0aW9uIGlzIGVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdXRwdXQgbG9naWMgbG93IHRvIEJQV01uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXRwdXQgbG9naWMgaGlnaCB0byBCUFdNbi4KKyAgICAgKiBAdmFyIEJQV01fVDo6UE9MQ1RMCisgICAgICogT2Zmc2V0OiAweEQ0ICBCUFdNIFBpbiBQb2xhciBJbnZlcnNlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UElOVjAgICAgIHxCUFdNIFBJTiBQb2xhciBJbnZlcnNlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgY29udHJvbHMgcG9sYXJpdHkgc3RhdGUgb2YgQlBXTSBvdXRwdXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIG91dHB1dCBwb2xhciBpbnZlcnNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIG91dHB1dCBwb2xhciBpbnZlcnNlIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFBJTlYxICAgICB8QlBXTSBQSU4gUG9sYXIgSW52ZXJzZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIGNvbnRyb2xzIHBvbGFyaXR5IHN0YXRlIG9mIEJQV00gb3V0cHV0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBvdXRwdXQgcG9sYXIgaW52ZXJzZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBvdXRwdXQgcG9sYXIgaW52ZXJzZSBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxQSU5WMiAgICAgfEJQV00gUElOIFBvbGFyIEludmVyc2UgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBjb250cm9scyBwb2xhcml0eSBzdGF0ZSBvZiBCUFdNIG91dHB1dAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gb3V0cHV0IHBvbGFyIGludmVyc2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gb3V0cHV0IHBvbGFyIGludmVyc2UgRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8UElOVjMgICAgIHxCUFdNIFBJTiBQb2xhciBJbnZlcnNlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgY29udHJvbHMgcG9sYXJpdHkgc3RhdGUgb2YgQlBXTSBvdXRwdXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIG91dHB1dCBwb2xhciBpbnZlcnNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIG91dHB1dCBwb2xhciBpbnZlcnNlIEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfFBJTlY0ICAgICB8QlBXTSBQSU4gUG9sYXIgSW52ZXJzZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIGNvbnRyb2xzIHBvbGFyaXR5IHN0YXRlIG9mIEJQV00gb3V0cHV0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBvdXRwdXQgcG9sYXIgaW52ZXJzZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBvdXRwdXQgcG9sYXIgaW52ZXJzZSBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxQSU5WNSAgICAgfEJQV00gUElOIFBvbGFyIEludmVyc2UgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBjb250cm9scyBwb2xhcml0eSBzdGF0ZSBvZiBCUFdNIG91dHB1dAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gb3V0cHV0IHBvbGFyIGludmVyc2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gb3V0cHV0IHBvbGFyIGludmVyc2UgRW5hYmxlZC4KKyAgICAgKiBAdmFyIEJQV01fVDo6UE9FTgorICAgICAqIE9mZnNldDogMHhEOCAgQlBXTSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UE9FTjAgICAgIHxCUFdNIFBpbiBPdXRwdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIHBpbiBhdCB0cmktc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gcGluIGluIG91dHB1dCBtb2RlLgorICAgICAqIHxbMV0gICAgIHxQT0VOMSAgICAgfEJQV00gUGluIE91dHB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gcGluIGF0IHRyaS1zdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBwaW4gaW4gb3V0cHV0IG1vZGUuCisgICAgICogfFsyXSAgICAgfFBPRU4yICAgICB8QlBXTSBQaW4gT3V0cHV0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBwaW4gYXQgdHJpLXN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIHBpbiBpbiBvdXRwdXQgbW9kZS4KKyAgICAgKiB8WzNdICAgICB8UE9FTjMgICAgIHxCUFdNIFBpbiBPdXRwdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIHBpbiBhdCB0cmktc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gcGluIGluIG91dHB1dCBtb2RlLgorICAgICAqIHxbNF0gICAgIHxQT0VONCAgICAgfEJQV00gUGluIE91dHB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gcGluIGF0IHRyaS1zdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBwaW4gaW4gb3V0cHV0IG1vZGUuCisgICAgICogfFs1XSAgICAgfFBPRU41ICAgICB8QlBXTSBQaW4gT3V0cHV0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBwaW4gYXQgdHJpLXN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIHBpbiBpbiBvdXRwdXQgbW9kZS4KKyAgICAgKiBAdmFyIEJQV01fVDo6SU5URU4KKyAgICAgKiBPZmZzZXQ6IDB4RTAgIEJQV00gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFpJRU4wICAgICB8QlBXTSBaZXJvIFBvaW50IEludGVycnVwdCAwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gWmVybyBwb2ludCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFplcm8gcG9pbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfFBJRU4wICAgICB8QlBXTSBQZXJpb2QgUG9pbnQgSW50ZXJydXB0IDAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQZXJpb2QgcG9pbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQZXJpb2QgcG9pbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiB1cC1kb3duIGNvdW50ZXIgdHlwZSBwZXJpb2QgcG9pbnQgbWVhbnMgY2VudGVyIHBvaW50LgorICAgICAqIHxbMTZdICAgIHxDTVBVSUVOMCAgfEJQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE3XSAgICB8Q01QVUlFTjEgIHxCUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxOF0gICAgfENNUFVJRU4yICB8QlBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTldICAgIHxDTVBVSUVOMyAgfEJQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzIwXSAgICB8Q01QVUlFTjQgIHxCUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyMV0gICAgfENNUFVJRU41ICB8QlBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMjRdICAgIHxDTVBESUVOMCAgfEJQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzI1XSAgICB8Q01QRElFTjEgIHxCUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyNl0gICAgfENNUERJRU4yICB8QlBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMjddICAgIHxDTVBESUVOMyAgfEJQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzI4XSAgICB8Q01QRElFTjQgIHxCUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyOV0gICAgfENNUERJRU41ICB8QlBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIEB2YXIgQlBXTV9UOjpJTlRTVFMKKyAgICAgKiBPZmZzZXQ6IDB4RTggIEJQV00gSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxaSUYwICAgICAgfEJQV00gWmVybyBQb2ludCBJbnRlcnJ1cHQgRmxhZyAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gQlBXTV9DSDAgY291bnRlciByZWFjaGVzIHplcm8sIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8uCisgICAgICogfFs4XSAgICAgfFBJRjAgICAgICB8QlBXTSBQZXJpb2QgUG9pbnQgSW50ZXJydXB0IEZsYWcgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEJQV01fQ0gwIGNvdW50ZXIgcmVhY2hlcyBCUFdNX1BFUklPRDAsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8uCisgICAgICogfFsxNl0gICAgfENNUFVJRjAgICB8QlBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBCUFdNIGNvdW50ZXIgdXAgY291bnQgYW5kIHJlYWNoZXMgQlBXTV9DTVBEQVRuLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBDTVBEQVQgZXF1YWwgdG8gUEVSSU9ELCB0aGlzIGZsYWcgaXMgbm90IHdvcmtpbmcgaW4gdXAgY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8WzE3XSAgICB8Q01QVUlGMSAgIHxCUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEJQV00gY291bnRlciB1cCBjb3VudCBhbmQgcmVhY2hlcyBCUFdNX0NNUERBVG4sIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiB1cCBjb3VudGVyIHR5cGUgc2VsZWN0aW9uLgorICAgICAqIHxbMThdICAgIHxDTVBVSUYyICAgfEJQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gQlBXTSBjb3VudGVyIHVwIGNvdW50IGFuZCByZWFjaGVzIEJQV01fQ01QREFUbiwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIHVwIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfFsxOV0gICAgfENNUFVJRjMgICB8QlBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBCUFdNIGNvdW50ZXIgdXAgY291bnQgYW5kIHJlYWNoZXMgQlBXTV9DTVBEQVRuLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBDTVBEQVQgZXF1YWwgdG8gUEVSSU9ELCB0aGlzIGZsYWcgaXMgbm90IHdvcmtpbmcgaW4gdXAgY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8WzIwXSAgICB8Q01QVUlGNCAgIHxCUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEJQV00gY291bnRlciB1cCBjb3VudCBhbmQgcmVhY2hlcyBCUFdNX0NNUERBVG4sIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiB1cCBjb3VudGVyIHR5cGUgc2VsZWN0aW9uLgorICAgICAqIHxbMjFdICAgIHxDTVBVSUY1ICAgfEJQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gQlBXTSBjb3VudGVyIHVwIGNvdW50IGFuZCByZWFjaGVzIEJQV01fQ01QREFUbiwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIHVwIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfFsyNF0gICAgfENNUERJRjAgICB8QlBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gQlBXTSBjb3VudGVyIGRvd24gY291bnQgYW5kIHJlYWNoZXMgQlBXTV9DTVBEQVRuLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiBkb3duIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfFsyNV0gICAgfENNUERJRjEgICB8QlBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gQlBXTSBjb3VudGVyIGRvd24gY291bnQgYW5kIHJlYWNoZXMgQlBXTV9DTVBEQVRuLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiBkb3duIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfFsyNl0gICAgfENNUERJRjIgICB8QlBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gQlBXTSBjb3VudGVyIGRvd24gY291bnQgYW5kIHJlYWNoZXMgQlBXTV9DTVBEQVRuLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiBkb3duIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfFsyN10gICAgfENNUERJRjMgICB8QlBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gQlBXTSBjb3VudGVyIGRvd24gY291bnQgYW5kIHJlYWNoZXMgQlBXTV9DTVBEQVRuLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiBkb3duIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfFsyOF0gICAgfENNUERJRjQgICB8QlBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gQlBXTSBjb3VudGVyIGRvd24gY291bnQgYW5kIHJlYWNoZXMgQlBXTV9DTVBEQVRuLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiBkb3duIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfFsyOV0gICAgfENNUERJRjUgICB8QlBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gQlBXTSBjb3VudGVyIGRvd24gY291bnQgYW5kIHJlYWNoZXMgQlBXTV9DTVBEQVRuLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiBkb3duIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogQHZhciBCUFdNX1Q6OkVBRENUUzAKKyAgICAgKiBPZmZzZXQ6IDB4RjggIEJQV00gVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFRSR1NFTDAgICB8QlBXTV9DSDAgVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gQlBXTV9DSDAgemVybyBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gQlBXTV9DSDAgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBCUFdNX0NIMCB6ZXJvIG9yIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gQlBXTV9DSDAgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSBCUFdNX0NIMCBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gQlBXTV9DSDEgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSBCUFdNX0NIMSBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgcmVzZXJ2ZWQKKyAgICAgKiB8WzddICAgICB8VFJHRU4wICAgIHxCUFdNX0NIMCBUcmlnZ2VyIEVBREMgRW5hYmxlIEJpdAorICAgICAqIHxbMTE6OF0gIHxUUkdTRUwxICAgfEJQV01fQ0gxIFRyaWdnZXIgRUFEQyBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEJQV01fQ0gwIHplcm8gcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEJQV01fQ0gwIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gQlBXTV9DSDAgemVybyBvciBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IEJQV01fQ0gwIHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gQlBXTV9DSDAgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IEJQV01fQ0gxIHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gQlBXTV9DSDEgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIHJlc2VydmVkCisgICAgICogfFsxNV0gICAgfFRSR0VOMSAgICB8QlBXTV9DSDEgVHJpZ2dlciBFQURDIEVuYWJsZSBCaXQKKyAgICAgKiB8WzE5OjE2XSB8VFJHU0VMMiAgIHxCUFdNX0NIMiBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBCUFdNX0NIMiB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBCUFdNX0NIMiBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IEJQV01fQ0gyIHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBCUFdNX0NIMiB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IEJQV01fQ0gyIGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBCUFdNX0NIMyB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IEJQV01fQ0gzIGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyByZXNlcnZlZAorICAgICAqIHxbMjNdICAgIHxUUkdFTjIgICAgfEJQV01fQ0gyIFRyaWdnZXIgRUFEQyBFbmFibGUgQml0CisgICAgICogfFsyNzoyNF0gfFRSR1NFTDMgICB8QlBXTV9DSDMgVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gQlBXTV9DSDIgemVybyBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gQlBXTV9DSDIgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBCUFdNX0NIMiB6ZXJvIG9yIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gQlBXTV9DSDIgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSBCUFdNX0NIMiBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gQlBXTV9DSDMgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSBCUFdNX0NIMyBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgcmVzZXJ2ZWQuCisgICAgICogfFszMV0gICAgfFRSR0VOMyAgICB8QlBXTV9DSDMgVHJpZ2dlciBFQURDIEVuYWJsZSBCaXQKKyAgICAgKiBAdmFyIEJQV01fVDo6RUFEQ1RTMQorICAgICAqIE9mZnNldDogMHhGQyAgQlBXTSBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdCBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8VFJHU0VMNCAgIHxCUFdNX0NINCBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBCUFdNX0NINCB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBCUFdNX0NINCBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IEJQV01fQ0g0IHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBCUFdNX0NINCB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IEJQV01fQ0g0IGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBCUFdNX0NINSB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IEJQV01fQ0g1IGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyByZXNlcnZlZAorICAgICAqIHxbN10gICAgIHxUUkdFTjQgICAgfEJQV01fQ0g0IFRyaWdnZXIgRUFEQyBFbmFibGUgQml0CisgICAgICogfFsxMTo4XSAgfFRSR1NFTDUgICB8QlBXTV9DSDUgVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gQlBXTV9DSDQgemVybyBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gQlBXTV9DSDQgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBCUFdNX0NINCB6ZXJvIG9yIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gQlBXTV9DSDQgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSBCUFdNX0NINCBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gQlBXTV9DSDUgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSBCUFdNX0NINSBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgcmVzZXJ2ZWQKKyAgICAgKiB8WzE1XSAgICB8VFJHRU41ICAgIHxCUFdNX0NINSBUcmlnZ2VyIEVBREMgRW5hYmxlIEJpdAorICAgICAqIEB2YXIgQlBXTV9UOjpTU0NUTAorICAgICAqIE9mZnNldDogMHgxMTAgIEJQV00gU3luY2hyb25vdXMgU3RhcnQgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNTRU4wICAgICB8QlBXTSBTeW5jaHJvbm91cyBTdGFydCBGdW5jdGlvbiAwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIGlzIGVuYWJsZWQsIHRoZSBCUFdNX0NIMCBjb3VudGVyIGVuYWJsZSBiaXQgKENOVEVOMCkgY2FuIGJlIGVuYWJsZWQgYnkgd3JpdGluZyBCUFdNIHN5bmNocm9ub3VzIHN0YXJ0IHRyaWdnZXIgYml0IChDTlRTRU4pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs5OjhdICAgfFNTUkMgICAgICB8QlBXTSBTeW5jaHJvbm91cyBTdGFydCBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2UgY29tZSBmcm9tIFBXTTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2UgY29tZSBmcm9tIFBXTTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2UgY29tZSBmcm9tIEJQV00wLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gU3luY2hyb25vdXMgc3RhcnQgc291cmNlIGNvbWUgZnJvbSBCUFdNMS4KKyAgICAgKiBAdmFyIEJQV01fVDo6U1NUUkcKKyAgICAgKiBPZmZzZXQ6IDB4MTE0ICBCUFdNIFN5bmNocm9ub3VzIFN0YXJ0IFRyaWdnZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDTlRTRU4gICAgfEJQV00gQ291bnRlciBTeW5jaHJvbm91cyBTdGFydCBFbmFibGUgQml0KFdyaXRlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBNVyBjb3VudGVyIHN5bmNocm9ub3VzIGVuYWJsZSBmdW5jdGlvbiBpcyB1c2VkIHRvIG1ha2UgUFdNIG9yIEJQV00gY2hhbm5lbHMgc3RhcnQgY291bnRpbmcgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRoaXMgYml0IHRvIDEgd2lsbCBhbHNvIHNldCB0aGUgY291bnRlciBlbmFibGUgYml0IGlmIGNvcnJlbGF0ZWQgQlBXTSBjaGFubmVsIGNvdW50ZXIgc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gaXMgZW5hYmxlZC4KKyAgICAgKiBAdmFyIEJQV01fVDo6U1RBVFVTCisgICAgICogT2Zmc2V0OiAweDEyMCAgQlBXTSBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDTlRNQVgwICAgfFRpbWUtYmFzZSBDb3VudGVyIDAgRXF1YWwgdG8gMHhGRkZGIExhdGNoZWQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IGluZGljYXRlcyB0aGUgdGltZS1iYXNlIGNvdW50ZXIgbmV2ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSAweEZGRkYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IGluZGljYXRlcyB0aGUgdGltZS1iYXNlIGNvdW50ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxNl0gICAgfEVBRENUUkcwICB8RUFEQyBTdGFydCBvZiBDb252ZXJzaW9uIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyBubyBFQURDIHN0YXJ0IG9mIGNvbnZlcnNpb24gdHJpZ2dlciBldmVudCBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyBhbiBFQURDIHN0YXJ0IG9mIGNvbnZlcnNpb24gdHJpZ2dlciBldmVudCBoYXMgb2NjdXJyZWQsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbMTddICAgIHxFQURDVFJHMSAgfEVBREMgU3RhcnQgb2YgQ29udmVyc2lvbiBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgYW4gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzE4XSAgICB8RUFEQ1RSRzIgIHxFQURDIFN0YXJ0IG9mIENvbnZlcnNpb24gU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIG5vIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxOV0gICAgfEVBRENUUkczICB8RUFEQyBTdGFydCBvZiBDb252ZXJzaW9uIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyBubyBFQURDIHN0YXJ0IG9mIGNvbnZlcnNpb24gdHJpZ2dlciBldmVudCBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyBhbiBFQURDIHN0YXJ0IG9mIGNvbnZlcnNpb24gdHJpZ2dlciBldmVudCBoYXMgb2NjdXJyZWQsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbMjBdICAgIHxFQURDVFJHNCAgfEVBREMgU3RhcnQgb2YgQ29udmVyc2lvbiBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgYW4gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzIxXSAgICB8RUFEQ1RSRzUgIHxFQURDIFN0YXJ0IG9mIENvbnZlcnNpb24gU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIG5vIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogQHZhciBCUFdNX1Q6OkNBUElORU4KKyAgICAgKiBPZmZzZXQ6IDB4MjAwICBCUFdNIENhcHR1cmUgSW5wdXQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q0FQSU5FTjAgIHxDYXB0dXJlIElucHV0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBEaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBCUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBpcyBhbHdheXMgcmVnYXJkZWQgYXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEJQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGNvbWVzIGZyb20gY29ycmVsYXRpdmUgbXVsdGlmdW5jdGlvbiBwaW4uCisgICAgICogfFsxXSAgICAgfENBUElORU4xICB8Q2FwdHVyZSBJbnB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgQlBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gaXMgYWx3YXlzIHJlZ2FyZGVkIGFzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBCUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBjb21lcyBmcm9tIGNvcnJlbGF0aXZlIG11bHRpZnVuY3Rpb24gcGluLgorICAgICAqIHxbMl0gICAgIHxDQVBJTkVOMiAgfENhcHR1cmUgSW5wdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIERpc2FibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEJQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGlzIGFsd2F5cyByZWdhcmRlZCBhcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgQlBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gY29tZXMgZnJvbSBjb3JyZWxhdGl2ZSBtdWx0aWZ1bmN0aW9uIHBpbi4KKyAgICAgKiB8WzNdICAgICB8Q0FQSU5FTjMgIHxDYXB0dXJlIElucHV0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBEaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBCUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBpcyBhbHdheXMgcmVnYXJkZWQgYXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEJQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGNvbWVzIGZyb20gY29ycmVsYXRpdmUgbXVsdGlmdW5jdGlvbiBwaW4uCisgICAgICogfFs0XSAgICAgfENBUElORU40ICB8Q2FwdHVyZSBJbnB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgQlBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gaXMgYWx3YXlzIHJlZ2FyZGVkIGFzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBCUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBjb21lcyBmcm9tIGNvcnJlbGF0aXZlIG11bHRpZnVuY3Rpb24gcGluLgorICAgICAqIHxbNV0gICAgIHxDQVBJTkVONSAgfENhcHR1cmUgSW5wdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIERpc2FibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEJQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGlzIGFsd2F5cyByZWdhcmRlZCBhcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgQlBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gY29tZXMgZnJvbSBjb3JyZWxhdGl2ZSBtdWx0aWZ1bmN0aW9uIHBpbi4KKyAgICAgKiBAdmFyIEJQV01fVDo6Q0FQQ1RMCisgICAgICogT2Zmc2V0OiAweDIwNCAgQlBXTSBDYXB0dXJlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDQVBFTjAgICAgfENhcHR1cmUgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZ1bmN0aW9uIERpc2FibGVkLiBSQ0FQREFUL0ZDQVBEQVQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmdW5jdGlvbiBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2FwdHVyZSBsYXRjaGVkIHRoZSBCUFdNIGNvdW50ZXIgdmFsdWUgd2hlbiBkZXRlY3RlZCByaXNpbmcgb3IgZmFsbGluZyBlZGdlIG9mIGlucHV0IHNpZ25hbCBhbmQgc2F2ZWQgdG8gUkNBUERBVCAoUmlzaW5nIGxhdGNoKSBhbmQgRkNBUERBVCAoRmFsbGluZyBsYXRjaCkuCisgICAgICogfFsxXSAgICAgfENBUEVOMSAgICB8Q2FwdHVyZSBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgZnVuY3Rpb24gRGlzYWJsZWQuIFJDQVBEQVQvRkNBUERBVCByZWdpc3RlciB3aWxsIG5vdCBiZSB1cGRhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZ1bmN0aW9uIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDYXB0dXJlIGxhdGNoZWQgdGhlIEJQV00gY291bnRlciB2YWx1ZSB3aGVuIGRldGVjdGVkIHJpc2luZyBvciBmYWxsaW5nIGVkZ2Ugb2YgaW5wdXQgc2lnbmFsIGFuZCBzYXZlZCB0byBSQ0FQREFUIChSaXNpbmcgbGF0Y2gpIGFuZCBGQ0FQREFUIChGYWxsaW5nIGxhdGNoKS4KKyAgICAgKiB8WzJdICAgICB8Q0FQRU4yICAgIHxDYXB0dXJlIEZ1bmN0aW9uIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmdW5jdGlvbiBEaXNhYmxlZC4gUkNBUERBVC9GQ0FQREFUIHJlZ2lzdGVyIHdpbGwgbm90IGJlIHVwZGF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZnVuY3Rpb24gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENhcHR1cmUgbGF0Y2hlZCB0aGUgQlBXTSBjb3VudGVyIHZhbHVlIHdoZW4gZGV0ZWN0ZWQgcmlzaW5nIG9yIGZhbGxpbmcgZWRnZSBvZiBpbnB1dCBzaWduYWwgYW5kIHNhdmVkIHRvIFJDQVBEQVQgKFJpc2luZyBsYXRjaCkgYW5kIEZDQVBEQVQgKEZhbGxpbmcgbGF0Y2gpLgorICAgICAqIHxbM10gICAgIHxDQVBFTjMgICAgfENhcHR1cmUgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZ1bmN0aW9uIERpc2FibGVkLiBSQ0FQREFUL0ZDQVBEQVQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmdW5jdGlvbiBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2FwdHVyZSBsYXRjaGVkIHRoZSBCUFdNIGNvdW50ZXIgdmFsdWUgd2hlbiBkZXRlY3RlZCByaXNpbmcgb3IgZmFsbGluZyBlZGdlIG9mIGlucHV0IHNpZ25hbCBhbmQgc2F2ZWQgdG8gUkNBUERBVCAoUmlzaW5nIGxhdGNoKSBhbmQgRkNBUERBVCAoRmFsbGluZyBsYXRjaCkuCisgICAgICogfFs0XSAgICAgfENBUEVONCAgICB8Q2FwdHVyZSBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgZnVuY3Rpb24gRGlzYWJsZWQuIFJDQVBEQVQvRkNBUERBVCByZWdpc3RlciB3aWxsIG5vdCBiZSB1cGRhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZ1bmN0aW9uIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDYXB0dXJlIGxhdGNoZWQgdGhlIEJQV00gY291bnRlciB2YWx1ZSB3aGVuIGRldGVjdGVkIHJpc2luZyBvciBmYWxsaW5nIGVkZ2Ugb2YgaW5wdXQgc2lnbmFsIGFuZCBzYXZlZCB0byBSQ0FQREFUIChSaXNpbmcgbGF0Y2gpIGFuZCBGQ0FQREFUIChGYWxsaW5nIGxhdGNoKS4KKyAgICAgKiB8WzVdICAgICB8Q0FQRU41ICAgIHxDYXB0dXJlIEZ1bmN0aW9uIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmdW5jdGlvbiBEaXNhYmxlZC4gUkNBUERBVC9GQ0FQREFUIHJlZ2lzdGVyIHdpbGwgbm90IGJlIHVwZGF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZnVuY3Rpb24gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENhcHR1cmUgbGF0Y2hlZCB0aGUgQlBXTSBjb3VudGVyIHZhbHVlIHdoZW4gZGV0ZWN0ZWQgcmlzaW5nIG9yIGZhbGxpbmcgZWRnZSBvZiBpbnB1dCBzaWduYWwgYW5kIHNhdmVkIHRvIFJDQVBEQVQgKFJpc2luZyBsYXRjaCkgYW5kIEZDQVBEQVQgKEZhbGxpbmcgbGF0Y2gpLgorICAgICAqIHxbOF0gICAgIHxDQVBJTlYwICAgfENhcHR1cmUgSW52ZXJ0ZXIgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRW5hYmxlZC4gUmV2ZXJzZSB0aGUgaW5wdXQgc2lnbmFsIGZyb20gR1BJTy4KKyAgICAgKiB8WzldICAgICB8Q0FQSU5WMSAgIHxDYXB0dXJlIEludmVydGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgc291cmNlIGludmVydGVyIEVuYWJsZWQuIFJldmVyc2UgdGhlIGlucHV0IHNpZ25hbCBmcm9tIEdQSU8uCisgICAgICogfFsxMF0gICAgfENBUElOVjIgICB8Q2FwdHVyZSBJbnZlcnRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgc291cmNlIGludmVydGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBFbmFibGVkLiBSZXZlcnNlIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBHUElPLgorICAgICAqIHxbMTFdICAgIHxDQVBJTlYzICAgfENhcHR1cmUgSW52ZXJ0ZXIgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRW5hYmxlZC4gUmV2ZXJzZSB0aGUgaW5wdXQgc2lnbmFsIGZyb20gR1BJTy4KKyAgICAgKiB8WzEyXSAgICB8Q0FQSU5WNCAgIHxDYXB0dXJlIEludmVydGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgc291cmNlIGludmVydGVyIEVuYWJsZWQuIFJldmVyc2UgdGhlIGlucHV0IHNpZ25hbCBmcm9tIEdQSU8uCisgICAgICogfFsxM10gICAgfENBUElOVjUgICB8Q2FwdHVyZSBJbnZlcnRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgc291cmNlIGludmVydGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBFbmFibGVkLiBSZXZlcnNlIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBHUElPLgorICAgICAqIHxbMTZdICAgIHxSQ1JMREVOMCAgfFJpc2luZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMTddICAgIHxSQ1JMREVOMSAgfFJpc2luZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMThdICAgIHxSQ1JMREVOMiAgfFJpc2luZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMTldICAgIHxSQ1JMREVOMyAgfFJpc2luZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjBdICAgIHxSQ1JMREVONCAgfFJpc2luZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjFdICAgIHxSQ1JMREVONSAgfFJpc2luZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjRdICAgIHxGQ1JMREVOMCAgfEZhbGxpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjVdICAgIHxGQ1JMREVOMSAgfEZhbGxpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjZdICAgIHxGQ1JMREVOMiAgfEZhbGxpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjddICAgIHxGQ1JMREVOMyAgfEZhbGxpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjhdICAgIHxGQ1JMREVONCAgfEZhbGxpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjldICAgIHxGQ1JMREVONSAgfEZhbGxpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIEB2YXIgQlBXTV9UOjpDQVBTVFMKKyAgICAgKiBPZmZzZXQ6IDB4MjA4ICBCUFdNIENhcHR1cmUgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q1JJRk9WMCAgIHxDYXB0dXJlIFJpc2luZyBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgcmlzaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0FQUklGIGlzIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENBUFJJRi4KKyAgICAgKiB8WzFdICAgICB8Q1JJRk9WMSAgIHxDYXB0dXJlIFJpc2luZyBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgcmlzaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0FQUklGIGlzIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENBUFJJRi4KKyAgICAgKiB8WzJdICAgICB8Q1JJRk9WMiAgIHxDYXB0dXJlIFJpc2luZyBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgcmlzaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0FQUklGIGlzIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENBUFJJRi4KKyAgICAgKiB8WzNdICAgICB8Q1JJRk9WMyAgIHxDYXB0dXJlIFJpc2luZyBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgcmlzaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0FQUklGIGlzIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENBUFJJRi4KKyAgICAgKiB8WzRdICAgICB8Q1JJRk9WNCAgIHxDYXB0dXJlIFJpc2luZyBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgcmlzaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0FQUklGIGlzIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENBUFJJRi4KKyAgICAgKiB8WzVdICAgICB8Q1JJRk9WNSAgIHxDYXB0dXJlIFJpc2luZyBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgcmlzaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0FQUklGIGlzIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENBUFJJRi4KKyAgICAgKiB8WzhdICAgICB8Q0ZJRk9WMCAgIHxDYXB0dXJlIEZhbGxpbmcgSW50ZXJydXB0IEZsYWcgT3ZlcnJ1biBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIGlmIGZhbGxpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDQVBGSUYgaXMgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0FQRklGLgorICAgICAqIHxbOV0gICAgIHxDRklGT1YxICAgfENhcHR1cmUgRmFsbGluZyBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgZmFsbGluZyBsYXRjaCBoYXBwZW5lZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIENBUEZJRiBpcyAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDQVBGSUYuCisgICAgICogfFsxMF0gICAgfENGSUZPVjIgICB8Q2FwdHVyZSBGYWxsaW5nIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiBmYWxsaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0FQRklGIGlzIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENBUEZJRi4KKyAgICAgKiB8WzExXSAgICB8Q0ZJRk9WMyAgIHxDYXB0dXJlIEZhbGxpbmcgSW50ZXJydXB0IEZsYWcgT3ZlcnJ1biBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIGlmIGZhbGxpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDQVBGSUYgaXMgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0FQRklGLgorICAgICAqIHxbMTJdICAgIHxDRklGT1Y0ICAgfENhcHR1cmUgRmFsbGluZyBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgZmFsbGluZyBsYXRjaCBoYXBwZW5lZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIENBUEZJRiBpcyAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDQVBGSUYuCisgICAgICogfFsxM10gICAgfENGSUZPVjUgICB8Q2FwdHVyZSBGYWxsaW5nIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiBmYWxsaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0FQRklGIGlzIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENBUEZJRi4KKyAgICAgKiBAdmFyIEJQV01fVDo6Q0FQSUVOCisgICAgICogT2Zmc2V0OiAweDI1MCAgQlBXTSBDYXB0dXJlIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNTowXSAgIHxDQVBSSUVObiAgfEJQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSByaXNpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxMzo4XSAgfENBUEZJRU5uICB8QlBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmYWxsaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiBAdmFyIEJQV01fVDo6Q0FQSUYKKyAgICAgKiBPZmZzZXQ6IDB4MjU0ICBCUFdNIENhcHR1cmUgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDQVBSSUYwICAgfEJQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuIEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8WzFdICAgICB8Q0FQUklGMSAgIHxCUFdNIENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLiBFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfFsyXSAgICAgfENBUFJJRjIgICB8QlBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4gRWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHxbM10gICAgIHxDQVBSSUYzICAgfEJQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuIEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8WzRdICAgICB8Q0FQUklGNCAgIHxCUFdNIENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLiBFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfFs1XSAgICAgfENBUFJJRjUgICB8QlBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4gRWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHxbOF0gICAgIHxDQVBGSUYwICAgfEJQV00gQ2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLiBFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8WzldICAgICB8Q0FQRklGMSAgIHxCUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4gRWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfFsxMF0gICAgfENBUEZJRjIgICB8QlBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuIEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHxbMTFdICAgIHxDQVBGSUYzICAgfEJQV00gQ2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLiBFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8WzEyXSAgICB8Q0FQRklGNCAgIHxCUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4gRWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfFsxM10gICAgfENBUEZJRjUgICB8QlBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuIEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIEB2YXIgQlBXTV9UOjpQQlVGCisgICAgICogT2Zmc2V0OiAweDMwNCAgQlBXTSBQRVJJT0QgQnVmZmVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UEJVRiAgICAgIHxCUFdNIFBlcmlvZCBCdWZmZXIgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VkIGFzIFBFUklPRCBhY3RpdmUgcmVnaXN0ZXIuCisgICAgICogQHZhciBCUFdNX1Q6OkNNUEJVRls2XQorICAgICAqIE9mZnNldDogMHgzMUMgIEJQV00gQ01QREFUIDB+NSBCdWZmZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxDTVBCVUYgICAgfEJQV00gQ29tcGFyYXRvciBCdWZmZXIgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VkIGFzIENNUCBhY3RpdmUgcmVnaXN0ZXIuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEwwOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gQlBXTSBDb250cm9sIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMMTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIEJQV00gQ29udHJvbCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkVEMFsyXTsKKyAgICBfX0lPIHVpbnQzMl90IENMS1NSQzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBCUFdNIENsb2NrIFNvdXJjZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTEtQU0M7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxNF0gQlBXTSBDbG9jayBQcmVzY2FsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQxWzJdOworICAgIF9fSU8gdWludDMyX3QgQ05URU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjBdIEJQV00gQ291bnRlciBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENOVENMUjsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDI0XSBCUFdNIENsZWFyIENvdW50ZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFRDJbMl07CisgICAgX19JTyB1aW50MzJfdCBQRVJJT0Q7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzMF0gQlBXTSBQZXJpb2QgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQzWzddOworICAgIF9fSU8gdWludDMyX3QgQ01QREFUWzZdOyAgICAgICAgICAgICAvKiE8IFsweDAwNTB+MHgwMDY0XSBCUFdNIENvbXBhcmF0b3IgUmVnaXN0ZXIgMH41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkVENFsxMF07CisgICAgX19JICB1aW50MzJfdCBDTlQ7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA5MF0gQlBXTSBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQ1WzddOworICAgIF9fSU8gdWludDMyX3QgV0dDVEwwOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwYjBdIEJQV00gR2VuZXJhdGlvbiBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFdHQ1RMMTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMGI0XSBCUFdNIEdlbmVyYXRpb24gUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBNU0tFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDBiOF0gQlBXTSBNYXNrIEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTVNLOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwYmNdIEJQV00gTWFzayBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkVENls1XTsKKyAgICBfX0lPIHVpbnQzMl90IFBPTENUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMGQ0XSBCUFdNIFBpbiBQb2xhciBJbnZlcnNlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQT0VOOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDBkOF0gQlBXTSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQ3WzFdOworICAgIF9fSU8gdWludDMyX3QgSU5URU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwZTBdIEJQV00gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkVEOFsxXTsKKyAgICBfX0lPIHVpbnQzMl90IElOVFNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMGU4XSBCUFdNIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFRDlbM107CisgICAgX19JTyB1aW50MzJfdCBFQURDVFMwOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBmOF0gQlBXTSBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdCBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRUFEQ1RTMTsgICAgICAgICAgICAgICAvKiE8IFsweDAwZmNdIEJQV00gVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkVEMTBbNF07CisgICAgX19JTyB1aW50MzJfdCBTU0NUTDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDExMF0gQlBXTSBTeW5jaHJvbm91cyBTdGFydCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fTyAgdWludDMyX3QgU1NUUkc7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAxMTRdIEJQV00gU3luY2hyb25vdXMgU3RhcnQgVHJpZ2dlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkVEMTFbMl07CisgICAgX19JTyB1aW50MzJfdCBTVEFUVVM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDEyMF0gQlBXTSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQxMls1NV07CisgICAgX19JTyB1aW50MzJfdCBDQVBJTkVOOyAgICAgICAgICAgICAgIC8qITwgWzB4MDIwMF0gQlBXTSBDYXB0dXJlIElucHV0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0FQQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAyMDRdIEJQV00gQ2FwdHVyZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IENBUFNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMjA4XSBCUFdNIENhcHR1cmUgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQkNBUERBVF9UIENBUERBVFs2XTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAyMGN+MHgwMjM4XSBCUFdNIFJpc2luZyBhbmQgRmFsbGluZyBDYXB0dXJlIERhdGEgUmVnaXN0ZXIgMH41ICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkVEMTNbNV07CisgICAgX19JTyB1aW50MzJfdCBDQVBJRU47ICAgICAgICAgICAgICAgIC8qITwgWzB4MDI1MF0gQlBXTSBDYXB0dXJlIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0FQSUY7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAyNTRdIEJQV00gQ2FwdHVyZSBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkVEMTRbNDNdOworICAgIF9fSSAgdWludDMyX3QgUEJVRjsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAzMDRdIEJQV00gUEVSSU9EIEJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkVEMTVbNV07CisgICAgX19JICB1aW50MzJfdCBDTVBCVUZbNl07ICAgICAgICAgICAgICAgLyohPCBbMHgwMzFjfjB4MDMzMF0gQlBXTSBDTVBEQVQgMH41IEJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IEJQV01fVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgQlBXTV9DT05TVCBCUFdNIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIEJQV00gQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBCUFdNX0NUTDBfQ1RSTEQwX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBDVFJMRDAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DVEwwX0NUUkxEMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ1RMMF9DVFJMRDBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogQ1RSTEQwIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DVEwwX0NUUkxEMV9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogQ1RSTEQxIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEJQV01fQ1RMMF9DVFJMRDFfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NUTDBfQ1RSTEQxX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IENUUkxEMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ1RMMF9DVFJMRDJfUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IENUUkxEMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBCUFdNX0NUTDBfQ1RSTEQyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DVEwwX0NUUkxEMl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBDVFJMRDIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NUTDBfQ1RSTEQzX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBDVFJMRDMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DVEwwX0NUUkxEM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ1RMMF9DVFJMRDNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogQ1RSTEQzIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DVEwwX0NUUkxENF9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogQ1RSTEQ0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEJQV01fQ1RMMF9DVFJMRDRfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NUTDBfQ1RSTEQ0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IENUUkxENCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ1RMMF9DVFJMRDVfUG9zICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IENUUkxENSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBCUFdNX0NUTDBfQ1RSTEQ1X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DVEwwX0NUUkxENV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBDVFJMRDUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NUTDBfSU1NTERFTjBfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBJTU1MREVOMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DVEwwX0lNTUxERU4wX01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ1RMMF9JTU1MREVOMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogSU1NTERFTjAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DVEwwX0lNTUxERU4xX1BvcyAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogSU1NTERFTjEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ1RMMF9JTU1MREVOMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NUTDBfSU1NTERFTjFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IElNTUxERU4xIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ1RMMF9JTU1MREVOMl9Qb3MgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IElNTUxERU4yIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NUTDBfSU1NTERFTjJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DVEwwX0lNTUxERU4yX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBJTU1MREVOMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NUTDBfSU1NTERFTjNfUG9zICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBJTU1MREVOMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DVEwwX0lNTUxERU4zX01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ1RMMF9JTU1MREVOM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogSU1NTERFTjMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DVEwwX0lNTUxERU40X1BvcyAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogSU1NTERFTjQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ1RMMF9JTU1MREVONF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NUTDBfSU1NTERFTjRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IElNTUxERU40IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ1RMMF9JTU1MREVONV9Qb3MgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IElNTUxERU41IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NUTDBfSU1NTERFTjVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DVEwwX0lNTUxERU41X1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBJTU1MREVONSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NUTDBfREJHSEFMVF9Qb3MgICAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBEQkdIQUxUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DVEwwX0RCR0hBTFRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ1RMMF9EQkdIQUxUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogREJHSEFMVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DVEwwX0RCR1RSSU9GRl9Qb3MgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogREJHVFJJT0ZGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ1RMMF9EQkdUUklPRkZfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NUTDBfREJHVFJJT0ZGX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IERCR1RSSU9GRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ1RMMV9DTlRUWVBFMF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDE6IENOVFRZUEUwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NUTDFfQ05UVFlQRTBfTXNrICAgICAgICAgICAoMHgzdWwgPDwgQlBXTV9DVEwxX0NOVFRZUEUwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwxOiBDTlRUWVBFMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NMS1NSQ19FQ0xLU1JDMF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTEtTUkM6IEVDTEtTUkMwIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DTEtTUkNfRUNMS1NSQzBfTXNrICAgICAgICAgKDB4N3VsIDw8IEJQV01fQ0xLU1JDX0VDTEtTUkMwX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0xLU1JDOiBFQ0xLU1JDMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DTEtQU0NfQ0xLUFNDX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0xLUFNDOiBDTEtQU0MgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0xLUFNDX0NMS1BTQ19Nc2sgICAgICAgICAgICgweGZmZnVsIDw8IEJQV01fQ0xLUFNDX0NMS1BTQ19Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNMS1BTQzogQ0xLUFNDIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ05URU5fQ05URU4wX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNOVEVOOiBDTlRFTjAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBCUFdNX0NOVEVOX0NOVEVOMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DTlRFTl9DTlRFTjBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTlRFTjogQ05URU4wIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NOVENMUl9DTlRDTFIwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTlRDTFI6IENOVENMUjAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DTlRDTFJfQ05UQ0xSMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ05UQ0xSX0NOVENMUjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q05UQ0xSOiBDTlRDTFIwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9QRVJJT0RfUEVSSU9EX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UEVSSU9EOiBQRVJJT0QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fUEVSSU9EX1BFUklPRF9Nc2sgICAgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX1BFUklPRF9QRVJJT0RfUG9zKSAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBFUklPRDogUEVSSU9EIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ01QREFUMF9DTVBEQVRfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUERBVDA6IENNUERBVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NNUERBVDBfQ01QREFUX01zayAgICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9DTVBEQVQwX0NNUERBVF9Qb3MpICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBEQVQwOiBDTVBEQVQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NNUERBVDFfQ01QREFUX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBEQVQxOiBDTVBEQVQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DTVBEQVQxX0NNUERBVF9Nc2sgICAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fQ01QREFUMV9DTVBEQVRfUG9zKSAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QREFUMTogQ01QREFUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DTVBEQVQyX0NNUERBVF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QREFUMjogQ01QREFUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ01QREFUMl9DTVBEQVRfTXNrICAgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0NNUERBVDJfQ01QREFUX1BvcykgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUERBVDI6IENNUERBVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ01QREFUM19DTVBEQVRfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUERBVDM6IENNUERBVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NNUERBVDNfQ01QREFUX01zayAgICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9DTVBEQVQzX0NNUERBVF9Qb3MpICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBEQVQzOiBDTVBEQVQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NNUERBVDRfQ01QREFUX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBEQVQ0OiBDTVBEQVQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DTVBEQVQ0X0NNUERBVF9Nc2sgICAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fQ01QREFUNF9DTVBEQVRfUG9zKSAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QREFUNDogQ01QREFUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DTVBEQVQ1X0NNUERBVF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QREFUNTogQ01QREFUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ01QREFUNV9DTVBEQVRfTXNrICAgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0NNUERBVDVfQ01QREFUX1BvcykgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUERBVDU6IENNUERBVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ05UX0NOVF9Qb3MgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNOVDogQ05UIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBCUFdNX0NOVF9DTlRfTXNrICAgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9DTlRfQ05UX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTlQ6IENOVCBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NOVF9ESVJGX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTlQ6IERJUkYgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DTlRfRElSRl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ05UX0RJUkZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q05UOiBESVJGIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDBfWlBDVEwwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBaUENUTDAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwwX1pQQ1RMMF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMF9aUENUTDBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogWlBDVEwwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwwX1pQQ1RMMV9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogWlBDVEwxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMF9aUENUTDFfTXNrICAgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDBfWlBDVEwxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFpQQ1RMMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMF9aUENUTDJfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFpQQ1RMMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDBfWlBDVEwyX01zayAgICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwwX1pQQ1RMMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBaUENUTDIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDBfWlBDVEwzX1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBaUENUTDMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwwX1pQQ1RMM19Nc2sgICAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMF9aUENUTDNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogWlBDVEwzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwwX1pQQ1RMNF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogWlBDVEw0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMF9aUENUTDRfTXNrICAgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDBfWlBDVEw0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFpQQ1RMNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMF9aUENUTDVfUG9zICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFpQQ1RMNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDBfWlBDVEw1X01zayAgICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwwX1pQQ1RMNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBaUENUTDUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDBfWlBDVExuX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBaUENUTG4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwwX1pQQ1RMbl9Nc2sgICAgICAgICAgICgweGZmZnVsIDw8IEJQV01fV0dDVEwwX1pQQ1RMbl9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogWlBDVExuIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwwX1BSRFBDVEwwX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogUFJEUENUTDAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMF9QUkRQQ1RMMF9Nc2sgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDBfUFJEUENUTDBfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFBSRFBDVEwwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMF9QUkRQQ1RMMV9Qb3MgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFBSRFBDVEwxIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDBfUFJEUENUTDFfTXNrICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwwX1BSRFBDVEwxX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDBfUFJEUENUTDJfUG9zICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwwX1BSRFBDVEwyX01zayAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMF9QUkRQQ1RMMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogUFJEUENUTDIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwwX1BSRFBDVEwzX1BvcyAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogUFJEUENUTDMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMF9QUkRQQ1RMM19Nc2sgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDBfUFJEUENUTDNfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFBSRFBDVEwzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMF9QUkRQQ1RMNF9Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFBSRFBDVEw0IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDBfUFJEUENUTDRfTXNrICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwwX1BSRFBDVEw0X1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBQUkRQQ1RMNCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDBfUFJEUENUTDVfUG9zICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBQUkRQQ1RMNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwwX1BSRFBDVEw1X01zayAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMF9QUkRQQ1RMNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogUFJEUENUTDUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwwX1BSRFBDVExuX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogUFJEUENUTG4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMF9QUkRQQ1RMbl9Nc2sgICAgICAgICAoMHhmZmZ1bCA8PCBCUFdNX1dHQ1RMMF9QUkRQQ1RMbl9Qb3MpICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFBSRFBDVExuIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBVQ1RMMF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUFVDVEwwIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QVUNUTDBfTXNrICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwxX0NNUFVDVEwwX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QVUNUTDFfUG9zICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUFVDVEwxX01zayAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMV9DTVBVQ1RMMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUFVDVEwyX1BvcyAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBVQ1RMMl9Nc2sgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDFfQ01QVUNUTDJfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUFVDVEwyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBVQ1RMM19Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUFVDVEwzIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QVUNUTDNfTXNrICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwxX0NNUFVDVEwzX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QVUNUTDRfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBVQ1RMNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUFVDVEw0X01zayAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMV9DTVBVQ1RMNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUFVDVEw1X1BvcyAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBVQ1RMNV9Nc2sgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDFfQ01QVUNUTDVfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUFVDVEw1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBVQ1RMbl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUFVDVExuIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QVUNUTG5fTXNrICAgICAgICAgKDB4ZmZmdWwgPDwgQlBXTV9XR0NUTDFfQ01QVUNUTG5fUG9zKSAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBVQ1RMbiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QRENUTDBfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUERDVEwwX01zayAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMV9DTVBEQ1RMMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QRENUTDAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUERDVEwxX1BvcyAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QRENUTDEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBEQ1RMMV9Nc2sgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDFfQ01QRENUTDFfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUERDVEwxIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBEQ1RMMl9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUERDVEwyIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QRENUTDJfTXNrICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwxX0NNUERDVEwyX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QRENUTDNfUG9zICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUERDVEwzX01zayAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMV9DTVBEQ1RMM19Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QRENUTDMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUERDVEw0X1BvcyAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QRENUTDQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBEQ1RMNF9Nc2sgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDFfQ01QRENUTDRfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUERDVEw0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBEQ1RMNV9Qb3MgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUERDVEw1IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QRENUTDVfTXNrICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwxX0NNUERDVEw1X1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBEQ1RMNSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QRENUTG5fUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBEQ1RMbiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUERDVExuX01zayAgICAgICAgICgweGZmZnVsIDw8IEJQV01fV0dDVEwxX0NNUERDVExuX1BvcykgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QRENUTG4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fTVNLRU5fTVNLRU4wX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TS0VOOiBNU0tFTjAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBCUFdNX01TS0VOX01TS0VOMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9NU0tFTl9NU0tFTjBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0tFTjogTVNLRU4wIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX01TS0VOX01TS0VOMV9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0tFTjogTVNLRU4xIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9NU0tFTl9NU0tFTjFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fTVNLRU5fTVNLRU4xX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLRU46IE1TS0VOMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9NU0tFTl9NU0tFTjJfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLRU46IE1TS0VOMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEJQV01fTVNLRU5fTVNLRU4yX01zayAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX01TS0VOX01TS0VOMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TS0VOOiBNU0tFTjIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fTVNLRU5fTVNLRU4zX1BvcyAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TS0VOOiBNU0tFTjMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBCUFdNX01TS0VOX01TS0VOM19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9NU0tFTl9NU0tFTjNfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0tFTjogTVNLRU4zIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX01TS0VOX01TS0VONF9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0tFTjogTVNLRU40IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9NU0tFTl9NU0tFTjRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fTVNLRU5fTVNLRU40X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLRU46IE1TS0VONCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9NU0tFTl9NU0tFTjVfUG9zICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLRU46IE1TS0VONSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEJQV01fTVNLRU5fTVNLRU41X01zayAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX01TS0VOX01TS0VONV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TS0VOOiBNU0tFTjUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fTVNLRU5fTVNLRU5uX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TS0VOOiBNU0tFTm4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBCUFdNX01TS0VOX01TS0VObl9Nc2sgICAgICAgICAgICAoMHgzZnVsIDw8IEJQV01fTVNLRU5fTVNLRU5uX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0tFTjogTVNLRU5uIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX01TS19NU0tEQVQwX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0s6IE1TS0RBVDAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9NU0tfTVNLREFUMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fTVNLX01TS0RBVDBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLOiBNU0tEQVQwIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9NU0tfTVNLREFUMV9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLOiBNU0tEQVQxIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEJQV01fTVNLX01TS0RBVDFfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX01TS19NU0tEQVQxX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TSzogTVNLREFUMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fTVNLX01TS0RBVDJfUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TSzogTVNLREFUMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBCUFdNX01TS19NU0tEQVQyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9NU0tfTVNLREFUMl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0s6IE1TS0RBVDIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX01TS19NU0tEQVQzX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0s6IE1TS0RBVDMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9NU0tfTVNLREFUM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fTVNLX01TS0RBVDNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLOiBNU0tEQVQzIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9NU0tfTVNLREFUNF9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLOiBNU0tEQVQ0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEJQV01fTVNLX01TS0RBVDRfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX01TS19NU0tEQVQ0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TSzogTVNLREFUNCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fTVNLX01TS0RBVDVfUG9zICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TSzogTVNLREFUNSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBCUFdNX01TS19NU0tEQVQ1X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9NU0tfTVNLREFUNV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0s6IE1TS0RBVDUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX01TS19NU0tEQVRuX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0s6IE1TS0RBVG4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9NU0tfTVNLREFUbl9Nc2sgICAgICAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX01TS19NU0tEQVRuX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLOiBNU0tEQVRuIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9QT0xDVExfUElOVjBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9MQ1RMOiBQSU5WMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEJQV01fUE9MQ1RMX1BJTlYwX01zayAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX1BPTENUTF9QSU5WMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPTENUTDogUElOVjAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUE9MQ1RMX1BJTlYxX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPTENUTDogUElOVjEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBCUFdNX1BPTENUTF9QSU5WMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9QT0xDVExfUElOVjFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0xDVEw6IFBJTlYxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1BPTENUTF9QSU5WMl9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0xDVEw6IFBJTlYyIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9QT0xDVExfUElOVjJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fUE9MQ1RMX1BJTlYyX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9MQ1RMOiBQSU5WMiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9QT0xDVExfUElOVjNfUG9zICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9MQ1RMOiBQSU5WMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEJQV01fUE9MQ1RMX1BJTlYzX01zayAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX1BPTENUTF9QSU5WM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPTENUTDogUElOVjMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUE9MQ1RMX1BJTlY0X1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPTENUTDogUElOVjQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBCUFdNX1BPTENUTF9QSU5WNF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9QT0xDVExfUElOVjRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0xDVEw6IFBJTlY0IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1BPTENUTF9QSU5WNV9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0xDVEw6IFBJTlY1IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9QT0xDVExfUElOVjVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fUE9MQ1RMX1BJTlY1X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9MQ1RMOiBQSU5WNSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9QT0xDVExfUElOVm5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9MQ1RMOiBQSU5WbiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEJQV01fUE9MQ1RMX1BJTlZuX01zayAgICAgICAgICAgICgweDNmdWwgPDwgQlBXTV9QT0xDVExfUElOVm5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPTENUTDogUElOVm4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUE9FTl9QT0VOMF9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPRU46IFBPRU4wIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBCUFdNX1BPRU5fUE9FTjBfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9QT0VOX1BPRU4wX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0VOOiBQT0VOMCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1BPRU5fUE9FTjFfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0VOOiBQT0VOMSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9QT0VOX1BPRU4xX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fUE9FTl9QT0VOMV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9FTjogUE9FTjEgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9QT0VOX1BPRU4yX1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9FTjogUE9FTjIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEJQV01fUE9FTl9QT0VOMl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX1BPRU5fUE9FTjJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPRU46IFBPRU4yIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUE9FTl9QT0VOM19Qb3MgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPRU46IFBPRU4zIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBCUFdNX1BPRU5fUE9FTjNfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9QT0VOX1BPRU4zX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0VOOiBQT0VOMyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1BPRU5fUE9FTjRfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0VOOiBQT0VONCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9QT0VOX1BPRU40X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fUE9FTl9QT0VONF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9FTjogUE9FTjQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9QT0VOX1BPRU41X1BvcyAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9FTjogUE9FTjUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEJQV01fUE9FTl9QT0VONV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX1BPRU5fUE9FTjVfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPRU46IFBPRU41IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUE9FTl9QT0VObl9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPRU46IFBPRU5uIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBCUFdNX1BPRU5fUE9FTm5fTXNrICAgICAgICAgICAgICAoMHgzZnVsIDw8IEJQV01fUE9FTl9QT0VObl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0VOOiBQT0VObiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVEVOX1pJRU4wX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogWklFTjAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRFTl9aSUVOMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5URU5fWklFTjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IFpJRU4wIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRFTl9QSUVOMF9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IFBJRU4wIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEJQV01fSU5URU5fUElFTjBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVEVOX1BJRU4wX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBQSUVOMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5URU5fQ01QVUlFTjBfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBVSUVOMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVEVOX0NNUFVJRU4wX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRFTl9DTVBVSUVOMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QVUlFTjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVEVOX0NNUFVJRU4xX1BvcyAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QVUlFTjEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBVSUVOMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5URU5fQ01QVUlFTjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUFVJRU4xIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBVSUVOMl9Qb3MgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUFVJRU4yIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5URU5fQ01QVUlFTjJfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVEVOX0NNUFVJRU4yX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBVSUVOMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5URU5fQ01QVUlFTjNfUG9zICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBVSUVOMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVEVOX0NNUFVJRU4zX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRFTl9DTVBVSUVOM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QVUlFTjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVEVOX0NNUFVJRU40X1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QVUlFTjQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBVSUVONF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5URU5fQ01QVUlFTjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUFVJRU40IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBVSUVONV9Qb3MgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUFVJRU41IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5URU5fQ01QVUlFTjVfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVEVOX0NNUFVJRU41X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBVSUVONSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5URU5fQ01QVUlFTm5fUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBVSUVObiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVEVOX0NNUFVJRU5uX01zayAgICAgICAgICAoMHgzZnVsIDw8IEJQV01fSU5URU5fQ01QVUlFTm5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QVUlFTm4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVEVOX0NNUERJRU4wX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QRElFTjAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBESUVOMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5URU5fQ01QRElFTjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUERJRU4wIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBESUVOMV9Qb3MgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUERJRU4xIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5URU5fQ01QRElFTjFfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVEVOX0NNUERJRU4xX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBESUVOMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5URU5fQ01QRElFTjJfUG9zICAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBESUVOMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVEVOX0NNUERJRU4yX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRFTl9DTVBESUVOMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QRElFTjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVEVOX0NNUERJRU4zX1BvcyAgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QRElFTjMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBESUVOM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5URU5fQ01QRElFTjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUERJRU4zIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBESUVONF9Qb3MgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUERJRU40IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5URU5fQ01QRElFTjRfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVEVOX0NNUERJRU40X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBESUVONCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5URU5fQ01QRElFTjVfUG9zICAgICAgICAgICgyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBESUVONSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVEVOX0NNUERJRU41X01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRFTl9DTVBESUVONV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QRElFTjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVEVOX0NNUERJRU5uX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QRElFTm4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBESUVObl9Nc2sgICAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX0lOVEVOX0NNUERJRU5uX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUERJRU5uIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRTVFNfWklGMF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBaSUYwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEJQV01fSU5UU1RTX1pJRjBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVFNUU19aSUYwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogWklGMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5UU1RTX1BJRjBfUG9zICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogUElGMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVFNUU19QSUYwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRTVFNfUElGMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IFBJRjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBVSUYwX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUFVJRjAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QVUlGMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5UU1RTX0NNUFVJRjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBVSUYwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QVUlGMV9Qb3MgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBVSUYxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUFVJRjFfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVFNUU19DTVBVSUYxX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QVUlGMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUFVJRjJfUG9zICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QVUlGMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBVSUYyX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRTVFNfQ01QVUlGMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUFVJRjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBVSUYzX1BvcyAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUFVJRjMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QVUlGM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5UU1RTX0NNUFVJRjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBVSUYzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QVUlGNF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBVSUY0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUFVJRjRfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVFNUU19DTVBVSUY0X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QVUlGNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUFVJRjVfUG9zICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QVUlGNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBVSUY1X01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRTVFNfQ01QVUlGNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUFVJRjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBVSUZuX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUFVJRm4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QVUlGbl9Nc2sgICAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX0lOVFNUU19DTVBVSUZuX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBVSUZuIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QRElGMF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBESUYwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUERJRjBfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVFNUU19DTVBESUYwX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QRElGMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUERJRjFfUG9zICAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QRElGMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBESUYxX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRTVFNfQ01QRElGMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUERJRjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBESUYyX1BvcyAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUERJRjIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QRElGMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5UU1RTX0NNUERJRjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBESUYyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QRElGM19Qb3MgICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBESUYzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUERJRjNfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVFNUU19DTVBESUYzX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QRElGMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUERJRjRfUG9zICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QRElGNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBESUY0X01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRTVFNfQ01QRElGNF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUERJRjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBESUY1X1BvcyAgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUERJRjUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QRElGNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5UU1RTX0NNUERJRjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBESUY1IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QRElGbl9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBESUZuIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUERJRm5fTXNrICAgICAgICAgICgweDNmdWwgPDwgQlBXTV9JTlRTVFNfQ01QRElGbl9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QRElGbiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fRUFEQ1RTMF9UUkdTRUwwX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzA6IFRSR1NFTDAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0VBRENUUzBfVFJHU0VMMF9Nc2sgICAgICAgICAoMHhmdWwgPDwgQlBXTV9FQURDVFMwX1RSR1NFTDBfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMwOiBUUkdTRUwwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0VBRENUUzBfVFJHRU4wX1BvcyAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMwOiBUUkdFTjAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9FQURDVFMwX1RSR0VOMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fRUFEQ1RTMF9UUkdFTjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMDogVFJHRU4wIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9FQURDVFMwX1RSR1NFTDFfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMDogVFJHU0VMMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fRUFEQ1RTMF9UUkdTRUwxX01zayAgICAgICAgICgweGZ1bCA8PCBCUFdNX0VBRENUUzBfVFJHU0VMMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzA6IFRSR1NFTDEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fRUFEQ1RTMF9UUkdFTjFfUG9zICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzA6IFRSR0VOMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0VBRENUUzBfVFJHRU4xX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9FQURDVFMwX1RSR0VOMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMwOiBUUkdFTjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0VBRENUUzBfVFJHU0VMMl9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMwOiBUUkdTRUwyIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9FQURDVFMwX1RSR1NFTDJfTXNrICAgICAgICAgKDB4ZnVsIDw8IEJQV01fRUFEQ1RTMF9UUkdTRUwyX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMDogVFJHU0VMMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9FQURDVFMwX1RSR0VOMl9Qb3MgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMDogVFJHRU4yIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fRUFEQ1RTMF9UUkdFTjJfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0VBRENUUzBfVFJHRU4yX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzA6IFRSR0VOMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fRUFEQ1RTMF9UUkdTRUwzX1BvcyAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzA6IFRSR1NFTDMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0VBRENUUzBfVFJHU0VMM19Nc2sgICAgICAgICAoMHhmdWwgPDwgQlBXTV9FQURDVFMwX1RSR1NFTDNfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMwOiBUUkdTRUwzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0VBRENUUzBfVFJHRU4zX1BvcyAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMwOiBUUkdFTjMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9FQURDVFMwX1RSR0VOM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fRUFEQ1RTMF9UUkdFTjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMDogVFJHRU4zIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9FQURDVFMxX1RSR1NFTDRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMTogVFJHU0VMNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fRUFEQ1RTMV9UUkdTRUw0X01zayAgICAgICAgICgweGZ1bCA8PCBCUFdNX0VBRENUUzFfVFJHU0VMNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzE6IFRSR1NFTDQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fRUFEQ1RTMV9UUkdFTjRfUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzE6IFRSR0VONCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0VBRENUUzFfVFJHRU40X01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9FQURDVFMxX1RSR0VONF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMxOiBUUkdFTjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0VBRENUUzFfVFJHU0VMNV9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMxOiBUUkdTRUw1IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9FQURDVFMxX1RSR1NFTDVfTXNrICAgICAgICAgKDB4ZnVsIDw8IEJQV01fRUFEQ1RTMV9UUkdTRUw1X1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMTogVFJHU0VMNSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9FQURDVFMxX1RSR0VONV9Qb3MgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMTogVFJHRU41IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fRUFEQ1RTMV9UUkdFTjVfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0VBRENUUzFfVFJHRU41X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzE6IFRSR0VONSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fU1NDVExfU1NFTjBfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNTQ1RMOiBTU0VOMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBCUFdNX1NTQ1RMX1NTRU4wX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9TU0NUTF9TU0VOMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTU0NUTDogU1NFTjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1NTQ1RMX1NTUkNfUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTU0NUTDogU1NSQyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9TU0NUTF9TU1JDX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEJQV01fU1NDVExfU1NSQ19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1NDVEw6IFNTUkMgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9TU1RSR19DTlRTRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1NUUkc6IENOVFNFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEJQV01fU1NUUkdfQ05UU0VOX01zayAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX1NTVFJHX0NOVFNFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNTVFJHOiBDTlRTRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fU1RBVFVTX0NOVE1BWDBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNUQVRVUzogQ05UTUFYMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX1NUQVRVU19DTlRNQVgwX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9TVEFUVVNfQ05UTUFYMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTVEFUVVM6IENOVE1BWDAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1NUQVRVU19FQURDVFJHMF9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTVEFUVVM6IEVBRENUUkcwIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9TVEFUVVNfRUFEQ1RSRzBfTXNrICAgICAgICAgKDB4MXVsIDw8IEJQV01fU1RBVFVTX0VBRENUUkcwX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1RBVFVTOiBFQURDVFJHMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9TVEFUVVNfRUFEQ1RSRzFfUG9zICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1RBVFVTOiBFQURDVFJHMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fU1RBVFVTX0VBRENUUkcxX01zayAgICAgICAgICgweDF1bCA8PCBCUFdNX1NUQVRVU19FQURDVFJHMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNUQVRVUzogRUFEQ1RSRzEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fU1RBVFVTX0VBRENUUkcyX1BvcyAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNUQVRVUzogRUFEQ1RSRzIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1NUQVRVU19FQURDVFJHMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQlBXTV9TVEFUVVNfRUFEQ1RSRzJfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTVEFUVVM6IEVBRENUUkcyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1NUQVRVU19FQURDVFJHM19Qb3MgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTVEFUVVM6IEVBRENUUkczIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9TVEFUVVNfRUFEQ1RSRzNfTXNrICAgICAgICAgKDB4MXVsIDw8IEJQV01fU1RBVFVTX0VBRENUUkczX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1RBVFVTOiBFQURDVFJHMyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9TVEFUVVNfRUFEQ1RSRzRfUG9zICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1RBVFVTOiBFQURDVFJHNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fU1RBVFVTX0VBRENUUkc0X01zayAgICAgICAgICgweDF1bCA8PCBCUFdNX1NUQVRVU19FQURDVFJHNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNUQVRVUzogRUFEQ1RSRzQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fU1RBVFVTX0VBRENUUkc1X1BvcyAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNUQVRVUzogRUFEQ1RSRzUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1NUQVRVU19FQURDVFJHNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgQlBXTV9TVEFUVVNfRUFEQ1RSRzVfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTVEFUVVM6IEVBRENUUkc1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1NUQVRVU19FQURDVFJHbl9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTVEFUVVM6IEVBRENUUkduIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fU1RBVFVTX0VBRENUUkduX01zayAgICAgICAgICgweDNmdWwgPDwgQlBXTV9TVEFUVVNfRUFEQ1RSR25fUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTVEFUVVM6IEVBRENUUkduIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJTkVOX0NBUElORU4wX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjAgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fQ0FQSU5FTl9DQVBJTkVOMF9Nc2sgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUElORU5fQ0FQSU5FTjBfUG9zKSAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElORU46IENBUElORU4wIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSU5FTl9DQVBJTkVOMV9Qb3MgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElORU46IENBUElORU4xIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBCUFdNX0NBUElORU5fQ0FQSU5FTjFfTXNrICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBJTkVOX0NBUElORU4xX1BvcykgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJTkVOOiBDQVBJTkVOMSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElORU5fQ0FQSU5FTjJfUG9zICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJTkVOOiBDQVBJTkVOMiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJTkVOX0NBUElORU4yX01zayAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQSU5FTl9DQVBJTkVOMl9Qb3MpICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJTkVOX0NBUElORU4zX1BvcyAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjMgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fQ0FQSU5FTl9DQVBJTkVOM19Nc2sgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUElORU5fQ0FQSU5FTjNfUG9zKSAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElORU46IENBUElORU4zIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSU5FTl9DQVBJTkVONF9Qb3MgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElORU46IENBUElORU40IFBvc2l0aW9uICAgICAqLworI2RlZmluZSBCUFdNX0NBUElORU5fQ0FQSU5FTjRfTXNrICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBJTkVOX0NBUElORU40X1BvcykgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJTkVOOiBDQVBJTkVONCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElORU5fQ0FQSU5FTjVfUG9zICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJTkVOOiBDQVBJTkVONSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJTkVOX0NBUElORU41X01zayAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQSU5FTl9DQVBJTkVONV9Qb3MpICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjUgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJTkVOX0NBUElORU5uX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTm4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fQ0FQSU5FTl9DQVBJTkVObl9Nc2sgICAgICAgICgweDNmdWwgPDwgQlBXTV9DQVBJTkVOX0NBUElORU5uX1BvcykgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElORU46IENBUElORU5uIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUEVOMF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQRU4wIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBFTjBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfQ0FQRU4wX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUEVOMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBFTjFfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUEVOMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQRU4xX01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX0NBUEVOMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBFTjEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQRU4yX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBFTjIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUEVOMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9DQVBFTjJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQRU4yIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUEVOM19Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQRU4zIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBFTjNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfQ0FQRU4zX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUEVOMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBFTjRfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUEVONCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQRU40X01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX0NBUEVONF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBFTjQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQRU41X1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBFTjUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUEVONV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9DQVBFTjVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQRU41IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUEVObl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQRU5uIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBFTm5fTXNrICAgICAgICAgICAoMHgzZnVsIDw8IEJQV01fQ0FQQ1RMX0NBUEVObl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUEVObiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBJTlYwX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUElOVjAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQSU5WMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX0NBUElOVjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBJTlYwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQSU5WMV9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBJTlYxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUElOVjFfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9DQVBJTlYxX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQSU5WMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUElOVjJfUG9zICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQSU5WMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBJTlYyX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfQ0FQSU5WMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUElOVjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBJTlYzX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUElOVjMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQSU5WM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX0NBUElOVjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBJTlYzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQSU5WNF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBJTlY0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUElOVjRfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9DQVBJTlY0X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQSU5WNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUElOVjVfUG9zICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQSU5WNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBJTlY1X01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfQ0FQSU5WNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUElOVjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBJTlZuX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUElOVm4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQSU5Wbl9Nc2sgICAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX0NBUENUTF9DQVBJTlZuX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBJTlZuIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfUkNSTERFTjBfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX1JDUkxERU4wX01zayAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9SQ1JMREVOMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogUkNSTERFTjAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX1JDUkxERU4xX1BvcyAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogUkNSTERFTjEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9SQ1JMREVOMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfUkNSTERFTjFfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IFJDUkxERU4xIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9SQ1JMREVOMl9Qb3MgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IFJDUkxERU4yIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfUkNSTERFTjJfTXNrICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX1JDUkxERU4yX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfUkNSTERFTjNfUG9zICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX1JDUkxERU4zX01zayAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9SQ1JMREVOM19Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogUkNSTERFTjMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX1JDUkxERU40X1BvcyAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogUkNSTERFTjQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9SQ1JMREVONF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfUkNSTERFTjRfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IFJDUkxERU40IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9SQ1JMREVONV9Qb3MgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IFJDUkxERU41IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfUkNSTERFTjVfTXNrICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX1JDUkxERU41X1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBSQ1JMREVONSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfUkNSTERFTm5fUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBSQ1JMREVObiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX1JDUkxERU5uX01zayAgICAgICAgICgweDNmdWwgPDwgQlBXTV9DQVBDVExfUkNSTERFTm5fUG9zKSAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogUkNSTERFTm4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0ZDUkxERU4wX1BvcyAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogRkNSTERFTjAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9GQ1JMREVOMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfRkNSTERFTjBfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IEZDUkxERU4wIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9GQ1JMREVOMV9Qb3MgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IEZDUkxERU4xIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfRkNSTERFTjFfTXNrICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX0ZDUkxERU4xX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfRkNSTERFTjJfUG9zICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0ZDUkxERU4yX01zayAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9GQ1JMREVOMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogRkNSTERFTjIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0ZDUkxERU4zX1BvcyAgICAgICAgICgyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogRkNSTERFTjMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9GQ1JMREVOM19Nc2sgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfRkNSTERFTjNfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IEZDUkxERU4zIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9GQ1JMREVONF9Qb3MgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IEZDUkxERU40IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfRkNSTERFTjRfTXNrICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX0ZDUkxERU40X1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBGQ1JMREVONCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfRkNSTERFTjVfUG9zICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBGQ1JMREVONSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0ZDUkxERU41X01zayAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9GQ1JMREVONV9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogRkNSTERFTjUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0ZDUkxERU5uX1BvcyAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogRkNSTERFTm4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9GQ1JMREVObl9Nc2sgICAgICAgICAoMHgzZnVsIDw8IEJQV01fQ0FQQ1RMX0ZDUkxERU5uX1BvcykgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IEZDUkxERU5uIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUFNUU19DUklGT1YwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENSSUZPVjAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ1JJRk9WMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQU1RTX0NSSUZPVjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDUklGT1YwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ1JJRk9WMV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDUklGT1YxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NSSUZPVjFfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUFNUU19DUklGT1YxX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ1JJRk9WMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NSSUZPVjJfUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ1JJRk9WMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUFNUU19DUklGT1YyX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBTVFNfQ1JJRk9WMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENSSUZPVjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUFNUU19DUklGT1YzX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENSSUZPVjMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ1JJRk9WM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQU1RTX0NSSUZPVjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDUklGT1YzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ1JJRk9WNF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDUklGT1Y0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NSSUZPVjRfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUFNUU19DUklGT1Y0X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ1JJRk9WNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NSSUZPVjVfUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ1JJRk9WNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUFNUU19DUklGT1Y1X01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBTVFNfQ1JJRk9WNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENSSUZPVjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUFNUU19DUklGT1ZuX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENSSUZPVm4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ1JJRk9Wbl9Nc2sgICAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX0NBUFNUU19DUklGT1ZuX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDUklGT1ZuIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ0ZJRk9WMF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDRklGT1YwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NGSUZPVjBfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUFNUU19DRklGT1YwX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ0ZJRk9WMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NGSUZPVjFfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ0ZJRk9WMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUFNUU19DRklGT1YxX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBTVFNfQ0ZJRk9WMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENGSUZPVjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUFNUU19DRklGT1YyX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENGSUZPVjIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ0ZJRk9WMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQU1RTX0NGSUZPVjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDRklGT1YyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ0ZJRk9WM19Qb3MgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDRklGT1YzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NGSUZPVjNfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUFNUU19DRklGT1YzX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ0ZJRk9WMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NGSUZPVjRfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ0ZJRk9WNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUFNUU19DRklGT1Y0X01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBTVFNfQ0ZJRk9WNF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENGSUZPVjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUFNUU19DRklGT1Y1X1BvcyAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENGSUZPVjUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ0ZJRk9WNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQU1RTX0NGSUZPVjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDRklGT1Y1IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ0ZJRk9Wbl9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDRklGT1ZuIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NGSUZPVm5fTXNrICAgICAgICAgICgweDNmdWwgPDwgQlBXTV9DQVBTVFNfQ0ZJRk9Wbl9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ0ZJRk9WbiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUkNBUERBVDBfUkNBUERBVF9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlJDQVBEQVQwOiBSQ0FQREFUIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBCUFdNX1JDQVBEQVQwX1JDQVBEQVRfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9SQ0FQREFUMF9SQ0FQREFUX1BvcykgICAgICAgICAgIC8qITwgQlBXTV9UOjpSQ0FQREFUMDogUkNBUERBVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0ZDQVBEQVQwX0ZDQVBEQVRfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpGQ0FQREFUMDogRkNBUERBVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9GQ0FQREFUMF9GQ0FQREFUX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fRkNBUERBVDBfRkNBUERBVF9Qb3MpICAgICAgICAgICAvKiE8IEJQV01fVDo6RkNBUERBVDA6IEZDQVBEQVQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9SQ0FQREFUMV9SQ0FQREFUX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UkNBUERBVDE6IFJDQVBEQVQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fUkNBUERBVDFfUkNBUERBVF9Nc2sgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX1JDQVBEQVQxX1JDQVBEQVRfUG9zKSAgICAgICAgICAgLyohPCBCUFdNX1Q6OlJDQVBEQVQxOiBSQ0FQREFUIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fRkNBUERBVDFfRkNBUERBVF9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkZDQVBEQVQxOiBGQ0FQREFUIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBCUFdNX0ZDQVBEQVQxX0ZDQVBEQVRfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9GQ0FQREFUMV9GQ0FQREFUX1BvcykgICAgICAgICAgIC8qITwgQlBXTV9UOjpGQ0FQREFUMTogRkNBUERBVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1JDQVBEQVQyX1JDQVBEQVRfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpSQ0FQREFUMjogUkNBUERBVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9SQ0FQREFUMl9SQ0FQREFUX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fUkNBUERBVDJfUkNBUERBVF9Qb3MpICAgICAgICAgICAvKiE8IEJQV01fVDo6UkNBUERBVDI6IFJDQVBEQVQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9GQ0FQREFUMl9GQ0FQREFUX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RkNBUERBVDI6IEZDQVBEQVQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fRkNBUERBVDJfRkNBUERBVF9Nc2sgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0ZDQVBEQVQyX0ZDQVBEQVRfUG9zKSAgICAgICAgICAgLyohPCBCUFdNX1Q6OkZDQVBEQVQyOiBGQ0FQREFUIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUkNBUERBVDNfUkNBUERBVF9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlJDQVBEQVQzOiBSQ0FQREFUIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBCUFdNX1JDQVBEQVQzX1JDQVBEQVRfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9SQ0FQREFUM19SQ0FQREFUX1BvcykgICAgICAgICAgIC8qITwgQlBXTV9UOjpSQ0FQREFUMzogUkNBUERBVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0ZDQVBEQVQzX0ZDQVBEQVRfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpGQ0FQREFUMzogRkNBUERBVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9GQ0FQREFUM19GQ0FQREFUX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fRkNBUERBVDNfRkNBUERBVF9Qb3MpICAgICAgICAgICAvKiE8IEJQV01fVDo6RkNBUERBVDM6IEZDQVBEQVQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9SQ0FQREFUNF9SQ0FQREFUX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UkNBUERBVDQ6IFJDQVBEQVQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fUkNBUERBVDRfUkNBUERBVF9Nc2sgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX1JDQVBEQVQ0X1JDQVBEQVRfUG9zKSAgICAgICAgICAgLyohPCBCUFdNX1Q6OlJDQVBEQVQ0OiBSQ0FQREFUIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fRkNBUERBVDRfRkNBUERBVF9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkZDQVBEQVQ0OiBGQ0FQREFUIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBCUFdNX0ZDQVBEQVQ0X0ZDQVBEQVRfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9GQ0FQREFUNF9GQ0FQREFUX1BvcykgICAgICAgICAgIC8qITwgQlBXTV9UOjpGQ0FQREFUNDogRkNBUERBVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1JDQVBEQVQ1X1JDQVBEQVRfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpSQ0FQREFUNTogUkNBUERBVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9SQ0FQREFUNV9SQ0FQREFUX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fUkNBUERBVDVfUkNBUERBVF9Qb3MpICAgICAgICAgICAvKiE8IEJQV01fVDo6UkNBUERBVDU6IFJDQVBEQVQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9GQ0FQREFUNV9GQ0FQREFUX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RkNBUERBVDU6IEZDQVBEQVQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fRkNBUERBVDVfRkNBUERBVF9Nc2sgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0ZDQVBEQVQ1X0ZDQVBEQVRfUG9zKSAgICAgICAgICAgLyohPCBCUFdNX1Q6OkZDQVBEQVQ1OiBGQ0FQREFUIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSUVOX0NBUFJJRU5uX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElFTjogQ0FQUklFTm4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0NBUElFTl9DQVBSSUVObl9Nc2sgICAgICAgICAoMHgzZnVsIDw8IEJQV01fQ0FQSUVOX0NBUFJJRU5uX1BvcykgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRU46IENBUFJJRU5uIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElFTl9DQVBGSUVObl9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRU46IENBUEZJRU5uIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJRU5fQ0FQRklFTm5fTXNrICAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX0NBUElFTl9DQVBGSUVObl9Qb3MpICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUVOOiBDQVBGSUVObiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBSSUYwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUFJJRjAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQUklGMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUElGX0NBUFJJRjBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBSSUYwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQUklGMV9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBSSUYxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUElGX0NBUFJJRjFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBJRl9DQVBSSUYxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQUklGMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElGX0NBUFJJRjJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQUklGMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBSSUYyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQSUZfQ0FQUklGMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUFJJRjIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBSSUYzX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUFJJRjMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQUklGM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUElGX0NBUFJJRjNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBSSUYzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQUklGNF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBSSUY0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUElGX0NBUFJJRjRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBJRl9DQVBSSUY0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQUklGNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElGX0NBUFJJRjVfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQUklGNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBSSUY1X01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQSUZfQ0FQUklGNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUFJJRjUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBSSUZuX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUFJJRm4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQUklGbl9Nc2sgICAgICAgICAgICgweDNmdWwgPDwgQlBXTV9DQVBJRl9DQVBSSUZuX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBSSUZuIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQRklGMF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBGSUYwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUElGX0NBUEZJRjBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBJRl9DQVBGSUYwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQRklGMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElGX0NBUEZJRjFfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQRklGMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBGSUYxX01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQSUZfQ0FQRklGMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUEZJRjEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBGSUYyX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUEZJRjIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQRklGMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUElGX0NBUEZJRjJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBGSUYyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQRklGM19Qb3MgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBGSUYzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUElGX0NBUEZJRjNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBJRl9DQVBGSUYzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQRklGMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElGX0NBUEZJRjRfUG9zICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQRklGNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBGSUY0X01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQSUZfQ0FQRklGNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUEZJRjQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBGSUY1X1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUEZJRjUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQRklGNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUElGX0NBUEZJRjVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBGSUY1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQRklGbl9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBGSUZuIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUElGX0NBUEZJRm5fTXNrICAgICAgICAgICAoMHgzZnVsIDw8IEJQV01fQ0FQSUZfQ0FQRklGbl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQRklGbiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1BCVUZfUEJVRl9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQQlVGOiBQQlVGIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9QQlVGX1BCVUZfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fUEJVRl9QQlVGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UEJVRjogUEJVRiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DTVBCVUYwX0NNUEJVRl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QQlVGMDogQ01QQlVGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ01QQlVGMF9DTVBCVUZfTXNrICAgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0NNUEJVRjBfQ01QQlVGX1BvcykgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUEJVRjA6IENNUEJVRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ01QQlVGMV9DTVBCVUZfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUEJVRjE6IENNUEJVRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NNUEJVRjFfQ01QQlVGX01zayAgICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9DTVBCVUYxX0NNUEJVRl9Qb3MpICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBCVUYxOiBDTVBCVUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NNUEJVRjJfQ01QQlVGX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBCVUYyOiBDTVBCVUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DTVBCVUYyX0NNUEJVRl9Nc2sgICAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fQ01QQlVGMl9DTVBCVUZfUG9zKSAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QQlVGMjogQ01QQlVGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DTVBCVUYzX0NNUEJVRl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QQlVGMzogQ01QQlVGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ01QQlVGM19DTVBCVUZfTXNrICAgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0NNUEJVRjNfQ01QQlVGX1BvcykgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUEJVRjM6IENNUEJVRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ01QQlVGNF9DTVBCVUZfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUEJVRjQ6IENNUEJVRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NNUEJVRjRfQ01QQlVGX01zayAgICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9DTVBCVUY0X0NNUEJVRl9Qb3MpICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBCVUY0OiBDTVBCVUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NNUEJVRjVfQ01QQlVGX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBCVUY1OiBDTVBCVUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DTVBCVUY1X0NNUEJVRl9Nc2sgICAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fQ01QQlVGNV9DTVBCVUZfUG9zKSAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QQlVGNTogQ01QQlVGIE1hc2sgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogQlBXTV9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgQlBXTSByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisjZW5kaWYgLyogX19CUFdNX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9jYW5fcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvY2FuX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOTNhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvY2FuX3JlZy5oCkBAIC0wLDAgKzEsNzg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY2FuX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBDQU4gcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQ0FOX1JFR19IX18KKyNkZWZpbmUgX19DQU5fUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBDQU4gQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgQ29udHJvbGxlcihDQU4pCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIENBTiBDb250cm9sbGVyCitAeyAqLworCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworCisgICAgLyoqCisgICAgICogQHZhciBDQU5fSUZfVDo6Q1JFUQorICAgICAqIE9mZnNldDogMHgyMCwgMHg4MCAgSUZuIChSZWdpc3RlciBNYXAgTm90ZSAyKSBDb21tYW5kIFJlcXVlc3QgUmVnaXN0ZXJzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzU6MF0gICB8TWVzc2FnZU51bWJlcnxNZXNzYWdlIE51bWJlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDEtMHgyMDogVmFsaWQgTWVzc2FnZSBOdW1iZXIsIHRoZSBNZXNzYWdlIE9iamVjdCBpbiB0aGUgTWVzc2FnZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJBTSBpcyBzZWxlY3RlZCBmb3IgZGF0YSB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAwOiBOb3QgYSB2YWxpZCBNZXNzYWdlIE51bWJlciwgaW50ZXJwcmV0ZWQgYXMgMHgyMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDIxLTB4M0Y6IE5vdCBhIHZhbGlkIE1lc3NhZ2UgTnVtYmVyLCBpbnRlcnByZXRlZCBhcyAweDAxLTB4MUYuCisgICAgICogfFsxNV0gICAgfEJ1c3kgICAgICB8QnVzeSBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlYWQvd3JpdGUgYWN0aW9uIGhhcyBmaW5pc2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV3JpdGluZyB0byB0aGUgSUZuIENvbW1hbmQgUmVxdWVzdCBSZWdpc3RlciBpcyBpbiBwcm9ncmVzcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBjYW4gb25seSBiZSByZWFkIGJ5IHRoZSBzb2Z0d2FyZS4KKyAgICAgKiBAdmFyIENBTl9JRl9UOjpDTUFTSworICAgICAqIE9mZnNldDogMHgyNCwgMHg4NCAgSUZuIENvbW1hbmQgTWFzayBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfERBVF9CICAgICB8QWNjZXNzIERhdGEgQnl0ZXMgWzc6NF0KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgQnl0ZXMgWzc6NF0gdW5jaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc2ZlciBEYXRhIEJ5dGVzIFs3OjRdIHRvIE1lc3NhZ2UgT2JqZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIEJ5dGVzIFs3OjRdIHVuY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNmZXIgRGF0YSBCeXRlcyBbNzo0XSB0byBJRm4gTWVzc2FnZSBCdWZmZXIgUmVnaXN0ZXIuCisgICAgICogfFsxXSAgICAgfERBVF9BICAgICB8QWNjZXNzIERhdGEgQnl0ZXMgWzM6MF0KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgQnl0ZXMgWzM6MF0gdW5jaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc2ZlciBEYXRhIEJ5dGVzIFszOjBdIHRvIE1lc3NhZ2UgT2JqZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIEJ5dGVzIFszOjBdIHVuY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNmZXIgRGF0YSBCeXRlcyBbMzowXSB0byBJRm4gTWVzc2FnZSBCdWZmZXIgUmVnaXN0ZXIuCisgICAgICogfFsyXSAgICAgfFR4UnFzdF9OZXdEYXR8QWNjZXNzIFRyYW5zbWlzc2lvbiBSZXF1ZXN0IEJpdCBXaGVuIFdyaXRlIE9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUeFJxc3QgYml0IHVuY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0IFR4UnFzdCBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgYSB0cmFuc21pc3Npb24gaXMgcmVxdWVzdGVkIGJ5IHByb2dyYW1taW5nIGJpdCBUeFJxc3QvTmV3RGF0IGluIHRoZSBJRm4gQ29tbWFuZCBNYXNrIFJlZ2lzdGVyLCBiaXQgVHhScXN0IGluIHRoZSBJRm4gTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyIHdpbGwgYmUgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBY2Nlc3MgTmV3IERhdGEgQml0IHdoZW4gUmVhZCBPcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5ld0RhdCBiaXQgcmVtYWlucyB1bmNoYW5nZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIE5ld0RhdCBiaXQgaW4gdGhlIE1lc3NhZ2UgT2JqZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEEgcmVhZCBhY2Nlc3MgdG8gYSBNZXNzYWdlIE9iamVjdCBjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgcmVzZXQgb2YgdGhlIGNvbnRyb2wgYml0cyBJbnRQbmQgYW5kIE5ld0RhdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsdWVzIG9mIHRoZXNlIGJpdHMgdHJhbnNmZXJyZWQgdG8gdGhlIElGbiBNZXNzYWdlIENvbnRyb2wgUmVnaXN0ZXIgYWx3YXlzIHJlZmxlY3QgdGhlIHN0YXR1cyBiZWZvcmUgcmVzZXR0aW5nIHRoZXNlIGJpdHMuCisgICAgICogfFszXSAgICAgfENsckludFBuZCB8Q2xlYXIgSW50ZXJydXB0IFBlbmRpbmcgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gd3JpdGluZyB0byBhIE1lc3NhZ2UgT2JqZWN0LCB0aGlzIGJpdCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRQbmQgYml0IChDQU5fSUZuX01DT05bMTNdKSByZW1haW5zIHVuY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgSW50UG5kIGJpdCBpbiB0aGUgTWVzc2FnZSBPYmplY3QuCisgICAgICogfFs0XSAgICAgfENvbnRyb2wgICB8Q29udHJvbCBBY2Nlc3MgQ29udHJvbCBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb250cm9sIEJpdHMgdW5jaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc2ZlciBDb250cm9sIEJpdHMgdG8gTWVzc2FnZSBPYmplY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnRyb2wgQml0cyB1bmNoYW5nZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zZmVyIENvbnRyb2wgQml0cyB0byBJRm4gTWVzc2FnZSBCdWZmZXIgUmVnaXN0ZXIuCisgICAgICogfFs1XSAgICAgfEFyYiAgICAgICB8QWNjZXNzIEFyYml0cmF0aW9uIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFyYml0cmF0aW9uIGJpdHMgdW5jaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc2ZlciBJZGVudGlmaWVyICsgRGlyIChDQU5fSUZuX0FSQjJbMTNdKSArIFh0ZCAoQ0FOX0lGbl9BUkIyWzE0XSkgKyBNc2dWYWwgKENBTl9JRm5fQVBCMlsxNV0pIHRvIE1lc3NhZ2UgT2JqZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBcmJpdHJhdGlvbiBiaXRzIHVuY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNmZXIgSWRlbnRpZmllciArIERpciArIFh0ZCArIE1zZ1ZhbCB0byBJRm4gTWVzc2FnZSBCdWZmZXIgUmVnaXN0ZXIuCisgICAgICogfFs2XSAgICAgfE1hc2sgICAgICB8QWNjZXNzIE1hc2sgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWFzayBiaXRzIHVuY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNmZXIgSWRlbnRpZmllciBNYXNrICsgTURpciArIE1YdGQgdG8gTWVzc2FnZSBPYmplY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE1hc2sgYml0cyB1bmNoYW5nZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zZmVyIElkZW50aWZpZXIgTWFzayArIE1EaXIgKyBNWHRkIHRvIElGbiBNZXNzYWdlIEJ1ZmZlciBSZWdpc3Rlci4KKyAgICAgKiB8WzddICAgICB8V1JfUkQgICAgIHxXcml0ZSAvIFJlYWQgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWFkOiBUcmFuc2ZlciBkYXRhIGZyb20gdGhlIE1lc3NhZ2UgT2JqZWN0IGFkZHJlc3NlZCBieSB0aGUgQ29tbWFuZCBSZXF1ZXN0IFJlZ2lzdGVyIGludG8gdGhlIHNlbGVjdGVkIE1lc3NhZ2UgQnVmZmVyIFJlZ2lzdGVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV3JpdGU6IFRyYW5zZmVyIGRhdGEgZnJvbSB0aGUgc2VsZWN0ZWQgTWVzc2FnZSBCdWZmZXIgUmVnaXN0ZXJzIHRvIHRoZSBNZXNzYWdlIE9iamVjdCBhZGRyZXNzZWQgYnkgdGhlIENvbW1hbmQgUmVxdWVzdCBSZWdpc3Rlci4KKyAgICAgKiBAdmFyIENBTl9JRl9UOjpNQVNLMQorICAgICAqIE9mZnNldDogMHgyOCwgMHg4OCAgSUZuIE1hc2sgMSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfE1za1sxNTowXSB8SWRlbnRpZmllciBNYXNrIDE1LTAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBtZXNzYWdlIG9iamVjdCBjYW5ub3QgaW5oaWJpdCB0aGUgbWF0Y2ggaW4gdGhlIGFjY2VwdGFuY2UgZmlsdGVyaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgY29ycmVzcG9uZGluZyBpZGVudGlmaWVyIGJpdCBpcyB1c2VkIGZvciBhY2NlcHRhbmNlIGZpbHRlcmluZy4KKyAgICAgKiBAdmFyIENBTl9JRl9UOjpNQVNLMgorICAgICAqIE9mZnNldDogMHgyQywgMHg4QyAgSUZuIE1hc2sgMiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMjowXSAgfE1za1syODoxNl18SWRlbnRpZmllciBNYXNrIDI4LTE2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgaWRlbnRpZmllciBvZiB0aGUgbWVzc2FnZSBvYmplY3QgY2Fubm90IGluaGliaXQgdGhlIG1hdGNoIGluIHRoZSBhY2NlcHRhbmNlIGZpbHRlcmluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGNvcnJlc3BvbmRpbmcgaWRlbnRpZmllciBiaXQgaXMgdXNlZCBmb3IgYWNjZXB0YW5jZSBmaWx0ZXJpbmcuCisgICAgICogfFsxNF0gICAgfE1EaXIgICAgICB8TWFzayBNZXNzYWdlIERpcmVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgbWVzc2FnZSBkaXJlY3Rpb24gYml0IChEaXIgKENBTl9JRm5fQVJCMlsxM10pKSBoYXMgbm8gZWZmZWN0IG9uIHRoZSBhY2NlcHRhbmNlIGZpbHRlcmluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIG1lc3NhZ2UgZGlyZWN0aW9uIGJpdCAoRGlyKSBpcyB1c2VkIGZvciBhY2NlcHRhbmNlIGZpbHRlcmluZy4KKyAgICAgKiB8WzE1XSAgICB8TVh0ZCAgICAgIHxNYXNrIEV4dGVuZGVkIElkZW50aWZpZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGV4dGVuZGVkIGlkZW50aWZpZXIgYml0IChJREUpIGhhcyBubyBlZmZlY3Qgb24gdGhlIGFjY2VwdGFuY2UgZmlsdGVyaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgZXh0ZW5kZWQgaWRlbnRpZmllciBiaXQgKElERSkgaXMgdXNlZCBmb3IgYWNjZXB0YW5jZSBmaWx0ZXJpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiAxMS1iaXQgKCJzdGFuZGFyZCIpIElkZW50aWZpZXJzIGFyZSB1c2VkIGZvciBhIE1lc3NhZ2UgT2JqZWN0LCB0aGUgaWRlbnRpZmllcnMgb2YgcmVjZWl2ZWQgRGF0YSBGcmFtZXMgYXJlIHdyaXR0ZW4gaW50byBiaXRzIElEMjggdG8gSUQxOCAoQ0FOX0lGbl9BUkIyWzEyOjJdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgYWNjZXB0YW5jZSBmaWx0ZXJpbmcsIG9ubHkgdGhlc2UgYml0cyB0b2dldGhlciB3aXRoIG1hc2sgYml0cyBNc2syOCB0byBNc2sxOCAoQ0FOX0lGbl9NQVNLMlsxMjoyXSkgYXJlIGNvbnNpZGVyZWQuCisgICAgICogQHZhciBDQU5fSUZfVDo6QVJCMQorICAgICAqIE9mZnNldDogMHgzMCwgMHg5MCAgSUZuIEFyYml0cmF0aW9uIDEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxJRFsxNTowXSAgfE1lc3NhZ2UgSWRlbnRpZmllciAxNS0wCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SUQyOCAtIElEMCwgMjktYml0IElkZW50aWZpZXIgKCJFeHRlbmRlZCBGcmFtZSIpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElEMjggLSBJRDE4LCAxMS1iaXQgSWRlbnRpZmllciAoIlN0YW5kYXJkIEZyYW1lIikKKyAgICAgKiBAdmFyIENBTl9JRl9UOjpBUkIyCisgICAgICogT2Zmc2V0OiAweDM0LCAweDk0ICBJRm4gQXJiaXRyYXRpb24gMiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMjowXSAgfElEWzI4OjE2XSB8TWVzc2FnZSBJZGVudGlmaWVyIDI4LTE2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SUQyOCAtIElEMCwgMjktYml0IElkZW50aWZpZXIgKCJFeHRlbmRlZCBGcmFtZSIpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElEMjggLSBJRDE4LCAxMS1iaXQgSWRlbnRpZmllciAoIlN0YW5kYXJkIEZyYW1lIikKKyAgICAgKiB8WzEzXSAgICB8RGlyICAgICAgIHxNZXNzYWdlIERpcmVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEaXJlY3Rpb24gaXMgcmVjZWl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPbiBUeFJxc3QsIGEgUmVtb3RlIEZyYW1lIHdpdGggdGhlIGlkZW50aWZpZXIgb2YgdGhpcyBNZXNzYWdlIE9iamVjdCBpcyB0cmFuc21pdHRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPbiByZWNlcHRpb24gb2YgYSBEYXRhIEZyYW1lIHdpdGggbWF0Y2hpbmcgaWRlbnRpZmllciwgdGhhdCBtZXNzYWdlIGlzIHN0b3JlZCBpbiB0aGlzIE1lc3NhZ2UgT2JqZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEaXJlY3Rpb24gaXMgdHJhbnNtaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T24gVHhScXN0LCB0aGUgcmVzcGVjdGl2ZSBNZXNzYWdlIE9iamVjdCBpcyB0cmFuc21pdHRlZCBhcyBhIERhdGEgRnJhbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T24gcmVjZXB0aW9uIG9mIGEgUmVtb3RlIEZyYW1lIHdpdGggbWF0Y2hpbmcgaWRlbnRpZmllciwgdGhlIFR4UnFzdCBiaXQgKENBTl9JRm5fQ01BU0tbMl0pIG9mIHRoaXMgTWVzc2FnZSBPYmplY3QgaXMgc2V0IChpZiBSbXRFbiAoQ0FOX0lGbl9NQ09OWzldKSA9IG9uZSkuCisgICAgICogfFsxNF0gICAgfFh0ZCAgICAgICB8RXh0ZW5kZWQgSWRlbnRpZmllcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgMTEtYml0ICgic3RhbmRhcmQiKSBJZGVudGlmaWVyIHdpbGwgYmUgdXNlZCBmb3IgdGhpcyBNZXNzYWdlIE9iamVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIDI5LWJpdCAoImV4dGVuZGVkIikgSWRlbnRpZmllciB3aWxsIGJlIHVzZWQgZm9yIHRoaXMgTWVzc2FnZSBPYmplY3QuCisgICAgICogfFsxNV0gICAgfE1zZ1ZhbCAgICB8TWVzc2FnZSBWYWxpZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgTWVzc2FnZSBPYmplY3QgaXMgaWdub3JlZCBieSB0aGUgTWVzc2FnZSBIYW5kbGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgTWVzc2FnZSBPYmplY3QgaXMgY29uZmlndXJlZCBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYnkgdGhlIE1lc3NhZ2UgSGFuZGxlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgYXBwbGljYXRpb24gc29mdHdhcmUgbXVzdCByZXNldCB0aGUgTXNnVmFsIGJpdCBvZiBhbGwgdW51c2VkIE1lc3NhZ2VzIE9iamVjdHMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBiZWZvcmUgaXQgcmVzZXRzIGJpdCBJbml0IChDQU5fQ09OWzBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBtdXN0IGFsc28gYmUgcmVzZXQgYmVmb3JlIHRoZSBpZGVudGlmaWVyIElkMjgtMCAoQ0FOX0lGbl9BUkIxLzIpLCB0aGUgY29udHJvbCBiaXRzIFh0ZCAoQ0FOX0lGbl9BUkIyWzE0XSksIERpciAoQ0FOX0lGbl9BUEIyWzEzXSksIG9yIHRoZSBEYXRhIExlbmd0aCBDb2RlIERMQzMtMCAoQ0FOX0lGbl9NQ09OWzM6MF0pIGFyZSBtb2RpZmllZCwgb3IgaWYgdGhlIE1lc3NhZ2VzIE9iamVjdCBpcyBubyBsb25nZXIgcmVxdWlyZWQuCisgICAgICogQHZhciBDQU5fSUZfVDo6TUNPTgorICAgICAqIE9mZnNldDogMHgzOCwgMHg5OCAgSUZuIE1lc3NhZ2UgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfERMQyAgICAgICB8RGF0YSBMZW5ndGggQ29kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAtODogRGF0YSBGcmFtZSBoYXMgMC04IGRhdGEgYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8OS0xNTogRGF0YSBGcmFtZSBoYXMgOCBkYXRhIGJ5dGVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIERhdGEgTGVuZ3RoIENvZGUgb2YgYSBNZXNzYWdlIE9iamVjdCBtdXN0IGJlIGRlZmluZWQgdGhlIHNhbWUgYXMgaW4gYWxsIHRoZSBjb3JyZXNwb25kaW5nIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBpZGVudGlmaWVyIGF0IG90aGVyIG5vZGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIE1lc3NhZ2UgSGFuZGxlciBzdG9yZXMgYSBkYXRhIGZyYW1lLCBpdCB3aWxsIHdyaXRlIHRoZSBETEMgdG8gdGhlIHZhbHVlIGdpdmVuIGJ5IHRoZSByZWNlaXZlZCBtZXNzYWdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERhdGEgMDogMXN0IGRhdGEgYnl0ZSBvZiBhIENBTiBEYXRhIEZyYW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGF0YSAxOiAybmQgZGF0YSBieXRlIG9mIGEgQ0FOIERhdGEgRnJhbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEYXRhIDI6IDNyZCBkYXRhIGJ5dGUgb2YgYSBDQU4gRGF0YSBGcmFtZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERhdGEgMzogNHRoIGRhdGEgYnl0ZSBvZiBhIENBTiBEYXRhIEZyYW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGF0YSA0OiA1dGggZGF0YSBieXRlIG9mIGEgQ0FOIERhdGEgRnJhbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEYXRhIDU6IDZ0aCBkYXRhIGJ5dGUgb2YgYSBDQU4gRGF0YSBGcmFtZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERhdGEgNjogN3RoIGRhdGEgYnl0ZSBvZiBhIENBTiBEYXRhIEZyYW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGF0YSA3IDogOHRoIGRhdGEgYnl0ZSBvZiBhIENBTiBEYXRhIEZyYW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIERhdGEgMCBCeXRlIGlzIHRoZSBmaXJzdCBkYXRhIGJ5dGUgc2hpZnRlZCBpbnRvIHRoZSBzaGlmdCByZWdpc3RlciBvZiB0aGUgQ0FOIENvcmUgZHVyaW5nIGEgcmVjZXB0aW9uIHdoaWxlIHRoZSBEYXRhIDcgYnl0ZSBpcyB0aGUgbGFzdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBNZXNzYWdlIEhhbmRsZXIgc3RvcmVzIGEgRGF0YSBGcmFtZSwgaXQgd2lsbCB3cml0ZSBhbGwgdGhlIGVpZ2h0IGRhdGEgYnl0ZXMgaW50byBhIE1lc3NhZ2UgT2JqZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBEYXRhIExlbmd0aCBDb2RlIGlzIGxlc3MgdGhhbiA4LCB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIHRoZSBNZXNzYWdlIE9iamVjdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHVuc3BlY2lmaWVkIHZhbHVlcy4KKyAgICAgKiB8WzddICAgICB8RW9CICAgICAgIHxFbmQgT2YgQnVmZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE1lc3NhZ2UgT2JqZWN0IGJlbG9uZ3MgdG8gYSBGSUZPIEJ1ZmZlciBhbmQgaXMgbm90IHRoZSBsYXN0IE1lc3NhZ2UgT2JqZWN0IG9mIHRoYXQgRklGTyBCdWZmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNpbmdsZSBNZXNzYWdlIE9iamVjdCBvciBsYXN0IE1lc3NhZ2UgT2JqZWN0IG9mIGEgRklGTyBCdWZmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgdXNlZCB0byBjb25jYXRlbmF0ZSB0d28gb3IgbW9yZSBNZXNzYWdlIE9iamVjdHMgKHVwIHRvIDMyKSB0byBidWlsZCBhIEZJRk8gQnVmZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBzaW5nbGUgTWVzc2FnZSBPYmplY3RzIChub3QgYmVsb25naW5nIHRvIGEgRklGTyBCdWZmZXIpLCB0aGlzIGJpdCBtdXN0IGFsd2F5cyBiZSBzZXQgdG8gb25lLgorICAgICAqIHxbOF0gICAgIHxUeFJxc3QgICAgfFRyYW5zbWl0IFJlcXVlc3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhpcyBNZXNzYWdlIE9iamVjdCBpcyBub3Qgd2FpdGluZyBmb3IgdHJhbnNtaXNzaW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdHJhbnNtaXNzaW9uIG9mIHRoaXMgTWVzc2FnZSBPYmplY3QgaXMgcmVxdWVzdGVkIGFuZCBpcyBub3QgeWV0IGRvbmUuCisgICAgICogfFs5XSAgICAgfFJtdEVuICAgICB8UmVtb3RlIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF0IHRoZSByZWNlcHRpb24gb2YgYSBSZW1vdGUgRnJhbWUsIFR4UnFzdCAoQ0FOX0lGbl9NQ09OWzhdKSBpcyBsZWZ0IHVuY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXQgdGhlIHJlY2VwdGlvbiBvZiBhIFJlbW90ZSBGcmFtZSwgVHhScXN0IGlzIHNldC4KKyAgICAgKiB8WzEwXSAgICB8UnhJRSAgICAgIHxSZWNlaXZlIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRQbmQgKENBTl9JRm5fTUNPTlsxM10pIHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlY2VwdGlvbiBvZiBhIGZyYW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRQbmQgd2lsbCBiZSBzZXQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlY2VwdGlvbiBvZiBhIGZyYW1lLgorICAgICAqIHxbMTFdICAgIHxUeElFICAgICAgfFRyYW5zbWl0IEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRQbmQgKENBTl9JRm5fTUNPTlsxM10pIHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQgYWZ0ZXIgdGhlIHN1Y2Nlc3NmdWwgdHJhbnNtaXNzaW9uIG9mIGEgZnJhbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludFBuZCB3aWxsIGJlIHNldCBhZnRlciBhIHN1Y2Nlc3NmdWwgdHJhbnNtaXNzaW9uIG9mIGEgZnJhbWUuCisgICAgICogfFsxMl0gICAgfFVNYXNrICAgICB8VXNlIEFjY2VwdGFuY2UgTWFzaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNYXNrIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVzZSBNYXNrIChNc2syOC0wLCBNWHRkLCBhbmQgTURpcikgZm9yIGFjY2VwdGFuY2UgZmlsdGVyaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIHRoZSBVTWFzayBiaXQgaXMgc2V0IHRvIG9uZSwgdGhlIE1lc3NhZ2UgT2JqZWN0J3MgbWFzayBiaXRzIGhhdmUgdG8gYmUgcHJvZ3JhbW1lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb2YgdGhlIE1lc3NhZ2UgT2JqZWN0IGJlZm9yZSBNc2dWYWwgYml0IChDQU5fSUZuX0FQQjJbMTVdKSBpcyBzZXQgdG8gb25lLgorICAgICAqIHxbMTNdICAgIHxJbnRQbmQgICAgfEludGVycnVwdCBQZW5kaW5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoaXMgbWVzc2FnZSBvYmplY3QgaXMgbm90IHRoZSBzb3VyY2Ugb2YgYW4gaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGlzIG1lc3NhZ2Ugb2JqZWN0IGlzIHRoZSBzb3VyY2Ugb2YgYW4gaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBJbnRlcnJ1cHQgSWRlbnRpZmllciBpbiB0aGUgSW50ZXJydXB0IFJlZ2lzdGVyIHdpbGwgcG9pbnQgdG8gdGhpcyBtZXNzYWdlIG9iamVjdCBpZiB0aGVyZSBpcyBubyBvdGhlciBpbnRlcnJ1cHQgc291cmNlIHdpdGggaGlnaGVyIHByaW9yaXR5LgorICAgICAqIHxbMTRdICAgIHxNc2dMc3QgICAgfE1lc3NhZ2UgTG9zdCAob25seSB2YWxpZCBmb3IgTWVzc2FnZSBPYmplY3RzIHdpdGggZGlyZWN0aW9uID0gcmVjZWl2ZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIG1lc3NhZ2UgbG9zdCBzaW5jZSBsYXN0IHRpbWUgdGhpcyBiaXQgd2FzIHJlc2V0IGJ5IHRoZSBDUFUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBNZXNzYWdlIEhhbmRsZXIgc3RvcmVkIGEgbmV3IG1lc3NhZ2UgaW50byB0aGlzIG9iamVjdCB3aGVuIE5ld0RhdCB3YXMgc3RpbGwgc2V0LCB0aGUgQ1BVIGhhcyBsb3N0IGEgbWVzc2FnZS4KKyAgICAgKiB8WzE1XSAgICB8TmV3RGF0ICAgIHxOZXcgRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBuZXcgZGF0YSBoYXMgYmVlbiB3cml0dGVuIGludG8gdGhlIGRhdGEgcG9ydGlvbiBvZiB0aGlzIE1lc3NhZ2UgT2JqZWN0IGJ5IHRoZSBNZXNzYWdlIEhhbmRsZXIgc2luY2UgbGFzdCB0aW1lIHRoaXMgZmxhZyB3YXMgY2xlYXJlZCBieSB0aGUgYXBwbGljYXRpb24gc29mdHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBNZXNzYWdlIEhhbmRsZXIgb3IgdGhlIGFwcGxpY2F0aW9uIHNvZnR3YXJlIGhhcyB3cml0dGVuIG5ldyBkYXRhIGludG8gdGhlIGRhdGEgcG9ydGlvbiBvZiB0aGlzIE1lc3NhZ2UgT2JqZWN0LgorICAgICAqIEB2YXIgQ0FOX0lGX1Q6OkRBVF9BMQorICAgICAqIE9mZnNldDogMHgzQywgMHg5QyAgSUZuIERhdGEgQTEgUmVnaXN0ZXIgKFJlZ2lzdGVyIE1hcCBOb3RlIDMpCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8RGF0YTAgICAgIHxEYXRhIEJ5dGUgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDFzdCBkYXRhIGJ5dGUgb2YgYSBDQU4gRGF0YSBGcmFtZQorICAgICAqIHxbMTU6OF0gIHxEYXRhMSAgICAgfERhdGEgQnl0ZSAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Mm5kIGRhdGEgYnl0ZSBvZiBhIENBTiBEYXRhIEZyYW1lCisgICAgICogQHZhciBDQU5fSUZfVDo6REFUX0EyCisgICAgICogT2Zmc2V0OiAweDQwLCAweEEwICBJRm4gRGF0YSBBMiBSZWdpc3RlciAoUmVnaXN0ZXIgTWFwIE5vdGUgMykKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxEYXRhMiAgICAgfERhdGEgQnl0ZSAyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8M3JkIGRhdGEgYnl0ZSBvZiBDQU4gRGF0YSBGcmFtZQorICAgICAqIHxbMTU6OF0gIHxEYXRhMyAgICAgfERhdGEgQnl0ZSAzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NHRoIGRhdGEgYnl0ZSBvZiBDQU4gRGF0YSBGcmFtZQorICAgICAqIEB2YXIgQ0FOX0lGX1Q6OkRBVF9CMQorICAgICAqIE9mZnNldDogMHg0NCwgMHhBNCAgSUZuIERhdGEgQjEgUmVnaXN0ZXIgKFJlZ2lzdGVyIE1hcCBOb3RlIDMpCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8RGF0YTQgICAgIHxEYXRhIEJ5dGUgNAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDV0aCBkYXRhIGJ5dGUgb2YgQ0FOIERhdGEgRnJhbWUKKyAgICAgKiB8WzE1OjhdICB8RGF0YTUgICAgIHxEYXRhIEJ5dGUgNQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDZ0aCBkYXRhIGJ5dGUgb2YgQ0FOIERhdGEgRnJhbWUKKyAgICAgKiBAdmFyIENBTl9JRl9UOjpEQVRfQjIKKyAgICAgKiBPZmZzZXQ6IDB4NDgsIDB4QTggIElGbiBEYXRhIEIyIFJlZ2lzdGVyIChSZWdpc3RlciBNYXAgTm90ZSAzKQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfERhdGE2ICAgICB8RGF0YSBCeXRlIDYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw3dGggZGF0YSBieXRlIG9mIENBTiBEYXRhIEZyYW1lLgorICAgICAqIHxbMTU6OF0gIHxEYXRhNyAgICAgfERhdGEgQnl0ZSA3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8OHRoIGRhdGEgYnl0ZSBvZiBDQU4gRGF0YSBGcmFtZS4KKyAgICAgKi8KKworICAgIF9fSU8gdWludDMyX3QgQ1JFUTsgICAgICAgICAgLyogT2Zmc2V0OiAweDIwLCAweDgwICBJRm4gKFJlZ2lzdGVyIE1hcCBOb3RlIDIpIENvbW1hbmQgUmVxdWVzdCBSZWdpc3RlcnMgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENNQVNLOyAgICAgICAgIC8qIE9mZnNldDogMHgyNCwgMHg4NCAgSUZuIENvbW1hbmQgTWFzayBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBNQVNLMTsgICAgICAgICAvKiBPZmZzZXQ6IDB4MjgsIDB4ODggIElGbiBNYXNrIDEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTUFTSzI7ICAgICAgICAgLyogT2Zmc2V0OiAweDJDLCAweDhDICBJRm4gTWFzayAyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFSQjE7ICAgICAgICAgIC8qIE9mZnNldDogMHgzMCwgMHg5MCAgSUZuIEFyYml0cmF0aW9uIDEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBUkIyOyAgICAgICAgICAvKiBPZmZzZXQ6IDB4MzQsIDB4OTQgIElGbiBBcmJpdHJhdGlvbiAyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTUNPTjsgICAgICAgICAgLyogT2Zmc2V0OiAweDM4LCAweDk4ICBJRm4gTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERBVF9BMTsgICAgICAgIC8qIE9mZnNldDogMHgzQywgMHg5QyAgSUZuIERhdGEgQTEgUmVnaXN0ZXIgKFJlZ2lzdGVyIE1hcCBOb3RlIDMpICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBEQVRfQTI7ICAgICAgICAvKiBPZmZzZXQ6IDB4NDAsIDB4QTAgIElGbiBEYXRhIEEyIFJlZ2lzdGVyIChSZWdpc3RlciBNYXAgTm90ZSAzKSAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgREFUX0IxOyAgICAgICAgLyogT2Zmc2V0OiAweDQ0LCAweEE0ICBJRm4gRGF0YSBCMSBSZWdpc3RlciAoUmVnaXN0ZXIgTWFwIE5vdGUgMykgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERBVF9CMjsgICAgICAgIC8qIE9mZnNldDogMHg0OCwgMHhBOCAgSUZuIERhdGEgQjIgUmVnaXN0ZXIgKFJlZ2lzdGVyIE1hcCBOb3RlIDMpICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsxM107CisKK30gQ0FOX0lGX1Q7CisKKworCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworCisgICAgLyoqCisgICAgICogQHZhciBDQU5fVDo6Q09OCisgICAgICogT2Zmc2V0OiAweDAwICBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SW5pdCAgICAgIHxJbml0IEluaXRpYWxpemF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vcm1hbCBPcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluaXRpYWxpemF0aW9uIGlzIHN0YXJ0ZWQuCisgICAgICogfFsxXSAgICAgfElFICAgICAgICB8TW9kdWxlIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8U0lFICAgICAgIHxTdGF0dXMgQ2hhbmdlIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEaXNhYmxlZCAtIE5vIFN0YXR1cyBDaGFuZ2UgSW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFbmFibGVkIC0gQW4gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gYSBtZXNzYWdlIHRyYW5zZmVyIGlzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgb3IgYSBDQU4gYnVzIGVycm9yIGlzIGRldGVjdGVkLgorICAgICAqIHxbM10gICAgIHxFSUUgICAgICAgfEVycm9yIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEaXNhYmxlZCAtIE5vIEVycm9yIFN0YXR1cyBJbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZWQgLSBBIGNoYW5nZSBpbiB0aGUgYml0cyBCT2ZmIChDQU5fU1RBVFVTWzddKSBvciBFV2FybiAoQ0FOX1NUQVRVU1s2XSkgaW4gdGhlIFN0YXR1cyBSZWdpc3RlciB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdC4KKyAgICAgKiB8WzVdICAgICB8REFSICAgICAgIHxBdXRvbWF0aWMgUmUtVHJhbnNtaXNzaW9uIERpc2FibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvbWF0aWMgUmV0cmFuc21pc3Npb24gb2YgZGlzdHVyYmVkIG1lc3NhZ2VzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF1dG9tYXRpYyBSZXRyYW5zbWlzc2lvbiBkaXNhYmxlZC4KKyAgICAgKiB8WzZdICAgICB8Q0NFICAgICAgIHxDb25maWd1cmF0aW9uIENoYW5nZSBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB3cml0ZSBhY2Nlc3MgdG8gdGhlIEJpdCBUaW1pbmcgUmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdyaXRlIGFjY2VzcyB0byB0aGUgQml0IFRpbWluZyBSZWdpc3RlciAoQ0FOX0JUSU1FKSBhbGxvd2VkLiAod2hpbGUgSW5pdCBiaXQgKENBTl9DT05bMF0pID0gMSkuCisgICAgICogfFs3XSAgICAgfFRlc3QgICAgICB8VGVzdCBNb2RlIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vcm1hbCBPcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRlc3QgTW9kZS4KKyAgICAgKiBAdmFyIENBTl9UOjpTVEFUVVMKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyOjBdICAgfExFQyAgICAgICB8TGFzdCBFcnJvciBDb2RlIChUeXBlIE9mIFRoZSBMYXN0IEVycm9yIFRvIE9jY3VyIE9uIFRoZSBDQU4gQnVzKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBMRUMgZmllbGQgaG9sZHMgYSBjb2RlLCB3aGljaCBpbmRpY2F0ZXMgdGhlIHR5cGUgb2YgdGhlIGxhc3QgZXJyb3IgdG8gb2NjdXIgb24gdGhlIENBTiBidXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCB3aWxsIGJlIGNsZWFyZWQgdG8gJzAnIHdoZW4gYSBtZXNzYWdlIGhhcyBiZWVuIHRyYW5zZmVycmVkIChyZWNlcHRpb24gb3IgdHJhbnNtaXNzaW9uKSB3aXRob3V0IGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB1bnVzZWQgY29kZSAnNycgbWF5IGJlIHdyaXR0ZW4gYnkgdGhlIENQVSB0byBjaGVjayBmb3IgdXBkYXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJlcyB0aGUgZXJyb3IgY29kZS4KKyAgICAgKiB8WzNdICAgICB8VHhPSyAgICAgIHxUcmFuc21pdHRlZCBBIE1lc3NhZ2UgU3VjY2Vzc2Z1bGx5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNpbmNlIHRoaXMgYml0IHdhcyByZXNldCBieSB0aGUgQ1BVLCBubyBtZXNzYWdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBuZXZlciByZXNldCBieSB0aGUgQ0FOIENvcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNpbmNlIHRoaXMgYml0IHdhcyBsYXN0IHJlc2V0IGJ5IHRoZSBDUFUsIGEgbWVzc2FnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgKGVycm9yIGZyZWUgYW5kIGFja25vd2xlZGdlZCBieSBhdCBsZWFzdCBvbmUgb3RoZXIgbm9kZSkgdHJhbnNtaXR0ZWQuCisgICAgICogfFs0XSAgICAgfFJ4T0sgICAgICB8UmVjZWl2ZWQgQSBNZXNzYWdlIFN1Y2Nlc3NmdWxseQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBtZXNzYWdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBzaW5jZSB0aGlzIGJpdCB3YXMgbGFzdCByZXNldCBieSB0aGUgQ1BVLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIG5ldmVyIHJlc2V0IGJ5IHRoZSBDQU4gQ29yZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQSBtZXNzYWdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBzaW5jZSB0aGlzIGJpdCB3YXMgbGFzdCByZXNldCBieSB0aGUgQ1BVIChpbmRlcGVuZGVudCBvZiB0aGUgcmVzdWx0IG9mIGFjY2VwdGFuY2UgZmlsdGVyaW5nKS4KKyAgICAgKiB8WzVdICAgICB8RVBhc3MgICAgIHxFcnJvciBQYXNzaXZlIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBDQU4gQ29yZSBpcyBlcnJvciBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBDQU4gQ29yZSBpcyBpbiB0aGUgZXJyb3IgcGFzc2l2ZSBzdGF0ZSBhcyBkZWZpbmVkIGluIHRoZSBDQU4gU3BlY2lmaWNhdGlvbi4KKyAgICAgKiB8WzZdICAgICB8RVdhcm4gICAgIHxFcnJvciBXYXJuaW5nIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCb3RoIGVycm9yIGNvdW50ZXJzIGFyZSBiZWxvdyB0aGUgZXJyb3Igd2FybmluZyBsaW1pdCBvZiA5Ni4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXQgbGVhc3Qgb25lIG9mIHRoZSBlcnJvciBjb3VudGVycyBpbiB0aGUgRU1MIGhhcyByZWFjaGVkIHRoZSBlcnJvciB3YXJuaW5nIGxpbWl0IG9mIDk2LgorICAgICAqIHxbN10gICAgIHxCT2ZmICAgICAgfEJ1cy1PZmYgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBDQU4gbW9kdWxlIGlzIG5vdCBpbiBidXMtb2ZmIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgQ0FOIG1vZHVsZSBpcyBpbiBidXMtb2ZmIHN0YXRlLgorICAgICAqIEB2YXIgQ0FOX1Q6OkVSUgorICAgICAqIE9mZnNldDogMHgwOCAgRXJyb3IgQ291bnRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfFRFQyAgICAgICB8VHJhbnNtaXQgRXJyb3IgQ291bnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFjdHVhbCBzdGF0ZSBvZiB0aGUgVHJhbnNtaXQgRXJyb3IgQ291bnRlci4gVmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1LgorICAgICAqIHxbMTQ6OF0gIHxSRUMgICAgICAgfFJlY2VpdmUgRXJyb3IgQ291bnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFjdHVhbCBzdGF0ZSBvZiB0aGUgUmVjZWl2ZSBFcnJvciBDb3VudGVyLiBWYWx1ZXMgYmV0d2VlbiAwIGFuZCAxMjcuCisgICAgICogfFsxNV0gICAgfFJQICAgICAgICB8UmVjZWl2ZSBFcnJvciBQYXNzaXZlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBSZWNlaXZlIEVycm9yIENvdW50ZXIgaXMgYmVsb3cgdGhlIGVycm9yIHBhc3NpdmUgbGV2ZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBSZWNlaXZlIEVycm9yIENvdW50ZXIgaGFzIHJlYWNoZWQgdGhlIGVycm9yIHBhc3NpdmUgbGV2ZWwgYXMgZGVmaW5lZCBpbiB0aGUgQ0FOIFNwZWNpZmljYXRpb24uCisgICAgICogQHZhciBDQU5fVDo6QlRJTUUKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIEJpdCBUaW1pbmcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNTowXSAgIHxCUlAgICAgICAgfEJhdWQgUmF0ZSBQcmVzY2FsZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAxLTB4M0Y6IFRoZSB2YWx1ZSBieSB3aGljaCB0aGUgb3NjaWxsYXRvciBmcmVxdWVuY3kgaXMgZGl2aWRlZCBmb3IgZ2VuZXJhdGluZyB0aGUgYml0IHRpbWUgcXVhbnRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBiaXQgdGltZSBpcyBidWlsdCB1cCBmcm9tIGEgbXVsdGlwbGUgb2YgdGhpcyBxdWFudGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VmFsaWQgdmFsdWVzIGZvciB0aGUgQmF1ZCBSYXRlIFByZXNjYWxlciBhcmUgWyAwIC4uLiA2MyBdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBhY3R1YWwgaW50ZXJwcmV0YXRpb24gYnkgdGhlIGhhcmR3YXJlIG9mIHRoaXMgdmFsdWUgaXMgc3VjaCB0aGF0IG9uZSBtb3JlIHRoYW4gdGhlIHZhbHVlIHByb2dyYW1tZWQgaGVyZSBpcyB1c2VkLgorICAgICAqIHxbNzo2XSAgIHxTSlcgICAgICAgfChSZSlTeW5jaHJvbml6YXRpb24gSnVtcCBXaWR0aAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MC0weDM6IFZhbGlkIHByb2dyYW1tZWQgdmFsdWVzIGFyZSBbMCAuLi4gM10uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGFjdHVhbCBpbnRlcnByZXRhdGlvbiBieSB0aGUgaGFyZHdhcmUgb2YgdGhpcyB2YWx1ZSBpcyBzdWNoIHRoYXQgb25lIG1vcmUgdGhhbiB0aGUgdmFsdWUgcHJvZ3JhbW1lZCBoZXJlIGlzIHVzZWQuCisgICAgICogfFsxMTo4XSAgfFRTZWcxICAgICB8VGltZSBTZWdtZW50IEJlZm9yZSBUaGUgU2FtcGxlIFBvaW50IE1pbnVzIFN5bmNfU2VnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwMS0weDBGOiB2YWxpZCB2YWx1ZXMgZm9yIFRTZWcxIGFyZSBbMSAuLi4gMTVdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBhY3R1YWwgaW50ZXJwcmV0YXRpb24gYnkgdGhlIGhhcmR3YXJlIG9mIHRoaXMgdmFsdWUgaXMgc3VjaCB0aGF0IG9uZSBtb3JlIHRoYW4gdGhlIHZhbHVlIHByb2dyYW1tZWQgaXMgdXNlZC4KKyAgICAgKiB8WzE0OjEyXSB8VFNlZzIgICAgIHxUaW1lIFNlZ21lbnQgQWZ0ZXIgU2FtcGxlIFBvaW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwLTB4NzogVmFsaWQgdmFsdWVzIGZvciBUU2VnMiBhcmUgWzAgLi4uIDddLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBhY3R1YWwgaW50ZXJwcmV0YXRpb24gYnkgdGhlIGhhcmR3YXJlIG9mIHRoaXMgdmFsdWUgaXMgc3VjaCB0aGF0IG9uZSBtb3JlIHRoYW4gdGhlIHZhbHVlIHByb2dyYW1tZWQgaGVyZSBpcyB1c2VkLgorICAgICAqIEB2YXIgQ0FOX1Q6OklJRFIKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIEludGVycnVwdCBJZGVudGlmaWVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8SW50SWQgICAgIHxJbnRlcnJ1cHQgSWRlbnRpZmllciAoSW5kaWNhdGVzIFRoZSBTb3VyY2UgT2YgVGhlIEludGVycnVwdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBzZXZlcmFsIGludGVycnVwdHMgYXJlIHBlbmRpbmcsIHRoZSBDQU4gSW50ZXJydXB0IFJlZ2lzdGVyIHdpbGwgcG9pbnQgdG8gdGhlIHBlbmRpbmcgaW50ZXJydXB0IHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHksIGRpc3JlZ2FyZGluZyB0aGVpciBjaHJvbm9sb2dpY2FsIG9yZGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFuIGludGVycnVwdCByZW1haW5zIHBlbmRpbmcgdW50aWwgdGhlIGFwcGxpY2F0aW9uIHNvZnR3YXJlIGhhcyBjbGVhcmVkIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIEludElkIGlzIGRpZmZlcmVudCBmcm9tIDB4MDAwMCBhbmQgSUUgKENBTl9JRm5fTUNPTlsxXSkgaXMgc2V0LCB0aGUgSVJRIGludGVycnVwdCBzaWduYWwgdG8gdGhlIEVJQyBpcyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGludGVycnVwdCByZW1haW5zIGFjdGl2ZSB1bnRpbCBJbnRJZCBpcyBiYWNrIHRvIHZhbHVlIDB4MDAwMCAodGhlIGNhdXNlIG9mIHRoZSBpbnRlcnJ1cHQgaXMgcmVzZXQpIG9yIHVudGlsIElFIGlzIHJlc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBTdGF0dXMgSW50ZXJydXB0IGhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBbW9uZyB0aGUgbWVzc2FnZSBpbnRlcnJ1cHRzLCB0aGUgTWVzc2FnZSBPYmplY3QnIHMgaW50ZXJydXB0IHByaW9yaXR5IGRlY3JlYXNlcyB3aXRoIGluY3JlYXNpbmcgbWVzc2FnZSBudW1iZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QSBtZXNzYWdlIGludGVycnVwdCBpcyBjbGVhcmVkIGJ5IGNsZWFyaW5nIHRoZSBNZXNzYWdlIE9iamVjdCdzIEludFBuZCBiaXQgKENBTl9JRm5fTUNPTlsxM10pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBTdGF0dXMgSW50ZXJydXB0IGlzIGNsZWFyZWQgYnkgcmVhZGluZyB0aGUgU3RhdHVzIFJlZ2lzdGVyLgorICAgICAqIEB2YXIgQ0FOX1Q6OlRFU1QKKyAgICAgKiBPZmZzZXQ6IDB4MTQgIFRlc3QgUmVnaXN0ZXIgKFJlZ2lzdGVyIE1hcCBOb3RlIDEpCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8UmVzICAgICAgIHxSZXNlcnZlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXJlIGFyZSByZXNlcnZlZCBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIGFsd2F5cyByZWFkIGFzICcwJyBhbmQgbXVzdCBhbHdheXMgYmUgd3JpdHRlbiB3aXRoICcwJy4KKyAgICAgKiB8WzJdICAgICB8QmFzaWMgICAgIHxCYXNpYyBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJhc2ljIE1vZGUgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MT0gSUYxIFJlZ2lzdGVycyB1c2VkIGFzIFR4IEJ1ZmZlciwgSUYyIFJlZ2lzdGVycyB1c2VkIGFzIFJ4IEJ1ZmZlci4KKyAgICAgKiB8WzNdICAgICB8U2lsZW50ICAgIHxTaWxlbnQgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgbW9kdWxlIGlzIGluIFNpbGVudCBNb2RlLgorICAgICAqIHxbNF0gICAgIHxMQmFjayAgICAgfExvb3AgQmFjayBNb2RlIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExvb3AgQmFjayBNb2RlIGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMb29wIEJhY2sgTW9kZSBpcyBlbmFibGVkLgorICAgICAqIHxbNjo1XSAgIHxUeDEwICAgICAgfFR4WzE6MF06IENvbnRyb2wgT2YgQ0FOX1RYIFBpbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUmVzZXQgdmFsdWUsIENBTl9UWCBwaW4gaXMgY29udHJvbGxlZCBieSB0aGUgQ0FOIENvcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBTYW1wbGUgUG9pbnQgY2FuIGJlIG1vbml0b3JlZCBhdCBDQU5fVFggcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ0FOX1RYIHBpbiBkcml2ZXMgYSBkb21pbmFudCAoJzAnKSB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENBTl9UWCBwaW4gZHJpdmVzIGEgcmVjZXNzaXZlICgnMScpIHZhbHVlLgorICAgICAqIHxbN10gICAgIHxSeCAgICAgICAgfE1vbml0b3JzIFRoZSBBY3R1YWwgVmFsdWUgT2YgQ0FOX1JYIFBpbiAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgQ0FOIGJ1cyBpcyBkb21pbmFudCAoQ0FOX1JYID0gJzAnKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIENBTiBidXMgaXMgcmVjZXNzaXZlIChDQU5fUlggPSAnMScpLgorICAgICAqIEB2YXIgQ0FOX1Q6OkJSUEUKKyAgICAgKiBPZmZzZXQ6IDB4MTggIEJhdWQgUmF0ZSBQcmVzY2FsZXIgRXh0ZW5zaW9uIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8QlJQRSAgICAgIHxCUlBFOiBCYXVkIFJhdGUgUHJlc2NhbGVyIEV4dGVuc2lvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDAtMHgwRjogQnkgcHJvZ3JhbW1pbmcgQlJQRSwgdGhlIEJhdWQgUmF0ZSBQcmVzY2FsZXIgY2FuIGJlIGV4dGVuZGVkIHRvIHZhbHVlcyB1cCB0byAxMDIzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBhY3R1YWwgaW50ZXJwcmV0YXRpb24gYnkgdGhlIGhhcmR3YXJlIGlzIHRoYXQgb25lIG1vcmUgdGhhbiB0aGUgdmFsdWUgcHJvZ3JhbW1lZCBieSBCUlBFIChNU0JzKSBhbmQgQlRJTUUgKExTQnMpIGlzIHVzZWQuCisgICAgICogQHZhciBDQU5fVDo6SUYKKyAgICAgKiBPZmZzZXQ6IDB4MjB+MHhGQyAgQ0FOIEludGVyZmFjZSBSZWdpc3RlcnMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiBDQU4gaW50ZXJmYWNlIHN0cnVjdHVyZS4gUmVmZXIgdG8gXHJlZiBDQU5fSUZfVCBmb3IgZGV0YWlsIGluZm9ybWF0aW9uLgorICAgICAgICAgKgorICAgICAqIEB2YXIgQ0FOX1Q6OlRYUkVRMQorICAgICAqIE9mZnNldDogMHgxMDAgIFRyYW5zbWlzc2lvbiBSZXF1ZXN0IFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxUeFJxc3RbMTY6MV18VHJhbnNtaXNzaW9uIFJlcXVlc3QgQml0cyAxNi0xIChPZiBBbGwgTWVzc2FnZSBPYmplY3RzKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGlzIE1lc3NhZ2UgT2JqZWN0IGlzIG5vdCB3YWl0aW5nIGZvciB0cmFuc21pc3Npb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB0cmFuc21pc3Npb24gb2YgdGhpcyBNZXNzYWdlIE9iamVjdCBpcyByZXF1ZXN0ZWQgYW5kIGlzIG5vdCB5ZXQgZG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSByZWFkIG9ubHkuCisgICAgICogQHZhciBDQU5fVDo6VFhSRVEyCisgICAgICogT2Zmc2V0OiAweDEwNCAgVHJhbnNtaXNzaW9uIFJlcXVlc3QgUmVnaXN0ZXIgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFR4UnFzdFszMjoxN118VHJhbnNtaXNzaW9uIFJlcXVlc3QgQml0cyAzMi0xNyAoT2YgQWxsIE1lc3NhZ2UgT2JqZWN0cykKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhpcyBNZXNzYWdlIE9iamVjdCBpcyBub3Qgd2FpdGluZyBmb3IgdHJhbnNtaXNzaW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdHJhbnNtaXNzaW9uIG9mIHRoaXMgTWVzc2FnZSBPYmplY3QgaXMgcmVxdWVzdGVkIGFuZCBpcyBub3QgeWV0IGRvbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgcmVhZCBvbmx5LgorICAgICAqIEB2YXIgQ0FOX1Q6Ok5EQVQxCisgICAgICogT2Zmc2V0OiAweDEyMCAgTmV3IERhdGEgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfE5ld0RhdGFbMTY6MV18TmV3IERhdGEgQml0cyAxNi0xIChPZiBBbGwgTWVzc2FnZSBPYmplY3RzKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBuZXcgZGF0YSBoYXMgYmVlbiB3cml0dGVuIGludG8gdGhlIGRhdGEgcG9ydGlvbiBvZiB0aGlzIE1lc3NhZ2UgT2JqZWN0IGJ5IHRoZSBNZXNzYWdlIEhhbmRsZXIgc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIGZsYWcgd2FzIGNsZWFyZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNvZnR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgTWVzc2FnZSBIYW5kbGVyIG9yIHRoZSBhcHBsaWNhdGlvbiBzb2Z0d2FyZSBoYXMgd3JpdHRlbiBuZXcgZGF0YSBpbnRvIHRoZSBkYXRhIHBvcnRpb24gb2YgdGhpcyBNZXNzYWdlIE9iamVjdC4KKyAgICAgKiBAdmFyIENBTl9UOjpOREFUMgorICAgICAqIE9mZnNldDogMHgxMjQgIE5ldyBEYXRhIFJlZ2lzdGVyIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxOZXdEYXRhWzMyOjE3XXxOZXcgRGF0YSBCaXRzIDMyLTE3IChPZiBBbGwgTWVzc2FnZSBPYmplY3RzKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBuZXcgZGF0YSBoYXMgYmVlbiB3cml0dGVuIGludG8gdGhlIGRhdGEgcG9ydGlvbiBvZiB0aGlzIE1lc3NhZ2UgT2JqZWN0IGJ5IHRoZSBNZXNzYWdlIEhhbmRsZXIgc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIGZsYWcgd2FzIGNsZWFyZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNvZnR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgTWVzc2FnZSBIYW5kbGVyIG9yIHRoZSBhcHBsaWNhdGlvbiBzb2Z0d2FyZSBoYXMgd3JpdHRlbiBuZXcgZGF0YSBpbnRvIHRoZSBkYXRhIHBvcnRpb24gb2YgdGhpcyBNZXNzYWdlIE9iamVjdC4KKyAgICAgKiBAdmFyIENBTl9UOjpJUE5EMQorICAgICAqIE9mZnNldDogMHgxNDAgIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxJbnRQbmRbMTY6MV18SW50ZXJydXB0IFBlbmRpbmcgQml0cyAxNi0xIChPZiBBbGwgTWVzc2FnZSBPYmplY3RzKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGlzIG1lc3NhZ2Ugb2JqZWN0IGlzIG5vdCB0aGUgc291cmNlIG9mIGFuIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhpcyBtZXNzYWdlIG9iamVjdCBpcyB0aGUgc291cmNlIG9mIGFuIGludGVycnVwdC4KKyAgICAgKiBAdmFyIENBTl9UOjpJUE5EMgorICAgICAqIE9mZnNldDogMHgxNDQgIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxJbnRQbmRbMzI6MTddfEludGVycnVwdCBQZW5kaW5nIEJpdHMgMzItMTcoT2YgQWxsIE1lc3NhZ2UgT2JqZWN0cykKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhpcyBtZXNzYWdlIG9iamVjdCBpcyBub3QgdGhlIHNvdXJjZSBvZiBhbiBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoaXMgbWVzc2FnZSBvYmplY3QgaXMgdGhlIHNvdXJjZSBvZiBhbiBpbnRlcnJ1cHQuCisgICAgICogQHZhciBDQU5fVDo6TVZMRDEKKyAgICAgKiBPZmZzZXQ6IDB4MTYwICBNZXNzYWdlIFZhbGlkIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxNc2dWYWxbMTY6MV18TWVzc2FnZSBWYWxpZCBCaXRzIDE2LTEgKE9mIEFsbCBNZXNzYWdlIE9iamVjdHMpIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoaXMgTWVzc2FnZSBPYmplY3QgaXMgaWdub3JlZCBieSB0aGUgTWVzc2FnZSBIYW5kbGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGlzIE1lc3NhZ2UgT2JqZWN0IGlzIGNvbmZpZ3VyZWQgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIGJ5IHRoZSBNZXNzYWdlIEhhbmRsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RXguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q0FOX01WTEQxWzBdIG1lYW5zIE1lc3NhZ2Ugb2JqZWN0IE5vLjEgaXMgdmFsaWQgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIENBTl9NVkxEMVswXSBpcyBzZXQsIG1lc3NhZ2Ugb2JqZWN0IE5vLjEgaXMgY29uZmlndXJlZC4KKyAgICAgKiBAdmFyIENBTl9UOjpNVkxEMgorICAgICAqIE9mZnNldDogMHgxNjQgIE1lc3NhZ2UgVmFsaWQgUmVnaXN0ZXIgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfE1zZ1ZhbFszMjoxN118TWVzc2FnZSBWYWxpZCBCaXRzIDMyLTE3IChPZiBBbGwgTWVzc2FnZSBPYmplY3RzKSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGlzIE1lc3NhZ2UgT2JqZWN0IGlzIGlnbm9yZWQgYnkgdGhlIE1lc3NhZ2UgSGFuZGxlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhpcyBNZXNzYWdlIE9iamVjdCBpcyBjb25maWd1cmVkIGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZCBieSB0aGUgTWVzc2FnZSBIYW5kbGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEV4LkNBTl9NVkxEMlsxNV0gbWVhbnMgTWVzc2FnZSBvYmplY3QgTm8uMzIgaXMgdmFsaWQgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIENBTl9NVkxEMlsxNV0gaXMgc2V0LCBtZXNzYWdlIG9iamVjdCBOby4zMiBpcyBjb25maWd1cmVkLgorICAgICAqIEB2YXIgQ0FOX1Q6OldVX0VOCisgICAgICogT2Zmc2V0OiAweDE2OCAgV2FrZS11cCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxXQUtVUF9FTiAgfFdha2UtVXAgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB3YWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVXNlciBjYW4gd2FrZS11cCBzeXN0ZW0gd2hlbiB0aGVyZSBpcyBhIGZhbGxpbmcgZWRnZSBpbiB0aGUgQ0FOX1J4IHBpbi4KKyAgICAgKiBAdmFyIENBTl9UOjpXVV9TVEFUVVMKKyAgICAgKiBPZmZzZXQ6IDB4MTZDICBXYWtlLXVwIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdBS1VQX1NUUyB8V2FrZS1VcCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gd2FrZS11cCBldmVudCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2FrZS11cCBldmVudCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nICcwJy4KKyAgICAgKi8KKworICAgIF9fSU8gdWludDMyX3QgQ09OOyAgICAgICAgICAgLyogT2Zmc2V0OiAweDAwICBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzsgICAgICAgIC8qIE9mZnNldDogMHgwNCAgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBFUlI7ICAgICAgICAgICAvKiBPZmZzZXQ6IDB4MDggIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQlRJTUU7ICAgICAgICAgLyogT2Zmc2V0OiAweDBDICBCaXQgVGltaW5nIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IElJRFI7ICAgICAgICAgIC8qIE9mZnNldDogMHgxMCAgSW50ZXJydXB0IElkZW50aWZpZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBURVNUOyAgICAgICAgICAvKiBPZmZzZXQ6IDB4MTQgIFRlc3QgUmVnaXN0ZXIgKFJlZ2lzdGVyIE1hcCBOb3RlIDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQlJQRTsgICAgICAgICAgLyogT2Zmc2V0OiAweDE4ICBCYXVkIFJhdGUgUHJlc2NhbGVyIEV4dGVuc2lvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzFdOworICAgIF9fSU8gQ0FOX0lGX1QgSUZbMl07ICAgICAgICAgLyogT2Zmc2V0OiAweDIwfjB4RkMgIENBTiBJbnRlcmZhY2UgUmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxWzhdOworICAgIF9fSSAgdWludDMyX3QgVFhSRVExOyAgICAgICAgLyogT2Zmc2V0OiAweDEwMCAgVHJhbnNtaXNzaW9uIFJlcXVlc3QgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFRYUkVRMjsgICAgICAgIC8qIE9mZnNldDogMHgxMDQgIFRyYW5zbWlzc2lvbiBSZXF1ZXN0IFJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFM1s2XTsKKyAgICBfX0kgIHVpbnQzMl90IE5EQVQxOyAgICAgICAgIC8qIE9mZnNldDogMHgxMjAgIE5ldyBEYXRhIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBOREFUMjsgICAgICAgICAvKiBPZmZzZXQ6IDB4MTI0ICBOZXcgRGF0YSBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTRbNl07CisgICAgX19JICB1aW50MzJfdCBJUE5EMTsgICAgICAgICAvKiBPZmZzZXQ6IDB4MTQwICBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgSVBORDI7ICAgICAgICAgLyogT2Zmc2V0OiAweDE0NCAgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU1WzZdOworICAgIF9fSSAgdWludDMyX3QgTVZMRDE7ICAgICAgICAgLyogT2Zmc2V0OiAweDE2MCAgTWVzc2FnZSBWYWxpZCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IE1WTEQyOyAgICAgICAgIC8qIE9mZnNldDogMHgxNjQgIE1lc3NhZ2UgVmFsaWQgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBXVV9FTjsgICAgICAgICAvKiBPZmZzZXQ6IDB4MTY4ICBXYWtlLXVwIEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgV1VfU1RBVFVTOyAgICAgLyogT2Zmc2V0OiAweDE2QyAgV2FrZS11cCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBDQU5fVDsKKworCisKKy8qKgorICAgIEBhZGR0b2dyb3VwIENBTl9DT05TVCBDQU4gQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgQ0FOIENvbnRyb2xsZXIKK0B7ICovCisvKiBDQU4gQ09OIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fQ09OX1RFU1RfUG9zICAgICAgICAgICA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6Q09OOiBURVNUIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9DT05fVEVTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDQU5fQ09OX1RFU1RfUG9zKSAgICAgICAgICAvKiE8IENBTl9UOjpDT046IFRFU1QgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fQ09OX0NDRV9Qb3MgICAgICAgICAgICA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6Q09OOiBDQ0UgUG9zaXRpb24gICovCisjZGVmaW5lIENBTl9DT05fQ0NFX01zayAgICAgICAgICAgICgweDF1bCA8PCBDQU5fQ09OX0NDRV9Qb3MpICAgICAgICAgICAvKiE8IENBTl9UOjpDT046IENDRSBNYXNrICAgICAgKi8KKworI2RlZmluZSBDQU5fQ09OX0RBUl9Qb3MgICAgICAgICAgICA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6Q09OOiBEQVIgUG9zaXRpb24gICovCisjZGVmaW5lIENBTl9DT05fREFSX01zayAgICAgICAgICAgICgweDF1bCA8PCBDQU5fQ09OX0RBUl9Qb3MpICAgICAgICAgICAvKiE8IENBTl9UOjpDT046IERBUiBNYXNrICAgICAgKi8KKworI2RlZmluZSBDQU5fQ09OX0VJRV9Qb3MgICAgICAgICAgICAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6Q09OOiBFSUUgUG9zaXRpb24gICovCisjZGVmaW5lIENBTl9DT05fRUlFX01zayAgICAgICAgICAgICgweDF1bCA8PCBDQU5fQ09OX0VJRV9Qb3MpICAgICAgICAgICAvKiE8IENBTl9UOjpDT046IEVJRSBNYXNrICAgICAgKi8KKworI2RlZmluZSBDQU5fQ09OX1NJRV9Qb3MgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6Q09OOiBTSUUgUG9zaXRpb24gICovCisjZGVmaW5lIENBTl9DT05fU0lFX01zayAgICAgICAgICAgICgweDF1bCA8PCBDQU5fQ09OX1NJRV9Qb3MpICAgICAgICAgICAvKiE8IENBTl9UOjpDT046IFNJRSBNYXNrICAgICAgKi8KKworI2RlZmluZSBDQU5fQ09OX0lFX1BvcyAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6Q09OOiBJRSBQb3NpdGlvbiAgICovCisjZGVmaW5lIENBTl9DT05fSUVfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDQU5fQ09OX0lFX1BvcykgICAgICAgICAgICAvKiE8IENBTl9UOjpDT046IElFIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBDQU5fQ09OX0lOSVRfUG9zICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6Q09OOiBJTklUIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9DT05fSU5JVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDQU5fQ09OX0lOSVRfUG9zKSAgICAgICAgICAvKiE8IENBTl9UOjpDT046IElOSVQgTWFzayAgICAgKi8KKworLyogQ0FOIFNUQVRVUyBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX1NUQVRVU19CT0ZGX1BvcyAgICAgICAgNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OlNUQVRVUzogQk9GRiBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgQ0FOX1NUQVRVU19CT0ZGX01zayAgICAgICAgKDB4MXVsIDw8IENBTl9TVEFUVVNfQk9GRl9Qb3MpICAgICAgIC8qITwgQ0FOX1Q6OlNUQVRVUzogQk9GRiBNYXNrICAgICAgKi8KKworI2RlZmluZSBDQU5fU1RBVFVTX0VXQVJOX1BvcyAgICAgICA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6U1RBVFVTOiBFV0FSTiBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fU1RBVFVTX0VXQVJOX01zayAgICAgICAoMHgxdWwgPDwgQ0FOX1NUQVRVU19FV0FSTl9Qb3MpICAgICAgLyohPCBDQU5fVDo6U1RBVFVTOiBFV0FSTiBNYXNrICAgICAqLworCisjZGVmaW5lIENBTl9TVEFUVVNfRVBBU1NfUG9zICAgICAgIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpTVEFUVVM6IEVQQVNTIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9TVEFUVVNfRVBBU1NfTXNrICAgICAgICgweDF1bCA8PCBDQU5fU1RBVFVTX0VQQVNTX1BvcykgICAgICAvKiE8IENBTl9UOjpTVEFUVVM6IEVQQVNTIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX1NUQVRVU19SWE9LX1BvcyAgICAgICAgNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OlNUQVRVUzogUlhPSyBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgQ0FOX1NUQVRVU19SWE9LX01zayAgICAgICAgKDB4MXVsIDw8IENBTl9TVEFUVVNfUlhPS19Qb3MpICAgICAgIC8qITwgQ0FOX1Q6OlNUQVRVUzogUlhPSyBNYXNrICAgICAgKi8KKworI2RlZmluZSBDQU5fU1RBVFVTX1RYT0tfUG9zICAgICAgICAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6U1RBVFVTOiBUWE9LIFBvc2l0aW9uICAqLworI2RlZmluZSBDQU5fU1RBVFVTX1RYT0tfTXNrICAgICAgICAoMHgxdWwgPDwgQ0FOX1NUQVRVU19UWE9LX1BvcykgICAgICAgLyohPCBDQU5fVDo6U1RBVFVTOiBUWE9LIE1hc2sgICAgICAqLworCisjZGVmaW5lIENBTl9TVEFUVVNfTEVDX1BvcyAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpTVEFUVVM6IExFQyBQb3NpdGlvbiAgICovCisjZGVmaW5lIENBTl9TVEFUVVNfTEVDX01zayAgICAgICAgICgweDd1bCA8PCBDQU5fU1RBVFVTX0xFQ19Qb3MpICAgICAgICAvKiE8IENBTl9UOjpTVEFUVVM6IExFQyBNYXNrICAgICAgICovCisKKy8qIENBTiBFUlIgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9FUlJfUlBfUG9zICAgICAgICAgICAgIDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpFUlI6IFJQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENBTl9FUlJfUlBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDQU5fRVJSX1JQX1BvcykgICAgICAgICAgICAvKiE8IENBTl9UOjpFUlI6IFJQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0FOX0VSUl9SRUNfUG9zICAgICAgICAgICAgOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OkVSUjogUkVDIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0FOX0VSUl9SRUNfTXNrICAgICAgICAgICAgKDB4N0Z1bCA8PCBDQU5fRVJSX1JFQ19Qb3MpICAgICAgICAgIC8qITwgQ0FOX1Q6OkVSUjogUkVDIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDQU5fRVJSX1RFQ19Qb3MgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6RVJSOiBURUMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDQU5fRVJSX1RFQ19Nc2sgICAgICAgICAgICAoMHhGRnVsIDw8IENBTl9FUlJfVEVDX1BvcykgICAgICAgICAgLyohPCBDQU5fVDo6RVJSOiBURUMgTWFzayAgICAgICAgICAqLworCisvKiBDQU4gQlRJTUUgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9CVElNRV9UU0VHMl9Qb3MgICAgICAgIDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpCVElNRTogVFNFRzIgUG9zaXRpb24gICovCisjZGVmaW5lIENBTl9CVElNRV9UU0VHMl9Nc2sgICAgICAgICgweDd1bCA8PCBDQU5fQlRJTUVfVFNFRzJfUG9zKSAgICAgICAvKiE8IENBTl9UOjpCVElNRTogVFNFRzIgTWFzayAgICAgICovCisKKyNkZWZpbmUgQ0FOX0JUSU1FX1RTRUcxX1BvcyAgICAgICAgOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OkJUSU1FOiBUU0VHMSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgQ0FOX0JUSU1FX1RTRUcxX01zayAgICAgICAgKDB4RnVsIDw8IENBTl9CVElNRV9UU0VHMV9Qb3MpICAgICAgIC8qITwgQ0FOX1Q6OkJUSU1FOiBUU0VHMSBNYXNrICAgICAgKi8KKworI2RlZmluZSBDQU5fQlRJTUVfU0pXX1BvcyAgICAgICAgICA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6QlRJTUU6IFNKVyBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDQU5fQlRJTUVfU0pXX01zayAgICAgICAgICAoMHgzdWwgPDwgQ0FOX0JUSU1FX1NKV19Qb3MpICAgICAgICAgLyohPCBDQU5fVDo6QlRJTUU6IFNKVyBNYXNrICAgICAgICAqLworCisjZGVmaW5lIENBTl9CVElNRV9CUlBfUG9zICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpCVElNRTogQlJQIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENBTl9CVElNRV9CUlBfTXNrICAgICAgICAgICgweDNGdWwgPDwgQ0FOX0JUSU1FX0JSUF9Qb3MpICAgICAgICAvKiE8IENBTl9UOjpCVElNRTogQlJQIE1hc2sgICAgICAgICovCisKKy8qIENBTiBJSURSIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fSUlEUl9JTlRJRF9Qb3MgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6SUlEUjogSU5USUQgUG9zaXRpb24gICAqLworI2RlZmluZSBDQU5fSUlEUl9JTlRJRF9Nc2sgICAgICAgICAoMHhGRkZGdWwgPDwgQ0FOX0lJRFJfSU5USURfUG9zKSAgICAgLyohPCBDQU5fVDo6SUlEUjogSU5USUQgTWFzayAgICAgICAqLworCisvKiBDQU4gVEVTVCBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX1RFU1RfUlhfUG9zICAgICAgICAgICAgNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OlRFU1Q6IFJYIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0FOX1RFU1RfUlhfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENBTl9URVNUX1JYX1BvcykgICAgICAgICAgIC8qITwgQ0FOX1Q6OlRFU1Q6IFJYIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDQU5fVEVTVF9UWF9Qb3MgICAgICAgICAgICA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6VEVTVDogVFggUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDQU5fVEVTVF9UWF9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgQ0FOX1RFU1RfVFhfUG9zKSAgICAgICAgICAgLyohPCBDQU5fVDo6VEVTVDogVFggTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENBTl9URVNUX0xCQUNLX1BvcyAgICAgICAgIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpURVNUOiBMQkFDSyBQb3NpdGlvbiAgICovCisjZGVmaW5lIENBTl9URVNUX0xCQUNLX01zayAgICAgICAgICgweDF1bCA8PCBDQU5fVEVTVF9MQkFDS19Qb3MpICAgICAgICAvKiE8IENBTl9UOjpURVNUOiBMQkFDSyBNYXNrICAgICAgICovCisKKyNkZWZpbmUgQ0FOX1RFU1RfU0lMRU5UX1BvcyAgICAgICAgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OlRFU1Q6IFNpbGVudCBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgQ0FOX1RFU1RfU0lMRU5UX01zayAgICAgICAgKDB4MXVsIDw8IENBTl9URVNUX1NJTEVOVF9Qb3MpICAgICAgIC8qITwgQ0FOX1Q6OlRFU1Q6IFNpbGVudCBNYXNrICAgICAgKi8KKworI2RlZmluZSBDQU5fVEVTVF9CQVNJQ19Qb3MgICAgICAgICAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6VEVTVDogQmFzaWMgUG9zaXRpb24gICAqLworI2RlZmluZSBDQU5fVEVTVF9CQVNJQ19Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0FOX1RFU1RfQkFTSUNfUG9zKSAgICAgICAgLyohPCBDQU5fVDo6VEVTVDogQmFzaWMgTWFzayAgICAgICAqLworCisvKiBDQU4gQlBSRSBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX0JSUEVfQlJQRV9Qb3MgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OkJSUEU6IEJSUEUgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ0FOX0JSUEVfQlJQRV9Nc2sgICAgICAgICAgKDB4RnVsIDw8IENBTl9CUlBFX0JSUEVfUG9zKSAgICAgICAgIC8qITwgQ0FOX1Q6OkJSUEU6IEJSUEUgTWFzayAgICAgICAgKi8KKworLyogQ0FOIElGbl9DUkVRIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fSUZfQ1JFUV9CVVNZX1BvcyAgICAgICAxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpDUkVROiBCVVNZIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9DUkVRX0JVU1lfTXNrICAgICAgICgweDF1bCA8PCBDQU5fSUZfQ1JFUV9CVVNZX1BvcykgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkNSRVE6IEJVU1kgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfQ1JFUV9NU0dOVU1fUG9zICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpDUkVROiBNU0dOVU0gUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0NSRVFfTVNHTlVNX01zayAgICAgKDB4M0Z1bCA8PCBDQU5fSUZfQ1JFUV9NU0dOVU1fUG9zKSAgICAgLyohPCBDQU5fSUZfVDo6Q1JFUTogTVNHTlVNIE1hc2sgICAgICovCisKKy8qIENBTiBJRm5fQ01BU0sgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9JRl9DTUFTS19XUlJEX1BvcyAgICAgIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkNNQVNLOiBXUlJEIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9DTUFTS19XUlJEX01zayAgICAgICgweDF1bCA8PCBDQU5fSUZfQ01BU0tfV1JSRF9Qb3MpICAgICAgIC8qITwgQ0FOX0lGX1Q6OkNNQVNLOiBXUlJEIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX01BU0tfUG9zICAgICAgNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6Q01BU0s6IE1BU0sgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX01BU0tfTXNrICAgICAgKDB4MXVsIDw8IENBTl9JRl9DTUFTS19NQVNLX1BvcykgICAgICAgLyohPCBDQU5fSUZfVDo6Q01BU0s6IE1BU0sgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfQ01BU0tfQVJCX1BvcyAgICAgICA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpDTUFTSzogQVJCIFBvc2l0aW9uICAqLworI2RlZmluZSBDQU5fSUZfQ01BU0tfQVJCX01zayAgICAgICAoMHgxdWwgPDwgQ0FOX0lGX0NNQVNLX0FSQl9Qb3MpICAgICAgICAvKiE8IENBTl9JRl9UOjpDTUFTSzogQVJCIE1hc2sgICAgICAqLworCisjZGVmaW5lIENBTl9JRl9DTUFTS19DT05UUk9MX1BvcyAgIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6Q01BU0s6IENPTlRST0wgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX0NPTlRST0xfTXNrICAgKDB4MXVsIDw8IENBTl9JRl9DTUFTS19DT05UUk9MX1BvcykgICAvKiE8IENBTl9JRl9UOjpDTUFTSzogQ09OVFJPTCBNYXNrICovCisKKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX0NMUklOVFBORF9Qb3MgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkNNQVNLOiBDTFJJTlRQTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX0NMUklOVFBORF9Nc2sgKDB4MXVsIDw8IENBTl9JRl9DTUFTS19DTFJJTlRQTkRfUG9zKSAgIC8qITwgQ0FOX0lGX1Q6OkNNQVNLOiBDTFJJTlRQTkQgTWFzayAqLworCisjZGVmaW5lIENBTl9JRl9DTUFTS19UWFJRU1RORVdEQVRfUG9zIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkNNQVNLOiBUWFJRU1RORVdEQVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX1RYUlFTVE5FV0RBVF9Nc2sgKDB4MXVsIDw8IENBTl9JRl9DTUFTS19UWFJRU1RORVdEQVRfUG9zKSAgLyohPCBDQU5fSUZfVDo6Q01BU0s6IFRYUlFTVE5FV0RBVCBNYXNrICAgICAqLworCisjZGVmaW5lIENBTl9JRl9DTUFTS19EQVRBQV9Qb3MgICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpDTUFTSzogREFUQUEgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX0RBVEFBX01zayAgICAgKDB4MXVsIDw8IENBTl9JRl9DTUFTS19EQVRBQV9Qb3MpICAgIC8qITwgQ0FOX0lGX1Q6OkNNQVNLOiBEQVRBQSBNYXNrICAgICAqLworCisjZGVmaW5lIENBTl9JRl9DTUFTS19EQVRBQl9Qb3MgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpDTUFTSzogREFUQUIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX0RBVEFCX01zayAgICAgKDB4MXVsIDw8IENBTl9JRl9DTUFTS19EQVRBQl9Qb3MpICAgIC8qITwgQ0FOX0lGX1Q6OkNNQVNLOiBEQVRBQiBNYXNrICAgICAqLworCisvKiBDQU4gSUZuX01BU0sxIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fSUZfTUFTSzFfTVNLX1BvcyAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUFTSzE6IE1TSyBQb3NpdGlvbiAgICovCisjZGVmaW5lIENBTl9JRl9NQVNLMV9NU0tfTXNrICAgICAgICgweEZGdWwgPDwgQ0FOX0lGX01BU0sxX01TS19Qb3MpICAgICAvKiE8IENBTl9JRl9UOjpNQVNLMTogTVNLIE1hc2sgICAgICAgKi8KKworLyogQ0FOIElGbl9NQVNLMiBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX0lGX01BU0syX01YVERfUG9zICAgICAgMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6Ok1BU0syOiBNWFREIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9NQVNLMl9NWFREX01zayAgICAgICgweDF1bCA8PCBDQU5fSUZfTUFTSzJfTVhURF9Qb3MpICAgICAvKiE8IENBTl9JRl9UOjpNQVNLMjogTVhURCBNYXNrICAgICAqLworCisjZGVmaW5lIENBTl9JRl9NQVNLMl9NRElSX1BvcyAgICAgIDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpNQVNLMjogTURJUiBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfTUFTSzJfTURJUl9Nc2sgICAgICAoMHgxdWwgPDwgQ0FOX0lGX01BU0syX01ESVJfUG9zKSAgICAgLyohPCBDQU5fSUZfVDo6TUFTSzI6IE1ESVIgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfTUFTSzJfTVNLX1BvcyAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUFTSzI6IE1TSyBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfTUFTSzJfTVNLX01zayAgICAgICAoMHgxRkZ1bCA8PCBDQU5fSUZfTUFTSzJfTVNLX1BvcykgICAgLyohPCBDQU5fSUZfVDo6TUFTSzI6IE1TSyBNYXNrICAgICAqLworCisvKiBDQU4gSUZuX0FSQjEgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9JRl9BUkIxX0lEX1BvcyAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpBUkIxOiBJRCBQb3NpdGlvbiAgICovCisjZGVmaW5lIENBTl9JRl9BUkIxX0lEX01zayAgICAgICAgICgweEZGRkZ1bCA8PCBDQU5fSUZfQVJCMV9JRF9Qb3MpICAgICAvKiE8IENBTl9JRl9UOjpBUkIxOiBJRCBNYXNrICAgICAgICovCisKKy8qIENBTiBJRm5fQVJCMiBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX0lGX0FSQjJfTVNHVkFMX1BvcyAgICAgMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkFSQjI6IE1TR1ZBTCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfQVJCMl9NU0dWQUxfTXNrICAgICAoMHgxdWwgPDwgQ0FOX0lGX0FSQjJfTVNHVkFMX1BvcykgICAgLyohPCBDQU5fSUZfVDo6QVJCMjogTVNHVkFMIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX0FSQjJfWFREX1BvcyAgICAgICAgMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkFSQjI6IFhURCBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDQU5fSUZfQVJCMl9YVERfTXNrICAgICAgICAoMHgxdWwgPDwgQ0FOX0lGX0FSQjJfWFREX1BvcykgICAgICAgLyohPCBDQU5fSUZfVDo6QVJCMjogWFREIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX0FSQjJfRElSX1BvcyAgICAgICAgMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkFSQjI6IERJUiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDQU5fSUZfQVJCMl9ESVJfTXNrICAgICAgICAoMHgxdWwgPDwgQ0FOX0lGX0FSQjJfRElSX1BvcykgICAgICAgLyohPCBDQU5fSUZfVDo6QVJCMjogRElSIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX0FSQjJfSURfUG9zICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkFSQjI6IElEIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDQU5fSUZfQVJCMl9JRF9Nc2sgICAgICAgICAoMHgxRkZGdWwgPDwgQ0FOX0lGX0FSQjJfSURfUG9zKSAgICAgLyohPCBDQU5fSUZfVDo6QVJCMjogSUQgTWFzayAgICAgICAgICovCisKKy8qIENBTiBJRm5fTUNPTiBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX0lGX01DT05fTkVXREFUX1BvcyAgICAgMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6Ok1DT046IE5FV0RBVCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfTUNPTl9ORVdEQVRfTXNrICAgICAoMHgxdWwgPDwgQ0FOX0lGX01DT05fTkVXREFUX1BvcykgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogTkVXREFUIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX01DT05fTVNHTFNUX1BvcyAgICAgMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6Ok1DT046IE1TR0xTVCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfTUNPTl9NU0dMU1RfTXNrICAgICAoMHgxdWwgPDwgQ0FOX0lGX01DT05fTVNHTFNUX1BvcykgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogTVNHTFNUIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX01DT05fSU5UUE5EX1BvcyAgICAgMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6Ok1DT046IElOVFBORCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfTUNPTl9JTlRQTkRfTXNrICAgICAoMHgxdWwgPDwgQ0FOX0lGX01DT05fSU5UUE5EX1BvcykgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogSU5UUE5EIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX01DT05fVU1BU0tfUG9zICAgICAgMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6Ok1DT046IFVNQVNLIFBvc2l0aW9uICAqLworI2RlZmluZSBDQU5fSUZfTUNPTl9VTUFTS19Nc2sgICAgICAoMHgxdWwgPDwgQ0FOX0lGX01DT05fVU1BU0tfUG9zKSAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogVU1BU0sgTWFzayAgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX01DT05fVFhJRV9Qb3MgICAgICAgMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6Ok1DT046IFRYSUUgUG9zaXRpb24gICAqLworI2RlZmluZSBDQU5fSUZfTUNPTl9UWElFX01zayAgICAgICAoMHgxdWwgPDwgQ0FOX0lGX01DT05fVFhJRV9Qb3MpICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogVFhJRSBNYXNrICAgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX01DT05fUlhJRV9Qb3MgICAgICAgMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6Ok1DT046IFJYSUUgUG9zaXRpb24gICAqLworI2RlZmluZSBDQU5fSUZfTUNPTl9SWElFX01zayAgICAgICAoMHgxdWwgPDwgQ0FOX0lGX01DT05fUlhJRV9Qb3MpICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogUlhJRSBNYXNrICAgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX01DT05fUk1URU5fUG9zICAgICAgOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6Ok1DT046IFJNVEVOIFBvc2l0aW9uICAqLworI2RlZmluZSBDQU5fSUZfTUNPTl9STVRFTl9Nc2sgICAgICAoMHgxdWwgPDwgQ0FOX0lGX01DT05fUk1URU5fUG9zKSAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogUk1URU4gTWFzayAgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX01DT05fVFhSUVNUX1BvcyAgICAgOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6Ok1DT046IFRYUlFTVCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfTUNPTl9UWFJRU1RfTXNrICAgICAoMHgxdWwgPDwgQ0FOX0lGX01DT05fVFhSUVNUX1BvcykgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogVFhSUVNUIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX01DT05fRU9CX1BvcyAgICAgICAgNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6Ok1DT046IEVPQiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDQU5fSUZfTUNPTl9FT0JfTXNrICAgICAgICAoMHgxdWwgPDwgQ0FOX0lGX01DT05fRU9CX1BvcykgICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogRU9CIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX01DT05fRExDX1BvcyAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6Ok1DT046IERMQyBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDQU5fSUZfTUNPTl9ETENfTXNrICAgICAgICAoMHhGdWwgPDwgQ0FOX0lGX01DT05fRExDX1BvcykgICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogRExDIE1hc2sgICAgICAgICovCisKKy8qIENBTiBJRm5fREFUQV9BMSBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX0lGX0RBVF9BMV9EQVRBMV9Qb3MgICAgOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkRBVEFBMTogREFUQTEgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0RBVF9BMV9EQVRBMV9Nc2sgICAgKDB4RkZ1bCA8PCBDQU5fSUZfREFUX0ExX0RBVEExX1BvcykgIC8qITwgQ0FOX0lGX1Q6OkRBVEFBMTogREFUQTEgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfREFUX0ExX0RBVEEwX1BvcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6REFUQUExOiBEQVRBMCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfREFUX0ExX0RBVEEwX01zayAgICAoMHhGRnVsIDw8IENBTl9JRl9EQVRfQTFfREFUQTBfUG9zKSAgLyohPCBDQU5fSUZfVDo6REFUQUExOiBEQVRBMCBNYXNrICAgICAqLworCisvKiBDQU4gSUZuX0RBVEFfQTIgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9JRl9EQVRfQTJfREFUQTNfUG9zICAgIDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpEQVRBQTE6IERBVEEzIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9EQVRfQTJfREFUQTNfTXNrICAgICgweEZGdWwgPDwgQ0FOX0lGX0RBVF9BMl9EQVRBM19Qb3MpICAvKiE8IENBTl9JRl9UOjpEQVRBQTE6IERBVEEzIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX0RBVF9BMl9EQVRBMl9Qb3MgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkRBVEFBMTogREFUQTIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0RBVF9BMl9EQVRBMl9Nc2sgICAgKDB4RkZ1bCA8PCBDQU5fSUZfREFUX0EyX0RBVEEyX1BvcykgIC8qITwgQ0FOX0lGX1Q6OkRBVEFBMTogREFUQTIgTWFzayAgICAgKi8KKworLyogQ0FOIElGbl9EQVRBX0IxIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fSUZfREFUX0IxX0RBVEE1X1BvcyAgICA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6REFUQUIxOiBEQVRBNSBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfREFUX0IxX0RBVEE1X01zayAgICAoMHhGRnVsIDw8IENBTl9JRl9EQVRfQjFfREFUQTVfUG9zKSAgLyohPCBDQU5fSUZfVDo6REFUQUIxOiBEQVRBNSBNYXNrICovCisKKyNkZWZpbmUgQ0FOX0lGX0RBVF9CMV9EQVRBNF9Qb3MgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkRBVEFCMTogREFUQTQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0RBVF9CMV9EQVRBNF9Nc2sgICAgKDB4RkZ1bCA8PCBDQU5fSUZfREFUX0IxX0RBVEE0X1BvcykgIC8qITwgQ0FOX0lGX1Q6OkRBVEFCMTogREFUQTQgTWFzayAqLworCisvKiBDQU4gSUZuX0RBVEFfQjIgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9JRl9EQVRfQjJfREFUQTdfUG9zICAgIDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpEQVRBQjI6IERBVEE3IFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9EQVRfQjJfREFUQTdfTXNrICAgICgweEZGdWwgPDwgQ0FOX0lGX0RBVF9CMl9EQVRBN19Qb3MpICAvKiE8IENBTl9JRl9UOjpEQVRBQjI6IERBVEE3IE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX0RBVF9CMl9EQVRBNl9Qb3MgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkRBVEFCMjogREFUQTYgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0RBVF9CMl9EQVRBNl9Nc2sgICAgKDB4RkZ1bCA8PCBDQU5fSUZfREFUX0IyX0RBVEE2X1BvcykgIC8qITwgQ0FOX0lGX1Q6OkRBVEFCMjogREFUQTYgTWFzayAgICAgKi8KKworLyogQ0FOIElGbl9UWFJRU1QxIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fVFhSUVNUMV9UWFJRU1RfUG9zICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OlRYUlFTVDE6IFRYUlFTVCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fVFhSUVNUMV9UWFJRU1RfTXNrICAoMHhGRkZGdWwgPDwgQ0FOX1RYUlFTVDFfVFhSUVNUX1BvcykgIC8qITwgQ0FOX1Q6OlRYUlFTVDE6IFRYUlFTVCBNYXNrICAgICAqLworCisvKiBDQU4gSUZuX1RYUlFTVDIgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9UWFJRU1QyX1RYUlFTVF9Qb3MgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6VFhSUVNUMjogVFhSUVNUIFBvc2l0aW9uICAqLworI2RlZmluZSBDQU5fVFhSUVNUMl9UWFJRU1RfTXNrICAoMHhGRkZGdWwgPDwgQ0FOX1RYUlFTVDJfVFhSUVNUX1BvcykgIC8qITwgQ0FOX1Q6OlRYUlFTVDI6IFRYUlFTVCBNYXNrICAgICAgKi8KKworLyogQ0FOIElGbl9OREFUMSBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX05EQVQxX05FV0RBVEFfUG9zICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpOREFUMTogTkVXREFUQSBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fTkRBVDFfTkVXREFUQV9Nc2sgICAoMHhGRkZGdWwgPDwgQ0FOX05EQVQxX05FV0RBVEFfUG9zKSAgIC8qITwgQ0FOX1Q6Ok5EQVQxOiBORVdEQVRBIE1hc2sgICAgICovCisKKy8qIENBTiBJRm5fTkRBVDIgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9OREFUMl9ORVdEQVRBX1BvcyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6TkRBVDI6IE5FV0RBVEEgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX05EQVQyX05FV0RBVEFfTXNrICAgKDB4RkZGRnVsIDw8IENBTl9OREFUMl9ORVdEQVRBX1BvcykgICAvKiE8IENBTl9UOjpOREFUMjogTkVXREFUQSBNYXNrICAgICAqLworCisvKiBDQU4gSUZuX0lQTkQxIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fSVBORDFfSU5UUE5EX1BvcyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OklQTkQxOiBJTlRQTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lQTkQxX0lOVFBORF9Nc2sgICAoMHhGRkZGdWwgPDwgQ0FOX0lQTkQxX0lOVFBORF9Qb3MpICAgICAvKiE8IENBTl9UOjpJUE5EMTogSU5UUE5EIE1hc2sgICAgICovCisKKy8qIENBTiBJRm5fSVBORDIgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9JUE5EMl9JTlRQTkRfUG9zICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6SVBORDI6IElOVFBORCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSVBORDJfSU5UUE5EX01zayAgICgweEZGRkZ1bCA8PCBDQU5fSVBORDJfSU5UUE5EX1BvcykgICAgIC8qITwgQ0FOX1Q6OklQTkQyOiBJTlRQTkQgTWFzayAgICAgKi8KKworLyogQ0FOIElGbl9NVkxEMSBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX01WTEQxX01TR1ZBTF9Qb3MgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpNVkxEMTogTVNHVkFMIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9NVkxEMV9NU0dWQUxfTXNrICAgKDB4RkZGRnVsIDw8IENBTl9NVkxEMV9NU0dWQUxfUG9zKSAgICAgLyohPCBDQU5fVDo6TVZMRDE6IE1TR1ZBTCBNYXNrICAgICAqLworCisvKiBDQU4gSUZuX01WTEQyIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fTVZMRDJfTVNHVkFMX1BvcyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6Ok1WTEQyOiBNU0dWQUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX01WTEQyX01TR1ZBTF9Nc2sgICAoMHhGRkZGdWwgPDwgQ0FOX01WTEQyX01TR1ZBTF9Qb3MpICAgICAvKiE8IENBTl9UOjpNVkxEMjogTVNHVkFMIE1hc2sgICAgICovCisKKy8qIENBTiBXVUVOIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fV1VfRU5fV0FLVVBfRU5fUG9zICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpXVV9FTjogV0FLVVBfRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX1dVX0VOX1dBS1VQX0VOX01zayAgICAoMHgxdWwgPDwgQ0FOX1dVX0VOX1dBS1VQX0VOX1BvcykgICAgICAgICAgIC8qITwgQ0FOX1Q6OldVX0VOOiBXQUtVUF9FTiBNYXNrICAgICAqLworCisvKiBDQU4gV1VTVEFUVVMgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9XVV9TVEFUVVNfV0FLVVBfU1RTX1BvcyAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6V1VfU1RBVFVTOiBXQUtVUF9TVFMgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX1dVX1NUQVRVU19XQUtVUF9TVFNfTXNrICAgICgweDF1bCA8PCBDQU5fV1VfU1RBVFVTX1dBS1VQX1NUU19Qb3MpICAgLyohPCBDQU5fVDo6V1VfU1RBVFVTOiBXQUtVUF9TVFMgTWFzayAgICAgKi8KKworCisvKipAfSovIC8qIENBTl9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgQ0FOIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX0NBTl9SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvY2xrX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2Nsa19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDk0YTk3Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2Nsa19yZWcuaApAQCAtMCwwICsxLDE1NDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjbGtfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIENMSyByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19DTEtfUkVHX0hfXworI2RlZmluZSBfX0NMS19SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3lzdGVtIENsb2NrIENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBDTEsgU3lzdGVtIENsb2NrIENvbnRyb2xsZXIoQ0xLKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBDTEsgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworICAgIC8qKgorICAgICAqIEB2YXIgQ0xLX1Q6OlBXUkNUTAorICAgICAqIE9mZnNldDogMHgwMCAgU3lzdGVtIFBvd2VyLWRvd24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEhYVEVOICAgICB8SFhUIEVuYWJsZSBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCAoSFhUKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIChIWFQpIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBIWFQgY2Fubm90IGJlIGRpc2FibGVkIGFuZCBIWFRFTiB3aWxsIGFsd2F5cyByZWFkIGFzIDEgaWYgSENMSyBjbG9jayBzb3VyY2UgaXMgc2VsZWN0ZWQgZnJvbSBIWFQgb3IgUExMIChjbG9jayBzb3VyY2UgZnJvbSBIWFQpLgorICAgICAqIHxbMV0gICAgIHxMWFRFTiAgICAgfExYVCBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIChleHRMWFQpIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIChleHRMWFQpIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBMWFQgY2Fubm90IGJlIGRpc2FibGVkIGFuZCBMWFRFTiB3aWxsIGFsd2F5cyByZWFkIGFzIDEgaWYgSENMSyBjbG9jayBzb3VyY2UgaXMgc2VsZWN0ZWQgZnJvbSBMWFQgd2hlbiB0aGUgTFhUIGNsb2NrIHNvdXJjZSBpcyBzZWxlY3RlZCBhcyBleHRMWFQgYnkgc2V0dGluZyBDMzJLUyhSVENfTFhUQ1RMWzddKSB0byAxLgorICAgICAqIHxbMl0gICAgIHxISVJDRU4gICAgfEhJUkMgRW5hYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgSENMSyBkZWZhdWx0IGNsb2NrIHNvdXJjZSBpcyBmcm9tIEhJUkMgYW5kIHRoaXMgYml0IGRlZmF1bHQgdmFsdWUgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBISVJDIGNhbm5vdCBiZSBkaXNhYmxlZCBhbmQgSElSQ0VOIHdpbGwgYWx3YXlzIHJlYWQgYXMgMSBpZiBGbGFzaCBhY2Nlc3MgY3ljbGUgYXV0by10dW5pbmcgZnVuY3Rpb24gaXMgZW5hYmxlZCBvciBIQ0xLIGNsb2NrIHNvdXJjZSBpcyBzZWxlY3RlZCBmcm9tIEhJUkMgb3IgUExMIChjbG9jayBzb3VyY2UgZnJvbSBISVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFzaCBhY2Nlc3MgY3ljbGUgYXV0by10dW5pbmcgZnVuY3Rpb24gY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgRkFESVMgKEZNQ19DWUNDVExbOF0pLgorICAgICAqIHxbM10gICAgIHxMSVJDRU4gICAgfExJUkMgRW5hYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogTElSQyBjYW5ub3QgYmUgZGlzYWJsZWQgYW5kIExJUkNFTiB3aWxsIGFsd2F5cyByZWFkIGFzIDEgaWYgSENMSyBjbG9jayBzb3VyY2UgaXMgc2VsZWN0ZWQgZnJvbSBMSVJDLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBJZiBDV0RURU4oQ09ORklHWzMxLDQ6M10pIGlzIHNldCB0byAxMTEsIExJUkMgY2xvY2sgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgc2V0dGluZyBMSVJDRU4oQ0xLX1BXUkNUTFszXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQ1dEVEVOKENPTkZJRzBbMzEsNDozXSkgaXMgbm90IHNldCB0byAxMTEsIExJUkMgY2Fubm90IGJlIGRpc2FibGVkIGluIG5vcm1hbCBtb2RlIGFuZCBMSVJDRU4gd2lsbCBhbHdheXMgcmVhZCBhcyAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gUG93ZXItZG93biBtb2RlLCBMSVJDIGNsb2NrIGlzIGNvbnRyb2xsZWQgYnkgTElSQ0VOKENMS19QV1JDVExbM10pIGFuZCBDV0RUUERFTiAoQ09ORklHMFszMF0pIHNldHRpbmcuCisgICAgICogfFs1XSAgICAgfFBEV0tJRU4gICB8UG93ZXItZG93biBNb2RlIFdha2UtdXAgSW50ZXJydXB0IEVuYWJsZSBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBvd2VyLWRvd24gbW9kZSB3YWtlLXVwIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUG93ZXItZG93biBtb2RlIHdha2UtdXAgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoZSBpbnRlcnJ1cHQgd2lsbCBvY2N1ciB3aGVuIGJvdGggUERXS0lGIGFuZCBQRFdLSUVOIGFyZSBoaWdoLCBhZnRlciByZXN1bWUgZnJvbSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNl0gICAgIHxQRFdLSUYgICAgfFBvd2VyLWRvd24gTW9kZSBXYWtlLXVwIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgYnkgUG93ZXItZG93biB3YWtlLXVwIGV2ZW50LCBpdCBpbmRpY2F0ZXMgdGhhdCByZXN1bWUgZnJvbSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZsYWcgaXMgc2V0IGlmIHRoZSBFSU5UN34wLCBHUElPLCBVQVJUMH41LCBVU0JILCBVU0JELCBPVEcsIENBTjAsIEJPRCwgQUNNUCwgV0RULCBTREgwLCBUTVIwfjMsIEkyQzB+MiwgVVNDSTB+MSwgUlRDIHdha2UtdXAgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGJpdCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCB3b3JrcyBvbmx5IGlmIFBEV0tJRU4gKENMS19QV1JDVExbNV0pIHNldCB0byAxLgorICAgICAqIHxbN10gICAgIHxQREVOICAgICAgfFN5c3RlbSBQb3dlci1kb3duIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoaXMgYml0IGlzIHNldCB0byAxLCBQb3dlci1kb3duIG1vZGUgaXMgZW5hYmxlZCBhbmQgdGhlIGNoaXAga2VlcHMgYWN0aXZlIHRpbGwgdGhlIENQVSBzbGVlcCBtb2RlIGlzIGFsc28gYWN0aXZlIGFuZCB0aGVuIHRoZSBjaGlwIGVudGVycyBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBjaGlwIHdha2VzIHVwIGZyb20gUG93ZXItZG93biBtb2RlLCB0aGlzIGJpdCBpcyBhdXRvIGNsZWFyZWQuIFVzZXJzIG5lZWQgdG8gc2V0IHRoaXMgYml0IGFnYWluIGZvciBuZXh0IFBvd2VyLWRvd24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gUG93ZXItZG93biBtb2RlLCBIWFQsIEhJUkMsIEhJUkM0OCwgUExMIGFuZCBzeXN0ZW0gY2xvY2sgd2lsbCBiZSBkaXNhYmxlZCBhbmQgaWdub3JlZCB0aGUgY2xvY2sgc291cmNlIHNlbGVjdGlvbi4gVGhlIGNsb2NrcyBvZiBwZXJpcGhlcmFsIGFyZSBub3QgY29udHJvbGxlZCBieSBQb3dlci1kb3duIG1vZGUsIGlmIHRoZSBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSBpcyBmcm9tIExYVCBvciBMSVJDLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGlwIG9wZXJhdGluZyBub3JtYWxseSBvciBjaGlwIGluIGlkbGUgbW9kZSBiZWNhdXNlIG9mIFdGSSBjb21tYW5kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGlwIHdhaXRzIENQVSBzbGVlcCBjb21tYW5kIFdGSSBhbmQgdGhlbiBlbnRlcnMgUG93ZXItZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTE6MTBdIHxIWFRHQUlOICAgfEhYVCBHYWluIENvbnRyb2wgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEdhaW4gY29udHJvbCBpcyB1c2VkIHRvIGVubGFyZ2UgdGhlIGdhaW4gb2YgY3J5c3RhbCB0byBtYWtlIHN1cmUgY3J5c3RhbCB3b3JrIG5vcm1hbGx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIGdhaW4gY29udHJvbCBpcyBlbmFibGVkLCBjcnlzdGFsIHdpbGwgY29uc3VtZSBtb3JlIHBvd2VyIHRoYW4gZ2FpbiBjb250cm9sIG9mZi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IEhYVCBmcmVxdWVuY3kgaXMgbG93ZXIgdGhhbiBmcm9tIDggTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gSFhUIGZyZXF1ZW5jeSBpcyBmcm9tIDggTUh6IHRvIDEyIE1Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEhYVCBmcmVxdWVuY3kgaXMgZnJvbSAxMiBNSHogdG8gMTYgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gSFhUIGZyZXF1ZW5jeSBpcyBoaWdoZXIgdGhhbiAxNiBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxMl0gICAgfEhYVFNFTFRZUCB8SFhUIENyeXN0YWwgVHlwZSBTZWxlY3QgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTZWxlY3QgSU5WIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNlbGVjdCBHTSB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTNdICAgIHxIWFRUQkVOICAgfEhYVCBDcnlzdGFsIFRVUkJPIE1vZGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEhYVCBDcnlzdGFsIFRVUkJPIG1vZGUgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEhYVCBDcnlzdGFsIFRVUkJPIG1vZGUgZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE4XSAgICB8SElSQzQ4RU4gIHxISVJDNDggRW5hYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gNDggTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQzQ4KSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gNDggTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQzQ4KSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgQ0xLX1Q6OkFIQkNMSworICAgICAqIE9mZnNldDogMHgwNCAgQUhCIERldmljZXMgQ2xvY2sgRW5hYmxlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQRE1BMENLRU4gfFBETUEwIENvbnRyb2xsZXIgQ2xvY2sgRW5hYmxlIEJpdCAoU2VjdXJlKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRE1BMCBwZXJpcGhlcmFsIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BMCBwZXJpcGhlcmFsIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFBETUExQ0tFTiB8UERNQTEgQ29udHJvbGxlciBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBETUExIHBlcmlwaGVyYWwgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBETUExIHBlcmlwaGVyYWwgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8SVNQQ0tFTiAgIHxGbGFzaCBJU1AgQ29udHJvbGxlciBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZsYXNoIElTUCBwZXJpcGhlcmFsIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGbGFzaCBJU1AgcGVyaXBoZXJhbCBjbG9jayBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxFQklDS0VOICAgfEVCSSBDb250cm9sbGVyIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUJJIHBlcmlwaGVyYWwgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVCSSBwZXJpcGhlcmFsIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFs2XSAgICAgfFNESDBDS0VOICB8U0RIT1NUMCBDb250cm9sbGVyIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0RIT1NUMCBwZXJpcGhlcmFsIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTREhPU1QwIHBlcmlwaGVyYWwgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzddICAgICB8Q1JDQ0tFTiAgIHxDUkMgR2VuZXJhdG9yIENvbnRyb2xsZXIgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDUkMgcGVyaXBoZXJhbCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ1JDIHBlcmlwaGVyYWwgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzEyXSAgICB8Q1JQVENLRU4gIHxDcnlwdG9ncmFwaGljIEFjY2VsZXJhdG9yIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ3J5cHRvZ3JhcGhpYyBBY2NlbGVyYXRvciBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ3J5cHRvZ3JhcGhpYyBBY2NlbGVyYXRvciBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMTVdICAgIHxGTUNJRExFICAgfEZsYXNoIE1lbW9yeSBDb250cm9sbGVyIENsb2NrIEVuYWJsZSBCaXQgaW4gSURMRSBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZNQyBjbG9jayBEaXNhYmxlZCB3aGVuIGNoaXAgaXMgdW5kZXIgSURMRSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGTUMgY2xvY2sgRW5hYmxlZCB3aGVuIGNoaXAgaXMgdW5kZXIgSURMRSBtb2RlLgorICAgICAqIHxbMTZdICAgIHxVU0JIQ0tFTiAgfFVTQiBIT1NUIDEuMSBDb250cm9sbGVyIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVVNCIEhPU1QgMS4xIHBlcmlwaGVyYWwgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiBIT1NUIDEuMSBwZXJpcGhlcmFsIGNsb2NrIEVuYWJsZWQuCisgICAgICogQHZhciBDTEtfVDo6QVBCQ0xLMAorICAgICAqIE9mZnNldDogMHgwOCAgQVBCIERldmljZXMgQ2xvY2sgRW5hYmxlIENvbnRyb2wgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdEVENLRU4gICB8V2F0Y2hkb2cgVGltZXIgQ2xvY2sgRW5hYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV2F0Y2hkb2cgdGltZXIgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdhdGNoZG9nIHRpbWVyIGNsb2NrIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxXSAgICAgfFJUQ0NLRU4gICB8UmVhbC10aW1lLWNsb2NrIEFQQiBJbnRlcmZhY2UgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gY29udHJvbCB0aGUgUlRDIEFQQiBjbG9jayBvbmx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBSVEMgcGVyaXBoZXJhbCBjbG9jayBzb3VyY2UgaXMgc2VsZWN0ZWQgZnJvbSBSVENTRUwoQ0xLX0NMS1NFTDNbOF0pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgY2FuIGJlIHNlbGVjdGVkIHRvIDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgKExYVCkgb3IgMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlRDIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSVEMgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8VE1SMENLRU4gIHxUaW1lcjAgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lcjAgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMCBjbG9jayBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxUTVIxQ0tFTiAgfFRpbWVyMSBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMSBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIxIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfFRNUjJDS0VOICB8VGltZXIyIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIyIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lcjIgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8VE1SM0NLRU4gIHxUaW1lcjMgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lcjMgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMyBjbG9jayBFbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxDTEtPQ0tFTiAgfENMS08gQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDTEtPIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDTEtPIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFs3XSAgICAgfEFDTVAwMUNLRU58QW5hbG9nIENvbXBhcmF0b3IgMC8xIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQW5hbG9nIGNvbXBhcmF0b3IgMC8xIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBbmFsb2cgY29tcGFyYXRvciAwLzEgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8STJDMENLRU4gIHxJMkMwIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJDMCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJDMCBjbG9jayBFbmFibGVkLgorICAgICAqIHxbOV0gICAgIHxJMkMxQ0tFTiAgfEkyQzEgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMkMxIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJMkMxIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxMF0gICAgfEkyQzJDS0VOICB8STJDMiBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEkyQzIgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyQzIgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzEyXSAgICB8UVNQSTBDS0VOIHxRU1BJMCBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFTUEkwIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRU1BJMCBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMTNdICAgIHxTUEkwQ0tFTiAgfFNQSTAgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkwIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEkwIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxNF0gICAgfFNQSTFDS0VOICB8U1BJMSBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNQSTEgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSTEgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzE1XSAgICB8U1BJMkNLRU4gIHxTUEkyIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJMiBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJMiBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMTZdICAgIHxVQVJUMENLRU4gfFVBUlQwIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDAgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQwIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxN10gICAgfFVBUlQxQ0tFTiB8VUFSVDEgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVQVJUMSBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDEgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzE4XSAgICB8VUFSVDJDS0VOIHxVQVJUMiBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQyIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUMiBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMTldICAgIHxVQVJUM0NLRU4gfFVBUlQzIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDMgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQzIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsyMF0gICAgfFVBUlQ0Q0tFTiB8VUFSVDQgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVQVJUNCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDQgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzIxXSAgICB8VUFSVDVDS0VOIHxVQVJUNSBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQ1IGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUNSBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMjRdICAgIHxDQU4wQ0tFTiAgfENBTjAgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDQU4wIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDQU4wIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsyNl0gICAgfE9UR0NLRU4gICB8VVNCIE9URyBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVTQiBPVEcgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiBPVEcgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzI3XSAgICB8VVNCRENLRU4gIHxVU0IgRGV2aWNlIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVVNCIERldmljZSBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIERldmljZSBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMjhdICAgIHxFQURDQ0tFTiAgfEVuaGFuY2VkIEFuYWxvZy1kaWdpdGFsLWNvbnZlcnRlciAoRUFEQykgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFQURDIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQURDIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsyOV0gICAgfEkyUzBDS0VOICB8STJTMCBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEkyUzAgQ2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyUzAgQ2xvY2sgRW5hYmxlZC4KKyAgICAgKiBAdmFyIENMS19UOjpBUEJDTEsxCisgICAgICogT2Zmc2V0OiAweDBDICBBUEIgRGV2aWNlcyBDbG9jayBFbmFibGUgQ29udHJvbCBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U0MwQ0tFTiAgIHxTbWFydCBDYXJkIDAgKFNDMCkgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQzAgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDMCBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxTQzFDS0VOICAgfFNtYXJ0IENhcmQgMSAoU0MxKSBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDMSBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0MxIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFNDMkNLRU4gICB8U21hcnQgQ2FyZCAyIChTQzIpIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0MyIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQzIgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8U1BJM0NLRU4gIHxTUEkzIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJMyBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJMyBjbG9jayBFbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxVU0NJMENLRU4gfFVTQ0kwIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVVNDSTAgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQ0kwIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFs5XSAgICAgfFVTQ0kxQ0tFTiB8VVNDSTEgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVU0NJMSBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNDSTEgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzEyXSAgICB8REFDQ0tFTiAgIHxEQUMgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEQUMgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERBQyBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMTZdICAgIHxFUFdNMENLRU4gfEVQV00wIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTTAgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00wIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxN10gICAgfEVQV00xQ0tFTiB8RVBXTTEgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNMSBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTTEgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzE4XSAgICB8QlBXTTBDS0VOIHxCUFdNMCBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00wIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNMCBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMTldICAgIHxCUFdNMUNLRU4gfEJQV00xIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTTEgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00xIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsyMl0gICAgfFFFSTBDS0VOICB8UUVJMCBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFFSTAgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFFSTAgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzIzXSAgICB8UUVJMUNLRU4gIHxRRUkxIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUUVJMSBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVJMSBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMjVdICAgIHxUUk5HQ0tFTiAgfFRSTkcgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUUk5HIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUUk5HIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsyNl0gICAgfEVDQVAwQ0tFTiB8RUNBUDAgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFQ0FQMCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUNBUDAgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzI3XSAgICB8RUNBUDFDS0VOIHxFQ0FQMSBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVDQVAxIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQ0FQMSBjbG9jayBFbmFibGVkLgorICAgICAqIEB2YXIgQ0xLX1Q6OkNMS1NFTDAKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIENsb2NrIFNvdXJjZSBTZWxlY3QgQ29udHJvbCBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzI6MF0gICB8SENMS1NFTCAgIHxIQ0xLIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24gKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmVmb3JlIGNsb2NrIHN3aXRjaGluZywgdGhlIHJlbGF0ZWQgY2xvY2sgc291cmNlcyAoYm90aCBwcmUtc2VsZWN0IGFuZCBuZXctc2VsZWN0KSBtdXN0IGJlIHR1cm5lZCBvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBDbG9jayBzb3VyY2UgZnJvbSBIWFQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gQ2xvY2sgc291cmNlIGZyb20gTFhULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IENsb2NrIHNvdXJjZSBmcm9tIFBMTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBDbG9jayBzb3VyY2UgZnJvbSBMSVJDLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IENsb2NrIHNvdXJjZSBmcm9tIEhJUkM0OC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBDbG9jayBzb3VyY2UgZnJvbSBISVJDLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNTozXSAgIHxTVENMS1NFTCAgfFN5c1RpY2sgQ2xvY2sgU291cmNlIFNlbGVjdGlvbiAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBTWVNUX0NUUkxbMl09MCwgU3lzVGljayB1c2VzIGxpc3RlZCBjbG9jayBzb3VyY2UgYmVsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gQ2xvY2sgc291cmNlIGZyb20gSFhULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IENsb2NrIHNvdXJjZSBmcm9tIExYVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBDbG9jayBzb3VyY2UgZnJvbSBIWFQvMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBDbG9jayBzb3VyY2UgZnJvbSBIQ0xLLzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gQ2xvY2sgc291cmNlIGZyb20gSElSQy8yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBpZiBTeXNUaWNrIGNsb2NrIHNvdXJjZSBpcyBub3QgZnJvbSBIQ0xLIChpLmUgU1lTVF9DVFJMWzJdID0gMCksIFN5c1RpY2sgY2xvY2sgc291cmNlIG11c3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIEhDTEsvMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs4XSAgICAgfFVTQlNFTCAgICB8VVNCIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24gKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENsb2NrIHNvdXJjZSBmcm9tIEhJUkM0OC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMjE6MjBdIHxTREgwU0VMICAgfFNESE9TVDAgUGVyaXBoZXJhbCBDbG9jayBTb3VyY2UgU2VsZWN0aW9uIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ2xvY2sgc291cmNlIGZyb20gSFhUIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENsb2NrIHNvdXJjZSBmcm9tIEhJUkMgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBDTEtfVDo6Q0xLU0VMMQorICAgICAqIE9mZnNldDogMHgxNCAgQ2xvY2sgU291cmNlIFNlbGVjdCBDb250cm9sIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxXRFRTRUwgICAgfFdhdGNoZG9nIFRpbWVyIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24gKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDbG9jayBzb3VyY2UgZnJvbSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDbG9jayBzb3VyY2UgZnJvbSBIQ0xLLzIwNDguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTA6OF0gIHxUTVIwU0VMICAgfFRJTUVSMCBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gQ2xvY2sgc291cmNlIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gQ2xvY2sgc291cmNlIGZyb20gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IENsb2NrIHNvdXJjZSBmcm9tIFBDTEswLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IENsb2NrIHNvdXJjZSBmcm9tIGV4dGVybmFsIGNsb2NrIFRNMCBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gQ2xvY2sgc291cmNlIGZyb20gMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzE0OjEyXSB8VE1SMVNFTCAgIHxUSU1FUjEgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IENsb2NrIHNvdXJjZSBmcm9tIDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBDbG9jayBzb3VyY2UgZnJvbSBQQ0xLMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBDbG9jayBzb3VyY2UgZnJvbSBleHRlcm5hbCBjbG9jayBUTTEgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEwIGtIeiBpbnRlcm5hbCBsb3cgc3BlZWQgUkMgb3NjaWxsYXRvciAoTElSQykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gQ2xvY2sgc291cmNlIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfFsxODoxNl0gfFRNUjJTRUwgICB8VElNRVIyIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBDbG9jayBzb3VyY2UgZnJvbSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBDbG9jayBzb3VyY2UgZnJvbSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gQ2xvY2sgc291cmNlIGZyb20gZXh0ZXJuYWwgY2xvY2sgVE0yIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIHxbMjI6MjBdIHxUTVIzU0VMICAgfFRJTUVSMyBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gQ2xvY2sgc291cmNlIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gQ2xvY2sgc291cmNlIGZyb20gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IENsb2NrIHNvdXJjZSBmcm9tIFBDTEsxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IENsb2NrIHNvdXJjZSBmcm9tIGV4dGVybmFsIGNsb2NrIFRNMyBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gQ2xvY2sgc291cmNlIGZyb20gMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzI1OjI0XSB8VUFSVDBTRUwgIHxVQVJUMCBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDbG9jayBzb3VyY2UgZnJvbSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENsb2NrIHNvdXJjZSBmcm9tIFBMTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENsb2NrIHNvdXJjZSBmcm9tIDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIHxbMjc6MjZdIHxVQVJUMVNFTCAgfFVBUlQxIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogfFsyOToyOF0gfENMS09TRUwgICB8Q2xvY2sgT3V0cHV0IENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIHxbMzE6MzBdIHxXV0RUU0VMICAgfFdpbmRvdyBXYXRjaGRvZyBUaW1lciBDbG9jayBTb3VyY2UgU2VsZWN0aW9uIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gSENMSy8yMDQ4LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIENMS19UOjpDTEtTRUwyCisgICAgICogT2Zmc2V0OiAweDE4ICBDbG9jayBTb3VyY2UgU2VsZWN0IENvbnRyb2wgUmVnaXN0ZXIgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEVQV00wU0VMICB8RVBXTTAgQ2xvY2sgU291cmNlIFNlbGVjdGlvbiAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSBvZiBFUFdNMCBpcyBkZWZpbmVkIGJ5IEVQV00wU0VMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbG9jayBzb3VyY2UgZnJvbSBQQ0xLMC4KKyAgICAgKiB8WzFdICAgICB8RVBXTTFTRUwgIHxFUFdNMSBDbG9jayBTb3VyY2UgU2VsZWN0aW9uIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHBlcmlwaGVyYWwgY2xvY2sgc291cmNlIG9mIEVQV00xIGlzIGRlZmluZWQgYnkgRVBXTTFTRUwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsb2NrIHNvdXJjZSBmcm9tIFBDTEsxLgorICAgICAqIHxbMzoyXSAgIHxRU1BJMFNFTCAgfFFTUEkwIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8WzU6NF0gICB8U1BJMFNFTCAgIHxTUEkwIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8Wzc6Nl0gICB8U1BJMVNFTCAgIHxTUEkxIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8WzhdICAgICB8QlBXTTBTRUwgIHxCUFdNMCBDbG9jayBTb3VyY2UgU2VsZWN0aW9uIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHBlcmlwaGVyYWwgY2xvY2sgc291cmNlIG9mIEJQV00wIGlzIGRlZmluZWQgYnkgQlBXTTBTRUwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsb2NrIHNvdXJjZSBmcm9tIFBDTEswLgorICAgICAqIHxbOV0gICAgIHxCUFdNMVNFTCAgfEJQV00xIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24gKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcGVyaXBoZXJhbCBjbG9jayBzb3VyY2Ugb2YgQlBXTTEgaXMgZGVmaW5lZCBieSBCUFdNMVNFTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzEuCisgICAgICogfFsxMToxMF0gfFNQSTJTRUwgICB8U1BJMiBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDbG9jayBzb3VyY2UgZnJvbSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENsb2NrIHNvdXJjZSBmcm9tIFBMTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENsb2NrIHNvdXJjZSBmcm9tIFBDTEsxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogfFsxMzoxMl0gfFNQSTNTRUwgICB8U1BJMyBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDbG9jayBzb3VyY2UgZnJvbSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENsb2NrIHNvdXJjZSBmcm9tIFBMTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENsb2NrIHNvdXJjZSBmcm9tIFBDTEswLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogQHZhciBDTEtfVDo6Q0xLU0VMMworICAgICAqIE9mZnNldDogMHgxQyAgQ2xvY2sgU291cmNlIFNlbGVjdCBDb250cm9sIFJlZ2lzdGVyIDMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxTQzBTRUwgICAgfFNtYXJ0IENhcmQgMCAoU0MwKSBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDbG9jayBzb3VyY2UgZnJvbSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENsb2NrIHNvdXJjZSBmcm9tIFBMTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENsb2NrIHNvdXJjZSBmcm9tIFBDTEswLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogfFszOjJdICAgfFNDMVNFTCAgICB8U21hcnQgQ2FyZCAxIChTQzEpIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8WzU6NF0gICB8U0MyU0VMICAgIHxTbWFydCBDYXJkIDIgKFNDMikgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ2xvY2sgc291cmNlIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDbG9jayBzb3VyY2UgZnJvbSBQTEwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDbG9jayBzb3VyY2UgZnJvbSBQQ0xLMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIHxbOF0gICAgIHxSVENTRUwgICAgfFJUQyBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENsb2NrIHNvdXJjZSBmcm9tIDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xvY2sgc291cmNlIGZyb20gMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKS4KKyAgICAgKiB8WzE3OjE2XSB8STJTMFNFTCAgIHxJMlMwIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIEhYVCBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENsb2NrIHNvdXJjZSBmcm9tIFBMTCBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENsb2NrIHNvdXJjZSBmcm9tIFBDTEswLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gSElSQyBjbG9jay4KKyAgICAgKiB8WzI1OjI0XSB8VUFSVDJTRUwgIHxVQVJUMiBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDbG9jayBzb3VyY2UgZnJvbSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENsb2NrIHNvdXJjZSBmcm9tIFBMTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENsb2NrIHNvdXJjZSBmcm9tIDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIHxbMjc6MjZdIHxVQVJUM1NFTCAgfFVBUlQzIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogfFsyOToyOF0gfFVBUlQ0U0VMICB8VUFSVDQgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ2xvY2sgc291cmNlIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDbG9jayBzb3VyY2UgZnJvbSBQTEwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDbG9jayBzb3VyY2UgZnJvbSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8WzMxOjMwXSB8VUFSVDVTRUwgIHxVQVJUNSBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDbG9jayBzb3VyY2UgZnJvbSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENsb2NrIHNvdXJjZSBmcm9tIFBMTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENsb2NrIHNvdXJjZSBmcm9tIDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIEB2YXIgQ0xLX1Q6OkNMS0RJVjAKKyAgICAgKiBPZmZzZXQ6IDB4MjAgIENsb2NrIERpdmlkZXIgTnVtYmVyIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxIQ0xLRElWICAgfEhDTEsgQ2xvY2sgRGl2aWRlIE51bWJlciBmcm9tIEhDTEsgQ2xvY2sgU291cmNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SENMSyBjbG9jayBmcmVxdWVuY3kgPSAoSENMSyBjbG9jayBzb3VyY2UgZnJlcXVlbmN5KSAvIChIQ0xLRElWICsgMSkuCisgICAgICogfFs3OjRdICAgfFVTQkRJViAgICB8VVNCIENsb2NrIERpdmlkZSBOdW1iZXIgZnJvbSBQTEwgQ2xvY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVU0IgY2xvY2sgZnJlcXVlbmN5ID0gKFBMTCBmcmVxdWVuY3kpIC8gKFVTQkRJViArIDEpLgorICAgICAqIHxbMTE6OF0gIHxVQVJUMERJViAgfFVBUlQwIENsb2NrIERpdmlkZSBOdW1iZXIgZnJvbSBVQVJUMCBDbG9jayBTb3VyY2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVQVJUMCBjbG9jayBmcmVxdWVuY3kgPSAoVUFSVDAgY2xvY2sgc291cmNlIGZyZXF1ZW5jeSkgLyAoVUFSVDBESVYgKyAxKS4KKyAgICAgKiB8WzE1OjEyXSB8VUFSVDFESVYgIHxVQVJUMSBDbG9jayBEaXZpZGUgTnVtYmVyIGZyb20gVUFSVDEgQ2xvY2sgU291cmNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VUFSVDEgY2xvY2sgZnJlcXVlbmN5ID0gKFVBUlQxIGNsb2NrIHNvdXJjZSBmcmVxdWVuY3kpIC8gKFVBUlQxRElWICsgMSkuCisgICAgICogfFsyMzoxNl0gfEVBRENESVYgICB8RUFEQyBDbG9jayBEaXZpZGUgTnVtYmVyIGZyb20gRUFEQyBDbG9jayBTb3VyY2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFQURDIGNsb2NrIGZyZXF1ZW5jeSA9IChFQURDIGNsb2NrIHNvdXJjZSBmcmVxdWVuY3kpIC8gKEVBRENESVYgKyAxKS4KKyAgICAgKiB8WzMxOjI0XSB8U0RIMERJViAgIHxTREhPU1QwIENsb2NrIERpdmlkZSBOdW1iZXIgZnJvbSBTREhPU1QwIENsb2NrIFNvdXJjZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNESE9TVDAgY2xvY2sgZnJlcXVlbmN5ID0gKFNESE9TVDAgY2xvY2sgc291cmNlIGZyZXF1ZW5jeSkgLyAoU0RIMERJViArIDEpLgorICAgICAqIEB2YXIgQ0xLX1Q6OkNMS0RJVjEKKyAgICAgKiBPZmZzZXQ6IDB4MjQgIENsb2NrIERpdmlkZXIgTnVtYmVyIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxTQzBESVYgICAgfFNtYXJ0IENhcmQgMCAoU0MwKSBDbG9jayBEaXZpZGUgTnVtYmVyIGZyb20gU0MwIENsb2NrIFNvdXJjZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNDMCBjbG9jayBmcmVxdWVuY3kgPSAoU0MwIGNsb2NrIHNvdXJjZSBmcmVxdWVuY3kpIC8gKFNDMERJViArIDEpLgorICAgICAqIHxbMTU6OF0gIHxTQzFESVYgICAgfFNtYXJ0IENhcmQgMSAoU0MxKSBDbG9jayBEaXZpZGUgTnVtYmVyIGZyb20gU0MxIENsb2NrIFNvdXJjZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNDMSBjbG9jayBmcmVxdWVuY3kgPSAoU0MxIGNsb2NrIHNvdXJjZSBmcmVxdWVuY3kpIC8gKFNDMURJViArIDEpLgorICAgICAqIHxbMjM6MTZdIHxTQzJESVYgICAgfFNtYXJ0IENhcmQgMiAoU0MyKSBDbG9jayBEaXZpZGUgTnVtYmVyIGZyb20gU0MyIENsb2NrIFNvdXJjZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNDMiBjbG9jayBmcmVxdWVuY3kgPSAoU0MyIGNsb2NrIHNvdXJjZSBmcmVxdWVuY3kpIC8gKFNDMkRJViArIDEpLgorICAgICAqIEB2YXIgQ0xLX1Q6OkNMS0RJVjQKKyAgICAgKiBPZmZzZXQ6IDB4MzAgIENsb2NrIERpdmlkZXIgTnVtYmVyIFJlZ2lzdGVyIDQKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxVQVJUMkRJViAgfFVBUlQyIENsb2NrIERpdmlkZSBOdW1iZXIgZnJvbSBVQVJUMiBDbG9jayBTb3VyY2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVQVJUMiBjbG9jayBmcmVxdWVuY3kgPSAoVUFSVDIgY2xvY2sgc291cmNlIGZyZXF1ZW5jeSkgLyAoVUFSVDJESVYgKyAxKS4KKyAgICAgKiB8Wzc6NF0gICB8VUFSVDNESVYgIHxVQVJUMyBDbG9jayBEaXZpZGUgTnVtYmVyIGZyb20gVUFSVDMgQ2xvY2sgU291cmNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VUFSVDMgY2xvY2sgZnJlcXVlbmN5ID0gKFVBUlQzIGNsb2NrIHNvdXJjZSBmcmVxdWVuY3kpIC8gKFVBUlQzRElWICsgMSkuCisgICAgICogfFsxMTo4XSAgfFVBUlQ0RElWICB8VUFSVDQgQ2xvY2sgRGl2aWRlIE51bWJlciBmcm9tIFVBUlQ0IENsb2NrIFNvdXJjZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVBUlQ0IGNsb2NrIGZyZXF1ZW5jeSA9IChVQVJUNCBjbG9jayBzb3VyY2UgZnJlcXVlbmN5KSAvIChVQVJUNERJViArIDEpLgorICAgICAqIHxbMTU6MTJdIHxVQVJUNURJViAgfFVBUlQ1IENsb2NrIERpdmlkZSBOdW1iZXIgZnJvbSBVQVJUNSBDbG9jayBTb3VyY2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVQVJUNSBjbG9jayBmcmVxdWVuY3kgPSAoVUFSVDUgY2xvY2sgc291cmNlIGZyZXF1ZW5jeSkgLyAoVUFSVDVESVYgKyAxKS4KKyAgICAgKiBAdmFyIENMS19UOjpQQ0xLRElWCisgICAgICogT2Zmc2V0OiAweDM0ICBBUEIgQ2xvY2sgRGl2aWRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyOjBdICAgfEFQQjBESVYgICB8QVBCMCBDbG9jayBEaXZpZGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QVBCMCBjbG9jayBjYW4gYmUgZGl2aWRlZCBmcm9tIEhDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gUENMSzAgZnJlcXVlbmN5IGlzIEhDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gUENMSzAgZnJlcXVlbmN5IGlzIDEvMiBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFBDTEswIGZyZXF1ZW5jeSBpcyAxLzQgSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBQQ0xLMCBmcmVxdWVuY3kgaXMgMS84IEhDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gUENMSzAgZnJlcXVlbmN5IGlzIDEvMTYgSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBQQ0xLMCBmcmVxdWVuY3kgaXMgMS8zMiBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIHxbNjo0XSAgIHxBUEIxRElWICAgfEFQQjEgQ2xvY2sgRGl2aWRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFQQjEgY2xvY2sgY2FuIGJlIGRpdmlkZWQgZnJvbSBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IFBDTEsxIGZyZXF1ZW5jeSBpcyBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IFBDTEsxIGZyZXF1ZW5jeSBpcyAxLzIgSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBQQ0xLMSBmcmVxdWVuY3kgaXMgMS80IEhDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gUENMSzEgZnJlcXVlbmN5IGlzIDEvOCBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFBDTEsxIGZyZXF1ZW5jeSBpcyAxLzE2IEhDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gUENMSzEgZnJlcXVlbmN5IGlzIDEvMzIgSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAqIEB2YXIgQ0xLX1Q6OlBMTENUTAorICAgICAqIE9mZnNldDogMHg0MCAgUExMIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbODowXSAgIHxGQkRJViAgICAgfFBMTCBGZWVkYmFjayBEaXZpZGVyIENvbnRyb2wgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVmZXIgdG8gdGhlIFBMTCBmb3JtdWxhcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEzOjldICB8SU5ESVYgICAgIHxQTEwgSW5wdXQgRGl2aWRlciBDb250cm9sIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlZmVyIHRvIHRoZSBQTEwgZm9ybXVsYXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxNToxNF0gfE9VVERJViAgICB8UExMIE91dHB1dCBEaXZpZGVyIENvbnRyb2wgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVmZXIgdG8gdGhlIFBMTCBmb3JtdWxhcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE2XSAgICB8UEQgICAgICAgIHxQb3dlci1kb3duIE1vZGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBMTCBpcyBlbmFibGUgKGluIG5vcm1hbCBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUExMIGlzIGRpc2FibGUgKGluIFBvd2VyLWRvd24gbW9kZSkgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBzZXQgdGhlIFBERU4gYml0IHRvIDEgaW4gQ0xLX1BXUkNUTCByZWdpc3RlciwgdGhlIFBMTCB3aWxsIGVudGVyIFBvd2VyLWRvd24gbW9kZSwgdG9vLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE3XSAgICB8QlAgICAgICAgIHxQTEwgQnlwYXNzIENvbnRyb2wgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBMTCBpcyBpbiBub3JtYWwgbW9kZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBMTCBjbG9jayBvdXRwdXQgaXMgc2FtZSBhcyBQTEwgaW5wdXQgY2xvY2sgRklOLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMThdICAgIHxPRSAgICAgICAgfFBMTCBPRSAoRk9VVCBFbmFibGUpIENvbnRyb2wgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBMTCBGT1VUIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBMTCBGT1VUIGlzIGZpeGVkIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE5XSAgICB8UExMU1JDICAgIHxQTEwgU291cmNlIENsb2NrIFNlbGVjdGlvbiAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUExMIHNvdXJjZSBjbG9jayBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2gtc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQTEwgc291cmNlIGNsb2NrIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2gtc3BlZWQgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsyM10gICAgfFNUQlNFTCAgICB8UExMIFN0YWJsZSBDb3VudGVyIFNlbGVjdGlvbiAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUExMIHN0YWJsZSB0aW1lIGlzIDYxNDQgUExMIHNvdXJjZSBjbG9jayAoc3VpdGFibGUgZm9yIHNvdXJjZSBjbG9jayBpcyBlcXVhbCB0byBvciBsZXNzIHRoYW4gMTIgTUh6KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUExMIHN0YWJsZSB0aW1lIGlzIDEyMjg4IFBMTCBzb3VyY2UgY2xvY2sgKHN1aXRhYmxlIGZvciBzb3VyY2UgY2xvY2sgaXMgbGFyZ2VyIHRoYW4gMTIgTUh6KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIENMS19UOjpTVEFUVVMKKyAgICAgKiBPZmZzZXQ6IDB4NTAgIENsb2NrIFN0YXR1cyBNb25pdG9yIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SFhUU1RCICAgIHxIWFQgQ2xvY2sgU291cmNlIFN0YWJsZSBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpIGNsb2NrIGlzIG5vdCBzdGFibGUgb3IgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpIGNsb2NrIGlzIHN0YWJsZSBhbmQgZW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8TFhUU1RCICAgIHxMWFQgQ2xvY2sgU291cmNlIFN0YWJsZSBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TFhUIGNsb2NrIHNvdXJjZSBjYW4gYmUgc2VsZWN0ZWQgYXMgZXh0TFhUIG9yIExJUkMzMiBieSBzZXR0aW5nIEMzMktTKFJUQ19MWFRDVExbN10pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIEMzMktTIGlzIHNldCB0byAwIHRoZSBMWFQgc3RhYmxlIGZsYWcgaXMgc2V0IHdoZW4gZXh0TFhUIGNsb2NrIHNvdXJjZSBpcyBzdGFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQzMyS1MgaXMgc2V0IHRvIDEgdGhlIExYVCBzdGFibGUgZmxhZyBpcyBzZXQgd2hlbiBMSVJDMzIgY2xvY2sgc291cmNlIGlzIHN0YWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpIGNsb2NrIGlzIG5vdCBzdGFibGUgb3IgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKSBjbG9jayBpcyBzdGFibGVkIGFuZCBlbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxQTExTVEIgICAgfEludGVybmFsIFBMTCBDbG9jayBTb3VyY2UgU3RhYmxlIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJuYWwgUExMIGNsb2NrIGlzIG5vdCBzdGFibGUgb3IgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVybmFsIFBMTCBjbG9jayBpcyBzdGFibGUgYW5kIGVuYWJsZWQuCisgICAgICogfFszXSAgICAgfExJUkNTVEIgICB8TElSQyBDbG9jayBTb3VyY2UgU3RhYmxlIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKSBjbG9jayBpcyBub3Qgc3RhYmxlIG9yIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpIGNsb2NrIGlzIHN0YWJsZSBhbmQgZW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8SElSQ1NUQiAgIHxISVJDIENsb2NrIFNvdXJjZSBTdGFibGUgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKSBjbG9jayBpcyBub3Qgc3RhYmxlIG9yIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKSBjbG9jayBpcyBzdGFibGUgYW5kIGVuYWJsZWQuCisgICAgICogfFs3XSAgICAgfENMS1NGQUlMICB8Q2xvY2sgU3dpdGNoaW5nIEZhaWwgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVwZGF0ZWQgd2hlbiBzb2Z0d2FyZSBzd2l0Y2hlcyBzeXN0ZW0gY2xvY2sgc291cmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHN3aXRjaCB0YXJnZXQgY2xvY2sgaXMgc3RhYmxlLCB0aGlzIGJpdCB3aWxsIGJlIHNldCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHN3aXRjaCB0YXJnZXQgY2xvY2sgaXMgbm90IHN0YWJsZSwgdGhpcyBiaXQgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2xvY2sgc3dpdGNoaW5nIHN1Y2Nlc3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsb2NrIHN3aXRjaGluZyBmYWlsdXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBZnRlciBzZWxlY3RlZCBjbG9jayBzb3VyY2UgaXMgc3RhYmxlLCBoYXJkd2FyZSB3aWxsIHN3aXRjaCBzeXN0ZW0gY2xvY2sgdG8gc2VsZWN0ZWQgY2xvY2sgYXV0b21hdGljYWxseSwgYW5kIENMS1NGQUlMIHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGJ5IGhhcmR3YXJlLgorICAgICAqIHxbOF0gICAgIHxFWFRMWFRTVEIgfEVYVExYVCBDbG9jayBTb3VyY2UgU3RhYmxlIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChleHRMWFQpIGNsb2NrIGlzIG5vdCBzdGFibGUgb3IgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoZXh0TFhUKSBjbG9jayBpcyBzdGFibGUgYW5kIGVuYWJsZWQuCisgICAgICogfFs5XSAgICAgfExJUkMzMlNUQiB8TElSQzMyIENsb2NrIFNvdXJjZSBTdGFibGUgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAzMiBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMzMikgY2xvY2sgaXMgbm90IHN0YWJsZSBvciBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMzIga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDMzIpIGNsb2NrIGlzIHN0YWJsZSBhbmQgZW5hYmxlZC4KKyAgICAgKiBAdmFyIENMS19UOjpDTEtPQ1RMCisgICAgICogT2Zmc2V0OiAweDYwICBDbG9jayBPdXRwdXQgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfEZSRVFTRUwgICB8Q2xvY2sgT3V0cHV0IEZyZXF1ZW5jeSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZm9ybXVsYSBvZiBvdXRwdXQgZnJlcXVlbmN5IGlzIEZvdXQgPSBGaW4vMl4oTisxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGaW4gaXMgdGhlIGlucHV0IGNsb2NrIGZyZXF1ZW5jeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3V0IGlzIHRoZSBmcmVxdWVuY3kgb2YgZGl2aWRlciBvdXRwdXQgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TiBpcyB0aGUgNC1iaXQgdmFsdWUgb2YgRlJFUVNFTFszOjBdLgorICAgICAqIHxbNF0gICAgIHxDTEtPRU4gICAgfENsb2NrIE91dHB1dCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENsb2NrIE91dHB1dCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xvY2sgT3V0cHV0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfERJVjFFTiAgICB8Q2xvY2sgT3V0cHV0IERpdmlkZSBPbmUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDbG9jayBPdXRwdXQgd2lsbCBvdXRwdXQgY2xvY2sgd2l0aCBzb3VyY2UgZnJlcXVlbmN5IGRpdmlkZWQgYnkgRlJFUVNFTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xvY2sgT3V0cHV0IHdpbGwgb3V0cHV0IGNsb2NrIHdpdGggc291cmNlIGZyZXF1ZW5jeS4KKyAgICAgKiB8WzZdICAgICB8Q0xLMUhaRU4gIHxDbG9jayBPdXRwdXQgMUh6IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gMSBIeiBjbG9jayBvdXRwdXQgZm9yIDMyLjc2OCBrSHogZnJlcXVlbmN5IGNvbXBlbnNhdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMSBIeiBjbG9jayBvdXRwdXQgZm9yIDMyLjc2OCBrSHogZnJlcXVlbmN5IGNvbXBlbnNhdGlvbiBFbmFibGVkLgorICAgICAqIEB2YXIgQ0xLX1Q6OkNMS0RDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NzAgIENsb2NrIEZhaWwgRGV0ZWN0b3IgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs0XSAgICAgfEhYVEZERU4gICB8SFhUIENsb2NrIEZhaWwgRGV0ZWN0b3IgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKSBjbG9jayBmYWlsIGRldGVjdG9yIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKSBjbG9jayBmYWlsIGRldGVjdG9yIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfEhYVEZJRU4gICB8SFhUIENsb2NrIEZhaWwgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkgY2xvY2sgZmFpbCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpIGNsb2NrIGZhaWwgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxMl0gICAgfExYVEZERU4gICB8TFhUIENsb2NrIEZhaWwgRGV0ZWN0b3IgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkgY2xvY2sgZmFpbCBkZXRlY3RvciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpIGNsb2NrIGZhaWwgZGV0ZWN0b3IgRW5hYmxlZC4KKyAgICAgKiB8WzEzXSAgICB8TFhURklFTiAgIHxMWFQgQ2xvY2sgRmFpbCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkgY2xvY2sgZmFpbCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKSBjbG9jayBmYWlsIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTZdICAgIHxIWFRGUURFTiAgfEhYVCBDbG9jayBGcmVxdWVuY3kgTW9uaXRvciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpIGNsb2NrIGZyZXF1ZW5jeSBtb25pdG9yIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKSBjbG9jayBmcmVxdWVuY3kgbW9uaXRvciBFbmFibGVkLgorICAgICAqIHxbMTddICAgIHxIWFRGUUlFTiAgfEhYVCBDbG9jayBGcmVxdWVuY3kgTW9uaXRvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKSBjbG9jayBmcmVxdWVuY3kgbW9uaXRvciBmYWlsIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkgY2xvY2sgZnJlcXVlbmN5IG1vbml0b3IgZmFpbCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiBAdmFyIENMS19UOjpDTEtEU1RTCisgICAgICogT2Zmc2V0OiAweDc0ICBDbG9jayBGYWlsIERldGVjdG9yIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEhYVEZJRiAgICB8SFhUIENsb2NrIEZhaWwgSW50ZXJydXB0IEZsYWcgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpIGNsb2NrIGlzIG5vcm1hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkgY2xvY2sgc3RvcHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGJpdCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzFdICAgICB8TFhURklGICAgIHxMWFQgQ2xvY2sgRmFpbCBJbnRlcnJ1cHQgRmxhZyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpIGNsb2NrIGlzIG5vcm1hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpIHN0b3BzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs4XSAgICAgfEhYVEZRSUYgICB8SFhUIENsb2NrIEZyZXF1ZW5jeSBNb25pdG9yIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKSBjbG9jayBpcyBub3JtYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpIGNsb2NrIGZyZXF1ZW5jeSBpcyBhYm5vcm1hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGUgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgQ0xLX1Q6OkNEVVBCCisgICAgICogT2Zmc2V0OiAweDc4ICBDbG9jayBGcmVxdWVuY3kgRGV0ZWN0b3IgVXBwZXIgQm91bmRhcnkgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbOTowXSAgIHxVUEVSQkQgICAgfEhYVCBDbG9jayBGcmVxdWVuY3kgRGV0ZWN0b3IgVXBwZXIgQm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYml0cyBkZWZpbmUgdGhlIGhpZ2ggdmFsdWUgb2YgZnJlcXVlbmN5IG1vbml0b3Igd2luZG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gSFhUIGZyZXF1ZW5jeSBtb25pdG9yIHZhbHVlIGhpZ2hlciB0aGFuIHRoaXMgcmVnaXN0ZXIsIHRoZSBIWFQgZnJlcXVlbmN5IGRldGVjdCBmYWlsIGludGVycnVwdCBmbGFnIHdpbGwgc2V0IHRvIDEuCisgICAgICogQHZhciBDTEtfVDo6Q0RMT1dCCisgICAgICogT2Zmc2V0OiAweDdDICBDbG9jayBGcmVxdWVuY3kgRGV0ZWN0b3IgTG93ZXIgQm91bmRhcnkgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbOTowXSAgIHxMT1dFUkJEICAgfEhYVCBDbG9jayBGcmVxdWVuY3kgRGV0ZWN0b3IgTG93ZXIgQm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYml0cyBkZWZpbmUgdGhlIGxvdyB2YWx1ZSBvZiBmcmVxdWVuY3kgbW9uaXRvciB3aW5kb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBIWFQgZnJlcXVlbmN5IG1vbml0b3IgdmFsdWUgbG93ZXIgdGhhbiB0aGlzIHJlZ2lzdGVyLCB0aGUgSFhUIGZyZXF1ZW5jeSBkZXRlY3QgZmFpbCBpbnRlcnJ1cHQgZmxhZyB3aWxsIHNldCB0byAxLgorICAgICAqIEB2YXIgQ0xLX1Q6OlBNVUNUTAorICAgICAqIE9mZnNldDogMHg5MCAgUG93ZXIgTWFuYWdlciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzI6MF0gICB8UERNU0VMICAgIHxQb3dlci1kb3duIE1vZGUgU2VsZWN0aW9uIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgY29udHJvbCBjaGlwIFBvd2VyLWRvd24gbW9kZSBncmFkZSBzZWxlY3Rpb24gd2hlbiBDUFUgZXhlY3V0ZSBXRkkvV0ZFIGluc3RydWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IFBvd2VyLWRvd24gbW9kZSBpcyBzZWxlY3RlZCAoUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IExvdyBsZWFrYWdlIFBvd2VyLWRvd24gbW9kZSBpcyBzZWxlY3RlZCAoTExQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gRmFzdCB3YWtlLXVwIFBvd2VyLWRvd24gKEZXUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IFVsdHJhIGxvdyBsZWFrYWdlIFBvd2VyLWRvd24gbW9kZSBpcyBzZWxlY3RlZCAoVUxMUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFN0YW5kYnkgUG93ZXItZG93biBtb2RlIGlzIHNlbGVjdGVkIChTUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IERlZXAgUG93ZXItZG93biBtb2RlIGlzIHNlbGVjdGVkIChEUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOF0gICAgIHxXS1RNUkVOICAgfFdha2UtdXAgVGltZXIgRW5hYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV2FrZS11cCB0aW1lciBEaXNhYmxlIGluIERlZXAgUG93ZXItZG93biBtb2RlIG9yIFN0YW5kYnkgUG93ZXItZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXYWtlLXVwIHRpbWVyIEVuYWJsZWQgaW4gRGVlcCBQb3dlci1kb3duIG1vZGUgb3IgU3RhbmRieSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxMTo5XSAgfFdLVE1SSVMgICB8V2FrZS11cCBUaW1lciBUaW1lLW91dCBJbnRlcnZhbCBTZWxlY3QgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBjb250cm9sIHdha2UtdXAgdGltZXIgdGltZS1vdXQgaW50ZXJ2YWwgd2hlbiBjaGlwIHVuZGVyIERlZXAgUG93ZXItZG93biBtb2RlIG9yIFN0YW5kYnkgUG93ZXItZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IFRpbWUtb3V0IGludGVydmFsIGlzIDEyOCBMSVJDIGNsb2NrcyAoMTIuOG1zKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBUaW1lLW91dCBpbnRlcnZhbCBpcyAyNTYgTElSQyBjbG9ja3MgKDI1LjZtcykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gVGltZS1vdXQgaW50ZXJ2YWwgaXMgNTEyIExJUkMgY2xvY2tzICg1MS4ybXMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IFRpbWUtb3V0IGludGVydmFsIGlzIDEwMjQgTElSQyBjbG9ja3MgKDEwMi40bXMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFRpbWUtb3V0IGludGVydmFsIGlzIDQwOTYgTElSQyBjbG9ja3MgKDQwOS42bXMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IFRpbWUtb3V0IGludGVydmFsIGlzIDgxOTIgTElSQyBjbG9ja3MgKDgxOS4ybXMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IFRpbWUtb3V0IGludGVydmFsIGlzIDE2Mzg0IExJUkMgY2xvY2tzICgxNjM4LjRtcykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gVGltZS1vdXQgaW50ZXJ2YWwgaXMgNjU1MzYgTElSQyBjbG9ja3MgKDY1NTMuNm1zKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE3OjE2XSB8V0tQSU5FTiAgIHxXYWtlLXVwIFBpbiBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBXYWtlLXVwIHBpbiBEaXNhYmxlIGluIERlZXAgUG93ZXItZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gV2FrZS11cCBwaW4gcmlzaW5nIGVkZ2UgRW5hYmxlZCBpbiBEZWVwIFBvd2VyLWRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFdha2UtdXAgcGluIGZhbGxpbmcgZWRnZSBFbmFibGVkIGluIERlZXAgUG93ZXItZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gV2FrZS11cCBwaW4gYm90aCBlZGdlIEVuYWJsZWQgaW4gRGVlcCBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxOF0gICAgfEFDTVBTUFdLICB8QUNNUCBTdGFuZGJ5IFBvd2VyLWRvd24gTW9kZSBXYWtlLXVwIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQUNNUCB3YWtlLXVwIERpc2FibGUgaW4gU3RhbmRieSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFDTVAgd2FrZS11cCBFbmFibGVkIGluIFN0YW5kYnkgUG93ZXItZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMjNdICAgIHxSVENXS0VOICAgfFJUQyBXYWtlLXVwIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGlzIGEgcHJvdGVjdGVkIHJlZ2lzdGVyLiBQbGVhc2UgcmVmZXIgdG8gb3BlbiBsb2NrIHNlcXVlbmNlIHRvIHByb2dyYW0gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJUQyB3YWtlLXVwIERpc2FibGUgaW4gRGVlcCBQb3dlci1kb3duIG1vZGUgb3IgU3RhbmRieSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJUQyB3YWtlLXVwIEVuYWJsZWQgaW4gRGVlcCBQb3dlci1kb3duIG1vZGUgb3IgU3RhbmRieSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBDTEtfVDo6UE1VU1RTCisgICAgICogQHZhciBDTEtfVDo6UE1VU1RTCisgICAgICogT2Zmc2V0OiAweDk0ICBQb3dlciBNYW5hZ2VyIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFBJTldLICAgICB8UGluIFdha2UtdXAgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB3YWtlLXVwIG9mIGNoaXAgZnJvbSBEZWVwIFBvd2VyLWRvd24gbW9kZSAoRFBEKSB3YXMgcmVxdWVzdGVkIGJ5IGEgdHJhbnNpdGlvbiBvZiB0aGUgV2FrZS11cCBwaW4gKEdQQy4wKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaXMgY2xlYXJlZCB3aGVuIERQRCBtb2RlIGlzIGVudGVyZWQuCisgICAgICogfFsxXSAgICAgfFRNUldLICAgICB8VGltZXIgV2FrZS11cCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHdha2UtdXAgb2YgY2hpcCBmcm9tIERlZXAgUG93ZXItZG93biBtb2RlIChEUEQpIG9yIFN0YW5kYnkgUG93ZXItZG93biAoU1BEKSBtb2RlIHdhcyByZXF1ZXN0ZWQgYnkgd2FrZXVwIHRpbWVyIHRpbWUtb3V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpcyBjbGVhcmVkIHdoZW4gRFBEIG9yIFNQRCBtb2RlIGlzIGVudGVyZWQuCisgICAgICogfFsyXSAgICAgfFJUQ1dLICAgICB8UlRDIFdha2UtdXAgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB3YWtldXAgb2YgZGV2aWNlIGZyb20gRGVlcCBQb3dlci1kb3duIG1vZGUgKERQRCkgb3IgU3RhbmRieSBQb3dlci1kb3duIChTUEQpIG1vZGUgd2FzIHJlcXVlc3RlZCB3aXRoIGEgUlRDIGFsYXJtLCB0aWNrIHRpbWUgb3IgdGFtcGVyIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpcyBjbGVhcmVkIHdoZW4gRFBEIG9yIFNQRCBtb2RlIGlzIGVudGVyZWQuCisgICAgICogfFs4XSAgICAgfEdQQVdLICAgICB8R1BBIFdha2UtdXAgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB3YWtlLXVwIG9mIGNoaXAgZnJvbSBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSAoU1BEKSB3YXMgcmVxdWVzdGVkIGJ5IGEgdHJhbnNpdGlvbiBvZiBzZWxlY3RlZCBvbmUgR1BBIGdyb3VwIHBpbnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGlzIGNsZWFyZWQgd2hlbiBTUEQgbW9kZSBpcyBlbnRlcmVkLgorICAgICAqIHxbOV0gICAgIHxHUEJXSyAgICAgfEdQQiBXYWtlLXVwIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgd2FrZS11cCBvZiBjaGlwIGZyb20gU3RhbmRieSBQb3dlci1kb3duIG1vZGUgKFNQRCkgd2FzIHJlcXVlc3RlZCBieSBhIHRyYW5zaXRpb24gb2Ygc2VsZWN0ZWQgb25lIEdQQiBncm91cCBwaW5zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpcyBjbGVhcmVkIHdoZW4gU1BEIG1vZGUgaXMgZW50ZXJlZC4KKyAgICAgKiB8WzEwXSAgICB8R1BDV0sgICAgIHxHUEMgV2FrZS11cCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHdha2UtdXAgb2YgY2hpcCBmcm9tIFN0YW5kYnkgUG93ZXItZG93biBtb2RlIChTUEQpIHdhcyByZXF1ZXN0ZWQgYnkgYSB0cmFuc2l0aW9uIG9mIHNlbGVjdGVkIG9uZSBHUEMgZ3JvdXAgcGlucy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaXMgY2xlYXJlZCB3aGVuIFNQRCBtb2RlIGlzIGVudGVyZWQuCisgICAgICogfFsxMV0gICAgfEdQRFdLICAgICB8R1BEIFdha2UtdXAgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB3YWtlLXVwIG9mIGNoaXAgZnJvbSBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSAoU1BEKSB3YXMgcmVxdWVzdGVkIGJ5IGEgdHJhbnNpdGlvbiBvZiBzZWxlY3RlZCBvbmUgR1BEIGdyb3VwIHBpbnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGlzIGNsZWFyZWQgd2hlbiBTUEQgbW9kZSBpcyBlbnRlcmVkLgorICAgICAqIHxbMTJdICAgIHxMVlJXSyAgICAgfExWUiBXYWtlLXVwIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgd2FrZS11cCBvZiBkZXZpY2UgZnJvbSBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSAoU1BEKSB3YXMgcmVxdWVzdGVkIHdpdGggYSBMVlIgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGlzIGNsZWFyZWQgd2hlbiBTUEQgbW9kZSBpcyBlbnRlcmVkLgorICAgICAqIHxbMTNdICAgIHxCT0RXSyAgICAgfEJPRCBXYWtlLXVwIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgd2FrZS11cCBvZiBkZXZpY2UgZnJvbSBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSAoU1BEKSB3YXMgcmVxdWVzdGVkIHdpdGggYSBCT0QgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGlzIGNsZWFyZWQgd2hlbiBTUEQgbW9kZSBpcyBlbnRlcmVkLgorICAgICAqIHxbMTRdICAgIHxBQ01QV0sgICAgfEFDTVAgV2FrZS11cCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHdha2UtdXAgb2YgZGV2aWNlIGZyb20gU3RhbmRieSBQb3dlci1kb3duIG1vZGUgKFNQRCkgd2FzIHJlcXVlc3RlZCB3aXRoIGEgQUNNUCB0cmFuc2l0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpcyBjbGVhcmVkIHdoZW4gU1BEIG1vZGUgaXMgZW50ZXJlZC4KKyAgICAgKiB8WzMxXSAgICB8Q0xSV0sgICAgIHxDbGVhciBXYWtlLXVwIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIGFsbCB3YWtlLXVwIGZsYWcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgYXV0byBjbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAgICAqIEB2YXIgQ0xLX1Q6OlNXS0RCQ1RMCisgICAgICogT2Zmc2V0OiAweDlDICBTdGFuZGJ5IFBvd2VyLWRvd24gV2FrZS11cCBEZS1ib3VuY2UgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFNXS0RCQ0xLU0VMfFN0YW5kYnkgUG93ZXItZG93biBXYWtlLXVwIERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgMSBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IFNhbXBsZSB3YWtlLXVwIGlucHV0IG9uY2UgcGVyIDIgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBTYW1wbGUgd2FrZS11cCBpbnB1dCBvbmNlIHBlciA0IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgOCBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IFNhbXBsZSB3YWtlLXVwIGlucHV0IG9uY2UgcGVyIDE2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgMzIgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBTYW1wbGUgd2FrZS11cCBpbnB1dCBvbmNlIHBlciA2NCBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IFNhbXBsZSB3YWtlLXVwIGlucHV0IG9uY2UgcGVyIDEyOCBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IFNhbXBsZSB3YWtlLXVwIGlucHV0IG9uY2UgcGVyIDI1NiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IFNhbXBsZSB3YWtlLXVwIGlucHV0IG9uY2UgcGVyIDIqMjU2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEwID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgNCoyNTYgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTEgPSBTYW1wbGUgd2FrZS11cCBpbnB1dCBvbmNlIHBlciA4KjI1NiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMCA9IFNhbXBsZSB3YWtlLXVwIGlucHV0IG9uY2UgcGVyIDE2KjI1NiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMSA9IFNhbXBsZSB3YWtlLXVwIGlucHV0IG9uY2UgcGVyIDMyKjI1NiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMCA9IFNhbXBsZSB3YWtlLXVwIGlucHV0IG9uY2UgcGVyIDY0KjI1NiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMSA9IFNhbXBsZSB3YWtlLXVwIGlucHV0IG9uY2UgcGVyIDEyOCoyNTYgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IERlLWJvdW5jZSBjb3VudGVyIGNsb2NrIHNvdXJjZSBpcyB0aGUgMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKS4KKyAgICAgKiBAdmFyIENMS19UOjpQQVNXS0NUTAorICAgICAqIE9mZnNldDogMHhBMCAgR1BBIFN0YW5kYnkgUG93ZXItZG93biBXYWtlLXVwIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxXS0VOICAgICAgfFN0YW5kYnkgUG93ZXItZG93biBQaW4gV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQQSBncm91cCBwaW4gd2FrZS11cCBmdW5jdGlvbiBkZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQQSBncm91cCBwaW4gd2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxQUldLRU4gICAgfFBpbiBSaXNpbmcgRWRnZSBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BBIGdyb3VwIHBpbiByaXNpbmcgZWRnZSB3YWtlLXVwIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHUEEgZ3JvdXAgcGluIHJpc2luZyBlZGdlIHdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8UEZXS0VOICAgIHxQaW4gRmFsbGluZyBFZGdlIFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHUEEgZ3JvdXAgcGluIGZhbGxpbmcgZWRnZSB3YWtlLXVwIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHUEEgZ3JvdXAgcGluIGZhbGxpbmcgZWRnZSB3YWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs3OjRdICAgfFdLUFNFTCAgICB8R1BBIFN0YW5kYnkgUG93ZXItZG93biBXYWtlLXVwIFBpbiBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gR1BBLjAgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBHUEEuMSB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IEdQQS4yIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gR1BBLjMgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSBHUEEuNCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IEdQQS41IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gR1BBLjYgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBHUEEuNyB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IEdQQS44IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gR1BBLjkgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTAgPSBHUEEuMTAgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTEgPSBHUEEuMTEgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDAgPSBHUEEuMTIgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDEgPSBHUEEuMTMgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTAgPSBHUEEuMTQgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTEgPSBHUEEuMTUgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxEQkVOICAgICAgfEdQQSBJbnB1dCBTaWduYWwgRGUtYm91bmNlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgREJFTiBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIGRlLWJvdW5jZSBmdW5jdGlvbiBmb3IgZWFjaCBjb3JyZXNwb25kaW5nIElPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBpbnB1dCBzaWduYWwgcHVsc2Ugd2lkdGggY2Fubm90IGJlIHNhbXBsZWQgYnkgY29udGludW91cyB0d28gZGUtYm91bmNlIHNhbXBsZSBjeWNsZSwgdGhlIGlucHV0IHNpZ25hbCB0cmFuc2l0aW9uIGlzIHNlZW4gYXMgdGhlIHNpZ25hbCBib3VuY2UgYW5kIHdpbGwgbm90IHRyaWdnZXIgdGhlIHdha2V1cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGUtYm91bmNlIGNsb2NrIHNvdXJjZSBpcyB0aGUgMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3RhbmRieSBwb3dlci1kb3duIHdha2UtdXAgcGluIERlLWJvdW5jZSBmdW5jdGlvbiBEaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTdGFuZGJ5IHBvd2VyLWRvd24gd2FrZS11cCBwaW4gRGUtYm91bmNlIGZ1bmN0aW9uIEVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGUtYm91bmNlIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgZm9yIGVkZ2UgdHJpZ2dlcmVkLgorICAgICAqIEB2YXIgQ0xLX1Q6OlBCU1dLQ1RMCisgICAgICogT2Zmc2V0OiAweEE0ICBHUEIgU3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdLRU4gICAgICB8U3RhbmRieSBQb3dlci1kb3duIFBpbiBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BCIGdyb3VwIHBpbiB3YWtlLXVwIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHUEIgZ3JvdXAgcGluIHdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8UFJXS0VOICAgIHxQaW4gUmlzaW5nIEVkZ2UgV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQQiBncm91cCBwaW4gcmlzaW5nIGVkZ2Ugd2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BCIGdyb3VwIHBpbiByaXNpbmcgZWRnZSB3YWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFBGV0tFTiAgICB8UGluIEZhbGxpbmcgRWRnZSBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BCIGdyb3VwIHBpbiBmYWxsaW5nIGVkZ2Ugd2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BCIGdyb3VwIHBpbiBmYWxsaW5nIGVkZ2Ugd2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbNzo0XSAgIHxXS1BTRUwgICAgfEdQQiBTdGFuZGJ5IFBvd2VyLWRvd24gV2FrZS11cCBQaW4gU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEdQQi4wIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gR1BCLjEgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBHUEIuMiB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IEdQQi4zIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gR1BCLjQgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBHUEIuNSB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IEdQQi42IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gR1BCLjcgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBHUEIuOCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IEdQQi45IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEwID0gR1BCLjEwIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDExID0gR1BCLjExIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAwID0gR1BCLjEyIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAxID0gR1BCLjEzIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEwID0gR1BCLjE0IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTExID0gR1BCLjE1IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8REJFTiAgICAgIHxHUEIgSW5wdXQgU2lnbmFsIERlLWJvdW5jZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIERCRU4gYml0IGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBkZS1ib3VuY2UgZnVuY3Rpb24gZm9yIGVhY2ggY29ycmVzcG9uZGluZyBJTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgaW5wdXQgc2lnbmFsIHB1bHNlIHdpZHRoIGNhbm5vdCBiZSBzYW1wbGVkIGJ5IGNvbnRpbnVvdXMgdHdvIGRlLWJvdW5jZSBzYW1wbGUgY3ljbGUsIHRoZSBpbnB1dCBzaWduYWwgdHJhbnNpdGlvbiBpcyBzZWVuIGFzIHRoZSBzaWduYWwgYm91bmNlIGFuZCB3aWxsIG5vdCB0cmlnZ2VyIHRoZSB3YWtldXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlLWJvdW5jZSBjbG9jayBzb3VyY2UgaXMgdGhlIDEwIGtIeiBpbnRlcm5hbCBsb3cgc3BlZWQgUkMgb3NjaWxsYXRvciAoTElSQykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN0YW5kYnkgcG93ZXItZG93biB3YWtlLXVwIHBpbiBEZS1ib3VuY2UgZnVuY3Rpb24gRGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RhbmRieSBwb3dlci1kb3duIHdha2UtdXAgcGluIERlLWJvdW5jZSBmdW5jdGlvbiBFbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlLWJvdW5jZSBmdW5jdGlvbiBpcyB2YWxpZCBvbmx5IGZvciBlZGdlIHRyaWdnZXJlZC4KKyAgICAgKiBAdmFyIENMS19UOjpQQ1NXS0NUTAorICAgICAqIE9mZnNldDogMHhBOCAgR1BDIFN0YW5kYnkgUG93ZXItZG93biBXYWtlLXVwIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxXS0VOICAgICAgfFN0YW5kYnkgUG93ZXItZG93biBQaW4gV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQQyBncm91cCBwaW4gd2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BDIGdyb3VwIHBpbiB3YWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFBSV0tFTiAgICB8UGluIFJpc2luZyBFZGdlIFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHUEMgZ3JvdXAgcGluIHJpc2luZyBlZGdlIHdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQQyBncm91cCBwaW4gcmlzaW5nIGVkZ2Ugd2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxQRldLRU4gICAgfFBpbiBGYWxsaW5nIEVkZ2UgV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQQyBncm91cCBwaW4gZmFsbGluZyBlZGdlIHdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQQyBncm91cCBwaW4gZmFsbGluZyBlZGdlIHdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8Wzc6NF0gICB8V0tQU0VMICAgIHxHUEMgU3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgUGluIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBHUEMuMCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEdQQy4xIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gR1BDLjIgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBHUEMuMyB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IEdQQy40IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gR1BDLjUgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBHUEMuNiB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IEdQQy43IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gR1BDLjggd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSBHUEMuOSB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMCA9IEdQQy4xMCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMSA9IEdQQy4xMSB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMCA9IEdQQy4xMiB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMSA9IEdQQy4xMyB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMCA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzhdICAgICB8REJFTiAgICAgIHxHUEMgSW5wdXQgU2lnbmFsIERlLWJvdW5jZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIERCRU4gYml0IGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBkZS1ib3VuY2UgZnVuY3Rpb24gZm9yIGVhY2ggY29ycmVzcG9uZGluZyBJTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgaW5wdXQgc2lnbmFsIHB1bHNlIHdpZHRoIGNhbm5vdCBiZSBzYW1wbGVkIGJ5IGNvbnRpbnVvdXMgdHdvIGRlLWJvdW5jZSBzYW1wbGUgY3ljbGUsIHRoZSBpbnB1dCBzaWduYWwgdHJhbnNpdGlvbiBpcyBzZWVuIGFzIHRoZSBzaWduYWwgYm91bmNlIGFuZCB3aWxsIG5vdCB0cmlnZ2VyIHRoZSB3YWtldXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlLWJvdW5jZSBjbG9jayBzb3VyY2UgaXMgdGhlIDEwIGtIeiBpbnRlcm5hbCBsb3cgc3BlZWQgUkMgb3NjaWxsYXRvciAoTElSQykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN0YW5kYnkgcG93ZXItZG93biB3YWtlLXVwIHBpbiBEZS1ib3VuY2UgZnVuY3Rpb24gRGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RhbmRieSBwb3dlci1kb3duIHdha2UtdXAgcGluIERlLWJvdW5jZSBmdW5jdGlvbiBFbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlLWJvdW5jZSBmdW5jdGlvbiBpcyB2YWxpZCBvbmx5IGZvciBlZGdlIHRyaWdnZXJlZC4KKyAgICAgKiBAdmFyIENMS19UOjpQRFNXS0NUTAorICAgICAqIE9mZnNldDogMHhBQyAgR1BEIFN0YW5kYnkgUG93ZXItZG93biBXYWtlLXVwIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxXS0VOICAgICAgfFN0YW5kYnkgUG93ZXItZG93biBQaW4gV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQRCBncm91cCBwaW4gd2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BEIGdyb3VwIHBpbiB3YWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFBSV0tFTiAgICB8UGluIFJpc2luZyBFZGdlIFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHUEQgZ3JvdXAgcGluIHJpc2luZyBlZGdlIHdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQRCBncm91cCBwaW4gcmlzaW5nIGVkZ2Ugd2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxQRldLRU4gICAgfFBpbiBGYWxsaW5nIEVkZ2UgV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQRCBncm91cCBwaW4gZmFsbGluZyBlZGdlIHdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQRCBncm91cCBwaW4gZmFsbGluZyBlZGdlIHdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8Wzc6NF0gICB8V0tQU0VMICAgIHxHUEQgU3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgUGluIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBHUEQuMCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEdQRC4xIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gR1BELjIgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBHUEQuMyB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IEdQRC40IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gR1BELjUgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBHUEQuNiB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IEdQRC43IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gR1BELjggd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSBHUEQuOSB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMCA9IEdQRC4xMCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMSA9IEdQRC4xMSB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMCA9IEdQRC4xMiB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMSA9IEdQRC4xMyB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMCA9IEdQRC4xNCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMSA9IFJlc2VydmVkLgorICAgICAqIHxbOF0gICAgIHxEQkVOICAgICAgfEdQRCBJbnB1dCBTaWduYWwgRGUtYm91bmNlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgREJFTiBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIGRlLWJvdW5jZSBmdW5jdGlvbiBmb3IgZWFjaCBjb3JyZXNwb25kaW5nIElPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBpbnB1dCBzaWduYWwgcHVsc2Ugd2lkdGggY2Fubm90IGJlIHNhbXBsZWQgYnkgY29udGludW91cyB0d28gZGUtYm91bmNlIHNhbXBsZSBjeWNsZSwgdGhlIGlucHV0IHNpZ25hbCB0cmFuc2l0aW9uIGlzIHNlZW4gYXMgdGhlIHNpZ25hbCBib3VuY2UgYW5kIHdpbGwgbm90IHRyaWdnZXIgdGhlIHdha2V1cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGUtYm91bmNlIGNsb2NrIHNvdXJjZSBpcyB0aGUgMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3RhbmRieSBwb3dlci1kb3duIHdha2UtdXAgcGluIERlLWJvdW5jZSBmdW5jdGlvbiBEaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTdGFuZGJ5IHBvd2VyLWRvd24gd2FrZS11cCBwaW4gRGUtYm91bmNlIGZ1bmN0aW9uIEVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGUtYm91bmNlIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgZm9yIGVkZ2UgdHJpZ2dlcmVkLgorICAgICAqIEB2YXIgQ0xLX1Q6OklPUERDVEwKKyAgICAgKiBPZmZzZXQ6IDB4QjAgIEdQSU8gU3RhbmRieSBQb3dlci1kb3duIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxJT0hSICAgICAgfEdQSU8gSG9sZCBSZWxlYXNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBHUElPIGVudGVyIHN0YW5kYnkgcG93ZXItZG93biBtb2RlLCBhbGwgSS9PIHN0YXR1cyBhcmUgaG9sZCB0byBrZWVwIG5vcm1hbCBvcGVyYXRpbmcgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFmdGVyIGNoaXAgd2FzIHdha2VkIHVwIGZyb20gc3RhbmRieSBQb3dlci1kb3duIG1vZGUsIHRoZSBJL08gc3RpbGwga2VlcHMgaG9sZCBzdGF0dXMgdW50aWwgdXNlciBzZXRzIHRoaXMgYml0IHRvIHJlbGVhc2UgSS9PIGhvbGQgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGF1dG8gY2xlYXJlZCBieSBoYXJkd2FyZS4KKyAgICAgKiBAdmFyIENMS19UOjpIWFRGU0VMCisgICAgICogT2Zmc2V0OiAweEI0ICBIWFQgRmlsdGVyIFNlbGVjdCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SFhURlNFTCAgIHxIWFQgRmlsdGVyIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBIWFQgZnJlcXVlbmN5IGlzID4gMTJNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEhYVCBmcmVxdWVuY3kgaXMgPD0gMTJNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgYXV0byBjbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAgICAqLworCisKKyAgICBfX0lPIHVpbnQzMl90IFBXUkNUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBTeXN0ZW0gUG93ZXItZG93biBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBSEJDTEs7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gQUhCIERldmljZXMgQ2xvY2sgRW5hYmxlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQVBCQ0xLMDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIEFQQiBEZXZpY2VzIENsb2NrIEVuYWJsZSBDb250cm9sIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFQQkNMSzE7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDBDXSBBUEIgRGV2aWNlcyBDbG9jayBFbmFibGUgQ29udHJvbCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTEtTRUwwOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gQ2xvY2sgU291cmNlIFNlbGVjdCBDb250cm9sIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0xLU0VMMTsgICAgICAgICAgICAgICAvKiE8IFsweDAwMTRdIENsb2NrIFNvdXJjZSBTZWxlY3QgQ29udHJvbCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENMS1NFTDI7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDE4XSBDbG9jayBTb3VyY2UgU2VsZWN0IENvbnRyb2wgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTEtTRUwzOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAxQ10gQ2xvY2sgU291cmNlIFNlbGVjdCBDb250cm9sIFJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0xLRElWMDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMjBdIENsb2NrIERpdmlkZXIgTnVtYmVyIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENMS0RJVjE7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDI0XSBDbG9jayBEaXZpZGVyIE51bWJlciBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsyXTsKKyAgICBfX0lPIHVpbnQzMl90IENMS0RJVjQ7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDMwXSBDbG9jayBEaXZpZGVyIE51bWJlciBSZWdpc3RlciA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQQ0xLRElWOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAzNF0gQVBCIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbMl07CisgICAgX19JTyB1aW50MzJfdCBQTExDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA0MF0gUExMIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTJbM107CisgICAgX19JICB1aW50MzJfdCBTVEFUVVM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA1MF0gQ2xvY2sgU3RhdHVzIE1vbml0b3IgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTNbM107CisgICAgX19JTyB1aW50MzJfdCBDTEtPQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA2MF0gQ2xvY2sgT3V0cHV0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTRbM107CisgICAgX19JTyB1aW50MzJfdCBDTEtEQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA3MF0gQ2xvY2sgRmFpbCBEZXRlY3RvciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0xLRFNUUzsgICAgICAgICAgICAgICAvKiE8IFsweDAwNzRdIENsb2NrIEZhaWwgRGV0ZWN0b3IgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENEVVBCOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDc4XSBDbG9jayBGcmVxdWVuY3kgRGV0ZWN0b3IgVXBwZXIgQm91bmRhcnkgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDRExPV0I7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA3Q10gQ2xvY2sgRnJlcXVlbmN5IERldGVjdG9yIExvdyBCb3VuZGFyeSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTVbNF07CisgICAgX19JTyB1aW50MzJfdCBQTVVDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA5MF0gUG93ZXIgTWFuYWdlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUE1VU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwOTRdIFBvd2VyIE1hbmFnZXIgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU2WzFdOworICAgIF9fSU8gdWludDMyX3QgU1dLREJDVEw7ICAgICAgICAgICAgICAvKiE8IFsweDAwOUNdIFN0YW5kYnkgUG93ZXItZG93biBXYWtlLXVwIERlLWJvdW5jZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBBU1dLQ1RMOyAgICAgICAgICAgICAgLyohPCBbMHgwMEEwXSBHUEEgU3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQQlNXS0NUTDsgICAgICAgICAgICAgIC8qITwgWzB4MDBBNF0gR1BCIFN0YW5kYnkgUG93ZXItZG93biBXYWtlLXVwIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUENTV0tDVEw7ICAgICAgICAgICAgICAvKiE8IFsweDAwQThdIEdQQyBTdGFuZGJ5IFBvd2VyLWRvd24gV2FrZS11cCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBEU1dLQ1RMOyAgICAgICAgICAgICAgLyohPCBbMHgwMEFDXSBHUEQgU3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJT1BEQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBCMF0gR1BJTyBTdGFuZGJ5IFBvd2VyLWRvd24gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSFhURlNFTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwQjRdIEhYVCBGaWx0ZXIgU2VsZWN0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBDTEtfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgQ0xLX0NPTlNUIENMSyBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBDTEsgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBDTEtfUFdSQ1RMX0hYVEVOX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogSFhURU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BXUkNUTF9IWFRFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QV1JDVExfSFhURU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IEhYVEVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BXUkNUTF9MWFRFTl9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IExYVEVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENMS19QV1JDVExfTFhURU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUFdSQ1RMX0xYVEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBMWFRFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QV1JDVExfSElSQ0VOX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBISVJDRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDTEtfUFdSQ1RMX0hJUkNFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BXUkNUTF9ISVJDRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogSElSQ0VOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUFdSQ1RMX0xJUkNFTl9Qb3MgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogTElSQ0VOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BXUkNUTF9MSVJDRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QV1JDVExfTElSQ0VOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IExJUkNFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BXUkNUTF9QRFdLSUVOX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IFBEV0tJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19QV1JDVExfUERXS0lFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDTEtfUFdSQ1RMX1BEV0tJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBQRFdLSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QV1JDVExfUERXS0lGX1BvcyAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBQRFdLSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDTEtfUFdSQ1RMX1BEV0tJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BXUkNUTF9QRFdLSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogUERXS0lGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUFdSQ1RMX1BERU5fUG9zICAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogUERFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BXUkNUTF9QREVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QV1JDVExfUERFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IFBERU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BXUkNUTF9IWFRHQUlOX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IEhYVEdBSU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19QV1JDVExfSFhUR0FJTl9Nc2sgICAgICAgICAgICgweDN1bCA8PCBDTEtfUFdSQ1RMX0hYVEdBSU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBIWFRHQUlOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QV1JDVExfSFhUU0VMVFlQX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBIWFRTRUxUWVAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfUFdSQ1RMX0hYVFNFTFRZUF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BXUkNUTF9IWFRTRUxUWVBfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogSFhUU0VMVFlQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUFdSQ1RMX0hYVFRCRU5fUG9zICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogSFhUVEJFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BXUkNUTF9IWFRUQkVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IENMS19QV1JDVExfSFhUVEJFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IEhYVFRCRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BXUkNUTF9ISVJDNDhFTl9Qb3MgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IEhJUkM0OEVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19QV1JDVExfSElSQzQ4RU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfUFdSQ1RMX0hJUkM0OEVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBISVJDNDhFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BSEJDTEtfUERNQTBDS0VOX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QUhCQ0xLOiBQRE1BMENLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQUhCQ0xLX1BETUEwQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FIQkNMS19QRE1BMENLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFIQkNMSzogUERNQTBDS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQUhCQ0xLX1BETUExQ0tFTl9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFIQkNMSzogUERNQTFDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FIQkNMS19QRE1BMUNLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BSEJDTEtfUERNQTFDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBSEJDTEs6IFBETUExQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FIQkNMS19JU1BDS0VOX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBSEJDTEs6IElTUENLRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19BSEJDTEtfSVNQQ0tFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDTEtfQUhCQ0xLX0lTUENLRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QUhCQ0xLOiBJU1BDS0VOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BSEJDTEtfRUJJQ0tFTl9Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QUhCQ0xLOiBFQklDS0VOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQUhCQ0xLX0VCSUNLRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FIQkNMS19FQklDS0VOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFIQkNMSzogRUJJQ0tFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQUhCQ0xLX1NESDBDS0VOX1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFIQkNMSzogU0RIMENLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FIQkNMS19TREgwQ0tFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19BSEJDTEtfU0RIMENLRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBSEJDTEs6IFNESDBDS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FIQkNMS19DUkNDS0VOX1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBSEJDTEs6IENSQ0NLRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19BSEJDTEtfQ1JDQ0tFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDTEtfQUhCQ0xLX0NSQ0NLRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QUhCQ0xLOiBDUkNDS0VOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BSEJDTEtfQ1JQVENLRU5fUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QUhCQ0xLOiBDUlBUQ0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQUhCQ0xLX0NSUFRDS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FIQkNMS19DUlBUQ0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFIQkNMSzogQ1JQVENLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQUhCQ0xLX0ZNQ0lETEVfUG9zICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFIQkNMSzogRk1DSURMRSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FIQkNMS19GTUNJRExFX01zayAgICAgICAgICAgKDB4MXVsIDw8IENMS19BSEJDTEtfRk1DSURMRV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBSEJDTEs6IEZNQ0lETEUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FIQkNMS19VU0JIQ0tFTl9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBSEJDTEs6IFVTQkhDS0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19BSEJDTEtfVVNCSENLRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfQUhCQ0xLX1VTQkhDS0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QUhCQ0xLOiBVU0JIQ0tFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX1dEVENLRU5fUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogV0RUQ0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9XRFRDS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfV0RUQ0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFdEVENLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9SVENDS0VOX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFJUQ0NLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfUlRDQ0tFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX1JUQ0NLRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBSVENDS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVE1SMENLRU5fUG9zICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBUTVIwQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1RNUjBDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9UTVIwQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVE1SMENLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX1RNUjFDS0VOX1BvcyAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVE1SMUNLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9UTVIxQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfVE1SMUNLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFRNUjFDS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9UTVIyQ0tFTl9Qb3MgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFRNUjJDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVE1SMkNLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX1RNUjJDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBUTVIyQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVE1SM0NLRU5fUG9zICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBUTVIzQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1RNUjNDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9UTVIzQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVE1SM0NLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX0NMS09DS0VOX1BvcyAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogQ0xLT0NLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9DTEtPQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfQ0xLT0NLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IENMS09DS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9BQ01QMDFDS0VOX1BvcyAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IEFDTVAwMUNLRU4gUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfQUNNUDAxQ0tFTl9Nc2sgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX0FDTVAwMUNLRU5fUG9zKSAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBBQ01QMDFDS0VOIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfSTJDMENLRU5fUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBJMkMwQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX0kyQzBDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9JMkMwQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogSTJDMENLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX0kyQzFDS0VOX1BvcyAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogSTJDMUNLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9JMkMxQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfSTJDMUNLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IEkyQzFDS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9JMkMyQ0tFTl9Qb3MgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IEkyQzJDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfSTJDMkNLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX0kyQzJDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBJMkMyQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfUVNQSTBDS0VOX1BvcyAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBRU1BJMENLRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1FTUEkwQ0tFTl9Nc2sgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9RU1BJMENLRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogUVNQSTBDS0VOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX1NQSTBDS0VOX1BvcyAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogU1BJMENLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9TUEkwQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfU1BJMENLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFNQSTBDS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9TUEkxQ0tFTl9Qb3MgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFNQSTFDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfU1BJMUNLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX1NQSTFDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBTUEkxQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfU1BJMkNLRU5fUG9zICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBTUEkyQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1NQSTJDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9TUEkyQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogU1BJMkNLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX1VBUlQwQ0tFTl9Qb3MgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVUFSVDBDS0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9VQVJUMENLRU5fTXNrICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfVUFSVDBDS0VOX1BvcykgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFVBUlQwQ0tFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9VQVJUMUNLRU5fUG9zICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFVBUlQxQ0tFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVUFSVDFDS0VOX01zayAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX1VBUlQxQ0tFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBVQVJUMUNLRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVUFSVDJDS0VOX1BvcyAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBVQVJUMkNLRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1VBUlQyQ0tFTl9Nc2sgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9VQVJUMkNLRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVUFSVDJDS0VOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX1VBUlQzQ0tFTl9Qb3MgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVUFSVDNDS0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9VQVJUM0NLRU5fTXNrICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfVUFSVDNDS0VOX1BvcykgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFVBUlQzQ0tFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9VQVJUNENLRU5fUG9zICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFVBUlQ0Q0tFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVUFSVDRDS0VOX01zayAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX1VBUlQ0Q0tFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBVQVJUNENLRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVUFSVDVDS0VOX1BvcyAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBVQVJUNUNLRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1VBUlQ1Q0tFTl9Nc2sgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9VQVJUNUNLRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVUFSVDVDS0VOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX0NBTjBDS0VOX1BvcyAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogQ0FOMENLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9DQU4wQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfQ0FOMENLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IENBTjBDS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9PVEdDS0VOX1BvcyAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IE9UR0NLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfT1RHQ0tFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX09UR0NLRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBPVEdDS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVVNCRENLRU5fUG9zICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBVU0JEQ0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9VU0JEQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfVVNCRENLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFVTQkRDS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVVNCRENLRU5fUG9zICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBVU0JEQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1VTQkRDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9VU0JEQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVVNCRENLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX0VBRENDS0VOX1BvcyAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogRUFEQ0NLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9FQURDQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfRUFEQ0NLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IEVBRENDS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9JMlMwQ0tFTl9Qb3MgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IEkyUzBDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfSTJTMENLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX0kyUzBDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBJMlMwQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzFfU0MwQ0tFTl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBTQzBDS0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEsxX1NDMENLRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMV9TQzBDS0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogU0MwQ0tFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEsxX1NDMUNLRU5fUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogU0MxQ0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMV9TQzFDS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzFfU0MxQ0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IFNDMUNLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMV9TQzJDS0VOX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IFNDMkNLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzFfU0MyQ0tFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEsxX1NDMkNLRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBTQzJDS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzFfU1BJM0NLRU5fUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBTUEkzQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEsxX1NQSTNDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMV9TUEkzQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogU1BJM0NLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEsxX1VTQ0kwQ0tFTl9Qb3MgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogVVNDSTBDS0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMV9VU0NJMENLRU5fTXNrICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzFfVVNDSTBDS0VOX1BvcykgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IFVTQ0kwQ0tFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMV9VU0NJMUNLRU5fUG9zICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IFVTQ0kxQ0tFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzFfVVNDSTFDS0VOX01zayAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEsxX1VTQ0kxQ0tFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBVU0NJMUNLRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzFfREFDQ0tFTl9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBEQUNDS0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEsxX0RBQ0NLRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMV9EQUNDS0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogREFDQ0tFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEsxX0VQV00wQ0tFTl9Qb3MgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogRVBXTTBDS0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMV9FUFdNMENLRU5fTXNrICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzFfRVBXTTBDS0VOX1BvcykgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IEVQV00wQ0tFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMV9FUFdNMUNLRU5fUG9zICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IEVQV00xQ0tFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzFfRVBXTTFDS0VOX01zayAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEsxX0VQV00xQ0tFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBFUFdNMUNLRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzFfQlBXTTBDS0VOX1BvcyAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBCUFdNMENLRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIENMS19BUEJDTEsxX0JQV00wQ0tFTl9Nc2sgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMV9CUFdNMENLRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogQlBXTTBDS0VOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEsxX0JQV00xQ0tFTl9Qb3MgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogQlBXTTFDS0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMV9CUFdNMUNLRU5fTXNrICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzFfQlBXTTFDS0VOX1BvcykgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IEJQV00xQ0tFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMV9RRUkwQ0tFTl9Qb3MgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IFFFSTBDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzFfUUVJMENLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEsxX1FFSTBDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBRRUkwQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzFfUUVJMUNLRU5fUG9zICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBRRUkxQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEsxX1FFSTFDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMV9RRUkxQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogUUVJMUNLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEsxX1RSTkdDS0VOX1BvcyAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogVFJOR0NLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzFfVFJOR0NLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEsxX1RSTkdDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBUUk5HQ0tFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEsxX0VDQVAwQ0tFTl9Qb3MgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogRUNBUDBDS0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMV9FQ0FQMENLRU5fTXNrICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzFfRUNBUDBDS0VOX1BvcykgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IEVDQVAwQ0tFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMV9FQ0FQMUNLRU5fUG9zICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IEVDQVAxQ0tFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzFfRUNBUDFDS0VOX01zayAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEsxX0VDQVAxQ0tFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBFQ0FQMUNLRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDBfSENMS1NFTF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwwOiBIQ0xLU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwwX0hDTEtTRUxfTXNrICAgICAgICAgICgweDd1bCA8PCBDTEtfQ0xLU0VMMF9IQ0xLU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMDogSENMS1NFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwwX1NUQ0xLU0VMX1BvcyAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMDogU1RDTEtTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMF9TVENMS1NFTF9Nc2sgICAgICAgICAoMHg3dWwgPDwgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDA6IFNUQ0xLU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMF9VU0JTRUxfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDA6IFVTQlNFTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfVVNCU0VMX01zayAgICAgICAgICAgKDB4MXVsIDw8IENMS19DTEtTRUwwX1VTQlNFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwwOiBVU0JTRUwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDBfU0RIMFNFTF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwwOiBTREgwU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwwX1NESDBTRUxfTXNrICAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMMF9TREgwU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMDogU0RIMFNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwxX1dEVFNFTF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMTogV0RUU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9XRFRTRUxfTXNrICAgICAgICAgICAoMHgzdWwgPDwgQ0xLX0NMS1NFTDFfV0RUU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDE6IFdEVFNFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIwU0VMX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDE6IFRNUjBTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMFNFTF9Nc2sgICAgICAgICAgKDB4N3VsIDw8IENMS19DTEtTRUwxX1RNUjBTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwxOiBUTVIwU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMVNFTF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwxOiBUTVIxU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjFTRUxfTXNrICAgICAgICAgICgweDd1bCA8PCBDTEtfQ0xLU0VMMV9UTVIxU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMTogVE1SMVNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjJTRUxfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMTogVE1SMlNFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIyU0VMX01zayAgICAgICAgICAoMHg3dWwgPDwgQ0xLX0NMS1NFTDFfVE1SMlNFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDE6IFRNUjJTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIzU0VMX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDE6IFRNUjNTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SM1NFTF9Nc2sgICAgICAgICAgKDB4N3VsIDw8IENMS19DTEtTRUwxX1RNUjNTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwxOiBUTVIzU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVUFSVDBTRUxfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwxOiBVQVJUMFNFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwxX1VBUlQwU0VMX01zayAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMMV9VQVJUMFNFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMTogVUFSVDBTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwxX1VBUlQxU0VMX1BvcyAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMTogVUFSVDFTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9VQVJUMVNFTF9Nc2sgICAgICAgICAoMHgzdWwgPDwgQ0xLX0NMS1NFTDFfVUFSVDFTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDE6IFVBUlQxU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMV9DTEtPU0VMX1BvcyAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDE6IENMS09TRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfQ0xLT1NFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwxX0NMS09TRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwxOiBDTEtPU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDFfV1dEVFNFTF9Qb3MgICAgICAgICAgKDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwxOiBXV0RUU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwxX1dXRFRTRUxfTXNrICAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMMV9XV0RUU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMTogV1dEVFNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwyX0VQV00wU0VMX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMjogRVBXTTBTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9FUFdNMFNFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS1NFTDJfRVBXTTBTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDI6IEVQV00wU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMl9FUFdNMVNFTF9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDI6IEVQV00xU0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfRVBXTTFTRUxfTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19DTEtTRUwyX0VQV00xU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwyOiBFUFdNMVNFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUG9zICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwyOiBRU1BJMFNFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwyX1FTUEkwU0VMX01zayAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMjogUVNQSTBTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTBTRUxfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMjogU1BJMFNFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkwU0VMX01zayAgICAgICAgICAoMHgzdWwgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDI6IFNQSTBTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDI6IFNQSTFTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwyOiBTUEkxU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwyOiBTUEkyU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTJTRUxfTXNrICAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMjogU1BJMlNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwyX0JQV00wU0VMX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMjogQlBXTTBTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9CUFdNMFNFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS1NFTDJfQlBXTTBTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDI6IEJQV00wU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMl9CUFdNMVNFTF9Qb3MgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDI6IEJQV00xU0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfQlBXTTFTRUxfTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19DTEtTRUwyX0JQV00xU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwyOiBCUFdNMVNFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwyOiBTUEkzU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTNTRUxfTXNrICAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMjogU1BJM1NFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX1NDMFNFTF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMzogU0MwU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19TQzBTRUxfTXNrICAgICAgICAgICAoMHgzdWwgPDwgQ0xLX0NMS1NFTDNfU0MwU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDM6IFNDMFNFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMM19TQzFTRUxfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDM6IFNDMVNFTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfU0MxU0VMX01zayAgICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwzX1NDMVNFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwzOiBTQzFTRUwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfU0MyU0VMX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwzOiBTQzJTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwzX1NDMlNFTF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMM19TQzJTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMzogU0MyU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX1JUQ1NFTF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMzogUlRDU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19SVENTRUxfTXNrICAgICAgICAgICAoMHgzdWwgPDwgQ0xLX0NMS1NFTDNfUlRDU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDM6IFJUQ1NFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMM19JMlMwU0VMX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDM6IEkyUzBTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfSTJTMFNFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwzX0kyUzBTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwzOiBJMlMwU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDJTRUxfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwzOiBVQVJUMlNFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQyU0VMX01zayAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMM19VQVJUMlNFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMzogVUFSVDJTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQzU0VMX1BvcyAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMzogVUFSVDNTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19VQVJUM1NFTF9Nc2sgICAgICAgICAoMHgzdWwgPDwgQ0xLX0NMS1NFTDNfVUFSVDNTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDM6IFVBUlQzU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMM19VQVJUNFNFTF9Qb3MgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDM6IFVBUlQ0U0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDRTRUxfTXNrICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwzX1VBUlQ0U0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwzOiBVQVJUNFNFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDVTRUxfUG9zICAgICAgICAgKDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwzOiBVQVJUNVNFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQ1U0VMX01zayAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMM19VQVJUNVNFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMzogVUFSVDVTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtESVYwX0hDTEtESVZfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWMDogSENMS0RJViBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLRElWMF9IQ0xLRElWX01zayAgICAgICAgICAoMHhmdWwgPDwgQ0xLX0NMS0RJVjBfSENMS0RJVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjA6IEhDTEtESVYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRElWMF9VU0JESVZfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjA6IFVTQkRJViBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjBfVVNCRElWX01zayAgICAgICAgICAgKDB4ZnVsIDw8IENMS19DTEtESVYwX1VTQkRJVl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVYwOiBVU0JESVYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RJVjBfVUFSVDBESVZfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVYwOiBVQVJUMERJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtESVYwX1VBUlQwRElWX01zayAgICAgICAgICgweGZ1bCA8PCBDTEtfQ0xLRElWMF9VQVJUMERJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWMDogVUFSVDBESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtESVYwX1VBUlQxRElWX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWMDogVUFSVDFESVYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLRElWMF9VQVJUMURJVl9Nc2sgICAgICAgICAoMHhmdWwgPDwgQ0xLX0NMS0RJVjBfVUFSVDFESVZfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjA6IFVBUlQxRElWIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRElWMF9FQURDRElWX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjA6IEVBRENESVYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjBfRUFEQ0RJVl9Nc2sgICAgICAgICAgKDB4ZmZ1bCA8PCBDTEtfQ0xLRElWMF9FQURDRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVYwOiBFQURDRElWIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RJVjBfU0RIMERJVl9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVYwOiBTREgwRElWIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtESVYwX1NESDBESVZfTXNrICAgICAgICAgICgweGZmdWwgPDwgQ0xLX0NMS0RJVjBfU0RIMERJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWMDogU0RIMERJViBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtESVYxX1NDMERJVl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWMTogU0MwRElWIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLRElWMV9TQzBESVZfTXNrICAgICAgICAgICAoMHhmZnVsIDw8IENMS19DTEtESVYxX1NDMERJVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjE6IFNDMERJViBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRElWMV9TQzFESVZfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjE6IFNDMURJViBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjFfU0MxRElWX01zayAgICAgICAgICAgKDB4ZmZ1bCA8PCBDTEtfQ0xLRElWMV9TQzFESVZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVYxOiBTQzFESVYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RJVjFfU0MyRElWX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVYxOiBTQzJESVYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19DTEtESVYxX1NDMkRJVl9Nc2sgICAgICAgICAgICgweGZmdWwgPDwgQ0xLX0NMS0RJVjFfU0MyRElWX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWMTogU0MyRElWIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtESVY0X1VBUlQyRElWX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWNDogVUFSVDJESVYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLRElWNF9VQVJUMkRJVl9Nc2sgICAgICAgICAoMHhmdWwgPDwgQ0xLX0NMS0RJVjRfVUFSVDJESVZfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjQ6IFVBUlQyRElWIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRElWNF9VQVJUM0RJVl9Qb3MgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjQ6IFVBUlQzRElWIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjRfVUFSVDNESVZfTXNrICAgICAgICAgKDB4ZnVsIDw8IENMS19DTEtESVY0X1VBUlQzRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVY0OiBVQVJUM0RJViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RJVjRfVUFSVDRESVZfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVY0OiBVQVJUNERJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtESVY0X1VBUlQ0RElWX01zayAgICAgICAgICgweGZ1bCA8PCBDTEtfQ0xLRElWNF9VQVJUNERJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWNDogVUFSVDRESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtESVY0X1VBUlQ1RElWX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWNDogVUFSVDVESVYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLRElWNF9VQVJUNURJVl9Nc2sgICAgICAgICAoMHhmdWwgPDwgQ0xLX0NMS0RJVjRfVUFSVDVESVZfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjQ6IFVBUlQ1RElWIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIwRElWX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBDTEtESVY6IEFQQjBESVYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMERJVl9Nc2sgICAgICAgICAgKDB4N3VsIDw8IENMS19QQ0xLRElWX0FQQjBESVZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQ0xLRElWOiBBUEIwRElWIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMURJVl9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQ0xLRElWOiBBUEIxRElWIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjFESVZfTXNrICAgICAgICAgICgweDd1bCA8PCBDTEtfUENMS0RJVl9BUEIxRElWX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UENMS0RJVjogQVBCMURJViBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTExDVExfRkJESVZfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UExMQ1RMOiBGQkRJViBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDTEtfUExMQ1RMX0ZCRElWX01zayAgICAgICAgICAgICAoMHgxZmZ1bCA8PCBDTEtfUExMQ1RMX0ZCRElWX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBMTENUTDogRkJESVYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUExMQ1RMX0lORElWX1BvcyAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBMTENUTDogSU5ESVYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BMTENUTF9JTkRJVl9Nc2sgICAgICAgICAgICAgKDB4MWZ1bCA8PCBDTEtfUExMQ1RMX0lORElWX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTExDVEw6IElORElWIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BMTENUTF9PVVRESVZfUG9zICAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTExDVEw6IE9VVERJViBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19QTExDVExfT1VURElWX01zayAgICAgICAgICAgICgweDN1bCA8PCBDTEtfUExMQ1RMX09VVERJVl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UExMQ1RMOiBPVVRESVYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTExDVExfUERfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UExMQ1RMOiBQRCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBDTEtfUExMQ1RMX1BEX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BMTENUTF9QRF9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBMTENUTDogUEQgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUExMQ1RMX0JQX1BvcyAgICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBMTENUTDogQlAgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BMTENUTF9CUF9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QTExDVExfQlBfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTExDVEw6IEJQIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BMTENUTF9PRV9Qb3MgICAgICAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTExDVEw6IE9FIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIENMS19QTExDVExfT0VfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUExMQ1RMX09FX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UExMQ1RMOiBPRSBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTExDVExfUExMU1JDX1BvcyAgICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UExMQ1RMOiBQTExTUkMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDTEtfUExMQ1RMX1BMTFNSQ19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BMTENUTF9QTExTUkNfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBMTENUTDogUExMU1JDIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUExMQ1RMX1NUQlNFTF9Qb3MgICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBMTENUTDogU1RCU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BMTENUTF9TVEJTRUxfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QTExDVExfU1RCU0VMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTExDVEw6IFNUQlNFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1NUQVRVU19IWFRTVEJfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpTVEFUVVM6IEhYVFNUQiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19TVEFUVVNfSFhUU1RCX01zayAgICAgICAgICAgICgweDF1bCA8PCBDTEtfU1RBVFVTX0hYVFNUQl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1RBVFVTOiBIWFRTVEIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19TVEFUVVNfTFhUU1RCX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1RBVFVTOiBMWFRTVEIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDTEtfU1RBVFVTX0xYVFNUQl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1NUQVRVU19MWFRTVEJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNUQVRVUzogTFhUU1RCIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfU1RBVFVTX1BMTFNUQl9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNUQVRVUzogUExMU1RCIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1NUQVRVU19QTExTVEJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENMS19TVEFUVVNfUExMU1RCX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpTVEFUVVM6IFBMTFNUQiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1NUQVRVU19MSVJDU1RCX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpTVEFUVVM6IExJUkNTVEIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19TVEFUVVNfTElSQ1NUQl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDTEtfU1RBVFVTX0xJUkNTVEJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1RBVFVTOiBMSVJDU1RCIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19TVEFUVVNfSElSQ1NUQl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1RBVFVTOiBISVJDU1RCIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfU1RBVFVTX0hJUkNTVEJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1NUQVRVU19ISVJDU1RCX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNUQVRVUzogSElSQ1NUQiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfU1RBVFVTX0hJUkM0OFNUQl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNUQVRVUzogSElSQzQ4U1RCIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX1NUQVRVU19ISVJDNDhTVEJfTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19TVEFUVVNfSElSQzQ4U1RCX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpTVEFUVVM6IEhJUkM0OFNUQiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1NUQVRVU19DTEtTRkFJTF9Qb3MgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpTVEFUVVM6IENMS1NGQUlMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19TVEFUVVNfQ0xLU0ZBSUxfTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfU1RBVFVTX0NMS1NGQUlMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1RBVFVTOiBDTEtTRkFJTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19TVEFUVVNfRVhUTFhUU1RCX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1RBVFVTOiBFWFRMWFRTVEIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfU1RBVFVTX0VYVExYVFNUQl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX1NUQVRVU19FWFRMWFRTVEJfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNUQVRVUzogRVhUTFhUU1RCIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfU1RBVFVTX0xJUkMzMlNUQl9Qb3MgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNUQVRVUzogTElSQzMyU1RCIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX1NUQVRVU19MSVJDMzJTVEJfTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19TVEFUVVNfTElSQzMyU1RCX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpTVEFUVVM6IExJUkMzMlNUQiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS09DVExfRlJFUVNFTF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtPQ1RMOiBGUkVRU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtPQ1RMX0ZSRVFTRUxfTXNrICAgICAgICAgICgweGZ1bCA8PCBDTEtfQ0xLT0NUTF9GUkVRU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLT0NUTDogRlJFUVNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtPQ1RMX0NMS09FTl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLT0NUTDogQ0xLT0VOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLT0NUTF9DTEtPRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS09DVExfQ0xLT0VOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS09DVEw6IENMS09FTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLT0NUTF9ESVYxRU5fUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS09DVEw6IERJVjFFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS09DVExfRElWMUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IENMS19DTEtPQ1RMX0RJVjFFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtPQ1RMOiBESVYxRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS09DVExfQ0xLMUhaRU5fUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtPQ1RMOiBDTEsxSFpFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtPQ1RMX0NMSzFIWkVOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQ0xLT0NUTF9DTEsxSFpFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLT0NUTDogQ0xLMUhaRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtEQ1RMX0hYVEZERU5fUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRENUTDogSFhURkRFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLRENUTF9IWFRGREVOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS0RDVExfSFhURkRFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RDVEw6IEhYVEZERU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRENUTF9IWFRGSUVOX1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RDVEw6IEhYVEZJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RDVExfSFhURklFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19DTEtEQ1RMX0hYVEZJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtEQ1RMOiBIWFRGSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RDVExfTFhURkRFTl9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtEQ1RMOiBMWFRGREVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtEQ1RMX0xYVEZERU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfQ0xLRENUTF9MWFRGREVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRENUTDogTFhURkRFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtEQ1RMX0xYVEZJRU5fUG9zICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRENUTDogTFhURklFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLRENUTF9MWFRGSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS0RDVExfTFhURklFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RDVEw6IExYVEZJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRENUTF9IWFRGUURFTl9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RDVEw6IEhYVEZRREVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RDVExfSFhURlFERU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19DTEtEQ1RMX0hYVEZRREVOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtEQ1RMOiBIWFRGUURFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RDVExfSFhURlFJRU5fUG9zICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtEQ1RMOiBIWFRGUUlFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtEQ1RMX0hYVEZRSUVOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQ0xLRENUTF9IWFRGUUlFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRENUTDogSFhURlFJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtEU1RTX0hYVEZJRl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRFNUUzogSFhURklGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLRFNUU19IWFRGSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS0RTVFNfSFhURklGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RTVFM6IEhYVEZJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRFNUU19MWFRGSUZfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RTVFM6IExYVEZJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RTVFNfTFhURklGX01zayAgICAgICAgICAgKDB4MXVsIDw8IENMS19DTEtEU1RTX0xYVEZJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtEU1RTOiBMWFRGSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RTVFNfSFhURlFJRl9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtEU1RTOiBIWFRGUUlGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtEU1RTX0hYVEZRSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfQ0xLRFNUU19IWFRGUUlGX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRFNUUzogSFhURlFJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DRFVQQl9VUEVSQkRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0RVUEI6IFVQRVJCRCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDTEtfQ0RVUEJfVVBFUkJEX01zayAgICAgICAgICAgICAoMHgzZmZ1bCA8PCBDTEtfQ0RVUEJfVVBFUkJEX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNEVVBCOiBVUEVSQkQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0RMT1dCX0xPV0VSQkRfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNETE9XQjogTE9XRVJCRCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NETE9XQl9MT1dFUkJEX01zayAgICAgICAgICAgKDB4M2ZmdWwgPDwgQ0xLX0NETE9XQl9MT1dFUkJEX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDRExPV0I6IExPV0VSQkQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BNVUNUTF9QRE1TRUxfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVDVEw6IFBETVNFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19QTVVDVExfUERNU0VMX01zayAgICAgICAgICAgICgweDd1bDw8IENMS19QTVVDVExfUERNU0VMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VQ1RMOiBQRE1TRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTVVDVExfV0tUTVJFTl9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VQ1RMOiBXS1RNUkVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1dLVE1SRU5fTXNrICAgICAgICAgICAoMHgxdWw8PCBDTEtfUE1VQ1RMX1dLVE1SRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVUNUTDogV0tUTVJFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUE1VQ1RMX1dLVE1SSVNfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVUNUTDogV0tUTVJJUyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BNVUNUTF9XS1RNUklTX01zayAgICAgICAgICAgKDB4N3VsPDwgQ0xLX1BNVUNUTF9XS1RNUklTX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVDVEw6IFdLVE1SSVMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BNVUNUTF9XS1BJTkVOX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVDVEw6IFdLUElORU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19QTVVDVExfV0tQSU5FTl9Nc2sgICAgICAgICAgICgweDN1bDw8IENMS19QTVVDVExfV0tQSU5FTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VQ1RMOiBXS1BJTkVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTVVDVExfQUNNUFNQV0tfUG9zICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VQ1RMOiBBQ01QU1BXSyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfUE1VQ1RMX0FDTVBTUFdLX01zayAgICAgICAgICAoMHgxdWw8PCBDTEtfUE1VQ1RMX0FDTVBTUFdLX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVUNUTDogQUNNUFNQV0sgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUE1VQ1RMX1JUQ1dLRU5fUG9zICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVUNUTDogUlRDV0tFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BNVUNUTF9SVENXS0VOX01zayAgICAgICAgICAgKDB4MXVsPDwgQ0xLX1BNVUNUTF9SVENXS0VOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVDVEw6IFJUQ1dLRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BNVVNUU19QSU5XS19Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IFBJTldLIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENMS19QTVVTVFNfUElOV0tfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUE1VU1RTX1BJTldLX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBQSU5XSyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTVVTVFNfVE1SV0tfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBUTVJXSyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDTEtfUE1VU1RTX1RNUldLX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BNVVNUU19UTVJXS19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogVE1SV0sgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUE1VU1RTX1JUQ1dLX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogUlRDV0sgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BNVVNUU19SVENXS19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QTVVTVFNfUlRDV0tfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IFJUQ1dLIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BNVVNUU19HUEFXS19Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IEdQQVdLIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENMS19QTVVTVFNfR1BBV0tfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUE1VU1RTX0dQQVdLX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBHUEFXSyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTVVTVFNfR1BCV0tfUG9zICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBHUEJXSyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDTEtfUE1VU1RTX0dQQldLX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BNVVNUU19HUEJXS19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogR1BCV0sgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUE1VU1RTX0dQQ1dLX1BvcyAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogR1BDV0sgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BNVVNUU19HUENXS19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QTVVTVFNfR1BDV0tfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IEdQQ1dLIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BNVVNUU19HUERXS19Qb3MgICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IEdQRFdLIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENMS19QTVVTVFNfR1BEV0tfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUE1VU1RTX0dQRFdLX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBHUERXSyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTVVTVFNfTFZSV0tfUG9zICAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBMVlJXSyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDTEtfUE1VU1RTX0xWUldLX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BNVVNUU19MVlJXS19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogTFZSV0sgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUE1VU1RTX0JPRFdLX1BvcyAgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogQk9EV0sgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BNVVNUU19CT0RXS19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QTVVTVFNfQk9EV0tfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IEJPRFdLIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BNVVNUU19BQ01QV0tfUG9zICAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IEFDTVBXSyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19QTVVTVFNfQUNNUFdLX01zayAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUE1VU1RTX0FDTVBXS19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBBQ01QV0sgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTVVTVFNfQ0xSV0tfUG9zICAgICAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBDTFJXSyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDTEtfUE1VU1RTX0NMUldLX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BNVVNUU19DTFJXS19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogQ0xSV0sgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNXS0RCQ1RMOiBTV0tEQkNMS1NFTCBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMX01zayAgICAgKDB4RnVsPDwgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMX1BvcykgICAgICAgICAgICAvKiE8IENMS19UOjpTV0tEQkNUTDogU1dLREJDTEtTRUwgTWFzayAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BBU1dLQ1RMX1dLRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQVNXS0NUTDogV0tFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19QQVNXS0NUTF9XS0VOX01zayAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUEFTV0tDVExfV0tFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEFTV0tDVEw6IFdLRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QQVNXS0NUTF9QUldLRU5fUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEFTV0tDVEw6IFBSV0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfUEFTV0tDVExfUFJXS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BBU1dLQ1RMX1BSV0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBBU1dLQ1RMOiBQUldLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUEFTV0tDVExfUEZXS0VOX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBBU1dLQ1RMOiBQRldLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BBU1dLQ1RMX1BGV0tFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19QQVNXS0NUTF9QRldLRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQVNXS0NUTDogUEZXS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BBU1dLQ1RMX1dLUFNFTF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQVNXS0NUTDogV0tQU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19QQVNXS0NUTF9XS1BTRUxfTXNrICAgICAgICAgICgweGZ1bCA8PCBDTEtfUEFTV0tDVExfV0tQU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEFTV0tDVEw6IFdLUFNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QQVNXS0NUTF9EQkVOX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEFTV0tDVEw6IERCRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDTEtfUEFTV0tDVExfREJFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BBU1dLQ1RMX0RCRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBBU1dLQ1RMOiBEQkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUEJTV0tDVExfV0tFTl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBCU1dLQ1RMOiBXS0VOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BCU1dLQ1RMX1dLRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QQlNXS0NUTF9XS0VOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQlNXS0NUTDogV0tFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BCU1dLQ1RMX1BSV0tFTl9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQlNXS0NUTDogUFJXS0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19QQlNXS0NUTF9QUldLRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfUEJTV0tDVExfUFJXS0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEJTV0tDVEw6IFBSV0tFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QQlNXS0NUTF9QRldLRU5fUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEJTV0tDVEw6IFBGV0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfUEJTV0tDVExfUEZXS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BCU1dLQ1RMX1BGV0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBCU1dLQ1RMOiBQRldLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUEJTV0tDVExfV0tQU0VMX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBCU1dLQ1RMOiBXS1BTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BCU1dLQ1RMX1dLUFNFTF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IENMS19QQlNXS0NUTF9XS1BTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQlNXS0NUTDogV0tQU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BCU1dLQ1RMX0RCRU5fUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQlNXS0NUTDogREJFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19QQlNXS0NUTF9EQkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUEJTV0tDVExfREJFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEJTV0tDVEw6IERCRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QQ1NXS0NUTF9XS0VOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UENTV0tDVEw6IFdLRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDTEtfUENTV0tDVExfV0tFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BDU1dLQ1RMX1dLRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBDU1dLQ1RMOiBXS0VOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUENTV0tDVExfUFJXS0VOX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBDU1dLQ1RMOiBQUldLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BDU1dLQ1RMX1BSV0tFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19QQ1NXS0NUTF9QUldLRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQ1NXS0NUTDogUFJXS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BDU1dLQ1RMX1BGV0tFTl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQ1NXS0NUTDogUEZXS0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19QQ1NXS0NUTF9QRldLRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfUENTV0tDVExfUEZXS0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UENTV0tDVEw6IFBGV0tFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QQ1NXS0NUTF9XS1BTRUxfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UENTV0tDVEw6IFdLUFNFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfUENTV0tDVExfV0tQU0VMX01zayAgICAgICAgICAoMHhmdWwgPDwgQ0xLX1BDU1dLQ1RMX1dLUFNFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBDU1dLQ1RMOiBXS1BTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUENTV0tDVExfREJFTl9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBDU1dLQ1RMOiBEQkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BDU1dLQ1RMX0RCRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QQ1NXS0NUTF9EQkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQ1NXS0NUTDogREJFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BEU1dLQ1RMX1dLRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQRFNXS0NUTDogV0tFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19QRFNXS0NUTF9XS0VOX01zayAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUERTV0tDVExfV0tFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UERTV0tDVEw6IFdLRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QRFNXS0NUTF9QUldLRU5fUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UERTV0tDVEw6IFBSV0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfUERTV0tDVExfUFJXS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BEU1dLQ1RMX1BSV0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBEU1dLQ1RMOiBQUldLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUERTV0tDVExfUEZXS0VOX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBEU1dLQ1RMOiBQRldLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BEU1dLQ1RMX1BGV0tFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19QRFNXS0NUTF9QRldLRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQRFNXS0NUTDogUEZXS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BEU1dLQ1RMX1dLUFNFTF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQRFNXS0NUTDogV0tQU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19QRFNXS0NUTF9XS1BTRUxfTXNrICAgICAgICAgICgweGZ1bCA8PCBDTEtfUERTV0tDVExfV0tQU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UERTV0tDVEw6IFdLUFNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QRFNXS0NUTF9EQkVOX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UERTV0tDVEw6IERCRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDTEtfUERTV0tDVExfREJFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BEU1dLQ1RMX0RCRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBEU1dLQ1RMOiBEQkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfSU9QRENUTF9JT0hSX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OklPUERDVEw6IElPSFIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0lPUERDVExfSU9IUl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENMS19JT1BEQ1RMX0lPSFJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpJT1BEQ1RMOiBJT0hSIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0hYVEZTRUxfSFhURlNFTF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpIWFRGU0VMOiBIWFRGU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19IWFRGU0VMX0hYVEZTRUxfTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfSFhURlNFTF9IWFRGU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6SFhURlNFTDogSFhURlNFTCBNYXNrICAgICAgICAgICAqLworCisKKy8qKkB9Ki8gLyogQ0xLX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBDTEsgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKyNlbmRpZiAvKiBfX0NMS19SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvY3JjX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2NyY19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmViYmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2NyY19yZWcuaApAQCAtMCwwICsxLDE1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNyY19yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgQ1JDIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0NSQ19SRUdfSF9fCisjZGVmaW5lIF9fQ1JDX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDeWNsaWMgUmVkdW5kYW5jeSBDaGVjayBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgQ1JDIEN5Y2xpYyBSZWR1bmRhbmN5IENoZWNrIENvbnRyb2xsZXIoQ1JDKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBDUkMgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBDUkNfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDAwICBDUkMgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENSQ0VOICAgICB8Q1JDIENoYW5uZWwgR2VuZXJhdG9yIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgMSB0byBlbmFibGUgQ1JDIGdlbmVyYXRvciBmb3IgQ1JDIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDUkMgb3BlcmF0aW9uIGdlbmVyYXRvciBpcyBhY3RpdmUuCisgICAgICogfFsxXSAgICAgfENIS1NJTklUICB8Q2hlY2tzdW0gSW5pdGlhbGl6YXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgd2lsbCBhdXRvIHJlbG9hZCBTRUVEIChDUkNfU0VFRCBbMzE6MF0pIHRvIENIRUNLU1VNIChDUkNfQ0hFQ0tTVU1bMzE6MF0pIGFzIENSQyBvcGVyYXRpb24gaW5pdGlhbCB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWxvYWQgU0VFRCB2YWx1ZSB0byBDSEVDS1NVTSByZWdpc3RlciBhcyBDUkMgb3BlcmF0aW9uIGluaXRpYWwgY2hlY2tzdW0gdmFsdWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIG90aGVycyBjb250ZW50cyBvZiBDUkNfQ1RMIHJlZ2lzdGVyIHdpbGwgbm90IGJlIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFNldHRpbmcgdGhpcyBiaXQgd2lsbCByZWxvYWQgdGhlIHNlZWQgdmFsdWUgZnJvbSBDUkNfU0VFRCByZWdpc3RlciBhcyBjaGVja3N1bSBpbml0aWFsIHZhbHVlLgorICAgICAqIHxbMjRdICAgIHxEQVRSRVYgICAgfFdyaXRlIERhdGEgQml0IE9yZGVyIFJldmVyc2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBiaXQgb3JkZXIgcmV2ZXJzZSBmdW5jdGlvbiBwZXIgYnl0ZSBmb3Igd3JpdGUgZGF0YSB2YWx1ZSBEQVRBIChDUkNfREFUQVszMTowXSkgaW4gQ1JDX0RBVCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQml0IG9yZGVyIHJldmVyc2VkIGZvciBDUkNfREFUQSB3cml0ZSBkYXRhIGluIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCaXQgb3JkZXIgcmV2ZXJzZWQgZm9yIENSQ19EQVRBIHdyaXRlIGRhdGEgaW4gRW5hYmxlZCAocGVyIGJ5dGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIHRoZSB3cml0ZSBkYXRhIGlzIDB4QUFCQkNDREQsIHRoZSBiaXQgb3JkZXIgcmV2ZXJzZSBmb3IgQ1JDIHdyaXRlIGRhdGEgaW4gaXMgMHg1NUREMzNCQi4KKyAgICAgKiB8WzI1XSAgICB8Q0hLU1JFViAgIHxDaGVja3N1bSBCaXQgT3JkZXIgUmV2ZXJzZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIGJpdCBvcmRlciByZXZlcnNlIGZ1bmN0aW9uIGZvciBjaGVja3N1bSByZXN1bHQgQ0hFQ0tTVU0gKENSQ19DSEVDS1NVTVszMTowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJpdCBvcmRlciByZXZlcnNlIGZvciBDUkMgQ0hFQ0tTVU1DUkMgY2hlY2tzdW0gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJpdCBvcmRlciByZXZlcnNlIGZvciBDUkMgQ0hFQ0tTVU1DUkMgY2hlY2tzdW0gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiB0aGUgY2hlY2tzdW0gcmVzdWx0IGlzIDB4REQ3QjBGMkUsIHRoZSBiaXQgb3JkZXIgcmV2ZXJzZSByZXN1bHQgZm9yIENSQyBjaGVja3N1bSBpcyAweDc0RjBERUJCLgorICAgICAqIHxbMjZdICAgIHxEQVRGTVQgICAgfFdyaXRlIERhdGEgMSdzIENvbXBsZW1lbnQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gZW5hYmxlIHRoZSAxJ3MgY29tcGxlbWVudCBmdW5jdGlvbiBmb3Igd3JpdGUgZGF0YSB2YWx1ZSBEQVRBIChDUkNfREFUQVszMTowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDEncyBjb21wbGVtZW50IGZvciBDUkNfREFUQSB3cml0ZXMgZGF0YSBpbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMSdzIGNvbXBsZW1lbnQgZm9yIENSQ19EQVRBIHdyaXRlcyBkYXRhIGluIEVuYWJsZWQuCisgICAgICogfFsyN10gICAgfENIS1NGTVQgICB8Q2hlY2tzdW0gMSdzIENvbXBsZW1lbnQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gZW5hYmxlIHRoZSAxJ3MgY29tcGxlbWVudCBmdW5jdGlvbiBmb3IgY2hlY2tzdW0gcmVzdWx0IGluIENIRUNLU1VNIChDUkNfQ0hFQ0tTVU1bMzE6MF0pIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAxJ3MgY29tcGxlbWVudCBmb3IgQ1JDIENIRUNLU1VNIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSAxJ3MgY29tcGxlbWVudCBmb3IgQ1JDIENIRUNLU1VNQ1JDIEVuYWJsZWQuCisgICAgICogfFsyOToyOF0gfERBVExFTiAgICB8Q1BVIFdyaXRlIERhdGEgTGVuZ3RoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIHZhbGlkIHdyaXRlIGRhdGEgbGVuZ3RoIG9mIERBVEEgKENSQ19EQVRbMzE6MF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRGF0YSBsZW5ndGggaXMgOC1iaXQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IERhdGEgbGVuZ3RoIGlzIDE2LWJpdCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDF4ID0gRGF0YSBsZW5ndGggaXMgMzItYml0IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiB0aGUgd3JpdGUgZGF0YSBsZW5ndGggaXMgOC1iaXQgbW9kZSwgdGhlIHZhbGlkIGRhdGEgaW4gQ1JDX0RBVCByZWdpc3RlciBpcyBvbmx5IERBVEFbNzowXSBiaXRzOyBpZiB0aGUgd3JpdGUgZGF0YSBsZW5ndGggaXMgMTYtYml0IG1vZGUsIHRoZSB2YWxpZCBkYXRhIGluIENSQ19EQVQgcmVnaXN0ZXIgaXMgb25seSBEQVRBWzE1OjBdCisgICAgICogfFszMTozMF0gfENSQ01PREUgICB8Q1JDIFBvbHlub21pYWwgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBDUkMgb3BlcmF0aW9uIHBvbHlub21pYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENSQy1DQ0lUVCBQb2x5bm9taWFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDUkMtOCBQb2x5bm9taWFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDUkMtMTYgUG9seW5vbWlhbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ1JDLTMyIFBvbHlub21pYWwgbW9kZS4KKyAgICAgKiBAdmFyIENSQ19UOjpEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIENSQyBXcml0ZSBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REFUQSAgICAgIHxDUkMgV3JpdGUgRGF0YSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gd3JpdGUgZGF0YSBkaXJlY3RseSBieSBDUFUgbW9kZSBvciB1c2UgUERNQSBmdW5jdGlvbiB0byB3cml0ZSBkYXRhIHRvIHRoaXMgZmllbGQgdG8gcGVyZm9ybSBDUkMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gdGhlIHdyaXRlIGRhdGEgbGVuZ3RoIGlzIDgtYml0IG1vZGUsIHRoZSB2YWxpZCBkYXRhIGluIENSQ19EQVQgcmVnaXN0ZXIgaXMgb25seSBEQVRBWzc6MF0gYml0czsgaWYgdGhlIHdyaXRlIGRhdGEgbGVuZ3RoIGlzIDE2LWJpdCBtb2RlLCB0aGUgdmFsaWQgZGF0YSBpbiBDUkNfREFUIHJlZ2lzdGVyIGlzIG9ubHkgREFUQVsxNTowXS4KKyAgICAgKiBAdmFyIENSQ19UOjpTRUVECisgICAgICogT2Zmc2V0OiAweDA4ICBDUkMgU2VlZCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFNFRUQgICAgICB8Q1JDIFNlZWQgVmFsdWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgQ1JDIHNlZWQgdmFsdWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgZmllbGQgU0VFRCB2YWx1ZSB3aWxsIGJlIHJlbG9hZGVkIHRvIGFzIGNoZWNrc3VtIGluaXRpYWwgdmFsdWUgQ0hFQ0tTVU0gKENSQ19DSEVDS1NVTVszMTowXSkgcmVnaXN0ZXIpIGFmdGVyIHBlcmZvcm0gQ1JDIGVuZ2luZSByZXNldCwgQ0hLU0lOSVQgKENSQ19DVExbMV0pIHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoZSB2YWxpZCBiaXRzIG9mIENSQ19TRUVEWzMxOjBdIGlzIGNvcnJlbGF0ZWQgdG8gQ1JDTU9ERSAoQ1JDX0NUTFszMTozMF0pLgorICAgICAqIEB2YXIgQ1JDX1Q6OkNIRUNLU1VNCisgICAgICogT2Zmc2V0OiAweDBDICBDUkMgQ2hlY2tzdW0gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDSEVDS1NVTSAgfENSQyBDaGVja3N1bSBSZXN1bHRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIENSQyBjaGVja3N1bSByZXN1bHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIHZhbGlkIGJpdHMgb2YgQ1JDX0NIRUNLU1VNWzMxOjBdIGlzIGNvcnJlbGF0ZWQgdG8gQ1JDTU9ERSAoQ1JDX0NUTFszMTozMF0pLgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIENSQyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERBVDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBDUkMgV3JpdGUgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTRUVEOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gQ1JDIFNlZWQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQ0hFQ0tTVU07ICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIENSQyBDaGVja3N1bSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBDUkNfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgQ1JDX0NPTlNUIENSQyBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBDUkMgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBDUkNfQ1RMX0NSQ0VOX1BvcyAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkNUTDogQ1JDRU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JDX0NUTF9DUkNFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IENSQ19DVExfQ1JDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpDVEw6IENSQ0VOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JDX0NUTF9DSEtTSU5JVF9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpDVEw6IENIS1NJTklUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENSQ19DVExfQ0hLU0lOSVRfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDUkNfQ1RMX0NIS1NJTklUX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6Q1RMOiBDSEtTSU5JVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSQ19DVExfREFUUkVWX1BvcyAgICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6Q1RMOiBEQVRSRVYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBDUkNfQ1RMX0RBVFJFVl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgQ1JDX0NUTF9EQVRSRVZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkNUTDogREFUUkVWIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUkNfQ1RMX0NIS1NSRVZfUG9zICAgICAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkNUTDogQ0hLU1JFViBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JDX0NUTF9DSEtTUkVWX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IENSQ19DVExfQ0hLU1JFVl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpDVEw6IENIS1NSRVYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JDX0NUTF9EQVRGTVRfUG9zICAgICAgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpDVEw6IERBVEZNVCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIENSQ19DVExfREFURk1UX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBDUkNfQ1RMX0RBVEZNVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6Q1RMOiBEQVRGTVQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSQ19DVExfQ0hLU0ZNVF9Qb3MgICAgICAgICAgICAgICgyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6Q1RMOiBDSEtTRk1UIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBDUkNfQ1RMX0NIS1NGTVRfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgQ1JDX0NUTF9DSEtTRk1UX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkNUTDogQ0hLU0ZNVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUkNfQ1RMX0RBVExFTl9Qb3MgICAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkNUTDogREFUTEVOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JDX0NUTF9EQVRMRU5fTXNrICAgICAgICAgICAgICAgKDB4M3VsIDw8IENSQ19DVExfREFUTEVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpDVEw6IERBVExFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JDX0NUTF9DUkNNT0RFX1BvcyAgICAgICAgICAgICAgKDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpDVEw6IENSQ01PREUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIENSQ19DVExfQ1JDTU9ERV9Nc2sgICAgICAgICAgICAgICgweDN1bCA8PCBDUkNfQ1RMX0NSQ01PREVfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6Q1RMOiBDUkNNT0RFIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSQ19EQVRfREFUQV9Qb3MgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6REFUOiBEQVRBIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkNfREFUX0RBVEFfTXNrICAgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSQ19EQVRfREFUQV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkRBVDogREFUQSBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUkNfU0VFRF9TRUVEX1BvcyAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OlNFRUQ6IFNFRUQgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JDX1NFRURfU0VFRF9Nc2sgICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUkNfU0VFRF9TRUVEX1BvcykgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpTRUVEOiBTRUVEIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JDX0NIRUNLU1VNX0NIRUNLU1VNX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpDSEVDS1NVTTogQ0hFQ0tTVU0gUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSQ19DSEVDS1NVTV9DSEVDS1NVTV9Nc2sgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JDX0NIRUNLU1VNX0NIRUNLU1VNX1BvcykgICAgICAgLyohPCBDUkNfVDo6Q0hFQ0tTVU06IENIRUNLU1VNIE1hc2sgICAgICAgICAqLworCisvKipAfSovIC8qIENSQ19DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgQ1JDIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisjZW5kaWYgLyogX19DTEtfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2NycHRfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvY3JwdF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTY2NDhiCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2NycHRfcmVnLmgKQEAgLTAsMCArMSwyMTg5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY3JwdF9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgQ1JQVCByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19DUlBUX1JFR19IX18KKyNkZWZpbmUgX19DUlBUX1JFR19IX18KKworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENyeXB0b2dyYXBoaWMgQWNjZWxlcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBDUlBUIENyeXB0b2dyYXBoaWMgQWNjZWxlcmF0b3IoQ1JQVCkKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgQ1JQVCBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIENSUFRfVDo6SU5URU4KKyAgICAgKiBPZmZzZXQ6IDB4MDAgIENyeXB0byBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBRVNJRU4gICAgfEFFUyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQUVTIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUVTIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiBhbW91bnQgb2YgZGF0YSBzZXQgaW4gQUVTX0RNQV9DTlQgaXMgZmVkIGludG8gdGhlIEFFUyBlbmdpbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBtb2RlLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgQUVTIGVuZ2luZSBmaW5pc2hlcyB0aGUgb3BlcmF0aW9uLgorICAgICAqIHxbMV0gICAgIHxBRVNFSUVOICAgfEFFUyBFcnJvciBGbGFnIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFFUyBlcnJvciBpbnRlcnJ1cHQgZmxhZyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUVTIGVycm9yIGludGVycnVwdCBmbGFnIEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfFRERVNJRU4gICB8VERFUy9ERVMgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRERVMvREVTIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVERFUy9ERVMgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIGFuIGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGFtb3VudCBvZiBkYXRhIHNldCBpbiBUREVTX0RNQV9DTlQgaXMgZmVkIGludG8gdGhlIFRERVMgZW5naW5lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE5vbi1ETUEgbW9kZSwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIFRERVMgZW5naW5lIGZpbmlzaGVzIHRoZSBvcGVyYXRpb24uCisgICAgICogfFs5XSAgICAgfFRERVNFSUVOICB8VERFUy9ERVMgRXJyb3IgRmxhZyBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUREVTL0RFUyBlcnJvciBpbnRlcnJ1cHQgZmxhZyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVERFUy9ERVMgZXJyb3IgaW50ZXJydXB0IGZsYWcgRW5hYmxlZC4KKyAgICAgKiB8WzE2XSAgICB8UFJOR0lFTiAgIHxQUk5HIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQUk5HIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFJORyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzIyXSAgICB8RUNDSUVOICAgIHxFQ0MgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVDQyBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVDQyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYW1vdW50IG9mIGRhdGEgc2V0IGluIEVDQ19ETUFfQ05UIGlzIGZlZCBpbnRvIHRoZSBFQ0MgZW5naW5lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE5vbi1ETUEgbW9kZSwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIEVDQyBlbmdpbmUgZmluaXNoZXMgdGhlIG9wZXJhdGlvbi4KKyAgICAgKiB8WzIzXSAgICB8RUNDRUlFTiAgIHxFQ0MgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVDQyBlcnJvciBpbnRlcnJ1cHQgZmxhZyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUNDIGVycm9yIGludGVycnVwdCBmbGFnIEVuYWJsZWQuCisgICAgICogfFsyNF0gICAgfEhNQUNJRU4gICB8U0hBL0hNQUMgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNIQS9ITUFDIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0hBL0hNQUMgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIGFuIGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGFtb3VudCBvZiBkYXRhIHNldCBpbiBTSEEgX0RNQV9DTlQgaXMgZmVkIGludG8gdGhlIFNIQS9ITUFDIGVuZ2luZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE5vbi1ETUEgbW9kZSwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIFNIQS9ITUFDIGVuZ2luZSBmaW5pc2hlcyB0aGUgb3BlcmF0aW9uLgorICAgICAqIHxbMjVdICAgIHxITUFDRUlFTiAgfFNIQS9ITUFDIEVycm9yIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTSEEvSE1BQyBlcnJvciBpbnRlcnJ1cHQgZmxhZyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0hBL0hNQUMgZXJyb3IgaW50ZXJydXB0IGZsYWcgRW5hYmxlZC4KKyAgICAgKiBAdmFyIENSUFRfVDo6SU5UU1RTCisgICAgICogT2Zmc2V0OiAweDA0ICBDcnlwdG8gSW50ZXJydXB0IEZsYWcKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBRVNJRiAgICAgfEFFUyBGaW5pc2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSwgYW5kIGl0IGhhcyBubyBlZmZlY3QgYnkgd3JpdGluZyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBBRVMgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGRvbmUgaW50ZXJydXB0LgorICAgICAqIHxbMV0gICAgIHxBRVNFSUYgICAgfEFFUyBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEsIGFuZCBpdCBoYXMgbm8gZWZmZWN0IGJ5IHdyaXRpbmcgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQUVTIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGRvbmUgaW50ZXJydXB0LgorICAgICAqIHxbOF0gICAgIHxUREVTSUYgICAgfFRERVMvREVTIEZpbmlzaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxLCBhbmQgaXQgaGFzIG5vIGVmZmVjdCBieSB3cml0aW5nIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFRERVMvREVTIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVERFUy9ERVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGRvbmUgaW50ZXJydXB0LgorICAgICAqIHxbOV0gICAgIHxUREVTRUlGICAgfFRERVMvREVTIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmNsdWRlcyB0aGUgb3BlcmF0aW5nIGFuZCBzZXR0aW5nIGVycm9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRldGFpbGVkIGZsYWcgaXMgc2hvd24gaW4gdGhlIFRERVMgX0ZMQUcgcmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGluY2x1ZGVzIG9wZXJhdGluZyBhbmQgc2V0dGluZyBlcnJvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSwgYW5kIGl0IGhhcyBubyBlZmZlY3QgYnkgd3JpdGluZyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBUREVTL0RFUyBlcnJvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVERFUy9ERVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGVycm9yIGludGVycnVwdC4KKyAgICAgKiB8WzE2XSAgICB8UFJOR0lGICAgIHxQUk5HIEZpbmlzaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxLCBhbmQgaXQgaGFzIG5vIGVmZmVjdCBieSB3cml0aW5nIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFBSTkcgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQUk5HIGtleSBnZW5lcmF0aW9uIGRvbmUgaW50ZXJydXB0LgorICAgICAqIHxbMjJdICAgIHxFQ0NJRiAgICAgfEVDQyBGaW5pc2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSwgYW5kIGl0IGhhcyBubyBlZmZlY3QgYnkgd3JpdGluZyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBFQ0MgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQ0Mgb3BlcmF0aW9uIGRvbmUgaW50ZXJydXB0LgorICAgICAqIHxbMjNdICAgIHxFQ0NFSUYgICAgfEVDQyBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyByZWdpc3RlciBpbmNsdWRlcyBvcGVyYXRpbmcgYW5kIHNldHRpbmcgZXJyb3IuIFRoZSBkZXRhaWwgZmxhZyBpcyBzaG93biBpbiBFQ0MgX0ZMQUcgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEsIGFuZCBpdCBoYXMgbm8gZWZmZWN0IGJ5IHdyaXRpbmcgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gRUNDIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQ0MgZXJyb3IgaW50ZXJydXB0LgorICAgICAqIHxbMjRdICAgIHxITUFDSUYgICAgfFNIQS9ITUFDIEZpbmlzaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxLCBhbmQgaXQgaGFzIG5vIGVmZmVjdCBieSB3cml0aW5nIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFNIQS9ITUFDIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0hBL0hNQUMgb3BlcmF0aW9uIGRvbmUgaW50ZXJydXB0LgorICAgICAqIHxbMjVdICAgIHxITUFDRUlGICAgfFNIQS9ITUFDIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGluY2x1ZGVzIG9wZXJhdGluZyBhbmQgc2V0dGluZyBlcnJvci4gVGhlIGRldGFpbCBmbGFnIGlzIHNob3duIGluIFNIQSBfRkxBRyByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSwgYW5kIGl0IGhhcyBubyBlZmZlY3QgYnkgd3JpdGluZyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBTSEEvSE1BQyBlcnJvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0hBL0hNQUMgZXJyb3IgaW50ZXJydXB0LgorICAgICAqIEB2YXIgQ1JQVF9UOjpQUk5HX0NUTAorICAgICAqIE9mZnNldDogMHgwOCAgUFJORyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1RBUlQgICAgIHxTdGFydCBQUk5HIEVuZ2luZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTdG9wIFBSTkcgZW5naW5lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHZW5lcmF0ZSBuZXcga2V5IGFuZCBzdG9yZSB0aGUgbmV3IGtleSB0byByZWdpc3RlciBDUlBUX1BSTkdfS0VZeCAsIHdoaWNoIHdpbGwgYmUgY2xlYXJlZCB3aGVuIHRoZSBuZXcga2V5IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8WzFdICAgICB8U0VFRFJMRCAgIHxSZWxvYWQgTmV3IFNlZWQgZm9yIFBSTkcgRW5naW5lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdlbmVyYXRpbmcga2V5IGJhc2VkIG9uIHRoZSBjdXJyZW50IHNlZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlbG9hZCBuZXcgc2VlZC4KKyAgICAgKiB8WzM6Ml0gICB8S0VZU1ogICAgIHxQUk5HIEdlbmVyYXRlIEtleSBTaXplCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSA2NCBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gMTI4IGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSAxOTIgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IDI1NiBiaXRzLgorICAgICAqIHxbOF0gICAgIHxCVVNZICAgICAgfFBSTkcgQnVzeSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQUk5HIGVuZ2luZSBpcyBpZGxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZSB0aGF0IHRoZSBQUk5HIGVuZ2luZSBpcyBnZW5lcmF0aW5nIENSUFRfUFJOR19LRVl4LgorICAgICAqIEB2YXIgQ1JQVF9UOjpQUk5HX1NFRUQKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIFNlZWQgZm9yIFBSTkcKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTRUVEICAgICAgfFNlZWQgZm9yIFBSTkcgKFdyaXRlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGJpdHMgc3RvcmUgdGhlIHNlZWQgZm9yIFBSTkcgZW5naW5lLgorICAgICAqIEB2YXIgQ1JQVF9UOjpQUk5HX0tFWVs4XQorICAgICAqIE9mZnNldDogMHgxMCAgUFJORyBHZW5lcmF0ZWQgS2V5MH5LZXk3CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxTdG9yZSBQUk5HIEdlbmVyYXRlZCBLZXkgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYml0cyBzdG9yZSB0aGUga2V5IHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IFBSTkcuCisgICAgICogQHZhciBDUlBUX1Q6OkFFU19GREJDS1s0XQorICAgICAqIE9mZnNldDogMHg1MCAgQUVTIEVuZ2luZSBPdXRwdXQgRmVlZGJhY2sgRGF0YSBhZnRlciBDcnlwdG9ncmFwaGljIE9wZXJhdGlvbgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEZEQkNLICAgICB8QUVTIEZlZWRiYWNrIEluZm9ybWF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZlZWRiYWNrIHZhbHVlIGlzIDEyOCBiaXRzIGluIHNpemUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFFUyBlbmdpbmUgdXNlcyB0aGUgZGF0YSBmcm9tIENSUFRfQUVTX0ZEQkNLeCBhcyB0aGUgZGF0YSBpbnB1dHRlZCB0byBDUlBUX0FFU25fSVZ4IGZvciB0aGUgbmV4dCBibG9jayBpbiBETUEgY2FzY2FkZSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBBRVMgZW5naW5lIG91dHB1dHMgZmVlZGJhY2sgaW5mb3JtYXRpb24gZm9yIElWIGluIHRoZSBuZXh0IGJsb2NrJ3Mgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgY2FuIHVzZSB0aGlzIGZlZWRiYWNrIGluZm9ybWF0aW9uIHRvIGltcGxlbWVudCBtb3JlIHRoYW4gZm91ciBETUEgY2hhbm5lbHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gc3RvcmUgdGhhdCBmZWVkYmFjayB2YWx1ZSB0ZW1wb3JhcmlseQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFmdGVyIHN3aXRjaGluZyBiYWNrLCBmaWxsIHRoZSBzdG9yZWQgZmVlZGJhY2sgdmFsdWUgdG8gdGhpcyByZWdpc3RlciBpbiB0aGUgc2FtZSBjaGFubmVsIG9wZXJhdGlvbiwgYW5kIHRoZW4gY29udGludWUgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZSBvcmlnaW5hbCBzZXR0aW5nLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTX0ZEQkNLSAorICAgICAqIE9mZnNldDogMHg2MCAgVERFUy9ERVMgRW5naW5lIE91dHB1dCBGZWVkYmFjayBIaWdoIFdvcmQgRGF0YSBhZnRlciBDcnlwdG9ncmFwaGljIE9wZXJhdGlvbgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEZEQkNLICAgICB8VERFUy9ERVMgRmVlZGJhY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZmVlZGJhY2sgdmFsdWUgaXMgNjQgYml0cyBpbiBzaXplLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBUREVTL0RFUyBlbmdpbmUgdXNlcyB0aGUgZGF0YSBmcm9tIHtDUlBUX1RERVNfRkRCQ0tILCBDUlBUX1RERVNfRkRCQ0tMfSBhcyB0aGUgZGF0YSBpbnB1dHRlZCB0byB7Q1JQVF9UREVTbl9JVkgsIENSUFRfVERFU25fSVZMfSBmb3IgdGhlIG5leHQgYmxvY2sgaW4gRE1BIGNhc2NhZGUgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmZWVkYmFjayByZWdpc3RlciBpcyBmb3IgQ0JDLCBDRkIsIGFuZCBPRkIgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUREVTL0RFUyBlbmdpbmUgb3V0cHV0cyBmZWVkYmFjayBpbmZvcm1hdGlvbiBmb3IgSVYgaW4gdGhlIG5leHQgYmxvY2sncyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gdXNlIHRoaXMgZmVlZGJhY2sgaW5mb3JtYXRpb24gdG8gaW1wbGVtZW50IG1vcmUgdGhhbiBmb3VyIERNQSBjaGFubmVscworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbiBzdG9yZSB0aGF0IGZlZWRiYWNrIHZhbHVlIHRlbXBvcmFyaWx5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWZ0ZXIgc3dpdGNoaW5nIGJhY2ssIGZpbGwgdGhlIHN0b3JlZCBmZWVkYmFjayB2YWx1ZSB0byB0aGlzIHJlZ2lzdGVyIGluIHRoZSBzYW1lIGNoYW5uZWwgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlbiBjYW4gY29udGludWUgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZSBvcmlnaW5hbCBzZXR0aW5nLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTX0ZEQkNLTAorICAgICAqIE9mZnNldDogMHg2NCAgVERFUy9ERVMgRW5naW5lIE91dHB1dCBGZWVkYmFjayBMb3cgV29yZCBEYXRhIGFmdGVyIENyeXB0b2dyYXBoaWMgT3BlcmF0aW9uCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8RkRCQ0sgICAgIHxUREVTL0RFUyBGZWVkYmFjaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmZWVkYmFjayB2YWx1ZSBpcyA2NCBiaXRzIGluIHNpemUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFRERVMvREVTIGVuZ2luZSB1c2VzIHRoZSBkYXRhIGZyb20ge0NSUFRfVERFU19GREJDS0gsIENSUFRfVERFU19GREJDS0x9IGFzIHRoZSBkYXRhIGlucHV0dGVkIHRvIHtDUlBUX1RERVNuX0lWSCwgQ1JQVF9UREVTbl9JVkx9IGZvciB0aGUgbmV4dCBibG9jayBpbiBETUEgY2FzY2FkZSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZlZWRiYWNrIHJlZ2lzdGVyIGlzIGZvciBDQkMsIENGQiwgYW5kIE9GQiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRERVMvREVTIGVuZ2luZSBvdXRwdXRzIGZlZWRiYWNrIGluZm9ybWF0aW9uIGZvciBJViBpbiB0aGUgbmV4dCBibG9jaydzIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbiB1c2UgdGhpcyBmZWVkYmFjayBpbmZvcm1hdGlvbiB0byBpbXBsZW1lbnQgbW9yZSB0aGFuIGZvdXIgRE1BIGNoYW5uZWxzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgY2FuIHN0b3JlIHRoYXQgZmVlZGJhY2sgdmFsdWUgdGVtcG9yYXJpbHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBZnRlciBzd2l0Y2hpbmcgYmFjaywgZmlsbCB0aGUgc3RvcmVkIGZlZWRiYWNrIHZhbHVlIHRvIHRoaXMgcmVnaXN0ZXIgaW4gdGhlIHNhbWUgY2hhbm5lbCBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVuIGNhbiBjb250aW51ZSB0aGUgb3BlcmF0aW9uIHdpdGggdGhlIG9yaWdpbmFsIHNldHRpbmcuCisgICAgICogQHZhciBDUlBUX1Q6OkFFU19DVEwKKyAgICAgKiBPZmZzZXQ6IDB4MTAwICBBRVMgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNUQVJUICAgICB8QUVTIEVuZ2luZSBTdGFydAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0YXJ0IEFFUyBlbmdpbmUuIEJVU1kgZmxhZyB3aWxsIGJlIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBhbHdheXMgMCB3aGVuIGl0J3MgcmVhZCBiYWNrLgorICAgICAqIHxbMV0gICAgIHxTVE9QICAgICAgfEFFUyBFbmdpbmUgU3RvcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0b3AgQUVTIGVuZ2luZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBhbHdheXMgMCB3aGVuIGl0J3MgcmVhZCBiYWNrLgorICAgICAqIHxbMzoyXSAgIHxLRVlTWiAgICAgfEFFUyBLZXkgU2l6ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgdGhyZWUgZGlmZmVyZW50IGtleSBzaXplIGZvciBBRVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDInYjAwID0gMTI4IGJpdHMga2V5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDInYjAxID0gMTkyIGJpdHMga2V5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDInYjEwID0gMjU2IGJpdHMga2V5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDInYjExID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIEFFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcgQlVTWSBpcyAxLCB1cGRhdGluZyB0aGlzIHJlZ2lzdGVyIGhhcyBubyBlZmZlY3QuCisgICAgICogfFs1XSAgICAgfERNQUxBU1QgICB8QUVTIExhc3QgQmxvY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgdGhpcyBiaXQgbXVzdCBiZSBzZXQgYXMgYmVnaW5uaW5nIHRoZSBsYXN0IERNQSBjYXNjYWRlIHJvdW5kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE5vbi1ETUEgbW9kZSwgdGhpcyBiaXQgbXVzdCBiZSBzZXQgd2hlbiBmZWVkaW5nIGluIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEgaW4gRUNCLCBDQkMsIENUUiwgT0ZCLCBhbmQgQ0ZCIG1vZGUsIGFuZCBmZWVkaW5nIGluIHRoZSAobGFzdC0xKSBibG9jayBvZiBkYXRhIGF0IENCQy1DUzEsIENCQy1DUzIsIGFuZCBDQkMtQ1MzIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgYWx3YXlzIDAgd2hlbiBpdCdzIHJlYWQgYmFjay4gTXVzdCBiZSB3cml0dGVuIGFnYWluIG9uY2UgU1RBUlQgaXMgdHJpZ2dlcmVkLgorICAgICAqIHxbNl0gICAgIHxETUFDU0NBRCAgfEFFUyBFbmdpbmUgRE1BIHdpdGggQ2FzY2FkZSBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERNQSBjYXNjYWRlIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbiBETUEgY2FzY2FkZSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIERNQSBzb3VyY2UgYWRkcmVzcyByZWdpc3RlciwgZGVzdGluYXRpb24gYWRkcmVzcyByZWdpc3RlciwgYW5kIGJ5dGUgY291bnQgcmVnaXN0ZXIgZHVyaW5nIGEgY2FzY2FkZSBvcGVyYXRpb24sIHdpdGhvdXQgZmluaXNoaW5nIHRoZSBhY2NlbGVyYXRvciBvcGVyYXRpb24uCisgICAgICogfFs3XSAgICAgfERNQUVOICAgICB8QUVTIEVuZ2luZSBETUEgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQUVTIERNQSBlbmdpbmUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFFUyBlbmdpbmUgb3BlcmF0ZXMgaW4gTm9uLURNQSBtb2RlLCBhbmQgZ2V0cyBkYXRhIGZyb20gdGhlIHBvcnQgQ1JQVF9BRVNfREFUSU4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFFU19ETUEgZW5naW5lIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFFUyBlbmdpbmUgb3BlcmF0ZXMgaW4gRE1BIG1vZGUsIGFuZCBkYXRhIG1vdmVtZW50IGZyb20vdG8gdGhlIGVuZ2luZSBpcyBkb25lIGJ5IERNQSBsb2dpYy4KKyAgICAgKiB8WzE1OjhdICB8T1BNT0RFICAgIHxBRVMgRW5naW5lIE9wZXJhdGlvbiBNb2RlcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDAgPSBFQ0IgKEVsZWN0cm9uaWMgQ29kZWJvb2sgTW9kZSkgIDB4MDEgPSBDQkMgKENpcGhlciBCbG9jayBDaGFpbmluZyBNb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAyID0gQ0ZCIChDaXBoZXIgRmVlZGJhY2sgTW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwMyA9IE9GQiAoT3V0cHV0IEZlZWRiYWNrIE1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDQgPSBDVFIgKENvdW50ZXIgTW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgxMCA9IENCQy1DUzEgKENCQyBDaXBoZXJ0ZXh0LVN0ZWFsaW5nIDEgTW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgxMSA9IENCQy1DUzIgKENCQyBDaXBoZXJ0ZXh0LVN0ZWFsaW5nIDIgTW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgxMiA9IENCQy1DUzMgKENCQyBDaXBoZXJ0ZXh0LVN0ZWFsaW5nIDMgTW9kZSkuCisgICAgICogfFsxNl0gICAgfEVOQ1JQVCAgICB8QUVTIEVuY3J5cHRpb24vRGVjcnlwdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBRVMgZW5naW5lIGV4ZWN1dGVzIGRlY3J5cHRpb24gb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRVMgZW5naW5lIGV4ZWN1dGVzIGVuY3J5cHRpb24gb3BlcmF0aW9uLgorICAgICAqIHxbMjJdICAgIHxPVVRTV0FQICAgfEFFUyBFbmdpbmUgT3V0cHV0IERhdGEgU3dhcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBLZWVwIHRoZSBvcmlnaW5hbCBvcmRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIG9yZGVyIHRoYXQgQ1BVIG91dHB1dHMgZGF0YSBmcm9tIHRoZSBhY2NlbGVyYXRvciB3aWxsIGJlIGNoYW5nZWQgZnJvbSB7Ynl0ZTMsIGJ5dGUyLCBieXRlMSwgYnl0ZTB9IHRvIHtieXRlMCwgYnl0ZTEsIGJ5dGUyLCBieXRlM30uCisgICAgICogfFsyM10gICAgfElOU1dBUCAgICB8QUVTIEVuZ2luZSBJbnB1dCBEYXRhIFN3YXAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gS2VlcCB0aGUgb3JpZ2luYWwgb3JkZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBvcmRlciB0aGF0IENQVSBmZWVkcyBkYXRhIHRvIHRoZSBhY2NlbGVyYXRvciB3aWxsIGJlIGNoYW5nZWQgZnJvbSB7Ynl0ZTMsIGJ5dGUyLCBieXRlMSwgYnl0ZTB9IHRvIHtieXRlMCwgYnl0ZTEsIGJ5dGUyLCBieXRlM30uCisgICAgICogfFsyNToyNF0gfENIQU5ORUwgICB8QUVTIEVuZ2luZSBXb3JraW5nIENoYW5uZWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IEN1cnJlbnQgY29udHJvbCByZWdpc3RlciBzZXR0aW5nIGlzIGZvciBjaGFubmVsIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDdXJyZW50IGNvbnRyb2wgcmVnaXN0ZXIgc2V0dGluZyBpcyBmb3IgY2hhbm5lbCAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ3VycmVudCBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmcgaXMgZm9yIGNoYW5uZWwgMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEN1cnJlbnQgY29udHJvbCByZWdpc3RlciBzZXR0aW5nIGlzIGZvciBjaGFubmVsIDMuCisgICAgICogfFszMDoyNl0gfEtFWVVOUFJUICB8VW5wcm90ZWN0IEtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgMCB0byBDUlBUX0FFU19DVExbMzFdIGFuZCAuLi4xMDExMCB0byBDUlBUX0FFU19DVExbMzA6MjZdIGlzIHRvIHVucHJvdGVjdCB0aGUgQUVTIGtleS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgS0VZVU5QUlQgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGl0IGlzIHdyaXR0ZW4gYXMgdGhlIEFFUyBlbmdpbmUgaXMgb3BlcmF0aW5nLCBCVVNZIGZsYWcgaXMgMSwgdGhlcmUgd291bGQgYmUgbm8gZWZmZWN0IG9uIEtFWVVOUFJULgorICAgICAqIHxbMzFdICAgIHxLRVlQUlQgICAgfFByb3RlY3QgS2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBhcyBhIGZsYWcgdG8gcmVmbGVjdCBLRVlQUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUHJvdGVjdCB0aGUgY29udGVudCBvZiB0aGUgQUVTIGtleSBmcm9tIHJlYWRpbmcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmV0dXJuIHZhbHVlIGZvciByZWFkaW5nIENSUFRfQUVTbl9LRVl4IGlzIG5vdCB0aGUgY29udGVudCBvZiB0aGUgcmVnaXN0ZXJzIENSUFRfQUVTbl9LRVl4CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25jZSBpdCBpcyBzZXQsIGl0IGNhbiBiZSBjbGVhcmVkIGJ5IGFzc2VydGluZyBLRVlVTlBSVAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFuZCB0aGUga2V5IGNvbnRlbnQgd291bGQgYmUgY2xlYXJlZCBhcyB3ZWxsLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVNfU1RTCisgICAgICogT2Zmc2V0OiAweDEwNCAgQUVTIEVuZ2luZSBGbGFnCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlVTWSAgICAgIHxBRVMgRW5naW5lIEJ1c3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIEFFUyBlbmdpbmUgaXMgaWRsZSBvciBmaW5pc2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIEFFUyBlbmdpbmUgaXMgdW5kZXIgcHJvY2Vzc2luZy4KKyAgICAgKiB8WzhdICAgICB8SU5CVUZFTVBUWXxBRVMgSW5wdXQgQnVmZmVyIEVtcHR5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZXJlIGFyZSBzb21lIGRhdGEgaW4gaW5wdXQgYnVmZmVyIHdhaXRpbmcgZm9yIHRoZSBBRVMgZW5naW5lIHRvIHByb2Nlc3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFFUyBpbnB1dCBidWZmZXIgaXMgZW1wdHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBuZWVkcyB0byBmZWVkIGRhdGEgdG8gdGhlIEFFUyBlbmdpbmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcndpc2UsIHRoZSBBRVMgZW5naW5lIHdpbGwgYmUgcGVuZGluZyB0byB3YWl0IGZvciBpbnB1dCBkYXRhLgorICAgICAqIHxbOV0gICAgIHxJTkJVRkZVTEwgfEFFUyBJbnB1dCBCdWZmZXIgRnVsbCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFFUyBpbnB1dCBidWZmZXIgaXMgbm90IGZ1bGwuIFNvZnR3YXJlIGNhbiBmZWVkIHRoZSBkYXRhIGludG8gdGhlIEFFUyBlbmdpbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFFUyBpbnB1dCBidWZmZXIgaXMgZnVsbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbm5vdCBmZWVkIGRhdGEgdG8gdGhlIEFFUyBlbmdpbmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcndpc2UsIHRoZSBmbGFnIElOQlVGRVJSIHdpbGwgYmUgc2V0IHRvIDEuCisgICAgICogfFsxMF0gICAgfElOQlVGRVJSICB8QUVTIElucHV0IEJ1ZmZlciBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFcnJvciBoYXBwZW5zIGR1cmluZyBmZWVkaW5nIGRhdGEgdG8gdGhlIEFFUyBlbmdpbmUuCisgICAgICogfFsxMl0gICAgfENOVEVSUiAgICB8Q1JQVF9BRVNuX0NOVCBTZXR0aW5nIEVycm9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVycm9yIGluIENSUFRfQUVTbl9DTlQgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ1JQVF9BRVNuX0NOVCBpcyBub3QgYSBtdWx0aXBseSBvZiAxNiBpbiBFQ0IsIENCQywgQ0ZCLCBPRkIsIGFuZCBDVFIgbW9kZS4KKyAgICAgKiB8WzE2XSAgICB8T1VUQlVGRU1QVFl8QUVTIE91dCBCdWZmZXIgRW1wdHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQUVTIG91dHB1dCBidWZmZXIgaXMgbm90IGVtcHR5LiBUaGVyZSBhcmUgc29tZSB2YWxpZCBkYXRhIGtlcHQgaW4gb3V0cHV0IGJ1ZmZlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUVTIG91dHB1dCBidWZmZXIgaXMgZW1wdHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW5ub3QgZ2V0IGRhdGEgZnJvbSBDUlBUX0FFU19EQVRPVVQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcndpc2UsIHRoZSBmbGFnIE9VVEJVRkVSUiB3aWxsIGJlIHNldCB0byAxIHNpbmNlIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGVtcHR5LgorICAgICAqIHxbMTddICAgIHxPVVRCVUZGVUxMfEFFUyBPdXQgQnVmZmVyIEZ1bGwgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBRVMgb3V0cHV0IGJ1ZmZlciBpcyBub3QgZnVsbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUVTIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgYW5kIHNvZnR3YXJlIG5lZWRzIHRvIGdldCBkYXRhIGZyb20gQ1JQVF9BRVNfREFUT1VUCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJ3aXNlLCB0aGUgQUVTIGVuZ2luZSB3aWxsIGJlIHBlbmRpbmcgc2luY2UgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbC4KKyAgICAgKiB8WzE4XSAgICB8T1VUQlVGRVJSIHxBRVMgT3V0IEJ1ZmZlciBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFcnJvciBoYXBwZW5zIGR1cmluZyBnZXR0aW5nIHRoZSByZXN1bHQgZnJvbSBBRVMgZW5naW5lLgorICAgICAqIHxbMjBdICAgIHxCVVNFUlIgICAgfEFFUyBETUEgQWNjZXNzIEJ1cyBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCdXMgZXJyb3Igd2lsbCBzdG9wIERNQSBvcGVyYXRpb24gYW5kIEFFUyBlbmdpbmUuCisgICAgICogQHZhciBDUlBUX1Q6OkFFU19EQVRJTgorICAgICAqIE9mZnNldDogMHgxMDggIEFFUyBFbmdpbmUgRGF0YSBJbnB1dCBQb3J0IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REFUSU4gICAgIHxBRVMgRW5naW5lIElucHV0IFBvcnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUFUgZmVlZHMgZGF0YSB0byBBRVMgZW5naW5lIHRocm91Z2ggdGhpcyBwb3J0IGJ5IGNoZWNraW5nIENSUFRfQUVTX1NUUy4gRmVlZCBkYXRhIGFzIElOQlVGRlVMTCBpcyAwLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVNfREFUT1VUCisgICAgICogT2Zmc2V0OiAweDEwQyAgQUVTIEVuZ2luZSBEYXRhIE91dHB1dCBQb3J0IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REFUT1VUICAgIHxBRVMgRW5naW5lIE91dHB1dCBQb3J0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1BVIGdldHMgcmVzdWx0cyBmcm9tIHRoZSBBRVMgZW5naW5lIHRocm91Z2ggdGhpcyBwb3J0IGJ5IGNoZWNraW5nIENSUFRfQUVTX1NUUworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEdldCBkYXRhIGFzIE9VVEJVRkVNUFRZIGlzIDAuCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzBfS0VZWzhdCisgICAgICogT2Zmc2V0OiAweDExMH4weDEyQyAgQUVTIEtleSBXb3JkIDB+NyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxDUlBUX0FFU25fS0VZeAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBLRVkga2VlcHMgdGhlIHNlY3VyaXR5IGtleSBmb3IgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxuID0gMCwgMS4uMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx4ID0gMCwgMS4uNy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciBBRVMgYWNjZWxlcmF0b3IgY2FuIGJlIDEyOCwgMTkyLCBvciAyNTYgYml0cyBhbmQgZm91ciwgc2l4LCBvciBlaWdodCAzMi1iaXQgcmVnaXN0ZXJzIGFyZSB0byBzdG9yZSBlYWNoIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHtDUlBUX0FFU25fS0VZMywgQ1JQVF9BRVNuX0tFWTIsIENSUFRfQUVTbl9LRVkxLCBDUlBUX0FFU25fS0VZMH0gc3RvcmVzIHRoZSAxMjgtYml0IHNlY3VyaXR5IGtleSBmb3IgQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHtDUlBUX0FFU25fS0VZNSwgQ1JQVF9BRVNuX0tFWTQsIENSUFRfQUVTbl9LRVkzLCBDUlBUX0FFU25fS0VZMiwgQ1JQVF9BRVNuX0tFWTEsIENSUFRfQUVTbl9LRVkwfSBzdG9yZXMgdGhlIDE5Mi1iaXQgc2VjdXJpdHkga2V5IGZvciBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8e0NSUFRfQUVTbl9LRVk3LCBDUlBUX0FFU25fS0VZNiwgQ1JQVF9BRVNuX0tFWTUsIENSUFRfQUVTbl9LRVk0LCBDUlBUX0FFU25fS0VZMywgQ1JQVF9BRVNuX0tFWTIsIENSUFRfQUVTbl9LRVkxLCBDUlBUX0FFU25fS0VZMH0gc3RvcmVzIHRoZSAyNTYtYml0IHNlY3VyaXR5IGtleSBmb3IgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTMF9JVls0XQorICAgICAqIE9mZnNldDogMHgxMzB+MHgxM0MgIEFFUyBJbml0aWFsIFZlY3RvciBXb3JkIDB+MyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVYgICAgICAgIHxBRVMgSW5pdGlhbCBWZWN0b3JzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8biA9IDAsIDEuLjMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8eCA9IDAsIDEuLjMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm91ciBpbml0aWFsIHZlY3RvcnMgKENSUFRfQUVTbl9JVjAsIENSUFRfQUVTbl9JVjEsIENSUFRfQUVTbl9JVjIsIGFuZCBDUlBUX0FFU25fSVYzKSBhcmUgZm9yIEFFUyBvcGVyYXRpbmcgaW4gQ0JDLCBDRkIsIGFuZCBPRkIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvdXIgcmVnaXN0ZXJzIChDUlBUX0FFU25fSVYwLCBDUlBUX0FFU25fSVYxLCBDUlBUX0FFU25fSVYyLCBhbmQgQ1JQVF9BRVNuX0lWMykgYWN0IGFzIE5vbmNlIGNvdW50ZXIgd2hlbiB0aGUgQUVTIGVuZ2luZSBpcyBvcGVyYXRpbmcgaW4gQ1RSIG1vZGUuCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzBfU0FERFIKKyAgICAgKiBPZmZzZXQ6IDB4MTQwICBBRVMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTQUREUiAgICAgfEFFUyBETUEgU291cmNlIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQUVTIGFjY2VsZXJhdG9yIHN1cHBvcnRzIERNQSBmdW5jdGlvbiB0byB0cmFuc2ZlciB0aGUgcGxhaW4gdGV4dCBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIGVtYmVkZGVkIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgU0FERFIga2VlcHMgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgc291cmNlIHRleHQgaXMgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIHNvdXJjZSBhZGRyZXNzLCB0aGUgQUVTIGFjY2VsZXJhdG9yIGNhbiByZWFkIHRoZSBwbGFpbiB0ZXh0IGZyb20gc3lzdGVtIG1lbW9yeSBhbmQgZG8gQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBzb3VyY2UgYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIFNBRERSIGFyZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNBRERSIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBTQUREUiB3aGlsZSB0aGUgQUVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBTQUREUiB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBETUEgc291cmNlIGFkZHJlc3MgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgdGhlIG5leHQgQ1JQVF9BRVNuX1NBRERSIGJlZm9yZSB0cmlnZ2VyaW5nIFNUQVJULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWx1ZSBvZiBDUlBUX0FFU25fU0FERFIgYW5kIENSUFRfQUVTbl9EQUREUiBjYW4gYmUgdGhlIHNhbWUuCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzBfREFERFIKKyAgICAgKiBPZmZzZXQ6IDB4MTQ0ICBBRVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfERBRERSICAgICB8QUVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFFUyBhY2NlbGVyYXRvciBzdXBwb3J0cyBETUEgZnVuY3Rpb24gdG8gdHJhbnNmZXIgdGhlIGNpcGhlciB0ZXh0IGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgZW1iZWRkZWQgRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBEQUREUiBrZWVwcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIgd2hlcmUgdGhlIGVuZ2luZSBvdXRwdXQncyB0ZXh0IHdpbGwgYmUgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIHRoZSBBRVMgYWNjZWxlcmF0b3IgY2FuIHdyaXRlIHRoZSBjaXBoZXIgdGV4dCBiYWNrIHRvIHN5c3RlbSBtZW1vcnkgYWZ0ZXIgdGhlIEFFUyBvcGVyYXRpb24gaXMgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2YgZGVzdGluYXRpb24gYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIERBRERSIGFyZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERBRERSIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBEQUREUiB3aGlsZSB0aGUgQUVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBEQUREUiB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgbmV4dCBBRVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZSBuZXh0IENSUFRfQUVTbl9EQUREUiBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsdWUgb2YgQ1JQVF9BRVNuX1NBRERSIGFuZCBDUlBUX0FFU25fREFERFIgY2FuIGJlIHRoZSBzYW1lLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVMwX0NOVAorICAgICAqIE9mZnNldDogMHgxNDggIEFFUyBCeXRlIENvdW50IFJlZ2lzdGVyIGZvciBDaGFubmVsIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDTlQgICAgICAgfEFFUyBCeXRlIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfQUVTbl9DTlQga2VlcHMgdGhlIGJ5dGUgY291bnQgb2Ygc291cmNlIHRleHQgdGhhdCBpcyBmb3IgdGhlIEFFUyBlbmdpbmUgb3BlcmF0aW5nIGluIERNQSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfQUVTbl9DTlQgaXMgMzItYml0IGFuZCB0aGUgbWF4aW11bSBvZiBieXRlIGNvdW50IGlzIDRHIGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfQUVTbl9DTlQgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfQUVTbl9DTlQgd2hpbGUgdGhlIEFFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9BRVNuX0NOVCB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBieXRlIGNvdW50IG9mIGRhdGEgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWNjb3JkaW5nIHRvIENCQy1DUzEsIENCQy1DUzIsIGFuZCBDQkMtQ1MzIHN0YW5kYXJkLCB0aGUgY291bnQgb2Ygb3BlcmF0aW9uIGRhdGEgbXVzdCBiZSBhdCBsZWFzdCBvbmUgYmxvY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPcGVyYXRpb25zIHRoYXQgYXJlIGxlc3MgdGhhbiBvbmUgYmxvY2sgd2lsbCBvdXRwdXQgdW5leHBlY3RlZCByZXN1bHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBFQ0IsIENCQywgQ0ZCLCBPRkIsIGFuZCBDVFIgbW9kZSwgQ1JQVF9BRVNuX0NOVCBtdXN0IGJlIHNldCBhcyBieXRlIGNvdW50IGZvciB0aGUgbGFzdCBibG9jayBvZiBkYXRhIGJlZm9yZSBmZWVkaW5nIGluIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBOb24tRE1BIENCQy1DUzEsIENCQy1DUzIsIGFuZCBDQkMtQ1MzIG1vZGUsIENSUFRfQUVTbl9DTlQgbXVzdCBiZSBzZXQgYXMgYnl0ZSBjb3VudCBmb3IgdGhlIGxhc3QgdHdvIGJsb2NrcyBvZiBkYXRhIGJlZm9yZSBmZWVkaW5nIGluIHRoZSBsYXN0IHR3byBibG9ja3Mgb2YgZGF0YS4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTMV9LRVlbOF0KKyAgICAgKiBPZmZzZXQ6IDB4MTRDfjB4MTY4ICBBRVMgS2V5IFdvcmQgMH43IFJlZ2lzdGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfENSUFRfQUVTbl9LRVl4CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEtFWSBrZWVwcyB0aGUgc2VjdXJpdHkga2V5IGZvciBBRVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfG4gPSAwLCAxLi4zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHggPSAwLCAxLi43LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIEFFUyBhY2NlbGVyYXRvciBjYW4gYmUgMTI4LCAxOTIsIG9yIDI1NiBiaXRzIGFuZCBmb3VyLCBzaXgsIG9yIGVpZ2h0IDMyLWJpdCByZWdpc3RlcnMgYXJlIHRvIHN0b3JlIGVhY2ggc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8e0NSUFRfQUVTbl9LRVkzLCBDUlBUX0FFU25fS0VZMiwgQ1JQVF9BRVNuX0tFWTEsIENSUFRfQUVTbl9LRVkwfSBzdG9yZXMgdGhlIDEyOC1iaXQgc2VjdXJpdHkga2V5IGZvciBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8e0NSUFRfQUVTbl9LRVk1LCBDUlBUX0FFU25fS0VZNCwgQ1JQVF9BRVNuX0tFWTMsIENSUFRfQUVTbl9LRVkyLCBDUlBUX0FFU25fS0VZMSwgQ1JQVF9BRVNuX0tFWTB9IHN0b3JlcyB0aGUgMTkyLWJpdCBzZWN1cml0eSBrZXkgZm9yIEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx7Q1JQVF9BRVNuX0tFWTcsIENSUFRfQUVTbl9LRVk2LCBDUlBUX0FFU25fS0VZNSwgQ1JQVF9BRVNuX0tFWTQsIENSUFRfQUVTbl9LRVkzLCBDUlBUX0FFU25fS0VZMiwgQ1JQVF9BRVNuX0tFWTEsIENSUFRfQUVTbl9LRVkwfSBzdG9yZXMgdGhlIDI1Ni1iaXQgc2VjdXJpdHkga2V5IGZvciBBRVMgb3BlcmF0aW9uLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVMxX0lWWzRdCisgICAgICogT2Zmc2V0OiAweDE2Q34weDE3OCAgQUVTIEluaXRpYWwgVmVjdG9yIFdvcmQgMH4zIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxJViAgICAgICAgfEFFUyBJbml0aWFsIFZlY3RvcnMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxuID0gMCwgMS4uMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx4ID0gMCwgMS4uMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3VyIGluaXRpYWwgdmVjdG9ycyAoQ1JQVF9BRVNuX0lWMCwgQ1JQVF9BRVNuX0lWMSwgQ1JQVF9BRVNuX0lWMiwgYW5kIENSUFRfQUVTbl9JVjMpIGFyZSBmb3IgQUVTIG9wZXJhdGluZyBpbiBDQkMsIENGQiwgYW5kIE9GQiBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm91ciByZWdpc3RlcnMgKENSUFRfQUVTbl9JVjAsIENSUFRfQUVTbl9JVjEsIENSUFRfQUVTbl9JVjIsIGFuZCBDUlBUX0FFU25fSVYzKSBhY3QgYXMgTm9uY2UgY291bnRlciB3aGVuIHRoZSBBRVMgZW5naW5lIGlzIG9wZXJhdGluZyBpbiBDVFIgbW9kZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTMV9TQUREUgorICAgICAqIE9mZnNldDogMHgxN0MgIEFFUyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFNBRERSICAgICB8QUVTIERNQSBTb3VyY2UgQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBBRVMgYWNjZWxlcmF0b3Igc3VwcG9ydHMgRE1BIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIHRoZSBwbGFpbiB0ZXh0IGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgZW1iZWRkZWQgRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBTQUREUiBrZWVwcyB0aGUgc291cmNlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgYnVmZmVyIHdoZXJlIHRoZSBzb3VyY2UgdGV4dCBpcyBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgc291cmNlIGFkZHJlc3MsIHRoZSBBRVMgYWNjZWxlcmF0b3IgY2FuIHJlYWQgdGhlIHBsYWluIHRleHQgZnJvbSBzeXN0ZW0gbWVtb3J5IGFuZCBkbyBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHN0YXJ0IG9mIHNvdXJjZSBhZGRyZXNzIHNob3VsZCBiZSBsb2NhdGVkIGF0IHdvcmQgYm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvdGhlciB3b3JkcywgYml0IDEgYW5kIDAgb2YgU0FERFIgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0FERFIgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIFNBRERSIHdoaWxlIHRoZSBBRVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIFNBRERSIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIERNQSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGUgbmV4dCBDUlBUX0FFU25fU0FERFIgYmVmb3JlIHRyaWdnZXJpbmcgU1RBUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHZhbHVlIG9mIENSUFRfQUVTbl9TQUREUiBhbmQgQ1JQVF9BRVNuX0RBRERSIGNhbiBiZSB0aGUgc2FtZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTMV9EQUREUgorICAgICAqIE9mZnNldDogMHgxODAgIEFFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REFERFIgICAgIHxBRVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQUVTIGFjY2VsZXJhdG9yIHN1cHBvcnRzIERNQSBmdW5jdGlvbiB0byB0cmFuc2ZlciB0aGUgY2lwaGVyIHRleHQgYmV0d2VlbiBzeXN0ZW0gbWVtb3J5IGFuZCBlbWJlZGRlZCBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIERBRERSIGtlZXBzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgZW5naW5lIG91dHB1dCdzIHRleHQgd2lsbCBiZSBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcywgdGhlIEFFUyBhY2NlbGVyYXRvciBjYW4gd3JpdGUgdGhlIGNpcGhlciB0ZXh0IGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBhZnRlciB0aGUgQUVTIG9wZXJhdGlvbiBpcyBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBkZXN0aW5hdGlvbiBhZGRyZXNzIHNob3VsZCBiZSBsb2NhdGVkIGF0IHdvcmQgYm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvdGhlciB3b3JkcywgYml0IDEgYW5kIDAgb2YgREFERFIgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8REFERFIgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIERBRERSIHdoaWxlIHRoZSBBRVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIERBRERSIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgdGhlIG5leHQgQ1JQVF9BRVNuX0RBRERSIGJlZm9yZSB0cmlnZ2VyaW5nIFNUQVJULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWx1ZSBvZiBDUlBUX0FFU25fU0FERFIgYW5kIENSUFRfQUVTbl9EQUREUiBjYW4gYmUgdGhlIHNhbWUuCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzFfQ05UCisgICAgICogT2Zmc2V0OiAweDE4NCAgQUVTIEJ5dGUgQ291bnQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfENOVCAgICAgICB8QUVTIEJ5dGUgQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9BRVNuX0NOVCBrZWVwcyB0aGUgYnl0ZSBjb3VudCBvZiBzb3VyY2UgdGV4dCB0aGF0IGlzIGZvciB0aGUgQUVTIGVuZ2luZSBvcGVyYXRpbmcgaW4gRE1BIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9BRVNuX0NOVCBpcyAzMi1iaXQgYW5kIHRoZSBtYXhpbXVtIG9mIGJ5dGUgY291bnQgaXMgNEcgYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9BRVNuX0NOVCBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9BRVNuX0NOVCB3aGlsZSB0aGUgQUVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBDUlBUX0FFU25fQ05UIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIGJ5dGUgY291bnQgb2YgZGF0YSBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBY2NvcmRpbmcgdG8gQ0JDLUNTMSwgQ0JDLUNTMiwgYW5kIENCQy1DUzMgc3RhbmRhcmQsIHRoZSBjb3VudCBvZiBvcGVyYXRpb24gZGF0YSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBibG9jaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9wZXJhdGlvbnMgdGhhdCBhcmUgbGVzcyB0aGFuIG9uZSBibG9jayB3aWxsIG91dHB1dCB1bmV4cGVjdGVkIHJlc3VsdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBOb24tRE1BIEVDQiwgQ0JDLCBDRkIsIE9GQiwgYW5kIENUUiBtb2RlLCBDUlBUX0FFU25fQ05UIG11c3QgYmUgc2V0IGFzIGJ5dGUgY291bnQgZm9yIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEgYmVmb3JlIGZlZWRpbmcgaW4gdGhlIGxhc3QgYmxvY2sgb2YgZGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE5vbi1ETUEgQ0JDLUNTMSwgQ0JDLUNTMiwgYW5kIENCQy1DUzMgbW9kZSwgQ1JQVF9BRVNuX0NOVCBtdXN0IGJlIHNldCBhcyBieXRlIGNvdW50IGZvciB0aGUgbGFzdCB0d28gYmxvY2tzIG9mIGRhdGEgYmVmb3JlIGZlZWRpbmcgaW4gdGhlIGxhc3QgdHdvIGJsb2NrcyBvZiBkYXRhLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVMyX0tFWVs4XQorICAgICAqIE9mZnNldDogMHgxODh+MHgxQTQgIEFFUyBLZXkgV29yZCAwfjcgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8Q1JQVF9BRVNuX0tFWXgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgS0VZIGtlZXBzIHRoZSBzZWN1cml0eSBrZXkgZm9yIEFFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8biA9IDAsIDEuLjMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8eCA9IDAsIDEuLjcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgQUVTIGFjY2VsZXJhdG9yIGNhbiBiZSAxMjgsIDE5Miwgb3IgMjU2IGJpdHMgYW5kIGZvdXIsIHNpeCwgb3IgZWlnaHQgMzItYml0IHJlZ2lzdGVycyBhcmUgdG8gc3RvcmUgZWFjaCBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx7Q1JQVF9BRVNuX0tFWTMsIENSUFRfQUVTbl9LRVkyLCBDUlBUX0FFU25fS0VZMSwgQ1JQVF9BRVNuX0tFWTB9IHN0b3JlcyB0aGUgMTI4LWJpdCBzZWN1cml0eSBrZXkgZm9yIEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx7Q1JQVF9BRVNuX0tFWTUsIENSUFRfQUVTbl9LRVk0LCBDUlBUX0FFU25fS0VZMywgQ1JQVF9BRVNuX0tFWTIsIENSUFRfQUVTbl9LRVkxLCBDUlBUX0FFU25fS0VZMH0gc3RvcmVzIHRoZSAxOTItYml0IHNlY3VyaXR5IGtleSBmb3IgQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHtDUlBUX0FFU25fS0VZNywgQ1JQVF9BRVNuX0tFWTYsIENSUFRfQUVTbl9LRVk1LCBDUlBUX0FFU25fS0VZNCwgQ1JQVF9BRVNuX0tFWTMsIENSUFRfQUVTbl9LRVkyLCBDUlBUX0FFU25fS0VZMSwgQ1JQVF9BRVNuX0tFWTB9IHN0b3JlcyB0aGUgMjU2LWJpdCBzZWN1cml0eSBrZXkgZm9yIEFFUyBvcGVyYXRpb24uCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzJfSVZbNF0KKyAgICAgKiBPZmZzZXQ6IDB4MUE4fjB4MUI0ICBBRVMgSW5pdGlhbCBWZWN0b3IgV29yZCAwfjMgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfElWICAgICAgICB8QUVTIEluaXRpYWwgVmVjdG9ycworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfG4gPSAwLCAxLi4zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHggPSAwLCAxLi4zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvdXIgaW5pdGlhbCB2ZWN0b3JzIChDUlBUX0FFU25fSVYwLCBDUlBUX0FFU25fSVYxLCBDUlBUX0FFU25fSVYyLCBhbmQgQ1JQVF9BRVNuX0lWMykgYXJlIGZvciBBRVMgb3BlcmF0aW5nIGluIENCQywgQ0ZCLCBhbmQgT0ZCIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3VyIHJlZ2lzdGVycyAoQ1JQVF9BRVNuX0lWMCwgQ1JQVF9BRVNuX0lWMSwgQ1JQVF9BRVNuX0lWMiwgYW5kIENSUFRfQUVTbl9JVjMpIGFjdCBhcyBOb25jZSBjb3VudGVyIHdoZW4gdGhlIEFFUyBlbmdpbmUgaXMgb3BlcmF0aW5nIGluIENUUiBtb2RlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVMyX1NBRERSCisgICAgICogT2Zmc2V0OiAweDFCOCAgQUVTIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8U0FERFIgICAgIHxBRVMgRE1BIFNvdXJjZSBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFFUyBhY2NlbGVyYXRvciBzdXBwb3J0cyBETUEgZnVuY3Rpb24gdG8gdHJhbnNmZXIgdGhlIHBsYWluIHRleHQgYmV0d2VlbiBzeXN0ZW0gbWVtb3J5IGFuZCBlbWJlZGRlZCBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFNBRERSIGtlZXBzIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIgd2hlcmUgdGhlIHNvdXJjZSB0ZXh0IGlzIHN0b3JlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2VkIG9uIHRoZSBzb3VyY2UgYWRkcmVzcywgdGhlIEFFUyBhY2NlbGVyYXRvciBjYW4gcmVhZCB0aGUgcGxhaW4gdGV4dCBmcm9tIHN5c3RlbSBtZW1vcnkgYW5kIGRvIEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2Ygc291cmNlIGFkZHJlc3Mgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgd29yZCBib3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG90aGVyIHdvcmRzLCBiaXQgMSBhbmQgMCBvZiBTQUREUiBhcmUgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTQUREUiBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gU0FERFIgd2hpbGUgdGhlIEFFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgU0FERFIgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgRE1BIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgbmV4dCBBRVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZSBuZXh0IENSUFRfQUVTbl9TQUREUiBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsdWUgb2YgQ1JQVF9BRVNuX1NBRERSIGFuZCBDUlBUX0FFU25fREFERFIgY2FuIGJlIHRoZSBzYW1lLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVMyX0RBRERSCisgICAgICogT2Zmc2V0OiAweDFCQyAgQUVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxEQUREUiAgICAgfEFFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBBRVMgYWNjZWxlcmF0b3Igc3VwcG9ydHMgRE1BIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIHRoZSBjaXBoZXIgdGV4dCBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIGVtYmVkZGVkIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgREFERFIga2VlcHMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIGRhdGEgYnVmZmVyIHdoZXJlIHRoZSBlbmdpbmUgb3V0cHV0J3MgdGV4dCB3aWxsIGJlIHN0b3JlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2VkIG9uIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzLCB0aGUgQUVTIGFjY2VsZXJhdG9yIGNhbiB3cml0ZSB0aGUgY2lwaGVyIHRleHQgYmFjayB0byBzeXN0ZW0gbWVtb3J5IGFmdGVyIHRoZSBBRVMgb3BlcmF0aW9uIGlzIGZpbmlzaGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHN0YXJ0IG9mIGRlc3RpbmF0aW9uIGFkZHJlc3Mgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgd29yZCBib3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG90aGVyIHdvcmRzLCBiaXQgMSBhbmQgMCBvZiBEQUREUiBhcmUgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEQUREUiBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gREFERFIgd2hpbGUgdGhlIEFFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgREFERFIgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGUgbmV4dCBDUlBUX0FFU25fREFERFIgYmVmb3JlIHRyaWdnZXJpbmcgU1RBUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHZhbHVlIG9mIENSUFRfQUVTbl9TQUREUiBhbmQgQ1JQVF9BRVNuX0RBRERSIGNhbiBiZSB0aGUgc2FtZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTMl9DTlQKKyAgICAgKiBPZmZzZXQ6IDB4MUMwICBBRVMgQnl0ZSBDb3VudCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8Q05UICAgICAgIHxBRVMgQnl0ZSBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX0FFU25fQ05UIGtlZXBzIHRoZSBieXRlIGNvdW50IG9mIHNvdXJjZSB0ZXh0IHRoYXQgaXMgZm9yIHRoZSBBRVMgZW5naW5lIG9wZXJhdGluZyBpbiBETUEgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX0FFU25fQ05UIGlzIDMyLWJpdCBhbmQgdGhlIG1heGltdW0gb2YgYnl0ZSBjb3VudCBpcyA0RyBieXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX0FFU25fQ05UIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBDUlBUX0FFU25fQ05UIHdoaWxlIHRoZSBBRVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfQUVTbl9DTlQgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgYnl0ZSBjb3VudCBvZiBkYXRhIGZvciB0aGUgbmV4dCBBRVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFjY29yZGluZyB0byBDQkMtQ1MxLCBDQkMtQ1MyLCBhbmQgQ0JDLUNTMyBzdGFuZGFyZCwgdGhlIGNvdW50IG9mIG9wZXJhdGlvbiBkYXRhIG11c3QgYmUgYXQgbGVhc3Qgb25lIGJsb2NrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3BlcmF0aW9ucyB0aGF0IGFyZSBsZXNzIHRoYW4gb25lIGJsb2NrIHdpbGwgb3V0cHV0IHVuZXhwZWN0ZWQgcmVzdWx0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE5vbi1ETUEgRUNCLCBDQkMsIENGQiwgT0ZCLCBhbmQgQ1RSIG1vZGUsIENSUFRfQUVTbl9DTlQgbXVzdCBiZSBzZXQgYXMgYnl0ZSBjb3VudCBmb3IgdGhlIGxhc3QgYmxvY2sgb2YgZGF0YSBiZWZvcmUgZmVlZGluZyBpbiB0aGUgbGFzdCBibG9jayBvZiBkYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBDQkMtQ1MxLCBDQkMtQ1MyLCBhbmQgQ0JDLUNTMyBtb2RlLCBDUlBUX0FFU25fQ05UIG11c3QgYmUgc2V0IGFzIGJ5dGUgY291bnQgZm9yIHRoZSBsYXN0IHR3byBibG9ja3Mgb2YgZGF0YSBiZWZvcmUgZmVlZGluZyBpbiB0aGUgbGFzdCB0d28gYmxvY2tzIG9mIGRhdGEuCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzNfS0VZWzhdCisgICAgICogT2Zmc2V0OiAweDFDNH4weDFFMCAgQUVTIEtleSBXb3JkIDB+NyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxDUlBUX0FFU25fS0VZeAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBLRVkga2VlcHMgdGhlIHNlY3VyaXR5IGtleSBmb3IgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxuID0gMCwgMS4uMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx4ID0gMCwgMS4uNy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciBBRVMgYWNjZWxlcmF0b3IgY2FuIGJlIDEyOCwgMTkyLCBvciAyNTYgYml0cyBhbmQgZm91ciwgc2l4LCBvciBlaWdodCAzMi1iaXQgcmVnaXN0ZXJzIGFyZSB0byBzdG9yZSBlYWNoIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHtDUlBUX0FFU25fS0VZMywgQ1JQVF9BRVNuX0tFWTIsIENSUFRfQUVTbl9LRVkxLCBDUlBUX0FFU25fS0VZMH0gc3RvcmVzIHRoZSAxMjgtYml0IHNlY3VyaXR5IGtleSBmb3IgQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHtDUlBUX0FFU25fS0VZNSwgQ1JQVF9BRVNuX0tFWTQsIENSUFRfQUVTbl9LRVkzLCBDUlBUX0FFU25fS0VZMiwgQ1JQVF9BRVNuX0tFWTEsIENSUFRfQUVTbl9LRVkwfSBzdG9yZXMgdGhlIDE5Mi1iaXQgc2VjdXJpdHkga2V5IGZvciBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8e0NSUFRfQUVTbl9LRVk3LCBDUlBUX0FFU25fS0VZNiwgQ1JQVF9BRVNuX0tFWTUsIENSUFRfQUVTbl9LRVk0LCBDUlBUX0FFU25fS0VZMywgQ1JQVF9BRVNuX0tFWTIsIENSUFRfQUVTbl9LRVkxLCBDUlBUX0FFU25fS0VZMH0gc3RvcmVzIHRoZSAyNTYtYml0IHNlY3VyaXR5IGtleSBmb3IgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTM19JVls0XQorICAgICAqIE9mZnNldDogMHgxRTR+MHgxRjAgIEFFUyBJbml0aWFsIFZlY3RvciBXb3JkIDB+MyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVYgICAgICAgIHxBRVMgSW5pdGlhbCBWZWN0b3JzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8biA9IDAsIDEuLjMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8eCA9IDAsIDEuLjMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm91ciBpbml0aWFsIHZlY3RvcnMgKENSUFRfQUVTbl9JVjAsIENSUFRfQUVTbl9JVjEsIENSUFRfQUVTbl9JVjIsIGFuZCBDUlBUX0FFU25fSVYzKSBhcmUgZm9yIEFFUyBvcGVyYXRpbmcgaW4gQ0JDLCBDRkIsIGFuZCBPRkIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvdXIgcmVnaXN0ZXJzIChDUlBUX0FFU25fSVYwLCBDUlBUX0FFU25fSVYxLCBDUlBUX0FFU25fSVYyLCBhbmQgQ1JQVF9BRVNuX0lWMykgYWN0IGFzIE5vbmNlIGNvdW50ZXIgd2hlbiB0aGUgQUVTIGVuZ2luZSBpcyBvcGVyYXRpbmcgaW4gQ1RSIG1vZGUuCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzNfU0FERFIKKyAgICAgKiBPZmZzZXQ6IDB4MUY0ICBBRVMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTQUREUiAgICAgfEFFUyBETUEgU291cmNlIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQUVTIGFjY2VsZXJhdG9yIHN1cHBvcnRzIERNQSBmdW5jdGlvbiB0byB0cmFuc2ZlciB0aGUgcGxhaW4gdGV4dCBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIGVtYmVkZGVkIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgU0FERFIga2VlcHMgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgc291cmNlIHRleHQgaXMgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIHNvdXJjZSBhZGRyZXNzLCB0aGUgQUVTIGFjY2VsZXJhdG9yIGNhbiByZWFkIHRoZSBwbGFpbiB0ZXh0IGZyb20gc3lzdGVtIG1lbW9yeSBhbmQgZG8gQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBzb3VyY2UgYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIFNBRERSIGFyZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNBRERSIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBTQUREUiB3aGlsZSB0aGUgQUVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBTQUREUiB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBETUEgc291cmNlIGFkZHJlc3MgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgdGhlIG5leHQgQ1JQVF9BRVNuX1NBRERSIGJlZm9yZSB0cmlnZ2VyaW5nIFNUQVJULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWx1ZSBvZiBDUlBUX0FFU25fU0FERFIgYW5kIENSUFRfQUVTbl9EQUREUiBjYW4gYmUgdGhlIHNhbWUuCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzNfREFERFIKKyAgICAgKiBPZmZzZXQ6IDB4MUY4ICBBRVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfERBRERSICAgICB8QUVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFFUyBhY2NlbGVyYXRvciBzdXBwb3J0cyBETUEgZnVuY3Rpb24gdG8gdHJhbnNmZXIgdGhlIGNpcGhlciB0ZXh0IGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgZW1iZWRkZWQgRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBEQUREUiBrZWVwcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIgd2hlcmUgdGhlIGVuZ2luZSBvdXRwdXQncyB0ZXh0IHdpbGwgYmUgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIHRoZSBBRVMgYWNjZWxlcmF0b3IgY2FuIHdyaXRlIHRoZSBjaXBoZXIgdGV4dCBiYWNrIHRvIHN5c3RlbSBtZW1vcnkgYWZ0ZXIgdGhlIEFFUyBvcGVyYXRpb24gaXMgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2YgZGVzdGluYXRpb24gYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIERBRERSIGFyZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERBRERSIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBEQUREUiB3aGlsZSB0aGUgQUVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBEQUREUiB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgbmV4dCBBRVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZSBuZXh0IENSUFRfQUVTbl9EQUREUiBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsdWUgb2YgQ1JQVF9BRVNuX1NBRERSIGFuZCBDUlBUX0FFU25fREFERFIgY2FuIGJlIHRoZSBzYW1lLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVMzX0NOVAorICAgICAqIE9mZnNldDogMHgxRkMgIEFFUyBCeXRlIENvdW50IFJlZ2lzdGVyIGZvciBDaGFubmVsIDMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDTlQgICAgICAgfEFFUyBCeXRlIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfQUVTbl9DTlQga2VlcHMgdGhlIGJ5dGUgY291bnQgb2Ygc291cmNlIHRleHQgdGhhdCBpcyBmb3IgdGhlIEFFUyBlbmdpbmUgb3BlcmF0aW5nIGluIERNQSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfQUVTbl9DTlQgaXMgMzItYml0IGFuZCB0aGUgbWF4aW11bSBvZiBieXRlIGNvdW50IGlzIDRHIGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfQUVTbl9DTlQgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfQUVTbl9DTlQgd2hpbGUgdGhlIEFFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9BRVNuX0NOVCB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBieXRlIGNvdW50IG9mIGRhdGEgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWNjb3JkaW5nIHRvIENCQy1DUzEsIENCQy1DUzIsIGFuZCBDQkMtQ1MzIHN0YW5kYXJkLCB0aGUgY291bnQgb2Ygb3BlcmF0aW9uIGRhdGEgbXVzdCBiZSBhdCBsZWFzdCBvbmUgYmxvY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPcGVyYXRpb25zIHRoYXQgYXJlIGxlc3MgdGhhbiBvbmUgYmxvY2sgd2lsbCBvdXRwdXQgdW5leHBlY3RlZCByZXN1bHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBFQ0IsIENCQywgQ0ZCLCBPRkIsIGFuZCBDVFIgbW9kZSwgQ1JQVF9BRVNuX0NOVCBtdXN0IGJlIHNldCBhcyBieXRlIGNvdW50IGZvciB0aGUgbGFzdCBibG9jayBvZiBkYXRhIGJlZm9yZSBmZWVkaW5nIGluIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBOb24tRE1BIENCQy1DUzEsIENCQy1DUzIsIGFuZCBDQkMtQ1MzIG1vZGUsIENSUFRfQUVTbl9DTlQgbXVzdCBiZSBzZXQgYXMgYnl0ZSBjb3VudCBmb3IgdGhlIGxhc3QgdHdvIGJsb2NrcyBvZiBkYXRhIGJlZm9yZSBmZWVkaW5nIGluIHRoZSBsYXN0IHR3byBibG9ja3Mgb2YgZGF0YS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFU19DVEwKKyAgICAgKiBPZmZzZXQ6IDB4MjAwICBUREVTL0RFUyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1RBUlQgICAgIHxUREVTL0RFUyBFbmdpbmUgU3RhcnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTdGFydCBUREVTL0RFUyBlbmdpbmUuIFRoZSBmbGFnIEJVU1kgd291bGQgYmUgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBiaXQgaXMgYWx3YXlzIDAgd2hlbiBpdCdzIHJlYWQgYmFjay4KKyAgICAgKiB8WzFdICAgICB8U1RPUCAgICAgIHxUREVTL0RFUyBFbmdpbmUgU3RvcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0b3AgVERFUy9ERVMgZW5naW5lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBiaXQgaXMgYWx3YXlzIDAgd2hlbiBpdCdzIHJlYWQgYmFjay4KKyAgICAgKiB8WzJdICAgICB8VE1PREUgICAgIHxUREVTL0RFUyBFbmdpbmUgT3BlcmF0aW5nIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2V0IERFUyBtb2RlIGZvciBUREVTL0RFUyBlbmdpbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNldCBUcmlwbGUgREVTIG1vZGUgZm9yIFRERVMvREVTIGVuZ2luZS4KKyAgICAgKiB8WzNdICAgICB8M0tFWVMgICAgIHxUREVTL0RFUyBLZXkgTnVtYmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNlbGVjdCBLRVkxIGFuZCBLRVkyIGluIFRERVMvREVTIGVuZ2luZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJpcGxlIGtleXMgaW4gVERFUy9ERVMgZW5naW5lIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfERNQUxBU1QgICB8VERFUy9ERVMgRW5naW5lIFN0YXJ0IGZvciB0aGUgTGFzdCBCbG9jaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCB0aGlzIGJpdCBtdXN0IGJlIHNldCBhcyBiZWdpbm5pbmcgdGhlIGxhc3QgRE1BIGNhc2NhZGUgcm91bmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBtb2RlLCB0aGlzIGJpdCBtdXN0IGJlIHNldCBhcyBmZWVkaW5nIGluIGxhc3QgYmxvY2sgb2YgZGF0YS4KKyAgICAgKiB8WzZdICAgICB8RE1BQ1NDQUQgIHxUREVTL0RFUyBFbmdpbmUgRE1BIHdpdGggQ2FzY2FkZSBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERNQSBjYXNjYWRlIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbiBETUEgQ2FzY2FkZSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIERNQSBzb3VyY2UgYWRkcmVzcyByZWdpc3RlciwgZGVzdGluYXRpb24gYWRkcmVzcyByZWdpc3RlciwgYW5kIGJ5dGUgY291bnQgcmVnaXN0ZXIgZHVyaW5nIGEgY2FzY2FkZSBvcGVyYXRpb24sIHdpdGhvdXQgZmluaXNoaW5nIHRoZSBhY2NlbGVyYXRvciBvcGVyYXRpb24uCisgICAgICogfFs3XSAgICAgfERNQUVOICAgICB8VERFUy9ERVMgRW5naW5lIERNQSBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUREVTX0RNQSBlbmdpbmUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VERFUyBlbmdpbmUgb3BlcmF0ZXMgaW4gTm9uLURNQSBtb2RlLCBhbmQgZ2V0IGRhdGEgZnJvbSB0aGUgcG9ydCBDUlBUX1RERVNfREFUSU4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRERVNfRE1BIGVuZ2luZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRERVMgZW5naW5lIG9wZXJhdGVzIGluIERNQSBtb2RlLCBhbmQgZGF0YSBtb3ZlbWVudCBmcm9tL3RvIHRoZSBlbmdpbmUgaXMgZG9uZSBieSBETUEgbG9naWMuCisgICAgICogfFsxMDo4XSAgfE9QTU9ERSAgICB8VERFUy9ERVMgRW5naW5lIE9wZXJhdGlvbiBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwMCA9IEVDQiAoRWxlY3Ryb25pYyBDb2RlYm9vayBNb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAxID0gQ0JDIChDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgTW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwMiA9IENGQiAoQ2lwaGVyIEZlZWRiYWNrIE1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDMgPSBPRkIgKE91dHB1dCBGZWVkYmFjayBNb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDA0ID0gQ1RSIChDb3VudGVyIE1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IENUUiAoQ291bnRlciBNb2RlKS4KKyAgICAgKiB8WzE2XSAgICB8RU5DUlBUICAgIHxUREVTL0RFUyBFbmNyeXB0aW9uL0RlY3J5cHRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVERFUyBlbmdpbmUgZXhlY3V0ZXMgZGVjcnlwdGlvbiBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRERVMgZW5naW5lIGV4ZWN1dGVzIGVuY3J5cHRpb24gb3BlcmF0aW9uLgorICAgICAqIHxbMjFdICAgIHxCTEtTV0FQICAgfFRERVMvREVTIEVuZ2luZSBCbG9jayBEb3VibGUgV29yZCBFbmRpYW4gU3dhcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBLZWVwIHRoZSBvcmlnaW5hbCBvcmRlciwgZS5nLiB7V09SRF9ILCBXT1JEX0x9LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIHRoaXMgYml0IGlzIHNldCB0byAxLCB0aGUgVERFUyBlbmdpbmUgd291bGQgZXhjaGFuZ2UgaGlnaCBhbmQgbG93IHdvcmQgaW4gdGhlIHNlcXVlbmNlIHtXT1JEX0wsIFdPUkRfSH0uCisgICAgICogfFsyMl0gICAgfE9VVFNXQVAgICB8VERFUy9ERVMgRW5naW5lIE91dHB1dCBEYXRhIFN3YXAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gS2VlcCB0aGUgb3JpZ2luYWwgb3JkZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBvcmRlciB0aGF0IENQVSBvdXRwdXRzIGRhdGEgZnJvbSB0aGUgYWNjZWxlcmF0b3Igd2lsbCBiZSBjaGFuZ2VkIGZyb20ge2J5dGUzLCBieXRlMiwgYnl0ZTEsIGJ5dGUwfSB0byB7Ynl0ZTAsIGJ5dGUxLCBieXRlMiwgYnl0ZTN9LgorICAgICAqIHxbMjNdICAgIHxJTlNXQVAgICAgfFRERVMvREVTIEVuZ2luZSBJbnB1dCBEYXRhIFN3YXAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gS2VlcCB0aGUgb3JpZ2luYWwgb3JkZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBvcmRlciB0aGF0IENQVSBmZWVkcyBkYXRhIHRvIHRoZSBhY2NlbGVyYXRvciB3aWxsIGJlIGNoYW5nZWQgZnJvbSB7Ynl0ZTMsIGJ5dGUyLCBieXRlMSwgYnl0ZTB9IHRvIHtieXRlMCwgYnl0ZTEsIGJ5dGUyLCBieXRlM30uCisgICAgICogfFsyNToyNF0gfENIQU5ORUwgICB8VERFUy9ERVMgRW5naW5lIFdvcmtpbmcgQ2hhbm5lbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ3VycmVudCBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmcgaXMgZm9yIGNoYW5uZWwgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEN1cnJlbnQgY29udHJvbCByZWdpc3RlciBzZXR0aW5nIGlzIGZvciBjaGFubmVsIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDdXJyZW50IGNvbnRyb2wgcmVnaXN0ZXIgc2V0dGluZyBpcyBmb3IgY2hhbm5lbCAyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ3VycmVudCBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmcgaXMgZm9yIGNoYW5uZWwgMy4KKyAgICAgKiB8WzMwOjI2XSB8S0VZVU5QUlQgIHxVbnByb3RlY3QgS2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyAwIHRvIENSUFRfVERFU19DVEwgWzMxXSBhbmQgLi4uMTAxMTAgdG8gQ1JQVF9UREVTX0NUTCBbMzA6MjZdIGlzIHRvIHVucHJvdGVjdCBUREVTIGtleS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgS0VZVU5QUlQgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGl0IGlzIHdyaXR0ZW4gYXMgdGhlIFRERVMgZW5naW5lIGlzIG9wZXJhdGluZywgQlVTWSBmbGFnIGlzIDEsIHRoZXJlIHdvdWxkIGJlIG5vIGVmZmVjdCBvbiBLRVlVTlBSVC4KKyAgICAgKiB8WzMxXSAgICB8S0VZUFJUICAgIHxQcm90ZWN0IEtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgYXMgYSBmbGFnIHRvIHJlZmxlY3QgS0VZUFJULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoaXMgYml0IGlzIHRvIHByb3RlY3QgdGhlIGNvbnRlbnQgb2YgVERFUyBrZXkgZnJvbSByZWFkaW5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJldHVybiB2YWx1ZSBmb3IgcmVhZGluZyBDUlBUXyBUREVTbl9LRVl4SC9MIGlzIG5vdCB0aGUgY29udGVudCBpbiB0aGUgcmVnaXN0ZXJzIENSUFRfIFRERVNuX0tFWXhIL0wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPbmNlIGl0IGlzIHNldCwgaXQgY2FuIGJlIGNsZWFyZWQgYnkgYXNzZXJ0aW5nIEtFWVVOUFJUCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSBjb250ZW50IHdvdWxkIGJlIGNsZWFyZWQgYXMgd2VsbC4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFU19TVFMKKyAgICAgKiBPZmZzZXQ6IDB4MjA0ICBUREVTL0RFUyBFbmdpbmUgRmxhZworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJVU1kgICAgICB8VERFUy9ERVMgRW5naW5lIEJ1c3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVERFUy9ERVMgZW5naW5lIGlzIGlkbGUgb3IgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRERVMvREVTIGVuZ2luZSBpcyB1bmRlciBwcm9jZXNzaW5nLgorICAgICAqIHxbOF0gICAgIHxJTkJVRkVNUFRZfFRERVMvREVTIGluIEJ1ZmZlciBFbXB0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGVyZSBhcmUgc29tZSBkYXRhIGluIGlucHV0IGJ1ZmZlciB3YWl0aW5nIGZvciB0aGUgVERFUy9ERVMgZW5naW5lIHRvIHByb2Nlc3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRERVMvREVTIGlucHV0IGJ1ZmZlciBpcyBlbXB0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIG5lZWRzIHRvIGZlZWQgZGF0YSB0byB0aGUgVERFUy9ERVMgZW5naW5lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJ3aXNlLCB0aGUgVERFUy9ERVMgZW5naW5lIHdpbGwgYmUgcGVuZGluZyB0byB3YWl0IGZvciBpbnB1dCBkYXRhLgorICAgICAqIHxbOV0gICAgIHxJTkJVRkZVTEwgfFRERVMvREVTIGluIEJ1ZmZlciBGdWxsIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVERFUy9ERVMgaW5wdXQgYnVmZmVyIGlzIG5vdCBmdWxsLiBTb2Z0d2FyZSBjYW4gZmVlZCB0aGUgZGF0YSBpbnRvIHRoZSBUREVTL0RFUyBlbmdpbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRERVMgaW5wdXQgYnVmZmVyIGlzIGZ1bGwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW5ub3QgZmVlZCBkYXRhIHRvIHRoZSBUREVTL0RFUyBlbmdpbmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcndpc2UsIHRoZSBmbGFnIElOQlVGRVJSIHdpbGwgYmUgc2V0IHRvIDEuCisgICAgICogfFsxMF0gICAgfElOQlVGRVJSICB8VERFUy9ERVMgaW4gQnVmZmVyIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXJyb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVycm9yIGhhcHBlbnMgZHVyaW5nIGZlZWRpbmcgZGF0YSB0byB0aGUgVERFUy9ERVMgZW5naW5lLgorICAgICAqIHxbMTZdICAgIHxPVVRCVUZFTVBUWXxUREVTL0RFUyBPdXRwdXQgQnVmZmVyIEVtcHR5IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVERFUy9ERVMgb3V0cHV0IGJ1ZmZlciBpcyBub3QgZW1wdHkuIFRoZXJlIGFyZSBzb21lIHZhbGlkIGRhdGEga2VwdCBpbiBvdXRwdXQgYnVmZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUREVTL0RFUyBvdXRwdXQgYnVmZmVyIGlzIGVtcHR5LCBTb2Z0d2FyZSBjYW5ub3QgZ2V0IGRhdGEgZnJvbSBUREVTX0RBVEFfT1VUCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJ3aXNlIHRoZSBmbGFnIE9VVEJVRkVSUiB3aWxsIGJlIHNldCB0byAxLCBzaW5jZSBvdXRwdXQgYnVmZmVyIGlzIGVtcHR5LgorICAgICAqIHxbMTddICAgIHxPVVRCVUZGVUxMfFRERVMvREVTIE91dHB1dCBCdWZmZXIgRnVsbCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRERVMvREVTIG91dHB1dCBidWZmZXIgaXMgbm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRERVMvREVTIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgYW5kIHNvZnR3YXJlIG5lZWRzIHRvIGdldCBkYXRhIGZyb20gVERFU19EQVRBX09VVAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVyd2lzZSwgdGhlIFRERVMvREVTIGVuZ2luZSB3aWxsIGJlIHBlbmRpbmcgc2luY2Ugb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLgorICAgICAqIHxbMThdICAgIHxPVVRCVUZFUlIgfFRERVMvREVTIE91dCBCdWZmZXIgRXJyb3IgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlcnJvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXJyb3IgaGFwcGVucyBkdXJpbmcgZ2V0dGluZyB0ZXN0IHJlc3VsdCBmcm9tIFRERVMvREVTIGVuZ2luZS4KKyAgICAgKiB8WzIwXSAgICB8QlVTRVJSICAgIHxUREVTL0RFUyBETUEgQWNjZXNzIEJ1cyBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCdXMgZXJyb3Igd2lsbCBzdG9wIERNQSBvcGVyYXRpb24gYW5kIFRERVMvREVTIGVuZ2luZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzBfS0VZMUgKKyAgICAgKiBPZmZzZXQ6IDB4MjA4ICBUREVTL0RFUyBLZXkgMSBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMwX0tFWTFMCisgICAgICogT2Zmc2V0OiAweDIwQyAgVERFUy9ERVMgS2V5IDEgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMwX0tFWTJICisgICAgICogT2Zmc2V0OiAweDIxMCAgVERFUyBLZXkgMiBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMwX0tFWTJMCisgICAgICogT2Zmc2V0OiAweDIxNCAgVERFUyBLZXkgMiBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzBfS0VZM0gKKyAgICAgKiBPZmZzZXQ6IDB4MjE4ICBUREVTIEtleSAzIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzBfS0VZM0wKKyAgICAgKiBPZmZzZXQ6IDB4MjFDICBUREVTIEtleSAzIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMF9JVkgKKyAgICAgKiBPZmZzZXQ6IDB4MjIwICBUREVTL0RFUyBJbml0aWFsIFZlY3RvciBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfElWICAgICAgICB8VERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluaXRpYWwgdmVjdG9yIChJVikgaXMgZm9yIFRERVMvREVTIGVuZ2luZSBpbiBDQkMsIENGQiwgYW5kIE9GQiBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SVYgaXMgTm9uY2UgY291bnRlciBmb3IgVERFUy9ERVMgZW5naW5lIGluIENUUiBtb2RlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMF9JVkwKKyAgICAgKiBPZmZzZXQ6IDB4MjI0ICBUREVTL0RFUyBJbml0aWFsIFZlY3RvciBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVYgICAgICAgIHxUREVTL0RFUyBJbml0aWFsIFZlY3RvciBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5pdGlhbCB2ZWN0b3IgKElWKSBpcyBmb3IgVERFUy9ERVMgZW5naW5lIGluIENCQywgQ0ZCLCBhbmQgT0ZCIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJViBpcyBOb25jZSBjb3VudGVyIGZvciBUREVTL0RFUyBlbmdpbmUgaW4gQ1RSIG1vZGUuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMwX1NBRERSCisgICAgICogT2Zmc2V0OiAweDIyOCAgVERFUy9ERVMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTQSAgICAgICAgfFRERVMvREVTIERNQSBTb3VyY2UgQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBzdXBwb3J0cyBETUEgZnVuY3Rpb24gdG8gdHJhbnNmZXIgdGhlIHBsYWluIHRleHQgYmV0d2VlbiBzeXN0ZW0gbWVtb3J5IGFuZCBlbWJlZGRlZCBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfVERFU25fU0Ega2VlcHMgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgc291cmNlIHRleHQgaXMgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIHNvdXJjZSBhZGRyZXNzLCB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgY2FuIHJlYWQgdGhlIHBsYWluIHRleHQgZnJvbSBzeXN0ZW0gbWVtb3J5IGFuZCBkbyBUREVTL0RFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2Ygc291cmNlIGFkZHJlc3Mgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgd29yZCBib3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG90aGVyIHdvcmRzLCBiaXQgMSBhbmQgMCBvZiBDUlBUX1RERVNuX1NBIGFyZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fU0EgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfVERFU25fU0Egd2hpbGUgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBUREVTL0RFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfVERFU25fU0Egd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgRE1BIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgbmV4dCBUREVTL0RFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgdGhlIG5leHQgQ1JQVF9UREVTbl9TQSBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX1NBIGFuZCBDUlBUX1RERVNuX0RBIGNhbiBiZSB0aGUgc2FtZSBpbiB0aGUgdmFsdWUuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMwX0RBRERSCisgICAgICogT2Zmc2V0OiAweDIyQyAgVERFUy9ERVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfERBICAgICAgICB8VERFUy9ERVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVERFUy9ERVMgYWNjZWxlcmF0b3Igc3VwcG9ydHMgRE1BIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIHRoZSBjaXBoZXIgdGV4dCBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIGVtYmVkZGVkIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9UREVTbl9EQSBrZWVwcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIgd2hlcmUgdGhlIGVuZ2luZSBvdXRwdXQncyB0ZXh0IHdpbGwgYmUgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBjYW4gd3JpdGUgdGhlIGNpcGhlciB0ZXh0IGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBhZnRlciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uIGlzIGZpbmlzaGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHN0YXJ0IG9mIGRlc3RpbmF0aW9uIGFkZHJlc3Mgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgd29yZCBib3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG90aGVyIHdvcmRzLCBiaXQgMSBhbmQgMCBvZiBDUlBUX1RERVNuX0RBIGFyZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fREEgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfVERFU25fREEgd2hpbGUgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBUREVTL0RFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfVERFU25fREEgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgdGhlIG5leHQgVERFUy9ERVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZSBuZXh0IENSUFRfVERFU25fREEgYmVmb3JlIHRyaWdnZXJpbmcgU1RBUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9TQUQgYW5kIENSUFRfVERFU25fREEgY2FuIGJlIHRoZSBzYW1lIGluIHRoZSB2YWx1ZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzBfQ05UCisgICAgICogT2Zmc2V0OiAweDIzMCAgVERFUy9ERVMgQnl0ZSBDb3VudCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8Q05UICAgICAgIHxUREVTL0RFUyBCeXRlIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfVERFU25fQ05UIGtlZXBzIHRoZSBieXRlIGNvdW50IG9mIHNvdXJjZSB0ZXh0IHRoYXQgaXMgZm9yIHRoZSBUREVTL0RFUyBlbmdpbmUgb3BlcmF0aW5nIGluIERNQSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfVERFU25fQ05UIGlzIDMyLWJpdCBhbmQgdGhlIG1heGltdW0gb2YgYnl0ZSBjb3VudCBpcyA0RyBieXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX0NOVCBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9UREVTbl9DTlQgd2hpbGUgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBUREVTL0RFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfVERFU25fQ05UIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIGJ5dGUgY291bnQgb2YgZGF0YSBmb3IgdGhlIG5leHQgVERFUyAvREVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBOb24tRE1BIEVDQiwgQ0JDLCBDRkIsIE9GQiwgYW5kIENUUiBtb2RlLCBDUlBUX1RERVNuX0NOVCBtdXN0IGJlIHNldCBhcyBieXRlIGNvdW50IGZvciB0aGUgbGFzdCBibG9jayBvZiBkYXRhIGJlZm9yZSBmZWVkaW5nIGluIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVNfREFUSU4KKyAgICAgKiBPZmZzZXQ6IDB4MjM0ICBUREVTL0RFUyBFbmdpbmUgSW5wdXQgZGF0YSBXb3JkIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REFUSU4gICAgIHxUREVTL0RFUyBFbmdpbmUgSW5wdXQgUG9ydAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENQVSBmZWVkcyBkYXRhIHRvIFRERVMvREVTIGVuZ2luZSB0aHJvdWdoIHRoaXMgcG9ydCBieSBjaGVja2luZyBDUlBUX1RERVNfU1RTCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmVlZCBkYXRhIGFzIElOQlVGRlVMTCBpcyAwLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTX0RBVE9VVAorICAgICAqIE9mZnNldDogMHgyMzggIFRERVMvREVTIEVuZ2luZSBPdXRwdXQgZGF0YSBXb3JkIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REFUT1VUICAgIHxUREVTL0RFUyBFbmdpbmUgT3V0cHV0IFBvcnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUFUgZ2V0cyByZXN1bHQgZnJvbSB0aGUgVERFUy9ERVMgZW5naW5lIHRocm91Z2ggdGhpcyBwb3J0IGJ5IGNoZWNraW5nIENSUFRfVERFU19TVFMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxHZXQgZGF0YSBhcyBPVVRCVUZFTVBUWSBpcyAwLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMV9LRVkxSAorICAgICAqIE9mZnNldDogMHgyNDggIFRERVMvREVTIEtleSAxIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzFfS0VZMUwKKyAgICAgKiBPZmZzZXQ6IDB4MjRDICBUREVTL0RFUyBLZXkgMSBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzFfS0VZMkgKKyAgICAgKiBPZmZzZXQ6IDB4MjUwICBUREVTIEtleSAyIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzFfS0VZMkwKKyAgICAgKiBPZmZzZXQ6IDB4MjU0ICBUREVTIEtleSAyIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMV9LRVkzSAorICAgICAqIE9mZnNldDogMHgyNTggIFRERVMgS2V5IDMgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMV9LRVkzTAorICAgICAqIE9mZnNldDogMHgyNUMgIFRERVMgS2V5IDMgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMxX0lWSAorICAgICAqIE9mZnNldDogMHgyNjAgIFRERVMvREVTIEluaXRpYWwgVmVjdG9yIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVYgICAgICAgIHxUREVTL0RFUyBJbml0aWFsIFZlY3RvciBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5pdGlhbCB2ZWN0b3IgKElWKSBpcyBmb3IgVERFUy9ERVMgZW5naW5lIGluIENCQywgQ0ZCLCBhbmQgT0ZCIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJViBpcyBOb25jZSBjb3VudGVyIGZvciBUREVTL0RFUyBlbmdpbmUgaW4gQ1RSIG1vZGUuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMxX0lWTAorICAgICAqIE9mZnNldDogMHgyNjQgIFRERVMvREVTIEluaXRpYWwgVmVjdG9yIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxJViAgICAgICAgfFRERVMvREVTIEluaXRpYWwgVmVjdG9yIEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbml0aWFsIHZlY3RvciAoSVYpIGlzIGZvciBUREVTL0RFUyBlbmdpbmUgaW4gQ0JDLCBDRkIsIGFuZCBPRkIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElWIGlzIE5vbmNlIGNvdW50ZXIgZm9yIFRERVMvREVTIGVuZ2luZSBpbiBDVFIgbW9kZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzFfU0FERFIKKyAgICAgKiBPZmZzZXQ6IDB4MjY4ICBUREVTL0RFUyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFNBICAgICAgICB8VERFUy9ERVMgRE1BIFNvdXJjZSBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIHN1cHBvcnRzIERNQSBmdW5jdGlvbiB0byB0cmFuc2ZlciB0aGUgcGxhaW4gdGV4dCBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIGVtYmVkZGVkIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9UREVTbl9TQSBrZWVwcyB0aGUgc291cmNlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgYnVmZmVyIHdoZXJlIHRoZSBzb3VyY2UgdGV4dCBpcyBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgc291cmNlIGFkZHJlc3MsIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBjYW4gcmVhZCB0aGUgcGxhaW4gdGV4dCBmcm9tIHN5c3RlbSBtZW1vcnkgYW5kIGRvIFRERVMvREVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBzb3VyY2UgYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIENSUFRfVERFU25fU0EgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9TQSBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9UREVTbl9TQSB3aGlsZSB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IFRERVMvREVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9UREVTbl9TQSB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBETUEgc291cmNlIGFkZHJlc3MgZm9yIHRoZSBuZXh0IFRERVMvREVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGUgbmV4dCBDUlBUX1RERVNuX1NBIGJlZm9yZSB0cmlnZ2VyaW5nIFNUQVJULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fU0EgYW5kIENSUFRfVERFU25fREEgY2FuIGJlIHRoZSBzYW1lIGluIHRoZSB2YWx1ZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzFfREFERFIKKyAgICAgKiBPZmZzZXQ6IDB4MjZDICBUREVTL0RFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REEgICAgICAgIHxUREVTL0RFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBzdXBwb3J0cyBETUEgZnVuY3Rpb24gdG8gdHJhbnNmZXIgdGhlIGNpcGhlciB0ZXh0IGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgZW1iZWRkZWQgRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX1RERVNuX0RBIGtlZXBzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgZW5naW5lIG91dHB1dCdzIHRleHQgd2lsbCBiZSBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcywgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGNhbiB3cml0ZSB0aGUgY2lwaGVyIHRleHQgYmFjayB0byBzeXN0ZW0gbWVtb3J5IGFmdGVyIHRoZSBUREVTL0RFUyBvcGVyYXRpb24gaXMgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2YgZGVzdGluYXRpb24gYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIENSUFRfVERFU25fREEgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9EQSBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9UREVTbl9EQSB3aGlsZSB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IFRERVMvREVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9UREVTbl9EQSB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgbmV4dCBUREVTL0RFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgdGhlIG5leHQgQ1JQVF9UREVTbl9EQSBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX1NBRCBhbmQgQ1JQVF9UREVTbl9EQSBjYW4gYmUgdGhlIHNhbWUgaW4gdGhlIHZhbHVlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMV9DTlQKKyAgICAgKiBPZmZzZXQ6IDB4MjcwICBUREVTL0RFUyBCeXRlIENvdW50IFJlZ2lzdGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDTlQgICAgICAgfFRERVMvREVTIEJ5dGUgQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9UREVTbl9DTlQga2VlcHMgdGhlIGJ5dGUgY291bnQgb2Ygc291cmNlIHRleHQgdGhhdCBpcyBmb3IgdGhlIFRERVMvREVTIGVuZ2luZSBvcGVyYXRpbmcgaW4gRE1BIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9UREVTbl9DTlQgaXMgMzItYml0IGFuZCB0aGUgbWF4aW11bSBvZiBieXRlIGNvdW50IGlzIDRHIGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fQ05UIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBDUlBUX1RERVNuX0NOVCB3aGlsZSB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IFRERVMvREVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9UREVTbl9DTlQgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgYnl0ZSBjb3VudCBvZiBkYXRhIGZvciB0aGUgbmV4dCBUREVTIC9ERVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE5vbi1ETUEgRUNCLCBDQkMsIENGQiwgT0ZCLCBhbmQgQ1RSIG1vZGUsIENSUFRfVERFU25fQ05UIG11c3QgYmUgc2V0IGFzIGJ5dGUgY291bnQgZm9yIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEgYmVmb3JlIGZlZWRpbmcgaW4gdGhlIGxhc3QgYmxvY2sgb2YgZGF0YS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzJfS0VZMUgKKyAgICAgKiBPZmZzZXQ6IDB4Mjg4ICBUREVTL0RFUyBLZXkgMSBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMyX0tFWTFMCisgICAgICogT2Zmc2V0OiAweDI4QyAgVERFUy9ERVMgS2V5IDEgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMyX0tFWTJICisgICAgICogT2Zmc2V0OiAweDI5MCAgVERFUyBLZXkgMiBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMyX0tFWTJMCisgICAgICogT2Zmc2V0OiAweDI5NCAgVERFUyBLZXkgMiBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzJfS0VZM0gKKyAgICAgKiBPZmZzZXQ6IDB4Mjk4ICBUREVTIEtleSAzIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzJfS0VZM0wKKyAgICAgKiBPZmZzZXQ6IDB4MjlDICBUREVTIEtleSAzIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMl9JVkgKKyAgICAgKiBPZmZzZXQ6IDB4MkEwICBUREVTL0RFUyBJbml0aWFsIFZlY3RvciBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfElWICAgICAgICB8VERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluaXRpYWwgdmVjdG9yIChJVikgaXMgZm9yIFRERVMvREVTIGVuZ2luZSBpbiBDQkMsIENGQiwgYW5kIE9GQiBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SVYgaXMgTm9uY2UgY291bnRlciBmb3IgVERFUy9ERVMgZW5naW5lIGluIENUUiBtb2RlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMl9JVkwKKyAgICAgKiBPZmZzZXQ6IDB4MkE0ICBUREVTL0RFUyBJbml0aWFsIFZlY3RvciBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVYgICAgICAgIHxUREVTL0RFUyBJbml0aWFsIFZlY3RvciBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5pdGlhbCB2ZWN0b3IgKElWKSBpcyBmb3IgVERFUy9ERVMgZW5naW5lIGluIENCQywgQ0ZCLCBhbmQgT0ZCIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJViBpcyBOb25jZSBjb3VudGVyIGZvciBUREVTL0RFUyBlbmdpbmUgaW4gQ1RSIG1vZGUuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMyX1NBRERSCisgICAgICogT2Zmc2V0OiAweDJBOCAgVERFUy9ERVMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTQSAgICAgICAgfFRERVMvREVTIERNQSBTb3VyY2UgQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBzdXBwb3J0cyBETUEgZnVuY3Rpb24gdG8gdHJhbnNmZXIgdGhlIHBsYWluIHRleHQgYmV0d2VlbiBzeXN0ZW0gbWVtb3J5IGFuZCBlbWJlZGRlZCBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfVERFU25fU0Ega2VlcHMgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgc291cmNlIHRleHQgaXMgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIHNvdXJjZSBhZGRyZXNzLCB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgY2FuIHJlYWQgdGhlIHBsYWluIHRleHQgZnJvbSBzeXN0ZW0gbWVtb3J5IGFuZCBkbyBUREVTL0RFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2Ygc291cmNlIGFkZHJlc3Mgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgd29yZCBib3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG90aGVyIHdvcmRzLCBiaXQgMSBhbmQgMCBvZiBDUlBUX1RERVNuX1NBIGFyZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fU0EgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfVERFU25fU0Egd2hpbGUgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBUREVTL0RFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfVERFU25fU0Egd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgRE1BIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgbmV4dCBUREVTL0RFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgdGhlIG5leHQgQ1JQVF9UREVTbl9TQSBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX1NBIGFuZCBDUlBUX1RERVNuX0RBIGNhbiBiZSB0aGUgc2FtZSBpbiB0aGUgdmFsdWUuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMyX0RBRERSCisgICAgICogT2Zmc2V0OiAweDJBQyAgVERFUy9ERVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfERBICAgICAgICB8VERFUy9ERVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVERFUy9ERVMgYWNjZWxlcmF0b3Igc3VwcG9ydHMgRE1BIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIHRoZSBjaXBoZXIgdGV4dCBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIGVtYmVkZGVkIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9UREVTbl9EQSBrZWVwcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIgd2hlcmUgdGhlIGVuZ2luZSBvdXRwdXQncyB0ZXh0IHdpbGwgYmUgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBjYW4gd3JpdGUgdGhlIGNpcGhlciB0ZXh0IGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBhZnRlciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uIGlzIGZpbmlzaGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHN0YXJ0IG9mIGRlc3RpbmF0aW9uIGFkZHJlc3Mgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgd29yZCBib3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG90aGVyIHdvcmRzLCBiaXQgMSBhbmQgMCBvZiBDUlBUX1RERVNuX0RBIGFyZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fREEgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfVERFU25fREEgd2hpbGUgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBUREVTL0RFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfVERFU25fREEgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgdGhlIG5leHQgVERFUy9ERVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZSBuZXh0IENSUFRfVERFU25fREEgYmVmb3JlIHRyaWdnZXJpbmcgU1RBUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9TQUQgYW5kIENSUFRfVERFU25fREEgY2FuIGJlIHRoZSBzYW1lIGluIHRoZSB2YWx1ZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzJfQ05UCisgICAgICogT2Zmc2V0OiAweDJCMCAgVERFUy9ERVMgQnl0ZSBDb3VudCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8Q05UICAgICAgIHxUREVTL0RFUyBCeXRlIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfVERFU25fQ05UIGtlZXBzIHRoZSBieXRlIGNvdW50IG9mIHNvdXJjZSB0ZXh0IHRoYXQgaXMgZm9yIHRoZSBUREVTL0RFUyBlbmdpbmUgb3BlcmF0aW5nIGluIERNQSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfVERFU25fQ05UIGlzIDMyLWJpdCBhbmQgdGhlIG1heGltdW0gb2YgYnl0ZSBjb3VudCBpcyA0RyBieXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX0NOVCBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9UREVTbl9DTlQgd2hpbGUgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBUREVTL0RFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfVERFU25fQ05UIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIGJ5dGUgY291bnQgb2YgZGF0YSBmb3IgdGhlIG5leHQgVERFUyAvREVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBOb24tRE1BIEVDQiwgQ0JDLCBDRkIsIE9GQiwgYW5kIENUUiBtb2RlLCBDUlBUX1RERVNuX0NOVCBtdXN0IGJlIHNldCBhcyBieXRlIGNvdW50IGZvciB0aGUgbGFzdCBibG9jayBvZiBkYXRhIGJlZm9yZSBmZWVkaW5nIGluIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMzX0tFWTFICisgICAgICogT2Zmc2V0OiAweDJDOCAgVERFUy9ERVMgS2V5IDEgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTM19LRVkxTAorICAgICAqIE9mZnNldDogMHgyQ0MgIFRERVMvREVTIEtleSAxIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTM19LRVkySAorICAgICAqIE9mZnNldDogMHgyRDAgIFRERVMgS2V5IDIgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTM19LRVkyTAorICAgICAqIE9mZnNldDogMHgyRDQgIFRERVMgS2V5IDIgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMzX0tFWTNICisgICAgICogT2Zmc2V0OiAweDJEOCAgVERFUyBLZXkgMyBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMzX0tFWTNMCisgICAgICogT2Zmc2V0OiAweDJEQyAgVERFUyBLZXkgMyBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzNfSVZICisgICAgICogT2Zmc2V0OiAweDJFMCAgVERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxJViAgICAgICAgfFRERVMvREVTIEluaXRpYWwgVmVjdG9yIEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbml0aWFsIHZlY3RvciAoSVYpIGlzIGZvciBUREVTL0RFUyBlbmdpbmUgaW4gQ0JDLCBDRkIsIGFuZCBPRkIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElWIGlzIE5vbmNlIGNvdW50ZXIgZm9yIFRERVMvREVTIGVuZ2luZSBpbiBDVFIgbW9kZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzNfSVZMCisgICAgICogT2Zmc2V0OiAweDJFNCAgVERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfElWICAgICAgICB8VERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluaXRpYWwgdmVjdG9yIChJVikgaXMgZm9yIFRERVMvREVTIGVuZ2luZSBpbiBDQkMsIENGQiwgYW5kIE9GQiBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SVYgaXMgTm9uY2UgY291bnRlciBmb3IgVERFUy9ERVMgZW5naW5lIGluIENUUiBtb2RlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTM19TQUREUgorICAgICAqIE9mZnNldDogMHgyRTggIFRERVMvREVTIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8U0EgICAgICAgIHxUREVTL0RFUyBETUEgU291cmNlIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVERFUy9ERVMgYWNjZWxlcmF0b3Igc3VwcG9ydHMgRE1BIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIHRoZSBwbGFpbiB0ZXh0IGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgZW1iZWRkZWQgRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX1RERVNuX1NBIGtlZXBzIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIgd2hlcmUgdGhlIHNvdXJjZSB0ZXh0IGlzIHN0b3JlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2VkIG9uIHRoZSBzb3VyY2UgYWRkcmVzcywgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGNhbiByZWFkIHRoZSBwbGFpbiB0ZXh0IGZyb20gc3lzdGVtIG1lbW9yeSBhbmQgZG8gVERFUy9ERVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHN0YXJ0IG9mIHNvdXJjZSBhZGRyZXNzIHNob3VsZCBiZSBsb2NhdGVkIGF0IHdvcmQgYm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvdGhlciB3b3JkcywgYml0IDEgYW5kIDAgb2YgQ1JQVF9UREVTbl9TQSBhcmUgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX1NBIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBDUlBUX1RERVNuX1NBIHdoaWxlIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgVERFUy9ERVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBDUlBUX1RERVNuX1NBIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIERNQSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIG5leHQgVERFUy9ERVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZSBuZXh0IENSUFRfVERFU25fU0EgYmVmb3JlIHRyaWdnZXJpbmcgU1RBUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9TQSBhbmQgQ1JQVF9UREVTbl9EQSBjYW4gYmUgdGhlIHNhbWUgaW4gdGhlIHZhbHVlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTM19EQUREUgorICAgICAqIE9mZnNldDogMHgyRUMgIFRERVMvREVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxEQSAgICAgICAgfFRERVMvREVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIHN1cHBvcnRzIERNQSBmdW5jdGlvbiB0byB0cmFuc2ZlciB0aGUgY2lwaGVyIHRleHQgYmV0d2VlbiBzeXN0ZW0gbWVtb3J5IGFuZCBlbWJlZGRlZCBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfVERFU25fREEga2VlcHMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIGRhdGEgYnVmZmVyIHdoZXJlIHRoZSBlbmdpbmUgb3V0cHV0J3MgdGV4dCB3aWxsIGJlIHN0b3JlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2VkIG9uIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzLCB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgY2FuIHdyaXRlIHRoZSBjaXBoZXIgdGV4dCBiYWNrIHRvIHN5c3RlbSBtZW1vcnkgYWZ0ZXIgdGhlIFRERVMvREVTIG9wZXJhdGlvbiBpcyBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBkZXN0aW5hdGlvbiBhZGRyZXNzIHNob3VsZCBiZSBsb2NhdGVkIGF0IHdvcmQgYm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvdGhlciB3b3JkcywgYml0IDEgYW5kIDAgb2YgQ1JQVF9UREVTbl9EQSBhcmUgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX0RBIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBDUlBUX1RERVNuX0RBIHdoaWxlIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgVERFUy9ERVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBDUlBUX1RERVNuX0RBIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBuZXh0IFRERVMvREVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGUgbmV4dCBDUlBUX1RERVNuX0RBIGJlZm9yZSB0cmlnZ2VyaW5nIFNUQVJULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fU0FEIGFuZCBDUlBUX1RERVNuX0RBIGNhbiBiZSB0aGUgc2FtZSBpbiB0aGUgdmFsdWUuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMzX0NOVAorICAgICAqIE9mZnNldDogMHgyRjAgIFRERVMvREVTIEJ5dGUgQ291bnQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfENOVCAgICAgICB8VERFUy9ERVMgQnl0ZSBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX1RERVNuX0NOVCBrZWVwcyB0aGUgYnl0ZSBjb3VudCBvZiBzb3VyY2UgdGV4dCB0aGF0IGlzIGZvciB0aGUgVERFUy9ERVMgZW5naW5lIG9wZXJhdGluZyBpbiBETUEgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX1RERVNuX0NOVCBpcyAzMi1iaXQgYW5kIHRoZSBtYXhpbXVtIG9mIGJ5dGUgY291bnQgaXMgNEcgYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9DTlQgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfVERFU25fQ05UIHdoaWxlIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgVERFUy9ERVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBDUlBUX1RERVNuX0NOVCB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBieXRlIGNvdW50IG9mIGRhdGEgZm9yIHRoZSBuZXh0IFRERVMgL0RFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBFQ0IsIENCQywgQ0ZCLCBPRkIsIGFuZCBDVFIgbW9kZSwgQ1JQVF9UREVTbl9DTlQgbXVzdCBiZSBzZXQgYXMgYnl0ZSBjb3VudCBmb3IgdGhlIGxhc3QgYmxvY2sgb2YgZGF0YSBiZWZvcmUgZmVlZGluZyBpbiB0aGUgbGFzdCBibG9jayBvZiBkYXRhLgorICAgICAqIEB2YXIgQ1JQVF9UOjpITUFDX0NUTAorICAgICAqIE9mZnNldDogMHgzMDAgIFNIQS9ITUFDIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTVEFSVCAgICAgfFNIQS9ITUFDIEVuZ2luZSBTdGFydAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0YXJ0IFNIQS9ITUFDIGVuZ2luZS4gQlVTWSBmbGFnIHdpbGwgYmUgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGFsd2F5cyAwIHdoZW4gaXQncyByZWFkIGJhY2suCisgICAgICogfFsxXSAgICAgfFNUT1AgICAgICB8U0hBL0hNQUMgRW5naW5lIFN0b3AKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTdG9wIFNIQS9ITUFDIGVuZ2luZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBhbHdheXMgMCB3aGVuIGl0J3MgcmVhZCBiYWNrLgorICAgICAqIHxbNV0gICAgIHxETUFMQVNUICAgfFNIQS9ITUFDIExhc3QgQmxvY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBtdXN0IGJlIHNldCBhcyBmZWVkaW5nIGluIGxhc3QgYnl0ZSBvZiBkYXRhLgorICAgICAqIHxbN10gICAgIHxETUFFTiAgICAgfFNIQS9ITUFDIEVuZ2luZSBETUEgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0hBL0hNQUMgRE1BIGVuZ2luZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTSEEvSE1BQyBlbmdpbmUgb3BlcmF0ZXMgaW4gTm9uLURNQSBtb2RlLCBhbmQgZ2V0cyBkYXRhIGZyb20gdGhlIHBvcnQgQ1JQVF9ITUFDX0RBVElOLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTSEEvSE1BQyBETUEgZW5naW5lIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0hBL0hNQUMgZW5naW5lIG9wZXJhdGVzIGluIERNQSBtb2RlLCBhbmQgZGF0YSBtb3ZlbWVudCBmcm9tL3RvIHRoZSBlbmdpbmUgaXMgZG9uZSBieSBETUEgbG9naWMuCisgICAgICogfFsxMDo4XSAgfE9QTU9ERSAgICB8U0hBL0hNQUMgRW5naW5lIE9wZXJhdGlvbiBNb2RlcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MHh4OiBTSEExNjAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDEwMDogU0hBMjU2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgxMDE6IFNIQTIyNAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MTEwOiBTSEE1MTIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDExMTogU0hBMzg0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbi4gQnV0IHdyaXRpbmcgdG8gdGhlbSB3b3VsZG4ndCB0YWtlIGVmZmVjdCBhcyBCVVNZIGlzIDEuCisgICAgICogfFsyMl0gICAgfE9VVFNXQVAgICB8U0hBL0hNQUMgRW5naW5lIE91dHB1dCBEYXRhIFN3YXAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gS2VlcCB0aGUgb3JpZ2luYWwgb3JkZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBvcmRlciB0aGF0IENQVSBmZWVkcyBkYXRhIHRvIHRoZSBhY2NlbGVyYXRvciB3aWxsIGJlIGNoYW5nZWQgZnJvbSB7Ynl0ZTMsIGJ5dGUyLCBieXRlMSwgYnl0ZTB9IHRvIHtieXRlMCwgYnl0ZTEsIGJ5dGUyLCBieXRlM30uCisgICAgICogfFsyM10gICAgfElOU1dBUCAgICB8U0hBL0hNQUMgRW5naW5lIElucHV0IERhdGEgU3dhcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBLZWVwIHRoZSBvcmlnaW5hbCBvcmRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIG9yZGVyIHRoYXQgQ1BVIGZlZWRzIGRhdGEgdG8gdGhlIGFjY2VsZXJhdG9yIHdpbGwgYmUgY2hhbmdlZCBmcm9tIHtieXRlMywgYnl0ZTIsIGJ5dGUxLCBieXRlMH0gdG8ge2J5dGUwLCBieXRlMSwgYnl0ZTIsIGJ5dGUzfS4KKyAgICAgKiBAdmFyIENSUFRfVDo6SE1BQ19TVFMKKyAgICAgKiBPZmZzZXQ6IDB4MzA0ICBTSEEvSE1BQyBTdGF0dXMgRmxhZworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJVU1kgICAgICB8U0hBL0hNQUMgRW5naW5lIEJ1c3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0hBL0hNQUMgZW5naW5lIGlzIGlkbGUgb3IgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNIQS9ITUFDIGVuZ2luZSBpcyBidXN5LgorICAgICAqIHxbMV0gICAgIHxETUFCVVNZICAgfFNIQS9ITUFDIEVuZ2luZSBETUEgQnVzeSBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNIQS9ITUFDIERNQSBlbmdpbmUgaXMgaWRsZSBvciBmaW5pc2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0hBL0hNQUMgRE1BIGVuZ2luZSBpcyBidXN5LgorICAgICAqIHxbOF0gICAgIHxETUFFUlIgICAgfFNIQS9ITUFDIEVuZ2luZSBETUEgRXJyb3IgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTaG93IHRoZSBTSEEvSE1BQyBlbmdpbmUgYWNjZXNzIG5vcm1hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2hvdyB0aGUgU0hBL0hNQUMgZW5naW5lIGFjY2VzcyBlcnJvci4KKyAgICAgKiB8WzE2XSAgICB8REFUSU5SRVEgIHxTSEEvSE1BQyBOb24tRE1BIE1vZGUgRGF0YSBJbnB1dCBSZXF1ZXN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVxdWVzdCBTSEEvSE1BQyBOb24tRE1BIG1vZGUgZGF0YSBpbnB1dC4KKyAgICAgKiBAdmFyIENSUFRfVDo6SE1BQ19ER1NUWzE2XQorICAgICAqIE9mZnNldDogMHgzMDh+MHgzNDQgIFNIQS9ITUFDIERpZ2VzdCBNZXNzYWdlIDB+MTUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxER1NUICAgICAgfFNIQS9ITUFDIERpZ2VzdCBNZXNzYWdlIE91dHB1dCBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBTSEEtMTYwLCB0aGUgZGlnZXN0IGlzIHN0b3JlZCBpbiBDUlBUX0hNQUNfREdTVDAgfiBDUlBUX0hNQUNfREdTVDQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFNIQS0yMjQsIHRoZSBkaWdlc3QgaXMgc3RvcmVkIGluIENSUFRfSE1BQ19ER1NUMCB+IENSUFRfSE1BQ19ER1NUNi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgU0hBLTI1NiwgdGhlIGRpZ2VzdCBpcyBzdG9yZWQgaW4gQ1JQVF9ITUFDX0RHU1QwIH4gQ1JQVF9ITUFDX0RHU1Q3LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBTSEEtMzg0LCB0aGUgZGlnZXN0IGlzIHN0b3JlZCBpbiBDUlBUX0hNQUNfREdTVDAgfiBDUlBUX0hNQUNfREdTVDExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBTSEEtNTEyLCB0aGUgZGlnZXN0IGlzIHN0b3JlZCBpbiBDUlBUX0hNQUNfREdTVDAgfiBDUlBUX0hNQUNfREdTVDE1LgorICAgICAqIEB2YXIgQ1JQVF9UOjpITUFDX0tFWUNOVAorICAgICAqIE9mZnNldDogMHgzNDggIFNIQS9ITUFDIEtleSBCeXRlIENvdW50IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZQ05UICAgIHxTSEEvSE1BQyBLZXkgQnl0ZSBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX0hNQUNfS0VZQ05UIGtlZXBzIHRoZSBieXRlIGNvdW50IG9mIGtleSB0aGF0IFNIQS9ITUFDIGVuZ2luZSBvcGVyYXRlcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBpcyAzMi1iaXQgYW5kIHRoZSBtYXhpbXVtIGJ5dGUgY291bnQgaXMgNEcgYnl0ZXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIHRoZSByZWdpc3RlciBDUlBUX0hNQUNfS0VZQ05UIGFzIHRoZSBTSEEvSE1BQyBhY2NlbGVyYXRvciBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgU0hBL0hNQUMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBDUlBUX1NIQSBfS0VZQ05UIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIGtleSBjb3VudCBmb3IgdGhlIG5leHQgU0hBL0hNQUMgb3BlcmF0aW9uLgorICAgICAqIEB2YXIgQ1JQVF9UOjpITUFDX1NBRERSCisgICAgICogT2Zmc2V0OiAweDM0QyAgU0hBL0hNQUMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8U0FERFIgICAgIHxTSEEvSE1BQyBETUEgU291cmNlIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgU0hBL0hNQUMgYWNjZWxlcmF0b3Igc3VwcG9ydHMgRE1BIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIHRoZSBwbGFpbiB0ZXh0IGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgZW1iZWRkZWQgRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX0hNQUNfU0FERFIga2VlcHMgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgc291cmNlIHRleHQgaXMgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIHNvdXJjZSBhZGRyZXNzLCB0aGUgU0hBL0hNQUMgYWNjZWxlcmF0b3IgY2FuIHJlYWQgdGhlIHBsYWluIHRleHQgZnJvbSBzeXN0ZW0gbWVtb3J5IGFuZCBkbyBTSEEvSE1BQyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2Ygc291cmNlIGFkZHJlc3Mgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgd29yZCBib3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG90aGVyIHdvcmRzLCBiaXQgMSBhbmQgMCBvZiBDUlBUX0hNQUNfU0FERFIgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9ITUFDX1NBRERSIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBDUlBUX0hNQUNfU0FERFIgd2hpbGUgdGhlIFNIQS9ITUFDIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBTSEEvSE1BQyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfSE1BQ19TQUREUiB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBETUEgc291cmNlIGFkZHJlc3MgZm9yIHRoZSBuZXh0IFNIQS9ITUFDIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGUgbmV4dCBDUlBUX0hNQUNfU0FERFIgYmVmb3JlIHRyaWdnZXJpbmcgU1RBUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9ITUFDX1NBRERSIGFuZCBDUlBUX0hNQUNfREFERFIgY2FuIGJlIHRoZSBzYW1lIGluIHRoZSB2YWx1ZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6SE1BQ19ETUFDTlQKKyAgICAgKiBPZmZzZXQ6IDB4MzUwICBTSEEvSE1BQyBCeXRlIENvdW50IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8RE1BQ05UICAgIHxTSEEvSE1BQyBPcGVyYXRpb24gQnl0ZSBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX0hNQUNfRE1BQ05UIGtlZXBzIHRoZSBieXRlIGNvdW50IG9mIHNvdXJjZSB0ZXh0IHRoYXQgaXMgZm9yIHRoZSBTSEEvSE1BQyBlbmdpbmUgb3BlcmF0aW5nIGluIERNQSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfSE1BQ19ETUFDTlQgaXMgMzItYml0IGFuZCB0aGUgbWF4aW11bSBvZiBieXRlIGNvdW50IGlzIDRHIGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfSE1BQ19ETUFDTlQgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfSE1BQ19ETUFDTlQgd2hpbGUgdGhlIFNIQS9ITUFDIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBTSEEvSE1BQyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfSE1BQ19ETUFDTlQgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgYnl0ZSBjb3VudCBvZiBkYXRhIGZvciB0aGUgbmV4dCBTSEEvSE1BQyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBtb2RlLCBDUlBUX0hNQUNfRE1BQ05UIG11c3QgYmUgc2V0IGFzIHRoZSBieXRlIGNvdW50IG9mIHRoZSBsYXN0IGJsb2NrIGJlZm9yZSBmZWVkaW5nIGluIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEuCisgICAgICogQHZhciBDUlBUX1Q6OkhNQUNfREFUSU4KKyAgICAgKiBPZmZzZXQ6IDB4MzU0ICBTSEEvSE1BQyBFbmdpbmUgTm9uLURNQSBNb2RlIERhdGEgSW5wdXQgUG9ydCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfERBVElOICAgICB8U0hBL0hNQUMgRW5naW5lIElucHV0IFBvcnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUFUgZmVlZHMgZGF0YSB0byBTSEEvSE1BQyBlbmdpbmUgdGhyb3VnaCB0aGlzIHBvcnQgYnkgY2hlY2tpbmcgQ1JQVF9ITUFDX1NUUworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZlZWQgZGF0YSBhcyBEQVRJTlJFUSBpcyAxLgorICAgICAqIEB2YXIgQ1JQVF9UOjpFQ0NfQ1RMCisgICAgICogT2Zmc2V0OiAweDgwMCAgRUNDIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTVEFSVCAgICAgfEVDQyBBY2NlbGVyYXRvciBTdGFydAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0YXJ0IEVDQyBhY2NlbGVyYXRvci4gQlVTWSBmbGFnIHdpbGwgYmUgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGFsd2F5cyAwIHdoZW4gaXQncyByZWFkIGJhY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RUNDIGFjY2VsZXJhdG9yIHdpbGwgaWdub3JlIHRoaXMgU1RBUlQgc2lnbmFsIHdoZW4gQlVTWSBmbGFnIGlzIDEuCisgICAgICogfFsxXSAgICAgfFNUT1AgICAgICB8RUNDIEFjY2VsZXJhdG9yIFN0b3AKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBYm9ydCBFQ0MgYWNjZWxlcmF0b3IgYW5kIG1ha2UgaXQgaW50byBpZGxlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGFsd2F5cyAwIHdoZW4gaXQncyByZWFkIGJhY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVtZW1iZXIgdG8gY2xlYXIgRUNDIGludGVycnVwdCBmbGFnIGFmdGVyIHN0b3BwaW5nIEVDQyBhY2NlbGVyYXRvci4KKyAgICAgKiB8WzddICAgICB8RE1BRU4gICAgIHxFQ0MgQWNjZWxlcmF0b3IgRE1BIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVDQyBETUEgZW5naW5lIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQ0MgRE1BIGVuZ2luZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9ubHkgd2hlbiBTVEFSVCBhbmQgRE1BRU4gYXJlIDEsIEVDQyBETUEgZW5naW5lIHdpbGwgYmUgYWN0aXZlCisgICAgICogfFs4XSAgICAgfEZTRUwgICAgICB8RmllbGQgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJpbmFyeSBGaWVsZCAoR0YoMm0gKSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFByaW1lIEZpZWxkIChHRihwKSkuCisgICAgICogfFsxMDo5XSAgfEVDQ09QICAgICB8UG9pbnQgT3BlcmF0aW9uIGZvciBCRiBhbmQgUEYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBvaW50IG11bHRpcGxpY2F0aW9uIDoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoUE9JTlRYMSwgUE9JTlRZMSkgPSBTQ0FMQVJLICogKFBPSU5UWDEsIFBPSU5UWTEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gTW9kdWx1cyBvcGVyYXRpb24gOiBjaG9vc2UgYnkgTU9ET1AgKENSUFRfRUNDX0NUTFsxMjoxMV0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUG9pbnQgYWRkaXRpb24gOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfChQT0lOVFgxLCBQT0lOVFkxKSA9IChQT0lOVFgxLCBQT0lOVFkxKSArLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfChQT0lOVFgyLCBQT0lOVFkyKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUG9pbnQgZG91YmxpbmcgOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfChQT0lOVFgxLCBQT0lOVFkxKSA9IDIgKiAoUE9JTlRYMSwgUE9JTlRZMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmVzaWRlcyBhYm92ZSB0aHJlZSBpbnB1dCBkYXRhLCBwb2ludCBvcGVyYXRpb25zIHN0aWxsIG5lZWQgdGhlIHBhcmFtZXRlcnMgb2YgZWxsaXB0aWMgY3VydmUgKENVUlZFQSwgQ1VSVkVCLCBDVVJWRU4gYW5kIENVUlZFTSkgYXMgc2hvd24gaW4gRmlndXJlIDYuMjctMTEKKyAgICAgKiB8WzEyOjExXSB8TU9ET1AgICAgIHxNb2R1bHVzIE9wZXJhdGlvbiBmb3IgUEYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERpdmlzaW9uIDoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQT0lOVFgxID0gKFBPSU5UWTEgLyBQT0lOVFgxKSAlIENVUlZFTi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IE11bHRpcGxpY2F0aW9uIDoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQT0lOVFgxID0gKFBPSU5UWDEgKiBQT0lOVFkxKSAlIENVUlZFTi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEFkZGl0aW9uIDoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQT0lOVFgxID0gKFBPSU5UWDEgKyBQT0lOVFkxKSAlIENVUlZFTi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFN1YnRyYWN0aW9uIDoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQT0lOVFgxID0gKFBPSU5UWDEgLSBQT0lOVFkxKSAlIENVUlZFTi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNT0RPUCBpcyBhY3RpdmUgb25seSB3aGVuIEVDQ09QID0gMDEuCisgICAgICogfFsxNl0gICAgfExEUDEgICAgICB8VGhlIENvbnRyb2wgU2lnbmFsIG9mIFJlZ2lzdGVyIGZvciB0aGUgWCBhbmQgWSBDb29yZGluYXRlIG9mIHRoZSBGaXJzdCBQb2ludCAoUE9JTlRYMSwgUE9JTlRZMSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlZ2lzdGVyIGZvciBQT0lOVFgxIGFuZCBQT0lOVFkxIGlzIG5vdCBtb2RpZmllZCBieSBETUEgb3IgdXNlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHJlZ2lzdGVyIGZvciBQT0lOVFgxIGFuZCBQT0lOVFkxIGlzIG1vZGlmaWVkIGJ5IERNQSBvciB1c2VyLgorICAgICAqIHxbMTddICAgIHxMRFAyICAgICAgfFRoZSBDb250cm9sIFNpZ25hbCBvZiBSZWdpc3RlciBmb3IgdGhlIFggYW5kIFkgQ29vcmRpbmF0ZSBvZiB0aGUgU2Vjb25kIFBvaW50IChQT0lOVFgyLCBQT0lOVFkyKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVnaXN0ZXIgZm9yIFBPSU5UWDIgYW5kIFBPSU5UWTIgaXMgbm90IG1vZGlmaWVkIGJ5IERNQSBvciB1c2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVnaXN0ZXIgZm9yIFBPSU5UWDIgYW5kIFBPSU5UWTIgaXMgbW9kaWZpZWQgYnkgRE1BIG9yIHVzZXIuCisgICAgICogfFsxOF0gICAgfExEQSAgICAgICB8VGhlIENvbnRyb2wgU2lnbmFsIG9mIFJlZ2lzdGVyIGZvciB0aGUgUGFyYW1ldGVyIENVUlZFQSBvZiBFbGxpcHRpYyBDdXJ2ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVnaXN0ZXIgZm9yIENVUlZFQSBpcyBub3QgbW9kaWZpZWQgYnkgRE1BIG9yIHVzZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSByZWdpc3RlciBmb3IgQ1VSVkVBIGlzIG1vZGlmaWVkIGJ5IERNQSBvciB1c2VyLgorICAgICAqIHxbMTldICAgIHxMREIgICAgICAgfFRoZSBDb250cm9sIFNpZ25hbCBvZiBSZWdpc3RlciBmb3IgdGhlIFBhcmFtZXRlciBDVVJWRUIgb2YgRWxsaXB0aWMgQ3VydmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlZ2lzdGVyIGZvciBDVVJWRUIgaXMgbm90IG1vZGlmaWVkIGJ5IERNQSBvciB1c2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVnaXN0ZXIgZm9yIENVUlZFQiBpcyBtb2RpZmllZCBieSBETUEgb3IgdXNlci4KKyAgICAgKiB8WzIwXSAgICB8TEROICAgICAgIHxUaGUgQ29udHJvbCBTaWduYWwgb2YgUmVnaXN0ZXIgZm9yIHRoZSBQYXJhbWV0ZXIgQ1VSVkVOIG9mIEVsbGlwdGljIEN1cnZlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSByZWdpc3RlciBmb3IgQ1VSVkVOIGlzIG5vdCBtb2RpZmllZCBieSBETUEgb3IgdXNlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHJlZ2lzdGVyIGZvciBDVVJWRU4gaXMgbW9kaWZpZWQgYnkgRE1BIG9yIHVzZXIuCisgICAgICogfFsyMV0gICAgfExESyAgICAgICB8VGhlIENvbnRyb2wgU2lnbmFsIG9mIFJlZ2lzdGVyIGZvciBTQ0FMQVJLCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSByZWdpc3RlciBmb3IgU0NBTEFSSyBpcyBub3QgbW9kaWZpZWQgYnkgRE1BIG9yIHVzZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSByZWdpc3RlciBmb3IgU0NBTEFSSyBpcyBtb2RpZmllZCBieSBETUEgb3IgdXNlci4KKyAgICAgKiB8WzMxOjIyXSB8Q1VSVkVNICAgIHxUaGUga2V5IGxlbmd0aCBvZiBlbGxpcHRpYyBjdXJ2ZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6RUNDX1NUUworICAgICAqIE9mZnNldDogMHg4MDQgIEVDQyBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCVVNZICAgICAgfEVDQyBBY2NlbGVyYXRvciBCdXN5IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIEVDQyBhY2NlbGVyYXRvciBpcyBpZGxlIG9yIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgRUNDIGFjY2VsZXJhdG9yIGlzIHVuZGVyIHByb2Nlc3NpbmcgYW5kIHByb3RlY3RzIGFsbCByZWdpc3RlcnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVtZW1iZXIgdG8gY2xlYXIgRUNDIGludGVycnVwdCBmbGFnIGFmdGVyIEVDQyBhY2NlbGVyYXRvciBmaW5pc2hlZAorICAgICAqIHxbMV0gICAgIHxETUFCVVNZICAgfEVDQyBETUEgQnVzeSBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVDQyBETUEgaXMgaWRsZSBvciBmaW5pc2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUNDIERNQSBpcyBidXN5LgorICAgICAqIHxbMTZdICAgIHxCVVNFUlIgICAgfEVDQyBETUEgQWNjZXNzIEJ1cyBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCdXMgZXJyb3Igd2lsbCBzdG9wIERNQSBvcGVyYXRpb24gYW5kIEVDQyBhY2NlbGVyYXRvci4KKyAgICAgKiBAdmFyIENSUFRfVDo6RUNDX1gxWzE4XQorICAgICAqIE9mZnNldDogMHg4MDh+MHg4NEMgIEVDQyBUaGUgWC1jb29yZGluYXRlIHdvcmQgMH4xNyBvZiB0aGUgZmlyc3QgcG9pbnQKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxQT0lOVFgxICAgfEVDQyB0aGUgeC1jb29yZGluYXRlIFZhbHVlIG9mIHRoZSBGaXJzdCBQb2ludCAoUE9JTlRYMSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0xNjMgb3IgSy0xNjMsIFBPSU5UWDEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gxXzAwfkNSUFRfRUNDX1gxXzA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMjMzIG9yIEstMjMzLCBQT0lOVFgxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMV8wMH5DUlBUX0VDQ19YMV8wNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTI4MyBvciBLLTI4MywgUE9JTlRYMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDFfMDB+Q1JQVF9FQ0NfWDFfMDgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi00MDkgb3IgSy00MDksIFBPSU5UWDEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gxXzAwfkNSUFRfRUNDX1gxXzEyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItNTcxIG9yIEstNTcxLCBQT0lOVFgxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMV8wMH5DUlBUX0VDQ19YMV8xNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTE5MiwgUE9JTlRYMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDFfMDB+Q1JQVF9FQ0NfWDFfMDUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0yMjQsIFBPSU5UWDEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gxXzAwfkNSUFRfRUNDX1gxXzA2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMjU2LCBQT0lOVFgxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMV8wMH5DUlBUX0VDQ19YMV8wNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTM4NCwgUE9JTlRYMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDFfMDB+Q1JQVF9FQ0NfWDFfMTEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC01MjEsIFBPSU5UWDEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gxXzAwfkNSUFRfRUNDX1gxXzE2CisgICAgICogQHZhciBDUlBUX1Q6OkVDQ19ZMVsxOF0KKyAgICAgKiBPZmZzZXQ6IDB4ODUwfjB4ODk0ICBFQ0MgVGhlIFktY29vcmRpbmF0ZSB3b3JkIDB+MTcgb2YgdGhlIGZpcnN0IHBvaW50CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8UE9JTlRZMSAgIHxFQ0MgdGhlIFktY29vcmRpbmF0ZSBWYWx1ZSBvZiB0aGUgRmlyc3QgUG9pbnQgKFBPSU5UWTEpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMTYzIG9yIEstMTYzLCBQT0lOVFkxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMV8wMH5DUlBUX0VDQ19ZMV8wNQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTIzMyBvciBLLTIzMywgUE9JTlRZMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWTFfMDB+Q1JQVF9FQ0NfWTFfMDcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0yODMgb3IgSy0yODMsIFBPSU5UWTEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kxXzAwfkNSUFRfRUNDX1kxXzA4CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItNDA5IG9yIEstNDA5LCBQT0lOVFkxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMV8wMH5DUlBUX0VDQ19ZMV8xMgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTU3MSBvciBLLTU3MSwgUE9JTlRZMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWTFfMDB+Q1JQVF9FQ0NfWTFfMTcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0xOTIsIFBPSU5UWTEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kxXzAwfkNSUFRfRUNDX1kxXzA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMjI0LCBQT0lOVFkxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMV8wMH5DUlBUX0VDQ19ZMV8wNgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTI1NiwgUE9JTlRZMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWTFfMDB+Q1JQVF9FQ0NfWTFfMDcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0zODQsIFBPSU5UWTEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kxXzAwfkNSUFRfRUNDX1kxXzExCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtNTIxLCBQT0lOVFkxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMV8wMH5DUlBUX0VDQ19ZMV8xNgorICAgICAqIEB2YXIgQ1JQVF9UOjpFQ0NfWDJbMThdCisgICAgICogT2Zmc2V0OiAweDg5OH4weDhEQyAgRUNDIFRoZSBYLWNvb3JkaW5hdGUgd29yZCAwfjE3IG9mIHRoZSBzZWNvbmQgcG9pbnQKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxQT0lOVFgyICAgfEVDQyB0aGUgeC1jb29yZGluYXRlIFZhbHVlIG9mIHRoZSBTZWNvbmQgUG9pbnQgKFBPSU5UWDIpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMTYzIG9yIEstMTYzLCBQT0lOVFgyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMl8wMH5DUlBUX0VDQ19YMl8wNQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTIzMyBvciBLLTIzMywgUE9JTlRYMiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDJfMDB+Q1JQVF9FQ0NfWDJfMDcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0yODMgb3IgSy0yODMsIFBPSU5UWDIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gyXzAwfkNSUFRfRUNDX1gyXzA4CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItNDA5IG9yIEstNDA5LCBQT0lOVFgyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMl8wMH5DUlBUX0VDQ19YMl8xMgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTU3MSBvciBLLTU3MSwgUE9JTlRYMiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDJfMDB+Q1JQVF9FQ0NfWDJfMTcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0xOTIsIFBPSU5UWDIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gyXzAwfkNSUFRfRUNDX1gyXzA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMjI0LCBQT0lOVFgyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMl8wMH5DUlBUX0VDQ19YMl8wNgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTI1NiwgUE9JTlRYMiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDJfMDB+Q1JQVF9FQ0NfWDJfMDcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0zODQsIFBPSU5UWDIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gyXzAwfkNSUFRfRUNDX1gyXzExCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtNTIxLCBQT0lOVFgyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMl8wMH5DUlBUX0VDQ19YMl8xNgorICAgICAqIEB2YXIgQ1JQVF9UOjpFQ0NfWTJbMThdCisgICAgICogT2Zmc2V0OiAweDhFMH4weDkyNCAgRUNDIFRoZSBZLWNvb3JkaW5hdGUgd29yZCAwfjE3IG9mIHRoZSBzZWNvbmQgcG9pbnQKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxQT0lOVFkyICAgfEVDQyB0aGUgWS1jb29yZGluYXRlIFZhbHVlIG9mIHRoZSBTZWNvbmQgUG9pbnQgKFBPSU5UWTIpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMTYzIG9yIEstMTYzLCBQT0lOVFkyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMl8wMH5DUlBUX0VDQ19ZMl8wNQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTIzMyBvciBLLTIzMywgUE9JTlRZMiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWTJfMDB+Q1JQVF9FQ0NfWTJfMDcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0yODMgb3IgSy0yODMsIFBPSU5UWTIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kyXzAwfkNSUFRfRUNDX1kyXzA4CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItNDA5IG9yIEstNDA5LCBQT0lOVFkyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMl8wMH5DUlBUX0VDQ19ZMl8xMgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTU3MSBvciBLLTU3MSwgUE9JTlRZMiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWTJfMDB+Q1JQVF9FQ0NfWTJfMTcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0xOTIsIFBPSU5UWTIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kyXzAwfkNSUFRfRUNDX1kyXzA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMjI0LCBQT0lOVFkyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMl8wMH5DUlBUX0VDQ19ZMl8wNgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTI1NiwgUE9JTlRZMiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWTJfMDB+Q1JQVF9FQ0NfWTJfMDcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0zODQsIFBPSU5UWTIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kyXzAwfkNSUFRfRUNDX1kyXzExCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtNTIxLCBQT0lOVFkyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMl8wMH5DUlBUX0VDQ19ZMl8xNgorICAgICAqIEB2YXIgQ1JQVF9UOjpFQ0NfQVsxOF0KKyAgICAgKiBPZmZzZXQ6IDB4OTI4fjB4OTZDICBFQ0MgVGhlIHBhcmFtZXRlciBDVVJWRUEgd29yZCAwfjE3IG9mIGVsbGlwdGljIGN1cnZlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8Q1VSVkVBICAgIHxFQ0MgdGhlIFBhcmFtZXRlciBDVVJWRUEgVmFsdWUgb2YgRWxsaXB0aWMgQ3VydmUgKENVUlZFQSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZm9ybXVsYSBvZiBlbGxpcHRpYyBjdXJ2ZSBpcyB5Mj14MytDVVJWRUEqeCtDVVJWRUIgaW4gR0YocCkgYW5kIHkyK3gqeT14MytDVVJWRUEqeDIrQ1VSVkVCIGluIEdGKDJtKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0xNjMgb3IgSy0xNjMsIENVUlZFQSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQV8wMH5DUlBUX0VDQ19BXzA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMjMzIG9yIEstMjMzLCBDVVJWRUEgaXMgc3RvcmVkIGluIENSUFRfRUNDX0FfMDB+Q1JQVF9FQ0NfQV8wNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTI4MyBvciBLLTI4MywgQ1VSVkVBIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19BXzAwfkNSUFRfRUNDX0FfMDgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi00MDkgb3IgSy00MDksIENVUlZFQSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQV8wMH5DUlBUX0VDQ19BXzEyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItNTcxIG9yIEstNTcxLCBDVVJWRUEgaXMgc3RvcmVkIGluIENSUFRfRUNDX0FfMDB+Q1JQVF9FQ0NfQV8xNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTE5MiwgQ1VSVkVBIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19BXzAwfkNSUFRfRUNDX0FfMDUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0yMjQsIENVUlZFQSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQV8wMH5DUlBUX0VDQ19BXzA2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMjU2LCBDVVJWRUEgaXMgc3RvcmVkIGluIENSUFRfRUNDX0FfMDB+Q1JQVF9FQ0NfQV8wNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTM4NCwgQ1VSVkVBIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19BXzAwfkNSUFRfRUNDX0FfMTEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC01MjEsIENVUlZFQSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQV8wMH5DUlBUX0VDQ19BXzE2CisgICAgICogQHZhciBDUlBUX1Q6OkVDQ19CWzE4XQorICAgICAqIE9mZnNldDogMHg5NzB+MHg5QjQgIEVDQyBUaGUgcGFyYW1ldGVyIENVUlZFQiB3b3JkIDB+MTcgb2YgZWxsaXB0aWMgY3VydmUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDVVJWRUIgICAgfEVDQyB0aGUgUGFyYW1ldGVyIENVUlZFQiBWYWx1ZSBvZiBFbGxpcHRpYyBDdXJ2ZSAoQ1VSVkVBKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmb3JtdWxhIG9mIGVsbGlwdGljIGN1cnZlIGlzIHkyPXgzK0NVUlZFQSp4K0NVUlZFQiBpbiBHRihwKSBhbmQgeTIreCp5PXgzK0NVUlZFQSp4MitDVVJWRUIgaW4gR0YoMm0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTE2MyBvciBLLTE2MywgQ1VSVkVCIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19CXzAwfkNSUFRfRUNDX0JfMDUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0yMzMgb3IgSy0yMzMsIENVUlZFQiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQl8wMH5DUlBUX0VDQ19CXzA3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMjgzIG9yIEstMjgzLCBDVVJWRUIgaXMgc3RvcmVkIGluIENSUFRfRUNDX0JfMDB+Q1JQVF9FQ0NfQl8wOAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTQwOSBvciBLLTQwOSwgQ1VSVkVCIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19CXzAwfkNSUFRfRUNDX0JfMTIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi01MjEgb3IgSy01MjEsIENVUlZFQiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQl8wMH5DUlBUX0VDQ19CXzE3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMTkyLCBDVVJWRUIgaXMgc3RvcmVkIGluIENSUFRfRUNDX0JfMDB+Q1JQVF9FQ0NfQl8wNQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTIyNCwgQ1VSVkVCIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19CXzAwfkNSUFRfRUNDX0JfMDYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0yNTYsIENVUlZFQiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQl8wMH5DUlBUX0VDQ19CXzA3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMzg0LCBDVVJWRUIgaXMgc3RvcmVkIGluIENSUFRfRUNDX0JfMDB+Q1JQVF9FQ0NfQl8xMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTUyMSwgQ1VSVkVCIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19CXzAwfkNSUFRfRUNDX0JfMTYKKyAgICAgKiBAdmFyIENSUFRfVDo6RUNDX05bMThdCisgICAgICogT2Zmc2V0OiAweDlCOH4weDlGQyAgRUNDIFRoZSBwYXJhbWV0ZXIgQ1VSVkVOIHdvcmQgMH4xNyBvZiBlbGxpcHRpYyBjdXJ2ZQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfENVUlZFTiAgICB8RUNDIHRoZSBQYXJhbWV0ZXIgQ1VSVkVOIFZhbHVlIG9mIEVsbGlwdGljIEN1cnZlIChDVVJWRU4pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gR0YocCksIENVUlZFTiBpcyB0aGUgcHJpbWUgcC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBHRigybSksIENVUlZFTiBpcyB0aGUgaXJyZWR1Y2libGUgcG9seW5vbWlhbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0xNjMgb3IgSy0xNjMsIENVUlZFTiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfTl8wMH5DUlBUX0VDQ19OXzA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMjMzIG9yIEstMjMzLCBDVVJWRU4gaXMgc3RvcmVkIGluIENSUFRfRUNDX05fMDB+Q1JQVF9FQ0NfTl8wNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTI4MyBvciBLLTI4MywgQ1VSVkVOIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19OXzAwfkNSUFRfRUNDX05fMDgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi00MDkgb3IgSy00MDksIENVUlZFTiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfTl8wMH5DUlBUX0VDQ19OXzEyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItNTcxIG9yIEstNTcxLCBDVVJWRU4gaXMgc3RvcmVkIGluIENSUFRfRUNDX05fMDB+Q1JQVF9FQ0NfTl8xNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTE5MiwgQ1VSVkVOIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19OXzAwfkNSUFRfRUNDX05fMDUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0yMjQsIENVUlZFTiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfTl8wMH5DUlBUX0VDQ19OXzA2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMjU2LCBDVVJWRU4gaXMgc3RvcmVkIGluIENSUFRfRUNDX05fMDB+Q1JQVF9FQ0NfTl8wNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTM4NCwgQ1VSVkVOIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19OXzAwfkNSUFRfRUNDX05fMTEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC01MjEsIENVUlZFTiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfTl8wMH5DUlBUX0VDQ19OXzE2CisgICAgICogQHZhciBDUlBUX1Q6OkVDQ19LWzE4XQorICAgICAqIE9mZnNldDogMHhBMDB+MHhBNDQgIEVDQyBUaGUgc2NhbGFyIFNDQUxBUksgd29yZCAwfjE3IG9mIHBvaW50IG11bHRpcGxpY2F0aW9uCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8U0NBTEFSSyAgIHxFQ0MgdGhlIFNjYWxhciBTQ0FMQVJLIFZhbHVlIG9mIFBvaW50IE11bHRpcGxpY2F0aW9uKFNDQUxBUkspCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmVjYXVzZSB0aGUgU0NBTEFSSyB1c3VhbGx5IHN0b3JlcyB0aGUgcHJpdmF0ZSBrZXksIEVDQyBhY2NlbGVyYXRvciBkbyBub3QgYWxsb3cgdG8gcmVhZCB0aGUgcmVnaXN0ZXIgU0NBTEFSSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0xNjMgb3IgSy0xNjMsIFNDQUxBUksgaXMgc3RvcmVkIGluIENSUFRfRUNDX0tfMDB+Q1JQVF9FQ0NfS18wNQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTIzMyBvciBLLTIzMywgU0NBTEFSSyBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfS18wMH5DUlBUX0VDQ19LXzA3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMjgzIG9yIEstMjgzLCBTQ0FMQVJLIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19LXzAwfkNSUFRfRUNDX0tfMDgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi00MDkgb3IgSy00MDksIFNDQUxBUksgaXMgc3RvcmVkIGluIENSUFRfRUNDX0tfMDB+Q1JQVF9FQ0NfS18xMgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTU3MSBvciBLLTU3MSwgU0NBTEFSSyBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfS18wMH5DUlBUX0VDQ19LXzE3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMTkyLCBTQ0FMQVJLIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19LXzAwfkNSUFRfRUNDX0tfMDUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0yMjQsIFNDQUxBUksgaXMgc3RvcmVkIGluIENSUFRfRUNDX0tfMDB+Q1JQVF9FQ0NfS18wNgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTI1NiwgU0NBTEFSSyBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfS18wMH5DUlBUX0VDQ19LXzA3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMzg0LCBTQ0FMQVJLIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19LXzAwfkNSUFRfRUNDX0tfMTEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC01MjEsIFNDQUxBUksgaXMgc3RvcmVkIGluIENSUFRfRUNDX0tfMDB+Q1JQVF9FQ0NfS18xNgorICAgICAqIEB2YXIgQ1JQVF9UOjpFQ0NfU0FERFIKKyAgICAgKiBPZmZzZXQ6IDB4QTQ4ICBFQ0MgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiBAdmFyIENSUFRfVDo6RUNDX0RBRERSCisgICAgICogT2Zmc2V0OiAweEE0QyAgRUNDIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REFERFIgICAgIHxFQ0MgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgRUNDIGFjY2VsZXJhdG9yIHN1cHBvcnRzIERNQSBmdW5jdGlvbiB0byB0cmFuc2ZlciB0aGUgREFUQSBhbmQgUEFSQU1FVEVSIGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgRUNDIGFjY2VsZXJhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIERBRERSIGtlZXBzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSBvdXRwdXQgZGF0YSBvZiBFQ0MgZW5naW5lIHdpbGwgYmUgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIHRoZSBFQ0MgYWNjZWxlcmF0b3IgY2FuIHdyaXRlIHRoZSByZXN1bHQgZGF0YSBiYWNrIHRvIHN5c3RlbSBtZW1vcnkgYWZ0ZXIgdGhlIEVDQyBvcGVyYXRpb24gaXMgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2YgZGVzdGluYXRpb24gYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhhdCBpcywgYml0IDEgYW5kIDAgb2YgREFERFIgYXJlIGlnbm9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEQUREUiBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBzb2Z0d2FyZSBtdXN0IHVwZGF0ZSB0aGUgQ1JQVF9FQ0NfREFERFIgYmVmb3JlIHRyaWdnZXJpbmcgU1RBUlQKKyAgICAgKiBAdmFyIENSUFRfVDo6RUNDX1NUQVJUUkVHCisgICAgICogT2Zmc2V0OiAweEE1MCAgRUNDIFN0YXJ0aW5nIEFkZHJlc3Mgb2YgVXBkYXRlZCBSZWdpc3RlcnMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTVEFSVFJFRyAgfEVDQyBTdGFydGluZyBBZGRyZXNzIG9mIFVwZGF0ZWQgUmVnaXN0ZXJzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGFkZHJlc3Mgb2YgdGhlIHVwZGF0ZWQgcmVnaXN0ZXJzIHRoYXQgRE1BIGZlZWRzIHRoZSBmaXJzdCBkYXRhIG9yIHBhcmFtZXRlciB0byBFQ0MgZW5naW5lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBFQ0MgZW5naW5lIGlzIGFjdGl2ZSwgRUNDIGFjY2VsZXJhdG9yIGRvZXMgbm90IGFsbG93IHVzZXJzIHRvIG1vZGlmeSBTVEFSVFJFRworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBleGFtcGxlLCB3ZSB3YW50IHRvIHVwZGF0ZWQgaW5wdXQgZGF0YSBmcm9tIHJlZ2lzdGVyIENSUFRfRUNDIFBPSU5UWDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCB0aGUgdmFsdWUgb2YgU1RBUlRSRUcgaXMgMHg4MDguCisgICAgICogQHZhciBDUlBUX1Q6OkVDQ19XT1JEQ05UCisgICAgICogT2Zmc2V0OiAweEE1NCAgRUNDIERNQSBXb3JkIENvdW50CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8V09SRENOVCAgIHxFQ0MgRE1BIFdvcmQgQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9FQ0NfV09SRENOVCBrZWVwcyB0aGUgd29yZCBjb3VudCBvZiBzb3VyY2UgZGF0YSB0aGF0IGlzIGZvciB0aGUgcmVxdWlyZWQgaW5wdXQgZGF0YSBvZiBFQ0MgYWNjZWxlcmF0b3Igd2l0aCB2YXJpb3VzIG9wZXJhdGlvbnMgaW4gRE1BIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBbHRob3VnaCBDUlBUX0VDQ19XT1JEQ05UIGlzIDMyLWJpdCwgdGhlIG1heGltdW0gb2Ygd29yZCBjb3VudCBpbiBFQ0MgYWNjZWxlcmF0b3IgaXMgMTQ0IHdvcmRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9FQ0NfV09SRENOVCBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5URU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIENyeXB0byBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVFNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBDcnlwdG8gSW50ZXJydXB0IEZsYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQUk5HX0NUTDsgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gUFJORyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fTyAgdWludDMyX3QgUFJOR19TRUVEOyAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIFNlZWQgZm9yIFBSTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFBSTkdfS0VZWzhdOyAgICAgICAgICAgLyohPCBbMHgwMDEwXSB+IFsweDAwMmNdIFBSTkcgR2VuZXJhdGVkIEtleTAgfiBLZXk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFs4XTsKKyAgICBfX0kgIHVpbnQzMl90IEFFU19GREJDS1s0XTsgICAgICAgICAgLyohPCBbMHgwMDUwXSB+IFsweDAwNWNdIEFFUyBFbmdpbmUgT3V0cHV0IEZlZWRiYWNrIERhdGEgYWZ0ZXIgQ3J5cHRvZ3JhcGhpYyBPcGVyYXRpb24gICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFRERVNfRkRCQ0tIOyAgICAgICAgICAgLyohPCBbMHgwMDYwXSBUREVTL0RFUyBFbmdpbmUgT3V0cHV0IEZlZWRiYWNrIEhpZ2ggV29yZCBEYXRhIGFmdGVyIENyeXB0b2dyYXBoaWMgT3BlcmF0aW9uICovCisgICAgX19JICB1aW50MzJfdCBUREVTX0ZEQkNLTDsgICAgICAgICAgIC8qITwgWzB4MDA2NF0gVERFUy9ERVMgRW5naW5lIE91dHB1dCBGZWVkYmFjayBMb3cgV29yZCBEYXRhIGFmdGVyIENyeXB0b2dyYXBoaWMgT3BlcmF0aW9uICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVszOF07CisgICAgX19JTyB1aW50MzJfdCBBRVNfQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDEwMF0gQUVTIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQUVTX1NUUzsgICAgICAgICAgICAgICAvKiE8IFsweDAxMDRdIEFFUyBFbmdpbmUgRmxhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFU19EQVRJTjsgICAgICAgICAgICAgLyohPCBbMHgwMTA4XSBBRVMgRW5naW5lIERhdGEgSW5wdXQgUG9ydCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBBRVNfREFUT1VUOyAgICAgICAgICAgIC8qITwgWzB4MDEwY10gQUVTIEVuZ2luZSBEYXRhIE91dHB1dCBQb3J0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTMF9LRVlbOF07ICAgICAgICAgICAvKiE8IFsweDAxMTBdIH4gWzB4MDEyY10gQUVTIEtleSBXb3JkIDB+NyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzBfSVZbNF07ICAgICAgICAgICAgLyohPCBbMHgwMTMwXSB+IFsweDAxM2NdIEFFUyBJbml0aWFsIFZlY3RvciBXb3JkIDAgfiAzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMwX1NBRERSOyAgICAgICAgICAgIC8qITwgWzB4MDE0MF0gQUVTIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTMF9EQUREUjsgICAgICAgICAgICAvKiE8IFsweDAxNDRdIEFFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzBfQ05UOyAgICAgICAgICAgICAgLyohPCBbMHgwMTQ4XSBBRVMgQnl0ZSBDb3VudCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMxX0tFWVs4XTsgICAgICAgICAgIC8qITwgWzB4MDE0Y10gfiBbMHgwMTY4XSBBRVMgS2V5IFdvcmQgMH43IFJlZ2lzdGVyIGZvciBDaGFubmVsIDEgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTMV9JVls0XTsgICAgICAgICAgICAvKiE8IFsweDAxNmNdIH4gWzB4MDE3OF0gQUVTIEluaXRpYWwgVmVjdG9yIFdvcmQgMH4zIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzFfU0FERFI7ICAgICAgICAgICAgLyohPCBbMHgwMTdjXSBBRVMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMxX0RBRERSOyAgICAgICAgICAgIC8qITwgWzB4MDE4MF0gQUVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTMV9DTlQ7ICAgICAgICAgICAgICAvKiE8IFsweDAxODRdIEFFUyBCeXRlIENvdW50IFJlZ2lzdGVyIGZvciBDaGFubmVsIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzJfS0VZWzhdOyAgICAgICAgICAgLyohPCBbMHgwMTg4XSB+IFsweDAxYTRdIEFFUyBLZXkgV29yZCAwfjcgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMyX0lWWzRdOyAgICAgICAgICAgIC8qITwgWzB4MDFhOF0gfiBbMHgwMWI0XSBBRVMgSW5pdGlhbCBWZWN0b3IgV29yZCAwfjMgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTMl9TQUREUjsgICAgICAgICAgICAvKiE8IFsweDAxYjhdIEFFUyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzJfREFERFI7ICAgICAgICAgICAgLyohPCBbMHgwMWJjXSBBRVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMyX0NOVDsgICAgICAgICAgICAgIC8qITwgWzB4MDFjMF0gQUVTIEJ5dGUgQ291bnQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTM19LRVlbOF07ICAgICAgICAgICAvKiE8IFsweDAxYzRdIH4gWzB4MDFlMF0gQUVTIEtleSBXb3JkIDB+NyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzNfSVZbNF07ICAgICAgICAgICAgLyohPCBbMHgwMWU0XSB+IFsweDAxZjBdIEFFUyBJbml0aWFsIFZlY3RvciBXb3JkIDB+MyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMzX1NBRERSOyAgICAgICAgICAgIC8qITwgWzB4MDFmNF0gQUVTIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTM19EQUREUjsgICAgICAgICAgICAvKiE8IFsweDAxZjhdIEFFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzNfQ05UOyAgICAgICAgICAgICAgLyohPCBbMHgwMWZjXSBBRVMgQnl0ZSBDb3VudCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTX0NUTDsgICAgICAgICAgICAgIC8qITwgWzB4MDIwMF0gVERFUy9ERVMgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgVERFU19TVFM7ICAgICAgICAgICAgICAvKiE8IFsweDAyMDRdIFRERVMvREVTIEVuZ2luZSBGbGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMwX0tFWTFIOyAgICAgICAgICAgLyohPCBbMHgwMjA4XSBUREVTL0RFUyBLZXkgMSBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMCAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMF9LRVkxTDsgICAgICAgICAgIC8qITwgWzB4MDIwY10gVERFUy9ERVMgS2V5IDEgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMCAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzBfS0VZMkg7ICAgICAgICAgICAvKiE8IFsweDAyMTBdIFRERVMgS2V5IDIgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMwX0tFWTJMOyAgICAgICAgICAgLyohPCBbMHgwMjE0XSBUREVTIEtleSAyIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMF9LRVkzSDsgICAgICAgICAgIC8qITwgWzB4MDIxOF0gVERFUyBLZXkgMyBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzBfS0VZM0w7ICAgICAgICAgICAvKiE8IFsweDAyMWNdIFRERVMgS2V5IDMgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMwX0lWSDsgICAgICAgICAgICAgLyohPCBbMHgwMjIwXSBUREVTL0RFUyBJbml0aWFsIFZlY3RvciBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMCAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMF9JVkw7ICAgICAgICAgICAgIC8qITwgWzB4MDIyNF0gVERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMCAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzBfU0FERFI7ICAgICAgICAgICAvKiE8IFsweDAyMjhdIFRERVMvREVTIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMwX0RBRERSOyAgICAgICAgICAgICAgLyohPCBbMHgwMjJjXSBUREVTL0RFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMF9DTlQ7ICAgICAgICAgICAgIC8qITwgWzB4MDIzMF0gVERFUy9ERVMgQnl0ZSBDb3VudCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFU19EQVRJTjsgICAgICAgICAgICAvKiE8IFsweDAyMzRdIFRERVMvREVTIEVuZ2luZSBJbnB1dCBkYXRhIFdvcmQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFRERVNfREFUT1VUOyAgICAgICAgICAgLyohPCBbMHgwMjM4XSBUREVTL0RFUyBFbmdpbmUgT3V0cHV0IGRhdGEgV29yZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMlszXTsKKyAgICBfX0lPIHVpbnQzMl90IFRERVMxX0tFWTFIOyAgICAgICAgICAgLyohPCBbMHgwMjQ4XSBUREVTL0RFUyBLZXkgMSBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMV9LRVkxTDsgICAgICAgICAgIC8qITwgWzB4MDI0Y10gVERFUy9ERVMgS2V5IDEgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzFfS0VZMkg7ICAgICAgICAgICAvKiE8IFsweDAyNTBdIFRERVMgS2V5IDIgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMxX0tFWTJMOyAgICAgICAgICAgLyohPCBbMHgwMjU0XSBUREVTIEtleSAyIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMV9LRVkzSDsgICAgICAgICAgIC8qITwgWzB4MDI1OF0gVERFUyBLZXkgMyBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzFfS0VZM0w7ICAgICAgICAgICAvKiE8IFsweDAyNWNdIFRERVMgS2V5IDMgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMxX0lWSDsgICAgICAgICAgICAgLyohPCBbMHgwMjYwXSBUREVTL0RFUyBJbml0aWFsIFZlY3RvciBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMV9JVkw7ICAgICAgICAgICAgIC8qITwgWzB4MDI2NF0gVERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzFfU0FERFI7ICAgICAgICAgICAvKiE8IFsweDAyNjhdIFRERVMvREVTIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMxX0RBRERSOyAgICAgICAgICAgLyohPCBbMHgwMjZjXSBUREVTL0RFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMV9DTlQ7ICAgICAgICAgICAgIC8qITwgWzB4MDI3MF0gVERFUy9ERVMgQnl0ZSBDb3VudCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTNbNV07CisgICAgX19JTyB1aW50MzJfdCBUREVTMl9LRVkxSDsgICAgICAgICAgIC8qITwgWzB4MDI4OF0gVERFUy9ERVMgS2V5IDEgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzJfS0VZMUw7ICAgICAgICAgICAvKiE8IFsweDAyOGNdIFRERVMvREVTIEtleSAxIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMyX0tFWTJIOyAgICAgICAgICAgLyohPCBbMHgwMjkwXSBUREVTIEtleSAyIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMl9LRVkyTDsgICAgICAgICAgIC8qITwgWzB4MDI5NF0gVERFUyBLZXkgMiBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzJfS0VZM0g7ICAgICAgICAgICAvKiE8IFsweDAyOThdIFRERVMgS2V5IDMgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMyX0tFWTNMOyAgICAgICAgICAgLyohPCBbMHgwMjljXSBUREVTIEtleSAzIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMl9JVkg7ICAgICAgICAgICAgIC8qITwgWzB4MDJhMF0gVERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzJfSVZMOyAgICAgICAgICAgICAvKiE8IFsweDAyYTRdIFRERVMvREVTIEluaXRpYWwgVmVjdG9yIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMyX1NBRERSOyAgICAgICAgICAgLyohPCBbMHgwMmE4XSBUREVTL0RFUyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMl9EQUREUjsgICAgICAgICAgIC8qITwgWzB4MDJhY10gVERFUy9ERVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzJfQ05UOyAgICAgICAgICAgICAvKiE8IFsweDAyYjBdIFRERVMvREVTIEJ5dGUgQ291bnQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU0WzVdOworICAgIF9fSU8gdWludDMyX3QgVERFUzNfS0VZMUg7ICAgICAgICAgICAvKiE8IFsweDAyYzhdIFRERVMvREVTIEtleSAxIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMzX0tFWTFMOyAgICAgICAgICAgLyohPCBbMHgwMmNjXSBUREVTL0RFUyBLZXkgMSBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTM19LRVkySDsgICAgICAgICAgIC8qITwgWzB4MDJkMF0gVERFUyBLZXkgMiBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMyAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzNfS0VZMkw7ICAgICAgICAgICAvKiE8IFsweDAyZDRdIFRERVMgS2V5IDIgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMzX0tFWTNIOyAgICAgICAgICAgLyohPCBbMHgwMmQ4XSBUREVTIEtleSAzIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTM19LRVkzTDsgICAgICAgICAgIC8qITwgWzB4MDJkY10gVERFUyBLZXkgMyBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzNfSVZIOyAgICAgICAgICAgICAvKiE8IFsweDAyZTBdIFRERVMvREVTIEluaXRpYWwgVmVjdG9yIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMzX0lWTDsgICAgICAgICAgICAgLyohPCBbMHgwMmU0XSBUREVTL0RFUyBJbml0aWFsIFZlY3RvciBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTM19TQUREUjsgICAgICAgICAgIC8qITwgWzB4MDJlOF0gVERFUy9ERVMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzNfREFERFI7ICAgICAgICAgICAvKiE8IFsweDAyZWNdIFRERVMvREVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMzX0NOVDsgICAgICAgICAgICAgLyohPCBbMHgwMmYwXSBUREVTL0RFUyBCeXRlIENvdW50IFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFNVszXTsKKyAgICBfX0lPIHVpbnQzMl90IEhNQUNfQ1RMOyAgICAgICAgICAgICAgLyohPCBbMHgwMzAwXSBTSEEvSE1BQyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBITUFDX1NUUzsgICAgICAgICAgICAgIC8qITwgWzB4MDMwNF0gU0hBL0hNQUMgU3RhdHVzIEZsYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgSE1BQ19ER1NUWzE2XTsgICAgICAgICAvKiE8IFsweDAzMDhdIH4gWzB4MDM0NF0gU0hBL0hNQUMgRGlnZXN0IE1lc3NhZ2UgMH4xNSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhNQUNfS0VZQ05UOyAgICAgICAgICAgLyohPCBbMHgwMzQ4XSBTSEEvSE1BQyBLZXkgQnl0ZSBDb3VudCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBITUFDX1NBRERSOyAgICAgICAgICAgIC8qITwgWzB4MDM0Y10gU0hBL0hNQUMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSE1BQ19ETUFDTlQ7ICAgICAgICAgICAvKiE8IFsweDAzNTBdIFNIQS9ITUFDIEJ5dGUgQ291bnQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhNQUNfREFUSU47ICAgICAgICAgICAgLyohPCBbMHgwMzU0XSBTSEEvSE1BQyBFbmdpbmUgTm9uLURNQSBNb2RlIERhdGEgSW5wdXQgUG9ydCBSZWdpc3RlciAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFNlsyOThdOworICAgIF9fSU8gdWludDMyX3QgRUNDX0NUTDsgICAgICAgICAgICAgICAvKiE8IFsweDA4MDBdIEVDQyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEVDQ19TVFM7ICAgICAgICAgICAgICAgLyohPCBbMHgwODA0XSBFQ0MgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBFQ0NfWDFbMThdOyAgICAgICAgICAgIC8qITwgWzB4MDgwOF0gfiBbMHgwODRjXSBFQ0MgVGhlIFgtY29vcmRpbmF0ZSB3b3JkIDB+MTcgb2YgdGhlIGZpcnN0IHBvaW50ICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRUNDX1kxWzE4XTsgICAgICAgICAgICAvKiE8IFsweDA4NTBdIH4gWzB4MDg5NF0gRUNDIFRoZSBZLWNvb3JkaW5hdGUgd29yZCAwfjE3IG9mIHRoZSBmaXJzdCBwb2ludCAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEVDQ19YMlsxOF07ICAgICAgICAgICAgLyohPCBbMHgwODk4XSB+IFsweDA4ZGNdIEVDQyBUaGUgWC1jb29yZGluYXRlIHdvcmQgMH4xNyBvZiB0aGUgc2Vjb25kIHBvaW50ICAgICovCisgICAgX19JTyB1aW50MzJfdCBFQ0NfWTJbMThdOyAgICAgICAgICAgIC8qITwgWzB4MDhlMF0gfiBbMHgwOTI0XSBFQ0MgVGhlIFktY29vcmRpbmF0ZSB3b3JkIDB+MTcgb2YgdGhlIHNlY29uZCBwb2ludCAgICAqLworICAgIF9fSU8gdWludDMyX3QgRUNDX0FbMThdOyAgICAgICAgICAgICAvKiE8IFsweDA5MjhdIH4gWzB4MDk2Y10gRUNDIFRoZSBwYXJhbWV0ZXIgQ1VSVkVBIHdvcmQgMH4xNyBvZiBlbGxpcHRpYyBjdXJ2ZSAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEVDQ19CWzE4XTsgICAgICAgICAgICAgLyohPCBbMHgwOTcwXSB+IFsweDA5YjRdIEVDQyBUaGUgcGFyYW1ldGVyIENVUlZFQiB3b3JkIDB+MTcgb2YgZWxsaXB0aWMgY3VydmUgICovCisgICAgX19JTyB1aW50MzJfdCBFQ0NfTlsxOF07ICAgICAgICAgICAgIC8qITwgWzB4MDliOF0gfiBbMHgwOWZjXSBFQ0MgVGhlIHBhcmFtZXRlciBDVVJWRU4gd29yZCAwfjE3IG9mIGVsbGlwdGljIGN1cnZlICAqLworICAgIF9fTyAgdWludDMyX3QgRUNDX0tbMThdOyAgICAgICAgICAgICAvKiE8IFsweDBhMDBdIH4gWzB4MGE0NF0gRUNDIFRoZSBzY2FsYXIgU0NBTEFSSyB3b3JkIDB+MTcgb2YgcG9pbnQgbXVsdGlwbGljYXRpb24gKi8KKyAgICBfX0lPIHVpbnQzMl90IEVDQ19TQUREUjsgICAgICAgICAgICAgLyohPCBbMHgwYTQ4XSBFQ0MgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBFQ0NfREFERFI7ICAgICAgICAgICAgIC8qITwgWzB4MGE0Y10gRUNDIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRUNDX1NUQVJUUkVHOyAgICAgICAgICAvKiE8IFsweDBhNTBdIEVDQyBTdGFydGluZyBBZGRyZXNzIG9mIFVwZGF0ZWQgUmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEVDQ19XT1JEQ05UOyAgICAgICAgICAgLyohPCBbMHgwYTU0XSBFQ0MgRE1BIFdvcmQgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gQ1JQVF9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBDUlBUX0NPTlNUIENSUFQgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgQ1JQVCBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIENSUFRfSU5URU5fQUVTSUVOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVEVOOiBBRVNJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX0lOVEVOX0FFU0lFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9JTlRFTl9BRVNJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRFTjogQUVTSUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0lOVEVOX0FFU0VJRU5fUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRFTjogQUVTRUlFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9JTlRFTl9BRVNFSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSU5URU5fQUVTRUlFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5URU46IEFFU0VJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9JTlRFTl9UREVTSUVOX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5URU46IFRERVNJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfSU5URU5fVERFU0lFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0lOVEVOX1RERVNJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVEVOOiBUREVTSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSU5URU5fVERFU0VJRU5fUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVEVOOiBUREVTRUlFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX0lOVEVOX1RERVNFSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9JTlRFTl9UREVTRUlFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRFTjogVERFU0VJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0lOVEVOX1BSTkdJRU5fUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRFTjogUFJOR0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9JTlRFTl9QUk5HSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSU5URU5fUFJOR0lFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5URU46IFBSTkdJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9JTlRFTl9FQ0NJRU5fUG9zICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5URU46IEVDQ0lFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfSU5URU5fRUNDSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0lOVEVOX0VDQ0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVEVOOiBFQ0NJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSU5URU5fRUNDRUlFTl9Qb3MgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVEVOOiBFQ0NFSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0lOVEVOX0VDQ0VJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9JTlRFTl9FQ0NFSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRFTjogRUNDRUlFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0lOVEVOX0hNQUNJRU5fUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRFTjogSE1BQ0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9JTlRFTl9ITUFDSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSU5URU5fSE1BQ0lFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5URU46IEhNQUNJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9JTlRFTl9ITUFDRUlFTl9Qb3MgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5URU46IEhNQUNFSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfSU5URU5fSE1BQ0VJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDUlBUX0lOVEVOX0hNQUNFSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVEVOOiBITUFDRUlFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSU5UU1RTX0FFU0lGX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVFNUUzogQUVTSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX0lOVFNUU19BRVNJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9JTlRTVFNfQUVTSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRTVFM6IEFFU0lGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0lOVFNUU19BRVNFSUZfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRTVFM6IEFFU0VJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9JTlRTVFNfQUVTRUlGX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSU5UU1RTX0FFU0VJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5UU1RTOiBBRVNFSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9JTlRTVFNfVERFU0lGX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5UU1RTOiBUREVTSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfSU5UU1RTX1RERVNJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0lOVFNUU19UREVTSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVFNUUzogVERFU0lGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSU5UU1RTX1RERVNFSUZfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVFNUUzogVERFU0VJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX0lOVFNUU19UREVTRUlGX01zayAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9JTlRTVFNfVERFU0VJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRTVFM6IFRERVNFSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0lOVFNUU19QUk5HSUZfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRTVFM6IFBSTkdJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9JTlRTVFNfUFJOR0lGX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSU5UU1RTX1BSTkdJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5UU1RTOiBQUk5HSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9JTlRTVFNfRUNDSUZfUG9zICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5UU1RTOiBFQ0NJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfSU5UU1RTX0VDQ0lGX01zayAgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0lOVFNUU19FQ0NJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVFNUUzogRUNDSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSU5UU1RTX0VDQ0VJRl9Qb3MgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVFNUUzogRUNDRUlGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0lOVFNUU19FQ0NFSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9JTlRTVFNfRUNDRUlGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRTVFM6IEVDQ0VJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0lOVFNUU19ITUFDSUZfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRTVFM6IEhNQUNJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9JTlRTVFNfSE1BQ0lGX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSU5UU1RTX0hNQUNJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5UU1RTOiBITUFDSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9JTlRTVFNfSE1BQ0VJRl9Qb3MgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5UU1RTOiBITUFDRUlGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfSU5UU1RTX0hNQUNFSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBDUlBUX0lOVFNUU19ITUFDRUlGX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVFNUUzogSE1BQ0VJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfUFJOR19DVExfU1RBUlRfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlBSTkdfQ1RMOiBTVEFSVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX1BSTkdfQ1RMX1NUQVJUX01zayAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9QUk5HX0NUTF9TVEFSVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpQUk5HX0NUTDogU1RBUlQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1BSTkdfQ1RMX1NFRURSTERfUG9zICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpQUk5HX0NUTDogU0VFRFJMRCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9QUk5HX0NUTF9TRUVEUkxEX01zayAgICAgICAgKDB4MXVsIDw8IENSUFRfUFJOR19DVExfU0VFRFJMRF9Qb3MpICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6UFJOR19DVEw6IFNFRURSTEQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9QUk5HX0NUTF9LRVlTWl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6UFJOR19DVEw6IEtFWVNaIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfUFJOR19DVExfS0VZU1pfTXNrICAgICAgICAgICgweDN1bCA8PCBDUlBUX1BSTkdfQ1RMX0tFWVNaX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlBSTkdfQ1RMOiBLRVlTWiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfUFJOR19DVExfQlVTWV9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlBSTkdfQ1RMOiBCVVNZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX1BSTkdfQ1RMX0JVU1lfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9QUk5HX0NUTF9CVVNZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpQUk5HX0NUTDogQlVTWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1BSTkdfU0VFRF9TRUVEX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpQUk5HX1NFRUQ6IFNFRUQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9QUk5HX1NFRURfU0VFRF9Nc2sgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1BSTkdfU0VFRF9TRUVEX1BvcykgICAgICAgICAvKiE8IENSUFRfVDo6UFJOR19TRUVEOiBTRUVEIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9QUk5HX0tFWXhfS0VZX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6UFJOR19LRVlbOF06IEtFWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9QUk5HX0tFWXhfS0VZX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1BSTkdfS0VZeF9LRVlfUG9zKSAgICAgICAgICAvKiE8IENSUFRfVDo6UFJOR19LRVlbOF06IEtFWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19GREJDS3hfRkRCQ0tfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfRkRCQ0tbNF06IEZEQkNLIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX0FFU19GREJDS3hfRkRCQ0tfTXNrICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTX0ZEQkNLeF9GREJDS19Qb3MpICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfRkRCQ0tbNF06IEZEQkNLIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19GREJDS0hfRkRCQ0tfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfRkRCQ0tIOiBGREJDSyBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDUlBUX1RERVNfRkRCQ0tIX0ZEQkNLX01zayAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFU19GREJDS0hfRkRCQ0tfUG9zKSAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0ZEQkNLSDogRkRCQ0sgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfRkRCQ0tMX0ZEQkNLX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0ZEQkNLTDogRkRCQ0sgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0ZEQkNLTF9GREJDS19Nc2sgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVNfRkRCQ0tMX0ZEQkNLX1BvcykgICAgICAvKiE8IENSUFRfVDo6VERFU19GREJDS0w6IEZEQkNLIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX1NUQVJUX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogU1RBUlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTX0NUTF9TVEFSVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0FFU19DVExfU1RBUlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IFNUQVJUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX0NUTF9TVE9QX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IFNUT1AgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX0FFU19DVExfU1RPUF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9BRVNfQ1RMX1NUT1BfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBTVE9QIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19DVExfS0VZU1pfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBLRVlTWiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX0tFWVNaX01zayAgICAgICAgICAgKDB4M3VsIDw8IENSUFRfQUVTX0NUTF9LRVlTWl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogS0VZU1ogTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX0RNQUxBU1RfUG9zICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogRE1BTEFTVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfQUVTX0NUTF9ETUFMQVNUX01zayAgICAgICAgICgweDF1bCA8PCBDUlBUX0FFU19DVExfRE1BTEFTVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IERNQUxBU1QgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX0NUTF9ETUFDU0NBRF9Qb3MgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IERNQUNTQ0FEIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX0FFU19DVExfRE1BQ1NDQURfTXNrICAgICAgICAoMHgxdWwgPDwgQ1JQVF9BRVNfQ1RMX0RNQUNTQ0FEX1BvcykgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBETUFDU0NBRCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19DVExfRE1BRU5fUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBETUFFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX0RNQUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfQUVTX0NUTF9ETUFFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogRE1BRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX09QTU9ERV9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogT1BNT0RFIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTX0NUTF9PUE1PREVfTXNrICAgICAgICAgICgweGZmdWwgPDwgQ1JQVF9BRVNfQ1RMX09QTU9ERV9Qb3MpICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IE9QTU9ERSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX0NUTF9FTkNSUFRfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IEVOQ1JQVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX0FFU19DVExfRU5DUlBUX01zayAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9BRVNfQ1RMX0VOQ1JQVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBFTkNSUFQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19DVExfT1VUU1dBUF9Qb3MgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBPVVRTV0FQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX09VVFNXQVBfTXNrICAgICAgICAgKDB4MXVsIDw8IENSUFRfQUVTX0NUTF9PVVRTV0FQX1BvcykgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogT1VUU1dBUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX0lOU1dBUF9Qb3MgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogSU5TV0FQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTX0NUTF9JTlNXQVBfTXNrICAgICAgICAgICgweDF1bCA8PCBDUlBUX0FFU19DVExfSU5TV0FQX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IElOU1dBUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX0NUTF9DSEFOTkVMX1BvcyAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IENIQU5ORUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX0FFU19DVExfQ0hBTk5FTF9Nc2sgICAgICAgICAoMHgzdWwgPDwgQ1JQVF9BRVNfQ1RMX0NIQU5ORUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBDSEFOTkVMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19DVExfS0VZVU5QUlRfUG9zICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBLRVlVTlBSVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX0tFWVVOUFJUX01zayAgICAgICAgKDB4MWZ1bCA8PCBDUlBUX0FFU19DVExfS0VZVU5QUlRfUG9zKSAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogS0VZVU5QUlQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX0tFWVBSVF9Qb3MgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogS0VZUFJUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTX0NUTF9LRVlQUlRfTXNrICAgICAgICAgICgweDF1bCA8PCBDUlBUX0FFU19DVExfS0VZUFJUX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IEtFWVBSVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX1NUU19CVVNZX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19TVFM6IEJVU1kgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX0FFU19TVFNfQlVTWV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9BRVNfU1RTX0JVU1lfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfU1RTOiBCVVNZIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19TVFNfSU5CVUZFTVBUWV9Qb3MgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfU1RTOiBJTkJVRkVNUFRZIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfU1RTX0lOQlVGRU1QVFlfTXNrICAgICAgKDB4MXVsIDw8IENSUFRfQUVTX1NUU19JTkJVRkVNUFRZX1BvcykgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX1NUUzogSU5CVUZFTVBUWSBNYXNrICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfU1RTX0lOQlVGRlVMTF9Qb3MgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX1NUUzogSU5CVUZGVUxMIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENSUFRfQUVTX1NUU19JTkJVRkZVTExfTXNrICAgICAgICgweDF1bCA8PCBDUlBUX0FFU19TVFNfSU5CVUZGVUxMX1BvcykgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19TVFM6IElOQlVGRlVMTCBNYXNrICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX1NUU19JTkJVRkVSUl9Qb3MgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19TVFM6IElOQlVGRVJSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX0FFU19TVFNfSU5CVUZFUlJfTXNrICAgICAgICAoMHgxdWwgPDwgQ1JQVF9BRVNfU1RTX0lOQlVGRVJSX1BvcykgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfU1RTOiBJTkJVRkVSUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19TVFNfQ05URVJSX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfU1RTOiBDTlRFUlIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfU1RTX0NOVEVSUl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENSUFRfQUVTX1NUU19DTlRFUlJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX1NUUzogQ05URVJSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfU1RTX09VVEJVRkVNUFRZX1BvcyAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX1NUUzogT1VUQlVGRU1QVFkgUG9zaXRpb24gICovCisjZGVmaW5lIENSUFRfQUVTX1NUU19PVVRCVUZFTVBUWV9Nc2sgICAgICgweDF1bCA8PCBDUlBUX0FFU19TVFNfT1VUQlVGRU1QVFlfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19TVFM6IE9VVEJVRkVNUFRZIE1hc2sgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX1NUU19PVVRCVUZGVUxMX1BvcyAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19TVFM6IE9VVEJVRkZVTEwgUG9zaXRpb24gICAqLworI2RlZmluZSBDUlBUX0FFU19TVFNfT1VUQlVGRlVMTF9Nc2sgICAgICAoMHgxdWwgPDwgQ1JQVF9BRVNfU1RTX09VVEJVRkZVTExfUG9zKSAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfU1RTOiBPVVRCVUZGVUxMIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19TVFNfT1VUQlVGRVJSX1BvcyAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfU1RTOiBPVVRCVUZFUlIgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfU1RTX09VVEJVRkVSUl9Nc2sgICAgICAgKDB4MXVsIDw8IENSUFRfQUVTX1NUU19PVVRCVUZFUlJfUG9zKSAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX1NUUzogT1VUQlVGRVJSIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfU1RTX0JVU0VSUl9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX1NUUzogQlVTRVJSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTX1NUU19CVVNFUlJfTXNrICAgICAgICAgICgweDF1bCA8PCBDUlBUX0FFU19TVFNfQlVTRVJSX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19TVFM6IEJVU0VSUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX0RBVElOX0RBVElOX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19EQVRJTjogREFUSU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX0FFU19EQVRJTl9EQVRJTl9Nc2sgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTX0RBVElOX0RBVElOX1BvcykgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfREFUSU46IERBVElOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19EQVRPVVRfREFUT1VUX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfREFUT1VUOiBEQVRPVVQgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfREFUT1VUX0RBVE9VVF9Nc2sgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFU19EQVRPVVRfREFUT1VUX1BvcykgICAgICAvKiE8IENSUFRfVDo6QUVTX0RBVE9VVDogREFUT1VUIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMwX0tFWXhfS0VZX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMF9LRVlbOF06IEtFWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMwX0tFWXhfS0VZX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzBfS0VZeF9LRVlfUG9zKSAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMF9LRVlbOF06IEtFWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzBfSVZ4X0lWX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMwX0lWWzRdOiBJViBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDUlBUX0FFUzBfSVZ4X0lWX01zayAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTMF9JVnhfSVZfUG9zKSAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMwX0lWWzRdOiBJViBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTMF9TQUREUl9TQUREUl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzBfU0FERFI6IFNBRERSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX0FFUzBfU0FERFJfU0FERFJfTXNrICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTMF9TQUREUl9TQUREUl9Qb3MpICAgICAgIC8qITwgQ1JQVF9UOjpBRVMwX1NBRERSOiBTQUREUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzBfREFERFJfREFERFJfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMwX0RBRERSOiBEQUREUiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMwX0RBRERSX0RBRERSX01zayAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzBfREFERFJfREFERFJfUG9zKSAgICAgICAvKiE8IENSUFRfVDo6QUVTMF9EQUREUjogREFERFIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMwX0NOVF9DTlRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMF9DTlQ6IENOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTMF9DTlRfQ05UX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVMwX0NOVF9DTlRfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzBfQ05UOiBDTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTMV9LRVl4X0tFWV9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzFfS0VZWzhdOiBLRVkgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTMV9LRVl4X0tFWV9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVMxX0tFWXhfS0VZX1BvcykgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzFfS0VZWzhdOiBLRVkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMxX0lWeF9JVl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMV9JVls0XTogSVYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMxX0lWeF9JVl9Nc2sgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzFfSVZ4X0lWX1BvcykgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMV9JVls0XTogSVYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzFfU0FERFJfU0FERFJfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMxX1NBRERSOiBTQUREUiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMxX1NBRERSX1NBRERSX01zayAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzFfU0FERFJfU0FERFJfUG9zKSAgICAgICAvKiE8IENSUFRfVDo6QUVTMV9TQUREUjogU0FERFIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMxX0RBRERSX0RBRERSX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMV9EQUREUjogREFERFIgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfQUVTMV9EQUREUl9EQUREUl9Nc2sgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVMxX0RBRERSX0RBRERSX1BvcykgICAgICAgLyohPCBDUlBUX1Q6OkFFUzFfREFERFI6IERBRERSIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTMV9DTlRfQ05UX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzFfQ05UOiBDTlQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX0FFUzFfQ05UX0NOVF9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTMV9DTlRfQ05UX1BvcykgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMxX0NOVDogQ05UIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzJfS0VZeF9LRVlfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMyX0tFWXg6IEtFWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMyX0tFWXhfS0VZX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzJfS0VZeF9LRVlfUG9zKSAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMl9LRVl4OiBLRVkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMyX0lWeF9JVl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMl9JVng6IElWIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTMl9JVnhfSVZfTXNrICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVMyX0lWeF9JVl9Qb3MpICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzJfSVZ4OiBJViBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTMl9TQUREUl9TQUREUl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzJfU0FERFI6IFNBRERSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX0FFUzJfU0FERFJfU0FERFJfTXNrICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTMl9TQUREUl9TQUREUl9Qb3MpICAgICAgIC8qITwgQ1JQVF9UOjpBRVMyX1NBRERSOiBTQUREUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzJfREFERFJfREFERFJfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMyX0RBRERSOiBEQUREUiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMyX0RBRERSX0RBRERSX01zayAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzJfREFERFJfREFERFJfUG9zKSAgICAgICAvKiE8IENSUFRfVDo6QUVTMl9EQUREUjogREFERFIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMyX0NOVF9DTlRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMl9DTlQ6IENOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTMl9DTlRfQ05UX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVMyX0NOVF9DTlRfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzJfQ05UOiBDTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTM19LRVl4X0tFWV9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzNfS0VZWzhdOiBLRVkgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTM19LRVl4X0tFWV9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVMzX0tFWXhfS0VZX1BvcykgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzNfS0VZWzhdOiBLRVkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMzX0lWeF9JVl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTM19JVls0XTogSVYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMzX0lWeF9JVl9Nc2sgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzNfSVZ4X0lWX1BvcykgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTM19JVls0XTogSVYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzNfU0FERFJfU0FERFJfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMzX1NBRERSOiBTQUREUiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMzX1NBRERSX1NBRERSX01zayAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzNfU0FERFJfU0FERFJfUG9zKSAgICAgICAvKiE8IENSUFRfVDo6QUVTM19TQUREUjogU0FERFIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMzX0RBRERSX0RBRERSX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTM19EQUREUjogREFERFIgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfQUVTM19EQUREUl9EQUREUl9Nc2sgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVMzX0RBRERSX0RBRERSX1BvcykgICAgICAgLyohPCBDUlBUX1Q6OkFFUzNfREFERFI6IERBRERSIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTM19DTlRfQ05UX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzNfQ05UOiBDTlQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX0FFUzNfQ05UX0NOVF9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTM19DTlRfQ05UX1BvcykgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMzX0NOVDogQ05UIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfQ1RMX1NUQVJUX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogU1RBUlQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9TVEFSVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENSUFRfVERFU19DVExfU1RBUlRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IFNUQVJUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9TVE9QX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IFNUT1AgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfVERFU19DVExfU1RPUF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDUlBUX1RERVNfQ1RMX1NUT1BfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBTVE9QIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19DVExfVE1PREVfUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBUTU9ERSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVNfQ1RMX1RNT0RFX01zayAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX0NUTF9UTU9ERV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogVE1PREUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfQ1RMXzNLRVlTX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogM0tFWVMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF8zS0VZU19Nc2sgICAgICAgICAgKDB4MXVsIDw8IENSUFRfVERFU19DVExfM0tFWVNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IDNLRVlTIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9ETUFMQVNUX1BvcyAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IERNQUxBU1QgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfVERFU19DVExfRE1BTEFTVF9Nc2sgICAgICAgICgweDF1bCA8PCBDUlBUX1RERVNfQ1RMX0RNQUxBU1RfUG9zKSAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBETUFMQVNUIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19DVExfRE1BQ1NDQURfUG9zICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBETUFDU0NBRCBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDUlBUX1RERVNfQ1RMX0RNQUNTQ0FEX01zayAgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX0NUTF9ETUFDU0NBRF9Qb3MpICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogRE1BQ1NDQUQgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfQ1RMX0RNQUVOX1BvcyAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogRE1BRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9ETUFFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENSUFRfVERFU19DVExfRE1BRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IERNQUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9PUE1PREVfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IE9QTU9ERSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfVERFU19DVExfT1BNT0RFX01zayAgICAgICAgICgweDd1bCA8PCBDUlBUX1RERVNfQ1RMX09QTU9ERV9Qb3MpICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBPUE1PREUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19DVExfRU5DUlBUX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBFTkNSUFQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX1RERVNfQ1RMX0VOQ1JQVF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX0NUTF9FTkNSUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogRU5DUlBUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfQ1RMX0JMS1NXQVBfUG9zICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogQkxLU1dBUCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9CTEtTV0FQX01zayAgICAgICAgKDB4MXVsIDw8IENSUFRfVERFU19DVExfQkxLU1dBUF9Qb3MpICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IEJMS1NXQVAgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9PVVRTV0FQX1BvcyAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IE9VVFNXQVAgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfVERFU19DVExfT1VUU1dBUF9Nc2sgICAgICAgICgweDF1bCA8PCBDUlBUX1RERVNfQ1RMX09VVFNXQVBfUG9zKSAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBPVVRTV0FQIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19DVExfSU5TV0FQX1BvcyAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBJTlNXQVAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX1RERVNfQ1RMX0lOU1dBUF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX0NUTF9JTlNXQVBfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogSU5TV0FQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfQ1RMX0NIQU5ORUxfUG9zICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogQ0hBTk5FTCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9DSEFOTkVMX01zayAgICAgICAgKDB4M3VsIDw8IENSUFRfVERFU19DVExfQ0hBTk5FTF9Qb3MpICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IENIQU5ORUwgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9LRVlVTlBSVF9Qb3MgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IEtFWVVOUFJUIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENSUFRfVERFU19DVExfS0VZVU5QUlRfTXNrICAgICAgICgweDFmdWwgPDwgQ1JQVF9UREVTX0NUTF9LRVlVTlBSVF9Qb3MpICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBLRVlVTlBSVCBNYXNrICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19DVExfS0VZUFJUX1BvcyAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBLRVlQUlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX1RERVNfQ1RMX0tFWVBSVF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX0NUTF9LRVlQUlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogS0VZUFJUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfU1RTX0JVU1lfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX1NUUzogQlVTWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX1NUU19CVVNZX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfVERFU19TVFNfQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19TVFM6IEJVU1kgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX1NUU19JTkJVRkVNUFRZX1BvcyAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19TVFM6IElOQlVGRU1QVFkgUG9zaXRpb24gICovCisjZGVmaW5lIENSUFRfVERFU19TVFNfSU5CVUZFTVBUWV9Nc2sgICAgICgweDF1bCA8PCBDUlBUX1RERVNfU1RTX0lOQlVGRU1QVFlfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfU1RTOiBJTkJVRkVNUFRZIE1hc2sgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19TVFNfSU5CVUZGVUxMX1BvcyAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfU1RTOiBJTkJVRkZVTEwgUG9zaXRpb24gICAqLworI2RlZmluZSBDUlBUX1RERVNfU1RTX0lOQlVGRlVMTF9Nc2sgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX1NUU19JTkJVRkZVTExfUG9zKSAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX1NUUzogSU5CVUZGVUxMIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfU1RTX0lOQlVGRVJSX1BvcyAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX1NUUzogSU5CVUZFUlIgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX1NUU19JTkJVRkVSUl9Nc2sgICAgICAgKDB4MXVsIDw8IENSUFRfVERFU19TVFNfSU5CVUZFUlJfUG9zKSAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19TVFM6IElOQlVGRVJSIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX1NUU19PVVRCVUZFTVBUWV9Qb3MgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19TVFM6IE9VVEJVRkVNUFRZIFBvc2l0aW9uICovCisjZGVmaW5lIENSUFRfVERFU19TVFNfT1VUQlVGRU1QVFlfTXNrICAgICgweDF1bCA8PCBDUlBUX1RERVNfU1RTX09VVEJVRkVNUFRZX1BvcykgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfU1RTOiBPVVRCVUZFTVBUWSBNYXNrICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19TVFNfT1VUQlVGRlVMTF9Qb3MgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfU1RTOiBPVVRCVUZGVUxMIFBvc2l0aW9uICAqLworI2RlZmluZSBDUlBUX1RERVNfU1RTX09VVEJVRkZVTExfTXNrICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX1NUU19PVVRCVUZGVUxMX1BvcykgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX1NUUzogT1VUQlVGRlVMTCBNYXNrICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfU1RTX09VVEJVRkVSUl9Qb3MgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX1NUUzogT1VUQlVGRVJSIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX1NUU19PVVRCVUZFUlJfTXNrICAgICAgKDB4MXVsIDw8IENSUFRfVERFU19TVFNfT1VUQlVGRVJSX1BvcykgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19TVFM6IE9VVEJVRkVSUiBNYXNrICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX1NUU19CVVNFUlJfUG9zICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19TVFM6IEJVU0VSUiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfVERFU19TVFNfQlVTRVJSX01zayAgICAgICAgICgweDF1bCA8PCBDUlBUX1RERVNfU1RTX0JVU0VSUl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfU1RTOiBCVVNFUlIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzBfS0VZeEhfS0VZX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMwX0tFWXhIOiBLRVkgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX1RERVMwX0tFWXhIX0tFWV9Nc2sgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzBfS0VZeEhfS0VZX1BvcykgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMF9LRVl4SDogS0VZIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMwX0tFWXhMX0tFWV9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMF9LRVl4TDogS0VZIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMF9LRVl4TF9LRVlfTXNrICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMwX0tFWXhMX0tFWV9Qb3MpICAgICAgICAvKiE8IENSUFRfVDo6VERFUzBfS0VZeEw6IEtFWSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMF9JVkhfSVZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzBfSVZIOiBJViBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzBfSVZIX0lWX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMF9JVkhfSVZfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMwX0lWSDogSVYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzBfSVZMX0lWX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMwX0lWTDogSVYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVMwX0lWTF9JVl9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzBfSVZMX0lWX1BvcykgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMF9JVkw6IElWIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMwX1NBRERSX1NBRERSX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMF9TQUREUjogU0FERFIgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMF9TQUREUl9TQUREUl9Nc2sgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMwX1NBRERSX1NBRERSX1BvcykgICAgICAvKiE8IENSUFRfVDo6VERFUzBfU0FERFI6IFNBRERSIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMF9EQUREUl9EQUREUl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzBfREFERFI6IERBRERSIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENSUFRfVERFUzBfREFERFJfREFERFJfTXNrICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMF9EQUREUl9EQUREUl9Qb3MpICAgICAgLyohPCBDUlBUX1Q6OlRERVMwX0RBRERSOiBEQUREUiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzBfQ05UX0NOVF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMwX0NOVDogQ05UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVMwX0NOVF9DTlRfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzBfQ05UX0NOVF9Qb3MpICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMF9DTlQ6IENOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfREFUSU5fREFUSU5fUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0RBVElOOiBEQVRJTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0RBVElOX0RBVElOX01zayAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVNfREFUSU5fREFUSU5fUG9zKSAgICAgICAvKiE8IENSUFRfVDo6VERFU19EQVRJTjogREFUSU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX0RBVE9VVF9EQVRPVVRfUG9zICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19EQVRPVVQ6IERBVE9VVCBQb3NpdGlvbiAgICovCisjZGVmaW5lIENSUFRfVERFU19EQVRPVVRfREFUT1VUX01zayAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTX0RBVE9VVF9EQVRPVVRfUG9zKSAgICAgLyohPCBDUlBUX1Q6OlRERVNfREFUT1VUOiBEQVRPVVQgTWFzayAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzFfS0VZeEhfS0VZX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMxX0tFWXhIOiBLRVkgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX1RERVMxX0tFWXhIX0tFWV9Nc2sgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzFfS0VZeEhfS0VZX1BvcykgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMV9LRVl4SDogS0VZIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMxX0tFWXhMX0tFWV9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMV9LRVl4TDogS0VZIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMV9LRVl4TF9LRVlfTXNrICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMxX0tFWTFMX0tFWV9Qb3MpICAgICAgICAvKiE8IENSUFRfVDo6VERFUzFfS0VZeEw6IEtFWSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMV9JVkhfSVZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzFfSVZIOiBJViBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzFfSVZIX0lWX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMV9JVkhfSVZfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMxX0lWSDogSVYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzFfSVZMX0lWX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMxX0lWTDogSVYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVMxX0lWTF9JVl9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzFfSVZMX0lWX1BvcykgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMV9JVkw6IElWIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMxX1NBRERSX1NBRERSX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMV9TQUREUjogU0FERFIgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMV9TQUREUl9TQUREUl9Nc2sgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMxX1NBRERSX1NBRERSX1BvcykgICAgICAvKiE8IENSUFRfVDo6VERFUzFfU0FERFI6IFNBRERSIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMV9EQUREUl9EQUREUl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzFfREFERFI6IERBRERSIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENSUFRfVERFUzFfREFERFJfREFERFJfTXNrICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMV9EQUREUl9EQUREUl9Qb3MpICAgICAgLyohPCBDUlBUX1Q6OlRERVMxX0RBRERSOiBEQUREUiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzFfQ05UX0NOVF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMxX0NOVDogQ05UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVMxX0NOVF9DTlRfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzFfQ05UX0NOVF9Qb3MpICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMV9DTlQ6IENOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMyX0tFWXhIX0tFWV9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMl9LRVl4SDogS0VZIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMl9LRVl4SF9LRVlfTXNrICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMyX0tFWXhIX0tFWV9Qb3MpICAgICAgICAvKiE8IENSUFRfVDo6VERFUzJfS0VZeEg6IEtFWSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMl9LRVl4TF9LRVlfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzJfS0VZeEw6IEtFWSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzJfS0VZeExfS0VZX01zayAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMl9LRVl4TF9LRVlfUG9zKSAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMyX0tFWXhMOiBLRVkgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzJfSVZIX0lWX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMyX0lWSDogSVYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVMyX0lWSF9JVl9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzJfSVZIX0lWX1BvcykgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMl9JVkg6IElWIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMyX0lWTF9JVl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMl9JVkw6IElWIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMl9JVkxfSVZfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMyX0lWTF9JVl9Qb3MpICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzJfSVZMOiBJViBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMl9TQUREUl9TQUREUl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzJfU0FERFI6IFNBRERSIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENSUFRfVERFUzJfU0FERFJfU0FERFJfTXNrICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMl9TQUREUl9TQUREUl9Qb3MpICAgICAgLyohPCBDUlBUX1Q6OlRERVMyX1NBRERSOiBTQUREUiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzJfREFERFJfREFERFJfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMyX0RBRERSOiBEQUREUiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDUlBUX1RERVMyX0RBRERSX0RBRERSX01zayAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzJfREFERFJfREFERFJfUG9zKSAgICAgIC8qITwgQ1JQVF9UOjpUREVTMl9EQUREUjogREFERFIgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMyX0NOVF9DTlRfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMl9DTlQ6IENOVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMl9DTlRfQ05UX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMyX0NOVF9DTlRfUG9zKSAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzJfQ05UOiBDTlQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTM19LRVl4SF9LRVlfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzNfS0VZeEg6IEtFWSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzNfS0VZeEhfS0VZX01zayAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTM19LRVl4SF9LRVlfUG9zKSAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMzX0tFWXhIOiBLRVkgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzNfS0VZeExfS0VZX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMzX0tFWXhMOiBLRVkgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX1RERVMzX0tFWXhMX0tFWV9Nc2sgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzNfS0VZeExfS0VZX1BvcykgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTM19LRVl4TDogS0VZIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMzX0lWSF9JVl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTM19JVkg6IElWIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTM19JVkhfSVZfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMzX0lWSF9JVl9Qb3MpICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzNfSVZIOiBJViBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTM19JVkxfSVZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzNfSVZMOiBJViBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzNfSVZMX0lWX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTM19JVkxfSVZfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMzX0lWTDogSVYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzNfU0FERFJfU0FERFJfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMzX1NBRERSOiBTQUREUiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDUlBUX1RERVMzX1NBRERSX1NBRERSX01zayAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzNfU0FERFJfU0FERFJfUG9zKSAgICAgIC8qITwgQ1JQVF9UOjpUREVTM19TQUREUjogU0FERFIgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMzX0RBRERSX0RBRERSX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTM19EQUREUjogREFERFIgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTM19EQUREUl9EQUREUl9Nc2sgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMzX0RBRERSX0RBRERSX1BvcykgICAgICAvKiE8IENSUFRfVDo6VERFUzNfREFERFI6IERBRERSIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTM19DTlRfQ05UX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzNfQ05UOiBDTlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzNfQ05UX0NOVF9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTM19DTlRfQ05UX1BvcykgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMzX0NOVDogQ05UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSE1BQ19DVExfU1RBUlRfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfQ1RMOiBTVEFSVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX0hNQUNfQ1RMX1NUQVJUX01zayAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9ITUFDX0NUTF9TVEFSVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX0NUTDogU1RBUlQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0hNQUNfQ1RMX1NUT1BfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX0NUTDogU1RPUCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9ITUFDX0NUTF9TVE9QX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSE1BQ19DVExfU1RPUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19DVEw6IFNUT1AgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9ITUFDX0NUTF9ETUFMQVNUX1BvcyAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19DVEw6IERNQUxBU1QgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfSE1BQ19DVExfRE1BTEFTVF9Nc2sgICAgICAgICgweDF1bCA8PCBDUlBUX0hNQUNfQ1RMX0RNQUxBU1RfUG9zKSAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfQ1RMOiBETUFMQVNUIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSE1BQ19DVExfRE1BRU5fUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfQ1RMOiBETUFFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX0hNQUNfQ1RMX0RNQUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9ITUFDX0NUTF9ETUFFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX0NUTDogRE1BRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0hNQUNfQ1RMX09QTU9ERV9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX0NUTDogT1BNT0RFIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9ITUFDX0NUTF9PUE1PREVfTXNrICAgICAgICAgKDB4N3VsIDw8IENSUFRfSE1BQ19DVExfT1BNT0RFX1BvcykgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19DVEw6IE9QTU9ERSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9ITUFDX0NUTF9PVVRTV0FQX1BvcyAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19DVEw6IE9VVFNXQVAgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfSE1BQ19DVExfT1VUU1dBUF9Nc2sgICAgICAgICgweDF1bCA8PCBDUlBUX0hNQUNfQ1RMX09VVFNXQVBfUG9zKSAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfQ1RMOiBPVVRTV0FQIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSE1BQ19DVExfSU5TV0FQX1BvcyAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfQ1RMOiBJTlNXQVAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX0hNQUNfQ1RMX0lOU1dBUF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9ITUFDX0NUTF9JTlNXQVBfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX0NUTDogSU5TV0FQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0hNQUNfU1RTX0JVU1lfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX1NUUzogQlVTWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9ITUFDX1NUU19CVVNZX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSE1BQ19TVFNfQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19TVFM6IEJVU1kgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9ITUFDX1NUU19ETUFCVVNZX1BvcyAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19TVFM6IERNQUJVU1kgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfSE1BQ19TVFNfRE1BQlVTWV9Nc2sgICAgICAgICgweDF1bCA8PCBDUlBUX0hNQUNfU1RTX0RNQUJVU1lfUG9zKSAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfU1RTOiBETUFCVVNZIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSE1BQ19TVFNfRE1BRVJSX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfU1RTOiBETUFFUlIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX0hNQUNfU1RTX0RNQUVSUl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9ITUFDX1NUU19ETUFFUlJfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX1NUUzogRE1BRVJSIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0hNQUNfU1RTX0RBVElOUkVRX1BvcyAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX1NUUzogREFUSU5SRVEgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9ITUFDX1NUU19EQVRJTlJFUV9Nc2sgICAgICAgKDB4MXVsIDw8IENSUFRfSE1BQ19TVFNfREFUSU5SRVFfUG9zKSAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19TVFM6IERBVElOUkVRIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9ITUFDX0RHU1R4X0RHU1RfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19ER1NUeDogREdTVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfSE1BQ19ER1NUeF9ER1NUX01zayAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9ITUFDX0RHU1R4X0RHU1RfUG9zKSAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfREdTVHg6IERHU1QgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSE1BQ19LRVlDTlRfS0VZQ05UX1BvcyAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfS0VZQ05UOiBLRVlDTlQgUG9zaXRpb24gICAqLworI2RlZmluZSBDUlBUX0hNQUNfS0VZQ05UX0tFWUNOVF9Nc2sgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfSE1BQ19LRVlDTlRfS0VZQ05UX1BvcykgICAgIC8qITwgQ1JQVF9UOjpITUFDX0tFWUNOVDogS0VZQ05UIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0hNQUNfU0FERFJfU0FERFJfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX1NBRERSOiBTQUREUiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9ITUFDX1NBRERSX1NBRERSX01zayAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0hNQUNfU0FERFJfU0FERFJfUG9zKSAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19TQUREUjogU0FERFIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9ITUFDX0RNQUNOVF9ETUFDTlRfUG9zICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19ETUFDTlQ6IERNQUNOVCBQb3NpdGlvbiAgICovCisjZGVmaW5lIENSUFRfSE1BQ19ETUFDTlRfRE1BQ05UX01zayAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9ITUFDX0RNQUNOVF9ETUFDTlRfUG9zKSAgICAgLyohPCBDUlBUX1Q6OkhNQUNfRE1BQ05UOiBETUFDTlQgTWFzayAgICAgICAqLworCisjZGVmaW5lIENSUFRfSE1BQ19EQVRJTl9EQVRJTl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfREFUSU46IERBVElOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX0hNQUNfREFUSU5fREFUSU5fTXNrICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfSE1BQ19EQVRJTl9EQVRJTl9Qb3MpICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX0RBVElOOiBEQVRJTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19DVExfU1RBUlRfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBTVEFSVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX1NUQVJUX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfRUNDX0NUTF9TVEFSVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogU1RBUlQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX1NUT1BfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogU1RPUCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX0NUTF9TVE9QX01zayAgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0VDQ19DVExfU1RPUF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IFNUT1AgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0NUTF9ETUFFTl9Qb3MgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IERNQUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19DVExfRE1BRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9FQ0NfQ1RMX0RNQUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBETUFFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19DVExfRlNFTF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBGU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0ZTRUxfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfRUNDX0NUTF9GU0VMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogRlNFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0VDQ09QX1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogRUNDT1AgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX0NUTF9FQ0NPUF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBDUlBUX0VDQ19DVExfRUNDT1BfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IEVDQ09QIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0NUTF9NT0RPUF9Qb3MgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IE1PRE9QIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19DVExfTU9ET1BfTXNrICAgICAgICAgICAoMHgzdWwgPDwgQ1JQVF9FQ0NfQ1RMX01PRE9QX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBNT0RPUCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19DVExfTERQMV9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBMRFAxIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0xEUDFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfRUNDX0NUTF9MRFAxX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogTERQMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0xEUDJfUG9zICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogTERQMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX0NUTF9MRFAyX01zayAgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0VDQ19DVExfTERQMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IExEUDIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0NUTF9MREFfUG9zICAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IExEQSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19DVExfTERBX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9FQ0NfQ1RMX0xEQV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBMREEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19DVExfTERCX1BvcyAgICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBMREIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0xEQl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfRUNDX0NUTF9MREJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogTERCIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0xETl9Qb3MgICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogTEROIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX0NUTF9MRE5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0VDQ19DVExfTEROX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IExETiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0NUTF9MREtfUG9zICAgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IExESyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19DVExfTERLX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9FQ0NfQ1RMX0xES19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBMREsgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19DVExfQ1VSVkVNX1BvcyAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBDVVJWRU0gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0NVUlZFTV9Nc2sgICAgICAgICAgKDB4M2ZmdWwgPDwgQ1JQVF9FQ0NfQ1RMX0NVUlZFTV9Qb3MpICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogQ1VSVkVNIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfU1RTX0JVU1lfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX1NUUzogQlVTWSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX1NUU19CVVNZX01zayAgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0VDQ19TVFNfQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19TVFM6IEJVU1kgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX1NUU19ETUFCVVNZX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19TVFM6IERNQUJVU1kgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19TVFNfRE1BQlVTWV9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9FQ0NfU1RTX0RNQUJVU1lfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfU1RTOiBETUFCVVNZIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19TVFNfQlVTRVJSX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfU1RTOiBCVVNFUlIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfU1RTX0JVU0VSUl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENSUFRfRUNDX1NUU19CVVNFUlJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX1NUUzogQlVTRVJSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfWDFfUE9JTlRYMV9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX1gxOiAgUE9JTlRYMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX1gxX1BPSU5UWDFfTXNrICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9FQ0NfWDFfUE9JTlRYMV9Qb3MpICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19YMTogIFBPSU5UWDEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX1kxX1BPSU5UWTFfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19ZMTogUE9JTlRZMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19ZMV9QT0lOVFkxX01zayAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfRUNDX1kxX1BPSU5UWTFfUG9zKSAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfWTE6IFBPSU5UWTEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19YMl9QT0lOVFgyX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfWDI6IFBPSU5UWDIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfWDJfUE9JTlRYMl9Nc2sgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0VDQ19YMl9QT0lOVFgyX1BvcykgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX1gyOiBQT0lOVFgyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfWTJfUE9JTlRZMl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX1kyOiBQT0lOVFkyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX1kyX1BPSU5UWTJfTXNrICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9FQ0NfWTJfUE9JTlRZMl9Qb3MpICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19ZMjogUE9JTlRZMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0FfQ1VSVkVBX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19BOiBDVVJWRUEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19BX0NVUlZFQV9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfRUNDX0FfQ1VSVkVBX1BvcykgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQTogQ1VSVkVBIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19CX0NVUlZFQl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQjogQ1VSVkVCIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfQl9DVVJWRUJfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0VDQ19CX0NVUlZFQl9Qb3MpICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0I6IENVUlZFQiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfTl9DVVJWRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX046IENVUlZFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX05fQ1VSVkVOX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9FQ0NfTl9DVVJWRU5fUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19OOiBDVVJWRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0tfU0NBTEFSS19Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19LOiBTQ0FMQVJLIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19LX1NDQUxBUktfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfRUNDX0tfU0NBTEFSS19Qb3MpICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfSzogU0NBTEFSSyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19EQUREUl9EQUREUl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfREFERFI6IERBRERSIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfREFERFJfREFERFJfTXNrICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0VDQ19EQUREUl9EQUREUl9Qb3MpICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0RBRERSOiBEQUREUiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfU1RBUlRSRUdfU1RBUlRSRUdfUG9zICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX1NUQVJUUkVHOiBTVEFSVFJFRyBQb3NpdGlvbiovCisjZGVmaW5lIENSUFRfRUNDX1NUQVJUUkVHX1NUQVJUUkVHX01zayAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9FQ0NfU1RBUlRSRUdfU1RBUlRSRUdfUG9zKSAgLyohPCBDUlBUX1Q6OkVDQ19TVEFSVFJFRzogU1RBUlRSRUcgTWFzayAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX1dPUkRDTlRfV09SRENOVF9Qb3MgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19XT1JEQ05UOiBXT1JEQ05UIFBvc2l0aW9uICAqLworI2RlZmluZSBDUlBUX0VDQ19XT1JEQ05UX1dPUkRDTlRfTXNrICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfRUNDX1dPUkRDTlRfV09SRENOVF9Qb3MpICAgIC8qITwgQ1JQVF9UOjpFQ0NfV09SRENOVDogV09SRENOVCBNYXNrICAgICAgKi8KKworLyoqQH0qLyAvKiBDUlBUX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBDUlBUIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX0NSUFRfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2RhY19yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9kYWNfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg1M2FkMAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9kYWNfcmVnLmgKQEAgLTAsMCArMSwyMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBkYWNfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIERBQyByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19EQUNfUkVHX0hfXworI2RlZmluZSBfX0RBQ19SRUdfSF9fCisKKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGlnaXRhbCB0byBBbmFsb2cgQ29udmVydGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgREFDIERpZ2l0YWwgdG8gQW5hbG9nIENvbnZlcnRlcihEQUMpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIERBQyBDb250cm9sbGVyCitAeyAqLworCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworCisgICAgLyoqCisgICAgICogQHZhciBEQUNfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDAwICBEQUMgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfERBQ0VOICAgICB8REFDIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gREFDIGlzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEQUMgaXMgRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8REFDSUVOICAgIHxEQUMgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IGlzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgaXMgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8RE1BRU4gICAgIHxETUEgTW9kZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERNQSBtb2RlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBETUEgbW9kZSBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxETUFVUklFTiAgfERNQSBVbmRlci1ydW4gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRE1BIHVuZGVyLXJ1biBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERNQSB1bmRlci1ydW4gaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfFRSR0VOICAgICB8VHJpZ2dlciBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gREFDIGV2ZW50IHRyaWdnZXIgbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gREFDIGV2ZW50IHRyaWdnZXIgbW9kZSBFbmFibGVkLgorICAgICAqIHxbNzo1XSAgIHxUUkdTRUwgICAgfFRyaWdnZXIgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IFNvZnR3YXJlIHRyaWdnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gRXh0ZXJuYWwgcGluIERBQzBfU1QgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBUaW1lciAwIHRyaWdnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gVGltZXIgMSB0cmlnZ2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFRpbWVyIDIgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBUaW1lciAzIHRyaWdnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gRVBXTTAgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBFUFdNMSB0cmlnZ2VyLgorICAgICAqIHxbOF0gICAgIHxCWVBBU1MgICAgfEJ5cGFzcyBCdWZmZXIgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdXRwdXQgdm9sdGFnZSBidWZmZXIgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3V0cHV0IHZvbHRhZ2UgYnVmZmVyIERpc2FibGVkLgorICAgICAqIHxbMTBdICAgIHxMQUxJR04gICAgfERBQyBEYXRhIExlZnQtYWxpZ25lZCBFbmFibGVkIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlnaHQgYWxpZ25tZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMZWZ0IGFsaWdubWVudC4KKyAgICAgKiB8WzEzOjEyXSB8RVRSR1NFTCAgIHxFeHRlcm5hbCBQaW4gVHJpZ2dlciBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IExvdyBsZXZlbCB0cmlnZ2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gSGlnaCBsZXZlbCB0cmlnZ2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRmFsbGluZyBlZGdlIHRyaWdnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSaXNpbmcgZWRnZSB0cmlnZ2VyLgorICAgICAqIHxbMTU6MTRdIHxCV1NFTCAgICAgfERBQyBEYXRhIEJpdC13aWR0aCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IGRhdGEgaXMgMTIgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IGRhdGEgaXMgOCBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IHJlc2VydmVkLgorICAgICAqIHxbMTZdICAgIHxHUlBFTiAgICAgfERBQyBHcm91cCBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gREFDMCBhbmQgREFDMSBhcmUgbm90IGdyb3VwZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERBQzAgYW5kIERBQzEgYXJlIGdyb3VwZWQuCisgICAgICogQHZhciBEQUNfVDo6U1dUUkcKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIERBQyBTb2Z0d2FyZSBUcmlnZ2VyIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTV1RSRyAgICAgfFNvZnR3YXJlIFRyaWdnZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU29mdHdhcmUgdHJpZ2dlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU29mdHdhcmUgdHJpZ2dlciBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgd3JpdGVzIHRoaXMgYml0IHRvIGdlbmVyYXRlIG9uZSBzaG90IHB1bHNlIGFuZCBpdCBpcyBjbGVhcmVkIHRvIDAgYnkgaGFyZHdhcmUgYXV0b21hdGljYWxseTsgUmVhZGluZyB0aGlzIGJpdCB3aWxsIGFsd2F5cyBnZXQgMC4KKyAgICAgKiBAdmFyIERBQ19UOjpEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MDggIERBQyBEYXRhIEhvbGRpbmcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxEQUNEQVQgICAgfERBQyAxMi1iaXQgSG9sZGluZyBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgd3JpdHRlbiBieSB1c2VyIHNvZnR3YXJlIHdoaWNoIHNwZWNpZmllcyAxMi1iaXQgY29udmVyc2lvbiBkYXRhIGZvciBEQUMgb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB1bnVzZWQgYml0cyAoREFDREFUWzM6MF0gaW4gbGVmdC1hbGlnbm1lbnQgbW9kZSBhbmQgREFDREFUWzE1OjEyXSBpbiByaWdodCBhbGlnbm1lbnQgbW9kZSkgYXJlIGlnbm9yZWQgYnkgREFDIGNvbnRyb2xsZXIgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTIgYml0IGxlZnQgYWxpZ25tZW50OiB1c2VyIGhhcyB0byBsb2FkIGRhdGEgaW50byBEQUNEQVRbMTU6NF0gYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMiBiaXQgcmlnaHQgYWxpZ25tZW50OiB1c2VyIGhhcyB0byBsb2FkIGRhdGEgaW50byBEQUNEQVRbMTE6MF0gYml0cy4KKyAgICAgKiBAdmFyIERBQ19UOjpEQVRPVVQKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIERBQyBEYXRhIE91dHB1dCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMTowXSAgfERBVE9VVCAgICB8REFDIDEyLWJpdCBPdXRwdXQgRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIGN1cnJlbnQgZGlnaXRhbCBkYXRhIGZvciBEQUMgb3V0cHV0IGNvbnZlcnNpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgbG9hZGVkIGZyb20gREFDX0RBVCByZWdpc3RlciBhbmQgdXNlciBjYW5ub3Qgd3JpdGUgaXQgZGlyZWN0bHkuCisgICAgICogQHZhciBEQUNfVDo6U1RBVFVTCisgICAgICogT2Zmc2V0OiAweDEwICBEQUMgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8RklOSVNIICAgIHxEQUMgQ29udmVyc2lvbiBDb21wbGV0ZSBGaW5pc2ggRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEQUMgaXMgaW4gY29udmVyc2lvbiBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gREFDIGNvbnZlcnNpb24gZmluaXNoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHNldCB0byAxIHdoZW4gY29udmVyc2lvbiB0aW1lIGNvdW50ZXIgY291bnRzIHRvIFNFVFRMRVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCB0byAwIHdoZW4gREFDIHN0YXJ0cyBhIG5ldyBjb252ZXJzaW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgd3JpdGVzIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8WzFdICAgICB8RE1BVURSICAgIHxETUEgVW5kZXItcnVuIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIERNQSB1bmRlci1ydW4gZXJyb3IgY29uZGl0aW9uIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBETUEgdW5kZXItcnVuIGVycm9yIGNvbmRpdGlvbiBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIHdyaXRlcyAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbOF0gICAgIHxCVVNZICAgICAgfERBQyBCdXN5IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gREFDIGlzIHJlYWR5IGZvciBuZXh0IGNvbnZlcnNpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERBQyBpcyBidXN5IGluIGNvbnZlcnNpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBpcyByZWFkIG9ubHkgYml0LgorICAgICAqIEB2YXIgREFDX1Q6OlRDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MTQgIERBQyBUaW1pbmcgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs5OjBdICAgfFNFVFRMRVQgICB8REFDIE91dHB1dCBTZXR0bGluZyBUaW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBzb2Z0d2FyZSBuZWVkcyB0byB3cml0ZSBhcHByb3ByaWF0ZSB2YWx1ZSB0byB0aGVzZSBiaXRzIHRvIG1lZXQgREFDIGNvbnZlcnNpb24gc2V0dGxpbmcgdGltZSBiYXNlIG9uIFBDTEsgKEFQQiBjbG9jaykgc3BlZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIGV4YW1wbGUsIERBQyBjb250cm9sbGVyIGNsb2NrIHNwZWVkIGlzIDY0TUh6IGFuZCBEQUMgY29udmVyc2lvbiBzZXR0aW5nIHRpbWUgaXMgMSB1cywgU0VUVExFVCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAweDQwLgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIERBQyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNXVFJHOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBEQUMgU29mdHdhcmUgVHJpZ2dlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBEQVQ7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gREFDIERhdGEgSG9sZGluZyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgREFUT1VUOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIERBQyBEYXRhIE91dHB1dCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBEQUMgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUQ1RMOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxNF0gREFDIFRpbWluZyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IERBQ19UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBEQUNfQ09OU1QgREFDIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIERBQyBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIERBQ19DVExfREFDRU5fUG9zICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBEQUNFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBEQUNfQ1RMX0RBQ0VOX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgREFDX0NUTF9EQUNFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogREFDRU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfQ1RMX0RBQ0lFTl9Qb3MgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogREFDSUVOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFDX0NUTF9EQUNJRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IERBQ19DVExfREFDSUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IERBQ0lFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgREFDX0NUTF9ETUFFTl9Qb3MgICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IERNQUVOIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIERBQ19DVExfRE1BRU5fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBEQUNfQ1RMX0RNQUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBETUFFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIERBQ19DVExfRE1BVVJJRU5fUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBETUFVUklFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBEQUNfQ1RMX0RNQVVSSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgREFDX0NUTF9ETUFVUklFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogRE1BVVJJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfQ1RMX1RSR0VOX1BvcyAgICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogVFJHRU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFDX0NUTF9UUkdFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IERBQ19DVExfVFJHRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IFRSR0VOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgREFDX0NUTF9UUkdTRUxfUG9zICAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IFRSR1NFTCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIERBQ19DVExfVFJHU0VMX01zayAgICAgICAgICAgICAgICgweDd1bCA8PCBEQUNfQ1RMX1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBUUkdTRUwgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIERBQ19DVExfQllQQVNTX1BvcyAgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBCWVBBU1MgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBEQUNfQ1RMX0JZUEFTU19Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgREFDX0NUTF9CWVBBU1NfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogQllQQVNTIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfQ1RMX0xBTElHTl9Qb3MgICAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogTEFMSUdOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFDX0NUTF9MQUxJR05fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IERBQ19DVExfTEFMSUdOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IExBTElHTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgREFDX0NUTF9FVFJHU0VMX1BvcyAgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IEVUUkdTRUwgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIERBQ19DVExfRVRSR1NFTF9Nc2sgICAgICAgICAgICAgICgweDN1bCA8PCBEQUNfQ1RMX0VUUkdTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBFVFJHU0VMIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIERBQ19DVExfQldTRUxfUG9zICAgICAgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBCV1NFTCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBEQUNfQ1RMX0JXU0VMX01zayAgICAgICAgICAgICAgICAoMHgzdWwgPDwgREFDX0NUTF9CV1NFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogQldTRUwgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfQ1RMX0dSUEVOX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogR1JQRU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFDX0NUTF9HUlBFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IERBQ19DVExfR1JQRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IEdSUEVOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgREFDX1NXVFJHX1NXVFJHX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpTV1RSRzogU1dUUkcgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIERBQ19TV1RSR19TV1RSR19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBEQUNfU1dUUkdfU1dUUkdfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6U1dUUkc6IFNXVFJHIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIERBQ19EQVRfREFDREFUX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6REFUOiBEQUNEQVQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBEQUNfREFUX0RBQ0RBVF9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgREFDX0RBVF9EQUNEQVRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkRBVDogREFDREFUIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfREFUT1VUX0RBVE9VVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkRBVE9VVDogREFUT1VUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgREFDX0RBVE9VVF9EQVRPVVRfTXNrICAgICAgICAgICAgKDB4ZmZmdWwgPDwgREFDX0RBVE9VVF9EQVRPVVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpEQVRPVVQ6IERBVE9VVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgREFDX1NUQVRVU19GSU5JU0hfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpTVEFUVVM6IEZJTklTSCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIERBQ19TVEFUVVNfRklOSVNIX01zayAgICAgICAgICAgICgweDF1bCA8PCBEQUNfU1RBVFVTX0ZJTklTSF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6U1RBVFVTOiBGSU5JU0ggTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIERBQ19TVEFUVVNfRE1BVURSX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6U1RBVFVTOiBETUFVRFIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBEQUNfU1RBVFVTX0RNQVVEUl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgREFDX1NUQVRVU19ETUFVRFJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OlNUQVRVUzogRE1BVURSIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfU1RBVFVTX0JVU1lfUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OlNUQVRVUzogQlVTWSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgREFDX1NUQVRVU19CVVNZX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IERBQ19TVEFUVVNfQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpTVEFUVVM6IEJVU1kgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgREFDX1RDVExfU0VUVExFVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpUQ1RMOiBTRVRUTEVUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIERBQ19UQ1RMX1NFVFRMRVRfTXNrICAgICAgICAgICAgICgweDNmZnVsIDw8IERBQ19UQ1RMX1NFVFRMRVRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6VENUTDogU0VUVExFVCBNYXNrICAgICAgICAgICAgICAqLworCisvKipAfSovIC8qIERBQ19DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgREFDIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisjZW5kaWYgLyogX19EQUNfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2VhZGNfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZWFkY19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTMwNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2VhZGNfcmVnLmgKQEAgLTAsMCArMSwxNzA1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZWFkY19yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgRUFEQyByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19FQURDX1JFR19IX18KKyNkZWZpbmUgX19FQURDX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRW5oYW5jZWQgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgRUFEQyBFbmhhbmNlZCBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0ZXIoRUFEQykKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgRUFEQyBDb250cm9sbGVyCitAeyAqLworCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgRUFEQ19UOjpEQVRbMTldCisgICAgICogT2Zmc2V0OiAweDAwICBBREMgRGF0YSBSZWdpc3RlciAwfjE4IGZvciBTYW1wbGUgTW9kdWxlIDB+MTgKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxSRVNVTFQgICAgfEFEQyBDb252ZXJzaW9uIFJlc3VsdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY29udGFpbnMgMTIgYml0cyBjb252ZXJzaW9uIHJlc3VsdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIERNT0YgKEVBRENfQ1RMWzldKSBpcyBzZXQgdG8gMCwgMTItYml0IEFEQyBjb252ZXJzaW9uIHJlc3VsdCB3aXRoIHVuc2lnbmVkIGZvcm1hdCB3aWxsIGJlIGZpbGxlZCBpbiBSRVNVTFRbMTE6MF0gYW5kIHplcm8gd2lsbCBiZSBmaWxsZWQgaW4gUkVTVUxUWzE1OjEyXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIERNT0YgKEVBRENfQ1RMWzldKSBzZXQgdG8gMSwgMTItYml0IEFEQyBjb252ZXJzaW9uIHJlc3VsdCB3aXRoIDInY29tcGxlbWVudCBmb3JtYXQgd2lsbCBiZSBmaWxsZWQgaW4gUkVTVUxUWzExOjBdIGFuZCBzaWduZWQgYml0cyB0byB3aWxsIGJlIGZpbGxlZCBpbiBSRVNVTFRbMTU6MTJdLgorICAgICAqIHxbMTZdICAgIHxPViAgICAgICAgfE92ZXJydW4gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIGNvbnZlcnRlZCBkYXRhIGluIFJFU1VMVFsxMTowXSBoYXMgbm90IGJlZW4gcmVhZCBiZWZvcmUgbmV3IGNvbnZlcnNpb24gcmVzdWx0IGlzIGxvYWRlZCB0byB0aGlzIHJlZ2lzdGVyLCBPViBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGF0YSBpbiBSRVNVTFRbMTE6MF0gaXMgcmVjZW50IGNvbnZlcnNpb24gcmVzdWx0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEYXRhIGluIFJFU1VMVFsxMTowXSBpcyBvdmVyd3JpdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBFQURDX0RBVCByZWdpc3RlciBpcyByZWFkLgorICAgICAqIHxbMTddICAgIHxWQUxJRCAgICAgfFZhbGlkIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gMSB3aGVuIGNvcnJlc3BvbmRpbmcgc2FtcGxlIG1vZHVsZSBjaGFubmVsIGFuYWxvZyBpbnB1dCBjb252ZXJzaW9uIGlzIGNvbXBsZXRlZCBhbmQgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBFQURDX0RBVCByZWdpc3RlciBpcyByZWFkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIGluIFJFU1VMVFsxMTowXSBiaXRzIGlzIG5vdCB2YWxpZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSBpbiBSRVNVTFRbMTE6MF0gYml0cyBpcyB2YWxpZC4KKyAgICAgKiBAdmFyIEVBRENfVDo6Q1VSREFUCisgICAgICogT2Zmc2V0OiAweDRDICBBREMgUERNQSBDdXJyZW50IFRyYW5zZmVyIERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTc6MF0gIHxDVVJEQVQgICAgfEFEQyBQRE1BIEN1cnJlbnQgVHJhbnNmZXIgRGF0YSBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgaXMgYSBzaGFkb3cgcmVnaXN0ZXIgb2YgRUFEQ19EQVRuIChuPTB+MTgpIGZvciBQRE1BIHN1cHBvcnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBpcyBhIHJlYWQgb25seSByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEVBRENfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDUwICBBREMgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEFEQ0VOICAgICB8QURDIENvbnZlcnRlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpc2FibGVkIEVBREMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZWQgRUFEQy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBCZWZvcmUgc3RhcnRpbmcgQURDIGNvbnZlcnNpb24gZnVuY3Rpb24sIHRoaXMgYml0IHNob3VsZCBiZSBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENsZWFyIGl0IHRvIDAgdG8gZGlzYWJsZSBBREMgY29udmVydGVyIGFuYWxvZyBjaXJjdWl0IHBvd2VyIGNvbnN1bXB0aW9uLgorICAgICAqIHxbMV0gICAgIHxBRENSU1QgICAgfEFEQyBDb252ZXJ0ZXIgQ29udHJvbCBDaXJjdWl0cyBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhdXNlIEFEQyBjb250cm9sIGNpcmN1aXRzIHJlc2V0IHRvIGluaXRpYWwgc3RhdGUsIGJ1dCBub3QgY2hhbmdlIHRoZSBBREMgcmVnaXN0ZXJzIHZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEFEQ1JTVCBiaXQgcmVtYWlucyAxIGR1cmluZyBBREMgcmVzZXQsIHdoZW4gQURDIHJlc2V0IGVuZCwgdGhlIEFEQ1JTVCBiaXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIHRvIDAuCisgICAgICogfFsyXSAgICAgfEFEQ0lFTjAgICB8U3BlY2lmaWMgU2FtcGxlIE1vZHVsZSBBREMgQURJTlQwIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFEQyBjb252ZXJ0ZXIgZ2VuZXJhdGVzIGEgY29udmVyc2lvbiBlbmQgQURJRjAgKEVBRENfU1RBVFVTMlswXSkgdXBvbiB0aGUgZW5kIG9mIHNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIGNvbnZlcnNpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBBRENJRU4wIGJpdCBpcyBzZXQgdGhlbiBjb252ZXJzaW9uIGVuZCBpbnRlcnJ1cHQgcmVxdWVzdCBBRElOVDAgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTcGVjaWZpYyBzYW1wbGUgbW9kdWxlIEFEQyBBRElOVDAgaW50ZXJydXB0IGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTcGVjaWZpYyBzYW1wbGUgbW9kdWxlIEFEQyBBRElOVDAgaW50ZXJydXB0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfEFEQ0lFTjEgICB8U3BlY2lmaWMgU2FtcGxlIE1vZHVsZSBBREMgQURJTlQxIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFEQyBjb252ZXJ0ZXIgZ2VuZXJhdGVzIGEgY29udmVyc2lvbiBlbmQgQURJRjEgKEVBRENfU1RBVFVTMlsxXSkgdXBvbiB0aGUgZW5kIG9mIHNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIGNvbnZlcnNpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBBRENJRU4xIGJpdCBpcyBzZXQgdGhlbiBjb252ZXJzaW9uIGVuZCBpbnRlcnJ1cHQgcmVxdWVzdCBBRElOVDEgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTcGVjaWZpYyBzYW1wbGUgbW9kdWxlIEFEQyBBRElOVDEgaW50ZXJydXB0IGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTcGVjaWZpYyBzYW1wbGUgbW9kdWxlIEFEQyBBRElOVDEgaW50ZXJydXB0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfEFEQ0lFTjIgICB8U3BlY2lmaWMgU2FtcGxlIE1vZHVsZSBBREMgQURJTlQyIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFEQyBjb252ZXJ0ZXIgZ2VuZXJhdGVzIGEgY29udmVyc2lvbiBlbmQgQURJRjIgKEVBRENfU1RBVFVTMlsyXSkgdXBvbiB0aGUgZW5kIG9mIHNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIGNvbnZlcnNpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBBRENJRU4yIGJpdCBpcyBzZXQgdGhlbiBjb252ZXJzaW9uIGVuZCBpbnRlcnJ1cHQgcmVxdWVzdCBBRElOVDIgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTcGVjaWZpYyBzYW1wbGUgbW9kdWxlIEFEQyBBRElOVDIgaW50ZXJydXB0IGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTcGVjaWZpYyBzYW1wbGUgbW9kdWxlIEFEQyBBRElOVDIgaW50ZXJydXB0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfEFEQ0lFTjMgICB8U3BlY2lmaWMgU2FtcGxlIE1vZHVsZSBBREMgQURJTlQzIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFEQyBjb252ZXJ0ZXIgZ2VuZXJhdGVzIGEgY29udmVyc2lvbiBlbmQgQURJRjMgKEVBRENfU1RBVFVTMlszXSkgdXBvbiB0aGUgZW5kIG9mIHNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIGNvbnZlcnNpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBBRENJRU4zIGJpdCBpcyBzZXQgdGhlbiBjb252ZXJzaW9uIGVuZCBpbnRlcnJ1cHQgcmVxdWVzdCBBRElOVDMgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTcGVjaWZpYyBzYW1wbGUgbW9kdWxlIEFEQyBBRElOVDMgaW50ZXJydXB0IGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTcGVjaWZpYyBzYW1wbGUgbW9kdWxlIEFEQyBBRElOVDMgaW50ZXJydXB0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs3OjZdICAgfFJFU1NFTCAgICB8UmVzb2x1dGlvbiBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IDYtYml0IEFEQyByZXN1bHQgd2lsbCBiZSBwdXQgYXQgUkVTVUxUIChFQURDX0RBVG5bNTowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSA4LWJpdCBBREMgcmVzdWx0IHdpbGwgYmUgcHV0IGF0IFJFU1VMVCAoRUFEQ19EQVRuWzc6MF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gMTAtYml0IEFEQyByZXN1bHQgd2lsbCBiZSBwdXQgYXQgUkVTVUxUIChFQURDX0RBVG5bOTowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSAxMi1iaXQgQURDIHJlc3VsdCB3aWxsIGJlIHB1dCBhdCBSRVNVTFQgKEVBRENfREFUblsxMTowXSkuCisgICAgICogfFs4XSAgICAgfERJRkZFTiAgICB8RGlmZmVyZW50aWFsIEFuYWxvZyBJbnB1dCBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2luZ2xlLWVuZCBhbmFsb2cgaW5wdXQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGlmZmVyZW50aWFsIGFuYWxvZyBpbnB1dCBtb2RlLgorICAgICAqIHxbOV0gICAgIHxETU9GICAgICAgfEFEQyBEaWZmZXJlbnRpYWwgSW5wdXQgTW9kZSBPdXRwdXQgRm9ybWF0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFEQyBjb252ZXJzaW9uIHJlc3VsdCB3aWxsIGJlIGZpbGxlZCBpbiBSRVNVTFQgKEVBRENfREFUblsxNTowXSAsIG49IDAgfjE4KSB3aXRoIHVuc2lnbmVkIGZvcm1hdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQURDIGNvbnZlcnNpb24gcmVzdWx0IHdpbGwgYmUgZmlsbGVkIGluIFJFU1VMVCAoRUFEQ19EQVRuWzE1OjBdICwgbj0gMCB+MTgpIHdpdGggMidjb21wbGVtZW50IGZvcm1hdC4KKyAgICAgKiB8WzExXSAgICB8UERNQUVOICAgIHxQRE1BIFRyYW5zZmVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEFEQyBjb252ZXJzaW9uIGlzIGNvbXBsZXRlZCwgdGhlIGNvbnZlcnRlZCBkYXRhIGlzIGxvYWRlZCBpbnRvIEVBRENfREFUbiAobjogMCB+IDE4KSByZWdpc3RlciwgdXNlciBjYW4gZW5hYmxlIHRoaXMgYml0IHRvIGdlbmVyYXRlIGEgUERNQSBkYXRhIHRyYW5zZmVyIHJlcXVlc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBETUEgZGF0YSB0cmFuc2ZlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUERNQSBkYXRhIHRyYW5zZmVyIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBzZXQgdGhpcyBiaXQgZmllbGQgdG8gMSwgdXNlciBtdXN0IHNldCBBRENJRU5uIChFQURDX0NUTFs1OjJdLCBuPTB+MykgPSAwIHRvIGRpc2FibGUgaW50ZXJydXB0LgorICAgICAqIEB2YXIgRUFEQ19UOjpTV1RSRworICAgICAqIE9mZnNldDogMHg1NCAgQURDIFNhbXBsZSBNb2R1bGUgU29mdHdhcmUgU3RhcnQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTg6MF0gIHxTV1RSRyAgICAgfEFEQyBTYW1wbGUgTW9kdWxlIDB+MTggU29mdHdhcmUgRm9yY2UgdG8gU3RhcnQgQURDIENvbnZlcnNpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXVzZSBhbiBBREMgY29udmVyc2lvbiB3aGVuIHRoZSBwcmlvcml0eSBpcyBnaXZlbiB0byBzYW1wbGUgbW9kdWxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEFmdGVyIHdyaXRlIHRoaXMgcmVnaXN0ZXIgdG8gc3RhcnQgQURDIGNvbnZlcnNpb24sIHRoZSBFQURDX1BFTkRTVFMgcmVnaXN0ZXIgd2lsbCBzaG93IHdoaWNoIHNhbXBsZSBtb2R1bGUgd2lsbCBjb252ZXJzaW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdXNlciB3YW50IHRvIGRpc2FibGUgdGhlIGNvbnZlcnNpb24gb2YgdGhlIHNhbXBsZSBtb2R1bGUsIHVzZXIgY2FuIHdyaXRlIEVBRENfUEVORFNUUyByZWdpc3RlciB0byBjbGVhciBpdC4KKyAgICAgKiBAdmFyIEVBRENfVDo6UEVORFNUUworICAgICAqIE9mZnNldDogMHg1OCAgQURDIFN0YXJ0IG9mIENvbnZlcnNpb24gUGVuZGluZyBGbGFnIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE4OjBdICB8U1RQRiAgICAgIHxBREMgU2FtcGxlIE1vZHVsZSAwfjE4IFN0YXJ0IG9mIENvbnZlcnNpb24gUGVuZGluZyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZDoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlcmUgaXMgbm8gcGVuZGluZyBjb252ZXJzaW9uIGZvciBzYW1wbGUgbW9kdWxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgbW9kdWxlIEFEQyBzdGFydCBvZiBjb252ZXJzaW9uIGlzIHBlbmRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IGNsZWFyIHBlbmRpbmcgZmxhZyBhbmQgY2FuY2VsIHRoZSBjb252ZXJzaW9uIGZvciBzYW1wbGUgbW9kdWxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHJlbWFpbnMgMSBkdXJpbmcgcGVuZGluZyBzdGF0ZSwgd2hlbiB0aGUgcmVzcGVjdGl2ZSBBREMgY29udmVyc2lvbiBpcyBlbmQsIHRoZSBTVFBGbiAobj0wfjE4KSBiaXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIHRvIDAKKyAgICAgKiBAdmFyIEVBRENfVDo6T1ZTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NUMgIEFEQyBTYW1wbGUgTW9kdWxlIFN0YXJ0IG9mIENvbnZlcnNpb24gT3ZlcnJ1biBGbGFnIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE4OjBdICB8U1BPVkYgICAgIHxBREMgU0FNUExFMH4xOCBPdmVycnVuIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gc2FtcGxlIG1vZHVsZSBldmVudCBvdmVycnVuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgYSBuZXcgc2FtcGxlIG1vZHVsZSBldmVudCBpcyBnZW5lcmF0ZWQgd2hpbGUgYW4gb2xkIG9uZSBldmVudCBpcyBwZW5kaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIEB2YXIgRUFEQ19UOjpTQ1RMWzE5XQorICAgICAqIE9mZnNldDogMHg4MCAgQURDIFNhbXBsZSBNb2R1bGUgMH4xOCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8Q0hTRUwgICAgIHxBREMgU2FtcGxlIE1vZHVsZSBDaGFubmVsIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwSCA9IEVBRENfQ0gwIChzbG93IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxSCA9IEVBRENfQ0gxIChzbG93IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAySCA9IEVBRENfQ0gyIChzbG93IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAzSCA9IEVBRENfQ0gzIChzbG93IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA0SCA9IEVBRENfQ0g0IChzbG93IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA1SCA9IEVBRENfQ0g1IChzbG93IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA2SCA9IEVBRENfQ0g2IChzbG93IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA3SCA9IEVBRENfQ0g3IChzbG93IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA4SCA9IEVBRENfQ0g4IChzbG93IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA5SCA9IEVBRENfQ0g5IChzbG93IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDBBSCA9IEVBRENfQ0gxMCAoZmFzdCBjaGFubmVsKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwQkggPSBFQURDX0NIMTEgKGZhc3QgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MENIID0gRUFEQ19DSDEyIChmYXN0IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDBESCA9IEVBRENfQ0gxMyAoZmFzdCBjaGFubmVsKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwRUggPSBFQURDX0NIMTQgKGZhc3QgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MEZIID0gRUFEQ19DSDE1IChmYXN0IGNoYW5uZWwpLgorICAgICAqIHxbNF0gICAgIHxFWFRSRU4gICAgfEFEQyBFeHRlcm5hbCBUcmlnZ2VyIFJpc2luZyBFZGdlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlzaW5nIGVkZ2UgRGlzYWJsZWQgd2hlbiBBREMgc2VsZWN0cyBFQURDMF9TVCBhcyB0cmlnZ2VyIHNvdXJjZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmlzaW5nIGVkZ2UgRW5hYmxlZCB3aGVuIEFEQyBzZWxlY3RzIEVBREMwX1NUIGFzIHRyaWdnZXIgc291cmNlLgorICAgICAqIHxbNV0gICAgIHxFWFRGRU4gICAgfEFEQyBFeHRlcm5hbCBUcmlnZ2VyIEZhbGxpbmcgRWRnZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhbGxpbmcgZWRnZSBEaXNhYmxlZCB3aGVuIEFEQyBzZWxlY3RzIEVBREMwX1NUIGFzIHRyaWdnZXIgc291cmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGYWxsaW5nIGVkZ2UgRW5hYmxlZCB3aGVuIEFEQyBzZWxlY3RzIEVBREMwX1NUIGFzIHRyaWdnZXIgc291cmNlLgorICAgICAqIHxbNzo2XSAgIHxUUkdETFlESVYgfEFEQyBTYW1wbGUgTW9kdWxlIFN0YXJ0IG9mIENvbnZlcnNpb24gVHJpZ2dlciBEZWxheSBDbG9jayBEaXZpZGVyIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRyaWdnZXIgZGVsYXkgY2xvY2sgZnJlcXVlbmN5OgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQURDX0NMSy8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQURDX0NMSy8yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQURDX0NMSy80LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQURDX0NMSy8xNi4KKyAgICAgKiB8WzE1OjhdICB8VFJHRExZQ05UIHxBREMgU2FtcGxlIE1vZHVsZSBTdGFydCBvZiBDb252ZXJzaW9uIFRyaWdnZXIgRGVsYXkgVGltZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRyaWdnZXIgZGVsYXkgdGltZSA9IFRSR0RMWUNOVCB4IEFEQ19DTEsgeCBuIChuPTEsMiw0LDE2IGZyb20gVFJHRExZRElWIHNldHRpbmcpLgorICAgICAqIHxbMjA6MTZdIHxUUkdTRUwgICAgfEFEQyBTYW1wbGUgTW9kdWxlIFN0YXJ0IG9mIENvbnZlcnNpb24gVHJpZ2dlciBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MEggPSBEaXNhYmxlIHRyaWdnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MUggPSBFeHRlcm5hbCB0cmlnZ2VyIGZyb20gRUFEQzBfU1QgcGluIGlucHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDJIID0gQURDIEFESU5UMCBpbnRlcnJ1cHQgRU9DIChFbmQgb2YgY29udmVyc2lvbikgcHVsc2UgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwzSCA9IEFEQyBBRElOVDEgaW50ZXJydXB0IEVPQyAoRW5kIG9mIGNvbnZlcnNpb24pIHB1bHNlIHRyaWdnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NEggPSBUaW1lcjAgb3ZlcmZsb3cgcHVsc2UgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw1SCA9IFRpbWVyMSBvdmVyZmxvdyBwdWxzZSB0cmlnZ2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDZIID0gVGltZXIyIG92ZXJmbG93IHB1bHNlIHRyaWdnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8N0ggPSBUaW1lcjMgb3ZlcmZsb3cgcHVsc2UgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw4SCA9IEVQV00wVEcwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDlIID0gRVBXTTBURzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QUggPSBFUFdNMFRHMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCSCA9IEVQV00wVEczLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENIID0gRVBXTTBURzQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8REggPSBFUFdNMFRHNS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFSCA9IEVQV00xVEcwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZIID0gRVBXTTFURzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTBIID0gRVBXTTFURzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTFIID0gRVBXTTFURzMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTJIID0gRVBXTTFURzQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTNIID0gRVBXTTFURzUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTRIID0gQlBXTTBURy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxNUggPSBCUFdNMVRHLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfG90aGVyID0gUmVzZXJ2ZWQuCisgICAgICogfFsyMl0gICAgfElOVFBPUyAgICB8SW50ZXJydXB0IEZsYWcgUG9zaXRpb24gU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNldCBBRElGbiAoRUFEQ19TVEFUVVMyW25dLCBuPTB+MykgYXQgQURDIGVuZCBvZiBjb252ZXJzaW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXQgQURJRm4gKEVBRENfU1RBVFVTMltuXSwgbj0wfjMpIGF0IEFEQyBzdGFydCBvZiBjb252ZXJzaW9uLgorICAgICAqIHxbMjNdICAgIHxEQk1FTiAgICAgfERvdWJsZSBCdWZmZXIgTW9kZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBoYXMgb25lIHNhbXBsZSByZXN1bHQgcmVnaXN0ZXIuIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIGhhcyB0d28gc2FtcGxlIHJlc3VsdCByZWdpc3RlcnMuCisgICAgICogfFszMToyNF0gfEVYVFNNUFQgICB8QURDIFNhbXBsaW5nIFRpbWUgRXh0ZW5kCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBBREMgY29udmVydGluZyBhdCBoaWdoIGNvbnZlcnNpb24gcmF0ZSwgdGhlIHNhbXBsaW5nIHRpbWUgb2YgYW5hbG9nIGlucHV0IHZvbHRhZ2UgbWF5IG5vdCBlbm91Z2ggaWYgaW5wdXQgY2hhbm5lbCBsb2FkaW5nIGlzIGhlYXZ5LCB1c2VyIGNhbiBleHRlbmQgQURDIHNhbXBsaW5nIHRpbWUgYWZ0ZXIgdHJpZ2dlciBzb3VyY2UgaXMgY29taW5nIHRvIGdldCBlbm91Z2ggc2FtcGxpbmcgdGltZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmFuZ2Ugb2Ygc3RhcnQgZGVsYXkgdGltZSBpcyBmcm9tIDB+MjU1IEFEQyBjbG9jay4KKyAgICAgKiBAdmFyIEVBRENfVDo6SU5UU1JDWzRdCisgICAgICogT2Zmc2V0OiAweEQwICBBREMgaW50ZXJydXB0IDB+MyBTb3VyY2UgRW5hYmxlIENvbnRyb2wgUmVnaXN0ZXIuCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1BMSUUwICAgIHxTYW1wbGUgTW9kdWxlIDAgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSAwIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSAwIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxTUExJRTEgICAgfFNhbXBsZSBNb2R1bGUgMSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDEgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDEgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFNQTElFMiAgICB8U2FtcGxlIE1vZHVsZSAyIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBNb2R1bGUgMiBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBNb2R1bGUgMiBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8U1BMSUUzICAgIHxTYW1wbGUgTW9kdWxlIDMgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSAzIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSAzIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxTUExJRTQgICAgfFNhbXBsZSBNb2R1bGUgNCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfFNQTElFNSAgICB8U2FtcGxlIE1vZHVsZSA1IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBNb2R1bGUgNSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBNb2R1bGUgNSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8U1BMSUU2ICAgIHxTYW1wbGUgTW9kdWxlIDYgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSA2IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSA2IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbN10gICAgIHxTUExJRTcgICAgfFNhbXBsZSBNb2R1bGUgNyBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDcgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDcgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfFNQTElFOCAgICB8U2FtcGxlIE1vZHVsZSA4IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBNb2R1bGUgOCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBNb2R1bGUgOCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzldICAgICB8U1BMSUU5ICAgIHxTYW1wbGUgTW9kdWxlIDkgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSA5IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSA5IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTBdICAgIHxTUExJRTEwICAgfFNhbXBsZSBNb2R1bGUgMTAgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSAxMCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBNb2R1bGUgMTAgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxMV0gICAgfFNQTElFMTEgICB8U2FtcGxlIE1vZHVsZSAxMSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDExIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSAxMSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzEyXSAgICB8U1BMSUUxMiAgIHxTYW1wbGUgTW9kdWxlIDEyIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBNb2R1bGUgMTIgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDEyIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTNdICAgIHxTUExJRTEzICAgfFNhbXBsZSBNb2R1bGUgMTMgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSAxMyBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBNb2R1bGUgMTMgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxNF0gICAgfFNQTElFMTQgICB8U2FtcGxlIE1vZHVsZSAxNCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDE0IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSAxNCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE1XSAgICB8U1BMSUUxNSAgIHxTYW1wbGUgTW9kdWxlIDE1IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBNb2R1bGUgMTUgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDE1IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTZdICAgIHxTUExJRTE2ICAgfFNhbXBsZSBNb2R1bGUgMTYgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSAxNiBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBNb2R1bGUgMTYgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxN10gICAgfFNQTElFMTcgICB8U2FtcGxlIE1vZHVsZSAxNyBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDE3IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSAxNyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE4XSAgICB8U1BMSUUxOCAgIHxTYW1wbGUgTW9kdWxlIDE4IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBNb2R1bGUgMTggaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDE4IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIEB2YXIgRUFEQ19UOjpDTVBbNF0KKyAgICAgKiBPZmZzZXQ6IDB4RTAgIEFEQyBSZXN1bHQgQ29tcGFyZSBSZWdpc3RlciAwfjMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBRENNUEVOICAgfEFEQyBSZXN1bHQgQ29tcGFyZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgdG8gMSB0byBlbmFibGUgY29tcGFyZSBDTVBEQVQgKEVBRENfQ01QblsyNzoxNl0sIG49MH4zKSB3aXRoIHNwZWNpZmllZCBzYW1wbGUgbW9kdWxlIGNvbnZlcnNpb24gcmVzdWx0IHdoZW4gY29udmVydGVkIGRhdGEgaXMgbG9hZGVkIGludG8gRUFEQ19EQVQgcmVnaXN0ZXIuCisgICAgICogfFsxXSAgICAgfEFEQ01QSUUgICB8QURDIFJlc3VsdCBDb21wYXJlIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgZnVuY3Rpb24gaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIGZ1bmN0aW9uIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIGlzIGVuYWJsZWQgYW5kIHRoZSBjb21wYXJlIGNvbmRpdGlvbiBtYXRjaGVzIHRoZSBzZXR0aW5nIG9mIENNUENPTkQgKEVBRENfQ01QblsyXSwgbj0wfjMpIGFuZCBDTVBNQ05UIChFQURDX0NNUG5bMTE6OF0sIG49MH4zKSwgQURDTVBGbiAoRUFEQ19TVEFUVVMyWzc6NF0sIG49MH4zKSB3aWxsIGJlIGFzc2VydGVkLCBpbiB0aGUgbWVhbndoaWxlLCBpZiBBRENNUElFIGlzIHNldCB0byAxLCBhIGNvbXBhcmUgaW50ZXJydXB0IHJlcXVlc3QgaXMgZ2VuZXJhdGVkLgorICAgICAqIHxbMl0gICAgIHxDTVBDT05EICAgfENvbXBhcmUgQ29uZGl0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MD0gU2V0IHRoZSBjb21wYXJlIGNvbmRpdGlvbiBhcyB0aGF0IHdoZW4gYSAxMi1iaXQgQURDIGNvbnZlcnNpb24gcmVzdWx0IGlzIGxlc3MgdGhhbiB0aGUgMTItYml0IENNUERBVCAoRUFEQ19DTVBuIFsyNzoxNl0pLCB0aGUgaW50ZXJuYWwgbWF0Y2ggY291bnRlciB3aWxsIGluY3JlYXNlIG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxPSBTZXQgdGhlIGNvbXBhcmUgY29uZGl0aW9uIGFzIHRoYXQgd2hlbiBhIDEyLWJpdCBBREMgY29udmVyc2lvbiByZXN1bHQgaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgMTItYml0IENNUERBVCAoRUFEQ19DTVBuIFsyNzoxNl0pLCB0aGUgaW50ZXJuYWwgbWF0Y2ggY291bnRlciB3aWxsIGluY3JlYXNlIG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIHRoZSBpbnRlcm5hbCBjb3VudGVyIHJlYWNoZXMgdGhlIHZhbHVlIHRvIChDTVBNQ05UIChFQURDX0NNUG5bMTE6OF0sIG49MH4zKSArMSksIHRoZSBDTVBGIGJpdCB3aWxsIGJlIHNldC4KKyAgICAgKiB8Wzc6M10gICB8Q01QU1BMICAgIHxDb21wYXJlIFNhbXBsZSBNb2R1bGUgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMDAgPSBTYW1wbGUgTW9kdWxlIDAgY29udmVyc2lvbiByZXN1bHQgRUFEQ19EQVQwIGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAxID0gU2FtcGxlIE1vZHVsZSAxIGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUMSBpcyBzZWxlY3RlZCB0byBiZSBjb21wYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxMCA9IFNhbXBsZSBNb2R1bGUgMiBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDIgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMTEgPSBTYW1wbGUgTW9kdWxlIDMgY29udmVyc2lvbiByZXN1bHQgRUFEQ19EQVQzIGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAwID0gU2FtcGxlIE1vZHVsZSA0IGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUNCBpcyBzZWxlY3RlZCB0byBiZSBjb21wYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwMSA9IFNhbXBsZSBNb2R1bGUgNSBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDUgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMTAgPSBTYW1wbGUgTW9kdWxlIDYgY29udmVyc2lvbiByZXN1bHQgRUFEQ19EQVQ2IGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTExID0gU2FtcGxlIE1vZHVsZSA3IGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUNyBpcyBzZWxlY3RlZCB0byBiZSBjb21wYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwMCA9IFNhbXBsZSBNb2R1bGUgOCBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDggaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMDEgPSBTYW1wbGUgTW9kdWxlIDkgY29udmVyc2lvbiByZXN1bHQgRUFEQ19EQVQ5IGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEwID0gU2FtcGxlIE1vZHVsZSAxMCBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDEwIGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDExID0gU2FtcGxlIE1vZHVsZSAxMSBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDExIGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAwID0gU2FtcGxlIE1vZHVsZSAxMiBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDEyIGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAxID0gU2FtcGxlIE1vZHVsZSAxMyBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDEzIGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEwID0gU2FtcGxlIE1vZHVsZSAxNCBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDE0IGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTExID0gU2FtcGxlIE1vZHVsZSAxNSBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDE1IGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAwID0gU2FtcGxlIE1vZHVsZSAxNiBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDE2IGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAxID0gU2FtcGxlIE1vZHVsZSAxNyBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDE3IGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEwID0gU2FtcGxlIE1vZHVsZSAxOCBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDE4IGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHxbMTE6OF0gIHxDTVBNQ05UICAgfENvbXBhcmUgTWF0Y2ggQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBzcGVjaWZpZWQgQURDIHNhbXBsZSBtb2R1bGUgYW5hbG9nIGNvbnZlcnNpb24gcmVzdWx0IG1hdGNoZXMgdGhlIGNvbXBhcmUgY29uZGl0aW9uIGRlZmluZWQgYnkgQ01QQ09ORCAoRUFEQ19DTVBuWzJdLCBuPTB+MyksIHRoZSBpbnRlcm5hbCBtYXRjaCBjb3VudGVyIHdpbGwgaW5jcmVhc2UgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBjb21wYXJlIHJlc3VsdCBkb2VzIG5vdCBtZWV0IHRoZSBjb21wYXJlIGNvbmRpdGlvbiwgdGhlIGludGVybmFsIGNvbXBhcmUgbWF0Y2ggY291bnRlciB3aWxsIHJlc2V0IHRvIDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBpbnRlcm5hbCBjb3VudGVyIHJlYWNoZXMgdGhlIHZhbHVlIHRvIChDTVBNQ05UICsxKSwgdGhlIEFEQ01QRm4gKEVBRENfU1RBVFVTMls3OjRdLCBuPTB+Mykgd2lsbCBiZSBzZXQuCisgICAgICogfFsxNV0gICAgfENNUFdFTiAgICB8Q29tcGFyZSBXaW5kb3cgTW9kZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFEQ01QRjAgKEVBRENfU1RBVFVTMls0XSkgd2lsbCBiZSBzZXQgd2hlbiBFQURDX0NNUDAgY29tcGFyZWQgY29uZGl0aW9uIG1hdGNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBRENNUEYyIChFQURDX1NUQVRVUzJbNl0pIHdpbGwgYmUgc2V0IHdoZW4gRUFEQ19DTVAyIGNvbXBhcmVkIGNvbmRpdGlvbiBtYXRjaGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFEQ01QRjAgKEVBRENfU1RBVFVTMls0XSkgd2lsbCBiZSBzZXQgd2hlbiBib3RoIEVBRENfQ01QMCBhbmQgRUFEQ19DTVAxIGNvbXBhcmVkIGNvbmRpdGlvbiBtYXRjaGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QURDTVBGMiAoRUFEQ19TVEFUVVMyWzZdKSB3aWxsIGJlIHNldCB3aGVuIGJvdGggRUFEQ19DTVAyIGFuZCBFQURDX0NNUDMgY29tcGFyZWQgY29uZGl0aW9uIG1hdGNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgb25seSBwcmVzZW50IGluIEVBRENfQ01QMCBhbmQgRUFEQ19DTVAyIHJlZ2lzdGVyLgorICAgICAqIHxbMjc6MTZdIHxDTVBEQVQgICAgfENvbXBhcmlzb24gRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSAxMiBiaXRzIGRhdGEgaXMgdXNlZCB0byBjb21wYXJlIHdpdGggY29udmVyc2lvbiByZXN1bHQgb2Ygc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiB1c2UgaXQgdG8gbW9uaXRvciB0aGUgZXh0ZXJuYWwgYW5hbG9nIGlucHV0IHBpbiB2b2x0YWdlIHRyYW5zaXRpb24gd2l0aG91dCBpbXBvc2luZyBhIGxvYWQgb24gc29mdHdhcmUuCisgICAgICogQHZhciBFQURDX1Q6OlNUQVRVUzAKKyAgICAgKiBPZmZzZXQ6IDB4RjAgIEFEQyBTdGF0dXMgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFZBTElEICAgICB8RUFEQ19EQVQwfjE1IERhdGEgVmFsaWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGEgbWlycm9yIG9mIFZBTElEIGJpdCBpbiBzYW1wbGUgbW9kdWxlIEFEQyByZXN1bHQgZGF0YSByZWdpc3RlciBFQURDX0RBVG4uIChuPTB+MTgpLgorICAgICAqIHxbMzE6MTZdIHxPViAgICAgICAgfEVBRENfREFUMH4xNSBPdmVycnVuIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBhIG1pcnJvciB0byBPViBiaXQgaW4gc2FtcGxlIG1vZHVsZSBBREMgcmVzdWx0IGRhdGEgcmVnaXN0ZXIgRUFEQ19EQVRuLiAobj0wfjE4KS4KKyAgICAgKiBAdmFyIEVBRENfVDo6U1RBVFVTMQorICAgICAqIE9mZnNldDogMHhGNCAgQURDIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzI6MF0gICB8VkFMSUQgICAgIHxFQURDX0RBVDE2fjE4IERhdGEgVmFsaWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGEgbWlycm9yIG9mIFZBTElEIGJpdCBpbiBzYW1wbGUgbW9kdWxlIEFEQyByZXN1bHQgZGF0YSByZWdpc3RlciBFQURDX0RBVG4uIChuPTB+MTgpLgorICAgICAqIHxbMTg6MTZdIHxPViAgICAgICAgfEVBRENfREFUMTZ+MTggT3ZlcnJ1biBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgYSBtaXJyb3IgdG8gT1YgYml0IGluIHNhbXBsZSBtb2R1bGUgQURDIHJlc3VsdCBkYXRhIHJlZ2lzdGVyIEVBRENfREFUbi4gKG49MH4xOCkuCisgICAgICogQHZhciBFQURDX1Q6OlNUQVRVUzIKKyAgICAgKiBPZmZzZXQ6IDB4RjggIEFEQyBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEFESUYwICAgICB8QURDIEFESU5UMCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBBRElOVDAgaW50ZXJydXB0IHB1bHNlIHJlY2VpdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRElOVDAgaW50ZXJydXB0IHB1bHNlIGhhcyBiZWVuIHJlY2VpdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjpUaGlzIGJpdCBpbmRpY2F0ZXMgd2hldGhlciBhbiBBREMgY29udmVyc2lvbiBvZiBzcGVjaWZpYyBzYW1wbGUgbW9kdWxlIGhhcyBiZWVuIGNvbXBsZXRlZAorICAgICAqIHxbMV0gICAgIHxBRElGMSAgICAgfEFEQyBBRElOVDEgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQURJTlQxIGludGVycnVwdCBwdWxzZSByZWNlaXZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQURJTlQxIGludGVycnVwdCBwdWxzZSBoYXMgYmVlbiByZWNlaXZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6VGhpcyBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgYW4gQURDIGNvbnZlcnNpb24gb2Ygc3BlY2lmaWMgc2FtcGxlIG1vZHVsZSBoYXMgYmVlbiBjb21wbGV0ZWQKKyAgICAgKiB8WzJdICAgICB8QURJRjIgICAgIHxBREMgQURJTlQyIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEFESU5UMiBpbnRlcnJ1cHQgcHVsc2UgcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFESU5UMiBpbnRlcnJ1cHQgcHVsc2UgaGFzIGJlZW4gcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOlRoaXMgYml0IGluZGljYXRlcyB3aGV0aGVyIGFuIEFEQyBjb252ZXJzaW9uIG9mIHNwZWNpZmljIHNhbXBsZSBtb2R1bGUgaGFzIGJlZW4gY29tcGxldGVkCisgICAgICogfFszXSAgICAgfEFESUYzICAgICB8QURDIEFESU5UMyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBBRElOVDMgaW50ZXJydXB0IHB1bHNlIHJlY2VpdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRElOVDMgaW50ZXJydXB0IHB1bHNlIGhhcyBiZWVuIHJlY2VpdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjpUaGlzIGJpdCBpbmRpY2F0ZXMgd2hldGhlciBhbiBBREMgY29udmVyc2lvbiBvZiBzcGVjaWZpYyBzYW1wbGUgbW9kdWxlIGhhcyBiZWVuIGNvbXBsZXRlZAorICAgICAqIHxbNF0gICAgIHxBRENNUEYwICAgfEFEQyBDb21wYXJlIDAgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIHNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIGNvbnZlcnNpb24gcmVzdWx0IG1lZXRzIHNldHRpbmcgY29uZGl0aW9uIGluIEVBRENfQ01QMCB0aGVuIHRoaXMgYml0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb252ZXJzaW9uIHJlc3VsdCBpbiBFQURDX0RBVCBkb2VzIG5vdCBtZWV0IEVBRENfQ01QMCByZWdpc3RlciBzZXR0aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb252ZXJzaW9uIHJlc3VsdCBpbiBFQURDX0RBVCBtZWV0cyBFQURDX0NNUDAgcmVnaXN0ZXIgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzVdICAgICB8QURDTVBGMSAgIHxBREMgQ29tcGFyZSAxIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBzcGVjaWZpYyBzYW1wbGUgbW9kdWxlIEFEQyBjb252ZXJzaW9uIHJlc3VsdCBtZWV0cyBzZXR0aW5nIGNvbmRpdGlvbiBpbiBFQURDX0NNUDEgdGhlbiB0aGlzIGJpdCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29udmVyc2lvbiByZXN1bHQgaW4gRUFEQ19EQVQgZG9lcyBub3QgbWVldCBFQURDX0NNUDEgcmVnaXN0ZXIgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29udmVyc2lvbiByZXN1bHQgaW4gRUFEQ19EQVQgbWVldHMgRUFEQ19DTVAxIHJlZ2lzdGVyIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs2XSAgICAgfEFEQ01QRjIgICB8QURDIENvbXBhcmUgMiBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgc3BlY2lmaWMgc2FtcGxlIG1vZHVsZSBBREMgY29udmVyc2lvbiByZXN1bHQgbWVldHMgc2V0dGluZyBjb25kaXRpb24gaW4gRUFEQ19DTVAyIHRoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIGRvZXMgbm90IG1lZXQgRUFEQ19DTVAyIHJlZ2lzdGVyIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIG1lZXRzIEVBRENfQ01QMiByZWdpc3RlciBzZXR0aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbN10gICAgIHxBRENNUEYzICAgfEFEQyBDb21wYXJlIDMgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIHNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIGNvbnZlcnNpb24gcmVzdWx0IG1lZXRzIHNldHRpbmcgY29uZGl0aW9uIGluIEVBRENfQ01QMyB0aGVuIHRoaXMgYml0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb252ZXJzaW9uIHJlc3VsdCBpbiBFQURDX0RBVCBkb2VzIG5vdCBtZWV0IEVBRENfQ01QMyByZWdpc3RlciBzZXR0aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb252ZXJzaW9uIHJlc3VsdCBpbiBFQURDX0RBVCBtZWV0cyBFQURDX0NNUDMgcmVnaXN0ZXIgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzhdICAgICB8QURPVklGMCAgIHxBREMgQURJTlQwIEludGVycnVwdCBGbGFnIE92ZXJydW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQURJTlQwIGludGVycnVwdCBmbGFnIGlzIG5vdCBvdmVyd3JpdHRlbiB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRElOVDAgaW50ZXJydXB0IGZsYWcgaXMgb3ZlcndyaXR0ZW4gdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzldICAgICB8QURPVklGMSAgIHxBREMgQURJTlQxIEludGVycnVwdCBGbGFnIE92ZXJydW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQURJTlQxIGludGVycnVwdCBmbGFnIGlzIG5vdCBvdmVyd3JpdHRlbiB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRElOVDEgaW50ZXJydXB0IGZsYWcgaXMgb3ZlcndyaXR0ZW4gdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzEwXSAgICB8QURPVklGMiAgIHxBREMgQURJTlQyIEludGVycnVwdCBGbGFnIE92ZXJydW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQURJTlQyIGludGVycnVwdCBmbGFnIGlzIG5vdCBvdmVyd3JpdHRlbiB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRElOVDIgaW50ZXJydXB0IGZsYWcgaXMgcyBvdmVyd3JpdHRlbiB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMTFdICAgIHxBRE9WSUYzICAgfEFEQyBBRElOVDMgSW50ZXJydXB0IEZsYWcgT3ZlcnJ1bgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBRElOVDMgaW50ZXJydXB0IGZsYWcgaXMgbm90IG92ZXJ3cml0dGVuIHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFESU5UMyBpbnRlcnJ1cHQgZmxhZyBpcyBvdmVyd3JpdHRlbiB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMTJdICAgIHxBRENNUE8wICAgfEFEQyBDb21wYXJlIDAgT3V0cHV0IFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSAxMiBiaXRzIGNvbXBhcmUwIGRhdGEgQ01QREFUMCAoRUFEQ19DTVAwWzI3OjE2XSkgaXMgdXNlZCB0byBjb21wYXJlIHdpdGggY29udmVyc2lvbiByZXN1bHQgb2Ygc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gdXNlIGl0IHRvIG1vbml0b3IgdGhlIGV4dGVybmFsIGFuYWxvZyBpbnB1dCBwaW4gdm9sdGFnZSBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIGxlc3MgdGhhbiBDTVBEQVQwIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIGdyZWF0IHRoYW4gb3IgZXF1YWwgQ01QREFUMCBzZXR0aW5nLgorICAgICAqIHxbMTNdICAgIHxBRENNUE8xICAgfEFEQyBDb21wYXJlIDEgT3V0cHV0IFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSAxMiBiaXRzIGNvbXBhcmUxIGRhdGEgQ01QREFUMSAoRUFEQ19DTVAxWzI3OjE2XSkgaXMgdXNlZCB0byBjb21wYXJlIHdpdGggY29udmVyc2lvbiByZXN1bHQgb2Ygc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gdXNlIGl0IHRvIG1vbml0b3IgdGhlIGV4dGVybmFsIGFuYWxvZyBpbnB1dCBwaW4gdm9sdGFnZSBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIGxlc3MgdGhhbiBDTVBEQVQxIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIGdyZWF0IHRoYW4gb3IgZXF1YWwgQ01QREFUMSBzZXR0aW5nLgorICAgICAqIHxbMTRdICAgIHxBRENNUE8yICAgfEFEQyBDb21wYXJlIDIgT3V0cHV0IFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSAxMiBiaXRzIGNvbXBhcmUyIGRhdGEgQ01QREFUMiAoRUFEQ19DTVAyWzI3OjE2XSkgaXMgdXNlZCB0byBjb21wYXJlIHdpdGggY29udmVyc2lvbiByZXN1bHQgb2Ygc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gdXNlIGl0IHRvIG1vbml0b3IgdGhlIGV4dGVybmFsIGFuYWxvZyBpbnB1dCBwaW4gdm9sdGFnZSBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIGxlc3MgdGhhbiBDTVBEQVQyIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIGdyZWF0IHRoYW4gb3IgZXF1YWwgQ01QREFUMiBzZXR0aW5nLgorICAgICAqIHxbMTVdICAgIHxBRENNUE8zICAgfEFEQyBDb21wYXJlIDMgT3V0cHV0IFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSAxMiBiaXRzIGNvbXBhcmUzIGRhdGEgQ01QREFUMyAoRUFEQ19DTVAzWzI3OjE2XSkgaXMgdXNlZCB0byBjb21wYXJlIHdpdGggY29udmVyc2lvbiByZXN1bHQgb2Ygc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gdXNlIGl0IHRvIG1vbml0b3IgdGhlIGV4dGVybmFsIGFuYWxvZyBpbnB1dCBwaW4gdm9sdGFnZSBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIGxlc3MgdGhhbiBDTVBEQVQzIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIGdyZWF0IHRoYW4gb3IgZXF1YWwgQ01QREFUMyBzZXR0aW5nLgorICAgICAqIHxbMjA6MTZdIHxDSEFOTkVMICAgfEN1cnJlbnQgQ29udmVyc2lvbiBDaGFubmVsIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWxlZCByZWZsZWN0cyBBREMgY3VycmVudCBjb252ZXJzaW9uIGNoYW5uZWwgd2hlbiBCVVNZPTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgcmVhZCBvbmx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwSCA9IEVBRENfQ0gwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxSCA9IEVBRENfQ0gxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAySCA9IEVBRENfQ0gyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAzSCA9IEVBRENfQ0gzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA0SCA9IEVBRENfQ0g0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA1SCA9IEVBRENfQ0g1LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA2SCA9IEVBRENfQ0g2LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA3SCA9IEVBRENfQ0g3LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA4SCA9IEVBRENfQ0g4LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA5SCA9IEVBRENfQ0g5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDBBSCA9IEVBRENfQ0gxMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwQkggPSBFQURDX0NIMTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MENIID0gRUFEQ19DSDEyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDBESCA9IEVBRENfQ0gxMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwRUggPSBFQURDX0NIMTQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MEZIID0gRUFEQ19DSDE1LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwSCA9IFZCRy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMUggPSBWVEVNUC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMkggPSBWQkFULzQuCisgICAgICogfFsyM10gICAgfEJVU1kgICAgICB8QnVzeS9JZGxlIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVBREMgaXMgaW4gaWRsZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUFEQyBpcyBidXN5IGF0IGNvbnZlcnNpb24uCisgICAgICogfFsyNF0gICAgfEFET1ZJRiAgICB8QWxsIEFEQyBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIEJpdHMgQ2hlY2sgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxuPTB+My4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm9uZSBvZiBBRElOVCBpbnRlcnJ1cHQgZmxhZyBBRE9WSUZuIChFQURDX1NUQVRVUzJbMTE6OF0pIGlzIG92ZXJ3cml0dGVuIHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFueSBvbmUgb2YgQURJTlQgaW50ZXJydXB0IGZsYWcgQURPVklGbiAoRUFEQ19TVEFUVVMyWzExOjhdKSBpcyBvdmVyd3JpdHRlbiB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwga2VlcCAxIHdoZW4gYW55IEFET1ZJRm4gRmxhZyBpcyBlcXVhbCB0byAxLgorICAgICAqIHxbMjVdICAgIHxTVE9WRiAgICAgfGZvciBBbGwgQURDIFNhbXBsZSBNb2R1bGUgU3RhcnQgb2YgQ29udmVyc2lvbiBPdmVycnVuIEZsYWdzIENoZWNrIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bj0wfjE4LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb25lIG9mIHNhbXBsZSBtb2R1bGUgZXZlbnQgb3ZlcnJ1biBmbGFnIFNQT1ZGbiAoRUFEQ19PVlNUU1tuXSkgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFueSBvbmUgb2Ygc2FtcGxlIG1vZHVsZSBldmVudCBvdmVycnVuIGZsYWcgU1BPVkZuIChFQURDX09WU1RTW25dKSBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGtlZXAgMSB3aGVuIGFueSBTUE9WRm4gRmxhZyBpcyBlcXVhbCB0byAxLgorICAgICAqIHxbMjZdICAgIHxBVkFMSUQgICAgfGZvciBBbGwgU2FtcGxlIE1vZHVsZSBBREMgUmVzdWx0IERhdGEgUmVnaXN0ZXIgRUFEQ19EQVQgRGF0YSBWYWxpZCBGbGFnIENoZWNrIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bj0wfjE4LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb25lIG9mIHNhbXBsZSBtb2R1bGUgZGF0YSByZWdpc3RlciB2YWxpZCBmbGFnIFZBTElEbiAoRUFEQ19EQVRuWzE3XSkgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFueSBvbmUgb2Ygc2FtcGxlIG1vZHVsZSBkYXRhIHJlZ2lzdGVyIHZhbGlkIGZsYWcgVkFMSURuIChFQURDX0RBVG5bMTddKSBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGtlZXAgMSB3aGVuIGFueSBWQUxJRG4gRmxhZyBpcyBlcXVhbCB0byAxLgorICAgICAqIHxbMjddICAgIHxBT1YgICAgICAgfGZvciBBbGwgU2FtcGxlIE1vZHVsZSBBREMgUmVzdWx0IERhdGEgUmVnaXN0ZXIgT3ZlcnJ1biBGbGFncyBDaGVjayAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfG49MH4xOC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm9uZSBvZiBzYW1wbGUgbW9kdWxlIGRhdGEgcmVnaXN0ZXIgb3ZlcnJ1biBmbGFnIE9WbiAoRUFEQ19EQVRuWzE2XSkgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFueSBvbmUgb2Ygc2FtcGxlIG1vZHVsZSBkYXRhIHJlZ2lzdGVyIG92ZXJydW4gZmxhZyBPVm4gKEVBRENfREFUblsxNl0pIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwga2VlcCAxIHdoZW4gYW55IE9WbiBGbGFnIGlzIGVxdWFsIHRvIDEuCisgICAgICogQHZhciBFQURDX1Q6OlNUQVRVUzMKKyAgICAgKiBPZmZzZXQ6IDB4RkMgIEFEQyBTdGF0dXMgUmVnaXN0ZXIgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs0OjBdICAgfENVUlNQTCAgICB8QURDIEN1cnJlbnQgU2FtcGxlIE1vZHVsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgc2hvdyB0aGUgY3VycmVudCBBREMgaXMgY29udHJvbGxlZCBieSB3aGljaCBzYW1wbGUgbW9kdWxlIGNvbnRyb2wgbG9naWMgbW9kdWxlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgQURDIGlzIElkbGUsIHRoaXMgYml0IGZpbGVkIHdpbGwgc2V0IHRvIDB4MUYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBpcyBhIHJlYWQgb25seSByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEVBRENfVDo6RERBVAorICAgICAqIE9mZnNldDogMHgxMDAtMHgxMEMgIEFEQyBEb3VibGUgRGF0YSBSZWdpc3RlciBuIGZvciBTYW1wbGUgTW9kdWxlIG4sIG49MH4zCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UkVTVUxUICAgIHxBREMgQ29udmVyc2lvbiBSZXN1bHRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjb250YWlucyAxMiBiaXRzIGNvbnZlcnNpb24gcmVzdWx0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBETU9GIChFQURDX0NUTFs5XSkgaXMgc2V0IHRvIDAsIDEyLWJpdCBBREMgY29udmVyc2lvbiByZXN1bHQgd2l0aCB1bnNpZ25lZCBmb3JtYXQgd2lsbCBiZSBmaWxsZWQgaW4gUkVTVUxUIFsxMTowXSBhbmQgemVybyB3aWxsIGJlIGZpbGxlZCBpbiBSRVNVTFQgWzE1OjEyXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIERNT0YgKEVBRENfQ1RMWzldKSBzZXQgdG8gMSwgMTItYml0IEFEQyBjb252ZXJzaW9uIHJlc3VsdCB3aXRoIDInY29tcGxlbWVudCBmb3JtYXQgd2lsbCBiZSBmaWxsZWQgaW4gUkVTVUxUIFsxMTowXSBhbmQgc2lnbmVkIGJpdHMgdG8gd2lsbCBiZSBmaWxsZWQgaW4gUkVTVUxUIFsxNToxMl0uCisgICAgICogfFsxNl0gICAgfE9WICAgICAgICB8T3ZlcnJ1biBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgaW4gUkVTVUxUIChFQURDX0RBVG5bMTU6MF0sIG49MH4zKSBpcyByZWNlbnQgY29udmVyc2lvbiByZXN1bHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERhdGEgaW4gUkVTVUxUIChFQURDX0RBVG5bMTU6MF0sIG49MH4zKSBpcyBvdmVyd3JpdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgY29udmVydGVkIGRhdGEgaW4gUkVTVUxUWzE1OjBdIGhhcyBub3QgYmVlbiByZWFkIGJlZm9yZSBuZXcgY29udmVyc2lvbiByZXN1bHQgaXMgbG9hZGVkIHRvIHRoaXMgcmVnaXN0ZXIsIE9WIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGNsZWFyZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgRUFEQ19EREFUIHJlZ2lzdGVyIGlzIHJlYWQuCisgICAgICogfFsxN10gICAgfFZBTElEICAgICB8VmFsaWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEb3VibGUgZGF0YSBpbiBSRVNVTFQgKEVBRENfRERBVG5bMTU6MF0pIGlzIG5vdCB2YWxpZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRG91YmxlIGRhdGEgaW4gUkVTVUxUIChFQURDX0REQVRuWzE1OjBdKSBpcyB2YWxpZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gMSB3aGVuIGNvcnJlc3BvbmRpbmcgc2FtcGxlIG1vZHVsZSBjaGFubmVsIGFuYWxvZyBpbnB1dCBjb252ZXJzaW9uIGlzIGNvbXBsZXRlZCBhbmQgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBFQURDX0REQVRuIHJlZ2lzdGVyIGlzIHJlYWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KG49MH4zKS4KKyAgICAgKiBAdmFyIEVBRENfVDo6UFdSTQorICAgICAqIE9mZnNldDogMHgxMTAgIEFEQyBQb3dlciBNYW5hZ2VtZW50IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UFdVUFJEWSAgIHxBREMgUG93ZXItdXAgU2VxdWVuY2UgQ29tcGxldGVkIGFuZCBSZWFkeSBmb3IgQ29udmVyc2lvbiAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBREMgaXMgbm90IHJlYWR5IGZvciBjb252ZXJzaW9uIG1heSBiZSBpbiBwb3dlciBkb3duIHN0YXRlIG9yIGluIHRoZSBwcm9ncmVzcyBvZiBwb3dlciB1cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQURDIGlzIHJlYWR5IGZvciBjb252ZXJzaW9uLgorICAgICAqIHxbMV0gICAgIHxQV1VDQUxFTiAgfFBvd2VyIFVwIENhbGlicmF0aW9uIEZ1bmN0aW9uIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpc2FibGUgdGhlIGZ1bmN0aW9uIG9mIGNhbGlicmF0aW9uIGF0IHBvd2VyIHVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFbmFibGUgdGhlIGZ1bmN0aW9uIG9mIGNhbGlicmF0aW9uIGF0IHBvd2VyIHVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdvcmsgdG9nZXRoZXIgd2l0aCBDQUxTRUwgKEVBRENfQ0FMQ1RMIFszXSksIHNlZSB0aGUgZm9sbG93aW5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8e1BXVUNBTEVOLCBDQUxTRUwgfSBEZXNjcmlwdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQV1VDQUxFTiBpcyAwIGFuZCBDQUxTRUwgaXMgMDogTm8gbmVlZCB0byBjYWxpYnJhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UFdVQ0FMRU4gaXMgMCBhbmQgQ0FMU0VMIGlzIDE6IE5vIG5lZWQgdG8gY2FsaWJyYXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBXVUNBTEVOIGlzIDEgYW5kIENBTFNFTCBpcyAwOiBMb2FkIGNhbGlicmF0aW9uIHdvcmQgd2hlbiBwb3dlciB1cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQV1VDQUxFTiBpcyAxIGFuZCBDQUxTRUwgaXMgMTogQ2FsaWJyYXRlIHdoZW4gcG93ZXIgdXAuCisgICAgICogfFszOjJdICAgfFBXRE1PRCAgICB8QURDIFBvd2VyLWRvd24gTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCBmaWVsZHMgdG8gc2VsZWN0IEFEQyBwb3dlciBkb3duIG1vZGUgd2hlbiBzeXN0ZW0gcG93ZXItZG93bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IEFEQyBEZWVwIHBvd2VyIGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEFEQyBQb3dlciBkb3duLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQURDIFN0YW5kYnkgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEFEQyBEZWVwIHBvd2VyIGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBEaWZmZXJlbnQgUFdETU9EIGhhcyBkaWZmZXJlbnQgcG93ZXIgZG93bi91cCBzZXF1ZW5jZSwgaW4gb3JkZXIgdG8gYXZvaWQgQURDIHBvd2VyaW5nIHVwIHdpdGggd3Jvbmcgc2VxdWVuY2U7IHVzZXIgbXVzdCBrZWVwIFBXTU9EIGNvbnNpc3RlbnQgZWFjaCB0aW1lIGluIHBvd2VyIGRvd24gYW5kIHN0YXJ0IHVwCisgICAgICogfFsxOTo4XSAgfExET1NVVCAgICB8QURDIEludGVybmFsIExETyBTdGFydC11cCBUaW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRoaXMgYml0IGZpZWxkcyB0byBjb250cm9sIExETyBzdGFydC11cCB0aW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIG1pbmltdW0gcmVxdWlyZWQgTERPIHN0YXJ0LXVwIHRpbWUgaXMgMjB1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfExETyBzdGFydC11cCB0aW1lID0gKDEvQURDX0NMSykgeCBMRE9TVVQuCisgICAgICogQHZhciBFQURDX1Q6OkNBTENUTAorICAgICAqIE9mZnNldDogMHgxMTQgIEFEQyBDYWxpYnJhdGlvbiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzFdICAgICB8Q0FMU1RBUlQgIHxDYWxpYnJhdGlvbiBGdW5jdGlvbmFsIEJsb2NrIFN0YXJ0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN0b3BzIGNhbGlicmF0aW9uIGZ1bmN0aW9uYWwgYmxvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0YXJ0cyBjYWxpYnJhdGlvbiBmdW5jdGlvbmFsIGJsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHNldCBieSBTVyBhbmQgY2xlYXIgYnkgSFcgYWZ0ZXIgcmUtY2FsaWJyYXRpb24gZmluaXNoCisgICAgICogfFsyXSAgICAgfENBTERPTkUgICB8Q2FsaWJyYXRpb24gRnVuY3Rpb25hbCBCbG9jayBDb21wbGV0ZSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEdXJpbmcgYSBjYWxpYnJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FsaWJyYXRpb24gaXMgY29tcGxldGVkLgorICAgICAqIHxbM10gICAgIHxDQUxTRUwgICAgfFNlbGVjdCBDYWxpYnJhdGlvbiBGdW5jdGlvbmFsIEJsb2NrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExvYWQgY2FsaWJyYXRpb24gd29yZCB3aGVuIGNhbGlicmF0aW9uIGZ1bmN0aW9uYWwgYmxvY2sgaXMgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeGVjdXRlIGNhbGlicmF0aW9uIHdoZW4gY2FsaWJyYXRpb24gZnVuY3Rpb25hbCBibG9jayBpcyBhY3RpdmUuCisgICAgICogQHZhciBFQURDX1Q6OkNBTERXUkQKKyAgICAgKiBPZmZzZXQ6IDB4MTE4ICBBREMgQ2FsaWJyYXRpb24gTG9hZCBXb3JkIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzY6MF0gICB8Q0FMV09SRCAgIHxDYWxpYnJhdGlvbiBXb3JkIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSB0byB0aGlzIHJlZ2lzdGVyIHdpdGggdGhlIHByZXZpb3VzIGNhbGlicmF0aW9uIHdvcmQgYmVmb3JlIGxvYWQgY2FsaWJyYXRpb24gYWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgdGhpcyByZWdpc3RlciBhZnRlciBjYWxpYnJhdGlvbiBkb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBjYWxpYnJhdGlvbiBibG9jayBjb250YWlucyB0d28gcGFydHMgQ0FMSUJSQVRJT04gYW5kIExPQUQgQ0FMSUJSQVRJT047IGlmIHRoZSBjYWxpYnJhdGlvbiBibG9jayBjb25maWd1cmUgYXMgQ0FMSUJSQVRJT047IHRoZW4gdGhpcyByZWdpc3RlciByZXByZXNlbnQgdGhlIHJlc3VsdCBvZiBjYWxpYnJhdGlvbiB3aGVuIGNhbGlicmF0aW9uIGlzIGNvbXBsZXRlZDsgaWYgY29uZmlndXJlIGFzIExPQUQgQ0FMSUJSQVRJT04gOyBjb25maWd1cmUgdGhpcyByZWdpc3RlciBiZWZvcmUgbG9hZGluZyBjYWxpYnJhdGlvbiBhY3Rpb24sIGFmdGVyIGxvYWRpbmcgY2FsaWJyYXRpb24gY29tcGxldGUsIHRoZSBsYW9kZWQgY2FsaWJyYXRpb24gd29yZCB3aWxsIGFwcGx5IHRvIHRoZSBBREM7IHdoaWxlIGluIGxvYWRpbmcgY2FsaWJyYXRpb24gZnVuY3Rpb24gdGhlIGxvYWRlZCB2YWx1ZSB3aWxsIG5vdCBiZSBlcXVhbCB0byB0aGUgb3JpZ2luYWwgQ0FMV09SRCB1bnRpbCBjYWxpYnJhdGlvbiBpcyBkb25lLgorICAgICAqLworCisgICAgX19JICB1aW50MzJfdCBEQVRbMTldOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMH4weDAwNDhdIEFEQyBEYXRhIFJlZ2lzdGVyIG4gZm9yIFNhbXBsZSBNb2R1bGUgbiwgbj0wfjE4ICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQ1VSREFUOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNGNdIEFEQyBQRE1BIEN1cnJlbnQgVHJhbnNmZXIgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDUwXSBBREMgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBTV1RSRzsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA1NF0gQURDIFNhbXBsZSBNb2R1bGUgU29mdHdhcmUgU3RhcnQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUEVORFNUUzsgICAgICAgICAgICAgICAvKiE8IFsweDAwNThdIEFEQyBTdGFydCBvZiBDb252ZXJzaW9uIFBlbmRpbmcgRmxhZyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IE9WU1RTOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDVjXSBBREMgU2FtcGxlIE1vZHVsZSBTdGFydCBvZiBDb252ZXJzaW9uIE92ZXJydW4gRmxhZyBSZWdpc3RlciAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFs4XTsKKyAgICBfX0lPIHVpbnQzMl90IFNDVExbMTldOyAgICAgICAgICAgICAgLyohPCBbMHgwMDgwfjB4MDBjOF0gIEFEQyBTYW1wbGUgTW9kdWxlIG4gQ29udHJvbCBSZWdpc3Rlciwgbj0wfjE4ICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVsxXTsKKyAgICBfX0lPIHVpbnQzMl90IElOVFNSQ1s0XTsgICAgICAgICAgICAgLyohPCBbMHgwMGQwfjB4MDBkY10gIEFEQyBpbnRlcnJ1cHQgbiBTb3VyY2UgRW5hYmxlIENvbnRyb2wgUmVnaXN0ZXIsIG49MH4zICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTVBbNF07ICAgICAgICAgICAgICAgIC8qITwgWzB4MDBlMH4weDAwZWNdICBBREMgUmVzdWx0IENvbXBhcmUgUmVnaXN0ZXIgbiwgbj0wfjMgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgU1RBVFVTMDsgICAgICAgICAgICAgICAvKiE8IFsweDAwZjBdIEFEQyBTdGF0dXMgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNUQVRVUzE7ICAgICAgICAgICAgICAgLyohPCBbMHgwMGY0XSBBREMgU3RhdHVzIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTVEFUVVMyOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBmOF0gQURDIFN0YXR1cyBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgU1RBVFVTMzsgICAgICAgICAgICAgICAvKiE8IFsweDAwZmNdIEFEQyBTdGF0dXMgUmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEREQVRbNF07ICAgICAgICAgICAgICAgLyohPCBbMHgwMTAwfjB4MDEwY10gIEFEQyBEb3VibGUgRGF0YSBSZWdpc3RlciBuIGZvciBTYW1wbGUgTW9kdWxlIG4sIG49MH4zICAgICovCisgICAgX19JTyB1aW50MzJfdCBQV1JNOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDExMF0gQURDIFBvd2VyIE1hbmFnZW1lbnQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0FMQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAxMTRdIEFEQyBDYWxpYnJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENBTERXUkQ7ICAgICAgICAgICAgICAgLyohPCBbMHgwMTE4XSBBREMgQ2FsaWJyYXRpb24gTG9hZCBXb3JkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gRUFEQ19UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBFQURDX0NPTlNUIEVBREMgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgRUFEQyBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIEVBRENfREFUX1JFU1VMVF9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVF9SRVNVTFRfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVRfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVF9PVl9Qb3MgICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVRfT1ZfTXNrICAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUX09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDogT1YgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVRfVkFMSURfUG9zICAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDogVkFMSUQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUX1ZBTElEX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVF9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ6IFZBTElEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMF9SRVNVTFRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDA6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDBfUkVTVUxUX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQwX1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQwOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDBfT1ZfUG9zICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQwOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQwX09WX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMF9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMDogT1YgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQwX1ZBTElEX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMDogVkFMSUQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMF9WQUxJRF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDBfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDA6IFZBTElEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMV9SRVNVTFRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDFfUkVTVUxUX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQxX1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDFfT1ZfUG9zICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxX09WX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMV9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTogT1YgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxX1ZBTElEX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTogVkFMSUQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMV9WQUxJRF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDFfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE6IFZBTElEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMl9SRVNVTFRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDI6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDJfUkVTVUxUX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQyX1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQyOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDJfT1ZfUG9zICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQyOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQyX09WX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMl9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMjogT1YgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQyX1ZBTElEX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMjogVkFMSUQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMl9WQUxJRF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDJfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDI6IFZBTElEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUM19SRVNVTFRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDM6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDNfUkVTVUxUX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQzX1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQzOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDNfT1ZfUG9zICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQzOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQzX09WX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUM19PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMzogT1YgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQzX1ZBTElEX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMzogVkFMSUQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUM19WQUxJRF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDNfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDM6IFZBTElEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUNF9SRVNVTFRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDQ6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDRfUkVTVUxUX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQ0X1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ0OiBSRVNVTFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDRfT1ZfUG9zICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ0OiBPViBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQ0X09WX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUNF9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNDogT1YgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQ0X1ZBTElEX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNDogVkFMSUQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUNF9WQUxJRF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDRfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDQ6IFZBTElEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUNV9SRVNVTFRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDU6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDVfUkVTVUxUX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQ1X1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ1OiBSRVNVTFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDVfT1ZfUG9zICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ1OiBPViBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQ1X09WX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUNV9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNTogT1YgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQ1X1ZBTElEX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNTogVkFMSUQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUNV9WQUxJRF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDVfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDU6IFZBTElEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUNl9SRVNVTFRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDY6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDZfUkVTVUxUX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQ2X1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ2OiBSRVNVTFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDZfT1ZfUG9zICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ2OiBPViBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQ2X09WX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUNl9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNjogT1YgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQ2X1ZBTElEX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNjogVkFMSUQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUNl9WQUxJRF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDZfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDY6IFZBTElEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUN19SRVNVTFRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDc6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDdfUkVTVUxUX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQ3X1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ3OiBSRVNVTFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDdfT1ZfUG9zICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ3OiBPViBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQ3X09WX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUN19PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNzogT1YgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQ3X1ZBTElEX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNzogVkFMSUQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUN19WQUxJRF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDdfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDc6IFZBTElEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUOF9SRVNVTFRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDg6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDhfUkVTVUxUX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQ4X1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ4OiBSRVNVTFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDhfT1ZfUG9zICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ4OiBPViBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQ4X09WX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUOF9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUODogT1YgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQ4X1ZBTElEX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUODogVkFMSUQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUOF9WQUxJRF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDhfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDg6IFZBTElEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUOV9SRVNVTFRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDk6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDlfUkVTVUxUX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQ5X1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ5OiBSRVNVTFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDlfT1ZfUG9zICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ5OiBPViBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQ5X09WX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUOV9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUOTogT1YgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQ5X1ZBTElEX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUOTogVkFMSUQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUOV9WQUxJRF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDlfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDk6IFZBTElEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTBfUkVTVUxUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDEwOiBSRVNVTFQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDEwX1JFU1VMVF9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQxMF9SRVNVTFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMDogUkVTVUxUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDEwX09WX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMDogT1YgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxMF9PVl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTBfT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTA6IE9WIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxMF9WQUxJRF9Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTA6IFZBTElEIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTBfVkFMSURfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDEwX1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDEwOiBWQUxJRCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTFfUkVTVUxUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDExOiBSRVNVTFQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDExX1JFU1VMVF9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQxMV9SRVNVTFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMTogUkVTVUxUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDExX09WX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMTogT1YgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxMV9PVl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTFfT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTE6IE9WIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxMV9WQUxJRF9Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTE6IFZBTElEIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTFfVkFMSURfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDExX1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDExOiBWQUxJRCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTJfUkVTVUxUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDEyOiBSRVNVTFQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDEyX1JFU1VMVF9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQxMl9SRVNVTFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMjogUkVTVUxUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDEyX09WX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMjogT1YgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxMl9PVl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTJfT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTI6IE9WIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxMl9WQUxJRF9Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTI6IFZBTElEIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTJfVkFMSURfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDEyX1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDEyOiBWQUxJRCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTNfUkVTVUxUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDEzOiBSRVNVTFQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDEzX1JFU1VMVF9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQxM19SRVNVTFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMzogUkVTVUxUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDEzX09WX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMzogT1YgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxM19PVl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTNfT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTM6IE9WIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxM19WQUxJRF9Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTM6IFZBTElEIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTNfVkFMSURfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDEzX1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDEzOiBWQUxJRCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTRfUkVTVUxUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE0OiBSRVNVTFQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDE0X1JFU1VMVF9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQxNF9SRVNVTFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNDogUkVTVUxUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDE0X09WX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNDogT1YgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxNF9PVl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTRfT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTQ6IE9WIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxNF9WQUxJRF9Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTQ6IFZBTElEIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTRfVkFMSURfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDE0X1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE0OiBWQUxJRCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTVfUkVTVUxUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE1OiBSRVNVTFQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDE1X1JFU1VMVF9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQxNV9SRVNVTFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNTogUkVTVUxUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDE1X09WX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNTogT1YgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxNV9PVl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTVfT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTU6IE9WIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxNV9WQUxJRF9Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTU6IFZBTElEIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTVfVkFMSURfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDE1X1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE1OiBWQUxJRCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTZfUkVTVUxUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE2OiBSRVNVTFQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDE2X1JFU1VMVF9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQxNl9SRVNVTFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNjogUkVTVUxUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDE2X09WX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNjogT1YgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxNl9PVl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTZfT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTY6IE9WIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxNl9WQUxJRF9Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTY6IFZBTElEIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTZfVkFMSURfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDE2X1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE2OiBWQUxJRCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTdfUkVTVUxUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE3OiBSRVNVTFQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDE3X1JFU1VMVF9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQxN19SRVNVTFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNzogUkVTVUxUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDE3X09WX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNzogT1YgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxN19PVl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTdfT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTc6IE9WIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxN19WQUxJRF9Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTc6IFZBTElEIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTdfVkFMSURfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDE3X1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE3OiBWQUxJRCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMThfUkVTVUxUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE4OiBSRVNVTFQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDE4X1JFU1VMVF9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19EQVQxOF9SRVNVTFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxODogUkVTVUxUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDE4X09WX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxODogT1YgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxOF9PVl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMThfT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTg6IE9WIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxOF9WQUxJRF9Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTg6IFZBTElEIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMThfVkFMSURfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0RBVDE4X1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE4OiBWQUxJRCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ1VSREFUX0NVUkRBVF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNVUkRBVDogQ1VSREFUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX0NVUkRBVF9DVVJEQVRfTXNrICAgICAgICAgICAoMHgzZmZmZnVsIDw8IEVBRENfQ1VSREFUX0NVUkRBVF9Qb3MpICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVVJEQVQ6IENVUkRBVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NUTF9BRENFTl9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IEFEQ0VOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DVExfQURDRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ1RMX0FEQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBBRENFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DVExfQURDUlNUX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBBRENSU1QgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ1RMX0FEQ1JTVF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NUTF9BRENSU1RfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogQURDUlNUIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ1RMX0FEQ0lFTjBfUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogQURDSUVOMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NUTF9BRENJRU4wX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DVExfQURDSUVOMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IEFEQ0lFTjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NUTF9BRENJRU4xX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IEFEQ0lFTjEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DVExfQURDSUVOMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ1RMX0FEQ0lFTjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBBRENJRU4xIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DVExfQURDSUVOMl9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBBRENJRU4yIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ1RMX0FEQ0lFTjJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NUTF9BRENJRU4yX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogQURDSUVOMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ1RMX0FEQ0lFTjNfUG9zICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogQURDSUVOMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NUTF9BRENJRU4zX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DVExfQURDSUVOM19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IEFEQ0lFTjMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NUTF9SRVNTRUxfUG9zICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IFJFU1NFTCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DVExfUkVTU0VMX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEVBRENfQ1RMX1JFU1NFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBSRVNTRUwgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DVExfRElGRkVOX1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBESUZGRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ1RMX0RJRkZFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NUTF9ESUZGRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogRElGRkVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ1RMX0RNT0ZfUG9zICAgICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogRE1PRiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NUTF9ETU9GX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DVExfRE1PRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IERNT0YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NUTF9QRE1BRU5fUG9zICAgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IFBETUFFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DVExfUERNQUVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ1RMX1BETUFFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBQRE1BRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TV1RSR19TV1RSR19Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1dUUkc6IFNXVFJHIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU1dUUkdfU1dUUkdfTXNrICAgICAgICAgICAgICgweDdmZmZmdWwgPDwgRUFEQ19TV1RSR19TV1RSR19Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNXVFJHOiBTV1RSRyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfUEVORFNUU19TVFBGX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlBFTkRTVFM6IFNUUEYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1BFTkRTVFNfU1RQRl9Nc2sgICAgICAgICAgICAoMHg3ZmZmZnVsIDw8IEVBRENfUEVORFNUU19TVFBGX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpQRU5EU1RTOiBTVFBGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX09WU1RTX1NQT1ZGX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpPVlNUUzogU1BPVkYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19PVlNUU19TUE9WRl9Nc2sgICAgICAgICAgICAgKDB4N2ZmZmZ1bCA8PCBFQURDX09WU1RTX1NQT1ZGX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6T1ZTVFM6IFNQT1ZGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMX0NIU0VMX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDogQ0hTRUwgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTF9DSFNFTF9Nc2sgICAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVExfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw6IENIU0VMIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTF9FWFRSRU5fUG9zICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVExfRVhUUkVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMX0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOiBFWFRSRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVExfRVhURkVOX1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOiBFWFRGRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMX0VYVEZFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTF9FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDogRVhURkVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMX1RSR0RMWURJVl9Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDogVFJHRExZRElWIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTF9UUkdETFlESVZfTXNrICAgICAgICAgICgweDN1bCA8PCBFQURDX1NDVExfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw6IFRSR0RMWURJViBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTF9UUkdETFlDTlRfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX1NDVExfVFJHRExZQ05UX01zayAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTF9UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOiBUUkdETFlDTlQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVExfVFJHU0VMX1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOiBUUkdTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMX1RSR1NFTF9Nc2sgICAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVExfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDogVFJHU0VMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMX0lOVFBPU19Qb3MgICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDogSU5UUE9TIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTF9JTlRQT1NfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVExfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw6IElOVFBPUyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTF9EQk1FTl9Qb3MgICAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw6IERCTUVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVExfREJNRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMX0RCTUVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOiBEQk1FTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVExfRVhUU01QVF9Qb3MgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMX0VYVFNNUFRfTXNrICAgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVExfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDogRVhUU01QVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMF9DSFNFTF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDA6IENIU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDBfQ0hTRUxfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVEwwX0NIU0VMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwwOiBDSFNFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDBfRVhUUkVOX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwwOiBFWFRSRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwwX0VYVFJFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMF9FWFRSRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMDogRVhUUkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwwX0VYVEZFTl9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMDogRVhURkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMF9FWFRGRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDBfRVhURkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDA6IEVYVEZFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMF9UUkdETFlESVZfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDA6IFRSR0RMWURJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDBfVFJHRExZRElWX01zayAgICAgICAgICgweDN1bCA8PCBFQURDX1NDVEwwX1RSR0RMWURJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwwOiBUUkdETFlESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDBfVFJHRExZQ05UX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwwOiBUUkdETFlDTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NDVEwwX1RSR0RMWUNOVF9Nc2sgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDBfVFJHRExZQ05UX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMDogVFJHRExZQ05UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwwX1RSR1NFTF9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMDogVFJHU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMF9UUkdTRUxfTXNrICAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVEwwX1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDA6IFRSR1NFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMF9JTlRQT1NfUG9zICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDA6IElOVFBPUyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDBfSU5UUE9TX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwwX0lOVFBPU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwwOiBJTlRQT1MgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDBfREJNRU5fUG9zICAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwwOiBEQk1FTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwwX0RCTUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMF9EQk1FTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMDogREJNRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwwX0VYVFNNUFRfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMDogRVhUU01QVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMF9FWFRTTVBUX01zayAgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwwX0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDA6IEVYVFNNUFQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMV9DSFNFTF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE6IENIU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDFfQ0hTRUxfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVEwxX0NIU0VMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxOiBDSFNFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDFfRVhUUkVOX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxOiBFWFRSRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxX0VYVFJFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMV9FWFRSRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTogRVhUUkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxX0VYVEZFTl9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTogRVhURkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMV9FWFRGRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDFfRVhURkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE6IEVYVEZFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMV9UUkdETFlESVZfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE6IFRSR0RMWURJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDFfVFJHRExZRElWX01zayAgICAgICAgICgweDN1bCA8PCBFQURDX1NDVEwxX1RSR0RMWURJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxOiBUUkdETFlESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDFfVFJHRExZQ05UX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxOiBUUkdETFlDTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxX1RSR0RMWUNOVF9Nc2sgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDFfVFJHRExZQ05UX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTogVFJHRExZQ05UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxX1RSR1NFTF9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTogVFJHU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMV9UUkdTRUxfTXNrICAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVEwxX1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE6IFRSR1NFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMV9JTlRQT1NfUG9zICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE6IElOVFBPUyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDFfSU5UUE9TX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxX0lOVFBPU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxOiBJTlRQT1MgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDFfREJNRU5fUG9zICAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxOiBEQk1FTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxX0RCTUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMV9EQk1FTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTogREJNRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxX0VYVFNNUFRfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTogRVhUU01QVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMV9FWFRTTVBUX01zayAgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwxX0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE6IEVYVFNNUFQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMl9DSFNFTF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDI6IENIU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDJfQ0hTRUxfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVEwyX0NIU0VMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwyOiBDSFNFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDJfRVhUUkVOX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwyOiBFWFRSRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwyX0VYVFJFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMl9FWFRSRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMjogRVhUUkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwyX0VYVEZFTl9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMjogRVhURkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMl9FWFRGRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDJfRVhURkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDI6IEVYVEZFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMl9UUkdETFlESVZfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDI6IFRSR0RMWURJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDJfVFJHRExZRElWX01zayAgICAgICAgICgweDN1bCA8PCBFQURDX1NDVEwyX1RSR0RMWURJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwyOiBUUkdETFlESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDJfVFJHRExZQ05UX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwyOiBUUkdETFlDTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NDVEwyX1RSR0RMWUNOVF9Nc2sgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDJfVFJHRExZQ05UX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMjogVFJHRExZQ05UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwyX1RSR1NFTF9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMjogVFJHU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMl9UUkdTRUxfTXNrICAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVEwyX1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDI6IFRSR1NFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMl9JTlRQT1NfUG9zICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDI6IElOVFBPUyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDJfSU5UUE9TX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwyX0lOVFBPU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwyOiBJTlRQT1MgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDJfREJNRU5fUG9zICAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwyOiBEQk1FTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwyX0RCTUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMl9EQk1FTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMjogREJNRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwyX0VYVFNNUFRfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMjogRVhUU01QVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMl9FWFRTTVBUX01zayAgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwyX0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDI6IEVYVFNNUFQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMM19DSFNFTF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDM6IENIU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDNfQ0hTRUxfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVEwzX0NIU0VMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwzOiBDSFNFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDNfRVhUUkVOX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwzOiBFWFRSRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwzX0VYVFJFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMM19FWFRSRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMzogRVhUUkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwzX0VYVEZFTl9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMzogRVhURkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMM19FWFRGRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDNfRVhURkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDM6IEVYVEZFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMM19UUkdETFlESVZfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDM6IFRSR0RMWURJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDNfVFJHRExZRElWX01zayAgICAgICAgICgweDN1bCA8PCBFQURDX1NDVEwzX1RSR0RMWURJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwzOiBUUkdETFlESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDNfVFJHRExZQ05UX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwzOiBUUkdETFlDTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NDVEwzX1RSR0RMWUNOVF9Nc2sgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDNfVFJHRExZQ05UX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMzogVFJHRExZQ05UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwzX1RSR1NFTF9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMzogVFJHU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMM19UUkdTRUxfTXNrICAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVEwzX1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDM6IFRSR1NFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMM19JTlRQT1NfUG9zICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDM6IElOVFBPUyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDNfSU5UUE9TX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwzX0lOVFBPU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwzOiBJTlRQT1MgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDNfREJNRU5fUG9zICAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwzOiBEQk1FTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwzX0RCTUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMM19EQk1FTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMzogREJNRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwzX0VYVFNNUFRfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMzogRVhUU01QVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMM19FWFRTTVBUX01zayAgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwzX0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDM6IEVYVFNNUFQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNF9DSFNFTF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDQ6IENIU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDRfQ0hTRUxfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVEw0X0NIU0VMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw0OiBDSFNFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDRfRVhUUkVOX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw0OiBFWFRSRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw0X0VYVFJFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMNF9FWFRSRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNDogRVhUUkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw0X0VYVEZFTl9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNDogRVhURkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNF9FWFRGRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDRfRVhURkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDQ6IEVYVEZFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNF9UUkdETFlESVZfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDQ6IFRSR0RMWURJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDRfVFJHRExZRElWX01zayAgICAgICAgICgweDN1bCA8PCBFQURDX1NDVEw0X1RSR0RMWURJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw0OiBUUkdETFlESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDRfVFJHRExZQ05UX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw0OiBUUkdETFlDTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NDVEw0X1RSR0RMWUNOVF9Nc2sgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDRfVFJHRExZQ05UX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNDogVFJHRExZQ05UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw0X1RSR1NFTF9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNDogVFJHU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNF9UUkdTRUxfTXNrICAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVEw0X1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDQ6IFRSR1NFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNF9JTlRQT1NfUG9zICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDQ6IElOVFBPUyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDRfSU5UUE9TX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEw0X0lOVFBPU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw0OiBJTlRQT1MgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDRfRVhUU01QVF9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw0OiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw0X0VYVFNNUFRfTXNrICAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDRfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNDogRVhUU01QVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw1X0NIU0VMX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNTogQ0hTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNV9DSFNFTF9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTDVfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDU6IENIU0VMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNV9FWFRSRU5fUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDU6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDVfRVhUUkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEw1X0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw1OiBFWFRSRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDVfRVhURkVOX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw1OiBFWFRGRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw1X0VYVEZFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMNV9FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNTogRVhURkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw1X1RSR0RMWURJVl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNTogVFJHRExZRElWIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNV9UUkdETFlESVZfTXNrICAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTDVfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDU6IFRSR0RMWURJViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNV9UUkdETFlDTlRfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDU6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDVfVFJHRExZQ05UX01zayAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMNV9UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw1OiBUUkdETFlDTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDVfVFJHU0VMX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw1OiBUUkdTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw1X1RSR1NFTF9Nc2sgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTDVfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNTogVFJHU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw1X0lOVFBPU19Qb3MgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNTogSU5UUE9TIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNV9JTlRQT1NfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDVfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDU6IElOVFBPUyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNV9FWFRTTVBUX1BvcyAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDU6IEVYVFNNUFQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDVfRVhUU01QVF9Nc2sgICAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMNV9FWFRTTVBUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw1OiBFWFRTTVBUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDZfQ0hTRUxfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw2OiBDSFNFTCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw2X0NIU0VMX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgRUFEQ19TQ1RMNl9DSFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNjogQ0hTRUwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw2X0VYVFJFTl9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNjogRVhUUkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNl9FWFRSRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDZfRVhUUkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDY6IEVYVFJFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNl9FWFRGRU5fUG9zICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDY6IEVYVEZFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDZfRVhURkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEw2X0VYVEZFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw2OiBFWFRGRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDZfVFJHRExZRElWX1BvcyAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw2OiBUUkdETFlESVYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NDVEw2X1RSR0RMWURJVl9Nc2sgICAgICAgICAoMHgzdWwgPDwgRUFEQ19TQ1RMNl9UUkdETFlESVZfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNjogVFJHRExZRElWIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw2X1RSR0RMWUNOVF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNjogVFJHRExZQ05UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNl9UUkdETFlDTlRfTXNrICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEw2X1RSR0RMWUNOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDY6IFRSR0RMWUNOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNl9UUkdTRUxfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDY6IFRSR1NFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDZfVFJHU0VMX01zayAgICAgICAgICAgICgweDFmdWwgPDwgRUFEQ19TQ1RMNl9UUkdTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw2OiBUUkdTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDZfSU5UUE9TX1BvcyAgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw2OiBJTlRQT1MgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw2X0lOVFBPU19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMNl9JTlRQT1NfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNjogSU5UUE9TIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw2X0VYVFNNUFRfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNjogRVhUU01QVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNl9FWFRTTVBUX01zayAgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEw2X0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDY6IEVYVFNNUFQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMN19DSFNFTF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDc6IENIU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDdfQ0hTRUxfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVEw3X0NIU0VMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw3OiBDSFNFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDdfRVhUUkVOX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw3OiBFWFRSRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw3X0VYVFJFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMN19FWFRSRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNzogRVhUUkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw3X0VYVEZFTl9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNzogRVhURkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMN19FWFRGRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDdfRVhURkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDc6IEVYVEZFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMN19UUkdETFlESVZfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDc6IFRSR0RMWURJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDdfVFJHRExZRElWX01zayAgICAgICAgICgweDN1bCA8PCBFQURDX1NDVEw3X1RSR0RMWURJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw3OiBUUkdETFlESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDdfVFJHRExZQ05UX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw3OiBUUkdETFlDTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NDVEw3X1RSR0RMWUNOVF9Nc2sgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDdfVFJHRExZQ05UX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNzogVFJHRExZQ05UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw3X1RSR1NFTF9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNzogVFJHU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMN19UUkdTRUxfTXNrICAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVEw3X1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDc6IFRSR1NFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMN19JTlRQT1NfUG9zICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDc6IElOVFBPUyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDdfSU5UUE9TX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEw3X0lOVFBPU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw3OiBJTlRQT1MgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDdfRVhUU01QVF9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw3OiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw3X0VYVFNNUFRfTXNrICAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDdfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNzogRVhUU01QVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw4X0NIU0VMX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMODogQ0hTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMOF9DSFNFTF9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTDhfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDg6IENIU0VMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMOF9FWFRSRU5fUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDg6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDhfRVhUUkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEw4X0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw4OiBFWFRSRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDhfRVhURkVOX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw4OiBFWFRGRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw4X0VYVEZFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMOF9FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMODogRVhURkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw4X1RSR0RMWURJVl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMODogVFJHRExZRElWIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMOF9UUkdETFlESVZfTXNrICAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTDhfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDg6IFRSR0RMWURJViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMOF9UUkdETFlDTlRfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDg6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDhfVFJHRExZQ05UX01zayAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMOF9UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw4OiBUUkdETFlDTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDhfVFJHU0VMX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw4OiBUUkdTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw4X1RSR1NFTF9Nc2sgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTDhfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMODogVFJHU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw4X0lOVFBPU19Qb3MgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMODogSU5UUE9TIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMOF9JTlRQT1NfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDhfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDg6IElOVFBPUyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMOF9FWFRTTVBUX1BvcyAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDg6IEVYVFNNUFQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDhfRVhUU01QVF9Nc2sgICAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMOF9FWFRTTVBUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw4OiBFWFRTTVBUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDlfQ0hTRUxfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw5OiBDSFNFTCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw5X0NIU0VMX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgRUFEQ19TQ1RMOV9DSFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOTogQ0hTRUwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw5X0VYVFJFTl9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOTogRVhUUkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMOV9FWFRSRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDlfRVhUUkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDk6IEVYVFJFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMOV9FWFRGRU5fUG9zICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDk6IEVYVEZFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDlfRVhURkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEw5X0VYVEZFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw5OiBFWFRGRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDlfVFJHRExZRElWX1BvcyAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw5OiBUUkdETFlESVYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NDVEw5X1RSR0RMWURJVl9Nc2sgICAgICAgICAoMHgzdWwgPDwgRUFEQ19TQ1RMOV9UUkdETFlESVZfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOTogVFJHRExZRElWIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw5X1RSR0RMWUNOVF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOTogVFJHRExZQ05UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMOV9UUkdETFlDTlRfTXNrICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEw5X1RSR0RMWUNOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDk6IFRSR0RMWUNOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMOV9UUkdTRUxfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDk6IFRSR1NFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDlfVFJHU0VMX01zayAgICAgICAgICAgICgweDFmdWwgPDwgRUFEQ19TQ1RMOV9UUkdTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw5OiBUUkdTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDlfSU5UUE9TX1BvcyAgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw5OiBJTlRQT1MgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw5X0lOVFBPU19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMOV9JTlRQT1NfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOTogSU5UUE9TIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw5X0VYVFNNUFRfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOTogRVhUU01QVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMOV9FWFRTTVBUX01zayAgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEw5X0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDk6IEVYVFNNUFQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTBfQ0hTRUxfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEwOiBDSFNFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEwX0NIU0VMX01zayAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVEwxMF9DSFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMDogQ0hTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEwX0VYVFJFTl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMDogRVhUUkVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMF9FWFRSRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMTBfRVhUUkVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTA6IEVYVFJFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMF9FWFRGRU5fUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTA6IEVYVEZFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTBfRVhURkVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDEwX0VYVEZFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEwOiBFWFRGRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTBfVFJHRExZRElWX1BvcyAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEwOiBUUkdETFlESVYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEwX1RSR0RMWURJVl9Nc2sgICAgICAgICgweDN1bCA8PCBFQURDX1NDVEwxMF9UUkdETFlESVZfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMDogVFJHRExZRElWIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEwX1RSR0RMWUNOVF9Qb3MgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMDogVFJHRExZQ05UIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMF9UUkdETFlDTlRfTXNrICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDEwX1RSR0RMWUNOVF9Qb3MpICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTA6IFRSR0RMWUNOVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMF9UUkdTRUxfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTA6IFRSR1NFTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTBfVFJHU0VMX01zayAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVEwxMF9UUkdTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEwOiBUUkdTRUwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTBfSU5UUE9TX1BvcyAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEwOiBJTlRQT1MgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEwX0lOVFBPU19Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxMF9JTlRQT1NfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMDogSU5UUE9TIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEwX0VYVFNNUFRfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMDogRVhUU01QVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMF9FWFRTTVBUX01zayAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDEwX0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTA6IEVYVFNNUFQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMV9DSFNFTF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTE6IENIU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTFfQ0hTRUxfTXNrICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTDExX0NIU0VMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDExOiBDSFNFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTFfRVhUUkVOX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDExOiBFWFRSRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDExX0VYVFJFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxMV9FWFRSRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMTogRVhUUkVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDExX0VYVEZFTl9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMTogRVhURkVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMV9FWFRGRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMTFfRVhURkVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTE6IEVYVEZFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMV9UUkdETFlESVZfUG9zICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTE6IFRSR0RMWURJViBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTFfVFJHRExZRElWX01zayAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTDExX1RSR0RMWURJVl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDExOiBUUkdETFlESVYgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTFfVFJHRExZQ05UX1BvcyAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDExOiBUUkdETFlDTlQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVBRENfU0NUTDExX1RSR0RMWUNOVF9Nc2sgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMTFfVFJHRExZQ05UX1BvcykgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMTogVFJHRExZQ05UIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDExX1RSR1NFTF9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMTogVFJHU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMV9UUkdTRUxfTXNrICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTDExX1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTE6IFRSR1NFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMV9JTlRQT1NfUG9zICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTE6IElOVFBPUyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTFfSU5UUE9TX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDExX0lOVFBPU19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDExOiBJTlRQT1MgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTFfRVhUU01QVF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDExOiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDExX0VYVFNNUFRfTXNrICAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMTFfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMTogRVhUU01QVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEyX0NIU0VMX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMjogQ0hTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMl9DSFNFTF9Nc2sgICAgICAgICAgICAoMHhmdWwgPDwgRUFEQ19TQ1RMMTJfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTI6IENIU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMl9FWFRSRU5fUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTI6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTJfRVhUUkVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDEyX0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEyOiBFWFRSRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTJfRVhURkVOX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEyOiBFWFRGRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEyX0VYVEZFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxMl9FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMjogRVhURkVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEyX1RSR0RMWURJVl9Qb3MgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMjogVFJHRExZRElWIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMl9UUkdETFlESVZfTXNrICAgICAgICAoMHgzdWwgPDwgRUFEQ19TQ1RMMTJfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTI6IFRSR0RMWURJViBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMl9UUkdETFlDTlRfUG9zICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTI6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTJfVFJHRExZQ05UX01zayAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwxMl9UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEyOiBUUkdETFlDTlQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTJfVFJHU0VMX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEyOiBUUkdTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEyX1RSR1NFTF9Nc2sgICAgICAgICAgICgweDFmdWwgPDwgRUFEQ19TQ1RMMTJfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMjogVFJHU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEyX0lOVFBPU19Qb3MgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMjogSU5UUE9TIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMl9JTlRQT1NfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMTJfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTI6IElOVFBPUyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMl9FWFRTTVBUX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTI6IEVYVFNNUFQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTJfRVhUU01QVF9Nc2sgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwxMl9FWFRTTVBUX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEyOiBFWFRTTVBUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTNfQ0hTRUxfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEzOiBDSFNFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEzX0NIU0VMX01zayAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVEwxM19DSFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMzogQ0hTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEzX0VYVFJFTl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMzogRVhUUkVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxM19FWFRSRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMTNfRVhUUkVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTM6IEVYVFJFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxM19FWFRGRU5fUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTM6IEVYVEZFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTNfRVhURkVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDEzX0VYVEZFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEzOiBFWFRGRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTNfVFJHRExZRElWX1BvcyAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEzOiBUUkdETFlESVYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEzX1RSR0RMWURJVl9Nc2sgICAgICAgICgweDN1bCA8PCBFQURDX1NDVEwxM19UUkdETFlESVZfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMzogVFJHRExZRElWIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEzX1RSR0RMWUNOVF9Qb3MgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMzogVFJHRExZQ05UIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxM19UUkdETFlDTlRfTXNrICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDEzX1RSR0RMWUNOVF9Qb3MpICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTM6IFRSR0RMWUNOVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxM19UUkdTRUxfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTM6IFRSR1NFTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTNfVFJHU0VMX01zayAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVEwxM19UUkdTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEzOiBUUkdTRUwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTNfSU5UUE9TX1BvcyAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEzOiBJTlRQT1MgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEzX0lOVFBPU19Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxM19JTlRQT1NfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMzogSU5UUE9TIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEzX0VYVFNNUFRfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMzogRVhUU01QVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxM19FWFRTTVBUX01zayAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDEzX0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTM6IEVYVFNNUFQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxNF9DSFNFTF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTQ6IENIU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTRfQ0hTRUxfTXNrICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTDE0X0NIU0VMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE0OiBDSFNFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTRfRVhUUkVOX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE0OiBFWFRSRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDE0X0VYVFJFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxNF9FWFRSRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNDogRVhUUkVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE0X0VYVEZFTl9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNDogRVhURkVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxNF9FWFRGRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMTRfRVhURkVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTQ6IEVYVEZFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxNF9UUkdETFlESVZfUG9zICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTQ6IFRSR0RMWURJViBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTRfVFJHRExZRElWX01zayAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTDE0X1RSR0RMWURJVl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE0OiBUUkdETFlESVYgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTRfVFJHRExZQ05UX1BvcyAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE0OiBUUkdETFlDTlQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVBRENfU0NUTDE0X1RSR0RMWUNOVF9Nc2sgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMTRfVFJHRExZQ05UX1BvcykgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNDogVFJHRExZQ05UIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE0X1RSR1NFTF9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNDogVFJHU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxNF9UUkdTRUxfTXNrICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTDE0X1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTQ6IFRSR1NFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxNF9JTlRQT1NfUG9zICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTQ6IElOVFBPUyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTRfSU5UUE9TX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDE0X0lOVFBPU19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE0OiBJTlRQT1MgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTRfRVhUU01QVF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE0OiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDE0X0VYVFNNUFRfTXNrICAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMTRfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNDogRVhUU01QVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE1X0NIU0VMX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNTogQ0hTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxNV9DSFNFTF9Nc2sgICAgICAgICAgICAoMHhmdWwgPDwgRUFEQ19TQ1RMMTVfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTU6IENIU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxNV9FWFRSRU5fUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTU6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTVfRVhUUkVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDE1X0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE1OiBFWFRSRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTVfRVhURkVOX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE1OiBFWFRGRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDE1X0VYVEZFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxNV9FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNTogRVhURkVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE1X1RSR0RMWURJVl9Qb3MgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNTogVFJHRExZRElWIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxNV9UUkdETFlESVZfTXNrICAgICAgICAoMHgzdWwgPDwgRUFEQ19TQ1RMMTVfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTU6IFRSR0RMWURJViBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxNV9UUkdETFlDTlRfUG9zICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTU6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTVfVFJHRExZQ05UX01zayAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwxNV9UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE1OiBUUkdETFlDTlQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTVfVFJHU0VMX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE1OiBUUkdTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDE1X1RSR1NFTF9Nc2sgICAgICAgICAgICgweDFmdWwgPDwgRUFEQ19TQ1RMMTVfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNTogVFJHU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE1X0lOVFBPU19Qb3MgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNTogSU5UUE9TIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxNV9JTlRQT1NfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMTVfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTU6IElOVFBPUyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxNV9FWFRTTVBUX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTU6IEVYVFNNUFQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTVfRVhUU01QVF9Nc2sgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwxNV9FWFRTTVBUX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE1OiBFWFRTTVBUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTZfRVhUU01QVF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE2OiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDE2X0VYVFNNUFRfTXNrICAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMTZfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNjogRVhUU01QVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE3X0VYVFNNUFRfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNzogRVhUU01QVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxN19FWFRTTVBUX01zayAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDE3X0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTc6IEVYVFNNUFQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxOF9FWFRTTVBUX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTg6IEVYVFNNUFQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMThfRVhUU01QVF9Nc2sgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwxOF9FWFRTTVBUX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE4OiBFWFRTTVBUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTBfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUUwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTFfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxX01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMwX1NQTElFMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUyX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRTJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFM19Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTNfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUUzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTRfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUU0X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMwX1NQTElFNF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUU1X1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRTVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUU1IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFNl9Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUU2IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTZfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUU2X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFNiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTdfUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFNyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUU3X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMwX1NQTElFN19Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTcgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUU4X1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTggUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFOF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRThfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUU4IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFOV9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUU5IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTlfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUU5X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFOSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTEwX1BvcyAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMTAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMwX1NQTElFMTBfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTEwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxMV9Qb3MgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTExIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMTFfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRTExX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMTJfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTEyX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUUxMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMTIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTEzX1BvcyAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMTMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxM19Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMwX1NQTElFMTNfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTEzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxNF9Qb3MgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTE0IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMTRfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRTE0X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxNCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMTVfUG9zICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTE1X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUUxNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMTUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTE2X1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMTYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxNl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMwX1NQTElFMTZfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTE2IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxN19Qb3MgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTE3IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMTdfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRTE3X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxNyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMThfUG9zICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxOCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTE4X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUUxOF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMTggTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUwX01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMV9TUExJRTFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTJfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUUyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTNfUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUzX01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUU0X1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMV9TUExJRTRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUU0IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFNV9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUU1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTVfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUU1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTZfUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFNiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUU2X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFNl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUU3X1BvcyAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTcgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFN19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMV9TUExJRTdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUU3IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFOF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUU4IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRThfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUU4X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFOCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTlfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFOSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUU5X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFOV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTkgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxMF9Qb3MgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTEwIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMTBfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMV9TUExJRTEwX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMTFfUG9zICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTExX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUUxMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMTEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTEyX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMTIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFMTJfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTEyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxM19Qb3MgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTEzIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMTNfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMV9TUExJRTEzX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxMyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMTRfUG9zICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTE0X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUUxNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMTQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTE1X1BvcyAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMTUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFMTVfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTE1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxNl9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTE2IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMTZfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMV9TUExJRTE2X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxNiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMTdfUG9zICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxNyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTE3X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUUxN19Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMTcgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTE4X1BvcyAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMTggUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxOF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFMThfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTE4IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTFfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzJfU1BMSUUxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTJfUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUyX01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUzX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFNF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUU0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTRfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzJfU1BMSUU0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTVfUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUU1X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUU2X1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFNl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUU2IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFN19Qb3MgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUU3IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTdfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzJfU1BMSUU3X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFNyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRThfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFOCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUU4X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFOF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTggTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUU5X1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTkgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFOV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTlfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUU5IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMTBfUG9zICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTEwX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzJfU1BMSUUxMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMTAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTExX1BvcyAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMTEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFMTFfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTExIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxMl9Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTEyIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMTJfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTEyX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMTNfUG9zICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTEzX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzJfU1BMSUUxM19Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMTMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTE0X1BvcyAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMTQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxNF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFMTRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTE0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxNV9Qb3MgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTE1IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMTVfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTE1X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxNSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMTZfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxNiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTE2X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzJfU1BMSUUxNl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMTYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTE3X1BvcyAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMTcgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxN19Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFMTdfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTE3IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxOF9Qb3MgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTE4IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMThfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTE4X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxOCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTBfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUUwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTFfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxX01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMzX1NQTElFMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUyX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRTJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFM19Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTNfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUUzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTRfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUU0X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMzX1NQTElFNF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUU1X1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRTVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUU1IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFNl9Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUU2IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTZfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUU2X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFNiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTdfUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFNyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUU3X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMzX1NQTElFN19Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTcgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUU4X1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTggUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFOF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRThfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUU4IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFOV9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUU5IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTlfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUU5X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFOSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTEwX1BvcyAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMTAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMzX1NQTElFMTBfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTEwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxMV9Qb3MgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTExIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMTFfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRTExX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMTJfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTEyX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUUxMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMTIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTEzX1BvcyAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMTMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxM19Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMzX1NQTElFMTNfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTEzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxNF9Qb3MgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTE0IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMTRfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRTE0X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxNCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMTVfUG9zICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTE1X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUUxNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMTUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTE2X1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMTYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxNl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMzX1NQTElFMTZfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTE2IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxN19Qb3MgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTE3IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMTdfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRTE3X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxNyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMThfUG9zICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxOCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTE4X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUUxOF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMTggTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QX0FEQ01QRU5fUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDogQURDTVBFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUF9BRENNUEVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVBfQURDTVBFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVA6IEFEQ01QRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUF9BRENNUElFX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVA6IEFEQ01QSUUgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVBfQURDTVBJRV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QX0FEQ01QSUVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QOiBBRENNUElFIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVBfQ01QQ09ORF9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QOiBDTVBDT05EIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QX0NNUENPTkRfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUF9DTVBDT05EX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDogQ01QQ09ORCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QX0NNUFNQTF9Qb3MgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDogQ01QU1BMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUF9DTVBTUExfTXNrICAgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfQ01QX0NNUFNQTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVA6IENNUFNQTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUF9DTVBNQ05UX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVA6IENNUE1DTlQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVBfQ01QTUNOVF9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfQ01QX0NNUE1DTlRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QOiBDTVBNQ05UIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVBfQ01QV0VOX1BvcyAgICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QOiBDTVBXRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QX0NNUFdFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUF9DTVBXRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDogQ01QV0VOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QX0NNUERBVF9Qb3MgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDogQ01QREFUIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUF9DTVBEQVRfTXNrICAgICAgICAgICAgICAoMHhmZmZ1bCA8PCBFQURDX0NNUF9DTVBEQVRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVA6IENNUERBVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDBfQURDTVBFTl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAwOiBBRENNUEVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAwX0FEQ01QRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QMF9BRENNUEVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMDogQURDTVBFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAwX0FEQ01QSUVfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMDogQURDTVBJRSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMF9BRENNUElFX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUDBfQURDTVBJRV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDA6IEFEQ01QSUUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMF9DTVBDT05EX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDA6IENNUENPTkQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDBfQ01QQ09ORF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVAwX0NNUENPTkRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAwOiBDTVBDT05EIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDBfQ01QU1BMX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAwOiBDTVBTUEwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAwX0NNUFNQTF9Nc2sgICAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX0NNUDBfQ01QU1BMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMDogQ01QU1BMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAwX0NNUE1DTlRfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMDogQ01QTUNOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMF9DTVBNQ05UX01zayAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX0NNUDBfQ01QTUNOVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDA6IENNUE1DTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMF9DTVBXRU5fUG9zICAgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDA6IENNUFdFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDBfQ01QV0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVAwX0NNUFdFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAwOiBDTVBXRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDBfQ01QREFUX1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAwOiBDTVBEQVQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAwX0NNUERBVF9Nc2sgICAgICAgICAgICAgKDB4ZmZmdWwgPDwgRUFEQ19DTVAwX0NNUERBVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMDogQ01QREFUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAxX0FEQ01QRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMTogQURDTVBFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMV9BRENNUEVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUDFfQURDTVBFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDE6IEFEQ01QRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMV9BRENNUElFX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDE6IEFEQ01QSUUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDFfQURDTVBJRV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVAxX0FEQ01QSUVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAxOiBBRENNUElFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDFfQ01QQ09ORF9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAxOiBDTVBDT05EIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAxX0NNUENPTkRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QMV9DTVBDT05EX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMTogQ01QQ09ORCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAxX0NNUFNQTF9Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMTogQ01QU1BMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMV9DTVBTUExfTXNrICAgICAgICAgICAgICgweDFmdWwgPDwgRUFEQ19DTVAxX0NNUFNQTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDE6IENNUFNQTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMV9DTVBNQ05UX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDE6IENNUE1DTlQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDFfQ01QTUNOVF9Nc2sgICAgICAgICAgICAoMHhmdWwgPDwgRUFEQ19DTVAxX0NNUE1DTlRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAxOiBDTVBNQ05UIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDFfQ01QV0VOX1BvcyAgICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAxOiBDTVBXRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAxX0NNUFdFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QMV9DTVBXRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMTogQ01QV0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAxX0NNUERBVF9Qb3MgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMTogQ01QREFUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMV9DTVBEQVRfTXNrICAgICAgICAgICAgICgweGZmZnVsIDw8IEVBRENfQ01QMV9DTVBEQVRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDE6IENNUERBVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMl9BRENNUEVOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDI6IEFEQ01QRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDJfQURDTVBFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVAyX0FEQ01QRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAyOiBBRENNUEVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDJfQURDTVBJRV9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAyOiBBRENNUElFIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAyX0FEQ01QSUVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QMl9BRENNUElFX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMjogQURDTVBJRSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAyX0NNUENPTkRfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMjogQ01QQ09ORCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMl9DTVBDT05EX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUDJfQ01QQ09ORF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDI6IENNUENPTkQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMl9DTVBTUExfUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDI6IENNUFNQTCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDJfQ01QU1BMX01zayAgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfQ01QMl9DTVBTUExfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAyOiBDTVBTUEwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDJfQ01QTUNOVF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAyOiBDTVBNQ05UIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAyX0NNUE1DTlRfTXNrICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfQ01QMl9DTVBNQ05UX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMjogQ01QTUNOVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAyX0NNUFdFTl9Qb3MgICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMjogQ01QV0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMl9DTVBXRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUDJfQ01QV0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDI6IENNUFdFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMl9DTVBEQVRfUG9zICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDI6IENNUERBVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDJfQ01QREFUX01zayAgICAgICAgICAgICAoMHhmZmZ1bCA8PCBFQURDX0NNUDJfQ01QREFUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAyOiBDTVBEQVQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDNfQURDTVBFTl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAzOiBBRENNUEVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAzX0FEQ01QRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QM19BRENNUEVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMzogQURDTVBFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAzX0FEQ01QSUVfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMzogQURDTVBJRSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QM19BRENNUElFX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUDNfQURDTVBJRV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDM6IEFEQ01QSUUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QM19DTVBDT05EX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDM6IENNUENPTkQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDNfQ01QQ09ORF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVAzX0NNUENPTkRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAzOiBDTVBDT05EIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDNfQ01QU1BMX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAzOiBDTVBTUEwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAzX0NNUFNQTF9Nc2sgICAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX0NNUDNfQ01QU1BMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMzogQ01QU1BMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAzX0NNUE1DTlRfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMzogQ01QTUNOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QM19DTVBNQ05UX01zayAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX0NNUDNfQ01QTUNOVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDM6IENNUE1DTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QM19DTVBXRU5fUG9zICAgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDM6IENNUFdFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDNfQ01QV0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVAzX0NNUFdFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAzOiBDTVBXRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDNfQ01QREFUX1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAzOiBDTVBEQVQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAzX0NNUERBVF9Nc2sgICAgICAgICAgICAgKDB4ZmZmdWwgPDwgRUFEQ19DTVAzX0NNUERBVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMzogQ01QREFUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMwX1ZBTElEX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMDogVkFMSUQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMF9WQUxJRF9Nc2sgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX1NUQVRVUzBfVkFMSURfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzA6IFZBTElEIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMF9PVl9Qb3MgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzA6IE9WIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzBfT1ZfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRUFEQ19TVEFUVVMwX09WX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMwOiBPViBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzFfVkFMSURfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMxOiBWQUxJRCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMxX1ZBTElEX01zayAgICAgICAgICAgKDB4N3VsIDw8IEVBRENfU1RBVFVTMV9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMTogVkFMSUQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMxX09WX1BvcyAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMTogT1YgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMV9PVl9Nc2sgICAgICAgICAgICAgICgweDd1bCA8PCBFQURDX1NUQVRVUzFfT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzE6IE9WIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRElGMF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFESUYwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQURJRjBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FESUYwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRElGMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQURJRjFfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRElGMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FESUYxX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9BRElGMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURJRjEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FESUYyX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURJRjIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRElGMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQURJRjJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFESUYyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRElGM19Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFESUYzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQURJRjNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FESUYzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRElGMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQURDTVBGMF9Qb3MgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRENNUEYwIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FEQ01QRjBfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9BRENNUEYwX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURDTVBGMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FEQ01QRjFfUG9zICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURDTVBGMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRENNUEYxX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQURDTVBGMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFEQ01QRjEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRENNUEYyX1BvcyAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFEQ01QRjIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQURDTVBGMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FEQ01QRjJfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRENNUEYyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQURDTVBGM19Qb3MgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRENNUEYzIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FEQ01QRjNfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9BRENNUEYzX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURDTVBGMyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FET1ZJRjBfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURPVklGMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRE9WSUYwX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQURPVklGMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFET1ZJRjAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRE9WSUYxX1BvcyAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFET1ZJRjEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQURPVklGMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FET1ZJRjFfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRE9WSUYxIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQURPVklGMl9Qb3MgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRE9WSUYyIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FET1ZJRjJfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9BRE9WSUYyX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURPVklGMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FET1ZJRjNfUG9zICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURPVklGMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRE9WSUYzX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQURPVklGM19Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFET1ZJRjMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRENNUE8wX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFEQ01QTzAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQURDTVBPMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FEQ01QTzBfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRENNUE8wIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQURDTVBPMV9Qb3MgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRENNUE8xIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FEQ01QTzFfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9BRENNUE8xX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURDTVBPMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FEQ01QTzJfUG9zICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURDTVBPMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRENNUE8yX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQURDTVBPMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFEQ01QTzIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRENNUE8zX1BvcyAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFEQ01QTzMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQURDTVBPM19Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FEQ01QTzNfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRENNUE8zIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQ0hBTk5FTF9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBDSEFOTkVMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0NIQU5ORUxfTXNrICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NUQVRVUzJfQ0hBTk5FTF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQ0hBTk5FTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0JVU1lfUG9zICAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQlVTWSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9CVVNZX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEJVU1kgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRE9WSUZfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFET1ZJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQURPVklGX01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FET1ZJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRE9WSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfU1RPVkZfUG9zICAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBTVE9WRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX1NUT1ZGX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9TVE9WRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogU1RPVkYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FWQUxJRF9Qb3MgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQVZBTElEIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BVkFMSURfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQVZBTElEX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFWQUxJRCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BT1ZfUG9zICAgICAgICAgICAgICgyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFPViBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQU9WX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FPVl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBT1YgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzNfQ1VSU1BMX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMzOiBDVVJTUEwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMzX0NVUlNQTF9Nc2sgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NUQVRVUzNfQ1VSU1BMX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMzogQ1VSU1BMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EREFUMF9SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDA6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfRERBVDBfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0REQVQwX1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQwOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfRERBVDBfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQwOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0REQVQwX09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EREFUMF9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMDogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0REQVQwX1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMDogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EREFUMF9WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfRERBVDBfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDA6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EREFUMV9SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDE6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfRERBVDFfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0REQVQxX1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQxOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfRERBVDFfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQxOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0REQVQxX09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EREFUMV9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMTogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0REQVQxX1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMTogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EREFUMV9WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfRERBVDFfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDE6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EREFUMl9SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDI6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfRERBVDJfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0REQVQyX1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQyOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfRERBVDJfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQyOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0REQVQyX09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EREFUMl9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMjogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0REQVQyX1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMjogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EREFUMl9WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfRERBVDJfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDI6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EREFUM19SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDM6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfRERBVDNfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0REQVQzX1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQzOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfRERBVDNfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQzOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0REQVQzX09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EREFUM19PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMzogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0REQVQzX1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMzogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EREFUM19WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfRERBVDNfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDM6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19QV1JNX1BXVVBSRFlfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6UFdSTTogUFdVUFJEWSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfUFdSTV9QV1VQUkRZX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1BXUk1fUFdVUFJEWV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlBXUk06IFBXVVBSRFkgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfUFdSTV9QV1VDQUxFTl9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlBXUk06IFBXVUNBTEVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1BXUk1fUFdVQ0FMRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19QV1JNX1BXVUNBTEVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpQV1JNOiBQV1VDQUxFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1BXUk1fUFdETU9EX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpQV1JNOiBQV0RNT0QgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19QV1JNX1BXRE1PRF9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEVBRENfUFdSTV9QV0RNT0RfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6UFdSTTogUFdETU9EIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19QV1JNX0xET1NVVF9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6UFdSTTogTERPU1VUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfUFdSTV9MRE9TVVRfTXNrICAgICAgICAgICAgICgweGZmZnVsIDw8IEVBRENfUFdSTV9MRE9TVVRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlBXUk06IExET1NVVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ0FMQ1RMX0NBTFNUQVJUX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNBTENUTDogQ0FMU1RBUlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0NBTENUTF9DQUxTVEFSVF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DQUxDVExfQ0FMU1RBUlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDQUxDVEw6IENBTFNUQVJUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NBTENUTF9DQUxET05FX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDQUxDVEw6IENBTERPTkUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DQUxDVExfQ0FMRE9ORV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ0FMQ1RMX0NBTERPTkVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q0FMQ1RMOiBDQUxET05FIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DQUxDVExfQ0FMU0VMX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q0FMQ1RMOiBDQUxTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfQ0FMQ1RMX0NBTFNFTF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NBTENUTF9DQUxTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNBTENUTDogQ0FMU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ0FMRFdSRF9DQUxXT1JEX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNBTERXUkQ6IENBTFdPUkQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0NBTERXUkRfQ0FMV09SRF9Nc2sgICAgICAgICAoMHg3ZnVsIDw8IEVBRENfQ0FMRFdSRF9DQUxXT1JEX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDQUxEV1JEOiBDQUxXT1JEIE1hc2sgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBFQURDX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBFQURDIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKworI2VuZGlmIC8qIF9fRUFEQ19SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZWJpX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2ViaV9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGQxZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2ViaV9yZWcuaApAQCAtMCwwICsxLDE2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGViaV9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgRUJJIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0VCSV9SRUdfSF9fCisjZGVmaW5lIF9fRUJJX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlIENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBFQkkgRXh0ZXJuYWwgQnVzIEludGVyZmFjZSBDb250cm9sbGVyKEVCSSkKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgRUJJIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgRUJJX1Q6OkNUTDAKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEVOICAgICAgICB8RUJJIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB0aGUgZnVuY3Rpb25hbCBlbmFibGUgYml0IGZvciBFQkkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVCSSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUJJIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfERXMTYgICAgICB8RUJJIERhdGEgV2lkdGggMTYtYml0IFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgaWYgdGhlIEVCSSBkYXRhIHdpZHRoIGlzIDgtYml0IG9yIDE2LWJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUJJIGRhdGEgd2lkdGggaXMgOC1iaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVCSSBkYXRhIHdpZHRoIGlzIDE2LWJpdC4KKyAgICAgKiB8WzJdICAgICB8Q1NQT0xJTlYgIHxDaGlwIFNlbGVjdCBQaW4gUG9sYXIgSW52ZXJzZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgdGhlIGFjdGl2ZSBsZXZlbCBvZiBFQkkgY2hpcCBzZWxlY3QgcGluIChFQklfbkNTKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hpcCBzZWxlY3QgcGluIChFQklfbkNTKSBpcyBhY3RpdmUgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGlwIHNlbGVjdCBwaW4gKEVCSV9uQ1MpIGlzIGFjdGl2ZSBoaWdoLgorICAgICAqIHxbM10gICAgIHxBRFNFUEVOICAgfEVCSSBBZGRyZXNzL0RhdGEgQnVzIFNlcGFyYXRpbmcgTW9kZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFkZHJlc3MvRGF0YSBCdXMgU2VwYXJhdGluZyBNb2RlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBZGRyZXNzL0RhdGEgQnVzIFNlcGFyYXRpbmcgTW9kZSBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxDQUNDRVNTICAgfENvbnRpbnVvdXMgRGF0YSBBY2Nlc3MgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gY29udGludW91cyBhY2Nlc3MgbW9kZSBlbmFibGVkLCB0aGUgdEFTVSwgdEFMRSBhbmQgdExIRCBjeWNsZXMgYXJlIGJ5cGFzcyBmb3IgY29udGludW91cyBkYXRhIHRyYW5zZmVyIHJlcXVlc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnRpbnVvdXMgZGF0YSBhY2Nlc3MgbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29udGludW91cyBkYXRhIGFjY2VzcyBtb2RlIEVuYWJsZWQuCisgICAgICogfFsxMDo4XSAgfE1DTEtESVYgICB8RXh0ZXJuYWwgT3V0cHV0IENsb2NrIERpdmlkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZnJlcXVlbmN5IG9mIEVCSSBvdXRwdXQgY2xvY2sgKE1DTEspIGlzIGNvbnRyb2xsZWQgYnkgTUNMS0RJViBhcyBmb2xsb3c6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gSENMSy8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IEhDTEsvMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBIQ0xLLzQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gSENMSy84LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IEhDTEsvMTYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gSENMSy8zMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSBIQ0xLLzY0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IEhDTEsvMTI4LgorICAgICAqIHxbMTg6MTZdIHxUQUxFICAgICAgfEV4dGVuZCBUaW1lIG9mIEFMRQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFQklfQUxFIGhpZ2ggcHVsc2UgcGVyaW9kICh0QUxFKSB0byBsYXRjaCB0aGUgYWRkcmVzcyBjYW4gYmUgY29udHJvbGxlZCBieSBUQUxFLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHRBTEUgPSAoVEFMRSsxKSpFQklfTUNMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGZpZWxkIG9ubHkgYXZhaWxhYmxlIGluIEVCSV9DVEwwIHJlZ2lzdGVyCisgICAgICogfFsyNF0gICAgfFdCVUZFTiAgICB8RUJJIFdyaXRlIEJ1ZmZlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVCSSB3cml0ZSBidWZmZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVCSSB3cml0ZSBidWZmZXIgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBvbmx5IGF2YWlsYWJsZSBpbiBFQklfQ1RMMCByZWdpc3RlcgorICAgICAqIEB2YXIgRUJJX1Q6OlRDVEwwCisgICAgICogT2Zmc2V0OiAweDA0ICBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlIFRpbWluZyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6M10gICB8VEFDQyAgICAgIHxFQkkgRGF0YSBBY2Nlc3MgVGltZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRBQ0MgZGVmaW5lIGRhdGEgYWNjZXNzIHRpbWUgKHRBQ0MpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHRBQ0MgPSAoVEFDQysxKSAqIEVCSV9NQ0xLLgorICAgICAqIHxbMTA6OF0gIHxUQUhEICAgICAgfEVCSSBEYXRhIEFjY2VzcyBIb2xkIFRpbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUQUhEIGRlZmluZSBkYXRhIGFjY2VzcyBob2xkIHRpbWUgKHRBSEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHRBSEQgPSAoVEFIRCsxKSAqIEVCSV9NQ0xLLgorICAgICAqIHxbMTU6MTJdIHxXMlggICAgICAgfElkbGUgQ3ljbGUgQWZ0ZXIgV3JpdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGRlZmluZXMgdGhlIG51bWJlciBvZiBXMlggaWRsZSBjeWNsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXMlggaWRsZSBjeWNsZSA9IChXMlggKiBFQklfTUNMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB3cml0ZSBhY3Rpb24gaXMgZmluaXNoLCBXMlggaWRsZSBjeWNsZSBpcyBpbnNlcnRlZCBhbmQgRUJJX25DUyByZXR1cm4gdG8gaWRsZSBzdGF0ZS4KKyAgICAgKiB8WzIyXSAgICB8UkFIRE9GRiAgIHxBY2Nlc3MgSG9sZCBUaW1lIERpc2FibGUgQ29udHJvbCBXaGVuIFJlYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIERhdGEgQWNjZXNzIEhvbGQgVGltZSAodEFIRCkgZHVyaW5nIEVCSSByZWFkaW5nIGlzIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBEYXRhIEFjY2VzcyBIb2xkIFRpbWUgKHRBSEQpIGR1cmluZyBFQkkgcmVhZGluZyBpcyBEaXNhYmxlZC4KKyAgICAgKiB8WzIzXSAgICB8V0FIRE9GRiAgIHxBY2Nlc3MgSG9sZCBUaW1lIERpc2FibGUgQ29udHJvbCBXaGVuIFdyaXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBEYXRhIEFjY2VzcyBIb2xkIFRpbWUgKHRBSEQpIGR1cmluZyBFQkkgd3JpdGluZyBpcyBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgRGF0YSBBY2Nlc3MgSG9sZCBUaW1lICh0QUhEKSBkdXJpbmcgRUJJIHdyaXRpbmcgaXMgRGlzYWJsZWQuCisgICAgICogfFsyNzoyNF0gfFIyUiAgICAgICB8SWRsZSBDeWNsZSBCZXR3ZWVuIFJlYWQtdG8tcmVhZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIFIyUiBpZGxlIGN5Y2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFIyUiBpZGxlIGN5Y2xlID0gKFIyUiAqIEVCSV9NQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHJlYWQgYWN0aW9uIGlzIGZpbmlzaCBhbmQgbmV4dCBhY3Rpb24gaXMgZ29pbmcgdG8gcmVhZCwgUjJSIGlkbGUgY3ljbGUgaXMgaW5zZXJ0ZWQgYW5kIEVCSV9uQ1MgcmV0dXJuIHRvIGlkbGUgc3RhdGUuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEwwOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gRXh0ZXJuYWwgQnVzIEludGVyZmFjZSBCYW5rMCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVENUTDA7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgQmFuazAgVGltaW5nIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzJdOworICAgIF9fSU8gdWludDMyX3QgQ1RMMTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgQmFuazEgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRDVEwxOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE0XSBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlIEJhbmsxIFRpbWluZyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVsyXTsKKyAgICBfX0lPIHVpbnQzMl90IENUTDI7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDIwXSBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlIEJhbmsyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUQ1RMMjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyNF0gRXh0ZXJuYWwgQnVzIEludGVyZmFjZSBCYW5rMiBUaW1pbmcgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAqLworCit9IEVCSV9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBFQklfQ09OU1QgRUJJIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIEVCSSBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIEVCSV9DVExfRU5fUG9zICAgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6Q1RMMDogRU4gUG9zaXRpb24gICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQklfQ1RMX0VOX01zayAgICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUJJX0NUTF9FTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OkNUTDA6IEVOIE1hc2sgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQklfQ1RMX0RXMTZfUG9zICAgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OkNUTDA6IERXMTYgUG9zaXRpb24gICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUJJX0NUTF9EVzE2X01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVCSV9DVExfRFcxNl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpDVEwwOiBEVzE2IE1hc2sgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUJJX0NUTF9DU1BPTElOVl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpDVEwwOiBDU1BPTElOViBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVCSV9DVExfQ1NQT0xJTlZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQklfQ1RMX0NTUE9MSU5WX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6Q1RMMDogQ1NQT0xJTlYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVCSV9DVExfQURTRVBFTl9Qb3MgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6Q1RMMDogQURTRVBFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVCSV9DVExfQURTRVBFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQklfQ1RMX0FEU0VQRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6Q1RMMDogQURTRVBFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUJJX0NUTF9DQUNDRVNTX1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpDVEwwOiBDQUNDRVNTIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVCSV9DVExfQ0FDQ0VTU19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQklfQ1RMX0NBQ0NFU1NfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6Q1RMMDogQ0FDQ0VTUyBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVCSV9DVExfTUNMS0RJVl9Qb3MgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6Q1RMMDogTUNMS0RJViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQklfQ1RMX01DTEtESVZfTXNrICAgICAgICAgICAgICAoMHg3dWwgPDwgRUJJX0NUTF9NQ0xLRElWX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OkNUTDA6IE1DTEtESVYgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQklfQ1RMX1RBTEVfUG9zICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OkNUTDA6IFRBTEUgUG9zaXRpb24gICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUJJX0NUTF9UQUxFX01zayAgICAgICAgICAgICAgICAgKDB4N3VsIDw8IEVCSV9DVExfVEFMRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpDVEwwOiBUQUxFIE1hc2sgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUJJX0NUTF9XQlVGRU5fUG9zICAgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpDVEwwOiBXQlVGRU4gUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEVCSV9DVExfV0JVRkVOX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBFQklfQ1RMX1dCVUZFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6Q1RMMDogV0JVRkVOIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVCSV9UQ1RMX1RBQ0NfUG9zICAgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6VENUTDA6IFRBQ0MgUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBFQklfVENUTF9UQUNDX01zayAgICAgICAgICAgICAgICAoMHgxZnVsIDw8IEVCSV9UQ1RMX1RBQ0NfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OlRDVEwwOiBUQUNDIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQklfVENUTF9UQUhEX1BvcyAgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OlRDVEwwOiBUQUhEIFBvc2l0aW9uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUJJX1RDVExfVEFIRF9Nc2sgICAgICAgICAgICAgICAgKDB4N3VsIDw8IEVCSV9UQ1RMX1RBSERfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpUQ1RMMDogVEFIRCBNYXNrICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUJJX1RDVExfVzJYX1BvcyAgICAgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpUQ1RMMDogVzJYIFBvc2l0aW9uICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVCSV9UQ1RMX1cyWF9Nc2sgICAgICAgICAgICAgICAgICgweGZ1bCA8PCBFQklfVENUTF9XMlhfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6VENUTDA6IFcyWCBNYXNrICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVCSV9UQ1RMX1JBSERPRkZfUG9zICAgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6VENUTDA6IFJBSERPRkYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFQklfVENUTF9SQUhET0ZGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUJJX1RDVExfUkFIRE9GRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OlRDVEwwOiBSQUhET0ZGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQklfVENUTF9XQUhET0ZGX1BvcyAgICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OlRDVEwwOiBXQUhET0ZGIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUJJX1RDVExfV0FIRE9GRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVCSV9UQ1RMX1dBSERPRkZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpUQ1RMMDogV0FIRE9GRiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUJJX1RDVExfUjJSX1BvcyAgICAgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpUQ1RMMDogUjJSIFBvc2l0aW9uICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVCSV9UQ1RMX1IyUl9Nc2sgICAgICAgICAgICAgICAgICgweGZ1bCA8PCBFQklfVENUTF9SMlJfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6VENUTDA6IFIyUiBNYXNrICAgICAgICAgICAgICAgICAgICAqLworCisvKipAfSovIC8qIEVCSV9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgRUJJIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX0VCSV9SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZWNhcF9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9lY2FwX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNzQxMjQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZWNhcF9yZWcuaApAQCAtMCwwICsxLDM4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGVjYXBfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIEVDQVAgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fRUNBUF9SRUdfSF9fCisjZGVmaW5lIF9fRUNBUF9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVuaGFuY2VkIElucHV0IENhcHR1cmUgVGltZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBFQ0FQIEVuaGFuY2VkIElucHV0IENhcHR1cmUgVGltZXIoRUNBUCkKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgRUNBUCBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisgICAgLyoqCisgICAgICogQHZhciBFQ0FQX1Q6OkNOVAorICAgICAqIE9mZnNldDogMHgwMCAgSW5wdXQgQ2FwdHVyZSBDb3VudGVyICgyNC1iaXQgdXAgY291bnRlcikKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjM6MF0gIHxDTlQgICAgICAgfElucHV0IENhcHR1cmUgVGltZXIvQ291bnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBDYXB0dXJlIFRpbWVyL0NvdW50ZXIgaXMgYSAyNC1iaXQgdXAtY291bnRpbmcgY291bnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjbG9jayBzb3VyY2UgZm9yIHRoZSBjb3VudGVyIGlzIGZyb20gdGhlIGNsb2NrIGRpdmlkZXIKKyAgICAgKiBAdmFyIEVDQVBfVDo6SExEMAorICAgICAqIE9mZnNldDogMHgwNCAgSW5wdXQgQ2FwdHVyZSBIb2xkIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjM6MF0gIHxIT0xEICAgICAgfElucHV0IENhcHR1cmUgQ291bnRlciBIb2xkIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBhbiBhY3RpdmUgaW5wdXQgY2FwdHVyZSBjaGFubmVsIGRldGVjdHMgYSB2YWxpZCBlZGdlIHNpZ25hbCBjaGFuZ2UsIHRoZSBFQ0FQQ05UIHZhbHVlIGlzIGxhdGNoZWQgaW50byB0aGUgY29ycmVzcG9uZGluZyBob2xkaW5nIHJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBpbnB1dCBjaGFubmVsIGhhcyBpdHMgb3duIGhvbGRpbmcgcmVnaXN0ZXIgbmFtZWQgYnkgRUNBUF9ITER4IHdoZXJlIHggaXMgZnJvbSAwIHRvIDIgdG8gaW5kaWNhdGUgaW5wdXRzIGZyb20gSUMwIHRvIElDMiwgcmVzcGVjdGl2ZWx5LgorICAgICAqIEB2YXIgRUNBUF9UOjpITEQxCisgICAgICogT2Zmc2V0OiAweDA4ICBJbnB1dCBDYXB0dXJlIEhvbGQgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyMzowXSAgfEhPTEQgICAgICB8SW5wdXQgQ2FwdHVyZSBDb3VudGVyIEhvbGQgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGFuIGFjdGl2ZSBpbnB1dCBjYXB0dXJlIGNoYW5uZWwgZGV0ZWN0cyBhIHZhbGlkIGVkZ2Ugc2lnbmFsIGNoYW5nZSwgdGhlIEVDQVBDTlQgdmFsdWUgaXMgbGF0Y2hlZCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGhvbGRpbmcgcmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGlucHV0IGNoYW5uZWwgaGFzIGl0cyBvd24gaG9sZGluZyByZWdpc3RlciBuYW1lZCBieSBFQ0FQX0hMRHggd2hlcmUgeCBpcyBmcm9tIDAgdG8gMiB0byBpbmRpY2F0ZSBpbnB1dHMgZnJvbSBJQzAgdG8gSUMyLCByZXNwZWN0aXZlbHkuCisgICAgICogQHZhciBFQ0FQX1Q6OkhMRDIKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIElucHV0IENhcHR1cmUgSG9sZCBSZWdpc3RlciAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzIzOjBdICB8SE9MRCAgICAgIHxJbnB1dCBDYXB0dXJlIENvdW50ZXIgSG9sZCBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gYW4gYWN0aXZlIGlucHV0IGNhcHR1cmUgY2hhbm5lbCBkZXRlY3RzIGEgdmFsaWQgZWRnZSBzaWduYWwgY2hhbmdlLCB0aGUgRUNBUENOVCB2YWx1ZSBpcyBsYXRjaGVkIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgaG9sZGluZyByZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggaW5wdXQgY2hhbm5lbCBoYXMgaXRzIG93biBob2xkaW5nIHJlZ2lzdGVyIG5hbWVkIGJ5IEVDQVBfSExEeCB3aGVyZSB4IGlzIGZyb20gMCB0byAyIHRvIGluZGljYXRlIGlucHV0cyBmcm9tIElDMCB0byBJQzIsIHJlc3BlY3RpdmVseS4KKyAgICAgKiBAdmFyIEVDQVBfVDo6Q05UQ01QCisgICAgICogT2Zmc2V0OiAweDEwICBJbnB1dCBDYXB0dXJlIENvbXBhcmUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjM6MF0gIHxDTlRDTVAgICAgfElucHV0IENhcHR1cmUgQ291bnRlciBDb21wYXJlIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gaXMgZW5hYmxlZCAoQ01QRU4gPSAxKSwgdGhpcyByZWdpc3RlciAoRUNBUF9DTlRDTVApIGlzIHVzZWQgdG8gY29tcGFyZSB3aXRoIHRoZSBjYXB0dXJlIGNvdW50ZXIgKEVDQVBfQ05UKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgcmVsb2FkIGNvbnRyb2wgaXMgZW5hYmxlZCAoUkxERU5bbl0gPSAxLCBuPTB+MyksIGFuIG92ZXJmbG93IGV2ZW50IG9yIGNhcHR1cmUgZXZlbnRzIHdpbGwgdHJpZ2dlciB0aGUgaGFyZHdhcmUgdG8gbG9hZCB0aGUgdmFsdWUgb2YgdGhpcyByZWdpc3RlciAoRUNBUF9DTlRDTVApIGludG8gRUNBUF9DTlQuCisgICAgICogQHZhciBFQ0FQX1Q6OkNUTDAKKyAgICAgKiBPZmZzZXQ6IDB4MTQgIElucHV0IENhcHR1cmUgQ29udHJvbCBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzI6MF0gICB8TkZDTEtTRUwgIHxOb2lzZSBGaWx0ZXIgQ2xvY2sgUHJlLWRpdmlkZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUbyBkZXRlcm1pbmUgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBvZiB0aGUgTm9pc2UgRmlsdGVyIGNsb2NrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gQ0FQX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBDQVBfQ0xLLzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gQ0FQX0NMSy80LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IENBUF9DTEsvMTYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gQ0FQX0NMSy8zMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBDQVBfQ0xLLzY0LgorICAgICAqIHxbM10gICAgIHxDQVBORkRJUyAgfElucHV0IENhcHR1cmUgTm9pc2UgRmlsdGVyIERpc2FibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb2lzZSBmaWx0ZXIgb2YgSW5wdXQgQ2FwdHVyZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBOb2lzZSBmaWx0ZXIgb2YgSW5wdXQgQ2FwdHVyZSBEaXNhYmxlZCAoQnlwYXNzKS4KKyAgICAgKiB8WzRdICAgICB8SUMwRU4gICAgIHxQb3J0IFBpbiBJQzAgSW5wdXQgdG8gSW5wdXQgQ2FwdHVyZSBVbml0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElDMCBpbnB1dCB0byBJbnB1dCBDYXB0dXJlIFVuaXQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElDMCBpbnB1dCB0byBJbnB1dCBDYXB0dXJlIFVuaXQgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8SUMxRU4gICAgIHxQb3J0IFBpbiBJQzEgSW5wdXQgdG8gSW5wdXQgQ2FwdHVyZSBVbml0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElDMSBpbnB1dCB0byBJbnB1dCBDYXB0dXJlIFVuaXQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElDMSBpbnB1dCB0byBJbnB1dCBDYXB0dXJlIFVuaXQgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8SUMyRU4gICAgIHxQb3J0IFBpbiBJQzIgSW5wdXQgdG8gSW5wdXQgQ2FwdHVyZSBVbml0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElDMiBpbnB1dCB0byBJbnB1dCBDYXB0dXJlIFVuaXQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElDMiBpbnB1dCB0byBJbnB1dCBDYXB0dXJlIFVuaXQgRW5hYmxlZC4KKyAgICAgKiB8Wzk6OF0gICB8Q0FQU0VMMCAgIHxDQVAwIElucHV0IFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENBUDAgaW5wdXQgaXMgZnJvbSBwb3J0IHBpbiBJQ0FQMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ0FQMCBpbnB1dCBpcyBmcm9tIHNpZ25hbCBDSEEgb2YgUUVJIGNvbnRyb2xsZXIgdW5pdCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW5wdXQgY2FwdHVyZSB1bml0IG4gbWF0Y2hlcyBRRUluLCB3aGVyZSBuID0gMH4xLgorICAgICAqIHxbMTE6MTBdIHxDQVBTRUwxICAgfENBUDEgSW5wdXQgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ0FQMSBpbnB1dCBpcyBmcm9tIHBvcnQgcGluIElDQVAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDQVAxIGlucHV0IGlzIGZyb20gc2lnbmFsIENIQiBvZiBRRUkgY29udHJvbGxlciB1bml0IG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbnB1dCBjYXB0dXJlIHVuaXQgbiBtYXRjaGVzIFFFSW4sIHdoZXJlIG4gPSAwfjEuCisgICAgICogfFsxMzoxMl0gfENBUFNFTDIgICB8Q0FQMiBJbnB1dCBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDQVAyIGlucHV0IGlzIGZyb20gcG9ydCBwaW4gSUNBUDIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENBUDIgaW5wdXQgaXMgZnJvbSBzaWduYWwgQ0hYIG9mIFFFSSBjb250cm9sbGVyIHVuaXQgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElucHV0IGNhcHR1cmUgdW5pdCBuIG1hdGNoZXMgUUVJbiwgd2hlcmUgbiA9IDB+MS4KKyAgICAgKiB8WzE2XSAgICB8Q0FQSUVOMCAgIHxJbnB1dCBDYXB0dXJlIENoYW5uZWwgMCBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGZsYWcgQ0FQVEYwIGNhbiB0cmlnZ2VyIElucHV0IENhcHR1cmUgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgZmxhZyBDQVBURjAgY2FuIHRyaWdnZXIgSW5wdXQgQ2FwdHVyZSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE3XSAgICB8Q0FQSUVOMSAgIHxJbnB1dCBDYXB0dXJlIENoYW5uZWwgMSBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGZsYWcgQ0FQVEYxIGNhbiB0cmlnZ2VyIElucHV0IENhcHR1cmUgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgZmxhZyBDQVBURjEgY2FuIHRyaWdnZXIgSW5wdXQgQ2FwdHVyZSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE4XSAgICB8Q0FQSUVOMiAgIHxJbnB1dCBDYXB0dXJlIENoYW5uZWwgMiBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGZsYWcgQ0FQVEYyIGNhbiB0cmlnZ2VyIElucHV0IENhcHR1cmUgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgZmxhZyBDQVBURjIgY2FuIHRyaWdnZXIgSW5wdXQgQ2FwdHVyZSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzIwXSAgICB8T1ZJRU4gICAgIHxDQVBPVkYgVHJpZ2dlciBJbnB1dCBDYXB0dXJlIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgZmxhZyBDQVBPVkYgY2FuIHRyaWdnZXIgSW5wdXQgQ2FwdHVyZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBmbGFnIENBUE9WRiBjYW4gdHJpZ2dlciBJbnB1dCBDYXB0dXJlIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMjFdICAgIHxDTVBJRU4gICAgfENBUENNUEYgVHJpZ2dlciBJbnB1dCBDYXB0dXJlIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgZmxhZyBDQVBDTVBGIGNhbiB0cmlnZ2VyIElucHV0IENhcHR1cmUgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgZmxhZyBDQVBDTVBGIGNhbiB0cmlnZ2VyIElucHV0IENhcHR1cmUgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyNF0gICAgfENOVEVOICAgICB8SW5wdXQgQ2FwdHVyZSBDb3VudGVyIFN0YXJ0IENvdW50aW5nIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXR0aW5nIHRoaXMgYml0IHRvIDEsIHRoZSBjYXB0dXJlIGNvdW50ZXIgKEVDQVBfQ05UKSBzdGFydHMgdXAtY291bnRpbmcgc3luY2hyb25vdXNseSB3aXRoIHRoZSBjbG9jayBmcm9tIHRoZSAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVDQVBfQ05UIHN0b3AgY291bnRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVDQVBfQ05UIHN0YXJ0cyB1cC1jb3VudGluZy4KKyAgICAgKiB8WzI1XSAgICB8Q01QQ0xSRU4gIHxJbnB1dCBDYXB0dXJlIENvdW50ZXIgQ2xlYXJlZCBieSBDb21wYXJlLW1hdGNoIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgdGhlIGNhcHR1cmUgY291bnRlciAoRUNBUF9DTlQpIHdpbGwgYmUgY2xlYXJlZCB0byAwIHdoZW4gdGhlIGNvbXBhcmUtbWF0Y2ggZXZlbnQgKENBUENNUEYgPSAxKSBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUtbWF0Y2ggZXZlbnQgKENBUENNUEYpIGNhbiBjbGVhciBjYXB0dXJlIGNvdW50ZXIgKEVDQVBfQ05UKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZS1tYXRjaCBldmVudCAoQ0FQQ01QRikgY2FuIGNsZWFyIGNhcHR1cmUgY291bnRlciAoRUNBUF9DTlQpIEVuYWJsZWQuCisgICAgICogfFsyOF0gICAgfENNUEVOICAgICB8Q29tcGFyZSBGdW5jdGlvbiBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb21wYXJlIGZ1bmN0aW9uIGluIGlucHV0IGNhcHR1cmUgdGltZXIvY291bnRlciBpcyB0byBjb21wYXJlIHRoZSBkeW5hbWljIGNvdW50aW5nIEVDQVBfQ05UIHdpdGggdGhlIGNvbXBhcmUgcmVnaXN0ZXIgRUNBUF9DTlRDTVAsIGlmIEVDQVBfQ05UIHZhbHVlIHJlYWNoZXMgRUNBUF9DTlRDTVAsIHRoZSBmbGFnIENBUENNUEYgd2lsbCBiZSBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBjb21wYXJlIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgY29tcGFyZSBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMjldICAgIHxDQVBFTiAgICAgfElucHV0IENhcHR1cmUgVGltZXIvQ291bnRlciBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnB1dCBDYXB0dXJlIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnB1dCBDYXB0dXJlIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogQHZhciBFQ0FQX1Q6OkNUTDEKKyAgICAgKiBPZmZzZXQ6IDB4MTggIElucHV0IENhcHR1cmUgQ29udHJvbCBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8RURHRVNFTDAgIHxDaGFubmVsIDAgQ2FwdHVyZWQgRWRnZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbnB1dCBjYXB0dXJlMCBjYW4gZGV0ZWN0IGZhbGxpbmcgZWRnZSBjaGFuZ2Ugb25seSwgcmlzaW5nIGVkZ2UgY2hhbmdlIG9ubHkgb3IgYm90aCBlZGdlIGNoYW5nZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRGV0ZWN0IHJpc2luZyBlZGdlIG9ubHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBEZXRlY3QgZmFsbGluZyBlZGdlIG9ubHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MXggPSBEZXRlY3QgYm90aCByaXNpbmcgYW5kIGZhbGxpbmcgZWRnZS4KKyAgICAgKiB8WzM6Ml0gICB8RURHRVNFTDEgIHxDaGFubmVsIDEgQ2FwdHVyZWQgRWRnZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbnB1dCBjYXB0dXJlMSBjYW4gZGV0ZWN0IGZhbGxpbmcgZWRnZSBjaGFuZ2Ugb25seSwgcmlzaW5nIGVkZ2UgY2hhbmdlIG9ubHkgb3IgYm90aCBlZGdlIGNoYW5nZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRGV0ZWN0IHJpc2luZyBlZGdlIG9ubHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBEZXRlY3QgZmFsbGluZyBlZGdlIG9ubHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MXggPSBEZXRlY3QgYm90aCByaXNpbmcgYW5kIGZhbGxpbmcgZWRnZS4KKyAgICAgKiB8WzU6NF0gICB8RURHRVNFTDIgIHxDaGFubmVsIDIgQ2FwdHVyZWQgRWRnZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbnB1dCBjYXB0dXJlMiBjYW4gZGV0ZWN0IGZhbGxpbmcgZWRnZSBjaGFuZ2Ugb25seSwgcmlzaW5nIGVkZ2UgY2hhbmdlIG9ubHkgb3IgYm90aCBlZGdlIGNoYW5nZXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERldGVjdCByaXNpbmcgZWRnZSBvbmx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRGV0ZWN0IGZhbGxpbmcgZWRnZSBvbmx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDF4ID0gRGV0ZWN0IGJvdGggcmlzaW5nIGFuZCBmYWxsaW5nIGVkZ2UuCisgICAgICogfFs4XSAgICAgfENBUDBSTERFTiB8Q2FwdHVyZSBDb3VudGVydTIwMTlzIFJlbG9hZCBGdW5jdGlvbiBUcmlnZ2VyZWQgYnkgRXZlbnQgQ0FQVEUwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlbG9hZCB0cmlnZ2VyZWQgYnkgRXZlbnQgQ0FQVEUwIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVsb2FkIHRyaWdnZXJlZCBieSBFdmVudCBDQVBURTAgRW5hYmxlZC4KKyAgICAgKiB8WzldICAgICB8Q0FQMVJMREVOIHxDYXB0dXJlIENvdW50ZXJ1MjAxOXMgUmVsb2FkIEZ1bmN0aW9uIFRyaWdnZXJlZCBieSBFdmVudCBDQVBURTEgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVsb2FkIHRyaWdnZXJlZCBieSBFdmVudCBDQVBURTEgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSByZWxvYWQgdHJpZ2dlcmVkIGJ5IEV2ZW50IENBUFRFMSBFbmFibGVkLgorICAgICAqIHxbMTBdICAgIHxDQVAyUkxERU4gfENhcHR1cmUgQ291bnRlcnUyMDE5cyBSZWxvYWQgRnVuY3Rpb24gVHJpZ2dlcmVkIGJ5IEV2ZW50IENBUFRFMiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSByZWxvYWQgdHJpZ2dlcmVkIGJ5IEV2ZW50IENBUFRFMiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHJlbG9hZCB0cmlnZ2VyZWQgYnkgRXZlbnQgQ0FQVEUyIEVuYWJsZWQuCisgICAgICogfFsxMV0gICAgfE9WUkxERU4gICB8Q2FwdHVyZSBDb3VudGVydTIwMTlzIFJlbG9hZCBGdW5jdGlvbiBUcmlnZ2VyZWQgYnkgT3ZlcmZsb3cgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVsb2FkIHRyaWdnZXJlZCBieSBDQVBPViBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHJlbG9hZCB0cmlnZ2VyZWQgYnkgQ0FQT1YgRW5hYmxlZC4KKyAgICAgKiB8WzE0OjEyXSB8Q0xLU0VMICAgIHxDYXB0dXJlIFRpbWVyIENsb2NrIERpdmlkZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY2FwdHVyZSB0aW1lciBjbG9jayBoYXMgYSBwcmUtZGl2aWRlciB3aXRoIGVpZ2h0IGRpdmlkZWQgb3B0aW9ucyBjb250cm9sbGVkIGJ5IENMS1NFTFsyOjBdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IENBUF9DTEsvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBDQVBfQ0xLLzQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gQ0FQX0NMSy8xNi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBDQVBfQ0xLLzMyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IENBUF9DTEsvNjQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gQ0FQX0NMSy85Ni4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSBDQVBfQ0xLLzExMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBDQVBfQ0xLLzEyOC4KKyAgICAgKiB8WzE3OjE2XSB8Q05UU1JDU0VMIHxDYXB0dXJlIFRpbWVyL0NvdW50ZXIgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNlbGVjdCB0aGUgY2FwdHVyZSB0aW1lci9jb3VudGVyIGNsb2NrIHNvdXJjZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENBUF9DTEsgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ0FQMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENBUDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDQVAyLgorICAgICAqIHxbMjBdICAgIHxDQVAwQ0xSRU4gfENhcHR1cmUgQ291bnRlciBDbGVhcmVkIGJ5IENhcHR1cmUgRXZlbnQwIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXZlbnQgQ0FQVEUwIGNhbiBjbGVhciBjYXB0dXJlIGNvdW50ZXIgKEVDQVBfQ05UKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXZlbnQgQ0FQVEUwIGNhbiBjbGVhciBjYXB0dXJlIGNvdW50ZXIgKEVDQVBfQ05UKSBFbmFibGVkLgorICAgICAqIHxbMjFdICAgIHxDQVAxQ0xSRU4gfENhcHR1cmUgQ291bnRlciBDbGVhcmVkIGJ5IENhcHR1cmUgRXZlbnQxIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXZlbnQgQ0FQVEUxIGNhbiBjbGVhciBjYXB0dXJlIGNvdW50ZXIgKEVDQVBfQ05UKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXZlbnQgQ0FQVEUxIGNhbiBjbGVhciBjYXB0dXJlIGNvdW50ZXIgKEVDQVBfQ05UKSBFbmFibGVkLgorICAgICAqIHxbMjJdICAgIHxDQVAyQ0xSRU4gfENhcHR1cmUgQ291bnRlciBDbGVhcmVkIGJ5IENhcHR1cmUgRXZlbnQyIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXZlbnQgQ0FQVEUyIGNhbiBjbGVhciBjYXB0dXJlIGNvdW50ZXIgKEVDQVBfQ05UKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXZlbnQgQ0FQVEUyIGNhbiBjbGVhciBjYXB0dXJlIGNvdW50ZXIgKEVDQVBfQ05UKSBFbmFibGVkLgorICAgICAqIEB2YXIgRUNBUF9UOjpTVEFUVVMKKyAgICAgKiBPZmZzZXQ6IDB4MUMgIElucHV0IENhcHR1cmUgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q0FQVEYwICAgIHxJbnB1dCBDYXB0dXJlIENoYW5uZWwgMCBUcmlnZ2VyZWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGlucHV0IGNhcHR1cmUgY2hhbm5lbCAwIGRldGVjdHMgYSB2YWxpZCBlZGdlIGNoYW5nZSBhdCBDQVAwIGlucHV0LCBpdCB3aWxsIHNldCBmbGFnIENBUFRGMCB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB2YWxpZCBlZGdlIGNoYW5nZSBoYXMgYmVlbiBkZXRlY3RlZCBhdCBDQVAwIGlucHV0IHNpbmNlIGxhc3QgY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF0IGxlYXN0IGEgdmFsaWQgZWRnZSBjaGFuZ2UgaGFzIGJlZW4gZGV0ZWN0ZWQgYXQgQ0FQMCBpbnB1dCBzaW5jZSBsYXN0IGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIG9ubHkgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxXSAgICAgfENBUFRGMSAgICB8SW5wdXQgQ2FwdHVyZSBDaGFubmVsIDEgVHJpZ2dlcmVkIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBpbnB1dCBjYXB0dXJlIGNoYW5uZWwgMSBkZXRlY3RzIGEgdmFsaWQgZWRnZSBjaGFuZ2UgYXQgQ0FQMSBpbnB1dCwgaXQgd2lsbCBzZXQgZmxhZyBDQVBURjEgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gdmFsaWQgZWRnZSBjaGFuZ2UgaGFzIGJlZW4gZGV0ZWN0ZWQgYXQgQ0FQMSBpbnB1dCBzaW5jZSBsYXN0IGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBdCBsZWFzdCBhIHZhbGlkIGVkZ2UgY2hhbmdlIGhhcyBiZWVuIGRldGVjdGVkIGF0IENBUDEgaW5wdXQgc2luY2UgbGFzdCBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBvbmx5IGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMl0gICAgIHxDQVBURjIgICAgfElucHV0IENhcHR1cmUgQ2hhbm5lbCAyIFRyaWdnZXJlZCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgaW5wdXQgY2FwdHVyZSBjaGFubmVsIDIgZGV0ZWN0cyBhIHZhbGlkIGVkZ2UgY2hhbmdlIGF0IENBUDIgaW5wdXQsIGl0IHdpbGwgc2V0IGZsYWcgQ0FQVEYyIHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHZhbGlkIGVkZ2UgY2hhbmdlIGhhcyBiZWVuIGRldGVjdGVkIGF0IENBUDIgaW5wdXQgc2luY2UgbGFzdCBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXQgbGVhc3QgYSB2YWxpZCBlZGdlIGNoYW5nZSBoYXMgYmVlbiBkZXRlY3RlZCBhdCBDQVAyIGlucHV0IHNpbmNlIGxhc3QgY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgb25seSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzRdICAgICB8Q0FQQ01QRiAgIHxJbnB1dCBDYXB0dXJlIENvbXBhcmUtbWF0Y2ggRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBpbnB1dCBjYXB0dXJlIGNvbXBhcmUgZnVuY3Rpb24gaXMgZW5hYmxlZCwgdGhlIGZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gY2FwdHVyZSBjb3VudGVyIChFQ0FQX0NOVCkgdXAgY291bnRzIGFuZCByZWFjaGVzIHRoZSBFQ0FQX0NOVENNUCB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUNBUF9DTlQgaGFzIG5vdCBtYXRjaGVkIEVDQVBfQ05UQ01QIHZhbHVlIHNpbmNlIGxhc3QgY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVDQVBfQ05UIGhhcyBtYXRjaGVkIEVDQVBfQ05UQ01QIHZhbHVlIGF0IGxlYXN0IG9uY2Ugc2luY2UgbGFzdCBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBvbmx5IGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNV0gICAgIHxDQVBPVkYgICAgfElucHV0IENhcHR1cmUgQ291bnRlciBPdmVyZmxvdyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBjb3VudGVyIChFQ0FQX0NOVCkgb3ZlcmZsb3dzIGZyb20gMHgwMEZGX0ZGRkYgdG8gemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gb3ZlcmZsb3cgZXZlbnQgaGFzIG9jY3VycmVkIHNpbmNlIGxhc3QgY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE92ZXJmbG93IGV2ZW50KHMpIGhhcy9oYXZlIG9jY3VycmVkIHNpbmNlIGxhc3QgY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgb25seSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzZdICAgICB8Q0FQMCAgICAgIHxWYWx1ZSBvZiBJbnB1dCBDaGFubmVsIDAsIENBUDAgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWZsZWN0aW5nIHRoZSB2YWx1ZSBvZiBpbnB1dCBjaGFubmVsIDAsIENBUDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoVGhlIGJpdCBpcyByZWFkIG9ubHkgYW5kIHdyaXRlIGlzIGlnbm9yZWQpCisgICAgICogfFs3XSAgICAgfENBUDEgICAgICB8VmFsdWUgb2YgSW5wdXQgQ2hhbm5lbCAxLCBDQVAxIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVmbGVjdGluZyB0aGUgdmFsdWUgb2YgaW5wdXQgY2hhbm5lbCAxLCBDQVAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KFRoZSBiaXQgaXMgcmVhZCBvbmx5IGFuZCB3cml0ZSBpcyBpZ25vcmVkKQorICAgICAqIHxbOF0gICAgIHxDQVAyICAgICAgfFZhbHVlIG9mIElucHV0IENoYW5uZWwgMiwgQ0FQMiAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlZmxlY3RpbmcgdGhlIHZhbHVlIG9mIGlucHV0IGNoYW5uZWwgMiwgQ0FQMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoVGhlIGJpdCBpcyByZWFkIG9ubHkgYW5kIHdyaXRlIGlzIGlnbm9yZWQpCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTlQ7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gSW5wdXQgQ2FwdHVyZSBDb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSExEMDsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIElucHV0IENhcHR1cmUgSG9sZCBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhMRDE7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBJbnB1dCBDYXB0dXJlIEhvbGQgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBITEQyOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gSW5wdXQgQ2FwdHVyZSBIb2xkIFJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ05UQ01QOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIElucHV0IENhcHR1cmUgQ29tcGFyZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDA7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE0XSBJbnB1dCBDYXB0dXJlIENvbnRyb2wgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEwxOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxOF0gSW5wdXQgQ2FwdHVyZSBDb250cm9sIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1RBVFVTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMWNdIElucHV0IENhcHR1cmUgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBFQ0FQX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIEVDQVBfQ09OU1QgRUNBUCBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBFQ0FQIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgRUNBUF9DTlRfQ05UX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q05UOiBDTlQgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQVBfQ05UX0NOVF9Nc2sgICAgICAgICAgICAgICAgICgweGZmZmZmZnVsIDw8IEVDQVBfQ05UX0NOVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNOVDogQ05UIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfSExEMF9IT0xEX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkhMRDA6IEhPTEQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFQ0FQX0hMRDBfSE9MRF9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBFQ0FQX0hMRDBfSE9MRF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpITEQwOiBIT0xEIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0hMRDFfSE9MRF9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpITEQxOiBIT0xEIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9ITEQxX0hPTERfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZmZmdWwgPDwgRUNBUF9ITEQxX0hPTERfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6SExEMTogSE9MRCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9ITEQyX0hPTERfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6SExEMjogSE9MRCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVDQVBfSExEMl9IT0xEX01zayAgICAgICAgICAgICAgICgweGZmZmZmZnVsIDw8IEVDQVBfSExEMl9IT0xEX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkhMRDI6IEhPTEQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ05UQ01QX0NOVENNUF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNOVENNUDogQ05UQ01QIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NOVENNUF9DTlRDTVBfTXNrICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBFQ0FQX0NOVENNUF9DTlRDTVBfUG9zKSAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDTlRDTVA6IENOVENNUCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDBfTkZDTEtTRUxfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBORkNMS1NFTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwwX05GQ0xLU0VMX01zayAgICAgICAgICAgKDB4N3VsIDw8IEVDQVBfQ1RMMF9ORkNMS1NFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogTkZDTEtTRUwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwwX0NBUE5GRElTX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ0FQTkZESVMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMF9DQVBORkRJU19Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDBfQ0FQTkZESVNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENBUE5GRElTIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMF9JQzBFTl9Qb3MgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IElDMEVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDBfSUMwRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwwX0lDMEVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBJQzBFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDBfSUMxRU5fUG9zICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBJQzFFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwwX0lDMUVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMF9JQzFFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogSUMxRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwwX0lDMkVOX1BvcyAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogSUMyRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMF9JQzJFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDBfSUMyRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IElDMkVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMF9DQVBTRUwwX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENBUFNFTDAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDBfQ0FQU0VMMF9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRUNBUF9DVEwwX0NBUFNFTDBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDQVBTRUwwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDBfQ0FQU0VMMV9Qb3MgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDQVBTRUwxIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwwX0NBUFNFTDFfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVDQVBfQ1RMMF9DQVBTRUwxX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ0FQU0VMMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwwX0NBUFNFTDJfUG9zICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ0FQU0VMMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMF9DQVBTRUwyX01zayAgICAgICAgICAgICgweDN1bCA8PCBFQ0FQX0NUTDBfQ0FQU0VMMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENBUFNFTDIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMF9DQVBJRU4wX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENBUElFTjAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDBfQ0FQSUVOMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwwX0NBUElFTjBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDQVBJRU4wIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDBfQ0FQSUVOMV9Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDQVBJRU4xIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwwX0NBUElFTjFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMF9DQVBJRU4xX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ0FQSUVOMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwwX0NBUElFTjJfUG9zICAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ0FQSUVOMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMF9DQVBJRU4yX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDBfQ0FQSUVOMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENBUElFTjIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMF9PVklFTl9Qb3MgICAgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IE9WSUVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDBfT1ZJRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwwX09WSUVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBPVklFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDBfQ01QSUVOX1BvcyAgICAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDTVBJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwwX0NNUElFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMF9DTVBJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ01QSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwwX0NOVEVOX1BvcyAgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ05URU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMF9DTlRFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDBfQ05URU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENOVEVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMF9DTVBDTFJFTl9Qb3MgICAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENNUENMUkVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDBfQ01QQ0xSRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwwX0NNUENMUkVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDTVBDTFJFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDBfQ01QRU5fUG9zICAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDTVBFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwwX0NNUEVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMF9DTVBFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ01QRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwwX0NBUEVOX1BvcyAgICAgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ0FQRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMF9DQVBFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDBfQ0FQRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENBUEVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMV9FREdFU0VMMF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IEVER0VTRUwwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDFfRURHRVNFTDBfTXNrICAgICAgICAgICAoMHgzdWwgPDwgRUNBUF9DVEwxX0VER0VTRUwwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBFREdFU0VMMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDFfRURHRVNFTDFfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBFREdFU0VMMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwxX0VER0VTRUwxX01zayAgICAgICAgICAgKDB4M3VsIDw8IEVDQVBfQ1RMMV9FREdFU0VMMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogRURHRVNFTDEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwxX0VER0VTRUwyX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogRURHRVNFTDIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMV9FREdFU0VMMl9Nc2sgICAgICAgICAgICgweDN1bCA8PCBFQ0FQX0NUTDFfRURHRVNFTDJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IEVER0VTRUwyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMV9DQVAwUkxERU5fUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IENBUDBSTERFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDFfQ0FQMFJMREVOX01zayAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwxX0NBUDBSTERFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBDQVAwUkxERU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDFfQ0FQMVJMREVOX1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBDQVAxUkxERU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwxX0NBUDFSTERFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMV9DQVAxUkxERU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogQ0FQMVJMREVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwxX0NBUDJSTERFTl9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogQ0FQMlJMREVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMV9DQVAyUkxERU5fTXNrICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDFfQ0FQMlJMREVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IENBUDJSTERFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMV9PVlJMREVOX1BvcyAgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IE9WUkxERU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDFfT1ZSTERFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwxX09WUkxERU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBPVlJMREVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDFfQ0xLU0VMX1BvcyAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBDTEtTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwxX0NMS1NFTF9Nc2sgICAgICAgICAgICAgKDB4N3VsIDw8IEVDQVBfQ1RMMV9DTEtTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogQ0xLU0VMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwxX0NOVFNSQ1NFTF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogQ05UU1JDU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMV9DTlRTUkNTRUxfTXNrICAgICAgICAgICgweDN1bCA8PCBFQ0FQX0NUTDFfQ05UU1JDU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IENOVFNSQ1NFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMV9DQVAwQ0xSRU5fUG9zICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IENBUDBDTFJFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDFfQ0FQMENMUkVOX01zayAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwxX0NBUDBDTFJFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBDQVAwQ0xSRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDFfQ0FQMUNMUkVOX1BvcyAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBDQVAxQ0xSRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwxX0NBUDFDTFJFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMV9DQVAxQ0xSRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogQ0FQMUNMUkVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwxX0NBUDJDTFJFTl9Qb3MgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogQ0FQMkNMUkVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMV9DQVAyQ0xSRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDFfQ0FQMkNMUkVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IENBUDJDTFJFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfU1RBVFVTX0NBUFRGMF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OlNUQVRVUzogQ0FQVEYwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQ0FQX1NUQVRVU19DQVBURjBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9TVEFUVVNfQ0FQVEYwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpTVEFUVVM6IENBUFRGMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX1NUQVRVU19DQVBURjFfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpTVEFUVVM6IENBUFRGMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9TVEFUVVNfQ0FQVEYxX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfU1RBVFVTX0NBUFRGMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6U1RBVFVTOiBDQVBURjEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9TVEFUVVNfQ0FQVEYyX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6U1RBVFVTOiBDQVBURjIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVDQVBfU1RBVFVTX0NBUFRGMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX1NUQVRVU19DQVBURjJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OlNUQVRVUzogQ0FQVEYyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfU1RBVFVTX0NBUENNUEZfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OlNUQVRVUzogQ0FQQ01QRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQ0FQX1NUQVRVU19DQVBDTVBGX01zayAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9TVEFUVVNfQ0FQQ01QRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpTVEFUVVM6IENBUENNUEYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX1NUQVRVU19DQVBPVkZfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpTVEFUVVM6IENBUE9WRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9TVEFUVVNfQ0FQT1ZGX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfU1RBVFVTX0NBUE9WRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6U1RBVFVTOiBDQVBPVkYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9TVEFUVVNfQ0FQMF9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6U1RBVFVTOiBDQVAwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVDQVBfU1RBVFVTX0NBUDBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX1NUQVRVU19DQVAwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OlNUQVRVUzogQ0FQMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfU1RBVFVTX0NBUDFfUG9zICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OlNUQVRVUzogQ0FQMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQ0FQX1NUQVRVU19DQVAxX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9TVEFUVVNfQ0FQMV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpTVEFUVVM6IENBUDEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX1NUQVRVU19DQVAyX1BvcyAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpTVEFUVVM6IENBUDIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9TVEFUVVNfQ0FQMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfU1RBVFVTX0NBUDJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6U1RBVFVTOiBDQVAyIE1hc2sgICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogRUNBUF9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgRUNBUCByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisjZW5kaWYgLyogX19FQ0FQX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9lcHdtX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2Vwd21fcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFjN2VjNQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9lcHdtX3JlZy5oCkBAIC0wLDAgKzEsMzczMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGVwd21fcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIEVQV00gcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fRVBXTV9SRUdfSF9fCisjZGVmaW5lIF9fRVBXTV9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRW5oYW5jZWQgUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgRVBXTSBFbmhhbmNlZCBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIoRVBXTSkKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgRVBXTSBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKgorICAgICAqIEB2YXIgRUNBUERBVF9UOjpSQ0FQREFUCisgICAgICogT2Zmc2V0OiAweDIwQyAgRVBXTSBSaXNpbmcgQ2FwdHVyZSBEYXRhIFJlZ2lzdGVyIDB+NQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFJDQVBEQVQgICB8RVBXTSBSaXNpbmcgQ2FwdHVyZSBEYXRhIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiByaXNpbmcgY2FwdHVyZSBjb25kaXRpb24gaGFwcGVuZWQsIHRoZSBFUFdNIGNvdW50ZXIgdmFsdWUgd2lsbCBiZSBzYXZlZCBpbiB0aGlzIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRUNBUERBVF9UOjpGQ0FQREFUCisgICAgICogT2Zmc2V0OiAweDIxMCAgRVBXTSBGYWxsaW5nIENhcHR1cmUgRGF0YSBSZWdpc3RlciAwfjUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxGQ0FQREFUICAgfEVQV00gRmFsbGluZyBDYXB0dXJlIERhdGEgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGZhbGxpbmcgY2FwdHVyZSBjb25kaXRpb24gaGFwcGVuZWQsIHRoZSBFUFdNIGNvdW50ZXIgdmFsdWUgd2lsbCBiZSBzYXZlZCBpbiB0aGlzIHJlZ2lzdGVyLgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUkNBUERBVDsgLyohPCBbMHgyMEMvMHgyMTQvMHgyMUMvMHgyMjQvMHgyMkMvMHgyMzRdIEVQV00gUmlzaW5nIENhcHR1cmUgRGF0YSBSZWdpc3RlciAwfjUgKi8KKyAgICBfX0lPIHVpbnQzMl90IEZDQVBEQVQ7IC8qITwgWzB4MjEwLzB4MjE4LzB4MjIwLzB4MjI4LzB4MjMwLzB4MjM4XSBFUFdNIEZhbGxpbmcgQ2FwdHVyZSBEYXRhIFJlZ2lzdGVyIDB+NSAqLworfSBFQ0FQREFUX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgRVBXTV9UOjpDVEwwCisgICAgICogT2Zmc2V0OiAweDAwICBFUFdNIENvbnRyb2wgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENUUkxEMCAgICB8Q2VudGVyIFJlLWxvYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cC1kb3duIGNvdW50ZXIgdHlwZSwgUEVSSU9EMCByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjAgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQwIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUYwIHJlZ2lzdGVyIGF0IHRoZSBjZW50ZXIgcG9pbnQgb2YgYSBwZXJpb2QuCisgICAgICogfFsxXSAgICAgfENUUkxEMSAgICB8Q2VudGVyIFJlLWxvYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cC1kb3duIGNvdW50ZXIgdHlwZSwgUEVSSU9EMSByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjEgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQxIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUYxIHJlZ2lzdGVyIGF0IHRoZSBjZW50ZXIgcG9pbnQgb2YgYSBwZXJpb2QuCisgICAgICogfFsyXSAgICAgfENUUkxEMiAgICB8Q2VudGVyIFJlLWxvYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cC1kb3duIGNvdW50ZXIgdHlwZSwgUEVSSU9EMiByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjIgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQyIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUYyIHJlZ2lzdGVyIGF0IHRoZSBjZW50ZXIgcG9pbnQgb2YgYSBwZXJpb2QuCisgICAgICogfFszXSAgICAgfENUUkxEMyAgICB8Q2VudGVyIFJlLWxvYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cC1kb3duIGNvdW50ZXIgdHlwZSwgUEVSSU9EMyByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjMgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQzIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUYzIHJlZ2lzdGVyIGF0IHRoZSBjZW50ZXIgcG9pbnQgb2YgYSBwZXJpb2QuCisgICAgICogfFs0XSAgICAgfENUUkxENCAgICB8Q2VudGVyIFJlLWxvYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cC1kb3duIGNvdW50ZXIgdHlwZSwgUEVSSU9ENCByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjQgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQ0IHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUY0IHJlZ2lzdGVyIGF0IHRoZSBjZW50ZXIgcG9pbnQgb2YgYSBwZXJpb2QuCisgICAgICogfFs1XSAgICAgfENUUkxENSAgICB8Q2VudGVyIFJlLWxvYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cC1kb3duIGNvdW50ZXIgdHlwZSwgUEVSSU9ENSByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjUgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQ1IHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUY1IHJlZ2lzdGVyIGF0IHRoZSBjZW50ZXIgcG9pbnQgb2YgYSBwZXJpb2QuCisgICAgICogfFs4XSAgICAgfFdJTkxERU4wICB8V2luZG93IExvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9EMCByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjAgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQwIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUYwIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQwIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9EMCByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjAgYW5kIENNUERBVDAgcmVnaXN0ZXJzIHdpbGwgbG9hZCB0byBDTVBCVUYwIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2Qgd2hlbiB2YWxpZCByZWxvYWQgd2luZG93IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsaWQgcmVsb2FkIHdpbmRvdyBpcyBzZXQgYnkgc29mdHdhcmUgd3JpdGUgMSB0byBFUFdNX0xPQUQgcmVnaXN0ZXIsIGFuZCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIGxvYWQgc3VjY2Vzcy4KKyAgICAgKiB8WzldICAgICB8V0lOTERFTjEgIHxXaW5kb3cgTG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0QxIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMSByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDEgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjEgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvciBjZW50ZXIgcG9pbnQgb2YgZWFjaCBwZXJpb2QgYnkgc2V0dGluZyBDVFJMRDEgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QxIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMSBhbmQgQ01QREFUMSByZWdpc3RlcnMgd2lsbCBsb2FkIHRvIENNUEJVRjEgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZCB3aGVuIHZhbGlkIHJlbG9hZCB3aW5kb3cgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWxpZCByZWxvYWQgd2luZG93IGlzIHNldCBieSBzb2Z0d2FyZSB3cml0ZSAxIHRvIEVQV01fTE9BRCByZWdpc3RlciwgYW5kIGNsZWFyZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgbG9hZCBzdWNjZXNzLgorICAgICAqIHxbMTBdICAgIHxXSU5MREVOMiAgfFdpbmRvdyBMb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBFUklPRDIgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIFBCVUYyIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUMiByZWdpc3RlciB3aWxsIGxvYWQgdG8gQ01QQlVGMiByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxEMiBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBFUklPRDIgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIFBCVUYyIGFuZCBDTVBEQVQyIHJlZ2lzdGVycyB3aWxsIGxvYWQgdG8gQ01QQlVGMiByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kIHdoZW4gdmFsaWQgcmVsb2FkIHdpbmRvdyBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHZhbGlkIHJlbG9hZCB3aW5kb3cgaXMgc2V0IGJ5IHNvZnR3YXJlIHdyaXRlIDEgdG8gRVBXTV9MT0FEIHJlZ2lzdGVyLCBhbmQgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBsb2FkIHN1Y2Nlc3MuCisgICAgICogfFsxMV0gICAgfFdJTkxERU4zICB8V2luZG93IExvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9EMyByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjMgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQzIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUYzIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQzIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9EMyByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjMgYW5kIENNUERBVDMgcmVnaXN0ZXJzIHdpbGwgbG9hZCB0byBDTVBCVUYzIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2Qgd2hlbiB2YWxpZCByZWxvYWQgd2luZG93IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsaWQgcmVsb2FkIHdpbmRvdyBpcyBzZXQgYnkgc29mdHdhcmUgd3JpdGUgMSB0byBFUFdNX0xPQUQgcmVnaXN0ZXIsIGFuZCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIGxvYWQgc3VjY2Vzcy4KKyAgICAgKiB8WzEyXSAgICB8V0lOTERFTjQgIHxXaW5kb3cgTG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0Q0IHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGNCByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDQgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjQgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvciBjZW50ZXIgcG9pbnQgb2YgZWFjaCBwZXJpb2QgYnkgc2V0dGluZyBDVFJMRDQgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0Q0IHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGNCBhbmQgQ01QREFUNCByZWdpc3RlcnMgd2lsbCBsb2FkIHRvIENNUEJVRjQgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZCB3aGVuIHZhbGlkIHJlbG9hZCB3aW5kb3cgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWxpZCByZWxvYWQgd2luZG93IGlzIHNldCBieSBzb2Z0d2FyZSB3cml0ZSAxIHRvIEVQV01fTE9BRCByZWdpc3RlciwgYW5kIGNsZWFyZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgbG9hZCBzdWNjZXNzLgorICAgICAqIHxbMTNdICAgIHxXSU5MREVONSAgfFdpbmRvdyBMb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBFUklPRDUgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIFBCVUY1IHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUNSByZWdpc3RlciB3aWxsIGxvYWQgdG8gQ01QQlVGNSByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxENSBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBFUklPRDUgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIFBCVUY1IGFuZCBDTVBEQVQ1IHJlZ2lzdGVycyB3aWxsIGxvYWQgdG8gQ01QQlVGNSByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kIHdoZW4gdmFsaWQgcmVsb2FkIHdpbmRvdyBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHZhbGlkIHJlbG9hZCB3aW5kb3cgaXMgc2V0IGJ5IHNvZnR3YXJlIHdyaXRlIDEgdG8gRVBXTV9MT0FEIHJlZ2lzdGVyLCBhbmQgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBsb2FkIHN1Y2Nlc3MuCisgICAgICogfFsxNl0gICAgfElNTUxERU4wICB8SW1tZWRpYXRlbHkgTG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0QwIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMCByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDAgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjAgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvciBjZW50ZXIgcG9pbnQgb2YgZWFjaCBwZXJpb2QgYnkgc2V0dGluZyBDVFJMRDAgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QwL0NNUERBVDAgcmVnaXN0ZXJzIHdpbGwgbG9hZCB0byBQQlVGMCBhbmQgQ01QQlVGMCByZWdpc3RlciBpbW1lZGlhdGVseSB3aGVuIHNvZnR3YXJlIHVwZGF0ZSBQRVJJT0QwL0NNUERBVDAgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSU1NTERFTjAgYml0IGlzIGVuYWJsZWQsIFdJTkxERU4wIGJpdCBhbmQgQ1RSTEQwIGJpdHMgd2lsbCBiZSBpbnZhbGlkLgorICAgICAqIHxbMTddICAgIHxJTU1MREVOMSAgfEltbWVkaWF0ZWx5IExvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9EMSByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjEgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQxIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUYxIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQxIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9EMS9DTVBEQVQxIHJlZ2lzdGVycyB3aWxsIGxvYWQgdG8gUEJVRjEgYW5kIENNUEJVRjEgcmVnaXN0ZXIgaW1tZWRpYXRlbHkgd2hlbiBzb2Z0d2FyZSB1cGRhdGUgUEVSSU9EMS9DTVBEQVQxIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIElNTUxERU4xIGJpdCBpcyBlbmFibGVkLCBXSU5MREVOMSBiaXQgYW5kIENUUkxEMSBiaXRzIHdpbGwgYmUgaW52YWxpZC4KKyAgICAgKiB8WzE4XSAgICB8SU1NTERFTjIgIHxJbW1lZGlhdGVseSBMb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBFUklPRDIgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIFBCVUYyIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUMiByZWdpc3RlciB3aWxsIGxvYWQgdG8gQ01QQlVGMiByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxEMiBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBFUklPRDIvQ01QREFUMiByZWdpc3RlcnMgd2lsbCBsb2FkIHRvIFBCVUYyIGFuZCBDTVBCVUYyIHJlZ2lzdGVyIGltbWVkaWF0ZWx5IHdoZW4gc29mdHdhcmUgdXBkYXRlIFBFUklPRDIvQ01QREFUMiByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBJTU1MREVOMiBiaXQgaXMgZW5hYmxlZCwgV0lOTERFTjIgYml0IGFuZCBDVFJMRDIgYml0cyB3aWxsIGJlIGludmFsaWQuCisgICAgICogfFsxOV0gICAgfElNTUxERU4zICB8SW1tZWRpYXRlbHkgTG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0QzIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMyByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDMgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjMgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvciBjZW50ZXIgcG9pbnQgb2YgZWFjaCBwZXJpb2QgYnkgc2V0dGluZyBDVFJMRDMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QzL0NNUERBVDMgcmVnaXN0ZXJzIHdpbGwgbG9hZCB0byBQQlVGMyBhbmQgQ01QQlVGMyByZWdpc3RlciBpbW1lZGlhdGVseSB3aGVuIHNvZnR3YXJlIHVwZGF0ZSBQRVJJT0QzL0NNUERBVDMgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSU1NTERFTjMgYml0IGlzIGVuYWJsZWQsIFdJTkxERU4zIGJpdCBhbmQgQ1RSTEQzIGJpdHMgd2lsbCBiZSBpbnZhbGlkLgorICAgICAqIHxbMjBdICAgIHxJTU1MREVONCAgfEltbWVkaWF0ZWx5IExvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9ENCByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjQgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQ0IHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUY0IHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQ0IGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9ENC9DTVBEQVQ0IHJlZ2lzdGVycyB3aWxsIGxvYWQgdG8gUEJVRjQgYW5kIENNUEJVRjQgcmVnaXN0ZXIgaW1tZWRpYXRlbHkgd2hlbiBzb2Z0d2FyZSB1cGRhdGUgUEVSSU9ENC9DTVBEQVQ0IHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIElNTUxERU40IGJpdCBpcyBlbmFibGVkLCBXSU5MREVONCBiaXQgYW5kIENUUkxENCBiaXRzIHdpbGwgYmUgaW52YWxpZC4KKyAgICAgKiB8WzIxXSAgICB8SU1NTERFTjUgIHxJbW1lZGlhdGVseSBMb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBFUklPRDUgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIFBCVUY1IHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUNSByZWdpc3RlciB3aWxsIGxvYWQgdG8gQ01QQlVGNSByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxENSBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBFUklPRDUvQ01QREFUNSByZWdpc3RlcnMgd2lsbCBsb2FkIHRvIFBCVUY1IGFuZCBDTVBCVUY1IHJlZ2lzdGVyIGltbWVkaWF0ZWx5IHdoZW4gc29mdHdhcmUgdXBkYXRlIFBFUklPRDUvQ01QREFUNSByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBJTU1MREVONSBiaXQgaXMgZW5hYmxlZCwgV0lOTERFTjUgYml0IGFuZCBDVFJMRDUgYml0cyB3aWxsIGJlIGludmFsaWQuCisgICAgICogfFsyNF0gICAgfEdST1VQRU4gICB8R3JvdXAgRnVuY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgb3V0cHV0IHdhdmVmb3JtIG9mIGVhY2ggRVBXTSBjaGFubmVsIGFyZSBpbmRlcGVuZGVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVW5pZnkgdGhlIEVQV014X0NIMiBhbmQgRVBXTXhfQ0g0IHRvIG91dHB1dCB0aGUgc2FtZSB3YXZlZm9ybSBhcyBFUFdNeF9DSDAgYW5kIHVuaWZ5IHRoZSBFUFdNeF9DSDMgYW5kIEVQV014X0NINSB0byBvdXRwdXQgdGhlIHNhbWUgd2F2ZWZvcm0gYXMgRVBXTXhfQ0gxLgorICAgICAqIHxbMzBdICAgIHxEQkdIQUxUICAgfElDRSBEZWJ1ZyBNb2RlIENvdW50ZXIgSGFsdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBjb3VudGVyIGhhbHQgaXMgZW5hYmxlZCwgRVBXTSBhbGwgY291bnRlcnMgd2lsbCBrZWVwIGN1cnJlbnQgdmFsdWUgdW50aWwgZXhpdCBJQ0UgZGVidWcgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSUNFIGRlYnVnIG1vZGUgY291bnRlciBoYWx0IGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElDRSBkZWJ1ZyBtb2RlIGNvdW50ZXIgaGFsdCBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFszMV0gICAgfERCR1RSSU9GRiB8SUNFIERlYnVnIE1vZGUgQWNrbm93bGVkZ2UgRGlzYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSUNFIGRlYnVnIG1vZGUgYWNrbm93bGVkZ2VtZW50IGVmZmVjdHMgRVBXTSBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBwaW4gd2lsbCBiZSBmb3JjZWQgYXMgdHJpLXN0YXRlIHdoaWxlIElDRSBkZWJ1ZyBtb2RlIGFja25vd2xlZGdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSUNFIGRlYnVnIG1vZGUgYWNrbm93bGVkZ2VtZW50IGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gcGluIHdpbGwga2VlcCBvdXRwdXQgbm8gbWF0dGVyIElDRSBkZWJ1ZyBtb2RlIGFja25vd2xlZGdlZCBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRVBXTV9UOjpDVEwxCisgICAgICogT2Zmc2V0OiAweDA0ICBFUFdNIENvbnRyb2wgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfENOVFRZUEUwICB8RVBXTSBDb3VudGVyIEJlaGF2aW9yIFR5cGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFVwIGNvdW50ZXIgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IERvd24gY291bnQgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfFszOjJdICAgfENOVFRZUEUxICB8RVBXTSBDb3VudGVyIEJlaGF2aW9yIFR5cGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFVwIGNvdW50ZXIgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IERvd24gY291bnQgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfFs1OjRdICAgfENOVFRZUEUyICB8RVBXTSBDb3VudGVyIEJlaGF2aW9yIFR5cGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFVwIGNvdW50ZXIgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IERvd24gY291bnQgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfFs3OjZdICAgfENOVFRZUEUzICB8RVBXTSBDb3VudGVyIEJlaGF2aW9yIFR5cGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFVwIGNvdW50ZXIgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IERvd24gY291bnQgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfFs5OjhdICAgfENOVFRZUEU0ICB8RVBXTSBDb3VudGVyIEJlaGF2aW9yIFR5cGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFVwIGNvdW50ZXIgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IERvd24gY291bnQgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfFsxMToxMF0gfENOVFRZUEU1ICB8RVBXTSBDb3VudGVyIEJlaGF2aW9yIFR5cGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFVwIGNvdW50ZXIgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IERvd24gY291bnQgdHlwZSAoc3VwcG9ydHMgaW4gY2FwdHVyZSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfFsxNl0gICAgfENOVE1PREUwICB8RVBXTSBDb3VudGVyIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXV0by1yZWxvYWQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT25lLXNob3QgbW9kZS4KKyAgICAgKiB8WzE3XSAgICB8Q05UTU9ERTEgIHxFUFdNIENvdW50ZXIgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvLXJlbG9hZCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPbmUtc2hvdCBtb2RlLgorICAgICAqIHxbMThdICAgIHxDTlRNT0RFMiAgfEVQV00gQ291bnRlciBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8tcmVsb2FkIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9uZS1zaG90IG1vZGUuCisgICAgICogfFsxOV0gICAgfENOVE1PREUzICB8RVBXTSBDb3VudGVyIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXV0by1yZWxvYWQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT25lLXNob3QgbW9kZS4KKyAgICAgKiB8WzIwXSAgICB8Q05UTU9ERTQgIHxFUFdNIENvdW50ZXIgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvLXJlbG9hZCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPbmUtc2hvdCBtb2RlLgorICAgICAqIHxbMjFdICAgIHxDTlRNT0RFNSAgfEVQV00gQ291bnRlciBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8tcmVsb2FkIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9uZS1zaG90IG1vZGUuCisgICAgICogfFsyNF0gICAgfE9VVE1PREUwICB8RVBXTSBPdXRwdXQgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIG91dHB1dCBtb2RlIG9mIGNvcnJlc3BvbmRpbmcgRVBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gaW5kZXBlbmRlbnQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBjb21wbGVtZW50YXJ5IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBvcGVyYXRpbmcgaW4gZ3JvdXAgZnVuY3Rpb24sIHRoZXNlIGJpdHMgbXVzdCBhbGwgc2V0IHRvIHRoZSBzYW1lIG1vZGUuCisgICAgICogfFsyNV0gICAgfE9VVE1PREUyICB8RVBXTSBPdXRwdXQgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIG91dHB1dCBtb2RlIG9mIGNvcnJlc3BvbmRpbmcgRVBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gaW5kZXBlbmRlbnQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBjb21wbGVtZW50YXJ5IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBvcGVyYXRpbmcgaW4gZ3JvdXAgZnVuY3Rpb24sIHRoZXNlIGJpdHMgbXVzdCBhbGwgc2V0IHRvIHRoZSBzYW1lIG1vZGUuCisgICAgICogfFsyNl0gICAgfE9VVE1PREU0ICB8RVBXTSBPdXRwdXQgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIG91dHB1dCBtb2RlIG9mIGNvcnJlc3BvbmRpbmcgRVBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gaW5kZXBlbmRlbnQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBjb21wbGVtZW50YXJ5IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBvcGVyYXRpbmcgaW4gZ3JvdXAgZnVuY3Rpb24sIHRoZXNlIGJpdHMgbXVzdCBhbGwgc2V0IHRvIHRoZSBzYW1lIG1vZGUuCisgICAgICogQHZhciBFUFdNX1Q6OlNZTkMKKyAgICAgKiBPZmZzZXQ6IDB4MDggIEVQV00gU3luY2hyb25pemF0aW9uIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UEhTRU4wICAgIHxTWU5DIFBoYXNlIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gY291bnRlciBkaXNhYmxlIHRvIGxvYWQgUEhTIHZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIGNvdW50ZXIgZW5hYmxlIHRvIGxvYWQgUEhTIHZhbHVlLgorICAgICAqIHxbMV0gICAgIHxQSFNFTjIgICAgfFNZTkMgUGhhc2UgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjb3VudGVyIGRpc2FibGUgdG8gbG9hZCBQSFMgdmFsdWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gY291bnRlciBlbmFibGUgdG8gbG9hZCBQSFMgdmFsdWUuCisgICAgICogfFsyXSAgICAgfFBIU0VONCAgICB8U1lOQyBQaGFzZSBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNvdW50ZXIgZGlzYWJsZSB0byBsb2FkIFBIUyB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBjb3VudGVyIGVuYWJsZSB0byBsb2FkIFBIUyB2YWx1ZS4KKyAgICAgKiB8Wzk6OF0gICB8U0lOU1JDMCAgIHxFUFdNMF9TWU5DX0lOIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFN5bmNocm9uaXplIHNvdXJjZSBmcm9tIFNZTkNfSU4gb3IgU1dTWU5DLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ291bnRlciBlcXVhbCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ291bnRlciBlcXVhbCB0byBFUFdNX0NNUERBVG0sIG0gZGVub3RlcyAxLCAzLCA1LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gU1lOQ19PVVQgd2lsbCBub3QgYmUgZ2VuZXJhdGVkLgorICAgICAqIHxbMTE6MTBdIHxTSU5TUkMyICAgfEVQV00wX1NZTkNfSU4gU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gU3luY2hyb25pemUgc291cmNlIGZyb20gU1lOQ19JTiBvciBTV1NZTkMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDb3VudGVyIGVxdWFsIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDb3VudGVyIGVxdWFsIHRvIEVQV01fQ01QREFUbSwgbSBkZW5vdGVzIDEsIDMsIDUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBTWU5DX09VVCB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQuCisgICAgICogfFsxMzoxMl0gfFNJTlNSQzQgICB8RVBXTTBfU1lOQ19JTiBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBTeW5jaHJvbml6ZSBzb3VyY2UgZnJvbSBTWU5DX0lOIG9yIFNXU1lOQy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENvdW50ZXIgZXF1YWwgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENvdW50ZXIgZXF1YWwgdG8gRVBXTV9DTVBEQVRtLCBtIGRlbm90ZXMgMSwgMywgNS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFNZTkNfT1VUIHdpbGwgbm90IGJlIGdlbmVyYXRlZC4KKyAgICAgKiB8WzE2XSAgICB8U05GTFRFTiAgIHxFUFdNMF9TWU5DX0lOIE5vaXNlIEZpbHRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb2lzZSBmaWx0ZXIgb2YgaW5wdXQgcGluIEVQV00wX1NZTkNfSU4gaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE5vaXNlIGZpbHRlciBvZiBpbnB1dCBwaW4gRVBXTTBfU1lOQ19JTiBpcyBFbmFibGVkLgorICAgICAqIHxbMTk6MTddIHxTRkxUQ1NFTCAgfFNZTkMgRWRnZSBEZXRlY3RvciBGaWx0ZXIgQ2xvY2sgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gRmlsdGVyIGNsb2NrID0gSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gRmlsdGVyIGNsb2NrID0gSENMSy80LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IEZpbHRlciBjbG9jayA9IEhDTEsvOC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzE2LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IEZpbHRlciBjbG9jayA9IEhDTEsvMzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gRmlsdGVyIGNsb2NrID0gSENMSy82NC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzEyOC4KKyAgICAgKiB8WzIyOjIwXSB8U0ZMVENOVCAgIHxTWU5DIEVkZ2UgRGV0ZWN0b3IgRmlsdGVyIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIGJpdHMgY29udHJvbCB0aGUgY291bnRlciBudW1iZXIgb2YgZWRnZSBkZXRlY3Rvci4KKyAgICAgKiB8WzIzXSAgICB8U0lOUElOViAgIHxTWU5DIElucHV0IFBpbiBJbnZlcnNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBzdGF0ZSBvZiBwaW4gRVBXTTBfU1lOQ19JTiBpcyBwYXNzZWQgdG8gdGhlIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0b3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBpbnZlcnNlIHN0YXRlIG9mIHBpbiBFUFdNMF9TWU5DX0lOIGlzIHBhc3NlZCB0byB0aGUgbmVnYXRpdmUgZWRnZSBkZXRlY3Rvci4KKyAgICAgKiB8WzI0XSAgICB8UEhTRElSMCAgIHxFUFdNIFBoYXNlIERpcmVjdGlvbiBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnRyb2wgRVBXTSBjb3VudGVyIGNvdW50IGRlY3JlbWVudCBhZnRlciBzeW5jaHJvbml6aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb250cm9sIEVQV00gY291bnRlciBjb3VudCBpbmNyZW1lbnQgYWZ0ZXIgc3luY2hyb25pemluZy4KKyAgICAgKiB8WzI1XSAgICB8UEhTRElSMiAgIHxFUFdNIFBoYXNlIERpcmVjdGlvbiBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnRyb2wgRVBXTSBjb3VudGVyIGNvdW50IGRlY3JlbWVudCBhZnRlciBzeW5jaHJvbml6aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb250cm9sIEVQV00gY291bnRlciBjb3VudCBpbmNyZW1lbnQgYWZ0ZXIgc3luY2hyb25pemluZy4KKyAgICAgKiB8WzI2XSAgICB8UEhTRElSNCAgIHxFUFdNIFBoYXNlIERpcmVjdGlvbiBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnRyb2wgRVBXTSBjb3VudGVyIGNvdW50IGRlY3JlbWVudCBhZnRlciBzeW5jaHJvbml6aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb250cm9sIEVQV00gY291bnRlciBjb3VudCBpbmNyZW1lbnQgYWZ0ZXIgc3luY2hyb25pemluZy4KKyAgICAgKiBAdmFyIEVQV01fVDo6U1dTWU5DCisgICAgICogT2Zmc2V0OiAweDBDICBFUFdNIFNvZnR3YXJlIENvbnRyb2wgU3luY2hyb25pemF0aW9uIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1dTWU5DMCAgIHxTb2Z0d2FyZSBTWU5DIEZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBTSU5TUkNuIChFUFdNX1NZTkNbMTM6OF0pIGlzIHNlbGVjdGVkIHRvIDAsIFNZTkNfT1VUIHNvdXJjZSBpcyBjb21lIGZyb20gU1lOQ19JTiBvciB0aGlzIGJpdC4KKyAgICAgKiB8WzFdICAgICB8U1dTWU5DMiAgIHxTb2Z0d2FyZSBTWU5DIEZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBTSU5TUkNuIChFUFdNX1NZTkNbMTM6OF0pIGlzIHNlbGVjdGVkIHRvIDAsIFNZTkNfT1VUIHNvdXJjZSBpcyBjb21lIGZyb20gU1lOQ19JTiBvciB0aGlzIGJpdC4KKyAgICAgKiB8WzJdICAgICB8U1dTWU5DNCAgIHxTb2Z0d2FyZSBTWU5DIEZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBTSU5TUkNuIChFUFdNX1NZTkNbMTM6OF0pIGlzIHNlbGVjdGVkIHRvIDAsIFNZTkNfT1VUIHNvdXJjZSBpcyBjb21lIGZyb20gU1lOQ19JTiBvciB0aGlzIGJpdC4KKyAgICAgKiBAdmFyIEVQV01fVDo6Q0xLU1JDCisgICAgICogT2Zmc2V0OiAweDEwICBFUFdNIENsb2NrIFNvdXJjZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyOjBdICAgfEVDTEtTUkMwICB8RVBXTV9DSDAxIEV4dGVybmFsIENsb2NrIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBFUFdNeF9DTEssIHggZGVub3RlcyAwIG9yIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gVElNRVIwIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFRJTUVSMSBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBUSU1FUjIgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gVElNRVIzIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIHxbMTA6OF0gIHxFQ0xLU1JDMiAgfEVQV01fQ0gyMyBFeHRlcm5hbCBDbG9jayBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gRVBXTXhfQ0xLLCB4IGRlbm90ZXMgMCBvciAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IFRJTUVSMCBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBUSU1FUjEgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gVElNRVIyIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFRJTUVSMyBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzE4OjE2XSB8RUNMS1NSQzQgIHxFUFdNX0NINDUgRXh0ZXJuYWwgQ2xvY2sgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IEVQV014X0NMSywgeCBkZW5vdGVzIDAgb3IgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBUSU1FUjAgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gVElNRVIxIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IFRJTUVSMiBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBUSU1FUjMgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogQHZhciBFUFdNX1Q6OkNMS1BTQ1szXQorICAgICAqIE9mZnNldDogMHgxNCAgRVBXTSBDbG9jayBQcmVzY2FsZSBSZWdpc3RlciAwLzEsIDIvMywgNC81CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzExOjBdICB8Q0xLUFNDICAgIHxFUFdNIENvdW50ZXIgQ2xvY2sgUHJlc2NhbGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY2xvY2sgb2YgRVBXTSBjb3VudGVyIGlzIGRlY2lkZWQgYnkgY2xvY2sgcHJlc2NhbGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBFUFdNIHBhaXIgc2hhcmUgb25lIEVQV00gY291bnRlciBjbG9jayBwcmVzY2FsZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY2xvY2sgb2YgRVBXTSBjb3VudGVyIGlzIGRpdmlkZWQgYnkgKENMS1BTQysgMSkKKyAgICAgKiBAdmFyIEVQV01fVDo6Q05URU4KKyAgICAgKiBPZmZzZXQ6IDB4MjAgIEVQV00gQ291bnRlciBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDTlRFTjAgICAgfEVQV00gQ291bnRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENvdW50ZXIgYW5kIGNsb2NrIHByZXNjYWxlciBTdG9wIFJ1bm5pbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ291bnRlciBhbmQgY2xvY2sgcHJlc2NhbGVyIFN0YXJ0IFJ1bm5pbmcuCisgICAgICogfFsxXSAgICAgfENOVEVOMSAgICB8RVBXTSBDb3VudGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ291bnRlciBhbmQgY2xvY2sgcHJlc2NhbGVyIFN0b3AgUnVubmluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDb3VudGVyIGFuZCBjbG9jayBwcmVzY2FsZXIgU3RhcnQgUnVubmluZy4KKyAgICAgKiB8WzJdICAgICB8Q05URU4yICAgIHxFUFdNIENvdW50ZXIgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDb3VudGVyIGFuZCBjbG9jayBwcmVzY2FsZXIgU3RvcCBSdW5uaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENvdW50ZXIgYW5kIGNsb2NrIHByZXNjYWxlciBTdGFydCBSdW5uaW5nLgorICAgICAqIHxbM10gICAgIHxDTlRFTjMgICAgfEVQV00gQ291bnRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENvdW50ZXIgYW5kIGNsb2NrIHByZXNjYWxlciBTdG9wIFJ1bm5pbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ291bnRlciBhbmQgY2xvY2sgcHJlc2NhbGVyIFN0YXJ0IFJ1bm5pbmcuCisgICAgICogfFs0XSAgICAgfENOVEVONCAgICB8RVBXTSBDb3VudGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ291bnRlciBhbmQgY2xvY2sgcHJlc2NhbGVyIFN0b3AgUnVubmluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDb3VudGVyIGFuZCBjbG9jayBwcmVzY2FsZXIgU3RhcnQgUnVubmluZy4KKyAgICAgKiB8WzVdICAgICB8Q05URU41ICAgIHxFUFdNIENvdW50ZXIgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDb3VudGVyIGFuZCBjbG9jayBwcmVzY2FsZXIgU3RvcCBSdW5uaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENvdW50ZXIgYW5kIGNsb2NrIHByZXNjYWxlciBTdGFydCBSdW5uaW5nLgorICAgICAqIEB2YXIgRVBXTV9UOjpDTlRDTFIKKyAgICAgKiBPZmZzZXQ6IDB4MjQgIEVQV00gQ2xlYXIgQ291bnRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENOVENMUjAgICB8Q2xlYXIgRVBXTSBDb3VudGVyIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIDE2LWJpdCBFUFdNIGNvdW50ZXIgdG8gMDAwMEguCisgICAgICogfFsxXSAgICAgfENOVENMUjEgICB8Q2xlYXIgRVBXTSBDb3VudGVyIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIDE2LWJpdCBFUFdNIGNvdW50ZXIgdG8gMDAwMEguCisgICAgICogfFsyXSAgICAgfENOVENMUjIgICB8Q2xlYXIgRVBXTSBDb3VudGVyIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIDE2LWJpdCBFUFdNIGNvdW50ZXIgdG8gMDAwMEguCisgICAgICogfFszXSAgICAgfENOVENMUjMgICB8Q2xlYXIgRVBXTSBDb3VudGVyIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIDE2LWJpdCBFUFdNIGNvdW50ZXIgdG8gMDAwMEguCisgICAgICogfFs0XSAgICAgfENOVENMUjQgICB8Q2xlYXIgRVBXTSBDb3VudGVyIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIDE2LWJpdCBFUFdNIGNvdW50ZXIgdG8gMDAwMEguCisgICAgICogfFs1XSAgICAgfENOVENMUjUgICB8Q2xlYXIgRVBXTSBDb3VudGVyIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIDE2LWJpdCBFUFdNIGNvdW50ZXIgdG8gMDAwMEguCisgICAgICogQHZhciBFUFdNX1Q6OkxPQUQKKyAgICAgKiBPZmZzZXQ6IDB4MjggIEVQV00gTG9hZCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfExPQUQwICAgICB8UmUtbG9hZCBFUFdNIENvbXBhcmF0b3IgUmVnaXN0ZXIgKENNUERBVCkgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzb2Z0d2FyZSB3cml0ZSwgaGFyZHdhcmUgY2xlYXIgd2hlbiBjdXJyZW50IEVQV00gcGVyaW9kIGVuZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0IGxvYWQgd2luZG93IG9mIHdpbmRvdyBsb2FkaW5nIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGxvYWQgd2luZG93IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTG9hZCB3aW5kb3cgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IG9ubHkgdXNlIGluIHdpbmRvdyBsb2FkaW5nIG1vZGUsIFdJTkxERU4wKEVQV01fQ1RMMFsxMzo4XSkgPSAxLgorICAgICAqIHxbMV0gICAgIHxMT0FEMSAgICAgfFJlLWxvYWQgRVBXTSBDb21wYXJhdG9yIFJlZ2lzdGVyIChDTVBEQVQpIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc29mdHdhcmUgd3JpdGUsIGhhcmR3YXJlIGNsZWFyIHdoZW4gY3VycmVudCBFUFdNIHBlcmlvZCBlbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNldCBsb2FkIHdpbmRvdyBvZiB3aW5kb3cgbG9hZGluZyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBsb2FkIHdpbmRvdyBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExvYWQgd2luZG93IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBvbmx5IHVzZSBpbiB3aW5kb3cgbG9hZGluZyBtb2RlLCBXSU5MREVOMShFUFdNX0NUTDBbMTM6OF0pID0gMS4KKyAgICAgKiB8WzJdICAgICB8TE9BRDIgICAgIHxSZS1sb2FkIEVQV00gQ29tcGFyYXRvciBSZWdpc3RlciAoQ01QREFUKSBDb250cm9sIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNvZnR3YXJlIHdyaXRlLCBoYXJkd2FyZSBjbGVhciB3aGVuIGN1cnJlbnQgRVBXTSBwZXJpb2QgZW5kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXQgbG9hZCB3aW5kb3cgb2Ygd2luZG93IGxvYWRpbmcgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gbG9hZCB3aW5kb3cgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMb2FkIHdpbmRvdyBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgb25seSB1c2UgaW4gd2luZG93IGxvYWRpbmcgbW9kZSwgV0lOTERFTjIoRVBXTV9DVEwwWzEzOjhdKSA9IDEuCisgICAgICogfFszXSAgICAgfExPQUQzICAgICB8UmUtbG9hZCBFUFdNIENvbXBhcmF0b3IgUmVnaXN0ZXIgKENNUERBVCkgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzb2Z0d2FyZSB3cml0ZSwgaGFyZHdhcmUgY2xlYXIgd2hlbiBjdXJyZW50IEVQV00gcGVyaW9kIGVuZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0IGxvYWQgd2luZG93IG9mIHdpbmRvdyBsb2FkaW5nIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGxvYWQgd2luZG93IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTG9hZCB3aW5kb3cgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IG9ubHkgdXNlIGluIHdpbmRvdyBsb2FkaW5nIG1vZGUsIFdJTkxERU4zKEVQV01fQ1RMMFsxMzo4XSkgPSAxLgorICAgICAqIHxbNF0gICAgIHxMT0FENCAgICAgfFJlLWxvYWQgRVBXTSBDb21wYXJhdG9yIFJlZ2lzdGVyIChDTVBEQVQpIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc29mdHdhcmUgd3JpdGUsIGhhcmR3YXJlIGNsZWFyIHdoZW4gY3VycmVudCBFUFdNIHBlcmlvZCBlbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNldCBsb2FkIHdpbmRvdyBvZiB3aW5kb3cgbG9hZGluZyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBsb2FkIHdpbmRvdyBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExvYWQgd2luZG93IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBvbmx5IHVzZSBpbiB3aW5kb3cgbG9hZGluZyBtb2RlLCBXSU5MREVONChFUFdNX0NUTDBbMTM6OF0pID0gMS4KKyAgICAgKiB8WzVdICAgICB8TE9BRDUgICAgIHxSZS1sb2FkIEVQV00gQ29tcGFyYXRvciBSZWdpc3RlciAoQ01QREFUKSBDb250cm9sIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNvZnR3YXJlIHdyaXRlLCBoYXJkd2FyZSBjbGVhciB3aGVuIGN1cnJlbnQgRVBXTSBwZXJpb2QgZW5kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXQgbG9hZCB3aW5kb3cgb2Ygd2luZG93IGxvYWRpbmcgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gbG9hZCB3aW5kb3cgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMb2FkIHdpbmRvdyBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgb25seSB1c2UgaW4gd2luZG93IGxvYWRpbmcgbW9kZSwgV0lOTERFTm4oRVBXTV9DVEwwWzEzOjhdKSA9IDEuCisgICAgICogQHZhciBFUFdNX1Q6OlBFUklPRFs2XQorICAgICAqIE9mZnNldDogMHgzMCAgRVBXTSBQZXJpb2QgUmVnaXN0ZXIgMH41CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UEVSSU9EICAgIHxFUFdNIFBlcmlvZCBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVwLUNvdW50IG1vZGU6IEluIHRoaXMgbW9kZSwgRVBXTSBjb3VudGVyIGNvdW50cyBmcm9tIDAgdG8gUEVSSU9ELCBhbmQgcmVzdGFydHMgZnJvbSAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERvd24tQ291bnQgbW9kZTogSW4gdGhpcyBtb2RlLCBFUFdNIGNvdW50ZXIgY291bnRzIGZyb20gUEVSSU9EIHRvIDAsIGFuZCByZXN0YXJ0cyBmcm9tIFBFUklPRC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIHBlcmlvZCB0aW1lID0gKFBFUklPRCsxKSAqIEVQV01fQ0xLIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVcC1Eb3duLUNvdW50IG1vZGU6IEluIHRoaXMgbW9kZSwgRVBXTSBjb3VudGVyIGNvdW50cyBmcm9tIDAgdG8gUEVSSU9ELCB0aGVuIGRlY3JlbWVudHMgdG8gMCBhbmQgcmVwZWF0cyBhZ2Fpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIHBlcmlvZCB0aW1lID0gMiAqIFBFUklPRCAqIEVQV01fQ0xLIHBlcmlvZC4KKyAgICAgKiBAdmFyIEVQV01fVDo6Q01QREFUWzZdCisgICAgICogT2Zmc2V0OiAweDUwICBFUFdNIENvbXBhcmF0b3IgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfENNUCAgICAgICB8RVBXTSBDb21wYXJhdG9yIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QIHVzZSB0byBjb21wYXJlIHdpdGggQ05UUiB0byBnZW5lcmF0ZSBFUFdNIHdhdmVmb3JtLCBpbnRlcnJ1cHQgYW5kIHRyaWdnZXIgRUFEQy9EQUMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gaW5kZXBlbmRlbnQgbW9kZSwgQ01QREFUMH41IGRlbm90ZSBhcyA2IGluZGVwZW5kZW50IEVQV01fQ0gwfjUgY29tcGFyZWQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBEQVQwLCAyLCA0IGRlbm90ZSBhcyBmaXJzdCBjb21wYXJlZCBwb2ludCwgYW5kIENNUERBVDEsIDMsIDUgZGVub3RlIGFzIHNlY29uZCBjb21wYXJlZCBwb2ludCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgMyBjb21wbGVtZW50YXJ5IHBhaXJzIEVQV01fQ0gwIGFuZCBFUFdNX0NIMSwgRVBXTV9DSDIgYW5kIEVQV01fQ0gzLCBFUFdNX0NINCBhbmQgRVBXTV9DSDUuCisgICAgICogQHZhciBFUFdNX1Q6OkRUQ1RMWzNdCisgICAgICogT2Zmc2V0OiAweDcwICBFUFdNIERlYWQtVGltZSBDb250cm9sIFJlZ2lzdGVyIDAvMSwyLzMsNC81CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzExOjBdICB8RFRDTlQgICAgIHxEZWFkLXRpbWUgQ291bnRlciAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGVhZC10aW1lIGNhbiBiZSBjYWxjdWxhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBmb3JtdWxhOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERlYWQtdGltZSA9IChEVENOVFsxMTowXSsxKSAqIEVQV01fQ0xLIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxNl0gICAgfERURU4gICAgICB8RW5hYmxlIERlYWQtdGltZSBJbnNlcnRpb24gZm9yIEVQV00gUGFpciAoRVBXTV9DSDAsIEVQV01fQ0gxKSAoRVBXTV9DSDIsIEVQV01fQ0gzKSAoRVBXTV9DSDQsIEVQV01fQ0g1KSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEZWFkLXRpbWUgaW5zZXJ0aW9uIGlzIG9ubHkgYWN0aXZlIHdoZW4gdGhpcyBwYWlyIG9mIGNvbXBsZW1lbnRhcnkgRVBXTSBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgZGVhZC0gdGltZSBpbnNlcnRpb24gaXMgaW5hY3RpdmUsIHRoZSBvdXRwdXRzIG9mIHBpbiBwYWlyIGFyZSBjb21wbGVtZW50YXJ5IHdpdGhvdXQgYW55IGRlbGF5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEZWFkLXRpbWUgaW5zZXJ0aW9uIERpc2FibGVkIG9uIHRoZSBwaW4gcGFpci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGVhZC10aW1lIGluc2VydGlvbiBFbmFibGVkIG9uIHRoZSBwaW4gcGFpci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzI0XSAgICB8RFRDS1NFTCAgIHxEZWFkLXRpbWUgQ2xvY2sgU2VsZWN0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEZWFkLXRpbWUgY2xvY2sgc291cmNlIGZyb20gRVBXTV9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERlYWQtdGltZSBjbG9jayBzb3VyY2UgZnJvbSBwcmVzY2FsZXIgb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1JFR1dSUFJPVCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEVQV01fVDo6UEhTWzNdCisgICAgICogT2Zmc2V0OiAweDgwICBFUFdNIENvdW50ZXIgUGhhc2UgUmVnaXN0ZXIgMC8xLDIvMyw0LzUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxQSFMgICAgICAgfEVQV00gU3luY2hyb25vdXMgU3RhcnQgUGhhc2UgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBIUyBkZXRlcm1pbmVzIHRoZSBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IHBoYXNlIHZhbHVlLiBUaGVzZSBiaXRzIG9ubHkgdXNlIGluIHN5bmNocm9ub3VzIGZ1bmN0aW9uLgorICAgICAqIEB2YXIgRVBXTV9UOjpDTlRbNl0KKyAgICAgKiBPZmZzZXQ6IDB4OTAgIEVQV00gQ291bnRlciBSZWdpc3RlciAwfjUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxDTlQgICAgICAgfEVQV00gRGF0YSBSZWdpc3RlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIG1vbml0b3IgQ05UUiB0byBrbm93IHRoZSBjdXJyZW50IHZhbHVlIGluIDE2LWJpdCBwZXJpb2QgY291bnRlci4KKyAgICAgKiB8WzE2XSAgICB8RElSRiAgICAgIHxFUFdNIERpcmVjdGlvbiBJbmRpY2F0b3IgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb3VudGVyIGlzIERvd24gY291bnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvdW50ZXIgaXMgVVAgY291bnQuCisgICAgICogQHZhciBFUFdNX1Q6OldHQ1RMMAorICAgICAqIE9mZnNldDogMHhCMCAgRVBXTSBHZW5lcmF0aW9uIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxaUENUTDAgICAgfEVQV00gWmVybyBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSB6ZXJvIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBjb3VudCB0byB6ZXJvLgorICAgICAqIHxbMzoyXSAgIHxaUENUTDEgICAgfEVQV00gWmVybyBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSB6ZXJvIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBjb3VudCB0byB6ZXJvLgorICAgICAqIHxbNTo0XSAgIHxaUENUTDIgICAgfEVQV00gWmVybyBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSB6ZXJvIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBjb3VudCB0byB6ZXJvLgorICAgICAqIHxbNzo2XSAgIHxaUENUTDMgICAgfEVQV00gWmVybyBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSB6ZXJvIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBjb3VudCB0byB6ZXJvLgorICAgICAqIHxbOTo4XSAgIHxaUENUTDQgICAgfEVQV00gWmVybyBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSB6ZXJvIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBjb3VudCB0byB6ZXJvLgorICAgICAqIHxbMTE6MTBdIHxaUENUTDUgICAgfEVQV00gWmVybyBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSB6ZXJvIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBjb3VudCB0byB6ZXJvLgorICAgICAqIHxbMTc6MTZdIHxQUkRQQ1RMMCAgfEVQV00gUGVyaW9kIChDZW50ZXIpIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGNvdW50IHRvIChQRVJJT0QwKzEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNlbnRlciBwb2ludCBjb250cm9sIHdoZW4gRVBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiB1cC1kb3duIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8WzE5OjE4XSB8UFJEUENUTDEgIHxFUFdNIFBlcmlvZCAoQ2VudGVyKSBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBjb3VudCB0byAoUEVSSU9EMSsxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjZW50ZXIgcG9pbnQgY29udHJvbCB3aGVuIEVQV00gY291bnRlciBvcGVyYXRpbmcgaW4gdXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfFsyMToyMF0gfFBSRFBDVEwyICB8RVBXTSBQZXJpb2QgKENlbnRlcikgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBFUFdNIGNvdW50ZXIgY291bnQgdG8gKFBFUklPRDIrMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2VudGVyIHBvaW50IGNvbnRyb2wgd2hlbiBFUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIHVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHxbMjM6MjJdIHxQUkRQQ1RMMyAgfEVQV00gUGVyaW9kIChDZW50ZXIpIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGNvdW50IHRvIChQRVJJT0QzKzEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNlbnRlciBwb2ludCBjb250cm9sIHdoZW4gRVBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiB1cC1kb3duIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8WzI1OjI0XSB8UFJEUENUTDQgIHxFUFdNIFBlcmlvZCAoQ2VudGVyKSBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBjb3VudCB0byAoUEVSSU9ENCsxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjZW50ZXIgcG9pbnQgY29udHJvbCB3aGVuIEVQV00gY291bnRlciBvcGVyYXRpbmcgaW4gdXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfFsyNzoyNl0gfFBSRFBDVEw1ICB8RVBXTSBQZXJpb2QgKENlbnRlcikgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBFUFdNIGNvdW50ZXIgY291bnQgdG8gKFBFUklPRDUrMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2VudGVyIHBvaW50IGNvbnRyb2wgd2hlbiBFUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIHVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIEB2YXIgRVBXTV9UOjpXR0NUTDEKKyAgICAgKiBPZmZzZXQ6IDB4QjQgIEVQV00gR2VuZXJhdGlvbiBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8Q01QVUNUTDAgIHxFUFdNIENvbXBhcmUgVXAgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBFUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gQ01QREFULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QVUNUTDEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QVUNUTCBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMzoyXSAgIHxDTVBVQ1RMMSAgfEVQV00gQ29tcGFyZSBVcCBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBVQ1RMMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBVQ1RMIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFs1OjRdICAgfENNUFVDVEwyICB8RVBXTSBDb21wYXJlIFVwIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUFVDVEwxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUFVDVEwgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8Wzc6Nl0gICB8Q01QVUNUTDMgIHxFUFdNIENvbXBhcmUgVXAgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBFUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gQ01QREFULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QVUNUTDEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QVUNUTCBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbOTo4XSAgIHxDTVBVQ1RMNCAgfEVQV00gQ29tcGFyZSBVcCBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBVQ1RMMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBVQ1RMIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsxMToxMF0gfENNUFVDVEw1ICB8RVBXTSBDb21wYXJlIFVwIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUFVDVEwxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUFVDVEwgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzE3OjE2XSB8Q01QRENUTDAgIHxFUFdNIENvbXBhcmUgRG93biBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERDVEwxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERDVEwgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzE5OjE4XSB8Q01QRENUTDEgIHxFUFdNIENvbXBhcmUgRG93biBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERDVEwxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERDVEwgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzIxOjIwXSB8Q01QRENUTDIgIHxFUFdNIENvbXBhcmUgRG93biBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERDVEwxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERDVEwgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzIzOjIyXSB8Q01QRENUTDMgIHxFUFdNIENvbXBhcmUgRG93biBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERDVEwxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERDVEwgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI1OjI0XSB8Q01QRENUTDQgIHxFUFdNIENvbXBhcmUgRG93biBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERDVEwxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERDVEwgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI3OjI2XSB8Q01QRENUTDUgIHxFUFdNIENvbXBhcmUgRG93biBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERDVEwxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERDVEwgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiBAdmFyIEVQV01fVDo6TVNLRU4KKyAgICAgKiBPZmZzZXQ6IDB4QjggIEVQV00gTWFzayBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxNU0tFTjAgICAgfEVQV00gTWFzayBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFUFdNIG91dHB1dCBzaWduYWwgd2lsbCBiZSBtYXNrZWQgd2hlbiB0aGlzIGJpdCBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3JyZXNwb25kaW5nIEVQV00gY2hhbm5lbCAwIHdpbGwgb3V0cHV0IE1TS0RBVDAgKEVQV01fTVNLWzU6MF0pIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gb3V0cHV0IHNpZ25hbCBpcyBub24tbWFza2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIG91dHB1dCBzaWduYWwgaXMgbWFza2VkIGFuZCBvdXRwdXQgTVNLREFUMCBkYXRhLgorICAgICAqIHxbMV0gICAgIHxNU0tFTjEgICAgfEVQV00gTWFzayBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFUFdNIG91dHB1dCBzaWduYWwgd2lsbCBiZSBtYXNrZWQgd2hlbiB0aGlzIGJpdCBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3JyZXNwb25kaW5nIEVQV00gY2hhbm5lbCAxIHdpbGwgb3V0cHV0IE1TS0RBVDEgKEVQV01fTVNLWzU6MF0pIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gb3V0cHV0IHNpZ25hbCBpcyBub24tbWFza2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIG91dHB1dCBzaWduYWwgaXMgbWFza2VkIGFuZCBvdXRwdXQgTVNLREFUMSBkYXRhLgorICAgICAqIHxbMl0gICAgIHxNU0tFTjIgICAgfEVQV00gTWFzayBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFUFdNIG91dHB1dCBzaWduYWwgd2lsbCBiZSBtYXNrZWQgd2hlbiB0aGlzIGJpdCBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3JyZXNwb25kaW5nIEVQV00gY2hhbm5lbCAyIHdpbGwgb3V0cHV0IE1TS0RBVDIgKEVQV01fTVNLWzU6MF0pIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gb3V0cHV0IHNpZ25hbCBpcyBub24tbWFza2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIG91dHB1dCBzaWduYWwgaXMgbWFza2VkIGFuZCBvdXRwdXQgTVNLREFUMiBkYXRhLgorICAgICAqIHxbM10gICAgIHxNU0tFTjMgICAgfEVQV00gTWFzayBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFUFdNIG91dHB1dCBzaWduYWwgd2lsbCBiZSBtYXNrZWQgd2hlbiB0aGlzIGJpdCBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3JyZXNwb25kaW5nIEVQV00gY2hhbm5lbCAzIHdpbGwgb3V0cHV0IE1TS0RBVDMgKEVQV01fTVNLWzU6MF0pIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gb3V0cHV0IHNpZ25hbCBpcyBub24tbWFza2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIG91dHB1dCBzaWduYWwgaXMgbWFza2VkIGFuZCBvdXRwdXQgTVNLREFUMyBkYXRhLgorICAgICAqIHxbNF0gICAgIHxNU0tFTjQgICAgfEVQV00gTWFzayBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFUFdNIG91dHB1dCBzaWduYWwgd2lsbCBiZSBtYXNrZWQgd2hlbiB0aGlzIGJpdCBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3JyZXNwb25kaW5nIEVQV00gY2hhbm5lbCA0IHdpbGwgb3V0cHV0IE1TS0RBVDQgKEVQV01fTVNLWzU6MF0pIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gb3V0cHV0IHNpZ25hbCBpcyBub24tbWFza2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIG91dHB1dCBzaWduYWwgaXMgbWFza2VkIGFuZCBvdXRwdXQgTVNLREFUNCBkYXRhLgorICAgICAqIHxbNV0gICAgIHxNU0tFTjUgICAgfEVQV00gTWFzayBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFUFdNIG91dHB1dCBzaWduYWwgd2lsbCBiZSBtYXNrZWQgd2hlbiB0aGlzIGJpdCBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3JyZXNwb25kaW5nIEVQV00gY2hhbm5lbCA1IHdpbGwgb3V0cHV0IE1TS0RBVDUgKEVQV01fTVNLWzU6MF0pIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gb3V0cHV0IHNpZ25hbCBpcyBub24tbWFza2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIG91dHB1dCBzaWduYWwgaXMgbWFza2VkIGFuZCBvdXRwdXQgTVNLREFUNSBkYXRhLgorICAgICAqIEB2YXIgRVBXTV9UOjpNU0sKKyAgICAgKiBPZmZzZXQ6IDB4QkMgIEVQV00gTWFzayBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8TVNLREFUMCAgIHxFUFdNIE1hc2sgRGF0YSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGRhdGEgYml0IGNvbnRyb2wgdGhlIHN0YXRlIG9mIEVQV01fQ0gwIG91dHB1dCBwaW4sIGlmIGNvcnJlc3BvbmRpbmcgbWFzayBmdW5jdGlvbiBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdXRwdXQgbG9naWMgbG93IHRvIEVQV01fQ0gwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXRwdXQgbG9naWMgaGlnaCB0byBFUFdNX0NIMC4KKyAgICAgKiB8WzFdICAgICB8TVNLREFUMSAgIHxFUFdNIE1hc2sgRGF0YSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGRhdGEgYml0IGNvbnRyb2wgdGhlIHN0YXRlIG9mIEVQV01fQ0gxIG91dHB1dCBwaW4sIGlmIGNvcnJlc3BvbmRpbmcgbWFzayBmdW5jdGlvbiBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdXRwdXQgbG9naWMgbG93IHRvIEVQV01fQ0gxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXRwdXQgbG9naWMgaGlnaCB0byBFUFdNX0NIMS4KKyAgICAgKiB8WzJdICAgICB8TVNLREFUMiAgIHxFUFdNIE1hc2sgRGF0YSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGRhdGEgYml0IGNvbnRyb2wgdGhlIHN0YXRlIG9mIEVQV01fQ0gyIG91dHB1dCBwaW4sIGlmIGNvcnJlc3BvbmRpbmcgbWFzayBmdW5jdGlvbiBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdXRwdXQgbG9naWMgbG93IHRvIEVQV01fQ0gyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXRwdXQgbG9naWMgaGlnaCB0byBFUFdNX0NIMi4KKyAgICAgKiB8WzNdICAgICB8TVNLREFUMyAgIHxFUFdNIE1hc2sgRGF0YSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGRhdGEgYml0IGNvbnRyb2wgdGhlIHN0YXRlIG9mIEVQV01fQ0gzIG91dHB1dCBwaW4sIGlmIGNvcnJlc3BvbmRpbmcgbWFzayBmdW5jdGlvbiBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdXRwdXQgbG9naWMgbG93IHRvIEVQV01fQ0gzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXRwdXQgbG9naWMgaGlnaCB0byBFUFdNX0NIMy4KKyAgICAgKiB8WzRdICAgICB8TVNLREFUNCAgIHxFUFdNIE1hc2sgRGF0YSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGRhdGEgYml0IGNvbnRyb2wgdGhlIHN0YXRlIG9mIEVQV01fQ0g0IG91dHB1dCBwaW4sIGlmIGNvcnJlc3BvbmRpbmcgbWFzayBmdW5jdGlvbiBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdXRwdXQgbG9naWMgbG93IHRvIEVQV01fQ0g0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXRwdXQgbG9naWMgaGlnaCB0byBFUFdNX0NINC4KKyAgICAgKiB8WzVdICAgICB8TVNLREFUNSAgIHxFUFdNIE1hc2sgRGF0YSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGRhdGEgYml0IGNvbnRyb2wgdGhlIHN0YXRlIG9mIEVQV01fQ0g1IG91dHB1dCBwaW4sIGlmIGNvcnJlc3BvbmRpbmcgbWFzayBmdW5jdGlvbiBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdXRwdXQgbG9naWMgbG93IHRvIEVQV01fQ0g1LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXRwdXQgbG9naWMgaGlnaCB0byBFUFdNX0NINS4KKyAgICAgKiBAdmFyIEVQV01fVDo6Qk5GCisgICAgICogT2Zmc2V0OiAweEMwICBFUFdNIEJyYWtlIE5vaXNlIEZpbHRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJSSzBORkVOICB8RVBXTSBCcmFrZSAwIE5vaXNlIEZpbHRlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vaXNlIGZpbHRlciBvZiBFUFdNIEJyYWtlIDAgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE5vaXNlIGZpbHRlciBvZiBFUFdNIEJyYWtlIDAgRW5hYmxlZC4KKyAgICAgKiB8WzM6MV0gICB8QlJLME5GU0VMIHxCcmFrZSAwIEVkZ2UgRGV0ZWN0b3IgRmlsdGVyIENsb2NrIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IEZpbHRlciBjbG9jayA9IEhDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gRmlsdGVyIGNsb2NrID0gSENMSy8yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IEZpbHRlciBjbG9jayA9IEhDTEsvNC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gRmlsdGVyIGNsb2NrID0gSENMSy8xNi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzMyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IEZpbHRlciBjbG9jayA9IEhDTEsvNjQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gRmlsdGVyIGNsb2NrID0gSENMSy8xMjguCisgICAgICogfFs2OjRdICAgfEJSSzBGQ05UICB8QnJha2UgMCBFZGdlIERldGVjdG9yIEZpbHRlciBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBiaXRzIGNvbnRyb2wgdGhlIEJyYWtlMCBmaWx0ZXIgY291bnRlciB0byBjb3VudCBmcm9tIDAgdG8gQlJLMEZDTlQuCisgICAgICogfFs3XSAgICAgfEJSSzBQSU5WICB8QnJha2UgMCBQaW4gSW52ZXJzZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgc3RhdGUgb2YgcGluIEVQV014X0JSQUtFMCBpcyBwYXNzZWQgdG8gdGhlIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0b3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBpbnZlcnNlZCBzdGF0ZSBvZiBwaW4gRVBXTXhfQlJBS0UwIGlzIHBhc3NlZCB0byB0aGUgbmVnYXRpdmUgZWRnZSBkZXRlY3Rvci4KKyAgICAgKiB8WzhdICAgICB8QlJLMU5GRU4gIHxFUFdNIEJyYWtlIDEgTm9pc2UgRmlsdGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm9pc2UgZmlsdGVyIG9mIEVQV00gQnJha2UgMSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTm9pc2UgZmlsdGVyIG9mIEVQV00gQnJha2UgMSBFbmFibGVkLgorICAgICAqIHxbMTE6OV0gIHxCUksxTkZTRUwgfEJyYWtlIDEgRWRnZSBEZXRlY3RvciBGaWx0ZXIgQ2xvY2sgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gRmlsdGVyIGNsb2NrID0gSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gRmlsdGVyIGNsb2NrID0gSENMSy80LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IEZpbHRlciBjbG9jayA9IEhDTEsvOC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzE2LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IEZpbHRlciBjbG9jayA9IEhDTEsvMzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gRmlsdGVyIGNsb2NrID0gSENMSy82NC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzEyOC4KKyAgICAgKiB8WzE0OjEyXSB8QlJLMUZDTlQgIHxCcmFrZSAxIEVkZ2UgRGV0ZWN0b3IgRmlsdGVyIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIGJpdHMgY29udHJvbCB0aGUgQnJha2UxIGZpbHRlciBjb3VudGVyIHRvIGNvdW50IGZyb20gMCB0byBCUksxRkNOVC4KKyAgICAgKiB8WzE1XSAgICB8QlJLMVBJTlYgIHxCcmFrZSAxIFBpbiBJbnZlcnNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBzdGF0ZSBvZiBwaW4gRVBXTXhfQlJBS0UxIGlzIHBhc3NlZCB0byB0aGUgbmVnYXRpdmUgZWRnZSBkZXRlY3Rvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGludmVyc2VkIHN0YXRlIG9mIHBpbiBFUFdNeF9CUkFLRTEgaXMgcGFzc2VkIHRvIHRoZSBuZWdhdGl2ZSBlZGdlIGRldGVjdG9yLgorICAgICAqIHxbMTZdICAgIHxCSzBTUkMgICAgfEJyYWtlIDAgUGluIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgRVBXTTAgc2V0dGluZzoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnJha2UgMCBwaW4gc291cmNlIGNvbWUgZnJvbSBFUFdNMF9CUkFLRTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJyYWtlIDAgcGluIHNvdXJjZSBjb21lIGZyb20gRVBXTTFfQlJBS0UwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBFUFdNMSBzZXR0aW5nOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCcmFrZSAwIHBpbiBzb3VyY2UgY29tZSBmcm9tIEVQV00xX0JSQUtFMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJha2UgMCBwaW4gc291cmNlIGNvbWUgZnJvbSBFUFdNMF9CUkFLRTAuCisgICAgICogfFsyNF0gICAgfEJLMVNSQyAgICB8QnJha2UgMSBQaW4gU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBFUFdNMCBzZXR0aW5nOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCcmFrZSAxIHBpbiBzb3VyY2UgY29tZSBmcm9tIEVQV00wX0JSQUtFMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJha2UgMSBwaW4gc291cmNlIGNvbWUgZnJvbSBFUFdNMV9CUkFLRTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEVQV00xIHNldHRpbmc6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyYWtlIDEgcGluIHNvdXJjZSBjb21lIGZyb20gRVBXTTFfQlJBS0UxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcmFrZSAxIHBpbiBzb3VyY2UgY29tZSBmcm9tIEVQV00wX0JSQUtFMS4KKyAgICAgKiBAdmFyIEVQV01fVDo6RkFJTEJSSworICAgICAqIE9mZnNldDogMHhDNCAgRVBXTSBTeXN0ZW0gRmFpbCBCcmFrZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q1NTQlJLRU4gIHxDbG9jayBTZWN1cml0eSBTeXN0ZW0gRGV0ZWN0aW9uIFRyaWdnZXIgRVBXTSBCcmFrZSBGdW5jdGlvbiAwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnJha2UgRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IENTUyBkZXRlY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJyYWtlIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSBDU1MgZGV0ZWN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfEJPREJSS0VOICB8QnJvd24tb3V0IERldGVjdGlvbiBUcmlnZ2VyIEVQV00gQnJha2UgRnVuY3Rpb24gMCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyYWtlIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSBCT0QgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJyYWtlIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSBCT0QgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8UkFNQlJLRU4gIHxTUkFNIFBhcml0eSBFcnJvciBEZXRlY3Rpb24gVHJpZ2dlciBFUFdNIEJyYWtlIEZ1bmN0aW9uIDAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCcmFrZSBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgU1JBTSBwYXJpdHkgZXJyb3IgZGV0ZWN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcmFrZSBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgU1JBTSBwYXJpdHkgZXJyb3IgZGV0ZWN0aW9uIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfENPUkJSS0VOICB8Q29yZSBMb2NrdXAgRGV0ZWN0aW9uIFRyaWdnZXIgRVBXTSBCcmFrZSBGdW5jdGlvbiAwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnJha2UgRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IENvcmUgbG9ja3VwIGRldGVjdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJha2UgRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IENvcmUgbG9ja3VwIGRldGVjdGlvbiBFbmFibGVkLgorICAgICAqIEB2YXIgRVBXTV9UOjpCUktDVExbM10KKyAgICAgKiBPZmZzZXQ6IDB4QzggIEVQV00gQnJha2UgRWRnZSBEZXRlY3QgQ29udHJvbCBSZWdpc3RlciAwLzEsMi8zLDQvNQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENQTzBFQkVOICB8RW5hYmxlIEFDTVAwX08gRGlnaXRhbCBPdXRwdXQgQXMgRWRnZS1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBQ01QMF9PIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUNNUDBfTyBhcyBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxXSAgICAgfENQTzFFQkVOICB8RW5hYmxlIEFDTVAxX08gRGlnaXRhbCBPdXRwdXQgQXMgRWRnZS1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBQ01QMV9PIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUNNUDFfTyBhcyBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs0XSAgICAgfEJSS1AwRUVOICB8RW5hYmxlIEVQV014X0JSQUtFMCBQaW4gQXMgRWRnZS1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNeF9CUkFLRTAgcGluIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTXhfQlJBS0UwIHBpbiBhcyBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs1XSAgICAgfEJSS1AxRUVOICB8RW5hYmxlIEVQV014X0JSQUtFMSBQaW4gQXMgRWRnZS1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNeF9CUkFLRTEgcGluIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTXhfQlJBS0UxIHBpbiBhcyBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs3XSAgICAgfFNZU0VCRU4gICB8RW5hYmxlIFN5c3RlbSBGYWlsIEFzIEVkZ2UtZGV0ZWN0IEJyYWtlIFNvdXJjZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3lzdGVtIEZhaWwgY29uZGl0aW9uIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3lzdGVtIEZhaWwgY29uZGl0aW9uIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzhdICAgICB8Q1BPMExCRU4gIHxFbmFibGUgQUNNUDBfTyBEaWdpdGFsIE91dHB1dCBBcyBMZXZlbC1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBQ01QMF9PIGFzIGxldmVsLWRldGVjdCBicmFrZSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFDTVAwX08gYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzldICAgICB8Q1BPMUxCRU4gIHxFbmFibGUgQUNNUDFfTyBEaWdpdGFsIE91dHB1dCBBcyBMZXZlbC1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBQ01QMV9PIGFzIGxldmVsLWRldGVjdCBicmFrZSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFDTVAxX08gYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEyXSAgICB8QlJLUDBMRU4gIHxFbmFibGUgQktQMCBQaW4gQXMgTGV2ZWwtZGV0ZWN0IEJyYWtlIFNvdXJjZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTXhfQlJBS0UwIHBpbiBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNeF9CUkFLRTAgcGluIGFzIGxldmVsLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxM10gICAgfEJSS1AxTEVOICB8RW5hYmxlIEJLUDEgUGluIEFzIExldmVsLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV014X0JSQUtFMSBwaW4gYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTXhfQlJBS0UxIHBpbiBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTVdICAgIHxTWVNMQkVOICAgfEVuYWJsZSBTeXN0ZW0gRmFpbCBBcyBMZXZlbC1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTeXN0ZW0gRmFpbCBjb25kaXRpb24gYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3lzdGVtIEZhaWwgY29uZGl0aW9uIGFzIGxldmVsLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxNzoxNl0gfEJSS0FFVkVOICB8RVBXTSBCcmFrZSBBY3Rpb24gU2VsZWN0IGZvciBFdmVuIENoYW5uZWwgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBFUFdNeCBicmFrZSBldmVudCB3aWxsIG5vdCBhZmZlY3QgZXZlbiBjaGFubmVscyBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIGV2ZW4gY2hhbm5lbCBvdXRwdXQgdHJpLXN0YXRlIHdoZW4gRVBXTXggYnJha2UgZXZlbnQgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIGV2ZW4gY2hhbm5lbCBvdXRwdXQgbG93IGxldmVsIHdoZW4gRVBXTXggYnJha2UgZXZlbnQgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIGV2ZW4gY2hhbm5lbCBvdXRwdXQgaGlnaCBsZXZlbCB3aGVuIEVQV014IGJyYWtlIGV2ZW50IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE5OjE4XSB8QlJLQU9ERCAgIHxFUFdNIEJyYWtlIEFjdGlvbiBTZWxlY3QgZm9yIE9kZCBDaGFubmVsIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRVBXTXggYnJha2UgZXZlbnQgd2lsbCBub3QgYWZmZWN0IG9kZCBjaGFubmVscyBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIG9kZCBjaGFubmVsIG91dHB1dCB0cmktc3RhdGUgd2hlbiBFUFdNeCBicmFrZSBldmVudCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gb2RkIGNoYW5uZWwgb3V0cHV0IGxvdyBsZXZlbCB3aGVuIEVQV014IGJyYWtlIGV2ZW50IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBvZGQgY2hhbm5lbCBvdXRwdXQgaGlnaCBsZXZlbCB3aGVuIEVQV014IGJyYWtlIGV2ZW50IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzIwXSAgICB8RUFEQ0VCRU4gIHxFbmFibGUgRUFEQyBSZXN1bHQgTW9uaXRvciAoRUFEQ1JNKSBBcyBFZGdlLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVBRENSTSBhcyBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVBRENSTSBhcyBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsyOF0gICAgfEVBRENMQkVOICB8RW5hYmxlIEVBREMgUmVzdWx0IE1vbml0b3IgKEVBRENSTSkgQXMgTGV2ZWwtZGV0ZWN0IEJyYWtlIFNvdXJjZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUFEQ1JNIGFzIGxldmVsLWRldGVjdCBicmFrZSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVBRENSTSBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRVBXTV9UOjpQT0xDVEwKKyAgICAgKiBPZmZzZXQ6IDB4RDQgIEVQV00gUGluIFBvbGFyIEludmVyc2UgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQSU5WMCAgICAgfEVQV01fQ0gwIFBJTiBQb2xhciBJbnZlcnNlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgY29udHJvbHMgcG9sYXJpdHkgc3RhdGUgb2YgRVBXTV9DSDAgb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0NIMCBvdXRwdXQgcG9sYXIgaW52ZXJzZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTV9DSDAgb3V0cHV0IHBvbGFyIGludmVyc2UgRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8UElOVjEgICAgIHxFUFdNX0NIMSBQSU4gUG9sYXIgSW52ZXJzZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIGNvbnRyb2xzIHBvbGFyaXR5IHN0YXRlIG9mIEVQV01fQ0gxIG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTV9DSDEgb3V0cHV0IHBvbGFyIGludmVyc2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV01fQ0gxIG91dHB1dCBwb2xhciBpbnZlcnNlIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFBJTlYyICAgICB8RVBXTV9DSDIgUElOIFBvbGFyIEludmVyc2UgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBjb250cm9scyBwb2xhcml0eSBzdGF0ZSBvZiBFUFdNX0NIMiBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV01fQ0gyIG91dHB1dCBwb2xhciBpbnZlcnNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX0NIMiBvdXRwdXQgcG9sYXIgaW52ZXJzZSBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxQSU5WMyAgICAgfEVQV01fQ0gzIFBJTiBQb2xhciBJbnZlcnNlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgY29udHJvbHMgcG9sYXJpdHkgc3RhdGUgb2YgRVBXTV9DSDMgb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0NIMyBvdXRwdXQgcG9sYXIgaW52ZXJzZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTV9DSDMgb3V0cHV0IHBvbGFyIGludmVyc2UgRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8UElOVjQgICAgIHxFUFdNX0NINCBQSU4gUG9sYXIgSW52ZXJzZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIGNvbnRyb2xzIHBvbGFyaXR5IHN0YXRlIG9mIEVQV01fQ0g0IG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTV9DSDQgb3V0cHV0IHBvbGFyIGludmVyc2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV01fQ0g0IG91dHB1dCBwb2xhciBpbnZlcnNlIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfFBJTlY1ICAgICB8RVBXTV9DSDUgUElOIFBvbGFyIEludmVyc2UgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBjb250cm9scyBwb2xhcml0eSBzdGF0ZSBvZiBFUFdNX0NINSBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV01fQ0g1IG91dHB1dCBwb2xhciBpbnZlcnNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX0NINSBvdXRwdXQgcG9sYXIgaW52ZXJzZSBFbmFibGVkLgorICAgICAqIEB2YXIgRVBXTV9UOjpQT0VOCisgICAgICogT2Zmc2V0OiAweEQ4ICBFUFdNIE91dHB1dCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQT0VOMCAgICAgfEVQV01fQ0gwIFBpbiBPdXRwdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTV9DSDAgcGluIGF0IHRyaS1zdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTV9DSDAgcGluIGluIG91dHB1dCBtb2RlLgorICAgICAqIHxbMV0gICAgIHxQT0VOMSAgICAgfEVQV01fQ0gxIFBpbiBPdXRwdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTV9DSDEgcGluIGF0IHRyaS1zdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTV9DSDEgcGluIGluIG91dHB1dCBtb2RlLgorICAgICAqIHxbMl0gICAgIHxQT0VOMiAgICAgfEVQV01fQ0gyIFBpbiBPdXRwdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTV9DSDIgcGluIGF0IHRyaS1zdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTV9DSDIgcGluIGluIG91dHB1dCBtb2RlLgorICAgICAqIHxbM10gICAgIHxQT0VOMyAgICAgfEVQV01fQ0gzIFBpbiBPdXRwdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTV9DSDMgcGluIGF0IHRyaS1zdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTV9DSDMgcGluIGluIG91dHB1dCBtb2RlLgorICAgICAqIHxbNF0gICAgIHxQT0VONCAgICAgfEVQV01fQ0g0IFBpbiBPdXRwdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTV9DSDQgcGluIGF0IHRyaS1zdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTV9DSDQgcGluIGluIG91dHB1dCBtb2RlLgorICAgICAqIHxbNV0gICAgIHxQT0VONSAgICAgfEVQV01fQ0g1IFBpbiBPdXRwdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTV9DSDUgcGluIGF0IHRyaS1zdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTV9DSDUgcGluIGluIG91dHB1dCBtb2RlLgorICAgICAqIEB2YXIgRVBXTV9UOjpTV0JSSworICAgICAqIE9mZnNldDogMHhEQyAgRVBXTSBTb2Z0d2FyZSBCcmFrZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlJLRVRSRzAgIHxFUFdNIEVkZ2UgQnJha2UgU29mdHdhcmUgVHJpZ2dlciAoV3JpdGUgT25seSkgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byB0aGlzIGJpdCB3aWxsIHRyaWdnZXIgZWRnZSBicmFrZSwgYW5kIHNldCBCUktFSUYwIHRvIDEgaW4gRVBXTV9JTlRTVFMxIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzFdICAgICB8QlJLRVRSRzIgIHxFUFdNIEVkZ2UgQnJha2UgU29mdHdhcmUgVHJpZ2dlciAoV3JpdGUgT25seSkgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byB0aGlzIGJpdCB3aWxsIHRyaWdnZXIgZWRnZSBicmFrZSwgYW5kIHNldCBCUktFSUYyIHRvIDEgaW4gRVBXTV9JTlRTVFMxIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzJdICAgICB8QlJLRVRSRzQgIHxFUFdNIEVkZ2UgQnJha2UgU29mdHdhcmUgVHJpZ2dlciAoV3JpdGUgT25seSkgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byB0aGlzIGJpdCB3aWxsIHRyaWdnZXIgZWRnZSBicmFrZSwgYW5kIHNldCBCUktFSUY0IHRvIDEgaW4gRVBXTV9JTlRTVFMxIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzhdICAgICB8QlJLTFRSRzAgIHxFUFdNIExldmVsIEJyYWtlIFNvZnR3YXJlIFRyaWdnZXIgKFdyaXRlIE9ubHkpIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gdGhpcyBiaXQgd2lsbCB0cmlnZ2VyIGxldmVsIGJyYWtlLCBhbmQgc2V0IEJSS0xJRjAgdG8gMSBpbiBFUFdNX0lOVFNUUzEgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOV0gICAgIHxCUktMVFJHMiAgfEVQV00gTGV2ZWwgQnJha2UgU29mdHdhcmUgVHJpZ2dlciAoV3JpdGUgT25seSkgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byB0aGlzIGJpdCB3aWxsIHRyaWdnZXIgbGV2ZWwgYnJha2UsIGFuZCBzZXQgQlJLTElGMiB0byAxIGluIEVQV01fSU5UU1RTMSByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxMF0gICAgfEJSS0xUUkc0ICB8RVBXTSBMZXZlbCBCcmFrZSBTb2Z0d2FyZSBUcmlnZ2VyIChXcml0ZSBPbmx5KSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHRoaXMgYml0IHdpbGwgdHJpZ2dlciBsZXZlbCBicmFrZSwgYW5kIHNldCBCUktMSUY0IHRvIDEgaW4gRVBXTV9JTlRTVFMxIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEVQV01fVDo6SU5URU4wCisgICAgICogT2Zmc2V0OiAweEUwICBFUFdNIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFpJRU4wICAgICB8RVBXTSBaZXJvIFBvaW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBaZXJvIHBvaW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gWmVybyBwb2ludCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBPZGQgY2hhbm5lbHMgd2lsbCByZWFkIGFsd2F5cyAwIGF0IGNvbXBsZW1lbnRhcnkgbW9kZS4KKyAgICAgKiB8WzFdICAgICB8WklFTjEgICAgIHxFUFdNIFplcm8gUG9pbnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFplcm8gcG9pbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBaZXJvIHBvaW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IE9kZCBjaGFubmVscyB3aWxsIHJlYWQgYWx3YXlzIDAgYXQgY29tcGxlbWVudGFyeSBtb2RlLgorICAgICAqIHxbMl0gICAgIHxaSUVOMiAgICAgfEVQV00gWmVybyBQb2ludCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gWmVybyBwb2ludCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFplcm8gcG9pbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogT2RkIGNoYW5uZWxzIHdpbGwgcmVhZCBhbHdheXMgMCBhdCBjb21wbGVtZW50YXJ5IG1vZGUuCisgICAgICogfFszXSAgICAgfFpJRU4zICAgICB8RVBXTSBaZXJvIFBvaW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBaZXJvIHBvaW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gWmVybyBwb2ludCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBPZGQgY2hhbm5lbHMgd2lsbCByZWFkIGFsd2F5cyAwIGF0IGNvbXBsZW1lbnRhcnkgbW9kZS4KKyAgICAgKiB8WzRdICAgICB8WklFTjQgICAgIHxFUFdNIFplcm8gUG9pbnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFplcm8gcG9pbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBaZXJvIHBvaW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IE9kZCBjaGFubmVscyB3aWxsIHJlYWQgYWx3YXlzIDAgYXQgY29tcGxlbWVudGFyeSBtb2RlLgorICAgICAqIHxbNV0gICAgIHxaSUVONSAgICAgfEVQV00gWmVybyBQb2ludCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gWmVybyBwb2ludCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFplcm8gcG9pbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogT2RkIGNoYW5uZWxzIHdpbGwgcmVhZCBhbHdheXMgMCBhdCBjb21wbGVtZW50YXJ5IG1vZGUuCisgICAgICogfFs4XSAgICAgfFBJRU4wICAgICB8RVBXTSBQZXJpb2QgUG9pbnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBlcmlvZCBwb2ludCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBlcmlvZCBwb2ludCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV2hlbiB1cC1kb3duIGNvdW50ZXIgdHlwZSBwZXJpb2QgcG9pbnQgbWVhbnMgY2VudGVyIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBPZGQgY2hhbm5lbHMgd2lsbCByZWFkIGFsd2F5cyAwIGF0IGNvbXBsZW1lbnRhcnkgbW9kZS4KKyAgICAgKiB8WzldICAgICB8UElFTjEgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUGVyaW9kIHBvaW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGVyaW9kIHBvaW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXaGVuIHVwLWRvd24gY291bnRlciB0eXBlIHBlcmlvZCBwb2ludCBtZWFucyBjZW50ZXIgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IE9kZCBjaGFubmVscyB3aWxsIHJlYWQgYWx3YXlzIDAgYXQgY29tcGxlbWVudGFyeSBtb2RlLgorICAgICAqIHxbMTBdICAgIHxQSUVOMiAgICAgfEVQV00gUGVyaW9kIFBvaW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQZXJpb2QgcG9pbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQZXJpb2QgcG9pbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdoZW4gdXAtZG93biBjb3VudGVyIHR5cGUgcGVyaW9kIHBvaW50IG1lYW5zIGNlbnRlciBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogT2RkIGNoYW5uZWxzIHdpbGwgcmVhZCBhbHdheXMgMCBhdCBjb21wbGVtZW50YXJ5IG1vZGUuCisgICAgICogfFsxMV0gICAgfFBJRU4zICAgICB8RVBXTSBQZXJpb2QgUG9pbnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBlcmlvZCBwb2ludCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBlcmlvZCBwb2ludCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV2hlbiB1cC1kb3duIGNvdW50ZXIgdHlwZSBwZXJpb2QgcG9pbnQgbWVhbnMgY2VudGVyIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBPZGQgY2hhbm5lbHMgd2lsbCByZWFkIGFsd2F5cyAwIGF0IGNvbXBsZW1lbnRhcnkgbW9kZS4KKyAgICAgKiB8WzEyXSAgICB8UElFTjQgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUGVyaW9kIHBvaW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGVyaW9kIHBvaW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXaGVuIHVwLWRvd24gY291bnRlciB0eXBlIHBlcmlvZCBwb2ludCBtZWFucyBjZW50ZXIgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IE9kZCBjaGFubmVscyB3aWxsIHJlYWQgYWx3YXlzIDAgYXQgY29tcGxlbWVudGFyeSBtb2RlLgorICAgICAqIHxbMTNdICAgIHxQSUVONSAgICAgfEVQV00gUGVyaW9kIFBvaW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQZXJpb2QgcG9pbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQZXJpb2QgcG9pbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdoZW4gdXAtZG93biBjb3VudGVyIHR5cGUgcGVyaW9kIHBvaW50IG1lYW5zIGNlbnRlciBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogT2RkIGNoYW5uZWxzIHdpbGwgcmVhZCBhbHdheXMgMCBhdCBjb21wbGVtZW50YXJ5IG1vZGUuCisgICAgICogfFsxNl0gICAgfENNUFVJRU4wICB8RVBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUFVJRU4xLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUFVJRU4gZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzE3XSAgICB8Q01QVUlFTjEgIHxFUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QVUlFTjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QVUlFTiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMThdICAgIHxDTVBVSUVOMiAgfEVQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBVSUVOMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBVSUVOIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsxOV0gICAgfENNUFVJRU4zICB8RVBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUFVJRU4xLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUFVJRU4gZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzIwXSAgICB8Q01QVUlFTjQgIHxFUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QVUlFTjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QVUlFTiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjFdICAgIHxDTVBVSUVONSAgfEVQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBVSUVOMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBVSUVOIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyNF0gICAgfENNUERJRU4wICB8RVBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERJRU4xLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERJRU4gZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI1XSAgICB8Q01QRElFTjEgIHxFUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRElFTjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRElFTiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjZdICAgIHxDTVBESUVOMiAgfEVQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBESUVOMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBESUVOIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyN10gICAgfENNUERJRU4zICB8RVBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERJRU4xLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERJRU4gZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI4XSAgICB8Q01QRElFTjQgIHxFUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRElFTjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRElFTiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjldICAgIHxDTVBESUVONSAgfEVQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBESUVOMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBESUVOIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogQHZhciBFUFdNX1Q6OklOVEVOMQorICAgICAqIE9mZnNldDogMHhFNCAgRVBXTSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCUktFSUVOMF8xfEVQV00gRWRnZS1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEVuYWJsZSBmb3IgQ2hhbm5lbDAvMSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRWRnZS1kZXRlY3QgQnJha2UgaW50ZXJydXB0IGZvciBjaGFubmVsMC8xIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFZGdlLWRldGVjdCBCcmFrZSBpbnRlcnJ1cHQgZm9yIGNoYW5uZWwwLzEgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxXSAgICAgfEJSS0VJRU4yXzN8RVBXTSBFZGdlLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRW5hYmxlIGZvciBDaGFubmVsMi8zIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFZGdlLWRldGVjdCBCcmFrZSBpbnRlcnJ1cHQgZm9yIGNoYW5uZWwyLzMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVkZ2UtZGV0ZWN0IEJyYWtlIGludGVycnVwdCBmb3IgY2hhbm5lbDIvMyBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzJdICAgICB8QlJLRUlFTjRfNXxFUFdNIEVkZ2UtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBFbmFibGUgZm9yIENoYW5uZWw0LzUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVkZ2UtZGV0ZWN0IEJyYWtlIGludGVycnVwdCBmb3IgY2hhbm5lbDQvNSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRWRnZS1kZXRlY3QgQnJha2UgaW50ZXJydXB0IGZvciBjaGFubmVsNC81IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOF0gICAgIHxCUktMSUVOMF8xfEVQV00gTGV2ZWwtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBFbmFibGUgZm9yIENoYW5uZWwwLzEgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExldmVsLWRldGVjdCBCcmFrZSBpbnRlcnJ1cHQgZm9yIGNoYW5uZWwwLzEgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExldmVsLWRldGVjdCBCcmFrZSBpbnRlcnJ1cHQgZm9yIGNoYW5uZWwwLzEgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs5XSAgICAgfEJSS0xJRU4yXzN8RVBXTSBMZXZlbC1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEVuYWJsZSBmb3IgQ2hhbm5lbDIvMyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTGV2ZWwtZGV0ZWN0IEJyYWtlIGludGVycnVwdCBmb3IgY2hhbm5lbDIvMyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTGV2ZWwtZGV0ZWN0IEJyYWtlIGludGVycnVwdCBmb3IgY2hhbm5lbDIvMyBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEwXSAgICB8QlJLTElFTjRfNXxFUFdNIExldmVsLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRW5hYmxlIGZvciBDaGFubmVsNC81IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMZXZlbC1kZXRlY3QgQnJha2UgaW50ZXJydXB0IGZvciBjaGFubmVsNC81IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMZXZlbC1kZXRlY3QgQnJha2UgaW50ZXJydXB0IGZvciBjaGFubmVsNC81IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRVBXTV9UOjpJTlRTVFMwCisgICAgICogT2Zmc2V0OiAweEU4ICBFUFdNIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxaSUYwICAgICAgfEVQV00gWmVybyBQb2ludCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciByZWFjaGVzIHplcm8sIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8uCisgICAgICogfFsxXSAgICAgfFpJRjEgICAgICB8RVBXTSBaZXJvIFBvaW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIHJlYWNoZXMgemVybywgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8WzJdICAgICB8WklGMiAgICAgIHxFUFdNIFplcm8gUG9pbnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgcmVhY2hlcyB6ZXJvLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byB6ZXJvLgorICAgICAqIHxbM10gICAgIHxaSUYzICAgICAgfEVQV00gWmVybyBQb2ludCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciByZWFjaGVzIHplcm8sIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8uCisgICAgICogfFs0XSAgICAgfFpJRjQgICAgICB8RVBXTSBaZXJvIFBvaW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIHJlYWNoZXMgemVybywgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8WzVdICAgICB8WklGNSAgICAgIHxFUFdNIFplcm8gUG9pbnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgcmVhY2hlcyB6ZXJvLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byB6ZXJvLgorICAgICAqIHxbOF0gICAgIHxQSUYwICAgICAgfEVQV00gUGVyaW9kIFBvaW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIHJlYWNoZXMgRVBXTV9QRVJJT0QwLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byB6ZXJvCisgICAgICogfFs5XSAgICAgfFBJRjEgICAgICB8RVBXTSBQZXJpb2QgUG9pbnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgcmVhY2hlcyBFUFdNX1BFUklPRDEsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8KKyAgICAgKiB8WzEwXSAgICB8UElGMiAgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciByZWFjaGVzIEVQV01fUEVSSU9EMiwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVybworICAgICAqIHxbMTFdICAgIHxQSUYzICAgICAgfEVQV00gUGVyaW9kIFBvaW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIHJlYWNoZXMgRVBXTV9QRVJJT0Q0LCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byB6ZXJvCisgICAgICogfFsxMl0gICAgfFBJRjQgICAgICB8RVBXTSBQZXJpb2QgUG9pbnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgcmVhY2hlcyBFUFdNX1BFUklPRDUsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8KKyAgICAgKiB8WzEzXSAgICB8UElGNSAgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciByZWFjaGVzIEVQV01fUEVSSU9Ebiwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8WzE2XSAgICB8Q01QVUlGMCAgIHxFUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCBhbmQgcmVhY2hlcyBFUFdNX0NNUERBVDAsIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiB1cCBjb3VudGVyIHR5cGUgc2VsZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUFVJRjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QVUlGIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsxN10gICAgfENNUFVJRjEgICB8RVBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgdXAgY291bnQgYW5kIHJlYWNoZXMgRVBXTV9DTVBEQVQxLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBDTVBEQVQgZXF1YWwgdG8gUEVSSU9ELCB0aGlzIGZsYWcgaXMgbm90IHdvcmtpbmcgaW4gdXAgY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBVSUYxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUFVJRiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMThdICAgIHxDTVBVSUYyICAgfEVQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IGFuZCByZWFjaGVzIEVQV01fQ01QREFUMiwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIHVwIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QVUlGMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBVSUYgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzE5XSAgICB8Q01QVUlGMyAgIHxFUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCBhbmQgcmVhY2hlcyBFUFdNX0NNUERBVDMsIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiB1cCBjb3VudGVyIHR5cGUgc2VsZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUFVJRjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QVUlGIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyMF0gICAgfENNUFVJRjQgICB8RVBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgdXAgY291bnQgYW5kIHJlYWNoZXMgRVBXTV9DTVBEQVQ0LCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBDTVBEQVQgZXF1YWwgdG8gUEVSSU9ELCB0aGlzIGZsYWcgaXMgbm90IHdvcmtpbmcgaW4gdXAgY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBVSUYxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUFVJRiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjFdICAgIHxDTVBVSUY1ICAgfEVQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IGFuZCByZWFjaGVzIEVQV01fQ01QREFUNSwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIHVwIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QVUlGMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBVSUYgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI0XSAgICB8Q01QRElGMCAgIHxFUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgYW5kIHJlYWNoZXMgRVBXTV9DTVBEQVQwLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBDTVBEQVQgZXF1YWwgdG8gUEVSSU9ELCB0aGlzIGZsYWcgaXMgbm90IHdvcmtpbmcgaW4gZG93biBjb3VudGVyIHR5cGUgc2VsZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERJRjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRElGIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyNV0gICAgfENNUERJRjEgICB8RVBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IGFuZCByZWFjaGVzIEVQV01fQ01QREFUMSwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIGRvd24gY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBESUYxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERJRiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjZdICAgIHxDTVBESUYyICAgfEVQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgZG93biBjb3VudCBhbmQgcmVhY2hlcyBFUFdNX0NNUERBVDIsIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiBkb3duIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRElGMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBESUYgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI3XSAgICB8Q01QRElGMyAgIHxFUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgYW5kIHJlYWNoZXMgRVBXTV9DTVBEQVQzLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBDTVBEQVQgZXF1YWwgdG8gUEVSSU9ELCB0aGlzIGZsYWcgaXMgbm90IHdvcmtpbmcgaW4gZG93biBjb3VudGVyIHR5cGUgc2VsZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERJRjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRElGIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyOF0gICAgfENNUERJRjQgICB8RVBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IGFuZCByZWFjaGVzIEVQV01fQ01QREFUNCwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIGRvd24gY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBESUYxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERJRiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjldICAgIHxDTVBESUY1ICAgfEVQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgZG93biBjb3VudCBhbmQgcmVhY2hlcyBFUFdNX0NNUERBVDUsIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiBkb3duIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRElGMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBESUYgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiBAdmFyIEVQV01fVDo6SU5UU1RTMQorICAgICAqIE9mZnNldDogMHhFQyAgRVBXTSBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlJLRUlGMCAgIHxFUFdNIENoYW5uZWwwIEVkZ2UtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwwIGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGRvIG5vdCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWwwIGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzFdICAgICB8QlJLRUlGMSAgIHxFUFdNIENoYW5uZWwxIEVkZ2UtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwxIGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGRvIG5vdCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWwxIGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzJdICAgICB8QlJLRUlGMiAgIHxFUFdNIENoYW5uZWwyIEVkZ2UtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwyIGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGRvIG5vdCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWwyIGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzNdICAgICB8QlJLRUlGMyAgIHxFUFdNIENoYW5uZWwzIEVkZ2UtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwzIGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGRvIG5vdCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWwzIGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzRdICAgICB8QlJLRUlGNCAgIHxFUFdNIENoYW5uZWw0IEVkZ2UtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWw0IGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGRvIG5vdCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWw0IGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzVdICAgICB8QlJLRUlGNSAgIHxFUFdNIENoYW5uZWw1IEVkZ2UtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWw1IGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGRvIG5vdCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWw1IGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzhdICAgICB8QlJLTElGMCAgIHxFUFdNIENoYW5uZWwwIExldmVsLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRmxhZyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsMCBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDAgbGV2ZWwtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzldICAgICB8QlJLTElGMSAgIHxFUFdNIENoYW5uZWwxIExldmVsLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRmxhZyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsMSBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDEgbGV2ZWwtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEwXSAgICB8QlJLTElGMiAgIHxFUFdNIENoYW5uZWwyIExldmVsLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRmxhZyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsMiBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDIgbGV2ZWwtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzExXSAgICB8QlJLTElGMyAgIHxFUFdNIENoYW5uZWwzIExldmVsLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRmxhZyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsMyBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDMgbGV2ZWwtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEyXSAgICB8QlJLTElGNCAgIHxFUFdNIENoYW5uZWw0IExldmVsLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRmxhZyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsNCBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDQgbGV2ZWwtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEzXSAgICB8QlJLTElGNSAgIHxFUFdNIENoYW5uZWw1IExldmVsLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRmxhZyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsNSBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDUgbGV2ZWwtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE2XSAgICB8QlJLRVNUUzAgIHxFUFdNIENoYW5uZWwwIEVkZ2UtZGV0ZWN0IEJyYWtlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwwIGVkZ2UtZGV0ZWN0IGJyYWtlIHN0YXRlIGlzIHJlbGVhc2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDAgZWRnZS1kZXRlY3QgYnJha2UgZGV0ZWN0cyBhIGZhbGxpbmcgZWRnZSBvZiBhbnkgZW5hYmxlZCBicmFrZSBzb3VyY2U7IHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgRVBXTSBjaGFubmVsMCBhdCBicmFrZSBzdGF0ZSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHxbMTddICAgIHxCUktFU1RTMSAgfEVQV00gQ2hhbm5lbDEgRWRnZS1kZXRlY3QgQnJha2UgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gY2hhbm5lbDEgZWRnZS1kZXRlY3QgYnJha2Ugc3RhdGUgaXMgcmVsZWFzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsMSBlZGdlLWRldGVjdCBicmFrZSBkZXRlY3RzIGEgZmFsbGluZyBlZGdlIG9mIGFueSBlbmFibGVkIGJyYWtlIHNvdXJjZTsgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGluZGljYXRlIHRoZSBFUFdNIGNoYW5uZWwxIGF0IGJyYWtlIHN0YXRlLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfFsxOF0gICAgfEJSS0VTVFMyICB8RVBXTSBDaGFubmVsMiBFZGdlLWRldGVjdCBCcmFrZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsMiBlZGdlLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWwyIGVkZ2UtZGV0ZWN0IGJyYWtlIGRldGVjdHMgYSBmYWxsaW5nIGVkZ2Ugb2YgYW55IGVuYWJsZWQgYnJha2Ugc291cmNlOyB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhlIEVQV00gY2hhbm5lbDIgYXQgYnJha2Ugc3RhdGUsIHdyaXRpbmcgMSB0byBjbGVhci4KKyAgICAgKiB8WzE5XSAgICB8QlJLRVNUUzMgIHxFUFdNIENoYW5uZWwzIEVkZ2UtZGV0ZWN0IEJyYWtlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwzIGVkZ2UtZGV0ZWN0IGJyYWtlIHN0YXRlIGlzIHJlbGVhc2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDMgZWRnZS1kZXRlY3QgYnJha2UgZGV0ZWN0cyBhIGZhbGxpbmcgZWRnZSBvZiBhbnkgZW5hYmxlZCBicmFrZSBzb3VyY2U7IHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgRVBXTSBjaGFubmVsMyBhdCBicmFrZSBzdGF0ZSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHxbMjBdICAgIHxCUktFU1RTNCAgfEVQV00gQ2hhbm5lbDQgRWRnZS1kZXRlY3QgQnJha2UgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gY2hhbm5lbDQgZWRnZS1kZXRlY3QgYnJha2Ugc3RhdGUgaXMgcmVsZWFzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsNCBlZGdlLWRldGVjdCBicmFrZSBkZXRlY3RzIGEgZmFsbGluZyBlZGdlIG9mIGFueSBlbmFibGVkIGJyYWtlIHNvdXJjZTsgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGluZGljYXRlIHRoZSBFUFdNIGNoYW5uZWw0IGF0IGJyYWtlIHN0YXRlLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfFsyMV0gICAgfEJSS0VTVFM1ICB8RVBXTSBDaGFubmVsNSBFZGdlLWRldGVjdCBCcmFrZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsNSBlZGdlLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWw1IGVkZ2UtZGV0ZWN0IGJyYWtlIGRldGVjdHMgYSBmYWxsaW5nIGVkZ2Ugb2YgYW55IGVuYWJsZWQgYnJha2Ugc291cmNlOyB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhlIEVQV00gY2hhbm5lbDUgYXQgYnJha2Ugc3RhdGUsIHdyaXRpbmcgMSB0byBjbGVhci4KKyAgICAgKiB8WzI0XSAgICB8QlJLTFNUUzAgIHxFUFdNIENoYW5uZWwwIExldmVsLWRldGVjdCBCcmFrZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsMCBsZXZlbC1kZXRlY3QgYnJha2Ugc3RhdGUgaXMgcmVsZWFzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsMCBsZXZlbC1kZXRlY3QgYnJha2UgZGV0ZWN0cyBhIGZhbGxpbmcgZWRnZSBvZiBhbnkgZW5hYmxlZCBicmFrZSBzb3VyY2U7IHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgRVBXTSBjaGFubmVsMCBhdCBicmFrZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIGF1dG8gY2xlYXJlZCBieSBoYXJkd2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gZW5hYmxlZCBicmFrZSBzb3VyY2UgcmV0dXJuIHRvIGhpZ2ggbGV2ZWwsIEVQV00gd2lsbCByZWxlYXNlIGJyYWtlIHN0YXRlIHVudGlsIGN1cnJlbnQgRVBXTSBwZXJpb2QgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgRVBXTSB3YXZlZm9ybSB3aWxsIHN0YXJ0IG91dHB1dCBmcm9tIG5leHQgZnVsbCBFUFdNIHBlcmlvZC4KKyAgICAgKiB8WzI1XSAgICB8QlJLTFNUUzEgIHxFUFdNIENoYW5uZWwxIExldmVsLWRldGVjdCBCcmFrZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsMSBsZXZlbC1kZXRlY3QgYnJha2Ugc3RhdGUgaXMgcmVsZWFzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsMSBsZXZlbC1kZXRlY3QgYnJha2UgZGV0ZWN0cyBhIGZhbGxpbmcgZWRnZSBvZiBhbnkgZW5hYmxlZCBicmFrZSBzb3VyY2U7IHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgRVBXTSBjaGFubmVsMSBhdCBicmFrZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIGF1dG8gY2xlYXJlZCBieSBoYXJkd2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gZW5hYmxlZCBicmFrZSBzb3VyY2UgcmV0dXJuIHRvIGhpZ2ggbGV2ZWwsIEVQV00gd2lsbCByZWxlYXNlIGJyYWtlIHN0YXRlIHVudGlsIGN1cnJlbnQgRVBXTSBwZXJpb2QgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgRVBXTSB3YXZlZm9ybSB3aWxsIHN0YXJ0IG91dHB1dCBmcm9tIG5leHQgZnVsbCBFUFdNIHBlcmlvZC4KKyAgICAgKiB8WzI2XSAgICB8QlJLTFNUUzIgIHxFUFdNIENoYW5uZWwyIExldmVsLWRldGVjdCBCcmFrZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsMiBsZXZlbC1kZXRlY3QgYnJha2Ugc3RhdGUgaXMgcmVsZWFzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsMiBsZXZlbC1kZXRlY3QgYnJha2UgZGV0ZWN0cyBhIGZhbGxpbmcgZWRnZSBvZiBhbnkgZW5hYmxlZCBicmFrZSBzb3VyY2U7IHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgRVBXTSBjaGFubmVsMiBhdCBicmFrZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIGF1dG8gY2xlYXJlZCBieSBoYXJkd2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gZW5hYmxlZCBicmFrZSBzb3VyY2UgcmV0dXJuIHRvIGhpZ2ggbGV2ZWwsIEVQV00gd2lsbCByZWxlYXNlIGJyYWtlIHN0YXRlIHVudGlsIGN1cnJlbnQgRVBXTSBwZXJpb2QgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgRVBXTSB3YXZlZm9ybSB3aWxsIHN0YXJ0IG91dHB1dCBmcm9tIG5leHQgZnVsbCBFUFdNIHBlcmlvZC4KKyAgICAgKiB8WzI3XSAgICB8QlJLTFNUUzMgIHxFUFdNIENoYW5uZWwzIExldmVsLWRldGVjdCBCcmFrZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsMyBsZXZlbC1kZXRlY3QgYnJha2Ugc3RhdGUgaXMgcmVsZWFzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsMyBsZXZlbC1kZXRlY3QgYnJha2UgZGV0ZWN0cyBhIGZhbGxpbmcgZWRnZSBvZiBhbnkgZW5hYmxlZCBicmFrZSBzb3VyY2U7IHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgRVBXTSBjaGFubmVsMyBhdCBicmFrZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIGF1dG8gY2xlYXJlZCBieSBoYXJkd2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gZW5hYmxlZCBicmFrZSBzb3VyY2UgcmV0dXJuIHRvIGhpZ2ggbGV2ZWwsIEVQV00gd2lsbCByZWxlYXNlIGJyYWtlIHN0YXRlIHVudGlsIGN1cnJlbnQgRVBXTSBwZXJpb2QgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgRVBXTSB3YXZlZm9ybSB3aWxsIHN0YXJ0IG91dHB1dCBmcm9tIG5leHQgZnVsbCBFUFdNIHBlcmlvZC4KKyAgICAgKiB8WzI4XSAgICB8QlJLTFNUUzQgIHxFUFdNIENoYW5uZWw0IExldmVsLWRldGVjdCBCcmFrZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsNCBsZXZlbC1kZXRlY3QgYnJha2Ugc3RhdGUgaXMgcmVsZWFzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsNCBsZXZlbC1kZXRlY3QgYnJha2UgZGV0ZWN0cyBhIGZhbGxpbmcgZWRnZSBvZiBhbnkgZW5hYmxlZCBicmFrZSBzb3VyY2U7IHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgRVBXTSBjaGFubmVsNCBhdCBicmFrZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIGF1dG8gY2xlYXJlZCBieSBoYXJkd2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gZW5hYmxlZCBicmFrZSBzb3VyY2UgcmV0dXJuIHRvIGhpZ2ggbGV2ZWwsIEVQV00gd2lsbCByZWxlYXNlIGJyYWtlIHN0YXRlIHVudGlsIGN1cnJlbnQgRVBXTSBwZXJpb2QgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgRVBXTSB3YXZlZm9ybSB3aWxsIHN0YXJ0IG91dHB1dCBmcm9tIG5leHQgZnVsbCBFUFdNIHBlcmlvZC4KKyAgICAgKiB8WzI5XSAgICB8QlJLTFNUUzUgIHxFUFdNIENoYW5uZWw1IExldmVsLWRldGVjdCBCcmFrZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsNSBsZXZlbC1kZXRlY3QgYnJha2Ugc3RhdGUgaXMgcmVsZWFzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsNSBsZXZlbC1kZXRlY3QgYnJha2UgZGV0ZWN0cyBhIGZhbGxpbmcgZWRnZSBvZiBhbnkgZW5hYmxlZCBicmFrZSBzb3VyY2U7IHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgRVBXTSBjaGFubmVsNSBhdCBicmFrZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIGF1dG8gY2xlYXJlZCBieSBoYXJkd2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gZW5hYmxlZCBicmFrZSBzb3VyY2UgcmV0dXJuIHRvIGhpZ2ggbGV2ZWwsIEVQV00gd2lsbCByZWxlYXNlIGJyYWtlIHN0YXRlIHVudGlsIGN1cnJlbnQgRVBXTSBwZXJpb2QgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgRVBXTSB3YXZlZm9ybSB3aWxsIHN0YXJ0IG91dHB1dCBmcm9tIG5leHQgZnVsbCBFUFdNIHBlcmlvZC4KKyAgICAgKiBAdmFyIEVQV01fVDo6REFDVFJHRU4KKyAgICAgKiBPZmZzZXQ6IDB4RjQgIEVQV00gVHJpZ2dlciBEQUMgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8WlRFMCAgICAgIHxFUFdNIFplcm8gUG9pbnQgVHJpZ2dlciBEQUMgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiB0cmlnZ2VyIEVBREMvREFDL0RNQSB0byBzdGFydCBhY3Rpb24gd2hlbiBFUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byB6ZXJvIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxaVEUxICAgICAgfEVQV00gWmVybyBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgRUFEQy9EQUMvRE1BIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIHplcm8gaWYgdGhpcyBiaXQgaXMgc2V0IHRvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFpURTIgICAgICB8RVBXTSBaZXJvIFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBFQURDL0RBQy9ETUEgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gemVybyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8WlRFMyAgICAgIHxFUFdNIFplcm8gUG9pbnQgVHJpZ2dlciBEQUMgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiB0cmlnZ2VyIEVBREMvREFDL0RNQSB0byBzdGFydCBhY3Rpb24gd2hlbiBFUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byB6ZXJvIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxaVEU0ICAgICAgfEVQV00gWmVybyBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgRUFEQy9EQUMvRE1BIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIHplcm8gaWYgdGhpcyBiaXQgaXMgc2V0IHRvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfFpURTUgICAgICB8RVBXTSBaZXJvIFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBFQURDL0RBQy9ETUEgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gemVybyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8UFRFMCAgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byAoUEVSSU9EbisxKSBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzldICAgICB8UFRFMSAgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byAoUEVSSU9EbisxKSBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzEwXSAgICB8UFRFMiAgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byAoUEVSSU9EbisxKSBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzExXSAgICB8UFRFMyAgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byAoUEVSSU9EbisxKSBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzEyXSAgICB8UFRFNCAgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byAoUEVSSU9EbisxKSBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzEzXSAgICB8UFRFNSAgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byAoUEVSSU9EbisxKSBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzE2XSAgICB8Q1VUUkdFMCAgIHxFUFdNIENvbXBhcmUgVXAgQ291bnQgUG9pbnQgVHJpZ2dlciBEQUMgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiB0cmlnZ2VyIERBQyB0byBzdGFydCBhY3Rpb24gd2hlbiBFUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gQ01QREFUIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ29tcGFyZSBVcCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDb21wYXJlIFVwIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IHNob3VsZCBrZWVwIGF0IDAgd2hlbiBFUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIGRvd24gY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENVVFJHRTEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ1VUUkdFIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsxN10gICAgfENVVFJHRTEgICB8RVBXTSBDb21wYXJlIFVwIENvdW50IFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVCBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENvbXBhcmUgVXAgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ29tcGFyZSBVcCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBzaG91bGQga2VlcCBhdCAwIHdoZW4gRVBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiBkb3duIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDVVRSR0UxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENVVFJHRSBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMThdICAgIHxDVVRSR0UyICAgfEVQV00gQ29tcGFyZSBVcCBDb3VudCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQgaWYgdGhpcyBiaXQgaXMgc2V0IHRvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDb21wYXJlIFVwIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENvbXBhcmUgVXAgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgc2hvdWxkIGtlZXAgYXQgMCB3aGVuIEVQV00gY291bnRlciBvcGVyYXRpbmcgaW4gZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ1VUUkdFMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDVVRSR0UgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzE5XSAgICB8Q1VUUkdFMyAgIHxFUFdNIENvbXBhcmUgVXAgQ291bnQgUG9pbnQgVHJpZ2dlciBEQUMgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiB0cmlnZ2VyIERBQyB0byBzdGFydCBhY3Rpb24gd2hlbiBFUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gQ01QREFUIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ29tcGFyZSBVcCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDb21wYXJlIFVwIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IHNob3VsZCBrZWVwIGF0IDAgd2hlbiBFUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIGRvd24gY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENVVFJHRTEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ1VUUkdFIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyMF0gICAgfENVVFJHRTQgICB8RVBXTSBDb21wYXJlIFVwIENvdW50IFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVCBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENvbXBhcmUgVXAgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ29tcGFyZSBVcCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBzaG91bGQga2VlcCBhdCAwIHdoZW4gRVBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiBkb3duIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDVVRSR0UxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENVVFJHRSBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjFdICAgIHxDVVRSR0U1ICAgfEVQV00gQ29tcGFyZSBVcCBDb3VudCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQgaWYgdGhpcyBiaXQgaXMgc2V0IHRvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDb21wYXJlIFVwIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENvbXBhcmUgVXAgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgc2hvdWxkIGtlZXAgYXQgMCB3aGVuIEVQV00gY291bnRlciBvcGVyYXRpbmcgaW4gZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ1VUUkdFMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDVVRSR0UgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI0XSAgICB8Q0RUUkdFMCAgIHxFUFdNIENvbXBhcmUgRG93biBDb3VudCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVCBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENvbXBhcmUgRG93biBjb3VudCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDb21wYXJlIERvd24gY291bnQgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgc2hvdWxkIGtlZXAgYXQgMCB3aGVuIEVQV00gY291bnRlciBvcGVyYXRpbmcgaW4gdXAgY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENEVFJHRTEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ0RUUkdFIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyNV0gICAgfENEVFJHRTEgICB8RVBXTSBDb21wYXJlIERvd24gQ291bnQgUG9pbnQgVHJpZ2dlciBEQUMgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiB0cmlnZ2VyIERBQyB0byBzdGFydCBhY3Rpb24gd2hlbiBFUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byBDTVBEQVQgaWYgdGhpcyBiaXQgaXMgc2V0IHRvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDb21wYXJlIERvd24gY291bnQgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ29tcGFyZSBEb3duIGNvdW50IHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IHNob3VsZCBrZWVwIGF0IDAgd2hlbiBFUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIHVwIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDRFRSR0UxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENEVFJHRSBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjZdICAgIHxDRFRSR0UyICAgfEVQV00gQ29tcGFyZSBEb3duIENvdW50IFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFUIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ29tcGFyZSBEb3duIGNvdW50IHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENvbXBhcmUgRG93biBjb3VudCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBzaG91bGQga2VlcCBhdCAwIHdoZW4gRVBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiB1cCBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ0RUUkdFMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDRFRSR0UgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI3XSAgICB8Q0RUUkdFMyAgIHxFUFdNIENvbXBhcmUgRG93biBDb3VudCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVCBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENvbXBhcmUgRG93biBjb3VudCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDb21wYXJlIERvd24gY291bnQgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgc2hvdWxkIGtlZXAgYXQgMCB3aGVuIEVQV00gY291bnRlciBvcGVyYXRpbmcgaW4gdXAgY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENEVFJHRTEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ0RUUkdFIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyOF0gICAgfENEVFJHRTQgICB8RVBXTSBDb21wYXJlIERvd24gQ291bnQgUG9pbnQgVHJpZ2dlciBEQUMgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiB0cmlnZ2VyIERBQyB0byBzdGFydCBhY3Rpb24gd2hlbiBFUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byBDTVBEQVQgaWYgdGhpcyBiaXQgaXMgc2V0IHRvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDb21wYXJlIERvd24gY291bnQgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ29tcGFyZSBEb3duIGNvdW50IHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IHNob3VsZCBrZWVwIGF0IDAgd2hlbiBFUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIHVwIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDRFRSR0UxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENEVFJHRSBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjldICAgIHxDRFRSR0U1ICAgfEVQV00gQ29tcGFyZSBEb3duIENvdW50IFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFUIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ29tcGFyZSBEb3duIGNvdW50IHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENvbXBhcmUgRG93biBjb3VudCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBzaG91bGQga2VlcCBhdCAwIHdoZW4gRVBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiB1cCBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ0RUUkdFMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDRFRSR0UgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiBAdmFyIEVQV01fVDo6RUFEQ1RTMAorICAgICAqIE9mZnNldDogMHhGOCAgRVBXTSBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdCBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8VFJHU0VMMCAgIHxFUFdNX0NIMCBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBFUFdNX0NIMCB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBFUFdNX0NIMCBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IEVQV01fQ0gwIHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBFUFdNX0NIMCB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IEVQV01fQ0gwIGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBFUFdNX0NIMSB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBFUFdNX0NIMSBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IEVQV01fQ0gxIHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBFUFdNX0NIMSB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IEVQV01fQ0gxIGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTAgPSBFUFdNX0NIMCB1cC1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDExID0gRVBXTV9DSDAgZG93bi1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAwID0gRVBXTV9DSDIgdXAtY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMSA9IEVQV01fQ0gyIGRvd24tY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMCA9IEVQV01fQ0g0IHVwLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTEgPSBFUFdNX0NINCBkb3duLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHxbN10gICAgIHxUUkdFTjAgICAgfEVQV01fQ0gwIFRyaWdnZXIgRUFEQyBlbmFibGUgYml0CisgICAgICogfFsxMTo4XSAgfFRSR1NFTDEgICB8RVBXTV9DSDEgVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gRVBXTV9DSDAgemVybyBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gRVBXTV9DSDAgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBFUFdNX0NIMCB6ZXJvIG9yIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gRVBXTV9DSDAgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSBFUFdNX0NIMCBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gRVBXTV9DSDEgemVybyBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gRVBXTV9DSDEgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBFUFdNX0NIMSB6ZXJvIG9yIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gRVBXTV9DSDEgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSBFUFdNX0NIMSBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEwID0gRVBXTV9DSDAgdXAtY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMSA9IEVQV01fQ0gwIGRvd24tY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMCA9IEVQV01fQ0gyIHVwLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDEgPSBFUFdNX0NIMiBkb3duLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTAgPSBFUFdNX0NINCB1cC1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTExID0gRVBXTV9DSDQgZG93bi1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8WzE1XSAgICB8VFJHRU4xICAgIHxFUFdNX0NIMSBUcmlnZ2VyIEVBREMgZW5hYmxlIGJpdAorICAgICAqIHxbMTk6MTZdIHxUUkdTRUwyICAgfEVQV01fQ0gyIFRyaWdnZXIgRUFEQyBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEVQV01fQ0gyIHplcm8gcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEVQV01fQ0gyIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gRVBXTV9DSDIgemVybyBvciBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IEVQV01fQ0gyIHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gRVBXTV9DSDIgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IEVQV01fQ0gzIHplcm8gcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IEVQV01fQ0gzIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gRVBXTV9DSDMgemVybyBvciBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IEVQV01fQ0gzIHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gRVBXTV9DSDMgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMCA9IEVQV01fQ0gwIHVwLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTEgPSBFUFdNX0NIMCBkb3duLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDAgPSBFUFdNX0NIMiB1cC1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAxID0gRVBXTV9DSDIgZG93bi1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEwID0gRVBXTV9DSDQgdXAtY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMSA9IEVQV01fQ0g0IGRvd24tY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfFsyM10gICAgfFRSR0VOMiAgICB8RVBXTV9DSDIgVHJpZ2dlciBFQURDIGVuYWJsZSBiaXQKKyAgICAgKiB8WzI3OjI0XSB8VFJHU0VMMyAgIHxFUFdNX0NIMyBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBFUFdNX0NIMiB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBFUFdNX0NIMiBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IEVQV01fQ0gyIHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBFUFdNX0NIMiB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IEVQV01fQ0gyIGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBFUFdNX0NIMyB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBFUFdNX0NIMyBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IEVQV01fQ0gzIHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBFUFdNX0NIMyB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IEVQV01fQ0gzIGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTAgPSBFUFdNX0NIMCB1cC1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDExID0gRVBXTV9DSDAgZG93bi1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAwID0gRVBXTV9DSDIgdXAtY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMSA9IEVQV01fQ0gyIGRvd24tY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMCA9IEVQV01fQ0g0IHVwLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTEgPSBFUFdNX0NINCBkb3duLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHxbMzFdICAgIHxUUkdFTjMgICAgfEVQV01fQ0gzIFRyaWdnZXIgRUFEQyBlbmFibGUgYml0CisgICAgICogQHZhciBFUFdNX1Q6OkVBRENUUzEKKyAgICAgKiBPZmZzZXQ6IDB4RkMgIEVQV00gVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFRSR1NFTDQgICB8RVBXTV9DSDQgVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gRVBXTV9DSDQgemVybyBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gRVBXTV9DSDQgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBFUFdNX0NINCB6ZXJvIG9yIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gRVBXTV9DSDQgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSBFUFdNX0NINCBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gRVBXTV9DSDUgemVybyBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gRVBXTV9DSDUgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBFUFdNX0NINSB6ZXJvIG9yIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gRVBXTV9DSDUgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSBFUFdNX0NINSBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEwID0gRVBXTV9DSDAgdXAtY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMSA9IEVQV01fQ0gwIGRvd24tY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMCA9IEVQV01fQ0gyIHVwLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDEgPSBFUFdNX0NIMiBkb3duLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTAgPSBFUFdNX0NINCB1cC1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTExID0gRVBXTV9DSDQgZG93bi1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8WzddICAgICB8VFJHRU40ICAgIHxFUFdNX0NINCBUcmlnZ2VyIEVBREMgZW5hYmxlIGJpdAorICAgICAqIHxbMTE6OF0gIHxUUkdTRUw1ICAgfEVQV01fQ0g1IFRyaWdnZXIgRUFEQyBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEVQV01fQ0g0IHplcm8gcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEVQV01fQ0g0IHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gRVBXTV9DSDQgemVybyBvciBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IEVQV01fQ0g0IHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gRVBXTV9DSDQgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IEVQV01fQ0g1IHplcm8gcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IEVQV01fQ0g1IHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gRVBXTV9DSDUgemVybyBvciBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IEVQV01fQ0g1IHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gRVBXTV9DSDUgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMCA9IEVQV01fQ0gwIHVwLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTEgPSBFUFdNX0NIMCBkb3duLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDAgPSBFUFdNX0NIMiB1cC1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAxID0gRVBXTV9DSDIgZG93bi1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEwID0gRVBXTV9DSDQgdXAtY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMSA9IEVQV01fQ0g0IGRvd24tY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfFsxNV0gICAgfFRSR0VONSAgICB8RVBXTV9DSDUgVHJpZ2dlciBFQURDIGVuYWJsZSBiaXQKKyAgICAgKiBAdmFyIEVQV01fVDo6RlRDTVBEQVRbM10KKyAgICAgKiBPZmZzZXQ6IDB4MTAwICBFUFdNIEZyZWUgVHJpZ2dlciBDb21wYXJlIFJlZ2lzdGVyIDAvMSwyLzMsNC81CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8RlRDTVAgICAgIHxFUFdNIEZyZWUgVHJpZ2dlciBDb21wYXJlIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RlRDTVAgdXNlIHRvIGNvbXBhcmUgd2l0aCBldmVuIENOVFIgdG8gdHJpZ2dlciBFQURDCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RlRDTVBEQVQwLCAyLCA0IGNvcnJlc3BvbmRpbmcgY29tcGxlbWVudGFyeSBwYWlycyBFUFdNX0NIMCBhbmQgRVBXTV9DSDEsIEVQV01fQ0gyIGFuZCBFUFdNX0NIMywgRVBXTV9DSDQgYW5kIEVQV01fQ0g1LgorICAgICAqIEB2YXIgRVBXTV9UOjpTU0NUTAorICAgICAqIE9mZnNldDogMHgxMTAgIEVQV00gU3luY2hyb25vdXMgU3RhcnQgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNTRU4wICAgICB8RVBXTSBTeW5jaHJvbm91cyBTdGFydCBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gaXMgZW5hYmxlZCwgdGhlIEVQV00gY291bnRlciBlbmFibGUgcmVnaXN0ZXIgKEVQV01fQ05URU4pIGNhbiBiZSBlbmFibGVkIGJ5IHdyaXRpbmcgRVBXTSBzeW5jaHJvbm91cyBzdGFydCB0cmlnZ2VyIGJpdCAoQ05UU0VOKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxTU0VOMSAgICAgfEVQV00gU3luY2hyb25vdXMgU3RhcnQgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIGlzIGVuYWJsZWQsIHRoZSBFUFdNIGNvdW50ZXIgZW5hYmxlIHJlZ2lzdGVyIChFUFdNX0NOVEVOKSBjYW4gYmUgZW5hYmxlZCBieSB3cml0aW5nIEVQV00gc3luY2hyb25vdXMgc3RhcnQgdHJpZ2dlciBiaXQgKENOVFNFTikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8U1NFTjIgICAgIHxFUFdNIFN5bmNocm9ub3VzIFN0YXJ0IEZ1bmN0aW9uIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBpcyBlbmFibGVkLCB0aGUgRVBXTSBjb3VudGVyIGVuYWJsZSByZWdpc3RlciAoRVBXTV9DTlRFTikgY2FuIGJlIGVuYWJsZWQgYnkgd3JpdGluZyBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IHRyaWdnZXIgYml0IChDTlRTRU4pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfFNTRU4zICAgICB8RVBXTSBTeW5jaHJvbm91cyBTdGFydCBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gaXMgZW5hYmxlZCwgdGhlIEVQV00gY291bnRlciBlbmFibGUgcmVnaXN0ZXIgKEVQV01fQ05URU4pIGNhbiBiZSBlbmFibGVkIGJ5IHdyaXRpbmcgRVBXTSBzeW5jaHJvbm91cyBzdGFydCB0cmlnZ2VyIGJpdCAoQ05UU0VOKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxTU0VONCAgICAgfEVQV00gU3luY2hyb25vdXMgU3RhcnQgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIGlzIGVuYWJsZWQsIHRoZSBFUFdNIGNvdW50ZXIgZW5hYmxlIHJlZ2lzdGVyIChFUFdNX0NOVEVOKSBjYW4gYmUgZW5hYmxlZCBieSB3cml0aW5nIEVQV00gc3luY2hyb25vdXMgc3RhcnQgdHJpZ2dlciBiaXQgKENOVFNFTikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8U1NFTjUgICAgIHxFUFdNIFN5bmNocm9ub3VzIFN0YXJ0IEZ1bmN0aW9uIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBpcyBlbmFibGVkLCB0aGUgRVBXTSBjb3VudGVyIGVuYWJsZSByZWdpc3RlciAoRVBXTV9DTlRFTikgY2FuIGJlIGVuYWJsZWQgYnkgd3JpdGluZyBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IHRyaWdnZXIgYml0IChDTlRTRU4pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs5OjhdICAgfFNTUkMgICAgICB8RVBXTSBTeW5jaHJvbm91cyBTdGFydCBTb3VyY2UgU2VsZWN0IEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFN5bmNocm9ub3VzIHN0YXJ0IHNvdXJjZSBjb21lIGZyb20gRVBXTTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2UgY29tZSBmcm9tIEVQV00xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gU3luY2hyb25vdXMgc3RhcnQgc291cmNlIGNvbWUgZnJvbSBCUFdNMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFN5bmNocm9ub3VzIHN0YXJ0IHNvdXJjZSBjb21lIGZyb20gQlBXTTEuCisgICAgICogQHZhciBFUFdNX1Q6OlNTVFJHCisgICAgICogT2Zmc2V0OiAweDExNCAgRVBXTSBTeW5jaHJvbm91cyBTdGFydCBUcmlnZ2VyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q05UU0VOICAgIHxFUFdNIENvdW50ZXIgU3luY2hyb25vdXMgU3RhcnQgRW5hYmxlIChXcml0ZSBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBNVyBjb3VudGVyIHN5bmNocm9ub3VzIGVuYWJsZSBmdW5jdGlvbiBpcyB1c2VkIHRvIG1ha2Ugc2VsZWN0ZWQgRVBXTSBjaGFubmVscyAoaW5jbHVkZSBFUFdNMF9DSHggYW5kIEVQV00xX0NIeCkgc3RhcnQgY291bnRpbmcgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRoaXMgYml0IHRvIDEgd2lsbCBhbHNvIHNldCB0aGUgY291bnRlciBlbmFibGUgYml0IChDTlRFTm4sIG4gZGVub3RlcyBjaGFubmVsIDAgdG8gNSkgaWYgY29ycmVsYXRlZCBFUFdNIGNoYW5uZWwgY291bnRlciBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBpcyBlbmFibGVkLgorICAgICAqIEB2YXIgRVBXTV9UOjpMRUJDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MTE4ICBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8TEVCRU4gICAgIHxFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBFbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxTUkNFTjAgICAgfEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFNvdXJjZSBGcm9tIEVQV01fQ0gwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgU291cmNlIGZyb20gRVBXTV9DSDAgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFNvdXJjZSBmcm9tIEVQV01fQ0gwIEVuYWJsZWQuCisgICAgICogfFs5XSAgICAgfFNSQ0VOMiAgICB8RVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgU291cmNlIEZyb20gRVBXTV9DSDIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBTb3VyY2UgZnJvbSBFUFdNX0NIMiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgU291cmNlIGZyb20gRVBXTV9DSDIgRW5hYmxlZC4KKyAgICAgKiB8WzEwXSAgICB8U1JDRU40ICAgIHxFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBTb3VyY2UgRnJvbSBFUFdNX0NINCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFNvdXJjZSBmcm9tIEVQV01fQ0g0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBTb3VyY2UgZnJvbSBFUFdNX0NINCBFbmFibGVkLgorICAgICAqIHxbMTc6MTZdIHxUUkdUWVBFICAgfEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFRyaWdnZXIgVHlwZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXaGVuIGRldGVjdCBsZWFkaW5nIGVkZ2UgYmxhbmtpbmcgc291cmNlIHJpc2luZyBlZGdlLCBibGFua2luZyBjb3VudGVyIHN0YXJ0IGNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIGRldGVjdCBsZWFkaW5nIGVkZ2UgYmxhbmtpbmcgc291cmNlIGZhbGxpbmcgZWRnZSwgYmxhbmtpbmcgY291bnRlciBzdGFydCBjb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyID0gV2hlbiBkZXRlY3QgbGVhZGluZyBlZGdlIGJsYW5raW5nIHNvdXJjZSByaXNpbmcgb3IgZmFsbGluZyBlZGdlLCBibGFua2luZyBjb3VudGVyIHN0YXJ0IGNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDMgPSBSZXNlcnZlZC4KKyAgICAgKiBAdmFyIEVQV01fVDo6TEVCQ05UCisgICAgICogT2Zmc2V0OiAweDExQyAgRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgQ291bnRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs4OjBdICAgfExFQkNOVCAgICB8RVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgQ291bnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgY291bnRlciB2YWx1ZSBkZWNpZGVzIGxlYWRpbmcgZWRnZSBibGFua2luZyB3aW5kb3cgc2l6ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCbGFua2luZyB3aW5kb3cgc2l6ZSA9IExFQkNOVCsxLCBhbmQgTEVCIGNvdW50ZXIgY2xvY2sgYmFzZSBpcyBFQ0xLLgorICAgICAqIEB2YXIgRVBXTV9UOjpTVEFUVVMKKyAgICAgKiBPZmZzZXQ6IDB4MTIwICBFUFdNIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENOVE1BWEYwICB8VGltZS1iYXNlIENvdW50ZXIgRXF1YWwgdG8gMHhGRkZGIExhdGNoZWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBpbmRpY2F0ZXMgdGhlIHRpbWUtYmFzZSBjb3VudGVyIG5ldmVyIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUgMHhGRkZGLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBpbmRpY2F0ZXMgdGhlIHRpbWUtYmFzZSBjb3VudGVyIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbMV0gICAgIHxDTlRNQVhGMSAgfFRpbWUtYmFzZSBDb3VudGVyIEVxdWFsIHRvIDB4RkZGRiBMYXRjaGVkIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gaW5kaWNhdGVzIHRoZSB0aW1lLWJhc2UgY291bnRlciBuZXZlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIDB4RkZGRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gaW5kaWNhdGVzIHRoZSB0aW1lLWJhc2UgY291bnRlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzJdICAgICB8Q05UTUFYRjIgIHxUaW1lLWJhc2UgQ291bnRlciBFcXVhbCB0byAweEZGRkYgTGF0Y2hlZCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IGluZGljYXRlcyB0aGUgdGltZS1iYXNlIGNvdW50ZXIgbmV2ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSAweEZGRkYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IGluZGljYXRlcyB0aGUgdGltZS1iYXNlIGNvdW50ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFszXSAgICAgfENOVE1BWEYzICB8VGltZS1iYXNlIENvdW50ZXIgRXF1YWwgdG8gMHhGRkZGIExhdGNoZWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBpbmRpY2F0ZXMgdGhlIHRpbWUtYmFzZSBjb3VudGVyIG5ldmVyIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUgMHhGRkZGLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBpbmRpY2F0ZXMgdGhlIHRpbWUtYmFzZSBjb3VudGVyIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbNF0gICAgIHxDTlRNQVhGNCAgfFRpbWUtYmFzZSBDb3VudGVyIEVxdWFsIHRvIDB4RkZGRiBMYXRjaGVkIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gaW5kaWNhdGVzIHRoZSB0aW1lLWJhc2UgY291bnRlciBuZXZlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIDB4RkZGRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gaW5kaWNhdGVzIHRoZSB0aW1lLWJhc2UgY291bnRlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzVdICAgICB8Q05UTUFYRjUgIHxUaW1lLWJhc2UgQ291bnRlciBFcXVhbCB0byAweEZGRkYgTGF0Y2hlZCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IGluZGljYXRlcyB0aGUgdGltZS1iYXNlIGNvdW50ZXIgbmV2ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSAweEZGRkYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IGluZGljYXRlcyB0aGUgdGltZS1iYXNlIGNvdW50ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFs4XSAgICAgfFNZTkNJTkYwICB8SW5wdXQgU3luY2hyb25pemF0aW9uIExhdGNoZWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gU1lOQ19JTiBldmVudCBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyBhbiBTWU5DX0lOIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFs5XSAgICAgfFNZTkNJTkYyICB8SW5wdXQgU3luY2hyb25pemF0aW9uIExhdGNoZWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gU1lOQ19JTiBldmVudCBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyBhbiBTWU5DX0lOIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxMF0gICAgfFNZTkNJTkY0ICB8SW5wdXQgU3luY2hyb25pemF0aW9uIExhdGNoZWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gU1lOQ19JTiBldmVudCBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyBhbiBTWU5DX0lOIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxNl0gICAgfEVBRENUUkdGMCB8RUFEQyBTdGFydCBvZiBDb252ZXJzaW9uIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIG5vIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxN10gICAgfEVBRENUUkdGMSB8RUFEQyBTdGFydCBvZiBDb252ZXJzaW9uIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIG5vIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxOF0gICAgfEVBRENUUkdGMiB8RUFEQyBTdGFydCBvZiBDb252ZXJzaW9uIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIG5vIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxOV0gICAgfEVBRENUUkdGMyB8RUFEQyBTdGFydCBvZiBDb252ZXJzaW9uIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIG5vIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsyMF0gICAgfEVBRENUUkdGNCB8RUFEQyBTdGFydCBvZiBDb252ZXJzaW9uIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIG5vIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsyMV0gICAgfEVBRENUUkdGNSB8RUFEQyBTdGFydCBvZiBDb252ZXJzaW9uIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIG5vIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsyNF0gICAgfERBQ1RSR0YgICB8REFDIFN0YXJ0IG9mIENvbnZlcnNpb24gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gREFDIHN0YXJ0IG9mIGNvbnZlcnNpb24gdHJpZ2dlciBldmVudCBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyBhbiBEQUMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQKKyAgICAgKiBAdmFyIEVQV01fVDo6SUZBWzZdCisgICAgICogT2Zmc2V0OiAweDEzMCAgRVBXTSBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBSZWdpc3RlciAwfjUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxJRkFDTlQgICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIENvdW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgc2V0cyB0aGUgY291bnQgbnVtYmVyIHdoaWNoIGRlZmluZXMgaG93IG1hbnkgdGltZXMgb2YgRVBXTV9DSG4gcGVyaW9kIG9jY3VycyB0byBzZXQgYml0IElGQUlGbiB0byByZXF1ZXN0IHRoZSBFUFdNIHBlcmlvZCBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBmbGFnIHdpbGwgYmUgc2V0IGluIGV2ZXJ5IElGQUNOVFsxNTowXSB0aW1lcyBvZiBFUFdNIHBlcmlvZC4KKyAgICAgKiB8WzI5OjI4XSB8SUZBU0VMICAgIHxFUFdNX0NIbiBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDTlQgZXF1YWwgdG8gWmVybyBpbiBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDTlQgZXF1YWwgdG8gUEVSSU9EIGluIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENOVCBlcXVhbCB0byBDTVBVIGluIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENOVCBlcXVhbCB0byBDTVBEIGluIGNoYW5uZWwgbi4KKyAgICAgKiB8WzMxXSAgICB8SUZBRU4gICAgIHxFUFdNX0NIbiBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0NIbiBpbnRlcnJ1cHQgZmxhZyBhY2N1bXVsYXRvciBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX0NIbiBpbnRlcnJ1cHQgZmxhZyBhY2N1bXVsYXRvciBlbmFibGUuCisgICAgICogQHZhciBFUFdNX1Q6OkFJTlRTVFMKKyAgICAgKiBPZmZzZXQ6IDB4MTUwICBFUFdNIEFjY3VtdWxhdG9yIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SUZBSUYwICAgIHxFUFdNX0NIbiBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gY29uZGl0aW9uIG1hdGNoIElGQVNFTCBpbiBFUFdNX0lGQW4gcmVnaXN0ZXIsIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxXSAgICAgfElGQUlGMSAgICB8RVBXTV9DSG4gSW50ZXJydXB0IEZsYWcgQWNjdW11bGF0b3IgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGNvbmRpdGlvbiBtYXRjaCBJRkFTRUwgaW4gRVBXTV9JRkFuIHJlZ2lzdGVyLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMl0gICAgIHxJRkFJRjIgICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBjb25kaXRpb24gbWF0Y2ggSUZBU0VMIGluIEVQV01fSUZBbiByZWdpc3Rlciwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzNdICAgICB8SUZBSUYzICAgIHxFUFdNX0NIbiBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gY29uZGl0aW9uIG1hdGNoIElGQVNFTCBpbiBFUFdNX0lGQW4gcmVnaXN0ZXIsIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs0XSAgICAgfElGQUlGNCAgICB8RVBXTV9DSG4gSW50ZXJydXB0IEZsYWcgQWNjdW11bGF0b3IgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGNvbmRpdGlvbiBtYXRjaCBJRkFTRUwgaW4gRVBXTV9JRkFuIHJlZ2lzdGVyLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNV0gICAgIHxJRkFJRjUgICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBjb25kaXRpb24gbWF0Y2ggSUZBU0VMIGluIEVQV01fSUZBbiByZWdpc3Rlciwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiBAdmFyIEVQV01fVDo6QUlOVEVOCisgICAgICogT2Zmc2V0OiAweDE1NCAgRVBXTSBBY2N1bXVsYXRvciBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SUZBSUVOMCAgIHxFUFdNX0NIbiBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IEZsYWcgYWNjdW11bGF0b3IgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8SUZBSUVOMSAgIHxFUFdNX0NIbiBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IEZsYWcgYWNjdW11bGF0b3IgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8SUZBSUVOMiAgIHxFUFdNX0NIbiBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IEZsYWcgYWNjdW11bGF0b3IgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8SUZBSUVOMyAgIHxFUFdNX0NIbiBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IEZsYWcgYWNjdW11bGF0b3IgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8SUZBSUVONCAgIHxFUFdNX0NIbiBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IEZsYWcgYWNjdW11bGF0b3IgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8SUZBSUVONSAgIHxFUFdNX0NIbiBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IEZsYWcgYWNjdW11bGF0b3IgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiBAdmFyIEVQV01fVDo6QVBETUFDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MTU4ICBFUFdNIEFjY3VtdWxhdG9yIFBETUEgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEFQRE1BRU4wICB8Q2hhbm5lbCBOIEFjY3VtdWxhdG9yIFBETUEgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hhbm5lbCBuIFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWwgbiBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQgZm9yIHRoZSBjaGFubmVsIG4gdG8gdHJpZ2dlciBQRE1BIHRvIHRyYW5zZmVyIG1lbW9yeSBkYXRhIHRvIHJlZ2lzdGVyLgorICAgICAqIHxbMV0gICAgIHxBUERNQUVOMSAgfENoYW5uZWwgTiBBY2N1bXVsYXRvciBQRE1BIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENoYW5uZWwgbiBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsIG4gUERNQSBmdW5jdGlvbiBFbmFibGVkIGZvciB0aGUgY2hhbm5lbCBuIHRvIHRyaWdnZXIgUERNQSB0byB0cmFuc2ZlciBtZW1vcnkgZGF0YSB0byByZWdpc3Rlci4KKyAgICAgKiB8WzJdICAgICB8QVBETUFFTjIgIHxDaGFubmVsIE4gQWNjdW11bGF0b3IgUERNQSBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGFubmVsIG4gUERNQSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hhbm5lbCBuIFBETUEgZnVuY3Rpb24gRW5hYmxlZCBmb3IgdGhlIGNoYW5uZWwgbiB0byB0cmlnZ2VyIFBETUEgdG8gdHJhbnNmZXIgbWVtb3J5IGRhdGEgdG8gcmVnaXN0ZXIuCisgICAgICogfFszXSAgICAgfEFQRE1BRU4zICB8Q2hhbm5lbCBOIEFjY3VtdWxhdG9yIFBETUEgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hhbm5lbCBuIFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWwgbiBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQgZm9yIHRoZSBjaGFubmVsIG4gdG8gdHJpZ2dlciBQRE1BIHRvIHRyYW5zZmVyIG1lbW9yeSBkYXRhIHRvIHJlZ2lzdGVyLgorICAgICAqIHxbNF0gICAgIHxBUERNQUVONCAgfENoYW5uZWwgTiBBY2N1bXVsYXRvciBQRE1BIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENoYW5uZWwgbiBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsIG4gUERNQSBmdW5jdGlvbiBFbmFibGVkIGZvciB0aGUgY2hhbm5lbCBuIHRvIHRyaWdnZXIgUERNQSB0byB0cmFuc2ZlciBtZW1vcnkgZGF0YSB0byByZWdpc3Rlci4KKyAgICAgKiB8WzVdICAgICB8QVBETUFFTjUgIHxDaGFubmVsIE4gQWNjdW11bGF0b3IgUERNQSBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGFubmVsIG4gUERNQSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hhbm5lbCBuIFBETUEgZnVuY3Rpb24gRW5hYmxlZCBmb3IgdGhlIGNoYW5uZWwgbiB0byB0cmlnZ2VyIFBETUEgdG8gdHJhbnNmZXIgbWVtb3J5IGRhdGEgdG8gcmVnaXN0ZXIuCisgICAgICogQHZhciBFUFdNX1Q6OkNBUElORU4KKyAgICAgKiBPZmZzZXQ6IDB4MjAwICBFUFdNIENhcHR1cmUgSW5wdXQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q0FQSU5FTjAgIHxDYXB0dXJlIElucHV0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgRVBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gaXMgYWx3YXlzIHJlZ2FyZGVkIGFzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBFUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBjb21lcyBmcm9tIGNvcnJlbGF0aXZlIG11bHRpZnVuY3Rpb24gcGluLgorICAgICAqIHxbMV0gICAgIHxDQVBJTkVOMSAgfENhcHR1cmUgSW5wdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBEaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBFUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBpcyBhbHdheXMgcmVnYXJkZWQgYXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEVQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGNvbWVzIGZyb20gY29ycmVsYXRpdmUgbXVsdGlmdW5jdGlvbiBwaW4uCisgICAgICogfFsyXSAgICAgfENBUElORU4yICB8Q2FwdHVyZSBJbnB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIERpc2FibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEVQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGlzIGFsd2F5cyByZWdhcmRlZCBhcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgRVBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gY29tZXMgZnJvbSBjb3JyZWxhdGl2ZSBtdWx0aWZ1bmN0aW9uIHBpbi4KKyAgICAgKiB8WzNdICAgICB8Q0FQSU5FTjMgIHxDYXB0dXJlIElucHV0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgRVBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gaXMgYWx3YXlzIHJlZ2FyZGVkIGFzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBFUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBjb21lcyBmcm9tIGNvcnJlbGF0aXZlIG11bHRpZnVuY3Rpb24gcGluLgorICAgICAqIHxbNF0gICAgIHxDQVBJTkVONCAgfENhcHR1cmUgSW5wdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBEaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBFUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBpcyBhbHdheXMgcmVnYXJkZWQgYXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEVQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGNvbWVzIGZyb20gY29ycmVsYXRpdmUgbXVsdGlmdW5jdGlvbiBwaW4uCisgICAgICogfFs1XSAgICAgfENBUElORU41ICB8Q2FwdHVyZSBJbnB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIERpc2FibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEVQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGlzIGFsd2F5cyByZWdhcmRlZCBhcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgRVBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gY29tZXMgZnJvbSBjb3JyZWxhdGl2ZSBtdWx0aWZ1bmN0aW9uIHBpbi4KKyAgICAgKiBAdmFyIEVQV01fVDo6Q0FQQ1RMCisgICAgICogT2Zmc2V0OiAweDIwNCAgRVBXTSBDYXB0dXJlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDQVBFTjAgICAgfENhcHR1cmUgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmdW5jdGlvbiBEaXNhYmxlZC4gUkNBUERBVC9GQ0FQREFUIHJlZ2lzdGVyIHdpbGwgbm90IGJlIHVwZGF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZnVuY3Rpb24gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENhcHR1cmUgbGF0Y2hlZCB0aGUgRVBXTSBjb3VudGVyIHZhbHVlIHdoZW4gZGV0ZWN0ZWQgcmlzaW5nIG9yIGZhbGxpbmcgZWRnZSBvZiBpbnB1dCBzaWduYWwgYW5kIHNhdmVkIHRvIFJDQVBEQVQgKFJpc2luZyBsYXRjaCkgYW5kIEZDQVBEQVQgKEZhbGxpbmcgbGF0Y2gpLgorICAgICAqIHxbMV0gICAgIHxDQVBFTjEgICAgfENhcHR1cmUgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmdW5jdGlvbiBEaXNhYmxlZC4gUkNBUERBVC9GQ0FQREFUIHJlZ2lzdGVyIHdpbGwgbm90IGJlIHVwZGF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZnVuY3Rpb24gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENhcHR1cmUgbGF0Y2hlZCB0aGUgRVBXTSBjb3VudGVyIHZhbHVlIHdoZW4gZGV0ZWN0ZWQgcmlzaW5nIG9yIGZhbGxpbmcgZWRnZSBvZiBpbnB1dCBzaWduYWwgYW5kIHNhdmVkIHRvIFJDQVBEQVQgKFJpc2luZyBsYXRjaCkgYW5kIEZDQVBEQVQgKEZhbGxpbmcgbGF0Y2gpLgorICAgICAqIHxbMl0gICAgIHxDQVBFTjIgICAgfENhcHR1cmUgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmdW5jdGlvbiBEaXNhYmxlZC4gUkNBUERBVC9GQ0FQREFUIHJlZ2lzdGVyIHdpbGwgbm90IGJlIHVwZGF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZnVuY3Rpb24gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENhcHR1cmUgbGF0Y2hlZCB0aGUgRVBXTSBjb3VudGVyIHZhbHVlIHdoZW4gZGV0ZWN0ZWQgcmlzaW5nIG9yIGZhbGxpbmcgZWRnZSBvZiBpbnB1dCBzaWduYWwgYW5kIHNhdmVkIHRvIFJDQVBEQVQgKFJpc2luZyBsYXRjaCkgYW5kIEZDQVBEQVQgKEZhbGxpbmcgbGF0Y2gpLgorICAgICAqIHxbM10gICAgIHxDQVBFTjMgICAgfENhcHR1cmUgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmdW5jdGlvbiBEaXNhYmxlZC4gUkNBUERBVC9GQ0FQREFUIHJlZ2lzdGVyIHdpbGwgbm90IGJlIHVwZGF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZnVuY3Rpb24gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENhcHR1cmUgbGF0Y2hlZCB0aGUgRVBXTSBjb3VudGVyIHZhbHVlIHdoZW4gZGV0ZWN0ZWQgcmlzaW5nIG9yIGZhbGxpbmcgZWRnZSBvZiBpbnB1dCBzaWduYWwgYW5kIHNhdmVkIHRvIFJDQVBEQVQgKFJpc2luZyBsYXRjaCkgYW5kIEZDQVBEQVQgKEZhbGxpbmcgbGF0Y2gpLgorICAgICAqIHxbNF0gICAgIHxDQVBFTjQgICAgfENhcHR1cmUgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmdW5jdGlvbiBEaXNhYmxlZC4gUkNBUERBVC9GQ0FQREFUIHJlZ2lzdGVyIHdpbGwgbm90IGJlIHVwZGF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZnVuY3Rpb24gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENhcHR1cmUgbGF0Y2hlZCB0aGUgRVBXTSBjb3VudGVyIHZhbHVlIHdoZW4gZGV0ZWN0ZWQgcmlzaW5nIG9yIGZhbGxpbmcgZWRnZSBvZiBpbnB1dCBzaWduYWwgYW5kIHNhdmVkIHRvIFJDQVBEQVQgKFJpc2luZyBsYXRjaCkgYW5kIEZDQVBEQVQgKEZhbGxpbmcgbGF0Y2gpLgorICAgICAqIHxbNV0gICAgIHxDQVBFTjUgICAgfENhcHR1cmUgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmdW5jdGlvbiBEaXNhYmxlZC4gUkNBUERBVC9GQ0FQREFUIHJlZ2lzdGVyIHdpbGwgbm90IGJlIHVwZGF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZnVuY3Rpb24gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENhcHR1cmUgbGF0Y2hlZCB0aGUgRVBXTSBjb3VudGVyIHZhbHVlIHdoZW4gZGV0ZWN0ZWQgcmlzaW5nIG9yIGZhbGxpbmcgZWRnZSBvZiBpbnB1dCBzaWduYWwgYW5kIHNhdmVkIHRvIFJDQVBEQVQgKFJpc2luZyBsYXRjaCkgYW5kIEZDQVBEQVQgKEZhbGxpbmcgbGF0Y2gpLgorICAgICAqIHxbOF0gICAgIHxDQVBJTlYwICAgfENhcHR1cmUgSW52ZXJ0ZXIgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgc291cmNlIGludmVydGVyIEVuYWJsZWQuIFJldmVyc2UgdGhlIGlucHV0IHNpZ25hbCBmcm9tIEdQSU8uCisgICAgICogfFs5XSAgICAgfENBUElOVjEgICB8Q2FwdHVyZSBJbnZlcnRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRW5hYmxlZC4gUmV2ZXJzZSB0aGUgaW5wdXQgc2lnbmFsIGZyb20gR1BJTy4KKyAgICAgKiB8WzEwXSAgICB8Q0FQSU5WMiAgIHxDYXB0dXJlIEludmVydGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgc291cmNlIGludmVydGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBFbmFibGVkLiBSZXZlcnNlIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBHUElPLgorICAgICAqIHxbMTFdICAgIHxDQVBJTlYzICAgfENhcHR1cmUgSW52ZXJ0ZXIgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgc291cmNlIGludmVydGVyIEVuYWJsZWQuIFJldmVyc2UgdGhlIGlucHV0IHNpZ25hbCBmcm9tIEdQSU8uCisgICAgICogfFsxMl0gICAgfENBUElOVjQgICB8Q2FwdHVyZSBJbnZlcnRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRW5hYmxlZC4gUmV2ZXJzZSB0aGUgaW5wdXQgc2lnbmFsIGZyb20gR1BJTy4KKyAgICAgKiB8WzEzXSAgICB8Q0FQSU5WNSAgIHxDYXB0dXJlIEludmVydGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgc291cmNlIGludmVydGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBFbmFibGVkLiBSZXZlcnNlIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBHUElPLgorICAgICAqIHxbMTZdICAgIHxSQ1JMREVOMCAgfFJpc2luZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRW5hYmxlZC4KKyAgICAgKiB8WzE3XSAgICB8UkNSTERFTjEgIHxSaXNpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsxOF0gICAgfFJDUkxERU4yICB8UmlzaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMTldICAgIHxSQ1JMREVOMyAgfFJpc2luZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRW5hYmxlZC4KKyAgICAgKiB8WzIwXSAgICB8UkNSTERFTjQgIHxSaXNpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyMV0gICAgfFJDUkxERU41ICB8UmlzaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjRdICAgIHxGQ1JMREVOMCAgfEZhbGxpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRW5hYmxlZC4KKyAgICAgKiB8WzI1XSAgICB8RkNSTERFTjEgIHxGYWxsaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyNl0gICAgfEZDUkxERU4yICB8RmFsbGluZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjddICAgIHxGQ1JMREVOMyAgfEZhbGxpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRW5hYmxlZC4KKyAgICAgKiB8WzI4XSAgICB8RkNSTERFTjQgIHxGYWxsaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyOV0gICAgfEZDUkxERU41ICB8RmFsbGluZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIEB2YXIgRVBXTV9UOjpDQVBTVFMKKyAgICAgKiBPZmZzZXQ6IDB4MjA4ICBFUFdNIENhcHR1cmUgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q1JMSUZPVjAgIHxDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgcmlzaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ1JMSUYgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDUkxJRi4KKyAgICAgKiB8WzFdICAgICB8Q1JMSUZPVjEgIHxDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgcmlzaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ1JMSUYgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDUkxJRi4KKyAgICAgKiB8WzJdICAgICB8Q1JMSUZPVjIgIHxDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgcmlzaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ1JMSUYgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDUkxJRi4KKyAgICAgKiB8WzNdICAgICB8Q1JMSUZPVjMgIHxDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgcmlzaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ1JMSUYgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDUkxJRi4KKyAgICAgKiB8WzRdICAgICB8Q1JMSUZPVjQgIHxDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgcmlzaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ1JMSUYgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDUkxJRi4KKyAgICAgKiB8WzVdICAgICB8Q1JMSUZPVjUgIHxDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgcmlzaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ1JMSUYgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDUkxJRi4KKyAgICAgKiB8WzhdICAgICB8Q0ZMSUZPVjAgIHxDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcgT3ZlcnJ1biBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIGlmIGZhbGxpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDRkxJRiBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENGTElGLgorICAgICAqIHxbOV0gICAgIHxDRkxJRk9WMSAgfENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgZmFsbGluZyBsYXRjaCBoYXBwZW5lZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIENGTElGIGlzIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0ZMSUYuCisgICAgICogfFsxMF0gICAgfENGTElGT1YyICB8Q2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiBmYWxsaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0ZMSUYgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDRkxJRi4KKyAgICAgKiB8WzExXSAgICB8Q0ZMSUZPVjMgIHxDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcgT3ZlcnJ1biBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIGlmIGZhbGxpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDRkxJRiBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENGTElGLgorICAgICAqIHxbMTJdICAgIHxDRkxJRk9WNCAgfENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgZmFsbGluZyBsYXRjaCBoYXBwZW5lZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIENGTElGIGlzIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0ZMSUYuCisgICAgICogfFsxM10gICAgfENGTElGT1Y1ICB8Q2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiBmYWxsaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0ZMSUYgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDRkxJRi4KKyAgICAgKiBAdmFyIEVQV01fVDo6UERNQUNUTAorICAgICAqIE9mZnNldDogMHgyM0MgIEVQV00gUERNQSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q0hFTjBfMSAgIHxDaGFubmVsIDAvMSBQRE1BIEVuYWJsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGFubmVsIDAvMSBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsIDAvMSBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQgZm9yIHRoZSBjaGFubmVsIDAvMSBjYXB0dXJlZCBkYXRhIGFuZCB0cmFuc2ZlciB0byBtZW1vcnkuCisgICAgICogfFsyOjFdICAgfENBUE1PRDBfMSB8U2VsZWN0IEVQV01fUkNBUERBVDAvMSBvciBFUFdNX0ZDQVBEQVQwLzEgdG8gRG8gUERNQSBUcmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNX1JDQVBEQVQwLzEgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNX0ZDQVBEQVQwLzEgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCb3RoIEVQV01fUkNBUERBVDAvMSBhbmQgRVBXTV9GQ0FQREFUMC8xIHJlZ2lzdGVycy4KKyAgICAgKiB8WzNdICAgICB8Q0FQT1JEMF8xIHxDYXB0dXJlIENoYW5uZWwgMC8xIFJpc2luZy9GYWxsaW5nIE9yZGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRoaXMgYml0IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBFUFdNX1JDQVBEQVQwLzEgb3IgRVBXTV9GQ0FQREFUMC8xIHJlZ2lzdGVyIGlzIHRoZSBmaXJzdCBjYXB0dXJlZCBkYXRhIHRyYW5zZmVycmVkIHRvIG1lbW9yeSB0aHJvdWdoIFBETUEgd2hlbiBDQVBNT0QwXzEgYml0cyBhcmUgc2V0IHRvID0gMHgzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0ZDQVBEQVQwLzEgcmVnaXN0ZXIgaXMgdGhlIGZpcnN0IGNhcHR1cmVkIGRhdGEgdG8gbWVtb3J5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX1JDQVBEQVQwLzEgcmVnaXN0ZXIgaXMgdGhlIGZpcnN0IGNhcHR1cmVkIGRhdGEgdG8gbWVtb3J5LgorICAgICAqIHxbNF0gICAgIHxDSFNFTDBfMSAgfFNlbGVjdCBDaGFubmVsIDAvMSB0byBEbyBQRE1BIFRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENoYW5uZWwwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsMS4KKyAgICAgKiB8WzhdICAgICB8Q0hFTjJfMyAgIHxDaGFubmVsIDIvMyBQRE1BIEVuYWJsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGFubmVsIDIvMyBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsIDIvMyBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQgZm9yIHRoZSBjaGFubmVsIDIvMyBjYXB0dXJlZCBkYXRhIGFuZCB0cmFuc2ZlciB0byBtZW1vcnkuCisgICAgICogfFsxMDo5XSAgfENBUE1PRDJfMyB8U2VsZWN0IEVQV01fUkNBUERBVDIvMyBvciBFUFdNX0ZDQU9EQVQyLzMgdG8gRG8gUERNQSBUcmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNX1JDQVBEQVQyLzMgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNX0ZDQVBEQVQyLzMgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCb3RoIEVQV01fUkNBUERBVDIvMyBhbmQgRVBXTV9GQ0FQREFUMi8zIHJlZ2lzdGVycy4KKyAgICAgKiB8WzExXSAgICB8Q0FQT1JEMl8zIHxDYXB0dXJlIENoYW5uZWwgMi8zIFJpc2luZy9GYWxsaW5nIE9yZGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRoaXMgYml0IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBFUFdNX1JDQVBEQVQyLzMgb3IgRVBXTV9GQ0FQREFUMi8zIHJlZ2lzdGVyIGlzIHRoZSBmaXJzdCBjYXB0dXJlZCBkYXRhIHRyYW5zZmVycmVkIHRvIG1lbW9yeSB0aHJvdWdoIFBETUEgd2hlbiBDQVBNT0QyXzMgYml0cyBhcmUgc2V0IHRvID0weDMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV01fRkNBUERBVDIvMyByZWdpc3RlciBpcyB0aGUgZmlyc3QgY2FwdHVyZWQgZGF0YSB0byBtZW1vcnkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV01fUkNBUERBVDIvMyByZWdpc3RlciBpcyB0aGUgZmlyc3QgY2FwdHVyZWQgZGF0YSB0byBtZW1vcnkuCisgICAgICogfFsxMl0gICAgfENIU0VMMl8zICB8U2VsZWN0IENoYW5uZWwgMi8zIHRvIERvIFBETUEgVHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hhbm5lbDIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWwzLgorICAgICAqIHxbMTZdICAgIHxDSEVONF81ICAgfENoYW5uZWwgNC81IFBETUEgRW5hYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENoYW5uZWwgNC81IFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWwgNC81IFBETUEgZnVuY3Rpb24gRW5hYmxlZCBmb3IgdGhlIGNoYW5uZWwgNC81IGNhcHR1cmVkIGRhdGEgYW5kIHRyYW5zZmVyIHRvIG1lbW9yeS4KKyAgICAgKiB8WzE4OjE3XSB8Q0FQTU9ENF81IHxTZWxlY3QgRVBXTV9SQ0FQREFUNC81IG9yIEVQV01fRkNBUERBVDQvNSB0byBEbyBQRE1BIFRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV01fUkNBUERBVDQvNSByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV01fRkNBUERBVDQvNSByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJvdGggRVBXTV9SQ0FQREFUNC81IGFuZCBFUFdNX0ZDQVBEQVQ0LzUgcmVnaXN0ZXJzLgorICAgICAqIHxbMTldICAgIHxDQVBPUkQ0XzUgfENhcHR1cmUgQ2hhbm5lbCA0LzUgUmlzaW5nL0ZhbGxpbmcgT3JkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEVQV01fUkNBUERBVDQvNSBvciBFUFdNX0ZDQVBEQVQ0LzUgcmVnaXN0ZXIgaXMgdGhlIGZpcnN0IGNhcHR1cmVkIGRhdGEgdHJhbnNmZXJyZWQgdG8gbWVtb3J5IHRocm91Z2ggUERNQSB3aGVuIENBUE1PRDRfNSBiaXRzID1hcmUgc2V0IHRvIDB4My4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTV9GQ0FQREFUNC81IHJlZ2lzdGVyIGlzIHRoZSBmaXJzdCBjYXB0dXJlZCBkYXRhIHRvIG1lbW9yeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTV9SQ0FQREFUNC81IHJlZ2lzdGVyIGlzIHRoZSBmaXJzdCBjYXB0dXJlZCBkYXRhIHRvIG1lbW9yeS4KKyAgICAgKiB8WzIwXSAgICB8Q0hTRUw0XzUgIHxTZWxlY3QgQ2hhbm5lbCA0LzUgdG8gRG8gUERNQSBUcmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGFubmVsNC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hhbm5lbDUuCisgICAgICogQHZhciBFUFdNX1Q6OlBETUFDQVBbM10KKyAgICAgKiBPZmZzZXQ6IDB4MjQwICBFUFdNIENhcHR1cmUgQ2hhbm5lbCAwMSBQRE1BIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8Q0FQQlVGICAgIHxFUFdNIENhcHR1cmUgUERNQSBSZWdpc3RlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgaXMgdXNlIGFzIGEgYnVmZmVyIHRvIHRyYW5zZmVyIEVQV00gY2FwdHVyZSByaXNpbmcgb3IgZmFsbGluZyBkYXRhIHRvIG1lbW9yeSBieSBQRE1BLgorICAgICAqIEB2YXIgRVBXTV9UOjpDQVBJRU4KKyAgICAgKiBPZmZzZXQ6IDB4MjUwICBFUFdNIENhcHR1cmUgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENBUFJJRU4wICB8RVBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSByaXNpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDQVBSSUVOMCBiaXQgbXVzdCBiZSBkaXNhYmxlZC4KKyAgICAgKiB8WzFdICAgICB8Q0FQUklFTjEgIHxFUFdNIENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHJpc2luZyBlZGdlIGxhdGNoIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENBUFJJRU4xIGJpdCBtdXN0IGJlIGRpc2FibGVkLgorICAgICAqIHxbMl0gICAgIHxDQVBSSUVOMiAgfEVQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgcmlzaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHJpc2luZyBlZGdlIGxhdGNoIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ0FQUklFTjIgYml0IG11c3QgYmUgZGlzYWJsZWQuCisgICAgICogfFszXSAgICAgfENBUFJJRU4zICB8RVBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSByaXNpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDQVBSSUVOMyBiaXQgbXVzdCBiZSBkaXNhYmxlZC4KKyAgICAgKiB8WzRdICAgICB8Q0FQUklFTjQgIHxFUFdNIENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHJpc2luZyBlZGdlIGxhdGNoIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENBUFJJRU40IGJpdCBtdXN0IGJlIGRpc2FibGVkLgorICAgICAqIHxbNV0gICAgIHxDQVBSSUVONSAgfEVQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgcmlzaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHJpc2luZyBlZGdlIGxhdGNoIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ0FQUklFTjUgYml0IG11c3QgYmUgZGlzYWJsZWQuCisgICAgICogfFs4XSAgICAgfENBUEZJRU4wICB8RVBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgZmFsbGluZyBlZGdlIGxhdGNoIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmYWxsaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDQVBGSUVOMCBiaXQgbXVzdCBiZSBkaXNhYmxlZC4KKyAgICAgKiB8WzldICAgICB8Q0FQRklFTjEgIHxFUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmYWxsaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENBUEZJRU4xIGJpdCBtdXN0IGJlIGRpc2FibGVkLgorICAgICAqIHxbMTBdICAgIHxDQVBGSUVOMiAgfEVQV00gQ2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZhbGxpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBlZGdlIGxhdGNoIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ0FQRklFTjIgYml0IG11c3QgYmUgZGlzYWJsZWQuCisgICAgICogfFsxMV0gICAgfENBUEZJRU4zICB8RVBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgZmFsbGluZyBlZGdlIGxhdGNoIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmYWxsaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDQVBGSUVOMyBiaXQgbXVzdCBiZSBkaXNhYmxlZC4KKyAgICAgKiB8WzEyXSAgICB8Q0FQRklFTjQgIHxFUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmYWxsaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENBUEZJRU40IGJpdCBtdXN0IGJlIGRpc2FibGVkLgorICAgICAqIHxbMTNdICAgIHxDQVBGSUVONSAgfEVQV00gQ2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZhbGxpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBlZGdlIGxhdGNoIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ0FQRklFTjUgYml0IG11c3QgYmUgZGlzYWJsZWQuCisgICAgICogQHZhciBFUFdNX1Q6OkNBUElGCisgICAgICogT2Zmc2V0OiAweDI1NCAgRVBXTSBDYXB0dXJlIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q1JMSUYwICAgIHxFUFdNIENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDUkxJRjAgYml0IHdpbGwgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBQRE1BIHRyYW5zZmVyIGRhdGEuCisgICAgICogfFsxXSAgICAgfENSTElGMSAgICB8RVBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ1JMSUYxIGJpdCB3aWxsIGNsZWFyZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgUERNQSB0cmFuc2ZlciBkYXRhLgorICAgICAqIHxbMl0gICAgIHxDUkxJRjIgICAgfEVQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENSTElGMiBiaXQgd2lsbCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIFBETUEgdHJhbnNmZXIgZGF0YS4KKyAgICAgKiB8WzNdICAgICB8Q1JMSUYzICAgIHxFUFdNIENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDUkxJRjMgYml0IHdpbGwgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBQRE1BIHRyYW5zZmVyIGRhdGEuCisgICAgICogfFs0XSAgICAgfENSTElGNCAgICB8RVBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ1JMSUY0IGJpdCB3aWxsIGNsZWFyZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgUERNQSB0cmFuc2ZlciBkYXRhLgorICAgICAqIHxbNV0gICAgIHxDUkxJRjUgICAgfEVQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENSTElGNSBiaXQgd2lsbCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIFBETUEgdHJhbnNmZXIgZGF0YS4KKyAgICAgKiB8WzhdICAgICB8Q0ZMSUYwICAgIHxFUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDRkxJRjAgYml0IHdpbGwgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBQRE1BIHRyYW5zZmVyIGRhdGEuCisgICAgICogfFs5XSAgICAgfENGTElGMSAgICB8RVBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ0ZMSUYxIGJpdCB3aWxsIGNsZWFyZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgUERNQSB0cmFuc2ZlciBkYXRhLgorICAgICAqIHxbMTBdICAgIHxDRkxJRjIgICAgfEVQV00gQ2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENGTElGMiBiaXQgd2lsbCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIFBETUEgdHJhbnNmZXIgZGF0YS4KKyAgICAgKiB8WzExXSAgICB8Q0ZMSUYzICAgIHxFUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDRkxJRjMgYml0IHdpbGwgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBQRE1BIHRyYW5zZmVyIGRhdGEuCisgICAgICogfFsxMl0gICAgfENGTElGNCAgICB8RVBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ0ZMSUY0IGJpdCB3aWxsIGNsZWFyZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgUERNQSB0cmFuc2ZlciBkYXRhLgorICAgICAqIHxbMTNdICAgIHxDRkxJRjUgICAgfEVQV00gQ2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgQ0FQSUYgY29ycmVzcG9uZGluZyBjaGFubmVsIENGTElGIHdpbGwgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBQRE1BIHRyYW5zZmVyIGRhdGEuCisgICAgICogQHZhciBFUFdNX1Q6OlBCVUZbNl0KKyAgICAgKiBPZmZzZXQ6IDB4MzA0ICBFUFdNIFBFUklPRDB+NSBCdWZmZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxQQlVGICAgICAgfEVQV00gUGVyaW9kIFJlZ2lzdGVyIEJ1ZmZlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZWQgYXMgUEVSSU9EIGFjdGl2ZSByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEVQV01fVDo6Q01QQlVGWzZdCisgICAgICogT2Zmc2V0OiAweDMxQyAgRVBXTSBDTVBEQVQwfjUgQnVmZmVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8Q01QQlVGICAgIHxFUFdNIENvbXBhcmF0b3IgUmVnaXN0ZXIgQnVmZmVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlZCBhcyBDTVAgYWN0aXZlIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRVBXTV9UOjpDUFNDQlVGWzNdCisgICAgICogT2Zmc2V0OiAweDMzNCAgRVBXTSBDTEtQU0MwXzEvMl8zLzRfNSBCdWZmZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTE6MF0gIHxDUFNDQlVGICAgfEVQV00gQ291bnRlciBDbG9jayBQcmVzY2FsZSBCdWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2UgYXMgRVBXTSBjb3VudGVyIGNsb2NrIHByZXNjYWxlIGFjdGl2ZSByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEVQV01fVDo6RlRDQlVGWzNdCisgICAgICogT2Zmc2V0OiAweDM0MCAgRVBXTSBGVENNUERBVDBfMS8yXzMvNF81IEJ1ZmZlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfEZUQ01QQlVGICB8RVBXTSBGVENNUERBVCBCdWZmZXIgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VkIGFzIEZUQ01QREFUIGFjdGl2ZSByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEVQV01fVDo6RlRDSQorICAgICAqIE9mZnNldDogMHgzNEMgIEVQV00gRlRDTVBEQVQgSW5kaWNhdG9yIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8RlRDTVUwICAgIHxFUFdNIEZUQ01QREFUIFVwIEluZGljYXRvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRvciB3aWxsIGJlIHNldCB0byBoaWdoIHdoZW4gRlRDTVBEQVRuIGVxdWFsIHRvIENOVG4gYW5kIERJUkY9MSwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxXSAgICAgfEZUQ01VMiAgICB8RVBXTSBGVENNUERBVCBVcCBJbmRpY2F0b3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0b3Igd2lsbCBiZSBzZXQgdG8gaGlnaCB3aGVuIEZUQ01QREFUbiBlcXVhbCB0byBDTlRuIGFuZCBESVJGPTEsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbMl0gICAgIHxGVENNVTQgICAgfEVQV00gRlRDTVBEQVQgVXAgSW5kaWNhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdG9yIHdpbGwgYmUgc2V0IHRvIGhpZ2ggd2hlbiBGVENNUERBVG4gZXF1YWwgdG8gQ05UbiBhbmQgRElSRj0xLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzhdICAgICB8RlRDTUQwICAgIHxFUFdNIEZUQ01QREFUIERvd24gSW5kaWNhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdG9yIHdpbGwgYmUgc2V0IHRvIGhpZ2ggd2hlbiBGVENNUERBVG4gZXF1YWwgdG8gQ05UbiBhbmQgRElSRj0wLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzldICAgICB8RlRDTUQyICAgIHxFUFdNIEZUQ01QREFUIERvd24gSW5kaWNhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdG9yIHdpbGwgYmUgc2V0IHRvIGhpZ2ggd2hlbiBGVENNUERBVG4gZXF1YWwgdG8gQ05UbiBhbmQgRElSRj0wLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzEwXSAgICB8RlRDTUQ0ICAgIHxFUFdNIEZUQ01QREFUIERvd24gSW5kaWNhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdG9yIHdpbGwgYmUgc2V0IHRvIGhpZ2ggd2hlbiBGVENNUERBVG4gZXF1YWwgdG8gQ05UbiBhbmQgRElSRj0wLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDA7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBFUFdNIENvbnRyb2wgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMMTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIEVQV00gQ29udHJvbCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTWU5DOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gRVBXTSBTeW5jaHJvbml6YXRpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNXU1lOQzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDBjXSBFUFdNIFNvZnR3YXJlIENvbnRyb2wgU3luY2hyb25pemF0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0xLU1JDOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIEVQV00gQ2xvY2sgU291cmNlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTEtQU0NbM107ICAgICAgICAgICAgIC8qITwgWzB4MDAxNH4weDAwMWNdIEVQV00gQ2xvY2sgUHJlc2NhbGUgUmVnaXN0ZXIgMF8xLDJfMyw0XzUgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENOVEVOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDIwXSBFUFdNIENvdW50ZXIgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ05UQ0xSOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjRdIEVQV00gQ2xlYXIgQ291bnRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBMT0FEOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyOF0gRVBXTSBMb2FkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzFdOworICAgIF9fSU8gdWludDMyX3QgUEVSSU9EWzZdOyAgICAgICAgICAgICAvKiE8IFsweDAwMzB+MHgwMDQ0XSAgRVBXTSBQZXJpb2QgUmVnaXN0ZXIgMH41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVsyXTsKKyAgICBfX0lPIHVpbnQzMl90IENNUERBVFs2XTsgICAgICAgICAgICAgLyohPCBbMHgwMDUwfjB4MDA2NF0gIEVQV00gQ29tcGFyYXRvciBSZWdpc3RlciAwfjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTJbMl07CisgICAgX19JTyB1aW50MzJfdCBEVENUTFszXTsgICAgICAgICAgICAgIC8qITwgWzB4MDA3MH4weDAwNzhdIEVQV00gRGVhZC1UaW1lIENvbnRyb2wgUmVnaXN0ZXIgMF8xLDJfMyw0XzUgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUzWzFdOworICAgIF9fSU8gdWludDMyX3QgUEhTWzNdOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwODB+MHgwMDg4XSBFUFdNIENvdW50ZXIgUGhhc2UgUmVnaXN0ZXIgMF8xLDJfMyw0XzUgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFNFsxXTsKKyAgICBfX0kgIHVpbnQzMl90IENOVFs2XTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDkwfjB4MDBBNCAgRVBXTSBDb3VudGVyIFJlZ2lzdGVyIDB+NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTVbMl07CisgICAgX19JTyB1aW50MzJfdCBXR0NUTDA7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDBiMF0gRVBXTSBHZW5lcmF0aW9uIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFdHQ1RMMTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMGI0XSBFUFdNIEdlbmVyYXRpb24gUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTVNLRU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwYjhdIEVQV00gTWFzayBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBNU0s7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDBiY10gRVBXTSBNYXNrIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEJORjsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMGMwXSBFUFdNIEJyYWtlIE5vaXNlIEZpbHRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRkFJTEJSSzsgICAgICAgICAgICAgICAvKiE8IFsweDAwYzRdIEVQV00gU3lzdGVtIEZhaWwgQnJha2UgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCUktDVExbM107ICAgICAgICAgICAgIC8qITwgWzB4MDBjOH4weDAwZDBdIEVQV00gQnJha2UgRWRnZSBEZXRlY3QgQ29udHJvbCBSZWdpc3RlciAwXzEsMl8zLDRfNSAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBPTENUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMGQ0XSBFUFdNIFBpbiBQb2xhciBJbnZlcnNlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUE9FTjsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwZDhdIEVQV00gT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBTV0JSSzsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDBkY10gRVBXTSBTb2Z0d2FyZSBCcmFrZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVEVOMDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMGUwXSBFUFdNIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5URU4xOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwZTRdIEVQV00gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRTVFMwOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBlOF0gRVBXTSBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVFNUUzE7ICAgICAgICAgICAgICAgLyohPCBbMHgwMGVjXSBFUFdNIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTZbMV07CisgICAgX19JTyB1aW50MzJfdCBEQUNUUkdFTjsgICAgICAgICAgICAgIC8qITwgWzB4MDBmNF0gRVBXTSBUcmlnZ2VyIERBQyBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEVBRENUUzA7ICAgICAgICAgICAgICAgLyohPCBbMHgwMGY4XSBFUFdNIFRyaWdnZXIgRUFEQyBTb3VyY2UgU2VsZWN0IFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRUFEQ1RTMTsgICAgICAgICAgICAgICAvKiE8IFsweDAwZmNdIEVQV00gVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBGVENNUERBVFszXTsgICAgICAgICAgIC8qITwgWzB4MDEwMH4weDEwOF0gRVBXTSBGcmVlIFRyaWdnZXIgQ29tcGFyZSBSZWdpc3RlciAwXzEsMl8zLDRfNSAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU3WzFdOworICAgIF9fSU8gdWludDMyX3QgU1NDVEw7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAxMTBdIEVQV00gU3luY2hyb25vdXMgU3RhcnQgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBTU1RSRzsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDExNF0gRVBXTSBTeW5jaHJvbm91cyBTdGFydCBUcmlnZ2VyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IExFQkNUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMTE4XSBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTEVCQ05UOyAgICAgICAgICAgICAgICAvKiE8IFsweDAxMWNdIEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIENvdW50ZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTVEFUVVM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDEyMF0gRVBXTSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU4WzNdOworICAgIF9fSU8gdWludDMyX3QgSUZBWzZdOyAgICAgICAgICAgICAgICAvKiE8IFsweDAxMzB+MHgxNDRdIEVQV00gSW50ZXJydXB0IEZsYWcgQWNjdW11bGF0b3IgUmVnaXN0ZXIgMH41ICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFOVsyXTsKKyAgICBfX0lPIHVpbnQzMl90IEFJTlRTVFM7ICAgICAgICAgICAgICAgLyohPCBbMHgwMTUwXSBFUFdNIEFjY3VtdWxhdG9yIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUlOVEVOOyAgICAgICAgICAgICAgICAvKiE8IFsweDAxNTRdIEVQV00gQWNjdW11bGF0b3IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBUERNQUNUTDsgICAgICAgICAgICAgIC8qITwgWzB4MDE1OF0gRVBXTSBBY2N1bXVsYXRvciBQRE1BIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxMFs0MV07CisgICAgX19JTyB1aW50MzJfdCBDQVBJTkVOOyAgICAgICAgICAgICAgIC8qITwgWzB4MDIwMF0gRVBXTSBDYXB0dXJlIElucHV0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENBUENUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMjA0XSBFUFdNIENhcHR1cmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQ0FQU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAyMDhdIEVQV00gQ2FwdHVyZSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRUNBUERBVF9UIENBUERBVFs2XTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAyMGN+MHgwMjM4XSBFUFdNIFJpc2luZyBhbmQgRmFsbGluZyBDYXB0dXJlIERhdGEgUmVnaXN0ZXIgMH41ICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBETUFDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMjNjXSBFUFdNIFBETUEgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUERNQUNBUFszXTsgICAgICAgICAgICAvKiE8IFsweDAyNDB+MHgyNDhdIEVQV00gQ2FwdHVyZSBDaGFubmVsIDBfMSwyXzMsNF81IFBETUEgUmVnaXN0ZXIgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMTFbMV07CisgICAgX19JTyB1aW50MzJfdCBDQVBJRU47ICAgICAgICAgICAgICAgIC8qITwgWzB4MDI1MF0gRVBXTSBDYXB0dXJlIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENBUElGOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMjU0XSBFUFdNIENhcHR1cmUgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTEyWzQzXTsKKyAgICBfX0kgIHVpbnQzMl90IFBCVUZbNl07ICAgICAgICAgICAgICAgLyohPCBbMHgwMzA0fjB4MDMxOCAgRVBXTSBQRVJJT0QwfjUgQnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQ01QQlVGWzZdOyAgICAgICAgICAgICAvKiE8IFsweDAzMUN+MHgwMzMwICBFUFdNIENNUERBVDB+NSBCdWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBDUFNDQlVGWzNdOyAgICAgICAgICAgIC8qITwgWzB4MDMzNH4weDMzY10gRVBXTSBDTEtQU0MwXzEsMl8zLDRfNSBCdWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEZUQ0JVRlszXTsgICAgICAgICAgICAgLyohPCBbMHgwMzQwfjB4MzQ4XSBFUFdNIEZUQ01QREFUMF8xLDJfMyw0XzUgQnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRlRDSTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAzNGNdIEVQV00gRlRDTVBEQVQgSW5kaWNhdG9yIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gRVBXTV9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBFUFdNX0NPTlNUIEVQV00gQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgRVBXTSBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9DVFJMRDBfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBDVFJMRDAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9DVFJMRDBfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0NUUkxEMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBDVFJMRDAgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRVBXTV9DVEwwX0NUUkxEMV9Qb3MgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IENUUkxEMSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRVBXTV9DVEwwX0NUUkxEMV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFUFdNX0NUTDBfQ1RSTEQxX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IENUUkxEMSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfQ1RSTEQyX1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogQ1RSTEQyIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfQ1RSTEQyX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9DVFJMRDJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IENUUkxEMiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfQ1RSTEQzX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogQ1RSTEQzIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfQ1RSTEQzX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9DVFJMRDNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IENUUkxEMyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfQ1RSTEQ0X1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogQ1RSTEQ0IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfQ1RSTEQ0X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9DVFJMRDRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IENUUkxENCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfQ1RSTEQ1X1BvcyAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogQ1RSTEQ1IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfQ1RSTEQ1X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9DVFJMRDVfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IENUUkxENSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfV0lOTERFTjBfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogV0lOTERFTjAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfV0lOTERFTjBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9XSU5MREVOMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IFdJTkxERU4wIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfV0lOTERFTjFfUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogV0lOTERFTjEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfV0lOTERFTjFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9XSU5MREVOMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IFdJTkxERU4xIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfV0lOTERFTjJfUG9zICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogV0lOTERFTjIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfV0lOTERFTjJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9XSU5MREVOMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IFdJTkxERU4yIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfV0lOTERFTjNfUG9zICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogV0lOTERFTjMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfV0lOTERFTjNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9XSU5MREVOM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IFdJTkxERU4zIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfV0lOTERFTjRfUG9zICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogV0lOTERFTjQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfV0lOTERFTjRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9XSU5MREVONF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IFdJTkxERU40IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfV0lOTERFTjVfUG9zICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogV0lOTERFTjUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfV0lOTERFTjVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9XSU5MREVONV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IFdJTkxERU41IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfSU1NTERFTjBfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogSU1NTERFTjAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfSU1NTERFTjBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9JTU1MREVOMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IElNTUxERU4wIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfSU1NTERFTjFfUG9zICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogSU1NTERFTjEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfSU1NTERFTjFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9JTU1MREVOMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IElNTUxERU4xIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfSU1NTERFTjJfUG9zICAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogSU1NTERFTjIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfSU1NTERFTjJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9JTU1MREVOMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IElNTUxERU4yIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfSU1NTERFTjNfUG9zICAgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogSU1NTERFTjMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfSU1NTERFTjNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9JTU1MREVOM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IElNTUxERU4zIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfSU1NTERFTjRfUG9zICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogSU1NTERFTjQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfSU1NTERFTjRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9JTU1MREVONF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IElNTUxERU40IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfSU1NTERFTjVfUG9zICAgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogSU1NTERFTjUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfSU1NTERFTjVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9JTU1MREVONV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IElNTUxERU41IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfR1JPVVBFTl9Qb3MgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogR1JPVVBFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfR1JPVVBFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9HUk9VUEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IEdST1VQRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfREJHSEFMVF9Qb3MgICAgICAgICAgICAgKDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogREJHSEFMVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfREJHSEFMVF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9EQkdIQUxUX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IERCR0hBTFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfREJHVFJJT0ZGX1BvcyAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogREJHVFJJT0ZGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfREJHVFJJT0ZGX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9EQkdUUklPRkZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IERCR1RSSU9GRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfQ05UVFlQRTBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UVFlQRTAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfQ05UVFlQRTBfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fQ1RMMV9DTlRUWVBFMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IENOVFRZUEUwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfQ05UVFlQRTFfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UVFlQRTEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfQ05UVFlQRTFfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fQ1RMMV9DTlRUWVBFMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IENOVFRZUEUxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfQ05UVFlQRTJfUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UVFlQRTIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfQ05UVFlQRTJfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fQ1RMMV9DTlRUWVBFMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IENOVFRZUEUyIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfQ05UVFlQRTNfUG9zICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UVFlQRTMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfQ05UVFlQRTNfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fQ1RMMV9DTlRUWVBFM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IENOVFRZUEUzIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfQ05UVFlQRTRfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UVFlQRTQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfQ05UVFlQRTRfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fQ1RMMV9DTlRUWVBFNF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IENOVFRZUEU0IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfQ05UVFlQRTVfUG9zICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UVFlQRTUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfQ05UVFlQRTVfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fQ1RMMV9DTlRUWVBFNV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IENOVFRZUEU1IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfQ05UTU9ERTBfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UTU9ERTAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfQ05UTU9ERTBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMV9DTlRNT0RFMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IENOVE1PREUwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfQ05UTU9ERTFfUG9zICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UTU9ERTEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfQ05UTU9ERTFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMV9DTlRNT0RFMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IENOVE1PREUxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfQ05UTU9ERTJfUG9zICAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UTU9ERTIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfQ05UTU9ERTJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMV9DTlRNT0RFMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IENOVE1PREUyIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfQ05UTU9ERTNfUG9zICAgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UTU9ERTMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfQ05UTU9ERTNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMV9DTlRNT0RFM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IENOVE1PREUzIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfQ05UTU9ERTRfUG9zICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UTU9ERTQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfQ05UTU9ERTRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMV9DTlRNT0RFNF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IENOVE1PREU0IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfQ05UTU9ERTVfUG9zICAgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UTU9ERTUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfQ05UTU9ERTVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMV9DTlRNT0RFNV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IENOVE1PREU1IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfT1VUTU9ERTBfUG9zICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogT1VUTU9ERTAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfT1VUTU9ERTBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMV9PVVRNT0RFMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IE9VVE1PREUwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfT1VUTU9ERTJfUG9zICAgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogT1VUTU9ERTIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfT1VUTU9ERTJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMV9PVVRNT0RFMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IE9VVE1PREUyIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDFfT1VUTU9ERTRfUG9zICAgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogT1VUTU9ERTQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDFfT1VUTU9ERTRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMV9PVVRNT0RFNF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDE6IE9VVE1PREU0IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfUEhTRU4wX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogUEhTRU4wIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfUEhTRU4wX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1lOQ19QSFNFTjBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFBIU0VOMCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfUEhTRU4yX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogUEhTRU4yIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfUEhTRU4yX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1lOQ19QSFNFTjJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFBIU0VOMiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfUEhTRU40X1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogUEhTRU40IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfUEhTRU40X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1lOQ19QSFNFTjRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFBIU0VONCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfU0lOU1JDMF9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU0lOU1JDMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfU0lOU1JDMF9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fU1lOQ19TSU5TUkMwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFNJTlNSQzAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfU0lOU1JDMl9Qb3MgICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU0lOU1JDMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfU0lOU1JDMl9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fU1lOQ19TSU5TUkMyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFNJTlNSQzIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfU0lOU1JDNF9Qb3MgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU0lOU1JDNCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfU0lOU1JDNF9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fU1lOQ19TSU5TUkM0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFNJTlNSQzQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfU05GTFRFTl9Qb3MgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU05GTFRFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfU05GTFRFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1lOQ19TTkZMVEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFNORkxURU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfU0ZMVENTRUxfUG9zICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU0ZMVENTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfU0ZMVENTRUxfTXNrICAgICAgICAgICAgKDB4N3VsIDw8IEVQV01fU1lOQ19TRkxUQ1NFTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFNGTFRDU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfU0ZMVENOVF9Qb3MgICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU0ZMVENOVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfU0ZMVENOVF9Nc2sgICAgICAgICAgICAgKDB4N3VsIDw8IEVQV01fU1lOQ19TRkxUQ05UX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFNGTFRDTlQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfU0lOUElOVl9Qb3MgICAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU0lOUElOViBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfU0lOUElOVl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1lOQ19TSU5QSU5WX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFNJTlBJTlYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfUEhTRElSMF9Qb3MgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogUEhTRElSMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfUEhTRElSMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1lOQ19QSFNESVIwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFBIU0RJUjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfUEhTRElSMl9Qb3MgICAgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogUEhTRElSMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfUEhTRElSMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1lOQ19QSFNESVIyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFBIU0RJUjIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NZTkNfUEhTRElSNF9Qb3MgICAgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogUEhTRElSNCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NZTkNfUEhTRElSNF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1lOQ19QSFNESVI0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNZTkM6IFBIU0RJUjQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NXU1lOQ19TV1NZTkMwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dTWU5DOiBTV1NZTkMwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1NXU1lOQ19TV1NZTkMwX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1dTWU5DX1NXU1lOQzBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNXU1lOQzogU1dTWU5DMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NXU1lOQ19TV1NZTkMyX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dTWU5DOiBTV1NZTkMyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1NXU1lOQ19TV1NZTkMyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1dTWU5DX1NXU1lOQzJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNXU1lOQzogU1dTWU5DMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NXU1lOQ19TV1NZTkM0X1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dTWU5DOiBTV1NZTkM0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1NXU1lOQ19TV1NZTkM0X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1dTWU5DX1NXU1lOQzRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNXU1lOQzogU1dTWU5DNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NMS1NSQ19FQ0xLU1JDMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0xLU1JDOiBFQ0xLU1JDMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NMS1NSQ19FQ0xLU1JDMF9Nc2sgICAgICAgICAgKDB4N3VsIDw8IEVQV01fQ0xLU1JDX0VDTEtTUkMwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNMS1NSQzogRUNMS1NSQzAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NMS1NSQ19FQ0xLU1JDMl9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0xLU1JDOiBFQ0xLU1JDMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NMS1NSQ19FQ0xLU1JDMl9Nc2sgICAgICAgICAgKDB4N3VsIDw8IEVQV01fQ0xLU1JDX0VDTEtTUkMyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNMS1NSQzogRUNMS1NSQzIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NMS1NSQ19FQ0xLU1JDNF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0xLU1JDOiBFQ0xLU1JDNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NMS1NSQ19FQ0xLU1JDNF9Nc2sgICAgICAgICAgKDB4N3VsIDw8IEVQV01fQ0xLU1JDX0VDTEtTUkM0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNMS1NSQzogRUNMS1NSQzQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NMS1BTQzBfMV9DTEtQU0NfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0xLUFNDMF8xOiBDTEtQU0MgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0NMS1BTQzBfMV9DTEtQU0NfTXNrICAgICAgICAgKDB4ZmZmdWwgPDwgRVBXTV9DTEtQU0MwXzFfQ0xLUFNDX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNMS1BTQzBfMTogQ0xLUFNDIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NMS1BTQzJfM19DTEtQU0NfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0xLUFNDMl8zOiBDTEtQU0MgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0NMS1BTQzJfM19DTEtQU0NfTXNrICAgICAgICAgKDB4ZmZmdWwgPDwgRVBXTV9DTEtQU0MyXzNfQ0xLUFNDX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNMS1BTQzJfMzogQ0xLUFNDIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NMS1BTQzRfNV9DTEtQU0NfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0xLUFNDNF81OiBDTEtQU0MgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0NMS1BTQzRfNV9DTEtQU0NfTXNrICAgICAgICAgKDB4ZmZmdWwgPDwgRVBXTV9DTEtQU0M0XzVfQ0xLUFNDX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNMS1BTQzRfNTogQ0xLUFNDIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVEVOX0NOVEVOMF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05URU46IENOVEVOMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVEVOX0NOVEVOMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05URU5fQ05URU4wX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVEVOOiBDTlRFTjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVEVOX0NOVEVOMV9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05URU46IENOVEVOMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVEVOX0NOVEVOMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05URU5fQ05URU4xX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVEVOOiBDTlRFTjEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVEVOX0NOVEVOMl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05URU46IENOVEVOMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVEVOX0NOVEVOMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05URU5fQ05URU4yX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVEVOOiBDTlRFTjIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVEVOX0NOVEVOM19Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05URU46IENOVEVOMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVEVOX0NOVEVOM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05URU5fQ05URU4zX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVEVOOiBDTlRFTjMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVEVOX0NOVEVONF9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05URU46IENOVEVONCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVEVOX0NOVEVONF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05URU5fQ05URU40X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVEVOOiBDTlRFTjQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVEVOX0NOVEVONV9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05URU46IENOVEVONSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVEVOX0NOVEVONV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05URU5fQ05URU41X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVEVOOiBDTlRFTjUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVENMUl9DTlRDTFIwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UQ0xSOiBDTlRDTFIwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVENMUl9DTlRDTFIwX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05UQ0xSX0NOVENMUjBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVENMUjogQ05UQ0xSMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVENMUl9DTlRDTFIxX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UQ0xSOiBDTlRDTFIxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVENMUl9DTlRDTFIxX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05UQ0xSX0NOVENMUjFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVENMUjogQ05UQ0xSMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVENMUl9DTlRDTFIyX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UQ0xSOiBDTlRDTFIyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVENMUl9DTlRDTFIyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05UQ0xSX0NOVENMUjJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVENMUjogQ05UQ0xSMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVENMUl9DTlRDTFIzX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UQ0xSOiBDTlRDTFIzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVENMUl9DTlRDTFIzX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05UQ0xSX0NOVENMUjNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVENMUjogQ05UQ0xSMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVENMUl9DTlRDTFI0X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UQ0xSOiBDTlRDTFI0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVENMUl9DTlRDTFI0X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05UQ0xSX0NOVENMUjRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVENMUjogQ05UQ0xSNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVENMUl9DTlRDTFI1X1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UQ0xSOiBDTlRDTFI1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVENMUl9DTlRDTFI1X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05UQ0xSX0NOVENMUjVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVENMUjogQ05UQ0xSNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0xPQURfTE9BRDBfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TE9BRDogTE9BRDAgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0xPQURfTE9BRDBfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTE9BRF9MT0FEMF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkxPQUQ6IExPQUQwIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0xPQURfTE9BRDFfUG9zICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TE9BRDogTE9BRDEgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0xPQURfTE9BRDFfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTE9BRF9MT0FEMV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkxPQUQ6IExPQUQxIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0xPQURfTE9BRDJfUG9zICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TE9BRDogTE9BRDIgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0xPQURfTE9BRDJfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTE9BRF9MT0FEMl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkxPQUQ6IExPQUQyIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0xPQURfTE9BRDNfUG9zICAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TE9BRDogTE9BRDMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0xPQURfTE9BRDNfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTE9BRF9MT0FEM19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkxPQUQ6IExPQUQzIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0xPQURfTE9BRDRfUG9zICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TE9BRDogTE9BRDQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0xPQURfTE9BRDRfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTE9BRF9MT0FENF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkxPQUQ6IExPQUQ0IE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0xPQURfTE9BRDVfUG9zICAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TE9BRDogTE9BRDUgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0xPQURfTE9BRDVfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTE9BRF9MT0FENV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkxPQUQ6IExPQUQ1IE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BFUklPRDBfUEVSSU9EX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEVSSU9EMDogUEVSSU9EIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1BFUklPRDBfUEVSSU9EX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEVSSU9EMF9QRVJJT0RfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBFUklPRDA6IFBFUklPRCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BFUklPRDFfUEVSSU9EX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEVSSU9EMTogUEVSSU9EIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1BFUklPRDFfUEVSSU9EX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEVSSU9EMV9QRVJJT0RfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBFUklPRDE6IFBFUklPRCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BFUklPRDJfUEVSSU9EX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEVSSU9EMjogUEVSSU9EIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1BFUklPRDJfUEVSSU9EX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEVSSU9EMl9QRVJJT0RfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBFUklPRDI6IFBFUklPRCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BFUklPRDNfUEVSSU9EX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEVSSU9EMzogUEVSSU9EIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1BFUklPRDNfUEVSSU9EX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEVSSU9EM19QRVJJT0RfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBFUklPRDM6IFBFUklPRCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BFUklPRDRfUEVSSU9EX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEVSSU9ENDogUEVSSU9EIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1BFUklPRDRfUEVSSU9EX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEVSSU9ENF9QRVJJT0RfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBFUklPRDQ6IFBFUklPRCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BFUklPRDVfUEVSSU9EX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEVSSU9ENTogUEVSSU9EIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1BFUklPRDVfUEVSSU9EX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEVSSU9ENV9QRVJJT0RfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBFUklPRDU6IFBFUklPRCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NNUERBVDBfQ01QX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QREFUMDogQ01QIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NNUERBVDBfQ01QX01zayAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ01QREFUMF9DTVBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNNUERBVDA6IENNUCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NNUERBVDFfQ01QX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QREFUMTogQ01QIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NNUERBVDFfQ01QX01zayAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ01QREFUMV9DTVBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNNUERBVDE6IENNUCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NNUERBVDJfQ01QX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QREFUMjogQ01QIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NNUERBVDJfQ01QX01zayAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ01QREFUMl9DTVBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNNUERBVDI6IENNUCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NNUERBVDNfQ01QX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QREFUMzogQ01QIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NNUERBVDNfQ01QX01zayAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ01QREFUM19DTVBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNNUERBVDM6IENNUCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NNUERBVDRfQ01QX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QREFUNDogQ01QIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NNUERBVDRfQ01QX01zayAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ01QREFUNF9DTVBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNNUERBVDQ6IENNUCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NNUERBVDVfQ01QX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QREFUNTogQ01QIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NNUERBVDVfQ01QX01zayAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ01QREFUNV9DTVBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNNUERBVDU6IENNUCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RUQ1RMMF8xX0RUQ05UX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEwwXzE6IERUQ05UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0RUQ1RMMF8xX0RUQ05UX01zayAgICAgICAgICAgKDB4ZmZmdWwgPDwgRVBXTV9EVENUTDBfMV9EVENOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRUQ1RMMF8xOiBEVENOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RUQ1RMMF8xX0RURU5fUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEwwXzE6IERURU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RUQ1RMMF8xX0RURU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRFRDVEwwXzFfRFRFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRUQ1RMMF8xOiBEVEVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RUQ1RMMF8xX0RUQ0tTRUxfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEwwXzE6IERUQ0tTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RUQ1RMMF8xX0RUQ0tTRUxfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fRFRDVEwwXzFfRFRDS1NFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRUQ1RMMF8xOiBEVENLU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RUQ1RMMl8zX0RUQ05UX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEwyXzM6IERUQ05UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0RUQ1RMMl8zX0RUQ05UX01zayAgICAgICAgICAgKDB4ZmZmdWwgPDwgRVBXTV9EVENUTDJfM19EVENOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRUQ1RMMl8zOiBEVENOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RUQ1RMMl8zX0RURU5fUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEwyXzM6IERURU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RUQ1RMMl8zX0RURU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRFRDVEwyXzNfRFRFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRUQ1RMMl8zOiBEVEVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RUQ1RMMl8zX0RUQ0tTRUxfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEwyXzM6IERUQ0tTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RUQ1RMMl8zX0RUQ0tTRUxfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fRFRDVEwyXzNfRFRDS1NFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRUQ1RMMl8zOiBEVENLU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RUQ1RMNF81X0RUQ05UX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEw0XzU6IERUQ05UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0RUQ1RMNF81X0RUQ05UX01zayAgICAgICAgICAgKDB4ZmZmdWwgPDwgRVBXTV9EVENUTDRfNV9EVENOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRUQ1RMNF81OiBEVENOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RUQ1RMNF81X0RURU5fUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEw0XzU6IERURU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RUQ1RMNF81X0RURU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRFRDVEw0XzVfRFRFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRUQ1RMNF81OiBEVEVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RUQ1RMNF81X0RUQ0tTRUxfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEw0XzU6IERUQ0tTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RUQ1RMNF81X0RUQ0tTRUxfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fRFRDVEw0XzVfRFRDS1NFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRUQ1RMNF81OiBEVENLU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BIUzBfMV9QSFNfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEhTMF8xOiBQSFMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BIUzBfMV9QSFNfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEhTMF8xX1BIU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBIUzBfMTogUEhTIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BIUzJfM19QSFNfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEhTMl8zOiBQSFMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BIUzJfM19QSFNfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEhTMl8zX1BIU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBIUzJfMzogUEhTIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BIUzRfNV9QSFNfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEhTNF81OiBQSFMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BIUzRfNV9QSFNfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEhTNF81X1BIU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBIUzRfNTogUEhTIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVDBfQ05UX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMDogQ05UIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVDBfQ05UX01zayAgICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ05UMF9DTlRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVDA6IENOVCBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVDBfRElSRl9Qb3MgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMDogRElSRiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVDBfRElSRl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05UMF9ESVJGX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVDA6IERJUkYgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVDFfQ05UX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMTogQ05UIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVDFfQ05UX01zayAgICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ05UMV9DTlRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVDE6IENOVCBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVDFfRElSRl9Qb3MgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMTogRElSRiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVDFfRElSRl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05UMV9ESVJGX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVDE6IERJUkYgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVDJfQ05UX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMjogQ05UIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVDJfQ05UX01zayAgICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ05UMl9DTlRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVDI6IENOVCBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVDJfRElSRl9Qb3MgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMjogRElSRiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVDJfRElSRl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05UMl9ESVJGX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVDI6IERJUkYgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVDNfQ05UX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMzogQ05UIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVDNfQ05UX01zayAgICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ05UM19DTlRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVDM6IENOVCBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVDNfRElSRl9Qb3MgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMzogRElSRiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVDNfRElSRl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05UM19ESVJGX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVDM6IERJUkYgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVDRfQ05UX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UNDogQ05UIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVDRfQ05UX01zayAgICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ05UNF9DTlRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVDQ6IENOVCBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVDRfRElSRl9Qb3MgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UNDogRElSRiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVDRfRElSRl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05UNF9ESVJGX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVDQ6IERJUkYgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVDVfQ05UX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UNTogQ05UIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVDVfQ05UX01zayAgICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ05UNV9DTlRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVDU6IENOVCBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NOVDVfRElSRl9Qb3MgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UNTogRElSRiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NOVDVfRElSRl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ05UNV9ESVJGX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNOVDU6IERJUkYgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMF9aUENUTDBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBaUENUTDAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMF9aUENUTDBfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwwX1pQQ1RMMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMDogWlBDVEwwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMF9aUENUTDFfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBaUENUTDEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMF9aUENUTDFfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwwX1pQQ1RMMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMDogWlBDVEwxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMF9aUENUTDJfUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBaUENUTDIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMF9aUENUTDJfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwwX1pQQ1RMMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMDogWlBDVEwyIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMF9aUENUTDNfUG9zICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBaUENUTDMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMF9aUENUTDNfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwwX1pQQ1RMM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMDogWlBDVEwzIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMF9aUENUTDRfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBaUENUTDQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMF9aUENUTDRfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwwX1pQQ1RMNF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMDogWlBDVEw0IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMF9aUENUTDVfUG9zICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBaUENUTDUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMF9aUENUTDVfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwwX1pQQ1RMNV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMDogWlBDVEw1IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMF9QUkRQQ1RMMF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMF9QUkRQQ1RMMF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwwX1BSRFBDVEwwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMDogUFJEUENUTDAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMF9QUkRQQ1RMMV9Qb3MgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMF9QUkRQQ1RMMV9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwwX1BSRFBDVEwxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMDogUFJEUENUTDEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMF9QUkRQQ1RMMl9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMF9QUkRQQ1RMMl9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwwX1BSRFBDVEwyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMDogUFJEUENUTDIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMF9QUkRQQ1RMM19Qb3MgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMF9QUkRQQ1RMM19Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwwX1BSRFBDVEwzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMDogUFJEUENUTDMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMF9QUkRQQ1RMNF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBQUkRQQ1RMNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMF9QUkRQQ1RMNF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwwX1BSRFBDVEw0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMDogUFJEUENUTDQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMF9QUkRQQ1RMNV9Qb3MgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBQUkRQQ1RMNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMF9QUkRQQ1RMNV9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwwX1BSRFBDVEw1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMDogUFJEUENUTDUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBVQ1RMMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBVQ1RMMF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwxX0NNUFVDVEwwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBVQ1RMMV9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBVQ1RMMV9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwxX0NNUFVDVEwxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBVQ1RMMl9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBVQ1RMMl9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwxX0NNUFVDVEwyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBVQ1RMM19Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBVQ1RMM19Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwxX0NNUFVDVEwzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBVQ1RMNF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBVQ1RMNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBVQ1RMNF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwxX0NNUFVDVEw0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBVQ1RMNV9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBVQ1RMNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBVQ1RMNV9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwxX0NNUFVDVEw1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBEQ1RMMF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBEQ1RMMF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwxX0NNUERDVEwwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMTogQ01QRENUTDAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBEQ1RMMV9Qb3MgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBEQ1RMMV9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwxX0NNUERDVEwxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMTogQ01QRENUTDEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBEQ1RMMl9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBEQ1RMMl9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwxX0NNUERDVEwyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMTogQ01QRENUTDIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBEQ1RMM19Qb3MgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBEQ1RMM19Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwxX0NNUERDVEwzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMTogQ01QRENUTDMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBEQ1RMNF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBEQ1RMNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBEQ1RMNF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwxX0NNUERDVEw0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMTogQ01QRENUTDQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBEQ1RMNV9Qb3MgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBEQ1RMNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1dHQ1RMMV9DTVBEQ1RMNV9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVQV01fV0dDVEwxX0NNUERDVEw1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OldHQ1RMMTogQ01QRENUTDUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX01TS0VOX01TS0VOMF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLRU46IE1TS0VOMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX01TS0VOX01TS0VOMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTVNLRU5fTVNLRU4wX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6Ok1TS0VOOiBNU0tFTjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX01TS0VOX01TS0VOMV9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLRU46IE1TS0VOMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX01TS0VOX01TS0VOMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTVNLRU5fTVNLRU4xX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6Ok1TS0VOOiBNU0tFTjEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX01TS0VOX01TS0VOMl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLRU46IE1TS0VOMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX01TS0VOX01TS0VOMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTVNLRU5fTVNLRU4yX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6Ok1TS0VOOiBNU0tFTjIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX01TS0VOX01TS0VOM19Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLRU46IE1TS0VOMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX01TS0VOX01TS0VOM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTVNLRU5fTVNLRU4zX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6Ok1TS0VOOiBNU0tFTjMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX01TS0VOX01TS0VONF9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLRU46IE1TS0VONCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX01TS0VOX01TS0VONF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTVNLRU5fTVNLRU40X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6Ok1TS0VOOiBNU0tFTjQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX01TS0VOX01TS0VONV9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLRU46IE1TS0VONSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX01TS0VOX01TS0VONV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTVNLRU5fTVNLRU41X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6Ok1TS0VOOiBNU0tFTjUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX01TS19NU0tEQVQwX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLOiBNU0tEQVQwIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX01TS19NU0tEQVQwX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTVNLX01TS0RBVDBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6Ok1TSzogTVNLREFUMCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX01TS19NU0tEQVQxX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLOiBNU0tEQVQxIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX01TS19NU0tEQVQxX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTVNLX01TS0RBVDFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6Ok1TSzogTVNLREFUMSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX01TS19NU0tEQVQyX1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLOiBNU0tEQVQyIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX01TS19NU0tEQVQyX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTVNLX01TS0RBVDJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6Ok1TSzogTVNLREFUMiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX01TS19NU0tEQVQzX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLOiBNU0tEQVQzIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX01TS19NU0tEQVQzX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTVNLX01TS0RBVDNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6Ok1TSzogTVNLREFUMyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX01TS19NU0tEQVQ0X1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLOiBNU0tEQVQ0IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX01TS19NU0tEQVQ0X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTVNLX01TS0RBVDRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6Ok1TSzogTVNLREFUNCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX01TS19NU0tEQVQ1X1BvcyAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLOiBNU0tEQVQ1IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX01TS19NU0tEQVQ1X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTVNLX01TS0RBVDVfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6Ok1TSzogTVNLREFUNSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JORl9CUkswTkZFTl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUkswTkZFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0JORl9CUkswTkZFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQk5GX0JSSzBORkVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJORjogQlJLME5GRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JORl9CUkswTkZTRUxfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUkswTkZTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0JORl9CUkswTkZTRUxfTXNrICAgICAgICAgICAgKDB4N3VsIDw8IEVQV01fQk5GX0JSSzBORlNFTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJORjogQlJLME5GU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JORl9CUkswRkNOVF9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUkswRkNOVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0JORl9CUkswRkNOVF9Nc2sgICAgICAgICAgICAgKDB4N3VsIDw8IEVQV01fQk5GX0JSSzBGQ05UX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJORjogQlJLMEZDTlQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JORl9CUkswUElOVl9Qb3MgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUkswUElOViBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0JORl9CUkswUElOVl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQk5GX0JSSzBQSU5WX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJORjogQlJLMFBJTlYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JORl9CUksxTkZFTl9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUksxTkZFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0JORl9CUksxTkZFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQk5GX0JSSzFORkVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJORjogQlJLMU5GRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JORl9CUksxTkZTRUxfUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUksxTkZTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0JORl9CUksxTkZTRUxfTXNrICAgICAgICAgICAgKDB4N3VsIDw8IEVQV01fQk5GX0JSSzFORlNFTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJORjogQlJLMU5GU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JORl9CUksxRkNOVF9Qb3MgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUksxRkNOVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0JORl9CUksxRkNOVF9Nc2sgICAgICAgICAgICAgKDB4N3VsIDw8IEVQV01fQk5GX0JSSzFGQ05UX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJORjogQlJLMUZDTlQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JORl9CUksxUElOVl9Qb3MgICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUksxUElOViBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0JORl9CUksxUElOVl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQk5GX0JSSzFQSU5WX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJORjogQlJLMVBJTlYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JORl9CSzBTUkNfUG9zICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCSzBTUkMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0JORl9CSzBTUkNfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQk5GX0JLMFNSQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJORjogQkswU1JDIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JORl9CSzFTUkNfUG9zICAgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCSzFTUkMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0JORl9CSzFTUkNfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQk5GX0JLMVNSQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJORjogQksxU1JDIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZBSUxCUktfQ1NTQlJLRU5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkFJTEJSSzogQ1NTQlJLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0ZBSUxCUktfQ1NTQlJLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fRkFJTEJSS19DU1NCUktFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZBSUxCUks6IENTU0JSS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZBSUxCUktfQk9EQlJLRU5fUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkFJTEJSSzogQk9EQlJLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0ZBSUxCUktfQk9EQlJLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fRkFJTEJSS19CT0RCUktFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZBSUxCUks6IEJPREJSS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZBSUxCUktfUkFNQlJLRU5fUG9zICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkFJTEJSSzogUkFNQlJLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0ZBSUxCUktfUkFNQlJLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fRkFJTEJSS19SQU1CUktFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZBSUxCUks6IFJBTUJSS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZBSUxCUktfQ09SQlJLRU5fUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkFJTEJSSzogQ09SQlJLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0ZBSUxCUktfQ09SQlJLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fRkFJTEJSS19DT1JCUktFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZBSUxCUks6IENPUkJSS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9DUE8wRUJFTl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBDUE8wRUJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9DUE8wRUJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMF8xX0NQTzBFQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogQ1BPMEVCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9DUE8xRUJFTl9Qb3MgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBDUE8xRUJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9DUE8xRUJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMF8xX0NQTzFFQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogQ1BPMUVCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9CUktQMEVFTl9Qb3MgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBCUktQMEVFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9CUktQMEVFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMF8xX0JSS1AwRUVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogQlJLUDBFRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9CUktQMUVFTl9Qb3MgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBCUktQMUVFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9CUktQMUVFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMF8xX0JSS1AxRUVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogQlJLUDFFRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9TWVNFQkVOX1BvcyAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBTWVNFQkVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9TWVNFQkVOX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMF8xX1NZU0VCRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogU1lTRUJFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9DUE8wTEJFTl9Qb3MgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBDUE8wTEJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9DUE8wTEJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMF8xX0NQTzBMQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogQ1BPMExCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9DUE8xTEJFTl9Qb3MgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBDUE8xTEJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9DUE8xTEJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMF8xX0NQTzFMQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogQ1BPMUxCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9CUktQMExFTl9Qb3MgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBCUktQMExFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9CUktQMExFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMF8xX0JSS1AwTEVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogQlJLUDBMRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9CUktQMUxFTl9Qb3MgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBCUktQMUxFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9CUktQMUxFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMF8xX0JSS1AxTEVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogQlJLUDFMRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9TWVNMQkVOX1BvcyAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBTWVNMQkVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9TWVNMQkVOX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMF8xX1NZU0xCRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogU1lTTEJFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9CUktBRVZFTl9Qb3MgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBCUktBRVZFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9CUktBRVZFTl9Nc2sgICAgICAgKDB4M3VsIDw8IEVQV01fQlJLQ1RMMF8xX0JSS0FFVkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogQlJLQUVWRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9CUktBT0REX1BvcyAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBCUktBT0REIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9CUktBT0REX01zayAgICAgICAgKDB4M3VsIDw8IEVQV01fQlJLQ1RMMF8xX0JSS0FPRERfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogQlJLQU9ERCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9FQURDRUJFTl9Qb3MgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBFQURDRUJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9FQURDRUJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMF8xX0VBRENFQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogRUFEQ0VCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9FQURDTEJFTl9Qb3MgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBFQURDTEJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDBfMV9FQURDTEJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMF8xX0VBRENMQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDBfMTogRUFEQ0xCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19DUE8wRUJFTl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBDUE8wRUJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19DUE8wRUJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMl8zX0NQTzBFQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogQ1BPMEVCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19DUE8xRUJFTl9Qb3MgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBDUE8xRUJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19DUE8xRUJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMl8zX0NQTzFFQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogQ1BPMUVCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19CUktQMEVFTl9Qb3MgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBCUktQMEVFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19CUktQMEVFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMl8zX0JSS1AwRUVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogQlJLUDBFRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19CUktQMUVFTl9Qb3MgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBCUktQMUVFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19CUktQMUVFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMl8zX0JSS1AxRUVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogQlJLUDFFRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19TWVNFQkVOX1BvcyAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBTWVNFQkVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19TWVNFQkVOX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMl8zX1NZU0VCRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogU1lTRUJFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19DUE8wTEJFTl9Qb3MgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBDUE8wTEJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19DUE8wTEJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMl8zX0NQTzBMQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogQ1BPMExCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19DUE8xTEJFTl9Qb3MgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBDUE8xTEJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19DUE8xTEJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMl8zX0NQTzFMQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogQ1BPMUxCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19CUktQMExFTl9Qb3MgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBCUktQMExFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19CUktQMExFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMl8zX0JSS1AwTEVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogQlJLUDBMRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19CUktQMUxFTl9Qb3MgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBCUktQMUxFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19CUktQMUxFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMl8zX0JSS1AxTEVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogQlJLUDFMRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19TWVNMQkVOX1BvcyAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBTWVNMQkVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19TWVNMQkVOX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMl8zX1NZU0xCRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogU1lTTEJFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19CUktBRVZFTl9Qb3MgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBCUktBRVZFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19CUktBRVZFTl9Nc2sgICAgICAgKDB4M3VsIDw8IEVQV01fQlJLQ1RMMl8zX0JSS0FFVkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogQlJLQUVWRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19CUktBT0REX1BvcyAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBCUktBT0REIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19CUktBT0REX01zayAgICAgICAgKDB4M3VsIDw8IEVQV01fQlJLQ1RMMl8zX0JSS0FPRERfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogQlJLQU9ERCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19FQURDRUJFTl9Qb3MgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBFQURDRUJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19FQURDRUJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMl8zX0VBRENFQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogRUFEQ0VCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19FQURDTEJFTl9Qb3MgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBFQURDTEJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDJfM19FQURDTEJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMMl8zX0VBRENMQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDJfMzogRUFEQ0xCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9DUE8wRUJFTl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBDUE8wRUJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9DUE8wRUJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMNF81X0NQTzBFQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogQ1BPMEVCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9DUE8xRUJFTl9Qb3MgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBDUE8xRUJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9DUE8xRUJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMNF81X0NQTzFFQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogQ1BPMUVCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9CUktQMEVFTl9Qb3MgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBCUktQMEVFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9CUktQMEVFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMNF81X0JSS1AwRUVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogQlJLUDBFRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9CUktQMUVFTl9Qb3MgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBCUktQMUVFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9CUktQMUVFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMNF81X0JSS1AxRUVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogQlJLUDFFRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9TWVNFQkVOX1BvcyAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBTWVNFQkVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9TWVNFQkVOX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMNF81X1NZU0VCRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogU1lTRUJFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9DUE8wTEJFTl9Qb3MgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBDUE8wTEJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9DUE8wTEJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMNF81X0NQTzBMQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogQ1BPMExCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9DUE8xTEJFTl9Qb3MgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBDUE8xTEJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9DUE8xTEJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMNF81X0NQTzFMQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogQ1BPMUxCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9CUktQMExFTl9Qb3MgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBCUktQMExFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9CUktQMExFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMNF81X0JSS1AwTEVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogQlJLUDBMRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9CUktQMUxFTl9Qb3MgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBCUktQMUxFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9CUktQMUxFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMNF81X0JSS1AxTEVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogQlJLUDFMRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9TWVNMQkVOX1BvcyAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBTWVNMQkVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9TWVNMQkVOX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMNF81X1NZU0xCRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogU1lTTEJFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9CUktBRVZFTl9Qb3MgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBCUktBRVZFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9CUktBRVZFTl9Nc2sgICAgICAgKDB4M3VsIDw8IEVQV01fQlJLQ1RMNF81X0JSS0FFVkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogQlJLQUVWRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9CUktBT0REX1BvcyAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBCUktBT0REIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9CUktBT0REX01zayAgICAgICAgKDB4M3VsIDw8IEVQV01fQlJLQ1RMNF81X0JSS0FPRERfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogQlJLQU9ERCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9FQURDRUJFTl9Qb3MgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBFQURDRUJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9FQURDRUJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMNF81X0VBRENFQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogRUFEQ0VCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9FQURDTEJFTl9Qb3MgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBFQURDTEJFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0JSS0NUTDRfNV9FQURDTEJFTl9Nc2sgICAgICAgKDB4MXVsIDw8IEVQV01fQlJLQ1RMNF81X0VBRENMQkVOX1BvcykgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkJSS0NUTDRfNTogRUFEQ0xCRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BPTENUTF9QSU5WMF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9MQ1RMOiBQSU5WMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BPTENUTF9QSU5WMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUE9MQ1RMX1BJTlYwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBPTENUTDogUElOVjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BPTENUTF9QSU5WMV9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9MQ1RMOiBQSU5WMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BPTENUTF9QSU5WMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUE9MQ1RMX1BJTlYxX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBPTENUTDogUElOVjEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BPTENUTF9QSU5WMl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9MQ1RMOiBQSU5WMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BPTENUTF9QSU5WMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUE9MQ1RMX1BJTlYyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBPTENUTDogUElOVjIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BPTENUTF9QSU5WM19Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9MQ1RMOiBQSU5WMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BPTENUTF9QSU5WM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUE9MQ1RMX1BJTlYzX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBPTENUTDogUElOVjMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BPTENUTF9QSU5WNF9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9MQ1RMOiBQSU5WNCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BPTENUTF9QSU5WNF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUE9MQ1RMX1BJTlY0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBPTENUTDogUElOVjQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BPTENUTF9QSU5WNV9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9MQ1RMOiBQSU5WNSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BPTENUTF9QSU5WNV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUE9MQ1RMX1BJTlY1X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBPTENUTDogUElOVjUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BPRU5fUE9FTjBfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9FTjogUE9FTjAgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BPRU5fUE9FTjBfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUE9FTl9QT0VOMF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBPRU46IFBPRU4wIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BPRU5fUE9FTjFfUG9zICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9FTjogUE9FTjEgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BPRU5fUE9FTjFfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUE9FTl9QT0VOMV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBPRU46IFBPRU4xIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BPRU5fUE9FTjJfUG9zICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9FTjogUE9FTjIgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BPRU5fUE9FTjJfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUE9FTl9QT0VOMl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBPRU46IFBPRU4yIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BPRU5fUE9FTjNfUG9zICAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9FTjogUE9FTjMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BPRU5fUE9FTjNfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUE9FTl9QT0VOM19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBPRU46IFBPRU4zIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BPRU5fUE9FTjRfUG9zICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9FTjogUE9FTjQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BPRU5fUE9FTjRfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUE9FTl9QT0VONF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBPRU46IFBPRU40IE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BPRU5fUE9FTjVfUG9zICAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9FTjogUE9FTjUgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BPRU5fUE9FTjVfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUE9FTl9QT0VONV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBPRU46IFBPRU41IE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NXQlJLX0JSS0VUUkcwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dCUks6IEJSS0VUUkcwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1NXQlJLX0JSS0VUUkcwX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1dCUktfQlJLRVRSRzBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNXQlJLOiBCUktFVFJHMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NXQlJLX0JSS0VUUkcyX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dCUks6IEJSS0VUUkcyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1NXQlJLX0JSS0VUUkcyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1dCUktfQlJLRVRSRzJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNXQlJLOiBCUktFVFJHMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NXQlJLX0JSS0VUUkc0X1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dCUks6IEJSS0VUUkc0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1NXQlJLX0JSS0VUUkc0X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1dCUktfQlJLRVRSRzRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNXQlJLOiBCUktFVFJHNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NXQlJLX0JSS0xUUkcwX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dCUks6IEJSS0xUUkcwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1NXQlJLX0JSS0xUUkcwX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1dCUktfQlJLTFRSRzBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNXQlJLOiBCUktMVFJHMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NXQlJLX0JSS0xUUkcyX1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dCUks6IEJSS0xUUkcyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1NXQlJLX0JSS0xUUkcyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1dCUktfQlJLTFRSRzJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNXQlJLOiBCUktMVFJHMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NXQlJLX0JSS0xUUkc0X1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dCUks6IEJSS0xUUkc0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1NXQlJLX0JSS0xUUkc0X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1dCUktfQlJLTFRSRzRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNXQlJLOiBCUktMVFJHNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9aSUVOMF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBaSUVOMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9aSUVOMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX1pJRU4wX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogWklFTjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9aSUVOMV9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBaSUVOMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9aSUVOMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX1pJRU4xX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogWklFTjEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9aSUVOMl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBaSUVOMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9aSUVOMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX1pJRU4yX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogWklFTjIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9aSUVOM19Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBaSUVOMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9aSUVOM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX1pJRU4zX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogWklFTjMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9aSUVONF9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBaSUVONCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9aSUVONF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX1pJRU40X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogWklFTjQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9aSUVONV9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBaSUVONSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9aSUVONV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX1pJRU41X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogWklFTjUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9QSUVOMF9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBQSUVOMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9QSUVOMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX1BJRU4wX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogUElFTjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9QSUVOMV9Qb3MgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBQSUVOMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9QSUVOMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX1BJRU4xX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogUElFTjEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9QSUVOMl9Qb3MgICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBQSUVOMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9QSUVOMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX1BJRU4yX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogUElFTjIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9QSUVOM19Qb3MgICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBQSUVOMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9QSUVOM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX1BJRU4zX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogUElFTjMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9QSUVONF9Qb3MgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBQSUVONCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9QSUVONF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX1BJRU40X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogUElFTjQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9QSUVONV9Qb3MgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBQSUVONSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9QSUVONV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX1BJRU41X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogUElFTjUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBVSUVOMF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBVSUVOMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBVSUVOMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX0NNUFVJRU4wX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogQ01QVUlFTjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBVSUVOMV9Qb3MgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBVSUVOMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBVSUVOMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX0NNUFVJRU4xX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogQ01QVUlFTjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBVSUVOMl9Qb3MgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBVSUVOMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBVSUVOMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX0NNUFVJRU4yX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogQ01QVUlFTjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBVSUVOM19Qb3MgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBVSUVOMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBVSUVOM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX0NNUFVJRU4zX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogQ01QVUlFTjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBVSUVONF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBVSUVONCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBVSUVONF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX0NNUFVJRU40X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogQ01QVUlFTjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBVSUVONV9Qb3MgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBVSUVONSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBVSUVONV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX0NNUFVJRU41X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogQ01QVUlFTjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBESUVOMF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBESUVOMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBESUVOMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX0NNUERJRU4wX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogQ01QRElFTjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBESUVOMV9Qb3MgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBESUVOMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBESUVOMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX0NNUERJRU4xX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogQ01QRElFTjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBESUVOMl9Qb3MgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBESUVOMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBESUVOMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX0NNUERJRU4yX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogQ01QRElFTjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBESUVOM19Qb3MgICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBESUVOMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBESUVOM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX0NNUERJRU4zX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogQ01QRElFTjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBESUVONF9Qb3MgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBESUVONCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBESUVONF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX0NNUERJRU40X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogQ01QRElFTjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBESUVONV9Qb3MgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBESUVONSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMF9DTVBESUVONV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4wX0NNUERJRU41X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMDogQ01QRElFTjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMV9CUktFSUVOMF8xX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4xOiBCUktFSUVOMF8xIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMV9CUktFSUVOMF8xX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4xX0JSS0VJRU4wXzFfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMTogQlJLRUlFTjBfMSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMV9CUktFSUVOMl8zX1BvcyAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4xOiBCUktFSUVOMl8zIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMV9CUktFSUVOMl8zX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4xX0JSS0VJRU4yXzNfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMTogQlJLRUlFTjJfMyBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMV9CUktFSUVONF81X1BvcyAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4xOiBCUktFSUVONF81IFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMV9CUktFSUVONF81X01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4xX0JSS0VJRU40XzVfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMTogQlJLRUlFTjRfNSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMV9CUktMSUVOMF8xX1BvcyAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4xOiBCUktMSUVOMF8xIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMV9CUktMSUVOMF8xX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4xX0JSS0xJRU4wXzFfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMTogQlJLTElFTjBfMSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMV9CUktMSUVOMl8zX1BvcyAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4xOiBCUktMSUVOMl8zIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMV9CUktMSUVOMl8zX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4xX0JSS0xJRU4yXzNfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMTogQlJLTElFTjJfMyBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVEVOMV9CUktMSUVONF81X1BvcyAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4xOiBCUktMSUVONF81IFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0lOVEVOMV9CUktMSUVONF81X01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5URU4xX0JSS0xJRU40XzVfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVEVOMTogQlJLTElFTjRfNSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfWklGMF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogWklGMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfWklGMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9aSUYwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IFpJRjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfWklGMV9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogWklGMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfWklGMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9aSUYxX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IFpJRjEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfWklGMl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogWklGMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfWklGMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9aSUYyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IFpJRjIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfWklGM19Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogWklGMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfWklGM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9aSUYzX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IFpJRjMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfWklGNF9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogWklGNCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfWklGNF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9aSUY0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IFpJRjQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfWklGNV9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogWklGNSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfWklGNV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9aSUY1X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IFpJRjUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfUElGMF9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogUElGMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfUElGMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9QSUYwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IFBJRjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfUElGMV9Qb3MgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogUElGMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfUElGMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9QSUYxX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IFBJRjEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfUElGMl9Qb3MgICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogUElGMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfUElGMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9QSUYyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IFBJRjIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfUElGM19Qb3MgICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogUElGMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfUElGM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9QSUYzX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IFBJRjMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfUElGNF9Qb3MgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogUElGNCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfUElGNF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9QSUY0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IFBJRjQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfUElGNV9Qb3MgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogUElGNSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfUElGNV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9QSUY1X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IFBJRjUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QVUlGMF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QVUlGMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QVUlGMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9DTVBVSUYwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IENNUFVJRjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QVUlGMV9Qb3MgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QVUlGMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QVUlGMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9DTVBVSUYxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IENNUFVJRjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QVUlGMl9Qb3MgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QVUlGMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QVUlGMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9DTVBVSUYyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IENNUFVJRjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QVUlGM19Qb3MgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QVUlGMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QVUlGM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9DTVBVSUYzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IENNUFVJRjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QVUlGNF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QVUlGNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QVUlGNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9DTVBVSUY0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IENNUFVJRjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QVUlGNV9Qb3MgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QVUlGNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QVUlGNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9DTVBVSUY1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IENNUFVJRjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QRElGMF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QRElGMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QRElGMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9DTVBESUYwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IENNUERJRjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QRElGMV9Qb3MgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QRElGMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QRElGMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9DTVBESUYxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IENNUERJRjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QRElGMl9Qb3MgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QRElGMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QRElGMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9DTVBESUYyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IENNUERJRjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QRElGM19Qb3MgICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QRElGMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QRElGM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9DTVBESUYzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IENNUERJRjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QRElGNF9Qb3MgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QRElGNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QRElGNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9DTVBESUY0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IENNUERJRjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QRElGNV9Qb3MgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QRElGNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzBfQ01QRElGNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMF9DTVBESUY1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzA6IENNUERJRjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRUlGMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRUlGMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRUlGMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktFSUYwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0VJRjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRUlGMV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRUlGMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRUlGMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktFSUYxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0VJRjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRUlGMl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRUlGMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRUlGMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktFSUYyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0VJRjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRUlGM19Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRUlGMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRUlGM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktFSUYzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0VJRjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRUlGNF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRUlGNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRUlGNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktFSUY0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0VJRjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRUlGNV9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRUlGNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRUlGNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktFSUY1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0VJRjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTElGMF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTElGMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTElGMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktMSUYwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0xJRjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTElGMV9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTElGMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTElGMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktMSUYxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0xJRjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTElGMl9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTElGMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTElGMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktMSUYyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0xJRjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTElGM19Qb3MgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTElGMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTElGM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktMSUYzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0xJRjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTElGNF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTElGNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTElGNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktMSUY0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0xJRjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTElGNV9Qb3MgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTElGNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTElGNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktMSUY1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0xJRjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRVNUUzBfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRVNUUzAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRVNUUzBfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktFU1RTMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0VTVFMwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRVNUUzFfUG9zICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRVNUUzEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRVNUUzFfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktFU1RTMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0VTVFMxIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRVNUUzJfUG9zICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRVNUUzIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRVNUUzJfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktFU1RTMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0VTVFMyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRVNUUzNfUG9zICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRVNUUzMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRVNUUzNfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktFU1RTM19Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0VTVFMzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRVNUUzRfUG9zICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRVNUUzQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRVNUUzRfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktFU1RTNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0VTVFM0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRVNUUzVfUG9zICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRVNUUzUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLRVNUUzVfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktFU1RTNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0VTVFM1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTFNUUzBfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTFNUUzAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTFNUUzBfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktMU1RTMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0xTVFMwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTFNUUzFfUG9zICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTFNUUzEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTFNUUzFfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktMU1RTMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0xTVFMxIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTFNUUzJfUG9zICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTFNUUzIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTFNUUzJfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktMU1RTMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0xTVFMyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTFNUUzNfUG9zICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTFNUUzMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTFNUUzNfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktMU1RTM19Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0xTVFMzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTFNUUzRfUG9zICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTFNUUzQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTFNUUzRfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktMU1RTNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0xTVFM0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTFNUUzVfUG9zICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTFNUUzUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0lOVFNUUzFfQlJLTFNUUzVfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fSU5UU1RTMV9CUktMU1RTNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklOVFNUUzE6IEJSS0xTVFM1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1pURTBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFpURTAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1pURTBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fWlRFMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBaVEUwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1pURTFfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFpURTEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1pURTFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fWlRFMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBaVEUxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1pURTJfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFpURTIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1pURTJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fWlRFMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBaVEUyIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1pURTNfUG9zICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFpURTMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1pURTNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fWlRFM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBaVEUzIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1pURTRfUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFpURTQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1pURTRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fWlRFNF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBaVEU0IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1pURTVfUG9zICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFpURTUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1pURTVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fWlRFNV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBaVEU1IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1BURTBfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFBURTAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1BURTBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fUFRFMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBQVEUwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1BURTFfUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFBURTEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1BURTFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fUFRFMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBQVEUxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1BURTJfUG9zICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFBURTIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1BURTJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fUFRFMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBQVEUyIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1BURTNfUG9zICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFBURTMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1BURTNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fUFRFM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBQVEUzIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1BURTRfUG9zICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFBURTQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1BURTRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fUFRFNF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBQVEU0IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1BURTVfUG9zICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFBURTUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX1BURTVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fUFRFNV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBQVEU1IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NVVFJHRTBfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENVVFJHRTAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NVVFJHRTBfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fQ1VUUkdFMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBDVVRSR0UwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NVVFJHRTFfUG9zICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENVVFJHRTEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NVVFJHRTFfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fQ1VUUkdFMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBDVVRSR0UxIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NVVFJHRTJfUG9zICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENVVFJHRTIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NVVFJHRTJfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fQ1VUUkdFMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBDVVRSR0UyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NVVFJHRTNfUG9zICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENVVFJHRTMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NVVFJHRTNfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fQ1VUUkdFM19Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBDVVRSR0UzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NVVFJHRTRfUG9zICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENVVFJHRTQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NVVFJHRTRfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fQ1VUUkdFNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBDVVRSR0U0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NVVFJHRTVfUG9zICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENVVFJHRTUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NVVFJHRTVfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fQ1VUUkdFNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBDVVRSR0U1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NEVFJHRTBfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENEVFJHRTAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NEVFJHRTBfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fQ0RUUkdFMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBDRFRSR0UwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NEVFJHRTFfUG9zICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENEVFJHRTEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NEVFJHRTFfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fQ0RUUkdFMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBDRFRSR0UxIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NEVFJHRTJfUG9zICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENEVFJHRTIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NEVFJHRTJfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fQ0RUUkdFMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBDRFRSR0UyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NEVFJHRTNfUG9zICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENEVFJHRTMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NEVFJHRTNfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fQ0RUUkdFM19Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBDRFRSR0UzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NEVFJHRTRfUG9zICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENEVFJHRTQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NEVFJHRTRfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fQ0RUUkdFNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBDRFRSR0U0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NEVFJHRTVfUG9zICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENEVFJHRTUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0RBQ1RSR0VOX0NEVFJHRTVfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fREFDVFJHRU5fQ0RUUkdFNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkRBQ1RSR0VOOiBDRFRSR0U1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHU0VMMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHU0VMMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHU0VMMF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IEVQV01fRUFEQ1RTMF9UUkdTRUwwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkVBRENUUzA6IFRSR1NFTDAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHRU4wX1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHRU4wIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHRU4wX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRUFEQ1RTMF9UUkdFTjBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkVBRENUUzA6IFRSR0VOMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHU0VMMV9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHU0VMMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHU0VMMV9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IEVQV01fRUFEQ1RTMF9UUkdTRUwxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkVBRENUUzA6IFRSR1NFTDEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHRU4xX1BvcyAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHRU4xIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHRU4xX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRUFEQ1RTMF9UUkdFTjFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkVBRENUUzA6IFRSR0VOMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHU0VMMl9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHU0VMMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHU0VMMl9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IEVQV01fRUFEQ1RTMF9UUkdTRUwyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkVBRENUUzA6IFRSR1NFTDIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHRU4yX1BvcyAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHRU4yIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHRU4yX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRUFEQ1RTMF9UUkdFTjJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkVBRENUUzA6IFRSR0VOMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHU0VMM19Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHU0VMMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHU0VMM19Nc2sgICAgICAgICAgKDB4ZnVsIDw8IEVQV01fRUFEQ1RTMF9UUkdTRUwzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkVBRENUUzA6IFRSR1NFTDMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHRU4zX1BvcyAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHRU4zIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0VBRENUUzBfVFJHRU4zX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRUFEQ1RTMF9UUkdFTjNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkVBRENUUzA6IFRSR0VOMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0VBRENUUzFfVFJHU0VMNF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMTogVFJHU0VMNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0VBRENUUzFfVFJHU0VMNF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IEVQV01fRUFEQ1RTMV9UUkdTRUw0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkVBRENUUzE6IFRSR1NFTDQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0VBRENUUzFfVFJHRU40X1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMTogVFJHRU40IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0VBRENUUzFfVFJHRU40X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRUFEQ1RTMV9UUkdFTjRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkVBRENUUzE6IFRSR0VONCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0VBRENUUzFfVFJHU0VMNV9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMTogVFJHU0VMNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0VBRENUUzFfVFJHU0VMNV9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IEVQV01fRUFEQ1RTMV9UUkdTRUw1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkVBRENUUzE6IFRSR1NFTDUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0VBRENUUzFfVFJHRU41X1BvcyAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMTogVFJHRU41IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0VBRENUUzFfVFJHRU41X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRUFEQ1RTMV9UUkdFTjVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkVBRENUUzE6IFRSR0VONSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZUQ01QREFUMF8xX0ZUQ01QX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDTVBEQVQwXzE6IEZUQ01QIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0ZUQ01QREFUMF8xX0ZUQ01QX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fRlRDTVBEQVQwXzFfRlRDTVBfUG9zKSAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZUQ01QREFUMF8xOiBGVENNUCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZUQ01QREFUMl8zX0ZUQ01QX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDTVBEQVQyXzM6IEZUQ01QIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0ZUQ01QREFUMl8zX0ZUQ01QX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fRlRDTVBEQVQyXzNfRlRDTVBfUG9zKSAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZUQ01QREFUMl8zOiBGVENNUCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZUQ01QREFUNF81X0ZUQ01QX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDTVBEQVQ0XzU6IEZUQ01QIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0ZUQ01QREFUNF81X0ZUQ01QX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fRlRDTVBEQVQ0XzVfRlRDTVBfUG9zKSAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZUQ01QREFUNF81OiBGVENNUCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NTQ1RMX1NTRU4wX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTRU4wIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NTQ1RMX1NTRU4wX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1NDVExfU1NFTjBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNTQ1RMOiBTU0VOMCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NTQ1RMX1NTRU4xX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTRU4xIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NTQ1RMX1NTRU4xX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1NDVExfU1NFTjFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNTQ1RMOiBTU0VOMSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NTQ1RMX1NTRU4yX1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTRU4yIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NTQ1RMX1NTRU4yX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1NDVExfU1NFTjJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNTQ1RMOiBTU0VOMiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NTQ1RMX1NTRU4zX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTRU4zIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NTQ1RMX1NTRU4zX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1NDVExfU1NFTjNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNTQ1RMOiBTU0VOMyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NTQ1RMX1NTRU40X1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTRU40IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NTQ1RMX1NTRU40X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1NDVExfU1NFTjRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNTQ1RMOiBTU0VONCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NTQ1RMX1NTRU41X1BvcyAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTRU41IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NTQ1RMX1NTRU41X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1NDVExfU1NFTjVfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNTQ1RMOiBTU0VONSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NTQ1RMX1NTUkNfUG9zICAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTUkMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NTQ1RMX1NTUkNfTXNrICAgICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fU1NDVExfU1NSQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNTQ1RMOiBTU1JDIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NTVFJHX0NOVFNFTl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NUUkc6IENOVFNFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1NTVFJHX0NOVFNFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1NUUkdfQ05UU0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNTVFJHOiBDTlRTRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0xFQkNUTF9MRUJFTl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TEVCQ1RMOiBMRUJFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0xFQkNUTF9MRUJFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTEVCQ1RMX0xFQkVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkxFQkNUTDogTEVCRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0xFQkNUTF9TUkNFTjBfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TEVCQ1RMOiBTUkNFTjAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0xFQkNUTF9TUkNFTjBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTEVCQ1RMX1NSQ0VOMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkxFQkNUTDogU1JDRU4wIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0xFQkNUTF9TUkNFTjJfUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TEVCQ1RMOiBTUkNFTjIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0xFQkNUTF9TUkNFTjJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTEVCQ1RMX1NSQ0VOMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkxFQkNUTDogU1JDRU4yIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0xFQkNUTF9TUkNFTjRfUG9zICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TEVCQ1RMOiBTUkNFTjQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0xFQkNUTF9TUkNFTjRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fTEVCQ1RMX1NSQ0VONF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkxFQkNUTDogU1JDRU40IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0xFQkNUTF9UUkdUWVBFX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TEVCQ1RMOiBUUkdUWVBFIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0xFQkNUTF9UUkdUWVBFX01zayAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fTEVCQ1RMX1RSR1RZUEVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkxFQkNUTDogVFJHVFlQRSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0xFQkNOVF9MRUJDTlRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TEVCQ05UOiBMRUJDTlQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0xFQkNOVF9MRUJDTlRfTXNrICAgICAgICAgICAgKDB4MWZmdWwgPDwgRVBXTV9MRUJDTlRfTEVCQ05UX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkxFQkNOVDogTEVCQ05UIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19DTlRNQVhGMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBDTlRNQVhGMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19DTlRNQVhGMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0NOVE1BWEYwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogQ05UTUFYRjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19DTlRNQVhGMV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBDTlRNQVhGMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19DTlRNQVhGMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0NOVE1BWEYxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogQ05UTUFYRjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19DTlRNQVhGMl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBDTlRNQVhGMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19DTlRNQVhGMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0NOVE1BWEYyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogQ05UTUFYRjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19DTlRNQVhGM19Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBDTlRNQVhGMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19DTlRNQVhGM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0NOVE1BWEYzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogQ05UTUFYRjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19DTlRNQVhGNF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBDTlRNQVhGNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19DTlRNQVhGNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0NOVE1BWEY0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogQ05UTUFYRjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19DTlRNQVhGNV9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBDTlRNQVhGNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19DTlRNQVhGNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0NOVE1BWEY1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogQ05UTUFYRjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19TWU5DSU5GMF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBTWU5DSU5GMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19TWU5DSU5GMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX1NZTkNJTkYwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogU1lOQ0lORjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19TWU5DSU5GMl9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBTWU5DSU5GMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19TWU5DSU5GMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX1NZTkNJTkYyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogU1lOQ0lORjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19TWU5DSU5GNF9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBTWU5DSU5GNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19TWU5DSU5GNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX1NZTkNJTkY0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogU1lOQ0lORjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19FQURDVFJHRjBfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBFQURDVFJHRjAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19FQURDVFJHRjBfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0VBRENUUkdGMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogRUFEQ1RSR0YwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19FQURDVFJHRjFfUG9zICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBFQURDVFJHRjEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19FQURDVFJHRjFfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0VBRENUUkdGMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogRUFEQ1RSR0YxIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19FQURDVFJHRjJfUG9zICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBFQURDVFJHRjIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19FQURDVFJHRjJfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0VBRENUUkdGMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogRUFEQ1RSR0YyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19FQURDVFJHRjNfUG9zICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBFQURDVFJHRjMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19FQURDVFJHRjNfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0VBRENUUkdGM19Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogRUFEQ1RSR0YzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19FQURDVFJHRjRfUG9zICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBFQURDVFJHRjQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19FQURDVFJHRjRfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0VBRENUUkdGNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogRUFEQ1RSR0Y0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19FQURDVFJHRjVfUG9zICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBFQURDVFJHRjUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19FQURDVFJHRjVfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0VBRENUUkdGNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogRUFEQ1RSR0Y1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1NUQVRVU19EQUNUUkdGX1BvcyAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBEQUNUUkdGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX1NUQVRVU19EQUNUUkdGX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fU1RBVFVTX0RBQ1RSR0ZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlNUQVRVUzogREFDVFJHRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTBfSUZBQ05UX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMDogSUZBQ05UIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTBfSUZBQ05UX01zayAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fSUZBMF9JRkFDTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTA6IElGQUNOVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTBfSUZBU0VMX1BvcyAgICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMDogSUZBU0VMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTBfSUZBU0VMX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fSUZBMF9JRkFTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTA6IElGQVNFTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTBfSUZBRU5fUG9zICAgICAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMDogSUZBRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTBfSUZBRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSUZBMF9JRkFFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTA6IElGQUVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTFfSUZBQ05UX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMTogSUZBQ05UIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTFfSUZBQ05UX01zayAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fSUZBMV9JRkFDTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTE6IElGQUNOVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTFfSUZBU0VMX1BvcyAgICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMTogSUZBU0VMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTFfSUZBU0VMX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fSUZBMV9JRkFTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTE6IElGQVNFTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTFfSUZBRU5fUG9zICAgICAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMTogSUZBRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTFfSUZBRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSUZBMV9JRkFFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTE6IElGQUVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTJfSUZBQ05UX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMjogSUZBQ05UIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTJfSUZBQ05UX01zayAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fSUZBMl9JRkFDTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTI6IElGQUNOVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTJfSUZBU0VMX1BvcyAgICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMjogSUZBU0VMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTJfSUZBU0VMX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fSUZBMl9JRkFTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTI6IElGQVNFTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTJfSUZBRU5fUG9zICAgICAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMjogSUZBRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTJfSUZBRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSUZBMl9JRkFFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTI6IElGQUVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTNfSUZBQ05UX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMzogSUZBQ05UIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTNfSUZBQ05UX01zayAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fSUZBM19JRkFDTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTM6IElGQUNOVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTNfSUZBU0VMX1BvcyAgICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMzogSUZBU0VMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTNfSUZBU0VMX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fSUZBM19JRkFTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTM6IElGQVNFTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTNfSUZBRU5fUG9zICAgICAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMzogSUZBRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTNfSUZBRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSUZBM19JRkFFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTM6IElGQUVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTRfSUZBQ05UX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBNDogSUZBQ05UIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTRfSUZBQ05UX01zayAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fSUZBNF9JRkFDTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTQ6IElGQUNOVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTRfSUZBU0VMX1BvcyAgICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBNDogSUZBU0VMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTRfSUZBU0VMX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fSUZBNF9JRkFTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTQ6IElGQVNFTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTRfSUZBRU5fUG9zICAgICAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBNDogSUZBRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTRfSUZBRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSUZBNF9JRkFFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTQ6IElGQUVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTVfSUZBQ05UX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBNTogSUZBQ05UIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTVfSUZBQ05UX01zayAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fSUZBNV9JRkFDTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTU6IElGQUNOVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTVfSUZBU0VMX1BvcyAgICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBNTogSUZBU0VMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTVfSUZBU0VMX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEVQV01fSUZBNV9JRkFTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTU6IElGQVNFTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0lGQTVfSUZBRU5fUG9zICAgICAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBNTogSUZBRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0lGQTVfSUZBRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fSUZBNV9JRkFFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OklGQTU6IElGQUVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FJTlRTVFNfSUZBSUYwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVFNUUzogSUZBSUYwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0FJTlRTVFNfSUZBSUYwX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQUlOVFNUU19JRkFJRjBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFJTlRTVFM6IElGQUlGMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FJTlRTVFNfSUZBSUYxX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVFNUUzogSUZBSUYxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0FJTlRTVFNfSUZBSUYxX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQUlOVFNUU19JRkFJRjFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFJTlRTVFM6IElGQUlGMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FJTlRTVFNfSUZBSUYyX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVFNUUzogSUZBSUYyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0FJTlRTVFNfSUZBSUYyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQUlOVFNUU19JRkFJRjJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFJTlRTVFM6IElGQUlGMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FJTlRTVFNfSUZBSUYzX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVFNUUzogSUZBSUYzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0FJTlRTVFNfSUZBSUYzX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQUlOVFNUU19JRkFJRjNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFJTlRTVFM6IElGQUlGMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FJTlRTVFNfSUZBSUY0X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVFNUUzogSUZBSUY0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0FJTlRTVFNfSUZBSUY0X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQUlOVFNUU19JRkFJRjRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFJTlRTVFM6IElGQUlGNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FJTlRTVFNfSUZBSUY1X1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVFNUUzogSUZBSUY1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0FJTlRTVFNfSUZBSUY1X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQUlOVFNUU19JRkFJRjVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFJTlRTVFM6IElGQUlGNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FJTlRFTl9JRkFJRU4wX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVEVOOiBJRkFJRU4wIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0FJTlRFTl9JRkFJRU4wX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQUlOVEVOX0lGQUlFTjBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFJTlRFTjogSUZBSUVOMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FJTlRFTl9JRkFJRU4xX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVEVOOiBJRkFJRU4xIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0FJTlRFTl9JRkFJRU4xX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQUlOVEVOX0lGQUlFTjFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFJTlRFTjogSUZBSUVOMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FJTlRFTl9JRkFJRU4yX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVEVOOiBJRkFJRU4yIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0FJTlRFTl9JRkFJRU4yX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQUlOVEVOX0lGQUlFTjJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFJTlRFTjogSUZBSUVOMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FJTlRFTl9JRkFJRU4zX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVEVOOiBJRkFJRU4zIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0FJTlRFTl9JRkFJRU4zX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQUlOVEVOX0lGQUlFTjNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFJTlRFTjogSUZBSUVOMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FJTlRFTl9JRkFJRU40X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVEVOOiBJRkFJRU40IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0FJTlRFTl9JRkFJRU40X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQUlOVEVOX0lGQUlFTjRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFJTlRFTjogSUZBSUVONCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FJTlRFTl9JRkFJRU41X1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVEVOOiBJRkFJRU41IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0FJTlRFTl9JRkFJRU41X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQUlOVEVOX0lGQUlFTjVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFJTlRFTjogSUZBSUVONSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FQRE1BQ1RMX0FQRE1BRU4wX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QVBETUFDVEw6IEFQRE1BRU4wIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0FQRE1BQ1RMX0FQRE1BRU4wX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fQVBETUFDVExfQVBETUFFTjBfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFQRE1BQ1RMOiBBUERNQUVOMCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FQRE1BQ1RMX0FQRE1BRU4xX1BvcyAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QVBETUFDVEw6IEFQRE1BRU4xIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0FQRE1BQ1RMX0FQRE1BRU4xX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fQVBETUFDVExfQVBETUFFTjFfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFQRE1BQ1RMOiBBUERNQUVOMSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FQRE1BQ1RMX0FQRE1BRU4yX1BvcyAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QVBETUFDVEw6IEFQRE1BRU4yIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0FQRE1BQ1RMX0FQRE1BRU4yX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fQVBETUFDVExfQVBETUFFTjJfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFQRE1BQ1RMOiBBUERNQUVOMiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FQRE1BQ1RMX0FQRE1BRU4zX1BvcyAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QVBETUFDVEw6IEFQRE1BRU4zIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0FQRE1BQ1RMX0FQRE1BRU4zX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fQVBETUFDVExfQVBETUFFTjNfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFQRE1BQ1RMOiBBUERNQUVOMyBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FQRE1BQ1RMX0FQRE1BRU40X1BvcyAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QVBETUFDVEw6IEFQRE1BRU40IFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0FQRE1BQ1RMX0FQRE1BRU40X01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fQVBETUFDVExfQVBETUFFTjRfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFQRE1BQ1RMOiBBUERNQUVONCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0FQRE1BQ1RMX0FQRE1BRU41X1BvcyAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QVBETUFDVEw6IEFQRE1BRU41IFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX0FQRE1BQ1RMX0FQRE1BRU41X01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fQVBETUFDVExfQVBETUFFTjVfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkFQRE1BQ1RMOiBBUERNQUVONSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElORU5fQ0FQSU5FTjBfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0NBUElORU5fQ0FQSU5FTjBfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSU5FTl9DQVBJTkVOMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElORU46IENBUElORU4wIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElORU5fQ0FQSU5FTjFfUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0NBUElORU5fQ0FQSU5FTjFfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSU5FTl9DQVBJTkVOMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElORU46IENBUElORU4xIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElORU5fQ0FQSU5FTjJfUG9zICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0NBUElORU5fQ0FQSU5FTjJfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSU5FTl9DQVBJTkVOMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElORU46IENBUElORU4yIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElORU5fQ0FQSU5FTjNfUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0NBUElORU5fQ0FQSU5FTjNfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSU5FTl9DQVBJTkVOM19Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElORU46IENBUElORU4zIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElORU5fQ0FQSU5FTjRfUG9zICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0NBUElORU5fQ0FQSU5FTjRfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSU5FTl9DQVBJTkVONF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElORU46IENBUElORU40IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElORU5fQ0FQSU5FTjVfUG9zICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0NBUElORU5fQ0FQSU5FTjVfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSU5FTl9DQVBJTkVONV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElORU46IENBUElORU41IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBFTjBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBFTjAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBFTjBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0NBUEVOMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogQ0FQRU4wIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBFTjFfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBFTjEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBFTjFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0NBUEVOMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogQ0FQRU4xIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBFTjJfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBFTjIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBFTjJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0NBUEVOMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogQ0FQRU4yIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBFTjNfUG9zICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBFTjMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBFTjNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0NBUEVOM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogQ0FQRU4zIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBFTjRfUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBFTjQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBFTjRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0NBUEVONF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogQ0FQRU40IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBFTjVfUG9zICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBFTjUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBFTjVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0NBUEVONV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogQ0FQRU41IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBJTlYwX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBJTlYwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBJTlYwX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0NBUElOVjBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogQ0FQSU5WMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBJTlYxX1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBJTlYxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBJTlYxX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0NBUElOVjFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogQ0FQSU5WMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBJTlYyX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBJTlYyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBJTlYyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0NBUElOVjJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogQ0FQSU5WMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBJTlYzX1BvcyAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBJTlYzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBJTlYzX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0NBUElOVjNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogQ0FQSU5WMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBJTlY0X1BvcyAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBJTlY0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBJTlY0X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0NBUElOVjRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogQ0FQSU5WNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBJTlY1X1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBJTlY1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9DQVBJTlY1X01zayAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0NBUElOVjVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogQ0FQSU5WNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9SQ1JMREVOMF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9SQ1JMREVOMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX1JDUkxERU4wX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogUkNSTERFTjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9SQ1JMREVOMV9Qb3MgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9SQ1JMREVOMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX1JDUkxERU4xX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogUkNSTERFTjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9SQ1JMREVOMl9Qb3MgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9SQ1JMREVOMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX1JDUkxERU4yX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogUkNSTERFTjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9SQ1JMREVOM19Qb3MgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9SQ1JMREVOM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX1JDUkxERU4zX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogUkNSTERFTjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9SQ1JMREVONF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBSQ1JMREVONCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9SQ1JMREVONF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX1JDUkxERU40X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogUkNSTERFTjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9SQ1JMREVONV9Qb3MgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBSQ1JMREVONSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9SQ1JMREVONV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX1JDUkxERU41X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogUkNSTERFTjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9GQ1JMREVOMF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9GQ1JMREVOMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0ZDUkxERU4wX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogRkNSTERFTjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9GQ1JMREVOMV9Qb3MgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9GQ1JMREVOMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0ZDUkxERU4xX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogRkNSTERFTjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9GQ1JMREVOMl9Qb3MgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9GQ1JMREVOMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0ZDUkxERU4yX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogRkNSTERFTjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9GQ1JMREVOM19Qb3MgICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9GQ1JMREVOM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0ZDUkxERU4zX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogRkNSTERFTjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9GQ1JMREVONF9Qb3MgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBGQ1JMREVONCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9GQ1JMREVONF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0ZDUkxERU40X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogRkNSTERFTjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUENUTF9GQ1JMREVONV9Qb3MgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBGQ1JMREVONSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUENUTF9GQ1JMREVONV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQQ1RMX0ZDUkxERU41X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUENUTDogRkNSTERFTjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUFNUU19DUkxJRk9WMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDUkxJRk9WMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUFNUU19DUkxJRk9WMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQU1RTX0NSTElGT1YwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUFNUUzogQ1JMSUZPVjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUFNUU19DUkxJRk9WMV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDUkxJRk9WMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUFNUU19DUkxJRk9WMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQU1RTX0NSTElGT1YxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUFNUUzogQ1JMSUZPVjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUFNUU19DUkxJRk9WMl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDUkxJRk9WMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUFNUU19DUkxJRk9WMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQU1RTX0NSTElGT1YyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUFNUUzogQ1JMSUZPVjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUFNUU19DUkxJRk9WM19Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDUkxJRk9WMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUFNUU19DUkxJRk9WM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQU1RTX0NSTElGT1YzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUFNUUzogQ1JMSUZPVjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUFNUU19DUkxJRk9WNF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDUkxJRk9WNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUFNUU19DUkxJRk9WNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQU1RTX0NSTElGT1Y0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUFNUUzogQ1JMSUZPVjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUFNUU19DUkxJRk9WNV9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDUkxJRk9WNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUFNUU19DUkxJRk9WNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQU1RTX0NSTElGT1Y1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUFNUUzogQ1JMSUZPVjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUFNUU19DRkxJRk9WMF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDRkxJRk9WMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUFNUU19DRkxJRk9WMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQU1RTX0NGTElGT1YwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUFNUUzogQ0ZMSUZPVjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUFNUU19DRkxJRk9WMV9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDRkxJRk9WMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUFNUU19DRkxJRk9WMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQU1RTX0NGTElGT1YxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUFNUUzogQ0ZMSUZPVjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUFNUU19DRkxJRk9WMl9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDRkxJRk9WMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUFNUU19DRkxJRk9WMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQU1RTX0NGTElGT1YyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUFNUUzogQ0ZMSUZPVjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUFNUU19DRkxJRk9WM19Qb3MgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDRkxJRk9WMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUFNUU19DRkxJRk9WM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQU1RTX0NGTElGT1YzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUFNUUzogQ0ZMSUZPVjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUFNUU19DRkxJRk9WNF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDRkxJRk9WNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUFNUU19DRkxJRk9WNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQU1RTX0NGTElGT1Y0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUFNUUzogQ0ZMSUZPVjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUFNUU19DRkxJRk9WNV9Qb3MgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDRkxJRk9WNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUFNUU19DRkxJRk9WNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQU1RTX0NGTElGT1Y1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUFNUUzogQ0ZMSUZPVjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1JDQVBEQVQwX1JDQVBEQVRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UkNBUERBVDA6IFJDQVBEQVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1JDQVBEQVQwX1JDQVBEQVRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUkNBUERBVDBfUkNBUERBVF9Qb3MpICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlJDQVBEQVQwOiBSQ0FQREFUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZDQVBEQVQwX0ZDQVBEQVRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkNBUERBVDA6IEZDQVBEQVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0ZDQVBEQVQwX0ZDQVBEQVRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fRkNBUERBVDBfRkNBUERBVF9Qb3MpICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZDQVBEQVQwOiBGQ0FQREFUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1JDQVBEQVQxX1JDQVBEQVRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UkNBUERBVDE6IFJDQVBEQVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1JDQVBEQVQxX1JDQVBEQVRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUkNBUERBVDFfUkNBUERBVF9Qb3MpICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlJDQVBEQVQxOiBSQ0FQREFUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZDQVBEQVQxX0ZDQVBEQVRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkNBUERBVDE6IEZDQVBEQVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0ZDQVBEQVQxX0ZDQVBEQVRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fRkNBUERBVDFfRkNBUERBVF9Qb3MpICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZDQVBEQVQxOiBGQ0FQREFUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1JDQVBEQVQyX1JDQVBEQVRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UkNBUERBVDI6IFJDQVBEQVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1JDQVBEQVQyX1JDQVBEQVRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUkNBUERBVDJfUkNBUERBVF9Qb3MpICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlJDQVBEQVQyOiBSQ0FQREFUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZDQVBEQVQyX0ZDQVBEQVRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkNBUERBVDI6IEZDQVBEQVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0ZDQVBEQVQyX0ZDQVBEQVRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fRkNBUERBVDJfRkNBUERBVF9Qb3MpICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZDQVBEQVQyOiBGQ0FQREFUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1JDQVBEQVQzX1JDQVBEQVRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UkNBUERBVDM6IFJDQVBEQVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1JDQVBEQVQzX1JDQVBEQVRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUkNBUERBVDNfUkNBUERBVF9Qb3MpICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlJDQVBEQVQzOiBSQ0FQREFUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZDQVBEQVQzX0ZDQVBEQVRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkNBUERBVDM6IEZDQVBEQVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0ZDQVBEQVQzX0ZDQVBEQVRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fRkNBUERBVDNfRkNBUERBVF9Qb3MpICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZDQVBEQVQzOiBGQ0FQREFUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1JDQVBEQVQ0X1JDQVBEQVRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UkNBUERBVDQ6IFJDQVBEQVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1JDQVBEQVQ0X1JDQVBEQVRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUkNBUERBVDRfUkNBUERBVF9Qb3MpICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlJDQVBEQVQ0OiBSQ0FQREFUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZDQVBEQVQ0X0ZDQVBEQVRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkNBUERBVDQ6IEZDQVBEQVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0ZDQVBEQVQ0X0ZDQVBEQVRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fRkNBUERBVDRfRkNBUERBVF9Qb3MpICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZDQVBEQVQ0OiBGQ0FQREFUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1JDQVBEQVQ1X1JDQVBEQVRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UkNBUERBVDU6IFJDQVBEQVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1JDQVBEQVQ1X1JDQVBEQVRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUkNBUERBVDVfUkNBUERBVF9Qb3MpICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlJDQVBEQVQ1OiBSQ0FQREFUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZDQVBEQVQ1X0ZDQVBEQVRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkNBUERBVDU6IEZDQVBEQVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX0ZDQVBEQVQ1X0ZDQVBEQVRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fRkNBUERBVDVfRkNBUERBVF9Qb3MpICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZDQVBEQVQ1OiBGQ0FQREFUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDVExfQ0hFTjBfMV9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0hFTjBfMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDVExfQ0hFTjBfMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUERNQUNUTF9DSEVOMF8xX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDVEw6IENIRU4wXzEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDVExfQ0FQTU9EMF8xX1BvcyAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0FQTU9EMF8xIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDVExfQ0FQTU9EMF8xX01zayAgICAgICAgKDB4M3VsIDw8IEVQV01fUERNQUNUTF9DQVBNT0QwXzFfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDVEw6IENBUE1PRDBfMSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDVExfQ0FQT1JEMF8xX1BvcyAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0FQT1JEMF8xIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDVExfQ0FQT1JEMF8xX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fUERNQUNUTF9DQVBPUkQwXzFfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDVEw6IENBUE9SRDBfMSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDVExfQ0hTRUwwXzFfUG9zICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0hTRUwwXzEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDVExfQ0hTRUwwXzFfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fUERNQUNUTF9DSFNFTDBfMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDVEw6IENIU0VMMF8xIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDVExfQ0hFTjJfM19Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0hFTjJfMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDVExfQ0hFTjJfM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUERNQUNUTF9DSEVOMl8zX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDVEw6IENIRU4yXzMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDVExfQ0FQTU9EMl8zX1BvcyAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0FQTU9EMl8zIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDVExfQ0FQTU9EMl8zX01zayAgICAgICAgKDB4M3VsIDw8IEVQV01fUERNQUNUTF9DQVBNT0QyXzNfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDVEw6IENBUE1PRDJfMyBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDVExfQ0FQT1JEMl8zX1BvcyAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0FQT1JEMl8zIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDVExfQ0FQT1JEMl8zX01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fUERNQUNUTF9DQVBPUkQyXzNfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDVEw6IENBUE9SRDJfMyBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDVExfQ0hTRUwyXzNfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0hTRUwyXzMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDVExfQ0hTRUwyXzNfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fUERNQUNUTF9DSFNFTDJfM19Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDVEw6IENIU0VMMl8zIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDVExfQ0hFTjRfNV9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0hFTjRfNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDVExfQ0hFTjRfNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fUERNQUNUTF9DSEVONF81X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDVEw6IENIRU40XzUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDVExfQ0FQTU9ENF81X1BvcyAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0FQTU9ENF81IFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDVExfQ0FQTU9ENF81X01zayAgICAgICAgKDB4M3VsIDw8IEVQV01fUERNQUNUTF9DQVBNT0Q0XzVfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDVEw6IENBUE1PRDRfNSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDVExfQ0FQT1JENF81X1BvcyAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0FQT1JENF81IFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDVExfQ0FQT1JENF81X01zayAgICAgICAgKDB4MXVsIDw8IEVQV01fUERNQUNUTF9DQVBPUkQ0XzVfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDVEw6IENBUE9SRDRfNSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDVExfQ0hTRUw0XzVfUG9zICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0hTRUw0XzUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDVExfQ0hTRUw0XzVfTXNrICAgICAgICAgKDB4MXVsIDw8IEVQV01fUERNQUNUTF9DSFNFTDRfNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDVEw6IENIU0VMNF81IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDQVAwXzFfQ0FQQlVGX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNBUDBfMTogQ0FQQlVGIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDQVAwXzFfQ0FQQlVGX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUERNQUNBUDBfMV9DQVBCVUZfUG9zKSAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDQVAwXzE6IENBUEJVRiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDQVAyXzNfQ0FQQlVGX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNBUDJfMzogQ0FQQlVGIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDQVAyXzNfQ0FQQlVGX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUERNQUNBUDJfM19DQVBCVUZfUG9zKSAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDQVAyXzM6IENBUEJVRiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BETUFDQVA0XzVfQ0FQQlVGX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNBUDRfNTogQ0FQQlVGIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFUFdNX1BETUFDQVA0XzVfQ0FQQlVGX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUERNQUNBUDRfNV9DQVBCVUZfUG9zKSAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBETUFDQVA0XzU6IENBUEJVRiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBSSUVOMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBSSUVOMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBSSUVOMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUVOX0NBUFJJRU4wX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElFTjogQ0FQUklFTjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBSSUVOMV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBSSUVOMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBSSUVOMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUVOX0NBUFJJRU4xX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElFTjogQ0FQUklFTjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBSSUVOMl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBSSUVOMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBSSUVOMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUVOX0NBUFJJRU4yX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElFTjogQ0FQUklFTjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBSSUVOM19Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBSSUVOMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBSSUVOM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUVOX0NBUFJJRU4zX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElFTjogQ0FQUklFTjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBSSUVONF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBSSUVONCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBSSUVONF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUVOX0NBUFJJRU40X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElFTjogQ0FQUklFTjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBSSUVONV9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBSSUVONSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBSSUVONV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUVOX0NBUFJJRU41X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElFTjogQ0FQUklFTjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBGSUVOMF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBGSUVOMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBGSUVOMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUVOX0NBUEZJRU4wX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElFTjogQ0FQRklFTjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBGSUVOMV9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBGSUVOMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBGSUVOMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUVOX0NBUEZJRU4xX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElFTjogQ0FQRklFTjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBGSUVOMl9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBGSUVOMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBGSUVOMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUVOX0NBUEZJRU4yX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElFTjogQ0FQRklFTjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBGSUVOM19Qb3MgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBGSUVOMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBGSUVOM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUVOX0NBUEZJRU4zX1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElFTjogQ0FQRklFTjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBGSUVONF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBGSUVONCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBGSUVONF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUVOX0NBUEZJRU40X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElFTjogQ0FQRklFTjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBGSUVONV9Qb3MgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBGSUVONSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElFTl9DQVBGSUVONV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUVOX0NBUEZJRU41X1BvcykgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElFTjogQ0FQRklFTjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElGX0NSTElGMF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENSTElGMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElGX0NSTElGMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUZfQ1JMSUYwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElGOiBDUkxJRjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElGX0NSTElGMV9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENSTElGMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElGX0NSTElGMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUZfQ1JMSUYxX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElGOiBDUkxJRjEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElGX0NSTElGMl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENSTElGMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElGX0NSTElGMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUZfQ1JMSUYyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElGOiBDUkxJRjIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElGX0NSTElGM19Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENSTElGMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElGX0NSTElGM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUZfQ1JMSUYzX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElGOiBDUkxJRjMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElGX0NSTElGNF9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENSTElGNCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElGX0NSTElGNF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUZfQ1JMSUY0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElGOiBDUkxJRjQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElGX0NSTElGNV9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENSTElGNSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElGX0NSTElGNV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUZfQ1JMSUY1X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElGOiBDUkxJRjUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElGX0NGTElGMF9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENGTElGMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElGX0NGTElGMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUZfQ0ZMSUYwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElGOiBDRkxJRjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElGX0NGTElGMV9Qb3MgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENGTElGMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElGX0NGTElGMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUZfQ0ZMSUYxX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElGOiBDRkxJRjEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElGX0NGTElGMl9Qb3MgICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENGTElGMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElGX0NGTElGMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUZfQ0ZMSUYyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElGOiBDRkxJRjIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElGX0NGTElGM19Qb3MgICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENGTElGMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElGX0NGTElGM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUZfQ0ZMSUYzX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElGOiBDRkxJRjMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElGX0NGTElGNF9Qb3MgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENGTElGNCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElGX0NGTElGNF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUZfQ0ZMSUY0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElGOiBDRkxJRjQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NBUElGX0NGTElGNV9Qb3MgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENGTElGNSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NBUElGX0NGTElGNV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ0FQSUZfQ0ZMSUY1X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNBUElGOiBDRkxJRjUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BCVUYwX1BCVUZfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEJVRjA6IFBCVUYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BCVUYwX1BCVUZfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEJVRjBfUEJVRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBCVUYwOiBQQlVGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BCVUYxX1BCVUZfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEJVRjE6IFBCVUYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BCVUYxX1BCVUZfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEJVRjFfUEJVRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBCVUYxOiBQQlVGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BCVUYyX1BCVUZfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEJVRjI6IFBCVUYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BCVUYyX1BCVUZfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEJVRjJfUEJVRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBCVUYyOiBQQlVGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BCVUYzX1BCVUZfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEJVRjM6IFBCVUYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BCVUYzX1BCVUZfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEJVRjNfUEJVRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBCVUYzOiBQQlVGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BCVUY0X1BCVUZfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEJVRjQ6IFBCVUYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BCVUY0X1BCVUZfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEJVRjRfUEJVRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBCVUY0OiBQQlVGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX1BCVUY1X1BCVUZfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEJVRjU6IFBCVUYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX1BCVUY1X1BCVUZfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fUEJVRjVfUEJVRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OlBCVUY1OiBQQlVGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NNUEJVRjBfQ01QQlVGX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QQlVGMDogQ01QQlVGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NNUEJVRjBfQ01QQlVGX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ01QQlVGMF9DTVBCVUZfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNNUEJVRjA6IENNUEJVRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NNUEJVRjFfQ01QQlVGX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QQlVGMTogQ01QQlVGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NNUEJVRjFfQ01QQlVGX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ01QQlVGMV9DTVBCVUZfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNNUEJVRjE6IENNUEJVRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NNUEJVRjJfQ01QQlVGX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QQlVGMjogQ01QQlVGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NNUEJVRjJfQ01QQlVGX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ01QQlVGMl9DTVBCVUZfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNNUEJVRjI6IENNUEJVRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NNUEJVRjNfQ01QQlVGX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QQlVGMzogQ01QQlVGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NNUEJVRjNfQ01QQlVGX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ01QQlVGM19DTVBCVUZfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNNUEJVRjM6IENNUEJVRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NNUEJVRjRfQ01QQlVGX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QQlVGNDogQ01QQlVGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NNUEJVRjRfQ01QQlVGX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ01QQlVGNF9DTVBCVUZfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNNUEJVRjQ6IENNUEJVRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NNUEJVRjVfQ01QQlVGX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QQlVGNTogQ01QQlVGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFUFdNX0NNUEJVRjVfQ01QQlVGX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fQ01QQlVGNV9DTVBCVUZfUG9zKSAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNNUEJVRjU6IENNUEJVRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NQU0NCVUYwXzFfQ1BTQ0JVRl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1BTQ0JVRjBfMTogQ1BTQ0JVRiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0NQU0NCVUYwXzFfQ1BTQ0JVRl9Nc2sgICAgICAgKDB4ZmZmdWwgPDwgRVBXTV9DUFNDQlVGMF8xX0NQU0NCVUZfUG9zKSAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNQU0NCVUYwXzE6IENQU0NCVUYgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NQU0NCVUYyXzNfQ1BTQ0JVRl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1BTQ0JVRjJfMzogQ1BTQ0JVRiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0NQU0NCVUYyXzNfQ1BTQ0JVRl9Nc2sgICAgICAgKDB4ZmZmdWwgPDwgRVBXTV9DUFNDQlVGMl8zX0NQU0NCVUZfUG9zKSAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNQU0NCVUYyXzM6IENQU0NCVUYgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NQU0NCVUY0XzVfQ1BTQ0JVRl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1BTQ0JVRjRfNTogQ1BTQ0JVRiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0NQU0NCVUY0XzVfQ1BTQ0JVRl9Nc2sgICAgICAgKDB4ZmZmdWwgPDwgRVBXTV9DUFNDQlVGNF81X0NQU0NCVUZfUG9zKSAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNQU0NCVUY0XzU6IENQU0NCVUYgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZUQ0JVRjBfMV9GVENNUEJVRl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDQlVGMF8xOiBGVENNUEJVRiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0ZUQ0JVRjBfMV9GVENNUEJVRl9Nc2sgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fRlRDQlVGMF8xX0ZUQ01QQlVGX1BvcykgICAgICAgICAgLyohPCBFUFdNX1Q6OkZUQ0JVRjBfMTogRlRDTVBCVUYgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZUQ0JVRjJfM19GVENNUEJVRl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDQlVGMl8zOiBGVENNUEJVRiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0ZUQ0JVRjJfM19GVENNUEJVRl9Nc2sgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fRlRDQlVGMl8zX0ZUQ01QQlVGX1BvcykgICAgICAgICAgLyohPCBFUFdNX1Q6OkZUQ0JVRjJfMzogRlRDTVBCVUYgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZUQ0JVRjRfNV9GVENNUEJVRl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDQlVGNF81OiBGVENNUEJVRiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBFUFdNX0ZUQ0JVRjRfNV9GVENNUEJVRl9Nc2sgICAgICAgKDB4ZmZmZnVsIDw8IEVQV01fRlRDQlVGNF81X0ZUQ01QQlVGX1BvcykgICAgICAgICAgLyohPCBFUFdNX1Q6OkZUQ0JVRjRfNTogRlRDTVBCVUYgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZUQ0lfRlRDTVUwX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDSTogRlRDTVUwIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0ZUQ0lfRlRDTVUwX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRlRDSV9GVENNVTBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZUQ0k6IEZUQ01VMCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZUQ0lfRlRDTVUyX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDSTogRlRDTVUyIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0ZUQ0lfRlRDTVUyX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRlRDSV9GVENNVTJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZUQ0k6IEZUQ01VMiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZUQ0lfRlRDTVU0X1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDSTogRlRDTVU0IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0ZUQ0lfRlRDTVU0X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRlRDSV9GVENNVTRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZUQ0k6IEZUQ01VNCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZUQ0lfRlRDTUQwX1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDSTogRlRDTUQwIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0ZUQ0lfRlRDTUQwX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRlRDSV9GVENNRDBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZUQ0k6IEZUQ01EMCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZUQ0lfRlRDTUQyX1BvcyAgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDSTogRlRDTUQyIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0ZUQ0lfRlRDTUQyX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRlRDSV9GVENNRDJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZUQ0k6IEZUQ01EMiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0ZUQ0lfRlRDTUQ0X1BvcyAgICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDSTogRlRDTUQ0IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0ZUQ0lfRlRDTUQ0X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fRlRDSV9GVENNRDRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkZUQ0k6IEZUQ01ENCBNYXNrICAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBFUFdNX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBFUFdNIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKworI2VuZGlmIC8qIF9fRVBXTV9SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZm1jX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2ZtY19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODM0OTA1Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2ZtY19yZWcuaApAQCAtMCwwICsxLDcyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGZtY19yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgRk1DIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0ZNQ19SRUdfSF9fCisjZGVmaW5lIF9fRk1DX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGbGFzaCBNZW1vcnkgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIEZNQyBGbGFzaCBNZW1vcnkgQ29udHJvbGxlcihGTUMpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIEZNQyBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIEZNQ19UOjpJU1BDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIElTUCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SVNQRU4gICAgIHxJU1AgRW5hYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJU1AgZnVuY3Rpb24gZW5hYmxlIGJpdC4gU2V0IHRoaXMgYml0IHRvIGVuYWJsZSBJU1AgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElTUCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSVNQIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxXSAgICAgfEJTICAgICAgICB8Qm9vdCBTZWxlY3QgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBNQlMgaW4gQ09ORklHMCBpcyAxLCBzZXQvY2xlYXIgdGhpcyBiaXQgdG8gc2VsZWN0IG5leHQgYm9vdGluZyBmcm9tIExEUk9NL0FQUk9NLCByZXNwZWN0aXZlbHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBhbHNvIGZ1bmN0aW9ucyBhcyBjaGlwIGJvb3Rpbmcgc3RhdHVzIGZsYWcsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXJlIGNoaXAgYm9vdGVkIGZyb20KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBpbml0aWF0ZWQgd2l0aCB0aGUgaW52ZXJzZSB2YWx1ZSBvZiBDQlNbMV0gKENPTkZJRzBbN10pIGFmdGVyIGFueSByZXNldCBpcyBoYXBwZW5lZCBleGNlcHQgQ1BVIHJlc2V0IChDUFUgaXMgMSkgb3Igc3lzdGVtIHJlc2V0IChTWVMpIGlzIGhhcHBlbmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJvb3RpbmcgZnJvbSBBUFJPTSB3aGVuIE1CUyAoQ09ORklHMFs1XSkgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQm9vdGluZyBmcm9tIExEUk9NIHdoZW4gTUJTIChDT05GSUcwWzVdKSBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbM10gICAgIHxBUFVFTiAgICAgfEFQUk9NIFVwZGF0ZSBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBUFJPTSBjYW5ub3QgYmUgdXBkYXRlZCB3aGVuIHRoZSBjaGlwIHJ1bnMgaW4gQVBST00uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFQUk9NIGNhbiBiZSB1cGRhdGVkIHdoZW4gdGhlIGNoaXAgcnVucyBpbiBBUFJPTS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzRdICAgICB8Q0ZHVUVOICAgIHxDT05GSUcgVXBkYXRlIEVuYWJsZSBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENPTkZJRyBjYW5ub3QgYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ09ORklHIGNhbiBiZSB1cGRhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNV0gICAgIHxMRFVFTiAgICAgfExEUk9NIFVwZGF0ZSBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfExEUk9NIHVwZGF0ZSBlbmFibGUgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMRFJPTSBjYW5ub3QgYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTERST00gY2FuIGJlIHVwZGF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs2XSAgICAgfElTUEZGICAgICB8SVNQIEZhaWwgRmxhZyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBhIHRyaWdnZXJlZCBJU1AgbWVldHMgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBuZWVkcyB0byBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMSkgQVBST00gd3JpdGVzIHRvIGl0c2VsZiBpZiBBUFVFTiBpcyBzZXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMikgTERST00gd3JpdGVzIHRvIGl0c2VsZiBpZiBMRFVFTiBpcyBzZXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMykgQ09ORklHIGlzIGVyYXNlZC9wcm9ncmFtbWVkIGlmIENGR1VFTiBpcyBzZXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoNCkgUGFnZSBFcmFzZSBjb21tYW5kIGF0IExPQ0sgbW9kZSB3aXRoIElDRSBjb25uZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDUpIEVyYXNlIG9yIFByb2dyYW0gY29tbWFuZCBhdCBicm93bi1vdXQgZGV0ZWN0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoNikgRGVzdGluYXRpb24gYWRkcmVzcyBpcyBpbGxlZ2FsLCBzdWNoIGFzIG92ZXIgYW4gYXZhaWxhYmxlIHJhbmdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCg3KSBJbnZhbGlkIElTUCBjb21tYW5kcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCg4KSBLUFJPTSBpcyBlcmFzZWQvcHJvZ3JhbW1lZCBpZiBLRVlMT0NLIGlzIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDkpIEFQUk9NIGlzIGVyYXNlZC9wcm9ncmFtbWVkIGlmIEtFWUxPQ0sgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTApIExEUk9NIGlzIGVyYXNlZC9wcm9ncmFtbWVkIGlmIEtFWUxPQ0sgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTEpIENPTkZJRyBpcyBlcmFzZWQvcHJvZ3JhbW1lZCBpZiBLRVlMT0NLIGlzIHNldCB0byAxIGFuZCBLRVlFTlJPTVswXSBpcyAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDEyKSBSZWFkIGFueSBjb250ZW50IG9mIGJvb3QgbG9hZGVyIHdpdGggSUNFIGNvbm5lY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTMpIFRoZSBhZGRyZXNzIG9mIGJsb2NrIGVyYXNlIGFuZCBiYW5rIGVyYXNlIGlzIG5vdCBpbiBBUFJPTQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxNCkgSVNQIENNRCBpbiBYT00gcmVnaW9uLCBleGNlcHQgbWFzcyBlcmFzZSwgcGFnZSBlcmFzZSBhbmQgY2hrc3VtIGNvbW1hbmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTUpIFRoZSB3cm9uZyBzZXR0aW5nIG9mIHBhZ2UgZXJhc2UgSVNQIENNRCBpbiBYT00KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTYpIFZpb2xhdGUgWE9NIHNldHRpbmcgb25lIHRpbWUgcHJvdGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxNykgUGFnZSBlcmFzZSBJU1AgQ01EIGluIFNlY3VyZS9Ob24tc2VjdXJlIHJlZ2lvbiBzZXR0aW5nIHBhZ2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTgpIE1hc3MgZXJhc2Ugd2hlbiBNRVJBU0UgKENGRzBbMTNdKSBpcyBkaXNhYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDE5KSBQYWdlIGVyYXNlLCBtYXNzIGVyYXNlICwgbXVsdGktd29yZCBwcm9ncmFtIG9yIDY0LWJpdCB3b3JkIHByb2dyYW0gaW4gT1RQCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxNl0gICAgfEJMICAgICAgICB8Qm9vdCBMb2FkZXIgQm9vdGluZyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBpbml0aWF0ZWQgd2l0aCB0aGUgaW52ZXJzZXMgdmFsdWUgb2YgTUJTIChDT05GSUcwWzVdKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFueSByZXNldCwgZXhjZXB0IENQVSByZXNldCAoQ1BVIGlzIDEpIG9yIHN5c3RlbSByZXNldCAoU1lTKSwgQkwgd2lsbCBiZSByZWxvYWRlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gY2hlY2sgY2hpcCBib290IGZyb20gQm9vdCBMb2FkZXIgb3Igbm90CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBzaG91bGQga2VlcCBvcmlnaW5hbCB2YWx1ZSBvZiB0aGlzIGJpdCB3aGVuIHVwZGF0aW5nIEZNQ19JU1BDVEwgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJvb3RpbmcgZnJvbSBBUFJPTSBvciBMRFJPTS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQm9vdGluZyBmcm9tIEJvb3QgTG9hZGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMjRdICAgIHxJTlRFTiAgICAgfEludGVycnVwdCBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElTUCBJTlQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElTUCBJTlQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4gQmVmb3JlIHVzZSBJTlQsIHVzZXIgbmVlZCB0byBjbGVhciB0aGUgSU5URkxBRyhGTUNfSVNQU1RTWzI0XSkgbWFrZSBzdXJlIElOVCBoYXBwZW4gYXQgY29ycmVjdCB0aW1lLgorICAgICAqIEB2YXIgRk1DX1Q6OklTUEFERFIKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIElTUCBBZGRyZXNzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVNQQUREUiAgIHxJU1AgQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBOdU1pY3JvIE0yMzUxIHNlcmllcyBpcyBlcXVpcHBlZCB3aXRoIGVtYmVkZGVkIGZsYXNoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SVNQQUREUlsxOjBdIG11c3QgYmUga2VwdCAwMCBmb3IgSVNQIDMyLWJpdCBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJU1BBRERSWzI6MF0gbXVzdCBiZSBrZXB0IDAwMCBmb3IgSVNQIDY0LWJpdCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIENSQzMyIENoZWNrc3VtIENhbGN1bGF0aW9uIGNvbW1hbmQsIHRoaXMgZmllbGQgaXMgdGhlIGZsYXNoIHN0YXJ0aW5nIGFkZHJlc3MgZm9yIGNoZWNrc3VtIGNhbGN1bGF0aW9uLCAyIEtCeXRlcyBhbGlnbm1lbnQgaXMgbmVjZXNzYXJ5IGZvciBDUkMzMiBjaGVja3N1bSBjYWxjdWxhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgRkxBU0ggMzItYml0IFByb2dyYW0sIElTUCBhZGRyZXNzIG5lZWRzIHdvcmQgYWxpZ25tZW50ICg0LWJ5dGUpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEZMQVNIIDY0LWJpdCBQcm9ncmFtLCBJU1AgYWRkcmVzcyBuZWVkcyBkb3VibGUgd29yZCBhbGlnbm1lbnQgKDgtYnl0ZSkuCisgICAgICogQHZhciBGTUNfVDo6SVNQREFUCisgICAgICogT2Zmc2V0OiAweDA4ICBJU1AgRGF0YSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfElTUERBVCAgICB8SVNQIERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBkYXRhIHRvIHRoaXMgcmVnaXN0ZXIgYmVmb3JlIElTUCBwcm9ncmFtIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIGRhdGEgZnJvbSB0aGlzIHJlZ2lzdGVyIGFmdGVyIElTUCByZWFkIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIElTUEZGIChGTUNfSVNQQ1RMWzZdKSBpcyAxLCBJU1BEQVQgPSAweGZmZmZfZmZmZgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBSdW4gQ1JDMzIgQ2hlY2tzdW0gQ2FsY3VsYXRpb24gY29tbWFuZCwgSVNQREFUIGlzIHRoZSBtZW1vcnkgc2l6ZSAoYnl0ZSkgYW5kIDIgS0J5dGVzIGFsaWdubWVudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBJU1AgUmVhZCBDUkMzMiBDaGVja3N1bSBjb21tYW5kLCBJU1BEQVQgaXMgdGhlIGNoZWNrc3VtIHJlc3VsdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIElTUERBVCA9IDB4MDAwMF8wMDAwLCBpdCBtZWFucyB0aGF0ICgxKSB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb24gaXMgaW4gcHJvZ3Jlc3MsIG9yICgyKSB0aGUgbWVtb3J5IHJhbmdlIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbiBpcyBpbmNvcnJlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgWE9NIHBhZ2UgZXJhc2UgZnVuY3Rpb24sICwgSVNQREFUID0gMHgwMDU1X2FhMDMuCisgICAgICogQHZhciBGTUNfVDo6SVNQQ01ECisgICAgICogT2Zmc2V0OiAweDBDICBJU1AgQ29tbWFuZCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs2OjBdICAgfENNRCAgICAgICB8SVNQIENvbW1hbmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJU1AgY29tbWFuZCB0YWJsZSBpcyBzaG93biBiZWxvdzoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAwPSBGTEFTSCBSZWFkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDQ9IFJlYWQgVW5pcXVlIElELgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDg9IFJlYWQgRmxhc2ggQWxsLU9uZSBSZXN1bHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwQj0gUmVhZCBDb21wYW55IElELgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MEM9IFJlYWQgRGV2aWNlIElELgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MEQ9IFJlYWQgQ2hlY2tzdW0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgyMT0gRkxBU0ggMzItYml0IFByb2dyYW0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgyMj0gRkxBU0ggUGFnZSBFcmFzZS4gRXJhc2UgYW55IHBhZ2UgaW4gdHdvIGJhbmtzLCBleGNlcHQgZm9yIE9UUC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDIzPSBGTEFTSCBCYW5rIEVyYXNlLiBFcmFzZSBhbGwgcGFnZXMgb2YgQVBST00gaW4gQkFOSzAgb3IgQkFOSzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgyNT0gRkxBU0ggQmxvY2sgRXJhc2UgRXJhc2UgZm91ciBwYWdlcyBhbGlnbm1lbnQgb2YgQVBST00gaW4gQkFOSzAgb3IgQkFOSzEuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4Mjc9IEZMQVNIIE11bHRpLVdvcmQgUHJvZ3JhbS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDI4PSBSdW4gRmxhc2ggQWxsLU9uZSBWZXJpZmljYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgyRD0gUnVuIENoZWNrc3VtIENhbGN1bGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MkU9IFZlY3RvciBSZW1hcC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQwPSBGTEFTSCA2NC1iaXQgUmVhZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDYxPSBGTEFTSCA2NC1iaXQgUHJvZ3JhbS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgb3RoZXIgY29tbWFuZHMgYXJlIGludmFsaWQuCisgICAgICogQHZhciBGTUNfVDo6SVNQVFJHCisgICAgICogT2Zmc2V0OiAweDEwICBJU1AgVHJpZ2dlciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SVNQR08gICAgIHxJU1AgU3RhcnQgVHJpZ2dlciAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHN0YXJ0IElTUCBvcGVyYXRpb24gYW5kIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGJ5IGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgd2hlbiBJU1Agb3BlcmF0aW9uIGlzIGZpbmlzaGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBJU1BHTz0xLCB0aGUgb3BlcmF0aW9uIG9mIGFjY2Vzc2luZyB2YWx1ZSBmcm9tIGFkZHJlc3MgRk1DX0JBKzB4MDAgdG8gRk1DX0JBKzB4Njggd291bGQgaGFsdCBDUFUgc3RpbGwgSVNQR08gPTAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB1c2VyIHdhbnQgdG8gbW9uaXRvciB3aGV0aGVyIElTUCBmaW5pc2ggb3Igbm90LHVzZXIgY2FuIGFjY2VzcyBGTUNfTVBTVFNbMF0gTVBCVVNZLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJU1Agb3BlcmF0aW9uIGlzIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJU1AgaXMgcHJvZ3Jlc3NlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEZNQ19UOjpJU1BTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NDAgIElTUCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxJU1BCVVNZICAgfElTUCBCdXN5IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHN0YXJ0IElTUCBvcGVyYXRpb24gYW5kIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGJ5IGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgd2hlbiBJU1Agb3BlcmF0aW9uIGlzIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHRoZSBtaXJyb3Igb2YgSVNQR08oRk1DX0lTUFRSR1swXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElTUCBvcGVyYXRpb24gaXMgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElTUCBpcyBwcm9ncmVzc2VkLgorICAgICAqIHxbMl0gICAgIHxDQlMgICAgICAgfEJvb3QgU2VsZWN0aW9uIG9mIENPTkZJRyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGluaXRpYXRlZCB3aXRoIHRoZSBDQlMgKENPTkZJRzBbN10pIGFmdGVyIGFueSByZXNldCBpcyBoYXBwZW5lZCBleGNlcHQgQ1BVIHJlc2V0IChDUFUgaXMgMSkgb3Igc3lzdGVtIHJlc2V0IChTWVMpIGlzIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgdmFsaWQgd2hlbiBNQlMgKEZNQ19JU1BTVFNbM10pPSAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMRFJPTSB3aXRoIElBUCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBUFJPTSB3aXRoIElBUCBtb2RlLgorICAgICAqIHxbM10gICAgIHxNQlMgICAgICAgfEJvb3QgRnJvbSBCb290IExvYWRlciBTZWxlY3Rpb24gRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGluaXRpYXRlZCB3aXRoIHRoZSBNQlMgKENPTkZJRzBbNV0pIGFmdGVyIGFueSByZXNldCBpcyBoYXBwZW5lZCBleGNlcHQgQ1BVIHJlc2V0IChDUFUgaXMgMSkgb3Igc3lzdGVtIHJlc2V0IChTWVMpIGlzIGhhcHBlbmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJvb3RpbmcgZnJvbSBCb290IExvYWRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQm9vdGluZyBmcm9tIExEUk9NL0FQUk9NLiguc2VlIENCUyBiaXQgc2V0dGluZykKKyAgICAgKiB8WzRdICAgICB8RkNZQ0RJUyAgIHxGbGFzaCBBY2Nlc3MgQ3ljbGUgQXV0by10dW5pbmcgRGlzYWJsZWQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBmbGFzaCBhY2Nlc3MgY3ljbGUgYXV0by10dW5pbmcgZnVuY3Rpb24gaXMgZGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYXV0by10dW5pbmcgZnVuY3Rpb24gaXMgZGlzYWJsZWQgYnkgRkFESVMoRk1DX0NZQ0NUTFs4XSkgb3IgSElSQyBjbG9jayBpcyBub3QgcmVhZHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZsYXNoIGFjY2VzcyBjeWNsZSBhdXRvLXR1bmluZyBpcyBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGbGFzaCBhY2Nlc3MgY3ljbGUgYXV0by10dW5pbmcgaXMgRGlzYWJsZWQuCisgICAgICogfFs1XSAgICAgfFBHRkYgICAgICB8Rmxhc2ggUHJvZ3JhbSB3aXRoIEZhc3QgVmVyaWZpY2F0aW9uIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgaWYgZGF0YSBpcyBtaXNtYXRjaGVkIGF0IElTUCBwcm9ncmFtbWluZyB2ZXJpZmljYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBjbGVhciBieSBwZXJmb3JtaW5nIElTUCBmbGFzaCBlcmFzZSBvciBJU1AgcmVhZCBDSUQgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZsYXNoIFByb2dyYW0gaXMgc3VjY2Vzcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRmxhc2ggUHJvZ3JhbSBpcyBmYWlsLiBQcm9ncmFtIGRhdGEgaXMgZGlmZmVyZW50IHdpdGggZGF0YSBpbiB0aGUgZmxhc2ggbWVtb3J5CisgICAgICogfFs2XSAgICAgfElTUEZGICAgICB8SVNQIEZhaWwgRmxhZyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB0aGUgbWlycm9yIG9mIElTUEZGIChGTUNfSVNQQ1RMWzZdKSwgaXQgbmVlZHMgdG8gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gRk1DX0lTUENUTFs2XSBvciBGTUNfSVNQU1RTWzZdIGlmIHRoaXMgYml0IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBhIHRyaWdnZXJlZCBJU1AgbWVldHMgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMSkgQVBST00gd3JpdGVzIHRvIGl0c2VsZiBpZiBBUFVFTiBpcyBzZXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMikgTERST00gd3JpdGVzIHRvIGl0c2VsZiBpZiBMRFVFTiBpcyBzZXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMykgQ09ORklHIGlzIGVyYXNlZC9wcm9ncmFtbWVkIGlmIENGR1VFTiBpcyBzZXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoNCkgUGFnZSBFcmFzZSBjb21tYW5kIGF0IExPQ0sgbW9kZSB3aXRoIElDRSBjb25uZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDUpIEVyYXNlIG9yIFByb2dyYW0gY29tbWFuZCBhdCBicm93bi1vdXQgZGV0ZWN0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoNikgRGVzdGluYXRpb24gYWRkcmVzcyBpcyBpbGxlZ2FsLCBzdWNoIGFzIG92ZXIgYW4gYXZhaWxhYmxlIHJhbmdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCg3KSBJbnZhbGlkIElTUCBjb21tYW5kcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCg4KSBLUFJPTSBpcyBlcmFzZWQvcHJvZ3JhbW1lZCBpZiBLRVlMT0NLIGlzIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDkpIEFQUk9NIGlzIGVyYXNlZC9wcm9ncmFtbWVkIGlmIEtFWUxPQ0sgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTApIExEUk9NIGlzIGVyYXNlZC9wcm9ncmFtbWVkIGlmIEtFWUxPQ0sgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTEpIENPTkZJRyBpcyBlcmFzZWQvcHJvZ3JhbW1lZCBpZiBLRVlMT0NLIGlzIHNldCB0byAxIGFuZCBLRVlFTlJPTVswXSBpcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxMikgUmVhZCBhbnkgY29udGVudCBvZiBib290IGxvYWRlciB3aXRoIElDRSBjb25uZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDEzKSBUaGUgYWRkcmVzcyBvZiBibG9jayBlcmFzZSBhbmQgYmFuayBlcmFzZSBpcyBub3QgaW4gQVBST00KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTQpIElTUCBDTUQgaW4gWE9NIHJlZ2lvbiwgZXhjZXB0IG1hc3MgZXJhc2UsIHBhZ2UgZXJhc2UgYW5kIGNoa3N1bSBjb21tYW5kCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDE1KSBUaGUgd3Jvbmcgc2V0dGluZyBvZiBwYWdlIGVyYXNlIElTUCBDTUQgaW4gWE9NCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDE2KSBWaW9sYXRlIFhPTSBzZXR0aW5nIG9uZSB0aW1lIHByb3RlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTcpIFBhZ2UgZXJhc2UgSVNQIENNRCBpbiBTZWN1cmUvTm9uLXNlY3VyZSByZWdpb24gc2V0dGluZyBwYWdlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDE4KSBNYXNzIGVyYXNlIHdoZW4gTUVSQVNFIChDRkcwWzEzXSkgaXMgZGlzYWJsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxOSkgUGFnZSBlcmFzZSwgbWFzcyBlcmFzZSAsIG11bHRpLXdvcmQgcHJvZ3JhbSBvciA2NC1iaXQgd29yZCBwcm9ncmFtIGluIE9UUAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbN10gICAgIHxBTExPTkUgICAgfEZsYXNoIEFsbC1vbmUgVmVyaWZpY2F0aW9uIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgaWYgYWxsIG9mIGZsYXNoIGJpdHMgYXJlIDEsIGFuZCBjbGVhciBpZiBmbGFzaCBiaXRzIGFyZSBub3QgYWxsIDEgYWZ0ZXIgUnVuIEZsYXNoIEFsbC1PbmUgVmVyaWZpY2F0aW9uIGNvbXBsZXRlOyB0aGlzIGJpdCBhbHNvIGNhbiBiZSBjbGVhciBieSB3cml0aW5nIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQWxsIG9mIGZsYXNoIGJpdHMgYXJlIDEgYWZ0ZXIgUnVuIEZsYXNoIEFsbC1PbmUgVmVyaWZpY2F0aW9uIGNvbXBsZXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGbGFzaCBiaXRzIGFyZSBub3QgYWxsIDEgYWZ0ZXIgUnVuIEZsYXNoIEFsbC1PbmUgVmVyaWZpY2F0aW9uIGNvbXBsZXRlLgorICAgICAqIHxbMjM6OV0gIHxWRUNNQVAgICAgfFZlY3RvciBQYWdlIE1hcHBpbmcgQWRkcmVzcyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFsbCBhY2Nlc3MgdG8gMHgwMDAwXzAwMDB+MHgwMDAwXzAxRkYgaXMgcmVtYXBwZWQgdG8gdGhlIGZsYXNoIG1lbW9yeSBhZGRyZXNzIHtWRUNNQVBbMTQ6MF0sIDknaDAwMH0gfiB7VkVDTUFQWzE0OjBdLCA5J2gxRkZ9CisgICAgICogfFsyNF0gICAgfElOVEZMQUcgICB8SW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSVNQIGlzIG5vdCBmaW5pc2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElTUCBkb25lIG9yIElTUEZGIHNldC4KKyAgICAgKiBAdmFyIEZNQ19UOjpDWUNDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NEMgIEZsYXNoIEFjY2VzcyBDeWNsZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8Q1lDTEUgICAgIHxGbGFzaCBBY2Nlc3MgQ3ljbGUgQ29udHJvbCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGlzIHVwZGF0ZWQgYXV0b21hdGljYWxseSBieSBoYXJkd2FyZSB3aGlsZSBGQ1lDRElTIChGTUNfSVNQU1RTWzRdKSBpcyAwLCBhbmQgdXBkYXRlZCBieSBzb2Z0d2FyZSB3aGlsZSBhdXRvLXR1bmluZyBmdW5jdGlvbiBkaXNhYmxlZCAoIEZBRElTIChGTUNfQ1lDVExbOF0pIGlzIDEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gYXV0by10dW5pbmcgZnVuY3Rpb24gZGlzYWJsZWQsIHVzZXIgbmVlZHMgdG8gY2hlY2sgdGhlIHNwZWVkIG9mIEhDTEsgYW5kIHNldCB0aGUgY3ljbGUgPjAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IENQVSBhY2Nlc3Mgd2l0aCB6ZXJvIHdhaXQgY3ljbGUgOyBGbGFzaCBhY2Nlc3MgY3ljbGUgaXMgMS4gVGhlIEhDTEsgd29ya2luZyBmcmVxdWVuY3kgcmFuZ2UgaXMgPDI3TUh6OyBDYWNoZSBpcyBkaXNhYmxlZCBieSBoYXJkd2FyZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gQ1BVIGFjY2VzcyB3aXRoIG9uZSB3YWl0IGN5Y2xlIGlmIGNhY2hlIG1pc3M7IEZsYXNoIGFjY2VzcyBjeWNsZSBpcyAxLiBUaGUgSENMSyB3b3JraW5nIGZyZXF1ZW5jeSByYW5nZSByYW5nZSBpczwyN01Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gQ1BVIGFjY2VzcyB3aXRoIHR3byB3YWl0IGN5Y2xlcyBpZiBjYWNoZSBtaXNzOyBGbGFzaCBhY2Nlc3MgY3ljbGUgaXMgMi4gVGhlIG9wdGltaXplZCBIQ0xLIHdvcmtpbmcgZnJlcXVlbmN5IHJhbmdlIGlzIDI1fjUyIE1Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gQ1BVIGFjY2VzcyB3aXRoIHRocmVlIHdhaXQgY3ljbGVzIGlmIGNhY2hlIG1pc3M7IEZsYXNoIGFjY2VzcyBjeWNsZSBpcyAzLiBUaGUgb3B0aW1pemVkIEhDTEsgd29ya2luZyBmcmVxdWVuY3kgcmFuZ2UgaXMgNDl+NzlNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs4XSAgICAgfEZBRElTICAgICB8Rmxhc2ggQWNjZXNzIEN5Y2xlIEF1dG8tdHVuaW5nIERpc2FibGVkIENvbnRyb2wgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRoaXMgYml0IHRvIGRpc2FibGUgZmxhc2ggYWNjZXNzIGN5Y2xlIGF1dG8tdHVuaW5nIGZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZsYXNoIGFjY2VzcyBjeWNsZSBhdXRvLXR1bmluZyBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGbGFzaCBhY2Nlc3MgY3ljbGUgYXV0by10dW5pbmcgaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBGTUNfVDo6S1BLRVkwCisgICAgICogT2Zmc2V0OiAweDUwICBLUFJPTSBLRVkwIERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLUEtFWTAgICAgfEtQUk9NIEtFWTAgRGF0YSAoV3JpdGUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBLUEtFWTAgZGF0YSB0byB0aGlzIHJlZ2lzdGVyIGJlZm9yZSBLRVkgQ29tcGFyaXNvbiBvcGVyYXRpb24uCisgICAgICogQHZhciBGTUNfVDo6S1BLRVkxCisgICAgICogT2Zmc2V0OiAweDU0ICBLUFJPTSBLRVkxIERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLUEtFWTEgICAgfEtQUk9NIEtFWTEgRGF0YSAoV3JpdGUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBLUEtFWTEgZGF0YSB0byB0aGlzIHJlZ2lzdGVyIGJlZm9yZSBLRVkgQ29tcGFyaXNvbiBvcGVyYXRpb24uCisgICAgICogQHZhciBGTUNfVDo6S1BLRVkyCisgICAgICogT2Zmc2V0OiAweDU4ICBLUFJPTSBLRVkyIERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLUEtFWTIgICAgfEtQUk9NIEtFWTIgRGF0YSAoV3JpdGUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBLUEtFWTIgZGF0YSB0byB0aGlzIHJlZ2lzdGVyIGJlZm9yZSBLRVkgQ29tcGFyaXNvbiBvcGVyYXRpb24uCisgICAgICogQHZhciBGTUNfVDo6S1BLRVlUUkcKKyAgICAgKiBPZmZzZXQ6IDB4NUMgIEtQUk9NIEtFWSBDb21wYXJpc29uIFRyaWdnZXIgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEtQS0VZR08gICB8S1BST00gS0VZIENvbXBhcmlzb24gU3RhcnQgVHJpZ2dlciAoV3JpdGUgUHJvdGVjdGlvbikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHN0YXJ0IEtFWSBjb21wYXJpc29uIG9wZXJhdGlvbiBhbmQgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYnkgaGFyZHdhcmUgYXV0b21hdGljYWxseSB3aGVuIEtFWSBjb21wYXJpc29uIG9wZXJhdGlvbiBpcyBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgdHJpZ2dlciBvcGVyYXRpb24gaXMgdmFsaWQgd2hpbGUgRk9SQklEIChGTUNfS1BLRVlTVFMgWzNdKSBpcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBLRVkgY29tcGFyaXNvbiBvcGVyYXRpb24gaXMgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEtFWSBjb21wYXJpc29uIGlzIHByb2dyZXNzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUtcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxXSAgICAgfFRDRU4gICAgICB8VGltZW91dCBDb3VudGluZyBFbmFibGUgKFdyaXRlIFByb3RlY3Rpb24pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVvdXQgY291bnRpbmcgaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVvdXQgY291bnRpbmcgaXMgZW5hYmxlZCBpZiBpbnB1dCBrZXkgaXMgbWF0Y2hlZCBhZnRlciBrZXkgY29tcGFyaXNvbiBmaW5pc2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgbWludXRlcyBpcyBhdCBsZWFzdCBmb3IgdGltZW91dCwgYW5kIGF2ZXJhZ2UgaXMgYWJvdXQgMjAgbWludXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZS1wcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEZNQ19UOjpLUEtFWVNUUworICAgICAqIE9mZnNldDogMHg2MCAgS1BST00gS0VZIENvbXBhcmlzb24gU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8S0VZQlVTWSAgIHxLRVkgQ29tcGFyaXNvbiBCdXN5IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEtFWSBjb21wYXJpc29uIGlzIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBLRVkgY29tcGFyaXNvbiBpcyBidXN5LgorICAgICAqIHxbMV0gICAgIHxLRVlMT0NLICAgfEtFWSBMT0NLIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gMSBpZiBLRVlNQVRDSCAoRk1DX0tQS0VZU1RTIFsyXSkgaXMgMCBhbmQgY2xlYXJlZCB0byAwIGlmIEtFWU1BVENIIGlzIDEgaW4gU2VjdXJpdHkgS2V5IHByb3RlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBZnRlciBNYXNzIEVyYXNlIG9wZXJhdGlvbiwgdXNlcnMgbXVzdCByZXNldCBvciBwb3dlciBvbiAvb2ZmIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBhbHNvIGNhbiBiZSBzZXQgdG8gMSB3aGlsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGwgQ1BVIHdyaXRlIDEgdG8gS0VZTE9DSyhGTUNfS1BLRVlTVFNbMV0pIG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bCBLRVlGTEFHKEZNQ19LUEtFWVNUU1s0XSkgaXMgMSBhdCBwb3dlci1vbiBvciByZXNldCBvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGwgS0VZRU5ST00gaXMgcHJvZ3JhbW1lZCBhIG5vbi0weDVhIHZhbHVlIG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bCBUaW1lb3V0IGV2ZW50IG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bCBGT1JCSUQoRk1DX0tQS0VZU1RTWzNdKSBpcyAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEtQUk9NLCBMRFJPTSBhbmQgQVBST00gKG5vdCBpbmNsdWRlIERhdGEgRmxhc2gpIGlzIG5vdCBpbiB3cml0ZSBwcm90ZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBLUFJPTSwgTERST00gYW5kIEFQUk9NIChub3QgaW5jbHVkZSBEYXRhIEZsYXNoKSBpcyBpbiB3cml0ZSBwcm90ZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENPTkZJRyB3cml0ZSBwcm90ZWN0IGlzIGRlcGVuZGVkIG9uIENGR0ZMQUcKKyAgICAgKiB8WzJdICAgICB8S0VZTUFUQ0ggIHxLRVkgTWF0Y2ggRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byAxIGFmdGVyIEtFWSBjb21wYXJpc29uIGNvbXBsZXRlIGlmIHRoZSBLRVkwLCBLRVkxIGFuZCBLRVkyIGFyZSBtYXRjaGVkIHdpdGggdGhlIDk2LWJpdCBzZWN1cml0eSBrZXlzIGluIEtQUk9NOyBhbmQgY2xlYXJlZCB0byAwIGlmIEtFWXMgYXJlIHVubWF0Y2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGFsc28gY2xlYXJlZCB0byAwIHdoaWxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bCBDUFUgd3JpdGluZyAxIHRvIEtFWUxPQ0soRk1DX0tQS0VZU1RTWzFdKSBvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGwgVGltZW91dCBldmVudCBvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGwgS1BST00gaXMgZXJhc2VkIG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bCBLRVlFTlJPTSBpcyBwcm9ncmFtbWVkIHRvIGEgbm9uLTB4NWEgdmFsdWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bCBDaGlwIGlzIGluIHBvd2VyIGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gS0VZMCwgS0VZMSwgYW5kIEtFWTIgYXJlIHVubWF0Y2hlZCB3aXRoIHRoZSBLUFJPTSBzZXR0aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBLRVkwLCBLRVkxLCBhbmQgS0VZMiBhcmUgbWF0Y2hlZCB3aXRoIHRoZSBLUFJPTSBzZXR0aW5nLgorICAgICAqIHxbM10gICAgIHxGT1JCSUQgICAgfEtFWSBDb21wYXJpc29uIEZvcmJpZGRlbiBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIDEgd2hlbiBLUEtFQ05UKEZNQ19LUEtFWTBbNDowXSkgaXMgbW9yZSB0aGFuIEtQS0VNQVggKEZNQ19LUEtFWTBbMTI6OF0pIG9yIEtQQ05UIChGTUNfS1BDTlQgWzI6MF0pIGlzIG1vcmUgdGhhbiBLUE1BWCAoRk1DX0tQQ05UIFsxMDo4XSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEtFWSBjb21wYXJpc29uIGlzIG5vdCBmb3JiaWRkZW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEtFWSBjb21wYXJpc29uIGlzIGZvcmJpZGRlbiwgS0VZR08gKEZNQ19LRVlUUkcgWzBdKSBjYW5ub3QgdHJpZ2dlci4KKyAgICAgKiB8WzRdICAgICB8S0VZRkxBRyAgIHxLRVkgUHJvdGVjdGlvbiBFbmFibGVkIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hpbGUgdGhlIEtFWUVOUk9NIFs3OjBdIGlzIG5vdCAweDVhIGF0IHBvd2VyLW9uIG9yIHJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgY2xlYXJlZCB0byAwIGJ5IGhhcmR3YXJlIHdoaWxlIEtQUk9NIGlzIGVyYXNlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byAxIGJ5IGhhcmR3YXJlIHdoaWxlIEtFWUVOUk9NIGlzIHByb2dyYW1tZWQgdG8gYSBub24tMHg1YSB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2VjdXJpdHkgS2V5IHByb3RlY3Rpb24gaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNlY3VyaXR5IEtleSBwcm90ZWN0aW9uIGlzIGVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfENGR0ZMQUcgICB8Q09ORklHIFdyaXRlLXByb3RlY3Rpb24gRW5hYmxlZCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoaWxlIHRoZSBLRVlFTlJPTSBbMF0gaXMgMCBhdCBwb3dlci1vbiBvciByZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGNsZWFyZWQgdG8gMCBieSBoYXJkd2FyZSB3aGlsZSBLUFJPTSBpcyBlcmFzZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gMSBieSBoYXJkd2FyZSB3aGlsZSBLRVlFTlJPTVswXSBpcyBwcm9ncmFtbWVkIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENPTkZJRyB3cml0ZS1wcm90ZWN0aW9uIGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDT05GSUcgd3JpdGUtcHJvdGVjdGlvbiBpcyBlbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxTQktQQlVTWSAgfFNlY3VyZSBCb290IEtleSBQcm9ncmFtbWluZyBCVVNZIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIDEgd2hpbGUgc2VjdXJlIGJvb3Qga2V5IHByb2dyYW0gZnVuY3Rpb24gaXMgcnVubmluZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGNsZWFyZWQgdG8gMCB3aGlsZSBzZWN1cmUgYm9vdCBrZXkga2V5IHByb2dyYW0gZnVuY3Rpb24gaGFkIGJlZW4gZG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2VjdXJlIGJvb3Qga2V5IHByb2dyYW0gZnVuY3Rpb24gaXMgZG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2VjdXJlIGJvb3Qga2V5IHByb2dyYW0gZnVuY3Rpb24gaXMgYnVzeS4KKyAgICAgKiB8WzldICAgICB8U0JLUEZMQUcgIHxTZWN1cmUgQm9vdCBLZXkgUHJvZ3JhbW1pbmcgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byAxIHdoaWxlIHNlY3VyZSBib290IGtleSBwcm9ncmFtIGZ1bmN0aW9uIGZhaWxzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgY2xlYXJlZCB0byAwIHdoaWxlIHNlY3VyZSBib290IGtleSBoYWQgYmVlbiBwcm9ncmFtbWVkIGludG8gZmxhc2ggbWVtb3J5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTZWN1cmUgYm9vdCBrZXkgcHJvZ3JhbSBmdW5jdGlvbiBpcyBzdWNjZXNzZnVsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZWN1cmUgYm9vdCBrZXkgcHJvZ3JhbSBmdW5jdGlvbiBmYWlscy4KKyAgICAgKiBAdmFyIEZNQ19UOjpLUEtFWUNOVAorICAgICAqIE9mZnNldDogMHg2NCAgS1BST00gS0VZLVVubWF0Y2hlZCBDb3VudGluZyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs1OjBdICAgfEtQS0VDTlQgICB8RXJyb3IgS2V5IEVudHJ5IENvdW50ZXIgYXQgRWFjaCBQb3dlci1vbiAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEtQS0VDTlQgaXMgaW5jcmVhc2VkIHdoZW4gZW50cnkga2V5cyBpcyB3cm9uZyBpbiBTZWN1cml0eSBLZXkgcHJvdGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEtQS0VDTlQgaXMgY2xlYXJlZCB0byAwIGlmIGtleSBjb21wYXJpc29uIGlzIG1hdGNoZWQgb3Igc3lzdGVtIHBvd2VyLW9uLgorICAgICAqIHxbMTM6OF0gIHxLUEtFTUFYICAgfE1heGltdW0gTnVtYmVyIGZvciBFcnJvciBLZXkgRW50cnkgYXQgRWFjaCBQb3dlci1vbiAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEtQS0VNQVggaXMgdGhlIG1heGltdW0gZXJyb3Iga2V5IGVudHJ5IG51bWJlciBhdCBlYWNoIHBvd2VyLW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBLUEtFTUFYUk9NIG9mIEtQUk9NIGlzIGVyYXNlZCBvciBwcm9ncmFtbWVkLCBLUEtFTUFYIHdpbGwgYWxzbyBiZSB1cGRhdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8S1BLRU1BWCBpcyB1c2VkIHRvIGxpbWl0IEtQS0VDTlQoRk1DX0tQS0VZMFs1OjBdKSBtYXhpbXVtIGNvdW50aW5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEZPUkJJRCAoRk1DX0tQS0VZU1RTIFszXSkgd2lsbCBiZSBzZXQgdG8gMSB3aGVuIEtQS0VDTlQgaXMgbW9yZSB0aGFuIEtQS0VNQVguCisgICAgICogQHZhciBGTUNfVDo6S1BDTlQKKyAgICAgKiBPZmZzZXQ6IDB4NjggIEtQUk9NIEtFWS1Vbm1hdGNoZWQgUG93ZXItT24gQ291bnRpbmcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxLUENOVCAgICAgfFBvd2VyLW9uIENvdW50ZXIgZm9yIEVycm9yIEtleSBFbnRyeShSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8S1BDTlQgaXMgdGhlIHBvd2VyLW9uIGNvdW50aW5nIGZvciBlcnJvciBrZXkgZW50cnkgaW4gU2VjdXJpdHkgS2V5IHByb3RlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxLUENOVCBpcyBjbGVhcmVkIHRvIDAgaWYga2V5IGNvbXBhcmlzb24gaXMgbWF0Y2hlZC4KKyAgICAgKiB8WzExOjhdICB8S1BNQVggICAgIHxQb3dlci1vbiBNYXhpbXVtIE51bWJlciBmb3IgRXJyb3IgS2V5IEVudHJ5IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8S1BNQVggaXMgdGhlIHBvd2VyLW9uIG1heGltdW0gbnVtYmVyIGZvciBlcnJvciBrZXkgZW50cnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEtQTUFYUk9NIG9mIEtQUk9NIGlzIGVyYXNlZCBvciBwcm9ncmFtbWVkLCBLUE1BWCB3aWxsIGFsc28gYmUgdXBkYXRlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEtQTUFYIGlzIHVzZWQgdG8gbGltaXQgS1BDTlQgKEZNQ19LUENOVCBbMzowXSkgbWF4aW11bSBjb3VudGluZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBGT1JCSUQoRk1DX0tQS0VZU1RTWzNdKSB3aWxsIGJlIHNldCB0byAxIHdoZW4gS1BDTlQgaXMgbW9yZSB0aGFuIEtQTUFYCisgICAgICogQHZhciBGTUNfVDo6TVBEQVQwCisgICAgICogT2Zmc2V0OiAweDgwICBJU1AgRGF0YTAgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxJU1BEQVQwICAgfElTUCBEYXRhIDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGlzIHRoZSBmaXJzdCAzMi1iaXQgZGF0YSBmb3IgMzItYml0LzY0LWJpdC9tdWx0aS13b3JkIHByb2dyYW1taW5nLCBhbmQgaXQgaXMgYWxzbyB0aGUgbWlycm9yIG9mIEZNQ19JU1BEQVQsIGJvdGggcmVnaXN0ZXJzIGtlZXAgdGhlIHNhbWUgZGF0YQorICAgICAqIEB2YXIgRk1DX1Q6Ok1QREFUMQorICAgICAqIE9mZnNldDogMHg4NCAgSVNQIERhdGExIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVNQREFUMSAgIHxJU1AgRGF0YSAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyByZWdpc3RlciBpcyB0aGUgc2Vjb25kIDMyLWJpdCBkYXRhIGZvciA2NC1iaXQvbXVsdGktd29yZCBwcm9ncmFtbWluZy4KKyAgICAgKiBAdmFyIEZNQ19UOjpNUERBVDIKKyAgICAgKiBPZmZzZXQ6IDB4ODggIElTUCBEYXRhMiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfElTUERBVDIgICB8SVNQIERhdGEgMgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgaXMgdGhlIHRoaXJkIDMyLWJpdCBkYXRhIGZvciBtdWx0aS13b3JkIHByb2dyYW1taW5nLgorICAgICAqIEB2YXIgRk1DX1Q6Ok1QREFUMworICAgICAqIE9mZnNldDogMHg4QyAgSVNQIERhdGEzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVNQREFUMyAgIHxJU1AgRGF0YSAzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyByZWdpc3RlciBpcyB0aGUgZm91cnRoIDMyLWJpdCBkYXRhIGZvciBtdWx0aS13b3JkIHByb2dyYW1taW5nLgorICAgICAqIEB2YXIgRk1DX1Q6Ok1QU1RTCisgICAgICogT2Zmc2V0OiAweEMwICBJU1AgTXVsdGktUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxNUEJVU1kgICAgfElTUCBNdWx0aS13b3JkIFByb2dyYW0gQnVzeSBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzdGFydCBJU1AgTXVsdGktV29yZCBwcm9ncmFtIG9wZXJhdGlvbiBhbmQgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYnkgaGFyZHdhcmUgYXV0b21hdGljYWxseSB3aGVuIElTUCBNdWx0aS1Xb3JkIHByb2dyYW0gb3BlcmF0aW9uIGlzIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHRoZSBtaXJyb3Igb2YgSVNQR08oRk1DX0lTUFRSR1swXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElTUCBNdWx0aS1Xb3JkIHByb2dyYW0gb3BlcmF0aW9uIGlzIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJU1AgTXVsdGktV29yZCBwcm9ncmFtIG9wZXJhdGlvbiBpcyBwcm9ncmVzc2VkLgorICAgICAqIHxbMV0gICAgIHxQUEdPICAgICAgfElTUCBNdWx0aS1wcm9ncmFtIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJU1AgbXVsdGktd29yZCBwcm9ncmFtIG9wZXJhdGlvbiBpcyBub3QgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJU1AgbXVsdGktd29yZCBwcm9ncmFtIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcy4KKyAgICAgKiB8WzJdICAgICB8SVNQRkYgICAgIHxJU1AgRmFpbCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdGhlIG1pcnJvciBvZiBJU1BGRiAoRk1DX0lTUENUTFs2XSksIGl0IG5lZWRzIHRvIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIEZNQ19JU1BDVExbNl0gb3IgRk1DX0lTUFNUU1s2XQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGEgdHJpZ2dlcmVkIElTUCBtZWV0cyBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxKSBBUFJPTSB3cml0ZXMgdG8gaXRzZWxmIGlmIEFQVUVOIGlzIHNldCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgyKSBMRFJPTSB3cml0ZXMgdG8gaXRzZWxmIGlmIExEVUVOIGlzIHNldCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgzKSBDT05GSUcgaXMgZXJhc2VkL3Byb2dyYW1tZWQgaWYgQ0ZHVUVOIGlzIHNldCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCg0KSBQYWdlIEVyYXNlIGNvbW1hbmQgYXQgTE9DSyBtb2RlIHdpdGggSUNFIGNvbm5lY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoNSkgRXJhc2Ugb3IgUHJvZ3JhbSBjb21tYW5kIGF0IGJyb3duLW91dCBkZXRlY3RlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCg2KSBEZXN0aW5hdGlvbiBhZGRyZXNzIGlzIGlsbGVnYWwsIHN1Y2ggYXMgb3ZlciBhbiBhdmFpbGFibGUgcmFuZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDcpIEludmFsaWQgSVNQIGNvbW1hbmRzCisgICAgICogfFs0XSAgICAgfEQwICAgICAgICB8SVNQIERBVEEgMCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gRk1DX01QREFUMCBpcyB3cml0dGVuIGFuZCBhdXRvLWNsZWFyIHRvIDAgd2hlbiB0aGUgRk1DX01QREFUMCBkYXRhIGlzIHByb2dyYW1tZWQgdG8gZmxhc2ggY29tcGxldGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZNQ19NUERBVDAgcmVnaXN0ZXIgaXMgZW1wdHksIG9yIHByb2dyYW0gdG8gZmxhc2ggY29tcGxldGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZNQ19NUERBVDAgcmVnaXN0ZXIgaGFzIGJlZW4gd3JpdHRlbiwgYW5kIG5vdCBwcm9ncmFtIHRvIGZsYXNoIGNvbXBsZXRlLgorICAgICAqIHxbNV0gICAgIHxEMSAgICAgICAgfElTUCBEQVRBIDEgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIEZNQ19NUERBVDEgaXMgd3JpdHRlbiBhbmQgYXV0by1jbGVhciB0byAwIHdoZW4gdGhlIEZNQ19NUERBVDEgZGF0YSBpcyBwcm9ncmFtbWVkIHRvIGZsYXNoIGNvbXBsZXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGTUNfTVBEQVQxIHJlZ2lzdGVyIGlzIGVtcHR5LCBvciBwcm9ncmFtIHRvIGZsYXNoIGNvbXBsZXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGTUNfTVBEQVQxIHJlZ2lzdGVyIGhhcyBiZWVuIHdyaXR0ZW4sIGFuZCBub3QgcHJvZ3JhbSB0byBmbGFzaCBjb21wbGV0ZS4KKyAgICAgKiB8WzZdICAgICB8RDIgICAgICAgIHxJU1AgREFUQSAyIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiBGTUNfTVBEQVQyIGlzIHdyaXR0ZW4gYW5kIGF1dG8tY2xlYXIgdG8gMCB3aGVuIHRoZSBGTUNfTVBEQVQyIGRhdGEgaXMgcHJvZ3JhbW1lZCB0byBmbGFzaCBjb21wbGV0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRk1DX01QREFUMiByZWdpc3RlciBpcyBlbXB0eSwgb3IgcHJvZ3JhbSB0byBmbGFzaCBjb21wbGV0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRk1DX01QREFUMiByZWdpc3RlciBoYXMgYmVlbiB3cml0dGVuLCBhbmQgbm90IHByb2dyYW0gdG8gZmxhc2ggY29tcGxldGUuCisgICAgICogfFs3XSAgICAgfEQzICAgICAgICB8SVNQIERBVEEgMyBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gRk1DX01QREFUMyBpcyB3cml0dGVuIGFuZCBhdXRvLWNsZWFyIHRvIDAgd2hlbiB0aGUgRk1DX01QREFUMyBkYXRhIGlzIHByb2dyYW1tZWQgdG8gZmxhc2ggY29tcGxldGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZNQ19NUERBVDMgcmVnaXN0ZXIgaXMgZW1wdHksIG9yIHByb2dyYW0gdG8gZmxhc2ggY29tcGxldGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZNQ19NUERBVDMgcmVnaXN0ZXIgaGFzIGJlZW4gd3JpdHRlbiwgYW5kIG5vdCBwcm9ncmFtIHRvIGZsYXNoIGNvbXBsZXRlLgorICAgICAqIEB2YXIgRk1DX1Q6Ok1QQUREUgorICAgICAqIE9mZnNldDogMHhDNCAgSVNQIE11bHRpLVByb2dyYW0gQWRkcmVzcyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfE1QQUREUiAgICB8SVNQIE11bHRpLXdvcmQgUHJvZ3JhbSBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TVBBRERSIGlzIHRoZSBhZGRyZXNzIG9mIElTUCBtdWx0aS13b3JkIHByb2dyYW0gb3BlcmF0aW9uIHdoZW4gSVNQR08gZmxhZyBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1QQUREUiB3aWxsIGtlZXAgdGhlIGZpbmFsIElTUCBhZGRyZXNzIHdoZW4gSVNQIG11bHRpLXdvcmQgcHJvZ3JhbSBpcyBjb21wbGV0ZS4KKyAgICAgKiBAdmFyIEZNQ19UOjpYT01SMFNUUworICAgICAqIE9mZnNldDogMHhEMCAgWE9NIFJlZ2lvbiAwIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfFNJWkUgICAgICB8WE9NIFJlZ2lvbiAwIFNpemUgKFBhZ2UtYWxpZ25lZCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTSVpFIGlzIHRoZSBwYWdlIG51bWJlciBvZiBYT00gUmVnaW9uIDAuCisgICAgICogfFszMTo4XSAgfEJBU0UgICAgICB8WE9NIFJlZ2lvbiAwIEJhc2UgQWRkcmVzcyAoUGFnZS1hbGlnbmVkKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJBU0UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBYT00gUmVnaW9uIDAuCisgICAgICogQHZhciBGTUNfVDo6WE9NUjFTVFMKKyAgICAgKiBPZmZzZXQ6IDB4RDQgIFhPTSBSZWdpb24gMSBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxTSVpFICAgICAgfFhPTSBSZWdpb24gMSBTaXplIChQYWdlLWFsaWduZWQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0laRSBpcyB0aGUgcGFnZSBudW1iZXIgb2YgWE9NIFJlZ2lvbiAxLgorICAgICAqIHxbMzE6OF0gIHxCQVNFICAgICAgfFhPTSBSZWdpb24gMSBCYXNlIEFkZHJlc3MgKFBhZ2UtYWxpZ25lZCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCQVNFIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgWE9NIFJlZ2lvbiAxLgorICAgICAqIEB2YXIgRk1DX1Q6OlhPTVIyU1RTCisgICAgICogT2Zmc2V0OiAweEQ4ICBYT00gUmVnaW9uIDIgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8U0laRSAgICAgIHxYT00gUmVnaW9uIDIgU2l6ZSAoUGFnZS1hbGlnbmVkKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNJWkUgaXMgdGhlIHBhZ2UgbnVtYmVyIG9mIFhPTSBSZWdpb24gMi4KKyAgICAgKiB8WzMxOjhdICB8QkFTRSAgICAgIHxYT00gUmVnaW9uIDIgQmFzZSBBZGRyZXNzIChQYWdlLWFsaWduZWQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QkFTRSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIFhPTSBSZWdpb24gMi4KKyAgICAgKiBAdmFyIEZNQ19UOjpYT01SM1NUUworICAgICAqIE9mZnNldDogMHhEQyAgWE9NIFJlZ2lvbiAzIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfFNJWkUgICAgICB8WE9NIFJlZ2lvbiAzIFNpemUgKFBhZ2UtYWxpZ25lZCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTSVpFIGlzIHRoZSBwYWdlIG51bWJlciBvZiBYT00gUmVnaW9uIDMuCisgICAgICogfFszMTo4XSAgfEJBU0UgICAgICB8WE9NIFJlZ2lvbiAzIEJhc2UgQWRkcmVzcyAoUGFnZS1hbGlnbmVkKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJBU0UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBYT00gUmVnaW9uIDMuCisgICAgICogQHZhciBGTUNfVDo6WE9NU1RTCisgICAgICogT2Zmc2V0OiAweEUwICBYT00gU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8WE9NUjBPTiAgIHxYT00gUmVnaW9uIDAgT24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxYT00gUmVnaW9uIDAgYWN0aXZlIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBYT00gcmVnaW9uIDAgaXMgYWN0aXZlLgorICAgICAqIHxbMV0gICAgIHxYT01SMU9OICAgfFhPTSBSZWdpb24gMSBPbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFhPTSBSZWdpb24gMSBhY3RpdmUgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFhPTSByZWdpb24gMSBpcyBhY3RpdmUuCisgICAgICogfFsyXSAgICAgfFhPTVIyT04gICB8WE9NIFJlZ2lvbiAyIE9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8WE9NIFJlZ2lvbiAyIGFjdGl2ZSBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gWE9NIHJlZ2lvbiAyIGlzIGFjdGl2ZS4KKyAgICAgKiB8WzNdICAgICB8WE9NUjNPTiAgIHxYT00gUmVnaW9uIDMgT24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxYT00gUmVnaW9uIDMgYWN0aXZlIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBYT00gcmVnaW9uIDMgaXMgYWN0aXZlLgorICAgICAqIHxbNF0gICAgIHxYT01QRUYgICAgfFhPTSBQYWdlIEVyYXNlIEZ1bmN0aW9uIEZhaWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxYT00gcGFnZSBlcmFzZSBmdW5jdGlvbiBzdGF0dXMuIElmIFhPTVBFRiBpcyBzZXQgdG8gMSwgdXNlciBuZWVkcyB0byBlcmFzZSBYT00gcmVnaW9uIGFnYWluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTdWNjZXNzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGYWlsLgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSVNQQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIElTUCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElTUEFERFI7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBJU1AgQWRkcmVzcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJU1BEQVQ7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gSVNQIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSVNQQ01EOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIElTUCBDb21tYW5kIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElTUFRSRzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBJU1AgVHJpZ2dlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsxMV07CisgICAgX19JTyB1aW50MzJfdCBJU1BTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA0MF0gSVNQIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbMl07CisgICAgX19JTyB1aW50MzJfdCBDWUNDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA0Y10gRmxhc2ggQWNjZXNzIEN5Y2xlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fTyAgdWludDMyX3QgS1BLRVkwOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNTBdIEtQUk9NIEtFWTAgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX08gIHVpbnQzMl90IEtQS0VZMTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDU0XSBLUFJPTSBLRVkxIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBLUEtFWTI7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA1OF0gS1BST00gS0VZMiBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgS1BLRVlUUkc7ICAgICAgICAgICAgICAvKiE8IFsweDAwNWNdIEtQUk9NIEtFWSBDb21wYXJpc29uIFRyaWdnZXIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEtQS0VZU1RTOyAgICAgICAgICAgICAgLyohPCBbMHgwMDYwXSBLUFJPTSBLRVkgQ29tcGFyaXNvbiBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBLUEtFWUNOVDsgICAgICAgICAgICAgIC8qITwgWzB4MDA2NF0gS1BST00gS0VZLVVubWF0Y2hlZCBDb3VudGluZyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgS1BDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNjhdIEtQUk9NIEtFWS1Vbm1hdGNoZWQgUG93ZXItT24gQ291bnRpbmcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUyWzVdOworICAgIF9fSU8gdWludDMyX3QgTVBEQVQwOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwODBdIElTUCBEYXRhMCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IE1QREFUMTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDg0XSBJU1AgRGF0YTEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBNUERBVDI7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA4OF0gSVNQIERhdGEyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTVBEQVQzOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwOGNdIElTUCBEYXRhMyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUzWzEyXTsKKyAgICBfX0kgIHVpbnQzMl90IE1QU1RTOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMGMwXSBJU1AgTXVsdGktUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBNUEFERFI7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDBjNF0gSVNQIE11bHRpLVByb2dyYW0gQWRkcmVzcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTRbMl07CisgICAgX19JICB1aW50MzJfdCBYT01SMFNUUzsgICAgICAgICAgICAgIC8qITwgWzB4MDBkMF0gWE9NIFJlZ2lvbiAwIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgWE9NUjFTVFM7ICAgICAgICAgICAgICAvKiE8IFsweDAwZDRdIFhPTSBSZWdpb24gMSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFhPTVIyU1RTOyAgICAgICAgICAgICAgLyohPCBbMHgwMGQ4XSBYT00gUmVnaW9uIDIgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBYT01SM1NUUzsgICAgICAgICAgICAgIC8qITwgWzB4MDBkY10gWE9NIFJlZ2lvbiAzIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgWE9NU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwZTBdIFhPTSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBGTUNfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgRk1DX0NPTlNUIEZNQyBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBGTUMgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBGTUNfSVNQQ1RMX0lTUEVOX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUENUTDogSVNQRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUENUTF9JU1BFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19JU1BDVExfSVNQRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDVEw6IElTUEVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUENUTF9CU19Qb3MgICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDVEw6IEJTIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDVExfQlNfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfSVNQQ1RMX0JTX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQQ1RMOiBCUyBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BDVExfQVBVRU5fUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQQ1RMOiBBUFVFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ1RMX0FQVUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0lTUENUTF9BUFVFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUENUTDogQVBVRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQQ1RMX0NGR1VFTl9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUENUTDogQ0ZHVUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUENUTF9DRkdVRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19JU1BDVExfQ0ZHVUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDVEw6IENGR1VFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUENUTF9MRFVFTl9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDVEw6IExEVUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDVExfTERVRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfSVNQQ1RMX0xEVUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQQ1RMOiBMRFVFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BDVExfSVNQRkZfUG9zICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQQ1RMOiBJU1BGRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ1RMX0lTUEZGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0lTUENUTF9JU1BGRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUENUTDogSVNQRkYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQQ1RMX0JMX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUENUTDogQkwgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUENUTF9CTF9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19JU1BDVExfQkxfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDVEw6IEJMIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUENUTF9JTlRFTl9Qb3MgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDVEw6IElOVEVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDVExfSU5URU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfSVNQQ1RMX0lOVEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQQ1RMOiBJTlRFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BBRERSX0lTUEFERFJfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQQUREUjogSVNQQUREUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQUREUl9JU1BBRERSX01zayAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IEZNQ19JU1BBRERSX0lTUEFERFJfUG9zKSAgICAgICAgIC8qITwgRk1DX1Q6OklTUEFERFI6IElTUEFERFIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQREFUX0lTUERBVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUERBVDogSVNQREFUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUERBVF9JU1BEQVRfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBGTUNfSVNQREFUX0lTUERBVF9Qb3MpICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BEQVQ6IElTUERBVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUENNRF9DTURfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDTUQ6IENNRCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDTURfQ01EX01zayAgICAgICAgICAgICAgICgweDdmdWwgPDwgRk1DX0lTUENNRF9DTURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQQ01EOiBDTUQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BUUkdfSVNQR09fUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQVFJHOiBJU1BHTyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQVFJHX0lTUEdPX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0lTUFRSR19JU1BHT19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFRSRzogSVNQR08gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQU1RTX0lTUEJVU1lfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFNUUzogSVNQQlVTWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUFNUU19JU1BCVVNZX01zayAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19JU1BTVFNfSVNQQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BTVFM6IElTUEJVU1kgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUFNUU19DQlNfUG9zICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BTVFM6IENCUyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BTVFNfQ0JTX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfSVNQU1RTX0NCU19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQU1RTOiBDQlMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BTVFNfTUJTX1BvcyAgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQU1RTOiBNQlMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQU1RTX01CU19Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0lTUFNUU19NQlNfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFNUUzogTUJTIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQU1RTX0ZDWUNESVNfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFNUUzogRkNZQ0RJUyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUFNUU19GQ1lDRElTX01zayAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19JU1BTVFNfRkNZQ0RJU19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BTVFM6IEZDWUNESVMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUFNUU19QR0ZGX1BvcyAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BTVFM6IFBHRkYgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BTVFNfUEdGRl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfSVNQU1RTX1BHRkZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQU1RTOiBQR0ZGIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BTVFNfSVNQRkZfUG9zICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQU1RTOiBJU1BGRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQU1RTX0lTUEZGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0lTUFNUU19JU1BGRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFNUUzogSVNQRkYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQU1RTX0FMTE9ORV9Qb3MgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFNUUzogQUxMT05FIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUFNUU19BTExPTkVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19JU1BTVFNfQUxMT05FX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BTVFM6IEFMTE9ORSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUFNUU19WRUNNQVBfUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BTVFM6IFZFQ01BUCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BTVFNfVkVDTUFQX01zayAgICAgICAgICAgICgweDdmZmZ1bCA8PCBGTUNfSVNQU1RTX1ZFQ01BUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQU1RTOiBWRUNNQVAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BTVFNfSU5URkxBR19Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQU1RTOiBJTlRGTEFHIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQU1RTX0lOVEZMQUdfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0lTUFNUU19JTlRGTEFHX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFNUUzogSU5URkxBRyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfQ1lDQ1RMX0NZQ0xFX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OkNZQ0NUTDogQ1lDTEUgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0NZQ0NUTF9DWUNMRV9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IEZNQ19DWUNDVExfQ1lDTEVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpDWUNDVEw6IENZQ0xFIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0NZQ0NUTF9GQURJU19Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpDWUNDVEw6IEZBRElTIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEZNQ19DWUNDVExfRkFESVNfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfQ1lDQ1RMX0ZBRElTX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6Q1lDQ1RMOiBGQURJUyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19LUEtFWTBfS1BLRVkwX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVkwOiBLUEtFWTAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBGTUNfS1BLRVkwX0tQS0VZMF9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IEZNQ19LUEtFWTBfS1BLRVkwX1BvcykgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZMDogS1BLRVkwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfS1BLRVkxX0tQS0VZMV9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZMTogS1BLRVkxIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0tQS0VZMV9LUEtFWTFfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBGTUNfS1BLRVkxX0tQS0VZMV9Qb3MpICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWTE6IEtQS0VZMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0tQS0VZMl9LUEtFWTJfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWTI6IEtQS0VZMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEZNQ19LUEtFWTJfS1BLRVkyX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgRk1DX0tQS0VZMl9LUEtFWTJfUG9zKSAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVkyOiBLUEtFWTIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19LUEtFWVRSR19LUEtFWUdPX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlUUkc6IEtQS0VZR08gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBGTUNfS1BLRVlUUkdfS1BLRVlHT19Nc2sgICAgICAgICAoMHgxdWwgPDwgRk1DX0tQS0VZVFJHX0tQS0VZR09fUG9zKSAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZVFJHOiBLUEtFWUdPIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfS1BLRVlUUkdfVENFTl9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZVFJHOiBUQ0VOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0tQS0VZVFJHX1RDRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19LUEtFWVRSR19UQ0VOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVRSRzogVENFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0tQS0VZU1RTX0tFWUJVU1lfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVNUUzogS0VZQlVTWSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEZNQ19LUEtFWVNUU19LRVlCVVNZX01zayAgICAgICAgICgweDF1bCA8PCBGTUNfS1BLRVlTVFNfS0VZQlVTWV9Qb3MpICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlTVFM6IEtFWUJVU1kgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19LUEtFWVNUU19LRVlMT0NLX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlTVFM6IEtFWUxPQ0sgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBGTUNfS1BLRVlTVFNfS0VZTE9DS19Nc2sgICAgICAgICAoMHgxdWwgPDwgRk1DX0tQS0VZU1RTX0tFWUxPQ0tfUG9zKSAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZU1RTOiBLRVlMT0NLIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfS1BLRVlTVFNfS0VZTUFUQ0hfUG9zICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZU1RTOiBLRVlNQVRDSCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgRk1DX0tQS0VZU1RTX0tFWU1BVENIX01zayAgICAgICAgKDB4MXVsIDw8IEZNQ19LUEtFWVNUU19LRVlNQVRDSF9Qb3MpICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVNUUzogS0VZTUFUQ0ggTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0tQS0VZU1RTX0ZPUkJJRF9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVNUUzogRk9SQklEIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEZNQ19LUEtFWVNUU19GT1JCSURfTXNrICAgICAgICAgICgweDF1bCA8PCBGTUNfS1BLRVlTVFNfRk9SQklEX1BvcykgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlTVFM6IEZPUkJJRCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19LUEtFWVNUU19LRVlGTEFHX1BvcyAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlTVFM6IEtFWUZMQUcgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBGTUNfS1BLRVlTVFNfS0VZRkxBR19Nc2sgICAgICAgICAoMHgxdWwgPDwgRk1DX0tQS0VZU1RTX0tFWUZMQUdfUG9zKSAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZU1RTOiBLRVlGTEFHIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfS1BLRVlTVFNfQ0ZHRkxBR19Qb3MgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZU1RTOiBDRkdGTEFHIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRk1DX0tQS0VZU1RTX0NGR0ZMQUdfTXNrICAgICAgICAgKDB4MXVsIDw8IEZNQ19LUEtFWVNUU19DRkdGTEFHX1BvcykgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVNUUzogQ0ZHRkxBRyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0tQS0VZU1RTX1NCS1BCVVNZX1BvcyAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVNUUzogU0JLUEJVU1kgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEZNQ19LUEtFWVNUU19TQktQQlVTWV9Nc2sgICAgICAgICgweDF1bCA8PCBGTUNfS1BLRVlTVFNfU0JLUEJVU1lfUG9zKSAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlTVFM6IFNCS1BCVVNZIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19LUEtFWVNUU19TQktQRkxBR19Qb3MgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlTVFM6IFNCS1BGTEFHIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBGTUNfS1BLRVlTVFNfU0JLUEZMQUdfTXNrICAgICAgICAoMHgxdWwgPDwgRk1DX0tQS0VZU1RTX1NCS1BGTEFHX1BvcykgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZU1RTOiBTQktQRkxBRyBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfS1BLRVlDTlRfS1BLRUNOVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZQ05UOiBLUEtFQ05UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRk1DX0tQS0VZQ05UX0tQS0VDTlRfTXNrICAgICAgICAgKDB4M2Z1bCA8PCBGTUNfS1BLRVlDTlRfS1BLRUNOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWUNOVDogS1BLRUNOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0tQS0VZQ05UX0tQS0VNQVhfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWUNOVDogS1BLRU1BWCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEZNQ19LUEtFWUNOVF9LUEtFTUFYX01zayAgICAgICAgICgweDNmdWwgPDwgRk1DX0tQS0VZQ05UX0tQS0VNQVhfUG9zKSAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlDTlQ6IEtQS0VNQVggTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19LUENOVF9LUENOVF9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BDTlQ6IEtQQ05UIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBGTUNfS1BDTlRfS1BDTlRfTXNrICAgICAgICAgICAgICAoMHhmdWwgPDwgRk1DX0tQQ05UX0tQQ05UX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQQ05UOiBLUENOVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfS1BDTlRfS1BNQVhfUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQQ05UOiBLUE1BWCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0tQQ05UX0tQTUFYX01zayAgICAgICAgICAgICAgKDB4ZnVsIDw8IEZNQ19LUENOVF9LUE1BWF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUENOVDogS1BNQVggTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX01QREFUMF9JU1BEQVQwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpNUERBVDA6IElTUERBVDAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEZNQ19NUERBVDBfSVNQREFUMF9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgRk1DX01QREFUMF9JU1BEQVQwX1BvcykgICAgICAgICAgLyohPCBGTUNfVDo6TVBEQVQwOiBJU1BEQVQwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19NUERBVDFfSVNQREFUMV9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBEQVQxOiBJU1BEQVQxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBGTUNfTVBEQVQxX0lTUERBVDFfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IEZNQ19NUERBVDFfSVNQREFUMV9Qb3MpICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QREFUMTogSVNQREFUMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfTVBEQVQyX0lTUERBVDJfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QREFUMjogSVNQREFUMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRk1DX01QREFUMl9JU1BEQVQyX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBGTUNfTVBEQVQyX0lTUERBVDJfUG9zKSAgICAgICAgICAvKiE8IEZNQ19UOjpNUERBVDI6IElTUERBVDIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX01QREFUM19JU1BEQVQzX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpNUERBVDM6IElTUERBVDMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEZNQ19NUERBVDNfSVNQREFUM19Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgRk1DX01QREFUM19JU1BEQVQzX1BvcykgICAgICAgICAgLyohPCBGTUNfVDo6TVBEQVQzOiBJU1BEQVQzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19NUFNUU19NUEJVU1lfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBTVFM6IE1QQlVTWSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBGTUNfTVBTVFNfTVBCVVNZX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX01QU1RTX01QQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QU1RTOiBNUEJVU1kgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfTVBTVFNfUFBHT19Qb3MgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QU1RTOiBQUEdPIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX01QU1RTX1BQR09fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19NUFNUU19QUEdPX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpNUFNUUzogUFBHTyBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX01QU1RTX0lTUEZGX1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpNUFNUUzogSVNQRkYgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEZNQ19NUFNUU19JU1BGRl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfTVBTVFNfSVNQRkZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBTVFM6IElTUEZGIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19NUFNUU19EMF9Qb3MgICAgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBTVFM6IEQwIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBGTUNfTVBTVFNfRDBfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX01QU1RTX0QwX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QU1RTOiBEMCBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfTVBTVFNfRDFfUG9zICAgICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QU1RTOiBEMSBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX01QU1RTX0QxX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19NUFNUU19EMV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpNUFNUUzogRDEgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX01QU1RTX0QyX1BvcyAgICAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpNUFNUUzogRDIgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEZNQ19NUFNUU19EMl9Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfTVBTVFNfRDJfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBTVFM6IEQyIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19NUFNUU19EM19Qb3MgICAgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBTVFM6IEQzIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBGTUNfTVBTVFNfRDNfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX01QU1RTX0QzX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QU1RTOiBEMyBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfTVBBRERSX01QQUREUl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QQUREUjogTVBBRERSIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX01QQUREUl9NUEFERFJfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBGTUNfTVBBRERSX01QQUREUl9Qb3MpICAgICAgICAgICAvKiE8IEZNQ19UOjpNUEFERFI6IE1QQUREUiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX1hPTVIwU1RTX1NJWkVfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01SMFNUUzogU0laRSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEZNQ19YT01SMFNUU19TSVpFX01zayAgICAgICAgICAgICgweGZmdWwgPDwgRk1DX1hPTVIwU1RTX1NJWkVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NUjBTVFM6IFNJWkUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19YT01SMFNUU19CQVNFX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NUjBTVFM6IEJBU0UgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBGTUNfWE9NUjBTVFNfQkFTRV9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBGTUNfWE9NUjBTVFNfQkFTRV9Qb3MpICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVIwU1RTOiBCQVNFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfWE9NUjFTVFNfU0laRV9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVIxU1RTOiBTSVpFIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX1hPTVIxU1RTX1NJWkVfTXNrICAgICAgICAgICAgKDB4ZmZ1bCA8PCBGTUNfWE9NUjFTVFNfU0laRV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01SMVNUUzogU0laRSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX1hPTVIxU1RTX0JBU0VfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01SMVNUUzogQkFTRSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEZNQ19YT01SMVNUU19CQVNFX01zayAgICAgICAgICAgICgweGZmZmZmZnVsIDw8IEZNQ19YT01SMVNUU19CQVNFX1BvcykgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NUjFTVFM6IEJBU0UgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19YT01SMlNUU19TSVpFX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NUjJTVFM6IFNJWkUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBGTUNfWE9NUjJTVFNfU0laRV9Nc2sgICAgICAgICAgICAoMHhmZnVsIDw8IEZNQ19YT01SMlNUU19TSVpFX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVIyU1RTOiBTSVpFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfWE9NUjJTVFNfQkFTRV9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVIyU1RTOiBCQVNFIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX1hPTVIyU1RTX0JBU0VfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmdWwgPDwgRk1DX1hPTVIyU1RTX0JBU0VfUG9zKSAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01SMlNUUzogQkFTRSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX1hPTVIzU1RTX1NJWkVfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01SM1NUUzogU0laRSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEZNQ19YT01SM1NUU19TSVpFX01zayAgICAgICAgICAgICgweGZmdWwgPDwgRk1DX1hPTVIzU1RTX1NJWkVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NUjNTVFM6IFNJWkUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19YT01SM1NUU19CQVNFX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NUjNTVFM6IEJBU0UgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBGTUNfWE9NUjNTVFNfQkFTRV9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBGTUNfWE9NUjNTVFNfQkFTRV9Qb3MpICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVIzU1RTOiBCQVNFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfWE9NU1RTX1hPTVIwT05fUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVNUUzogWE9NUjBPTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRk1DX1hPTVNUU19YT01SME9OX01zayAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19YT01TVFNfWE9NUjBPTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01TVFM6IFhPTVIwT04gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX1hPTVNUU19YT01SMU9OX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01TVFM6IFhPTVIxT04gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEZNQ19YT01TVFNfWE9NUjFPTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBGTUNfWE9NU1RTX1hPTVIxT05fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NU1RTOiBYT01SMU9OIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19YT01TVFNfWE9NUjJPTl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NU1RTOiBYT01SMk9OIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBGTUNfWE9NU1RTX1hPTVIyT05fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRk1DX1hPTVNUU19YT01SMk9OX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVNUUzogWE9NUjJPTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfWE9NU1RTX1hPTVIzT05fUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVNUUzogWE9NUjNPTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRk1DX1hPTVNUU19YT01SM09OX01zayAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19YT01TVFNfWE9NUjNPTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01TVFM6IFhPTVIzT04gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX1hPTVNUU19YT01QRUZfUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01TVFM6IFhPTVBFRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEZNQ19YT01TVFNfWE9NUEVGX01zayAgICAgICAgICAgICgweDF1bCA8PCBGTUNfWE9NU1RTX1hPTVBFRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NU1RTOiBYT01QRUYgTWFzayAgICAgICAgICAgICAqLworCisvKipAfSovIC8qIEZNQ19DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgRk1DIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisjZW5kaWYgLyogX19GTUNfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2dwaW9fcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZ3Bpb19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTFjMDJjCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2dwaW9fcmVnLmgKQEAgLTAsMCArMSw5NjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBncGlvX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBHUElPIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0dQSU9fUkVHX0hfXworI2RlZmluZSBfX0dQSU9fUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHZW5lcmFsIFB1cnBvc2UgSW5wdXQvT3V0cHV0IENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBHUElPIEdlbmVyYWwgUHVycG9zZSBJbnB1dC9PdXRwdXQgQ29udHJvbGxlcihHUElPKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBHUElPIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgR1BJT19UOjpNT0RFCisgICAgICogT2Zmc2V0OiAweDAwLzB4NDAvMHg4MC8weEMwLzB4MTAwLzB4MTQwLzB4MTgwLzB4MUMwICBQQS1IIEkvTyBNb2RlIENvbnRyb2wKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMm4rMToybl18TU9ERW4gICAgfFBvcnQgQS1IIEkvTyBQaW5bbl0gTW9kZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGV0ZXJtaW5lIGVhY2ggSS9PIG1vZGUgb2YgUHgubiBwaW5zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUHgubiBpcyBpbiBJbnB1dCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUHgubiBpcyBpbiBQdXNoLXB1bGwgT3V0cHV0IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQeC5uIGlzIGluIE9wZW4tZHJhaW4gT3V0cHV0IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQeC5uIGlzIGluIFF1YXNpLWJpZGlyZWN0aW9uYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhpcyBmaWVsZCBpcyBkZWZpbmVkIGJ5IENJT0lOSSAoQ09ORklHMCBbMTBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBDSU9JTkkgaXMgc2V0IHRvIDAsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDB4RkZGRl9GRkZGIGFuZCBhbGwgcGlucyB3aWxsIGJlIHF1YXNpLWJpZGlyZWN0aW9uYWwgbW9kZSBhZnRlciBjaGlwIHBvd2VyZWQgb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQ0lPSU5JIGlzIHNldCB0byAxLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAweDAwMDBfMDAwMCBhbmQgYWxsIHBpbnMgd2lsbCBiZSBpbnB1dCBtb2RlIGFmdGVyIGNoaXAgcG93ZXJlZCBvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgQS9CL0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEzIGZvciBwb3J0IEMuIFRoZSBQQy4xNC8gUEMuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTQgZm9yIHBvcnQgRC4gVGhlIFBELjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEyIGZvciBwb3J0IEYuIFRoZSBQRi4xMi8gUEYuMTMvIFBGLjE0LyBQRi4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBHLiBUaGUgUEcuMC8gUEcuMS8gUEcuNS8gUEcuNi8gUEcuNy8gUEcuOCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMSBmb3IgcG9ydCBILiBUaGUgUEguMC8gUEguMS8gUEguMi8gUEguMy8gUEguMTIvIFBILjEzLyBQSC4xNC8gUEguMTUgaXMgaWdub3JlZC4KKyAgICAgKiBAdmFyIEdQSU9fVDo6RElOT0ZGCisgICAgICogT2Zmc2V0OiAweDA0LzB4NDQvMHg4NC8weEM0LzB4MTA0LzB4MTQ0LzB4MTg0LzB4MUM0ICBQQS1IIERpZ2l0YWwgSW5wdXQgUGF0aCBEaXNhYmxlIENvbnRyb2wKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbbisxNl0gIHxESU5PRkZuICAgfFBvcnQgQS1IIFBpbltuXSBEaWdpdGFsIElucHV0IFBhdGggRGlzYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBvZiB0aGVzZSBiaXRzIGlzIHVzZWQgdG8gY29udHJvbCBpZiB0aGUgZGlnaXRhbCBpbnB1dCBwYXRoIG9mIGNvcnJlc3BvbmRpbmcgUHgubiBwaW4gaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgaW5wdXQgaXMgYW5hbG9nIHNpZ25hbCwgdXNlcnMgY2FuIGRpc2FibGUgUHgubiBkaWdpdGFsIGlucHV0IHBhdGggdG8gYXZvaWQgaW5wdXQgY3VycmVudCBsZWFrYWdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQeC5uIGRpZ2l0YWwgaW5wdXQgcGF0aCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQeC5uIGRpZ2l0YWwgaW5wdXQgcGF0aCBEaXNhYmxlZCAoZGlnaXRhbCBpbnB1dCB0aWVkIHRvIGxvdykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgQS9CL0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEzIGZvciBwb3J0IEMuIFRoZSBQQy4xNC8gUEMuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTQgZm9yIHBvcnQgRC4gVGhlIFBELjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEyIGZvciBwb3J0IEYuIFRoZSBQRi4xMi8gUEYuMTMvIFBGLjE0LyBQRi4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBHLiBUaGUgUEcuMC8gUEcuMS8gUEcuNS8gUEcuNi8gUEcuNy8gUEcuOCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMSBmb3IgcG9ydCBILiBUaGUgUEguMC8gUEguMS8gUEguMi8gUEguMy8gUEguMTIvIFBILjEzLyBQSC4xNC8gUEguMTUgaXMgaWdub3JlZC4KKyAgICAgKiBAdmFyIEdQSU9fVDo6RE9VVAorICAgICAqIE9mZnNldDogMHgwOC8weDQ4LzB4ODgvMHhDOC8weDEwOC8weDE0OC8weDE4OC8weDFDOCAgUEEtSCBEYXRhIE91dHB1dCBWYWx1ZQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFtuXSAgICAgfERPVVRuICAgICB8UG9ydCBBLUggUGluW25dIE91dHB1dCBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggb2YgdGhlc2UgYml0cyBjb250cm9scyB0aGUgc3RhdHVzIG9mIGEgUHgubiBwaW4gd2hlbiB0aGUgUHgubiBpcyBjb25maWd1cmVkIGFzIFB1c2gtcHVsbCBvdXRwdXQsIE9wZW4tZHJhaW4gb3V0cHV0IG9yIFF1YXNpLWJpZGlyZWN0aW9uYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUHgubiB3aWxsIGRyaXZlIExvdyBpZiB0aGUgUHgubiBwaW4gaXMgY29uZmlndXJlZCBhcyBQdXNoLXB1bGwgb3V0cHV0LCBPcGVuLWRyYWluIG91dHB1dCBvciBRdWFzaS1iaWRpcmVjdGlvbmFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFB4Lm4gd2lsbCBkcml2ZSBIaWdoIGlmIHRoZSBQeC5uIHBpbiBpcyBjb25maWd1cmVkIGFzIFB1c2gtcHVsbCBvdXRwdXQgb3IgUXVhc2ktYmlkaXJlY3Rpb25hbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEEvQi9FLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMyBmb3IgcG9ydCBDLiBUaGUgUEMuMTQvIFBDLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE0IGZvciBwb3J0IEQuIFRoZSBQRC4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMiBmb3IgcG9ydCBGLiBUaGUgUEYuMTIvIFBGLjEzLyBQRi4xNC8gUEYuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgRy4gVGhlIFBHLjAvIFBHLjEvIFBHLjUvIFBHLjYvIFBHLjcvIFBHLjggaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTEgZm9yIHBvcnQgSC4gVGhlIFBILjAvIFBILjEvIFBILjIvIFBILjMvIFBILjEyLyBQSC4xMy8gUEguMTQvIFBILjE1IGlzIGlnbm9yZWQuCisgICAgICogQHZhciBHUElPX1Q6OkRBVE1TSworICAgICAqIE9mZnNldDogMHgwQy8weDRDLzB4OEMvMHhDQy8weDEwQy8weDE0Qy8weDE4Qy8weDFDQyAgUEEtSCBEYXRhIE91dHB1dCBXcml0ZSBNYXNrCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8W25dICAgICB8REFUTVNLbiAgIHxQb3J0IEEtSCBQaW5bbl0gRGF0YSBPdXRwdXQgV3JpdGUgTWFzaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gcHJvdGVjdCB0aGUgY29ycmVzcG9uZGluZyBET1VUIChQeF9ET1VUW25dKSBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgREFUTVNLIChQeF9EQVRNU0tbbl0pIGJpdCBpcyBzZXQgdG8gMSwgdGhlIGNvcnJlc3BvbmRpbmcgRE9VVCAoUHhfRE9VVFtuXSkgYml0IGlzIHByb3RlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgd3JpdGUgc2lnbmFsIGlzIG1hc2tlZCwgd3JpdGluZyBkYXRhIHRvIHRoZSBwcm90ZWN0IGJpdCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb3JyZXNwb25kaW5nIERPVVQgKFB4X0RPVVRbbl0pIGJpdCBjYW4gYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29ycmVzcG9uZGluZyBET1VUIChQeF9ET1VUW25dKSBiaXQgcHJvdGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGZ1bmN0aW9uIG9ubHkgcHJvdGVjdHMgdGhlIGNvcnJlc3BvbmRpbmcgRE9VVCAoUHhfRE9VVFtuXSkgYml0LCBhbmQgd2lsbCBub3QgcHJvdGVjdCB0aGUgY29ycmVzcG9uZGluZyBQRElPIChQeG5fUERJT1swXSkgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBBL0IvRS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTMgZm9yIHBvcnQgQy4gVGhlIFBDLjE0LyBQQy4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNCBmb3IgcG9ydCBELiBUaGUgUEQuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTIgZm9yIHBvcnQgRi4gVGhlIFBGLjEyLyBQRi4xMy8gUEYuMTQvIFBGLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEcuIFRoZSBQRy4wLyBQRy4xLyBQRy41LyBQRy42LyBQRy43LyBQRy44IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTExIGZvciBwb3J0IEguIFRoZSBQSC4wLyBQSC4xLyBQSC4yLyBQSC4zLyBQSC4xMi8gUEguMTMvIFBILjE0LyBQSC4xNSBpcyBpZ25vcmVkLgorICAgICAqIEB2YXIgR1BJT19UOjpQSU4KKyAgICAgKiBPZmZzZXQ6IDB4MTAvMHg1MC8weDkwLzB4RDAvMHgxMTAvMHgxNTAvMHgxOTAvMHgxRDAgIFBBLUggUGluIFZhbHVlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8W25dICAgICB8UElObiAgICAgIHxQb3J0IEEtSCBQaW5bbl0gUGluIFZhbHVlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgb2YgdGhlIHJlZ2lzdGVyIHJlZmxlY3RzIHRoZSBhY3R1YWwgc3RhdHVzIG9mIHRoZSByZXNwZWN0aXZlIFB4Lm4gcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBiaXQgaXMgMSwgaXQgaW5kaWNhdGVzIHRoZSBjb3JyZXNwb25kaW5nIHBpbiBzdGF0dXMgaXMgaGlnaDsgZWxzZSB0aGUgcGluIHN0YXR1cyBpcyBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgQS9CL0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEzIGZvciBwb3J0IEMuIFRoZSBQQy4xNC8gUEMuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTQgZm9yIHBvcnQgRC4gVGhlIFBELjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEyIGZvciBwb3J0IEYuIFRoZSBQRi4xMi8gUEYuMTMvIFBGLjE0LyBQRi4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBHLiBUaGUgUEcuMC8gUEcuMS8gUEcuNS8gUEcuNi8gUEcuNy8gUEcuOCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMSBmb3IgcG9ydCBILiBUaGUgUEguMC8gUEguMS8gUEguMi8gUEguMy8gUEguMTIvIFBILjEzLyBQSC4xNC8gUEguMTUgaXMgaWdub3JlZC4KKyAgICAgKiBAdmFyIEdQSU9fVDo6REJFTgorICAgICAqIE9mZnNldDogMHgxNC8weDU0LzB4OTQvMHhENC8weDExNC8weDE1NC8weDE5NC8weDFENCAgUEEtSCBEZS1Cb3VuY2UgRW5hYmxlIENvbnRyb2wKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbbl0gICAgIHxEQkVObiAgICAgfFBvcnQgQS1IIFBpbltuXSBJbnB1dCBTaWduYWwgRGUtYm91bmNlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgREJFTltuXSBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIGRlLWJvdW5jZSBmdW5jdGlvbiBmb3IgZWFjaCBjb3JyZXNwb25kaW5nIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgaW5wdXQgc2lnbmFsIHB1bHNlIHdpZHRoIGNhbm5vdCBiZSBzYW1wbGVkIGJ5IGNvbnRpbnVvdXMgdHdvIGRlLWJvdW5jZSBzYW1wbGUgY3ljbGUsIHRoZSBpbnB1dCBzaWduYWwgdHJhbnNpdGlvbiBpcyBzZWVuIGFzIHRoZSBzaWduYWwgYm91bmNlIGFuZCB3aWxsIG5vdCB0cmlnZ2VyIHRoZSBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlLWJvdW5jZSBjbG9jayBzb3VyY2UgaXMgY29udHJvbGxlZCBieSBEQkNMS1NSQyAoUHhfREJDVEwgWzRdKSwgb25lIGRlLWJvdW5jZSBzYW1wbGUgY3ljbGUgcGVyaW9kIGlzIGNvbnRyb2xsZWQgYnkgREJDTEtTRUwgKFB4X0RCQ1RMIFszOjBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUHgubiBkZS1ib3VuY2UgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFB4Lm4gZGUtYm91bmNlIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlLWJvdW5jZSBmdW5jdGlvbiBpcyB2YWxpZCBvbmx5IGZvciBlZGdlIHRyaWdnZXJlZCBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGludGVycnVwdCBtb2RlIGlzIGxldmVsIHRyaWdnZXJlZCwgdGhlIGRlLWJvdW5jZSBlbmFibGUgYml0IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgQS9CL0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEzIGZvciBwb3J0IEMuIFRoZSBQQy4xNC8gUEMuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTQgZm9yIHBvcnQgRC4gVGhlIFBELjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEyIGZvciBwb3J0IEYuIFRoZSBQRi4xMi8gUEYuMTMvIFBGLjE0LyBQRi4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBHLiBUaGUgUEcuMC8gUEcuMS8gUEcuNS8gUEcuNi8gUEcuNy8gUEcuOCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMSBmb3IgcG9ydCBILiBUaGUgUEguMC8gUEguMS8gUEguMi8gUEguMy8gUEguMTIvIFBILjEzLyBQSC4xNC8gUEguMTUgaXMgaWdub3JlZC4KKyAgICAgKiBAdmFyIEdQSU9fVDo6SU5UVFlQRQorICAgICAqIE9mZnNldDogMHgxOC8weDU4LzB4OTgvMHhEOC8weDExOC8weDE1OC8weDE5OC8weDFEOCAgUEEtSCBJbnRlcnJ1cHQgVHJpZ2dlciBUeXBlIENvbnRyb2wKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbbl0gICAgIHxUWVBFbiAgICAgfFBvcnQgQS1IIFBpbltuXSBFZGdlIG9yIExldmVsIERldGVjdGlvbiBJbnRlcnJ1cHQgVHJpZ2dlciBUeXBlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUWVBFIChQeF9JTlRUWVBFW25dKSBiaXQgaXMgdXNlZCB0byBjb250cm9sIHRoZSB0cmlnZ2VyZWQgaW50ZXJydXB0IGlzIGJ5IGxldmVsIHRyaWdnZXIgb3IgYnkgZWRnZSB0cmlnZ2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBpbnRlcnJ1cHQgaXMgYnkgZWRnZSB0cmlnZ2VyLCB0aGUgdHJpZ2dlciBzb3VyY2UgY2FuIGJlIGNvbnRyb2xsZWQgYnkgZGUtYm91bmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBpbnRlcnJ1cHQgaXMgYnkgbGV2ZWwgdHJpZ2dlciwgdGhlIGlucHV0IHNvdXJjZSBpcyBzYW1wbGVkIGJ5IG9uZSBIQ0xLIGNsb2NrIGFuZCBnZW5lcmF0ZXMgdGhlIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRWRnZSB0cmlnZ2VyIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTGV2ZWwgdHJpZ2dlciBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIHBpbiBpcyBzZXQgYXMgdGhlIGxldmVsIHRyaWdnZXIgaW50ZXJydXB0LCBvbmx5IG9uZSBsZXZlbCBjYW4gYmUgc2V0IG9uIHRoZSByZWdpc3RlcnMgUkhJRU4gKFB4X0lOVEVOW24rMTZdKS9GTElFTiAoUHhfSU5URU5bbl0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIGJvdGggbGV2ZWxzIHRvIHRyaWdnZXIgaW50ZXJydXB0IGFyZSBzZXQsIHRoZSBzZXR0aW5nIGlzIGlnbm9yZWQgYW5kIG5vIGludGVycnVwdCB3aWxsIG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZS1ib3VuY2UgZnVuY3Rpb24gaXMgdmFsaWQgb25seSBmb3IgZWRnZSB0cmlnZ2VyZWQgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBpbnRlcnJ1cHQgbW9kZSBpcyBsZXZlbCB0cmlnZ2VyZWQsIHRoZSBkZS1ib3VuY2UgZW5hYmxlIGJpdCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEEvQi9FLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMyBmb3IgcG9ydCBDLiBUaGUgUEMuMTQvIFBDLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE0IGZvciBwb3J0IEQuIFRoZSBQRC4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMiBmb3IgcG9ydCBGLiBUaGUgUEYuMTIvIFBGLjEzLyBQRi4xNC8gUEYuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgRy4gVGhlIFBHLjAvIFBHLjEvIFBHLjUvIFBHLjYvIFBHLjcvIFBHLjggaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTEgZm9yIHBvcnQgSC4gVGhlIFBILjAvIFBILjEvIFBILjIvIFBILjMvIFBILjEyLyBQSC4xMy8gUEguMTQvIFBILjE1IGlzIGlnbm9yZWQuCisgICAgICogQHZhciBHUElPX1Q6OklOVEVOCisgICAgICogT2Zmc2V0OiAweDFDLzB4NUMvMHg5Qy8weERDLzB4MTFDLzB4MTVDLzB4MTlDLzB4MURDICBQQS1IIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFtuXSAgICAgfEZMSUVObiAgICB8UG9ydCBBLUggUGluW25dIEZhbGxpbmcgRWRnZSBvciBMb3cgTGV2ZWwgSW50ZXJydXB0IFRyaWdnZXIgVHlwZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEZMSUVOIChQeF9JTlRFTltuXSkgYml0IGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBpbnRlcnJ1cHQgZm9yIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW5wdXQgUHgubiBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IGJpdCB0byAxIGFsc28gZW5hYmxlIHRoZSBwaW4gd2FrZS11cCBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHNldHRpbmcgdGhlIEZMSUVOIChQeF9JTlRFTltuXSkgYml0IHRvIDEgOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBpbnRlcnJ1cHQgaXMgbGV2ZWwgdHJpZ2dlciAoVFlQRSAoUHhfSU5UVFlQRVtuXSkgYml0IGlzIHNldCB0byAxKSwgdGhlIGlucHV0IFB4Lm4gcGluIHdpbGwgZ2VuZXJhdGUgdGhlIGludGVycnVwdCB3aGlsZSB0aGlzIHBpbiBzdGF0ZSBpcyBhdCBsb3cgbGV2ZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGludGVycnVwdCBpcyBlZGdlIHRyaWdnZXIoVFlQRSAoUHhfSU5UVFlQRVtuXSkgYml0IGlzIHNldCB0byAwKSwgdGhlIGlucHV0IFB4Lm4gcGluIHdpbGwgZ2VuZXJhdGUgdGhlIGludGVycnVwdCB3aGlsZSB0aGlzIHBpbiBzdGF0ZSBjaGFuZ2VkIGZyb20gaGlnaCB0byBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFB4Lm4gbGV2ZWwgbG93IG9yIGhpZ2ggdG8gbG93IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUHgubiBsZXZlbCBsb3cgb3IgaGlnaCB0byBsb3cgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgQS9CL0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEzIGZvciBwb3J0IEMuIFRoZSBQQy4xNC8gUEMuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTQgZm9yIHBvcnQgRC4gVGhlIFBELjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEyIGZvciBwb3J0IEYuIFRoZSBQRi4xMi8gUEYuMTMvIFBGLjE0LyBQRi4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBHLiBUaGUgUEcuMC8gUEcuMS8gUEcuNS8gUEcuNi8gUEcuNy8gUEcuOCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMSBmb3IgcG9ydCBILiBUaGUgUEguMC8gUEguMS8gUEguMi8gUEguMy8gUEguMTIvIFBILjEzLyBQSC4xNC8gUEguMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8W24rMTZdICB8UkhJRU5uICAgIHxQb3J0IEEtSCBQaW5bbl0gUmlzaW5nIEVkZ2Ugb3IgSGlnaCBMZXZlbCBJbnRlcnJ1cHQgVHJpZ2dlciBUeXBlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUkhJRU4gKFB4X0lOVEVOW24rMTZdKSBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIGludGVycnVwdCBmb3IgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnB1dCBQeC5uIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgYml0IHRvIDEgYWxzbyBlbmFibGUgdGhlIHBpbiB3YWtlLXVwIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gc2V0dGluZyB0aGUgUkhJRU4gKFB4X0lOVEVOW24rMTZdKSBiaXQgdG8gMSA6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGludGVycnVwdCBpcyBsZXZlbCB0cmlnZ2VyIChUWVBFIChQeF9JTlRUWVBFW25dKSBiaXQgaXMgc2V0IHRvIDEpLCB0aGUgaW5wdXQgUHgubiBwaW4gd2lsbCBnZW5lcmF0ZSB0aGUgaW50ZXJydXB0IHdoaWxlIHRoaXMgcGluIHN0YXRlIGlzIGF0IGhpZ2ggbGV2ZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGludGVycnVwdCBpcyBlZGdlIHRyaWdnZXIgKFRZUEUgKFB4X0lOVFRZUEVbbl0pIGJpdCBpcyBzZXQgdG8gMCksIHRoZSBpbnB1dCBQeC5uIHBpbiB3aWxsIGdlbmVyYXRlIHRoZSBpbnRlcnJ1cHQgd2hpbGUgdGhpcyBwaW4gc3RhdGUgY2hhbmdlZCBmcm9tIGxvdyB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQeC5uIGxldmVsIGhpZ2ggb3IgbG93IHRvIGhpZ2ggaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQeC5uIGxldmVsIGhpZ2ggb3IgbG93IHRvIGhpZ2ggaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgQS9CL0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEzIGZvciBwb3J0IEMuIFRoZSBQQy4xNC8gUEMuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTQgZm9yIHBvcnQgRC4gVGhlIFBELjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEyIGZvciBwb3J0IEYuIFRoZSBQRi4xMi8gUEYuMTMvIFBGLjE0LyBQRi4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBHLiBUaGUgUEcuMC8gUEcuMS8gUEcuNS8gUEcuNi8gUEcuNy8gUEcuOCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMSBmb3IgcG9ydCBILiBUaGUgUEguMC8gUEguMS8gUEguMi8gUEguMy8gUEguMTIvIFBILjEzLyBQSC4xNC8gUEguMTUgaXMgaWdub3JlZC4KKyAgICAgKiBAdmFyIEdQSU9fVDo6SU5UU1JDCisgICAgICogT2Zmc2V0OiAweDIwLzB4NjAvMHhBMC8weEUwLzB4MTIwLzB4MTYwLzB4MUEwLzB4MUUwICBQQS1IIEludGVycnVwdCBTb3VyY2UgRmxhZworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFtuXSAgICAgfElOVFNSQ24gICB8UG9ydCBBLUggUGluW25dIEludGVycnVwdCBTb3VyY2UgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbiA6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGFjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgdGhlIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb24gOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBpbnRlcnJ1cHQgYXQgUHgubi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUHgubiBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEEvQi9FLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMyBmb3IgcG9ydCBDLiBUaGUgUEMuMTQvIFBDLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE0IGZvciBwb3J0IEQuIFRoZSBQRC4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMiBmb3IgcG9ydCBGLiBUaGUgUEYuMTIvIFBGLjEzLyBQRi4xNC8gUEYuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgRy4gVGhlIFBHLjAvIFBHLjEvIFBHLjUvIFBHLjYvIFBHLjcvIFBHLjggaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTEgZm9yIHBvcnQgSC4gVGhlIFBILjAvIFBILjEvIFBILjIvIFBILjMvIFBILjEyLyBQSC4xMy8gUEguMTQvIFBILjE1IGlzIGlnbm9yZWQuCisgICAgICogQHZhciBHUElPX1Q6OlNNVEVOCisgICAgICogT2Zmc2V0OiAweDI0LzB4NjQvMHhBNC8weEU0LzB4MTI0LzB4MTY0LzB4MUE0LzB4MUU0ICBQQS1IIElucHV0IFNjaG1pdHQgVHJpZ2dlciBFbmFibGUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbbl0gICAgIHxTTVRFTm4gICAgfFBvcnQgQS1IIFBpbltuXSBJbnB1dCBTY2htaXR0IFRyaWdnZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQeC5uIGlucHV0IFNjaG1pdHQgdHJpZ2dlciBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUHgubiBpbnB1dCBTY2htaXR0IHRyaWdnZXIgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBBL0IvRS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTMgZm9yIHBvcnQgQy4gVGhlIFBDLjE0LyBQQy4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNCBmb3IgcG9ydCBELiBUaGUgUEQuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTIgZm9yIHBvcnQgRi4gVGhlIFBGLjEyLyBQRi4xMy8gUEYuMTQvIFBGLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEcuIFRoZSBQRy4wLyBQRy4xLyBQRy41LyBQRy42LyBQRy43LyBQRy44IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTExIGZvciBwb3J0IEguIFRoZSBQSC4wLyBQSC4xLyBQSC4yLyBQSC4zLyBQSC4xMi8gUEguMTMvIFBILjE0LyBQSC4xNSBpcyBpZ25vcmVkLgorICAgICAqIEB2YXIgR1BJT19UOjpTTEVXQ1RMCisgICAgICogT2Zmc2V0OiAweDI4LzB4NjgvMHhBOC8weEU4LzB4MTI4LzB4MTY4LzB4MUE4LzB4MUU4ICBQQS1IIEhpZ2ggU2xldyBSYXRlIENvbnRyb2wKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMm4rMToybl18SFNSRU5uICAgfFBvcnQgQS1IIFBpbltuXSBIaWdoIFNsZXcgUmF0ZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQeC5uIG91dHB1dCB3aXRoIG5vcm1hbCBzbGV3IHJhdGUgbW9kZSAobWF4aW11bSA0MCBNSHogYXQgMi43VikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQeC5uIG91dHB1dCB3aXRoIGhpZ2ggc2xldyByYXRlIG1vZGUgKG1heGltdW0gODAgTUh6IGF0IDIuN1YpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUHgubiBvdXRwdXQgd2l0aCBmYXN0IHNsZXcgcmF0ZSBtb2RlIChtYXhpbXVtIDEwMCBNSHogYXQgMi43Vi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEEvQi9FLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMyBmb3IgcG9ydCBDLiBUaGUgUEMuMTQvIFBDLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE0IGZvciBwb3J0IEQuIFRoZSBQRC4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMiBmb3IgcG9ydCBGLiBUaGUgUEYuMTIvIFBGLjEzLyBQRi4xNC8gUEYuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgRy4gVGhlIFBHLjAvIFBHLjEvIFBHLjUvIFBHLjYvIFBHLjcvIFBHLjggaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTEgZm9yIHBvcnQgSC4gVGhlIFBILjAvIFBILjEvIFBILjIvIFBILjMvIFBILjEyLyBQSC4xMy8gUEguMTQvIFBILjE1IGlzIGlnbm9yZWQuCisgICAgICogQHZhciBHUElPX1Q6OlBVU0VMCisgICAgICogT2Zmc2V0OiAweDMwLzB4NzAvMHhCMC8weEYwLzB4MTMwLzB4MTcwLzB4MUIwLzB4MUYwICBQQS1IIFB1bGwtdXAgYW5kIFB1bGwtZG93biBTZWxlY3Rpb24gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMm4rMToybl18UFVTRUxuICAgfFBvcnQgQS1IIFBpbltuXSBQdWxsLXVwIGFuZCBQdWxsLWRvd24gRW5hYmxlIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGV0ZXJtaW5lIGVhY2ggSS9PIFB1bGwtdXAvcHVsbC1kb3duIG9mIFB4Lm4gcGlucy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFB4Lm4gcHVsbC11cCBhbmQgcHVsbC1kb3duIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQeC5uIHB1bGwtdXAgZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUHgubiBwdWxsLWRvd24gZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUHgubiBwdWxsLXVwIGFuZCBwdWxsLWRvd24gZGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNpY2FsbHksIHRoZSBwdWxsLXVwIGNvbnRyb2wgYW5kIHB1bGwtZG93biBjb250cm9sIGhhcyBmb2xsb3dpbmcgYmVoYXZpb3IgbGltaXRhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5kZXBlbmRlbnQgcHVsbC11cCBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBNT0RFbiAoUHhfTU9ERVsybisxOjJuXSkgc2V0IGFzIHRyaS1zdGF0ZSBhbmQgb3Blbi1kcmFpbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbmRlcGVuZGVudCBwdWxsLWRvd24gY29udHJvbCByZWdpc3RlciBvbmx5IHZhbGlkIHdoZW4gTU9ERW4gKFB4X01PREVbMm4rMToybl0pIHNldCBhcyB0cmktc3RhdGUgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGJvdGggcHVsbC11cCBwdWxsLWRvd24gaXMgc2V0IGFzIDEgYXQgdHJpLXN0YXRlIG1vZGUsIGtlZXAgSS9PIGluIHRyaS1zdGF0ZSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6MgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBBL0IvRS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTMgZm9yIHBvcnQgQy4gVGhlIFBDLjE0LyBQQy4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNCBmb3IgcG9ydCBELiBUaGUgUEQuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTIgZm9yIHBvcnQgRi4gVGhlIFBGLjEyLyBQRi4xMy8gUEYuMTQvIFBGLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEcuIFRoZSBQRy4wLyBQRy4xLyBQRy41LyBQRy42LyBQRy43LyBQRy44IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTExIGZvciBwb3J0IEguIFRoZSBQSC4wLyBQSC4xLyBQSC4yLyBQSC4zLyBQSC4xMi8gUEguMTMvIFBILjE0LyBQSC4xNSBpcyBpZ25vcmVkLgorICAgICAqIEB2YXIgR1BJT19UOjpEQkNUTAorICAgICAqIE9mZnNldDogMHgzNC8weDc0LzB4QjQvMHhGNC8weDEzNC8weDE3NC8weDFCNC8weDFGNCAgUEEtSCBJbnRlcnJ1cHQgRGUtYm91bmNlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxEQkNMS1NFTCAgfERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gU2FtcGxlIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciAxIGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gU2FtcGxlIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciAyIGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gU2FtcGxlIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciA0IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gU2FtcGxlIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciA4IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gU2FtcGxlIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciAxNiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IFNhbXBsZSBpbnRlcnJ1cHQgaW5wdXQgb25jZSBwZXIgMzIgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBTYW1wbGUgaW50ZXJydXB0IGlucHV0IG9uY2UgcGVyIDY0IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gU2FtcGxlIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciAxMjggY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBTYW1wbGUgaW50ZXJydXB0IGlucHV0IG9uY2UgcGVyIDI1NiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IFNhbXBsZSBpbnRlcnJ1cHQgaW5wdXQgb25jZSBwZXIgMioyNTYgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTAgPSBTYW1wbGUgaW50ZXJydXB0IGlucHV0IG9uY2UgcGVyIDQqMjU2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDExID0gU2FtcGxlIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciA4KjI1NiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMCA9IFNhbXBsZSBpbnRlcnJ1cHQgaW5wdXQgb25jZSBwZXIgMTYqMjU2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAxID0gU2FtcGxlIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciAzMioyNTYgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTAgPSBTYW1wbGUgaW50ZXJydXB0IGlucHV0IG9uY2UgcGVyIDY0KjI1NiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMSA9IFNhbXBsZSBpbnRlcnJ1cHQgaW5wdXQgb25jZSBwZXIgMTI4KjI1NiBjbG9ja3MuCisgICAgICogfFs0XSAgICAgfERCQ0xLU1JDICB8RGUtYm91bmNlIENvdW50ZXIgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEZS1ib3VuY2UgY291bnRlciBjbG9jayBzb3VyY2UgaXMgdGhlIEhDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERlLWJvdW5jZSBjb3VudGVyIGNsb2NrIHNvdXJjZSBpcyB0aGUgMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKS4KKyAgICAgKiB8WzVdICAgICB8SUNMS09OICAgIHxJbnRlcnJ1cHQgQ2xvY2sgb24gTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFZGdlIGRldGVjdGlvbiBjaXJjdWl0IGlzIGFjdGl2ZSBvbmx5IGlmIEkvTyBwaW4gY29ycmVzcG9uZGluZyBSSElFTiAoUHhfSU5URU5bbisxNl0pL0ZMSUVOIChQeF9JTlRFTltuXSkgYml0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBbGwgSS9PIHBpbnMgZWRnZSBkZXRlY3Rpb24gY2lyY3VpdCBpcyBhbHdheXMgYWN0aXZlIGFmdGVyIHJlc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIHJlY29tbWVuZGVkIHRvIGRpc2FibGUgdGhpcyBiaXQgdG8gc2F2ZSBzeXN0ZW0gcG93ZXIgaWYgbm8gc3BlY2lhbCBhcHBsaWNhdGlvbiBjb25jZXJuLgorICAgICAqLworCisKKyAgICBfX0lPIHVpbnQzMl90IE1PREU7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMC8weDQwLzB4ODAvMHhDMC8weDEwMC8weDE0MC8weDE4MC8weDFDMF0gUG9ydCBBLUggSS9PIE1vZGUgQ29udHJvbCAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRElOT0ZGOyAgICAgICAgICAgICAgICAvKiE8IFsweDA0LzB4NDQvMHg4NC8weEM0LzB4MTA0LzB4MTQ0LzB4MTg0LzB4MUM0XSBQb3J0IEEtSCBEaWdpdGFsIElucHV0IFBhdGggRGlzYWJsZSBDb250cm9sICovCisgICAgX19JTyB1aW50MzJfdCBET1VUOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDgvMHg0OC8weDg4LzB4QzgvMHgxMDgvMHgxNDgvMHgxODgvMHgxQzhdIFBvcnQgQS1IIERhdGEgT3V0cHV0IFZhbHVlICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERBVE1TSzsgICAgICAgICAgICAgICAgLyohPCBbMHgwQy8weDRDLzB4OEMvMHhDQy8weDEwQy8weDE0Qy8weDE4Qy8weDFDQ10gUG9ydCBBLUggRGF0YSBPdXRwdXQgV3JpdGUgTWFzayAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUElOOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDEwLzB4NTAvMHg5MC8weEQwLzB4MTEwLzB4MTUwLzB4MTkwLzB4MUQwXSBQb3J0IEEtSCBQaW4gVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBEQkVOOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MTQvMHg1NC8weDk0LzB4RDQvMHgxMTQvMHgxNTQvMHgxOTQvMHgxRDRdIFBvcnQgQS1IIERlLUJvdW5jZSBFbmFibGUgQ29udHJvbCAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVFRZUEU7ICAgICAgICAgICAgICAgLyohPCBbMHgxOC8weDU4LzB4OTgvMHhEOC8weDExOC8weDE1OC8weDE5OC8weDFEOF0gUG9ydCBBLUggSW50ZXJydXB0IFRyaWdnZXIgVHlwZSBDb250cm9sICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5URU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDFDLzB4NUMvMHg5Qy8weERDLzB4MTFDLzB4MTVDLzB4MTlDLzB4MURDXSBQb3J0IEEtSCBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRTUkM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MjAvMHg2MC8weEEwLzB4RTAvMHgxMjAvMHgxNjAvMHgxQTAvMHgxRTBdIFBvcnQgQS1IIEludGVycnVwdCBTb3VyY2UgRmxhZyAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNNVEVOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgyNC8weDY0LzB4QTQvMHhFNC8weDEyNC8weDE2NC8weDFBNC8weDFFNF0gUG9ydCBBLUggSW5wdXQgU2NobWl0dCBUcmlnZ2VyIEVuYWJsZSAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU0xFV0NUTDsgICAgICAgICAgICAgICAvKiE8IFsweDI4LzB4NjgvMHhBOC8weEU4LzB4MTI4LzB4MTY4LzB4MUE4LzB4MUU4XSBQb3J0IEEtSCBIaWdoIFNsZXcgUmF0ZSBDb250cm9sICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsxXTsKKyAgICBfX0lPIHVpbnQzMl90IFBVU0VMOyAgICAgICAgICAgICAgICAgLyohPCBbMHgzMC8weDcwLzB4QjAvMHhGMC8weDEzMC8weDE3MC8weDFCMC8weDFGMF0gUG9ydCBBLUggUHVsbC11cCBhbmQgUHVsbC1kb3duIFNlbGVjdGlvbiBSZWdpc3RlciAqLworICAgIF9fSU8gdWludDMyX3QgREJDVEw7ICAgICAgICAgICAgICAgICAvKiE8IFsweDM0LzB4NzQvMHhCNC8weEY0LzB4MTM0LzB4MTc0LzB4MUI0LzB4MUY0XSBQb3J0IEEtSCBJbnRlcnJ1cHQgRGUtYm91bmNlIENvbnRyb2wgICAgICAgICovCisKK30gR1BJT19UOworCisKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgR1BJT19DT05TVCBHUElPIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIEdQSU8gQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBHUElPX01PREVfTU9ERTBfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19NT0RFX01PREUwX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fTU9ERV9NT0RFMF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTAgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19NT0RFX01PREUxX1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTEgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFMV9Nc2sgICAgICAgICAgICAgICgweDN1bCA8PCBHUElPX01PREVfTU9ERTFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUxIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFMl9Qb3MgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUyIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX01PREVfTU9ERTJfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19NT0RFX01PREUyX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX01PREVfTU9ERTNfUG9zICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19NT0RFX01PREUzX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fTU9ERV9NT0RFM19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTMgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19NT0RFX01PREU0X1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFNF9Nc2sgICAgICAgICAgICAgICgweDN1bCA8PCBHUElPX01PREVfTU9ERTRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREU0IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFNV9Qb3MgICAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREU1IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX01PREVfTU9ERTVfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19NT0RFX01PREU1X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFNSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX01PREVfTU9ERTZfUG9zICAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFNiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19NT0RFX01PREU2X01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fTU9ERV9NT0RFNl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19NT0RFX01PREU3X1BvcyAgICAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTcgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFN19Nc2sgICAgICAgICAgICAgICgweDN1bCA8PCBHUElPX01PREVfTU9ERTdfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREU3IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFOF9Qb3MgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREU4IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX01PREVfTU9ERThfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19NT0RFX01PREU4X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFOCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX01PREVfTU9ERTlfUG9zICAgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFOSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19NT0RFX01PREU5X01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fTU9ERV9NT0RFOV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTkgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19NT0RFX01PREUxMF9Qb3MgICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTEwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFMTBfTXNrICAgICAgICAgICAgICgweDN1bCA8PCBHUElPX01PREVfTU9ERTEwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUxMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFMTFfUG9zICAgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUxMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBHUElPX01PREVfTU9ERTExX01zayAgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19NT0RFX01PREUxMV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMTEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX01PREVfTU9ERTEyX1BvcyAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMTIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19NT0RFX01PREUxMl9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fTU9ERV9NT0RFMTJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTEyIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19NT0RFX01PREUxM19Qb3MgICAgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTEzIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFMTNfTXNrICAgICAgICAgICAgICgweDN1bCA8PCBHUElPX01PREVfTU9ERTEzX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUxMyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFMTRfUG9zICAgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUxNCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBHUElPX01PREVfTU9ERTE0X01zayAgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19NT0RFX01PREUxNF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMTQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX01PREVfTU9ERTE1X1BvcyAgICAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMTUgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19NT0RFX01PREUxNV9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fTU9ERV9NT0RFMTVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTE1IE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGMF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjBfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RJTk9GRl9ESU5PRkYwX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjFfUG9zICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYxX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ESU5PRkZfRElOT0ZGMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYyX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRElOT0ZGX0RJTk9GRjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGM19Qb3MgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjNfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RJTk9GRl9ESU5PRkYzX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjRfUG9zICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkY0X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ESU5PRkZfRElOT0ZGNF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkY1X1BvcyAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRElOT0ZGX0RJTk9GRjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkY1IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGNl9Qb3MgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkY2IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjZfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RJTk9GRl9ESU5PRkY2X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGNiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjdfUG9zICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGNyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkY3X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ESU5PRkZfRElOT0ZGN19Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjcgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkY4X1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjggUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGOF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRElOT0ZGX0RJTk9GRjhfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkY4IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGOV9Qb3MgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkY5IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjlfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RJTk9GRl9ESU5PRkY5X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGOSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjEwX1BvcyAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMTAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYxMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19ESU5PRkZfRElOT0ZGMTBfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjEwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYxMV9Qb3MgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjExIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGMTFfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRElOT0ZGX0RJTk9GRjExX1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYxMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGMTJfUG9zICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYxMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjEyX01zayAgICAgICAgICgweDF1bCA8PCBHUElPX0RJTk9GRl9ESU5PRkYxMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMTIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjEzX1BvcyAgICAgICAgICgyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMTMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYxM19Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19ESU5PRkZfRElOT0ZGMTNfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjEzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYxNF9Qb3MgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjE0IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGMTRfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRElOT0ZGX0RJTk9GRjE0X1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYxNCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGMTVfUG9zICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYxNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjE1X01zayAgICAgICAgICgweDF1bCA8PCBHUElPX0RJTk9GRl9ESU5PRkYxNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMTUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUMF9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQwIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RPVVRfRE9VVDBfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ET1VUX0RPVVQwX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RPVVRfRE9VVDFfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQxX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRE9VVF9ET1VUMV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDEgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQyX1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUMl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RPVVRfRE9VVDJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQyIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUM19Qb3MgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQzIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RPVVRfRE9VVDNfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ET1VUX0RPVVQzX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RPVVRfRE9VVDRfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUNCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQ0X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRE9VVF9ET1VUNF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQ1X1BvcyAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUNV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RPVVRfRE9VVDVfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQ1IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUNl9Qb3MgICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQ2IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RPVVRfRE9VVDZfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ET1VUX0RPVVQ2X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUNiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RPVVRfRE9VVDdfUG9zICAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUNyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQ3X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRE9VVF9ET1VUN19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDcgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQ4X1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDggUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUOF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RPVVRfRE9VVDhfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQ4IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUOV9Qb3MgICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQ5IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RPVVRfRE9VVDlfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ET1VUX0RPVVQ5X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUOSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RPVVRfRE9VVDEwX1BvcyAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMTAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQxMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRE9VVF9ET1VUMTBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDEwIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQxMV9Qb3MgICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDExIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUMTFfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RPVVRfRE9VVDExX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQxMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUMTJfUG9zICAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQxMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RPVVRfRE9VVDEyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ET1VUX0RPVVQxMl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMTIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RPVVRfRE9VVDEzX1BvcyAgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMTMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQxM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRE9VVF9ET1VUMTNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDEzIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQxNF9Qb3MgICAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDE0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUMTRfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RPVVRfRE9VVDE0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQxNCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUMTVfUG9zICAgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQxNSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RPVVRfRE9VVDE1X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ET1VUX0RPVVQxNV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMTUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0swX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREFUTVNLX0RBVE1TSzBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0swIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLMV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0sxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzFfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RBVE1TS19EQVRNU0sxX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzJfUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0syX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQVRNU0tfREFUTVNLMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0szX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREFUTVNLX0RBVE1TSzNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0szIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLNF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0s0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzRfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RBVE1TS19EQVRNU0s0X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzVfUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0s1X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQVRNU0tfREFUTVNLNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0s2X1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLNl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREFUTVNLX0RBVE1TSzZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0s2IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLN19Qb3MgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0s3IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzdfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RBVE1TS19EQVRNU0s3X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLNyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzhfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLOCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0s4X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQVRNU0tfREFUTVNLOF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzggTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0s5X1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzkgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLOV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREFUTVNLX0RBVE1TSzlfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0s5IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLMTBfUG9zICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0sxMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzEwX01zayAgICAgICAgICgweDF1bCA8PCBHUElPX0RBVE1TS19EQVRNU0sxMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMTAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzExX1BvcyAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMTEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0sxMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQVRNU0tfREFUTVNLMTFfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzExIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0sxMl9Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzEyIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLMTJfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREFUTVNLX0RBVE1TSzEyX1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0sxMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLMTNfUG9zICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0sxMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzEzX01zayAgICAgICAgICgweDF1bCA8PCBHUElPX0RBVE1TS19EQVRNU0sxM19Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMTMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzE0X1BvcyAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMTQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0sxNF9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQVRNU0tfREFUTVNLMTRfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzE0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0sxNV9Qb3MgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzE1IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLMTVfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREFUTVNLX0RBVE1TSzE1X1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0sxNSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QSU5fUElOMF9Qb3MgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4wIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUElOX1BJTjBfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1BJTl9QSU4wX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMCBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUElOX1BJTjFfUG9zICAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMSBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1BJTl9QSU4xX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19QSU5fUElOMV9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjEgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BJTl9QSU4yX1BvcyAgICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjIgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QSU5fUElOMl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fUElOX1BJTjJfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4yIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QSU5fUElOM19Qb3MgICAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4zIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUElOX1BJTjNfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1BJTl9QSU4zX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMyBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUElOX1BJTjRfUG9zICAgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElONCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1BJTl9QSU40X01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19QSU5fUElONF9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjQgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BJTl9QSU41X1BvcyAgICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjUgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QSU5fUElONV9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fUElOX1BJTjVfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU41IE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QSU5fUElONl9Qb3MgICAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU42IFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUElOX1BJTjZfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1BJTl9QSU42X1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElONiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUElOX1BJTjdfUG9zICAgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElONyBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1BJTl9QSU43X01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19QSU5fUElON19Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjcgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BJTl9QSU44X1BvcyAgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjggUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QSU5fUElOOF9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fUElOX1BJTjhfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU44IE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QSU5fUElOOV9Qb3MgICAgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU45IFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUElOX1BJTjlfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1BJTl9QSU45X1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOOSBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUElOX1BJTjEwX1BvcyAgICAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMTAgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1BJTl9QSU4xMF9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19QSU5fUElOMTBfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjEwIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BJTl9QSU4xMV9Qb3MgICAgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjExIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QSU5fUElOMTFfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fUElOX1BJTjExX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4xMSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QSU5fUElOMTJfUG9zICAgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4xMiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUElOX1BJTjEyX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1BJTl9QSU4xMl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMTIgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUElOX1BJTjEzX1BvcyAgICAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMTMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1BJTl9QSU4xM19Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19QSU5fUElOMTNfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjEzIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BJTl9QSU4xNF9Qb3MgICAgICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjE0IFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QSU5fUElOMTRfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fUElOX1BJTjE0X1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4xNCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QSU5fUElOMTVfUG9zICAgICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4xNSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUElOX1BJTjE1X01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1BJTl9QSU4xNV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMTUgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOMF9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4wIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RCRU5fREJFTjBfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkVOX0RCRU4wX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RCRU5fREJFTjFfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4xX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREJFTl9EQkVOMV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjEgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4yX1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOMl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RCRU5fREJFTjJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4yIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOM19Qb3MgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4zIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RCRU5fREJFTjNfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkVOX0RCRU4zX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RCRU5fREJFTjRfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVONCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQkVOX0RCRU40X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREJFTl9EQkVONF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkVOX0RCRU41X1BvcyAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fREJFTl9EQkVONV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RCRU5fREJFTjVfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU41IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJFTl9EQkVONl9Qb3MgICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU42IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RCRU5fREJFTjZfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkVOX0RCRU42X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVONiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RCRU5fREJFTjdfUG9zICAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVONyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQkVOX0RCRU43X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREJFTl9EQkVON19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjcgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkVOX0RCRU44X1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjggUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOOF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RCRU5fREJFTjhfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU44IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOOV9Qb3MgICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU45IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RCRU5fREJFTjlfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkVOX0RCRU45X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOOSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RCRU5fREJFTjEwX1BvcyAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMTAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4xMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREJFTl9EQkVOMTBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjEwIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4xMV9Qb3MgICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjExIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOMTFfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RCRU5fREJFTjExX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4xMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOMTJfUG9zICAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4xMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RCRU5fREJFTjEyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkVOX0RCRU4xMl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMTIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RCRU5fREJFTjEzX1BvcyAgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMTMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4xM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREJFTl9EQkVOMTNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjEzIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4xNF9Qb3MgICAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjE0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOMTRfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RCRU5fREJFTjE0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4xNCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOMTVfUG9zICAgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4xNSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RCRU5fREJFTjE1X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkVOX0RCRU4xNV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMTUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUwX01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UVFlQRV9UWVBFMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUxX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFRZUEVfVFlQRTFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFMl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRUWVBFX1RZUEUyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUzX01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UVFlQRV9UWVBFM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEU0X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFNF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFRZUEVfVFlQRTRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEU0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFNV9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEU1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRUWVBFX1RZUEU1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTZfUG9zICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFNiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEU2X01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UVFlQRV9UWVBFNl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEU3X1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTcgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFN19Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFRZUEVfVFlQRTdfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEU3IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFOF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEU4IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRThfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRUWVBFX1RZUEU4X1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFOCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTlfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFOSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEU5X01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UVFlQRV9UWVBFOV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUxMF9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTEwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFMTBfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFRZUEVfVFlQRTEwX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUxMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFMTFfUG9zICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUxMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTExX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRUWVBFX1RZUEUxMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMTEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTEyX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMTIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUxMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UVFlQRV9UWVBFMTJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTEyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUxM19Qb3MgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTEzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFMTNfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFRZUEVfVFlQRTEzX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUxMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFMTRfUG9zICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUxNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTE0X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRUWVBFX1RZUEUxNF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMTQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTE1X1BvcyAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMTUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUxNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UVFlQRV9UWVBFMTVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTE1IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4wX01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX0ZMSUVOMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4xX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9GTElFTjFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4xIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOMl9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4yIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fRkxJRU4yX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjNfUG9zICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4zX01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX0ZMSUVOM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU40X1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVONF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9GTElFTjRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU40IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVONV9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU41IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fRkxJRU41X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVONSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjZfUG9zICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVONiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU42X01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX0ZMSUVONl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU43X1BvcyAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjcgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVON19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9GTElFTjdfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU43IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOOF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU44IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjhfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fRkxJRU44X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOOCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjlfUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOOSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU45X01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX0ZMSUVOOV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjkgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4xMF9Qb3MgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjEwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOMTBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9GTElFTjEwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4xMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOMTFfUG9zICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4xMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjExX01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fRkxJRU4xMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMTEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjEyX1BvcyAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMTIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4xMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX0ZMSUVOMTJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjEyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4xM19Qb3MgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjEzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOMTNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9GTElFTjEzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4xMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOMTRfUG9zICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4xNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjE0X01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fRkxJRU4xNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMTQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjE1X1BvcyAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMTUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4xNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX0ZMSUVOMTVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjE1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4wX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9SSElFTjBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4wIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOMV9Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4xIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fUkhJRU4xX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjJfUG9zICAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4yX01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX1JISUVOMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4zX1BvcyAgICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOM19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9SSElFTjNfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4zIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX1JISUVONF9Qb3MgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU40IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fUkhJRU40X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVONCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjVfUG9zICAgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVONSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU41X01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX1JISUVONV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU42X1BvcyAgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX1JISUVONl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9SSElFTjZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU42IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX1JISUVON19Qb3MgICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU43IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjdfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fUkhJRU43X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVONyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjhfUG9zICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOOCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU44X01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX1JISUVOOF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjggTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU45X1BvcyAgICAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjkgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOOV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9SSElFTjlfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU45IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOMTBfUG9zICAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4xMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjEwX01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fUkhJRU4xMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMTAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjExX1BvcyAgICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMTEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4xMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX1JISUVOMTFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjExIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4xMl9Qb3MgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjEyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOMTJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9SSElFTjEyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4xMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOMTNfUG9zICAgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4xMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjEzX01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fUkhJRU4xM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMTMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjE0X1BvcyAgICAgICAgICAgKDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMTQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4xNF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX1JISUVOMTRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjE0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4xNV9Qb3MgICAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjE1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOMTVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9SSElFTjE1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4xNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UU1JDX0lOVFNSQzBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDMV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzFfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFNSQ19JTlRTUkMxX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzJfUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMyX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRTUkNfSU5UU1JDMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMzX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UU1JDX0lOVFNSQzNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDNF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkM0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzRfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFNSQ19JTlRTUkM0X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzVfUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkM1X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRTUkNfSU5UU1JDNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkM2X1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDNl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UU1JDX0lOVFNSQzZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkM2IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDN19Qb3MgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkM3IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzdfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFNSQ19JTlRTUkM3X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDNyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzhfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDOCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkM4X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRTUkNfSU5UU1JDOF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzggTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkM5X1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzkgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDOV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UU1JDX0lOVFNSQzlfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkM5IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDMTBfUG9zICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMxMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzEwX01zayAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFNSQ19JTlRTUkMxMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMTAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzExX1BvcyAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMTEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMxMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRTUkNfSU5UU1JDMTFfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzExIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMxMl9Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzEyIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDMTJfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UU1JDX0lOVFNSQzEyX1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMxMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDMTNfUG9zICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMxMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzEzX01zayAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFNSQ19JTlRTUkMxM19Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMTMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzE0X1BvcyAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMTQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMxNF9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRTUkNfSU5UU1JDMTRfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzE0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMxNV9Qb3MgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzE1IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDMTVfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UU1JDX0lOVFNSQzE1X1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMxNSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4wX01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1NNVEVOX1NNVEVOMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4xX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTVRFTl9TTVRFTjFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4xIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOMl9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4yIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU01URU5fU01URU4yX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjNfUG9zICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4zX01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1NNVEVOX1NNVEVOM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU01URU5fU01URU40X1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVONF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTVRFTl9TTVRFTjRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU40IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVONV9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU41IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU01URU5fU01URU41X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVONSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjZfUG9zICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVONiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fU01URU5fU01URU42X01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1NNVEVOX1NNVEVONl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU01URU5fU01URU43X1BvcyAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjcgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVON19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTVRFTl9TTVRFTjdfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU43IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOOF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU44IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjhfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU01URU5fU01URU44X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOOCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjlfUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOOSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fU01URU5fU01URU45X01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1NNVEVOX1NNVEVOOV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjkgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4xMF9Qb3MgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjEwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOMTBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTVRFTl9TTVRFTjEwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4xMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOMTFfUG9zICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4xMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjExX01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU01URU5fU01URU4xMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMTEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjEyX1BvcyAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMTIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4xMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX1NNVEVOX1NNVEVOMTJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjEyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4xM19Qb3MgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjEzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOMTNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTVRFTl9TTVRFTjEzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4xMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOMTRfUG9zICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4xNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjE0X01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU01URU5fU01URU4xNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMTQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjE1X1BvcyAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMTUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4xNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX1NNVEVOX1NNVEVOMTVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjE1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4wX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTEVXQ1RMX0hTUkVOMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4xX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU0xFV0NUTF9IU1JFTjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4xIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOMl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4yIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjJfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX1NMRVdDVExfSFNSRU4yX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjNfUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4zX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTEVXQ1RMX0hTUkVOM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU40X1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVONF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU0xFV0NUTF9IU1JFTjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU40IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVONV9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU41IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjVfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX1NMRVdDVExfSFNSRU41X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVONSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjZfUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVONiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU42X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTEVXQ1RMX0hTUkVONl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU43X1BvcyAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjcgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVON19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU0xFV0NUTF9IU1JFTjdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU43IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOOF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU44IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjhfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX1NMRVdDVExfSFNSRU44X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOOCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjlfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOOSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU45X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTEVXQ1RMX0hTUkVOOV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjkgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4xMF9Qb3MgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjEwIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOMTBfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU0xFV0NUTF9IU1JFTjEwX1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4xMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOMTFfUG9zICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4xMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjExX01zayAgICAgICAgICgweDF1bCA8PCBHUElPX1NMRVdDVExfSFNSRU4xMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMTEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjEyX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMTIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4xMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTEVXQ1RMX0hTUkVOMTJfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjEyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4xM19Qb3MgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjEzIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOMTNfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU0xFV0NUTF9IU1JFTjEzX1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4xMyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOMTRfUG9zICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4xNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjE0X01zayAgICAgICAgICgweDF1bCA8PCBHUElPX1NMRVdDVExfSFNSRU4xNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMTQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjE1X1BvcyAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMTUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4xNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTEVXQ1RMX0hTUkVOMTVfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjE1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMMF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwwIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDBfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fUFVTRUxfUFVTRUwwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDFfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwxX01zayAgICAgICAgICAgICgweDN1bCA8PCBHUElPX1BVU0VMX1BVU0VMMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwyX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMMl9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19QVVNFTF9QVVNFTDJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwyIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMM19Qb3MgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwzIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDNfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fUFVTRUxfUFVTRUwzX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDRfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMNCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUw0X01zayAgICAgICAgICAgICgweDN1bCA8PCBHUElPX1BVU0VMX1BVU0VMNF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUw1X1BvcyAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMNV9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19QVVNFTF9QVVNFTDVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUw1IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMNl9Qb3MgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUw2IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDZfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fUFVTRUxfUFVTRUw2X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMNiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDdfUG9zICAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMNyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUw3X01zayAgICAgICAgICAgICgweDN1bCA8PCBHUElPX1BVU0VMX1BVU0VMN19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDcgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUw4X1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDggUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMOF9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19QVVNFTF9QVVNFTDhfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUw4IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMOV9Qb3MgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUw5IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDlfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fUFVTRUxfUFVTRUw5X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMOSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDEwX1BvcyAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMTAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwxMF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBHUElPX1BVU0VMX1BVU0VMMTBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDEwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwxMV9Qb3MgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDExIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMMTFfTXNrICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19QVVNFTF9QVVNFTDExX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwxMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMMTJfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwxMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDEyX01zayAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fUFVTRUxfUFVTRUwxMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMTIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDEzX1BvcyAgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMTMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwxM19Nc2sgICAgICAgICAgICgweDN1bCA8PCBHUElPX1BVU0VMX1BVU0VMMTNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDEzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwxNF9Qb3MgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDE0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMMTRfTXNrICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19QVVNFTF9QVVNFTDE0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwxNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMMTVfUG9zICAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwxNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDE1X01zayAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fUFVTRUxfUFVTRUwxNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMTUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJDVEw6IERCQ0xLU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fREJDVExfREJDTEtTRUxfTXNrICAgICAgICAgICgweGZ1bCA8PCBHUElPX0RCQ1RMX0RCQ0xLU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCQ1RMOiBEQkNMS1NFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJDVExfREJDTEtTUkNfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCQ1RMOiBEQkNMS1NSQyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU1JDX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkNUTF9EQkNMS1NSQ19Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkNUTDogREJDTEtTUkMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RCQ1RMX0lDTEtPTl9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkNUTDogSUNMS09OIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9JQ0xLT05fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREJDVExfSUNMS09OX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJDVEw6IElDTEtPTiBNYXNrICAgICAgICAgICAgICovCisKKworLyoqQH0qLyAvKiBHUElPX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBHUElPIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX0dQSU9fUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2hkaXZfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvaGRpdl9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTc1MWM5Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2hkaXZfcmVnLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBoZGl2X3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBIRElWIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0hESVZfUkVHX0hfXworI2RlZmluZSBfX0hESVZfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIYXJkd2FyZSBEaXZpZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIEhESVYgSGFyZHdhcmUgRGl2aWRlcihIRElWKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBIRElWIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgSERJVl9UOjpESVZJREVORAorICAgICAqIE9mZnNldDogMHgwMCAgRGl2aWRlbmQgU291cmNlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8RElWSURFTkQgIHxEaXZpZGVuZCBTb3VyY2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGlzIGdpdmVuIHRoZSBkaXZpZGVuZCBvZiBkaXZpZGVyIGJlZm9yZSBjYWxjdWxhdGlvbiBzdGFydGluZy4KKyAgICAgKiBAdmFyIEhESVZfVDo6RElWSVNPUgorICAgICAqIE9mZnNldDogMHgwNCAgRGl2aXNvciBTb3VyY2UgUmVzaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxESVZJU09SICAgfERpdmlzb3IgU291cmNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyByZWdpc3RlciBpcyBnaXZlbiB0aGUgZGl2aXNvciBvZiBkaXZpZGVyIGJlZm9yZSBjYWxjdWxhdGlvbiBzdGFydHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiB0aGlzIHJlZ2lzdGVyIGlzIHdyaXR0ZW4sIGhhcmR3YXJlIGRpdmlkZXIgd2lsbCBzdGFydCBjYWxjdWxhdGUuCisgICAgICogQHZhciBIRElWX1Q6OkRJVlFVTworICAgICAqIE9mZnNldDogMHgwOCAgUXVvdGllbnQgUmVzdWx0IFJlc2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8UVVPVElFTlQgIHxRdW90aWVudCBSZXN1bHQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGhvbGRzIHRoZSBxdW90aWVudCByZXN1bHQgb2YgZGl2aWRlciBhZnRlciBjYWxjdWxhdGlvbiBjb21wbGV0ZS4KKyAgICAgKiBAdmFyIEhESVZfVDo6RElWUkVNCisgICAgICogT2Zmc2V0OiAweDBDICBSZW1haW5kZXIgUmVzdWx0IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8UkVNQUlOREVSIHxSZW1haW5kZXIgUmVzdWx0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlbWFpbmRlciBvZiBoYXJkd2FyZSBkaXZpZGVyIGlzIDE2LWJpdCBzaWduIGludGVnZXIgKFJFTUFJTkRFUlsxNTowXSksIHdoaWNoIGhvbGRzIHRoZSByZW1haW5kZXIgcmVzdWx0IG9mIGRpdmlkZXIgYWZ0ZXIgY2FsY3VsYXRpb24gY29tcGxldGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlbWFpbmRlciBvZiBoYXJkd2FyZSBkaXZpZGVyIHdpdGggc2lnbiBleHRlbnNpb24gKFJFTUFJTkRFUlszMToxNl0pIHRvIDMyLWJpdCBpbnRlZ2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgaG9sZHMgdGhlIHJlbWFpbmRlciByZXN1bHQgb2YgZGl2aWRlciBhZnRlciBjYWxjdWxhdGlvbiBjb21wbGV0ZS4KKyAgICAgKiBAdmFyIEhESVZfVDo6RElWU1RTCisgICAgICogT2Zmc2V0OiAweDEwICBEaXZpZGVyIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEZJTklTSCAgICB8RGl2aXNpb24gRmluaXNoIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVW5kZXIgQ2FsY3VsYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhbGN1bGF0aW9uIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmbGFnIHdpbGwgYmVjb21lIGxvdyB3aGVuIHRoZSBkaXZpZGVyIGlzIGluIGNhbGN1bGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmbGFnIHdpbGwgZ28gYmFjayB0byBoaWdoIG9uY2UgdGhlIGNhbGN1bGF0aW9uIGZpbmlzaGVkLgorICAgICAqIHxbMV0gICAgIHxESVYwICAgICAgfERpdmlzb3IgWmVybyBXYXJuaW5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBkaXZpc29yIGlzIG5vdCAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgZGl2aXNvciBpcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBESVYwIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSBkaXZpZGUtYnktemVybyBzaXR1YXRpb24gYW5kIHVwZGF0ZWQgd2hlbmV2ZXIgRElWSVNPUiBpcyB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyByZWdpc3RlciBpcyByZWFkIG9ubHkuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBESVZJREVORDsgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gRGl2aWRlbmQgU291cmNlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRElWSVNPUjsgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIERpdmlzb3IgU291cmNlIFJlc2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERJVlFVTzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBRdW90aWVudCBSZXN1bHQgUmVzaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBESVZSRU07ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gUmVtYWluZGVyIFJlc3VsdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgRElWU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIERpdmlkZXIgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBIRElWX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIEhESVZfQ09OU1QgSERJViBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBIRElWIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgSERJVl9ESVZJREVORF9ESVZJREVORF9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEhESVZfVDo6RElWSURFTkQ6IERJVklERU5EIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEhESVZfRElWSURFTkRfRElWSURFTkRfTXNrICAgICAgICgweGZmZmZmZmZmdWwgPDwgSERJVl9ESVZJREVORF9ESVZJREVORF9Qb3MpICAgICAgLyohPCBIRElWX1Q6OkRJVklERU5EOiBESVZJREVORCBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEhESVZfRElWSVNPUl9ESVZJU09SX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBIRElWX1Q6OkRJVklTT1I6IERJVklTT1IgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBIRElWX0RJVklTT1JfRElWSVNPUl9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgSERJVl9ESVZJU09SX0RJVklTT1JfUG9zKSAgICAgICAgICAgIC8qITwgSERJVl9UOjpESVZJU09SOiBESVZJU09SIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBIRElWX0RJVlFVT19RVU9USUVOVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSERJVl9UOjpESVZRVU86IFFVT1RJRU5UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgSERJVl9ESVZRVU9fUVVPVElFTlRfTXNrICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBIRElWX0RJVlFVT19RVU9USUVOVF9Qb3MpICAgICAgICAvKiE8IEhESVZfVDo6RElWUVVPOiBRVU9USUVOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgSERJVl9ESVZSRU1fUkVNQUlOREVSX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEhESVZfVDo6RElWUkVNOiBSRU1BSU5ERVIgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEhESVZfRElWUkVNX1JFTUFJTkRFUl9Nc2sgICAgICAgICgweGZmZmZmZmZmdWwgPDwgSERJVl9ESVZSRU1fUkVNQUlOREVSX1BvcykgICAgICAgLyohPCBIRElWX1Q6OkRJVlJFTTogUkVNQUlOREVSIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEhESVZfRElWU1RTX0ZJTklTSF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBIRElWX1Q6OkRJVlNUUzogRklOSVNIIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBIRElWX0RJVlNUU19GSU5JU0hfTXNrICAgICAgICAgICAoMHgxdWwgPDwgSERJVl9ESVZTVFNfRklOSVNIX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSERJVl9UOjpESVZTVFM6IEZJTklTSCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBIRElWX0RJVlNUU19ESVYwX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSERJVl9UOjpESVZTVFM6IERJVjAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSERJVl9ESVZTVFNfRElWMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEhESVZfRElWU1RTX0RJVjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEhESVZfVDo6RElWU1RTOiBESVYwIE1hc2sgICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogSERJVl9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgSERJViByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisjZW5kaWYgLyogX19IRElWX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9pMmNfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvaTJjX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxODc5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvaTJjX3JlZy5oCkBAIC0wLDAgKzEsNzE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgaTJjX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBJMkMgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSTJDX1JFR19IX18KKyNkZWZpbmUgX19JMkNfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbnRlci1JQyBCdXMgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIEkyQyBJbnRlci1JQyBCdXMgQ29udHJvbGxlcihJMkMpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIEkyQyBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIEkyQ19UOjpDVEwwCisgICAgICogT2Zmc2V0OiAweDAwICBJMkMgQ29udHJvbCBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzJdICAgICB8QUEgICAgICAgIHxBc3NlcnQgQWNrbm93bGVkZ2UgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gQUEgPTEgcHJpb3IgdG8gYWRkcmVzcyBvciBkYXRhIGlzIHJlY2VpdmVkLCBhbiBhY2tub3dsZWRnZWQgKGxvdyBsZXZlbCB0byBTREEpIHdpbGwgYmUgcmV0dXJuZWQgZHVyaW5nIHRoZSBhY2tub3dsZWRnZSBjbG9jayBwdWxzZSBvbiB0aGUgU0NMIGxpbmUgd2hlbiAxLikgQSBzbGF2ZSBpcyBhY2tub3dsZWRnaW5nIHRoZSBhZGRyZXNzIHNlbnQgZnJvbSBtYXN0ZXIsIDIuKSBUaGUgcmVjZWl2ZXIgZGV2aWNlcyBhcmUgYWNrbm93bGVkZ2luZyB0aGUgZGF0YSBzZW50IGJ5IHRyYW5zbWl0dGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBBQT0wIHByaW9yIHRvIGFkZHJlc3Mgb3IgZGF0YSByZWNlaXZlZCwgYSBOb3QgYWNrbm93bGVkZ2VkIChoaWdoIGxldmVsIHRvIFNEQSkgd2lsbCBiZSByZXR1cm5lZCBkdXJpbmcgdGhlIGFja25vd2xlZGdlIGNsb2NrIHB1bHNlIG9uIHRoZSBTQ0wgbGluZQorICAgICAqIHxbM10gICAgIHxTSSAgICAgICAgfEkyQyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gYSBuZXcgSTJDIHN0YXRlIGlzIHByZXNlbnQgaW4gdGhlIEkyQ19TVEFUVVMgcmVnaXN0ZXIsIHRoZSBTSSBmbGFnIGlzIHNldCBieSBoYXJkd2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIGJpdCBJTlRFTiAoSTJDX0NUTCBbN10pIGlzIHNldCwgdGhlIEkyQyBpbnRlcnJ1cHQgaXMgcmVxdWVzdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0kgbXVzdCBiZSBjbGVhcmVkIGJ5IHNvZnR3YXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2xlYXIgU0kgYnkgd3JpdGluZyAxIHRvIHRoaXMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBBQ0tNRU4gaXMgc2V0IGluIHNsYXZlIHJlYWQgbW9kZSwgdGhlIFNJIGZsYWcgaXMgc2V0IGluIDh0aCBjbG9jayBwZXJpb2QgZm9yIHVzZXIgdG8gY29uZmlybSB0aGUgYWNrbm93bGVkZ2UgYml0IGFuZCA5dGggY2xvY2sgcGVyaW9kIGZvciB1c2VyIHRvIHJlYWQgdGhlIGRhdGEgaW4gdGhlIGRhdGEgYnVmZmVyLgorICAgICAqIHxbNF0gICAgIHxTVE8gICAgICAgfEkyQyBTVE9QIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBNYXN0ZXIgbW9kZSwgc2V0dGluZyBTVE8gdG8gdHJhbnNtaXQgYSBTVE9QIGNvbmRpdGlvbiB0byBidXMgdGhlbiBJMkMgY29udHJvbGxlciB3aWxsIGNoZWNrIHRoZSBidXMgY29uZGl0aW9uIGlmIGEgU1RPUCBjb25kaXRpb24gaXMgZGV0ZWN0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgaGFyZHdhcmUgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzVdICAgICB8U1RBICAgICAgIHxJMkMgU1RBUlQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldHRpbmcgU1RBIHRvIGxvZ2ljIDEgdG8gZW50ZXIgTWFzdGVyIG1vZGUsIHRoZSBJMkMgaGFyZHdhcmUgc2VuZHMgYSBTVEFSVCBvciByZXBlYXQgU1RBUlQgY29uZGl0aW9uIHRvIGJ1cyB3aGVuIHRoZSBidXMgaXMgZnJlZS4KKyAgICAgKiB8WzZdICAgICB8STJDRU4gICAgIHxJMkMgQ29udHJvbGxlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRvIGVuYWJsZSBJMkMgc2VyaWFsIGZ1bmN0aW9uIGNvbnRyb2xsZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEkyQ0VOPTEgdGhlIEkyQyBzZXJpYWwgZnVuY3Rpb24gZW5hYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIG11bHRpLWZ1bmN0aW9uIHBpbiBmdW5jdGlvbiBtdXN0IHNldCB0byBTREEsIGFuZCBTQ0wgb2YgSTJDIGZ1bmN0aW9uIGZpcnN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMkMgY29udHJvbGxlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJDIGNvbnRyb2xsZXIgRW5hYmxlZC4KKyAgICAgKiB8WzddICAgICB8SU5URU4gICAgIHxFbmFibGUgSW50ZXJydXB0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEkyQyBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyQyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiBAdmFyIEkyQ19UOjpBRERSMAorICAgICAqIE9mZnNldDogMHgwNCAgSTJDIFNsYXZlIEFkZHJlc3MgUmVnaXN0ZXIwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8R0MgICAgICAgIHxHZW5lcmFsIENhbGwgRnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR2VuZXJhbCBDYWxsIEZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHZW5lcmFsIENhbGwgRnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzEwOjFdICB8QUREUiAgICAgIHxJMkMgQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb250ZW50IG9mIHRoaXMgcmVnaXN0ZXIgaXMgaXJyZWxldmFudCB3aGVuIEkyQyBpcyBpbiBNYXN0ZXIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHRoZSBzbGF2ZSBtb2RlLCB0aGUgc2V2ZW4gbW9zdCBzaWduaWZpY2FudCBiaXRzIG11c3QgYmUgbG9hZGVkIHdpdGggdGhlIGNoaXAncyBvd24gYWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBJMkMgaGFyZHdhcmUgd2lsbCByZWFjdCBpZiBlaXRoZXIgb2YgdGhlIGFkZHJlc3MgaXMgbWF0Y2hlZC4KKyAgICAgKiBAdmFyIEkyQ19UOjpEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MDggIEkyQyBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8REFUICAgICAgIHxJMkMgRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJpdCBbNzowXSBpcyBsb2NhdGVkIHdpdGggdGhlIDgtYml0IHRyYW5zZmVycmVkL3JlY2VpdmVkIGRhdGEgb2YgSTJDIHNlcmlhbCBwb3J0LgorICAgICAqIEB2YXIgSTJDX1Q6OlNUQVRVUzAKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIEkyQyBTdGF0dXMgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfFNUQVRVUyAgICB8STJDIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB0aHJlZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGFyZSBhbHdheXMgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmaXZlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBjb250YWluIHRoZSBzdGF0dXMgY29kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXJlIGFyZSAyOCBwb3NzaWJsZSBzdGF0dXMgY29kZXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBjb250ZW50IG9mIEkyQ19TVEFUVVMwIGlzIEY4SCwgbm8gc2VyaWFsIGludGVycnVwdCBpcyByZXF1ZXN0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgSTJDX1NUQVRVUzAgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGVmaW5lZCBJMkMgc3RhdGVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBlYWNoIG9mIHRoZXNlIHN0YXRlcyBpcyBlbnRlcmVkLCBhIHN0YXR1cyBpbnRlcnJ1cHQgaXMgcmVxdWVzdGVkIChTSSA9IDEpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QSB2YWxpZCBzdGF0dXMgY29kZSBpcyBwcmVzZW50IGluIEkyQ19TVEFUVVMwIG9uZSBjeWNsZSBhZnRlciBTSSBpcyBzZXQgYnkgaGFyZHdhcmUgYW5kIGlzIHN0aWxsIHByZXNlbnQgb25lIGN5Y2xlIGFmdGVyIFNJIGhhcyBiZWVuIHJlc2V0IGJ5IHNvZnR3YXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gYWRkaXRpb24sIHN0YXRlcyAwMEggc3RhbmRzIGZvciBhIEJ1cyBFcnJvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgQnVzIEVycm9yIG9jY3VycyB3aGVuIGEgU1RBUlQgb3IgU1RPUCBjb25kaXRpb24gaXMgcHJlc2VudCBhdCBhbiBpbGxlZ2FsIHBvc2l0aW9uIGluIHRoZSBmb3JtYXRpb24gZnJhbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFeGFtcGxlIG9mIGlsbGVnYWwgcG9zaXRpb24gYXJlIGR1cmluZyB0aGUgc2VyaWFsIHRyYW5zZmVyIG9mIGFuIGFkZHJlc3MgYnl0ZSwgYSBkYXRhIGJ5dGUgb3IgYW4gYWNrbm93bGVkZ2UgYml0LgorICAgICAqIEB2YXIgSTJDX1Q6OkNMS0RJVgorICAgICAqIE9mZnNldDogMHgxMCAgSTJDIENsb2NrIERpdmlkZWQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbOTowXSAgIHxESVZJREVSICAgfEkyQyBDbG9jayBEaXZpZGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGVzIHRoZSBJMkMgY2xvY2sgcmF0ZTogRGF0YSBCYXVkIFJhdGUgb2YgSTJDID0gKHN5c3RlbSBjbG9jaykgLyAoNHggKEkyQ19DTEtESVYrMSkpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBtaW5pbXVtIHZhbHVlIG9mIEkyQ19DTEtESVYgaXMgNC4KKyAgICAgKiBAdmFyIEkyQ19UOjpUT0NUTAorICAgICAqIE9mZnNldDogMHgxNCAgSTJDIFRpbWUtb3V0IENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxUT0lGICAgICAgfFRpbWUtb3V0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBJMkMgdGltZS1vdXQgaGFwcGVuZWQgYW5kIGl0IGNhbiBpbnRlcnJ1cHQgQ1BVIGlmIEkyQyBpbnRlcnJ1cHQgZW5hYmxlIGJpdCAoSU5URU4pIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbMV0gICAgIHxUT0NESVY0ICAgfFRpbWUtb3V0IENvdW50ZXIgSW5wdXQgQ2xvY2sgRGl2aWRlZCBieSA0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBFbmFibGVkLCBUaGUgdGltZS1vdXQgcGVyaW9kIGlzIGV4dGVuZCA0IHRpbWVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lLW91dCBwZXJpb2QgaXMgZXh0ZW5kIDQgdGltZXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWUtb3V0IHBlcmlvZCBpcyBleHRlbmQgNCB0aW1lcyBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxUT0NFTiAgICAgfFRpbWUtb3V0IENvdW50ZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gRW5hYmxlZCwgdGhlIDE0LWJpdCB0aW1lLW91dCBjb3VudGVyIHdpbGwgc3RhcnQgY291bnRpbmcgd2hlbiBTSSBpcyBjbGVhcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldHRpbmcgZmxhZyBTSSB0byB1MjAxODEnIHdpbGwgcmVzZXQgY291bnRlciBhbmQgcmUtc3RhcnQgdXAgY291bnRpbmcgYWZ0ZXIgU0kgaXMgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZS1vdXQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZS1vdXQgY291bnRlciBFbmFibGVkLgorICAgICAqIEB2YXIgSTJDX1Q6OkFERFIxCisgICAgICogT2Zmc2V0OiAweDE4ICBJMkMgU2xhdmUgQWRkcmVzcyBSZWdpc3RlcjEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxHQyAgICAgICAgfEdlbmVyYWwgQ2FsbCBGdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHZW5lcmFsIENhbGwgRnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdlbmVyYWwgQ2FsbCBGdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMTA6MV0gIHxBRERSICAgICAgfEkyQyBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvbnRlbnQgb2YgdGhpcyByZWdpc3RlciBpcyBpcnJlbGV2YW50IHdoZW4gSTJDIGlzIGluIE1hc3RlciBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gdGhlIHNsYXZlIG1vZGUsIHRoZSBzZXZlbiBtb3N0IHNpZ25pZmljYW50IGJpdHMgbXVzdCBiZSBsb2FkZWQgd2l0aCB0aGUgY2hpcCdzIG93biBhZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEkyQyBoYXJkd2FyZSB3aWxsIHJlYWN0IGlmIGVpdGhlciBvZiB0aGUgYWRkcmVzcyBpcyBtYXRjaGVkLgorICAgICAqIEB2YXIgSTJDX1Q6OkFERFIyCisgICAgICogT2Zmc2V0OiAweDFDICBJMkMgU2xhdmUgQWRkcmVzcyBSZWdpc3RlcjIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxHQyAgICAgICAgfEdlbmVyYWwgQ2FsbCBGdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHZW5lcmFsIENhbGwgRnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdlbmVyYWwgQ2FsbCBGdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMTA6MV0gIHxBRERSICAgICAgfEkyQyBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvbnRlbnQgb2YgdGhpcyByZWdpc3RlciBpcyBpcnJlbGV2YW50IHdoZW4gSTJDIGlzIGluIE1hc3RlciBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gdGhlIHNsYXZlIG1vZGUsIHRoZSBzZXZlbiBtb3N0IHNpZ25pZmljYW50IGJpdHMgbXVzdCBiZSBsb2FkZWQgd2l0aCB0aGUgY2hpcCdzIG93biBhZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEkyQyBoYXJkd2FyZSB3aWxsIHJlYWN0IGlmIGVpdGhlciBvZiB0aGUgYWRkcmVzcyBpcyBtYXRjaGVkLgorICAgICAqIEB2YXIgSTJDX1Q6OkFERFIzCisgICAgICogT2Zmc2V0OiAweDIwICBJMkMgU2xhdmUgQWRkcmVzcyBSZWdpc3RlcjMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxHQyAgICAgICAgfEdlbmVyYWwgQ2FsbCBGdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHZW5lcmFsIENhbGwgRnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdlbmVyYWwgQ2FsbCBGdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMTA6MV0gIHxBRERSICAgICAgfEkyQyBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvbnRlbnQgb2YgdGhpcyByZWdpc3RlciBpcyBpcnJlbGV2YW50IHdoZW4gSTJDIGlzIGluIE1hc3RlciBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gdGhlIHNsYXZlIG1vZGUsIHRoZSBzZXZlbiBtb3N0IHNpZ25pZmljYW50IGJpdHMgbXVzdCBiZSBsb2FkZWQgd2l0aCB0aGUgY2hpcCdzIG93biBhZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEkyQyBoYXJkd2FyZSB3aWxsIHJlYWN0IGlmIGVpdGhlciBvZiB0aGUgYWRkcmVzcyBpcyBtYXRjaGVkLgorICAgICAqIEB2YXIgSTJDX1Q6OkFERFJNU0swCisgICAgICogT2Zmc2V0OiAweDI0ICBJMkMgU2xhdmUgQWRkcmVzcyBNYXNrIFJlZ2lzdGVyMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMDoxXSAgfEFERFJNU0sgICB8STJDIEFkZHJlc3MgTWFzaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNYXNrIERpc2FibGVkICh0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyByZWdpc3RlciBiaXQgc2hvdWxkIGJlIGV4YWN0IHRoZSBzYW1lIGFzIGFkZHJlc3MgcmVnaXN0ZXIuKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTWFzayBFbmFibGVkICh0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyBhZGRyZXNzIGJpdCBpcyBkb24ndCBjYXJlLikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8STJDIGJ1cyBjb250cm9sbGVycyBzdXBwb3J0IG11bHRpcGxlIGFkZHJlc3MgcmVjb2duaXRpb24gd2l0aCBmb3VyIGFkZHJlc3MgbWFzayByZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGJpdCBpbiB0aGUgYWRkcmVzcyBtYXNrIHJlZ2lzdGVyIGlzIHNldCB0byBvbmUsIGl0IG1lYW5zIHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIGFkZHJlc3MgYml0IGlzIGRvbid0LWNhcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgYml0IGlzIHNldCB0byB6ZXJvLCB0aGF0IG1lYW5zIHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGJpdCBzaG91bGQgYmUgZXhhY3QgdGhlIHNhbWUgYXMgYWRkcmVzcyByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgd2FrZS11cCBmdW5jdGlvbiBjYW4gbm90IHVzZSBhZGRyZXNzIG1hc2suCisgICAgICogQHZhciBJMkNfVDo6QUREUk1TSzEKKyAgICAgKiBPZmZzZXQ6IDB4MjggIEkyQyBTbGF2ZSBBZGRyZXNzIE1hc2sgUmVnaXN0ZXIxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzEwOjFdICB8QUREUk1TSyAgIHxJMkMgQWRkcmVzcyBNYXNrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE1hc2sgRGlzYWJsZWQgKHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGJpdCBzaG91bGQgYmUgZXhhY3QgdGhlIHNhbWUgYXMgYWRkcmVzcyByZWdpc3Rlci4pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBNYXNrIEVuYWJsZWQgKHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIGFkZHJlc3MgYml0IGlzIGRvbid0IGNhcmUuKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJMkMgYnVzIGNvbnRyb2xsZXJzIHN1cHBvcnQgbXVsdGlwbGUgYWRkcmVzcyByZWNvZ25pdGlvbiB3aXRoIGZvdXIgYWRkcmVzcyBtYXNrIHJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgYml0IGluIHRoZSBhZGRyZXNzIG1hc2sgcmVnaXN0ZXIgaXMgc2V0IHRvIG9uZSwgaXQgbWVhbnMgdGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgYWRkcmVzcyBiaXQgaXMgZG9uJ3QtY2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBiaXQgaXMgc2V0IHRvIHplcm8sIHRoYXQgbWVhbnMgdGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgYml0IHNob3VsZCBiZSBleGFjdCB0aGUgc2FtZSBhcyBhZGRyZXNzIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSB3YWtlLXVwIGZ1bmN0aW9uIGNhbiBub3QgdXNlIGFkZHJlc3MgbWFzay4KKyAgICAgKiBAdmFyIEkyQ19UOjpBRERSTVNLMgorICAgICAqIE9mZnNldDogMHgyQyAgSTJDIFNsYXZlIEFkZHJlc3MgTWFzayBSZWdpc3RlcjIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTA6MV0gIHxBRERSTVNLICAgfEkyQyBBZGRyZXNzIE1hc2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWFzayBEaXNhYmxlZCAodGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgYml0IHNob3VsZCBiZSBleGFjdCB0aGUgc2FtZSBhcyBhZGRyZXNzIHJlZ2lzdGVyLikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE1hc2sgRW5hYmxlZCAodGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgYWRkcmVzcyBiaXQgaXMgZG9uJ3QgY2FyZS4pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEkyQyBidXMgY29udHJvbGxlcnMgc3VwcG9ydCBtdWx0aXBsZSBhZGRyZXNzIHJlY29nbml0aW9uIHdpdGggZm91ciBhZGRyZXNzIG1hc2sgcmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBiaXQgaW4gdGhlIGFkZHJlc3MgbWFzayByZWdpc3RlciBpcyBzZXQgdG8gb25lLCBpdCBtZWFucyB0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyBhZGRyZXNzIGJpdCBpcyBkb24ndC1jYXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGJpdCBpcyBzZXQgdG8gemVybywgdGhhdCBtZWFucyB0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyByZWdpc3RlciBiaXQgc2hvdWxkIGJlIGV4YWN0IHRoZSBzYW1lIGFzIGFkZHJlc3MgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIHdha2UtdXAgZnVuY3Rpb24gY2FuIG5vdCB1c2UgYWRkcmVzcyBtYXNrLgorICAgICAqIEB2YXIgSTJDX1Q6OkFERFJNU0szCisgICAgICogT2Zmc2V0OiAweDMwICBJMkMgU2xhdmUgQWRkcmVzcyBNYXNrIFJlZ2lzdGVyMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMDoxXSAgfEFERFJNU0sgICB8STJDIEFkZHJlc3MgTWFzaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNYXNrIERpc2FibGVkICh0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyByZWdpc3RlciBiaXQgc2hvdWxkIGJlIGV4YWN0IHRoZSBzYW1lIGFzIGFkZHJlc3MgcmVnaXN0ZXIuKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTWFzayBFbmFibGVkICh0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyBhZGRyZXNzIGJpdCBpcyBkb24ndCBjYXJlLikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8STJDIGJ1cyBjb250cm9sbGVycyBzdXBwb3J0IG11bHRpcGxlIGFkZHJlc3MgcmVjb2duaXRpb24gd2l0aCBmb3VyIGFkZHJlc3MgbWFzayByZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGJpdCBpbiB0aGUgYWRkcmVzcyBtYXNrIHJlZ2lzdGVyIGlzIHNldCB0byBvbmUsIGl0IG1lYW5zIHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIGFkZHJlc3MgYml0IGlzIGRvbid0LWNhcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgYml0IGlzIHNldCB0byB6ZXJvLCB0aGF0IG1lYW5zIHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGJpdCBzaG91bGQgYmUgZXhhY3QgdGhlIHNhbWUgYXMgYWRkcmVzcyByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgd2FrZS11cCBmdW5jdGlvbiBjYW4gbm90IHVzZSBhZGRyZXNzIG1hc2suCisgICAgICogQHZhciBJMkNfVDo6V0tDVEwKKyAgICAgKiBPZmZzZXQ6IDB4M0MgIEkyQyBXYWtlLXVwIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxXS0VOICAgICAgfEkyQyBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJDIHdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MT0gSTJDIHdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzddICAgICB8TkhEQlVTRU4gIHxJMkMgTm8gSG9sZCBCVVMgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMkMgZG9uJ3QgaG9sZCBidXMgYWZ0ZXIgd2FrZS11cCBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDE9IEkyQyBkb24ndCBob2xkIGJ1cyBhZnRlciB3YWtlLXVwIGVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJMkMgY29udHJvbGxlciBjb3VsZCByZXNwb25zZSB3aGVuIFdLSUYgZXZlbnQgaXMgbm90IGNsZWFyLCBpdCBtYXkgY2F1c2UgZXJyb3IgZGF0YSB0cmFuc21pdHRlZCBvciByZWNlaXZlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIGRhdGEgdHJhbnNtaXR0ZWQgb3IgcmVjZWl2ZWQgd2hlbiBXS0lGIGV2ZW50IGlzIG5vdCBjbGVhciwgdXNlciBtdXN0IHJlc2V0IEkyQyBjb250cm9sbGVyIGFuZCBleGVjdXRlIHRoZSBvcmlnaW5hbCBvcGVyYXRpb24gYWdhaW4uCisgICAgICogQHZhciBJMkNfVDo6V0tTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NDAgIEkyQyBXYWtlLXVwIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdLSUYgICAgICB8STJDIFdha2UtdXAgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gY2hpcCBpcyB3b2tlbiB1cCBmcm9tIFBvd2VyLWRvd24gbW9kZSBieSBJMkMsIHRoaXMgYml0IGlzIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxXSAgICAgfFdLQUtET05FICB8V2FrZXVwIEFkZHJlc3MgRnJhbWUgQWNrbm93bGVkZ2UgQml0IERvbmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIEFDSyBiaXQgY3ljbGUgb2YgYWRkcmVzcyBtYXRjaCBmcmFtZSBpc24ndCBkb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgQUNLIGJpdCBjeWNsZSBvZiBhZGRyZXNzIG1hdGNoIGZyYW1lIGlzIGRvbmUgaW4gcG93ZXItZG93bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4ndCByZWxlYXNlIFdLSUYuIFNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbMl0gICAgIHxXUlNUU1dLICAgfFJlYWQvV3JpdGUgU3RhdHVzIEJpdCBpbiBBZGRyZXNzIFdha2V1cCBGcmFtZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXcml0ZSBjb21tYW5kIGJlIHJlY29yZCBvbiB0aGUgYWRkcmVzcyBtYXRjaCB3YWtldXAgZnJhbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlYWQgY29tbWFuZCBiZSByZWNvcmQgb24gdGhlIGFkZHJlc3MgbWF0Y2ggd2FrZXVwIGZyYW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCB3aGVuIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIFdLQUtET05FIGJpdC4KKyAgICAgKiBAdmFyIEkyQ19UOjpDVEwxCisgICAgICogT2Zmc2V0OiAweDQ0ICBJMkMgQ29udHJvbCBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8VFhQRE1BRU4gIHxQRE1BIFRyYW5zbWl0IENoYW5uZWwgQXZhaWxhYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IFBETUEgZnVuY3Rpb24gZGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgUERNQSBmdW5jdGlvbiBlbmFibGUuCisgICAgICogfFsxXSAgICAgfFJYUERNQUVOICB8UERNQSBSZWNlaXZlIENoYW5uZWwgQXZhaWxhYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgUERNQSBmdW5jdGlvbiBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIFBETUEgZnVuY3Rpb24gZW5hYmxlLgorICAgICAqIHxbMl0gICAgIHxQRE1BUlNUICAgfFBETUEgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCB0aGUgSTJDIHJlcXVlc3QgdG8gUERNQS4gVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzhdICAgICB8UERNQVNUUiAgIHxQRE1BIFN0cmV0Y2ggQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEkyQyBzZW5kIFNUT1AgYXV0b21hdGljYWxseSBhZnRlciBQRE1BIHRyYW5zZmVyIGRvbmUuIChvbmx5IG1hc3RlciBUWCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJDIFNDTCBidXMgaXMgc3RyZXRjaGVkIGJ5IGhhcmR3YXJlIGFmdGVyIFBETUEgdHJhbnNmZXIgZG9uZSBpZiB0aGUgU0kgaXMgbm90IGNsZWFyZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwob25seSBtYXN0ZXIgVFgpCisgICAgICogfFs5XSAgICAgfEFERFIxMEVOICB8QWRkcmVzcyAxMC1iaXQgRnVuY3Rpb24gRW5hYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFkZHJlc3MgbWF0Y2ggMTAtYml0IGZ1bmN0aW9uIGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBZGRyZXNzIG1hdGNoIDEwLWJpdCBmdW5jdGlvbiBpcyBlbmFibGVkLgorICAgICAqIEB2YXIgSTJDX1Q6OlNUQVRVUzEKKyAgICAgKiBPZmZzZXQ6IDB4NDggIEkyQyBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEFETUFUMCAgICB8STJDIEFkZHJlc3MgMCBNYXRjaCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGFkZHJlc3MgMCBpcyBtYXRjaGVkLCBoYXJkd2FyZSB3aWxsIGluZm9ybSB3aGljaCBhZGRyZXNzIHVzZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIHNldCB0byAxLCBhbmQgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxXSAgICAgfEFETUFUMSAgICB8STJDIEFkZHJlc3MgMSBNYXRjaCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGFkZHJlc3MgMSBpcyBtYXRjaGVkLCBoYXJkd2FyZSB3aWxsIGluZm9ybSB3aGljaCBhZGRyZXNzIHVzZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIHNldCB0byAxLCBhbmQgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsyXSAgICAgfEFETUFUMiAgICB8STJDIEFkZHJlc3MgMiBNYXRjaCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGFkZHJlc3MgMiBpcyBtYXRjaGVkLCBoYXJkd2FyZSB3aWxsIGluZm9ybSB3aGljaCBhZGRyZXNzIHVzZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIHNldCB0byAxLCBhbmQgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFszXSAgICAgfEFETUFUMyAgICB8STJDIEFkZHJlc3MgMyBNYXRjaCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGFkZHJlc3MgMyBpcyBtYXRjaGVkLCBoYXJkd2FyZSB3aWxsIGluZm9ybSB3aGljaCBhZGRyZXNzIHVzZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIHNldCB0byAxLCBhbmQgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFs4XSAgICAgfE9OQlVTWSAgICB8T24gQnVzIEJ1c3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZXMgdGhhdCBhIGNvbW11bmljYXRpb24gaXMgaW4gcHJvZ3Jlc3Mgb24gdGhlIGJ1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGEgU1RBUlQgY29uZGl0aW9uIGlzIGRldGVjdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCBieSBoYXJkd2FyZSB3aGVuIGEgU1RPUCBjb25kaXRpb24gaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBidXMgaXMgSURMRSAoYm90aCBTQ0xLIGFuZCBTREEgSGlnaCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBidXMgaXMgYnVzeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOlRoaXMgYml0IGlzIHJlYWQgb25seS4KKyAgICAgKiBAdmFyIEkyQ19UOjpUTUNUTAorICAgICAqIE9mZnNldDogMHg0QyAgSTJDIFRpbWluZyBDb25maWd1cmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs4OjBdICAgfFNUQ1RMICAgICB8U2V0dXAgVGltZSBDb25maWd1cmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIGRlbGF5IHRpbWluZyBiZXR3ZWVuIFNEQSBmYWxsaW5nIGVkZ2UgYW5kIFNDTCByaXNpbmcgZWRnZSBpbiB0cmFuc21pc3Npb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGVsYXkgc2V0dXAgdGltZSBpcyBudW1iZXJzIG9mIHBlcmlwaGVyYWwgY2xvY2sgPSBTVENUTCB4IFBDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogU2V0dXAgdGltZSBzZXR0aW5nIHNob3VsZCBub3QgbWFrZSBTQ0wgb3V0cHV0IGxlc3MgdGhhbiB0aHJlZSBQQ0xLcy4KKyAgICAgKiB8WzI0OjE2XSB8SFRDVEwgICAgIHxIb2xkIFRpbWUgQ29uZmlndXJlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGRlbGF5IHRpbWluZyBiZXR3ZWVuIFNDTCBmYWxsaW5nIGVkZ2UgYW5kIFNEQSByaXNpbmcgZWRnZSBpbiB0cmFuc21pc3Npb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGVsYXkgaG9sZCB0aW1lIGlzIG51bWJlcnMgb2YgcGVyaXBoZXJhbCBjbG9jayA9IEhUQ1RMIHggUENMSy4KKyAgICAgKiBAdmFyIEkyQ19UOjpCVVNDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NTAgIEkyQyBCdXMgTWFuYWdlbWVudCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QUNLTUVOICAgIHxBY2tub3dsZWRnZSBDb250cm9sIGJ5IE1hbnVhbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG9yZGVyIHRvIGFsbG93IEFDSyBjb250cm9sIGluIHNsYXZlIHJlY2VwdGlvbiBpbmNsdWRpbmcgdGhlIGNvbW1hbmQgYW5kIGRhdGEsIHNsYXZlIGJ5dGUgY29udHJvbCBtb2RlIG11c3QgYmUgZW5hYmxlZCBieSBzZXR0aW5nIHRoZSBBQ0tNRU4gYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTbGF2ZSBieXRlIGNvbnRyb2wgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIGJ5dGUgY29udHJvbCBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIDl0aCBiaXQgY2FuIHJlc3BvbnNlIHRoZSBBQ0sgb3IgTkFDSyBhY2NvcmRpbmcgdGhlIHJlY2VpdmVkIGRhdGEgYnkgdXNlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGJ5dGUgaXMgcmVjZWl2ZWQsIHN0cmV0Y2hpbmcgdGhlIFNDTEsgc2lnbmFsIGxvdyBiZXR3ZWVuIHRoZSA4dGggYW5kIDl0aCBTQ0xLIHB1bHNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIHRoZSBCTURFTiA9MSBhbmQgdGhpcyBiaXQgaXMgZW5hYmxlZCwgdGhlIGluZm9ybWF0aW9uIG9mIEkyQ19TVEFUVVMgd2lsbCBiZSBmaXhlZCBhcyAweEYwIGluIHNsYXZlIHJlY2VpdmUgY29uZGl0aW9uLgorICAgICAqIHxbMV0gICAgIHxQRUNFTiAgICAgfFBhY2tldCBFcnJvciBDaGVja2luZyBDYWxjdWxhdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBhY2tldCBFcnJvciBDaGVja2luZyBDYWxjdWxhdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGFja2V0IEVycm9yIENoZWNraW5nIENhbGN1bGF0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBJMkMgZW50ZXIgcG93ZXIgZG93biBtb2RlLCB0aGUgYml0IHNob3VsZCBiZSBlbmFibGVkIGFmdGVyIHdha2UtdXAgaWYgbmVlZGVkIFBFQyBjYWxjdWxhdGlvbi4KKyAgICAgKiB8WzJdICAgICB8Qk1ERU4gICAgIHxCdXMgTWFuYWdlbWVudCBEZXZpY2UgRGVmYXVsdCBBZGRyZXNzIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGV2aWNlIGRlZmF1bHQgYWRkcmVzcyBEaXNhYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgYWRkcmVzcyAwJ2IxMTAwMDAxeCBjb21pbmcgYW5kIHRoZSBib3RoIG9mIEJNREVOIGFuZCBBQ0tNRU4gYXJlIGVuYWJsZWQsIHRoZSBkZXZpY2UgcmVzcG9uc2VzIE5BQ0tlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEZXZpY2UgZGVmYXVsdCBhZGRyZXNzIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBhZGRyZXNzIDAnYjExMDAwMDF4IGNvbWluZyBhbmQgdGhlIGJvdGggb2YgQk1ERU4gYW5kIEFDS01FTiBhcmUgZW5hYmxlZCwgdGhlIGRldmljZSByZXNwb25zZXMgQUNLZWQuCisgICAgICogfFszXSAgICAgfEJNSEVOICAgICB8QnVzIE1hbmFnZW1lbnQgSG9zdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEhvc3QgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEhvc3QgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8QUxFUlRFTiAgIHxCdXMgTWFuYWdlbWVudCBBbGVydCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGV2aWNlIE1vZGUgKEJNSEVOID0wKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVsZWFzZSB0aGUgQk1fQUxFUlQgcGluIGhpZ2ggYW5kIEFsZXJ0IFJlc3BvbnNlIEhlYWRlciBkaXNhYmxlZDogMDAwMTEwMHggZm9sbG93ZWQgYnkgTkFDSyBpZiBib3RoIG9mIEJNREVOIGFuZCBBQ0tNRU4gYXJlIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERyaXZlIEJNX0FMRVJUIHBpbiBsb3cgYW5kIEFsZXJ0IFJlc3BvbnNlIEFkZHJlc3MgSGVhZGVyIGVuYWJsZXM6IDAwMDExMDB4IGZvbGxvd2VkIGJ5IEFDSyBpZiBib3RoIG9mIEJNREVOIGFuZCBBQ0tNRU4gYXJlIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SG9zdCBNb2RlIChCTUhFTiA9MSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJNX0FMRVJUIHBpbiBub3Qgc3VwcG9ydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCTV9BTEVSVCBwaW4gc3VwcG9ydGVkLgorICAgICAqIHxbNV0gICAgIHxTQ1RMT1NUUyAgfFN1c3BlbmQvQ29udHJvbCBEYXRhIE91dHB1dCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIG91dHB1dCBvZiBTVVNDT04gcGluIGlzIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIG91dHB1dCBvZiBTVVNDT04gcGluIGlzIGhpZ2guCisgICAgICogfFs2XSAgICAgfFNDVExPRU4gICB8U3VzcGVuZCBvciBDb250cm9sIFBpbiBPdXRwdXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgU1VTQ09OIHBpbiBpbiBpbnB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIG91dHB1dCBlbmFibGUgaXMgYWN0aXZlIG9uIHRoZSBTVVNDT04gcGluLgorICAgICAqIHxbN10gICAgIHxCVVNFTiAgICAgfEJVUyBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBzeXN0ZW0gbWFuYWdlbWVudCBmdW5jdGlvbiBpcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHN5c3RlbSBtYW5hZ2VtZW50IGZ1bmN0aW9uIGlzIEVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIHRoZSBiaXQgaXMgZW5hYmxlZCwgdGhlIGludGVybmFsIDE0LWJpdCBjb3VudGVyIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB0aW1lIG91dCBldmVudCBvZiBjbG9jayBsb3cgY29uZGl0aW9uLgorICAgICAqIHxbOF0gICAgIHxQRUNUWEVOICAgfFBhY2tldCBFcnJvciBDaGVja2luZyBCeXRlIFRyYW5zbWlzc2lvbi9SZWNlcHRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUEVDIHRyYW5zZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRUMgdHJhbnNtaXNzaW9uIGlzIHJlcXVlc3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiAxLlRoaXMgYml0IGhhcyBubyBlZmZlY3QgaW4gc2xhdmUgbW9kZSB3aGVuIEFDS01FTiA9MC4KKyAgICAgKiB8WzldICAgICB8VElETEUgICAgIHxUaW1lciBDaGVjayBpbiBJZGxlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEJVU1RPVVQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHRpbWUtb3V0IG9mIGNsb2NrIGxvdyBpbiBidXMgYWN0aXZlIGFuZCB0aGUgaWRsZSBwZXJpb2QgaW4gYnVzIElkbGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIGRlZmluZSB3aGljaCBjb25kaXRpb24gaXMgZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIEJVU1RPVVQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGNsb2NrIGxvdyBwZXJpb2QgaW4gYnVzIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIEJVU1RPVVQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIElETEUgcGVyaW9kIGluIGJ1cyBJZGxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBCVVNZIChJMkNfQlVTU1RTWzBdKSBpbmRpY2F0ZSB0aGUgY3VycmVudCBidXMgc3RhdGUuCisgICAgICogfFsxMF0gICAgfFBFQ0NMUiAgICB8UEVDIENsZWFyIGF0IFJlcGVhdCBTdGFydAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjYWxjdWxhdGlvbiBvZiBQRUMgc3RhcnRzIHdoZW4gUEVDRU4gaXMgc2V0IHRvIDEgYW5kIGl0IGlzIGNsZWFyIHdoZW4gdGhlIFNUQSBvciBTVE8gYml0IGlzIGRldGVjdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBQRUNDTFIgYml0IGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBjb25kaXRpb24gb2YgUkVQRUFUIFNUQVJUIGNhbiBjbGVhciB0aGUgUEVDIGNhbGN1bGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgUEVDIGNhbGN1bGF0aW9uIGlzIGNsZWFyZWQgYnkgUmVwZWF0IFN0YXJ0IGZ1bmN0aW9uIGlzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgUEVDIGNhbGN1bGF0aW9uIGlzIGNsZWFyZWQgYnkgUmVwZWF0IFN0YXJ0IGZ1bmN0aW9uIGlzIEVuYWJsZWQuCisgICAgICogfFsxMV0gICAgfEFDS005U0kgICB8QWNrbm93bGVkZ2UgTWFudWFsIEVuYWJsZSBFeHRyYSBTSSBJbnRlcnJ1cHQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlcmUgaXMgbm8gU0kgaW50ZXJydXB0IGluIHRoZSA5dGggY2xvY2sgY3ljbGUgd2hlbiB0aGUgQlVTRU4gPTEgYW5kIEFDS01FTiA9MS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlcmUgaXMgU0kgaW50ZXJydXB0IGluIHRoZSA5dGggY2xvY2sgY3ljbGUgd2hlbiB0aGUgQlVTRU4gPTEgYW5kIEFDS01FTiA9MS4KKyAgICAgKiB8WzEyXSAgICB8QkNESUVOICAgIHxQYWNrZXQgRXJyb3IgQ2hlY2tpbmcgQnl0ZSBDb3VudCBEb25lIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyB0aGUgYnl0ZSBjb3VudCBkb25lIGludGVycnVwdCBpcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIHRoZSBieXRlIGNvdW50IGRvbmUgaW50ZXJydXB0IGlzIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgdXNlZCBpbiBQRUNFTiA9MS4KKyAgICAgKiB8WzEzXSAgICB8UEVDRElFTiAgIHxQYWNrZXQgRXJyb3IgQ2hlY2tpbmcgQnl0ZSBUcmFuc2ZlciBEb25lIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyB0aGUgUEVDIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IGlzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgdGhlIFBFQyB0cmFuc2ZlciBkb25lIGludGVycnVwdCBpcyBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHVzZWQgaW4gUEVDRU4gPTEuCisgICAgICogQHZhciBJMkNfVDo6QlVTVENUTAorICAgICAqIE9mZnNldDogMHg1NCAgSTJDIEJ1cyBNYW5hZ2VtZW50IFRpbWVyIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCVVNUT0VOICAgfEJ1cyBUaW1lIE91dCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyB0aGUgYnVzIGNsb2NrIGxvdyB0aW1lLW91dCBkZXRlY3Rpb24gaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyB0aGUgYnVzIGNsb2NrIGxvdyB0aW1lLW91dCBkZXRlY3Rpb24gaXMgRW5hYmxlZCAoYnVzIGNsb2NrIGlzIGxvdyBmb3IgbW9yZSB0aGFuIFRpbWUtb3V0IChpbiBCSURMRT0wKSBvciBoaWdoIG1vcmUgdGhhbiBUaW1lLW91dChpbiBCSURMRSA9MSkKKyAgICAgKiB8WzFdICAgICB8Q0xLVE9FTiAgIHxDdW11bGF0aXZlIENsb2NrIExvdyBUaW1lIE91dCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyB0aGUgY3VtdWxhdGl2ZSBjbG9jayBsb3cgdGltZS1vdXQgZGV0ZWN0aW9uIGlzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgdGhlIGN1bXVsYXRpdmUgY2xvY2sgbG93IHRpbWUtb3V0IGRldGVjdGlvbiBpcyBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBNYXN0ZXIsIGl0IGNhbGN1bGF0ZXMgdGhlIHBlcmlvZCBmcm9tIFNUQVJUIHRvIEFDSworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBTbGF2ZSwgaXQgY2FsY3VsYXRlcyB0aGUgcGVyaW9kIGZyb20gU1RBUlQgdG8gU1RPUAorICAgICAqIHxbMl0gICAgIHxCVVNUT0lFTiAgfFRpbWUtb3V0IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlVTWSA9MS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIHRoZSBTQ0xLIGxvdyB0aW1lLW91dCBpbnRlcnJ1cHQgaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyB0aGUgU0NMSyBsb3cgdGltZS1vdXQgaW50ZXJydXB0IGlzIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlVTWSA9MC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIHRoZSBidXMgSURMRSB0aW1lLW91dCBpbnRlcnJ1cHQgaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyB0aGUgYnVzIElETEUgdGltZS1vdXQgaW50ZXJydXB0IGlzIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfENMS1RPSUVOICB8RXh0ZW5kZWQgQ2xvY2sgVGltZSBPdXQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIHRoZSBjbG9jayB0aW1lIG91dCBpbnRlcnJ1cHQgaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyB0aGUgY2xvY2sgdGltZSBvdXQgaW50ZXJydXB0IGlzIEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfFRPUlNURU4gICB8VGltZSBPdXQgUmVzZXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgdGhlIEkyQyBzdGF0ZSBtYWNoaW5lIHJlc2V0IGlzIERpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyB0aGUgSTJDIHN0YXRlIG1hY2hpbmUgcmVzZXQgaXMgRW5hYmxlLiAoVGhlIGNsb2NrIGFuZCBkYXRhIGJ1cyB3aWxsIGJlIHJlbGVhc2VkIHRvIGhpZ2gpCisgICAgICogQHZhciBJMkNfVDo6QlVTU1RTCisgICAgICogT2Zmc2V0OiAweDU4ICBJMkMgQnVzIE1hbmFnZW1lbnQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlVTWSAgICAgIHxCdXMgQnVzeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlcyB0aGF0IGEgY29tbXVuaWNhdGlvbiBpcyBpbiBwcm9ncmVzcyBvbiB0aGUgYnVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gYSBTVEFSVCBjb25kaXRpb24gaXMgZGV0ZWN0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBjbGVhcmVkIGJ5IGhhcmR3YXJlIHdoZW4gYSBTVE9QIGNvbmRpdGlvbiBpcyBkZXRlY3RlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgYnVzIGlzIElETEUgKGJvdGggU0NMSyBhbmQgU0RBIEhpZ2gpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgYnVzIGlzIGJ1c3kuCisgICAgICogfFsxXSAgICAgfEJDRE9ORSAgICB8Qnl0ZSBDb3VudCBUcmFuc21pc3Npb24vUmVjZWl2ZSBEb25lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyB0aGUgYnl0ZSBjb3VudCB0cmFuc21pc3Npb24vIHJlY2VpdmUgaXMgbm90IGZpbmlzaGVkIHdoZW4gdGhlIFBFQ0VOIGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIHRoZSBieXRlIGNvdW50IHRyYW5zbWlzc2lvbi8gcmVjZWl2ZSBpcyBmaW5pc2hlZCB3aGVuIHRoZSBQRUNFTiBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogU29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsyXSAgICAgfFBFQ0VSUiAgICB8UEVDIEVycm9yIGluIFJlY2VwdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgdGhlIFBFQyB2YWx1ZSBlcXVhbCB0aGUgcmVjZWl2ZWQgUEVDIGRhdGEgcGFja2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgdGhlIFBFQyB2YWx1ZSBkb2Vzbid0IG1hdGNoIHRoZSByZWNlaXZlIFBFQyBkYXRhIHBhY2tldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBTb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzNdICAgICB8QUxFUlQgICAgIHxTTUJ1cyBBbGVydCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEZXZpY2UgTW9kZSAoQk1IRU4gPTApLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgU01CQUxFUlQgcGluIHN0YXRlIGlzIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIFNNQkFMRVJUIHBpbiBzdGF0ZSBpcyBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEhvc3QgTW9kZSAoQk1IRU4gPTEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBTTUJBTEVSVCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIHRoZXJlIGlzIFNNQkFMRVJUIGV2ZW50IChmYWxsaW5nIGVkZ2UpIGlzIGRldGVjdGVkIGluIFNNQUxFUlQgcGluIHdoZW4gdGhlIEJNSEVOID0gMSAoU01CdXMgaG9zdCBjb25maWd1cmF0aW9uKSBhbmQgdGhlIEFMRVJURU4gPSAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgU01CQUxFUlQgcGluIGlzIGFuIG9wZW4tZHJhaW4gcGluLCB0aGUgcHVsbC1oaWdoIHJlc2lzdG9yIGlzIG11c3QgaW4gdGhlIHN5c3RlbQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzRdICAgICB8U0NUTERJTiAgIHxCdXMgU3VzcGVuZCBvciBDb250cm9sIFNpZ25hbCBJbnB1dCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGlucHV0IHN0YXR1cyBvZiBTVVNDT04gcGluIGlzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBpbnB1dCBzdGF0dXMgb2YgU1VTQ09OIHBpbiBpcyAxLgorICAgICAqIHxbNV0gICAgIHxCVVNUTyAgICAgfEJ1cyBUaW1lLW91dCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgbm8gYW55IHRpbWUtb3V0IG9yIGV4dGVybmFsIGNsb2NrIHRpbWUtb3V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgdGhhdCBhIHRpbWUtb3V0IG9yIGV4dGVybmFsIGNsb2NrIHRpbWUtb3V0IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIGJ1cyBidXN5LCB0aGUgYml0IGluZGljYXRlcyB0aGUgdG90YWwgY2xvY2sgbG93IHRpbWUtb3V0IGV2ZW50IG9jY3VycmVkIG90aGVyd2lzZSwgaXQgaW5kaWNhdGVzIHRoZSBidXMgaWRsZSB0aW1lLW91dCBldmVudCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBTb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzZdICAgICB8Q0xLVE8gICAgIHxDbG9jayBMb3cgQWNjdW11bGF0ZSBUaW1lLW91dCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIHRoYXQgdGhlIGN1bXVsYXRpdmUgY2xvY2sgbG93IGlzIG5vIGFueSB0aW1lLW91dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIHRoYXQgdGhlIGN1bXVsYXRpdmUgY2xvY2sgbG93IHRpbWUtb3V0IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbN10gICAgIHxQRUNET05FICAgfFBFQyBCeXRlIFRyYW5zbWlzc2lvbi9SZWNlaXZlIERvbmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIHRoZSBQRUMgdHJhbnNtaXNzaW9uLyByZWNlaXZlIGlzIG5vdCBmaW5pc2hlZCB3aGVuIHRoZSBQRUNFTiBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyB0aGUgUEVDIHRyYW5zbWlzc2lvbi8gcmVjZWl2ZSBpcyBmaW5pc2hlZCB3aGVuIHRoZSBQRUNFTiBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogU29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogQHZhciBJMkNfVDo6UEtUU0laRQorICAgICAqIE9mZnNldDogMHg1QyAgSTJDIFBhY2tldCBFcnJvciBDaGVja2luZyBCeXRlIE51bWJlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs4OjBdICAgfFBMRFNJWkUgICB8VHJhbnNmZXIgQnl0ZSBOdW1iZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdHJhbnNtaXNzaW9uIG9yIHJlY2VpdmUgYnl0ZSBudW1iZXIgaW4gb25lIHRyYW5zYWN0aW9uIHdoZW4gdGhlIFBFQ0VOIGlzIHNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBtYXhpbXVtIHRyYW5zYWN0aW9uIG9yIHJlY2VpdmUgYnl0ZSBpcyAyNTYgQnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90aWNlOiBUaGUgYnl0ZSBudW1iZXIgY291bnRpbmcgaW5jbHVkZXMgYWRkcmVzcywgY29tbWFuZCBjb2RlLCBhbmQgZGF0YSBmcmFtZS4KKyAgICAgKiBAdmFyIEkyQ19UOjpQS1RDUkMKKyAgICAgKiBPZmZzZXQ6IDB4NjAgIEkyQyBQYWNrZXQgRXJyb3IgQ2hlY2tpbmcgQnl0ZSBWYWx1ZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfFBFQ0NSQyAgICB8UGFja2V0IEVycm9yIENoZWNraW5nIEJ5dGUgVmFsdWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJ5dGUgaW5kaWNhdGVzIHRoZSBwYWNrZXQgZXJyb3IgY2hlY2tpbmcgY29udGVudCBhZnRlciB0cmFuc21pc3Npb24gb3IgcmVjZWl2ZSBieXRlIGNvdW50IGJ5IHVzaW5nIHRoZSBDKHgpID0gWDggKyBYMiArIFggKyAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgcmVhZCBvbmx5LgorICAgICAqIEB2YXIgSTJDX1Q6OkJVU1RPVVQKKyAgICAgKiBPZmZzZXQ6IDB4NjQgIEkyQyBCdXMgTWFuYWdlbWVudCBUaW1lciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfEJVU1RPICAgICB8QnVzIE1hbmFnZW1lbnQgVGltZS1vdXQgVmFsdWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgYnVzIHRpbWUtb3V0IHZhbHVlIGluIGJ1cyBpcyBJRExFIG9yIFNDTEsgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIHRoZSB1c2VyIHdhbnRzIHRvIHJldmlzZSB0aGUgdmFsdWUgb2YgQlVTVE9VVCwgdGhlIFRPUlNURU4gKEkyQ19CVVNUQ1RMWzRdKSBiaXQgc2hhbGwgYmUgc2V0IHRvIDEgYW5kIGNsZWFyIHRvIDAgZmlyc3QgaW4gdGhlIEJVU0VOKEkyQ19CVVNDVExbN10pIGlzIHNldC4KKyAgICAgKiBAdmFyIEkyQ19UOjpDTEtUT1VUCisgICAgICogT2Zmc2V0OiAweDY4ICBJMkMgQnVzIE1hbmFnZW1lbnQgQ2xvY2sgTG93IFRpbWVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8Q0xLVE8gICAgIHxCdXMgQ2xvY2sgTG93IFRpbWVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZpZWxkIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBjdW11bGF0aXZlIGNsb2NrIGV4dGVuc2lvbiB0aW1lLW91dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiB0aGUgdXNlciB3YW50cyB0byByZXZpc2UgdGhlIHZhbHVlIG9mIENMS0xUT1VULCB0aGUgVE9SU1RFTiBiaXQgc2hhbGwgYmUgc2V0IHRvIDEgYW5kIGNsZWFyIHRvIDAgZmlyc3QgaW4gdGhlIEJVU0VOIGlzIHNldC4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDA7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBJMkMgQ29udHJvbCBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRERSMDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gSTJDIFNsYXZlIEFkZHJlc3MgUmVnaXN0ZXIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgREFUOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIEkyQyBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNUQVRVUzA7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDBjXSBJMkMgU3RhdHVzIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTEtESVY7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gSTJDIENsb2NrIERpdmlkZWQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVE9DVEw7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTRdIEkyQyBUaW1lLW91dCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFERFIxOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE4XSBJMkMgU2xhdmUgQWRkcmVzcyBSZWdpc3RlcjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRERSMjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxY10gSTJDIFNsYXZlIEFkZHJlc3MgUmVnaXN0ZXIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUREUjM7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjBdIEkyQyBTbGF2ZSBBZGRyZXNzIFJlZ2lzdGVyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFERFJNU0swOyAgICAgICAgICAgICAgLyohPCBbMHgwMDI0XSBJMkMgU2xhdmUgQWRkcmVzcyBNYXNrIFJlZ2lzdGVyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRERSTVNLMTsgICAgICAgICAgICAgIC8qITwgWzB4MDAyOF0gSTJDIFNsYXZlIEFkZHJlc3MgTWFzayBSZWdpc3RlcjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUREUk1TSzI7ICAgICAgICAgICAgICAvKiE8IFsweDAwMmNdIEkyQyBTbGF2ZSBBZGRyZXNzIE1hc2sgUmVnaXN0ZXIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFERFJNU0szOyAgICAgICAgICAgICAgLyohPCBbMHgwMDMwXSBJMkMgU2xhdmUgQWRkcmVzcyBNYXNrIFJlZ2lzdGVyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsyXTsKKyAgICBfX0lPIHVpbnQzMl90IFdLQ1RMOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDNjXSBJMkMgV2FrZS11cCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBXS1NUUzsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA0MF0gSTJDIFdha2UtdXAgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMMTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNDRdIEkyQyBDb250cm9sIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzE7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDQ4XSBJMkMgU3RhdHVzIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUTUNUTDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA0Y10gSTJDIFRpbWluZyBDb25maWd1cmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQlVTQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNTBdIEkyQyBCdXMgTWFuYWdlbWVudCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEJVU1RDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDU0XSBJMkMgQnVzIE1hbmFnZW1lbnQgVGltZXIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCVVNTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA1OF0gSTJDIEJ1cyBNYW5hZ2VtZW50IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUEtUU0laRTsgICAgICAgICAgICAgICAvKiE8IFsweDAwNWNdIEkyQyBQYWNrZXQgRXJyb3IgQ2hlY2tpbmcgQnl0ZSBOdW1iZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFBLVENSQzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDYwXSBJMkMgUGFja2V0IEVycm9yIENoZWNraW5nIEJ5dGUgVmFsdWUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCVVNUT1VUOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA2NF0gSTJDIEJ1cyBNYW5hZ2VtZW50IFRpbWVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0xLVE9VVDsgICAgICAgICAgICAgICAvKiE8IFsweDAwNjhdIEkyQyBCdXMgTWFuYWdlbWVudCBDbG9jayBMb3cgVGltZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBJMkNfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgSTJDX0NPTlNUIEkyQyBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBJMkMgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBJMkNfQ1RMMF9BQV9Qb3MgICAgICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDA6IEFBIFBvc2l0aW9uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0NUTDBfQUFfTXNrICAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19DVEwwX0FBX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwwOiBBQSBNYXNrICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0NUTDBfU0lfUG9zICAgICAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwwOiBTSSBQb3NpdGlvbiAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19DVEwwX1NJX01zayAgICAgICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQ1RMMF9TSV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMDogU0kgTWFzayAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19DVEwwX1NUT19Qb3MgICAgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMDogU1RPIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQ1RMMF9TVE9fTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0NUTDBfU1RPX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDA6IFNUTyBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQ1RMMF9TVEFfUG9zICAgICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDA6IFNUQSBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0NUTDBfU1RBX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19DVEwwX1NUQV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwwOiBTVEEgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0NUTDBfSTJDRU5fUG9zICAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwwOiBJMkNFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19DVEwwX0kyQ0VOX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQ1RMMF9JMkNFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMDogSTJDRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19DVEwwX0lOVEVOX1BvcyAgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMDogSU5URU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQ1RMMF9JTlRFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0NUTDBfSU5URU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDA6IElOVEVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQUREUjBfR0NfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFIwOiBHQyBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0FERFIwX0dDX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19BRERSMF9HQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSMDogR0MgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0FERFIwX0FERFJfUG9zICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSMDogQUREUiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19BRERSMF9BRERSX01zayAgICAgICAgICAgICAgICgweDNmZnVsIDw8IEkyQ19BRERSMF9BRERSX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUjA6IEFERFIgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19EQVRfREFUX1BvcyAgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6REFUOiBEQVQgUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfREFUX0RBVF9Nc2sgICAgICAgICAgICAgICAgICAoMHhmZnVsIDw8IEkyQ19EQVRfREFUX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkRBVDogREFUIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfU1RBVFVTMF9TVEFUVVNfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlNUQVRVUzA6IFNUQVRVUyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1NUQVRVUzBfU1RBVFVTX01zayAgICAgICAgICAgKDB4ZmZ1bCA8PCBJMkNfU1RBVFVTMF9TVEFUVVNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpTVEFUVVMwOiBTVEFUVVMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0NMS0RJVl9ESVZJREVSX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDTEtESVY6IERJVklERVIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyQ19DTEtESVZfRElWSURFUl9Nc2sgICAgICAgICAgICgweDNmZnVsIDw8IEkyQ19DTEtESVZfRElWSURFUl9Qb3MpICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q0xLRElWOiBESVZJREVSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19UT0NUTF9UT0lGX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6VE9DVEw6IFRPSUYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBJMkNfVE9DVExfVE9JRl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX1RPQ1RMX1RPSUZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlRPQ1RMOiBUT0lGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfVE9DVExfVE9DRElWNF9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlRPQ1RMOiBUT0NESVY0IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1RPQ1RMX1RPQ0RJVjRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19UT0NUTF9UT0NESVY0X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpUT0NUTDogVE9DRElWNCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX1RPQ1RMX1RPQ0VOX1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpUT0NUTDogVE9DRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEkyQ19UT0NUTF9UT0NFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfVE9DVExfVE9DRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6VE9DVEw6IFRPQ0VOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19BRERSMV9HQ19Qb3MgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUjE6IEdDIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQUREUjFfR0NfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0FERFIxX0dDX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFIxOiBHQyBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQUREUjFfQUREUl9Qb3MgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFIxOiBBRERSIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0FERFIxX0FERFJfTXNrICAgICAgICAgICAgICAgKDB4M2ZmdWwgPDwgSTJDX0FERFIxX0FERFJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSMTogQUREUiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0FERFIyX0dDX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSMjogR0MgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19BRERSMl9HQ19Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQUREUjJfR0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUjI6IEdDIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19BRERSMl9BRERSX1BvcyAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUjI6IEFERFIgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQUREUjJfQUREUl9Nc2sgICAgICAgICAgICAgICAoMHgzZmZ1bCA8PCBJMkNfQUREUjJfQUREUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFIyOiBBRERSIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQUREUjNfR0NfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFIzOiBHQyBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0FERFIzX0dDX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19BRERSM19HQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSMzogR0MgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0FERFIzX0FERFJfUG9zICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSMzogQUREUiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19BRERSM19BRERSX01zayAgICAgICAgICAgICAgICgweDNmZnVsIDw8IEkyQ19BRERSM19BRERSX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUjM6IEFERFIgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19BRERSTVNLMF9BRERSTVNLX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUk1TSzA6IEFERFJNU0sgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBJMkNfQUREUk1TSzBfQUREUk1TS19Nc2sgICAgICAgICAoMHgzZmZ1bCA8PCBJMkNfQUREUk1TSzBfQUREUk1TS19Qb3MpICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFJNU0swOiBBRERSTVNLIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQUREUk1TSzFfQUREUk1TS19Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFJNU0sxOiBBRERSTVNLIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgSTJDX0FERFJNU0sxX0FERFJNU0tfTXNrICAgICAgICAgKDB4M2ZmdWwgPDwgSTJDX0FERFJNU0sxX0FERFJNU0tfUG9zKSAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSTVNLMTogQUREUk1TSyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0FERFJNU0syX0FERFJNU0tfUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSTVNLMjogQUREUk1TSyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEkyQ19BRERSTVNLMl9BRERSTVNLX01zayAgICAgICAgICgweDNmZnVsIDw8IEkyQ19BRERSTVNLMl9BRERSTVNLX1BvcykgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUk1TSzI6IEFERFJNU0sgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19BRERSTVNLM19BRERSTVNLX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUk1TSzM6IEFERFJNU0sgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBJMkNfQUREUk1TSzNfQUREUk1TS19Nc2sgICAgICAgICAoMHgzZmZ1bCA8PCBJMkNfQUREUk1TSzNfQUREUk1TS19Qb3MpICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFJNU0szOiBBRERSTVNLIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfV0tDVExfV0tFTl9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OldLQ1RMOiBXS0VOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1dLQ1RMX1dLRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19XS0NUTF9XS0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpXS0NUTDogV0tFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX1dLQ1RMX05IREJVU0VOX1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpXS0NUTDogTkhEQlVTRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyQ19XS0NUTF9OSERCVVNFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMkNfV0tDVExfTkhEQlVTRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6V0tDVEw6IE5IREJVU0VOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19XS1NUU19XS0lGX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6V0tTVFM6IFdLSUYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBJMkNfV0tTVFNfV0tJRl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX1dLU1RTX1dLSUZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OldLU1RTOiBXS0lGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfV0tTVFNfV0tBS0RPTkVfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OldLU1RTOiBXS0FLRE9ORSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1dLU1RTX1dLQUtET05FX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19XS1NUU19XS0FLRE9ORV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpXS1NUUzogV0tBS0RPTkUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX1dLU1RTX1dSU1RTV0tfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpXS1NUUzogV1JTVFNXSyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyQ19XS1NUU19XUlNUU1dLX01zayAgICAgICAgICAgICgweDF1bCA8PCBJMkNfV0tTVFNfV1JTVFNXS19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6V0tTVFM6IFdSU1RTV0sgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19DVEwxX1RYUERNQUVOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMTogVFhQRE1BRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMkNfQ1RMMV9UWFBETUFFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0NUTDFfVFhQRE1BRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDE6IFRYUERNQUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQ1RMMV9SWFBETUFFTl9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDE6IFJYUERNQUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0NUTDFfUlhQRE1BRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19DVEwxX1JYUERNQUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwxOiBSWFBETUFFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0NUTDFfUERNQVJTVF9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwxOiBQRE1BUlNUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyQ19DVEwxX1BETUFSU1RfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQ1RMMV9QRE1BUlNUX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMTogUERNQVJTVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19DVEwxX1BETUFTVFJfUG9zICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMTogUERNQVNUUiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMkNfQ1RMMV9QRE1BU1RSX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0NUTDFfUERNQVNUUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDE6IFBETUFTVFIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQ1RMMV9BRERSMTBFTl9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDE6IEFERFIxMEVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0NUTDFfQUREUjEwRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19DVEwxX0FERFIxMEVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwxOiBBRERSMTBFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX1NUQVRVUzFfQURNQVQwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpTVEFUVVMxOiBBRE1BVDAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyQ19TVEFUVVMxX0FETUFUMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMkNfU1RBVFVTMV9BRE1BVDBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6U1RBVFVTMTogQURNQVQwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19TVEFUVVMxX0FETUFUMV9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6U1RBVFVTMTogQURNQVQxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMkNfU1RBVFVTMV9BRE1BVDFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJDX1NUQVRVUzFfQURNQVQxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlNUQVRVUzE6IEFETUFUMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfU1RBVFVTMV9BRE1BVDJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlNUQVRVUzE6IEFETUFUMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1NUQVRVUzFfQURNQVQyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19TVEFUVVMxX0FETUFUMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpTVEFUVVMxOiBBRE1BVDIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX1NUQVRVUzFfQURNQVQzX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpTVEFUVVMxOiBBRE1BVDMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyQ19TVEFUVVMxX0FETUFUM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMkNfU1RBVFVTMV9BRE1BVDNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6U1RBVFVTMTogQURNQVQzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19TVEFUVVMxX09OQlVTWV9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6U1RBVFVTMTogT05CVVNZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMkNfU1RBVFVTMV9PTkJVU1lfTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJDX1NUQVRVUzFfT05CVVNZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlNUQVRVUzE6IE9OQlVTWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfVE1DVExfU1RDVExfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlRNQ1RMOiBTVENUTCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1RNQ1RMX1NUQ1RMX01zayAgICAgICAgICAgICAgKDB4MWZmdWwgPDwgSTJDX1RNQ1RMX1NUQ1RMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpUTUNUTDogU1RDVEwgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX1RNQ1RMX0hUQ1RMX1BvcyAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpUTUNUTDogSFRDVEwgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEkyQ19UTUNUTF9IVENUTF9Nc2sgICAgICAgICAgICAgICgweDFmZnVsIDw8IEkyQ19UTUNUTF9IVENUTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6VE1DVEw6IEhUQ1RMIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNDVExfQUNLTUVOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBBQ0tNRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTQ1RMX0FDS01FTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU0NUTF9BQ0tNRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogQUNLTUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTQ1RMX1BFQ0VOX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogUEVDRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU0NUTF9QRUNFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNDVExfUEVDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IFBFQ0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU0NUTF9CTURFTl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IEJNREVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNDVExfQk1ERU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTQ1RMX0JNREVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBCTURFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNDVExfQk1IRU5fUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBCTUhFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTQ1RMX0JNSEVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU0NUTF9CTUhFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogQk1IRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTQ1RMX0FMRVJURU5fUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogQUxFUlRFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU0NUTF9BTEVSVEVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNDVExfQUxFUlRFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IEFMRVJURU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU0NUTF9TQ1RMT1NUU19Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IFNDVExPU1RTIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNDVExfU0NUTE9TVFNfTXNrICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTQ1RMX1NDVExPU1RTX1BvcykgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBTQ1RMT1NUUyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNDVExfU0NUTE9FTl9Qb3MgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBTQ1RMT0VOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTQ1RMX1NDVExPRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU0NUTF9TQ1RMT0VOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogU0NUTE9FTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTQ1RMX0JVU0VOX1BvcyAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogQlVTRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU0NUTF9CVVNFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNDVExfQlVTRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IEJVU0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU0NUTF9QRUNUWEVOX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IFBFQ1RYRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNDVExfUEVDVFhFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTQ1RMX1BFQ1RYRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBQRUNUWEVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNDVExfVElETEVfUG9zICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBUSURMRSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTQ1RMX1RJRExFX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU0NUTF9USURMRV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogVElETEUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTQ1RMX1BFQ0NMUl9Qb3MgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogUEVDQ0xSIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU0NUTF9QRUNDTFJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNDVExfUEVDQ0xSX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IFBFQ0NMUiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU0NUTF9BQ0tNOVNJX1BvcyAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IEFDS005U0kgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNDVExfQUNLTTlTSV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTQ1RMX0FDS005U0lfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBBQ0tNOVNJIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNDVExfQkNESUVOX1BvcyAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBCQ0RJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTQ1RMX0JDRElFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU0NUTF9CQ0RJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogQkNESUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTQ1RMX1BFQ0RJRU5fUG9zICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogUEVDRElFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU0NUTF9QRUNESUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNDVExfUEVDRElFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IFBFQ0RJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU1RDVExfQlVTVE9FTl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNUQ1RMOiBCVVNUT0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNUQ1RMX0JVU1RPRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTVENUTF9CVVNUT0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTVENUTDogQlVTVE9FTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNUQ1RMX0NMS1RPRU5fUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTVENUTDogQ0xLVE9FTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBJMkNfQlVTVENUTF9DTEtUT0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU1RDVExfQ0xLVE9FTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1RDVEw6IENMS1RPRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTVENUTF9CVVNUT0lFTl9Qb3MgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1RDVEw6IEJVU1RPSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU1RDVExfQlVTVE9JRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNUQ1RMX0JVU1RPSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNUQ1RMOiBCVVNUT0lFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU1RDVExfQ0xLVE9JRU5fUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNUQ1RMOiBDTEtUT0lFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEkyQ19CVVNUQ1RMX0NMS1RPSUVOX01zayAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTVENUTF9DTEtUT0lFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTVENUTDogQ0xLVE9JRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNUQ1RMX1RPUlNURU5fUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTVENUTDogVE9SU1RFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBJMkNfQlVTVENUTF9UT1JTVEVOX01zayAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU1RDVExfVE9SU1RFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1RDVEw6IFRPUlNURU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTU1RTX0JVU1lfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1NUUzogQlVTWSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU1NUU19CVVNZX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNTVFNfQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNTVFM6IEJVU1kgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU1NUU19CQ0RPTkVfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNTVFM6IEJDRE9ORSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNTVFNfQkNET05FX01zayAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTU1RTX0JDRE9ORV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTU1RTOiBCQ0RPTkUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNTVFNfUEVDRVJSX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTU1RTOiBQRUNFUlIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTU1RTX1BFQ0VSUl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU1NUU19QRUNFUlJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1NUUzogUEVDRVJSIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTU1RTX0FMRVJUX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1NUUzogQUxFUlQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU1NUU19BTEVSVF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNTVFNfQUxFUlRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNTVFM6IEFMRVJUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU1NUU19TQ1RMRElOX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNTVFM6IFNDVExESU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNTVFNfU0NUTERJTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTU1RTX1NDVExESU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTU1RTOiBTQ1RMRElOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNTVFNfQlVTVE9fUG9zICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTU1RTOiBCVVNUTyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTU1RTX0JVU1RPX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU1NUU19CVVNUT19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1NUUzogQlVTVE8gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTU1RTX0NMS1RPX1BvcyAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1NUUzogQ0xLVE8gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU1NUU19DTEtUT19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNTVFNfQ0xLVE9fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNTVFM6IENMS1RPIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU1NUU19QRUNET05FX1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNTVFM6IFBFQ0RPTkUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNTVFNfUEVDRE9ORV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTU1RTX1BFQ0RPTkVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTU1RTOiBQRUNET05FIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19QS1RTSVpFX1BMRFNJWkVfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6UEtUU0laRTogUExEU0laRSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBJMkNfUEtUU0laRV9QTERTSVpFX01zayAgICAgICAgICAoMHgxZmZ1bCA8PCBJMkNfUEtUU0laRV9QTERTSVpFX1BvcykgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlBLVFNJWkU6IFBMRFNJWkUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfUEtUQ1JDX1BFQ0NSQ19Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlBLVENSQzogUEVDQ1JDIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1BLVENSQ19QRUNDUkNfTXNrICAgICAgICAgICAgKDB4ZmZ1bCA8PCBJMkNfUEtUQ1JDX1BFQ0NSQ19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpQS1RDUkM6IFBFQ0NSQyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU1RPVVRfQlVTVE9fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNUT1VUOiBCVVNUTyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNUT1VUX0JVU1RPX01zayAgICAgICAgICAgICgweGZmdWwgPDwgSTJDX0JVU1RPVVRfQlVTVE9fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTVE9VVDogQlVTVE8gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19DTEtUT1VUX0NMS1RPX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q0xLVE9VVDogQ0xLVE8gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMkNfQ0xLVE9VVF9DTEtUT19Nc2sgICAgICAgICAgICAoMHhmZnVsIDw8IEkyQ19DTEtUT1VUX0NMS1RPX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNMS1RPVVQ6IENMS1RPIE1hc2sgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBJMkNfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIEkyQyByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisjZW5kaWYgLyogX19JMkNfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2kyc19yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9pMnNfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiY2U1YwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9pMnNfcmVnLmgKQEAgLTAsMCArMSw3MDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBpMnNfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIEkyUyByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19JMlNfUkVHX0hfXworI2RlZmluZSBfX0kyU19SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEkyUyBJbnRlcmZhY2UgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIEkyUyBJMlMgSW50ZXJmYWNlIENvbnRyb2xsZXIoSTJTKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBJMlMgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBJMlNfVDo6Q1RMMAorICAgICAqIE9mZnNldDogMHgwMCAgSTJTIENvbnRyb2wgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEkyU0VOICAgICB8STJTIENvbnRyb2xsZXIgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJTIGNvbnRyb2xsZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyUyBjb250cm9sbGVyIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFRYRU4gICAgICB8VHJhbnNtaXQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGF0YSB0cmFuc21pc3Npb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERhdGEgdHJhbnNtaXNzaW9uIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFJYRU4gICAgICB8UmVjZWl2ZSBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIHJlY2VpdmluZyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSByZWNlaXZpbmcgRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8TVVURSAgICAgIHxUcmFuc21pdCBNdXRlIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IGRhdGEgaXMgc2hpZnRlZCBmcm9tIGJ1ZmZlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2VuZCB6ZXJvIG9uIHRyYW5zbWl0IGNoYW5uZWwuCisgICAgICogfFs1OjRdICAgfERBVFdJRFRIICB8RGF0YSBXaWR0aAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBiaXQtd2lkdGggb2YgZGF0YSB3b3JkIGluIGVhY2ggYXVkaW8gY2hhbm5lbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVGhlIGJpdC13aWR0aCBvZiBkYXRhIHdvcmQgaXMgOC1iaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBUaGUgYml0LXdpZHRoIG9mIGRhdGEgd29yZCBpcyAxNi1iaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBUaGUgYml0LXdpZHRoIG9mIGRhdGEgd29yZCBpcyAyNC1iaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBUaGUgYml0LXdpZHRoIG9mIGRhdGEgd29yZCBpcyAzMi1iaXQuCisgICAgICogfFs2XSAgICAgfE1PTk8gICAgICB8TW9uYXVyYWwgRGF0YSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgaXMgc3RlcmVvIGZvcm1hdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSBpcyBtb25hdXJhbCBmb3JtYXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogd2hlbiBjaGlwIHJlY29yZHMgZGF0YSwgUlhMQ0ggKEkyU19DVEwwWzIzXSkgaW5kaWNhdGVzIHdoaWNoIGNoYW5uZWwgZGF0YSB3aWxsIGJlIHNhdmVkIGlmIG1vbmF1cmFsIGZvcm1hdCBpcyBzZWxlY3RlZC4KKyAgICAgKiB8WzddICAgICB8T1JERVIgICAgIHxTdGVyZW8gRGF0YSBPcmRlciBpbiBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gOC1iaXQvMTYtYml0IGRhdGEgd2lkdGgsIHRoaXMgYml0IGlzIHVzZWQgdG8gc2VsZWN0IHdoZXRoZXIgdGhlIGV2ZW4gb3Igb2RkIGNoYW5uZWwgZGF0YSBpcyBzdG9yZWQgaW4gaGlnaGVyIGJ5dGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiAyNC1iaXQgZGF0YSB3aWR0aCwgdGhpcyBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgbGVmdC9yaWdodCBhbGlnbm1lbnQgbWV0aG9kIG9mIGF1ZGlvIGRhdGEgd2hpY2ggaXMgc3RvcmVkIGluIGRhdGEgbWVtb3J5IGNvbnNpc3RlZCBvZiAzMi1iaXQgRklGTyBlbnRyaWVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFdmVuIGNoYW5uZWwgZGF0YSBhdCBoaWdoIGJ5dGUgaW4gOC1iaXQvMTYtYml0IGRhdGEgd2lkdGguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TFNCIG9mIDI0LWJpdCBhdWRpbyBkYXRhIGluIGVhY2ggY2hhbm5lbCBpcyBhbGlnbmVkIHRvIHJpZ2h0IHNpZGUgaW4gMzItYml0IEZJRk8gZW50cmllcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXZlbiBjaGFubmVsIGRhdGEgYXQgbG93IGJ5dGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8IE1TQiBvZiAyNC1iaXQgYXVkaW8gZGF0YSBpbiBlYWNoIGNoYW5uZWwgaXMgYWxpZ25lZCB0byBsZWZ0IHNpZGUgaW4gMzItYml0IEZJRk8gZW50cmllcy4KKyAgICAgKiB8WzhdICAgICB8U0xBVkUgICAgIHxTbGF2ZSBNb2RlIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE1hc3RlciBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEkyUyBjYW4gb3BlcmF0ZSBhcyBtYXN0ZXIgb3Igc2xhdmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgTWFzdGVyIG1vZGUsIEkyU19CQ0xLIGFuZCBJMlNfTFJDTEsgcGlucyBhcmUgb3V0cHV0IG1vZGUgYW5kIHNlbmQgb3V0IGJpdCBjbG9jayB0byBBdWRpbyBDT0RFQyBjaGlwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gU2xhdmUgbW9kZSwgSTJTX0JDTEsgYW5kIEkyU19MUkNMSyBwaW5zIGFyZSBpbnB1dCBtb2RlIGFuZCBJMlNfQkNMSyBhbmQgSTJTX0xSQ0xLIHNpZ25hbHMgYXJlIHJlY2VpdmVkIGZyb20gb3V0ZXIgQXVkaW8gQ09ERUMgY2hpcC4KKyAgICAgKiB8WzE1XSAgICB8TUNMS0VOICAgIHxNYXN0ZXIgQ2xvY2sgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBNQ0xLRU4gaXMgc2V0IHRvIDEsIEkyUyBjb250cm9sbGVyIHdpbGwgZ2VuZXJhdGUgbWFzdGVyIGNsb2NrIG9uIEkyU19NQ0xLIHBpbiBmb3IgZXh0ZXJuYWwgYXVkaW8gZGV2aWNlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWFzdGVyIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBNYXN0ZXIgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzE4XSAgICB8VFhGQkNMUiAgIHxUcmFuc21pdCBGSUZPIEJ1ZmZlciBDbGVhcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBFZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIFRYIEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdHJhbnNtaXQgRklGTywgaW50ZXJuYWwgcG9pbnRlciBpcyByZXNldCB0byBGSUZPIHN0YXJ0IHBvaW50LCBhbmQgVFhDTlQgKEkyU19TVEFUVVMxWzEyOjhdKSByZXR1cm5zIDAgYW5kIHRyYW5zbWl0IEZJRk8gYmVjb21lcyBlbXB0eSBidXQgZGF0YSBpbiB0cmFuc21pdCBGSUZPIGlzIG5vdCBjaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBjbGVhciBieSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5LCByZWFkIGl0IHJldHVybiB6ZXJvLgorICAgICAqIHxbMTldICAgIHxSWEZCQ0xSICAgfFJlY2VpdmUgRklGTyBCdWZmZXIgQ2xlYXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gRWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhciBSWCBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHJlY2VpdmUgRklGTywgaW50ZXJuYWwgcG9pbnRlciBpcyByZXNldCB0byBGSUZPIHN0YXJ0IHBvaW50LCBhbmQgUlhDTlQgKEkyU19TVEFUVVMxWzIwOjE2XSkgcmV0dXJucyAwIGFuZCByZWNlaXZlIEZJRk8gYmVjb21lcyBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5LCByZWFkIGl0IHJldHVybiB6ZXJvLgorICAgICAqIHxbMjBdICAgIHxUWFBETUFFTiAgfFRyYW5zbWl0IFBETUEgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgUERNQSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgUERNQSBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMjFdICAgIHxSWFBETUFFTiAgfFJlY2VpdmUgUERNQSBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlciBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlciBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyM10gICAgfFJYTENIICAgICB8UmVjZWl2ZSBMZWZ0IENoYW5uZWwgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIG1vbmF1cmFsIGZvcm1hdCBpcyBzZWxlY3RlZCAoTU9OTyA9IDEpLCBJMlMgd2lsbCByZWNlaXZlIGNoYW5uZWwxIGRhdGEgaWYgUlhMQ0ggaXMgc2V0IHRvIDAsIGFuZCByZWNlaXZlIGNoYW5uZWwwIGRhdGEgaWYgUlhMQ0ggaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmVzIGNoYW5uZWwxIGRhdGEgaW4gTU9OTyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlcyBjaGFubmVsMCBkYXRhIGluIE1PTk8gbW9kZS4KKyAgICAgKiB8WzI2OjI0XSB8Rk9STUFUICAgIHxEYXRhIEZvcm1hdCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBJMlMgc3RhbmRhcmQgZGF0YSBmb3JtYXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gSTJTIHdpdGggTVNCIGp1c3RpZmllZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBJMlMgd2l0aCBMU0IganVzdGlmaWVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFBDTSBzdGFuZGFyZCBkYXRhIGZvcm1hdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBQQ00gd2l0aCBNU0IganVzdGlmaWVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IFBDTSB3aXRoIExTQiBqdXN0aWZpZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gUmVzZXJ2ZWQuCisgICAgICogfFsyN10gICAgfFBDTVNZTkMgICB8UENNIFN5bmNocm9uaXphdGlvbiBQdWxzZSBMZW5ndGggU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgaXMgdXNlZCB0byBzZWxlY3QgdGhlIGhpZ2ggcHVsc2UgbGVuZ3RoIG9mIGZyYW1lIHN5bmNocm9uaXphdGlvbiBzaWduYWwgaW4gUENNIHByb3RvY29sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE9uZSBCQ0xLIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT25lIGNoYW5uZWwgcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIG9ubHkgYXZhaWxhYmxlIGluIG1hc3RlciBtb2RlCisgICAgICogfFsyOToyOF0gfENIV0lEVEggICB8Q2hhbm5lbCBXaWR0aAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkcyBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIGxlbmd0aCBvZiBhdWRpbyBjaGFubmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQ0hXSURUSCA8IERBVFdJRFRILCB0aGUgaGFyZHdhcmUgd2lsbCBzZXQgdGhlIHJlYWwgY2hhbm5lbCBsZW5ndGggYXMgdGhlIGJpdC13aWR0aCBvZiBhdWRpbyBkYXRhIHdoaWNoIGlzIGRlZmluZWQgYnkgREFUV0lEVEguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBUaGUgYml0LXdpZHRoIG9mIGVhY2ggYXVkaW8gY2hhbm5lbCBpcyA4LWJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFRoZSBiaXQtd2lkdGggb2YgZWFjaCBhdWRpbyBjaGFubmVsIGlzIDE2LWJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFRoZSBiaXQtd2lkdGggb2YgZWFjaCBhdWRpbyBjaGFubmVsIGlzIDI0LWJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFRoZSBiaXQtd2lkdGggb2YgZWFjaCBhdWRpbyBjaGFubmVsIGlzIDMyLWJpdC4KKyAgICAgKiB8WzMxOjMwXSB8VERNQ0hOVU0gIHxURE0gQ2hhbm5lbCBOdW1iZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZHMgYXJlIHVzZWQgdG8gZGVmaW5lIHRoZSBURE0gY2hhbm5lbCBudW1iZXIgaW4gb25lIGF1ZGlvIGZyYW1lIHdoaWxlIFBDTSBtb2RlIChGT1JNQVRbMl0gPSAxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IDIgY2hhbm5lbHMgaW4gYXVkaW8gZnJhbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSA0IGNoYW5uZWxzIGluIGF1ZGlvIGZyYW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gNiBjaGFubmVscyBpbiBhdWRpbyBmcmFtZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IDggY2hhbm5lbHMgaW4gYXVkaW8gZnJhbWUuCisgICAgICogQHZhciBJMlNfVDo6Q0xLRElWCisgICAgICogT2Zmc2V0OiAweDA0ICBJMlMgQ2xvY2sgRGl2aWRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs1OjBdICAgfE1DTEtESVYgICB8TWFzdGVyIENsb2NrIERpdmlkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBjaGlwIGV4dGVybmFsIGNyeXN0YWwgZnJlcXVlbmN5IGlzICgyeE1DTEtESVYpKjI1NmZzIHRoZW4gc29mdHdhcmUgY2FuIHByb2dyYW0gdGhlc2UgYml0cyB0byBnZW5lcmF0ZSAyNTZmcyBjbG9jayBmcmVxdWVuY3kgdG8gYXVkaW8gY29kZWMgY2hpcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIE1DTEtESVYgaXMgc2V0IHRvIDAsIE1DTEsgaXMgdGhlIHNhbWUgYXMgZXh0ZXJuYWwgY2xvY2sgaW5wdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIGV4YW1wbGUsIHNhbXBsaW5nIHJhdGUgaXMgMjQga0h6IGFuZCBjaGlwIGV4dGVybmFsIGNyeXN0YWwgY2xvY2sgaXMgMTIuMjg4IE1Ieiwgc2V0IE1DTEtESVYgPSAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZfTUNMSyA9IEZfSTJTQ0xLLygyeChNQ0xLRElWKSkgKFdoZW4gTUNMS0RJViBpcyA+PSAxICkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rl9NQ0xLID0gRl9JMlNDTEsgKFdoZW4gTUNMS0RJViBpcyBzZXQgdG8gMCApLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEZfTUNMSyBpcyB0aGUgZnJlcXVlbmN5IG9mIE1DTEssIGFuZCBGX0kyU0NMSyBpcyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBJMlNfQ0xLCisgICAgICogfFsxNjo4XSAgfEJDTEtESVYgICB8Qml0IENsb2NrIERpdmlkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgSTJTIGNvbnRyb2xsZXIgd2lsbCBnZW5lcmF0ZSBiaXQgY2xvY2sgaW4gTWFzdGVyIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gcHJvZ3JhbSB0aGVzZSBiaXQgZmllbGRzIHRvIGdlbmVyYXRlIHNhbXBsaW5nIHJhdGUgY2xvY2sgZnJlcXVlbmN5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZfQkNMSz0gRl9JMlNDTEsgLyAoMiooQkNMS0RJViArIDEpKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBGX0JDTEsgaXMgdGhlIGZyZXF1ZW5jeSBvZiBCQ0xLIGFuZCBGX0kyU0NMSyBpcyB0aGUgZnJlcXVlbmN5IG9mIEkyU19DTEsKKyAgICAgKiBAdmFyIEkyU19UOjpJRU4KKyAgICAgKiBPZmZzZXQ6IDB4MDggIEkyUyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UlhVREZJRU4gIHxSZWNlaXZlIEZJRk8gVW5kZXJmbG93IEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIHNvZnR3YXJlIHJlYWRzIHJlY2VpdmUgRklGTyB3aGVuIGl0IGlzIGVtcHR5IHRoZW4gUlhVRElGIChJMlNfU1RBVFVTMFs4XSkgZmxhZyBpcyBzZXQgdG8gMS4KKyAgICAgKiB8WzFdICAgICB8UlhPVkZJRU4gIHxSZWNlaXZlIEZJRk8gT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW50ZXJydXB0IG9jY3VycyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgUlhPVklGIChJMlNfU1RBVFVTMFs5XSkgZmxhZyBpcyBzZXQgdG8gMQorICAgICAqIHxbMl0gICAgIHxSWFRISUVOICAgfFJlY2VpdmUgRklGTyBUaHJlc2hvbGQgTGV2ZWwgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBkYXRhIHdvcmQgaW4gcmVjZWl2ZSBGSUZPIGlzIGVxdWFsIG9yIGhpZ2hlciB0aGFuIFJYVEggKEkyU19DVEwxWzE5OjE2XSkgYW5kIHRoZSBSWFRISUYgKEkyU19TVEFUVVMwWzEwXSkgYml0IGlzIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgUlhUSElFTiBiaXQgaXMgZW5hYmxlZCwgaW50ZXJydXB0IG9jY3VyLgorICAgICAqIHxbOF0gICAgIHxUWFVERklFTiAgfFRyYW5zbWl0IEZJRk8gVW5kZXJmbG93IEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEludGVycnVwdCBvY2N1ciBpZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgVFhVRElGIChJMlNfU1RBVFVTMFsxNl0pIGZsYWcgaXMgc2V0IHRvIDEuCisgICAgICogfFs5XSAgICAgfFRYT1ZGSUVOICB8VHJhbnNtaXQgRklGTyBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbnRlcnJ1cHQgb2NjdXJzIGlmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCBUWE9WSUYgKEkyU19TVEFUVVMwWzE3XSkgZmxhZyBpcyBzZXQgdG8gMQorICAgICAqIHxbMTBdICAgIHxUWFRISUVOICAgfFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkIExldmVsIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEludGVycnVwdCBvY2N1cnMgaWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIGRhdGEgd29yZHMgaW4gdHJhbnNtaXQgRklGTyBpcyBsZXNzIHRoYW4gVFhUSCAoSTJTX0NUTDFbMTE6OF0pLgorICAgICAqIHxbMTZdICAgIHxDSDBaQ0lFTiAgfENoYW5uZWwwIFplcm8tY3Jvc3MgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEludGVycnVwdCBvY2N1cnMgaWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIGNoYW5uZWwwIHplcm8tY3Jvc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQ2hhbm5lbDAgYWxzbyBtZWFucyBsZWZ0IGF1ZGlvIGNoYW5uZWwgd2hpbGUgSTJTIChGT1JNQVRbMl09MCkgb3IgMi1jaGFubmVsIFBDTSBtb2RlLgorICAgICAqIHxbMTddICAgIHxDSDFaQ0lFTiAgfENoYW5uZWwxIFplcm8tY3Jvc3MgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEludGVycnVwdCBvY2N1cnMgaWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIGNoYW5uZWwxIHplcm8tY3Jvc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQ2hhbm5lbDEgYWxzbyBtZWFucyByaWdodCBhdWRpbyBjaGFubmVsIHdoaWxlIEkyUyAoRk9STUFUWzJdPTApIG9yIDItY2hhbm5lbCBQQ00gbW9kZS4KKyAgICAgKiB8WzE4XSAgICB8Q0gyWkNJRU4gIHxDaGFubmVsMiBaZXJvLWNyb3NzIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJbnRlcnJ1cHQgb2NjdXJzIGlmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCBjaGFubmVsMiB6ZXJvLWNyb3NzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBtdWx0aS1jaGFubmVsIFBDTSBtb2RlIGFuZCBURE1DSE5VTSAoSTJTX0NUTDBbMzE6MzBdKSA9IDB4MSwgMHgyLCAweDMuCisgICAgICogfFsxOV0gICAgfENIM1pDSUVOICB8Q2hhbm5lbDMgWmVyby1jcm9zcyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSW50ZXJydXB0IG9jY3VycyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgY2hhbm5lbDMgemVyby1jcm9zcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgbXVsdGktY2hhbm5lbCBQQ00gbW9kZSBhbmQgVERNQ0hOVU0gKEkyU19DVEwwWzMxOjMwXSkgPSAweDEsIDB4MiwgMHgzLgorICAgICAqIHxbMjBdICAgIHxDSDRaQ0lFTiAgfENoYW5uZWw0IFplcm8tY3Jvc3MgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEludGVycnVwdCBvY2N1cnMgaWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIGNoYW5uZWw0IHplcm8tY3Jvc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgYXZhaWxhYmxlIHdoaWxlIG11bHRpLWNoYW5uZWwgUENNIG1vZGUgYW5kIFRETUNITlVNIChJMlNfQ1RMMFszMTozMF0pID0gMHgxLCAweDIsIDB4My4KKyAgICAgKiB8WzIxXSAgICB8Q0g1WkNJRU4gIHxDaGFubmVsNSBaZXJvLWNyb3NzIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJbnRlcnJ1cHQgb2NjdXJzIGlmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCBjaGFubmVsNSB6ZXJvLWNyb3NzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBtdWx0aS1jaGFubmVsIFBDTSBtb2RlIGFuZCBURE1DSE5VTSAoSTJTX0NUTDBbMzE6MzBdKSA9IDB4MSwgMHgyLCAweDMuCisgICAgICogfFsyMl0gICAgfENINlpDSUVOICB8Q2hhbm5lbDYgWmVyby1jcm9zcyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSW50ZXJydXB0IG9jY3VycyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgY2hhbm5lbDYgemVyby1jcm9zcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgbXVsdGktY2hhbm5lbCBQQ00gbW9kZSBhbmQgVERNQ0hOVU0gKEkyU19DVEwwWzMxOjMwXSkgPSAweDEsIDB4MiwgMHgzLgorICAgICAqIHxbMjNdICAgIHxDSDdaQ0lFTiAgfENoYW5uZWw3IFplcm8tY3Jvc3MgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEludGVycnVwdCBvY2N1cnMgaWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIGNoYW5uZWw3IHplcm8tY3Jvc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgYXZhaWxhYmxlIHdoaWxlIG11bHRpLWNoYW5uZWwgUENNIG1vZGUgYW5kIFRETUNITlVNIChJMlNfQ1RMMFszMTozMF0pID0gMHgxLCAweDIsIDB4My4KKyAgICAgKiBAdmFyIEkyU19UOjpTVEFUVVMwCisgICAgICogT2Zmc2V0OiAweDBDICBJMlMgU3RhdHVzIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxJMlNJTlQgICAgfEkyUyBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBJMlMgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJMlMgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIHdpcmUtT1Igb2YgSTJTVFhJTlQgYW5kIEkyU1JYSU5UIGJpdHMuCisgICAgICogfFsxXSAgICAgfEkyU1JYSU5UICB8STJTIFJlY2VpdmUgSW50ZXJydXB0IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHJlY2VpdmUgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIGludGVycnVwdC4KKyAgICAgKiB8WzJdICAgICB8STJTVFhJTlQgIHxJMlMgVHJhbnNtaXQgSW50ZXJydXB0IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHRyYW5zbWl0IGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgaW50ZXJydXB0LgorICAgICAqIHxbNTozXSAgIHxEQVRBQ0ggICAgfFRyYW5zbWlzc2lvbiBEYXRhIENoYW5uZWwgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZHMgYXJlIHVzZWQgdG8gaW5kaWNhdGUgd2hpY2ggYXVkaW8gY2hhbm5lbCBpcyBjdXJyZW50IHRyYW5zbWl0IGRhdGEgYmVsb25nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IGNoYW5uZWwwIChtZWFucyBsZWZ0IGNoYW5uZWwgd2hpbGUgMi1jaGFubmVsIEkyUy9QQ00gbW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gY2hhbm5lbDEgKG1lYW5zIHJpZ2h0IGNoYW5uZWwgd2hpbGUgMi1jaGFubmVsIEkyUy9QQ00gbW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gY2hhbm5lbDIgKGF2YWlsYWJsZSB3aGlsZSA0LWNoYW5uZWwgVERNIFBDTSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBjaGFubmVsMyAoYXZhaWxhYmxlIHdoaWxlIDQtY2hhbm5lbCBURE0gUENNIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IGNoYW5uZWw0IChhdmFpbGFibGUgd2hpbGUgNi1jaGFubmVsIFRETSBQQ00gbW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gY2hhbm5lbDUgKGF2YWlsYWJsZSB3aGlsZSA2LWNoYW5uZWwgVERNIFBDTSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSBjaGFubmVsNiAoYXZhaWxhYmxlIHdoaWxlIDgtY2hhbm5lbCBURE0gUENNIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IGNoYW5uZWw3IChhdmFpbGFibGUgd2hpbGUgOC1jaGFubmVsIFRETSBQQ00gbW9kZSkuCisgICAgICogfFs4XSAgICAgfFJYVURJRiAgICB8UmVjZWl2ZSBGSUZPIFVuZGVyZmxvdyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB1bmRlcmZsb3cgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVuZGVyZmxvdyBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV2hlbiByZWNlaXZlIEZJRk8gaXMgZW1wdHksIGFuZCBzb2Z0d2FyZSByZWFkcyB0aGUgcmVjZWl2ZSBGSUZPIGFnYWluCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBzZXQgdG8gMSwgYW5kIGl0IGluZGljYXRlcyB1bmRlcmZsb3cgc2l0dWF0aW9uIG9jY3Vycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byB6ZXJvCisgICAgICogfFs5XSAgICAgfFJYT1ZJRiAgICB8UmVjZWl2ZSBGSUZPIE92ZXJmbG93IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIG92ZXJmbG93IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdmVyZmxvdyBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV2hlbiByZWNlaXZlIEZJRk8gaXMgZnVsbCBhbmQgcmVjZWl2ZSBoYXJkd2FyZSBhdHRlbXB0IHRvIHdyaXRlIGRhdGEgaW50byByZWNlaXZlIEZJRk8gdGhlbiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgZGF0YSBpbiAxc3QgYnVmZmVyIGlzIG92ZXJ3cm90ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHxbMTBdICAgIHxSWFRISUYgICAgfFJlY2VpdmUgRklGTyBUaHJlc2hvbGQgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGF0YSB3b3JkKHMpIGluIEZJRk8gaXMgbm90IGhpZ2hlciB0aGFuIHRocmVzaG9sZCBsZXZlbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSB3b3JkKHMpIGluIEZJRk8gaXMgaGlnaGVyIHRoYW4gdGhyZXNob2xkIGxldmVsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gZGF0YSB3b3JkKHMpIGluIHJlY2VpdmUgRklGTyBpcyBoaWdoZXIgdGhhbiB0aHJlc2hvbGQgdmFsdWUgc2V0IGluIFJYVEggKEkyU19DVEwxWzE5OjE2XSkgdGhlIFJYVEhJRiBiaXQgYmVjb21lcyB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQga2VlcHMgYXQgMSB0aWxsIFJYQ05UIChJMlNfU1RBVFVTMVsyMDoxNl0pIGlzIG5vdCBoaWdoZXIgdGhhbiBSWFRIIChJMlNfQ1RMMVsxOToxNl0pIGFmdGVyIHNvZnR3YXJlIHJlYWQgUlhGSUZPIHJlZ2lzdGVyLgorICAgICAqIHxbMTFdICAgIHxSWEZVTEwgICAgfFJlY2VpdmUgRklGTyBGdWxsIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vdCBmdWxsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGdWxsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHJlZmxlY3RzIGRhdGEgd29yZHMgbnVtYmVyIGluIHJlY2VpdmUgRklGTyBpcyAxNi4KKyAgICAgKiB8WzEyXSAgICB8UlhFTVBUWSAgIHxSZWNlaXZlIEZJRk8gRW1wdHkgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCByZWZsZWN0cyBkYXRhIHdvcmRzIG51bWJlciBpbiByZWNlaXZlIEZJRk8gaXMgemVybworICAgICAqIHxbMTZdICAgIHxUWFVESUYgICAgfFRyYW5zbWl0IEZJRk8gVW5kZXJmbG93IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHVuZGVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVW5kZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCB3aWxsIGJlIHNldCB0byAxIHdoZW4gc2hpZnQgbG9naWMgaGFyZHdhcmUgcmVhZCBkYXRhIGZyb20gdHJhbnNtaXR0aW5nIEZJRk8gYW5kIHRoZSBmaWxsaW5nIGRhdGEgbGV2ZWwgaW4gdHJhbnNtaXR0aW5nIEZJRk8gaXMgbm90IGVub3VnaCBmb3Igb25lIGF1ZGlvIGZyYW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfFsxN10gICAgfFRYT1ZJRiAgICB8VHJhbnNtaXQgRklGTyBPdmVyZmxvdyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIGRhdGEgdG8gdHJhbnNtaXQgRklGTyB3aGVuIGl0IGlzIGZ1bGwgYW5kIHRoaXMgYml0IHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8WzE4XSAgICB8VFhUSElGICAgIHxUcmFuc21pdCBGSUZPIFRocmVzaG9sZCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIHdvcmQocykgaW4gRklGTyBpcyBoaWdoZXIgdGhhbiB0aHJlc2hvbGQgbGV2ZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERhdGEgd29yZChzKSBpbiBGSUZPIGlzIGVxdWFsIG9yIGxvd2VyIHRoYW4gdGhyZXNob2xkIGxldmVsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gZGF0YSB3b3JkKHMpIGluIHRyYW5zbWl0IEZJRk8gaXMgZXF1YWwgb3IgbG93ZXIgdGhhbiB0aHJlc2hvbGQgdmFsdWUgc2V0IGluIFRYVEggKEkyU19DVEwxWzExOjhdKSB0aGUgVFhUSElGIGJpdCBiZWNvbWVzIHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBrZWVwcyBhdCAxIHRpbGwgVFhDTlQgKEkyU19TVEFUVVMxWzEyOjhdKSBpcyBoaWdoZXIgdGhhbiBUWFRIIChJMlNfQ1RMMVsxMTo4XSkgYWZ0ZXIgc29mdHdhcmUgd3JpdGUgVFhGSUZPIHJlZ2lzdGVyLgorICAgICAqIHxbMTldICAgIHxUWEZVTEwgICAgfFRyYW5zbWl0IEZJRk8gRnVsbCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHJlZmxlY3QgZGF0YSB3b3JkIG51bWJlciBpbiB0cmFuc21pdCBGSUZPIGlzIDE2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vdCBmdWxsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGdWxsLgorICAgICAqIHxbMjBdICAgIHxUWEVNUFRZICAgfFRyYW5zbWl0IEZJRk8gRW1wdHkgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCByZWZsZWN0IGRhdGEgd29yZCBudW1iZXIgaW4gdHJhbnNtaXQgRklGTyBpcyB6ZXJvCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vdCBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW1wdHkuCisgICAgICogfFsyMV0gICAgfFRYQlVTWSAgICB8VHJhbnNtaXQgQnVzeSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBzaGlmdCBidWZmZXIgaXMgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IHNoaWZ0IGJ1ZmZlciBpcyBidXN5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgdG8gMCB3aGVuIGFsbCBkYXRhIGluIHRyYW5zbWl0IEZJRk8gYW5kIHNoaWZ0IGJ1ZmZlciBpcyBzaGlmdGVkIG91dAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFuZCBzZXQgdG8gMSB3aGVuIDFzdCBkYXRhIGlzIGxvYWQgdG8gc2hpZnQgYnVmZmVyCisgICAgICogQHZhciBJMlNfVDo6VFhGSUZPCisgICAgICogT2Zmc2V0OiAweDEwICBJMlMgVHJhbnNtaXQgRklGTyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFRYRklGTyAgICB8VHJhbnNtaXQgRklGTyBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8STJTIGNvbnRhaW5zIDE2IHdvcmRzICgxNngzMiBiaXQpIGRhdGEgYnVmZmVyIGZvciBkYXRhIHRyYW5zbWl0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgZGF0YSB0byB0aGlzIHJlZ2lzdGVyIHRvIHByZXBhcmUgZGF0YSBmb3IgdHJhbnNtaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVtYWluaW5nIHdvcmQgbnVtYmVyIGlzIGluZGljYXRlZCBieSBUWENOVCAoSTJTX1NUQVRVUzFbMTI6OF0pLgorICAgICAqIEB2YXIgSTJTX1Q6OlJYRklGTworICAgICAqIE9mZnNldDogMHgxNCAgSTJTIFJlY2VpdmUgRklGTyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFJYRklGTyAgICB8UmVjZWl2ZSBGSUZPIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJMlMgY29udGFpbnMgMTYgd29yZHMgKDE2eDMyIGJpdCkgZGF0YSBidWZmZXIgZm9yIGRhdGEgcmVjZWl2ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgdGhpcyByZWdpc3RlciB0byBnZXQgZGF0YSBpbiBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlbWFpbmluZyBkYXRhIHdvcmQgbnVtYmVyIGlzIGluZGljYXRlZCBieSBSWENOVCAoSTJTX1NUQVRVUzFbMjA6MTZdKS4KKyAgICAgKiBAdmFyIEkyU19UOjpDVEwxCisgICAgICogT2Zmc2V0OiAweDIwICBJMlMgQ29udHJvbCBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q0gwWkNFTiAgIHxDaGFubmVsMCBaZXJvLWNyb3NzIERldGVjdGlvbiBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBjaGFubmVsMCB6ZXJvLWNyb3NzIGRldGVjdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gY2hhbm5lbDAgemVyby1jcm9zcyBkZXRlY3QgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQ2hhbm5lbDAgYWxzbyBtZWFucyBsZWZ0IGF1ZGlvIGNoYW5uZWwgd2hpbGUgSTJTIChGT1JNQVRbMl09MCkgb3IgMi1jaGFubmVsIFBDTSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd2hlbiBjaGFubmVsMCBkYXRhIHNpZ24gYml0IGNoYW5nZSBvciBuZXh0IHNoaWZ0IGRhdGEgYml0cyBhcmUgYWxsIHplcm8gdGhlbiBDSDBaQ0lGKEkyU19TVEFUVVMxWzBdKSBmbGFnIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBJZiBDSDBaQ0lGIEZsYWcgaXMgc2V0IHRvIDEsIHRoZSBjaGFubmVsMCB3aWxsIGJlIG11dGUuCisgICAgICogfFsxXSAgICAgfENIMVpDRU4gICB8Q2hhbm5lbDEgWmVyby1jcm9zcyBEZXRlY3QgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gY2hhbm5lbDEgemVyby1jcm9zcyBkZXRlY3QgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IGNoYW5uZWwxIHplcm8tY3Jvc3MgZGV0ZWN0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IENoYW5uZWwxIGFsc28gbWVhbnMgcmlnaHQgYXVkaW8gY2hhbm5lbCB3aGlsZSBJMlMgKEZPUk1BVFsyXT0wKSBvciAyLWNoYW5uZWwgUENNIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB3aGVuIGNoYW5uZWwxIGRhdGEgc2lnbiBiaXQgY2hhbmdlIG9yIG5leHQgc2hpZnQgZGF0YSBiaXRzIGFyZSBhbGwgemVybyB0aGVuIENIMVpDSUYoSTJTX1NUQVRVUzFbMV0pIGZsYWcgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIENIMVpDSUYgRmxhZyBpcyBzZXQgdG8gMSwgdGhlIGNoYW5uZWwxIHdpbGwgYmUgbXV0ZS4KKyAgICAgKiB8WzJdICAgICB8Q0gyWkNFTiAgIHxDaGFubmVsMiBaZXJvLWNyb3NzIERldGVjdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBjaGFubmVsMiB6ZXJvLWNyb3NzIGRldGVjdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gY2hhbm5lbDIgemVyby1jcm9zcyBkZXRlY3QgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgYXZhaWxhYmxlIHdoaWxlIG11bHRpLWNoYW5uZWwgUENNIG1vZGUgYW5kIFRETUNITlVNIChJMlNfQ1RMMFszMTozMF0pID0gMHgxLCAweDIsIDB4My4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHdoZW4gY2hhbm5lbDIgZGF0YSBzaWduIGJpdCBjaGFuZ2Ugb3IgbmV4dCBzaGlmdCBkYXRhIGJpdHMgYXJlIGFsbCB6ZXJvIHRoZW4gQ0gyWkNJRihJMlNfU1RBVFVTMVsyXSkgZmxhZyBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogSWYgQ0gyWkNJRiBGbGFnIGlzIHNldCB0byAxLCB0aGUgY2hhbm5lbDIgd2lsbCBiZSBtdXRlLgorICAgICAqIHxbM10gICAgIHxDSDNaQ0VOICAgfENoYW5uZWwzIFplcm8tY3Jvc3MgRGV0ZWN0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IGNoYW5uZWwzIHplcm8tY3Jvc3MgZGV0ZWN0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBjaGFubmVsMyB6ZXJvLWNyb3NzIGRldGVjdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgbXVsdGktY2hhbm5lbCBQQ00gbW9kZSBhbmQgVERNQ0hOVU0gKEkyU19DVEwwWzMxOjMwXSkgPSAweDEsIDB4MiwgMHgzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd2hlbiBjaGFubmVsMyBkYXRhIHNpZ24gYml0IGNoYW5nZSBvciBuZXh0IHNoaWZ0IGRhdGEgYml0cyBhcmUgYWxsIHplcm8gdGhlbiBDSDNaQ0lGKEkyU19TVEFUVVMxWzNdKSBmbGFnIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBJZiBDSDNaQ0lGIEZsYWcgaXMgc2V0IHRvIDEsIHRoZSBjaGFubmVsMyB3aWxsIGJlIG11dGUuCisgICAgICogfFs0XSAgICAgfENINFpDRU4gICB8Q2hhbm5lbDQgWmVyby1jcm9zcyBEZXRlY3QgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gY2hhbm5lbDQgemVyby1jcm9zcyBkZXRlY3QgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IGNoYW5uZWw0IHplcm8tY3Jvc3MgZGV0ZWN0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBtdWx0aS1jaGFubmVsIFBDTSBtb2RlIGFuZCBURE1DSE5VTSAoSTJTX0NUTDBbMzE6MzBdKSA9IDB4MSwgMHgyLCAweDMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB3aGVuIGNoYW5uZWw0IGRhdGEgc2lnbiBiaXQgY2hhbmdlIG9yIG5leHQgc2hpZnQgZGF0YSBiaXRzIGFyZSBhbGwgemVybyB0aGVuIENINFpDSUYoSTJTX1NUQVRVUzFbNF0pIGZsYWcgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIENINFpDSUYgRmxhZyBpcyBzZXQgdG8gMSwgdGhlIGNoYW5uZWw0IHdpbGwgYmUgbXV0ZS4KKyAgICAgKiB8WzVdICAgICB8Q0g1WkNFTiAgIHxDaGFubmVsNSBaZXJvLWNyb3NzIERldGVjdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBjaGFubmVsNSB6ZXJvLWNyb3NzIGRldGVjdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gY2hhbm5lbDUgemVyby1jcm9zcyBkZXRlY3QgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgYXZhaWxhYmxlIHdoaWxlIG11bHRpLWNoYW5uZWwgUENNIG1vZGUgYW5kIFRETUNITlVNIChJMlNfQ1RMMFszMTozMF0pID0gMHgxLCAweDIsIDB4My4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHdoZW4gY2hhbm5lbDUgZGF0YSBzaWduIGJpdCBjaGFuZ2Ugb3IgbmV4dCBzaGlmdCBkYXRhIGJpdHMgYXJlIGFsbCB6ZXJvIHRoZW4gQ0g1WkNJRihJMlNfU1RBVFVTMVs1XSkgZmxhZyBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogSWYgQ0g1WkNJRiBGbGFnIGlzIHNldCB0byAxLCB0aGUgY2hhbm5lbDUgd2lsbCBiZSBtdXRlLgorICAgICAqIHxbNl0gICAgIHxDSDZaQ0VOICAgfENoYW5uZWw2IFplcm8tY3Jvc3MgRGV0ZWN0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IGNoYW5uZWw2IHplcm8tY3Jvc3MgZGV0ZWN0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBjaGFubmVsNiB6ZXJvLWNyb3NzIGRldGVjdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgbXVsdGktY2hhbm5lbCBQQ00gbW9kZSBhbmQgVERNQ0hOVU0gKEkyU19DVEwwWzMxOjMwXSkgPSAweDEsIDB4MiwgMHgzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd2hlbiBjaGFubmVsNiBkYXRhIHNpZ24gYml0IGNoYW5nZSBvciBuZXh0IHNoaWZ0IGRhdGEgYml0cyBhcmUgYWxsIHplcm8gdGhlbiBDSDZaQ0lGKEkyU19TVEFUVVMxWzZdKSBmbGFnIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBJZiBDSDZaQ0lGIEZsYWcgaXMgc2V0IHRvIDEsIHRoZSBjaGFubmVsNiB3aWxsIGJlIG11dGUuCisgICAgICogfFs3XSAgICAgfENIN1pDRU4gICB8Q2hhbm5lbDcgWmVyby1jcm9zcyBEZXRlY3QgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gY2hhbm5lbDcgemVyby1jcm9zcyBkZXRlY3QgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IGNoYW5uZWw3IHplcm8tY3Jvc3MgZGV0ZWN0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBtdWx0aS1jaGFubmVsIFBDTSBtb2RlIGFuZCBURE1DSE5VTSAoSTJTX0NUTDBbMzE6MzBdKSA9IDB4MSwgMHgyLCAweDMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB3aGVuIGNoYW5uZWw3IGRhdGEgc2lnbiBiaXQgY2hhbmdlIG9yIG5leHQgc2hpZnQgZGF0YSBiaXRzIGFyZSBhbGwgemVybyB0aGVuIENIN1pDSUYgKEkyU19TVEFUVVMxWzddKSBmbGFnIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBJZiBDSDdaQ0lGIEZsYWcgaXMgc2V0IHRvIDEsIHRoZSBjaGFubmVsNyB3aWxsIGJlIG11dGUuCisgICAgICogfFsxMTo4XSAgfFRYVEggICAgICB8VHJhbnNtaXQgRklGTyBUaHJlc2hvbGQgTGV2ZWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gMCBkYXRhIHdvcmQgaW4gdHJhbnNtaXQgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gMSBkYXRhIHdvcmQgaW4gdHJhbnNtaXQgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gMiBkYXRhIHdvcmRzIGluIHRyYW5zbWl0IEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Li4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMCA9IDE0IGRhdGEgd29yZHMgaW4gdHJhbnNtaXQgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTExID0gMTUgZGF0YSB3b3JkcyBpbiB0cmFuc21pdCBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIHJlbWFpbiBkYXRhIHdvcmQgbnVtYmVyIGluIHRyYW5zbWl0IEZJRk8gaXMgdGhlIHNhbWUgb3IgbGVzcyB0aGFuIHRocmVzaG9sZCBsZXZlbCB0aGVuIFRYVEhJRiAoSTJTX1NUQVRVUzBbMThdKSBmbGFnIGlzIHNldC4KKyAgICAgKiB8WzE5OjE2XSB8UlhUSCAgICAgIHxSZWNlaXZlIEZJRk8gVGhyZXNob2xkIExldmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IDEgZGF0YSB3b3JkIGluIHJlY2VpdmUgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gMiBkYXRhIHdvcmRzIGluIHJlY2VpdmUgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gMyBkYXRhIHdvcmRzIGluIHJlY2VpdmUgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwuLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEwID0gMTUgZGF0YSB3b3JkcyBpbiByZWNlaXZlIEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMSA9IDE2IGRhdGEgd29yZHMgaW4gcmVjZWl2ZSBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gcmVjZWl2ZWQgZGF0YSB3b3JkIG51bWJlciBpbiByZWNlaXZlIGJ1ZmZlciBpcyBncmVhdGVyIHRoYW4gdGhyZXNob2xkIGxldmVsIHRoZW4gUlhUSElGIChJMlNfU1RBVFVTMFsxMF0pIGZsYWcgaXMgc2V0LgorICAgICAqIHxbMjRdICAgIHxQQldJRFRIICAgfFBlcmlwaGVyYWwgQnVzIERhdGEgV2lkdGggU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBjaG9pY2UgdGhlIGF2YWlsYWJsZSBkYXRhIHdpZHRoIG9mIEFQQiBidXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBtdXN0IGJlIHNldCB0byAxIHdoaWxlIFBETUEgZnVuY3Rpb24gaXMgZW5hYmxlIGFuZCBpdCBpcyBzZXQgdG8gMTYtYml0IHRyYW5zbWlzc2lvbiBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDMyIGJpdHMgZGF0YSB3aWR0aC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMTYgYml0cyBkYXRhIHdpZHRoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBQQldJRFRIPTEsIHRoZSBsb3cgMTYgYml0cyBvZiAzMi1iaXQgZGF0YSBidXMgYXJlIGF2YWlsYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSWYgUEJXSURUSD0xLCB0aGUgdHJhbnNtaXR0aW5nIEZJRk8gbGV2ZWwgd2lsbCBiZSBpbmNyZWFzZWQgYWZ0ZXIgdHdvIEZJRk8gd3JpdGUgb3BlcmF0aW9ucy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogSWYgUEJXSURUSD0xLCB0aGUgcmVjZWl2aW5nIEZJRk8gbGV2ZWwgd2lsbCBiZSBkZWNyZWFzZWQgYWZ0ZXIgdHdvIEZJRk8gcmVhZCBvcGVyYXRpb25zLgorICAgICAqIHxbMjVdICAgIHxQQjE2T1JEICAgfEZJRk8gUmVhZC9Xcml0ZSBPcmRlciBpbiAxNi1iaXQgV2lkdGggb2YgUGVyaXBoZXJhbCBCdXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFBCV0lEVEggPSAxLCB0aGUgZGF0YSBGSUZPIHdpbGwgYmUgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBieSB0d28gcGVyaXBoZXJhbCBidXMgYWNjZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBzZWxlY3QgdGhlIG9yZGVyIG9mIEZJRk8gYWNjZXNzIG9wZXJhdGlvbnMgdG8gbWVldCB0aGUgMzItYml0IHRyYW5zbWl0dGluZy9yZWNlaXZpbmcgRklGTyBlbnRyaWVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMb3cgMTYtYml0IHJlYWQvd3JpdGUgYWNjZXNzIGZpcnN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBIaWdoIDE2LWJpdCByZWFkL3dyaXRlIGFjY2VzcyBmaXJzdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgUEJXSURUSCA9IDEuCisgICAgICogQHZhciBJMlNfVDo6U1RBVFVTMQorICAgICAqIE9mZnNldDogMHgyNCAgSTJTIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q0gwWkNJRiAgIHxDaGFubmVsMCBaZXJvLWNyb3NzIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaW5kaWNhdGVzIGNoYW5uZWwwIG5leHQgc2FtcGxlIGRhdGEgc2lnbiBiaXQgaXMgY2hhbmdlZCBvciBhbGwgZGF0YSBiaXRzIGFyZSB6ZXJvLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB6ZXJvLWNyb3NzIGluIGNoYW5uZWwwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsMCB6ZXJvLWNyb3NzIGlzIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IENoYW5uZWwwIGFsc28gbWVhbnMgbGVmdCBhdWRpbyBjaGFubmVsIHdoaWxlIEkyUyAoRk9STUFUWzJdPTApIG9yIDItY2hhbm5lbCBQQ00gbW9kZS4KKyAgICAgKiB8WzFdICAgICB8Q0gxWkNJRiAgIHxDaGFubmVsMSBaZXJvLWNyb3NzIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaW5kaWNhdGVzIGNoYW5uZWwxIG5leHQgc2FtcGxlIGRhdGEgc2lnbiBiaXQgaXMgY2hhbmdlZCBvciBhbGwgZGF0YSBiaXRzIGFyZSB6ZXJvLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB6ZXJvLWNyb3NzIGluIGNoYW5uZWwxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsMSB6ZXJvLWNyb3NzIGlzIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IENoYW5uZWwxIGFsc28gbWVhbnMgcmlnaHQgYXVkaW8gY2hhbm5lbCB3aGlsZSBJMlMgKEZPUk1BVFsyXT0wKSBvciAyLWNoYW5uZWwgUENNIG1vZGUuCisgICAgICogfFsyXSAgICAgfENIMlpDSUYgICB8Q2hhbm5lbDIgWmVyby1jcm9zcyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGluZGljYXRlcyBjaGFubmVsMiBuZXh0IHNhbXBsZSBkYXRhIHNpZ24gYml0IGlzIGNoYW5nZWQgb3IgYWxsIGRhdGEgYml0cyBhcmUgemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gemVyby1jcm9zcyBpbiBjaGFubmVsMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hhbm5lbDIgemVyby1jcm9zcyBpcyBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgbXVsdGktY2hhbm5lbCBQQ00gbW9kZSBhbmQgVERNQ0hOVU0gKEkyU19DVEwwWzMxOjMwXSkgPSAweDEsIDB4MiwgMHgzLgorICAgICAqIHxbM10gICAgIHxDSDNaQ0lGICAgfENoYW5uZWwzIFplcm8tY3Jvc3MgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpbmRpY2F0ZXMgY2hhbm5lbDMgbmV4dCBzYW1wbGUgZGF0YSBzaWduIGJpdCBpcyBjaGFuZ2VkIG9yIGFsbCBkYXRhIGJpdHMgYXJlIHplcm8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHplcm8tY3Jvc3MgaW4gY2hhbm5lbDMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWwzIHplcm8tY3Jvc3MgaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgYXZhaWxhYmxlIHdoaWxlIG11bHRpLWNoYW5uZWwgUENNIG1vZGUgYW5kIFRETUNITlVNIChJMlNfQ1RMMFszMTozMF0pID0gMHgxLCAweDIsIDB4My4KKyAgICAgKiB8WzRdICAgICB8Q0g0WkNJRiAgIHxDaGFubmVsNCBaZXJvLWNyb3NzIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaW5kaWNhdGVzIGNoYW5uZWw0IG5leHQgc2FtcGxlIGRhdGEgc2lnbiBiaXQgaXMgY2hhbmdlZCBvciBhbGwgZGF0YSBiaXRzIGFyZSB6ZXJvLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB6ZXJvLWNyb3NzIGluIGNoYW5uZWw0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsNCB6ZXJvLWNyb3NzIGlzIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBtdWx0aS1jaGFubmVsIFBDTSBtb2RlIGFuZCBURE1DSE5VTSAoSTJTX0NUTDBbMzE6MzBdKSA9IDB4MSwgMHgyLCAweDMuCisgICAgICogfFs1XSAgICAgfENINVpDSUYgICB8Q2hhbm5lbDUgWmVyby1jcm9zcyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGluZGljYXRlcyBjaGFubmVsNSBuZXh0IHNhbXBsZSBkYXRhIHNpZ24gYml0IGlzIGNoYW5nZWQgb3IgYWxsIGRhdGEgYml0cyBhcmUgemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gemVyby1jcm9zcyBpbiBjaGFubmVsNS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hhbm5lbDUgemVyby1jcm9zcyBpcyBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgbXVsdGktY2hhbm5lbCBQQ00gbW9kZSBhbmQgVERNQ0hOVU0gKEkyU19DVEwwWzMxOjMwXSkgPSAweDEsIDB4MiwgMHgzLgorICAgICAqIHxbNl0gICAgIHxDSDZaQ0lGICAgfENoYW5uZWw2IFplcm8tY3Jvc3MgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpbmRpY2F0ZXMgY2hhbm5lbDYgbmV4dCBzYW1wbGUgZGF0YSBzaWduIGJpdCBpcyBjaGFuZ2VkIG9yIGFsbCBkYXRhIGJpdHMgYXJlIHplcm8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHplcm8tY3Jvc3MgaW4gY2hhbm5lbDYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWw2IHplcm8tY3Jvc3MgaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgYXZhaWxhYmxlIHdoaWxlIG11bHRpLWNoYW5uZWwgUENNIG1vZGUgYW5kIFRETUNITlVNIChJMlNfQ1RMMFszMTozMF0pID0gMHgxLCAweDIsIDB4My4KKyAgICAgKiB8WzddICAgICB8Q0g3WkNJRiAgIHxDaGFubmVsNyBaZXJvLWNyb3NzIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaW5kaWNhdGVzIGNoYW5uZWw3IG5leHQgc2FtcGxlIGRhdGEgc2lnbiBiaXQgaXMgY2hhbmdlZCBvciBhbGwgZGF0YSBiaXRzIGFyZSB6ZXJvLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB6ZXJvLWNyb3NzIGluIGNoYW5uZWw3LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsNyB6ZXJvLWNyb3NzIGlzIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBtdWx0aS1jaGFubmVsIFBDTSBtb2RlIGFuZCBURE1DSE5VTSAoSTJTX0NUTDBbMzE6MzBdKSA9IDB4MSwgMHgyLCAweDMuCisgICAgICogfFsxMjo4XSAgfFRYQ05UICAgICB8VHJhbnNtaXQgRklGTyBMZXZlbCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgaW5kaWNhdGUgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgZW50cmllcyBpbiB0cmFuc21pdCBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMDAgPSBObyBkYXRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAxID0gMSB3b3JkIGluIHRyYW5zbWl0IEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMTAgPSAyIHdvcmRzIGluIHRyYW5zbWl0IEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Li4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMTAgPSAxNCB3b3JkcyBpbiB0cmFuc21pdCBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTExID0gMTUgd29yZHMgaW4gdHJhbnNtaXQgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwMCA9IDE2IHdvcmRzIGluIHRyYW5zbWl0IEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIGFyZSByZXNlcnZlZC4KKyAgICAgKiB8WzIwOjE2XSB8UlhDTlQgICAgIHxSZWNlaXZlIEZJRk8gTGV2ZWwgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGluZGljYXRlIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGVudHJpZXMgaW4gcmVjZWl2ZSBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMDAgPSBObyBkYXRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAxID0gMSB3b3JkIGluIHJlY2VpdmUgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxMCA9IDIgd29yZHMgaW4gcmVjZWl2ZSBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfC4uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEwID0gMTQgd29yZHMgaW4gcmVjZWl2ZSBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTExID0gMTUgd29yZHMgaW4gcmVjZWl2ZSBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAwID0gMTYgd29yZHMgaW4gcmVjZWl2ZSBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBhcmUgcmVzZXJ2ZWQuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEwwOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gSTJTIENvbnRyb2wgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0xLRElWOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIEkyUyBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElFTjsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBJMlMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTVEFUVVMwOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gSTJTIFN0YXR1cyBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fTyAgdWludDMyX3QgVFhGSUZPOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIEkyUyBUcmFuc21pdCBGSUZPIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJYRklGTzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE0XSBJMlMgUmVjZWl2ZSBGSUZPIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsyXTsKKyAgICBfX0lPIHVpbnQzMl90IENUTDE7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDIwXSBJMlMgQ29udHJvbCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTVEFUVVMxOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAyNF0gSTJTIFN0YXR1cyBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IEkyU19UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBJMlNfQ09OU1QgSTJTIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIEkyUyBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIEkyU19DVEwwX0kyU0VOX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogSTJTRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMF9JMlNFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDBfSTJTRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IEkyU0VOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMF9UWEVOX1BvcyAgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFRYRU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDBfVFhFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwwX1RYRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBUWEVOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDBfUlhFTl9Qb3MgICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBSWEVOIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwwX1JYRU5fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMF9SWEVOX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogUlhFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwwX01VVEVfUG9zICAgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogTVVURSBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMF9NVVRFX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDBfTVVURV9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IE1VVEUgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMF9EQVRXSURUSF9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IERBVFdJRFRIIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDBfREFUV0lEVEhfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEkyU19DVEwwX0RBVFdJRFRIX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBEQVRXSURUSCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDBfTU9OT19Qb3MgICAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBNT05PIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwwX01PTk9fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMF9NT05PX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogTU9OTyBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwwX09SREVSX1BvcyAgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogT1JERVIgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMF9PUkRFUl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDBfT1JERVJfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IE9SREVSIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMF9TTEFWRV9Qb3MgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFNMQVZFIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDBfU0xBVkVfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwwX1NMQVZFX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBTTEFWRSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDBfTUNMS0VOX1BvcyAgICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBNQ0xLRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwwX01DTEtFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMF9NQ0xLRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogTUNMS0VOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwwX1RYRkJDTFJfUG9zICAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogVFhGQkNMUiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMF9UWEZCQ0xSX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDBfVFhGQkNMUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFRYRkJDTFIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMF9SWEZCQ0xSX1BvcyAgICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFJYRkJDTFIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDBfUlhGQkNMUl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwwX1JYRkJDTFJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBSWEZCQ0xSIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDBfVFhQRE1BRU5fUG9zICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBUWFBETUFFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwwX1RYUERNQUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMF9UWFBETUFFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogVFhQRE1BRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwwX1JYUERNQUVOX1BvcyAgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogUlhQRE1BRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMF9SWFBETUFFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDBfUlhQRE1BRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFJYUERNQUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMF9SWExDSF9Qb3MgICAgICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFJYTENIIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDBfUlhMQ0hfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwwX1JYTENIX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBSWExDSCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDBfRk9STUFUX1BvcyAgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBGT1JNQVQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwwX0ZPUk1BVF9Nc2sgICAgICAgICAgICAgICgweDd1bCA8PCBJMlNfQ1RMMF9GT1JNQVRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogRk9STUFUIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwwX1BDTVNZTkNfUG9zICAgICAgICAgICAgICgyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogUENNU1lOQyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMF9QQ01TWU5DX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDBfUENNU1lOQ19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFBDTVNZTkMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMF9DSFdJRFRIX1BvcyAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IENIV0lEVEggUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDBfQ0hXSURUSF9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEkyU19DVEwwX0NIV0lEVEhfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBDSFdJRFRIIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDBfVERNQ0hOVU1fUG9zICAgICAgICAgICAgKDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBURE1DSE5VTSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwwX1RETUNITlVNX01zayAgICAgICAgICAgICgweDN1bCA8PCBJMlNfQ1RMMF9URE1DSE5VTV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogVERNQ0hOVU0gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DTEtESVZfTUNMS0RJVl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q0xLRElWOiBNQ0xLRElWIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMlNfQ0xLRElWX01DTEtESVZfTXNrICAgICAgICAgICAoMHgzZnVsIDw8IEkyU19DTEtESVZfTUNMS0RJVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNMS0RJVjogTUNMS0RJViBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ0xLRElWX0JDTEtESVZfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNMS0RJVjogQkNMS0RJViBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NMS0RJVl9CQ0xLRElWX01zayAgICAgICAgICAgKDB4MWZmdWwgPDwgSTJTX0NMS0RJVl9CQ0xLRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDTEtESVY6IEJDTEtESVYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0lFTl9SWFVERklFTl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IFJYVURGSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19JRU5fUlhVREZJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfSUVOX1JYVURGSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBSWFVERklFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19JRU5fUlhPVkZJRU5fUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBSWE9WRklFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfSUVOX1JYT1ZGSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0lFTl9SWE9WRklFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogUlhPVkZJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfSUVOX1JYVEhJRU5fUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogUlhUSElFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0lFTl9SWFRISUVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19JRU5fUlhUSElFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IFJYVEhJRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0lFTl9UWFVERklFTl9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IFRYVURGSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19JRU5fVFhVREZJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfSUVOX1RYVURGSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBUWFVERklFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19JRU5fVFhPVkZJRU5fUG9zICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBUWE9WRklFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfSUVOX1RYT1ZGSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0lFTl9UWE9WRklFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogVFhPVkZJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfSUVOX1RYVEhJRU5fUG9zICAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogVFhUSElFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0lFTl9UWFRISUVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19JRU5fVFhUSElFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IFRYVEhJRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0lFTl9DSDBaQ0lFTl9Qb3MgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IENIMFpDSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19JRU5fQ0gwWkNJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfSUVOX0NIMFpDSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBDSDBaQ0lFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19JRU5fQ0gxWkNJRU5fUG9zICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBDSDFaQ0lFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfSUVOX0NIMVpDSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0lFTl9DSDFaQ0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogQ0gxWkNJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfSUVOX0NIMlpDSUVOX1BvcyAgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogQ0gyWkNJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0lFTl9DSDJaQ0lFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19JRU5fQ0gyWkNJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IENIMlpDSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0lFTl9DSDNaQ0lFTl9Qb3MgICAgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IENIM1pDSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19JRU5fQ0gzWkNJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfSUVOX0NIM1pDSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBDSDNaQ0lFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19JRU5fQ0g0WkNJRU5fUG9zICAgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBDSDRaQ0lFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfSUVOX0NINFpDSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0lFTl9DSDRaQ0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogQ0g0WkNJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfSUVOX0NINVpDSUVOX1BvcyAgICAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogQ0g1WkNJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0lFTl9DSDVaQ0lFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19JRU5fQ0g1WkNJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IENINVpDSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0lFTl9DSDZaQ0lFTl9Qb3MgICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IENINlpDSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19JRU5fQ0g2WkNJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfSUVOX0NINlpDSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBDSDZaQ0lFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19JRU5fQ0g3WkNJRU5fUG9zICAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBDSDdaQ0lFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfSUVOX0NIN1pDSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0lFTl9DSDdaQ0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogQ0g3WkNJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMF9JMlNJTlRfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IEkyU0lOVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzBfSTJTSU5UX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMwX0kyU0lOVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBJMlNJTlQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzBfSTJTUlhJTlRfUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBJMlNSWElOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMwX0kyU1JYSU5UX01zayAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMF9JMlNSWElOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogSTJTUlhJTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMwX0kyU1RYSU5UX1BvcyAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogSTJTVFhJTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMF9JMlNUWElOVF9Nc2sgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzBfSTJTVFhJTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IEkyU1RYSU5UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMF9EQVRBQ0hfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IERBVEFDSCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzBfREFUQUNIX01zayAgICAgICAgICAgKDB4N3VsIDw8IEkyU19TVEFUVVMwX0RBVEFDSF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBEQVRBQ0ggTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzBfUlhVRElGX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBSWFVESUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMwX1JYVURJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMF9SWFVESUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogUlhVRElGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMwX1JYT1ZJRl9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogUlhPVklGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMF9SWE9WSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzBfUlhPVklGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFJYT1ZJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMF9SWFRISUZfUG9zICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFJYVEhJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzBfUlhUSElGX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMwX1JYVEhJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBSWFRISUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzBfUlhGVUxMX1BvcyAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBSWEZVTEwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMwX1JYRlVMTF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMF9SWEZVTExfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogUlhGVUxMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMwX1JYRU1QVFlfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogUlhFTVBUWSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMF9SWEVNUFRZX01zayAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzBfUlhFTVBUWV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFJYRU1QVFkgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMF9UWFVESUZfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFRYVURJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzBfVFhVRElGX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMwX1RYVURJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBUWFVESUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzBfVFhPVklGX1BvcyAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBUWE9WSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMwX1RYT1ZJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMF9UWE9WSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogVFhPVklGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMwX1RYVEhJRl9Qb3MgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogVFhUSElGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMF9UWFRISUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzBfVFhUSElGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFRYVEhJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMF9UWEZVTExfUG9zICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFRYRlVMTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzBfVFhGVUxMX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMwX1RYRlVMTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBUWEZVTEwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzBfVFhFTVBUWV9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBUWEVNUFRZIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMwX1RYRU1QVFlfTXNrICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMF9UWEVNUFRZX1BvcykgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogVFhFTVBUWSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMwX1RYQlVTWV9Qb3MgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogVFhCVVNZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMF9UWEJVU1lfTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzBfVFhCVVNZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFRYQlVTWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfVFhGSUZPX1RYRklGT19Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlRYRklGTzogVFhGSUZPIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX1RYRklGT19UWEZJRk9fTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBJMlNfVFhGSUZPX1RYRklGT19Qb3MpICAgICAgICAgICAvKiE8IEkyU19UOjpUWEZJRk86IFRYRklGTyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1JYRklGT19SWEZJRk9fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpSWEZJRk86IFJYRklGTyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyU19SWEZJRk9fUlhGSUZPX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgSTJTX1JYRklGT19SWEZJRk9fUG9zKSAgICAgICAgICAgLyohPCBJMlNfVDo6UlhGSUZPOiBSWEZJRk8gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwxX0NIMFpDRU5fUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogQ0gwWkNFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMV9DSDBaQ0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDFfQ0gwWkNFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IENIMFpDRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMV9DSDFaQ0VOX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IENIMVpDRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDFfQ0gxWkNFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwxX0NIMVpDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBDSDFaQ0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDFfQ0gyWkNFTl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBDSDJaQ0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwxX0NIMlpDRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMV9DSDJaQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogQ0gyWkNFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwxX0NIM1pDRU5fUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogQ0gzWkNFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMV9DSDNaQ0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDFfQ0gzWkNFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IENIM1pDRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMV9DSDRaQ0VOX1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IENINFpDRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDFfQ0g0WkNFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwxX0NINFpDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBDSDRaQ0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDFfQ0g1WkNFTl9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBDSDVaQ0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwxX0NINVpDRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMV9DSDVaQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogQ0g1WkNFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwxX0NINlpDRU5fUG9zICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogQ0g2WkNFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMV9DSDZaQ0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDFfQ0g2WkNFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IENINlpDRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMV9DSDdaQ0VOX1BvcyAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IENIN1pDRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDFfQ0g3WkNFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwxX0NIN1pDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBDSDdaQ0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDFfVFhUSF9Qb3MgICAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBUWFRIIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwxX1RYVEhfTXNrICAgICAgICAgICAgICAgICgweGZ1bCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogVFhUSCBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwxX1JYVEhfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogUlhUSCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMV9SWFRIX01zayAgICAgICAgICAgICAgICAoMHhmdWwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IFJYVEggTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMV9QQldJRFRIX1BvcyAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IFBCV0lEVEggUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDFfUEJXSURUSF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwxX1BCV0lEVEhfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBQQldJRFRIIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDFfUEIxNk9SRF9Qb3MgICAgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBQQjE2T1JEIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwxX1BCMTZPUkRfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMV9QQjE2T1JEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogUEIxNk9SRCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMxX0NIMFpDSUZfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogQ0gwWkNJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMV9DSDBaQ0lGX01zayAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzFfQ0gwWkNJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IENIMFpDSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMV9DSDFaQ0lGX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IENIMVpDSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzFfQ0gxWkNJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMxX0NIMVpDSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBDSDFaQ0lGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzFfQ0gyWkNJRl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBDSDJaQ0lGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMxX0NIMlpDSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMV9DSDJaQ0lGX1BvcykgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogQ0gyWkNJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMxX0NIM1pDSUZfUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogQ0gzWkNJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMV9DSDNaQ0lGX01zayAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzFfQ0gzWkNJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IENIM1pDSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMV9DSDRaQ0lGX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IENINFpDSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzFfQ0g0WkNJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMxX0NINFpDSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBDSDRaQ0lGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzFfQ0g1WkNJRl9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBDSDVaQ0lGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMxX0NINVpDSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMV9DSDVaQ0lGX1BvcykgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogQ0g1WkNJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMxX0NINlpDSUZfUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogQ0g2WkNJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMV9DSDZaQ0lGX01zayAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzFfQ0g2WkNJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IENINlpDSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMV9DSDdaQ0lGX1BvcyAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IENIN1pDSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzFfQ0g3WkNJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMxX0NIN1pDSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBDSDdaQ0lGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzFfVFhDTlRfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBUWENOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMxX1RYQ05UX01zayAgICAgICAgICAgICgweDFmdWwgPDwgSTJTX1NUQVRVUzFfVFhDTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogVFhDTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMxX1JYQ05UX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogUlhDTlQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMV9SWENOVF9Nc2sgICAgICAgICAgICAoMHgxZnVsIDw8IEkyU19TVEFUVVMxX1JYQ05UX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IFJYQ05UIE1hc2sgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBJMlNfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIEkyUyByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisKKyNlbmRpZiAvKiBfX0kyU19SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvb3RnX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL290Z19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjQ3NDQxCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL290Z19yZWcuaApAQCAtMCwwICsxLDM5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIG90Z19yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgT1RHIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX09UR19SRUdfSF9fCisjZGVmaW5lIF9fT1RHX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVU0IgT24tVGhlLUdvIENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBPVEcgVVNCIE9uLVRoZS1HbyBDb250cm9sbGVyKE9URykKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgT1RHIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgT1RHX1Q6OkNUTAorICAgICAqIE9mZnNldDogMHgwMCAgT1RHIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxWQlVTRFJPUCAgfERyb3AgVkJVUyBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdXNlciBhcHBsaWNhdGlvbiBydW5uaW5nIG9uIHRoaXMgT1RHIEEtZGV2aWNlIHdhbnRzIHRvIGNvbnNlcnZlIHBvd2VyLCBzZXQgdGhpcyBiaXQgdG8gZHJvcCBWQlVTCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlVTUkVRIChPVEdfQ1RMWzFdKSB3aWxsIGJlIGFsc28gY2xlYXJlZCBubyBtYXR0ZXIgQS1kZXZpY2Ugb3IgQi1kZXZpY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vdCBkcm9wIHRoZSBWQlVTLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEcm9wIHRoZSBWQlVTLgorICAgICAqIHxbMV0gICAgIHxCVVNSRVEgICAgfE9URyBCdXMgUmVxdWVzdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIE9URyBBLWRldmljZSB3YW50cyB0byBkbyBkYXRhIHRyYW5zZmVycyB2aWEgVVNCIGJ1cywgc2V0dGluZyB0aGlzIGJpdCB3aWxsIGRyaXZlIFZCVVMgaGlnaCB0byBkZXRlY3QgVVNCIGRldmljZSBjb25uZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdXNlciB3b24ndCB1c2UgdGhlIGJ1cyBhbnkgbW9yZSwgY2xlYXJpbmcgdGhpcyBiaXQgd2lsbCBkcm9wIFZCVVMgdG8gc2F2ZSBwb3dlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCB3aGVuIEEtZGV2aWNlIGdvZXMgdG8gQV93YWl0X3ZmYWxsIHN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBhbHNvIGNsZWFyZWQgaWYgVkJVU0RST1AgKE9UR19DVExbMF0pIGJpdCBpcyBzZXQgb3IgSURTVFMgKE9UR19TVEFUVVNbMV0pIGNoYW5nZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdXNlciBvZiBhbiBPVEctQiBEZXZpY2Ugd2FudHMgdG8gcmVxdWVzdCBWQlVTLCBzZXR0aW5nIHRoaXMgYml0IHdpbGwgcnVuIFNSUCBwcm90b2NvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBpZiBTUlAgZmFpbHVyZSAoT1RHIEEtZGV2aWNlIGRvZXMgbm90IHByb3ZpZGUgVkJVUyBhZnRlciBCLWRldmljZSBpc3N1ZXMgU1JQIGluIHNwZWNpZmllZCBpbnRlcnZhbCwgZGVmaW5lZCBpbiBPVEcgc3BlY2lmaWNhdGlvbikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGFsc28gY2xlYXJlZCBpZiBWQlVTRFJPUCAoT1RHX0NUTFswXSkgYml0IGlzIHNldCBvciBJRFNUUyAoT1RHX1NUQVRVU1sxXSkgY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm90IGxhdW5jaCBWQlVTIGluIE9URyBBLWRldmljZSBvciBub3QgcmVxdWVzdCBTUlAgaW4gT1RHIEItZGV2aWNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMYXVuY2ggVkJVUyBpbiBPVEcgQS1kZXZpY2Ugb3IgcmVxdWVzdCBTUlAgaW4gT1RHIEItZGV2aWNlLgorICAgICAqIHxbMl0gICAgIHxITlBSRVFFTiAgfE9URyBITlAgUmVxdWVzdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBVU0IgZnJhbWUgYXMgQS1kZXZpY2UsIHNldCB0aGlzIGJpdCB3aGVuIEEtZGV2aWNlIGFsbG93cyB0byBwcm9jZXNzIEhOUCBwcm90b2NvbCAtLSBBLWRldmljZSBjaGFuZ2VzIHJvbGUgZnJvbSBIb3N0IHRvIFBlcmlwaGVyYWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgd2hlbiBPVEcgc3RhdGUgY2hhbmdlcyBmcm9tIGFfc3VzcGVuZCB0byBhX3BlcmlwaGVyYWwgb3IgZ29lcyBiYWNrIHRvIGFfaWRsZSBzdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gVVNCIGZyYW1lIGFzIEItZGV2aWNlLCBzZXQgdGhpcyBiaXQgYWZ0ZXIgdGhlIE9URyBBLWRldmljZSBzdWNjZXNzZnVsbHkgc2VuZHMgYSBTZXRGZWF0dXJlIChiX2hucF9lbmFibGUpIGNvbW1hbmQgdG8gdGhlIE9URyBCLWRldmljZSB0byBzdGFydCByb2xlIGNoYW5nZSAtLSBCLWRldmljZSBjaGFuZ2VzIHJvbGUgZnJvbSBQZXJpcGhlcmFsIHRvIEhvc3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgd2hlbiBPVEcgc3RhdGUgY2hhbmdlcyBmcm9tIGJfcGVyaXBoZXJhbCB0byBiX3dhaXRfYWNvbiBvciBnb2VzIGJhY2sgdG8gYl9pZGxlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBITlAgcmVxdWVzdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSE5QIHJlcXVlc3QgRW5hYmxlZCAoQS1kZXZpY2UgY2FuIGNoYW5nZSByb2xlIGZyb20gSG9zdCB0byBQZXJpcGhlcmFsIG9yIEItZGV2aWNlIGNhbiBjaGFuZ2Ugcm9sZSBmcm9tIFBlcmlwaGVyYWwgdG8gSG9zdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogUmVmZXIgdG8gT1RHIHNwZWNpZmljYXRpb24gdG8gZ2V0IGFfc3VzcGVuZCwgYV9wZXJpcGhlcmFsLCBhX2lkbGUgYW5kIGJfaWRsZSBzdGF0ZS4KKyAgICAgKiB8WzRdICAgICB8T1RHRU4gICAgIHxPVEcgRnVuY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgbmVlZHMgdG8gc2V0IHRoaXMgYml0IHRvIGVuYWJsZSBPVEcgZnVuY3Rpb24gd2hpbGUgVVNCIGZyYW1lIGNvbmZpZ3VyZWQgYXMgT1RHIGRldmljZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gVVNCIGZyYW1lIG5vdCBjb25maWd1cmVkIGFzIE9URyBkZXZpY2UsIHRoaXMgYml0IGlzIG11c3QgYmUgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA9IE9URyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT1RHIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfFdLRU4gICAgICB8T1RHIElEIFBpbiBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT1RHIElEIHBpbiBzdGF0dXMgY2hhbmdlIHdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9URyBJRCBwaW4gc3RhdHVzIGNoYW5nZSB3YWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogQHZhciBPVEdfVDo6UEhZQ1RMCisgICAgICogT2Zmc2V0OiAweDA0ICBPVEcgUEhZIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxPVEdQSFlFTiAgfE9URyBQSFkgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gVVNCIGZyYW1lIGlzIGNvbmZpZ3VyZWQgYXMgT1RHLWRldmljZSBvciBJRC1kZXBlbmRlbnQsIHVzZXIgbmVlZHMgdG8gc2V0IHRoaXMgYml0IGJlZm9yZSB1c2luZyBPVEcgZnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBkZXZpY2UgaXMgbm90IGNvbmZpZ3VyZWQgYXMgT1RHLWRldmljZSBub3IgSUQtZGVwZW5kZW50ICwgdGhpcyBiaXQgaXMgImRvbid0IGNhcmUiLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPVEcgUEhZIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPVEcgUEhZIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfElEREVURU4gICB8SUQgRGV0ZWN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGV0ZWN0IElEIHBpbiBzdGF0dXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERldGVjdCBJRCBwaW4gc3RhdHVzIEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfFZCRU5QT0wgICB8T2ZmLWNoaXAgVVNCIFZCVVMgUG93ZXIgU3dpdGNoIEVuYWJsZSBQb2xhcml0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBPVEcgY29udHJvbGxlciB3aWxsIGVuYWJsZSBvZmYtY2hpcCBVU0IgVkJVUyBwb3dlciBzd2l0Y2ggdG8gcHJvdmlkZSBWQlVTIHBvd2VyIHdoZW4gbmVlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgVVNCX1ZCVVNfRU4gcGluIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgb2ZmLWNoaXAgVVNCIFZCVVMgcG93ZXIgc3dpdGNoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBwb2xhcml0eSBvZiBlbmFibGluZyBvZmYtY2hpcCBVU0IgVkJVUyBwb3dlciBzd2l0Y2ggKGhpZ2ggYWN0aXZlIG9yIGxvdyBhY3RpdmUpIGRlcGVuZHMgb24gdGhlIHNlbGVjdGVkIGNvbXBvbmVudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCBhcyBmb2xsb3dpbmcgYWNjb3JkaW5nIHRvIHRoZSBwb2xhcml0eSBvZiBvZmYtY2hpcCBVU0IgVkJVUyBwb3dlciBzd2l0Y2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBvZmYtY2hpcCBVU0IgVkJVUyBwb3dlciBzd2l0Y2ggZW5hYmxlIGlzIGFjdGl2ZSBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgb2ZmLWNoaXAgVVNCIFZCVVMgcG93ZXIgc3dpdGNoIGVuYWJsZSBpcyBhY3RpdmUgbG93LgorICAgICAqIHxbNV0gICAgIHxWQlNUU1BPTCAgfE9mZi1jaGlwIFVTQiBWQlVTIFBvd2VyIFN3aXRjaCBTdGF0dXMgUG9sYXJpdHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcG9sYXJpdHkgb2Ygb2ZmLWNoaXAgVVNCIFZCVVMgcG93ZXIgc3dpdGNoIHZhbGlkIHNpZ25hbCBkZXBlbmRzIG9uIHRoZSBzZWxlY3RlZCBjb21wb25lbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBIFVTQl9WQlVTX1NUIHBpbiBpcyB1c2VkIHRvIG1vbml0b3IgdGhlIHZhbGlkIHNpZ25hbCBvZiB0aGUgb2ZmLWNoaXAgVVNCIFZCVVMgcG93ZXIgc3dpdGNoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRoaXMgYml0IGFzIGZvbGxvd2luZyBhY2NvcmRpbmcgdG8gdGhlIHBvbGFyaXR5IG9mIG9mZi1jaGlwIFVTQiBWQlVTIHBvd2VyIHN3aXRjaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHBvbGFyaXR5IG9mIG9mZi1jaGlwIFVTQiBWQlVTIHBvd2VyIHN3aXRjaCB2YWxpZCBzdGF0dXMgaXMgaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHBvbGFyaXR5IG9mIG9mZi1jaGlwIFVTQiBWQlVTIHBvd2VyIHN3aXRjaCB2YWxpZCBzdGF0dXMgaXMgbG93LgorICAgICAqIEB2YXIgT1RHX1Q6OklOVEVOCisgICAgICogT2Zmc2V0OiAweDA4ICBPVEcgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFJPTEVDSEdJRU58Um9sZSAoSG9zdCBvciBQZXJpcGhlcmFsKSBDaGFuZ2VkIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFZCRUlFTiAgICB8VkJVUyBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFZCVVMgZXJyb3IgbWVhbnMgZ29pbmcgdG8gYV92YnVzX2VyciBzdGF0ZS4gUGxlYXNlIHJlZmVyIHRvIEEtZGV2aWNlIHN0YXRlIGRpYWdyYW0gaW4gT1RHIHNwZWNpZmljYXRpb24uCisgICAgICogfFsyXSAgICAgfFNSUEZJRU4gICB8U1JQIEZhaWwgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8SE5QRklFTiAgIHxITlAgRmFpbCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxHT0lETEVJRU4gfE9URyBEZXZpY2UgR29lcyB0byBJRExFIFN0YXRlIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogR29pbmcgdG8gaWRsZSBzdGF0ZSBtZWFucyBnb2luZyB0byBhX2lkbGUgb3IgYl9pZGxlIHN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UGxlYXNlIHJlZmVyIHRvIEEtZGV2aWNlIHN0YXRlIGRpYWdyYW0gYW5kIEItZGV2aWNlIHN0YXRlIGRpYWdyYW0gaW4gT1RHIHNwZWMuCisgICAgICogfFs1XSAgICAgfElEQ0hHSUVOICB8SURTVFMgQ2hhbmdlZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCBJRFNUUyAoT1RHX1NUQVRVU1sxXSkgc3RhdHVzIGlzIGNoYW5nZWQgZnJvbSBoaWdoIHRvIGxvdyBvciBmcm9tIGxvdyB0byBoaWdoLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8UERFVklFTiAgIHxBY3QgQXMgUGVyaXBoZXJhbCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCB0aGUgZGV2aWNlIGlzIGNoYW5nZWQgYXMgYSBwZXJpcGhlcmFsLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhpcyBkZXZpY2UgYXMgYSBwZXJpcGhlcmFsIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhpcyBkZXZpY2UgYXMgYSBwZXJpcGhlcmFsIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbN10gICAgIHxIT1NUSUVOICAgfEFjdCBBcyBIb3N0IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIHRoZSBkZXZpY2UgaXMgY2hhbmdlZCBhcyBhIGhvc3QsIGFuIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGlzIGRldmljZSBhcyBhIGhvc3QgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGlzIGRldmljZSBhcyBhIGhvc3QgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfEJWTERDSEdJRU58Qi1kZXZpY2UgU2Vzc2lvbiBWYWxpZCBTdGF0dXMgQ2hhbmdlZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCBCVkxEIChPVEdfU1RBVFVTWzNdKSBzdGF0dXMgaXMgY2hhbmdlZCBmcm9tIGhpZ2ggdG8gbG93IG9yIGZyb20gbG93IHRvIGhpZ2gsIGFuIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbOV0gICAgIHxBVkxEQ0hHSUVOfEEtZGV2aWNlIFNlc3Npb24gVmFsaWQgU3RhdHVzIENoYW5nZWQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgQVZMRCAoT1RHX1NUQVRVU1s0XSkgc3RhdHVzIGlzIGNoYW5nZWQgZnJvbSBoaWdoIHRvIGxvdyBvciBmcm9tIGxvdyB0byBoaWdoLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzEwXSAgICB8VkJDSEdJRU4gIHxWQlVTVkxEIFN0YXR1cyBDaGFuZ2VkIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIFZCVVNWTEQgKE9UR19TVEFUVVNbNV0pIHN0YXR1cyBpcyBjaGFuZ2VkIGZyb20gaGlnaCB0byBsb3cgb3IgZnJvbSBsb3cgdG8gaGlnaCwgYW4gaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxMV0gICAgfFNFQ0hHSUVOICB8U0VTU0VORCBTdGF0dXMgQ2hhbmdlZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCBTRVNTRU5EIChPVEdfU1RBVFVTWzJdKSBzdGF0dXMgaXMgY2hhbmdlZCBmcm9tIGhpZ2ggdG8gbG93IG9yIGZyb20gbG93IHRvIGhpZ2gsIGFuIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTNdICAgIHxTUlBERVRJRU4gfFNSUCBEZXRlY3RlZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIEB2YXIgT1RHX1Q6OklOVFNUUworICAgICAqIE9mZnNldDogMHgwQyAgT1RHIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxST0xFQ0hHSUYgfE9URyBSb2xlIENoYW5nZSBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGlzIHNldCB3aGVuIHRoZSByb2xlIG9mIGFuIE9URyBkZXZpY2UgY2hhbmdlZCBmcm9tIGEgaG9zdCB0byBhIHBlcmlwaGVyYWwsIG9yIGNoYW5nZWQgZnJvbSBhIHBlcmlwaGVyYWwgdG8gYSBob3N0IHdoaWxlIFVTQl9JRCBwaW4gc3RhdHVzIGRvZXMgbm90IGNoYW5nZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT1RHIGRldmljZSByb2xlIG5vdCBjaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPVEcgZGV2aWNlIHJvbGUgY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgZmxhZy4KKyAgICAgKiB8WzFdICAgICB8VkJFSUYgICAgIHxWQlVTIEVycm9yIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIHNldCB3aGVuIHZvbHRhZ2Ugb24gVkJVUyBjYW5ub3QgcmVhY2ggYSBtaW5pbXVtIHZhbGlkIHRocmVzaG9sZCA0LjRWIHdpdGhpbiBhIG1heGltdW0gdGltZSBvZiAxMDBtcyBhZnRlciBPVEcgQS1kZXZpY2Ugc3RhcnRpbmcgdG8gZHJpdmUgVkJVUyBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPVEcgQS1kZXZpY2UgZHJpdmVzIFZCVVMgb3ZlciB0aHJlc2hvbGQgdm9sdGFnZSBiZWZvcmUgdGhpcyBpbnRlcnZhbCBleHBpcmVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPVEcgQS1kZXZpY2UgY2Fubm90IGRyaXZlIFZCVVMgb3ZlciB0aHJlc2hvbGQgdm9sdGFnZSBiZWZvcmUgdGhpcyBpbnRlcnZhbCBleHBpcmVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBmbGFnIGFuZCByZWNvdmVyIGZyb20gdGhlIFZCVVMgZXJyb3Igc3RhdGUuCisgICAgICogfFsyXSAgICAgfFNSUEZJRiAgICB8U1JQIEZhaWwgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFmdGVyIGluaXRpYXRpbmcgU1JQLCBhbiBPVEcgQi1kZXZpY2Ugd2lsbCB3YWl0IGZvciB0aGUgT1RHIEEtZGV2aWNlIHRvIGRyaXZlIFZCVVMgaGlnaCBhdCBsZWFzdCBUQl9TUlBfRkFJTCBtaW5pbXVtLCBkZWZpbmVkIGluIE9URyBzcGVjaWZpY2F0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGlzIHNldCB3aGVuIHRoZSBPVEcgQi1kZXZpY2UgZG9lcyBub3QgZ2V0IFZCVVMgaGlnaCBhZnRlciB0aGlzIGludGVydmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPVEcgQi1kZXZpY2UgZ2V0cyBWQlVTIGhpZ2ggYmVmb3JlIHRoaXMgaW50ZXJ2YWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9URyBCLWRldmljZSBkb2VzIG5vdCBnZXQgVkJVUyBoaWdoIGJlZm9yZSB0aGlzIGludGVydmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBmbGFnLgorICAgICAqIHxbM10gICAgIHxITlBGSUYgICAgfEhOUCBGYWlsIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEEtZGV2aWNlIGhhcyBncmFudGVkIEItZGV2aWNlIHRvIGJlIGhvc3QgYW5kIFVTQiBidXMgaXMgaW4gU0UwIChib3RoIFVTQl9EKyBhbmQgVVNCX0QtIGxvdykgc3RhdGUsIHRoaXMgYml0IHdpbGwgYmUgc2V0IHdoZW4gQS1kZXZpY2UgZG9lcyBub3QgY29ubmVjdCBhZnRlciBzcGVjaWZpZWQgaW50ZXJ2YWwgZXhwaXJlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQS1kZXZpY2UgY29ubmVjdHMgdG8gQi1kZXZpY2UgYmVmb3JlIHNwZWNpZmllZCBpbnRlcnZhbCBleHBpcmVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBLWRldmljZSBkb2VzIG5vdCBjb25uZWN0IHRvIEItZGV2aWNlIGJlZm9yZSBzcGVjaWZpZWQgaW50ZXJ2YWwgZXhwaXJlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgZmxhZy4KKyAgICAgKiB8WzRdICAgICB8R09JRExFSUYgIHxPVEcgRGV2aWNlIEdvZXMgdG8gSURMRSBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgaWYgdGhlIE9URyBkZXZpY2UgdHJhbnNmZXJzIGZyb20gbm9uLWlkbGUgc3RhdGUgdG8gaWRsZSBzdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBPVEcgZGV2aWNlIHdpbGwgYmUgbmVpdGhlciBhIGhvc3Qgbm9yIGEgcGVyaXBoZXJhbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT1RHIGRldmljZSBkb2VzIG5vdCBnbyBiYWNrIHRvIGlkbGUgc3RhdGUgKGFfaWRsZSBvciBiX2lkbGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPVEcgZGV2aWNlIGdvZXMgYmFjayB0byBpZGxlIHN0YXRlKGFfaWRsZSBvciBiX2lkbGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUgMTogR29pbmcgdG8gaWRsZSBzdGF0ZSBtZWFucyBnb2luZyB0byBhX2lkbGUgb3IgYl9pZGxlIHN0YXRlLiBQbGVhc2UgcmVmZXIgdG8gT1RHIHNwZWNpZmljYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZSAyOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgZmxhZy4KKyAgICAgKiB8WzVdICAgICB8SURDSEdJRiAgIHxJRCBTdGF0ZSBDaGFuZ2UgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJRFNUUyAoT1RHX1NUQVRVU1sxXSkgbm90IHRvZ2dsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElEU1RTIChPVEdfU1RBVFVTWzFdKSBmcm9tIGhpZ2ggdG8gbG93IG9yIGZyb20gbG93IHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGZsYWcuCisgICAgICogfFs2XSAgICAgfFBERVZJRiAgICB8QWN0IEFzIFBlcmlwaGVyYWwgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA9IFRoaXMgZGV2aWNlIGRvZXMgbm90IGFjdCBhcyBhIHBlcmlwaGVyYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoaXMgZGV2aWNlIGFjdHMgYXMgYSBwZXJpcGhlcmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBmbGFnLgorICAgICAqIHxbN10gICAgIHxIT1NUSUYgICAgfEFjdCBBcyBIb3N0IEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwPSBUaGlzIGRldmljZSBkb2VzIG5vdCBhY3QgYXMgYSBob3N0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGlzIGRldmljZSBhY3RzIGFzIGEgaG9zdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgZmxhZy4KKyAgICAgKiB8WzhdICAgICB8QlZMRENIR0lGIHxCLWRldmljZSBTZXNzaW9uIFZhbGlkIFN0YXRlIENoYW5nZSBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJWTEQgKE9UR19TVEFUVVNbM10pIGlzIG5vdCB0b2dnbGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCVkxEIChPVEdfU1RBVFVTWzNdKSBmcm9tIGhpZ2ggdG8gbG93IG9yIGxvdyB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBzdGF0dXMuCisgICAgICogfFs5XSAgICAgfEFWTERDSEdJRiB8QS1kZXZpY2UgU2Vzc2lvbiBWYWxpZCBTdGF0ZSBDaGFuZ2UgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBVkxEIChPVEdfU1RBVFVTWzRdKSBub3QgdG9nZ2xlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQVZMRCAoT1RHX1NUQVRVU1s0XSkgZnJvbSBoaWdoIHRvIGxvdyBvciBsb3cgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgc3RhdHVzLgorICAgICAqIHxbMTBdICAgIHxWQkNIR0lGICAgfFZCVVNWTEQgU3RhdGUgQ2hhbmdlIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVkJVU1ZMRCAoT1RHX1NUQVRVU1s1XSkgbm90IHRvZ2dsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFZCVVNWTEQgKE9UR19TVEFUVVNbNV0pIGZyb20gaGlnaCB0byBsb3cgb3IgZnJvbSBsb3cgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgc3RhdHVzLgorICAgICAqIHxbMTFdICAgIHxTRUNIR0lGICAgfFNFU1NFTkQgU3RhdGUgQ2hhbmdlIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0VTU0VORCAoT1RHX1NUQVRVU1syXSkgbm90IHRvZ2dsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNFU1NFTkQgKE9UR19TVEFUVVNbMl0pIGZyb20gaGlnaCB0byBsb3cgb3IgZnJvbSBsb3cgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgZmxhZy4KKyAgICAgKiB8WzEzXSAgICB8U1JQREVUSUYgIHxTUlAgRGV0ZWN0ZWQgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUlAgbm90IGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUlAgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIHN0YXR1cy4KKyAgICAgKiBAdmFyIE9UR19UOjpTVEFUVVMKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIE9URyBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxPVkVSQ1VSICAgfE92ZXIgQ3VycmVudCBDb25kaXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdm9sdGFnZSBvbiBWQlVTIGNhbm5vdCByZWFjaCBhIG1pbmltdW0gVkJVUyB2YWxpZCB0aHJlc2hvbGQsIDQuNFYgbWluaW11bSwgd2l0aGluIGEgbWF4aW11bSB0aW1lIG9mIDEwMG1zIGFmdGVyIE9URyBBLWRldmljZSBkcml2ZXMgVkJVUyBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPVEcgQS1kZXZpY2UgZHJpdmVzIFZCVVMgc3VjY2Vzc2Z1bGx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPVEcgQS1kZXZpY2UgY2Fubm90IGRyaXZlcyBWQlVTIGhpZ2ggaW4gdGhpcyBpbnRlcnZhbC4KKyAgICAgKiB8WzFdICAgICB8SURTVFMgICAgIHxVU0JfSUQgUGluIFN0YXRlIG9mIE1pbmktL01pY3JvLSBQbHVnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE1pbmktQS9NaWNyby1BIHBsdWcgaXMgYXR0YWNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE1pbmktQi9NaWNyby1CIHBsdWcgaXMgYXR0YWNoZWQuCisgICAgICogfFsyXSAgICAgfFNFU1NFTkQgICB8U2Vzc2lvbiBFbmQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBWQlVTIHZvbHRhZ2UgaXMgbG93ZXIgdGhhbiAwLjRWLCB0aGlzIGJpdCB3aWxsIGJlIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2Vzc2lvbiBlbmQgbWVhbnMgbm8gbWVhbmluZ2Z1bCBwb3dlciBvbiBWQlVTLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTZXNzaW9uIGlzIG5vdCBlbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNlc3Npb24gaXMgZW5kLgorICAgICAqIHxbM10gICAgIHxCVkxEICAgICAgfEItZGV2aWNlIFNlc3Npb24gVmFsaWQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEItZGV2aWNlIHNlc3Npb24gaXMgbm90IHZhbGlkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCLWRldmljZSBzZXNzaW9uIGlzIHZhbGlkLgorICAgICAqIHxbNF0gICAgIHxBVkxEICAgICAgfEEtZGV2aWNlIFNlc3Npb24gVmFsaWQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEEtZGV2aWNlIHNlc3Npb24gaXMgbm90IHZhbGlkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBLWRldmljZSBzZXNzaW9uIGlzIHZhbGlkLgorICAgICAqIHxbNV0gICAgIHxWQlVTVkxEICAgfFZCVVMgVmFsaWQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBWQlVTIGlzIGxhcmdlciB0aGFuIDQuN1YsIHRoaXMgYml0IHdpbGwgYmUgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFZCVVMgaXMgbm90IHZhbGlkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBWQlVTIGlzIHZhbGlkLgorICAgICAqIHxbNl0gICAgIHxBU1BFUkkgICAgfEFzIFBlcmlwaGVyYWwgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBPVEcgYXMgcGVyaXBoZXJhbCwgdGhpcyBiaXQgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA6IE9URyBub3QgYXMgcGVyaXBoZXJhbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDE6IE9URyBhcyBwZXJpcGhlcmFsCisgICAgICogfFs3XSAgICAgfEFTSE9TVCAgICB8QXMgSG9zdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIE9URyBhcyBIb3N0LCB0aGlzIGJpdCBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDogT1RHIG5vdCBhcyBIb3N0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTogT1RHIGFzIEhvc3QKKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBPVEcgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQSFlDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gT1RHIFBIWSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5URU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIE9URyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVFNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDBjXSBPVEcgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBTVEFUVVM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gT1RHIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IE9UR19UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBPVEdfQ09OU1QgT1RHIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIE9URyBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIE9UR19DVExfVkJVU0RST1BfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6Q1RMOiBWQlVTRFJPUCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBPVEdfQ1RMX1ZCVVNEUk9QX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0NUTF9WQlVTRFJPUF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OkNUTDogVkJVU0RST1AgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfQ1RMX0JVU1JFUV9Qb3MgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OkNUTDogQlVTUkVRIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0NUTF9CVVNSRVFfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IE9UR19DVExfQlVTUkVRX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpDVEw6IEJVU1JFUSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0NUTF9ITlBSRVFFTl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpDVEw6IEhOUFJFUUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIE9UR19DVExfSE5QUkVRRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBPVEdfQ1RMX0hOUFJFUUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6Q1RMOiBITlBSRVFFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19DVExfT1RHRU5fUG9zICAgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6Q1RMOiBPVEdFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBPVEdfQ1RMX09UR0VOX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0NUTF9PVEdFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OkNUTDogT1RHRU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfQ1RMX1dLRU5fUG9zICAgICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OkNUTDogV0tFTiBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0NUTF9XS0VOX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IE9UR19DVExfV0tFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpDVEw6IFdLRU4gTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX1BIWUNUTF9PVEdQSFlFTl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpQSFlDVEw6IE9UR1BIWUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIE9UR19QSFlDVExfT1RHUEhZRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBPVEdfUEhZQ1RMX09UR1BIWUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6UEhZQ1RMOiBPVEdQSFlFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19QSFlDVExfSURERVRFTl9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6UEhZQ1RMOiBJRERFVEVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBPVEdfUEhZQ1RMX0lEREVURU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgT1RHX1BIWUNUTF9JRERFVEVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlBIWUNUTDogSURERVRFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfUEhZQ1RMX1ZCRU5QT0xfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlBIWUNUTDogVkJFTlBPTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgT1RHX1BIWUNUTF9WQkVOUE9MX01zayAgICAgICAgICAgKDB4MXVsIDw8IE9UR19QSFlDVExfVkJFTlBPTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpQSFlDVEw6IFZCRU5QT0wgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX1BIWUNUTF9WQlNUU1BPTF9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpQSFlDVEw6IFZCU1RTUE9MIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIE9UR19QSFlDVExfVkJTVFNQT0xfTXNrICAgICAgICAgICgweDF1bCA8PCBPVEdfUEhZQ1RMX1ZCU1RTUE9MX1BvcykgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6UEhZQ1RMOiBWQlNUU1BPTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRFTl9ST0xFQ0hHSUVOX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IFJPTEVDSEdJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBPVEdfSU5URU5fUk9MRUNIR0lFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVEVOX1JPTEVDSEdJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBST0xFQ0hHSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5URU5fVkJFSUVOX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBWQkVJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVEVOX1ZCRUlFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRFTl9WQkVJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogVkJFSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVEVOX1NSUEZJRU5fUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogU1JQRklFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIE9UR19JTlRFTl9TUlBGSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5URU5fU1JQRklFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IFNSUEZJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRFTl9ITlBGSUVOX1BvcyAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IEhOUEZJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBPVEdfSU5URU5fSE5QRklFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVEVOX0hOUEZJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBITlBGSUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5URU5fR09JRExFSUVOX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBHT0lETEVJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVEVOX0dPSURMRUlFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRFTl9HT0lETEVJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogR09JRExFSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVEVOX0lEQ0hHSUVOX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogSURDSEdJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIE9UR19JTlRFTl9JRENIR0lFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5URU5fSURDSEdJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IElEQ0hHSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRFTl9QREVWSUVOX1BvcyAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IFBERVZJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBPVEdfSU5URU5fUERFVklFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVEVOX1BERVZJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBQREVWSUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5URU5fSE9TVElFTl9Qb3MgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBIT1NUSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVEVOX0hPU1RJRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRFTl9IT1NUSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogSE9TVElFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVEVOX0JWTERDSEdJRU5fUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogQlZMRENIR0lFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIE9UR19JTlRFTl9CVkxEQ0hHSUVOX01zayAgICAgICAgICgweDF1bCA8PCBPVEdfSU5URU5fQlZMRENIR0lFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IEJWTERDSEdJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRFTl9BVkxEQ0hHSUVOX1BvcyAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IEFWTERDSEdJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBPVEdfSU5URU5fQVZMRENIR0lFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVEVOX0FWTERDSEdJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBBVkxEQ0hHSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5URU5fVkJDSEdJRU5fUG9zICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBWQkNIR0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVEVOX1ZCQ0hHSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRFTl9WQkNIR0lFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogVkJDSEdJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVEVOX1NFQ0hHSUVOX1BvcyAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogU0VDSEdJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIE9UR19JTlRFTl9TRUNIR0lFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5URU5fU0VDSEdJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IFNFQ0hHSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRFTl9TUlBERVRJRU5fUG9zICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IFNSUERFVElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBPVEdfSU5URU5fU1JQREVUSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVEVOX1NSUERFVElFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBTUlBERVRJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5UU1RTX1JPTEVDSEdJRl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogUk9MRUNIR0lGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVFNUU19ST0xFQ0hHSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRTVFNfUk9MRUNIR0lGX1BvcykgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IFJPTEVDSEdJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVFNUU19WQkVJRl9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IFZCRUlGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIE9UR19JTlRTVFNfVkJFSUZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5UU1RTX1ZCRUlGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBWQkVJRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRTVFNfU1JQRklGX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBTUlBGSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBPVEdfSU5UU1RTX1NSUEZJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVFNUU19TUlBGSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogU1JQRklGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5UU1RTX0hOUEZJRl9Qb3MgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogSE5QRklGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVFNUU19ITlBGSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRTVFNfSE5QRklGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IEhOUEZJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVFNUU19HT0lETEVJRl9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IEdPSURMRUlGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIE9UR19JTlRTVFNfR09JRExFSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5UU1RTX0dPSURMRUlGX1BvcykgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBHT0lETEVJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRTVFNfSURDSEdJRl9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBJRENIR0lGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBPVEdfSU5UU1RTX0lEQ0hHSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVFNUU19JRENIR0lGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogSURDSEdJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5UU1RTX1BERVZJRl9Qb3MgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogUERFVklGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVFNUU19QREVWSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRTVFNfUERFVklGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IFBERVZJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVFNUU19IT1NUSUZfUG9zICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IEhPU1RJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIE9UR19JTlRTVFNfSE9TVElGX01zayAgICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5UU1RTX0hPU1RJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBIT1NUSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRTVFNfQlZMRENIR0lGX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBCVkxEQ0hHSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBPVEdfSU5UU1RTX0JWTERDSEdJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVFNUU19CVkxEQ0hHSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogQlZMRENIR0lGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5UU1RTX0FWTERDSEdJRl9Qb3MgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogQVZMRENIR0lGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVFNUU19BVkxEQ0hHSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRTVFNfQVZMRENIR0lGX1BvcykgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IEFWTERDSEdJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVFNUU19WQkNIR0lGX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IFZCQ0hHSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIE9UR19JTlRTVFNfVkJDSEdJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5UU1RTX1ZCQ0hHSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBWQkNIR0lGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRTVFNfU0VDSEdJRl9Qb3MgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBTRUNIR0lGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBPVEdfSU5UU1RTX1NFQ0hHSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVFNUU19TRUNIR0lGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogU0VDSEdJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5UU1RTX1NSUERFVElGX1BvcyAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogU1JQREVUSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVFNUU19TUlBERVRJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRTVFNfU1JQREVUSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IFNSUERFVElGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX1NUQVRVU19PVkVSQ1VSX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpTVEFUVVM6IE9WRVJDVVIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIE9UR19TVEFUVVNfT1ZFUkNVUl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBPVEdfU1RBVFVTX09WRVJDVVJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6U1RBVFVTOiBPVkVSQ1VSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19TVEFUVVNfSURTVFNfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6U1RBVFVTOiBJRFNUUyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBPVEdfU1RBVFVTX0lEU1RTX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX1NUQVRVU19JRFNUU19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlNUQVRVUzogSURTVFMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfU1RBVFVTX1NFU1NFTkRfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlNUQVRVUzogU0VTU0VORCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgT1RHX1NUQVRVU19TRVNTRU5EX01zayAgICAgICAgICAgKDB4MXVsIDw8IE9UR19TVEFUVVNfU0VTU0VORF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpTVEFUVVM6IFNFU1NFTkQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX1NUQVRVU19CVkxEX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpTVEFUVVM6IEJWTEQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIE9UR19TVEFUVVNfQlZMRF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBPVEdfU1RBVFVTX0JWTERfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6U1RBVFVTOiBCVkxEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19TVEFUVVNfQVZMRF9Qb3MgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6U1RBVFVTOiBBVkxEIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBPVEdfU1RBVFVTX0FWTERfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX1NUQVRVU19BVkxEX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlNUQVRVUzogQVZMRCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfU1RBVFVTX1ZCVVNWTERfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlNUQVRVUzogVkJVU1ZMRCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgT1RHX1NUQVRVU19WQlVTVkxEX01zayAgICAgICAgICAgKDB4MXVsIDw8IE9UR19TVEFUVVNfVkJVU1ZMRF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpTVEFUVVM6IFZCVVNWTEQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX1NUQVRVU19BU1BFUklfUG9zICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpTVEFUVVM6IEFTUEVSSSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIE9UR19TVEFUVVNfQVNQRVJJX01zayAgICAgICAgICAgICgweDF1bCA8PCBPVEdfU1RBVFVTX0FTUEVSSV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6U1RBVFVTOiBBU1BFUkkgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19TVEFUVVNfQVNIT1NUX1BvcyAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6U1RBVFVTOiBBU0hPU1QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBPVEdfU1RBVFVTX0FTSE9TVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX1NUQVRVU19BU0hPU1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlNUQVRVUzogQVNIT1NUIE1hc2sgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBPVEdfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIE9URyByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisKKyNlbmRpZiAvKiBfX09UR19SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvcGRtYV9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9wZG1hX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDBhNWEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvcGRtYV9yZWcuaApAQCAtMCwwICsxLDc3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHBkbWFfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFBETUEgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fUERNQV9SRUdfSF9fCisjZGVmaW5lIF9fUERNQV9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBlcmlwaGVyYWwgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFBETUEgUGVyaXBoZXJhbCBEaXJlY3QgTWVtb3J5IEFjY2VzcyBDb250cm9sbGVyKFBETUEpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIFBETUEgQ29udHJvbGxlcgorQHsgKi8KKworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqCisgICAgICogQHZhciBEU0NUX1Q6OkNUTAorICAgICAqIE9mZnNldDogMHgwMC8weDEwLzB4MjAvMHgzMC8weDQwLzB4NTAvMHg2MC8weDcwICBEZXNjcmlwdG9yIFRhYmxlIENvbnRyb2wgUmVnaXN0ZXIgb2YgUERNQSBDaGFubmVsIDB+NworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfE9QTU9ERSAgICB8UERNQSBPcGVyYXRpb24gTW9kZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IElkbGUgc3RhdGU6IENoYW5uZWwgaXMgc3RvcHBlZCBvciB0aGlzIHRhYmxlIGlzIGNvbXBsZXRlLCB3aGVuIFBETUEgZmluaXNoIGNoYW5uZWwgdGFibGUgdGFzaywgT1BNT0RFIHdpbGwgYmUgY2xlYXJlZCB0byBpZGxlIHN0YXRlIGF1dG9tYXRpY2FsbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCYXNpYyBtb2RlOiBUaGUgZGVzY3JpcHRvciB0YWJsZSBvbmx5IGhhcyBvbmUgdGFzaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhpcyB0YXNrIGlzIGZpbmlzaGVkLCB0aGUgVERJRihQRE1BX0lOVFNUU1sxXSkgd2lsbCBiZSBhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFNjYXR0ZXItR2F0aGVyIG1vZGU6IFdoZW4gb3BlcmF0aW5nIGluIHRoaXMgbW9kZSwgdXNlciBtdXN0IGdpdmUgdGhlIGZpcnN0IGRlc2NyaXB0b3IgdGFibGUgYWRkcmVzcyBpbiBQRE1BX0RTQ1RfRklSU1QgcmVnaXN0ZXI7IFBETUEgY29udHJvbGxlciB3aWxsIGlnbm9yZSB0aGlzIHRhc2ssIHRoZW4gbG9hZCB0aGUgbmV4dCB0YXNrIHRvIGV4ZWN1dGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBCZWZvcmUgZmlsbGluZyB0cmFuc2ZlciB0YXNrIGluIHRoZSBEZXNjcmlwdG9yIFRhYmxlLCB1c2VyIG11c3QgY2hlY2sgaWYgdGhlIGRlc2NyaXB0b3IgdGFibGUgaXMgY29tcGxldGUuCisgICAgICogfFsyXSAgICAgfFRYVFlQRSAgICB8VHJhbnNmZXIgVHlwZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCdXJzdCB0cmFuc2ZlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTaW5nbGUgdHJhbnNmZXIgdHlwZS4KKyAgICAgKiB8WzY6NF0gICB8QlVSU0laRSAgIHxCdXJzdCBTaXplCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIGZvciBwZXJpcGhlcmFsIHRvIGRldGVybWluZSB0aGUgYnVyc3Qgc2l6ZSBvciB1c2VkIGZvciBkZXRlcm1pbmUgdGhlIHJlLWFyYml0cmF0aW9uIHNpemUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gMTI4IFRyYW5zZmVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSA2NCBUcmFuc2ZlcnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gMzIgVHJhbnNmZXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IDE2IFRyYW5zZmVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSA4IFRyYW5zZmVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSA0IFRyYW5zZmVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSAyIFRyYW5zZmVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSAxIFRyYW5zZmVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGZpZWxkIGlzIG9ubHkgdXNlZnVsIGluIGJ1cnN0IHRyYW5zZmVyIHR5cGUuCisgICAgICogfFs3XSAgICAgfFRCSU5URElTICB8VGFibGUgSW50ZXJydXB0IERpc2FibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjYW4gYmUgdXNlZCB0byBkZWNpZGUgd2hldGhlciB0byBlbmFibGUgdGFibGUgaW50ZXJydXB0IG9yIG5vdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBUQklOVERJUyBiaXQgaXMgZW5hYmxlZCB3aGVuIFBETUEgY29udHJvbGxlciBmaW5pc2hlcyB0cmFuc2ZlciB0YXNrLCBpdCB3aWxsIG5vdCBnZW5lcmF0ZXMgdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhYmxlIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYWJsZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgdGhpcyBiaXQgc2V0IHRvIDEsIHRoZSBURU1QVFlGIHdpbGwgbm90IGJlIHNldC4KKyAgICAgKiB8Wzk6OF0gICB8U0FJTkMgICAgIHxTb3VyY2UgQWRkcmVzcyBJbmNyZW1lbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gc2V0IHRoZSBzb3VyY2UgYWRkcmVzcyBpbmNyZW1lbnQgc2l6ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IE5vIGluY3JlbWVudCAoZml4ZWQgYWRkcmVzcykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gSW5jcmVtZW50IGFuZCBzaXplIGlzIGRlcGVuZGVkIG9uIFRYV0lEVEggc2VsZWN0aW9uLgorICAgICAqIHxbMTE6MTBdIHxEQUlOQyAgICAgfERlc3RpbmF0aW9uIEFkZHJlc3MgSW5jcmVtZW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIHNldCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBpbmNyZW1lbnQgc2l6ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IE5vIGluY3JlbWVudCAoZml4ZWQgYWRkcmVzcykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gSW5jcmVtZW50IGFuZCBzaXplIGlzIGRlcGVuZGVkIG9uIFRYV0lEVEggc2VsZWN0aW9uLgorICAgICAqIHxbMTM6MTJdIHxUWFdJRFRIICAgfFRyYW5zZmVyIFdpZHRoIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgdHJhbnNmZXIgd2lkdGguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBPbmUgYnl0ZSAoOCBiaXQpIGlzIHRyYW5zZmVycmVkIGZvciBldmVyeSBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBPbmUgaGFsZi13b3JkICgxNiBiaXQpIGlzIHRyYW5zZmVycmVkIGZvciBldmVyeSBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBPbmUgd29yZCAoMzItYml0KSBpcyB0cmFuc2ZlcnJlZCBmb3IgZXZlcnkgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIFBETUEgdHJhbnNmZXIgc291cmNlIGFkZHJlc3MgKFBETUFfRFNDVF9TQSkgYW5kIFBETUEgdHJhbnNmZXIgZGVzdGluYXRpb24gYWRkcmVzcyAoUERNQV9EU0NUX0RBKSBzaG91bGQgYmUgYWxpZ25tZW50IHVuZGVyIHRoZSBUWFdJRFRIIHNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBleGFtcGxlLCBpZiBzb3VyY2UgYWRkcmVzcyBpcyAweDIwMDBfMDIwMiwgYnV0IFRYV0lEVEggaXMgd29yZCB0cmFuc2ZlciwgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIG5vdCB3b3JkIGFsaWdubWVudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzb3VyY2UgYWRkcmVzcyBpcyBhbGlnbmVkIHdoZW4gVFhXSURUSCBpcyBieXRlIG9yIGhhbGYtd29yZCB0cmFuc2Zlci4KKyAgICAgKiB8WzE0XSAgICB8VFhBQ0sgICAgIHxUcmFuc2ZlciBBY2tub3dsZWRnZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gdHJhbnNmZXIgYWNrIHdoZW4gdHJhbnNmZXIgZG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gdHJhbnNmZXIgYWNrIHdoZW4gUERNQSBnZXQgdHJhbnNmZXIgZGF0YS4KKyAgICAgKiB8WzE1XSAgICB8U1RSSURFRU4gfFN0cmlkZSBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3RyaWRlIHRyYW5zZmVyIG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0cmlkZSB0cmFuc2ZlciBtb2RlIEVuYWJsZWQuCisgICAgICogfFszMToxNl0gfFRYQ05UICAgICB8VHJhbnNmZXIgQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVFhDTlQgcmVwcmVzZW50cyB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIFBETUEgdHJhbnNmZXIsIHRoZSByZWFsIHRyYW5zZmVyIGNvdW50IGlzIChUWENOVCArIDEpOyBUaGUgbWF4aW11bSB0cmFuc2ZlciBjb3VudCBpcyAxNjM4NCAsIGV2ZXJ5IHRyYW5zZmVyIG1heSBiZSBieXRlLCBoYWxmLXdvcmQgb3Igd29yZCB0aGF0IGlzIGRlcGVuZGVudCBvbiBUWFdJRFRIIGZpZWxkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gUERNQSBmaW5pc2ggZWFjaCB0cmFuc2ZlciBkYXRhLCB0aGlzIGZpZWxkIHdpbGwgYmUgZGVjcmVhc2UgaW1tZWRpYXRlbHkuCisgICAgICogQHZhciBEU0NUX1Q6OlNBCisgICAgICogT2Zmc2V0OiAweDA0LzB4MTQvMHgyNC8weDM0LzB4NDQvMHg1NC8weDY0LzB4NzQgIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIG9mIFBETUEgQ2hhbm5lbCAwfjcKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTQSAgICAgICAgfFBETUEgVHJhbnNmZXIgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyBhIDMyLWJpdCBzb3VyY2UgYWRkcmVzcyBvZiBQRE1BIGNvbnRyb2xsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIFBETUEgdHJhbnNmZXIgc291cmNlIGFkZHJlc3Mgc2hvdWxkIGJlIGFsaWduZWQgd2l0aCB0aGUgVFhXSURUSChQRE1BX0RTQ1RuX0NUTFsxMzoxMl0sIG49MCwxLi43KSBzZWxlY3Rpb24uCisgICAgICogQHZhciBEU0NUX1Q6OkRBCisgICAgICogT2Zmc2V0OiAweDA4LzB4MTgvMHgyOC8weDM4LzB4NDgvMHg1OC8weDY4LzB4NzggIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgb2YgUERNQSBDaGFubmVsIDB+NworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfERBICAgICAgICB8UERNQSBUcmFuc2ZlciBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgYSAzMi1iaXQgZGVzdGluYXRpb24gYWRkcmVzcyBvZiBQRE1BIGNvbnRyb2xsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIFBETUEgdHJhbnNmZXIgZGVzdGluYXRpb24gYWRkcmVzcyBzaG91bGQgYmUgYWxpZ25lZCB3aXRoIHRoZSBUWFdJRFRIKFBETUFfRFNDVG5fQ1RMWzEzOjEyXSwgbj0wLDEuLjcpIHNlbGVjdGlvbi4KKyAgICAgKiBAdmFyIERTQ1RfVDo6TkVYVAorICAgICAqIE9mZnNldDogMHgwQy8weDFDLzB4MkMvMHgzQy8weDRDLzB4NUMvMHg2Qy8weDdDICBGaXJzdCBTY2F0dGVyLUdhdGhlciBEZXNjcmlwdG9yIFRhYmxlIE9mZnNldCBvZiBQRE1BIENoYW5uZWwgMH43CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8RklSU1QgICAgIHxQRE1BIEZpcnN0IERlc2NyaXB0b3IgVGFibGUgT2Zmc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgZGVzY3JpcHRvciB0YWJsZSBhZGRyZXNzIGluIHN5c3RlbSBtZW1vcnkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBzeXN0ZW0gbWVtb3J5IGJhc2VkIGFkZHJlc3MgaXMgMHgyMDAwXzAwMDAgKFBETUFfU0NBVEJBKSwgYW5kIHRoZSBmaXJzdCBkZXNjcmlwdG9yIHRhYmxlIGlzIHN0YXJ0IGZyb20gMHgyMDAwXzAxMDAsIHRoZW4gdGhpcyBmaWVsZCBtdXN0IGZpbGwgaW4gMHgwMTAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gb3BlcmF0aW5nIGluIHNjYXR0ZXItZ2F0aGVyIG1vZGUsIHRoZSBsYXN0IHR3byBiaXRzIEZJUlNUWzE6MF0gd2lsbCBiZWNvbWUgcmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoZSBmaXJzdCBkZXNjcmlwdG9yIHRhYmxlIGFkZHJlc3MgbXVzdCBiZSB3b3JkIGJvdW5kYXJ5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBCZWZvcmUgZmlsbGVkIHRyYW5zZmVyIHRhc2sgaW4gdGhlIGRlc2NyaXB0b3IgdGFibGUsIHVzZXIgbXVzdCBjaGVjayBpZiB0aGUgZGVzY3JpcHRvciB0YWJsZSBpcyBjb21wbGV0ZS4KKyAgICAgKiB8WzMxOjE2XSB8TkVYVCAgICAgIHxQRE1BIE5leHQgRGVzY3JpcHRvciBUYWJsZSBPZmZzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgb2Zmc2V0IG9mIG5leHQgZGVzY3JpcHRvciB0YWJsZSBhZGRyZXNzIGluIHN5c3RlbSBtZW1vcnkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogd3JpdGUgb3BlcmF0aW9uIGlzIHVzZWxlc3MgaW4gdGhpcyBmaWVsZC4KKyAgICAgKi8KKworICAgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAvKiE8IFsweDAwLzB4MTAvMHgyMC8weDMwLzB4NDAvMHg1MC8weDYwLzB4NzBdIERlc2NyaXB0b3IgVGFibGUgQ29udHJvbCBSZWdpc3RlciBvZiBQRE1BIENoYW5uZWwgMH43ICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU0E7ICAgICAgICAgICAgICAvKiE8IFsweDA0LzB4MTQvMHgyNC8weDM0LzB4NDQvMHg1NC8weDY0LzB4NzRdIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIG9mIFBETUEgQ2hhbm5lbCAwfjcgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgREE7ICAgICAgICAgICAgICAvKiE8IFsweDA4LzB4MTgvMHgyOC8weDM4LzB4NDgvMHg1OC8weDY4LzB4NzhdIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgb2YgUERNQSBDaGFubmVsIDB+NyAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTkVYVDsgICAgICAgICAgICAvKiE8IFsweDBDLzB4MUMvMHgyQy8weDNDLzB4NEMvMHg1Qy8weDZDLzB4N0NdTmV4dCBTY2F0dGVyLUdhdGhlciBEZXNjcmlwdG9yIFRhYmxlIE9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IERTQ1RfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKioKKyAgICAgKiBAdmFyIFNUUklERV9UOjpTVENSCisgICAgICogT2Zmc2V0OiAweDUwMC8weDUwOC8weDUxMC8weDUxOC8weDUyMC8weDUyOCAgU3RyaWRlIFRyYW5zZmVyIENvdW50IFJlZ2lzdGVyIG9mIFBETUEgQ2hhbm5lbCAwfjUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxTVEMgICAgICAgfFBETUEgU3RyaWRlIFRyYW5zZmVyIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIDE2LWJpdCByZWdpc3RlciBkZWZpbmVzIHRoZSBzdHJpZGUgdHJhbnNmZXIgY291bnQgb2YgZWFjaCByb3cuCisgICAgICogQHZhciBTVFJJREVfVDo6QVNPQ1IKKyAgICAgKiBPZmZzZXQ6IDB4NTA0LzB4NTBDLzB4NTE0LzB4NTFDLzB4NTI0LzB4NTJDICBBZGRyZXNzIFN0cmlkZSBPZmZzZXQgUmVnaXN0ZXIgb2YgUERNQSBDaGFubmVsIDB+NQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFNBU09MICAgICB8VkRNQSBTb3VyY2UgQWRkcmVzcyBTdHJpZGUgT2Zmc2V0IExlbmd0aAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSAxNi1iaXQgcmVnaXN0ZXIgZGVmaW5lcyB0aGUgc291cmNlIGFkZHJlc3Mgc3RyaWRlIHRyYW5zZmVyIG9mZnNldCBjb3VudCBvZiBlYWNoIHJvdy4KKyAgICAgKiB8WzMxOjE2XSB8REFTT0wgICAgIHxWRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgU3RyaWRlIE9mZnNldCBMZW5ndGgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgMTYtYml0IHJlZ2lzdGVyIGRlZmluZXMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgc3RyaWRlIHRyYW5zZmVyIG9mZnNldCBjb3VudCBvZiBlYWNoIHJvdy4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQ1I7ICAgICAgICAgICAvKiE8IFsweDA1MDAvMHg1MDgvMHg1MTAvMHg1MTgvMHg1MjAvMHg1MjhdIFN0cmlkZSBUcmFuc2ZlciBDb3VudCBSZWdpc3RlciBvZiBQRE1BIENoYW5uZWwgMH43ICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQVNPQ1I7ICAgICAgICAgIC8qITwgWzB4MDUwNC8weDUwQy8weDUxNC8weDUxQy8weDUyNC8weDUyQ10gQWRkcmVzcyBTdHJpZGUgT2Zmc2V0IFJlZ2lzdGVyIG9mIFBETUEgQ2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICovCit9IFNUUklERV9UOworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIFBETUFfVDo6Q1VSU0NBVAorICAgICAqIE9mZnNldDogMHg4MC8weDg0LzB4ODgvMHg4Qy8weDkwLzB4OTQvMHg5OC8weDlDICBDdXJyZW50IFNjYXR0ZXItR2F0aGVyIERlc2NyaXB0b3IgVGFibGUgQWRkcmVzcyBvZiBQRE1BIENoYW5uZWwgMH43CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8Q1VSQUREUiAgIHxQRE1BIEN1cnJlbnQgRGVzY3JpcHRpb24gQWRkcmVzcyBSZWdpc3RlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIGEgMzItYml0IGN1cnJlbnQgZXh0ZXJuYWwgZGVzY3JpcHRpb24gYWRkcmVzcyBvZiBQRE1BIGNvbnRyb2xsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBmaWVsZCBpcyByZWFkIG9ubHkgYW5kIG9ubHkgdXNlZCBmb3IgU2NhdHRlci1HYXRoZXIgbW9kZSB0byBpbmRpY2F0ZSB0aGUgY3VycmVudCBleHRlcm5hbCBkZXNjcmlwdGlvbiBhZGRyZXNzLgorICAgICAqIEB2YXIgUERNQV9UOjpDSENUTAorICAgICAqIE9mZnNldDogMHg0MDAgIFBETUEgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8Q0hFTm4gICAgIHxQRE1BIENoYW5uZWwgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCB0byAxIHRvIGVuYWJsZSBQRE1BbiBvcGVyYXRpb24uIENoYW5uZWwgY2Fubm90IGJlIGFjdGl2ZSBpZiBpdCBpcyBub3Qgc2V0IGFzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBETUEgY2hhbm5lbCBbbl0gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBETUEgY2hhbm5lbCBbbl0gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBTZXQgY29ycmVzcG9uZGluZyBiaXQgb2YgUERNQV9QQVVTRSBvciBQRE1BX0NIUlNUIHJlZ2lzdGVyIHdpbGwgYWxzbyBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiBAdmFyIFBETUFfVDo6UEFVU0UKKyAgICAgKiBPZmZzZXQ6IDB4NDA0ICBQRE1BIFRyYW5zZmVyIFBhdXNlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxQQVVTRW4gICAgfFBETUEgVHJhbnNmZXIgUGF1c2UgQ29udHJvbCBSZWdpc3RlciAoV3JpdGUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBzZXQgUEFVU0VuIGJpdCBmaWVsZCB0byBwYXVzZSB0aGUgUERNQSB0cmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdXNlciBzZXRzIFBBVVNFbiBiaXQsIHRoZSBQRE1BIGNvbnRyb2xsZXIgd2lsbCBwYXVzZSB0aGUgb24tZ29pbmcgdHJhbnNmZXIsIHRoZW4gY2xlYXIgdGhlIGNoYW5uZWwgZW5hYmxlIGJpdCBDSEVOKFBETUFfQ0hDVEwgW25dLCBuPTAsMS4uNykgYW5kIGNsZWFyIHJlcXVlc3QgYWN0aXZlIGZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiByZS1lbmFibGUgdGhlIHBhdXNlZCBjaGFubmVsIGFnYWluLCB0aGUgcmVtYWluaW5nIHRyYW5zZmVycyB3aWxsIGJlIHByb2Nlc3NlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQYXVzZSBQRE1BIGNoYW5uZWwgbiB0cmFuc2Zlci4KKyAgICAgKiBAdmFyIFBETUFfVDo6U1dSRVEKKyAgICAgKiBPZmZzZXQ6IDB4NDA4ICBQRE1BIFNvZnR3YXJlIFJlcXVlc3QgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxTV1JFUW4gICAgfFBETUEgU29mdHdhcmUgUmVxdWVzdCBSZWdpc3RlciAoV3JpdGUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgdG8gMSB0byBnZW5lcmF0ZSBhIHNvZnR3YXJlIHJlcXVlc3QgdG8gUERNQSBbbl0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR2VuZXJhdGUgYSBzb2Z0d2FyZSByZXF1ZXN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBVc2VyIGNhbiByZWFkIFBETUFfVFJHU1RTIHJlZ2lzdGVyIHRvIGtub3cgd2hpY2ggY2hhbm5lbCBpcyBvbiBhY3RpdmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBY3RpdmUgZmxhZyBtYXkgYmUgdHJpZ2dlcmVkIGJ5IHNvZnR3YXJlIHJlcXVlc3Qgb3IgcGVyaXBoZXJhbCByZXF1ZXN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiB1c2VyIGRvZXMgbm90IGVuYWJsZSBjb3JyZXNwb25kaW5nIFBETUEgY2hhbm5lbCwgdGhlIHNvZnR3YXJlIHJlcXVlc3Qgd2lsbCBiZSBpZ25vcmVkLgorICAgICAqIEB2YXIgUERNQV9UOjpUUkdTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NDBDICBQRE1BIENoYW5uZWwgUmVxdWVzdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxSRVFTVFNuICAgfFBETUEgQ2hhbm5lbCBSZXF1ZXN0IFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgd2hldGhlciBjaGFubmVsW25dIGhhdmUgYSByZXF1ZXN0IG9yIG5vdCwgbm8gbWF0dGVyIHJlcXVlc3QgZnJvbSBzb2Z0d2FyZSBvciBwZXJpcGhlcmFsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBQRE1BIGNvbnRyb2xsZXIgZmluaXNoZXMgY2hhbm5lbCB0cmFuc2ZlciwgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBETUEgQ2hhbm5lbCBuIGhhcyBubyByZXF1ZXN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIENoYW5uZWwgbiBoYXMgYSByZXF1ZXN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIHVzZXIgcGF1c2VzIG9yIHJlc2V0cyBlYWNoIFBETUEgdHJhbnNmZXIgYnkgc2V0dGluZyBQRE1BX1BBVVNFIG9yIFBETUFfQ0hSU1QgcmVnaXN0ZXIgcmVzcGVjdGl2ZWx5LCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciBmaW5pc2hpbmcgY3VycmVudCB0cmFuc2Zlci4KKyAgICAgKiBAdmFyIFBETUFfVDo6UFJJU0VUCisgICAgICogT2Zmc2V0OiAweDQxMCAgUERNQSBGaXhlZCBQcmlvcml0eSBTZXR0aW5nIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8RlBSSVNFVG4gIHxQRE1BIEZpeGVkIFByaW9yaXR5IFNldHRpbmcgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgdG8gMSB0byBlbmFibGUgZml4ZWQgcHJpb3JpdHkgbGV2ZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNldCBQRE1BIGNoYW5uZWwgW25dIHRvIGZpeGVkIHByaW9yaXR5IGNoYW5uZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvcnJlc3BvbmRpbmcgUERNQSBjaGFubmVsIGlzIHJvdW5kLXJvYmluIHByaW9yaXR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb3JyZXNwb25kaW5nIFBETUEgY2hhbm5lbCBpcyBmaXhlZCBwcmlvcml0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGZpZWxkIG9ubHkgc2V0IHRvIGZpeGVkIHByaW9yaXR5LCBjbGVhciBmaXhlZCBwcmlvcml0eSB1c2UgUERNQV9QUklDTFIgcmVnaXN0ZXIuCisgICAgICogQHZhciBQRE1BX1Q6OlBSSUNMUgorICAgICAqIE9mZnNldDogMHg0MTQgIFBETUEgRml4ZWQgUHJpb3JpdHkgQ2xlYXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxGUFJJQ0xSbiAgfFBETUEgRml4ZWQgUHJpb3JpdHkgQ2xlYXIgUmVnaXN0ZXIgKFdyaXRlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRoaXMgYml0IHRvIDEgdG8gY2xlYXIgZml4ZWQgcHJpb3JpdHkgbGV2ZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgUERNQSBjaGFubmVsIFtuXSBmaXhlZCBwcmlvcml0eSBzZXR0aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFVzZXIgY2FuIHJlYWQgUERNQV9QUklTRVQgcmVnaXN0ZXIgdG8ga25vdyB0aGUgY2hhbm5lbCBwcmlvcml0eS4KKyAgICAgKiBAdmFyIFBETUFfVDo6SU5URU4KKyAgICAgKiBPZmZzZXQ6IDB4NDE4ICBQRE1BIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxJTlRFTm4gICAgfFBETUEgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgZW5hYmxpbmcgUERNQSBjaGFubmVsW25dIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQSBjaGFubmVsIG4gaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIGNoYW5uZWwgbiBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiBAdmFyIFBETUFfVDo6SU5UU1RTCisgICAgICogT2Zmc2V0OiAweDQxQyAgUERNQSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QUJUSUYgICAgIHxQRE1BIFJlYWQvV3JpdGUgVGFyZ2V0IEFib3J0IEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgUERNQSBoYXMgdGFyZ2V0IGFib3J0IGVycm9yOyBTb2Z0d2FyZSBjYW4gcmVhZCBQRE1BX0FCVFNUUyByZWdpc3RlciB0byBmaW5kIHdoaWNoIGNoYW5uZWwgaGFzIHRhcmdldCBhYm9ydCBlcnJvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQUhCIGJ1cyBFUlJPUiByZXNwb25zZSByZWNlaXZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUhCIGJ1cyBFUlJPUiByZXNwb25zZSByZWNlaXZlZC4KKyAgICAgKiB8WzFdICAgICB8VERJRiAgICAgIHxUcmFuc2ZlciBEb25lIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgUERNQSBjb250cm9sbGVyIGhhcyBmaW5pc2hlZCB0cmFuc21pc3Npb247IFVzZXIgY2FuIHJlYWQgUERNQV9URFNUUyByZWdpc3RlciB0byBpbmRpY2F0ZSB3aGljaCBjaGFubmVsIGZpbmlzaGVkIHRyYW5zZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb3QgZmluaXNoZWQgeWV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIGNoYW5uZWwgaGFzIGZpbmlzaGVkIHRyYW5zbWlzc2lvbi4KKyAgICAgKiB8WzJdICAgICB8QUxJR05GICAgIHxUcmFuc2ZlciBBbGlnbm1lbnQgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQSBjaGFubmVsIHNvdXJjZSBhZGRyZXNzIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzIGJvdGggZm9sbG93IHRyYW5zZmVyIHdpZHRoIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBETUEgY2hhbm5lbCBzb3VyY2UgYWRkcmVzcyBvciBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIG5vdCBmb2xsb3cgdHJhbnNmZXIgd2lkdGggc2V0dGluZy4KKyAgICAgKiB8WzhdICAgICB8UkVRVE9GMCAgIHxSZXF1ZXN0IFRpbWUtb3V0IEZsYWcgZm9yIENoYW5uZWwgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCBQRE1BIGNvbnRyb2xsZXIgaGFzIHdhaXRlZCBwZXJpcGhlcmFsIHJlcXVlc3QgZm9yIGEgcGVyaW9kIGRlZmluZWQgYnkgUERNQV9UT0MwLCB1c2VyIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoZXNlIGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHJlcXVlc3QgdGltZS1vdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBlcmlwaGVyYWwgcmVxdWVzdCB0aW1lLW91dC4KKyAgICAgKiB8WzldICAgICB8UkVRVE9GMSAgIHxSZXF1ZXN0IFRpbWUtb3V0IEZsYWcgZm9yIENoYW5uZWwgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCBQRE1BIGNvbnRyb2xsZXIgaGFzIHdhaXRlZCBwZXJpcGhlcmFsIHJlcXVlc3QgZm9yIGEgcGVyaW9kIGRlZmluZWQgYnkgUERNQV9UT0MxLCB1c2VyIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoZXNlIGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHJlcXVlc3QgdGltZS1vdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBlcmlwaGVyYWwgcmVxdWVzdCB0aW1lLW91dC4KKyAgICAgKiBAdmFyIFBETUFfVDo6QUJUU1RTCisgICAgICogT2Zmc2V0OiAweDQyMCAgUERNQSBDaGFubmVsIFJlYWQvV3JpdGUgVGFyZ2V0IEFib3J0IEZsYWcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxBQlRJRm4gICAgfFBETUEgUmVhZC9Xcml0ZSBUYXJnZXQgQWJvcnQgSW50ZXJydXB0IFN0YXR1cyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHdoaWNoIFBETUEgY29udHJvbGxlciBoYXMgdGFyZ2V0IGFib3J0IGVycm9yOyBVc2VyIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoZXNlIGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEFIQiBidXMgRVJST1IgcmVzcG9uc2UgcmVjZWl2ZWQgd2hlbiBjaGFubmVsIG4gdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFIQiBidXMgRVJST1IgcmVzcG9uc2UgcmVjZWl2ZWQgd2hlbiBjaGFubmVsIG4gdHJhbnNmZXIuCisgICAgICogQHZhciBQRE1BX1Q6OlREU1RTCisgICAgICogT2Zmc2V0OiAweDQyNCAgUERNQSBDaGFubmVsIFRyYW5zZmVyIERvbmUgRmxhZyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFRESUZuICAgICB8VHJhbnNmZXIgRG9uZSBGbGFnIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgUERNQSBjb250cm9sbGVyIGNoYW5uZWwgdHJhbnNmZXIgaGFzIGJlZW4gZmluaXNoZWQgb3Igbm90LCB1c2VyIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoZXNlIGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBETUEgY2hhbm5lbCB0cmFuc2ZlciBoYXMgbm90IGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIGNoYW5uZWwgaGFzIGZpbmlzaGVkIHRyYW5zbWlzc2lvbi4KKyAgICAgKiBAdmFyIFBETUFfVDo6QUxJR04KKyAgICAgKiBPZmZzZXQ6IDB4NDI4ICBQRE1BIFRyYW5zZmVyIEFsaWdubWVudCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxBTElHTm4gICAgfFRyYW5zZmVyIEFsaWdubWVudCBGbGFnIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBETUEgY2hhbm5lbCBzb3VyY2UgYWRkcmVzcyBhbmQgZGVzdGluYXRpb24gYWRkcmVzcyBib3RoIGZvbGxvdyB0cmFuc2ZlciB3aWR0aCBzZXR0aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIGNoYW5uZWwgc291cmNlIGFkZHJlc3Mgb3IgZGVzdGluYXRpb24gYWRkcmVzcyBpcyBub3QgZm9sbG93IHRyYW5zZmVyIHdpZHRoIHNldHRpbmcuCisgICAgICogQHZhciBQRE1BX1Q6OlRBQ1RTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NDJDICBQRE1BIFRyYW5zZmVyIEFjdGl2ZSBGbGFnIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8VFhBQ1RGbiAgIHxUcmFuc2ZlciBvbiBBY3RpdmUgRmxhZyBSZWdpc3RlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB3aGljaCBQRE1BIGNoYW5uZWwgaXMgaW4gYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRE1BIGNoYW5uZWwgaXMgbm90IGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIGNoYW5uZWwgaXMgYWN0aXZlLgorICAgICAqIEB2YXIgUERNQV9UOjpUT1VUUFNDCisgICAgICogT2Zmc2V0OiAweDQzMCAgUERNQSBUaW1lLW91dCBQcmVzY2FsZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxUT1VUUFNDMCAgfFBETUEgQ2hhbm5lbCAwIFRpbWUtb3V0IENsb2NrIFNvdXJjZSBQcmVzY2FsZXIgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IFBETUEgY2hhbm5lbCAwIHRpbWUtb3V0IGNsb2NrIHNvdXJjZSBpcyBIQ0xLLzJeOC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBQRE1BIGNoYW5uZWwgMCB0aW1lLW91dCBjbG9jayBzb3VyY2UgaXMgSENMSy8yXjkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gUERNQSBjaGFubmVsIDAgdGltZS1vdXQgY2xvY2sgc291cmNlIGlzIEhDTEsvMl4xMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBQRE1BIGNoYW5uZWwgMCB0aW1lLW91dCBjbG9jayBzb3VyY2UgaXMgSENMSy8yXjExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFBETUEgY2hhbm5lbCAwIHRpbWUtb3V0IGNsb2NrIHNvdXJjZSBpcyBIQ0xLLzJeMTIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gUERNQSBjaGFubmVsIDAgdGltZS1vdXQgY2xvY2sgc291cmNlIGlzIEhDTEsvMl4xMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSBQRE1BIGNoYW5uZWwgMCB0aW1lLW91dCBjbG9jayBzb3VyY2UgaXMgSENMSy8yXjE0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IFBETUEgY2hhbm5lbCAwIHRpbWUtb3V0IGNsb2NrIHNvdXJjZSBpcyBIQ0xLLzJeMTUuCisgICAgICogfFs2OjRdICAgfFRPVVRQU0MxICB8UERNQSBDaGFubmVsIDEgVGltZS1vdXQgQ2xvY2sgU291cmNlIFByZXNjYWxlciBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gUERNQSBjaGFubmVsIDEgdGltZS1vdXQgY2xvY2sgc291cmNlIGlzIEhDTEsvMl44LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IFBETUEgY2hhbm5lbCAxIHRpbWUtb3V0IGNsb2NrIHNvdXJjZSBpcyBIQ0xLLzJeOS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBQRE1BIGNoYW5uZWwgMSB0aW1lLW91dCBjbG9jayBzb3VyY2UgaXMgSENMSy8yXjEwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IFBETUEgY2hhbm5lbCAxIHRpbWUtb3V0IGNsb2NrIHNvdXJjZSBpcyBIQ0xLLzJeMTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gUERNQSBjaGFubmVsIDEgdGltZS1vdXQgY2xvY2sgc291cmNlIGlzIEhDTEsvMl4xMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBQRE1BIGNoYW5uZWwgMSB0aW1lLW91dCBjbG9jayBzb3VyY2UgaXMgSENMSy8yXjEzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IFBETUEgY2hhbm5lbCAxIHRpbWUtb3V0IGNsb2NrIHNvdXJjZSBpcyBIQ0xLLzJeMTQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gUERNQSBjaGFubmVsIDEgdGltZS1vdXQgY2xvY2sgc291cmNlIGlzIEhDTEsvMl4xNS4KKyAgICAgKiBAdmFyIFBETUFfVDo6VE9VVEVOCisgICAgICogT2Zmc2V0OiAweDQzNCAgUERNQSBUaW1lLW91dCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxUT1VURU4wICAgfFBETUEgQ2hhbm5lbCAwIFRpbWUtb3V0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQSBDaGFubmVsIDAgdGltZS1vdXQgZnVuY3Rpb24gRGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUERNQSBDaGFubmVsIDAgdGltZS1vdXQgZnVuY3Rpb24gRW5hYmxlLgorICAgICAqIHxbMV0gICAgIHxUT1VURU4xICAgfFBETUEgQ2hhbm5lbCAxIFRpbWUtb3V0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQSBDaGFubmVsIDEgdGltZS1vdXQgZnVuY3Rpb24gRGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUERNQSBDaGFubmVsIDEgdGltZS1vdXQgZnVuY3Rpb24gRW5hYmxlLgorICAgICAqIEB2YXIgUERNQV9UOjpUT1VUSUVOCisgICAgICogT2Zmc2V0OiAweDQzOCAgUERNQSBUaW1lLW91dCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8VE9VVElFTjAgIHxQRE1BIENoYW5uZWwgMCBUaW1lLW91dCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRE1BIENoYW5uZWwgMCB0aW1lLW91dCBpbnRlcnJ1cHQgRGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUERNQSBDaGFubmVsIDAgdGltZS1vdXQgaW50ZXJydXB0IEVuYWJsZS4KKyAgICAgKiB8WzFdICAgICB8VE9VVElFTjEgIHxQRE1BIENoYW5uZWwgMSBUaW1lLW91dCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRE1BIENoYW5uZWwgMSB0aW1lLW91dCBpbnRlcnJ1cHQgRGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUERNQSBDaGFubmVsIDEgdGltZS1vdXQgaW50ZXJydXB0IEVuYWJsZS4KKyAgICAgKiBAdmFyIFBETUFfVDo6U0NBVEJBCisgICAgICogT2Zmc2V0OiAweDQzQyAgUERNQSBTY2F0dGVyLUdhdGhlciBEZXNjcmlwdG9yIFRhYmxlIEJhc2UgQWRkcmVzcyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMToxNl0gfFNDQVRCQSAgICB8UERNQSBTY2F0dGVyLWdhdGhlciBEZXNjcmlwdG9yIFRhYmxlIEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBTY2F0dGVyLUdhdGhlciBtb2RlLCB0aGlzIGlzIHRoZSBiYXNlIGFkZHJlc3MgZm9yIGNhbGN1bGF0aW5nIHRoZSBuZXh0IGxpbmsgLSBsaXN0IGFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgbmV4dCBsaW5rIGFkZHJlc3MgZXF1YXRpb24gaXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOZXh0IExpbmsgQWRkcmVzcyA9IFBETUFfU0NBVEJBICsgUERNQV9EU0NUX05FWFQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogT25seSB1c2VmdWwgaW4gU2NhdHRlci1HYXRoZXIgbW9kZS4KKyAgICAgKiBAdmFyIFBETUFfVDo6VE9DMF8xCisgICAgICogT2Zmc2V0OiAweDQ0MCAgUERNQSBDaGFubmVsIDAgYW5kIENoYW5uZWwgMSBUaW1lLW91dCBDb3VudGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8VE9DMCAgICAgIHxUaW1lLW91dCBDb3VudGVyIGZvciBDaGFubmVsIDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGNvbnRyb2xzIHRoZSBwZXJpb2Qgb2YgdGltZS1vdXQgZnVuY3Rpb24gZm9yIGNoYW5uZWwgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjYWxjdWxhdGlvbiB1bml0IGlzIGJhc2VkIG9uIFRPVVRQU0MwIChQRE1BX1RPVVRQU0NbMjowXSkgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGltZS1vdXQgcGVyaW9kID0gKFBlcmlvZCBvZiB0aW1lLW91dCBjbG9jaykgKiAoMTYtYml0IFRPQ24pLG4gPSAwLDEuCisgICAgICogfFszMToxNl0gfFRPQzEgICAgICB8VGltZS1vdXQgQ291bnRlciBmb3IgQ2hhbm5lbCAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBjb250cm9scyB0aGUgcGVyaW9kIG9mIHRpbWUtb3V0IGZ1bmN0aW9uIGZvciBjaGFubmVsIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY2FsY3VsYXRpb24gdW5pdCBpcyBiYXNlZCBvbiBUT1VUUFNDMSAoUERNQV9UT1VUUFNDWzU6M10pIGNsb2NrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGV4YW1wbGUgb2YgdGltZS1vdXQgcGVyaW9kIGNhbiByZWZlciBUT0MwIGJpdCBkZXNjcmlwdGlvbi4KKyAgICAgKiBAdmFyIFBETUFfVDo6Q0hSU1QKKyAgICAgKiBPZmZzZXQ6IDB4NDYwICBQRE1BIENoYW5uZWwgUmVzZXQgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfENIblJTVCAgICB8Q2hhbm5lbCBOIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBuIG5vdCByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gY29ycmVzcG9uZGluZyBjaGFubmVsIG4gaXMgcmVzZXQuCisgICAgICogQHZhciBQRE1BX1Q6OlJFUVNFTDBfMworICAgICAqIE9mZnNldDogMHg0ODAgIFBETUEgQ2hhbm5lbCAwIHRvIENoYW5uZWwgMyBSZXF1ZXN0IFNvdXJjZSBTZWxlY3QgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNjowXSAgIHxSRVFTUkMwICAgfENoYW5uZWwgMCBSZXF1ZXN0IFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpbGVkIGRlZmluZXMgd2hpY2ggcGVyaXBoZXJhbCBpcyBjb25uZWN0ZWQgdG8gUERNQSBjaGFubmVsIDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBjb25maWd1cmUgdGhlIHBlcmlwaGVyYWwgYnkgc2V0dGluZyBSRVFTUkMwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEaXNhYmxlIFBETUEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDIgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFVTQl9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwzID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVU0JfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NCA9IENoYW5uZWwgY29ubmVjdHMgdG8gVUFSVDBfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NSA9IENoYW5uZWwgY29ubmVjdHMgdG8gVUFSVDBfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NiA9IENoYW5uZWwgY29ubmVjdHMgdG8gVUFSVDFfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NyA9IENoYW5uZWwgY29ubmVjdHMgdG8gVUFSVDFfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8OCA9IENoYW5uZWwgY29ubmVjdHMgdG8gVUFSVDJfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8OSA9IENoYW5uZWwgY29ubmVjdHMgdG8gVUFSVDJfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFVBUlQzX1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVQVJUM19SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMiA9IENoYW5uZWwgY29ubmVjdHMgdG8gVUFSVDRfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTMgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFVBUlQ0X1JYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDE0ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVQVJUNV9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxNSA9IENoYW5uZWwgY29ubmVjdHMgdG8gVUFSVDVfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTYgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFVTQ0kwX1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDE3ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVU0NJMF9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxOCA9IENoYW5uZWwgY29ubmVjdHMgdG8gVVNDSTFfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTkgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFVTQ0kxX1JYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDIwID0gQ2hhbm5lbCBjb25uZWN0cyB0byBRU1BJMF9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyMSA9IENoYW5uZWwgY29ubmVjdHMgdG8gUVNQSTBfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MjIgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFNQSTBfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MjMgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFNQSTBfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MjQgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFNQSTFfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MjUgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFNQSTFfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MjYgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFNQSTJfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MjcgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFNQSTJfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MjggPSBDaGFubmVsIGNvbm5lY3RzIHRvIFNQSTNfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MjkgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFNQSTNfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MzIgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEVQV00wX1AxX1JYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDMzID0gQ2hhbm5lbCBjb25uZWN0cyB0byBFUFdNMF9QMl9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwzNCA9IENoYW5uZWwgY29ubmVjdHMgdG8gRVBXTTBfUDNfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MzUgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEVQV00xX1AxX1JYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDM2ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBFUFdNMV9QMl9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwzNyA9IENoYW5uZWwgY29ubmVjdHMgdG8gRVBXTTFfUDNfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MzggPSBDaGFubmVsIGNvbm5lY3RzIHRvIEkyQzBfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MzkgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEkyQzBfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NDAgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEkyQzFfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NDEgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEkyQzFfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NDIgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEkyQzJfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NDMgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEkyQzJfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NDQgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEkyUzBfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NDUgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEkyUzBfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NDYgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFRNUjAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NDcgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFRNUjEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NDggPSBDaGFubmVsIGNvbm5lY3RzIHRvIFRNUjIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NDkgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFRNUjMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NTAgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEFEQ19SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw1MSA9IENoYW5uZWwgY29ubmVjdHMgdG8gREFDMF9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw1MiA9IENoYW5uZWwgY29ubmVjdHMgdG8gREFDMV9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw1MyA9IENoYW5uZWwgY29ubmVjdHMgdG8gRVBXTTBfQ0gwX1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDU0ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBFUFdNMF9DSDFfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NTUgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEVQV00wX0NIMl9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw1NiA9IENoYW5uZWwgY29ubmVjdHMgdG8gRVBXTTBfQ0gzX1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDU3ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBFUFdNMF9DSDRfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NTggPSBDaGFubmVsIGNvbm5lY3RzIHRvIEVQV00wX0NINV9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw1OSA9IENoYW5uZWwgY29ubmVjdHMgdG8gRVBXTTFfQ0gwX1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDYwID0gQ2hhbm5lbCBjb25uZWN0cyB0byBFUFdNMV9DSDFfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NjEgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEVQV00xX0NIMl9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw2MiA9IENoYW5uZWwgY29ubmVjdHMgdG8gRVBXTTFfQ0gzX1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDYzID0gQ2hhbm5lbCBjb25uZWN0cyB0byBFUFdNMV9DSDRfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NjQgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEVQV00xX0NINV9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlIDE6IEEgcmVxdWVzdCBzb3VyY2UgY2Fubm90IGFzc2lnbiB0byB0d28gY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlIDI6IFRoaXMgZmllbGQgaXMgdXNlbGVzcyB3aGVuIHRyYW5zZmVyIGJldHdlZW4gbWVtb3J5IGFuZCBtZW1vcnkuCisgICAgICogfFsxNDo4XSAgfFJFUVNSQzEgICB8Q2hhbm5lbCAxIFJlcXVlc3QgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmlsZWQgZGVmaW5lcyB3aGljaCBwZXJpcGhlcmFsIGlzIGNvbm5lY3RlZCB0byBQRE1BIGNoYW5uZWwgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGNvbmZpZ3VyZSB0aGUgcGVyaXBoZXJhbCBzZXR0aW5nIGJ5IFJFUVNSQzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiBpcyB0aGUgc2FtZSBhcyBSRVFTUkMwIGZpZWxkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UGxlYXNlIHJlZmVyIHRvIHRoZSBleHBsYW5hdGlvbiBvZiBSRVFTUkMwLgorICAgICAqIHxbMjI6MTZdIHxSRVFTUkMyICAgfENoYW5uZWwgMiBSZXF1ZXN0IFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpbGVkIGRlZmluZXMgd2hpY2ggcGVyaXBoZXJhbCBpcyBjb25uZWN0ZWQgdG8gUERNQSBjaGFubmVsIDIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBjb25maWd1cmUgdGhlIHBlcmlwaGVyYWwgc2V0dGluZyBieSBSRVFTUkMyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gaXMgdGhlIHNhbWUgYXMgUkVRU1JDMCBmaWVsZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBsZWFzZSByZWZlciB0byB0aGUgZXhwbGFuYXRpb24gb2YgUkVRU1JDMC4KKyAgICAgKiB8WzMwOjI0XSB8UkVRU1JDMyAgIHxDaGFubmVsIDMgUmVxdWVzdCBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWxlZCBkZWZpbmVzIHdoaWNoIHBlcmlwaGVyYWwgaXMgY29ubmVjdGVkIHRvIFBETUEgY2hhbm5lbCAzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gY29uZmlndXJlIHRoZSBwZXJpcGhlcmFsIHNldHRpbmcgYnkgUkVRU1JDMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgY2hhbm5lbCBjb25maWd1cmF0aW9uIGlzIHRoZSBzYW1lIGFzIFJFUVNSQzAgZmllbGQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQbGVhc2UgcmVmZXIgdG8gdGhlIGV4cGxhbmF0aW9uIG9mIFJFUVNSQzAuCisgICAgICogQHZhciBQRE1BX1Q6OlJFUVNFTDRfNworICAgICAqIE9mZnNldDogMHg0ODQgIFBETUEgUmVxdWVzdCBTb3VyY2UgU2VsZWN0IFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNjowXSAgIHxSRVFTUkM0ICAgfENoYW5uZWwgNCBSZXF1ZXN0IFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpbGVkIGRlZmluZXMgd2hpY2ggcGVyaXBoZXJhbCBpcyBjb25uZWN0ZWQgdG8gUERNQSBjaGFubmVsIDQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBjb25maWd1cmUgdGhlIHBlcmlwaGVyYWwgc2V0dGluZyBieSBSRVFTUkM0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gaXMgdGhlIHNhbWUgYXMgUkVRU1JDMCBmaWVsZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBsZWFzZSByZWZlciB0byB0aGUgZXhwbGFuYXRpb24gb2YgUkVRU1JDMC4KKyAgICAgKiB8WzE0OjhdICB8UkVRU1JDNSAgIHxDaGFubmVsIDUgUmVxdWVzdCBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWxlZCBkZWZpbmVzIHdoaWNoIHBlcmlwaGVyYWwgaXMgY29ubmVjdGVkIHRvIFBETUEgY2hhbm5lbCA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gY29uZmlndXJlIHRoZSBwZXJpcGhlcmFsIHNldHRpbmcgYnkgUkVRU1JDNS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgY2hhbm5lbCBjb25maWd1cmF0aW9uIGlzIHRoZSBzYW1lIGFzIFJFUVNSQzAgZmllbGQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQbGVhc2UgcmVmZXIgdG8gdGhlIGV4cGxhbmF0aW9uIG9mIFJFUVNSQzAuCisgICAgICogfFsyMjoxNl0gfFJFUVNSQzYgICB8Q2hhbm5lbCA2IFJlcXVlc3QgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmlsZWQgZGVmaW5lcyB3aGljaCBwZXJpcGhlcmFsIGlzIGNvbm5lY3RlZCB0byBQRE1BIGNoYW5uZWwgNgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGNvbmZpZ3VyZSB0aGUgcGVyaXBoZXJhbCBzZXR0aW5nIGJ5IFJFUVNSQzYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiBpcyB0aGUgc2FtZSBhcyBSRVFTUkMwIGZpZWxkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UGxlYXNlIHJlZmVyIHRvIHRoZSBleHBsYW5hdGlvbiBvZiBSRVFTUkMwLgorICAgICAqIHxbMzA6MjRdIHxSRVFTUkM3ICAgfENoYW5uZWwgNyBSZXF1ZXN0IFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpbGVkIGRlZmluZXMgd2hpY2ggcGVyaXBoZXJhbCBpcyBjb25uZWN0ZWQgdG8gUERNQSBjaGFubmVsIDcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBjb25maWd1cmUgdGhlIHBlcmlwaGVyYWwgc2V0dGluZyBieSBSRVFTUkM3LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gaXMgdGhlIHNhbWUgYXMgUkVRU1JDMCBmaWVsZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBsZWFzZSByZWZlciB0byB0aGUgZXhwbGFuYXRpb24gb2YgUkVRU1JDMC4KKyAgICAgKi8KKworICAgIERTQ1RfVCAgICAgICAgRFNDVFs4XTsgICAgICAgICAgICAgICAvKiE8IFsweDAwMDAgfiAweDAwN0NdIERNQSBFbWJlZGRlZCBEZXNjcmlwdGlvbiBUYWJsZSAwfjcgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IENVUlNDQVRbOF07ICAgICAgICAgICAgLyohPCBbMHgwMDgwfjB4MDA5Q10gQ3VycmVudCBTY2F0dGVyLUdhdGhlciBEZXNjcmlwdG9yIFRhYmxlIEFkZHJlc3Mgb2YgUERNQSBDaGFubmVsIDB+NyAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTBbMjE2XTsKKyAgICBfX0lPIHVpbnQzMl90IENIQ1RMOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwNDAwXSBQRE1BIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBQQVVTRTsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDQwNF0gUERNQSBUcmFuc2ZlciBQYXVzZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fTyAgdWludDMyX3QgU1dSRVE7ICAgICAgICAgICAgICAgICAvKiE8IFsweDA0MDhdIFBETUEgU29mdHdhcmUgUmVxdWVzdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFRSR1NUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwNDBjXSBQRE1BIENoYW5uZWwgUmVxdWVzdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQUklTRVQ7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDQxMF0gUERNQSBGaXhlZCBQcmlvcml0eSBTZXR0aW5nIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fTyAgdWludDMyX3QgUFJJQ0xSOyAgICAgICAgICAgICAgICAvKiE8IFsweDA0MTRdIFBETUEgRml4ZWQgUHJpb3JpdHkgQ2xlYXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVEVOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwNDE4XSBQRE1BIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDQxY10gUERNQSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUJUU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDA0MjBdIFBETUEgQ2hhbm5lbCBSZWFkL1dyaXRlIFRhcmdldCBBYm9ydCBGbGFnIFJlZ2lzdGVyICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFREU1RTOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwNDI0XSBQRE1BIENoYW5uZWwgVHJhbnNmZXIgRG9uZSBGbGFnIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBTElHTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDQyOF0gUERNQSBUcmFuc2ZlciBBbGlnbm1lbnQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgVEFDVFNUUzsgICAgICAgICAgICAgICAvKiE8IFsweDA0MmNdIFBETUEgVHJhbnNmZXIgQWN0aXZlIEZsYWcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRPVVRQU0M7ICAgICAgICAgICAgICAgLyohPCBbMHgwNDMwXSBQRE1BIFRpbWUtb3V0IFByZXNjYWxlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUT1VURU47ICAgICAgICAgICAgICAgIC8qITwgWzB4MDQzNF0gUERNQSBUaW1lLW91dCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVE9VVElFTjsgICAgICAgICAgICAgICAvKiE8IFsweDA0MzhdIFBETUEgVGltZS1vdXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNDQVRCQTsgICAgICAgICAgICAgICAgLyohPCBbMHgwNDNjXSBQRE1BIFNjYXR0ZXItR2F0aGVyIERlc2NyaXB0b3IgVGFibGUgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUT0MwXzE7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDQ0MF0gUERNQSBDaGFubmVsIDAgYW5kIENoYW5uZWwgMSBUaW1lLW91dCBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbN107CisgICAgX19JTyB1aW50MzJfdCBDSFJTVDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDQ2MF0gUERNQSBDaGFubmVsIFJlc2V0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTJbN107CisgICAgX19JTyB1aW50MzJfdCBSRVFTRUwwXzM7ICAgICAgICAgICAgIC8qITwgWzB4MDQ4MF0gUERNQSBDaGFubmVsIDAgdG8gQ2hhbm5lbCAzIFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlciAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUkVRU0VMNF83OyAgICAgICAgICAgICAvKiE8IFsweDA0ODRdIFBETUEgQ2hhbm5lbCA0IHRvIENoYW5uZWwgNyBSZXF1ZXN0IFNvdXJjZSBTZWxlY3QgUmVnaXN0ZXIgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU0WzMwXTsKKyAgICBTVFJJREVfVCAgICAgIFNUUklERVs2XTsgICAgICAgICAgICAgLyohPCBbMHgwNTAwIH4gMHgwNTJDXSBTdHJpZGUgZnVuY3Rpb24gY29udHJvbCByZWdpc3RlciBvZiBQRE1BIENoYW5uZWwgMCB+IDUgICovCisKK30gUERNQV9UOworCisKKworCisvKioKKyAgICBAYWRkdG9ncm91cCBQRE1BX0NPTlNUIFBETUEgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgUERNQSBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFBETUFfRFNDVF9DVExfT1BNT0RFX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9DVEw6IE9QTU9ERSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9PUE1PREVfTXNrICAgICAgICAoMHgzdWwgPDwgUERNQV9EU0NUX0NUTF9PUE1PREVfUG9zKSAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogT1BNT0RFIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9DVExfVFhUWVBFX1BvcyAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9DVEw6IFRYVFlQRSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9UWFRZUEVfTXNrICAgICAgICAoMHgxdWwgPDwgUERNQV9EU0NUX0NUTF9UWFRZUEVfUG9zKSAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogVFhUWVBFIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9DVExfQlVSU0laRV9Qb3MgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9DVEw6IEJVUlNJWkUgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9CVVJTSVpFX01zayAgICAgICAoMHg3dWwgPDwgUERNQV9EU0NUX0NUTF9CVVJTSVpFX1BvcykgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogQlVSU0laRSBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9DVExfVEJJTlRESVNfUG9zICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9DVEw6IFRCSU5URElTIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9UQklOVERJU19Nc2sgICAgICAoMHgxdWwgPDwgUERNQV9EU0NUX0NUTF9UQklOVERJU19Qb3MpICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogVEJJTlRESVMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9DVExfU0FJTkNfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9DVEw6IFNBSU5DIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9TQUlOQ19Nc2sgICAgICAgICAoMHgzdWwgPDwgUERNQV9EU0NUX0NUTF9TQUlOQ19Qb3MpICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogU0FJTkMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9DVExfREFJTkNfUG9zICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9DVEw6IERBSU5DIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9EQUlOQ19Nc2sgICAgICAgICAoMHgzdWwgPDwgUERNQV9EU0NUX0NUTF9EQUlOQ19Qb3MpICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogREFJTkMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9DVExfVFhXSURUSF9Qb3MgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9DVEw6IFRYV0lEVEggUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9UWFdJRFRIX01zayAgICAgICAoMHgzdWwgPDwgUERNQV9EU0NUX0NUTF9UWFdJRFRIX1BvcykgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogVFhXSURUSCBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9DVExfVFhBQ0tfUG9zICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9DVEw6IFRYQUNLIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9UWEFDS19Nc2sgICAgICAgICAoMHgxdWwgPDwgUERNQV9EU0NUX0NUTF9UWEFDS19Qb3MpICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogVFhBQ0sgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9DVExfU1RSSURFRU5fUG9zICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9DVEw6IFNUUklERUVOIFBvc2l0aW9uICAqLworI2RlZmluZSBQRE1BX0RTQ1RfQ1RMX1NUUklERUVOX01zayAgICAgKDB4MXVsIDw8IFBETUFfRFNDVF9DVExfU1RSSURFRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfQ1RMOiBTVFJJREVFTiBNYXNrICAgICAgKi8KKworI2RlZmluZSBQRE1BX0RTQ1RfQ1RMX1RYQ05UX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfQ1RMOiBUWENOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFBETUFfRFNDVF9DVExfVFhDTlRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfRFNDVF9DVExfVFhDTlRfUG9zKSAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9DVEw6IFRYQ05UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0RTQ1RfU0FfU0FfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfU0E6IFNBIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFBETUFfRFNDVF9TQV9TQV9Nc2sgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBQRE1BX0RTQ1RfU0FfU0FfUG9zKSAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9TQTogU0EgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0RTQ1RfREFfREFfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfREE6IERBIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFBETUFfRFNDVF9EQV9EQV9Nc2sgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBQRE1BX0RTQ1RfREFfREFfUG9zKSAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9EQTogREEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0RTQ1RfTkVYVF9ORVhUX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfTkVYVDogTkVYVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFBETUFfRFNDVF9ORVhUX05FWFRfTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfRFNDVF9ORVhUX05FWFRfUG9zKSAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9ORVhUOiBORVhUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0RTQ1RfTkVYVF9FWEVORVhUX1BvcyAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfRklSU1Q6IE5FWFQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFBETUFfRFNDVF9ORVhUX0VYRU5FWFRfTXNrICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfRFNDVF9ORVhUX0VYRU5FWFRfUG9zKSAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfRklSU1Q6IE5FWFQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9DVVJTQ0FUX0NVUkFERFJfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpDVVJTQ0FUOiBDVVJBRERSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBQRE1BX0NVUlNDQVRfQ1VSQUREUl9Nc2sgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUERNQV9DVVJTQ0FUX0NVUkFERFJfUG9zKSAgICAgICAgLyohPCBQRE1BX1Q6OkNVUlNDQVQ6IENVUkFERFIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9DSENUTF9DSEVObl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpDSENUTDogQ0hFTm4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9DSENUTF9DSEVObl9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9DSENUTF9DSEVObl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpDSENUTDogQ0hFTm4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1BBVVNFX1BBVVNFbl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlBBVVNFOiBQQVVTRW4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFBETUFfUEFVU0VfUEFVU0VuX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfUEFVU0VfUEFVU0VuX1BvcykgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpQQVVTRTogUEFVU0VuIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfU1dSRVFfU1dSRVFuX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlNXUkVROiBTV1JFUW4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBQRE1BX1NXUkVRX1NXUkVRbl9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9TV1JFUV9TV1JFUW5fUG9zKSAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpTV1JFUTogU1dSRVFuIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1RSR1NUU19SRVFTVFNuX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpUUkdTVFM6IFJFUVNUU24gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUERNQV9UUkdTVFNfUkVRU1RTbl9Nc2sgICAgICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfVFJHU1RTX1JFUVNUU25fUG9zKSAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VFJHU1RTOiBSRVFTVFNuIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9QUklTRVRfRlBSSVNFVG5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6UFJJU0VUOiBGUFJJU0VUbiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFBETUFfUFJJU0VUX0ZQUklTRVRuX01zayAgICAgICAgICgweGZmZmZ1bCA8PCBQRE1BX1BSSVNFVF9GUFJJU0VUbl9Qb3MpICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlBSSVNFVDogRlBSSVNFVG4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfUFJJQ0xSX0ZQUklDTFJuX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlBSSUNMUjogRlBSSUNMUm4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBQRE1BX1BSSUNMUl9GUFJJQ0xSbl9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9QUklDTFJfRlBSSUNMUm5fUG9zKSAgICAgICAgICAgIC8qITwgUERNQV9UOjpQUklDTFI6IEZQUklDTFJuIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0lOVEVOX0lOVEVObl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpJTlRFTjogSU5URU5uIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9JTlRFTl9JTlRFTm5fTXNrICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfSU5URU5fSU5URU5uX1BvcykgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6SU5URU46IElOVEVObiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9JTlRTVFNfQUJUSUZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6SU5UU1RTOiBBQlRJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFBETUFfSU5UU1RTX0FCVElGX01zayAgICAgICAgICAgICgweDF1bCA8PCBQRE1BX0lOVFNUU19BQlRJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OklOVFNUUzogQUJUSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfSU5UU1RTX1RESUZfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OklOVFNUUzogVERJRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBQRE1BX0lOVFNUU19URElGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9JTlRTVFNfVERJRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpJTlRTVFM6IFRESUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0lOVFNUU19BTElHTkZfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpJTlRTVFM6IEFMSUdORiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9JTlRTVFNfQUxJR05GX01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfSU5UU1RTX0FMSUdORl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6SU5UU1RTOiBBTElHTkYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9JTlRTVFNfUkVRVE9GMF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6SU5UU1RTOiBSRVFUT0YwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFBETUFfSU5UU1RTX1JFUVRPRjBfTXNrICAgICAgICAgICgweDF1bCA8PCBQRE1BX0lOVFNUU19SRVFUT0YwX1BvcykgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OklOVFNUUzogUkVRVE9GMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfSU5UU1RTX1JFUVRPRjFfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OklOVFNUUzogUkVRVE9GMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBQRE1BX0lOVFNUU19SRVFUT0YxX01zayAgICAgICAgICAoMHgxdWwgPDwgUERNQV9JTlRTVFNfUkVRVE9GMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpJTlRTVFM6IFJFUVRPRjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYwX01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfQUJUU1RTX0FCVElGMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYxX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX0FCVFNUU19BQlRJRjFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGMl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9BQlRTVFNfQUJUSUYyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYzX01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfQUJUU1RTX0FCVElGM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUY0X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGNF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX0FCVFNUU19BQlRJRjRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUY0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGNV9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUY1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9BQlRTVFNfQUJUSUY1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjZfUG9zICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGNiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUY2X01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfQUJUU1RTX0FCVElGNl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUY3X1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjcgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGN19Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX0FCVFNUU19BQlRJRjdfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUY3IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGOF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUY4IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjhfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9BQlRTVFNfQUJUSUY4X1BvcykgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGOCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjlfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGOSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUY5X01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfQUJUU1RTX0FCVElGOV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYxMF9Qb3MgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMTAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGMTBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9BQlRTVFNfQUJUSUYxMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjEwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGMTFfUG9zICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjExIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjExX01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfQUJUU1RTX0FCVElGMTFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYxMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjEyX1BvcyAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYxMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYxMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX0FCVFNUU19BQlRJRjEyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMTIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYxM19Qb3MgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMTMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGMTNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9BQlRTVFNfQUJUSUYxM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjEzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGMTRfUG9zICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjE0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjE0X01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfQUJUU1RTX0FCVElGMTRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYxNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjE1X1BvcyAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYxNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYxNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX0FCVFNUU19BQlRJRjE1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMTUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9URFNUU19URElGMF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9URFNUU19URElGMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX1REU1RTX1RESUYwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1REU1RTX1RESUYxX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX1REU1RTX1RESUYxX01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfVERTVFNfVERJRjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9URFNUU19URElGMl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9URFNUU19URElGM19Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9URFNUU19URElGM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX1REU1RTX1RESUYzX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1REU1RTX1RESUY0X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUY0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX1REU1RTX1RESUY0X01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfVERTVFNfVERJRjRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUY0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjVfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9URFNUU19URElGNV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9URFNUU19URElGNl9Qb3MgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGNiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9URFNUU19URElGNl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX1REU1RTX1RESUY2X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGNiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1REU1RTX1RESUY3X1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUY3IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX1REU1RTX1RESUY3X01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfVERTVFNfVERJRjdfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUY3IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjhfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjggUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjhfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9URFNUU19URElGOF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjggTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9URFNUU19URElGOV9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGOSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9URFNUU19URElGOV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX1REU1RTX1RESUY5X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGOSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1REU1RTX1RESUYxMF9Qb3MgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjEwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX1REU1RTX1RESUYxMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX1REU1RTX1RESUYxMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjEwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjExX1BvcyAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMTEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjExX01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfVERTVFNfVERJRjExX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMTEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9URFNUU19URElGMTJfUG9zICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYxMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9URFNUU19URElGMTJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9URFNUU19URElGMTJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYxMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1REU1RTX1RESUYxM19Qb3MgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjEzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX1REU1RTX1RESUYxM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX1REU1RTX1RESUYxM19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjEzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjE0X1BvcyAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMTQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjE0X01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfVERTVFNfVERJRjE0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMTQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9URFNUU19URElGMTVfUG9zICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYxNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9URFNUU19URElGMTVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9URFNUU19URElGMTVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYxNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FMSUdOX0FMSUdObl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBTElHTjogQUxJR05uIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0FMSUdOX0FMSUdObl9Nc2sgICAgICAgICAgICgweGZmZmZ1bCA8PCBQRE1BX0FMSUdOX0FMSUdObl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBTElHTjogQUxJR05uIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVEFDVFNUU19UWEFDVEZuX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlRBQ1RTVFM6IFRYQUNURm4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBQRE1BX1RBQ1RTVFNfVFhBQ1RGbl9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9UQUNUU1RTX1RYQUNURm5fUG9zKSAgICAgICAgICAgIC8qITwgUERNQV9UOjpUQUNUU1RTOiBUWEFDVEZuIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1RPVVRQU0NfVE9VVFBTQzBfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpUT1VUUFNDOiBUT1VUUFNDMCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgUERNQV9UT1VUUFNDX1RPVVRQU0MwX01zayAgICAgICAgKDB4N3VsIDw8IFBETUFfVE9VVFBTQ19UT1VUUFNDMF9Qb3MpICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VE9VVFBTQzogVE9VVFBTQzAgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9UT1VUUFNDX1RPVVRQU0MxX1BvcyAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VE9VVFBTQzogVE9VVFBTQzEgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFBETUFfVE9VVFBTQ19UT1VUUFNDMV9Nc2sgICAgICAgICgweDd1bCA8PCBQRE1BX1RPVVRQU0NfVE9VVFBTQzFfUG9zKSAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlRPVVRQU0M6IFRPVVRQU0MxIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVE9VVEVOX1RPVVRFTm5fUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlRPVVRFTjogVE9VVEVObiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBQRE1BX1RPVVRFTl9UT1VURU5uX01zayAgICAgICAgICAoMHgzdWwgPDwgUERNQV9UT1VURU5fVE9VVEVObl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpUT1VURU46IFRPVVRFTm4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1RPVVRJRU5fVE9VVElFTm5fUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpUT1VUSUVOOiBUT1VUSUVObiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgUERNQV9UT1VUSUVOX1RPVVRJRU5uX01zayAgICAgICAgKDB4M3VsIDw8IFBETUFfVE9VVElFTl9UT1VUSUVObl9Qb3MpICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VE9VVElFTjogVE9VVElFTm4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9TQ0FUQkFfU0NBVEJBX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6U0NBVEJBOiBTQ0FUQkEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfU0NBVEJBX1NDQVRCQV9Nc2sgICAgICAgICAgICgweGZmZmZ1bCA8PCBQRE1BX1NDQVRCQV9TQ0FUQkFfUG9zKSAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlNDQVRCQTogU0NBVEJBIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVE9DMF8xX1RPQzBfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlRPQzBfMTogVE9DMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBQRE1BX1RPQzBfMV9UT0MwX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9UT0MwXzFfVE9DMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpUT0MwXzE6IFRPQzAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1RPQzBfMV9UT0MxX1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpUT0MwXzE6IFRPQzEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9UT0MwXzFfVE9DMV9Nc2sgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfVE9DMF8xX1RPQzFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VE9DMF8xOiBUT0MxIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9DSFJTVF9DSG5SU1RfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6Q0hSU1Q6IENIblJTVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFBETUFfQ0hSU1RfQ0huUlNUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBQRE1BX0NIUlNUX0NIblJTVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkNIUlNUOiBDSG5SU1QgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfUkVRU0VMMF8zX1JFUVNSQzBfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlJFUVNFTDBfMzogUkVRU1JDMCBQb3NpdGlvbiAgICAqLworI2RlZmluZSBQRE1BX1JFUVNFTDBfM19SRVFTUkMwX01zayAgICAgICAoMHg3ZnVsIDw8IFBETUFfUkVRU0VMMF8zX1JFUVNSQzBfUG9zKSAgICAgICAgICAgIC8qITwgUERNQV9UOjpSRVFTRUwwXzM6IFJFUVNSQzAgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1JFUVNFTDBfM19SRVFTUkMxX1BvcyAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpSRVFTRUwwXzM6IFJFUVNSQzEgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgUERNQV9SRVFTRUwwXzNfUkVRU1JDMV9Nc2sgICAgICAgKDB4N2Z1bCA8PCBQRE1BX1JFUVNFTDBfM19SRVFTUkMxX1BvcykgICAgICAgICAgICAvKiE8IFBETUFfVDo6UkVRU0VMMF8zOiBSRVFTUkMxIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9SRVFTRUwwXzNfUkVRU1JDMl9Qb3MgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6UkVRU0VMMF8zOiBSRVFTUkMyIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFBETUFfUkVRU0VMMF8zX1JFUVNSQzJfTXNrICAgICAgICgweDdmdWwgPDwgUERNQV9SRVFTRUwwXzNfUkVRU1JDMl9Qb3MpICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlJFUVNFTDBfMzogUkVRU1JDMiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFBETUFfUkVRU0VMMF8zX1JFUVNSQzNfUG9zICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlJFUVNFTDBfMzogUkVRU1JDMyBQb3NpdGlvbiAgICAqLworI2RlZmluZSBQRE1BX1JFUVNFTDBfM19SRVFTUkMzX01zayAgICAgICAoMHg3ZnVsIDw8IFBETUFfUkVRU0VMMF8zX1JFUVNSQzNfUG9zKSAgICAgICAgICAgIC8qITwgUERNQV9UOjpSRVFTRUwwXzM6IFJFUVNSQzMgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1JFUVNFTDRfN19SRVFTUkM0X1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpSRVFTRUw0Xzc6IFJFUVNSQzQgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgUERNQV9SRVFTRUw0XzdfUkVRU1JDNF9Nc2sgICAgICAgKDB4N2Z1bCA8PCBQRE1BX1JFUVNFTDRfN19SRVFTUkM0X1BvcykgICAgICAgICAgICAvKiE8IFBETUFfVDo6UkVRU0VMNF83OiBSRVFTUkM0IE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9SRVFTRUw0XzdfUkVRU1JDNV9Qb3MgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6UkVRU0VMNF83OiBSRVFTUkM1IFBvc2l0aW9uICAgICovCisjZGVmaW5lIFBETUFfUkVRU0VMNF83X1JFUVNSQzVfTXNrICAgICAgICgweDdmdWwgPDwgUERNQV9SRVFTRUw0XzdfUkVRU1JDNV9Qb3MpICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlJFUVNFTDRfNzogUkVRU1JDNSBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFBETUFfUkVRU0VMNF83X1JFUVNSQzZfUG9zICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlJFUVNFTDRfNzogUkVRU1JDNiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBQRE1BX1JFUVNFTDRfN19SRVFTUkM2X01zayAgICAgICAoMHg3ZnVsIDw8IFBETUFfUkVRU0VMNF83X1JFUVNSQzZfUG9zKSAgICAgICAgICAgIC8qITwgUERNQV9UOjpSRVFTRUw0Xzc6IFJFUVNSQzYgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1JFUVNFTDRfN19SRVFTUkM3X1BvcyAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpSRVFTRUw0Xzc6IFJFUVNSQzcgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgUERNQV9SRVFTRUw0XzdfUkVRU1JDN19Nc2sgICAgICAgKDB4N2Z1bCA8PCBQRE1BX1JFUVNFTDRfN19SRVFTUkM3X1BvcykgICAgICAgICAgICAvKiE8IFBETUFfVDo6UkVRU0VMNF83OiBSRVFTUkM3IE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9TVENSbl9TVENfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6U1RDUm46IFNUQyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFBETUFfU1RDUm5fU1RDX01zayAgICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBQRE1BX1NUQ1JuX1NUQ19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlNUQ1JuOiBTVEMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQVNPQ1JuX1NBU09MX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFTT0NSbjogU0FTT0wgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBQRE1BX0FTT0NSbl9TQVNPTF9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9BU09DUm5fU0FTT0xfUG9zKSAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBU09DUm46IFNBU09MIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FTT0NSbl9EQVNPTF9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBU09DUm46IERBU09MIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9BU09DUm5fREFTT0xfTXNrICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfQVNPQ1JuX0RBU09MX1BvcykgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QVNPQ1JuOiBEQVNPTCBNYXNrICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogUERNQV9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUERNQSByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisjZW5kaWYgLyogX19QRE1BX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9xZWlfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvcWVpX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDhjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvcWVpX3JlZy5oCkBAIC0wLDAgKzEsMzA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgcWVpX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBRRUkgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fUUVJX1JFR19IX18KKyNkZWZpbmUgX19RRUlfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBRdWFkcmF0dXJlIEVuY29kZXIgSW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgUUVJIFF1YWRyYXR1cmUgRW5jb2RlciBJbnRlcmZhY2UoUUVJKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBRRUkgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBRRUlfVDo6Q05UCisgICAgICogT2Zmc2V0OiAweDAwICBRRUkgQ291bnRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfENOVCAgICAgICB8UXVhZHJhdHVyZSBFbmNvZGVyIEludGVyZmFjZSBDb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QSAzMi1iaXQgdXAvZG93biBjb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBhbiBlZmZlY3RpdmUgcGhhc2UgcHVsc2UgaXMgZGV0ZWN0ZWQsIHRoaXMgY291bnRlciBpcyBpbmNyZWFzZWQgYnkgb25lIGlmIHRoZSBiaXQgRElSRiAoUUVJX1NUQVRVU1s4XSkgaXMgb25lIG9yIGRlY3JlYXNlZCBieSBvbmUgaWYgdGhlIGJpdCBESVJGIGlzIHplcm8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIHBlcmZvcm1zIGFuIGludGVncmF0b3Igd2hpY2ggY291bnQgdmFsdWUgaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBlbmNvZGVyIHBvc2l0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHB1bHNlIGNvdW50ZXIgbWF5IGJlIGluaXRpYWxpemVkIHRvIGEgcHJlZGV0ZXJtaW5lZCB2YWx1ZSBieSBvbmUgb2YgdGhyZWUgZXZlbnRzIG9jY3VyczoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxLiBTb2Z0d2FyZSBpcyB3cml0dGVuIGlmIFFFSUVOIChRRUlfQ1RMWzI5XSkgPSAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDIuIENvbXBhcmUtbWF0Y2ggZXZlbnQgaWYgUUVJRU49MSBhbmQgUUVJIGlzIGluIGNvbXBhcmUtY291bnRpbmcgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwzLiBJbmRleCBzaWduYWwgY2hhbmdlIGlmIFFFSUVOPTEgYW5kIElEWFJMREVOIChRRUlfQ1RMWzI3XSk9MS4KKyAgICAgKiBAdmFyIFFFSV9UOjpDTlRIT0xECisgICAgICogT2Zmc2V0OiAweDA0ICBRRUkgQ291bnRlciBIb2xkIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8Q05USE9MRCAgIHxRdWFkcmF0dXJlIEVuY29kZXIgSW50ZXJmYWNlIENvdW50ZXIgSG9sZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gYml0IEhPTERDTlQgKFFFSV9DVExbMjRdKSBnb2VzIGZyb20gbG93IHRvIGhpZ2gsIHRoZSBDTlQoUUVJX0NOVFszMTowXSkgaXMgY29waWVkIGludG8gQ05USE9MRCAoUUVJX0NOVEhPTERbMzE6MF0pIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgUUVJX1Q6OkNOVExBVENICisgICAgICogT2Zmc2V0OiAweDA4ICBRRUkgQ291bnRlciBJbmRleCBMYXRjaCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfENOVExBVENIICB8UXVhZHJhdHVyZSBFbmNvZGVyIEludGVyZmFjZSBDb3VudGVyIEluZGV4IExhdGNoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgSURYRiAoUUVJX1NUQVRVU1swXSkgYml0IGlzIHNldCwgdGhlIENOVChRRUlfQ05UWzMxOjBdKSBpcyBjb3BpZWQgaW50byBDTlRMQVRDSCAoUUVJX0NOVExBVENIWzMxOjBdKSByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFFFSV9UOjpDTlRDTVAKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIFFFSSBDb3VudGVyIENvbXBhcmUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDTlRDTVAgICAgfFF1YWRyYXR1cmUgRW5jb2RlciBJbnRlcmZhY2UgQ291bnRlciBDb21wYXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIFFFSSBjb250cm9sbGVyIGlzIGluIHRoZSBjb21wYXJlLWNvdW50aW5nIG1vZGUgQ01QRU4gKFFFSV9DVExbMjhdKSA9MSwgd2hlbiB0aGUgdmFsdWUgb2YgQ05UKFFFSV9DTlRbMzE6MF0pIG1hdGNoZXMgQ05UQ01QKFFFSV9DTlRDTVBbMzE6MF0pLCBDTVBGIHdpbGwgYmUgc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyByZWdpc3RlciBpcyBzb2Z0d2FyZSB3cml0YWJsZS4KKyAgICAgKiBAdmFyIFFFSV9UOjpDTlRNQVgKKyAgICAgKiBPZmZzZXQ6IDB4MTQgIFFFSSBQcmUtc2V0IE1heGltdW0gQ291bnQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDTlRNQVggICAgfFF1YWRyYXR1cmUgRW5jb2RlciBJbnRlcmZhY2UgUHJlc2V0IE1heGltdW0gQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIHZhbHVlIGRldGVybWluZWQgYnkgdXNlciBzdG9yZXMgdGhlIG1heGltdW0gdmFsdWUgd2hpY2ggbWF5IGJlIHRoZSBudW1iZXIgb2YgdGhlIFFFSSBjb3VudGVyIGZvciB0aGUgUUVJIGNvbnRyb2xsZXIgY29tcGFyZS1jb3VudGluZyBtb2RlCisgICAgICogQHZhciBRRUlfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDE4ICBRRUkgQ29udHJvbGxlciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzI6MF0gICB8TkZDTEtTRUwgIHxOb2lzZSBGaWx0ZXIgQ2xvY2sgUHJlLWRpdmlkZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUbyBkZXRlcm1pbmUgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBvZiB0aGUgTm9pc2UgRmlsdGVyIGNsb2NrIC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBRRUlfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IFFFSV9DTEsvMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBRRUlfQ0xLLzQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gUUVJX0NMSy8xNi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBRRUlfQ0xLLzMyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IFFFSV9DTEsvNjQuCisgICAgICogfFszXSAgICAgfE5GRElTICAgICB8UUVJIENvbnRyb2xsZXIgSW5wdXQgTm9pc2UgRmlsdGVyIERpc2FibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBub2lzZSBmaWx0ZXIgb2YgUUVJIGNvbnRyb2xsZXIgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIG5vaXNlIGZpbHRlciBvZiBRRUkgY29udHJvbGxlciBEaXNhYmxlZC4KKyAgICAgKiB8WzRdICAgICB8Q0hBRU4gICAgIHxRRUEgSW5wdXQgdG8gUUVJIENvbnRyb2xsZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRRUEgaW5wdXQgdG8gUUVJIENvbnRyb2xsZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFFQSBpbnB1dCB0byBRRUkgQ29udHJvbGxlciBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxDSEJFTiAgICAgfFFFQiBJbnB1dCB0byBRRUkgQ29udHJvbGxlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFFQiBpbnB1dCB0byBRRUkgQ29udHJvbGxlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVCIGlucHV0IHRvIFFFSSBDb250cm9sbGVyIEVuYWJsZWQuCisgICAgICogfFs2XSAgICAgfElEWEVOICAgICB8SURYIElucHV0IHRvIFFFSSBDb250cm9sbGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSURYIGlucHV0IHRvIFFFSSBDb250cm9sbGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJRFggaW5wdXQgdG8gUUVJIENvbnRyb2xsZXIgRW5hYmxlZC4KKyAgICAgKiB8Wzk6OF0gICB8TU9ERSAgICAgIHxRRUkgQ291bnRpbmcgTW9kZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVyZSBhcmUgZm91ciBxdWFkcmF0dXJlIGVuY29kZXIgcHVsc2UgY291bnRlciBvcGVyYXRpb24gbW9kZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBYNCBGcmVlLWNvdW50aW5nIE1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBYMiBGcmVlLWNvdW50aW5nIE1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBYNCBDb21wYXJlLWNvdW50aW5nIE1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBYMiBDb21wYXJlLWNvdW50aW5nIE1vZGUuCisgICAgICogfFsxMl0gICAgfENIQUlOViAgICB8SW52ZXJzZSBRRUEgSW5wdXQgUG9sYXJpdHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm90IGludmVyc2UgUUVBIGlucHV0IHBvbGFyaXR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRRUEgaW5wdXQgcG9sYXJpdHkgaXMgaW52ZXJzZSB0byBRRUkgY29udHJvbGxlci4KKyAgICAgKiB8WzEzXSAgICB8Q0hCSU5WICAgIHxJbnZlcnNlIFFFQiBJbnB1dCBQb2xhcml0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb3QgaW52ZXJzZSBRRUIgaW5wdXQgcG9sYXJpdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFFQiBpbnB1dCBwb2xhcml0eSBpcyBpbnZlcnNlIHRvIFFFSSBjb250cm9sbGVyLgorICAgICAqIHxbMTRdICAgIHxJRFhJTlYgICAgfEludmVyc2UgSURYIElucHV0IFBvbGFyaXR5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vdCBpbnZlcnNlIElEWCBpbnB1dCBwb2xhcml0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSURYIGlucHV0IHBvbGFyaXR5IGlzIGludmVyc2UgdG8gUUVJIGNvbnRyb2xsZXIuCisgICAgICogfFsxNl0gICAgfE9WVU5JRU4gICB8T1ZVTkYgVHJpZ2dlciBRRUkgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT1ZVTkYgY2FuIHRyaWdnZXIgUUVJIGNvbnRyb2xsZXIgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPVlVORiBjYW4gdHJpZ2dlciBRRUkgY29udHJvbGxlciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE3XSAgICB8RElSSUVOICAgIHxESVJDSEdGIFRyaWdnZXIgUUVJIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERJUkNIR0YgY2FuIHRyaWdnZXIgUUVJIGNvbnRyb2xsZXIgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBESVJDSEdGIGNhbiB0cmlnZ2VyIFFFSSBjb250cm9sbGVyIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMThdICAgIHxDTVBJRU4gICAgfENNUEYgVHJpZ2dlciBRRUkgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ01QRiBjYW4gdHJpZ2dlciBRRUkgY29udHJvbGxlciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENNUEYgY2FuIHRyaWdnZXIgUUVJIGNvbnRyb2xsZXIgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxOV0gICAgfElEWElFTiAgICB8SURYRiBUcmlnZ2VyIFFFSSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgSURYRiBjYW4gdHJpZ2dlciBRRUkgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgSURYRiBjYW4gdHJpZ2dlciBRRUkgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyMF0gICAgfEhPTERUTVIwICB8SG9sZCBRRUlfQ05UIGJ5IFRpbWVyIDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVElGIChUSU1FUjBfSU5UU1RTWzBdKSBoYXMgbm8gZWZmZWN0IG9uIEhPTERDTlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgcmlzaW5nIGVkZ2Ugb2YgYml0IFRJRihUSU1FUjBfSU5UU1RTWzBdKSBpbiB0aW1lciAwIHNldHMgSE9MRENOVCB0byAxLgorICAgICAqIHxbMjFdICAgIHxIT0xEVE1SMSAgfEhvbGQgUUVJX0NOVCBieSBUaW1lciAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRJRihUSU1FUjFfSU5UU1RTWzBdKSBoYXMgbm8gZWZmZWN0IG9uIEhPTERDTlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgcmlzaW5nIGVkZ2Ugb2YgYml0IFRJRiAoVElNRVIxX0lOVFNUU1swXSkgaW4gdGltZXIgMSBzZXRzIEhPTERDTlQgdG8gMS4KKyAgICAgKiB8WzIyXSAgICB8SE9MRFRNUjIgIHxIb2xkIFFFSV9DTlQgYnkgVGltZXIgMgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUSUYoVElNRVIyX0lOVFNUU1swXSkgaGFzIG5vIGVmZmVjdCBvbiBIT0xEQ05ULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHJpc2luZyBlZGdlIG9mIGJpdCBUSUYoVElNRVIyX0lOVFNUU1swXSkgaW4gdGltZXIgMiBzZXRzIEhPTERDTlQgdG8gMS4KKyAgICAgKiB8WzIzXSAgICB8SE9MRFRNUjMgIHxIb2xkIFFFSV9DTlQgYnkgVGltZXIgMworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUSUYgKFRJTUVSM19JTlRTVFNbMF0pIGhhcyBubyBlZmZlY3Qgb24gSE9MRENOVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQSByaXNpbmcgZWRnZSBvZiBiaXQgVElGKFRJTUVSM19JTlRTVFNbMF0pIGluIHRpbWVyIDMgc2V0cyBIT0xEQ05UIHRvIDEuCisgICAgICogfFsyNF0gICAgfEhPTERDTlQgICB8SG9sZCBRRUlfQ05UIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoaXMgYml0IGlzIHNldCBmcm9tIGxvdyB0byBoaWdoLCB0aGUgQ05UKFFFSV9DTlRbMzE6MF0pIGlzIGNvcGllZCBpbnRvIFFFSV9DTlRIT0xECisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgbWF5IGJlIHNldCBieSB3cml0aW5nIDEgdG8gaXQgb3IgVGltZXIwflRpbWVyMyBpbnRlcnJ1cHQgZmxhZyBUSUYgKFRJTUVSeF9JTlRTVFNbMF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFFSV9DTlQgY29udGVudCBpcyBjYXB0dXJlZCBhbmQgc3RvcmVkIGluIFFFSV9DTlRIT0xELgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBhZnRlciBRRUlfQ05USE9MRCBob2xkcyBRRUlfQ05UIHZhbHVlLgorICAgICAqIHxbMjVdICAgIHxJRFhMQVRFTiAgfEluZGV4IExhdGNoIFFFSV9DTlQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCB0byBoaWdoLCB0aGUgUUVJX0NOVCBjb250ZW50IHdpbGwgYmUgbGF0Y2hlZCBpbnRvIFFFSV9DTlRMQVRDSCBhdCBldmVyeSByaXNpbmcgb24gc2lnbmFsIENIWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGluZGV4IHNpZ25hbCBsYXRjaCBRRUkgY291bnRlciBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGluZGV4IHNpZ25hbCBsYXRjaCBRRUkgY291bnRlciBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMjddICAgIHxJRFhSTERFTiAgfEluZGV4IFRyaWdnZXIgUUVJX0NOVCBSZWxvYWQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhpcyBiaXQgaXMgaGlnaCBhbmQgYSByaXNpbmcgZWRnZSBjb21lcyBvbiBzaWduYWwgQ0hYLCB0aGUgUUVJX0NOVCB3aWxsIGJlIHJlc2V0IHRvIHplcm8gaWYgdGhlIGNvdW50ZXIgaXMgaW4gdXAtY291bnRpbmcgdHlwZSAoRElSRiA9IDEpOyB3aGlsZSB0aGUgUUVJX0NOVCB3aWxsIGJlIHJlbG9hZGVkIHdpdGggQ05UTUFYIChRRUlfQ05UTUFYWzMxOjBdKSBjb250ZW50IGlmIHRoZSBjb3VudGVyIGlzIGluIGRvd24tY291bnRpbmcgdHlwZSAoRElSRiA9IDApLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWxvYWQgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFFSV9DTlQgcmUtaW5pdGlhbGl6ZWQgYnkgSW5kZXggc2lnbmFsIEVuYWJsZWQuCisgICAgICogfFsyOF0gICAgfENNUEVOICAgICB8dGhlIENvbXBhcmUgRnVuY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb21wYXJlIGZ1bmN0aW9uIGluIFFFSSBjb250cm9sbGVyIGlzIHRvIGNvbXBhcmUgdGhlIGR5bmFtaWMgY291bnRpbmcgUUVJX0NOVCB3aXRoIHRoZSBjb21wYXJlIHJlZ2lzdGVyIENOVENNUCggUUVJX0NOVENNUFszMTowXSksIGlmIENOVChRRUlfQ05UWzMxOjBdKSByZWFjaGVzIENOVENNUCggUUVJX0NOVENNUFszMTowXSksIHRoZSBmbGFnIENNUEYgd2lsbCBiZSBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzI5XSAgICB8UUVJRU4gICAgIHxRdWFkcmF0dXJlIEVuY29kZXIgSW50ZXJmYWNlIENvbnRyb2xsZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRRUkgY29udHJvbGxlciBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVJIGNvbnRyb2xsZXIgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiBAdmFyIFFFSV9UOjpTVEFUVVMKKyAgICAgKiBPZmZzZXQ6IDB4MkMgIFFFSSBDb250cm9sbGVyIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfElEWEYgICAgICB8SURYIERldGVjdGVkIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBRRUkgY29udHJvbGxlciBkZXRlY3RzIGEgcmlzaW5nIGVkZ2Ugb24gc2lnbmFsIENIWCBpdCB3aWxsIHNldCBmbGFnIElEWEYgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcmlzaW5nIGVkZ2UgZGV0ZWN0ZWQgb24gc2lnbmFsIENIWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQSByaXNpbmcgZWRnZSBvY2N1cnMgb24gc2lnbmFsIENIWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBvbmx5IGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMV0gICAgIHxDTVBGICAgICAgfENvbXBhcmUtbWF0Y2ggRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBRRUkgY29tcGFyZSBmdW5jdGlvbiBpcyBlbmFibGVkLCB0aGUgZmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hpbGUgUUVJIGNvdW50ZXIgdXAgb3IgZG93biBjb3VudHMgYW5kIHJlYWNoIHRvIHRoZSBDTlRDTVAoUUVJX0NOVENNUFszMTowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFFSSBjb3VudGVyIGRvZXMgbm90IG1hdGNoIHdpdGggQ05UQ01QKFFFSV9DTlRDTVBbMzE6MF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRRUkgY291bnRlciBjb3VudHMgdG8gdGhlIHNhbWUgYXMgQ05UQ01QKFFFSV9DTlRDTVBbMzE6MF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIG9ubHkgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsyXSAgICAgfE9WVU5GICAgICB8UUVJIENvdW50ZXIgT3ZlcmZsb3cgb3IgVW5kZXJmbG93IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGlsZSBRRUlfQ05UIG92ZXJmbG93cyBmcm9tIDB4RkZGRl9GRkZGIHRvIHplcm8gaW4gZnJlZS1jb3VudGluZyBtb2RlIG9yIGZyb20gdGhlIENOVE1BWCAoUUVJX0NOVE1BWFszMTowXSkgdG8gemVybyBpbiBjb21wYXJlLWNvdW50aW5nIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTaW1pbGFybHksIHRoZSBmbGFnIGlzIHNldCB3aWxlIFFFSSBjb3VudGVyIHVuZGVyZmxvdyBmcm9tIHplcm8gdG8gMHhGRkZGX0ZGRkYgb3IgQ05UTUFYIChRRUlfQ05UTUFYWzMxOjBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gb3ZlcmZsb3cgb3IgdW5kZXJmbG93IG9jY3VycyBpbiBRRUkgY291bnRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVJIGNvdW50ZXIgb2NjdXJzIGNvdW50aW5nIG92ZXJmbG93IG9yIHVuZGVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBvbmx5IGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbM10gICAgIHxESVJDSEdGICAgfERpcmVjdGlvbiBDaGFuZ2UgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoaWxlIFFFSSBjb3VudGVyIGNvdW50aW5nIGRpcmVjdGlvbiBpcyBjaGFuZ2VkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2hhbmdlIGluIFFFSSBjb3VudGVyIGNvdW50aW5nIGRpcmVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVJIGNvdW50ZXIgY291bnRpbmcgZGlyZWN0aW9uIGlzIGNoYW5nZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgb25seSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzhdICAgICB8RElSRiAgICAgIHxRRUkgQ291bnRlciBDb3VudGluZyBEaXJlY3Rpb24gSW5kaWNhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRRUkgQ291bnRlciBpcyBpbiBkb3duLWNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRRUkgQ291bnRlciBpcyBpbiB1cC1jb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBzZXQvcmVzZXQgYnkgaGFyZHdhcmUgYWNjb3JkaW5nIHRvIHRoZSBwaGFzZSBkZXRlY3Rpb24gYmV0d2VlbiBDSEEgYW5kIENIQi4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENOVDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBRRUkgQ291bnRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTlRIT0xEOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gUUVJIENvdW50ZXIgSG9sZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ05UTEFUQ0g7ICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIFFFSSBDb3VudGVyIEluZGV4IExhdGNoIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENOVENNUDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDBjXSBRRUkgQ291bnRlciBDb21wYXJlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsxXTsKKyAgICBfX0lPIHVpbnQzMl90IENOVE1BWDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE0XSBRRUkgUHJlLXNldCBNYXhpbXVtIENvdW50IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEw7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxOF0gUUVJIENvbnRyb2xsZXIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbNF07CisgICAgX19JTyB1aW50MzJfdCBTVEFUVVM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyY10gUUVJIENvbnRyb2xsZXIgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFFFSV9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBRRUlfQ09OU1QgUUVJIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFFFSSBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFFFSV9DTlRfQ05UX1BvcyAgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q05UOiBDTlQgUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ05UX0NOVF9Nc2sgICAgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFFFSV9DTlRfQ05UX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNOVDogQ05UIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ05USE9MRF9DTlRIT0xEX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNOVEhPTEQ6IENOVEhPTEQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUUVJX0NOVEhPTERfQ05USE9MRF9Nc2sgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBRRUlfQ05USE9MRF9DTlRIT0xEX1BvcykgICAgICAgICAvKiE8IFFFSV9UOjpDTlRIT0xEOiBDTlRIT0xEIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NOVExBVENIX0NOVExBVENIX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDTlRMQVRDSDogQ05UTEFUQ0ggUG9zaXRpb24gICAgICovCisjZGVmaW5lIFFFSV9DTlRMQVRDSF9DTlRMQVRDSF9Nc2sgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUUVJX0NOVExBVENIX0NOVExBVENIX1BvcykgICAgICAgLyohPCBRRUlfVDo6Q05UTEFUQ0g6IENOVExBVENIIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DTlRDTVBfQ05UQ01QX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q05UQ01QOiBDTlRDTVAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBRRUlfQ05UQ01QX0NOVENNUF9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFFFSV9DTlRDTVBfQ05UQ01QX1BvcykgICAgICAgICAgIC8qITwgUUVJX1Q6OkNOVENNUDogQ05UQ01QIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ05UTUFYX0NOVE1BWF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNOVE1BWDogQ05UTUFYIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NOVE1BWF9DTlRNQVhfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBRRUlfQ05UTUFYX0NOVE1BWF9Qb3MpICAgICAgICAgICAvKiE8IFFFSV9UOjpDTlRNQVg6IENOVE1BWCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9ORkNMS1NFTF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IE5GQ0xLU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfTkZDTEtTRUxfTXNrICAgICAgICAgICAgICgweDd1bCA8PCBRRUlfQ1RMX05GQ0xLU0VMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBORkNMS1NFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfTkZESVNfUG9zICAgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBORkRJUyBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX05GRElTX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9ORkRJU19Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogTkZESVMgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX0NIQUVOX1BvcyAgICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogQ0hBRU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9DSEFFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfQ0hBRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IENIQUVOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9DSEJFTl9Qb3MgICAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IENIQkVOIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfQ0hCRU5fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX0NIQkVOX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBDSEJFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfSURYRU5fUG9zICAgICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBJRFhFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX0lEWEVOX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9JRFhFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSURYRU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX01PREVfUG9zICAgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogTU9ERSBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9NT0RFX01zayAgICAgICAgICAgICAgICAgKDB4M3VsIDw8IFFFSV9DVExfTU9ERV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IE1PREUgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9DSEFJTlZfUG9zICAgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IENIQUlOViBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfQ0hBSU5WX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX0NIQUlOVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBDSEFJTlYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfQ0hCSU5WX1BvcyAgICAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBDSEJJTlYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX0NIQklOVl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9DSEJJTlZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogQ0hCSU5WIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX0lEWElOVl9Qb3MgICAgICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSURYSU5WIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9JRFhJTlZfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfSURYSU5WX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IElEWElOViBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9PVlVOSUVOX1BvcyAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IE9WVU5JRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfT1ZVTklFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX09WVU5JRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBPVlVOSUVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfRElSSUVOX1BvcyAgICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBESVJJRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX0RJUklFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9ESVJJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogRElSSUVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX0NNUElFTl9Qb3MgICAgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogQ01QSUVOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9DTVBJRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfQ01QSUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IENNUElFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9JRFhJRU5fUG9zICAgICAgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IElEWElFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfSURYSUVOX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX0lEWElFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBJRFhJRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfSE9MRFRNUjBfUG9zICAgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBIT0xEVE1SMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX0hPTERUTVIwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9IT0xEVE1SMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSE9MRFRNUjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX0hPTERUTVIxX1BvcyAgICAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSE9MRFRNUjEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9IT0xEVE1SMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfSE9MRFRNUjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IEhPTERUTVIxIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9IT0xEVE1SMl9Qb3MgICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IEhPTERUTVIyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfSE9MRFRNUjJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX0hPTERUTVIyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBIT0xEVE1SMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfSE9MRFRNUjNfUG9zICAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBIT0xEVE1SMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX0hPTERUTVIzX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9IT0xEVE1SM19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSE9MRFRNUjMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX0hPTERDTlRfUG9zICAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSE9MRENOVCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9IT0xEQ05UX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfSE9MRENOVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IEhPTERDTlQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9JRFhMQVRFTl9Qb3MgICAgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IElEWExBVEVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfSURYTEFURU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX0lEWExBVEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBJRFhMQVRFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfSURYUkxERU5fUG9zICAgICAgICAgICAgICgyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBJRFhSTERFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX0lEWFJMREVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9JRFhSTERFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSURYUkxERU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX0NNUEVOX1BvcyAgICAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogQ01QRU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9DTVBFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfQ01QRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IENNUEVOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9RRUlFTl9Qb3MgICAgICAgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IFFFSUVOIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfUUVJRU5fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX1FFSUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBRRUlFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9TVEFUVVNfSURYRl9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6U1RBVFVTOiBJRFhGIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBRRUlfU1RBVFVTX0lEWEZfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX1NUQVRVU19JRFhGX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OlNUQVRVUzogSURYRiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfU1RBVFVTX0NNUEZfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OlNUQVRVUzogQ01QRiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX1NUQVRVU19DTVBGX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9TVEFUVVNfQ01QRl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpTVEFUVVM6IENNUEYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX1NUQVRVU19PVlVORl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpTVEFUVVM6IE9WVU5GIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFFFSV9TVEFUVVNfT1ZVTkZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfU1RBVFVTX09WVU5GX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6U1RBVFVTOiBPVlVORiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9TVEFUVVNfRElSQ0hHRl9Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6U1RBVFVTOiBESVJDSEdGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRRUlfU1RBVFVTX0RJUkNIR0ZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUUVJX1NUQVRVU19ESVJDSEdGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OlNUQVRVUzogRElSQ0hHRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfU1RBVFVTX0RJUkZfUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OlNUQVRVUzogRElSRiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX1NUQVRVU19ESVJGX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9TVEFUVVNfRElSRl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpTVEFUVVM6IERJUkYgTWFzayAgICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogUUVJX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBRRUkgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKworI2VuZGlmIC8qIF9fUUVJX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9xc3BpX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3FzcGlfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3ZWRiNQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9xc3BpX3JlZy5oCkBAIC0wLDAgKzEsNTg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgcXNwaV9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgUVNQSSByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19RU1BJX1JFR19IX18KKyNkZWZpbmUgX19RU1BJX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUXVhZCBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFFTUEkgUXVhZCBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgQ29udHJvbGxlcihRU1BJKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBRU1BJIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgUVNQSV9UOjpDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIFFTUEkgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNQSUVOICAgICB8UVNQSSBUcmFuc2ZlciBDb250cm9sIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBNYXN0ZXIgbW9kZSwgdGhlIHRyYW5zZmVyIHdpbGwgc3RhcnQgd2hlbiB0aGVyZSBpcyBkYXRhIGluIHRoZSBGSUZPIGJ1ZmZlciBhZnRlciB0aGlzIGJpdCBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIFNsYXZlIG1vZGUsIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIHJlY2VpdmUgZGF0YSB3aGVuIHRoaXMgYml0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc2ZlciBjb250cm9sIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc2ZlciBjb250cm9sIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQmVmb3JlIGNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9ucyBvZiBRU1BJeF9DVEwsIFFTUEl4X0NMS0RJViwgUVNQSXhfU1NDVEwgYW5kIFFTUEl4X0ZJRk9DVEwgcmVnaXN0ZXJzLCB1c2VyIHNoYWxsIGNsZWFyIHRoZSBTUElFTiAoUVNQSXhfQ1RMWzBdKSBhbmQgY29uZmlybSB0aGUgU1BJRU5TVFMgKFFTUEl4X1NUQVRVU1sxNV0pIGlzIDAuCisgICAgICogfFsxXSAgICAgfFJYTkVHICAgICB8UmVjZWl2ZSBvbiBOZWdhdGl2ZSBFZGdlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmVkIGRhdGEgaW5wdXQgc2lnbmFsIGlzIGxhdGNoZWQgb24gdGhlIHJpc2luZyBlZGdlIG9mIFFTUEkgYnVzIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlZCBkYXRhIGlucHV0IHNpZ25hbCBpcyBsYXRjaGVkIG9uIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgUVNQSSBidXMgY2xvY2suCisgICAgICogfFsyXSAgICAgfFRYTkVHICAgICB8VHJhbnNtaXQgb24gTmVnYXRpdmUgRWRnZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdHRlZCBkYXRhIG91dHB1dCBzaWduYWwgaXMgY2hhbmdlZCBvbiB0aGUgcmlzaW5nIGVkZ2Ugb2YgUVNQSSBidXMgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0dGVkIGRhdGEgb3V0cHV0IHNpZ25hbCBpcyBjaGFuZ2VkIG9uIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgUVNQSSBidXMgY2xvY2suCisgICAgICogfFszXSAgICAgfENMS1BPTCAgICB8Q2xvY2sgUG9sYXJpdHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUVNQSSBidXMgY2xvY2sgaXMgaWRsZSBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFTUEkgYnVzIGNsb2NrIGlzIGlkbGUgaGlnaC4KKyAgICAgKiB8Wzc6NF0gICB8U1VTUElUViAgIHxTdXNwZW5kIEludGVydmFsIChNYXN0ZXIgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZm91ciBiaXRzIHByb3ZpZGUgY29uZmlndXJhYmxlIHN1c3BlbmQgaW50ZXJ2YWwgYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSB0cmFuc21pdC9yZWNlaXZlIHRyYW5zYWN0aW9uIGluIGEgdHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGVmaW5pdGlvbiBvZiB0aGUgc3VzcGVuZCBpbnRlcnZhbCBpcyB0aGUgaW50ZXJ2YWwgYmV0d2VlbiB0aGUgbGFzdCBjbG9jayBlZGdlIG9mIHRoZSBwcmVjZWRpbmcgdHJhbnNhY3Rpb24gd29yZCBhbmQgdGhlIGZpcnN0IGNsb2NrIGVkZ2Ugb2YgdGhlIGZvbGxvd2luZyB0cmFuc2FjdGlvbiB3b3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlZmF1bHQgdmFsdWUgaXMgMHgzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHBlcmlvZCBvZiB0aGUgc3VzcGVuZCBpbnRlcnZhbCBpcyBvYnRhaW5lZCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBlcXVhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoU1VTUElUVlszOjBdICsgMC41KSAqIHBlcmlvZCBvZiBRU1BJQ0xLIGNsb2NrIGN5Y2xlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RXhhbXBsZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTVVNQSVRWID0gMHgwIC4uLi4gMC41IFFTUElDTEsgY2xvY2sgY3ljbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U1VTUElUViA9IDB4MSAuLi4uIDEuNSBRU1BJQ0xLIGNsb2NrIGN5Y2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfC4uLi4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U1VTUElUViA9IDB4RSAuLi4uIDE0LjUgUVNQSUNMSyBjbG9jayBjeWNsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTVVNQSVRWID0gMHhGIC4uLi4gMTUuNSBRU1BJQ0xLIGNsb2NrIGN5Y2xlLgorICAgICAqIHxbMTI6OF0gIHxEV0lEVEggICAgfERhdGEgV2lkdGgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIHNwZWNpZmllcyBob3cgbWFueSBiaXRzIGNhbiBiZSB0cmFuc21pdHRlZCAvIHJlY2VpdmVkIGluIG9uZSB0cmFuc2FjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBtaW5pbXVtIGJpdCBsZW5ndGggaXMgOCBiaXRzIGFuZCBjYW4gdXAgdG8gMzIgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEV0lEVEggPSAweDA4IC4uLi4gOCBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERXSURUSCA9IDB4MDkgLi4uLiA5IGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Li4uLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEV0lEVEggPSAweDFGIC4uLi4gMzEgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEV0lEVEggPSAweDAwIC4uLi4gMzIgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBGb3IgUVNQSTB+UVNQSTMsIHRoaXMgYml0IGZpZWxkIHdpbGwgZGVjaWRlIHRoZSBkZXB0aCBvZiBUWC9SWCBGSUZPIGNvbmZpZ3VyYXRpb24gaW4gUVNQSSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlcmVmb3JlLCBjaGFuZ2luZyB0aGlzIGJpdCBmaWVsZCB3aWxsIGNsZWFyIFRYL1JYIEZJRk8gYnkgaGFyZHdhcmUgYXV0b21hdGljYWxseSBpbiBRU1BJMH5RU1BJMy4KKyAgICAgKiB8WzEzXSAgICB8TFNCICAgICAgIHxTZW5kIExTQiBGaXJzdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgTVNCLCB3aGljaCBiaXQgb2YgdHJhbnNtaXQvcmVjZWl2ZSByZWdpc3RlciBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mIERXSURUSCwgaXMgdHJhbnNtaXR0ZWQvcmVjZWl2ZWQgZmlyc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBMU0IsIGJpdCAwIG9mIHRoZSBRU1BJIFRYIHJlZ2lzdGVyLCBpcyBzZW50IGZpcnN0IHRvIHRoZSBRU1BJIGRhdGEgb3V0cHV0IHBpbiwgYW5kIHRoZSBmaXJzdCBiaXQgcmVjZWl2ZWQgZnJvbSB0aGUgUVNQSSBkYXRhIGlucHV0IHBpbiB3aWxsIGJlIHB1dCBpbiB0aGUgTFNCIHBvc2l0aW9uIG9mIHRoZSBSWCByZWdpc3RlciAoYml0IDAgb2YgUVNQSV9SWCkuCisgICAgICogfFsxNF0gICAgfEhBTEZEUFggICB8UVNQSSBIYWxmLWR1cGxleCBUcmFuc2ZlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBzZWxlY3QgZnVsbC1kdXBsZXggb3IgaGFsZi1kdXBsZXggZm9yIFFTUEkgdHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYml0IGZpZWxkIERBVERJUiAoUVNQSXhfQ1RMWzIwXSkgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBkYXRhIGRpcmVjdGlvbiBpbiBoYWxmLWR1cGxleCB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUVNQSSBvcGVyYXRlcyBpbiBmdWxsLWR1cGxleCB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUVNQSSBvcGVyYXRlcyBpbiBoYWxmLWR1cGxleCB0cmFuc2Zlci4KKyAgICAgKiB8WzE1XSAgICB8UlhPTkxZICAgIHxSZWNlaXZlLW9ubHkgTW9kZSBFbmFibGUgQml0IChNYXN0ZXIgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBpcyBvbmx5IGF2YWlsYWJsZSBpbiBNYXN0ZXIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHJlY2VpdmUtb25seSBtb2RlLCBRU1BJIE1hc3RlciB3aWxsIGdlbmVyYXRlIFFTUEkgYnVzIGNsb2NrIGNvbnRpbnVvdXNseSBmb3IgcmVjZWl2aW5nIGRhdGEgYml0IGZyb20gUVNQSSBzbGF2ZSBkZXZpY2UgYW5kIGFzc2VydCB0aGUgQlVTWSBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUtb25seSBtb2RlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlLW9ubHkgbW9kZSBFbmFibGVkLgorICAgICAqIHxbMTZdICAgIHxUV09CSVQgICAgfDItYml0IFRyYW5zZmVyIE1vZGUgRW5hYmxlIEJpdCAoT25seSBTdXBwb3J0ZWQgaW4gUVNQSTApCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDItQml0IFRyYW5zZmVyIG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDItQml0IFRyYW5zZmVyIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIDItQml0IFRyYW5zZmVyIG1vZGUgaXMgZW5hYmxlZCwgdGhlIGZpcnN0IHNlcmlhbCB0cmFuc21pdHRlZCBiaXQgZGF0YSBpcyBmcm9tIHRoZSBmaXJzdCBGSUZPIGJ1ZmZlciBkYXRhLCBhbmQgdGhlIDJuZCBzZXJpYWwgdHJhbnNtaXR0ZWQgYml0IGRhdGEgaXMgZnJvbSB0aGUgc2Vjb25kIEZJRk8gYnVmZmVyIGRhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBcyB0aGUgc2FtZSBhcyB0cmFuc21pdHRlZCBmdW5jdGlvbiwgdGhlIGZpcnN0IHJlY2VpdmVkIGJpdCBkYXRhIGlzIHN0b3JlZCBpbnRvIHRoZSBmaXJzdCBGSUZPIGJ1ZmZlciBhbmQgdGhlIDJuZCByZWNlaXZlZCBiaXQgZGF0YSBpcyBzdG9yZWQgaW50byB0aGUgc2Vjb25kIEZJRk8gYnVmZmVyIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICogfFsxN10gICAgfFVOSVRJRU4gICB8VW5pdCBUcmFuc2ZlciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRU1BJIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRU1BJIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxOF0gICAgfFNMQVZFICAgICB8U2xhdmUgTW9kZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE1hc3RlciBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBtb2RlLgorICAgICAqIHxbMTldICAgIHxSRU9SREVSICAgfEJ5dGUgUmVvcmRlciBGdW5jdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJ5dGUgUmVvcmRlciBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnl0ZSBSZW9yZGVyIGZ1bmN0aW9uIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBIGJ5dGUgc3VzcGVuZCBpbnRlcnZhbCB3aWxsIGJlIGluc2VydGVkIGFtb25nIGVhY2ggYnl0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBwZXJpb2Qgb2YgdGhlIGJ5dGUgc3VzcGVuZCBpbnRlcnZhbCBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mIFNVU1BJVFYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQnl0ZSBSZW9yZGVyIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGlmIERXSURUSCBpcyBkZWZpbmVkIGFzIDE2LCAyNCwgYW5kIDMyIGJpdHMuCisgICAgICogfFsyMF0gICAgfERBVERJUiAgICB8RGF0YSBQb3J0IERpcmVjdGlvbiBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBzZWxlY3QgdGhlIGRhdGEgaW5wdXQvb3V0cHV0IGRpcmVjdGlvbiBpbiBoYWxmLWR1cGxleCB0cmFuc2ZlciBhbmQgRHVhbC9RdWFkIHRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFTUEkgZGF0YSBpcyBpbnB1dCBkaXJlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFTUEkgZGF0YSBpcyBvdXRwdXQgZGlyZWN0aW9uLgorICAgICAqIHxbMjFdICAgIHxEVUFMSU9FTiAgfER1YWwgSS9PIE1vZGUgRW5hYmxlIEJpdCAoT25seSBTdXBwb3J0ZWQgaW4gUVNQSTApCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IER1YWwgSS9PIG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IER1YWwgSS9PIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8WzIyXSAgICB8UVVBRElPRU4gIHxRdWFkIEkvTyBNb2RlIEVuYWJsZSBCaXQgKE9ubHkgU3VwcG9ydGVkIGluIFFTUEkwKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRdWFkIEkvTyBtb2RlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRdWFkIEkvTyBtb2RlIEVuYWJsZWQuCisgICAgICogQHZhciBRU1BJX1Q6OkNMS0RJVgorICAgICAqIE9mZnNldDogMHgwNCAgUVNQSSBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzg6MF0gICB8RElWSURFUiAgIHxDbG9jayBEaXZpZGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHZhbHVlIGluIHRoaXMgZmllbGQgaXMgdGhlIGZyZXF1ZW5jeSBkaXZpZGVyIGZvciBnZW5lcmF0aW5nIHRoZSBwZXJpcGhlcmFsIGNsb2NrLCBmc3BpX2VjbGssIGFuZCB0aGUgUVNQSSBidXMgY2xvY2sgb2YgUVNQSSBNYXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZnJlcXVlbmN5IGlzIG9idGFpbmVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIGVxdWF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHdoZXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8aXMgdGhlIHBlcmlwaGVyYWwgY2xvY2sgc291cmNlLCB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyLCBDTEtfQ0xLU0VMMi4KKyAgICAgKiBAdmFyIFFTUElfVDo6U1NDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDggIFFTUEkgU2xhdmUgU2VsZWN0IENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTUyAgICAgICAgfFNsYXZlIFNlbGVjdGlvbiBDb250cm9sIChNYXN0ZXIgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBBVVRPU1MgYml0IGlzIGNsZWFyZWQgdG8gMCwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gc2V0IHRoZSBRU1BJeF9TUyBsaW5lIHRvIGluYWN0aXZlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBzZXQgdGhlIFFTUEl4X1NTIGxpbmUgdG8gYWN0aXZlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBBVVRPU1MgYml0IGlzIHNldCB0byAxLAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBLZWVwIHRoZSBRU1BJeF9TUyBsaW5lIGF0IGluYWN0aXZlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRU1BJeF9TUyBsaW5lIHdpbGwgYmUgYXV0b21hdGljYWxseSBkcml2ZW4gdG8gYWN0aXZlIHN0YXRlIGZvciB0aGUgZHVyYXRpb24gb2YgZGF0YSB0cmFuc2ZlciwgYW5kIHdpbGwgYmUgZHJpdmVuIHRvIGluYWN0aXZlIHN0YXRlIGZvciB0aGUgcmVzdCBvZiB0aGUgdGltZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBhY3RpdmUgc3RhdGUgb2YgUVNQSXhfU1MgaXMgc3BlY2lmaWVkIGluIFNTQUNUUE9MIChRU1BJeF9TU0NUTFsyXSkuCisgICAgICogfFsyXSAgICAgfFNTQUNUUE9MICB8U2xhdmUgU2VsZWN0aW9uIEFjdGl2ZSBQb2xhcml0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgdGhlIGFjdGl2ZSBwb2xhcml0eSBvZiBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIChRU1BJeF9TUykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIFFTUEl4X1NTIGlzIGFjdGl2ZSBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIFFTUEl4X1NTIGlzIGFjdGl2ZSBoaWdoLgorICAgICAqIHxbM10gICAgIHxBVVRPU1MgICAgfEF1dG9tYXRpYyBTbGF2ZSBTZWxlY3Rpb24gRnVuY3Rpb24gRW5hYmxlIEJpdCAoTWFzdGVyIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24gRGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIHdpbGwgYmUgYXNzZXJ0ZWQvZGUtYXNzZXJ0ZWQgYWNjb3JkaW5nIHRvIFNTIChRU1BJeF9TU0NUTFswXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8U0xWM1dJUkUgIHxTbGF2ZSAzLXdpcmUgTW9kZSBFbmFibGUgQml0IChPbmx5IFN1cHBvcnRlZCBpbiBRU1BJMCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTbGF2ZSAzLXdpcmUgbW9kZSBpcyBvbmx5IGF2YWlsYWJsZSBpbiBRU1BJMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIFNsYXZlIDMtd2lyZSBtb2RlLCB0aGUgUVNQSSBjb250cm9sbGVyIGNhbiB3b3JrIHdpdGggMy13aXJlIGludGVyZmFjZSBpbmNsdWRpbmcgUVNQSTBfQ0xLLCBRU1BJMF9NSVNPIGFuZCBRU1BJMF9NT1NJIHBpbnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDQtd2lyZSBiaS1kaXJlY3Rpb24gaW50ZXJmYWNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSAzLXdpcmUgYmktZGlyZWN0aW9uIGludGVyZmFjZS4KKyAgICAgKiB8WzVdICAgICB8U0xWVE9JRU4gIHxTbGF2ZSBNb2RlIFRpbWUtb3V0IEludGVycnVwdCBFbmFibGUgQml0IChPbmx5IFN1cHBvcnRlZCBpbiBRU1BJMCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgbW9kZSB0aW1lLW91dCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIG1vZGUgdGltZS1vdXQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs2XSAgICAgfFNMVlRPUlNUICB8U2xhdmUgTW9kZSBUaW1lLW91dCBSZXNldCBDb250cm9sIChPbmx5IFN1cHBvcnRlZCBpbiBRU1BJMCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV2hlbiBTbGF2ZSBtb2RlIHRpbWUtb3V0IGV2ZW50IG9jY3VycywgdGhlIFRYIGFuZCBSWCBjb250cm9sIGNpcmN1aXQgd2lsbCBub3QgYmUgcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gU2xhdmUgbW9kZSB0aW1lLW91dCBldmVudCBvY2N1cnMsIHRoZSBUWCBhbmQgUlggY29udHJvbCBjaXJjdWl0IHdpbGwgYmUgcmVzZXQgYnkgaGFyZHdhcmUuCisgICAgICogfFs4XSAgICAgfFNMVkJFSUVOICB8U2xhdmUgTW9kZSBCaXQgQ291bnQgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgbW9kZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBtb2RlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzldICAgICB8U0xWVVJJRU4gIHxTbGF2ZSBNb2RlIFRYIFVuZGVyIFJ1biBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTbGF2ZSBtb2RlIFRYIHVuZGVyIHJ1biBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIG1vZGUgVFggdW5kZXIgcnVuIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTJdICAgIHxTU0FDVElFTiAgfFNsYXZlIFNlbGVjdCBBY3RpdmUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgc2VsZWN0IGFjdGl2ZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIHNlbGVjdCBhY3RpdmUgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxM10gICAgfFNTSU5BSUVOICB8U2xhdmUgU2VsZWN0IEluYWN0aXZlIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIHNlbGVjdCBpbmFjdGl2ZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIHNlbGVjdCBpbmFjdGl2ZSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzMxOjE2XSB8U0xWVE9DTlQgIHxTbGF2ZSBNb2RlIFRpbWUtb3V0IFBlcmlvZCAoT25seSBTdXBwb3J0ZWQgaW4gUVNQSTApCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gU2xhdmUgbW9kZSwgdGhlc2UgYml0cyBpbmRpY2F0ZSB0aGUgdGltZS1vdXQgcGVyaW9kIHdoZW4gdGhlcmUgaXMgYnVzIGNsb2NrIGlucHV0IGR1cmluZyBzbGF2ZSBzZWxlY3QgYWN0aXZlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNsb2NrIHNvdXJjZSBvZiB0aGUgdGltZS1vdXQgY291bnRlciBpcyBTbGF2ZSBwZXJpcGhlcmFsIGNsb2NrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIHZhbHVlIGlzIDAsIGl0IGluZGljYXRlcyB0aGUgc2xhdmUgbW9kZSB0aW1lLW91dCBmdW5jdGlvbiBpcyBkaXNhYmxlZC4KKyAgICAgKiBAdmFyIFFTUElfVDo6UERNQUNUTAorICAgICAqIE9mZnNldDogMHgwQyAgUVNQSSBQRE1BIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxUWFBETUFFTiAgfFRyYW5zbWl0IFBETUEgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gUVNQSSBNYXN0ZXIgbW9kZSB3aXRoIGZ1bGwgZHVwbGV4IHRyYW5zZmVyLCBpZiBib3RoIFRYIGFuZCBSWCBQRE1BIGZ1bmN0aW9ucyBhcmUgZW5hYmxlZCwgUlggUERNQSBmdW5jdGlvbiBjYW5ub3QgYmUgZW5hYmxlZCBwcmlvciB0byBUWCBQRE1BIGZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gZW5hYmxlIFRYIFBETUEgZnVuY3Rpb24gZmlyc3RseSBvciBlbmFibGUgYm90aCBmdW5jdGlvbnMgc2ltdWx0YW5lb3VzbHkuCisgICAgICogfFsxXSAgICAgfFJYUERNQUVOICB8UmVjZWl2ZSBQRE1BIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIFBETUEgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8UERNQVJTVCAgIHxQRE1BIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgdGhlIFBETUEgY29udHJvbCBsb2dpYyBvZiB0aGUgUVNQSSBjb250cm9sbGVyLiBUaGlzIGJpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB0byAwLgorICAgICAqIEB2YXIgUVNQSV9UOjpGSUZPQ1RMCisgICAgICogT2Zmc2V0OiAweDEwICBRU1BJIEZJRk8gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFJYUlNUICAgICB8UmVjZWl2ZSBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IHJlY2VpdmUgRklGTyBwb2ludGVyIGFuZCByZWNlaXZlIGNpcmN1aXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUlhGVUxMIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBhbmQgdGhlIFJYRU1QVFkgYml0IHdpbGwgYmUgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBieSBoYXJkd2FyZSBhYm91dCAzIHN5c3RlbSBjbG9jayBjeWNsZXMgKyAyIHBlcmlwaGVyYWwgY2xvY2sgY3ljbGVzIGFmdGVyIGl0IGlzIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gcmVhZCBUWFJYUlNUIChRU1BJeF9TVEFUVVNbMjNdKSB0byBjaGVjayBpZiByZXNldCBpcyBhY2NvbXBsaXNoZWQgb3Igbm90LgorICAgICAqIHxbMV0gICAgIHxUWFJTVCAgICAgfFRyYW5zbWl0IFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgdHJhbnNtaXQgRklGTyBwb2ludGVyIGFuZCB0cmFuc21pdCBjaXJjdWl0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFRYRlVMTCBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYW5kIHRoZSBUWEVNUFRZIGJpdCB3aWxsIGJlIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYnkgaGFyZHdhcmUgYWJvdXQgMyBzeXN0ZW0gY2xvY2sgY3ljbGVzICsgMiBwZXJpcGhlcmFsIGNsb2NrIGN5Y2xlcyBhZnRlciBpdCBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHJlYWQgVFhSWFJTVCAoUVNQSXhfU1RBVFVTWzIzXSkgdG8gY2hlY2sgaWYgcmVzZXQgaXMgYWNjb21wbGlzaGVkIG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBUWCB1bmRlcmZsb3cgZXZlbnQgb2NjdXJzIGluIFFTUEkgU2xhdmUgbW9kZSwgdGhpcyBiaXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBRU1BJIHJldHVybiB0byBpZGxlIHN0YXRlLgorICAgICAqIHxbMl0gICAgIHxSWFRISUVOICAgfFJlY2VpdmUgRklGTyBUaHJlc2hvbGQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlggRklGTyB0aHJlc2hvbGQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSWCBGSUZPIHRocmVzaG9sZCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8VFhUSElFTiAgIHxUcmFuc21pdCBGSUZPIFRocmVzaG9sZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUWCBGSUZPIHRocmVzaG9sZCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRYIEZJRk8gdGhyZXNob2xkIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxSWFRPSUVOICAgfFNsYXZlIFJlY2VpdmUgVGltZS1vdXQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSB0aW1lLW91dCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgdGltZS1vdXQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfFJYT1ZJRU4gICB8UmVjZWl2ZSBGSUZPIE92ZXJydW4gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBGSUZPIG92ZXJydW4gaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIEZJRk8gb3ZlcnJ1biBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8VFhVRlBPTCAgIHxUWCBVbmRlcmZsb3cgRGF0YSBQb2xhcml0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgUVNQSSBkYXRhIG91dCBpcyBrZWVwIDAgaWYgdGhlcmUgaXMgVFggdW5kZXJmbG93IGV2ZW50IGluIFNsYXZlIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBRU1BJIGRhdGEgb3V0IGlzIGtlZXAgMSBpZiB0aGVyZSBpcyBUWCB1bmRlcmZsb3cgZXZlbnQgaW4gU2xhdmUgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEuIFRoZSBUWCB1bmRlcmZsb3cgZXZlbnQgb2NjdXJzIGlmIHRoZXJlIGlzIG5vIGFueSBkYXRhIGluIFRYIEZJRk8gd2hlbiB0aGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpcyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Mi4gV2hlbiBUWCB1bmRlcmZsb3cgZXZlbnQgb2NjdXJzLCBRU1BJeF9NSVNPIHBpbiBzdGF0ZSB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhpcyBzZXR0aW5nIGV2ZW4gdGhvdWdoIFRYIEZJRk8gaXMgbm90IGVtcHR5IGFmdGVyd2FyZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERhdGEgc3RvcmVkIGluIFRYIEZJRk8gd2lsbCBiZSBzZW50IHRocm91Z2ggUVNQSXhfTUlTTyBwaW4gaW4gdGhlIG5leHQgdHJhbnNmZXIgZnJhbWUuCisgICAgICogfFs3XSAgICAgfFRYVUZJRU4gICB8VFggVW5kZXJmbG93IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBUWCB1bmRlcmZsb3cgZXZlbnQgb2NjdXJzIGluIFNsYXZlIG1vZGUsIFRYVUZJRiAoUVNQSXhfU1RBVFVTWzE5XSkgd2lsbCBiZSBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBUWCB1bmRlcmZsb3cgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTbGF2ZSBUWCB1bmRlcmZsb3cgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBUWCB1bmRlcmZsb3cgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfFJYRkJDTFIgICB8UmVjZWl2ZSBGSUZPIEJ1ZmZlciBDbGVhcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIHJlY2VpdmUgRklGTyBwb2ludGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFJYRlVMTCBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYW5kIHRoZSBSWEVNUFRZIGJpdCB3aWxsIGJlIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYnkgaGFyZHdhcmUgYWJvdXQgMSBzeXN0ZW0gY2xvY2sgYWZ0ZXIgaXQgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIFJYIHNoaWZ0IHJlZ2lzdGVyIHdpbGwgbm90IGJlIGNsZWFyZWQuCisgICAgICogfFs5XSAgICAgfFRYRkJDTFIgICB8VHJhbnNtaXQgRklGTyBCdWZmZXIgQ2xlYXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhciB0cmFuc21pdCBGSUZPIHBvaW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVFhGVUxMIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBhbmQgdGhlIFRYRU1QVFkgYml0IHdpbGwgYmUgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBieSBoYXJkd2FyZSBhYm91dCAxIHN5c3RlbSBjbG9jayBhZnRlciBpdCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgVFggc2hpZnQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgY2xlYXJlZC4KKyAgICAgKiB8WzI2OjI0XSB8UlhUSCAgICAgIHxSZWNlaXZlIEZJRk8gVGhyZXNob2xkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIHZhbGlkIGRhdGEgY291bnQgb2YgdGhlIHJlY2VpdmUgRklGTyBidWZmZXIgaXMgbGFyZ2VyIHRoYW4gdGhlIFJYVEggc2V0dGluZywgdGhlIFJYVEhJRiBiaXQgd2lsbCBiZSBzZXQgdG8gMSwgZWxzZSB0aGUgUlhUSElGIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBRU1BJMH5RU1BJMywgdGhlIE1TQiBvZiB0aGlzIGJpdCBmaWVsZCBpcyBvbmx5IG1lYW5pbmdmdWwgd2hpbGUgUVNQSSBtb2RlIDh+MTYgYml0cyBvZiBkYXRhIGxlbmd0aC4KKyAgICAgKiB8WzMwOjI4XSB8VFhUSCAgICAgIHxUcmFuc21pdCBGSUZPIFRocmVzaG9sZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSB2YWxpZCBkYXRhIGNvdW50IG9mIHRoZSB0cmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIFRYVEggc2V0dGluZywgdGhlIFRYVEhJRiBiaXQgd2lsbCBiZSBzZXQgdG8gMSwgZWxzZSB0aGUgVFhUSElGIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBRU1BJMH5RU1BJMywgdGhlIE1TQiBvZiB0aGlzIGJpdCBmaWVsZCBpcyBvbmx5IG1lYW5pbmdmdWwgd2hpbGUgUVNQSSBtb2RlIDh+MTYgYml0cyBvZiBkYXRhIGxlbmd0aC4KKyAgICAgKiBAdmFyIFFTUElfVDo6U1RBVFVTCisgICAgICogT2Zmc2V0OiAweDE0ICBRU1BJIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJVU1kgICAgICB8QnVzeSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUVNQSSBjb250cm9sbGVyIGlzIGluIGlkbGUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFTUEkgY29udHJvbGxlciBpcyBpbiBidXN5IHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmb2xsb3dpbmcgbGlzdGluZyBhcmUgdGhlIGJ1cyBidXN5IGNvbmRpdGlvbnM6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8YS4gUVNQSXhfQ1RMWzBdID0gMSBhbmQgVFhFTVBUWSA9IDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8YgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBRU1BJIE1hc3RlciBtb2RlLCBRU1BJeF9DVExbMF0gPSAxIGFuZCBUWEVNUFRZID0gMSBidXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgbm90IGZpbmlzaGVkIHlldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxjLiBGb3IgUVNQSSBNYXN0ZXIgbW9kZSwgUVNQSXhfQ1RMWzBdID0gMSBhbmQgUlhPTkxZID0gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBRU1BJIFNsYXZlIG1vZGUsIHRoZSBRU1BJeF9DVExbMF0gPSAxIGFuZCB0aGVyZSBpcyBzZXJpYWwgY2xvY2sgaW5wdXQgaW50byB0aGUgUVNQSSBjb3JlIGxvZ2ljIHdoZW4gc2xhdmUgc2VsZWN0IGlzIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBRU1BJIFNsYXZlIG1vZGUsIHRoZSBRU1BJeF9DVExbMF0gPSAxIGFuZCB0aGUgdHJhbnNtaXQgYnVmZmVyIG9yIHRyYW5zbWl0IHNoaWZ0IHJlZ2lzdGVyIGlzIG5vdCBlbXB0eSBldmVuIGlmIHRoZSBzbGF2ZSBzZWxlY3QgaXMgaW5hY3RpdmUuCisgICAgICogfFsxXSAgICAgfFVOSVRJRiAgICB8VW5pdCBUcmFuc2ZlciBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB0cmFuc2FjdGlvbiBoYXMgYmVlbiBmaW5pc2hlZCBzaW5jZSB0aGlzIGJpdCB3YXMgY2xlYXJlZCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRU1BJIGNvbnRyb2xsZXIgaGFzIGZpbmlzaGVkIG9uZSB1bml0IHRyYW5zZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsyXSAgICAgfFNTQUNUSUYgICB8U2xhdmUgU2VsZWN0IEFjdGl2ZSBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTbGF2ZSBzZWxlY3QgYWN0aXZlIGludGVycnVwdCB3YXMgY2xlYXJlZCBvciBub3Qgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIHNlbGVjdCBhY3RpdmUgaW50ZXJydXB0IGV2ZW50IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IE9ubHkgYXZhaWxhYmxlIGluIFNsYXZlIG1vZGUuIFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFszXSAgICAgfFNTSU5BSUYgICB8U2xhdmUgU2VsZWN0IEluYWN0aXZlIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIHNlbGVjdCBpbmFjdGl2ZSBpbnRlcnJ1cHQgd2FzIGNsZWFyZWQgb3Igbm90IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBzZWxlY3QgaW5hY3RpdmUgaW50ZXJydXB0IGV2ZW50IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IE9ubHkgYXZhaWxhYmxlIGluIFNsYXZlIG1vZGUuIFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs0XSAgICAgfFNTTElORSAgICB8U2xhdmUgU2VsZWN0IExpbmUgQnVzIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgc2xhdmUgc2VsZWN0IGxpbmUgc3RhdHVzIGlzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBzbGF2ZSBzZWxlY3QgbGluZSBzdGF0dXMgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBvbmx5IGF2YWlsYWJsZSBpbiBTbGF2ZSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgU1NBQ1RQT0wgKFFTUEl4X1NTQ1RMWzJdKSBpcyBzZXQgMCwgYW5kIHRoZSBTU0xJTkUgaXMgMSwgdGhlIFFTUEkgc2xhdmUgc2VsZWN0IGlzIGluIGluYWN0aXZlIHN0YXR1cy4KKyAgICAgKiB8WzVdICAgICB8U0xWVE9JRiAgIHxTbGF2ZSBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZyAoT25seSBTdXBwb3J0ZWQgaW4gUVNQSTApCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgc2xhdmUgc2VsZWN0IGlzIGFjdGl2ZSBhbmQgdGhlIHZhbHVlIG9mIFNMVlRPQ05UIGlzIG5vdCAwLCBhcyB0aGUgYnVzIGNsb2NrIGlzIGRldGVjdGVkLCB0aGUgc2xhdmUgdGltZS1vdXQgY291bnRlciBpbiBRU1BJIGNvbnRyb2xsZXIgbG9naWMgd2lsbCBiZSBzdGFydGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgdmFsdWUgb2YgdGltZS1vdXQgY291bnRlciBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIFNMVlRPQ05UIChRU1BJX1NTQ1RMWzMxOjE2XSkgYmVmb3JlIG9uZSB0cmFuc2FjdGlvbiBpcyBkb25lLCB0aGUgc2xhdmUgdGltZS1vdXQgaW50ZXJydXB0IGV2ZW50IHdpbGwgYmUgYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIHRpbWUtb3V0IGlzIG5vdCBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIHRpbWUtb3V0IGlzIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNl0gICAgIHxTTFZCRUlGICAgfFNsYXZlIE1vZGUgQml0IENvdW50IEVycm9yIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gU2xhdmUgbW9kZSwgd2hlbiB0aGUgc2xhdmUgc2VsZWN0IGxpbmUgZ29lcyB0byBpbmFjdGl2ZSBzdGF0ZSwgaWYgYml0IGNvdW50ZXIgaXMgbWlzbWF0Y2ggd2l0aCBEV0lEVEgsIHRoaXMgaW50ZXJydXB0IGZsYWcgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gU2xhdmUgbW9kZSBiaXQgY291bnQgZXJyb3IgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIG1vZGUgYml0IGNvdW50IGVycm9yIGV2ZW50IG9jY3Vycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiB0aGUgc2xhdmUgc2VsZWN0IGFjdGl2ZSBidXQgdGhlcmUgaXMgbm8gYW55IGJ1cyBjbG9jayBpbnB1dCwgdGhlIFNMVkJFSUYgYWxzbyBhY3RpdmUgd2hlbiB0aGUgc2xhdmUgc2VsZWN0IGdvZXMgdG8gaW5hY3RpdmUgc3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbN10gICAgIHxTTFZVUklGICAgfFNsYXZlIE1vZGUgVFggVW5kZXIgUnVuIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gU2xhdmUgbW9kZSwgaWYgVFggdW5kZXJmbG93IGV2ZW50IG9jY3VycyBhbmQgdGhlIHNsYXZlIHNlbGVjdCBsaW5lIGdvZXMgdG8gaW5hY3RpdmUgc3RhdGUsIHRoaXMgaW50ZXJydXB0IGZsYWcgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gU2xhdmUgVFggdW5kZXIgcnVuIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBUWCB1bmRlciBydW4gZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs4XSAgICAgfFJYRU1QVFkgICB8UmVjZWl2ZSBGSUZPIEJ1ZmZlciBFbXB0eSBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBub3QgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgRklGTyBidWZmZXIgaXMgZW1wdHkuCisgICAgICogfFs5XSAgICAgfFJYRlVMTCAgICB8UmVjZWl2ZSBGSUZPIEJ1ZmZlciBGdWxsIEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIEZJRk8gYnVmZmVyIGlzIG5vdCBmdWxsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIEZJRk8gYnVmZmVyIGlzIGZ1bGwuCisgICAgICogfFsxMF0gICAgfFJYVEhJRiAgICB8UmVjZWl2ZSBGSUZPIFRocmVzaG9sZCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdmFsaWQgZGF0YSBjb3VudCB3aXRoaW4gdGhlIHJlY2VpdmUgRklGTyBidWZmZXIgaXMgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzZXR0aW5nIHZhbHVlIG9mIFJYVEguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB2YWxpZCBkYXRhIGNvdW50IHdpdGhpbiB0aGUgcmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiB0aGUgc2V0dGluZyB2YWx1ZSBvZiBSWFRILgorICAgICAqIHxbMTFdICAgIHxSWE9WSUYgICAgfFJlY2VpdmUgRklGTyBPdmVycnVuIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgcmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBmdWxsLCB0aGUgZm9sbG93LXVwIGRhdGEgd2lsbCBiZSBkcm9wcGVkIGFuZCB0aGlzIGJpdCB3aWxsIGJlIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBGSUZPIGlzIG92ZXJydW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgRklGTyBpcyBvdmVycnVuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxMl0gICAgfFJYVE9JRiAgICB8UmVjZWl2ZSBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyByZWNlaXZlIEZJRk8gdGltZS1vdXQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgRklGTyBidWZmZXIgaXMgbm90IGVtcHR5IGFuZCBubyByZWFkIG9wZXJhdGlvbiBvbiByZWNlaXZlIEZJRk8gYnVmZmVyIG92ZXIgNjQgUVNQSSBwZXJpcGhlcmFsIGNsb2NrIHBlcmlvZHMgaW4gTWFzdGVyIG1vZGUgb3Igb3ZlciA1NzYgUVNQSSBwZXJpcGhlcmFsIGNsb2NrIHBlcmlvZHMgaW4gU2xhdmUgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIHJlY2VpdmVkIEZJRk8gYnVmZmVyIGlzIHJlYWQgYnkgc29mdHdhcmUsIHRoZSB0aW1lLW91dCBzdGF0dXMgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzE1XSAgICB8U1BJRU5TVFMgIHxRU1BJIEVuYWJsZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIFFTUEkgY29udHJvbGxlciBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIFFTUEkgY29udHJvbGxlciBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBRU1BJIHBlcmlwaGVyYWwgY2xvY2sgaXMgYXN5bmNocm9ub3VzIHdpdGggdGhlIHN5c3RlbSBjbG9jaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGUgUVNQSSBjb250cm9sIGxvZ2ljIGlzIGRpc2FibGVkLCB0aGlzIGJpdCBpbmRpY2F0ZXMgdGhlIHJlYWwgc3RhdHVzIG9mIFFTUEkgY29udHJvbGxlci4KKyAgICAgKiB8WzE2XSAgICB8VFhFTVBUWSAgIHxUcmFuc21pdCBGSUZPIEJ1ZmZlciBFbXB0eSBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgRklGTyBidWZmZXIgaXMgbm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBlbXB0eS4KKyAgICAgKiB8WzE3XSAgICB8VFhGVUxMICAgIHxUcmFuc21pdCBGSUZPIEJ1ZmZlciBGdWxsIEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBub3QgZnVsbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgRklGTyBidWZmZXIgaXMgZnVsbC4KKyAgICAgKiB8WzE4XSAgICB8VFhUSElGICAgIHxUcmFuc21pdCBGSUZPIFRocmVzaG9sZCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdmFsaWQgZGF0YSBjb3VudCB3aXRoaW4gdGhlIHRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIGxhcmdlciB0aGFuIHRoZSBzZXR0aW5nIHZhbHVlIG9mIFRYVEguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB2YWxpZCBkYXRhIGNvdW50IHdpdGhpbiB0aGUgdHJhbnNtaXQgRklGTyBidWZmZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzZXR0aW5nIHZhbHVlIG9mIFRYVEguCisgICAgICogfFsxOV0gICAgfFRYVUZJRiAgICB8VFggVW5kZXJmbG93IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgVFggdW5kZXJmbG93IGV2ZW50IG9jY3VycywgdGhpcyBiaXQgd2lsbCBiZSBzZXQgdG8gMSwgdGhlIHN0YXRlIG9mIGRhdGEgb3V0cHV0IHBpbiBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mIFRYVUZQT0wuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTm8gZGF0YSBpbiBUcmFuc21pdCBGSUZPIGFuZCBUWCBzaGlmdCByZWdpc3RlciB3aGVuIHRoZSBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGlzIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlIDE6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZSAyOiBJZiByZXNldCBzbGF2ZSdzIHRyYW5zbWlzc2lvbiBjaXJjdWl0IHdoZW4gc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpcyBhY3RpdmUsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byAxIGFmdGVyIDIgcGVyaXBoZXJhbCBjbG9jayBjeWNsZXMgKyAzIHN5c3RlbSBjbG9jayBjeWNsZXMgc2luY2UgdGhlIHJlc2V0IG9wZXJhdGlvbiBpcyBkb25lLgorICAgICAqIHxbMjNdICAgIHxUWFJYUlNUICAgfFRYIG9yIFJYIFJlc2V0IFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVzZXQgZnVuY3Rpb24gb2YgVFhSU1Qgb3IgUlhSU1QgaXMgZG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRG9pbmcgdGhlIHJlc2V0IGZ1bmN0aW9uIG9mIFRYUlNUIG9yIFJYUlNULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEJvdGggdGhlIHJlc2V0IG9wZXJhdGlvbnMgb2YgVFhSU1QgYW5kIFJYUlNUIG5lZWQgMyBzeXN0ZW0gY2xvY2sgY3ljbGVzICsgMiBwZXJpcGhlcmFsIGNsb2NrIGN5Y2xlcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhpcyBiaXQgdG8gbW9uaXRvciB0aGUgcmVzZXQgZnVuY3Rpb24gaXMgZG9pbmcgb3IgZG9uZS4KKyAgICAgKiB8WzI3OjI0XSB8UlhDTlQgICAgIHxSZWNlaXZlIEZJRk8gRGF0YSBDb3VudCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGluZGljYXRlcyB0aGUgdmFsaWQgZGF0YSBjb3VudCBvZiByZWNlaXZlIEZJRk8gYnVmZmVyLgorICAgICAqIHxbMzE6MjhdIHxUWENOVCAgICAgfFRyYW5zbWl0IEZJRk8gRGF0YSBDb3VudCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGluZGljYXRlcyB0aGUgdmFsaWQgZGF0YSBjb3VudCBvZiB0cmFuc21pdCBGSUZPIGJ1ZmZlci4KKyAgICAgKiBAdmFyIFFTUElfVDo6VFgKKyAgICAgKiBPZmZzZXQ6IDB4MjAgIFFTUEkgRGF0YSBUcmFuc21pdCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFRYICAgICAgICB8RGF0YSBUcmFuc21pdCBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkYXRhIHRyYW5zbWl0IHJlZ2lzdGVycyBwYXNzIHRocm91Z2ggdGhlIHRyYW5zbWl0dGVkIGRhdGEgaW50byB0aGUgOC1sZXZlbCB0cmFuc21pdCBGSUZPIGJ1ZmZlcnMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgbnVtYmVyIG9mIHZhbGlkIGJpdHMgZGVwZW5kcyBvbiB0aGUgc2V0dGluZyBvZiBEV0lEVEggKFFTUEl4X0NUTFsxMjo4XSkgaW4gUVNQSSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIFFTUEkgbW9kZSwgaWYgRFdJRFRIIGlzIHNldCB0byAweDA4LCB0aGUgYml0cyBUWFs3OjBdIHdpbGwgYmUgdHJhbnNtaXR0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgRFdJRFRIIGlzIHNldCB0byAweDAwICwgdGhlIFFTUEkgY29udHJvbGxlciB3aWxsIHBlcmZvcm0gYSAzMi1iaXQgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gTWFzdGVyIG1vZGUsIFFTUEkgY29udHJvbGxlciB3aWxsIHN0YXJ0IHRvIHRyYW5zZmVyIHRoZSBRU1BJIGJ1cyBjbG9jayBhZnRlciAxIEFQQiBjbG9jayBhbmQgNiBwZXJpcGhlcmFsIGNsb2NrIGN5Y2xlcyBhZnRlciB1c2VyIHdyaXRlcyB0byB0aGlzIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgUVNQSV9UOjpSWAorICAgICAqIE9mZnNldDogMHgzMCAgUVNQSSBEYXRhIFJlY2VpdmUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxSWCAgICAgICAgfERhdGEgUmVjZWl2ZSBSZWdpc3RlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXJlIGFyZSA4LWxldmVsIEZJRk8gYnVmZmVycyBpbiB0aGlzIGNvbnRyb2xsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRhdGEgcmVjZWl2ZSByZWdpc3RlciBob2xkcyB0aGUgZGF0YSByZWNlaXZlZCBmcm9tIFFTUEkgZGF0YSBpbnB1dCBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIFJYRU1QVFkgKFFTUEl4X1NUQVRVU1s4XSkgaXMgbm90IHNldCB0byAxLCB0aGUgcmVjZWl2ZSBGSUZPIGJ1ZmZlcnMgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggc29mdHdhcmUgYnkgcmVhZGluZyB0aGlzIHJlZ2lzdGVyLgorICAgICAqLworCisgICAgX19JTyB1aW50MzJfdCBDVEw7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gUVNQSSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENMS0RJVjsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBRU1BJIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1NDVEw7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIFFTUEkgU2xhdmUgU2VsZWN0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQRE1BQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gUVNQSSBQRE1BIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEZJRk9DVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBRU1BJIEZJRk8gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1RBVFVTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTRdIFFTUEkgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsyXTsKKyAgICBfX08gIHVpbnQzMl90IFRYOyAgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDIwXSBRU1BJIERhdGEgVHJhbnNtaXQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbM107CisgICAgX19JICB1aW50MzJfdCBSWDsgICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzMF0gUVNQSSBEYXRhIFJlY2VpdmUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBRU1BJX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIFFTUElfQ09OU1QgUVNQSSBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBRU1BJIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgUVNQSV9DVExfU1BJRU5fUG9zICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogU1BJRU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9DVExfU1BJRU5fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX0NUTF9TUElFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogU1BJRU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0NUTF9SWE5FR19Qb3MgICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBSWE5FRyBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJX0NUTF9SWE5FR19Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfQ1RMX1JYTkVHX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBSWE5FRyBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfQ1RMX1RYTkVHX1BvcyAgICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IFRYTkVHIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElfQ1RMX1RYTkVHX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9DVExfVFhORUdfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IFRYTkVHIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9DVExfQ0xLUE9MX1BvcyAgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogQ0xLUE9MIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9DVExfQ0xLUE9MX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX0NUTF9DTEtQT0xfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogQ0xLUE9MIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0NUTF9TVVNQSVRWX1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBTVVNQSVRWIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBRU1BJX0NUTF9TVVNQSVRWX01zayAgICAgICAgICAgICAgKDB4ZnVsIDw8IFFTUElfQ1RMX1NVU1BJVFZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBTVVNQSVRWIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfQ1RMX0RXSURUSF9Qb3MgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IERXSURUSCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElfQ1RMX0RXSURUSF9Nc2sgICAgICAgICAgICAgICAoMHgxZnVsIDw8IFFTUElfQ1RMX0RXSURUSF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IERXSURUSCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9DVExfTFNCX1BvcyAgICAgICAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogTFNCIFBvc2l0aW9uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9DVExfTFNCX01zayAgICAgICAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX0NUTF9MU0JfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogTFNCIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0NUTF9IQUxGRFBYX1BvcyAgICAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBIQUxGRFBYIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBRU1BJX0NUTF9IQUxGRFBYX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfQ1RMX0hBTEZEUFhfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBIQUxGRFBYIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfQ1RMX1JYT05MWV9Qb3MgICAgICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IFJYT05MWSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElfQ1RMX1JYT05MWV9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9DVExfUlhPTkxZX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IFJYT05MWSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9DVExfVFdPQklUX1BvcyAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogVFdPQklUIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9DVExfVFdPQklUX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX0NUTF9UV09CSVRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogVFdPQklUIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0NUTF9VTklUSUVOX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBVTklUSUVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBRU1BJX0NUTF9VTklUSUVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfQ1RMX1VOSVRJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBVTklUSUVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfQ1RMX1NMQVZFX1BvcyAgICAgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IFNMQVZFIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElfQ1RMX1NMQVZFX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9DVExfU0xBVkVfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IFNMQVZFIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9DVExfUkVPUkRFUl9Qb3MgICAgICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogUkVPUkRFUiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9DVExfUkVPUkRFUl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX0NUTF9SRU9SREVSX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogUkVPUkRFUiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0NUTF9EQVRESVJfUG9zICAgICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBEQVRESVIgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBRU1BJX0NUTF9EQVRESVJfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfQ1RMX0RBVERJUl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBEQVRESVIgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfQ1RMX0RVQUxJT0VOX1BvcyAgICAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IERVQUxJT0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFFTUElfQ1RMX0RVQUxJT0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9DVExfRFVBTElPRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IERVQUxJT0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9DVExfUVVBRElPRU5fUG9zICAgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogUVVBRElPRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9DVExfUVVBRElPRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX0NUTF9RVUFESU9FTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogUVVBRElPRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0NMS0RJVl9ESVZJREVSX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q0xLRElWOiBESVZJREVSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX0NMS0RJVl9ESVZJREVSX01zayAgICAgICAgICAgKDB4MWZmdWwgPDwgUVNQSV9DTEtESVZfRElWSURFUl9Qb3MpICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q0xLRElWOiBESVZJREVSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1NDVExfU1NfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogU1MgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElfU1NDVExfU1NfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TU0NUTF9TU19Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogU1MgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TU0NUTF9TU0FDVFBPTF9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTU0FDVFBPTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TU0NUTF9TU0FDVFBPTF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NTQ1RMX1NTQUNUUE9MX1BvcykgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTU0FDVFBPTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NTQ1RMX0FVVE9TU19Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IEFVVE9TUyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBRU1BJX1NTQ1RMX0FVVE9TU19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1NDVExfQVVUT1NTX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IEFVVE9TUyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1NDVExfU0xWM1dJUkVfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogU0xWM1dJUkUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFFTUElfU1NDVExfU0xWM1dJUkVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TU0NUTF9TTFYzV0lSRV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogU0xWM1dJUkUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TU0NUTF9TTFZUT0lFTl9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTTFZUT0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TU0NUTF9TTFZUT0lFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NTQ1RMX1NMVlRPSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTTFZUT0lFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NTQ1RMX1NMVlRPUlNUX1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IFNMVlRPUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NTQ1RMX1NMVlRPUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1NDVExfU0xWVE9SU1RfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IFNMVlRPUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1NDVExfU0xWQkVJRU5fUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogU0xWQkVJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFFTUElfU1NDVExfU0xWQkVJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TU0NUTF9TTFZCRUlFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogU0xWQkVJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TU0NUTF9TTFZVUklFTl9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTTFZVUklFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TU0NUTF9TTFZVUklFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NTQ1RMX1NMVlVSSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTTFZVUklFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NTQ1RMX1NTQUNUSUVOX1BvcyAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IFNTQUNUSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NTQ1RMX1NTQUNUSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1NDVExfU1NBQ1RJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IFNTQUNUSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1NDVExfU1NJTkFJRU5fUG9zICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogU1NJTkFJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFFTUElfU1NDVExfU1NJTkFJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TU0NUTF9TU0lOQUlFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogU1NJTkFJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TU0NUTF9TTFZUT0NOVF9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTTFZUT0NOVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TU0NUTF9TTFZUT0NOVF9Nc2sgICAgICAgICAgICgweGZmZmZ1bCA8PCBRU1BJX1NTQ1RMX1NMVlRPQ05UX1BvcykgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTTFZUT0NOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1BETUFDVExfVFhQRE1BRU5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6UERNQUNUTDogVFhQRE1BRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBRU1BJX1BETUFDVExfVFhQRE1BRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFFTUElfUERNQUNUTF9UWFBETUFFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6UERNQUNUTDogVFhQRE1BRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfUERNQUNUTF9SWFBETUFFTl9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpQRE1BQ1RMOiBSWFBETUFFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFFTUElfUERNQUNUTF9SWFBETUFFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgUVNQSV9QRE1BQ1RMX1JYUERNQUVOX1BvcykgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpQRE1BQ1RMOiBSWFBETUFFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9QRE1BQ1RMX1BETUFSU1RfUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlBETUFDVEw6IFBETUFSU1QgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUVNQSV9QRE1BQ1RMX1BETUFSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBRU1BJX1BETUFDVExfUERNQVJTVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlBETUFDVEw6IFBETUFSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0ZJRk9DVExfUlhSU1RfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogUlhSU1QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBRU1BJX0ZJRk9DVExfUlhSU1RfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfRklGT0NUTF9SWFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogUlhSU1QgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfRklGT0NUTF9UWFJTVF9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBUWFJTVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFFTUElfRklGT0NUTF9UWFJTVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9GSUZPQ1RMX1RYUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBUWFJTVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1JYVEhJRU5fUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFJYVEhJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1JYVEhJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBRU1BJX0ZJRk9DVExfUlhUSElFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFJYVEhJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0ZJRk9DVExfVFhUSElFTl9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogVFhUSElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBRU1BJX0ZJRk9DVExfVFhUSElFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFFTUElfRklGT0NUTF9UWFRISUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogVFhUSElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfRklGT0NUTF9SWFRPSUVOX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBSWFRPSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFFTUElfRklGT0NUTF9SWFRPSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9GSUZPQ1RMX1JYVE9JRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBSWFRPSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1JYT1ZJRU5fUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFJYT1ZJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1JYT1ZJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBRU1BJX0ZJRk9DVExfUlhPVklFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFJYT1ZJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0ZJRk9DVExfVFhVRlBPTF9Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogVFhVRlBPTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBRU1BJX0ZJRk9DVExfVFhVRlBPTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFFTUElfRklGT0NUTF9UWFVGUE9MX1BvcykgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogVFhVRlBPTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfRklGT0NUTF9UWFVGSUVOX1BvcyAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBUWFVGSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFFTUElfRklGT0NUTF9UWFVGSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9GSUZPQ1RMX1RYVUZJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBUWFVGSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1JYRkJDTFJfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFJYRkJDTFIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1JYRkJDTFJfTXNrICAgICAgICAgICgweDF1bCA8PCBRU1BJX0ZJRk9DVExfUlhGQkNMUl9Qb3MpICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFJYRkJDTFIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0ZJRk9DVExfVFhGQkNMUl9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogVFhGQkNMUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBRU1BJX0ZJRk9DVExfVFhGQkNMUl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFFTUElfRklGT0NUTF9UWEZCQ0xSX1BvcykgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogVFhGQkNMUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfRklGT0NUTF9SWFRIX1BvcyAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBSWFRIIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFFTUElfRklGT0NUTF9SWFRIX01zayAgICAgICAgICAgICAoMHg3dWwgPDwgUVNQSV9GSUZPQ1RMX1JYVEhfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBSWFRIIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1RYVEhfUG9zICAgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFRYVEggUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1RYVEhfTXNrICAgICAgICAgICAgICgweDd1bCA8PCBRU1BJX0ZJRk9DVExfVFhUSF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFRYVEggTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19CVVNZX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBCVVNZIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19CVVNZX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX0JVU1lfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBCVVNZIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1VOSVRJRl9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFVOSVRJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1VOSVRJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfVU5JVElGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFVOSVRJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfU1NBQ1RJRl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogU1NBQ1RJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfU1NBQ1RJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NUQVRVU19TU0FDVElGX1BvcykgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogU1NBQ1RJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19TU0lOQUlGX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBTU0lOQUlGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19TU0lOQUlGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX1NTSU5BSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBTU0lOQUlGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1NTTElORV9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFNTTElORSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1NTTElORV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfU1NMSU5FX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFNTTElORSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfU0xWVE9JRl9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogU0xWVE9JRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfU0xWVE9JRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NUQVRVU19TTFZUT0lGX1BvcykgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogU0xWVE9JRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19TTFZCRUlGX1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBTTFZCRUlGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19TTFZCRUlGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX1NMVkJFSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBTTFZCRUlGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1NMVlVSSUZfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFNMVlVSSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1NMVlVSSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfU0xWVVJJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFNMVlVSSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfUlhFTVBUWV9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogUlhFTVBUWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfUlhFTVBUWV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NUQVRVU19SWEVNUFRZX1BvcykgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogUlhFTVBUWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19SWEZVTExfUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBSWEZVTEwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19SWEZVTExfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX1JYRlVMTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBSWEZVTEwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1JYVEhJRl9Qb3MgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFJYVEhJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1JYVEhJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfUlhUSElGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFJYVEhJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfUlhPVklGX1BvcyAgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogUlhPVklGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfUlhPVklGX01zayAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NUQVRVU19SWE9WSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogUlhPVklGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19SWFRPSUZfUG9zICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBSWFRPSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19SWFRPSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX1JYVE9JRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBSWFRPSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1NQSUVOU1RTX1BvcyAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFNQSUVOU1RTIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1NQSUVOU1RTX01zayAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfU1BJRU5TVFNfUG9zKSAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFNQSUVOU1RTIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfVFhFTVBUWV9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogVFhFTVBUWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfVFhFTVBUWV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NUQVRVU19UWEVNUFRZX1BvcykgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogVFhFTVBUWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19UWEZVTExfUG9zICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBUWEZVTEwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19UWEZVTExfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX1RYRlVMTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBUWEZVTEwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1RYVEhJRl9Qb3MgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFRYVEhJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1RYVEhJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfVFhUSElGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFRYVEhJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfVFhVRklGX1BvcyAgICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogVFhVRklGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfVFhVRklGX01zayAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NUQVRVU19UWFVGSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogVFhVRklGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19UWFJYUlNUX1BvcyAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBUWFJYUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19UWFJYUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX1RYUlhSU1RfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBUWFJYUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1JYQ05UX1BvcyAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFJYQ05UIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1JYQ05UX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgUVNQSV9TVEFUVVNfUlhDTlRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFJYQ05UIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfVFhDTlRfUG9zICAgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogVFhDTlQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfVFhDTlRfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBRU1BJX1NUQVRVU19UWENOVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogVFhDTlQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1RYX1RYX1BvcyAgICAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6VFg6IFRYIFBvc2l0aW9uICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJX1RYX1RYX01zayAgICAgICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBRU1BJX1RYX1RYX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6VFg6IFRYIE1hc2sgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfUlhfUlhfUG9zICAgICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpSWDogUlggUG9zaXRpb24gICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElfUlhfUlhfTXNrICAgICAgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFFTUElfUlhfUlhfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpSWDogUlggTWFzayAgICAgICAgICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogUVNQSV9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUVNQSSByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworI2VuZGlmIC8qIF9fUVNQSV9SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvcnRjX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3J0Y19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmRmYzZlCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3J0Y19yZWcuaApAQCAtMCwwICsxLDEzMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBydGNfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFJUQyByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19SVENfUkVHX0hfXworI2RlZmluZSBfX1JUQ19SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlYWwgVGltZSBDbG9jayBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgUlRDIFJlYWwgVGltZSBDbG9jayBDb250cm9sbGVyKFJUQykKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgUlRDIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgUlRDX1Q6OklOSVQKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIFJUQyBJbml0aWF0aW9uIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SU5JVF9BQ1RJVkV8UlRDIEFjdGl2ZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlRDIGlzIGF0IHJlc2V0IHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSVEMgaXMgYXQgbm9ybWFsIGFjdGl2ZSBzdGF0ZS4KKyAgICAgKiB8WzMxOjFdICB8SU5JVCAgICAgIHxSVEMgSW5pdGlhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gUlRDIGJsb2NrIGlzIHBvd2VyZWQgb24sIFJUQyBpcyBhdCByZXNldCBzdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgaGFzIHRvIHdyaXRlIGEgbnVtYmVyICgweCBhNWViMTM1NykgdG8gSU5JVCB0byBtYWtlIFJUQyBsZWF2aW5nIHJlc2V0IHN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25jZSB0aGUgSU5JVCBpcyB3cml0dGVuIGFzIDB4YTVlYjEzNTcsIHRoZSBSVEMgd2lsbCBiZSBpbiB1bi1yZXNldCBzdGF0ZSBwZXJtYW5lbnRseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgSU5JVCBpcyBhIHdyaXRlLW9ubHkgZmllbGQgYW5kIHJlYWQgdmFsdWUgd2lsbCBiZSBhbHdheXMgMC4KKyAgICAgKiBAdmFyIFJUQ19UOjpSV0VOCisgICAgICogT2Zmc2V0OiAweDA0ICBSVEMgQWNjZXNzIEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFJXRU4gICAgICB8UlRDIFJlZ2lzdGVyIEFjY2VzcyBFbmFibGUgUGFzc3dvcmQgKFdyaXRlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyAweEE5NjUgdG8gdGhpcyBmaWVsZCB3aWxsIGVuYWJsZSBSVEMgYWNjZXNzaWJsZSBwZXJpb2Qga2VlcHMgMTAyNCBSVEMgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRpbmcgb3RoZXIgdmFsdWUgd2lsbCBjbGVhciBSV0VORiBhbmQgZGlzYWJsZSBSVEMgcmVnaXN0ZXIgYWNjZXNzIGZ1bmN0aW9uIGltbWVkaWF0ZWx5LgorICAgICAqIHxbMTZdICAgIHxSV0VORiAgICAgfFJUQyBSZWdpc3RlciBBY2Nlc3MgRW5hYmxlIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlRDIHJlZ2lzdGVyIHJlYWQvd3JpdGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJUQyByZWdpc3RlciByZWFkL3dyaXRlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBzZXQgYWZ0ZXIgUlRDX1JXRU5bMTU6MF0gcmVnaXN0ZXIgaXMgbG9hZCBhIDB4QTk2NSwgYW5kIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciAxMDI0IFJUQyBjbG9ja3MgZXhwaXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBSV0VORiB3aWxsIGJlIG1hc2sgdG8gMCBkdXJpbmcgUlRDQlVTWSBpcyAxLCBhbmQgZmlyc3QgdHVybiBvbiBSVENDS0VOIChDTEtfQVBCQ0xLWzFdKSBhbHNvLgorICAgICAqIHxbMjRdICAgIHxSVENCVVNZICAgfFJUQyBXcml0ZSBCdXN5IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgUlRDIHJlZ2lzdGVycyBhcmUgYnVzeSBvciBub3QuIFJUQyByZWdpc3RlciBSL1cgaXMgaW52YWxpZCBkdXJpbmcgUlRDQlVTWS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwOiBSVEMgcmVnaXN0ZXJzIGFyZSByZWFkYWJsZSBhbmQgd3JpdGFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTogUlRDIHJlZ2lzdGVycyBjYW4ndCBSL1csIFJUQyB1bmRlciBCdXN5IFN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBSVENCVVNZIGZsYWcgd2lsbCBiZSBzZXQgd2hlbiBleGVjdXRlIHdyaXRlIFJUQyByZWdpc3RlciBjb21tYW5kIGV4Y2VlZCA2IHRpbWVzIHdpdGhpbiAxMTIwIFBDTEsgY3ljbGVzIG9yIFBDTEtSVEMgc3dpdGNoIG9uIGZpcnN0IGZldyBjeWNsZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGJpdCByZWZsZWN0IFJXRU5GIChSV0VORiA9IDAgd2hlbiBSVENCVVNZKS4KKyAgICAgKiBAdmFyIFJUQ19UOjpGUkVRQURKCisgICAgICogT2Zmc2V0OiAweDA4ICBSVEMgRnJlcXVlbmN5IENvbXBlbnNhdGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyMTowXSAgfEZSRVFBREogICB8RnJlcXVlbmN5IENvbXBlbnNhdGlvbiBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgbXVzdCB0byBnZXQgYWN0dWFsIExYVCBmcmVxdWVuY3kgZm9yIFJUQyBhcHBsaWNhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGQ1IgPSAweDIwMDAwMCAqICgzMjc2OCAvIExYVCBmcmVxdWVuY3kpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgZm9ybXVsYSBpcyBzdWl0YWJsZSBvbmx5IHdoZW4gUlRDIGNsb2NrIHNvdXJjZSBpcyBmcm9tIExYVCwgUlRDU0VMIChDTEtfQ0xLU0VMM1s4XSkgaXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBzZXQgUlRDU0VMIChDTEtfQ0xLU0VMM1s4XSkgdG8gMSwgUlRDIGNsb2NrIHNvdXJjZSBpcyBmcm9tIExJUkMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gc2V0IEZSRVFBREogdG8gZXhlY3V0ZSBMSVJDIGNvbXBlbnNhdGlvbiBmb3IgUlRDIGNvdW50ZXIgbW9yZSBhY2N1cmF0ZSBhbmQgdGhlIGZvcm11bGEgYXMgYmVsb3csCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RkNSID0gMHg4MDAwMCAqICgzMjc2OCAvIExJUkMgZnJlcXVlbmN5KS4KKyAgICAgKiBAdmFyIFJUQ19UOjpUSU1FCisgICAgICogT2Zmc2V0OiAweDBDICBSVEMgVGltZSBMb2FkaW5nIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8U0VDICAgICAgIHwxLVNlYyBUaW1lIERpZ2l0ICgwfjkpCisgICAgICogfFs2OjRdICAgfFRFTlNFQyAgICB8MTAtU2VjIFRpbWUgRGlnaXQgKDB+NSkKKyAgICAgKiB8WzExOjhdICB8TUlOICAgICAgIHwxLU1pbiBUaW1lIERpZ2l0ICgwfjkpCisgICAgICogfFsxNDoxMl0gfFRFTk1JTiAgICB8MTAtTWluIFRpbWUgRGlnaXQgKDB+NSkKKyAgICAgKiB8WzE5OjE2XSB8SFIgICAgICAgIHwxLUhvdXIgVGltZSBEaWdpdCAoMH45KQorICAgICAqIHxbMjE6MjBdIHxURU5IUiAgICAgfDEwLUhvdXIgVGltZSBEaWdpdCAoMH4yKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gUlRDIHJ1bnMgYXMgMTItaG91ciB0aW1lIHNjYWxlIG1vZGUsIFJUQ19USU1FWzIxXSAodGhlIGhpZ2ggYml0IG9mIFRFTkhSWzE6MF0pIG1lYW5zIEFNL1BNIGluZGljYXRpb24gKElmIFJUQ19USU1FWzIxXSBpcyAxLCBpdCBpbmRpY2F0ZXMgUE0gdGltZSBtZXNzYWdlLikKKyAgICAgKiB8WzMwOjI0XSB8SFpDTlQgICAgIHxJbmRleCBvZiBzdWItc2Vjb25kIGNvdW50ZXIoMHgwMCB+MHg3RikKKyAgICAgKiBAdmFyIFJUQ19UOjpDQUwKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIFJUQyBDYWxlbmRhciBMb2FkaW5nIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8REFZICAgICAgIHwxLURheSBDYWxlbmRhciBEaWdpdCAoMH45KQorICAgICAqIHxbNTo0XSAgIHxURU5EQVkgICAgfDEwLURheSBDYWxlbmRhciBEaWdpdCAoMH4zKQorICAgICAqIHxbMTE6OF0gIHxNT04gICAgICAgfDEtTW9udGggQ2FsZW5kYXIgRGlnaXQgKDB+OSkKKyAgICAgKiB8WzEyXSAgICB8VEVOTU9OICAgIHwxMC1Nb250aCBDYWxlbmRhciBEaWdpdCAoMH4xKQorICAgICAqIHxbMTk6MTZdIHxZRUFSICAgICAgfDEtWWVhciBDYWxlbmRhciBEaWdpdCAoMH45KQorICAgICAqIHxbMjM6MjBdIHxURU5ZRUFSICAgfDEwLVllYXIgQ2FsZW5kYXIgRGlnaXQgKDB+OSkKKyAgICAgKiBAdmFyIFJUQ19UOjpDTEtGTVQKKyAgICAgKiBPZmZzZXQ6IDB4MTQgIFJUQyBUaW1lIFNjYWxlIFNlbGVjdGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfDI0SEVOICAgICB8MjQtaG91ciAvIDEyLWhvdXIgVGltZSBTY2FsZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZXMgdGhhdCBSVENfVElNRSBhbmQgUlRDX1RBTE0gYXJlIGluIDI0LWhvdXIgdGltZSBzY2FsZSBvciAxMi1ob3VyIHRpbWUgc2NhbGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gMTItaG91ciB0aW1lIHNjYWxlIHdpdGggQU0gYW5kIFBNIGluZGljYXRpb24gc2VsZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDI0LWhvdXIgdGltZSBzY2FsZSBzZWxlY3RlZC4KKyAgICAgKiB8WzhdICAgICB8SFpDTlRFTiAgIHxTdWItc2Vjb25kIENvdW50ZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBIWkNOVCBkaXNhYmxlZCBpbiBSVENfVElNRSBhbmQgUlRDX1RBTE0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEhaQ05UIGVuYWJsZWQgaW4gUlRDX1RJTUUgYW5kIFJUQ19UQUxNIC4KKyAgICAgKiBAdmFyIFJUQ19UOjpXRUVLREFZCisgICAgICogT2Zmc2V0OiAweDE4ICBSVEMgRGF5IG9mIHRoZSBXZWVrIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzI6MF0gICB8V0VFS0RBWSAgIHxEYXkgb2YgdGhlIFdlZWsgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBTdW5kYXkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gTW9uZGF5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFR1ZXNkYXkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gV2VkbmVzZGF5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFRodXJzZGF5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IEZyaWRheS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSBTYXR1cmRheS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBSZXNlcnZlZC4KKyAgICAgKiBAdmFyIFJUQ19UOjpUQUxNCisgICAgICogT2Zmc2V0OiAweDFDICBSVEMgVGltZSBBbGFybSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFNFQyAgICAgICB8MS1TZWMgVGltZSBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjkpCisgICAgICogfFs2OjRdICAgfFRFTlNFQyAgICB8MTAtU2VjIFRpbWUgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH41KQorICAgICAqIHxbMTE6OF0gIHxNSU4gICAgICAgfDEtTWluIFRpbWUgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH45KQorICAgICAqIHxbMTQ6MTJdIHxURU5NSU4gICAgfDEwLU1pbiBUaW1lIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+NSkKKyAgICAgKiB8WzE5OjE2XSB8SFIgICAgICAgIHwxLUhvdXIgVGltZSBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjkpCisgICAgICogfFsyMToyMF0gfFRFTkhSICAgICB8MTAtSG91ciBUaW1lIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+MikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFJUQyBydW5zIGFzIDEyLWhvdXIgdGltZSBzY2FsZSBtb2RlLCBSVENfVElNRVsyMV0gKHRoZSBoaWdoIGJpdCBvZiBURU5IUlsxOjBdKSBtZWFucyBBTS9QTSBpbmRpY2F0aW9uIChJZiBSVENfVElNRVsyMV0gaXMgMSwgaXQgaW5kaWNhdGVzIFBNIHRpbWUgbWVzc2FnZS4pCisgICAgICogfFszMDoyNF0gfEhaQ05UICAgICB8SW5kZXggb2Ygc3ViLXNlY29uZCBjb3VudGVyKDB4MDAgfjB4N0YpCisgICAgICogQHZhciBSVENfVDo6Q0FMTQorICAgICAqIE9mZnNldDogMHgyMCAgUlRDIENhbGVuZGFyIEFsYXJtIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8REFZICAgICAgIHwxLURheSBDYWxlbmRhciBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjkpCisgICAgICogfFs1OjRdICAgfFRFTkRBWSAgICB8MTAtRGF5IENhbGVuZGFyIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+MykKKyAgICAgKiB8WzExOjhdICB8TU9OICAgICAgIHwxLU1vbnRoIENhbGVuZGFyIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+OSkKKyAgICAgKiB8WzEyXSAgICB8VEVOTU9OICAgIHwxMC1Nb250aCBDYWxlbmRhciBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjEpCisgICAgICogfFsxOToxNl0gfFlFQVIgICAgICB8MS1ZZWFyIENhbGVuZGFyIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+OSkKKyAgICAgKiB8WzIzOjIwXSB8VEVOWUVBUiAgIHwxMC1ZZWFyIENhbGVuZGFyIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+OSkKKyAgICAgKiBAdmFyIFJUQ19UOjpMRUFQWUVBUgorICAgICAqIE9mZnNldDogMHgyNCAgUlRDIExlYXAgWWVhciBJbmRpY2F0b3IgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxMRUFQWUVBUiAgfExlYXAgWWVhciBJbmRpY2F0aW9uIFJlZ2lzdGVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoaXMgeWVhciBpcyBub3QgYSBsZWFwIHllYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoaXMgeWVhciBpcyBsZWFwIHllYXIuCisgICAgICogQHZhciBSVENfVDo6SU5URU4KKyAgICAgKiBPZmZzZXQ6IDB4MjggIFJUQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QUxNSUVOICAgIHxBbGFybSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCBBTE1JRU4gdG8gMSBjYW4gYWxzbyBlbmFibGUgY2hpcCB3YWtlLXVwIGZ1bmN0aW9uIHdoZW4gUlRDIGFsYXJtIGludGVycnVwdCBldmVudCBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJUQyBBbGFybSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJUQyBBbGFybSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8VElDS0lFTiAgIHxUaW1lIFRpY2sgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgVElDS0lFTiB0byAxIGNhbiBhbHNvIGVuYWJsZSBjaGlwIHdha2UtdXAgZnVuY3Rpb24gd2hlbiBSVEMgdGljayBpbnRlcnJ1cHQgZXZlbnQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSVEMgVGltZSBUaWNrIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlRDIFRpbWUgVGljayBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8VEFNUDBJRU4gIHxUYW1wZXIgMCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCBUQU1QMElFTiB0byAxIGNhbiBhbHNvIGVuYWJsZSBjaGlwIHdha2UtdXAgZnVuY3Rpb24gd2hlbiB0YW1wZXIgMCBpbnRlcnJ1cHQgZXZlbnQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgMCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciAwIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbOV0gICAgIHxUQU1QMUlFTiAgfFRhbXBlciAxIG9yIFBhaXIgMCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCBUQU1QMUlFTiB0byAxIGNhbiBhbHNvIGVuYWJsZSBjaGlwIHdha2UtdXAgZnVuY3Rpb24gd2hlbiB0YW1wZXIgMSBpbnRlcnJ1cHQgZXZlbnQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgMSBvciBQYWlyIDAgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgMSBvciBQYWlyIDAgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxMF0gICAgfFRBTVAySUVOICB8VGFtcGVyIDIgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgVEFNUDJJRU4gdG8gMSBjYW4gYWxzbyBlbmFibGUgY2hpcCB3YWtlLXVwIGZ1bmN0aW9uIHdoZW4gdGFtcGVyIDIgaW50ZXJydXB0IGV2ZW50IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDIgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgMiBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzExXSAgICB8VEFNUDNJRU4gIHxUYW1wZXIgMyBvciBQYWlyIDEgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgVEFNUDNJRU4gdG8gMSBjYW4gYWxzbyBlbmFibGUgY2hpcCB3YWtlLXVwIGZ1bmN0aW9uIHdoZW4gdGFtcGVyIDMgaW50ZXJydXB0IGV2ZW50IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDMgb3IgUGFpciAxIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDMgb3IgUGFpciAxIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTJdICAgIHxUQU1QNElFTiAgfFRhbXBlciA0IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IFRBTVA0SUVOIHRvIDEgY2FuIGFsc28gZW5hYmxlIGNoaXAgd2FrZS11cCBmdW5jdGlvbiB3aGVuIHRhbXBlciA0IGludGVycnVwdCBldmVudCBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhbXBlciA0IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxM10gICAgfFRBTVA1SUVOICB8VGFtcGVyIDUgb3IgUGFpciAyIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IFRBTVA1SUVOIHRvIDEgY2FuIGFsc28gZW5hYmxlIGNoaXAgd2FrZS11cCBmdW5jdGlvbiB3aGVuIHRhbXBlciA1IGludGVycnVwdCBldmVudCBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhbXBlciA1IG9yIFBhaXIgMiBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciA1IG9yIFBhaXIgMiBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzI0XSAgICB8Q0xLRklFTiAgIHxMWFQgQ2xvY2sgRnJlcXVlbmN5IE1vbml0b3IgRmFpbCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMWFQgRnJlcXVlbmN5IEZhaWwgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMWFQgRnJlcXVlbmN5IEZhaWwgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyNV0gICAgfENMS1NQSUVOICB8TFhUIENsb2NrIEZyZXF1ZW5jeSBNb25pdG9yIFN0b3AgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTFhUIEZyZXF1ZW5jeSBTdG9wIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTFhUIEZyZXF1ZW5jeSBTdG9wIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIEB2YXIgUlRDX1Q6OklOVFNUUworICAgICAqIE9mZnNldDogMHgyQyAgUlRDIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBTE1JRiAgICAgfFJUQyBBbGFybSBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBbGFybSBjb25kaXRpb24gaXMgbm90IG1hdGNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFsYXJtIGNvbmRpdGlvbiBpcyBtYXRjaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxXSAgICAgfFRJQ0tJRiAgICB8UlRDIFRpbWUgVGljayBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaWNrIGNvbmRpdGlvbiBkb2VzIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGljayBjb25kaXRpb24gb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzhdICAgICB8VEFNUDBJRiAgIHxUYW1wZXIgMCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBUYW1wZXIgMCBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciAwIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQ2xlYXIgYWxsIFRBUE14SUYgd2lsbCBjbGVhciBSVENfVEFNUFRJTUUgYW5kIFJUQ19UQU1QQ0FMIGF1dG9tYXRpY2FsbHkuCisgICAgICogfFs5XSAgICAgfFRBTVAxSUYgICB8VGFtcGVyIDEgb3IgUGFpciAwIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFRhbXBlciAxIG9yIFBhaXIgMCBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciAxIG9yIFBhaXIgMCBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IENsZWFyIGFsbCBUQVBNeElGIHdpbGwgY2xlYXIgUlRDX1RBTVBUSU1FIGFuZCBSVENfVEFNUENBTCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHxbMTBdICAgIHxUQU1QMklGICAgfFRhbXBlciAyIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFRhbXBlciAyIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDIgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBDbGVhciBhbGwgVEFQTXhJRiB3aWxsIGNsZWFyIFJUQ19UQU1QVElNRSBhbmQgUlRDX1RBTVBDQUwgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzExXSAgICB8VEFNUDNJRiAgIHxUYW1wZXIgMyBvciBQYWlyIDEgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gVGFtcGVyIDMgb3IgUGFpciAxIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDMgb3IgUGFpciAxIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQ2xlYXIgYWxsIFRBUE14SUYgd2lsbCBjbGVhciBSVENfVEFNUFRJTUUgYW5kIFJUQ19UQU1QQ0FMIGF1dG9tYXRpY2FsbHkuCisgICAgICogfFsxMl0gICAgfFRBTVA0SUYgICB8VGFtcGVyIDQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gVGFtcGVyIDQgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgNCBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IENsZWFyIGFsbCBUQVBNeElGIHdpbGwgY2xlYXIgUlRDX1RBTVBUSU1FIGFuZCBSVENfVEFNUENBTCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHxbMTNdICAgIHxUQU1QNUlGICAgfFRhbXBlciA1IG9yIFBhaXIgMiBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBUYW1wZXIgNSBvciBQYWlyIDIgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgNSBvciBQYWlyIDIgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBDbGVhciBhbGwgVEFQTXhJRiB3aWxsIGNsZWFyIFJUQ19UQU1QVElNRSBhbmQgUlRDX1RBTVBDQUwgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzI0XSAgICB8Q0xLRklGICAgIHxMWFQgQ2xvY2sgRnJlcXVlbmN5IE1vbml0b3IgRmFpbCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMWFQgZnJlcXVlbmN5IGlzIG5vcm1hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTFhUIGZyZXF1ZW5jeSBpcyBhYm5vcm1hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGUgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IExYVCBkZXRlY3RvciB3aWxsIGF1dG9tYXRpYyBkaXNhYmxlIHdoZW4gRmFpbC9TdG9wIEZsYWcgcmlzZSwgcmVzdW1lIGFmdGVyIEZhaWwvU3RvcCBGbGFnIGNsZWFyLgorICAgICAqIHxbMjVdICAgIHxDTEtTUElGICAgfExYVCBDbG9jayBGcmVxdWVuY3kgTW9uaXRvciBTdG9wIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExYVCBmcmVxdWVuY3kgaXMgbm9ybWFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMWFQgZnJlcXVlbmN5IGlzIGFsbW9zdCBzdG9wIC4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGJpdCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBMWFQgZGV0ZWN0b3Igd2lsbCBhdXRvbWF0aWMgZGlzYWJsZSB3aGVuIEZhaWwvU3RvcCBGbGFnIHJpc2UsIHJlc3VtZSBhZnRlciBGYWlsL1N0b3AgRmxhZyBjbGVhci4KKyAgICAgKiBAdmFyIFJUQ19UOjpUSUNLCisgICAgICogT2Zmc2V0OiAweDMwICBSVEMgVGltZSBUaWNrIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzI6MF0gICB8VElDSyAgICAgIHxUaW1lIFRpY2sgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSB1c2VkIHRvIHNlbGVjdCBSVEMgdGltZSB0aWNrIHBlcmlvZCBmb3IgUGVyaW9kaWMgVGltZSBUaWNrIEludGVycnVwdCByZXF1ZXN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IFRpbWUgdGljayBpcyAxIHNlY29uZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBUaW1lIHRpY2sgaXMgMS8yIHNlY29uZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBUaW1lIHRpY2sgaXMgMS80IHNlY29uZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBUaW1lIHRpY2sgaXMgMS84IHNlY29uZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBUaW1lIHRpY2sgaXMgMS8xNiBzZWNvbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gVGltZSB0aWNrIGlzIDEvMzIgc2Vjb25kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IFRpbWUgdGljayBpcyAxLzY0IHNlY29uZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBUaW1lIHRpY2sgaXMgMS8xMjggc2Vjb25kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgY2FuIGJlIHJlYWQgYmFjayBhZnRlciB0aGUgUlRDIHJlZ2lzdGVyIGFjY2VzcyBlbmFibGUgYml0IFJXRU5GIChSVENfUldFTlsxNl0pIGlzIGFjdGl2ZS4KKyAgICAgKiBAdmFyIFJUQ19UOjpUQU1TSworICAgICAqIE9mZnNldDogMHgzNCAgUlRDIFRpbWUgQWxhcm0gTWFzayBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfE1TRUMgICAgICB8TWFzayAxLVNlYyBUaW1lIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+OSkKKyAgICAgKiB8WzFdICAgICB8TVRFTlNFQyAgIHxNYXNrIDEwLVNlYyBUaW1lIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+NSkKKyAgICAgKiB8WzJdICAgICB8TU1JTiAgICAgIHxNYXNrIDEtTWluIFRpbWUgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH45KQorICAgICAqIHxbM10gICAgIHxNVEVOTUlOICAgfE1hc2sgMTAtTWluIFRpbWUgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH41KQorICAgICAqIHxbNF0gICAgIHxNSFIgICAgICAgfE1hc2sgMS1Ib3VyIFRpbWUgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH45KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IE1IUiBmdW5jdGlvbiBpcyBvbmx5IGZvciAyNC1ob3VyIHRpbWUgc2NhbGUgbW9kZS4KKyAgICAgKiB8WzVdICAgICB8TVRFTkhSICAgIHxNYXNrIDEwLUhvdXIgVGltZSBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjIpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogTVRFTkhSIGZ1bmN0aW9uIGlzIG9ubHkgZm9yIDI0LWhvdXIgdGltZSBzY2FsZSBtb2RlLgorICAgICAqIEB2YXIgUlRDX1Q6OkNBTVNLCisgICAgICogT2Zmc2V0OiAweDM4ICBSVEMgQ2FsZW5kYXIgQWxhcm0gTWFzayBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfE1EQVkgICAgICB8TWFzayAxLURheSBDYWxlbmRhciBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjkpCisgICAgICogfFsxXSAgICAgfE1URU5EQVkgICB8TWFzayAxMC1EYXkgQ2FsZW5kYXIgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH4zKQorICAgICAqIHxbMl0gICAgIHxNTU9OICAgICAgfE1hc2sgMS1Nb250aCBDYWxlbmRhciBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjkpCisgICAgICogfFszXSAgICAgfE1URU5NT04gICB8TWFzayAxMC1Nb250aCBDYWxlbmRhciBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjEpCisgICAgICogfFs0XSAgICAgfE1ZRUFSICAgICB8TWFzayAxLVllYXIgQ2FsZW5kYXIgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH45KQorICAgICAqIHxbNV0gICAgIHxNVEVOWUVBUiAgfE1hc2sgMTAtWWVhciBDYWxlbmRhciBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjkpCisgICAgICogQHZhciBSVENfVDo6U1BSQ1RMCisgICAgICogT2Zmc2V0OiAweDNDICBSVEMgU3BhcmUgRnVuY3Rpb25hbCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzJdICAgICB8U1BSUldFTiAgIHxTcGFyZSBSZWdpc3RlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNwYXJlIHJlZ2lzdGVyIGlzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTcGFyZSByZWdpc3RlciBpcyBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gc3BhcmUgcmVnaXN0ZXIgaXMgZGlzYWJsZWQsIFJUQ19TUFIwIH4gUlRDX1NQUjE5IGNhbm5vdCBiZSBhY2Nlc3NlZC4KKyAgICAgKiB8WzVdICAgICB8U1BSQ1NUUyAgIHxTUFIgQ2xlYXIgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyBpZiB0aGUgUlRDX1NQUjAgflJUQ19TUFIxOSBjb250ZW50IGlzIGNsZWFyZWQgd2hlbiBzcGVjaWZ5IHNub29wIGV2ZW50IGlzIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTcGFyZSByZWdpc3RlciBjb250ZW50IGlzIG5vdCBjbGVhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTcGFyZSByZWdpc3RlciBjb250ZW50IGlzIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGVzIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQga2VlcCAxIHdoZW4gUlRDX0lOVFNUU1sxMzo4XSBvciBSVENfSU5UU1RTWzI1OjI0XSBhcmUgbm90IGVxdWFsIHplcm8uCisgICAgICogfFsxNl0gICAgfExYVEZDTFIgICB8TFhUIENsb2NrIE1vbml0b3IgRmFpbC9TdG9wIHRvIENsZWFyIFNwYXJlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTFhUIG1vbml0b3IgRmFpbC9TdG9wIHRvIGNsZWFyIFNwYXJlIHJlZ2lzdGVyIGNvbnRlbnQgaXMgRGlzYWJsZWQuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMWFQgbW9uaXRvciBGYWlsL1N0b3AgdG8gY2xlYXIgU3BhcmUgcmVnaXN0ZXIgY29udGVudCBpcyBFbmFibGVkLgorICAgICAqIEB2YXIgUlRDX1Q6OlNQUlsyMF0KKyAgICAgKiBPZmZzZXQ6IDB4NDAgfiAweDhDICBSVEMgU3BhcmUgUmVnaXN0ZXIgMCB+IDE5CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8U1BBUkUgICAgIHxTcGFyZSBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCB0byBzdG9yZSBiYWNrLXVwIGluZm9ybWF0aW9uIGRlZmluZWQgYnkgdXNlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIHdpbGwgYmUgY2xlYXJlZCBieSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5IG9uY2UgYSB0YW1wZXIgcGluIGV2ZW50IGlzIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJlZm9yZSBzdG9yaW5nIGJhY2stdXAgaW5mb3JtYXRpb24gaW4gdG8gUlRDX1NQUnggcmVnaXN0ZXIsIHVzZXIgc2hvdWxkIHdyaXRlIDB4QTk2NSB0byBSVENfUldFTlsxNTowXSB0byBtYWtlIHN1cmUgcmVnaXN0ZXIgcmVhZC93cml0ZSBlbmFibGUgYml0IFJFV05GIChSVENfUldFTlsxNl0pIGlzIGVuYWJsZWQuCisgICAgICogQHZhciBSVENfVDo6TFhUQ1RMCisgICAgICogT2Zmc2V0OiAweDEwMCAgUlRDIDMyLjc2OCBrSHogT3NjaWxsYXRvciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8TElSQzMyS0VOIHxMSVJDIDMySyBTb3VyY2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMSVJDMzJLIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMSVJDMzJLLkVuYWJsZWQuCisgICAgICogfFszOjFdICAgfEdBSU4gICAgICB8T3NjaWxsYXRvciBHYWluIE9wdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHNlbGVjdCBvc2NpbGxhdG9yIGdhaW4gYWNjb3JkaW5nIHRvIGNyeXN0YWwgZXh0ZXJuYWwgbG9hZGluZyBhbmQgb3BlcmF0aW5nIHRlbXBlcmF0dXJlIHJhbmdlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGxhcmdlciBnYWluIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gc3Ryb25nZXIgZHJpdmluZyBjYXBhYmlsaXR5IGFuZCBoaWdoZXIgcG93ZXIgY29uc3VtcHRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gTDAgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBMMSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IEwyIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gTDMgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBMNCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IEw1IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gTDYgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBMNyBtb2RlIChEZWZhdWx0KS4KKyAgICAgKiB8WzddICAgICB8QzMyS1MgICAgIHxDbG9jayAzMksgU291cmNlIFNlbGVjdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJuYWwgMzJLIGNsb2NrIGlzIGZyb20gMzJLIGNyeXN0YWwgLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcm5hbCAzMksgY2xvY2sgaXMgZnJvbSBMSVJDMzJLLgorICAgICAqIEB2YXIgUlRDX1Q6OkdQSU9DVEwwCisgICAgICogT2Zmc2V0OiAweDEwNCAgUlRDIEdQSU8gQ29udHJvbCAwIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8T1BNT0RFMCAgIHxJTyBPcGVyYXRpb24gTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUEYuMCBpcyBpbnB1dCBvbmx5IG1vZGUsIHdpdGhvdXQgcHVsbC11cCByZXNpc3Rvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFBGLjAgaXMgb3V0cHV0IHB1c2ggcHVsbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUEYuMCBpcyBvcGVuIGRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQRi4wIGlzIHF1YXNpLWJpZGlyZWN0aW9uYWwgbW9kZSB3aXRoIGludGVybmFsIHB1bGwgdXAuCisgICAgICogfFsyXSAgICAgfERPVVQwICAgICB8SU8gT3V0cHV0IERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuMCBvdXRwdXQgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRi4wIG91dHB1dCBoaWdoLgorICAgICAqIHxbM10gICAgIHxDVExTRUwwICAgfElPIFBpbiBTdGF0ZSBCYWNrdXAgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBsb3cgc3BlZWQgMzIga0h6IG9zY2lsbGF0b3IgaXMgZGlzYWJsZWQsIFBGLjAgcGluIChYMzJLTyBwaW4pIGNhbiBiZSB1c2VkIGFzIEdQSU8gZnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBwcm9ncmFtIENUTFNFTDAgdG8gZGVjaWRlIFBGLjAgSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgc3lzdGVtIHBvd2VyIGRvbWFpbiBHUElPIG1vZHVsZSBvciBWQkFUIHBvd2VyIGRvbWFpbiBSVENfR1BJT0NUTDAgY29udHJvbCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuMCBwaW4gSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgR1BJTyBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SGFyZHdhcmUgYXV0byBiZWNvbWVzIENUTFNFTDAgPSAxIHdoZW4gc3lzdGVtIHBvd2VyIGlzIHR1cm5lZCBvZmYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBGLjAgcGluIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IFZCQVQgcG93ZXIgZG9tYWluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBGLjAgcGluIGZ1bmN0aW9uIGFuZCBJL08gc3RhdHVzIGFyZSBjb250cm9sbGVkIGJ5IE9QTU9ERTBbMTowXSBhbmQgRE9VVDAgYWZ0ZXIgQ1RMU0VMMCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBDVExTRUwwIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYnkgaGFyZHdhcmUgdG8gMSB3aGVuIHN5c3RlbSBwb3dlciBpcyBvZmYgYW5kIFJUQ19JTklUWzBdIChSVEMgQWN0aXZlIFN0YXR1cykgaXMgMS4KKyAgICAgKiB8WzU6NF0gICB8UFVTRUwwICAgIHxJTyBQdWxsLXVwIGFuZCBQdWxsLWRvd24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERldGVybWluZSBQRi4wIEkvTyBwdWxsLXVwIG9yIHB1bGwtZG93bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBGLjAgcHVsbC11cCBhbmQgcHVsbC11cCBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUEYuMCBwdWxsLWRvd24gZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUEYuMCBwdWxsLXVwIGVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBGLjAgcHVsbC11cCBhbmQgcHVsbC11cCBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzaWNhbGx5LCB0aGUgcHVsbC11cCBjb250cm9sIGFuZCBwdWxsLWRvd24gY29udHJvbCBoYXMgZm9sbG93aW5nIGJlaGF2aW9yIGxpbWl0YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtdXAgY29udHJvbCByZWdpc3RlciBvbmx5IHZhbGlkIHdoZW4gT1BNT0RFMCBzZXQgYXMgaW5wdXQgdHJpLXN0YXRlIGFuZCBvcGVuLWRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtZG93biBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBPUE1PREUwIHNldCBhcyBpbnB1dCB0cmktc3RhdGUgbW9kZS4KKyAgICAgKiB8Wzk6OF0gICB8T1BNT0RFMSAgIHxJTyBPcGVyYXRpb24gTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUEYuMSBpcyBpbnB1dCBvbmx5IG1vZGUsIHdpdGhvdXQgcHVsbC11cCByZXNpc3Rvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFBGLjEgaXMgb3V0cHV0IHB1c2ggcHVsbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUEYuMSBpcyBvcGVuIGRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQRi4xIGlzIHF1YXNpLWJpZGlyZWN0aW9uYWwgbW9kZSB3aXRoIGludGVybmFsIHB1bGwgdXAuCisgICAgICogfFsxMF0gICAgfERPVVQxICAgICB8SU8gT3V0cHV0IERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuMSBvdXRwdXQgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRi4xIG91dHB1dCBoaWdoLgorICAgICAqIHxbMTFdICAgIHxDVExTRUwxICAgfElPIFBpbiBTdGF0ZSBCYWNrdXAgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBsb3cgc3BlZWQgMzIga0h6IG9zY2lsbGF0b3IgaXMgZGlzYWJsZWQsIFBGLjEgcGluIChYMzJLSSBwaW4pIGNhbiBiZSB1c2VkIGFzIEdQSU8gZnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBwcm9ncmFtIENUTFNFTDEgdG8gZGVjaWRlIFBGLjEgSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgc3lzdGVtIHBvd2VyIGRvbWFpbiBHUElPIG1vZHVsZSBvciBWQkFUIHBvd2VyIGRvbWFpbiBSVENfR1BJT0NUTDAgY29udHJvbCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuMSBwaW4gSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgR1BJTyBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SGFyZHdhcmUgYXV0byBiZWNvbWVzIENUTFNFTDEgPSAxIHdoZW4gc3lzdGVtIHBvd2VyIGlzIHR1cm5lZCBvZmYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBGLjEgcGluIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IFZCQVQgcG93ZXIgZG9tYWluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBGLjEgcGluIGZ1bmN0aW9uIGFuZCBJL08gc3RhdHVzIGFyZSBjb250cm9sbGVkIGJ5IE9QTU9ERTFbMTowXSBhbmQgRE9VVDEgYWZ0ZXIgQ1RMU0VMMSBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBDVExTRUwxIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYnkgaGFyZHdhcmUgdG8gMSB3aGVuIHN5c3RlbSBwb3dlciBpcyBvZmYgYW5kIFJUQ19JTklUWzBdIChSVEMgQWN0aXZlIFN0YXR1cykgaXMgMS4KKyAgICAgKiB8WzEzOjEyXSB8UFVTRUwxICAgIHxJTyBQdWxsLXVwIGFuZCBQdWxsLWRvd24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERldGVybWluZSBQRi4xIEkvTyBwdWxsLXVwIG9yIHB1bGwtZG93bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBGLjEgcHVsbC11cCBhbmQgcHVsbC11cCBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUEYuMSBwdWxsLWRvd24gZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUEYuMSBwdWxsLXVwIGVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBGLjEgcHVsbC11cCBhbmQgcHVsbC11cCBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzaWNhbGx5LCB0aGUgcHVsbC11cCBjb250cm9sIGFuZCBwdWxsLWRvd24gY29udHJvbCBoYXMgZm9sbG93aW5nIGJlaGF2aW9yIGxpbWl0YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtdXAgY29udHJvbCByZWdpc3RlciBvbmx5IHZhbGlkIHdoZW4gT1BNT0RFMSBzZXQgYXMgaW5wdXQgdHJpLXN0YXRlIGFuZCBvcGVuLWRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtZG93biBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBPUE1PREUxIHNldCBhcyBpbnB1dCB0cmktc3RhdGUgbW9kZS4KKyAgICAgKiB8WzE3OjE2XSB8T1BNT0RFMiAgIHxJTyBPcGVyYXRpb24gTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUEYuMiBpcyBpbnB1dCBvbmx5IG1vZGUsIHdpdGhvdXQgcHVsbC11cCByZXNpc3Rvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFBGLjIgaXMgb3V0cHV0IHB1c2ggcHVsbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUEYuMiBpcyBvcGVuIGRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQRi4yIGlzIHF1YXNpLWJpZGlyZWN0aW9uYWwgbW9kZSB3aXRoIGludGVybmFsIHB1bGwgdXAuCisgICAgICogfFsxOF0gICAgfERPVVQyICAgICB8SU8gT3V0cHV0IERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuMiBvdXRwdXQgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRi4yIG91dHB1dCBoaWdoLgorICAgICAqIHxbMTldICAgIHxDVExTRUwyICAgfElPIFBpbiBTdGF0ZSBCYWNrdXAgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBUQU1QMEVOIGlzIGRpc2FibGVkLCBQRi4yIHBpbiAoVEFNUEVSMCBwaW4pIGNhbiBiZSB1c2VkIGFzIEdQSU8gZnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBwcm9ncmFtIENUTFNFTDIgdG8gZGVjaWRlIFBGLjIgSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgc3lzdGVtIHBvd2VyIGRvbWFpbiBHUElPIG1vZHVsZSBvciBWQkFUIHBvd2VyIGRvbWFpbiBSVENfR1BJT0NUTDAgY29udHJvbCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuMiBwaW4gSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgR1BJTyBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SGFyZHdhcmUgYXV0byBiZWNvbWVzIENUTFNFTDIgPSAxIHdoZW4gc3lzdGVtIHBvd2VyIGlzIHR1cm5lZCBvZmYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBGLjIgcGluIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IFZCQVQgcG93ZXIgZG9tYWluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBGLjIgcGluIGZ1bmN0aW9uIGFuZCBJL08gc3RhdHVzIGFyZSBjb250cm9sbGVkIGJ5IE9QTU9ERTJbMTowXSBhbmQgRE9VVDIgYWZ0ZXIgQ1RMU0VMMiBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBDVExTRUwyIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYnkgaGFyZHdhcmUgdG8gMSB3aGVuIHN5c3RlbSBwb3dlciBpcyBvZmYgYW5kIFJUQ19JTklUWzBdIChSVEMgQWN0aXZlIFN0YXR1cykgaXMgMS4KKyAgICAgKiB8WzIxOjIwXSB8UFVTRUwyICAgIHxJTyBQdWxsLXVwIGFuZCBQdWxsLWRvd24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERldGVybWluZSBQRi4yIEkvTyBwdWxsLXVwIG9yIHB1bGwtZG93bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBGLjIgcHVsbC11cCBhbmQgcHVsbC11cCBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUEYuMiBwdWxsLWRvd24gZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUEYuMiBwdWxsLXVwIGVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBGLjIgcHVsbC11cCBhbmQgcHVsbC11cCBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2ljYWxseSwgdGhlIHB1bGwtdXAgY29udHJvbCBhbmQgcHVsbC1kb3duIGNvbnRyb2wgaGFzIGZvbGxvd2luZyBiZWhhdmlvciBsaW1pdGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbmRlcGVuZGVudCBwdWxsLXVwIGNvbnRyb2wgcmVnaXN0ZXIgb25seSB2YWxpZCB3aGVuIE9QTU9ERTIgc2V0IGFzIGlucHV0IHRyaS1zdGF0ZSBhbmQgb3Blbi1kcmFpbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbmRlcGVuZGVudCBwdWxsLWRvd24gY29udHJvbCByZWdpc3RlciBvbmx5IHZhbGlkIHdoZW4gT1BNT0RFMiBzZXQgYXMgaW5wdXQgdHJpLXN0YXRlIG1vZGUuCisgICAgICogfFsyNToyNF0gfE9QTU9ERTMgICB8SU8gT3BlcmF0aW9uIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBGLjcgaXMgaW5wdXQgb25seSBtb2RlLCB3aXRob3V0IHB1bGwtdXAgcmVzaXN0b3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi43IGlzIG91dHB1dCBwdXNoIHB1bGwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBGLjcgaXMgb3BlbiBkcmFpbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUEYuNyBpcyBxdWFzaS1iaWRpcmVjdGlvbmFsIG1vZGUgd2l0aCB3aXRoIGludGVybmFsIHB1bGwgdXAuCisgICAgICogfFsyNl0gICAgfERPVVQzICAgICB8SU8gT3V0cHV0IERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuNyBvdXRwdXQgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRi43IG91dHB1dCBoaWdoLgorICAgICAqIHxbMjddICAgIHxDVExTRUwzICAgfElPIFBpbiBTdGF0ZSBCYWNrdXAgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBUQU1QMUVOIGlzIGRpc2FibGVkLCBQRi43IHBpbiAoVEFNUEVSMSBwaW4pIGNhbiBiZSB1c2VkIGFzIEdQSU8gZnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBwcm9ncmFtIENUTFNFTDMgdG8gZGVjaWRlIFBGLjcgSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgc3lzdGVtIHBvd2VyIGRvbWFpbiBHUElPIG1vZHVsZSBvciBWQkFUIHBvd2VyIGRvbWFpbiBSVENfR1BJT0NUTDAgY29udHJvbCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuNyBwaW4gSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgR1BJTyBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SGFyZHdhcmUgYXV0byBiZWNvbWVzIENUTFNFTDMgPSAxIHdoZW4gc3lzdGVtIHBvd2VyIGlzIHR1cm5lZCBvZmYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBGLjcgcGluIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IFZCQVQgcG93ZXIgZG9tYWluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBGLjcgcGluIGZ1bmN0aW9uIGFuZCBJL08gc3RhdHVzIGFyZSBjb250cm9sbGVkIGJ5IE9QTU9ERTNbMTowXSBhbmQgRE9VVDMgYWZ0ZXIgQ1RMU0VMMyBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBDVExTRUwzIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYnkgaGFyZHdhcmUgdG8gMSB3aGVuIHN5c3RlbSBwb3dlciBpcyBvZmYgYW5kIFJUQ19JTklUWzBdIChSVEMgQWN0aXZlIFN0YXR1cykgaXMgMS4KKyAgICAgKiB8WzI5OjI4XSB8UFVTRUwzICAgIHxJTyBQdWxsLXVwIGFuZCBQdWxsLWRvd24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERldGVybWluZSBQRi43IEkvTyBwdWxsLXVwIG9yIHB1bGwtZG93bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBGLjcgcHVsbC11cCBhbmQgcHVsbC1kb3duIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi43IHB1bGwtZG93biBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi43IHB1bGwtdXAgZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUEYuNyBwdWxsLXVwIGFuZCBwdWxsLWRvd24gZGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2ljYWxseSwgdGhlIHB1bGwtdXAgY29udHJvbCBhbmQgcHVsbC1kb3duIGNvbnRyb2wgaGFzIGZvbGxvd2luZyBiZWhhdmlvciBsaW1pdGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbmRlcGVuZGVudCBwdWxsLXVwIGNvbnRyb2wgcmVnaXN0ZXIgb25seSB2YWxpZCB3aGVuIE9QTU9ERTMgc2V0IGFzIGlucHV0IHRyaS1zdGF0ZSBhbmQgb3Blbi1kcmFpbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbmRlcGVuZGVudCBwdWxsLWRvd24gY29udHJvbCByZWdpc3RlciBvbmx5IHZhbGlkIHdoZW4gT1BNT0RFMyBzZXQgYXMgaW5wdXQgdHJpLXN0YXRlIG1vZGUuCisgICAgICogQHZhciBSVENfVDo6R1BJT0NUTDEKKyAgICAgKiBPZmZzZXQ6IDB4MTA4ICBSVEMgR1BJTyBDb250cm9sIDEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxPUE1PREU0ICAgfElPIE9wZXJhdGlvbiBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQRi44IGlzIGlucHV0IG9ubHkgbW9kZSwgd2l0aG91dCBwdWxsLXVwIHJlc2lzdG9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUEYuOCBpcyBvdXRwdXQgcHVzaCBwdWxsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi44IGlzIG9wZW4gZHJhaW4gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBGLjggaXMgcXVhc2ktYmlkaXJlY3Rpb25hbCBtb2RlIHdpdGggd2l0aCBpbnRlcm5hbCBwdWxsIHVwLgorICAgICAqIHxbMl0gICAgIHxET1VUNCAgICAgfElPIE91dHB1dCBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBGLjggb3V0cHV0IGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEYuOCBvdXRwdXQgaGlnaC4KKyAgICAgKiB8WzNdICAgICB8Q1RMU0VMNCAgIHxJTyBQaW4gU3RhdGUgQmFja3VwIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gVEFNUDJFTiBpcyBkaXNhYmxlZCwgUEYuOCBwaW4gKFRBTVBFUjIgcGluKSBjYW4gYmUgdXNlZCBhcyBHUElPIGZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gcHJvZ3JhbSBDVExTRUw0IHRvIGRlY2lkZSBQRi44IEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IHN5c3RlbSBwb3dlciBkb21haW4gR1BJTyBtb2R1bGUgb3IgVkJBVCBwb3dlciBkb21haW4gUlRDX0dQSU9DVEwxIGNvbnRyb2wgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBGLjggcGluIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IEdQSU8gbW9kdWxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEhhcmR3YXJlIGF1dG8gYmVjb21lcyBDVExTRUw0ID0gMSB3aGVuIHN5c3RlbSBwb3dlciBpcyB0dXJuZWQgb2ZmLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRi44IHBpbiBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBWQkFUIHBvd2VyIGRvbWFpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQRi44IHBpbiBmdW5jdGlvbiBhbmQgSS9PIHN0YXR1cyBhcmUgY29udHJvbGxlZCBieSBPUE1PREU0WzE6MF0gYW5kIERPVVQ0IGFmdGVyIENUTFNFTDQgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQ1RMU0VMNCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IGJ5IGhhcmR3YXJlIHRvIDEgd2hlbiBzeXN0ZW0gcG93ZXIgaXMgb2ZmIGFuZCBSVENfSU5JVFswXSAoUlRDIEFjdGl2ZSBTdGF0dXMpIGlzIDEuCisgICAgICogfFs1OjRdICAgfFBVU0VMNCAgICB8SU8gUHVsbC11cCBhbmQgUHVsbC1kb3duIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEZXRlcm1pbmUgUEYuOCBJL08gcHVsbC11cCBvciBwdWxsLWRvd24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQRi44IHB1bGwtdXAgYW5kIHB1bGwtZG93biBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUEYuOCBwdWxsLWRvd24gZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUEYuOCBwdWxsLXVwIGVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBGLjggcHVsbC11cCBhbmQgcHVsbC1kb3duIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNpY2FsbHksIHRoZSBwdWxsLXVwIGNvbnRyb2wgYW5kIHB1bGwtZG93biBjb250cm9sIGhhcyBmb2xsb3dpbmcgYmVoYXZpb3IgbGltaXRhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5kZXBlbmRlbnQgcHVsbC11cCBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBPUE1PREU0IHNldCBhcyBpbnB1dCB0cmktc3RhdGUgYW5kIG9wZW4tZHJhaW4gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5kZXBlbmRlbnQgcHVsbC1kb3duIGNvbnRyb2wgcmVnaXN0ZXIgb25seSB2YWxpZCB3aGVuIE9QTU9ERTQgc2V0IGFzIGlucHV0IHRyaS1zdGF0ZSBtb2RlLgorICAgICAqIHxbOTo4XSAgIHxPUE1PREU1ICAgfElPIE9wZXJhdGlvbiBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQRi45IGlzIGlucHV0IG9ubHkgbW9kZSwgd2l0aG91dCBwdWxsLXVwIHJlc2lzdG9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUEYuOSBpcyBvdXRwdXQgcHVzaCBwdWxsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi45IGlzIG9wZW4gZHJhaW4gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBGLjkgaXMgcXVhc2ktYmlkaXJlY3Rpb25hbCBtb2RlIHdpdGggd2l0aCBpbnRlcm5hbCBwdWxsIHVwLgorICAgICAqIHxbMTBdICAgIHxET1VUNSAgICAgfElPIE91dHB1dCBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBGLjkgb3V0cHV0IGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEYuOSBvdXRwdXQgaGlnaC4KKyAgICAgKiB8WzExXSAgICB8Q1RMU0VMNSAgIHxJTyBQaW4gU3RhdGUgQmFja3VwIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gVEFNUDNFTiBpcyBkaXNhYmxlZCwgUEYuOSBwaW4gKFRBTVBFUjMgcGluKSBjYW4gYmUgdXNlZCBhcyBHUElPIGZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gcHJvZ3JhbSBDVExTRUw1IHRvIGRlY2lkZSBQRi45IEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IHN5c3RlbSBwb3dlciBkb21haW4gR1BJTyBtb2R1bGUgb3IgVkJBVCBwb3dlciBkb21haW4gUlRDX0dQSU9DVEwxIGNvbnRyb2wgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBGLjkgcGluIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IEdQSU8gbW9kdWxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEhhcmR3YXJlIGF1dG8gYmVjb21lcyBDVExTRUw1ID0gMSB3aGVuIHN5c3RlbSBwb3dlciBpcyB0dXJuZWQgb2ZmLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRi45IHBpbiBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBWQkFUIHBvd2VyIGRvbWFpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQRi45IHBpbiBmdW5jdGlvbiBhbmQgSS9PIHN0YXR1cyBhcmUgY29udHJvbGxlZCBieSBPUE1PREU1WzE6MF0gYW5kIERPVVQ1IGFmdGVyIENUTFNFTDUgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQ1RMU0VMNSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IGJ5IGhhcmR3YXJlIHRvIDEgd2hlbiBzeXN0ZW0gcG93ZXIgaXMgb2ZmIGFuZCBSVENfSU5JVFswXSAoUlRDIEFjdGl2ZSBTdGF0dXMpIGlzIDEuCisgICAgICogfFsxMzoxMl0gfFBVU0VMNSAgICB8SU8gUHVsbC11cCBhbmQgUHVsbC1kb3duIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEZXRlcm1pbmUgUEYuOSBJL08gcHVsbC11cCBvciBwdWxsLWRvd24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQRi45IHB1bGwtdXAgYW5kIHB1bGwtZG93biBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUEYuOSBwdWxsLWRvd24gZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUEYuOSBwdWxsLXVwIGVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBGLjkgcHVsbC11cCBhbmQgcHVsbC1kb3duIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Lk5vdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzaWNhbGx5LCB0aGUgcHVsbC11cCBjb250cm9sIGFuZCBwdWxsLWRvd24gY29udHJvbCBoYXMgZm9sbG93aW5nIGJlaGF2aW9yIGxpbWl0YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtdXAgY29udHJvbCByZWdpc3RlciBvbmx5IHZhbGlkIHdoZW4gT1BNT0RFNSBzZXQgYXMgaW5wdXQgdHJpLXN0YXRlIGFuZCBvcGVuLWRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtZG93biBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBPUE1PREU1IHNldCBhcyBpbnB1dCB0cmktc3RhdGUgbW9kZS4KKyAgICAgKiB8WzE3OjE2XSB8T1BNT0RFNiAgIHxJTyBPcGVyYXRpb24gTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUEYuMTAgaXMgaW5wdXQgb25seSBtb2RlLCB3aXRob3V0IHB1bGwtdXAgcmVzaXN0b3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi4xMCBpcyBvdXRwdXQgcHVzaCBwdWxsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi4xMCBpcyBvcGVuIGRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQRi4xMCBpcyBxdWFzaS1iaWRpcmVjdGlvbmFsIG1vZGUgd2l0aCB3aXRoIGludGVybmFsIHB1bGwgdXAuCisgICAgICogfFsxOF0gICAgfERPVVQ2ICAgICB8SU8gT3V0cHV0IERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuMTAgb3V0cHV0IGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEYuMTAgb3V0cHV0IGhpZ2guCisgICAgICogfFsxOV0gICAgfENUTFNFTDYgICB8SU8gUGluIFN0YXRlIEJhY2t1cCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFRBTVA0RU4gaXMgZGlzYWJsZWQsIFBGLjEwIHBpbiAoVEFNUEVSNCBwaW4pIGNhbiBiZSB1c2VkIGFzIEdQSU8gZnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBwcm9ncmFtIENUTFNFTDYgdG8gZGVjaWRlIFBGLjEwIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IHN5c3RlbSBwb3dlciBkb21haW4gR1BJTyBtb2R1bGUgb3IgVkJBVCBwb3dlciBkb21haW4gUlRDX0dQSU9DVEwxIGNvbnRyb2wgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBGLjEwIHBpbiBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBHUElPIG1vZHVsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxIYXJkd2FyZSBhdXRvIGJlY29tZXMgQ1RMU0VMNiA9IDEgd2hlbiBzeXN0ZW0gcG93ZXIgaXMgdHVybmVkIG9mZi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEYuMTAgcGluIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IFZCQVQgcG93ZXIgZG9tYWluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBGLjEwIHBpbiBmdW5jdGlvbiBhbmQgSS9PIHN0YXR1cyBhcmUgY29udHJvbGxlZCBieSBPUE1PREU2WzE6MF0gYW5kIERPVVQ2IGFmdGVyIENUTFNFTDYgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQ1RMU0VMNiB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IGJ5IGhhcmR3YXJlIHRvIDEgd2hlbiBzeXN0ZW0gcG93ZXIgaXMgb2ZmIGFuZCBSVENfSU5JVFswXSAoUlRDIEFjdGl2ZSBTdGF0dXMpIGlzIDEuCisgICAgICogfFsyMToyMF0gfFBVU0VMNiAgICB8SU8gUHVsbC11cCBhbmQgUHVsbC1kb3duIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEZXRlcm1pbmUgUEYuMTAgSS9PIHB1bGwtdXAgb3IgcHVsbC1kb3duLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUEYuMTAgcHVsbC11cCBhbmQgcHVsbC1kb3duIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi4xMCBwdWxsLWRvd24gZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUEYuMTAgcHVsbC11cCBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQRi4xMCBwdWxsLXVwIGFuZCBwdWxsLWRvd24gZGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2ljYWxseSwgdGhlIHB1bGwtdXAgY29udHJvbCBhbmQgcHVsbC1kb3duIGNvbnRyb2wgaGFzIGZvbGxvd2luZyBiZWhhdmlvciBsaW1pdGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbmRlcGVuZGVudCBwdWxsLXVwIGNvbnRyb2wgcmVnaXN0ZXIgb25seSB2YWxpZCB3aGVuIE9QTU9ERTYgc2V0IGFzIGlucHV0IHRyaS1zdGF0ZSBhbmQgb3Blbi1kcmFpbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbmRlcGVuZGVudCBwdWxsLWRvd24gY29udHJvbCByZWdpc3RlciBvbmx5IHZhbGlkIHdoZW4gT1BNT0RFNiBzZXQgYXMgaW5wdXQgdHJpLXN0YXRlIG1vZGUuCisgICAgICogfFsyNToyNF0gfE9QTU9ERTcgICB8SU8gT3BlcmF0aW9uIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBGLjExIGlzIGlucHV0IG9ubHkgbW9kZSwgd2l0aG91dCBwdWxsLXVwIHJlc2lzdG9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUEYuMTEgaXMgb3V0cHV0IHB1c2ggcHVsbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUEYuMTEgaXMgb3BlbiBkcmFpbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUEYuMTEgaXMgcXVhc2ktYmlkaXJlY3Rpb25hbCBtb2RlIHdpdGggd2l0aCBpbnRlcm5hbCBwdWxsIHVwLgorICAgICAqIHxbMjZdICAgIHxET1VUNyAgICAgfElPIE91dHB1dCBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBGLjExIG91dHB1dCBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBGLjExIG91dHB1dCBoaWdoLgorICAgICAqIHxbMjddICAgIHxDVExTRUw3ICAgfElPIFBpbiBTdGF0ZSBCYWNrdXAgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBUQU1QNUVOIGlzIGRpc2FibGVkLCBQRi4xMSBwaW4gKFRBTVBFUjUgcGluKSBjYW4gYmUgdXNlZCBhcyBHUElPIGZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gcHJvZ3JhbSBDVExTRUw3IHRvIGRlY2lkZSBQRi4xMSBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBzeXN0ZW0gcG93ZXIgZG9tYWluIEdQSU8gbW9kdWxlIG9yIFZCQVQgcG93ZXIgZG9tYWluIFJUQ19HUElPQ1RMMSBjb250cm9sIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRi4xMSBwaW4gSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgR1BJTyBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SGFyZHdhcmUgYXV0byBiZWNvbWVzIENUTFNFTDcgPSAxIHdoZW4gc3lzdGVtIHBvd2VyIGlzIHR1cm5lZCBvZmYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBGLjExIHBpbiBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBWQkFUIHBvd2VyIGRvbWFpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQRi4xMSBwaW4gZnVuY3Rpb24gYW5kIEkvTyBzdGF0dXMgYXJlIGNvbnRyb2xsZWQgYnkgT1BNT0RFN1sxOjBdIGFuZCBET1VUNyBhZnRlciBDVExTRUw3IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IENUTFNFTDcgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCBieSBoYXJkd2FyZSB0byAxIHdoZW4gc3lzdGVtIHBvd2VyIGlzIG9mZiBhbmQgUlRDX0lOSVRbMF0gKFJUQyBBY3RpdmUgU3RhdHVzKSBpcyAxLgorICAgICAqIHxbMjk6MjhdIHxQVVNFTDcgICAgfElPIFB1bGwtdXAgYW5kIFB1bGwtZG93biBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGV0ZXJtaW5lIFBGLjExIEkvTyBwdWxsLXVwIG9yIHB1bGwtZG93bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBGLjExIHB1bGwtdXAgYW5kIHB1bGwtZG93biBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUEYuMTEgcHVsbC1kb3duIGVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBGLjExIHB1bGwtdXAgZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUEYuMTEgcHVsbC11cCBhbmQgcHVsbC1kb3duIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNpY2FsbHksIHRoZSBwdWxsLXVwIGNvbnRyb2wgYW5kIHB1bGwtZG93biBjb250cm9sIGhhcyBmb2xsb3dpbmcgYmVoYXZpb3IgbGltaXRhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5kZXBlbmRlbnQgcHVsbC11cCBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBPUE1PREU3IHNldCBhcyBpbnB1dCB0cmktc3RhdGUgYW5kIG9wZW4tZHJhaW4gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5kZXBlbmRlbnQgcHVsbC1kb3duIGNvbnRyb2wgcmVnaXN0ZXIgb25seSB2YWxpZCB3aGVuIE9QTU9ERTcgc2V0IGFzIGlucHV0IHRyaS1zdGF0ZSBtb2RlLgorICAgICAqIEB2YXIgUlRDX1Q6OkRTVENUTAorICAgICAqIE9mZnNldDogMHgxMTAgIFJUQyBEYXlsaWdodCBTYXZpbmcgVGltZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QURESFIgICAgIHxBZGQgMSBIb3VyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIFJUQyBob3VyIGRpZ2l0IGhhcyBiZWVuIGFkZGVkIG9uZSBob3VyIGZvciBzdW1tZXIgdGltZSBjaGFuZ2UuCisgICAgICogfFsxXSAgICAgfFNVQkhSICAgICB8U3VidHJhY3QgMSBIb3VyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIFJUQyBob3VyIGRpZ2l0IGhhcyBiZWVuIHN1YnRyYWN0ZWQgb25lIGhvdXIgZm9yIHdpbnRlciB0aW1lIGNoYW5nZS4KKyAgICAgKiB8WzJdICAgICB8RFNCQUsgICAgIHxEYXlsaWdodCBTYXZpbmcgQmFjaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA9IERheWxpZ2h0IFNhdmluZyBDaGFuZ2UgaXMgbm90IHBlcmZvcm1lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxPSBEYXlsaWdodCBTYXZpbmcgQ2hhbmdlIGlzIHBlcmZvcm1lZC4KKyAgICAgKiBAdmFyIFJUQ19UOjpUQU1QQ1RMCisgICAgICogT2Zmc2V0OiAweDEyMCAgUlRDIFRhbXBlciBQaW4gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfERZTjFJU1MgICB8RHluYW1pYyBQYWlyIDEgSW5wdXQgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRldGVybWluZSBUYW1wZXIgMyBpbnB1dCBpcyBmcm9tIFRhbXBlciAyIG9yIFRhbXBlciAwIGluIGR5bmFtaWMgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIGlucHV0IGlzIGZyb20gVGFtcGVyIDIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciBpbnB1dCBpcyBmcm9tIFRhbXBlciAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGhhcyBlZmZlY3Qgb25seSB3aGVuIERZTlBSMUVOIChSVENfVEFNUENUTFsxNl0pIGFuZCBEWU5QUjBFTiAoUlRDX1RBTVBDVExbMTVdKSBhcmUgc2V0CisgICAgICogfFsxXSAgICAgfERZTjJJU1MgICB8RHluYW1pYyBQYWlyIDIgSW5wdXQgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRldGVybWluZSBUYW1wZXIgNSBpbnB1dCBpcyBmcm9tIFRhbXBlciA0IG9yIFRhbXBlciAwIGluIGR5bmFtaWMgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIGlucHV0IGlzIGZyb20gVGFtcGVyIDQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciBpbnB1dCBpcyBmcm9tIFRhbXBlciAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGhhcyBlZmZlY3Qgb25seSB3aGVuIERZTlBSMkVOIChSVENfVEFNUENUTFsyNF0pIGFuZCBEWU5QUjBFTiAoUlRDX1RBTVBDVExbMTVdKSBhcmUgc2V0CisgICAgICogfFszOjJdICAgfERZTlNSQyAgICB8RHluYW1pYyBSZWZlcmVuY2UgUGF0dGVybgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGRzIGRldGVybWluZSB0aGUgbmV3IHJlZmVyZW5jZSBwYXR0ZXJuIHdoZW4gY3VycmVudCBwYXR0ZXJuIHJ1biBvdXQgaW4gZHluYW1pYyBwYWlyIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgb3IgMTAgPSBUaGUgbmV3IHJlZmVyZW5jZSBwYXR0ZXJuIGlzIGdlbmVyYXRlZCBieSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aGVuIHRoZSByZWZlcmVuY2UgcGF0dGVybiBydW4gb3V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gVGhlIG5ldyByZWZlcmVuY2UgcGF0dGVybiBpcyByZXBlYXRlZCBwcmV2aW91cyByYW5kb20gdmFsdWUgd2hlbiB0aGUgcmVmZXJlbmNlIHBhdHRlcm4gcnVuIG91dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFRoZSBuZXcgcmVmZXJlbmNlIHBhdHRlcm4gaXMgcmVwZWF0ZWQgZnJvbSBTRUVEIChSVENfVEFNUFNFRURbMzE6MF0pIHdoZW4gdGhlIHJlZmVyZW5jZSBwYXR0ZXJuIHJ1biBvdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQWZ0ZXIgcmV2aXNlIHRoaXMgYml0LCB0aGUgU0VFRFJMRCAoUlRDX1RBTVBDVExbNF0pIHNob3VsZCBiZSBzZXQuCisgICAgICogfFs0XSAgICAgfFNFRURSTEQgICB8UmVsb2FkIE5ldyBTZWVkIGZvciBQUk5HIEVuZ2luZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldHRpbmcgdGhpcyBiaXQsIHRoZSB0YW1wZXIgY29uZmlndXJhdGlvbiB3aWxsIGJlIHJlbG9hZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR2VuZXJhdGluZyBrZXkgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2VlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVsb2FkIG5ldyBzZWVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEJlZm9yZSBzZXQgdGhpcyBiaXQsIHRoZSB0YW1wZXIgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgc2V0IHRvIGNvbXBsZXRlLgorICAgICAqIHxbNzo1XSAgIHxEWU5SQVRFICAgfER5bmFtaWMgQ2hhbmdlIFJhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGl0ZW0gaXMgY2hvaWNlIHRoZSBkeW5hbWljIHRhbXBlciBvdXRwdXQgY2hhbmdlIHJhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gMl4xMCAqIFJUQ19DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gMl4xMSAqIFJUQ19DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gMl4xMiAqIFJUQ19DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gMl4xMyAqIFJUQ19DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gMl4xNCAqIFJUQ19DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gMl4xNSAqIFJUQ19DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gMl4xNiAqIFJUQ19DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gMl4xNyAqIFJUQ19DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQWZ0ZXIgcmV2aXNlIHRoaXMgZmllbGQsIHNldCBTRUVEUkxEIChSVENfVEFNUENUTFs0XSkgY2FuIHJlbG9hZCBjaGFnZSByYXRlIGltbWVkaWF0ZWx5LgorICAgICAqIHxbOF0gICAgIHxUQU1QMEVOICAgfFRhbXBlcjAgRGV0ZWN0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDAgZGV0ZWN0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgMCBkZXRlY3QgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhlIHJlZmVyZW5jZSBpcyBSVEMtY2xvY2sgLiBUYW1wZXIgZGV0ZWN0b3IgbmVlZCBzeW5jIDIgfiAzIFJUQy1jbG9jay4KKyAgICAgKiB8WzldICAgICB8VEFNUDBMViAgIHxUYW1wZXIgMCBMZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlcGVuZCBvbiBsZXZlbCBhdHRyaWJ1dGUgb2YgdGFtcGVyIHBpbiBmb3Igc3RhdGljIHRhbXBlciBkZXRlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERldGVjdCB2b2x0YWdlIGxldmVsIGlzIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGV0ZWN0IHZvbHRhZ2UgbGV2ZWwgaXMgaGlnaC4KKyAgICAgKiB8WzEwXSAgICB8VEFNUDBEQkVOIHxUYW1wZXIgMCBEZS1ib3VuY2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgMCBkZS1ib3VuY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciAwIGRlLWJvdW5jZSBFbmFibGVkLgorICAgICAqIHxbMTJdICAgIHxUQU1QMUVOICAgfFRhbXBlciAxIERldGVjdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhbXBlciAxIGRldGVjdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDEgZGV0ZWN0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoZSByZWZlcmVuY2UgaXMgUlRDLWNsb2NrIC4gVGFtcGVyIGRldGVjdG9yIG5lZWQgc3luYyAyIH4gMyBSVEMtY2xvY2suCisgICAgICogfFsxM10gICAgfFRBTVAxTFYgICB8VGFtcGVyIDEgTGV2ZWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZXBlbmQgb24gbGV2ZWwgYXR0cmlidXRlIG9mIHRhbXBlciBwaW4gZm9yIHN0YXRpYyB0YW1wZXIgZGV0ZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEZXRlY3Qgdm9sdGFnZSBsZXZlbCBpcyBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERldGVjdCB2b2x0YWdlIGxldmVsIGlzIGhpZ2guCisgICAgICogfFsxNF0gICAgfFRBTVAxREJFTiB8VGFtcGVyIDEgRGUtYm91bmNlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDEgZGUtYm91bmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgMSBkZS1ib3VuY2UgRW5hYmxlZC4KKyAgICAgKiB8WzE1XSAgICB8RFlOUFIwRU4gIHxEeW5hbWljIFBhaXIgMCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN0YXRpYyBkZXRlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IER5bmFtaWMgZGV0ZWN0LgorICAgICAqIHxbMTZdICAgIHxUQU1QMkVOICAgfFRhbXBlciAyIERldGVjdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhbXBlciAyIGRldGVjdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDIgZGV0ZWN0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoZSByZWZlcmVuY2UgaXMgUlRDLWNsb2NrIC4gVGFtcGVyIGRldGVjdG9yIG5lZWQgc3luYyAyIH4gMyBSVEMtY2xvY2suCisgICAgICogfFsxN10gICAgfFRBTVAyTFYgICB8VGFtcGVyIDIgTGV2ZWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZXBlbmQgb24gbGV2ZWwgYXR0cmlidXRlIG9mIHRhbXBlciBwaW4gZm9yIHN0YXRpYyB0YW1wZXIgZGV0ZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEZXRlY3Qgdm9sdGFnZSBsZXZlbCBpcyBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERldGVjdCB2b2x0YWdlIGxldmVsIGlzIGhpZ2guCisgICAgICogfFsxOF0gICAgfFRBTVAyREJFTiB8VGFtcGVyIDIgRGUtYm91bmNlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDIgZGUtYm91bmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgMiBkZS1ib3VuY2UgRW5hYmxlZC4KKyAgICAgKiB8WzIwXSAgICB8VEFNUDNFTiAgIHxUYW1wZXIgMyBEZXRlY3QgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgMyBkZXRlY3QgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciAzIGRldGVjdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGUgcmVmZXJlbmNlIGlzIFJUQy1jbG9jayAuIFRhbXBlciBkZXRlY3RvciBuZWVkIHN5bmMgMiB+IDMgUlRDLWNsb2NrLgorICAgICAqIHxbMjFdICAgIHxUQU1QM0xWICAgfFRhbXBlciAzIExldmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVwZW5kIG9uIGxldmVsIGF0dHJpYnV0ZSBvZiB0YW1wZXIgcGluIGZvciBzdGF0aWMgdGFtcGVyIGRldGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGV0ZWN0IHZvbHRhZ2UgbGV2ZWwgaXMgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEZXRlY3Qgdm9sdGFnZSBsZXZlbCBpcyBoaWdoLgorICAgICAqIHxbMjJdICAgIHxUQU1QM0RCRU4gfFRhbXBlciAzIERlLWJvdW5jZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhbXBlciAzIGRlLWJvdW5jZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDMgZGUtYm91bmNlIEVuYWJsZWQuCisgICAgICogfFsyM10gICAgfERZTlBSMUVOICB8RHluYW1pYyBQYWlyIDEgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTdGF0aWMgZGV0ZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEeW5hbWljIGRldGVjdC4KKyAgICAgKiB8WzI0XSAgICB8VEFNUDRFTiAgIHxUYW1wZXI0IERldGVjdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhbXBlciA0IGRldGVjdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDQgZGV0ZWN0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoZSByZWZlcmVuY2UgaXMgUlRDLWNsb2NrIC4gVGFtcGVyIGRldGVjdG9yIG5lZWQgc3luYyAyIH4gMyBSVEMtY2xvY2suCisgICAgICogfFsyNV0gICAgfFRBTVA0TFYgICB8VGFtcGVyIDQgTGV2ZWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZXBlbmQgb24gbGV2ZWwgYXR0cmlidXRlIG9mIHRhbXBlciBwaW4gZm9yIHN0YXRpYyB0YW1wZXIgZGV0ZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEZXRlY3Qgdm9sdGFnZSBsZXZlbCBpcyBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERldGVjdCB2b2x0YWdlIGxldmVsIGlzIGhpZ2guCisgICAgICogfFsyNl0gICAgfFRBTVA0REJFTiB8VGFtcGVyIDQgRGUtYm91bmNlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDQgZGUtYm91bmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgNCBkZS1ib3VuY2UgRW5hYmxlZC4KKyAgICAgKiB8WzI4XSAgICB8VEFNUDVFTiAgIHxUYW1wZXIgNSBEZXRlY3QgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgNSBkZXRlY3QgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciA1IGRldGVjdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGUgcmVmZXJlbmNlIGlzIFJUQy1jbG9jayAuIFRhbXBlciBkZXRlY3RvciBuZWVkIHN5bmMgMiB+IDMgUlRDLWNsb2NrLgorICAgICAqIHxbMjldICAgIHxUQU1QNUxWICAgfFRhbXBlciA1IExldmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVwZW5kIG9uIGxldmVsIGF0dHJpYnV0ZSBvZiB0YW1wZXIgcGluIGZvciBzdGF0aWMgdGFtcGVyIGRldGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGV0ZWN0IHZvbHRhZ2UgbGV2ZWwgaXMgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEZXRlY3Qgdm9sdGFnZSBsZXZlbCBpcyBoaWdoLgorICAgICAqIHxbMzBdICAgIHxUQU1QNURCRU4gfFRhbXBlciA1IERlLWJvdW5jZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhbXBlciA1IGRlLWJvdW5jZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDUgZGUtYm91bmNlIEVuYWJsZWQuCisgICAgICogfFszMV0gICAgfERZTlBSMkVOICB8RHluYW1pYyBQYWlyIDIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTdGF0aWMgZGV0ZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEeW5hbWljIGRldGVjdC4KKyAgICAgKiBAdmFyIFJUQ19UOjpUQU1QU0VFRAorICAgICAqIE9mZnNldDogMHgxMjggIFJUQyBUYW1wZXIgRHluYW1pYyBTZWVkIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8U0VFRCAgICAgIHxTZWVkIFZhbHVlCisgICAgICogQHZhciBSVENfVDo6VEFNUFRJTUUKKyAgICAgKiBPZmZzZXQ6IDB4MTMwICBSVEMgVGFtcGVyIFRpbWUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxTRUMgICAgICAgfDEtU2VjIFRpbWUgRGlnaXQgb2YgVEFNUEVSIFRpbWUgKDB+OSkKKyAgICAgKiB8WzY6NF0gICB8VEVOU0VDICAgIHwxMC1TZWMgVGltZSBEaWdpdCBvZiBUQU1QRVIgVGltZSAoMH41KQorICAgICAqIHxbMTE6OF0gIHxNSU4gICAgICAgfDEtTWluIFRpbWUgRGlnaXQgb2YgVEFNUEVSIFRpbWUgKDB+OSkKKyAgICAgKiB8WzE0OjEyXSB8VEVOTUlOICAgIHwxMC1NaW4gVGltZSBEaWdpdCBvZiBUQU1QRVIgVGltZSAoMH41KQorICAgICAqIHxbMTk6MTZdIHxIUiAgICAgICAgfDEtSG91ciBUaW1lIERpZ2l0IG9mIFRBTVBFUiBUaW1lICgwfjkpCisgICAgICogfFsyMToyMF0gfFRFTkhSICAgICB8MTAtSG91ciBUaW1lIERpZ2l0IG9mIFRBTVBFUiBUaW1lICgwfjIpIE5vdGU6IDI0LWhvdXIgdGltZSBzY2FsZSBvbmx5IC4KKyAgICAgKiB8WzMwOjI0XSB8SFpDTlQgICAgIHxJbmRleCBvZiBzdWItc2Vjb25kIGNvdW50ZXIoMHgwMCB+MHg3RikKKyAgICAgKiBAdmFyIFJUQ19UOjpUQU1QQ0FMCisgICAgICogT2Zmc2V0OiAweDEzNCAgUlRDIFRhbXBlciBDYWxlbmRhciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfERBWSAgICAgICB8MS1EYXkgQ2FsZW5kYXIgRGlnaXQgb2YgVEFNUEVSIENhbGVuZGFyICgwfjkpCisgICAgICogfFs1OjRdICAgfFRFTkRBWSAgICB8MTAtRGF5IENhbGVuZGFyIERpZ2l0IG9mIFRBTVBFUiBDYWxlbmRhciAoMH4zKQorICAgICAqIHxbMTE6OF0gIHxNT04gICAgICAgfDEtTW9udGggQ2FsZW5kYXIgRGlnaXQgb2YgVEFNUEVSIENhbGVuZGFyICgwfjkpCisgICAgICogfFsxMl0gICAgfFRFTk1PTiAgICB8MTAtTW9udGggQ2FsZW5kYXIgRGlnaXQgb2YgVEFNUEVSIENhbGVuZGFyICgwfjEpCisgICAgICogfFsxOToxNl0gfFlFQVIgICAgICB8MS1ZZWFyIENhbGVuZGFyIERpZ2l0IG9mIFRBTVBFUiBDYWxlbmRhciAoMH45KQorICAgICAqIHxbMjM6MjBdIHxURU5ZRUFSICAgfDEwLVllYXIgQ2FsZW5kYXIgRGlnaXQgb2YgVEFNUEVSIENhbGVuZGFyICgwfjkpCisgICAgICogQHZhciBSVENfVDo6Q0xLRENUTAorICAgICAqIE9mZnNldDogMHgxNDAgIENsb2NrIEZhaWwgRGV0ZWN0b3IgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfExYVEZERU4gICB8TFhUIENsb2NrIEZhaWwvU3RvcCBEZXRlY3RvciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExYVCBjbG9jayBmYWlsL3N0b3AgZGV0ZWN0b3IgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExYVCBjbG9jayBmYWlsL3N0b3AgZGV0ZWN0b3IgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHxbMV0gICAgIHxMWFRGU1cgICAgfExYVCBDbG9jayBGYWlsIERldGVjdG9yIFN3aXRjaCBMSVJDMzJLIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTFhUIENsb2NrIEZhaWwgRGV0ZWN0b3IgU3dpdGNoIExJUkMzMksgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBMWFQgY2xvY2sgZmFpbCBkZXRlY3RvciBmbGFnIENMS0ZJRiAoUlRDX0lOVFNUU1syNF0pIGlzIGdlbmVyYXRlZCwgUlRDIGNsb2NrIHNvdXJjZSB3aWxsIHN3aXRjaCB0byBMSVJDMzJLIGF1dG9tYXRpY2FsbHkuCisgICAgICogfFsyXSAgICAgfExYVFNQU1cgICB8TFhUIENsb2NrIFN0b3AgRGV0ZWN0b3IgU3dpdGNoIExJUkMzMksgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMWFQgQ2xvY2sgU3RvcCBEZXRlY3RvciBTd2l0Y2ggTElSQzMySyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIExYVCBjbG9jayBzdG9wIGRldGVjdG9yIGZsYWcgQ0xLU1BJRiAoUlRDX0lOVFNUU1syNV0pIGlzIGdlbmVyYXRlZCwgUlRDIGNsb2NrIHNvdXJjZSB3aWxsIHN3aXRjaCB0byBMSVJDMzJLIGF1dG9tYXRpY2FsbHkKKyAgICAgKiB8WzE2XSAgICB8Q0xLU1dMSVJDRnxMWFQgQ2xvY2sgRGV0ZWN0b3IgRmFpbC9TdG9wIFN3aXRjaCBMSVJDMzJLIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlRDIGNsb2NrIHNvdXJjZSBmcm9tIExYVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlRDIGNsb2NrIHNvdXJjZSBmcm9tIExJUkMzMksgLgorICAgICAqIHxbMTddICAgIHxMWFRGQVNURiAgfExYVCBGYXN0ZXIgVGhhbiBMSVJYMzJLIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTFhUIGZyZXF1ZW5jeSBpcyBzbG93bHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExYVCBmcmVxdWVuY3kgZmFzdGVyIHRoYW4gTElSQzMySy4KKyAgICAgKiBAdmFyIFJUQ19UOjpDREJSCisgICAgICogT2Zmc2V0OiAweDE0NCAgQ2xvY2sgRnJlcXVlbmN5IERldGVjdG9yIEJvdW5kYXJ5IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8U1RPUEJEICAgIHxMWFQgQ2xvY2sgRnJlcXVlbmN5IERldGVjdG9yIFN0b3AgQm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYml0cyBkZWZpbmUgdGhlIHN0b3AgdmFsdWUgb2YgZnJlcXVlbmN5IG1vbml0b3Igd2luZG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gTFhUIGZyZXF1ZW5jeSBtb25pdG9yIGNvdW50ZXIgbG93ZXIgdGhhbiBDbG9jayBGcmVxdWVuY3kgRGV0ZWN0b3IgU3RvcCBCb3VuZGFyeSAsIHRoZSBMWFQgZnJlcXVlbmN5IGRldGVjdCBTdG9wIGludGVycnVwdCBmbGFnIHdpbGwgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGJvdW5kYXJ5IGlzIGRlZmluZWQgYXMgdGhlIG1heGltdW0gdmFsdWUgb2YgTFhUIGFtb25nIDI1NiBMSVJDMzJLIGNsb2NrIHRpbWUuCisgICAgICogfFsyMzoxNl0gfEZBSUxCRCAgICB8TFhUIENsb2NrIEZyZXF1ZW5jeSBEZXRlY3RvciBGYWlsIEJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGJpdHMgZGVmaW5lIHRoZSBmYWlsIHZhbHVlIG9mIGZyZXF1ZW5jeSBtb25pdG9yIHdpbmRvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIExYVCBmcmVxdWVuY3kgbW9uaXRvciBjb3VudGVyIGxvd2VyIHRoYW4gQ2xvY2sgRnJlcXVlbmN5IERldGVjdG9yIGZhaWwgQm91bmRhcnkgLCB0aGUgTFhUIGZyZXF1ZW5jeSBkZXRlY3QgZmFpbCBpbnRlcnJ1cHQgZmxhZyB3aWxsIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBib3VuZGFyeSBpcyBkZWZpbmVkIGFzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIExYVCBhbW9uZyAyNTYgTElSQzMySyBjbG9jayB0aW1lLgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5JVDsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIFJUQyBJbml0aWF0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFJXRU47ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBSVEMgQWNjZXNzIEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBGUkVRQURKOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gUlRDIEZyZXF1ZW5jeSBDb21wZW5zYXRpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVElNRTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIFJUQyBUaW1lIExvYWRpbmcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENBTDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBSVEMgQ2FsZW5kYXIgTG9hZGluZyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTEtGTVQ7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxNF0gUlRDIFRpbWUgU2NhbGUgU2VsZWN0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgV0VFS0RBWTsgICAgICAgICAgICAgICAvKiE8IFsweDAwMThdIFJUQyBEYXkgb2YgdGhlIFdlZWsgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRBTE07ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDFjXSBSVEMgVGltZSBBbGFybSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDQUxNOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyMF0gUlRDIENhbGVuZGFyIEFsYXJtIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgTEVBUFlFQVI7ICAgICAgICAgICAgICAvKiE8IFsweDAwMjRdIFJUQyBMZWFwIFllYXIgSW5kaWNhdG9yIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVEVOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDI4XSBSVEMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyY10gUlRDIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVElDSzsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMzBdIFJUQyBUaW1lIFRpY2sgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRBTVNLOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDM0XSBSVEMgVGltZSBBbGFybSBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDQU1TSzsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzOF0gUlRDIENhbGVuZGFyIEFsYXJtIE1hc2sgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1BSQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwM2NdIFJUQyBTcGFyZSBGdW5jdGlvbmFsIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNQUlsyMF07ICAgICAgICAgICAgICAgLyohPCBbMHgwMDQwXSB+IFsweDAwOENdIFJUQyBTcGFyZSBSZWdpc3RlciAwIH4gMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsyOF07ICAgICAgICAgIC8qIDB4OTAgfiAweEZDICovCisgICAgX19JTyB1aW50MzJfdCBMWFRDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDEwMF0gUlRDIDMyLjc2OCBrSHogT3NjaWxsYXRvciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BJT0NUTDA7ICAgICAgICAgICAgICAvKiE8IFsweDAxMDRdIFJUQyBHUElPIENvbnRyb2wgMCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQSU9DVEwxOyAgICAgICAgICAgICAgLyohPCBbMHgwMTA4XSBSVEMgR1BJTyBDb250cm9sIDEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVsxXTsKKyAgICBfX0lPIHVpbnQzMl90IERTVENUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMTEwXSBSVEMgRGF5bGlnaHQgU2F2aW5nIFRpbWUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMlszXTsKKyAgICBfX0lPIHVpbnQzMl90IFRBTVBDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMTIwXSBSVEMgVGFtcGVyIFBpbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFM1sxXTsKKyAgICBfX0lPIHVpbnQzMl90IFRBTVBTRUVEOyAgICAgICAgICAgICAgLyohPCBbMHgwMTI4XSBSVEMgVGFtcGVyIER5bmFtaWMgU2VlZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFNFsxXTsKKyAgICBfX0kgIHVpbnQzMl90IFRBTVBUSU1FOyAgICAgICAgICAgICAgLyohPCBbMHgwMTMwXSBSVEMgVGFtcGVyIFRpbWUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBUQU1QQ0FMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDEzNF0gUlRDIFRhbXBlciBDYWxlbmRhciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTVbMl07CisgICAgX19JTyB1aW50MzJfdCBDTEtEQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDE0MF0gQ2xvY2sgRmFpbCBEZXRlY3RvciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0RCUjsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAxNDRdIENsb2NrIEZyZXF1ZW5jeSBEZXRlY3RvciBCb3VuZGFyeSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBSVENfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgUlRDX0NPTlNUIFJUQyBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBSVEMgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBSVENfSU5JVF9BQ1RJVkVfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOSVQ6IEFDVElWRSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOSVRfQUNUSVZFX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTklUX0FDVElWRV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTklUOiBBQ1RJVkUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOSVRfSU5JVF9Qb3MgICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTklUOiBJTklUIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19JTklUX0lOSVRfTXNrICAgICAgICAgICAgICAgICgweDdmZmZmZmZmdWwgPDwgUlRDX0lOSVRfSU5JVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5JVDogSU5JVCBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19SV0VOX1JXRU5fUG9zICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6UldFTjogUldFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfUldFTl9SV0VOX01zayAgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgUlRDX1JXRU5fUldFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlJXRU46IFJXRU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfUldFTl9SV0VORl9Qb3MgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlJXRU46IFJXRU5GIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1JXRU5fUldFTkZfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19SV0VOX1JXRU5GX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpSV0VOOiBSV0VORiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1JXRU5fUlRDQlVTWV9Qb3MgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpSV0VOOiBSVENCVVNZIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFJUQ19SV0VOX1JUQ0JVU1lfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBSVENfUldFTl9SVENCVVNZX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6UldFTjogUlRDQlVTWSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19GUkVRQURKX0ZSRVFBREpfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6RlJFUUFESjogRlJFUUFESiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfRlJFUUFESl9GUkVRQURKX01zayAgICAgICAgICAoMHgzZmZmZmZ1bCA8PCBSVENfRlJFUUFESl9GUkVRQURKX1BvcykgICAgICAgICAgIC8qITwgUlRDX1Q6OkZSRVFBREo6IEZSRVFBREogTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVElNRV9TRUNfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRJTUU6IFNFQyBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RJTUVfU0VDX01zayAgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19USU1FX1NFQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUSU1FOiBTRUMgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RJTUVfVEVOU0VDX1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUSU1FOiBURU5TRUMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19USU1FX1RFTlNFQ19Nc2sgICAgICAgICAgICAgICgweDd1bCA8PCBSVENfVElNRV9URU5TRUNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VElNRTogVEVOU0VDIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19USU1FX01JTl9Qb3MgICAgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VElNRTogTUlOIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfVElNRV9NSU5fTXNrICAgICAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX1RJTUVfTUlOX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRJTUU6IE1JTiBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVElNRV9URU5NSU5fUG9zICAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRJTUU6IFRFTk1JTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RJTUVfVEVOTUlOX01zayAgICAgICAgICAgICAgKDB4N3VsIDw8IFJUQ19USU1FX1RFTk1JTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUSU1FOiBURU5NSU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RJTUVfSFJfUG9zICAgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUSU1FOiBIUiBQb3NpdGlvbiAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19USU1FX0hSX01zayAgICAgICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfVElNRV9IUl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VElNRTogSFIgTWFzayAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19USU1FX1RFTkhSX1BvcyAgICAgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VElNRTogVEVOSFIgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfVElNRV9URU5IUl9Nc2sgICAgICAgICAgICAgICAoMHgzdWwgPDwgUlRDX1RJTUVfVEVOSFJfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRJTUU6IFRFTkhSIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVElNRV9IWkNOVF9Qb3MgICAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRJTUU6IEhaQ05UIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RJTUVfSFpDTlRfTXNrICAgICAgICAgICAgICAgKDB4N2Z1bCA8PCBSVENfVElNRV9IWkNOVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUSU1FOiBIWkNOVCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NBTF9EQVlfUG9zICAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUw6IERBWSBQb3NpdGlvbiAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DQUxfREFZX01zayAgICAgICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfQ0FMX0RBWV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMOiBEQVkgTWFzayAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DQUxfVEVOREFZX1BvcyAgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMOiBURU5EQVkgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfQ0FMX1RFTkRBWV9Nc2sgICAgICAgICAgICAgICAoMHgzdWwgPDwgUlRDX0NBTF9URU5EQVlfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTDogVEVOREFZIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0FMX01PTl9Qb3MgICAgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTDogTU9OIFBvc2l0aW9uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NBTF9NT05fTXNrICAgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19DQUxfTU9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUw6IE1PTiBNYXNrICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NBTF9URU5NT05fUG9zICAgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUw6IFRFTk1PTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DQUxfVEVOTU9OX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBSVENfQ0FMX1RFTk1PTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMOiBURU5NT04gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DQUxfWUVBUl9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMOiBZRUFSIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfQ0FMX1lFQVJfTXNrICAgICAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX0NBTF9ZRUFSX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTDogWUVBUiBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0FMX1RFTllFQVJfUG9zICAgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTDogVEVOWUVBUiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NBTF9URU5ZRUFSX01zayAgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19DQUxfVEVOWUVBUl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUw6IFRFTllFQVIgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NMS0ZNVF8yNEhFTl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDTEtGTVQ6IDI0SEVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DTEtGTVRfMjRIRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBSVENfQ0xLRk1UXzI0SEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0xLRk1UOiAyNEhFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DTEtGTVRfSFpDTlRFTl9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0xLRk1UOiBIWkNOVEVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfQ0xLRk1UX0haQ05URU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0NMS0ZNVF9IWkNOVEVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNMS0ZNVDogSFpDTlRFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfV0VFS0RBWV9XRUVLREFZX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OldFRUtEQVk6IFdFRUtEQVkgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1dFRUtEQVlfV0VFS0RBWV9Nc2sgICAgICAgICAgKDB4N3VsIDw8IFJUQ19XRUVLREFZX1dFRUtEQVlfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpXRUVLREFZOiBXRUVLREFZIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTE1fU0VDX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQUxNOiBTRUMgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQUxNX1NFQ19Nc2sgICAgICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfVEFMTV9TRUNfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFMTTogU0VDIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQUxNX1RFTlNFQ19Qb3MgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFMTTogVEVOU0VDIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfVEFMTV9URU5TRUNfTXNrICAgICAgICAgICAgICAoMHg3dWwgPDwgUlRDX1RBTE1fVEVOU0VDX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTE06IFRFTlNFQyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFMTV9NSU5fUG9zICAgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTE06IE1JTiBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTE1fTUlOX01zayAgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19UQUxNX01JTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQUxNOiBNSU4gTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTE1fVEVOTUlOX1BvcyAgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQUxNOiBURU5NSU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQUxNX1RFTk1JTl9Nc2sgICAgICAgICAgICAgICgweDd1bCA8PCBSVENfVEFMTV9URU5NSU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFMTTogVEVOTUlOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQUxNX0hSX1BvcyAgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFMTTogSFIgUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfVEFMTV9IUl9Nc2sgICAgICAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX1RBTE1fSFJfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTE06IEhSIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFMTV9URU5IUl9Qb3MgICAgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTE06IFRFTkhSIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTE1fVEVOSFJfTXNrICAgICAgICAgICAgICAgKDB4M3VsIDw8IFJUQ19UQUxNX1RFTkhSX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQUxNOiBURU5IUiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTE1fSFpDTlRfUG9zICAgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQUxNOiBIWkNOVCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQUxNX0haQ05UX01zayAgICAgICAgICAgICAgICgweDdmdWwgPDwgUlRDX1RBTE1fSFpDTlRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFMTTogSFpDTlQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DQUxNX0RBWV9Qb3MgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMTTogREFZIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfQ0FMTV9EQVlfTXNrICAgICAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX0NBTE1fREFZX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTE06IERBWSBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0FMTV9URU5EQVlfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTE06IFRFTkRBWSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NBTE1fVEVOREFZX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IFJUQ19DQUxNX1RFTkRBWV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUxNOiBURU5EQVkgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NBTE1fTU9OX1BvcyAgICAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUxNOiBNT04gUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DQUxNX01PTl9Nc2sgICAgICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfQ0FMTV9NT05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMTTogTU9OIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DQUxNX1RFTk1PTl9Qb3MgICAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMTTogVEVOTU9OIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfQ0FMTV9URU5NT05fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0NBTE1fVEVOTU9OX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTE06IFRFTk1PTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0FMTV9ZRUFSX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTE06IFlFQVIgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NBTE1fWUVBUl9Nc2sgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19DQUxNX1lFQVJfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUxNOiBZRUFSIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NBTE1fVEVOWUVBUl9Qb3MgICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUxNOiBURU5ZRUFSIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DQUxNX1RFTllFQVJfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfQ0FMTV9URU5ZRUFSX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMTTogVEVOWUVBUiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19MRUFQWUVBUl9MRUFQWUVBUl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6TEVBUFlFQVI6IExFQVBZRUFSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBSVENfTEVBUFlFQVJfTEVBUFlFQVJfTXNrICAgICAgICAoMHgxdWwgPDwgUlRDX0xFQVBZRUFSX0xFQVBZRUFSX1BvcykgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkxFQVBZRUFSOiBMRUFQWUVBUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5URU5fQUxNSUVOX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBBTE1JRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVEVOX0FMTUlFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRFTl9BTE1JRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogQUxNSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVEVOX1RJQ0tJRU5fUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogVElDS0lFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRFTl9USUNLSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5URU5fVElDS0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IFRJQ0tJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRFTl9UQU1QMElFTl9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IFRBTVAwSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfSU5URU5fVEFNUDBJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVEVOX1RBTVAwSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBUQU1QMElFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5URU5fVEFNUDFJRU5fUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBUQU1QMUlFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVEVOX1RBTVAxSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRFTl9UQU1QMUlFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogVEFNUDFJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVEVOX1RBTVAySUVOX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogVEFNUDJJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRFTl9UQU1QMklFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5URU5fVEFNUDJJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IFRBTVAySUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRFTl9UQU1QM0lFTl9Qb3MgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IFRBTVAzSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfSU5URU5fVEFNUDNJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVEVOX1RBTVAzSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBUQU1QM0lFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5URU5fVEFNUDRJRU5fUG9zICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBUQU1QNElFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVEVOX1RBTVA0SUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRFTl9UQU1QNElFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogVEFNUDRJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVEVOX1RBTVA1SUVOX1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogVEFNUDVJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRFTl9UQU1QNUlFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5URU5fVEFNUDVJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IFRBTVA1SUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRFTl9DTEtGSUVOX1BvcyAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IENMS0ZJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBSVENfSU5URU5fQ0xLRklFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVEVOX0NMS0ZJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBDTEtGSUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5URU5fQ0xLU1BJRU5fUG9zICAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBDTEtTUElFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVEVOX0NMS1NQSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRFTl9DTEtTUElFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogQ0xLU1BJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVFNUU19BTE1JRl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IEFMTUlGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRTVFNfQUxNSUZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5UU1RTX0FMTUlGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBBTE1JRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRTVFNfVElDS0lGX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBUSUNLSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBSVENfSU5UU1RTX1RJQ0tJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVFNUU19USUNLSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogVElDS0lGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5UU1RTX1RBTVAwSUZfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogVEFNUDBJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVFNUU19UQU1QMElGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRTVFNfVEFNUDBJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IFRBTVAwSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVFNUU19UQU1QMUlGX1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IFRBTVAxSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRTVFNfVEFNUDFJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5UU1RTX1RBTVAxSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBUQU1QMUlGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRTVFNfVEFNUDJJRl9Qb3MgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBUQU1QMklGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfSU5UU1RTX1RBTVAySUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVFNUU19UQU1QMklGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogVEFNUDJJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5UU1RTX1RBTVAzSUZfUG9zICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogVEFNUDNJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVFNUU19UQU1QM0lGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRTVFNfVEFNUDNJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IFRBTVAzSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVFNUU19UQU1QNElGX1BvcyAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IFRBTVA0SUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRTVFNfVEFNUDRJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5UU1RTX1RBTVA0SUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBUQU1QNElGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRTVFNfVEFNUDVJRl9Qb3MgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBUQU1QNUlGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfSU5UU1RTX1RBTVA1SUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVFNUU19UQU1QNUlGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogVEFNUDVJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5UU1RTX0NMS0ZJRl9Qb3MgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogQ0xLRklGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVFNUU19DTEtGSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRTVFNfQ0xLRklGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IENMS0ZJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVFNUU19DTEtTUElGX1BvcyAgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IENMS1NQSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRTVFNfQ0xLU1BJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5UU1RTX0NMS1NQSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBDTEtTUElGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19USUNLX1RJQ0tfUG9zICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VElDSzogVElDSyBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfVElDS19USUNLX01zayAgICAgICAgICAgICAgICAoMHg3dWwgPDwgUlRDX1RJQ0tfVElDS19Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRJQ0s6IFRJQ0sgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNU0tfTVNFQ19Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVNLOiBNU0VDIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVNLX01TRUNfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1TS19NU0VDX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1TSzogTVNFQyBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVNLX01URU5TRUNfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1TSzogTVRFTlNFQyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1TS19NVEVOU0VDX01zayAgICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNU0tfTVRFTlNFQ19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNU0s6IE1URU5TRUMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1TS19NTUlOX1BvcyAgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNU0s6IE1NSU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfVEFNU0tfTU1JTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVNLX01NSU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVNLOiBNTUlOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNU0tfTVRFTk1JTl9Qb3MgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVNLOiBNVEVOTUlOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVNLX01URU5NSU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1TS19NVEVOTUlOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1TSzogTVRFTk1JTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVNLX01IUl9Qb3MgICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1TSzogTUhSIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1TS19NSFJfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNU0tfTUhSX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNU0s6IE1IUiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1TS19NVEVOSFJfUG9zICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNU0s6IE1URU5IUiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBSVENfVEFNU0tfTVRFTkhSX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVNLX01URU5IUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVNLOiBNVEVOSFIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0FNU0tfTURBWV9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTVNLOiBNREFZIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NBTVNLX01EQVlfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19DQU1TS19NREFZX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQU1TSzogTURBWSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NBTVNLX01URU5EQVlfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQU1TSzogTVRFTkRBWSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFJUQ19DQU1TS19NVEVOREFZX01zayAgICAgICAgICAgICgweDF1bCA8PCBSVENfQ0FNU0tfTVRFTkRBWV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FNU0s6IE1URU5EQVkgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DQU1TS19NTU9OX1BvcyAgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FNU0s6IE1NT04gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfQ0FNU0tfTU1PTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0NBTVNLX01NT05fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTVNLOiBNTU9OIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0FNU0tfTVRFTk1PTl9Qb3MgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTVNLOiBNVEVOTU9OIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NBTVNLX01URU5NT05fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19DQU1TS19NVEVOTU9OX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQU1TSzogTVRFTk1PTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NBTVNLX01ZRUFSX1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQU1TSzogTVlFQVIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DQU1TS19NWUVBUl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBSVENfQ0FNU0tfTVlFQVJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FNU0s6IE1ZRUFSIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DQU1TS19NVEVOWUVBUl9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FNU0s6IE1URU5ZRUFSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfQ0FNU0tfTVRFTllFQVJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0NBTVNLX01URU5ZRUFSX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTVNLOiBNVEVOWUVBUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSQ1RMX1NQUlJXRU5fUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUkNUTDogU1BSUldFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUkNUTF9TUFJSV0VOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19TUFJDVExfU1BSUldFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFJDVEw6IFNQUlJXRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUkNUTF9TUFJDU1RTX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFJDVEw6IFNQUkNTVFMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19TUFJDVExfU1BSQ1NUU19Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfU1BSQ1RMX1NQUkNTVFNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSQ1RMOiBTUFJDU1RTIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFJDVExfTFhURkNMUl9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSQ1RMOiBMWFRGQ0xSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfU1BSQ1RMX0xYVEZDTFJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX1NQUkNUTF9MWFRGQ0xSX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUkNUTDogTFhURkNMUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSMF9TUEFSRV9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjA6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjBfU1BBUkVfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSMF9TUEFSRV9Qb3MpICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIwOiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjFfU1BBUkVfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxOiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFIxX1NQQVJFX01zayAgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjFfU1BBUkVfUG9zKSAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTogU1BBUkUgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFIyX1NQQVJFX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMjogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSMl9TUEFSRV9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFIyX1NQQVJFX1BvcykgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjI6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSM19TUEFSRV9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjM6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjNfU1BBUkVfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSM19TUEFSRV9Qb3MpICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIzOiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjRfU1BBUkVfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFI0OiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFI0X1NQQVJFX01zayAgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjRfU1BBUkVfUG9zKSAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSNDogU1BBUkUgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFI1X1NQQVJFX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSNTogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSNV9TUEFSRV9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFI1X1NQQVJFX1BvcykgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjU6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSNl9TUEFSRV9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjY6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjZfU1BBUkVfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSNl9TUEFSRV9Qb3MpICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFI2OiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjdfU1BBUkVfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFI3OiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFI3X1NQQVJFX01zayAgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjdfU1BBUkVfUG9zKSAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSNzogU1BBUkUgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFI4X1NQQVJFX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSODogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSOF9TUEFSRV9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFI4X1NQQVJFX1BvcykgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjg6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSOV9TUEFSRV9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjk6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjlfU1BBUkVfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSOV9TUEFSRV9Qb3MpICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFI5OiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjEwX1NQQVJFX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxMDogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFIxMF9TUEFSRV9Nc2sgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjEwX1NQQVJFX1BvcykgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTA6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFIxMV9TUEFSRV9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTE6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSMTFfU1BBUkVfTXNrICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFIxMV9TUEFSRV9Qb3MpICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjExOiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSMTJfU1BBUkVfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjEyOiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjEyX1NQQVJFX01zayAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSMTJfU1BBUkVfUG9zKSAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxMjogU1BBUkUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjEzX1NQQVJFX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxMzogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFIxM19TUEFSRV9Nc2sgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjEzX1NQQVJFX1BvcykgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTM6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFIxNF9TUEFSRV9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTQ6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSMTRfU1BBUkVfTXNrICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFIxNF9TUEFSRV9Qb3MpICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjE0OiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSMTVfU1BBUkVfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjE1OiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjE1X1NQQVJFX01zayAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSMTVfU1BBUkVfUG9zKSAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxNTogU1BBUkUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjE2X1NQQVJFX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxNjogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFIxNl9TUEFSRV9Nc2sgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjE2X1NQQVJFX1BvcykgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTY6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFIxN19TUEFSRV9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTc6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSMTdfU1BBUkVfTXNrICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFIxN19TUEFSRV9Qb3MpICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjE3OiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSMThfU1BBUkVfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjE4OiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjE4X1NQQVJFX01zayAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSMThfU1BBUkVfUG9zKSAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxODogU1BBUkUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjE5X1NQQVJFX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxOTogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFIxOV9TUEFSRV9Nc2sgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjE5X1NQQVJFX1BvcykgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTk6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19MWFRDVExfTElSQzMyS0VOX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6TFhUQ1RMOiBMSVJDMzJLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfTFhUQ1RMX0xJUkMzMktFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgUlRDX0xYVENUTF9MSVJDMzJLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkxYVENUTDogTElSQzMyS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfTFhUQ1RMX0dBSU5fUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkxYVENUTDogR0FJTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0xYVENUTF9HQUlOX01zayAgICAgICAgICAgICAgKDB4N3VsIDw8IFJUQ19MWFRDVExfR0FJTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpMWFRDVEw6IEdBSU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0xYVENUTF9DMzJLU19Qb3MgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpMWFRDVEw6IEMzMktTIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFJUQ19MWFRDVExfQzMyS1NfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBSVENfTFhUQ1RMX0MzMktTX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6TFhUQ1RMOiBDMzJLUyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9PUE1PREUwX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IE9QTU9ERTAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDBfT1BNT0RFMF9Nc2sgICAgICAgICAoMHgzdWwgPDwgUlRDX0dQSU9DVEwwX09QTU9ERTBfUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBPUE1PREUwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDBfRE9VVDBfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBET1VUMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwwX0RPVVQwX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19HUElPQ1RMMF9ET1VUMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogRE9VVDAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwwX0NUTFNFTDBfUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogQ1RMU0VMMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9DVExTRUwwX01zayAgICAgICAgICgweDF1bCA8PCBSVENfR1BJT0NUTDBfQ1RMU0VMMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IENUTFNFTDAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9QVVNFTDBfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IFBVU0VMMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDBfUFVTRUwwX01zayAgICAgICAgICAoMHgzdWwgPDwgUlRDX0dQSU9DVEwwX1BVU0VMMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBQVVNFTDAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDBfT1BNT0RFMV9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBPUE1PREUxIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwwX09QTU9ERTFfTXNrICAgICAgICAgKDB4M3VsIDw8IFJUQ19HUElPQ1RMMF9PUE1PREUxX1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogT1BNT0RFMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwwX0RPVVQxX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogRE9VVDEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9ET1VUMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfR1BJT0NUTDBfRE9VVDFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IERPVVQxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9DVExTRUwxX1BvcyAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IENUTFNFTDEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDBfQ1RMU0VMMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgUlRDX0dQSU9DVEwwX0NUTFNFTDFfUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBDVExTRUwxIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDBfUFVTRUwxX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBQVVNFTDEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwwX1BVU0VMMV9Nc2sgICAgICAgICAgKDB4M3VsIDw8IFJUQ19HUElPQ1RMMF9QVVNFTDFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogUFVTRUwxIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwwX09QTU9ERTJfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogT1BNT0RFMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9PUE1PREUyX01zayAgICAgICAgICgweDN1bCA8PCBSVENfR1BJT0NUTDBfT1BNT0RFMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IE9QTU9ERTIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9ET1VUMl9Qb3MgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IERPVVQyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDBfRE9VVDJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0dQSU9DVEwwX0RPVVQyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBET1VUMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDBfQ1RMU0VMMl9Qb3MgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBDVExTRUwyIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwwX0NUTFNFTDJfTXNrICAgICAgICAgKDB4MXVsIDw8IFJUQ19HUElPQ1RMMF9DVExTRUwyX1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogQ1RMU0VMMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwwX1BVU0VMMl9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogUFVTRUwyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9QVVNFTDJfTXNrICAgICAgICAgICgweDN1bCA8PCBSVENfR1BJT0NUTDBfUFVTRUwyX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IFBVU0VMMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9PUE1PREUzX1BvcyAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IE9QTU9ERTMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDBfT1BNT0RFM19Nc2sgICAgICAgICAoMHgzdWwgPDwgUlRDX0dQSU9DVEwwX09QTU9ERTNfUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBPUE1PREUzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDBfRE9VVDNfUG9zICAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBET1VUMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwwX0RPVVQzX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19HUElPQ1RMMF9ET1VUM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogRE9VVDMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwwX0NUTFNFTDNfUG9zICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogQ1RMU0VMMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9DVExTRUwzX01zayAgICAgICAgICgweDF1bCA8PCBSVENfR1BJT0NUTDBfQ1RMU0VMM19Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IENUTFNFTDMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9QVVNFTDNfUG9zICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IFBVU0VMMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDBfUFVTRUwzX01zayAgICAgICAgICAoMHgzdWwgPDwgUlRDX0dQSU9DVEwwX1BVU0VMM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBQVVNFTDMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDFfT1BNT0RFNF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBPUE1PREU0IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwxX09QTU9ERTRfTXNrICAgICAgICAgKDB4M3VsIDw8IFJUQ19HUElPQ1RMMV9PUE1PREU0X1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogT1BNT0RFNCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwxX0RPVVQ0X1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogRE9VVDQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9ET1VUNF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfR1BJT0NUTDFfRE9VVDRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IERPVVQ0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9DVExTRUw0X1BvcyAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IENUTFNFTDQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDFfQ1RMU0VMNF9Nc2sgICAgICAgICAoMHgxdWwgPDwgUlRDX0dQSU9DVEwxX0NUTFNFTDRfUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBDVExTRUw0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDFfUFVTRUw0X1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBQVVNFTDQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwxX1BVU0VMNF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IFJUQ19HUElPQ1RMMV9QVVNFTDRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogUFVTRUw0IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwxX09QTU9ERTVfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogT1BNT0RFNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9PUE1PREU1X01zayAgICAgICAgICgweDN1bCA8PCBSVENfR1BJT0NUTDFfT1BNT0RFNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IE9QTU9ERTUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9ET1VUNV9Qb3MgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IERPVVQ1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDFfRE9VVDVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0dQSU9DVEwxX0RPVVQ1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBET1VUNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDFfQ1RMU0VMNV9Qb3MgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBDVExTRUw1IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwxX0NUTFNFTDVfTXNrICAgICAgICAgKDB4MXVsIDw8IFJUQ19HUElPQ1RMMV9DVExTRUw1X1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogQ1RMU0VMNSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwxX1BVU0VMNV9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogUFVTRUw1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9QVVNFTDVfTXNrICAgICAgICAgICgweDN1bCA8PCBSVENfR1BJT0NUTDFfUFVTRUw1X1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IFBVU0VMNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9PUE1PREU2X1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IE9QTU9ERTYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDFfT1BNT0RFNl9Nc2sgICAgICAgICAoMHgzdWwgPDwgUlRDX0dQSU9DVEwxX09QTU9ERTZfUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBPUE1PREU2IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDFfRE9VVDZfUG9zICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBET1VUNiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwxX0RPVVQ2X01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19HUElPQ1RMMV9ET1VUNl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogRE9VVDYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwxX0NUTFNFTDZfUG9zICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogQ1RMU0VMNiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9DVExTRUw2X01zayAgICAgICAgICgweDF1bCA8PCBSVENfR1BJT0NUTDFfQ1RMU0VMNl9Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IENUTFNFTDYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9QVVNFTDZfUG9zICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IFBVU0VMNiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDFfUFVTRUw2X01zayAgICAgICAgICAoMHgzdWwgPDwgUlRDX0dQSU9DVEwxX1BVU0VMNl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBQVVNFTDYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDFfT1BNT0RFN19Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBPUE1PREU3IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwxX09QTU9ERTdfTXNrICAgICAgICAgKDB4M3VsIDw8IFJUQ19HUElPQ1RMMV9PUE1PREU3X1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogT1BNT0RFNyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwxX0RPVVQ3X1BvcyAgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogRE9VVDcgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9ET1VUN19Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfR1BJT0NUTDFfRE9VVDdfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IERPVVQ3IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9DVExTRUw3X1BvcyAgICAgICAgICgyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IENUTFNFTDcgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDFfQ1RMU0VMN19Nc2sgICAgICAgICAoMHgxdWwgPDwgUlRDX0dQSU9DVEwxX0NUTFNFTDdfUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBDVExTRUw3IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDFfUFVTRUw3X1BvcyAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBQVVNFTDcgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwxX1BVU0VMN19Nc2sgICAgICAgICAgKDB4M3VsIDw8IFJUQ19HUElPQ1RMMV9QVVNFTDdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogUFVTRUw3IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0RTVENUTF9BRERIUl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpEU1RDVEw6IEFEREhSIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFJUQ19EU1RDVExfQURESFJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBSVENfRFNUQ1RMX0FEREhSX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6RFNUQ1RMOiBBRERIUiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19EU1RDVExfU1VCSFJfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6RFNUQ1RMOiBTVUJIUiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBSVENfRFNUQ1RMX1NVQkhSX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0RTVENUTF9TVUJIUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkRTVENUTDogU1VCSFIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfRFNUQ1RMX0RTQkFLX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkRTVENUTDogRFNCQUsgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0RTVENUTF9EU0JBS19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19EU1RDVExfRFNCQUtfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpEU1RDVEw6IERTQkFLIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfRFlOMUlTU19Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBEWU4xSVNTIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX0RZTjFJU1NfTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9EWU4xSVNTX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogRFlOMUlTUyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX0RZTjJJU1NfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogRFlOMklTUyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9EWU4ySVNTX01zayAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfRFlOMklTU19Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IERZTjJJU1MgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9EWU5TUkNfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IERZTlNSQyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfRFlOU1JDX01zayAgICAgICAgICAgKDB4M3VsIDw8IFJUQ19UQU1QQ1RMX0RZTlNSQ19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBEWU5TUkMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfU0VFRFJMRF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBTRUVEUkxEIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1NFRURSTERfTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9TRUVEUkxEX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogU0VFRFJMRCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX0RZTlJBVEVfUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogRFlOUkFURSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9EWU5SQVRFX01zayAgICAgICAgICAoMHg3dWwgPDwgUlRDX1RBTVBDVExfRFlOUkFURV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IERZTlJBVEUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QMEVOX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAwRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDBFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1RBTVAwRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QMEVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDBMVl9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QMExWIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAwTFZfTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9UQU1QMExWX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDBMViBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAwREJFTl9Qb3MgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDBEQkVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QMERCRU5fTXNrICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfVEFNUDBEQkVOX1BvcykgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAwREJFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QMUVOX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAxRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDFFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1RBTVAxRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QMUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDFMVl9Qb3MgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QMUxWIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAxTFZfTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9UQU1QMUxWX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDFMViBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAxREJFTl9Qb3MgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDFEQkVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QMURCRU5fTXNrICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfVEFNUDFEQkVOX1BvcykgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAxREJFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9EWU5QUjBFTl9Qb3MgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IERZTlBSMEVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfRFlOUFIwRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX0RZTlBSMEVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBEWU5QUjBFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDJFTl9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QMkVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAyRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9UQU1QMkVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDJFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAyTFZfUG9zICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDJMViBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QMkxWX01zayAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfVEFNUDJMVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAyTFYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QMkRCRU5fUG9zICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAyREJFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDJEQkVOX01zayAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1RBTVAyREJFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QMkRCRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDNFTl9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QM0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAzRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9UQU1QM0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDNFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAzTFZfUG9zICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDNMViBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QM0xWX01zayAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfVEFNUDNMVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAzTFYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QM0RCRU5fUG9zICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAzREJFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDNEQkVOX01zayAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1RBTVAzREJFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QM0RCRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfRFlOUFIxRU5fUG9zICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBEWU5QUjFFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX0RZTlBSMUVOX01zayAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9EWU5QUjFFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogRFlOUFIxRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVA0RU5fUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDRFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QNEVOX01zayAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfVEFNUDRFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVA0RU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QNExWX1BvcyAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVA0TFYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDRMVl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1RBTVA0TFZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QNExWIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDREQkVOX1BvcyAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QNERCRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVA0REJFTl9Nc2sgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9UQU1QNERCRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDREQkVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVA1RU5fUG9zICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDVFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QNUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfVEFNUDVFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVA1RU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QNUxWX1BvcyAgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVA1TFYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDVMVl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1RBTVA1TFZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QNUxWIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDVEQkVOX1BvcyAgICAgICAgKDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QNURCRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVA1REJFTl9Nc2sgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9UQU1QNURCRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDVEQkVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX0RZTlBSMkVOX1BvcyAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogRFlOUFIyRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9EWU5QUjJFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfRFlOUFIyRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IERZTlBSMkVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUFNFRURfU0VFRF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBTRUVEOiBTRUVEIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBTRUVEX1NFRURfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfVEFNUFNFRURfU0VFRF9Qb3MpICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QU0VFRDogU0VFRCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBUSU1FX1NFQ19Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QVElNRTogU0VDIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QVElNRV9TRUNfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfVEFNUFRJTUVfU0VDX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUFRJTUU6IFNFQyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QVElNRV9URU5TRUNfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUFRJTUU6IFRFTlNFQyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfVEFNUFRJTUVfVEVOU0VDX01zayAgICAgICAgICAoMHg3dWwgPDwgUlRDX1RBTVBUSU1FX1RFTlNFQ19Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBUSU1FOiBURU5TRUMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUFRJTUVfTUlOX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBUSU1FOiBNSU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBUSU1FX01JTl9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19UQU1QVElNRV9NSU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QVElNRTogTUlOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBUSU1FX1RFTk1JTl9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QVElNRTogVEVOTUlOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QVElNRV9URU5NSU5fTXNrICAgICAgICAgICgweDd1bCA8PCBSVENfVEFNUFRJTUVfVEVOTUlOX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUFRJTUU6IFRFTk1JTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QVElNRV9IUl9Qb3MgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUFRJTUU6IEhSIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfVEFNUFRJTUVfSFJfTXNrICAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX1RBTVBUSU1FX0hSX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBUSU1FOiBIUiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUFRJTUVfVEVOSFJfUG9zICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBUSU1FOiBURU5IUiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBUSU1FX1RFTkhSX01zayAgICAgICAgICAgKDB4M3VsIDw8IFJUQ19UQU1QVElNRV9URU5IUl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QVElNRTogVEVOSFIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBUSU1FX0haQ05UX1BvcyAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QVElNRTogSFpDTlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QVElNRV9IWkNOVF9Nc2sgICAgICAgICAgICgweDdmdWwgPDwgUlRDX1RBTVBUSU1FX0haQ05UX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUFRJTUU6IEhaQ05UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ0FMX0RBWV9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENBTDogREFZIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENBTF9EQVlfTXNrICAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX1RBTVBDQUxfREFZX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDQUw6IERBWSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENBTF9URU5EQVlfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDQUw6IFRFTkRBWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDQUxfVEVOREFZX01zayAgICAgICAgICAgKDB4M3VsIDw8IFJUQ19UQU1QQ0FMX1RFTkRBWV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ0FMOiBURU5EQVkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDQUxfTU9OX1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ0FMOiBNT04gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ0FMX01PTl9Nc2sgICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfVEFNUENBTF9NT05fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENBTDogTU9OIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ0FMX1RFTk1PTl9Qb3MgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENBTDogVEVOTU9OIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENBTF9URU5NT05fTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDQUxfVEVOTU9OX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDQUw6IFRFTk1PTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENBTF9ZRUFSX1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDQUw6IFlFQVIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDQUxfWUVBUl9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19UQU1QQ0FMX1lFQVJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ0FMOiBZRUFSIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDQUxfVEVOWUVBUl9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ0FMOiBURU5ZRUFSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ0FMX1RFTllFQVJfTXNrICAgICAgICAgICgweGZ1bCA8PCBSVENfVEFNUENBTF9URU5ZRUFSX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENBTDogVEVOWUVBUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DTEtEQ1RMX0xYVEZERU5fUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0xLRENUTDogTFhURkRFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfQ0xLRENUTF9MWFRGREVOX01zayAgICAgICAgICAoMHgxdWwgPDwgUlRDX0NMS0RDVExfTFhURkRFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNMS0RDVEw6IExYVEZERU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0xLRENUTF9MWFRGU1dfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNMS0RDVEw6IExYVEZTVyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NMS0RDVExfTFhURlNXX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19DTEtEQ1RMX0xYVEZTV19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDTEtEQ1RMOiBMWFRGU1cgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NMS0RDVExfTFhUU1BTV19Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDTEtEQ1RMOiBMWFRTUFNXIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19DTEtEQ1RMX0xYVFNQU1dfTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfQ0xLRENUTF9MWFRTUFNXX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0xLRENUTDogTFhUU1BTVyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DTEtEQ1RMX0NMS1NXTElSQ0ZfUG9zICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0xLRENUTDogQ0xLU1dMSVJDRiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBSVENfQ0xLRENUTF9DTEtTV0xJUkNGX01zayAgICAgICAoMHgxdWwgPDwgUlRDX0NMS0RDVExfQ0xLU1dMSVJDRl9Qb3MpICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNMS0RDVEw6IENMS1NXTElSQ0YgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0xLRENUTF9MWFRGQVNURl9Qb3MgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNMS0RDVEw6IExYVEZBU1RGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX0NMS0RDVExfTFhURkFTVEZfTXNrICAgICAgICAgKDB4MXVsIDw8IFJUQ19DTEtEQ1RMX0xYVEZBU1RGX1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDTEtEQ1RMOiBMWFRGQVNURiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NEQlJfU1RPUEJEX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDREJSOiBTVE9QQkQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DREJSX1NUT1BCRF9Nc2sgICAgICAgICAgICAgICgweGZmdWwgPDwgUlRDX0NEQlJfU1RPUEJEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0RCUjogU1RPUEJEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DREJSX0ZBSUxCRF9Qb3MgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0RCUjogRkFJTEJEIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfQ0RCUl9GQUlMQkRfTXNrICAgICAgICAgICAgICAoMHhmZnVsIDw8IFJUQ19DREJSX0ZBSUxCRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNEQlI6IEZBSUxCRCBNYXNrICAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBSVENfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJUQyByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworI2VuZGlmIC8qIF9fUlRDX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zY19yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zY19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjA5ZDQwCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3NjX3JlZy5oCkBAIC0wLDAgKzEsOTc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc2NfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFNDIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1NDX1JFR19IX18KKyNkZWZpbmUgX19TQ19SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNtYXJ0IENhcmQgSG9zdCBJbnRlcmZhY2UgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFNDIFNtYXJ0IENhcmQgSG9zdCBJbnRlcmZhY2UgQ29udHJvbGxlcihTQykKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgU0MgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBTQ19UOjpEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIFNDIFJlY2VpdmUvVHJhbnNtaXQgSG9sZGluZyBCdWZmZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxEQVQgICAgICAgfFJlY2VpdmUvVHJhbnNtaXQgSG9sZGluZyBCdWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Qnkgd3JpdGluZyBkYXRhIHRvIERBVCwgdGhlIFNDIHdpbGwgc2VuZCBvdXQgYW4gOC1iaXQgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBTQ0VOIChTQ25fQ1RMWzBdKSBpcyBub3QgZW5hYmxlZCwgREFUIGNhbm5vdCBiZSBwcm9ncmFtbWVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ5IHJlYWRpbmcgREFULCB0aGUgU0Mgd2lsbCByZXR1cm4gYW4gOC1iaXQgcmVjZWl2ZWQgZGF0YS4KKyAgICAgKiBAdmFyIFNDX1Q6OkNUTAorICAgICAqIE9mZnNldDogMHgwNCAgU0MgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNDRU4gICAgICB8U0MgQ29udHJvbGxlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRoaXMgYml0IHRvIDEgdG8gZW5hYmxlIFNDIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0Mgd2lsbCBmb3JjZSBhbGwgdHJhbnNpdGlvbiB0byBJRExFIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQyBjb250cm9sbGVyIGlzIGVuYWJsZWQgYW5kIGFsbCBmdW5jdGlvbiBjYW4gd29yayBjb3JyZWN0bHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFNDRU4gbXVzdCBiZSBzZXQgdG8gMSBiZWZvcmUgZmlsbGluZyBpbiBvdGhlciBTQyByZWdpc3RlcnMsIG9yIHNtYXJ0IGNhcmQgd2lsbCBub3Qgd29yayBwcm9wZXJseS4KKyAgICAgKiB8WzFdICAgICB8UlhPRkYgICAgIHxSWCBUcmFuc2l0aW9uIERpc2FibGUgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIGZvciBkaXNhYmxlIFJ4IHRyYW5zaXRpb24gZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSByZWNlaXZlciBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVjZWl2ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIEFVVE9DRU4gKFNDbl9DVExbM10pIGlzIGVuYWJsZWQsIHRoaXMgZmllbGQgaXMgaWdub3JlZC4KKyAgICAgKiB8WzJdICAgICB8VFhPRkYgICAgIHxUWCBUcmFuc2l0aW9uIERpc2FibGUgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIGZvciBkaXNhYmxlIFR4IHRyYW5zaXRpb24gZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB0cmFuc2NlaXZlciBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdHJhbnNjZWl2ZXIgRGlzYWJsZWQuCisgICAgICogfFszXSAgICAgfEFVVE9DRU4gICB8QXV0byBDb252ZW50aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIGZvciBlbmFibGUgYXV0byBjb252ZW50aW9uIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvLWNvbnZlbnRpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF1dG8tY29udmVudGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHVzZXIgZW5hYmxlcyBhdXRvIGNvbnZlbnRpb24gZnVuY3Rpb24sIHRoZSBzZXR0aW5nIHN0ZXAgbXVzdCBiZSBkb25lIGJlZm9yZSBBbnN3ZXIgdG8gUmVzZXQgKEFUUikgc3RhdGUgYW5kIHRoZSBmaXJzdCBkYXRhIG11c3QgYmUgMHgzQiBvciAweDNGCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWZ0ZXIgaGFyZHdhcmUgcmVjZWl2ZWQgZmlyc3QgZGF0YSBhbmQgc3RvcmVkIGl0IGF0IGJ1ZmZlciwgaGFyZHdhcmUgd2lsbCBkZWNpZGVkIHRoZSBjb252ZW50aW9uIGFuZCBjaGFuZ2UgdGhlIENPTlNFTCAoU0NuX0NUTFs1OjRdKSBiaXRzIGF1dG9tYXRpY2FsbHkgd2hlbiByZWNlaXZlZCBmaXJzdCBkYXRhIGlzIDB4M0Igb3IgMHgzRgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHJlY2VpdmVkIGZpcnN0IGJ5dGUgaXMgMHgzQiwgVFMgaXMgZGlyZWN0IGNvbnZlbnRpb24sIENPTlNFTCAoU0NuX0NUTFs1OjRdKSB3aWxsIGJlIHNldCB0byAwMCBhdXRvbWF0aWNhbGx5LCBvdGhlcndpc2UgdGhlIFRTIGlzIGludmVyc2UgY29udmVudGlvbiwgYW5kIENPTlNFTCAoU0NuX0NUTFs1OjRdKSB3aWxsIGJlIHNldCB0byAxMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgZmlyc3QgZGF0YSBpcyBub3QgMHgzQiBvciAweDNGLCBoYXJkd2FyZSB3aWxsIHNldCBBQ0VSUklGIChTQ25fSU5UU1RTWzEwXSkgYW5kIGdlbmVyYXRlIGFuIGludGVycnVwdCB0byBDUFUgd2hlbiBBQ0VSUklFTiAoU0NuX0lOVEVOWzEwXSkgaXMgZW5hYmxlZC4KKyAgICAgKiB8WzU6NF0gICB8Q09OU0VMICAgIHxDb252ZW50aW9uIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRGlyZWN0IGNvbnZlbnRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gSW52ZXJzZSBjb252ZW50aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIEFVVE9DRU4gKFNDbl9DVExbM10pIGlzIGVuYWJsZWQsIHRoaXMgZmllbGQgaXMgaWdub3JlZC4KKyAgICAgKiB8Wzc6Nl0gICB8UlhUUkdMViAgIHxSeCBCdWZmZXIgVHJpZ2dlciBMZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgcmVjZWl2aW5nIGJ1ZmZlciBlcXVhbHMgdGhlIFJYVFJHTFYsIHRoZSBSREFJRiB3aWxsIGJlIHNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFJEQUlFTiAoU0NuX0lOVEVOWzBdKSBpcyBlbmFibGVkLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQgdG8gQ1BVLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUnggQnVmZmVyIFRyaWdnZXIgTGV2ZWwgd2l0aCAwMSBieXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJ4IEJ1ZmZlciBUcmlnZ2VyIExldmVsIHdpdGggMDIgYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBSeCBCdWZmZXIgVHJpZ2dlciBMZXZlbCB3aXRoIDAzIGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfFsxMjo4XSAgfEJHVCAgICAgICB8QmxvY2sgR3VhcmQgVGltZSAoQkdUKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJsb2NrIGd1YXJkIHRpbWUgbWVhbnMgdGhlIG1pbmltdW0gaW50ZXJ2YWwgYmV0d2VlbiB0aGUgbGVhZGluZyBlZGdlcyBvZiB0d28gY29uc2VjdXRpdmUgY2hhcmFjdGVycyBiZXR3ZWVuIGRpZmZlcmVudCB0cmFuc2ZlciBkaXJlY3Rpb25zCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIGNvdW50ZXIgZm9yIHRoZSBiaXQgbGVuZ3RoIG9mIGJsb2NrIGd1YXJkIHRpbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBY2NvcmRpbmcgdG8gSVNPIDc4MTYtMywgaW4gVCA9IDAgbW9kZSwgdXNlciBtdXN0IGZpbGwgMTUgKHJlYWwgYmxvY2sgZ3VhcmQgdGltZSA9IDE2LjUpIHRvIHRoaXMgZmllbGQ7IGluIFQgPSAxIG1vZGUsIHVzZXIgbXVzdCBmaWxsIDIxIChyZWFsIGJsb2NrIGd1YXJkIHRpbWUgPSAyMi41KSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgcmVhbCBibG9jayBndWFyZCB0aW1lIGlzIEJHVCArIDEuCisgICAgICogfFsxNDoxM10gfFRNUlNFTCAgICB8VGltZXIgQ2hhbm5lbCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IEFsbCBpbnRlcm5hbCB0aW1lciBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBJbnRlcm5hbCAyNCBiaXQgdGltZXIgYW5kIHR3byA4IGJpdCB0aW1lcnMgRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGNvbmZpZ3VyZSB0aGVtIGJ5IHNldHRpbmcgU0NuX1RNUkNUTDBbMjM6MF0sIFNDbl9UTVJDVEwxWzc6MF0gYW5kIFNDbl9UTVJDVEwyWzc6MF0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlc2VydmUKKyAgICAgKiB8WzE1XSAgICB8TlNCICAgICAgIHxTdG9wIEJpdCBMZW5ndGgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgbGVuZ3RoIG9mIHN0b3AgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgc3RvcCBiaXQgbGVuZ3RoIGlzIDIgRVRVLihmb3IgSVNPIDc4MTYtMyBUPTAgbW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MT0gVGhlIHN0b3AgYml0IGxlbmd0aCBpcyAxIEVUVS4oZm9yIElTTyA3ODE2LTMgVD0xIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGUgZGVmYXVsdCBzdG9wIGJpdCBsZW5ndGggaXMgMi4gU0MgYW5kIFVBUlQgYWRvcHRzIE5TQiB0byBwcm9ncmFtIHRoZSBzdG9wIGJpdCBsZW5ndGguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIFVBUlQgbW9kZSwgUlggY2FuIHJlY2VpdmUgdGhlIGRhdGEgc2VxdWVuY2UgaW4gMSBzdG9wIGJpdCBvciAyIHN0b3AgYml0cyB3aXRoIE5TQiBpcyBzZXQgdG8gMC4KKyAgICAgKiB8WzE4OjE2XSB8UlhSVFkgICAgIHxSWCBFcnJvciBSZXRyeSBDb3VudCBOdW1iZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVjZWl2ZXIgcmV0cmllcyB0aGF0IGFyZSBhbGxvd2VkIHdoZW4gcGFyaXR5IGVycm9yIGhhcyBvY2N1cnJlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGUgcmVhbCByZXRyeSBudW1iZXIgaXMgUlhSVFkgKyAxLCBzbyA4IGlzIHRoZSBtYXhpbXVtIHJldHJ5IG51bWJlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBmaWVsZCBjYW5ub3QgYmUgY2hhbmdlZCB3aGVuIFJYUlRZRU4gZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjaGFuZ2UgZmxvdyBpcyB0byBkaXNhYmxlIFJYUlRZRU4gZmlyc3QgYW5kIHRoZW4gZmlsbCBpbiBuZXcgcmV0cnkgdmFsdWUuCisgICAgICogfFsxOV0gICAgfFJYUlRZRU4gICB8UlggRXJyb3IgUmV0cnkgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgcmVjZWl2ZXIgcmV0cnkgZnVuY3Rpb24gd2hlbiBwYXJpdHkgZXJyb3IgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSWCBlcnJvciByZXRyeSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlggZXJyb3IgcmV0cnkgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBVc2VyIG11c3QgZmlsbCBpbiB0aGUgUlhSVFkgdmFsdWUgYmVmb3JlIGVuYWJsaW5nIHRoaXMgYml0LgorICAgICAqIHxbMjI6MjBdIHxUWFJUWSAgICAgfFRYIEVycm9yIFJldHJ5IENvdW50IE51bWJlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0cmFuc21pdHRlciByZXRyaWVzIHRoYXQgYXJlIGFsbG93ZWQgd2hlbiBwYXJpdHkgZXJyb3IgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGUgcmVhbCByZXRyeSBudW1iZXIgaXMgVFhSVFkgKyAxLCBzbyA4IGlzIHRoZSBtYXhpbXVtIHJldHJ5IG51bWJlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBmaWVsZCBjYW5ub3QgYmUgY2hhbmdlZCB3aGVuIFRYUlRZRU4gZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjaGFuZ2UgZmxvdyBpcyB0byBkaXNhYmxlIFRYUlRZRU4gZmlyc3QgYW5kIHRoZW4gZmlsbCBpbiBuZXcgcmV0cnkgdmFsdWUuCisgICAgICogfFsyM10gICAgfFRYUlRZRU4gICB8VFggRXJyb3IgUmV0cnkgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdHJhbnNtaXR0ZXIgcmV0cnkgZnVuY3Rpb24gd2hlbiBwYXJpdHkgZXJyb3IgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUWCBlcnJvciByZXRyeSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVFggZXJyb3IgcmV0cnkgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzI1OjI0XSB8Q0REQlNFTCAgIHxDYXJkIERldGVjdCBEZS1ib3VuY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIGNhcmQgZGV0ZWN0IGRlLWJvdW5jZSBzZWxlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEZS1ib3VuY2Ugc2FtcGxlIGNhcmQgaW5zZXJ0IG9uY2UgcGVyIDM4NCAoMTI4ICogMykgU0MgbW9kdWxlIGNsb2NrcyBhbmQgZGUtYm91bmNlIHNhbXBsZSBjYXJkIHJlbW92YWwgb25jZSBwZXIgMTI4IFNDIG1vZHVsZSBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlc2VydmVkLgorICAgICAqIHxbMjZdICAgIHxDRExWICAgICAgfENhcmQgRGV0ZWN0IExldmVsIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXaGVuIGhhcmR3YXJlIGRldGVjdHMgdGhlIGNhcmQgZGV0ZWN0IHBpbiAoU0NuX0NEKSBmcm9tIGhpZ2ggdG8gbG93LCBpdCBpbmRpY2F0ZXMgYSBjYXJkIGlzIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIGhhcmR3YXJlIGRldGVjdHMgdGhlIGNhcmQgZGV0ZWN0IHBpbiAoU0NuX0NEKSBmcm9tIGxvdyB0byBoaWdoLCBpdCBpbmRpY2F0ZXMgYSBjYXJkIGlzIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFVzZXIgbXVzdCBzZWxlY3QgY2FyZCBkZXRlY3QgbGV2ZWwgYmVmb3JlIFNtYXJ0IENhcmQgY29udHJvbGxlciBlbmFibGVkLgorICAgICAqIHxbMzBdICAgIHxTWU5DICAgICAgfFNZTkMgRmxhZyBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEdWUgdG8gc3luY2hyb25pemF0aW9uLCB1c2VyIHNob3VsZCBjaGVjayB0aGlzIGJpdCBiZWZvcmUgd3JpdGluZyBhIG5ldyB2YWx1ZSB0byBSWFJUWSBhbmQgVFhSVFkgZmllbGRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTeW5jaHJvbml6aW5nIGlzIGNvbXBsZXRpb24sIHVzZXIgY2FuIHdyaXRlIG5ldyBkYXRhIHRvIFJYUlRZIGFuZCBUWFJUWS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTGFzdCB2YWx1ZSBpcyBzeW5jaHJvbml6aW5nLgorICAgICAqIEB2YXIgU0NfVDo6QUxUQ1RMCisgICAgICogT2Zmc2V0OiAweDA4ICBTQyBBbHRlcm5hdGUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFRYUlNUICAgICB8VFggU29mdHdhcmUgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFRYUlNUIGlzIHNldCwgYWxsIHRoZSBieXRlcyBpbiB0aGUgdHJhbnNtaXQgYnVmZmVyIGFuZCBUWCBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lIHdpbGwgYmUgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCB0aGUgVFggaW50ZXJuYWwgc3RhdGUgbWFjaGluZSBhbmQgcG9pbnRlcnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBhdXRvIGNsZWFyZWQgYWZ0ZXIgcmVzZXQgaXMgY29tcGxldGUuCisgICAgICogfFsxXSAgICAgfFJYUlNUICAgICB8UnggU29mdHdhcmUgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFJYUlNUIGlzIHNldCwgYWxsIHRoZSBieXRlcyBpbiB0aGUgcmVjZWl2ZSBidWZmZXIgYW5kIFJ4IGludGVybmFsIHN0YXRlIG1hY2hpbmUgd2lsbCBiZSBjbGVhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IHRoZSBSeCBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lIGFuZCBwb2ludGVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGF1dG8gY2xlYXJlZCBhZnRlciByZXNldCBpcyBjb21wbGV0ZS4KKyAgICAgKiB8WzJdICAgICB8REFDVEVOICAgIHxEZWFjdGl2YXRpb24gU2VxdWVuY2UgR2VuZXJhdG9yIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBlbmFibGVzIFNDIGNvbnRyb2xsZXIgdG8gaW5pdGlhdGUgdGhlIGNhcmQgYnkgZGVhY3RpdmF0aW9uIHNlcXVlbmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERlYWN0aXZhdGlvbiBzZXF1ZW5jZSBnZW5lcmF0b3IgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV2hlbiB0aGUgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGNvbXBsZXRlZCwgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYW5kIHRoZSBJTklUSUYgKFNDbl9JTlRTVFNbOF0pIHdpbGwgYmUgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgZmllbGQgd2lsbCBiZSBjbGVhcmVkIGJ5IFRYUlNUIChTQ25fQUxUQ1RMWzBdKSBhbmQgUlhSU1QgKFNDbl9BTFRDVExbMV0pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgZG8gbm90IGZpbGwgaW4gdGhpcyBiaXQgREFDVEVOLCBUWFJTVCBhbmQgUlhSU1QgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogSWYgU0NFTiAoU0NuX0NUTFswXSkgaXMgbm90IGVuYWJsZWQsIHRoaXMgZmlsZWQgY2Fubm90IGJlIHByb2dyYW1tZWQuCisgICAgICogfFszXSAgICAgfEFDVEVOICAgICB8QWN0aXZhdGlvbiBTZXF1ZW5jZSBHZW5lcmF0b3IgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgU0MgY29udHJvbGxlciB0byBpbml0aWF0ZSB0aGUgY2FyZCBieSBhY3RpdmF0aW9uIHNlcXVlbmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFjdGl2YXRpb24gc2VxdWVuY2UgZ2VuZXJhdG9yIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdoZW4gdGhlIGFjdGl2YXRpb24gc2VxdWVuY2UgY29tcGxldGVkLCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSBhbmQgdGhlIElOSVRJRiAoU0NuX0lOVFNUU1s4XSkgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBmaWVsZCB3aWxsIGJlIGNsZWFyZWQgYnkgVFhSU1QgKFNDbl9BTFRDVExbMF0pIGFuZCBSWFJTVCAoU0NuX0FMVENUTFsxXSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBkbyBub3QgZmlsbCBpbiB0aGlzIGJpdCBBQ1RFTiwgVFhSU1QgYW5kIFJYUlNUIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIFNDRU4gKFNDbl9DVExbMF0pIGlzIG5vdCBlbmFibGVkLCB0aGlzIGZpbGVkIGNhbm5vdCBiZSBwcm9ncmFtbWVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU0OiBEdXJpbmcgdGhlIGFjdGl2YXRpb24gc2VxdWVuY2UsIFJYIGlzIGRpc2FibGVkIGF1dG9tYXRpY2FsbHkgYW5kIGNhbiBub3QgcmVjZWl2ZSBkYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWZ0ZXIgdGhlIGFjdGl2YXRpb24gc2VxdWVuY2UgY29tcGxldGlvbiwgUlhPRkYgKFNDbl9DVExbMV0pIGtlZXBzIHRoZSBzdGF0ZSBiZWZvcmUgaGFyZHdhcmUgYWN0aXZhdGlvbi4KKyAgICAgKiB8WzRdICAgICB8V0FSU1RFTiAgIHxXYXJtIFJlc2V0IFNlcXVlbmNlIEdlbmVyYXRvciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyBTQyBjb250cm9sbGVyIHRvIGluaXRpYXRlIHRoZSBjYXJkIGJ5IHdhcm0gcmVzZXQgc2VxdWVuY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2FybSByZXNldCBzZXF1ZW5jZSBnZW5lcmF0b3IgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV2hlbiB0aGUgd2FybSByZXNldCBzZXF1ZW5jZSBjb21wbGV0ZWQsIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGFuZCB0aGUgSU5JVElGIChTQ25fSU5UU1RTWzhdKSB3aWxsIGJlIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGZpZWxkIHdpbGwgYmUgY2xlYXJlZCBieSBUWFJTVCAoU0NuX0FMVENUTFswXSkgYW5kIFJYUlNUIChTQ25fQUxUQ1RMWzFdKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGRvIG5vdCBmaWxsIGluIHRoaXMgYml0IFdBUlNURU4sIFRYUlNUIGFuZCBSWFJTVCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBJZiBTQ0VOIChTQ25fQ1RMWzBdKSBpcyBub3QgZW5hYmxlZCwgdGhpcyBmaWxlZCBjYW5ub3QgYmUgcHJvZ3JhbW1lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlNDogRHVyaW5nIHRoZSB3YXJtIHJlc2V0IHNlcXVlbmNlLCBSWCBpcyBkaXNhYmxlZCBhdXRvbWF0aWNhbGx5IGFuZCBjYW4gbm90IHJlY2VpdmUgZGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFmdGVyIHRoZSB3YXJtIHJlc2V0IHNlcXVlbmNlIGNvbXBsZXRpb24sIFJYT0ZGIChTQ25fQ1RMWzFdKSBrZWVwcyB0aGUgc3RhdGUgYmVmb3JlIHBlcmZvcm0gd2FybSByZXNldCBzZXF1ZW5jZS4KKyAgICAgKiB8WzVdICAgICB8Q05URU4wICAgIHxJbnRlcm5hbCBUaW1lcjAgU3RhcnQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgVGltZXIgMCB0byBzdGFydCBjb3VudGluZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGZpbGwgMCB0byBzdG9wIGl0IGFuZCBzZXQgMSB0byByZWxvYWQgYW5kIGNvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvdW50ZXIgdW5pdCBpcyBFVFUgYmFzZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3RvcHMgY291bnRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0YXJ0IGNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIGludGVybmFsIDI0IGJpdCB0aW1lciB3aGVuIFRNUlNFTCAoU0NuX0NUTFsxNDoxM10pIGlzIDExIG9ubHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIHRoZSBvcGVyYXRpb24gbW9kZSBpcyBub3QgaW4gYXV0by1yZWxvYWQgbW9kZSAoU0NuX1RNUkNUTDBbMjZdID0gMCksIHRoaXMgYml0IHdpbGwgYmUgYXV0by1jbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBJZiBTQ0VOIChTQ25fQ1RMWzBdKSBpcyBub3QgZW5hYmxlZCwgdGhpcyBmaWxlZCBjYW5ub3QgYmUgcHJvZ3JhbW1lZAorICAgICAqIHxbNl0gICAgIHxDTlRFTjEgICAgfEludGVybmFsIFRpbWVyMSBTdGFydCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyBUaW1lciAxIHRvIHN0YXJ0IGNvdW50aW5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gZmlsbCAwIHRvIHN0b3AgaXQgYW5kIHNldCAxIHRvIHJlbG9hZCBhbmQgY291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY291bnRlciB1bml0IGlzIEVUVSBiYXNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTdG9wcyBjb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RhcnQgY291bnRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgaW50ZXJuYWwgOCBiaXQgdGltZXIgd2hlbiBUTVJTRUwoU0NuX0NUTFsxNDoxM10pIGlzIDExIG9ubHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEbyBub3QgZmlsbCBDTlRFTjEgd2hlbiBUTVJTRUwgKFNDbl9DVExbMTQ6MTNdKSBpcyBub3QgZXF1YWwgdG8gMTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIHRoZSBvcGVyYXRpb24gbW9kZSBpcyBub3QgaW4gYXV0by1yZWxvYWQgbW9kZSAoU0NuX1RNUkNUTDFbMjZdID0gMCksIHRoaXMgYml0IHdpbGwgYmUgYXV0by1jbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBJZiBTQ0VOIChTQ25fQ1RMWzBdKSBpcyBub3QgZW5hYmxlZCwgdGhpcyBmaWxlZCBjYW5ub3QgYmUgcHJvZ3JhbW1lZC4KKyAgICAgKiB8WzddICAgICB8Q05URU4yICAgIHxJbnRlcm5hbCBUaW1lcjIgU3RhcnQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgVGltZXIgMiB0byBzdGFydCBjb3VudGluZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGZpbGwgMCB0byBzdG9wIGl0IGFuZCBzZXQgMSB0byByZWxvYWQgYW5kIGNvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvdW50ZXIgdW5pdCBpcyBFVFUgYmFzZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3RvcHMgY291bnRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0YXJ0IGNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIGludGVybmFsIDggYml0IHRpbWVyIHdoZW4gVE1SU0VMIChTQ25fQ1RMWzE0OjEzXSkgaXMgMTEgb25seQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERvIG5vdCBmaWxsIGluIENOVEVOMiB3aGVuIFRNUlNFTCAoU0NuX0NUTFsxNDoxM10pIGlzIG5vdCBlcXVhbCB0byAxMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSWYgdGhlIG9wZXJhdGlvbiBtb2RlIGlzIG5vdCBpbiBhdXRvLXJlbG9hZCBtb2RlIChTQ25fVE1SQ1RMMlsyNl0gPSAwKSwgdGhpcyBiaXQgd2lsbCBiZSBhdXRvLWNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIFNDRU4gKFNDbl9DVExbMF0pIGlzIG5vdCBlbmFibGVkLCB0aGlzIGZpbGVkIGNhbm5vdCBiZSBwcm9ncmFtbWVkLgorICAgICAqIHxbOTo4XSAgIHxJTklUU0VMICAgfEluaXRpYWwgVGltaW5nIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGRzIGluZGljYXRlcyB0aGUgaW5pdGlhbCB0aW1pbmcgb2YgaGFyZHdhcmUgYWN0aXZhdGlvbiwgd2FybS1yZXNldCBvciBkZWFjdGl2YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHVuaXQgb2YgaW5pdGlhbCB0aW1pbmcgaXMgU0MgbW9kdWxlIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFjdGl2YXRpb246IHJlZmVyIHRvIFNDIEFjdGl2YXRpb24gU2VxdWVuY2UgaW4gRmlndXJlIDYuMTctNCBTQyBBY3RpdmF0aW9uIFNlcXVlbmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdhcm0tcmVzZXQ6IHJlZmVyIHRvIFdhcm0tUmVzZXQgU2VxdWVuY2UgaW4gRmlndXJlIDYuMTctNSBTQyBXYXJtIFJlc2V0IFNlcXVlbmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERlYWN0aXZhdGlvbjogcmVmZXIgdG8gRGVhY3RpdmF0aW9uIFNlcXVlbmNlIGluIEZpZ3VyZSA2LjE3LTYgU0MgRGVhY3RpdmF0aW9uIFNlcXVlbmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gc2V0IGFjdGl2YXRpb24gYW5kIHdhcm0gcmVzZXQgaW4gVGltZXIwIG9wZXJhdGlvbiBtb2RlIDAwMTEsIGl0IG1heSBoYXZlIGRldmlhdGlvbiBhdCBtb3N0IDEyOCBTQyBtb2R1bGUgY2xvY2sgY3ljbGVzLgorICAgICAqIHxbMTFdICAgIHxBREFDRU4gICAgfEF1dG8gRGVhY3RpdmF0aW9uIFdoZW4gQ2FyZCBSZW1vdmFsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCBmb3IgZW5hYmxlIGhhcmR3YXJlIGF1dG8gZGVhY3RpdmF0aW9uIHdoZW4gc21hcnQgY2FyZCBpcyByZW1vdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvIGRlYWN0aXZhdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXV0byBkZWFjdGl2YXRpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIHRoZSBjYXJkIGlzIHJlbW92ZWQsIGhhcmR3YXJlIHdpbGwgc3RvcCBhbnkgcHJvY2VzcyBhbmQgdGhlbiBkbyBkZWFjdGl2YXRpb24gc2VxdWVuY2UgaWYgdGhpcyBiaXQgaXMgc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgYXV0byBkZWFjdGl2YXRpb24gcHJvY2VzcyBjb21wbGV0ZXMsIGhhcmR3YXJlIHdpbGwgc2V0IElOSVRJRiAoU0NuX0lOVFNUU1s4XSkgYWxzby4KKyAgICAgKiB8WzEyXSAgICB8UlhCR1RFTiAgIHxSZWNlaXZlciBCbG9jayBHdWFyZCBUaW1lIEZ1bmN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBlbmFibGVzIHRoZSByZWNlaXZlciBibG9jayBndWFyZCB0aW1lIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlciBibG9jayBndWFyZCB0aW1lIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlciBibG9jayBndWFyZCB0aW1lIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxM10gICAgfEFDVFNUUzAgICB8SW50ZXJuYWwgVGltZXIwIEFjdGl2ZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIHRpbWVyIGNvdW50ZXIgc3RhdHVzIG9mIHRpbWVyMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIwIGlzIG5vdCBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMCBpcyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGltZXIwIGlzIGFjdGl2ZSBkb2VzIG5vdCBhbHdheXMgbWVhbiB0aW1lcjAgaXMgY291bnRpbmcgdGhlIENOVCAoU0NuX1RNUkNUTDBbMjM6MF0pLgorICAgICAqIHxbMTRdICAgIHxBQ1RTVFMxICAgfEludGVybmFsIFRpbWVyMSBBY3RpdmUgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoZSB0aW1lciBjb3VudGVyIHN0YXR1cyBvZiB0aW1lcjEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMSBpcyBub3QgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lcjEgaXMgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRpbWVyMSBpcyBhY3RpdmUgZG9lcyBub3QgYWx3YXlzIG1lYW4gdGltZXIxIGlzIGNvdW50aW5nIHRoZSBDTlQgKFNDbl9UTVJDVEwxWzc6MF0pLgorICAgICAqIHxbMTVdICAgIHxBQ1RTVFMyICAgfEludGVybmFsIFRpbWVyMiBBY3RpdmUgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoZSB0aW1lciBjb3VudGVyIHN0YXR1cyBvZiB0aW1lcjIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMiBpcyBub3QgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lcjIgaXMgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRpbWVyMiBpcyBhY3RpdmUgZG9lcyBub3QgYWx3YXlzIG1lYW4gdGltZXIyIGlzIGNvdW50aW5nIHRoZSBDTlQgKFNDbl9UTVJDVEwyWzc6MF0pLgorICAgICAqIHxbMzFdICAgIHxTWU5DICAgICAgfFNZTkMgRmxhZyBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEdWUgdG8gc3luY2hyb25pemF0aW9uLCB1c2VyIHNob3VsZCBjaGVjayB0aGlzIGJpdCB3aGVuIHdyaXRpbmcgYSBuZXcgdmFsdWUgdG8gU0NuX0FMVENUTCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3luY2hyb25pemluZyBpcyBjb21wbGV0aW9uLCB1c2VyIGNhbiB3cml0ZSBuZXcgZGF0YSB0byBTQ25fQUxUQ1RMIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMYXN0IHZhbHVlIGlzIHN5bmNocm9uaXppbmcuCisgICAgICogQHZhciBTQ19UOjpFR1QKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIFNDIEV4dHJhIEd1YXJkIFRpbWUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxFR1QgICAgICAgfEV4dHJhIEd1YXJkIFRpbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgZXh0cmEgZ3VhcmQgdGltZSB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgZXh0cmEgZ3VhcmQgdGltZSB1bml0IGlzIEVUVSBiYXNlLgorICAgICAqIEB2YXIgU0NfVDo6UlhUT1VUCisgICAgICogT2Zmc2V0OiAweDEwICBTQyBSZWNlaXZlIEJ1ZmZlciBUaW1lLW91dCBDb3VudGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzg6MF0gICB8UkZUTSAgICAgIHxTQyBSZWNlaXZlciBGSUZPIFRpbWUtb3V0IENvdW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdGltZS1vdXQgZG93biBjb3VudGVyIHJlc2V0cyBhbmQgc3RhcnRzIGNvdW50aW5nIHdoZW5ldmVyIHRoZSBSWCBidWZmZXIgcmVjZWl2ZWQgYSBuZXcgZGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9uY2UgdGhlIGNvdW50ZXIgZGVjcmVhc2UgdG8gMSBhbmQgbm8gbmV3IGRhdGEgaXMgcmVjZWl2ZWQgb3IgQ1BVIGRvZXMgbm90IHJlYWQgZGF0YSBieSByZWFkaW5nIFNDbl9EQVQsIGEgcmVjZWl2ZXIgdGltZS1vdXQgZmxhZyBSWFRPSUYgKFNDbl9JTlRTVFNbOV0pIHdpbGwgYmUgc2V0LCBhbmQgaGFyZHdhcmUgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgdG8gQ1BVIHdoZW4gUlhUT0lFTiAoU0NuX0lOVEVOWzldKSBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGUgY291bnRlciB1bml0IGlzIEVUVSBiYXNlZCBhbmQgdGhlIGludGVydmFsIG9mIHRpbWUtb3V0IGlzIFJGVE0gKyAwLjUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEZpbGxpbmcgaW4gYWxsIDAgdG8gdGhpcyBmaWVsZCBpbmRpY2F0ZXMgdG8gZGlzYWJsZSB0aGlzIGZ1bmN0aW9uLgorICAgICAqIEB2YXIgU0NfVDo6RVRVQ1RMCisgICAgICogT2Zmc2V0OiAweDE0ICBTQyBFbGVtZW50IFRpbWUgVW5pdCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzExOjBdICB8RVRVUkRJViAgIHxFVFUgUmF0ZSBEaXZpZGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZpZWxkIGlzIHVzZWQgZm9yIEVUVSBjbG9jayByYXRlIGRpdmlkZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlYWwgRVRVIGlzIEVUVVJESVYgKyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFVzZXIgY2FuIGNvbmZpZ3VyZSB0aGlzIGZpZWxkLCBidXQgdGhpcyBmaWVsZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAweDA0LgorICAgICAqIEB2YXIgU0NfVDo6SU5URU4KKyAgICAgKiBPZmZzZXQ6IDB4MTggIFNDIEludGVycnVwdCBFbmFibGUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFJEQUlFTiAgICB8UmVjZWl2ZSBEYXRhIFJlYWNoIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIGVuYWJsZSByZWNlaXZlZCBkYXRhIHJlYWNoaW5nIHRyaWdnZXIgbGV2ZWwgUlhUUkdMViAoU0NuX0NUTFs3OjZdKSBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgZGF0YSByZWFjaCB0cmlnZ2VyIGxldmVsIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBkYXRhIHJlYWNoIHRyaWdnZXIgbGV2ZWwgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFRCRUlFTiAgICB8VHJhbnNtaXQgQnVmZmVyIEVtcHR5IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIGVuYWJsZSB0cmFuc21pdCBidWZmZXIgZW1wdHkgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBidWZmZXIgZW1wdHkgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBidWZmZXIgZW1wdHkgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFRFUlJJRU4gICB8VHJhbnNmZXIgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZW5hYmxlIHRyYW5zZmVyIGVycm9yIGludGVycnVwdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB0cmFuc2ZlciBlcnJvciBzdGF0ZXMgaXMgYXQgU0NuX1NUQVRVUyByZWdpc3RlciB3aGljaCBpbmNsdWRlcyByZWNlaXZlciBicmVhayBlcnJvciBCRUYgKFNDbl9TVEFUVVNbNl0pLCBmcmFtZSBlcnJvciBGRUYgKFNDbl9TVEFUVVNbNV0pLCBwYXJpdHkgZXJyb3IgUEVGIChTQ25fU1RBVFVTWzRdKSwgcmVjZWl2ZSBidWZmZXIgb3ZlcmZsb3cgZXJyb3IgUlhPViAoU0NuX1NUQVRVU1swXSksIHRyYW5zbWl0IGJ1ZmZlciBvdmVyZmxvdyBlcnJvciBUWE9WIChTQ25fU1RBVFVTWzhdKSwgcmVjZWl2ZXIgcmV0cnkgb3ZlciBsaW1pdCBlcnJvciBSWE9WRVJSIChTQ25fU1RBVFVTWzIyXSkgYW5kIHRyYW5zbWl0dGVyIHJldHJ5IG92ZXIgbGltaXQgZXJyb3IgVFhPVkVSUiAoU0NuX1NUQVRVU1szMF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc2ZlciBlcnJvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zZmVyIGVycm9yIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxUTVIwSUVOICAgfFRpbWVyMCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCB0byBlbmFibGUgVGltZXIwIGludGVycnVwdCBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIwIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIwIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxUTVIxSUVOICAgfFRpbWVyMSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCB0byBlbmFibGUgdGhlIFRpbWVyMSBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8VE1SMklFTiAgIHxUaW1lcjIgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZW5hYmxlIFRpbWVyMiBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMiBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMiBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8QkdUSUVOICAgIHxCbG9jayBHdWFyZCBUaW1lIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIGVuYWJsZSBibG9jayBndWFyZCB0aW1lIGludGVycnVwdCBpbiByZWNlaXZlIGRpcmVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQmxvY2sgZ3VhcmQgdGltZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJsb2NrIGd1YXJkIHRpbWUgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgdmFsaWQgb25seSBmb3IgcmVjZWl2ZSByZWNlaXZlIGRpcmVjdGlvbiBibG9jayBndWFyZCB0aW1lLgorICAgICAqIHxbN10gICAgIHxDRElFTiAgICAgfENhcmQgRGV0ZWN0IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIGVuYWJsZSBjYXJkIGRldGVjdCBpbnRlcnJ1cHQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY2FyZCBkZXRlY3Qgc3RhdHVzIGlzIENEUElOU1RTIChTQ25fU1RBVFVTWzEzXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcmQgZGV0ZWN0IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FyZCBkZXRlY3QgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfElOSVRJRU4gICB8SW5pdGlhbCBFbmQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZW5hYmxlIGFjdGl2YXRpb24gKEFDVEVOIChTQ25fQUxUQ1RMWzNdID0gMSkpLCBkZWFjdGl2YXRpb24gKERBQ1RFTiAoU0NuX0FMVENUTFsyXSA9IDEpKSBhbmQgd2FybSByZXNldCAoV0FSU1RFTiAoU0NuX0FMVENUTCBbNF0pKSBzZXF1ZW5jZSBjb21wbGV0ZSBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluaXRpYWwgZW5kIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5pdGlhbCBlbmQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs5XSAgICAgfFJYVE9JRU4gICB8UmVjZWl2ZXIgQnVmZmVyIFRpbWUtb3V0IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIGVuYWJsZSByZWNlaXZlciBidWZmZXIgdGltZS1vdXQgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlciBidWZmZXIgdGltZS1vdXQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlciBidWZmZXIgdGltZS1vdXQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxMF0gICAgfEFDRVJSSUVOICB8QXV0byBDb252ZW50aW9uIEVycm9yIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIGVuYWJsZSBhdXRvLWNvbnZlbnRpb24gZXJyb3IgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvLWNvbnZlbnRpb24gZXJyb3IgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBdXRvLWNvbnZlbnRpb24gZXJyb3IgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogQHZhciBTQ19UOjpJTlRTVFMKKyAgICAgKiBPZmZzZXQ6IDB4MUMgIFNDIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxSREFJRiAgICAgfFJlY2VpdmUgRGF0YSBSZWFjaCBJbnRlcnJ1cHQgU3RhdHVzIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIHJlY2VpdmVkIGRhdGEgcmVhY2hpbmcgdHJpZ2dlciBsZXZlbCBSWFRSR0xWIChTQ25fQ1RMWzc6Nl0pIGludGVycnVwdCBzdGF0dXMgZmxhZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTnVtYmVyIG9mIHJlY2VpdmUgYnVmZmVyIGlzIGxlc3MgdGhhbiBSWFRSR0xWIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE51bWJlciBvZiByZWNlaXZlIGJ1ZmZlciBkYXRhIGVxdWFscyB0aGUgUlhUUkdMViBzZXR0aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHVzZXIgcmVhZHMgZGF0YSBmcm9tIFNDbl9EQVQgYW5kIHJlY2VpdmVyIGJ1ZmZlciBkYXRhIGJ5dGUgbnVtYmVyIGlzIGxlc3MgdGhhbiBSWFRSR0xWLCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzFdICAgICB8VEJFSUYgICAgIHxUcmFuc21pdCBCdWZmZXIgRW1wdHkgSW50ZXJydXB0IFN0YXR1cyBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIGZvciB0cmFuc21pdCBidWZmZXIgZW1wdHkgaW50ZXJydXB0IHN0YXR1cyBmbGFnLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBidWZmZXIgaXMgbm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBidWZmZXIgaXMgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdXNlciB3YW50cyB0byBjbGVhciB0aGlzIGJpdCwgdXNlciBtdXN0IHdyaXRlIGRhdGEgdG8gREFUIChTQ25fREFUWzc6MF0pIGFuZCB0aGVuIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHxbMl0gICAgIHxURVJSSUYgICAgfFRyYW5zZmVyIEVycm9yIEludGVycnVwdCBTdGF0dXMgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgdHJhbnNmZXIgZXJyb3IgaW50ZXJydXB0IHN0YXR1cyBmbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHRyYW5zZmVyIGVycm9yIHN0YXRlcyBpcyBhdCBTQ25fU1RBVFVTIHJlZ2lzdGVyIHdoaWNoIGluY2x1ZGVzIHJlY2VpdmVyIGJyZWFrIGVycm9yIEJFRiAoU0NuX1NUQVRVU1s2XSksIGZyYW1lIGVycm9yIEZFRiAoU0NuX1NUQVRVU1s1XSwgcGFyaXR5IGVycm9yIFBFRiAoU0NuX1NUQVRVU1s0XSBhbmQgcmVjZWl2ZSBidWZmZXIgb3ZlcmZsb3cgZXJyb3IgUlhPViAoU0NuX1NUQVRVU1swXSksIHRyYW5zbWl0IGJ1ZmZlciBvdmVyZmxvdyBlcnJvciBUWE9WIChTQ25fU1RBVFVTWzhdKSwgcmVjZWl2ZXIgcmV0cnkgb3ZlciBsaW1pdCBlcnJvciBSWE9WRVJSIChTQ25fU1RBVFVTWzIyXSBvciB0cmFuc21pdHRlciByZXRyeSBvdmVyIGxpbWl0IGVycm9yIFRYT1ZFUlIgKFNDbl9TVEFUVVNbMzBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNmZXIgZXJyb3IgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zZmVyIGVycm9yIGludGVycnVwdCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBmaWVsZCBpcyB0aGUgc3RhdHVzIGZsYWcgb2YgQkVGLCBGRUYsIFBFRiwgUlhPViwgVFhPViwgUlhPVkVSUiBvciBUWE9WRVJSLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFszXSAgICAgfFRNUjBJRiAgICB8VGltZXIwIEludGVycnVwdCBTdGF0dXMgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgVGltZXIwIGludGVycnVwdCBzdGF0dXMgZmxhZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIwIGludGVycnVwdCBkaWQgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lcjAgaW50ZXJydXB0IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzRdICAgICB8VE1SMUlGICAgIHxUaW1lcjEgSW50ZXJydXB0IFN0YXR1cyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIGZvciBUaW1lcjEgaW50ZXJydXB0IHN0YXR1cyBmbGFnLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lcjEgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMSBpbnRlcnJ1cHQgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNV0gICAgIHxUTVIySUYgICAgfFRpbWVyMiBJbnRlcnJ1cHQgU3RhdHVzIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIFRpbWVyMiBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMiBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIyIGludGVycnVwdCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs2XSAgICAgfEJHVElGICAgICB8QmxvY2sgR3VhcmQgVGltZSBJbnRlcnJ1cHQgU3RhdHVzIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIGluZGljYXRlIGJsb2NrIGd1YXJkIHRpbWUgaW50ZXJydXB0IHN0YXR1cyBmbGFnIGluIHJlY2VpdmUgZGlyZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCbG9jayBndWFyZCB0aW1lIGludGVycnVwdCBkaWQgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCbG9jayBndWFyZCB0aW1lIGludGVycnVwdCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgdmFsaWQgb25seSB3aGVuIFJYQkdURU4gKFNDbl9BTFRDVExbMTJdKSBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs3XSAgICAgfENESUYgICAgICB8Q2FyZCBEZXRlY3QgSW50ZXJydXB0IFN0YXR1cyBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIGZvciBjYXJkIGRldGVjdCBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY2FyZCBkZXRlY3Qgc3RhdHVzIGlzIENJTlNFUlQgKFNDbl9TVEFUVVNbMTJdKSBhbmQgQ1JFTU9WRSAoU0NuX1NUQVRVU1sxMV0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXJkIGRldGVjdCBldmVudCBkaWQgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXJkIGRldGVjdCBldmVudCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHksIHVzZXIgbXVzdCB0byBjbGVhciBDSU5TRVJUIG9yIENSRU1PVkUgc3RhdHVzIHRvIGNsZWFyIGl0LgorICAgICAqIHxbOF0gICAgIHxJTklUSUYgICAgfEluaXRpYWwgRW5kIEludGVycnVwdCBTdGF0dXMgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgYWN0aXZhdGlvbiAoQUNURU4gKFNDbl9BTFRDVExbM10pKSwgZGVhY3RpdmF0aW9uIChEQUNURU4gKFNDbl9BTFRDVExbMl0pKSBhbmQgd2FybSByZXNldCAoV0FSU1RFTiAoU0NuX0FMVENUTFs0XSkpIHNlcXVlbmNlIGludGVycnVwdCBzdGF0dXMgZmxhZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5pdGlhbCBzZXF1ZW5jZSBpcyBub3QgY29tcGxldGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluaXRpYWwgc2VxdWVuY2UgaXMgY29tcGxldGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzldICAgICB8UlhUT0lGICAgIHxSZWNlaXZlIEJ1ZmZlciBUaW1lLW91dCBJbnRlcnJ1cHQgU3RhdHVzIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIGluZGljYXRlIHJlY2VpdmUgYnVmZmVyIHRpbWUtb3V0IGludGVycnVwdCBzdGF0dXMgZmxhZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBidWZmZXIgdGltZS1vdXQgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgYnVmZmVyIHRpbWUtb3V0IGludGVycnVwdCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHksIHVzZXIgbXVzdCByZWFkIGFsbCByZWNlaXZlIGJ1ZmZlciByZW1haW5pbmcgZGF0YSBieSByZWFkaW5nIFNDbl9EQVQgcmVnaXN0ZXIgdG8gY2xlYXIgaXQuCisgICAgICogfFsxMF0gICAgfEFDRVJSSUYgICB8QXV0byBDb252ZW50aW9uIEVycm9yIEludGVycnVwdCBTdGF0dXMgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIGF1dG8gY29udmVudGlvbiBzZXF1ZW5jZSBlcnJvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZWQgVFMgYXQgQVRSIHN0YXRlIGlzIDB4M0Igb3IgMHgzRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZWQgVFMgYXQgQVRSIHN0YXRlIGlzIG5laXRoZXIgMHgzQiBub3IgMHgzRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogQHZhciBTQ19UOjpTVEFUVVMKKyAgICAgKiBPZmZzZXQ6IDB4MjAgIFNDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFJYT1YgICAgICB8UmVjZWl2ZSBPdmVyZmxvdyBFcnJvciBTdGF0dXMgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIFJ4IGJ1ZmZlciBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUnggYnVmZmVyIGlzIG5vdCBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUnggYnVmZmVyIGlzIG92ZXJmbG93IHdoZW4gdGhlIG51bWJlciBvZiByZWNlaXZlZCBieXRlcyBpcyBncmVhdGVyIHRoYW4gUnggYnVmZmVyIHNpemUgKDQgYnl0ZXMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzFdICAgICB8UlhFTVBUWSAgIHxSZWNlaXZlIEJ1ZmZlciBFbXB0eSBTdGF0dXMgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyBSeCBidWZmZXIgZW1wdHkgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSeCBidWZmZXIgaXMgbm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSeCBidWZmZXIgaXMgZW1wdHksIGl0IG1lYW5zIHRoZSBsYXN0IGJ5dGUgb2YgUnggYnVmZmVyIGhhcyByZWFkIGZyb20gREFUIChTQ25fREFUWzc6MF0pIGJ5IENQVS4KKyAgICAgKiB8WzJdICAgICB8UlhGVUxMICAgIHxSZWNlaXZlIEJ1ZmZlciBGdWxsIFN0YXR1cyBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIFJ4IGJ1ZmZlciBmdWxsIG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUnggYnVmZmVyIGNvdW50IGlzIGxlc3MgdGhhbiA0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSeCBidWZmZXIgY291bnQgZXF1YWxzIHRvIDQuCisgICAgICogfFs0XSAgICAgfFBFRiAgICAgICB8UmVjZWl2ZXIgUGFyaXR5IEVycm9yIFN0YXR1cyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIGxvZ2ljIDEgd2hlbmV2ZXIgdGhlIHJlY2VpdmVkIGNoYXJhY3RlciBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcGFyaXR5IGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZXIgcGFyaXR5IGVycm9yIGZsYWcgZGlkIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZXIgcGFyaXR5IGVycm9yIGZsYWcgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSWYgQ1BVIHNldHMgcmVjZWl2ZXIgcmV0cmllcyBmdW5jdGlvbiBieSBzZXR0aW5nIFJYUlRZRU4gKFNDbl9DVExbMTldKSwgaGFyZHdhcmUgd2lsbCBub3Qgc2V0IHRoaXMgZmxhZy4KKyAgICAgKiB8WzVdICAgICB8RkVGICAgICAgIHxSZWNlaXZlciBGcmFtZSBFcnJvciBTdGF0dXMgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byBsb2dpYyAxIHdoZW5ldmVyIHRoZSByZWNlaXZlZCBjaGFyYWN0ZXIgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHN0b3AgYml0ICh0aGF0IGlzLCB0aGUgc3RvcCBiaXQgZm9sbG93aW5nIHRoZSBsYXN0IGRhdGEgYml0IG9yIHBhcml0eSBiaXQgaXMgZGV0ZWN0ZWQgYXMgbG9naWMgMCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmVyIGZyYW1lIGVycm9yIGZsYWcgZGlkIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZXIgZnJhbWUgZXJyb3IgZmxhZyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiBDUFUgc2V0cyByZWNlaXZlciByZXRyaWVzIGZ1bmN0aW9uIGJ5IHNldHRpbmcgUlhSVFlFTiAoU0NuX0NUTFsxOV0pLCBoYXJkd2FyZSB3aWxsIG5vdCBzZXQgdGhpcyBmbGFnLgorICAgICAqIHxbNl0gICAgIHxCRUYgICAgICAgfFJlY2VpdmVyIEJyZWFrIEVycm9yIFN0YXR1cyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIGxvZ2ljIDEgd2hlbmV2ZXIgdGhlIHJlY2VpdmVkIGRhdGEgaW5wdXQgKFJ4KSBoZWxkIGluIHRoZSBzcGFjaW5nIHN0YXRlIChsb2dpYyAwKSBpcyBsb25nZXIgdGhhbiBhIGZ1bGwgd29yZCB0cmFuc21pc3Npb24gdGltZSAodGhhdCBpcywgdGhlIHRvdGFsIHRpbWUgb2Ygc3RhcnQgYml0ICsgZGF0YSBiaXRzICsgcGFyaXR5IGJpdCArIHN0b3AgYml0cykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmVyIGJyZWFrIGVycm9yIGZsYWcgZGlkIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZXIgYnJlYWsgZXJyb3IgZmxhZyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiBDUFUgc2V0cyByZWNlaXZlciByZXRyaWVzIGZ1bmN0aW9uIGJ5IHNldHRpbmcgUlhSVFlFTiAoU0NuX0NUTFsxOV0pLCBoYXJkd2FyZSB3aWxsIG5vdCBzZXQgdGhpcyBmbGFnLgorICAgICAqIHxbOF0gICAgIHxUWE9WICAgICAgfFRyYW5zbWl0IE92ZXJmbG93IEVycm9yIEludGVycnVwdCBTdGF0dXMgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIFR4IGJ1ZmZlciBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHggYnVmZmVyIGlzIG5vdCBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHggYnVmZmVyIGlzIG92ZXJmbG93IHdoZW4gVHggYnVmZmVyIGlzIGZ1bGwgYW5kIGFuIGFkZGl0aW9uYWwgd3JpdGUgb3BlcmF0aW9uIHRvIERBVCAoU0NuX0RBVFs3OjBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs5XSAgICAgfFRYRU1QVFkgICB8VHJhbnNtaXQgQnVmZmVyIEVtcHR5IFN0YXR1cyBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIFRYIGJ1ZmZlciBlbXB0eSBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFR4IGJ1ZmZlciBpcyBub3QgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFR4IGJ1ZmZlciBpcyBlbXB0eSwgaXQgbWVhbnMgdGhlIGxhc3QgYnl0ZSBvZiBUeCBidWZmZXIgaGFzIGJlZW4gdHJhbnNmZXJyZWQgdG8gVHJhbnNtaXR0ZXIgU2hpZnQgUmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHdoZW4gd3JpdGluZyBkYXRhIGludG8gREFUIChTQ25fREFUWzc6MF0pLgorICAgICAqIHxbMTBdICAgIHxUWEZVTEwgICAgfFRyYW5zbWl0IEJ1ZmZlciBGdWxsIFN0YXR1cyBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIFR4IGJ1ZmZlciBmdWxsIG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHggYnVmZmVyIGNvdW50IGlzIGxlc3MgdGhhbiA0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUeCBidWZmZXIgY291bnQgZXF1YWxzIHRvIDQuCisgICAgICogfFsxMV0gICAgfENSRU1PVkUgICB8Q2FyZCBSZW1vdmFsIFN0YXR1cyBvZiBTQ25fQ0QgUGluCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW5ldmVyIGNhcmQgaGFzIGJlZW4gcmVtb3ZhbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXJkIHJlbW92ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQ2FyZCBkZXRlY3QgZnVuY3Rpb24gd2lsbCBzdGFydCBhZnRlciBTQ0VOIChTQ25fQ1RMWzBdKSBzZXQuCisgICAgICogfFsxMl0gICAgfENJTlNFUlQgICB8Q2FyZCBJbnNlcnQgU3RhdHVzIG9mIFNDbl9DRCBQaW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbmV2ZXIgY2FyZCBoYXMgYmVlbiBpbnNlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXJkIGluc2VydC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGUgY2FyZCBkZXRlY3QgZnVuY3Rpb24gd2lsbCBzdGFydCBhZnRlciBTQ0VOIChTQ25fQ1RMWzBdKSBzZXQuCisgICAgICogfFsxM10gICAgfENEUElOU1RTICB8Q2FyZCBEZXRlY3QgUGluIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHRoZSBwaW4gc3RhdHVzIG9mIFNDbl9DRC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIFNDbl9DRCBwaW4gc3RhdGUgYXQgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgU0NuX0NEIHBpbiBzdGF0ZSBhdCBoaWdoLgorICAgICAqIHxbMTg6MTZdIHxSWFBPSU5UICAgfFJlY2VpdmUgQnVmZmVyIFBvaW50ZXIgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIFJ4IGJ1ZmZlciBwb2ludGVyIHN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gU0MgY29udHJvbGxlciByZWNlaXZlcyBvbmUgYnl0ZSBmcm9tIGV4dGVybmFsIGRldmljZSwgUlhQT0lOVCBpbmNyZWFzZXMgb25lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBvbmUgYnl0ZSBvZiBSeCBidWZmZXIgaXMgcmVhZCBieSBDUFUsIFJYUE9JTlQgZGVjcmVhc2VzIG9uZS4KKyAgICAgKiB8WzIxXSAgICB8UlhSRVJSICAgIHxSZWNlaXZlciBSZXRyeSBFcnJvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgZm9yIHJlY2VpdmVyIGVycm9yIHJldHJ5IGFuZCBzZXQgYnkgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFJ4IHJldHJ5IHRyYW5zZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSeCBoYXMgYW55IGVycm9yIGFuZCByZXRyaWVzIHRyYW5zZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTIgVGhpcyBiaXQgaXMgYSBmbGFnIGFuZCBjYW5ub3QgZ2VuZXJhdGUgYW55IGludGVycnVwdCB0byBDUFUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIENQVSBlbmFibGVzIHJlY2VpdmVyIHJldHJpZXMgZnVuY3Rpb24gYnkgc2V0dGluZyBSWFJUWUVOIChTQ25fQ1RMWzE5XSksIGhhcmR3YXJlIHdpbGwgbm90IHNldCB0aGlzIGZsYWcuCisgICAgICogfFsyMl0gICAgfFJYT1ZFUlIgICB8UmVjZWl2ZXIgb3ZlciBSZXRyeSBFcnJvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgZm9yIHJlY2VpdmVyIHJldHJ5IGNvdW50cyBvdmVyIHRoYW4gcmV0cnkgbnVtYmVyIGxpbWl0YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmVyIHJldHJpZXMgY291bnRzIGlzIG5vdCBvdmVyIHRoYW4gUlhSVFkgKFNDbl9DVExbMTg6MTZdKSArIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmVyIHJldHJpZXMgY291bnRzIG92ZXIgdGhhbiBSWFJUWSAoU0NuX0NUTFsxODoxNl0pICsgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiBDUFUgZW5hYmxlcyByZWNlaXZlciByZXRyaWVzIGZ1bmN0aW9uIGJ5IHNldHRpbmcgUlhSVFlFTiAoU0NuX0NUTFsxOV0pLCBoYXJkd2FyZSB3aWxsIG5vdCBzZXQgdGhpcyBmbGFnLgorICAgICAqIHxbMjNdICAgIHxSWEFDVCAgICAgfFJlY2VpdmVyIGluIEFjdGl2ZSBTdGF0dXMgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyBSeCB0cmFuc2ZlciBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoaXMgYml0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIFJ4IHRyYW5zZmVyIGlzIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBSeCB0cmFuc2ZlciBpcyBpbiBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOgorICAgICAqIHxbMjY6MjRdIHxUWFBPSU5UICAgfFRyYW5zbWl0IEJ1ZmZlciBQb2ludGVyIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBUeCBidWZmZXIgcG9pbnRlciBzdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIENQVSB3cml0ZXMgZGF0YSBpbnRvIFNDbl9EQVQsIFRYUE9JTlQgaW5jcmVhc2VzIG9uZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gb25lIGJ5dGUgb2YgVHggYnVmZmVyIGlzIHRyYW5zZmVycmVkIHRvIHRyYW5zbWl0dGVyIHNoaWZ0IHJlZ2lzdGVyLCBUWFBPSU5UIGRlY3JlYXNlcyBvbmUuCisgICAgICogfFsyOV0gICAgfFRYUkVSUiAgICB8VHJhbnNtaXR0ZXIgUmV0cnkgRXJyb3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIGZvciBpbmRpY2F0ZSB0cmFuc21pdHRlciBlcnJvciByZXRyeSBhbmQgc2V0IGJ5IGhhcmR3YXJlLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gVHggcmV0cnkgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFR4IGhhcyBhbnkgZXJyb3IgYW5kIHJldHJpZXMgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgYSBmbGFnIGFuZCBjYW5ub3QgZ2VuZXJhdGUgYW55IGludGVycnVwdCB0byBDUFUuCisgICAgICogfFszMF0gICAgfFRYT1ZFUlIgICB8VHJhbnNtaXR0ZXIgb3ZlciBSZXRyeSBFcnJvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgZm9yIHRyYW5zbWl0dGVyIHJldHJ5IGNvdW50cyBvdmVyIHRoYW4gcmV0cnkgbnVtYmVyIGxpbWl0YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0dGVyIHJldHJpZXMgY291bnRzIGlzIG5vdCBvdmVyIHRoYW4gVFhSVFkgKFNDbl9DVExbMjI6MjBdKSArIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0dGVyIHJldHJpZXMgY291bnRzIG92ZXIgdGhhbiBUWFJUWSAoU0NuX0NUTFsyMjoyMF0pICsgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFszMV0gICAgfFRYQUNUICAgICB8VHJhbnNtaXQgaW4gQWN0aXZlIFN0YXR1cyBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIFR4IHRyYW5zbWl0IHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhpcyBiaXQgaXMgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gVHggdHJhbnNmZXIgaXMgZmluaXNoZWQgb3IgdGhlIGxhc3QgYnl0ZSB0cmFuc21pc3Npb24gaGFzIGNvbXBsZXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgaXMgYWN0aXZlIGFuZCB0aGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBUeCB0cmFuc2ZlciBpcyBpbiBhY3RpdmUgYW5kIHRoZSBTVE9QIGJpdCBvZiB0aGUgbGFzdCBieXRlIGhhcyBub3QgYmVlbiB0cmFuc21pdHRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkuCisgICAgICogQHZhciBTQ19UOjpQSU5DVEwKKyAgICAgKiBPZmZzZXQ6IDB4MjQgIFNDIFBpbiBDb250cm9sIFN0YXRlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UFdSRU4gICAgIHxTQ25fUFdSIFBpbiBTaWduYWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBzZXQgUFdSSU5WIChTQ25fUElOQ1RMWzExXSkgYW5kIFBXUkVOIChTQ25fUElOQ1RMWzBdKSB0byBkZWNpZGUgU0NuX1BXUiBwaW4gaXMgaW4gaGlnaCBvciBsb3cgbGV2ZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgdGhpcyBmaWVsZCB0byBkcml2ZSBTQ25fUFdSIHBpbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlZmVyIFBXUklOViAoU0NuX1BJTkNUTFsxMV0pIGRlc2NyaXB0aW9uIGZvciBwcm9ncmFtbWluZyBTQ25fUFdSIHBpbiB2b2x0YWdlIGxldmVsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgdGhpcyBmaWVsZCB0byBnZXQgU0NuX1BXUiBzaWduYWwgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQ25fUFdSIHNpZ25hbCBzdGF0dXMgaXMgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQ25fUFdSIHNpZ25hbCBzdGF0dXMgaXMgaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIG9wZXJhdGluZyBhdCBhY3RpdmF0aW9uLCB3YXJtIHJlc2V0IG9yIGRlYWN0aXZhdGlvbiBtb2RlLCB0aGlzIGJpdCB3aWxsIGJlIGNoYW5nZWQgYXV0b21hdGljYWxseQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGRvIG5vdCBmaWxsIGluIHRoaXMgZmllbGQgd2hlbiBvcGVyYXRpbmcgaW4gdGhlc2UgbW9kZXMuCisgICAgICogfFsxXSAgICAgfFJTVEVOICAgICB8U0NuX1JTVCBQaW4gU2lnbmFsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gc2V0IFJTVEVOIChTQ25fUElOQ1RMWzFdKSB0byBkZWNpZGUgU0NuX1JTVCBwaW4gaXMgaW4gaGlnaCBvciBsb3cgbGV2ZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgdGhpcyBmaWVsZCB0byBkcml2ZSBTQ25fUlNUIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRHJpdmUgU0NuX1JTVCBwaW4gdG8gbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEcml2ZSBTQ25fUlNUIHBpbiB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgdGhpcyBmaWVsZCB0byBnZXQgU0NuX1JTVCBzaWduYWwgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQ25fUlNUIHNpZ25hbCBzdGF0dXMgaXMgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQ25fUlNUIHNpZ25hbCBzdGF0dXMgaXMgaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIG9wZXJhdGluZyBhdCBhY3RpdmF0aW9uLCB3YXJtIHJlc2V0IG9yIGRlYWN0aXZhdGlvbiBtb2RlLCB0aGlzIGJpdCB3aWxsIGJlIGNoYW5nZWQgYXV0b21hdGljYWxseQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGRvIG5vdCBmaWxsIGluIHRoaXMgZmllbGQgd2hlbiBvcGVyYXRpbmcgaW4gdGhlc2UgbW9kZXMuCisgICAgICogfFs1XSAgICAgfENTVE9QTFYgICB8U0NuX0NMSyBQaW4gU3RvcCBMZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBTQ25fQ0xLIHBpbiBzdGF0dXMgd2hlbiBTQyBjbG9jayBpbiBjbG9jayBzdG9wIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDbl9DTEsgcGluIGtlZXBzIGF0IGxvdyB3aGVuIFNDIGNsb2NrIHN0b3BwZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDbl9DTEsgcGluIGtlZXBzIGF0IGhpZ2ggd2hlbiBTQyBjbG9jayBzdG9wcGVkLgorICAgICAqIHxbNl0gICAgIHxDTEtLRUVQICAgfFNDIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0MgY2xvY2sgZ2VuZXJhdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0MgY2xvY2sgYWx3YXlzIGtlZXBzIGZyZWUgcnVubmluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIG9wZXJhdGluZyBpbiBhY3RpdmF0aW9uLCB3YXJtIHJlc2V0IG9yIGRlYWN0aXZhdGlvbiBtb2RlLCB0aGlzIGJpdCB3aWxsIGJlIGNoYW5nZWQgYXV0b21hdGljYWxseQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGRvIG5vdCBmaWxsIGluIHRoaXMgZmllbGQgd2hlbiBvcGVyYXRpbmcgaW4gdGhlc2UgbW9kZXMuCisgICAgICogfFs5XSAgICAgfFNDREFUQSAgICB8U0NuX0RBVEEgUGluIFNpZ25hbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHRoZSBzaWduYWwgc3RhdHVzIG9mIFNDbl9EQVRBIGJ1dCB1c2VyIGNhbiBkcml2ZSBTQ25fREFUQSBwaW4gdG8gaGlnaCBvciBsb3cgYnkgc2V0dGluZyB0aGlzIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRHJpdmUgU0NuX0RBVEEgcGluIHRvIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRHJpdmUgU0NuX0RBVEEgcGluIHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCB0aGlzIGZpZWxkIHRvIGdldCBTQ25fREFUQSBzaWduYWwgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQ25fREFUQSBzaWduYWwgc3RhdHVzIGlzIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0NuX0RBVEEgc2lnbmFsIHN0YXR1cyBpcyBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gU0MgaXMgYXQgYWN0aXZhdGlvbiwgd2FybSByZXNldCBvciBkZWFjdGl2YXRpb24gbW9kZSwgdGhpcyBiaXQgd2lsbCBiZSBjaGFuZ2VkIGF1dG9tYXRpY2FsbHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBkbyBub3QgZmlsbCBpbiB0aGlzIGZpZWxkIHdoZW4gU0MgaXMgaW4gdGhlc2UgbW9kZXMuCisgICAgICogfFsxMV0gICAgfFBXUklOViAgICB8U0NuX1BXUiBQaW4gSW52ZXJzZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgZm9yIGludmVyc2UgdGhlIFNDbl9QV1IgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXJlIGFyZSBmb3VyIGtpbmRzIG9mIGNvbWJpbmF0aW9uIGZvciBTQ25fUFdSIHBpbiBzZXR0aW5nIGJ5IFBXUklOViAoU0NuX1BJTkNUTFsxMV0pIGFuZCBQV1JFTiAoU0NuX1BJTkNUTFswXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDbl9QV1IgcGluIGludmVyc2UgRGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBQV1JFTiBpcyAxLCBTQ25fUFdSIHBpbiBzdGF0dXMgaXMgMTsgaWYgUFdSRU4gaXMgMCwgU0NuX1BXUiBwaW4gc3RhdHVzIGlzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDbl9QV1IgcGluIGludmVyc2UgRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFBXUkVOIGlzIDEsIFNDbl9QV1IgcGluIHN0YXR1cyBpcyAwOyBpZiBQV1JFTiBpcyAwLCBTQ25fUFdSIHBpbiBzdGF0dXMgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBVc2VyIG11c3Qgc2VsZWN0IFBXUklOViAoU0NuX1BJTkNUTFsxMV0pIGJlZm9yZSBzbWFydCBjYXJkIGlzIGVuYWJsZWQgYnkgU0NFTiAoU0NuX0NUTFswXSkuCisgICAgICogfFsxNl0gICAgfERBVEFTVFMgICB8U0NuX0RBVEEgUGluIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHRoZSBwaW4gc3RhdHVzIG9mIFNDbl9EQVRBLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgU0NuX0RBVEEgcGluIHN0YXR1cyBpcyBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBTQ25fREFUQSBwaW4gc3RhdHVzIGlzIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8WzE3XSAgICB8UFdSU1RTICAgIHxTQ25fUFdSIFBpbiBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB0aGUgcGluIHN0YXR1cyBvZiBTQ25fUFdSLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQ25fUFdSIHBpbiB0byBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDbl9QV1IgcGluIHRvIGhpZ2guCisgICAgICogfFsxOF0gICAgfFJTVFNUUyAgICB8U0NuX1JTVCBQaW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdGhlIHBpbiBzdGF0dXMgb2YgU0NuX1JTVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0NuX1JTVCBwaW4gaXMgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQ25fUlNUIHBpbiBpcyBoaWdoLgorICAgICAqIHxbMzBdICAgIHxTWU5DICAgICAgfFNZTkMgRmxhZyBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEdWUgdG8gc3luY2hyb25pemF0aW9uLCB1c2VyIHNob3VsZCBjaGVjayB0aGlzIGJpdCB3aGVuIHdyaXRpbmcgYSBuZXcgdmFsdWUgdG8gU0NuX1BJTkNUTCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3luY2hyb25pemluZyBpcyBjb21wbGV0aW9uLCB1c2VyIGNhbiB3cml0ZSBuZXcgZGF0YSB0byBTQ25fUElOQ1RMIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMYXN0IHZhbHVlIGlzIHN5bmNocm9uaXppbmcuCisgICAgICogQHZhciBTQ19UOjpUTVJDVEwwCisgICAgICogT2Zmc2V0OiAweDI4ICBTQyBJbnRlcm5hbCBUaW1lcjAgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyMzowXSAgfENOVCAgICAgICB8VGltZXIwIENvdW50ZXIgVmFsdWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgaW50ZXJuYWwgVGltZXIwIGNvdW50ZXIgdmFsdWVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFVuaXQgb2YgVGltZXIwIGNvdW50ZXIgaXMgRVRVIGJhc2UuCisgICAgICogfFsyNzoyNF0gfE9QTU9ERSAgICB8VGltZXIwIE9wZXJhdGlvbiBNb2RlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBpbnRlcm5hbCAyNC1iaXQgVGltZXIwIG9wZXJhdGlvbiBzZWxlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVmZXIgdG8gVGFibGUgNi4xNy0zIFRpbWVyMC9UaW1lcjEvVGltZXIyIE9wZXJhdGlvbiBNb2RlIGZvciBwcm9ncmFtbWluZyBUaW1lcjAuCisgICAgICogfFszMV0gICAgfFNZTkMgICAgICB8U1lOQyBGbGFnIEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfER1ZSB0byBzeW5jaHJvbml6YXRpb24sIHVzZXIgc2hvdWxkIGNoZWNrIHRoaXMgYml0IHdoZW4gd3JpdGluZyBhIG5ldyB2YWx1ZSB0byB0aGUgU0NuX1RNUkNUTDAgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN5bmNocm9uaXppbmcgaXMgY29tcGxldGlvbiwgdXNlciBjYW4gd3JpdGUgbmV3IGRhdGEgdG8gU0NuX1RNUkNUTDAgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExhc3QgdmFsdWUgaXMgc3luY2hyb25pemluZy4KKyAgICAgKiBAdmFyIFNDX1Q6OlRNUkNUTDEKKyAgICAgKiBPZmZzZXQ6IDB4MkMgIFNDIEludGVybmFsIFRpbWVyMSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8Q05UICAgICAgIHxUaW1lciAxIENvdW50ZXIgVmFsdWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgaW50ZXJuYWwgVGltZXIxIGNvdW50ZXIgdmFsdWVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFVuaXQgb2YgVGltZXIxIGNvdW50ZXIgaXMgRVRVIGJhc2UuCisgICAgICogfFsyNzoyNF0gfE9QTU9ERSAgICB8VGltZXIgMSBPcGVyYXRpb24gTW9kZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgaW50ZXJuYWwgOC1iaXQgVGltZXIxIG9wZXJhdGlvbiBzZWxlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVmZXIgdG8gVGFibGUgNi4xNy0zIFRpbWVyMC9UaW1lcjEvVGltZXIyIE9wZXJhdGlvbiBNb2RlIGZvciBwcm9ncmFtbWluZyBUaW1lcjEuCisgICAgICogfFszMV0gICAgfFNZTkMgICAgICB8U1lOQyBGbGFnIEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfER1ZSB0byBzeW5jaHJvbml6YXRpb24sIHNvZnR3YXJlIHNob3VsZCBjaGVjayB0aGlzIGJpdCB3aGVuIHdyaXRpbmcgYSBuZXcgdmFsdWUgdG8gU0NuX1RNUkNUTDEgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN5bmNocm9uaXppbmcgaXMgY29tcGxldGlvbiwgdXNlciBjYW4gd3JpdGUgbmV3IGRhdGEgdG8gU0NuX1RNUkNUTDEgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExhc3QgdmFsdWUgaXMgc3luY2hyb25pemluZy4KKyAgICAgKiBAdmFyIFNDX1Q6OlRNUkNUTDIKKyAgICAgKiBPZmZzZXQ6IDB4MzAgIFNDIEludGVybmFsIFRpbWVyMiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8Q05UICAgICAgIHxUaW1lciAyIENvdW50ZXIgVmFsdWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgaW50ZXJuYWwgVGltZXIyIGNvdW50ZXIgdmFsdWVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFVuaXQgb2YgVGltZXIyIGNvdW50ZXIgaXMgRVRVIGJhc2UuCisgICAgICogfFsyNzoyNF0gfE9QTU9ERSAgICB8VGltZXIgMiBPcGVyYXRpb24gTW9kZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgaW50ZXJuYWwgOC1iaXQgVGltZXIyIG9wZXJhdGlvbiBzZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWZlciB0byBUYWJsZSA2LjE3LTMgVGltZXIwL1RpbWVyMS9UaW1lcjIgT3BlcmF0aW9uIE1vZGUgZm9yIHByb2dyYW1taW5nIFRpbWVyMi4KKyAgICAgKiB8WzMxXSAgICB8U1lOQyAgICAgIHxTWU5DIEZsYWcgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RHVlIHRvIHN5bmNocm9uaXphdGlvbiwgdXNlciBzaG91bGQgY2hlY2sgdGhpcyBiaXQgd2hlbiB3cml0aW5nIGEgbmV3IHZhbHVlIHRvIFNDbl9UTVJDVEwyIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTeW5jaHJvbml6aW5nIGlzIGNvbXBsZXRpb24sIHVzZXIgY2FuIHdyaXRlIG5ldyBkYXRhIHRvIFNDbl9UTVJDVEwyIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMYXN0IHZhbHVlIGlzIHN5bmNocm9uaXppbmcuCisgICAgICogQHZhciBTQ19UOjpVQVJUQ1RMCisgICAgICogT2Zmc2V0OiAweDM0ICBTQyBVQVJUIE1vZGUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFVBUlRFTiAgICB8VUFSVCBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXRzIHRoaXMgYml0IHRvIGVuYWJsZSBVQVJUIG1vZGUgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNtYXJ0IENhcmQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXaGVuIG9wZXJhdGluZyBpbiBVQVJUIG1vZGUsIHVzZXIgbXVzdCBzZXQgQ09OU0VMIChTQ25fQ1RMWzU6NF0pID0gMDAgYW5kIEFVVE9DRU4gKFNDbl9DVExbM10pID0gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogV2hlbiBvcGVyYXRpbmcgaW4gU21hcnQgQ2FyZCBtb2RlLCB1c2VyIG11c3Qgc2V0IFVBUlRFTiAoU0NuX1VBUlRDVExbMF0pID0gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogV2hlbiBVQVJUIG1vZGUgaXMgZW5hYmxlZCwgaGFyZHdhcmUgd2lsbCBnZW5lcmF0ZSBhIHJlc2V0IHRvIHJlc2V0IEZJRk8gYW5kIGludGVybmFsIHN0YXRlIG1hY2hpbmUuCisgICAgICogfFs1OjRdICAgfFdMUyAgICAgICB8V29yZCBMZW5ndGggU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIGZvciBzZWxlY3QgVUFSVCBkYXRhIGxlbmd0aC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFdvcmQgbGVuZ3RoIGlzIDggYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFdvcmQgbGVuZ3RoIGlzIDcgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFdvcmQgbGVuZ3RoIGlzIDYgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFdvcmQgbGVuZ3RoIGlzIDUgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBzbWFydCBjYXJkIG1vZGUsIHRoaXMgV0xTIG11c3QgYmUgdTIwMTgwMCcuCisgICAgICogfFs2XSAgICAgfFBCT0ZGICAgICB8UGFyaXR5IEJpdCBEaXNhYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXRzIHRoaXMgYml0IGlzIHVzZWQgZm9yIGRpc2FibGUgcGFyaXR5IGNoZWNrIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQYXJpdHkgYml0IGlzIGdlbmVyYXRlZCBvciBjaGVja2VkIGJldHdlZW4gdGhlIGxhc3QgZGF0YSB3b3JkIGJpdCBhbmQgc3RvcCBiaXQgb2YgdGhlIHNlcmlhbCBkYXRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQYXJpdHkgYml0IGlzIG5vdCBnZW5lcmF0ZWQgKHRyYW5zbWl0dGluZyBkYXRhKSBvciBjaGVja2VkIChyZWNlaXZpbmcgZGF0YSkgZHVyaW5nIHRyYW5zZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIHNtYXJ0IGNhcmQgbW9kZSwgdGhpcyBmaWVsZCBtdXN0IGJlIHUyMDE4MCcgKGRlZmF1bHQgc2V0dGluZyBpcyB3aXRoIHBhcml0eSBiaXQpLgorICAgICAqIHxbN10gICAgIHxPUEUgICAgICAgfE9kZCBQYXJpdHkgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgaXMgdXNlZCBmb3Igb2RkL2V2ZW4gcGFyaXR5IHNlbGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXZlbiBudW1iZXIgb2YgbG9naWMgMSdzIGFyZSB0cmFuc21pdHRlZCBvciBjaGVjayB0aGUgZGF0YSB3b3JkIGFuZCBwYXJpdHkgYml0cyBpbiByZWNlaXZpbmcgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT2RkIG51bWJlciBvZiBsb2dpYyAxJ3MgYXJlIHRyYW5zbWl0dGVkIG9yIGNoZWNrIHRoZSBkYXRhIHdvcmQgYW5kIHBhcml0eSBiaXRzIGluIHJlY2VpdmluZyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGhhcyBlZmZlY3Qgb25seSB3aGVuIFBCT0ZGIGJpdCBpcyB1MjAxODAnLgorICAgICAqIEB2YXIgU0NfVDo6QUNUQ1RMCisgICAgICogT2Zmc2V0OiAweDRDICBTQyBBY3RpdmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNDowXSAgIHxUMUVYVCAgICAgfFQxIEV4dGVuZCBUaW1lIG9mIEhhcmR3YXJlIEFjdGl2YXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIHByb3ZpZGUgdGhlIGNvbmZpZ3VyYWJsZSBjeWNsZXMgdG8gZXh0ZW5kIHRoZSBhY3RpdmF0aW9uIHRpbWUgVDEgcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjeWNsZSBzY2FsaW5nIGZhY3RvciBpcyAyMDQ4LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEV4dGVuZCBjeWNsZXMgPSAoZmlsbGVkIHZhbHVlICogMjA0OCkgY3ljbGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlZmVyIHRvIFNDIGFjdGl2YXRpb24gc2VxdWVuY2UgaW4gRmlndXJlIDYuMTctNCBTQyBBY3RpdmF0aW9uIFNlcXVlbmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBleGFtcGxlLAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNDTEsgPSA0TUh6LCBlYWNoIGN5Y2xlID0gMC4yNXVzLC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGaWxsZWQgMjAgdG8gdGhpcyBmaWVsZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEV4dGVuZCB0aW1lID0gMjAgKiAyMDQ4ICogMC4yNXVzID0gMTAuMjQgbXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogU2V0dGluZyAwIHRvIHRoaXMgZmllbGQgY29uZm9ybXMgdG8gdGhlIHByb3RvY29sIElTTy9JRUMgNzgxNi0zCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBEQVQ7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gU0MgUmVjZWl2ZS9UcmFuc21pdCBIb2xkaW5nIEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIFNDIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFMVENUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBTQyBBbHRlcm5hdGUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBFR1Q7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gU0MgRXh0cmEgR3VhcmQgVGltZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUlhUT1VUOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIFNDIFJlY2VpdmUgQnVmZmVyIFRpbWUtb3V0IENvdW50ZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEVUVUNUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE0XSBTQyBFbGVtZW50IFRpbWUgVW5pdCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxOF0gU0MgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5UU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMWNdIFNDIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDIwXSBTQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQSU5DVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyNF0gU0MgUGluIENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVE1SQ1RMMDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMjhdIFNDIEludGVybmFsIFRpbWVyMCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRNUkNUTDE7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDJjXSBTQyBJbnRlcm5hbCBUaW1lcjEgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUTVJDVEwyOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAzMF0gU0MgSW50ZXJuYWwgVGltZXIyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVUFSVENUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMzRdIFNDIFVBUlQgTW9kZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzVdOworICAgIF9fSU8gdWludDMyX3QgQUNUQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNGNdIFNDIEFjdGl2YXRpb24gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBTQ19UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBTQ19DT05TVCBTQyBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBTQyBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFNDX0RBVF9EQVRfUG9zICAgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpEQVQ6IERBVCBQb3NpdGlvbiAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTQ19EQVRfREFUX01zayAgICAgICAgICAgICAgICAgICAoMHhmZnVsIDw8IFNDX0RBVF9EQVRfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6REFUOiBEQVQgTWFzayAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19DVExfU0NFTl9Qb3MgICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBTQ0VOIFBvc2l0aW9uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQ1RMX1NDRU5fTXNrICAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0NUTF9TQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogU0NFTiBNYXNrICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQ1RMX1JYT0ZGX1BvcyAgICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogUlhPRkYgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0NUTF9SWE9GRl9Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19DVExfUlhPRkZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFJYT0ZGIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0NUTF9UWE9GRl9Qb3MgICAgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFRYT0ZGIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBTQ19DVExfVFhPRkZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQ1RMX1RYT0ZGX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBUWE9GRiBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19DVExfQVVUT0NFTl9Qb3MgICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBBVVRPQ0VOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQ1RMX0FVVE9DRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0NUTF9BVVRPQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogQVVUT0NFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQ1RMX0NPTlNFTF9Qb3MgICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogQ09OU0VMIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0NUTF9DT05TRUxfTXNrICAgICAgICAgICAgICAgICgweDN1bCA8PCBTQ19DVExfQ09OU0VMX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IENPTlNFTCBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0NUTF9SWFRSR0xWX1BvcyAgICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFJYVFJHTFYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19DVExfUlhUUkdMVl9Nc2sgICAgICAgICAgICAgICAoMHgzdWwgPDwgU0NfQ1RMX1JYVFJHTFZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBSWFRSR0xWIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19DVExfQkdUX1BvcyAgICAgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBCR1QgUG9zaXRpb24gICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQ1RMX0JHVF9Nc2sgICAgICAgICAgICAgICAgICAgKDB4MWZ1bCA8PCBTQ19DVExfQkdUX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogQkdUIE1hc2sgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQ1RMX1RNUlNFTF9Qb3MgICAgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogVE1SU0VMIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0NUTF9UTVJTRUxfTXNrICAgICAgICAgICAgICAgICgweDN1bCA8PCBTQ19DVExfVE1SU0VMX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFRNUlNFTCBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0NUTF9OU0JfUG9zICAgICAgICAgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IE5TQiBQb3NpdGlvbiAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTQ19DVExfTlNCX01zayAgICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQ1RMX05TQl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBOU0IgTWFzayAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19DVExfUlhSVFlfUG9zICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBSWFJUWSBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQ1RMX1JYUlRZX01zayAgICAgICAgICAgICAgICAgKDB4N3VsIDw8IFNDX0NUTF9SWFJUWV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogUlhSVFkgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQ1RMX1JYUlRZRU5fUG9zICAgICAgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogUlhSVFlFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0NUTF9SWFJUWUVOX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19DVExfUlhSVFlFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFJYUlRZRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0NUTF9UWFJUWV9Qb3MgICAgICAgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFRYUlRZIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBTQ19DVExfVFhSVFlfTXNrICAgICAgICAgICAgICAgICAoMHg3dWwgPDwgU0NfQ1RMX1RYUlRZX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBUWFJUWSBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19DVExfVFhSVFlFTl9Qb3MgICAgICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBUWFJUWUVOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQ1RMX1RYUlRZRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0NUTF9UWFJUWUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogVFhSVFlFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQ1RMX0NEREJTRUxfUG9zICAgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogQ0REQlNFTCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0NUTF9DRERCU0VMX01zayAgICAgICAgICAgICAgICgweDN1bCA8PCBTQ19DVExfQ0REQlNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IENEREJTRUwgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0NUTF9DRExWX1BvcyAgICAgICAgICAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IENETFYgUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBTQ19DVExfQ0RMVl9Nc2sgICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQ1RMX0NETFZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBDRExWIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19DVExfU1lOQ19Qb3MgICAgICAgICAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBTWU5DIFBvc2l0aW9uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQ1RMX1NZTkNfTXNrICAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0NUTF9TWU5DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogU1lOQyBNYXNrICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQUxUQ1RMX1RYUlNUX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogVFhSU1QgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX0FMVENUTF9UWFJTVF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19BTFRDVExfVFhSU1RfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IFRYUlNUIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0FMVENUTF9SWFJTVF9Qb3MgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IFJYUlNUIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ19BTFRDVExfUlhSU1RfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQUxUQ1RMX1JYUlNUX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBSWFJTVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19BTFRDVExfREFDVEVOX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBEQUNURU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQUxUQ1RMX0RBQ1RFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0FMVENUTF9EQUNURU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogREFDVEVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQUxUQ1RMX0FDVEVOX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogQUNURU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX0FMVENUTF9BQ1RFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19BTFRDVExfQUNURU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IEFDVEVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0FMVENUTF9XQVJTVEVOX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IFdBUlNURU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19BTFRDVExfV0FSU1RFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQUxUQ1RMX1dBUlNURU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBXQVJTVEVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19BTFRDVExfQ05URU4wX1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBDTlRFTjAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQUxUQ1RMX0NOVEVOMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0FMVENUTF9DTlRFTjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogQ05URU4wIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQUxUQ1RMX0NOVEVOMV9Qb3MgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogQ05URU4xIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX0FMVENUTF9DTlRFTjFfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19BTFRDVExfQ05URU4xX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IENOVEVOMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0FMVENUTF9DTlRFTjJfUG9zICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IENOVEVOMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19BTFRDVExfQ05URU4yX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQUxUQ1RMX0NOVEVOMl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBDTlRFTjIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19BTFRDVExfSU5JVFNFTF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBJTklUU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQUxUQ1RMX0lOSVRTRUxfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IFNDX0FMVENUTF9JTklUU0VMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogSU5JVFNFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQUxUQ1RMX0FEQUNFTl9Qb3MgICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogQURBQ0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX0FMVENUTF9BREFDRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19BTFRDVExfQURBQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IEFEQUNFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0FMVENUTF9SWEJHVEVOX1BvcyAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IFJYQkdURU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19BTFRDVExfUlhCR1RFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQUxUQ1RMX1JYQkdURU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBSWEJHVEVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19BTFRDVExfQUNUU1RTMF9Qb3MgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBBQ1RTVFMwIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQUxUQ1RMX0FDVFNUUzBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0FMVENUTF9BQ1RTVFMwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogQUNUU1RTMCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQUxUQ1RMX0FDVFNUUzFfUG9zICAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogQUNUU1RTMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX0FMVENUTF9BQ1RTVFMxX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ19BTFRDVExfQUNUU1RTMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IEFDVFNUUzEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0FMVENUTF9BQ1RTVFMyX1BvcyAgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IEFDVFNUUzIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19BTFRDVExfQUNUU1RTMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQUxUQ1RMX0FDVFNUUzJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBBQ1RTVFMyIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19BTFRDVExfU1lOQ19Qb3MgICAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBTWU5DIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQUxUQ1RMX1NZTkNfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0FMVENUTF9TWU5DX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogU1lOQyBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfRUdUX0VHVF9Qb3MgICAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkVHVDogRUdUIFBvc2l0aW9uICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0VHVF9FR1RfTXNrICAgICAgICAgICAgICAgICAgICgweGZmdWwgPDwgU0NfRUdUX0VHVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpFR1Q6IEVHVCBNYXNrICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1JYVE9VVF9SRlRNX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpSWFRPVVQ6IFJGVE0gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19SWFRPVVRfUkZUTV9Nc2sgICAgICAgICAgICAgICAoMHgxZmZ1bCA8PCBTQ19SWFRPVVRfUkZUTV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UlhUT1VUOiBSRlRNIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19FVFVDVExfRVRVUkRJVl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6RVRVQ1RMOiBFVFVSRElWIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfRVRVQ1RMX0VUVVJESVZfTXNrICAgICAgICAgICAgKDB4ZmZmdWwgPDwgU0NfRVRVQ1RMX0VUVVJESVZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkVUVUNUTDogRVRVUkRJViBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5URU5fUkRBSUVOX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBSREFJRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVEVOX1JEQUlFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRFTl9SREFJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogUkRBSUVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVEVOX1RCRUlFTl9Qb3MgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogVEJFSUVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRFTl9UQkVJRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5URU5fVEJFSUVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IFRCRUlFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRFTl9URVJSSUVOX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IFRFUlJJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5URU5fVEVSUklFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVEVOX1RFUlJJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBURVJSSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5URU5fVE1SMElFTl9Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBUTVIwSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVEVOX1RNUjBJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRFTl9UTVIwSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogVE1SMElFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVEVOX1RNUjFJRU5fUG9zICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogVE1SMUlFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRFTl9UTVIxSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5URU5fVE1SMUlFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IFRNUjFJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRFTl9UTVIySUVOX1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IFRNUjJJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5URU5fVE1SMklFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVEVOX1RNUjJJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBUTVIySUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5URU5fQkdUSUVOX1BvcyAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBCR1RJRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVEVOX0JHVElFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRFTl9CR1RJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogQkdUSUVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVEVOX0NESUVOX1BvcyAgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogQ0RJRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRFTl9DRElFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5URU5fQ0RJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IENESUVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRFTl9JTklUSUVOX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IElOSVRJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5URU5fSU5JVElFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVEVOX0lOSVRJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBJTklUSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5URU5fUlhUT0lFTl9Qb3MgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBSWFRPSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVEVOX1JYVE9JRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRFTl9SWFRPSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogUlhUT0lFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVEVOX0FDRVJSSUVOX1BvcyAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogQUNFUlJJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19JTlRFTl9BQ0VSUklFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5URU5fQUNFUlJJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IEFDRVJSSUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRTVFNfUkRBSUZfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBSREFJRiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5UU1RTX1JEQUlGX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVFNUU19SREFJRl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogUkRBSUYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5UU1RTX1RCRUlGX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogVEJFSUYgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVFNUU19UQkVJRl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRTVFNfVEJFSUZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IFRCRUlGIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVFNUU19URVJSSUZfUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IFRFUlJJRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRTVFNfVEVSUklGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5UU1RTX1RFUlJJRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBURVJSSUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRTVFNfVE1SMElGX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBUTVIwSUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5UU1RTX1RNUjBJRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVFNUU19UTVIwSUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogVE1SMElGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5UU1RTX1RNUjFJRl9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogVE1SMUlGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVFNUU19UTVIxSUZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRTVFNfVE1SMUlGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IFRNUjFJRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVFNUU19UTVIySUZfUG9zICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IFRNUjJJRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRTVFNfVE1SMklGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5UU1RTX1RNUjJJRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBUTVIySUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRTVFNfQkdUSUZfUG9zICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBCR1RJRiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5UU1RTX0JHVElGX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVFNUU19CR1RJRl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogQkdUSUYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5UU1RTX0NESUZfUG9zICAgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogQ0RJRiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVFNUU19DRElGX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRTVFNfQ0RJRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IENESUYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVFNUU19JTklUSUZfUG9zICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IElOSVRJRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRTVFNfSU5JVElGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5UU1RTX0lOSVRJRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBJTklUSUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRTVFNfUlhUT0lGX1BvcyAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBSWFRPSUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5UU1RTX1JYVE9JRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVFNUU19SWFRPSUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogUlhUT0lGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5UU1RTX0FDRVJSSUZfUG9zICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogQUNFUlJJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVFNUU19BQ0VSUklGX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRTVFNfQUNFUlJJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IEFDRVJSSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19SWE9WX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFJYT1YgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfUlhPVl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfU1RBVFVTX1JYT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBSWE9WIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfUlhFTVBUWV9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBSWEVNUFRZIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX1JYRU1QVFlfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1NUQVRVU19SWEVNUFRZX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogUlhFTVBUWSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX1JYRlVMTF9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogUlhGVUxMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19SWEZVTExfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19TVEFUVVNfUlhGVUxMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFJYRlVMTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19QRUZfUG9zICAgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFBFRiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfUEVGX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfU1RBVFVTX1BFRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBQRUYgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfRkVGX1BvcyAgICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBGRUYgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX0ZFRl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1NUQVRVU19GRUZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogRkVGIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX0JFRl9Qb3MgICAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogQkVGIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19CRUZfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19TVEFUVVNfQkVGX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IEJFRiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19UWE9WX1BvcyAgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFRYT1YgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfVFhPVl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfU1RBVFVTX1RYT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBUWE9WIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfVFhFTVBUWV9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBUWEVNUFRZIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX1RYRU1QVFlfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1NUQVRVU19UWEVNUFRZX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogVFhFTVBUWSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX1RYRlVMTF9Qb3MgICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogVFhGVUxMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19UWEZVTExfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19TVEFUVVNfVFhGVUxMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFRYRlVMTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19DUkVNT1ZFX1BvcyAgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IENSRU1PVkUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfQ1JFTU9WRV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NfU1RBVFVTX0NSRU1PVkVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBDUkVNT1ZFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfQ0lOU0VSVF9Qb3MgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBDSU5TRVJUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX0NJTlNFUlRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1NUQVRVU19DSU5TRVJUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogQ0lOU0VSVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX0NEUElOU1RTX1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogQ0RQSU5TVFMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19DRFBJTlNUU19Nc2sgICAgICAgICAgICgweDF1bCA8PCBTQ19TVEFUVVNfQ0RQSU5TVFNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IENEUElOU1RTIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19SWFBPSU5UX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFJYUE9JTlQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfUlhQT0lOVF9Nc2sgICAgICAgICAgICAoMHg3dWwgPDwgU0NfU1RBVFVTX1JYUE9JTlRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBSWFBPSU5UIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfUlhSRVJSX1BvcyAgICAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBSWFJFUlIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX1JYUkVSUl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1NUQVRVU19SWFJFUlJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogUlhSRVJSIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX1JYT1ZFUlJfUG9zICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogUlhPVkVSUiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19SWE9WRVJSX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ19TVEFUVVNfUlhPVkVSUl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFJYT1ZFUlIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19SWEFDVF9Qb3MgICAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFJYQUNUIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfUlhBQ1RfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfU1RBVFVTX1JYQUNUX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBSWEFDVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfVFhQT0lOVF9Qb3MgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBUWFBPSU5UIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX1RYUE9JTlRfTXNrICAgICAgICAgICAgKDB4N3VsIDw8IFNDX1NUQVRVU19UWFBPSU5UX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogVFhQT0lOVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX1RYUkVSUl9Qb3MgICAgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogVFhSRVJSIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19UWFJFUlJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19TVEFUVVNfVFhSRVJSX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFRYUkVSUiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19UWE9WRVJSX1BvcyAgICAgICAgICAgICgzMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFRYT1ZFUlIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfVFhPVkVSUl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NfU1RBVFVTX1RYT1ZFUlJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBUWE9WRVJSIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfVFhBQ1RfUG9zICAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBUWEFDVCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX1RYQUNUX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1NUQVRVU19UWEFDVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogVFhBQ1QgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfUElOQ1RMX1BXUkVOX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogUFdSRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX1BJTkNUTF9QV1JFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19QSU5DVExfUFdSRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IFBXUkVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1BJTkNUTF9SU1RFTl9Qb3MgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IFJTVEVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ19QSU5DVExfUlNURU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfUElOQ1RMX1JTVEVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBSU1RFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19QSU5DVExfQ1NUT1BMVl9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBDU1RPUExWIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfUElOQ1RMX0NTVE9QTFZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1BJTkNUTF9DU1RPUExWX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogQ1NUT1BMViBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfUElOQ1RMX0NMS0tFRVBfUG9zICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogQ0xLS0VFUCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX1BJTkNUTF9DTEtLRUVQX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ19QSU5DVExfQ0xLS0VFUF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IENMS0tFRVAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1BJTkNUTF9TQ0RBVEFfUG9zICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IFNDREFUQSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19QSU5DVExfU0NEQVRBX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfUElOQ1RMX1NDREFUQV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBTQ0RBVEEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19QSU5DVExfUFdSSU5WX1BvcyAgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBQV1JJTlYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfUElOQ1RMX1BXUklOVl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1BJTkNUTF9QV1JJTlZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogUFdSSU5WIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfUElOQ1RMX0RBVEFTVFNfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogREFUQVNUUyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX1BJTkNUTF9EQVRBU1RTX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ19QSU5DVExfREFUQVNUU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IERBVEFTVFMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1BJTkNUTF9QV1JTVFNfUG9zICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IFBXUlNUUyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19QSU5DVExfUFdSU1RTX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfUElOQ1RMX1BXUlNUU19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBQV1JTVFMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19QSU5DVExfUlNUU1RTX1BvcyAgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBSU1RTVFMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfUElOQ1RMX1JTVFNUU19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1BJTkNUTF9SU1RTVFNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogUlNUU1RTIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfUElOQ1RMX1NZTkNfUG9zICAgICAgICAgICAgICAgKDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogU1lOQyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX1BJTkNUTF9TWU5DX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19QSU5DVExfU1lOQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IFNZTkMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1RNUkNUTDBfQ05UX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpUTVJDVEwwOiBDTlQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19UTVJDVEwwX0NOVF9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBTQ19UTVJDVEwwX0NOVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VE1SQ1RMMDogQ05UIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19UTVJDVEwwX09QTU9ERV9Qb3MgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VE1SQ1RMMDogT1BNT0RFIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfVE1SQ1RMMF9PUE1PREVfTXNrICAgICAgICAgICAgKDB4ZnVsIDw8IFNDX1RNUkNUTDBfT1BNT0RFX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlRNUkNUTDA6IE9QTU9ERSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfVE1SQ1RMMF9TWU5DX1BvcyAgICAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlRNUkNUTDA6IFNZTkMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX1RNUkNUTDBfU1lOQ19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19UTVJDVEwwX1NZTkNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpUTVJDVEwwOiBTWU5DIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1RNUkNUTDFfQ05UX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpUTVJDVEwxOiBDTlQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19UTVJDVEwxX0NOVF9Nc2sgICAgICAgICAgICAgICAoMHhmZnVsIDw8IFNDX1RNUkNUTDFfQ05UX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VE1SQ1RMMTogQ05UIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19UTVJDVEwxX09QTU9ERV9Qb3MgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VE1SQ1RMMTogT1BNT0RFIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfVE1SQ1RMMV9PUE1PREVfTXNrICAgICAgICAgICAgKDB4ZnVsIDw8IFNDX1RNUkNUTDFfT1BNT0RFX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlRNUkNUTDE6IE9QTU9ERSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfVE1SQ1RMMV9TWU5DX1BvcyAgICAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlRNUkNUTDE6IFNZTkMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX1RNUkNUTDFfU1lOQ19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19UTVJDVEwxX1NZTkNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpUTVJDVEwxOiBTWU5DIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1RNUkNUTDJfQ05UX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpUTVJDVEwyOiBDTlQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19UTVJDVEwyX0NOVF9Nc2sgICAgICAgICAgICAgICAoMHhmZnVsIDw8IFNDX1RNUkNUTDJfQ05UX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VE1SQ1RMMjogQ05UIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19UTVJDVEwyX09QTU9ERV9Qb3MgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VE1SQ1RMMjogT1BNT0RFIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfVE1SQ1RMMl9PUE1PREVfTXNrICAgICAgICAgICAgKDB4ZnVsIDw8IFNDX1RNUkNUTDJfT1BNT0RFX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlRNUkNUTDI6IE9QTU9ERSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfVE1SQ1RMMl9TWU5DX1BvcyAgICAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlRNUkNUTDI6IFNZTkMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX1RNUkNUTDJfU1lOQ19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19UTVJDVEwyX1NZTkNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpUTVJDVEwyOiBTWU5DIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1VBUlRDVExfVUFSVEVOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpVQVJUQ1RMOiBVQVJURU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19VQVJUQ1RMX1VBUlRFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NfVUFSVENUTF9VQVJURU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VUFSVENUTDogVUFSVEVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19VQVJUQ1RMX1dMU19Qb3MgICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VUFSVENUTDogV0xTIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfVUFSVENUTF9XTFNfTXNrICAgICAgICAgICAgICAgKDB4M3VsIDw8IFNDX1VBUlRDVExfV0xTX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlVBUlRDVEw6IFdMUyBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfVUFSVENUTF9QQk9GRl9Qb3MgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlVBUlRDVEw6IFBCT0ZGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX1VBUlRDVExfUEJPRkZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19VQVJUQ1RMX1BCT0ZGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpVQVJUQ1RMOiBQQk9GRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1VBUlRDVExfT1BFX1BvcyAgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpVQVJUQ1RMOiBPUEUgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19VQVJUQ1RMX09QRV9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfVUFSVENUTF9PUEVfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VUFSVENUTDogT1BFIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19BQ1RDVExfVDFFWFRfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUNUQ1RMOiBUMUVYVCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQUNUQ1RMX1QxRVhUX01zayAgICAgICAgICAgICAgKDB4MWZ1bCA8PCBTQ19BQ1RDVExfVDFFWFRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFDVENUTDogVDFFWFQgTWFzayAgICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogU0NfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFNDIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisjZW5kaWYgLyogX19TQ19SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvc2N1X3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3NjdV9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTg1YjZiCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3NjdV9yZWcuaApAQCAtMCwwICsxLDEyNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzY3VfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFNDVSByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TQ1VfUkVHX0hfXworI2RlZmluZSBfX1NDVV9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2VjdXJlIGNvbmZpZ3VyYXRpb24gVW5pdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFNDVSBTZWN1cmUgY29uZmlndXJhdGlvbiBVbml0KFNDVSkKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgU0NVIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgU0NVX1Q6OlBOU1NFVFswXQorICAgICAqIE9mZnNldDogMHgwMCAgUGVyaXBoZXJhbCBOb24tc2VjdXJlIEF0dHJpYnV0aW9uIFNldCBSZWdpc3RlcjAgKDB4NDAwMF8wMDAwfjB4NDAwMV9GRkZGKQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs5XSAgICAgfFVTQkggICAgICB8U2V0IFVTQkggdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFVTQkggdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVU0JIIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQkggaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzEzXSAgICB8U0RIMCAgICAgIHxTZXQgU0RIMCB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgU0RIMCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNESDAgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0RIMCBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMTZdICAgIHxFQkkgICAgICAgfFNldCBFQkkgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IEVCSSB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVCSSBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQkkgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzI0XSAgICB8UERNQTEgICAgIHxTZXQgUERNQTEgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFBETUExIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQTEgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUERNQTEgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiBAdmFyIFNDVV9UOjpQTlNTRVRbMV0KKyAgICAgKiBPZmZzZXQ6IDB4MDQgIFBlcmlwaGVyYWwgTm9uLXNlY3VyZSBBdHRyaWJ1dGlvbiBTZXQgUmVnaXN0ZXIxICgweDQwMDJfMDAwMH4weDQwMDNfRkZGRikKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTddICAgIHxDUkMgICAgICAgfFNldCBDUkMgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IENSQyB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENSQyBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDUkMgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzE4XSAgICB8Q1JQVCAgICAgIHxTZXQgQ1JQVCB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgQ1JQVCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENSUFQgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ1JQVCBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIEB2YXIgU0NVX1Q6OlBOU1NFVFsyXQorICAgICAqIE9mZnNldDogMHgwOCAgUGVyaXBoZXJhbCBOb24tc2VjdXJlIEF0dHJpYnV0aW9uIFNldCBSZWdpc3RlcjIgKDB4NDAwNF8wMDAwfjB4NDAwNV9GRkZGKQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxXSAgICAgfFJUQyAgICAgICB8U2V0IFJUQyB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgUlRDIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlRDIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJUQyBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbM10gICAgIHxFQURDICAgICAgfFNldCBFQURDIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBFQURDIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUFEQyBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQURDIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFs1XSAgICAgfEFDTVAwMSAgICB8U2V0IEFDTVAwMSB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgQUNNUDAsIEFDTVAxIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQUNNUDAsIEFDTVAxIGFyZSBzZWN1cmUgbW9kdWxlcyAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFDTVAwLCBBQ01QMSBhcmUgbm9uLXNlY3VyZSBtb2R1bGVzLgorICAgICAqIHxbN10gICAgIHxEQUMgICAgICAgfFNldCBEQUMgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IERBQyB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERBQyBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEQUMgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzhdICAgICB8STJTMCAgICAgIHxTZXQgSTJTMCB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgSTJTMCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEkyUzAgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJTMCBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMTNdICAgIHxPVEcgICAgICAgfFNldCBPVEcgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IE9URyB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE9URyBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPVEcgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzE3XSAgICB8VE1SMjMgICAgIHxTZXQgVE1SMjMgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFRNUjIzIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVE1SMjMgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVE1SMjMgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzI0XSAgICB8RVBXTTAgICAgIHxTZXQgRVBXTTAgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IEVQV00wIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTTAgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTTAgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzI1XSAgICB8RVBXTTEgICAgIHxTZXQgRVBXTTEgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IEVQV00xIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTTEgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTTEgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzI2XSAgICB8QlBXTTAgICAgIHxTZXQgQlBXTTAgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IEJQV00wIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTTAgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTTAgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzI3XSAgICB8QlBXTTEgICAgIHxTZXQgQlBXTTEgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IEJQV00xIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTTEgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTTEgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiBAdmFyIFNDVV9UOjpQTlNTRVRbM10KKyAgICAgKiBPZmZzZXQ6IDB4MEMgIFBlcmlwaGVyYWwgTm9uLXNlY3VyZSBBdHRyaWJ1dGlvbiBTZXQgUmVnaXN0ZXIzICgweDQwMDZfMDAwMH4weDQwMDdfRkZGRikKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxRU1BJMCAgICAgfFNldCBRU1BJMCB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgUVNQSTAgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRU1BJMCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRU1BJMCBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMV0gICAgIHxTUEkwICAgICAgfFNldCBTUEkwIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBTUEkwIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJMCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEkwIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsyXSAgICAgfFNQSTEgICAgICB8U2V0IFNQSTEgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFNQSTEgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkxIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSTEgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzNdICAgICB8U1BJMiAgICAgIHxTZXQgU1BJMiB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgU1BJMiB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNQSTIgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJMiBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbNF0gICAgIHxTUEkzICAgICAgfFNldCBTUEkzIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBTUEkzIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJMyBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEkzIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxNl0gICAgfFVBUlQwICAgICB8U2V0IFVBUlQwIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBVQVJUMCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQwIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQwIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxN10gICAgfFVBUlQxICAgICB8U2V0IFVBUlQxIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBVQVJUMSB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQxIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQxIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxOF0gICAgfFVBUlQyICAgICB8U2V0IFVBUlQyIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBVQVJUMiB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQyIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQyIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxOV0gICAgfFVBUlQzICAgICB8U2V0IFVBUlQzIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBVQVJUMyB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQzIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQzIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsyMF0gICAgfFVBUlQ0ICAgICB8U2V0IFVBUlQ0IHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBVQVJUNCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQ0IGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQ0IGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsyMV0gICAgfFVBUlQ1ICAgICB8U2V0IFVBUlQ1IHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBVQVJUNSB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQ1IGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQ1IGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogQHZhciBTQ1VfVDo6UE5TU0VUWzRdCisgICAgICogT2Zmc2V0OiAweDEwICBQZXJpcGhlcmFsIE5vbi1zZWN1cmUgQXR0cmlidXRpb24gU2V0IFJlZ2lzdGVyNCAoMHg0MDA4XzAwMDB+MHg0MDA5X0ZGRkYpCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8STJDMCAgICAgIHxTZXQgSTJDMCB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgSTJDMCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEkyQzAgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJDMCBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMV0gICAgIHxJMkMxICAgICAgfFNldCBJMkMxIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBJMkMxIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJDMSBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJMkMxIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsyXSAgICAgfEkyQzIgICAgICB8U2V0IEkyQzIgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IEkyQzIgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMkMyIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyQzIgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzE2XSAgICB8U0MwICAgICAgIHxTZXQgU0MwIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBTQzAgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQzAgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0MwIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxN10gICAgfFNDMSAgICAgICB8U2V0IFNDMSB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgU0MxIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0MxIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDMSBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMThdICAgIHxTQzIgICAgICAgfFNldCBTQzIgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFNDMiB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDMiBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQzIgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiBAdmFyIFNDVV9UOjpQTlNTRVRbNV0KKyAgICAgKiBPZmZzZXQ6IDB4MTQgIFBlcmlwaGVyYWwgTm9uLXNlY3VyZSBBdHRyaWJ1dGlvbiBTZXQgUmVnaXN0ZXI1ICgweDQwMEFfMDAwMH4weDQwMEJfRkZGRikKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDQU4wICAgICAgfFNldCBDQU4wIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBDQU4wIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ0FOMCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDQU4wIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxNl0gICAgfFFFSTAgICAgICB8U2V0IFFFSTAgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFFFSTAgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRRUkwIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFFSTAgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzE3XSAgICB8UUVJMSAgICAgIHxTZXQgUUVJMSB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgUUVJMSB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFFSTEgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVJMSBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMjBdICAgIHxFQ0FQMCAgICAgfFNldCBFQ0FQMCB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgRUNBUDAgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFQ0FQMCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQ0FQMCBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMjFdICAgIHxFQ0FQMSAgICAgfFNldCBFQ0FQMSB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgRUNBUDEgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFQ0FQMSBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQ0FQMSBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMjVdICAgIHxUUk5HICAgICAgfFNldCBUUk5HIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBUUk5HIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVFJORyBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUUk5HIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogQHZhciBTQ1VfVDo6UE5TU0VUWzZdCisgICAgICogT2Zmc2V0OiAweDE4ICBQZXJpcGhlcmFsIE5vbi1zZWN1cmUgQXR0cmlidXRpb24gU2V0IFJlZ2lzdGVyNiAoMHg0MDBDXzAwMDB+MHg0MDBEX0ZGRkYpCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8VVNCRCAgICAgIHxTZXQgVVNCRCB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgVVNCRCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVTQkQgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCRCBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMTZdICAgIHxVU0NJMCAgICAgfFNldCBVU0NJMCB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgVVNDSTAgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVU0NJMCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0NJMCBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMTddICAgIHxVU0NJMSAgICAgfFNldCBVU0NJMSB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgVVNDSTEgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVU0NJMSBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0NJMSBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIEB2YXIgU0NVX1Q6OklPTlNTRVQKKyAgICAgKiBPZmZzZXQ6IDB4MjAgIElPIE5vbi1zZWN1cmUgQXR0cmlidXRpb24gU2V0IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UEEgICAgICAgIHxTZXQgR1BJTyBQb3J0IGEgdG8gTm9uLXNjZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBQQSB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQSU8gcG9ydCBBIGlzIHNlY3VyZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQSU8gcG9ydCBBIGlzIG5vbi1zZWN1cmUuCisgICAgICogfFsxXSAgICAgfFBCICAgICAgICB8U2V0IEdQSU8gUG9ydCBCIHRvIE5vbi1zY2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgUEIgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHUElPIHBvcnQgQiBpcyBzZWN1cmUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHUElPIHBvcnQgQiBpcyBub24tc2VjdXJlLgorICAgICAqIHxbMl0gICAgIHxQQyAgICAgICAgfFNldCBHUElPIFBvcnQgQyB0byBOb24tc2NlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFBDIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BJTyBwb3J0IEMgaXMgc2VjdXJlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BJTyBwb3J0IEMgaXMgbm9uLXNlY3VyZS4KKyAgICAgKiB8WzNdICAgICB8UEQgICAgICAgIHxTZXQgR1BJTyBQb3J0IEQgdG8gTm9uLXNjZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBQRCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQSU8gcG9ydCBEIGlzIHNlY3VyZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQSU8gcG9ydCBEIGlzIG5vbi1zZWN1cmUuCisgICAgICogfFs0XSAgICAgfFBFICAgICAgICB8U2V0IEdQSU8gUG9ydCBFIHRvIE5vbi1zY2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgUEUgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHUElPIHBvcnQgRSBpcyBzZWN1cmUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHUElPIHBvcnQgRSBpcyBub24tc2VjdXJlLgorICAgICAqIHxbNV0gICAgIHxQRiAgICAgICAgfFNldCBHUElPIFBvcnQgRiB0byBOb24tc2NlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFBGIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BJTyBwb3J0IEYgaXMgc2VjdXJlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BJTyBwb3J0IEYgaXMgbm9uLXNlY3VyZS4KKyAgICAgKiB8WzZdICAgICB8UEcgICAgICAgIHxTZXQgR1BJTyBQb3J0IEcgdG8gTm9uLXNjZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBQRyB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQSU8gcG9ydCBHIGlzIHNlY3VyZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQSU8gcG9ydCBHIGlzIG5vbi1zZWN1cmUuCisgICAgICogfFs3XSAgICAgfFBIICAgICAgICB8U2V0IEdQSU8gUG9ydCBIIHRvIE5vbi1zY2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgUEggdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHUElPIHBvcnQgSCBpcyBzZWN1cmUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHUElPIHBvcnQgSCBpcyBub24tc2VjdXJlLgorICAgICAqIEB2YXIgU0NVX1Q6OlNSQU1OU1NFVAorICAgICAqIE9mZnNldDogMHgyNCAgU1JBTSBOb24tc2VjdXJlIEF0dHJpYnV0aW9uIFNldCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMTowXSAgfFNFQ24gICAgICB8U2V0IFNSQU0gU2VjdGlvbiBOIHRvIE5vbi1zY2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgU1JBTSBzZWN0aW9uIG4gdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUkFNIFNlY3Rpb24gbiBpcyBzZWN1cmUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUkFNIFNlY3Rpb24gbiBpcyBub24tc2VjdXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNlY3VyZSBTUkFNIHNlY3Rpb24gbiBpcyAweDIwMDBfMDAwMCsweDIwMDAqbiB0byAweDIwMDBfMDAwMCsweDIwMDAqKG4rMSktMHgxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm9uLXNlY3VyZSBTUkFNIHNlY3Rpb24gbiBpcyAweDMwMDBfMDAwMCsweDIwMDAqbiB0byAweDMwMDBfMDAwMCsweDIwMDAqKG4rMSktMHgxCisgICAgICogQHZhciBTQ1VfVDo6Rk5TQUREUgorICAgICAqIE9mZnNldDogMHgyOCAgRmxhc2ggTm9uLXNlY3VyZSBCb3VuZGFyeSBBZGRyZXNzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8Rk5TQUREUiAgIHxGbGFzaCBOb24tc2VjdXJlIEJvdW5kYXJ5IEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgYmFzZSBhZGRyZXNzIG9mIE5vbi1zZWN1cmUgcmVnaW9uIHNldCBpbiB1c2VyIGNvbmZpZ3VyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWZlciB0byBGTUMgc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAqIEB2YXIgU0NVX1Q6OlNWSU9JRU4KKyAgICAgKiBPZmZzZXQ6IDB4MkMgIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QVBCMElFTiAgIHxBUEIwIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIEFQQjAgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgQVBCMCBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxBUEIxSUVOICAgfEFQQjEgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgQVBCMSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBBUEIxIEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfEdQSU9JRU4gICB8R1BJTyBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBHUElPIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIEdQSU8gRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8RUJJSUVOICAgIHxFQkkgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgRUJJIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIEVCSSBFbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxVU0JISUVOICAgfFVTQkggU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgVVNCIGhvc3QgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgVVNCIGhvc3QgRW5hYmxlZC4KKyAgICAgKiB8WzddICAgICB8Q1JDSUVOICAgIHxDUkMgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgQ1JDIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIENSQyBFbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxTREgwSUVOICAgfFNESDAgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgU0QgaG9zdCAwIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIFNEIGhvc3QgMCBFbmFibGVkLgorICAgICAqIHxbMTBdICAgIHxQRE1BMElFTiAgfFBETUEwIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIFBETUEwIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIFBETUEwIEVuYWJsZWQuCisgICAgICogfFsxMV0gICAgfFBETUExSUVOICB8UERNQTEgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgUERNQTEgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgUERNQTEgRW5hYmxlZC4KKyAgICAgKiB8WzEyXSAgICB8U1JBTTBJRU4gIHxTUkFNIEJhbmsgMCBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBTUkFNIGJhbmswIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIFNSQU0gYmFuazAgRW5hYmxlZC4KKyAgICAgKiB8WzEzXSAgICB8U1JBTTFJRU4gIHxTUkFNIEJhbmsgMSBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBTUkFNIGJhbmsxIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIFNSQU0gYmFuazEgRW5hYmxlZC4KKyAgICAgKiB8WzE0XSAgICB8Rk1DSUVOICAgIHxGTUMgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgRk1DIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIEZNQyBFbmFibGVkLgorICAgICAqIHxbMTVdICAgIHxGTEFTSElFTiAgfEZMQVNIIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIEZsYXNoIGRhdGEgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgRmxhc2ggZGF0YSBFbmFibGVkLgorICAgICAqIHxbMTZdICAgIHxTQ1VJRU4gICAgfFNDVSBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBTQ1UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgU0NVIEVuYWJsZWQuCisgICAgICogfFsxN10gICAgfFNZU0lFTiAgICB8U1lTIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIHN5c3RlbSBtYW5hZ2VyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIHN5c3RlbSBtYW5hZ2VyIEVuYWJsZWQuCisgICAgICogfFsxOF0gICAgfENSUFRJRU4gICB8Q1JQVCBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBjcnlwdG8gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgY3J5cHRvIEVuYWJsZWQuCisgICAgICogQHZhciBTQ1VfVDo6U1ZJTlRTVFMKKyAgICAgKiBPZmZzZXQ6IDB4MzAgIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QVBCMElGICAgIHxBUEIwIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEFQQjAgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlcmUgaXMgQVBCMCB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGludGVycnVwdCBmbGFnLgorICAgICAqIHxbMV0gICAgIHxBUEIxSUYgICAgfEFQQjEgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQVBCMSB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBBUEIxIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuCisgICAgICogfFs0XSAgICAgfEdQSU9JRiAgICB8R1BJTyBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBHUElPIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIEdQSU8gdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4KKyAgICAgKiB8WzVdICAgICB8RUJJSUYgICAgIHxFQkkgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gRUJJIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIEVCSSB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGludGVycnVwdCBmbGFnLgorICAgICAqIHxbNl0gICAgIHxVU0JISUYgICAgfFVTQkggU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gVVNCSCB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBVU0JIIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuCisgICAgICogfFs3XSAgICAgfENSQ0lGICAgICB8Q1JDIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIENSQyB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBDUkMgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4KKyAgICAgKiB8WzhdICAgICB8U0RIMElGICAgIHxTREgwIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFNESDAgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlcmUgaXMgU0RIMCB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGludGVycnVwdCBmbGFnLgorICAgICAqIHxbMTBdICAgIHxQRE1BMElGICAgfFBETUEwIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFBETUEwIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIFBETUEwIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuCisgICAgICogfFsxMV0gICAgfFBETUExSUYgICB8UERNQTEgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUERNQTEgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlcmUgaXMgUERNQTEgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4KKyAgICAgKiB8WzEyXSAgICB8U1JBTTBJRiAgIHxTUkFNMCBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBTUkFNMCB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBTUkFNMCB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGludGVycnVwdCBmbGFnLgorICAgICAqIHxbMTNdICAgIHxTUkFNMUlGICAgfFNSQU0gQmFuayAxIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFNSQU0xIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIFNSQU0xIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuCisgICAgICogfFsxNF0gICAgfEZNQ0lGICAgICB8Rk1DIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEZNQyB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBGTUMgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4KKyAgICAgKiB8WzE1XSAgICB8RkxBU0hJRiAgIHxGTEFTSCBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBGTEFTSCB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBGTEFTSCB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGludGVycnVwdCBmbGFnLgorICAgICAqIHxbMTZdICAgIHxTQ1VJRiAgICAgfFNDVSBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBTQ1UgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlcmUgaXMgU0NVIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuCisgICAgICogfFsxN10gICAgfFNZU0lGICAgICB8U1lTIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFNZUyB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBTWVMgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4KKyAgICAgKiB8WzE4XSAgICB8Q1JQVElGICAgIHxDUlBUIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIENSUFQgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlcmUgaXMgQ1JQVCB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGludGVycnVwdCBmbGFnLgorICAgICAqIEB2YXIgU0NVX1Q6OkFQQjBWU1JDCisgICAgICogT2Zmc2V0OiAweDM0ICBBUEIwIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6QVBCMFZBCisgICAgICogT2Zmc2V0OiAweDM4ICBBUEIwIFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8VklPQUREUiAgIHxWaW9sYXRpb24gQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHRoZSB0YXJnZXQgYWRkcmVzcyBvZiB0aGUgYWNjZXNzLCB3aGljaCBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogQHZhciBTQ1VfVDo6QVBCMVZTUkMKKyAgICAgKiBPZmZzZXQ6IDB4M0MgIEFQQjEgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxNQVNURVIgICAgfE1hc3RlciBWaW9sYXRpbmcgU2VjdXJpdHkgUG9saWN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgd2hpY2ggbWFzdGVyIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAgPSBjb3JlIHByb2Nlc3Nvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDMgPSBQRE1BMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQgPSBTREgwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NSA9IENSWVBUTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDYgPSBVU0guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHhCID0gUERNQTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIGlzIHVuZGVmaW5lZC4KKyAgICAgKiBAdmFyIFNDVV9UOjpBUEIxVkEKKyAgICAgKiBPZmZzZXQ6IDB4NDAgIEFQQjEgVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpHUElPVlNSQworICAgICAqIE9mZnNldDogMHg0NCAgR1BJTyBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfE1BU1RFUiAgICB8TWFzdGVyIFZpb2xhdGluZyBTZWN1cml0eSBQb2xpY3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB3aGljaCBtYXN0ZXIgaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MCA9IGNvcmUgcHJvY2Vzc29yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MyA9IFBETUEwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NCA9IFNESDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg1ID0gQ1JZUFRPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NiA9IFVTSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweEIgPSBQRE1BMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgaXMgdW5kZWZpbmVkLgorICAgICAqIEB2YXIgU0NVX1Q6OkdQSU9WQQorICAgICAqIE9mZnNldDogMHg0OCAgR1BJTyBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6OkVCSVZTUkMKKyAgICAgKiBPZmZzZXQ6IDB4NEMgIEVCSSBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfE1BU1RFUiAgICB8TWFzdGVyIFZpb2xhdGluZyBTZWN1cml0eSBQb2xpY3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB3aGljaCBtYXN0ZXIgaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MCA9IGNvcmUgcHJvY2Vzc29yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MyA9IFBETUEwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NCA9IFNESDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg1ID0gQ1JZUFRPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NiA9IFVTSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweEIgPSBQRE1BMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgaXMgdW5kZWZpbmVkLgorICAgICAqIEB2YXIgU0NVX1Q6OkVCSVZBCisgICAgICogT2Zmc2V0OiAweDUwICBFQkkgVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpVU0JIVlNSQworICAgICAqIE9mZnNldDogMHg1NCAgVVNCSCBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfE1BU1RFUiAgICB8TWFzdGVyIFZpb2xhdGluZyBTZWN1cml0eSBQb2xpY3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB3aGljaCBtYXN0ZXIgaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MCA9IGNvcmUgcHJvY2Vzc29yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MyA9IFBETUEwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NCA9IFNESDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg1ID0gQ1JZUFRPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NiA9IFVTSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweEIgPSBQRE1BMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgaXMgdW5kZWZpbmVkLgorICAgICAqIEB2YXIgU0NVX1Q6OlVTQkhWQQorICAgICAqIE9mZnNldDogMHg1OCAgVVNCSCBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6OkNSQ1ZTUkMKKyAgICAgKiBPZmZzZXQ6IDB4NUMgIENSQyBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfE1BU1RFUiAgICB8TWFzdGVyIFZpb2xhdGluZyBTZWN1cml0eSBQb2xpY3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB3aGljaCBtYXN0ZXIgaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MCA9IGNvcmUgcHJvY2Vzc29yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MyA9IFBETUEwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NCA9IFNESDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg1ID0gQ1JZUFRPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NiA9IFVTSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweEIgPSBQRE1BMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgaXMgdW5kZWZpbmVkLgorICAgICAqIEB2YXIgU0NVX1Q6OkNSQ1ZBCisgICAgICogT2Zmc2V0OiAweDYwICBDUkMgVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpTRDBWU1JDCisgICAgICogT2Zmc2V0OiAweDY0ICBTREgwIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6U0QwVkEKKyAgICAgKiBPZmZzZXQ6IDB4NjggIFNESDAgVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpQRE1BMFZTUkMKKyAgICAgKiBPZmZzZXQ6IDB4NzQgIFBETUEwIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6UERNQTBWQQorICAgICAqIE9mZnNldDogMHg3OCAgUERNQTAgVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpQRE1BMVZTUkMKKyAgICAgKiBPZmZzZXQ6IDB4N0MgIFBETUExIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6UERNQTFWQQorICAgICAqIE9mZnNldDogMHg4MCAgUERNQTEgVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpTUkFNMFZTUkMKKyAgICAgKiBPZmZzZXQ6IDB4ODQgIFNSQU0wIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6U1JBTTBWQQorICAgICAqIE9mZnNldDogMHg4OCAgU1JBTTAgVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpTUkFNMVZTUkMKKyAgICAgKiBPZmZzZXQ6IDB4OEMgIFNSQU0xIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6U1JBTTFWQQorICAgICAqIE9mZnNldDogMHg5MCAgU1JBTTEgVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpGTUNWU1JDCisgICAgICogT2Zmc2V0OiAweDk0ICBGTUMgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxNQVNURVIgICAgfE1hc3RlciBWaW9sYXRpbmcgU2VjdXJpdHkgUG9saWN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgd2hpY2ggbWFzdGVyIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAgPSBjb3JlIHByb2Nlc3Nvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDMgPSBQRE1BMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQgPSBTREgwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NSA9IENSWVBUTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDYgPSBVU0guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHhCID0gUERNQTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIGlzIHVuZGVmaW5lZC4KKyAgICAgKiBAdmFyIFNDVV9UOjpGTUNWQQorICAgICAqIE9mZnNldDogMHg5OCAgRk1DIFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8VklPQUREUiAgIHxWaW9sYXRpb24gQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHRoZSB0YXJnZXQgYWRkcmVzcyBvZiB0aGUgYWNjZXNzLCB3aGljaCBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogQHZhciBTQ1VfVDo6RkxBU0hWU1JDCisgICAgICogT2Zmc2V0OiAweDlDICBGbGFzaCBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfE1BU1RFUiAgICB8TWFzdGVyIFZpb2xhdGluZyBTZWN1cml0eSBQb2xpY3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB3aGljaCBtYXN0ZXIgaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MCA9IGNvcmUgcHJvY2Vzc29yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MyA9IFBETUEwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NCA9IFNESDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg1ID0gQ1JZUFRPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NiA9IFVTSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweEIgPSBQRE1BMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgaXMgdW5kZWZpbmVkLgorICAgICAqIEB2YXIgU0NVX1Q6OkZMQVNIVkEKKyAgICAgKiBPZmZzZXQ6IDB4QTAgIEZsYXNoIFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8VklPQUREUiAgIHxWaW9sYXRpb24gQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHRoZSB0YXJnZXQgYWRkcmVzcyBvZiB0aGUgYWNjZXNzLCB3aGljaCBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogQHZhciBTQ1VfVDo6U0NVVlNSQworICAgICAqIE9mZnNldDogMHhBNCAgU0NVIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6U0NVVkEKKyAgICAgKiBPZmZzZXQ6IDB4QTggIFNDVSBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6OlNZU1ZTUkMKKyAgICAgKiBPZmZzZXQ6IDB4QUMgIFN5c3RlbSBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfE1BU1RFUiAgICB8TWFzdGVyIFZpb2xhdGluZyBTZWN1cml0eSBQb2xpY3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB3aGljaCBtYXN0ZXIgaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MCA9IGNvcmUgcHJvY2Vzc29yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MyA9IFBETUEwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NCA9IFNESDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg1ID0gQ1JZUFRPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NiA9IFVTSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweEIgPSBQRE1BMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgaXMgdW5kZWZpbmVkLgorICAgICAqIEB2YXIgU0NVX1Q6OlNZU1ZBCisgICAgICogT2Zmc2V0OiAweEIwICBTeXN0ZW0gVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpDUlBUVlNSQworICAgICAqIE9mZnNldDogMHhCNCAgQ3J5cHRvIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6Q1JQVFZBCisgICAgICogT2Zmc2V0OiAweEI4ICBDcnlwdG8gVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpOU01DVEwKKyAgICAgKiBPZmZzZXQ6IDB4MjAwICBOb24tc2VjdXJlIFN0YXRlIE1vbml0b3IgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfFBSRVNDQUxFICB8UHJlLXNjYWxlIFZhbHVlIG9mIE5vbi1zZWN1cmUgU3RhdGUgTW9uaXRvciBDb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gQ291bnRlciBFbmFibGVkIGFuZCB0aGUgY291bnRlciBjbG9jayBzb3VyY2UgPSBIQ0xLL1BSRVNDQUxFLgorICAgICAqIHxbOF0gICAgIHxOU01JRU4gICAgfE5vbi1zZWN1cmUgU3RhdGUgTW9uaXRvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb24tc2VjdXJlIHN0YXRlIG1vbml0b3IgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBOb24tc2VjdXJlIHN0YXRlIG1vbml0b3IgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs5XSAgICAgfEFVVE9STEQgICB8QXV0byBSZWxvYWQgTm9uLXNlY3VyZSBTdGF0ZSBNb25pdG9yIENvdW50ZXIgV2hlbiBDVVJSTlMgQ2hhbmdpbmcgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEaXNhYmxlIGNsZWFyaW5nIG5vbi1zZWN1cmUgc3RhdGUgbW9uaXRvciBjb3VudGVyIGF1dG9tdGljYWxseS4gKGRlZmF1bHQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZSBjbGVhcmluZyBub24tc2VjdXJlIHN0YXRlIG1vbml0b3IgY291bnRlciBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNvcmUgcHJvY2Vzc29yIGNoYW5nZXMgZnJvbSBzZWN1cmUgc3RhdGUgdG8gbm9uLXNlY3VyZSBzdGF0ZQorICAgICAqIHxbMTBdICAgIHxUTVJNT0QgICAgfE5vbi1zZWN1cmUgTW9uaXRvciBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTW9uaXRvciBtb2RlLiBUaGUgY291bnRlciB3aWxsIGNvdW50IGRvd24gd2hlbiB0aGUgY29yZSBwcm9jZXNzb3IgaXMgaW4gbm9uLXNlY3VyZSBzdGF0ZS4gKGRlZmF1bHQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZyZWUtY291bnRpbmcgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3VudGVyIHdpbGwga2VlcCBjb3VudGluZyBubyBtYXRlciB0aGUgY29yZSBwcm9jZXNzb3IgaXMgaW4gc2VjdXJlIG9yIG5vbi1zZWN1cmUgc3RhdGUuCisgICAgICogfFsxMl0gICAgfElETEVPTiAgICB8TW9uaXRvciBDb3VudGVyIEtlZXAgQ291bnRpbmcgV2hlbiB0aGUgQ2hpcCBpcyBpbiBJZGxlIE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgY291bnRlciB3aWxsIGJlIGhhbHRlZCB3aGVuIHRoZSBjaGlwIGlzIGluIGlkbGUgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGNvdW50ZXIgd2lsbCBrZWVwIGNvdW50aW5nIHdoZW4gdGhlIGNoaXAgaXMgaW4gaWRsZSBtb2RlLiAoZGVmYXVsdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBtb25pdG9yIG1vZGUsIHRoZSBjb3VudGVyIGlzIGFsd2F5cyBoYWx0ZWQgd2hlbiB0aGUgY29yZSBwcm9jZXNzb3IgaXMgaW4gc2VjdXJlIHN0YXRlLgorICAgICAqIHxbMTNdICAgIHxEQkdPTiAgICAgfE1vbml0b3IgQ291bnRlciBLZWVwIENvdW50aW5nIFdoZW4gdGhlIENoaXAgaXMgaW4gRGVidWcgTW9kZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBjb3VudGVyIHdpbGwgYmUgaGFsdGVkIHdoZW4gdGhlIGNvcmUgcHJvY2Vzc29yIGlzIGhhbHRlZCBieSBJQ0UuIChkZWZhdWx0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgY291bnRlciB3aWxsIGtlZXAgY291bnRpbmcgd2hlbiB0aGUgY29yZSBwcm9jZXNzb3IgaXMgaGFsdGVkIGJ5IElDRS4KKyAgICAgKiBAdmFyIFNDVV9UOjpOU01MT0FECisgICAgICogT2Zmc2V0OiAweDIwNCAgTm9uLXNlY3VyZSBTdGF0ZSBNb25pdG9yIFJlbG9hZCBWYWx1ZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyMzowXSAgfFJFTE9BRCAgICB8UmVsb2FkIFZhbHVlIGZvciBOb24tc2VjdXJlIFN0YXRlIE1vbml0b3IgQ291bnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBSRUxPQUQgdmFsdWUgd2lsbCBiZSByZWxvYWRlZCB0byB0aGUgY291bnRlciB3aGVuZXZlciB0aGUgY291bnRlciBjb3VudHMgZG93biB0byAwLgorICAgICAqIEB2YXIgU0NVX1Q6Ok5TTVZBTAorICAgICAqIE9mZnNldDogMHgyMDggIE5vbi1zZWN1cmUgU3RhdGUgTW9uaXRvciBDb3VudGVyIFZhbHVlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzIzOjBdICB8VkFMVUUgICAgIHxDb3VudGVyIFZhbHVlIG9mIE5vbi1zZWN1cmUgU3RhdGUgTW9uaXRvciBDb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q3VycmVudCB2YWx1ZSBvZiBub24tc2VjdXJlIHN0YXRlIG1vbml0b3IgY291bnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgaXMgZG93biBjb3VudGVyIGFuZCBjb3VudHMgZG93biBvbmx5IHdoZW4gQ1VSUk5TID0gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gY291bnRpbmcgZG93biB0byAwLCBWQUxVRSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcmVsb2FkZWQgZnJvbSBOU01MT0FEIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgd3JpdGUgb2YgYW55IHZhbHVlIGNsZWFycyB0aGUgVkFMVUUgdG8gMCBhbmQgYWxzbyBjbGVhcnMgTlNNSUYuCisgICAgICogQHZhciBTQ1VfVDo6TlNNU1RTCisgICAgICogT2Zmc2V0OiAweDIwQyAgTm9uLXNlY3VyZSBTdGF0ZSBNb25pdG9yIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENVUlJOUyAgICB8Q3VycmVudCBDb3JlIFByb2Nlc3NvciBTZWN1cmUvTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb3JlIHByb2Nlc3NvciBpcyBpbiBzZWN1cmUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvcmUgcHJvY2Vzc29yIGlzIGluIG5vbi1zZWN1cmUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgY2FuIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgY3VycmVudCBzZWN1cmUvbm9uLXNlY3VyZSBzdGF0ZSBvZiB0aGUgY29yZSBwcm9jZXNzb3IsIGV2ZW4gaWYgdGhlIG5vbi1zZWN1cmUgc3RhdGUgbW9uaXRvciBjb3VudGVyIGlzIGRpc2FibGVkLgorICAgICAqIHxbMV0gICAgIHxOU01JRiAgICAgfE5vbi1zZWN1cmUgU3RhdGUgTW9uaXRvciBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb3VudGVyIGRvZXNudTIwMTl0IGNvdW50IGRvd24gdG8gMCBzaW5jZSB0aGUgbGFzdCBOU01JRiBoYXMgYmVlbiBjbGVhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb3VudGVyIGNvdW50cyBkb3duIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQTlNTRVRbN107ICAgICAgICAgICAgIC8qITwgWzB4MDAwMH4wWDAwMThdIFBlcmlwaGVyYWwgTm9uLXNlY3VyZSBBdHRyaWJ1dGlvbiBTZXQgUmVnaXN0ZXIwICgweDQwMDBfMDAwMH4weDQwMDFfRkZGRikgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzFdOworICAgIF9fSU8gdWludDMyX3QgSU9OU1NFVDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMjBdIElPIE5vbi1zZWN1cmUgQXR0cmlidXRpb24gU2V0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNSQU1OU1NFVDsgICAgICAgICAgICAgLyohPCBbMHgwMDI0XSBTUkFNIE5vbi1zZWN1cmUgQXR0cmlidXRpb24gU2V0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBGTlNBRERSOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAyOF0gRmxhc2ggTm9uLXNlY3VyZSBCb3VuZGFyeSBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1ZJT0lFTjsgICAgICAgICAgICAgICAvKiE8IFsweDAwMmNdIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNWSU5UU1RTOyAgICAgICAgICAgICAgLyohPCBbMHgwMDMwXSBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBBUEIwVlNSQzsgICAgICAgICAgICAgIC8qITwgWzB4MDAzNF0gQVBCMCBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQVBCMFZBOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMzhdIEFQQjAgVmlvbGF0aW9uIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEFQQjFWU1JDOyAgICAgICAgICAgICAgLyohPCBbMHgwMDNjXSBBUEIxIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBBUEIxVkE7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA0MF0gQVBCMSBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgR1BJT1ZTUkM7ICAgICAgICAgICAgICAvKiE8IFsweDAwNDRdIEdQSU8gU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEdQSU9WQTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDQ4XSBHUElPIFZpb2xhdGlvbiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBFQklWU1JDOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA0Y10gRUJJIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgRUJJVkE7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNTBdIEVCSSBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFVTQkhWU1JDOyAgICAgICAgICAgICAgLyohPCBbMHgwMDU0XSBVU0JIIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBVU0JIVkE7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA1OF0gVVNCSCBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQ1JDVlNSQzsgICAgICAgICAgICAgICAvKiE8IFsweDAwNWNdIENSQyBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IENSQ1ZBOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDYwXSBDUkMgVmlvbGF0aW9uIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBTRDBWU1JDOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA2NF0gU0RIMCBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgU0QwVkE7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNjhdIFNESDAgVmlvbGF0aW9uIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxWzJdOworICAgIF9fSSAgdWludDMyX3QgUERNQTBWU1JDOyAgICAgICAgICAgICAvKiE8IFsweDAwNzRdIFBETUEwIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFBETUEwVkE7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDc4XSBQRE1BMCBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBQRE1BMVZTUkM7ICAgICAgICAgICAgIC8qITwgWzB4MDA3Y10gUERNQTEgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUERNQTFWQTsgICAgICAgICAgICAgICAvKiE8IFsweDAwODBdIFBETUExIFZpb2xhdGlvbiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNSQU0wVlNSQzsgICAgICAgICAgICAgLyohPCBbMHgwMDg0XSBTUkFNMCBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBTUkFNMFZBOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA4OF0gU1JBTTAgVmlvbGF0aW9uIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgU1JBTTFWU1JDOyAgICAgICAgICAgICAvKiE8IFsweDAwOGNdIFNSQU0xIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNSQU0xVkE7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDkwXSBTUkFNMSBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBGTUNWU1JDOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA5NF0gRk1DIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgRk1DVkE7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwOThdIEZNQyBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEZMQVNIVlNSQzsgICAgICAgICAgICAgLyohPCBbMHgwMDljXSBGbGFzaCBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBGTEFTSFZBOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBhMF0gRmxhc2ggVmlvbGF0aW9uIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgU0NVVlNSQzsgICAgICAgICAgICAgICAvKiE8IFsweDAwYTRdIFNDVSBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNDVVZBOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMGE4XSBTQ1UgVmlvbGF0aW9uIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBTWVNWU1JDOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBhY10gU3lzdGVtIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgU1lTVkE7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwYjBdIFN5c3RlbSBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IENSUFRWU1JDOyAgICAgICAgICAgICAgLyohPCBbMHgwMGI0XSBDcnlwdG8gU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBDUlBUVkE7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDBiOF0gQ3J5cHRvIFZpb2xhdGlvbiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTJbODFdOworICAgIF9fSU8gdWludDMyX3QgTlNNQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAyMDBdIE5vbi1zZWN1cmUgU3RhdGUgTW9uaXRvciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IE5TTUxPQUQ7ICAgICAgICAgICAgICAgLyohPCBbMHgwMjA0XSBOb24tc2VjdXJlIFN0YXRlIE1vbml0b3IgUmVsb2FkIFZhbHVlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBOU01WQUw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDIwOF0gTm9uLXNlY3VyZSBTdGF0ZSBNb25pdG9yIENvdW50ZXIgVmFsdWUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTlNNU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAyMGNdIE5vbi1zZWN1cmUgU3RhdGUgTW9uaXRvciBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBTQ1VfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgU0NVX0NPTlNUIFNDVSBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBTQ1UgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUMF9VU0JIX1BvcyAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDA6IFVTQkggUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDBfVVNCSF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQwX1VTQkhfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQwOiBVU0JIIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDBfU0RIMF9Qb3MgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQwOiBTREgwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQwX1NESDBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUMF9TREgwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMDogU0RIMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQwX0VCSV9Qb3MgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMDogRUJJIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUMF9FQklfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDBfRUJJX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDA6IEVCSSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUMF9QRE1BMV9Qb3MgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDA6IFBETUExIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDBfUERNQTFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQwX1BETUExX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQwOiBQRE1BMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDFfQ1JDX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQxOiBDUkMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQxX0NSQ19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUMV9DUkNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMTogQ1JDIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQxX0NSUFRfUG9zICAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMTogQ1JQVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUMV9DUlBUX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDFfQ1JQVF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDE6IENSUFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUMl9SVENfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IFJUQyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDJfUlRDX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQyX1JUQ19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBSVEMgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDJfRUFEQ19Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBFQURDIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQyX0VBRENfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUMl9FQURDX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogRUFEQyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQyX0FDTVAwMV9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogQUNNUDAxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUMl9BQ01QMDFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDJfQUNNUDAxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IEFDTVAwMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUMl9EQUNfUG9zICAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IERBQyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDJfREFDX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQyX0RBQ19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBEQUMgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDJfSTJTMF9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBJMlMwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQyX0kyUzBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUMl9JMlMwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogSTJTMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQyX09UR19Qb3MgICAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogT1RHIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUMl9PVEdfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDJfT1RHX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IE9URyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUMl9UTVIyM19Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IFRNUjIzIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDJfVE1SMjNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQyX1RNUjIzX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBUTVIyMyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDJfRVBXTTBfUG9zICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBFUFdNMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQyX0VQV00wX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUMl9FUFdNMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogRVBXTTAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQyX0VQV00xX1BvcyAgICAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogRVBXTTEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUMl9FUFdNMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDJfRVBXTTFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IEVQV00xIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUMl9CUFdNMF9Qb3MgICAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IEJQV00wIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDJfQlBXTTBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQyX0JQV00wX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBCUFdNMCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDJfQlBXTTFfUG9zICAgICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBCUFdNMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQyX0JQV00xX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUMl9CUFdNMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogQlBXTTEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQzX1FTUEkwX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogUVNQSTAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUM19RU1BJMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDNfUVNQSTBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFFTUEkwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUM19TUEkwX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFNQSTAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDNfU1BJMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQzX1NQSTBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBTUEkwIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDNfU1BJMV9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBTUEkxIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQzX1NQSTFfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUM19TUEkxX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogU1BJMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQzX1NQSTJfUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogU1BJMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUM19TUEkyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDNfU1BJMl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFNQSTIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUM19TUEkzX1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFNQSTMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDNfU1BJM19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQzX1NQSTNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBTUEkzIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDNfVUFSVDBfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBVQVJUMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQzX1VBUlQwX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUM19VQVJUMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogVUFSVDAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQzX1VBUlQxX1BvcyAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogVUFSVDEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUM19VQVJUMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDNfVUFSVDFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFVBUlQxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUM19VQVJUMl9Qb3MgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFVBUlQyIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDNfVUFSVDJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQzX1VBUlQyX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBVQVJUMiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDNfVUFSVDNfUG9zICAgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBVQVJUMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQzX1VBUlQzX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUM19VQVJUM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogVUFSVDMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQzX1VBUlQ0X1BvcyAgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogVUFSVDQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUM19VQVJUNF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDNfVUFSVDRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFVBUlQ0IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUM19VQVJUNV9Qb3MgICAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFVBUlQ1IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDNfVUFSVDVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQzX1VBUlQ1X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBVQVJUNSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDRfSTJDMF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ0OiBJMkMwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQ0X0kyQzBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUNF9JMkMwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNDogSTJDMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQ0X0kyQzFfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNDogSTJDMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUNF9JMkMxX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDRfSTJDMV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDQ6IEkyQzEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUNF9JMkMyX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDQ6IEkyQzIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDRfSTJDMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQ0X0kyQzJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ0OiBJMkMyIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDRfU0MwX1BvcyAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ0OiBTQzAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQ0X1NDMF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUNF9TQzBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNDogU0MwIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQ0X1NDMV9Qb3MgICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNDogU0MxIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUNF9TQzFfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDRfU0MxX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDQ6IFNDMSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUNF9TQzJfUG9zICAgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDQ6IFNDMiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDRfU0MyX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQ0X1NDMl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ0OiBTQzIgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDVfQ0FOMF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ1OiBDQU4wIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQ1X0NBTjBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUNV9DQU4wX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNTogQ0FOMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQ1X1FFSTBfUG9zICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNTogUUVJMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUNV9RRUkwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDVfUUVJMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDU6IFFFSTAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUNV9RRUkxX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDU6IFFFSTEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDVfUUVJMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQ1X1FFSTFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ1OiBRRUkxIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDVfRUNBUDBfUG9zICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ1OiBFQ0FQMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQ1X0VDQVAwX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUNV9FQ0FQMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNTogRUNBUDAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQ1X0VDQVAxX1BvcyAgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNTogRUNBUDEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUNV9FQ0FQMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDVfRUNBUDFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDU6IEVDQVAxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUNV9UUk5HX1BvcyAgICAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDU6IFRSTkcgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDVfVFJOR19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQ1X1RSTkdfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ1OiBUUk5HIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDZfVVNCRF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ2OiBVU0JEIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQ2X1VTQkRfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUNl9VU0JEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNjogVVNCRCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQ2X1VTQ0kwX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNjogVVNDSTAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUNl9VU0NJMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDZfVVNDSTBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDY6IFVTQ0kwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUNl9VU0NJMV9Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDY6IFVTQ0kxIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDZfVVNDSTFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQ2X1VTQ0kxX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ2OiBVU0NJMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0lPTlNTRVRfUEFfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpJT05TU0VUOiBQQSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDVV9JT05TU0VUX1BBX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfSU9OU1NFVF9QQV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6SU9OU1NFVDogUEEgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9JT05TU0VUX1BCX1BvcyAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6SU9OU1NFVDogUEIgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ1VfSU9OU1NFVF9QQl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX0lPTlNTRVRfUEJfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OklPTlNTRVQ6IFBCIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfSU9OU1NFVF9QQ19Qb3MgICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OklPTlNTRVQ6IFBDIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX0lPTlNTRVRfUENfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9JT05TU0VUX1BDX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpJT05TU0VUOiBQQyBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0lPTlNTRVRfUERfUG9zICAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpJT05TU0VUOiBQRCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDVV9JT05TU0VUX1BEX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfSU9OU1NFVF9QRF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6SU9OU1NFVDogUEQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9JT05TU0VUX1BFX1BvcyAgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6SU9OU1NFVDogUEUgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ1VfSU9OU1NFVF9QRV9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX0lPTlNTRVRfUEVfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OklPTlNTRVQ6IFBFIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfSU9OU1NFVF9QRl9Qb3MgICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OklPTlNTRVQ6IFBGIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX0lPTlNTRVRfUEZfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9JT05TU0VUX1BGX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpJT05TU0VUOiBQRiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0lPTlNTRVRfUEdfUG9zICAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpJT05TU0VUOiBQRyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDVV9JT05TU0VUX1BHX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfSU9OU1NFVF9QR19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6SU9OU1NFVDogUEcgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9JT05TU0VUX1BIX1BvcyAgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6SU9OU1NFVDogUEggUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ1VfSU9OU1NFVF9QSF9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX0lPTlNTRVRfUEhfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OklPTlNTRVQ6IFBIIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1JBTU5TU0VUX1NFQ25fUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNSQU1OU1NFVDogU0VDbiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1NSQU1OU1NFVF9TRUNuX01zayAgICAgICAgICAgKDB4ZmZmdWwgPDwgU0NVX1NSQU1OU1NFVF9TRUNuX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTUkFNTlNTRVQ6IFNFQ24gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0ZOU0FERFJfRk5TQUREUl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpGTlNBRERSOiBGTlNBRERSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9GTlNBRERSX0ZOU0FERFJfTXNrICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0NVX0ZOU0FERFJfRk5TQUREUl9Qb3MpICAgICAgICAgLyohPCBTQ1VfVDo6Rk5TQUREUjogRk5TQUREUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklPSUVOX0FQQjBJRU5fUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogQVBCMElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJT0lFTl9BUEIwSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU9JRU5fQVBCMElFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IEFQQjBJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJT0lFTl9BUEIxSUVOX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IEFQQjFJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU9JRU5fQVBCMUlFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklPSUVOX0FQQjFJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBBUEIxSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU9JRU5fR1BJT0lFTl9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBHUElPSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9TVklPSUVOX0dQSU9JRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJT0lFTl9HUElPSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogR1BJT0lFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklPSUVOX0VCSUlFTl9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogRUJJSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJT0lFTl9FQklJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU9JRU5fRUJJSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IEVCSUlFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJT0lFTl9VU0JISUVOX1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IFVTQkhJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU9JRU5fVVNCSElFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklPSUVOX1VTQkhJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBVU0JISUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU9JRU5fQ1JDSUVOX1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBDUkNJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9TVklPSUVOX0NSQ0lFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJT0lFTl9DUkNJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogQ1JDSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklPSUVOX1NESDBJRU5fUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogU0RIMElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJT0lFTl9TREgwSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU9JRU5fU0RIMElFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IFNESDBJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJT0lFTl9QRE1BMElFTl9Qb3MgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IFBETUEwSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU9JRU5fUERNQTBJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklPSUVOX1BETUEwSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBQRE1BMElFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU9JRU5fUERNQTFJRU5fUG9zICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBQRE1BMUlFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNDVV9TVklPSUVOX1BETUExSUVOX01zayAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJT0lFTl9QRE1BMUlFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogUERNQTFJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklPSUVOX1NSQU0wSUVOX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogU1JBTTBJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTQ1VfU1ZJT0lFTl9TUkFNMElFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU9JRU5fU1JBTTBJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IFNSQU0wSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJT0lFTl9TUkFNMUlFTl9Qb3MgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IFNSQU0xSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU9JRU5fU1JBTTFJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklPSUVOX1NSQU0xSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBTUkFNMUlFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU9JRU5fRk1DSUVOX1BvcyAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBGTUNJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9TVklPSUVOX0ZNQ0lFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJT0lFTl9GTUNJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogRk1DSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklPSUVOX0ZMQVNISUVOX1BvcyAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogRkxBU0hJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTQ1VfU1ZJT0lFTl9GTEFTSElFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU9JRU5fRkxBU0hJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IEZMQVNISUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJT0lFTl9TQ1VJRU5fUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IFNDVUlFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU9JRU5fU0NVSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklPSUVOX1NDVUlFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBTQ1VJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU9JRU5fU1lTSUVOX1BvcyAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBTWVNJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9TVklPSUVOX1NZU0lFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJT0lFTl9TWVNJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogU1lTSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklPSUVOX0NSUFRJRU5fUG9zICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogQ1JQVElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJT0lFTl9DUlBUSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU9JRU5fQ1JQVElFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IENSUFRJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfQVBCMElGX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBBUEIwSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU5UU1RTX0FQQjBJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklOVFNUU19BUEIwSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogQVBCMElGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU5UU1RTX0FQQjFJRl9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogQVBCMUlGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9TVklOVFNUU19BUEIxSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJTlRTVFNfQVBCMUlGX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IEFQQjFJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklOVFNUU19HUElPSUZfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IEdQSU9JRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfR1BJT0lGX01zayAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU5UU1RTX0dQSU9JRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBHUElPSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfRUJJSUZfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBFQklJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU5UU1RTX0VCSUlGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklOVFNUU19FQklJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogRUJJSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU5UU1RTX1VTQkhJRl9Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogVVNCSElGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9TVklOVFNUU19VU0JISUZfTXNrICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJTlRTVFNfVVNCSElGX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IFVTQkhJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklOVFNUU19DUkNJRl9Qb3MgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IENSQ0lGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfQ1JDSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU5UU1RTX0NSQ0lGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBDUkNJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfU0RIMElGX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBTREgwSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU5UU1RTX1NESDBJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklOVFNUU19TREgwSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogU0RIMElGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU5UU1RTX1BETUEwSUZfUG9zICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogUERNQTBJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNDVV9TVklOVFNUU19QRE1BMElGX01zayAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJTlRTVFNfUERNQTBJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IFBETUEwSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklOVFNUU19QRE1BMUlGX1BvcyAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IFBETUExSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfUERNQTFJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU5UU1RTX1BETUExSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBQRE1BMUlGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfU1JBTTBJRl9Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBTUkFNMElGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU5UU1RTX1NSQU0wSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklOVFNUU19TUkFNMElGX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogU1JBTTBJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU5UU1RTX1NSQU0xSUZfUG9zICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogU1JBTTFJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNDVV9TVklOVFNUU19TUkFNMUlGX01zayAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJTlRTVFNfU1JBTTFJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IFNSQU0xSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklOVFNUU19GTUNJRl9Qb3MgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IEZNQ0lGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfRk1DSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU5UU1RTX0ZNQ0lGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBGTUNJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfRkxBU0hJRl9Qb3MgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBGTEFTSElGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU5UU1RTX0ZMQVNISUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklOVFNUU19GTEFTSElGX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogRkxBU0hJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU5UU1RTX1NDVUlGX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogU0NVSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9TVklOVFNUU19TQ1VJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJTlRTVFNfU0NVSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IFNDVUlGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklOVFNUU19TWVNJRl9Qb3MgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IFNZU0lGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfU1lTSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU5UU1RTX1NZU0lGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBTWVNJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfQ1JQVElGX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBDUlBUSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU5UU1RTX0NSUFRJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklOVFNUU19DUlBUSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogQ1JQVElGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0FQQjBWU1JDX01BU1RFUl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpBUEIwVlNSQzogTUFTVEVSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9BUEIwVlNSQ19NQVNURVJfTXNrICAgICAgICAgICgweGZ1bCA8PCBTQ1VfQVBCMFZTUkNfTUFTVEVSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6QVBCMFZTUkM6IE1BU1RFUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9BUEIwVkFfVklPQUREUl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6QVBCMFZBOiBWSU9BRERSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfQVBCMFZBX1ZJT0FERFJfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNDVV9BUEIwVkFfVklPQUREUl9Qb3MpICAgICAgICAgIC8qITwgU0NVX1Q6OkFQQjBWQTogVklPQUREUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfQVBCMVZTUkNfTUFTVEVSX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkFQQjFWU1JDOiBNQVNURVIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX0FQQjFWU1JDX01BU1RFUl9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNDVV9BUEIxVlNSQ19NQVNURVJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpBUEIxVlNSQzogTUFTVEVSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0FQQjFWQV9WSU9BRERSX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpBUEIxVkE6IFZJT0FERFIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9BUEIxVkFfVklPQUREUl9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0NVX0FQQjFWQV9WSU9BRERSX1BvcykgICAgICAgICAgLyohPCBTQ1VfVDo6QVBCMVZBOiBWSU9BRERSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9HUElPVlNSQ19NQVNURVJfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6R1BJT1ZTUkM6IE1BU1RFUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfR1BJT1ZTUkNfTUFTVEVSX01zayAgICAgICAgICAoMHhmdWwgPDwgU0NVX0dQSU9WU1JDX01BU1RFUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkdQSU9WU1JDOiBNQVNURVIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfR1BJT1ZBX1ZJT0FERFJfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkdQSU9WQTogVklPQUREUiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX0dQSU9WQV9WSU9BRERSX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTQ1VfR1BJT1ZBX1ZJT0FERFJfUG9zKSAgICAgICAgICAvKiE8IFNDVV9UOjpHUElPVkE6IFZJT0FERFIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0VCSVZTUkNfTUFTVEVSX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpFQklWU1JDOiBNQVNURVIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9FQklWU1JDX01BU1RFUl9Nc2sgICAgICAgICAgICgweGZ1bCA8PCBTQ1VfRUJJVlNSQ19NQVNURVJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6RUJJVlNSQzogTUFTVEVSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9FQklWQV9WSU9BRERSX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6RUJJVkE6IFZJT0FERFIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfRUJJVkFfVklPQUREUl9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNDVV9FQklWQV9WSU9BRERSX1BvcykgICAgICAgICAgIC8qITwgU0NVX1Q6OkVCSVZBOiBWSU9BRERSIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfVVNCSFZTUkNfTUFTVEVSX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlVTQkhWU1JDOiBNQVNURVIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX1VTQkhWU1JDX01BU1RFUl9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNDVV9VU0JIVlNSQ19NQVNURVJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpVU0JIVlNSQzogTUFTVEVSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1VTQkhWQV9WSU9BRERSX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpVU0JIVkE6IFZJT0FERFIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9VU0JIVkFfVklPQUREUl9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0NVX1VTQkhWQV9WSU9BRERSX1BvcykgICAgICAgICAgLyohPCBTQ1VfVDo6VVNCSFZBOiBWSU9BRERSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9DUkNWU1JDX01BU1RFUl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6Q1JDVlNSQzogTUFTVEVSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfQ1JDVlNSQ19NQVNURVJfTXNrICAgICAgICAgICAoMHhmdWwgPDwgU0NVX0NSQ1ZTUkNfTUFTVEVSX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkNSQ1ZTUkM6IE1BU1RFUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfQ1JDVkFfVklPQUREUl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkNSQ1ZBOiBWSU9BRERSIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX0NSQ1ZBX1ZJT0FERFJfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTQ1VfQ1JDVkFfVklPQUREUl9Qb3MpICAgICAgICAgICAvKiE8IFNDVV9UOjpDUkNWQTogVklPQUREUiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NEMFZTUkNfTUFTVEVSX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTRDBWU1JDOiBNQVNURVIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9TRDBWU1JDX01BU1RFUl9Nc2sgICAgICAgICAgICgweGZ1bCA8PCBTQ1VfU0QwVlNSQ19NQVNURVJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U0QwVlNSQzogTUFTVEVSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TRDBWQV9WSU9BRERSX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U0QwVkE6IFZJT0FERFIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfU0QwVkFfVklPQUREUl9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNDVV9TRDBWQV9WSU9BRERSX1BvcykgICAgICAgICAgIC8qITwgU0NVX1Q6OlNEMFZBOiBWSU9BRERSIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUERNQTBWU1JDX01BU1RFUl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBETUEwVlNSQzogTUFTVEVSIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0NVX1BETUEwVlNSQ19NQVNURVJfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNDVV9QRE1BMFZTUkNfTUFTVEVSX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQRE1BMFZTUkM6IE1BU1RFUiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BETUEwVkFfVklPQUREUl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQRE1BMFZBOiBWSU9BRERSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9QRE1BMFZBX1ZJT0FERFJfTXNrICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0NVX1BETUEwVkFfVklPQUREUl9Qb3MpICAgICAgICAgLyohPCBTQ1VfVDo6UERNQTBWQTogVklPQUREUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QRE1BMVZTUkNfTUFTVEVSX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UERNQTFWU1JDOiBNQVNURVIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTQ1VfUERNQTFWU1JDX01BU1RFUl9Nc2sgICAgICAgICAoMHhmdWwgPDwgU0NVX1BETUExVlNSQ19NQVNURVJfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBETUExVlNSQzogTUFTVEVSIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUERNQTFWQV9WSU9BRERSX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBETUExVkE6IFZJT0FERFIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX1BETUExVkFfVklPQUREUl9Nc2sgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTQ1VfUERNQTFWQV9WSU9BRERSX1BvcykgICAgICAgICAvKiE8IFNDVV9UOjpQRE1BMVZBOiBWSU9BRERSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NSQU0wVlNSQ19NQVNURVJfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTUkFNMFZTUkM6IE1BU1RFUiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNDVV9TUkFNMFZTUkNfTUFTVEVSX01zayAgICAgICAgICgweGZ1bCA8PCBTQ1VfU1JBTTBWU1JDX01BU1RFUl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1JBTTBWU1JDOiBNQVNURVIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TUkFNMFZBX1ZJT0FERFJfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1JBTTBWQTogVklPQUREUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfU1JBTTBWQV9WSU9BRERSX01zayAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNDVV9TUkFNMFZBX1ZJT0FERFJfUG9zKSAgICAgICAgIC8qITwgU0NVX1Q6OlNSQU0wVkE6IFZJT0FERFIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1JBTTFWU1JDX01BU1RFUl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNSQU0xVlNSQzogTUFTVEVSIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0NVX1NSQU0xVlNSQ19NQVNURVJfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNDVV9TUkFNMVZTUkNfTUFTVEVSX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTUkFNMVZTUkM6IE1BU1RFUiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NSQU0xVkFfVklPQUREUl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTUkFNMVZBOiBWSU9BRERSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9TUkFNMVZBX1ZJT0FERFJfTXNrICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0NVX1NSQU0xVkFfVklPQUREUl9Qb3MpICAgICAgICAgLyohPCBTQ1VfVDo6U1JBTTFWQTogVklPQUREUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9GTUNWU1JDX01BU1RFUl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6Rk1DVlNSQzogTUFTVEVSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfRk1DVlNSQ19NQVNURVJfTXNrICAgICAgICAgICAoMHhmdWwgPDwgU0NVX0ZNQ1ZTUkNfTUFTVEVSX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkZNQ1ZTUkM6IE1BU1RFUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfRk1DVkFfVklPQUREUl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkZNQ1ZBOiBWSU9BRERSIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX0ZNQ1ZBX1ZJT0FERFJfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTQ1VfRk1DVkFfVklPQUREUl9Qb3MpICAgICAgICAgICAvKiE8IFNDVV9UOjpGTUNWQTogVklPQUREUiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0ZMQVNIVlNSQ19NQVNURVJfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpGTEFTSFZTUkM6IE1BU1RFUiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNDVV9GTEFTSFZTUkNfTUFTVEVSX01zayAgICAgICAgICgweGZ1bCA8PCBTQ1VfRkxBU0hWU1JDX01BU1RFUl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6RkxBU0hWU1JDOiBNQVNURVIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9GTEFTSFZBX1ZJT0FERFJfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6RkxBU0hWQTogVklPQUREUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfRkxBU0hWQV9WSU9BRERSX01zayAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNDVV9GTEFTSFZBX1ZJT0FERFJfUG9zKSAgICAgICAgIC8qITwgU0NVX1Q6OkZMQVNIVkE6IFZJT0FERFIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU0NVVlNSQ19NQVNURVJfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNDVVZTUkM6IE1BU1RFUiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1NDVVZTUkNfTUFTVEVSX01zayAgICAgICAgICAgKDB4ZnVsIDw8IFNDVV9TQ1VWU1JDX01BU1RFUl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTQ1VWU1JDOiBNQVNURVIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NDVVZBX1ZJT0FERFJfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTQ1VWQTogVklPQUREUiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9TQ1VWQV9WSU9BRERSX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0NVX1NDVVZBX1ZJT0FERFJfUG9zKSAgICAgICAgICAgLyohPCBTQ1VfVDo6U0NVVkE6IFZJT0FERFIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TWVNWU1JDX01BU1RFUl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1lTVlNSQzogTUFTVEVSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfU1lTVlNSQ19NQVNURVJfTXNrICAgICAgICAgICAoMHhmdWwgPDwgU0NVX1NZU1ZTUkNfTUFTVEVSX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNZU1ZTUkM6IE1BU1RFUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1lTVkFfVklPQUREUl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNZU1ZBOiBWSU9BRERSIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1NZU1ZBX1ZJT0FERFJfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTQ1VfU1lTVkFfVklPQUREUl9Qb3MpICAgICAgICAgICAvKiE8IFNDVV9UOjpTWVNWQTogVklPQUREUiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0NSUFRWU1JDX01BU1RFUl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpDUlBUVlNSQzogTUFTVEVSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9DUlBUVlNSQ19NQVNURVJfTXNrICAgICAgICAgICgweGZ1bCA8PCBTQ1VfQ1JQVFZTUkNfTUFTVEVSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6Q1JQVFZTUkM6IE1BU1RFUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9DUlBUVkFfVklPQUREUl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6Q1JQVFZBOiBWSU9BRERSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfQ1JQVFZBX1ZJT0FERFJfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNDVV9DUlBUVkFfVklPQUREUl9Qb3MpICAgICAgICAgIC8qITwgU0NVX1Q6OkNSUFRWQTogVklPQUREUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfTlNNQ1RMX1BSRVNDQUxFX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTUNUTDogUFJFU0NBTEUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX05TTUNUTF9QUkVTQ0FMRV9Nc2sgICAgICAgICAgKDB4ZmZ1bCA8PCBTQ1VfTlNNQ1RMX1BSRVNDQUxFX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01DVEw6IFBSRVNDQUxFIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX05TTUNUTF9OU01JRU5fUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01DVEw6IE5TTUlFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9OU01DVExfTlNNSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfTlNNQ1RMX05TTUlFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNQ1RMOiBOU01JRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9OU01DVExfQVVUT1JMRF9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNQ1RMOiBBVVRPUkxEIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfTlNNQ1RMX0FVVE9STERfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU0NVX05TTUNUTF9BVVRPUkxEX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTUNUTDogQVVUT1JMRCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfTlNNQ1RMX1RNUk1PRF9Qb3MgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTUNUTDogVE1STU9EIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX05TTUNUTF9UTVJNT0RfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9OU01DVExfVE1STU9EX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01DVEw6IFRNUk1PRCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX05TTUNUTF9JRExFT05fUG9zICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01DVEw6IElETEVPTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9OU01DVExfSURMRU9OX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfTlNNQ1RMX0lETEVPTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNQ1RMOiBJRExFT04gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9OU01DVExfREJHT05fUG9zICAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNQ1RMOiBEQkdPTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ1VfTlNNQ1RMX0RCR09OX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX05TTUNUTF9EQkdPTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTUNUTDogREJHT04gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfTlNNTE9BRF9SRUxPQURfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTUxPQUQ6IFJFTE9BRCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX05TTUxPQURfUkVMT0FEX01zayAgICAgICAgICAgKDB4ZmZmZmZmdWwgPDwgU0NVX05TTUxPQURfUkVMT0FEX1BvcykgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01MT0FEOiBSRUxPQUQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX05TTVZBTF9WQUxVRV9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01WQUw6IFZBTFVFIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9OU01WQUxfVkFMVUVfTXNrICAgICAgICAgICAgICgweGZmZmZmZnVsIDw8IFNDVV9OU01WQUxfVkFMVUVfUG9zKSAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNVkFMOiBWQUxVRSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9OU01TVFNfQ1VSUk5TX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNU1RTOiBDVVJSTlMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfTlNNU1RTX0NVUlJOU19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX05TTVNUU19DVVJSTlNfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTVNUUzogQ1VSUk5TIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfTlNNU1RTX05TTUlGX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTVNUUzogTlNNSUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX05TTVNUU19OU01JRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9OU01TVFNfTlNNSUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01TVFM6IE5TTUlGIE1hc2sgICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogU0NVX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBTQ1UgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKworI2VuZGlmIC8qIF9fU0NVX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zZGhfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvc2RoX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOWNjZTMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvc2RoX3JlZy5oCkBAIC0wLDAgKzEsNTI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc2RoX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBTREggcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fU0RIX1JFR19IX18KKyNkZWZpbmUgX19TREhfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTRCBDYXJkIEhvc3QgSW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgU0RIIFNEIENhcmQgSG9zdCBJbnRlcmZhY2UoU0RIKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBTREggQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworICAgIC8qKgorICAgICAqIEB2YXIgU0RIX1Q6OkZCCisgICAgICogT2Zmc2V0OiAweDAwfjB4N0MgIFNoYXJlZCBCdWZmZXIgKEZJRk8pCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8QlVGRkVSICAgIHxTaGFyZWQgQnVmZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnVmZmVyIGZvciBETUEgdHJhbnNmZXIKKyAgICAgKiBAdmFyIFNESF9UOjpETUFDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NDAwICBETUEgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8RE1BRU4gICAgIHxETUEgRW5naW5lIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBjbGVhcmVkLCBETUEgd2lsbCBpZ25vcmUgYWxsIHJlcXVlc3RzIGZyb20gU0QgaG9zdCBhbmQgZm9yY2UgYnVzIG1hc3RlciBpbnRvIElETEUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERNQSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRE1BIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgdGFyZ2V0IGFib3J0IGlzIG9jY3VycmVkLCBETUFFTiB3aWxsIGJlIGNsZWFyZWQuCisgICAgICogfFsxXSAgICAgfERNQVJTVCAgICB8U29mdHdhcmUgRW5naW5lIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgaW50ZXJuYWwgc3RhdGUgbWFjaGluZSBhbmQgcG9pbnRlcnMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY29udGVudHMgb2YgY29udHJvbCByZWdpc3RlciB3aWxsIG5vdCBiZSBjbGVhcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBhdXRvIGJlIGNsZWFyZWQgYWZ0ZXIgZmV3IGNsb2NrIGN5Y2xlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgc29mdHdhcmUgcmVzZXQgRE1BIHJlbGF0ZWQgcmVnaXN0ZXJzLgorICAgICAqIHxbM10gICAgIHxTR0VOICAgICAgfFNjYXR0ZXItZ2F0aGVyIEZ1bmN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2NhdHRlci1nYXRoZXIgZnVuY3Rpb24gRGlzYWJsZWQgKERNQSB3aWxsIHRyZWF0IHRoZSBzdGFydGluZyBhZGRyZXNzIGluIERNQVNBUiBhcyBzdGFydGluZyBwb2ludGVyIG9mIGEgc2luZ2xlIGJsb2NrIG1lbW9yeSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNjYXR0ZXItZ2F0aGVyIGZ1bmN0aW9uIEVuYWJsZWQgKERNQSB3aWxsIHRyZWF0IHRoZSBzdGFydGluZyBhZGRyZXNzIGluIERNQVNBUiBhcyBhIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgUGh5c2ljYWwgQWRkcmVzcyBEZXNjcmlwdG9yIChQQUQpIHRhYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZvcm1hdCBvZiB0aGVzZSBQYWRzJyB3aWxsIGJlIGRlc2NyaWJlZCBsYXRlcikuCisgICAgICogfFs5XSAgICAgfERNQUJVU1kgICB8RE1BIFRyYW5zZmVyIElzIGluIFByb2dyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIGlmIFNEIEhvc3QgaXMgZ3JhbnRlZCBhbmQgZG9pbmcgRE1BIHRyYW5zZmVyIG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRE1BIHRyYW5zZmVyIGlzIG5vdCBpbiBwcm9ncmVzcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRE1BIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzLgorICAgICAqIEB2YXIgU0RIX1Q6OkRNQVNBCisgICAgICogT2Zmc2V0OiAweDQwOCAgRE1BIFRyYW5zZmVyIFN0YXJ0aW5nIEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxPUkRFUiAgICAgfERldGVybWluZWQgdG8gdGhlIFBBRCBUYWJsZSBGZXRjaGluZyBJcyBpbiBPcmRlciBvciBPdXQgb2YgT3JkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEFEIHRhYmxlIGlzIGZldGNoZWQgaW4gb3JkZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBBRCB0YWJsZSBpcyBmZXRjaGVkIG91dCBvZiBvcmRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiB0aGUgYml0MCBpcyB2YWxpZCBpbiBzY2F0dGVyLWdhdGhlciBtb2RlIHdoZW4gU0dFTiA9IDEuCisgICAgICogfFszMToxXSAgfERNQVNBICAgICB8RE1BIFRyYW5zZmVyIFN0YXJ0aW5nIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIHBhZHMgMCBhcyBsZWFzdCBzaWduaWZpY2FudCBiaXQgaW5kaWNhdGVzIGEgMzItYml0IHN0YXJ0aW5nIGFkZHJlc3Mgb2Ygc3lzdGVtIG1lbW9yeSAoU1JBTSkgZm9yIERNQSB0byByZXRyaWV2ZSBvciBmaWxsIGluIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgRE1BIGlzIG5vdCBpbiBub3JtYWwgbW9kZSwgdGhpcyBmaWVsZCB3aWxsIGJlIGludGVycHJldGVkIGFzIGEgc3RhcnRpbmcgYWRkcmVzcyBvZiBQaHlzaWNhbCBBZGRyZXNzIERlc2NyaXB0b3IgKFBBRCkgdGFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogU3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgU1JBTSBtdXN0IGJlIHdvcmQgYWxpZ25lZCwgZm9yIGV4YW1wbGUsIDB4MDAwMF8wMDAwLCAweDAwMDBfMDAwNC4KKyAgICAgKiBAdmFyIFNESF9UOjpETUFCQ05UCisgICAgICogT2Zmc2V0OiAweDQwQyAgRE1BIFRyYW5zZmVyIEJ5dGUgQ291bnQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjU6MF0gIHxCQ05UICAgICAgfERNQSBUcmFuc2ZlciBCeXRlIENvdW50IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIHJlbWFpbmVkIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgaXMgdmFsaWQgb25seSB3aGVuIERNQSBpcyBidXN5OyBvdGhlcndpc2UsIGl0IGlzIDAuCisgICAgICogQHZhciBTREhfVDo6RE1BSU5URU4KKyAgICAgKiBPZmZzZXQ6IDB4NDEwICBETUEgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QUJPUlRJRU4gIHxETUEgUmVhZC9Xcml0ZSBUYXJnZXQgQWJvcnQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFyZ2V0IGFib3J0IGludGVycnVwdCBnZW5lcmF0aW9uIERpc2FibGVkIGR1cmluZyBETUEgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhcmdldCBhYm9ydCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBFbmFibGVkIGR1cmluZyBETUEgdHJhbnNmZXIuCisgICAgICogfFsxXSAgICAgfFdFT1RJRU4gICB8V3JvbmcgRU9UIEVuY291bnRlcmVkIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBnZW5lcmF0aW9uIERpc2FibGVkIHdoZW4gd3JvbmcgRU9UIGlzIGVuY291bnRlcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBFbmFibGVkIHdoZW4gd3JvbmcgRU9UIGlzIGVuY291bnRlcmVkLgorICAgICAqIEB2YXIgU0RIX1Q6OkRNQUlOVFNUUworICAgICAqIE9mZnNldDogMHg0MTQgIERNQSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QUJPUlRJRiAgIHxETUEgUmVhZC9Xcml0ZSBUYXJnZXQgQWJvcnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gYnVzIEVSUk9SIHJlc3BvbnNlIHJlY2VpdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCdXMgRVJST1IgcmVzcG9uc2UgcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIHJlYWQgb25seSwgYnV0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgJzEnIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBXaGVuIERNQSdzIGJ1cyBtYXN0ZXIgcmVjZWl2ZWQgRVJST1IgcmVzcG9uc2UsIGl0IG1lYW5zIHRoYXQgdGFyZ2V0IGFib3J0IGlzIGhhcHBlbmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RE1BIHdpbGwgc3RvcCB0cmFuc2ZlciBhbmQgcmVzcG9uZCB0aGlzIGV2ZW50IGFuZCB0aGVuIGdvIHRvIElETEUgc3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRhcmdldCBhYm9ydCBvY2N1cnJlZCBvciBXRU9USUYgaXMgc2V0LCBzb2Z0d2FyZSBtdXN0IHJlc2V0IERNQSBhbmQgU0QgaG9zdCwgYW5kIHRoZW4gdHJhbnNmZXIgdGhvc2UgZGF0YSBhZ2Fpbi4KKyAgICAgKiB8WzFdICAgICB8V0VPVElGICAgIHxXcm9uZyBFT1QgRW5jb3VudGVyZWQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIERNQSBTY2F0dGVyLUdhdGhlciBmdW5jdGlvbiBpcyBlbmFibGVkLCBhbmQgRU9UIG9mIHRoZSBkZXNjcmlwdG9yIGlzIGVuY291bnRlcmVkIGJlZm9yZSBETUEgdHJhbnNmZXIgZmluaXNoZWQgKHRoYXQgbWVhbnMgdGhlIHRvdGFsIHNlY3RvciBjb3VudCBvZiBhbGwgUEFEIGlzIGxlc3MgdGhhbiB0aGUgc2VjdG9yIGNvdW50IG9mIFNEIGhvc3QpLCB0aGlzIGJpdCB3aWxsIGJlIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gRU9UIGVuY291bnRlcmVkIGJlZm9yZSBETUEgdHJhbnNmZXIgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVPVCBlbmNvdW50ZXJlZCBiZWZvcmUgRE1BIHRyYW5zZmVyIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSwgYnV0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgJzEnIHRvIGl0LgorICAgICAqIEB2YXIgU0RIX1Q6OkdDVEwKKyAgICAgKiBPZmZzZXQ6IDB4ODAwICBHbG9iYWwgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8R0NUTFJTVCAgIHxTb2Z0d2FyZSBFbmdpbmUgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCBTRCBob3N0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvbnRlbnRzIG9mIGNvbnRyb2wgcmVnaXN0ZXIgd2lsbCBub3QgYmUgY2xlYXJlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYXV0byBjbGVhcmVkIGFmdGVyIHJlc2V0IGNvbXBsZXRlLgorICAgICAqIHxbMV0gICAgIHxTREVOICAgICAgfFNlY3VyZSBEaWdpdGFsIEZ1bmN0aW9uYWxpdHkgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTRCBmdW5jdGlvbmFsaXR5IGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTRCBmdW5jdGlvbmFsaXR5IGVuYWJsZWQuCisgICAgICogQHZhciBTREhfVDo6R0lOVEVOCisgICAgICogT2Zmc2V0OiAweDgwNCAgR2xvYmFsIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8RFRBSUVOICAgIHxETUEgUkVBRC9XUklURSBUYXJnZXQgQWJvcnQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRE1BIFJFQUQvV1JJVEUgdGFyZ2V0IGFib3J0IGludGVycnVwdCBnZW5lcmF0aW9uIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBETUEgUkVBRC9XUklURSB0YXJnZXQgYWJvcnQgaW50ZXJydXB0IGdlbmVyYXRpb24gZW5hYmxlZC4KKyAgICAgKiBAdmFyIFNESF9UOjpHSU5UU1RTCisgICAgICogT2Zmc2V0OiAweDgwOCAgR2xvYmFsIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxEVEFJRiAgICAgfERNQSBSRUFEL1dSSVRFIFRhcmdldCBBYm9ydCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyBETUEgcmVjZWl2ZWQgYW4gRVJST1IgcmVzcG9uc2UgZnJvbSBpbnRlcm5hbCBBSEIgYnVzIGR1cmluZyBETUEgcmVhZC93cml0ZSBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFRhcmdldCBBYm9ydCBpcyBvY2N1cnJlZCwgcGxlYXNlIHJlc2V0IGFsbCBlbmdpbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGJ1cyBFUlJPUiByZXNwb25zZSByZWNlaXZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnVzIEVSUk9SIHJlc3BvbnNlIHJlY2VpdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSwgYnV0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgJzEnIHRvIGl0LgorICAgICAqIEB2YXIgU0RIX1Q6OkNUTAorICAgICAqIE9mZnNldDogMHg4MjAgIFNEIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENPRU4gICAgICB8Q29tbWFuZCBPdXRwdXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuIChQbGVhc2UgdXNlIERNQVJTVCAoU0RIX0NUTCBbMF0pIHRvIGNsZWFyIHRoaXMgYml0LikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlZCwgU0QgaG9zdCB3aWxsIG91dHB1dCBhIGNvbW1hbmQgdG8gU0QgY2FyZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHksIHNvIGRvbid0IHdyaXRlIDAgdG8gdGhpcyBiaXQgKHRoZSBjb250cm9sbGVyIHdpbGwgYmUgYWJub3JtYWwpLgorICAgICAqIHxbMV0gICAgIHxSSUVOICAgICAgfFJlc3BvbnNlIElucHV0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LiAoUGxlYXNlIHVzZSBETUFSU1QgKFNESF9DVEwgWzBdKSB0byBjbGVhciB0aGlzIGJpdC4pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZWQsIFNEIGhvc3Qgd2lsbCB3YWl0IHRvIHJlY2VpdmUgYSByZXNwb25zZSBmcm9tIFNEIGNhcmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBvcGVyYXRpb24gaXMgZmluaXNoZWQsIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5LCBzbyBkb24ndCB3cml0ZSAwIHRvIHRoaXMgYml0ICh0aGUgY29udHJvbGxlciB3aWxsIGJlIGFibm9ybWFsKS4KKyAgICAgKiB8WzJdICAgICB8RElFTiAgICAgIHxEYXRhIElucHV0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LiAoUGxlYXNlIHVzZSBETUFSU1QgKFNESF9DVEwgWzBdKSB0byBjbGVhciB0aGlzIGJpdC4pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZWQsIFNEIGhvc3Qgd2lsbCB3YWl0IHRvIHJlY2VpdmUgYmxvY2sgZGF0YSBhbmQgdGhlIENSQzE2IHZhbHVlIGZyb20gU0QgY2FyZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHksIHNvIGRvbid0IHdyaXRlIDAgdG8gdGhpcyBiaXQgKHRoZSBjb250cm9sbGVyIHdpbGwgYmUgYWJub3JtYWwpLgorICAgICAqIHxbM10gICAgIHxET0VOICAgICAgfERhdGEgT3V0cHV0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LiAoUGxlYXNlIHVzZSBETUFSU1QgKFNESF9DVEwgWzBdKSB0byBjbGVhciB0aGlzIGJpdC4pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZWQsIFNEIGhvc3Qgd2lsbCB0cmFuc2ZlciBibG9jayBkYXRhIGFuZCB0aGUgQ1JDMTYgdmFsdWUgdG8gU0QgY2FyZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHksIHNvIGRvbid0IHdyaXRlIDAgdG8gdGhpcyBiaXQgKHRoZSBjb250cm9sbGVyIHdpbGwgYmUgYWJub3JtYWwpLgorICAgICAqIHxbNF0gICAgIHxSMkVOICAgICAgfFJlc3BvbnNlIFIyIElucHV0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LiAoUGxlYXNlIHVzZSBETUFSU1QgKFNESF9DVEwgWzBdKSB0byBjbGVhciB0aGlzIGJpdC4pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZWQsIFNEIGhvc3Qgd2lsbCB3YWl0IHRvIHJlY2VpdmUgYSByZXNwb25zZSBSMiBmcm9tIFNEIGNhcmQgYW5kIHN0b3JlIHRoZSByZXNwb25zZSBkYXRhIGludG8gRE1DJ3MgZmxhc2ggYnVmZmVyIChleGNsdWRlIENSQzcpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSwgc28gZG9uJ3Qgd3JpdGUgMCB0byB0aGlzIGJpdCAodGhlIGNvbnRyb2xsZXIgd2lsbCBiZSBhYm5vcm1hbCkuCisgICAgICogfFs1XSAgICAgfENMSzc0T0VOICB8SW5pdGlhbCA3NCBDbG9jayBDeWNsZXMgT3V0cHV0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LiAoUGxlYXNlIHVzZSBETUFSU1QgKFNESF9DVEwgWzBdKSB0byBjbGVhciB0aGlzIGJpdC4pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZWQsIFNEIGhvc3Qgd2lsbCBvdXRwdXQgNzQgY2xvY2sgY3ljbGVzIHRvIFNEIGNhcmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBvcGVyYXRpb24gaXMgZmluaXNoZWQsIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5LCBzbyBkb24ndCB3cml0ZSAwIHRvIHRoaXMgYml0ICh0aGUgY29udHJvbGxlciB3aWxsIGJlIGFibm9ybWFsKS4KKyAgICAgKiB8WzZdICAgICB8Q0xLOE9FTiAgIHxHZW5lcmF0aW5nIDggQ2xvY2sgQ3ljbGVzIE91dHB1dCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4gKFBsZWFzZSB1c2UgRE1BUlNUIChTREhfQ1RMIFswXSkgdG8gY2xlYXIgdGhpcyBiaXQuKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFbmFibGVkLCBTRCBob3N0IHdpbGwgb3V0cHV0IDggY2xvY2sgY3ljbGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSwgc28gZG9uJ3Qgd3JpdGUgMCB0byB0aGlzIGJpdCAodGhlIGNvbnRyb2xsZXIgd2lsbCBiZSBhYm5vcm1hbCkuCisgICAgICogfFs3XSAgICAgfENMS0tFRVAwICB8U0QgQ2xvY2sgRW5hYmxlIENvbnRyb2wgZm9yIFBvcnQgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTRCBob3N0IGRlY2lkZWQgd2hlbiB0byBvdXRwdXQgY2xvY2sgYW5kIHdoZW4gdG8gZGlzYWJsZSBjbG9jayBvdXRwdXQgYXV0b21hdGljYWxseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0QgY2xvY2sgYWx3YXlzIGtlZXBzIGZyZWUgcnVubmluZy4KKyAgICAgKiB8WzEzOjhdICB8Q01EQ09ERSAgIHxTRCBDb21tYW5kIENvZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBTRCBjb21tYW5kIGNvZGUgKDB4MDAgfiAweDNGKS4KKyAgICAgKiB8WzE0XSAgICB8Q1RMUlNUICAgIHxTb2Z0d2FyZSBFbmdpbmUgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCB0aGUgaW50ZXJuYWwgc3RhdGUgbWFjaGluZSBhbmQgY291bnRlcnMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY29udGVudHMgb2YgY29udHJvbCByZWdpc3RlciB3aWxsIG5vdCBiZSBjbGVhcmVkIChidXQgUklFTiwgRElFTiwgRE9FTiBhbmQgUjJFTiB3aWxsIGJlIGNsZWFyZWQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBhdXRvIGNsZWFyZWQgYWZ0ZXIgZmV3IGNsb2NrIGN5Y2xlcy4KKyAgICAgKiB8WzE1XSAgICB8REJXICAgICAgIHxTRCBEYXRhIEJ1cyBXaWR0aCAoZm9yIDEtYml0IC8gNC1iaXQgU2VsZWN0aW9uKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIGJ1cyB3aWR0aCBpcyAxLWJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSBidXMgd2lkdGggaXMgNC1iaXQuCisgICAgICogfFsyMzoxNl0gfEJMS0NOVCAgICB8QmxvY2sgQ291bnRzIHRvIEJlIFRyYW5zZmVycmVkIG9yIFJlY2VpdmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjb250YWlucyB0aGUgYmxvY2sgY291bnRzIGZvciBkYXRhLWluIGFuZCBkYXRhLW91dCB0cmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBSRUFEX01VTFRJUExFX0JMT0NLIGFuZCBXUklURV9NVUxUSVBMRV9CTE9DSyBjb21tYW5kLCBzb2Z0d2FyZSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gYWNjZWxlcmF0ZSBkYXRhIHRyYW5zZmVyIGFuZCBpbXByb3ZlIHBlcmZvcm1hbmNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RG9uJ3QgZmlsbCAweDAgdG8gdGhpcyBmaWVsZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBGb3IgUkVBRF9NVUxUSVBMRV9CTE9DSyBhbmQgV1JJVEVfTVVMVElQTEVfQkxPQ0sgY29tbWFuZCwgdGhlIGFjdHVhbCB0b3RhbCBsZW5ndGggaXMgQkxLQ05UICogKEJMS0xFTiArMSkuCisgICAgICogfFsyNzoyNF0gfFNETldSICAgICB8TldSIFBhcmFtZXRlciBmb3IgQmxvY2sgV3JpdGUgT3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyB2YWx1ZSBpbmRpY2F0ZXMgdGhlIE5XUiBwYXJhbWV0ZXIgZm9yIGRhdGEgYmxvY2sgd3JpdGUgb3BlcmF0aW9uIGluIFNEIGNsb2NrIGNvdW50cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBhY3R1YWwgY2xvY2sgY3ljbGUgd2lsbCBiZSBTRE5XUisxLgorICAgICAqIEB2YXIgU0RIX1Q6OkNNREFSRworICAgICAqIE9mZnNldDogMHg4MjQgIFNEIENvbW1hbmQgQXJndW1lbnQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxBUkdVTUVOVCAgfFNEIENvbW1hbmQgQXJndW1lbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIGEgMzItYml0IHZhbHVlIHNwZWNpZmllcyB0aGUgYXJndW1lbnQgb2YgU0QgY29tbWFuZCBmcm9tIGhvc3QgY29udHJvbGxlciB0byBTRCBjYXJkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmVmb3JlIHRyaWdnZXIgQ09FTiAoU0RIX0NUTCBbMF0pLCBzb2Z0d2FyZSBzaG91bGQgZmlsbCBhcmd1bWVudCBpbiB0aGlzIGZpZWxkLgorICAgICAqIEB2YXIgU0RIX1Q6OklOVEVOCisgICAgICogT2Zmc2V0OiAweDgyOCAgU0QgSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCTEtESUVOICAgfEJsb2NrIFRyYW5zZmVyIERvbmUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0QgaG9zdCB3aWxsIG5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHQgd2hlbiBkYXRhLWluIChvdXQpIHRyYW5zZmVyIGRvbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNEIGhvc3Qgd2lsbCBnZW5lcmF0ZSBpbnRlcnJ1cHQgd2hlbiBkYXRhLWluIChvdXQpIHRyYW5zZmVyIGRvbmUuCisgICAgICogfFsxXSAgICAgfENSQ0lFTiAgICB8Q1JDNywgQ1JDMTYgYW5kIENSQyBTdGF0dXMgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0QgaG9zdCB3aWxsIG5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHQgd2hlbiBDUkM3LCBDUkMxNiBhbmQgQ1JDIHN0YXR1cyBpcyBlcnJvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0QgaG9zdCB3aWxsIGdlbmVyYXRlIGludGVycnVwdCB3aGVuIENSQzcsIENSQzE2IGFuZCBDUkMgc3RhdHVzIGlzIGVycm9yLgorICAgICAqIHxbOF0gICAgIHxDRElFTjAgICAgfFNEMCBDYXJkIERldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVuYWJsZS9EaXNhYmxlIGludGVycnVwdHMgZ2VuZXJhdGlvbiBvZiBTRCBjb250cm9sbGVyIHdoZW4gY2FyZCAwIGlzIGluc2VydGVkIG9yIHJlbW92ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNEIGNhcmQgZGV0ZWN0aW9uIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0QgY2FyZCBkZXRlY3Rpb24gaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxMl0gICAgfFJUT0lFTiAgICB8UmVzcG9uc2UgVGltZS1vdXQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFbmFibGUvRGlzYWJsZSBpbnRlcnJ1cHRzIGdlbmVyYXRpb24gb2YgU0QgY29udHJvbGxlciB3aGVuIHJlY2VpdmluZyByZXNwb25zZSBvciBSMiB0aW1lLW91dAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRpbWUtb3V0IHZhbHVlIGlzIHNwZWNpZmllZCBhdCBUT1VUIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZXNwb25zZSB0aW1lLW91dCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc3BvbnNlIHRpbWUtb3V0IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTNdICAgIHxESVRPSUVOICAgfERhdGEgSW5wdXQgVGltZS1vdXQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFbmFibGUvRGlzYWJsZSBpbnRlcnJ1cHRzIGdlbmVyYXRpb24gb2YgU0QgY29udHJvbGxlciB3aGVuIGRhdGEgaW5wdXQgdGltZS1vdXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaW1lLW91dCB2YWx1ZSBpcyBzcGVjaWZpZWQgYXQgVE9VVCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGF0YSBpbnB1dCB0aW1lLW91dCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERhdGEgaW5wdXQgdGltZS1vdXQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxNF0gICAgfFdLSUVOICAgICB8V2FrZS11cCBTaWduYWwgR2VuZXJhdGluZyBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RW5hYmxlL0Rpc2FibGUgd2FrZS11cCBzaWduYWwgZ2VuZXJhdGluZyBvZiBTRCBob3N0IHdoZW4gY3VycmVudCB1c2luZyBTRCBjYXJkIGlzc3VlcyBhbiBpbnRlcnJ1cHQgKHdha2UtdXApIHZpYSBEQVQgWzFdIHRvIGhvc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdha2UtdXAgc2lnbmFsIGdlbmVyYXRpbmcgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdha2UtdXAgc2lnbmFsIGdlbmVyYXRpbmcgRW5hYmxlZC4KKyAgICAgKiB8WzMwXSAgICB8Q0RTUkMwICAgIHxTRDAgQ2FyZCBEZXRlY3QgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGcm9tIFNEMCBjYXJkJ3MgREFUMyBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SG9zdCBuZWVkIGNsb2NrIHRvIGdvdCBkYXRhIG9uIHBpbiBEQVQzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UGxlYXNlIG1ha2Ugc3VyZSBDTEtLRUVQMCAoU0RIX0NUTFs3XSkgaXMgMSBpbiBvcmRlciB0byBnZW5lcmF0ZSBmcmVlIHJ1bm5pbmcgY2xvY2sgZm9yIERBVDMgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGcm9tIEdQSU8gcGluLgorICAgICAqIEB2YXIgU0RIX1Q6OklOVFNUUworICAgICAqIE9mZnNldDogMHg4MkMgIFNEIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCTEtESUYgICAgfEJsb2NrIFRyYW5zZmVyIERvbmUgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBTRCBob3N0IGhhcyBmaW5pc2hlZCBhbGwgZGF0YS1pbiBvciBkYXRhLW91dCBibG9jayB0cmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZXJlIGlzIGEgQ1JDMTYgZXJyb3Igb3IgaW5jb3JyZWN0IENSQyBzdGF0dXMgZHVyaW5nIG11bHRpcGxlIGJsb2NrIGRhdGEgdHJhbnNmZXIsIHRoZSB0cmFuc2ZlciB3aWxsIGJlIGJyb2tlbiBhbmQgdGhpcyBiaXQgd2lsbCBhbHNvIGJlIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm90IGZpbmlzaGVkIHlldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHksIGJ1dCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nICcxJyB0byBpdC4KKyAgICAgKiB8WzFdICAgICB8Q1JDSUYgICAgIHxDUkM3LCBDUkMxNiBhbmQgQ1JDIFN0YXR1cyBFcnJvciBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IFNEIGhvc3QgaGFzIG9jY3VycmVkIENSQyBlcnJvciBkdXJpbmcgcmVzcG9uc2UgaW4sIGRhdGEtaW4gb3IgZGF0YS1vdXQgKENSQyBzdGF0dXMgZXJyb3IpIHRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBDUkMgZXJyb3IgaXMgb2NjdXJyZWQsIHNvZnR3YXJlIHNob3VsZCByZXNldCBTRCBlbmdpbmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb21lIHJlc3BvbnNlIChleAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFIzKSBkb2Vzbid0IGhhdmUgQ1JDNyBpbmZvcm1hdGlvbiB3aXRoIGl0OyBTRCBob3N0IHdpbGwgc3RpbGwgY2FsY3VsYXRlIENSQzcsIGdldCBDUkMgZXJyb3IgYW5kIHNldCB0aGlzIGZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB0aGlzIGNvbmRpdGlvbiwgc29mdHdhcmUgc2hvdWxkIGlnbm9yZSBDUkMgZXJyb3IgYW5kIGNsZWFycyB0aGlzIGJpdCBtYW51YWxseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQ1JDIGVycm9yIGlzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDUkMgZXJyb3IgaXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LCBidXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAnMScgdG8gaXQuCisgICAgICogfFsyXSAgICAgfENSQzcgICAgICB8Q1JDNyBDaGVjayBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTRCBob3N0IHdpbGwgY2hlY2sgQ1JDNyBjb3JyZWN0bmVzcyBkdXJpbmcgZWFjaCByZXNwb25zZSBpbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoYXQgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBDUkM3IGluZm9ybWF0aW9uIChleAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFIzKSwgdGhlbiBzb2Z0d2FyZSBzaG91bGQgdHVybiBvZmYgQ1JDSUVOIChTREhfSU5URU5bMV0pIGFuZCBpZ25vcmUgdGhpcyBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhdWx0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPSy4KKyAgICAgKiB8WzNdICAgICB8Q1JDMTYgICAgIHxDUkMxNiBDaGVjayBTdGF0dXMgb2YgRGF0YS1pbiBUcmFuc2ZlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNEIGhvc3Qgd2lsbCBjaGVjayBDUkMxNiBjb3JyZWN0bmVzcyBhZnRlciBkYXRhLWluIHRyYW5zZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGYXVsdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT0suCisgICAgICogfFs2OjRdICAgfENSQ1NUUyAgICB8Q1JDIFN0YXR1cyBWYWx1ZSBvZiBEYXRhLW91dCBUcmFuc2ZlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNEIGhvc3Qgd2lsbCByZWNvcmQgQ1JDIHN0YXR1cyBvZiBkYXRhLW91dCB0cmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNvdWxkIHVzZSB0aGlzIHZhbHVlIHRvIGlkZW50aWZ5IHdoYXQgdHlwZSBvZiBlcnJvciBpcyBkdXJpbmcgZGF0YS1vdXQgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gUG9zaXRpdmUgQ1JDIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBOZWdhdGl2ZSBDUkMgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IFNEIGNhcmQgcHJvZ3JhbW1pbmcgZXJyb3Igb2NjdXJzLgorICAgICAqIHxbN10gICAgIHxEQVQwU1RTICAgfERBVDAgUGluIFN0YXR1cyBvZiBDdXJyZW50IFNlbGVjdGVkIFNEIFBvcnQgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB0aGUgREFUMCBwaW4gc3RhdHVzIG9mIGN1cnJlbnQgc2VsZWN0ZWQgU0QgcG9ydC4KKyAgICAgKiB8WzhdICAgICB8Q0RJRjAgICAgIHxTRDAgQ2FyZCBEZXRlY3Rpb24gSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBTRCBjYXJkIDAgaXMgaW5zZXJ0ZWQgb3IgcmVtb3ZlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9ubHkgd2hlbiBDRElFTjAgKFNESF9JTlRFTls4XSkgaXMgc2V0IHRvIDEsIHRoaXMgYml0IGlzIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FyZCBpcyBpbnNlcnRlZCBvciByZW1vdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBhIGNhcmQgaW5zZXJ0ZWQgaW4gb3IgcmVtb3ZlZCBmcm9tIFNEMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHksIGJ1dCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nICcxJyB0byBpdC4KKyAgICAgKiB8WzEyXSAgICB8UlRPSUYgICAgIHxSZXNwb25zZSBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IFNEIGhvc3QgY291bnRzIHRvIHRpbWUtb3V0IHZhbHVlIHdoZW4gcmVjZWl2aW5nIHJlc3BvbnNlIG9yIFIyICh3YWl0aW5nIHN0YXJ0IGJpdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vdCB0aW1lLW91dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzcG9uc2UgdGltZS1vdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LCBidXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAnMScgdG8gaXQuCisgICAgICogfFsxM10gICAgfERJVE9JRiAgICB8RGF0YSBJbnB1dCBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IFNEIGhvc3QgY291bnRzIHRvIHRpbWUtb3V0IHZhbHVlIHdoZW4gcmVjZWl2aW5nIGRhdGEgKHdhaXRpbmcgc3RhcnQgYml0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm90IHRpbWUtb3V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEYXRhIGlucHV0IHRpbWUtb3V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSwgYnV0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgJzEnIHRvIGl0LgorICAgICAqIHxbMTZdICAgIHxDRFNUUzAgICAgfENhcmQgRGV0ZWN0IFN0YXR1cyBvZiBTRDAgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIGNhcmQgZGV0ZWN0IHBpbiBzdGF0dXMgb2YgU0QwLCBhbmQgaXMgdXNlZCBmb3IgY2FyZCBkZXRlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZXJlIGlzIGEgY2FyZCBpbnNlcnRlZCBpbiBvciByZW1vdmVkIGZyb20gU0QwLCBzb2Z0d2FyZSBzaG91bGQgY2hlY2sgdGhpcyBiaXQgdG8gY29uZmlybSBpZiB0aGVyZSBpcyByZWFsbHkgYSBjYXJkIGluc2VydGlvbiBvciByZW1vdmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIENEU1JDMCAoU0RIX0lOVEVOWzMwXSkgPSAwLCB0byBzZWxlY3QgREFUMyBmb3IgY2FyZCBkZXRlY3Rpb246LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXJkIHJlbW92ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcmQgaW5zZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQ0RTUkMwIChTREhfSU5URU5bMzBdKSA9IDEsIHRvIHNlbGVjdCBHUElPIGZvciBjYXJkIGRldGVjdGlvbjouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcmQgaW5zZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcmQgcmVtb3ZlZC4KKyAgICAgKiB8WzE4XSAgICB8REFUMVNUUyAgIHxEQVQxIFBpbiBTdGF0dXMgb2YgU0QgUG9ydCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgREFUMSBwaW4gc3RhdHVzIG9mIFNEIHBvcnQuCisgICAgICogQHZhciBTREhfVDo6UkVTUDAKKyAgICAgKiBPZmZzZXQ6IDB4ODMwICBTRCBSZWNlaXZpbmcgUmVzcG9uc2UgVG9rZW4gUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFJFU1BUSzAgICB8U0QgUmVjZWl2aW5nIFJlc3BvbnNlIFRva2VuIDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTRCBob3N0IGNvbnRyb2xsZXIgd2lsbCByZWNlaXZlIGEgcmVzcG9uc2UgdG9rZW4gZm9yIGdldHRpbmcgYSByZXBseSBmcm9tIFNEIGNhcmQgd2hlbiBSSUVOIChTREhfQ1RMWzFdKSBpcyBzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNvbnRhaW5zIHJlc3BvbnNlIGJpdCA0Ny0xNiBvZiB0aGUgcmVzcG9uc2UgdG9rZW4uCisgICAgICogQHZhciBTREhfVDo6UkVTUDEKKyAgICAgKiBPZmZzZXQ6IDB4ODM0ICBTRCBSZWNlaXZpbmcgUmVzcG9uc2UgVG9rZW4gUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfFJFU1BUSzEgICB8U0QgUmVjZWl2aW5nIFJlc3BvbnNlIFRva2VuIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTRCBob3N0IGNvbnRyb2xsZXIgd2lsbCByZWNlaXZlIGEgcmVzcG9uc2UgdG9rZW4gZm9yIGdldHRpbmcgYSByZXBseSBmcm9tIFNEIGNhcmQgd2hlbiBSSUVOIChTREhfQ1RMWzFdKSBpcyBzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBiaXQgMTUtOCBvZiB0aGUgcmVzcG9uc2UgdG9rZW4uCisgICAgICogQHZhciBTREhfVDo6QkxFTgorICAgICAqIE9mZnNldDogMHg4MzggIFNEIEJsb2NrIExlbmd0aCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMDowXSAgfEJMS0xFTiAgICB8U0QgQkxPQ0sgTEVOR1RIIGluIEJ5dGUgVW5pdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFuIDExLWJpdCB2YWx1ZSBzcGVjaWZpZXMgdGhlIFNEIHRyYW5zZmVyIGJ5dGUgY291bnQgb2YgYSBibG9jaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBhY3R1YWwgYnl0ZSBjb3VudCBpcyBlcXVhbCB0byBCTEtMRU4rMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgZGVmYXVsdCBTRCBibG9jayBsZW5ndGggaXMgNTEyIGJ5dGVzCisgICAgICogQHZhciBTREhfVDo6VE9VVAorICAgICAqIE9mZnNldDogMHg4M0MgIFNEIFJlc3BvbnNlL0RhdGEtaW4gVGltZS1vdXQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjM6MF0gIHxUT1VUICAgICAgfFNEIFJlc3BvbnNlL0RhdGEtaW4gVGltZS1vdXQgVmFsdWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBIDI0LWJpdCB2YWx1ZSBzcGVjaWZpZXMgdGhlIHRpbWUtb3V0IGNvdW50cyBvZiByZXNwb25zZSBhbmQgZGF0YSBpbnB1dAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNEIGhvc3QgY29udHJvbGxlciB3aWxsIHdhaXQgc3RhcnQgYml0IG9mIHJlc3BvbnNlIG9yIGRhdGEtaW4gdW50aWwgdGhpcyB2YWx1ZSByZWFjaGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHRpbWUgcGVyaW9kIGRlcGVuZHMgb24gU0QgZW5naW5lIGNsb2NrIGZyZXF1ZW5jeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERvIG5vdCB3cml0ZSBhIHNtYWxsIG51bWJlciBpbnRvIHRoaXMgZmllbGQsIG9yIHlvdSBtYXkgbmV2ZXIgZ2V0IHJlc3BvbnNlIG9yIGRhdGEgZHVlIHRvIHRpbWUtb3V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEZpbGxpbmcgMHgwIGludG8gdGhpcyBmaWVsZCB3aWxsIGRpc2FibGUgaGFyZHdhcmUgdGltZS1vdXQgZnVuY3Rpb24uCisgICAgICovCisKKyAgICBfX0lPIHVpbnQzMl90IEZCWzMyXTsgICAgICAgICAgICAgICAgLyohPCBTaGFyZWQgQnVmZmVyIChGSUZPKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsyMjRdOworICAgIF9fSU8gdWludDMyX3QgRE1BQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDA0MDBdIERNQSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxWzFdOworICAgIF9fSU8gdWludDMyX3QgRE1BU0E7ICAgICAgICAgICAgICAgICAvKiE8IFsweDA0MDhdIERNQSBUcmFuc2ZlciBTdGFydGluZyBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IERNQUJDTlQ7ICAgICAgICAgICAgICAgLyohPCBbMHgwNDBjXSBETUEgVHJhbnNmZXIgQnl0ZSBDb3VudCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBETUFJTlRFTjsgICAgICAgICAgICAgIC8qITwgWzB4MDQxMF0gRE1BIEludGVycnVwdCBFbmFibGUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRE1BSU5UU1RTOyAgICAgICAgICAgICAvKiE8IFsweDA0MTRdIERNQSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUyWzI1MF07CisgICAgX19JTyB1aW50MzJfdCBHQ1RMOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDgwMF0gR2xvYmFsIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR0lOVEVOOyAgICAgICAgICAgICAgICAvKiE8IFsweDA4MDRdIEdsb2JhbCBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdJTlRTVFM7ICAgICAgICAgICAgICAgLyohPCBbMHgwODA4XSBHbG9iYWwgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFM1s1XTsKKyAgICBfX0lPIHVpbnQzMl90IENUTDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwODIwXSBTRCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTURBUkc7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDgyNF0gU0QgQ29tbWFuZCBBcmd1bWVudCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5URU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDA4MjhdIFNEIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVFNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwODJjXSBTRCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNQMDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDgzMF0gU0QgUmVjZWl2aW5nIFJlc3BvbnNlIFRva2VuIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTUDE7ICAgICAgICAgICAgICAgICAvKiE8IFsweDA4MzRdIFNEIFJlY2VpdmluZyBSZXNwb25zZSBUb2tlbiBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEJMRU47ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwODM4XSBTRCBCbG9jayBMZW5ndGggUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUT1VUOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDgzY10gU0QgUmVzcG9uc2UvRGF0YS1pbiBUaW1lLW91dCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFNESF9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBTREhfQ09OU1QgU0RIIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFNESCBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFNESF9ETUFDVExfRE1BRU5fUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BQ1RMOiBETUFFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTREhfRE1BQ1RMX0RNQUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0RNQUNUTF9ETUFFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQUNUTDogRE1BRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfRE1BQ1RMX0RNQVJTVF9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQUNUTDogRE1BUlNUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0RNQUNUTF9ETUFSU1RfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9ETUFDVExfRE1BUlNUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFDVEw6IERNQVJTVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0RNQUNUTF9TR0VOX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFDVEw6IFNHRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNESF9ETUFDVExfU0dFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTREhfRE1BQ1RMX1NHRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BQ1RMOiBTR0VOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9ETUFDVExfRE1BQlVTWV9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BQ1RMOiBETUFCVVNZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTREhfRE1BQ1RMX0RNQUJVU1lfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0RNQUNUTF9ETUFCVVNZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQUNUTDogRE1BQlVTWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfRE1BU0FfT1JERVJfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQVNBOiBPUkRFUiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0RNQVNBX09SREVSX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9ETUFTQV9PUkRFUl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFTQTogT1JERVIgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0RNQVNBX0RNQVNBX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFTQTogRE1BU0EgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNESF9ETUFTQV9ETUFTQV9Nc2sgICAgICAgICAgICAgICgweDdmZmZmZmZmdWwgPDwgU0RIX0RNQVNBX0RNQVNBX1BvcykgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BU0E6IERNQVNBIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9ETUFCQ05UX0JDTlRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BQkNOVDogQkNOVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTREhfRE1BQkNOVF9CQ05UX01zayAgICAgICAgICAgICAoMHgzZmZmZmZmdWwgPDwgU0RIX0RNQUJDTlRfQkNOVF9Qb3MpICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQUJDTlQ6IEJDTlQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfRE1BSU5URU5fQUJPUlRJRU5fUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQUlOVEVOOiBBQk9SVElFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgU0RIX0RNQUlOVEVOX0FCT1JUSUVOX01zayAgICAgICAgKDB4MXVsIDw8IFNESF9ETUFJTlRFTl9BQk9SVElFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFJTlRFTjogQUJPUlRJRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0RNQUlOVEVOX1dFT1RJRU5fUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFJTlRFTjogV0VPVElFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNESF9ETUFJTlRFTl9XRU9USUVOX01zayAgICAgICAgICgweDF1bCA8PCBTREhfRE1BSU5URU5fV0VPVElFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BSU5URU46IFdFT1RJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9ETUFJTlRTVFNfQUJPUlRJRl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BSU5UU1RTOiBBQk9SVElGIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBTREhfRE1BSU5UU1RTX0FCT1JUSUZfTXNrICAgICAgICAoMHgxdWwgPDwgU0RIX0RNQUlOVFNUU19BQk9SVElGX1BvcykgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQUlOVFNUUzogQUJPUlRJRiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBTREhfRE1BSU5UU1RTX1dFT1RJRl9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQUlOVFNUUzogV0VPVElGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0RIX0RNQUlOVFNUU19XRU9USUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFNESF9ETUFJTlRTVFNfV0VPVElGX1BvcykgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFJTlRTVFM6IFdFT1RJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0dDVExfR0NUTFJTVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpHQ1RMOiBHQ1RMUlNUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNESF9HQ1RMX0dDVExSU1RfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTREhfR0NUTF9HQ1RMUlNUX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6R0NUTDogR0NUTFJTVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9HQ1RMX1NERU5fUG9zICAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6R0NUTDogU0RFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBTREhfR0NUTF9TREVOX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0dDVExfU0RFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkdDVEw6IFNERU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfR0lOVEVOX0RUQUlFTl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkdJTlRFTjogRFRBSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0dJTlRFTl9EVEFJRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9HSU5URU5fRFRBSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpHSU5URU46IERUQUlFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0dJTlRTVFNfRFRBSUZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpHSU5UU1RTOiBEVEFJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNESF9HSU5UU1RTX0RUQUlGX01zayAgICAgICAgICAgICgweDF1bCA8PCBTREhfR0lOVFNUU19EVEFJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6R0lOVFNUUzogRFRBSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9DVExfQ09FTl9Qb3MgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBDT0VOIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBTREhfQ1RMX0NPRU5fTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0NUTF9DT0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogQ09FTiBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfQ1RMX1JJRU5fUG9zICAgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogUklFTiBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0NUTF9SSUVOX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9DVExfUklFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IFJJRU4gTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0NUTF9ESUVOX1BvcyAgICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IERJRU4gUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFNESF9DVExfRElFTl9Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBTREhfQ1RMX0RJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBESUVOIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9DVExfRE9FTl9Qb3MgICAgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBET0VOIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBTREhfQ1RMX0RPRU5fTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0NUTF9ET0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogRE9FTiBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfQ1RMX1IyRU5fUG9zICAgICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogUjJFTiBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0NUTF9SMkVOX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9DVExfUjJFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IFIyRU4gTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0NUTF9DTEs3NE9FTl9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IENMSzc0T0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNESF9DVExfQ0xLNzRPRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTREhfQ1RMX0NMSzc0T0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBDTEs3NE9FTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9DVExfQ0xLOE9FTl9Qb3MgICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBDTEs4T0VOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTREhfQ1RMX0NMSzhPRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0NUTF9DTEs4T0VOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogQ0xLOE9FTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfQ1RMX0NMS0tFRVBfUG9zICAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogQ0xLS0VFUCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTREhfQ1RMX0NMS0tFRVBfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0NUTF9DTEtLRUVQX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogQ0xLS0VFUCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9DVExfQ01EQ09ERV9Qb3MgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBDTURDT0RFIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTREhfQ1RMX0NNRENPREVfTXNrICAgICAgICAgICAgICAoMHgzZnVsIDw8IFNESF9DVExfQ01EQ09ERV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogQ01EQ09ERSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfQ1RMX0NUTFJTVF9Qb3MgICAgICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogQ1RMUlNUIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0NUTF9DVExSU1RfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9DVExfQ1RMUlNUX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IENUTFJTVCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0NUTF9EQldfUG9zICAgICAgICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IERCVyBQb3NpdGlvbiAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNESF9DVExfREJXX01zayAgICAgICAgICAgICAgICAgICgweDF1bCA8PCBTREhfQ1RMX0RCV19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBEQlcgTWFzayAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9DVExfQkxLQ05UX1BvcyAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBCTEtDTlQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTREhfQ1RMX0JMS0NOVF9Nc2sgICAgICAgICAgICAgICAoMHhmZnVsIDw8IFNESF9DVExfQkxLQ05UX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogQkxLQ05UIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfQ1RMX1NETldSX1BvcyAgICAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogU0ROV1IgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0NUTF9TRE5XUl9Nc2sgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IFNESF9DVExfU0ROV1JfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IFNETldSIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0NNREFSR19BUkdVTUVOVF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDTURBUkc6IEFSR1VNRU5UIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNESF9DTURBUkdfQVJHVU1FTlRfTXNrICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0RIX0NNREFSR19BUkdVTUVOVF9Qb3MpICAgICAgICAgLyohPCBTREhfVDo6Q01EQVJHOiBBUkdVTUVOVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRFTl9CTEtESUVOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5URU46IEJMS0RJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTREhfSU5URU5fQkxLRElFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0lOVEVOX0JMS0RJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVEVOOiBCTEtESUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfSU5URU5fQ1JDSUVOX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVEVOOiBDUkNJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0lOVEVOX0NSQ0lFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9JTlRFTl9DUkNJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRFTjogQ1JDSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0lOVEVOX0NESUVOX1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRFTjogQ0RJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0lOVEVOX0NESUVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9JTlRFTl9DRElFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRFTjogQ0RJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfSU5URU5fUlRPSUVOX1BvcyAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVEVOOiBSVE9JRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0lOVEVOX1JUT0lFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9JTlRFTl9SVE9JRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRFTjogUlRPSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0lOVEVOX0RJVE9JRU5fUG9zICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRFTjogRElUT0lFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNESF9JTlRFTl9ESVRPSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5URU5fRElUT0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5URU46IERJVE9JRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRFTl9XS0lFTl9Qb3MgICAgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5URU46IFdLSUVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTREhfSU5URU5fV0tJRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0lOVEVOX1dLSUVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVEVOOiBXS0lFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfSU5URU5fQ0RTUkNfUG9zICAgICAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVEVOOiBDRFNSQyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTREhfSU5URU5fQ0RTUkNfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0lOVEVOX0NEU1JDX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVEVOOiBDRFNSQyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRTVFNfQkxLRElGX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBCTEtESUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTREhfSU5UU1RTX0JMS0RJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0lOVFNUU19CTEtESUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogQkxLRElGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfSU5UU1RTX0NSQ0lGX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogQ1JDSUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0lOVFNUU19DUkNJRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9JTlRTVFNfQ1JDSUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IENSQ0lGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0lOVFNUU19DUkM3X1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IENSQzcgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNESF9JTlRTVFNfQ1JDN19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5UU1RTX0NSQzdfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBDUkM3IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRTVFNfQ1JDMTZfUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBDUkMxNiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTREhfSU5UU1RTX0NSQzE2X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0lOVFNUU19DUkMxNl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogQ1JDMTYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfSU5UU1RTX0NSQ1NUU19Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogQ1JDU1RTIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0lOVFNUU19DUkNTVFNfTXNrICAgICAgICAgICAgKDB4N3VsIDw8IFNESF9JTlRTVFNfQ1JDU1RTX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IENSQ1NUUyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0lOVFNUU19EQVQwU1RTX1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IERBVDBTVFMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNESF9JTlRTVFNfREFUMFNUU19Nc2sgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5UU1RTX0RBVDBTVFNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBEQVQwU1RTIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRTVFNfQ0RJRl9Qb3MgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBDRElGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNESF9JTlRTVFNfQ0RJRl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5UU1RTX0NESUZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBDRElGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0lOVFNUU19SVE9JRl9Qb3MgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IFJUT0lGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNESF9JTlRTVFNfUlRPSUZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5UU1RTX1JUT0lGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBSVE9JRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRTVFNfRElUT0lGX1BvcyAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBESVRPSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTREhfSU5UU1RTX0RJVE9JRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0lOVFNUU19ESVRPSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogRElUT0lGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfSU5UU1RTX0NEU1RTX1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogQ0RTVFMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTREhfSU5UU1RTX0NEU1RTX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0lOVFNUU19DRFNUU19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogQ0RTVFMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRTVFNfREFUMVNUU19Qb3MgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBEQVQxU1RTIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTREhfSU5UU1RTX0RBVDFTVFNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0lOVFNUU19EQVQxU1RTX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogREFUMVNUUyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfUkVTUDBfUkVTUFRLMF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OlJFU1AwOiBSRVNQVEswIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX1JFU1AwX1JFU1BUSzBfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTREhfUkVTUDBfUkVTUFRLMF9Qb3MpICAgICAgICAgICAvKiE8IFNESF9UOjpSRVNQMDogUkVTUFRLMCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX1JFU1AxX1JFU1BUSzFfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpSRVNQMTogUkVTUFRLMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNESF9SRVNQMV9SRVNQVEsxX01zayAgICAgICAgICAgICgweGZmdWwgPDwgU0RIX1JFU1AxX1JFU1BUSzFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6UkVTUDE6IFJFU1BUSzEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9CTEVOX0JMS0xFTl9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6QkxFTjogQkxLTEVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTREhfQkxFTl9CTEtMRU5fTXNrICAgICAgICAgICAgICAoMHg3ZmZ1bCA8PCBTREhfQkxFTl9CTEtMRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkJMRU46IEJMS0xFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfVE9VVF9UT1VUX1BvcyAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OlRPVVQ6IFRPVVQgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX1RPVVRfVE9VVF9Nc2sgICAgICAgICAgICAgICAgKDB4ZmZmZmZmdWwgPDwgU0RIX1RPVVRfVE9VVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpUT1VUOiBUT1VUIE1hc2sgICAgICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogU0RIX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBTREggcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKworI2VuZGlmIC8qIF9fU0RIX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zcGlfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvc3BpX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YWNmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvc3BpX3JlZy5oCkBAIC0wLDAgKzEsNzg5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc3BpX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBTUEkgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fU1BJX1JFR19IX18KKyNkZWZpbmUgX19TUElfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFNQSSBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgQ29udHJvbGxlcihTUEkpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIFNQSSBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIFNQSV9UOjpDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIFNQSSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1BJRU4gICAgIHxTUEkgVHJhbnNmZXIgQ29udHJvbCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTWFzdGVyIG1vZGUsIHRoZSB0cmFuc2ZlciB3aWxsIHN0YXJ0IHdoZW4gdGhlcmUgaXMgZGF0YSBpbiB0aGUgRklGTyBidWZmZXIgYWZ0ZXIgdGhpcyBiaXQgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBTbGF2ZSBtb2RlLCB0aGlzIGRldmljZSBpcyByZWFkeSB0byByZWNlaXZlIGRhdGEgd2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNmZXIgY29udHJvbCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNmZXIgY29udHJvbCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEJlZm9yZSBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbnMgb2YgU1BJeF9DVEwsIFNQSXhfQ0xLRElWLCBTUEl4X1NTQ1RMIGFuZCBTUEl4X0ZJRk9DVEwgcmVnaXN0ZXJzLCB1c2VyIHNoYWxsIGNsZWFyIHRoZSBTUElFTiAoU1BJeF9DVExbMF0pIGFuZCBjb25maXJtIHRoZSBTUElFTlNUUyAoU1BJeF9TVEFUVVNbMTVdKSBpcyAwLgorICAgICAqIHxbMV0gICAgIHxSWE5FRyAgICAgfFJlY2VpdmUgb24gTmVnYXRpdmUgRWRnZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlZCBkYXRhIGlucHV0IHNpZ25hbCBpcyBsYXRjaGVkIG9uIHRoZSByaXNpbmcgZWRnZSBvZiBTUEkgYnVzIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlZCBkYXRhIGlucHV0IHNpZ25hbCBpcyBsYXRjaGVkIG9uIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgU1BJIGJ1cyBjbG9jay4KKyAgICAgKiB8WzJdICAgICB8VFhORUcgICAgIHxUcmFuc21pdCBvbiBOZWdhdGl2ZSBFZGdlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0dGVkIGRhdGEgb3V0cHV0IHNpZ25hbCBpcyBjaGFuZ2VkIG9uIHRoZSByaXNpbmcgZWRnZSBvZiBTUEkgYnVzIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdHRlZCBkYXRhIG91dHB1dCBzaWduYWwgaXMgY2hhbmdlZCBvbiB0aGUgZmFsbGluZyBlZGdlIG9mIFNQSSBidXMgY2xvY2suCisgICAgICogfFszXSAgICAgfENMS1BPTCAgICB8Q2xvY2sgUG9sYXJpdHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJIGJ1cyBjbG9jayBpcyBpZGxlIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJIGJ1cyBjbG9jayBpcyBpZGxlIGhpZ2guCisgICAgICogfFs3OjRdICAgfFNVU1BJVFYgICB8U3VzcGVuZCBJbnRlcnZhbCAoTWFzdGVyIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZvdXIgYml0cyBwcm92aWRlIGNvbmZpZ3VyYWJsZSBzdXNwZW5kIGludGVydmFsIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUgdHJhbnNtaXQvcmVjZWl2ZSB0cmFuc2FjdGlvbiBpbiBhIHRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlZmluaXRpb24gb2YgdGhlIHN1c3BlbmQgaW50ZXJ2YWwgaXMgdGhlIGludGVydmFsIGJldHdlZW4gdGhlIGxhc3QgY2xvY2sgZWRnZSBvZiB0aGUgcHJlY2VkaW5nIHRyYW5zYWN0aW9uIHdvcmQgYW5kIHRoZSBmaXJzdCBjbG9jayBlZGdlIG9mIHRoZSBmb2xsb3dpbmcgdHJhbnNhY3Rpb24gd29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZWZhdWx0IHZhbHVlIGlzIDB4MworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBwZXJpb2Qgb2YgdGhlIHN1c3BlbmQgaW50ZXJ2YWwgaXMgb2J0YWluZWQgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgZXF1YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KFNVU1BJVFZbMzowXSArIDAuNSkgKiBwZXJpb2Qgb2YgU1BJQ0xLIGNsb2NrIGN5Y2xlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RXhhbXBsZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTVVNQSVRWID0gMHgwIC4uLi4gMC41IFNQSUNMSyBjbG9jayBjeWNsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTVVNQSVRWID0gMHgxIC4uLi4gMS41IFNQSUNMSyBjbG9jayBjeWNsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwuLi4uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNVU1BJVFYgPSAweEUgLi4uLiAxNC41IFNQSUNMSyBjbG9jayBjeWNsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTVVNQSVRWID0gMHhGIC4uLi4gMTUuNSBTUElDTEsgY2xvY2sgY3ljbGUuCisgICAgICogfFsxMjo4XSAgfERXSURUSCAgICB8RGF0YSBXaWR0aAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgc3BlY2lmaWVzIGhvdyBtYW55IGJpdHMgY2FuIGJlIHRyYW5zbWl0dGVkIC8gcmVjZWl2ZWQgaW4gb25lIHRyYW5zYWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIG1pbmltdW0gYml0IGxlbmd0aCBpcyA4IGJpdHMgYW5kIGNhbiB1cCB0byAzMiBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERXSURUSCA9IDB4MDggLi4uLiA4IGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RFdJRFRIID0gMHgwOSAuLi4uIDkgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwuLi4uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERXSURUSCA9IDB4MUYgLi4uLiAzMSBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERXSURUSCA9IDB4MDAgLi4uLiAzMiBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEZvciBTUEkwflNQSTMsIHRoaXMgYml0IGZpZWxkIHdpbGwgZGVjaWRlIHRoZSBkZXB0aCBvZiBUWC9SWCBGSUZPIGNvbmZpZ3VyYXRpb24gaW4gU1BJIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVyZWZvcmUsIGNoYW5naW5nIHRoaXMgYml0IGZpZWxkIHdpbGwgY2xlYXIgVFgvUlggRklGTyBieSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5IGluIFNQSTB+U1BJMy4KKyAgICAgKiB8WzEzXSAgICB8TFNCICAgICAgIHxTZW5kIExTQiBGaXJzdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgTVNCLCB3aGljaCBiaXQgb2YgdHJhbnNtaXQvcmVjZWl2ZSByZWdpc3RlciBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mIERXSURUSCwgaXMgdHJhbnNtaXR0ZWQvcmVjZWl2ZWQgZmlyc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBMU0IsIGJpdCAwIG9mIHRoZSBTUEkgVFggcmVnaXN0ZXIsIGlzIHNlbnQgZmlyc3QgdG8gdGhlIFNQSSBkYXRhIG91dHB1dCBwaW4sIGFuZCB0aGUgZmlyc3QgYml0IHJlY2VpdmVkIGZyb20gdGhlIFNQSSBkYXRhIGlucHV0IHBpbiB3aWxsIGJlIHB1dCBpbiB0aGUgTFNCIHBvc2l0aW9uIG9mIHRoZSBSWCByZWdpc3RlciAoYml0IDAgb2YgU1BJX1JYKS4KKyAgICAgKiB8WzE0XSAgICB8SEFMRkRQWCAgIHxTUEkgSGFsZi1kdXBsZXggVHJhbnNmZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gc2VsZWN0IGZ1bGwtZHVwbGV4IG9yIGhhbGYtZHVwbGV4IGZvciBTUEkgdHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYml0IGZpZWxkIERBVERJUiAoU1BJeF9DVExbMjBdKSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGRhdGEgZGlyZWN0aW9uIGluIGhhbGYtZHVwbGV4IHRyYW5zZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkgb3BlcmF0ZXMgaW4gZnVsbC1kdXBsZXggdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSSBvcGVyYXRlcyBpbiBoYWxmLWR1cGxleCB0cmFuc2Zlci4KKyAgICAgKiB8WzE1XSAgICB8UlhPTkxZICAgIHxSZWNlaXZlLW9ubHkgTW9kZSBFbmFibGUgQml0IChNYXN0ZXIgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBpcyBvbmx5IGF2YWlsYWJsZSBpbiBNYXN0ZXIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHJlY2VpdmUtb25seSBtb2RlLCBTUEkgTWFzdGVyIHdpbGwgZ2VuZXJhdGUgU1BJIGJ1cyBjbG9jayBjb250aW51b3VzbHkgZm9yIHJlY2VpdmluZyBkYXRhIGJpdCBmcm9tIFNQSSBzbGF2ZSBkZXZpY2UgYW5kIGFzc2VydCB0aGUgQlVTWSBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUtb25seSBtb2RlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlLW9ubHkgbW9kZSBFbmFibGVkLgorICAgICAqIHxbMTddICAgIHxVTklUSUVOICAgfFVuaXQgVHJhbnNmZXIgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEkgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE4XSAgICB8U0xBVkUgICAgIHxTbGF2ZSBNb2RlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWFzdGVyIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIG1vZGUuCisgICAgICogfFsxOV0gICAgfFJFT1JERVIgICB8Qnl0ZSBSZW9yZGVyIEZ1bmN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnl0ZSBSZW9yZGVyIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCeXRlIFJlb3JkZXIgZnVuY3Rpb24gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgYnl0ZSBzdXNwZW5kIGludGVydmFsIHdpbGwgYmUgaW5zZXJ0ZWQgYW1vbmcgZWFjaCBieXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHBlcmlvZCBvZiB0aGUgYnl0ZSBzdXNwZW5kIGludGVydmFsIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgU1VTUElUVi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBCeXRlIFJlb3JkZXIgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgaWYgRFdJRFRIIGlzIGRlZmluZWQgYXMgMTYsIDI0LCBhbmQgMzIgYml0cy4KKyAgICAgKiB8WzIwXSAgICB8REFURElSICAgIHxEYXRhIFBvcnQgRGlyZWN0aW9uIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgZGF0YSBpbnB1dC9vdXRwdXQgZGlyZWN0aW9uIGluIGhhbGYtZHVwbGV4IHRyYW5zZmVyIGFuZCBEdWFsL1F1YWQgdHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJIGRhdGEgaXMgaW5wdXQgZGlyZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEkgZGF0YSBpcyBvdXRwdXQgZGlyZWN0aW9uLgorICAgICAqIEB2YXIgU1BJX1Q6OkNMS0RJVgorICAgICAqIE9mZnNldDogMHgwNCAgU1BJIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbODowXSAgIHxESVZJREVSICAgfENsb2NrIERpdmlkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsdWUgaW4gdGhpcyBmaWVsZCBpcyB0aGUgZnJlcXVlbmN5IGRpdmlkZXIgZm9yIGdlbmVyYXRpbmcgdGhlIHBlcmlwaGVyYWwgY2xvY2ssIGZzcGlfZWNsaywgYW5kIHRoZSBTUEkgYnVzIGNsb2NrIG9mIFNQSSBNYXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZnJlcXVlbmN5IGlzIG9idGFpbmVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIGVxdWF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHdoZXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8aXMgdGhlIHBlcmlwaGVyYWwgY2xvY2sgc291cmNlLCB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyLCBDTEtfQ0xLU0VMMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBOb3Qgc3VwcG9ydGVkIGluIEkyUyBtb2RlLgorICAgICAqIEB2YXIgU1BJX1Q6OlNTQ1RMCisgICAgICogT2Zmc2V0OiAweDA4ICBTUEkgU2xhdmUgU2VsZWN0IENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTUyAgICAgICAgfFNsYXZlIFNlbGVjdGlvbiBDb250cm9sIChNYXN0ZXIgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBBVVRPU1MgYml0IGlzIGNsZWFyZWQgdG8gMCwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gc2V0IHRoZSBTUEl4X1NTIGxpbmUgdG8gaW5hY3RpdmUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IHNldCB0aGUgU1BJeF9TUyBsaW5lIHRvIGFjdGl2ZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgQVVUT1NTIGJpdCBpcyBzZXQgdG8gMSwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gS2VlcCB0aGUgU1BJeF9TUyBsaW5lIGF0IGluYWN0aXZlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEl4X1NTIGxpbmUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRyaXZlbiB0byBhY3RpdmUgc3RhdGUgZm9yIHRoZSBkdXJhdGlvbiBvZiBkYXRhIHRyYW5zZmVyLCBhbmQgd2lsbCBiZSBkcml2ZW4gdG8gaW5hY3RpdmUgc3RhdGUgZm9yIHRoZSByZXN0IG9mIHRoZSB0aW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGFjdGl2ZSBzdGF0ZSBvZiBTUEl4X1NTIGlzIHNwZWNpZmllZCBpbiBTU0FDVFBPTCAoU1BJeF9TU0NUTFsyXSkuCisgICAgICogfFsyXSAgICAgfFNTQUNUUE9MICB8U2xhdmUgU2VsZWN0aW9uIEFjdGl2ZSBQb2xhcml0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgdGhlIGFjdGl2ZSBwb2xhcml0eSBvZiBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIChTUEl4X1NTKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgU1BJeF9TUyBpcyBhY3RpdmUgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBTUEl4X1NTIGlzIGFjdGl2ZSBoaWdoLgorICAgICAqIHxbM10gICAgIHxBVVRPU1MgICAgfEF1dG9tYXRpYyBTbGF2ZSBTZWxlY3Rpb24gRnVuY3Rpb24gRW5hYmxlIEJpdCAoTWFzdGVyIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24gRGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIHdpbGwgYmUgYXNzZXJ0ZWQvZGUtYXNzZXJ0ZWQgYWNjb3JkaW5nIHRvIFNTIChTUEl4X1NTQ1RMWzBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxTTFZCRUlFTiAgfFNsYXZlIE1vZGUgQml0IENvdW50IEVycm9yIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIG1vZGUgYml0IGNvdW50IGVycm9yIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgbW9kZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs5XSAgICAgfFNMVlVSSUVOICB8U2xhdmUgTW9kZSBUWCBVbmRlciBSdW4gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgbW9kZSBUWCB1bmRlciBydW4gaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBtb2RlIFRYIHVuZGVyIHJ1biBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzEyXSAgICB8U1NBQ1RJRU4gIHxTbGF2ZSBTZWxlY3QgQWN0aXZlIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIHNlbGVjdCBhY3RpdmUgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBzZWxlY3QgYWN0aXZlIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTNdICAgIHxTU0lOQUlFTiAgfFNsYXZlIFNlbGVjdCBJbmFjdGl2ZSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTbGF2ZSBzZWxlY3QgaW5hY3RpdmUgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBzZWxlY3QgaW5hY3RpdmUgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogQHZhciBTUElfVDo6UERNQUNUTAorICAgICAqIE9mZnNldDogMHgwQyAgU1BJIFBETUEgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFRYUERNQUVOICB8VHJhbnNtaXQgUERNQSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IFBETUEgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBTUEkgTWFzdGVyIG1vZGUgd2l0aCBmdWxsIGR1cGxleCB0cmFuc2ZlciwgaWYgYm90aCBUWCBhbmQgUlggUERNQSBmdW5jdGlvbnMgYXJlIGVuYWJsZWQsIFJYIFBETUEgZnVuY3Rpb24gY2Fubm90IGJlIGVuYWJsZWQgcHJpb3IgdG8gVFggUERNQSBmdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGVuYWJsZSBUWCBQRE1BIGZ1bmN0aW9uIGZpcnN0bHkgb3IgZW5hYmxlIGJvdGggZnVuY3Rpb25zIHNpbXVsdGFuZW91c2x5LgorICAgICAqIHxbMV0gICAgIHxSWFBETUFFTiAgfFJlY2VpdmUgUERNQSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgUERNQSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFBETUFSU1QgICB8UERNQSBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IHRoZSBQRE1BIGNvbnRyb2wgbG9naWMgb2YgdGhlIFNQSSBjb250cm9sbGVyLiBUaGlzIGJpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB0byAwLgorICAgICAqIEB2YXIgU1BJX1Q6OkZJRk9DVEwKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIFNQSSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxSWFJTVCAgICAgfFJlY2VpdmUgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCByZWNlaXZlIEZJRk8gcG9pbnRlciBhbmQgcmVjZWl2ZSBjaXJjdWl0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFJYRlVMTCBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYW5kIHRoZSBSWEVNUFRZIGJpdCB3aWxsIGJlIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYnkgaGFyZHdhcmUgYWJvdXQgMyBzeXN0ZW0gY2xvY2sgY3ljbGVzICsgMiBwZXJpcGhlcmFsIGNsb2NrIGN5Y2xlcyBhZnRlciBpdCBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHJlYWQgVFhSWFJTVCAoU1BJeF9TVEFUVVNbMjNdKSB0byBjaGVjayBpZiByZXNldCBpcyBhY2NvbXBsaXNoZWQgb3Igbm90LgorICAgICAqIHxbMV0gICAgIHxUWFJTVCAgICAgfFRyYW5zbWl0IFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgdHJhbnNtaXQgRklGTyBwb2ludGVyIGFuZCB0cmFuc21pdCBjaXJjdWl0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFRYRlVMTCBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYW5kIHRoZSBUWEVNUFRZIGJpdCB3aWxsIGJlIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYnkgaGFyZHdhcmUgYWJvdXQgMyBzeXN0ZW0gY2xvY2sgY3ljbGVzICsgMiBwZXJpcGhlcmFsIGNsb2NrIGN5Y2xlcyBhZnRlciBpdCBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHJlYWQgVFhSWFJTVCAoU1BJeF9TVEFUVVNbMjNdKSB0byBjaGVjayBpZiByZXNldCBpcyBhY2NvbXBsaXNoZWQgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIFRYIHVuZGVyZmxvdyBldmVudCBvY2N1cnMgaW4gU1BJIFNsYXZlIG1vZGUsIHRoaXMgYml0IGNhbiBiZSB1c2VkIHRvIG1ha2UgU1BJIHJldHVybiB0byBpZGxlIHN0YXRlLgorICAgICAqIHxbMl0gICAgIHxSWFRISUVOICAgfFJlY2VpdmUgRklGTyBUaHJlc2hvbGQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlggRklGTyB0aHJlc2hvbGQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSWCBGSUZPIHRocmVzaG9sZCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8VFhUSElFTiAgIHxUcmFuc21pdCBGSUZPIFRocmVzaG9sZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUWCBGSUZPIHRocmVzaG9sZCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRYIEZJRk8gdGhyZXNob2xkIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxSWFRPSUVOICAgfFNsYXZlIFJlY2VpdmUgVGltZS1vdXQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSB0aW1lLW91dCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgdGltZS1vdXQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfFJYT1ZJRU4gICB8UmVjZWl2ZSBGSUZPIE92ZXJydW4gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBGSUZPIG92ZXJydW4gaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIEZJRk8gb3ZlcnJ1biBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8VFhVRlBPTCAgIHxUWCBVbmRlcmZsb3cgRGF0YSBQb2xhcml0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgU1BJIGRhdGEgb3V0IGlzIGtlZXAgMCBpZiB0aGVyZSBpcyBUWCB1bmRlcmZsb3cgZXZlbnQgaW4gU2xhdmUgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIFNQSSBkYXRhIG91dCBpcyBrZWVwIDEgaWYgdGhlcmUgaXMgVFggdW5kZXJmbG93IGV2ZW50IGluIFNsYXZlIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxLiBUaGUgVFggdW5kZXJmbG93IGV2ZW50IG9jY3VycyBpZiB0aGVyZSBpcyBubyBhbnkgZGF0YSBpbiBUWCBGSUZPIHdoZW4gdGhlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaXMgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDIuIFRoaXMgYml0IHNob3VsZCBiZSBzZXQgYXMgMCBpbiBJMlMgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwzLiBXaGVuIFRYIHVuZGVyZmxvdyBldmVudCBvY2N1cnMsIFNQSXhfTUlTTyBwaW4gc3RhdGUgd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoaXMgc2V0dGluZyBldmVuIHRob3VnaCBUWCBGSUZPIGlzIG5vdCBlbXB0eSBhZnRlcndhcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEYXRhIHN0b3JlZCBpbiBUWCBGSUZPIHdpbGwgYmUgc2VudCB0aHJvdWdoIFNQSXhfTUlTTyBwaW4gaW4gdGhlIG5leHQgdHJhbnNmZXIgZnJhbWUuCisgICAgICogfFs3XSAgICAgfFRYVUZJRU4gICB8VFggVW5kZXJmbG93IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBUWCB1bmRlcmZsb3cgZXZlbnQgb2NjdXJzIGluIFNsYXZlIG1vZGUsIFRYVUZJRiAoU1BJeF9TVEFUVVNbMTldKSB3aWxsIGJlIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8UlhGQkNMUiAgIHxSZWNlaXZlIEZJRk8gQnVmZmVyIENsZWFyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgcmVjZWl2ZSBGSUZPIHBvaW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUlhGVUxMIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBhbmQgdGhlIFJYRU1QVFkgYml0IHdpbGwgYmUgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBieSBoYXJkd2FyZSBhYm91dCAxIHN5c3RlbSBjbG9jayBhZnRlciBpdCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgUlggc2hpZnQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgY2xlYXJlZC4KKyAgICAgKiB8WzldICAgICB8VFhGQkNMUiAgIHxUcmFuc21pdCBGSUZPIEJ1ZmZlciBDbGVhcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIHRyYW5zbWl0IEZJRk8gcG9pbnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBUWEZVTEwgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGFuZCB0aGUgVFhFTVBUWSBiaXQgd2lsbCBiZSBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGJ5IGhhcmR3YXJlIGFib3V0IDEgc3lzdGVtIGNsb2NrIGFmdGVyIGl0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBUWCBzaGlmdCByZWdpc3RlciB3aWxsIG5vdCBiZSBjbGVhcmVkLgorICAgICAqIHxbMjY6MjRdIHxSWFRIICAgICAgfFJlY2VpdmUgRklGTyBUaHJlc2hvbGQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgdmFsaWQgZGF0YSBjb3VudCBvZiB0aGUgcmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiB0aGUgUlhUSCBzZXR0aW5nLCB0aGUgUlhUSElGIGJpdCB3aWxsIGJlIHNldCB0byAxLCBlbHNlIHRoZSBSWFRISUYgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFNQSTB+U1BJMywgdGhlIE1TQiBvZiB0aGlzIGJpdCBmaWVsZCBpcyBvbmx5IG1lYW5pbmdmdWwgd2hpbGUgU1BJIG1vZGUgOH4xNiBiaXRzIG9mIGRhdGEgbGVuZ3RoLgorICAgICAqIHxbMzA6MjhdIHxUWFRIICAgICAgfFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIHZhbGlkIGRhdGEgY291bnQgb2YgdGhlIHRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgVFhUSCBzZXR0aW5nLCB0aGUgVFhUSElGIGJpdCB3aWxsIGJlIHNldCB0byAxLCBlbHNlIHRoZSBUWFRISUYgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFNQSTB+U1BJMywgdGhlIE1TQiBvZiB0aGlzIGJpdCBmaWVsZCBpcyBvbmx5IG1lYW5pbmdmdWwgd2hpbGUgU1BJIG1vZGUgOH4xNiBiaXRzIG9mIGRhdGEgbGVuZ3RoLgorICAgICAqIEB2YXIgU1BJX1Q6OlNUQVRVUworICAgICAqIE9mZnNldDogMHgxNCAgU1BJIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJVU1kgICAgICB8QnVzeSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJIGNvbnRyb2xsZXIgaXMgaW4gaWRsZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJIGNvbnRyb2xsZXIgaXMgaW4gYnVzeSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZm9sbG93aW5nIGxpc3RpbmcgYXJlIHRoZSBidXMgYnVzeSBjb25kaXRpb25zOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGEuIFNQSXhfQ1RMWzBdID0gMSBhbmQgVFhFTVBUWSA9IDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8YgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBTUEkgTWFzdGVyIG1vZGUsIFNQSXhfQ1RMWzBdID0gMSBhbmQgVFhFTVBUWSA9IDEgYnV0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIG5vdCBmaW5pc2hlZCB5ZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Yy4gRm9yIFNQSSBNYXN0ZXIgbW9kZSwgU1BJeF9DVExbMF0gPSAxIGFuZCBSWE9OTFkgPSAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFNQSSBTbGF2ZSBtb2RlLCB0aGUgU1BJeF9DVExbMF0gPSAxIGFuZCB0aGVyZSBpcyBzZXJpYWwgY2xvY2sgaW5wdXQgaW50byB0aGUgU1BJIGNvcmUgbG9naWMgd2hlbiBzbGF2ZSBzZWxlY3QgaXMgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFNQSSBTbGF2ZSBtb2RlLCB0aGUgU1BJeF9DVExbMF0gPSAxIGFuZCB0aGUgdHJhbnNtaXQgYnVmZmVyIG9yIHRyYW5zbWl0IHNoaWZ0IHJlZ2lzdGVyIGlzIG5vdCBlbXB0eSBldmVuIGlmIHRoZSBzbGF2ZSBzZWxlY3QgaXMgaW5hY3RpdmUuCisgICAgICogfFsxXSAgICAgfFVOSVRJRiAgICB8VW5pdCBUcmFuc2ZlciBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB0cmFuc2FjdGlvbiBoYXMgYmVlbiBmaW5pc2hlZCBzaW5jZSB0aGlzIGJpdCB3YXMgY2xlYXJlZCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEkgY29udHJvbGxlciBoYXMgZmluaXNoZWQgb25lIHVuaXQgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzJdICAgICB8U1NBQ1RJRiAgIHxTbGF2ZSBTZWxlY3QgQWN0aXZlIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIHNlbGVjdCBhY3RpdmUgaW50ZXJydXB0IHdhcyBjbGVhcmVkIG9yIG5vdCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgc2VsZWN0IGFjdGl2ZSBpbnRlcnJ1cHQgZXZlbnQgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogT25seSBhdmFpbGFibGUgaW4gU2xhdmUgbW9kZS4gVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzNdICAgICB8U1NJTkFJRiAgIHxTbGF2ZSBTZWxlY3QgSW5hY3RpdmUgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgc2VsZWN0IGluYWN0aXZlIGludGVycnVwdCB3YXMgY2xlYXJlZCBvciBub3Qgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIHNlbGVjdCBpbmFjdGl2ZSBpbnRlcnJ1cHQgZXZlbnQgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogT25seSBhdmFpbGFibGUgaW4gU2xhdmUgbW9kZS4gVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzRdICAgICB8U1NMSU5FICAgIHxTbGF2ZSBTZWxlY3QgTGluZSBCdXMgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBzbGF2ZSBzZWxlY3QgbGluZSBzdGF0dXMgaXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHNsYXZlIHNlbGVjdCBsaW5lIHN0YXR1cyBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIG9ubHkgYXZhaWxhYmxlIGluIFNsYXZlIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBTU0FDVFBPTCAoU1BJeF9TU0NUTFsyXSkgaXMgc2V0IDAsIGFuZCB0aGUgU1NMSU5FIGlzIDEsIHRoZSBTUEkgc2xhdmUgc2VsZWN0IGlzIGluIGluYWN0aXZlIHN0YXR1cy4KKyAgICAgKiB8WzZdICAgICB8U0xWQkVJRiAgIHxTbGF2ZSBNb2RlIEJpdCBDb3VudCBFcnJvciBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIFNsYXZlIG1vZGUsIHdoZW4gdGhlIHNsYXZlIHNlbGVjdCBsaW5lIGdvZXMgdG8gaW5hY3RpdmUgc3RhdGUsIGlmIGJpdCBjb3VudGVyIGlzIG1pc21hdGNoIHdpdGggRFdJRFRILCB0aGlzIGludGVycnVwdCBmbGFnIHdpbGwgYmUgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFNsYXZlIG1vZGUgYml0IGNvdW50IGVycm9yIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBtb2RlIGJpdCBjb3VudCBlcnJvciBldmVudCBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgdGhlIHNsYXZlIHNlbGVjdCBhY3RpdmUgYnV0IHRoZXJlIGlzIG5vIGFueSBidXMgY2xvY2sgaW5wdXQsIHRoZSBTTFZCRUlGIGFsc28gYWN0aXZlIHdoZW4gdGhlIHNsYXZlIHNlbGVjdCBnb2VzIHRvIGluYWN0aXZlIHN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzddICAgICB8U0xWVVJJRiAgIHxTbGF2ZSBNb2RlIFRYIFVuZGVyIFJ1biBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIFNsYXZlIG1vZGUsIGlmIFRYIHVuZGVyZmxvdyBldmVudCBvY2N1cnMgYW5kIHRoZSBzbGF2ZSBzZWxlY3QgbGluZSBnb2VzIHRvIGluYWN0aXZlIHN0YXRlLCB0aGlzIGludGVycnVwdCBmbGFnIHdpbGwgYmUgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFNsYXZlIFRYIHVuZGVyIHJ1biBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgVFggdW5kZXIgcnVuIGV2ZW50IG9jY3Vycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbOF0gICAgIHxSWEVNUFRZICAgfFJlY2VpdmUgRklGTyBCdWZmZXIgRW1wdHkgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgRklGTyBidWZmZXIgaXMgbm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIEZJRk8gYnVmZmVyIGlzIGVtcHR5LgorICAgICAqIHxbOV0gICAgIHxSWEZVTEwgICAgfFJlY2VpdmUgRklGTyBCdWZmZXIgRnVsbCBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBub3QgZnVsbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBmdWxsLgorICAgICAqIHxbMTBdICAgIHxSWFRISUYgICAgfFJlY2VpdmUgRklGTyBUaHJlc2hvbGQgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHZhbGlkIGRhdGEgY291bnQgd2l0aGluIHRoZSByZWNlaXZlIEZJRk8gYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc2V0dGluZyB2YWx1ZSBvZiBSWFRILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdmFsaWQgZGF0YSBjb3VudCB3aXRoaW4gdGhlIHJlY2VpdmUgRklGTyBidWZmZXIgaXMgbGFyZ2VyIHRoYW4gdGhlIHNldHRpbmcgdmFsdWUgb2YgUlhUSC4KKyAgICAgKiB8WzExXSAgICB8UlhPVklGICAgIHxSZWNlaXZlIEZJRk8gT3ZlcnJ1biBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIHJlY2VpdmUgRklGTyBidWZmZXIgaXMgZnVsbCwgdGhlIGZvbGxvdy11cCBkYXRhIHdpbGwgYmUgZHJvcHBlZCBhbmQgdGhpcyBiaXQgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gRklGTyBpcyBvdmVycnVuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIEZJRk8gaXMgb3ZlcnJ1bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMTJdICAgIHxSWFRPSUYgICAgfFJlY2VpdmUgVGltZS1vdXQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcmVjZWl2ZSBGSUZPIHRpbWUtb3V0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIEZJRk8gYnVmZmVyIGlzIG5vdCBlbXB0eSBhbmQgbm8gcmVhZCBvcGVyYXRpb24gb24gcmVjZWl2ZSBGSUZPIGJ1ZmZlciBvdmVyIDY0IFNQSSBwZXJpcGhlcmFsIGNsb2NrIHBlcmlvZHMgaW4gTWFzdGVyIG1vZGUgb3Igb3ZlciA1NzYgU1BJIHBlcmlwaGVyYWwgY2xvY2sgcGVyaW9kcyBpbiBTbGF2ZSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgcmVjZWl2ZWQgRklGTyBidWZmZXIgaXMgcmVhZCBieSBzb2Z0d2FyZSwgdGhlIHRpbWUtb3V0IHN0YXR1cyB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMTVdICAgIHxTUElFTlNUUyAgfFNQSSBFbmFibGUgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBTUEkgY29udHJvbGxlciBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIFNQSSBjb250cm9sbGVyIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIFNQSSBwZXJpcGhlcmFsIGNsb2NrIGlzIGFzeW5jaHJvbm91cyB3aXRoIHRoZSBzeXN0ZW0gY2xvY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvcmRlciB0byBtYWtlIHN1cmUgdGhlIFNQSSBjb250cm9sIGxvZ2ljIGlzIGRpc2FibGVkLCB0aGlzIGJpdCBpbmRpY2F0ZXMgdGhlIHJlYWwgc3RhdHVzIG9mIFNQSSBjb250cm9sbGVyLgorICAgICAqIHxbMTZdICAgIHxUWEVNUFRZICAgfFRyYW5zbWl0IEZJRk8gQnVmZmVyIEVtcHR5IEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBub3QgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIGVtcHR5LgorICAgICAqIHxbMTddICAgIHxUWEZVTEwgICAgfFRyYW5zbWl0IEZJRk8gQnVmZmVyIEZ1bGwgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIG5vdCBmdWxsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBmdWxsLgorICAgICAqIHxbMThdICAgIHxUWFRISUYgICAgfFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB2YWxpZCBkYXRhIGNvdW50IHdpdGhpbiB0aGUgdHJhbnNtaXQgRklGTyBidWZmZXIgaXMgbGFyZ2VyIHRoYW4gdGhlIHNldHRpbmcgdmFsdWUgb2YgVFhUSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHZhbGlkIGRhdGEgY291bnQgd2l0aGluIHRoZSB0cmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNldHRpbmcgdmFsdWUgb2YgVFhUSC4KKyAgICAgKiB8WzE5XSAgICB8VFhVRklGICAgIHxUWCBVbmRlcmZsb3cgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBUWCB1bmRlcmZsb3cgZXZlbnQgb2NjdXJzLCB0aGlzIGJpdCB3aWxsIGJlIHNldCB0byAxLCB0aGUgc3RhdGUgb2YgZGF0YSBvdXRwdXQgcGluIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgVFhVRlBPTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBObyBkYXRhIGluIFRyYW5zbWl0IEZJRk8gYW5kIFRYIHNoaWZ0IHJlZ2lzdGVyIHdoZW4gdGhlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaXMgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUgMTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlIDI6IElmIHJlc2V0IHNsYXZlJ3MgdHJhbnNtaXNzaW9uIGNpcmN1aXQgd2hlbiBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGlzIGFjdGl2ZSwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIDEgYWZ0ZXIgMiBwZXJpcGhlcmFsIGNsb2NrIGN5Y2xlcyArIDMgc3lzdGVtIGNsb2NrIGN5Y2xlcyBzaW5jZSB0aGUgcmVzZXQgb3BlcmF0aW9uIGlzIGRvbmUuCisgICAgICogfFsyM10gICAgfFRYUlhSU1QgICB8VFggb3IgUlggUmVzZXQgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSByZXNldCBmdW5jdGlvbiBvZiBUWFJTVCBvciBSWFJTVCBpcyBkb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEb2luZyB0aGUgcmVzZXQgZnVuY3Rpb24gb2YgVFhSU1Qgb3IgUlhSU1QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQm90aCB0aGUgcmVzZXQgb3BlcmF0aW9ucyBvZiBUWFJTVCBhbmQgUlhSU1QgbmVlZCAzIHN5c3RlbSBjbG9jayBjeWNsZXMgKyAyIHBlcmlwaGVyYWwgY2xvY2sgY3ljbGVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGlzIGJpdCB0byBtb25pdG9yIHRoZSByZXNldCBmdW5jdGlvbiBpcyBkb2luZyBvciBkb25lLgorICAgICAqIHxbMjc6MjRdIHxSWENOVCAgICAgfFJlY2VpdmUgRklGTyBEYXRhIENvdW50IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgaW5kaWNhdGVzIHRoZSB2YWxpZCBkYXRhIGNvdW50IG9mIHJlY2VpdmUgRklGTyBidWZmZXIuCisgICAgICogfFszMToyOF0gfFRYQ05UICAgICB8VHJhbnNtaXQgRklGTyBEYXRhIENvdW50IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgaW5kaWNhdGVzIHRoZSB2YWxpZCBkYXRhIGNvdW50IG9mIHRyYW5zbWl0IEZJRk8gYnVmZmVyLgorICAgICAqIEB2YXIgU1BJX1Q6OlRYCisgICAgICogT2Zmc2V0OiAweDIwICBTUEkgRGF0YSBUcmFuc21pdCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFRYICAgICAgICB8RGF0YSBUcmFuc21pdCBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkYXRhIHRyYW5zbWl0IHJlZ2lzdGVycyBwYXNzIHRocm91Z2ggdGhlIHRyYW5zbWl0dGVkIGRhdGEgaW50byB0aGUgNC1sZXZlbCB0cmFuc21pdCBGSUZPIGJ1ZmZlcnMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgbnVtYmVyIG9mIHZhbGlkIGJpdHMgZGVwZW5kcyBvbiB0aGUgc2V0dGluZyBvZiBEV0lEVEggKFNQSXhfQ1RMWzEyOjhdKSBpbiBTUEkgbW9kZSBvciBXRFdJRFRIIChTUEl4X0kyU0NUTFs1OjRdKSBpbiBJMlMgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBTUEkgbW9kZSwgaWYgRFdJRFRIIGlzIHNldCB0byAweDA4LCB0aGUgYml0cyBUWFs3OjBdIHdpbGwgYmUgdHJhbnNtaXR0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBEV0lEVEggaXMgc2V0IHRvIDB4MDAgLCB0aGUgU1BJIGNvbnRyb2xsZXIgd2lsbCBwZXJmb3JtIGEgMzItYml0IHRyYW5zZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIEkyUyBtb2RlLCBpZiBXRFdJRFRIIChTUEl4X0kyU0NUTFs1OjRdKSBpcyBzZXQgdG8gMHgyLCB0aGUgZGF0YSB3aWR0aCBvZiBhdWRpbyBjaGFubmVsIGlzIDI0LWJpdCBhbmQgY29ycmVzcG9uZGluZyB0byBUWFsyMzowXQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFdEV0lEVEggaXMgc2V0IGFzIDB4MCwgMHgxLCBvciAweDMsIGFsbCBiaXRzIG9mIHRoaXMgZmllbGQgYXJlIHZhbGlkIGFuZCByZWZlcnJlZCB0byB0aGUgZGF0YSBhcnJhbmdlbWVudCBpbiBJMlMgbW9kZSBGSUZPIG9wZXJhdGlvbiBzZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gTWFzdGVyIG1vZGUsIFNQSSBjb250cm9sbGVyIHdpbGwgc3RhcnQgdG8gdHJhbnNmZXIgdGhlIFNQSSBidXMgY2xvY2sgYWZ0ZXIgMSBBUEIgY2xvY2sgYW5kIDYgcGVyaXBoZXJhbCBjbG9jayBjeWNsZXMgYWZ0ZXIgdXNlciB3cml0ZXMgdG8gdGhpcyByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFNQSV9UOjpSWAorICAgICAqIE9mZnNldDogMHgzMCAgU1BJIERhdGEgUmVjZWl2ZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFJYICAgICAgICB8RGF0YSBSZWNlaXZlIFJlZ2lzdGVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlcmUgYXJlIDQtbGV2ZWwgRklGTyBidWZmZXJzIGluIHRoaXMgY29udHJvbGxlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGF0YSByZWNlaXZlIHJlZ2lzdGVyIGhvbGRzIHRoZSBkYXRhIHJlY2VpdmVkIGZyb20gU1BJIGRhdGEgaW5wdXQgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBSWEVNUFRZIChTUEl4X1NUQVRVU1s4XSBvciBTUEl4X0kyU1NUU1s4XSkgaXMgbm90IHNldCB0byAxLCB0aGUgcmVjZWl2ZSBGSUZPIGJ1ZmZlcnMgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggc29mdHdhcmUgYnkgcmVhZGluZyB0aGlzIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgU1BJX1Q6OkkyU0NUTAorICAgICAqIE9mZnNldDogMHg2MCAgSTJTIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxJMlNFTiAgICAgfEkyUyBDb250cm9sbGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGlzYWJsZWQgSTJTIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZWQgSTJTIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxLiBJZiBlbmFibGUgdGhpcyBiaXQsIEkyU3hfQkNMSyB3aWxsIHN0YXJ0IHRvIG91dHB1dCBpbiBNYXN0ZXIgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmVmb3JlIGNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9ucyBvZiBTUEl4X0kyU0NUTCwgU1BJeF9JMlNDTEssIGFuZCBTUEl4X0ZJRk9DVEwgcmVnaXN0ZXJzLCB1c2VyIHNoYWxsIGNsZWFyIHRoZSBJMlNFTiAoU1BJeF9JMlNDVExbMF0pIGFuZCBjb25maXJtIHRoZSBJMlNFTlNUUyAoU1BJeF9JMlNTVFNbMTVdKSBpcyAwLgorICAgICAqIHxbMV0gICAgIHxUWEVOICAgICAgfFRyYW5zbWl0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGF0YSB0cmFuc21pdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSB0cmFuc21pdCBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxSWEVOICAgICAgfFJlY2VpdmUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIHJlY2VpdmUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERhdGEgcmVjZWl2ZSBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxNVVRFICAgICAgfFRyYW5zbWl0IE11dGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBkYXRhIGlzIHNoaWZ0ZWQgZnJvbSBidWZmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IGNoYW5uZWwgemVyby4KKyAgICAgKiB8WzU6NF0gICB8V0RXSURUSCAgIHxXb3JkIFdpZHRoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBkYXRhIHNpemUgaXMgOC1iaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBkYXRhIHNpemUgaXMgMTYtYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gZGF0YSBzaXplIGlzIDI0LWJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IGRhdGEgc2l6ZSBpcyAzMi1iaXQuCisgICAgICogfFs2XSAgICAgfE1PTk8gICAgICB8TW9uYXVyYWwgRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIGlzIHN0ZXJlbyBmb3JtYXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERhdGEgaXMgbW9uYXVyYWwgZm9ybWF0LgorICAgICAqIHxbN10gICAgIHxPUkRFUiAgICAgfFN0ZXJlbyBEYXRhIE9yZGVyIGluIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTGVmdCBjaGFubmVsIGRhdGEgYXQgaGlnaCBieXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMZWZ0IGNoYW5uZWwgZGF0YSBhdCBsb3cgYnl0ZS4KKyAgICAgKiB8WzhdICAgICB8U0xBVkUgICAgIHxTbGF2ZSBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8STJTIGNhbiBvcGVyYXRlIGFzIG1hc3RlciBvciBzbGF2ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBNYXN0ZXIgbW9kZSwgSTJTeF9CQ0xLIGFuZCBJMlN4X0xSQ0xLIHBpbnMgYXJlIG91dHB1dCBtb2RlIGFuZCBzZW5kIGJpdCBjbG9jayBmcm9tIE51TWljcm8gTTIzNTEgc2VyaWVzIHRvIGF1ZGlvIENPREVDIGNoaXAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBTbGF2ZSBtb2RlLCBJMlN4X0JDTEsgYW5kIEkyU3hfTFJDTEsgcGlucyBhcmUgaW5wdXQgbW9kZSBhbmQgSTJTeF9CQ0xLIGFuZCBJMlN4X0xSQ0xLIHNpZ25hbHMgYXJlIHJlY2VpdmVkIGZyb20gb3V0ZXIgYXVkaW8gQ09ERUMgY2hpcC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWFzdGVyIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIG1vZGUuCisgICAgICogfFsxNV0gICAgfE1DTEtFTiAgICB8TWFzdGVyIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBNQ0xLRU4gaXMgc2V0IHRvIDEsIEkyUyBjb250cm9sbGVyIHdpbGwgZ2VuZXJhdGUgbWFzdGVyIGNsb2NrIG9uIFNQSXhfSTJTTUNMSyBwaW4gZm9yIGV4dGVybmFsIGF1ZGlvIGRldmljZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE1hc3RlciBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTWFzdGVyIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxNl0gICAgfFJaQ0VOICAgICB8UmlnaHQgQ2hhbm5lbCBaZXJvIENyb3NzIERldGVjdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHdoZW4gcmlnaHQgY2hhbm5lbCBkYXRhIHNpZ24gYml0IGNoYW5nZSBvciBuZXh0IHNoaWZ0IGRhdGEgYml0cyBhcmUgYWxsIDAgdGhlbiBSWkNJRiBmbGFnIGluIFNQSXhfSTJTU1RTIHJlZ2lzdGVyIGlzIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpbiB0cmFuc21pdCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJpZ2h0IGNoYW5uZWwgemVybyBjcm9zcyBkZXRlY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJpZ2h0IGNoYW5uZWwgemVybyBjcm9zcyBkZXRlY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzE3XSAgICB8TFpDRU4gICAgIHxMZWZ0IENoYW5uZWwgWmVybyBDcm9zcyBEZXRlY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB3aGVuIGxlZnQgY2hhbm5lbCBkYXRhIHNpZ24gYml0IGNoYW5nZXMgb3IgbmV4dCBzaGlmdCBkYXRhIGJpdHMgYXJlIGFsbCAwIHRoZW4gTFpDSUYgZmxhZyBpbiBTUEl4X0kyU1NUUyByZWdpc3RlciBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgaW4gdHJhbnNtaXQgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMZWZ0IGNoYW5uZWwgemVybyBjcm9zcyBkZXRlY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExlZnQgY2hhbm5lbCB6ZXJvIGNyb3NzIGRldGVjdGlvbiBFbmFibGVkLgorICAgICAqIHxbMjNdICAgIHxSWExDSCAgICAgfFJlY2VpdmUgTGVmdCBDaGFubmVsIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIG1vbmF1cmFsIGZvcm1hdCBpcyBzZWxlY3RlZCAoTU9OTyA9IDEpLCBJMlMgY29udHJvbGxlciB3aWxsIHJlY2VpdmUgcmlnaHQgY2hhbm5lbCBkYXRhIGlmIFJYTENIIGlzIHNldCB0byAwLCBhbmQgcmVjZWl2ZSBsZWZ0IGNoYW5uZWwgZGF0YSBpZiBSWExDSCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSByaWdodCBjaGFubmVsIGRhdGEgaW4gTW9ubyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIGxlZnQgY2hhbm5lbCBkYXRhIGluIE1vbm8gbW9kZS4KKyAgICAgKiB8WzI0XSAgICB8UlpDSUVOICAgIHxSaWdodCBDaGFubmVsIFplcm8gQ3Jvc3MgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbnRlcnJ1cHQgb2NjdXJzIGlmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCByaWdodCBjaGFubmVsIHplcm8gY3Jvc3MgZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMjVdICAgIHxMWkNJRU4gICAgfExlZnQgQ2hhbm5lbCBaZXJvIENyb3NzIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW50ZXJydXB0IG9jY3VycyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgbGVmdCBjaGFubmVsIHplcm8gY3Jvc3MgZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMjk6MjhdIHxGT1JNQVQgICAgfERhdGEgRm9ybWF0IFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gSTJTIGRhdGEgZm9ybWF0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gTVNCIGp1c3RpZmllZCBkYXRhIGZvcm1hdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBDTSBtb2RlIEEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQQ00gbW9kZSBCLgorICAgICAqIEB2YXIgU1BJX1Q6OkkyU0NMSworICAgICAqIE9mZnNldDogMHg2NCAgSTJTIENsb2NrIERpdmlkZXIgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs2OjBdICAgfE1DTEtESVYgICB8TWFzdGVyIENsb2NrIERpdmlkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBNQ0xLRU4gaXMgc2V0IHRvIDEsIEkyUyBjb250cm9sbGVyIHdpbGwgZ2VuZXJhdGUgbWFzdGVyIGNsb2NrIGZvciBleHRlcm5hbCBhdWRpbyBkZXZpY2VzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmcmVxdWVuY3kgb2YgbWFzdGVyIGNsb2NrLCBGX01DTEssIGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBleHByZXNzaW9uczoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBNQ0xLRElWID49IDEsIEZfTUNMSyA9IEZfSTJTQ0xLLygyeChNQ0xLRElWKSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgTUNMS0RJViA9IDAsIEZfTUNMSyA9IEZfSTJTQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHdoZXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8aXMgdGhlIGZyZXF1ZW5jeSBvZiBJMlMgcGVyaXBoZXJhbCBjbG9jayBzb3VyY2UsIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgQ0xLX0NMS1NFTDIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rl9JMlNDTEsgaXMgdGhlIGZyZXF1ZW5jeSBvZiBJMlMgcGVyaXBoZXJhbCBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBnZW5lcmFsLCB0aGUgbWFzdGVyIGNsb2NrIHJhdGUgaXMgMjU2IHRpbWVzIHNhbXBsaW5nIGNsb2NrIHJhdGUuCisgICAgICogfFsxNzo4XSAgfEJDTEtESVYgICB8Qml0IENsb2NrIERpdmlkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgSTJTIGNvbnRyb2xsZXIgd2lsbCBnZW5lcmF0ZSBiaXQgY2xvY2sgaW4gTWFzdGVyIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNsb2NrIGZyZXF1ZW5jeSBvZiBiaXQgY2xvY2ssIEZfQkNMSywgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rl9CQ0xLID0gRl9JMlNDTEsvKDJ4KEJDTEtESVYgKyAxKSksCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8d2hlcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGX0kyU0NMSyBpcyB0aGUgZnJlcXVlbmN5IG9mIEkyUyBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSwgd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBDTEtfQ0xLU0VMMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBJMlMgU2xhdmUgbW9kZSwgdGhpcyBmaWVsZCBpcyB1c2VkIHRvIGRlZmluZSB0aGUgZnJlcXVlbmN5IG9mIHBlcmlwaGVyYWwgY2xvY2sgYW5kIGl0J3MgZGV0ZXJtaW5lZCBieSBGX0kyU0NMSy8oQkNMS0RJVi8yICsgMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHBlcmlwaGVyYWwgY2xvY2sgZnJlcXVlbmN5IGluIEkyUyBTbGF2ZSBtb2RlIG11c3QgYmUgZXF1YWwgdG8gb3IgZmFzdGVyIHRoYW4gNiB0aW1lcyBvZiBpbnB1dCBiaXQgY2xvY2suCisgICAgICogQHZhciBTUElfVDo6STJTU1RTCisgICAgICogT2Zmc2V0OiAweDY4ICBJMlMgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzRdICAgICB8UklHSFQgICAgIHxSaWdodCBDaGFubmVsIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoZSBjdXJyZW50IHRyYW5zbWl0IGRhdGEgaXMgYmVsb25nIHRvIHdoaWNoIGNoYW5uZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExlZnQgY2hhbm5lbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmlnaHQgY2hhbm5lbC4KKyAgICAgKiB8WzhdICAgICB8UlhFTVBUWSAgIHxSZWNlaXZlIEZJRk8gQnVmZmVyIEVtcHR5IEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIEZJRk8gYnVmZmVyIGlzIG5vdCBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBlbXB0eS4KKyAgICAgKiB8WzldICAgICB8UlhGVUxMICAgIHxSZWNlaXZlIEZJRk8gQnVmZmVyIEZ1bGwgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgRklGTyBidWZmZXIgaXMgbm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgRklGTyBidWZmZXIgaXMgZnVsbC4KKyAgICAgKiB8WzEwXSAgICB8UlhUSElGICAgIHxSZWNlaXZlIEZJRk8gVGhyZXNob2xkIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB2YWxpZCBkYXRhIGNvdW50IHdpdGhpbiB0aGUgcmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNldHRpbmcgdmFsdWUgb2YgUlhUSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHZhbGlkIGRhdGEgY291bnQgd2l0aGluIHRoZSByZWNlaXZlIEZJRk8gYnVmZmVyIGlzIGxhcmdlciB0aGFuIHRoZSBzZXR0aW5nIHZhbHVlIG9mIFJYVEguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgUlhUSElFTiA9IDEgYW5kIFJYVEhJRiA9IDEsIHRoZSBTUEkvSTJTIGNvbnRyb2xsZXIgd2lsbCBnZW5lcmF0ZSBhIFNQSSBpbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICAgKiB8WzExXSAgICB8UlhPVklGICAgIHxSZWNlaXZlIEZJRk8gT3ZlcnJ1biBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIHJlY2VpdmUgRklGTyBidWZmZXIgaXMgZnVsbCwgdGhlIGZvbGxvdy11cCBkYXRhIHdpbGwgYmUgZHJvcHBlZCBhbmQgdGhpcyBiaXQgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMTJdICAgIHxSWFRPSUYgICAgfFJlY2VpdmUgVGltZS1vdXQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcmVjZWl2ZSBGSUZPIHRpbWUtb3V0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIEZJRk8gYnVmZmVyIGlzIG5vdCBlbXB0eSBhbmQgbm8gcmVhZCBvcGVyYXRpb24gb24gcmVjZWl2ZSBGSUZPIGJ1ZmZlciBvdmVyIDY0IFNQSSBwZXJpcGhlcmFsIGNsb2NrIHBlcmlvZCBpbiBNYXN0ZXIgbW9kZSBvciBvdmVyIDU3NiBTUEkgcGVyaXBoZXJhbCBjbG9jayBwZXJpb2QgaW4gU2xhdmUgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIHJlY2VpdmVkIEZJRk8gYnVmZmVyIGlzIHJlYWQgYnkgc29mdHdhcmUsIHRoZSB0aW1lLW91dCBzdGF0dXMgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzE1XSAgICB8STJTRU5TVFMgIHxJMlMgRW5hYmxlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgU1BJL0kyUyBjb250cm9sIGxvZ2ljIGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgU1BJL0kyUyBjb250cm9sIGxvZ2ljIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIFNQSSBwZXJpcGhlcmFsIGNsb2NrIGlzIGFzeW5jaHJvbm91cyB3aXRoIHRoZSBzeXN0ZW0gY2xvY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvcmRlciB0byBtYWtlIHN1cmUgdGhlIFNQSS9JMlMgY29udHJvbCBsb2dpYyBpcyBkaXNhYmxlZCwgdGhpcyBiaXQgaW5kaWNhdGVzIHRoZSByZWFsIHN0YXR1cyBvZiBTUEkvSTJTIGNvbnRyb2wgbG9naWMgZm9yIHVzZXIuCisgICAgICogfFsxNl0gICAgfFRYRU1QVFkgICB8VHJhbnNtaXQgRklGTyBCdWZmZXIgRW1wdHkgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIG5vdCBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgRklGTyBidWZmZXIgaXMgZW1wdHkuCisgICAgICogfFsxN10gICAgfFRYRlVMTCAgICB8VHJhbnNtaXQgRklGTyBCdWZmZXIgRnVsbCBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgRklGTyBidWZmZXIgaXMgbm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIGZ1bGwuCisgICAgICogfFsxOF0gICAgfFRYVEhJRiAgICB8VHJhbnNtaXQgRklGTyBUaHJlc2hvbGQgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHZhbGlkIGRhdGEgY291bnQgd2l0aGluIHRoZSB0cmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiB0aGUgc2V0dGluZyB2YWx1ZSBvZiBUWFRILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdmFsaWQgZGF0YSBjb3VudCB3aXRoaW4gdGhlIHRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc2V0dGluZyB2YWx1ZSBvZiBUWFRILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIFRYVEhJRU4gPSAxIGFuZCBUWFRISUYgPSAxLCB0aGUgU1BJL0kyUyBjb250cm9sbGVyIHdpbGwgZ2VuZXJhdGUgYSBTUEkgaW50ZXJydXB0IHJlcXVlc3QuCisgICAgICogfFsxOV0gICAgfFRYVUZJRiAgICB8VHJhbnNtaXQgRklGTyBVbmRlcmZsb3cgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSB0cmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBlbXB0eSBhbmQgdGhlcmUgaXMgbm8gZGF0dW0gd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGJ1ZmZlciwgaWYgdGhlcmUgaXMgbW9yZSBidXMgY2xvY2sgaW5wdXQsIHRoaXMgYml0IHdpbGwgYmUgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzIwXSAgICB8UlpDSUYgICAgIHxSaWdodCBDaGFubmVsIFplcm8gQ3Jvc3MgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gemVybyBjcm9zcyBldmVudCBvY2N1cnJlZCBvbiByaWdodCBjaGFubmVsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBaZXJvIGNyb3NzIGV2ZW50IG9jY3VycmVkIG9uIHJpZ2h0IGNoYW5uZWwuCisgICAgICogfFsyMV0gICAgfExaQ0lGICAgICB8TGVmdCBDaGFubmVsIFplcm8gQ3Jvc3MgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gemVybyBjcm9zcyBldmVudCBvY2N1cnJlZCBvbiBsZWZ0IGNoYW5uZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFplcm8gY3Jvc3MgZXZlbnQgb2NjdXJyZWQgb24gbGVmdCBjaGFubmVsLgorICAgICAqIHxbMjNdICAgIHxUWFJYUlNUICAgfFRYIG9yIFJYIFJlc2V0IFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVzZXQgZnVuY3Rpb24gb2YgVFhSU1Qgb3IgUlhSU1QgaXMgZG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRG9pbmcgdGhlIHJlc2V0IGZ1bmN0aW9uIG9mIFRYUlNUIG9yIFJYUlNULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEJvdGggdGhlIHJlc2V0IG9wZXJhdGlvbnMgb2YgVFhSU1QgYW5kIFJYUlNUIG5lZWQgMyBzeXN0ZW0gY2xvY2sgY3ljbGVzICsgMiBwZXJpcGhlcmFsIGNsb2NrIGN5Y2xlcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhpcyBiaXQgdG8gbW9uaXRvciB0aGUgcmVzZXQgZnVuY3Rpb24gaXMgZG9pbmcgb3IgZG9uZS4KKyAgICAgKiB8WzI2OjI0XSB8UlhDTlQgICAgIHxSZWNlaXZlIEZJRk8gRGF0YSBDb3VudCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGluZGljYXRlcyB0aGUgdmFsaWQgZGF0YSBjb3VudCBvZiByZWNlaXZlIEZJRk8gYnVmZmVyLgorICAgICAqIHxbMzA6MjhdIHxUWENOVCAgICAgfFRyYW5zbWl0IEZJRk8gRGF0YSBDb3VudCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGluZGljYXRlcyB0aGUgdmFsaWQgZGF0YSBjb3VudCBvZiB0cmFuc21pdCBGSUZPIGJ1ZmZlci4KKyAgICAgKi8KKworICAgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIFNQSSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENMS0RJVjsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBTUEkgQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTU0NUTDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gU1BJIFNsYXZlIFNlbGVjdCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUERNQUNUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIFNQSSBQRE1BIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEZJRk9DVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBTUEkgRklGTyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTVEFUVVM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxNF0gU1BJIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTBbMl07CisgICAgX19PICB1aW50MzJfdCBUWDsgICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyMF0gU1BJIERhdGEgVHJhbnNtaXQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbM107CisgICAgX19JICB1aW50MzJfdCBSWDsgICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzMF0gU1BJIERhdGEgUmVjZWl2ZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTJbMTFdOworICAgIF9fSU8gdWludDMyX3QgSTJTQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNjBdIEkyUyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEkyU0NMSzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDY0XSBJMlMgQ2xvY2sgRGl2aWRlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJMlNTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA2OF0gSTJTIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFNQSV9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBTUElfQ09OU1QgU1BJIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFNQSSBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFNQSV9DVExfU1BJRU5fUG9zICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBTUElFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBTUElfQ1RMX1NQSUVOX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0NUTF9TUElFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogU1BJRU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfQ1RMX1JYTkVHX1BvcyAgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogUlhORUcgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0NUTF9SWE5FR19Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9DVExfUlhORUdfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IFJYTkVHIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0NUTF9UWE5FR19Qb3MgICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IFRYTkVHIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9DVExfVFhORUdfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfQ1RMX1RYTkVHX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBUWE5FRyBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9DVExfQ0xLUE9MX1BvcyAgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBDTEtQT0wgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTUElfQ1RMX0NMS1BPTF9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0NUTF9DTEtQT0xfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogQ0xLUE9MIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfQ1RMX1NVU1BJVFZfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogU1VTUElUViBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0NUTF9TVVNQSVRWX01zayAgICAgICAgICAgICAgKDB4ZnVsIDw8IFNQSV9DVExfU1VTUElUVl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IFNVU1BJVFYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0NUTF9EV0lEVEhfUG9zICAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IERXSURUSCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9DVExfRFdJRFRIX01zayAgICAgICAgICAgICAgICgweDFmdWwgPDwgU1BJX0NUTF9EV0lEVEhfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBEV0lEVEggTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9DVExfTFNCX1BvcyAgICAgICAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBMU0IgUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBTUElfQ1RMX0xTQl9Nc2sgICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0NUTF9MU0JfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogTFNCIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfQ1RMX0hBTEZEUFhfUG9zICAgICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogSEFMRkRQWCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0NUTF9IQUxGRFBYX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9DVExfSEFMRkRQWF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IEhBTEZEUFggTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0NUTF9SWE9OTFlfUG9zICAgICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IFJYT05MWSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9DVExfUlhPTkxZX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfQ1RMX1JYT05MWV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBSWE9OTFkgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9DVExfVU5JVElFTl9Qb3MgICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBVTklUSUVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTUElfQ1RMX1VOSVRJRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0NUTF9VTklUSUVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogVU5JVElFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfQ1RMX1NMQVZFX1BvcyAgICAgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogU0xBVkUgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0NUTF9TTEFWRV9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9DVExfU0xBVkVfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IFNMQVZFIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0NUTF9SRU9SREVSX1BvcyAgICAgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IFJFT1JERVIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNQSV9DVExfUkVPUkRFUl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfQ1RMX1JFT1JERVJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBSRU9SREVSIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9DVExfREFURElSX1BvcyAgICAgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBEQVRESVIgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTUElfQ1RMX0RBVERJUl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0NUTF9EQVRESVJfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogREFURElSIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfQ0xLRElWX0RJVklERVJfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNMS0RJVjogRElWSURFUiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0NMS0RJVl9ESVZJREVSX01zayAgICAgICAgICAgKDB4MWZmdWwgPDwgU1BJX0NMS0RJVl9ESVZJREVSX1BvcykgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDTEtESVY6IERJVklERVIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NTQ1RMX1NTX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTU0NUTDogU1MgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TU0NUTF9TU19Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfU1NDVExfU1NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1NDVEw6IFNTIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TU0NUTF9TU0FDVFBPTF9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1NDVEw6IFNTQUNUUE9MIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTUElfU1NDVExfU1NBQ1RQT0xfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NTQ1RMX1NTQUNUUE9MX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNTQ1RMOiBTU0FDVFBPTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1NDVExfQVVUT1NTX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNTQ1RMOiBBVVRPU1MgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NTQ1RMX0FVVE9TU19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TU0NUTF9BVVRPU1NfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTU0NUTDogQVVUT1NTIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NTQ1RMX1NMVkJFSUVOX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTU0NUTDogU0xWQkVJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNQSV9TU0NUTF9TTFZCRUlFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTUElfU1NDVExfU0xWQkVJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1NDVEw6IFNMVkJFSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TU0NUTF9TTFZVUklFTl9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1NDVEw6IFNMVlVSSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTUElfU1NDVExfU0xWVVJJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NTQ1RMX1NMVlVSSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNTQ1RMOiBTTFZVUklFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1NDVExfU1NBQ1RJRU5fUG9zICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNTQ1RMOiBTU0FDVElFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NTQ1RMX1NTQUNUSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TU0NUTF9TU0FDVElFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTU0NUTDogU1NBQ1RJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NTQ1RMX1NTSU5BSUVOX1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTU0NUTDogU1NJTkFJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNQSV9TU0NUTF9TU0lOQUlFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTUElfU1NDVExfU1NJTkFJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1NDVEw6IFNTSU5BSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9QRE1BQ1RMX1RYUERNQUVOX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6UERNQUNUTDogVFhQRE1BRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTUElfUERNQUNUTF9UWFBETUFFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1BJX1BETUFDVExfVFhQRE1BRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlBETUFDVEw6IFRYUERNQUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfUERNQUNUTF9SWFBETUFFTl9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlBETUFDVEw6IFJYUERNQUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1BJX1BETUFDVExfUlhQRE1BRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFNQSV9QRE1BQ1RMX1JYUERNQUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpQRE1BQ1RMOiBSWFBETUFFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1BETUFDVExfUERNQVJTVF9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpQRE1BQ1RMOiBQRE1BUlNUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNQSV9QRE1BQ1RMX1BETUFSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBTUElfUERNQUNUTF9QRE1BUlNUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6UERNQUNUTDogUERNQVJTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1JYUlNUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogUlhSU1QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfRklGT0NUTF9SWFJTVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0ZJRk9DVExfUlhSU1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFJYUlNUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfRklGT0NUTF9UWFJTVF9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFRYUlNUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0ZJRk9DVExfVFhSU1RfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9GSUZPQ1RMX1RYUlNUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBUWFJTVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0ZJRk9DVExfUlhUSElFTl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBSWFRISUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1JYVEhJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBTUElfRklGT0NUTF9SWFRISUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogUlhUSElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1RYVEhJRU5fUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogVFhUSElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTUElfRklGT0NUTF9UWFRISUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgU1BJX0ZJRk9DVExfVFhUSElFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFRYVEhJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfRklGT0NUTF9SWFRPSUVOX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFJYVE9JRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1BJX0ZJRk9DVExfUlhUT0lFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNQSV9GSUZPQ1RMX1JYVE9JRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBSWFRPSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0ZJRk9DVExfUlhPVklFTl9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBSWE9WSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1JYT1ZJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBTUElfRklGT0NUTF9SWE9WSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogUlhPVklFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1RYVUZQT0xfUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogVFhVRlBPTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTUElfRklGT0NUTF9UWFVGUE9MX01zayAgICAgICAgICAoMHgxdWwgPDwgU1BJX0ZJRk9DVExfVFhVRlBPTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFRYVUZQT0wgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfRklGT0NUTF9UWFVGSUVOX1BvcyAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFRYVUZJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1BJX0ZJRk9DVExfVFhVRklFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNQSV9GSUZPQ1RMX1RYVUZJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBUWFVGSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0ZJRk9DVExfUlhGQkNMUl9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBSWEZCQ0xSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1JYRkJDTFJfTXNrICAgICAgICAgICgweDF1bCA8PCBTUElfRklGT0NUTF9SWEZCQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogUlhGQkNMUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1RYRkJDTFJfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogVFhGQkNMUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTUElfRklGT0NUTF9UWEZCQ0xSX01zayAgICAgICAgICAoMHgxdWwgPDwgU1BJX0ZJRk9DVExfVFhGQkNMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFRYRkJDTFIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfRklGT0NUTF9SWFRIX1BvcyAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFJYVEggUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0ZJRk9DVExfUlhUSF9Nc2sgICAgICAgICAgICAgKDB4N3VsIDw8IFNQSV9GSUZPQ1RMX1JYVEhfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBSWFRIIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0ZJRk9DVExfVFhUSF9Qb3MgICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBUWFRIIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1RYVEhfTXNrICAgICAgICAgICAgICgweDd1bCA8PCBTUElfRklGT0NUTF9UWFRIX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogVFhUSCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfQlVTWV9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBCVVNZIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX0JVU1lfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NUQVRVU19CVVNZX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogQlVTWSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1VOSVRJRl9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogVU5JVElGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19VTklUSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TVEFUVVNfVU5JVElGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFVOSVRJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19TU0FDVElGX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFNTQUNUSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfU1NBQ1RJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTUElfU1RBVFVTX1NTQUNUSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBTU0FDVElGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfU1NJTkFJRl9Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBTU0lOQUlGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1NTSU5BSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NUQVRVU19TU0lOQUlGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogU1NJTkFJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1NTTElORV9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogU1NMSU5FIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19TU0xJTkVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TVEFUVVNfU1NMSU5FX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFNTTElORSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19TTFZCRUlGX1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFNMVkJFSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfU0xWQkVJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTUElfU1RBVFVTX1NMVkJFSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBTTFZCRUlGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfU0xWVVJJRl9Qb3MgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBTTFZVUklGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1NMVlVSSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NUQVRVU19TTFZVUklGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogU0xWVVJJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1JYRU1QVFlfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogUlhFTVBUWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19SWEVNUFRZX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TVEFUVVNfUlhFTVBUWV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFJYRU1QVFkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19SWEZVTExfUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFJYRlVMTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfUlhGVUxMX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfU1RBVFVTX1JYRlVMTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBSWEZVTEwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfUlhUSElGX1BvcyAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBSWFRISUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1JYVEhJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NUQVRVU19SWFRISUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogUlhUSElGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1JYT1ZJRl9Qb3MgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogUlhPVklGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19SWE9WSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TVEFUVVNfUlhPVklGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFJYT1ZJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19SWFRPSUZfUG9zICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFJYVE9JRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfUlhUT0lGX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfU1RBVFVTX1JYVE9JRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBSWFRPSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfU1BJRU5TVFNfUG9zICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBTUElFTlNUUyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1NQSUVOU1RTX01zayAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NUQVRVU19TUElFTlNUU19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogU1BJRU5TVFMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1RYRU1QVFlfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogVFhFTVBUWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19UWEVNUFRZX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TVEFUVVNfVFhFTVBUWV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFRYRU1QVFkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19UWEZVTExfUG9zICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFRYRlVMTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfVFhGVUxMX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfU1RBVFVTX1RYRlVMTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBUWEZVTEwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfVFhUSElGX1BvcyAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBUWFRISUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1RYVEhJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NUQVRVU19UWFRISUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogVFhUSElGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1RYVUZJRl9Qb3MgICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogVFhVRklGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19UWFVGSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TVEFUVVNfVFhVRklGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFRYVUZJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19UWFJYUlNUX1BvcyAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFRYUlhSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfVFhSWFJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTUElfU1RBVFVTX1RYUlhSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBUWFJYUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfUlhDTlRfUG9zICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBSWENOVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1JYQ05UX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgU1BJX1NUQVRVU19SWENOVF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogUlhDTlQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1RYQ05UX1BvcyAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogVFhDTlQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19UWENOVF9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IFNQSV9TVEFUVVNfVFhDTlRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFRYQ05UIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1RYX1RYX1BvcyAgICAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpUWDogVFggUG9zaXRpb24gICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9UWF9UWF9Nc2sgICAgICAgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU1BJX1RYX1RYX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6VFg6IFRYIE1hc2sgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9SWF9SWF9Qb3MgICAgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Ulg6IFJYIFBvc2l0aW9uICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUElfUlhfUlhfTXNrICAgICAgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNQSV9SWF9SWF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlJYOiBSWCBNYXNrICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTQ1RMX0kyU0VOX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogSTJTRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU0NUTF9JMlNFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNDVExfSTJTRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IEkyU0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU0NUTF9UWEVOX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IFRYRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNDVExfVFhFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTQ1RMX1RYRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBUWEVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNDVExfUlhFTl9Qb3MgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBSWEVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTUElfSTJTQ1RMX1JYRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU0NUTF9SWEVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogUlhFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTQ1RMX01VVEVfUG9zICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogTVVURSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU0NUTF9NVVRFX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNDVExfTVVURV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IE1VVEUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU0NUTF9XRFdJRFRIX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IFdEV0lEVEggUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNDVExfV0RXSURUSF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBTUElfSTJTQ1RMX1dEV0lEVEhfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBXRFdJRFRIIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNDVExfTU9OT19Qb3MgICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBNT05PIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTUElfSTJTQ1RMX01PTk9fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU0NUTF9NT05PX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogTU9OTyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTQ1RMX09SREVSX1BvcyAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogT1JERVIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU0NUTF9PUkRFUl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNDVExfT1JERVJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IE9SREVSIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU0NUTF9TTEFWRV9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IFNMQVZFIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNDVExfU0xBVkVfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTQ1RMX1NMQVZFX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBTTEFWRSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNDVExfTUNMS0VOX1BvcyAgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBNQ0xLRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfSTJTQ1RMX01DTEtFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU0NUTF9NQ0xLRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogTUNMS0VOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTQ1RMX1JaQ0VOX1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogUlpDRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU0NUTF9SWkNFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNDVExfUlpDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IFJaQ0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU0NUTF9MWkNFTl9Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IExaQ0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNDVExfTFpDRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTQ1RMX0xaQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBMWkNFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNDVExfUlhMQ0hfUG9zICAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBSWExDSCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTUElfSTJTQ1RMX1JYTENIX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU0NUTF9SWExDSF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogUlhMQ0ggTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTQ1RMX1JaQ0lFTl9Qb3MgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogUlpDSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU0NUTF9SWkNJRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNDVExfUlpDSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IFJaQ0lFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU0NUTF9MWkNJRU5fUG9zICAgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IExaQ0lFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNDVExfTFpDSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTQ1RMX0xaQ0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBMWkNJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNDVExfRk9STUFUX1BvcyAgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBGT1JNQVQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfSTJTQ1RMX0ZPUk1BVF9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgU1BJX0kyU0NUTF9GT1JNQVRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogRk9STUFUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTQ0xLX01DTEtESVZfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NMSzogTUNMS0RJViBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU0NMS19NQ0xLRElWX01zayAgICAgICAgICAgKDB4N2Z1bCA8PCBTUElfSTJTQ0xLX01DTEtESVZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDTEs6IE1DTEtESVYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU0NMS19CQ0xLRElWX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDTEs6IEJDTEtESVYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNDTEtfQkNMS0RJVl9Nc2sgICAgICAgICAgICgweDNmZnVsIDw8IFNQSV9JMlNDTEtfQkNMS0RJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ0xLOiBCQ0xLRElWIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNTVFNfUklHSFRfUG9zICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBSSUdIVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTUElfSTJTU1RTX1JJR0hUX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU1NUU19SSUdIVF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogUklHSFQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTU1RTX1JYRU1QVFlfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogUlhFTVBUWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU1NUU19SWEVNUFRZX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNTVFNfUlhFTVBUWV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFJYRU1QVFkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU1NUU19SWEZVTExfUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFJYRlVMTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNTVFNfUlhGVUxMX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTU1RTX1JYRlVMTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBSWEZVTEwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNTVFNfUlhUSElGX1BvcyAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBSWFRISUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfSTJTU1RTX1JYVEhJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU1NUU19SWFRISUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogUlhUSElGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTU1RTX1JYT1ZJRl9Qb3MgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogUlhPVklGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU1NUU19SWE9WSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNTVFNfUlhPVklGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFJYT1ZJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU1NUU19SWFRPSUZfUG9zICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFJYVE9JRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNTVFNfUlhUT0lGX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTU1RTX1JYVE9JRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBSWFRPSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNTVFNfSTJTRU5TVFNfUG9zICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBJMlNFTlNUUyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTUElfSTJTU1RTX0kyU0VOU1RTX01zayAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU1NUU19JMlNFTlNUU19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogSTJTRU5TVFMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTU1RTX1RYRU1QVFlfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogVFhFTVBUWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU1NUU19UWEVNUFRZX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNTVFNfVFhFTVBUWV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFRYRU1QVFkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU1NUU19UWEZVTExfUG9zICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFRYRlVMTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNTVFNfVFhGVUxMX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTU1RTX1RYRlVMTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBUWEZVTEwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNTVFNfVFhUSElGX1BvcyAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBUWFRISUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfSTJTU1RTX1RYVEhJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU1NUU19UWFRISUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogVFhUSElGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTU1RTX1RYVUZJRl9Qb3MgICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogVFhVRklGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU1NUU19UWFVGSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNTVFNfVFhVRklGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFRYVUZJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU1NUU19SWkNJRl9Qb3MgICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFJaQ0lGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNTVFNfUlpDSUZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTU1RTX1JaQ0lGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBSWkNJRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNTVFNfTFpDSUZfUG9zICAgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBMWkNJRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTUElfSTJTU1RTX0xaQ0lGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU1NUU19MWkNJRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogTFpDSUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTU1RTX1RYUlhSU1RfUG9zICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogVFhSWFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU1NUU19UWFJYUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNTVFNfVFhSWFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFRYUlhSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU1NUU19SWENOVF9Qb3MgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFJYQ05UIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNTVFNfUlhDTlRfTXNrICAgICAgICAgICAgICgweDd1bCA8PCBTUElfSTJTU1RTX1JYQ05UX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBSWENOVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNTVFNfVFhDTlRfUG9zICAgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBUWENOVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTUElfSTJTU1RTX1RYQ05UX01zayAgICAgICAgICAgICAoMHg3dWwgPDwgU1BJX0kyU1NUU19UWENOVF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogVFhDTlQgTWFzayAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBTUElfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFNQSSByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisjZW5kaWYgLyogX19TUElfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3N5c19yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zeXNfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY4Y2Y5MQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zeXNfcmVnLmgKQEAgLTAsMCArMSwyMzY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc3lzX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBTWVMgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fU1lTX1JFR19IX18KKyNkZWZpbmUgX19TWVNfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTeXN0ZW0gTWFuZ2VyIENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBTWVMgU3lzdGVtIE1hbmdlciBDb250cm9sbGVyKFNZUykKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgU1lTIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgU1lTX1Q6OlBESUQKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIFBhcnQgRGV2aWNlIElkZW50aWZpY2F0aW9uIE51bWJlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFBESUQgICAgICB8UGFydCBEZXZpY2UgSWRlbnRpZmljYXRpb24gTnVtYmVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyByZWdpc3RlciByZWZsZWN0cyBkZXZpY2UgcGFydCBudW1iZXIgY29kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gcmVhZCB0aGlzIHJlZ2lzdGVyIHRvIGlkZW50aWZ5IHdoaWNoIGRldmljZSBpcyB1c2VkLgorICAgICAqIEB2YXIgU1lTX1Q6OlJTVFNUUworICAgICAqIE9mZnNldDogMHgwNCAgU3lzdGVtIFJlc2V0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFBPUkYgICAgICB8UE9SIFJlc2V0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUE9SIHJlc2V0IGZsYWcgaXMgc2V0IGJ5IHRoZSAiUmVzZXQgU2lnbmFsIiBmcm9tIHRoZSBQb3dlci1vbiBSZXNldCAoUE9SKSBDb250cm9sbGVyIG9yIGJpdCBDSElQUlNUIChTWVNfSVBSU1QwWzBdKSB0byBpbmRpY2F0ZSB0aGUgcHJldmlvdXMgcmVzZXQgc291cmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyByZXNldCBmcm9tIFBPUiBvciBDSElQUlNULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQb3dlci1vbiBSZXNldCAoUE9SKSBvciBDSElQUlNUIGhhZCBpc3N1ZWQgdGhlIHJlc2V0IHNpZ25hbCB0byByZXNldCB0aGUgc3lzdGVtLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8WzFdICAgICB8UElOUkYgICAgIHxuUkVTRVQgUGluIFJlc2V0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgblJFU0VUIHBpbiByZXNldCBmbGFnIGlzIHNldCBieSB0aGUgIlJlc2V0IFNpZ25hbCIgZnJvbSB0aGUgblJFU0VUIFBpbiB0byBpbmRpY2F0ZSB0aGUgcHJldmlvdXMgcmVzZXQgc291cmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyByZXNldCBmcm9tIG5SRVNFVCBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBpbiBuUkVTRVQgaGFkIGlzc3VlZCB0aGUgcmVzZXQgc2lnbmFsIHRvIHJlc2V0IHRoZSBzeXN0ZW0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHxbMl0gICAgIHxXRFRSRiAgICAgfFdEVCBSZXNldCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFdEVCByZXNldCBmbGFnIGlzIHNldCBieSB0aGUgIlJlc2V0IFNpZ25hbCIgZnJvbSB0aGUgV2F0Y2hkb2cgVGltZXIgb3IgV2luZG93IFdhdGNoZG9nIFRpbWVyIHRvIGluZGljYXRlIHRoZSBwcmV2aW91cyByZXNldCBzb3VyY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHJlc2V0IGZyb20gd2F0Y2hkb2cgdGltZXIgb3Igd2luZG93IHdhdGNoZG9nIHRpbWVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgd2F0Y2hkb2cgdGltZXIgb3Igd2luZG93IHdhdGNoZG9nIHRpbWVyIGhhZCBpc3N1ZWQgdGhlIHJlc2V0IHNpZ25hbCB0byByZXNldCB0aGUgc3lzdGVtLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFdhdGNoZG9nIFRpbWVyIHJlZ2lzdGVyIFJTVEYoV0RUX0NUTFsyXSkgYml0IGlzIHNldCBpZiB0aGUgc3lzdGVtIGhhcyBiZWVuIHJlc2V0IGJ5IFdEVCB0aW1lLW91dCByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaW5kb3cgV2F0Y2hkb2cgVGltZXIgcmVnaXN0ZXIgV1dEVFJGKFdXRFRfU1RBVFVTWzFdKSBiaXQgaXMgc2V0IGlmIHRoZSBzeXN0ZW0gaGFzIGJlZW4gcmVzZXQgYnkgV1dEVCB0aW1lLW91dCByZXNldC4KKyAgICAgKiB8WzNdICAgICB8TFZSRiAgICAgIHxMVlIgUmVzZXQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBMVlIgcmVzZXQgZmxhZyBpcyBzZXQgYnkgdGhlICJSZXNldCBTaWduYWwiIGZyb20gdGhlIExvdyBWb2x0YWdlIFJlc2V0IENvbnRyb2xsZXIgdG8gaW5kaWNhdGUgdGhlIHByZXZpb3VzIHJlc2V0IHNvdXJjZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcmVzZXQgZnJvbSBMVlIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExWUiBjb250cm9sbGVyIGhhZCBpc3N1ZWQgdGhlIHJlc2V0IHNpZ25hbCB0byByZXNldCB0aGUgc3lzdGVtLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8WzRdICAgICB8Qk9EUkYgICAgIHxCT0QgUmVzZXQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBCT0QgcmVzZXQgZmxhZyBpcyBzZXQgYnkgdGhlICJSZXNldCBTaWduYWwiIGZyb20gdGhlIEJyb3duLW91dCBEZXRlY3RvciB0byBpbmRpY2F0ZSB0aGUgcHJldmlvdXMgcmVzZXQgc291cmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyByZXNldCBmcm9tIEJPRC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIEJPRCBoYWQgaXNzdWVkIHRoZSByZXNldCBzaWduYWwgdG8gcmVzZXQgdGhlIHN5c3RlbS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfFs1XSAgICAgfFNZU1JGICAgICB8U3lzdGVtIFJlc2V0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3lzdGVtIHJlc2V0IGZsYWcgaXMgc2V0IGJ5IHRoZSAiUmVzZXQgU2lnbmFsIiBmcm9tIHRoZSBDb3J0ZXgtTTIzIENvcmUgdG8gaW5kaWNhdGUgdGhlIHByZXZpb3VzIHJlc2V0IHNvdXJjZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcmVzZXQgZnJvbSBDb3J0ZXgtTTIzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgQ29ydGV4LU0yMyBoYWQgaXNzdWVkIHRoZSByZXNldCBzaWduYWwgdG8gcmVzZXQgdGhlIHN5c3RlbSBieSB3cml0aW5nIDEgdG8gdGhlIGJpdCBTWVNSRVNFVFJFUShBSVJDUlsyXSwgQXBwbGljYXRpb24gSW50ZXJydXB0IGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyLCBhZGRyZXNzID0gMHhFMDAwRUQwQykgaW4gc3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXJzIG9mIENvcnRleC1NMjMgY29yZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfFs3XSAgICAgfENQVVJGICAgICB8Q1BVIFJlc2V0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1BVIHJlc2V0IGZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIGlmIHNvZnR3YXJlIHdyaXRlcyBDUFVSU1QgKFNZU19JUFJTVDBbMV0pIDEgdG8gcmVzZXQgQ29ydGV4LU0yMyBDb3JlIGFuZCBGbGFzaCBNZW1vcnkgQ29udHJvbGxlciAoRk1DKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcmVzZXQgZnJvbSBDUFUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBDb3J0ZXgtTTIzIENvcmUgYW5kIEZNQyBhcmUgcmVzZXQgYnkgc29mdHdhcmUgc2V0dGluZyBDUFVSU1QgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfFs4XSAgICAgfENQVUxLUkYgICB8Q1BVIExvY2t1cCBSZXNldCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENQVUxLIHJlc2V0IGZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIGlmIENvcnRleC1NMjMgbG9ja3VwIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyByZXNldCBmcm9tIENQVSBsb2NrdXAgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBDb3J0ZXgtTTIzIGxvY2t1cCBoYXBwZW5lZCBhbmQgY2hpcCBpcyByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBXaGVuIENQVSBsb2NrdXAgaGFwcGVuZWQgdW5kZXIgSUNFIGlzIGNvbm5lY3RlZCwgVGhpcyBmbGFnIHdpbGwgc2V0IHRvIDEgYnV0IGNoaXAgd2lsbCBub3QgcmVzZXQuCisgICAgICogQHZhciBTWVNfVDo6SVBSU1QwCisgICAgICogT2Zmc2V0OiAweDA4ICBQZXJpcGhlcmFsIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENISVBSU1QgICB8Q2hpcCBPbmUtc2hvdCBSZXNldCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXR0aW5nIHRoaXMgYml0IHdpbGwgcmVzZXQgdGhlIHdob2xlIGNoaXAsIGluY2x1ZGluZyBQcm9jZXNzb3IgY29yZSBhbmQgYWxsIHBlcmlwaGVyYWxzLCBhbmQgdGhpcyBiaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHJldHVybiB0byAwIGFmdGVyIHRoZSAyIGNsb2NrIGN5Y2xlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ0hJUFJTVCBpcyBzYW1lIGFzIHRoZSBQT1IgcmVzZXQsIGFsbCB0aGUgY2hpcCBjb250cm9sbGVycyBpcyByZXNldCBhbmQgdGhlIGNoaXAgc2V0dGluZyBmcm9tIGZsYXNoIGFyZSBhbHNvIHJlbG9hZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hpcCBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGlwIG9uZS1zaG90IHJlc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMV0gICAgIHxDUFVSU1QgICAgfFByb2Nlc3NvciBDb3JlIE9uZS1zaG90IFJlc2V0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldHRpbmcgdGhpcyBiaXQgd2lsbCBvbmx5IHJlc2V0IHRoZSBwcm9jZXNzb3IgY29yZSBhbmQgRmxhc2ggTWVtb3J5IENvbnRyb2xsZXIoRk1DKSwgYW5kIHRoaXMgYml0IHdpbGwgYXV0b21hdGljYWxseSByZXR1cm4gdG8gMCBhZnRlciB0aGUgMiBjbG9jayBjeWNsZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFByb2Nlc3NvciBjb3JlIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFByb2Nlc3NvciBjb3JlIG9uZS1zaG90IHJlc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMl0gICAgIHxQRE1BMFJTVCAgfFBETUEwIENvbnRyb2xsZXIgUmVzZXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0dGluZyB0aGlzIGJpdCB0byAxIHdpbGwgZ2VuZXJhdGUgYSByZXNldCBzaWduYWwgdG8gdGhlIFBETUEwIChhbHdheXMgc2VjdXJlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIG5lZWRzIHRvIHNldCB0aGlzIGJpdCB0byAwIHRvIHJlbGVhc2UgZnJvbSByZXNldCBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQTAgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbM10gICAgIHxFQklSU1QgICAgfEVCSSBDb250cm9sbGVyIFJlc2V0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCB0byAxIHdpbGwgZ2VuZXJhdGUgYSByZXNldCBzaWduYWwgdG8gdGhlIEVCSQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgbmVlZHMgdG8gc2V0IHRoaXMgYml0IHRvIDAgdG8gcmVsZWFzZSBmcm9tIHRoZSByZXNldCBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUJJIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUJJIGNvbnRyb2xsZXIgcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs0XSAgICAgfFVTQkhSU1QgICB8VVNCIEhvc3QgQ29udHJvbGxlciBSZXNldCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgdG8gMSB3aWxsIGdlbmVyYXRlIGEgcmVzZXQgc2lnbmFsIHRvIHRoZSBVU0IgSG9zdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIG5lZWRzIHRvIHNldCB0aGlzIGJpdCB0byAwIHRvIHJlbGVhc2UgZnJvbSB0aGUgcmVzZXQgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVTQiBIb3N0IGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIEhvc3QgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzZdICAgICB8U0RIMFJTVCAgIHxTREhPU1QwIENvbnRyb2xsZXIgUmVzZXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0dGluZyB0aGlzIGJpdCB0byAxIHdpbGwgZ2VuZXJhdGUgYSByZXNldCBzaWduYWwgdG8gdGhlIFNESE9TVDAgY29udHJvbGxlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgbmVlZHMgdG8gc2V0IHRoaXMgYml0IHRvIDAgdG8gcmVsZWFzZSBmcm9tIHRoZSByZXNldCBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0RIT1NUMCBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNESE9TVDAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzddICAgICB8Q1JDUlNUICAgIHxDUkMgQ2FsY3VsYXRpb24gQ29udHJvbGxlciBSZXNldCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgdG8gMSB3aWxsIGdlbmVyYXRlIGEgcmVzZXQgc2lnbmFsIHRvIHRoZSBDUkMgY2FsY3VsYXRpb24gY29udHJvbGxlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgbmVlZHMgdG8gc2V0IHRoaXMgYml0IHRvIDAgdG8gcmVsZWFzZSBmcm9tIHRoZSByZXNldCBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ1JDIGNhbGN1bGF0aW9uIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ1JDIGNhbGN1bGF0aW9uIGNvbnRyb2xsZXIgcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxMl0gICAgfENSUFRSU1QgICB8Q1JZUFRPIENvbnRyb2xsZXIgUmVzZXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0dGluZyB0aGlzIGJpdCB0byAxIHdpbGwgZ2VuZXJhdGUgYSByZXNldCBzaWduYWwgdG8gdGhlIENSWVBUTyBjb250cm9sbGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgbmVlZHMgdG8gc2V0IHRoaXMgYml0IHRvIDAgdG8gcmVsZWFzZSBmcm9tIHRoZSByZXNldCBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ1JZUFRPIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ1JZUFRPIGNvbnRyb2xsZXIgcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsyOV0gICAgfFBETUExUlNUICB8UERNQTEgQ29udHJvbGxlciBSZXNldCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXR0aW5nIHRoaXMgYml0IHRvIDEgd2lsbCBnZW5lcmF0ZSBhIHJlc2V0IHNpZ25hbCB0byB0aGUgUERNQTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBuZWVkcyB0byBzZXQgdGhpcyBiaXQgdG8gMCB0byByZWxlYXNlIGZyb20gcmVzZXQgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBETUExIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUERNQTEgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFNZU19UOjpJUFJTVDEKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIFBlcmlwaGVyYWwgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzFdICAgICB8R1BJT1JTVCAgIHxHUElPIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BJTyBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQSU8gY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzJdICAgICB8VE1SMFJTVCAgIHxUaW1lcjAgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lcjAgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lcjAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzNdICAgICB8VE1SMVJTVCAgIHxUaW1lcjEgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lcjEgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lcjEgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzRdICAgICB8VE1SMlJTVCAgIHxUaW1lcjIgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lcjIgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lcjIgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzVdICAgICB8VE1SM1JTVCAgIHxUaW1lcjMgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lcjMgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lcjMgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzddICAgICB8QUNNUDAxUlNUIHxBbmFsb2cgQ29tcGFyYXRvciAwLzEgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBbmFsb2cgQ29tcGFyYXRvciAwLzEgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBbmFsb2cgQ29tcGFyYXRvciAwLzEgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzhdICAgICB8STJDMFJTVCAgIHxJMkMwIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJDMCBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyQzAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzldICAgICB8STJDMVJTVCAgIHxJMkMxIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJDMSBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyQzEgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzEwXSAgICB8STJDMlJTVCAgIHxJMkMyIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJDMiBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyQzIgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzEyXSAgICB8UVNQSTBSU1QgIHxRU1BJMCBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFTUEkwIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUVNQSTAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzEzXSAgICB8U1BJMFJTVCAgIHxTUEkwIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJMCBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSTAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzE0XSAgICB8U1BJMVJTVCAgIHxTUEkxIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJMSBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSTEgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzE1XSAgICB8U1BJMlJTVCAgIHxTUEkyIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJMiBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSTIgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzE2XSAgICB8VUFSVDBSU1QgIHxVQVJUMCBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQwIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzE3XSAgICB8VUFSVDFSU1QgIHxVQVJUMSBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQxIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDEgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzE4XSAgICB8VUFSVDJSU1QgIHxVQVJUMiBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQyIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDIgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzE5XSAgICB8VUFSVDNSU1QgIHxVQVJUMyBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQzIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDMgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzIwXSAgICB8VUFSVDRSU1QgIHxVQVJUNCBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQ0IGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDQgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzIxXSAgICB8VUFSVDVSU1QgIHxVQVJUNSBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQ1IGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDUgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzI0XSAgICB8Q0FOMFJTVCAgIHxDQU4wIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ0FOMCBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENBTjAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzI2XSAgICB8T1RHUlNUICAgIHxPVEcgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPVEcgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPVEcgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzI3XSAgICB8VVNCRFJTVCAgIHxVU0JEIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVVNCRCBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQkQgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzI4XSAgICB8RUFEQ1JTVCAgIHxFQURDIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUFEQyBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVBREMgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzI5XSAgICB8STJTMFJTVCAgIHxJMlMwIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJTMCBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyUzAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzMxXSAgICB8VFJOR1JTVCAgIHxUUk5HIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVFJORyBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRSTkcgY29udHJvbGxlciByZXNldC4KKyAgICAgKiBAdmFyIFNZU19UOjpJUFJTVDIKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIFBlcmlwaGVyYWwgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U0MwUlNUICAgIHxTQzAgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQzAgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQzAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzFdICAgICB8U0MxUlNUICAgIHxTQzEgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQzEgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQzEgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzJdICAgICB8U0MyUlNUICAgIHxTQzIgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQzIgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQzIgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzZdICAgICB8U1BJM1JTVCAgIHxTUEkzIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJMyBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSTMgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzhdICAgICB8VVNDSTBSU1QgIHxVU0NJMCBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVTQ0kwIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNDSTAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzldICAgICB8VVNDSTFSU1QgIHxVU0NJMSBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVTQ0kxIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNDSTEgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzEyXSAgICB8REFDUlNUICAgIHxEQUMgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEQUMgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEQUMgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzE2XSAgICB8RVBXTTBSU1QgIHxFUFdNMCBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00wIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTTAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzE3XSAgICB8RVBXTTFSU1QgIHxFUFdNMSBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00xIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTTEgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzE4XSAgICB8QlBXTTBSU1QgIHxCUFdNMCBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00wIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTTAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzE5XSAgICB8QlBXTTFSU1QgIHxCUFdNMSBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00xIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTTEgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzIyXSAgICB8UUVJMFJTVCAgIHxRRUkwIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUUVJMCBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFFSTAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzIzXSAgICB8UUVJMVJTVCAgIHxRRUkxIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUUVJMSBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFFSTEgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzI2XSAgICB8RUNBUDBSU1QgIHxFQ0FQMCBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVDQVAwIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUNBUDAgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8WzI3XSAgICB8RUNBUDFSU1QgIHxFQ0FQMSBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVDQVAxIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUNBUDEgY29udHJvbGxlciByZXNldC4KKyAgICAgKiBAdmFyIFNZU19UOjpCT0RDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MTggIEJyb3duLW91dCBEZXRlY3RvciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Qk9ERU4gICAgIHxCcm93bi1vdXQgRGV0ZWN0b3IgRW5hYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgYnkgZmxhc2ggY29udHJvbGxlciB1c2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgQ0JPREVOIChDT05GSUcwIFsyM10pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCcm93bi1vdXQgRGV0ZWN0b3IgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJyb3duLW91dCBEZXRlY3RvciBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbM10gICAgIHxCT0RSU1RFTiAgfEJyb3duLW91dCBSZXNldCBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZWZhdWx0IHZhbHVlIGlzIHNldCBieSBmbGFzaCBjb250cm9sbGVyIHVzZXIgY29uZmlndXJhdGlvbiByZWdpc3RlciBDQk9SU1QoQ09ORklHMFsyMF0pIGJpdCAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyb3duLW91dCBJTlRFUlJVUFQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJvd24tb3V0IFJFU0VUIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hpbGUgdGhlIEJyb3duLW91dCBEZXRlY3RvciBmdW5jdGlvbiBpcyBlbmFibGVkIChCT0RFTiBoaWdoKSBhbmQgQk9EIHJlc2V0IGZ1bmN0aW9uIGlzIGVuYWJsZWQgKEJPRFJTVEVOIGhpZ2gpLCBCT0Qgd2lsbCBhc3NlcnQgYSBzaWduYWwgdG8gcmVzZXQgY2hpcCB3aGVuIHRoZSBkZXRlY3RlZCB2b2x0YWdlIGlzIGxvd2VyIHRoYW4gdGhlIHRocmVzaG9sZCAoQk9ET1VUIGhpZ2gpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoaWxlIHRoZSBCT0QgZnVuY3Rpb24gaXMgZW5hYmxlZCAoQk9ERU4gaGlnaCkgYW5kIEJPRCBpbnRlcnJ1cHQgZnVuY3Rpb24gaXMgZW5hYmxlZCAoQk9EUlNURU4gbG93KSwgQk9EIHdpbGwgYXNzZXJ0IGFuIGludGVycnVwdCBpZiBBVkREIGhpZ2gudGhhbiBCT0RWTCwgQk9EIGludGVycnVwdCB3aWxsIGtlZXAgdGlsbCB0byB0aGUgQk9ESUYgc2V0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Qk9EIGludGVycnVwdCBjYW4gYmUgYmxvY2tlZCBieSBkaXNhYmxpbmcgdGhlIE5WSUMgQk9EIGludGVycnVwdCBvciBkaXNhYmxpbmcgQk9EIGZ1bmN0aW9uIChzZXQgQk9ERU4gbG93KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs0XSAgICAgfEJPRElGICAgICB8QnJvd24tb3V0IERldGVjdG9yIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyb3duLW91dCBEZXRlY3RvciBkb2VzIG5vdCBkZXRlY3QgYW55IHZvbHRhZ2UgZHJhZnQgYXQgVkREIGRvd24gdGhyb3VnaCBvciB1cCB0aHJvdWdoIHRoZSB2b2x0YWdlIG9mIEJPRFZMIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gQnJvd24tb3V0IERldGVjdG9yIGRldGVjdHMgdGhlIFZERCBpcyBkcm9wcGVkIGRvd24gdGhyb3VnaCB0aGUgdm9sdGFnZSBvZiBCT0RWTCBzZXR0aW5nIG9yIHRoZSBWREQgaXMgcmFpc2VkIHVwIHRocm91Z2ggdGhlIHZvbHRhZ2Ugb2YgQk9EVkwgc2V0dGluZywgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIHRoZSBicm93bi1vdXQgaW50ZXJydXB0IGlzIHJlcXVlc3RlZCBpZiBicm93bi1vdXQgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHxbNV0gICAgIHxCT0RMUE0gICAgfEJyb3duLW91dCBEZXRlY3RvciBMb3cgUG93ZXIgTW9kZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQk9EIG9wZXJhdGUgaW4gbm9ybWFsIG1vZGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCT0QgTG93IFBvd2VyIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhlIEJPRCBjb25zdW1lcyBhYm91dCAxMDB1QSBpbiBub3JtYWwgbW9kZSwgdGhlIGxvdyBwb3dlciBtb2RlIGNhbiByZWR1Y2UgdGhlIGN1cnJlbnQgdG8gYWJvdXQgMS8xMCBidXQgc2xvdyB0aGUgQk9EIHJlc3BvbnNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzZdICAgICB8Qk9ET1VUICAgIHxCcm93bi1vdXQgRGV0ZWN0b3IgT3V0cHV0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCcm93bi1vdXQgRGV0ZWN0b3Igb3V0cHV0IHN0YXR1cyBpcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IG1lYW5zIHRoZSBkZXRlY3RlZCB2b2x0YWdlIGlzIGhpZ2hlciB0aGFuIEJPRFZMIHNldHRpbmcgb3IgQk9ERU4gaXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJvd24tb3V0IERldGVjdG9yIG91dHB1dCBzdGF0dXMgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBtZWFucyB0aGUgZGV0ZWN0ZWQgdm9sdGFnZSBpcyBsb3dlciB0aGFuIEJPRFZMIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIEJPREVOIGlzIDAsIEJPRCBmdW5jdGlvbiBkaXNhYmxlZCAsIHRoaXMgYml0IGFsd2F5cyByZXNwb25kcyAwLgorICAgICAqIHxbN10gICAgIHxMVlJFTiAgICAgfExvdyBWb2x0YWdlIFJlc2V0IEVuYWJsZSBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIExWUiBmdW5jdGlvbiByZXNldHMgdGhlIGNoaXAgd2hlbiB0aGUgaW5wdXQgcG93ZXIgdm9sdGFnZSBpcyBsb3dlciB0aGFuIExWUiBjaXJjdWl0IHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TFZSIGZ1bmN0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTG93IFZvbHRhZ2UgUmVzZXQgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExvdyBWb2x0YWdlIFJlc2V0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEFmdGVyIGVuYWJsaW5nIHRoZSBiaXQsIHRoZSBMVlIgZnVuY3Rpb24gd2lsbCBiZSBhY3RpdmUgd2l0aCAyMDB1cyBkZWxheSBmb3IgTFZSIG91dHB1dCBzdGFibGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEwOjhdICB8Qk9EREdTRUwgIHxCcm93bi1vdXQgRGV0ZWN0b3IgT3V0cHV0IERlLWdsaXRjaCBUaW1lIFNlbGVjdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBCT0Qgb3V0cHV0IGlzIHNhbXBsZWQgYnkgTElSQyBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSA0IHN5c3RlbSBjbG9jayAoSENMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gOCBzeXN0ZW0gY2xvY2sgKEhDTEspLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IDE2IHN5c3RlbSBjbG9jayAoSENMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gMzIgc3lzdGVtIGNsb2NrIChIQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSA2NCBzeXN0ZW0gY2xvY2sgKEhDTEspLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IDEyOCBzeXN0ZW0gY2xvY2sgKEhDTEspLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IDI1NiBzeXN0ZW0gY2xvY2sgKEhDTEspLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTQ6MTJdIHxMVlJER1NFTCAgfExWUiBPdXRwdXQgRGUtZ2xpdGNoIFRpbWUgU2VsZWN0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IFdpdGhvdXQgZGUtZ2xpdGNoIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IDQgc3lzdGVtIGNsb2NrIChIQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSA4IHN5c3RlbSBjbG9jayAoSENMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gMTYgc3lzdGVtIGNsb2NrIChIQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSAzMiBzeXN0ZW0gY2xvY2sgKEhDTEspLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IDY0IHN5c3RlbSBjbG9jayAoSENMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gMTI4IHN5c3RlbSBjbG9jayAoSENMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gMjU2IHN5c3RlbSBjbG9jayAoSENMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxODoxNl0gfEJPRFZMICAgICB8QnJvd24tb3V0IERldGVjdG9yIFRocmVzaG9sZCBWb2x0YWdlIFNlbGVjdGlvbiAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgYnkgZmxhc2ggY29udHJvbGxlciB1c2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgQ0JPViAoQ09ORklHMCBbMjM6MjFdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBCcm93bi1vdXQgRGV0ZWN0b3IgdGhyZXNob2xkIHZvbHRhZ2UgaXMgMS42Vi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBCcm93bi1vdXQgRGV0ZWN0b3IgdGhyZXNob2xkIHZvbHRhZ2UgaXMgMS44Vi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBCcm93bi1vdXQgRGV0ZWN0b3IgdGhyZXNob2xkIHZvbHRhZ2UgaXMgMi4wVi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBCcm93bi1vdXQgRGV0ZWN0b3IgdGhyZXNob2xkIHZvbHRhZ2UgaXMgMi4yVi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBCcm93bi1vdXQgRGV0ZWN0b3IgdGhyZXNob2xkIHZvbHRhZ2UgaXMgMi40Vi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBCcm93bi1vdXQgRGV0ZWN0b3IgdGhyZXNob2xkIHZvbHRhZ2UgaXMgMi42Vi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSBCcm93bi1vdXQgRGV0ZWN0b3IgdGhyZXNob2xkIHZvbHRhZ2UgaXMgMi44Vi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBCcm93bi1vdXQgRGV0ZWN0b3IgdGhyZXNob2xkIHZvbHRhZ2UgaXMgMy4wVi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFNZU19UOjpJVlNDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MUMgIEludGVybmFsIFZvbHRhZ2UgU291cmNlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxWVEVNUEVOICAgfFRlbXBlcmF0dXJlIFNlbnNvciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSB0ZW1wZXJhdHVyZSBzZW5zb3IgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRlbXBlcmF0dXJlIHNlbnNvciBmdW5jdGlvbiBEaXNhYmxlZCAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRlbXBlcmF0dXJlIHNlbnNvciBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEFmdGVyIHRoaXMgYml0IGlzIHNldCB0byAxLCB0aGUgdmFsdWUgb2YgdGVtcGVyYXR1cmUgc2Vuc29yIG91dHB1dAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGNhbiBiZSBvYnRhaW5lZCB0aHJvdWdoIEdQQy45LgorICAgICAqIHxbMV0gICAgIHxWQkFUVUdFTiAgfFZCQVQgVW5pdHkgR2FpbiBCdWZmZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgVkJBVCB1bml0eSBnYWluIGJ1ZmZlciBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVkJBVCB1bml0eSBnYWluIGJ1ZmZlciBmdW5jdGlvbiBEaXNhYmxlZCAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFZCQVQgdW5pdHkgZ2FpbiBidWZmZXIgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBBZnRlciB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgdGhlIHZhbHVlIG9mIFZCQVQgdW5pdHkgZ2FpbiBidWZmZXIgb3V0cHV0IHZvbHRhZ2UgY2FuIGJlIG9idGFpbmVkIGZyb20gQURDIGNvbnZlcnNpb24gcmVzdWx0LgorICAgICAqIEB2YXIgU1lTX1Q6OlBPUkNUTDAKKyAgICAgKiBPZmZzZXQ6IDB4MjQgIFBvd2VyLW9uIFJlc2V0IENvbnRyb2xsZXIgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFBPUk1BU0sgICB8UG93ZXItb24gUmVzZXQgTWFzayBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gcG93ZXJlZCBvbiwgdGhlIFBPUiBjaXJjdWl0IGdlbmVyYXRlcyBhIHJlc2V0IHNpZ25hbCB0byByZXNldCB0aGUgd2hvbGUgY2hpcCBmdW5jdGlvbiwgYnV0IG5vaXNlIG9uIHRoZSBwb3dlciBtYXkgY2F1c2UgdGhlIFBPUiBhY3RpdmUgYWdhaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gbWFzayAgaW50ZXJuYWwgUE9SIHNpZ25hbCB0byBhdm9pZCB1bnByZWRpY3RhYmxlIG5vaXNlIHRvIGNhdXNlIGNoaXAgcmVzZXQgYnkgd3JpdGluZyAweDVBQTUgdG8gdGhpcyBmaWVsZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUE9SIGZ1bmN0aW9uIHdpbGwgYmUgYWN0aXZlIGFnYWluIHdoZW4gdGhpcyBmaWVsZCBpcyBzZXQgdG8gYW5vdGhlciB2YWx1ZSBvciBjaGlwIGlzIHJlc2V0IGJ5IG90aGVyIHJlc2V0IHNvdXJjZSwgaW5jbHVkaW5nOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfG5SRVNFVCwgV2F0Y2hkb2csIExWUiByZXNldCwgQk9EIHJlc2V0LCBJQ0UgcmVzZXQgY29tbWFuZCBhbmQgdGhlIHNvZnR3YXJlLWNoaXAgcmVzZXQgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBTWVNfVDo6VlJFRkNUTAorICAgICAqIE9mZnNldDogMHgyOCAgVlJFRiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzQ6MF0gICB8VlJFRkNUTCAgIHxWUkVGIENvbnRyb2wgQml0cyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwMCA9IFZSRUYgaXMgZnJvbSBleHRlcm5hbCBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMTEgPSBWUkVGIGlzIGludGVybmFsIDEuNlYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMTEgPSBWUkVGIGlzIGludGVybmFsIDIuMFYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMTEgPSBWUkVGIGlzIGludGVybmFsIDIuNVYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMTEgPSBWUkVGIGlzIGludGVybmFsIDMuMFYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs1XSAgICAgfElCSUFTU0VMICB8VlJFRiBCaWFzIEN1cnJlbnQgU2VsZWN0aW9uIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCaWFzIGN1cnJlbnQgZnJvbSBNRUdCSUFTLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCaWFzIGN1cnJlbnQgZnJvbSBpbnRlcm5hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8Wzc6Nl0gICB8UFJFTE9BRFNFTHxQcmUtbG9hZCBUaW1pbmcgU2VsZWN0aW9uIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gcHJlLWxvYWQgdGltZSBpcyA2MHVzIGZvciAwLjF1RiBDYXBhY2l0b3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBwcmUtbG9hZCB0aW1lIGlzIDMxMHVzIGZvciAxdUYgQ2FwYWNpdG9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gcHJlLWxvYWQgdGltZSBpcyAxMjcwdXMgZm9yIDQuN3VGIENhcGFjaXRvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IHByZS1sb2FkIHRpbWUgaXMgMjY1MHVzIGZvciAxMHVGIENhcGFjaXRvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFNZU19UOjpVU0JQSFkKKyAgICAgKiBPZmZzZXQ6IDB4MkMgIFVTQiBQSFkgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfFVTQlJPTEUgICB8VVNCIFJvbGUgT3B0aW9uIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIHR3byBiaXRzIGFyZSB1c2VkIHRvIHNlbGVjdCB0aGUgcm9sZSBvZiBVU0IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBTdGFuZGFyZCBVU0IgRGV2aWNlIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBTdGFuZGFyZCBVU0IgSG9zdCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gSUQgZGVwZW5kZW50IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBPbi1UaGUtR28gZGV2aWNlIG1vZGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMl0gICAgIHxTQk8gICAgICAgfE5vdGU6IFRoaXMgYml0IG11c3QgYWx3YXlzIGJlIGtlcHQgMS4gSWYgc2V0IHRvIDAsIHRoZSByZXN1bHQgaXMgdW5wcmVkaWN0YWJsZS4KKyAgICAgKiB8WzhdICAgICB8T1RHUEhZRU4gIHxVU0IgT1RHIFBIWSBFbmFibGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIE9URyBQSFkgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE9URyBQSFkgZnVuY3Rpb24gRGlzYWJsZWQgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPVEcgUEhZIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogQHZhciBTWVNfVDo6R1BBX01GUEwKKyAgICAgKiBPZmZzZXQ6IDB4MzAgIEdQSU9BIExvdyBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxQQTBNRlAgICAgfFBBLjAgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbNzo0XSAgIHxQQTFNRlAgICAgfFBBLjEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTE6OF0gIHxQQTJNRlAgICAgfFBBLjIgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTU6MTJdIHxQQTNNRlAgICAgfFBBLjMgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTk6MTZdIHxQQTRNRlAgICAgfFBBLjQgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjM6MjBdIHxQQTVNRlAgICAgfFBBLjUgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjc6MjRdIHxQQTZNRlAgICAgfFBBLjYgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMzE6MjhdIHxQQTdNRlAgICAgfFBBLjcgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIEB2YXIgU1lTX1Q6OkdQQV9NRlBICisgICAgICogT2Zmc2V0OiAweDM0ICBHUElPQSBIaWdoIEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFBBOE1GUCAgICB8UEEuOCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFs3OjRdICAgfFBBOU1GUCAgICB8UEEuOSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxMTo4XSAgfFBBMTBNRlAgICB8UEEuMTAgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTU6MTJdIHxQQTExTUZQICAgfFBBLjExIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzE5OjE2XSB8UEExMk1GUCAgIHxQQS4xMiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyMzoyMF0gfFBBMTNNRlAgICB8UEEuMTMgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjc6MjRdIHxQQTE0TUZQICAgfFBBLjE0IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzMxOjI4XSB8UEExNU1GUCAgIHxQQS4xNSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BCX01GUEwKKyAgICAgKiBPZmZzZXQ6IDB4MzggIEdQSU9CIExvdyBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxQQjBNRlAgICAgfFBCLjAgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbNzo0XSAgIHxQQjFNRlAgICAgfFBCLjEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTE6OF0gIHxQQjJNRlAgICAgfFBCLjIgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTU6MTJdIHxQQjNNRlAgICAgfFBCLjMgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTk6MTZdIHxQQjRNRlAgICAgfFBCLjQgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjM6MjBdIHxQQjVNRlAgICAgfFBCLjUgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjc6MjRdIHxQQjZNRlAgICAgfFBCLjYgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMzE6MjhdIHxQQjdNRlAgICAgfFBCLjcgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIEB2YXIgU1lTX1Q6OkdQQl9NRlBICisgICAgICogT2Zmc2V0OiAweDNDICBHUElPQiBIaWdoIEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFBCOE1GUCAgICB8UEIuOCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFs3OjRdICAgfFBCOU1GUCAgICB8UEIuOSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxMTo4XSAgfFBCMTBNRlAgICB8UEIuMTAgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTU6MTJdIHxQQjExTUZQICAgfFBCLjExIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzE5OjE2XSB8UEIxMk1GUCAgIHxQQi4xMiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyMzoyMF0gfFBCMTNNRlAgICB8UEIuMTMgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjc6MjRdIHxQQjE0TUZQICAgfFBCLjE0IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzMxOjI4XSB8UEIxNU1GUCAgIHxQQi4xNSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BDX01GUEwKKyAgICAgKiBPZmZzZXQ6IDB4NDAgIEdQSU9DIExvdyBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxQQzBNRlAgICAgfFBDLjAgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbNzo0XSAgIHxQQzFNRlAgICAgfFBDLjEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTE6OF0gIHxQQzJNRlAgICAgfFBDLjIgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTU6MTJdIHxQQzNNRlAgICAgfFBDLjMgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTk6MTZdIHxQQzRNRlAgICAgfFBDLjQgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjM6MjBdIHxQQzVNRlAgICAgfFBDLjUgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjc6MjRdIHxQQzZNRlAgICAgfFBDLjYgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMzE6MjhdIHxQQzdNRlAgICAgfFBDLjcgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIEB2YXIgU1lTX1Q6OkdQQ19NRlBICisgICAgICogT2Zmc2V0OiAweDQ0ICBHUElPQyBIaWdoIEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFBDOE1GUCAgICB8UEMuOCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFs3OjRdICAgfFBDOU1GUCAgICB8UEMuOSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxMTo4XSAgfFBDMTBNRlAgICB8UEMuMTAgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTU6MTJdIHxQQzExTUZQICAgfFBDLjExIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzE5OjE2XSB8UEMxMk1GUCAgIHxQQy4xMiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyMzoyMF0gfFBDMTNNRlAgICB8UEMuMTMgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIEB2YXIgU1lTX1Q6OkdQRF9NRlBMCisgICAgICogT2Zmc2V0OiAweDQ4ICBHUElPRCBMb3cgQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8UEQwTUZQICAgIHxQRC4wIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8Wzc6NF0gICB8UEQxTUZQICAgIHxQRC4xIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzExOjhdICB8UEQyTUZQICAgIHxQRC4yIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzE1OjEyXSB8UEQzTUZQICAgIHxQRC4zIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzE5OjE2XSB8UEQ0TUZQICAgIHxQRC40IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzIzOjIwXSB8UEQ1TUZQICAgIHxQRC41IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzI3OjI0XSB8UEQ2TUZQICAgIHxQRC42IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzMxOjI4XSB8UEQ3TUZQICAgIHxQRC43IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiBAdmFyIFNZU19UOjpHUERfTUZQSAorICAgICAqIE9mZnNldDogMHg0QyAgR1BJT0QgSGlnaCBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxQRDhNRlAgICAgfFBELjggTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbNzo0XSAgIHxQRDlNRlAgICAgfFBELjkgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTE6OF0gIHxQRDEwTUZQICAgfFBELjEwIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzE1OjEyXSB8UEQxMU1GUCAgIHxQRC4xMSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxOToxNl0gfFBEMTJNRlAgICB8UEQuMTIgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjM6MjBdIHxQRDEzTUZQICAgfFBELjEzIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzI3OjI0XSB8UEQxNE1GUCAgIHxQRC4xNCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BFX01GUEwKKyAgICAgKiBPZmZzZXQ6IDB4NTAgIEdQSU9FIExvdyBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxQRTBNRlAgICAgfFBFLjAgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbNzo0XSAgIHxQRTFNRlAgICAgfFBFLjEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTE6OF0gIHxQRTJNRlAgICAgfFBFLjIgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTU6MTJdIHxQRTNNRlAgICAgfFBFLjMgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTk6MTZdIHxQRTRNRlAgICAgfFBFLjQgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjM6MjBdIHxQRTVNRlAgICAgfFBFLjUgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjc6MjRdIHxQRTZNRlAgICAgfFBFLjYgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMzE6MjhdIHxQRTdNRlAgICAgfFBFLjcgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIEB2YXIgU1lTX1Q6OkdQRV9NRlBICisgICAgICogT2Zmc2V0OiAweDU0ICBHUElPRSBIaWdoIEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFBFOE1GUCAgICB8UEUuOCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFs3OjRdICAgfFBFOU1GUCAgICB8UEUuOSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxMTo4XSAgfFBFMTBNRlAgICB8UEUuMTAgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTU6MTJdIHxQRTExTUZQICAgfFBFLjExIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzE5OjE2XSB8UEUxMk1GUCAgIHxQRS4xMiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyMzoyMF0gfFBFMTNNRlAgICB8UEUuMTMgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjc6MjRdIHxQRTE0TUZQICAgfFBFLjE0IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzMxOjI4XSB8UEUxNU1GUCAgIHxQRS4xNSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BGX01GUEwKKyAgICAgKiBPZmZzZXQ6IDB4NTggIEdQSU9GIExvdyBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxQRjBNRlAgICAgfFBGLjAgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbNzo0XSAgIHxQRjFNRlAgICAgfFBGLjEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTE6OF0gIHxQRjJNRlAgICAgfFBGLjIgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTU6MTJdIHxQRjNNRlAgICAgfFBGLjMgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTk6MTZdIHxQRjRNRlAgICAgfFBGLjQgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjM6MjBdIHxQRjVNRlAgICAgfFBGLjUgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjc6MjRdIHxQRjZNRlAgICAgfFBGLjYgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMzE6MjhdIHxQRjdNRlAgICAgfFBGLjcgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIEB2YXIgU1lTX1Q6OkdQRl9NRlBICisgICAgICogT2Zmc2V0OiAweDVDICBHUElPRiBIaWdoIEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFBGOE1GUCAgICB8UEYuOCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFs3OjRdICAgfFBGOU1GUCAgICB8UEYuOSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxMTo4XSAgfFBGMTBNRlAgICB8UEYuMTAgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTU6MTJdIHxQRjExTUZQICAgfFBGLjExIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiBAdmFyIFNZU19UOjpHUEdfTUZQTAorICAgICAqIE9mZnNldDogMHg2MCAgR1BJT0cgTG93IEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMTo4XSAgfFBHMk1GUCAgICB8UEcuMiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBHM01GUCAgICB8UEcuMyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxOToxNl0gfFBHNE1GUCAgICB8UEcuNCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BHX01GUEgKKyAgICAgKiBPZmZzZXQ6IDB4NjQgIEdQSU9HIEhpZ2ggQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6NF0gICB8UEc5TUZQICAgIHxQRy45IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzExOjhdICB8UEcxME1GUCAgIHxQRy4xMCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBHMTFNRlAgICB8UEcuMTEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTk6MTZdIHxQRzEyTUZQICAgfFBHLjEyIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzIzOjIwXSB8UEcxM01GUCAgIHxQRy4xMyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyNzoyNF0gfFBHMTRNRlAgICB8UEcuMTQgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMzE6MjhdIHxQRzE1TUZQICAgfFBHLjE1IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiBAdmFyIFNZU19UOjpHUEhfTUZQTAorICAgICAqIE9mZnNldDogMHg2OCAgR1BJT0ggTG93IEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOToxNl0gfFBINE1GUCAgICB8UEguNCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyMzoyMF0gfFBINU1GUCAgICB8UEguNSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyNzoyNF0gfFBINk1GUCAgICB8UEguNiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFszMToyOF0gfFBIN01GUCAgICB8UEguNyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BIX01GUEgKKyAgICAgKiBPZmZzZXQ6IDB4NkMgIEdQSU9IIEhpZ2ggQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8UEg4TUZQICAgIHxQSC44IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8Wzc6NF0gICB8UEg5TUZQICAgIHxQSC45IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzExOjhdICB8UEgxME1GUCAgIHxQSC4xMCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBIMTFNRlAgICB8UEguMTEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIEB2YXIgU1lTX1Q6OkdQQV9NRk9TCisgICAgICogT2Zmc2V0OiAweDgwLzB4ODQvMHg4OC8weDhDLzB4OTAvMHg5NC8weDlDICBHUElPQS1IIE11bHRpcGxlIEZ1bmN0aW9uIE91dHB1dCBTZWxlY3QgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbbl0gICAgIHxNRk9TbiAgICAgfEdQSU9BLUggUGluW25dIE11bHRpcGxlIEZ1bmN0aW9uIFBpbiBPdXRwdXQgTW9kZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB1c2VkIHRvIHNlbGVjdCBtdWx0aXBsZSBmdW5jdGlvbiBwaW4gb3V0cHV0IG1vZGUgdHlwZSBmb3IgUHgubiBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE11bHRpcGxlIGZ1bmN0aW9uIHBpbiBvdXRwdXQgbW9kZSB0eXBlIGlzIFB1c2gtcHVsbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBNdWx0aXBsZSBmdW5jdGlvbiBwaW4gb3V0cHV0IG1vZGUgdHlwZSBpcyBPcGVuLWRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgQS9CL0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEzIGZvciBwb3J0IEMuIFRoZSBQQy4xNC8gUEMuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTQgZm9yIHBvcnQgRC4gVGhlIFBELjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEyIGZvciBwb3J0IEYuIFRoZSBQRi4xMi8gUEYuMTMvIFBGLjE0LyBQRi4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBHLiBUaGUgUEcuMC8gUEcuMS8gUEcuNS8gUEcuNi8gUEcuNy8gUEcuOCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMSBmb3IgcG9ydCBILiBUaGUgUEguMC8gUEguMS8gUEguMi8gUEguMy8gUEguMTIvIFBILjEzLyBQSC4xNC8gUEguMTUgaXMgaWdub3JlZC4KKyAgICAgKiBAdmFyIFNZU19UOjpTUkFNSUNUTAorICAgICAqIE9mZnNldDogMHhDMCAgU3lzdGVtIFNSQU0gSW50ZXJydXB0IEVuYWJsZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UEVSUklFTiAgIHxTUkFNIFBhcml0eSBDaGVjayBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUkFNIHBhcml0eSBjaGVjayBlcnJvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNSQU0gcGFyaXR5IGNoZWNrIGVycm9yIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIEB2YXIgU1lTX1Q6OlNSQU1TVFMKKyAgICAgKiBPZmZzZXQ6IDB4QzQgIFN5c3RlbSBTUkFNIFBhcml0eSBFcnJvciBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQRVJSSUYgICAgfFNSQU0gUGFyaXR5IENoZWNrIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIFN5c3RlbSBTUkFNIHBhcml0eSBlcnJvciBvY2N1cnJlZC4gV3JpdGUgMSB0byBjbGVhciB0aGlzIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFN5c3RlbSBTUkFNIHBhcml0eSBlcnJvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3lzdGVtIFNSQU0gcGFyaXR5IGVycm9yIG9jY3VyLgorICAgICAqIEB2YXIgU1lTX1Q6OlNSQU1FQURSCisgICAgICogT2Zmc2V0OiAweEM4ICBTeXN0ZW0gU1JBTSBQYXJpdHkgQ2hlY2sgRXJyb3IgQWRkcmVzcyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEVSUkFERFIgICB8U3lzdGVtIFNSQU0gUGFyaXR5IEVycm9yIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIHNob3dzIHN5c3RlbSBTUkFNIHBhcml0eSBlcnJvciBieXRlIGFkZHJlc3MuCisgICAgICogQHZhciBTWVNfVDo6U1JBTVBDVEwKKyAgICAgKiBPZmZzZXQ6IDB4REMgIFN5c3RlbSBTUkFNIFBvd2VyIE1vZGUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFNUQUNLICAgICB8U3lzdGVtIFNSQU0gU3RhY2sgUG9zaXRpb24gKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBtdXN0IGNvbmZpZ3VyZSB0aGUgc3lzdGVtIFNSQU0gTWFyY28gdGhhdCBmaXJzdCBTUkFNIGFkZHJlc3MgYWNjZXNzZWQgYnkgQ1BVIGluIHBvd2VyLW9uIHByb2Nlc3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs1OjRdICAgfFJFVENOVCAgICB8U1JBTSBSZXRlbnRpb24gQ291bnQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjYW4gY29uZmlndXJlIFNSQU0gbWFjcm8gcmV0ZW50aW9uIHRpbWUgaW4gdW5pdCBvZiBISVJDIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IE9uZSBISVJDIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFR3byBISVJDIHBlcmlvZHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBUaHJlZSBISVJDIHBlcmlvZHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBGb3VyIEhJUkMgcGVyaW9kcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8Wzk6OF0gICB8U1JBTTBQTTAgIHxCYW5rMCBTUkFNIFBvd2VyIE1vZGUgU2VsZWN0IDAgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjYW4gY29udHJvbCBiYW5rMCBTUkFNICgzMmspIHBvd2VyIG1vZGUgaW4gc3lzdGVtIHBvd2VyIGRvd24gbW9kZSBmb3IgcmFuZ2UgMHgyMDAwXzAwMDAgLSAweDIwMDBfMUZGRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IE5vcm1hbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUmV0ZW50aW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQb3dlciBzaHV0IGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkIChXcml0ZSBJZ25vcmUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBCYW5rMCBTUkFNIGlzIGFsd2F5cyBvcGVyYXRpbmcgaW4gcG93ZXIgc2h1dCBkb3duIG1vZGUgZm9yIHN5c3RlbSBlbnRlciBEZWVwIFBvd2VyLWRvd24gbW9kZSAoRFBEKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxMToxMF0gfFNSQU0wUE0xICB8QmFuazAgU1JBTSBQb3dlciBNb2RlIFNlbGVjdCAxIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY2FuIGNvbnRyb2wgYmFuazAgU1JBTSAoMzJrKSBwb3dlciBtb2RlIGluIHN5c3RlbSBlbnRlciBwb3dlciBkb3duIG1vZGUgZm9yIHJhbmdlIDB4MjAwMF8yMDAwIC0gMHgyMDAwXzNGRkYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBOb3JtYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJldGVudGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUG93ZXIgc2h1dCBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZCAoV3JpdGUgSWdub3JlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQmFuazAgU1JBTSBpcyBhbHdheXMgb3BlcmF0aW5nIGluIHBvd2VyIHNodXQgZG93biBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgRGVlcCBQb3dlci1kb3duIG1vZGUgKERQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTM6MTJdIHxTUkFNMFBNMiAgfEJhbmswIFNSQU0gUG93ZXIgTW9kZSBTZWxlY3QgMiAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNhbiBjb250cm9sIGJhbmswIFNSQU0gKDMyaykgcG93ZXIgbW9kZSBpbiBzeXN0ZW0gZW50ZXIgcG93ZXIgZG93biBtb2RlIGZvciByYW5nZSAweDIwMDRfMDAwMCAtIDB4MjAwMF81RkZGLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gTm9ybWFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBSZXRlbnRpb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBvd2VyIHNodXQgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQgKFdyaXRlIElnbm9yZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEJhbmsgMCBTUkFNIGlzIGFsd2F5cyBvcGVyYXRpbmcgaW4gcG93ZXIgc2h1dCBkb3duIG1vZGUgZm9yIHN5c3RlbSBlbnRlciBEZWVwIFBvd2VyLWRvd24gTW9kZSAoRFBEKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxNToxNF0gfFNSQU0wUE0zICB8QmFuazAgU1JBTSBQb3dlciBNb2RlIFNlbGVjdCAzIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY2FuIGNvbnRyb2wgYmFuazAgU1JBTSAoMzJrKSBwb3dlciBtb2RlIGluIHN5c3RlbSBlbnRlciBwb3dlciBkb3duIG1vZGUgZm9yIHJhbmdlIDB4MjAwNl8wMDAwIC0gMHgyMDAwXzdGRkYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBOb3JtYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJldGVudGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUG93ZXIgc2h1dCBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZCAoV3JpdGUgSWdub3JlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQmFuazAgU1JBTSBpcyBhbHdheXMgb3BlcmF0aW5nIGluIHBvd2VyIHNodXQgZG93biBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgRGVlcCBQb3dlci1kb3duIG1vZGUgKERQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTc6MTZdIHxTUkFNMVBNMCAgfEJhbmsxIFNSQU0gUG93ZXIgTW9kZSBTZWxlY3QgMCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNhbiBjb250cm9sIGJhbmsxIFNSQU0gKDY0aykgcG93ZXIgbW9kZSBpbiBzeXN0ZW0gZW50ZXIgcG93ZXIgZG93biBtb2RlIGZvciByYW5nZSAweDIwMDBfODAwMCAtIDB4MjAwMF9CRkZGLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gTm9ybWFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBSZXRlbnRpb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBvd2VyIHNodXQgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQgKFdyaXRlIElnbm9yZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEJhbmsxIFNSQU0gaXMgYWx3YXlzIG9wZXJhdGluZyBpbiBwb3dlciBzaHV0IGRvd24gbW9kZSBmb3Igc3lzdGVtIGVudGVyIFN0YW5kYnkgUG93ZXItZG93biBtb2RlIChTUEQpIGFuZCBEZWVwIFBvd2VyLWRvd24gbW9kZSAoRFBEKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxOToxOF0gfFNSQU0xUE0xICB8QmFuazEgU1JBTSBQb3dlciBNb2RlIFNlbGVjdCAxIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY2FuIGNvbnRyb2wgYmFuazEgU1JBTSAoNjRrKSBwb3dlciBtb2RlIGluIHN5c3RlbSBlbnRlciBwb3dlciBkb3duIG1vZGUgZm9yIHJhbmdlIDB4MjAwMF9DMDAwIC0gMHgyMDAwX0ZGRkYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBOb3JtYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJldGVudGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUG93ZXIgc2h1dCBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEJhbmsxIFNSQU0gaXMgYWx3YXlzIG9wZXJhdGluZyBpbiBwb3dlciBzaHV0IGRvd24gbW9kZSBmb3Igc3lzdGVtIGVudGVyIFN0YW5kYnkgUG93ZXItZG93biBtb2RlIChTUEQpIGFuZCBEZWVwIFBvd2VyLWRvd24gbW9kZSAoRFBEKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsyMToyMF0gfFNSQU0xUE0yICB8QmFuazEgU1JBTSBQb3dlciBNb2RlIFNlbGVjdCAyIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY2FuIGNvbnRyb2wgYmFuazEgU1JBTSAoNjRrKSBwb3dlciBtb2RlIGluIHN5c3RlbSBlbnRlciBwb3dlciBkb3duIG1vZGUgZm9yIHJhbmdlIDB4MjAwMV8wMDAwIC0gMHgyMDAxXzNGRkYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBOb3JtYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJldGVudGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUG93ZXIgc2h1dCBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZCAoV3JpdGUgSWdub3JlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQmFuazEgU1JBTSBpcyBhbHdheXMgb3BlcmF0aW5nIGluIHBvd2VyIHNodXQgZG93biBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgU3RhbmRieSBQb3dlci1kb3duIG1vZGUgKFNQRCkgYW5kIERlZXAgUG93ZXItZG93biBtb2RlIChEUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzIzOjIyXSB8U1JBTTFQTTMgIHxCYW5rMSBTUkFNIFBvd2VyIE1vZGUgU2VsZWN0IDMgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjYW4gY29udHJvbCBiYW5rMSBTUkFNICg2NGspIHBvd2VyIG1vZGUgaW4gc3lzdGVtIGVudGVyIHBvd2VyIGRvd24gbW9kZSBmb3IgcmFuZ2UgMHgyMDAxXzQwMDAgLSAweDIwMDFfN0ZGRgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gTm9ybWFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBSZXRlbnRpb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBvd2VyIHNodXQgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQgKFdyaXRlIElnbm9yZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEJhbmsxIFNSQU0gaXMgYWx3YXlzIG9wZXJhdGluZyBpbiBwb3dlciBzaHV0IGRvd24gbW9kZSBmb3Igc3lzdGVtIGVudGVyIFN0YW5kYnkgUG93ZXItZG93biBtb2RlIChTUEQpIGFuZCBEZWVwIFBvd2VyLWRvd24gbW9kZSAoRFBEKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBTWVNfVDo6U1JBTVBQQ1QKKyAgICAgKiBPZmZzZXQ6IDB4RTAgIFBlcmlwaGVyYWwgU1JBTSBQb3dlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxDQU4gICAgICAgfENBTiBTUkFNIFBvd2VyIE1vZGUgU2VsZWN0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY2FuIGNvbnRyb2wgQ0FOIFNSQU0gcG93ZXIgbW9kZSBmb3Igc3lzdGVtIGVudGVyIHBvd2VyIGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IE5vcm1hbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUmV0ZW50aW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQb3dlciBzaHV0IGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkIChXcml0ZSBJZ25vcmUpLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogUGVyaXBoZXJhbCBTUkFNIGlzIGFsd2F5cyBvcGVyYXRpbmcgaW4gcG93ZXIgc2h1dCBkb3duIG1vZGUgZm9yIHN5c3RlbSBlbnRlciBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSAoU1BEKSBhbmQgRGVlcCBQb3dlci1kb3duIG1vZGUgKERQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMzoyXSAgIHxVU0JEICAgICAgfFVTQiBEZXZpY2UgU1JBTSBQb3dlciBNb2RlIFNlbGVjdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNhbiBjb250cm9sIFVTQiBkZXZpY2UgU1JBTSBwb3dlciBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgcG93ZXIgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gTm9ybWFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBSZXRlbnRpb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBvd2VyIHNodXQgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQgKFdyaXRlIElnbm9yZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFBlcmlwaGVyYWwgU1JBTSBpcyBhbHdheXMgb3BlcmF0aW5nIGluIHBvd2VyIHNodXQgZG93biBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgU3RhbmRieSBQb3dlci1kb3duIG1vZGUgKFNQRCkgYW5kIERlZXAgUG93ZXItZG93biBtb2RlIChEUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzU6NF0gICB8UERNQTAgICAgIHxQRE1BIFNSQU0gUG93ZXIgTW9kZSBTZWxlY3QgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjYW4gY29udHJvbCBQRE1BMCAoYWx3YXlzIHNlY3VyZSkgU1JBTSBwb3dlciBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgcG93ZXIgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gTm9ybWFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBSZXRlbnRpb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBvd2VyIHNodXQgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQgKFdyaXRlIElnbm9yZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFBlcmlwaGVyYWwgU1JBTSBpcyBhbHdheXMgb3BlcmF0aW5nIGluIHBvd2VyIHNodXQgZG93biBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgU3RhbmRieSBQb3dlci1kb3duIG1vZGUgKFNQRCkgYW5kIERlZXAgUG93ZXItZG93biBtb2RlIChEUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8Wzc6Nl0gICB8UERNQTEgICAgIHxQRE1BIFNSQU0gUG93ZXIgTW9kZSBTZWxlY3QgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjYW4gY29udHJvbCBQRE1BMSBTUkFNIHBvd2VyIG1vZGUgZm9yIHN5c3RlbSBlbnRlciBwb3dlciBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBOb3JtYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJldGVudGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUG93ZXIgc2h1dCBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZCAoV3JpdGUgSWdub3JlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogUGVyaXBoZXJhbCBTUkFNIGlzIGFsd2F5cyBvcGVyYXRpbmcgaW4gcG93ZXIgc2h1dCBkb3duIG1vZGUgZm9yIHN5c3RlbSBlbnRlciBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSAoU1BEKSBhbmQgRGVlcCBQb3dlci1kb3duIG1vZGUgKERQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOTo4XSAgIHxGTUMgICAgICAgfEZNQyBTUkFNIFBvd2VyIE1vZGUgU2VsZWN0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY2FuIGNvbnRyb2wgRk1DIGNhY2hlIFNSQU0gcG93ZXIgbW9kZSBmb3Igc3lzdGVtIGVudGVyIHBvd2VyIGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IE5vcm1hbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUmV0ZW50aW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQb3dlciBzaHV0IGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkIChXcml0ZSBJZ25vcmUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBQZXJpcGhlcmFsIFNSQU0gaXMgYWx3YXlzIG9wZXJhdGluZyBpbiBwb3dlciBzaHV0IGRvd24gbW9kZSBmb3Igc3lzdGVtIGVudGVyIFN0YW5kYnkgUG93ZXItZG93biBtb2RlIChTUEQpIGFuZCBEZWVwIFBvd2VyLWRvd24gbW9kZSAoRFBEKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBTWVNfVDo6VENUTDQ4TQorICAgICAqIE9mZnNldDogMHhFNCAgSElSQyA0OE0gVHJpbSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8RlJFUVNFTCAgIHxUcmltIEZyZXF1ZW5jeSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgdGFyZ2V0IGZyZXF1ZW5jeSBvZiA0OCBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDNDgpIGF1dG8gdHJpbS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEdXJpbmcgYXV0byB0cmltIG9wZXJhdGlvbiwgaWYgY2xvY2sgZXJyb3IgZGV0ZWN0ZWQgd2l0aCBDRVNUT1BFTiBpcyBzZXQgdG8gMSBvciB0cmltIHJldHJ5IGxpbWl0YXRpb24gY291bnQgcmVhY2hlZCwgdGhpcyBmaWVsZCB3aWxsIGJlIGNsZWFyZWQgdG8gMDAgYXV0b21hdGljYWxseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERpc2FibGUgSElSQyBhdXRvIHRyaW0gZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFbmFibGUgSElSQyBhdXRvIHRyaW0gZnVuY3Rpb24gYW5kIHRyaW0gSElSQyB0byA0OCBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBSZXNlcnZlZC4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzU6NF0gICB8TE9PUFNFTCAgIHxUcmltIENhbGN1bGF0aW9uIExvb3AgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBkZWZpbmVzIHRoYXQgdHJpbSB2YWx1ZSBjYWxjdWxhdGlvbiBpcyBiYXNlZCBvbiBob3cgbWFueSByZWZlcmVuY2UgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVHJpbSB2YWx1ZSBjYWxjdWxhdGlvbiBpcyBiYXNlZCBvbiBhdmVyYWdlIGRpZmZlcmVuY2UgaW4gNCBjbG9ja3Mgb2YgcmVmZXJlbmNlIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gVHJpbSB2YWx1ZSBjYWxjdWxhdGlvbiBpcyBiYXNlZCBvbiBhdmVyYWdlIGRpZmZlcmVuY2UgaW4gOCBjbG9ja3Mgb2YgcmVmZXJlbmNlIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVHJpbSB2YWx1ZSBjYWxjdWxhdGlvbiBpcyBiYXNlZCBvbiBhdmVyYWdlIGRpZmZlcmVuY2UgaW4gMTYgY2xvY2tzIG9mIHJlZmVyZW5jZSBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFRyaW0gdmFsdWUgY2FsY3VsYXRpb24gaXMgYmFzZWQgb24gYXZlcmFnZSBkaWZmZXJlbmNlIGluIDMyIGNsb2NrcyBvZiByZWZlcmVuY2UgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogRm9yIGV4YW1wbGUsIGlmIExPT1BTRUwgaXMgc2V0IGFzIDAwLCBhdXRvIHRyaW0gY2lyY3VpdCB3aWxsIGNhbGN1bGF0ZSB0cmltIHZhbHVlIGJhc2VkIG9uIHRoZSBhdmVyYWdlIGZyZXF1ZW5jeSBkaWZmZXJlbmNlIGluIDQgY2xvY2tzIG9mIHJlZmVyZW5jZSBjbG9jay4KKyAgICAgKiB8Wzc6Nl0gICB8UkVUUllDTlQgIHxUcmltIFZhbHVlIFVwZGF0ZSBMaW1pdGF0aW9uIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBkZWZpbmVzIHRoYXQgaG93IG1hbnkgdGltZXMgdGhlIGF1dG8gdHJpbSBjaXJjdWl0IHdpbGwgdHJ5IHRvIHVwZGF0ZSB0aGUgSElSQyB0cmltIHZhbHVlIGJlZm9yZSB0aGUgZnJlcXVlbmN5IG9mIEhJUkMgbG9ja2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9uY2UgdGhlIEhJUkMgbG9ja2VkLCB0aGUgaW50ZXJuYWwgdHJpbSB2YWx1ZSB1cGRhdGUgY291bnRlciB3aWxsIGJlIHJlc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSB0cmltIHZhbHVlIHVwZGF0ZSBjb3VudGVyIHJlYWNoZWQgdGhpcyBsaW1pdGF0aW9uIHZhbHVlIGFuZCBmcmVxdWVuY3kgb2YgSElSQyBzdGlsbCBkb2Vzbid0IGxvY2ssIHRoZSBhdXRvIHRyaW0gb3BlcmF0aW9uIHdpbGwgYmUgZGlzYWJsZWQgYW5kIEZSRVFTRUwgd2lsbCBiZSBjbGVhcmVkIHRvIDAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVHJpbSByZXRyeSBjb3VudCBsaW1pdGF0aW9uIGlzIDY0IGxvb3BzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gVHJpbSByZXRyeSBjb3VudCBsaW1pdGF0aW9uIGlzIDEyOCBsb29wcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFRyaW0gcmV0cnkgY291bnQgbGltaXRhdGlvbiBpcyAyNTYgbG9vcHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBUcmltIHJldHJ5IGNvdW50IGxpbWl0YXRpb24gaXMgNTEyIGxvb3BzLgorICAgICAqIHxbOF0gICAgIHxDRVNUT1BFTiAgfENsb2NrIEVycm9yIFN0b3AgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdHJpbSBvcGVyYXRpb24gaXMga2VlcCBnb2luZyBpZiBjbG9jayBpcyBpbmFjY3VyYWN5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdHJpbSBvcGVyYXRpb24gaXMgc3RvcHBlZCBpZiBjbG9jayBpcyBpbmFjY3VyYWN5LgorICAgICAqIHxbMTBdICAgIHxSRUZDS1NFTCAgfFJlZmVyZW5jZSBDbG9jayBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSElSQyB0cmltIDQ4TSByZWZlcmVuY2UgY2xvY2sgaXMgZnJvbSBleHRlcm5hbCAzMi43Njgga0h6IGNyeXN0YWwgb3NjaWxsYXRvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSElSQyB0cmltIDQ4TSByZWZlcmVuY2UgY2xvY2sgaXMgZnJvbSBpbnRlcm5hbCBVU0Igc3luY2hyb25vdXMgbW9kZS4KKyAgICAgKiBAdmFyIFNZU19UOjpUSUVONDhNCisgICAgICogT2Zmc2V0OiAweEU4ICBISVJDIDQ4TSBUcmltIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxURkFJTElFTiAgfFRyaW0gRmFpbHVyZSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNvbnRyb2xzIGlmIGFuIGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGlsZSBISVJDIHRyaW0gdmFsdWUgdXBkYXRlIGxpbWl0YXRpb24gY291bnQgcmVhY2hlZCBhbmQgSElSQyBmcmVxdWVuY3kgc3RpbGwgbm90IGxvY2tlZCBvbiB0YXJnZXQgZnJlcXVlbmN5IHNldCBieSBGUkVRU0VMKFNZU19UQ1RMNDhNWzE6MF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIGhpZ2ggYW5kIFRGQUlMSUYoU1lTX1RJU1RTNDhNWzFdKSBpcyBzZXQgZHVyaW5nIGF1dG8gdHJpbSBvcGVyYXRpb24sIGFuIGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZCB0byBub3RpZnkgdGhhdCBISVJDIHRyaW0gdmFsdWUgdXBkYXRlIGxpbWl0YXRpb24gY291bnQgd2FzIHJlYWNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpc2FibGUgVEZBSUxJRihTWVNfU1lTX1RJU1RTNDhNWzFdKSBzdGF0dXMgdG8gdHJpZ2dlciBhbiBpbnRlcnJ1cHQgdG8gQ1BVLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFbmFibGUgVEZBSUxJRihTWVNfU1lTX1RJU1RTNDhNTVsxXSkgc3RhdHVzIHRvIHRyaWdnZXIgYW4gaW50ZXJydXB0IHRvIENQVS4KKyAgICAgKiB8WzJdICAgICB8Q0xLRUlFTiAgIHxDbG9jayBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNvbnRyb2xzIGlmIENQVSB3b3VsZCBnZXQgYW4gaW50ZXJydXB0IHdoaWxlIGNsb2NrIGlzIGluYWNjdXJhY3kgZHVyaW5nIGF1dG8gdHJpbSBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvMSwgYW5kIENMS0VSUklGKFNZU19TWVNfVElTVFM0OE1bMl0pIGlzIHNldCBkdXJpbmcgYXV0byB0cmltIG9wZXJhdGlvbiwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHRvIG5vdGlmeSB0aGUgY2xvY2sgZnJlcXVlbmN5IGlzIGluYWNjdXJhY3kuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpc2FibGUgQ0xLRVJSSUYoU1lTX1NZU19USVNUUzQ4TVsyXSkgc3RhdHVzIHRvIHRyaWdnZXIgYW4gaW50ZXJydXB0IHRvIENQVS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlIENMS0VSUklGKFNZU19TWVNfVElTVFM0OE1bMl0pIHN0YXR1cyB0byB0cmlnZ2VyIGFuIGludGVycnVwdCB0byBDUFUuCisgICAgICogQHZhciBTWVNfVDo6VElTVFM0OE0KKyAgICAgKiBPZmZzZXQ6IDB4RUMgIEhJUkMgNDhNIFRyaW0gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEZSRVFMT0NLICB8SElSQyBGcmVxdWVuY3kgTG9jayBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIEhJUkMgZnJlcXVlbmN5IGlzIGxvY2tlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGlzIGEgc3RhdHVzIGJpdCBhbmQgZG9lc24ndCB0cmlnZ2VyIGFueSBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBjbGVhciB0aGlzIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSwgaWYgdGhlIGZyZXF1ZW5jeSBpcyBsb2NrIGFuZCB0aGUgUkNfVFJJTSBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgaW50ZXJuYWwgaGlnaC1zcGVlZCBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBkb2Vzbid0IGxvY2sgYXQgNDggTUh6IHlldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGludGVybmFsIGhpZ2gtc3BlZWQgb3NjaWxsYXRvciBmcmVxdWVuY3kgbG9ja2VkIGF0IDQ4IE1Iei4KKyAgICAgKiB8WzFdICAgICB8VEZBSUxJRiAgIHxUcmltIEZhaWx1cmUgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IEhJUkMgdHJpbSB2YWx1ZSB1cGRhdGUgbGltaXRhdGlvbiBjb3VudCByZWFjaGVkIGFuZCB0aGUgSElSQyBjbG9jayBmcmVxdWVuY3kgc3RpbGwgZG9lc24ndCBiZSBsb2NrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25jZSB0aGlzIGJpdCBpcyBzZXQsIHRoZSBhdXRvIHRyaW0gb3BlcmF0aW9uIHN0b3BwZWQgYW5kIEZSRVFTRUwoU1lTX1RDVEw0OE1bMTowXSkgd2lsbCBiZSBjbGVhcmVkIHRvIDAwIGJ5IGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IGFuZCBURkFJTElFTihTWVNfVElFTjQ4TVsxXSkgaXMgaGlnaCwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHRvIG5vdGlmeSB0aGF0IEhJUkMgdHJpbSB2YWx1ZSB1cGRhdGUgbGltaXRhdGlvbiBjb3VudCB3YXMgcmVhY2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIGNsZWFyIHRoaXMgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJpbSB2YWx1ZSB1cGRhdGUgbGltaXRhdGlvbiBjb3VudCBkb2VzIG5vdCByZWFjaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJpbSB2YWx1ZSB1cGRhdGUgbGltaXRhdGlvbiBjb3VudCByZWFjaGVkIGFuZCBISVJDIGZyZXF1ZW5jeSBzdGlsbCBub3QgbG9ja2VkLgorICAgICAqIHxbMl0gICAgIHxDTEtFUlJJRiAgfENsb2NrIEVycm9yIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBmcmVxdWVuY3kgb2YgMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpIG9yIDQ4TUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQzQ4KSBpcyBzaGlmdCBsYXJnZXIgdG8gdW5yZWFzb25hYmxlIHZhbHVlLCB0aGlzIGJpdCB3aWxsIGJlIHNldCBhbmQgdG8gYmUgYW4gaW5kaWNhdGUgdGhhdCBjbG9jayBmcmVxdWVuY3kgaXMgaW5hY2N1cmFjeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9uY2UgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHRoZSBhdXRvIHRyaW0gb3BlcmF0aW9uIHN0b3BwZWQgYW5kIEZSRVFTRUwoU1lTX1RJQ1RMNDhNWzE6MF0pIHdpbGwgYmUgY2xlYXJlZCB0byAwMCBieSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5IGlmIENFU1RPUEVOKFNZU19UQ1RMNDhNWzhdKSBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgYW5kIENMS0VJRU4oU1lTX1RJRU40OE1bMl0pIGlzIGhpZ2gsIGFuIGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZCB0byBub3RpZnkgdGhlIGNsb2NrIGZyZXF1ZW5jeSBpcyBpbmFjY3VyYWN5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gY2xlYXIgdGhpcyB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDbG9jayBmcmVxdWVuY3kgaXMgYWNjdXJhY3kuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsb2NrIGZyZXF1ZW5jeSBpcyBpbmFjY3VyYWN5LgorICAgICAqIEB2YXIgU1lTX1Q6OlRDVEwxMk0KKyAgICAgKiBPZmZzZXQ6IDB4RjAgIEhJUkMgMTJNIFRyaW0gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfEZSRVFTRUwgICB8VHJpbSBGcmVxdWVuY3kgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIHRhcmdldCBmcmVxdWVuY3kgb2YgMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykgYXV0byB0cmltLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfER1cmluZyBhdXRvIHRyaW0gb3BlcmF0aW9uLCBpZiBjbG9jayBlcnJvciBkZXRlY3RlZCB3aXRoIENFU1RPUEVOIGlzIHNldCB0byAxIG9yIHRyaW0gcmV0cnkgbGltaXRhdGlvbiBjb3VudCByZWFjaGVkLCB0aGlzIGZpZWxkIHdpbGwgYmUgY2xlYXJlZCB0byAwMCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRGlzYWJsZSBISVJDIGF1dG8gdHJpbSBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVuYWJsZSBISVJDIGF1dG8gdHJpbSBmdW5jdGlvbiBhbmQgdHJpbSBISVJDIHRvIDEyIE1Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFJlc2VydmVkLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkLgorICAgICAqIHxbNTo0XSAgIHxMT09QU0VMICAgfFRyaW0gQ2FsY3VsYXRpb24gTG9vcCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGRlZmluZXMgdGhhdCB0cmltIHZhbHVlIGNhbGN1bGF0aW9uIGlzIGJhc2VkIG9uIGhvdyBtYW55IHJlZmVyZW5jZSBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBUcmltIHZhbHVlIGNhbGN1bGF0aW9uIGlzIGJhc2VkIG9uIGF2ZXJhZ2UgZGlmZmVyZW5jZSBpbiA0IGNsb2NrcyBvZiByZWZlcmVuY2UgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBUcmltIHZhbHVlIGNhbGN1bGF0aW9uIGlzIGJhc2VkIG9uIGF2ZXJhZ2UgZGlmZmVyZW5jZSBpbiA4IGNsb2NrcyBvZiByZWZlcmVuY2UgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBUcmltIHZhbHVlIGNhbGN1bGF0aW9uIGlzIGJhc2VkIG9uIGF2ZXJhZ2UgZGlmZmVyZW5jZSBpbiAxNiBjbG9ja3Mgb2YgcmVmZXJlbmNlIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gVHJpbSB2YWx1ZSBjYWxjdWxhdGlvbiBpcyBiYXNlZCBvbiBhdmVyYWdlIGRpZmZlcmVuY2UgaW4gMzIgY2xvY2tzIG9mIHJlZmVyZW5jZSBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBGb3IgZXhhbXBsZSwgaWYgTE9PUFNFTCBpcyBzZXQgYXMgMDAsIGF1dG8gdHJpbSBjaXJjdWl0IHdpbGwgY2FsY3VsYXRlIHRyaW0gdmFsdWUgYmFzZWQgb24gdGhlIGF2ZXJhZ2UgZnJlcXVlbmN5IGRpZmZlcmVuY2UgaW4gNCBjbG9ja3Mgb2YgcmVmZXJlbmNlIGNsb2NrLgorICAgICAqIHxbNzo2XSAgIHxSRVRSWUNOVCAgfFRyaW0gVmFsdWUgVXBkYXRlIExpbWl0YXRpb24gQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGRlZmluZXMgdGhhdCBob3cgbWFueSB0aW1lcyB0aGUgYXV0byB0cmltIGNpcmN1aXQgd2lsbCB0cnkgdG8gdXBkYXRlIHRoZSBISVJDIHRyaW0gdmFsdWUgYmVmb3JlIHRoZSBmcmVxdWVuY3kgb2YgSElSQyBsb2NrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25jZSB0aGUgSElSQyBsb2NrZWQsIHRoZSBpbnRlcm5hbCB0cmltIHZhbHVlIHVwZGF0ZSBjb3VudGVyIHdpbGwgYmUgcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIHRyaW0gdmFsdWUgdXBkYXRlIGNvdW50ZXIgcmVhY2hlZCB0aGlzIGxpbWl0YXRpb24gdmFsdWUgYW5kIGZyZXF1ZW5jeSBvZiBISVJDIHN0aWxsIGRvZXNuJ3QgbG9jaywgdGhlIGF1dG8gdHJpbSBvcGVyYXRpb24gd2lsbCBiZSBkaXNhYmxlZCBhbmQgRlJFUVNFTCB3aWxsIGJlIGNsZWFyZWQgdG8gMDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBUcmltIHJldHJ5IGNvdW50IGxpbWl0YXRpb24gaXMgNjQgbG9vcHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBUcmltIHJldHJ5IGNvdW50IGxpbWl0YXRpb24gaXMgMTI4IGxvb3BzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVHJpbSByZXRyeSBjb3VudCBsaW1pdGF0aW9uIGlzIDI1NiBsb29wcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFRyaW0gcmV0cnkgY291bnQgbGltaXRhdGlvbiBpcyA1MTIgbG9vcHMuCisgICAgICogfFs4XSAgICAgfENFU1RPUEVOICB8Q2xvY2sgRXJyb3IgU3RvcCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB0cmltIG9wZXJhdGlvbiBpcyBrZWVwIGdvaW5nIGlmIGNsb2NrIGlzIGluYWNjdXJhY3kuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB0cmltIG9wZXJhdGlvbiBpcyBzdG9wcGVkIGlmIGNsb2NrIGlzIGluYWNjdXJhY3kuCisgICAgICogfFsxMF0gICAgfFJFRkNLU0VMICB8UmVmZXJlbmNlIENsb2NrIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBISVJDIHRyaW0gcmVmZXJlbmNlIGNsb2NrIGlzIGZyb20gZXh0ZXJuYWwgMzIuNzY4IGtIeiBjcnlzdGFsIG9zY2lsbGF0b3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEhJUkMgdHJpbSByZWZlcmVuY2UgY2xvY2sgaXMgZnJvbSBpbnRlcm5hbCBVU0Igc3luY2hyb25vdXMgbW9kZS4KKyAgICAgKiBAdmFyIFNZU19UOjpUSUVOMTJNCisgICAgICogT2Zmc2V0OiAweEY0ICBISVJDIDEyTSBUcmltIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxURkFJTElFTiAgfFRyaW0gRmFpbHVyZSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNvbnRyb2xzIGlmIGFuIGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGlsZSBISVJDIHRyaW0gdmFsdWUgdXBkYXRlIGxpbWl0YXRpb24gY291bnQgcmVhY2hlZCBhbmQgSElSQyBmcmVxdWVuY3kgc3RpbGwgbm90IGxvY2tlZCBvbiB0YXJnZXQgZnJlcXVlbmN5IHNldCBieSBGUkVRU0VMKFNZU19UQ1RMMTJNWzE6MF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIGhpZ2ggYW5kIFRGQUlMSUYoU1lTX1RJU1RTMTJNWzFdKSBpcyBzZXQgZHVyaW5nIGF1dG8gdHJpbSBvcGVyYXRpb24sIGFuIGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZCB0byBub3RpZnkgdGhhdCBISVJDIHRyaW0gdmFsdWUgdXBkYXRlIGxpbWl0YXRpb24gY291bnQgd2FzIHJlYWNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpc2FibGUgVEZBSUxJRihTWVNfVElTVFMxMk1bMV0pIHN0YXR1cyB0byB0cmlnZ2VyIGFuIGludGVycnVwdCB0byBDUFUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZSBURkFJTElGKFNZU19USVNUUzEyTVsxXSkgc3RhdHVzIHRvIHRyaWdnZXIgYW4gaW50ZXJydXB0IHRvIENQVS4KKyAgICAgKiB8WzJdICAgICB8Q0xLRUlFTiAgIHxDbG9jayBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNvbnRyb2xzIGlmIENQVSB3b3VsZCBnZXQgYW4gaW50ZXJydXB0IHdoaWxlIGNsb2NrIGlzIGluYWNjdXJhY3kgZHVyaW5nIGF1dG8gdHJpbSBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvMSwgYW5kIENMS0VSUklGKFNZU19USVNUUzEyTVsyXSkgaXMgc2V0IGR1cmluZyBhdXRvIHRyaW0gb3BlcmF0aW9uLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQgdG8gbm90aWZ5IHRoZSBjbG9jayBmcmVxdWVuY3kgaXMgaW5hY2N1cmFjeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGlzYWJsZSBDTEtFUlJJRihTWVNfVElTVFMxMk1bMl0pIHN0YXR1cyB0byB0cmlnZ2VyIGFuIGludGVycnVwdCB0byBDUFUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZSBDTEtFUlJJRihTWVNfVElTVFMxMk1bMl0pIHN0YXR1cyB0byB0cmlnZ2VyIGFuIGludGVycnVwdCB0byBDUFUuCisgICAgICogQHZhciBTWVNfVDo6VElTVFMxMk0KKyAgICAgKiBPZmZzZXQ6IDB4RjggIEhJUkMgMTJNIFRyaW0gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEZSRVFMT0NLICB8SElSQyBGcmVxdWVuY3kgTG9jayBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIEhJUkMgZnJlcXVlbmN5IGlzIGxvY2tlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGlzIGEgc3RhdHVzIGJpdCBhbmQgZG9lc24ndCB0cmlnZ2VyIGFueSBpbnRlcnJ1cHQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIGNsZWFyIHRoaXMgdG8gMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHksIGlmIHRoZSBmcmVxdWVuY3kgaXMgbG9jayBhbmQgdGhlIFJDX1RSSU0gaXMgZW5hYmxlZC4wID0gVGhlIGludGVybmFsIGhpZ2gtc3BlZWQgb3NjaWxsYXRvciBmcmVxdWVuY3kgZG9lc24ndCBsb2NrIGF0IDEyIE1IeiB5ZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBpbnRlcm5hbCBoaWdoLXNwZWVkIG9zY2lsbGF0b3IgZnJlcXVlbmN5IGxvY2tlZCBhdCAxMiBNSHouCisgICAgICogfFsxXSAgICAgfFRGQUlMSUYgICB8VHJpbSBGYWlsdXJlIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBISVJDIHRyaW0gdmFsdWUgdXBkYXRlIGxpbWl0YXRpb24gY291bnQgcmVhY2hlZCBhbmQgdGhlIEhJUkMgY2xvY2sgZnJlcXVlbmN5IHN0aWxsIGRvZXNuJ3QgYmUgbG9ja2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9uY2UgdGhpcyBiaXQgaXMgc2V0LCB0aGUgYXV0byB0cmltIG9wZXJhdGlvbiBzdG9wcGVkIGFuZCBGUkVRU0VMKFNZU19UQ1RMMTJNWzE6MF0pIHdpbGwgYmUgY2xlYXJlZCB0byAwMCBieSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCBhbmQgVEZBSUxJRU4oU1lTX1RJRU4xMk1bMV0pIGlzIGhpZ2gsIGFuIGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZCB0byBub3RpZnkgdGhhdCBISVJDIHRyaW0gdmFsdWUgdXBkYXRlIGxpbWl0YXRpb24gY291bnQgd2FzIHJlYWNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBjbGVhciB0aGlzIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyaW0gdmFsdWUgdXBkYXRlIGxpbWl0YXRpb24gY291bnQgZG9lcyBub3QgcmVhY2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyaW0gdmFsdWUgdXBkYXRlIGxpbWl0YXRpb24gY291bnQgcmVhY2hlZCBhbmQgSElSQyBmcmVxdWVuY3kgc3RpbGwgbm90IGxvY2tlZC4KKyAgICAgKiB8WzJdICAgICB8Q0xLRVJSSUYgIHxDbG9jayBFcnJvciBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgZnJlcXVlbmN5IG9mIDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKSBvciAxMk1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpIGlzIHNoaWZ0IGxhcmdlciB0byB1bnJlYXNvbmFibGUgdmFsdWUsIHRoaXMgYml0IHdpbGwgYmUgc2V0IGFuZCB0byBiZSBhbiBpbmRpY2F0ZSB0aGF0IGNsb2NrIGZyZXF1ZW5jeSBpcyBpbmFjY3VyYWN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25jZSB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgdGhlIGF1dG8gdHJpbSBvcGVyYXRpb24gc3RvcHBlZCBhbmQgRlJFUVNFTChTWVNfVElDVEwxMk1bMTowXSkgd2lsbCBiZSBjbGVhcmVkIHRvIDAwIGJ5IGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgaWYgQ0VTVE9QRU4oU1lTX1RDVEwxMk1bOF0pIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCBhbmQgQ0xLRUlFTihTWVNfVElFTjEyTVsyXSkgaXMgaGlnaCwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHRvIG5vdGlmeSB0aGUgY2xvY2sgZnJlcXVlbmN5IGlzIGluYWNjdXJhY3kuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBjbGVhciB0aGlzIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENsb2NrIGZyZXF1ZW5jeSBpcyBhY2N1cmFjeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xvY2sgZnJlcXVlbmN5IGlzIGluYWNjdXJhY3kuCisgICAgICogQHZhciBTWVNfVDo6UkVHTENUTAorICAgICAqIE9mZnNldDogMHgxMDAgIFJlZ2lzdGVyIExvY2sgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfFJFR0xDVEwgICB8UmVnaXN0ZXIgTG9jayBDb250cm9sIENvZGUgKFdyaXRlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29tZSByZWdpc3RlcnMgaGF2ZSB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0aGVzZSByZWdpc3RlcnMgaGF2ZSB0byBkaXNhYmxlIHRoZSBwcm90ZWN0ZWQgZnVuY3Rpb24gYnkgd3JpdGluZyB0aGUgc2VxdWVuY2UgdmFsdWUgNTloLCAxNmgsIDg4aCB0byB0aGlzIGZpZWxkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFmdGVyIHRoaXMgc2VxdWVuY2UgaXMgY29tcGxldGVkLCB0aGUgUkVHTENUTCBiaXQgd2lsbCBiZSBzZXQgdG8gMSBhbmQgd3JpdGUtcHJvdGVjdGlvbiByZWdpc3RlcnMgY2FuIGJlIG5vcm1hbCB3cml0ZS4KKyAgICAgKiB8WzBdICAgICB8UkVHTENUTFswXXxSZWdpc3RlciBMb2NrIENvbnRyb2wgRGlzYWJsZSBJbmRleCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXcml0ZS1wcm90ZWN0aW9uIEVuYWJsZWQgZm9yIHdyaXRpbmcgcHJvdGVjdGVkIHJlZ2lzdGVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBbnkgd3JpdGUgdG8gdGhlIHByb3RlY3RlZCByZWdpc3RlciBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXcml0ZS1wcm90ZWN0aW9uIERpc2FibGVkIGZvciB3cml0aW5nIHByb3RlY3RlZCByZWdpc3RlcnMuCisgICAgICogQHZhciBTWVNfVDo6UE9SQ1RMMQorICAgICAqIE9mZnNldDogMHgxRUMgIFBvd2VyLW9uIFJlc2V0IENvbnRyb2xsZXIgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFBPUk9GRiAgICB8UG93ZXItb24gUmVzZXQgRW5hYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHBvd2VyZWQgb24sIHRoZSBQT1IgY2lyY3VpdCBnZW5lcmF0ZXMgYSByZXNldCBzaWduYWwgdG8gcmVzZXQgdGhlIHdob2xlIGNoaXAgZnVuY3Rpb24sIGJ1dCBub2lzZSBvbiB0aGUgcG93ZXIgbWF5IGNhdXNlIHRoZSBQT1IgYWN0aXZlIGFnYWluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGRpc2FibGUgaW50ZXJuYWwgUE9SIGNpcmN1aXQgdG8gYXZvaWQgdW5wcmVkaWN0YWJsZSBub2lzZSB0byBjYXVzZSBjaGlwIHJlc2V0IGJ5IHdyaXRpbmcgMHg1QUE1IHRvIHRoaXMgZmllbGQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFBPUiBmdW5jdGlvbiB3aWxsIGJlIGFjdGl2ZSBhZ2FpbiB3aGVuICB0aGlzIGZpZWxkIGlzIHNldCB0byBhbm90aGVyIHZhbHVlIG9yIGNoaXAgaXMgcmVzZXQgYnkgb3RoZXIgcmVzZXQgc291cmNlLCBpbmNsdWRpbmc6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8blJFU0VULCBXYXRjaGRvZywgTFZSIHJlc2V0LCBCT0QgcmVzZXQsIElDRSByZXNldCBjb21tYW5kIGFuZCB0aGUgc29mdHdhcmUtY2hpcCByZXNldCBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFNZU19UOjpQTENUTAorICAgICAqIE9mZnNldDogMHgxRjggIFBvd2VyIExldmVsIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxQTFNFTCAgICAgfFBvd2VyIExldmVsIFNlbGVjdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFNldCB0byBQb3dlciBsZXZlbCAwIChQTDApLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gU2V0IHRvIFBvd2VyIGxldmVsIDEgKFBMMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs0XSAgICAgfE1WUlMgICAgICB8TWFpbiBWb2x0YWdlIFJlZ3VsYXRvciBUeXBlIFNlbGVjdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWxlZCBzZXRzIG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBZnRlciBzZXR0aW5nIG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSB0byBEQ0RDIChNVlJTIChTWVNfUExDVExbNF0pID0gMSkgc3lzdGVtIHdpbGwgc2V0IG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBjaGFuZ2UgYnVzeSBmbGFnIE1WUkNCVVNZKFNZU19QTFNUU1sxXSksIGRldGVjdCBpbmR1Y3RvciBjb25uZWN0aW9uIGFuZCB1cGRhdGUgaW5kdWN0b3IgY29ubmVjdGlvbiBzdGF0dXMgTENPTlMgKFNZU19QTFNUU1szXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgaW5kdWN0b3IgZXhpc3QgTENPTlMgd2lsbCBiZSBjbGVhcmQgYW5kIG1haW4gdmlsdGFnZSByZWd1bGF0b3IgdHlwZSBjYW4gc3dpdGNoIHRvIERDREMgKENVUk1WUlMgKFNZU19QTFNUU1sxMl0pPTEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTZXQgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0byBMRE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNldCBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHRvIERDREMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsyMToxNl0gfExWU1NURVAgICB8TERPIFZvbHRhZ2UgU2NhbGluZyBTdGVwIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBMVlNTVEVQIHZhbHVlIGlzIExETyB2b2x0YWdlIHJpc2luZyBzdGVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfExETyB2b2x0YWdlIHNjYWxpbmcgc3RlcCA9IChMVlNTVEVQICsgMSkgKiAxMG1WLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMzE6MjRdIHxMVlNQUkQgICAgfExETyBWb2x0YWdlIFNjYWxpbmcgUGVyaW9kIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBMVlNQUkQgdmFsdWUgaXMgdGhlIHBlcmlvZCBvZiBlYWNoIExETyB2b2x0YWdlIHJpc2luZyBzdGVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfExETyB2b2x0YWdlIHNjYWxpbmcgcGVyaW9kID0gKExWU1BSRCArIDEpICogMXVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgU1lTX1Q6OlBMU1RTCisgICAgICogT2Zmc2V0OiAweDFGQyAgUG93ZXIgTGV2ZWwgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UExDQlVTWSAgIHxQb3dlciBMZXZlbCBDaGFuZ2UgQnVzeSBCaXQgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBwb3dlciBsZXZlbCBpcyBjaGFuZ2luZyAuIEFmdGVyIHBvd2VyIGxldmVsIGNoYW5nZSBpcyBjb21wbGV0ZWQsIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQb3dlciBsZXZlbCBjaGFuZ2UgaXMgY29tcGxldGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQb3dlciBsZXZlbCBjaGFuZ2UgaXMgb25nb2luZy4KKyAgICAgKiB8WzFdICAgICB8TVZSQ0JVU1kgIHxNYWluIFZvbHRhZ2UgUmVndWxhdG9yIFR5cGUgQ2hhbmdlIEJ1c3kgQml0IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGlzIGNoYW5naW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFmdGVyIG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBjaGFuZ2UgaXMgY29tcGxldGVkLCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSBieSBoYXJkd2FyZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGNoYW5nZSBpcyBjb21wbGV0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBjaGFuZ2UgaXMgb25nb2luZy4KKyAgICAgKiB8WzJdICAgICB8TVZSQ0VSUiAgIHxNYWluIFZvbHRhZ2UgUmVndWxhdG9yIFR5cGUgQ2hhbmdlIEVycm9yIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gMSB3aGVuIG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBjaGFuZ2UgZnJvbSBMRE8gdG8gRENEQyBlcnJvciwgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIHdpbGwgY2F1c2UgY2hhbmdlIGVycm9yczoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxLlN5c3RlbSBjaGFuZ2UgdG8gREMtREMgbW9kZSBidXQgTERPIGNoYW5nZSB2b2x0YWdlIHByb2Nlc3Mgbm90IGZpbmlzaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyLkRldGVjdCBpbmR1Y3RvciBmYWlsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQ6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBjaGFuZ2UgZXJyb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBjaGFuZ2UgdG8gRENEQyBlcnJvciBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhcnMgTVZSQ0VSUiB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbM10gICAgIHxMQ09OUyAgICAgfEluZHVjdG9yIGZvciBEQy1EQyBDb25uZWN0IFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmR1Y3RvciBjb25uZWN0IGJldHdlZW4gVnN3IGFuZCBMRE9fQ0FQIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB2YWxpZCB3aGVuIGN1cnJlbnQgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGlzIERDREMgKENVUk1WUlMgKFNZU19QTFNUU1sxMl0pPTEpLiBJZiBjdXJyZW50IG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBpcyBMRE8gKENVUk1WUlMgKFNZU19QTFNUU1sxMl0pPTApLCB0aGlzIGJpdCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kdWN0b3IgY29ubmVjdCBiZXR3ZWVuIFZzdyBhbmQgTERPX0NBUCBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE5vIEluZHVjdG9yIGNvbm5lY3QgYmV0d2VlbiBWc3cgYW5kIExET19DQVAgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIDEgd2hlbiBtYWluIHZpbHRhZ2UgcmVndWxhdG9yIGlzIExETy4KKyAgICAgKiB8WzRdICAgICB8UERJTlZUUkYgIHxQb3dlci1kb3duIE1vZGUgSW52YWxpZCBUcmFuc2l0aW9uIEZsYWcgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIGlmIHRoZSByZXF1ZXN0ZWQgYWN0aXZlIERDREMgbW9kZSB0byBQb3dlci1kb3duIG1vZGUgdHJhbnNpdGlvbiBpcyBpbnZhbGlkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgdHJhbnNpdGlvbiByZXF1ZXN0IHdpbGwgYmUgYWJvcnRlZCBieSBoYXJkd2FyZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHNvZnR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQ6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFBvd2VyLWRvd24gbW9kZSBpbnZhbGlkIHRyYW5zaXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBvd2VyLWRvd24gbW9kZSBpbnZhbGlkIHRyYW5zaXRpb24gb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXJzIHRoaXMgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs5OjhdICAgfFBMU1RBVFVTICB8UG93ZXIgTGV2ZWwgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgcmVmbGVjdCB0aGUgY3VycmVudCBwb3dlciBsZXZlbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBvd2VyIGxldmVsIGlzIFBMMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFBvd2VyIGxldmVsIGlzIFBMMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzEyXSAgICB8Q1VSTVZSICAgIHxDdXJyZW50IE1haW4gVm9sdGFnZSBSZWd1bGF0b3IgVHlwZSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIHJlZmxlY3RzIGN1cnJlbnQgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDdXJyZW50IG1haW4gdm9sdGFnZSByZWd1bGF0b3IgaW4gYWN0aXZlIGFuZCBJZGxlIG1vZGUgaXMgTERPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDdXJyZW50IG1haW4gdm9sdGFnZSByZWd1bGF0b3IgaW4gYWN0aXZlIG1vZGUgYW5kIElkbGUgaXMgRENEQy4KKyAgICAgKiBAdmFyIFNZU19UOjpBSEJNQ1RMCisgICAgICogT2Zmc2V0OiAweDQwMCAgQUhCIEJ1cyBNYXRyaXggUHJpb3JpdHkgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfElOVEFDVEVOICB8SGlnaGVzdCBBSEIgQnVzIFByaW9yaXR5IG9mIENvcnRleC1NMjMgQ29yZSBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVuYWJsZSBDb3J0ZXgtTTIzIGNvcmUgd2l0aCBoaWdoZXN0IEFIQiBidXMgcHJpb3JpdHkgaW4gQUhCIGJ1cyBtYXRyaXguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJ1biByb2JpbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb3J0ZXgtTTIzIENQVSB3aXRoIGhpZ2hlc3QgYnVzIHByaW9yaXR5IHdoZW4gaW50ZXJydXB0IG9jY3Vycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKi8KKworICAgIF9fSSAgdWludDMyX3QgUERJRDsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIFBhcnQgRGV2aWNlIElkZW50aWZpY2F0aW9uIE51bWJlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFJTVFNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBTeXN0ZW0gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJUFJTVDA7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gUGVyaXBoZXJhbCAgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSVBSU1QxOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIFBlcmlwaGVyYWwgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElQUlNUMjsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBQZXJpcGhlcmFsIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsxXTsKKyAgICBfX0lPIHVpbnQzMl90IEJPRENUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE4XSBCcm93bi1vdXQgRGV0ZWN0b3IgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJVlNDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxY10gSW50ZXJuYWwgVm9sdGFnZSBTb3VyY2UgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbMV07CisgICAgX19JTyB1aW50MzJfdCBQT1JDVEwwOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAyNF0gUG93ZXItb24gUmVzZXQgQ29udHJvbGxlciBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVlJFRkNUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMjhdIFZSRUYgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFVTQlBIWTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDJDXSBVU0IgUEhZIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUEFfTUZQTDsgICAgICAgICAgICAgIC8qITwgWzB4MDAzMF0gR1BJT0EgTG93IEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BBX01GUEg7ICAgICAgICAgICAgICAvKiE8IFsweDAwMzRdIEdQSU9BIEhpZ2ggQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQQl9NRlBMOyAgICAgICAgICAgICAgLyohPCBbMHgwMDM4XSBHUElPQiBMb3cgQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUEJfTUZQSDsgICAgICAgICAgICAgIC8qITwgWzB4MDAzY10gR1BJT0IgSGlnaCBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BDX01GUEw7ICAgICAgICAgICAgICAvKiE8IFsweDAwNDBdIEdQSU9DIExvdyBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQQ19NRlBIOyAgICAgICAgICAgICAgLyohPCBbMHgwMDQ0XSBHUElPQyBIaWdoIEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUERfTUZQTDsgICAgICAgICAgICAgIC8qITwgWzB4MDA0OF0gR1BJT0QgTG93IEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BEX01GUEg7ICAgICAgICAgICAgICAvKiE8IFsweDAwNGNdIEdQSU9EIEhpZ2ggQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQRV9NRlBMOyAgICAgICAgICAgICAgLyohPCBbMHgwMDUwXSBHUElPRSBMb3cgQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUEVfTUZQSDsgICAgICAgICAgICAgIC8qITwgWzB4MDA1NF0gR1BJT0UgSGlnaCBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BGX01GUEw7ICAgICAgICAgICAgICAvKiE8IFsweDAwNThdIEdQSU9GIExvdyBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQRl9NRlBIOyAgICAgICAgICAgICAgLyohPCBbMHgwMDVDXSBHUElPRiBIaWdoIEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUEdfTUZQTDsgICAgICAgICAgICAgIC8qITwgWzB4MDA2MF0gR1BJT0cgTG93IEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BHX01GUEg7ICAgICAgICAgICAgICAvKiE8IFsweDAwNjRdIEdQSU9HIEhpZ2ggQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQSF9NRlBMOyAgICAgICAgICAgICAgLyohPCBbMHgwMDY4XSBHUElPSCBMb3cgQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUEhfTUZQSDsgICAgICAgICAgICAgIC8qITwgWzB4MDA2Q10gR1BJT0ggSGlnaCBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTJbNF07CisgICAgX19JTyB1aW50MzJfdCBHUEFfTUZPUzsgICAgICAgICAgICAgIC8qITwgWzB4MDA4MF0gR1BJT0EgTXVsdGlwbGUgRnVuY3Rpb24gT3V0cHV0IFNlbGVjdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BCX01GT1M7ICAgICAgICAgICAgICAvKiE8IFsweDAwODRdIEdQSU9CIE11bHRpcGxlIEZ1bmN0aW9uIE91dHB1dCBTZWxlY3QgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQQ19NRk9TOyAgICAgICAgICAgICAgLyohPCBbMHgwMDg4XSBHUElPQyBNdWx0aXBsZSBGdW5jdGlvbiBPdXRwdXQgU2VsZWN0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUERfTUZPUzsgICAgICAgICAgICAgIC8qITwgWzB4MDA4Y10gR1BJT0QgTXVsdGlwbGUgRnVuY3Rpb24gT3V0cHV0IFNlbGVjdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BFX01GT1M7ICAgICAgICAgICAgICAvKiE8IFsweDAwOTBdIEdQSU9FIE11bHRpcGxlIEZ1bmN0aW9uIE91dHB1dCBTZWxlY3QgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQRl9NRk9TOyAgICAgICAgICAgICAgLyohPCBbMHgwMDk0XSBHUElPRiBNdWx0aXBsZSBGdW5jdGlvbiBPdXRwdXQgU2VsZWN0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUEdfTUZPUzsgICAgICAgICAgICAgIC8qITwgWzB4MDA5OF0gR1BJT0cgTXVsdGlwbGUgRnVuY3Rpb24gT3V0cHV0IFNlbGVjdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BIX01GT1M7ICAgICAgICAgICAgICAvKiE8IFsweDAwOWNdIEdQSU9IIE11bHRpcGxlIEZ1bmN0aW9uIE91dHB1dCBTZWxlY3QgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUzWzhdOworICAgIF9fSU8gdWludDMyX3QgU1JBTUlDVEw7ICAgICAgICAgICAgICAvKiE8IFsweDAwQzBdIFN5c3RlbSBTUkFNIEludGVycnVwdCBFbmFibGUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNSQU1TVFM7ICAgICAgICAgICAgICAgLyohPCBbMHgwMEM0XSBTeXN0ZW0gU1JBTSBQYXJpdHkgRXJyb3IgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTUkFNRUFEUjsgICAgICAgICAgICAgIC8qITwgWzB4MDBDOF0gU3lzdGVtIFNSQU0gUGFyaXR5IENoZWNrIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUkVTRVJWRTRbNF07CisgICAgX19JTyB1aW50MzJfdCBTUkFNUENUTDsgICAgICAgICAgICAgIC8qITwgWzB4MDBEQ10gU3lzdGVtIFNSQU0gUG93ZXIgTW9kZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1JBTVBQQ1Q7ICAgICAgICAgICAgICAvKiE8IFsweDAwRTBdIFBlcmlwaGVyYWwgU1JBTSBQb3dlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRDVEw0OE07ICAgICAgICAgICAgICAgLyohPCBbMHgwMEU0XSBISVJDIDQ4TSBUcmltIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUSUVONDhNOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBFOF0gSElSQyA0OE0gVHJpbSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVElTVFM0OE07ICAgICAgICAgICAgICAvKiE8IFsweDAwRUNdIEhJUkMgNDhNIFRyaW0gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRDVEwxMk07ICAgICAgICAgICAgICAgLyohPCBbMHgwMEYwXSBISVJDIDEyTSBUcmltIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUSUVOMTJNOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBGNF0gSElSQyAxMk0gVHJpbSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVElTVFMxMk07ICAgICAgICAgICAgICAvKiE8IFsweDAwRjhdIEhJUkMgMTJNIFRyaW0gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU2WzFdOworICAgIF9fSU8gdWludDMyX3QgUkVHTENUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAxMDBdIFJlZ2lzdGVyIExvY2sgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU3WzU4XTsKKyAgICBfX0lPIHVpbnQzMl90IFBPUkNUTDE7ICAgICAgICAgICAgICAgLyohPCBbMHgwMUVDXSBQb3dlci1vbiBSZXNldCBDb250cm9sbGVyIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFOFsyXTsKKyAgICBfX0lPIHVpbnQzMl90IFBMQ1RMOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMUY4XSBQb3dlciBMZXZlbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQTFNUUzsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDFGQ10gUG93ZXIgTGV2ZWwgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTlbMTI4XTsKKyAgICBfX0lPIHVpbnQzMl90IEFIQk1DVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwNDAwXSBBSEIgQnVzIE1hdHJpeCBQcmlvcml0eSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKworfSBTWVNfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgU1lTX0NPTlNUIFNZUyBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBTWVMgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBTWVNfUERJRF9QRElEX1BvcyAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBESUQ6IFBESUQgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1BESURfUERJRF9Nc2sgICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTWVNfUERJRF9QRElEX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQRElEOiBQRElEIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1JTVFNUU19QT1JGX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSU1RTVFM6IFBPUkYgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNZU19SU1RTVFNfUE9SRl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfUlNUU1RTX1BPUkZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UlNUU1RTOiBQT1JGIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19SU1RTVFNfUElOUkZfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UlNUU1RTOiBQSU5SRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfUlNUU1RTX1BJTlJGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX1JTVFNUU19QSU5SRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlJTVFNUUzogUElOUkYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUlNUU1RTX1dEVFJGX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlJTVFNUUzogV0RUUkYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1JTVFNUU19XRFRSRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19SU1RTVFNfV0RUUkZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSU1RTVFM6IFdEVFJGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1JTVFNUU19MVlJGX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSU1RTVFM6IExWUkYgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNZU19SU1RTVFNfTFZSRl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfUlNUU1RTX0xWUkZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UlNUU1RTOiBMVlJGIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19SU1RTVFNfQk9EUkZfUG9zICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UlNUU1RTOiBCT0RSRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfUlNUU1RTX0JPRFJGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX1JTVFNUU19CT0RSRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlJTVFNUUzogQk9EUkYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUlNUU1RTX1NZU1JGX1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlJTVFNUUzogU1lTUkYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1JTVFNUU19TWVNSRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19SU1RTVFNfU1lTUkZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSU1RTVFM6IFNZU1JGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1JTVFNUU19DUFVSRl9Qb3MgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSU1RTVFM6IENQVVJGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNZU19SU1RTVFNfQ1BVUkZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfUlNUU1RTX0NQVVJGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UlNUU1RTOiBDUFVSRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19SU1RTVFNfQ1BVTEtSRl9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UlNUU1RTOiBDUFVMS1JGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfUlNUU1RTX0NQVUxLUkZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX1JTVFNUU19DUFVMS1JGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlJTVFNUUzogQ1BVTEtSRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QwX0NISVBSU1RfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMDogQ0hJUFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMF9DSElQUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDBfQ0hJUFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDA6IENISVBSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMF9DUFVSU1RfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDA6IENQVVJTVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDBfQ1BVUlNUX01zayAgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QwX0NQVVJTVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QwOiBDUFVSU1QgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDBfUERNQTBSU1RfUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QwOiBQRE1BMFJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QwX1BETUEwUlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMF9QRE1BMFJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMDogUERNQTBSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QwX0VCSVJTVF9Qb3MgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMDogRUJJUlNUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMF9FQklSU1RfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDBfRUJJUlNUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDA6IEVCSVJTVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMF9VU0JIUlNUX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDA6IFVTQkhSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDBfVVNCSFJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QwX1VTQkhSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QwOiBVU0JIUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDBfU0RIMFJTVF9Qb3MgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QwOiBTREgwUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QwX1NESDBSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMF9TREgwUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMDogU0RIMFJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QwX0NSQ1JTVF9Qb3MgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMDogQ1JDUlNUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMF9DUkNSU1RfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDBfQ1JDUlNUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDA6IENSQ1JTVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMF9DUlBUUlNUX1BvcyAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDA6IENSUFRSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDBfQ1JQVFJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QwX0NSUFRSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QwOiBDUlBUUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDBfUERNQTFSU1RfUG9zICAgICAgICAgICgyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QwOiBQRE1BMVJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QwX1BETUExUlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMF9QRE1BMVJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMDogUERNQTFSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX0dQSU9SU1RfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogR1BJT1JTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9HUElPUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfR1BJT1JTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IEdQSU9SU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9UTVIwUlNUX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFRNUjBSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfVE1SMFJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX1RNUjBSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBUTVIwUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfVE1SMVJTVF9Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBUTVIxUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX1RNUjFSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9UTVIxUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVE1SMVJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX1RNUjJSU1RfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVE1SMlJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9UTVIyUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfVE1SMlJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFRNUjJSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9UTVIzUlNUX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFRNUjNSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfVE1SM1JTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX1RNUjNSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBUTVIzUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfQUNNUDAxUlNUX1BvcyAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBBQ01QMDFSU1QgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX0FDTVAwMVJTVF9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9BQ01QMDFSU1RfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogQUNNUDAxUlNUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX0kyQzBSU1RfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogSTJDMFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9JMkMwUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfSTJDMFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IEkyQzBSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9JMkMxUlNUX1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IEkyQzFSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfSTJDMVJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX0kyQzFSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBJMkMxUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfSTJDMlJTVF9Qb3MgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBJMkMyUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX0kyQzJSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9JMkMyUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogSTJDMlJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX1FTUEkwUlNUX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogUVNQSTBSU1QgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9RU1BJMFJTVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfUVNQSTBSU1RfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFFTUEkwUlNUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9TUEkwUlNUX1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFNQSTBSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfU1BJMFJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX1NQSTBSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBTUEkwUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfU1BJMVJTVF9Qb3MgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBTUEkxUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX1NQSTFSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9TUEkxUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogU1BJMVJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX1NQSTJSU1RfUG9zICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogU1BJMlJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9TUEkyUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfU1BJMlJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFNQSTJSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9VQVJUMFJTVF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFVBUlQwUlNUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfVUFSVDBSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX1VBUlQwUlNUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBVQVJUMFJTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfVUFSVDFSU1RfUG9zICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBVQVJUMVJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX1VBUlQxUlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9VQVJUMVJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVUFSVDFSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX1VBUlQyUlNUX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVUFSVDJSU1QgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9VQVJUMlJTVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfVUFSVDJSU1RfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFVBUlQyUlNUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9VQVJUM1JTVF9Qb3MgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFVBUlQzUlNUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfVUFSVDNSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX1VBUlQzUlNUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBVQVJUM1JTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfVUFSVDRSU1RfUG9zICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBVQVJUNFJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX1VBUlQ0UlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9VQVJUNFJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVUFSVDRSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX1VBUlQ1UlNUX1BvcyAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVUFSVDVSU1QgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9VQVJUNVJTVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfVUFSVDVSU1RfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFVBUlQ1UlNUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9DQU4wUlNUX1BvcyAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IENBTjBSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfQ0FOMFJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX0NBTjBSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBDQU4wUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfT1RHUlNUX1BvcyAgICAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBPVEdSU1QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX09UR1JTVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9PVEdSU1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogT1RHUlNUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX1VTQkRSU1RfUG9zICAgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVVNCRFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9VU0JEUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfVVNCRFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFVTQkRSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9FQURDUlNUX1BvcyAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IEVBRENSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfRUFEQ1JTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX0VBRENSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBFQURDUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfSTJTMFJTVF9Qb3MgICAgICAgICAgICgyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBJMlMwUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX0kyUzBSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9JMlMwUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogSTJTMFJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX1RSTkdSU1RfUG9zICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVFJOR1JTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9UUk5HUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfVFJOR1JTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFRSTkdSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMl9TQzBSU1RfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IFNDMFJTVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDJfU0MwUlNUX01zayAgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QyX1NDMFJTVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBTQzBSU1QgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDJfU0MxUlNUX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBTQzFSU1QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QyX1NDMVJTVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMl9TQzFSU1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogU0MxUlNUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QyX1NDMlJTVF9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogU0MyUlNUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMl9TQzJSU1RfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDJfU0MyUlNUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IFNDMlJTVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMl9TUEkzUlNUX1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IFNQSTNSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDJfU1BJM1JTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QyX1NQSTNSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBTUEkzUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDJfVVNDSTBSU1RfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBVU0NJMFJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QyX1VTQ0kwUlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMl9VU0NJMFJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogVVNDSTBSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QyX1VTQ0kxUlNUX1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogVVNDSTFSU1QgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMl9VU0NJMVJTVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDJfVVNDSTFSU1RfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IFVTQ0kxUlNUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMl9EQUNSU1RfUG9zICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IERBQ1JTVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDJfREFDUlNUX01zayAgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QyX0RBQ1JTVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBEQUNSU1QgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDJfRVBXTTBSU1RfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBFUFdNMFJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QyX0VQV00wUlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMl9FUFdNMFJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogRVBXTTBSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QyX0VQV00xUlNUX1BvcyAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogRVBXTTFSU1QgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMl9FUFdNMVJTVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDJfRVBXTTFSU1RfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IEVQV00xUlNUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMl9CUFdNMFJTVF9Qb3MgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IEJQV00wUlNUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDJfQlBXTTBSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QyX0JQV00wUlNUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBCUFdNMFJTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDJfQlBXTTFSU1RfUG9zICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBCUFdNMVJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QyX0JQV00xUlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMl9CUFdNMVJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogQlBXTTFSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QyX1FFSTBSU1RfUG9zICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogUUVJMFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMl9RRUkwUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDJfUUVJMFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IFFFSTBSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMl9RRUkxUlNUX1BvcyAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IFFFSTFSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDJfUUVJMVJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QyX1FFSTFSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBRRUkxUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDJfRUNBUDBSU1RfUG9zICAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBFQ0FQMFJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QyX0VDQVAwUlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMl9FQ0FQMFJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogRUNBUDBSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QyX0VDQVAxUlNUX1BvcyAgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogRUNBUDFSU1QgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMl9FQ0FQMVJTVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDJfRUNBUDFSU1RfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IEVDQVAxUlNUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RFTl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpCT0RDVEw6IEJPREVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNZU19CT0RDVExfQk9ERU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfQk9EQ1RMX0JPREVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6Qk9EQ1RMOiBCT0RFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19CT0RDVExfQk9EUlNURU5fUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6Qk9EQ1RMOiBCT0RSU1RFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRFJTVEVOX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0JPRENUTF9CT0RSU1RFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkJPRENUTDogQk9EUlNURU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRElGX1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkJPRENUTDogQk9ESUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RJRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19CT0RDVExfQk9ESUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpCT0RDVEw6IEJPRElGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RMUE1fUG9zICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpCT0RDVEw6IEJPRExQTSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19CT0RDVExfQk9ETFBNX01zayAgICAgICAgICAgICgweDF1bCA8PCBTWVNfQk9EQ1RMX0JPRExQTV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6Qk9EQ1RMOiBCT0RMUE0gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19CT0RDVExfQk9ET1VUX1BvcyAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6Qk9EQ1RMOiBCT0RPVVQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRE9VVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0JPRENUTF9CT0RPVVRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkJPRENUTDogQk9ET1VUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfQk9EQ1RMX0xWUkVOX1BvcyAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkJPRENUTDogTFZSRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0JPRENUTF9MVlJFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19CT0RDVExfTFZSRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpCT0RDVEw6IExWUkVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RER1NFTF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpCT0RDVEw6IEJPRERHU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19CT0RDVExfQk9EREdTRUxfTXNrICAgICAgICAgICgweDd1bCA8PCBTWVNfQk9EQ1RMX0JPRERHU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6Qk9EQ1RMOiBCT0RER1NFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19CT0RDVExfTFZSREdTRUxfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6Qk9EQ1RMOiBMVlJER1NFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfQk9EQ1RMX0xWUkRHU0VMX01zayAgICAgICAgICAoMHg3dWwgPDwgU1lTX0JPRENUTF9MVlJER1NFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkJPRENUTDogTFZSREdTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRFZMX1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkJPRENUTDogQk9EVkwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RWTF9Nc2sgICAgICAgICAgICAgKDB4N3VsIDw8IFNZU19CT0RDVExfQk9EVkxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpCT0RDVEw6IEJPRFZMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lWU0NUTF9WVEVNUEVOX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJVlNDVEw6IFZURU1QRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JVlNDVExfVlRFTVBFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVZTQ1RMX1ZURU1QRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVZTQ1RMOiBWVEVNUEVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JVlNDVExfVkJBVFVHRU5fUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVZTQ1RMOiBWQkFUVUdFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVZTQ1RMX1ZCQVRVR0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lWU0NUTF9WQkFUVUdFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklWU0NUTDogVkJBVFVHRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUE9SQ1RMMF9QT1JNQVNLX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBPUkNUTDA6IFBPUk1BU0sgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX1BPUkNUTDBfUE9STUFTS19Nc2sgICAgICAgICAgKDB4ZmZmZnVsIDw8IFNZU19QT1JDVEwwX1BPUk1BU0tfUG9zKSAgICAgICAgICAgICAvKiE8IFNZU19UOjpQT1JDVEwwOiBQT1JNQVNLIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1ZSRUZDVExfVlJFRkNUTF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpWUkVGQ1RMOiBWUkVGQ1RMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19WUkVGQ1RMX1ZSRUZDVExfTXNrICAgICAgICAgICgweDFmdWwgPDwgU1lTX1ZSRUZDVExfVlJFRkNUTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VlJFRkNUTDogVlJFRkNUTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19WUkVGQ1RMX0lCSUFTU0VMX1BvcyAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VlJFRkNUTDogSUJJQVNTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfVlJFRkNUTF9JQklBU1NFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1lTX1ZSRUZDVExfSUJJQVNTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlZSRUZDVEw6IElCSUFTU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVlJFRkNUTF9QUkVMT0FEU0VMX1BvcyAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlZSRUZDVEw6IFBSRUxPQURTRUwgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgU1lTX1ZSRUZDVExfUFJFTE9BRFNFTF9Nc2sgICAgICAgKDB4M3VsIDw8IFNZU19WUkVGQ1RMX1BSRUxPQURTRUxfUG9zKSAgICAgICAgICAgICAvKiE8IFNZU19UOjpWUkVGQ1RMOiBQUkVMT0FEU0VMIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1VTQlBIWV9VU0JST0xFX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpVU0JQSFk6IFVTQlJPTEUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19VU0JQSFlfVVNCUk9MRV9Nc2sgICAgICAgICAgICgweDN1bCA8PCBTWVNfVVNCUEhZX1VTQlJPTEVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VVNCUEhZOiBVU0JST0xFIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19VU0JQSFlfU0JPX1BvcyAgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VVNCUEhZOiBTQk8gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTWVNfVVNCUEhZX1NCT19Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX1VTQlBIWV9TQk9fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlVTQlBIWTogU0JPIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVVNCUEhZX09UR1BIWUVOX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlVTQlBIWTogT1RHUEhZRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX1VTQlBIWV9PVEdQSFlFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19VU0JQSFlfT1RHUEhZRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpVU0JQSFk6IE9UR1BIWUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBME1GUF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQTDogUEEwTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTBNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BBX01GUExfUEEwTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEw6IFBBME1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTFNRlBfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEw6IFBBMU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEExTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQV9NRlBMX1BBMU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBMOiBQQTFNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GUExfUEEyTUZQX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBMOiBQQTJNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMk1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEFfTUZQTF9QQTJNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQTDogUEEyTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBM01GUF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQTDogUEEzTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTNNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BBX01GUExfUEEzTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEw6IFBBM01GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTRNRlBfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEw6IFBBNE1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE0TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQV9NRlBMX1BBNE1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBMOiBQQTRNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GUExfUEE1TUZQX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBMOiBQQTVNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEFfTUZQTF9QQTVNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQTDogUEE1TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNk1GUF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQTDogUEE2TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTZNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BBX01GUExfUEE2TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEw6IFBBNk1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTdNRlBfUG9zICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEw6IFBBN01GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE3TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQV9NRlBMX1BBN01GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBMOiBQQTdNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE4TUZQX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBIOiBQQThNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOE1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEFfTUZQSF9QQThNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQSDogUEE4TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOU1GUF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQSDogUEE5TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTlNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BBX01GUEhfUEE5TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEg6IFBBOU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEwTUZQX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEg6IFBBMTBNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExME1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQV9NRlBIX1BBMTBNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBIOiBQQTEwTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMU1GUF9Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBIOiBQQTExTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTFNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEFfTUZQSF9QQTExTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQSDogUEExMU1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTJNRlBfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQSDogUEExMk1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEyTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BBX01GUEhfUEExMk1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEg6IFBBMTJNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEzTUZQX1BvcyAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEg6IFBBMTNNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExM01GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQV9NRlBIX1BBMTNNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBIOiBQQTEzTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNE1GUF9Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBIOiBQQTE0TUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTRNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEFfTUZQSF9QQTE0TUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQSDogUEExNE1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTVNRlBfUG9zICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQSDogUEExNU1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE1TUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BBX01GUEhfUEExNU1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEg6IFBBMTVNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjBNRlBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEw6IFBCME1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIwTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQl9NRlBMX1BCME1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBMOiBQQjBNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GUExfUEIxTUZQX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBMOiBQQjFNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEJfTUZQTF9QQjFNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQTDogUEIxTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMk1GUF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQTDogUEIyTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjJNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BCX01GUExfUEIyTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEw6IFBCMk1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjNNRlBfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEw6IFBCM01GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIzTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQl9NRlBMX1BCM01GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBMOiBQQjNNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GUExfUEI0TUZQX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBMOiBQQjRNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNE1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEJfTUZQTF9QQjRNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQTDogUEI0TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNU1GUF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQTDogUEI1TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjVNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BCX01GUExfUEI1TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEw6IFBCNU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjZNRlBfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEw6IFBCNk1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI2TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQl9NRlBMX1BCNk1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBMOiBQQjZNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GUExfUEI3TUZQX1BvcyAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBMOiBQQjdNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCN01GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEJfTUZQTF9QQjdNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQTDogUEI3TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOE1GUF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQSDogUEI4TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjhNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BCX01GUEhfUEI4TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEg6IFBCOE1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjlNRlBfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEg6IFBCOU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI5TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQl9NRlBIX1BCOU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBIOiBQQjlNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxME1GUF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBIOiBQQjEwTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTBNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEJfTUZQSF9QQjEwTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQSDogUEIxME1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTFNRlBfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQSDogUEIxMU1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjExTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BCX01GUEhfUEIxMU1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEg6IFBCMTFNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEyTUZQX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEg6IFBCMTJNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMk1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQl9NRlBIX1BCMTJNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBIOiBQQjEyTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxM01GUF9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBIOiBQQjEzTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTNNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEJfTUZQSF9QQjEzTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQSDogUEIxM01GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTRNRlBfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQSDogUEIxNE1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE0TUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BCX01GUEhfUEIxNE1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEg6IFBCMTRNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE1TUZQX1BvcyAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEg6IFBCMTVNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNU1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQl9NRlBIX1BCMTVNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBIOiBQQjE1TUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GUExfUEMwTUZQX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBMOiBQQzBNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDME1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUENfTUZQTF9QQzBNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQTDogUEMwTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMU1GUF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQTDogUEMxTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzFNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BDX01GUExfUEMxTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEw6IFBDMU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzJNRlBfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEw6IFBDMk1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMyTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQ19NRlBMX1BDMk1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBMOiBQQzJNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GUExfUEMzTUZQX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBMOiBQQzNNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDM01GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUENfTUZQTF9QQzNNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQTDogUEMzTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNE1GUF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQTDogUEM0TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzRNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BDX01GUExfUEM0TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEw6IFBDNE1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzVNRlBfUG9zICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEw6IFBDNU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM1TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQ19NRlBMX1BDNU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBMOiBQQzVNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GUExfUEM2TUZQX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBMOiBQQzZNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNk1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUENfTUZQTF9QQzZNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQTDogUEM2TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDN01GUF9Qb3MgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQTDogUEM3TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzdNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BDX01GUExfUEM3TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEw6IFBDN01GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzhNRlBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEg6IFBDOE1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEM4TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQ19NRlBIX1BDOE1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBIOiBQQzhNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GUEhfUEM5TUZQX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBIOiBQQzlNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDOU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUENfTUZQSF9QQzlNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQSDogUEM5TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTBNRlBfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQSDogUEMxME1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEwTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BDX01GUEhfUEMxME1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEg6IFBDMTBNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzExTUZQX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEg6IFBDMTFNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMU1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQ19NRlBIX1BDMTFNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBIOiBQQzExTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMk1GUF9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBIOiBQQzEyTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTJNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUENfTUZQSF9QQzEyTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQSDogUEMxMk1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTNNRlBfUG9zICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQSDogUEMxM01GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEzTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BDX01GUEhfUEMxM01GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEg6IFBDMTNNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDBNRlBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEw6IFBEME1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQwTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRF9NRlBMX1BEME1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBMOiBQRDBNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GUExfUEQxTUZQX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBMOiBQRDFNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUERfTUZQTF9QRDFNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQTDogUEQxTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMk1GUF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQTDogUEQyTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDJNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BEX01GUExfUEQyTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEw6IFBEMk1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDNNRlBfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEw6IFBEM01GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQzTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRF9NRlBMX1BEM01GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBMOiBQRDNNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ0TUZQX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBMOiBQRDRNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENE1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUERfTUZQTF9QRDRNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQTDogUEQ0TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENU1GUF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQTDogUEQ1TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDVNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BEX01GUExfUEQ1TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEw6IFBENU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDZNRlBfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEw6IFBENk1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ2TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRF9NRlBMX1BENk1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBMOiBQRDZNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ3TUZQX1BvcyAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBMOiBQRDdNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEN01GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUERfTUZQTF9QRDdNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQTDogUEQ3TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEOE1GUF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQSDogUEQ4TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDhNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BEX01GUEhfUEQ4TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEg6IFBEOE1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDlNRlBfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEg6IFBEOU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQ5TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRF9NRlBIX1BEOU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBIOiBQRDlNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxME1GUF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBIOiBQRDEwTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTBNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUERfTUZQSF9QRDEwTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQSDogUEQxME1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTFNRlBfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQSDogUEQxMU1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDExTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BEX01GUEhfUEQxMU1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEg6IFBEMTFNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEyTUZQX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEg6IFBEMTJNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxMk1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRF9NRlBIX1BEMTJNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBIOiBQRDEyTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxM01GUF9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBIOiBQRDEzTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTNNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUERfTUZQSF9QRDEzTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQSDogUEQxM01GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTRNRlBfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQSDogUEQxNE1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDE0TUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BEX01GUEhfUEQxNE1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEg6IFBEMTRNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTBNRlBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEw6IFBFME1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUwTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRV9NRlBMX1BFME1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBMOiBQRTBNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GUExfUEUxTUZQX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBMOiBQRTFNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEVfTUZQTF9QRTFNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQTDogUEUxTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMk1GUF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQTDogUEUyTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTJNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BFX01GUExfUEUyTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEw6IFBFMk1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTNNRlBfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEw6IFBFM01GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUzTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRV9NRlBMX1BFM01GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBMOiBQRTNNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GUExfUEU0TUZQX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBMOiBQRTRNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNE1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEVfTUZQTF9QRTRNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQTDogUEU0TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNU1GUF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQTDogUEU1TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTVNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BFX01GUExfUEU1TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEw6IFBFNU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTZNRlBfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEw6IFBFNk1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU2TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRV9NRlBMX1BFNk1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBMOiBQRTZNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GUExfUEU3TUZQX1BvcyAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBMOiBQRTdNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFN01GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEVfTUZQTF9QRTdNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQTDogUEU3TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOE1GUF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQSDogUEU4TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRThNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BFX01GUEhfUEU4TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEg6IFBFOE1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTlNRlBfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEg6IFBFOU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU5TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRV9NRlBIX1BFOU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBIOiBQRTlNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxME1GUF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBIOiBQRTEwTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTBNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEVfTUZQSF9QRTEwTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQSDogUEUxME1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTFNRlBfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQSDogUEUxMU1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTExTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BFX01GUEhfUEUxMU1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEg6IFBFMTFNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEyTUZQX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEg6IFBFMTJNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMk1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRV9NRlBIX1BFMTJNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBIOiBQRTEyTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxM01GUF9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBIOiBQRTEzTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTNNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEVfTUZQSF9QRTEzTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQSDogUEUxM01GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTRNRlBfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQSDogUEUxNE1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTE0TUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BFX01GUEhfUEUxNE1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEg6IFBFMTRNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTE1TUZQX1BvcyAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEg6IFBFMTVNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxNU1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRV9NRlBIX1BFMTVNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBIOiBQRTE1TUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GUExfUEYwTUZQX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBMOiBQRjBNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGME1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEZfTUZQTF9QRjBNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQTDogUEYwTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGMU1GUF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQTDogUEYxTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjFNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BGX01GUExfUEYxTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEw6IFBGMU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjJNRlBfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEw6IFBGMk1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYyTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRl9NRlBMX1BGMk1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBMOiBQRjJNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GUExfUEYzTUZQX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBMOiBQRjNNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGM01GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEZfTUZQTF9QRjNNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQTDogUEYzTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNE1GUF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQTDogUEY0TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjRNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BGX01GUExfUEY0TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEw6IFBGNE1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjVNRlBfUG9zICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEw6IFBGNU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY1TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRl9NRlBMX1BGNU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBMOiBQRjVNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GUExfUEY2TUZQX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBMOiBQRjZNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNk1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEZfTUZQTF9QRjZNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQTDogUEY2TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGN01GUF9Qb3MgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQTDogUEY3TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjdNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BGX01GUExfUEY3TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEw6IFBGN01GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjhNRlBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEg6IFBGOE1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEY4TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRl9NRlBIX1BGOE1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBIOiBQRjhNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GUEhfUEY5TUZQX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBIOiBQRjlNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGOU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEZfTUZQSF9QRjlNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQSDogUEY5TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGMTBNRlBfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQSDogUEYxME1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjEwTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BGX01GUEhfUEYxME1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEg6IFBGMTBNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjExTUZQX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEg6IFBGMTFNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEYxMU1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRl9NRlBIX1BGMTFNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBIOiBQRjExTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GUExfUEcyTUZQX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBMOiBQRzJNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHMk1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEdfTUZQTF9QRzJNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQTDogUEcyTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHM01GUF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQTDogUEczTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzNNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BHX01GUExfUEczTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEw6IFBHM01GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzRNRlBfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEw6IFBHNE1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEc0TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQR19NRlBMX1BHNE1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBMOiBQRzRNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GUEhfUEc5TUZQX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBIOiBQRzlNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHOU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEdfTUZQSF9QRzlNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQSDogUEc5TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTBNRlBfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQSDogUEcxME1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzEwTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BHX01GUEhfUEcxME1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEg6IFBHMTBNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzExTUZQX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEg6IFBHMTFNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxMU1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQR19NRlBIX1BHMTFNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBIOiBQRzExTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxMk1GUF9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBIOiBQRzEyTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTJNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEdfTUZQSF9QRzEyTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQSDogUEcxMk1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTNNRlBfUG9zICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQSDogUEcxM01GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzEzTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BHX01GUEhfUEcxM01GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEg6IFBHMTNNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzE0TUZQX1BvcyAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEg6IFBHMTRNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxNE1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQR19NRlBIX1BHMTRNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBIOiBQRzE0TUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxNU1GUF9Qb3MgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBIOiBQRzE1TUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTVNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEdfTUZQSF9QRzE1TUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQSDogUEcxNU1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BINE1GUF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZQTDogUEg0TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDRNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BIX01GUExfUEg0TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GUEw6IFBINE1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDVNRlBfUG9zICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GUEw6IFBINU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUExfUEg1TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQSF9NRlBMX1BINU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRlBMOiBQSDVNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BIX01GUExfUEg2TUZQX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRlBMOiBQSDZNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BINk1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEhfTUZQTF9QSDZNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZQTDogUEg2TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BIN01GUF9Qb3MgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZQTDogUEg3TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDdNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BIX01GUExfUEg3TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GUEw6IFBIN01GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDhNRlBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GUEg6IFBIOE1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg4TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQSF9NRlBIX1BIOE1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRlBIOiBQSDhNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg5TUZQX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRlBIOiBQSDlNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEhfTUZQSF9QSDlNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZQSDogUEg5TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTBNRlBfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZQSDogUEgxME1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDEwTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BIX01GUEhfUEgxME1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GUEg6IFBIMTBNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDExTUZQX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GUEg6IFBIMTFNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEgxMU1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQSF9NRlBIX1BIMTFNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRlBIOiBQSDExTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MwX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEFfTUZPU19NRk9TMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MxX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BBX01GT1NfTUZPUzFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TMl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQV9NRk9TX01GT1MyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MzX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEFfTUZPU19NRk9TM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1M0X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TNF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BBX01GT1NfTUZPUzRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1M0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TNV9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1M1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQV9NRk9TX01GT1M1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzZfUG9zICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TNiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1M2X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEFfTUZPU19NRk9TNl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1M3X1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzcgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TN19Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BBX01GT1NfTUZPUzdfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1M3IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TOF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1M4IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzhfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQV9NRk9TX01GT1M4X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TOCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzlfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TOSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1M5X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEFfTUZPU19NRk9TOV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MxMF9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzEwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TMTBfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BBX01GT1NfTUZPUzEwX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MxMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TMTFfUG9zICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MxMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzExX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQV9NRk9TX01GT1MxMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMTEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzEyX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMTIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MxMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEFfTUZPU19NRk9TMTJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzEyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MxM19Qb3MgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzEzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TMTNfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BBX01GT1NfTUZPUzEzX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MxMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TMTRfUG9zICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MxNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzE0X01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQV9NRk9TX01GT1MxNF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMTQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzE1X1BvcyAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMTUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MxNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEFfTUZPU19NRk9TMTVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzE1IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BCX01GT1NfTUZPUzBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TMV9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQl9NRk9TX01GT1MxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MyX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEJfTUZPU19NRk9TMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MzX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BCX01GT1NfTUZPUzNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TNF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1M0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQl9NRk9TX01GT1M0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzVfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1M1X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEJfTUZPU19NRk9TNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1M2X1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TNl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BCX01GT1NfTUZPUzZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1M2IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TN19Qb3MgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1M3IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzdfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQl9NRk9TX01GT1M3X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TNyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzhfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TOCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1M4X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEJfTUZPU19NRk9TOF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzggTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1M5X1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzkgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TOV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BCX01GT1NfTUZPUzlfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1M5IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TMTBfUG9zICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MxMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzEwX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQl9NRk9TX01GT1MxMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMTAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzExX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMTEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MxMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEJfTUZPU19NRk9TMTFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzExIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MxMl9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzEyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TMTJfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BCX01GT1NfTUZPUzEyX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MxMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TMTNfUG9zICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MxMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzEzX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQl9NRk9TX01GT1MxM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMTMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzE0X1BvcyAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMTQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MxNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEJfTUZPU19NRk9TMTRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzE0IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MxNV9Qb3MgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzE1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TMTVfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BCX01GT1NfTUZPUzE1X1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MxNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TMF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1MwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQ19NRk9TX01GT1MwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzFfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1MxX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUENfTUZPU19NRk9TMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1MyX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BDX01GT1NfTUZPUzJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1MyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TM19Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1MzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQ19NRk9TX01GT1MzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzRfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1M0X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUENfTUZPU19NRk9TNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1M1X1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BDX01GT1NfTUZPUzVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1M1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TNl9Qb3MgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1M2IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQ19NRk9TX01GT1M2X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TNiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzdfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TNyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1M3X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUENfTUZPU19NRk9TN19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzcgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1M4X1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzggUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TOF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BDX01GT1NfTUZPUzhfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1M4IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TOV9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1M5IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzlfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQ19NRk9TX01GT1M5X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TOSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzEwX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TMTAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1MxMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUENfTUZPU19NRk9TMTBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzEwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1MxMV9Qb3MgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzExIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TMTFfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BDX01GT1NfTUZPUzExX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1MxMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TMTJfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1MxMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzEyX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQ19NRk9TX01GT1MxMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TMTIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzEzX1BvcyAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TMTMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1MxM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUENfTUZPU19NRk9TMTNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzEzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1MwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BEX01GT1NfTUZPUzBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1MwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TMV9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1MxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRF9NRk9TX01GT1MxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1MyX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUERfTUZPU19NRk9TMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1MzX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BEX01GT1NfTUZPUzNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1MzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TNF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1M0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRF9NRk9TX01GT1M0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzVfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1M1X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUERfTUZPU19NRk9TNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1M2X1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TNl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BEX01GT1NfTUZPUzZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1M2IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TN19Qb3MgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1M3IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzdfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRF9NRk9TX01GT1M3X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TNyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzhfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TOCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1M4X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUERfTUZPU19NRk9TOF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzggTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1M5X1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzkgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TOV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BEX01GT1NfTUZPUzlfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1M5IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TMTBfUG9zICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1MxMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzEwX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRF9NRk9TX01GT1MxMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TMTAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzExX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TMTEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1MxMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUERfTUZPU19NRk9TMTFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzExIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1MxMl9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzEyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TMTJfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BEX01GT1NfTUZPUzEyX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1MxMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TMTNfUG9zICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1MxMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzEzX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRF9NRk9TX01GT1MxM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TMTMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzE0X1BvcyAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TMTQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1MxNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUERfTUZPU19NRk9TMTRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzE0IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BFX01GT1NfTUZPUzBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TMV9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRV9NRk9TX01GT1MxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MyX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEVfTUZPU19NRk9TMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MzX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BFX01GT1NfTUZPUzNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TNF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1M0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRV9NRk9TX01GT1M0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzVfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1M1X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEVfTUZPU19NRk9TNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1M2X1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TNl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BFX01GT1NfTUZPUzZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1M2IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TN19Qb3MgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1M3IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzdfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRV9NRk9TX01GT1M3X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TNyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzhfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TOCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1M4X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEVfTUZPU19NRk9TOF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzggTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1M5X1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzkgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TOV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BFX01GT1NfTUZPUzlfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1M5IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TMTBfUG9zICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MxMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzEwX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRV9NRk9TX01GT1MxMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMTAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzExX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMTEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MxMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEVfTUZPU19NRk9TMTFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzExIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MxMl9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzEyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TMTJfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BFX01GT1NfTUZPUzEyX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MxMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TMTNfUG9zICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MxMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzEzX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRV9NRk9TX01GT1MxM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMTMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzE0X1BvcyAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMTQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MxNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEVfTUZPU19NRk9TMTRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzE0IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MxNV9Qb3MgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzE1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TMTVfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BFX01GT1NfTUZPUzE1X1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MxNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TMF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1MwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRl9NRk9TX01GT1MwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzFfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1MxX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEZfTUZPU19NRk9TMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1MyX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BGX01GT1NfTUZPUzJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1MyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TM19Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1MzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRl9NRk9TX01GT1MzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzRfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1M0X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEZfTUZPU19NRk9TNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1M1X1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BGX01GT1NfTUZPUzVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1M1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TNl9Qb3MgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1M2IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRl9NRk9TX01GT1M2X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TNiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzdfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TNyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1M3X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEZfTUZPU19NRk9TN19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzcgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1M4X1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzggUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TOF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BGX01GT1NfTUZPUzhfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1M4IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TOV9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1M5IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzlfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRl9NRk9TX01GT1M5X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TOSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzEwX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TMTAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1MxMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEZfTUZPU19NRk9TMTBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzEwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1MxMV9Qb3MgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzExIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TMTFfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BGX01GT1NfTUZPUzExX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1MxMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TMl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1MyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQR19NRk9TX01GT1MyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1MzX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEdfTUZPU19NRk9TM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1M0X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TNF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BHX01GT1NfTUZPUzRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1M0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TOV9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1M5IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzlfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQR19NRk9TX01GT1M5X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TOSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzEwX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TMTAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1MxMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEdfTUZPU19NRk9TMTBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzEwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1MxMV9Qb3MgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzExIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TMTFfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BHX01GT1NfTUZPUzExX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1MxMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TMTJfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1MxMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzEyX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQR19NRk9TX01GT1MxMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TMTIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzEzX1BvcyAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TMTMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1MxM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEdfTUZPU19NRk9TMTNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzEzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1MxNF9Qb3MgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzE0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TMTRfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BHX01GT1NfTUZPUzE0X1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1MxNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TMTVfUG9zICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1MxNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzE1X01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQR19NRk9TX01GT1MxNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TMTUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BIX01GT1NfTUZPUzRfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRk9TOiBNRk9TNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRk9TX01GT1M0X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEhfTUZPU19NRk9TNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZPUzogTUZPUzQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQSF9NRk9TX01GT1M1X1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZPUzogTUZPUzUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZPU19NRk9TNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BIX01GT1NfTUZPUzVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GT1M6IE1GT1M1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEhfTUZPU19NRk9TNl9Qb3MgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GT1M6IE1GT1M2IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GT1NfTUZPUzZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQSF9NRk9TX01GT1M2X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRk9TOiBNRk9TNiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BIX01GT1NfTUZPUzdfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRk9TOiBNRk9TNyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRk9TX01GT1M3X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEhfTUZPU19NRk9TN19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZPUzogTUZPUzcgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQSF9NRk9TX01GT1M4X1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZPUzogTUZPUzggUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZPU19NRk9TOF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BIX01GT1NfTUZPUzhfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GT1M6IE1GT1M4IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEhfTUZPU19NRk9TOV9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GT1M6IE1GT1M5IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GT1NfTUZPUzlfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQSF9NRk9TX01GT1M5X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRk9TOiBNRk9TOSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BIX01GT1NfTUZPUzEwX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRk9TOiBNRk9TMTAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRk9TX01GT1MxMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEhfTUZPU19NRk9TMTBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZPUzogTUZPUzEwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQSF9NRk9TX01GT1MxMV9Qb3MgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZPUzogTUZPUzExIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZPU19NRk9TMTFfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BIX01GT1NfTUZPUzExX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GT1M6IE1GT1MxMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19TUkFNSUNUTF9QRVJSSUVOX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTUlDVEw6IFBFUlJJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfU1JBTUlDVExfUEVSUklFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1lTX1NSQU1JQ1RMX1BFUlJJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1JQ1RMOiBQRVJSSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfU1JBTVNUU19QRVJSSUZfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1TVFM6IFBFUlJJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1NSQU1TVFNfUEVSUklGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19TUkFNU1RTX1BFUlJJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNU1RTOiBQRVJSSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1NSQU1FQURSX0VSUkFERFJfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNRUFEUjogRVJSQUREUiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19TUkFNRUFEUl9FUlJBRERSX01zayAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU1lTX1NSQU1FQURSX0VSUkFERFJfUG9zKSAgICAgICAgLyohPCBTWVNfVDo6U1JBTUVBRFI6IEVSUkFERFIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19TUkFNUENUTF9TVEFDS19Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNUQUNLIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfU1JBTVBDVExfU1RBQ0tfTXNrICAgICAgICAgICAoMHhmdWwgPDwgU1lTX1NSQU1QQ1RMX1NUQUNLX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBTVEFDSyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfU1JBTVBDVExfUkVUQ05UX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBSRVRDTlQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1JFVENOVF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IFNZU19TUkFNUENUTF9SRVRDTlRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogUkVUQ05UIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU0wUE0wX1BvcyAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogU1JBTTBQTTAgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNMFBNMF9Nc2sgICAgICAgICgweDN1bCA8PCBTWVNfU1JBTVBDVExfU1JBTTBQTTBfUG9zKSAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNSQU0wUE0wIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNMFBNMV9Qb3MgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNSQU0wUE0xIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBTWVNfU1JBTVBDVExfU1JBTTBQTTFfTXNrICAgICAgICAoMHgzdWwgPDwgU1lTX1NSQU1QQ1RMX1NSQU0wUE0xX1BvcykgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBTUkFNMFBNMSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfU1JBTVBDVExfU1JBTTBQTTJfUG9zICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBTUkFNMFBNMiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU0wUE0yX01zayAgICAgICAgKDB4M3VsIDw8IFNZU19TUkFNUENUTF9TUkFNMFBNMl9Qb3MpICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogU1JBTTBQTTIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU0wUE0zX1BvcyAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogU1JBTTBQTTMgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNMFBNM19Nc2sgICAgICAgICgweDN1bCA8PCBTWVNfU1JBTVBDVExfU1JBTTBQTTNfUG9zKSAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNSQU0wUE0zIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNMVBNMF9Qb3MgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNSQU0xUE0wIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBTWVNfU1JBTVBDVExfU1JBTTFQTTBfTXNrICAgICAgICAoMHgzdWwgPDwgU1lTX1NSQU1QQ1RMX1NSQU0xUE0wX1BvcykgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBTUkFNMVBNMCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfU1JBTVBDVExfU1JBTTFQTTFfUG9zICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBTUkFNMVBNMSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU0xUE0xX01zayAgICAgICAgKDB4M3VsIDw8IFNZU19TUkFNUENUTF9TUkFNMVBNMV9Qb3MpICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogU1JBTTFQTTEgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU0xUE0yX1BvcyAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogU1JBTTFQTTIgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNMVBNMl9Nc2sgICAgICAgICgweDN1bCA8PCBTWVNfU1JBTVBDVExfU1JBTTFQTTJfUG9zKSAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNSQU0xUE0yIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNMVBNM19Qb3MgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNSQU0xUE0zIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBTWVNfU1JBTVBDVExfU1JBTTFQTTNfTXNrICAgICAgICAoMHgzdWwgPDwgU1lTX1NSQU1QQ1RMX1NSQU0xUE0zX1BvcykgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBTUkFNMVBNMyBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfU1JBTVBQQ1RfQ0FOX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QUENUOiBDQU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1NSQU1QUENUX0NBTl9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IFNZU19TUkFNUFBDVF9DQU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUFBDVDogQ0FOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1NSQU1QUENUX1VTQkRfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUFBDVDogVVNCRCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19TUkFNUFBDVF9VU0JEX01zayAgICAgICAgICAgICgweDN1bCA8PCBTWVNfU1JBTVBQQ1RfVVNCRF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBQQ1Q6IFVTQkQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19TUkFNUFBDVF9QRE1BMF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBQQ1Q6IFBETUEwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfU1JBTVBQQ1RfUERNQTBfTXNrICAgICAgICAgICAoMHgzdWwgPDwgU1lTX1NSQU1QUENUX1BETUEwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QUENUOiBQRE1BMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfU1JBTVBQQ1RfUERNQTFfUG9zICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QUENUOiBQRE1BMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1NSQU1QUENUX1BETUExX01zayAgICAgICAgICAgKDB4M3VsIDw8IFNZU19TUkFNUFBDVF9QRE1BMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUFBDVDogUERNQTEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1NSQU1QUENUX0ZNQ19Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUFBDVDogRk1DIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNZU19TUkFNUFBDVF9GTUNfTXNrICAgICAgICAgICAgICgweDN1bCA8PCBTWVNfU1JBTVBQQ1RfRk1DX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBQQ1Q6IEZNQyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19UQ1RMNDhNX0ZSRVFTRUxfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDQ4TTogRlJFUVNFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfVENUTDQ4TV9GUkVRU0VMX01zayAgICAgICAgICAoMHgzdWwgPDwgU1lTX1RDVEw0OE1fRlJFUVNFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEw0OE06IEZSRVFTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVENUTDQ4TV9MT09QU0VMX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEw0OE06IExPT1BTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX1RDVEw0OE1fTE9PUFNFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IFNZU19UQ1RMNDhNX0xPT1BTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMNDhNOiBMT09QU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RDVEw0OE1fUkVUUllDTlRfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMNDhNOiBSRVRSWUNOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19UQ1RMNDhNX1JFVFJZQ05UX01zayAgICAgICAgICgweDN1bCA8PCBTWVNfVENUTDQ4TV9SRVRSWUNOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDQ4TTogUkVUUllDTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19UQ1RMNDhNX0NFU1RPUEVOX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDQ4TTogQ0VTVE9QRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfVENUTDQ4TV9DRVNUT1BFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1lTX1RDVEw0OE1fQ0VTVE9QRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEw0OE06IENFU1RPUEVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVENUTDQ4TV9SRUZDS1NFTF9Qb3MgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEw0OE06IFJFRkNLU0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX1RDVEw0OE1fUkVGQ0tTRUxfTXNrICAgICAgICAgKDB4MXVsIDw8IFNZU19UQ1RMNDhNX1JFRkNLU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMNDhNOiBSRUZDS1NFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RJRU40OE1fVEZBSUxJRU5fUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSUVONDhNOiBURkFJTElFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19USUVONDhNX1RGQUlMSUVOX01zayAgICAgICAgICgweDF1bCA8PCBTWVNfVElFTjQ4TV9URkFJTElFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElFTjQ4TTogVEZBSUxJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19USUVONDhNX0NMS0VJRU5fUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElFTjQ4TTogQ0xLRUlFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfVElFTjQ4TV9DTEtFSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX1RJRU40OE1fQ0xLRUlFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJRU40OE06IENMS0VJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVElTVFM0OE1fRlJFUUxPQ0tfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJU1RTNDhNOiBGUkVRTE9DSyBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgU1lTX1RJU1RTNDhNX0ZSRVFMT0NLX01zayAgICAgICAgKDB4MXVsIDw8IFNZU19USVNUUzQ4TV9GUkVRTE9DS19Qb3MpICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSVNUUzQ4TTogRlJFUUxPQ0sgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RJU1RTNDhNX1RGQUlMSUZfUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSVNUUzQ4TTogVEZBSUxJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19USVNUUzQ4TV9URkFJTElGX01zayAgICAgICAgICgweDF1bCA8PCBTWVNfVElTVFM0OE1fVEZBSUxJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElTVFM0OE06IFRGQUlMSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19USVNUUzQ4TV9DTEtFUlJJRl9Qb3MgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElTVFM0OE06IENMS0VSUklGIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBTWVNfVElTVFM0OE1fQ0xLRVJSSUZfTXNrICAgICAgICAoMHgxdWwgPDwgU1lTX1RJU1RTNDhNX0NMS0VSUklGX1BvcykgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJU1RTNDhNOiBDTEtFUlJJRiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVENUTDEyTV9GUkVRU0VMX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEwxMk06IEZSRVFTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX1RDVEwxMk1fRlJFUVNFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IFNZU19UQ1RMMTJNX0ZSRVFTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMMTJNOiBGUkVRU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RDVEwxMk1fTE9PUFNFTF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMMTJNOiBMT09QU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19UQ1RMMTJNX0xPT1BTRUxfTXNrICAgICAgICAgICgweDN1bCA8PCBTWVNfVENUTDEyTV9MT09QU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDEyTTogTE9PUFNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19UQ1RMMTJNX1JFVFJZQ05UX1BvcyAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDEyTTogUkVUUllDTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfVENUTDEyTV9SRVRSWUNOVF9Nc2sgICAgICAgICAoMHgzdWwgPDwgU1lTX1RDVEwxMk1fUkVUUllDTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEwxMk06IFJFVFJZQ05UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVENUTDEyTV9DRVNUT1BFTl9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEwxMk06IENFU1RPUEVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX1RDVEwxMk1fQ0VTVE9QRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFNZU19UQ1RMMTJNX0NFU1RPUEVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMMTJNOiBDRVNUT1BFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RDVEwxMk1fUkVGQ0tTRUxfUG9zICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMMTJNOiBSRUZDS1NFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19UQ1RMMTJNX1JFRkNLU0VMX01zayAgICAgICAgICgweDF1bCA8PCBTWVNfVENUTDEyTV9SRUZDS1NFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDEyTTogUkVGQ0tTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19USUVOMTJNX1RGQUlMSUVOX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElFTjEyTTogVEZBSUxJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfVElFTjEyTV9URkFJTElFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1lTX1RJRU4xMk1fVEZBSUxJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJRU4xMk06IFRGQUlMSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVElFTjEyTV9DTEtFSUVOX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJRU4xMk06IENMS0VJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX1RJRU4xMk1fQ0xLRUlFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19USUVOMTJNX0NMS0VJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSUVOMTJNOiBDTEtFSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RJU1RTMTJNX0ZSRVFMT0NLX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSVNUUzEyTTogRlJFUUxPQ0sgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFNZU19USVNUUzEyTV9GUkVRTE9DS19Nc2sgICAgICAgICgweDF1bCA8PCBTWVNfVElTVFMxMk1fRlJFUUxPQ0tfUG9zKSAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElTVFMxMk06IEZSRVFMT0NLIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFNZU19USVNUUzEyTV9URkFJTElGX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElTVFMxMk06IFRGQUlMSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfVElTVFMxMk1fVEZBSUxJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1lTX1RJU1RTMTJNX1RGQUlMSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJU1RTMTJNOiBURkFJTElGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVElTVFMxMk1fQ0xLRVJSSUZfUG9zICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJU1RTMTJNOiBDTEtFUlJJRiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgU1lTX1RJU1RTMTJNX0NMS0VSUklGX01zayAgICAgICAgKDB4MXVsIDw8IFNZU19USVNUUzEyTV9DTEtFUlJJRl9Qb3MpICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSVNUUzEyTTogQ0xLRVJSSUYgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1JFR0xDVExfUkVHTENUTF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSRUdMQ1RMOiBSRUdMQ1RMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19SRUdMQ1RMX1JFR0xDVExfTXNrICAgICAgICAgICgweGZmdWwgPDwgU1lTX1JFR0xDVExfUkVHTENUTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UkVHTENUTDogUkVHTENUTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19QT1JDVEwxX1BPUk9GRl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UE9SQ1RMMTogUE9ST0ZGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfUE9SQ1RMMV9QT1JPRkZfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgU1lTX1BPUkNUTDFfUE9ST0ZGX1BvcykgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBPUkNUTDE6IFBPUk9GRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUExDVExfUExTRUxfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMQ1RMOiBQTFNFTCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1BMQ1RMX1BMU0VMX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IFNZU19QTENUTF9QTFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTENUTDogUExTRUwgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1BMQ1RMX01WUlNfUG9zICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTENUTDogTVZSUyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19QTENUTF9NVlJTX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfUExDVExfTVZSU19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExDVEw6IE1WUlMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19QTENUTF9MVlNTVFBfUG9zICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExDVEw6IExWU1NUUCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfUExDVExfTFZTU1RQX01zayAgICAgICAgICAgICAoMHgzZnVsIDw8IFNZU19QTENUTF9MVlNTVFBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMQ1RMOiBMVlNTVFAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUExDVExfTFZTUFJEX1BvcyAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMQ1RMOiBMVlNQUkQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1BMQ1RMX0xWU1BSRF9Nc2sgICAgICAgICAgICAgKDB4ZmZ1bCA8PCBTWVNfUExDVExfTFZTUFJEX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTENUTDogTFZTUFJEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1BMU1RTX1BMQ0JVU1lfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTFNUUzogUExDQlVTWSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19QTFNUU19QTENCVVNZX01zayAgICAgICAgICAgICgweDF1bCA8PCBTWVNfUExTVFNfUExDQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExTVFM6IFBMQ0JVU1kgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19QTFNUU19NVlJDQlVTWV9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExTVFM6IE1WUkNCVVNZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfUExTVFNfTVZSQ0JVU1lfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX1BMU1RTX01WUkNCVVNZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMU1RTOiBNVlJDQlVTWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUExTVFNfTVZSQ0VSUl9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMU1RTOiBNVlJDRVJSIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1BMU1RTX01WUkNFUlJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19QTFNUU19NVlJDRVJSX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTFNUUzogTVZSQ0VSUiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1BMU1RTX0xDT05TX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTFNUUzogTENPTlMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNZU19QTFNUU19MQ09OU19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfUExTVFNfTENPTlNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExTVFM6IExDT05TIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19QTFNUU19QRElOVlRSRl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExTVFM6IFBESU5WVFJGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfUExTVFNfUERJTlZUUkZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX1BMU1RTX1BESU5WVFJGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMU1RTOiBQRElOVlRSRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUExTVFNfUExTVEFUVVNfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMU1RTOiBQTFNUQVRVUyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1BMU1RTX1BMU1RBVFVTX01zayAgICAgICAgICAgKDB4M3VsIDw8IFNZU19QTFNUU19QTFNUQVRVU19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTFNUUzogUExTVEFUVVMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1BMU1RTX0NVUk1WUl9Qb3MgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTFNUUzogQ1VSTVZSIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNZU19QTFNUU19DVVJNVlJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfUExTVFNfQ1VSTVZSX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExTVFM6IENVUk1WUiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19BSEJNQ1RMX0lOVEFDVEVOX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6QUhCTUNUTDogSU5UQUNURU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfQUhCTUNUTF9JTlRBQ1RFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1lTX0FIQk1DVExfSU5UQUNURU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkFIQk1DVEw6IElOVEFDVEVOIE1hc2sgICAgICAgICAgKi8KKworCisvKipAfSovIC8qIFNZU19DT05TVCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKworICAgIC8qKgorICAgICAqIEB2YXIgU1lTX0lOVF9UOjpOTUlFTgorICAgICAqIE9mZnNldDogMHgwMCAgTk1JIFNvdXJjZSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Qk9ET1VUICAgIHxCT0QgTk1JIFNvdXJjZSBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJPRCBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCT0QgTk1JIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMV0gICAgIHxJUkNJTlQgICAgfElSQyBUUklNIE5NSSBTb3VyY2UgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJUkMgVFJJTSBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJUkMgVFJJTSBOTUkgc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsyXSAgICAgfFBXUldVSU5UICB8UG93ZXItZG93biBNb2RlIFdha2UtdXAgTk1JIFNvdXJjZSBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBvd2VyLWRvd24gbW9kZSB3YWtlLXVwIE5NSSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBvd2VyLWRvd24gbW9kZSB3YWtlLXVwIE5NSSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzNdICAgICB8U1JBTVBFUlIgIHxTUkFNIFBhcml0eSBDaGVjayBFcnJvciBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1JBTSBwYXJpdHkgY2hlY2sgZXJyb3IgTk1JIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1JBTSBwYXJpdHkgY2hlY2sgZXJyb3IgTk1JIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNF0gICAgIHxDTEtGQUlMICAgfENsb2NrIEZhaWwgRGV0ZWN0ZWQgTk1JIFNvdXJjZSBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENsb2NrIGZhaWwgZGV0ZWN0ZWQgaW50ZXJydXB0IE5NSSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsb2NrIGZhaWwgZGV0ZWN0ZWQgaW50ZXJydXB0IE5NSSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzZdICAgICB8UlRDSU5UICAgIHxSVEMgTk1JIFNvdXJjZSBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJUQyBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSVEMgTk1JIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbN10gICAgIHxUQU1QRVJJTlQgfFRhbXBlciBJbnRlcnJ1cHQgTk1JIFNvdXJjZSBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJhY2t1cCByZWdpc3RlciB0YW1wZXIgZGV0ZWN0ZWQgaW50ZXJydXB0IE5NSSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJhY2t1cCByZWdpc3RlciB0YW1wZXIgZGV0ZWN0ZWQgaW50ZXJydXB0IE5NSSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzhdICAgICB8RUlOVDAgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQS42LCBvciBQQi41IFBpbiBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXh0ZXJuYWwgaW50ZXJydXB0IGZyb20gUEEuNiwgb3IgUEIuNSBwaW4gTk1JIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgaW50ZXJydXB0IGZyb20gUEEuNiwgb3IgUEIuNSBwaW4gTk1JIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOV0gICAgIHxFSU5UMSAgICAgfEV4dGVybmFsIEludGVycnVwdCBGcm9tIFBBLjcgb3IgUEIuNCBQaW4gTk1JIFNvdXJjZSBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEV4dGVybmFsIGludGVycnVwdCBmcm9tIFBBLjcgb3IgUEIuNCBwaW4gTk1JIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgaW50ZXJydXB0IGZyb20gUEEuNyBvciBQNC40IHBpbiBOTUkgc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxMF0gICAgfEVJTlQyICAgICB8RXh0ZXJuYWwgSW50ZXJydXB0IEZyb20gUEIuMyBvciBQQy42IFBpbiBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXh0ZXJuYWwgaW50ZXJydXB0IGZyb20gUEIuMyBvciBQQy42IHBpbiBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQi4zIG9yIFBDLjYgcGluIE5NSSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzExXSAgICB8RUlOVDMgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQi4yIG9yIFBDLjcgUGluIE5NSSBTb3VyY2UgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQi4yIG9yIFBDLjdwaW4gTk1JIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgaW50ZXJydXB0IGZyb20gUEIuMiBvciBQQy43IHBpbiBOTUkgc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxMl0gICAgfEVJTlQ0ICAgICB8RXh0ZXJuYWwgSW50ZXJydXB0IEZyb20gUEEuOCBvciBQQi42IFBpbiBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXh0ZXJuYWwgaW50ZXJydXB0IGZyb20gUEEuOCBvciBQQi42IHBpbiBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQS44IG9yIFBCLjYgcGluIE5NSSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEzXSAgICB8RUlOVDUgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQi43IG9yIFBELjEyIFBpbiBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXh0ZXJuYWwgaW50ZXJydXB0IGZyb20gUEIuNyBvciBQRC4xMiBwaW4gTk1JIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgaW50ZXJydXB0IGZyb20gUEIuNyBvciBQRC4xMiBwaW4gTk1JIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTRdICAgIHxVQVJUMElOVCAgfFVBUlQwIE5NSSBTb3VyY2UgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVQVJUMCBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUMCBOTUkgc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxNV0gICAgfFVBUlQxSU5UICB8VUFSVDEgTk1JIFNvdXJjZSBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQxIE5NSSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQxIE5NSSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE2XSAgICB8RUlOVDYgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQi44IG9yIFBELjExIFBpbiBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXh0ZXJuYWwgaW50ZXJydXB0IGZyb20gUEIuOCBvciBQRC4xMSBwaW4gTk1JIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgaW50ZXJydXB0IGZyb20gUEIuOCBvciBQRC4xMSBwaW4gTk1JIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTddICAgIHxFSU5UNyAgICAgfEV4dGVybmFsIEludGVycnVwdCBGcm9tIFBCLjkgb3IgUEQuMTAgUGluIE5NSSBTb3VyY2UgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQi45IG9yIFBELjEwIHBpbiBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQi45IG9yIFBELjEwIHBpbiBOTUkgc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBTWVNfSU5UX1Q6Ok5NSVNUUworICAgICAqIE9mZnNldDogMHgwNCAgTk1JIHNvdXJjZSBpbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Qk9ET1VUICAgIHxCT0QgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQk9EIGludGVycnVwdCBpcyBkZS1hc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQk9EIGludGVycnVwdCBpcyBhc3NlcnRlZC4KKyAgICAgKiB8WzFdICAgICB8SVJDSU5UICAgIHxJUkMgVFJJTSBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBISVJDIFRSSU0gaW50ZXJydXB0IGlzIGRlLWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBISVJDIFRSSU0gaW50ZXJydXB0IGlzIGFzc2VydGVkLgorICAgICAqIHxbMl0gICAgIHxQV1JXVUlOVCAgfFBvd2VyLWRvd24gTW9kZSBXYWtlLXVwIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBvd2VyLWRvd24gbW9kZSB3YWtlLXVwIGludGVycnVwdCBpcyBkZS1hc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUG93ZXItZG93biBtb2RlIHdha2UtdXAgaW50ZXJydXB0IGlzIGFzc2VydGVkLgorICAgICAqIHxbM10gICAgIHxTUkFNUEVSUiAgfFNSQU0gUGFyaXR5IENoZWNrIEVycm9yIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNSQU0gcGFyaXR5IGNoZWNrIGVycm9yIGludGVycnVwdCBpcyBkZS1hc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1JBTSBwYXJpdHkgY2hlY2sgZXJyb3IgaW50ZXJydXB0IGlzIGFzc2VydGVkLgorICAgICAqIHxbNF0gICAgIHxDTEtGQUlMICAgfENsb2NrIEZhaWwgRGV0ZWN0ZWQgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2xvY2sgZmFpbCBkZXRlY3RlZCBpbnRlcnJ1cHQgaXMgZGUtYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsb2NrIGZhaWwgZGV0ZWN0ZWQgaW50ZXJydXB0IGlzIGFzc2VydGVkLgorICAgICAqIHxbNl0gICAgIHxSVENJTlQgICAgfFJUQyBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSVEMgaW50ZXJydXB0IGlzIGRlLWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSVEMgaW50ZXJydXB0IGlzIGFzc2VydGVkLgorICAgICAqIHxbN10gICAgIHxUQU1QRVJJTlQgfFRhbXBlciBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCYWNrdXAgcmVnaXN0ZXIgdGFtcGVyIGRldGVjdGVkIGludGVycnVwdCBpcyBkZS1hc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQmFja3VwIHJlZ2lzdGVyIHRhbXBlciBkZXRlY3RlZCBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFs4XSAgICAgfEVJTlQwICAgICB8RXh0ZXJuYWwgSW50ZXJydXB0IEZyb20gUEEuNiwgb3IgUEIuNSBQaW4gSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEEuNiwgb3IgUEIuNSBpbnRlcnJ1cHQgaXMgZGVhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEEuNiwgb3IgUEIuNSBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFs5XSAgICAgfEVJTlQxICAgICB8RXh0ZXJuYWwgSW50ZXJydXB0IEZyb20gUEEuNywgb3IgUEIuNCBQaW4gSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEEuNywgb3IgUEIuNCBpbnRlcnJ1cHQgaXMgZGVhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEEuNywgb3IgUEIuNCBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFsxMF0gICAgfEVJTlQyICAgICB8RXh0ZXJuYWwgSW50ZXJydXB0IEZyb20gUEIuMyBvciBQQy42IFBpbiBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQi4zIG9yIFBDLjYgaW50ZXJydXB0IGlzIGRlYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEV4dGVybmFsIEludGVycnVwdCBmcm9tIFBCLjMgb3IgUEMuNiBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFsxMV0gICAgfEVJTlQzICAgICB8RXh0ZXJuYWwgSW50ZXJydXB0IEZyb20gUEIuMiBvciBQQy43IFBpbiBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQi4yIG9yIFBDLjcgaW50ZXJydXB0IGlzIGRlYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEV4dGVybmFsIEludGVycnVwdCBmcm9tIFBCLjIgb3IgUEMuNyBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFsxMl0gICAgfEVJTlQ0ICAgICB8RXh0ZXJuYWwgSW50ZXJydXB0IEZyb20gUEEuOCBvciBQQi42IFBpbiBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQS44IG9yIFBCLjYgaW50ZXJydXB0IGlzIGRlYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEV4dGVybmFsIEludGVycnVwdCBmcm9tIFBBLjggb3IgUEIuNiBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFsxM10gICAgfEVJTlQ1ICAgICB8RXh0ZXJuYWwgSW50ZXJydXB0IEZyb20gUEIuNyBvciBQRC4xMiBQaW4gSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEIuNyBvciBQRC4xMiBpbnRlcnJ1cHQgaXMgZGVhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEIuNyBvciBQRC4xMiBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFsxNF0gICAgfFVBUlQwSU5UICB8VUFSVDAgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDEgaW50ZXJydXB0IGlzIGRlLWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUMSBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFsxNV0gICAgfFVBUlQxSU5UICB8VUFSVDEgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDEgaW50ZXJydXB0IGlzIGRlLWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUMSBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFsxNl0gICAgfEVJTlQ2ICAgICB8RXh0ZXJuYWwgSW50ZXJydXB0IEZyb20gUEIuOCBvciBQRC4xMSBQaW4gSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEIuOCBvciBQRC4xMSBpbnRlcnJ1cHQgaXMgZGVhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEIuOCBvciBQRC4xMSBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFsxN10gICAgfEVJTlQ3ICAgICB8RXh0ZXJuYWwgSW50ZXJydXB0IEZyb20gUEIuOSBvciBQRC4xMCBQaW4gSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEIuOSBvciBQRC4xMCBpbnRlcnJ1cHQgaXMgZGVhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEIuOSBvciBQRC4xMCBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICovCisKKyAgICBfX0lPICB1aW50MzJfdCBOTUlFTjsgICAgICAgICAgLyogT2Zmc2V0OiAweDAwICBOTUkgU291cmNlIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgICB1aW50MzJfdCBOTUlTVFM7ICAgICAgICAgLyogT2Zmc2V0OiAweDA0ICBOTUkgc291cmNlIGludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBTWVNfSU5UX1Q7CisvKioKKyAgICBAYWRkdG9ncm91cCBJTlRfQ09OU1QgSU5UIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIElOVCBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFNZU19OTUlFTl9CT0RPVVRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBCT0RPVVQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JRU5fQk9ET1VUX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSUVOX0JPRE9VVF9Qb3MgKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogQk9ET1VUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JRU5fSVJDSU5UX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogSVJDSU5UIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSUVOX0lSQ0lOVF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlFTl9JUkNJTlRfUG9zICkgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IElSQ0lOVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSUVOX1BXUldVSU5UX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IFBXUldVSU5UIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19OTUlFTl9QV1JXVUlOVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JRU5fUFdSV1VJTlRfUG9zICkgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBQV1JXVUlOVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlFTl9TUkFNUEVSUl9Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBTUkFNUEVSUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfTk1JRU5fU1JBTVBFUlJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSUVOX1NSQU1QRVJSX1BvcyApICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogU1JBTVBFUlIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JRU5fQ0xLRkFJTF9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogQ0xLRkFJTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSUVOX0NMS0ZBSUxfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlFTl9DTEtGQUlMX1BvcyApICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IENMS0ZBSUwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSUVOX1JUQ0lOVF9Qb3MgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IFJUQ0lOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlFTl9SVENJTlRfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JRU5fUlRDSU5UX1BvcyApICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBSVENJTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlFTl9UQU1QRVJJTlRfUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBUQU1QRVJJTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfTk1JRU5fVEFNUEVSSU5UX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSUVOX1RBTVBFUklOVF9Qb3MgKSAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogVEFNUEVSSU5UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JRU5fRUlOVDBfUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogRUlOVDAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSUVOX0VJTlQwX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlFTl9FSU5UMF9Qb3MgKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IEVJTlQwIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSUVOX0VJTlQxX1BvcyAgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IEVJTlQxIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlFTl9FSU5UMV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JRU5fRUlOVDFfUG9zICkgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBFSU5UMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlFTl9FSU5UMl9Qb3MgICAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBFSU5UMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JRU5fRUlOVDJfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSUVOX0VJTlQyX1BvcyApICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogRUlOVDIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JRU5fRUlOVDNfUG9zICAgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogRUlOVDMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSUVOX0VJTlQzX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlFTl9FSU5UM19Qb3MgKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IEVJTlQzIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSUVOX0VJTlQ0X1BvcyAgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IEVJTlQ0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlFTl9FSU5UNF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JRU5fRUlOVDRfUG9zICkgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBFSU5UNCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlFTl9FSU5UNV9Qb3MgICAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBFSU5UNSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JRU5fRUlOVDVfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSUVOX0VJTlQ1X1BvcyApICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogRUlOVDUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JRU5fVUFSVDBJTlRfUG9zICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogVUFSVDBJTlQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSUVOX1VBUlQwSU5UX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlFTl9VQVJUMElOVF9Qb3MgKSAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IFVBUlQwSU5UIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSUVOX1VBUlQxSU5UX1BvcyAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IFVBUlQxSU5UIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19OTUlFTl9VQVJUMUlOVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JRU5fVUFSVDFJTlRfUG9zICkgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBVQVJUMUlOVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlFTl9FSU5UNl9Qb3MgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBFSU5UNiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JRU5fRUlOVDZfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSUVOX0VJTlQ2X1BvcyApICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogRUlOVDYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JRU5fRUlOVDdfUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogRUlOVDcgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSUVOX0VJTlQ3X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlFTl9FSU5UN19Qb3MgKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IEVJTlQ3IE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSVNUU19CT0RPVVRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBCT0RPVVQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19OTUlTVFNfQk9ET1VUX01zayAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JU1RTX0JPRE9VVF9Qb3MgKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogQk9ET1VUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlTVFNfSVJDSU5UX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogSVJDSU5UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JU1RTX0lSQ0lOVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JU1RTX0lSQ0lOVF9Qb3MgKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IElSQ0lOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JU1RTX1BXUldVSU5UX1BvcyAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IFBXUldVSU5UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSVNUU19QV1JXVUlOVF9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSVNUU19QV1JXVUlOVF9Qb3MgKSAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBQV1JXVUlOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSVNUU19TUkFNUEVSUl9Qb3MgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBTUkFNUEVSUiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19OTUlTVFNfU1JBTVBFUlJfTXNrICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlTVFNfU1JBTVBFUlJfUG9zICkgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogU1JBTVBFUlIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlTVFNfQ0xLRkFJTF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogQ0xLRkFJTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfTk1JU1RTX0NMS0ZBSUxfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSVNUU19DTEtGQUlMX1BvcyApICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IENMS0ZBSUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JU1RTX1JUQ0lOVF9Qb3MgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IFJUQ0lOVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSVNUU19SVENJTlRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlTVFNfUlRDSU5UX1BvcyApICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBSVENJTlQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSVNUU19UQU1QRVJJTlRfUG9zICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBUQU1QRVJJTlQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFNZU19OTUlTVFNfVEFNUEVSSU5UX01zayAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JU1RTX1RBTVBFUklOVF9Qb3MgKSAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogVEFNUEVSSU5UIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlTVFNfRUlOVDBfUG9zICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogRUlOVDAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JU1RTX0VJTlQwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSVNUU19FSU5UMF9Qb3MgKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IEVJTlQwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JU1RTX0VJTlQxX1BvcyAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IEVJTlQxIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSVNUU19FSU5UMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlTVFNfRUlOVDFfUG9zICkgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBFSU5UMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSVNUU19FSU5UMl9Qb3MgICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBFSU5UMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlTVFNfRUlOVDJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JU1RTX0VJTlQyX1BvcyApICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogRUlOVDIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlTVFNfRUlOVDNfUG9zICAgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogRUlOVDMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JU1RTX0VJTlQzX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSVNUU19FSU5UM19Qb3MgKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IEVJTlQzIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JU1RTX0VJTlQ0X1BvcyAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IEVJTlQ0IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSVNUU19FSU5UNF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlTVFNfRUlOVDRfUG9zICkgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBFSU5UNCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSVNUU19FSU5UNV9Qb3MgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBFSU5UNSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlTVFNfRUlOVDVfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JU1RTX0VJTlQ1X1BvcyApICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogRUlOVDUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlTVFNfVUFSVDBJTlRfUG9zICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogVUFSVDBfSU5UIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBTWVNfTk1JU1RTX1VBUlQwSU5UX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSVNUU19VQVJUMElOVF9Qb3MgKSAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IFVBUlQwX0lOVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JU1RTX1VBUlQxSU5UX1BvcyAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IFVBUlQxX0lOVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgU1lTX05NSVNUU19VQVJUMUlOVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlTVFNfVUFSVDFJTlRfUG9zICkgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBVQVJUMV9JTlQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSVNUU19FSU5UNl9Qb3MgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBFSU5UNiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlTVFNfRUlOVDZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JU1RTX0VJTlQ2X1BvcyApICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogRUlOVDYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlTVFNfRUlOVDdfUG9zICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogRUlOVDcgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JU1RTX0VJTlQ3X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSVNUU19FSU5UN19Qb3MgKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IEVJTlQ3IE1hc2sgICAgICAgICAgICAgKi8KKworCisvKipAfSovIC8qIElOVF9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgU1lTIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX1NZU19SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvc3lzdGVtX00yMzUxLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvc3lzdGVtX00yMzUxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4MDI1NgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zeXN0ZW1fTTIzNTEuaApAQCAtMCwwICsxLDE0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHN5c3RlbV9NMjM1MS5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBTeXN0ZW0gU2V0dGluZyBIZWFkZXIgRmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TWVNURU1fTTIzNTFfSF9fCisjZGVmaW5lIF9fU1lTVEVNX00yMzUxX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNYWNybyBEZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZuZGVmIERFQlVHX1BPUlQKKyMgZGVmaW5lIERFQlVHX1BPUlQgICAgICBVQVJUMCAgICAgICAvKiE8IFNlbGVjdCBEZWJ1ZyBQb3J0IHdoaWNoIGlzIHVzZWQgZm9yIHJldGFyZ2V0LmMgdG8gb3V0cHV0IGRlYnVnIG1lc3NhZ2UgdG8gVUFSVCAqLworI2VuZGlmCisKKworLyogSW5pdCBFVE0gSW50ZXJmYWNlIE11bHRpLWZ1bmN0aW9uIFBpbnMgKi8KKyNkZWZpbmUgRVRNX0lOSVQoKSAgeyBcCisgICAgU1lTLT5HUENfTUZQTCAmPSB+KFNZU19HUENfTUZQTF9QQzBNRlBfRVRNX1RSQUNFX01zayB8IFNZU19HUENfTUZQTF9QQzFNRlBfRVRNX1RSQUNFX01zayB8IFwKKyAgICBTWVNfR1BDX01GUExfUEMyTUZQX0VUTV9UUkFDRV9Nc2sgfCBTWVNfR1BDX01GUExfUEMzTUZQX0VUTV9UUkFDRV9Nc2sgfCBcCisgICAgICAgICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX0VUTV9UUkFDRV9Nc2spOyBcCisgICAgU1lTLT5HUENfTUZQTCB8PSBTWVNfR1BDX01GUExfUEMwTUZQX0VUTV9UUkFDRV9DTEsgfCBTWVNfR1BDX01GUExfUEMxTUZQX0VUTV9UUkFDRV9EQVRBMCB8IFwKKyAgICAgICAgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfRVRNX1RSQUNFX0RBVEExIHwgU1lTX0dQQ19NRlBMX1BDM01GUF9FVE1fVFJBQ0VfREFUQTIgfCBcCisgICAgICAgICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX0VUTV9UUkFDRV9EQVRBMzt9CisKKworCisKKworLyoqCisgKgorICogQGRldGFpbHMgICAgVGhpcyBpcyB1c2VkIHRvIGVuYWJsZSBQTEwgdG8gc3BlZWQgdXAgYm9vdGluZyBhdCBzdGFydHVwLiBSZW1vdmUgaXQgd2lsbCBjYXVzZSBzeXN0ZW0gdXNpbmcKKyAqICAgICAgICAgICAgIGRlZmF1bHQgY2xvY2sgc291cmNlIChFeHRlcm5hbCBjcnlzdGFsIG9yIGludGVybmFsIDIyLjExODRNSHogSVJDKS4KKyAqICAgICAgICAgICAgIEVuYWJsZSB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHN5c3RlbSBib290aW5nIGluIDcyTUh6KEJ5IFhUQUwpIG9yIDcxLjg4NDhNSHooQnkgSVJDMjJNKSBhY2NvcmRpbmcgdG8KKyAqICAgICAgICAgICAgIHVzZXIgY29uZmlndXJhdGlvbiBzZXR0aW5nIGluIENPTkZJRzAKKyAqCisgKi8KKworLyoKKyNkZWZpbmUgSU5JVF9TWVNDTEtfQVRfQk9PVElORworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIERlZmluZSBTWVNDTEsKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIF9fSFhUICAgICAgICgxMjAwMDAwMFVMKSAgICAvKiE8IEV4dGVybmFsIENyeXN0YWwgQ2xvY2sgRnJlcXVlbmN5ICAgICAqLworI2RlZmluZSBfX0xJUkMgICAgICAoMTAwMDBVTCkgICAgICAgLyohPCBJbnRlcm5hbCAxMEsgUkMgT3NjaWxsYXRvciBGcmVxdWVuY3kgKi8KKyNkZWZpbmUgX19ISVJDICAgICAgKDEyMDAwMDAwVUwpICAgIC8qITwgSW50ZXJuYWwgMTJNIFJDIE9zY2lsbGF0b3IgRnJlcXVlbmN5ICovCisjZGVmaW5lIF9fTFhUICAgICAgICgzMjc2OFVMKSAgICAgICAvKiE8IEV4dGVybmFsIENyeXN0YWwgQ2xvY2sgRnJlcXVlbmN5IDMyLjc2OEtIeiAqLworI2RlZmluZSBfX0hTSSAgICAgICAoNDgwMDAwMDBVTCkgICAgLyohPCBQTEwgT3V0cHV0IENsb2NrIEZyZXF1ZW5jeSAqLworI2RlZmluZSBfX0hJUkM0OCAgICAoNDgwMDAwMDBVTCkgICAgLyohPCBJbnRlcm5hbCA0OE0gUkMgT3NjaWxsYXRvciBGcmVxdWVuY3kgKi8KKyNkZWZpbmUgX19MSVJDMzIgICAgKDMyMDAwVUwpICAgICAgIC8qITwgSW50ZXJuYWwgMzJLIFJDIE9zY2lsbGF0b3IgRnJlcXVlbmN5ICovCisKKworI2lmIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzTCkKKyMgaWYgZGVmaW5lZCAoX19JQ0NBUk1fXykKKyMgIGRlZmluZSBfX05PTlNFQ1VSRV9FTlRSWSAgICAgICBfX2Ntc2Vfbm9uc2VjdXJlX2VudHJ5CisjICBkZWZpbmUgX19OT05TRUNVUkVfRU5UUllfV0VBSyAgX19jbXNlX25vbnNlY3VyZV9lbnRyeSAvL19fd2VhaworIyAgZGVmaW5lIF9fTk9OU0VDVVJFX0NBTEwgICAgICAgIF9fY21zZV9ub25zZWN1cmVfY2FsbAorIyBlbHNlCisjICBkZWZpbmUgX19OT05TRUNVUkVfRU5UUlkgICAgICAgX19hdHRyaWJ1dGVfXygoY21zZV9ub25zZWN1cmVfZW50cnkpKQorIyAgZGVmaW5lIF9fTk9OU0VDVVJFX0VOVFJZX1dFQUsgIF9fYXR0cmlidXRlX18oKGNtc2Vfbm9uc2VjdXJlX2VudHJ5LHdlYWspKQorIyAgZGVmaW5lIF9fTk9OU0VDVVJFX0NBTEwgICAgICAgIF9fYXR0cmlidXRlX18oKGNtc2Vfbm9uc2VjdXJlX2NhbGwpKQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9fTk9OU0VDVVJFX0VOVFJZCisjIGRlZmluZSBfX05PTlNFQ1VSRV9FTlRSWV9XRUFLCisjIGRlZmluZSBfX05PTlNFQ1VSRV9DQUxMCisjZW5kaWYKKworCisKK2V4dGVybiB1aW50MzJfdCBTeXN0ZW1Db3JlQ2xvY2s7ICAgIC8qITwgU3lzdGVtIENsb2NrIEZyZXF1ZW5jeSAoQ29yZSBDbG9jaykgICovCitleHRlcm4gdWludDMyX3QgQ3ljbGVzUGVyVXM7ICAgICAgICAvKiE8IEN5Y2xlcyBwZXIgbWljcm8gc2Vjb25kICAgICAgICAgICAgICAqLworZXh0ZXJuIHVpbnQzMl90IFBsbENsb2NrOyAgICAgICAgICAgLyohPCBQTEwgT3V0cHV0IENsb2NrIEZyZXF1ZW5jeSAgICAgICAgICAgKi8KK2V4dGVybiB1aW50MzJfdCBfX1BDKHZvaWQpOyAgICAgICAgIC8qITwgUmV0dXJuIHRoZSBjdXJyZW50IHByb2dyYW0gY291bnRlciB2YWx1ZSAqLworCisjaWYgVVNFX0FTU0VSVAorLyoqCisgKiBAYnJpZWYgICAgICBBc3NlcnQgRnVuY3Rpb24KKyAqCisgKiBAcGFyYW1baW5dICBleHByICBFeHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZAorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBJZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZSwgYW4gZXJyb3IgbWVzc2FnZSB3aWxsIGJlIHByaW50ZWQgb3V0CisgKiAgICAgICAgICAgICBmcm9tIGRlYnVnIHBvcnQgKFVBUlQwIG9yIFVBUlQxKS4KKyAqLworI2RlZmluZSBBU1NFUlRfUEFSQU0oZXhwcikgIHsgaWYgKCEoZXhwcikpIHsgQXNzZXJ0RXJyb3IoKHVpbnQ4X3QqKV9fRklMRV9fLCBfX0xJTkVfXyk7IH0gfQorCit2b2lkIEFzc2VydEVycm9yKHVpbnQ4X3QqIGZpbGUsIHVpbnQzMl90IGxpbmUpOworI2Vsc2UKKyNkZWZpbmUgQVNTRVJUX1BBUkFNKGV4cHIpCisjZW5kaWYKKworI2RlZmluZSBhc3NlcnRfcGFyYW0oZXhwcikgIEFTU0VSVF9QQVJBTShleHByKQorCisKKy8qKgorICogQGJyaWVmICAgIFN5c3RlbSBJbml0aWFsaXphdGlvbgorICoKKyAqIEBwYXJhbSAgICBOb25lCisgKgorICogQHJldHVybiAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgVGhlIG5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbiBvZiBzeXN0ZW0uCisgKi8KK2V4dGVybiB2b2lkIFN5c3RlbUluaXQodm9pZCk7CisKKworLyoqCisgKiBAYnJpZWYgICAgVXBkYXRlIHRoZSBWYXJpYWJsZSBTeXN0ZW1Db3JlQ2xvY2sKKyAqCisgKiBAcGFyYW0gICAgTm9uZQorICoKKyAqIEByZXR1cm4gICBOb25lCisgKgorICogQGRldGFpbHMgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB1cGRhdGUgdGhlIHZhcmlhYmxlIFN5c3RlbUNvcmVDbG9jaworICogICAgICAgICAgIGFuZCBtdXN0IGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgY29yZSBjbG9jayBpcyBjaGFuZ2VkLgorICovCitleHRlcm4gdm9pZCBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUodm9pZCk7CisKKworCisKKyNpZiAoZGVmaW5lZChfX0lDQ0FSTV9fKSAmJiAoX19WRVJfXyA+PSA3MDgwMDAwKSAmJiAoX19WRVJfXyA8IDgwMjAwMDApKQordWludDMyX3QgX19UWl9nZXRfUFNQX05TKHZvaWQpOwordm9pZCBfX1RaX3NldF9QU1BfTlModWludDMyX3QgdG9wT2ZQcm9jU3RhY2spOworaW50MzJfdCBfX1RaX2dldF9NU1BfTlModm9pZCk7Cit2b2lkIF9fVFpfc2V0X01TUF9OUyh1aW50MzJfdCB0b3BPZk1haW5TdGFjayk7Cit1aW50MzJfdCBfX1RaX2dldF9QUklNQVNLX05TKHZvaWQpOwordm9pZCBfX1RaX3NldF9QUklNQVNLX05TKHVpbnQzMl90IHByaU1hc2spOworI2VuZGlmCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19TWVNURU1fTTIzNTFfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdGltZXJfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdGltZXJfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZiY2IxZQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS90aW1lcl9yZWcuaApAQCAtMCwwICsxLDEwNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB0aW1lcl9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgVElNRVIgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVElNRVJfUkVHX0hfXworI2RlZmluZSBfX1RJTUVSX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGltZXIgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFRJTUVSIFRpbWVyIENvbnRyb2xsZXIoVElNRVIpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIFRJTUVSIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgVElNRVJfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDAwICBUaW1lciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8UFNDICAgICAgIHxQcmVzY2FsZSBDb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGltZXIgaW5wdXQgY2xvY2sgb3IgZXZlbnQgc291cmNlIGlzIGRpdmlkZWQgYnkgKFBTQysxKSBiZWZvcmUgaXQgaXMgZmVkIHRvIHRoZSB0aW1lciB1cCBjb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBmaWVsZCBpcyAwIChQU0MgPSAwKSwgdGhlbiB0aGVyZSBpcyBubyBzY2FsaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFVwZGF0ZSBwcmVzY2FsZSBjb3VudGVyIHZhbHVlIHdpbGwgcmVzZXQgaW50ZXJuYWwgOC1iaXQgcHJlc2NhbGUgY291bnRlciBhbmQgMjQtYml0IHVwIGNvdW50ZXIgdmFsdWUuCisgICAgICogfFsxOV0gICAgfElOVFJHRU4gICB8SW50ZXItdGltZXIgVHJpZ2dlciBNb2RlIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0dGluZyB0aGlzIGJpdCB3aWxsIGVuYWJsZSB0aGUgaW50ZXItdGltZXIgdHJpZ2dlciBjYXB0dXJlIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBUaW1lcjAvMiB3aWxsIGJlIGluIGV2ZW50IGNvdW50ZXIgbW9kZSBhbmQgY291bnRpbmcgd2l0aCBleHRlcm5hbCBjbG9jayBzb3VyY2Ugb3IgZXZlbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBbHNvLCBUaW1lcjEvMyB3aWxsIGJlIGluIHRyaWdnZXItY291bnRpbmcgbW9kZSBvZiBjYXB0dXJlIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlci1UaW1lciBUcmlnZ2VyIENhcHR1cmUgbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXItVGltZXIgVHJpZ2dlciBDYXB0dXJlIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBGb3IgVGltZXIxLzMsIHRoaXMgYml0IGlzIGlnbm9yZWQgYW5kIHRoZSByZWFkIGJhY2sgdmFsdWUgaXMgYWx3YXlzIDAuCisgICAgICogfFsyMF0gICAgfFBFUklPU0VMICB8UGVyaW9kaWMgTW9kZSBCZWhhdmlvciBTZWxlY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgYmVoYXZpb3Igc2VsZWN0aW9uIGluIHBlcmlvZGljIG1vZGUgaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB1c2VyIHVwZGF0ZXMgQ01QREFUIHdoaWxlIHRpbWVyIGlzIHJ1bm5pbmcgaW4gcGVyaW9kaWMgbW9kZSwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTlQgd2lsbCBiZSByZXNldCB0byBkZWZhdWx0IHZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgYmVoYXZpb3Igc2VsZWN0aW9uIGluIHBlcmlvZGljIG1vZGUgaXMgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHVzZXIgdXBkYXRlIENNUERBVCB3aGlsZSB0aW1lciBpcyBydW5uaW5nIGluIHBlcmlvZGljIG1vZGUsIHRoZSBsaW1pdGF0aW9ucyBhcyBiZWxsb3dzIGxpc3QsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdXBkYXRlZCBDTVBEQVQgdmFsdWUgPiBDTlQsIENNUERBVCB3aWxsIGJlIHVwZGF0ZWQgYW5kIENOVCBrZWVwIHJ1bm5pbmcgY29udGludWFsbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdXBkYXRlZCBDTVBEQVQgdmFsdWUgPSBDTlQsIHRpbWVyIHRpbWUtb3V0IGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkIGltbWVkaWF0ZWx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHVwZGF0ZWQgQ01QREFUIHZhbHVlIDwgQ05ULCBDTlQgd2lsbCBiZSByZXNldCB0byBkZWZhdWx0IHZhbHVlLgorICAgICAqIHxbMjFdICAgIHxUR0xQSU5TRUwgfFRvZ2dsZS1vdXRwdXQgUGluIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUb2dnbGUgbW9kZSBvdXRwdXQgdG8gVE14IChUaW1lciBFdmVudCBDb3VudGVyIFBpbikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRvZ2dsZSBtb2RlIG91dHB1dCB0byBUTXhfRVhUIChUaW1lciBFeHRlcm5hbCBDYXB0dXJlIFBpbikuCisgICAgICogfFsyMl0gICAgfENBUFNSQyAgICB8Q2FwdHVyZSBQaW4gU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIEZ1bmN0aW9uIHNvdXJjZSBpcyBmcm9tIFRNeF9FWFQgKHg9IDB+MykgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIEZ1bmN0aW9uIHNvdXJjZSBpcyBmcm9tIGludGVybmFsIEFDTVAgb3V0cHV0IHNpZ25hbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHNldCBBQ01QU1NFTCAoVElNRVJ4X0VYVENUTFs4XSkgdG8gZGVjaWRlIHdoaWNoIGludGVybmFsIEFDTVAgb3V0cHV0IHNpZ25hbCBhcyB0aW1lciBjYXB0dXJlIHNvdXJjZS4KKyAgICAgKiB8WzIzXSAgICB8V0tFTiAgICAgIHxXYWtlLXVwIEZ1bmN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd2hpbGUgdGltZXIgaW50ZXJydXB0IGZsYWcgVElGIChUSU1FUnhfSU5UU1RTWzBdKSBpcyAxIGFuZCBJTlRFTiAoVElNRVJ4X0NUTFsyOV0pIGlzIGVuYWJsZWQsIHRoZSB0aW1lciBpbnRlcnJ1cHQgc2lnbmFsIHdpbGwgZ2VuZXJhdGUgYSB3YWtlLXVwIHRyaWdnZXIgZXZlbnQgdG8gQ1BVLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXYWtlLXVwIGZ1bmN0aW9uIERpc2FibGVkIGlmIHRpbWVyIGludGVycnVwdCBzaWduYWwgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXYWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQgaWYgdGltZXIgaW50ZXJydXB0IHNpZ25hbCBnZW5lcmF0ZWQuCisgICAgICogfFsyNF0gICAgfEVYVENOVEVOICB8RXZlbnQgQ291bnRlciBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBmb3IgZXh0ZXJuYWwgY291bnRpbmcgcGluIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEV2ZW50IGNvdW50ZXIgbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXZlbnQgY291bnRlciBtb2RlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiB0aW1lciBpcyB1c2VkIGFzIGFuIGV2ZW50IGNvdW50ZXIsIHRoaXMgYml0IHNob3VsZCBiZSBzZXQgdG8gMSBhbmQgc2VsZWN0IFBDTEsgYXMgdGltZXIgY2xvY2sgc291cmNlLgorICAgICAqIHxbMjVdICAgIHxBQ1RTVFMgICAgfFRpbWVyIEFjdGl2ZSBTdGF0dXMgQml0IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoZSAyNC1iaXQgdXAgY291bnRlciBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDI0LWJpdCB1cCBjb3VudGVyIGlzIG5vdCBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDI0LWJpdCB1cCBjb3VudGVyIGlzIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBtYXkgYWN0aXZlIHdoZW4gQ05UIDAgdHJhbnNpdGlvbiB0byBDTlQgMS4KKyAgICAgKiB8WzI4OjI3XSB8T1BNT0RFICAgIHxUaW1lciBDb3VudGluZyBNb2RlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVGhlIFRpbWVyIGNvbnRyb2xsZXIgaXMgb3BlcmF0ZWQgaW4gT25lLXNob3QgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFRoZSBUaW1lciBjb250cm9sbGVyIGlzIG9wZXJhdGVkIGluIFBlcmlvZGljIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBUaGUgVGltZXIgY29udHJvbGxlciBpcyBvcGVyYXRlZCBpbiBUb2dnbGUtb3V0cHV0IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBUaGUgVGltZXIgY29udHJvbGxlciBpcyBvcGVyYXRlZCBpbiBDb250aW51b3VzIENvdW50aW5nIG1vZGUuCisgICAgICogfFsyOV0gICAgfElOVEVOICAgICB8VGltZXIgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIgdGltZS1vdXQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lciB0aW1lLW91dCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiB0aGlzIGJpdCBpcyBlbmFibGVkLCB3aGVuIHRoZSB0aW1lciB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyBUSUYgaXMgc2V0IHRvIDEsIHRoZSB0aW1lciBpbnRlcnJ1cHQgc2lnbmFsIGlzIGdlbmVyYXRlZCBhbmQgaW5mb3JtIHRvIENQVS4KKyAgICAgKiB8WzMwXSAgICB8Q05URU4gICAgIHxUaW1lciBDb3VudGluZyBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN0b3BzL1N1c3BlbmRzIGNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTdGFydHMgY291bnRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEluIHN0b3Agc3RhdHVzLCBhbmQgdGhlbiBzZXQgQ05URU4gdG8gMSB3aWxsIGVuYWJsZSB0aGUgMjQtYml0IHVwIGNvdW50ZXIgdG8ga2VlcCBjb3VudGluZyBmcm9tIHRoZSBsYXN0IHN0b3AgY291bnRpbmcgdmFsdWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIGF1dG8tY2xlYXJlZCBieSBoYXJkd2FyZSBpbiBvbmUtc2hvdCBtb2RlIChUSU1FUl9DVExbMjg6MjddID0gMDApIHdoZW4gdGhlIHRpbWVyIHRpbWUtb3V0IGludGVycnVwdCBmbGFnIFRJRiAoVElNRVJ4X0lOVFNUU1swXSkgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBTZXQgZW5hYmxlL2Rpc2FibGUgdGhpcyBiaXQgbmVlZHMgMiAqIFRNUl9DTEsgcGVyaW9kIHRvIGJlY29tZSBhY3RpdmUsIHVzZXIgY2FuIHJlYWQgQUNUU1RTIChUSU1FUnhfQ1RMWzI1XSkgdG8gY2hlY2sgZW5hYmxlL2Rpc2FibGUgY29tbWFuZCBpcyBjb21wbGV0ZWQgb3Igbm90LgorICAgICAqIHxbMzFdICAgIHxJQ0VERUJVRyAgfElDRSBEZWJ1ZyBNb2RlIEFja25vd2xlZGdlIERpc2FibGUgQ29udHJvbCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSUNFIGRlYnVnIG1vZGUgYWNrbm93bGVkZ21lbnQgZWZmZWN0cyBUSU1FUiBjb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUSU1FUiBjb3VudGVyIHdpbGwgYmUgaGVsZCB3aGlsZSBDUFUgaXMgaGVsZCBieSBJQ0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElDRSBkZWJ1ZyBtb2RlIGFja25vd2xlZGdtZW50IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRJTUVSIGNvdW50ZXIgd2lsbCBrZWVwIGdvaW5nIG5vIG1hdHRlciBDUFUgaXMgaGVsZCBieSBJQ0Ugb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgVElNRVJfVDo6Q01QCisgICAgICogT2Zmc2V0OiAweDA0ICBUaW1lciBDb21wYXJhdG9yIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzIzOjBdICB8Q01QREFUICAgIHxUaW1lciBDb21wYXJhdG9yIFZhbHVlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUIGlzIGEgMjQtYml0IGNvbXBhcmVkIHZhbHVlIHJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgaW50ZXJuYWwgMjQtYml0IHVwIGNvdW50ZXIgdmFsdWUgaXMgZXF1YWwgdG8gQ01QREFUIHZhbHVlLCB0aGUgVElGIChUSU1FUnhfSU5UU1RTWzBdIFRpbWVyIEludGVycnVwdCBGbGFnKSB3aWxsIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRpbWUtb3V0IHBlcmlvZCA9IChQZXJpb2Qgb2YgdGltZXIgY2xvY2sgaW5wdXQpICogKDgtYml0IFBTQyArIDEpICogKDI0LWJpdCBDTVBEQVQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBOZXZlciB3cml0ZSAweDAgb3IgMHgxIGluIENNUERBVCBmaWVsZCwgb3IgdGhlIGNvcmUgd2lsbCBydW4gaW50byB1bmtub3duIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBXaGVuIHRpbWVyIGlzIG9wZXJhdGluZyBhdCBjb250aW51b3VzIGNvdW50aW5nIG1vZGUsIHRoZSAyNC1iaXQgdXAgY291bnRlciB3aWxsIGtlZXAgY291bnRpbmcgY29udGludW91c2x5IGV2ZW4gaWYgdXNlciB3cml0ZXMgYSBuZXcgdmFsdWUgaW50byBDTVBEQVQgZmllbGQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgaWYgdGltZXIgaXMgb3BlcmF0aW5nIGF0IG90aGVyIG1vZGVzLCB0aGUgMjQtYml0IHVwIGNvdW50ZXIgd2lsbCByZXN0YXJ0IGNvdW50aW5nIGZyb20gMCBhbmQgdXNpbmcgbmV3ZXN0IENNUERBVCB2YWx1ZSB0byBiZSB0aGUgdGltZXIgY29tcGFyZWQgdmFsdWUgd2hpbGUgdXNlciB3cml0ZXMgYSBuZXcgdmFsdWUgaW50byBDTVBEQVQgZmllbGQuCisgICAgICogQHZhciBUSU1FUl9UOjpJTlRTVFMKKyAgICAgKiBPZmZzZXQ6IDB4MDggIFRpbWVyIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxUSUYgICAgICAgfFRpbWVyIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoZSBpbnRlcnJ1cHQgZmxhZyBzdGF0dXMgb2YgVGltZXIgd2hpbGUgMjQtYml0IHRpbWVyIHVwIGNvdW50ZXIgQ05UIChUSU1FUnhfQ05UWzIzOjBdKSB2YWx1ZSByZWFjaGVzIHRvIENNUERBVCAoVElNRVJ4X0NNUFsyMzowXSkgdmFsdWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ05UIHZhbHVlIG1hdGNoZXMgdGhlIENNUERBVCB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzFdICAgICB8VFdLRiAgICAgIHxUaW1lciBXYWtlLXVwIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIGludGVycnVwdCB3YWtlLXVwIGZsYWcgc3RhdHVzIG9mIHRpbWVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lciBkb2VzIG5vdCBjYXVzZSBDUFUgd2FrZS11cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ1BVIHdha2UtdXAgZnJvbSBJZGxlIG9yIFBvd2VyLWRvd24gbW9kZSBpZiB0aW1lciB0aW1lLW91dCBpbnRlcnJ1cHQgc2lnbmFsIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OkNOVAorICAgICAqIE9mZnNldDogMHgwQyAgVGltZXIgRGF0YSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyMzowXSAgfENOVCAgICAgICB8VGltZXIgRGF0YSBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgdGhpcyByZWdpc3RlciB0byBnZXQgQ05UIHZhbHVlLiBGb3IgZXhhbXBsZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBFWFRDTlRFTiAoVElNRVJ4X0NUTFsyNF0gKSBpcyAwLCB1c2VyIGNhbiByZWFkIENOVCB2YWx1ZSBmb3IgZ2V0dGluZyBjdXJyZW50IDI0LWJpdCBjb3VudGVyIHZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIEVYVENOVEVOIChUSU1FUnhfQ1RMWzI0XSApIGlzIDEsIHVzZXIgY2FuIHJlYWQgQ05UIHZhbHVlIGZvciBnZXR0aW5nIGN1cnJlbnQgMjQtYml0IGV2ZW50IGlucHV0IGNvdW50ZXIgdmFsdWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgYW55IHZhbHVlIHRvIHRoaXMgcmVnaXN0ZXIgd2lsbCByZXNldCBjdXJyZW50IENOVCB2YWx1ZSB0byAwIGFuZCByZWxvYWQgaW50ZXJuYWwgOC1iaXQgcHJlc2NhbGUgY291bnRlci4KKyAgICAgKiB8WzMxXSAgICB8UlNUQUNUICAgIHxUaW1lciBEYXRhIFJlZ2lzdGVyIFJlc2V0IEFjdGl2ZSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyBpZiB0aGUgY291bnRlciByZXNldCBvcGVyYXRpb24gYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdXNlciB3cml0ZXMgdGhpcyBDTlQgcmVnaXN0ZXIsIHRpbWVyIHN0YXJ0cyB0byByZXNldCBpdHMgaW50ZXJuYWwgMjQtYml0IHRpbWVyIHVwLWNvdW50ZXIgdG8gMCBhbmQgcmVsb2FkIDgtYml0IHByZS1zY2FsZSBjb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QXQgdGhlIHNhbWUgdGltZSwgdGltZXIgc2V0IHRoaXMgZmxhZyB0byAxIHRvIGluZGljYXRlIHRoZSBjb3VudGVyIHJlc2V0IG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9uY2UgdGhlIGNvdW50ZXIgcmVzZXQgb3BlcmF0aW9uIGRvbmUsIHRpbWVyIGNsZWFyIHRoaXMgYml0IHRvIDAgYXV0b21hdGljYWxseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVzZXQgb3BlcmF0aW9uIGlzIGRvbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IG9wZXJhdGlvbiB0cmlnZ2VyZWQgYnkgd3JpdGluZyBUSU1FUnhfQ05UIGlzIGluIHByb2dyZXNzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seS4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OkNBUAorICAgICAqIE9mZnNldDogMHgxMCAgVGltZXIgQ2FwdHVyZSBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzIzOjBdICB8Q0FQREFUICAgIHxUaW1lciBDYXB0dXJlIERhdGEgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIENBUEVOIChUSU1FUnhfRVhUQ1RMWzNdKSBiaXQgaXMgc2V0LCBDQVBGVU5DUyAoVElNRVJ4X0VYVENUTFs0XSkgYml0IGlzIDAsIGFuZCBhIHRyYW5zaXRpb24gb24gVE14X0VYVCBwaW4gbWF0Y2hlZCB0aGUgQ0FQRURHRSAoVElNRVJ4X0VYVENUTFsxNDoxMl0pIHNldHRpbmcsIENBUElGIChUSU1FUnhfRUlOVFNUU1swXSkgd2lsbCBzZXQgdG8gMSBhbmQgdGhlIGN1cnJlbnQgdGltZXIgY291bnRlciB2YWx1ZSBDTlQgKFRJTUVSeF9DTlRbMjM6MF0pIHdpbGwgYmUgYXV0by1sb2FkZWQgaW50byB0aGlzIENBUERBVCBmaWVsZC4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OkVYVENUTAorICAgICAqIE9mZnNldDogMHgxNCAgVGltZXIgRXh0ZXJuYWwgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENOVFBIQVNFICB8VGltZXIgRXh0ZXJuYWwgQ291bnQgUGhhc2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIGRldGVjdGlvbiBwaGFzZSBvZiBleHRlcm5hbCBjb3VudGluZyBwaW4gVE14ICh4PSAwfjMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBIGZhbGxpbmcgZWRnZSBvZiBleHRlcm5hbCBjb3VudGluZyBwaW4gd2lsbCBiZSBjb3VudGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHJpc2luZyBlZGdlIG9mIGV4dGVybmFsIGNvdW50aW5nIHBpbiB3aWxsIGJlIGNvdW50ZWQuCisgICAgICogfFszXSAgICAgfENBUEVOICAgICB8VGltZXIgRXh0ZXJuYWwgQ2FwdHVyZSBQaW4gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIFRNeF9FWFQgY2FwdHVyZSBwaW4gaW5wdXQgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9VE14X0VYVCAoeD0gMH4zKSBwaW4gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9VE14X0VYVCAoeD0gMH4zKSBwaW4gRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8Q0FQRlVOQ1MgIHxDYXB0dXJlIEZ1bmN0aW9uIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBDYXB0dXJlIE1vZGUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgUmVzZXQgTW9kZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXaGVuIENBUEZVTkNTIGlzIDAsIHRyYW5zaXRpb24gb24gVE14X0VYVCAoeD0gMH4zKSBwaW4gaXMgdXNpbmcgdG8gc2F2ZSBjdXJyZW50IDI0LWJpdCB0aW1lciBjb3VudGVyIHZhbHVlIChDTlQgdmFsdWUpIHRvIENBUERBVCBmaWVsZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogV2hlbiBDQVBGVU5DUyBpcyAxLCB0cmFuc2l0aW9uIG9uIFRNeF9FWFQgKHg9IDB+MykgcGluIGlzIHVzaW5nIHRvIHNhdmUgY3VycmVudCAyNC1iaXQgdGltZXIgY291bnRlciB2YWx1ZSAoQ05UIHZhbHVlKSB0byBDQVBEQVQgZmllbGQgdGhlbiBDTlQgdmFsdWUgd2lsbCBiZSByZXNldCBpbW1lZGlhdGVseS4KKyAgICAgKiB8WzVdICAgICB8Q0FQSUVOICAgIHxUaW1lciBFeHRlcm5hbCBDYXB0dXJlIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRNeF9FWFQgKHg9IDB+MykgcGluIGRldGVjdGlvbiBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRNeF9FWFQgKHg9IDB+MykgcGluIGRldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBDQVBJRU4gaXMgdXNlZCB0byBlbmFibGUgdGltZXIgZXh0ZXJuYWwgaW50ZXJydXB0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQ0FQSUVOIGVuYWJsZWQsIHRpbWVyIHdpbGwgcmlzZSBhbiBpbnRlcnJ1cHQgd2hlbiBDQVBJRiAoVElNRVJ4X0VJTlRTVFNbMF0pIGlzIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIGV4YW1wbGUsIHdoaWxlIENBUElFTiA9IDEsIENBUEVOID0gMSwgYW5kIENBUEVER0UgPSAwMCwgYSAxIHRvIDAgdHJhbnNpdGlvbiBvbiB0aGUgVE14X0VYVCBwaW4gd2lsbCBjYXVzZSB0aGUgQ0FQSUYgdG8gYmUgc2V0IHRoZW4gdGhlIGludGVycnVwdCBzaWduYWwgaXMgZ2VuZXJhdGVkIGFuZCBzZW50IHRvIE5WSUMgdG8gaW5mb3JtIENQVS4KKyAgICAgKiB8WzZdICAgICB8Q0FQREJFTiAgIHxUaW1lciBFeHRlcm5hbCBDYXB0dXJlIFBpbiBEZS1ib3VuY2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUTXhfRVhUICh4PSAwfjMpIHBpbiBkZS1ib3VuY2Ugb3IgQUNNUCBvdXRwdXQgZGUtYm91bmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUTXhfRVhUICh4PSAwfjMpIHBpbiBkZS1ib3VuY2Ugb3IgQUNNUCBvdXRwdXQgZGUtYm91bmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgdGhpcyBiaXQgaXMgZW5hYmxlZCwgdGhlIGVkZ2UgZGV0ZWN0aW9uIG9mIFRNeF9FWFQgcGluIG9yIEFDTVAgb3V0cHV0IGlzIGRldGVjdGVkIHdpdGggZGUtYm91bmNlIGNpcmN1aXQuCisgICAgICogfFs3XSAgICAgfENOVERCRU4gICB8VGltZXIgQ291bnRlciBQaW4gRGUtYm91bmNlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVE14ICh4PSAwfjMpIHBpbiBkZS1ib3VuY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRNeCAoeD0gMH4zKSBwaW4gZGUtYm91bmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgdGhpcyBiaXQgaXMgZW5hYmxlZCwgdGhlIGVkZ2UgZGV0ZWN0aW9uIG9mIFRNeCBwaW4gaXMgZGV0ZWN0ZWQgd2l0aCBkZS1ib3VuY2UgY2lyY3VpdC4KKyAgICAgKiB8WzhdICAgICB8QUNNUFNTRUwgIHxBQ01QIFNvdXJjZSBTZWxlY3Rpb24gdG8gVHJpZ2dlciBDYXB0dXJlIEZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgRnVuY3Rpb24gc291cmNlIGlzIGZyb20gaW50ZXJuYWwgQUNNUDAgb3V0cHV0IHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBGdW5jdGlvbiBzb3VyY2UgaXMgZnJvbSBpbnRlcm5hbCBBQ01QMSBvdXRwdXQgc2lnbmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IHRoZXNlIGJpdHMgb25seSBhdmFpbGFibGUgd2hlbiBDQVBTUkMgKFRJTUVSeF9DVExbMjJdKSBpcyAxLgorICAgICAqIHxbMTQ6MTJdIHxDQVBFREdFICAgfFRpbWVyIEV4dGVybmFsIENhcHR1cmUgUGluIEVkZ2UgRGV0ZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBmaXJzdCBjYXB0dXJlIGV2ZW50IGlzIGdlbmVyYXRlZCwgdGhlIENOVCAoVElNRVJ4X0NOVFsyMzowXSkgd2lsbCBiZSByZXNldCB0byAwIGFuZCBmaXJzdCBDQVBEQVQgKFRJTUVSeF9DQVBbMjM6MF0pIHNob3VsZCBiZSB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IENhcHR1cmUgZXZlbnQgb2NjdXJyZWQgd2hlbiBkZXRlY3QgZmFsbGluZyBlZGdlIHRyYW5zZmVyIG9uIFRNeF9FWFQgKHg9IDB+MykgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IENhcHR1cmUgZXZlbnQgb2NjdXJyZWQgd2hlbiBkZXRlY3QgcmlzaW5nIGVkZ2UgdHJhbnNmZXIgb24gVE14X0VYVCAoeD0gMH4zKSBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gQ2FwdHVyZSBldmVudCBvY2N1cnJlZCB3aGVuIGRldGVjdCBib3RoIGZhbGxpbmcgYW5kIHJpc2luZyBlZGdlIHRyYW5zZmVyIG9uIFRNeF9FWFQgKHg9IDB+MykgcGluLCBhbmQgZmlyc3QgY2FwdHVyZSBldmVudCBvY2N1cnJlZCBhdCBmYWxsaW5nIGVkZ2UgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gQ2FwdHVyZSBldmVudCBvY2N1cnJlZCB3aGVuIGRldGVjdCBib3RoIHJpc2luZyBhbmQgZmFsbGluZyBlZGdlIHRyYW5zZmVyIG9uIFRNeF9FWFQgKHg9IDB+MykgcGluLCBhbmQgZmlyc3QgY2FwdHVyZSBldmVudCBvY2N1cnJlZCBhdCByaXNpbmcgZWRnZSB0cmFuc2Zlci4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gRmlyc3QgY2FwdHVyZSBldmVudCBvY2N1cnJlZCBhdCBmYWxsaW5nIGVkZ2UsIGZvbGxvd3MgY2FwdHVyZSBldmVudHMgYXJlIGF0IHJpc2luZyBlZGdlIHRyYW5zZmVyIG9uIFRNeF9FWFQgKHg9IDB+MykgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IEZpcnN0IGNhcHR1cmUgZXZlbnQgb2NjdXJyZWQgYXQgcmlzaW5nIGVkZ2UsIGZvbGxvd3MgY2FwdHVyZSBldmVudHMgYXJlIGF0IGZhbGxpbmcgZWRnZSB0cmFuc2ZlciBvbiBUTXhfRVhUICh4PSAwfjMpIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAsIDEwMSA9IFJlc2VydmVkLgorICAgICAqIHxbMTZdICAgIHxFQ05UU1NFTCAgfEV2ZW50IENvdW50ZXIgU291cmNlIFNlbGVjdGlvbiB0byBUcmlnZ2VyIEV2ZW50IENvdW50ZXIgRnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXZlbnQgQ291bnRlciBpbnB1dCBzb3VyY2UgaXMgZnJvbSBUTXggKHg9IDB+MykgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFdmVudCBDb3VudGVyIGlucHV0IHNvdXJjZSBpcyBmcm9tIFVTQiBpbnRlcm5hbCBTT0Ygb3V0cHV0IHNpZ25hbC4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OkVJTlRTVFMKKyAgICAgKiBPZmZzZXQ6IDB4MTggIFRpbWVyIEV4dGVybmFsIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDQVBJRiAgICAgfFRpbWVyIEV4dGVybmFsIENhcHR1cmUgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIHRpbWVyIGV4dGVybmFsIGNhcHR1cmUgaW50ZXJydXB0IGZsYWcgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUTXhfRVhUICh4PSAwfjMpIHBpbiBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVE14X0VYVCAoeD0gMH4zKSBwaW4gaW50ZXJydXB0IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogV2hlbiBDQVBFTiAoVElNRVJ4X0VYVENUTFszXSkgYml0IGlzIHNldCwgQ0FQRlVOQ1MgKFRJTUVSeF9FWFRDVExbNF0pIGJpdCBpcyAwLCBhbmQgYSB0cmFuc2l0aW9uIG9uIFRNeF9FWFQgKHg9IDB+MykgcGluIG1hdGNoZWQgdGhlIENBUEVER0UgKFRJTUVSeF9FWFRDVExbMjoxXSkgc2V0dGluZywgdGhpcyBiaXQgd2lsbCBzZXQgdG8gMSBieSBoYXJkd2FyZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogVGhlcmUgaXMgYSBuZXcgaW5jb21pbmcgY2FwdHVyZSBldmVudCBkZXRlY3RlZCBiZWZvcmUgQ1BVIGNsZWFyaW5nIHRoZSBDQVBJRiBzdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgYWJvdmUgY29uZGl0aW9uIG9jY3VycmVkLCB0aGUgVGltZXIgd2lsbCBrZWVwIHJlZ2lzdGVyIFRJTUVSeF9DQVAgdW5jaGFuZ2VkIGFuZCBkcm9wIHRoZSBuZXcgY2FwdHVyZSB2YWx1ZS4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlRSR0NUTAorICAgICAqIE9mZnNldDogMHgxQyAgVGltZXIgVHJpZ2dlciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8VFJHU1NFTCAgIHxUcmlnZ2VyIFNvdXJjZSBTZWxlY3QgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBzZWxlY3QgaW50ZXJuYWwgdHJpZ2dlciBzb3VyY2UgaXMgZm9ybSB0aW1lciB0aW1lLW91dCBpbnRlcnJ1cHQgc2lnbmFsIG9yIGNhcHR1cmUgaW50ZXJydXB0IHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZS1vdXQgaW50ZXJydXB0IHNpZ25hbCBpcyB1c2VkIHRvIGludGVybmFsIHRyaWdnZXIgUFdNLCBQRE1BLCBEQUMsIGFuZCBFQURDLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGludGVycnVwdCBzaWduYWwgaXMgdXNlZCB0byBpbnRlcm5hbCB0cmlnZ2VyIFBXTSwgUERNQSwgREFDLCBhbmQgRUFEQy4KKyAgICAgKiB8WzFdICAgICB8VFJHRVBXTSAgIHxUcmlnZ2VyIFBXTSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIGVhY2ggdGltZXIgdGltZS1vdXQgZXZlbnQgb3IgY2FwdHVyZSBldmVudCBjYW4gYmUgYXMgUFdNIGNvdW50ZXIgY2xvY2sgc291cmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lciBpbnRlcnJ1cHQgdHJpZ2dlciBQV00gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyIGludGVycnVwdCB0cmlnZ2VyIFBXTSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIFRSR1NTRUwgKFRJTUVSeF9UUkdDVExbMF0pID0gMCwgdGltZS1vdXQgaW50ZXJydXB0IHNpZ25hbCBhcyBQV00gY291bnRlciBjbG9jayBzb3VyY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgVFJHU1NFTCAoVElNRVJ4X1RSR0NUTFswXSkgPSAxLCBjYXB0dXJlIGludGVycnVwdCBzaWduYWwgYXMgUFdNIGNvdW50ZXIgY2xvY2sgc291cmNlLgorICAgICAqIHxbMl0gICAgIHxUUkdFQURDICAgfFRyaWdnZXIgRUFEQyBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIGVhY2ggdGltZXIgdGltZS1vdXQgZXZlbnQgb3IgY2FwdHVyZSBldmVudCBjYW4gYmUgdHJpZ2dlcmVkIEVBREMgY29udmVyc2lvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIgaW50ZXJydXB0IHRyaWdnZXIgRUFEQyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIgaW50ZXJydXB0IHRyaWdnZXIgRUFEQyBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIFRSR1NTRUwgKFRJTUVSeF9UUkdDVExbMF0pID0gMCwgdGltZS1vdXQgaW50ZXJydXB0IHNpZ25hbCB3aWxsIHRyaWdnZXIgRUFEQyBjb252ZXJzaW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFRSR1NTRUwgKFRJTUVSeF9UUkdDVExbMF0pID0gMSwgY2FwdHVyZSBpbnRlcnJ1cHQgc2lnbmFsIHdpbGwgdHJpZ2dlciBBREMgY29udmVyc2lvbi4KKyAgICAgKiB8WzNdICAgICB8VFJHREFDICAgIHxUcmlnZ2VyIERBQyBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHRpbWVyIHRpbWUtb3V0IGludGVycnVwdCBvciBjYXB0dXJlIGludGVycnVwdCBjYW4gYmUgdHJpZ2dlcmVkIERBQy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIgaW50ZXJydXB0IHRyaWdnZXIgREFDIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lciBpbnRlcnJ1cHQgdHJpZ2dlciBEQUMgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBUUkdTU0VMIChUSU1FUnhfVFJHQ1RMWzBdKSA9IDAsIHRpbWUtb3V0IGludGVycnVwdCBzaWduYWwgd2lsbCB0cmlnZ2VyIERBQy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBUUkdTU0VMIChUSU1FUnhfVFJHQ1RMWzBdKSA9IDEsIGNhcHR1cmUgaW50ZXJydXB0IHNpZ25hbCB3aWxsIHRyaWdnZXIgREFDLgorICAgICAqIHxbNF0gICAgIHxUUkdQRE1BICAgfFRyaWdnZXIgUERNQSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIGVhY2ggdGltZXIgdGltZS1vdXQgZXZlbnQgb3IgY2FwdHVyZSBldmVudCBjYW4gYmUgdHJpZ2dlcmVkIFBETUEgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyIGludGVycnVwdCB0cmlnZ2VyIFBETUEgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyIGludGVycnVwdCB0cmlnZ2VyIFBETUEgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBUUkdTU0VMIChUSU1FUnhfVFJHQ1RMWzBdKSA9IDAsIHRpbWUtb3V0IGludGVycnVwdCBzaWduYWwgd2lsbCB0cmlnZ2VyIFBETUEgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgVFJHU1NFTCAoVElNRVJ4X1RSR0NUTFswXSkgPSAxLCBjYXB0dXJlIGludGVycnVwdCBzaWduYWwgd2lsbCB0cmlnZ2VyIFBETUEgdHJhbnNmZXIuCisgICAgICogQHZhciBUSU1FUl9UOjpBTFRDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MjAgIFRpbWVyIEFsdGVybmF0aXZlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxGVU5DU0VMICAgfEZ1bmN0aW9uIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lciBjb250cm9sbGVyIGlzIHVzZWQgYXMgdGltZXIgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyIGNvbnRyb2xsZXIgaXMgdXNlZCBhcyBQV00gZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiB0aW1lciBpcyB1c2VkIGFzIFBXTSwgdGhlIGNsb2NrIHNvdXJjZSBvZiB0aW1lIGNvbnRyb2xsZXIgd2lsbCBiZSBmb3JjZWQgdG8gUENMS3ggYXV0b21hdGljYWxseS4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTUNUTAorICAgICAqIE9mZnNldDogMHg0MCAgVGltZXIgUFdNIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDTlRFTiAgICAgfFBXTSBDb3VudGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUFdNIGNvdW50ZXIgYW5kIGNsb2NrIHByZXNjYWxlIFN0b3AgUnVubmluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNIGNvdW50ZXIgYW5kIGNsb2NrIHByZXNjYWxlIFN0YXJ0IFJ1bm5pbmcuCisgICAgICogfFsyOjFdICAgfENOVFRZUEUgICB8UFdNIENvdW50ZXIgQmVoYXZpb3IgVHlwZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVXAgY291bnQgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IERvd24gY291bnQgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFVwLWRvd24gY291bnQgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkLgorICAgICAqIHxbM10gICAgIHxDTlRNT0RFICAgfFBXTSBDb3VudGVyIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXV0by1yZWxvYWQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT25lLXNob3QgbW9kZS4KKyAgICAgKiB8WzhdICAgICB8Q1RSTEQgICAgIHxDZW50ZXIgUmUtbG9hZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwLWRvd24gY291bnQgdHlwZSwgUEVSSU9EIHdpbGwgbG9hZCB0byBQQlVGIHdoZW4gY3VycmVudCBQV00gcGVyaW9kIGlzIGNvbXBsZXRlZCBhbHdheXMgYW5kIENNUCB3aWxsIGxvYWQgdG8gQ01QQlVGIGF0IHRoZSBjZW50ZXIgcG9pbnQgb2YgY3VycmVudCBwZXJpb2QuCisgICAgICogfFs5XSAgICAgfElNTUxERU4gICB8SW1tZWRpYXRlbHkgTG9hZCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBFUklPRCB3aWxsIGxvYWQgdG8gUEJVRiB3aGVuIGN1cnJlbnQgUFdNIHBlcmlvZCBpcyBjb21wbGV0ZWQgbm8gbWF0dGVyIENUUkxEIGlzIGVuYWJsZWQvZGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBDVFJMRCBpcyBkaXNhYmxlZCwgQ01QIHdpbGwgbG9hZCB0byBDTVBCVUYgd2hlbiBjdXJyZW50IFBXTSBwZXJpb2QgaXMgY29tcGxldGVkOyBpZiBDVFJMRCBpcyBlbmFibGVkIGluIHVwLWRvd24gY291bnQgdHlwZSwgQ01QIHdpbGwgbG9hZCB0byBDTVBCVUYgYXQgdGhlIGNlbnRlciBwb2ludCBvZiBjdXJyZW50IHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9EL0NNUCB3aWxsIGxvYWQgdG8gUEJVRi9DTVBCVUYgaW1tZWRpYXRlbHkgd2hlbiB1c2VyIHVwZGF0ZSBQRVJJT0QvQ01QLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIElNTUxERU4gaXMgZW5hYmxlZCwgQ1RSTEQgd2lsbCBiZSBpbnZhbGlkLgorICAgICAqIHxbMTZdICAgIHxPVVRNT0RFICAgfFBXTSBPdXRwdXQgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNvbnRyb2xzIHRoZSBvdXRwdXQgbW9kZSBvZiBjb3JyZXNwb25kaW5nIFBXTSBjaGFubmVsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV00gaW5kZXBlbmRlbnQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNIGNvbXBsZW1lbnRhcnkgbW9kZS4KKyAgICAgKiB8WzMwXSAgICB8REJHSEFMVCAgIHxJQ0UgRGVidWcgTW9kZSBDb3VudGVyIEhhbHQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgZGVidWcgbW9kZSBjb3VudGVyIGhhbHQgaXMgZW5hYmxlZCwgUFdNIGNvdW50ZXIgd2lsbCBrZWVwIGN1cnJlbnQgdmFsdWUgdW50aWwgZXhpdCBJQ0UgZGVidWcgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSUNFIGRlYnVnIG1vZGUgY291bnRlciBoYWx0IGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElDRSBkZWJ1ZyBtb2RlIGNvdW50ZXIgaGFsdCBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFszMV0gICAgfERCR1RSSU9GRiB8SUNFIERlYnVnIE1vZGUgQWNrbm93bGVkZ2UgRGlzYWJsZSBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElDRSBkZWJ1ZyBtb2RlIGFja25vd2xlZGdtZW50IGVmZmVjdHMgUFdNIG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQV00gb3V0cHV0IHBpbiB3aWxsIGJlIGZvcmNlZCBhcyB0cmktc3RhdGUgd2hpbGUgSUNFIGRlYnVnIG1vZGUgYWNrbm93bGVkZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJQ0UgZGVidWcgbW9kZSBhY2tub3dsZWRnbWVudCBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQV00gb3V0cHV0IHBpbiB3aWxsIGtlZXAgb3V0cHV0IG5vIG1hdHRlciBJQ0UgZGVidWcgbW9kZSBhY2tub3dsZWRnZWQgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNQ0xLU1JDCisgICAgICogT2Zmc2V0OiAweDQ0ICBUaW1lciBQV00gQ291bnRlciBDbG9jayBTb3VyY2UgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxDTEtTUkMgICAgfFBXTSBDb3VudGVyIENsb2NrIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUFdNIGNvdW50ZXIgY2xvY2sgc291cmNlIGNhbiBiZSBzZWxlY3RlZCBmcm9tIFRNUnhfQ0xLIG9yIGludGVybmFsIHRpbWVyIHRpbWUtb3V0IG9yIGNhcHR1cmUgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gVE1SeF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gSW50ZXJuYWwgVElNRVIwIHRpbWUtb3V0IG9yIGNhcHR1cmUgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gSW50ZXJuYWwgVElNRVIxIHRpbWUtb3V0IG9yIGNhcHR1cmUgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gSW50ZXJuYWwgVElNRVIyIHRpbWUtb3V0IG9yIGNhcHR1cmUgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gSW50ZXJuYWwgVElNRVIzIHRpbWUtb3V0IG9yIGNhcHR1cmUgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgVGltZXIgUFdNIGZ1bmN0aW9uIGlzIGVuYWJsZWQsIHRoZSBQV00gY291bnRlciBjbG9jayBzb3VyY2UgY2FuIGJlIHNlbGVjdGVkIGZyb20gVE1SMF9DTEssIFRJTUVSMSBpbnRlcnJ1cHQgZXZlbnRzLCBUSU1FUjIgaW50ZXJydXB0IGV2ZW50cywgb3IgVElNRVIzIGludGVycnVwdCBldmVudHMuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01DTEtQU0MKKyAgICAgKiBPZmZzZXQ6IDB4NDggIFRpbWVyIFBXTSBDb3VudGVyIENsb2NrIFByZS1zY2FsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMTowXSAgfENMS1BTQyAgICB8UFdNIENvdW50ZXIgQ2xvY2sgUHJlLXNjYWxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGFjdGl2ZSBjbG9jayBvZiBQV00gY291bnRlciBpcyBkZWNpZGVkIGJ5IGNvdW50ZXIgY2xvY2sgcHJlc2NhbGUgYW5kIGRpdmlkZWQgYnkgKENMS1BTQyArIDEpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQ0xLUFNDIGlzIDAsIHRoZW4gdGhlcmUgaXMgbm8gc2NhbGluZyBpbiBQV00gY291bnRlciBjbG9jayBzb3VyY2UuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01DTlRDTFIKKyAgICAgKiBPZmZzZXQ6IDB4NEMgIFRpbWVyIFBXTSBDbGVhciBDb3VudGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q05UQ0xSICAgIHxDbGVhciBQV00gQ291bnRlciBDb250cm9sIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBieSBoYXJkd2FyZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhciAxNi1iaXQgUFdNIGNvdW50ZXIgdG8gMHgxMDAwMCBpbiB1cCBhbmQgdXAtZG93biBjb3VudCB0eXBlIGFuZCByZXNldCBjb3VudGVyIHZhbHVlIHRvIFBFUklPRCBpbiBkb3duIGNvdW50IHR5cGUuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01QRVJJT0QKKyAgICAgKiBPZmZzZXQ6IDB4NTAgIFRpbWVyIFBXTSBQZXJpb2QgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxQRVJJT0QgICAgfFBXTSBQZXJpb2QgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cCBjb3VudCB0eXBlOiBQV00gY291bnRlciBjb3VudHMgZnJvbSAwIHRvIFBFUklPRCwgYW5kIHJlc3RhcnRzIGZyb20gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBkb3duIGNvdW50IHR5cGU6IFBXTSBjb3VudGVyIGNvdW50cyBmcm9tIFBFUklPRCB0byAwLCBhbmQgcmVzdGFydHMgZnJvbSBQRVJJT0QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gdXAtZG93biBjb3VudCB0eXBlOiBQV00gY291bnRlciBjb3VudHMgZnJvbSAwIHRvIFBFUklPRCwgdGhlbiBkZWNyZW1lbnRzIHRvIDAgYW5kIHJlcGVhdHMgYWdhaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gdXAgYW5kIGRvd24gY291bnQgdHlwZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQV00gcGVyaW9kIHRpbWUgPSAoUEVSSU9EICsgMSkgKiAoQ0xLUFNDICsgMSkgKiBUTVJ4X1BXTUNMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cC1kb3duIGNvdW50IHR5cGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UFdNIHBlcmlvZCB0aW1lID0gMiAqIFBFUklPRCAqIChDTEtQU0MrIDEpICogVE1SeF9QV01DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVXNlciBzaG91bGQgdGFrZSBjYXJlIERJUkYgKFRJTUVSeF9QV01DTlRbMTZdKSBiaXQgaW4gdXAvZG93bi91cC1kb3duIGNvdW50IHR5cGUgdG8gbW9uaXRvciBjdXJyZW50IGNvdW50ZXIgZGlyZWN0aW9uIGluIGVhY2ggY291bnQgdHlwZS4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTUNNUERBVAorICAgICAqIE9mZnNldDogMHg1NCAgVGltZXIgUFdNIENvbXBhcmF0b3IgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxDTVAgICAgICAgfFBXTSBDb21wYXJhdG9yIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UFdNIENNUCBpcyB1c2VkIHRvIGNvbXBhcmUgd2l0aCBQV00gQ05UIHRvIGdlbmVyYXRlIFBXTSBvdXRwdXQgd2F2ZWZvcm0sIGludGVycnVwdCBldmVudHMgYW5kIHRyaWdnZXIgQURDIHRvIHN0YXJ0IGNvbnZlcnQuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01EVENUTAorICAgICAqIE9mZnNldDogMHg1OCAgVGltZXIgUFdNIERlYWQtVGltZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzExOjBdICB8RFRDTlQgICAgIHxEZWFkLXRpbWUgQ291bnRlciAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGVhZC10aW1lIGNhbiBiZSBjYWxjdWxhdGVkIGZyb20gdGhlIGZvbGxvd2luZyB0d28gZm9ybXVsYXM6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGVhZC10aW1lID0gKERUQ05UWzExOjBdICsgMSkgKiBUTVJ4X1BXTUNMSywgaWYgRFRDS1NFTCBpcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERlYWQtdGltZSA9IChEVENOVFsxMTowXSArIDEpICogVE1SeF9QV01DTEsgKiAoQ0xLUFNDICsgMSksIGlmIERUQ0tTRUwgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE2XSAgICB8RFRFTiAgICAgIHxFbmFibGUgRGVhZC10aW1lIEluc2VydGlvbiBmb3IgUFdNeF9DSDAgYW5kIFBXTXhfQ0gxIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERlYWQtdGltZSBpbnNlcnRpb24gZnVuY3Rpb24gaXMgb25seSBhY3RpdmUgd2hlbiBQV00gY29tcGxlbWVudGFyeSBtb2RlIGlzIGVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBkZWFkLSB0aW1lIGluc2VydGlvbiBpcyBpbmFjdGl2ZSwgdGhlIG91dHB1dHMgb2YgUFdNeF9DSDAgYW5kIFBXTXhfQ0gxIGFyZSBjb21wbGVtZW50YXJ5IHdpdGhvdXQgYW55IGRlbGF5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEZWFkLXRpbWUgaW5zZXJ0aW9uIERpc2FibGVkIG9uIHRoZSBwaW4gcGFpci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGVhZC10aW1lIGluc2VydGlvbiBFbmFibGVkIG9uIHRoZSBwaW4gcGFpci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzI0XSAgICB8RFRDS1NFTCAgIHxEZWFkLXRpbWUgQ2xvY2sgU2VsZWN0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEZWFkLXRpbWUgY2xvY2sgc291cmNlIGZyb20gVE1SeF9QV01DTEsgd2l0aG91dCBjb3VudGVyIGNsb2NrIHByZXNjYWxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEZWFkLXRpbWUgY2xvY2sgc291cmNlIGZyb20gVE1SeF9QV01DTEsgd2l0aCBjb3VudGVyIGNsb2NrIHByZXNjYWxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNQ05UCisgICAgICogT2Zmc2V0OiAweDVDICBUaW1lciBQV00gQ291bnRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfENOVCAgICAgICB8UFdNIENvdW50ZXIgVmFsdWUgUmVnaXN0ZXIgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBtb25pdG9yIENOVCB0byBrbm93IHRoZSBjdXJyZW50IGNvdW50ZXIgdmFsdWUgaW4gMTYtYml0IHBlcmlvZCBjb3VudGVyLgorICAgICAqIHxbMTZdICAgIHxESVJGICAgICAgfFBXTSBDb3VudGVyIERpcmVjdGlvbiBJbmRpY2F0b3IgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb3VudGVyIGlzIGFjdGl2ZSBpbiBkb3duIGNvdW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb3VudGVyIGlzIGFjdGl2ZSB1cCBjb3VudC4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTU1TS0VOCisgICAgICogT2Zmc2V0OiAweDYwICBUaW1lciBQV00gT3V0cHV0IE1hc2sgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8TVNLRU4wICAgIHxQV014X0NIMCBPdXRwdXQgTWFzayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFBXTXhfQ0gwIG91dHB1dCBzaWduYWwgd2lsbCBiZSBtYXNrZWQgd2hlbiB0aGlzIGJpdCBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFBXTXhfQ0gwIHdpbGwgb3V0cHV0IE1TS0RBVDAgKFRJTUVSX1BXTU1TS1swXSkgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUFdNeF9DSDAgb3V0cHV0IHNpZ25hbCBpcyBub24tbWFza2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV014X0NIMCBvdXRwdXQgc2lnbmFsIGlzIG1hc2tlZCBhbmQgb3V0cHV0IE1TS0RBVDAgZGF0YS4KKyAgICAgKiB8WzFdICAgICB8TVNLRU4xICAgIHxQV014X0NIMSBPdXRwdXQgTWFzayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFBXTXhfQ0gxIG91dHB1dCBzaWduYWwgd2lsbCBiZSBtYXNrZWQgd2hlbiB0aGlzIGJpdCBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFBXTXhfQ0gxIHdpbGwgb3V0cHV0IE1TS0RBVDEgKFRJTUVSX1BXTU1TS1sxXSkgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUFdNeF9DSDEgb3V0cHV0IHNpZ25hbCBpcyBub24tbWFza2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV014X0NIMSBvdXRwdXQgc2lnbmFsIGlzIG1hc2tlZCBhbmQgb3V0cHV0IE1TS0RBVDEgZGF0YS4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTU1TSworICAgICAqIE9mZnNldDogMHg2NCAgVGltZXIgUFdNIE91dHB1dCBNYXNrIERhdGEgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfE1TS0RBVDAgICB8UFdNeF9DSDAgT3V0cHV0IE1hc2sgRGF0YSBDb250cm9sIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gY29udHJvbCB0aGUgb3V0cHV0IHN0YXRlIG9mIFBXTXhfQ0gwIHBpbiB3aGVuIFBXTXhfQ0gwIG91dHB1dCBtYXNrIGZ1bmN0aW9uIGlzIGVuYWJsZWQgKE1TS0VOMCA9IDEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdXRwdXQgbG9naWMgTG93IHRvIFBXTXhfQ0gwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXRwdXQgbG9naWMgSGlnaCB0byBQV014X0NIMC4KKyAgICAgKiB8WzFdICAgICB8TVNLREFUMSAgIHxQV014X0NIMSBPdXRwdXQgTWFzayBEYXRhIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBjb250cm9sIHRoZSBvdXRwdXQgc3RhdGUgb2YgUFdNeF9DSDEgcGluIHdoZW4gUFdNeF9DSDEgb3V0cHV0IG1hc2sgZnVuY3Rpb24gaXMgZW5hYmxlZCAoTVNLRU4xID0gMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCBsb2dpYyBMb3cgdG8gUFdNeF9DSDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE91dHB1dCBsb2dpYyBIaWdoIHRvIFBXTXhfQ0gxLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNQk5GCisgICAgICogT2Zmc2V0OiAweDY4ICBUaW1lciBQV00gQnJha2UgUGluIE5vaXNlIEZpbHRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJSS05GRU4gICB8QnJha2UgUGluIE5vaXNlIEZpbHRlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBpbiBub2lzZSBmaWx0ZXIgZGV0ZWN0IG9mIFBXTXhfQlJBS0V5IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQaW4gbm9pc2UgZmlsdGVyIGRldGVjdCBvZiBQV014X0JSQUtFeSBFbmFibGVkLgorICAgICAqIHxbMzoxXSAgIHxCUktORlNFTCAgfEJyYWtlIFBpbiBOb2lzZSBGaWx0ZXIgQ2xvY2sgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gTm9pc2UgZmlsdGVyIGNsb2NrIGlzIFBDTEt4LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IE5vaXNlIGZpbHRlciBjbG9jayBpcyBQQ0xLeC8yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IE5vaXNlIGZpbHRlciBjbG9jayBpcyBQQ0xLeC80LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IE5vaXNlIGZpbHRlciBjbG9jayBpcyBQQ0xLeC84LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IE5vaXNlIGZpbHRlciBjbG9jayBpcyBQQ0xLeC8xNi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBOb2lzZSBmaWx0ZXIgY2xvY2sgaXMgUENMS3gvMzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gTm9pc2UgZmlsdGVyIGNsb2NrIGlzIFBDTEt4LzY0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IE5vaXNlIGZpbHRlciBjbG9jayBpcyBQQ0xLeC8xMjguCisgICAgICogfFs2OjRdICAgfEJSS0ZDTlQgICB8QnJha2UgUGluIE5vaXNlIEZpbHRlciBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmaWVsZHMgaXMgdXNlZCB0byBjb250cm9sIHRoZSBhY3RpdmUgbm9pc2UgZmlsdGVyIHNhbXBsZSB0aW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9uY2Ugbm9pc2UgZmlsdGVyIHNhbXBsZSB0aW1lID0gKFBlcmlvZCB0aW1lIG9mIEJSS0RCQ1MpICogQlJLRkNOVC4KKyAgICAgKiB8WzddICAgICB8QlJLUElOViAgIHxCcmFrZSBQaW4gRGV0ZWN0aW9uIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyYWtlIHBpbiBldmVudCB3aWxsIGJlIGRldGVjdGVkIGlmIFBXTXhfQlJBS0V5IHBpbiBzdGF0dXMgdHJhbnNmZXIgZnJvbSBsb3cgdG8gaGlnaCBpbiBlZGdlLWRldGVjdCwgb3IgcGluIHN0YXR1cyBpcyBoaWdoIGluIGxldmVsLWRldGVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJha2UgcGluIGV2ZW50IHdpbGwgYmUgZGV0ZWN0ZWQgaWYgUFdNeF9CUkFLRXkgcGluIHN0YXR1cyB0cmFuc2ZlciBmcm9tIGhpZ2ggdG8gbG93IGluIGVkZ2UtZGV0ZWN0LCBvciBwaW4gc3RhdHVzIGlzIGxvdyBpbiBsZXZlbC1kZXRlY3QgLgorICAgICAqIHxbMTc6MTZdIHxCS1BJTlNSQyAgfEJyYWtlIFBpbiBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBCcmFrZSBwaW4gc291cmNlIGNvbWVzIGZyb20gUFdNMF9CUkFLRTAgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQnJha2UgcGluIHNvdXJjZSBjb21lcyBmcm9tIFBXTTBfQlJBS0UxIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJyYWtlIHBpbiBzb3VyY2UgY29tZXMgZnJvbSBQV00xX0JSQUtFMCBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCcmFrZSBwaW4gc291cmNlIGNvbWVzIGZyb20gUFdNMV9CUkFLRTEgcGluLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNRkFJTEJSSworICAgICAqIE9mZnNldDogMHg2QyAgVGltZXIgUFdNIFN5c3RlbSBGYWlsIEJyYWtlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDU1NCUktFTiAgfENsb2NrIFNlY3VyaXR5IFN5c3RlbSBEZXRlY3Rpb24gVHJpZ2dlciBQV00gQnJha2UgRnVuY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCcmFrZSBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgY2xvY2sgZmFpbCBkZXRlY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJyYWtlIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSBjbG9jayBmYWlsIGRldGVjdGlvbiBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxCT0RCUktFTiAgfEJyb3duLW91dCBEZXRlY3Rpb24gVHJpZ2dlciBQV00gQnJha2UgRnVuY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCcmFrZSBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgQk9EIGV2ZW50IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcmFrZSBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgQk9EIGV2ZW50IEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFJBTUJSS0VOICB8U1JBTSBQYXJpdHkgRXJyb3IgRGV0ZWN0aW9uIFRyaWdnZXIgUFdNIEJyYWtlIEZ1bmN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnJha2UgRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IFNSQU0gcGFyaXR5IGVycm9yIGRldGVjdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJha2UgRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IFNSQU0gcGFyaXR5IGVycm9yIGRldGVjdGlvbiBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxDT1JCUktFTiAgfENvcmUgTG9ja3VwIERldGVjdGlvbiBUcmlnZ2VyIFBXTSBCcmFrZSBGdW5jdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyYWtlIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSBjb3JlIGxvY2t1cCBldmVudCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJha2UgRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IGNvcmUgbG9ja3VwIGV2ZW50IEVuYWJsZWQuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01CUktDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NzAgIFRpbWVyIFBXTSBCcmFrZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q1BPMEVCRU4gIHxFbmFibGUgSW50ZXJuYWwgQUNNUDBfTyBEaWdpdGFsIE91dHB1dCBBcyBFZGdlLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVybmFsIEFDTVAwX08gc2lnbmFsIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJuYWwgQUNNUDBfTyBzaWduYWwgYXMgZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IE9ubHkgaW50ZXJuYWwgQUNNUDBfTyBzaWduYWwgZnJvbSBsb3cgdG8gaGlnaCB3aWxsIGJlIGRldGVjdGVkIGFzIGJyYWtlIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzFdICAgICB8Q1BPMUVCRU4gIHxFbmFibGUgSW50ZXJuYWwgQUNNUDFfTyBEaWdpdGFsIE91dHB1dCBBcyBFZGdlLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVybmFsIEFDTVAxX08gc2lnbmFsIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJuYWwgQUNNUDFfTyBzaWduYWwgYXMgZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IE9ubHkgaW50ZXJuYWwgQUNNUDFfTyBzaWduYWwgZnJvbSBsb3cgdG8gaGlnaCB3aWxsIGJlIGRldGVjdGVkIGFzIGJyYWtlIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzRdICAgICB8QlJLUEVFTiAgIHxFbmFibGUgVE1fQlJBS0V4IFBpbiBBcyBFZGdlLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTXhfQlJBS0V5IHBpbiBldmVudCBhcyBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTXhfQlJBS0V5IHBpbiBldmVudCBhcyBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzddICAgICB8U1lTRUJFTiAgIHxFbmFibGUgU3lzdGVtIEZhaWwgQXMgRWRnZS1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTeXN0ZW0gZmFpbCBjb25kaXRpb24gYXMgZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTeXN0ZW0gZmFpbCBjb25kaXRpb24gYXMgZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs4XSAgICAgfENQTzBMQkVOICB8RW5hYmxlIEludGVybmFsIEFDTVAwX08gRGlnaXRhbCBPdXRwdXQgQXMgTGV2ZWwtZGV0ZWN0IEJyYWtlIFNvdXJjZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJuYWwgQUNNUDBfTyBzaWduYWwgYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJuYWwgQUNNUDBfTyBzaWduYWwgYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBPbmx5IGludGVybmFsIEFDTVAwX08gc2lnbmFsIGZyb20gbG93IHRvIGhpZ2ggd2lsbCBiZSBkZXRlY3RlZCBhcyBicmFrZSBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs5XSAgICAgfENQTzFMQkVOICB8RW5hYmxlIEludGVybmFsIEFDTVAxX08gRGlnaXRhbCBPdXRwdXQgQXMgTGV2ZWwtZGV0ZWN0IEJyYWtlIFNvdXJjZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJuYWwgQUNNUDFfTyBzaWduYWwgYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJuYWwgQUNNUDFfTyBzaWduYWwgYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBPbmx5IGludGVybmFsIEFDTVAxX08gc2lnbmFsIGZyb20gbG93IHRvIGhpZ2ggd2lsbCBiZSBkZXRlY3RlZCBhcyBicmFrZSBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEyXSAgICB8QlJLUExFTiAgIHxFbmFibGUgVE1fQlJBS0V4IFBpbiBBcyBMZXZlbC1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV014X0JSQUtFeSBwaW4gZXZlbnQgYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNeF9CUkFLRXkgcGluIGV2ZW50IGFzIGxldmVsLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE1XSAgICB8U1lTTEJFTiAgIHxFbmFibGUgU3lzdGVtIEZhaWwgQXMgTGV2ZWwtZGV0ZWN0IEJyYWtlIFNvdXJjZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3lzdGVtIGZhaWwgY29uZGl0aW9uIGFzIGxldmVsLWRldGVjdCBicmFrZSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN5c3RlbSBmYWlsIGNvbmRpdGlvbiBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxNzoxNl0gfEJSS0FFVkVOICB8UFdNIEJyYWtlIEFjdGlvbiBTZWxlY3QgZm9yIFBXTXhfQ0gwIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUFdNeF9CUkFLRXkgYnJha2UgZXZlbnQgd2lsbCBub3QgYWZmZWN0IFBXTXhfQ0gwIG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFBXTXhfQ0gwIG91dHB1dCB0cmktc3RhdGUgd2hlbiBQV014X0JSQUtFeSBicmFrZSBldmVudCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBXTXhfQ0gwIG91dHB1dCBsb3cgbGV2ZWwgd2hlbiBQV014X0JSQUtFeSBicmFrZSBldmVudCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBXTXhfQ0gwIG91dHB1dCBoaWdoIGxldmVsIHdoZW4gUFdNeF9CUkFLRXkgYnJha2UgZXZlbnQgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxOToxOF0gfEJSS0FPREQgICB8UFdNIEJyYWtlIEFjdGlvbiBTZWxlY3QgZm9yIFBXTXhfQ0gxIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUFdNeF9CUkFLRXkgYnJha2UgZXZlbnQgd2lsbCBub3QgYWZmZWN0IFBXTXhfQ0gxIG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFBXTXhfQ0gxIG91dHB1dCB0cmktc3RhdGUgd2hlbiBQV014X0JSQUtFeSBicmFrZSBldmVudCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBXTXhfQ0gxIG91dHB1dCBsb3cgbGV2ZWwgd2hlbiBQV014X0JSQUtFeSBicmFrZSBldmVudCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBXTXhfQ0gxIG91dHB1dCBoaWdoIGxldmVsIHdoZW4gUFdNeF9CUkFLRXkgYnJha2UgZXZlbnQgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01QT0xDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NzQgIFRpbWVyIFBXTSBQaW4gT3V0cHV0IFBvbGFyIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQSU5WMCAgICAgfFBXTXhfQ0gwIE91dHB1dCBQaW4gUG9sYXIgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYml0IGlzIHVzZWQgdG8gY29udHJvbCBwb2xhcml0eSBzdGF0ZSBvZiBQV014X0NIMCBvdXRwdXQgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV014X0NIMCBvdXRwdXQgcGluIHBvbGFyIGludmVyc2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTXhfQ0gwIG91dHB1dCBwaW4gcG9sYXIgaW52ZXJzZSBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxQSU5WMSAgICAgfFBXTXhfQ0gxIE91dHB1dCBQaW4gUG9sYXIgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYml0IGlzIHVzZWQgdG8gY29udHJvbCBwb2xhcml0eSBzdGF0ZSBvZiBQV014X0NIMSBvdXRwdXQgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV014X0NIMSBvdXRwdXQgcGluIHBvbGFyIGludmVyc2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTXhfQ0gxIG91dHB1dCBwaW4gcG9sYXIgaW52ZXJzZSBFbmFibGVkLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNUE9FTgorICAgICAqIE9mZnNldDogMHg3OCAgVGltZXIgUFdNIFBpbiBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UE9FTjAgICAgIHxQV014X0NIMCBPdXRwdXQgUGluIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUFdNeF9DSDAgcGluIGF0IHRyaS1zdGF0ZSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV014X0NIMCBwaW4gaW4gb3V0cHV0IG1vZGUuCisgICAgICogfFsxXSAgICAgfFBPRU4xICAgICB8UFdNeF9DSDEgT3V0cHV0IFBpbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTXhfQ0gxIHBpbiBhdCB0cmktc3RhdGUgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNeF9DSDEgcGluIGluIG91dHB1dCBtb2RlLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNU1dCUksKKyAgICAgKiBPZmZzZXQ6IDB4N0MgIFRpbWVyIFBXTSBTb2Z0d2FyZSBUcmlnZ2VyIEJyYWtlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCUktFVFJHICAgfFNvZnR3YXJlIFRyaWdnZXIgRWRnZS1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBPbmx5KSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHRoaXMgYml0IHdpbGwgdHJpZ2dlciBQV00gZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlLCB0aGVuIEJSS0VJRjAgYW5kIEJSS0VJRjEgd2lsbCBzZXQgdG8gMSBhdXRvbWF0aWNhbGx5IGluIFRJTUVSeF9QV01JTlRTVFMxIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOF0gICAgIHxCUktMVFJHICAgfFNvZnR3YXJlIFRyaWdnZXIgTGV2ZWwtZGV0ZWN0IEJyYWtlIFNvdXJjZSAoV3JpdGUgT25seSkgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byB0aGlzIGJpdCB3aWxsIHRyaWdnZXIgUFdNIGxldmVsLWRldGVjdCBicmFrZSBzb3VyY2UsIHRoZW4gQlJLTElGMCBhbmQgQlJLTElGMSB3aWxsIHNldCB0byAxIGF1dG9tYXRpY2FsbHkgaW4gVElNRVJ4X1BXTUlOVFNUUzEgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01JTlRFTjAKKyAgICAgKiBPZmZzZXQ6IDB4ODAgIFRpbWVyIFBXTSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxaSUVOICAgICAgfFBXTSBaZXJvIFBvaW50IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFplcm8gcG9pbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBaZXJvIHBvaW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxQSUVOICAgICAgfFBXTSBQZXJpb2QgUG9pbnQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUGVyaW9kIHBvaW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGVyaW9kIHBvaW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gaW4gdXAtZG93biBjb3VudCB0eXBlLCBwZXJpb2QgcG9pbnQgbWVhbnMgdGhlIGNlbnRlciBwb2ludCBvZiBjdXJyZW50IFBXTSBwZXJpb2QuCisgICAgICogfFsyXSAgICAgfENNUFVJRU4gICB8UFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfENNUERJRU4gICB8UFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01JTlRFTjEKKyAgICAgKiBPZmZzZXQ6IDB4ODQgIFRpbWVyIFBXTSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCUktFSUVOICAgfFBXTSBFZGdlLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV00gZWRnZS1kZXRlY3QgYnJha2UgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV00gZWRnZS1kZXRlY3QgYnJha2UgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs4XSAgICAgfEJSS0xJRU4gICB8UFdNIExldmVsLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV00gbGV2ZWwtZGV0ZWN0IGJyYWtlIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNIGxldmVsLWRldGVjdCBicmFrZSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTUlOVFNUUzAKKyAgICAgKiBPZmZzZXQ6IDB4ODggIFRpbWVyIFBXTSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxaSUYgICAgICAgfFBXTSBaZXJvIFBvaW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gVElNRVJ4X1BXTSBjb3VudGVyIHJlYWNoZXMgemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzFdICAgICB8UElGICAgICAgIHxQV00gUGVyaW9kIFBvaW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gVElNRVJ4X1BXTSBjb3VudGVyIHJlYWNoZXMgUEVSSU9ELgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXaGVuIGluIHVwLWRvd24gY291bnQgdHlwZSwgUElGIGZsYWcgbWVhbnMgdGhlIGNlbnRlciBwb2ludCBmbGFnIG9mIGN1cnJlbnQgUFdNIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsyXSAgICAgfENNUFVJRiAgICB8UFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBUSU1FUnhfUFdNIGNvdW50ZXIgaW4gdXAgY291bnQgZGlyZWN0aW9uIGFuZCByZWFjaGVzIENNUC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgQ01QIGVxdWFsIHRvIFBFUklPRCwgdGhlcmUgaXMgbm8gQ01QVUlGIGZsYWcgaW4gdXAgY291bnQgdHlwZSBhbmQgdXAtZG93biBjb3VudCB0eXBlLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFszXSAgICAgfENNUERJRiAgICB8UFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIFRJTUVSeF9QV00gY291bnRlciBpbiBkb3duIGNvdW50IGRpcmVjdGlvbiBhbmQgcmVhY2hlcyBDTVAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIENNUCBlcXVhbCB0byBQRVJJT0QsIHRoZXJlIGlzIG5vIENNUERJRiBmbGFnIGluIGRvd24gY291bnQgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01JTlRTVFMxCisgICAgICogT2Zmc2V0OiAweDhDICBUaW1lciBQV00gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlJLRUlGMCAgIHxFZGdlLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRmxhZyBvbiBQV014X0NIMCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUFdNeF9DSDAgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV014X0NIMCBlZGdlLWRldGVjdCBicmFrZSBldmVudCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMV0gICAgIHxCUktFSUYxICAgfEVkZ2UtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIFBXTXhfQ0gxIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV014X0NIMSBlZGdlLWRldGVjdCBicmFrZSBldmVudCBkbyBub3QgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTXhfQ0gxIGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs4XSAgICAgfEJSS0xJRjAgICB8TGV2ZWwtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIG9uIFBXTXhfQ0gwIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV014X0NIMCBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV014X0NIMCBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzldICAgICB8QlJLTElGMSAgIHxMZXZlbC1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEZsYWcgb24gUFdNeF9DSDEgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTXhfQ0gxIGxldmVsLWRldGVjdCBicmFrZSBldmVudCBkbyBub3QgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTXhfQ0gxIGxldmVsLWRldGVjdCBicmFrZSBldmVudCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTZdICAgIHxCUktFU1RTMCAgfEVkZ2UgLWRldGVjdCBCcmFrZSBTdGF0dXMgb2YgUFdNeF9DSDAgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUFdNeF9DSDAgZWRnZS1kZXRlY3QgYnJha2Ugc3RhdGUgaXMgcmVsZWFzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTXhfQ0gwIGF0IGVkZ2UtZGV0ZWN0IGJyYWtlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFVzZXIgY2FuIHNldCBCUktFSUYwIDEgdG8gY2xlYXIgQlJLRUlGMCBmbGFnIGFuZCBQV014X0NIMCB3aWxsIHJlbGVhc2UgYnJha2Ugc3RhdGUgd2hlbiBjdXJyZW50IFBXTSBwZXJpb2QgZmluaXNoZWQgYW5kIHJlc3VtZSBQV014X0NIMCBvdXRwdXQgd2F2ZWZvcm0gc3RhcnQgZnJvbSBuZXh0IGZ1bGwgUFdNIHBlcmlvZC4KKyAgICAgKiB8WzE3XSAgICB8QlJLRVNUUzEgIHxFZGdlLWRldGVjdCBCcmFrZSBTdGF0dXMgb2YgUFdNeF9DSDEgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUFdNeF9DSDEgZWRnZS1kZXRlY3QgYnJha2Ugc3RhdGUgaXMgcmVsZWFzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTXhfQ0gxIGF0IGVkZ2UtZGV0ZWN0IGJyYWtlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFVzZXIgY2FuIHNldCBCUktFSUYxIDEgdG8gY2xlYXIgQlJLRUlGMSBmbGFnIGFuZCBQV014X0NIMSB3aWxsIHJlbGVhc2UgYnJha2Ugc3RhdGUgd2hlbiBjdXJyZW50IFBXTSBwZXJpb2QgZmluaXNoZWQgYW5kIHJlc3VtZSBQV014X0NIMSBvdXRwdXQgd2F2ZWZvcm0gc3RhcnQgZnJvbSBuZXh0IGZ1bGwgUFdNIHBlcmlvZC4KKyAgICAgKiB8WzI0XSAgICB8QlJLTFNUUzAgIHxMZXZlbC1kZXRlY3QgQnJha2UgU3RhdHVzIG9mIFBXTXhfQ0gwIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTXhfQ0gwIGxldmVsLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNeF9DSDAgYXQgbGV2ZWwtZGV0ZWN0IGJyYWtlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIFRJTUVSeF9QV00gbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBoYXMgcmVsZWFzZWQsIGJvdGggUFdNeF9DSDAgYW5kIFBXTXhfQ0gxIHdpbGwgcmVsZWFzZSBicmFrZSBzdGF0ZSB3aGVuIGN1cnJlbnQgUFdNIHBlcmlvZCBmaW5pc2hlZCBhbmQgcmVzdW1lIFBXTXhfQ0gwIGFuZCBQV014X0NIMSBvdXRwdXQgd2F2ZWZvcm0gc3RhcnQgZnJvbSBuZXh0IGZ1bGwgUFdNIHBlcmlvZC4KKyAgICAgKiB8WzI1XSAgICB8QlJLTFNUUzEgIHxMZXZlbC1kZXRlY3QgQnJha2UgU3RhdHVzIG9mIFBXTXhfQ0gxIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTXhfQ0gxIGxldmVsLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNeF9DSDEgYXQgbGV2ZWwtZGV0ZWN0IGJyYWtlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIFRJTUVSeF9QV00gbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBoYXMgcmVsZWFzZWQsIGJvdGggUFdNeF9DSDAgYW5kIFBXTXhfQ0gxIHdpbGwgcmVsZWFzZSBicmFrZSBzdGF0ZSB3aGVuIGN1cnJlbnQgUFdNIHBlcmlvZCBmaW5pc2hlZCBhbmQgcmVzdW1lIFBXTXhfQ0gwIGFuZCBQV014X0NIMSBvdXRwdXQgd2F2ZWZvcm0gc3RhcnQgZnJvbSBuZXh0IGZ1bGwgUFdNIHBlcmlvZC4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTUVBRENUUworICAgICAqIE9mZnNldDogMHg5MCAgVGltZXIgUFdNIEFEQyBUcmlnZ2VyIFNvdXJjZSBTZWxlY3QgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxUUkdTRUwgICAgfFBXTSBDb3VudGVyIEV2ZW50IFNvdXJjZSBTZWxlY3QgdG8gVHJpZ2dlciBFQURDIENvbnZlcnNpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBUcmlnZ2VyIEVBREMgY29udmVyc2lvbiBhdCB6ZXJvIHBvaW50IChaSUYpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IFRyaWdnZXIgRUFEQyBjb252ZXJzaW9uIGF0IHBlcmlvZCBwb2ludCAoUElGKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBUcmlnZ2VyIEVBREMgY29udmVyc2lvbiBhdCB6ZXJvIG9yIHBlcmlvZCBwb2ludCAoWklGIG9yIFBJRikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gVHJpZ2dlciBFQURDIGNvbnZlcnNpb24gYXQgY29tcGFyZSB1cCBjb3VudCBwb2ludCAoQ01QVUlGKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBUcmlnZ2VyIEVBREMgY29udmVyc2lvbiBhdCBjb21wYXJlIGRvd24gY291bnQgcG9pbnQgKENNUERJRikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfFs3XSAgICAgfFRSR0VOICAgICB8UFdNIENvdW50ZXIgRXZlbnQgVHJpZ2dlciBFQURDIENvbnZlcnNpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV00gY291bnRlciBldmVudCB0cmlnZ2VyIEVBREMgY29udmVyc2lvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNIGNvdW50ZXIgZXZlbnQgdHJpZ2dlciBFQURDIGNvbnZlcnNpb24gRW5hYmxlZC4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTVNDVEwKKyAgICAgKiBPZmZzZXQ6IDB4OTQgIFRpbWVyIFBXTSBTeW5jaHJvbm91cyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8U1lOQ01PREUgIHxQV00gU3luY2hyb25vdXMgTW9kZSBFbmFibGUgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQV00gc3luY2hyb25vdXMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQV00gc3luY2hyb25vdXMgY291bnRlciBzdGFydCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQV00gc3luY2hyb25vdXMgY291bnRlciBjbGVhciBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxTWU5DU1JDICAgfFBXTSBTeW5jaHJvbm91cyBDb3VudGVyIFN0YXJ0L0NsZWFyIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ291bnRlciBzeW5jaHJvbm91cyBzdGFydC9jbGVhciBieSB0cmlnZ2VyIFRJTUVSMF9QV01TVFJHIFNUUkdFTi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ291bnRlciBzeW5jaHJvbm91cyBzdGFydC9jbGVhciBieSB0cmlnZ2VyIFRJTUVSMl9QV01TVFJHIFNUUkdFTi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgVElNRVIwLzEvMi8zIFBXTSBjb3VudGVyIHN5bmNocm9ub3VzIHNvdXJjZSBhcmUgZnJvbSBUSU1FUjAsIFRJTUVSMF9QV01TQ1RMWzhdLCBUSU1FUjFfUFdNU0NUTFs4XSwgVElNRVIyX1BXTVNDVExbOF0gYW5kIFRJTUVSM19QV01TQ1RMWzhdIHNob3VsZCBiZSAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiBUSU1FUjAvMS8gUFdNIGNvdW50ZXIgc3luY2hyb25vdXMgc291cmNlIGFyZSBmcm9tIFRJTUVSMCwgVElNRVIwX1BXTVNDVExbOF0gYW5kIFRJTUVSMV9QV01TQ1RMWzhdIHNob3VsZCBiZSBzZXQgMCwgYW5kIFRJTUVSMi8zLyBQV00gY291bnRlciBzeW5jaHJvbm91cyBzb3VyY2UgYXJlIGZyb20gVElNRVIyLCBUSU1FMl9QV01TQ1RMWzhdIGFuZCBUSU1FUjNfUFdNU0NUTFs4XSBzaG91bGQgYmUgc2V0IDEuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01TVFJHCisgICAgICogT2Zmc2V0OiAweDk4ICBUaW1lciBQV00gU3luY2hyb25vdXMgVHJpZ2dlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNUUkdFTiAgICB8UFdNIENvdW50ZXIgU3luY2hyb25vdXMgVHJpZ2dlciBFbmFibGUgQml0IChXcml0ZSBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBNVyBjb3VudGVyIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFrZSBzZWxlY3RlZCBQV00gY2hhbm5lbHMgKGluY2x1ZGUgVElNRVIwLzEvMi8zIFBXTSwgVElNRVIwLzEgUFdNIGFuZCBUSU1FUjIvMyBQV00pIHN0YXJ0IGNvdW50aW5nIG9yIGNsZWFyIGNvdW50ZXIgYXQgdGhlIHNhbWUgdGltZSBhY2NvcmRpbmcgdG8gVElNRVJ4X1BXTVNDVEwgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBvbmx5IGF2YWlsYWJsZSBpbiBUSU1FUjAgYW5kIFRJTUVSMi4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTVNUQVRVUworICAgICAqIE9mZnNldDogMHg5QyAgVGltZXIgUFdNIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENOVE1BWEYgICB8UFdNIENvdW50ZXIgRXF1YWwgdG8gMHhGRkZGIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIHRoZSBQV00gY291bnRlciB2YWx1ZSBuZXZlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIDB4RkZGRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIHRoZSBQV00gY291bnRlciB2YWx1ZSBoYXMgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzE2XSAgICB8RUFEQ1RSR0YgICB8VHJpZ2dlciBFQURDIFN0YXJ0IENvbnZlcnNpb24gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV00gY291bnRlciBldmVudCB0cmlnZ2VyIEVBREMgc3RhcnQgY29udmVyc2lvbiBpcyBub3Qgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTSBjb3VudGVyIGV2ZW50IHRyaWdnZXIgRUFEQyBzdGFydCBjb252ZXJzaW9uIGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTVBCVUYKKyAgICAgKiBPZmZzZXQ6IDB4QTAgIFRpbWVyIFBXTSBQZXJpb2QgQnVmZmVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UEJVRiAgICAgIHxQV00gUGVyaW9kIEJ1ZmZlciBSZWdpc3RlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZWQgYXMgUEVSSU9EIGFjdGl2ZSByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTUNNUEJVRgorICAgICAqIE9mZnNldDogMHhBNCAgVGltZXIgUFdNIENvbXBhcmF0b3IgQnVmZmVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8Q01QQlVGICAgIHxQV00gQ29tcGFyYXRvciBCdWZmZXIgUmVnaXN0ZXIgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VkIGFzIENNUCBhY3RpdmUgcmVnaXN0ZXIuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEw7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gVGltZXIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTVA7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gVGltZXIgQ29tcGFyYXRvciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gVGltZXIgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTlQ7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gVGltZXIgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBDQVA7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gVGltZXIgQ2FwdHVyZSBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBFWFRDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxNF0gVGltZXIgRXh0ZXJuYWwgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBFSU5UU1RTOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAxOF0gVGltZXIgRXh0ZXJuYWwgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUUkdDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxY10gVGltZXIgVHJpZ2dlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBTFRDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyMF0gVGltZXIgQWx0ZXJuYXRpdmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFs3XTsKKyAgICBfX0lPIHVpbnQzMl90IFBXTUNUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDQwXSBUaW1lciBQV00gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTUNMS1NSQzsgICAgICAgICAgICAgLyohPCBbMHgwMDQ0XSBUaW1lciBQV00gQ291bnRlciBDbG9jayBTb3VyY2UgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTUNMS1BTQzsgICAgICAgICAgICAgLyohPCBbMHgwMDQ4XSBUaW1lciBQV00gQ291bnRlciBDbG9jayBQcmUtc2NhbGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTUNOVENMUjsgICAgICAgICAgICAgLyohPCBbMHgwMDRjXSBUaW1lciBQV00gQ2xlYXIgQ291bnRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTVBFUklPRDsgICAgICAgICAgICAgLyohPCBbMHgwMDUwXSBUaW1lciBQV00gUGVyaW9kIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTUNNUERBVDsgICAgICAgICAgICAgLyohPCBbMHgwMDU0XSBUaW1lciBQV00gQ29tcGFyYXRvciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTURUQ1RMOyAgICAgICAgICAgICAgLyohPCBbMHgwMDU4XSBUaW1lciBQV00gRGVhZC1UaW1lIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFBXTUNOVDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDVjXSBUaW1lciBQV00gQ291bnRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTU1TS0VOOyAgICAgICAgICAgICAgLyohPCBbMHgwMDYwXSBUaW1lciBQV00gT3V0cHV0IE1hc2sgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTU1TSzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDY0XSBUaW1lciBQV00gT3V0cHV0IE1hc2sgRGF0YSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTUJORjsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDY4XSBUaW1lciBQV00gQnJha2UgUGluIE5vaXNlIEZpbHRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTUZBSUxCUks7ICAgICAgICAgICAgLyohPCBbMHgwMDZjXSBUaW1lciBQV00gU3lzdGVtIEZhaWwgQnJha2UgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTUJSS0NUTDsgICAgICAgICAgICAgLyohPCBbMHgwMDcwXSBUaW1lciBQV00gQnJha2UgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTVBPTENUTDsgICAgICAgICAgICAgLyohPCBbMHgwMDc0XSBUaW1lciBQV00gUGluIE91dHB1dCBQb2xhciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTVBPRU47ICAgICAgICAgICAgICAgLyohPCBbMHgwMDc4XSBUaW1lciBQV00gUGluIE91dHB1dCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX08gIHVpbnQzMl90IFBXTVNXQlJLOyAgICAgICAgICAgICAgLyohPCBbMHgwMDdjXSBUaW1lciBQV00gU29mdHdhcmUgVHJpZ2dlciBCcmFrZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTUlOVEVOMDsgICAgICAgICAgICAgLyohPCBbMHgwMDgwXSBUaW1lciBQV00gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTUlOVEVOMTsgICAgICAgICAgICAgLyohPCBbMHgwMDg0XSBUaW1lciBQV00gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTUlOVFNUUzA7ICAgICAgICAgICAgLyohPCBbMHgwMDg4XSBUaW1lciBQV00gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTUlOVFNUUzE7ICAgICAgICAgICAgLyohPCBbMHgwMDhjXSBUaW1lciBQV00gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTUVBRENUUzsgICAgICAgICAgICAgLyohPCBbMHgwMDkwXSBUaW1lciBQV00gQURDIFRyaWdnZXIgU291cmNlIFNlbGVjdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTVNDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDk0XSBUaW1lciBQV00gU3luY2hyb25vdXMgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX08gIHVpbnQzMl90IFBXTVNUUkc7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDk4XSBUaW1lciBQV00gU3luY2hyb25vdXMgVHJpZ2dlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXTVNUQVRVUzsgICAgICAgICAgICAgLyohPCBbMHgwMDljXSBUaW1lciBQV00gU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFBXTVBCVUY7ICAgICAgICAgICAgICAgLyohPCBbMHgwMGEwXSBUaW1lciBQV00gUGVyaW9kIEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFBXTUNNUEJVRjsgICAgICAgICAgICAgLyohPCBbMHgwMGE0XSBUaW1lciBQV00gQ29tcGFyYXRvciBCdWZmZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBUSU1FUl9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBUSU1FUl9DT05TVCBUSU1FUiBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBUSU1FUiBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFRJTUVSX0NUTF9QU0NfUG9zICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IFBTQyBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1FUl9DVExfUFNDX01zayAgICAgICAgICAgICAgICAoMHhmZnVsIDw8IFRJTUVSX0NUTF9QU0NfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBQU0MgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9DVExfSU5UUkdFTl9Qb3MgICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBJTlRSR0VOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfQ1RMX0lOVFJHRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0NUTF9JTlRSR0VOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogSU5UUkdFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfQ1RMX1BFUklPU0VMX1BvcyAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogUEVSSU9TRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFRJTUVSX0NUTF9QRVJJT1NFTF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9DVExfUEVSSU9TRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IFBFUklPU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0NUTF9UR0xQSU5TRUxfUG9zICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IFRHTFBJTlNFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBUSU1FUl9DVExfVEdMUElOU0VMX01zayAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfQ1RMX1RHTFBJTlNFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBUR0xQSU5TRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9DVExfQ0FQU1JDX1BvcyAgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBDQVBTUkMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfQ1RMX0NBUFNSQ19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0NUTF9DQVBTUkNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogQ0FQU1JDIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfQ1RMX1dLRU5fUG9zICAgICAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogV0tFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSX0NUTF9XS0VOX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9DVExfV0tFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IFdLRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0NUTF9FWFRDTlRFTl9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IEVYVENOVEVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBUSU1FUl9DVExfRVhUQ05URU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfQ1RMX0VYVENOVEVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBFWFRDTlRFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9DVExfQUNUU1RTX1BvcyAgICAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBBQ1RTVFMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfQ1RMX0FDVFNUU19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0NUTF9BQ1RTVFNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogQUNUU1RTIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfQ1RMX09QTU9ERV9Qb3MgICAgICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogT1BNT0RFIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSX0NUTF9PUE1PREVfTXNrICAgICAgICAgICAgICgweDN1bCA8PCBUSU1FUl9DVExfT1BNT0RFX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IE9QTU9ERSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0NUTF9JTlRFTl9Qb3MgICAgICAgICAgICAgICgyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IElOVEVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBUSU1FUl9DVExfSU5URU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfQ1RMX0lOVEVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBJTlRFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9DVExfQ05URU5fUG9zICAgICAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBDTlRFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfQ1RMX0NOVEVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0NUTF9DTlRFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogQ05URU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfQ1RMX0lDRURFQlVHX1BvcyAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogSUNFREVCVUcgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFRJTUVSX0NUTF9JQ0VERUJVR19Nc2sgICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9DVExfSUNFREVCVUdfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IElDRURFQlVHIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0NNUF9DTVBEQVRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDTVA6IENNUERBVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBUSU1FUl9DTVBfQ01QREFUX01zayAgICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBUSU1FUl9DTVBfQ01QREFUX1BvcykgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q01QOiBDTVBEQVQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9JTlRTVFNfVElGX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6SU5UU1RTOiBUSUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfSU5UU1RTX1RJRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0lOVFNUU19USUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OklOVFNUUzogVElGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfSU5UU1RTX1RXS0ZfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OklOVFNUUzogVFdLRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFRJTUVSX0lOVFNUU19UV0tGX01zayAgICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9JTlRTVFNfVFdLRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpJTlRTVFM6IFRXS0YgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0NOVF9DTlRfUG9zICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDTlQ6IENOVCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1FUl9DTlRfQ05UX01zayAgICAgICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBUSU1FUl9DTlRfQ05UX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q05UOiBDTlQgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9DTlRfUlNUQUNUX1BvcyAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q05UOiBSU1RBQ1QgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfQ05UX1JTVEFDVF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0NOVF9SU1RBQ1RfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNOVDogUlNUQUNUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfQ0FQX0NBUERBVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNBUDogQ0FQREFUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSX0NBUF9DQVBEQVRfTXNrICAgICAgICAgICAgICgweGZmZmZmZnVsIDw8IFRJTUVSX0NBUF9DQVBEQVRfUG9zKSAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDQVA6IENBUERBVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0VYVENUTF9DTlRQSEFTRV9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFWFRDVEw6IENOVFBIQVNFIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBUSU1FUl9FWFRDVExfQ05UUEhBU0VfTXNrICAgICAgICAoMHgxdWwgPDwgVElNRVJfRVhUQ1RMX0NOVFBIQVNFX1BvcykgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RVhUQ1RMOiBDTlRQSEFTRSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9FWFRDVExfQ0FQRU5fUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RVhUQ1RMOiBDQVBFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfRVhUQ1RMX0NBUEVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0VYVENUTF9DQVBFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVYVENUTDogQ0FQRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfRVhUQ1RMX0NBUEZVTkNTX1BvcyAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVYVENUTDogQ0FQRlVOQ1MgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFRJTUVSX0VYVENUTF9DQVBGVU5DU19Nc2sgICAgICAgICgweDF1bCA8PCBUSU1FUl9FWFRDVExfQ0FQRlVOQ1NfUG9zKSAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFWFRDVEw6IENBUEZVTkNTIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0VYVENUTF9DQVBJRU5fUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFWFRDVEw6IENBUElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBUSU1FUl9FWFRDVExfQ0FQSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfRVhUQ1RMX0NBUElFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RVhUQ1RMOiBDQVBJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9FWFRDVExfQ0FQREJFTl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RVhUQ1RMOiBDQVBEQkVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfRVhUQ1RMX0NBUERCRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0VYVENUTF9DQVBEQkVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVYVENUTDogQ0FQREJFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfRVhUQ1RMX0NOVERCRU5fUG9zICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVYVENUTDogQ05UREJFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX0VYVENUTF9DTlREQkVOX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9FWFRDVExfQ05UREJFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFWFRDVEw6IENOVERCRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0VYVENUTF9BQ01QU1NFTF9Qb3MgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFWFRDVEw6IEFDTVBTU0VMIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBUSU1FUl9FWFRDVExfQUNNUFNTRUxfTXNrICAgICAgICAoMHgxdWwgPDwgVElNRVJfRVhUQ1RMX0FDTVBTU0VMX1BvcykgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RVhUQ1RMOiBBQ01QU1NFTCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9FWFRDVExfQ0FQRURHRV9Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RVhUQ1RMOiBDQVBFREdFIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfRVhUQ1RMX0NBUEVER0VfTXNrICAgICAgICAgKDB4N3VsIDw8IFRJTUVSX0VYVENUTF9DQVBFREdFX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVYVENUTDogQ0FQRURHRSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfRVhUQ1RMX0VDTlRTU0VMX1BvcyAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVYVENUTDogRUNOVFNTRUwgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFRJTUVSX0VYVENUTF9FQ05UU1NFTF9Nc2sgICAgICAgICgweDF1bCA8PCBUSU1FUl9FWFRDVExfRUNOVFNTRUxfUG9zKSAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFWFRDVEw6IEVDTlRTU0VMIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0VJTlRTVFNfQ0FQSUZfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFSU5UU1RTOiBDQVBJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBUSU1FUl9FSU5UU1RTX0NBUElGX01zayAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfRUlOVFNUU19DQVBJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RUlOVFNUUzogQ0FQSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9UUkdDVExfVFJHU1NFTF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6VFJHQ1RMOiBUUkdTU0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfVFJHQ1RMX1RSR1NTRUxfTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1RSR0NUTF9UUkdTU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlRSR0NUTDogVFJHU1NFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfVFJHQ1RMX1RSR0VQV01fUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlRSR0NUTDogVFJHRVBXTSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1RSR0NUTF9UUkdFUFdNX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9UUkdDVExfVFJHRVBXTV9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpUUkdDVEw6IFRSR0VQV00gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1RSR0NUTF9UUkdFQURDX1BvcyAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpUUkdDVEw6IFRSR0VBREMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9UUkdDVExfVFJHRUFEQ19Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfVFJHQ1RMX1RSR0VBRENfUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6VFJHQ1RMOiBUUkdFQURDIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9UUkdDVExfVFJHREFDX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6VFJHQ1RMOiBUUkdEQUMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVElNRVJfVFJHQ1RMX1RSR0RBQ19Nc2sgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1RSR0NUTF9UUkdEQUNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlRSR0NUTDogVFJHREFDIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfVFJHQ1RMX1RSR1BETUFfUG9zICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlRSR0NUTDogVFJHUERNQSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1RSR0NUTF9UUkdQRE1BX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9UUkdDVExfVFJHUERNQV9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpUUkdDVEw6IFRSR1BETUEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0FMVENUTF9GVU5DU0VMX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpBTFRDVEw6IEZVTkNTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9BTFRDVExfRlVOQ1NFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfQUxUQ1RMX0ZVTkNTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6QUxUQ1RMOiBGVU5DU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01DVExfQ05URU5fUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ1RMOiBDTlRFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQ1RMX0NOVEVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUNUTF9DTlRFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNUTDogQ05URU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQ1RMX0NOVFRZUEVfUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNUTDogQ05UVFlQRSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUNUTF9DTlRUWVBFX01zayAgICAgICAgICgweDN1bCA8PCBUSU1FUl9QV01DVExfQ05UVFlQRV9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DVEw6IENOVFRZUEUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUNUTF9DTlRNT0RFX1BvcyAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DVEw6IENOVE1PREUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9QV01DVExfQ05UTU9ERV9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNQ1RMX0NOVE1PREVfUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ1RMOiBDTlRNT0RFIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01DVExfQ1RSTERfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ1RMOiBDVFJMRCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQ1RMX0NUUkxEX01zayAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUNUTF9DVFJMRF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNUTDogQ1RSTEQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQ1RMX0lNTUxERU5fUG9zICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNUTDogSU1NTERFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUNUTF9JTU1MREVOX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01DVExfSU1NTERFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DVEw6IElNTUxERU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUNUTF9PVVRNT0RFX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DVEw6IE9VVE1PREUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9QV01DVExfT1VUTU9ERV9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNQ1RMX09VVE1PREVfUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ1RMOiBPVVRNT0RFIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01DVExfREJHSEFMVF9Qb3MgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ1RMOiBEQkdIQUxUIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQ1RMX0RCR0hBTFRfTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUNUTF9EQkdIQUxUX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNUTDogREJHSEFMVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQ1RMX0RCR1RSSU9GRl9Qb3MgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNUTDogREJHVFJJT0ZGIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUNUTF9EQkdUUklPRkZfTXNrICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01DVExfREJHVFJJT0ZGX1BvcykgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DVEw6IERCR1RSSU9GRiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUNMS1NSQ19DTEtTUkNfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DTEtTUkM6IENMS1NSQyBQb3NpdGlvbiAgICAqLworI2RlZmluZSBUSU1FUl9QV01DTEtTUkNfQ0xLU1JDX01zayAgICAgICAoMHg3dWwgPDwgVElNRVJfUFdNQ0xLU1JDX0NMS1NSQ19Qb3MpICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ0xLU1JDOiBDTEtTUkMgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01DTEtQU0NfQ0xLUFNDX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ0xLUFNDOiBDTEtQU0MgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQ0xLUFNDX0NMS1BTQ19Nc2sgICAgICAgKDB4ZmZmdWwgPDwgVElNRVJfUFdNQ0xLUFNDX0NMS1BTQ19Qb3MpICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNMS1BTQzogQ0xLUFNDIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQ05UQ0xSX0NOVENMUl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNOVENMUjogQ05UQ0xSIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUNOVENMUl9DTlRDTFJfTXNrICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01DTlRDTFJfQ05UQ0xSX1BvcykgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DTlRDTFI6IENOVENMUiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTVBFUklPRF9QRVJJT0RfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01QRVJJT0Q6IFBFUklPRCBQb3NpdGlvbiAgICAqLworI2RlZmluZSBUSU1FUl9QV01QRVJJT0RfUEVSSU9EX01zayAgICAgICAoMHhmZmZmdWwgPDwgVElNRVJfUFdNUEVSSU9EX1BFUklPRF9Qb3MpICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNUEVSSU9EOiBQRVJJT0QgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01DTVBEQVRfQ01QX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ01QREFUOiBDTVAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQ01QREFUX0NNUF9Nc2sgICAgICAgICAgKDB4ZmZmZnVsIDw8IFRJTUVSX1BXTUNNUERBVF9DTVBfUG9zKSAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNNUERBVDogQ01QIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNRFRDVExfRFRDTlRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTURUQ1RMOiBEVENOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTURUQ1RMX0RUQ05UX01zayAgICAgICAgICgweGZmZnVsIDw8IFRJTUVSX1BXTURUQ1RMX0RUQ05UX1BvcykgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01EVENUTDogRFRDTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTURUQ1RMX0RURU5fUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01EVENUTDogRFRFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBUSU1FUl9QV01EVENUTF9EVEVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNRFRDVExfRFRFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRFRDVEw6IERURU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01EVENUTF9EVENLU0VMX1BvcyAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRFRDVEw6IERUQ0tTRUwgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNRFRDVExfRFRDS1NFTF9Nc2sgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTURUQ1RMX0RUQ0tTRUxfUG9zKSAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTURUQ1RMOiBEVENLU0VMIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQ05UX0NOVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNOVDogQ05UIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUNOVF9DTlRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBUSU1FUl9QV01DTlRfQ05UX1BvcykgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DTlQ6IENOVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUNOVF9ESVJGX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DTlQ6IERJUkYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBUSU1FUl9QV01DTlRfRElSRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNQ05UX0RJUkZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ05UOiBESVJGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01NU0tFTl9NU0tFTjBfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNTVNLRU46IE1TS0VOMCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNTVNLRU5fTVNLRU4wX01zayAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTU1TS0VOX01TS0VOMF9Qb3MpICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTU1TS0VOOiBNU0tFTjAgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNTVNLRU5fTVNLRU4xX1BvcyAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTU1TS0VOOiBNU0tFTjEgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFRJTUVSX1BXTU1TS0VOX01TS0VOMV9Nc2sgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01NU0tFTl9NU0tFTjFfUG9zKSAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01NU0tFTjogTVNLRU4xIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTU1TS19NU0tEQVQwX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01NU0s6IE1TS0RBVDAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9QV01NU0tfTVNLREFUMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNTVNLX01TS0RBVDBfUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNTVNLOiBNU0tEQVQwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01NU0tfTVNLREFUMV9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNTVNLOiBNU0tEQVQxIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNTVNLX01TS0RBVDFfTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTU1TS19NU0tEQVQxX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTU1TSzogTVNLREFUMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQk5GX0JSS05GRU5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJORjogQlJLTkZFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUJORl9CUktORkVOX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01CTkZfQlJLTkZFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CTkY6IEJSS05GRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUJORl9CUktORlNFTF9Qb3MgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CTkY6IEJSS05GU0VMIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBUSU1FUl9QV01CTkZfQlJLTkZTRUxfTXNrICAgICAgICAoMHg3dWwgPDwgVElNRVJfUFdNQk5GX0JSS05GU0VMX1BvcykgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQk5GOiBCUktORlNFTCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01CTkZfQlJLRkNOVF9Qb3MgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQk5GOiBCUktGQ05UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQk5GX0JSS0ZDTlRfTXNrICAgICAgICAgKDB4N3VsIDw8IFRJTUVSX1BXTUJORl9CUktGQ05UX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJORjogQlJLRkNOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQk5GX0JSS1BJTlZfUG9zICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJORjogQlJLUElOViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUJORl9CUktQSU5WX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01CTkZfQlJLUElOVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CTkY6IEJSS1BJTlYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUJORl9CS1BJTlNSQ19Qb3MgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CTkY6IEJLUElOU1JDIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBUSU1FUl9QV01CTkZfQktQSU5TUkNfTXNrICAgICAgICAoMHgzdWwgPDwgVElNRVJfUFdNQk5GX0JLUElOU1JDX1BvcykgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQk5GOiBCS1BJTlNSQyBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01GQUlMQlJLX0NTU0JSS0VOX1BvcyAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRkFJTEJSSzogQ1NTQlJLRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgVElNRVJfUFdNRkFJTEJSS19DU1NCUktFTl9Nc2sgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUZBSUxCUktfQ1NTQlJLRU5fUG9zKSAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUZBSUxCUks6IENTU0JSS0VOIE1hc2sgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNRkFJTEJSS19CT0RCUktFTl9Qb3MgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUZBSUxCUks6IEJPREJSS0VOIFBvc2l0aW9uICovCisjZGVmaW5lIFRJTUVSX1BXTUZBSUxCUktfQk9EQlJLRU5fTXNrICAgICgweDF1bCA8PCBUSU1FUl9QV01GQUlMQlJLX0JPREJSS0VOX1BvcykgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01GQUlMQlJLOiBCT0RCUktFTiBNYXNrICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUZBSUxCUktfUkFNQlJLRU5fUG9zICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01GQUlMQlJLOiBSQU1CUktFTiBQb3NpdGlvbiAqLworI2RlZmluZSBUSU1FUl9QV01GQUlMQlJLX1JBTUJSS0VOX01zayAgICAoMHgxdWwgPDwgVElNRVJfUFdNRkFJTEJSS19SQU1CUktFTl9Qb3MpICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRkFJTEJSSzogUkFNQlJLRU4gTWFzayAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01GQUlMQlJLX0NPUkJSS0VOX1BvcyAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRkFJTEJSSzogQ09SQlJLRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgVElNRVJfUFdNRkFJTEJSS19DT1JCUktFTl9Nc2sgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUZBSUxCUktfQ09SQlJLRU5fUG9zKSAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUZBSUxCUks6IENPUkJSS0VOIE1hc2sgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX0NQTzBFQkVOX1BvcyAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogQ1BPMEVCRU4gUG9zaXRpb24gICovCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9DUE8wRUJFTl9Nc2sgICAgICgweDF1bCA8PCBUSU1FUl9QV01CUktDVExfQ1BPMEVCRU5fUG9zKSAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IENQTzBFQkVOIE1hc2sgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9DUE8xRUJFTl9Qb3MgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IENQTzFFQkVOIFBvc2l0aW9uICAqLworI2RlZmluZSBUSU1FUl9QV01CUktDVExfQ1BPMUVCRU5fTXNrICAgICAoMHgxdWwgPDwgVElNRVJfUFdNQlJLQ1RMX0NQTzFFQkVOX1BvcykgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBDUE8xRUJFTiBNYXNrICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01CUktDVExfQlJLUEVFTl9Qb3MgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBCUktQRUVOIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX0JSS1BFRU5fTXNrICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUJSS0NUTF9CUktQRUVOX1BvcykgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogQlJLUEVFTiBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX1NZU0VCRU5fUG9zICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogU1lTRUJFTiBQb3NpdGlvbiAgICovCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9TWVNFQkVOX01zayAgICAgICgweDF1bCA8PCBUSU1FUl9QV01CUktDVExfU1lTRUJFTl9Qb3MpICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IFNZU0VCRU4gTWFzayAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9DUE8wTEJFTl9Qb3MgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IENQTzBMQkVOIFBvc2l0aW9uICAqLworI2RlZmluZSBUSU1FUl9QV01CUktDVExfQ1BPMExCRU5fTXNrICAgICAoMHgxdWwgPDwgVElNRVJfUFdNQlJLQ1RMX0NQTzBMQkVOX1BvcykgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBDUE8wTEJFTiBNYXNrICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01CUktDVExfQ1BPMUxCRU5fUG9zICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBDUE8xTEJFTiBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX0NQTzFMQkVOX01zayAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUJSS0NUTF9DUE8xTEJFTl9Qb3MpICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogQ1BPMUxCRU4gTWFzayAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX0JSS1BMRU5fUG9zICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogQlJLUExFTiBQb3NpdGlvbiAgICovCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9CUktQTEVOX01zayAgICAgICgweDF1bCA8PCBUSU1FUl9QV01CUktDVExfQlJLUExFTl9Qb3MpICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IEJSS1BMRU4gTWFzayAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9TWVNMQkVOX1BvcyAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IFNZU0xCRU4gUG9zaXRpb24gICAqLworI2RlZmluZSBUSU1FUl9QV01CUktDVExfU1lTTEJFTl9Nc2sgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNQlJLQ1RMX1NZU0xCRU5fUG9zKSAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBTWVNMQkVOIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01CUktDVExfQlJLQUVWRU5fUG9zICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBCUktBRVZFTiBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX0JSS0FFVkVOX01zayAgICAgKDB4M3VsIDw8IFRJTUVSX1BXTUJSS0NUTF9CUktBRVZFTl9Qb3MpICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogQlJLQUVWRU4gTWFzayAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX0JSS0FPRERfUG9zICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogQlJLQU9ERCBQb3NpdGlvbiAgICovCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9CUktBT0REX01zayAgICAgICgweDN1bCA8PCBUSU1FUl9QV01CUktDVExfQlJLQU9ERF9Qb3MpICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IEJSS0FPREQgTWFzayAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTVBPTENUTF9QSU5WMF9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01QT0xDVEw6IFBJTlYwIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBUSU1FUl9QV01QT0xDVExfUElOVjBfTXNrICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNUE9MQ1RMX1BJTlYwX1BvcykgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNUE9MQ1RMOiBQSU5WMCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01QT0xDVExfUElOVjFfUG9zICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNUE9MQ1RMOiBQSU5WMSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNUE9MQ1RMX1BJTlYxX01zayAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTVBPTENUTF9QSU5WMV9Qb3MpICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVBPTENUTDogUElOVjEgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNUE9FTl9QT0VOMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVBPRU46IFBPRU4wIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTVBPRU5fUE9FTjBfTXNrICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01QT0VOX1BPRU4wX1BvcykgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01QT0VOOiBQT0VOMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTVBPRU5fUE9FTjFfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01QT0VOOiBQT0VOMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBUSU1FUl9QV01QT0VOX1BPRU4xX01zayAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNUE9FTl9QT0VOMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNUE9FTjogUE9FTjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01TV0JSS19CUktFVFJHX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNU1dCUks6IEJSS0VUUkcgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNU1dCUktfQlJLRVRSR19Nc2sgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTVNXQlJLX0JSS0VUUkdfUG9zKSAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVNXQlJLOiBCUktFVFJHIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNU1dCUktfQlJLTFRSR19Qb3MgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVNXQlJLOiBCUktMVFJHIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFRJTUVSX1BXTVNXQlJLX0JSS0xUUkdfTXNrICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01TV0JSS19CUktMVFJHX1BvcykgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01TV0JSSzogQlJLTFRSRyBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUlOVEVOMF9aSUVOX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRFTjA6IFpJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9QV01JTlRFTjBfWklFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNSU5URU4wX1pJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5URU4wOiBaSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01JTlRFTjBfUElFTl9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5URU4wOiBQSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNSU5URU4wX1BJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUlOVEVOMF9QSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVEVOMDogUElFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNSU5URU4wX0NNUFVJRU5fUG9zICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVEVOMDogQ01QVUlFTiBQb3NpdGlvbiAgICovCisjZGVmaW5lIFRJTUVSX1BXTUlOVEVOMF9DTVBVSUVOX01zayAgICAgICgweDF1bCA8PCBUSU1FUl9QV01JTlRFTjBfQ01QVUlFTl9Qb3MpICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRFTjA6IENNUFVJRU4gTWFzayAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUlOVEVOMF9DTVBESUVOX1BvcyAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRFTjA6IENNUERJRU4gUG9zaXRpb24gICAqLworI2RlZmluZSBUSU1FUl9QV01JTlRFTjBfQ01QRElFTl9Nc2sgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNSU5URU4wX0NNUERJRU5fUG9zKSAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5URU4wOiBDTVBESUVOIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01JTlRFTjFfQlJLRUlFTl9Qb3MgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5URU4xOiBCUktFSUVOIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNSU5URU4xX0JSS0VJRU5fTXNrICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUlOVEVOMV9CUktFSUVOX1BvcykgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVEVOMTogQlJLRUlFTiBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNSU5URU4xX0JSS0xJRU5fUG9zICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVEVOMTogQlJLTElFTiBQb3NpdGlvbiAgICovCisjZGVmaW5lIFRJTUVSX1BXTUlOVEVOMV9CUktMSUVOX01zayAgICAgICgweDF1bCA8PCBUSU1FUl9QV01JTlRFTjFfQlJLTElFTl9Qb3MpICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRFTjE6IEJSS0xJRU4gTWFzayAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzBfWklGX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMwOiBaSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMwX1pJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNSU5UU1RTMF9aSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMDogWklGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMwX1BJRl9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMDogUElGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMF9QSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUlOVFNUUzBfUElGX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzA6IFBJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMF9DTVBVSUZfUG9zICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzA6IENNUFVJRiBQb3NpdGlvbiAgICovCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzBfQ01QVUlGX01zayAgICAgICgweDF1bCA8PCBUSU1FUl9QV01JTlRTVFMwX0NNUFVJRl9Qb3MpICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMwOiBDTVBVSUYgTWFzayAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzBfQ01QRElGX1BvcyAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMwOiBDTVBESUYgUG9zaXRpb24gICAqLworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMwX0NNUERJRl9Nc2sgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNSU5UU1RTMF9DTVBESUZfUG9zKSAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMDogQ01QRElGIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMxX0JSS0VJRjBfUG9zICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMTogQlJLRUlGMCBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMV9CUktFSUYwX01zayAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUlOVFNUUzFfQlJLRUlGMF9Qb3MpICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzE6IEJSS0VJRjAgTWFzayAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMV9CUktFSUYxX1BvcyAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzE6IEJSS0VJRjEgUG9zaXRpb24gICovCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzFfQlJLRUlGMV9Nc2sgICAgICgweDF1bCA8PCBUSU1FUl9QV01JTlRTVFMxX0JSS0VJRjFfUG9zKSAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMxOiBCUktFSUYxIE1hc2sgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzFfQlJLTElGMF9Qb3MgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMxOiBCUktMSUYwIFBvc2l0aW9uICAqLworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMxX0JSS0xJRjBfTXNrICAgICAoMHgxdWwgPDwgVElNRVJfUFdNSU5UU1RTMV9CUktMSUYwX1BvcykgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMTogQlJLTElGMCBNYXNrICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMxX0JSS0xJRjFfUG9zICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMTogQlJLTElGMSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMV9CUktMSUYxX01zayAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUlOVFNUUzFfQlJLTElGMV9Qb3MpICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzE6IEJSS0xJRjEgTWFzayAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMV9CUktFU1RTMF9Qb3MgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzE6IEJSS0VTVFMwIFBvc2l0aW9uICovCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzFfQlJLRVNUUzBfTXNrICAgICgweDF1bCA8PCBUSU1FUl9QV01JTlRTVFMxX0JSS0VTVFMwX1BvcykgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMxOiBCUktFU1RTMCBNYXNrICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzFfQlJLRVNUUzFfUG9zICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMxOiBCUktFU1RTMSBQb3NpdGlvbiAqLworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMxX0JSS0VTVFMxX01zayAgICAoMHgxdWwgPDwgVElNRVJfUFdNSU5UU1RTMV9CUktFU1RTMV9Qb3MpICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMTogQlJLRVNUUzEgTWFzayAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMxX0JSS0xTVFMwX1BvcyAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMTogQlJLTFNUUzAgUG9zaXRpb24gKi8KKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMV9CUktMU1RTMF9Nc2sgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUlOVFNUUzFfQlJLTFNUUzBfUG9zKSAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzE6IEJSS0xTVFMwIE1hc2sgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMV9CUktMU1RTMV9Qb3MgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzE6IEJSS0xTVFMxIFBvc2l0aW9uICovCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzFfQlJLTFNUUzFfTXNrICAgICgweDF1bCA8PCBUSU1FUl9QV01JTlRTVFMxX0JSS0xTVFMxX1BvcykgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMxOiBCUktMU1RTMSBNYXNrICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUVBRENUU19UUkdTRUxfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01FQURDVFM6IFRSR1NFTCBQb3NpdGlvbiAgICAqLworI2RlZmluZSBUSU1FUl9QV01FQURDVFNfVFJHU0VMX01zayAgICAgICAoMHg3dWwgPDwgVElNRVJfUFdNRUFEQ1RTX1RSR1NFTF9Qb3MpICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRUFEQ1RTOiBUUkdTRUwgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01FQURDVFNfVFJHRU5fUG9zICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRUFEQ1RTOiBUUkdFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNRUFEQ1RTX1RSR0VOX01zayAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUVBRENUU19UUkdFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUVBRENUUzogVFJHRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNU0NUTF9TWU5DTU9ERV9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVNDVEw6IFNZTkNNT0RFIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFRJTUVSX1BXTVNDVExfU1lOQ01PREVfTXNrICAgICAgICgweDN1bCA8PCBUSU1FUl9QV01TQ1RMX1NZTkNNT0RFX1BvcykgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01TQ1RMOiBTWU5DTU9ERSBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTVNDVExfU1lOQ1NSQ19Qb3MgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01TQ1RMOiBTWU5DU1JDIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBUSU1FUl9QV01TQ1RMX1NZTkNTUkNfTXNrICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNU0NUTF9TWU5DU1JDX1BvcykgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNU0NUTDogU1lOQ1NSQyBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01TVFJHX1NUUkdFTl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNU1RSRzogU1RSR0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNU1RSR19TVFJHRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTVNUUkdfU1RSR0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVNUUkc6IFNUUkdFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNU1RBVFVTX0NOVE1BWEZfUG9zICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVNUQVRVUzogQ05UTUFYRiBQb3NpdGlvbiAgICovCisjZGVmaW5lIFRJTUVSX1BXTVNUQVRVU19DTlRNQVhGX01zayAgICAgICgweDF1bCA8PCBUSU1FUl9QV01TVEFUVVNfQ05UTUFYRl9Qb3MpICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01TVEFUVVM6IENOVE1BWEYgTWFzayAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTVNUQVRVU19FQURDVFJHRl9Qb3MgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01TVEFUVVM6IEVBRENUUkdGIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNU1RBVFVTX0VBRENUUkdGX01zayAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTVNUQVRVU19FQURDVFJHRl9Qb3MpICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVNUQVRVUzogRUFEQ1RSR0YgTWFzayAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTVBCVUZfUEJVRl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01QQlVGOiBQQlVGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBUSU1FUl9QV01QQlVGX1BCVUZfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgVElNRVJfUFdNUEJVRl9QQlVGX1BvcykgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNUEJVRjogUEJVRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01DTVBCVUZfQ01QQlVGX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ01QQlVGOiBDTVBCVUYgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQ01QQlVGX0NNUEJVRl9Nc2sgICAgICAgKDB4ZmZmZnVsIDw8IFRJTUVSX1BXTUNNUEJVRl9DTVBCVUZfUG9zKSAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNNUEJVRjogQ01QQlVGIE1hc2sgICAgICAgICovCisKKy8qKkB9Ki8gLyogVElNRVJfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFRJTUVSIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisjZW5kaWYgLyogX19USU1FUl9SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdHJuZ19yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS90cm5nX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMGMwNTIKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdHJuZ19yZWcuaApAQCAtMCwwICsxLDEzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHRybmdfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFRSTkcgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVFJOR19SRUdfSF9fCisjZGVmaW5lIF9fVFJOR19SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRydWUgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBUUk5HIFRydWUgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IoVFJORykKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgVFJORyBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIFRSTkdfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDAwICBUUk5HIENvbnRyb2wgUmVnaXN0ZXIgYW5kIFN0YXR1cworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFRSTkdFTiAgICB8UmFuZG9tIE51bWJlciBHZW5lcmF0b3IgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNhbiBiZSBzZXQgdG8gMSBvbmx5IGFmdGVyIEFDVCAoVFJOR19BQ1RbN10pIGJpdCB3YXMgc2V0IHRvIDEgYW5kIFJFQURZIChUUk5HX0NUTFs3XSkgYml0IGJlY2FtZSAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUUk5HIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUUk5HIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVFJOR0VOIGlzIGFuIGVuYWJsZSBiaXQgb2YgZGlnaXRhbCBwYXJ0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBUUk5HIGlzIG5vdCByZXF1aXJlZCB0byBnZW5lcmF0ZSByYW5kb20gbnVtYmVyLCBUUk5HRU4gYml0IGFuZCBBQ1QgKFRSTkdfQUNUWzddKSBiaXQgc2hvdWxkIGJlIHNldCB0byAwIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbi4KKyAgICAgKiB8WzFdICAgICB8RFZJRiAgICAgIHxEYXRhIFZhbGlkIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgaXMgbm90IHZhbGlkLiBSZWFkaW5nIGZyb20gUk5HRCByZXR1cm5zIDB4MDAwMDAwMDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERhdGEgaXMgdmFsaWQuIEEgdmFsaWQgcmFuZG9tIG51bWJlciBjYW4gYmUgcmVhZCBmb3JtIFJOR0QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgY2xlYXJlZCB0byB1MjAxODB1MjAxOSBieSByZWFkIFRSTkdfREFUQS4KKyAgICAgKiB8WzU6Ml0gICB8Q0xLUCAgICAgIHxDbG9jayBQcmVzY2FsZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ0xLUCBpcyB0aGUgcGVyaXBoZXJhbCBjbG9jayBmcmVxdWVuY3kgcmFuZ2UgZm9yIHRoZSBzZWxlY3RlZCB2YWx1ZSAsIHRoZSBDTEtQIG11c3QgaGlnaGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFjdHVhbCBwZXJpcGhlcmFsIGNsb2NrIGZyZXF1ZW5jeSAoZm9yIGNvcnJlY3QgcmFuZG9tIGJpdCBnZW5lcmF0aW9uKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRvIGNoYW5nZSB0aGUgQ0xLUCBjb250ZW50cywgZmlyc3Qgc2V0IFRSTkdFTiBiaXQgdG8gMCBhbmQgdGhlbiBjaGFuZ2UgQ0xLUDsgZmluYWxseSwgc2V0IFRSTkdFTiBiaXQgdG8gMSB0byByZS1lbmFibGUgdGhlIFRSTkcgbW9kdWxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSA4MCB+IDEwMCBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IDYwIH4gODAgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSA1MCB+NjAgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSA0MCB+NTAgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSAzMCB+NDAgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSAyNSB+MzAgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSAyMCB+MjUgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSAxNSB+MjAgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSAxMiB+MTUgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSA5IH4xMiBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMCA9IDcgfjkgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTEgPSA2IH43IE1Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAwID0gNSB+NiBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMSA9IDQgfjUgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzZdICAgICB8RFZJRU4gICAgIHxEYXRhIFZhbGlkIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBkaXNhYmxlZC4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBlbmFibGVkLgorICAgICAqIHxbN10gICAgIHxSRUFEWSAgICAgfFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIFJlYWR5IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWZ0ZXIgQUNUIChUUk5HX0FDVFs3XSkgYml0IGlzIHNldCwgdGhlIFJFQURZIGJpdCBiZWNvbWUgdG8gMSBhZnRlciBhIGRlbGF5IG9mIDkwdXN+MTIwdXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJORyBpcyBub3QgcmVhZHkgb3Igd2FzIG5vdCBhY3RpdmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJORyBpcyByZWFkeSB0byBiZSBlbmFibGVkLi4KKyAgICAgKiB8WzMxOjhdICB8UmV2ZXJzZWQgIHxSZXZlcnNlZAorICAgICAqIEB2YXIgVFJOR19UOjpEQVRBCisgICAgICogT2Zmc2V0OiAweDA0ICBUUk5HIERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxEQVRBICAgICAgfFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIERhdGEgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgREFUQSBzdG9yZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0ZWQgYnkgVFJORyBhbmQgY2FuIGJlIHJlYWQgb25seSBvbmNlLgorICAgICAqIEB2YXIgVFJOR19UOjpBQ1QKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIFRSTkcgQWN0aXZhdGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs2OjBdICAgfFZFUiAgICAgICB8VFJORyBWZXJzaW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VFJORyB2ZXJzaW9uIG51bWJlciBpcyBkZXBlbmRlbnQgb24gVFJORyBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwMjooQ3VycmVudCBWZXJzaW9uIE51bWJlcikKKyAgICAgKiB8WzddICAgICB8QUNUICAgICAgIHxSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBBY3RpdmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWZ0ZXIgZW5hYmxlIHRoZSBBQ1QgYml0LCBpdCB3aWxsIGFjdGl2ZSB0aGUgVFJORyBtb2R1bGUgYW5kIHdhaXQgdGhlIFJFQURZIChUUk5HX0NUTFs3XSkgYml0IHRvIGJlY29tZSAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUUk5HIGluYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUUk5HIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBBQ1QgaXMgYW4gZW5hYmxlIGJpdCBvZiBhbmFsb2cgcGFydAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gVFJORyBpcyBub3QgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgcmFuZG9tIG51bWJlciwgVFJOR0VOIChUUk5HX0NUTFswXSkgYml0IGFuZCBBQ1QgYml0IHNob3VsZCBiZSBzZXQgdG8gMCB0byByZWR1Y2UgcG93ZXIgY29uc3VtcHRpb24uCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEw7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gVFJORyBDb250cm9sIFJlZ2lzdGVyIGFuZCBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgREFUQTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIFRSTkcgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzFdOworICAgIF9fSU8gdWludDMyX3QgQUNUOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIFRSTkcgQWN0aXZhdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBUUk5HX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIFRSTkdfQ09OU1QgVFJORyBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBUUk5HIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgVFJOR19DVExfVFJOR0VOX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkdfVDo6Q1RMOiBUUk5HRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfQ1RMX1RSTkdFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBUUk5HX0NUTF9UUk5HRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HX1Q6OkNUTDogVFJOR0VOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRSTkdfQ1RMX0RWSUZfUG9zICAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HX1Q6OkNUTDogRFZJRiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX0NUTF9EVklGX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgVFJOR19DVExfRFZJRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFJOR19UOjpDVEw6IERWSUYgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUUk5HX0NUTF9DTEtQX1BvcyAgICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFJOR19UOjpDVEw6IENMS1AgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFJOR19DVExfQ0xLUF9Nc2sgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IFRSTkdfQ1RMX0NMS1BfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkdfVDo6Q1RMOiBDTEtQIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVFJOR19DVExfRFZJRU5fUG9zICAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkdfVDo6Q1RMOiBEVklFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfQ1RMX0RWSUVOX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBUUk5HX0NUTF9EVklFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HX1Q6OkNUTDogRFZJRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRSTkdfQ1RMX1JFQURZX1BvcyAgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HX1Q6OkNUTDogUkVBRFkgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX0NUTF9SRUFEWV9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgVFJOR19DVExfUkVBRFlfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVFJOR19UOjpDVEw6IFJFQURZIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUUk5HX0NUTF9SZXZlcnNlZF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFJOR19UOjpDVEw6IFJldmVyc2VkIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVFJOR19DVExfUmV2ZXJzZWRfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmdWwgPDwgVFJOR19DVExfUmV2ZXJzZWRfUG9zKSAgICAgICAgICAgICAvKiE8IFRSTkdfVDo6Q1RMOiBSZXZlcnNlZCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVFJOR19EQVRBX0RBVEFfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkdfVDo6REFUQTogREFUQSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfREFUQV9EQVRBX01zayAgICAgICAgICAgICAgICgweGZmdWwgPDwgVFJOR19EQVRBX0RBVEFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HX1Q6OkRBVEE6IERBVEEgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRSTkdfQUNUX1ZFUl9Qb3MgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HX1Q6OkFDVDogVkVSIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX0FDVF9WRVJfTXNrICAgICAgICAgICAgICAgICAoMHg3ZnVsIDw8IFRSTkdfQUNUX1ZFUl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFJOR19UOjpBQ1Q6IFZFUiBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUUk5HX0FDVF9BQ1RfUG9zICAgICAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFJOR19UOjpBQ1Q6IEFDVCBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFJOR19BQ1RfQUNUX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFRSTkdfQUNUX0FDVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkdfVDo6QUNUOiBBQ1QgTWFzayAgICAgICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogVFJOR19DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgVFJORyByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisjZW5kaWYgLyogX19UUk5HX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS91YXJ0X3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3VhcnRfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4NGZkOQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS91YXJ0X3JlZy5oCkBAIC0wLDAgKzEsMTI0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHVhcnRfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFVBUlQgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVUFSVF9SRUdfSF9fCisjZGVmaW5lIF9fVUFSVF9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVW5pdmVyc2FsIEFzeW5jaHJvbm91cyBSZWNlaXZlci9UcmFuc21pdHRlciBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgVUFSVCBVbml2ZXJzYWwgQXN5bmNocm9ub3VzIFJlY2VpdmVyL1RyYW5zbWl0dGVyIENvbnRyb2xsZXIoVUFSVCkKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgVUFSVCBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIFVBUlRfVDo6REFUCisgICAgICogT2Zmc2V0OiAweDAwICBVQVJUIFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8REFUICAgICAgIHxEYXRhIFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ5IHdyaXRpbmcgb25lIGJ5dGUgdG8gdGhpcyByZWdpc3RlciwgdGhlIGRhdGEgYnl0ZSB3aWxsIGJlIHN0b3JlZCBpbiB0cmFuc21pdHRlciBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBVQVJUIGNvbnRyb2xsZXIgd2lsbCBzZW5kIG91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdHJhbnNtaXR0ZXIgRklGTyB0b3AgbG9jYXRpb24gdGhyb3VnaCB0aGUgVUFSVF9UWEQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnkgcmVhZGluZyB0aGlzIHJlZ2lzdGVyLCB0aGUgVUFSVCBjb250cm9sbGVyIHdpbGwgcmV0dXJuIGFuIDgtYml0IGRhdGEgcmVjZWl2ZWQgZnJvbSByZWNlaXZlciBGSUZPLgorICAgICAqIHxbOF0gICAgIHxQQVJJVFkgICAgfFBhcml0eSBCaXQgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Qnkgd3JpdGluZyB0byB0aGlzIGJpdCwgdGhlIHBhcml0eSBiaXQgd2lsbCBiZSBzdG9yZWQgaW4gdHJhbnNtaXR0ZXIgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBQQkUgKFVBUlRfTElORVszXSkgYW5kIFBTUyAoVUFSVF9MSU5FWzddKSBhcmUgc2V0LCB0aGUgVUFSVCBjb250cm9sbGVyIHdpbGwgc2VuZCBvdXQgdGhpcyBiaXQgZm9sbG93IHRoZSBEQVQgKFVBUlRfREFUWzc6MF0pIHRocm91Z2ggdGhlIFVBUlRfVFhELgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFBCRSAoVUFSVF9MSU5FWzNdKSBhbmQgUFNTIChVQVJUX0xJTkVbN10pIGFyZSBlbmFibGVkLCB0aGUgcGFyaXR5IGJpdCBjYW4gYmUgcmVhZCBieSB0aGlzIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBoYXMgZWZmZWN0IG9ubHkgd2hlbiBQQkUgKFVBUlRfTElORVszXSkgYW5kIFBTUyAoVUFSVF9MSU5FWzddKSBhcmUgc2V0LgorICAgICAqIEB2YXIgVUFSVF9UOjpJTlRFTgorICAgICAqIE9mZnNldDogMHgwNCAgVUFSVCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UkRBSUVOICAgIHxSZWNlaXZlIERhdGEgQXZhaWxhYmxlIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgZGF0YSBhdmFpbGFibGUgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIGRhdGEgYXZhaWxhYmxlIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxUSFJFSUVOICAgfFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBlbXB0eSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHkgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFJMU0lFTiAgICB8UmVjZWl2ZSBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIExpbmUgU3RhdHVzIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBMaW5lIFN0YXR1cyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8TU9ERU1JRU4gIHxNb2RlbSBTdGF0dXMgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTW9kZW0gc3RhdHVzIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTW9kZW0gc3RhdHVzIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxSWFRPSUVOICAgfFJYIFRpbWUtb3V0IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJYIHRpbWUtb3V0IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlggdGltZS1vdXQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfEJVRkVSUklFTiB8QnVmZmVyIEVycm9yIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJ1ZmZlciBlcnJvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJ1ZmZlciBlcnJvciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8V0tJRU4gICAgIHxXYWtlLXVwIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdha2UtdXAgSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXYWtlLXVwIEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxMSU5JRU4gICAgfExJTiBCdXMgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTElOIGJ1cyBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExJTiBidXMgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgdXNlZCBmb3IgTElOIGZ1bmN0aW9uIG1vZGUuCisgICAgICogfFsxMV0gICAgfFRPQ05URU4gICB8UmVjZWl2ZSBCdWZmZXIgVGltZS1vdXQgQ291bnRlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgQnVmZmVyIFRpbWUtb3V0IGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgQnVmZmVyIFRpbWUtb3V0IGNvdW50ZXIgRW5hYmxlZC4KKyAgICAgKiB8WzEyXSAgICB8QVRPUlRTRU4gIHxuUlRTIEF1dG8tZmxvdyBDb250cm9sIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gblJUUyBhdXRvLWZsb3cgY29udHJvbCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gblJUUyBhdXRvLWZsb3cgY29udHJvbCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gblJUUyBhdXRvLWZsb3cgaXMgZW5hYmxlZCwgaWYgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgUlggRklGTyBlcXVhbHMgdGhlIFJUU1RSR0xWIChVQVJUX0ZJRk9bMTk6MTZdKSwgdGhlIFVBUlQgd2lsbCBkZS1hc3NlcnQgblJUUyBzaWduYWwuCisgICAgICogfFsxM10gICAgfEFUT0NUU0VOICB8bkNUUyBBdXRvLWZsb3cgQ29udHJvbCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IG5DVFMgYXV0by1mbG93IGNvbnRyb2wgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IG5DVFMgYXV0by1mbG93IGNvbnRyb2wgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIG5DVFMgYXV0by1mbG93IGlzIGVuYWJsZWQsIHRoZSBVQVJUIHdpbGwgc2VuZCBkYXRhIHRvIGV4dGVybmFsIGRldmljZSBpZiBuQ1RTIGlucHV0IGFzc2VydCAoVUFSVCB3aWxsIG5vdCBzZW5kIGRhdGEgdG8gZGV2aWNlIHVudGlsIG5DVFMgaXMgYXNzZXJ0ZWQpLgorICAgICAqIHxbMTRdICAgIHxUWFBETUFFTiAgfFRYIFBETUEgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNhbiBlbmFibGUgb3IgZGlzYWJsZSBUWCBQRE1BIHNlcnZpY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRYIFBETUEgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRYIFBETUEgRW5hYmxlZC4KKyAgICAgKiB8WzE1XSAgICB8UlhQRE1BRU4gIHxSWCBQRE1BIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBjYW4gZW5hYmxlIG9yIGRpc2FibGUgUlggUERNQSBzZXJ2aWNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSWCBQRE1BIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSWCBQRE1BIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgUkxTSUVOIChVQVJUX0lOVEVOWzJdKSBpcyBlbmFibGVkIGFuZCBIV1JMU0lOVCAoVUFSVF9JTlRTVFNbMjZdKSBpcyBzZXQgdG8gMSwgdGhlIFJMUyAoUmVjZWl2ZSBMaW5lIFN0YXR1cykgSW50ZXJydXB0IGlzIGNhdXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBSTFMgaW50ZXJydXB0IGlzIGNhdXNlZCBieSBCcmVhayBFcnJvciBGbGFnIEJJRihVQVJUX0ZJRk9TVFNbNl0pLCBGcmFtZSBFcnJvciBGbGFnIEZFRihVQVJUX0ZJRk9bNV0pIG9yIFBhcml0eSBFcnJvciBGbGFnIFBFRihVQVJUX0ZJRk9TVFNbNF0pLCBVQVJUIFBETUEgcmVjZWl2ZSByZXF1ZXN0IG9wZXJhdGlvbiBpcyBzdG9wLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENsZWFyIEJyZWFrIEVycm9yIEZsYWcgQklGIG9yIEZyYW1lIEVycm9yIEZsYWcgRkVGIG9yIFBhcml0eSBFcnJvciBGbGFnIFBFRiBieSB3cml0aW5nIDEgdG8gY29ycmVzcG9uZGluZyBCSUYsIEZFRiBhbmQgUEVGIHRvIG1ha2UgVUFSVCBQRE1BIHJlY2VpdmUgcmVxdWVzdCBvcGVyYXRpb24gY29udGludWUuCisgICAgICogfFsxOF0gICAgfEFCUklFTiAgICB8QXV0by1iYXVkIFJhdGUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXV0by1iYXVkIHJhdGUgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBdXRvLWJhdWQgcmF0ZSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzIyXSAgICB8VFhFTkRJRU4gIHxUcmFuc21pdHRlciBFbXB0eSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFRYRU5ESUVOIChVQVJUX0lOVEVOWzIyXSkgaXMgZW5hYmxlZCwgdGhlIFRyYW5zbWl0dGVyIEVtcHR5IGludGVycnVwdCBUWEVORElOVCAoVUFSVF9JTlRTVFNbMzBdKSB3aWxsIGJlIGdlbmVyYXRlZCB3aGVuIFRYRU5ESUYgKFVBUlRfSU5UU1RTWzIyXSkgaXMgc2V0IChUWCBGSUZPIChVQVJUX0RBVCkgaXMgZW1wdHkgYW5kIHRoZSBTVE9QIGJpdCBvZiB0aGUgbGFzdCBieXRlIGhhcyBiZWVuIHRyYW5zbWl0dGVkKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXR0ZXIgZW1wdHkgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdHRlciBlbXB0eSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiBAdmFyIFVBUlRfVDo6RklGTworICAgICAqIE9mZnNldDogMHgwOCAgVUFSVCBGSUZPIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxSWFJTVCAgICAgfFJYIEZpZWxkIFNvZnR3YXJlIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBSWFJTVCAoVUFSVF9GSUZPWzFdKSBpcyBzZXQsIGFsbCB0aGUgYnl0ZSBpbiB0aGUgcmVjZWl2ZXIgRklGTyBhbmQgUlggaW50ZXJuYWwgc3RhdGUgbWFjaGluZSBhcmUgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCB0aGUgUlggaW50ZXJuYWwgc3RhdGUgbWFjaGluZSBhbmQgcG9pbnRlcnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IHdpbGwgYXV0b21hdGljYWxseSBjbGVhciBhdCBsZWFzdCAzIFVBUlQgcGVyaXBoZXJhbCBjbG9jayBjeWNsZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEJlZm9yZSBzZXR0aW5nIHRoaXMgYml0LCBpdCBzaG91bGQgd2FpdCBmb3IgdGhlIFJYSURMRSAoVUFSVF9GSUZPU1RTWzI5XSkgYmUgc2V0LgorICAgICAqIHxbMl0gICAgIHxUWFJTVCAgICAgfFRYIEZpZWxkIFNvZnR3YXJlIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBUWFJTVCAoVUFSVF9GSUZPWzJdKSBpcyBzZXQsIGFsbCB0aGUgYnl0ZSBpbiB0aGUgdHJhbnNtaXQgRklGTyBhbmQgVFggaW50ZXJuYWwgc3RhdGUgbWFjaGluZSBhcmUgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCB0aGUgVFggaW50ZXJuYWwgc3RhdGUgbWFjaGluZSBhbmQgcG9pbnRlcnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IHdpbGwgYXV0b21hdGljYWxseSBjbGVhciBhdCBsZWFzdCAzIFVBUlQgcGVyaXBoZXJhbCBjbG9jayBjeWNsZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEJlZm9yZSBzZXR0aW5nIHRoaXMgYml0LCBpdCBzaG91bGQgd2FpdCBmb3IgdGhlIFRYRU1QVFlGIChVQVJUX0ZJRk9TVFNbMjhdKSBiZSBzZXQuCisgICAgICogfFs3OjRdICAgfFJGSVRMICAgICB8UlggRklGTyBJbnRlcnJ1cHQgVHJpZ2dlciBMZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgcmVjZWl2ZSBGSUZPIGVxdWFscyB0aGUgUkZJVEwsIHRoZSBSREFJRiAoVUFSVF9JTlRTVFNbMF0pIHdpbGwgYmUgc2V0IChpZiBSREFJRU4gKFVBUlRfSU5URU4gWzBdKSBlbmFibGVkLCBhbmQgYW4gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gUlggRklGTyBJbnRlcnJ1cHQgVHJpZ2dlciBMZXZlbCBpcyAxIGJ5dGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IFJYIEZJRk8gSW50ZXJydXB0IFRyaWdnZXIgTGV2ZWwgaXMgNCBieXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gUlggRklGTyBJbnRlcnJ1cHQgVHJpZ2dlciBMZXZlbCBpcyA4IGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBSWCBGSUZPIEludGVycnVwdCBUcmlnZ2VyIExldmVsIGlzIDE0IGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIHxbOF0gICAgIHxSWE9GRiAgICAgfFJlY2VpdmVyIERpc2FibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlY2VpdmVyIGlzIGRpc2FibGVkIG9yIG5vdCAoc2V0IDEgdG8gZGlzYWJsZSByZWNlaXZlcikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmVyIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHVzZWQgZm9yIFJTLTQ4NSBOb3JtYWwgTXVsdGktZHJvcCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IHNob3VsZCBiZSBwcm9ncmFtbWVkIGJlZm9yZSBSUzQ4NU5NTSAoVUFSVF9BTFRDVEwgWzhdKSBpcyBwcm9ncmFtbWVkLgorICAgICAqIHxbMTk6MTZdIHxSVFNUUkdMViAgfG5SVFMgVHJpZ2dlciBMZXZlbCBmb3IgQXV0by1mbG93IENvbnRyb2wgVXNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IG5SVFMgVHJpZ2dlciBMZXZlbCBpcyAxIGJ5dGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IG5SVFMgVHJpZ2dlciBMZXZlbCBpcyA0IGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBuUlRTIFRyaWdnZXIgTGV2ZWwgaXMgOCBieXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gblJUUyBUcmlnZ2VyIExldmVsIGlzIDE0IGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgYXV0byBuUlRTIGZsb3cgY29udHJvbC4KKyAgICAgKiBAdmFyIFVBUlRfVDo6TElORQorICAgICAqIE9mZnNldDogMHgwQyAgVUFSVCBMaW5lIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxXTFMgICAgICAgfFdvcmQgTGVuZ3RoIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgc2V0cyBVQVJUIHdvcmQgbGVuZ3RoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gNSBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gNiBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gNyBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gOCBiaXRzLgorICAgICAqIHxbMl0gICAgIHxOU0IgICAgICAgfE51bWJlciBvZiBTVE9QIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPbmUgU1RPUCBiaXQgaXMgZ2VuZXJhdGVkIGluIHRoZSB0cmFuc21pdHRlZCBkYXRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIHNlbGVjdCA1LWJpdCB3b3JkIGxlbmd0aCwgMS41IFNUT1AgYml0IGlzIGdlbmVyYXRlZCBpbiB0aGUgdHJhbnNtaXR0ZWQgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHNlbGVjdCA2LSwgNy0gYW5kIDgtYml0IHdvcmQgbGVuZ3RoLCAyIFNUT1AgYml0IGlzIGdlbmVyYXRlZCBpbiB0aGUgdHJhbnNtaXR0ZWQgZGF0YS4KKyAgICAgKiB8WzNdICAgICB8UEJFICAgICAgIHxQYXJpdHkgQml0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUGFyaXR5IGJpdCBnZW5lcmF0ZWQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBhcml0eSBiaXQgZ2VuZXJhdGVkIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogUGFyaXR5IGJpdCBpcyBnZW5lcmF0ZWQgb24gZWFjaCBvdXRnb2luZyBjaGFyYWN0ZXIgYW5kIGlzIGNoZWNrZWQgb24gZWFjaCBpbmNvbWluZyBkYXRhLgorICAgICAqIHxbNF0gICAgIHxFUEUgICAgICAgfEV2ZW4gUGFyaXR5IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT2RkIG51bWJlciBvZiBsb2dpYyAxJ3MgaXMgdHJhbnNtaXR0ZWQgYW5kIGNoZWNrZWQgaW4gZWFjaCB3b3JkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFdmVuIG51bWJlciBvZiBsb2dpYyAxJ3MgaXMgdHJhbnNtaXR0ZWQgYW5kIGNoZWNrZWQgaW4gZWFjaCB3b3JkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGhhcyBlZmZlY3Qgb25seSB3aGVuIFBCRSAoVUFSVF9MSU5FWzNdKSBpcyBzZXQuCisgICAgICogfFs1XSAgICAgfFNQRSAgICAgICB8U3RpY2sgUGFyaXR5IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3RpY2sgcGFyaXR5IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTdGljayBwYXJpdHkgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBQQkUgKFVBUlRfTElORVszXSkgYW5kIEVQRSAoVUFSVF9MSU5FWzRdKSBhcmUgbG9naWMgMSwgdGhlIHBhcml0eSBiaXQgaXMgdHJhbnNtaXR0ZWQgYW5kIGNoZWNrZWQgYXMgbG9naWMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBQQkUgKFVBUlRfTElORVszXSkgaXMgMSBhbmQgRVBFIChVQVJUX0xJTkVbNF0pIGlzIDAgdGhlbiB0aGUgcGFyaXR5IGJpdCBpcyB0cmFuc21pdHRlZCBhbmQgY2hlY2tlZCBhcyAxLgorICAgICAqIHxbNl0gICAgIHxCQ0IgICAgICAgfEJyZWFrIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyZWFrIENvbnRyb2wgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJyZWFrIENvbnRyb2wgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBsb2dpYyAxLCB0aGUgdHJhbnNtaXR0ZWQgc2VyaWFsIGRhdGEgb3V0cHV0IChUWCkgaXMgZm9yY2VkIHRvIHRoZSBTcGFjaW5nIFN0YXRlIChsb2dpYyAwKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGFjdHMgb25seSBvbiBUWCBsaW5lIGFuZCBoYXMgbm8gZWZmZWN0IG9uIHRoZSB0cmFuc21pdHRlciBsb2dpYy4KKyAgICAgKiB8WzddICAgICB8UFNTICAgICAgIHxQYXJpdHkgQml0IFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcGFyaXR5IGJpdCBjYW4gYmUgc2VsZWN0ZWQgdG8gYmUgZ2VuZXJhdGVkIGFuZCBjaGVja2VkIGF1dG9tYXRpY2FsbHkgb3IgYnkgc29mdHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBhcml0eSBiaXQgaXMgZ2VuZXJhdGVkIGJ5IEVQRSAoVUFSVF9MSU5FWzRdKSBhbmQgU1BFIChVQVJUX0xJTkVbNV0pIHNldHRpbmcgYW5kIGNoZWNrZWQgYXV0b21hdGljYWxseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGFyaXR5IGJpdCBnZW5lcmF0ZWQgYW5kIGNoZWNrZWQgYnkgc29mdHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGhhcyBlZmZlY3Qgb25seSB3aGVuIFBCRSAoVUFSVF9MSU5FWzNdKSBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIFBTUyBpcyAwLCB0aGUgcGFyaXR5IGJpdCBpcyB0cmFuc21pdHRlZCBhbmQgY2hlY2tlZCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFBTUyBpcyAxLCB0aGUgdHJhbnNtaXR0ZWQgcGFyaXR5IGJpdCB2YWx1ZSBjYW4gYmUgZGV0ZXJtaW5lZCBieSB3cml0aW5nIFBBUklUWSAoVUFSVF9EQVRbOF0pIGFuZCB0aGUgcGFyaXR5IGJpdCBjYW4gYmUgcmVhZCBieSByZWFkaW5nIFBBUklUWSAoVUFSVF9EQVRbOF0pLgorICAgICAqIHxbOF0gICAgIHxUWERJTlYgICAgfFRYIERhdGEgSW52ZXJ0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXR0ZWQgZGF0YSBzaWduYWwgaW52ZXJ0ZWQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0dGVkIGRhdGEgc2lnbmFsIGludmVydGVkIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEJlZm9yZSBzZXR0aW5nIHRoaXMgYml0LCBUWFJYRElTIChVQVJUX0ZVTkNTRUxbM10pIHNob3VsZCBiZSBzZXQgdGhlbiB3YWl0ZWQgZm9yIFRYUlhBQ1QgKFVBUlRfRklGT1NUU1szMV0pIGlzIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgY29uZmlndXJhdGlvbiBpcyBkb25lLCBjbGVhcmVkIFRYUlhESVMgKFVBUlRfRlVOQ1NFTFszXSkgdG8gYWN0aXZhdGUgVUFSVCBjb250cm9sbGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyB2YWxpZCB3aGVuIEZVTkNTRUwgKFVBUlRfRlVOQ1NFTFsxOjBdKSBpcyBzZWxlY3QgVUFSVCwgTElOIG9yIFJTNDg1IGZ1bmN0aW9uLgorICAgICAqIHxbOV0gICAgIHxSWERJTlYgICAgfFJYIERhdGEgSW52ZXJ0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZWQgZGF0YSBzaWduYWwgaW52ZXJ0ZWQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmVkIGRhdGEgc2lnbmFsIGludmVydGVkIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEJlZm9yZSBzZXR0aW5nIHRoaXMgYml0LCBUWFJYRElTIChVQVJUX0ZVTkNTRUxbM10pIHNob3VsZCBiZSBzZXQgdGhlbiB3YWl0ZWQgZm9yIFRYUlhBQ1QgKFVBUlRfRklGT1NUU1szMV0pIGlzIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgY29uZmlndXJhdGlvbiBpcyBkb25lLCBjbGVhcmVkIFRYUlhESVMgKFVBUlRfRlVOQ1NFTFszXSkgdG8gYWN0aXZhdGUgVUFSVCBjb250cm9sbGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyB2YWxpZCB3aGVuIEZVTkNTRUwgKFVBUlRfRlVOQ1NFTFsxOjBdKSBpcyBzZWxlY3QgVUFSVCwgTElOIG9yIFJTNDg1IGZ1bmN0aW9uLgorICAgICAqIEB2YXIgVUFSVF9UOjpNT0RFTQorICAgICAqIE9mZnNldDogMHgxMCAgVUFSVCBNb2RlbSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzFdICAgICB8UlRTICAgICAgIHxuUlRTIChSZXF1ZXN0LXRvLXNlbmQpIFNpZ25hbCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgZGlyZWN0IGNvbnRyb2wgaW50ZXJuYWwgblJUUyBzaWduYWwgYWN0aXZlIG9yIG5vdCwgYW5kIHRoZW4gZHJpdmUgdGhlIG5SVFMgcGluIG91dHB1dCB3aXRoIFJUU0FDVExWIGJpdCBjb25maWd1cmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBuUlRTIHNpZ25hbCBpcyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IG5SVFMgc2lnbmFsIGlzIGluYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIG5SVFMgc2lnbmFsIGNvbnRyb2wgYml0IGlzIG5vdCBlZmZlY3RpdmUgd2hlbiBuUlRTIGF1dG8tZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgaW4gVUFSVCBmdW5jdGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIG5SVFMgc2lnbmFsIGNvbnRyb2wgYml0IGlzIG5vdCBlZmZlY3RpdmUgd2hlbiBSUy00ODUgYXV0byBkaXJlY3Rpb24gbW9kZSAoQVVEKSBpcyBlbmFibGVkIGluIFJTLTQ4NSBmdW5jdGlvbiBtb2RlLgorICAgICAqIHxbOV0gICAgIHxSVFNBQ1RMViAgfG5SVFMgUGluIEFjdGl2ZSBMZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgdGhlIGFjdGl2ZSBsZXZlbCBzdGF0ZSBvZiBuUlRTIHBpbiBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IG5SVFMgcGluIG91dHB1dCBpcyBoaWdoIGxldmVsIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gblJUUyBwaW4gb3V0cHV0IGlzIGxvdyBsZXZlbCBhY3RpdmUuIChEZWZhdWx0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEJlZm9yZSBzZXR0aW5nIHRoaXMgYml0LCBUWFJYRElTIChVQVJUX0ZVTkNTRUxbM10pIHNob3VsZCBiZSBzZXQgdGhlbiB3YWl0ZWQgZm9yIFRYUlhBQ1QgKFVBUlRfRklGT1NUU1szMV0pIGlzIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgY29uZmlndXJhdGlvbiBpcyBkb25lLCBjbGVhcmVkIFRYUlhESVMgKFVBUlRfRlVOQ1NFTFszXSkgdG8gYWN0aXZhdGUgVUFSVCBjb250cm9sbGVyLgorICAgICAqIHxbMTNdICAgIHxSVFNTVFMgICAgfG5SVFMgUGluIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IG1pcnJvciBmcm9tIG5SVFMgcGluIG91dHB1dCBvZiB2b2x0YWdlIGxvZ2ljIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gblJUUyBwaW4gb3V0cHV0IGlzIGxvdyBsZXZlbCB2b2x0YWdlIGxvZ2ljIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBuUlRTIHBpbiBvdXRwdXQgaXMgaGlnaCBsZXZlbCB2b2x0YWdlIGxvZ2ljIHN0YXRlLgorICAgICAqIEB2YXIgVUFSVF9UOjpNT0RFTVNUUworICAgICAqIE9mZnNldDogMHgxNCAgVUFSVCBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDVFNERVRGICAgfERldGVjdCBuQ1RTIFN0YXRlIENoYW5nZSBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW5ldmVyIG5DVFMgaW5wdXQgaGFzIGNoYW5nZSBzdGF0ZSwgYW5kIGl0IHdpbGwgZ2VuZXJhdGUgTW9kZW0gaW50ZXJydXB0IHRvIENQVSB3aGVuIE1PREVNSUVOIChVQVJUX0lOVEVOIFszXSkgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IG5DVFMgaW5wdXQgaGFzIG5vdCBjaGFuZ2Ugc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IG5DVFMgaW5wdXQgaGFzIGNoYW5nZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs0XSAgICAgfENUU1NUUyAgICB8bkNUUyBQaW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgbWlycm9yIGZyb20gbkNUUyBwaW4gaW5wdXQgb2Ygdm9sdGFnZSBsb2dpYyBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IG5DVFMgcGluIGlucHV0IGlzIGxvdyBsZXZlbCB2b2x0YWdlIGxvZ2ljIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBuQ1RTIHBpbiBpbnB1dCBpcyBoaWdoIGxldmVsIHZvbHRhZ2UgbG9naWMgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgZWNob2VzIHdoZW4gVUFSVCBjb250cm9sbGVyIHBlcmlwaGVyYWwgY2xvY2sgaXMgZW5hYmxlZCwgYW5kIG5DVFMgbXVsdGktZnVuY3Rpb24gcG9ydCBpcyBzZWxlY3RlZC4KKyAgICAgKiB8WzhdICAgICB8Q1RTQUNUTFYgIHxuQ1RTIFBpbiBBY3RpdmUgTGV2ZWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZWZpbmVzIHRoZSBhY3RpdmUgbGV2ZWwgc3RhdGUgb2YgbkNUUyBwaW4gaW5wdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IG5DVFMgcGluIGlucHV0IGlzIGhpZ2ggbGV2ZWwgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBuQ1RTIHBpbiBpbnB1dCBpcyBsb3cgbGV2ZWwgYWN0aXZlLiAoRGVmYXVsdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBCZWZvcmUgc2V0dGluZyB0aGlzIGJpdCwgVFhSWERJUyAoVUFSVF9GVU5DU0VMWzNdKSBzaG91bGQgYmUgc2V0IHRoZW4gd2FpdGVkIGZvciBUWFJYQUNUIChVQVJUX0ZJRk9TVFNbMzFdKSBpcyBjbGVhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSwgY2xlYXJlZCBUWFJYRElTIChVQVJUX0ZVTkNTRUxbM10pIHRvIGFjdGl2YXRlIFVBUlQgY29udHJvbGxlci4KKyAgICAgKiBAdmFyIFVBUlRfVDo6RklGT1NUUworICAgICAqIE9mZnNldDogMHgxOCAgVUFSVCBGSUZPIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFJYT1ZJRiAgICB8UlggT3ZlcmZsb3cgRXJyb3IgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiBSWCBGSUZPIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgcmVjZWl2ZWQgZGF0YSBpcyBncmVhdGVyIHRoYW4gUlhfRklGTyAoVUFSVF9EQVQpIHNpemUgMTYgYnl0ZXMsIHRoaXMgYml0IHdpbGwgYmUgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSWCBGSUZPIGlzIG5vdCBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlggRklGTyBpcyBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxXSAgICAgfEFCUkRJRiAgICB8QXV0by1iYXVkIFJhdGUgRGV0ZWN0IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIGxvZ2ljIDEgd2hlbiBhdXRvLWJhdWQgcmF0ZSBkZXRlY3QgZnVuY3Rpb24gaXMgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8tYmF1ZCByYXRlIGRldGVjdCBmdW5jdGlvbiBpcyBub3QgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF1dG8tYmF1ZCByYXRlIGRldGVjdCBmdW5jdGlvbiBpcyBmaW5pc2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsyXSAgICAgfEFCUkRUT0lGICB8QXV0by1iYXVkIFJhdGUgRGV0ZWN0IFRpbWUtb3V0IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIGxvZ2ljIDEgaW4gQXV0by1iYXVkIFJhdGUgRGV0ZWN0IG1vZGUgd2hlbiB0aGUgYmF1ZCByYXRlIGNvdW50ZXIgaXMgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8tYmF1ZCByYXRlIGNvdW50ZXIgaXMgdW5kZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBdXRvLWJhdWQgcmF0ZSBjb3VudGVyIGlzIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzNdICAgICB8QUREUkRFVEYgIHxSUy00ODUgQWRkcmVzcyBCeXRlIERldGVjdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmVyIGRldGVjdHMgYSBkYXRhIHRoYXQgaXMgbm90IGFuIGFkZHJlc3MgYml0IChiaXQgOSA9JzAnKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZXIgZGV0ZWN0cyBhIGRhdGEgdGhhdCBpcyBhbiBhZGRyZXNzIGJpdCAoYml0IDkgPScxJykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgUlMtNDg1IGZ1bmN0aW9uIG1vZGUgYW5kIEFERFJERU4gKFVBUlRfQUxUQ1RMWzE1XSkgaXMgc2V0IHRvIDEgdG8gZW5hYmxlIEFkZHJlc3MgZGV0ZWN0aW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzRdICAgICB8UEVGICAgICAgIHxQYXJpdHkgRXJyb3IgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byBsb2dpYyAxIHdoZW5ldmVyIHRoZSByZWNlaXZlZCBjaGFyYWN0ZXIgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHBhcml0eSBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHBhcml0eSBlcnJvciBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBhcml0eSBlcnJvciBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNV0gICAgIHxGRUYgICAgICAgfEZyYW1pbmcgRXJyb3IgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byBsb2dpYyAxIHdoZW5ldmVyIHRoZSByZWNlaXZlZCBjaGFyYWN0ZXIgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHN0b3AgYml0ICh0aGF0IGlzLCB0aGUgc3RvcCBiaXQgZm9sbG93aW5nIHRoZSBsYXN0IGRhdGEgYml0IG9yIHBhcml0eSBiaXQgaXMgZGV0ZWN0ZWQgYXMgbG9naWMgMCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGZyYW1pbmcgZXJyb3IgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGcmFtaW5nIGVycm9yIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs2XSAgICAgfEJJRiAgICAgICB8QnJlYWsgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gbG9naWMgMSB3aGVuZXZlciB0aGUgcmVjZWl2ZWQgZGF0YSBpbnB1dCAoUlgpIGlzIGhlbGQgaW4gdGhlIHNwYWNpbmcgc3RhdGUgKGxvZ2ljIDApIGZvciBsb25nZXIgdGhhbiBhIGZ1bGwgd29yZCB0cmFuc21pc3Npb24gdGltZSAodGhhdCBpcywgdGhlIHRvdGFsIHRpbWUgb2Ygc3RhcnQgYml0ICsgZGF0YSBiaXRzICsgcGFyaXR5ICsgc3RvcCBiaXRzKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQnJlYWsgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJlYWsgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxMzo4XSAgfFJYUFRSICAgICB8UlggRklGTyBQb2ludGVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIFJYIEZJRk8gQnVmZmVyIFBvaW50ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBVQVJUIHJlY2VpdmVzIG9uZSBieXRlIGZyb20gZXh0ZXJuYWwgZGV2aWNlLCBSWFBUUiBpbmNyZWFzZXMgb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gb25lIGJ5dGUgb2YgUlggRklGTyBpcyByZWFkIGJ5IENQVSwgUlhQVFIgZGVjcmVhc2VzIG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgTWF4aW11bSB2YWx1ZSBzaG93biBpbiBSWFBUUiBpcyAxNQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIHVzaW5nIGxldmVsIG9mIFJYIEZJRk8gQnVmZmVyIGVxdWFsIHRvIDE2LCB0aGUgUlhGVUxMIGJpdCBpcyBzZXQgdG8gMSBhbmQgUlhQVFIgd2lsbCBzaG93IDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QXMgb25lIGJ5dGUgb2YgUlggRklGTyBpcyByZWFkIGJ5IENQVSwgdGhlIFJYRlVMTCBiaXQgaXMgY2xlYXJlZCB0byAwIGFuZCBSWFBUUiB3aWxsIHNob3cgMTUuCisgICAgICogfFsxNF0gICAgfFJYRU1QVFkgICB8UmVjZWl2ZXIgRklGTyBFbXB0eSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluaXRpYXRlIFJYIEZJRk8gZW1wdHkgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSWCBGSUZPIGlzIG5vdCBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlggRklGTyBpcyBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIHRoZSBsYXN0IGJ5dGUgb2YgUlggRklGTyBoYXMgYmVlbiByZWFkIGJ5IENQVSwgaGFyZHdhcmUgc2V0cyB0aGlzIGJpdCBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IHdpbGwgYmUgY2xlYXJlZCB3aGVuIFVBUlQgcmVjZWl2ZXMgYW55IG5ldyBkYXRhLgorICAgICAqIHxbMTVdICAgIHxSWEZVTEwgICAgfFJlY2VpdmVyIEZJRk8gRnVsbCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluaXRpYXRlcyBSWCBGSUZPIGZ1bGwgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSWCBGSUZPIGlzIG5vdCBmdWxsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSWCBGSUZPIGlzIGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIG51bWJlciBvZiB1c2FnZSBpbiBSWCBGSUZPIEJ1ZmZlciBpcyBlcXVhbCB0byAxNiwgb3RoZXJ3aXNlIGl0IGlzIGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogfFsyMToxNl0gfFRYUFRSICAgICB8VFggRklGTyBQb2ludGVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIFRYIEZJRk8gQnVmZmVyIFBvaW50ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBDUFUgd3JpdGVzIG9uZSBieXRlIGludG8gVUFSVF9EQVQsIFRYUFRSIGluY3JlYXNlcyBvbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBvbmUgYnl0ZSBvZiBUWCBGSUZPIGlzIHRyYW5zZmVycmVkIHRvIFRyYW5zbWl0dGVyIFNoaWZ0IFJlZ2lzdGVyLCBUWFBUUiBkZWNyZWFzZXMgb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBNYXhpbXVtIHZhbHVlIHNob3duIGluIFRYUFRSIGlzIDE1LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIHVzaW5nIGxldmVsIG9mIFRYIEZJRk8gQnVmZmVyIGVxdWFsIHRvIDE2LCB0aGUgVFhGVUxMIGJpdCBpcyBzZXQgdG8gMSBhbmQgVFhQVFIgd2lsbCBzaG93IDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QXMgb25lIGJ5dGUgb2YgVFggRklGTyBpcyB0cmFuc2ZlcnJlZCB0byBUcmFuc21pdHRlciBTaGlmdCBSZWdpc3RlciwgdGhlIFRYRlVMTCBiaXQgaXMgY2xlYXJlZCB0byAwIGFuZCBUWFBUUiB3aWxsIHNob3cgMTUuCisgICAgICogfFsyMl0gICAgfFRYRU1QVFkgICB8VHJhbnNtaXR0ZXIgRklGTyBFbXB0eSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyBUWCBGSUZPIGVtcHR5IG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVFggRklGTyBpcyBub3QgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRYIEZJRk8gaXMgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiB0aGUgbGFzdCBieXRlIG9mIFRYIEZJRk8gaGFzIGJlZW4gdHJhbnNmZXJyZWQgdG8gVHJhbnNtaXR0ZXIgU2hpZnQgUmVnaXN0ZXIsIGhhcmR3YXJlIHNldHMgdGhpcyBiaXQgaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCB3aWxsIGJlIGNsZWFyZWQgd2hlbiB3cml0aW5nIGRhdGEgaW50byBVQVJUX0RBVCAoVFggRklGTyBub3QgZW1wdHkpLgorICAgICAqIHxbMjNdICAgIHxUWEZVTEwgICAgfFRyYW5zbWl0dGVyIEZJRk8gRnVsbCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyBUWCBGSUZPIGZ1bGwgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUWCBGSUZPIGlzIG5vdCBmdWxsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUWCBGSUZPIGlzIGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIG51bWJlciBvZiB1c2FnZSBpbiBUWCBGSUZPIEJ1ZmZlciBpcyBlcXVhbCB0byAxNiwgb3RoZXJ3aXNlIGl0IGlzIGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogfFsyNF0gICAgfFRYT1ZJRiAgICB8VFggT3ZlcmZsb3cgRXJyb3IgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBUWCBGSUZPIChVQVJUX0RBVCkgaXMgZnVsbCwgYW4gYWRkaXRpb25hbCB3cml0ZSB0byBVQVJUX0RBVCB3aWxsIGNhdXNlIHRoaXMgYml0IHRvIGxvZ2ljIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRYIEZJRk8gaXMgbm90IG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUWCBGSUZPIGlzIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzI4XSAgICB8VFhFTVBUWUYgIHxUcmFuc21pdHRlciBFbXB0eSBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gVFggRklGTyAoVUFSVF9EQVQpIGlzIGVtcHR5IGFuZCB0aGUgU1RPUCBiaXQgb2YgdGhlIGxhc3QgYnl0ZSBoYXMgYmVlbiB0cmFuc21pdHRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVFggRklGTyBpcyBub3QgZW1wdHkgb3IgdGhlIFNUT1AgYml0IG9mIHRoZSBsYXN0IGJ5dGUgaGFzIGJlZW4gbm90IHRyYW5zbWl0dGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUWCBGSUZPIGlzIGVtcHR5IGFuZCB0aGUgU1RPUCBiaXQgb2YgdGhlIGxhc3QgYnl0ZSBoYXMgYmVlbiB0cmFuc21pdHRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBUWCBGSUZPIGlzIG5vdCBlbXB0eSBvciB0aGUgbGFzdCBieXRlIHRyYW5zbWlzc2lvbiBoYXMgbm90IGNvbXBsZXRlZC4KKyAgICAgKiB8WzI5XSAgICB8UlhJRExFICAgIHxSWCBJZGxlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIFJYIGlzIGlkbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJYIGlzIGJ1c3kuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJYIGlzIGlkbGUuIChEZWZhdWx0KQorICAgICAqIHxbMzFdICAgIHxUWFJYQUNUICAgfFRYIGFuZCBSWCBBY3RpdmUgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIFRYIGFuZCBSWCBhcmUgYWN0aXZlIG9yIGluYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUWCBhbmQgUlggYXJlIGluYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUWCBhbmQgUlggYXJlIGFjdGl2ZS4gKERlZmF1bHQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBUWFJYRElTIChVQVJUX0ZVTkNTRUxbM10pIGlzIHNldCBhbmQgYm90aCBUWCBhbmQgUlggYXJlIGluIGlkbGUgc3RhdGUsIHRoaXMgYml0IGlzIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFVBUlQgY29udHJvbGxlciBjYW4gbm90IHRyYW5zbWl0IG9yIHJlY2VpdmUgZGF0YSBhdCB0aGlzIG1vbWVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcndpc2UgdGhpcyBiaXQgaXMgc2V0LgorICAgICAqIEB2YXIgVUFSVF9UOjpJTlRTVFMKKyAgICAgKiBPZmZzZXQ6IDB4MUMgIFVBUlQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFJEQUlGICAgICB8UmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgUlggRklGTyBlcXVhbHMgdGhlIFJGSVRMIHRoZW4gdGhlIFJEQUlGKFVBUlRfSU5UU1RTWzBdKSB3aWxsIGJlIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBSREFJRU4gKFVBUlRfSU5URU4gWzBdKSBpcyBlbmFibGVkLCB0aGUgUkRBIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUkRBIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUkRBIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIGl0IHdpbGwgYmUgY2xlYXJlZCB3aGVuIHRoZSBudW1iZXIgb2YgdW5yZWFkIGJ5dGVzIG9mIFJYIEZJRk8gZHJvcHMgYmVsb3cgdGhlIHRocmVzaG9sZCBsZXZlbCAoUkZJVEwoVUFSVF9GSUZPWzc6NF0pLgorICAgICAqIHxbMV0gICAgIHxUSFJFSUYgICAgfFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgbGFzdCBkYXRhIG9mIFRYIEZJRk8gaXMgdHJhbnNmZXJyZWQgdG8gVHJhbnNtaXR0ZXIgU2hpZnQgUmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgVEhSRUlFTiAoVUFSVF9JTlRFTlsxXSkgaXMgZW5hYmxlZCwgdGhlIFRIUkUgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBUSFJFIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVEhSRSBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5IGFuZCBpdCB3aWxsIGJlIGNsZWFyZWQgd2hlbiB3cml0aW5nIGRhdGEgaW50byBVQVJUX0RBVCAoVFggRklGTyBub3QgZW1wdHkpLgorICAgICAqIHxbMl0gICAgIHxSTFNJRiAgICAgfFJlY2VpdmUgTGluZSBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBSWCByZWNlaXZlIGRhdGEgaGF2ZSBwYXJpdHkgZXJyb3IsIGZyYW1lIGVycm9yIG9yIGJyZWFrIGVycm9yIChhdCBsZWFzdCBvbmUgb2YgMyBiaXRzLCBCSUYoVUFSVF9GSUZPU1RTWzZdKSwgRkVGKFVBUlRfRklGT1NUU1s1XSkgYW5kIFBFRihVQVJUX0ZJRk9TVFNbNF0pLCBpcyBzZXQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFJMU0lFTiAoVUFSVF9JTlRFTiBbMl0pIGlzIGVuYWJsZWQsIHRoZSBSTFMgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBSTFMgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSTFMgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJbiBSUy00ODUgZnVuY3Rpb24gbW9kZSwgdGhpcyBmaWVsZCBpcyBzZXQgaW5jbHVkZSByZWNlaXZlciBkZXRlY3QgYW5kIHJlY2VpdmVkIGFkZHJlc3MgYnl0ZSBjaGFyYWN0ZXIgKGJpdDkgPSAxKSBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QXQgdGhlIHNhbWUgdGltZSwgdGhlIGJpdCBvZiBBRERSREVURiAoVUFSVF9GSUZPU1RTWzNdKSBpcyBhbHNvIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgcmVhZCBvbmx5IGFuZCByZXNldCB0byAwIHdoZW4gYWxsIGJpdHMgb2YgQklGIChVQVJUX0ZJRk9TVFNbNl0pLCBGRUYoVUFSVF9GSUZPU1RTWzVdKSBhbmQgUEVGKFVBUlRfRklGT1NUU1s0XSkgYXJlIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IEluIFJTLTQ4NSBmdW5jdGlvbiBtb2RlLCB0aGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIHJlc2V0IHRvIDAgd2hlbiBhbGwgYml0cyBvZiBCSUYgKFVBUlRfRklGT1NUU1s2XSkgLCBGRUYoVUFSVF9GSUZPU1RTWzVdKSwgUEVGKFVBUlRfRklGT1NUU1s0XSkgYW5kIEFERFJERVRGIChVQVJUX0ZJRk9TVFNbM10pIGFyZSBjbGVhcmVkLgorICAgICAqIHxbM10gICAgIHxNT0RFTUlGICAgfE1PREVNIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIG5DVFMgcGluIGhhcyBzdGF0ZSBjaGFuZ2UgKENUU0RFVEYgKFVBUlRfTU9ERU1TVFNbMF0pID0gMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgTU9ERU1JRU4gKFVBUlRfSU5URU4gWzNdKSBpcyBlbmFibGVkLCB0aGUgTW9kZW0gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBNb2RlbSBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE1vZGVtIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIHJlc2V0IHRvIDAgd2hlbiBiaXQgQ1RTREVURiBpcyBjbGVhcmVkIGJ5IGEgd3JpdGUgMSBvbiBDVFNERVRGKFVBUlRfTU9ERU1TVFNbMF0pLgorICAgICAqIHxbNF0gICAgIHxSWFRPSUYgICAgfFJYIFRpbWUtb3V0IEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIFJYIEZJRk8gaXMgbm90IGVtcHR5IGFuZCBubyBhY3Rpdml0aWVzIG9jY3VycmVkIGluIHRoZSBSWCBGSUZPIGFuZCB0aGUgdGltZS1vdXQgY291bnRlciBlcXVhbCB0byBUT0lDIChVQVJUX1RPVVRbNzowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgUlhUT0lFTiAoVUFSVF9JTlRFTiBbNF0pIGlzIGVuYWJsZWQsIHRoZSBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFJYIHRpbWUtb3V0IGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlggdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgdXNlciBjYW4gcmVhZCBVQVJUX0RBVCAoUlggaXMgaW4gYWN0aXZlKSB0byBjbGVhciBpdC4KKyAgICAgKiB8WzVdICAgICB8QlVGRVJSSUYgIHxCdWZmZXIgRXJyb3IgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgVFggRklGTyBvciBSWCBGSUZPIG92ZXJmbG93cyAoVFhPVklGIChVQVJUX0ZJRk9TVFNbMjRdKSBvciBSWE9WSUYgKFVBUlRfRklGT1NUU1swXSkgaXMgc2V0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEJVRkVSUklGIChVQVJUX0lOVFNUU1s1XSkgaXMgc2V0LCB0aGUgdHJhbnNmZXIgaXMgbm90IGNvcnJlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQlVGRVJSSUVOIChVQVJUX0lOVEVOIFs1XSkgaXMgZW5hYmxlZCwgdGhlIGJ1ZmZlciBlcnJvciBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGJ1ZmZlciBlcnJvciBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJ1ZmZlciBlcnJvciBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCBpZiBib3RoIG9mIFJYT1ZJRihVQVJUX0ZJRk9TVFNbMF0pIGFuZCBUWE9WSUYoVUFSVF9GSUZPU1RTWzI0XSkgYXJlIGNsZWFyZWQgdG8gMCBieSB3cml0aW5nIDEgdG8gUlhPVklGKFVBUlRfRklGT1NUU1swXSkgYW5kIFRYT1ZJRihVQVJUX0ZJRk9TVFNbMjRdKS4KKyAgICAgKiB8WzZdICAgICB8V0tJRiAgICAgIHxVQVJUIFdha2UtdXAgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiBUT1VUV0tGIChVQVJUX1dLU1RTWzRdKSwgUlM0ODVXS0YgKFVBUlRfV0tTVFNbM10pLCBSRlJUV0tGIChVQVJUX1dLU1RTWzJdKSwgREFUV0tGIChVQVJUX1dLU1RTWzFdKSBvciBDVFNXS0YoVUFSVF9XS1NUU1swXSkgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFVBUlQgd2FrZS11cCBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQgd2FrZS11cCBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCBpZiBhbGwgb2YgVE9VVFdLRiwgUlM0ODVXS0YsIFJGUlRXS0YsIERBVFdLRiBhbmQgQ1RTV0tGIGFyZSBjbGVhcmVkIHRvIDAgYnkgd3JpdGluZyAxIHRvIHRoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdCBmbGFnLgorICAgICAqIHxbN10gICAgIHxMSU5JRiAgICAgfExJTiBCdXMgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiBMSU4gc2xhdmUgaGVhZGVyIGRldGVjdCAoU0xWSERFVEYgKFVBUlRfTElOU1RTWzBdPTEpKSwgTElOIGJyZWFrIGRldGVjdCAoQlJLREVURihVQVJUX0xJTlNUU1s4XT0xKSksIGJpdCBlcnJvciBkZXRlY3QgKEJJVEVGKFVBUlRfTElOU1RTWzldPTEpKSwgTElOIHNsYXZlIElEIHBhcml0eSBlcnJvciAoU0xWSURQRUYoVUFSVF9MSU5TVFNbMl0gPSAxKSkgb3IgTElOIHNsYXZlIGhlYWRlciBlcnJvciBkZXRlY3QgKFNMVkhFRiAoVUFSVF9MSU5TVFNbMV0pKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIExJTklFTiAoVUFSVF9JTlRFTiBbOF0pIGlzIGVuYWJsZWQgdGhlIExJTiBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vbmUgb2YgU0xWSERFVEYsIEJSS0RFVEYsIEJJVEVGLCBTTFZJRFBFRiBhbmQgU0xWSEVGIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXQgbGVhc3Qgb25lIG9mIFNMVkhERVRGLCBCUktERVRGLCBCSVRFRiwgU0xWSURQRUYgYW5kIFNMVkhFRiBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCB3aGVuIFNMVkhERVRGKFVBUlRfTElOU1RTWzBdKSwgQlJLREVURihVQVJUX0xJTlNUU1s4XSksIEJJVEVGKFVBUlRfTElOU1RTWzldKSwgU0xWSURQRUYgKFVBUlRfTElOU1RTWzJdKSBhbmQgU0xWSEVGKFVBUlRfTElOU1RTWzFdKSBhbGwgYXJlIGNsZWFyZWQgYW5kIHNvZnR3YXJlIHdyaXRpbmcgMSB0byBMSU5JRihVQVJUX0lOVFNUU1s3XSkuCisgICAgICogfFs4XSAgICAgfFJEQUlOVCAgICB8UmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSBJbnRlcnJ1cHQgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIFJEQUlFTiAoVUFSVF9JTlRFTlswXSkgYW5kIFJEQUlGIChVQVJUX0lOVFNUU1swXSkgYXJlIGJvdGggc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFJEQSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSREEgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8WzldICAgICB8VEhSRUlOVCAgIHxUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyIEVtcHR5IEludGVycnVwdCBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgaWYgVEhSRUlFTiAoVUFSVF9JTlRFTlsxXSkgYW5kIFRIUkVJRihVQVJUX0lOVFNUU1sxXSkgYXJlIGJvdGggc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFRIUkUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVEhSRSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHxbMTBdICAgIHxSTFNJTlQgICAgfFJlY2VpdmUgTGluZSBTdGF0dXMgSW50ZXJydXB0IEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBSTFNJRU4gKFVBUlRfSU5URU5bMl0pIGFuZCBSTFNJRihVQVJUX0lOVFNUU1syXSkgYXJlIGJvdGggc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFJMUyBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSTFMgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8WzExXSAgICB8TU9ERU1JTlQgIHxNT0RFTSBTdGF0dXMgSW50ZXJydXB0IEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBNT0RFTUlFTihVQVJUX0lOVEVOWzNdKSBhbmQgTU9ERU1JRihVQVJUX0lOVFNUU1szXSkgYXJlIGJvdGggc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gTW9kZW0gaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTW9kZW0gaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4uCisgICAgICogfFsxMl0gICAgfFJYVE9JTlQgICB8UlggVGltZS1vdXQgSW50ZXJydXB0IEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBSWFRPSUVOIChVQVJUX0lOVEVOWzRdKSBhbmQgUlhUT0lGKFVBUlRfSU5UU1RTWzRdKSBhcmUgYm90aCBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUlggdGltZS1vdXQgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlggdGltZS1vdXQgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8WzEzXSAgICB8QlVGRVJSSU5UIHxCdWZmZXIgRXJyb3IgSW50ZXJydXB0IEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBCVUZFUlJJRU4oVUFSVF9JTlRFTls1XSkgYW5kIEJVRkVSUklGKFVBUlRfIElOVFNUU1s1XSkgYXJlIGJvdGggc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGJ1ZmZlciBlcnJvciBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCdWZmZXIgZXJyb3IgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8WzE0XSAgICB8V0tJTlQgICAgIHxVQVJUIFdha2UtdXAgSW50ZXJydXB0IEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBXS0lFTiAoVUFSVF9JTlRFTls2XSkgYW5kIFdLSUYgKFVBUlRfSU5UU1RTWzZdKSBhcmUgYm90aCBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gVUFSVCB3YWtlLXVwIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQgd2FrZS11cCBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHxbMTVdICAgIHxMSU5JTlQgICAgfExJTiBCdXMgSW50ZXJydXB0IEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBMSU5JRU4gKFVBUlRfSU5URU5bOF0pIGFuZCBMSU5JRihVQVJUX0lOVFNUU1s3XSkgYXJlIGJvdGggc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIExJTiBCdXMgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIExJTiBCdXMgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8WzE4XSAgICB8SFdSTFNJRiAgIHxQRE1BIE1vZGUgUmVjZWl2ZSBMaW5lIFN0YXR1cyBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIFJYIHJlY2VpdmUgZGF0YSBoYXZlIHBhcml0eSBlcnJvciwgZnJhbWUgZXJyb3Igb3IgYnJlYWsgZXJyb3IgKGF0IGxlYXN0IG9uZSBvZiAzIGJpdHMsIEJJRiAoVUFSVF9GSUZPU1RTWzZdKSwgRkVGIChVQVJUX0ZJRk9TVFNbNV0pIGFuZCBQRUYgKFVBUlRfRklGT1NUU1s0XSkgaXMgc2V0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBSTFNJRU4gKFVBUlRfSU5URU4gWzJdKSBpcyBlbmFibGVkLCB0aGUgUkxTIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUkxTIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZCBpbiBQRE1BIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJMUyBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQgaW4gUERNQSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJbiBSUy00ODUgZnVuY3Rpb24gbW9kZSwgdGhpcyBmaWVsZCBpbmNsdWRlIHJlY2VpdmVyIGRldGVjdCBhbnkgYWRkcmVzcyBieXRlIHJlY2VpdmVkIGFkZHJlc3MgYnl0ZSBjaGFyYWN0ZXIgKGJpdDkgPSAxKSBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIFVBUlQgZnVuY3Rpb24gbW9kZSwgdGhpcyBiaXQgaXMgcmVhZCBvbmx5IGFuZCByZXNldCB0byAwIHdoZW4gYWxsIGJpdHMgb2YgQklGKFVBUlRfRklGT1NUU1s2XSkgLCBGRUYoVUFSVF9GSUZPU1RTWzVdKSBhbmQgUEVGKFVBUlRfRklGT1NUU1s0XSkgYXJlIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IEluIFJTLTQ4NSBmdW5jdGlvbiBtb2RlLCB0aGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIHJlc2V0IHRvIDAgd2hlbiBhbGwgYml0cyBvZiBCSUYoVUFSVF9GSUZPU1RTWzZdKSwgRkVGKFVBUlRfRklGT1NUU1s1XSksIFBFRihVQVJUX0ZJRk9TVFNbNF0pIGFuZCBBRERSREVURiAoVUFSVF9GSUZPU1RTWzNdKSBhcmUgY2xlYXJlZC4KKyAgICAgKiB8WzE5XSAgICB8SFdNT0RJRiAgIHxQRE1BIE1vZGUgTU9ERU0gSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgbkNUUyBwaW4gaGFzIHN0YXRlIGNoYW5nZSAoQ1RTREVURiAoVUFSVF9NT0RFTVNUU1swXT0xKSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgTU9ERU1JRU4gKFVBUlRfSU5URU4gWzNdKSBpcyBlbmFibGVkLCB0aGUgTW9kZW0gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBNb2RlbSBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQgaW4gUERNQSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBNb2RlbSBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQgaW4gUERNQSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgcmVzZXQgdG8gMCB3aGVuIHRoZSBiaXQgQ1RTREVURiAoVUFSVF9NT0RFTVNUU1swXSkgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgb24gQ1RTREVURiAoVUFSVF9NT0RFTVNUUyBbMF0pLgorICAgICAqIHxbMjBdICAgIHxIV1RPSUYgICAgfFBETUEgTW9kZSBSWCBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBSWCBGSUZPIGlzIG5vdCBlbXB0eSBhbmQgbm8gYWN0aXZpdGllcyBvY2N1cnJlZCBpbiB0aGUgUlggRklGTyBhbmQgdGhlIHRpbWUtb3V0IGNvdW50ZXIgZXF1YWwgdG8gVE9JQyAoVUFSVF9UT1VUWzc6MF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFJYVE9JRU4gKFVBUlRfSU5URU4gWzRdKSBpcyBlbmFibGVkLCB0aGUgUlggdGltZS1vdXQgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQgaW4gUERNQSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQgaW4gUERNQSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgdXNlciBjYW4gcmVhZCBVQVJUX0RBVCAoUlggaXMgaW4gYWN0aXZlKSB0byBjbGVhciBpdC4KKyAgICAgKiB8WzIxXSAgICB8SFdCVUZFSUYgIHxQRE1BIE1vZGUgQnVmZmVyIEVycm9yIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIFRYIG9yIFJYIEZJRk8gb3ZlcmZsb3dzIChUWE9WSUYgKFVBUlRfRklGT1NUUyBbMjRdKSBvciBSWE9WSUYgKFVBUlRfRklGT1NUU1swXSkgaXMgc2V0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEJVRkVSUklGIChVQVJUX0lOVFNUU1s1XSkgaXMgc2V0LCB0aGUgdHJhbnNmZXIgbWF5YmUgaXMgbm90IGNvcnJlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQlVGRVJSSUVOIChVQVJUX0lOVEVOIFs1XSkgaXMgZW5hYmxlZCwgdGhlIGJ1ZmZlciBlcnJvciBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGJ1ZmZlciBlcnJvciBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQgaW4gUERNQSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCdWZmZXIgZXJyb3IgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkIGluIFBETUEgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIHdoZW4gYm90aCBUWE9WSUYgKFVBUlRfRklGT1NUU1syNF1dKSBhbmQgUlhPVklGIChVQVJUX0ZJRk9TVFNbMF0pIGFyZSBjbGVhcmVkLgorICAgICAqIHxbMjJdICAgIHxUWEVORElGICAgfFRyYW5zbWl0dGVyIEVtcHR5IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gVFggRklGTyAoVUFSVF9EQVQpIGlzIGVtcHR5IGFuZCB0aGUgU1RPUCBiaXQgb2YgdGhlIGxhc3QgYnl0ZSBoYXMgYmVlbiB0cmFuc21pdHRlZCAoVFhFTVBUWUYgKFVBUlRfRklGT1NUU1syOF0pIGlzIHNldCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgVFhFTkRJRU4gKFVBUlRfSU5URU5bMjJdKSBpcyBlbmFibGVkLCB0aGUgVHJhbnNtaXR0ZXIgRW1wdHkgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB0cmFuc21pdHRlciBlbXB0eSBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0dGVyIGVtcHR5IGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBUWCBGSUZPIGlzIG5vdCBlbXB0eSBvciB0aGUgbGFzdCBieXRlIHRyYW5zbWlzc2lvbiBoYXMgbm90IGNvbXBsZXRlZC4KKyAgICAgKiB8WzI2XSAgICB8SFdSTFNJTlQgIHxQRE1BIE1vZGUgUmVjZWl2ZSBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIFJMU0lFTiAoVUFSVF9JTlRFTlsyXSkgYW5kIEhXUkxTSUYoVUFSVF9JTlRTVFNbMThdKSBhcmUgYm90aCBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUkxTIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgaW4gUERNQSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSTFMgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBpbiBQRE1BIG1vZGUuCisgICAgICogfFsyN10gICAgfEhXTU9ESU5UICB8UERNQSBNb2RlIE1PREVNIFN0YXR1cyBJbnRlcnJ1cHQgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIE1PREVNSUVOIChVQVJUX0lOVEVOWzNdKSBhbmQgSFdNT0RJRihVQVJUX0lOVFNUU1sxOV0pIGFyZSBib3RoIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBNb2RlbSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGluIFBETUEgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTW9kZW0gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBpbiBQRE1BIG1vZGUuCisgICAgICogfFsyOF0gICAgfEhXVE9JTlQgICB8UERNQSBNb2RlIFJYIFRpbWUtb3V0IEludGVycnVwdCBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgaWYgUlhUT0lFTiAoVUFSVF9JTlRFTls0XSkgYW5kIEhXVE9JRihVQVJUX0lOVFNUU1syMF0pIGFyZSBib3RoIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGluIFBETUEgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlggdGltZS1vdXQgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBpbiBQRE1BIG1vZGUuCisgICAgICogfFsyOV0gICAgfEhXQlVGRUlOVCB8UERNQSBNb2RlIEJ1ZmZlciBFcnJvciBJbnRlcnJ1cHQgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIEJVRkVSUklFTiAoVUFSVF9JTlRFTls1XSkgYW5kIEhXQlVGRUlGIChVQVJUX0lOVFNUU1syMV0pIGFyZSBib3RoIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBidWZmZXIgZXJyb3IgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBpbiBQRE1BIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJ1ZmZlciBlcnJvciBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGluIFBETUEgbW9kZS4KKyAgICAgKiB8WzMwXSAgICB8VFhFTkRJTlQgIHxUcmFuc21pdHRlciBFbXB0eSBJbnRlcnJ1cHQgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIFRYRU5ESUVOIChVQVJUX0lOVEVOWzIyXSkgYW5kIFRYRU5ESUYoVUFSVF9JTlRTVFNbMjJdKSBhcmUgYm90aCBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gVHJhbnNtaXR0ZXIgRW1wdHkgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXR0ZXIgRW1wdHkgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8WzMxXSAgICB8QUJSSU5UICAgIHxBdXRvLWJhdWQgUmF0ZSBJbnRlcnJ1cHQgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIEFCUklFTiAoVUFSVF9JTlRFTlsxOF0pIGFuZCBBQlJJRiAoVUFSVF9BTFRDVExbMTddKSBhcmUgYm90aCBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQXV0by1iYXVkIFJhdGUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIEF1dG8tYmF1ZCBSYXRlIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuCisgICAgICogQHZhciBVQVJUX1Q6OlRPVVQKKyAgICAgKiBPZmZzZXQ6IDB4MjAgIFVBUlQgVGltZS1vdXQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxUT0lDICAgICAgfFRpbWUtb3V0IEludGVycnVwdCBDb21wYXJhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHRpbWUtb3V0IGNvdW50ZXIgcmVzZXRzIGFuZCBzdGFydHMgY291bnRpbmcgKHRoZSBjb3VudGluZyBjbG9jayA9IGJhdWQgcmF0ZSkgd2hlbmV2ZXIgdGhlIFJYIEZJRk8gcmVjZWl2ZXMgYSBuZXcgZGF0YSB3b3JkIGlmIHRpbWUgb3V0IGNvdW50ZXIgaXMgZW5hYmxlZCBieSBzZXR0aW5nIFRPQ05URU4gKFVBUlRfSU5URU5bMTFdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPbmNlIHRoZSBjb250ZW50IG9mIHRpbWUtb3V0IGNvdW50ZXIgaXMgZXF1YWwgdG8gdGhhdCBvZiB0aW1lLW91dCBpbnRlcnJ1cHQgY29tcGFyYXRvciAoVE9JQyAoVUFSVF9UT1VUWzc6MF0pKSwgYSByZWNlaXZlciB0aW1lLW91dCBpbnRlcnJ1cHQgKFJYVE9JTlQoVUFSVF9JTlRTVFNbMTJdKSkgaXMgZ2VuZXJhdGVkIGlmIFJYVE9JRU4gKFVBUlRfSU5URU4gWzRdKSBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgbmV3IGluY29taW5nIGRhdGEgd29yZCBvciBSWCBGSUZPIGVtcHR5IHdpbGwgY2xlYXIgUlhUT0lGIChVQVJUX0lOVFNUU1s0XSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3JkZXIgdG8gYXZvaWQgcmVjZWl2ZXIgdGltZS1vdXQgaW50ZXJydXB0IGdlbmVyYXRpb24gaW1tZWRpYXRlbHkgZHVyaW5nIG9uZSBjaGFyYWN0ZXIgaXMgYmVpbmcgcmVjZWl2ZWQsIFRPSUMgdmFsdWUgc2hvdWxkIGJlIHNldCBiZXR3ZWVuIDQwIGFuZCAyNTUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U28sIGZvciBleGFtcGxlLCBpZiBUT0lDIGlzIHNldCB3aXRoIDQwLCB0aGUgdGltZS1vdXQgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhZnRlciBmb3VyIGNoYXJhY3RlcnMgYXJlIG5vdCByZWNlaXZlZCB3aGVuIDEgc3RvcCBiaXQgYW5kIG5vIHBhcml0eSBjaGVjayBpcyBzZXQgZm9yIFVBUlQgdHJhbnNmZXIuCisgICAgICogfFsxNTo4XSAgfERMWSAgICAgICB8VFggRGVsYXkgVGltZSBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCB0byBwcm9ncmFtbWluZyB0aGUgdHJhbnNmZXIgZGVsYXkgdGltZSBiZXR3ZWVuIHRoZSBsYXN0IHN0b3AgYml0IGFuZCBuZXh0IHN0YXJ0IGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdW5pdCBpcyBiaXQgdGltZS4KKyAgICAgKiBAdmFyIFVBUlRfVDo6QkFVRAorICAgICAqIE9mZnNldDogMHgyNCAgVUFSVCBCYXVkIFJhdGUgRGl2aWRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfEJSRCAgICAgICB8QmF1ZCBSYXRlIERpdmlkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZmllbGQgaW5kaWNhdGVzIHRoZSBiYXVkIHJhdGUgZGl2aWRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpbGVkIGlzIHVzZWQgaW4gYmF1ZCByYXRlIGNhbGN1bGF0aW9uLgorICAgICAqIHxbMjc6MjRdIHxFRElWTTEgICAgfEV4dHJhIERpdmlkZXIgZm9yIEJBVUQgUmF0ZSBNb2RlIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIGJhdWQgcmF0ZSBjYWxjdWxhdGlvbiBpbiBtb2RlIDEgYW5kIGhhcyBubyBlZmZlY3QgZm9yIGJhdWQgcmF0ZSBjYWxjdWxhdGlvbiBpbiBtb2RlIDAgYW5kIG1vZGUgMi4KKyAgICAgKiB8WzI4XSAgICB8QkFVRE0wICAgIHxCQVVEIFJhdGUgTW9kZSBTZWxlY3Rpb24gQml0IDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBiYXVkIHJhdGUgbW9kZSBzZWxlY3Rpb24gYml0IDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVQVJUIHByb3ZpZGVzIHRocmVlIGJhdWQgcmF0ZSBjYWxjdWxhdGlvbiBtb2Rlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBjb21iaW5lcyB3aXRoIEJBVURNMSAoVUFSVF9CQVVEWzI5XSkgdG8gc2VsZWN0IGJhdWQgcmF0ZSBjYWxjdWxhdGlvbiBtb2RlLgorICAgICAqIHxbMjldICAgIHxCQVVETTEgICAgfEJBVUQgUmF0ZSBNb2RlIFNlbGVjdGlvbiBCaXQgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGJhdWQgcmF0ZSBtb2RlIHNlbGVjdGlvbiBiaXQgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVQVJUIHByb3ZpZGVzIHRocmVlIGJhdWQgcmF0ZSBjYWxjdWxhdGlvbiBtb2Rlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBjb21iaW5lcyB3aXRoIEJBVURNMCAoVUFSVF9CQVVEWzI4XSkgdG8gc2VsZWN0IGJhdWQgcmF0ZSBjYWxjdWxhdGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIElyREEgbW9kZSBtdXN0IGJlIG9wZXJhdGVkIGluIG1vZGUgMC4KKyAgICAgKiBAdmFyIFVBUlRfVDo6SVJEQQorICAgICAqIE9mZnNldDogMHgyOCAgVUFSVCBJckRBIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxUWEVOICAgICAgfElyREEgUmVjZWl2ZXIvVHJhbnNtaXR0ZXIgU2VsZWN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSXJEQSBUcmFuc21pdHRlciBEaXNhYmxlZCBhbmQgUmVjZWl2ZXIgRW5hYmxlZC4gKERlZmF1bHQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElyREEgVHJhbnNtaXR0ZXIgRW5hYmxlZCBhbmQgUmVjZWl2ZXIgRGlzYWJsZWQuCisgICAgICogfFs1XSAgICAgfFRYSU5WICAgICB8SXJEQSBJbnZlcnNlIFRyYW5zbWl0dGluZyBPdXRwdXQgU2lnbmFsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vbmUgaW52ZXJzZSB0cmFuc21pdHRpbmcgc2lnbmFsLiAoRGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludmVyc2UgdHJhbnNtaXR0aW5nIG91dHB1dCBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEJlZm9yZSBzZXR0aW5nIHRoaXMgYml0LCBUWFJYRElTIChVQVJUX0ZVTkNTRUxbM10pIHNob3VsZCBiZSBzZXQgdGhlbiB3YWl0ZWQgZm9yIFRYUlhBQ1QgKFVBUlRfRklGT1NUU1szMV0pIGlzIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgY29uZmlndXJhdGlvbiBpcyBkb25lLCBjbGVhcmVkIFRYUlhESVMgKFVBUlRfRlVOQ1NFTFszXSkgdG8gYWN0aXZhdGUgVUFSVCBjb250cm9sbGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyB2YWxpZCB3aGVuIEZVTkNTRUwgKFVBUlRfRlVOQ1NFTFsxOjBdKSBpcyBzZWxlY3QgSXJEQSBmdW5jdGlvbi4KKyAgICAgKiB8WzZdICAgICB8UlhJTlYgICAgIHxJckRBIEludmVyc2UgUmVjZWl2ZSBJbnB1dCBTaWduYWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm9uZSBpbnZlcnNlIHJlY2VpdmluZyBpbnB1dCBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludmVyc2UgcmVjZWl2aW5nIGlucHV0IHNpZ25hbC4gKERlZmF1bHQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEJlZm9yZSBzZXR0aW5nIHRoaXMgYml0LCBUWFJYRElTIChVQVJUX0ZVTkNTRUxbM10pIHNob3VsZCBiZSBzZXQgdGhlbiB3YWl0ZWQgZm9yIFRYUlhBQ1QgKFVBUlRfRklGT1NUU1szMV0pIGlzIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgY29uZmlndXJhdGlvbiBpcyBkb25lLCBjbGVhcmVkIFRYUlhESVMgKFVBUlRfRlVOQ1NFTFszXSkgdG8gYWN0aXZhdGUgVUFSVCBjb250cm9sbGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyB2YWxpZCB3aGVuIEZVTkNTRUwgKFVBUlRfRlVOQ1NFTFsxOjBdKSBpcyBzZWxlY3QgSXJEQSBmdW5jdGlvbi4KKyAgICAgKiBAdmFyIFVBUlRfVDo6QUxUQ1RMCisgICAgICogT2Zmc2V0OiAweDJDICBVQVJUIEFsdGVybmF0ZSBDb250cm9sL1N0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfEJSS0ZMICAgICB8VUFSVCBMSU4gQnJlYWsgRmllbGQgTGVuZ3RoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgYSA0LWJpdCBMSU4gVFggYnJlYWsgZmllbGQgY291bnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYnJlYWsgZmllbGQgbGVuZ3RoIGlzIEJSS0ZMICsgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQWNjb3JkaW5nIHRvIExJTiBzcGVjLCB0aGUgcmVzZXQgdmFsdWUgaXMgMHhDIChicmVhayBmaWVsZCBsZW5ndGggPSAxMykuCisgICAgICogfFs2XSAgICAgfExJTlJYRU4gICB8TElOIFJYIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTElOIFJYIG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExJTiBSWCBtb2RlIEVuYWJsZWQuCisgICAgICogfFs3XSAgICAgfExJTlRYRU4gICB8TElOIFRYIEJyZWFrIE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMSU4gVFggQnJlYWsgbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTElOIFRYIEJyZWFrIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIFRYIGJyZWFrIGZpZWxkIHRyYW5zZmVyIG9wZXJhdGlvbiBmaW5pc2hlZCwgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkuCisgICAgICogfFs4XSAgICAgfFJTNDg1Tk1NICB8UlMtNDg1IE5vcm1hbCBNdWx0aS1kcm9wIE9wZXJhdGlvbiBNb2RlIChOTU0pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJTLTQ4NSBOb3JtYWwgTXVsdGktZHJvcCBPcGVyYXRpb24gbW9kZSAoTk1NKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlMtNDg1IE5vcm1hbCBNdWx0aS1kcm9wIE9wZXJhdGlvbiBtb2RlIChOTU0pIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgY2Fubm90IGJlIGFjdGl2ZSB3aXRoIFJTLTQ4NV9BQUQgb3BlcmF0aW9uIG1vZGUuCisgICAgICogfFs5XSAgICAgfFJTNDg1QUFEICB8UlMtNDg1IEF1dG8gQWRkcmVzcyBEZXRlY3Rpb24gT3BlcmF0aW9uIE1vZGUgKEFBRCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlMtNDg1IEF1dG8gQWRkcmVzcyBEZXRlY3Rpb24gT3BlcmF0aW9uIG1vZGUgKEFBRCkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJTLTQ4NSBBdXRvIEFkZHJlc3MgRGV0ZWN0aW9uIE9wZXJhdGlvbiBtb2RlIChBQUQpIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgY2Fubm90IGJlIGFjdGl2ZSB3aXRoIFJTLTQ4NV9OTU0gb3BlcmF0aW9uIG1vZGUuCisgICAgICogfFsxMF0gICAgfFJTNDg1QVVEICB8UlMtNDg1IEF1dG8gRGlyZWN0aW9uIEZ1bmN0aW9uIChBVUQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJTLTQ4NSBBdXRvIERpcmVjdGlvbiBPcGVyYXRpb24gZnVuY3Rpb24gKEFVRCkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJTLTQ4NSBBdXRvIERpcmVjdGlvbiBPcGVyYXRpb24gZnVuY3Rpb24gKEFVRCkgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJdCBjYW4gYmUgYWN0aXZlIHdpdGggUlMtNDg1X0FBRCBvciBSUy00ODVfTk1NIG9wZXJhdGlvbiBtb2RlLgorICAgICAqIHxbMTVdICAgIHxBRERSREVOICAgfFJTLTQ4NSBBZGRyZXNzIERldGVjdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBlbmFibGUgUlMtNDg1IEFkZHJlc3MgRGV0ZWN0aW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFkZHJlc3MgZGV0ZWN0aW9uIG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFkZHJlc3MgZGV0ZWN0aW9uIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB1c2VkIGZvciBSUy00ODUgYW55IG9wZXJhdGlvbiBtb2RlLgorICAgICAqIHxbMTddICAgIHxBQlJJRiAgICAgfEF1dG8tYmF1ZCBSYXRlIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gYXV0by1iYXVkIHJhdGUgZGV0ZWN0aW9uIGZ1bmN0aW9uIGZpbmlzaGVkIG9yIHRoZSBhdXRvLWJhdWQgcmF0ZSBjb3VudGVyIHdhcyBvdmVyZmxvdyBhbmQgaWYgQUJSSUVOKFVBUlRfSU5URU4gWzE4XSkgaXMgc2V0IHRoZW4gdGhlIGF1dG8tYmF1ZCByYXRlIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gYXV0by1iYXVkIHJhdGUgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBdXRvLWJhdWQgcmF0ZSBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LCBidXQgaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIEFCUkRUT0lGIChVQVJUX0ZJRk9TVFNbMl0pIGFuZCBBQlJESUYoVUFSVF9GSUZPU1RTWzFdKS4KKyAgICAgKiB8WzE4XSAgICB8QUJSREVOICAgIHxBdXRvLWJhdWQgUmF0ZSBEZXRlY3QgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvLWJhdWQgcmF0ZSBkZXRlY3QgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF1dG8tYmF1ZCByYXRlIGRldGVjdCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUgOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgYXV0by1iYXVkIGRldGVjdGlvbiBpcyBmaW5pc2hlZC4KKyAgICAgKiB8WzIwOjE5XSB8QUJSREJJVFMgIHxBdXRvLWJhdWQgUmF0ZSBEZXRlY3QgQml0IExlbmd0aAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gMS1iaXQgdGltZSBmcm9tIFN0YXJ0IGJpdCB0byB0aGUgMXN0IHJpc2luZyBlZGdlLiBUaGUgaW5wdXQgcGF0dGVybiBzaGFsbCBiZSAweDAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gMi1iaXQgdGltZSBmcm9tIFN0YXJ0IGJpdCB0byB0aGUgMXN0IHJpc2luZyBlZGdlLiBUaGUgaW5wdXQgcGF0dGVybiBzaGFsbCBiZSAweDAyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gNC1iaXQgdGltZSBmcm9tIFN0YXJ0IGJpdCB0byB0aGUgMXN0IHJpc2luZyBlZGdlLiBUaGUgaW5wdXQgcGF0dGVybiBzaGFsbCBiZSAweDA4LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gOC1iaXQgdGltZSBmcm9tIFN0YXJ0IGJpdCB0byB0aGUgMXN0IHJpc2luZyBlZGdlLiBUaGUgaW5wdXQgcGF0dGVybiBzaGFsbCBiZSAweDgwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUgOiBUaGUgY2FsY3VsYXRpb24gb2YgYml0IG51bWJlciBpbmNsdWRlcyB0aGUgU1RBUlQgYml0LgorICAgICAqIHxbMzE6MjRdIHxBRERSTVYgICAgfEFkZHJlc3MgTWF0Y2ggVmFsdWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBSUy00ODUgYWRkcmVzcyBtYXRjaCB2YWx1ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBmaWVsZCBpcyB1c2VkIGZvciBSUy00ODUgYXV0byBhZGRyZXNzIGRldGVjdGlvbiBtb2RlLgorICAgICAqIEB2YXIgVUFSVF9UOjpGVU5DU0VMCisgICAgICogT2Zmc2V0OiAweDMwICBVQVJUIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfEZVTkNTRUwgICB8RnVuY3Rpb24gU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBVQVJUIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gTElOIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gSXJEQSBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJTLTQ4NSBmdW5jdGlvbi4KKyAgICAgKiB8WzNdICAgICB8VFhSWERJUyAgIHxUWCBhbmQgUlggRGlzYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXR0aW5nIHRoaXMgYml0IGNhbiBkaXNhYmxlIFRYIGFuZCBSWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVFggYW5kIFJYIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRYIGFuZCBSWCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgVFggYW5kIFJYIHdpbGwgbm90IGRpc2FibGUgaW1tZWRpYXRlbHkgd2hlbiB0aGlzIGJpdCBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFRYIGFuZCBSWCBjb21wbGV0ZSBjdXJyZW50IHRhc2sgYmVmb3JlIGRpc2FibGUgVFggYW5kIFJYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gVFggYW5kIFJYIGRpc2FibGUsIHRoZSBUWFJYQUNUIChVQVJUX0ZJRk9TVFNbMzFdKSBpcyBjbGVhcmVkLgorICAgICAqIEB2YXIgVUFSVF9UOjpMSU5DVEwKKyAgICAgKiBPZmZzZXQ6IDB4MzQgIFVBUlQgTElOIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTTFZFTiAgICAgfExJTiBTbGF2ZSBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTElOIHNsYXZlIG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExJTiBzbGF2ZSBtb2RlIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFNMVkhERU4gICB8TElOIFNsYXZlIEhlYWRlciBEZXRlY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMSU4gc2xhdmUgaGVhZGVyIGRldGVjdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTElOIHNsYXZlIGhlYWRlciBkZXRlY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgb25seSB2YWxpZCB3aGVuIGluIExJTiBzbGF2ZSBtb2RlIChTTFZFTiAoVUFSVF9MSU5DVExbMF0pID0gMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIExJTiBmdW5jdGlvbiBtb2RlLCB3aGVuIGRldGVjdCBoZWFkZXIgZmllbGQgKGJyZWFrICsgc3luYyArIGZyYW1lIElEKSwgU0xWSERFVEYgKFVBUlRfTElOU1RTIFswXSkgZmxhZyB3aWxsIGJlIGFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBMSU5JRU4gKFVBUlRfSU5URU5bOF0pID0gMSwgYW4gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHxbMl0gICAgIHxTTFZBUkVOICAgfExJTiBTbGF2ZSBBdXRvbWF0aWMgUmVzeW5jaHJvbml6YXRpb24gTW9kZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExJTiBhdXRvbWF0aWMgcmVzeW5jaHJvbml6YXRpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExJTiBhdXRvbWF0aWMgcmVzeW5jaHJvbml6YXRpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgb25seSB2YWxpZCB3aGVuIGluIExJTiBzbGF2ZSBtb2RlIChTTFZFTiAoVUFSVF9MSU5DVExbMF0pID0gMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFdoZW4gb3BlcmF0aW9uIGluIEF1dG9tYXRpYyBSZXN5bmNocm9uaXphdGlvbiBtb2RlLCB0aGUgYmF1ZCByYXRlIHNldHRpbmcgbXVzdCBiZSBtb2RlMiAoQkFVRE0xIChVQVJUX0JBVUQgWzI5XSkgYW5kIEJBVURNMCAoVUFSVF9CQVVEIFsyOF0pIG11c3QgYmUgMSkuCisgICAgICogfFszXSAgICAgfFNMVkRVRU4gICB8TElOIFNsYXZlIERpdmlkZXIgVXBkYXRlIE1ldGhvZCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlRfQkFVRCB1cGRhdGVkIGlzIHdyaXR0ZW4gYnkgc29mdHdhcmUgKGlmIG5vIGF1dG9tYXRpYyByZXN5bmNocm9uaXphdGlvbiB1cGRhdGUgb2NjdXJzIGF0IHRoZSBzYW1lIHRpbWUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUX0JBVUQgaXMgdXBkYXRlZCBhdCB0aGUgbmV4dCByZWNlaXZlZCBjaGFyYWN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIG11c3Qgc2V0IHRoZSBiaXQgYmVmb3JlIGNoZWNrc3VtIHJlY2VwdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgb25seSB2YWxpZCB3aGVuIGluIExJTiBzbGF2ZSBtb2RlIChTTFZFTiAoVUFSVF9MSU5DVExbMF0pID0gMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IHVzZWQgZm9yIExJTiBTbGF2ZSBBdXRvbWF0aWMgUmVzeW5jaHJvbml6YXRpb24gbW9kZS4gKGZvciBOb24tQXV0b21hdGljIFJlc3luY2hyb25pemF0aW9uIG1vZGUsIHRoaXMgYml0IHNob3VsZCBiZSBrZXB0IGNsZWFyZWQpCisgICAgICogfFs0XSAgICAgfE1VVEUgICAgICB8TElOIE11dGUgTW9kZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExJTiBtdXRlIG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExJTiBtdXRlIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgZXhpdCBmcm9tIG11dGUgbW9kZSBjb25kaXRpb24gYW5kIGVhY2ggY29udHJvbCBhbmQgaW50ZXJhY3Rpb25zIG9mIHRoaXMgZmllbGQgYXJlIGV4cGxhaW5lZCBpbiA2LjE2LjUuMTAgKExJTiBzbGF2ZSBtb2RlKS4KKyAgICAgKiB8WzhdICAgICB8U0VOREggICAgIHxMSU4gVFggU2VuZCBIZWFkZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBMSU4gVFggaGVhZGVyIGNhbiBiZSBicmVhayBmaWVsZCBvciBicmVhayBhbmQgc3luYyBmaWVsZCBvciBicmVhaywgc3luYyBhbmQgZnJhbWUgSUQgZmllbGQsIGl0IGlzIGRlcGVuZCBvbiBzZXR0aW5nIEhTRUwgKFVBUlRfTElOQ1RMWzIzOjIyXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNlbmQgTElOIFRYIGhlYWRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2VuZCBMSU4gVFggaGVhZGVyIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIHNoYWRvdyBiaXQgb2YgTElOVFhFTiAoVUFSVF9BTFRDVEwgWzddKTsgdXNlciBjYW4gcmVhZC93cml0ZSBpdCBieSBzZXR0aW5nIExJTlRYRU4gKFVBUlRfQUxUQ1RMIFs3XSkgb3IgU0VOREggKFVBUlRfTElOQ1RMIFs4XSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFdoZW4gdHJhbnNtaXR0ZXIgaGVhZGVyIGZpZWxkIChpdCBtYXkgYmUgYnJlYWsgb3IgYnJlYWsgKyBzeW5jIG9yIGJyZWFrICsgc3luYyArIGZyYW1lIElEIHNlbGVjdGVkIGJ5IEhTRUwgKFVBUlRfTElOQ1RMWzIzOjIyXSkgZmllbGQpIHRyYW5zZmVyIG9wZXJhdGlvbiBmaW5pc2hlZCwgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkuCisgICAgICogfFs5XSAgICAgfElEUEVOICAgICB8TElOIElEIFBhcml0eSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExJTiBmcmFtZSBJRCBwYXJpdHkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExJTiBmcmFtZSBJRCBwYXJpdHkgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgY2FuIGJlIHVzZWQgZm9yIExJTiBtYXN0ZXIgdG8gc2VuZGluZyBoZWFkZXIgZmllbGQgKFNFTkRIIChVQVJUX0xJTkNUTFs4XSkpID0gMSBhbmQgSFNFTCAoVUFSVF9MSU5DVExbMjM6MjJdKSA9IDEwIG9yIGJlIHVzZWQgZm9yIGVuYWJsZSBMSU4gc2xhdmUgcmVjZWl2ZWQgZnJhbWUgSUQgcGFyaXR5IGNoZWNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBvcGVyYXRpb24gaGVhZGVyIHRyYW5zbWl0dGVyIGlzIGluIEhTRUwgKFVBUlRfTElOQ1RMWzIzOjIyXSkgPSAxMC4KKyAgICAgKiB8WzEwXSAgICB8QlJLREVURU4gIHxMSU4gQnJlYWsgRGV0ZWN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGRldGVjdCBjb25zZWN1dGl2ZSBkb21pbmFudCBncmVhdGVyIHRoYW4gMTEgYml0cywgYW5kIGFyZSBmb2xsb3dlZCBieSBhIGRlbGltaXRlciBjaGFyYWN0ZXIsIHRoZSBCUktERVRGIChVQVJUX0xJTlNUU1s4XSkgZmxhZyBpcyBzZXQgYXQgdGhlIGVuZCBvZiBicmVhayBmaWVsZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgTElOSUVOIChVQVJUX0lOVEVOIFs4XSk9MSwgYW4gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMSU4gYnJlYWsgZGV0ZWN0aW9uIERpc2FibGVkIC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTElOIGJyZWFrIGRldGVjdGlvbiBFbmFibGVkLgorICAgICAqIHxbMTFdICAgIHxMSU5SWE9GRiAgfExJTiBSZWNlaXZlciBEaXNhYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSByZWNlaXZlciBpcyBlbmFibGVkIChSWE9GRiAoVUFSVF9MSU5DVExbMTFdICkgPSAwKSwgYWxsIHJlY2VpdmVkIGJ5dGUgZGF0YSB3aWxsIGJlIGFjY2VwdGVkIGFuZCBzdG9yZWQgaW4gdGhlIFJYIEZJRk8sIGFuZCBpZiB0aGUgcmVjZWl2ZXIgaXMgZGlzYWJsZWQgKFJYT0ZGIChVQVJUX0xJTkNUTFsxMV0gPSAxKSwgYWxsIHJlY2VpdmVkIGJ5dGUgZGF0YSB3aWxsIGJlIGlnbm9yZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTElOIHJlY2VpdmVyIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExJTiByZWNlaXZlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBvbmx5IHZhbGlkIHdoZW4gb3BlcmF0aW5nIGluIExJTiBmdW5jdGlvbiBtb2RlIChGVU5DU0VMIChVQVJUX0ZVTkNTRUxbMTowXSkgPSAwMSkuCisgICAgICogfFsxMl0gICAgfEJJVEVSUkVOICB8Qml0IEVycm9yIERldGVjdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJpdCBlcnJvciBkZXRlY3Rpb24gZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJpdCBlcnJvciBkZXRlY3Rpb24gZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBMSU4gZnVuY3Rpb24gbW9kZSwgd2hlbiBvY2N1ciBiaXQgZXJyb3IsIHRoZSBCSVRFRiAoVUFSVF9MSU5TVFNbOV0pIGZsYWcgd2lsbCBiZSBhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgTElOSUVOIChVQVJUX0lOVEVOWzhdKSA9IDEsIGFuIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgICAgKiB8WzE5OjE2XSB8QlJLRkwgICAgIHxMSU4gQnJlYWsgRmllbGQgTGVuZ3RoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgYSA0LWJpdCBMSU4gVFggYnJlYWsgZmllbGQgY291bnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoZXNlIHJlZ2lzdGVycyBhcmUgc2hhZG93IHJlZ2lzdGVycyBvZiBCUktGTCAoVUFSVF9BTFRDVExbMzowXSksIFVzZXIgY2FuIHJlYWQvd3JpdGUgaXQgYnkgc2V0dGluZyBCUktGTCAoVUFSVF9BTFRDVExbMzowXSkgb3IgQlJLRkwgKFVBUlRfTElOQ1RMWzE5OjE2XSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYnJlYWsgZmllbGQgbGVuZ3RoIGlzIEJSS0ZMICsgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogQWNjb3JkaW5nIHRvIExJTiBzcGVjLCB0aGUgcmVzZXQgdmFsdWUgaXMgMTIgKGJyZWFrIGZpZWxkIGxlbmd0aCA9IDEzKS4KKyAgICAgKiB8WzIxOjIwXSB8QlNMICAgICAgIHxMSU4gQnJlYWsvU3luYyBEZWxpbWl0ZXIgTGVuZ3RoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBUaGUgTElOIGJyZWFrL3N5bmMgZGVsaW1pdGVyIGxlbmd0aCBpcyAxLWJpdCB0aW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gVGhlIExJTiBicmVhay9zeW5jIGRlbGltaXRlciBsZW5ndGggaXMgMi1iaXQgdGltZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFRoZSBMSU4gYnJlYWsvc3luYyBkZWxpbWl0ZXIgbGVuZ3RoIGlzIDMtYml0IHRpbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBUaGUgTElOIGJyZWFrL3N5bmMgZGVsaW1pdGVyIGxlbmd0aCBpcyA0LWJpdCB0aW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHVzZWQgZm9yIExJTiBtYXN0ZXIgdG8gc2VuZGluZyBoZWFkZXIgZmllbGQuCisgICAgICogfFsyMzoyMl0gfEhTRUwgICAgICB8TElOIEhlYWRlciBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFRoZSBMSU4gaGVhZGVyIGluY2x1ZGVzIGJyZWFrIGZpZWxkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gVGhlIExJTiBoZWFkZXIgaW5jbHVkZXMgYnJlYWsgZmllbGQgYW5kIHN5bmMgZmllbGQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBUaGUgTElOIGhlYWRlciBpbmNsdWRlcyBicmVhayBmaWVsZCwgc3luYyBmaWVsZCBhbmQgZnJhbWUgSUQgZmllbGQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB1c2VkIHRvIG1hc3RlciBtb2RlIGZvciBMSU4gdG8gc2VuZCBoZWFkZXIgZmllbGQgKFNFTkRIIChVQVJUX0xJTkNUTCBbOF0pID0gMSkgb3IgdXNlZCB0byBzbGF2ZSB0byBpbmRpY2F0ZXMgZXhpdCBmcm9tIG11dGUgbW9kZSBjb25kaXRpb24gKE1VVEUgKFVBUlRfTElOQ1RMWzRdID0gMSkuCisgICAgICogfFszMToyNF0gfFBJRCAgICAgICB8TElOIFBJRCBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjb250YWlucyB0aGUgTElOIGZyYW1lIElEIHZhbHVlIHdoZW4gaW4gTElOIGZ1bmN0aW9uIG1vZGUsIHRoZSBmcmFtZSBJRCBwYXJpdHkgY2FuIGJlIGdlbmVyYXRlZCBieSBzb2Z0d2FyZSBvciBoYXJkd2FyZSBkZXBlbmRzIG9uIElEUEVOIChVQVJUX0xJTkNUTFs5XSkgPSAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBwYXJpdHkgZ2VuZXJhdGVkIGJ5IGhhcmR3YXJlLCB1c2VyIGZpbGwgSUQwfklENSAoUElEIFsyOToyNF0gKSwgaGFyZHdhcmUgd2lsbCBjYWxjdWxhdGUgUDAgKFBJRFszMF0pIGFuZCBQMSAoUElEWzMxXSksIG90aGVyd2lzZSB1c2VyIG11c3QgZmlsbGVkIGZyYW1lIElEIGFuZCBwYXJpdHkgaW4gdGhpcyBmaWVsZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVXNlciBjYW4gZmlsbCBhbnkgOC1iaXQgdmFsdWUgdG8gdGhpcyBmaWVsZCBhbmQgdGhlIGJpdCAyNCBpbmRpY2F0ZXMgSUQwIChMU0IgZmlyc3QpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGZpZWxkIGNhbiBiZSB1c2VkIGZvciBMSU4gbWFzdGVyIG1vZGUgb3Igc2xhdmUgbW9kZS4KKyAgICAgKiBAdmFyIFVBUlRfVDo6TElOU1RTCisgICAgICogT2Zmc2V0OiAweDM4ICBVQVJUIExJTiBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTTFZIREVURiAgfExJTiBTbGF2ZSBIZWFkZXIgRGV0ZWN0aW9uIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBhIExJTiBoZWFkZXIgaXMgZGV0ZWN0ZWQgaW4gTElOIHNsYXZlIG1vZGUgYW5kIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMSU4gaGVhZGVyIG5vdCBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTElOIGhlYWRlciBkZXRlY3RlZCAoYnJlYWsgKyBzeW5jICsgZnJhbWUgSUQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgd2hlbiBpbiBMSU4gc2xhdmUgbW9kZSAoU0xWRU4gKFVBUlRfTElOQ1RMIFswXSkgPSAxKSBhbmQgZW5hYmxlIExJTiBzbGF2ZSBoZWFkZXIgZGV0ZWN0aW9uIGZ1bmN0aW9uIChTTFZIREVOIChVQVJUX0xJTkNUTCBbMV0pKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogV2hlbiBlbmFibGUgSUQgcGFyaXR5IGNoZWNrIElEUEVOIChVQVJUX0xJTkNUTCBbOV0pLCBpZiBoYXJkd2FyZSBkZXRlY3QgY29tcGxldGUgaGVhZGVyIChicmVhayArIHN5bmMgKyBmcmFtZSBJRCksIHRoZSBTTFZIREVURiB3aWxsIGJlIHNldCB3aGV0aGVyIHRoZSBmcmFtZSBJRCBjb3JyZWN0IG9yIG5vdC4KKyAgICAgKiB8WzFdICAgICB8U0xWSEVGICAgIHxMSU4gU2xhdmUgSGVhZGVyIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBhIExJTiBoZWFkZXIgZXJyb3IgaXMgZGV0ZWN0ZWQgaW4gTElOIHNsYXZlIG1vZGUgYW5kIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGhlYWRlciBlcnJvcnMgaW5jbHVkZSBicmVhayBkZWxpbWl0ZXIgaXMgdG9vIHNob3J0IChsZXNzIHRoYW4gMC41IGJpdCB0aW1lKSwgZnJhbWUgZXJyb3IgaW4gc3luYyBmaWVsZCBvciBJZGVudGlmaWVyIGZpZWxkLCBzeW5jIGZpZWxkIGRhdGEgaXMgbm90IDB4NTUgaW4gTm9uLUF1dG9tYXRpYyBSZXN5bmNocm9uaXphdGlvbiBtb2RlLCBzeW5jIGZpZWxkIGRldmlhdGlvbiBlcnJvciB3aXRoIEF1dG9tYXRpYyBSZXN5bmNocm9uaXphdGlvbiBtb2RlLCBzeW5jIGZpZWxkIG1lYXN1cmUgdGltZS1vdXQgd2l0aCBBdXRvbWF0aWMgUmVzeW5jaHJvbml6YXRpb24gbW9kZSBhbmQgTElOIGhlYWRlciByZWNlcHRpb24gdGltZS1vdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExJTiBoZWFkZXIgZXJyb3Igbm90IGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMSU4gaGVhZGVyIGVycm9yIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgd2hlbiBVQVJUIGlzIG9wZXJhdGVkIGluIExJTiBzbGF2ZSBtb2RlIChTTFZFTiAoVUFSVF9MSU5DVEwgWzBdKSA9IDEpIGFuZCBlbmFibGVzIExJTiBzbGF2ZSBoZWFkZXIgZGV0ZWN0aW9uIGZ1bmN0aW9uIChTTFZIREVOIChVQVJUX0xJTkNUTCBbMV0pKS4KKyAgICAgKiB8WzJdICAgICB8U0xWSURQRUYgIHxMSU4gU2xhdmUgSUQgUGFyaXR5IEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiByZWNlaXB0ZWQgZnJhbWUgSUQgcGFyaXR5IGlzIG5vdCBjb3JyZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpcHRlZCBmcmFtZSBJRCBwYXJpdHkgaXMgbm90IGNvcnJlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgb25seSB2YWxpZCB3aGVuIGluIExJTiBzbGF2ZSBtb2RlIChTTFZFTiAoVUFSVF9MSU5DVEwgWzBdKSA9IDEpIGFuZCBlbmFibGUgTElOIGZyYW1lIElEIHBhcml0eSBjaGVjayBmdW5jdGlvbiBJRFBFTiAoVUFSVF9MSU5DVEwgWzldKS4KKyAgICAgKiB8WzNdICAgICB8U0xWU1lOQ0YgIHxMSU4gU2xhdmUgU3luYyBGaWVsZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IHRoZSBMSU4gc3luYyBmaWVsZCBpcyBiZWluZyBhbmFseXplZCBpbiBBdXRvbWF0aWMgUmVzeW5jaHJvbml6YXRpb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSByZWNlaXZlciBoZWFkZXIgaGF2ZSBzb21lIGVycm9yIGJlZW4gZGV0ZWN0LCB1c2VyIG11c3QgcmVzZXQgdGhlIGludGVybmFsIGNpcmN1aXQgdG8gcmUtc2VhcmNoIG5ldyBmcmFtZSBoZWFkZXIgYnkgd3JpdGluZyAxIHRvIHRoaXMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgbm90IGF0IExJTiBzeW5jIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgYXQgTElOIHN5bmMgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgd2hlbiBpbiBMSU4gU2xhdmUgbW9kZSAoU0xWRU4oVUFSVF9MSU5DVExbMF0pID0gMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogV2hlbiB3cml0aW5nIDEgdG8gaXQsIGhhcmR3YXJlIHdpbGwgcmVsb2FkIHRoZSBpbml0aWFsIGJhdWQgcmF0ZSBhbmQgcmUtc2VhcmNoIGEgbmV3IGZyYW1lIGhlYWRlci4KKyAgICAgKiB8WzhdICAgICB8QlJLREVURiAgIHxMSU4gQnJlYWsgRGV0ZWN0aW9uIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBhIGJyZWFrIGlzIGRldGVjdGVkIGFuZCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdCB0aHJvdWdoIHNvZnR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMSU4gYnJlYWsgbm90IGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMSU4gYnJlYWsgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgb25seSB2YWxpZCB3aGVuIExJTiBicmVhayBkZXRlY3Rpb24gZnVuY3Rpb24gaXMgZW5hYmxlZCAoQlJLREVURU4gKFVBUlRfTElOQ1RMWzEwXSkgPSAxKS4KKyAgICAgKiB8WzldICAgICB8QklURUYgICAgIHxCaXQgRXJyb3IgRGV0ZWN0IFN0YXR1cyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QXQgVFggdHJhbnNmZXIgc3RhdGUsIGhhcmR3YXJlIHdpbGwgbW9uaXRvciB0aGUgYnVzIHN0YXRlLCBpZiB0aGUgaW5wdXQgcGluIChVQVJUX1JYRCkgc3RhdGUgbm90IGVxdWFscyB0byB0aGUgb3V0cHV0IHBpbiAoVUFSVF9UWEQpIHN0YXRlLCBCSVRFRiAoVUFSVF9MSU5TVFNbOV0pIHdpbGwgYmUgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gb2NjdXIgYml0IGVycm9yLCBpZiB0aGUgTElOSUVOIChVQVJUX0lOVEVOWzhdKSA9IDEsIGFuIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQml0IGVycm9yIG5vdCBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQml0IGVycm9yIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgd2hlbiBlbmFibGUgYml0IGVycm9yIGRldGVjdGlvbiBmdW5jdGlvbiAoQklURVJSRU4gKFVBUlRfTElOQ1RMIFsxMl0pID0gMSkuCisgICAgICogQHZhciBVQVJUX1Q6OkJSQ09NUAorICAgICAqIE9mZnNldDogMHgzQyAgVUFSVCBCYXVkIFJhdGUgQ29tcGVuc2F0aW9uIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzg6MF0gICB8QlJDT01QICAgIHxCYXVkIFJhdGUgQ29tcGVuc2F0aW9uIFBhdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIDktYml0cyBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIHJlbGF0aXZlIGJpdCBpcyBjb21wZW5zYXRlZCBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlJDT01QWzc6MF0gaXMgdXNlZCB0byBkZWZpbmUgdGhlIGNvbXBlbnNhdGlvbiBvZiBVQVJUX0RBVFs3OjBdIGFuZCBCUkNPTVBbOF0gaXMgdXNlZCB0byBkZWZpbmUgdGhlIHBhcml0eSBiaXQuCisgICAgICogfFszMV0gICAgfEJSQ09NUERFQyB8QmF1ZCBSYXRlIENvbXBlbnNhdGlvbiBEZWNyZWFzZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQb3NpdGl2ZSAoaW5jcmVhc2Ugb25lIG1vZHVsZSBjbG9jaykgY29tcGVuc2F0aW9uIGZvciBlYWNoIGNvbXBlbnNhdGVkIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTmVnYXRpdmUgKGRlY3JlYXNlIG9uZSBtb2R1bGUgY2xvY2spIGNvbXBlbnNhdGlvbiBmb3IgZWFjaCBjb21wZW5zYXRlZCBiaXQuCisgICAgICogQHZhciBVQVJUX1Q6OldLQ1RMCisgICAgICogT2Zmc2V0OiAweDQwICBVQVJUIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdLQ1RTRU4gICB8bkNUUyBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gbkNUUyBXYWtlLXVwIHN5c3RlbSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gbkNUUyBXYWtlLXVwIHN5c3RlbSBmdW5jdGlvbiBFbmFibGVkLCB3aGVuIHRoZSBzeXN0ZW0gaXMgaW4gUG93ZXItZG93biBtb2RlLCBhbiBleHRlcm5hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxuQ1RTIGNoYW5nZSB3aWxsIHdha2UtdXAgc3lzdGVtIGZyb20gUG93ZXItZG93biBtb2RlLgorICAgICAqIHxbMV0gICAgIHxXS0RBVEVOICAgfEluY29taW5nIERhdGEgV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluY29taW5nIGRhdGEgd2FrZS11cCBzeXN0ZW0gZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluY29taW5nIGRhdGEgd2FrZS11cCBzeXN0ZW0gZnVuY3Rpb24gRW5hYmxlZCwgd2hlbiB0aGUgc3lzdGVtIGlzIGluIFBvd2VyLWRvd24gbW9kZSwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8aW5jb21pbmcgZGF0YSB3aWxsIHdha2UtdXAgc3lzdGVtIGZyb20gUG93ZXItZG93biBtb2RlLgorICAgICAqIHxbMl0gICAgIHxXS1JGUlRFTiAgfFJlY2VpdmVkIERhdGEgRklGTyBSZWFjaGVkIFRocmVzaG9sZCBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZWQgRGF0YSBGSUZPIHJlYWNoZWQgdGhyZXNob2xkIHdha2UtdXAgc3lzdGVtIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlZCBEYXRhIEZJRk8gcmVhY2hlZCB0aHJlc2hvbGQgd2FrZS11cCBzeXN0ZW0gZnVuY3Rpb24gRW5hYmxlZCwgd2hlbiB0aGUgc3lzdGVtIGlzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGluIFBvd2VyLWRvd24gbW9kZSwgUmVjZWl2ZWQgRGF0YSBGSUZPIHJlYWNoZWQgdGhyZXNob2xkIHdpbGwgd2FrZS11cCBzeXN0ZW0gZnJvbQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBvd2VyLWRvd24gbW9kZS4KKyAgICAgKiB8WzNdICAgICB8V0tSUzQ4NUVOIHxSUy00ODUgQWRkcmVzcyBNYXRjaCAoQUFEIE1vZGUpIFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSUy00ODUgQWRkcmVzcyBNYXRjaCAoQUFEIG1vZGUpIHdha2UtdXAgc3lzdGVtIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSUy00ODUgQWRkcmVzcyBNYXRjaCAoQUFEIG1vZGUpIHdha2UtdXAgc3lzdGVtIGZ1bmN0aW9uIEVuYWJsZWQsIHdoZW4gdGhlIHN5c3RlbSBpcyBpbiBQb3dlci1kb3duIG1vZGUsIFJTLTQ4NSBBZGRyZXNzIE1hdGNoIHdpbGwgd2FrZS11cCBzeXN0ZW0gZnJvbSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgdXNlZCBmb3IgUlMtNDg1IEF1dG8gQWRkcmVzcyBEZXRlY3Rpb24gKEFBRCkgbW9kZSBpbiBSUy00ODUgZnVuY3Rpb24gbW9kZSBhbmQgQUREUkRFTiAoVUFSVF9BTFRDVExbMTVdKSBpcyBzZXQgdG8gMS4KKyAgICAgKiB8WzRdICAgICB8V0tUT1VURU4gIHxSZWNlaXZlZCBEYXRhIEZJRk8gUmVhY2hlZCBUaHJlc2hvbGQgVGltZS1vdXQgV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmVkIERhdGEgRklGTyByZWFjaGVkIHRocmVzaG9sZCB0aW1lLW91dCB3YWtlLXVwIHN5c3RlbSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZWQgRGF0YSBGSUZPIHJlYWNoZWQgdGhyZXNob2xkIHRpbWUtb3V0IHdha2UtdXAgc3lzdGVtIGZ1bmN0aW9uIEVuYWJsZWQsIHdoZW4gdGhlIHN5c3RlbSBpcyBpbiBQb3dlci1kb3duIG1vZGUsIFJlY2VpdmVkIERhdGEgRklGTyByZWFjaGVkIHRocmVzaG9sZCB0aW1lLW91dCB3aWxsIHdha2UtdXAgc3lzdGVtIGZyb20gUG93ZXItZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIHN1Z2dlc3QgdGhlIGZ1bmN0aW9uIGlzIGVuYWJsZWQgd2hlbiB0aGUgV0tSRlJURU4gKFVBUlRfV0tDVExbMl0pIGlzIHNldCB0byAxLgorICAgICAqIEB2YXIgVUFSVF9UOjpXS1NUUworICAgICAqIE9mZnNldDogMHg0NCAgVUFSVCBXYWtlLXVwIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENUU1dLRiAgICB8bkNUUyBXYWtlLXVwIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgaWYgY2hpcCB3YWtlLXVwIGZyb20gcG93ZXItZG93biBzdGF0ZSBieSBuQ1RTIHdha2UtdXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENoaXAgc3RheXMgaW4gcG93ZXItZG93biBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hpcCB3YWtlLXVwIGZyb20gcG93ZXItZG93biBzdGF0ZSBieSBuQ1RTIHdha2UtdXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIFdLQ1RTRU4gKFVBUlRfV0tDVExbMF0pIGlzIGVuYWJsZWQsIHRoZSBuQ1RTIHdha2UtdXAgY2F1c2UgdGhpcyBiaXQgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzFdICAgICB8REFUV0tGICAgIHxJbmNvbWluZyBEYXRhIFdha2UtdXAgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBjaGlwIHdha2UtdXAgZnJvbSBwb3dlci1kb3duIHN0YXRlIGJ5IGRhdGEgd2FrZS11cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hpcCBzdGF5cyBpbiBwb3dlci1kb3duIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGlwIHdha2UtdXAgZnJvbSBwb3dlci1kb3duIHN0YXRlIGJ5IEluY29taW5nIERhdGEgd2FrZS11cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgV0tEQVRFTiAoVUFSVF9XS0NUTFsxXSkgaXMgZW5hYmxlZCwgdGhlIEluY29taW5nIERhdGEgd2FrZS11cCBjYXVzZSB0aGlzIGJpdCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMl0gICAgIHxSRlJUV0tGICAgfFJlY2VpdmVkIERhdGEgRklGTyBSZWFjaGVkIFRocmVzaG9sZCBXYWtlLXVwIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgaWYgY2hpcCB3YWtlLXVwIGZyb20gcG93ZXItZG93biBzdGF0ZSBieSBSZWNlaXZlZCBEYXRhIEZJRk8gcmVhY2hlZCB0aHJlc2hvbGQgd2FrZS11cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hpcCBzdGF5cyBpbiBwb3dlci1kb3duIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGlwIHdha2UtdXAgZnJvbSBwb3dlci1kb3duIHN0YXRlIGJ5IFJlY2VpdmVkIERhdGEgRklGTyBSZWFjaGVkIFRocmVzaG9sZCB3YWtlLXVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBXS1JGUlRFTiAoVUFSVF9XS0NUTFsyXSkgaXMgZW5hYmxlZCwgdGhlIFJlY2VpdmVkIERhdGEgRklGTyBSZWFjaGVkIFRocmVzaG9sZCB3YWtlLXVwIGNhdXNlIHRoaXMgYml0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFszXSAgICAgfFJTNDg1V0tGICB8UlMtNDg1IEFkZHJlc3MgTWF0Y2ggKEFBRCBNb2RlKSBXYWtlLXVwIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgaWYgY2hpcCB3YWtlLXVwIGZyb20gcG93ZXItZG93biBzdGF0ZSBieSBSUy00ODUgQWRkcmVzcyBNYXRjaCAoQUFEIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGlwIHN0YXlzIGluIHBvd2VyLWRvd24gc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoaXAgd2FrZS11cCBmcm9tIHBvd2VyLWRvd24gc3RhdGUgYnkgUlMtNDg1IEFkZHJlc3MgTWF0Y2ggKEFBRCBtb2RlKSB3YWtlLXVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBXS1JTNDg1RU4gKFVBUlRfV0tDVExbM10pIGlzIGVuYWJsZWQsIHRoZSBSUy00ODUgQWRkcmVzcyBNYXRjaCAoQUFEIG1vZGUpIHdha2UtdXAgY2F1c2UgdGhpcyBiaXQgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzRdICAgICB8VE9VVFdLRiAgIHxSZWNlaXZlZCBEYXRhIEZJRk8gVGhyZXNob2xkIFRpbWUtb3V0IFdha2UtdXAgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBjaGlwIHdha2UtdXAgZnJvbSBwb3dlci1kb3duIHN0YXRlIGJ5IFJlY2VpdmVkIERhdGEgRklGTyBUaHJlc2hvbGQgVGltZS1vdXQgd2FrZS11cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hpcCBzdGF5cyBpbiBwb3dlci1kb3duIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGlwIHdha2UtdXAgZnJvbSBwb3dlci1kb3duIHN0YXRlIGJ5IFJlY2VpdmVkIERhdGEgRklGTyByZWFjaGVkIHRocmVzaG9sZCB0aW1lLW91dCB3YWtlLXVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBXS1RPVVRFTiAoVUFSVF9XS0NUTFs0XSkgaXMgZW5hYmxlZCwgdGhlIFJlY2VpdmVkIERhdGEgRklGTyByZWFjaGVkIHRocmVzaG9sZCB0aW1lLW91dCB3YWtlLXVwIGNhdXNlIHRoaXMgYml0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogQHZhciBVQVJUX1Q6OkRXS0NPTVAKKyAgICAgKiBPZmZzZXQ6IDB4NDggIFVBUlQgSW5jb21pbmcgRGF0YSBXYWtlLXVwIENvbXBlbnNhdGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFNUQ09NUCAgICB8U3RhcnQgQml0IENvbXBlbnNhdGlvbiBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgZmllbGQgaW5kaWNhdGUgaG93IG1hbnkgY2xvY2sgY3ljbGUgc2VsZWN0ZWQgYnkgVUFSVF9DTEsgZG8gdGhlIFVBUlQgY29udHJvbGxlciBjYW4gZ2V0IHRoZSAxc3QgYml0IChzdGFydCBiaXQpIHdoZW4gdGhlIGRldmljZSBpcyB3YWtlLXVwIGZyb20gcG93ZXItZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIHZhbGlkIG9ubHkgd2hlbiBXS0RBVEVOIChVQVJUX1dLQ1RMWzFdKSBpcyBzZXQuCisgICAgICovCisKKworICAgIF9fSU8gdWludDMyX3QgREFUOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIFVBUlQgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVEVOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBVQVJUIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBGSUZPOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gVUFSVCBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTElORTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIFVBUlQgTGluZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IE1PREVNOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBVQVJUIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBNT0RFTVNUUzsgICAgICAgICAgICAgIC8qITwgWzB4MDAxNF0gVUFSVCBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRklGT1NUUzsgICAgICAgICAgICAgICAvKiE8IFsweDAwMThdIFVBUlQgRklGTyBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVFNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDFjXSBVQVJUIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUT1VUOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyMF0gVUFSVCBUaW1lLW91dCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQkFVRDsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjRdIFVBUlQgQmF1ZCBSYXRlIERpdmlkZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElSREE7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDI4XSBVQVJUIElyREEgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBTFRDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyY10gVUFSVCBBbHRlcm5hdGUgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRlVOQ1NFTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMzBdIFVBUlQgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IExJTkNUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDM0XSBVQVJUIExJTiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBMSU5TVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzOF0gVUFSVCBMSU4gU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQlJDT01QOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwM2NdIFVBUlQgQmF1ZCBSYXRlIENvbXBlbnNhdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFdLQ1RMOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDQwXSBVQVJUIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBXS1NUUzsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA0NF0gVUFSVCBXYWtlLXVwIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRFdLQ09NUDsgICAgICAgICAgICAgICAvKiE8IFsweDAwNDhdIFVBUlQgSW5jb21pbmcgRGF0YSBXYWtlLXVwIENvbXBlbnNhdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgKi8KKworCit9IFVBUlRfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgVUFSVF9DT05TVCBVQVJUIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFVBUlQgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBVQVJUX0RBVF9EQVRfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpEQVQ6IERBVCBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9EQVRfREFUX01zayAgICAgICAgICAgICAgICAgKDB4ZmZ1bCA8PCBVQVJUX0RBVF9EQVRfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6REFUOiBEQVQgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9EQVRfUEFSSVRZX1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6REFUOiBQQVJJVFkgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfREFUX1BBUklUWV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0RBVF9QQVJJVFlfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkRBVDogUEFSSVRZIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5URU5fUkRBSUVOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBSREFJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVEVOX1JEQUlFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRFTl9SREFJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogUkRBSUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVEVOX1RIUkVJRU5fUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogVEhSRUlFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRFTl9USFJFSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5URU5fVEhSRUlFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFRIUkVJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRFTl9STFNJRU5fUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFJMU0lFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5URU5fUkxTSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVEVOX1JMU0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBSTFNJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5URU5fTU9ERU1JRU5fUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBNT0RFTUlFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVEVOX01PREVNSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRFTl9NT0RFTUlFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogTU9ERU1JRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVEVOX1JYVE9JRU5fUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogUlhUT0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRFTl9SWFRPSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5URU5fUlhUT0lFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFJYVE9JRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRFTl9CVUZFUlJJRU5fUG9zICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IEJVRkVSUklFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfSU5URU5fQlVGRVJSSUVOX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVEVOX0JVRkVSUklFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBCVUZFUlJJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5URU5fV0tJRU5fUG9zICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBXS0lFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVEVOX1dLSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRFTl9XS0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogV0tJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVEVOX0xJTklFTl9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogTElOSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRFTl9MSU5JRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5URU5fTElOSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IExJTklFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRFTl9UT0NOVEVOX1BvcyAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFRPQ05URU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5URU5fVE9DTlRFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVEVOX1RPQ05URU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBUT0NOVEVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5URU5fQVRPUlRTRU5fUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBBVE9SVFNFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVEVOX0FUT1JUU0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRFTl9BVE9SVFNFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogQVRPUlRTRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVEVOX0FUT0NUU0VOX1BvcyAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogQVRPQ1RTRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRFTl9BVE9DVFNFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5URU5fQVRPQ1RTRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IEFUT0NUU0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRFTl9UWFBETUFFTl9Qb3MgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFRYUERNQUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5URU5fVFhQRE1BRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVEVOX1RYUERNQUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBUWFBETUFFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5URU5fUlhQRE1BRU5fUG9zICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBSWFBETUFFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVEVOX1JYUERNQUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRFTl9SWFBETUFFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogUlhQRE1BRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVEVOX0FCUklFTl9Qb3MgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogQUJSSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRFTl9BQlJJRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5URU5fQUJSSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IEFCUklFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRFTl9UWEVORElFTl9Qb3MgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFRYRU5ESUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5URU5fVFhFTkRJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVEVOX1RYRU5ESUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBUWEVORElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT19SWFJTVF9Qb3MgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk86IFJYUlNUIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9fUlhSU1RfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9GSUZPX1JYUlNUX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPOiBSWFJTVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9fVFhSU1RfUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPOiBUWFJTVCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPX1RYUlNUX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfRklGT19UWFJTVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGTzogVFhSU1QgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPX1JGSVRMX1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGTzogUkZJVEwgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT19SRklUTF9Nc2sgICAgICAgICAgICAgICgweGZ1bCA8PCBVQVJUX0ZJRk9fUkZJVExfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk86IFJGSVRMIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT19SWE9GRl9Qb3MgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk86IFJYT0ZGIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9fUlhPRkZfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9GSUZPX1JYT0ZGX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPOiBSWE9GRiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9fUlRTVFJHTFZfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPOiBSVFNUUkdMViBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPX1JUU1RSR0xWX01zayAgICAgICAgICAgKDB4ZnVsIDw8IFVBUlRfRklGT19SVFNUUkdMVl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGTzogUlRTVFJHTFYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5FX1dMU19Qb3MgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElORTogV0xTIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElORV9XTFNfTXNrICAgICAgICAgICAgICAgICgweDN1bCA8PCBVQVJUX0xJTkVfV0xTX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkU6IFdMUyBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElORV9OU0JfUG9zICAgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkU6IE5TQiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkVfTlNCX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5FX05TQl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5FOiBOU0IgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkVfUEJFX1BvcyAgICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5FOiBQQkUgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5FX1BCRV9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElORV9QQkVfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElORTogUEJFIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5FX0VQRV9Qb3MgICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElORTogRVBFIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElORV9FUEVfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTkVfRVBFX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkU6IEVQRSBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElORV9TUEVfUG9zICAgICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkU6IFNQRSBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkVfU1BFX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5FX1NQRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5FOiBTUEUgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkVfQkNCX1BvcyAgICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5FOiBCQ0IgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5FX0JDQl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElORV9CQ0JfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElORTogQkNCIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5FX1BTU19Qb3MgICAgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElORTogUFNTIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElORV9QU1NfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTkVfUFNTX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkU6IFBTUyBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElORV9UWERJTlZfUG9zICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkU6IFRYRElOViBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkVfVFhESU5WX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5FX1RYRElOVl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5FOiBUWERJTlYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkVfUlhESU5WX1BvcyAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5FOiBSWERJTlYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5FX1JYRElOVl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElORV9SWERJTlZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElORTogUlhESU5WIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9NT0RFTV9SVFNfUG9zICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TU9ERU06IFJUUyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTU9ERU1fUlRTX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX01PREVNX1JUU19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6Ok1PREVNOiBSVFMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTU9ERU1fUlRTQUNUTFZfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6Ok1PREVNOiBSVFNBQ1RMViBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX01PREVNX1JUU0FDVExWX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9NT0RFTV9SVFNBQ1RMVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpNT0RFTTogUlRTQUNUTFYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX01PREVNX1JUU1NUU19Qb3MgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpNT0RFTTogUlRTU1RTIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9NT0RFTV9SVFNTVFNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTU9ERU1fUlRTU1RTX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TU9ERU06IFJUU1NUUyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9NT0RFTVNUU19DVFNERVRGX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TU9ERU1TVFM6IENUU0RFVEYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVBUlRfTU9ERU1TVFNfQ1RTREVURl9Nc2sgICAgICAgICgweDF1bCA8PCBVQVJUX01PREVNU1RTX0NUU0RFVEZfUG9zKSAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6Ok1PREVNU1RTOiBDVFNERVRGIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTU9ERU1TVFNfQ1RTU1RTX1BvcyAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6Ok1PREVNU1RTOiBDVFNTVFMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX01PREVNU1RTX0NUU1NUU19Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9NT0RFTVNUU19DVFNTVFNfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpNT0RFTVNUUzogQ1RTU1RTIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX01PREVNU1RTX0NUU0FDVExWX1BvcyAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpNT0RFTVNUUzogQ1RTQUNUTFYgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVUFSVF9NT0RFTVNUU19DVFNBQ1RMVl9Nc2sgICAgICAgKDB4MXVsIDw8IFVBUlRfTU9ERU1TVFNfQ1RTQUNUTFZfUG9zKSAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TU9ERU1TVFM6IENUU0FDVExWIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1JYT1ZJRl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogUlhPVklGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT1NUU19SWE9WSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0ZJRk9TVFNfUlhPVklGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFJYT1ZJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT1NUU19BQlJESUZfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IEFCUkRJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9TVFNfQUJSRElGX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9GSUZPU1RTX0FCUkRJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBBQlJESUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9TVFNfQUJSRFRPSUZfUG9zICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBBQlJEVE9JRiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPU1RTX0FCUkRUT0lGX01zayAgICAgICAgKDB4MXVsIDw8IFVBUlRfRklGT1NUU19BQlJEVE9JRl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogQUJSRFRPSUYgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPU1RTX0FERFJERVRGX1BvcyAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogQUREUkRFVEYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVBUlRfRklGT1NUU19BRERSREVURl9Nc2sgICAgICAgICgweDF1bCA8PCBVQVJUX0ZJRk9TVFNfQUREUkRFVEZfUG9zKSAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IEFERFJERVRGIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT1NUU19QRUZfUG9zICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFBFRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9TVFNfUEVGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9GSUZPU1RTX1BFRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBQRUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9TVFNfRkVGX1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBGRUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPU1RTX0ZFRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfRklGT1NUU19GRUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogRkVGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPU1RTX0JJRl9Qb3MgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogQklGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT1NUU19CSUZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0ZJRk9TVFNfQklGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IEJJRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT1NUU19SWFBUUl9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFJYUFRSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9TVFNfUlhQVFJfTXNrICAgICAgICAgICAoMHgzZnVsIDw8IFVBUlRfRklGT1NUU19SWFBUUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBSWFBUUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9TVFNfUlhFTVBUWV9Qb3MgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBSWEVNUFRZIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1JYRU1QVFlfTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfRklGT1NUU19SWEVNUFRZX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogUlhFTVBUWSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1JYRlVMTF9Qb3MgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogUlhGVUxMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT1NUU19SWEZVTExfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0ZJRk9TVFNfUlhGVUxMX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFJYRlVMTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT1NUU19UWFBUUl9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFRYUFRSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9TVFNfVFhQVFJfTXNrICAgICAgICAgICAoMHgzZnVsIDw8IFVBUlRfRklGT1NUU19UWFBUUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBUWFBUUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9TVFNfVFhFTVBUWV9Qb3MgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBUWEVNUFRZIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1RYRU1QVFlfTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfRklGT1NUU19UWEVNUFRZX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogVFhFTVBUWSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1RYRlVMTF9Qb3MgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogVFhGVUxMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT1NUU19UWEZVTExfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0ZJRk9TVFNfVFhGVUxMX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFRYRlVMTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT1NUU19UWE9WSUZfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFRYT1ZJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9TVFNfVFhPVklGX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9GSUZPU1RTX1RYT1ZJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBUWE9WSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9TVFNfVFhFTVBUWUZfUG9zICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBUWEVNUFRZRiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1RYRU1QVFlGX01zayAgICAgICAgKDB4MXVsIDw8IFVBUlRfRklGT1NUU19UWEVNUFRZRl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogVFhFTVBUWUYgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1JYSURMRV9Qb3MgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogUlhJRExFIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT1NUU19SWElETEVfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0ZJRk9TVFNfUlhJRExFX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFJYSURMRSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT1NUU19UWFJYQUNUX1BvcyAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFRYUlhBQ1QgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9TVFNfVFhSWEFDVF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9GSUZPU1RTX1RYUlhBQ1RfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBUWFJYQUNUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19SREFJRl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFJEQUlGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfUkRBSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX1JEQUlGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBSREFJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfVEhSRUlGX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBUSFJFSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX1RIUkVJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19USFJFSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogVEhSRUlGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX1JMU0lGX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogUkxTSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19STFNJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfUkxTSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFJMU0lGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19NT0RFTUlGX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IE1PREVNSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfTU9ERU1JRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX01PREVNSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBNT0RFTUlGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfUlhUT0lGX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBSWFRPSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX1JYVE9JRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19SWFRPSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogUlhUT0lGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX0JVRkVSUklGX1BvcyAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogQlVGRVJSSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19CVUZFUlJJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfQlVGRVJSSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEJVRkVSUklGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19XS0lGX1BvcyAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFdLSUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfV0tJRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX1dLSUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBXS0lGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfTElOSUZfUG9zICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBMSU5JRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX0xJTklGX01zayAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19MSU5JRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogTElOSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX1JEQUlOVF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogUkRBSU5UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19SREFJTlRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfUkRBSU5UX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFJEQUlOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19USFJFSU5UX1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFRIUkVJTlQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfVEhSRUlOVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX1RIUkVJTlRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBUSFJFSU5UIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfUkxTSU5UX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBSTFNJTlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX1JMU0lOVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19STFNJTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogUkxTSU5UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX01PREVNSU5UX1BvcyAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogTU9ERU1JTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19NT0RFTUlOVF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfTU9ERU1JTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IE1PREVNSU5UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19SWFRPSU5UX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFJYVE9JTlQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfUlhUT0lOVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX1JYVE9JTlRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBSWFRPSU5UIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfQlVGRVJSSU5UX1BvcyAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBCVUZFUlJJTlQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX0JVRkVSUklOVF9Nc2sgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19CVUZFUlJJTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogQlVGRVJSSU5UIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX1dLSU5UX1BvcyAgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogV0tJTlQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19XS0lOVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfV0tJTlRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFdLSU5UIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19MSU5JTlRfUG9zICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IExJTklOVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfTElOSU5UX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX0xJTklOVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBMSU5JTlQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfSFdSTFNJRl9Qb3MgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBIV1JMU0lGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX0hXUkxTSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19IV1JMU0lGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogSFdSTFNJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX0hXTU9ESUZfUG9zICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogSFdNT0RJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19IV01PRElGX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfSFdNT0RJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEhXTU9ESUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19IV1RPSUZfUG9zICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEhXVE9JRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfSFdUT0lGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX0hXVE9JRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBIV1RPSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfSFdCVUZFSUZfUG9zICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBIV0JVRkVJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX0hXQlVGRUlGX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19IV0JVRkVJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogSFdCVUZFSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX1RYRU5ESUZfUG9zICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogVFhFTkRJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19UWEVORElGX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfVFhFTkRJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFRYRU5ESUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19IV1JMU0lOVF9Qb3MgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEhXUkxTSU5UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfSFdSTFNJTlRfTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX0hXUkxTSU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBIV1JMU0lOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfSFdNT0RJTlRfUG9zICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBIV01PRElOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX0hXTU9ESU5UX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19IV01PRElOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogSFdNT0RJTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX0hXVE9JTlRfUG9zICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogSFdUT0lOVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19IV1RPSU5UX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfSFdUT0lOVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEhXVE9JTlQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19IV0JVRkVJTlRfUG9zICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEhXQlVGRUlOVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfSFdCVUZFSU5UX01zayAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX0hXQlVGRUlOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBIV0JVRkVJTlQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfVFhFTkRJTlRfUG9zICAgICAgICAgKDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBUWEVORElOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX1RYRU5ESU5UX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19UWEVORElOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogVFhFTkRJTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX0FCUklOVF9Qb3MgICAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogQUJSSU5UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19BQlJJTlRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfQUJSSU5UX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEFCUklOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX1RPVVRfVE9JQ19Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpUT1VUOiBUT0lDIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9UT1VUX1RPSUNfTXNrICAgICAgICAgICAgICAgKDB4ZmZ1bCA8PCBVQVJUX1RPVVRfVE9JQ19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6VE9VVDogVE9JQyBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9UT1VUX0RMWV9Qb3MgICAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6VE9VVDogRExZIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfVE9VVF9ETFlfTXNrICAgICAgICAgICAgICAgICgweGZmdWwgPDwgVUFSVF9UT1VUX0RMWV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OlRPVVQ6IERMWSBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfQkFVRF9CUkRfUG9zICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkJBVUQ6IEJSRCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0JBVURfQlJEX01zayAgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgVUFSVF9CQVVEX0JSRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpCQVVEOiBCUkQgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0JBVURfRURJVk0xX1BvcyAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpCQVVEOiBFRElWTTEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9CQVVEX0VESVZNMV9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IFVBUlRfQkFVRF9FRElWTTFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QkFVRDogRURJVk0xIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9CQVVEX0JBVURNMF9Qb3MgICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QkFVRDogQkFVRE0wIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfQkFVRF9CQVVETTBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0JBVURfQkFVRE0wX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkJBVUQ6IEJBVURNMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfQkFVRF9CQVVETTFfUG9zICAgICAgICAgICAgICgyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkJBVUQ6IEJBVURNMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0JBVURfQkFVRE0xX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9CQVVEX0JBVURNMV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpCQVVEOiBCQVVETTEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lSREFfVFhFTl9Qb3MgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJUkRBOiBUWEVOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JUkRBX1RYRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSVJEQV9UWEVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SVJEQTogVFhFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JUkRBX1RYSU5WX1BvcyAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SVJEQTogVFhJTlYgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfSVJEQV9UWElOVl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lSREFfVFhJTlZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklSREE6IFRYSU5WIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSVJEQV9SWElOVl9Qb3MgICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklSREE6IFJYSU5WIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0lSREFfUlhJTlZfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JUkRBX1JYSU5WX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJUkRBOiBSWElOViBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0FMVENUTF9CUktGTF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IEJSS0ZMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9BTFRDVExfQlJLRkxfTXNrICAgICAgICAgICAgKDB4ZnVsIDw8IFVBUlRfQUxUQ1RMX0JSS0ZMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBCUktGTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9BTFRDVExfTElOUlhFTl9Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBMSU5SWEVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfQUxUQ1RMX0xJTlJYRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0FMVENUTF9MSU5SWEVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogTElOUlhFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfQUxUQ1RMX0xJTlRYRU5fUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogTElOVFhFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0FMVENUTF9MSU5UWEVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9BTFRDVExfTElOVFhFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IExJTlRYRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0FMVENUTF9SUzQ4NU5NTV9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IFJTNDg1Tk1NIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9BTFRDVExfUlM0ODVOTU1fTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfQUxUQ1RMX1JTNDg1Tk1NX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBSUzQ4NU5NTSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9BTFRDVExfUlM0ODVBQURfUG9zICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBSUzQ4NUFBRCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfQUxUQ1RMX1JTNDg1QUFEX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX0FMVENUTF9SUzQ4NUFBRF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogUlM0ODVBQUQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfQUxUQ1RMX1JTNDg1QVVEX1BvcyAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogUlM0ODVBVUQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0FMVENUTF9SUzQ4NUFVRF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9BTFRDVExfUlM0ODVBVURfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IFJTNDg1QVVEIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0FMVENUTF9BRERSREVOX1BvcyAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IEFERFJERU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9BTFRDVExfQUREUkRFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfQUxUQ1RMX0FERFJERU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBBRERSREVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9BTFRDVExfQUJSSUZfUG9zICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBBQlJJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVBUlRfQUxUQ1RMX0FCUklGX01zayAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0FMVENUTF9BQlJJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogQUJSSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfQUxUQ1RMX0FCUkRFTl9Qb3MgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogQUJSREVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX0FMVENUTF9BQlJERU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9BTFRDVExfQUJSREVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IEFCUkRFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0FMVENUTF9BQlJEQklUU19Qb3MgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IEFCUkRCSVRTIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9BTFRDVExfQUJSREJJVFNfTXNrICAgICAgICAgKDB4M3VsIDw8IFVBUlRfQUxUQ1RMX0FCUkRCSVRTX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBBQlJEQklUUyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9BTFRDVExfQUREUk1WX1BvcyAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBBRERSTVYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfQUxUQ1RMX0FERFJNVl9Nc2sgICAgICAgICAgICgweGZmdWwgPDwgVUFSVF9BTFRDVExfQUREUk1WX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogQUREUk1WIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRlVOQ1NFTF9GVU5DU0VMX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZVTkNTRUw6IEZVTkNTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0ZVTkNTRUxfRlVOQ1NFTF9Nc2sgICAgICAgICAoMHgzdWwgPDwgVUFSVF9GVU5DU0VMX0ZVTkNTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGVU5DU0VMOiBGVU5DU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZVTkNTRUxfVFhSWERJU19Qb3MgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGVU5DU0VMOiBUWFJYRElTIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GVU5DU0VMX1RYUlhESVNfTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfRlVOQ1NFTF9UWFJYRElTX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RlVOQ1NFTDogVFhSWERJUyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5DVExfU0xWRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBTTFZFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX1NMVkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTkNUTF9TTFZFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogU0xWRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOQ1RMX1NMVkhERU5fUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogU0xWSERFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkNUTF9TTFZIREVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5DVExfU0xWSERFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IFNMVkhERU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkNUTF9TTFZBUkVOX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IFNMVkFSRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfU0xWQVJFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElOQ1RMX1NMVkFSRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBTTFZBUkVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5DVExfU0xWRFVFTl9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBTTFZEVUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX1NMVkRVRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTkNUTF9TTFZEVUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogU0xWRFVFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOQ1RMX01VVEVfUG9zICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogTVVURSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkNUTF9NVVRFX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5DVExfTVVURV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IE1VVEUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkNUTF9TRU5ESF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IFNFTkRIIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfU0VOREhfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElOQ1RMX1NFTkRIX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBTRU5ESCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5DVExfSURQRU5fUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBJRFBFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX0lEUEVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTkNUTF9JRFBFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogSURQRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOQ1RMX0JSS0RFVEVOX1BvcyAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogQlJLREVURU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0xJTkNUTF9CUktERVRFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5DVExfQlJLREVURU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IEJSS0RFVEVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkNUTF9MSU5SWE9GRl9Qb3MgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IExJTlJYT0ZGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfTElOUlhPRkZfTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElOQ1RMX0xJTlJYT0ZGX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBMSU5SWE9GRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5DVExfQklURVJSRU5fUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBCSVRFUlJFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX0JJVEVSUkVOX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTkNUTF9CSVRFUlJFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogQklURVJSRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOQ1RMX0JSS0ZMX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogQlJLRkwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkNUTF9CUktGTF9Nc2sgICAgICAgICAgICAoMHhmdWwgPDwgVUFSVF9MSU5DVExfQlJLRkxfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IEJSS0ZMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkNUTF9CU0xfUG9zICAgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IEJTTCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfQlNMX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IFVBUlRfTElOQ1RMX0JTTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBCU0wgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5DVExfSFNFTF9Qb3MgICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBIU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX0hTRUxfTXNrICAgICAgICAgICAgICgweDN1bCA8PCBVQVJUX0xJTkNUTF9IU0VMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogSFNFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOQ1RMX1BJRF9Qb3MgICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogUElEIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkNUTF9QSURfTXNrICAgICAgICAgICAgICAoMHhmZnVsIDw8IFVBUlRfTElOQ1RMX1BJRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IFBJRCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTlNUU19TTFZIREVURl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5TVFM6IFNMVkhERVRGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5TVFNfU0xWSERFVEZfTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElOU1RTX1NMVkhERVRGX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOU1RTOiBTTFZIREVURiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5TVFNfU0xWSEVGX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOU1RTOiBTTFZIRUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfTElOU1RTX1NMVkhFRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTlNUU19TTFZIRUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTlNUUzogU0xWSEVGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOU1RTX1NMVklEUEVGX1BvcyAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTlNUUzogU0xWSURQRUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0xJTlNUU19TTFZJRFBFRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5TVFNfU0xWSURQRUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5TVFM6IFNMVklEUEVGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTlNUU19TTFZTWU5DRl9Qb3MgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5TVFM6IFNMVlNZTkNGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5TVFNfU0xWU1lOQ0ZfTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElOU1RTX1NMVlNZTkNGX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOU1RTOiBTTFZTWU5DRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5TVFNfQlJLREVURl9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOU1RTOiBCUktERVRGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfTElOU1RTX0JSS0RFVEZfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTlNUU19CUktERVRGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTlNUUzogQlJLREVURiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOU1RTX0JJVEVGX1BvcyAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTlNUUzogQklURUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTlNUU19CSVRFRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5TVFNfQklURUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5TVFM6IEJJVEVGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0JSQ09NUF9CUkNPTVBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpCUkNPTVA6IEJSQ09NUCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9CUkNPTVBfQlJDT01QX01zayAgICAgICAgICAgKDB4MWZmdWwgPDwgVUFSVF9CUkNPTVBfQlJDT01QX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QlJDT01QOiBCUkNPTVAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9CUkNPTVBfQlJDT01QREVDX1BvcyAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QlJDT01QOiBCUkNPTVBERUMgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVBUlRfQlJDT01QX0JSQ09NUERFQ19Nc2sgICAgICAgICgweDF1bCA8PCBVQVJUX0JSQ09NUF9CUkNPTVBERUNfUG9zKSAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkJSQ09NUDogQlJDT01QREVDIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfV0tDVExfV0tDVFNFTl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLQ1RMOiBXS0NUU0VOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX1dLQ1RMX1dLQ1RTRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9XS0NUTF9XS0NUU0VOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS0NUTDogV0tDVFNFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX1dLQ1RMX1dLREFURU5fUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS0NUTDogV0tEQVRFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9XS0NUTF9XS0RBVEVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfV0tDVExfV0tEQVRFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tDVEw6IFdLREFURU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9XS0NUTF9XS1JGUlRFTl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tDVEw6IFdLUkZSVEVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfV0tDVExfV0tSRlJURU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX1dLQ1RMX1dLUkZSVEVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLQ1RMOiBXS1JGUlRFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfV0tDVExfV0tSUzQ4NUVOX1BvcyAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLQ1RMOiBXS1JTNDg1RU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX1dLQ1RMX1dLUlM0ODVFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9XS0NUTF9XS1JTNDg1RU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS0NUTDogV0tSUzQ4NUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX1dLQ1RMX1dLVE9VVEVOX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS0NUTDogV0tUT1VURU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9XS0NUTF9XS1RPVVRFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfV0tDVExfV0tUT1VURU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tDVEw6IFdLVE9VVEVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9XS1NUU19DVFNXS0ZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tTVFM6IENUU1dLRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVBUlRfV0tTVFNfQ1RTV0tGX01zayAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX1dLU1RTX0NUU1dLRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLU1RTOiBDVFNXS0YgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfV0tTVFNfREFUV0tGX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLU1RTOiBEQVRXS0YgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVQVJUX1dLU1RTX0RBVFdLRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9XS1NUU19EQVRXS0ZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS1NUUzogREFUV0tGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX1dLU1RTX1JGUlRXS0ZfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS1NUUzogUkZSVFdLRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9XS1NUU19SRlJUV0tGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfV0tTVFNfUkZSVFdLRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tTVFM6IFJGUlRXS0YgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9XS1NUU19SUzQ4NVdLRl9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tTVFM6IFJTNDg1V0tGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfV0tTVFNfUlM0ODVXS0ZfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX1dLU1RTX1JTNDg1V0tGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLU1RTOiBSUzQ4NVdLRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfV0tTVFNfVE9VVFdLRl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLU1RTOiBUT1VUV0tGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX1dLU1RTX1RPVVRXS0ZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9XS1NUU19UT1VUV0tGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS1NUUzogVE9VVFdLRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0RXS0NPTVBfU1RDT01QX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpEV0tDT01QOiBTVENPTVAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9EV0tDT01QX1NUQ09NUF9Nc2sgICAgICAgICAgKDB4ZmZmZnVsIDw8IFVBUlRfRFdLQ09NUF9TVENPTVBfUG9zKSAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RFdLQ09NUDogU1RDT01QIE1hc2sgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogVUFSVF9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgVUFSVCByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworI2VuZGlmIC8qIF9fVUFSVF9SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdWkyY19yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS91aTJjX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZDIwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdWkyY19yZWcuaApAQCAtMCwwICsxLDU2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHVpMmNfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFVJMkMgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVUkyQ19SRUdfSF9fCisjZGVmaW5lIF9fVUkyQ19SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEkyQyBNb2RlIG9mIFVTQ0kgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFVJMkMgSTJDIE1vZGUgb2YgVVNDSSBDb250cm9sbGVyKFVJMkMpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIFVJMkMgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBVSTJDX1Q6OkNUTAorICAgICAqIE9mZnNldDogMHgwMCAgVVNDSSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzI6MF0gICB8RlVOTU9ERSAgIHxGdW5jdGlvbiBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgc2VsZWN0cyB0aGUgcHJvdG9jb2wgZm9yIHRoaXMgVVNDSSBjb250cm9sbGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2VsZWN0aW5nIGEgcHJvdG9jb2wgdGhhdCBpcyBub3QgYXZhaWxhYmxlIG9yIGEgcmVzZXJ2ZWQgY29tYmluYXRpb24gZGlzYWJsZXMgdGhlIFVTQ0kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHN3aXRjaGluZyBiZXR3ZWVuIHR3byBwcm90b2NvbHMsIHRoZSBVU0NJIGhhcyB0byBiZSBkaXNhYmxlZCBiZWZvcmUgc2VsZWN0aW5nIGEgbmV3IHByb3RvY29sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2ltdWx0YW5lb3VzbHksIHRoZSBVU0NJIHdpbGwgYmUgcmVzZXQgd2hlbiB1c2VyIHdyaXRlIDAwMCB0byBGVU5NT0RFLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IFRoZSBVU0NJIGlzIGRpc2FibGVkLiBBbGwgcHJvdG9jb2wgcmVsYXRlZCBzdGF0ZSBtYWNoaW5lcyBhcmUgc2V0IHRvIGlkbGUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gVGhlIFNQSSBwcm90b2NvbCBpcyBzZWxlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBUaGUgVUFSVCBwcm90b2NvbCBpcyBzZWxlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBUaGUgSTJDIHByb3RvY29sIGlzIHNlbGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IE90aGVyIGJpdCBjb21iaW5hdGlvbnMgYXJlIHJlc2VydmVkLgorICAgICAqIEB2YXIgVUkyQ19UOjpCUkdFTgorICAgICAqIE9mZnNldDogMHgwOCAgVVNDSSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UkNMS1NFTCAgIHxSZWZlcmVuY2UgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHNlbGVjdHMgdGhlIHNvdXJjZSBzaWduYWwgb2YgcmVmZXJlbmNlIGNsb2NrIChmUkVGX0NMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBlcmlwaGVyYWwgZGV2aWNlIGNsb2NrIGZQQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzFdICAgICB8UFRDTEtTRUwgIHxQcm90b2NvbCBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgc2VsZWN0cyB0aGUgc291cmNlIHNpZ25hbCBvZiBwcm90b2NvbCBjbG9jayAoZlBST1RfQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVmZXJlbmNlIGNsb2NrIGZSRUZfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBmUkVGX0NMSzIgKGl0cyBmcmVxdWVuY3kgaXMgaGFsZiBvZiBmUkVGX0NMSykuCisgICAgICogfFszOjJdICAgfFNQQ0xLU0VMICB8U2FtcGxlIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCB1c2VkIGZvciB0aGUgY2xvY2sgc291cmNlIHNlbGVjdGlvbiBvZiBhIHNhbXBsZSBjbG9jayAoZlNBTVBfQ0xLKSBmb3IgdGhlIHByb3RvY29sIHByb2Nlc3Nvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IGZTQU1QX0NMSyA9IGZESVZfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gZlNBTVBfQ0xLID0gZlBST1RfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gZlNBTVBfQ0xLID0gZlNDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBmU0FNUF9DTEsgPSBmUkVGX0NMSy4KKyAgICAgKiB8WzRdICAgICB8VE1DTlRFTiAgIHxUaW1lIE1lYXN1cmVtZW50IENvdW50ZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIDEwLWJpdCB0aW1pbmcgbWVhc3VyZW1lbnQgY291bnRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZSBtZWFzdXJlbWVudCBjb3VudGVyIGlzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lIG1lYXN1cmVtZW50IGNvdW50ZXIgaXMgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8VE1DTlRTUkMgIHxUaW1lIE1lYXN1cmVtZW50IENvdW50ZXIgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lIG1lYXN1cmVtZW50IGNvdW50ZXIgd2l0aCBmUFJPVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWUgbWVhc3VyZW1lbnQgY291bnRlciB3aXRoIGZESVZfQ0xLLgorICAgICAqIHxbOTo4XSAgIHxQRFNDTlQgICAgfFByZS1kaXZpZGVyIGZvciBTYW1wbGUgQ291bnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGRlZmluZXMgdGhlIGRpdmlkZSByYXRpbyBvZiB0aGUgY2xvY2sgZGl2aXNpb24gZnJvbSBzYW1wbGUgY2xvY2sgZlNBTVBfQ0xLCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRpdmlkZWQgZnJlcXVlbmN5IGZQRFNfQ05UID0gZlNBTVBfQ0xLIC8gKFBEU0NOVCsxKS4KKyAgICAgKiB8WzE0OjEwXSB8RFNDTlQgICAgIHxEZW5vbWluYXRvciBmb3IgU2FtcGxlIENvdW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBkZWZpbmVzIHRoZSBkaXZpZGUgcmF0aW8gb2YgdGhlIHNhbXBsZSBjbG9jayBmU0FNUF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRpdmlkZWQgZnJlcXVlbmN5IGZEU19DTlQgPSBmUERTX0NOVCAvIChEU0NOVCsxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgbWF4aW11bSB2YWx1ZSBvZiBEU0NOVCBpcyAweEYgb24gVUFSVCBtb2RlIGFuZCBzdWdnZXN0IHRvIHNldCBvdmVyIDQgdG8gY29uZmlybSB0aGUgcmVjZWl2ZXIgZGF0YSBpcyBzYW1wbGVkIGluIHJpZ2h0IHZhbHVlCisgICAgICogfFsyNToxNl0gfENMS0RJViAgICB8Q2xvY2sgRGl2aWRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGRlZmluZXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHByb3RvY29sIGNsb2NrIGZyZXF1ZW5jeSBmUFJPVF9DTEsgYW5kIHRoZSBjbG9jayBkaXZpZGVyIGZyZXF1ZW5jeSBmRElWX0NMSyAoZkRJVl9DTEsgPSBmUFJPVF9DTEsgLyAoQ0xLRElWKzEpICkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gVUFSVCBmdW5jdGlvbiwgaXQgY2FuIGJlIHVwZGF0ZWQgYnkgaGFyZHdhcmUgaW4gdGhlIDR0aCBmYWxsaW5nIGVkZ2Ugb2YgdGhlIGlucHV0IGRhdGEgMHg1NSB3aGVuIHRoZSBhdXRvIGJhdWQgcmF0ZSBmdW5jdGlvbiAoQUJSRU4oVUkyQ19QUk9UQ1RMWzZdKSkgaXMgZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZXZpc2VkIHZhbHVlIGlzIHRoZSBhdmVyYWdlIGJpdCB0aW1lIGJldHdlZW4gYml0IDUgYW5kIGJpdCA2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHVzZXIgY2FuIHVzZSByZXZpc2VkIENMS0RJViBhbmQgbmV3IEJSREVUSVRWIChVSTJDX1BST1RDVExbMjQ6MTZdKSB0byBjYWxjdWxhdGUgdGhlIHByZWNpc2UgYmF1ZCByYXRlLgorICAgICAqIEB2YXIgVUkyQ19UOjpMSU5FQ1RMCisgICAgICogT2Zmc2V0OiAweDJDICBVU0NJIExpbmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfExTQiAgICAgICB8TFNCIEZpcnN0IFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIE1TQiwgd2hpY2ggYml0IG9mIHRyYW5zbWl0L3JlY2VpdmUgZGF0YSBidWZmZXIgZGVwZW5kcyBvbiB0aGUgc2V0dGluZyBvZiBEV0lEVEgsIGlzIHRyYW5zbWl0dGVkL3JlY2VpdmVkIGZpcnN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgTFNCLCB0aGUgYml0IDAgb2YgZGF0YSBidWZmZXIsIHdpbGwgYmUgdHJhbnNtaXR0ZWQvcmVjZWl2ZWQgZmlyc3QuCisgICAgICogfFsxMTo4XSAgfERXSURUSCAgICB8V29yZCBMZW5ndGggb2YgVHJhbnNtaXNzaW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgZGVmaW5lcyB0aGUgZGF0YSB3b3JkIGxlbmd0aCAoYW1vdW50IG9mIGJpdHMpIGZvciByZWNlcHRpb24gYW5kIHRyYW5zbWlzc2lvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkYXRhIHdvcmQgaXMgYWx3YXlzIHJpZ2h0LWFsaWduZWQgaW4gdGhlIGRhdGEgYnVmZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VVNDSSBzdXBwb3J0IHdvcmQgbGVuZ3RoIGZyb20gNCB0byAxNiBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDogVGhlIGRhdGEgd29yZCBjb250YWlucyAxNiBiaXRzIGxvY2F0ZWQgYXQgYml0IHBvc2l0aW9ucyBbMTU6MF0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgxOiBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDI6IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MzogUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0OiBUaGUgZGF0YSB3b3JkIGNvbnRhaW5zIDQgYml0cyBsb2NhdGVkIGF0IGJpdCBwb3NpdGlvbnMgWzM6MF0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg1OiBUaGUgZGF0YSB3b3JkIGNvbnRhaW5zIDUgYml0cyBsb2NhdGVkIGF0IGJpdCBwb3NpdGlvbnMgWzQ6MF0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Li4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHhGOiBUaGUgZGF0YSB3b3JkIGNvbnRhaW5zIDE1IGJpdHMgbG9jYXRlZCBhdCBiaXQgcG9zaXRpb25zIFsxNDowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBVQVJUIHByb3RvY29sLCB0aGUgbGVuZ3RoIGNhbiBiZSBjb25maWd1cmVkIGFzIDZ+MTMgYml0cy4KKyAgICAgKiBAdmFyIFVJMkNfVDo6VFhEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MzAgIFVTQ0kgVHJhbnNtaXQgRGF0YSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFRYREFUICAgICB8VHJhbnNtaXQgRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbiB1c2UgdGhpcyBiaXQgZmllbGQgdG8gd3JpdGUgMTYtYml0IHRyYW5zbWl0IGRhdGEgZm9yIHRyYW5zbWlzc2lvbi4KKyAgICAgKiBAdmFyIFVJMkNfVDo6UlhEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MzQgIFVTQ0kgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UlhEQVQgICAgIHxSZWNlaXZlZCBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgbW9uaXRvcnMgdGhlIHJlY2VpdmVkIGRhdGEgd2hpY2ggc3RvcmVkIGluIHJlY2VpdmUgZGF0YSBidWZmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZSAxOiBJbiBJMkMgcHJvdG9jb2wsIFJYREFUWzEyOjhdIGluZGljYXRlIHRoZSBkaWZmZXJlbnQgdHJhbnNtaXNzaW9uIGNvbmRpdGlvbnMgd2hpY2ggZGVmaW5lZCBpbiBJMkMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZSAyOiBJbiBVQVJUIHByb3RvY29sLCBSWERBVFsxNToxM10gaW5kaWNhdGUgdGhlIHNhbWUgZnJhbWUgc3RhdHVzIG9mIEJSRUFLLCBGUk1FUlIgYW5kIFBBUklUWUVSUiAoVUkyQ19QUk9UU1RTWzc6NV0pLgorICAgICAqIEB2YXIgVUkyQ19UOjpERVZBRERSMAorICAgICAqIE9mZnNldDogMHg0NCAgVVNDSSBEZXZpY2UgQWRkcmVzcyBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzk6MF0gICB8REVWQUREUiAgIHxEZXZpY2UgICBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gSTJDICAgcHJvdG9jb2wsIHRoaXMgYml0IGZpZWxkIGNvbnRhaW5zIHRoZSBwcm9ncmFtbWVkIHNsYXZlIGFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgZmlyc3QgICByZWNlaXZlZCBhZGRyZXNzIGJ5dGUgYXJlIDExMTEgMEFBWEIsIHRoZSBBQSBiaXRzIGFyZSBjb21wYXJlZCB0byAgIHRoZSBiaXRzIERFVkFERFJbOTo4XSB0byBjaGVjayBmb3IgYWRkcmVzcyBtYXRjaCwgd2hlcmUgdGhlIFggaXMgUi9XIGJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZW4gICB0aGUgc2Vjb25kIGFkZHJlc3MgYnl0ZSBpcyBhbHNvIGNvbXBhcmVkIHRvIERFVkFERFJbNzowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgREVWQUREUiBbOTo3XSBtdXN0IGJlIHNldCAzJ2IwMDAgd2hlbiBJMkMgb3BlcmF0aW5nIGluICAgNy1iaXQgYWRkcmVzcyBtb2RlLgorICAgICAqIEB2YXIgVUkyQ19UOjpERVZBRERSMQorICAgICAqIE9mZnNldDogMHg0OCAgVVNDSSBEZXZpY2UgQWRkcmVzcyBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzk6MF0gICB8REVWQUREUiAgIHxEZXZpY2UgICBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gSTJDICAgcHJvdG9jb2wsIHRoaXMgYml0IGZpZWxkIGNvbnRhaW5zIHRoZSBwcm9ncmFtbWVkIHNsYXZlIGFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgZmlyc3QgICByZWNlaXZlZCBhZGRyZXNzIGJ5dGUgYXJlIDExMTEgMEFBWEIsIHRoZSBBQSBiaXRzIGFyZSBjb21wYXJlZCB0byAgIHRoZSBiaXRzIERFVkFERFJbOTo4XSB0byBjaGVjayBmb3IgYWRkcmVzcyBtYXRjaCwgd2hlcmUgdGhlIFggaXMgUi9XIGJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZW4gICB0aGUgc2Vjb25kIGFkZHJlc3MgYnl0ZSBpcyBhbHNvIGNvbXBhcmVkIHRvIERFVkFERFJbNzowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgREVWQUREUiBbOTo3XSBtdXN0IGJlIHNldCAzJ2IwMDAgd2hlbiBJMkMgb3BlcmF0aW5nIGluICAgNy1iaXQgYWRkcmVzcyBtb2RlLgorICAgICAqIEB2YXIgVUkyQ19UOjpBRERSTVNLMAorICAgICAqIE9mZnNldDogMHg0QyAgVVNDSSBEZXZpY2UgQWRkcmVzcyBNYXNrIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbOTowXSAgIHxBRERSTVNLICAgfFVTQ0kgRGV2aWNlIEFkZHJlc3MgTWFzaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNYXNrIERpc2FibGVkICh0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyByZWdpc3RlciBiaXQgc2hvdWxkIGJlIGV4YWN0IHRoZSBzYW1lIGFzIGFkZHJlc3MgcmVnaXN0ZXIuKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTWFzayBFbmFibGVkICh0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyBhZGRyZXNzIGJpdCBpcyBkb24ndCBjYXJlLikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VVNDSSBzdXBwb3J0IG11bHRpcGxlIGFkZHJlc3MgcmVjb2duaXRpb24gd2l0aCB0d28gYWRkcmVzcyBtYXNrIHJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgYml0IGluIHRoZSBhZGRyZXNzIG1hc2sgcmVnaXN0ZXIgaXMgc2V0IHRvIG9uZSwgaXQgbWVhbnMgdGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgYWRkcmVzcyBiaXQgaXMgZG9uJ3QtY2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBiaXQgaXMgc2V0IHRvIHplcm8sIHRoYXQgbWVhbnMgdGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgYml0IHNob3VsZCBiZSBleGFjdCB0aGUgc2FtZSBhcyBhZGRyZXNzIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSB3YWtlLXVwIGZ1bmN0aW9uIGNhbiBub3Qgc2V0IGFkZHJlc3MgbWFzay4KKyAgICAgKiBAdmFyIFVJMkNfVDo6QUREUk1TSzEKKyAgICAgKiBPZmZzZXQ6IDB4NTAgIFVTQ0kgRGV2aWNlIEFkZHJlc3MgTWFzayBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzk6MF0gICB8QUREUk1TSyAgIHxVU0NJIERldmljZSBBZGRyZXNzIE1hc2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWFzayBEaXNhYmxlZCAodGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgYml0IHNob3VsZCBiZSBleGFjdCB0aGUgc2FtZSBhcyBhZGRyZXNzIHJlZ2lzdGVyLikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE1hc2sgRW5hYmxlZCAodGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgYWRkcmVzcyBiaXQgaXMgZG9uJ3QgY2FyZS4pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVTQ0kgc3VwcG9ydCBtdWx0aXBsZSBhZGRyZXNzIHJlY29nbml0aW9uIHdpdGggdHdvIGFkZHJlc3MgbWFzayByZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGJpdCBpbiB0aGUgYWRkcmVzcyBtYXNrIHJlZ2lzdGVyIGlzIHNldCB0byBvbmUsIGl0IG1lYW5zIHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIGFkZHJlc3MgYml0IGlzIGRvbid0LWNhcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgYml0IGlzIHNldCB0byB6ZXJvLCB0aGF0IG1lYW5zIHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGJpdCBzaG91bGQgYmUgZXhhY3QgdGhlIHNhbWUgYXMgYWRkcmVzcyByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgd2FrZS11cCBmdW5jdGlvbiBjYW4gbm90IHNldCBhZGRyZXNzIG1hc2suCisgICAgICogQHZhciBVSTJDX1Q6OldLQ1RMCisgICAgICogT2Zmc2V0OiAweDU0ICBVU0NJIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdLRU4gICAgICB8V2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8V0tBRERSRU4gIHxXYWtlLXVwIEFkZHJlc3MgTWF0Y2ggRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgY2hpcCBpcyB3b2tlbiB1cCBhY2NvcmRpbmcgZGF0YSB0b2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBjaGlwIGlzIHdva2VuIHVwIGFjY29yZGluZyBhZGRyZXNzIG1hdGNoLgorICAgICAqIEB2YXIgVUkyQ19UOjpXS1NUUworICAgICAqIE9mZnNldDogMHg1OCAgVVNDSSBXYWtlLXVwIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdLRiAgICAgICB8V2FrZS11cCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBjaGlwIGlzIHdva2VuIHVwIGZyb20gUG93ZXItZG93biBtb2RlLCB0aGlzIGJpdCBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIEB2YXIgVUkyQ19UOjpQUk9UQ1RMCisgICAgICogT2Zmc2V0OiAweDVDICBVU0NJIFByb3RvY29sIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxHQ0ZVTkMgICAgfEdlbmVyYWwgQ2FsbCBGdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHZW5lcmFsIENhbGwgRnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdlbmVyYWwgQ2FsbCBGdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxBQSAgICAgICAgfEFzc2VydCBBY2tub3dsZWRnZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBBQSA9MSBwcmlvciB0byBhZGRyZXNzIG9yIGRhdGEgcmVjZWl2ZWQsIGFuIGFja25vd2xlZGdlZCAobG93IGxldmVsIHRvIFNEQSkgd2lsbCBiZSByZXR1cm5lZCBkdXJpbmcgdGhlIGFja25vd2xlZGdlIGNsb2NrIHB1bHNlIG9uIHRoZSBTQ0wgbGluZSB3aGVuIDEuKSBBIHNsYXZlIGlzIGFja25vd2xlZGdpbmcgdGhlIGFkZHJlc3Mgc2VudCBmcm9tIG1hc3RlciwgMi4pIFRoZSByZWNlaXZlciBkZXZpY2VzIGFyZSBhY2tub3dsZWRnaW5nIHRoZSBkYXRhIHNlbnQgYnkgdHJhbnNtaXR0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEFBPTAgcHJpb3IgdG8gYWRkcmVzcyBvciBkYXRhIHJlY2VpdmVkLCBhIE5vdCBhY2tub3dsZWRnZWQgKGhpZ2ggbGV2ZWwgdG8gU0RBKSB3aWxsIGJlIHJldHVybmVkIGR1cmluZyB0aGUgYWNrbm93bGVkZ2UgY2xvY2sgcHVsc2Ugb24gdGhlIFNDTCBsaW5lLgorICAgICAqIHxbMl0gICAgIHxTVE8gICAgICAgfEkyQyBTVE9QIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBNYXN0ZXIgbW9kZSwgc2V0dGluZyBTVE8gdG8gdHJhbnNtaXQgYSBTVE9QIGNvbmRpdGlvbiB0byBidXMgdGhlbiBJMkMgaGFyZHdhcmUgd2lsbCBjaGVjayB0aGUgYnVzIGNvbmRpdGlvbiBpZiBhIFNUT1AgY29uZGl0aW9uIGlzIGRldGVjdGVkIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gYSBzbGF2ZSBtb2RlLCBzZXR0aW5nIFNUTyByZXNldHMgSTJDIGhhcmR3YXJlIHRvIHRoZSBkZWZpbmVkIG5vdCBhZGRyZXNzZWQgc2xhdmUgbW9kZSB3aGVuIGJ1cyBlcnJvciAoVUkyQ19QUk9UU1RTLkVSUklGID0gMSkuCisgICAgICogfFszXSAgICAgfFNUQSAgICAgICB8STJDIFNUQVJUIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXR0aW5nIFNUQSB0byBsb2dpYyAxIHRvIGVudGVyIE1hc3RlciBtb2RlLCB0aGUgSTJDIGhhcmR3YXJlIHNlbmRzIGEgU1RBUlQgb3IgcmVwZWF0IFNUQVJUIGNvbmRpdGlvbiB0byBidXMgd2hlbiB0aGUgYnVzIGlzIGZyZWUuCisgICAgICogfFs0XSAgICAgfEFERFIxMEVOICB8QWRkcmVzcyAxMC1iaXQgRnVuY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBZGRyZXNzIG1hdGNoIDEwIGJpdCBmdW5jdGlvbiBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQWRkcmVzcyBtYXRjaCAxMCBiaXQgZnVuY3Rpb24gaXMgZW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8UFRSRyAgICAgIHxJMkMgUHJvdG9jb2wgVHJpZ2dlciAoV3JpdGUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGEgbmV3IHN0YXRlIGlzIHByZXNlbnQgaW4gdGhlIFVJMkNfUFJPVFNUUyByZWdpc3RlciwgaWYgdGhlIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzIGFyZSBzZXQsIHRoZSBJMkMgaW50ZXJydXB0IGlzIHJlcXVlc3RlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IG11c3Qgd3JpdGUgb25lIGJ5IHNvZnR3YXJlIHRvIHRoaXMgYml0IGFmdGVyIHRoZSByZWxhdGVkIGludGVycnVwdCBmbGFncyBhcmUgc2V0IHRvIDEgYW5kIHRoZSBJMkMgcHJvdG9jb2wgZnVuY3Rpb24gd2lsbCBnbyBhaGVhZCB1bnRpbCB0aGUgU1RPUCBpcyBhY3RpdmUgb3IgdGhlIFBST1RFTiBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJDJ3Mgc3RyZXRjaCBkaXNhYmxlZCBhbmQgdGhlIEkyQyBwcm90b2NvbCBmdW5jdGlvbiB3aWxsIGdvIGFoZWFkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJMkMncyBzdHJldGNoIGFjdGl2ZS4KKyAgICAgKiB8WzhdICAgICB8U0NMT1VURU4gIHxTQ0wgT3V0cHV0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBlbmFibGVzIG1vbml0b3IgcHVsbGluZyBTQ0wgdG8gbG93CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBtb25pdG9yIHdpbGwgcHVsbCBTQ0wgdG8gbG93IHVudGlsIGl0IGhhcyBoYWQgdGltZSB0byByZXNwb25kIHRvIGFuIEkyQyBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDTCBvdXRwdXQgd2lsbCBiZSBmb3JjZWQgaGlnaCBkdWUgdG8gb3BlbiBkcmFpbiBtZWNoYW5pc20uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyQyBtb2R1bGUgbWF5IGFjdCBhcyBhIHNsYXZlIHBlcmlwaGVyYWwganVzdCBsaWtlIGluIG5vcm1hbCBvcGVyYXRpb24sIHRoZSBJMkMgaG9sZHMgdGhlIGNsb2NrIGxpbmUgbG93IHVudGlsIGl0IGhhcyBoYWQgdGltZSB0byBjbGVhciBJMkMgaW50ZXJydXB0LgorICAgICAqIHxbOV0gICAgIHxNT05FTiAgICAgfE1vbml0b3IgTW9kZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyBtb25pdG9yIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBtb25pdG9yIG1vZGUgdGhlIFNEQSBvdXRwdXQgd2lsbCBiZSBwdXQgaW4gaGlnaCBpbXBlZGFuY2UgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcHJldmVudHMgdGhlIEkyQyBtb2R1bGUgZnJvbSBvdXRwdXR0aW5nIGRhdGEgb2YgYW55IGtpbmQgKGluY2x1ZGluZyBBQ0spIG9udG8gdGhlIEkyQyBkYXRhIGJ1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIG1vbml0b3IgbW9kZSBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIG1vbml0b3IgbW9kZSBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IERlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgdGhlIFNDTE9VVEVOIGJpdCwgdGhlIFNDTCBvdXRwdXQgbWF5IGJlIGFsc28gZm9yY2VkIGhpZ2gsIHByZXZlbnRpbmcgdGhlIG1vZHVsZSBmcm9tIGhhdmluZyBjb250cm9sIG92ZXIgdGhlIEkyQyBjbG9jayBsaW5lLgorICAgICAqIHxbMjU6MTZdIHxUT0NOVCAgICAgfFRpbWUtb3V0IENsb2NrIEN5Y2xlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgaW5kaWNhdGVzIGhvdyBtYW55IGNsb2NrIGN5Y2xlIHNlbGVjdGVkIGJ5IFRNQ05UU1JDIChVSTJDX0JSR0VOIFs1XSkgd2hlbiBlYWNoIGludGVycnVwdCBmbGFncyBhcmUgY2xlYXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdGltZS1vdXQgaXMgZW5hYmxlIHdoZW4gVE9DTlQgYmlnZ2VyIHRoYW4gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgVE1DTlRTUkMgKFVJMkNfQlJHRU4gWzVdKSBtdXN0IGJlIHNldCB6ZXJvIG9uIEkyQyBtb2RlLgorICAgICAqIHxbMzFdICAgIHxQUk9URU4gICAgfEkyQyBQcm90b2NvbCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEkyQyBQcm90b2NvbCBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJMkMgUHJvdG9jb2wgZW5hYmxlLgorICAgICAqIEB2YXIgVUkyQ19UOjpQUk9USUVOCisgICAgICogT2Zmc2V0OiAweDYwICBVU0NJIFByb3RvY29sIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxUT0lFTiAgICAgfFRpbWUtb3V0IEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIEkyQyBwcm90b2NvbCwgdGhpcyBiaXQgZW5hYmxlcyB0aGUgaW50ZXJydXB0IGdlbmVyYXRpb24gaW4gY2FzZSBvZiBhIHRpbWUtb3V0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdGltZS1vdXQgaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdGltZS1vdXQgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFNUQVJJRU4gICB8U3RhcnQgQ29uZGl0aW9uIFJlY2VpdmVkIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgYSBwcm90b2NvbCBpbnRlcnJ1cHQgaWYgYSBzdGFydCBjb25kaXRpb24gaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBzdGFydCBjb25kaXRpb24gaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgc3RhcnQgY29uZGl0aW9uIGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxTVE9SSUVOICAgfFN0b3AgQ29uZGl0aW9uIFJlY2VpdmVkIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgYSBwcm90b2NvbCBpbnRlcnJ1cHQgaWYgYSBzdG9wIGNvbmRpdGlvbiBpcyBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHN0b3AgY29uZGl0aW9uIGludGVycnVwdCBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHN0b3AgY29uZGl0aW9uIGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIHxbM10gICAgIHxOQUNLSUVOICAgfE5vbiAtIEFja25vd2xlZGdlIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgYSBwcm90b2NvbCBpbnRlcnJ1cHQgaWYgYSBub24gLSBhY2tub3dsZWRnZSBpcyBkZXRlY3RlZCBieSBhIG1hc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIG5vbiAtIGFja25vd2xlZGdlIGludGVycnVwdCBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIG5vbiAtIGFja25vd2xlZGdlIGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxBUkJMT0lFTiAgfEFyYml0cmF0aW9uIExvc3QgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiBhIHByb3RvY29sIGludGVycnVwdCBpZiBhbiBhcmJpdHJhdGlvbiBsb3N0IGV2ZW50IGlzIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgYXJiaXRyYXRpb24gbG9zdCBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBhcmJpdHJhdGlvbiBsb3N0IGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxFUlJJRU4gICAgfEVycm9yIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgYSBwcm90b2NvbCBpbnRlcnJ1cHQgaWYgYW4gSTJDIGVycm9yIGNvbmRpdGlvbiBpcyBkZXRlY3RlZCAoaW5kaWNhdGVkIGJ5IEVSUiAoVUkyQ19QUk9UU1RTIFsxNl0pKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGVycm9yIGludGVycnVwdCBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGVycm9yIGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxBQ0tJRU4gICAgfEFja25vd2xlZGdlIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgYSBwcm90b2NvbCBpbnRlcnJ1cHQgaWYgYW4gYWNrbm93bGVkZ2UgaXMgZGV0ZWN0ZWQgYnkgYSBtYXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKyAgICAgKiBAdmFyIFVJMkNfVDo6UFJPVFNUUworICAgICAqIE9mZnNldDogMHg2NCAgVVNDSSBQcm90b2NvbCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNV0gICAgIHxUT0lGICAgICAgfFRpbWUtb3V0IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEEgdGltZS1vdXQgaW50ZXJydXB0IHN0YXR1cyBoYXMgbm90IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHRpbWUtb3V0IGludGVycnVwdCBzdGF0dXMgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGluZyBvbmUgaW50byB0aGlzIGJpdAorICAgICAqIHxbNl0gICAgIHxPTkJVU1kgICAgfE9uIEJ1cyBCdXN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGVzIHRoYXQgYSBjb21tdW5pY2F0aW9uIGlzIGluIHByb2dyZXNzIG9uIHRoZSBidXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBhIFNUQVJUIGNvbmRpdGlvbiBpcyBkZXRlY3RlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGNsZWFyZWQgYnkgaGFyZHdhcmUgd2hlbiBhIFNUT1AgY29uZGl0aW9uIGlzIGRldGVjdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBidXMgaXMgSURMRSAoYm90aCBTQ0xLIGFuZCBTREEgSGlnaCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBidXMgaXMgYnVzeS4KKyAgICAgKiB8WzhdICAgICB8U1RBUklGICAgIHxTdGFydCBDb25kaXRpb24gUmVjZWl2ZWQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBhIHN0YXJ0IGNvbmRpdGlvbiBvciByZXBlYXRlZCBzdGFydCBjb25kaXRpb24gaGFzIGJlZW4gZGV0ZWN0ZWQgb24gbWFzdGVyIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxIb3dldmVyLCB0aGlzIGJpdCBhbHNvIGluZGljYXRlcyB0aGF0IGEgcmVwZWF0ZWQgc3RhcnQgY29uZGl0aW9uIGhhcyBiZWVuIGRldGVjdGVkIG9uIHNsYXZlIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QSBwcm90b2NvbCBpbnRlcnJ1cHQgY2FuIGJlIGdlbmVyYXRlZCBpZiBVSTJDX1BST1RDVEwuU1RBUklFTiA9IDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEEgc3RhcnQgY29uZGl0aW9uIGhhcyBub3QgeWV0IGJlZW4gZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgc3RhcnQgY29uZGl0aW9uIGhhcyBiZWVuIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGluZyBvbmUgaW50byB0aGlzIGJpdAorICAgICAqIHxbOV0gICAgIHxTVE9SSUYgICAgfFN0b3AgQ29uZGl0aW9uIFJlY2VpdmVkIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgYSBzdG9wIGNvbmRpdGlvbiBoYXMgYmVlbiBkZXRlY3RlZCBvbiB0aGUgSTJDIGJ1cyBsaW5lcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgcHJvdG9jb2wgaW50ZXJydXB0IGNhbiBiZSBnZW5lcmF0ZWQgaWYgVUkyQ19QUk9UQ1RMLlNUT1JJRU4gPSAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBIHN0b3AgY29uZGl0aW9uIGhhcyBub3QgeWV0IGJlZW4gZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgc3RvcCBjb25kaXRpb24gaGFzIGJlZW4gZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0aW5nIG9uZSBpbnRvIHRoaXMgYml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gc2xhdmUgUlggbW9kZS4KKyAgICAgKiB8WzEwXSAgICB8TkFDS0lGICAgIHxOb24gLSBBY2tub3dsZWRnZSBSZWNlaXZlZCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IGEgbm9uIC0gYWNrbm93bGVkZ2UgaGFzIGJlZW4gcmVjZWl2ZWQgaW4gbWFzdGVyIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBIHByb3RvY29sIGludGVycnVwdCBjYW4gYmUgZ2VuZXJhdGVkIGlmIFVJMkNfUFJPVENUTC5OQUNLSUVOID0gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQSBub24gLSBhY2tub3dsZWRnZSBoYXMgbm90IGJlZW4gcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgbm9uIC0gYWNrbm93bGVkZ2UgaGFzIGJlZW4gcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0aW5nIG9uZSBpbnRvIHRoaXMgYml0CisgICAgICogfFsxMV0gICAgfEFSQkxPSUYgICB8QXJiaXRyYXRpb24gTG9zdCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IGFuIGFyYml0cmF0aW9uIGhhcyBiZWVuIGxvc3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBIHByb3RvY29sIGludGVycnVwdCBjYW4gYmUgZ2VuZXJhdGVkIGlmIFVJMkNfUFJPVENUTC5BUkJMT0lFTiA9IDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFuIGFyYml0cmF0aW9uIGhhcyBub3QgYmVlbiBsb3N0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBbiBhcmJpdHJhdGlvbiBoYXMgYmVlbiBsb3N0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGluZyBvbmUgaW50byB0aGlzIGJpdAorICAgICAqIHxbMTJdICAgIHxFUlJJRiAgICAgfEVycm9yIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgYSBCdXMgRXJyb3Igb2NjdXJzIHdoZW4gYSBTVEFSVCBvciBTVE9QIGNvbmRpdGlvbiBpcyBwcmVzZW50IGF0IGFuIGlsbGVnYWwgcG9zaXRpb24gaW4gdGhlIGZvcm1hdGlvbiBmcmFtZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEV4YW1wbGUgb2YgaWxsZWdhbCBwb3NpdGlvbiBhcmUgZHVyaW5nIHRoZSBzZXJpYWwgdHJhbnNmZXIgb2YgYW4gYWRkcmVzcyBieXRlLCBhIGRhdGEgYnl0ZSBvciBhbiBhY2tub3dsZWRnZSBiaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBIHByb3RvY29sIGludGVycnVwdCBjYW4gYmUgZ2VuZXJhdGVkIGlmIFVJMkNfUFJPVENUTC5FUlJJRU4gPSAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBbiBJMkMgZXJyb3IgaGFzIG5vdCBiZWVuIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBbiBJMkMgZXJyb3IgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0aW5nIG9uZSBpbnRvIHRoaXMgYml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gc2xhdmUgbW9kZSwgdXNlciBtdXN0IHdyaXRlIG9uZSBpbnRvIFNUTyByZWdpc3RlciB0byB0aGUgZGVmaW5lZCBub3QgYWRkcmVzc2VkIHNsYXZlIG1vZGUuCisgICAgICogfFsxM10gICAgfEFDS0lGICAgICB8QWNrbm93bGVkZ2UgUmVjZWl2ZWQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBhbiBhY2tub3dsZWRnZSBoYXMgYmVlbiByZWNlaXZlZCBpbiBtYXN0ZXIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgcHJvdG9jb2wgaW50ZXJydXB0IGNhbiBiZSBnZW5lcmF0ZWQgaWYgVUkyQ19QUk9UQ1RMLkFDS0lFTiA9IDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFuIGFja25vd2xlZGdlIGhhcyBub3QgYmVlbiByZWNlaXZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQW4gYWNrbm93bGVkZ2UgaGFzIGJlZW4gcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0aW5nIG9uZSBpbnRvIHRoaXMgYml0CisgICAgICogfFsxNF0gICAgfFNMQVNFTCAgICB8U2xhdmUgU2VsZWN0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IHRoaXMgZGV2aWNlIGhhcyBiZWVuIHNlbGVjdGVkIGFzIHNsYXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgZGV2aWNlIGlzIG5vdCBzZWxlY3RlZCBhcyBzbGF2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGRldmljZSBpcyBzZWxlY3RlZCBhcyBzbGF2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBoYXMgbm8gaW50ZXJydXB0IHNpZ25hbCwgYW5kIGl0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGJ5IGhhcmR3YXJlLgorICAgICAqIHxbMTVdICAgIHxTTEFSRUFEICAgfFNsYXZlIFJlYWQgUmVxdWVzdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBhIHNsYXZlIHJlYWQgcmVxdWVzdCBoYXMgYmVlbiBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQSBzbGF2ZSBSL1cgYml0IGlzIDEgaGFzIG5vdCBiZWVuIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHNsYXZlIFIvVyBiaXQgaXMgMSBoYXMgYmVlbiBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBoYXMgbm8gaW50ZXJydXB0IHNpZ25hbCwgYW5kIGl0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGJ5IGhhcmR3YXJlLgorICAgICAqIHxbMTZdICAgIHxXS0FLRE9ORSAgfFdha2V1cCBBZGRyZXNzIEZyYW1lIEFja25vd2xlZGdlIEJpdCBEb25lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBBQ0sgYml0IGN5Y2xlIG9mIGFkZHJlc3MgbWF0Y2ggZnJhbWUgaXNuJ3QgZG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIEFDSyBiaXQgY3ljbGUgb2YgYWRkcmVzcyBtYXRjaCBmcmFtZSBpcyBkb25lIGluIHBvd2VyLWRvd24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgY2FuJ3QgcmVsZWFzZSB3aGVuIFdLVVBJRiBpcyBzZXQuCisgICAgICogfFsxN10gICAgfFdSU1RTV0sgICB8UmVhZC9Xcml0ZSBTdGF0dXMgQml0IGluIEFkZHJlc3MgV2FrZXVwIEZyYW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdyaXRlIGNvbW1hbmQgYmUgcmVjb3JkIG9uIHRoZSBhZGRyZXNzIG1hdGNoIHdha2V1cCBmcmFtZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVhZCBjb21tYW5kIGJlIHJlY29yZCBvbiB0aGUgYWRkcmVzcyBtYXRjaCB3YWtldXAgZnJhbWUuCisgICAgICogfFsxOF0gICAgfEJVU0hBTkcgICB8QnVzIEhhbmctdXAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgYnVzIGhhbmctdXAgc3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlcmUgaXMgNC1iaXQgY291bnRlciBjb3VudCB3aGVuIFNDTCBob2xkIGhpZ2ggYW5kIHJlZmVyIGZTQU1QX0NMSworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBoYW5nLXVwIGNvdW50ZXIgd2lsbCBjb3VudCB0byBvdmVyZmxvdyBhbmQgc2V0IHRoaXMgYml0IHdoZW4gU0RBIGlzIGxvdworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3VudGVyIHdpbGwgYmUgcmVzZXQgYnkgZmFsbGluZyBlZGdlIG9mIFNDTCBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBidXMgaXMgbm9ybWFsIHN0YXR1cyBmb3IgdHJhbnNtaXNzaW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgYnVzIGlzIGhhbmctdXAgc3RhdHVzIGZvciB0cmFuc21pc3Npb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaGFzIG5vIGludGVycnVwdCBzaWduYWwsIGFuZCBpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSBieSBoYXJkd2FyZSB3aGVuIGEgU1RBUlQgY29uZGl0aW9uIGlzIHByZXNlbnQuCisgICAgICogfFsxOV0gICAgfEVSUkFSQkxPICB8RXJyb3IgQXJiaXRyYXRpb24gTG9zdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyBidXMgYXJiaXRyYXRpb24gbG9zdCBkdWUgdG8gYmlnZ2VyIG5vaXNlIHdoaWNoIGlzIGNhbid0IGJlIGZpbHRlcmVkIGJ5IGlucHV0IHByb2Nlc3NvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBJMkMgY2FuIHNlbmQgc3RhcnQgY29uZGl0aW9uIHdoZW4gRVJSQVJCTE8gaXMgc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cyB0aGlzIGJpdCBkb2Vzbid0IGJlIGNhcmVkIG9uIHNsYXZlIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBidXMgaXMgbm9ybWFsIHN0YXR1cyBmb3IgdHJhbnNtaXNzaW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgYnVzIGlzIGVycm9yIGFyYml0cmF0aW9uIGxvc3Qgc3RhdHVzIGZvciB0cmFuc21pc3Npb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaGFzIG5vIGludGVycnVwdCBzaWduYWwsIGFuZCBpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSBieSBoYXJkd2FyZSB3aGVuIGEgU1RBUlQgY29uZGl0aW9uIGlzIHByZXNlbnQuCisgICAgICogQHZhciBVSTJDX1Q6OkFETUFUCisgICAgICogT2Zmc2V0OiAweDg4ICBJMkMgU2xhdmUgTWF0Y2ggQWRkcmVzcyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEFETUFUMCAgICB8VVNDSSBBZGRyZXNzIDAgTWF0Y2ggU3RhdHVzIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBhZGRyZXNzIDAgaXMgbWF0Y2hlZCwgaGFyZHdhcmUgd2lsbCBpbmZvcm0gd2hpY2ggYWRkcmVzcyB1c2VkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBzZXQgdG8gMSwgYW5kIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbMV0gICAgIHxBRE1BVDEgICAgfFVTQ0kgQWRkcmVzcyAxIE1hdGNoIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gYWRkcmVzcyAxIGlzIG1hdGNoZWQsIGhhcmR3YXJlIHdpbGwgaW5mb3JtIHdoaWNoIGFkZHJlc3MgdXNlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgc2V0IHRvIDEsIGFuZCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiBAdmFyIFVJMkNfVDo6VE1DVEwKKyAgICAgKiBPZmZzZXQ6IDB4OEMgIEkyQyBUaW1pbmcgQ29uZmlndXJlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbODowXSAgIHxTVENUTCAgICAgfFNldHVwIFRpbWUgQ29uZmlndXJlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBkZWxheSB0aW1pbmcgYmV0d2VlbiBTREEgZWRnZSBhbmQgU0NMIHJpc2luZyBlZGdlIGluIHRyYW5zbWlzc2lvbiBtb2RlLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGVsYXkgc2V0dXAgdGltZSBpcyBudW1iZXJzIG9mIHBlcmlwaGVyYWwgY2xvY2sgPSBTVENUTCB4IGZQQ0xLLgorICAgICAqIHxbMjQ6MTZdIHxIVENUTCAgICAgfEhvbGQgVGltZSBDb25maWd1cmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZGVsYXkgdGltaW5nIGJldHdlZW4gU0NMIGZhbGxpbmcgZWRnZSBTREEgZWRnZSBpbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHRyYW5zbWlzc2lvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZWxheSBob2xkIHRpbWUgaXMgbnVtYmVycyBvZiBwZXJpcGhlcmFsIGNsb2NrID0gSFRDVEwgeCBmUENMSy4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBVU0NJIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsxXTsKKyAgICBfX0lPIHVpbnQzMl90IEJSR0VOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBVU0NJIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVs4XTsKKyAgICBfX0lPIHVpbnQzMl90IExJTkVDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDJjXSBVU0NJIExpbmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBUWERBVDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzMF0gVVNDSSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUlhEQVQ7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMzRdIFVTQ0kgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUyWzNdOworICAgIF9fSU8gdWludDMyX3QgREVWQUREUjA7ICAgICAgICAgICAgICAvKiE8IFsweDAwNDRdIFVTQ0kgRGV2aWNlIEFkZHJlc3MgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERFVkFERFIxOyAgICAgICAgICAgICAgLyohPCBbMHgwMDQ4XSBVU0NJIERldmljZSBBZGRyZXNzIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRERSTVNLMDsgICAgICAgICAgICAgIC8qITwgWzB4MDA0Y10gVVNDSSBEZXZpY2UgQWRkcmVzcyBNYXNrIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUREUk1TSzE7ICAgICAgICAgICAgICAvKiE8IFsweDAwNTBdIFVTQ0kgRGV2aWNlIEFkZHJlc3MgTWFzayBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFdLQ1RMOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDU0XSBVU0NJIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBXS1NUUzsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA1OF0gVVNDSSBXYWtlLXVwIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFJPVENUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwNWNdIFVTQ0kgUHJvdG9jb2wgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBST1RJRU47ICAgICAgICAgICAgICAgLyohPCBbMHgwMDYwXSBVU0NJIFByb3RvY29sIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQUk9UU1RTOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA2NF0gVVNDSSBQcm90b2NvbCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTNbOF07CisgICAgX19JTyB1aW50MzJfdCBBRE1BVDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA4OF0gSTJDIFNsYXZlIE1hdGNoIEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVE1DVEw7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwOGNdIEkyQyBUaW1pbmcgQ29uZmlndXJlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBVSTJDX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIFVJMkNfQ09OU1QgVUkyQyBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBVSTJDIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgVUkyQ19DVExfRlVOTU9ERV9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6Q1RMOiBGVU5NT0RFIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVJMkNfQ1RMX0ZVTk1PREVfTXNrICAgICAgICAgICAgICgweDd1bCA8PCBVSTJDX0NUTF9GVU5NT0RFX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkNUTDogRlVOTU9ERSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfQlJHRU5fUkNMS1NFTF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkJSR0VOOiBSQ0xLU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVSTJDX0JSR0VOX1JDTEtTRUxfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19CUkdFTl9SQ0xLU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpCUkdFTjogUkNMS1NFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX0JSR0VOX1BUQ0xLU0VMX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpCUkdFTjogUFRDTEtTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUkyQ19CUkdFTl9QVENMS1NFTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfQlJHRU5fUFRDTEtTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QlJHRU46IFBUQ0xLU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19CUkdFTl9TUENMS1NFTF9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QlJHRU46IFNQQ0xLU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVJMkNfQlJHRU5fU1BDTEtTRUxfTXNrICAgICAgICAgICgweDN1bCA8PCBVSTJDX0JSR0VOX1NQQ0xLU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkJSR0VOOiBTUENMS1NFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfQlJHRU5fVE1DTlRFTl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkJSR0VOOiBUTUNOVEVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVSTJDX0JSR0VOX1RNQ05URU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19CUkdFTl9UTUNOVEVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpCUkdFTjogVE1DTlRFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX0JSR0VOX1RNQ05UU1JDX1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpCUkdFTjogVE1DTlRTUkMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUkyQ19CUkdFTl9UTUNOVFNSQ19Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfQlJHRU5fVE1DTlRTUkNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QlJHRU46IFRNQ05UU1JDIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19CUkdFTl9QRFNDTlRfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QlJHRU46IFBEU0NOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVJMkNfQlJHRU5fUERTQ05UX01zayAgICAgICAgICAgICgweDN1bCA8PCBVSTJDX0JSR0VOX1BEU0NOVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkJSR0VOOiBQRFNDTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfQlJHRU5fRFNDTlRfUG9zICAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkJSR0VOOiBEU0NOVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVSTJDX0JSR0VOX0RTQ05UX01zayAgICAgICAgICAgICAoMHgxZnVsIDw8IFVJMkNfQlJHRU5fRFNDTlRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpCUkdFTjogRFNDTlQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX0JSR0VOX0NMS0RJVl9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpCUkdFTjogQ0xLRElWIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19CUkdFTl9DTEtESVZfTXNrICAgICAgICAgICAgKDB4M2ZmdWwgPDwgVUkyQ19CUkdFTl9DTEtESVZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QlJHRU46IENMS0RJViBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19MSU5FQ1RMX0xTQl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6TElORUNUTDogTFNCIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVJMkNfTElORUNUTF9MU0JfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVSTJDX0xJTkVDVExfTFNCX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkxJTkVDVEw6IExTQiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfTElORUNUTF9EV0lEVEhfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkxJTkVDVEw6IERXSURUSCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVSTJDX0xJTkVDVExfRFdJRFRIX01zayAgICAgICAgICAoMHhmdWwgPDwgVUkyQ19MSU5FQ1RMX0RXSURUSF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpMSU5FQ1RMOiBEV0lEVEggTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1RYREFUX1RYREFUX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpUWERBVDogVFhEQVQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19UWERBVF9UWERBVF9Nc2sgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFVJMkNfVFhEQVRfVFhEQVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6VFhEQVQ6IFRYREFUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19SWERBVF9SWERBVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UlhEQVQ6IFJYREFUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVJMkNfUlhEQVRfUlhEQVRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBVSTJDX1JYREFUX1JYREFUX1BvcykgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlJYREFUOiBSWERBVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfREVWQUREUjBfREVWQUREUl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkRFVkFERFIwOiBERVZBRERSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVSTJDX0RFVkFERFIwX0RFVkFERFJfTXNrICAgICAgICAoMHgzZmZ1bCA8PCBVSTJDX0RFVkFERFIwX0RFVkFERFJfUG9zKSAgICAgICAgICAgIC8qITwgVUkyQ19UOjpERVZBRERSMDogREVWQUREUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX0RFVkFERFIxX0RFVkFERFJfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpERVZBRERSMTogREVWQUREUiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUkyQ19ERVZBRERSMV9ERVZBRERSX01zayAgICAgICAgKDB4M2ZmdWwgPDwgVUkyQ19ERVZBRERSMV9ERVZBRERSX1BvcykgICAgICAgICAgICAvKiE8IFVJMkNfVDo6REVWQUREUjE6IERFVkFERFIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19BRERSTVNLMF9BRERSTVNLX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QUREUk1TSzA6IEFERFJNU0sgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVJMkNfQUREUk1TSzBfQUREUk1TS19Nc2sgICAgICAgICgweDNmZnVsIDw8IFVJMkNfQUREUk1TSzBfQUREUk1TS19Qb3MpICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkFERFJNU0swOiBBRERSTVNLIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfQUREUk1TSzFfQUREUk1TS19Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkFERFJNU0sxOiBBRERSTVNLIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVSTJDX0FERFJNU0sxX0FERFJNU0tfTXNrICAgICAgICAoMHgzZmZ1bCA8PCBVSTJDX0FERFJNU0sxX0FERFJNU0tfUG9zKSAgICAgICAgICAgIC8qITwgVUkyQ19UOjpBRERSTVNLMTogQUREUk1TSyBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1dLQ1RMX1dLRU5fUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpXS0NUTDogV0tFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19XS0NUTF9XS0VOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfV0tDVExfV0tFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6V0tDVEw6IFdLRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19XS0NUTF9XS0FERFJFTl9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6V0tDVEw6IFdLQUREUkVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVJMkNfV0tDVExfV0tBRERSRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVSTJDX1dLQ1RMX1dLQUREUkVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OldLQ1RMOiBXS0FERFJFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfV0tTVFNfV0tGX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OldLU1RTOiBXS0YgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBVSTJDX1dLU1RTX1dLRl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19XS1NUU19XS0ZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpXS1NUUzogV0tGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RDVExfR0NGVU5DX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBHQ0ZVTkMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX0dDRlVOQ19Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVENUTF9HQ0ZVTkNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogR0NGVU5DIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX0FBX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogQUEgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVENUTF9BQV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RDVExfQUFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IEFBIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVENUTF9TVE9fUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IFNUTyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RDVExfU1RPX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UQ1RMX1NUT19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBTVE8gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RDVExfU1RBX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBTVEEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX1NUQV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVENUTF9TVEFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogU1RBIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX0FERFIxMEVOX1BvcyAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogQUREUjEwRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVJMkNfUFJPVENUTF9BRERSMTBFTl9Nc2sgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RDVExfQUREUjEwRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IEFERFIxMEVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVENUTF9QVFJHX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IFBUUkcgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RDVExfUFRSR19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UQ1RMX1BUUkdfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBQVFJHIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RDVExfU0NMT1VURU5fUG9zICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBTQ0xPVVRFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX1NDTE9VVEVOX01zayAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVENUTF9TQ0xPVVRFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogU0NMT1VURU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX01PTkVOX1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogTU9ORU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVENUTF9NT05FTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RDVExfTU9ORU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IE1PTkVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVENUTF9UT0NOVF9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IFRPQ05UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RDVExfVE9DTlRfTXNrICAgICAgICAgICAoMHgzZmZ1bCA8PCBVSTJDX1BST1RDVExfVE9DTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBUT0NOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RDVExfUFJPVEVOX1BvcyAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBQUk9URU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX1BST1RFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVENUTF9QUk9URU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogUFJPVEVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9USUVOX1RPSUVOX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVElFTjogVE9JRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVElFTl9UT0lFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RJRU5fVE9JRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RJRU46IFRPSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVElFTl9TVEFSSUVOX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RJRU46IFNUQVJJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVSTJDX1BST1RJRU5fU1RBUklFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9USUVOX1NUQVJJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9USUVOOiBTVEFSSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RJRU5fU1RPUklFTl9Qb3MgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9USUVOOiBTVE9SSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9USUVOX1NUT1JJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVElFTl9TVE9SSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVElFTjogU1RPUklFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9USUVOX05BQ0tJRU5fUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVElFTjogTkFDS0lFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVElFTl9OQUNLSUVOX01zayAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RJRU5fTkFDS0lFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RJRU46IE5BQ0tJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVElFTl9BUkJMT0lFTl9Qb3MgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RJRU46IEFSQkxPSUVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVSTJDX1BST1RJRU5fQVJCTE9JRU5fTXNrICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9USUVOX0FSQkxPSUVOX1BvcykgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9USUVOOiBBUkJMT0lFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RJRU5fRVJSSUVOX1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9USUVOOiBFUlJJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9USUVOX0VSUklFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVElFTl9FUlJJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVElFTjogRVJSSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9USUVOX0FDS0lFTl9Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVElFTjogQUNLSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVElFTl9BQ0tJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RJRU5fQUNLSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RJRU46IEFDS0lFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVFNUU19UT0lGX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IFRPSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RTVFNfVE9JRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UU1RTX1RPSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBUT0lGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RTVFNfT05CVVNZX1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBPTkJVU1kgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UU1RTX09OQlVTWV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVFNUU19PTkJVU1lfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogT05CVVNZIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UU1RTX1NUQVJJRl9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogU1RBUklGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RTVFNfU1RBUklGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IFNUQVJJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVFNUU19TVE9SSUZfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IFNUT1JJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RTVFNfU1RPUklGX01zayAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UU1RTX1NUT1JJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBTVE9SSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RTVFNfTkFDS0lGX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBOQUNLSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVFNUU19OQUNLSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogTkFDS0lGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UU1RTX0FSQkxPSUZfUG9zICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogQVJCTE9JRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVFNUU19BUkJMT0lGX01zayAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RTVFNfQVJCTE9JRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IEFSQkxPSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVFNUU19FUlJJRl9Qb3MgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IEVSUklGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RTVFNfRVJSSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UU1RTX0VSUklGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBFUlJJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RTVFNfQUNLSUZfUG9zICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBBQ0tJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UU1RTX0FDS0lGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVFNUU19BQ0tJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogQUNLSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UU1RTX1NMQVNFTF9Qb3MgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogU0xBU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVFNUU19TTEFTRUxfTXNrICAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RTVFNfU0xBU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IFNMQVNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVFNUU19TTEFSRUFEX1BvcyAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IFNMQVJFQUQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVSTJDX1BST1RTVFNfU0xBUkVBRF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UU1RTX1NMQVJFQURfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBTTEFSRUFEIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RTVFNfV0tBS0RPTkVfUG9zICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBXS0FLRE9ORSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UU1RTX1dLQUtET05FX01zayAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVFNUU19XS0FLRE9ORV9Qb3MpICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogV0tBS0RPTkUgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UU1RTX1dSU1RTV0tfUG9zICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogV1JTVFNXSyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVFNUU19XUlNUU1dLX01zayAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RTVFNfV1JTVFNXS19Qb3MpICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IFdSU1RTV0sgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVFNUU19CVVNIQU5HX1BvcyAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IEJVU0hBTkcgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVSTJDX1BST1RTVFNfQlVTSEFOR19Nc2sgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UU1RTX0JVU0hBTkdfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBCVVNIQU5HIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RTVFNfRVJSQVJCTE9fUG9zICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBFUlJBUkJMTyBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UU1RTX0VSUkFSQkxPX01zayAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVFNUU19FUlJBUkJMT19Qb3MpICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogRVJSQVJCTE8gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19BRE1BVF9BRE1BVDBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QURNQVQ6IEFETUFUMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVJMkNfQURNQVRfQURNQVQwX01zayAgICAgICAgICAgICgweDF1bCA8PCBVSTJDX0FETUFUX0FETUFUMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkFETUFUOiBBRE1BVDAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfQURNQVRfQURNQVQxX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkFETUFUOiBBRE1BVDEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVSTJDX0FETUFUX0FETUFUMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19BRE1BVF9BRE1BVDFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpBRE1BVDogQURNQVQxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1RNQ1RMX1NUQ1RMX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpUTUNUTDogU1RDVEwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19UTUNUTF9TVENUTF9Nc2sgICAgICAgICAgICAgKDB4MWZmdWwgPDwgVUkyQ19UTUNUTF9TVENUTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6VE1DVEw6IFNUQ1RMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19UTUNUTF9IVENUTF9Qb3MgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6VE1DVEw6IEhUQ1RMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVJMkNfVE1DVExfSFRDVExfTXNrICAgICAgICAgICAgICgweDFmZnVsIDw8IFVJMkNfVE1DVExfSFRDVExfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlRNQ1RMOiBIVENUTCBNYXNrICAgICAgICAgICAgICAqLworCisvKipAfSovIC8qIFVJMkNfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFVJMkMgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKyNlbmRpZiAvKiBfX1VJMkNfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3VzYmRfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdXNiZF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzQwZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3VzYmRfcmVnLmgKQEAgLTAsMCArMSw2NjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB1c2JkX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBVU0JEIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1VTQkRfUkVHX0hfXworI2RlZmluZSBfX1VTQkRfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVU0IgRGV2aWNlIENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBVU0JEIFVTQiBEZXZpY2UgQ29udHJvbGxlcihVU0JEKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBVU0JEIENvbnRyb2xsZXIKK0B7ICovCisKKworCisvKioKKyAgKiBAYnJpZWYgVVNCRCBlbmRwb2ludHMgcmVnaXN0ZXIKKyAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqCisgICAgICogQHZhciBVU0JEX0VQX1Q6OkJVRlNFRworICAgICAqIE9mZnNldDogMHg1MDAvMHg1MTAvMHg1MjAvMHg1MzAvMHg1NDAvMHg1NTAvMHg1NjAvMHg1NzAvMHg1ODAvMHg1OTAvMHg1QTAvMHg1QjAgIEVuZHBvaW50IEJ1ZmZlciBTZWdtZW50YXRpb24gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbODozXSAgIHxCVUZTRUcgICAgfEVuZHBvaW50IEJ1ZmZlciBTZWdtZW50YXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBvZmZzZXQgYWRkcmVzcyBmb3IgZWFjaCBlbmRwb2ludCB3aXRoIHRoZSBVU0IgU1JBTSBzdGFydGluZyBhZGRyZXNzIFRoZSBlZmZlY3RpdmUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgZW5kcG9pbnQgaXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVU0JEX1NSQU0gYWRkcmVzcyArIHsgQlVGU0VHLCAzJ2IwMDB9CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlcmUgdGhlIFVTQkRfU1JBTSBhZGRyZXNzID0gVVNCRF9CQSsweDEwMGguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVmZXIgdG8gdGhlIHNlY3Rpb24gNi4yOS41LjcgZm9yIHRoZSBlbmRwb2ludCBTUkFNIHN0cnVjdHVyZSBhbmQgaXRzIGRlc2NyaXB0aW9uLgorICAgICAqIEB2YXIgVVNCRF9FUF9UOjpNWFBMRAorICAgICAqIE9mZnNldDogMHg1MDQvMHg1MTQvMHg1MjQvMHg1MzQvMHg1NDQvMHg1NTQvMHg1NjQvMHg1NzQvMHg1ODQvMHg1OTQvMHg1QTQvMHg1QjQgIEVuZHBvaW50IE1heGltYWwgUGF5bG9hZCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs4OjBdICAgfE1YUExEICAgICB8TWF4aW1hbCBQYXlsb2FkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGVmaW5lIHRoZSBkYXRhIGxlbmd0aCB3aGljaCBpcyB0cmFuc21pdHRlZCB0byBob3N0IChJTiB0b2tlbikgb3IgdGhlIGFjdHVhbCBkYXRhIGxlbmd0aCB3aGljaCBpcyByZWNlaXZlZCBmcm9tIHRoZSBob3N0IChPVVQgdG9rZW4pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgYWxzbyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIGVuZHBvaW50IGlzIHJlYWR5IHRvIGJlIHRyYW5zbWl0dGVkIGluIElOIHRva2VuIG9yIHJlY2VpdmVkIGluIE9VVCB0b2tlbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMSkgV2hlbiB0aGUgcmVnaXN0ZXIgaXMgd3JpdHRlbiBieSBDUFUsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIElOIHRva2VuLCB0aGUgdmFsdWUgb2YgTVhQTEQgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGRhdGEgbGVuZ3RoIHRvIGJlIHRyYW5zbWl0dGVkIGFuZCBpbmRpY2F0ZSB0aGUgZGF0YSBidWZmZXIgaXMgcmVhZHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIE9VVCB0b2tlbiwgaXQgbWVhbnMgdGhhdCB0aGUgY29udHJvbGxlciBpcyByZWFkeSB0byByZWNlaXZlIGRhdGEgZnJvbSB0aGUgaG9zdCBhbmQgdGhlIHZhbHVlIG9mIE1YUExEIGlzIHRoZSBtYXhpbWFsIGRhdGEgbGVuZ3RoIGNvbWVzIGZyb20gaG9zdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMikgV2hlbiB0aGUgcmVnaXN0ZXIgaXMgcmVhZCBieSBDUFUsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIElOIHRva2VuLCB0aGUgdmFsdWUgb2YgTVhQTEQgaXMgaW5kaWNhdGVkIGJ5IHRoZSBkYXRhIGxlbmd0aCBiZSB0cmFuc21pdHRlZCB0byBob3N0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIE9VVCB0b2tlbiwgdGhlIHZhbHVlIG9mIE1YUExEIGlzIGluZGljYXRlZCB0aGUgYWN0dWFsIGRhdGEgbGVuZ3RoIHJlY2VpdmluZyBmcm9tIGhvc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogT25jZSBNWFBMRCBpcyB3cml0dGVuLCB0aGUgZGF0YSBwYWNrZXRzIHdpbGwgYmUgdHJhbnNtaXR0ZWQvcmVjZWl2ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgSU4vT1VUIHRva2VuIGFycml2ZWQuCisgICAgICogQHZhciBVU0JEX0VQX1Q6OkNGRworICAgICAqIE9mZnNldDogMHg1MDgvMHg1MTgvMHg1MjgvMHg1MzgvMHg1NDgvMHg1NTgvMHg1NjgvMHg1NzgvMHg1ODgvMHg1OTgvMHg1QTgvMHg1QjggIEVuZHBvaW50IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxFUE5VTSAgICAgfEVuZHBvaW50IE51bWJlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gZGVmaW5lIHRoZSBlbmRwb2ludCBudW1iZXIgb2YgdGhlIGN1cnJlbnQgZW5kcG9pbnQKKyAgICAgKiB8WzRdICAgICB8SVNPQ0ggICAgIHxJc29jaHJvbm91cyBFbmRwb2ludAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gc2V0IHRoZSBlbmRwb2ludCBhcyBJc29jaHJvbm91cyBlbmRwb2ludCwgbm8gaGFuZHNoYWtlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBJc29jaHJvbm91cyBlbmRwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSXNvY2hyb25vdXMgZW5kcG9pbnQuCisgICAgICogfFs2OjVdICAgfFNUQVRFICAgICB8RW5kcG9pbnQgU1RBVEUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IEVuZHBvaW50IGlzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gT3V0IGVuZHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gSU4gZW5kcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBVbmRlZmluZWQuCisgICAgICogfFs3XSAgICAgfERTUVNZTkMgICB8RGF0YSBTZXF1ZW5jZSBTeW5jaHJvbml6YXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gREFUQTAgUElELgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEQVRBMSBQSUQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBEQVRBMCBvciBEQVRBMSBQSUQgaW4gdGhlIGZvbGxvd2luZyBJTiB0b2tlbiB0cmFuc2FjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGhhcmR3YXJlIHdpbGwgdG9nZ2xlIGF1dG9tYXRpY2FsbHkgaW4gSU4gdG9rZW4gYmFzZSBvbiB0aGUgYml0LgorICAgICAqIHxbOV0gICAgIHxDU1RBTEwgICAgfENsZWFyIFNUQUxMIFJlc3BvbnNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpc2FibGUgdGhlIGRldmljZSB0byBjbGVhciB0aGUgU1RBTEwgaGFuZHNoYWtlIGluIHNldHVwIHN0YWdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhciB0aGUgZGV2aWNlIHRvIHJlc3BvbnNlIFNUQUxMIGhhbmRzaGFrZSBpbiBzZXR1cCBzdGFnZS4KKyAgICAgKiBAdmFyIFVTQkRfRVBfVDo6Q0ZHUAorICAgICAqIE9mZnNldDogMHg1MEMvMHg1MUMvMHg1MkMvMHg1M0MvMHg1NEMvMHg1NUMvMHg1NkMvMHg1N0MvMHg1OEMvMHg1OUMvMHg1QUMvMHg1QkMgIEVuZHBvaW50IFNldCBTdGFsbCBhbmQgQ2xlYXIgSW4vT3V0IFJlYWR5IENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDTFJSRFkgICAgfENsZWFyIFJlYWR5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgVVNCRF9NWFBMRHggcmVnaXN0ZXIgaXMgc2V0IGJ5IHVzZXIsIGl0IG1lYW5zIHRoYXQgdGhlIGVuZHBvaW50IGlzIHJlYWR5IHRvIHRyYW5zbWl0IG9yIHJlY2VpdmUgZGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSB1c2VyIHdhbnRzIHRvIGRpc2FibGUgdGhpcyB0cmFuc2FjdGlvbiBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIHN0YXJ0LCB1c2VycyBjYW4gc2V0IHRoaXMgYml0IHRvIDEgdG8gZGlzYWJsZSBpdCBhbmQgaXQgaXMgYXV0byBjbGVhciB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBJTiB0b2tlbiwgd3JpdGUgJzEnIHRvIGNsZWFyIHRoZSBJTiB0b2tlbiBoYWQgcmVhZHkgdG8gdHJhbnNtaXQgdGhlIGRhdGEgdG8gVVNCLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBPVVQgdG9rZW4sIHdyaXRlICcxJyB0byBjbGVhciB0aGUgT1VUIHRva2VuIGhhZCByZWFkeSB0byByZWNlaXZlIHRoZSBkYXRhIGZyb20gVVNCLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRlIDEgb25seSBhbmQgaXMgYWx3YXlzIDAgd2hlbiBpdCBpcyByZWFkIGJhY2suCisgICAgICogfFsxXSAgICAgfFNTVEFMTCAgICB8U2V0IFNUQUxMCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpc2FibGUgdGhlIGRldmljZSB0byByZXNwb25zZSBTVEFMTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0IHRoZSBkZXZpY2UgdG8gcmVzcG9uZCBTVEFMTCBhdXRvbWF0aWNhbGx5LgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQlVGU0VHOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIEVuZHBvaW50IEJ1ZmZlciBTZWdtZW50YXRpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IE1YUExEOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBFbmRwb2ludCBNYXhpbWFsIFBheWxvYWQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDRkc7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gRW5kcG9pbnQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0ZHUDsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIEVuZHBvaW50IFNldCBTdGFsbCBhbmQgQ2xlYXIgSW4vT3V0IFJlYWR5IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgKi8KKworfSBVU0JEX0VQX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgVVNCRF9UOjpJTlRFTgorICAgICAqIE9mZnNldDogMHgwMCAgVVNCIERldmljZSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlVTSUVOICAgIHxCdXMgRXZlbnQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlVTIGV2ZW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlVTIGV2ZW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxVU0JJRU4gICAgfFVTQiBFdmVudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVU0IgZXZlbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgZXZlbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFZCREVUSUVOICB8VkJVUyBEZXRlY3Rpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVkJVUyBkZXRlY3Rpb24gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBWQlVTIGRldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8TkVWV0tJRU4gIHxVU0IgTm8tZXZlbnQtd2FrZS11cCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOby1ldmVudC13YWtlLXVwIEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTm8tZXZlbnQtd2FrZS11cCBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8U09GSUVOICAgIHxTdGFydCBvZiBGcmFtZSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTT0YgSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTT0YgSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfFdLRU4gICAgICB8V2FrZS11cCBGdW5jdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVTQiB3YWtlLXVwIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0Igd2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMTVdICAgIHxJTk5BS0VOICAgfEFjdGl2ZSBOQUsgRnVuY3Rpb24gYW5kIEl0cyBTdGF0dXMgaW4gSU4gVG9rZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV2hlbiBkZXZpY2UgcmVzcG9uZHMgTkFLIGFmdGVyIHJlY2VpdmluZyBJTiB0b2tlbiwgSU4gTkFLIHN0YXR1cyB3aWxsIG5vdCBiZSB1cGRhdGVkIHRvIFVTQkRfRVBTVFMwIGFuZCBVU0JEX0VQU1RTMXJlZ2lzdGVyLCBzbyB0aGF0IHRoZSBVU0IgaW50ZXJydXB0IGV2ZW50IHdpbGwgbm90IGJlIGFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJTiBOQUsgc3RhdHVzIHdpbGwgYmUgdXBkYXRlZCB0byBVU0JEX0VQU1RTMCBhbmQgVVNCRF9FUFNUUzEgcmVnaXN0ZXIgYW5kIHRoZSBVU0IgaW50ZXJydXB0IGV2ZW50IHdpbGwgYmUgYXNzZXJ0ZWQsIHdoZW4gdGhlIGRldmljZSByZXNwb25kcyBOQUsgYWZ0ZXIgcmVjZWl2aW5nIElOIHRva2VuLgorICAgICAqIEB2YXIgVVNCRF9UOjpJTlRTVFMKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIFVTQiBEZXZpY2UgSW50ZXJydXB0IEV2ZW50IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJVU0lGICAgICB8QlVTIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQlVTIGV2ZW50IG1lYW5zIHRoYXQgdGhlcmUgaXMgb25lIG9mIHRoZSBzdXNwZW5zZSBvciB0aGUgcmVzdW1lIGZ1bmN0aW9uIGluIHRoZSBidXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEJVUyBldmVudCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnVzIGV2ZW50IG9jY3VycmVkOyBjaGVjayBVU0JEX0FUVFJbMzowXSB0byBrbm93IHdoaWNoIGtpbmQgb2YgYnVzIGV2ZW50IHdhcyBvY2N1cnJlZCwgY2xlYXJlZCBieSB3cml0ZSAxIHRvIFVTQkRfSU5UU1RTWzBdLgorICAgICAqIHxbMV0gICAgIHxVU0JJRiAgICAgfFVTQiBFdmVudCBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFVTQiBldmVudCBpbmNsdWRlcyB0aGUgU0VUVVAgVG9rZW4sIElOIFRva2VuLCBPVVQgQUNLLCBJU08gSU4sIG9yIElTTyBPVVQgZXZlbnRzIGluIHRoZSBidXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFVTQiBldmVudCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIGV2ZW50IG9jY3VycmVkLCBjaGVjayBFUFNUUzB+NVsyOjBdIHRvIGtub3cgd2hpY2gga2luZCBvZiBVU0IgZXZlbnQgd2FzIG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMV0gb3IgRVBTVFMwfjExIGFuZCBTRVRVUCAoVVNCRF9JTlRTVFNbMzFdKS4KKyAgICAgKiB8WzJdICAgICB8VkJERVRJRiAgIHxWQlVTIERldGVjdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZXJlIGlzIG5vdCBhdHRhY2hlZC9kZXRhY2hlZCBldmVudCBpbiB0aGUgVVNCLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBhdHRhY2hlZC9kZXRhY2hlZCBldmVudCBpbiB0aGUgVVNCIGJ1cyBhbmQgaXQgaXMgY2xlYXJlZCBieSB3cml0ZSAxIHRvIFVTQkRfSU5UU1RTWzJdLgorICAgICAqIHxbM10gICAgIHxORVZXS0lGICAgfE5vLWV2ZW50LXdha2UtdXAgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBORVZXSyBldmVudCBkb2VzIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTm8tZXZlbnQtd2FrZS11cCBldmVudCBvY2N1cnJlZCwgY2xlYXJlZCBieSB3cml0ZSAxIHRvIFVTQkRfSU5UU1RTWzNdLgorICAgICAqIHxbNF0gICAgIHxTT0ZJRiAgICAgfFN0YXJ0IG9mIEZyYW1lIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU09GIGV2ZW50IGRvZXMgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTT0YgZXZlbnQgb2NjdXJyZWQsIGNsZWFyZWQgYnkgd3JpdGUgMSB0byBVU0JEX0lOVFNUU1s0XS4KKyAgICAgKiB8WzE2XSAgICB8RVBFVlQwICAgIHxFbmRwb2ludCAwJ3MgVVNCIEV2ZW50IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBldmVudCBvY2N1cnJlZCBpbiBlbmRwb2ludCAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgZXZlbnQgb2NjdXJyZWQgb24gRW5kcG9pbnQgMCwgY2hlY2sgVVNCRF9FUFNUUzBbMzowXSB0byBrbm93IHdoaWNoIGtpbmQgb2YgVVNCIGV2ZW50IHdhcyBvY2N1cnJlZCwgY2xlYXJlZCBieSB3cml0ZSAxIHRvIFVTQkRfSU5UU1RTWzE2XSBvciBVU0JEX0lOVFNUU1sxXS4KKyAgICAgKiB8WzE3XSAgICB8RVBFVlQxICAgIHxFbmRwb2ludCAxJ3MgVVNCIEV2ZW50IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBldmVudCBvY2N1cnJlZCBpbiBlbmRwb2ludCAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgZXZlbnQgb2NjdXJyZWQgb24gRW5kcG9pbnQgMSwgY2hlY2sgVVNCRF9FUFNUUzBbNzo0XSB0byBrbm93IHdoaWNoIGtpbmQgb2YgVVNCIGV2ZW50IHdhcyBvY2N1cnJlZCwgY2xlYXJlZCBieSB3cml0ZSAxIHRvIFVTQkRfSU5UU1RTWzE3XSBvciBVU0JEX0lOVFNUU1sxXS4KKyAgICAgKiB8WzE4XSAgICB8RVBFVlQyICAgIHxFbmRwb2ludCAyJ3MgVVNCIEV2ZW50IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBldmVudCBvY2N1cnJlZCBpbiBlbmRwb2ludCAyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgZXZlbnQgb2NjdXJyZWQgb24gRW5kcG9pbnQgMiwgY2hlY2sgVVNCRF9FUFNUUzBbMTE6OF0gdG8ga25vdyB3aGljaCBraW5kIG9mIFVTQiBldmVudCB3YXMgb2NjdXJyZWQsIGNsZWFyZWQgYnkgd3JpdGUgMSB0byBVU0JEX0lOVFNUU1sxOF0gb3IgVVNCRF9JTlRTVFNbMV0uCisgICAgICogfFsxOV0gICAgfEVQRVZUMyAgICB8RW5kcG9pbnQgMydzIFVTQiBFdmVudCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXZlbnQgb2NjdXJyZWQgaW4gZW5kcG9pbnQgMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIGV2ZW50IG9jY3VycmVkIG9uIEVuZHBvaW50IDMsIGNoZWNrIFVTQkRfRVBTVFMwWzE1OjEyXSB0byBrbm93IHdoaWNoIGtpbmQgb2YgVVNCIGV2ZW50IHdhcyBvY2N1cnJlZCwgY2xlYXJlZCBieSB3cml0ZSAxIHRvIFVTQkRfSU5UU1RTWzE5XSBvciBVU0JEX0lOVFNUU1sxXS4KKyAgICAgKiB8WzIwXSAgICB8RVBFVlQ0ICAgIHxFbmRwb2ludCA0J3MgVVNCIEV2ZW50IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBldmVudCBvY2N1cnJlZCBpbiBlbmRwb2ludCA0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgZXZlbnQgb2NjdXJyZWQgb24gRW5kcG9pbnQgNCwgY2hlY2sgVVNCRF9FUFNUUzBbMTk6MTZdIHRvIGtub3cgd2hpY2gga2luZCBvZiBVU0IgZXZlbnQgd2FzIG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMjBdIG9yIFVTQkRfSU5UU1RTWzFdLgorICAgICAqIHxbMjFdICAgIHxFUEVWVDUgICAgfEVuZHBvaW50IDUncyBVU0IgRXZlbnQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGV2ZW50IG9jY3VycmVkIGluIGVuZHBvaW50IDUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiBldmVudCBvY2N1cnJlZCBvbiBFbmRwb2ludCA1LCBjaGVjayBVU0JEX0VQU1RTMFsyMzoyMF0gdG8ga25vdyB3aGljaCBraW5kIG9mIFVTQiBldmVudCB3YXMgb2NjdXJyZWQsIGNsZWFyZWQgYnkgd3JpdGUgMSB0byBVU0JEX0lOVFNUU1syMV0gb3IgVVNCRF9JTlRTVFNbMV0uCisgICAgICogfFsyMl0gICAgfEVQRVZUNiAgICB8RW5kcG9pbnQgNidzIFVTQiBFdmVudCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXZlbnQgb2NjdXJyZWQgaW4gZW5kcG9pbnQgNi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIGV2ZW50IG9jY3VycmVkIG9uIEVuZHBvaW50IDYsIGNoZWNrIFVTQkRfRVBTVFMwWzI3OjI0XSB0byBrbm93IHdoaWNoIGtpbmQgb2YgVVNCIGV2ZW50IHdhcyBvY2N1cnJlZCwgY2xlYXJlZCBieSB3cml0ZSAxIHRvIFVTQkRfSU5UU1RTWzIyXSBvciBVU0JEX0lOVFNUU1sxXS4KKyAgICAgKiB8WzIzXSAgICB8RVBFVlQ3ICAgIHxFbmRwb2ludCA3J3MgVVNCIEV2ZW50IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBldmVudCBvY2N1cnJlZCBpbiBlbmRwb2ludCA3LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgZXZlbnQgb2NjdXJyZWQgb24gRW5kcG9pbnQgNywgY2hlY2sgVVNCRF9FUFNUUzBbMzE6MjhdIHRvIGtub3cgd2hpY2gga2luZCBvZiBVU0IgZXZlbnQgd2FzIG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMjNdIG9yIFVTQkRfSU5UU1RTWzFdLgorICAgICAqIHxbMjRdICAgIHxFUEVWVDggICAgfEVuZHBvaW50IDgncyBVU0IgRXZlbnQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGV2ZW50IG9jY3VycmVkIGluIGVuZHBvaW50IDguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiBldmVudCBvY2N1cnJlZCBvbiBFbmRwb2ludCA4LCBjaGVjayBVU0JEX0VQU1RTMVszOjBdIHRvIGtub3cgd2hpY2gga2luZCBvZiBVU0IgZXZlbnQgd2FzIG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMjRdIG9yIFVTQkRfSU5UU1RTWzFdLgorICAgICAqIHxbMjVdICAgIHxFUEVWVDkgICAgfEVuZHBvaW50IDkncyBVU0IgRXZlbnQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGV2ZW50IG9jY3VycmVkIGluIGVuZHBvaW50IDkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiBldmVudCBvY2N1cnJlZCBvbiBFbmRwb2ludCA5LCBjaGVjayBVU0JEX0VQU1RTMVs3OjRdIHRvIGtub3cgd2hpY2gga2luZCBvZiBVU0IgZXZlbnQgd2FzIG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMjVdIG9yIFVTQkRfSU5UU1RTWzFdLgorICAgICAqIHxbMjZdICAgIHxFUEVWVDEwICAgfEVuZHBvaW50IDEwJ3MgVVNCIEV2ZW50IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBldmVudCBvY2N1cnJlZCBpbiBlbmRwb2ludCAxMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIGV2ZW50IG9jY3VycmVkIG9uIEVuZHBvaW50IDEwLCBjaGVjayBVU0JEX0VQU1RTMVsxMTo4XSB0byBrbm93IHdoaWNoIGtpbmQgb2YgVVNCIGV2ZW50IHdhcyBvY2N1cnJlZCwgY2xlYXJlZCBieSB3cml0ZSAxIHRvIFVTQkRfSU5UU1RTWzI2XSBvciBVU0JEX0lOVFNUU1sxXS4KKyAgICAgKiB8WzI3XSAgICB8RVBFVlQxMSAgIHxFbmRwb2ludCAxMSdzIFVTQiBFdmVudCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXZlbnQgb2NjdXJyZWQgaW4gZW5kcG9pbnQgMTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiBldmVudCBvY2N1cnJlZCBvbiBFbmRwb2ludCAxMSwgY2hlY2sgVVNCRF9FUFNUUzFbMTU6MTJdIHRvIGtub3cgd2hpY2gga2luZCBvZiBVU0IgZXZlbnQgd2FzIG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMjddIG9yIFVTQkRfSU5UU1RTWzFdLgorICAgICAqIHxbMzFdICAgIHxTRVRVUCAgICAgfFNldHVwIEV2ZW50IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBTZXR1cCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0dXAgZXZlbnQgb2NjdXJyZWQsIGNsZWFyZWQgYnkgd3JpdGUgMSB0byBVU0JEX0lOVFNUU1szMV0uCisgICAgICogQHZhciBVU0JEX1Q6OkZBRERSCisgICAgICogT2Zmc2V0OiAweDA4ICBVU0IgRGV2aWNlIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNjowXSAgIHxGQUREUiAgICAgfFVTQiBEZXZpY2UgRnVuY3Rpb24gQWRkcmVzcworICAgICAqIEB2YXIgVVNCRF9UOjpFUFNUUworICAgICAqIE9mZnNldDogMHgwQyAgVVNCIERldmljZSBFbmRwb2ludCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbN10gICAgIHxPViAgICAgICAgfE92ZXJydW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBvdmVyIHRoZSBtYXhpbXVtIHBheWxvYWQgbnVtYmVyIG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gb3ZlcnJ1bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3V0IERhdGEgaXMgbW9yZSB0aGFuIHRoZSBNYXggUGF5bG9hZCBpbiBNWFBMRCByZWdpc3RlciBvciB0aGUgU2V0dXAgRGF0YSBpcyBtb3JlIHRoYW4gOCBCeXRlcy4KKyAgICAgKiBAdmFyIFVTQkRfVDo6QVRUUgorICAgICAqIE9mZnNldDogMHgxMCAgVVNCIERldmljZSBCdXMgU3RhdHVzIGFuZCBBdHRyaWJ1dGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFVTQlJTVCAgICB8VVNCIFJlc2V0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCdXMgbm8gcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJ1cyByZXNldCB3aGVuIFNFMCAoc2luZ2xlLWVuZGVkIDApIG1vcmUgdGhhbiAyLjV1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkuCisgICAgICogfFsxXSAgICAgfFNVU1BFTkQgICB8U3VzcGVuZCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnVzIG5vIHN1c3BlbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJ1cyBpZGxlIG1vcmUgdGhhbiAzbXMsIGVpdGhlciBjYWJsZSBpcyBwbHVnZ2VkIG9mZiBvciBob3N0IGlzIHNsZWVwaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seS4KKyAgICAgKiB8WzJdICAgICB8UkVTVU1FICAgIHxSZXN1bWUgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGJ1cyByZXN1bWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc3VtZSBmcm9tIHN1c3BlbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LgorICAgICAqIHxbM10gICAgIHxUT1VUICAgICAgfFRpbWUtb3V0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB0aW1lLW91dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTm8gQnVzIHJlc3BvbnNlIG1vcmUgdGhhbiAxOCBiaXRzIHRpbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LgorICAgICAqIHxbNF0gICAgIHxQSFlFTiAgICAgfFBIWSBUcmFuc2NlaXZlciBGdW5jdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBIWSB0cmFuc2NlaXZlciBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEhZIHRyYW5zY2VpdmVyIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfFJXQUtFVVAgICB8UmVtb3RlIFdha2UtdXAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVsZWFzZSB0aGUgVVNCIGJ1cyBmcm9tIEsgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZvcmNlIFVTQiBidXMgdG8gSyAoVVNCX0QrIGxvdywgVVNCX0QtOiBoaWdoKSBzdGF0ZSwgdXNlZCBmb3IgcmVtb3RlIHdha2UtdXAuCisgICAgICogfFs3XSAgICAgfFVTQkVOICAgICB8VVNCIENvbnRyb2xsZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVU0IgQ29udHJvbGxlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIENvbnRyb2xsZXIgRW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8RFBQVUVOICAgIHxQdWxsLXVwIFJlc2lzdG9yIG9uIFVTQl9EUCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFB1bGwtdXAgcmVzaXN0b3IgaW4gVVNCX0QrIGJ1cyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUHVsbC11cCByZXNpc3RvciBpbiBVU0JfRCsgYnVzIEFjdGl2ZS4KKyAgICAgKiB8WzEwXSAgICB8QllURU0gICAgIHxDUFUgQWNjZXNzIFVTQiBTUkFNIFNpemUgTW9kZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV29yZCBtb2RlOiBUaGUgc2l6ZSBvZiB0aGUgdHJhbnNmZXIgZnJvbSBDUFUgdG8gVVNCIFNSQU0gY2FuIGJlIFdvcmQgb25seS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnl0ZSBtb2RlOiBUaGUgc2l6ZSBvZiB0aGUgdHJhbnNmZXIgZnJvbSBDUFUgdG8gVVNCIFNSQU0gY2FuIGJlIEJ5dGUgb25seS4KKyAgICAgKiB8WzExXSAgICB8TFBNQUNLICAgIHxMUE0gVG9rZW4gQWNrbm93bGVkZ2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBOWUVUL0FDSyB3aWxsIGJlIHJldHVybmVkIG9ubHkgb24gYSBzdWNjZXNzZnVsIExQTSB0cmFuc2FjdGlvbiBpZiBubyBlcnJvcnMgaW4gYm90aCB0aGUgRVhUIHRva2VuIGFuZCB0aGUgTFBNIHRva2VuIGFuZCBhIHZhbGlkIGJMaW5rU3RhdGUgPSAwMDAxIChMMSkgaXMgcmVjZWl2ZWQsIGVsc2UgRVJST1IgYW5kIFNUQUxMIHdpbGwgYmUgcmV0dXJuZWQgYXV0b21hdGljYWxseSwgcmVzcGVjdGl2ZWx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA9IHRoZSB2YWxpZCBMUE0gVG9rZW4gd2lsbCBiZSBOWUVULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDE9IHRoZSB2YWxpZCBMUE0gVG9rZW4gd2lsbCBiZSBBQ0suCisgICAgICogfFsxMl0gICAgfEwxU1VTUEVORCB8TFBNIEwxIFN1c3BlbmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnVzIG5vIEwxIHN0YXRlIHN1c3BlbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoaXMgYml0IGlzIHNldCBieSB0aGUgaGFyZHdhcmUgd2hlbiBMUE0gY29tbWFuZCB0byBlbnRlciB0aGUgTDEgc3RhdGUgaXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGFuZCBhY2tub3dsZWRnZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LgorICAgICAqIHxbMTNdICAgIHxMMVJFU1VNRSAgfExQTSBMMSBSZXN1bWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnVzIG5vIExQTSBMMSBzdGF0ZSByZXN1bWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExQTSBMMSBzdGF0ZSBSZXN1bWUgZnJvbSBMUE0gTDEgc3RhdGUgc3VzcGVuZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkuCisgICAgICogQHZhciBVU0JEX1Q6OlZCVVNERVQKKyAgICAgKiBPZmZzZXQ6IDB4MTQgIFVTQiBEZXZpY2UgVkJVUyBEZXRlY3Rpb24gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxWQlVTREVUICAgfERldmljZSBWQlVTIERldGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb250cm9sbGVyIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgVVNCIGhvc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbnRyb2xsZXIgaXMgYXR0YWNoZWQgdG8gdGhlIFVTQiBob3N0LgorICAgICAqIEB2YXIgVVNCRF9UOjpTVEJVRlNFRworICAgICAqIE9mZnNldDogMHgxOCAgU0VUVVAgVG9rZW4gQnVmZmVyIFNlZ21lbnRhdGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs4OjNdICAgfFNUQlVGU0VHICB8U0VUVVAgVG9rZW4gQnVmZmVyIFNlZ21lbnRhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIG9mZnNldCBhZGRyZXNzIGZvciB0aGUgU0VUVVAgdG9rZW4gd2l0aCB0aGUgVVNCIERldmljZSBTUkFNIHN0YXJ0aW5nIGFkZHJlc3MgVGhlIGVmZmVjdGl2ZSBzdGFydGluZyBhZGRyZXNzIGlzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VVNCRF9TUkFNIGFkZHJlc3MgKyB7U1RCVUZTRUcsIDMnYjAwMH0KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVyZSB0aGUgVVNCRF9TUkFNIGFkZHJlc3MgPSBVU0JEX0JBKzB4MTAwaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJdCBpcyB1c2VkIGZvciBTRVRVUCB0b2tlbiBvbmx5LgorICAgICAqIEB2YXIgVVNCRF9UOjpFUFNUUzAKKyAgICAgKiBPZmZzZXQ6IDB4MjAgIFVTQiBEZXZpY2UgRW5kcG9pbnQgU3RhdHVzIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxFUFNUUzAgICAgfEVuZHBvaW50IDAgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhpcyBlbmRwb2ludAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBJbiBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEluIE5BSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gT3V0IFBhY2tldCBEYXRhMCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IFNldHVwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gT3V0IFBhY2tldCBEYXRhMSBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IElzb2Nocm9ub3VzIHRyYW5zZmVyIGVuZC4KKyAgICAgKiB8Wzc6NF0gICB8RVBTVFMxICAgIHxFbmRwb2ludCAxIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoaXMgZW5kcG9pbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gSW4gQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBJbiBOQUsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IE91dCBQYWNrZXQgRGF0YTAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBTZXR1cCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IE91dCBQYWNrZXQgRGF0YTEgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBJc29jaHJvbm91cyB0cmFuc2ZlciBlbmQuCisgICAgICogfFsxMTo4XSAgfEVQU1RTMiAgICB8RW5kcG9pbnQgMiBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSB1c2VkIHRvIGluZGljYXRlIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGlzIGVuZHBvaW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEluIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gSW4gTkFLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBPdXQgUGFja2V0IERhdGEwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gU2V0dXAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBPdXQgUGFja2V0IERhdGExIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gSXNvY2hyb25vdXMgdHJhbnNmZXIgZW5kLgorICAgICAqIHxbMTU6MTJdIHxFUFNUUzMgICAgfEVuZHBvaW50IDMgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhpcyBlbmRwb2ludAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBJbiBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEluIE5BSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gT3V0IFBhY2tldCBEYXRhMCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IFNldHVwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gT3V0IFBhY2tldCBEYXRhMSBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IElzb2Nocm9ub3VzIHRyYW5zZmVyIGVuZC4KKyAgICAgKiB8WzE5OjE2XSB8RVBTVFM0ICAgIHxFbmRwb2ludCA0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoaXMgZW5kcG9pbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gSW4gQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBJbiBOQUsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IE91dCBQYWNrZXQgRGF0YTAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBTZXR1cCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IE91dCBQYWNrZXQgRGF0YTEgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBJc29jaHJvbm91cyB0cmFuc2ZlciBlbmQuCisgICAgICogfFsyMzoyMF0gfEVQU1RTNSAgICB8RW5kcG9pbnQgNSBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSB1c2VkIHRvIGluZGljYXRlIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGlzIGVuZHBvaW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEluIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gSW4gTkFLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBPdXQgUGFja2V0IERhdGEwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gU2V0dXAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBPdXQgUGFja2V0IERhdGExIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gSXNvY2hyb25vdXMgdHJhbnNmZXIgZW5kLgorICAgICAqIHxbMjc6MjRdIHxFUFNUUzYgICAgfEVuZHBvaW50IDYgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhpcyBlbmRwb2ludAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBJbiBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEluIE5BSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gT3V0IFBhY2tldCBEYXRhMCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IFNldHVwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gT3V0IFBhY2tldCBEYXRhMSBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IElzb2Nocm9ub3VzIHRyYW5zZmVyIGVuZC4KKyAgICAgKiB8WzMxOjI4XSB8RVBTVFM3ICAgIHxFbmRwb2ludCA3IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoaXMgZW5kcG9pbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gSW4gQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBJbiBOQUsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IE91dCBQYWNrZXQgRGF0YTAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBTZXR1cCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IE91dCBQYWNrZXQgRGF0YTEgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBJc29jaHJvbm91cyB0cmFuc2ZlciBlbmQuCisgICAgICogQHZhciBVU0JEX1Q6OkVQU1RTMQorICAgICAqIE9mZnNldDogMHgyNCAgVVNCIERldmljZSBFbmRwb2ludCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfEVQU1RTOCAgICB8RW5kcG9pbnQgOCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSB1c2VkIHRvIGluZGljYXRlIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGlzIGVuZHBvaW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEluIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gSW4gTkFLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBPdXQgUGFja2V0IERhdGEwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gU2V0dXAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBPdXQgUGFja2V0IERhdGExIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gSXNvY2hyb25vdXMgdHJhbnNmZXIgZW5kLgorICAgICAqIHxbNzo0XSAgIHxFUFNUUzkgICAgfEVuZHBvaW50IDkgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhpcyBlbmRwb2ludAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBJbiBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEluIE5BSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gT3V0IFBhY2tldCBEYXRhMCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IFNldHVwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gT3V0IFBhY2tldCBEYXRhMSBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IElzb2Nocm9ub3VzIHRyYW5zZmVyIGVuZC4KKyAgICAgKiB8WzExOjhdICB8RVBTVFMxMCAgIHxFbmRwb2ludCAxMCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSB1c2VkIHRvIGluZGljYXRlIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGlzIGVuZHBvaW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEluIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gSW4gTkFLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBPdXQgUGFja2V0IERhdGEwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gU2V0dXAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBPdXQgUGFja2V0IERhdGExIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gSXNvY2hyb25vdXMgdHJhbnNmZXIgZW5kLgorICAgICAqIHxbMTU6MTJdIHxFUFNUUzExICAgfEVuZHBvaW50IDExIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoaXMgZW5kcG9pbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gSW4gQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBJbiBOQUsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IE91dCBQYWNrZXQgRGF0YTAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBTZXR1cCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IE91dCBQYWNrZXQgRGF0YTEgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBJc29jaHJvbm91cyB0cmFuc2ZlciBlbmQuCisgICAgICogQHZhciBVU0JEX1Q6OkxQTUFUVFIKKyAgICAgKiBPZmZzZXQ6IDB4ODggIFVTQiBMUE0gQXR0cmlidXRpb24gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxMUE1MSU5LU1RTfExQTSBMaW5rIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBjb250YWluIHRoZSBiTGlua1N0YXRlIHJlY2VpdmVkIHdpdGggbGFzdCBBQ0sgTFBNIFRva2VuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IFJlc2VydmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEwxIChTbGVlcCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCAtIDExMTEgPSBSZXNlcnZlLgorICAgICAqIHxbNzo0XSAgIHxMUE1CRVNMICAgfExQTSBCZXN0IEVmZm9ydCBTZXJ2aWNlIExhdGVuY3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGNvbnRhaW4gdGhlIEJFU0wgdmFsdWUgcmVjZWl2ZWQgd2l0aCBsYXN0IEFDSyBMUE0gVG9rZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gMTI1dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IDE1MHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSAyMDB1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gMzAwdXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IDQwMHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSA1MDB1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gMTAwMHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSAyMDAwdXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IDMwMDB1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gNDAwMHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTAgPSA1MDAwdXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMSA9IDYwMDB1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAwID0gNzAwMHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDEgPSA4MDAwdXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMCA9IDkwMDB1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTExID0gMTAwMDB1cy4KKyAgICAgKiB8WzhdICAgICB8TFBNUldBS1VQIHxMUE0gUmVtb3RlIFdha2V1cAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNvbnRhaW5zIHRoZSBiUmVtb3RlV2FrZSB2YWx1ZSByZWNlaXZlZCB3aXRoIGxhc3QgQUNLIExQTSBUb2tlbgorICAgICAqIEB2YXIgVVNCRF9UOjpGTgorICAgICAqIE9mZnNldDogMHg4QyAgVVNCIEZyYW1lIG51bWJlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMDowXSAgfEZOICAgICAgICB8RnJhbWUgTnVtYmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBjb250YWluIHRoZSAxMS1iaXRzIGZyYW1lIG51bWJlciBpbiB0aGUgbGFzdCByZWNlaXZlZCBTT0YgcGFja2V0LgorICAgICAqIEB2YXIgVVNCRF9UOjpTRTAKKyAgICAgKiBPZmZzZXQ6IDB4OTAgIFVTQiBEZXZpY2UgRHJpdmUgU0UwIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTRTAgICAgICAgfERyaXZlIFNpbmdsZSBFbmRlZCBaZXJvIGluIFVTQiBCdXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgU2luZ2xlIEVuZGVkIFplcm8gKFNFMCkgaXMgd2hlbiBib3RoIGxpbmVzIChVU0JfRCsgYW5kIFVTQl9ELSkgYXJlIGJlaW5nIHB1bGxlZCBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZvcmNlIFVTQiBQSFkgdHJhbnNjZWl2ZXIgdG8gZHJpdmUgU0UwLgorICAgICAqLworCisgICAgX19JTyB1aW50MzJfdCBJTlRFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gVVNCIERldmljZSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5UU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIFVTQiBEZXZpY2UgSW50ZXJydXB0IEV2ZW50IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEZBRERSOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBVU0IgRGV2aWNlIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBFUFNUUzsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gVVNCIERldmljZSBFbmRwb2ludCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQVRUUjsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIFVTQiBEZXZpY2UgQnVzIFN0YXR1cyBhbmQgQXR0cmlidXRpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFZCVVNERVQ7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDE0XSBVU0IgRGV2aWNlIFZCVVMgRGV0ZWN0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTVEJVRlNFRzsgICAgICAgICAgICAgIC8qITwgWzB4MDAxOF0gU0VUVVAgVG9rZW4gQnVmZmVyIFNlZ21lbnRhdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTBbMV07CisgICAgX19JICB1aW50MzJfdCBFUFNUUzA7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyMF0gVVNCIERldmljZSBFbmRwb2ludCBTdGF0dXMgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgRVBTVFMxOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjRdIFVTQiBEZXZpY2UgRW5kcG9pbnQgU3RhdHVzIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxWzI0XTsKKyAgICBfX0kgIHVpbnQzMl90IExQTUFUVFI7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDg4XSBVU0IgTFBNIEF0dHJpYnV0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBGTjsgICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA4Y10gVVNCIEZyYW1lIG51bWJlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU0UwOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwOTBdIFVTQiBEZXZpY2UgRHJpdmUgU0UwIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUyWzI4M107CisgICAgVVNCRF9FUF9UICAgICBFUFsxMl07ICAgICAgICAgICAgICAgIC8qITwgWzB4NTAwfjB4NWJjXSBVU0IgRW5kIFBvaW50IDAgfiAxMSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLworCit9IFVTQkRfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgVVNCRF9DT05TVCBVU0JEIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFVTQkQgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBVU0JEX0lOVEVOX0JVU0lFTl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRFTjogQlVTSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRFTl9CVVNJRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5URU5fQlVTSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5URU46IEJVU0lFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRFTl9VU0JJRU5fUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5URU46IFVTQklFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5URU5fVVNCSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVEVOX1VTQklFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVEVOOiBVU0JJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5URU5fVkJERVRJRU5fUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVEVOOiBWQkRFVElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVEVOX1ZCREVUSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRFTl9WQkRFVElFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRFTjogVkJERVRJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVEVOX05FVldLSUVOX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRFTjogTkVWV0tJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRFTl9ORVZXS0lFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5URU5fTkVWV0tJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5URU46IE5FVldLSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRFTl9TT0ZJRU5fUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5URU46IFNPRklFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5URU5fU09GSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVEVOX1NPRklFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVEVOOiBTT0ZJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5URU5fV0tFTl9Qb3MgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVEVOOiBXS0VOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVEVOX1dLRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRFTl9XS0VOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRFTjogV0tFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVEVOX0lOTkFLRU5fUG9zICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRFTjogSU5OQUtFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRFTl9JTk5BS0VOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5URU5fSU5OQUtFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5URU46IElOTkFLRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfQlVTSUZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBCVVNJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0JVU0lGX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVFNUU19CVVNJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogQlVTSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5UU1RTX1VTQklGX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogVVNCSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVFNUU19VU0JJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRTVFNfVVNCSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IFVTQklGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19WQkRFVElGX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IFZCREVUSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfVkJERVRJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5UU1RTX1ZCREVUSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBWQkRFVElGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfTkVWV0tJRl9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBORVZXS0lGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX05FVldLSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVFNUU19ORVZXS0lGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogTkVWV0tJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5UU1RTX1NPRklGX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogU09GSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVFNUU19TT0ZJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRTVFNfU09GSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IFNPRklGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDBfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQwX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5UU1RTX0VQRVZUMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQxX1BvcyAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVFNUU19FUEVWVDFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUMl9Qb3MgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRTVFNfRVBFVlQyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDNfUG9zICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQzX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5UU1RTX0VQRVZUM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQ0X1BvcyAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUNF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVFNUU19FUEVWVDRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQ0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUNV9Qb3MgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQ1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRTVFNfRVBFVlQ1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDZfUG9zICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUNiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQ2X01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5UU1RTX0VQRVZUNl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQ3X1BvcyAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDcgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUN19Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVFNUU19FUEVWVDdfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQ3IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUOF9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQ4IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDhfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRTVFNfRVBFVlQ4X1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUOCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDlfUG9zICAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUOSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQ5X01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5UU1RTX0VQRVZUOV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQxMF9Qb3MgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDEwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUMTBfTXNrICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVFNUU19FUEVWVDEwX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQxMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUMTFfUG9zICAgICAgICAgICgyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQxMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDExX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRTVFNfRVBFVlQxMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUMTEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19TRVRVUF9Qb3MgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IFNFVFVQIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfU0VUVVBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5UU1RTX1NFVFVQX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBTRVRVUCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9GQUREUl9GQUREUl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RkFERFI6IEZBRERSIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVTQkRfRkFERFJfRkFERFJfTXNrICAgICAgICAgICAgICgweDdmdWwgPDwgVVNCRF9GQUREUl9GQUREUl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkZBRERSOiBGQUREUiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfRVBTVFNfT1ZfUG9zICAgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JEX0VQU1RTX09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9FUFNUU19PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0FUVFJfVVNCUlNUX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBVU0JSU1QgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9BVFRSX1VTQlJTVF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfQVRUUl9VU0JSU1RfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogVVNCUlNUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9BVFRSX1NVU1BFTkRfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogU1VTUEVORCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTQkRfQVRUUl9TVVNQRU5EX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0FUVFJfU1VTUEVORF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IFNVU1BFTkQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQVRUUl9SRVNVTUVfUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IFJFU1VNRSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVU0JEX0FUVFJfUkVTVU1FX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9BVFRSX1JFU1VNRV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBSRVNVTUUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0FUVFJfVE9VVF9Qb3MgICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBUT1VUIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9BVFRSX1RPVVRfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfQVRUUl9UT1VUX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogVE9VVCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9BVFRSX1BIWUVOX1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogUEhZRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVTQkRfQVRUUl9QSFlFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0FUVFJfUEhZRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IFBIWUVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQVRUUl9SV0FLRVVQX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IFJXQUtFVVAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU0JEX0FUVFJfUldBS0VVUF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9BVFRSX1JXQUtFVVBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBSV0FLRVVQIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0FUVFJfVVNCRU5fUG9zICAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBVU0JFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9BVFRSX1VTQkVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfQVRUUl9VU0JFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogVVNCRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9BVFRSX0RQUFVFTl9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogRFBQVUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVTQkRfQVRUUl9EUFBVRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0FUVFJfRFBQVUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IERQUFVFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQVRUUl9CWVRFTV9Qb3MgICAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IEJZVEVNIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVU0JEX0FUVFJfQllURU1fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9BVFRSX0JZVEVNX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBCWVRFTSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0FUVFJfTFBNQUNLX1BvcyAgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBMUE1BQ0sgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9BVFRSX0xQTUFDS19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfQVRUUl9MUE1BQ0tfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogTFBNQUNLIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9BVFRSX0wxU1VTUEVORF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogTDFTVVNQRU5EIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTQkRfQVRUUl9MMVNVU1BFTkRfTXNrICAgICAgICAgICgweDF1bCA8PCBVU0JEX0FUVFJfTDFTVVNQRU5EX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IEwxU1VTUEVORCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQVRUUl9MMVJFU1VNRV9Qb3MgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IEwxUkVTVU1FIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0FUVFJfTDFSRVNVTUVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9BVFRSX0wxUkVTVU1FX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBMMVJFU1VNRSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX1ZCVVNERVRfVkJVU0RFVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpWQlVTREVUOiBWQlVTREVUIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNCRF9WQlVTREVUX1ZCVVNERVRfTXNrICAgICAgICAgKDB4MXVsIDw8IFVTQkRfVkJVU0RFVF9WQlVTREVUX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6VkJVU0RFVDogVkJVU0RFVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9TVEJVRlNFR19TVEJVRlNFR19Qb3MgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6U1RCVUZTRUc6IFNUQlVGU0VHIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFVTQkRfU1RCVUZTRUdfU1RCVUZTRUdfTXNrICAgICAgICgweDNmdWwgPDwgVVNCRF9TVEJVRlNFR19TVEJVRlNFR19Qb3MpICAgICAgICAgICAgLyohPCBVU0JEX1Q6OlNUQlVGU0VHOiBTVEJVRlNFRyBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfRVBTVFMwX0VQU1RTMF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMDogRVBTVFMwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0VQU1RTMF9FUFNUUzBfTXNrICAgICAgICAgICAoMHhmdWwgPDwgVVNCRF9FUFNUUzBfRVBTVFMwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzA6IEVQU1RTMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0VQU1RTMF9FUFNUUzFfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzA6IEVQU1RTMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9FUFNUUzBfRVBTVFMxX01zayAgICAgICAgICAgKDB4ZnVsIDw8IFVTQkRfRVBTVFMwX0VQU1RTMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMwOiBFUFNUUzEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9FUFNUUzBfRVBTVFMyX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMwOiBFUFNUUzIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfRVBTVFMwX0VQU1RTMl9Nc2sgICAgICAgICAgICgweGZ1bCA8PCBVU0JEX0VQU1RTMF9FUFNUUzJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMDogRVBTVFMyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfRVBTVFMwX0VQU1RTM19Qb3MgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMDogRVBTVFMzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0VQU1RTMF9FUFNUUzNfTXNrICAgICAgICAgICAoMHhmdWwgPDwgVVNCRF9FUFNUUzBfRVBTVFMzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzA6IEVQU1RTMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0VQU1RTMF9FUFNUUzRfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzA6IEVQU1RTNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9FUFNUUzBfRVBTVFM0X01zayAgICAgICAgICAgKDB4ZnVsIDw8IFVTQkRfRVBTVFMwX0VQU1RTNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMwOiBFUFNUUzQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9FUFNUUzBfRVBTVFM1X1BvcyAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMwOiBFUFNUUzUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfRVBTVFMwX0VQU1RTNV9Nc2sgICAgICAgICAgICgweGZ1bCA8PCBVU0JEX0VQU1RTMF9FUFNUUzVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMDogRVBTVFM1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfRVBTVFMwX0VQU1RTNl9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMDogRVBTVFM2IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0VQU1RTMF9FUFNUUzZfTXNrICAgICAgICAgICAoMHhmdWwgPDwgVVNCRF9FUFNUUzBfRVBTVFM2X1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzA6IEVQU1RTNiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0VQU1RTMF9FUFNUUzdfUG9zICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzA6IEVQU1RTNyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9FUFNUUzBfRVBTVFM3X01zayAgICAgICAgICAgKDB4ZnVsIDw8IFVTQkRfRVBTVFMwX0VQU1RTN19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMwOiBFUFNUUzcgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9FUFNUUzFfRVBTVFM4X1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMxOiBFUFNUUzggUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfRVBTVFMxX0VQU1RTOF9Nc2sgICAgICAgICAgICgweGZ1bCA8PCBVU0JEX0VQU1RTMV9FUFNUUzhfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMTogRVBTVFM4IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfRVBTVFMxX0VQU1RTOV9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMTogRVBTVFM5IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0VQU1RTMV9FUFNUUzlfTXNrICAgICAgICAgICAoMHhmdWwgPDwgVVNCRF9FUFNUUzFfRVBTVFM5X1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzE6IEVQU1RTOSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0VQU1RTMV9FUFNUUzEwX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzE6IEVQU1RTMTAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCRF9FUFNUUzFfRVBTVFMxMF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFVTQkRfRVBTVFMxX0VQU1RTMTBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMxOiBFUFNUUzEwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9FUFNUUzFfRVBTVFMxMV9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMxOiBFUFNUUzExIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTQkRfRVBTVFMxX0VQU1RTMTFfTXNrICAgICAgICAgICgweGZ1bCA8PCBVU0JEX0VQU1RTMV9FUFNUUzExX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMTogRVBTVFMxMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfTFBNQVRUUl9MUE1MSU5LU1RTX1BvcyAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkxQTUFUVFI6IExQTUxJTktTVFMgUG9zaXRpb24gICAqLworI2RlZmluZSBVU0JEX0xQTUFUVFJfTFBNTElOS1NUU19Nc2sgICAgICAoMHhmdWwgPDwgVVNCRF9MUE1BVFRSX0xQTUxJTktTVFNfUG9zKSAgICAgICAgICAgIC8qITwgVVNCRF9UOjpMUE1BVFRSOiBMUE1MSU5LU1RTIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0xQTUFUVFJfTFBNQkVTTF9Qb3MgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpMUE1BVFRSOiBMUE1CRVNMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNCRF9MUE1BVFRSX0xQTUJFU0xfTXNrICAgICAgICAgKDB4ZnVsIDw8IFVTQkRfTFBNQVRUUl9MUE1CRVNMX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6TFBNQVRUUjogTFBNQkVTTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9MUE1BVFRSX0xQTVJXQUtVUF9Qb3MgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6TFBNQVRUUjogTFBNUldBS1VQIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFVTQkRfTFBNQVRUUl9MUE1SV0FLVVBfTXNrICAgICAgICgweDF1bCA8PCBVU0JEX0xQTUFUVFJfTFBNUldBS1VQX1BvcykgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkxQTUFUVFI6IExQTVJXQUtVUCBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfRk5fRk5fUG9zICAgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkZOOiBGTiBQb3NpdGlvbiAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JEX0ZOX0ZOX01zayAgICAgICAgICAgICAgICAgICAoMHg3ZmZ1bCA8PCBVU0JEX0ZOX0ZOX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpGTjogRk4gTWFzayAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX1NFMF9TRTBfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpTRTA6IFNFMCBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9TRTBfU0UwX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfU0UwX1NFMF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6U0UwOiBTRTAgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9CVUZTRUdfQlVGU0VHX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfRVBfVDo6QlVGU0VHOiBCVUZTRUcgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVTQkRfQlVGU0VHX0JVRlNFR19Nc2sgICAgICAgICAgICgweDNmdWwgPDwgVVNCRF9CVUZTRUdfQlVGU0VHX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU0JEX0VQX1Q6OkJVRlNFRzogQlVGU0VHIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfTVhQTERfTVhQTERfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX0VQX1Q6Ok1YUExEOiBNWFBMRCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU0JEX01YUExEX01YUExEX01zayAgICAgICAgICAgICAoMHgxZmZ1bCA8PCBVU0JEX01YUExEX01YUExEX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9FUF9UOjpNWFBMRDogTVhQTEQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0NGR19FUE5VTV9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9FUF9UOjpDRkc6IEVQTlVNIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9DRkdfRVBOVU1fTXNrICAgICAgICAgICAgICAgKDB4ZnVsIDw8IFVTQkRfQ0ZHX0VQTlVNX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfRVBfVDo6Q0ZHOiBFUE5VTSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9DRkdfSVNPQ0hfUG9zICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfRVBfVDo6Q0ZHOiBJU09DSCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTQkRfQ0ZHX0lTT0NIX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0NGR19JU09DSF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX0VQX1Q6OkNGRzogSVNPQ0ggTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQ0ZHX1NUQVRFX1BvcyAgICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX0VQX1Q6OkNGRzogU1RBVEUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU0JEX0NGR19TVEFURV9Nc2sgICAgICAgICAgICAgICAoMHgzdWwgPDwgVVNCRF9DRkdfU1RBVEVfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9FUF9UOjpDRkc6IFNUQVRFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0NGR19EU1FTWU5DX1BvcyAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9FUF9UOjpDRkc6IERTUVNZTkMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCRF9DRkdfRFNRU1lOQ19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfQ0ZHX0RTUVNZTkNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfRVBfVDo6Q0ZHOiBEU1FTWU5DIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9DRkdfQ1NUQUxMX1BvcyAgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfRVBfVDo6Q0ZHOiBDU1RBTEwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfQ0ZHX0NTVEFMTF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0NGR19DU1RBTExfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX0VQX1Q6OkNGRzogQ1NUQUxMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQ0ZHUF9DTFJSRFlfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX0VQX1Q6OkNGR1A6IENMUlJEWSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU0JEX0NGR1BfQ0xSUkRZX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9DRkdQX0NMUlJEWV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9FUF9UOjpDRkdQOiBDTFJSRFkgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0NGR1BfU1NUQUxMX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9FUF9UOjpDRkdQOiBTU1RBTEwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCRF9DRkdQX1NTVEFMTF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfQ0ZHUF9TU1RBTExfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfRVBfVDo6Q0ZHUDogU1NUQUxMIE1hc2sgICAgICAgICAgICovCisKKworLyoqQH0qLyAvKiBVU0JEX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBVU0JEIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisjZW5kaWYgLyogX19VU0JEX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS91c2JoX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3VzYmhfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjZDFlMAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS91c2JoX3JlZy5oCkBAIC0wLDAgKzEsNzkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdXNiaF9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgVVNCSCByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19VU0JIX1JFR19IX18KKyNkZWZpbmUgX19VU0JIX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVU0IgSG9zdCBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgVVNCSCBVU0IgSG9zdCBDb250cm9sbGVyKFVTQkgpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIFVTQkggQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBVU0JIX1Q6OkhjUmV2aXNpb24KKyAgICAgKiBPZmZzZXQ6IDB4MDAgIEhvc3QgQ29udHJvbGxlciBSZXZpc2lvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfFJFViAgICAgICB8UmV2aXNpb24gTnVtYmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGVzIHRoZSBPcGVuIEhDSSBTcGVjaWZpY2F0aW9uIHJldmlzaW9uIG51bWJlciBpbXBsZW1lbnRlZCBieSB0aGUgSGFyZHdhcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxIb3N0IENvbnRyb2xsZXIgc3VwcG9ydHMgMS4xIHNwZWNpZmljYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KFguWSA9IFhZaCkuCisgICAgICogQHZhciBVU0JIX1Q6OkhjQ29udHJvbAorICAgICAqIE9mZnNldDogMHgwNCAgSG9zdCBDb250cm9sbGVyIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxDQlNSICAgICAgfENvbnRyb2wgQnVsayBTZXJ2aWNlIFJhdGlvCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBzcGVjaWZpZXMgdGhlIHNlcnZpY2UgcmF0aW8gYmV0d2VlbiBDb250cm9sIGFuZCBCdWxrIEVEcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJlZm9yZSBwcm9jZXNzaW5nIGFueSBvZiB0aGUgbm9uLXBlcmlvZGljIGxpc3RzLCBIQyBtdXN0IGNvbXBhcmUgdGhlIHJhdGlvIHNwZWNpZmllZCB3aXRoIGl0cyBpbnRlcm5hbCBjb3VudCBvbiBob3cgbWFueSBub25lbXB0eSBDb250cm9sIEVEcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLCBpbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRvIGNvbnRpbnVlIHNlcnZpbmcgYW5vdGhlciBDb250cm9sIEVEIG9yIHN3aXRjaGluZyB0byBCdWxrIEVEcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnRlcm5hbCBjb3VudCB3aWxsIGJlIHJldGFpbmVkIHdoZW4gY3Jvc3NpbmcgdGhlIGZyYW1lIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gY2FzZSBvZiByZXNldCwgSENEIGlzIHJlc3BvbnNpYmxlIGZvciByZXN0b3JpbmcgdGhpcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gTnVtYmVyIG9mIENvbnRyb2wgRURzIG92ZXIgQnVsayBFRHMgc2VydmVkIGlzIDE6MS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IE51bWJlciBvZiBDb250cm9sIEVEcyBvdmVyIEJ1bGsgRURzIHNlcnZlZCBpcyAyOjEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBOdW1iZXIgb2YgQ29udHJvbCBFRHMgb3ZlciBCdWxrIEVEcyBzZXJ2ZWQgaXMgMzoxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gTnVtYmVyIG9mIENvbnRyb2wgRURzIG92ZXIgQnVsayBFRHMgc2VydmVkIGlzIDQ6MS4KKyAgICAgKiB8WzJdICAgICB8UExFICAgICAgIHxQZXJpb2RpYyBMaXN0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHNldCwgdGhpcyBiaXQgZW5hYmxlcyBwcm9jZXNzaW5nIG9mIHRoZSBQZXJpb2RpYyAoaW50ZXJydXB0IGFuZCBpc29jaHJvbm91cykgbGlzdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBIb3N0IENvbnRyb2xsZXIgY2hlY2tzIHRoaXMgYml0IHByaW9yIHRvIGF0dGVtcHRpbmcgYW55IHBlcmlvZGljIHRyYW5zZmVycyBpbiBhIGZyYW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQcm9jZXNzaW5nIG9mIHRoZSBQZXJpb2RpYyAoSW50ZXJydXB0IGFuZCBJc29jaHJvbm91cykgbGlzdCBhZnRlciBuZXh0IFNPRiAoU3RhcnQtT2YtRnJhbWUpIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQcm9jZXNzaW5nIG9mIHRoZSBQZXJpb2RpYyAoSW50ZXJydXB0IGFuZCBJc29jaHJvbm91cykgbGlzdCBpbiB0aGUgbmV4dCBmcmFtZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRvIGVuYWJsZSB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgSXNvY2hyb25vdXMgbGlzdCwgdXNlciBoYXMgdG8gc2V0IGJvdGggUExFIGFuZCBJRSAoSGNDb250cm9sWzNdKSBoaWdoLgorICAgICAqIHxbM10gICAgIHxJRSAgICAgICAgfElzb2Nocm9ub3VzIExpc3QgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJvdGggSVNPRW4gYW5kIFBMRSAoSGNDb250cm9sWzJdKSBoaWdoIGVuYWJsZXMgSG9zdCBDb250cm9sbGVyIHRvIHByb2Nlc3MgdGhlIElzb2Nocm9ub3VzIGxpc3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFaXRoZXIgSVNPRW4gb3IgUExFIChIY0NvbnRyb2xbMl0pIGlzIGxvdyBkaXNhYmxlcyBIb3N0IENvbnRyb2xsZXIgdG8gcHJvY2VzcyB0aGUgSXNvY2hyb25vdXMgbGlzdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUHJvY2Vzc2luZyBvZiB0aGUgSXNvY2hyb25vdXMgbGlzdCBhZnRlciBuZXh0IFNPRiAoU3RhcnQtT2YtRnJhbWUpIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQcm9jZXNzaW5nIG9mIHRoZSBJc29jaHJvbm91cyBsaXN0IGluIHRoZSBuZXh0IGZyYW1lIEVuYWJsZWQsIGlmIHRoZSBQTEUgKEhjQ29udHJvbFsyXSkgaXMgaGlnaCwgdG9vLgorICAgICAqIHxbNF0gICAgIHxDTEUgICAgICAgfENvbnRyb2wgTGlzdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFByb2Nlc3Npbmcgb2YgdGhlIENvbnRyb2wgbGlzdCBhZnRlciBuZXh0IFNPRiAoU3RhcnQtT2YtRnJhbWUpIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQcm9jZXNzaW5nIG9mIHRoZSBDb250cm9sIGxpc3QgaW4gdGhlIG5leHQgZnJhbWUgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8QkxFICAgICAgIHxCdWxrIExpc3QgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQcm9jZXNzaW5nIG9mIHRoZSBCdWxrIGxpc3QgYWZ0ZXIgbmV4dCBTT0YgKFN0YXJ0LU9mLUZyYW1lKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUHJvY2Vzc2luZyBvZiB0aGUgQnVsayBsaXN0IGluIHRoZSBuZXh0IGZyYW1lIEVuYWJsZWQuCisgICAgICogfFs3OjZdICAgfEhDRlMgICAgICB8SG9zdCBDb250cm9sbGVyIEZ1bmN0aW9uYWwgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIHNldHMgdGhlIEhvc3QgQ29udHJvbGxlciBzdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDb250cm9sbGVyIG1heSBmb3JjZSBhIHN0YXRlIGNoYW5nZSBmcm9tIFVTQlNVU1BFTkQgdG8gVVNCUkVTVU1FIGFmdGVyIGRldGVjdGluZyByZXN1bWUgc2lnbmFsaW5nIGZyb20gYSBkb3duc3RyZWFtIHBvcnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTdGF0ZXMgYXJlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVVNCU1VTUEVORC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFVTQk9QRVJBVElPTkFMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVVNCUkVTVU1FLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gVVNCUkVTRVQuCisgICAgICogQHZhciBVU0JIX1Q6OkhjQ29tbWFuZFN0YXR1cworICAgICAqIE9mZnNldDogMHgwOCAgSG9zdCBDb250cm9sbGVyIENvbW1hbmQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SENSICAgICAgIHxIb3N0IENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gaW5pdGlhdGUgdGhlIHNvZnR3YXJlIHJlc2V0IG9mIEhvc3QgQ29udHJvbGxlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgdGhlIEhvc3QgQ29udHJvbGxlciwgdXBvbiBjb21wbGV0ZWQgb2YgdGhlIHJlc2V0IG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCwgd2hlbiBzZXQsIGRpZG4ndCByZXNldCB0aGUgUm9vdCBIdWIgYW5kIG5vIHN1YnNlcXVlbnQgcmVzZXQgc2lnbmFsaW5nIGJlIGFzc2VydGVkIHRvIGl0cyBkb3duc3RyZWFtIHBvcnRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBIb3N0IENvbnRyb2xsZXIgaXMgbm90IGluIHNvZnR3YXJlIHJlc2V0IHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBIb3N0IENvbnRyb2xsZXIgaXMgaW4gc29mdHdhcmUgcmVzZXQgc3RhdGUuCisgICAgICogfFsxXSAgICAgfENMRiAgICAgICB8Q29udHJvbCBMaXN0IEZpbGxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCBoaWdoIHRvIGluZGljYXRlIHRoZXJlIGlzIGFuIGFjdGl2ZSBURCBvbiB0aGUgQ29udHJvbCBMaXN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgbWF5IGJlIHNldCBieSBlaXRoZXIgc29mdHdhcmUgb3IgdGhlIEhvc3QgQ29udHJvbGxlciBhbmQgY2xlYXJlZCBieSB0aGUgSG9zdCBDb250cm9sbGVyIGVhY2ggdGltZSBpdCBiZWdpbnMgcHJvY2Vzc2luZyB0aGUgaGVhZCBvZiB0aGUgQ29udHJvbCBMaXN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBhY3RpdmUgVEQgZm91bmQgb3IgSG9zdCBDb250cm9sbGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBoZWFkIG9mIHRoZSBDb250cm9sIGxpc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFuIGFjdGl2ZSBURCBhZGRlZCBvciBmb3VuZCBvbiB0aGUgQ29udHJvbCBsaXN0LgorICAgICAqIHxbMl0gICAgIHxCTEYgICAgICAgfEJ1bGsgTGlzdCBGaWxsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgaGlnaCB0byBpbmRpY2F0ZSB0aGVyZSBpcyBhbiBhY3RpdmUgVEQgb24gdGhlIEJ1bGsgbGlzdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IG1heSBiZSBzZXQgYnkgZWl0aGVyIHNvZnR3YXJlIG9yIHRoZSBIb3N0IENvbnRyb2xsZXIgYW5kIGNsZWFyZWQgYnkgdGhlIEhvc3QgQ29udHJvbGxlciBlYWNoIHRpbWUgaXQgYmVnaW5zIHByb2Nlc3NpbmcgdGhlIGhlYWQgb2YgdGhlIEJ1bGsgbGlzdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gYWN0aXZlIFREIGZvdW5kIG9yIEhvc3QgQ29udHJvbGxlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgaGVhZCBvZiB0aGUgQnVsayBsaXN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBbiBhY3RpdmUgVEQgYWRkZWQgb3IgZm91bmQgb24gdGhlIEJ1bGsgbGlzdC4KKyAgICAgKiB8WzE3OjE2XSB8U09DICAgICAgIHxTY2hlZHVsZSBPdmVycnVuIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgaW5jcmVtZW50ZWQgb24gZWFjaCBzY2hlZHVsaW5nIG92ZXJydW4gZXJyb3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBpbml0aWFsaXplZCB0byAwMGIgYW5kIHdyYXBzIGFyb3VuZCBhdCAxMWIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHdpbGwgYmUgaW5jcmVtZW50ZWQgd2hlbiBhIHNjaGVkdWxpbmcgb3ZlcnJ1biBpcyBkZXRlY3RlZCBldmVuIGlmIFNPIChIY0ludGVycnVwdFN0YXR1c1swXSkgaGFzIGFscmVhZHkgYmVlbiBzZXQuCisgICAgICogQHZhciBVU0JIX1Q6OkhjSW50ZXJydXB0U3RhdHVzCisgICAgICogT2Zmc2V0OiAweDBDICBIb3N0IENvbnRyb2xsZXIgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNPICAgICAgICB8U2NoZWR1bGluZyBPdmVycnVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHdoZW4gdGhlIExpc3QgUHJvY2Vzc29yIGRldGVybWluZXMgYSBTY2hlZHVsZSBPdmVycnVuIGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2NoZWR1bGUgT3ZlcnJ1biBkaWRuJ3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNjaGVkdWxlIE92ZXJydW4gaGFzIG9jY3VycmVkLgorICAgICAqIHxbMV0gICAgIHxXREggICAgICAgfFdyaXRlIEJhY2sgRG9uZSBIZWFkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IGFmdGVyIHRoZSBIb3N0IENvbnRyb2xsZXIgaGFzIHdyaXR0ZW4gSGNEb25lSGVhZCB0byBIY2NhRG9uZUhlYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGdXJ0aGVyIHVwZGF0ZXMgb2YgdGhlIEhjY2FEb25lSGVhZCB3aWxsIG5vdCBvY2N1ciB1bnRpbCB0aGlzIGJpdCBoYXMgYmVlbiBjbGVhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPS5Ib3N0IENvbnRyb2xsZXIgZGlkbid0IHVwZGF0ZSBIY2NhRG9uZUhlYWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9Lkhvc3QgQ29udHJvbGxlciBoYXMgd3JpdHRlbiBIY0RvbmVIZWFkIHRvIEhjY2FEb25lSGVhZC4KKyAgICAgKiB8WzJdICAgICB8U0YgICAgICAgIHxTdGFydCBvZiBGcmFtZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB3aGVuIHRoZSBGcmFtZSBNYW5hZ2VtZW50IGZ1bmN0aW9uYWwgYmxvY2sgc2lnbmFscyBhIHUyMDE4U3RhcnQgb2YgRnJhbWUnIGV2ZW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SG9zdCBDb250cm9sIGdlbmVyYXRlcyBhIFNPRiB0b2tlbiBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPS5Ob3QgdGhlIHN0YXJ0IG9mIGEgZnJhbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9LkluZGljYXRlIHRoZSBzdGFydCBvZiBhIGZyYW1lIGFuZCBIb3N0IENvbnRyb2xsZXIgZ2VuZXJhdGVzIGEgU09GIHRva2VuLgorICAgICAqIHxbM10gICAgIHxSRCAgICAgICAgfFJlc3VtZSBEZXRlY3RlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB3aGVuIEhvc3QgQ29udHJvbGxlciBkZXRlY3RzIHJlc3VtZSBzaWduYWxpbmcgb24gYSBkb3duc3RyZWFtIHBvcnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHJlc3VtZSBzaWduYWxpbmcgZGV0ZWN0ZWQgb24gYSBkb3duc3RyZWFtIHBvcnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc3VtZSBzaWduYWxpbmcgZGV0ZWN0ZWQgb24gYSBkb3duc3RyZWFtIHBvcnQuCisgICAgICogfFs1XSAgICAgfEZOTyAgICAgICB8RnJhbWUgTnVtYmVyIE92ZXJmbG93CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gYml0IDE1IG9mIEZyYW1lIE51bWJlciBjaGFuZ2VzIGZyb20gMSB0byAwIG9yIGZyb20gMCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgYml0IDE1IG9mIEZyYW1lIE51bWJlciBkaWRuJ3QgY2hhbmdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgYml0IDE1IG9mIEZyYW1lIE51bWJlciBjaGFuZ2VzIGZyb20gMSB0byAwIG9yIGZyb20gMCB0byAxLgorICAgICAqIHxbNl0gICAgIHxSSFNDICAgICAgfFJvb3QgSHViIFN0YXR1cyBDaGFuZ2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgY29udGVudCBvZiBIY1JoU3RhdHVzIG9yIHRoZSBjb250ZW50IG9mIEhjUmhQb3J0U3RhdHVzIHJlZ2lzdGVyIGhhcyBjaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgY29udGVudCBvZiBIY1JoU3RhdHVzIGFuZCB0aGUgY29udGVudCBvZiBIY1JoUG9ydFN0YXR1cyByZWdpc3RlciBkaWRuJ3QgY2hhbmdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgY29udGVudCBvZiBIY1JoU3RhdHVzIG9yIHRoZSBjb250ZW50IG9mIEhjUmhQb3J0U3RhdHVzIHJlZ2lzdGVyIGhhcyBjaGFuZ2VkLgorICAgICAqIEB2YXIgVVNCSF9UOjpIY0ludGVycnVwdEVuYWJsZQorICAgICAqIE9mZnNldDogMHgxMCAgSG9zdCBDb250cm9sbGVyIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTTyAgICAgICAgfFNjaGVkdWxpbmcgT3ZlcnJ1biBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBTTyAoSGNJbnRlcnJ1cHRTdGF0dXNbMF0pIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBTTyAoSGNJbnRlcnJ1cHRTdGF0dXNbMF0pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gU08gKEhjSW50ZXJydXB0U3RhdHVzWzBdKSBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxXREggICAgICAgfFdyaXRlIEJhY2sgRG9uZSBIZWFkIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFdESCAoSGNJbnRlcnJ1cHRTdGF0dXNbMV0pIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBXREggKEhjSW50ZXJydXB0U3RhdHVzWzFdKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFdESCAoSGNJbnRlcnJ1cHRTdGF0dXNbMV0pIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFNGICAgICAgICB8U3RhcnQgb2YgRnJhbWUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gU0YgKEhjSW50ZXJydXB0U3RhdHVzWzJdKSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gU0YgKEhjSW50ZXJydXB0U3RhdHVzWzJdKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFNGIChIY0ludGVycnVwdFN0YXR1c1syXSkgRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8UkQgICAgICAgIHxSZXN1bWUgRGV0ZWN0ZWQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gUkQgKEhjSW50ZXJydXB0U3RhdHVzWzNdKSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gUkQgKEhjSW50ZXJydXB0U3RhdHVzWzNdKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFJEIChIY0ludGVycnVwdFN0YXR1c1szXSkgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8Rk5PICAgICAgIHxGcmFtZSBOdW1iZXIgT3ZlcmZsb3cgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gRk5PIChIY0ludGVycnVwdFN0YXR1c1s1XSkgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIEZOTyAoSGNJbnRlcnJ1cHRTdGF0dXNbNV0pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gRk5PIChIY0ludGVycnVwdFN0YXR1c1s1XSkgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8UkhTQyAgICAgIHxSb290IEh1YiBTdGF0dXMgQ2hhbmdlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFJIU0MgKEhjSW50ZXJydXB0U3RhdHVzWzZdKSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gUkhTQyAoSGNJbnRlcnJ1cHRTdGF0dXNbNl0pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gUkhTQyAoSGNJbnRlcnJ1cHRTdGF0dXNbNl0pIEVuYWJsZWQuCisgICAgICogfFszMV0gICAgfE1JRSAgICAgICB8TWFzdGVyIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgYSBnbG9iYWwgaW50ZXJydXB0IGVuYWJsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgd3JpdGUgb2YgdTIwMTgxJyBhbGxvd3MgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkIHZpYSB0aGUgc3BlY2lmaWMgZW5hYmxlIGJpdHMgbGlzdGVkIGFib3ZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gUkhTQyAoSGNJbnRlcnJ1cHRTdGF0dXNbNl0pLCBGTk8gKEhjSW50ZXJydXB0U3RhdHVzWzVdKSwgUkQgKEhjSW50ZXJydXB0U3RhdHVzWzNdKSwgU0YgKEhjSW50ZXJydXB0U3RhdHVzWzJdKSwgV0RIIChIY0ludGVycnVwdFN0YXR1c1sxXSkgb3IgU08gKEhjSW50ZXJydXB0U3RhdHVzWzBdKSBFbmFibGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiBIY0ludGVycnVwdEVuYWJsZSBpcyBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gUkhTQyAoSGNJbnRlcnJ1cHRTdGF0dXNbNl0pLCBGTk8gKEhjSW50ZXJydXB0U3RhdHVzWzVdKSwgUkQgKEhjSW50ZXJydXB0U3RhdHVzWzNdKSwgU0YgKEhjSW50ZXJydXB0U3RhdHVzWzJdKSwgV0RIIChIY0ludGVycnVwdFN0YXR1c1sxXSkgb3IgU08gKEhjSW50ZXJydXB0U3RhdHVzWzBdKSBEaXNhYmxlZCBldmVuIGlmIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiBIY0ludGVycnVwdEVuYWJsZSBpcyBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gUkhTQyAoSGNJbnRlcnJ1cHRTdGF0dXNbNl0pLCBGTk8gKEhjSW50ZXJydXB0U3RhdHVzWzVdKSwgUkQgKEhjSW50ZXJydXB0U3RhdHVzWzNdKSwgU0YgKEhjSW50ZXJydXB0U3RhdHVzWzJdKSwgV0RIIChIY0ludGVycnVwdFN0YXR1c1sxXSkgb3IgU08gKEhjSW50ZXJydXB0U3RhdHVzWzBdKSBFbmFibGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiBIY0ludGVycnVwdEVuYWJsZSBpcyBoaWdoLgorICAgICAqIEB2YXIgVVNCSF9UOjpIY0ludGVycnVwdERpc2FibGUKKyAgICAgKiBPZmZzZXQ6IDB4MTQgIEhvc3QgQ29udHJvbGxlciBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNPICAgICAgICB8U2NoZWR1bGluZyBPdmVycnVuIERpc2FibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBTTyAoSGNJbnRlcnJ1cHRTdGF0dXNbMF0pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gU08gKEhjSW50ZXJydXB0U3RhdHVzWzBdKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFNPIChIY0ludGVycnVwdFN0YXR1c1swXSkgRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8V0RIICAgICAgIHxXcml0ZSBCYWNrIERvbmUgSGVhZCBEaXNhYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gV0RIIChIY0ludGVycnVwdFN0YXR1c1sxXSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBXREggKEhjSW50ZXJydXB0U3RhdHVzWzFdKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFdESCAoSGNJbnRlcnJ1cHRTdGF0dXNbMV0pIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFNGICAgICAgICB8U3RhcnQgb2YgRnJhbWUgRGlzYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFNGIChIY0ludGVycnVwdFN0YXR1c1syXSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBTRiAoSGNJbnRlcnJ1cHRTdGF0dXNbMl0pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gU0YgKEhjSW50ZXJydXB0U3RhdHVzWzJdKSBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxSRCAgICAgICAgfFJlc3VtZSBEZXRlY3RlZCBEaXNhYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gUkQgKEhjSW50ZXJydXB0U3RhdHVzWzNdKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFJEIChIY0ludGVycnVwdFN0YXR1c1szXSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSRCAoSGNJbnRlcnJ1cHRTdGF0dXNbM10pIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfEZOTyAgICAgICB8RnJhbWUgTnVtYmVyIE92ZXJmbG93IERpc2FibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBGTk8gKEhjSW50ZXJydXB0U3RhdHVzWzVdKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIEZOTyAoSGNJbnRlcnJ1cHRTdGF0dXNbNV0pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gRk5PIChIY0ludGVycnVwdFN0YXR1c1s1XSkgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8UkhTQyAgICAgIHxSb290IEh1YiBTdGF0dXMgQ2hhbmdlIERpc2FibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSSFNDIChIY0ludGVycnVwdFN0YXR1c1s2XSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSSFNDIChIY0ludGVycnVwdFN0YXR1c1s2XSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSSFNDIChIY0ludGVycnVwdFN0YXR1c1s2XSkgRW5hYmxlZC4KKyAgICAgKiB8WzMxXSAgICB8TUlFICAgICAgIHxNYXN0ZXIgSW50ZXJydXB0IERpc2FibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8R2xvYmFsIGludGVycnVwdCBkaXNhYmxlLiBXcml0aW5nIHUyMDE4MScgdG8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFJIU0MgKEhjSW50ZXJydXB0U3RhdHVzWzZdKSwgRk5PIChIY0ludGVycnVwdFN0YXR1c1s1XSksIFJEIChIY0ludGVycnVwdFN0YXR1c1szXSksIFNGIChIY0ludGVycnVwdFN0YXR1c1syXSksIFdESCAoSGNJbnRlcnJ1cHRTdGF0dXNbMV0pIG9yIFNPIChIY0ludGVycnVwdFN0YXR1c1swXSkgRGlzYWJsZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIEhjSW50ZXJydXB0RW5hYmxlIGlzIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSSFNDIChIY0ludGVycnVwdFN0YXR1c1s2XSksIEZOTyAoSGNJbnRlcnJ1cHRTdGF0dXNbNV0pLCBSRCAoSGNJbnRlcnJ1cHRTdGF0dXNbM10pLCBTRiAoSGNJbnRlcnJ1cHRTdGF0dXNbMl0pLCBXREggKEhjSW50ZXJydXB0U3RhdHVzWzFdKSBvciBTTyAoSGNJbnRlcnJ1cHRTdGF0dXNbMF0pIERpc2FibGVkIGV2ZW4gaWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIEhjSW50ZXJydXB0RW5hYmxlIGlzIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSSFNDIChIY0ludGVycnVwdFN0YXR1c1s2XSksIEZOTyAoSGNJbnRlcnJ1cHRTdGF0dXNbNV0pLCBSRCAoSGNJbnRlcnJ1cHRTdGF0dXNbM10pLCBTRiAoSGNJbnRlcnJ1cHRTdGF0dXNbMl0pLCBXREggKEhjSW50ZXJydXB0U3RhdHVzWzFdKSBvciBTTyAoSGNJbnRlcnJ1cHRTdGF0dXNbMF0pIEVuYWJsZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIEhjSW50ZXJydXB0RW5hYmxlIGlzIGhpZ2guCisgICAgICogQHZhciBVU0JIX1Q6OkhjSENDQQorICAgICAqIE9mZnNldDogMHgxOCAgSG9zdCBDb250cm9sbGVyIENvbW11bmljYXRpb24gQXJlYSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTo4XSAgfEhDQ0EgICAgICB8SG9zdCBDb250cm9sbGVyIENvbW11bmljYXRpb24gQXJlYQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBvaW50ZXIgdG8gaW5kaWNhdGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBIb3N0IENvbnRyb2xsZXIgQ29tbXVuaWNhdGlvbiBBcmVhIChIQ0NBKS4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNQZXJpb2RDdXJyZW50RUQKKyAgICAgKiBPZmZzZXQ6IDB4MUMgIEhvc3QgQ29udHJvbGxlciBQZXJpb2QgQ3VycmVudCBFRCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTo0XSAgfFBDRUQgICAgICB8UGVyaW9kaWMgQ3VycmVudCBFRAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBvaW50ZXIgdG8gaW5kaWNhdGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBJc29jaHJvbm91cyBvciBJbnRlcnJ1cHQgRW5kcG9pbnQgRGVzY3JpcHRvci4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNDb250cm9sSGVhZEVECisgICAgICogT2Zmc2V0OiAweDIwICBIb3N0IENvbnRyb2xsZXIgQ29udHJvbCBIZWFkIEVEIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjRdICB8Q0hFRCAgICAgIHxDb250cm9sIEhlYWQgRUQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQb2ludGVyIHRvIGluZGljYXRlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IEVuZHBvaW50IERlc2NyaXB0b3Igb2YgdGhlIENvbnRyb2wgbGlzdC4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNDb250cm9sQ3VycmVudEVECisgICAgICogT2Zmc2V0OiAweDI0ICBIb3N0IENvbnRyb2xsZXIgQ29udHJvbCBDdXJyZW50IEVEIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjRdICB8Q0NFRCAgICAgIHxDb250cm9sIEN1cnJlbnQgSGVhZCBFRAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBvaW50ZXIgdG8gaW5kaWNhdGUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgRW5kcG9pbnQgRGVzY3JpcHRvciBvZiB0aGUgQ29udHJvbCBsaXN0LgorICAgICAqIEB2YXIgVVNCSF9UOjpIY0J1bGtIZWFkRUQKKyAgICAgKiBPZmZzZXQ6IDB4MjggIEhvc3QgQ29udHJvbGxlciBCdWxrIEhlYWQgRUQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6NF0gIHxCSEVEICAgICAgfEJ1bGsgSGVhZCBFRAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBvaW50ZXIgdG8gaW5kaWNhdGUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IEVuZHBvaW50IERlc2NyaXB0b3Igb2YgdGhlIEJ1bGsgbGlzdC4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNCdWxrQ3VycmVudEVECisgICAgICogT2Zmc2V0OiAweDJDICBIb3N0IENvbnRyb2xsZXIgQnVsayBDdXJyZW50IEVEIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjRdICB8QkNFRCAgICAgIHxCdWxrIEN1cnJlbnQgSGVhZCBFRAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBvaW50ZXIgdG8gaW5kaWNhdGUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgZW5kcG9pbnQgb2YgdGhlIEJ1bGsgbGlzdC4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNEb25lSGVhZAorICAgICAqIE9mZnNldDogMHgzMCAgSG9zdCBDb250cm9sbGVyIERvbmUgSGVhZCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTo0XSAgfERIICAgICAgICB8RG9uZSBIZWFkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UG9pbnRlciB0byBpbmRpY2F0ZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbGFzdCBjb21wbGV0ZWQgVHJhbnNmZXIgRGVzY3JpcHRvciB0aGF0IHdhcyBhZGRlZCB0byB0aGUgRG9uZSBxdWV1ZS4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNGbUludGVydmFsCisgICAgICogT2Zmc2V0OiAweDM0ICBIb3N0IENvbnRyb2xsZXIgRnJhbWUgSW50ZXJ2YWwgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTM6MF0gIHxGSSAgICAgICAgfEZyYW1lIEludGVydmFsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBzcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiBhIGZyYW1lIGFzIChiaXQgdGltZXMgLSAxKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciAxMiwwMDAgYml0IHRpbWVzIGluIGEgZnJhbWUsIGEgdmFsdWUgb2YgMTEsOTk5IGlzIHN0b3JlZCBoZXJlLgorICAgICAqIHxbMzA6MTZdIHxGU01QUyAgICAgfEZTIExhcmdlc3QgRGF0YSBQYWNrZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIHNwZWNpZmllcyBhIHZhbHVlIHRoYXQgaXMgbG9hZGVkIGludG8gdGhlIExhcmdlc3QgRGF0YSBQYWNrZXQgQ291bnRlciBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggZnJhbWUuCisgICAgICogfFszMV0gICAgfEZJVCAgICAgICB8RnJhbWUgSW50ZXJ2YWwgVG9nZ2xlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdG9nZ2xlZCBieSBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIHdoZW4gaXQgbG9hZHMgYSBuZXcgdmFsdWUgaW50byBGSSAoSGNGbUludGVydmFsWzEzOjBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSG9zdCBDb250cm9sbGVyIERyaXZlciBkaWRuJ3QgbG9hZCBuZXcgdmFsdWUgaW50byBGSSAoSGNGbUludGVydmFsWzEzOjBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSG9zdCBDb250cm9sbGVyIERyaXZlciBsb2FkcyBhIG5ldyB2YWx1ZSBpbnRvIEZJIChIY0ZtSW50ZXJ2YWxbMTM6MF0pLgorICAgICAqIEB2YXIgVVNCSF9UOjpIY0ZtUmVtYWluaW5nCisgICAgICogT2Zmc2V0OiAweDM4ICBIb3N0IENvbnRyb2xsZXIgRnJhbWUgUmVtYWluaW5nIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzEzOjBdICB8RlIgICAgICAgIHxGcmFtZSBSZW1haW5pbmcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBIb3N0IENvbnRyb2xsZXIgaXMgaW4gdGhlIFVTQk9QRVJBVElPTkFMIHN0YXRlLCB0aGlzIDE0LWJpdCBmaWVsZCBkZWNyZW1lbnRzIGVhY2ggMTIgTUh6IGNsb2NrIHBlcmlvZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGNvdW50IHJlYWNoZXMgMCwgKGVuZCBvZiBmcmFtZSkgdGhlIGNvdW50ZXIgcmVsb2FkcyB3aXRoIEZyYW1lIEludGVydmFsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gYWRkaXRpb24sIHRoZSBjb3VudGVyIGxvYWRzIHdoZW4gdGhlIEhvc3QgQ29udHJvbGxlciB0cmFuc2l0aW9ucyBpbnRvIFVTQk9QRVJBVElPTkFMLgorICAgICAqIHxbMzFdICAgIHxGUlQgICAgICAgfEZyYW1lIFJlbWFpbmluZyBUb2dnbGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBsb2FkZWQgZnJvbSB0aGUgRklUIChIY0ZtSW50ZXJ2YWxbMzFdKSB3aGVuZXZlciBGUiAoSGNGbVJlbWFpbmluZ1sxMzowXSkgcmVhY2hlcyAwLgorICAgICAqIEB2YXIgVVNCSF9UOjpIY0ZtTnVtYmVyCisgICAgICogT2Zmc2V0OiAweDNDICBIb3N0IENvbnRyb2xsZXIgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8Rk4gICAgICAgIHxGcmFtZSBOdW1iZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIDE2LWJpdCBpbmNyZW1lbnRpbmcgY291bnRlciBmaWVsZCBpcyBpbmNyZW1lbnRlZCBjb2luY2lkZW50IHdpdGggdGhlIHJlLWxvYWQgb2YgRlIgKEhjRm1SZW1haW5pbmdbMTM6MF0pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvdW50IHJvbGxzIG92ZXIgZnJvbSB1MjAxOEZGRkZoJyB0byB1MjAxODBoLicKKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNQZXJpb2RpY1N0YXJ0CisgICAgICogT2Zmc2V0OiAweDQwICBIb3N0IENvbnRyb2xsZXIgUGVyaW9kaWMgU3RhcnQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTM6MF0gIHxQUyAgICAgICAgfFBlcmlvZGljIFN0YXJ0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjb250YWlucyBhIHZhbHVlIHVzZWQgYnkgdGhlIExpc3QgUHJvY2Vzc29yIHRvIGRldGVybWluZSB3aGVyZSBpbiBhIGZyYW1lIHRoZSBQZXJpb2RpYyBMaXN0IHByb2Nlc3NpbmcgbXVzdCBiZWdpbi4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNMU1RocmVzaG9sZAorICAgICAqIE9mZnNldDogMHg0NCAgSG9zdCBDb250cm9sbGVyIExvdy1zcGVlZCBUaHJlc2hvbGQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTE6MF0gIHxMU1QgICAgICAgfExvdy1zcGVlZCBUaHJlc2hvbGQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgd2hpY2ggaXMgY29tcGFyZWQgdG8gdGhlIEZSIChIY0ZtUmVtYWluaW5nWzEzOjBdKSBmaWVsZCBwcmlvciB0byBpbml0aWF0aW5nIGEgTG93LXNwZWVkIHRyYW5zYWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHRyYW5zYWN0aW9uIGlzIHN0YXJ0ZWQgb25seSBpZiBGUiAoSGNGbVJlbWFpbmluZ1sxMzowXSkgPj0gdGhpcyBmaWVsZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWx1ZSBpcyBjYWxjdWxhdGVkIGJ5IEhvc3QgQ29udHJvbGxlciBEcml2ZXIgd2l0aCB0aGUgY29uc2lkZXJhdGlvbiBvZiB0cmFuc21pc3Npb24gYW5kIHNldHVwIG92ZXJoZWFkLgorICAgICAqIEB2YXIgVVNCSF9UOjpIY1JoRGVzY3JpcHRvckEKKyAgICAgKiBPZmZzZXQ6IDB4NDggIEhvc3QgQ29udHJvbGxlciBSb290IEh1YiBEZXNjcmlwdG9yIEEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxORFAgICAgICAgfE51bWJlciBEb3duc3RyZWFtIFBvcnRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VVNCIGhvc3QgY29udHJvbCBzdXBwb3J0cyB0d28gZG93bnN0cmVhbSBwb3J0cyBhbmQgb25seSBvbmUgcG9ydCBpcyBhdmFpbGFibGUgaW4gdGhpcyBzZXJpZXMgb2YgY2hpcC4KKyAgICAgKiB8WzhdICAgICB8UFNNICAgICAgIHxQb3dlciBTd2l0Y2hpbmcgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gc3BlY2lmeSBob3cgdGhlIHBvd2VyIHN3aXRjaGluZyBvZiB0aGUgUm9vdCBIdWIgcG9ydHMgaXMgY29udHJvbGxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR2xvYmFsIFN3aXRjaGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaXZpZHVhbCBTd2l0Y2hpbmcuCisgICAgICogfFsxMV0gICAgfE9DUE0gICAgICB8b3ZlciBDdXJyZW50IFByb3RlY3Rpb24gTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlc2NyaWJlcyBob3cgdGhlIG92ZXIgY3VycmVudCBzdGF0dXMgZm9yIHRoZSBSb290IEh1YiBwb3J0cyByZXBvcnRlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgd2hlbiBOT0NQIChIY1JoRGVzY3JpcHRvckFbMTJdKSBpcyBjbGVhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHbG9iYWwgT3ZlciBjdXJyZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpdmlkdWFsIE92ZXIgY3VycmVudC4KKyAgICAgKiB8WzEyXSAgICB8Tk9DUCAgICAgIHxObyBvdmVyIEN1cnJlbnQgUHJvdGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlc2NyaWJlcyBob3cgdGhlIG92ZXIgY3VycmVudCBzdGF0dXMgZm9yIHRoZSBSb290IEh1YiBwb3J0cyByZXBvcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT3ZlciBjdXJyZW50IHN0YXR1cyBpcyByZXBvcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3ZlciBjdXJyZW50IHN0YXR1cyBpcyBub3QgcmVwb3J0ZWQuCisgICAgICogQHZhciBVU0JIX1Q6OkhjUmhEZXNjcmlwdG9yQgorICAgICAqIE9mZnNldDogMHg0QyAgSG9zdCBDb250cm9sbGVyIFJvb3QgSHViIERlc2NyaXB0b3IgQiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMToxNl0gfFBQQ00gICAgICB8UG9ydCBQb3dlciBDb250cm9sIE1hc2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxHbG9iYWwgcG93ZXIgc3dpdGNoaW5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIGlmIFBvd2VyU3dpdGNoaW5nTW9kZSBpcyBzZXQgKGluZGl2aWR1YWwgcG9ydCBzd2l0Y2hpbmcpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBzZXQsIHRoZSBwb3J0IG9ubHkgcmVzcG9uZHMgdG8gaW5kaXZpZHVhbCBwb3J0IHBvd2VyIHN3aXRjaGluZyBjb21tYW5kcyAoU2V0L0NsZWFyUG9ydFBvd2VyKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gY2xlYXJlZCwgdGhlIHBvcnQgb25seSByZXNwb25kcyB0byBnbG9iYWwgcG93ZXIgc3dpdGNoaW5nIGNvbW1hbmRzIChTZXQvQ2xlYXJHbG9iYWxQb3dlcikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBvcnQgcG93ZXIgY29udHJvbGxlZCBieSBnbG9iYWwgcG93ZXIgc3dpdGNoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQb3J0IHBvd2VyIGNvbnRyb2xsZWQgYnkgcG9ydCBwb3dlciBzd2l0Y2hpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogUFBDTVsxNToyXSBhbmQgUFBDTVswXSBhcmUgcmVzZXJ2ZWQuCisgICAgICogQHZhciBVU0JIX1Q6OkhjUmhTdGF0dXMKKyAgICAgKiBPZmZzZXQ6IDB4NTAgIEhvc3QgQ29udHJvbGxlciBSb290IEh1YiBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxMUFMgICAgICAgfENsZWFyIEdsb2JhbCBQb3dlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIGdsb2JhbCBwb3dlciBtb2RlIChQU00gKEhjUmhEZXNjcmlwdG9yQVs4XSkgPSAwKSwgdGhpcyBiaXQgaXMgd3JpdHRlbiB0byBvbmUgdG8gY2xlYXIgYWxsIHBvcnRzJyBwb3dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBhbHdheXMgcmVhZCBhcyB6ZXJvLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhciBnbG9iYWwgcG93ZXIuCisgICAgICogfFsxXSAgICAgfE9DSSAgICAgICB8b3ZlciBDdXJyZW50IEluZGljYXRvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHJlZmxlY3RzIHRoZSBzdGF0ZSBvZiB0aGUgb3ZlciBjdXJyZW50IHN0YXR1cyBwaW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIG9ubHkgdmFsaWQgaWYgTk9DUCAoSGNSaERlc0FbMTJdKSBhbmQgT0NQTSAoSGNSaERlc0FbMTFdKSBhcmUgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gb3ZlciBjdXJyZW50IGNvbmRpdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3ZlciBjdXJyZW50IGNvbmRpdGlvbi4KKyAgICAgKiB8WzE1XSAgICB8RFJXRSAgICAgIHxEZXZpY2UgUmVtb3RlIFdha2V1cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgY29udHJvbHMgaWYgcG9ydCdzIENvbm5lY3QgU3RhdHVzIENoYW5nZSBhcyBhIHJlbW90ZSB3YWtlLXVwIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb25uZWN0IFN0YXR1cyBDaGFuZ2UgYXMgYSByZW1vdGUgd2FrZS11cCBldmVudCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb25uZWN0IFN0YXR1cyBDaGFuZ2UgYXMgYSByZW1vdGUgd2FrZS11cCBldmVudCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29ubmVjdCBTdGF0dXMgQ2hhbmdlIGFzIGEgcmVtb3RlIHdha2UtdXAgZXZlbnQgRW5hYmxlZC4KKyAgICAgKiB8WzE2XSAgICB8TFBTQyAgICAgIHxTZXQgR2xvYmFsIFBvd2VyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gZ2xvYmFsIHBvd2VyIG1vZGUgKFBTTSAoSGNSaERlc2NyaXB0b3JBWzhdKSA9IDApLCB0aGlzIGJpdCBpcyB3cml0dGVuIHRvIG9uZSB0byBlbmFibGUgcG93ZXIgdG8gYWxsIHBvcnRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGFsd2F5cyByZWFkIGFzIHplcm8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNldCBnbG9iYWwgcG93ZXIuCisgICAgICogfFsxN10gICAgfE9DSUMgICAgICB8b3ZlciBDdXJyZW50IEluZGljYXRvciBDaGFuZ2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBhIGNoYW5nZSBoYXMgb2NjdXJyZWQgaW4gT0NJIChIY1JoU3RhdHVzWzFdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE9DSSAoSGNSaFN0YXR1c1sxXSkgZGlkbid0IGNoYW5nZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT0NJIChIY1JoU3RhdHVzWzFdKSBjaGFuZ2UuCisgICAgICogfFszMV0gICAgfENSV0UgICAgICB8Q2xlYXIgUmVtb3RlIFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZSB0byBjbGVhciBEUldFIChIY1JoU3RhdHVzWzE1XSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgYWx3YXlzIHJlYWQgYXMgemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgRFJXRSAoSGNSaFN0YXR1c1sxNV0pLgorICAgICAqIEB2YXIgVVNCSF9UOjpIY1JoUG9ydFN0YXR1c1syXQorICAgICAqIE9mZnNldDogMHg1NCAgSG9zdCBDb250cm9sbGVyIFJvb3QgSHViIFBvcnQgU3RhdHVzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q0NTICAgICAgIHxDdXJyZW50Q29ubmVjdFN0YXR1cyAoUmVhZCkgb3IgQ2xlYXJQb3J0RW5hYmxlIEJpdCAoV3JpdGUpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIHBvcnQgZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBkZXZpY2UgY29ubmVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEZXZpY2UgY29ubmVjdGVkLgorICAgICAqIHxbMV0gICAgIHxQRVMgICAgICAgfFBvcnQgRW5hYmxlIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXQgcG9ydCBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBvcnQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBvcnQgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8UFNTICAgICAgIHxQb3J0IFN1c3BlbmQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoZSBwb3J0IGlzIHN1c3BlbmRlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXQgcG9ydCBzdXNwZW5kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQb3J0IGlzIG5vdCBzdXNwZW5kZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBvcnQgaXMgc2VsZWN0aXZlbHkgc3VzcGVuZGVkLgorICAgICAqIHxbM10gICAgIHxQT0NJICAgICAgfFBvcnQgb3ZlciBDdXJyZW50IEluZGljYXRvciAoUmVhZCkgb3IgQ2xlYXIgUG9ydCBTdXNwZW5kIChXcml0ZSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCByZWZsZWN0cyB0aGUgc3RhdGUgb2YgdGhlIG92ZXIgY3VycmVudCBzdGF0dXMgcGluIGRlZGljYXRlZCB0byB0aGlzIHBvcnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIG9ubHkgdmFsaWQgaWYgTk9DUCAoSGNSaERlc2NyaXB0b3JBWzEyXSkgaXMgY2xlYXJlZCBhbmQgT0NQTSAoSGNSaERlc2NyaXB0b3JBWzExXSkgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGFsc28gdXNlZCB0byBpbml0aWF0ZSB0aGUgc2VsZWN0aXZlIHJlc3VsdCBzZXF1ZW5jZSBmb3IgdGhlIHBvcnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIHBvcnQgc3VzcGVuZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gb3ZlciBjdXJyZW50IGNvbmRpdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3ZlciBjdXJyZW50IGNvbmRpdGlvbi4KKyAgICAgKiB8WzRdICAgICB8UFJTICAgICAgIHxQb3J0IFJlc2V0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHJlZmxlY3RzIHRoZSByZXNldCBzdGF0ZSBvZiB0aGUgcG9ydC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0IHBvcnQgcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUG9ydCByZXNldCBzaWduYWwgaXMgbm90IGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUG9ydCByZXNldCBzaWduYWwgaXMgYWN0aXZlLgorICAgICAqIHxbOF0gICAgIHxQUFMgICAgICAgfFBvcnQgUG93ZXIgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgcmVmbGVjdHMgdGhlIHBvd2VyIHN0YXRlIG9mIHRoZSBwb3J0IHJlZ2FyZGxlc3Mgb2YgdGhlIHBvd2VyIHN3aXRjaGluZyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQb3J0IFBvd2VyIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBvcnQgcG93ZXIgaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBvcnQgcG93ZXIgaXMgRW5hYmxlZC4KKyAgICAgKiB8WzldICAgICB8TFNEQSAgICAgIHxMb3cgU3BlZWQgRGV2aWNlIEF0dGFjaGVkIChSZWFkKSBvciBDbGVhciBQb3J0IFBvd2VyIChXcml0ZSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZWZpbmVzIHRoZSBzcGVlZCAoYW5kIGJ1ZCBpZGxlKSBvZiB0aGUgYXR0YWNoZWQgZGV2aWNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgb25seSB2YWxpZCB3aGVuIENDUyAoSGNSaFBvcnRTdGF0dXNbMF0pIGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBhbHNvIHVzZWQgdG8gY2xlYXIgcG9ydCBwb3dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgUFBTIChIY1JoUG9ydFN0YXR1c1s4XSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZ1bGwgU3BlZWQgZGV2aWNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMb3ctc3BlZWQgZGV2aWNlLgorICAgICAqIHxbMTZdICAgIHxDU0MgICAgICAgfENvbm5lY3QgU3RhdHVzIENoYW5nZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyBjb25uZWN0IG9yIGRpc2Nvbm5lY3QgZXZlbnQgaGFzIGJlZW4gZGV0ZWN0ZWQgKENDUyAoSGNSaFBvcnRTdGF0dXNbMF0pIGNoYW5nZWQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY29ubmVjdC9kaXNjb25uZWN0IGV2ZW50IChDQ1MgKEhjUmhQb3J0U3RhdHVzWzBdKSBkaWRuJ3QgY2hhbmdlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSGFyZHdhcmUgZGV0ZWN0aW9uIG9mIGNvbm5lY3QvZGlzY29ubmVjdCBldmVudCAoQ0NTIChIY1JoUG9ydFN0YXR1c1swXSkgY2hhbmdlZCkuCisgICAgICogfFsxN10gICAgfFBFU0MgICAgICB8UG9ydCBFbmFibGUgU3RhdHVzIENoYW5nZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IHRoZSBwb3J0IGhhcyBiZWVuIGRpc2FibGVkIChQRVMgKEhjUmhQb3J0U3RhdHVzWzFdKSBjbGVhcmVkKSBkdWUgdG8gYSBoYXJkd2FyZSBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBFUyAoSGNSaFBvcnRTdGF0dXNbMV0pIGRpZG4ndCBjaGFuZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBFUyAoSGNSaFBvcnRTdGF0dXNbMV0pIGNoYW5nZWQuCisgICAgICogfFsxOF0gICAgfFBTU0MgICAgICB8UG9ydCBTdXNwZW5kIFN0YXR1cyBDaGFuZ2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHNlbGVjdGl2ZSByZXN1bWUgc2VxdWVuY2UgZm9yIHRoZSBwb3J0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUG9ydCByZXN1bWUgaXMgbm90IGNvbXBsZXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUG9ydCByZXN1bWUgY29tcGxldGVkLgorICAgICAqIHxbMTldICAgIHxPQ0lDICAgICAgfFBvcnQgb3ZlciBDdXJyZW50IEluZGljYXRvciBDaGFuZ2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiBQT0NJIChIY1JoUG9ydFN0YXR1c1szXSkgY2hhbmdlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBPQ0kgKEhjUmhQb3J0U3RhdHVzWzNdKSBkaWRuJ3QgY2hhbmdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQT0NJIChIY1JoUG9ydFN0YXR1c1szXSkgY2hhbmdlcy4KKyAgICAgKiB8WzIwXSAgICB8UFJTQyAgICAgIHxQb3J0IFJlc2V0IFN0YXR1cyBDaGFuZ2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgcG9ydCByZXNldCBzaWduYWwgaGFzIGNvbXBsZXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBvcnQgcmVzZXQgaXMgbm90IGNvbXBsZXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQb3J0IHJlc2V0IGlzIGNvbXBsZXRlLgorICAgICAqIEB2YXIgVVNCSF9UOjpIY1BoeUNvbnRyb2wKKyAgICAgKiBPZmZzZXQ6IDB4MjAwICBIb3N0IENvbnRyb2xsZXIgUEhZIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjddICAgIHxTVEJZRU4gICAgfFVTQiBUcmFuc2NlaXZlciBTdGFuZGJ5IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBjb250cm9scyBpZiBVU0IgdHJhbnNjZWl2ZXIgY291bGQgZW50ZXIgdGhlIHN0YW5kYnkgbW9kZSB0byByZWR1Y2UgcG93ZXIgY29uc3VtcHRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBVU0IgdHJhbnNjZWl2ZXIgd291bGQgbmV2ZXIgZW50ZXIgdGhlIHN0YW5kYnkgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIFVTQiB0cmFuc2NlaXZlciB3aWxsIGVudGVyIHN0YW5kYnkgbW9kZSB3aGlsZSBwb3J0IGlzIGluIHBvd2VyIG9mZiBzdGF0ZSAocG9ydCBwb3dlciBpcyBpbmFjdGl2ZSkuCisgICAgICogQHZhciBVU0JIX1Q6OkhjTWlzY0NvbnRyb2wKKyAgICAgKiBPZmZzZXQ6IDB4MjA0ICBIb3N0IENvbnRyb2xsZXIgTWlzY2VsbGFuZW91cyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzFdICAgICB8QUJPUlQgICAgIHxBSEIgQnVzIEVSUk9SIFJlc3BvbnNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoZXJlIGlzIGFuIEVSUk9SIHJlc3BvbnNlIHJlY2VpdmVkIGluIEFIQiBidXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEVSUk9SIHJlc3BvbnNlIHJlY2VpdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUlJPUiByZXNwb25zZSByZWNlaXZlZC4KKyAgICAgKiB8WzNdICAgICB8T0NBTCAgICAgIHxvdmVyIEN1cnJlbnQgQWN0aXZlIExvdworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNvbnRyb2xzIHRoZSBwb2xhcml0eSBvZiBvdmVyIGN1cnJlbnQgZmxhZyBmcm9tIGV4dGVybmFsIHBvd2VyIElDLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdmVyIGN1cnJlbnQgZmxhZyBpcyBoaWdoIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3ZlciBjdXJyZW50IGZsYWcgaXMgbG93IGFjdGl2ZS4KKyAgICAgKiB8WzE2XSAgICB8RFBSVDEgICAgIHxEaXNhYmxlIFBvcnQgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNvbnRyb2xzIGlmIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gVVNCIGhvc3QgY29udHJvbGxlciBhbmQgdHJhbnNjZWl2ZXIgb2YgcG9ydCAxIGlzIGRpc2FibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGNvbm5lY3Rpb24gaXMgZGlzYWJsZWQsIHRoZSBVU0IgaG9zdCBjb250cm9sbGVyIHdpbGwgbm90IHJlY29nbml6ZSBhbnkgZXZlbnQgb2YgVVNCIGJ1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgaGlnaCwgdGhlIHRyYW5zY2VpdmVyIG9mIHBvcnQgMSB3aWxsIGFsc28gYmUgZm9yY2VkIGludG8gdGhlIHN0YW5kYnkgbW9kZSBubyBtYXR0ZXIgd2hhdCBVU0IgaG9zdCBjb250cm9sbGVyIG9wZXJhdGlvbiBpcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBVU0IgaG9zdCBjb250cm9sbGVyIGFuZCB0cmFuc2NlaXZlciBvZiBwb3J0IDEgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBVU0IgaG9zdCBjb250cm9sbGVyIGFuZCB0cmFuc2NlaXZlciBvZiBwb3J0IDEgRGlzYWJsZWQgYW5kIHRoZSB0cmFuc2NlaXZlciBvZiBwb3J0IDEgd2lsbCBhbHNvIGJlIGZvcmNlZCBpbnRvIHRoZSBzdGFuZGJ5IG1vZGUuCisgICAgICovCisgICAgX19JICB1aW50MzJfdCBIY1JldmlzaW9uOyAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gSG9zdCBDb250cm9sbGVyIFJldmlzaW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNDb250cm9sOyAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIEhvc3QgQ29udHJvbGxlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjQ29tbWFuZFN0YXR1czsgICAgICAgLyohPCBbMHgwMDA4XSBIb3N0IENvbnRyb2xsZXIgQ29tbWFuZCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY0ludGVycnVwdFN0YXR1czsgICAgIC8qITwgWzB4MDAwY10gSG9zdCBDb250cm9sbGVyIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNJbnRlcnJ1cHRFbmFibGU7ICAgICAvKiE8IFsweDAwMTBdIEhvc3QgQ29udHJvbGxlciBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjSW50ZXJydXB0RGlzYWJsZTsgICAgLyohPCBbMHgwMDE0XSBIb3N0IENvbnRyb2xsZXIgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY0hDQ0E7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxOF0gSG9zdCBDb250cm9sbGVyIENvbW11bmljYXRpb24gQXJlYSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNQZXJpb2RDdXJyZW50RUQ7ICAgICAvKiE8IFsweDAwMWNdIEhvc3QgQ29udHJvbGxlciBQZXJpb2QgQ3VycmVudCBFRCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjQ29udHJvbEhlYWRFRDsgICAgICAgLyohPCBbMHgwMDIwXSBIb3N0IENvbnRyb2xsZXIgQ29udHJvbCBIZWFkIEVEIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY0NvbnRyb2xDdXJyZW50RUQ7ICAgIC8qITwgWzB4MDAyNF0gSG9zdCBDb250cm9sbGVyIENvbnRyb2wgQ3VycmVudCBFRCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNCdWxrSGVhZEVEOyAgICAgICAgICAvKiE8IFsweDAwMjhdIEhvc3QgQ29udHJvbGxlciBCdWxrIEhlYWQgRUQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjQnVsa0N1cnJlbnRFRDsgICAgICAgLyohPCBbMHgwMDJjXSBIb3N0IENvbnRyb2xsZXIgQnVsayBDdXJyZW50IEVEIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY0RvbmVIZWFkOyAgICAgICAgICAgIC8qITwgWzB4MDAzMF0gSG9zdCBDb250cm9sbGVyIERvbmUgSGVhZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNGbUludGVydmFsOyAgICAgICAgICAvKiE8IFsweDAwMzRdIEhvc3QgQ29udHJvbGxlciBGcmFtZSBJbnRlcnZhbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEhjRm1SZW1haW5pbmc7ICAgICAgICAgLyohPCBbMHgwMDM4XSBIb3N0IENvbnRyb2xsZXIgRnJhbWUgUmVtYWluaW5nIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBIY0ZtTnVtYmVyOyAgICAgICAgICAgIC8qITwgWzB4MDAzY10gSG9zdCBDb250cm9sbGVyIEZyYW1lIE51bWJlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNQZXJpb2RpY1N0YXJ0OyAgICAgICAvKiE8IFsweDAwNDBdIEhvc3QgQ29udHJvbGxlciBQZXJpb2RpYyBTdGFydCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjTFNUaHJlc2hvbGQ7ICAgICAgICAgLyohPCBbMHgwMDQ0XSBIb3N0IENvbnRyb2xsZXIgTG93LXNwZWVkIFRocmVzaG9sZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY1JoRGVzY3JpcHRvckE7ICAgICAgIC8qITwgWzB4MDA0OF0gSG9zdCBDb250cm9sbGVyIFJvb3QgSHViIERlc2NyaXB0b3IgQSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNSaERlc2NyaXB0b3JCOyAgICAgICAvKiE8IFsweDAwNGNdIEhvc3QgQ29udHJvbGxlciBSb290IEh1YiBEZXNjcmlwdG9yIEIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjUmhTdGF0dXM7ICAgICAgICAgICAgLyohPCBbMHgwMDUwXSBIb3N0IENvbnRyb2xsZXIgUm9vdCBIdWIgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY1JoUG9ydFN0YXR1c1syXTsgICAgIC8qITwgWzB4MDA1NF0gSG9zdCBDb250cm9sbGVyIFJvb3QgSHViIFBvcnQgU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTBbMTA1XTsKKyAgICBfX0lPIHVpbnQzMl90IEhjUGh5Q29udHJvbDsgICAgICAgICAgLyohPCBbMHgwMjAwXSBIb3N0IENvbnRyb2xsZXIgUEhZIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY01pc2NDb250cm9sOyAgICAgICAgIC8qITwgWzB4MDIwNF0gSG9zdCBDb250cm9sbGVyIE1pc2NlbGxhbmVvdXMgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworCit9IFVTQkhfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgVVNCSF9DT05TVCBVU0JIIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFVTQkggQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBVU0JIX0hjUmV2aXNpb25fUkVWX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JldmlzaW9uOiBSRVYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCSF9IY1JldmlzaW9uX1JFVl9Nc2sgICAgICAgICAgKDB4ZmZ1bCA8PCBVU0JIX0hjUmV2aXNpb25fUkVWX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSZXZpc2lvbjogUkVWIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0NvbnRyb2xfQ0JTUl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb250cm9sOiBDQlNSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTQkhfSGNDb250cm9sX0NCU1JfTXNrICAgICAgICAgICgweDN1bCA8PCBVU0JIX0hjQ29udHJvbF9DQlNSX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29udHJvbDogQ0JTUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNDb250cm9sX1BMRV9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29udHJvbDogUExFIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JIX0hjQ29udHJvbF9QTEVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNCSF9IY0NvbnRyb2xfUExFX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbnRyb2w6IFBMRSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjQ29udHJvbF9JRV9Qb3MgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbnRyb2w6IElFIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNCSF9IY0NvbnRyb2xfSUVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkhfSGNDb250cm9sX0lFX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb250cm9sOiBJRSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0NvbnRyb2xfQ0xFX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb250cm9sOiBDTEUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkhfSGNDb250cm9sX0NMRV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU0JIX0hjQ29udHJvbF9DTEVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29udHJvbDogQ0xFIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNDb250cm9sX0JMRV9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29udHJvbDogQkxFIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JIX0hjQ29udHJvbF9CTEVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNCSF9IY0NvbnRyb2xfQkxFX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbnRyb2w6IEJMRSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjQ29udHJvbF9IQ0ZTX1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbnRyb2w6IEhDRlMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCSF9IY0NvbnRyb2xfSENGU19Nc2sgICAgICAgICAgKDB4M3VsIDw8IFVTQkhfSGNDb250cm9sX0hDRlNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb250cm9sOiBIQ0ZTIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0NvbW1hbmRTdGF0dXNfSENSX1BvcyAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb21tYW5kU3RhdHVzOiBIQ1IgUG9zaXRpb24gICovCisjZGVmaW5lIFVTQkhfSGNDb21tYW5kU3RhdHVzX0hDUl9Nc2sgICAgICgweDF1bCA8PCBVU0JIX0hjQ29tbWFuZFN0YXR1c19IQ1JfUG9zKSAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29tbWFuZFN0YXR1czogSENSIE1hc2sgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNDb21tYW5kU3RhdHVzX0NMRl9Qb3MgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29tbWFuZFN0YXR1czogQ0xGIFBvc2l0aW9uICAqLworI2RlZmluZSBVU0JIX0hjQ29tbWFuZFN0YXR1c19DTEZfTXNrICAgICAoMHgxdWwgPDwgVVNCSF9IY0NvbW1hbmRTdGF0dXNfQ0xGX1BvcykgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbW1hbmRTdGF0dXM6IENMRiBNYXNrICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjQ29tbWFuZFN0YXR1c19CTEZfUG9zICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbW1hbmRTdGF0dXM6IEJMRiBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVNCSF9IY0NvbW1hbmRTdGF0dXNfQkxGX01zayAgICAgKDB4MXVsIDw8IFVTQkhfSGNDb21tYW5kU3RhdHVzX0JMRl9Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb21tYW5kU3RhdHVzOiBCTEYgTWFzayAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0NvbW1hbmRTdGF0dXNfU09DX1BvcyAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb21tYW5kU3RhdHVzOiBTT0MgUG9zaXRpb24gICovCisjZGVmaW5lIFVTQkhfSGNDb21tYW5kU3RhdHVzX1NPQ19Nc2sgICAgICgweDN1bCA8PCBVU0JIX0hjQ29tbWFuZFN0YXR1c19TT0NfUG9zKSAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29tbWFuZFN0YXR1czogU09DIE1hc2sgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRTdGF0dXNfU09fUG9zICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0U3RhdHVzOiBTTyBQb3NpdGlvbiAqLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX1NPX01zayAgICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdFN0YXR1c19TT19Qb3MpICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdFN0YXR1czogU08gTWFzayAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX1dESF9Qb3MgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdFN0YXR1czogV0RIIFBvc2l0aW9uKi8KKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdFN0YXR1c19XREhfTXNrICAgKDB4MXVsIDw8IFVTQkhfSGNJbnRlcnJ1cHRTdGF0dXNfV0RIX1BvcykgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRTdGF0dXM6IFdESCBNYXNrICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdFN0YXR1c19TRl9Qb3MgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRTdGF0dXM6IFNGIFBvc2l0aW9uICovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRTdGF0dXNfU0ZfTXNrICAgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX1NGX1BvcykgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0U3RhdHVzOiBTRiBNYXNrICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRTdGF0dXNfUkRfUG9zICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0U3RhdHVzOiBSRCBQb3NpdGlvbiAqLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX1JEX01zayAgICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdFN0YXR1c19SRF9Qb3MpICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdFN0YXR1czogUkQgTWFzayAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX0ZOT19Qb3MgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdFN0YXR1czogRk5PIFBvc2l0aW9uKi8KKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdFN0YXR1c19GTk9fTXNrICAgKDB4MXVsIDw8IFVTQkhfSGNJbnRlcnJ1cHRTdGF0dXNfRk5PX1BvcykgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRTdGF0dXM6IEZOTyBNYXNrICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdFN0YXR1c19SSFNDX1BvcyAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRTdGF0dXM6IFJIU0MgUG9zaXRpb24qLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX1JIU0NfTXNrICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdFN0YXR1c19SSFNDX1BvcykgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdFN0YXR1czogUkhTQyBNYXNrICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX1NPX1BvcyAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdEVuYWJsZTogU08gUG9zaXRpb24gKi8KKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9TT19Nc2sgICAgKDB4MXVsIDw8IFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfU09fUG9zKSAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRFbmFibGU6IFNPIE1hc2sgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9XREhfUG9zICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRFbmFibGU6IFdESCBQb3NpdGlvbiovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfV0RIX01zayAgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX1dESF9Qb3MpICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RW5hYmxlOiBXREggTWFzayAgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfU0ZfUG9zICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RW5hYmxlOiBTRiBQb3NpdGlvbiAqLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX1NGX01zayAgICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9TRl9Qb3MpICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdEVuYWJsZTogU0YgTWFzayAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX1JEX1BvcyAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdEVuYWJsZTogUkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9SRF9Nc2sgICAgKDB4MXVsIDw8IFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfUkRfUG9zKSAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRFbmFibGU6IFJEIE1hc2sgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9GTk9fUG9zICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRFbmFibGU6IEZOTyBQb3NpdGlvbiovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfRk5PX01zayAgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX0ZOT19Qb3MpICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RW5hYmxlOiBGTk8gTWFzayAgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfUkhTQ19Qb3MgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RW5hYmxlOiBSSFNDIFBvc2l0aW9uKi8KKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9SSFNDX01zayAgKDB4MXVsIDw8IFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfUkhTQ19Qb3MpICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRFbmFibGU6IFJIU0MgTWFzayAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9NSUVfUG9zICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRFbmFibGU6IE1JRSBQb3NpdGlvbiovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfTUlFX01zayAgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX01JRV9Qb3MpICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RW5hYmxlOiBNSUUgTWFzayAgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX1NPX1BvcyAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZTogU08gUG9zaXRpb24qLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9TT19Nc2sgICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdERpc2FibGVfU09fUG9zKSAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdERpc2FibGU6IFNPIE1hc2sgICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9XREhfUG9zICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdERpc2FibGU6IFdESCBQb3NpdGlvbiovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX1dESF9Nc2sgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9XREhfUG9zKSAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZTogV0RIIE1hc2sgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX1NGX1BvcyAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZTogU0YgUG9zaXRpb24qLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9TRl9Nc2sgICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdERpc2FibGVfU0ZfUG9zKSAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdERpc2FibGU6IFNGIE1hc2sgICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9SRF9Qb3MgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdERpc2FibGU6IFJEIFBvc2l0aW9uKi8KKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdERpc2FibGVfUkRfTXNrICAgKDB4MXVsIDw8IFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX1JEX1BvcykgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHREaXNhYmxlOiBSRCBNYXNrICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdERpc2FibGVfRk5PX1BvcyAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHREaXNhYmxlOiBGTk8gUG9zaXRpb24qLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9GTk9fTXNrICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdERpc2FibGVfRk5PX1BvcykgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdERpc2FibGU6IEZOTyBNYXNrICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9SSFNDX1BvcyAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdERpc2FibGU6IFJIU0MgUG9zaXRpb24qLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9SSFNDX01zayAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdERpc2FibGVfUkhTQ19Qb3MpICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdERpc2FibGU6IFJIU0MgTWFzayAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9NSUVfUG9zICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdERpc2FibGU6IE1JRSBQb3NpdGlvbiovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX01JRV9Nc2sgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9NSUVfUG9zKSAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZTogTUlFIE1hc2sgICAqLworCisjZGVmaW5lIFVTQkhfSGNIQ0NBX0hDQ0FfUG9zICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSENDQTogSENDQSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVU0JIX0hjSENDQV9IQ0NBX01zayAgICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBVU0JIX0hjSENDQV9IQ0NBX1BvcykgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0hDQ0E6IEhDQ0EgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUGVyaW9kQ3VycmVudEVEX1BDRURfUG9zICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1BlcmlvZEN1cnJlbnRFRDogUENFRCBQb3NpdGlvbiovCisjZGVmaW5lIFVTQkhfSGNQZXJpb2RDdXJyZW50RURfUENFRF9Nc2sgICgweGZmZmZmZmZ1bCA8PCBVU0JIX0hjUGVyaW9kQ3VycmVudEVEX1BDRURfUG9zKSAgLyohPCBVU0JIX1Q6OkhjUGVyaW9kQ3VycmVudEVEOiBQQ0VEIE1hc2sgICAqLworCisjZGVmaW5lIFVTQkhfSGNDb250cm9sSGVhZEVEX0NIRURfUG9zICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29udHJvbEhlYWRFRDogQ0hFRCBQb3NpdGlvbiAqLworI2RlZmluZSBVU0JIX0hjQ29udHJvbEhlYWRFRF9DSEVEX01zayAgICAoMHhmZmZmZmZmdWwgPDwgVVNCSF9IY0NvbnRyb2xIZWFkRURfQ0hFRF9Qb3MpICAgIC8qITwgVVNCSF9UOjpIY0NvbnRyb2xIZWFkRUQ6IENIRUQgTWFzayAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjQ29udHJvbEN1cnJlbnRFRF9DQ0VEX1BvcyAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbnRyb2xDdXJyZW50RUQ6IENDRUQgUG9zaXRpb24qLworI2RlZmluZSBVU0JIX0hjQ29udHJvbEN1cnJlbnRFRF9DQ0VEX01zayAoMHhmZmZmZmZmdWwgPDwgVVNCSF9IY0NvbnRyb2xDdXJyZW50RURfQ0NFRF9Qb3MpIC8qITwgVVNCSF9UOjpIY0NvbnRyb2xDdXJyZW50RUQ6IENDRUQgTWFzayAgKi8KKworI2RlZmluZSBVU0JIX0hjQnVsa0hlYWRFRF9CSEVEX1BvcyAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0J1bGtIZWFkRUQ6IEJIRUQgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVVNCSF9IY0J1bGtIZWFkRURfQkhFRF9Nc2sgICAgICAgKDB4ZmZmZmZmZnVsIDw8IFVTQkhfSGNCdWxrSGVhZEVEX0JIRURfUG9zKSAgICAgICAvKiE8IFVTQkhfVDo6SGNCdWxrSGVhZEVEOiBCSEVEIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0J1bGtDdXJyZW50RURfQkNFRF9Qb3MgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNCdWxrQ3VycmVudEVEOiBCQ0VEIFBvc2l0aW9uICovCisjZGVmaW5lIFVTQkhfSGNCdWxrQ3VycmVudEVEX0JDRURfTXNrICAgICgweGZmZmZmZmZ1bCA8PCBVU0JIX0hjQnVsa0N1cnJlbnRFRF9CQ0VEX1BvcykgICAgLyohPCBVU0JIX1Q6OkhjQnVsa0N1cnJlbnRFRDogQkNFRCBNYXNrICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNEb25lSGVhZF9ESF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjRG9uZUhlYWQ6IERIIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JIX0hjRG9uZUhlYWRfREhfTXNrICAgICAgICAgICAoMHhmZmZmZmZmdWwgPDwgVVNCSF9IY0RvbmVIZWFkX0RIX1BvcykgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0RvbmVIZWFkOiBESCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjRm1JbnRlcnZhbF9GSV9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ZtSW50ZXJ2YWw6IEZJIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNCSF9IY0ZtSW50ZXJ2YWxfRklfTXNrICAgICAgICAgKDB4M2ZmZnVsIDw8IFVTQkhfSGNGbUludGVydmFsX0ZJX1BvcykgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNGbUludGVydmFsOiBGSSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ZtSW50ZXJ2YWxfRlNNUFNfUG9zICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNGbUludGVydmFsOiBGU01QUyBQb3NpdGlvbiAgICovCisjZGVmaW5lIFVTQkhfSGNGbUludGVydmFsX0ZTTVBTX01zayAgICAgICgweDdmZmZ1bCA8PCBVU0JIX0hjRm1JbnRlcnZhbF9GU01QU19Qb3MpICAgICAgICAgLyohPCBVU0JIX1Q6OkhjRm1JbnRlcnZhbDogRlNNUFMgTWFzayAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNGbUludGVydmFsX0ZJVF9Qb3MgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjRm1JbnRlcnZhbDogRklUIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVU0JIX0hjRm1JbnRlcnZhbF9GSVRfTXNrICAgICAgICAoMHgxdWwgPDwgVVNCSF9IY0ZtSW50ZXJ2YWxfRklUX1BvcykgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ZtSW50ZXJ2YWw6IEZJVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjRm1SZW1haW5pbmdfRlJfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ZtUmVtYWluaW5nOiBGUiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVNCSF9IY0ZtUmVtYWluaW5nX0ZSX01zayAgICAgICAgKDB4M2ZmZnVsIDw8IFVTQkhfSGNGbVJlbWFpbmluZ19GUl9Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNGbVJlbWFpbmluZzogRlIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ZtUmVtYWluaW5nX0ZSVF9Qb3MgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNGbVJlbWFpbmluZzogRlJUIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFVTQkhfSGNGbVJlbWFpbmluZ19GUlRfTXNrICAgICAgICgweDF1bCA8PCBVU0JIX0hjRm1SZW1haW5pbmdfRlJUX1BvcykgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjRm1SZW1haW5pbmc6IEZSVCBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNGbU51bWJlcl9GTl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjRm1OdW1iZXI6IEZOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JIX0hjRm1OdW1iZXJfRk5fTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgVVNCSF9IY0ZtTnVtYmVyX0ZOX1BvcykgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ZtTnVtYmVyOiBGTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUGVyaW9kaWNTdGFydF9QU19Qb3MgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1BlcmlvZGljU3RhcnQ6IFBTIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVVNCSF9IY1BlcmlvZGljU3RhcnRfUFNfTXNrICAgICAgKDB4M2ZmZnVsIDw8IFVTQkhfSGNQZXJpb2RpY1N0YXJ0X1BTX1BvcykgICAgICAgICAvKiE8IFVTQkhfVDo6SGNQZXJpb2RpY1N0YXJ0OiBQUyBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0xTVGhyZXNob2xkX0xTVF9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNMU1RocmVzaG9sZDogTFNUIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFVTQkhfSGNMU1RocmVzaG9sZF9MU1RfTXNrICAgICAgICgweGZmZnVsIDw8IFVTQkhfSGNMU1RocmVzaG9sZF9MU1RfUG9zKSAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjTFNUaHJlc2hvbGQ6IExTVCBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaERlc2NyaXB0b3JBX05EUF9Qb3MgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhEZXNjcmlwdG9yQTogTkRQIFBvc2l0aW9uICAqLworI2RlZmluZSBVU0JIX0hjUmhEZXNjcmlwdG9yQV9ORFBfTXNrICAgICAoMHhmZnVsIDw8IFVTQkhfSGNSaERlc2NyaXB0b3JBX05EUF9Qb3MpICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoRGVzY3JpcHRvckE6IE5EUCBNYXNrICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhEZXNjcmlwdG9yQV9QU01fUG9zICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoRGVzY3JpcHRvckE6IFBTTSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoRGVzY3JpcHRvckFfUFNNX01zayAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaERlc2NyaXB0b3JBX1BTTV9Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaERlc2NyaXB0b3JBOiBQU00gTWFzayAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoRGVzY3JpcHRvckFfT0NQTV9Qb3MgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaERlc2NyaXB0b3JBOiBPQ1BNIFBvc2l0aW9uICovCisjZGVmaW5lIFVTQkhfSGNSaERlc2NyaXB0b3JBX09DUE1fTXNrICAgICgweDF1bCA8PCBVU0JIX0hjUmhEZXNjcmlwdG9yQV9PQ1BNX1BvcykgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhEZXNjcmlwdG9yQTogT0NQTSBNYXNrICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaERlc2NyaXB0b3JBX05PQ1BfUG9zICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhEZXNjcmlwdG9yQTogTk9DUCBQb3NpdGlvbiAqLworI2RlZmluZSBVU0JIX0hjUmhEZXNjcmlwdG9yQV9OT0NQX01zayAgICAoMHgxdWwgPDwgVVNCSF9IY1JoRGVzY3JpcHRvckFfTk9DUF9Qb3MpICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoRGVzY3JpcHRvckE6IE5PQ1AgTWFzayAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhEZXNjcmlwdG9yQl9QUENNX1BvcyAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoRGVzY3JpcHRvckI6IFBQQ00gUG9zaXRpb24gKi8KKyNkZWZpbmUgVVNCSF9IY1JoRGVzY3JpcHRvckJfUFBDTV9Nc2sgICAgKDB4ZmZmZnVsIDw8IFVTQkhfSGNSaERlc2NyaXB0b3JCX1BQQ01fUG9zKSAgICAgICAvKiE8IFVTQkhfVDo6SGNSaERlc2NyaXB0b3JCOiBQUENNIE1hc2sgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoU3RhdHVzX0xQU19Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFN0YXR1czogTFBTIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTQkhfSGNSaFN0YXR1c19MUFNfTXNrICAgICAgICAgICgweDF1bCA8PCBVU0JIX0hjUmhTdGF0dXNfTFBTX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhTdGF0dXM6IExQUyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaFN0YXR1c19PQ0lfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhTdGF0dXM6IE9DSSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU0JIX0hjUmhTdGF0dXNfT0NJX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoU3RhdHVzX09DSV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoU3RhdHVzOiBPQ0kgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhTdGF0dXNfRFJXRV9Qb3MgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoU3RhdHVzOiBEUldFIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoU3RhdHVzX0RSV0VfTXNrICAgICAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaFN0YXR1c19EUldFX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFN0YXR1czogRFJXRSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoU3RhdHVzX0xQU0NfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFN0YXR1czogTFBTQyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVTQkhfSGNSaFN0YXR1c19MUFNDX01zayAgICAgICAgICgweDF1bCA8PCBVU0JIX0hjUmhTdGF0dXNfTFBTQ19Qb3MpICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhTdGF0dXM6IExQU0MgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaFN0YXR1c19PQ0lDX1BvcyAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhTdGF0dXM6IE9DSUMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU0JIX0hjUmhTdGF0dXNfT0NJQ19Nc2sgICAgICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoU3RhdHVzX09DSUNfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoU3RhdHVzOiBPQ0lDIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhTdGF0dXNfQ1JXRV9Qb3MgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoU3RhdHVzOiBDUldFIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoU3RhdHVzX0NSV0VfTXNrICAgICAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaFN0YXR1c19DUldFX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFN0YXR1czogQ1JXRSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19DQ1NfUG9zICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IENDUyBQb3NpdGlvbiAgICovCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfQ0NTX01zayAgICAgICgweDF1bCA8PCBVU0JIX0hjUmhQb3J0U3RhdHVzX0NDU19Qb3MpICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBDQ1MgTWFzayAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfUEVTX1BvcyAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBQRVMgUG9zaXRpb24gICAqLworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX1BFU19Nc2sgICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoUG9ydFN0YXR1c19QRVNfUG9zKSAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogUEVTIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX1BTU19Qb3MgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogUFNTIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19QU1NfTXNrICAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaFBvcnRTdGF0dXNfUFNTX1BvcykgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IFBTUyBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19QT0NJX1BvcyAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IFBPQ0kgUG9zaXRpb24gICovCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfUE9DSV9Nc2sgICAgICgweDF1bCA8PCBVU0JIX0hjUmhQb3J0U3RhdHVzX1BPQ0lfUG9zKSAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBQT0NJIE1hc2sgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfUFJTX1BvcyAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBQUlMgUG9zaXRpb24gICAqLworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX1BSU19Nc2sgICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoUG9ydFN0YXR1c19QUlNfUG9zKSAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogUFJTIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX1BQU19Qb3MgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogUFBTIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19QUFNfTXNrICAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaFBvcnRTdGF0dXNfUFBTX1BvcykgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IFBQUyBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19MU0RBX1BvcyAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IExTREEgUG9zaXRpb24gICovCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfTFNEQV9Nc2sgICAgICgweDF1bCA8PCBVU0JIX0hjUmhQb3J0U3RhdHVzX0xTREFfUG9zKSAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBMU0RBIE1hc2sgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfQ1NDX1BvcyAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBDU0MgUG9zaXRpb24gICAqLworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX0NTQ19Nc2sgICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoUG9ydFN0YXR1c19DU0NfUG9zKSAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogQ1NDIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX1BFU0NfUG9zICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogUEVTQyBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19QRVNDX01zayAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaFBvcnRTdGF0dXNfUEVTQ19Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IFBFU0MgTWFzayAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19QU1NDX1BvcyAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IFBTU0MgUG9zaXRpb24gICovCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfUFNTQ19Nc2sgICAgICgweDF1bCA8PCBVU0JIX0hjUmhQb3J0U3RhdHVzX1BTU0NfUG9zKSAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBQU1NDIE1hc2sgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfT0NJQ19Qb3MgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBPQ0lDIFBvc2l0aW9uICAqLworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX09DSUNfTXNrICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoUG9ydFN0YXR1c19PQ0lDX1BvcykgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogT0NJQyBNYXNrICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX1BSU0NfUG9zICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogUFJTQyBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19QUlNDX01zayAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaFBvcnRTdGF0dXNfUFJTQ19Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IFBSU0MgTWFzayAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1BoeUNvbnRyb2xfU1RCWUVOX1BvcyAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNQaHlDb250cm9sOiBTVEJZRU4gUG9zaXRpb24gICovCisjZGVmaW5lIFVTQkhfSGNQaHlDb250cm9sX1NUQllFTl9Nc2sgICAgICgweDF1bCA8PCBVU0JIX0hjUGh5Q29udHJvbF9TVEJZRU5fUG9zKSAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUGh5Q29udHJvbDogU1RCWUVOIE1hc2sgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNNaXNjQ29udHJvbF9BQk9SVF9Qb3MgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjTWlzY0NvbnRyb2w6IEFCT1JUIFBvc2l0aW9uICAqLworI2RlZmluZSBVU0JIX0hjTWlzY0NvbnRyb2xfQUJPUlRfTXNrICAgICAoMHgxdWwgPDwgVVNCSF9IY01pc2NDb250cm9sX0FCT1JUX1BvcykgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY01pc2NDb250cm9sOiBBQk9SVCBNYXNrICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjTWlzY0NvbnRyb2xfT0NBTF9Qb3MgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY01pc2NDb250cm9sOiBPQ0FMIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVVNCSF9IY01pc2NDb250cm9sX09DQUxfTXNrICAgICAgKDB4MXVsIDw8IFVTQkhfSGNNaXNjQ29udHJvbF9PQ0FMX1BvcykgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNNaXNjQ29udHJvbDogT0NBTCBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY01pc2NDb250cm9sX0RQUlQxX1BvcyAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNNaXNjQ29udHJvbDogRFBSVDEgUG9zaXRpb24gICovCisjZGVmaW5lIFVTQkhfSGNNaXNjQ29udHJvbF9EUFJUMV9Nc2sgICAgICgweDF1bCA8PCBVU0JIX0hjTWlzY0NvbnRyb2xfRFBSVDFfUG9zKSAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjTWlzY0NvbnRyb2w6IERQUlQxIE1hc2sgICAgICAqLworCisvKipAfSovIC8qIFVTQkhfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFVTQkggcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKyNlbmRpZiAvKiBfX1VTQkhfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3VzcGlfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdXNwaV9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDhkMzI3Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3VzcGlfcmVnLmgKQEAgLTAsMCArMSw2NjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB1c3BpX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBVU1BJIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1VTUElfUkVHX0hfXworI2RlZmluZSBfX1VTUElfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNQSSBNb2RlIG9mIFVTQ0kgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFVTUEkgU1BJIE1vZGUgb2YgVVNDSSBDb250cm9sbGVyKFVTUEkpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIFVTUEkgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBVU1BJX1Q6OkNUTAorICAgICAqIE9mZnNldDogMHgwMCAgVVNDSSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzI6MF0gICB8RlVOTU9ERSAgIHxGdW5jdGlvbiBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgc2VsZWN0cyB0aGUgcHJvdG9jb2wgZm9yIHRoaXMgVVNDSSBjb250cm9sbGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2VsZWN0aW5nIGEgcHJvdG9jb2wgdGhhdCBpcyBub3QgYXZhaWxhYmxlIG9yIGEgcmVzZXJ2ZWQgY29tYmluYXRpb24gZGlzYWJsZXMgdGhlIFVTQ0kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHN3aXRjaGluZyBiZXR3ZWVuIHR3byBwcm90b2NvbHMsIHRoZSBVU0NJIGhhcyB0byBiZSBkaXNhYmxlZCBiZWZvcmUgc2VsZWN0aW5nIGEgbmV3IHByb3RvY29sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2ltdWx0YW5lb3VzbHksIHRoZSBVU0NJIHdpbGwgYmUgcmVzZXQgd2hlbiB1c2VyIHdyaXRlIDAwMCB0byBGVU5NT0RFLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IFRoZSBVU0NJIGlzIGRpc2FibGVkLiBBbGwgcHJvdG9jb2wgcmVsYXRlZCBzdGF0ZSBtYWNoaW5lcyBhcmUgc2V0IHRvIGlkbGUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gVGhlIFNQSSBwcm90b2NvbCBpcyBzZWxlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBUaGUgVUFSVCBwcm90b2NvbCBpcyBzZWxlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBUaGUgSTJDIHByb3RvY29sIGlzIHNlbGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IE90aGVyIGJpdCBjb21iaW5hdGlvbnMgYXJlIHJlc2VydmVkLgorICAgICAqIEB2YXIgVVNQSV9UOjpJTlRFTgorICAgICAqIE9mZnNldDogMHgwNCAgVVNDSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzFdICAgICB8VFhTVElFTiAgIHxUcmFuc21pdCBTdGFydCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uIGluIGNhc2Ugb2YgYSB0cmFuc21pdCBzdGFydCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHRyYW5zbWl0IHN0YXJ0IGludGVycnVwdCBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHRyYW5zbWl0IHN0YXJ0IGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxUWEVORElFTiAgfFRyYW5zbWl0IEVuZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uIGluIGNhc2Ugb2YgYSB0cmFuc21pdCBmaW5pc2ggZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB0cmFuc21pdCBmaW5pc2ggaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdHJhbnNtaXQgZmluaXNoIGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIHxbM10gICAgIHxSWFNUSUVOICAgfFJlY2VpdmUgU3RhcnQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBpbiBjYXNlIG9mIGEgcmVjZWl2ZSBzdGFydCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlY2VpdmUgc3RhcnQgaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVjZWl2ZSBzdGFydCBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8UlhFTkRJRU4gIHxSZWNlaXZlIEVuZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uIGluIGNhc2Ugb2YgYSByZWNlaXZlIGZpbmlzaCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlY2VpdmUgZW5kIGludGVycnVwdCBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHJlY2VpdmUgZW5kIGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIEB2YXIgVVNQSV9UOjpCUkdFTgorICAgICAqIE9mZnNldDogMHgwOCAgVVNDSSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UkNMS1NFTCAgIHxSZWZlcmVuY2UgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHNlbGVjdHMgdGhlIHNvdXJjZSBvZiByZWZlcmVuY2UgY2xvY2sgKGZSRUZfQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUGVyaXBoZXJhbCBkZXZpY2UgY2xvY2sgZlBDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2VydmVkLgorICAgICAqIHxbMV0gICAgIHxQVENMS1NFTCAgfFByb3RvY29sIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBzZWxlY3RzIHRoZSBzb3VyY2Ugb2YgcHJvdG9jb2wgY2xvY2sgKGZQUk9UX0NMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlZmVyZW5jZSBjbG9jayBmUkVGX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gZlJFRl9DTEsyIChpdHMgZnJlcXVlbmN5IGlzIGhhbGYgb2YgZlJFRl9DTEspLgorICAgICAqIHxbMzoyXSAgIHxTUENMS1NFTCAgfFNhbXBsZSBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgdXNlZCBmb3IgdGhlIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gb2Ygc2FtcGxlIGNsb2NrIChmU0FNUF9DTEspIGZvciB0aGUgcHJvdG9jb2wgcHJvY2Vzc29yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gZkRJVl9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBmUFJPVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBmU0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IGZSRUZfQ0xLLgorICAgICAqIHxbNF0gICAgIHxUTUNOVEVOICAgfFRpbWUgTWVhc3VyZW1lbnQgQ291bnRlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgMTAtYml0IHRpbWluZyBtZWFzdXJlbWVudCBjb3VudGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lIG1lYXN1cmVtZW50IGNvdW50ZXIgaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWUgbWVhc3VyZW1lbnQgY291bnRlciBpcyBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxUTUNOVFNSQyAgfFRpbWUgTWVhc3VyZW1lbnQgQ291bnRlciBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWUgbWVhc3VyZW1lbnQgY291bnRlciB3aXRoIGZQUk9UX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZSBtZWFzdXJlbWVudCBjb3VudGVyIHdpdGggZkRJVl9DTEsuCisgICAgICogfFsyNToxNl0gfENMS0RJViAgICB8Q2xvY2sgRGl2aWRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGRlZmluZXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHByb3RvY29sIGNsb2NrIGZyZXF1ZW5jeSBmUFJPVF9DTEsgYW5kIHRoZSBjbG9jayBkaXZpZGVyIGZyZXF1ZW5jeSBmRElWX0NMSyAoZkRJVl9DTEsgPSBmUFJPVF9DTEsgLyAoQ0xLRElWKzEpICkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gVUFSVCBmdW5jdGlvbiwgaXQgY2FuIGJlIHVwZGF0ZWQgYnkgaGFyZHdhcmUgaW4gdGhlIDR0aCBmYWxsaW5nIGVkZ2Ugb2YgdGhlIGlucHV0IGRhdGEgMHg1NSB3aGVuIHRoZSBhdXRvIGJhdWQgcmF0ZSBmdW5jdGlvbiAoQUJSRU4oVVNQSV9QUk9UQ1RMWzZdKSkgaXMgZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZXZpc2VkIHZhbHVlIGlzIHRoZSBhdmVyYWdlIGJpdCB0aW1lIGJldHdlZW4gYml0IDUgYW5kIGJpdCA2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHVzZXIgY2FuIHVzZSByZXZpc2VkIENMS0RJViBhbmQgbmV3IEJSREVUSVRWIChVU1BJX1BST1RDVExbMjQ6MTZdKSB0byBjYWxjdWxhdGUgdGhlIHByZWNpc2UgYmF1ZCByYXRlLgorICAgICAqIEB2YXIgVVNQSV9UOjpEQVRJTjAKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIFVTQ0kgSW5wdXQgRGF0YSBTaWduYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1lOQ1NFTCAgIHxJbnB1dCBTaWduYWwgU3luY2hyb25pemF0aW9uIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHNlbGVjdHMgaWYgdGhlIHVuLXN5bmNocm9uaXplZCBpbnB1dCBzaWduYWwgKHdpdGggb3B0aW9uYWxseSBpbnZlcnRlZCkgb3IgdGhlICAgc3luY2hyb25pemVkIChhbmQgb3B0aW9uYWxseSBmaWx0ZXJlZCkgc2lnbmFsIGNhbiBiZSB1c2VkIGFzIGlucHV0IGZvciB0aGUgICBkYXRhIHNoaWZ0IHVuaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgc2lnbmFsIGNhbiBiZSB0YWtlbiBhcyBpbnB1dCBmb3IgdGhlIGRhdGEgc2hpZnQgdW5pdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHN5bmNocm9uaXplZCBzaWduYWwgY2FuIGJlIHRha2VuIGFzIGlucHV0IGZvciB0aGUgZGF0YSBzaGlmdCB1bml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIFNQSSBwcm90b2NvbCwgd2Ugc3VnZ2VzdCB0aGlzIGJpdCAgIHNob3VsZCBiZSBzZXQgYXMgMC4KKyAgICAgKiB8WzJdICAgICB8SU5JTlYgICAgIHxJbnB1dCBTaWduYWwgSW52ZXJzZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZWZpbmVzIHRoZSBpbnZlcnRlciBlbmFibGUgb2YgdGhlIGlucHV0IGFzeW5jaHJvbm91cyBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgaW5wdXQgc2lnbmFsIHdpbGwgbm90IGJlIGludmVydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdW4tc3luY2hyb25pemVkIGlucHV0IHNpZ25hbCB3aWxsIGJlIGludmVydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIFNQSSBwcm90b2NvbCwgd2Ugc3VnZ2VzdCB0aGlzIGJpdCAgIHNob3VsZCBiZSBzZXQgYXMgMC4KKyAgICAgKiBAdmFyIFVTUElfVDo6Q1RMSU4wCisgICAgICogT2Zmc2V0OiAweDIwICBVU0NJIElucHV0IENvbnRyb2wgU2lnbmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNZTkNTRUwgICB8SW5wdXQgU3luY2hyb25pemF0aW9uIFNpZ25hbCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBzZWxlY3RzIGlmIHRoZSB1bi1zeW5jaHJvbml6ZWQgaW5wdXQgc2lnbmFsICh3aXRoIG9wdGlvbmFsbHkgaW52ZXJ0ZWQpIG9yIHRoZSAgIHN5bmNocm9uaXplZCAoYW5kIG9wdGlvbmFsbHkgZmlsdGVyZWQpIHNpZ25hbCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgdGhlICAgZGF0YSBzaGlmdCB1bml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdW4tc3luY2hyb25pemVkIHNpZ25hbCBjYW4gYmUgdGFrZW4gYXMgaW5wdXQgZm9yIHRoZSBkYXRhIHNoaWZ0IHVuaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBzeW5jaHJvbml6ZWQgc2lnbmFsIGNhbiBiZSB0YWtlbiBhcyBpbnB1dCBmb3IgdGhlIGRhdGEgc2hpZnQgdW5pdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBTUEkgcHJvdG9jb2wsIHdlIHN1Z2dlc3QgdGhpcyBiaXQgICBzaG91bGQgYmUgc2V0IGFzIDAuCisgICAgICogfFsyXSAgICAgfElOSU5WICAgICB8SW5wdXQgU2lnbmFsIEludmVyc2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyB0aGUgaW52ZXJ0ZXIgZW5hYmxlIG9mIHRoZSBpbnB1dCBhc3luY2hyb25vdXMgc2lnbmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdW4tc3luY2hyb25pemVkIGlucHV0IHNpZ25hbCB3aWxsIG5vdCBiZSBpbnZlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHVuLXN5bmNocm9uaXplZCBpbnB1dCBzaWduYWwgd2lsbCBiZSBpbnZlcnRlZC4KKyAgICAgKiBAdmFyIFVTUElfVDo6Q0xLSU4KKyAgICAgKiBPZmZzZXQ6IDB4MjggIFVTQ0kgSW5wdXQgQ2xvY2sgU2lnbmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTWU5DU0VMICAgfElucHV0IFN5bmNocm9uaXphdGlvbiBTaWduYWwgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgc2VsZWN0cyBpZiB0aGUgdW4tc3luY2hyb25pemVkIGlucHV0IHNpZ25hbCBvciB0aGUgc3luY2hyb25pemVkIChhbmQgICBvcHRpb25hbGx5IGZpbHRlcmVkKSBzaWduYWwgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIHRoZSBkYXRhIHNoaWZ0IHVuaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgc2lnbmFsIGNhbiBiZSB0YWtlbiBhcyBpbnB1dCBmb3IgdGhlIGRhdGEgc2hpZnQgdW5pdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHN5bmNocm9uaXplZCBzaWduYWwgY2FuIGJlIHRha2VuIGFzIGlucHV0IGZvciB0aGUgZGF0YSBzaGlmdCB1bml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIFNQSSBwcm90b2NvbCwgd2Ugc3VnZ2VzdCB0aGlzIGJpdCAgIHNob3VsZCBiZSBzZXQgYXMgMC4KKyAgICAgKiBAdmFyIFVTUElfVDo6TElORUNUTAorICAgICAqIE9mZnNldDogMHgyQyAgVVNDSSBMaW5lIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxMU0IgICAgICAgfExTQiBGaXJzdCBUcmFuc21pc3Npb24gU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBNU0IsIHdoaWNoIGJpdCBvZiB0cmFuc21pdC9yZWNlaXZlIGRhdGEgYnVmZmVyIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgRFdJRFRILCBpcyB0cmFuc21pdHRlZC9yZWNlaXZlZCBmaXJzdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIExTQiwgdGhlIGJpdCAwIG9mIGRhdGEgYnVmZmVyLCB3aWxsIGJlIHRyYW5zbWl0dGVkL3JlY2VpdmVkIGZpcnN0LgorICAgICAqIHxbNV0gICAgIHxEQVRPSU5WICAgfERhdGEgT3V0cHV0IEludmVyc2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyB0aGUgcmVsYXRpb24gYmV0d2VlbiB0aGUgaW50ZXJuYWwgc2hpZnQgZGF0YSB2YWx1ZSBhbmQgdGhlIG91dHB1dCBkYXRhIHNpZ25hbCBvZiBVU0NJeF9EQVQwLzEgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIG91dHB1dCBsZXZlbCBpcyBub3QgaW52ZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERhdGEgb3V0cHV0IGxldmVsIGlzIGludmVydGVkLgorICAgICAqIHxbN10gICAgIHxDVExPSU5WICAgfENvbnRyb2wgU2lnbmFsIE91dHB1dCBJbnZlcnNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgdGhlIHJlbGF0aW9uIGJldHdlZW4gdGhlIGludGVybmFsIGNvbnRyb2wgc2lnbmFsIGFuZCB0aGUgb3V0cHV0IGNvbnRyb2wgc2lnbmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBjb250cm9sIHNpZ25hbCB3aWxsIGJlIGludmVydGVkIGJlZm9yZSBpdHMgb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBjb250cm9sIHNpZ25hbCBoYXMgZGlmZmVyZW50IGRlZmluaXRpb25zIGluIGRpZmZlcmVudCBwcm90b2NvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIFNQSSBwcm90b2NvbCwgdGhlIGNvbnRyb2wgc2lnbmFsIG1lYW5zIHNsYXZlIHNlbGVjdCBzaWduYWwKKyAgICAgKiB8WzExOjhdICB8RFdJRFRIICAgIHxXb3JkIExlbmd0aCBvZiBUcmFuc21pc3Npb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBkZWZpbmVzIHRoZSBkYXRhIHdvcmQgbGVuZ3RoIChhbW91bnQgb2YgYml0cykgZm9yIHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRhdGEgd29yZCBpcyBhbHdheXMgcmlnaHQtYWxpZ25lZCBpbiB0aGUgZGF0YSBidWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVU0NJIHN1cHBvcnQgd29yZCBsZW5ndGggZnJvbSA0IHRvIDE2IGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwOiBUaGUgZGF0YSB3b3JkIGNvbnRhaW5zIDE2IGJpdHMgbG9jYXRlZCBhdCBiaXQgcG9zaXRpb25zIFsxNTowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDE6IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MjogUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzOiBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQ6IFRoZSBkYXRhIHdvcmQgY29udGFpbnMgNCBiaXRzIGxvY2F0ZWQgYXQgYml0IHBvc2l0aW9ucyBbMzowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDU6IFRoZSBkYXRhIHdvcmQgY29udGFpbnMgNSBiaXRzIGxvY2F0ZWQgYXQgYml0IHBvc2l0aW9ucyBbNDowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwuLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweEY6IFRoZSBkYXRhIHdvcmQgY29udGFpbnMgMTUgYml0cyBsb2NhdGVkIGF0IGJpdCBwb3NpdGlvbnMgWzE0OjBdLgorICAgICAqIEB2YXIgVVNQSV9UOjpUWERBVAorICAgICAqIE9mZnNldDogMHgzMCAgVVNDSSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8VFhEQVQgICAgIHxUcmFuc21pdCBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgY2FuIHVzZSB0aGlzIGJpdCBmaWVsZCB0byB3cml0ZSAxNi1iaXQgdHJhbnNtaXQgZGF0YSBmb3IgdHJhbnNtaXNzaW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3JkZXIgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdGhlIHRyYW5zbWl0IGRhdGEsIHVzZXIgaGF2ZSB0byBjaGVjayBUWEVNUFRZIChVU1BJX0JVRlNUU1s4XSkgc3RhdHVzIGJlZm9yZSB3cml0aW5nIHRyYW5zbWl0IGRhdGEgaW50byB0aGlzIGJpdCBmaWVsZC4KKyAgICAgKiB8WzE2XSAgICB8UE9SVERJUiAgIHxQb3J0IERpcmVjdGlvbiBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgaXMgb25seSBhdmFpbGFibGUgd2hpbGUgVVNDSSBvcGVyYXRlcyBpbiBTUEkgcHJvdG9jb2wgKEZVTk1PREUgPSAweDEpIHdpdGggaGFsZi1kdXBsZXggdHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyB1c2VkIHRvIGRlZmluZSB0aGUgZGlyZWN0aW9uIG9mIHRoZSBkYXRhIHBvcnQgcGluCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBzb2Z0d2FyZSB3cml0ZXMgVVNQSV9UWERBVCByZWdpc3RlciwgdGhlIHRyYW5zbWl0IGRhdGEgYW5kIGl0cyBwb3J0IGRpcmVjdGlvbiBhcmUgc2V0dGxlZCBzaW11bHRhbmVvdXNseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGRhdGEgcGluIGlzIGNvbmZpZ3VyZWQgYXMgb3V0cHV0IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBkYXRhIHBpbiBpcyBjb25maWd1cmVkIGFzIGlucHV0IG1vZGUuCisgICAgICogQHZhciBVU1BJX1Q6OlJYREFUCisgICAgICogT2Zmc2V0OiAweDM0ICBVU0NJIFJlY2VpdmUgRGF0YSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFJYREFUICAgICB8UmVjZWl2ZWQgRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIG1vbml0b3JzIHRoZSByZWNlaXZlZCBkYXRhIHdoaWNoIHN0b3JlZCBpbiByZWNlaXZlIGRhdGEgYnVmZmVyLgorICAgICAqIEB2YXIgVVNQSV9UOjpCVUZDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MzggIFVTQ0kgVHJhbnNtaXQvUmVjZWl2ZSBCdWZmZXIgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs2XSAgICAgfFRYVURSSUVOICB8U2xhdmUgVHJhbnNtaXQgVW5kZXItcnVuIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IHVuZGVyLXJ1biBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IHVuZGVyLXJ1biBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzddICAgICB8VFhDTFIgICAgIHxDbGVhciBUcmFuc21pdCBCdWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdHJhbnNtaXQgYnVmZmVyIGlzIGNsZWFyZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTaG91bGQgb25seSBiZSB1c2VkIHdoaWxlIHRoZSBidWZmZXIgaXMgbm90IHRha2luZyBwYXJ0IGluIGRhdGEgdHJhZmZpYy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJdCBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgb25lIFBDTEsgY3ljbGUuCisgICAgICogfFsxNF0gICAgfFJYT1ZJRU4gICB8UmVjZWl2ZSBCdWZmZXIgT3ZlcnJ1biBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIG92ZXJydW4gaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIG92ZXJydW4gaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxNV0gICAgfFJYQ0xSICAgICB8Q2xlYXIgUmVjZWl2ZSBCdWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVjZWl2ZSBidWZmZXIgaXMgY2xlYXJlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNob3VsZCBvbmx5IGJlIHVzZWQgd2hpbGUgdGhlIGJ1ZmZlciBpcyBub3QgdGFraW5nIHBhcnQgaW4gZGF0YSB0cmFmZmljLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciBvbmUgUENMSyBjeWNsZS4KKyAgICAgKiB8WzE2XSAgICB8VFhSU1QgICAgIHxUcmFuc21pdCBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IHRoZSB0cmFuc21pdC1yZWxhdGVkIGNvdW50ZXJzLCBzdGF0ZSBtYWNoaW5lLCBhbmQgdGhlIGNvbnRlbnQgb2YgdHJhbnNtaXQgc2hpZnQgcmVnaXN0ZXIgYW5kIGRhdGEgYnVmZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciBvbmUgUENMSyBjeWNsZS4KKyAgICAgKiB8WzE3XSAgICB8UlhSU1QgICAgIHxSZWNlaXZlIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgdGhlIHJlY2VpdmUtcmVsYXRlZCBjb3VudGVycywgc3RhdGUgbWFjaGluZSwgYW5kIHRoZSBjb250ZW50IG9mIHJlY2VpdmUgc2hpZnQgcmVnaXN0ZXIgYW5kIGRhdGEgYnVmZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciBvbmUgUENMSyBjeWNsZS4KKyAgICAgKiBAdmFyIFVTUElfVDo6QlVGU1RTCisgICAgICogT2Zmc2V0OiAweDNDICBVU0NJIFRyYW5zbWl0L1JlY2VpdmUgQnVmZmVyIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFJYRU1QVFkgICB8UmVjZWl2ZSBCdWZmZXIgRW1wdHkgSW5kaWNhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgYnVmZmVyIGlzIG5vdCBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBidWZmZXIgaXMgZW1wdHkuCisgICAgICogfFsxXSAgICAgfFJYRlVMTCAgICB8UmVjZWl2ZSBCdWZmZXIgRnVsbCBJbmRpY2F0b3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBidWZmZXIgaXMgbm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgYnVmZmVyIGlzIGZ1bGwuCisgICAgICogfFszXSAgICAgfFJYT1ZJRiAgICB8UmVjZWl2ZSBCdWZmZXIgT3ZlcnJ1biBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgYSByZWNlaXZlIGJ1ZmZlciBvdmVycnVuIGV2ZW50IGhhcyBiZWVuIGRldGVjdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgUlhPVklFTiAoVVNQSV9CVUZDVExbMTRdKSBpcyBlbmFibGVkLCB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgcmVxdWVzdCBpcyBhY3RpdmF0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRlcyAxIHRvIHRoaXMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBIHJlY2VpdmUgYnVmZmVyIG92ZXJydW4gZXZlbnQgaGFzIG5vdCBiZWVuIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHJlY2VpdmUgYnVmZmVyIG92ZXJydW4gZXZlbnQgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgICAgICogfFs4XSAgICAgfFRYRU1QVFkgICB8VHJhbnNtaXQgQnVmZmVyIEVtcHR5IEluZGljYXRvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBidWZmZXIgaXMgbm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBidWZmZXIgaXMgZW1wdHkgYW5kIGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgdHJhbnNtaXNzaW9uIGRhdHVtLgorICAgICAqIHxbOV0gICAgIHxUWEZVTEwgICAgfFRyYW5zbWl0IEJ1ZmZlciBGdWxsIEluZGljYXRvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBidWZmZXIgaXMgbm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IGJ1ZmZlciBpcyBmdWxsLgorICAgICAqIHxbMTFdICAgIHxUWFVEUklGICAgfFRyYW5zbWl0IEJ1ZmZlciBVbmRlci1ydW4gSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IGEgdHJhbnNtaXQgYnVmZmVyIHVuZGVyLXJ1biBldmVudCBoYXMgYmVlbiBkZXRlY3RlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIGVuYWJsZWQgYnkgVFhVRFJJRU4gKFVTUElfQlVGQ1RMWzZdKSwgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHJlcXVlc3QgaXMgYWN0aXZhdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0ZXMgMSB0byB0aGlzIGJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBIHRyYW5zbWl0IGJ1ZmZlciB1bmRlci1ydW4gZXZlbnQgaGFzIG5vdCBiZWVuIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHRyYW5zbWl0IGJ1ZmZlciB1bmRlci1ydW4gZXZlbnQgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgICAgICogQHZhciBVU1BJX1Q6OlBETUFDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NDAgIFVTQ0kgUERNQSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UERNQVJTVCAgIHxQRE1BIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgdGhlIFVTQ0kncyBQRE1BIGNvbnRyb2wgbG9naWMuIFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGF1dG9tYXRpY2FsbHkuCisgICAgICogfFsxXSAgICAgfFRYUERNQUVOICB8UERNQSBUcmFuc21pdCBDaGFubmVsIEF2YWlsYWJsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFJYUERNQUVOICB8UERNQSBSZWNlaXZlIENoYW5uZWwgQXZhaWxhYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgUERNQSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfFBETUFFTiAgICB8UERNQSBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUERNQSBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGljZTogVGhlIEkyQyBpcyBub3Qgc3VwcG9ydGluZyBQRE1BIGZ1bmN0aW9uLgorICAgICAqIEB2YXIgVVNQSV9UOjpXS0NUTAorICAgICAqIE9mZnNldDogMHg1NCAgVVNDSSBXYWtlLXVwIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxXS0VOICAgICAgfFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXYWtlLXVwIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXYWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFdLQUREUkVOICB8V2FrZS11cCBBZGRyZXNzIE1hdGNoIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGNoaXAgaXMgd29rZW4gdXAgYWNjb3JkaW5nIGRhdGEgdG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgY2hpcCBpcyB3b2tlbiB1cCBhY2NvcmRpbmcgYWRkcmVzcyBtYXRjaC4KKyAgICAgKiB8WzJdICAgICB8UERCT1BUICAgIHxQb3dlciBEb3duIEJsb2NraW5nIE9wdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJZiB1c2VyIGF0dGVtcHRzIHRvIGVudGVyIFBvd2VyLWRvd24gbW9kZSBieSBleGVjdXRpbmcgV0ZJIHdoaWxlIHRoZSBwcm90b2NvbCBpcyBpbiB0cmFuc2ZlcnJpbmcsIE1DVSB3aWxsIHN0b3AgdGhlIHRyYW5zZmVyIGFuZCBlbnRlciBQb3dlci1kb3duIG1vZGUgaW1tZWRpYXRlbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElmIHVzZXIgYXR0ZW1wdHMgdG8gZW50ZXIgUG93ZXItZG93biBtb2RlIGJ5IGV4ZWN1dGluZyBXRkkgd2hpbGUgdGhlIHByb3RvY29sIGlzIGluIHRyYW5zZmVycmluZywgdGhlIG9uLWdvaW5nIHRyYW5zZmVyIHdpbGwgbm90IGJlIHN0b3BwZWQgYW5kIE1DVSB3aWxsIGVudGVyIGlkbGUgbW9kZSBpbW1lZGlhdGVseS4KKyAgICAgKiBAdmFyIFVTUElfVDo6V0tTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NTggIFVTQ0kgV2FrZS11cCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxXS0YgICAgICAgfFdha2UtdXAgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gY2hpcCBpcyB3b2tlbiB1cCBmcm9tIFBvd2VyLWRvd24gbW9kZSwgdGhpcyBiaXQgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiBAdmFyIFVTUElfVDo6UFJPVENUTAorICAgICAqIE9mZnNldDogMHg1QyAgVVNDSSBQcm90b2NvbCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U0xBVkUgICAgIHxTbGF2ZSBNb2RlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNYXN0ZXIgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgbW9kZS4KKyAgICAgKiB8WzFdICAgICB8U0xWM1dJUkUgIHxTbGF2ZSAzLXdpcmUgTW9kZSBTZWxlY3Rpb24gKFNsYXZlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFNQSSBwcm90b2NvbCBjYW4gd29yayB3aXRoIDMtd2lyZSBpbnRlcmZhY2UgKHdpdGhvdXQgc2xhdmUgc2VsZWN0IHNpZ25hbCkgaW4gU2xhdmUgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gNC13aXJlIGJpLWRpcmVjdGlvbiBpbnRlcmZhY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDMtd2lyZSBiaS1kaXJlY3Rpb24gaW50ZXJmYWNlLgorICAgICAqIHxbMl0gICAgIHxTUyAgICAgICAgfFNsYXZlIFNlbGVjdCBDb250cm9sIChNYXN0ZXIgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBBVVRPU1MgYml0IGlzIGNsZWFyZWQsIHNldHRpbmcgdGhpcyBiaXQgdG8gMSB3aWxsIHNldCB0aGUgc2xhdmUgc2VsZWN0IHNpZ25hbCB0byBhY3RpdmUgc3RhdGUsIGFuZCBzZXR0aW5nIHRoaXMgYml0IHRvIDAgd2lsbCBzZXQgdGhlIHNsYXZlIHNlbGVjdCBzaWduYWwgYmFjayB0byBpbmFjdGl2ZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgQVVUT1NTIGZ1bmN0aW9uIGlzIGVuYWJsZWQgKEFVVE9TUyA9IDEpLCB0aGUgc2V0dGluZyB2YWx1ZSBvZiB0aGlzIGJpdCB3aWxsIG5vdCBhZmZlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2Ygc2xhdmUgc2VsZWN0IHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBTUEkgcHJvdG9jb2wsIHRoZSBpbnRlcm5hbCBzbGF2ZSBzZWxlY3Qgc2lnbmFsIGlzIGFjdGl2ZSBoaWdoLgorICAgICAqIHxbM10gICAgIHxBVVRPU1MgICAgfEF1dG9tYXRpYyBTbGF2ZSBTZWxlY3QgRnVuY3Rpb24gRW5hYmxlIChNYXN0ZXIgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgc2VsZWN0IHNpZ25hbCB3aWxsIGJlIGNvbnRyb2xsZWQgYnkgdGhlIHNldHRpbmcgdmFsdWUgb2YgU1MgKFVTUElfUFJPVENUTFsyXSkgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBzZWxlY3Qgc2lnbmFsIHdpbGwgYmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2xhdmUgc2VsZWN0IHNpZ25hbCB3aWxsIGJlIGFzc2VydGVkIGJ5IHRoZSBTUEkgY29udHJvbGxlciB3aGVuIHRyYW5zbWl0L3JlY2VpdmUgaXMgc3RhcnRlZCwgYW5kIHdpbGwgYmUgZGUtYXNzZXJ0ZWQgYWZ0ZXIgZWFjaCB0cmFuc21pdC9yZWNlaXZlIGlzIGZpbmlzaGVkLgorICAgICAqIHxbNzo2XSAgIHxTQ0xLTU9ERSAgfFNlcmlhbCBCdXMgQ2xvY2sgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGRlZmluZXMgdGhlIFNDTEsgaWRsZSBzdGF0dXMsIGRhdGEgdHJhbnNtaXQsIGFuZCBkYXRhIHJlY2VpdmUgZWRnZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNT0RFMCA9IFRoZSBpZGxlIHN0YXRlIG9mIFNQSSBjbG9jayBpcyBsb3cgbGV2ZWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEYXRhIGlzIHRyYW5zbWl0dGVkIHdpdGggZmFsbGluZyBlZGdlIGFuZCByZWNlaXZlZCB3aXRoIHJpc2luZyBlZGdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1PREUxID0gVGhlIGlkbGUgc3RhdGUgb2YgU1BJIGNsb2NrIGlzIGxvdyBsZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERhdGEgaXMgdHJhbnNtaXR0ZWQgd2l0aCByaXNpbmcgZWRnZSBhbmQgcmVjZWl2ZWQgd2l0aCBmYWxsaW5nIGVkZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TU9ERTIgPSBUaGUgaWRsZSBzdGF0ZSBvZiBTUEkgY2xvY2sgaXMgaGlnaCBsZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERhdGEgaXMgdHJhbnNtaXR0ZWQgd2l0aCByaXNpbmcgZWRnZSBhbmQgcmVjZWl2ZWQgd2l0aCBmYWxsaW5nIGVkZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TU9ERTMgPSBUaGUgaWRsZSBzdGF0ZSBvZiBTUEkgY2xvY2sgaXMgaGlnaCBsZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERhdGEgaXMgdHJhbnNtaXR0ZWQgd2l0aCBmYWxsaW5nIGVkZ2UgYW5kIHJlY2VpdmVkIHdpdGggcmlzaW5nIGVkZ2UuCisgICAgICogfFsxMTo4XSAgfFNVU1BJVFYgICB8U3VzcGVuZCBJbnRlcnZhbCAoTWFzdGVyIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgcHJvdmlkZXMgdGhlIGNvbmZpZ3VyYWJsZSBzdXNwZW5kIGludGVydmFsIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUgdHJhbnNtaXQvcmVjZWl2ZSB0cmFuc2FjdGlvbiBpbiBhIHRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlZmluaXRpb24gb2YgdGhlIHN1c3BlbmQgaW50ZXJ2YWwgaXMgdGhlIGludGVydmFsIGJldHdlZW4gdGhlIGxhc3QgY2xvY2sgZWRnZSBvZiB0aGUgcHJlY2VkaW5nIHRyYW5zYWN0aW9uIHdvcmQgYW5kIHRoZSBmaXJzdCBjbG9jayBlZGdlIG9mIHRoZSBmb2xsb3dpbmcgdHJhbnNhY3Rpb24gd29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZWZhdWx0IHZhbHVlIGlzIDB4MworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBwZXJpb2Qgb2YgdGhlIHN1c3BlbmQgaW50ZXJ2YWwgaXMgb2J0YWluZWQgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgZXF1YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KFNVU1BJVFZbMzowXSArIDAuNSkgKiBwZXJpb2Qgb2YgU1BJX0NMSyBjbG9jayBjeWNsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEV4YW1wbGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U1VTUElUViA9IDB4MCAuLi4gMC41IFNQSV9DTEsgY2xvY2sgY3ljbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U1VTUElUViA9IDB4MSAuLi4gMS41IFNQSV9DTEsgY2xvY2sgY3ljbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Li4uLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTVVNQSVRWID0gMHhFIC4uLiAxNC41IFNQSV9DTEsgY2xvY2sgY3ljbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U1VTUElUViA9IDB4RiAuLi4gMTUuNSBTUElfQ0xLIGNsb2NrIGN5Y2xlLgorICAgICAqIHxbMTQ6MTJdIHxUU01TRUwgICAgfFRyYW5zbWl0IERhdGEgTW9kZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBkZXNjcmliZXMgaG93IHJlY2VpdmUgYW5kIHRyYW5zbWl0IGRhdGEgaXMgc2hpZnRlZCBpbiBhbmQgb3V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRTTVNFTCA9IDAwMGI6IEZ1bGwtZHVwbGV4IFNQSS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUU01TRUwgPSAxMDBiOiBIYWxmLWR1cGxleCBTUEkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXIgdmFsdWVzIGFyZSByZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBDaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhpcyBiaXQgZmllbGQgd2lsbCBwcm9kdWNlIHRoZSBUWFJTVCBhbmQgUlhSU1QgdG8gY2xlYXIgdGhlIFRYL1JYIGRhdGEgYnVmZmVyIGF1dG9tYXRpY2FsbHkuCisgICAgICogfFsyNToxNl0gfFNMVlRPQ05UICB8U2xhdmUgTW9kZSBUaW1lLW91dCBQZXJpb2QgKFNsYXZlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gU2xhdmUgbW9kZSwgdGhpcyBiaXQgZmllbGQgaXMgdXNlZCBmb3IgU2xhdmUgdGltZS1vdXQgcGVyaW9kCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgaW5kaWNhdGVzIGhvdyBtYW55IGNsb2NrIHBlcmlvZHMgKHNlbGVjdGVkIGJ5IFRNQ05UU1JDLCBVU1BJX0JSR0VOWzVdKSBiZXR3ZWVuIHRoZSB0d28gZWRnZXMgb2YgaW5wdXQgU0NMSyB3aWxsIGFzc2VydCB0aGUgU2xhdmUgdGltZS1vdXQgZXZlbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIDB4MCBpbnRvIHRoaXMgYml0IGZpZWxkIHdpbGwgZGlzYWJsZSB0aGUgU2xhdmUgdGltZS1vdXQgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RXhhbXBsZTogQXNzdW1lIFNMVlRPQ05UIGlzIDB4MEEgYW5kIFRNQ05UU1JDIChVU1BJX0JSR0VOWzVdKSBpcyAxLCBpdCBtZWFucyB0aGUgdGltZS1vdXQgZXZlbnQgd2lsbCBvY2N1ciBpZiB0aGUgc3RhdGUgb2YgU1BJIGJ1cyBjbG9jayBwaW4gaXMgbm90IGNoYW5nZWQgbW9yZSB0aGFuICgxMCsxKSBwZXJpb2RzIG9mIGZESVZfQ0xLLgorICAgICAqIHxbMjhdICAgIHxUWFVEUlBPTCAgfFRyYW5zbWl0IFVuZGVyLXJ1biBEYXRhIFBvbGFyaXR5IChmb3IgU2xhdmUpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyB0aGUgdHJhbnNtaXR0aW5nIGRhdGEgbGV2ZWwgd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZSBmb3IgdHJhbnNmZXJyaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgb3V0cHV0IGRhdGEgbGV2ZWwgaXMgMCBpZiBUWCB1bmRlci1ydW4gZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgb3V0cHV0IGRhdGEgbGV2ZWwgaXMgMSBpZiBUWCB1bmRlci1ydW4gZXZlbnQgb2NjdXJzLgorICAgICAqIHxbMzFdICAgIHxQUk9URU4gICAgfFNQSSBQcm90b2NvbCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNQSSBQcm90b2NvbCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJIFByb3RvY29sIEVuYWJsZWQuCisgICAgICogQHZhciBVU1BJX1Q6OlBST1RJRU4KKyAgICAgKiBPZmZzZXQ6IDB4NjAgIFVTQ0kgUHJvdG9jb2wgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNTSU5BSUVOICB8U2xhdmUgU2VsZWN0IEluYWN0aXZlIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMvZGlzYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgYSBzbGF2ZSBzZWxlY3QgaW50ZXJydXB0IGlmIHRoZSBzbGF2ZSBzZWxlY3QgY2hhbmdlcyB0byBpbmFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgc2VsZWN0IGluYWN0aXZlIGludGVycnVwdCBnZW5lcmF0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBzZWxlY3QgaW5hY3RpdmUgaW50ZXJydXB0IGdlbmVyYXRpb24gRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8U1NBQ1RJRU4gIHxTbGF2ZSBTZWxlY3QgQWN0aXZlIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMvZGlzYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgYSBzbGF2ZSBzZWxlY3QgaW50ZXJydXB0IGlmIHRoZSBzbGF2ZSBzZWxlY3QgY2hhbmdlcyB0byBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIHNlbGVjdCBhY3RpdmUgaW50ZXJydXB0IGdlbmVyYXRpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIHNlbGVjdCBhY3RpdmUgaW50ZXJydXB0IGdlbmVyYXRpb24gRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8U0xWVE9JRU4gIHxTbGF2ZSBUaW1lLW91dCBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBTUEkgcHJvdG9jb2wsIHRoaXMgYml0IGVuYWJsZXMgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uIGluIGNhc2Ugb2YgYSBTbGF2ZSB0aW1lLW91dCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIFNsYXZlIHRpbWUtb3V0IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIFNsYXZlIHRpbWUtb3V0IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxTTFZCRUlFTiAgfFNsYXZlIE1vZGUgQml0IENvdW50IEVycm9yIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIGRhdGEgdHJhbnNmZXIgaXMgdGVybWluYXRlZCBieSBzbGF2ZSB0aW1lLW91dCBvciBzbGF2ZSBzZWxlY3QgaW5hY3RpdmUgZXZlbnQgaW4gU2xhdmUgbW9kZSwgc28gdGhhdCB0aGUgdHJhbnNtaXQvcmVjZWl2ZSBkYXRhIGJpdCBjb3VudCBkb2VzIG5vdCBtYXRjaCB0aGUgc2V0dGluZyBvZiBEV0lEVEggKFVTUElfTElORUNUTFsxMTo4XSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCaXQgY291bnQgZXJyb3IgZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgU2xhdmUgbW9kZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgU2xhdmUgbW9kZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogQHZhciBVU1BJX1Q6OlBST1RTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NjQgIFVTQ0kgUHJvdG9jb2wgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzFdICAgICB8VFhTVElGICAgIHxUcmFuc21pdCBTdGFydCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBzdGFydCBldmVudCBkb2VzIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgc3RhcnQgZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGVzIDEgdG8gdGhpcyBiaXQKKyAgICAgKiB8WzJdICAgICB8VFhFTkRJRiAgIHxUcmFuc21pdCBFbmQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgZW5kIGV2ZW50IGRvZXMgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBlbmQgZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGVzIDEgdG8gdGhpcyBiaXQKKyAgICAgKiB8WzNdICAgICB8UlhTVElGICAgIHxSZWNlaXZlIFN0YXJ0IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgc3RhcnQgZXZlbnQgZG9lcyBub3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgc3RhcnQgZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGVzIDEgdG8gdGhpcyBiaXQKKyAgICAgKiB8WzRdICAgICB8UlhFTkRJRiAgIHxSZWNlaXZlIEVuZCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIGVuZCBldmVudCBkb2VzIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBlbmQgZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGVzIDEgdG8gdGhpcyBiaXQKKyAgICAgKiB8WzVdICAgICB8U0xWVE9JRiAgIHxTbGF2ZSBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZyAoZm9yIFNsYXZlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIHRpbWUtb3V0IGV2ZW50IGRvZXMgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSB0aW1lLW91dCBldmVudCBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0ZXMgMSB0byB0aGlzIGJpdAorICAgICAqIHxbNl0gICAgIHxTTFZCRUlGICAgfFNsYXZlIEJpdCBDb3VudCBFcnJvciBJbnRlcnJ1cHQgRmxhZyAoZm9yIFNsYXZlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIGJpdCBjb3VudCBlcnJvciBldmVudCBkb2VzIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgYml0IGNvdW50IGVycm9yIGV2ZW50IG9jY3Vycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRlcyAxIHRvIHRoaXMgYml0LgorICAgICAqIHxbOF0gICAgIHxTU0lOQUlGICAgfFNsYXZlIFNlbGVjdCBJbmFjdGl2ZSBJbnRlcnJ1cHQgRmxhZyAoZm9yIFNsYXZlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgdGhlIGludGVybmFsIHNsYXZlIHNlbGVjdCBzaWduYWwgaGFzIGNoYW5nZWQgdG8gaW5hY3RpdmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRlcyAxIHRvIHRoaXMgYml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBzbGF2ZSBzZWxlY3Qgc2lnbmFsIGhhcyBub3QgY2hhbmdlZCB0byBpbmFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHNsYXZlIHNlbGVjdCBzaWduYWwgaGFzIGNoYW5nZWQgdG8gaW5hY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGludGVybmFsIHNsYXZlIHNlbGVjdCBzaWduYWwgaXMgYWN0aXZlIGhpZ2guCisgICAgICogfFs5XSAgICAgfFNTQUNUSUYgICB8U2xhdmUgU2VsZWN0IEFjdGl2ZSBJbnRlcnJ1cHQgRmxhZyAoZm9yIFNsYXZlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgdGhlIGludGVybmFsIHNsYXZlIHNlbGVjdCBzaWduYWwgaGFzIGNoYW5nZWQgdG8gYWN0aXZlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0ZXMgb25lIHRvIHRoaXMgYml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBzbGF2ZSBzZWxlY3Qgc2lnbmFsIGhhcyBub3QgY2hhbmdlZCB0byBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBzbGF2ZSBzZWxlY3Qgc2lnbmFsIGhhcyBjaGFuZ2VkIHRvIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgaW50ZXJuYWwgc2xhdmUgc2VsZWN0IHNpZ25hbCBpcyBhY3RpdmUgaGlnaC4KKyAgICAgKiB8WzE2XSAgICB8U1NMSU5FICAgIHxTbGF2ZSBTZWxlY3QgTGluZSBCdXMgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgb25seSBhdmFpbGFibGUgaW4gU2xhdmUgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IHVzZWQgdG8gbW9uaXRvciB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGlucHV0IHNsYXZlIHNlbGVjdCBzaWduYWwgb24gdGhlIGJ1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHNsYXZlIHNlbGVjdCBsaW5lIHN0YXR1cyBpcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgc2xhdmUgc2VsZWN0IGxpbmUgc3RhdHVzIGlzIDEuCisgICAgICogfFsxN10gICAgfEJVU1kgICAgICB8QnVzeSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJIGlzIGluIGlkbGUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSSBpcyBpbiBidXN5IHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmb2xsb3dpbmcgbGlzdGluZyBhcmUgdGhlIGJ1cyBidXN5IGNvbmRpdGlvbnM6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8YS4gVVNQSV9QUk9UQ1RMWzMxXSA9IDEgYW5kIHRoZSBUWEVNUFRZID0gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxiLiBGb3IgU1BJIE1hc3RlciBtb2RlLCB0aGUgVFhFTVBUWSA9IDEgYnV0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIG5vdCBmaW5pc2hlZCB5ZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Yy4gRm9yIFNQSSBTbGF2ZSBtb2RlLCB0aGUgVVNQSV9QUk9UQ1RMWzMxXSA9IDEgYW5kIHRoZXJlIGlzIHNlcmlhbCBjbG9jayBpbnB1dCBpbnRvIHRoZSBTUEkgY29yZSBsb2dpYyB3aGVuIHNsYXZlIHNlbGVjdCBpcyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8ZC4gRm9yIFNQSSBTbGF2ZSBtb2RlLCB0aGUgVVNQSV9QUk9UQ1RMWzMxXSA9IDEgYW5kIHRoZSB0cmFuc21pdCBidWZmZXIgb3IgdHJhbnNtaXQgc2hpZnQgcmVnaXN0ZXIgaXMgbm90IGVtcHR5IGV2ZW4gaWYgdGhlIHNsYXZlIHNlbGVjdCBpcyBpbmFjdGl2ZS4KKyAgICAgKiB8WzE4XSAgICB8U0xWVURSICAgIHxTbGF2ZSBNb2RlIFRyYW5zbWl0IFVuZGVyLXJ1biBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBTbGF2ZSBtb2RlLCBpZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgdHJhbnNtaXQgZGF0YSBpbiBidWZmZXIgd2hpbGUgdHJhbnNtaXQgZGF0YSBzaGlmdCBvdXQgY2F1c2VkIGJ5IGlucHV0IHNlcmlhbCBidXMgY2xvY2ssIHRoaXMgc3RhdHVzIGZsYWcgd2lsbCBiZSBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBjdXJyZW50IHNoaWZ0LW91dCBkYXRhIG9mIHdvcmQgdHJhbnNtaXNzaW9uIGlzIHN3aXRjaGVkIHRvIFRYVURSUE9MIChVU1BJX1BST1RDVExbMjhdKSBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIHRyYW5zbWl0IHVuZGVyLXJ1biBldmVudCBkb2VzIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgdHJhbnNtaXQgdW5kZXItcnVuIGV2ZW50IG9jY3Vycy4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBVU0NJIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gVVNDSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQlJHRU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIFVTQ0kgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzFdOworICAgIF9fSU8gdWludDMyX3QgREFUSU4wOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIFVTQ0kgSW5wdXQgRGF0YSBTaWduYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxWzNdOworICAgIF9fSU8gdWludDMyX3QgQ1RMSU4wOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjBdIFVTQ0kgSW5wdXQgQ29udHJvbCBTaWduYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUyWzFdOworICAgIF9fSU8gdWludDMyX3QgQ0xLSU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjhdIFVTQ0kgSW5wdXQgQ2xvY2sgU2lnbmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IExJTkVDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDJjXSBVU0NJIExpbmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBUWERBVDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzMF0gVVNDSSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUlhEQVQ7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMzRdIFVTQ0kgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEJVRkNUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDM4XSBVU0NJIFRyYW5zbWl0L1JlY2VpdmUgQnVmZmVyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCVUZTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzY10gVVNDSSBUcmFuc21pdC9SZWNlaXZlIEJ1ZmZlciBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUERNQUNUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwNDBdIFVTQ0kgUERNQSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUzWzRdOworICAgIF9fSU8gdWludDMyX3QgV0tDVEw7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNTRdIFVTQ0kgV2FrZS11cCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFdLU1RTOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDU4XSBVU0NJIFdha2UtdXAgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQUk9UQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA1Y10gVVNDSSBQcm90b2NvbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFJPVElFTjsgICAgICAgICAgICAgICAvKiE8IFsweDAwNjBdIFVTQ0kgUHJvdG9jb2wgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBST1RTVFM7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDY0XSBVU0NJIFByb3RvY29sIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gVVNQSV9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBVU1BJX0NPTlNUIFVTUEkgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgVVNQSSBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFVTUElfQ1RMX0ZVTk1PREVfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkNUTDogRlVOTU9ERSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVU1BJX0NUTF9GVU5NT0RFX01zayAgICAgICAgICAgICAoMHg3dWwgPDwgVVNQSV9DVExfRlVOTU9ERV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpDVEw6IEZVTk1PREUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0lOVEVOX1RYU1RJRU5fUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpJTlRFTjogVFhTVElFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9JTlRFTl9UWFNUSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTUElfSU5URU5fVFhTVElFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6SU5URU46IFRYU1RJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9JTlRFTl9UWEVORElFTl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6SU5URU46IFRYRU5ESUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTUElfSU5URU5fVFhFTkRJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVU1BJX0lOVEVOX1RYRU5ESUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OklOVEVOOiBUWEVORElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfSU5URU5fUlhTVElFTl9Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OklOVEVOOiBSWFNUSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU1BJX0lOVEVOX1JYU1RJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9JTlRFTl9SWFNUSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpJTlRFTjogUlhTVElFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0lOVEVOX1JYRU5ESUVOX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpJTlRFTjogUlhFTkRJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9JTlRFTl9SWEVORElFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfSU5URU5fUlhFTkRJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6SU5URU46IFJYRU5ESUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9CUkdFTl9SQ0xLU0VMX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlJHRU46IFJDTEtTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTUElfQlJHRU5fUkNMS1NFTF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU1BJX0JSR0VOX1JDTEtTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJSR0VOOiBSQ0xLU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQlJHRU5fUFRDTEtTRUxfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJSR0VOOiBQVENMS1NFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX0JSR0VOX1BUQ0xLU0VMX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9CUkdFTl9QVENMS1NFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCUkdFTjogUFRDTEtTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0JSR0VOX1NQQ0xLU0VMX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCUkdFTjogU1BDTEtTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9CUkdFTl9TUENMS1NFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IFVTUElfQlJHRU5fU1BDTEtTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlJHRU46IFNQQ0xLU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9CUkdFTl9UTUNOVEVOX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlJHRU46IFRNQ05URU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTUElfQlJHRU5fVE1DTlRFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU1BJX0JSR0VOX1RNQ05URU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJSR0VOOiBUTUNOVEVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQlJHRU5fVE1DTlRTUkNfUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJSR0VOOiBUTUNOVFNSQyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX0JSR0VOX1RNQ05UU1JDX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9CUkdFTl9UTUNOVFNSQ19Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCUkdFTjogVE1DTlRTUkMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0JSR0VOX0NMS0RJVl9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCUkdFTjogQ0xLRElWIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9CUkdFTl9DTEtESVZfTXNrICAgICAgICAgICAgKDB4M2ZmdWwgPDwgVVNQSV9CUkdFTl9DTEtESVZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlJHRU46IENMS0RJViBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9EQVRJTjBfU1lOQ1NFTF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6REFUSU4wOiBTWU5DU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTUElfREFUSU4wX1NZTkNTRUxfTXNrICAgICAgICAgICgweDF1bCA8PCBVU1BJX0RBVElOMF9TWU5DU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkRBVElOMDogU1lOQ1NFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfREFUSU4wX0lOSU5WX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkRBVElOMDogSU5JTlYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU1BJX0RBVElOMF9JTklOVl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9EQVRJTjBfSU5JTlZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpEQVRJTjA6IElOSU5WIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0NUTElOMF9TWU5DU0VMX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpDVExJTjA6IFNZTkNTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9DVExJTjBfU1lOQ1NFTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfQ1RMSU4wX1NZTkNTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6Q1RMSU4wOiBTWU5DU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9DVExJTjBfSU5JTlZfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6Q1RMSU4wOiBJTklOViBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTUElfQ1RMSU4wX0lOSU5WX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU1BJX0NUTElOMF9JTklOVl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkNUTElOMDogSU5JTlYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQ0xLSU5fU1lOQ1NFTF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkNMS0lOOiBTWU5DU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU1BJX0NMS0lOX1NZTkNTRUxfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9DTEtJTl9TWU5DU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpDTEtJTjogU1lOQ1NFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0xJTkVDVExfTFNCX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpMSU5FQ1RMOiBMU0IgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9MSU5FQ1RMX0xTQl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVTUElfTElORUNUTF9MU0JfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6TElORUNUTDogTFNCIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9MSU5FQ1RMX0RBVE9JTlZfUG9zICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6TElORUNUTDogREFUT0lOViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVTUElfTElORUNUTF9EQVRPSU5WX01zayAgICAgICAgICgweDF1bCA8PCBVU1BJX0xJTkVDVExfREFUT0lOVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkxJTkVDVEw6IERBVE9JTlYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfTElORUNUTF9DVExPSU5WX1BvcyAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkxJTkVDVEw6IENUTE9JTlYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU1BJX0xJTkVDVExfQ1RMT0lOVl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVNQSV9MSU5FQ1RMX0NUTE9JTlZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpMSU5FQ1RMOiBDVExPSU5WIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0xJTkVDVExfRFdJRFRIX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpMSU5FQ1RMOiBEV0lEVEggUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9MSU5FQ1RMX0RXSURUSF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFVTUElfTElORUNUTF9EV0lEVEhfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6TElORUNUTDogRFdJRFRIIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9UWERBVF9UWERBVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6VFhEQVQ6IFRYREFUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVTUElfVFhEQVRfVFhEQVRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBVU1BJX1RYREFUX1RYREFUX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlRYREFUOiBUWERBVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfVFhEQVRfUE9SVERJUl9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlRYREFUOiBQT1JURElSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU1BJX1RYREFUX1BPUlRESVJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9UWERBVF9QT1JURElSX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpUWERBVDogUE9SVERJUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1JYREFUX1JYREFUX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpSWERBVDogUlhEQVQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9SWERBVF9SWERBVF9Nc2sgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFVTUElfUlhEQVRfUlhEQVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UlhEQVQ6IFJYREFUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9CVUZDVExfVFhVRFJJRU5fUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGQ1RMOiBUWFVEUklFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVTUElfQlVGQ1RMX1RYVURSSUVOX01zayAgICAgICAgICgweDF1bCA8PCBVU1BJX0JVRkNUTF9UWFVEUklFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRkNUTDogVFhVRFJJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQlVGQ1RMX1RYQ0xSX1BvcyAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRkNUTDogVFhDTFIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU1BJX0JVRkNUTF9UWENMUl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9CVUZDVExfVFhDTFJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZDVEw6IFRYQ0xSIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0JVRkNUTF9SWE9WSUVOX1BvcyAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZDVEw6IFJYT1ZJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9CVUZDVExfUlhPVklFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfQlVGQ1RMX1JYT1ZJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGQ1RMOiBSWE9WSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9CVUZDVExfUlhDTFJfUG9zICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGQ1RMOiBSWENMUiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTUElfQlVGQ1RMX1JYQ0xSX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU1BJX0JVRkNUTF9SWENMUl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRkNUTDogUlhDTFIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQlVGQ1RMX1RYUlNUX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRkNUTDogVFhSU1QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU1BJX0JVRkNUTF9UWFJTVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9CVUZDVExfVFhSU1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZDVEw6IFRYUlNUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0JVRkNUTF9SWFJTVF9Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZDVEw6IFJYUlNUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9CVUZDVExfUlhSU1RfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVTUElfQlVGQ1RMX1JYUlNUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGQ1RMOiBSWFJTVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9CVUZTVFNfUlhFTVBUWV9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGU1RTOiBSWEVNUFRZIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTUElfQlVGU1RTX1JYRU1QVFlfTXNrICAgICAgICAgICgweDF1bCA8PCBVU1BJX0JVRlNUU19SWEVNUFRZX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRlNUUzogUlhFTVBUWSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQlVGU1RTX1JYRlVMTF9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRlNUUzogUlhGVUxMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU1BJX0JVRlNUU19SWEZVTExfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9CVUZTVFNfUlhGVUxMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZTVFM6IFJYRlVMTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0JVRlNUU19SWE9WSUZfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZTVFM6IFJYT1ZJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9CVUZTVFNfUlhPVklGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTUElfQlVGU1RTX1JYT1ZJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGU1RTOiBSWE9WSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9CVUZTVFNfVFhFTVBUWV9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGU1RTOiBUWEVNUFRZIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTUElfQlVGU1RTX1RYRU1QVFlfTXNrICAgICAgICAgICgweDF1bCA8PCBVU1BJX0JVRlNUU19UWEVNUFRZX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRlNUUzogVFhFTVBUWSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQlVGU1RTX1RYRlVMTF9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRlNUUzogVFhGVUxMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU1BJX0JVRlNUU19UWEZVTExfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9CVUZTVFNfVFhGVUxMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZTVFM6IFRYRlVMTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0JVRlNUU19UWFVEUklGX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZTVFM6IFRYVURSSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9CVUZTVFNfVFhVRFJJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfQlVGU1RTX1RYVURSSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGU1RTOiBUWFVEUklGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QRE1BQ1RMX1BETUFSU1RfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UERNQUNUTDogUERNQVJTVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVTUElfUERNQUNUTF9QRE1BUlNUX01zayAgICAgICAgICgweDF1bCA8PCBVU1BJX1BETUFDVExfUERNQVJTVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBETUFDVEw6IFBETUFSU1QgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUERNQUNUTF9UWFBETUFFTl9Qb3MgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBETUFDVEw6IFRYUERNQUVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVU1BJX1BETUFDVExfVFhQRE1BRU5fTXNrICAgICAgICAoMHgxdWwgPDwgVVNQSV9QRE1BQ1RMX1RYUERNQUVOX1BvcykgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQRE1BQ1RMOiBUWFBETUFFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BETUFDVExfUlhQRE1BRU5fUG9zICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQRE1BQ1RMOiBSWFBETUFFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVNQSV9QRE1BQ1RMX1JYUERNQUVOX01zayAgICAgICAgKDB4MXVsIDw8IFVTUElfUERNQUNUTF9SWFBETUFFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UERNQUNUTDogUlhQRE1BRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QRE1BQ1RMX1BETUFFTl9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UERNQUNUTDogUERNQUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTUElfUERNQUNUTF9QRE1BRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVU1BJX1BETUFDVExfUERNQUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBETUFDVEw6IFBETUFFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfV0tDVExfV0tFTl9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OldLQ1RMOiBXS0VOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVU1BJX1dLQ1RMX1dLRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9XS0NUTF9XS0VOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpXS0NUTDogV0tFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1dLQ1RMX1dLQUREUkVOX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpXS0NUTDogV0tBRERSRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9XS0NUTF9XS0FERFJFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfV0tDVExfV0tBRERSRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6V0tDVEw6IFdLQUREUkVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9XS0NUTF9QREJPUFRfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6V0tDVEw6IFBEQk9QVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTUElfV0tDVExfUERCT1BUX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU1BJX1dLQ1RMX1BEQk9QVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OldLQ1RMOiBQREJPUFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfV0tTVFNfV0tGX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OldLU1RTOiBXS0YgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBVU1BJX1dLU1RTX1dLRl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9XS1NUU19XS0ZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpXS1NUUzogV0tGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RDVExfU0xBVkVfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBTTEFWRSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX1NMQVZFX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVENUTF9TTEFWRV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogU0xBVkUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX1NMVjNXSVJFX1BvcyAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogU0xWM1dJUkUgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVTUElfUFJPVENUTF9TTFYzV0lSRV9Nc2sgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RDVExfU0xWM1dJUkVfUG9zKSAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IFNMVjNXSVJFIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVENUTF9TU19Qb3MgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IFNTIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVU1BJX1BST1RDVExfU1NfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UQ1RMX1NTX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBTUyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RDVExfQVVUT1NTX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBBVVRPU1MgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX0FVVE9TU19Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVENUTF9BVVRPU1NfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogQVVUT1NTIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX1NDTEtNT0RFX1BvcyAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogU0NMS01PREUgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVTUElfUFJPVENUTF9TQ0xLTU9ERV9Nc2sgICAgICAgICgweDN1bCA8PCBVU1BJX1BST1RDVExfU0NMS01PREVfUG9zKSAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IFNDTEtNT0RFIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVENUTF9TVVNQSVRWX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IFNVU1BJVFYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU1BJX1BST1RDVExfU1VTUElUVl9Nc2sgICAgICAgICAoMHhmdWwgPDwgVVNQSV9QUk9UQ1RMX1NVU1BJVFZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBTVVNQSVRWIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RDVExfVFNNU0VMX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBUU01TRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX1RTTVNFTF9Nc2sgICAgICAgICAgKDB4N3VsIDw8IFVTUElfUFJPVENUTF9UU01TRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogVFNNU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX1NMVlRPQ05UX1BvcyAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogU0xWVE9DTlQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVTUElfUFJPVENUTF9TTFZUT0NOVF9Nc2sgICAgICAgICgweDNmZnVsIDw8IFVTUElfUFJPVENUTF9TTFZUT0NOVF9Qb3MpICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IFNMVlRPQ05UIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVENUTF9UWFVEUlBPTF9Qb3MgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IFRYVURSUE9MIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVU1BJX1BST1RDVExfVFhVRFJQT0xfTXNrICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UQ1RMX1RYVURSUE9MX1BvcykgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBUWFVEUlBPTCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RDVExfUFJPVEVOX1BvcyAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBQUk9URU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX1BST1RFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVENUTF9QUk9URU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogUFJPVEVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9USUVOX1NTSU5BSUVOX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVElFTjogU1NJTkFJRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVTUElfUFJPVElFTl9TU0lOQUlFTl9Nc2sgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RJRU5fU1NJTkFJRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RJRU46IFNTSU5BSUVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVElFTl9TU0FDVElFTl9Qb3MgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RJRU46IFNTQUNUSUVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVU1BJX1BST1RJRU5fU1NBQ1RJRU5fTXNrICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9USUVOX1NTQUNUSUVOX1BvcykgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9USUVOOiBTU0FDVElFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RJRU5fU0xWVE9JRU5fUG9zICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9USUVOOiBTTFZUT0lFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9USUVOX1NMVlRPSUVOX01zayAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVElFTl9TTFZUT0lFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVElFTjogU0xWVE9JRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9USUVOX1NMVkJFSUVOX1BvcyAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVElFTjogU0xWQkVJRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVTUElfUFJPVElFTl9TTFZCRUlFTl9Nc2sgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RJRU5fU0xWQkVJRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RJRU46IFNMVkJFSUVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVFNUU19UWFNUSUZfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFRYU1RJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX1BST1RTVFNfVFhTVElGX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UU1RTX1RYU1RJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBUWFNUSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RTVFNfVFhFTkRJRl9Qb3MgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBUWEVORElGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1RYRU5ESUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVFNUU19UWEVORElGX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogVFhFTkRJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1JYU1RJRl9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogUlhTVElGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTUElfUFJPVFNUU19SWFNUSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RTVFNfUlhTVElGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFJYU1RJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVFNUU19SWEVORElGX1BvcyAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFJYRU5ESUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU1BJX1BST1RTVFNfUlhFTkRJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UU1RTX1JYRU5ESUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBSWEVORElGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RTVFNfU0xWVE9JRl9Qb3MgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBTTFZUT0lGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1NMVlRPSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVFNUU19TTFZUT0lGX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogU0xWVE9JRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1NMVkJFSUZfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogU0xWQkVJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVTUElfUFJPVFNUU19TTFZCRUlGX01zayAgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RTVFNfU0xWQkVJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFNMVkJFSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVFNUU19TU0lOQUlGX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFNTSU5BSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU1BJX1BST1RTVFNfU1NJTkFJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UU1RTX1NTSU5BSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBTU0lOQUlGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RTVFNfU1NBQ1RJRl9Qb3MgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBTU0FDVElGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1NTQUNUSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVFNUU19TU0FDVElGX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogU1NBQ1RJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1NTTElORV9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogU1NMSU5FIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTUElfUFJPVFNUU19TU0xJTkVfTXNrICAgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RTVFNfU1NMSU5FX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFNTTElORSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVFNUU19CVVNZX1BvcyAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IEJVU1kgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU1BJX1BST1RTVFNfQlVTWV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UU1RTX0JVU1lfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBCVVNZIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RTVFNfU0xWVURSX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBTTFZVRFIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1NMVlVEUl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVFNUU19TTFZVRFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogU0xWVURSIE1hc2sgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogVVNQSV9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgVVNQSSByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisjZW5kaWYgLyogX19VU1BJX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS91dWFydF9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS91dWFydF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDQ4MzhmCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3V1YXJ0X3JlZy5oCkBAIC0wLDAgKzEsNjYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdXVhcnRfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFVVQVJUIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1VVQVJUX1JFR19IX18KKyNkZWZpbmUgX19VVUFSVF9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVUFSVCBNb2RlIG9mIFVTQ0kgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFVVQVJUIFVBUlQgTW9kZSBvZiBVU0NJIENvbnRyb2xsZXIoVVVBUlQpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIFVVQVJUIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgVVVBUlRfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDAwICBVU0NJIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxGVU5NT0RFICAgfEZ1bmN0aW9uIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBzZWxlY3RzIHRoZSBwcm90b2NvbCBmb3IgdGhpcyBVU0NJIGNvbnRyb2xsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2VsZWN0aW5nIGEgcHJvdG9jb2wgdGhhdCBpcyBub3QgYXZhaWxhYmxlIG9yIGEgcmVzZXJ2ZWQgY29tYmluYXRpb24gZGlzYWJsZXMgdGhlIFVTQ0kuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiB0d28gcHJvdG9jb2xzLCB0aGUgVVNDSSBoYXMgdG8gYmUgZGlzYWJsZWQgYmVmb3JlIHNlbGVjdGluZyBhIG5ldyBwcm90b2NvbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTaW11bHRhbmVvdXNseSwgdGhlIFVTQ0kgd2lsbCBiZSByZXNldCB3aGVuIHVzZXIgd3JpdGUgMDAwIHRvIEZVTk1PREUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gVGhlIFVTQ0kgaXMgZGlzYWJsZWQuIEFsbCBwcm90b2NvbCByZWxhdGVkIHN0YXRlIG1hY2hpbmVzIGFyZSBzZXQgdG8gaWRsZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBUaGUgU1BJIHByb3RvY29sIGlzIHNlbGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFRoZSBVQVJUIHByb3RvY29sIGlzIHNlbGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFRoZSBJMkMgcHJvdG9jb2wgaXMgc2VsZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogQHZhciBVVUFSVF9UOjpJTlRFTgorICAgICAqIE9mZnNldDogMHgwNCAgVVNDSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzFdICAgICB8VFhTVElFTiAgIHxUcmFuc21pdCBTdGFydCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uIGluIGNhc2Ugb2YgYSB0cmFuc21pdCBzdGFydCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHRyYW5zbWl0IHN0YXJ0IGludGVycnVwdCBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHRyYW5zbWl0IHN0YXJ0IGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxUWEVORElFTiAgfFRyYW5zbWl0IEVuZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uIGluIGNhc2Ugb2YgYSB0cmFuc21pdCBmaW5pc2ggZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB0cmFuc21pdCBmaW5pc2ggaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdHJhbnNtaXQgZmluaXNoIGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIHxbM10gICAgIHxSWFNUSUVOICAgfFJlY2VpdmUgU3RhcnQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBpbiBjYXNlIG9mIGEgcmVjZWl2ZSBzdGFydCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlY2VpdmUgc3RhcnQgaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVjZWl2ZSBzdGFydCBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8UlhFTkRJRU4gIHxSZWNlaXZlIEVuZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uIGluIGNhc2Ugb2YgYSByZWNlaXZlIGZpbmlzaCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlY2VpdmUgZW5kIGludGVycnVwdCBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHJlY2VpdmUgZW5kIGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIEB2YXIgVVVBUlRfVDo6QlJHRU4KKyAgICAgKiBPZmZzZXQ6IDB4MDggIFVTQ0kgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFJDTEtTRUwgICB8UmVmZXJlbmNlIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBzZWxlY3RzIHRoZSBzb3VyY2Ugc2lnbmFsIG9mIHJlZmVyZW5jZSBjbG9jayAoZlJFRl9DTEspLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQZXJpcGhlcmFsIGRldmljZSBjbG9jayBmUENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXJ2ZWQuCisgICAgICogfFsxXSAgICAgfFBUQ0xLU0VMICB8UHJvdG9jb2wgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHNlbGVjdHMgdGhlIHNvdXJjZSBzaWduYWwgb2YgcHJvdG9jb2wgY2xvY2sgKGZQUk9UX0NMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlZmVyZW5jZSBjbG9jayBmUkVGX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gZlJFRl9DTEsyIChpdHMgZnJlcXVlbmN5IGlzIGhhbGYgb2YgZlJFRl9DTEspLgorICAgICAqIHxbMzoyXSAgIHxTUENMS1NFTCAgfFNhbXBsZSBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgdXNlZCBmb3IgdGhlIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gb2YgYSBzYW1wbGUgY2xvY2sgKGZTQU1QX0NMSykgZm9yIHRoZSBwcm90b2NvbCBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBmU0FNUF9DTEsgZnJlcXVlbmN5IGlzIGZESVZfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gZlNBTVBfQ0xLIGZyZXF1ZW5jeSBpcyBmcm9tIGZQUk9UX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IGZTQU1QX0NMSyBmcmVxdWVuY3kgaXMgZnJvbSBmU0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IGZTQU1QX0NMSyBmcmVxdWVuY3kgaXMgZnJvbSBmUkVGX0NMSy4KKyAgICAgKiB8WzRdICAgICB8VE1DTlRFTiAgIHxUaW1pbmcgTWVhc3VyZW1lbnQgQ291bnRlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgMTAtYml0IHRpbWluZyBtZWFzdXJlbWVudCBjb3VudGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1pbmcgbWVhc3VyZW1lbnQgY291bnRlciBpcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltaW5nIG1lYXN1cmVtZW50IGNvdW50ZXIgaXMgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8VE1DTlRTUkMgIHxUaW1pbmcgTWVhc3VyZW1lbnQgQ291bnRlciBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWluZyBtZWFzdXJlbWVudCBjb3VudGVyIHdpdGggZlBST1RfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1pbmcgbWVhc3VyZW1lbnQgY291bnRlciB3aXRoIGZESVZfQ0xLLgorICAgICAqIHxbOTo4XSAgIHxQRFNDTlQgICAgfFByZS1kaXZpZGVyIGZvciBTYW1wbGUgQ291bnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGRlZmluZXMgdGhlIGRpdmlkZSByYXRpbyBvZiB0aGUgY2xvY2sgZGl2aXNpb24gZnJvbSBzYW1wbGUgY2xvY2sgZlNBTVBfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkaXZpZGVkIGZyZXF1ZW5jeSBmUERTX0NOVCA9IGZTQU1QX0NMSyAvIChQRFNDTlQrMSkuCisgICAgICogfFsxNDoxMF0gfERTQ05UICAgICB8RGVub21pbmF0b3IgZm9yIFNhbXBsZSBDb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgZGVmaW5lcyB0aGUgZGl2aWRlIHJhdGlvIG9mIHRoZSBzYW1wbGUgY2xvY2sgZlNBTVBfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkaXZpZGVkIGZyZXF1ZW5jeSBmRFNfQ05UID0gZlBEU19DTlQgLyAoRFNDTlQrMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIG1heGltdW0gdmFsdWUgb2YgRFNDTlQgaXMgMHhGIG9uIFVBUlQgbW9kZSBhbmQgc3VnZ2VzdCB0byBzZXQgb3ZlciA0IHRvIGNvbmZpcm0gdGhlIHJlY2VpdmVyIGRhdGEgaXMgc2FtcGxlZCBpbiByaWdodCB2YWx1ZS4KKyAgICAgKiB8WzI1OjE2XSB8Q0xLRElWICAgIHxDbG9jayBEaXZpZGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgZGVmaW5lcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgcHJvdG9jb2wgY2xvY2sgZnJlcXVlbmN5IGZQUk9UX0NMSyBhbmQgdGhlIGNsb2NrIGRpdmlkZXIgZnJlcXVlbmN5IGZESVZfQ0xLIChmRElWX0NMSyA9IGZQUk9UX0NMSyAvIChDTEtESVYrMSkgKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBVQVJUIGZ1bmN0aW9uLCBpdCBjYW4gYmUgdXBkYXRlZCBieSBoYXJkd2FyZSBpbiB0aGUgNHRoIGZhbGxpbmcgZWRnZSBvZiB0aGUgaW5wdXQgZGF0YSAweDU1IHdoZW4gdGhlIGF1dG8gYmF1ZCByYXRlIGZ1bmN0aW9uIChBQlJFTihVVUFSVF9QUk9UQ1RMWzZdKSkgaXMgZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmV2aXNlZCB2YWx1ZSBpcyB0aGUgYXZlcmFnZSBiaXQgdGltZSBiZXR3ZWVuIGJpdCA1IGFuZCBiaXQgNi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdXNlciBjYW4gdXNlIHJldmlzZWQgQ0xLRElWIGFuZCBuZXcgQlJERVRJVFYgKFVVQVJUX1BST1RDVExbMjQ6MTZdKSB0byBjYWxjdWxhdGUgdGhlIHByZWNpc2UgYmF1ZCByYXRlLgorICAgICAqIEB2YXIgVVVBUlRfVDo6REFUSU4wCisgICAgICogT2Zmc2V0OiAweDEwICBVU0NJIElucHV0IERhdGEgU2lnbmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNZTkNTRUwgICB8SW5wdXQgU2lnbmFsIFN5bmNocm9uaXphdGlvbiBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBzZWxlY3RzIGlmIHRoZSB1bi1zeW5jaHJvbml6ZWQgaW5wdXQgc2lnbmFsICh3aXRoIG9wdGlvbmFsbHkgaW52ZXJ0ZWQpIG9yIHRoZSBzeW5jaHJvbml6ZWQgKGFuZCBvcHRpb25hbGx5IGZpbHRlcmVkKSBzaWduYWwgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIHRoZSBkYXRhICBzaGlmdCB1bml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdW4tc3luY2hyb25pemVkIHNpZ25hbCBjYW4gYmUgdGFrZW4gYXMgaW5wdXQgZm9yIHRoZSBkYXRhIHNoaWZ0IHVuaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBzeW5jaHJvbml6ZWQgc2lnbmFsIGNhbiBiZSB0YWtlbiBhcyBpbnB1dCBmb3IgdGhlIGRhdGEgc2hpZnQgdW5pdC4KKyAgICAgKiB8WzJdICAgICB8SU5JTlYgICAgIHxJbnB1dCBTaWduYWwgSW52ZXJzZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZWZpbmVzIHRoZSBpbnZlcnRlciBlbmFibGUgb2YgdGhlIGlucHV0IGFzeW5jaHJvbm91cyBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgaW5wdXQgc2lnbmFsIHdpbGwgbm90IGJlIGludmVydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdW4tc3luY2hyb25pemVkIGlucHV0IHNpZ25hbCB3aWxsIGJlIGludmVydGVkLgorICAgICAqIHxbNDozXSAgIHxFREdFREVUICAgfElucHV0IFNpZ25hbCBFZGdlIERldGVjdGlvbiBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgc2VsZWN0cyB3aGljaCBlZGdlIGFjdGl2ZXMgdGhlIHRyaWdnZXIgZXZlbnQgb2YgaW5wdXQgZGF0YSBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBUaGUgdHJpZ2dlciBldmVudCBhY3RpdmF0aW9uIGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQSByaXNpbmcgZWRnZSBhY3RpdmF0ZXMgdGhlIHRyaWdnZXIgZXZlbnQgb2YgaW5wdXQgZGF0YSBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBBIGZhbGxpbmcgZWRnZSBhY3RpdmF0ZXMgdGhlIHRyaWdnZXIgZXZlbnQgb2YgaW5wdXQgZGF0YSBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCb3RoIGVkZ2VzIGFjdGl2YXRlIHRoZSB0cmlnZ2VyIGV2ZW50IG9mIGlucHV0IGRhdGEgc2lnbmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIFVBUlQgZnVuY3Rpb24gbW9kZSwgaXQgaXMgc3VnZ2VzdGVkIHRvIHNldCB0aGlzIGJpdCBmaWVsZCBhcyAxMC4KKyAgICAgKiBAdmFyIFVVQVJUX1Q6OkNUTElOMAorICAgICAqIE9mZnNldDogMHgyMCAgVVNDSSBJbnB1dCBDb250cm9sIFNpZ25hbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTWU5DU0VMICAgfElucHV0IFN5bmNocm9uaXphdGlvbiBTaWduYWwgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgc2VsZWN0cyBpZiB0aGUgdW4tc3luY2hyb25pemVkIGlucHV0IHNpZ25hbCAod2l0aCBvcHRpb25hbGx5IGludmVydGVkKSBvciB0aGUgc3luY2hyb25pemVkIChhbmQgb3B0aW9uYWxseSBmaWx0ZXJlZCkgc2lnbmFsIGNhbiBiZSB1c2VkIGFzIGlucHV0IGZvciB0aGUgZGF0YSBzaGlmdCB1bml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdW4tc3luY2hyb25pemVkIHNpZ25hbCBjYW4gYmUgdGFrZW4gYXMgaW5wdXQgZm9yIHRoZSBkYXRhIHNoaWZ0IHVuaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBzeW5jaHJvbml6ZWQgc2lnbmFsIGNhbiBiZSB0YWtlbiBhcyBpbnB1dCBmb3IgdGhlIGRhdGEgc2hpZnQgdW5pdC4KKyAgICAgKiB8WzJdICAgICB8SU5JTlYgICAgIHxJbnB1dCBTaWduYWwgSW52ZXJzZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZWZpbmVzIHRoZSBpbnZlcnRlciBlbmFibGUgb2YgdGhlIGlucHV0IGFzeW5jaHJvbm91cyBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgaW5wdXQgc2lnbmFsIHdpbGwgbm90IGJlIGludmVydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdW4tc3luY2hyb25pemVkIGlucHV0IHNpZ25hbCB3aWxsIGJlIGludmVydGVkLgorICAgICAqIEB2YXIgVVVBUlRfVDo6Q0xLSU4KKyAgICAgKiBPZmZzZXQ6IDB4MjggIFVTQ0kgSW5wdXQgQ2xvY2sgU2lnbmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTWU5DU0VMICAgfElucHV0IFN5bmNocm9uaXphdGlvbiBTaWduYWwgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgc2VsZWN0cyBpZiB0aGUgdW4tc3luY2hyb25pemVkIGlucHV0IHNpZ25hbCBvciB0aGUgc3luY2hyb25pemVkIChhbmQgb3B0aW9uYWxseSBmaWx0ZXJlZCkgc2lnbmFsIGNhbiBiZSB1c2VkIGFzIGlucHV0IGZvciB0aGUgZGF0YSBzaGlmdCB1bml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdW4tc3luY2hyb25pemVkICAgc2lnbmFsIGNhbiBiZSB0YWtlbiBhcyBpbnB1dCBmb3IgdGhlIGRhdGEgc2hpZnQgdW5pdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHN5bmNocm9uaXplZCBzaWduYWwgY2FuIGJlIHRha2VuIGFzIGlucHV0IGZvciB0aGUgZGF0YSBzaGlmdCB1bml0LgorICAgICAqIEB2YXIgVVVBUlRfVDo6TElORUNUTAorICAgICAqIE9mZnNldDogMHgyQyAgVVNDSSBMaW5lIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxMU0IgICAgICAgfExTQiBGaXJzdCBUcmFuc21pc3Npb24gU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBNU0IsIHdoaWNoIGJpdCBvZiB0cmFuc21pdC9yZWNlaXZlIGRhdGEgYnVmZmVyIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgRFdJRFRILCBpcyB0cmFuc21pdHRlZC9yZWNlaXZlZCBmaXJzdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIExTQiwgdGhlIGJpdCAwIG9mIGRhdGEgYnVmZmVyLCB3aWxsIGJlIHRyYW5zbWl0dGVkL3JlY2VpdmVkIGZpcnN0LgorICAgICAqIHxbNV0gICAgIHxEQVRPSU5WICAgfERhdGEgT3V0cHV0IEludmVyc2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyB0aGUgcmVsYXRpb24gYmV0d2VlbiB0aGUgaW50ZXJuYWwgc2hpZnQgZGF0YSB2YWx1ZSBhbmQgdGhlIG91dHB1dCBkYXRhIHNpZ25hbCBvZiBVU0NJeF9EQVQxIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHZhbHVlIG9mIFVTQ0l4X0RBVDEgaXMgZXF1YWwgdG8gdGhlIGRhdGEgc2hpZnQgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB2YWx1ZSBvZiBVU0NJeF9EQVQxIGlzIHRoZSBpbnZlcnNpb24gb2YgZGF0YSBzaGlmdCByZWdpc3Rlci4KKyAgICAgKiB8WzddICAgICB8Q1RMT0lOViAgIHxDb250cm9sIFNpZ25hbCBPdXRwdXQgSW52ZXJzZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZWZpbmVzIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZSBpbnRlcm5hbCBjb250cm9sIHNpZ25hbCBhbmQgdGhlIG91dHB1dCBjb250cm9sIHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgY29udHJvbCBzaWduYWwgd2lsbCBiZSBpbnZlcnRlZCBiZWZvcmUgaXRzIG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBVQVJUIHByb3RvY29sLCB0aGUgY29udHJvbCBzaWduYWwgbWVhbnMgblJUUyBzaWduYWwuCisgICAgICogfFsxMTo4XSAgfERXSURUSCAgICB8V29yZCBMZW5ndGggb2YgVHJhbnNtaXNzaW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgZGVmaW5lcyB0aGUgZGF0YSB3b3JkIGxlbmd0aCAoYW1vdW50IG9mIGJpdHMpIGZvciByZWNlcHRpb24gYW5kIHRyYW5zbWlzc2lvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkYXRhIHdvcmQgaXMgYWx3YXlzIHJpZ2h0LWFsaWduZWQgaW4gdGhlIGRhdGEgYnVmZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VVNDSSBzdXBwb3J0IHdvcmQgbGVuZ3RoIGZyb20gNCB0byAxNiBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MCA9IFRoZSBkYXRhIHdvcmQgY29udGFpbnMgMTYgYml0cyBsb2NhdGVkIGF0IGJpdCBwb3NpdGlvbnMgWzE1OjBdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MiA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MyA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NCA9IFRoZSBkYXRhIHdvcmQgY29udGFpbnMgNCBiaXRzIGxvY2F0ZWQgYXQgYml0IHBvc2l0aW9ucyBbMzowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBUaGUgZGF0YSB3b3JkIGNvbnRhaW5zIDUgYml0cyBsb2NhdGVkIGF0IGJpdCBwb3NpdGlvbnMgWzQ6MF0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Li4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHhGID0gVGhlIGRhdGEgd29yZCBjb250YWlucyAxNSBiaXRzIGxvY2F0ZWQgYXQgYml0IHBvc2l0aW9ucyBbMTQ6MF0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gVUFSVCBwcm90b2NvbCwgdGhlIGxlbmd0aCBjYW4gYmUgY29uZmlndXJlZCBhcyA2fjEzIGJpdHMuCisgICAgICogQHZhciBVVUFSVF9UOjpUWERBVAorICAgICAqIE9mZnNldDogMHgzMCAgVVNDSSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8VFhEQVQgICAgIHxUcmFuc21pdCBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgY2FuIHVzZSB0aGlzIGJpdCBmaWVsZCB0byB3cml0ZSAxNi1iaXQgdHJhbnNtaXQgZGF0YSBmb3IgdHJhbnNtaXNzaW9uLgorICAgICAqIEB2YXIgVVVBUlRfVDo6UlhEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MzQgIFVTQ0kgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UlhEQVQgICAgIHxSZWNlaXZlZCBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgbW9uaXRvcnMgdGhlIHJlY2VpdmVkIGRhdGEgd2hpY2ggc3RvcmVkIGluIHJlY2VpdmUgZGF0YSBidWZmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogUlhEQVRbMTU6MTNdIGluZGljYXRlIHRoZSBzYW1lIGZyYW1lIHN0YXR1cyBvZiBCUkVBSywgRlJNRVJSIGFuZCBQQVJJVFlFUlIgKFVVQVJUX1BST1RTVFNbNzo1XSkuCisgICAgICogQHZhciBVVUFSVF9UOjpCVUZDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MzggIFVTQ0kgVHJhbnNtaXQvUmVjZWl2ZSBCdWZmZXIgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3XSAgICAgfFRYQ0xSICAgICB8Q2xlYXIgVHJhbnNtaXQgQnVmZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHRyYW5zbWl0IGJ1ZmZlciBpcyBjbGVhcmVkIChmaWxsaW5nIGxldmVsIGlzIGNsZWFyZWQgYW5kIG91dHB1dCBwb2ludGVyIGlzIHNldCB0byBpbnB1dCBwb2ludGVyIHZhbHVlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTaG91bGQgb25seSBiZSB1c2VkIHdoaWxlIHRoZSBidWZmZXIgaXMgbm90IHRha2luZyBwYXJ0IGluIGRhdGEgdHJhZmZpYy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJdCBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgb25lIFBDTEsgY3ljbGUuCisgICAgICogfFsxNF0gICAgfFJYT1ZJRU4gICB8UmVjZWl2ZSBCdWZmZXIgT3ZlcnJ1biBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBvdmVycnVuIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBvdmVycnVuIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTVdICAgIHxSWENMUiAgICAgfENsZWFyIFJlY2VpdmUgQnVmZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHJlY2VpdmUgYnVmZmVyIGlzIGNsZWFyZWQgKGZpbGxpbmcgbGV2ZWwgaXMgY2xlYXJlZCBhbmQgb3V0cHV0IHBvaW50ZXIgaXMgc2V0IHRvIGlucHV0IHBvaW50ZXIgdmFsdWUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNob3VsZCBvbmx5IGJlIHVzZWQgd2hpbGUgdGhlIGJ1ZmZlciBpcyBub3QgdGFraW5nIHBhcnQgaW4gZGF0YSB0cmFmZmljLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciBvbmUgUENMSyBjeWNsZS4KKyAgICAgKiB8WzE2XSAgICB8VFhSU1QgICAgIHxUcmFuc21pdCBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IHRoZSB0cmFuc21pdC1yZWxhdGVkIGNvdW50ZXJzLCBzdGF0ZSBtYWNoaW5lLCBhbmQgdGhlIGNvbnRlbnQgb2YgdHJhbnNtaXQgc2hpZnQgcmVnaXN0ZXIgYW5kIGRhdGEgYnVmZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciBvbmUgUENMSyBjeWNsZS4KKyAgICAgKiB8WzE3XSAgICB8UlhSU1QgICAgIHxSZWNlaXZlIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgdGhlIHJlY2VpdmUtcmVsYXRlZCBjb3VudGVycywgc3RhdGUgbWFjaGluZSwgYW5kIHRoZSBjb250ZW50IG9mIHJlY2VpdmUgc2hpZnQgcmVnaXN0ZXIgYW5kIGRhdGEgYnVmZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJdCBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgb25lIFBDTEsgY3ljbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEl0IGlzIHN1Z2dlc3QgdG8gY2hlY2sgdGhlIFJYQlVTWSAoVVVBUlRfUFJPVFNUU1sxMF0pIGJlZm9yZSB0aGlzIGJpdCB3aWxsIGJlIHNldCB0byAxLgorICAgICAqIEB2YXIgVVVBUlRfVDo6QlVGU1RTCisgICAgICogT2Zmc2V0OiAweDNDICBVU0NJIFRyYW5zbWl0L1JlY2VpdmUgQnVmZmVyIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFJYRU1QVFkgICB8UmVjZWl2ZSBCdWZmZXIgRW1wdHkgSW5kaWNhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgYnVmZmVyIGlzIG5vdCBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBidWZmZXIgaXMgZW1wdHkuCisgICAgICogfFsxXSAgICAgfFJYRlVMTCAgICB8UmVjZWl2ZSBCdWZmZXIgRnVsbCBJbmRpY2F0b3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBidWZmZXIgaXMgbm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgYnVmZmVyIGlzIGZ1bGwuCisgICAgICogfFszXSAgICAgfFJYT1ZJRiAgICB8UmVjZWl2ZSBCdWZmZXIgT3Zlci1ydW4gRXJyb3IgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IGEgcmVjZWl2ZSBidWZmZXIgb3ZlcnJ1biBlcnJvciBldmVudCBoYXMgYmVlbiBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBSWE9WSUVOIChVVUFSVF9CVUZDVExbMTRdKSBpcyBlbmFibGVkLCB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgcmVxdWVzdCBpcyBhY3RpdmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0ZXMgMSB0byB0aGlzIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQSByZWNlaXZlIGJ1ZmZlciBvdmVycnVuIGVycm9yIGV2ZW50IGhhcyBub3QgYmVlbiBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQSByZWNlaXZlIGJ1ZmZlciBvdmVycnVuIGVycm9yIGV2ZW50IGhhcyBiZWVuIGRldGVjdGVkLgorICAgICAqIHxbOF0gICAgIHxUWEVNUFRZICAgfFRyYW5zbWl0IEJ1ZmZlciBFbXB0eSBJbmRpY2F0b3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgYnVmZmVyIGlzIG5vdCBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgYnVmZmVyIGlzIGVtcHR5LgorICAgICAqIHxbOV0gICAgIHxUWEZVTEwgICAgfFRyYW5zbWl0IEJ1ZmZlciBGdWxsIEluZGljYXRvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBidWZmZXIgaXMgbm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IGJ1ZmZlciBpcyBmdWxsLgorICAgICAqIEB2YXIgVVVBUlRfVDo6UERNQUNUTAorICAgICAqIE9mZnNldDogMHg0MCAgVVNDSSBQRE1BIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQRE1BUlNUICAgfFBETUEgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCB0aGUgVVNDSSBQRE1BIGNvbnRyb2wgbG9naWMuIFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGF1dG9tYXRpY2FsbHkuCisgICAgICogfFsxXSAgICAgfFRYUERNQUVOICB8UERNQSBUcmFuc21pdCBDaGFubmVsIEF2YWlsYWJsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFJYUERNQUVOICB8UERNQSBSZWNlaXZlIENoYW5uZWwgQXZhaWxhYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgUERNQSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfFBETUFFTiAgICB8UERNQSBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUERNQSBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIEB2YXIgVVVBUlRfVDo6V0tDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NTQgIFVTQ0kgV2FrZS11cCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8V0tFTiAgICAgIHxXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxQREJPUFQgICAgfFBvd2VyIERvd24gQmxvY2tpbmcgT3B0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElmIHVzZXIgYXR0ZW1wdHMgdG8gZW50ZXIgUG93ZXItZG93biBtb2RlIGJ5IGV4ZWN1dGluZyBXRkkgd2hpbGUgdGhlIHByb3RvY29sIGlzIGluIHRyYW5zZmVycmluZywgTUNVIHdpbGwgc3RvcCB0aGUgdHJhbnNmZXIgYW5kIGVudGVyIFBvd2VyLWRvd24gbW9kZSBpbW1lZGlhdGVseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSWYgdXNlciBhdHRlbXB0cyB0byBlbnRlciBQb3dlci1kb3duIG1vZGUgYnkgZXhlY3V0aW5nIFdGSSB3aGlsZSB0aGUgcHJvdG9jb2wgaXMgaW4gdHJhbnNmZXJyaW5nLCB0aGUgb24tZ29pbmcgdHJhbnNmZXIgd2lsbCBub3QgYmUgc3RvcHBlZCBhbmQgTUNVIHdpbGwgZW50ZXIgaWRsZSBtb2RlIGltbWVkaWF0ZWx5LgorICAgICAqIEB2YXIgVVVBUlRfVDo6V0tTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NTggIFVTQ0kgV2FrZS11cCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxXS0YgICAgICAgfFdha2UtdXAgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gY2hpcCBpcyB3b2tlbiB1cCBmcm9tIFBvd2VyLWRvd24gbW9kZSwgdGhpcyBiaXQgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiBAdmFyIFVVQVJUX1Q6OlBST1RDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NUMgIFVTQ0kgUHJvdG9jb2wgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNUT1BCICAgICB8U3RvcCBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cyBpbiBhbiBVQVJUIGZyYW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgbnVtYmVyIG9mIHN0b3AgYml0cyBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgbnVtYmVyIG9mIHN0b3AgYml0cyBpcyAyLgorICAgICAqIHxbMV0gICAgIHxQQVJJVFlFTiAgfFBhcml0eSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyB0aGUgcGFyaXR5IGJpdCBpcyBlbmFibGVkIGluIGFuIFVBUlQgZnJhbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBwYXJpdHkgYml0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcGFyaXR5IGJpdCBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxFVkVOUEFSSVRZfEV2ZW4gUGFyaXR5IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT2RkIG51bWJlciBvZiBsb2dpYyAxJ3MgaXMgdHJhbnNtaXR0ZWQgYW5kIGNoZWNrZWQgaW4gZWFjaCB3b3JkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFdmVuIG51bWJlciBvZiBsb2dpYyAxJ3MgaXMgdHJhbnNtaXR0ZWQgYW5kIGNoZWNrZWQgaW4gZWFjaCB3b3JkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGhhcyBlZmZlY3Qgb25seSB3aGVuIFBBUklUWUVOIGlzIHNldC4KKyAgICAgKiB8WzNdICAgICB8UlRTQVVUT0VOIHxuUlRTIEF1dG8tZmxvdyBDb250cm9sIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIG5SVFMgYXV0by1mbG93IGlzIGVuYWJsZWQsIGlmIHRoZSByZWNlaXZlciBidWZmZXIgaXMgZnVsbCAoUlhGVUxMIChVVUFSVF9CVUZTVFNbMV0gPSAxKSksIHRoZSBVQVJUIHdpbGwgZGUtYXNzZXJ0IG5SVFMgc2lnbmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBuUlRTIGF1dG8tZmxvdyBjb250cm9sIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBuUlRTIGF1dG8tZmxvdyBjb250cm9sIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaGFzIGVmZmVjdCBvbmx5IHdoZW4gdGhlIFJUU0FVRElSRU4gaXMgbm90IHNldC4KKyAgICAgKiB8WzRdICAgICB8Q1RTQVVUT0VOIHxuQ1RTIEF1dG8tZmxvdyBDb250cm9sIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIG5DVFMgYXV0by1mbG93IGlzIGVuYWJsZWQsIHRoZSBVQVJUIHdpbGwgc2VuZCBkYXRhIHRvIGV4dGVybmFsIGRldmljZSB3aGVuIG5DVFMgaW5wdXQgYXNzZXJ0IChVQVJUIHdpbGwgbm90IHNlbmQgZGF0YSB0byBkZXZpY2UgaWYgbkNUUyBpbnB1dCBpcyBkaXMtYXNzZXJ0ZWQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBuQ1RTIGF1dG8tZmxvdyBjb250cm9sIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBuQ1RTIGF1dG8tZmxvdyBjb250cm9sIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfFJUU0FVRElSRU58blJUUyBBdXRvIERpcmVjdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBuUlRTIGF1dG8gZGlyZWN0aW9uIGlzIGVuYWJsZWQsIGlmIHRoZSB0cmFuc21pdHRlZCBieXRlcyBpbiB0aGUgVFggYnVmZmVyIGlzIGVtcHR5LCB0aGUgblJUUyBzaWduYWwgaXMgaW5hY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IG5SVFMgYXV0byBkaXJlY3Rpb24gY29udHJvbCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gblJUUyBhdXRvIGRpcmVjdGlvbiBjb250cm9sIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIHVzZWQgZm9yIG5SVFMgYXV0byBkaXJlY3Rpb24gY29udHJvbCBmb3IgUlM0ODUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGhhcyBlZmZlY3Qgb25seSB3aGVuIHRoZSBSVFNBVVRPRU4gaXMgbm90IHNldC4KKyAgICAgKiB8WzZdICAgICB8QUJSRU4gICAgIHxBdXRvLWJhdWQgUmF0ZSBEZXRlY3QgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvLWJhdWQgcmF0ZSBkZXRlY3QgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF1dG8tYmF1ZCByYXRlIGRldGVjdCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gdGhlIGF1dG8gLSBiYXVkIHJhdGUgZGV0ZWN0IG9wZXJhdGlvbiBmaW5pc2hlcywgaGFyZHdhcmUgd2lsbCBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYXNzb2NpYXRlZCBpbnRlcnJ1cHQgQUJSREVUSUYgKFVVQVJUX1BST1RTVFNbOV0pIHdpbGwgYmUgZ2VuZXJhdGVkIChJZiBBUkJJRU4gKFVVQVJUX1BST1RJRU4gWzFdKSBpcyBlbmFibGVkKS4KKyAgICAgKiB8WzldICAgICB8REFUV0tFTiAgIHxEYXRhIFdha2UtdXAgTW9kZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgd2FrZS11cCBtb2RlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEYXRhIHdha2UtdXAgbW9kZSBFbmFibGVkLgorICAgICAqIHxbMTBdICAgIHxDVFNXS0VOICAgfG5DVFMgV2FrZS11cCBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gbkNUUyB3YWtlLXVwIG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IG5DVFMgd2FrZS11cCBtb2RlIEVuYWJsZWQuCisgICAgICogfFsxNDoxMV0gfFdBS0VDTlQgICB8V2FrZS11cCBDb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBmaWVsZCBpbmRpY2F0ZSBob3cgbWFueSBjbG9jayBjeWNsZSBzZWxlY3RlZCBieSBmUERTX0NOVCBkbyB0aGUgc2xhdmUgY2FuIGdldCB0aGUgMXN0IGJpdCAoc3RhcnQgYml0KSB3aGVuIHRoZSBkZXZpY2UgaXMgd2FrZS11cCBmcm9tIFBvd2VyLWRvd24gbW9kZS4KKyAgICAgKiB8WzI0OjE2XSB8QlJERVRJVFYgIHxCYXVkIFJhdGUgRGV0ZWN0aW9uIEludGVydmFsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGRzIGluZGljYXRlIGhvdyBtYW55IGNsb2NrIGN5Y2xlIHNlbGVjdGVkIGJ5IFRNQ05UU1JDIChVVUFSVF9CUkdFTiBbNV0pIGRvZXMgdGhlIHNsYXZlIGNhbGN1bGF0ZXMgdGhlIGJhdWQgcmF0ZSBpbiBvbmUgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgb3JkZXIgb2YgdGhlIGJ1cyBzaGFsbCBiZSAxIGFuZCAwIHN0ZXAgYnkgc3RlcCAoZS5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8dGhlIGlucHV0IGRhdGEgcGF0dGVybiBzaGFsbCBiZSAweDU1KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB1c2VyIGNhbiByZWFkIHRoZSB2YWx1ZSB0byBrbm93IHRoZSBjdXJyZW50IGlucHV0IGJhdWQgcmF0ZSBvZiB0aGUgYnVzIHdoZW5ldmVyIHRoZSBBQlJERVRJRiAoVVVBUlRfUFJPVENUTFs5XSkgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIHRvIDAgYnkgc29mdHdhcmUgd3JpdGluZyAxIHRvIHRoZSBCUkRFVElUVi4KKyAgICAgKiB8WzI2XSAgICB8U1RJQ0tFTiAgIHxTdGljayBQYXJpdHkgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTdGljayBwYXJpdHkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0aWNrIHBhcml0eSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFJlZmVyIHRvIFJTLTQ4NSBTdXBwb3J0IHNlY3Rpb24gZm9yIGRldGFpbCBpbmZvcm1hdGlvbi4KKyAgICAgKiB8WzI5XSAgICB8QkNFTiAgICAgIHxUcmFuc21pdCBCcmVhayBDb250cm9sIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgQnJlYWsgQ29udHJvbCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgQnJlYWsgQ29udHJvbCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGxvZ2ljIDEsIHRoZSBzZXJpYWwgZGF0YSBvdXRwdXQgKFRYKSBpcyBmb3JjZWQgdG8gdGhlIFNwYWNpbmcgU3RhdGUgKGxvZ2ljIDApLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGFjdHMgb25seSBvbiBUWCBsaW5lIGFuZCBoYXMgbm8gZWZmZWN0IG9uIHRoZSB0cmFuc21pdHRlciBsb2dpYy4KKyAgICAgKiB8WzMxXSAgICB8UFJPVEVOICAgIHxVQVJUIFByb3RvY29sIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVCBQcm90b2NvbCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVCBQcm90b2NvbCBFbmFibGVkLgorICAgICAqIEB2YXIgVVVBUlRfVDo6UFJPVElFTgorICAgICAqIE9mZnNldDogMHg2MCAgVVNDSSBQcm90b2NvbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzFdICAgICB8QUJSSUVOICAgIHxBdXRvLWJhdWQgUmF0ZSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvLWJhdWQgcmF0ZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF1dG8tYmF1ZCByYXRlIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxSTFNJRU4gICAgfFJlY2VpdmUgTGluZSBTdGF0dXMgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBsaW5lIHN0YXR1cyBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgbGluZSBzdGF0dXMgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVVVBUlRfUFJPVFNUU1s3OjVdIGluZGljYXRlcyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgZXZlbnQgZm9yIHJlY2VpdmUgbGluZSBzdGF0dXMgaW50ZXJydXB0LgorICAgICAqIEB2YXIgVVVBUlRfVDo6UFJPVFNUUworICAgICAqIE9mZnNldDogMHg2NCAgVVNDSSBQcm90b2NvbCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxUWFNUSUYgICAgfFRyYW5zbWl0IFN0YXJ0IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEEgdHJhbnNtaXQgc3RhcnQgaW50ZXJydXB0IHN0YXR1cyBoYXMgbm90IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHRyYW5zbWl0IHN0YXJ0IGludGVycnVwdCBzdGF0dXMgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRpbmcgb25lIGludG8gdGhpcyBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFVzZWQgZm9yIHVzZXIgdG8gbG9hZCBuZXh0IHRyYW5zbWl0IGRhdGEgd2hlbiB0aGVyZSBpcyBubyBkYXRhIGluIHRyYW5zbWl0IGJ1ZmZlci4KKyAgICAgKiB8WzJdICAgICB8VFhFTkRJRiAgIHxUcmFuc21pdCBFbmQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQSB0cmFuc21pdCBlbmQgaW50ZXJydXB0IHN0YXR1cyBoYXMgbm90IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHRyYW5zbWl0IGVuZCBpbnRlcnJ1cHQgc3RhdHVzIGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRpbmcgb25lIGludG8gdGhpcyBiaXQuCisgICAgICogfFszXSAgICAgfFJYU1RJRiAgICB8UmVjZWl2ZSBTdGFydCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBIHJlY2VpdmUgc3RhcnQgaW50ZXJydXB0IHN0YXR1cyBoYXMgbm90IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHJlY2VpdmUgc3RhcnQgaW50ZXJydXB0IHN0YXR1cyBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0aW5nIG9uZSBpbnRvIHRoaXMgYml0LgorICAgICAqIHxbNF0gICAgIHxSWEVORElGICAgfFJlY2VpdmUgRW5kIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEEgcmVjZWl2ZSBmaW5pc2ggaW50ZXJydXB0IHN0YXR1cyBoYXMgbm90IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHJlY2VpdmUgZmluaXNoIGludGVycnVwdCBzdGF0dXMgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGluZyBvbmUgaW50byB0aGlzIGJpdC4KKyAgICAgKiB8WzVdICAgICB8UEFSSVRZRVJSIHxQYXJpdHkgRXJyb3IgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byBsb2dpYyAxIHdoZW5ldmVyIHRoZSByZWNlaXZlZCBjaGFyYWN0ZXIgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHBhcml0eSBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHBhcml0eSBlcnJvciBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBhcml0eSBlcnJvciBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGUgMSBhbW9uZyB0aGUgQlJFQUssIEZSTUVSUiBhbmQgUEFSSVRZRVJSIGJpdHMuCisgICAgICogfFs2XSAgICAgfEZSTUVSUiAgICB8RnJhbWluZyBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIGxvZ2ljIDEgd2hlbmV2ZXIgdGhlIHJlY2VpdmVkIGNoYXJhY3RlciBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgc3RvcCBiaXQgKHRoYXQgaXMsIHRoZSBzdG9wIGJpdCBmb2xsb3dpbmcgdGhlIGxhc3QgZGF0YSBiaXQgb3IgcGFyaXR5IGJpdCBpcyBkZXRlY3RlZCBhcyBsb2dpYyAwKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZnJhbWluZyBlcnJvciBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZyYW1pbmcgZXJyb3IgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRlIDEgYW1vbmcgdGhlIEJSRUFLLCBGUk1FUlIgYW5kIFBBUklUWUVSUiBiaXRzLgorICAgICAqIHxbN10gICAgIHxCUkVBSyAgICAgfEJyZWFrIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gbG9naWMgMSB3aGVuZXZlciB0aGUgcmVjZWl2ZWQgZGF0YSBpbnB1dCAoUlgpIGlzIGhlbGQgaW4gdGhlIHNwYWNpbmcgc3RhdGUgKGxvZ2ljIDApIGZvciBsb25nZXIgdGhhbiBhIGZ1bGwgd29yZCB0cmFuc21pc3Npb24gdGltZSAodGhhdCBpcywgdGhlIHRvdGFsIHRpbWUgb2Ygc3RhcnQgYml0ICsgZGF0YSBiaXRzICsgcGFyaXR5ICsgc3RvcCBiaXRzKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQnJlYWsgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcmVhayBpcyBnZW5lcmF0ZWQgaW4gdGhlIHJlY2VpdmVyIGJ1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0ZSAxIGFtb25nIHRoZSBCUkVBSywgRlJNRVJSIGFuZCBQQVJJVFlFUlIgYml0cy4KKyAgICAgKiB8WzldICAgICB8QUJSREVUSUYgIHxBdXRvLWJhdWQgUmF0ZSBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIGF1dG8tYmF1ZCByYXRlIGRldGVjdGlvbiBpcyBkb25lIGFtb25nIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgdGhlIGlucHV0IGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIEFCUklFTiAoVVVBUlRfUFJPVENUTFs2XSkgaXMgc2V0LCB0aGUgYXV0by1iYXVkIHJhdGUgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNhbiBiZSBzZXQgNCB0aW1lcyB3aGVuIHRoZSBpbnB1dCBkYXRhIHBhdHRlcm4gaXMgMHg1NSBhbmQgaXQgaXMgY2xlYXJlZCBiZWZvcmUgdGhlIG5leHQgZmFsbGluZyBlZGdlIG9mIHRoZSBpbnB1dCBidXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8tYmF1ZCByYXRlIGRldGVjdCBmdW5jdGlvbiBpcyBub3QgZG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT25lIEJpdCBhdXRvLWJhdWQgcmF0ZSBkZXRlY3QgZnVuY3Rpb24gaXMgZG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxMF0gICAgfFJYQlVTWSAgICB8UlggQnVzIFN0YXR1cyBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoZSBidXN5IHN0YXR1cyBvZiB0aGUgcmVjZWl2ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSByZWNlaXZlciBpcyBJZGxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVjZWl2ZXIgaXMgQlVTWS4KKyAgICAgKiB8WzExXSAgICB8QUJFUlJTVFMgIHxBdXRvLWJhdWQgUmF0ZSBFcnJvciBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiBhdXRvLWJhdWQgcmF0ZSBkZXRlY3Rpb24gY291bnRlciBvdmVycnVuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGF1dG8tYmF1ZCByYXRlIGNvdW50ZXIgb3ZlcnJ1biwgdGhlIHVzZXIgc2hhbGwgcmV2aXNlIHRoZSBDTEtESVYgKFVVQVJUX0JSR0VOWzI1OjE2XSkgdmFsdWUgYW5kIGVuYWJsZSBBQlJFTiAoVVVBUlRfUFJPVENUTFs2XSkgdG8gZGV0ZWN0IHRoZSBjb3JyZWN0IGJhdWQgcmF0ZSBhZ2Fpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXV0by1iYXVkIHJhdGUgZGV0ZWN0IGNvdW50ZXIgaXMgbm90IG92ZXJydW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF1dG8tYmF1ZCByYXRlIGRldGVjdCBjb3VudGVyIGlzIG92ZXJydW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIHNldCBhdCB0aGUgc2FtZSB0aW1lIG9mIEFCUkRFVElGLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gQUJSREVUSUYgb3IgQUJFUlJTVFMuCisgICAgICogfFsxNl0gICAgfENUU1NZTkNMViB8bkNUUyBTeW5jaHJvbml6ZWQgTGV2ZWwgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgdXNlZCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGludGVybmFsIHN5bmNocm9uaXplZCBuQ1RTIHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGludGVybmFsIHN5bmNocm9uaXplZCBuQ1RTIGlzIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGludGVybmFsIHN5bmNocm9uaXplZCBuQ1RTIGlzIGhpZ2guCisgICAgICogfFsxN10gICAgfENUU0xWICAgICB8bkNUUyBQaW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgdXNlZCB0byBtb25pdG9yIHRoZSBjdXJyZW50IHN0YXR1cyBvZiBuQ1RTIHBpbiBpbnB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gbkNUUyBwaW4gaW5wdXQgaXMgbG93IGxldmVsIHZvbHRhZ2UgbG9naWMgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IG5DVFMgcGluIGlucHV0IGlzIGhpZ2ggbGV2ZWwgdm9sdGFnZSBsb2dpYyBzdGF0ZS4KKyAgICAgKi8KKworICAgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIFVTQ0kgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVEVOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBVU0NJIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCUkdFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gVVNDSSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTBbMV07CisgICAgX19JTyB1aW50MzJfdCBEQVRJTjA7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gVVNDSSBJbnB1dCBEYXRhIFNpZ25hbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbM107CisgICAgX19JTyB1aW50MzJfdCBDVExJTjA7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyMF0gVVNDSSBJbnB1dCBDb250cm9sIFNpZ25hbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTJbMV07CisgICAgX19JTyB1aW50MzJfdCBDTEtJTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyOF0gVVNDSSBJbnB1dCBDbG9jayBTaWduYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTElORUNUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMmNdIFVTQ0kgTGluZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX08gIHVpbnQzMl90IFRYREFUOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDMwXSBVU0NJIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSWERBVDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzNF0gVVNDSSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQlVGQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMzhdIFVTQ0kgVHJhbnNtaXQvUmVjZWl2ZSBCdWZmZXIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEJVRlNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDNjXSBVU0NJIFRyYW5zbWl0L1JlY2VpdmUgQnVmZmVyIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQRE1BQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA0MF0gVVNDSSBQRE1BIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTNbNF07CisgICAgX19JTyB1aW50MzJfdCBXS0NUTDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA1NF0gVVNDSSBXYWtlLXVwIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgV0tTVFM7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNThdIFVTQ0kgV2FrZS11cCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBST1RDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDVjXSBVU0NJIFByb3RvY29sIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQUk9USUVOOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA2MF0gVVNDSSBQcm90b2NvbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFJPVFNUUzsgICAgICAgICAgICAgICAvKiE8IFsweDAwNjRdIFVTQ0kgUHJvdG9jb2wgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBVVUFSVF9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBVVUFSVF9DT05TVCBVVUFSVCBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBVVUFSVCBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFVVQVJUX0NUTF9GVU5NT0RFX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpDVEw6IEZVTk1PREUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVVUFSVF9DVExfRlVOTU9ERV9Nc2sgICAgICAgICAgICAoMHg3dWwgPDwgVVVBUlRfQ1RMX0ZVTk1PREVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6Q1RMOiBGVU5NT0RFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9JTlRFTl9UWFNUSUVOX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6SU5URU46IFRYU1RJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfSU5URU5fVFhTVElFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0lOVEVOX1RYU1RJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OklOVEVOOiBUWFNUSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfSU5URU5fVFhFTkRJRU5fUG9zICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OklOVEVOOiBUWEVORElFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX0lOVEVOX1RYRU5ESUVOX01zayAgICAgICAgICgweDF1bCA8PCBVVUFSVF9JTlRFTl9UWEVORElFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpJTlRFTjogVFhFTkRJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0lOVEVOX1JYU1RJRU5fUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpJTlRFTjogUlhTVElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVVUFSVF9JTlRFTl9SWFNUSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfSU5URU5fUlhTVElFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6SU5URU46IFJYU1RJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9JTlRFTl9SWEVORElFTl9Qb3MgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6SU5URU46IFJYRU5ESUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfSU5URU5fUlhFTkRJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0lOVEVOX1JYRU5ESUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OklOVEVOOiBSWEVORElFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQlJHRU5fUkNMS1NFTF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJSR0VOOiBSQ0xLU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVVQVJUX0JSR0VOX1JDTEtTRUxfTXNrICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9CUkdFTl9SQ0xLU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCUkdFTjogUkNMS1NFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0JSR0VOX1BUQ0xLU0VMX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCUkdFTjogUFRDTEtTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9CUkdFTl9QVENMS1NFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfQlJHRU5fUFRDTEtTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlJHRU46IFBUQ0xLU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9CUkdFTl9TUENMS1NFTF9Qb3MgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlJHRU46IFNQQ0xLU0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQlJHRU5fU1BDTEtTRUxfTXNrICAgICAgICAgKDB4M3VsIDw8IFVVQVJUX0JSR0VOX1NQQ0xLU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJSR0VOOiBTUENMS1NFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQlJHRU5fVE1DTlRFTl9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJSR0VOOiBUTUNOVEVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVVQVJUX0JSR0VOX1RNQ05URU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9CUkdFTl9UTUNOVEVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCUkdFTjogVE1DTlRFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0JSR0VOX1RNQ05UU1JDX1BvcyAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCUkdFTjogVE1DTlRTUkMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9CUkdFTl9UTUNOVFNSQ19Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfQlJHRU5fVE1DTlRTUkNfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlJHRU46IFRNQ05UU1JDIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9CUkdFTl9QRFNDTlRfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlJHRU46IFBEU0NOVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQlJHRU5fUERTQ05UX01zayAgICAgICAgICAgKDB4M3VsIDw8IFVVQVJUX0JSR0VOX1BEU0NOVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJSR0VOOiBQRFNDTlQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQlJHRU5fRFNDTlRfUG9zICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJSR0VOOiBEU0NOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVVQVJUX0JSR0VOX0RTQ05UX01zayAgICAgICAgICAgICgweDFmdWwgPDwgVVVBUlRfQlJHRU5fRFNDTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCUkdFTjogRFNDTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0JSR0VOX0NMS0RJVl9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCUkdFTjogQ0xLRElWIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVVUFSVF9CUkdFTl9DTEtESVZfTXNrICAgICAgICAgICAoMHgzZmZ1bCA8PCBVVUFSVF9CUkdFTl9DTEtESVZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlJHRU46IENMS0RJViBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9EQVRJTjBfU1lOQ1NFTF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6REFUSU4wOiBTWU5DU0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfREFUSU4wX1NZTkNTRUxfTXNrICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0RBVElOMF9TWU5DU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkRBVElOMDogU1lOQ1NFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfREFUSU4wX0lOSU5WX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkRBVElOMDogSU5JTlYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVVQVJUX0RBVElOMF9JTklOVl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9EQVRJTjBfSU5JTlZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpEQVRJTjA6IElOSU5WIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0RBVElOMF9FREdFREVUX1BvcyAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpEQVRJTjA6IEVER0VERVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9EQVRJTjBfRURHRURFVF9Nc2sgICAgICAgICAoMHgzdWwgPDwgVVVBUlRfREFUSU4wX0VER0VERVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6REFUSU4wOiBFREdFREVUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9DVExJTjBfU1lOQ1NFTF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6Q1RMSU4wOiBTWU5DU0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQ1RMSU4wX1NZTkNTRUxfTXNrICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0NUTElOMF9TWU5DU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkNUTElOMDogU1lOQ1NFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQ1RMSU4wX0lOSU5WX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkNUTElOMDogSU5JTlYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVVQVJUX0NUTElOMF9JTklOVl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9DVExJTjBfSU5JTlZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpDVExJTjA6IElOSU5WIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0NMS0lOX1NZTkNTRUxfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpDTEtJTjogU1lOQ1NFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVVUFSVF9DTEtJTl9TWU5DU0VMX01zayAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfQ0xLSU5fU1lOQ1NFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6Q0xLSU46IFNZTkNTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9MSU5FQ1RMX0xTQl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6TElORUNUTDogTFNCIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfTElORUNUTF9MU0JfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0xJTkVDVExfTFNCX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkxJTkVDVEw6IExTQiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfTElORUNUTF9EQVRPSU5WX1BvcyAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkxJTkVDVEw6IERBVE9JTlYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVVQVJUX0xJTkVDVExfREFUT0lOVl9Nc2sgICAgICAgICgweDF1bCA8PCBVVUFSVF9MSU5FQ1RMX0RBVE9JTlZfUG9zKSAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpMSU5FQ1RMOiBEQVRPSU5WIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0xJTkVDVExfQ1RMT0lOVl9Qb3MgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpMSU5FQ1RMOiBDVExPSU5WIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVVUFSVF9MSU5FQ1RMX0NUTE9JTlZfTXNrICAgICAgICAoMHgxdWwgPDwgVVVBUlRfTElORUNUTF9DVExPSU5WX1BvcykgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6TElORUNUTDogQ1RMT0lOViBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9MSU5FQ1RMX0RXSURUSF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6TElORUNUTDogRFdJRFRIIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfTElORUNUTF9EV0lEVEhfTXNrICAgICAgICAgKDB4ZnVsIDw8IFVVQVJUX0xJTkVDVExfRFdJRFRIX1BvcykgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkxJTkVDVEw6IERXSURUSCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfVFhEQVRfVFhEQVRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlRYREFUOiBUWERBVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVVQVJUX1RYREFUX1RYREFUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBVVUFSVF9UWERBVF9UWERBVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpUWERBVDogVFhEQVQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1JYREFUX1JYREFUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpSWERBVDogUlhEQVQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVVUFSVF9SWERBVF9SWERBVF9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgVVVBUlRfUlhEQVRfUlhEQVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UlhEQVQ6IFJYREFUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9CVUZDVExfVFhDTFJfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGQ1RMOiBUWENMUiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQlVGQ1RMX1RYQ0xSX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0JVRkNUTF9UWENMUl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRkNUTDogVFhDTFIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQlVGQ1RMX1JYT1ZJRU5fUG9zICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRkNUTDogUlhPVklFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX0JVRkNUTF9SWE9WSUVOX01zayAgICAgICAgICgweDF1bCA8PCBVVUFSVF9CVUZDVExfUlhPVklFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZDVEw6IFJYT1ZJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0JVRkNUTF9SWENMUl9Qb3MgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZDVEw6IFJYQ0xSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVVUFSVF9CVUZDVExfUlhDTFJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfQlVGQ1RMX1JYQ0xSX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGQ1RMOiBSWENMUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9CVUZDVExfVFhSU1RfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGQ1RMOiBUWFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQlVGQ1RMX1RYUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0JVRkNUTF9UWFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRkNUTDogVFhSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQlVGQ1RMX1JYUlNUX1BvcyAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRkNUTDogUlhSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVVQVJUX0JVRkNUTF9SWFJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9CVUZDVExfUlhSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZDVEw6IFJYUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0JVRlNUU19SWEVNUFRZX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZTVFM6IFJYRU1QVFkgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9CVUZTVFNfUlhFTVBUWV9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfQlVGU1RTX1JYRU1QVFlfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGU1RTOiBSWEVNUFRZIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9CVUZTVFNfUlhGVUxMX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGU1RTOiBSWEZVTEwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQlVGU1RTX1JYRlVMTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0JVRlNUU19SWEZVTExfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRlNUUzogUlhGVUxMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQlVGU1RTX1JYT1ZJRl9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRlNUUzogUlhPVklGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVVQVJUX0JVRlNUU19SWE9WSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9CVUZTVFNfUlhPVklGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZTVFM6IFJYT1ZJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0JVRlNUU19UWEVNUFRZX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZTVFM6IFRYRU1QVFkgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9CVUZTVFNfVFhFTVBUWV9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfQlVGU1RTX1RYRU1QVFlfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGU1RTOiBUWEVNUFRZIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9CVUZTVFNfVFhGVUxMX1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGU1RTOiBUWEZVTEwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQlVGU1RTX1RYRlVMTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0JVRlNUU19UWEZVTExfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRlNUUzogVFhGVUxMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUERNQUNUTF9QRE1BUlNUX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBETUFDVEw6IFBETUFSU1QgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVVQVJUX1BETUFDVExfUERNQVJTVF9Nc2sgICAgICAgICgweDF1bCA8PCBVVUFSVF9QRE1BQ1RMX1BETUFSU1RfUG9zKSAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQRE1BQ1RMOiBQRE1BUlNUIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BETUFDVExfVFhQRE1BRU5fUG9zICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQRE1BQ1RMOiBUWFBETUFFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBVVUFSVF9QRE1BQ1RMX1RYUERNQUVOX01zayAgICAgICAoMHgxdWwgPDwgVVVBUlRfUERNQUNUTF9UWFBETUFFTl9Qb3MpICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UERNQUNUTDogVFhQRE1BRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QRE1BQ1RMX1JYUERNQUVOX1BvcyAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UERNQUNUTDogUlhQRE1BRU4gUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVVVBUlRfUERNQUNUTF9SWFBETUFFTl9Nc2sgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BETUFDVExfUlhQRE1BRU5fUG9zKSAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBETUFDVEw6IFJYUERNQUVOIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUERNQUNUTF9QRE1BRU5fUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBETUFDVEw6IFBETUFFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX1BETUFDVExfUERNQUVOX01zayAgICAgICAgICgweDF1bCA8PCBVVUFSVF9QRE1BQ1RMX1BETUFFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQRE1BQ1RMOiBQRE1BRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1dLQ1RMX1dLRU5fUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpXS0NUTDogV0tFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVVUFSVF9XS0NUTF9XS0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfV0tDVExfV0tFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6V0tDVEw6IFdLRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9XS0NUTF9QREJPUFRfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6V0tDVEw6IFBEQk9QVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfV0tDVExfUERCT1BUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1dLQ1RMX1BEQk9QVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OldLQ1RMOiBQREJPUFQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfV0tTVFNfV0tGX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OldLU1RTOiBXS0YgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVVQVJUX1dLU1RTX1dLRl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9XS1NUU19XS0ZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpXS1NUUzogV0tGIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RDVExfU1RPUEJfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBTVE9QQiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX1NUT1BCX01zayAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVENUTF9TVE9QQl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogU1RPUEIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX1BBUklUWUVOX1BvcyAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogUEFSSVRZRU4gUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9QQVJJVFlFTl9Nc2sgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RDVExfUEFSSVRZRU5fUG9zKSAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IFBBUklUWUVOIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9FVkVOUEFSSVRZX1BvcyAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IEVWRU5QQVJJVFkgUG9zaXRpb24gICovCisjZGVmaW5lIFVVQVJUX1BST1RDVExfRVZFTlBBUklUWV9Nc2sgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UQ1RMX0VWRU5QQVJJVFlfUG9zKSAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBFVkVOUEFSSVRZIE1hc2sgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RDVExfUlRTQVVUT0VOX1BvcyAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBSVFNBVVRPRU4gUG9zaXRpb24gICAqLworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX1JUU0FVVE9FTl9Nc2sgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVENUTF9SVFNBVVRPRU5fUG9zKSAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogUlRTQVVUT0VOIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX0NUU0FVVE9FTl9Qb3MgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogQ1RTQVVUT0VOIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9DVFNBVVRPRU5fTXNrICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RDVExfQ1RTQVVUT0VOX1BvcykgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IENUU0FVVE9FTiBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9SVFNBVURJUkVOX1BvcyAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IFJUU0FVRElSRU4gUG9zaXRpb24gICovCisjZGVmaW5lIFVVQVJUX1BST1RDVExfUlRTQVVESVJFTl9Nc2sgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UQ1RMX1JUU0FVRElSRU5fUG9zKSAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBSVFNBVURJUkVOIE1hc2sgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RDVExfQUJSRU5fUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBBQlJFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX0FCUkVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVENUTF9BQlJFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogQUJSRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX0RBVFdLRU5fUG9zICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogREFUV0tFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9EQVRXS0VOX01zayAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RDVExfREFUV0tFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IERBVFdLRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9DVFNXS0VOX1BvcyAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IENUU1dLRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RDVExfQ1RTV0tFTl9Nc2sgICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UQ1RMX0NUU1dLRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBDVFNXS0VOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RDVExfV0FLRUNOVF9Qb3MgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBXQUtFQ05UIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX1dBS0VDTlRfTXNrICAgICAgICAoMHhmdWwgPDwgVVVBUlRfUFJPVENUTF9XQUtFQ05UX1BvcykgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogV0FLRUNOVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX0JSREVUSVRWX1BvcyAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogQlJERVRJVFYgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9CUkRFVElUVl9Nc2sgICAgICAgKDB4MWZmdWwgPDwgVVVBUlRfUFJPVENUTF9CUkRFVElUVl9Qb3MpICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IEJSREVUSVRWIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9TVElDS0VOX1BvcyAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IFNUSUNLRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RDVExfU1RJQ0tFTl9Nc2sgICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UQ1RMX1NUSUNLRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBTVElDS0VOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RDVExfQkNFTl9Qb3MgICAgICAgICAgICgyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBCQ0VOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX0JDRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVENUTF9CQ0VOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogQkNFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX1BST1RFTl9Qb3MgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogUFJPVEVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9QUk9URU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RDVExfUFJPVEVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IFBST1RFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVElFTl9BQlJJRU5fUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RJRU46IEFCUklFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RJRU5fQUJSSUVOX01zayAgICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9USUVOX0FCUklFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9USUVOOiBBQlJJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RJRU5fUkxTSUVOX1BvcyAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9USUVOOiBSTFNJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9USUVOX1JMU0lFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVElFTl9STFNJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVElFTjogUkxTSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UU1RTX1RYU1RJRl9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogVFhTVElGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19UWFNUSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RTVFNfVFhTVElGX1BvcykgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IFRYU1RJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19UWEVORElGX1BvcyAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IFRYRU5ESUYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfVFhFTkRJRl9Nc2sgICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UU1RTX1RYRU5ESUZfUG9zKSAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBUWEVORElGIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfUlhTVElGX1BvcyAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBSWFNUSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UU1RTX1JYU1RJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVFNUU19SWFNUSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogUlhTVElGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UU1RTX1JYRU5ESUZfUG9zICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogUlhFTkRJRiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19SWEVORElGX01zayAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RTVFNfUlhFTkRJRl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IFJYRU5ESUYgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19QQVJJVFlFUlJfUG9zICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IFBBUklUWUVSUiBQb3NpdGlvbiAgICovCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfUEFSSVRZRVJSX01zayAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UU1RTX1BBUklUWUVSUl9Qb3MpICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBQQVJJVFlFUlIgTWFzayAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfRlJNRVJSX1BvcyAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBGUk1FUlIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UU1RTX0ZSTUVSUl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVFNUU19GUk1FUlJfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogRlJNRVJSIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UU1RTX0JSRUFLX1BvcyAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogQlJFQUsgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19CUkVBS19Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RTVFNfQlJFQUtfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IEJSRUFLIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19BQlJERVRJRl9Qb3MgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IEFCUkRFVElGIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfQUJSREVUSUZfTXNrICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UU1RTX0FCUkRFVElGX1BvcykgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBBQlJERVRJRiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfUlhCVVNZX1BvcyAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBSWEJVU1kgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UU1RTX1JYQlVTWV9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVFNUU19SWEJVU1lfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogUlhCVVNZIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UU1RTX0FCRVJSU1RTX1BvcyAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogQUJFUlJTVFMgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19BQkVSUlNUU19Nc2sgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RTVFNfQUJFUlJTVFNfUG9zKSAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IEFCRVJSU1RTIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19DVFNTWU5DTFZfUG9zICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IENUU1NZTkNMViBQb3NpdGlvbiAgICovCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfQ1RTU1lOQ0xWX01zayAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UU1RTX0NUU1NZTkNMVl9Qb3MpICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBDVFNTWU5DTFYgTWFzayAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfQ1RTTFZfUG9zICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBDVFNMViBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UU1RTX0NUU0xWX01zayAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVFNUU19DVFNMVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogQ1RTTFYgTWFzayAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBVVUFSVF9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgVVVBUlQgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKyNlbmRpZiAvKiBfX1VVQVJUX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS93ZHRfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvd2R0X3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOWE4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvd2R0X3JlZy5oCkBAIC0wLDAgKzEsMTc0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgd2R0X3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBXRFQgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fV0RUX1JFR19IX18KKyNkZWZpbmUgX19XRFRfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhdGNoIERvZyBUaW1lciBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgV0RUIFdhdGNoIERvZyBUaW1lciBDb250cm9sbGVyKFdEVCkKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgV0RUIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgV0RUX1Q6OkNUTAorICAgICAqIE9mZnNldDogMHgwMCAgV0RUIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxSU1RFTiAgICAgfFdEVCBUaW1lLW91dCBSZXNldCBFbmFibGUgQ29udHJvbCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXR0aW5nIHRoaXMgYml0IHdpbGwgZW5hYmxlIHRoZSBXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGZ1bmN0aW9uIElmIHRoZSBXRFQgdXAgY291bnRlciB2YWx1ZSBoYXMgbm90IGJlZW4gY2xlYXJlZCBhZnRlciB0aGUgc3BlY2lmaWMgV0RUIHJlc2V0IGRlbGF5IHBlcmlvZCBleHBpcmVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsyXSAgICAgfFJTVEYgICAgICB8V0RUIFRpbWUtb3V0IFJlc2V0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIHN5c3RlbSBoYXMgYmVlbiByZXNldCBieSBXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGV2ZW50IG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV0RUIHRpbWUtb3V0IHJlc2V0IHN5c3RlbSBldmVudCBkaWQgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGV2ZW50IGhhcyBiZWVuIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbM10gICAgIHxJRiAgICAgICAgfFdEVCBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgc2V0IHRvIDEgd2hpbGUgV0RUIHVwIGNvdW50ZXIgdmFsdWUgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgV0RUIHRpbWUtb3V0IGludGVydmFsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdEVCB0aW1lLW91dCBpbnRlcnJ1cHQgZXZlbnQgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdEVCB0aW1lLW91dCBpbnRlcnJ1cHQgaW50ZXJydXB0IGV2ZW50IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNF0gICAgIHxXS0VOICAgICAgfFdEVCBUaW1lLW91dCBXYWtlLXVwIEZ1bmN0aW9uIENvbnRyb2wgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHdoaWxlIFdEVCB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyBJRiAoV0RUX0NUTFszXSkgaXMgZ2VuZXJhdGVkIHRvIDEgYW5kIGludGVycnVwdCBlbmFibGUgYml0IElOVEVOIChXRFRfQ1RMWzZdKSBpcyBlbmFibGVkLCB0aGUgV0RUIHRpbWUtb3V0IGludGVycnVwdCBzaWduYWwgd2lsbCBnZW5lcmF0ZSBhIGV2ZW50IHRvIHRyaWdnZXIgQ1BVIHdha2UtdXAgdHJpZ2dlciBldmVudCB0byBjaGlwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmlnZ2VyIHdXYWtlLXVwIHRyaWdnZXIgZXZlbnQgZnVuY3Rpb24gRGlzYWJsZWQgaWYgV0RUIHRpbWUtb3V0IGludGVycnVwdCBzaWduYWwgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmlnZ2VyIFdha2UtdXAgdHJpZ2dlciBldmVudCBmdW5jdGlvbiBFbmFibGVkIGlmIFdEVCB0aW1lLW91dCBpbnRlcnJ1cHQgc2lnbmFsIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IENoaXAgY2FuIGJlIHdva2VuLXVwIGJ5IHdoaWxlIFdEVCB0aW1lLW91dCBpbnRlcnJ1cHQgc2lnbmFsIGdlbmVyYXRlZCBvbmx5IGlmIFdEVCBjbG9jayBzb3VyY2UgaXMgc2VsZWN0ZWQgdG8gMTAga0h6IChMSVJDICgxMCBrSHopIG9yIExYVCAoMzIga0h6KS4KKyAgICAgKiB8WzVdICAgICB8V0tGICAgICAgIHxXRFQgVGltZS1vdXQgV2FrZS11cCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgV0RUIHRpbWUtb3V0IGV2ZW50IGhhcyB0cmlnZ2VyZWQgaW50ZXJydXB0IGNoaXAgd2FrZS11cCBvciBub3QuZmxhZyBzdGF0dXMgb2YgV0RUCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdEVCBkb2VzIG5vdCBjYXVzZSBjaGlwIHdha2UtdXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoaXAgd2FrZS11cCBmcm9tIElkbGUgb3IgUG93ZXItZG93biBtb2RlIGlmIHdoZW4gV0RUIHRpbWUtb3V0IGludGVycnVwdCBzaWduYWwgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs2XSAgICAgfElOVEVOICAgICB8V0RUIFRpbWUtb3V0IEludGVycnVwdCBFbmFibGUgQ29udHJvbCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBlbmFibGVkLCB3aGVuIFdEVCB0aW1lLW91dCBldmVudCBvY2N1cnMsIHRoZSBJRiAoV0RUX0NUTFszXSkgd2lsbCBiZSBzZXQgdG8gMSBhbmQgdGhlIFdEVCB0aW1lLW91dCBpbnRlcnJ1cHQgc2lnbmFsIGlzIGdlbmVyYXRlZCBhbmQgaW5mb3JtIHRvIENQVS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV0RUIHRpbWUtb3V0IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV0RUIHRpbWUtb3V0IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbN10gICAgIHxXRFRFTiAgICAgfFdEVCBFbmFibGUgQ29udHJvbCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2V0IFdEVCBjb3VudGVyIHN0b3AgRGlzYWJsZWQsIGFuZCAoVGhpcyBhY3Rpb24gd2lsbCByZXNldCB0aGUgaW50ZXJuYWwgdXAgY291bnRlciB2YWx1ZSB3aWxsIGJlIHJlc2V0IGFsc28pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXQgV0RUIGNvdW50ZXIgc3RhcnQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFBlcmZvcm0gZW5hYmxlIG9yIGRpc2FibGUgV0RURU4gYml0IG5lZWRzIDIgKiBXRFRfQ0xLIHBlcmlvZCB0byBiZWNvbWUgYWN0aXZlLCB1c2VyIGNhbiByZWFkIFNZTkMgKFdEVF9DVExbMzBdKSB0byBjaGVjayBlbmFibGUvZGlzYWJsZSBjb21tYW5kIGlzIGNvbXBsZXRlZCBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTMyOiBJZiBDV0RURU5bMjowXSAoY29tYmluZWQgYnkgd2l0aCBDb25maWcwWzMxXSBhbmQgQ29uZmlnMFs0OjNdKSBiaXRzIGlzIG5vdCBjb25maWd1cmUgdG8gMHgxMTEsIHRoaXMgYml0IGlzIGZvcmNlZCBhcyAxIGFuZCB1c2VyIGNhbm5vdCBjaGFuZ2UgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogVGhpcyBiaXQgZGlzYWJsZWQgbmVlZHMgMiAqIFdEVF9DTEsuCisgICAgICogfFsxMDo4XSAgfFRPVVRTRUwgICB8V0RUIFRpbWUtb3V0IEludGVydmFsIFNlbGVjdGlvbiAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSB0aHJlZSBiaXRzIHNlbGVjdCB0aGUgdGltZS1vdXQgaW50ZXJ2YWwgcGVyaW9kIGFmdGVyIGZvciB0aGUgV0RUIHN0YXJ0cyBjb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSAyNCAqIFdEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gMjYgKiBXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IDI4ICogV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSAyMTAgKiBXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IDIxMiAqIFdEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gMjE0ICogV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSAyMTYgKiBXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IDIxOCAqIFdEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFszMF0gICAgfFNZTkMgICAgICB8V0RUIEVuYWJsZSBDb250cm9sIFNZTkMgU1lOQyBGbGFnIEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHVzZSB0byBzeW5jaHJvbml6YXRpb24sIHNvZnR3YXJlIGVyIGNhbiBjaGVjayBleGVjdXRlIGVuYWJsZS9kaXNhYmxlIHRoaXMgZmxhZyBhZnRlciBlbmFibGUgV0RURU4gKFdEVF9DVExbN10pLCB0aGlzIGZsYWcgY2FuIGJlIGluZGljYXRlZCBlbmFibGUvZGlzYWJsZSBXRFRFTiBmdW5jdGlvbiBpcyBiZWNvbWUgY29tcGxldGVkIG9yIG5vdCBhY3RpdmUgb3Igbm90Li4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTWU5DIGRlbGF5IGlzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNldCBXRFRFTiBiaXQgaXMgV0RUIGVuYWJsZSBjb250cm9sIHN5bmNjb21wbGV0ZWRocm9uaXppbmcgaXMgY29tcGxldGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0IFdEVEVOIGJpdCBXRFQgZW5hYmxlIGNvbnRyb2wgaXMgc3luY2hyb25pemluZyBhbmQgbm90IGJlY29tZSBhY3RpdmUgeWV0Li4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBQZXJmb3JtIGVuYWJsZSBvciBkaXNhYmxlIFdEVEVOIGJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZWQgbmVlZHMgMiAqIFdEVF9DTEsgcGVyaW9kIHRvIGJlY29tZSBhY3RpdmUuCisgICAgICogfFszMV0gICAgfElDRURFQlVHICB8SUNFIERlYnVnIE1vZGUgQWNrbm93bGVkZ2UgRGlzYWJsZSBDb250cm9sIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJQ0UgZGVidWcgbW9kZSBhY2tub3dsZWRnbWVudCBhZmZlY3RzIFdEVCBjb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXRFQgdXAgY291bnRlciB3aWxsIGJlIGhlbGQgd2hpbGUgQ1BVIGlzIGhlbGQgYnkgSUNFLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJQ0UgZGVidWcgbW9kZSBhY2tub3dsZWRnbWVudCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXRFQgdXAgY291bnRlciB3aWxsIGtlZXAgZ29pbmcgbm8gbWF0dGVyIENQVSBpcyBoZWxkIGJ5IElDRSBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBXRFRfVDo6QUxUQ1RMCisgICAgICogT2Zmc2V0OiAweDA0ICBXRFQgQWx0ZXJuYXRpdmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfFJTVERTRUwgICB8V0RUIFJlc2V0IERlbGF5IFBlcmlvZCBTZWxlY3Rpb24gKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBXRFQgdGltZS1vdXQgZXZlbnQgaGFwcGVuZWQsIHVzZXIgaGFzIGEgdGltZSBuYW1lZCBXRFQgUmVzZXQgRGVsYXkgUGVyaW9kIHRvIGNsZWFyIGV4ZWN1dGUgV0RUIGNvdW50ZXIgYnkgc2V0dGluZyBSU1RDTlQgKFdEVF9DVExbMF0pIHJlc2V0IHRvIHByZXZlbnQgV0RUIHRpbWUtb3V0IHJlc2V0IHN5c3RlbSBvY2N1cnJlZCBoYXBwZW5lZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHNlbGVjdCBhIHN1aXRhYmxlIHNldHRpbmcgb2YgUlNURFNFTCBmb3IgZGlmZmVyZW50IGFwcGxpY2F0aW9uIHByb2dyYW0gV0RUIFJlc2V0IERlbGF5IFBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFdEVCBSZXNldCBEZWxheSBQZXJpb2QgaXMgMTAyNiAqIFdEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBXRFQgUmVzZXQgRGVsYXkgUGVyaW9kIGlzIDEzMCAqIFdEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBXRFQgUmVzZXQgRGVsYXkgUGVyaW9kIGlzIDE4ICogV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFdEVCBSZXNldCBEZWxheSBQZXJpb2QgaXMgMyAqIFdEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIHJlZ2lzdGVyIHdpbGwgYmUgcmVzZXQgdG8gMCBpZiBXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGV2ZW50IG9jY3VycmVkIGhhcHBlbmVkLgorICAgICAqIEB2YXIgV0RUX1Q6OlJTVENOVAorICAgICAqIE9mZnNldDogMHgwOCAgV0RUIFJlc2V0IENvdW50ZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxSU1RDTlQgICAgfFdEVCBSZXNldCBDb3VudGVyIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyAweDAwMDA1QUE1IHRvIHRoaXMgcmVnaXN0ZXIgZmllbGQgd2lsbCByZXNldCB0aGUgaW50ZXJuYWwgMTgtYml0IFdEVCB1cCBjb3VudGVyIHZhbHVlIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBXRFRfUlNUQ05UIGlzIG5vdCB3cml0ZSBwcm90ZWN0ZWQsIGJ1dCB0aGlzIFJTVENOVCAoV0RUX0NUTFswXSkgaXMgd3JpdGUgcHJvdGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFBlcmZvcm0gUlNUQ05UIHRvIHJlc2V0IGNvdW50ZXIgbmVlZHMgMiAqIFdEVF9DTEsgcGVyaW9kIHRvIGJlY29tZSBhY3RpdmUuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEw7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gV0RUIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUxUQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIFdEVCBBbHRlcm5hdGl2ZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX08gIHVpbnQzMl90IFJTVENOVDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBXRFQgUmVzZXQgQ291bnRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gV0RUX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIFdEVF9DT05TVCBXRFQgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgV0RUIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgV0RUX0NUTF9SU1RFTl9Qb3MgICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IFJTVEVOIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFdEVF9DVExfUlNURU5fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBXRFRfQ1RMX1JTVEVOX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBSU1RFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdEVF9DVExfUlNURl9Qb3MgICAgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBSU1RGIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBXRFRfQ1RMX1JTVEZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgV0RUX0NUTF9SU1RGX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogUlNURiBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBXRFRfQ1RMX0lGX1BvcyAgICAgICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogSUYgUG9zaXRpb24gICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0RUX0NUTF9JRl9Nc2sgICAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFdEVF9DVExfSUZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IElGIE1hc2sgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgV0RUX0NUTF9XS0VOX1BvcyAgICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IFdLRU4gUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFdEVF9DVExfV0tFTl9Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBXRFRfQ1RMX1dLRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBXS0VOIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdEVF9DVExfV0tGX1BvcyAgICAgICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBXS0YgUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBXRFRfQ1RMX1dLRl9Nc2sgICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgV0RUX0NUTF9XS0ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogV0tGIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBXRFRfQ1RMX0lOVEVOX1BvcyAgICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogSU5URU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0RUX0NUTF9JTlRFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFdEVF9DVExfSU5URU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IElOVEVOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgV0RUX0NUTF9XRFRFTl9Qb3MgICAgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IFdEVEVOIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFdEVF9DVExfV0RURU5fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBXRFRfQ1RMX1dEVEVOX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBXRFRFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdEVF9DVExfVE9VVFNFTF9Qb3MgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBUT1VUU0VMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBXRFRfQ1RMX1RPVVRTRUxfTXNrICAgICAgICAgICAgICAoMHg3dWwgPDwgV0RUX0NUTF9UT1VUU0VMX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogVE9VVFNFTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBXRFRfQ1RMX1NZTkNfUG9zICAgICAgICAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogU1lOQyBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0RUX0NUTF9TWU5DX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFdEVF9DVExfU1lOQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IFNZTkMgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgV0RUX0NUTF9JQ0VERUJVR19Qb3MgICAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IElDRURFQlVHIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFdEVF9DVExfSUNFREVCVUdfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBXRFRfQ1RMX0lDRURFQlVHX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBJQ0VERUJVRyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdEVF9BTFRDVExfUlNURFNFTF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6QUxUQ1RMOiBSU1REU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBXRFRfQUxUQ1RMX1JTVERTRUxfTXNrICAgICAgICAgICAoMHgzdWwgPDwgV0RUX0FMVENUTF9SU1REU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkFMVENUTDogUlNURFNFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBXRFRfUlNUQ05UX1JTVENOVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OlJTVENOVDogUlNUQ05UIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgV0RUX1JTVENOVF9SU1RDTlRfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBXRFRfUlNUQ05UX1JTVENOVF9Qb3MpICAgICAgICAgICAvKiE8IFdEVF9UOjpSU1RDTlQ6IFJTVENOVCBNYXNrICAgICAgICAgICAgICovCisKKworLyoqQH0qLyAvKiBXRFRfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFdEVCByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworI2VuZGlmIC8qIF9fV0RUX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS93d2R0X3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3d3ZHRfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4MGEyNgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS93d2R0X3JlZy5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgd3dkdF9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgV1dEVCByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19XV0RUX1JFR19IX18KKyNkZWZpbmUgX19XV0RUX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXaW5kb3cgV2F0Y2hkb2cgVGltZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBXV0RUIFdpbmRvdyBXYXRjaGRvZyBUaW1lcihXV0RUKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBXV0RUIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgV1dEVF9UOjpSTERDTlQKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIFdXRFQgUmVsb2FkIENvdW50ZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxSTERDTlQgICAgfFdXRFQgUmVsb2FkIENvdW50ZXIgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIG9ubHkgMHgwMDAwNUFBNSB0byB0aGlzIHJlZ2lzdGVyIHdpbGwgcmVsb2FkIHRoZSBXV0RUIGNvdW50ZXIgdmFsdWUgdG8gMHgzRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVXNlciBjYW4gb25seSB3cml0ZSBleGVjdXRlIFdXRFRfUkxEQ05UIHJlZ2lzdGVyIHRvIHRoZSByZWxvYWQgV1dEVCBjb3VudGVyIHZhbHVlIGNvbW1hbmQgd2hlbiBjdXJyZW50IGN1cnJlbnQgV1dEVCBjb3VudGVyIHZhbHVlIENOVERBVCAoV1dEVF9DTlRbNTowXSkgaXMgYmV0d2VlbiAxMCBhbmQgQ01QREFUIChXV0RUX0NUTFsyMToxNl0pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdXNlciB3cml0ZXMgMHgwMDAwNUFBNSBpbiBXV0RUX1JMRENOVCByZWdpc3RlciB3aGVuIGN1cnJlbnQgY3VycmVudCBDTlREQVRXV0RUIGNvdW50ZXIgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gQ01QREFULCBXV0RUIHJlc2V0IHNpZ25hbCBzeXN0ZW0gZXZlbnQgd2lsbCBiZSBnZW5lcmF0ZWQgaW1tZWRpYXRlbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEV4ZWN1dGUgV1dEVCBjb3VudGVyIHJlbG9hZCBhbHdheXMgbmVlZHMgKFdXRFRfQ0xLICozKSBwZXJpb2QgdG8gcmVsb2FkIENOVERBVCB0byAweDNGIGFuZCBpbnRlcm5hbCBwcmVzY2FsZSBjb3VudGVyIHdpbGwgYmUgcmVzZXQgYWxzby4KKyAgICAgKiBAdmFyIFdXRFRfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDA0ICBXV0RUIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxXV0RURU4gICAgfFdXRFQgRW5hYmxlIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRoaXMgYml0IHRvIGVuYWJsZSBzdGFydCBXV0RUIGNvdW50ZXIgY291bnRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdXRFQgY291bnRlciBpcyBzdG9wcGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXV0RUIGNvdW50ZXIgaXMgc3RhcnRpbmcgY291bnRpbmcuCisgICAgICogfFsxXSAgICAgfElOVEVOICAgICB8V1dEVCBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgZW5hYmxlZCwgd2hlbiBXV0RUSUYgKFdXRFRfU1RBVFVTWzBdKSBpcyBzZXQgdG8gMSwgdGhlIFdXRFQgY291bnRlciBjb21wYXJlIG1hdGNoIGludGVycnVwdCBzaWduYWwgaXMgZ2VuZXJhdGVkIGFuZCBpbmZvcm0gdG8gQ1BVLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXV0RUIGNvdW50ZXIgY29tcGFyZSBtYXRjaCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdXRFQgY291bnRlciBjb21wYXJlIG1hdGNoIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTE6OF0gIHxQU0NTRUwgICAgfFdXRFQgQ291bnRlciBQcmVzY2FsZSBQZXJpb2QgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IFByZS1zY2FsZSBpcyAxOyBNYXggdGltZS1vdXQgcGVyaW9kIGlzIDEgKiA2NCAqIFdXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBQcmUtc2NhbGUgaXMgMjsgTWF4IHRpbWUtb3V0IHBlcmlvZCBpcyAyICogNjQgKiBXV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gUHJlLXNjYWxlIGlzIDQ7IE1heCB0aW1lLW91dCBwZXJpb2QgaXMgNCAqIDY0ICogV1dEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IFByZS1zY2FsZSBpcyA4OyBNYXggdGltZS1vdXQgcGVyaW9kIGlzIDggKiA2NCAqIFdXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSBQcmUtc2NhbGUgaXMgMTY7IE1heCB0aW1lLW91dCBwZXJpb2QgaXMgMTYgKiA2NCAqIFdXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBQcmUtc2NhbGUgaXMgMzI7IE1heCB0aW1lLW91dCBwZXJpb2QgaXMgMzIgKiA2NCAqIFdXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBQcmUtc2NhbGUgaXMgNjQ7IE1heCB0aW1lLW91dCBwZXJpb2QgaXMgNjQgKiA2NCAqIFdXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBQcmUtc2NhbGUgaXMgMTI4OyBNYXggdGltZS1vdXQgcGVyaW9kIGlzIDEyOCAqIDY0ICogV1dEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IFByZS1zY2FsZSBpcyAxOTI7IE1heCB0aW1lLW91dCBwZXJpb2QgaXMgMTkyICogNjQgKiBXV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gUHJlLXNjYWxlIGlzIDI1NjsgTWF4IHRpbWUtb3V0IHBlcmlvZCBpcyAyNTYgKiA2NCAqIFdXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTAgPSBQcmUtc2NhbGUgaXMgMzg0OyBNYXggdGltZS1vdXQgcGVyaW9kIGlzIDM4NCAqIDY0ICogV1dEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMSA9IFByZS1zY2FsZSBpcyA1MTI7IE1heCB0aW1lLW91dCBwZXJpb2QgaXMgNTEyICogNjQgKiBXV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAwID0gUHJlLXNjYWxlIGlzIDc2ODsgTWF4IHRpbWUtb3V0IHBlcmlvZCBpcyA3NjggKiA2NCAqIFdXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDEgPSBQcmUtc2NhbGUgaXMgMTAyNDsgTWF4IHRpbWUtb3V0IHBlcmlvZCBpcyAxMDI0ICogNjQgKiBXV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEwID0gUHJlLXNjYWxlIGlzIDE1MzY7IE1heCB0aW1lLW91dCBwZXJpb2QgaXMgMTUzNiAqIDY0ICogV1dEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMSA9IFByZS1zY2FsZSBpcyAyMDQ4OyBNYXggdGltZS1vdXQgcGVyaW9kIGlzIDIwNDggKiA2NCAqIFdXRFRfQ0xLLgorICAgICAqIHxbMjE6MTZdIHxDTVBEQVQgICAgfFdXRFQgV2luZG93IENvbXBhcmUgUmVnaXN0ZXIgVmFsdWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyByZWdpc3RlciBmaWVsZCB0byBhZGp1c3QgdGhlIHZhbGlkIHJlbG9hZCB3aW5kb3cgaW50ZXJ2YWwgd2hlbiBXV0RUSUYgKFdXRFRfU1RBVFVTWzBdKSBpcyBnZW5lcmF0ZWQuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFVzZXIgY2FuIG9ubHkgd3JpdGUgV1dEVF9STERDTlQgcmVnaXN0ZXIgdG8gcmVsb2FkIFdXRFQgY291bnRlciB2YWx1ZSB3aGVuIGN1cnJlbnQgV1dEVCBDTlREQVQgKFdXRFRfQ05UWzU6XSkgaXMgY291bnRlciB2YWx1ZSBiZXR3ZWVuIDEwIGFuZCBDTVBEQVQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB1c2VyIHdyaXRlcyAweDAwMDA1QUE1IGluIFdXRFRfUkxEQ05UIHJlZ2lzdGVyIHdoZW4gY3VycmVudCBXV0RUIGNvdW50ZXIgdmFsdWUgQ05UREFUIGlzIGxhcmdlciB0aGFuIENNUERBVCwgV1dEVCByZXNldCBzeXN0ZW0gZXZlbnQgc2lnbmFsIHdpbGwgYmUgZ2VuZXJhdGVkIGltbWVkaWF0ZWx5LgorICAgICAqIHxbMzFdICAgIHxJQ0VERUJVRyAgfElDRSBEZWJ1ZyBNb2RlIEFja25vd2xlZGdlIERpc2FibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJQ0UgZGVidWcgbW9kZSBhY2tub3dsZWRnbWVudCBlZmZlY3RzIFdXRFQgY291bnRlciBjb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXV0RUIGRvd24gY291bnRlciB3aWxsIGJlIGhlbGQgd2hpbGUgQ1BVIGlzIGhlbGQgYnkgSUNFLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJQ0UgZGVidWcgbW9kZSBhY2tub3dsZWRnbWVudCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXV0RUIGRvd24gY291bnRlciB3aWxsIGtlZXAgZ29pbmcgY291bnRpbmcgbm8gbWF0dGVyIENQVSBpcyBoZWxkIGJ5IElDRSBvciBub3QuCisgICAgICogQHZhciBXV0RUX1Q6OlNUQVRVUworICAgICAqIE9mZnNldDogMHgwOCAgV1dEVCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxXV0RUSUYgICAgfFdXRFQgQ29tcGFyZSBNYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgdGhhdCBjdXJyZW50IENOVERBVCAoV1dEVF9DTlRbNTowXSkgbWF0Y2hlcyB0aGUgQ01QREFUIChXV0RUX0NUTFsyMToxNl0paW50ZXJydXB0IGZsYWcgc3RhdHVzIG9mIFdXRFQgd2hpbGUgV1dEVCBjb3VudGVyIHZhbHVlIG1hdGNoZXMgQ01QREFUIChXV0RUX0NUTFsyMToxNl0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdXRFQgV1dEVCBDTlREQVQgY291bnRlciB2YWx1ZSBtYXRjaGVzIHRoZSBDTVBEQVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxXSAgICAgfFdXRFRSRiAgICB8V1dEVCBUaW1lci1vdXQgUmVzZXQgU3lzdGVtIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgaXQgVGhpcyBiaXQgaW5kaWNhdGVzIHRoZSB0aGF0IHN5c3RlbSBoYXMgYmVlbiByZXNldCBieSBXV0RUIGNvdW50ZXIgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGV2ZW50Lm9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV1dEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gZXZlbnQgZGlkIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV1dEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gZXZlbnQgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogQHZhciBXV0RUX1Q6OkNOVAorICAgICAqIE9mZnNldDogMHgwQyAgV1dEVCBDb3VudGVyIFZhbHVlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzU6MF0gICB8Q05UREFUICAgIHxXV0RUIENvdW50ZXIgVmFsdWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTlREQVQgd2lsbCBiZSB1cGRhdGVkIGNvbnRpbnVvdXNseSB0byBtb25pdG9yIDYtYml0IFdXRFQgZG93biBjb3VudGVyIHZhbHVlLgorICAgICAqLworICAgIF9fTyAgdWludDMyX3QgUkxEQ05UOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIFdXRFQgUmVsb2FkIENvdW50ZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBXV0RUIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTVEFUVVM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gV1dEVCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQ05UOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIFdXRFQgQ291bnRlciBWYWx1ZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBXV0RUX1Q7CisKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgV1dEVF9DT05TVCBXV0RUIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFdXRFQgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBXV0RUX1JMRENOVF9STERDTlRfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV1dEVF9UOjpSTERDTlQ6IFJMRENOVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgV1dEVF9STERDTlRfUkxEQ05UX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBXV0RUX1JMRENOVF9STERDTlRfUG9zKSAgICAgICAgICAvKiE8IFdXRFRfVDo6UkxEQ05UOiBSTERDTlQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgV1dEVF9DVExfV1dEVEVOX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdXRFRfVDo6Q1RMOiBXV0RURU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFdXRFRfQ1RMX1dXRFRFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBXV0RUX0NUTF9XV0RURU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBXV0RUX1Q6OkNUTDogV1dEVEVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdXRFRfQ1RMX0lOVEVOX1BvcyAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXV0RUX1Q6OkNUTDogSU5URU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBXV0RUX0NUTF9JTlRFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgV1dEVF9DVExfSU5URU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgV1dEVF9UOjpDVEw6IElOVEVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBXV0RUX0NUTF9QU0NTRUxfUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV1dEVF9UOjpDVEw6IFBTQ1NFTCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgV1dEVF9DVExfUFNDU0VMX01zayAgICAgICAgICAgICAgKDB4ZnVsIDw8IFdXRFRfQ1RMX1BTQ1NFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFdXRFRfVDo6Q1RMOiBQU0NTRUwgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgV1dEVF9DVExfQ01QREFUX1BvcyAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdXRFRfVDo6Q1RMOiBDTVBEQVQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFdXRFRfQ1RMX0NNUERBVF9Nc2sgICAgICAgICAgICAgICgweDNmdWwgPDwgV1dEVF9DVExfQ01QREFUX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBXV0RUX1Q6OkNUTDogQ01QREFUIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdXRFRfQ1RMX0lDRURFQlVHX1BvcyAgICAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXV0RUX1Q6OkNUTDogSUNFREVCVUcgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBXV0RUX0NUTF9JQ0VERUJVR19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgV1dEVF9DVExfSUNFREVCVUdfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgV1dEVF9UOjpDVEw6IElDRURFQlVHIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBXV0RUX1NUQVRVU19XV0RUSUZfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV1dEVF9UOjpTVEFUVVM6IFdXRFRJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgV1dEVF9TVEFUVVNfV1dEVElGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFdXRFRfU1RBVFVTX1dXRFRJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFdXRFRfVDo6U1RBVFVTOiBXV0RUSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgV1dEVF9TVEFUVVNfV1dEVFJGX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdXRFRfVDo6U1RBVFVTOiBXV0RUUkYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFdXRFRfU1RBVFVTX1dXRFRSRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBXV0RUX1NUQVRVU19XV0RUUkZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBXV0RUX1Q6OlNUQVRVUzogV1dEVFJGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFdXRFRfQ05UX0NOVERBVF9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXV0RUX1Q6OkNOVDogQ05UREFUIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBXV0RUX0NOVF9DTlREQVRfTXNrICAgICAgICAgICAgICAoMHgzZnVsIDw8IFdXRFRfQ05UX0NOVERBVF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgV1dEVF9UOjpDTlQ6IENOVERBVCBNYXNrICAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBXV0RUX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBXV0RUIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisjZW5kaWYgLyogX19XV0RUX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2FjbXAuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2FjbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTg5NmI4Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvYWNtcC5oCkBAIC0wLDAgKzEsMzg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgQUNNUC5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBTZXJpZXMgQUNNUCBEcml2ZXIgSGVhZGVyIEZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQUNNUF9IX18KKyNkZWZpbmUgX19BQ01QX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQUNNUF9Ecml2ZXIgQUNNUCBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIEFDTVBfRVhQT1JURURfQ09OU1RBTlRTIEFDTVAgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogQUNNUF9DVEwgY29uc3RhbnQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBBQ01QX0NUTF9GSUxUU0VMX09GRiAgICAgICAgICgwVUwgPDwgMTMpIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3IgZmlsdGVyIGZ1bmN0aW9uIGRpc2FibGVkLiAqLworI2RlZmluZSBBQ01QX0NUTF9GSUxUU0VMXzFQQ0xLICAgICAgICgxVUwgPDwgMTMpIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3IgMSBQQ0xLIGZpbHRlciBjb3VudC4gKi8KKyNkZWZpbmUgQUNNUF9DVExfRklMVFNFTF8yUENMSyAgICAgICAoMlVMIDw8IDEzKSAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIDIgUENMSyBmaWx0ZXIgY291bnQuICovCisjZGVmaW5lIEFDTVBfQ1RMX0ZJTFRTRUxfNFBDTEsgICAgICAgKDNVTCA8PCAxMykgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciA0IFBDTEsgZmlsdGVyIGNvdW50LiAqLworI2RlZmluZSBBQ01QX0NUTF9GSUxUU0VMXzhQQ0xLICAgICAgICg0VUwgPDwgMTMpIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3IgOCBQQ0xLIGZpbHRlciBjb3VudC4gKi8KKyNkZWZpbmUgQUNNUF9DVExfRklMVFNFTF8xNlBDTEsgICAgICAoNVVMIDw8IDEzKSAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIDE2IFBDTEsgZmlsdGVyIGNvdW50LiAqLworI2RlZmluZSBBQ01QX0NUTF9GSUxUU0VMXzMyUENMSyAgICAgICg2VUwgPDwgMTMpIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3IgMzIgUENMSyBmaWx0ZXIgY291bnQuICovCisjZGVmaW5lIEFDTVBfQ1RMX0ZJTFRTRUxfNjRQQ0xLICAgICAgKDdVTCA8PCAxMykgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciA2NCBQQ0xLIGZpbHRlciBjb3VudC4gKi8KKyNkZWZpbmUgQUNNUF9DVExfSU5UUE9MX1JGICAgICAgICAgICAoMFVMIDw8IDgpICAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIHNlbGVjdGluZyByaXNpbmcgZWRnZSBhbmQgZmFsbGluZyBlZGdlIGFzIGludGVycnVwdCBjb25kaXRpb24uICovCisjZGVmaW5lIEFDTVBfQ1RMX0lOVFBPTF9SICAgICAgICAgICAgKDFVTCA8PCA4KSAgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciBzZWxlY3RpbmcgcmlzaW5nIGVkZ2UgYXMgaW50ZXJydXB0IGNvbmRpdGlvbi4gKi8KKyNkZWZpbmUgQUNNUF9DVExfSU5UUE9MX0YgICAgICAgICAgICAoMlVMIDw8IDgpICAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIHNlbGVjdGluZyBmYWxsaW5nIGVkZ2UgYXMgaW50ZXJydXB0IGNvbmRpdGlvbi4gKi8KKyNkZWZpbmUgQUNNUF9DVExfUE9TU0VMX1AwICAgICAgICAgICAoMFVMIDw8IDYpICAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIHNlbGVjdGluZyBBQ01QeF9QMCBwaW4gYXMgdGhlIHNvdXJjZSBvZiBBQ01QIFYrLiAqLworI2RlZmluZSBBQ01QX0NUTF9QT1NTRUxfUDEgICAgICAgICAgICgxVUwgPDwgNikgIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3Igc2VsZWN0aW5nIEFDTVB4X1AxIHBpbiBhcyB0aGUgc291cmNlIG9mIEFDTVAgVisuICovCisjZGVmaW5lIEFDTVBfQ1RMX1BPU1NFTF9QMiAgICAgICAgICAgKDJVTCA8PCA2KSAgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciBzZWxlY3RpbmcgQUNNUHhfUDIgcGluIGFzIHRoZSBzb3VyY2Ugb2YgQUNNUCBWKy4gKi8KKyNkZWZpbmUgQUNNUF9DVExfUE9TU0VMX1AzICAgICAgICAgICAoM1VMIDw8IDYpICAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIHNlbGVjdGluZyBBQ01QeF9QMyBwaW4gYXMgdGhlIHNvdXJjZSBvZiBBQ01QIFYrLiAqLworI2RlZmluZSBBQ01QX0NUTF9ORUdTRUxfUElOICAgICAgICAgICgwVUwgPDwgNCkgIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3Igc2VsZWN0aW5nIHRoZSB2b2x0YWdlIG9mIEFDTVAgbmVnYXRpdmUgaW5wdXQgcGluIGFzIHRoZSBzb3VyY2Ugb2YgQUNNUCBWLS4gKi8KKyNkZWZpbmUgQUNNUF9DVExfTkVHU0VMX0NSViAgICAgICAgICAoMVVMIDw8IDQpICAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIHNlbGVjdGluZyBpbnRlcm5hbCBjb21wYXJhdG9yIHJlZmVyZW5jZSB2b2x0YWdlIGFzIHRoZSBzb3VyY2Ugb2YgQUNNUCBWLS4gKi8KKyNkZWZpbmUgQUNNUF9DVExfTkVHU0VMX1ZCRyAgICAgICAgICAoMlVMIDw8IDQpICAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIHNlbGVjdGluZyBpbnRlcm5hbCBCYW5kLWdhcCB2b2x0YWdlIGFzIHRoZSBzb3VyY2Ugb2YgQUNNUCBWLS4gKi8KKyNkZWZpbmUgQUNNUF9DVExfTkVHU0VMX0RBQyAgICAgICAgICAoM1VMIDw8IDQpICAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIHNlbGVjdGluZyBEQUMgb3V0cHV0IHZvbHRhZ2UgYXMgdGhlIHNvdXJjZSBvZiBBQ01QIFYtLiAqLworI2RlZmluZSBBQ01QX0NUTF9IWVNURVJFU0lTXzMwTVYgICAgICgzVUwgPDwgMjQpIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3IgZW5hYmxpbmcgdGhlIGh5c3RlcmVzaXMgZnVuY3Rpb24gYXQgMzBtVi4gKi8KKyNkZWZpbmUgQUNNUF9DVExfSFlTVEVSRVNJU18yME1WICAgICAoMlVMIDw8IDI0KSAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIGVuYWJsaW5nIHRoZSBoeXN0ZXJlc2lzIGZ1bmN0aW9uIGF0IDIwbVYuICovCisjZGVmaW5lIEFDTVBfQ1RMX0hZU1RFUkVTSVNfMTBNViAgICAgKDFVTCA8PCAyNCkgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciBlbmFibGluZyB0aGUgaHlzdGVyZXNpcyBmdW5jdGlvbiBhdCAxMG1WLiAqLworI2RlZmluZSBBQ01QX0NUTF9IWVNURVJFU0lTX0RJU0FCTEUgICgwVUwgPDwgMikgIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3IgZGlzYWJsaW5nIHRoZSBoeXN0ZXJlc2lzIGZ1bmN0aW9uLiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBBQ01QX1ZSRUYgY29uc3RhbnQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEFDTVBfVlJFRl9DUlZTU0VMX1ZEREEgICAgICAgKDBVTCA8PCA2KSAgLyohPCBBQ01QX1ZSRUYgc2V0dGluZyBmb3Igc2VsZWN0aW5nIGFuYWxvZyBzdXBwbHkgdm9sdGFnZSBWRERBIGFzIHRoZSBDUlYgc291cmNlIHZvbHRhZ2UgKi8KKyNkZWZpbmUgQUNNUF9WUkVGX0NSVlNTRUxfSU5UVlJFRiAgICAoMVVMIDw8IDYpICAvKiE8IEFDTVBfVlJFRiBzZXR0aW5nIGZvciBzZWxlY3RpbmcgaW50ZXJuYWwgcmVmZXJlbmNlIHZvbHRhZ2UgYXMgdGhlIENSViBzb3VyY2Ugdm9sdGFnZSAqLworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQUNNUF9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgQUNNUF9FWFBPUlRFRF9GVU5DVElPTlMgQUNNUCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBEZWZpbmUgTWFjcm9zIGFuZCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBvdXRwdXQgaW52ZXJzZSBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2V0IEFDTVBPSU5WIGJpdCBvZiBBQ01QX0NUTCByZWdpc3RlciB0byBlbmFibGUgb3V0cHV0IGludmVyc2UgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIEFDTVBfRU5BQkxFX09VVFBVVF9JTlZFUlNFKGFjbXAsIHUzMkNoTnVtKSAoKGFjbXApLT5DVExbKHUzMkNoTnVtKV0gfD0gQUNNUF9DVExfQUNNUE9JTlZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgb3V0cHV0IGludmVyc2UgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIEFDTVBPSU5WIGJpdCBvZiBBQ01QX0NUTCByZWdpc3RlciB0byBkaXNhYmxlIG91dHB1dCBpbnZlcnNlIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBBQ01QX0RJU0FCTEVfT1VUUFVUX0lOVkVSU0UoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSAmPSB+QUNNUF9DVExfQUNNUE9JTlZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNlbGVjdCBBQ01QIG5lZ2F0aXZlIGlucHV0IHNvdXJjZQorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcGFyYW1baW5dIHUzMlNyYyBpcyBjb21wYXJhdG9yIG5lZ2F0aXZlIGlucHV0IHNlbGVjdGlvbi4gSW5jbHVkaW5nOgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX05FR1NFTF9QSU4KKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9ORUdTRUxfQ1JWCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfTkVHU0VMX1ZCRworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX05FR1NFTF9EQUMKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2V0IE5FR1NFTCAoQUNNUF9DVExbNTo0XSkgdG8gZGV0ZXJtaW5lIHRoZSBzb3VyY2Ugb2YgbmVnYXRpdmUgaW5wdXQuCisgICovCisjZGVmaW5lIEFDTVBfU0VUX05FR19TUkMoYWNtcCwgdTMyQ2hOdW0sIHUzMlNyYykgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldID0gKChhY21wKS0+Q1RMWyh1MzJDaE51bSldICYgfkFDTVBfQ1RMX05FR1NFTF9Nc2spIHwgKHUzMlNyYykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIGh5c3RlcmVzaXMgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiBOb25lCisgICovCisjZGVmaW5lIEFDTVBfRU5BQkxFX0hZU1RFUkVTSVMoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSB8PSBBQ01QX0NUTF9IWVNURVJFU0lTXzMwTVYpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBoeXN0ZXJlc2lzIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgSFlTU0VMIG9mIEFDTVBfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgaHlzdGVyZXNpcyBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgQUNNUF9ESVNBQkxFX0hZU1RFUkVTSVMoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSAmPSB+QUNNUF9DVExfSFlTU0VMX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZWxlY3QgaHlzdGVyZXNpcyBsZXZlbAorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcGFyYW1baW5dIHUzMkh5c1NlbCBUaGUgaHlzdGVyZXNpcyBmdW5jdGlvbiBvcHRpb24uIEluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9IWVNURVJFU0lTXzMwTVYKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9IWVNURVJFU0lTXzIwTVYKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9IWVNURVJFU0lTXzEwTVYKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9IWVNURVJFU0lTX0RJU0FCTEUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KKyNkZWZpbmUgQUNNUF9DT05GSUdfSFlTVEVSRVNJUyhhY21wLCB1MzJDaE51bSwgdTMySHlzU2VsKSAoKGFjbXApLT5DVExbKHUzMkNoTnVtKV0gPSAoKGFjbXApLT5DVExbKHUzMkNoTnVtKV0gJiB+QUNNUF9DVExfSFlTU0VMX01zaykgfCAodTMySHlzU2VsKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgaW50ZXJydXB0CisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgQUNNUElFIGJpdCBvZiBBQ01QX0NUTCByZWdpc3RlciB0byBlbmFibGUgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqICAgICAgICAgIElmIHdha2UtdXAgZnVuY3Rpb24gaXMgZW5hYmxlZCwgdGhlIHdha2UtdXAgaW50ZXJydXB0IHdpbGwgYmUgZW5hYmxlZCBhcyB3ZWxsLgorICAqLworI2RlZmluZSBBQ01QX0VOQUJMRV9JTlQoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSB8PSBBQ01QX0NUTF9BQ01QSUVfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgaW50ZXJydXB0CisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBBQ01QSUUgYml0IG9mIEFDTVBfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBBQ01QX0RJU0FCTEVfSU5UKGFjbXAsIHUzMkNoTnVtKSAoKGFjbXApLT5DVExbKHUzMkNoTnVtKV0gJj0gfkFDTVBfQ1RMX0FDTVBJRV9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIEFDTVAKKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBBQ01QRU4gYml0IG9mIEFDTVBfQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBhbmFsb2cgY29tcGFyYXRvci4KKyAgKi8KKyNkZWZpbmUgQUNNUF9FTkFCTEUoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSB8PSBBQ01QX0NUTF9BQ01QRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgQUNNUAorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgY2xlYXIgQUNNUEVOIGJpdCBvZiBBQ01QX0NUTCByZWdpc3RlciB0byBkaXNhYmxlIGFuYWxvZyBjb21wYXJhdG9yLgorICAqLworI2RlZmluZSBBQ01QX0RJU0FCTEUoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSAmPSB+QUNNUF9DVExfQUNNUEVOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgQUNNUCBvdXRwdXQgdmFsdWUKKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiAgQUNNUCBvdXRwdXQgdmFsdWUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgcmV0dXJuIHRoZSBBQ01QIG91dHB1dCB2YWx1ZS4KKyAgKi8KKyNkZWZpbmUgQUNNUF9HRVRfT1VUUFVUKGFjbXAsIHUzMkNoTnVtKSAoKChhY21wKS0+U1RBVFVTICYgKEFDTVBfU1RBVFVTX0FDTVBPMF9Nc2s8PCgodTMyQ2hOdW0pKSkpPzE6MCkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgQUNNUCBpbnRlcnJ1cHQgZmxhZworICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuICAgQUNNUCBpbnRlcnJ1cHQgb2NjdXJyZWQgKDEpIG9yIG5vdCAoMCkKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgcmV0dXJuIHRoZSBBQ01QIGludGVycnVwdCBmbGFnLgorICAqLworI2RlZmluZSBBQ01QX0dFVF9JTlRfRkxBRyhhY21wLCB1MzJDaE51bSkgKCgoYWNtcCktPlNUQVRVUyAmIChBQ01QX1NUQVRVU19BQ01QSUYwX01zazw8KCh1MzJDaE51bSkpKSk/MTowKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNsZWFyIEFDTVAgaW50ZXJydXB0IGZsYWcKKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiAgIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgd3JpdGUgMSB0byBBQ01QSUZuIGJpdCBvZiBBQ01QX1NUQVRVUyByZWdpc3RlciB0byBjbGVhciBpbnRlcnJ1cHQgZmxhZy4KKyAgKi8KKyNkZWZpbmUgQUNNUF9DTFJfSU5UX0ZMQUcoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPlNUQVRVUyA9IChBQ01QX1NUQVRVU19BQ01QSUYwX01zazw8KCh1MzJDaE51bSkpKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjbGVhciBBQ01QIHdha2UtdXAgaW50ZXJydXB0IGZsYWcKKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiAgIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgd3JpdGUgMSB0byBXS0lGbiBiaXQgb2YgQUNNUF9TVEFUVVMgcmVnaXN0ZXIgdG8gY2xlYXIgaW50ZXJydXB0IGZsYWcuCisgICovCisjZGVmaW5lIEFDTVBfQ0xSX1dBS0VVUF9JTlRfRkxBRyhhY21wLCB1MzJDaE51bSkgKChhY21wKS0+U1RBVFVTID0gKEFDTVBfU1RBVFVTX1dLSUYwX01zazw8KCh1MzJDaE51bSkpKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgQUNNUCB3YWtlLXVwIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgV0tFTiAoQUNNUF9DVExbMTZdKSB0byBlbmFibGUgQUNNUCB3YWtlLXVwIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBBQ01QX0VOQUJMRV9XQUtFVVAoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSB8PSBBQ01QX0NUTF9XS0VOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIEFDTVAgd2FrZS11cCBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgY2xlYXIgV0tFTiAoQUNNUF9DVExbMTZdKSB0byBkaXNhYmxlIEFDTVAgd2FrZS11cCBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgQUNNUF9ESVNBQkxFX1dBS0VVUChhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldICY9IH5BQ01QX0NUTF9XS0VOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZWxlY3QgQUNNUCBwb3NpdGl2ZSBpbnB1dCBwaW4KKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHBhcmFtW2luXSB1MzJQaW4gQ29tcGFyYXRvciBwb3NpdGl2ZSBwaW4gc2VsZWN0aW9uLiBJbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfUE9TU0VMX1AwCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfUE9TU0VMX1AxCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfUE9TU0VMX1AyCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfUE9TU0VMX1AzCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBQT1NTRUwgKEFDTVBfQ1RMWzc6Nl0pIHRvIGRldGVybWluZSB0aGUgY29tcGFyYXRvciBwb3NpdGl2ZSBpbnB1dCBwaW4uCisgICovCisjZGVmaW5lIEFDTVBfU0VMRUNUX1AoYWNtcCwgdTMyQ2hOdW0sIHUzMlBpbikgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldID0gKChhY21wKS0+Q1RMWyh1MzJDaE51bSldICYgfkFDTVBfQ1RMX1BPU1NFTF9Nc2spIHwgKHUzMlBpbikpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIEFDTVAgZmlsdGVyIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgT1VUU0VMIChBQ01QX0NUTFsxMl0pIHRvIGVuYWJsZSBvdXRwdXQgZmlsdGVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBBQ01QX0VOQUJMRV9GSUxURVIoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSB8PSBBQ01QX0NUTF9PVVRTRUxfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgQUNNUCBmaWx0ZXIgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIE9VVFNFTCAoQUNNUF9DVExbMTJdKSB0byBkaXNhYmxlIG91dHB1dCBmaWx0ZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIEFDTVBfRElTQUJMRV9GSUxURVIoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSAmPSB+QUNNUF9DVExfT1VUU0VMX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgQUNNUCBmaWx0ZXIgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHBhcmFtW2luXSB1MzJDbnQgaXMgY29tcGFyYXRvciBmaWx0ZXIgY291bnQgc2V0dGluZy4KKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9GSUxUU0VMX09GRgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0ZJTFRTRUxfMVBDTEsKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9GSUxUU0VMXzJQQ0xLCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfRklMVFNFTF80UENMSworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0ZJTFRTRUxfOFBDTEsKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9GSUxUU0VMXzE2UENMSworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0ZJTFRTRUxfMzJQQ0xLCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfRklMVFNFTF82NFBDTEsKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBXaGVuIEFDTVAgb3V0cHV0IGZpbHRlciBmdW5jdGlvbiBpcyBlbmFibGVkLCB0aGUgb3V0cHV0IHNhbXBsaW5nIGNvdW50IGlzIGRldGVybWluZWQgYnkgRklMVFNFTCAoQUNNUF9DVExbMTU6MTNdKS4KKyAgKi8KKyNkZWZpbmUgQUNNUF9TRVRfRklMVEVSKGFjbXAsIHUzMkNoTnVtLCB1MzJDbnQpICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSA9ICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSAmIH5BQ01QX0NUTF9GSUxUU0VMX01zaykgfCAodTMyQ250KSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZWxlY3QgY29tcGFyYXRvciByZWZlcmVuY2Ugdm9sdGFnZQorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJMZXZlbCAgVGhlIGNvbXBhcmF0b3IgcmVmZXJlbmNlIHZvbHRhZ2Ugc2V0dGluZy4KKyAgKiAgICAgICAgICAgICBUaGUgZm9ybXVsYSBpczoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyYXRvciByZWZlcmVuY2Ugdm9sdGFnZSA9IENSViBzb3VyY2Ugdm9sdGFnZSB4ICgxLzYgKyB1MzJMZXZlbC8yNCkKKyAgKiAgICAgICAgICAgICBUaGUgcmFuZ2Ugb2YgdTMyTGV2ZWwgaXMgMCB+IDE1LgorICAqIEByZXR1cm4gICBOb25lCisgICogQGRldGFpbHMgIFdoZW4gQ1JWIGlzIHNlbGVjdGVkIGFzIEFDTVAgbmVnYXRpdmUgaW5wdXQgc291cmNlLCB0aGUgQ1JWIGxldmVsIGlzIGRldGVybWluZWQgYnkgQ1JWQ1RMIChBQ01QX1ZSRUZbMzowXSkuCisgICovCisjZGVmaW5lIEFDTVBfQ1JWX1NFTChhY21wLCB1MzJMZXZlbCkgKChhY21wKS0+VlJFRiA9ICgoYWNtcCktPlZSRUYgJiB+QUNNUF9WUkVGX0NSVkNUTF9Nc2spIHwgKCh1MzJMZXZlbCk8PEFDTVBfVlJFRl9DUlZDVExfUG9zKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZWxlY3QgdGhlIHNvdXJjZSBvZiBDUlYKKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyU3JjIGlzIHRoZSBzb3VyY2Ugb2YgQ1JWLiBJbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9WUkVGX0NSVlNTRUxfVkREQQorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfVlJFRl9DUlZTU0VMX0lOVFZSRUYKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGUgc291cmNlIG9mIENSViBjYW4gYmUgVkREQSBvciBpbnRlcm5hbCByZWZlcmVuY2Ugdm9sdGFnZS4gVGhlIGludGVybmFsIHJlZmVyZW5jZSB2b2x0YWdlIGxldmVsIGlzIGRldGVybWluZWQgYnkgU1lTX1ZSRUZDVEwgcmVnaXN0ZXIuCisgICovCisjZGVmaW5lIEFDTVBfU0VMRUNUX0NSVl9TUkMoYWNtcCwgdTMyU3JjKSAoKGFjbXApLT5WUkVGID0gKChhY21wKS0+VlJFRiAmIH5BQ01QX1ZSRUZfQ1JWU1NFTF9Nc2spIHwgKHUzMlNyYykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2VsZWN0IEFDTVAgaW50ZXJydXB0IGNvbmRpdGlvbgorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcGFyYW1baW5dIHUzMkNvbmQgQ29tcGFyYXRvciBpbnRlcnJ1cHQgY29uZGl0aW9uIHNlbGVjdGlvbi4gSW5jbHVkaW5nOgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0lOVFBPTF9SRgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0lOVFBPTF9SCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfSU5UUE9MX0YKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGUgQUNNUCBvdXRwdXQgaW50ZXJydXB0IGNvbmRpdGlvbiBjYW4gYmUgcmlzaW5nIGVkZ2UsIGZhbGxpbmcgZWRnZSBvciBhbnkgZWRnZS4KKyAgKi8KKyNkZWZpbmUgQUNNUF9TRUxFQ1RfSU5UX0NPTkQoYWNtcCwgdTMyQ2hOdW0sIHUzMkNvbmQpICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSA9ICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSAmIH5BQ01QX0NUTF9JTlRQT0xfTXNrKSB8ICh1MzJDb25kKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgQUNNUCB3aW5kb3cgbGF0Y2ggbW9kZQorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2V0IFdMQVRFTiAoQUNNUF9DVExbMTddKSB0byBlbmFibGUgQUNNUCB3aW5kb3cgbGF0Y2ggbW9kZS4KKyAgKiAgICAgICAgICBXaGVuIEFDTVAwLzFfV0xBVCBwaW4gaXMgYXQgaGlnaCBsZXZlbCwgQUNNUE8wLzEgcGFzc2VzIHRocm91Z2ggd2luZG93IGxhdGNoCisgICogICAgICAgICAgYmxvY2s7IHdoZW4gQUNNUDAvMV9XTEFUIHBpbiBpcyBhdCBsb3cgbGV2ZWwsIHRoZSBvdXRwdXQgb2Ygd2luZG93IGxhdGNoIGJsb2NrLAorICAqICAgICAgICAgIFdMQVRPVVQsIGlzIGZyb3plbi4KKyAgKi8KKyNkZWZpbmUgQUNNUF9FTkFCTEVfV0lORE9XX0xBVENIKGFjbXAsIHUzMkNoTnVtKSAoKGFjbXApLT5DVExbKHUzMkNoTnVtKV0gfD0gQUNNUF9DVExfV0xBVEVOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIEFDTVAgd2luZG93IGxhdGNoIG1vZGUKKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIFdMQVRFTiAoQUNNUF9DVExbMTddKSB0byBkaXNhYmxlIEFDTVAgd2luZG93IGxhdGNoIG1vZGUuCisgICovCisjZGVmaW5lIEFDTVBfRElTQUJMRV9XSU5ET1dfTEFUQ0goYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSAmPSB+QUNNUF9DVExfV0xBVEVOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgQUNNUCB3aW5kb3cgY29tcGFyZSBtb2RlCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgV0NNUFNFTCAoQUNNUF9DVExbMThdKSB0byBlbmFibGUgQUNNUCB3aW5kb3cgY29tcGFyZSBtb2RlLgorICAqICAgICAgICAgIFdoZW4gd2luZG93IGNvbXBhcmUgbW9kZSBpcyBlbmFibGVkLCB1c2VyIGNhbiBjb25uZWN0IHRoZSBzcGVjaWZpYyBhbmFsb2cgdm9sdGFnZQorICAqICAgICAgICAgIHNvdXJjZSB0byBlaXRoZXIgdGhlIHBvc2l0aXZlIGlucHV0cyBvZiBib3RoIGNvbXBhcmF0b3JzIG9yIHRoZSBuZWdhdGl2ZSBpbnB1dHMgb2YKKyAgKiAgICAgICAgICBib3RoIGNvbXBhcmF0b3JzLiBUaGUgdXBwZXIgYm91bmQgYW5kIGxvd2VyIGJvdW5kIG9mIHRoZSBkZXNpZ25hdGVkIHJhbmdlIGFyZQorICAqICAgICAgICAgIGRldGVybWluZWQgYnkgdGhlIHZvbHRhZ2VzIGFwcGxpZWQgdG8gdGhlIG90aGVyIGlucHV0cyBvZiBib3RoIGNvbXBhcmF0b3JzLiBJZiB0aGUKKyAgKiAgICAgICAgICBvdXRwdXQgb2YgYSBjb21wYXJhdG9yIGlzIGxvdyBhbmQgdGhlIG90aGVyIGNvbXBhcmF0b3Igb3V0cHV0cyBoaWdoLCB3aGljaCBtZWFucyB0d28KKyAgKiAgICAgICAgICBjb21wYXJhdG9ycyBpbXBsaWVzIHRoZSB1cHBlciBhbmQgbG93ZXIgYm91bmQuIFVzZXIgY2FuIGRpcmVjdGx5IG1vbml0b3IgYSBzcGVjaWZpYworICAqICAgICAgICAgIGFuYWxvZyB2b2x0YWdlIHNvdXJjZSB2aWEgQUNNUFdPIChBQ01QX1NUQVRVU1sxNl0pLgorICAqLworI2RlZmluZSBBQ01QX0VOQUJMRV9XSU5ET1dfQ09NUEFSRShhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldIHw9IEFDTVBfQ1RMX1dDTVBTRUxfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgQUNNUCB3aW5kb3cgY29tcGFyZSBtb2RlCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBXQ01QU0VMIChBQ01QX0NUTFsxOF0pIHRvIGRpc2FibGUgQUNNUCB3aW5kb3cgY29tcGFyZSBtb2RlLgorICAqLworI2RlZmluZSBBQ01QX0RJU0FCTEVfV0lORE9XX0NPTVBBUkUoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSAmPSB+QUNNUF9DVExfV0NNUFNFTF9Nc2spCisKKworCisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZSBkZWNsYXJhdGlvbiAqLwordm9pZCBBQ01QX09wZW4oQUNNUF9UICphY21wLCB1aW50MzJfdCB1MzJDaE51bSwgdWludDMyX3QgdTMyTmVnU3JjLCB1aW50MzJfdCB1MzJIeXNTZWwpOwordm9pZCBBQ01QX0Nsb3NlKEFDTVBfVCAqYWNtcCwgdWludDMyX3QgdTMyQ2hOdW0pOworCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBBQ01QX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEFDTVBfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8qIF9fQUNNUF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvYnB3bS5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvYnB3bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMjhiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9icHdtLmgKQEAgLTAsMCArMSwzNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBicHdtLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBCUFdNIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQlBXTV9IX18KKyNkZWZpbmUgX19CUFdNX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQlBXTV9Ecml2ZXIgQlBXTSBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBCUFdNX0VYUE9SVEVEX0NPTlNUQU5UUyBCUFdNIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKyNkZWZpbmUgQlBXTV9DSEFOTkVMX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgKDZVTCkgICAgICAvKiE8IEJQV00gY2hhbm5lbCBudW1iZXIgKi8KKyNkZWZpbmUgQlBXTV9DSF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVVMKSAgICAvKiE8IEJQV00gY2hhbm5lbCAwIG1hc2sgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX0NIXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVUwpICAgIC8qITwgQlBXTSBjaGFubmVsIDEgbWFzayBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEJQV01fQ0hfMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDRVTCkgICAgLyohPCBCUFdNIGNoYW5uZWwgMiBtYXNrIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9DSF8zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFVMKSAgICAvKiE8IEJQV00gY2hhbm5lbCAzIG1hc2sgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX0NIXzRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFVMKSAgIC8qITwgQlBXTSBjaGFubmVsIDQgbWFzayBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEJQV01fQ0hfNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVUwpICAgLyohPCBCUFdNIGNoYW5uZWwgNSBtYXNrIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENvdW50ZXIgVHlwZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBCUFdNX1VQX0NPVU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgICAoMFVMKSAgICAgIC8qITwgVXAgY291bnRlciB0eXBlICovCisjZGVmaW5lIEJQV01fRE9XTl9DT1VOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwpICAgICAgLyohPCBEb3duIGNvdW50ZXIgdHlwZSAqLworI2RlZmluZSBCUFdNX1VQX0RPV05fQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAoMlVMKSAgICAgIC8qITwgVXAtRG93biBjb3VudGVyIHR5cGUgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEFsaWduZWQgVHlwZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBCUFdNX0VER0VfQUxJR05FRCAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMKSAgICAgIC8qITwgQlBXTSB3b3JraW5nIGluIGVkZ2UgYWxpZ25lZCB0eXBlKGRvd24gY291bnQpICovCisjZGVmaW5lIEJQV01fQ0VOVEVSX0FMSUdORUQgICAgICAgICAgICAgICAgICAgICAgICgyVUwpICAgICAgLyohPCBCUFdNIHdvcmtpbmcgaW4gY2VudGVyIGFsaWduZWQgdHlwZSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgT3V0cHV0IExldmVsIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEJQV01fT1VUUFVUX05PVEhJTkcgICAgICAgICAgICAgICAgICAgICAgICgwVUwpICAgICAgLyohPCBCUFdNIG91dHB1dCBub3RoaW5nICovCisjZGVmaW5lIEJQV01fT1VUUFVUX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwpICAgICAgLyohPCBCUFdNIG91dHB1dCBsb3cgKi8KKyNkZWZpbmUgQlBXTV9PVVRQVVRfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgKDJVTCkgICAgICAvKiE8IEJQV00gb3V0cHV0IGhpZ2ggKi8KKyNkZWZpbmUgQlBXTV9PVVRQVVRfVE9HR0xFICAgICAgICAgICAgICAgICAgICAgICAgKDNVTCkgICAgICAvKiE8IEJQV00gb3V0cHV0IHRvZ2dsZSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgU3luY2hyb25vdXMgU3RhcnQgRnVuY3Rpb24gQ29udHJvbCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEJQV01fU1NDVExfU1NSQ19QV00wICAgICAgICAgICAgICAgICAgICAgICgwVUw8PEJQV01fU1NDVExfU1NSQ19Qb3MpICAgIC8qITwgU3luY2hyb25vdXMgc3RhcnQgc291cmNlIGNvbWVzIGZyb20gUFdNMCAgKi8KKyNkZWZpbmUgQlBXTV9TU0NUTF9TU1JDX1BXTTEgICAgICAgICAgICAgICAgICAgICAgKDFVTDw8QlBXTV9TU0NUTF9TU1JDX1BvcykgICAgLyohPCBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2UgY29tZXMgZnJvbSBQV00xICAqLworI2RlZmluZSBCUFdNX1NTQ1RMX1NTUkNfQlBXTTAgICAgICAgICAgICAgICAgICAgICAoMlVMPDxCUFdNX1NTQ1RMX1NTUkNfUG9zKSAgICAvKiE8IFN5bmNocm9ub3VzIHN0YXJ0IHNvdXJjZSBjb21lcyBmcm9tIEJQV00wICovCisjZGVmaW5lIEJQV01fU1NDVExfU1NSQ19CUFdNMSAgICAgICAgICAgICAgICAgICAgICgzVUw8PEJQV01fU1NDVExfU1NSQ19Qb3MpICAgIC8qITwgU3luY2hyb25vdXMgc3RhcnQgc291cmNlIGNvbWVzIGZyb20gQlBXTTEgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFRyaWdnZXIgU291cmNlIFNlbGVjdCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBCUFdNX1RSSUdHRVJfQURDX0VWRU5fWkVST19QT0lOVCAgICAgICAgICAgICAgICAgICAgICgwVUwpICAgICAvKiE8IEJQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBldmVuIGNoYW5uZWwgbWF0Y2hlcyB6ZXJvIHBvaW50IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9UUklHR0VSX0FEQ19FVkVOX1BFUklPRF9QT0lOVCAgICAgICAgICAgICAgICAgICAoMVVMKSAgICAgLyohPCBCUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2YgZXZlbiBjaGFubmVsIG1hdGNoZXMgcGVyaW9kIHBvaW50IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9UUklHR0VSX0FEQ19FVkVOX1pFUk9fT1JfUEVSSU9EX1BPSU5UICAgICAgICAgICAoMlVMKSAgICAgLyohPCBCUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2YgZXZlbiBjaGFubmVsIG1hdGNoZXMgemVybyBvciBwZXJpb2QgcG9pbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX1RSSUdHRVJfQURDX0VWRU5fQ01QX1VQX0NPVU5UX1BPSU5UICAgICAgICAgICAgICgzVUwpICAgICAvKiE8IEJQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBldmVuIGNoYW5uZWwgbWF0Y2hlcyB1cCBjb3VudCB0byBjb21wYXJhdG9yIHBvaW50IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9UUklHR0VSX0FEQ19FVkVOX0NNUF9ET1dOX0NPVU5UX1BPSU5UICAgICAgICAgICAoNFVMKSAgICAgLyohPCBCUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2YgZXZlbiBjaGFubmVsIG1hdGNoZXMgZG93biBjb3VudCB0byBjb21wYXJhdG9yIHBvaW50IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9UUklHR0VSX0FEQ19PRERfQ01QX1VQX0NPVU5UX1BPSU5UICAgICAgICAgICAgICAoOFVMKSAgICAgLyohPCBCUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2Ygb2RkIGNoYW5uZWwgbWF0Y2hlcyB1cCBjb3VudCB0byBjb21wYXJhdG9yIHBvaW50IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9UUklHR0VSX0FEQ19PRERfQ01QX0RPV05fQ09VTlRfUE9JTlQgICAgICAgICAgICAoOVVMKSAgICAgLyohPCBCUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2Ygb2RkIGNoYW5uZWwgbWF0Y2hlcyBkb3duIGNvdW50IHRvIGNvbXBhcmF0b3IgcG9pbnQgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQ2FwdHVyZSBDb250cm9sIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEJQV01fQ0FQVFVSRV9JTlRfUklTSU5HX0xBVENIICAgICAgICAgICAgICgxVUwpICAgICAgICAvKiE8IEJQV00gY2FwdHVyZSBpbnRlcnJ1cHQgaWYgY2hhbm5lbCBoYXMgcmlzaW5nIHRyYW5zaXRpb24gKi8KKyNkZWZpbmUgQlBXTV9DQVBUVVJFX0lOVF9GQUxMSU5HX0xBVENIICAgICAgICAgICAgKDB4MTAwVUwpICAgIC8qITwgQlBXTSBjYXB0dXJlIGludGVycnVwdCBpZiBjaGFubmVsIGhhcyBmYWxsaW5nIHRyYW5zaXRpb24gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIER1dHkgSW50ZXJydXB0IFR5cGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBCUFdNX0RVVFlfSU5UX0RPV05fQ09VTlRfTUFUQ0hfQ01QICAgICAgICAoMSA8PCBCUFdNX0lOVEVOX0NNUERJRU4wX1BvcykgICAvKiE8IEJQV00gZHV0eSBpbnRlcnJ1cHQgdHJpZ2dlcmVkIGlmIGRvd24gY291bnQgbWF0Y2ggY29tcGFyYXRvciBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEJQV01fRFVUWV9JTlRfVVBfQ09VTlRfTUFUQ0hfQ01QICAgICAgICAgICgxIDw8IEJQV01fSU5URU5fQ01QVUlFTjBfUG9zKSAgIC8qITwgQlBXTSBkdXR5IGludGVycnVwdCB0cmlnZ2VyZWQgaWYgdXAgZG93biBtYXRjaCBjb21wYXJhdG9yIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIExvYWQgTW9kZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBCUFdNX0xPQURfTU9ERV9JTU1FRElBVEUgICAgICAgICAgICAgICAgICAoMSA8PCBCUFdNX0NUTDBfSU1NTERFTjBfUG9zKSAgICAvKiE8IEJQV00gaW1tZWRpYXRlbHkgbG9hZCBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9MT0FEX01PREVfQ0VOVEVSICAgICAgICAgICAgICAgICAgICAgKDEgPDwgQlBXTV9DVEwwX0NUUkxEMF9Qb3MpICAgICAgLyohPCBCUFdNIGNlbnRlciBsb2FkIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQ2xvY2sgU291cmNlIFNlbGVjdCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEJQV01fQ0xLU1JDX0JQV01fQ0xLICAgICAgICAgICAgICAgICAgICAgICgwVUwpICAgIC8qITwgQlBXTSBDbG9jayBzb3VyY2Ugc2VsZWN0cyB0byBCUFdNMF9DTEsgb3IgQlBXTTFfQ0xLIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9DTEtTUkNfVElNRVIwICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCkgICAgLyohPCBCUFdNIENsb2NrIHNvdXJjZSBzZWxlY3RzIHRvIFRJTUVSMCBvdmVyZmxvdyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEJQV01fQ0xLU1JDX1RJTUVSMSAgICAgICAgICAgICAgICAgICAgICAgICgyVUwpICAgIC8qITwgQlBXTSBDbG9jayBzb3VyY2Ugc2VsZWN0cyB0byBUSU1FUjEgb3ZlcmZsb3cgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX0NMS1NSQ19USU1FUjIgICAgICAgICAgICAgICAgICAgICAgICAoM1VMKSAgICAvKiE8IEJQV00gQ2xvY2sgc291cmNlIHNlbGVjdHMgdG8gVElNRVIyIG92ZXJmbG93IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9DTEtTUkNfVElNRVIzICAgICAgICAgICAgICAgICAgICAgICAgKDRVTCkgICAgLyohPCBCUFdNIENsb2NrIHNvdXJjZSBzZWxlY3RzIHRvIFRJTUVSMyBvdmVyZmxvdyBcaGlkZWluaXRpYWxpemVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQlBXTV9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgQlBXTV9FWFBPUlRFRF9GVU5DVElPTlMgQlBXTSBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICogQGJyaWVmIEVuYWJsZSB0aW1lciBzeW5jaHJvbm91cyBzdGFydCBjb3VudGluZyBmdW5jdGlvbiBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcGFyYW1baW5dIHUzMlN5bmNTcmMgU3luY2hyb25vdXMgc3RhcnQgc291cmNlIHNlbGVjdGlvbiwgdmFsaWQgdmFsdWVzIGFyZToKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9TU0NUTF9TU1JDX1BXTTAKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9TU0NUTF9TU1JDX1BXTTEKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9TU0NUTF9TU1JDX0JQV00wCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fU1NDVExfU1NSQ19CUFdNMQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIHRpbWVyIHN5bmNocm9ub3VzIHN0YXJ0IGNvdW50aW5nIGZ1bmN0aW9uIG9mIHNwZWNpZmllZCBjaGFubmVsKHMpLgorIEFsbCBjaGFubmVscyBzaGFyZSBjaGFubmVsIDAncyBzZXR0aW5nLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEJQV01fRU5BQkxFX1RJTUVSX1NZTkMoYnB3bSwgdTMyQ2hhbm5lbE1hc2ssIHUzMlN5bmNTcmMpICgoYnB3bSktPlNTQ1RMID0gKChicHdtKS0+U1NDVEwgJiB+QlBXTV9TU0NUTF9TU1JDX01zaykgfCAodTMyU3luY1NyYykgfCBCUFdNX1NTQ1RMX1NTRU4wX01zaykKKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSB0aW1lciBzeW5jaHJvbm91cyBzdGFydCBjb3VudGluZyBmdW5jdGlvbiBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIHRpbWVyIHN5bmNocm9ub3VzIHN0YXJ0IGNvdW50aW5nIGZ1bmN0aW9uIG9mIHNwZWNpZmllZCBjaGFubmVsKHMpLgorIEFsbCBjaGFubmVscyBzaGFyZSBjaGFubmVsIDAncyBzZXR0aW5nLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEJQV01fRElTQUJMRV9USU1FUl9TWU5DKGJwd20sIHUzMkNoYW5uZWxNYXNrKSAoKGJwd20pLT5TU0NUTCAmPSB+QlBXTV9TU0NUTF9TU0VOMF9Nc2spCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZW5hYmxlIEJQV00gY291bnRlciBzeW5jaHJvbm91cyBzdGFydCBjb3VudGluZyBmdW5jdGlvbi4KKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBtYWtlIHNlbGVjdGVkIEJQV00wIGFuZCBCUFdNMSBjaGFubmVsKHMpIHN0YXJ0IGNvdW50aW5nIGF0IHRoZSBzYW1lIHRpbWUuCisgKiAgICAgICAgICBUbyBjb25maWd1cmUgc3luY2hyb25vdXMgc3RhcnQgY291bnRpbmcgY2hhbm5lbChzKSBieSBCUFdNX0VOQUJMRV9USU1FUl9TWU5DKCkgYW5kIEJQV01fRElTQUJMRV9USU1FUl9TWU5DKCkuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgQlBXTV9UUklHR0VSX1NZTkNfU1RBUlQoYnB3bSkgKChicHdtKS0+U1NUUkcgPSBCUFdNX1NTVFJHX0NOVFNFTl9Nc2spCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZW5hYmxlIG91dHB1dCBpbnZlcnRlciBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIHJlcHJlc2VudHMgY2hhbm5lbCAwLCBiaXQgMSByZXByZXNlbnRzIGNoYW5uZWwgMS4uLgorICogQHJldHVybiBOb25lCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgQlBXTV9FTkFCTEVfT1VUUFVUX0lOVkVSVEVSKGJwd20sIHUzMkNoYW5uZWxNYXNrKSAoKGJwd20pLT5QT0xDVEwgPSAodTMyQ2hhbm5lbE1hc2spKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIGdldCBjYXB0dXJlZCByaXNpbmcgZGF0YQorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBCUFdNX0dFVF9DQVBUVVJFX1JJU0lOR19EQVRBKGJwd20sIHUzMkNoYW5uZWxOdW0pICgoYnB3bSktPkNBUERBVFsodTMyQ2hhbm5lbE51bSldLlJDQVBEQVQpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZ2V0IGNhcHR1cmVkIGZhbGxpbmcgZGF0YQorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBCUFdNX0dFVF9DQVBUVVJFX0ZBTExJTkdfREFUQShicHdtLCB1MzJDaGFubmVsTnVtKSAoKGJwd20pLT5DQVBEQVRbKHUzMkNoYW5uZWxOdW0pXS5GQ0FQREFUKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIG1hc2sgb3V0cHV0IGxvZ2ljIHRvIGhpZ2ggb3IgbG93CisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgcmVwcmVzZW50cyBjaGFubmVsIDAsIGJpdCAxIHJlcHJlc2VudHMgY2hhbm5lbCAxLi4uCisgKiBAcGFyYW1baW5dIHUzMkxldmVsTWFzayBPdXRwdXQgbG9naWMgdG8gaGlnaCBvciBsb3cKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIG1hc2sgb3V0cHV0IGxvZ2ljIHRvIGhpZ2ggb3IgbG93IG9mIHNwZWNpZmllZCBjaGFubmVsKHMpLgorIElmIHUzMkNoYW5uZWxNYXNrIHBhcmFtZXRlciBpcyAwLCB0aGVuIG1hc2sgZnVuY3Rpb24gd2lsbCBiZSBkaXNhYmxlZC4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBCUFdNX01BU0tfT1VUUFVUKGJwd20sIHUzMkNoYW5uZWxNYXNrLCB1MzJMZXZlbE1hc2spIFwKKyAgICB7IFwKKyAgICAgICAgKGJwd20pLT5NU0tFTiA9ICh1MzJDaGFubmVsTWFzayk7IFwKKyAgICAgICAgKGJwd20pLT5NU0sgPSAodTMyTGV2ZWxNYXNrKTsgXAorICAgIH0KKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBzZXQgdGhlIHByZXNjYWxlciBvZiBhbGwgY2hhbm5lbHMKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcGFyYW1baW5dIHUzMlByZXNjYWxlciBDbG9jayBwcmVzY2FsZXIgb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAxIH4gMHhGRkYKKyAqIEByZXR1cm4gTm9uZQorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEJQV01fU0VUX1BSRVNDQUxFUihicHdtLCB1MzJDaGFubmVsTnVtLCB1MzJQcmVzY2FsZXIpICgoYnB3bSktPkNMS1BTQyA9ICh1MzJQcmVzY2FsZXIpKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIHNldCB0aGUgZHV0eSBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkNNUiBEdXR5IG9mIHNwZWNpZmllZCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH4weEZGRkYKKyAqIEByZXR1cm4gTm9uZQorIFRoaXMgbmV3IHNldHRpbmcgd2lsbCB0YWtlIGVmZmVjdCBvbiBuZXh0IEJQV00gcGVyaW9kCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgQlBXTV9TRVRfQ01SKGJwd20sIHUzMkNoYW5uZWxOdW0sIHUzMkNNUikgKChicHdtKS0+Q01QREFUWyh1MzJDaGFubmVsTnVtKV0gPSAodTMyQ01SKSkKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBnZXQgdGhlIGR1dHkgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBSZXR1cm4gdGhlIGNvbXBhcmF0b3Igb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjB4RkZGRgorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGdldCB0aGUgY29tcGFyYXRvciBvZiBzcGVjaWZpZWQgY2hhbm5lbC4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBCUFdNX0dFVF9DTVIoYnB3bSwgdTMyQ2hhbm5lbE51bSkgKChicHdtKS0+Q01QREFUWyh1MzJDaGFubmVsTnVtKV0pCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gc2V0IHRoZSBwZXJpb2Qgb2YgYWxsIGNoYW5uZWxzCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHBhcmFtW2luXSB1MzJDTlIgUGVyaW9kIG9mIHNwZWNpZmllZCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH4weEZGRkYKKyAqIEByZXR1cm4gTm9uZQorIFRoaXMgbmV3IHNldHRpbmcgd2lsbCB0YWtlIGVmZmVjdCBvbiBuZXh0IEJQV00gcGVyaW9kCisgQlBXTSBjb3VudGVyIHdpbGwgc3RvcCBpZiBwZXJpb2QgbGVuZ3RoIHNldCB0byAwCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgQlBXTV9TRVRfQ05SKGJwd20sIHUzMkNoYW5uZWxOdW0sIHUzMkNOUikgKChicHdtKS0+UEVSSU9EID0gKHUzMkNOUikpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZ2V0IHRoZSBwZXJpb2Qgb2YgYWxsIGNoYW5uZWxzCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHJldHVybiBOb25lCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgQlBXTV9HRVRfQ05SKGJwd20sIHUzMkNoYW5uZWxOdW0pICgoYnB3bSktPlBFUklPRCkKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBzZXQgdGhlIEJQV00gYWxpZ25lZCB0eXBlCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEBwYXJhbVtpbl0gdTMyQWxpZ25lZFR5cGUgQlBXTSBhbGlnbmVkIHR5cGUsIHZhbGlkIHZhbHVlcyBhcmU6CisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fRURHRV9BTElHTkVECisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fQ0VOVEVSX0FMSUdORUQKKyAqIEByZXR1cm4gTm9uZQorIEFsbCBjaGFubmVscyBzaGFyZSBjaGFubmVsIDAncyBzZXR0aW5nLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEJQV01fU0VUX0FMSUdORURfVFlQRShicHdtLCB1MzJDaGFubmVsTWFzaywgdTMyQWxpZ25lZFR5cGUpICgoYnB3bSktPkNUTDEgPSAodTMyQWxpZ25lZFR5cGUpKQorCisvKioKKyAqIEBicmllZiBDbGVhciBjb3VudGVyIG9mIGNoYW5uZWwgMAorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjbGVhciBjb3VudGVyIG9mIGNoYW5uZWwgMAorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEJQV01fQ0xSX0NPVU5URVIoYnB3bSwgdTMyQ2hhbm5lbE1hc2spICgoYnB3bSktPkNOVENMUiA9IChCUFdNX0NOVENMUl9DTlRDTFIwX01zaykpCisKKy8qKgorICogQGJyaWVmIFNldCBvdXRwdXQgbGV2ZWwgYXQgemVybywgY29tcGFyZSB1cCwgcGVyaW9kKGNlbnRlcikgYW5kIGNvbXBhcmUgZG93biBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIHJlcHJlc2VudHMgY2hhbm5lbCAwLCBiaXQgMSByZXByZXNlbnRzIGNoYW5uZWwgMS4uLgorICogQHBhcmFtW2luXSB1MzJaZXJvTGV2ZWwgb3V0cHV0IGxldmVsIGF0IHplcm8gcG9pbnQsIHZhbGlkIHZhbHVlcyBhcmU6CisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fT1VUUFVUX05PVEhJTkcKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfTE9XCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fT1VUUFVUX0hJR0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfVE9HR0xFCisgKiBAcGFyYW1baW5dIHUzMkNtcFVwTGV2ZWwgb3V0cHV0IGxldmVsIGF0IGNvbXBhcmUgdXAgcG9pbnQsIHZhbGlkIHZhbHVlcyBhcmU6CisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fT1VUUFVUX05PVEhJTkcKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfTE9XCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fT1VUUFVUX0hJR0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfVE9HR0xFCisgKiBAcGFyYW1baW5dIHUzMlBlcmlvZExldmVsIG91dHB1dCBsZXZlbCBhdCBwZXJpb2QoY2VudGVyKSBwb2ludCwgdmFsaWQgdmFsdWVzIGFyZToKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfTk9USElORworICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX09VVFBVVF9MT1cKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfSElHSAorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX09VVFBVVF9UT0dHTEUKKyAqIEBwYXJhbVtpbl0gdTMyQ21wRG93bkxldmVsIG91dHB1dCBsZXZlbCBhdCBjb21wYXJlIGRvd24gcG9pbnQsIHZhbGlkIHZhbHVlcyBhcmU6CisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fT1VUUFVUX05PVEhJTkcKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfTE9XCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fT1VUUFVUX0hJR0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfVE9HR0xFCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBTZXQgb3V0cHV0IGxldmVsIGF0IHplcm8sIGNvbXBhcmUgdXAsIHBlcmlvZChjZW50ZXIpIGFuZCBjb21wYXJlIGRvd24gb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykKKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBCUFdNX1NFVF9PVVRQVVRfTEVWRUwoYnB3bSwgdTMyQ2hhbm5lbE1hc2ssIHUzMlplcm9MZXZlbCwgdTMyQ21wVXBMZXZlbCwgdTMyUGVyaW9kTGV2ZWwsIHUzMkNtcERvd25MZXZlbCkgXAorICAgZG97IFwKKyAgICAgICAgdWludDMyX3QgaTsgXAorICAgICAgICBmb3IoaSA9IDBVTDsgaSA8IDZVTDsgaSsrKSB7IFwKKyAgICAgICAgICAgIGlmKCh1MzJDaGFubmVsTWFzaykgJiAoMVVMIDw8IGkpKSB7IFwKKyAgICAgICAgICAgICAgICAoYnB3bSktPldHQ1RMMCA9ICgoKGJwd20pLT5XR0NUTDAgJiB+KDNVTCA8PCAoaSA8PCAxKSkpIHwgKCh1MzJaZXJvTGV2ZWwpIDw8IChpIDw8IDEpKSk7IFwKKyAgICAgICAgICAgICAgICAoYnB3bSktPldHQ1RMMCA9ICgoKGJwd20pLT5XR0NUTDAgJiB+KDNVTCA8PCAoQlBXTV9XR0NUTDBfUFJEUENUTDBfUG9zICsgKGkgPDwgMSkpKSkgfCAoKHUzMlBlcmlvZExldmVsKSA8PCAoQlBXTV9XR0NUTDBfUFJEUENUTDBfUG9zICsgKGkgPDwgMSkpKSk7IFwKKyAgICAgICAgICAgICAgICAoYnB3bSktPldHQ1RMMSA9ICgoKGJwd20pLT5XR0NUTDEgJiB+KDNVTCA8PCAoaSA8PCAxKSkpIHwgKCh1MzJDbXBVcExldmVsKSA8PCAoaSA8PCAxKSkpOyBcCisgICAgICAgICAgICAgICAgKGJwd20pLT5XR0NUTDEgPSAoKChicHdtKS0+V0dDVEwxICYgfigzVUwgPDwgKEJQV01fV0dDVEwxX0NNUERDVEwwX1BvcyArIChpIDw8IDEpKSkpIHwgKCh1MzJDbXBEb3duTGV2ZWwpIDw8IChCUFdNX1dHQ1RMMV9DTVBEQ1RMMF9Qb3MgKyAoaSA8PCAxKSkpKTsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0gXAorICAgIH13aGlsZSgwKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIERlZmluZSBCUFdNIGZ1bmN0aW9ucyBwcm90b3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit1aW50MzJfdCBCUFdNX0NvbmZpZ0NhcHR1cmVDaGFubmVsKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyVW5pdFRpbWVOc2VjLCB1aW50MzJfdCB1MzJDYXB0dXJlRWRnZSk7Cit1aW50MzJfdCBCUFdNX0NvbmZpZ091dHB1dENoYW5uZWwoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJGcmVxdWVuY3ksIHVpbnQzMl90IHUzMkR1dHlDeWNsZSk7Cit2b2lkIEJQV01fU3RhcnQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzayk7Cit2b2lkIEJQV01fU3RvcChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKTsKK3ZvaWQgQlBXTV9Gb3JjZVN0b3AoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzayk7Cit2b2lkIEJQV01fRW5hYmxlQURDVHJpZ2dlcihCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkNvbmRpdGlvbik7Cit2b2lkIEJQV01fRGlzYWJsZUFEQ1RyaWdnZXIoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgQlBXTV9DbGVhckFEQ1RyaWdnZXJGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyQ29uZGl0aW9uKTsKK3VpbnQzMl90IEJQV01fR2V0QURDVHJpZ2dlckZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgQlBXTV9FbmFibGVDYXB0dXJlKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spOwordm9pZCBCUFdNX0Rpc2FibGVDYXB0dXJlKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spOwordm9pZCBCUFdNX0VuYWJsZU91dHB1dChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKTsKK3ZvaWQgQlBXTV9EaXNhYmxlT3V0cHV0KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spOwordm9pZCBCUFdNX0VuYWJsZUNhcHR1cmVJbnQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJFZGdlKTsKK3ZvaWQgQlBXTV9EaXNhYmxlQ2FwdHVyZUludChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkVkZ2UpOwordm9pZCBCUFdNX0NsZWFyQ2FwdHVyZUludEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJFZGdlKTsKK3VpbnQzMl90IEJQV01fR2V0Q2FwdHVyZUludEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgQlBXTV9FbmFibGVEdXR5SW50KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMySW50RHV0eVR5cGUpOwordm9pZCBCUFdNX0Rpc2FibGVEdXR5SW50KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEJQV01fQ2xlYXJEdXR5SW50RmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordWludDMyX3QgQlBXTV9HZXREdXR5SW50RmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBCUFdNX0VuYWJsZVBlcmlvZEludChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sICB1aW50MzJfdCB1MzJJbnRQZXJpb2RUeXBlKTsKK3ZvaWQgQlBXTV9EaXNhYmxlUGVyaW9kSW50KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEJQV01fQ2xlYXJQZXJpb2RJbnRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit1aW50MzJfdCBCUFdNX0dldFBlcmlvZEludEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgQlBXTV9FbmFibGVaZXJvSW50KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEJQV01fRGlzYWJsZVplcm9JbnQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgQlBXTV9DbGVhclplcm9JbnRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit1aW50MzJfdCBCUFdNX0dldFplcm9JbnRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEJQV01fRW5hYmxlTG9hZE1vZGUoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJMb2FkTW9kZSk7Cit2b2lkIEJQV01fRGlzYWJsZUxvYWRNb2RlKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyTG9hZE1vZGUpOwordm9pZCBCUFdNX1NldENsb2NrU291cmNlKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyQ2xrU3JjU2VsKTsKK3VpbnQzMl90IEJQV01fR2V0V3JhcEFyb3VuZEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgQlBXTV9DbGVhcldyYXBBcm91bmRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBCUFdNX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEJQV01fRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0JQV01fSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2Nhbi5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvY2FuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkZTRjNgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2Nhbi5oCkBAIC0wLDAgKzEsMTk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY2FuLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIE0yMzUxIFNlcmllcyBDQU4gRHJpdmVyIEhlYWRlciBGaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQ0FOX0hfXworI2RlZmluZSBfX0NBTl9IX18KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQ0FOX0RyaXZlciBDQU4gRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQ0FOX0VYUE9SVEVEX0NPTlNUQU5UUyBDQU4gRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogQ0FOIFRlc3QgTW9kZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSAgICBDQU5fTk9STUFMX01PREUgICAwVSAgICAvKiE8IENBTiBzZWxlY3Qgbm9ybWFsIG1vZGUgKi8KKyNkZWZpbmUgICAgQ0FOX0JBU0lDX01PREUgICAgMVUgICAgLyohPCBDQU4gc2VsZWN0IGJhc2ljIG1vZGUgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTWVzc2FnZSBJRCBUeXBlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSAgICBDQU5fU1REX0lEICAgIDBVTCAgICAvKiE8IENBTiBzZWxlY3Qgc3RhbmRhcmQgSUQgKi8KKyNkZWZpbmUgICAgQ0FOX0VYVF9JRCAgICAxVUwgICAgLyohPCBDQU4gc2VsZWN0IGV4dGVuZGVkIElEICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE1lc3NhZ2UgRnJhbWUgVHlwZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgICAgQ0FOX1JFTU9URV9GUkFNRSAgICAwICAgIC8qITwgQ0FOIGZyYW1lIHNlbGVjdCByZW1vdGUgZnJhbWUgKi8KKyNkZWZpbmUgICAgQ0FOX0RBVEFfRlJBTUUgICAgMSAgICAgIC8qITwgQ0FOIGZyYW1lIHNlbGVjdCBkYXRhIGZyYW1lICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ0FOX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBDQU5fRVhQT1JURURfU1RSVUNUUyBDQU4gRXhwb3J0ZWQgU3RydWN0cworICBAeworKi8KKy8qKgorICAqIEBkZXRhaWxzICAgIENBTiBtZXNzYWdlIHN0cnVjdHVyZQorICAqLworI3ByYWdtYSBwYWNrKHB1c2gpCisjcHJhZ21hIHBhY2soMSkKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgIElkVHlwZTsgICAgICAgLyohPCBJRCB0eXBlICovCisgICAgdWludDMyX3QgIEZyYW1lVHlwZTsgICAgLyohPCBGcmFtZSB0eXBlICovCisgICAgdWludDMyX3QgIElkOyAgICAgICAgICAgLyohPCBNZXNzYWdlIElEICovCisgICAgdWludDhfdCAgIERMQzsgICAgICAgICAgLyohPCBEYXRhIGxlbmd0aCAqLworICAgIHVpbnQ4X3QgICBEYXRhWzhdOyAgICAgIC8qITwgRGF0YSAqLworfSBTVFJfQ0FOTVNHX1Q7CisjcHJhZ21hIHBhY2socG9wKQorCisvKioKKyAgKiBAZGV0YWlscyAgICBDQU4gbWFzayBtZXNzYWdlIHN0cnVjdHVyZQorICAqLworI3ByYWdtYSBwYWNrKHB1c2gpCisjcHJhZ21hIHBhY2soMSkKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDhfdCAgIHU4WHRkOyAgICAgIC8qITwgRXh0ZW5kZWQgSUQgKi8KKyAgICB1aW50OF90ICAgdThEaXI7ICAgICAgLyohPCBEaXJlY3Rpb24gKi8KKyAgICB1aW50MzJfdCAgdTMySWQ7ICAgICAgLyohPCBNZXNzYWdlIElEICovCisgICAgdWludDhfdCAgIHU4SWRUeXBlOyAgIC8qITwgSUQgdHlwZSovCit9IFNUUl9DQU5NQVNLX1Q7CisjcHJhZ21hIHBhY2socG9wKQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENBTl9FWFBPUlRFRF9TVFJVQ1RTICovCisKKy8qKiBAY29uZCBISURERU5fU1lNQk9MUyAqLworI2RlZmluZSBNU0coaWQpICAoaWQpCisvKiogQGVuZGNvbmQgSElEREVOX1NZTUJPTFMgKi8KKworLyoqIEBhZGR0b2dyb3VwIENBTl9FWFBPUlRFRF9GVU5DVElPTlMgQ0FOIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgKiBAYnJpZWYgR2V0IGludGVycnVwdCBzdGF0dXMuCisgKgorICogQHBhcmFtW2luXSBjYW4gVGhlIGJhc2UgYWRkcmVzcyBvZiBjYW4gbW9kdWxlLgorICoKKyAqIEByZXR1cm4gQ0FOIG1vZHVsZSBzdGF0dXMgcmVnaXN0ZXIgdmFsdWUuCisgKgorICogQGRldGFpbHMgU3RhdHVzIEludGVycnVwdCBpcyBnZW5lcmF0ZWQgYnkgYml0cyBCT2ZmIChDQU5fU1RBVFVTWzddKSwgRVdhcm4gKENBTl9TVEFUVVNbNl0pLAorICogICAgICAgICAgRVBhc3MgKENBTl9TVEFUVVNbNV0pLCBSeE9rIChDQU5fU1RBVFVTWzRdKSwgVHhPayAoQ0FOX1NUQVRVU1szXSksIGFuZCBMRUMgKENBTl9TVEFUVVNbMjowXSkuCisgKi8KKyNkZWZpbmUgQ0FOX0dFVF9JTlRfU1RBVFVTKGNhbikgKChjYW4pLT5TVEFUVVMpCisKKy8qKgorICogQGJyaWVmIEdldCBzcGVjaWZpZWQgaW50ZXJydXB0IHBlbmRpbmcgc3RhdHVzLgorICoKKyAqIEBwYXJhbVtpbl0gY2FuIFRoZSBiYXNlIGFkZHJlc3Mgb2YgY2FuIG1vZHVsZS4KKyAqCisgKiBAcmV0dXJuIFRoZSBzb3VyY2Ugb2YgdGhlIGludGVycnVwdC4KKyAqCisgKiBAZGV0YWlscyBJZiBzZXZlcmFsIGludGVycnVwdHMgYXJlIHBlbmRpbmcsIHRoZSBDQU4gSW50ZXJydXB0IFJlZ2lzdGVyIHdpbGwgcG9pbnQgdG8gdGhlIHBlbmRpbmcgaW50ZXJydXB0CisgKiAgICAgICAgICB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5LCBkaXNyZWdhcmRpbmcgdGhlaXIgY2hyb25vbG9naWNhbCBvcmRlci4KKyAqLworI2RlZmluZSBDQU5fR0VUX0lOVF9QRU5ESU5HX1NUQVRVUyhjYW4pICgoY2FuKS0+SUlEUikKKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSB3YWtlLXVwIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gY2FuIFRoZSBiYXNlIGFkZHJlc3Mgb2YgY2FuIG1vZHVsZS4KKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgVGhlIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSB3YWtlLXVwIGZ1bmN0aW9uLgorICovCisjZGVmaW5lIENBTl9ESVNBQkxFX1dBS0VVUChjYW4pICgoY2FuKS0+V1VfRU4gPSAwKQorCisvKioKKyAqIEBicmllZiBFbmFibGUgd2FrZS11cCBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dIGNhbiBUaGUgYmFzZSBhZGRyZXNzIG9mIGNhbiBtb2R1bGUuCisgKgorICogQHJldHVybiBOb25lCisgKgorICogQGRldGFpbHMgVXNlciBjYW4gd2FrZS11cCBzeXN0ZW0gd2hlbiB0aGVyZSBpcyBhIGZhbGxpbmcgZWRnZSBpbiB0aGUgQ0FOX1J4IHBpbi4KKyAqLworI2RlZmluZSBDQU5fRU5BQkxFX1dBS0VVUChjYW4pICgoY2FuKS0+V1VfRU4gPSBDQU5fV1VfRU5fV0FLVVBfRU5fTXNrKQorCisvKioKKyAqIEBicmllZiBHZXQgc3BlY2lmaWVkIE1lc3NhZ2UgT2JqZWN0IG5ldyBkYXRhIGludG8gYml0IHZhbHVlLgorICoKKyAqIEBwYXJhbVtpbl0gY2FuIFRoZSBiYXNlIGFkZHJlc3Mgb2YgY2FuIG1vZHVsZS4KKyAqIEBwYXJhbVtpbl0gdTMyTXNnTnVtIFNwZWNpZmllZCBNZXNzYWdlIE9iamVjdCBudW1iZXIsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMzEuCisgKgorICogQHJldHVybiBTcGVjaWZpZWQgTWVzc2FnZSBPYmplY3QgbmV3IGRhdGEgaW50byBiaXQgdmFsdWUuCisgKgorICogQGRldGFpbHMgVGhlIE5ld0RhdCBiaXQgKENBTl9JRm5fTUNPTlsxNV0pIG9mIGEgc3BlY2lmaWMgTWVzc2FnZSBPYmplY3QgY2FuIGJlIHNldC9yZXNldCBieSB0aGUgc29mdHdhcmUgdGhyb3VnaCB0aGUgSUZuIE1lc3NhZ2UgSW50ZXJmYWNlIFJlZ2lzdGVycworICogICAgICAgICAgb3IgYnkgdGhlIE1lc3NhZ2UgSGFuZGxlciBhZnRlciByZWNlcHRpb24gb2YgYSBEYXRhIEZyYW1lIG9yIGFmdGVyIGEgc3VjY2Vzc2Z1bCB0cmFuc21pc3Npb24uCisgKi8KKyNkZWZpbmUgQ0FOX0dFVF9ORVdfREFUQV9JTl9CSVQoY2FuLCB1MzJNc2dOdW0pICgodTMyTXNnTnVtKSA8IDE2ID8gKGNhbiktPk5EQVQxICYgKDEgPDwgKHUzMk1zZ051bSkpIDogKGNhbiktPk5EQVQyICYgKDEgPDwgKCh1MzJNc2dOdW0pLTE2KSkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGVmaW5lIENBTiBmdW5jdGlvbnMgcHJvdG90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordWludDMyX3QgQ0FOX1NldEJhdWRSYXRlKENBTl9UICp0Q0FOLCB1aW50MzJfdCB1MzJCYXVkUmF0ZSk7Cit2b2lkIENBTl9DbG9zZShDQU5fVCAqdENBTik7Cit1aW50MzJfdCBDQU5fT3BlbihDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyQmF1ZFJhdGUsIHVpbnQzMl90IHUzMk1vZGUpOwordm9pZCBDQU5fQ0xSX0lOVF9QRU5ESU5HX0JJVChDQU5fVCAqdENBTiwgdWludDhfdCB1MzJNc2dOdW0pOwordm9pZCBDQU5fRW5hYmxlSW50KENBTl9UICp0Q0FOLCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgQ0FOX0Rpc2FibGVJbnQoQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1hc2spOworaW50MzJfdCBDQU5fVHJhbnNtaXQoQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1zZ051bSwgU1RSX0NBTk1TR19UKiBwQ2FuTXNnKTsKK2ludDMyX3QgQ0FOX1JlY2VpdmUoQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1zZ051bSwgU1RSX0NBTk1TR19UKiBwQ2FuTXNnKTsKK2ludDMyX3QgQ0FOX1NldE11bHRpUnhNc2coQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1zZ051bSwgdWludDMyX3QgdTMyTXNnQ291bnQsIHVpbnQzMl90IHUzMklEVHlwZSwgdWludDMyX3QgdTMySUQpOworaW50MzJfdCBDQU5fU2V0UnhNc2coQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1zZ051bSwgdWludDMyX3QgdTMySURUeXBlLCB1aW50MzJfdCB1MzJJRCk7CitpbnQzMl90IENBTl9TZXRSeE1zZ0FuZE1zayhDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyTXNnTnVtLCB1aW50MzJfdCB1MzJJRFR5cGUsIHVpbnQzMl90IHUzMklELCB1aW50MzJfdCB1MzJJRE1hc2spOworaW50MzJfdCBDQU5fU2V0VHhNc2coQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1zZ051bSwgU1RSX0NBTk1TR19UKiBwQ2FuTXNnKTsKK2ludDMyX3QgQ0FOX1RyaWdnZXJUeE1zZyhDQU5fVCAgKnRDQU4sIHVpbnQzMl90IHUzMk1zZ051bSk7Cit2b2lkIENBTl9FbnRlckluaXRNb2RlKENBTl9UICp0Q0FOLCB1aW50OF90IHU4TWFzayk7Cit2b2lkIENBTl9MZWF2ZUluaXRNb2RlKENBTl9UICp0Q0FOKTsKK3ZvaWQgQ0FOX1dhaXRNc2coQ0FOX1QgKnRDQU4pOwordWludDMyX3QgQ0FOX0dldENBTkJpdFJhdGUoQ0FOX1QgKnRDQU4pOwordm9pZCBDQU5fRW50ZXJUZXN0TW9kZShDQU5fVCAqdENBTiwgdWludDhfdCB1OFRlc3RNYXNrKTsKK3ZvaWQgQ0FOX0xlYXZlVGVzdE1vZGUoQ0FOX1QgKnRDQU4pOwordWludDMyX3QgQ0FOX0lzTmV3RGF0YVJlY2VpdmVkKENBTl9UICp0Q0FOLCB1aW50OF90IHU4TXNnT2JqKTsKK2ludDMyX3QgQ0FOX0Jhc2ljU2VuZE1zZyhDQU5fVCAqdENBTiwgU1RSX0NBTk1TR19UKiBwQ2FuTXNnKTsKK2ludDMyX3QgQ0FOX0Jhc2ljUmVjZWl2ZU1zZyhDQU5fVCAqdENBTiwgU1RSX0NBTk1TR19UKiBwQ2FuTXNnKTsKK2ludDMyX3QgQ0FOX1NldFJ4TXNnT2JqQW5kTXNrKENBTl9UICp0Q0FOLCB1aW50OF90IHU4TXNnT2JqLCB1aW50OF90IHU4aWRUeXBlLCB1aW50MzJfdCB1MzJpZCwgdWludDMyX3QgdTMyaWRtYXNrLCB1aW50OF90IHU4c2luZ2xlT3JGaWZvTGFzdCk7CitpbnQzMl90IENBTl9TZXRSeE1zZ09iaihDQU5fVCAqdENBTiwgdWludDhfdCB1OE1zZ09iaiwgdWludDhfdCB1OGlkVHlwZSwgdWludDMyX3QgdTMyaWQsIHVpbnQ4X3QgdThzaW5nbGVPckZpZm9MYXN0KTsKK2ludDMyX3QgQ0FOX1JlYWRNc2dPYmooQ0FOX1QgKnRDQU4sIHVpbnQ4X3QgdThNc2dPYmosIHVpbnQ4X3QgdThSZWxlYXNlLCBTVFJfQ0FOTVNHX1QqIHBDYW5Nc2cpOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ0FOX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENBTl9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ0FOX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9jbGsuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2Nsay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTFhYmQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9jbGsuaApAQCAtMCwwICsxLDg1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNsay5oCisgKiBAdmVyc2lvbiAgVjMuMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBDbG9jayBDb250cm9sbGVyIChDTEspIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0NMS19IX18KKyNkZWZpbmUgX19DTEtfSF9fCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQ0xLX0RyaXZlciBDTEsgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQ0xLX0VYUE9SVEVEX0NPTlNUQU5UUyBDTEsgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisKKyNkZWZpbmUgRlJFUV8yTUhaICAgICAgICAgIDIwMDAwMDBVTAorI2RlZmluZSBGUkVRXzhNSFogICAgICAgICAgODAwMDAwMFVMCisjZGVmaW5lIEZSRVFfMjRNSFogICAgICAgICAyNDAwMDAwMFVMCisjZGVmaW5lIEZSRVFfNDhNSFogICAgICAgICA0ODAwMDAwMFVMCisjZGVmaW5lIEZSRVFfNjRNSFogICAgICAgICA2NDAwMDAwMFVMCisjZGVmaW5lIEZSRVFfOTZNSFogICAgICAgICA5NjAwMDAwMFVMCisjZGVmaW5lIEZSRVFfMTQ0TUhaICAgICAgICAxNDQwMDAwMDBVTAorI2RlZmluZSBGUkVRXzIwME1IWiAgICAgICAgMjAwMDAwMDAwVUwKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDTEtTRUwwIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfSENMS1NFTF9IWFQgICAgICAgICAoMHgwMFVMPDxDTEtfQ0xLU0VMMF9IQ0xLU0VMX1BvcykgLyohPCBTZXR0aW5nIEhDTEsgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMF9IQ0xLU0VMX0xYVCAgICAgICAgICgweDAxVUw8PENMS19DTEtTRUwwX0hDTEtTRUxfUG9zKSAvKiE8IFNldHRpbmcgSENMSyBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwwX0hDTEtTRUxfUExMICAgICAgICAgKDB4MDJVTDw8Q0xLX0NMS1NFTDBfSENMS1NFTF9Qb3MpIC8qITwgU2V0dGluZyBIQ0xLIGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfSENMS1NFTF9MSVJDICAgICAgICAoMHgwM1VMPDxDTEtfQ0xLU0VMMF9IQ0xLU0VMX1BvcykgLyohPCBTZXR0aW5nIEhDTEsgY2xvY2sgc291cmNlIGFzIExJUkMgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfSENMS1NFTF9ISVJDNDggICAgICAoMHgwNVVMPDxDTEtfQ0xLU0VMMF9IQ0xLU0VMX1BvcykgLyohPCBTZXR0aW5nIEhDTEsgY2xvY2sgc291cmNlIGFzIEhJUkM0OCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMF9IQ0xLU0VMX0hJUkMgICAgICAgICgweDA3VUw8PENMS19DTEtTRUwwX0hDTEtTRUxfUG9zKSAvKiE8IFNldHRpbmcgSENMSyBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwwX1NUQ0xLU0VMX0hYVCAgICAgICAgKDB4MDBVTDw8Q0xLX0NMS1NFTDBfU1RDTEtTRUxfUG9zKSAvKiE8IFNldHRpbmcgU3lzVGljayBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwwX1NUQ0xLU0VMX0xYVCAgICAgICAgKDB4MDFVTDw8Q0xLX0NMS1NFTDBfU1RDTEtTRUxfUG9zKSAvKiE8IFNldHRpbmcgU3lzVGljayBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwwX1NUQ0xLU0VMX0hYVF9ESVYyICAgKDB4MDJVTDw8Q0xLX0NMS1NFTDBfU1RDTEtTRUxfUG9zKSAvKiE8IFNldHRpbmcgU3lzVGljayBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwwX1NUQ0xLU0VMX0hDTEtfRElWMiAgKDB4MDNVTDw8Q0xLX0NMS1NFTDBfU1RDTEtTRUxfUG9zKSAvKiE8IFNldHRpbmcgU3lzVGljayBjbG9jayBzb3VyY2UgYXMgSENMSy8yICovCisjZGVmaW5lIENMS19DTEtTRUwwX1NUQ0xLU0VMX0hJUkNfRElWMiAgKDB4MDdVTDw8Q0xLX0NMS1NFTDBfU1RDTEtTRUxfUG9zKSAvKiE8IFNldHRpbmcgU3lzVGljayBjbG9jayBzb3VyY2UgYXMgSElSQy8yICovCisjZGVmaW5lIENMS19DTEtTRUwwX1NUQ0xLU0VMX0hDTEsgICAgICAgKDB4MDFVTDw8U3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MpIC8qITwgU2V0dGluZyBTeXNUaWNrIGNsb2NrIHNvdXJjZSBhcyBIQ0xLICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDBfU0RIMFNFTF9IWFQgICAgICAgICAoMHgwMFVMPDxDTEtfQ0xLU0VMMF9TREgwU0VMX1BvcykgLyohPCBTZXR0aW5nIFNESDAgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMF9TREgwU0VMX1BMTCAgICAgICAgICgweDAxVUw8PENMS19DTEtTRUwwX1NESDBTRUxfUG9zKSAvKiE8IFNldHRpbmcgU0RIMCBjbG9jayBzb3VyY2UgYXMgUExMICovCisjZGVmaW5lIENMS19DTEtTRUwwX1NESDBTRUxfSENMSyAgICAgICAgKDB4MDJVTDw8Q0xLX0NMS1NFTDBfU0RIMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBTREgwIGNsb2NrIHNvdXJjZSBhcyBIQ0xLICovCisjZGVmaW5lIENMS19DTEtTRUwwX1NESDBTRUxfSElSQyAgICAgICAgKDB4MDNVTDw8Q0xLX0NMS1NFTDBfU0RIMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBTREgwIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDBfVVNCU0VMX0hJUkM0OCAgICAgICAoMHgwMFVMPDxDTEtfQ0xLU0VMMF9VU0JTRUxfUG9zKSAgLyohPCBTZXR0aW5nIFVTQiBjbG9jayBzb3VyY2UgYXMgSElSQzQ4ICovCisjZGVmaW5lIENMS19DTEtTRUwwX1VTQlNFTF9QTEwgICAgICAgICAgKDB4MDFVTDw8Q0xLX0NMS1NFTDBfVVNCU0VMX1BvcykgIC8qITwgU2V0dGluZyBVU0IgY2xvY2sgc291cmNlIGFzIFBMTCAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDTEtTRUwxIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfV0RUU0VMX0xYVCAgICAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMMV9XRFRTRUxfUG9zKSAgLyohPCBTZXR0aW5nIFdEVCBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwxX1dEVFNFTF9IQ0xLX0RJVjIwNDggICgweDJVTDw8Q0xLX0NMS1NFTDFfV0RUU0VMX1BvcykgIC8qITwgU2V0dGluZyBXRFQgY2xvY2sgc291cmNlIGFzIEhDTEsvMjA0OCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9XRFRTRUxfTElSQyAgICAgICAgICAoMHgzVUw8PENMS19DTEtTRUwxX1dEVFNFTF9Qb3MpICAvKiE8IFNldHRpbmcgV0RUIGNsb2NrIHNvdXJjZSBhcyBMSVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMFNFTF9IWFQgICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMMV9UTVIwU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDAgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIwU0VMX0xYVCAgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwxX1RNUjBTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMCBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjBTRUxfUENMSzAgICAgICAgICgweDJVTDw8Q0xLX0NMS1NFTDFfVE1SMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAwIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIwU0VMX0VYVF9UUkcgICAgICAoMHgzVUw8PENMS19DTEtTRUwxX1RNUjBTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMCBjbG9jayBzb3VyY2UgYXMgZXh0ZXJuYWwgdHJpZ2dlciAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIwU0VMX0xJUkMgICAgICAgICAoMHg1VUw8PENMS19DTEtTRUwxX1RNUjBTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMCBjbG9jayBzb3VyY2UgYXMgTElSQyAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIwU0VMX0hJUkMgICAgICAgICAoMHg3VUw8PENMS19DTEtTRUwxX1RNUjBTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMCBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjFTRUxfSFhUICAgICAgICAgICgweDBVTDw8Q0xLX0NMS1NFTDFfVE1SMVNFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAxIGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMVNFTF9MWFQgICAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMMV9UTVIxU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDEgY2xvY2sgc291cmNlIGFzIExYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIxU0VMX1BDTEswICAgICAgICAoMHgyVUw8PENMS19DTEtTRUwxX1RNUjFTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMSBjbG9jayBzb3VyY2UgYXMgUENMSzAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMVNFTF9FWFRfVFJHICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMMV9UTVIxU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDEgY2xvY2sgc291cmNlIGFzIGV4dGVybmFsIHRyaWdnZXIgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMVNFTF9MSVJDICAgICAgICAgKDB4NVVMPDxDTEtfQ0xLU0VMMV9UTVIxU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDEgY2xvY2sgc291cmNlIGFzIExJUkMgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMVNFTF9ISVJDICAgICAgICAgKDB4N1VMPDxDTEtfQ0xLU0VMMV9UTVIxU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDEgY2xvY2sgc291cmNlIGFzIEhJUkMgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIyU0VMX0hYVCAgICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwxX1RNUjJTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMiBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjJTRUxfTFhUICAgICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDFfVE1SMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAyIGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMlNFTF9QQ0xLMSAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMMV9UTVIyU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDIgY2xvY2sgc291cmNlIGFzIFBDTEsxICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjJTRUxfRVhUX1RSRyAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDFfVE1SMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAyIGNsb2NrIHNvdXJjZSBhcyBleHRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjJTRUxfTElSQyAgICAgICAgICgweDVVTDw8Q0xLX0NMS1NFTDFfVE1SMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAyIGNsb2NrIHNvdXJjZSBhcyBMSVJDICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjJTRUxfSElSQyAgICAgICAgICgweDdVTDw8Q0xLX0NMS1NFTDFfVE1SMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAyIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SM1NFTF9IWFQgICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMMV9UTVIzU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDMgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIzU0VMX0xYVCAgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwxX1RNUjNTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMyBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjNTRUxfUENMSzEgICAgICAgICgweDJVTDw8Q0xLX0NMS1NFTDFfVE1SM1NFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAzIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMSAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIzU0VMX0VYVF9UUkcgICAgICAoMHgzVUw8PENMS19DTEtTRUwxX1RNUjNTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMyBjbG9jayBzb3VyY2UgYXMgZXh0ZXJuYWwgdHJpZ2dlciAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIzU0VMX0xJUkMgICAgICAgICAoMHg1VUw8PENMS19DTEtTRUwxX1RNUjNTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMyBjbG9jayBzb3VyY2UgYXMgTElSQyAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIzU0VMX0hJUkMgICAgICAgICAoMHg3VUw8PENMS19DTEtTRUwxX1RNUjNTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMyBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwxX1VBUlQwU0VMX0hYVCAgICAgICAgICgweDBVTDw8Q0xLX0NMS1NFTDFfVUFSVDBTRUxfUG9zKSAvKiE8IFNldHRpbmcgVUFSVDAgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9VQVJUMFNFTF9QTEwgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwxX1VBUlQwU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQwIGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVUFSVDBTRUxfTFhUICAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMMV9VQVJUMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMCBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwxX1VBUlQwU0VMX0hJUkMgICAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDFfVUFSVDBTRUxfUG9zKSAvKiE8IFNldHRpbmcgVUFSVDAgY2xvY2sgc291cmNlIGFzIEhJUkMgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMV9VQVJUMVNFTF9IWFQgICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwxX1VBUlQxU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQxIGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVUFSVDFTRUxfUExMICAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMMV9VQVJUMVNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMSBjbG9jayBzb3VyY2UgYXMgUExMICovCisjZGVmaW5lIENMS19DTEtTRUwxX1VBUlQxU0VMX0xYVCAgICAgICAgICgweDJVTDw8Q0xLX0NMS1NFTDFfVUFSVDFTRUxfUG9zKSAvKiE8IFNldHRpbmcgVUFSVDEgY2xvY2sgc291cmNlIGFzIExYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9VQVJUMVNFTF9ISVJDICAgICAgICAoMHgzVUw8PENMS19DTEtTRUwxX1VBUlQxU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQxIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDFfQ0xLT1NFTF9IWFQgICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMMV9DTEtPU0VMX1BvcykgLyohPCBTZXR0aW5nIENMS08gY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9DTEtPU0VMX0xYVCAgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwxX0NMS09TRUxfUG9zKSAvKiE8IFNldHRpbmcgQ0xLTyBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwxX0NMS09TRUxfSENMSyAgICAgICAgICgweDJVTDw8Q0xLX0NMS1NFTDFfQ0xLT1NFTF9Qb3MpIC8qITwgU2V0dGluZyBDTEtPIGNsb2NrIHNvdXJjZSBhcyBIQ0xLICovCisjZGVmaW5lIENMS19DTEtTRUwxX0NMS09TRUxfSElSQyAgICAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDFfQ0xLT1NFTF9Qb3MpIC8qITwgU2V0dGluZyBDTEtPIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDFfV1dEVFNFTF9IQ0xLX0RJVjIwNDggKDB4MlVMPDxDTEtfQ0xLU0VMMV9XV0RUU0VMX1BvcykgLyohPCBTZXR0aW5nIFdXRFQgY2xvY2sgc291cmNlIGFzIEhDTEsvMjA0OCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9XV0RUU0VMX0xJUkMgICAgICAgICAoMHgzVUw8PENMS19DTEtTRUwxX1dXRFRTRUxfUG9zKSAvKiE8IFNldHRpbmcgV1dEVCBjbG9jayBzb3VyY2UgYXMgTElSQyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDTEtTRUwyIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfRVBXTTBTRUxfUENMSzAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMMl9FUFdNMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBFUFdNMCBjbG9jayBzb3VyY2UgYXMgUENMSzAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfRVBXTTFTRUxfUENMSzEgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMMl9FUFdNMVNFTF9Qb3MpIC8qITwgU2V0dGluZyBFUFdNMSBjbG9jayBzb3VyY2UgYXMgUENMSzEgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMl9CUFdNMFNFTF9QQ0xLMCAgICAgICAoMHgxVUw8PENMS19DTEtTRUwyX0JQV00wU0VMX1BvcykgLyohPCBTZXR0aW5nIEJQV00wIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9CUFdNMVNFTF9QQ0xLMSAgICAgICAoMHgxVUw8PENMS19DTEtTRUwyX0JQV00xU0VMX1BvcykgLyohPCBTZXR0aW5nIEJQV00xIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMSAqLworCisjZGVmaW5lIENMS19DTEtTRUwyX1FTUEkwU0VMX0hYVCAgICAgICAgICgweDBVTDw8Q0xLX0NMS1NFTDJfUVNQSTBTRUxfUG9zKSAvKiE8IFNldHRpbmcgUVNQSTAgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9QTEwgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwyX1FTUEkwU0VMX1BvcykgLyohPCBTZXR0aW5nIFFTUEkwIGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUENMSzAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBRU1BJMCBjbG9jayBzb3VyY2UgYXMgUENMSzAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfSElSQyAgICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBRU1BJMCBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTBTRUxfSFhUICAgICAgICAgICgweDBVTDw8Q0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBTUEkwIGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJMFNFTF9QTEwgICAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgLyohPCBTZXR0aW5nIFNQSTAgY2xvY2sgc291cmNlIGFzIFBMTCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BDTEsxICAgICAgICAoMHgyVUw8PENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSAvKiE8IFNldHRpbmcgU1BJMCBjbG9jayBzb3VyY2UgYXMgUENMSzEgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJMFNFTF9ISVJDICAgICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgLyohPCBTZXR0aW5nIFNQSTAgY2xvY2sgc291cmNlIGFzIEhJUkMgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkxU0VMX0hYVCAgICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSAvKiE8IFNldHRpbmcgU1BJMSBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTFTRUxfUExMICAgICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpIC8qITwgU2V0dGluZyBTUEkxIGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJMVNFTF9QQ0xLMCAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgLyohPCBTZXR0aW5nIFNQSTEgY2xvY2sgc291cmNlIGFzIFBDTEswICovCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTFTRUxfSElSQyAgICAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpIC8qITwgU2V0dGluZyBTUEkxIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJMlNFTF9IWFQgICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgLyohPCBTZXR0aW5nIFNQSTIgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BMTCAgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSAvKiE8IFNldHRpbmcgU1BJMiBjbG9jayBzb3VyY2UgYXMgUExMICovCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTJTRUxfUENMSzEgICAgICAgICgweDJVTDw8Q0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBTUEkyIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMSAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkyU0VMX0hJUkMgICAgICAgICAoMHgzVUw8PENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSAvKiE8IFNldHRpbmcgU1BJMiBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTNTRUxfSFhUICAgICAgICAgICgweDBVTDw8Q0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpIC8qITwgU2V0dGluZyBTUEkzIGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJM1NFTF9QTEwgICAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgLyohPCBTZXR0aW5nIFNQSTMgY2xvY2sgc291cmNlIGFzIFBMTCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BDTEswICAgICAgICAoMHgyVUw8PENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSAvKiE8IFNldHRpbmcgU1BJMyBjbG9jayBzb3VyY2UgYXMgUENMSzAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJM1NFTF9ISVJDICAgICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgLyohPCBTZXR0aW5nIFNQSTMgY2xvY2sgc291cmNlIGFzIEhJUkMgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQ0xLU0VMMyBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENMS19DTEtTRUwzX1NDMFNFTF9IWFQgICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMM19TQzBTRUxfUG9zKSAvKiE8IFNldHRpbmcgU0MwIGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfU0MwU0VMX1BMTCAgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwzX1NDMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBTQzAgY2xvY2sgc291cmNlIGFzIFBMTCAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19TQzBTRUxfUENMSzAgICAgICAgICgweDJVTDw8Q0xLX0NMS1NFTDNfU0MwU0VMX1BvcykgLyohPCBTZXR0aW5nIFNDMCBjbG9jayBzb3VyY2UgYXMgUENMSzAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfU0MwU0VMX0hJUkMgICAgICAgICAoMHgzVUw8PENMS19DTEtTRUwzX1NDMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBTQzAgY2xvY2sgc291cmNlIGFzIEhJUkMgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMM19TQzFTRUxfSFhUICAgICAgICAgICgweDBVTDw8Q0xLX0NMS1NFTDNfU0MxU0VMX1BvcykgLyohPCBTZXR0aW5nIFNDMSBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwzX1NDMVNFTF9QTEwgICAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMM19TQzFTRUxfUG9zKSAvKiE8IFNldHRpbmcgU0MxIGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfU0MxU0VMX1BDTEsxICAgICAgICAoMHgyVUw8PENMS19DTEtTRUwzX1NDMVNFTF9Qb3MpIC8qITwgU2V0dGluZyBTQzEgY2xvY2sgc291cmNlIGFzIFBDTEsxICovCisjZGVmaW5lIENMS19DTEtTRUwzX1NDMVNFTF9ISVJDICAgICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMM19TQzFTRUxfUG9zKSAvKiE8IFNldHRpbmcgU0MxIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfU0MyU0VMX0hYVCAgICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwzX1NDMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBTQzIgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19TQzJTRUxfUExMICAgICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDNfU0MyU0VMX1BvcykgLyohPCBTZXR0aW5nIFNDMiBjbG9jayBzb3VyY2UgYXMgUExMICovCisjZGVmaW5lIENMS19DTEtTRUwzX1NDMlNFTF9QQ0xLMCAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMM19TQzJTRUxfUG9zKSAvKiE8IFNldHRpbmcgU0MyIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMSAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19TQzJTRUxfSElSQyAgICAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDNfU0MyU0VMX1BvcykgLyohPCBTZXR0aW5nIFNDMiBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX1JUQ1NFTF9MWFQgICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMM19SVENTRUxfUG9zKSAgLyohPCBTZXR0aW5nIFJUQyBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwzX1JUQ1NFTF9MSVJDICAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMM19SVENTRUxfUG9zKSAgLyohPCBTZXR0aW5nIFJUQyBjbG9jayBzb3VyY2UgYXMgTElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX0kyUzBTRUxfSFhUICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMM19JMlMwU0VMX1BvcykgLyohPCBTZXR0aW5nIEkyUzAgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19JMlMwU0VMX1BMTCAgICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDNfSTJTMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBJMlMwIGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfSTJTMFNFTF9QQ0xLMCAgICAgICAoMHgyVUw8PENMS19DTEtTRUwzX0kyUzBTRUxfUG9zKSAvKiE8IFNldHRpbmcgSTJTMCBjbG9jayBzb3VyY2UgYXMgUENMSzAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfSTJTMFNFTF9ISVJDICAgICAgICAoMHgzVUw8PENMS19DTEtTRUwzX0kyUzBTRUxfUG9zKSAvKiE8IFNldHRpbmcgSTJTMCBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQyU0VMX0hYVCAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMM19VQVJUMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMiBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQyU0VMX1BMTCAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMM19VQVJUMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMiBjbG9jayBzb3VyY2UgYXMgUExMICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQyU0VMX0xYVCAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMM19VQVJUMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMiBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQyU0VMX0hJUkMgICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMM19VQVJUMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMiBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQzU0VMX0hYVCAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMM19VQVJUM1NFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMyBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQzU0VMX1BMTCAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMM19VQVJUM1NFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMyBjbG9jayBzb3VyY2UgYXMgUExMICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQzU0VMX0xYVCAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMM19VQVJUM1NFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMyBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQzU0VMX0hJUkMgICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMM19VQVJUM1NFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMyBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQ0U0VMX0hYVCAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMM19VQVJUNFNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUNCBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQ0U0VMX1BMTCAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMM19VQVJUNFNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUNCBjbG9jayBzb3VyY2UgYXMgUExMICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQ0U0VMX0xYVCAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMM19VQVJUNFNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUNCBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQ0U0VMX0hJUkMgICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMM19VQVJUNFNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUNCBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQ1U0VMX0hYVCAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMM19VQVJUNVNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUNSBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQ1U0VMX1BMTCAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMM19VQVJUNVNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUNSBjbG9jayBzb3VyY2UgYXMgUExMICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQ1U0VMX0xYVCAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMM19VQVJUNVNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUNSBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQ1U0VMX0hJUkMgICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMM19VQVJUNVNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUNSBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDTEtESVYwIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjBfSENMSyh4KSAgICAgKCgoeCktMVVMKSA8PCBDTEtfQ0xLRElWMF9IQ0xLRElWX1BvcykgIC8qITwgQ0xLRElWMCBTZXR0aW5nIGZvciBIQ0xLIGNsb2NrIGRpdmlkZXIuIEl0IGNvdWxkIGJlIDF+MTYgKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjBfVVNCKHgpICAgICAgKCgoeCktMVVMKSA8PCBDTEtfQ0xLRElWMF9VU0JESVZfUG9zKSAgIC8qITwgQ0xLRElWMCBTZXR0aW5nIGZvciBVU0IgY2xvY2sgZGl2aWRlci4gSXQgY291bGQgYmUgMX4xNiAqLworI2RlZmluZSBDTEtfQ0xLRElWMF9VQVJUMCh4KSAgICAoKCh4KS0xVUwpIDw8IENMS19DTEtESVYwX1VBUlQwRElWX1BvcykgLyohPCBDTEtESVYwIFNldHRpbmcgZm9yIFVBUlQwIGNsb2NrIGRpdmlkZXIuIEl0IGNvdWxkIGJlIDF+MTYgKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjBfVUFSVDEoeCkgICAgKCgoeCktMVVMKSA8PCBDTEtfQ0xLRElWMF9VQVJUMURJVl9Qb3MpIC8qITwgQ0xLRElWMCBTZXR0aW5nIGZvciBVQVJUMSBjbG9jayBkaXZpZGVyLiBJdCBjb3VsZCBiZSAxfjE2ICovCisjZGVmaW5lIENMS19DTEtESVYwX0VBREMoeCkgICAgICgoKHgpLTFVTCkgPDwgQ0xLX0NMS0RJVjBfRUFEQ0RJVl9Qb3MpICAvKiE8IENMS0RJVjAgU2V0dGluZyBmb3IgRUFEQyBjbG9jayBkaXZpZGVyLiBJdCBjb3VsZCBiZSAxfjI1NiAqLworI2RlZmluZSBDTEtfQ0xLRElWMF9TREgwKHgpICAgICAoKCh4KS0xVUwpIDw8IENMS19DTEtESVYwX1NESDBESVZfUG9zKSAgLyohPCBDTEtESVYwIFNldHRpbmcgZm9yIFNESDAgY2xvY2sgZGl2aWRlci4gSXQgY291bGQgYmUgMX4yNTYgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQ0xLRElWMSBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENMS19DTEtESVYxX1NDMCh4KSAgICAgICgoKHgpLTFVTCkgPDwgQ0xLX0NMS0RJVjFfU0MwRElWX1BvcykgIC8qITwgQ0xLRElWMSBTZXR0aW5nIGZvciBTQzAgY2xvY2sgZGl2aWRlci4gSXQgY291bGQgYmUgMX4yNTYgKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjFfU0MxKHgpICAgICAgKCgoeCktMVVMKSA8PCBDTEtfQ0xLRElWMV9TQzFESVZfUG9zKSAgLyohPCBDTEtESVYxIFNldHRpbmcgZm9yIFNDMSBjbG9jayBkaXZpZGVyLiBJdCBjb3VsZCBiZSAxfjI1NiAqLworI2RlZmluZSBDTEtfQ0xLRElWMV9TQzIoeCkgICAgICAoKCh4KS0xVUwpIDw8IENMS19DTEtESVYxX1NDMkRJVl9Qb3MpICAvKiE8IENMS0RJVjEgU2V0dGluZyBmb3IgU0MyIGNsb2NrIGRpdmlkZXIuIEl0IGNvdWxkIGJlIDF+MjU2ICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENMS0RJVjQgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDTEtfQ0xLRElWNF9VQVJUMih4KSAgICAgKCgoeCktMVVMKSA8PCBDTEtfQ0xLRElWNF9VQVJUMkRJVl9Qb3MpICAvKiE8IENMS0RJVjQgU2V0dGluZyBmb3IgVUFSVDIgY2xvY2sgZGl2aWRlci4gSXQgY291bGQgYmUgMX4xNiAqLworI2RlZmluZSBDTEtfQ0xLRElWNF9VQVJUMyh4KSAgICAgKCgoeCktMVVMKSA8PCBDTEtfQ0xLRElWNF9VQVJUM0RJVl9Qb3MpICAvKiE8IENMS0RJVjQgU2V0dGluZyBmb3IgVUFSVDMgY2xvY2sgZGl2aWRlci4gSXQgY291bGQgYmUgMX4xNiAqLworI2RlZmluZSBDTEtfQ0xLRElWNF9VQVJUNCh4KSAgICAgKCgoeCktMVVMKSA8PCBDTEtfQ0xLRElWNF9VQVJUNERJVl9Qb3MpICAvKiE8IENMS0RJVjQgU2V0dGluZyBmb3IgVUFSVDQgY2xvY2sgZGl2aWRlci4gSXQgY291bGQgYmUgMX4xNiAqLworI2RlZmluZSBDTEtfQ0xLRElWNF9VQVJUNSh4KSAgICAgKCgoeCktMVVMKSA8PCBDTEtfQ0xLRElWNF9VQVJUNURJVl9Qb3MpICAvKiE8IENMS0RJVjQgU2V0dGluZyBmb3IgVUFSVDUgY2xvY2sgZGl2aWRlci4gSXQgY291bGQgYmUgMX4xNiAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBQQ0xLRElWIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMERJVl9ESVYxICAgICAgICAgICAgKDB4MFVMIDw8IENMS19QQ0xLRElWX0FQQjBESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEswID0gSENMSyAgICAgICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjBESVZfRElWMiAgICAgICAgICAgICgweDFVTCA8PCBDTEtfUENMS0RJVl9BUEIwRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMCA9IDEvMiBIQ0xLICAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIwRElWX0RJVjQgICAgICAgICAgICAoMHgyVUwgPDwgQ0xLX1BDTEtESVZfQVBCMERJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzAgPSAxLzQgSENMSyAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMERJVl9ESVY4ICAgICAgIAkgICAgKDB4M1VMIDw8IENMS19QQ0xLRElWX0FQQjBESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEswID0gMS84IEhDTEsgICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjBESVZfRElWMTYgICAgICAJICAgICgweDRVTCA8PCBDTEtfUENMS0RJVl9BUEIwRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMCA9IDEvMTYgSENMSyAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIwRElWX0RJVjMyICAgICAgCSAgICAoMHg1VUwgPDwgQ0xLX1BDTEtESVZfQVBCMERJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzAgPSAxLzMyIEhDTEsgKi8KKworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIwRElWX0hDTEsgICAgICAgICAgICAoMHgwVUwgPDwgQ0xLX1BDTEtESVZfQVBCMERJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzAgPSBIQ0xLICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMERJVl9IQ0xLX0RJVjIgICAgICAgKDB4MVVMIDw8IENMS19QQ0xLRElWX0FQQjBESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEswID0gMS8yIEhDTEsgICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjBESVZfSENMS19ESVY0ICAgICAgICgweDJVTCA8PCBDTEtfUENMS0RJVl9BUEIwRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMCA9IDEvNCBIQ0xLICAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIwRElWX0hDTEtfRElWOCAgICAgICAoMHgzVUwgPDwgQ0xLX1BDTEtESVZfQVBCMERJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzAgPSAxLzggSENMSyAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMERJVl9IQ0xLX0RJVjE2ICAgICAgKDB4NFVMIDw8IENMS19QQ0xLRElWX0FQQjBESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEswID0gMS8xNiBIQ0xLICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjBESVZfSENMS19ESVYzMiAgICAgICgweDVVTCA8PCBDTEtfUENMS0RJVl9BUEIwRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMCA9IDEvMzIgSENMSyAqLworCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjFESVZfRElWMSAgICAgICAgICAgICgweDBVTCA8PCBDTEtfUENMS0RJVl9BUEIxRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMSA9IEhDTEsgICAgICAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIxRElWX0RJVjIgICAgICAgCSAgICAoMHgxVUwgPDwgQ0xLX1BDTEtESVZfQVBCMURJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzEgPSAxLzIgSENMSyAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMURJVl9ESVY0ICAgICAgIAkgICAgKDB4MlVMIDw8IENMS19QQ0xLRElWX0FQQjFESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEsxID0gMS80IEhDTEsgICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjFESVZfRElWOCAgICAgICAJICAgICgweDNVTCA8PCBDTEtfUENMS0RJVl9BUEIxRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMSA9IDEvOCBIQ0xLICAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIxRElWX0RJVjE2ICAgICAgCSAgICAoMHg0VUwgPDwgQ0xLX1BDTEtESVZfQVBCMURJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzEgPSAxLzE2IEhDTEsgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMURJVl9ESVYzMiAgICAgIAkgICAgKDB4NVVMIDw8IENMS19QQ0xLRElWX0FQQjFESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEsxID0gMS8zMiBIQ0xLICovCisKKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMURJVl9IQ0xLICAgICAgICAgICAgKDB4MFVMIDw8IENMS19QQ0xLRElWX0FQQjFESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEsxID0gSENMSyAgICAgICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjFESVZfSENMS19ESVYyICAgICAgICgweDFVTCA8PCBDTEtfUENMS0RJVl9BUEIxRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMSA9IDEvMiBIQ0xLICAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIxRElWX0hDTEtfRElWNCAgICAgICAoMHgyVUwgPDwgQ0xLX1BDTEtESVZfQVBCMURJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzEgPSAxLzQgSENMSyAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMURJVl9IQ0xLX0RJVjggICAgICAgKDB4M1VMIDw8IENMS19QQ0xLRElWX0FQQjFESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEsxID0gMS84IEhDTEsgICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjFESVZfSENMS19ESVYxNiAgICAgICgweDRVTCA8PCBDTEtfUENMS0RJVl9BUEIxRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMSA9IDEvMTYgSENMSyAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIxRElWX0hDTEtfRElWMzIgICAgICAoMHg1VUwgPDwgQ0xLX1BDTEtESVZfQVBCMURJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzEgPSAxLzMyIEhDTEsgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgUExMQ1RMIGNvbnN0YW50IGRlZmluaXRpb25zLiBQTEwgPSBGSU4gKiAoMipORikgLyBOUiAvIE5PICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENMS19QTExDVExfUExMU1JDX0hYVCAgIDB4MDAwMDAwMDBVTCAgICAvKiE8IEZvciBQTEwgY2xvY2sgc291cmNlIGlzIEhYVC4gIDJNSHogPCBGSU4vTlIgPCA4TUh6ICovCisjZGVmaW5lIENMS19QTExDVExfUExMU1JDX0hJUkMgIDB4MDAwODAwMDBVTCAgICAvKiE8IEZvciBQTEwgY2xvY2sgc291cmNlIGlzIEhJUkMuIDJNSHogPCBGSU4vTlIgPCA4TUh6ICovCisKKyNkZWZpbmUgQ0xLX1BMTENUTF9ORih4KSAgICAgICAgKCh4KS0yVUwpICAgICAgICAgLyohPCB4IG11c3QgYmUgY29uc3RhbnQgYW5kIDIgPD0geCA8PSA1MTMuIDk2TUh6IDwgRklOKigyKk5GKS9OUiA8IDIwME1IeiAqLworI2RlZmluZSBDTEtfUExMQ1RMX05SKHgpICAgICAgICAoKCh4KS0xVUwpPDw5KSAgICAvKiE8IHggbXVzdCBiZSBjb25zdGFudCBhbmQgMiA8PSB4IDw9IDMzLiAgMk1IeiA8IEZJTi9OUiA8IDhNSHogKi8KKworI2RlZmluZSBDTEtfUExMQ1RMX05PXzEgICAgICAgICAweDAwMDBVTCAgICAgICAgLyohPCBGb3Igb3V0cHV0IGRpdmlkZXIgaXMgMSAqLworI2RlZmluZSBDTEtfUExMQ1RMX05PXzIgICAgICAgICAweDQwMDBVTCAgICAgICAgLyohPCBGb3Igb3V0cHV0IGRpdmlkZXIgaXMgMiAqLworI2RlZmluZSBDTEtfUExMQ1RMX05PXzQgICAgICAgICAweEMwMDBVTCAgICAgICAgLyohPCBGb3Igb3V0cHV0IGRpdmlkZXIgaXMgNCAqLworCisjZGVmaW5lIENMS19QTExDVExfNDhNSHpfSFhUICAgIChDTEtfUExMQ1RMX1BMTFNSQ19IWFQgIHwgQ0xLX1BMTENUTF9OUigyVUwpIHwgQ0xLX1BMTENUTF9ORigxNlVMKSB8IENMS19QTExDVExfTk9fNCkgLyohPCBQcmVkZWZpbmVkIFBMTENUTCBzZXR0aW5nIGZvciA0OE1IeiBQTEwgb3V0cHV0IHdpdGggSFhUICovCisjZGVmaW5lIENMS19QTExDVExfNDhNSHpfSElSQyAgIChDTEtfUExMQ1RMX1BMTFNSQ19ISVJDIHwgQ0xLX1BMTENUTF9OUigyVUwpIHwgQ0xLX1BMTENUTF9ORigxNlVMKSB8IENMS19QTExDVExfTk9fNCkgLyohPCBQcmVkZWZpbmVkIFBMTENUTCBzZXR0aW5nIGZvciA0OE1IeiBQTEwgb3V0cHV0IHdpdGggSElSQyAqLworCisjZGVmaW5lIENMS19QTExDVExfNjRNSHpfSFhUICAgIChDTEtfUExMQ1RMX1BMTFNSQ19IWFQgIHwgQ0xLX1BMTENUTF9OUigzVUwpIHwgQ0xLX1BMTENUTF9ORigxNlVMKSB8IENMS19QTExDVExfTk9fMikgLyohPCBQcmVkZWZpbmVkIFBMTENUTCBzZXR0aW5nIGZvciA2NE1IeiBQTEwgb3V0cHV0IHdpdGggSFhUICovCisjZGVmaW5lIENMS19QTExDVExfNjRNSHpfSElSQyAgIChDTEtfUExMQ1RMX1BMTFNSQ19ISVJDIHwgQ0xLX1BMTENUTF9OUigzVUwpIHwgQ0xLX1BMTENUTF9ORigxNlVMKSB8IENMS19QTExDVExfTk9fMikgLyohPCBQcmVkZWZpbmVkIFBMTENUTCBzZXR0aW5nIGZvciA2NEh6IFBMTCBvdXRwdXQgd2l0aCBISVJDICovCisKKyNkZWZpbmUgQ0xLX1BMTENUTF85Nk1Iel9IWFQgICAgKENMS19QTExDVExfUExMU1JDX0hYVCAgfCBDTEtfUExMQ1RMX05SKDJVTCkgfCBDTEtfUExMQ1RMX05GKDE2VUwpIHwgQ0xLX1BMTENUTF9OT18yKSAvKiE8IFByZWRlZmluZWQgUExMQ1RMIHNldHRpbmcgZm9yIDk2TUh6IFBMTCBvdXRwdXQgd2l0aCBIWFQgKi8KKyNkZWZpbmUgQ0xLX1BMTENUTF85Nk1Iel9ISVJDICAgKENMS19QTExDVExfUExMU1JDX0hJUkMgfCBDTEtfUExMQ1RMX05SKDJVTCkgfCBDTEtfUExMQ1RMX05GKDE2VUwpIHwgQ0xLX1BMTENUTF9OT18yKSAvKiE8IFByZWRlZmluZWQgUExMQ1RMIHNldHRpbmcgZm9yIDk2TUh6IFBMTCBvdXRwdXQgd2l0aCBISVJDICovCisKKyNkZWZpbmUgQ0xLX1BMTENUTF8xMjhNSHpfSFhUICAgIChDTEtfUExMQ1RMX1BMTFNSQ19IWFQgIHwgQ0xLX1BMTENUTF9OUigzVUwpIHwgQ0xLX1BMTENUTF9ORigxNlVMKSB8IENMS19QTExDVExfTk9fMSkgLyohPCBQcmVkZWZpbmVkIFBMTENUTCBzZXR0aW5nIGZvciAxMjhNSHogUExMIG91dHB1dCB3aXRoIEhYVCAqLworI2RlZmluZSBDTEtfUExMQ1RMXzEyOE1Iel9ISVJDICAgKENMS19QTExDVExfUExMU1JDX0hJUkMgfCBDTEtfUExMQ1RMX05SKDNVTCkgfCBDTEtfUExMQ1RMX05GKDE2VUwpIHwgQ0xLX1BMTENUTF9OT18xKSAvKiE8IFByZWRlZmluZWQgUExMQ1RMIHNldHRpbmcgZm9yIDEyOE1IeiBQTEwgb3V0cHV0IHdpdGggSElSQyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBNT0RVTEUgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEFQQkNMSygzMTozMCl8Q0xLU0VMKDI5OjI4KXxDTEtTRUxfTXNrKDI3OjI1KSB8Q0xLU0VMX1BvcygyNDoyMCl8Q0xLRElWKDE5OjE4KXxDTEtESVZfTXNrKDE3OjEwKXxDTEtESVZfUG9zKDk6NSl8SVBfRU5fUG9zKDQ6MCkgKi8KKworI2RlZmluZSBNT0RVTEVfQVBCQ0xLKHgpICAgICAgICAoKCh4KSA+PjMwKSAmIDB4M1VMKSAgICAvKiE8IENhbGN1bGF0ZSBBSEJDTEsvQVBCQ0xLIG9mZnNldCBvbiBNT0RVTEUgaW5kZXgsIDB4MDpBSEJDTEssIDB4MTpBUEJDTEswLCAweDI6QVBCQ0xLMSAqLworI2RlZmluZSBNT0RVTEVfQ0xLU0VMKHgpICAgICAgICAoKCh4KSA+PjI4KSAmIDB4M1VMKSAgICAvKiE8IENhbGN1bGF0ZSBDTEtTRUwgb2Zmc2V0IG9uIE1PRFVMRSBpbmRleCwgMHgwOkNMS1NFTDAsIDB4MTpDTEtTRUwxLCAweDI6Q0xLU0VMMiwgMHgzOkNMS1NFTDMgKi8KKyNkZWZpbmUgTU9EVUxFX0NMS1NFTF9Nc2soeCkgICAgKCgoeCkgPj4yNSkgJiAweDdVTCkgICAgLyohPCBDYWxjdWxhdGUgQ0xLU0VMIG1hc2sgb2Zmc2V0IG9uIE1PRFVMRSBpbmRleCAqLworI2RlZmluZSBNT0RVTEVfQ0xLU0VMX1Bvcyh4KSAgICAoKCh4KSA+PjIwKSAmIDB4MWZVTCkgICAvKiE8IENhbGN1bGF0ZSBDTEtTRUwgcG9zaXRpb24gb2Zmc2V0IG9uIE1PRFVMRSBpbmRleCAqLworI2RlZmluZSBNT0RVTEVfQ0xLRElWKHgpICAgICAgICAoKCh4KSA+PjE4KSAmIDB4M1VMKSAgICAvKiE8IENhbGN1bGF0ZSBBUEJDTEsgQ0xLRElWIG9uIE1PRFVMRSBpbmRleCwgMHgwOkNMS0RJVjAsIDB4MTpDTEtESVYxLCAweDQ6Q0xLRElWNCAqLworI2RlZmluZSBNT0RVTEVfQ0xLRElWX01zayh4KSAgICAoKCh4KSA+PjEwKSAmIDB4ZmZVTCkgICAvKiE8IENhbGN1bGF0ZSBDTEtESVYgbWFzayBvZmZzZXQgb24gTU9EVUxFIGluZGV4ICovCisjZGVmaW5lIE1PRFVMRV9DTEtESVZfUG9zKHgpICAgICgoKHgpID4+NSApICYgMHgxZlVMKSAgIC8qITwgQ2FsY3VsYXRlIENMS0RJViBwb3NpdGlvbiBvZmZzZXQgb24gTU9EVUxFIGluZGV4ICovCisjZGVmaW5lIE1PRFVMRV9JUF9FTl9Qb3MoeCkgICAgICgoKHgpID4+MCApICYgMHgxZlVMKSAgIC8qITwgQ2FsY3VsYXRlIEFQQkNMSyBvZmZzZXQgb24gTU9EVUxFIGluZGV4ICovCisjZGVmaW5lIE1PRFVMRV9Ob01zayAgICAgICAgICAgIDB4MFVMICAgICAgICAgICAgICAgICAgICAgLyohPCBOb3QgbWFzayBvbiBNT0RVTEUgaW5kZXggKi8KKyNkZWZpbmUgTkEgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX05vTXNrICAgICAgICAgICAgICAvKiE8IE5vdCBBdmFpbGFibGUgKi8KKworI2RlZmluZSBNT0RVTEVfQVBCQ0xLX0VOQyh4KSAgICAgICAgKCgoeCkgJiAweDAzVUwpIDw8IDMwKSAgIC8qITwgTU9EVUxFIGluZGV4LCAweDA6QUhCQ0xLLCAweDE6QVBCQ0xLMCwgMHgyOkFQQkNMSzEgKi8KKyNkZWZpbmUgTU9EVUxFX0NMS1NFTF9FTkMoeCkgICAgICAgICgoKHgpICYgMHgwM1VMKSA8PCAyOCkgICAvKiE8IENMS1NFTCBvZmZzZXQgb24gTU9EVUxFIGluZGV4LCAweDA6Q0xLU0VMMCwgMHgxOkNMS1NFTDEsIDB4MjpDTEtTRUwyLCAweDM6Q0xLU0VMMyAqLworI2RlZmluZSBNT0RVTEVfQ0xLU0VMX01za19FTkMoeCkgICAgKCgoeCkgJiAweDA3VUwpIDw8IDI1KSAgIC8qITwgQ0xLU0VMIG1hc2sgb2Zmc2V0IG9uIE1PRFVMRSBpbmRleCAqLworI2RlZmluZSBNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoeCkgICAgKCgoeCkgJiAweDFmVUwpIDw8IDIwKSAgIC8qITwgQ0xLU0VMIHBvc2l0aW9uIG9mZnNldCBvbiBNT0RVTEUgaW5kZXggKi8KKyNkZWZpbmUgTU9EVUxFX0NMS0RJVl9FTkMoeCkgICAgICAgICgoKHgpICYgMHgwM1VMKSA8PCAxOCkgICAvKiE8IEFQQkNMSyBDTEtESVYgb24gTU9EVUxFIGluZGV4LCAweDA6Q0xLRElWLCAweDE6Q0xLRElWMSwgMHg0OkNMS0RJVjQgKi8KKyNkZWZpbmUgTU9EVUxFX0NMS0RJVl9Nc2tfRU5DKHgpICAgICgoKHgpICYgMHhmZlVMKSA8PCAxMCkgICAvKiE8IENMS0RJViBtYXNrIG9mZnNldCBvbiBNT0RVTEUgaW5kZXggKi8KKyNkZWZpbmUgTU9EVUxFX0NMS0RJVl9Qb3NfRU5DKHgpICAgICgoKHgpICYgMHgxZlVMKSA8PCAgNSkgICAvKiE8IENMS0RJViBwb3NpdGlvbiBvZmZzZXQgb24gTU9EVUxFIGluZGV4ICovCisjZGVmaW5lIE1PRFVMRV9JUF9FTl9Qb3NfRU5DKHgpICAgICAoKCh4KSAmIDB4MWZVTCkgPDwgIDApICAgLyohPCBBSEJDTEsvQVBCQ0xLIG9mZnNldCBvbiBNT0RVTEUgaW5kZXggKi8KKworCisvKiBBSEJDTEsgKi8KKyNkZWZpbmUgUERNQTBfTU9EVUxFICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAwVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQUhCQ0xLX1BETUEwQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBQRE1BIE1vZHVsZSAqLworCisjZGVmaW5lIFBETUExX01PRFVMRSAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMFVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FIQkNMS19QRE1BMUNLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgIC8qITwgUERNQSBNb2R1bGUgKi8KKworI2RlZmluZSBJU1BfTU9EVUxFICAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDBVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BSEJDTEtfSVNQQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBJU1AgTW9kdWxlICovCisKKyNkZWZpbmUgRUJJX01PRFVMRSAgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAwVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQUhCQ0xLX0VCSUNLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgIC8qITwgRUJJIE1vZHVsZSAqLworCisjZGVmaW5lIFNESDBfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMFVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FIQkNMS19TREgwQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAwVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggICAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQygyMFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggMFVMKXxNT0RVTEVfQ0xLRElWX01za19FTkMoMHhGRlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoMjRVTCkpLyohPCBTREgwIE1vZHVsZSAqLworCisjZGVmaW5lIENSQ19NT0RVTEUgICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMFVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FIQkNMS19DUkNDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgIC8qITwgQ1JDIE1vZHVsZSAqLworCisjZGVmaW5lIENSUFRfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMFVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FIQkNMS19DUlBUQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBDUlBUIE1vZHVsZSAqLworCisjZGVmaW5lIEZNQ0lETEVfTU9EVUxFIChNT0RVTEVfQVBCQ0xLX0VOQyggMCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoQ0xLX0FIQkNMS19GTUNJRExFX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgICAgLyohPCBGTUNJRExFIE1vZHVsZSAqLworCisjZGVmaW5lIFVTQkhfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMFVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FIQkNMS19VU0JIQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAwVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggIDFVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKCA4VUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAwVUwpfE1PRFVMRV9DTEtESVZfTXNrX0VOQygweEZVTCl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKCA0VUwpKSAgLyohPCBVU0JIIE1vZHVsZSAqLworCisvKiBBUEJDTEswICovCisjZGVmaW5lIFdEVF9NT0RVTEUgICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfV0RUQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAxVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoIDBVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyggTkEpKSAgICAvKiE8IFdEVCBNb2R1bGUgKi8KKworI2RlZmluZSBXV0RUX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1dEVENLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggMVVMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKDMwVUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgLyohPCBXV0RUIE1vZHVsZSAqLworCisjZGVmaW5lIFJUQ19NT0RVTEUgICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfUlRDQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggMVVMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoIDhVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoICAgTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAvKiE8IFJUQyBNb2R1bGUgKi8KKworI2RlZmluZSBUTVIwX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1RNUjBDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDFVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCA3VUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyggOFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKCAgTkEpKSAgICAvKiE8IFRNUjAgTW9kdWxlICovCisKKyNkZWZpbmUgVE1SMV9NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9UTVIxQ0tFTl9Qb3MpIHxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggMVVMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoIDdVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKDEyVUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKCAgIE5BKSkgICAgIC8qITwgVE1SMSBNb2R1bGUgKi8KKworI2RlZmluZSBUTVIyX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1RNUjJDS0VOX1BvcykgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAxVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggN1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoMTZVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoICAgIE5BKSkgICAgLyohPCBUTVIyIE1vZHVsZSAqLworCisjZGVmaW5lIFRNUjNfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfVE1SM0NLRU5fUG9zKSB8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDFVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCA3VUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQygyMFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyggICBOQSkpICAgICAvKiE8IFRNUjMgTW9kdWxlICovCisKKyNkZWZpbmUgQ0xLT19NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9DTEtPQ0tFTl9Qb3MpIHxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggMVVMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoMjhVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoICAgTkEpKSAgICAgLyohPCBDTEtPIE1vZHVsZSAqLworCisjZGVmaW5lIEFDTVAwMV9NT0RVTEUgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfQUNNUDAxQ0tFTl9Qb3MpIHxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgICAgLyohPCBBQ01QMDEgTW9kdWxlICovCisKKyNkZWZpbmUgSTJDMF9NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9JMkMwQ0tFTl9Qb3MpIHxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgICAgLyohPCBJMkMwIE1vZHVsZSAqLworCisjZGVmaW5lIEkyQzFfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfSTJDMUNLRU5fUG9zKSB8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAgIC8qITwgSTJDMSBNb2R1bGUgKi8KKworI2RlZmluZSBJMkMyX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX0kyQzJDS0VOX1BvcykgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgICAvKiE8IEkyQzIgTW9kdWxlICovCisKKyNkZWZpbmUgUVNQSTBfTU9EVUxFICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9RU1BJMENLRU5fUG9zKSB8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDJVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyggMlVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKCAgTkEpKSAgICAvKiE8IFFTUEkwIE1vZHVsZSAqLworCisjZGVmaW5lIFNQSTBfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQygxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9TUEkwQ0tFTl9Qb3MpIHxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQygyVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoIDRVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyggICBOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKCAgTkEpKSAgICAgLyohPCBTUEkwIE1vZHVsZSAqLworCisjZGVmaW5lIFNQSTFfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfU1BJMUNLRU5fUG9zKSB8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDJVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyggNlVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKCAgTkEpKSAgICAvKiE8IFNQSTEgTW9kdWxlICovCisKKyNkZWZpbmUgU1BJMl9NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9TUEkyQ0tFTl9Qb3MpIHxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggMlVMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKDEwVUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoICBOQSkpICAgIC8qITwgU1BJMiBNb2R1bGUgKi8KKworI2RlZmluZSBVQVJUMF9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1VBUlQwQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAxVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggICAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQygyNFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggMFVMKXxNT0RVTEVfQ0xLRElWX01za19FTkMoMHgwRlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoIDhVTCkpICAgIC8qITwgVUFSVDAgTW9kdWxlICovCisKKyNkZWZpbmUgVUFSVDFfTU9EVUxFICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9VQVJUMUNLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggMVVMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoICAgM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoMjZVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIDBVTCl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKDB4MEZVTCl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKDEyVUwpKSAgLyohPCBVQVJUMSBNb2R1bGUgKi8KKworI2RlZmluZSBVQVJUMl9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1VBUlQyQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoMjRVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIDNVTCl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKDB4MEZVTCl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKCAwVUwpKSAgLyohPCBVQVJUMiBNb2R1bGUgKi8KKworI2RlZmluZSBVQVJUM19NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1VBUlQzQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggICAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQygyNlVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggM1VMKXxNT0RVTEVfQ0xLRElWX01za19FTkMoMHgwRlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoIDRVTCkpICAvKiE8IFVBUlQzIE1vZHVsZSAqLworCisjZGVmaW5lIFVBUlQ0X01PRFVMRSAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfVUFSVDRDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAgIDNVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKDI4VUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAzVUwpfE1PRFVMRV9DTEtESVZfTXNrX0VOQygweDBGVUwpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyggOFVMKSkgIC8qITwgVUFSVDQgTW9kdWxlICovCisKKyNkZWZpbmUgVUFSVDVfTU9EVUxFICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9VQVJUNUNLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoICAgM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoMzBVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIDNVTCl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKDB4MEZVTCl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKDEyVUwpKSAgLyohPCBVQVJUNSBNb2R1bGUgKi8KKworI2RlZmluZSBDQU4wX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX0NBTjBDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAgIC8qITwgQ0FOMCBNb2R1bGUgKi8KKworI2RlZmluZSBPVEdfTU9EVUxFICAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX09UR0NLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggMFVMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoICAxVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyggOFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggMFVMKXxNT0RVTEVfQ0xLRElWX01za19FTkMoMHgwRlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoIDRVTCkpICAvKiE8IE9URyBNb2R1bGUgKi8KKworI2RlZmluZSBVU0JEX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1VTQkRDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDBVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAgMVVMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoIDhVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIDBVTCl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKDB4MEZVTCl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKDRVTCkpICAgLyohPCBVU0JEIE1vZHVsZSAqLworCisjZGVmaW5lIEVBRENfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfRUFEQ0NLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoICAgIE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoICBOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIDBVTCl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKDB4RkZVTCl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKDE2VUwpKSAgLyohPCBFQURDIE1vZHVsZSAqLworCisjZGVmaW5lIEkyUzBfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfSTJTMENLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKDE2VUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKCAgIE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoICBOQSkpICAgIC8qITwgSTJTMCBNb2R1bGUgKi8KKworLyogQVBCQ0xLMSAqLworI2RlZmluZSBTQzBfTU9EVUxFICAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX1NDMENLRU5fUG9zKSAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoIDBVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIDFVTCl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKDB4RkZVTCl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKCAwVUwpKSAgICAvKiE8IFNDMCBNb2R1bGUgKi8KKworI2RlZmluZSBTQzFfTU9EVUxFICAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX1NDMUNLRU5fUG9zKSAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoIDJVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIDFVTCl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKDB4RkZVTCl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKCA4VUwpKSAgICAvKiE8IFNDMSBNb2R1bGUgKi8KKworI2RlZmluZSBTQzJfTU9EVUxFICAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX1NDMkNLRU5fUG9zKSAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoIDRVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIDFVTCl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKDB4RkZVTCl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKDE2VUwpKSAgICAvKiE8IFNDMiBNb2R1bGUgKi8KKworI2RlZmluZSBTUEkzX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX1NQSTNDS0VOX1BvcykgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggMlVMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKDEyVUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAvKiE8IFNQSTMgTW9kdWxlICovCisKKyNkZWZpbmUgVVNDSTBfTU9EVUxFICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAyVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMV9VU0NJMENLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgIC8qITwgVVNDSTAgTW9kdWxlICovCisKKyNkZWZpbmUgVVNDSTFfTU9EVUxFICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAyVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMV9VU0NJMUNLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgIC8qITwgVVNDSTEgTW9kdWxlICovCisKKyNkZWZpbmUgREFDX01PRFVMRSAgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAyVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMV9EQUNDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAvKiE8IERBQyBNb2R1bGUgKi8KKworI2RlZmluZSBFUFdNMF9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX0VQV00wQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBFUFdNMCBNb2R1bGUgKi8KKworI2RlZmluZSBFUFdNMV9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX0VQV00xQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBFUFdNMSBNb2R1bGUgKi8KKworI2RlZmluZSBCUFdNMF9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX0JQV00wQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBCUFdNMCBNb2R1bGUgKi8KKworI2RlZmluZSBCUFdNMV9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX0JQV00xQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBCUFdNMSBNb2R1bGUgKi8KKworI2RlZmluZSBRRUkwX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX1FFSTBDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAvKiE8IFFFSTAgTW9kdWxlICovCisKKyNkZWZpbmUgUUVJMV9NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAyVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMV9RRUkxQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBRRUkxIE1vZHVsZSAqLworCisjZGVmaW5lIFRSTkdfTU9EVUxFICAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX1RSTkdDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAvKiE8IFRSTkcgTW9kdWxlICovCisKKyNkZWZpbmUgRUNBUDBfTU9EVUxFICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAyVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMV9FQ0FQMENLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgIC8qITwgRUNBUDAgTW9kdWxlICovCisKKyNkZWZpbmUgRUNBUDFfTU9EVUxFICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAyVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMV9FQ0FQMUNLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgIC8qITwgRUNBUDEgTW9kdWxlICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFBETVNFTCBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDTEtfUE1VQ1RMX1BETVNFTF9QRCAgICAgICAgICAoMHgwVUwgPDwgQ0xLX1BNVUNUTF9QRE1TRUxfUG9zKSAgICAgICAgLyohPCBTZWxlY3QgUG93ZXItZG93biBtb2RlIGlzIFBvd2VyLWRvd24gbW9kZSAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1BETVNFTF9MTFBEICAgICAgICAoMHgxVUwgPDwgQ0xLX1BNVUNUTF9QRE1TRUxfUG9zKSAgICAgICAgLyohPCBTZWxlY3QgUG93ZXItZG93biBtb2RlIGlzIExvdyBsZWFrYWdlIFBvd2VyLWRvd24gbW9kZSAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1BETVNFTF9GV1BEICAgICAgICAoMHgyVUwgPDwgQ0xLX1BNVUNUTF9QRE1TRUxfUG9zKSAgICAgICAgLyohPCBTZWxlY3QgUG93ZXItZG93biBtb2RlIGlzIEZhc3QgV2FrZS11cCBQb3dlci1kb3duIG1vZGUgKi8KKyNkZWZpbmUgQ0xLX1BNVUNUTF9QRE1TRUxfVUxMUEQgICAgICAgKDB4M1VMIDw8IENMS19QTVVDVExfUERNU0VMX1BvcykgICAgICAgIC8qITwgU2VsZWN0IFBvd2VyLWRvd24gbW9kZSBpcyBVbHRyYSBMb3cgbGVha2FnZSBQb3dlci1kb3duIG1vZGUgKi8KKyNkZWZpbmUgQ0xLX1BNVUNUTF9QRE1TRUxfU1BEICAgICAgICAgKDB4NFVMIDw8IENMS19QTVVDVExfUERNU0VMX1BvcykgICAgICAgIC8qITwgU2VsZWN0IFBvd2VyLWRvd24gbW9kZSBpcyBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1BETVNFTF9EUEQgICAgICAgICAoMHg2VUwgPDwgQ0xLX1BNVUNUTF9QRE1TRUxfUG9zKSAgICAgICAgLyohPCBTZWxlY3QgUG93ZXItZG93biBtb2RlIGlzIERlZXAgUG93ZXItZG93biBtb2RlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBXS1RNUklTIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0xLX1BNVUNUTF9XS1RNUklTXzEyOCAgICAgICAgICAoMHgwVUwgPDwgQ0xLX1BNVUNUTF9XS1RNUklTX1BvcykgICAgIC8qITwgU2VsZWN0IFdha2UtdXAgVGltZXIgVGltZS1vdXQgSW50ZXJ2YWwgaXMgMTI4IExJUkMgY2xvY2tzICgxMi44IG1zKSAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1dLVE1SSVNfMjU2ICAgICAgICAgICgweDFVTCA8PCBDTEtfUE1VQ1RMX1dLVE1SSVNfUG9zKSAgICAgLyohPCBTZWxlY3QgV2FrZS11cCBUaW1lciBUaW1lLW91dCBJbnRlcnZhbCBpcyAyNTYgTElSQyBjbG9ja3MgKDI1LjYgbXMpICovCisjZGVmaW5lIENMS19QTVVDVExfV0tUTVJJU181MTIgICAgICAgICAgKDB4MlVMIDw8IENMS19QTVVDVExfV0tUTVJJU19Qb3MpICAgICAvKiE8IFNlbGVjdCBXYWtlLXVwIFRpbWVyIFRpbWUtb3V0IEludGVydmFsIGlzIDUxMiBMSVJDIGNsb2NrcyAoNTEuMiBtcykgKi8KKyNkZWZpbmUgQ0xLX1BNVUNUTF9XS1RNUklTXzEwMjQgICAgICAgICAoMHgzVUwgPDwgQ0xLX1BNVUNUTF9XS1RNUklTX1BvcykgICAgIC8qITwgU2VsZWN0IFdha2UtdXAgVGltZXIgVGltZS1vdXQgSW50ZXJ2YWwgaXMgMTAyNCBMSVJDIGNsb2NrcyAoMTAyLjRtcykgKi8KKyNkZWZpbmUgQ0xLX1BNVUNUTF9XS1RNUklTXzQwOTYgICAgICAgICAoMHg0VUwgPDwgQ0xLX1BNVUNUTF9XS1RNUklTX1BvcykgICAgIC8qITwgU2VsZWN0IFdha2UtdXAgVGltZXIgVGltZS1vdXQgSW50ZXJ2YWwgaXMgNDA5NiBMSVJDIGNsb2NrcyAoNDA5LjZtcykgKi8KKyNkZWZpbmUgQ0xLX1BNVUNUTF9XS1RNUklTXzgxOTIgICAgICAgICAoMHg1VUwgPDwgQ0xLX1BNVUNUTF9XS1RNUklTX1BvcykgICAgIC8qITwgU2VsZWN0IFdha2UtdXAgVGltZXIgVGltZS1vdXQgSW50ZXJ2YWwgaXMgODE5MiBMSVJDIGNsb2NrcyAoODE5LjJtcykgKi8KKyNkZWZpbmUgQ0xLX1BNVUNUTF9XS1RNUklTXzE2Mzg0ICAgICAgICAoMHg2VUwgPDwgQ0xLX1BNVUNUTF9XS1RNUklTX1BvcykgICAgIC8qITwgU2VsZWN0IFdha2UtdXAgVGltZXIgVGltZS1vdXQgSW50ZXJ2YWwgaXMgMTYzODQgTElSQyBjbG9ja3MgKDE2MzguNG1zKSAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1dLVE1SSVNfNjU1MzYgICAgICAgICgweDdVTCA8PCBDTEtfUE1VQ1RMX1dLVE1SSVNfUG9zKSAgICAgLyohPCBTZWxlY3QgV2FrZS11cCBUaW1lciBUaW1lLW91dCBJbnRlcnZhbCBpcyA2NTUzNiBMSVJDIGNsb2NrcyAoNjU1My42bXMpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBTV0tEQkNMS1NFTCBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzEgICAgICAgICAgKDB4MFVMIDw8IENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF9Qb3MpICAgICAvKiE8IFNlbGVjdCBTdGFuZGJ5IFBvd2VyLWRvd24gUGluIERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBpcyAxIGNsb2NrcyAqLworI2RlZmluZSBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMiAgICAgICAgICAoMHgxVUwgPDwgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMX1BvcykgICAgIC8qITwgU2VsZWN0IFN0YW5kYnkgUG93ZXItZG93biBQaW4gRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIGlzIDIgY2xvY2tzICovCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF80ICAgICAgICAgICgweDJVTCA8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgLyohPCBTZWxlY3QgU3RhbmRieSBQb3dlci1kb3duIFBpbiBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgaXMgNCBjbG9ja3MgKi8KKyNkZWZpbmUgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzggICAgICAgICAgKDB4M1VMIDw8IENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF9Qb3MpICAgICAvKiE8IFNlbGVjdCBTdGFuZGJ5IFBvd2VyLWRvd24gUGluIERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBpcyA4IGNsb2NrcyAqLworI2RlZmluZSBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMTYgICAgICAgICAoMHg0VUwgPDwgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMX1BvcykgICAgIC8qITwgU2VsZWN0IFN0YW5kYnkgUG93ZXItZG93biBQaW4gRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIGlzIDE2IGNsb2NrcyAqLworI2RlZmluZSBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMzIgICAgICAgICAoMHg1VUwgPDwgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMX1BvcykgICAgIC8qITwgU2VsZWN0IFN0YW5kYnkgUG93ZXItZG93biBQaW4gRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIGlzIDMyIGNsb2NrcyAqLworI2RlZmluZSBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfNjQgICAgICAgICAoMHg2VUwgPDwgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMX1BvcykgICAgIC8qITwgU2VsZWN0IFN0YW5kYnkgUG93ZXItZG93biBQaW4gRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIGlzIDY0IGNsb2NrcyAqLworI2RlZmluZSBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMTI4ICAgICAgICAoMHg3VUwgPDwgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMX1BvcykgICAgIC8qITwgU2VsZWN0IFN0YW5kYnkgUG93ZXItZG93biBQaW4gRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIGlzIDEyOCBjbG9ja3MgKi8KKyNkZWZpbmUgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzI1NiAgICAgICAgKDB4OFVMIDw8IENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF9Qb3MpICAgICAvKiE8IFNlbGVjdCBTdGFuZGJ5IFBvd2VyLWRvd24gUGluIERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBpcyAyNTYgY2xvY2tzICovCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8yeDI1NiAgICAgICgweDlVTCA8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgLyohPCBTZWxlY3QgU3RhbmRieSBQb3dlci1kb3duIFBpbiBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgaXMgMngyNTYgY2xvY2tzICovCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF80eDI1NiAgICAgICgweGFVTCA8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgLyohPCBTZWxlY3QgU3RhbmRieSBQb3dlci1kb3duIFBpbiBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgaXMgNHgyNTYgY2xvY2tzICovCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF84eDI1NiAgICAgICgweGJVTCA8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgLyohPCBTZWxlY3QgU3RhbmRieSBQb3dlci1kb3duIFBpbiBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgaXMgOHgyNTYgY2xvY2tzICovCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8xNngyNTYgICAgICgweGNVTCA8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgLyohPCBTZWxlY3QgU3RhbmRieSBQb3dlci1kb3duIFBpbiBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgaXMgMTZ4MjU2IGNsb2NrcyAqLworI2RlZmluZSBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMzJ4MjU2ICAgICAoMHhkVUwgPDwgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMX1BvcykgICAgIC8qITwgU2VsZWN0IFN0YW5kYnkgUG93ZXItZG93biBQaW4gRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIGlzIDMyeDI1NiBjbG9ja3MgKi8KKyNkZWZpbmUgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzY0eDI1NiAgICAgKDB4ZVVMIDw8IENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF9Qb3MpICAgICAvKiE8IFNlbGVjdCBTdGFuZGJ5IFBvd2VyLWRvd24gUGluIERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBpcyA2NHgyNTYgY2xvY2tzICovCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8xMjh4MjU2ICAgICgweGZVTCA8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgLyohPCBTZWxlY3QgU3RhbmRieSBQb3dlci1kb3duIFBpbiBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgaXMgMTI4eDI1NiBjbG9ja3MgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIERQRCBQaW4gUmlzaW5nL0ZhbGxpbmcgRWRnZSBXYWtlLXVwIEVuYWJsZSBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDTEtfRFBEV0tQSU5fRElTQUJMRSAgICAgKDB4MFVMIDw8IENMS19QTVVDVExfV0tQSU5FTl9Qb3MpICAgICAvKiE8IERpc2FibGUgV2FrZS11cCBwaW4gYXQgRGVlcCBQb3dlci1kb3duIG1vZGUgKi8KKyNkZWZpbmUgQ0xLX0RQRFdLUElOX1JJU0lORyAgICAgICgweDFVTCA8PCBDTEtfUE1VQ1RMX1dLUElORU5fUG9zKSAgICAgLyohPCBFbmFibGUgV2FrZS11cCBwaW4gcmlzaW5nIGVkZ2UgYXQgRGVlcCBQb3dlci1kb3duIG1vZGUgKi8KKyNkZWZpbmUgQ0xLX0RQRFdLUElOX0ZBTExJTkcgICAgICgweDJVTCA8PCBDTEtfUE1VQ1RMX1dLUElORU5fUG9zKSAgICAgLyohPCBFbmFibGUgV2FrZS11cCBwaW4gZmFsbGluZyBlZGdlIGF0IERlZXAgUG93ZXItZG93biBtb2RlICovCisjZGVmaW5lIENMS19EUERXS1BJTl9CT1RIRURHRSAgICAoMHgzVUwgPDwgQ0xLX1BNVUNUTF9XS1BJTkVOX1BvcykgICAgIC8qITwgRW5hYmxlIFdha2UtdXAgcGluIGJvdGggZWRnZSBhdCBEZWVwIFBvd2VyLWRvd24gbW9kZSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgU1BEIFBpbiBSaXNpbmcvRmFsbGluZyBFZGdlIFdha2UtdXAgRW5hYmxlIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENMS19TUERXS1BJTl9FTkFCTEUgICAgICAgICAoMHgxVUwgPDwgMCkgICAgIC8qITwgRW5hYmxlIFN0YW5kYnkgUG93ZXItZG93biBQaW4gV2FrZS11cCAqLworI2RlZmluZSBDTEtfU1BEV0tQSU5fUklTSU5HICAgICAgICAgKDB4MVVMIDw8IDEpICAgICAvKiE8IFN0YW5kYnkgUG93ZXItZG93biBXYWtlLXVwIG9uIFN0YW5kYnkgUG93ZXItZG93biBQaW4gcmlzaW5nIGVkZ2UgKi8KKyNkZWZpbmUgQ0xLX1NQRFdLUElOX0ZBTExJTkcgICAgICAgICgweDFVTCA8PCAyKSAgICAgLyohPCBTdGFuZGJ5IFBvd2VyLWRvd24gV2FrZS11cCBvbiBTdGFuZGJ5IFBvd2VyLWRvd24gUGluIGZhbGxpbmcgZWRnZSAqLworI2RlZmluZSBDTEtfU1BEV0tQSU5fREVCT1VOQ0VFTiAgICAgKDB4MVVMIDw8IDgpICAgICAvKiE8IEVuYWJsZSBTdGFuZGJ5IHBvd2VyLWRvd24gcGluIERlLWJvdW5jZSBmdW5jdGlvbiAqLworI2RlZmluZSBDTEtfU1BEV0tQSU5fREVCT1VOQ0VESVMgICAgKDB4MFVMIDw8IDgpICAgICAvKiE8IERpc2FibGUgU3RhbmRieSBwb3dlci1kb3duIHBpbiBEZS1ib3VuY2UgZnVuY3Rpb24gKi8KKworI2RlZmluZSBDTEtfRElTQUJMRV9XS1RNUih2b2lkKSAgICAgICAoQ0xLLT5QTVVDVEwgJj0gfkNMS19QTVVDVExfV0tUTVJFTl9Nc2spICAgIC8qITwgRGlzYWJsZSBXYWtlLXVwIHRpbWVyIGF0IFN0YW5kYnkgb3IgRGVlcCBQb3dlci1kb3duIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDTEtfRU5BQkxFX1dLVE1SKHZvaWQpICAgICAgICAoQ0xLLT5QTVVDVEwgfD0gQ0xLX1BNVUNUTF9XS1RNUkVOX01zaykgICAgIC8qITwgRW5hYmxlIFdha2UtdXAgdGltZXIgYXQgU3RhbmRieSBvciBEZWVwIFBvd2VyLWRvd24gbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIENMS19ESVNBQkxFX0RQRFdLUElOKHZvaWQpICAgIChDTEstPlBNVUNUTCAmPSB+Q0xLX1BNVUNUTF9XS1BJTkVOX01zaykgICAgLyohPCBEaXNhYmxlIFdha2UtdXAgcGluIGF0IERlZXAgUG93ZXItZG93biBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQ0xLX0RJU0FCTEVfU1BEQUNNUCh2b2lkKSAgICAgKENMSy0+UE1VQ1RMICY9IH5DTEtfUE1VQ1RMX0FDTVBTUFdLX01zaykgICAvKiE8IERpc2FibGUgQUNNUCB3YWtlLXVwIGF0IFN0YW5kYnkgUG93ZXItZG93biBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQ0xLX0VOQUJMRV9TUERBQ01QKHZvaWQpICAgICAgKENMSy0+UE1VQ1RMIHw9IENMS19QTVVDVExfQUNNUFNQV0tfTXNrKSAgICAvKiE8IEVuYWJsZSBBQ01QIHdha2UtdXAgYXQgU3RhbmRieSBQb3dlci1kb3duIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDTEtfRElTQUJMRV9SVENXSyh2b2lkKSAgICAgICAoQ0xLLT5QTVVDVEwgJj0gfkNMS19QTVVDVExfUlRDV0tFTl9Nc2spICAgIC8qITwgRGlzYWJsZSBSVEMgV2FrZS11cCBhdCBTdGFuZGJ5IG9yIERlZXAgUG93ZXItZG93biBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQ0xLX0VOQUJMRV9SVENXSyh2b2lkKSAgICAgICAgKENMSy0+UE1VQ1RMIHw9IENMS19QTVVDVExfUlRDV0tFTl9Nc2spICAgICAvKiE8IEVuYWJsZSBSVEMgV2FrZS11cCBhdCBTdGFuZGJ5IG9yIERlZXAgUG93ZXItZG93biBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENMS19FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworLyoqIEBhZGR0b2dyb3VwIENMS19FWFBPUlRFRF9GVU5DVElPTlMgQ0xLIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworCisvKioKKyAqIEBicmllZiAgICAgICBTZXQgV2FrZS11cCBUaW1lciBUaW1lLW91dCBJbnRlcnZhbAorICoKKyAqIEBwYXJhbVtpbl0gICB1MzJJbnRlcnZhbCAgVGhlIFdha2UtdXAgVGltZXIgVGltZS1vdXQgSW50ZXJ2YWwgc2VsZWN0aW9uLiBJdCBjb3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfUE1VQ1RMX1dLVE1SSVNfMTI4CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19QTVVDVExfV0tUTVJJU18yNTYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BNVUNUTF9XS1RNUklTXzUxMgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfUE1VQ1RMX1dLVE1SSVNfMTAyNAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfUE1VQ1RMX1dLVE1SSVNfNDA5NgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfUE1VQ1RMX1dLVE1SSVNfODE5MgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfUE1VQ1RMX1dLVE1SSVNfMTYzODQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BNVUNUTF9XS1RNUklTXzY1NTM2CisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBzZXQgV2FrZS11cCBUaW1lciBUaW1lLW91dCBJbnRlcnZhbC4KKyAqCisgKgorICovCisjZGVmaW5lIENMS19TRVRfV0tUTVJfSU5URVJWQUwodTMySW50ZXJ2YWwpICAgKENMSy0+UE1VQ1RMID0gKENMSy0+UE1VQ1RMICYgKH5DTEtfUE1VQ1RMX1dLVE1SSVNfTXNrKSkgfCAodTMySW50ZXJ2YWwpKQorCisvKioKKyAqIEBicmllZiAgICAgICBTZXQgRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIFRpbWUKKyAqCisgKiBAcGFyYW1baW5dICAgdTMyQ3ljbGVTZWwgICBUaGUgZGUtYm91bmNlIHNhbXBsaW5nIGN5Y2xlIHNlbGVjdGlvbi4gSXQgY291bGQgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzgKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzE2CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8zMgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfNjQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzEyOAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMjU2CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8yeDI1NgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfNHgyNTYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzh4MjU2CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8xNngyNTYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzMyeDI1NgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfNjR4MjU2CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8xMjh4MjU2CisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBzZXQgU2V0IERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBUaW1lIGZvciBTdGFuZGJ5IFBvd2VyLWRvd24gcGluIHdha2UtdXAuCisgKgorICoKKyAqLworI2RlZmluZSBDTEtfU0VUX1NQRERFQk9VTkNFVElNRSh1MzJDeWNsZVNlbCkgICAgKENMSy0+U1dLREJDVEwgPSAodTMyQ3ljbGVTZWwpKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBEZWNsYXJlIHRoZXNlIGlubGluZSBmdW5jdGlvbnMgaGVyZSB0byBhdm9pZCBNSVNSQSBDIDIwMDQgcnVsZSA4LjEgZXJyb3IgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIENMS19TeXNUaWNrRGVsYXkodWludDMyX3QgdXMpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgQ0xLX1N5c1RpY2tMb25nRGVsYXkodWludDMyX3QgdXMpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFRoaXMgZnVuY3Rpb24gZXhlY3V0ZSBkZWxheSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1cyAgRGVsYXkgdGltZS4gVGhlIE1heCB2YWx1ZSBpcyAoMl4yNC0xKSAvIENQVSBDbG9jayhNSHopLiBFeDoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjRNSHogPT4gMjYyMTQzdXMsIDQ4TUh6ID0+IDM0OTUyNXVzIC4uLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBVc2UgdGhlIFN5c1RpY2sgdG8gZ2VuZXJhdGUgdGhlIGRlbGF5IHRpbWUgYW5kIHRoZSBVTklUIGlzIGluIHVzLgorICAqICAgICAgICAgICAgIFRoZSBTeXNUaWNrIGNsb2NrIHNvdXJjZSBpcyBmcm9tIEhDTEssIGkuZSB0aGUgc2FtZSBhcyBzeXN0ZW0gY29yZSBjbG9jay4KKyAgKiAgICAgICAgICAgICBVc2VyIGNhbiB1c2UgU3lzdGVtQ29yZUNsb2NrVXBkYXRlKCkgdG8gY2FsY3VsYXRlIEN5Y2xlc1BlclVzIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBDTEtfU3lzVGlja0RlbGF5KHVpbnQzMl90IHVzKQoreworICAgIFN5c1RpY2stPkxPQUQgPSB1cyAqIEN5Y2xlc1BlclVzOworICAgIFN5c1RpY2stPlZBTCAgPSAoMHgwVUwpOworICAgIFN5c1RpY2stPkNUUkwgPSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayB8IFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrOworCisgICAgLyogV2FpdGluZyBmb3IgZG93bi1jb3VudCB0byB6ZXJvICovCisgICAgd2hpbGUoKFN5c1RpY2stPkNUUkwgJiBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX01zaykgPT0gMFVMKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFN5c1RpY2sgY291bnRlciAqLworICAgIFN5c1RpY2stPkNUUkwgPSAwVUw7Cit9CisKKworI2lmIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzTCkKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgQ0xLX1N5c1RpY2tEZWxheV9OUyh1aW50MzJfdCB1cyk7CisKKy8qKgorICAqIEBicmllZiAgICAgIFRoaXMgZnVuY3Rpb24gZXhlY3V0ZSBkZWxheSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1cyAgRGVsYXkgdGltZS4gVGhlIE1heCB2YWx1ZSBpcyAoMl4yNC0xKSAvIENQVSBDbG9jayhNSHopLiBFeDoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjRNSHogPT4gMjYyMTQzdXMsIDQ4TUh6ID0+IDM0OTUyNXVzIC4uLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBVc2UgdGhlIFN5c1RpY2sgdG8gZ2VuZXJhdGUgdGhlIGRlbGF5IHRpbWUgYW5kIHRoZSBVTklUIGlzIGluIHVzLgorICAqICAgICAgICAgICAgIFRoZSBTeXNUaWNrIGNsb2NrIHNvdXJjZSBpcyBmcm9tIEhDTEssIGkuZSB0aGUgc2FtZSBhcyBzeXN0ZW0gY29yZSBjbG9jay4KKyAgKiAgICAgICAgICAgICBVc2VyIGNhbiB1c2UgU3lzdGVtQ29yZUNsb2NrVXBkYXRlKCkgdG8gY2FsY3VsYXRlIEN5Y2xlc1BlclVzIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBDTEtfU3lzVGlja0RlbGF5X05TKHVpbnQzMl90IHVzKQoreworICAgIFN5c1RpY2tfTlMtPkxPQUQgPSB1cyAqIEN5Y2xlc1BlclVzOworICAgIFN5c1RpY2tfTlMtPlZBTCAgPSAoMHgwMFVMKTsKKyAgICBTeXNUaWNrX05TLT5DVFJMID0gU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgfCBTeXNUaWNrX0NUUkxfRU5BQkxFX01zazsKKworICAgIC8qIFdhaXRpbmcgZm9yIGRvd24tY291bnQgdG8gemVybyAqLworICAgIHdoaWxlKChTeXNUaWNrX05TLT5DVFJMICYgU3lzVGlja19DVFJMX0NPVU5URkxBR19Nc2spID09IDBVTCk7CisKKyAgICAvKiBEaXNhYmxlIFN5c1RpY2sgY291bnRlciAqLworICAgIFN5c1RpY2tfTlMtPkNUUkwgPSAwVUw7Cit9CisjZW5kaWYgLyogZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNMKSAqLworCisKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGV4ZWN1dGUgbG9uZyBkZWxheSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1cyAgRGVsYXkgdGltZS4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVXNlIHRoZSBTeXNUaWNrIHRvIGdlbmVyYXRlIHRoZSBsb25nIGRlbGF5IHRpbWUgYW5kIHRoZSBVTklUIGlzIGluIHVzLgorICAqICAgICAgICAgICAgIFRoZSBTeXNUaWNrIGNsb2NrIHNvdXJjZSBpcyBmcm9tIEhDTEssIGkuZSB0aGUgc2FtZSBhcyBzeXN0ZW0gY29yZSBjbG9jay4KKyAgKiAgICAgICAgICAgICBVc2VyIGNhbiB1c2UgU3lzdGVtQ29yZUNsb2NrVXBkYXRlKCkgdG8gY2FsY3VsYXRlIEN5Y2xlc1BlclVzIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBDTEtfU3lzVGlja0xvbmdEZWxheSh1aW50MzJfdCB1cykKK3sKKyAgICB1aW50MzJfdCB1MzJEZWxheTsKKworICAgIC8qIEl0IHNob3VsZCA8PSA2NTUzNnVzIGZvciBlYWNoIGRlbGF5IGxvb3AgKi8KKyAgICB1MzJEZWxheSA9IDY1NTM2VUw7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgaWYodXMgPiB1MzJEZWxheSkKKyAgICAgICAgeworICAgICAgICAgICAgdXMgLT0gdTMyRGVsYXk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJEZWxheSA9IHVzOworICAgICAgICAgICAgdXMgPSAwVUw7CisgICAgICAgIH0KKworICAgICAgICBTeXNUaWNrLT5MT0FEID0gdTMyRGVsYXkgKiBDeWNsZXNQZXJVczsKKyAgICAgICAgU3lzVGljay0+VkFMICA9ICgweDBVTCk7CisgICAgICAgIFN5c1RpY2stPkNUUkwgPSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayB8IFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrOworCisgICAgICAgIC8qIFdhaXRpbmcgZm9yIGRvd24tY291bnQgdG8gemVybyAqLworICAgICAgICB3aGlsZSgoU3lzVGljay0+Q1RSTCAmIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfTXNrKSA9PSAwVUwpOworCisgICAgICAgIC8qIERpc2FibGUgU3lzVGljayBjb3VudGVyICovCisgICAgICAgIFN5c1RpY2stPkNUUkwgPSAwVUw7CisKKyAgICB9CisgICAgd2hpbGUodXMgPiAwVUwpOworCit9CisKKyNpZiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM0wpCisKK19fU1RBVElDX0lOTElORSB2b2lkIENMS19TeXNUaWNrTG9uZ0RlbGF5X05TKHVpbnQzMl90IHVzKTsKKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBmdW5jdGlvbiBleGVjdXRlIGxvbmcgZGVsYXkgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgdXMgIERlbGF5IHRpbWUuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFVzZSB0aGUgU3lzVGljayB0byBnZW5lcmF0ZSB0aGUgbG9uZyBkZWxheSB0aW1lIGFuZCB0aGUgVU5JVCBpcyBpbiB1cy4KKyAgKiAgICAgICAgICAgICBUaGUgU3lzVGljayBjbG9jayBzb3VyY2UgaXMgZnJvbSBIQ0xLLCBpLmUgdGhlIHNhbWUgYXMgc3lzdGVtIGNvcmUgY2xvY2suCisgICogICAgICAgICAgICAgVXNlciBjYW4gdXNlIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSgpIHRvIGNhbGN1bGF0ZSBDeWNsZXNQZXJVcyBhdXRvbWF0aWNhbGx5IGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgQ0xLX1N5c1RpY2tMb25nRGVsYXlfTlModWludDMyX3QgdXMpCit7CisgICAgdWludDMyX3QgdTMyRGVsYXk7CisKKyAgICAvKiBJdCBzaG91bGQgPD0gNjU1MzZ1cyBmb3IgZWFjaCBkZWxheSBsb29wICovCisgICAgdTMyRGVsYXkgPSA2NTUzNlVMOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmKHVzID4gdTMyRGVsYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzIC09IHUzMkRlbGF5OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRGVsYXkgPSB1czsKKyAgICAgICAgICAgIHVzID0gMFVMOworICAgICAgICB9CisKKyAgICAgICAgU3lzVGlja19OUy0+TE9BRCA9IHUzMkRlbGF5ICogQ3ljbGVzUGVyVXM7CisgICAgICAgIFN5c1RpY2tfTlMtPlZBTCAgPSAoMHgwVUwpOworICAgICAgICBTeXNUaWNrX05TLT5DVFJMID0gU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgfCBTeXNUaWNrX0NUUkxfRU5BQkxFX01zazsKKworICAgICAgICAvKiBXYWl0aW5nIGZvciBkb3duLWNvdW50IHRvIHplcm8gKi8KKyAgICAgICAgd2hpbGUoKFN5c1RpY2tfTlMtPkNUUkwgJiBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX01zaykgPT0gMFVMKTsKKworICAgICAgICAvKiBEaXNhYmxlIFN5c1RpY2sgY291bnRlciAqLworICAgICAgICBTeXNUaWNrX05TLT5DVFJMID0gMFVMOworCisgICAgfQorICAgIHdoaWxlKHVzID4gMFVMKTsKKworfQorCisjZW5kaWYgLyogZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNMKSAqLworCisKK3ZvaWQgQ0xLX0Rpc2FibGVDS08odm9pZCk7Cit2b2lkIENMS19FbmFibGVDS08odWludDMyX3QgdTMyQ2xrU3JjLCB1aW50MzJfdCB1MzJDbGtEaXYsIHVpbnQzMl90IHUzMkNsa0RpdkJ5MUVuKTsKK3ZvaWQgQ0xLX1Bvd2VyRG93bih2b2lkKTsKK3ZvaWQgQ0xLX0lkbGUodm9pZCk7Cit1aW50MzJfdCBDTEtfR2V0SFhURnJlcSh2b2lkKTsKK3VpbnQzMl90IENMS19HZXRMWFRGcmVxKHZvaWQpOwordWludDMyX3QgQ0xLX0dldEhDTEtGcmVxKHZvaWQpOwordWludDMyX3QgQ0xLX0dldFBDTEswRnJlcSh2b2lkKTsKK3VpbnQzMl90IENMS19HZXRQQ0xLMUZyZXEodm9pZCk7Cit1aW50MzJfdCBDTEtfR2V0Q1BVRnJlcSh2b2lkKTsKK3VpbnQzMl90IENMS19TZXRDb3JlQ2xvY2sodWludDMyX3QgdTMySGNsayk7Cit2b2lkIENMS19TZXRIQ0xLKHVpbnQzMl90IHUzMkNsa1NyYywgdWludDMyX3QgdTMyQ2xrRGl2KTsKK3ZvaWQgQ0xLX1NldE1vZHVsZUNsb2NrKHVpbnQzMl90IHUzMk1vZHVsZUlkeCwgdWludDMyX3QgdTMyQ2xrU3JjLCB1aW50MzJfdCB1MzJDbGtEaXYpOwordm9pZCBDTEtfU2V0U3lzVGlja0Nsb2NrU3JjKHVpbnQzMl90IHUzMkNsa1NyYyk7Cit2b2lkIENMS19FbmFibGVYdGFsUkModWludDMyX3QgdTMyQ2xrTWFzayk7Cit2b2lkIENMS19EaXNhYmxlWHRhbFJDKHVpbnQzMl90IHUzMkNsa01hc2spOwordm9pZCBDTEtfRW5hYmxlTW9kdWxlQ2xvY2sodWludDMyX3QgdTMyTW9kdWxlSWR4KTsKK3ZvaWQgQ0xLX0Rpc2FibGVNb2R1bGVDbG9jayh1aW50MzJfdCB1MzJNb2R1bGVJZHgpOwordWludDMyX3QgQ0xLX0VuYWJsZVBMTCh1aW50MzJfdCB1MzJQbGxDbGtTcmMsIHVpbnQzMl90IHUzMlBsbEZyZXEpOwordm9pZCBDTEtfRGlzYWJsZVBMTCh2b2lkKTsKK3VpbnQzMl90IENMS19XYWl0Q2xvY2tSZWFkeSh1aW50MzJfdCB1MzJDbGtNYXNrKTsKK3ZvaWQgQ0xLX0VuYWJsZVN5c1RpY2sodWludDMyX3QgdTMyQ2xrU3JjLCB1aW50MzJfdCB1MzJDb3VudCk7Cit2b2lkIENMS19EaXNhYmxlU3lzVGljayh2b2lkKTsKK3ZvaWQgQ0xLX1NldFBvd2VyRG93bk1vZGUodWludDMyX3QgdTMyUERNb2RlKTsKK3ZvaWQgQ0xLX0VuYWJsZURQRFdLUGluKHVpbnQzMl90IHUzMlRyaWdnZXJUeXBlKTsKK3VpbnQzMl90IENMS19HZXRQTVVXS1NyYyh2b2lkKTsKK3ZvaWQgQ0xLX0VuYWJsZVNQRFdLUGluKHVpbnQzMl90IHUzMlBvcnQsIHVpbnQzMl90IHUzMlBpbiwgdWludDMyX3QgdTMyVHJpZ2dlclR5cGUsIHVpbnQzMl90IHUzMkRlYm91bmNlRW4pOwordWludDMyX3QgQ0xLX0dldFBMTENsb2NrRnJlcSh2b2lkKTsKK3VpbnQzMl90IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZSh1aW50MzJfdCB1MzJNb2R1bGVJZHgpOwordWludDMyX3QgQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcih1aW50MzJfdCB1MzJNb2R1bGVJZHgpOworCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTEtfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ0xLX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8qIF9fQ0xLX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9jcmMuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2NyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNmZiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9jcmMuaApAQCAtMCwwICsxLDExNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNyYy5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBDeWNsaWMgUmVkdW5kYW5jeSBDaGVjayhDUkMpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQ1JDX0hfXworI2RlZmluZSBfX0NSQ19IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIENSQ19Ecml2ZXIgQ1JDIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIENSQ19FWFBPUlRFRF9DT05TVEFOVFMgQ1JDIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDUkMgUG9seW5vbWlhbCBNb2RlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ1JDX0NDSVRUICAgICAgICAgICAoMFVMIDw8IENSQ19DVExfQ1JDTU9ERV9Qb3MpIC8qITxDUkMgUG9seW5vbWlhbCBNb2RlIC0gQ0NJVFQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDUkNfOCAgICAgICAgICAgICAgICgxVUwgPDwgQ1JDX0NUTF9DUkNNT0RFX1BvcykgLyohPENSQyBQb2x5bm9taWFsIE1vZGUgLSBDUkM4IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQ1JDXzE2ICAgICAgICAgICAgICAoMlVMIDw8IENSQ19DVExfQ1JDTU9ERV9Qb3MpIC8qITxDUkMgUG9seW5vbWlhbCBNb2RlIC0gQ1JDMTYgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDUkNfMzIgICAgICAgICAgICAgICgzVUwgPDwgQ1JDX0NUTF9DUkNNT0RFX1BvcykgLyohPENSQyBQb2x5bm9taWFsIE1vZGUgLSBDUkMzMiBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDaGVja3N1bSwgV3JpdGUgZGF0YSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ1JDX0NIRUNLU1VNX0NPTSAgICAoQ1JDX0NUTF9DSEtTRk1UX01zaykgICAgICAgLyohPENSQyBDaGVja3N1bSBDb21wbGVtZW50IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQ1JDX0NIRUNLU1VNX1JWUyAgICAoQ1JDX0NUTF9DSEtTUkVWX01zaykgICAgICAgLyohPENSQyBDaGVja3N1bSBSZXZlcnNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQ1JDX1dEQVRBX0NPTSAgICAgICAoQ1JDX0NUTF9EQVRGTVRfTXNrKSAgICAgICAgLyohPENSQyBXcml0ZSBEYXRhIENvbXBsZW1lbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDUkNfV0RBVEFfUlZTICAgICAgIChDUkNfQ1RMX0RBVFJFVl9Nc2spICAgICAgICAvKiE8Q1JDIFdyaXRlIERhdGEgUmV2ZXJzZSBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDUFUgV3JpdGUgRGF0YSBMZW5ndGggQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ1JDX0NQVV9XREFUQV84ICAgICAoMFVMIDw8IENSQ19DVExfREFUTEVOX1BvcykgLyohPENSQyBDUFUgV3JpdGUgRGF0YSBsZW5ndGggaXMgOC1iaXQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDUkNfQ1BVX1dEQVRBXzE2ICAgICgxVUwgPDwgQ1JDX0NUTF9EQVRMRU5fUG9zKSAvKiE8Q1JDIENQVSBXcml0ZSBEYXRhIGxlbmd0aCBpcyAxNi1iaXQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDUkNfQ1BVX1dEQVRBXzMyICAgICgyVUwgPDwgQ1JDX0NUTF9EQVRMRU5fUG9zKSAvKiE8Q1JDIENQVSBXcml0ZSBEYXRhIGxlbmd0aCBpcyAzMi1iaXQgXGhpZGVpbml0aWFsaXplciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENSQ19FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgQ1JDX0VYUE9SVEVEX0ZVTkNUSU9OUyBDUkMgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgQ1JDIFNlZWQgVmFsdWUKKyAgKgorICAqIEBwYXJhbVtpbl0gIGNyYyAgICAgICAgIFRoZSBwb2ludGVyIG9mIENSQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyU2VlZCAgICAgU2VlZCB2YWx1ZQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCBDUkMgc2VlZCB2YWx1ZS4KKyAgKgorICAgICAgICBVc2VyIG11c3QgdG8gcGVyZm9ybSBDUkNfQ0hLU0lOSVQoQ1JDX0NUTFsxXSBDUkMgRW5naW5lIFJlc2V0KSB0byByZWxvYWQgdGhlIG5ldyBzZWVkIHZhbHVlCisgICogICAgICAgICAgICAgdG8gQ1JDIGNvbnRyb2xsZXIuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBDUkNfU0VUX1NFRUQoY3JjLCB1MzJTZWVkKSAgICAgICAgICBkb3sgKGNyYyktPlNFRUQgPSAodTMyU2VlZCk7IChjcmMpLT5DVEwgfD0gQ1JDX0NUTF9DSEtTSU5JVF9Nc2s7IH13aGlsZSgwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgQ1JDIFNlZWQgVmFsdWUKKyAgKgorICAqIEBwYXJhbVtpbl0gIGNyYyAgICAgICAgIFRoZSBwb2ludGVyIG9mIENSQyBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBDUkMgc2VlZCB2YWx1ZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBnZXRzIHRoZSBjdXJyZW50IENSQyBzZWVkIHZhbHVlLgorICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBDUkNfR0VUX1NFRUQoY3JjKSAgICAgICAgICAgICAgICAgICAoKGNyYyktPlNFRUQpCisKKy8qKgorICAqIEBicmllZiAgICAgIENSQyBXcml0ZSBEYXRhCisgICoKKyAgKiBAcGFyYW1baW5dICBjcmMgICAgICAgICBUaGUgcG9pbnRlciBvZiBDUkMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkRhdGEgICAgIFdyaXRlIGRhdGEKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFVzZXIgY2FuIHdyaXRlIGRhdGEgZGlyZWN0bHkgdG8gQ1JDIFdyaXRlIERhdGEgUmVnaXN0ZXIoQ1JDX0RBVCkgYnkgdGhpcyBtYWNybyB0byBwZXJmb3JtIENSQyBvcGVyYXRpb24uCisgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIENSQ19XUklURV9EQVRBKGNyYywgdTMyRGF0YSkgICAgICAgICgoY3JjKS0+REFUID0gKHUzMkRhdGEpKQorCisKK3ZvaWQgQ1JDX09wZW4odWludDMyX3QgdTMyTW9kZSwgdWludDMyX3QgdTMyQXR0cmlidXRlLCB1aW50MzJfdCB1MzJTZWVkLCB1aW50MzJfdCB1MzJEYXRhTGVuKTsKK3VpbnQzMl90IENSQ19HZXRDaGVja3N1bSh2b2lkKTsKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDUkNfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ1JDX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19DUkNfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2NyeXB0by5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvY3J5cHRvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmOGYxOAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2NyeXB0by5oCkBAIC0wLDAgKzEsMzkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY3J5cHRvLmgKKyAqIEB2ZXJzaW9uICBWMS4xMAorICogQGJyaWVmICAgIENyeXB0b2dyYXBoaWMgQWNjZWxlcmF0b3IgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQ1JZUFRPX0hfXworI2RlZmluZSBfX0NSWVBUT19IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBDUllQVE9fRHJpdmVyIENSWVBUTyBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIENSWVBUT19FWFBPUlRFRF9DT05TVEFOVFMgQ1JZUFRPIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKworI2RlZmluZSBQUk5HX0tFWV9TSVpFXzY0ICAgICAgICAwVUwgICAgIC8qITwgU2VsZWN0IHRvIGdlbmVyYXRlIDY0LWJpdCByYW5kb20ga2V5ICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUFJOR19LRVlfU0laRV8xMjggICAgICAgMVVMICAgICAvKiE8IFNlbGVjdCB0byBnZW5lcmF0ZSAxMjgtYml0IHJhbmRvbSBrZXkgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBSTkdfS0VZX1NJWkVfMTkyICAgICAgIDJVTCAgICAgLyohPCBTZWxlY3QgdG8gZ2VuZXJhdGUgMTkyLWJpdCByYW5kb20ga2V5ICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQUk5HX0tFWV9TSVpFXzI1NiAgICAgICAzVUwgICAgIC8qITwgU2VsZWN0IHRvIGdlbmVyYXRlIDI1Ni1iaXQgcmFuZG9tIGtleSAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBQUk5HX1NFRURfQ09OVCAgICAgICAgICAwVUwgICAgIC8qITwgUFJORyB1c2luZyBjdXJyZW50IHNlZWQgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUFJOR19TRUVEX1JFTE9BRCAgICAgICAgMVVMICAgICAvKiE8IFBSTkcgcmVsb2FkIG5ldyBzZWVkICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgQUVTX0tFWV9TSVpFXzEyOCAgICAgICAgMFVMICAgICAvKiE8IEFFUyBzZWxlY3QgMTI4LWJpdCBrZXkgbGVuZ3RoICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEFFU19LRVlfU0laRV8xOTIgICAgICAgIDFVTCAgICAgLyohPCBBRVMgc2VsZWN0IDE5Mi1iaXQga2V5IGxlbmd0aCAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBBRVNfS0VZX1NJWkVfMjU2ICAgICAgICAyVUwgICAgIC8qITwgQUVTIHNlbGVjdCAyNTYtYml0IGtleSBsZW5ndGggICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBBRVNfTU9ERV9FQ0IgICAgICAgICAgICAwVUwgICAgIC8qITwgQUVTIHNlbGVjdCBFQ0IgbW9kZSAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQUVTX01PREVfQ0JDICAgICAgICAgICAgMVVMICAgICAvKiE8IEFFUyBzZWxlY3QgQ0JDIG1vZGUgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEFFU19NT0RFX0NGQiAgICAgICAgICAgIDJVTCAgICAgLyohPCBBRVMgc2VsZWN0IENGQiBtb2RlICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBBRVNfTU9ERV9PRkIgICAgICAgICAgICAzVUwgICAgIC8qITwgQUVTIHNlbGVjdCBPRkIgbW9kZSAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQUVTX01PREVfQ1RSICAgICAgICAgICAgNFVMICAgICAvKiE8IEFFUyBzZWxlY3QgQ1RSIG1vZGUgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEFFU19NT0RFX0NCQ19DUzEgICAgICAgIDB4MTBVTCAgLyohPCBBRVMgc2VsZWN0IENCQyBDUzEgbW9kZSAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBBRVNfTU9ERV9DQkNfQ1MyICAgICAgICAweDExVUwgIC8qITwgQUVTIHNlbGVjdCBDQkMgQ1MyIG1vZGUgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQUVTX01PREVfQ0JDX0NTMyAgICAgICAgMHgxMlVMICAvKiE8IEFFUyBzZWxlY3QgQ0JDIENTMyBtb2RlICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgQUVTX05PX1NXQVAgICAgICAgICAgICAgMFVMICAgICAvKiE8IEFFUyBkbyBub3Qgc3dhcCBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEFFU19PVVRfU1dBUCAgICAgICAgICAgIDFVTCAgICAgLyohPCBBRVMgc3dhcCBvdXRwdXQgZGF0YSAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBBRVNfSU5fU1dBUCAgICAgICAgICAgICAyVUwgICAgIC8qITwgQUVTIHN3YXAgaW5wdXQgZGF0YSAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQUVTX0lOX09VVF9TV0FQICAgICAgICAgM1VMICAgICAvKiE8IEFFUyBzd2FwIGJvdGggaW5wdXQgYW5kIG91dHB1dCBkYXRhICAgICBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgREVTX01PREVfRUNCICAgICAgICAgICAgMHgwMDBVTCAvKiE8IERFUyBzZWxlY3QgRUNCIG1vZGUgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIERFU19NT0RFX0NCQyAgICAgICAgICAgIDB4MTAwVUwgLyohPCBERVMgc2VsZWN0IENCQyBtb2RlICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBERVNfTU9ERV9DRkIgICAgICAgICAgICAweDIwMFVMIC8qITwgREVTIHNlbGVjdCBDRkIgbW9kZSAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgREVTX01PREVfT0ZCICAgICAgICAgICAgMHgzMDBVTCAvKiE8IERFUyBzZWxlY3QgT0ZCIG1vZGUgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIERFU19NT0RFX0NUUiAgICAgICAgICAgIDB4NDAwVUwgLyohPCBERVMgc2VsZWN0IENUUiBtb2RlICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUREVTX01PREVfRUNCICAgICAgICAgICAweDAwNFVMIC8qITwgVERFUyBzZWxlY3QgRUNCIG1vZGUgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVERFU19NT0RFX0NCQyAgICAgICAgICAgMHgxMDRVTCAvKiE8IFRERVMgc2VsZWN0IENCQyBtb2RlICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRERVNfTU9ERV9DRkIgICAgICAgICAgIDB4MjA0VUwgLyohPCBUREVTIHNlbGVjdCBDRkIgbW9kZSAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUREVTX01PREVfT0ZCICAgICAgICAgICAweDMwNFVMIC8qITwgVERFUyBzZWxlY3QgT0ZCIG1vZGUgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVERFU19NT0RFX0NUUiAgICAgICAgICAgMHg0MDRVTCAvKiE8IFRERVMgc2VsZWN0IENUUiBtb2RlICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgVERFU19OT19TV0FQICAgICAgICAgICAgMFVMICAgICAvKiE8IFRERVMgZG8gbm90IHN3YXAgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUREVTX1dITF9TV0FQICAgICAgICAgICAxVUwgICAgIC8qITwgVERFUyBzd2FwIGhpZ2gtbG93IHdvcmQgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRERVNfT1VUX1NXQVAgICAgICAgICAgIDJVTCAgICAgLyohPCBUREVTIHN3YXAgb3V0cHV0IGRhdGEgICAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVERFU19PVVRfV0hMX1NXQVAgICAgICAgM1VMICAgICAvKiE8IFRERVMgc3dhcCBvdXRwdXQgZGF0YSBhbmQgaGlnaC1sb3cgd29yZCAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUREVTX0lOX1NXQVAgICAgICAgICAgICA0VUwgICAgIC8qITwgVERFUyBzd2FwIGlucHV0IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRERVNfSU5fV0hMX1NXQVAgICAgICAgIDVVTCAgICAgLyohPCBUREVTIHN3YXAgaW5wdXQgZGF0YSBhbmQgaGlnaC1sb3cgd29yZCAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVERFU19JTl9PVVRfU1dBUCAgICAgICAgNlVMICAgICAvKiE8IFRERVMgc3dhcCBib3RoIGlucHV0IGFuZCBvdXRwdXQgZGF0YSAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUREVTX0lOX09VVF9XSExfU1dBUCAgICA3VUwgICAgIC8qITwgVERFUyBzd2FwIGlucHV0LCBvdXRwdXQgYW5kIGhpZ2gtbG93IHdvcmQgICBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgU0hBX01PREVfU0hBMSAgICAgICAgICAgMFVMICAgICAvKiE8IFNIQSBzZWxlY3QgU0hBLTEgMTYwLWJpdCAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNIQV9NT0RFX1NIQTIyNCAgICAgICAgIDVVTCAgICAgLyohPCBTSEEgc2VsZWN0IFNIQS0yMjQgMjI0LWJpdCAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTSEFfTU9ERV9TSEEyNTYgICAgICAgICA0VUwgICAgIC8qITwgU0hBIHNlbGVjdCBTSEEtMjU2IDI1Ni1iaXQgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0hBX01PREVfU0hBMzg0ICAgICAgICAgN1VMICAgICAvKiE8IFNIQSBzZWxlY3QgU0hBLTM4NCAzODQtYml0ICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNIQV9NT0RFX1NIQTUxMiAgICAgICAgIDZVTCAgICAgLyohPCBTSEEgc2VsZWN0IFNIQS01MTIgNTEyLWJpdCAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFNIQV9OT19TV0FQICAgICAgICAgICAgIDBVTCAgICAgLyohPCBTSEEgZG8gbm90IHN3YXAgaW5wdXQgYW5kIG91dHB1dCBkYXRhICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTSEFfT1VUX1NXQVAgICAgICAgICAgICAxVUwgICAgIC8qITwgU0hBIHN3YXAgb3V0cHV0IGRhdGEgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0hBX0lOX1NXQVAgICAgICAgICAgICAgMlVMICAgICAvKiE8IFNIQSBzd2FwIGlucHV0IGRhdGEgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNIQV9JTl9PVVRfU1dBUCAgICAgICAgIDNVTCAgICAgLyohPCBTSEEgc3dhcCBib3RoIGlucHV0IGFuZCBvdXRwdXQgZGF0YSAgICAgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIENSWVBUT19ETUFfRklSU1QgICAgICAgIDB4NFVMICAgLyohPCBEbyBmaXJzdCBlbmNyeXB0L2RlY3J5cHQgaW4gRE1BIGNhc2NhZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDUllQVE9fRE1BX09ORV9TSE9UICAgICAweDVVTCAgIC8qITwgRG8gb25lIHNob3QgZW5jcnlwdC9kZWNyeXB0IHdpdGggRE1BICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDUllQVE9fRE1BX0NPTlRJTlVFICAgICAweDZVTCAgIC8qITwgRG8gY29udGludW91cyBlbmNyeXB0L2RlY3J5cHQgaW4gRE1BIGNhc2NhZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDUllQVE9fRE1BX0xBU1QgICAgICAgICAweDdVTCAgIC8qITwgRG8gbGFzdCBlbmNyeXB0L2RlY3J5cHQgaW4gRE1BIGNhc2NhZGUgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworCisKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ1VSVkVfUF8xOTIsCisgICAgQ1VSVkVfUF8yMjQsCisgICAgQ1VSVkVfUF8yNTYsCisgICAgQ1VSVkVfUF8zODQsCisgICAgQ1VSVkVfUF81MjEsCisgICAgQ1VSVkVfS18xNjMsCisgICAgQ1VSVkVfS18yMzMsCisgICAgQ1VSVkVfS18yODMsCisgICAgQ1VSVkVfS180MDksCisgICAgQ1VSVkVfS181NzEsCisgICAgQ1VSVkVfQl8xNjMsCisgICAgQ1VSVkVfQl8yMzMsCisgICAgQ1VSVkVfQl8yODMsCisgICAgQ1VSVkVfQl80MDksCisgICAgQ1VSVkVfQl81NzEKK30KK0VfRUNDX0NVUlZFOworCisKKwordHlwZWRlZiBzdHJ1Y3QgZV9jdXJ2ZV90Cit7CisgICAgRV9FQ0NfQ1VSVkUgIGN1cnZlX2lkOworICAgIGludDMyX3QgICBFY2hhcjsKKyAgICBjaGFyICBFYVsxNDRdOworICAgIGNoYXIgIEViWzE0NF07CisgICAgY2hhciAgUHhbMTQ0XTsKKyAgICBjaGFyICBQeVsxNDRdOworICAgIGludDMyX3QgICBFcGw7CisgICAgY2hhciAgUHBbMTc2XTsKKyAgICBpbnQzMl90ICAgRW9sOworICAgIGNoYXIgIEVvcmRlclsxNzZdOworICAgIGludDMyX3QgICBrZXlfbGVuOworICAgIGludDMyX3QgICBpcnJlZHVjaWJsZV9rMTsKKyAgICBpbnQzMl90ICAgaXJyZWR1Y2libGVfazI7CisgICAgaW50MzJfdCAgIGlycmVkdWNpYmxlX2szOworICAgIGludDMyX3QgICBHRjsKK30gIEVDQ19DVVJWRTsKKworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ1JZUFRPX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBDUllQVE9fRVhQT1JURURfTUFDUk9TIENSWVBUTyBFeHBvcnRlZCBNYWNyb3MKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgTWFjcm9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZW5hYmxlcyBQUk5HIGludGVycnVwdC4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFBSTkdfRU5BQkxFX0lOVChjcnB0KSAgICAgICAoKGNycHQpLT5JTlRFTiB8PSBDUlBUX0lOVEVOX1BSTkdJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBkaXNhYmxlcyBQUk5HIGludGVycnVwdC4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFBSTkdfRElTQUJMRV9JTlQoY3JwdCkgICAgICAoKGNycHQpLT5JTlRFTiAmPSB+Q1JQVF9JTlRFTl9QUk5HSUVOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZ2V0cyBQUk5HIGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gUFJORyBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFBSTkdfR0VUX0lOVF9GTEFHKGNycHQpICAgICAoKGNycHQpLT5JTlRTVFMgJiBDUlBUX0lOVFNUU19QUk5HSUZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBjbGVhcnMgUFJORyBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFBSTkdfQ0xSX0lOVF9GTEFHKGNycHQpICAgICAoKGNycHQpLT5JTlRTVFMgPSBDUlBUX0lOVFNUU19QUk5HSUZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBlbmFibGVzIEFFUyBpbnRlcnJ1cHQuCisgICogQHBhcmFtIGNycHQgICAgIFNwZWNpZmllZCBjcnlwdG8gbW9kdWxlCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBBRVNfRU5BQkxFX0lOVChjcnB0KSAgICAgICAgKChjcnB0KS0+SU5URU4gfD0gKENSUFRfSU5URU5fQUVTSUVOX01za3xDUlBUX0lOVEVOX0FFU0VJRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZGlzYWJsZXMgQUVTIGludGVycnVwdC4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEFFU19ESVNBQkxFX0lOVChjcnB0KSAgICAgICAoKGNycHQpLT5JTlRFTiAmPSB+KENSUFRfSU5URU5fQUVTSUVOX01za3xDUlBUX0lOVEVOX0FFU0VJRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZ2V0cyBBRVMgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtIGNycHQgICAgIFNwZWNpZmllZCBjcnlwdG8gbW9kdWxlCisgICogQHJldHVybiBBRVMgaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBBRVNfR0VUX0lOVF9GTEFHKGNycHQpICAgICAgKChjcnB0KS0+SU5UU1RTICYgKENSUFRfSU5UU1RTX0FFU0lGX01za3xDUlBUX0lOVFNUU19BRVNFSUZfTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gY2xlYXJzIEFFUyBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEFFU19DTFJfSU5UX0ZMQUcoY3JwdCkgICAgICAoKGNycHQpLT5JTlRTVFMgPSAoQ1JQVF9JTlRTVFNfQUVTSUZfTXNrfENSUFRfSU5UU1RTX0FFU0VJRl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBlbmFibGVzIEFFUyBrZXkgcHJvdGVjdGlvbi4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEFFU19FTkFCTEVfS0VZX1BST1RFQ1QoY3JwdCkgICgoY3JwdCktPkFFU19DVEwgfD0gQ1JQVF9BRVNfQ1RMX0tFWVBSVF9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGRpc2FibGVzIEFFUyBrZXkgcHJvdGVjdGlvbi4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEFFU19ESVNBQkxFX0tFWV9QUk9URUNUKGNycHQpICgoY3JwdCktPkFFU19DVEwgPSAoKGNycHQpLT5BRVNfQ1RMICYgfkNSUFRfQUVTX0NUTF9LRVlQUlRfTXNrKSB8ICgweDE2VUw8PENSUFRfQUVTX0NUTF9LRVlVTlBSVF9Qb3MpKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNycHQpLT5BRVNfQ1RMICY9IH5DUlBUX0FFU19DVExfS0VZUFJUX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZW5hYmxlcyBUREVTIGludGVycnVwdC4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRERVNfRU5BQkxFX0lOVChjcnB0KSAgICAgICAoKGNycHQpLT5JTlRFTiB8PSAoQ1JQVF9JTlRFTl9UREVTSUVOX01za3xDUlBUX0lOVEVOX1RERVNFSUVOX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGRpc2FibGVzIFRERVMgaW50ZXJydXB0LgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVERFU19ESVNBQkxFX0lOVChjcnB0KSAgICAgICgoY3JwdCktPklOVEVOICY9IH4oQ1JQVF9JTlRFTl9UREVTSUVOX01za3xDUlBUX0lOVEVOX1RERVNFSUVOX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGdldHMgVERFUyBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIFRERVMgaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUREVTX0dFVF9JTlRfRkxBRyhjcnB0KSAgICAgKChjcnB0KS0+SU5UU1RTICYgKENSUFRfSU5UU1RTX1RERVNJRl9Nc2t8Q1JQVF9JTlRTVFNfVERFU0VJRl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBjbGVhcnMgVERFUyBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRERVNfQ0xSX0lOVF9GTEFHKGNycHQpICAgICAoKGNycHQpLT5JTlRTVFMgPSAoQ1JQVF9JTlRTVFNfVERFU0lGX01za3xDUlBUX0lOVFNUU19UREVTRUlGX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGVuYWJsZXMgVERFUyBrZXkgcHJvdGVjdGlvbi4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRERVNfRU5BQkxFX0tFWV9QUk9URUNUKGNycHQpICAoKGNycHQpLT5UREVTX0NUTCB8PSBDUlBUX1RERVNfQ1RMX0tFWVBSVF9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGRpc2FibGVzIFRERVMga2V5IHByb3RlY3Rpb24uCisgICogQHBhcmFtIGNycHQgICAgIFNwZWNpZmllZCBjcnlwdG8gbW9kdWxlCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUREVTX0RJU0FCTEVfS0VZX1BST1RFQ1QoY3JwdCkgKChjcnB0KS0+VERFU19DVEwgPSAoKGNycHQpLT5UREVTX0NUTCAmIH5DUlBUX1RERVNfQ1RMX0tFWVBSVF9Nc2spIHwgKDB4MTZVTDw8Q1JQVF9UREVTX0NUTF9LRVlVTlBSVF9Qb3MpKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjcnB0KS0+VERFU19DVEwgJj0gfkNSUFRfVERFU19DVExfS0VZUFJUX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZW5hYmxlcyBTSEEgaW50ZXJydXB0LgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0hBX0VOQUJMRV9JTlQoY3JwdCkgICAgICAgICgoY3JwdCktPklOVEVOIHw9IChDUlBUX0lOVEVOX0hNQUNJRU5fTXNrfENSUFRfSU5URU5fSE1BQ0VJRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZGlzYWJsZXMgU0hBIGludGVycnVwdC4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNIQV9ESVNBQkxFX0lOVChjcnB0KSAgICAgICAoKGNycHQpLT5JTlRFTiAmPSB+KENSUFRfSU5URU5fSE1BQ0lFTl9Nc2t8Q1JQVF9JTlRFTl9ITUFDRUlFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBnZXRzIFNIQSBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIFNIQSBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNIQV9HRVRfSU5UX0ZMQUcoY3JwdCkgICAgICAoKGNycHQpLT5JTlRTVFMgJiAoQ1JQVF9JTlRTVFNfSE1BQ0lGX01za3xDUlBUX0lOVFNUU19ITUFDRUlGX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGNsZWFycyBTSEEgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtIGNycHQgICAgIFNwZWNpZmllZCBjcnlwdG8gbW9kdWxlCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTSEFfQ0xSX0lOVF9GTEFHKGNycHQpICAgICAgKChjcnB0KS0+SU5UU1RTID0gKENSUFRfSU5UU1RTX0hNQUNJRl9Nc2t8Q1JQVF9JTlRTVFNfSE1BQ0VJRl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBlbmFibGVzIEVDQyBpbnRlcnJ1cHQuCisgICogQHBhcmFtIGNycHQgICAgIFNwZWNpZmllZCBjcnlwdG8gbW9kdWxlCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0NfRU5BQkxFX0lOVChjcnB0KSAgICAgICAgKChjcnB0KS0+SU5URU4gfD0gKENSUFRfSU5URU5fRUNDSUVOX01za3xDUlBUX0lOVEVOX0VDQ0VJRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZGlzYWJsZXMgRUNDIGludGVycnVwdC4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQ19ESVNBQkxFX0lOVChjcnB0KSAgICAgICAoKGNycHQpLT5JTlRFTiAmPSB+KENSUFRfSU5URU5fRUNDSUVOX01za3xDUlBUX0lOVEVOX0VDQ0VJRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZ2V0cyBFQ0MgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtIGNycHQgICAgIFNwZWNpZmllZCBjcnlwdG8gbW9kdWxlCisgICogQHJldHVybiBFQ0MgaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0NfR0VUX0lOVF9GTEFHKGNycHQpICAgICAgKChjcnB0KS0+SU5UU1RTICYgKENSUFRfSU5UU1RTX0VDQ0lGX01za3xDUlBUX0lOVFNUU19FQ0NFSUZfTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gY2xlYXJzIEVDQyBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQ19DTFJfSU5UX0ZMQUcoY3JwdCkgICAgICAoKGNycHQpLT5JTlRTVFMgPSAoQ1JQVF9JTlRTVFNfRUNDSUZfTXNrfENSUFRfSU5UU1RTX0VDQ0VJRl9Nc2spKQorCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ1JZUFRPX0VYUE9SVEVEX01BQ1JPUyAqLworCisKKworLyoqIEBhZGR0b2dyb3VwIENSWVBUT19FWFBPUlRFRF9GVU5DVElPTlMgQ1JZUFRPIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBQUk5HX09wZW4oQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJLZXlTaXplLCB1aW50MzJfdCB1MzJTZWVkUmVsb2FkLCB1aW50MzJfdCB1MzJTZWVkKTsKK3ZvaWQgUFJOR19TdGFydChDUlBUX1QgKmNycHQpOwordm9pZCBQUk5HX1JlYWQoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJSYW5kS2V5W10pOwordm9pZCBBRVNfT3BlbihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMkVuY0RlYywgdWludDMyX3QgdTMyT3BNb2RlLCB1aW50MzJfdCB1MzJLZXlTaXplLCB1aW50MzJfdCB1MzJTd2FwVHlwZSk7Cit2b2lkIEFFU19TdGFydChDUlBUX1QgKmNycHQsIGludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyRE1BTW9kZSk7Cit2b2lkIEFFU19TZXRLZXkoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCBhdTMyS2V5c1tdLCB1aW50MzJfdCB1MzJLZXlTaXplKTsKK3ZvaWQgQUVTX1NldEluaXRWZWN0KENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgYXUzMklWW10pOwordm9pZCBBRVNfU2V0RE1BVHJhbnNmZXIoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJTcmNBZGRyLCB1aW50MzJfdCB1MzJEc3RBZGRyLCB1aW50MzJfdCB1MzJUcmFuc0NudCk7Cit2b2lkIFRERVNfT3BlbihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMkVuY0RlYywgaW50MzJfdCBJczNERVMsIGludDMyX3QgSXMzS2V5LCB1aW50MzJfdCB1MzJPcE1vZGUsIHVpbnQzMl90IHUzMlN3YXBUeXBlKTsKK3ZvaWQgVERFU19TdGFydChDUlBUX1QgKmNycHQsIGludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyRE1BTW9kZSk7Cit2b2lkIFRERVNfU2V0S2V5KENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgYXUzMktleXNbM11bMl0pOwordm9pZCBUREVTX1NldEluaXRWZWN0KENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMySVZILCB1aW50MzJfdCB1MzJJVkwpOwordm9pZCBUREVTX1NldERNQVRyYW5zZmVyKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyU3JjQWRkciwgdWludDMyX3QgdTMyRHN0QWRkciwgdWludDMyX3QgdTMyVHJhbnNDbnQpOwordm9pZCBTSEFfT3BlbihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMk9wTW9kZSwgdWludDMyX3QgdTMyU3dhcFR5cGUsIHVpbnQzMl90IGhtYWNfa2V5X2xlbik7Cit2b2lkIFNIQV9TdGFydChDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkRNQU1vZGUpOwordm9pZCBTSEFfU2V0RE1BVHJhbnNmZXIoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJTcmNBZGRyLCB1aW50MzJfdCB1MzJUcmFuc0NudCk7Cit2b2lkIFNIQV9SZWFkKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyRGlnZXN0W10pOwordm9pZCBFQ0NfRHJpdmVySVNSKENSUFRfVCAqY3JwdCk7CitpbnQgIEVDQ19Jc1ByaXZhdGVLZXlWYWxpZChDUlBUX1QgKmNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgIGNoYXIgcHJpdmF0ZV9rW10pOworaW50MzJfdCAgRUNDX0dlbmVyYXRlU2VjcmV0WihDUlBUX1QgKmNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgY2hhciAqcHJpdmF0ZV9rLCBjaGFyIHB1YmxpY19rMVtdLCBjaGFyIHB1YmxpY19rMltdLCBjaGFyIHNlY3JldF96W10pOworaW50MzJfdCAgRUNDX0dlbmVyYXRlUHVibGljS2V5KENSUFRfVCAqY3JwdCwgRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlLCBjaGFyICpwcml2YXRlX2ssIGNoYXIgcHVibGljX2sxW10sIGNoYXIgcHVibGljX2syW10pOworaW50MzJfdCAgRUNDX0dlbmVyYXRlU2lnbmF0dXJlKENSUFRfVCAqY3JwdCwgRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlLCBjaGFyICptZXNzYWdlLCBjaGFyICpkLCBjaGFyICprLCBjaGFyICpSLCBjaGFyICpTKTsKK2ludDMyX3QgIEVDQ19WZXJpZnlTaWduYXR1cmUoQ1JQVF9UICpjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsIGNoYXIgKm1lc3NhZ2UsIGNoYXIgKnB1YmxpY19rMSwgY2hhciAqcHVibGljX2syLCBjaGFyICpSLCBjaGFyICpTKTsKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENSWVBUT19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDUllQVE9fRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAgLyogX19DUllQVE9fSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2RhYy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZGFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxZGEyNgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2RhYy5oCkBAIC0wLDAgKzEsMjU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZGFjLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBEQUMgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19EQUNfSF9fCisjZGVmaW5lIF9fREFDX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgREFDX0RyaXZlciBEQUMgRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBEQUNfRVhQT1JURURfQ09OU1RBTlRTIERBQyBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBEQUNfQ1RMIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIERBQ19DVExfTEFMSUdOX1JJR0hUX0FMSUdOICAgKDBVTDw8REFDX0NUTF9MQUxJR05fUG9zKSAgIC8qITwgUmlnaHQgYWxpZ25tZW50LiAqLworI2RlZmluZSBEQUNfQ1RMX0xBTElHTl9MRUZUX0FMSUdOICAgICgxVUw8PERBQ19DVExfTEFMSUdOX1BvcykgICAvKiE8IExlZnQgYWxpZ25tZW50ICovCisKKyNkZWZpbmUgREFDX1dSSVRFX0RBVF9UUklHR0VSICAgICAgKDBVTCkgICAgLyohPCBXcml0ZSBEQUNfREFUIHRyaWdnZXIgKi8KKyNkZWZpbmUgREFDX1NPRlRXQVJFX1RSSUdHRVIgICAgICAgKDBVTHxEQUNfQ1RMX1RSR0VOX01zaykgICAgLyohPCBTb2Z0d2FyZSB0cmlnZ2VyICovCisjZGVmaW5lIERBQ19MT1dfTEVWRUxfVFJJR0dFUiAgICAgICgoMFVMPDxEQUNfQ1RMX0VUUkdTRUxfUG9zKXwoMVVMPDxEQUNfQ1RMX1RSR1NFTF9Qb3MpfERBQ19DVExfVFJHRU5fTXNrKSAgIC8qITwgU1REQUMgcGluIGxvdyBsZXZlbCB0cmlnZ2VyICovCisjZGVmaW5lIERBQ19ISUdIX0xFVkVMX1RSSUdHRVIgICAgICgoMVVMPDxEQUNfQ1RMX0VUUkdTRUxfUG9zKXwoMVVMPDxEQUNfQ1RMX1RSR1NFTF9Qb3MpfERBQ19DVExfVFJHRU5fTXNrKSAgIC8qITwgU1REQUMgcGluIGhpZ2ggbGV2ZWwgdHJpZ2dlciAqLworI2RlZmluZSBEQUNfRkFMTElOR19FREdFX1RSSUdHRVIgICAoKDJVTDw8REFDX0NUTF9FVFJHU0VMX1Bvcyl8KDFVTDw8REFDX0NUTF9UUkdTRUxfUG9zKXxEQUNfQ1RMX1RSR0VOX01zaykgICAvKiE8IFNUREFDIHBpbiBmYWxsaW5nIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBEQUNfUklTSU5HX0VER0VfVFJJR0dFUiAgICAoKDNVTDw8REFDX0NUTF9FVFJHU0VMX1Bvcyl8KDFVTDw8REFDX0NUTF9UUkdTRUxfUG9zKXxEQUNfQ1RMX1RSR0VOX01zaykgICAvKiE8IFNUREFDIHBpbiByaXNpbmcgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIERBQ19USU1FUjBfVFJJR0dFUiAgICAgICAgICgoMlVMPDxEQUNfQ1RMX1RSR1NFTF9Qb3MpfERBQ19DVExfVFJHRU5fTXNrKSAgIC8qITwgVGltZXIgMCB0cmlnZ2VyICovCisjZGVmaW5lIERBQ19USU1FUjFfVFJJR0dFUiAgICAgICAgICgoM1VMPDxEQUNfQ1RMX1RSR1NFTF9Qb3MpfERBQ19DVExfVFJHRU5fTXNrKSAgIC8qITwgVGltZXIgMSB0cmlnZ2VyICovCisjZGVmaW5lIERBQ19USU1FUjJfVFJJR0dFUiAgICAgICAgICgoNFVMPDxEQUNfQ1RMX1RSR1NFTF9Qb3MpfERBQ19DVExfVFJHRU5fTXNrKSAgIC8qITwgVGltZXIgMiB0cmlnZ2VyICovCisjZGVmaW5lIERBQ19USU1FUjNfVFJJR0dFUiAgICAgICAgICgoNVVMPDxEQUNfQ1RMX1RSR1NFTF9Qb3MpfERBQ19DVExfVFJHRU5fTXNrKSAgIC8qITwgVGltZXIgMyB0cmlnZ2VyICovCisjZGVmaW5lIERBQ19FUFdNMF9UUklHR0VSICAgICAgICAgICgoNlVMPDxEQUNfQ1RMX1RSR1NFTF9Qb3MpfERBQ19DVExfVFJHRU5fTXNrKSAgIC8qITwgRVBXTTAgdHJpZ2dlciAqLworI2RlZmluZSBEQUNfRVBXTTFfVFJJR0dFUiAgICAgICAgICAoKDdVTDw8REFDX0NUTF9UUkdTRUxfUG9zKXxEQUNfQ1RMX1RSR0VOX01zaykgICAvKiE8IEVQV00xIHRyaWdnZXIgKi8KKworI2RlZmluZSBEQUNfVFJJR0dFUl9NT0RFX0RJU0FCTEUgICAoMFVMPDxEQUNfQ1RMX1RSR0VOX1BvcykgICAvKiE8IFRyaWdnZXIgbW9kZSBkaXNhYmxlICovCisjZGVmaW5lIERBQ19UUklHR0VSX01PREVfRU5BQkxFICAgICgxVUw8PERBQ19DVExfVFJHRU5fUG9zKSAgIC8qITwgVHJpZ2dlciBtb2RlIGVuYWJsZSAqLworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgREFDX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBEQUNfRVhQT1JURURfRlVOQ1RJT05TIERBQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgREFDIE1hY3JvIERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICAqIEBicmllZiBTdGFydCB0aGUgRC9BIGNvbnZlcnNpb24uCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFVzZXIgd3JpdGVzIFNXVFJHIGJpdCAoREFDX1NXVFJHWzBdKSB0byBnZW5lcmF0ZSBvbmUgc2hvdCBwdWxzZSBhbmQgaXQgaXMgY2xlYXJlZCB0byAwIGJ5IGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkuCisgICovCisjZGVmaW5lIERBQ19TVEFSVF9DT05WKGRhYykgKChkYWMpLT5TV1RSRyA9IERBQ19TV1RSR19TV1RSR19Nc2spCisKKy8qKgorICAqIEBicmllZiBFbmFibGUgREFDIGRhdGEgbGVmdC1hbGlnbmVkLgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBVc2VyIGhhcyB0byBsb2FkIGRhdGEgaW50byBEQUNfREFUWzE1OjRdIGJpdHMuIERBQ19EQVRbMzE6MTZdIGFuZCBEQUNfREFUWzM6MF0gYXJlIGlnbm9yZWQgaW4gREFDIGNvbnZlcnNpb24uCisgICovCisjZGVmaW5lIERBQ19FTkFCTEVfTEVGVF9BTElHTihkYWMpICgoZGFjKS0+Q1RMIHw9IERBQ19DVExfTEFMSUdOX01zaykKKworLyoqCisgICogQGJyaWVmIEVuYWJsZSBEQUMgZGF0YSByaWdodC1hbGlnbmVkLgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBVc2VyIGhhcyB0byBsb2FkIGRhdGEgaW50byBEQUNfREFUWzExOjBdIGJpdHMsIERBQ19EQVRbMzE6MTJdIGFyZSBpZ25vcmVkIGluIERBQyBjb252ZXJzaW9uLgorICAqLworI2RlZmluZSBEQUNfRU5BQkxFX1JJR0hUX0FMSUdOKGRhYykgKChkYWMpLT5DVEwgJj0gfkRBQ19DVExfTEFMSUdOX01zaykKKworLyoqCisgICogQGJyaWVmIEVuYWJsZSBvdXRwdXQgdm9sdGFnZSBidWZmZXIuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoZSBEQUMgaW50ZWdyYXRlcyBhIHZvbHRhZ2Ugb3V0cHV0IGJ1ZmZlciB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZHVjZSBvdXRwdXQgaW1wZWRhbmNlIGFuZAorICAqICAgICAgICAgZHJpdmUgZXh0ZXJuYWwgbG9hZHMgZGlyZWN0bHkgd2l0aG91dCBoYXZpbmcgdG8gYWRkIGFuIGV4dGVybmFsIG9wZXJhdGlvbmFsIGFtcGxpZmllci4KKyAgKi8KKyNkZWZpbmUgREFDX0VOQUJMRV9CWVBBU1NfQlVGRkVSKGRhYykgKChkYWMpLT5DVEwgfD0gREFDX0NUTF9CWVBBU1NfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBvdXRwdXQgdm9sdGFnZSBidWZmZXIuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIG91dHB1dCB2b2x0YWdlIGJ1ZmZlci4KKyAgKi8KKyNkZWZpbmUgREFDX0RJU0FCTEVfQllQQVNTX0JVRkZFUihkYWMpICgoZGFjKS0+Q1RMICY9IH5EQUNfQ1RMX0JZUEFTU19Nc2spCisKKy8qKgorICAqIEBicmllZiBFbmFibGUgdGhlIGludGVycnVwdC4KKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJDaCBOb3QgdXNlZCBpbiBNMjM1MSBTZXJpZXMgREFDLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgREFDIGludGVycnVwdC4KKyAgKi8KKyNkZWZpbmUgREFDX0VOQUJMRV9JTlQoZGFjLCB1MzJDaCkgKChkYWMpLT5DVEwgfD0gREFDX0NUTF9EQUNJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSB0aGUgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkNoIE5vdCB1c2VkIGluIE0yMzUxIFNlcmllcyBEQUMuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgREFDIGludGVycnVwdC4KKyAgKi8KKyNkZWZpbmUgREFDX0RJU0FCTEVfSU5UKGRhYywgdTMyQ2gpICgoZGFjKS0+Q1RMICY9IH5EQUNfQ1RMX0RBQ0lFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBFbmFibGUgRE1BIHVuZGVyLXJ1biBpbnRlcnJ1cHQuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgRE1BIHVuZGVyLXJ1biBpbnRlcnJ1cHQuCisgICovCisjZGVmaW5lIERBQ19FTkFCTEVfRE1BVURSX0lOVChkYWMpICgoZGFjKS0+Q1RMIHw9IERBQ19DVExfRE1BVVJJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBETUEgdW5kZXItcnVuIGludGVycnVwdC4KKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgRE1BIHVuZGVyLXJ1biBpbnRlcnJ1cHQuCisgICovCisjZGVmaW5lIERBQ19ESVNBQkxFX0RNQVVEUl9JTlQoZGFjKSAoKGRhYyktPkNUTCAmPSB+REFDX0NUTF9ETUFVUklFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBFbmFibGUgUERNQSBtb2RlLgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBEQUMgRE1BIHJlcXVlc3QgaXMgZ2VuZXJhdGVkIHdoZW4gYSBoYXJkd2FyZSB0cmlnZ2VyIGV2ZW50IG9jY3VycyB3aGlsZSBETUFFTiAoREFDX0NUTFsyXSkgaXMgc2V0LgorICAqLworI2RlZmluZSBEQUNfRU5BQkxFX1BETUEoZGFjKSAoKGRhYyktPkNUTCB8PSBEQUNfQ1RMX0RNQUVOX01zaykKKworLyoqCisgICogQGJyaWVmIERpc2FibGUgUERNQSBtb2RlLgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBETUEgbW9kZS4KKyAgKi8KKyNkZWZpbmUgREFDX0RJU0FCTEVfUERNQShkYWMpICgoZGFjKS0+Q1RMICY9IH5EQUNfQ1RMX0RNQUVOX01zaykKKworLyoqCisgICogQGJyaWVmIFdyaXRlIGRhdGEgZm9yIGNvbnZlcnNpb24uCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ2ggTm90IHVzZWQgaW4gTTIzNTEgU2VyaWVzIERBQy4KKyAgKiBAcGFyYW1baW5dIHUzMkRhdGEgRGVjaWRlcyB0aGUgZGF0YSBmb3IgY29udmVyc2lvbiwgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMH4weEZGRi4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyAxMiBiaXQgbGVmdCBhbGlnbm1lbnQ6IHVzZXIgaGFzIHRvIGxvYWQgZGF0YSBpbnRvIERBQ19EQVRbMTU6NF0gYml0cy4KKyAgKiAgICAgICAgIDEyIGJpdCByaWdodCBhbGlnbm1lbnQ6IHVzZXIgaGFzIHRvIGxvYWQgZGF0YSBpbnRvIERBQ19EQVRbMTE6MF0gYml0cy4KKyAgKi8KKyNkZWZpbmUgREFDX1dSSVRFX0RBVEEoZGFjLCB1MzJDaCwgdTMyRGF0YSkgKChkYWMpLT5EQVQgPSAodTMyRGF0YSkpCisKKy8qKgorICAqIEBicmllZiBSZWFkIERBQyAxMi1iaXQgaG9sZGluZyBkYXRhLgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkNoIE5vdCB1c2VkIGluIE0yMzUxIFNlcmllcyBEQUMuCisgICogQHJldHVybiBSZXR1cm4gREFDIDEyLWJpdCBob2xkaW5nIGRhdGEuCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgREFDX0RBVCByZWdpc3Rlci4KKyAgKi8KKyNkZWZpbmUgREFDX1JFQURfREFUQShkYWMsIHUzMkNoKSAoKGRhYyktPkRBVCkKKworLyoqCisgICogQGJyaWVmIEdldCB0aGUgYnVzeSBzdGF0ZSBvZiBEQUMuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ2ggTm90IHVzZWQgaW4gTTIzNTEgU2VyaWVzIERBQy4KKyAgKiBAcmV0dmFsIDAgSWRsZSBzdGF0ZS4KKyAgKiBAcmV0dmFsIDEgQnVzeSBzdGF0ZS4KKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCBCVVNZIGJpdCAoREFDX1NUQVRVU1s4XSkgdG8gZ2V0IGJ1c3kgc3RhdGUuCisgICovCisjZGVmaW5lIERBQ19JU19CVVNZKGRhYywgdTMyQ2gpICgoKGRhYyktPlNUQVRVUyAmIERBQ19TVEFUVVNfQlVTWV9Nc2spID4+IERBQ19TVEFUVVNfQlVTWV9Qb3MpCisKKy8qKgorICAqIEBicmllZiBHZXQgdGhlIGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkNoIE5vdCB1c2VkIGluIE0yMzUxIFNlcmllcyBEQUMuCisgICogQHJldHZhbCAwIERBQyBpcyBpbiBjb252ZXJzaW9uIHN0YXRlLgorICAqIEByZXR2YWwgMSBEQUMgY29udmVyc2lvbiBmaW5pc2guCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgRklOSVNIIGJpdCAoREFDX1NUQVRVU1swXSkgdG8gZ2V0IERBQyBjb252ZXJzaW9uIGNvbXBsZXRlIGZpbmlzaCBmbGFnLgorICAqLworI2RlZmluZSBEQUNfR0VUX0lOVF9GTEFHKGRhYywgdTMyQ2gpICgoZGFjKS0+U1RBVFVTICYgREFDX1NUQVRVU19GSU5JU0hfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgR2V0IHRoZSBETUEgdW5kZXItcnVuIGZsYWcuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEByZXR2YWwgMCBObyBETUEgdW5kZXItcnVuIGVycm9yIGNvbmRpdGlvbiBvY2N1cnJlZC4KKyAgKiBAcmV0dmFsIDEgRE1BIHVuZGVyLXJ1biBlcnJvciBjb25kaXRpb24gb2NjdXJyZWQuCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgRE1BVURSIGJpdCAoREFDX1NUQVRVU1sxXSkgdG8gZ2V0IERNQSB1bmRlci1ydW4gc3RhdGUuCisgICovCisjZGVmaW5lIERBQ19HRVRfRE1BVURSX0ZMQUcoZGFjKSAoKChkYWMpLT5TVEFUVVMgJiBEQUNfU1RBVFVTX0RNQVVEUl9Nc2spID4+IERBQ19TVEFUVVNfRE1BVURSX1BvcykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gY2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgYml0LgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkNoIE5vdCB1c2VkIGluIE0yMzUxIFNlcmllcyBEQUMuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVXNlciB3cml0ZXMgRklOSVNIIGJpdCAoREFDX1NUQVRVU1swXSkgdG8gY2xlYXIgREFDIGNvbnZlcnNpb24gY29tcGxldGUgZmluaXNoIGZsYWcuCisgICovCisjZGVmaW5lIERBQ19DTFJfSU5UX0ZMQUcoZGFjLCB1MzJDaCkgKChkYWMpLT5TVEFUVVMgPSBEQUNfU1RBVFVTX0ZJTklTSF9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGNsZWFyIHRoZSAgRE1BIHVuZGVyLXJ1biBmbGFnLgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBVc2VyIHdyaXRlcyBETUFVRFIgYml0IChEQUNfU1RBVFVTWzFdKSB0byBjbGVhciBETUEgdW5kZXItcnVuIGZsYWcuCisgICovCisjZGVmaW5lIERBQ19DTFJfRE1BVURSX0ZMQUcoZGFjKSAoKGRhYyktPlNUQVRVUyA9IERBQ19TVEFUVVNfRE1BVURSX01zaykKKworCisvKioKKyAgKiBAYnJpZWYgRW5hYmxlIERBQyBncm91cCBtb2RlCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICBPbmx5IERBQzAgaGFzIHRoaXMgY29udHJvbCBiaXQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBEQUNfRU5BQkxFX0dST1VQX01PREUoZGFjKSAoKGRhYyktPkNUTCB8PSBEQUNfQ1RMX0dSUEVOX01zaykKKworLyoqCisgICogQGJyaWVmIERpc2FibGUgREFDIGdyb3VwIG1vZGUKKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgIE9ubHkgREFDMCBoYXMgdGhpcyBjb250cm9sIGJpdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIERBQ19ESVNBQkxFX0dST1VQX01PREUoZGFjKSAoKGRhYyktPkNUTCAmPSB+REFDX0NUTF9HUlBFTl9Nc2spCisKK3ZvaWQgREFDX09wZW4oREFDX1QgKmRhYywgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMlRyZ1NyYyk7Cit2b2lkIERBQ19DbG9zZShEQUNfVCAqZGFjLCB1aW50MzJfdCB1MzJDaCk7Cit1aW50MzJfdCBEQUNfU2V0RGVsYXlUaW1lKERBQ19UICpkYWMsIHVpbnQzMl90IHUzMkRlbGF5KTsKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBEQUNfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgREFDX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19EQUNfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2VhZGMuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2VhZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGFkYjhhCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZWFkYy5oCkBAIC0wLDAgKzEsNTUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZWFkYy5oCisgKiBAdmVyc2lvbiAgVjAuMTAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgRUFEQyBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0VBRENfSF9fCisjZGVmaW5lIF9fRUFEQ19IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEVBRENfRHJpdmVyIEVBREMgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRUFEQ19FWFBPUlRFRF9DT05TVEFOVFMgRUFEQyBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBFQURDX0NUTCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRUFEQ19DVExfRElGRkVOX1NJTkdMRV9FTkQgICAgICAgICAgKDBVTDw8RUFEQ19DVExfRElGRkVOX1BvcykgICAvKiE8IFNpbmdsZS1lbmQgaW5wdXQgbW9kZSAgICAgICovCisjZGVmaW5lIEVBRENfQ1RMX0RJRkZFTl9ESUZGRVJFTlRJQUwgICAgICAgICgxVUw8PEVBRENfQ1RMX0RJRkZFTl9Qb3MpICAgLyohPCBEaWZmZXJlbnRpYWwgaW5wdXQgbW9kZSAgICAqLworCisjZGVmaW5lIEVBRENfQ1RMX0RNT0ZfU1RSQUlHSFRfQklOQVJZICAgICAgICgwVUw8PEVBRENfQ1RMX0RNT0ZfUG9zKSAgICAgLyohPCBTZWxlY3QgdGhlIHN0cmFpZ2h0IGJpbmFyeSBmb3JtYXQgYXMgdGhlIG91dHB1dCBmb3JtYXQgb2YgdGhlIGNvbnZlcnNpb24gcmVzdWx0ICAgKi8KKyNkZWZpbmUgRUFEQ19DVExfRE1PRl9UV09TX0NPTVBMRU1FTlQgICAgICAgKDFVTDw8RUFEQ19DVExfRE1PRl9Qb3MpICAgICAvKiE8IFNlbGVjdCB0aGUgMidzIGNvbXBsZW1lbnQgZm9ybWF0IGFzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoZSBjb252ZXJzaW9uIHJlc3VsdCAgICAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEVBRENfU0NUTCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRUFEQ19TQ1RMX0NIU0VMKHgpICAgICAgICAgICAgICAgICAgKCh4KSA8PCBFQURDX1NDVExfQ0hTRUxfUG9zKSAgICAgICAvKiE8IEEvRCBzYW1wbGUgbW9kdWxlIGNoYW5uZWwgc2VsZWN0aW9uICovCisjZGVmaW5lIEVBRENfU0NUTF9UUkdETFlESVYoeCkgICAgICAgICAgICAgICgoeCkgPDwgRUFEQ19TQ1RMX1RSR0RMWURJVl9Qb3MpICAgLyohPCBBL0Qgc2FtcGxlIG1vZHVsZSBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZGVsYXkgY2xvY2sgZGl2aWRlciBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgRUFEQ19TQ1RMX1RSR0RMWUNOVCh4KSAgICAgICAgICAgICAgKCh4KSA8PCBFQURDX1NDVExfVFJHRExZQ05UX1BvcykgICAvKiE8IEEvRCBzYW1wbGUgbW9kdWxlIHN0YXJ0IG9mIGNvbnZlcnNpb24gdHJpZ2dlciBkZWxheSB0aW1lICovCisKKyNkZWZpbmUgRUFEQ19TT0ZUV0FSRV9UUklHR0VSICAgICAgICAgICAgICAgKDBVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgICAgLyohPCBTb2Z0d2FyZSB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfRkFMTElOR19FREdFX1RSSUdHRVIgICAgICAgICAgIChFQURDX1NDVExfRVhURkVOX01zayB8ICgxVUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSkgICAgICAgLyohPCBTVEFEQyBwaW4gZmFsbGluZyBlZGdlIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19SSVNJTkdfRURHRV9UUklHR0VSICAgICAgICAgICAgKEVBRENfU0NUTF9FWFRSRU5fTXNrIHwgKDFVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpKSAgICAgICAvKiE8IFNUQURDIHBpbiByaXNpbmcgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfRkFMTElOR19SSVNJTkdfRURHRV9UUklHR0VSICAgIChFQURDX1NDVExfRVhURkVOX01zayB8IEVBRENfU0NUTF9FWFRSRU5fTXNrIHwgKDFVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpKSAvKiE8IFNUQURDIHBpbiBib3RoIGZhbGxpbmcgYW5kIHJpc2luZyBlZGdlIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19BRElOVDBfVFJJR0dFUiAgICAgICAgICAgICAgICAgKDJVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgICAgLyohPCBBREMgQURJTlQwIGludGVycnVwdCBFT0MgcHVsc2UgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX0FESU5UMV9UUklHR0VSICAgICAgICAgICAgICAgICAoM1VMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAgICAvKiE8IEFEQyBBRElOVDEgaW50ZXJydXB0IEVPQyBwdWxzZSB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfVElNRVIwX1RSSUdHRVIgICAgICAgICAgICAgICAgICg0VUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgICAgIC8qITwgVGltZXIwIG92ZXJmbG93IHB1bHNlIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19USU1FUjFfVFJJR0dFUiAgICAgICAgICAgICAgICAgKDVVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgICAgLyohPCBUaW1lcjEgb3ZlcmZsb3cgcHVsc2UgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX1RJTUVSMl9UUklHR0VSICAgICAgICAgICAgICAgICAoNlVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAgICAvKiE8IFRpbWVyMiBvdmVyZmxvdyBwdWxzZSB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfVElNRVIzX1RSSUdHRVIgICAgICAgICAgICAgICAgICg3VUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgICAgIC8qITwgVGltZXIzIG92ZXJmbG93IHB1bHNlIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19QV00wVEcwX1RSSUdHRVIgICAgICAgICAgICAgICAgKDhVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgICAgLyohPCBFUFdNMFRHMCB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfUFdNMFRHMV9UUklHR0VSICAgICAgICAgICAgICAgICg5VUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgICAgIC8qITwgRVBXTTBURzEgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX1BXTTBURzJfVFJJR0dFUiAgICAgICAgICAgICAgICAoMHhBVUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgICAvKiE8IEVQV00wVEcyIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19QV00wVEczX1RSSUdHRVIgICAgICAgICAgICAgICAgKDB4QlVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAgLyohPCBFUFdNMFRHMyB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfUFdNMFRHNF9UUklHR0VSICAgICAgICAgICAgICAgICgweENVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgIC8qITwgRVBXTTBURzQgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX1BXTTBURzVfVFJJR0dFUiAgICAgICAgICAgICAgICAoMHhEVUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgICAvKiE8IEVQV00wVEc1IHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19QV00xVEcwX1RSSUdHRVIgICAgICAgICAgICAgICAgKDB4RVVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAgLyohPCBFUFdNMVRHMCB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfUFdNMVRHMV9UUklHR0VSICAgICAgICAgICAgICAgICgweEZVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgIC8qITwgRVBXTTFURzEgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX1BXTTFURzJfVFJJR0dFUiAgICAgICAgICAgICAgICAoMHgxMFVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAvKiE8IEVQV00xVEcyIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19QV00xVEczX1RSSUdHRVIgICAgICAgICAgICAgICAgKDB4MTFVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgLyohPCBFUFdNMVRHMyB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfUFdNMVRHNF9UUklHR0VSICAgICAgICAgICAgICAgICgweDEyVUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgIC8qITwgRVBXTTFURzQgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX1BXTTFURzVfVFJJR0dFUiAgICAgICAgICAgICAgICAoMHgxM1VMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAvKiE8IEVQV00xVEc1IHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19CUFdNMFRHX1RSSUdHRVIgICAgICAgICAgICAgICAgKDB4MTRVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgLyohPCBCUFdNMFRHIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19CUFdNMVRHX1RSSUdHRVIgICAgICAgICAgICAgICAgKDB4MTVVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgLyohPCBCUFdNMVRHIHRyaWdnZXIgKi8KKworI2RlZmluZSBFQURDX1NDVExfVFJHRExZRElWX0RJVklERVJfMSAgICAgICAoMFVMPDxFQURDX1NDVExfVFJHRExZRElWX1BvcykgICAgICAgICAvKiE8IFRyaWdnZXIgZGVsYXkgY2xvY2sgZnJlcXVlbmN5IGlzIEFEQ19DTEsvMSAqLworI2RlZmluZSBFQURDX1NDVExfVFJHRExZRElWX0RJVklERVJfMiAgICAgICAoMHgxVUw8PEVBRENfU0NUTF9UUkdETFlESVZfUG9zKSAgICAgICAvKiE8IFRyaWdnZXIgZGVsYXkgY2xvY2sgZnJlcXVlbmN5IGlzIEFEQ19DTEsvMiAqLworI2RlZmluZSBFQURDX1NDVExfVFJHRExZRElWX0RJVklERVJfNCAgICAgICAoMHgyVUw8PEVBRENfU0NUTF9UUkdETFlESVZfUG9zKSAgICAgICAvKiE8IFRyaWdnZXIgZGVsYXkgY2xvY2sgZnJlcXVlbmN5IGlzIEFEQ19DTEsvNCAqLworI2RlZmluZSBFQURDX1NDVExfVFJHRExZRElWX0RJVklERVJfMTYgICAgICAoMHgzVUw8PEVBRENfU0NUTF9UUkdETFlESVZfUG9zKSAgICAgICAvKiE8IFRyaWdnZXIgZGVsYXkgY2xvY2sgZnJlcXVlbmN5IGlzIEFEQ19DTEsvMTYgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBFQURDX0NNUCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEVBRENfQ01QX0NNUENPTkRfTEVTU19USEFOICAgICAgICAgICgwVUw8PEVBRENfQ01QX0NNUENPTkRfUG9zKSAgIC8qITwgVGhlIGNvbXBhcmUgY29uZGl0aW9uIGlzICJsZXNzIHRoYW4iICovCisjZGVmaW5lIEVBRENfQ01QX0NNUENPTkRfR1JFQVRFUl9PUl9FUVVBTCAgICgxVUw8PEVBRENfQ01QX0NNUENPTkRfUG9zKSAgIC8qITwgVGhlIGNvbXBhcmUgY29uZGl0aW9uIGlzICJncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iICovCisjZGVmaW5lIEVBRENfQ01QX0NNUFdFTl9FTkFCTEUgICAgICAgICAgICAgIChFQURDX0NNUF9DTVBXRU5fTXNrKSAgICAvKiE8IENvbXBhcmUgd2luZG93IG1vZGUgZW5hYmxlICovCisjZGVmaW5lIEVBRENfQ01QX0NNUFdFTl9ESVNBQkxFICAgICAgICAgICAgICh+RUFEQ19DTVBfQ01QV0VOX01zaykgICAvKiE8IENvbXBhcmUgd2luZG93IG1vZGUgZGlzYWJsZSAqLworI2RlZmluZSBFQURDX0NNUF9BRENNUElFX0VOQUJMRSAgICAgICAgICAgICAoRUFEQ19DTVBfQURDTVBJRV9Nc2spICAgLyohPCBBL0QgcmVzdWx0IGNvbXBhcmUgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBFQURDX0NNUF9BRENNUElFX0RJU0FCTEUgICAgICAgICAgICAofkVBRENfQ01QX0FEQ01QSUVfTXNrKSAgLyohPCBBL0QgcmVzdWx0IGNvbXBhcmUgaW50ZXJydXB0IGRpc2FibGUgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFQURDX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisvKiogQGFkZHRvZ3JvdXAgRUFEQ19FWFBPUlRFRF9GVU5DVElPTlMgRUFEQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgRUFEQyBNYWNybyBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICAqIEBicmllZiBBL0QgQ29udmVydGVyIENvbnRyb2wgQ2lyY3VpdHMgUmVzZXQuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgQURDUlNUIGJpdCAoRUFEQ19DVFsxXSkgcmVtYWlucyAxIGR1cmluZyBBREMgcmVzZXQsIHdoZW4gQURDIHJlc2V0IGVuZCwgdGhlIEFEQ1JTVCBiaXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIHRvIDAuCisgICovCisjZGVmaW5lIEVBRENfQ09OVl9SRVNFVChlYWRjKSAoKGVhZGMpLT5DVEwgfD0gRUFEQ19DVExfQURDUlNUX01zaykKKworLyoqCisgICogQGJyaWVmIEVuYWJsZSBQRE1BIHRyYW5zZmVyLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFdoZW4gQS9EIGNvbnZlcnNpb24gaXMgY29tcGxldGVkLCB0aGUgY29udmVydGVkIGRhdGEgaXMgbG9hZGVkIGludG8gRUFEQ19EQVRuIChuOiAwIH4gMTgpIHJlZ2lzdGVyLAorICAqICAgICAgICAgdXNlciBjYW4gZW5hYmxlIHRoaXMgYml0IHRvIGdlbmVyYXRlIGEgUERNQSBkYXRhIHRyYW5zZmVyIHJlcXVlc3QuCisgIFdoZW4gc2V0IFBETUFFTiBiaXQgKEVBRENfQ1RMWzExXSksIHVzZXIgbXVzdCBzZXQgQURJTlRFTm4gKEVBRENfQ1RMWzU6Ml0sIG49MH4zKSA9IDAgdG8gZGlzYWJsZSBpbnRlcnJ1cHQuCisgICovCisjZGVmaW5lIEVBRENfRU5BQkxFX1BETUEoZWFkYykgKChlYWRjKS0+Q1RMIHw9IEVBRENfQ1RMX1BETUFFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIFBETUEgdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgUERNQSB0cmFuc2Zlci4KKyAgKi8KKyNkZWZpbmUgRUFEQ19ESVNBQkxFX1BETUEoZWFkYykgKChlYWRjKS0+Q1RMICY9ICh+RUFEQ19DVExfUERNQUVOX01zaykpCisKKy8qKgorICAqIEBicmllZiBFbmFibGUgZG91YmxlIGJ1ZmZlciBtb2RlLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTnVtIERlY2lkZXMgdGhlIHNhbXBsZSBtb2R1bGUgbnVtYmVyLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDMuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhlIEFEQyBjb250cm9sbGVyIHN1cHBvcnRzIGEgZG91YmxlIGJ1ZmZlciBtb2RlIGluIHNhbXBsZSBtb2R1bGUgMH4zLgorICAqICAgICAgICAgSWYgdXNlciBlbmFibGUgREJNRU4gKEVBRENfU0NUTG5bMjNdLCBuPTB+MyksIHRoZSBkb3VibGUgYnVmZmVyIG1vZGUgd2lsbCBlbmFibGUuCisgICovCisjZGVmaW5lIEVBRENfRU5BQkxFX0RPVUJMRV9CVUZGRVIoZWFkYywgdTMyTW9kdWxlTnVtKSAoKGVhZGMpLT5TQ1RMWyh1MzJNb2R1bGVOdW0pXSB8PSBFQURDX1NDVExfREJNRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBkb3VibGUgYnVmZmVyIG1vZGUuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVOdW0gRGVjaWRlcyB0aGUgc2FtcGxlIG1vZHVsZSBudW1iZXIsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBTYW1wbGUgaGFzIG9uZSBzYW1wbGUgcmVzdWx0IHJlZ2lzdGVyLgorICAqLworI2RlZmluZSBFQURDX0RJU0FCTEVfRE9VQkxFX0JVRkZFUihlYWRjLCB1MzJNb2R1bGVOdW0pICgoZWFkYyktPlNDVExbKHUzMk1vZHVsZU51bSldICY9IH5FQURDX1NDVExfREJNRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgU2V0IEFESUZuIGF0IEEvRCBlbmQgb2YgY29udmVyc2lvbi4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU51bSBEZWNpZGVzIHRoZSBzYW1wbGUgbW9kdWxlIG51bWJlciwgdmFsaWQgdmFsdWUgYXJlIGZyb20gMCB0byAxNS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGUgQS9EIGNvbnZlcnRlciBnZW5lcmF0ZXMgQURJRm4gKEVBRENfU1RBVFVTMlszOjBdLCBuPTB+MykgYXQgdGhlIHN0YXJ0IG9mIGNvbnZlcnNpb24uCisgICovCisjZGVmaW5lIEVBRENfRU5BQkxFX0lOVF9QT1NJVElPTihlYWRjLCB1MzJNb2R1bGVOdW0pICgoZWFkYyktPlNDVExbKHUzMk1vZHVsZU51bSldIHw9IEVBRENfU0NUTF9JTlRQT1NfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgU2V0IEFESUZuIGF0IEEvRCBzdGFydCBvZiBjb252ZXJzaW9uLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTnVtIERlY2lkZXMgdGhlIHNhbXBsZSBtb2R1bGUgbnVtYmVyLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDE1LgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoZSBBL0QgY29udmVydGVyIGdlbmVyYXRlcyBBRElGbiAoRUFEQ19TVEFUVVMyWzM6MF0sIG49MH4zKSBhdCB0aGUgZW5kIG9mIGNvbnZlcnNpb24uCisgICovCisjZGVmaW5lIEVBRENfRElTQUJMRV9JTlRfUE9TSVRJT04oZWFkYywgdTMyTW9kdWxlTnVtKSAoKGVhZGMpLT5TQ1RMWyh1MzJNb2R1bGVOdW0pXSAmPSB+RUFEQ19TQ1RMX0lOVFBPU19Nc2spCisKKy8qKgorICAqIEBicmllZiBFbmFibGUgdGhlIGludGVycnVwdC4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgRGVjaWRlcyB0aGUgY29tYmluYXRpb24gb2YgaW50ZXJydXB0IHN0YXR1cyBiaXRzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzdGF0dXMuCisgICogICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQuIEJpdCAwIGlzIEFEQ0lFTjAsIGJpdCAxIGlzIEFEQ0lFTjEuLi4sIGJpdCAzIGlzIEFEQ0lFTjMuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhlIEEvRCBjb252ZXJ0ZXIgZ2VuZXJhdGVzIGEgY29udmVyc2lvbiBlbmQgQURJRm4gKEVBRENfU1RBVFVTMltuXSkgdXBvbiB0aGUgZW5kIG9mIHNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQS9EIGNvbnZlcnNpb24uCisgICogICAgICAgICBJZiBBRENJRU5uIGJpdCAoRUFEQ19DVExbbisyXSkgaXMgc2V0IHRoZW4gY29udmVyc2lvbiBlbmQgaW50ZXJydXB0IHJlcXVlc3QgQURJTlRuIGlzIGdlbmVyYXRlZCAobj0wfjMpLgorICAqLworI2RlZmluZSBFQURDX0VOQUJMRV9JTlQoZWFkYywgdTMyTWFzaykgKChlYWRjKS0+Q1RMIHw9ICgodTMyTWFzaykgPDwgRUFEQ19DVExfQURDSUVOMF9Qb3MpKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSB0aGUgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzayBEZWNpZGVzIHRoZSBjb21iaW5hdGlvbiBvZiBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHN0YXR1cy4KKyAgKiAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHRzIHdpbGwgYmUgZGlzYWJsZWQuIEJpdCAwIGlzIEFEQ0lFTjAsIGJpdCAxIGlzIEFEQ0lFTjEuLi4sIGJpdCAzIGlzIEFEQ0lFTjMuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgU3BlY2lmaWMgc2FtcGxlIG1vZHVsZSBBL0QgQURJTlQwIGludGVycnVwdCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgKi8KKyNkZWZpbmUgRUFEQ19ESVNBQkxFX0lOVChlYWRjLCB1MzJNYXNrKSAoKGVhZGMpLT5DVEwgJj0gfigodTMyTWFzaykgPDwgRUFEQ19DVExfQURDSUVOMF9Qb3MpKQorCisvKioKKyAgKiBAYnJpZWYgRW5hYmxlIHRoZSBzYW1wbGUgbW9kdWxlIGludGVycnVwdC4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkludFNlbCBEZWNpZGVzIHdoaWNoIGludGVycnVwdCBzb3VyY2Ugd2lsbCBiZSB1c2VkLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDMuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVNYXNrIHRoZSBjb21iaW5hdGlvbiBvZiBzYW1wbGUgbW9kdWxlIGludGVycnVwdCBzdGF0dXMgYml0cy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBzYW1wbGUgbW9kdWxlIGludGVycnVwdCBzdGF0dXMuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggc2FtcGxlIG1vZHVsZSBpbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZCwgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMX4weDdGRkZGLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoZXJlIGFyZSA0IEFEQyBpbnRlcnJ1cHRzIEFESU5UMH4zLCBhbmQgZWFjaCBvZiB0aGVzZSBpbnRlcnJ1cHRzIGhhcyBpdHMgb3duIGludGVycnVwdCB2ZWN0b3IgYWRkcmVzcy4KKyAgKi8KKyNkZWZpbmUgRUFEQ19FTkFCTEVfU0FNUExFX01PRFVMRV9JTlQoZWFkYywgdTMySW50U2VsLCB1MzJNb2R1bGVNYXNrKSAoKGVhZGMpLT5JTlRTUkNbKHUzMkludFNlbCldIHw9ICh1MzJNb2R1bGVNYXNrKSkKKworLyoqCisgICogQGJyaWVmIERpc2FibGUgdGhlIHNhbXBsZSBtb2R1bGUgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMySW50U2VsIERlY2lkZXMgd2hpY2ggaW50ZXJydXB0IHNvdXJjZSB3aWxsIGJlIHVzZWQsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMy4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU1hc2sgdGhlIGNvbWJpbmF0aW9uIG9mIHNhbXBsZSBtb2R1bGUgaW50ZXJydXB0IHN0YXR1cyBiaXRzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIHNhbXBsZSBtb2R1bGUgaW50ZXJydXB0IHN0YXR1cy4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBzYW1wbGUgbW9kdWxlIGludGVycnVwdHMgd2lsbCBiZSBkaXNhYmxlZCwgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMX4weDdGRkZGLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoZXJlIGFyZSA0IEFEQyBpbnRlcnJ1cHRzIEFESU5UMH4zLCBhbmQgZWFjaCBvZiB0aGVzZSBpbnRlcnJ1cHRzIGhhcyBpdHMgb3duIGludGVycnVwdCB2ZWN0b3IgYWRkcmVzcy4KKyAgKi8KKyNkZWZpbmUgRUFEQ19ESVNBQkxFX1NBTVBMRV9NT0RVTEVfSU5UKGVhZGMsIHUzMkludFNlbCwgdTMyTW9kdWxlTWFzaykgKChlYWRjKS0+SU5UU1JDWyh1MzJJbnRTZWwpXSAmPSB+KHUzMk1vZHVsZU1hc2spKQorCisvKioKKyAgKiBAYnJpZWYgU2V0IHRoZSBpbnB1dCBtb2RlIG91dHB1dCBmb3JtYXQuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJGb3JtYXQgRGVjaWRlcyB0aGUgb3V0cHV0IGZvcm1hdC4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfQ1RMX0RNT0ZfU1RSQUlHSFRfQklOQVJZICAgICAgOlNlbGVjdCB0aGUgc3RyYWlnaHQgYmluYXJ5IGZvcm1hdCBhcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiB0aGUgY29udmVyc2lvbiByZXN1bHQuCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX0NUTF9ETU9GX1RXT1NfQ09NUExFTUVOVCAgICAgIDpTZWxlY3QgdGhlIDIncyBjb21wbGVtZW50IGZvcm1hdCBhcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiB0aGUgY29udmVyc2lvbiByZXN1bHQuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhlIG1hY3JvIGlzIHVzZWQgdG8gc2V0IEEvRCBpbnB1dCBtb2RlIG91dHB1dCBmb3JtYXQuCisgICovCisjZGVmaW5lIEVBRENfU0VUX0RNT0YoZWFkYywgdTMyRm9ybWF0KSAoKGVhZGMpLT5DVEwgPSAoKGVhZGMpLT5DVEwgJiB+RUFEQ19DVExfRE1PRl9Nc2spIHwgKHUzMkZvcm1hdCkpCisKKy8qKgorICAqIEBicmllZiBTdGFydCB0aGUgQS9EIGNvbnZlcnNpb24uCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBzYW1wbGUgbW9kdWxlLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIHNhbXBsZSBtb2R1bGUuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBzYW1wbGUgbW9kdWxlIHdpbGwgYmUgY29udmVyc2lvbiwgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMX4weDdGRkZGLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIGlzIHNhbXBsZSBtb2R1bGUgMCwgYml0IDEgaXMgc2FtcGxlIG1vZHVsZSAxLi4uLCBiaXQgMTggaXMgc2FtcGxlIG1vZHVsZSAxOC4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBBZnRlciB3cml0ZSBFQURDX1NXVFJHIHJlZ2lzdGVyIHRvIHN0YXJ0IEFEQyBjb252ZXJzaW9uLCB0aGUgRUFEQ19QRU5EU1RTIHJlZ2lzdGVyIHdpbGwgc2hvdyB3aGljaCBTQU1QTEUgd2lsbCBjb252ZXJzaW9uLgorICAqLworI2RlZmluZSBFQURDX1NUQVJUX0NPTlYoZWFkYywgdTMyTW9kdWxlTWFzaykgKChlYWRjKS0+U1dUUkcgPSAodTMyTW9kdWxlTWFzaykpCisKKy8qKgorICAqIEBicmllZiBDYW5jZWwgdGhlIGNvbnZlcnNpb24gZm9yIHNhbXBsZSBtb2R1bGUuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBzYW1wbGUgbW9kdWxlLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIHNhbXBsZSBtb2R1bGUuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBzYW1wbGUgbW9kdWxlIHdpbGwgc3RvcCB0aGUgY29udmVyc2lvbiwgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMX4weDdGRkZGLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIGlzIHNhbXBsZSBtb2R1bGUgMCwgYml0IDEgaXMgc2FtcGxlIG1vZHVsZSAxLi4uLCBiaXQgMTggaXMgc2FtcGxlIG1vZHVsZTE4LgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIElmIHVzZXIgd2FudCB0byBkaXNhYmxlIHRoZSBjb252ZXJzaW9uIG9mIHRoZSBzYW1wbGUgbW9kdWxlLCB1c2VyIGNhbiB3cml0ZSBFQURDX1BFTkRTVFMgcmVnaXN0ZXIgdG8gY2xlYXIgaXQuCisgICovCisjZGVmaW5lIEVBRENfU1RPUF9DT05WKGVhZGMsIHUzMk1vZHVsZU1hc2spICgoZWFkYyktPlBFTkRTVFMgPSAodTMyTW9kdWxlTWFzaykpCisKKy8qKgorICAqIEBicmllZiBHZXQgdGhlIGNvbnZlcnNpb24gcGVuZGluZyBmbGFnLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEByZXR1cm4gUmV0dXJuIHRoZSBjb252ZXJzaW9uIHBlbmRpbmcgc2FtcGxlIG1vZHVsZS4KKyAgKiBAZGV0YWlscyBUaGlzIFNUUEZuKEVBRENfUEVORFNUU1sxODowXSkgYml0IHJlbWFpbnMgMSBkdXJpbmcgcGVuZGluZyBzdGF0ZSwgd2hlbiB0aGUgcmVzcGVjdGl2ZSBBREMgY29udmVyc2lvbiBpcyBlbmQsCisgICogICAgICAgICB0aGUgU1RQRm4gKG49MH4xOCkgYml0IGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB0byAwLgorICAqLworI2RlZmluZSBFQURDX0dFVF9QRU5ESU5HX0NPTlYoZWFkYykgKChlYWRjKS0+UEVORFNUUykKKworLyoqCisgICogQGJyaWVmIEdldCB0aGUgY29udmVyc2lvbiBkYXRhIG9mIHRoZSB1c2VyLXNwZWNpZmllZCBzYW1wbGUgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTnVtIERlY2lkZXMgdGhlIHNhbXBsZSBtb2R1bGUgbnVtYmVyLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDE4LgorICAqIEByZXR1cm4gUmV0dXJuIHRoZSBjb252ZXJzaW9uIGRhdGEgb2YgdGhlIHVzZXItc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUuCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgUkVTVUxUIGJpdCAoRUFEQ19EQVRuWzE1OjBdLCBuPTB+MTgpIGZpZWxkIHRvIGdldCBjb252ZXJzaW9uIGRhdGEuCisgICovCisjZGVmaW5lIEVBRENfR0VUX0NPTlZfREFUQShlYWRjLCB1MzJNb2R1bGVOdW0pICgoZWFkYyktPkRBVFsodTMyTW9kdWxlTnVtKV0gJiBFQURDX0RBVF9SRVNVTFRfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgR2V0IHRoZSBkYXRhIG92ZXJydW4gZmxhZyBvZiB0aGUgdXNlci1zcGVjaWZpZWQgc2FtcGxlIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGRhdGEgb3ZlcnJ1biBzdGF0dXMgYml0cy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBkYXRhIG92ZXJydW4gc3RhdHVzLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAxfjB4N0ZGRkYuCisgICogQHJldHVybiBSZXR1cm4gdGhlIGRhdGEgb3ZlcnJ1biBmbGFnIG9mIHRoZSB1c2VyLXNwZWNpZmllZCBzYW1wbGUgbW9kdWxlLgorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZWFkIE9WIGJpdCAoRUFEQ19TVEFUVVMwWzMxOjE2XSwgRUFEQ19TVEFUVVMxWzE4OjE2XSkgZmllbGQgdG8gZ2V0IGRhdGEgb3ZlcnJ1biBzdGF0dXMuCisgICovCisjZGVmaW5lIEVBRENfR0VUX0RBVEFfT1ZFUlJVTl9GTEFHKGVhZGMsIHUzMk1vZHVsZU1hc2spICgoKChlYWRjKS0+U1RBVFVTMCA+PiBFQURDX1NUQVRVUzBfT1ZfUG9zKSB8ICgoZWFkYyktPlNUQVRVUzEgJiBFQURDX1NUQVRVUzFfT1ZfTXNrKSkgJiAodTMyTW9kdWxlTWFzaykpCisKKy8qKgorICAqIEBicmllZiBHZXQgdGhlIGRhdGEgdmFsaWQgZmxhZyBvZiB0aGUgdXNlci1zcGVjaWZpZWQgc2FtcGxlIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGRhdGEgdmFsaWQgc3RhdHVzIGJpdHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgZGF0YSB2YWxpZCBzdGF0dXMsIHZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDF+MHg3RkZGRi4KKyAgKiBAcmV0dXJuIFJldHVybiB0aGUgZGF0YSB2YWxpZCBmbGFnIG9mIHRoZSB1c2VyLXNwZWNpZmllZCBzYW1wbGUgbW9kdWxlLgorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZWFkIFZBTElEIGJpdCAoRUFEQ19TVEFUVVMwWzE1OjBdLCBFQURDX1NUQVRVUzFbMjowXSkgZmllbGQgdG8gZ2V0IGRhdGEgdmFsaWQgc3RhdHVzLgorICAqLworI2RlZmluZSBFQURDX0dFVF9EQVRBX1ZBTElEX0ZMQUcoZWFkYywgdTMyTW9kdWxlTWFzaykgKCgoKGVhZGMpLT5TVEFUVVMwICYgRUFEQ19TVEFUVVMwX1ZBTElEX01zaykgfCAoKChlYWRjKS0+U1RBVFVTMSAmIEVBRENfU1RBVFVTMV9WQUxJRF9Nc2spIDw8IDE2KSkgJiAodTMyTW9kdWxlTWFzaykpCisKKy8qKgorICAqIEBicmllZiBHZXQgdGhlIGRvdWJsZSBkYXRhIG9mIHRoZSB1c2VyLXNwZWNpZmllZCBzYW1wbGUgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTnVtIERlY2lkZXMgdGhlIHNhbXBsZSBtb2R1bGUgbnVtYmVyLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDE4LgorICAqIEByZXR1cm4gUmV0dXJuIHRoZSBkb3VibGUgZGF0YSBvZiB0aGUgdXNlci1zcGVjaWZpZWQgc2FtcGxlIG1vZHVsZS4KKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCBSRVNVTFQgYml0IChFQURDX0REQVRuWzE1OjBdLCBuPTB+MykgZmllbGQgdG8gZ2V0IGNvbnZlcnNpb24gZGF0YS4KKyAgKi8KKyNkZWZpbmUgRUFEQ19HRVRfRE9VQkxFX0RBVEEoZWFkYywgdTMyTW9kdWxlTnVtKSAoKGVhZGMpLT5EREFUWyh1MzJNb2R1bGVOdW0pXSAmIEVBRENfRERBVDBfUkVTVUxUX01zaykKKworLyoqCisgICogQGJyaWVmIEdldCB0aGUgdXNlci1zcGVjaWZpZWQgaW50ZXJydXB0IGZsYWdzLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgaW50ZXJydXB0IHN0YXR1cyBiaXRzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzdGF0dXMuCisgICogICAgICAgICAgICAgICAgICAgIEJpdCAwIGlzIEFESUYwLCBiaXQgMSBpcyBBRElGMS4uLiwgYml0IDMgaXMgQURJRjMuCisgICogICAgICAgICAgICAgICAgICAgIEJpdCA0IGlzIEFEQ01QRjAsIGJpdCA1IGlzIEFEQ01QRjEuLi4sIGJpdCA3IGlzIEFEQ01QRjMuCisgICogQHJldHVybiBSZXR1cm4gdGhlIHVzZXItc3BlY2lmaWVkIGludGVycnVwdCBmbGFncy4KKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZ2V0IHRoZSB1c2VyLXNwZWNpZmllZCBpbnRlcnJ1cHQgZmxhZ3MuCisgICovCisjZGVmaW5lIEVBRENfR0VUX0lOVF9GTEFHKGVhZGMsIHUzMk1hc2spICgoZWFkYyktPlNUQVRVUzIgJiAodTMyTWFzaykpCisKKy8qKgorICAqIEBicmllZiBHZXQgdGhlIHVzZXItc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUgb3ZlcnJ1biBmbGFncy4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIHNhbXBsZSBtb2R1bGUgb3ZlcnJ1biBzdGF0dXMgYml0cy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBzYW1wbGUgbW9kdWxlIG92ZXJydW4gc3RhdHVzLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAxfjB4N0ZGRkYuCisgICogQHJldHVybiBSZXR1cm4gdGhlIHVzZXItc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUgb3ZlcnJ1biBmbGFncy4KKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZ2V0IHRoZSB1c2VyLXNwZWNpZmllZCBzYW1wbGUgbW9kdWxlIG92ZXJydW4gZmxhZ3MuCisgICovCisjZGVmaW5lIEVBRENfR0VUX1NBTVBMRV9NT0RVTEVfT1ZfRkxBRyhlYWRjLCB1MzJNb2R1bGVNYXNrKSAoKGVhZGMpLT5PVlNUUyAmICh1MzJNb2R1bGVNYXNrKSkKKworLyoqCisgICogQGJyaWVmIENsZWFyIHRoZSBzZWxlY3RlZCBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBjb21wYXJlIGludGVycnVwdCBzdGF0dXMgYml0cy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjb21wYXJlIGludGVycnVwdCBzdGF0dXMuCisgICogICAgICAgICAgICAgICAgICAgIEJpdCAwIGlzIEFESUYwLCBiaXQgMSBpcyBBRElGMS4uLiwgYml0IDMgaXMgQURJRjMuCisgICogICAgICAgICAgICAgICAgICAgIEJpdCA0IGlzIEFEQ01QRjAsIGJpdCA1IGlzIEFEQ01QRjEuLi4sIGJpdCA3IGlzIEFEQ01QRjMuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNsZWFyIGNsZWFyIHRoZSBzZWxlY3RlZCBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMuCisgICovCisjZGVmaW5lIEVBRENfQ0xSX0lOVF9GTEFHKGVhZGMsIHUzMk1hc2spICgoZWFkYyktPlNUQVRVUzIgPSAodTMyTWFzaykpCisKKy8qKgorICAqIEBicmllZiBDbGVhciB0aGUgc2VsZWN0ZWQgc2FtcGxlIG1vZHVsZSBvdmVycnVuIHN0YXR1cyBiaXRzLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTWFzayBUaGUgY29tYmluYXRpb24gb2Ygc2FtcGxlIG1vZHVsZSBvdmVycnVuIHN0YXR1cyBiaXRzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIHNhbXBsZSBtb2R1bGUgb3ZlcnJ1biBzdGF0dXMuCisgICogICAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgU1BPVkYwLCBiaXQgMSBpcyBTUE9WRjEuLi4sIGJpdCAxOCBpcyBTUE9WRjE4LgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjbGVhciB0aGUgc2VsZWN0ZWQgc2FtcGxlIG1vZHVsZSBvdmVycnVuIHN0YXR1cyBiaXRzLgorICAqLworI2RlZmluZSBFQURDX0NMUl9TQU1QTEVfTU9EVUxFX09WX0ZMQUcoZWFkYywgdTMyTW9kdWxlTWFzaykgKChlYWRjKS0+T1ZTVFMgPSAodTMyTW9kdWxlTWFzaykpCisKKy8qKgorICAqIEBicmllZiBDaGVjayBhbGwgc2FtcGxlIG1vZHVsZSBBL0QgcmVzdWx0IGRhdGEgcmVnaXN0ZXIgb3ZlcnJ1biBmbGFncy4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcmV0dmFsIDAgTm9uZSBvZiBzYW1wbGUgbW9kdWxlIGRhdGEgcmVnaXN0ZXIgb3ZlcnJ1biBmbGFnIGlzIHNldCB0byAxLgorICAqIEByZXR2YWwgMSBBbnkgb25lIG9mIHNhbXBsZSBtb2R1bGUgZGF0YSByZWdpc3RlciBvdmVycnVuIGZsYWcgaXMgc2V0IHRvIDEuCisgICogQGRldGFpbHMgVGhlIEFPViBiaXQgKEVBRENfU1RBVFVTMlsyN10pIHdpbGwga2VlcCAxIHdoZW4gYW55IG9uZSBvZiBzYW1wbGUgbW9kdWxlIGRhdGEgcmVnaXN0ZXIgb3ZlcnJ1biBmbGFnIE9WbiAoRUFEQ19EQVRuWzE2XSkgaXMgc2V0IHRvIDEuCisgICovCisjZGVmaW5lIEVBRENfSVNfREFUQV9PVihlYWRjKSAoKChlYWRjKS0+U1RBVFVTMiAmIEVBRENfU1RBVFVTMl9BT1ZfTXNrKSA+PiBFQURDX1NUQVRVUzJfQU9WX1BvcykKKworLyoqCisgICogQGJyaWVmIENoZWNrIGFsbCBzYW1wbGUgbW9kdWxlIEEvRCByZXN1bHQgZGF0YSByZWdpc3RlciB2YWxpZCBmbGFncy4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcmV0dmFsIDAgTm9uZSBvZiBzYW1wbGUgbW9kdWxlIGRhdGEgcmVnaXN0ZXIgdmFsaWQgZmxhZyBpcyBzZXQgdG8gMS4KKyAgKiBAcmV0dmFsIDEgQW55IG9uZSBvZiBzYW1wbGUgbW9kdWxlIGRhdGEgcmVnaXN0ZXIgdmFsaWQgZmxhZyBpcyBzZXQgdG8gMS4KKyAgKiBAZGV0YWlscyBUaGUgQVZBTElEIGJpdCAoRUFEQ19TVEFUVVMyWzI2XSkgd2lsbCBrZWVwIDEgd2hlbiBhbnkgb25lIG9mIHNhbXBsZSBtb2R1bGUgZGF0YSByZWdpc3RlciB2YWxpZCBmbGFnIFZBTElEbiAoRUFEQ19EQVRuWzE3XSkgaXMgc2V0IHRvIDEuCisgICovCisjZGVmaW5lIEVBRENfSVNfREFUQV9WQUxJRChlYWRjKSAoKChlYWRjKS0+U1RBVFVTMiAmIEVBRENfU1RBVFVTMl9BVkFMSURfTXNrKSA+PiBFQURDX1NUQVRVUzJfQVZBTElEX1BvcykKKworLyoqCisgICogQGJyaWVmIENoZWNrIGFsbCBBL0Qgc2FtcGxlIG1vZHVsZSBzdGFydCBvZiBjb252ZXJzaW9uIG92ZXJydW4gZmxhZ3MuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHJldHZhbCAwIE5vbmUgb2Ygc2FtcGxlIG1vZHVsZSBldmVudCBvdmVycnVuIGZsYWcgaXMgc2V0IHRvIDEuCisgICogQHJldHZhbCAxIEFueSBvbmUgb2Ygc2FtcGxlIG1vZHVsZSBldmVudCBvdmVycnVuIGZsYWcgaXMgc2V0IHRvIDEuCisgICogQGRldGFpbHMgVGhlIFNUT1ZGIGJpdCAoRUFEQ19TVEFUVVMyWzI1XSkgd2lsbCBrZWVwIDEgd2hlbiBhbnkgb25lIG9mIHNhbXBsZSBtb2R1bGUgZXZlbnQgb3ZlcnJ1biBmbGFnIFNQT1ZGbiAoRUFEQ19PVlNUU1tuXSkgaXMgc2V0IHRvIDEuCisgICovCisjZGVmaW5lIEVBRENfSVNfU0FNUExFX01PRFVMRV9PVihlYWRjKSAoKChlYWRjKS0+U1RBVFVTMiAmIEVBRENfU1RBVFVTMl9TVE9WRl9Nc2spID4+IEVBRENfU1RBVFVTMl9TVE9WRl9Qb3MpCisKKy8qKgorICAqIEBicmllZiBDaGVjayBhbGwgQS9EIGludGVycnVwdCBmbGFnIG92ZXJydW4gYml0cy4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcmV0dmFsIDAgTm9uZSBvZiBBRElOVCBpbnRlcnJ1cHQgZmxhZyBpcyBvdmVyd3JpdHRlbiB0byAxLgorICAqIEByZXR2YWwgMSBBbnkgb25lIG9mIEFESU5UIGludGVycnVwdCBmbGFnIGlzIG92ZXJ3cml0dGVuIHRvIDEuCisgICogQGRldGFpbHMgVGhlIEFET1ZJRiBiaXQgKEVBRENfU1RBVFVTMlsyNF0pIHdpbGwga2VlcCAxIHdoZW4gYW55IG9uZSBvZiBBRElOVCBpbnRlcnJ1cHQgZmxhZyBBRE9WSUZuIChFQURDX1NUQVRVUzJbMTE6OF0pIGlzIG92ZXJ3cml0dGVuIHRvIDEuCisgICovCisjZGVmaW5lIEVBRENfSVNfSU5UX0ZMQUdfT1YoZWFkYykgKCgoZWFkYyktPlNUQVRVUzIgJiBFQURDX1NUQVRVUzJfQURPVklGX01zaykgPj4gRUFEQ19TVEFUVVMyX0FET1ZJRl9Qb3MpCisKKy8qKgorICAqIEBicmllZiBHZXQgdGhlIGJ1c3kgc3RhdGUgb2YgRUFEQy4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcmV0dmFsIDAgSWRsZSBzdGF0ZS4KKyAgKiBAcmV0dmFsIDEgQnVzeSBzdGF0ZS4KKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCBCVVNZIGJpdCAoRUFEQ19TVEFUVVMyWzIzXSkgdG8gZ2V0IGJ1c3kgc3RhdGUuCisgICovCisjZGVmaW5lIEVBRENfSVNfQlVTWShlYWRjKSAoKChlYWRjKS0+U1RBVFVTMiAmIEVBRENfU1RBVFVTMl9CVVNZX01zaykgPj4gRUFEQ19TVEFUVVMyX0JVU1lfUG9zKQorCisvKioKKyAgKiBAYnJpZWYgQ29uZmlndXJlIHRoZSBjb21wYXJhdG9yIDAgYW5kIGVuYWJsZSBpdC4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU51bSBzcGVjaWZpZXMgdGhlIGNvbXBhcmUgc2FtcGxlIG1vZHVsZSwgdmFsaWQgdmFsdWUgYXJlIGZyb20gMCB0byAxOC4KKyAgKiBAcGFyYW1baW5dIHUzMkNvbmRpdGlvbiBzcGVjaWZpZXMgdGhlIGNvbXBhcmUgY29uZGl0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfQ01QX0NNUENPTkRfTEVTU19USEFOICAgICAgICAgICAgOlRoZSBjb21wYXJlIGNvbmRpdGlvbiBpcyAibGVzcyB0aGFuIHRoZSBjb21wYXJlIHZhbHVlIgorICAqICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfQ01QX0NNUENPTkRfR1JFQVRFUl9PUl9FUVVBTCAgICAgOlRoZSBjb21wYXJlIGNvbmRpdGlvbiBpcyAiZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjb21wYXJlIHZhbHVlCisgICogQHBhcmFtW2luXSB1MTZDTVBEYXRhIHNwZWNpZmllcyB0aGUgY29tcGFyZSB2YWx1ZSwgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMH4weEZGRi4KKyAgKiBAcGFyYW1baW5dIHUzMk1hdGNoQ291bnQgc3BlY2lmaWVzIHRoZSBtYXRjaCBjb3VudCBzZXR0aW5nLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAwfjB4Ri4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBGb3IgZXhhbXBsZSwgQURDX0VOQUJMRV9DTVAwKEVBREMsIDUsIEFEQ19BRENNUFJfQ01QQ09ORF9HUkVBVEVSX09SX0VRVUFMLCAweDgwMCwgMTAsIEVBRENfQ01QX0NNUFdFTl9ESVNBQkxFLCBFQURDX0NNUF9BRENNUElFX0VOQUJMRSk7CisgICogICAgICAgICBNZWFucyBFQURDIHdpbGwgYXNzZXJ0IGNvbXBhcmF0b3IgMCBmbGFnIGlmIHNhbXBsZSBtb2R1bGUgNSBjb252ZXJzaW9uIHJlc3VsdCBpcyBncmVhdGVyIG9yCisgICogICAgICAgICBlcXVhbCB0byAweDgwMCBmb3IgMTAgdGltZXMgY29udGludW91c2x5LCBhbmQgYSBjb21wYXJlIGludGVycnVwdCByZXF1ZXN0IGlzIGdlbmVyYXRlZC4KKyAgKi8KKyNkZWZpbmUgRUFEQ19FTkFCTEVfQ01QMChlYWRjLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MzJNb2R1bGVOdW0sXAorICAgICAgICAgICAgICAgICAgICAgICAgIHUzMkNvbmRpdGlvbixcCisgICAgICAgICAgICAgICAgICAgICAgICAgdTE2Q01QRGF0YSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgdTMyTWF0Y2hDb3VudCkgKChlYWRjKS0+Q01QWzBdIHw9KCgodTMyTW9kdWxlTnVtKSA8PCBFQURDX0NNUF9DTVBTUExfUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyQ29uZGl0aW9uKSB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1MTZDTVBEYXRhKSA8PCBFQURDX0NNUF9DTVBEQVRfUG9zKXwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodTMyTWF0Y2hDb3VudCkgLSAxVUwpIDw8IEVBRENfQ01QX0NNUE1DTlRfUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQURDX0NNUF9BRENNUEVOX01zaykpCisKKy8qKgorICAqIEBicmllZiBDb25maWd1cmUgdGhlIGNvbXBhcmF0b3IgMSBhbmQgZW5hYmxlIGl0LgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTnVtIHNwZWNpZmllcyB0aGUgY29tcGFyZSBzYW1wbGUgbW9kdWxlLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDE4LgorICAqIEBwYXJhbVtpbl0gdTMyQ29uZGl0aW9uIHNwZWNpZmllcyB0aGUgY29tcGFyZSBjb25kaXRpb24uIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19DTVBfQ01QQ09ORF9MRVNTX1RIQU4gICAgICAgICAgICA6VGhlIGNvbXBhcmUgY29uZGl0aW9uIGlzICJsZXNzIHRoYW4gdGhlIGNvbXBhcmUgdmFsdWUiCisgICogICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19DTVBfQ01QQ09ORF9HUkVBVEVSX09SX0VRVUFMICAgICA6VGhlIGNvbXBhcmUgY29uZGl0aW9uIGlzICJncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNvbXBhcmUgdmFsdWUKKyAgKiBAcGFyYW1baW5dIHUxNkNNUERhdGEgc3BlY2lmaWVzIHRoZSBjb21wYXJlIHZhbHVlLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAwfjB4RkZGLgorICAqIEBwYXJhbVtpbl0gdTMyTWF0Y2hDb3VudCBzcGVjaWZpZXMgdGhlIG1hdGNoIGNvdW50IHNldHRpbmcsIHZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDB+MHhGLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIEZvciBleGFtcGxlLCBBRENfRU5BQkxFX0NNUDEoRUFEQywgNSwgQURDX0FEQ01QUl9DTVBDT05EX0dSRUFURVJfT1JfRVFVQUwsIDB4ODAwLCAxMCwgRUFEQ19DTVBfQURDTVBJRV9FTkFCTEUpOworICAqICAgICAgICAgTWVhbnMgRUFEQyB3aWxsIGFzc2VydCBjb21wYXJhdG9yIDEgZmxhZyBpZiBzYW1wbGUgbW9kdWxlIDUgY29udmVyc2lvbiByZXN1bHQgaXMgZ3JlYXRlciBvcgorICAqICAgICAgICAgZXF1YWwgdG8gMHg4MDAgZm9yIDEwIHRpbWVzIGNvbnRpbnVvdXNseSwgYW5kIGEgY29tcGFyZSBpbnRlcnJ1cHQgcmVxdWVzdCBpcyBnZW5lcmF0ZWQuCisgICovCisjZGVmaW5lIEVBRENfRU5BQkxFX0NNUDEoZWFkYyxcCisgICAgICAgICAgICAgICAgICAgICAgICAgdTMyTW9kdWxlTnVtLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MzJDb25kaXRpb24sXAorICAgICAgICAgICAgICAgICAgICAgICAgIHUxNkNNUERhdGEsXAorICAgICAgICAgICAgICAgICAgICAgICAgIHUzMk1hdGNoQ291bnQpICgoZWFkYyktPkNNUFsxXSB8PSgoKHUzMk1vZHVsZU51bSkgPDwgRUFEQ19DTVBfQ01QU1BMX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMkNvbmRpdGlvbikgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodTE2Q01QRGF0YSkgPDwgRUFEQ19DTVBfQ01QREFUX1Bvcyl8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMk1hdGNoQ291bnQpIC0gMVVMKSA8PCBFQURDX0NNUF9DTVBNQ05UX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFEQ19DTVBfQURDTVBFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgQ29uZmlndXJlIHRoZSBjb21wYXJhdG9yIDIgYW5kIGVuYWJsZSBpdC4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU51bSBzcGVjaWZpZXMgdGhlIGNvbXBhcmUgc2FtcGxlIG1vZHVsZSwgdmFsaWQgdmFsdWUgYXJlIGZyb20gMCB0byAxOC4KKyAgKiBAcGFyYW1baW5dIHUzMkNvbmRpdGlvbiBzcGVjaWZpZXMgdGhlIGNvbXBhcmUgY29uZGl0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfQ01QX0NNUENPTkRfTEVTU19USEFOICAgICAgICAgICAgOlRoZSBjb21wYXJlIGNvbmRpdGlvbiBpcyAibGVzcyB0aGFuIHRoZSBjb21wYXJlIHZhbHVlIgorICAqICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfQ01QX0NNUENPTkRfR1JFQVRFUl9PUl9FUVVBTCAgICAgOlRoZSBjb21wYXJlIGNvbmRpdGlvbiBpcyAiZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjb21wYXJlIHZhbHVlCisgICogQHBhcmFtW2luXSB1MTZDTVBEYXRhIHNwZWNpZmllcyB0aGUgY29tcGFyZSB2YWx1ZSwgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMH4weEZGRi4KKyAgKiBAcGFyYW1baW5dIHUzMk1hdGNoQ291bnQgc3BlY2lmaWVzIHRoZSBtYXRjaCBjb3VudCBzZXR0aW5nLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAwfjB4Ri4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBGb3IgZXhhbXBsZSwgQURDX0VOQUJMRV9DTVAyKEVBREMsIDUsIEFEQ19BRENNUFJfQ01QQ09ORF9HUkVBVEVSX09SX0VRVUFMLCAweDgwMCwgMTAsIEVBRENfQ01QX0NNUFdFTl9ESVNBQkxFLCBFQURDX0NNUF9BRENNUElFX0VOQUJMRSk7CisgICogICAgICAgICBNZWFucyBFQURDIHdpbGwgYXNzZXJ0IGNvbXBhcmF0b3IgMiBmbGFnIGlmIHNhbXBsZSBtb2R1bGUgNSBjb252ZXJzaW9uIHJlc3VsdCBpcyBncmVhdGVyIG9yCisgICogICAgICAgICBlcXVhbCB0byAweDgwMCBmb3IgMTAgdGltZXMgY29udGludW91c2x5LCBhbmQgYSBjb21wYXJlIGludGVycnVwdCByZXF1ZXN0IGlzIGdlbmVyYXRlZC4KKyAgKi8KKyNkZWZpbmUgRUFEQ19FTkFCTEVfQ01QMihlYWRjLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MzJNb2R1bGVOdW0sXAorICAgICAgICAgICAgICAgICAgICAgICAgIHUzMkNvbmRpdGlvbixcCisgICAgICAgICAgICAgICAgICAgICAgICAgdTE2Q01QRGF0YSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgdTMyTWF0Y2hDb3VudCkgKChlYWRjKS0+Q01QWzJdIHw9KCgodTMyTW9kdWxlTnVtKSA8PCBFQURDX0NNUF9DTVBTUExfUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyQ29uZGl0aW9uKSB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1MTZDTVBEYXRhKSA8PCBFQURDX0NNUF9DTVBEQVRfUG9zKXwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodTMyTWF0Y2hDb3VudCkgLSAxVUwpIDw8IEVBRENfQ01QX0NNUE1DTlRfUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQURDX0NNUF9BRENNUEVOX01zaykpCisKKy8qKgorICAqIEBicmllZiBDb25maWd1cmUgdGhlIGNvbXBhcmF0b3IgMyBhbmQgZW5hYmxlIGl0LgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTnVtIHNwZWNpZmllcyB0aGUgY29tcGFyZSBzYW1wbGUgbW9kdWxlLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDE4LgorICAqIEBwYXJhbVtpbl0gdTMyQ29uZGl0aW9uIHNwZWNpZmllcyB0aGUgY29tcGFyZSBjb25kaXRpb24uIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19DTVBfQ01QQ09ORF9MRVNTX1RIQU4gICAgICAgICAgICA6VGhlIGNvbXBhcmUgY29uZGl0aW9uIGlzICJsZXNzIHRoYW4gdGhlIGNvbXBhcmUgdmFsdWUiCisgICogICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19DTVBfQ01QQ09ORF9HUkVBVEVSX09SX0VRVUFMICAgICA6VGhlIGNvbXBhcmUgY29uZGl0aW9uIGlzICJncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNvbXBhcmUgdmFsdWUKKyAgKiBAcGFyYW1baW5dIHUxNkNNUERhdGEgc3BlY2lmaWVzIHRoZSBjb21wYXJlIHZhbHVlLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAwfjB4RkZGLgorICAqIEBwYXJhbVtpbl0gdTMyTWF0Y2hDb3VudCBzcGVjaWZpZXMgdGhlIG1hdGNoIGNvdW50IHNldHRpbmcsIHZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDF+MHhGLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIEZvciBleGFtcGxlLCBBRENfRU5BQkxFX0NNUDMoRUFEQywgNSwgQURDX0FEQ01QUl9DTVBDT05EX0dSRUFURVJfT1JfRVFVQUwsIDB4ODAwLCAxMCwgRUFEQ19DTVBfQURDTVBJRV9FTkFCTEUpOworICAqICAgICAgICAgTWVhbnMgRUFEQyB3aWxsIGFzc2VydCBjb21wYXJhdG9yIDMgZmxhZyBpZiBzYW1wbGUgbW9kdWxlIDUgY29udmVyc2lvbiByZXN1bHQgaXMgZ3JlYXRlciBvcgorICAqICAgICAgICAgZXF1YWwgdG8gMHg4MDAgZm9yIDEwIHRpbWVzIGNvbnRpbnVvdXNseSwgYW5kIGEgY29tcGFyZSBpbnRlcnJ1cHQgcmVxdWVzdCBpcyBnZW5lcmF0ZWQuCisgICovCisjZGVmaW5lIEVBRENfRU5BQkxFX0NNUDMoZWFkYyxcCisgICAgICAgICAgICAgICAgICAgICAgICAgdTMyTW9kdWxlTnVtLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MzJDb25kaXRpb24sXAorICAgICAgICAgICAgICAgICAgICAgICAgIHUxNkNNUERhdGEsXAorICAgICAgICAgICAgICAgICAgICAgICAgIHUzMk1hdGNoQ291bnQpICgoZWFkYyktPkNNUFszXSB8PSgoKHUzMk1vZHVsZU51bSkgPDwgRUFEQ19DTVBfQ01QU1BMX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMkNvbmRpdGlvbikgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodTE2Q01QRGF0YSkgPDwgRUFEQ19DTVBfQ01QREFUX1Bvcyl8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMk1hdGNoQ291bnQpIC0gMVVMKSA8PCBFQURDX0NNUF9DTVBNQ05UX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFEQ19DTVBfQURDTVBFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgRW5hYmxlIHRoZSBjb21wYXJlIHdpbmRvdyBtb2RlLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ01QIFNwZWNpZmllcyB0aGUgY29tcGFyZSByZWdpc3RlciwgdmFsaWQgdmFsdWUgYXJlIDAgYW5kIDIuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgQURDTVBGMCAoRUFEQ19TVEFUVVMyWzRdKSB3aWxsIGJlIHNldCB3aGVuIGJvdGggRUFEQ19DTVAwIGFuZCBFQURDX0NNUDEgY29tcGFyZWQgY29uZGl0aW9uIG1hdGNoZWQuCisgICovCisjZGVmaW5lIEVBRENfRU5BQkxFX0NNUF9XSU5ET1dfTU9ERShlYWRjLCB1MzJDTVApICgoZWFkYyktPkNNUFsodTMyQ01QKV0gfD0gRUFEQ19DTVBfQ01QV0VOX01zaykKKworLyoqCisgICogQGJyaWVmIERpc2FibGUgdGhlIGNvbXBhcmUgd2luZG93IG1vZGUuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJDTVAgU3BlY2lmaWVzIHRoZSBjb21wYXJlIHJlZ2lzdGVyLCB2YWxpZCB2YWx1ZSBhcmUgMCBhbmQgMi4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBBRENNUEYyIChFQURDX1NUQVRVUzJbNl0pIHdpbGwgYmUgc2V0IHdoZW4gYm90aCBFQURDX0NNUDIgYW5kIEVBRENfQ01QMyBjb21wYXJlZCBjb25kaXRpb24gbWF0Y2hlZC4KKyAgKi8KKyNkZWZpbmUgRUFEQ19ESVNBQkxFX0NNUF9XSU5ET1dfTU9ERShlYWRjLCB1MzJDTVApICgoZWFkYyktPkNNUFsodTMyQ01QKV0gJj0gfkVBRENfQ01QX0NNUFdFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBFbmFibGUgdGhlIGNvbXBhcmUgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ01QIFNwZWNpZmllcyB0aGUgY29tcGFyZSByZWdpc3RlciwgdmFsaWQgdmFsdWUgYXJlIGZyb20gMCB0byAzLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIGlzIGVuYWJsZWQgYW5kIHRoZSBjb21wYXJlIGNvbmRpdGlvbiBtYXRjaGVzIHRoZSBzZXR0aW5nIG9mIENNUENPTkQgKEVBRENfQ01QblsyXSwgbj0wfjMpCisgICogICAgICAgICBhbmQgQ01QTUNOVCAoRUFEQ19DTVBuWzExOjhdLCBuPTB+MyksIEFEQ01QRm4gKEVBRENfU1RBVFVTMls3OjRdLCBuPTB+Mykgd2lsbCBiZSBhc3NlcnRlZCwgaW4gdGhlIG1lYW53aGlsZSwKKyAgKiAgICAgICAgIGlmIEFEQ01QSUUgaXMgc2V0IHRvIDEsIGEgY29tcGFyZSBpbnRlcnJ1cHQgcmVxdWVzdCBpcyBnZW5lcmF0ZWQuCisgICovCisjZGVmaW5lIEVBRENfRU5BQkxFX0NNUF9JTlQoZWFkYywgdTMyQ01QKSAoKGVhZGMpLT5DTVBbKHUzMkNNUCldIHw9IEVBRENfQ01QX0FEQ01QSUVfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSB0aGUgY29tcGFyZSBpbnRlcnJ1cHQuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJDTVAgU3BlY2lmaWVzIHRoZSBjb21wYXJlIHJlZ2lzdGVyLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDMuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIGNvbXBhcmUgaW50ZXJydXB0LgorICAqLworI2RlZmluZSBFQURDX0RJU0FCTEVfQ01QX0lOVChlYWRjLCB1MzJDTVApICgoZWFkYyktPkNNUFsodTMyQ01QKV0gJj0gfkVBRENfQ01QX0FEQ01QSUVfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBjb21wYXJhdG9yIDAuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgY29tcGFyYXRvciAwLgorICAqLworI2RlZmluZSBFQURDX0RJU0FCTEVfQ01QMChlYWRjKSAoKGVhZGMpLT5DTVBbMF0gPSAwVUwpCisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIGNvbXBhcmF0b3IgMS4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBjb21wYXJhdG9yIDEuCisgICovCisjZGVmaW5lIEVBRENfRElTQUJMRV9DTVAxKGVhZGMpICgoZWFkYyktPkNNUFsxXSA9IDBVTCkKKworLyoqCisgICogQGJyaWVmIERpc2FibGUgY29tcGFyYXRvciAyLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIGNvbXBhcmF0b3IgMi4KKyAgKi8KKyNkZWZpbmUgRUFEQ19ESVNBQkxFX0NNUDIoZWFkYykgKChlYWRjKS0+Q01QWzJdID0gMFVMKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBjb21wYXJhdG9yIDMuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgY29tcGFyYXRvciAzLgorICAqLworI2RlZmluZSBFQURDX0RJU0FCTEVfQ01QMyhlYWRjKSAoKGVhZGMpLT5DTVBbM10gPSAwVUwpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIERlZmluZSBFQURDIGZ1bmN0aW9ucyBwcm90b3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgRUFEQ19PcGVuKEVBRENfVCAqZWFkYywgdWludDMyX3QgdTMySW5wdXRNb2RlKTsKK3ZvaWQgRUFEQ19DbG9zZShFQURDX1QgKmVhZGMpOwordm9pZCBFQURDX0NvbmZpZ1NhbXBsZU1vZHVsZShFQURDX1QgKmVhZGMsIHVpbnQzMl90IHUzMk1vZHVsZU51bSwgdWludDMyX3QgdTMyVHJpZ2dlclNyYywgdWludDMyX3QgdTMyQ2hhbm5lbCk7Cit2b2lkIEVBRENfU2V0VHJpZ2dlckRlbGF5VGltZShFQURDX1QgKmVhZGMsIHVpbnQzMl90IHUzMk1vZHVsZU51bSwgdWludDMyX3QgdTMyVHJpZ2dlckRlbGF5VGltZSwgdWludDMyX3QgdTMyRGVsYXlDbG9ja0RpdmlkZXIpOwordm9pZCBFQURDX1NldEV4dGVuZFNhbXBsZVRpbWUoRUFEQ19UICplYWRjLCB1aW50MzJfdCB1MzJNb2R1bGVOdW0sIHVpbnQzMl90IHUzMkV4dGVuZFNhbXBsZVRpbWUpOworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEVBRENfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRUFEQ19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fRUFEQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZWJpLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9lYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjM0ODkxCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZWJpLmgKQEAgLTAsMCArMSwzNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBlYmkuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgRXh0ZXJuYWwgQnVzIEludGVyZmFjZShFQkkpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fRUJJX0hfXworI2RlZmluZSBfX0VCSV9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEVCSV9Ecml2ZXIgRUJJIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEVCSV9FWFBPUlRFRF9DT05TVEFOVFMgRUJJIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBNaXNjZWxsYW5lb3VzIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRUJJX0JBTkswX0JBU0VfQUREUiAgICAgMHg2MDAwMDAwMFVMIC8qITwgRUJJIGJhbmswIGJhc2UgYWRkcmVzcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9CQU5LMV9CQVNFX0FERFIgICAgIDB4NjAxMDAwMDBVTCAvKiE8IEVCSSBiYW5rMSBiYXNlIGFkZHJlc3MgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfQkFOSzJfQkFTRV9BRERSICAgICAweDYwMjAwMDAwVUwgLyohPCBFQkkgYmFuazIgYmFzZSBhZGRyZXNzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX0JBTkswX0JBU0VfQUREUl9OUyAgMHg3MDAwMDAwMFVMIC8qITwgRUJJIGJhbmswIGJhc2UgYWRkcmVzcyBmb3IgTm9uLVNlY3VyZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9CQU5LMV9CQVNFX0FERFJfTlMgIDB4NzAxMDAwMDBVTCAvKiE8IEVCSSBiYW5rMSBiYXNlIGFkZHJlc3MgZm9yIE5vbi1TZWN1cmUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfQkFOSzJfQkFTRV9BRERSX05TICAweDcwMjAwMDAwVUwgLyohPCBFQkkgYmFuazIgYmFzZSBhZGRyZXNzIGZvciBOb24tU2VjdXJlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX01BWF9TSVpFICAgICAgICAgICAgMHgwMDEwMDAwMFVMIC8qITwgTWF4aW11bSBFQkkgc2l6ZSBmb3IgZWFjaCBiYW5rIGlzIDEgTUIgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQ29uc3RhbnRzIGZvciBFQkkgYmFuayBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEVCSV9CQU5LMCAgICAgICAgICAgICAgIDBVTCAgICAvKiE8IEVCSSBiYW5rIDAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfQkFOSzEgICAgICAgICAgICAgICAxVUwgICAgLyohPCBFQkkgYmFuayAxIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX0JBTksyICAgICAgICAgICAgICAgMlVMICAgIC8qITwgRUJJIGJhbmsgMiBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDb25zdGFudHMgZm9yIEVCSSBkYXRhIGJ1cyB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRUJJX0JVU1dJRFRIXzhCSVQgICAgICAgOFVMICAgLyohPCBFQkkgYnVzIHdpZHRoIGlzIDgtYml0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX0JVU1dJRFRIXzE2QklUICAgICAgMTZVTCAgLyohPCBFQkkgYnVzIHdpZHRoIGlzIDE2LWJpdCBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDb25zdGFudHMgZm9yIEVCSSBDUyBBY3RpdmUgTGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRUJJX0NTX0FDVElWRV9MT1cgICAgICAgMFVMICAgIC8qITwgRUJJIENTIGFjdGl2ZSBsZXZlbCBpcyBsb3cgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfQ1NfQUNUSVZFX0hJR0ggICAgICAxVUwgICAgLyohPCBFQkkgQ1MgYWN0aXZlIGxldmVsIGlzIGhpZ2ggXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQ29uc3RhbnRzIGZvciBFQkkgTUNMSyBkaXZpZGVyIGFuZCBUaW1pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEVCSV9NQ0xLRElWXzEgICAgICAgICAgIDB4MFVMIC8qITwgRUJJIG91dHB1dCBjbG9jayhNQ0xLKSBpcyBIQ0xLLzEgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfTUNMS0RJVl8yICAgICAgICAgICAweDFVTCAvKiE8IEVCSSBvdXRwdXQgY2xvY2soTUNMSykgaXMgSENMSy8yIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX01DTEtESVZfNCAgICAgICAgICAgMHgyVUwgLyohPCBFQkkgb3V0cHV0IGNsb2NrKE1DTEspIGlzIEhDTEsvNCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9NQ0xLRElWXzggICAgICAgICAgIDB4M1VMIC8qITwgRUJJIG91dHB1dCBjbG9jayhNQ0xLKSBpcyBIQ0xLLzggXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfTUNMS0RJVl8xNiAgICAgICAgICAweDRVTCAvKiE8IEVCSSBvdXRwdXQgY2xvY2soTUNMSykgaXMgSENMSy8xNiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9NQ0xLRElWXzMyICAgICAgICAgIDB4NVVMIC8qITwgRUJJIG91dHB1dCBjbG9jayhNQ0xLKSBpcyBIQ0xLLzMyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX01DTEtESVZfNjQgICAgICAgICAgMHg2VUwgLyohPCBFQkkgb3V0cHV0IGNsb2NrKE1DTEspIGlzIEhDTEsvNjQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfTUNMS0RJVl8xMjggICAgICAgICAweDdVTCAvKiE8IEVCSSBvdXRwdXQgY2xvY2soTUNMSykgaXMgSENMSy8xMjggXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIEVCSV9USU1JTkdfRkFTVEVTVCAgICAgIDB4MFVMIC8qITwgRUJJIHRpbWluZyBpcyB0aGUgZmFzdGVzdCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9USU1JTkdfVkVSWUZBU1QgICAgIDB4MVVMIC8qITwgRUJJIHRpbWluZyBpcyB2ZXJ5IGZhc3QgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfVElNSU5HX0ZBU1QgICAgICAgICAweDJVTCAvKiE8IEVCSSB0aW1pbmcgaXMgZmFzdCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9USU1JTkdfTk9STUFMICAgICAgIDB4M1VMIC8qITwgRUJJIHRpbWluZyBpcyBub3JtYWwgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfVElNSU5HX1NMT1cgICAgICAgICAweDRVTCAvKiE8IEVCSSB0aW1pbmcgaXMgc2xvdyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9USU1JTkdfVkVSWVNMT1cgICAgIDB4NVVMIC8qITwgRUJJIHRpbWluZyBpcyB2ZXJ5IHNsb3cgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfVElNSU5HX1NMT1dFU1QgICAgICAweDZVTCAvKiE8IEVCSSB0aW1pbmcgaXMgdGhlIHNsb3dlc3QgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIEVCSV9PUE1PREVfTk9STUFMICAgICAgIDB4MFVMICAgICAgICAgICAgICAgICAvKiE8IEVCSSBidXMgb3BlcmF0ZSBpbiBub3JtYWwgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9PUE1PREVfQ0FDQ0VTUyAgICAgIChFQklfQ1RMX0NBQ0NFU1NfTXNrKSAvKiE8IEVCSSBidXMgb3BlcmF0ZSBpbiBDb250aW51b3VzIERhdGEgQWNjZXNzIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfT1BNT0RFX0FEU0VQQVJBVEUgICAoRUJJX0NUTF9BRFNFUEVOX01zaykgLyohPCBFQkkgYnVzIG9wZXJhdGUgaW4gQUQgU2VwYXJhdGUgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRUJJX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBFQklfRVhQT1JURURfRlVOQ1RJT05TIEVCSSBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgOC1iaXQgZGF0YSBvbiBFQkkgYmFuazAKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazAuCisgICoKKyAgKiBAcmV0dXJuICAgICA4LWJpdCBEYXRhCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCA4LWJpdCBkYXRhIGZyb20gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSTBfUkVBRF9EQVRBOChlYmksIHUzMkFkZHIpICAgICAgICAgICAgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoKCgoZWJpKT09RUJJX1MpPyBFQklfQkFOSzBfQkFTRV9BRERSOkVCSV9CQU5LMF9CQVNFX0FERFJfTlMpKyh1MzJBZGRyKSkpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSA4LWJpdCBkYXRhIHRvIEVCSSBiYW5rMAorICAqCisgICogQHBhcmFtW2luXSAgZWJpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgRUJJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJBZGRyICAgICBUaGUgZGF0YSBhZGRyZXNzIG9uIEVCSSBiYW5rMC4KKyAgKiBAcGFyYW1baW5dICB1MzJEYXRhICAgICBTcGVjaWZ5IGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byB3cml0ZSA4LWJpdCBkYXRhIHRvIHNwZWNpZnkgYWRkcmVzcyBvbiBFQkkgYmFuazAuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQkkwX1dSSVRFX0RBVEE4KGViaSwgdTMyQWRkciwgdTMyRGF0YSkgICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTkswX0JBU0VfQUREUjpFQklfQkFOSzBfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSA9ICh1MzJEYXRhKSkKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCAxNi1iaXQgZGF0YSBvbiBFQkkgYmFuazAKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazAuCisgICoKKyAgKiBAcmV0dXJuICAgICAxNi1iaXQgRGF0YQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgMTYtYml0IGRhdGEgZnJvbSBzcGVjaWZ5IGFkZHJlc3Mgb24gRUJJIGJhbmswLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJMF9SRUFEX0RBVEExNihlYmksIHUzMkFkZHIpICAgICAgICAgICAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoKCgoZWJpKT09RUJJX1MpPyBFQklfQkFOSzBfQkFTRV9BRERSOkVCSV9CQU5LMF9CQVNFX0FERFJfTlMpKyh1MzJBZGRyKSkpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSAxNi1iaXQgZGF0YSB0byBFQkkgYmFuazAKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazAuCisgICogQHBhcmFtW2luXSAgdTMyRGF0YSAgICAgU3BlY2lmeSBkYXRhIHRvIGJlIHdyaXR0ZW4uCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gd3JpdGUgMTYtYml0IGRhdGEgdG8gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSTBfV1JJVEVfREFUQTE2KGViaSwgdTMyQWRkciwgdTMyRGF0YSkgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTkswX0JBU0VfQUREUjpFQklfQkFOSzBfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSA9ICh1MzJEYXRhKSkKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCAzMi1iaXQgZGF0YSBvbiBFQkkgYmFuazAKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazAuCisgICoKKyAgKiBAcmV0dXJuICAgICAzMi1iaXQgRGF0YQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgMzItYml0IGRhdGEgZnJvbSBzcGVjaWZ5IGFkZHJlc3Mgb24gRUJJIGJhbmswLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJMF9SRUFEX0RBVEEzMihlYmksIHUzMkFkZHIpICAgICAgICAgICAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTkswX0JBU0VfQUREUjpFQklfQkFOSzBfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSkKKworLyoqCisgICogQGJyaWVmICAgICAgV3JpdGUgMzItYml0IGRhdGEgdG8gRUJJIGJhbmswCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgIFRoZSBkYXRhIGFkZHJlc3Mgb24gRUJJIGJhbmswLgorICAqIEBwYXJhbVtpbl0gIHUzMkRhdGEgICAgIFNwZWNpZnkgZGF0YSB0byBiZSB3cml0dGVuLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHdyaXRlIDMyLWJpdCBkYXRhIHRvIHNwZWNpZnkgYWRkcmVzcyBvbiBFQkkgYmFuazAuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQkkwX1dSSVRFX0RBVEEzMihlYmksIHUzMkFkZHIsIHUzMkRhdGEpICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoKCgoZWJpKT09RUJJX1MpPyBFQklfQkFOSzBfQkFTRV9BRERSOkVCSV9CQU5LMF9CQVNFX0FERFJfTlMpKyh1MzJBZGRyKSkpID0gKHUzMkRhdGEpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIDgtYml0IGRhdGEgb24gRUJJIGJhbmsxCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgIFRoZSBkYXRhIGFkZHJlc3Mgb24gRUJJIGJhbmsxLgorICAqCisgICogQHJldHVybiAgICAgOC1iaXQgRGF0YQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgOC1iaXQgZGF0YSBmcm9tIHNwZWNpZnkgYWRkcmVzcyBvbiBFQkkgYmFuazEuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQkkxX1JFQURfREFUQTgoZWJpLCB1MzJBZGRyKSAgICAgICAgICAgICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTksxX0JBU0VfQUREUjpFQklfQkFOSzFfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSkKKworLyoqCisgICogQGJyaWVmICAgICAgV3JpdGUgOC1iaXQgZGF0YSB0byBFQkkgYmFuazEKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazEuCisgICogQHBhcmFtW2luXSAgdTMyRGF0YSAgICAgU3BlY2lmeSBkYXRhIHRvIGJlIHdyaXR0ZW4uCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gd3JpdGUgOC1iaXQgZGF0YSB0byBzcGVjaWZ5IGFkZHJlc3Mgb24gRUJJIGJhbmsxLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJMV9XUklURV9EQVRBOChlYmksIHUzMkFkZHIsIHUzMkRhdGEpICAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgoKChlYmkpPT1FQklfUyk/IEVCSV9CQU5LMV9CQVNFX0FERFI6RUJJX0JBTksxX0JBU0VfQUREUl9OUykrKHUzMkFkZHIpKSkgPSAodTMyRGF0YSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgMTYtYml0IGRhdGEgb24gRUJJIGJhbmsxCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgIFRoZSBkYXRhIGFkZHJlc3Mgb24gRUJJIGJhbmsxLgorICAqCisgICogQHJldHVybiAgICAgMTYtYml0IERhdGEKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZWFkIDE2LWJpdCBkYXRhIGZyb20gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSTFfUkVBRF9EQVRBMTYoZWJpLCB1MzJBZGRyKSAgICAgICAgICAgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTksxX0JBU0VfQUREUjpFQklfQkFOSzFfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSkKKworLyoqCisgICogQGJyaWVmICAgICAgV3JpdGUgMTYtYml0IGRhdGEgdG8gRUJJIGJhbmsxCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgIFRoZSBkYXRhIGFkZHJlc3Mgb24gRUJJIGJhbmsxLgorICAqIEBwYXJhbVtpbl0gIHUzMkRhdGEgICAgIFNwZWNpZnkgZGF0YSB0byBiZSB3cml0dGVuLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHdyaXRlIDE2LWJpdCBkYXRhIHRvIHNwZWNpZnkgYWRkcmVzcyBvbiBFQkkgYmFuazEuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQkkxX1dSSVRFX0RBVEExNihlYmksIHUzMkFkZHIsIHUzMkRhdGEpICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgoKChlYmkpPT1FQklfUyk/IEVCSV9CQU5LMV9CQVNFX0FERFI6RUJJX0JBTksxX0JBU0VfQUREUl9OUykrKHUzMkFkZHIpKSkgPSAodTMyRGF0YSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgMzItYml0IGRhdGEgb24gRUJJIGJhbmsxCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgIFRoZSBkYXRhIGFkZHJlc3Mgb24gRUJJIGJhbmsxLgorICAqCisgICogQHJldHVybiAgICAgMzItYml0IERhdGEKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZWFkIDMyLWJpdCBkYXRhIGZyb20gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSTFfUkVBRF9EQVRBMzIoZWJpLCB1MzJBZGRyKSAgICAgICAgICAgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSgoKChlYmkpPT1FQklfUyk/IEVCSV9CQU5LMV9CQVNFX0FERFI6RUJJX0JBTksxX0JBU0VfQUREUl9OUykrKHUzMkFkZHIpKSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIDMyLWJpdCBkYXRhIHRvIEVCSSBiYW5rMQorICAqCisgICogQHBhcmFtW2luXSAgZWJpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgRUJJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJBZGRyICAgICBUaGUgZGF0YSBhZGRyZXNzIG9uIEVCSSBiYW5rMS4KKyAgKiBAcGFyYW1baW5dICB1MzJEYXRhICAgICBTcGVjaWZ5IGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byB3cml0ZSAzMi1iaXQgZGF0YSB0byBzcGVjaWZ5IGFkZHJlc3Mgb24gRUJJIGJhbmsxLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJMV9XUklURV9EQVRBMzIoZWJpLCB1MzJBZGRyLCB1MzJEYXRhKSAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTksxX0JBU0VfQUREUjpFQklfQkFOSzFfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSA9ICh1MzJEYXRhKSkKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCA4LWJpdCBkYXRhIG9uIEVCSSBiYW5rMgorICAqCisgICogQHBhcmFtW2luXSAgZWJpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgRUJJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJBZGRyICAgICBUaGUgZGF0YSBhZGRyZXNzIG9uIEVCSSBiYW5rMi4KKyAgKgorICAqIEByZXR1cm4gICAgIDgtYml0IERhdGEKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZWFkIDgtYml0IGRhdGEgZnJvbSBzcGVjaWZ5IGFkZHJlc3Mgb24gRUJJIGJhbmsyLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJMl9SRUFEX0RBVEE4KGViaSwgdTMyQWRkcikgICAgICAgICAgICAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgoKChlYmkpPT1FQklfUyk/IEVCSV9CQU5LMl9CQVNFX0FERFI6RUJJX0JBTksyX0JBU0VfQUREUl9OUykrKHUzMkFkZHIpKSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIDgtYml0IGRhdGEgdG8gRUJJIGJhbmsyCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgIFRoZSBkYXRhIGFkZHJlc3Mgb24gRUJJIGJhbmsyLgorICAqIEBwYXJhbVtpbl0gIHUzMkRhdGEgICAgIFNwZWNpZnkgZGF0YSB0byBiZSB3cml0dGVuLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHdyaXRlIDgtYml0IGRhdGEgdG8gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSTJfV1JJVEVfREFUQTgoZWJpLCB1MzJBZGRyLCB1MzJEYXRhKSAgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoKCgoZWJpKT09RUJJX1MpPyBFQklfQkFOSzJfQkFTRV9BRERSOkVCSV9CQU5LMl9CQVNFX0FERFJfTlMpKyh1MzJBZGRyKSkpID0gKHUzMkRhdGEpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIDE2LWJpdCBkYXRhIG9uIEVCSSBiYW5rMgorICAqCisgICogQHBhcmFtW2luXSAgZWJpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgRUJJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJBZGRyICAgICBUaGUgZGF0YSBhZGRyZXNzIG9uIEVCSSBiYW5rMi4KKyAgKgorICAqIEByZXR1cm4gICAgIDE2LWJpdCBEYXRhCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCAxNi1iaXQgZGF0YSBmcm9tIHNwZWNpZnkgYWRkcmVzcyBvbiBFQkkgYmFuazIuCisgICovCisjZGVmaW5lIEVCSTJfUkVBRF9EQVRBMTYoZWJpLCB1MzJBZGRyKSAgICAgICAgICAgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTksyX0JBU0VfQUREUjpFQklfQkFOSzJfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSkKKworLyoqCisgICogQGJyaWVmICAgICAgV3JpdGUgMTYtYml0IGRhdGEgdG8gRUJJIGJhbmsyCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgIFRoZSBkYXRhIGFkZHJlc3Mgb24gRUJJIGJhbmsyLgorICAqIEBwYXJhbVtpbl0gIHUzMkRhdGEgICAgIFNwZWNpZnkgZGF0YSB0byBiZSB3cml0dGVuLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHdyaXRlIDE2LWJpdCBkYXRhIHRvIHNwZWNpZnkgYWRkcmVzcyBvbiBFQkkgYmFuazIuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQkkyX1dSSVRFX0RBVEExNihlYmksIHUzMkFkZHIsIHUzMkRhdGEpICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgoKChlYmkpPT1FQklfUyk/IEVCSV9CQU5LMl9CQVNFX0FERFI6RUJJX0JBTksyX0JBU0VfQUREUl9OUykrKHUzMkFkZHIpKSkgPSAodTMyRGF0YSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgMzItYml0IGRhdGEgb24gRUJJIGJhbmsyCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgIFRoZSBkYXRhIGFkZHJlc3Mgb24gRUJJIGJhbmsyLgorICAqCisgICogQHJldHVybiAgICAgMzItYml0IERhdGEKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZWFkIDMyLWJpdCBkYXRhIGZyb20gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSTJfUkVBRF9EQVRBMzIoZWJpLCB1MzJBZGRyKSAgICAgICAgICAgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSgoKChlYmkpPT1FQklfUyk/IEVCSV9CQU5LMl9CQVNFX0FERFI6RUJJX0JBTksyX0JBU0VfQUREUl9OUykrKHUzMkFkZHIpKSkpCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSAzMi1iaXQgZGF0YSB0byBFQkkgYmFuazIKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazIuCisgICogQHBhcmFtW2luXSAgdTMyRGF0YSAgICAgU3BlY2lmeSBkYXRhIHRvIGJlIHdyaXR0ZW4uCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gd3JpdGUgMzItYml0IGRhdGEgdG8gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSTJfV1JJVEVfREFUQTMyKGViaSwgdTMyQWRkciwgdTMyRGF0YSkgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSgoKChlYmkpPT1FQklfUyk/IEVCSV9CQU5LMl9CQVNFX0FERFI6RUJJX0JBTksyX0JBU0VfQUREUl9OUykrKHUzMkFkZHIpKSkgPSAodTMyRGF0YSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBFQkkgV3JpdGUgQnVmZmVyCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGltcHJvdmUgRUJJIHdyaXRlIG9wZXJhdGlvbiBmb3IgYWxsIEVCSSBiYW5rcy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSV9FTkFCTEVfV1JJVEVfQlVGRkVSKGViaSkgICAgICAgICAgICAgICAgKChlYmkpLT5DVEwwIHw9IEVCSV9DVExfV0JVRkVOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBFQkkgV3JpdGUgQnVmZmVyCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgRUJJIHdyaXRlIGJ1ZmZlciBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSV9ESVNBQkxFX1dSSVRFX0JVRkZFUihlYmkpICAgICAgICAgICAgICAgKChlYmkpLT5DVEwwICY9IH5FQklfQ1RMX1dCVUZFTl9Nc2spCisKK3ZvaWQgRUJJX09wZW4odWludDMyX3QgdTMyQmFuaywgdWludDMyX3QgdTMyRGF0YVdpZHRoLCB1aW50MzJfdCB1MzJUaW1pbmdDbGFzcywgdWludDMyX3QgdTMyQnVzTW9kZSwgdWludDMyX3QgdTMyQ1NBY3RpdmVMZXZlbCk7Cit2b2lkIEVCSV9DbG9zZSh1aW50MzJfdCB1MzJCYW5rKTsKK3ZvaWQgRUJJX1NldEJ1c1RpbWluZyh1aW50MzJfdCB1MzJCYW5rLCB1aW50MzJfdCB1MzJUaW1pbmdDb25maWcsIHVpbnQzMl90IHUzMk1jbGtEaXYpOworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEVCSV9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFQklfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0VCSV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZWNhcC5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZWNhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNWRhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9lY2FwLmgKQEAgLTAsMCArMSw0NTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBlY2FwLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIEVuSGFuY2VkIElucHV0IENhcHR1cmUgVGltZXIoRUNBUCkgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19FQ0FQX0hfXworI2RlZmluZSBfX0VDQVBfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEVDQVBfRHJpdmVyIEVDQVAgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRUNBUF9FWFBPUlRFRF9DT05TVEFOVFMgRUNBUCBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKyNkZWZpbmUgRUNBUF9JQzAgICAgKDBVTCkgICAgLyohPCBFQ0FQIElDMCBVbml0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9JQzEgICAgKDFVTCkgICAgLyohPCBFQ0FQIElDMSBVbml0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9JQzIgICAgKDJVTCkgICAgLyohPCBFQ0FQIElDMiBVbml0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRUNBUCBDVEwwIGNvbnN0YW50IGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFQ0FQX05PSVNFX0ZJTFRFUl9DTEtESVZfMSAgICAgICAgICAgICgwVUw8PEVDQVBfQ1RMMF9ORkNMS1NFTF9Qb3MpICAgIC8qITwgTm9pc2UgZmlsdGVyIGNsb2NrIGRpdmlkZSBieSAxICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl8yICAgICAgICAgICAgKDFVTDw8RUNBUF9DVEwwX05GQ0xLU0VMX1BvcykgICAgLyohPCBOb2lzZSBmaWx0ZXIgY2xvY2sgZGl2aWRlIGJ5IDIgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzQgICAgICAgICAgICAoMlVMPDxFQ0FQX0NUTDBfTkZDTEtTRUxfUG9zKSAgICAvKiE8IE5vaXNlIGZpbHRlciBjbG9jayBkaXZpZGUgYnkgNCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQ0FQX05PSVNFX0ZJTFRFUl9DTEtESVZfMTYgICAgICAgICAgICgzVUw8PEVDQVBfQ1RMMF9ORkNMS1NFTF9Qb3MpICAgIC8qITwgTm9pc2UgZmlsdGVyIGNsb2NrIGRpdmlkZSBieSAxNiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl8zMiAgICAgICAgICAgKDRVTDw8RUNBUF9DVEwwX05GQ0xLU0VMX1BvcykgICAgLyohPCBOb2lzZSBmaWx0ZXIgY2xvY2sgZGl2aWRlIGJ5IDMyICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl82NCAgICAgICAgICAgKDVVTDw8RUNBUF9DVEwwX05GQ0xLU0VMX1BvcykgICAgLyohPCBOb2lzZSBmaWx0ZXIgY2xvY2sgZGl2aWRlIGJ5IDY0ICBcaGlkZWluaXRpYWxpemVyICovCisKKworI2RlZmluZSBFQ0FQX0NBUF9JTlBVVF9TUkNfRlJPTV9JQyAgICAgICAgICAgICgwVUwpICAvKiE8IENBUCBpbnB1dCBzb3VyY2UgZnJvbSBJQyAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfQ0FQX0lOUFVUX1NSQ19GUk9NX0NIICAgICAgICAgICAgKDJVTCkgIC8qITwgQ0FQIGlucHV0IHNvdXJjZSBmcm9tIENIIG9mIFFFSSAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBFQ0FQX0RJU0FCTEVfQ09NUEFSRSAgICAgICAgICAgICAgICAgICgwVUw8PEVDQVBfQ1RMMF9DTVBFTl9Qb3MpICAgIC8qITwgSW5wdXQgY2FwdHVyZSBjb21wYXJlIGFuZCByZWxvYWQgZnVuY3Rpb24gZGlzYWJsZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfQ09NUEFSRV9GVU5DVElPTiAgICAgICAgICAgICAgICAgKDFVTDw8RUNBUF9DVEwwX0NNUEVOX1BvcykgICAgLyohPCBJbnB1dCBjYXB0dXJlIGNvbXBhcmUgZnVuY3Rpb24gIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEVDQVAgQ1RMMSBjb25zdGFudCBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRUNBUF9SSVNJTkdfRURHRSAgICAgICAgICAgICAgICAgICAgICAgKDBVTDw8RUNBUF9DVEwxX0VER0VTRUwwX1BvcykgICAvKiE8IEVDQVAgY2FwdHVyZSByaXNpbmcgZWRnZSBzZWxlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQ0FQX0ZBTExJTkdfRURHRSAgICAgICAgICAgICAgICAgICAgICAoMVVMPDxFQ0FQX0NUTDFfRURHRVNFTDBfUG9zKSAgIC8qITwgRUNBUCBjYXB0dXJlIGZhbGxpbmcgZWRnZSBzZWxlY3Rpb24gICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfUklTSU5HX0ZBTExJTkdfRURHRSAgICAgICAgICAgICAgICgyVUw8PEVDQVBfQ1RMMV9FREdFU0VMMF9Qb3MpICAgLyohPCBFQ0FQIGNhcHR1cmUgZWl0aGVyIHJpc2luZyBvciBmYWxsaW5nIGVkZ2Ugc2VsZWN0aW9uICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLRElWXzEgICAgICAgICAgICAoMFVMPDxFQ0FQX0NUTDFfQ0xLU0VMX1BvcykgICAgLyohPCBFQ0FQIGNhcHR1cmUgdGltZXIgY2xvY2sgZGl2aWRlIGJ5IDEgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfNCAgICAgICAgICAgICgxVUw8PEVDQVBfQ1RMMV9DTEtTRUxfUG9zKSAgICAvKiE8IEVDQVAgY2FwdHVyZSB0aW1lciBjbG9jayBkaXZpZGUgYnkgNCAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS0RJVl8xNiAgICAgICAgICAgKDJVTDw8RUNBUF9DVEwxX0NMS1NFTF9Qb3MpICAgIC8qITwgRUNBUCBjYXB0dXJlIHRpbWVyIGNsb2NrIGRpdmlkZSBieSAxNiAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLRElWXzMyICAgICAgICAgICAoM1VMPDxFQ0FQX0NUTDFfQ0xLU0VMX1BvcykgICAgLyohPCBFQ0FQIGNhcHR1cmUgdGltZXIgY2xvY2sgZGl2aWRlIGJ5IDMyICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfNjQgICAgICAgICAgICg0VUw8PEVDQVBfQ1RMMV9DTEtTRUxfUG9zKSAgICAvKiE8IEVDQVAgY2FwdHVyZSB0aW1lciBjbG9jayBkaXZpZGUgYnkgNjQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS0RJVl85NiAgICAgICAgICAgKDVVTDw8RUNBUF9DVEwxX0NMS1NFTF9Qb3MpICAgIC8qITwgRUNBUCBjYXB0dXJlIHRpbWVyIGNsb2NrIGRpdmlkZSBieSA5NiAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLRElWXzExMiAgICAgICAgICAoNlVMPDxFQ0FQX0NUTDFfQ0xLU0VMX1BvcykgICAgLyohPCBFQ0FQIGNhcHR1cmUgdGltZXIgY2xvY2sgZGl2aWRlIGJ5IDExMiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfMTI4ICAgICAgICAgICg3VUw8PEVDQVBfQ1RMMV9DTEtTRUxfUG9zKSAgICAvKiE8IEVDQVAgY2FwdHVyZSB0aW1lciBjbG9jayBkaXZpZGUgYnkgMTI4IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLX1NSQ19DQVBfQ0xLICAgICAoMFVMPDxFQ0FQX0NUTDFfQ05UU1JDU0VMX1BvcykgICAgLyohPCBFQ0FQIGNhcHR1cmUgdGltZXIvY2xvY2sgc291cmNlIGZyb20gQ0FQX0NMSyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtfU1JDX0NBUDAgICAgICAgICgxVUw8PEVDQVBfQ1RMMV9DTlRTUkNTRUxfUG9zKSAgICAvKiE8IEVDQVAgY2FwdHVyZSB0aW1lci9jbG9jayBzb3VyY2UgZnJvbSBDQVAwICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS19TUkNfQ0FQMSAgICAgICAgKDJVTDw8RUNBUF9DVEwxX0NOVFNSQ1NFTF9Qb3MpICAgIC8qITwgRUNBUCBjYXB0dXJlIHRpbWVyL2Nsb2NrIHNvdXJjZSBmcm9tIENBUDEgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLX1NSQ19DQVAyICAgICAgICAoM1VMPDxFQ0FQX0NUTDFfQ05UU1JDU0VMX1BvcykgICAgLyohPCBFQ0FQIGNhcHR1cmUgdGltZXIvY2xvY2sgc291cmNlIGZyb20gQ0FQMiAgICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRUNBUF9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworLyoqIEBhZGR0b2dyb3VwIEVDQVBfRVhQT1JURURfRlVOQ1RJT05TIEVDQVAgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNlbGVjdCBub2lzZSBmaWx0ZXIgY2xvY2sgcHJlLWRpdmlkZSBudW1iZXIKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyQ2xrU2VsIFRoZSBub2lzZSBmaWx0ZXIgY2xvY2sgZGl2aWRlIG51bWJlcgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl8xCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzIKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX05PSVNFX0ZJTFRFUl9DTEtESVZfNAorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl8xNgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl8zMgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl82NAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBvZiB0aGUgbm9pc2UgZmlsdGVyIGNvY2suCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX1NFVF9OT0lTRV9GSUxURVJfQ0xLRElWKGVjYXAsIHUzMkNsa1NlbCkgKChlY2FwKS0+Q1RMMCA9ICgoZWNhcCktPkNUTDAgJiB+RUNBUF9DVEwwX05GQ0xLU0VMX01zayl8KHUzMkNsa1NlbCkpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBub2lzZSBmaWx0ZXIKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBkaXNhYmxlIHRoZSBub2lzZSBmaWx0ZXIgb2YgaW5wdXQgY2FwdHVyZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfTk9JU0VfRklMVEVSX0RJU0FCTEUoZWNhcCkgKChlY2FwKS0+Q1RMMCB8PSBFQ0FQX0NUTDBfQ0FQTkZESVNfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBub2lzZSBmaWx0ZXIKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyQ2xrU2VsIFNlbGVjdCBub2lzZSBmaWx0ZXIgY2xvY2sgZGl2aWRlIG51bWJlcgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl8xCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzIKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX05PSVNFX0ZJTFRFUl9DTEtESVZfNAorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl8xNgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl8zMgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl82NAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBlbmFibGUgdGhlIG5vaXNlIGZpbHRlciBvZiBpbnB1dCBjYXB0dXJlIGFuZCBzZXQgbm9pc2UgZmlsdGVyIGNsb2NrIGRpdmlkZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfTk9JU0VfRklMVEVSX0VOQUJMRShlY2FwLCB1MzJDbGtTZWwpICgoZWNhcCktPkNUTDAgPSAoKGVjYXApLT5DVEwwICYgfihFQ0FQX0NUTDBfQ0FQTkZESVNfTXNrfEVDQVBfQ1RMMF9ORkNMS1NFTF9Nc2spKXwodTMyQ2xrU2VsKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgaW5wdXQgY2hhbm5lbCB1bml0CisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgICBUaGUgaW5wdXQgY2hhbm5lbCBtYXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwwX0lDMEVOX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9JQzFFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfSUMyRU5fTXNrCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGVuYWJsZSB0aGUgaW5wdXQgY2hhbm5lbF9uIHRvIGlucHV0IGNhcHR1cmUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0VOQUJMRV9JTlBVVF9DSEFOTkVMKGVjYXAsIHUzMk1hc2spICgoZWNhcCktPkNUTDAgfD0gKHUzMk1hc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgaW5wdXQgY2hhbm5lbCB1bml0CisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgIFRoZSBpbnB1dCBjaGFubmVsIG1hc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfSUMwRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwwX0lDMUVOX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9JQzJFTl9Nc2sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZGlzYWJsZSB0aGUgaW5wdXQgY2hhbm5lbF9uIHRvIGlucHV0IGNhcHR1cmUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0RJU0FCTEVfSU5QVVRfQ0hBTk5FTChlY2FwLCB1MzJNYXNrKSAoKGVjYXApLT5DVEwwICY9IH4odTMyTWFzaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2VsZWN0IGlucHV0IGNoYW5uZWwgc291cmNlCisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcGFyYW1baW5dIHUzMkluZGV4ICBUaGUgaW5wdXQgY2hhbm5lbCBudW1iZXIKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0lDMAorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfSUMxCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9JQzIKKyAgKiBAcGFyYW1baW5dIHUzMlNyYyAgICBUaGUgaW5wdXQgc291cmNlCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DQVBfSU5QVVRfU1JDX0ZST01fSUMKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NBUF9JTlBVVF9TUkNfRlJPTV9DSAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZWxlY3QgdGhlIGlucHV0IHNvdXJjZSBmcm9tIElDeCwgQ0h4LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9TRUxfSU5QVVRfU1JDKGVjYXAsIHUzMkluZGV4LCB1MzJTcmMpICgoZWNhcCktPkNUTDAgPSAoKGVjYXApLT5DVEwwICYgfihFQ0FQX0NUTDBfQ0FQU0VMMF9Nc2s8PCgodTMySW5kZXgpPDwxKSkpfCgoKHUzMlNyYyk8PEVDQVBfQ1RMMF9DQVBTRUwwX1Bvcyk8PCgodTMySW5kZXgpPDwxKSkpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIGlucHV0IGNoYW5uZWwgaW50ZXJydXB0CisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgIFRoZSBpbnB1dCBjaGFubmVsIG1hc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfQ0FQSUVOMF9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfQ0FQSUVOMV9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfQ0FQSUVOMl9Nc2sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZW5hYmxlIHRoZSBpbnB1dCBjaGFubmVsX24gaW50ZXJydXB0LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9FTkFCTEVfSU5UKGVjYXAsIHUzMk1hc2spICgoZWNhcCktPkNUTDAgfD0gKHUzMk1hc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgaW5wdXQgY2hhbm5lbCBpbnRlcnJ1cHQKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyTWFzayAgIFRoZSBpbnB1dCBjaGFubmVsIG1hc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0lDMAorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfSUMxCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9JQzIKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZGlzYWJsZSB0aGUgaW5wdXQgY2hhbm5lbF9uIGludGVycnVwdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfRElTQUJMRV9JTlQoZWNhcCwgdTMyTWFzaykgKChlY2FwKS0+Q1RMMCAmPSB+KHUzMk1hc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBpbnB1dCBjaGFubmVsIG92ZXJmbG93IGludGVycnVwdAorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGVuYWJsZSB0aGUgaW5wdXQgY2hhbm5lbCBvdmVyZmxvdyBpbnRlcnJ1cHQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0VOQUJMRV9PVkZfSU5UKGVjYXApICgoZWNhcCktPkNUTDAgfD0gRUNBUF9DVEwwX09WSUVOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIGlucHV0IGNoYW5uZWwgb3ZlcmZsb3cgaW50ZXJydXB0CisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZGlzYWJsZSB0aGUgaW5wdXQgY2hhbm5lbCBvdmVyZmxvdyBpbnRlcnJ1cHQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0RJU0FCTEVfT1ZGX0lOVChlY2FwKSAoKGVjYXApLT5DVEwwICY9IH5FQ0FQX0NUTDBfT1ZJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBpbnB1dCBjaGFubmVsIGNvbXBhcmUtbWF0Y2ggaW50ZXJydXB0CisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZW5hYmxlIHRoZSBpbnB1dCBjaGFubmVsIGNvbXBhcmUtbWF0Y2ggaW50ZXJydXB0LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9FTkFCTEVfQ01QX01BVENIX0lOVChlY2FwKSAoKGVjYXApLT5DVEwwIHw9IEVDQVBfQ1RMMF9DTVBJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgaW5wdXQgY2hhbm5lbCBjb21wYXJlLW1hdGNoIGludGVycnVwdAorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGRpc2FibGUgdGhlIGlucHV0IGNoYW5uZWwgY29tcGFyZS1tYXRjaCBpbnRlcnJ1cHQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0RJU0FCTEVfQ01QX01BVENIX0lOVChlY2FwKSAoKGVjYXApLT5DVEwwICY9IH5FQ0FQX0NUTDBfQ01QSUVOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzdGFydCBjYXB0dXJlIGNvdW50ZXIKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzdGFydCBjYXB0dXJlIGNvdW50ZXIgdXAtY291bnRpbmcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0NOVF9TVEFSVChlY2FwKSAoKGVjYXApLT5DVEwwIHw9IEVDQVBfQ1RMMF9DTlRFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc3RvcCBjYXB0dXJlIGNvdW50ZXIKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzdG9wIGNhcHR1cmUgY291bnRlciB1cC1jb3VudGluZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfQ05UX1NUT1AoZWNhcCkgKChlY2FwKS0+Q1RMMCAmPSB+RUNBUF9DVEwwX0NOVEVOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgZXZlbnQgdG8gY2xlYXIgY2FwdHVyZSBjb3VudGVyCisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcGFyYW1baW5dIHUzMkV2ZW50IFRoZSBpbnB1dCBjaGFubmVsIG51bWJlcgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9DTVBDTFJFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDFfQ0FQMFJMREVOX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMV9DQVAxUkxERU5fTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwxX0NBUDJSTERFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDFfT1ZSTERFTl9Nc2sKKworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBlbmFibGUgYW5kIHNlbGVjdCBjb21wYXJlIG9yIGNhcHR1cmUgZXZlbnQgdGhhdCBjYW4gY2xlYXIgY2FwdHVyZSBjb3VudGVyLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9TRVRfQ05UX0NMRUFSX0VWRU5UKGVjYXAsIHUzMkV2ZW50KSBkb3sgXAorICBpZigodTMyRXZlbnQpICYgRUNBUF9DVEwwX0NNUENMUkVOX01zaykgXAorICAgIChlY2FwKS0+Q1RMMCB8PSBFQ0FQX0NUTDBfQ01QQ0xSRU5fTXNrOyBcCisgIGVsc2UgXAorICAgIChlY2FwKS0+Q1RMMCAmPSB+RUNBUF9DVEwwX0NNUENMUkVOX01zazsgXAorICAoZWNhcCktPkNUTDEgPSAoKGVjYXApLT5DVEwxICZ+MHhGMDB1bCkgfCAoKHUzMkV2ZW50KSAmIDB4RjAwKTsgXAorICB9d2hpbGUoMCkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgY29tcGFyZSBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGVuYWJsZSB0aGUgY29tcGFyZSBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfRU5BQkxFX0NNUChlY2FwKSAoKGVjYXApLT5DVEwwIHw9IEVDQVBfQ1RMMF9DTVBFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBjb21wYXJlIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZGlzYWJsZSB0aGUgY29tcGFyZSBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfRElTQUJMRV9DTVAoZWNhcCkgKChlY2FwKS0+Q1RMMCAmPSB+RUNBUF9DVEwwX0NNUEVOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgaW5wdXQgY2FwdHVyZSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBlbmFibGUgaW5wdXQgY2FwdHVyZSB0aW1lci9jb3VudGVyLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9FTkFCTEVfQ05UKGVjYXApICgoZWNhcCktPkNUTDAgfD0gRUNBUF9DVEwwX0NBUEVOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIGlucHV0IGNhcHR1cmUgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZGlzYWJsZSBpbnB1dCBjYXB0dXJlIHRpbWVyL2NvdW50ZXIuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0RJU0FCTEVfQ05UKGVjYXApICgoZWNhcCktPkNUTDAgJj0gfkVDQVBfQ1RMMF9DQVBFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2VsZWN0IGlucHV0IGNoYW5uZWwgZWRnZSBkZXRlY3Rpb24KKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMySW5kZXggIFRoZSBpbnB1dCBjaGFubmVsIG51bWJlcgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfSUMwCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9JQzEKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0lDMgorICAqIEBwYXJhbVtpbl0gdTMyRWRnZSAgIFRoZSBpbnB1dCBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX1JJU0lOR19FREdFCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9GQUxMSU5HX0VER0UKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX1JJU0lOR19GQUxMSU5HX0VER0UKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2VsZWN0IGlucHV0IGNhcHR1cmUgY2FuIGRldGVjdCBmYWxsaW5nIGVkZ2UsIHJpc2luZyBlZGdlIG9yIGVpdGhlciByaXNpbmcgb3IgZmFsbGluZyBlZGdlIGNoYW5nZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfU0VMX0NBUFRVUkVfRURHRShlY2FwLCB1MzJJbmRleCwgdTMyRWRnZSkgKChlY2FwKS0+Q1RMMSA9ICgoZWNhcCktPkNUTDEgJiB+KEVDQVBfQ1RMMV9FREdFU0VMMF9Nc2s8PCgodTMySW5kZXgpPDwxKSkpfCgodTMyRWRnZSk8PCgodTMySW5kZXgpPDwxKSkpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2VsZWN0IEVDQVAgY291bnRlciByZWxvYWQgdHJpZ2dlciBzb3VyY2UKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyVHJpZ1NyYyBUaGUgaW5wdXQgc291cmNlCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwxX0NBUDBSTERFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDFfQ0FQMVJMREVOX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMV9DQVAyUkxERU5fTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwxX09WUkxERU5fTXNrCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNlbGVjdCBjYXB0dXJlIGNvdW50ZXIgcmVsb2FkIHRyaWdnZXIgc291cmNlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9TRUxfUkVMT0FEX1RSSUdfU1JDKGVjYXAsIHUzMlRyaWdTcmMpICgoZWNhcCktPkNUTDEgPSAoKGVjYXApLT5DVEwxICYgfjB4RjAwKXwodTMyVHJpZ1NyYykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2VsZWN0IGNhcHR1cmUgdGltZXIgY2xvY2sgZGl2aWRlLgorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJDbGtkaXYgVGhlIGlucHV0IHNvdXJjZQorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfMQorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfNAorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfMTYKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLRElWXzMyCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS0RJVl82NAorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfOTYKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLRElWXzExMgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfMTI4CisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNlbGVjdCBjYXB0dXJlIHRpbWVyIGNsb2NrIGhhcyBhIHByZS1kaXZpZGVyIHdpdGggZWlnaHQgZGl2aWRlZCBvcHRpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX1NFTF9USU1FUl9DTEtfRElWKGVjYXAsIHUzMkNsa2RpdikgKChlY2FwKS0+Q1RMMSA9ICgoZWNhcCktPkNUTDEgJiB+RUNBUF9DVEwxX0NMS1NFTF9Nc2spfCh1MzJDbGtkaXYpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNlbGVjdCBjYXB0dXJlIHRpbWVyL2NvdW50ZXIgY2xvY2sgc291cmNlCisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcGFyYW1baW5dIHUzMkNsa1NyYyBUaGUgaW5wdXQgc291cmNlCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS19TUkNfQ0FQX0NMSworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtfU1JDX0NBUDAKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLX1NSQ19DQVAxCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS19TUkNfQ0FQMgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZWxlY3QgY2FwdHVyZSB0aW1lci9jbG9jayBjbG9jayBzb3VyY2UuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX1NFTF9USU1FUl9DTEtfU1JDKGVjYXAsIHUzMkNsa1NyYykgKChlY2FwKS0+Q1RMMSA9ICgoZWNhcCktPkNUTDEgJiB+RUNBUF9DVEwxX0NOVFNSQ1NFTF9Nc2spfCh1MzJDbGtTcmMpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgaW5wdXQgY2FwdHVyZSBzdGF0dXMKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEByZXR1cm4gSW5wdXQgY2FwdHVyZSBzdGF0dXMgZmxhZ3MKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZ2V0IHRoZSBpbnB1dCBjYXB0dXJlIGludGVycnVwdCBzdGF0dXMuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0dFVF9JTlRfU1RBVFVTKGVjYXApICgoZWNhcCktPlNUQVRVUykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgaW5wdXQgY2hhbm5lbCBpbnRlcnJ1cHQgZmxhZworICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJNYXNrICBUaGUgaW5wdXQgY2hhbm5lbCBtYXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9TVEFUVVNfQ0FQVEYwX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfU1RBVFVTX0NBUFRGMV9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX1NUQVRVU19DQVBURjJfTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9TVEFUVVNfQ0FQT1ZGX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfU1RBVFVTX0NBUENNUEZfTXNrCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHdyaXRlIDEgdG8gZ2V0IHRoZSBpbnB1dCBjaGFubmVsX24gaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0dFVF9DQVBUVVJFX0ZMQUcoZWNhcCwgdTMyTWFzaykgKCgoZWNhcCktPlNUQVRVUyAmICh1MzJNYXNrKSk/MTowKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNsZWFyIGlucHV0IGNoYW5uZWwgaW50ZXJydXB0IGZsYWcKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyTWFzayAgVGhlIGlucHV0IGNoYW5uZWwgbWFzaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfU1RBVFVTX0NBUFRGMF9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX1NUQVRVU19DQVBURjFfTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9TVEFUVVNfQ0FQVEYyX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfU1RBVFVTX0NBUE9WRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX1NUQVRVU19DQVBDTVBGX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCB3cml0ZSAxIHRvIGNsZWFyIHRoZSBpbnB1dCBjaGFubmVsX24gaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0NMUl9DQVBUVVJFX0ZMQUcoZWNhcCwgdTMyTWFzaykgKChlY2FwKS0+U1RBVFVTID0gKHUzMk1hc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCBpbnB1dCBjYXB0dXJlIGNvdW50ZXIgdmFsdWUKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyVmFsICAgIENvdW50ZXIgdmFsdWUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2V0IGEgY291bnRlciB2YWx1ZSBvZiBpbnB1dCBjYXB0dXJlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9TRVRfQ05UX1ZBTFVFKGVjYXAsIHUzMlZhbCkgKChlY2FwKS0+Q05UID0gKHUzMlZhbCkpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZ2V0IGlucHV0IGNhcHR1cmUgY291bnRlciB2YWx1ZQorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHJldHVybiBDYXB0dXJlIGNvdW50ZXIgdmFsdWUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZ2V0IGEgY291bnRlciB2YWx1ZSBvZiBpbnB1dCBjYXB0dXJlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9HRVRfQ05UX1ZBTFVFKGVjYXApICgoZWNhcCktPkNOVCkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgaW5wdXQgY2FwdHVyZSBjb3VudGVyIGhvbGQgdmFsdWUKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMySW5kZXggIFRoZSBpbnB1dCBjaGFubmVsIG51bWJlcgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfSUMwCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9JQzEKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0lDMgorICAqIEByZXR1cm4gQ2FwdHVyZSBjb3VudGVyIGhvbGQgdmFsdWUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZ2V0IGEgaG9sZCB2YWx1ZSBvZiBpbnB1dCBjYXB0dXJlIGNoYW5uZWxfbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfR0VUX0NOVF9IT0xEX1ZBTFVFKGVjYXAsIHUzMkluZGV4KSAoKihfX0lPIHVpbnQzMl90ICopICgmKChlY2FwKS0+SExEMCkgKyAodTMySW5kZXgpKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgaW5wdXQgY2FwdHVyZSBjb3VudGVyIGNvbXBhcmUgdmFsdWUKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyVmFsICAgIElucHV0IGNhcHR1cmUgY29tcGFyZSB2YWx1ZQorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgYSBjb21wYXJlIHZhbHVlIG9mIGlucHV0IGNhcHR1cmUgY291bnRlci4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfU0VUX0NOVF9DTVAoZWNhcCwgdTMyVmFsKSAoKGVjYXApLT5DTlRDTVAgPSAodTMyVmFsKSkKKwordm9pZCBFQ0FQX09wZW4oRUNBUF9UKiBlY2FwLCB1aW50MzJfdCB1MzJGdW5jTWFzayk7Cit2b2lkIEVDQVBfQ2xvc2UoRUNBUF9UKiBlY2FwKTsKK3ZvaWQgRUNBUF9FbmFibGVJTlQoRUNBUF9UKiBlY2FwLCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgRUNBUF9EaXNhYmxlSU5UKEVDQVBfVCogZWNhcCwgdWludDMyX3QgdTMyTWFzayk7CisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEVDQVBfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRUNBUF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qX19FQ0FQX0hfXyovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2Vwd20uaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2Vwd20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2RhYjY5Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZXB3bS5oCkBAIC0wLDAgKzEsNjI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZXB3bS5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgRVBXTSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0VQV01fSF9fCisjZGVmaW5lIF9fRVBXTV9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEVQV01fRHJpdmVyIEVQV00gRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRVBXTV9FWFBPUlRFRF9DT05TVEFOVFMgRVBXTSBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisjZGVmaW5lIEVQV01fQ0hBTk5FTF9OVU0gICAgICAgICAgICAgICAgICAgICAgICAgICg2VUwpICAgICAgLyohPCBFUFdNIGNoYW5uZWwgbnVtYmVyICovCisjZGVmaW5lIEVQV01fQ0hfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFVTCkgICAgLyohPCBFUFdNIGNoYW5uZWwgMCBtYXNrIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9DSF8xX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlVMKSAgICAvKiE8IEVQV00gY2hhbm5lbCAxIG1hc2sgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0NIXzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VUwpICAgIC8qITwgRVBXTSBjaGFubmVsIDIgbWFzayBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fQ0hfM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDhVTCkgICAgLyohPCBFUFdNIGNoYW5uZWwgMyBtYXNrIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9DSF80X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVTCkgICAvKiE8IEVQV00gY2hhbm5lbCA0IG1hc2sgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0NIXzVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMFVMKSAgIC8qITwgRVBXTSBjaGFubmVsIDUgbWFzayBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDb3VudGVyIFR5cGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRVBXTV9VUF9DT1VOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgKDBVTCkgICAgICAvKiE8IFVwIGNvdW50ZXIgdHlwZSAqLworI2RlZmluZSBFUFdNX0RPV05fQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMKSAgICAgIC8qITwgRG93biBjb3VudGVyIHR5cGUgKi8KKyNkZWZpbmUgRVBXTV9VUF9ET1dOX0NPVU5URVIgICAgICAgICAgICAgICAgICAgICAgKDJVTCkgICAgICAvKiE8IFVwLURvd24gY291bnRlciB0eXBlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBBbGlnbmVkIFR5cGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRVBXTV9FREdFX0FMSUdORUQgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCkgICAgICAvKiE8IEVQV00gd29ya2luZyBpbiBlZGdlIGFsaWduZWQgdHlwZShkb3duIGNvdW50KSAqLworI2RlZmluZSBFUFdNX0NFTlRFUl9BTElHTkVEICAgICAgICAgICAgICAgICAgICAgICAoMlVMKSAgICAgIC8qITwgRVBXTSB3b3JraW5nIGluIGNlbnRlciBhbGlnbmVkIHR5cGUgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIE91dHB1dCBMZXZlbCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFUFdNX09VVFBVVF9OT1RISU5HICAgICAgICAgICAgICAgICAgICAgICAoMFVMKSAgICAgIC8qITwgRVBXTSBvdXRwdXQgbm90aGluZyAqLworI2RlZmluZSBFUFdNX09VVFBVVF9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMKSAgICAgIC8qITwgRVBXTSBvdXRwdXQgbG93ICovCisjZGVmaW5lIEVQV01fT1VUUFVUX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICgyVUwpICAgICAgLyohPCBFUFdNIG91dHB1dCBoaWdoICovCisjZGVmaW5lIEVQV01fT1VUUFVUX1RPR0dMRSAgICAgICAgICAgICAgICAgICAgICAgICgzVUwpICAgICAgLyohPCBFUFdNIG91dHB1dCB0b2dnbGUgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFN5bmNocm9ub3VzIFN0YXJ0IEZ1bmN0aW9uIENvbnRyb2wgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFUFdNX1NTQ1RMX1NTUkNfRVBXTTAgICAgICAgICAgICAgICAgICAgICAoMFVMPDxFUFdNX1NTQ1RMX1NTUkNfUG9zKSAgICAvKiE8IFN5bmNocm9ub3VzIHN0YXJ0IHNvdXJjZSBjb21lcyBmcm9tIEVQV00wICovCisjZGVmaW5lIEVQV01fU1NDVExfU1NSQ19FUFdNMSAgICAgICAgICAgICAgICAgICAgICgxVUw8PEVQV01fU1NDVExfU1NSQ19Qb3MpICAgIC8qITwgU3luY2hyb25vdXMgc3RhcnQgc291cmNlIGNvbWVzIGZyb20gRVBXTTEgICovCisjZGVmaW5lIEVQV01fU1NDVExfU1NSQ19CUFdNMCAgICAgICAgICAgICAgICAgICAgICgyVUw8PEVQV01fU1NDVExfU1NSQ19Qb3MpICAgIC8qITwgU3luY2hyb25vdXMgc3RhcnQgc291cmNlIGNvbWVzIGZyb20gQlBXTTAgKi8KKyNkZWZpbmUgRVBXTV9TU0NUTF9TU1JDX0JQV00xICAgICAgICAgICAgICAgICAgICAgKDNVTDw8RVBXTV9TU0NUTF9TU1JDX1BvcykgICAgLyohPCBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2UgY29tZXMgZnJvbSBCUFdNMSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgVHJpZ2dlciBTb3VyY2UgU2VsZWN0IENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEVQV01fVFJHX0FEQ19FVkVOX1pFUk8gICAgICAgICAgICAgICAgICAgICgwVUwpICAgICAvKiE8IEVQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBldmVuIGNoYW5uZWwgbWF0Y2hlcyB6ZXJvIHBvaW50ICovCisjZGVmaW5lIEVQV01fVFJHX0FEQ19FVkVOX1BFUklPRCAgICAgICAgICAgICAgICAgICgxVUwpICAgICAvKiE8IEVQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBldmVuIGNoYW5uZWwgbWF0Y2hlcyBwZXJpb2QgcG9pbnQgKi8KKyNkZWZpbmUgRVBXTV9UUkdfQURDX0VWRU5fWkVST19QRVJJT0QgICAgICAgICAgICAgKDJVTCkgICAgIC8qITwgRVBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIGV2ZW4gY2hhbm5lbCBtYXRjaGVzIHplcm8gb3IgcGVyaW9kIHBvaW50ICovCisjZGVmaW5lIEVQV01fVFJHX0FEQ19FVkVOX0NPTVBBUkVfVVAgICAgICAgICAgICAgICgzVUwpICAgICAvKiE8IEVQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBldmVuIGNoYW5uZWwgbWF0Y2hlcyB1cCBjb3VudCB0byBjb21wYXJhdG9yIHBvaW50ICovCisjZGVmaW5lIEVQV01fVFJHX0FEQ19FVkVOX0NPTVBBUkVfRE9XTiAgICAgICAgICAgICg0VUwpICAgICAvKiE8IEVQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBldmVuIGNoYW5uZWwgbWF0Y2hlcyBkb3duIGNvdW50IHRvIGNvbXBhcmF0b3IgcG9pbnQgKi8KKyNkZWZpbmUgRVBXTV9UUkdfQURDX09ERF9aRVJPICAgICAgICAgICAgICAgICAgICAgKDVVTCkgICAgIC8qITwgRVBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIG9kZCBjaGFubmVsIG1hdGNoZXMgemVybyBwb2ludCAqLworI2RlZmluZSBFUFdNX1RSR19BRENfT0REX1BFUklPRCAgICAgICAgICAgICAgICAgICAoNlVMKSAgICAgLyohPCBFUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2Ygb2RkIGNoYW5uZWwgbWF0Y2hlcyBwZXJpb2QgcG9pbnQgKi8KKyNkZWZpbmUgRVBXTV9UUkdfQURDX09ERF9aRVJPX1BFUklPRCAgICAgICAgICAgICAgKDdVTCkgICAgIC8qITwgRVBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIG9kZCBjaGFubmVsIG1hdGNoZXMgemVybyBvciBwZXJpb2QgcG9pbnQgKi8KKyNkZWZpbmUgRVBXTV9UUkdfQURDX09ERF9DT01QQVJFX1VQICAgICAgICAgICAgICAgKDhVTCkgICAgIC8qITwgRVBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIG9kZCBjaGFubmVsIG1hdGNoZXMgdXAgY291bnQgdG8gY29tcGFyYXRvciBwb2ludCAqLworI2RlZmluZSBFUFdNX1RSR19BRENfT0REX0NPTVBBUkVfRE9XTiAgICAgICAgICAgICAoOVVMKSAgICAgLyohPCBFUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2Ygb2RkIGNoYW5uZWwgbWF0Y2hlcyBkb3duIGNvdW50IHRvIGNvbXBhcmF0b3IgcG9pbnQgKi8KKyNkZWZpbmUgRVBXTV9UUkdfQURDX0NIXzBfRlJFRV9DTVBfVVAgICAgICAgICAgICAgKDEwVUwpICAgIC8qITwgRVBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIGNoYW5uZWwgMCBtYXRjaGVzIHVwIGNvdW50IHRvIGZyZWUgY29tcGFyYXRvciBwb2ludCAqLworI2RlZmluZSBFUFdNX1RSR19BRENfQ0hfMF9GUkVFX0NNUF9ET1dOICAgICAgICAgICAoMTFVTCkgICAgLyohPCBFUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2YgY2hhbm5lbCAwIG1hdGNoZXMgZG93biBjb3VudCB0byBmcmVlIGNvbXBhcmF0b3IgcG9pbnQgKi8KKyNkZWZpbmUgRVBXTV9UUkdfQURDX0NIXzJfRlJFRV9DTVBfVVAgICAgICAgICAgICAgKDEyVUwpICAgIC8qITwgRVBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIGNoYW5uZWwgMiBtYXRjaGVzIHVwIGNvdW50IHRvIGZyZWUgY29tcGFyYXRvciBwb2ludCAqLworI2RlZmluZSBFUFdNX1RSR19BRENfQ0hfMl9GUkVFX0NNUF9ET1dOICAgICAgICAgICAoMTNVTCkgICAgLyohPCBFUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2YgY2hhbm5lbCAyIG1hdGNoZXMgZG93biBjb3VudCB0byBmcmVlIGNvbXBhcmF0b3IgcG9pbnQgKi8KKyNkZWZpbmUgRVBXTV9UUkdfQURDX0NIXzRfRlJFRV9DTVBfVVAgICAgICAgICAgICAgKDE0VUwpICAgIC8qITwgRVBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIGNoYW5uZWwgNCBtYXRjaGVzIHVwIGNvdW50IHRvIGZyZWUgY29tcGFyYXRvciBwb2ludCAqLworI2RlZmluZSBFUFdNX1RSR19BRENfQ0hfNF9GUkVFX0NNUF9ET1dOICAgICAgICAgICAoMTVVTCkgICAgLyohPCBFUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2YgY2hhbm5lbCA0IG1hdGNoZXMgZG93biBjb3VudCB0byBmcmVlIGNvbXBhcmF0b3IgcG9pbnQgKi8KKworI2RlZmluZSBFUFdNX1RSSUdHRVJfREFDX1pFUk8gICAgICAgICAgICAgICAgICAgICAoMHgxVUwpICAgICAgICAgICAvKiE8IEVQV00gdHJpZ2dlciBEQUMgd2hpbGUgY291bnRlciBkb3duIGNvdW50IHRvIDAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9UUklHR0VSX0RBQ19QRVJJT0QgICAgICAgICAgICAgICAgICAgKDB4MTAwVUwpICAgICAgICAgLyohPCBFUFdNIHRyaWdnZXIgREFDIHdoaWxlIGNvdW50ZXIgbWF0Y2hlcyAoUEVSSU9EICsgMSkgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX1RSSUdHRVJfREFDX0NPTVBBUkVfVVAgICAgICAgICAgICAgICAoMHgxMDAwMFVMKSAgICAgICAvKiE8IEVQV00gdHJpZ2dlciBEQUMgd2hpbGUgY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX1RSSUdHRVJfREFDX0NPTVBBUkVfRE9XTiAgICAgICAgICAgICAoMHgxMDAwMDAwVUwpICAgICAvKiE8IEVQV00gdHJpZ2dlciBEQUMgd2hpbGUgY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVCBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBGYWlsIGJyYWtlIENvbnRyb2wgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRVBXTV9GQl9FREdFX0FDTVAwICAgICAgICAgICAgICAgICAgICAgICAgKEVQV01fQlJLQ1RMMF8xX0NQTzBFQkVOX01zaykgICAgLyohPCBDb21wYXJhdG9yIDAgYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisjZGVmaW5lIEVQV01fRkJfRURHRV9BQ01QMSAgICAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9DUE8xRUJFTl9Nc2spICAgIC8qITwgQ29tcGFyYXRvciAxIGFzIGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworI2RlZmluZSBFUFdNX0ZCX0VER0VfQktQMCAgICAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfQlJLUDBFRU5fTXNrKSAgICAvKiE8IEJLUDAgcGluIGFzIGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworI2RlZmluZSBFUFdNX0ZCX0VER0VfQktQMSAgICAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfQlJLUDFFRU5fTXNrKSAgICAvKiE8IEJLUDEgcGluIGFzIGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworI2RlZmluZSBFUFdNX0ZCX0VER0VfQURDUk0gICAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfRUFEQ0VCRU5fTXNrKSAgICAgLyohPCBBREMgUmVzdWx0IE1vbml0b3IgKEFEQ1JNKSBhcyBlZGdlLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgKi8KKyNkZWZpbmUgRVBXTV9GQl9FREdFX1NZU19DU1MgICAgICAgICAgICAgICAgICAgICAgKEVQV01fQlJLQ1RMMF8xX1NZU0VCRU5fTXNrIHwgRVBXTV9GQUlMQlJLX0NTU0JSS0VOX01zaykgICAgLyohPCBTeXN0ZW0gZmFpbCBjb25kaXRpb246IGNsb2NrIHNlY3VyaXR5IHN5c3RlbSBkZXRlY3Rpb24gYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisjZGVmaW5lIEVQV01fRkJfRURHRV9TWVNfQk9EICAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9TWVNFQkVOX01zayB8IEVQV01fRkFJTEJSS19CT0RCUktFTl9Nc2spICAgIC8qITwgU3lzdGVtIGZhaWwgY29uZGl0aW9uOiBicm93bi1vdXQgZGV0ZWN0aW9uIGFzIGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworI2RlZmluZSBFUFdNX0ZCX0VER0VfU1lTX1JBTSAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfU1lTRUJFTl9Nc2sgfCBFUFdNX0ZBSUxCUktfUkFNQlJLRU5fTXNrKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogU1JBTSBwYXJpdHkgZXJyb3IgZGV0ZWN0aW9uIGFzIGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworI2RlZmluZSBFUFdNX0ZCX0VER0VfU1lTX0NPUiAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfU1lTRUJFTl9Nc2sgfCBFUFdNX0ZBSUxCUktfQ09SQlJLRU5fTXNrKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogY29yZSBsb2NrdXAgZGV0ZWN0aW9uIGFzIGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworCisjZGVmaW5lIEVQV01fRkJfTEVWRUxfQUNNUDAgICAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9DUE8wTEJFTl9Nc2spICAgIC8qITwgQ29tcGFyYXRvciAwIGFzIGxldmVsLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgKi8KKyNkZWZpbmUgRVBXTV9GQl9MRVZFTF9BQ01QMSAgICAgICAgICAgICAgICAgICAgICAgKEVQV01fQlJLQ1RMMF8xX0NQTzFMQkVOX01zaykgICAgLyohPCBDb21wYXJhdG9yIDEgYXMgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworI2RlZmluZSBFUFdNX0ZCX0xFVkVMX0JLUDAgICAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfQlJLUDBMRU5fTXNrKSAgICAvKiE8IEJLUDAgcGluIGFzIGxldmVsLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgKi8KKyNkZWZpbmUgRVBXTV9GQl9MRVZFTF9CS1AxICAgICAgICAgICAgICAgICAgICAgICAgKEVQV01fQlJLQ1RMMF8xX0JSS1AxTEVOX01zaykgICAgLyohPCBCS1AxIHBpbiBhcyBsZXZlbC1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisjZGVmaW5lIEVQV01fRkJfTEVWRUxfQURDUk0gICAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9FQURDTEJFTl9Nc2spICAgICAvKiE8IEFEQyBSZXN1bHQgTW9uaXRvciAoQURDUk0pIGFzIGxldmVsLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgKi8KKyNkZWZpbmUgRVBXTV9GQl9MRVZFTF9TWVNfQ1NTICAgICAgICAgICAgICAgICAgICAgKEVQV01fQlJLQ1RMMF8xX1NZU0xCRU5fTXNrIHwgRVBXTV9GQUlMQlJLX0NTU0JSS0VOX01zaykgICAgLyohPCBTeXN0ZW0gZmFpbCBjb25kaXRpb246IGNsb2NrIHNlY3VyaXR5IHN5c3RlbSBkZXRlY3Rpb24gYXMgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworI2RlZmluZSBFUFdNX0ZCX0xFVkVMX1NZU19CT0QgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfU1lTTEJFTl9Nc2sgfCBFUFdNX0ZBSUxCUktfQk9EQlJLRU5fTXNrKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogYnJvd24tb3V0IGRldGVjdGlvbiBhcyBsZXZlbC1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisjZGVmaW5lIEVQV01fRkJfTEVWRUxfU1lTX1JBTSAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9TWVNMQkVOX01zayB8IEVQV01fRkFJTEJSS19SQU1CUktFTl9Nc2spICAgIC8qITwgU3lzdGVtIGZhaWwgY29uZGl0aW9uOiBTUkFNIHBhcml0eSBlcnJvciBkZXRlY3Rpb24gYXMgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworI2RlZmluZSBFUFdNX0ZCX0xFVkVMX1NZU19DT1IgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfU1lTTEJFTl9Nc2sgfCBFUFdNX0ZBSUxCUktfQ09SQlJLRU5fTXNrKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogY29yZSBsb2NrdXAgZGV0ZWN0aW9uIGFzIGxldmVsLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgKi8KKworI2RlZmluZSBFUFdNX0ZCX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMFVMKSAgICAvKiE8IGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlICovCisjZGVmaW5lIEVQV01fRkJfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4VUwpICAgIC8qITwgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgQ29udHJvbCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRVBXTV9MRUJDVExfVFJHVFlQRV9SSVNJTkcgICAgICAgICAgICAgICgwVUw8PEVQV01fTEVCQ1RMX1RSR1RZUEVfUG9zKSAgICAvKiE8IEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFRyaWdnZXIgVHlwZSBJcyBSaXNpbmcgRWRnZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fTEVCQ1RMX1RSR1RZUEVfRkFMTElORyAgICAgICAgICAgICAoMVVMPDxFUFdNX0xFQkNUTF9UUkdUWVBFX1BvcykgICAgLyohPCBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBUcmlnZ2VyIFR5cGUgSXMgRmFsbGluZyBFZGdlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9MRUJDVExfVFJHVFlQRV9SSVNJTkdfT1JfRkFMTElORyAgICgyVUw8PEVQV01fTEVCQ1RMX1RSR1RZUEVfUG9zKSAgICAvKiE8IEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFRyaWdnZXIgVHlwZSBJcyBSaXNpbmcgb3IgRmFsbGluZyBFZGdlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9MRUJDVExfU1JDRU4wICAgICAgICAgICAgICAgICAgICAgIChFUFdNX0xFQkNUTF9TUkNFTjBfTXNrKSAgICAvKiE8IEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFNvdXJjZSBGcm9tIEVQV014X0NIMCBFbmFibGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0xFQkNUTF9TUkNFTjIgICAgICAgICAgICAgICAgICAgICAgKEVQV01fTEVCQ1RMX1NSQ0VOMl9Nc2spICAgIC8qITwgRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgU291cmNlIEZyb20gRVBXTXhfQ0gyIEVuYWJsZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fTEVCQ1RMX1NSQ0VONCAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9MRUJDVExfU1JDRU40X01zaykgICAgLyohPCBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBTb3VyY2UgRnJvbSBFUFdNeF9DSDQgRW5hYmxlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9MRUJDVExfU1JDRU4wXzIgICAgICAgICAgICAgICAgICAgIChFUFdNX0xFQkNUTF9TUkNFTjBfTXNrfEVQV01fTEVCQ1RMX1NSQ0VOMl9Nc2spICAgIC8qITwgRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgU291cmNlIEZyb20gRVBXTXhfQ0gwIGFuZCBFUFdNeF9DSDIgRW5hYmxlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9MRUJDVExfU1JDRU4wXzQgICAgICAgICAgICAgICAgICAgIChFUFdNX0xFQkNUTF9TUkNFTjBfTXNrfEVQV01fTEVCQ1RMX1NSQ0VONF9Nc2spICAgIC8qITwgRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgU291cmNlIEZyb20gRVBXTXhfQ0gwIGFuZCBFUFdNeF9DSDQgRW5hYmxlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9MRUJDVExfU1JDRU4yXzQgICAgICAgICAgICAgICAgICAgIChFUFdNX0xFQkNUTF9TUkNFTjJfTXNrfEVQV01fTEVCQ1RMX1NSQ0VONF9Nc2spICAgIC8qITwgRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgU291cmNlIEZyb20gRVBXTXhfQ0gyIGFuZCBFUFdNeF9DSDQgRW5hYmxlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9MRUJDVExfU1JDRU4wXzJfNCAgICAgICAgICAgICAgICAgIChFUFdNX0xFQkNUTF9TUkNFTjBfTXNrfEVQV01fTEVCQ1RMX1NSQ0VOMl9Nc2t8RVBXTV9MRUJDVExfU1JDRU40X01zaykgICAgLyohPCBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBTb3VyY2UgRnJvbSBFUFdNeF9DSDAsIEVQV014X0NIMiBhbmQgRVBXTXhfQ0g0IEVuYWJsZSBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDYXB0dXJlIENvbnRyb2wgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRVBXTV9DQVBUVVJFX0lOVF9SSVNJTkdfTEFUQ0ggICAgICAgICAgICAgKDFVTCkgICAgICAgIC8qITwgRVBXTSBjYXB0dXJlIGludGVycnVwdCBpZiBjaGFubmVsIGhhcyByaXNpbmcgdHJhbnNpdGlvbiAqLworI2RlZmluZSBFUFdNX0NBUFRVUkVfSU5UX0ZBTExJTkdfTEFUQ0ggICAgICAgICAgICAoMHgxMDBVTCkgICAgLyohPCBFUFdNIGNhcHR1cmUgaW50ZXJydXB0IGlmIGNoYW5uZWwgaGFzIGZhbGxpbmcgdHJhbnNpdGlvbiAqLworCisjZGVmaW5lIEVQV01fQ0FQVFVSRV9QRE1BX1JJU0lOR19MQVRDSCAgICAgICAgICAgICgweDJVTCkgICAgICAvKiE8IEVQV00gY2FwdHVyZSByaXNpbmcgbGF0Y2hlZCBkYXRhIHRyYW5zZmVyIGJ5IFBETUEgKi8KKyNkZWZpbmUgRVBXTV9DQVBUVVJFX1BETUFfRkFMTElOR19MQVRDSCAgICAgICAgICAgKDB4NFVMKSAgICAgIC8qITwgRVBXTSBjYXB0dXJlIGZhbGxpbmcgbGF0Y2hlZCBkYXRhIHRyYW5zZmVyIGJ5IFBETUEgKi8KKyNkZWZpbmUgRVBXTV9DQVBUVVJFX1BETUFfUklTSU5HX0ZBTExJTkdfTEFUQ0ggICAgKDB4NlVMKSAgICAgIC8qITwgRVBXTSBjYXB0dXJlIHJpc2luZyBhbmQgZmFsbGluZyBsYXRjaGVkIGRhdGEgdHJhbnNmZXIgYnkgUERNQSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgRHV0eSBJbnRlcnJ1cHQgVHlwZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEVQV01fRFVUWV9JTlRfRE9XTl9DT1VOVF9NQVRDSF9DTVAgICAgICAgIChFUFdNX0lOVEVOMF9DTVBESUVOMF9Nc2spICAgLyohPCBFUFdNIGR1dHkgaW50ZXJydXB0IHRyaWdnZXJlZCBpZiBkb3duIGNvdW50IG1hdGNoIGNvbXBhcmF0b3IgKi8KKyNkZWZpbmUgRVBXTV9EVVRZX0lOVF9VUF9DT1VOVF9NQVRDSF9DTVAgICAgICAgICAgKEVQV01fSU5URU4wX0NNUFVJRU4wX01zaykgICAvKiE8IEVQV00gZHV0eSBpbnRlcnJ1cHQgdHJpZ2dlcmVkIGlmIHVwIGRvd24gbWF0Y2ggY29tcGFyYXRvciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgSW50ZXJydXB0IEZsYWcgQWNjdW11bGF0b3IgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEVQV01fSUZBX1pFUk9fUE9JTlQgICAgICAgICAgICAgICAgICAoMFVMKSAgICAgICAgIC8qITwgRVBXTSBjb3VudGVyIGVxdWFsIHRvIHplcm8gKi8KKyNkZWZpbmUgRVBXTV9JRkFfUEVSSU9EX1BPSU5UICAgICAgICAgICAgICAgICgxVUwpICAgICAgICAgLyohPCBFUFdNIGNvdW50ZXIgZXF1YWwgdG8gcGVyaW9kICovCisjZGVmaW5lIEVQV01fSUZBX0NPTVBBUkVfVVBfQ09VTlRfUE9JTlQgICAgICAoMlVMKSAgICAgICAgIC8qITwgRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIGNvbXBhcmF0b3IgdmFsdWUgKi8KKyNkZWZpbmUgRVBXTV9JRkFfQ09NUEFSRV9ET1dOX0NPVU5UX1BPSU5UICAgICgzVUwpICAgICAgICAgLyohPCBFUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byBjb21wYXJhdG9yIHZhbHVlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBMb2FkIE1vZGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRVBXTV9MT0FEX01PREVfSU1NRURJQVRFICAgICAgICAgICAgICAgICAgKEVQV01fQ1RMMF9JTU1MREVOMF9Nc2spICAgIC8qITwgRVBXTSBpbW1lZGlhdGVseSBsb2FkIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0xPQURfTU9ERV9XSU5ET1cgICAgICAgICAgICAgICAgICAgICAoRVBXTV9DVEwwX1dJTkxERU4wX01zaykgICAgLyohPCBFUFdNIHdpbmRvdyBsb2FkIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0xPQURfTU9ERV9DRU5URVIgICAgICAgICAgICAgICAgICAgICAoRVBXTV9DVEwwX0NUUkxEMF9Nc2spICAgICAgLyohPCBFUFdNIGNlbnRlciBsb2FkIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgU3luY2hyb25pemUgQ29udHJvbCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEVQV01fU1lOQ19PVVRfRlJPTV9TWU5DSU5fU1dTWU5DICAgICAgICAgICgwVUwpICAgIC8qITwgU3luY2hyb25pemUgc291cmNlIGZyb20gU1lOQ19JTiBvciBTV1NZTkMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9TWU5DX09VVF9GUk9NX0NPVU5UX1RPX1pFUk8gICAgICAgICAgKDFVTCkgICAgLyohPCBTeW5jaHJvbml6ZSBzb3VyY2UgZnJvbSBjb3VudGVyIGVxdWFsIHRvIDAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9TWU5DX09VVF9GUk9NX0NPVU5UX1RPX0NPTVBBUkFUT1IgICAgKDJVTCkgICAgLyohPCBTeW5jaHJvbml6ZSBzb3VyY2UgZnJvbSBjb3VudGVyIGVxdWFsIHRvIENNUERBVDEsIENNUERBVDMsIENNUERBVDUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX1NZTkNfT1VUX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAoM1VMKSAgICAvKiE8IFNZTkNfT1VUIHdpbGwgbm90IGJlIGdlbmVyYXRlZCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fUEhTX0RJUl9ERUNSRU1FTlQgICAgICAgICAgICAgICAgICAgICgwVUwpICAgIC8qITwgRVBXTSBjb3VudGVyIGNvdW50IGRlY3JlbWVudCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX1BIU19ESVJfSU5DUkVNRU5UICAgICAgICAgICAgICAgICAgICAoMVVMKSAgICAvKiE8IEVQV00gY291bnRlciBjb3VudCBpbmNyZW1lbnQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIE5vaXNlIEZpbHRlciBDbG9jayBEaXZpZGUgU2VsZWN0IENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFUFdNX05GX0NMS19ESVZfMSAgICAgICAgICAgICAgICAgICAgICAgICAoMFVMKSAgICAvKiE8IE5vaXNlIGZpbHRlciBjbG9jayBpcyBIQ0xLIGRpdmlkZSBieSAxIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9ORl9DTEtfRElWXzIgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCkgICAgLyohPCBOb2lzZSBmaWx0ZXIgY2xvY2sgaXMgSENMSyBkaXZpZGUgYnkgMiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fTkZfQ0xLX0RJVl80ICAgICAgICAgICAgICAgICAgICAgICAgICgyVUwpICAgIC8qITwgTm9pc2UgZmlsdGVyIGNsb2NrIGlzIEhDTEsgZGl2aWRlIGJ5IDQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX05GX0NMS19ESVZfOCAgICAgICAgICAgICAgICAgICAgICAgICAoM1VMKSAgICAvKiE8IE5vaXNlIGZpbHRlciBjbG9jayBpcyBIQ0xLIGRpdmlkZSBieSA4IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9ORl9DTEtfRElWXzE2ICAgICAgICAgICAgICAgICAgICAgICAgKDRVTCkgICAgLyohPCBOb2lzZSBmaWx0ZXIgY2xvY2sgaXMgSENMSyBkaXZpZGUgYnkgMTYgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX05GX0NMS19ESVZfMzIgICAgICAgICAgICAgICAgICAgICAgICAoNVVMKSAgICAvKiE8IE5vaXNlIGZpbHRlciBjbG9jayBpcyBIQ0xLIGRpdmlkZSBieSAzMiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fTkZfQ0xLX0RJVl82NCAgICAgICAgICAgICAgICAgICAgICAgICg2VUwpICAgIC8qITwgTm9pc2UgZmlsdGVyIGNsb2NrIGlzIEhDTEsgZGl2aWRlIGJ5IDY0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9ORl9DTEtfRElWXzEyOCAgICAgICAgICAgICAgICAgICAgICAgKDdVTCkgICAgLyohPCBOb2lzZSBmaWx0ZXIgY2xvY2sgaXMgSENMSyBkaXZpZGUgYnkgMTI4IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENsb2NrIFNvdXJjZSBTZWxlY3QgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFUFdNX0NMS1NSQ19FUFdNX0NMSyAgICAgICAgICAgICAgICAgICAgICAoMFVMKSAgICAvKiE8IEVQV00gQ2xvY2sgc291cmNlIHNlbGVjdHMgdG8gRVBXTTBfQ0xLIG9yIEVQV00xX0NMSyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fQ0xLU1JDX1RJTUVSMCAgICAgICAgICAgICAgICAgICAgICAgICgxVUwpICAgIC8qITwgRVBXTSBDbG9jayBzb3VyY2Ugc2VsZWN0cyB0byBUSU1FUjAgb3ZlcmZsb3cgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0NMS1NSQ19USU1FUjEgICAgICAgICAgICAgICAgICAgICAgICAoMlVMKSAgICAvKiE8IEVQV00gQ2xvY2sgc291cmNlIHNlbGVjdHMgdG8gVElNRVIxIG92ZXJmbG93IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9DTEtTUkNfVElNRVIyICAgICAgICAgICAgICAgICAgICAgICAgKDNVTCkgICAgLyohPCBFUFdNIENsb2NrIHNvdXJjZSBzZWxlY3RzIHRvIFRJTUVSMiBvdmVyZmxvdyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fQ0xLU1JDX1RJTUVSMyAgICAgICAgICAgICAgICAgICAgICAgICg0VUwpICAgIC8qITwgRVBXTSBDbG9jayBzb3VyY2Ugc2VsZWN0cyB0byBUSU1FUjMgb3ZlcmZsb3cgXGhpZGVpbml0aWFsaXplciAqLworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRVBXTV9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgRVBXTV9FWFBPUlRFRF9GVU5DVElPTlMgRVBXTSBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZW5hYmxlIGNvbXBsZW1lbnRhcnkgbW9kZQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBjb21wbGVtZW50YXJ5IG1vZGUgb2YgRVBXTSBtb2R1bGUuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgRVBXTV9FTkFCTEVfQ09NUExFTUVOVEFSWV9NT0RFKGVwd20pICgoZXB3bSktPkNUTDEgPSAoZXB3bSktPkNUTDEgfCAoMHg3dWw8PEVQV01fQ1RMMV9PVVRNT0RFMF9Qb3MpKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIGRpc2FibGUgY29tcGxlbWVudGFyeSBtb2RlLCBhbmQgZW5hYmxlIGluZGVwZW5kZW50IG1vZGUuCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBjb21wbGVtZW50YXJ5IG1vZGUgb2YgRVBXTSBtb2R1bGUuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgRVBXTV9ESVNBQkxFX0NPTVBMRU1FTlRBUllfTU9ERShlcHdtKSAoKGVwd20pLT5DVEwxID0gKGVwd20pLT5DVEwxICYgfigweDd1bDw8RVBXTV9DVEwxX09VVE1PREUwX1BvcykpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZW5hYmxlIGdyb3VwIG1vZGUKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgZ3JvdXAgbW9kZSBvZiBFUFdNIG1vZHVsZS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX0VOQUJMRV9HUk9VUF9NT0RFKGVwd20pICgoZXB3bSktPkNUTDAgPSAoZXB3bSktPkNUTDAgfCBFUFdNX0NUTDBfR1JPVVBFTl9Nc2spCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZGlzYWJsZSBncm91cCBtb2RlCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBncm91cCBtb2RlIG9mIEVQV00gbW9kdWxlLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fRElTQUJMRV9HUk9VUF9NT0RFKGVwd20pICgoZXB3bSktPkNUTDAgPSAoZXB3bSktPkNUTDAgJiB+RVBXTV9DVEwwX0dST1VQRU5fTXNrKQorCisvKioKKyAqIEBicmllZiBFbmFibGUgdGltZXIgc3luY2hyb25vdXMgc3RhcnQgY291bnRpbmcgZnVuY3Rpb24gb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCByZXByZXNlbnRzIGNoYW5uZWwgMCwgYml0IDEgcmVwcmVzZW50cyBjaGFubmVsIDEuLi4KKyAqIEBwYXJhbVtpbl0gdTMyU3luY1NyYyBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2Ugc2VsZWN0aW9uLCB2YWxpZCB2YWx1ZXMgYXJlOgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1NTQ1RMX1NTUkNfRVBXTTAKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9TU0NUTF9TU1JDX0VQV00xCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fU1NDVExfU1NSQ19CUFdNMAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1NTQ1RMX1NTUkNfQlBXTTEKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSB0aW1lciBzeW5jaHJvbm91cyBzdGFydCBjb3VudGluZyBmdW5jdGlvbiBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX0VOQUJMRV9USU1FUl9TWU5DKGVwd20sIHUzMkNoYW5uZWxNYXNrLCB1MzJTeW5jU3JjKSAoKGVwd20pLT5TU0NUTCA9ICgoZXB3bSktPlNTQ1RMICYgfkVQV01fU1NDVExfU1NSQ19Nc2spIHwgKHUzMlN5bmNTcmMpIHwgKHUzMkNoYW5uZWxNYXNrKSkKKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSB0aW1lciBzeW5jaHJvbm91cyBzdGFydCBjb3VudGluZyBmdW5jdGlvbiBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIHJlcHJlc2VudHMgY2hhbm5lbCAwLCBiaXQgMSByZXByZXNlbnRzIGNoYW5uZWwgMS4uLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSB0aW1lciBzeW5jaHJvbm91cyBzdGFydCBjb3VudGluZyBmdW5jdGlvbiBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX0RJU0FCTEVfVElNRVJfU1lOQyhlcHdtLCB1MzJDaGFubmVsTWFzaykgXAorICAgIGRveyBcCisgICAgICAgIGludCBpO1wKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgNjsgaSsrKSB7IFwKKyAgICAgICAgICAgIGlmKCh1MzJDaGFubmVsTWFzaykgJiAoMVVMIDw8IGkpKSBcCisgICAgICAgICAgICAgIHsgXAorICAgICAgICAgICAgICAgIChlcHdtKS0+U1NDVEwgJj0gfigxVUwgPDwgaSk7IFwKKyAgICAgICAgICAgICAgfSBcCisgICAgICAgIH0gXAorICAgIH13aGlsZSgwKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIGVuYWJsZSBFUFdNIGNvdW50ZXIgc3luY2hyb25vdXMgc3RhcnQgY291bnRpbmcgZnVuY3Rpb24uCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gbWFrZSBzZWxlY3RlZCBFUFdNMCBhbmQgRVBXTTEgY2hhbm5lbChzKSBzdGFydCBjb3VudGluZyBhdCB0aGUgc2FtZSB0aW1lLgorICogICAgICAgICAgVG8gY29uZmlndXJlIHN5bmNocm9ub3VzIHN0YXJ0IGNvdW50aW5nIGNoYW5uZWwocykgYnkgRVBXTV9FTkFCTEVfVElNRVJfU1lOQygpIGFuZCBFUFdNX0RJU0FCTEVfVElNRVJfU1lOQygpLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fVFJJR0dFUl9TWU5DX1NUQVJUKGVwd20pICgoZXB3bSktPlNTVFJHID0gRVBXTV9TU1RSR19DTlRTRU5fTXNrKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIGVuYWJsZSBvdXRwdXQgaW52ZXJ0ZXIgb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCByZXByZXNlbnRzIGNoYW5uZWwgMCwgYml0IDEgcmVwcmVzZW50cyBjaGFubmVsIDEuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBvdXRwdXQgaW52ZXJ0ZXIgb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgRVBXTV9FTkFCTEVfT1VUUFVUX0lOVkVSVEVSKGVwd20sIHUzMkNoYW5uZWxNYXNrKSAoKGVwd20pLT5QT0xDVEwgPSAodTMyQ2hhbm5lbE1hc2spKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIGdldCBjYXB0dXJlZCByaXNpbmcgZGF0YQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgY2FwdHVyZWQgcmlzaW5nIGRhdGEgb2Ygc3BlY2lmaWVkIGNoYW5uZWwuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgRVBXTV9HRVRfQ0FQVFVSRV9SSVNJTkdfREFUQShlcHdtLCB1MzJDaGFubmVsTnVtKSAoKGVwd20pLT5DQVBEQVRbKHUzMkNoYW5uZWxOdW0pXS5SQ0FQREFUKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIGdldCBjYXB0dXJlZCBmYWxsaW5nIGRhdGEKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZ2V0IGNhcHR1cmVkIGZhbGxpbmcgZGF0YSBvZiBzcGVjaWZpZWQgY2hhbm5lbC4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX0dFVF9DQVBUVVJFX0ZBTExJTkdfREFUQShlcHdtLCB1MzJDaGFubmVsTnVtKSAoKGVwd20pLT5DQVBEQVRbKHUzMkNoYW5uZWxOdW0pXS5GQ0FQREFUKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIG1hc2sgb3V0cHV0IGxvZ2ljIHRvIGhpZ2ggb3IgbG93CisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgcmVwcmVzZW50cyBjaGFubmVsIDAsIGJpdCAxIHJlcHJlc2VudHMgY2hhbm5lbCAxLi4uCisgKiBAcGFyYW1baW5dIHUzMkxldmVsTWFzayBPdXRwdXQgbG9naWMgdG8gaGlnaCBvciBsb3cKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIG1hc2sgb3V0cHV0IGxvZ2ljIHRvIGhpZ2ggb3IgbG93IG9mIHNwZWNpZmllZCBjaGFubmVsKHMpLgorIElmIHUzMkNoYW5uZWxNYXNrIHBhcmFtZXRlciBpcyAwLCB0aGVuIG1hc2sgZnVuY3Rpb24gd2lsbCBiZSBkaXNhYmxlZC4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX01BU0tfT1VUUFVUKGVwd20sIHUzMkNoYW5uZWxNYXNrLCB1MzJMZXZlbE1hc2spIFwKKyAgICBkb3sgXAorICAgICAgICAoZXB3bSktPk1TS0VOID0gKHUzMkNoYW5uZWxNYXNrKTsgXAorICAgICAgICAoZXB3bSktPk1TSyA9ICh1MzJMZXZlbE1hc2spOyBcCisgICAgfXdoaWxlKDApCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gc2V0IHRoZSBwcmVzY2FsZXIgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJQcmVzY2FsZXIgQ2xvY2sgcHJlc2NhbGVyIG9mIHNwZWNpZmllZCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMCB+IDB4RkZGCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgdGhlIHByZXNjYWxlciBvZiBzcGVjaWZpZWQgY2hhbm5lbC4KKyBFdmVyeSBldmVuIGNoYW5uZWwgTiwgYW5kIGNoYW5uZWwgKE4gKyAxKSBzaGFyZSBhIHByZXNjYWxlci4gU28gaWYgY2hhbm5lbCAwIHByZXNjYWxlciBjaGFuZ2VkLCBjaGFubmVsIDEgd2lsbCBhbHNvIGJlIGFmZmVjdGVkLgorICogICAgICAgVGhlIGNsb2NrIG9mIEVQV00gY291bnRlciBpcyBkaXZpZGVkIGJ5ICh1MzJQcmVzY2FsZXIgKyAxKS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX1NFVF9QUkVTQ0FMRVIoZXB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyUHJlc2NhbGVyKSAoKGVwd20pLT5DTEtQU0NbKHUzMkNoYW5uZWxOdW0pID4+IDFdID0gKHUzMlByZXNjYWxlcikpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZ2V0IHRoZSBwcmVzY2FsZXIgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBSZXR1cm4gQ2xvY2sgcHJlc2NhbGVyIG9mIHNwZWNpZmllZCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMCB+IDB4RkZGCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZ2V0IHRoZSBwcmVzY2FsZXIgb2Ygc3BlY2lmaWVkIGNoYW5uZWwuCisgRXZlcnkgZXZlbiBjaGFubmVsIE4sIGFuZCBjaGFubmVsIChOICsgMSkgc2hhcmUgYSBwcmVzY2FsZXIuIFNvIGlmIGNoYW5uZWwgMCBwcmVzY2FsZXIgY2hhbmdlZCwgY2hhbm5lbCAxIHdpbGwgYWxzbyBiZSBhZmZlY3RlZC4KKyAqICAgICAgIFRoZSBjbG9jayBvZiBFUFdNIGNvdW50ZXIgaXMgZGl2aWRlZCBieSAodTMyUHJlc2NhbGVyICsgMSkuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgRVBXTV9HRVRfUFJFU0NBTEVSKGVwd20sIHUzMkNoYW5uZWxOdW0pICgoZXB3bSktPkNMS1BTQ1sodTMyQ2hhbm5lbE51bSkgPj4gMVVdKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIHNldCB0aGUgY29tcGFyYXRvciBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkNNUiBDb21wYXJhdG9yIG9mIHNwZWNpZmllZCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH4weEZGRkYKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCB0aGUgY29tcGFyYXRvciBvZiBzcGVjaWZpZWQgY2hhbm5lbC4KKyBUaGlzIG5ldyBzZXR0aW5nIHdpbGwgdGFrZSBlZmZlY3Qgb24gbmV4dCBFUFdNIHBlcmlvZC4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX1NFVF9DTVIoZXB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyQ01SKSAoKGVwd20pLT5DTVBEQVRbKHUzMkNoYW5uZWxOdW0pXT0gKHUzMkNNUikpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZ2V0IHRoZSBjb21wYXJhdG9yIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gUmV0dXJuIHRoZSBjb21wYXJhdG9yIG9mIHNwZWNpZmllZCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH4weEZGRkYKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgdGhlIGNvbXBhcmF0b3Igb2Ygc3BlY2lmaWVkIGNoYW5uZWwuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgRVBXTV9HRVRfQ01SKGVwd20sIHUzMkNoYW5uZWxOdW0pICgoZXB3bSktPkNNUERBVFsodTMyQ2hhbm5lbE51bSldKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIHNldCB0aGUgZnJlZSB0cmlnZ2VyIGNvbXBhcmF0b3Igb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJGVENNUiBGcmVlIHRyaWdnZXIgY29tcGFyYXRvciBvZiBzcGVjaWZpZWQgY2hhbm5lbC4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+MHhGRkZGCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgdGhlIGZyZWUgdHJpZ2dlciBjb21wYXJhdG9yIG9mIHNwZWNpZmllZCBjaGFubmVsLgorIFRoaXMgbmV3IHNldHRpbmcgd2lsbCB0YWtlIGVmZmVjdCBvbiBuZXh0IEVQV00gcGVyaW9kLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fU0VUX0ZUQ01SKGVwd20sIHUzMkNoYW5uZWxOdW0sIHUzMkZUQ01SKSAoKChlcHdtKS0+RlRDTVBEQVRbKCh1MzJDaGFubmVsTnVtKSA+PiAxVSldKSA9ICh1MzJGVENNUikpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gc2V0IHRoZSBwZXJpb2Qgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJDTlIgUGVyaW9kIG9mIHNwZWNpZmllZCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH4weEZGRkYKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCB0aGUgcGVyaW9kIG9mIHNwZWNpZmllZCBjaGFubmVsLgorIFRoaXMgbmV3IHNldHRpbmcgd2lsbCB0YWtlIGVmZmVjdCBvbiBuZXh0IEVQV00gcGVyaW9kLgorIEVQV00gY291bnRlciB3aWxsIHN0b3AgaWYgcGVyaW9kIGxlbmd0aCBzZXQgdG8gMC4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX1NFVF9DTlIoZXB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyQ05SKSAgKChlcHdtKS0+UEVSSU9EWyh1MzJDaGFubmVsTnVtKV0gPSAodTMyQ05SKSkKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBnZXQgdGhlIHBlcmlvZCBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIFJldHVybiB0aGUgcGVyaW9kIG9mIHNwZWNpZmllZCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH4weEZGRkYKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgdGhlIHBlcmlvZCBvZiBzcGVjaWZpZWQgY2hhbm5lbC4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX0dFVF9DTlIoZXB3bSwgdTMyQ2hhbm5lbE51bSkgICgoZXB3bSktPlBFUklPRFsodTMyQ2hhbm5lbE51bSldKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIHNldCB0aGUgRVBXTSBhbGlnbmVkIHR5cGUKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCByZXByZXNlbnRzIGNoYW5uZWwgMCwgYml0IDEgcmVwcmVzZW50cyBjaGFubmVsIDEuLi4KKyAqIEBwYXJhbVtpbl0gdTMyQWxpZ25lZFR5cGUgRVBXTSBhbGlnbmVkIHR5cGUsIHZhbGlkIHZhbHVlcyBhcmU6CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fRURHRV9BTElHTkVECisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0VOVEVSX0FMSUdORUQKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCB0aGUgRVBXTSBhbGlnbmVkIHR5cGUgb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgRVBXTV9TRVRfQUxJR05FRF9UWVBFKGVwd20sIHUzMkNoYW5uZWxNYXNrLCB1MzJBbGlnbmVkVHlwZSkgXAorICAgZG97IFwKKyAgICAgICAgdWludDMyX3QgaTsgXAorICAgICAgICBmb3IoaSA9IDBVTDsgaSA8IDZVTDsgaSsrKSB7IFwKKyAgICAgICAgICAgIGlmKCh1MzJDaGFubmVsTWFzaykgJiAoMVVMIDw8IGkpKSBcCisgICAgICAgICAgICAgIHsgXAorICAgICAgICAgICAgICAgIChlcHdtKS0+Q1RMMSA9ICgoKGVwd20pLT5DVEwxICYgfigzVUwgPDwgKGkgPDwgMSkpKSB8ICgodTMyQWxpZ25lZFR5cGUpIDw8IChpIDw8IDEpKSk7IFwKKyAgICAgICAgICAgICAgfSBcCisgICAgICAgIH0gXAorICAgIH13aGlsZSgwKQorCisvKioKKyAqIEBicmllZiBTZXQgbG9hZCB3aW5kb3cgb2Ygd2luZG93IGxvYWRpbmcgbW9kZSBmb3Igc3BlY2lmaWVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCByZXByZXNlbnRzIGNoYW5uZWwgMCwgYml0IDEgcmVwcmVzZW50cyBjaGFubmVsIDEuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCBsb2FkIHdpbmRvdyBvZiB3aW5kb3cgbG9hZGluZyBtb2RlIGZvciBzcGVjaWZpZWQgY2hhbm5lbChzKS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX1NFVF9MT0FEX1dJTkRPVyhlcHdtLCB1MzJDaGFubmVsTWFzaykgKChlcHdtKS0+TE9BRCB8PSAodTMyQ2hhbm5lbE1hc2spKQorCisvKioKKyAqIEBicmllZiBUcmlnZ2VyIHN5bmNocm9ub3VzIGV2ZW50IGZyb20gc3BlY2lmaWVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSAwLCAyLCA0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIHJlcHJlc2VudHMgY2hhbm5lbCAwLCBiaXQgMSByZXByZXNlbnRzIGNoYW5uZWwgMiBhbmQgYml0IDIgcmVwcmVzZW50cyBjaGFubmVsIDQKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHRyaWdnZXIgc3luY2hyb25vdXMgZXZlbnQgZnJvbSBzcGVjaWZpZWQgY2hhbm5lbChzKS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX1RSSUdHRVJfU1lOQyhlcHdtLCB1MzJDaGFubmVsTnVtKSAoKGVwd20pLT5TV1NZTkMgfD0gKDFVIDw8ICgodTMyQ2hhbm5lbE51bSkgPj4gMSkpKQorCisvKioKKyAqIEBicmllZiBDbGVhciBjb3VudGVyIG9mIHNwZWNpZmllZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgcmVwcmVzZW50cyBjaGFubmVsIDAsIGJpdCAxIHJlcHJlc2VudHMgY2hhbm5lbCAxLi4uCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjbGVhciBjb3VudGVyIG9mIHNwZWNpZmllZCBjaGFubmVsKHMpLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fQ0xSX0NPVU5URVIoZXB3bSwgdTMyQ2hhbm5lbE1hc2spICgoZXB3bSktPkNOVENMUiB8PSAodTMyQ2hhbm5lbE1hc2spKQorCisvKioKKyAqIEBicmllZiBTZXQgb3V0cHV0IGxldmVsIGF0IHplcm8sIGNvbXBhcmUgdXAsIHBlcmlvZChjZW50ZXIpIGFuZCBjb21wYXJlIGRvd24gb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCByZXByZXNlbnRzIGNoYW5uZWwgMCwgYml0IDEgcmVwcmVzZW50cyBjaGFubmVsIDEuLi4KKyAqIEBwYXJhbVtpbl0gdTMyWmVyb0xldmVsIG91dHB1dCBsZXZlbCBhdCB6ZXJvIHBvaW50LCB2YWxpZCB2YWx1ZXMgYXJlOgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX09VVFBVVF9OT1RISU5HCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX0xPVworICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX09VVFBVVF9ISUdICisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX1RPR0dMRQorICogQHBhcmFtW2luXSB1MzJDbXBVcExldmVsIG91dHB1dCBsZXZlbCBhdCBjb21wYXJlIHVwIHBvaW50LCB2YWxpZCB2YWx1ZXMgYXJlOgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX09VVFBVVF9OT1RISU5HCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX0xPVworICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX09VVFBVVF9ISUdICisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX1RPR0dMRQorICogQHBhcmFtW2luXSB1MzJQZXJpb2RMZXZlbCBvdXRwdXQgbGV2ZWwgYXQgcGVyaW9kKGNlbnRlcikgcG9pbnQsIHZhbGlkIHZhbHVlcyBhcmU6CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX05PVEhJTkcKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9PVVRQVVRfTE9XCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX0hJR0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9PVVRQVVRfVE9HR0xFCisgKiBAcGFyYW1baW5dIHUzMkNtcERvd25MZXZlbCBvdXRwdXQgbGV2ZWwgYXQgY29tcGFyZSBkb3duIHBvaW50LCB2YWxpZCB2YWx1ZXMgYXJlOgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX09VVFBVVF9OT1RISU5HCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX0xPVworICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX09VVFBVVF9ISUdICisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX1RPR0dMRQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gU2V0IG91dHB1dCBsZXZlbCBhdCB6ZXJvLCBjb21wYXJlIHVwLCBwZXJpb2QoY2VudGVyKSBhbmQgY29tcGFyZSBkb3duIG9mIHNwZWNpZmllZCBjaGFubmVsKHMpLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fU0VUX09VVFBVVF9MRVZFTChlcHdtLCB1MzJDaGFubmVsTWFzaywgdTMyWmVyb0xldmVsLCB1MzJDbXBVcExldmVsLCB1MzJQZXJpb2RMZXZlbCwgdTMyQ21wRG93bkxldmVsKSBcCisgICBkb3sgXAorICAgICAgICB1aW50MzJfdCBpOyBcCisgICAgICAgIGZvcihpID0gMFVMOyBpIDwgNlVMOyBpKyspIHsgXAorICAgICAgICAgICAgaWYoKHUzMkNoYW5uZWxNYXNrKSAmICgxVUwgPDwgaSkpIHsgXAorICAgICAgICAgICAgICAgIChlcHdtKS0+V0dDVEwwID0gKCgoZXB3bSktPldHQ1RMMCAmIH4oM1VMIDw8IChpIDw8IDEpKSkgfCAoKHUzMlplcm9MZXZlbCkgPDwgKGkgPDwgMSkpKTsgXAorICAgICAgICAgICAgICAgIChlcHdtKS0+V0dDVEwwID0gKCgoZXB3bSktPldHQ1RMMCAmIH4oM1VMIDw8IChFUFdNX1dHQ1RMMF9QUkRQQ1RMMF9Qb3MgKyAoaSA8PCAxKSkpKSB8ICgodTMyUGVyaW9kTGV2ZWwpIDw8IChFUFdNX1dHQ1RMMF9QUkRQQ1RMMF9Qb3MgKyAoaSA8PCAxKSkpKTsgXAorICAgICAgICAgICAgICAgIChlcHdtKS0+V0dDVEwxID0gKCgoZXB3bSktPldHQ1RMMSAmIH4oM1VMIDw8IChpIDw8IDEpKSkgfCAoKHUzMkNtcFVwTGV2ZWwpIDw8IChpIDw8IDEpKSk7IFwKKyAgICAgICAgICAgICAgICAoZXB3bSktPldHQ1RMMSA9ICgoKGVwd20pLT5XR0NUTDEgJiB+KDNVTCA8PCAoRVBXTV9XR0NUTDFfQ01QRENUTDBfUG9zICsgKGkgPDwgMSkpKSkgfCAoKHUzMkNtcERvd25MZXZlbCkgPDwgKEVQV01fV0dDVEwxX0NNUERDVEwwX1BvcyArIChpIDw8IDEpKSkpOyBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAgfSBcCisgICAgfXdoaWxlKDApCisKKy8qKgorICogQGJyaWVmIFRyaWdnZXIgYnJha2UgZXZlbnQgZnJvbSBzcGVjaWZpZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIHJlcHJlc2VudHMgY2hhbm5lbCAwLCBiaXQgMSByZXByZXNlbnRzIGNoYW5uZWwgMiBhbmQgYml0IDIgcmVwcmVzZW50cyBjaGFubmVsIDQKKyAqIEBwYXJhbVtpbl0gdTMyQnJha2VUeXBlIFR5cGUgb2YgYnJha2UgdHJpZ2dlci4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9FREdFCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfTEVWRUwKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHRyaWdnZXIgYnJha2UgZXZlbnQgZnJvbSBzcGVjaWZpZWQgY2hhbm5lbChzKS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX1RSSUdHRVJfQlJBS0UoZXB3bSwgdTMyQ2hhbm5lbE1hc2ssIHUzMkJyYWtlVHlwZSkgKChlcHdtKS0+U1dCUksgfD0gKCh1MzJDaGFubmVsTWFzaykgPDwgKHUzMkJyYWtlVHlwZSkpKQorCisvKioKKyAqIEBicmllZiBTZXQgRGVhZCB6b25lIGNsb2NrIHNvdXJjZQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkFmdGVyUHJlc2NhbGVyIERlYWQgem9uZSBjbG9jayBzb3VyY2UgaXMgZnJvbSBwcmVzY2FsZXIgb3V0cHV0LiBWYWxpZCB2YWx1ZXMgYXJlIFRSVUUgKGFmdGVyIHByZXNjYWxlcikgb3IgRkFMU0UgKGJlZm9yZSBwcmVzY2FsZXIpLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IERlYWQgem9uZSBjbG9jayBzb3VyY2UuIEV2ZXJ5IHR3byBjaGFubmVscyBzaGFyZSB0aGUgc2FtZSBzZXR0aW5nLgorIFRoZSB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX1NFVF9ERUFEWk9ORV9DTEtfU1JDKGVwd20sIHUzMkNoYW5uZWxOdW0sIHUzMkFmdGVyUHJlc2NhbGVyKSBcCisgICAgKCgoZXB3bSktPkRUQ1RMWyh1MzJDaGFubmVsTnVtKSA+PiAxXSkgPSAoKGVwd20pLT5EVENUTFsodTMyQ2hhbm5lbE51bSkgPj4gMV0gJiB+RVBXTV9EVENUTDBfMV9EVENLU0VMX01zaykgfCBcCisgICAgKCh1MzJBZnRlclByZXNjYWxlcikgPDwgRVBXTV9EVENUTDBfMV9EVENLU0VMX1BvcykpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIERlZmluZSBFUFdNIGZ1bmN0aW9ucyBwcm90b3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit1aW50MzJfdCBFUFdNX0NvbmZpZ0NhcHR1cmVDaGFubmVsKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyVW5pdFRpbWVOc2VjLCB1aW50MzJfdCB1MzJDYXB0dXJlRWRnZSk7Cit1aW50MzJfdCBFUFdNX0NvbmZpZ091dHB1dENoYW5uZWwoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJGcmVxdWVuY3ksIHVpbnQzMl90IHUzMkR1dHlDeWNsZSk7Cit2b2lkIEVQV01fU3RhcnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzayk7Cit2b2lkIEVQV01fU3RvcChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKTsKK3ZvaWQgRVBXTV9Gb3JjZVN0b3AoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzayk7Cit2b2lkIEVQV01fRW5hYmxlQURDVHJpZ2dlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkNvbmRpdGlvbik7Cit2b2lkIEVQV01fRGlzYWJsZUFEQ1RyaWdnZXIoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgRVBXTV9DbGVhckFEQ1RyaWdnZXJGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyQ29uZGl0aW9uKTsKK3VpbnQzMl90IEVQV01fR2V0QURDVHJpZ2dlckZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgRVBXTV9FbmFibGVEQUNUcmlnZ2VyKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyQ29uZGl0aW9uKTsKK3ZvaWQgRVBXTV9EaXNhYmxlREFDVHJpZ2dlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0NsZWFyREFDVHJpZ2dlckZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJDb25kaXRpb24pOwordWludDMyX3QgRVBXTV9HZXREQUNUcmlnZ2VyRmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0VuYWJsZUZhdWx0QnJha2UoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaywgdWludDMyX3QgdTMyTGV2ZWxNYXNrLCB1aW50MzJfdCB1MzJCcmFrZVNvdXJjZSk7Cit2b2lkIEVQV01fRW5hYmxlQ2FwdHVyZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKTsKK3ZvaWQgRVBXTV9EaXNhYmxlQ2FwdHVyZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKTsKK3ZvaWQgRVBXTV9FbmFibGVPdXRwdXQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzayk7Cit2b2lkIEVQV01fRGlzYWJsZU91dHB1dChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKTsKK3ZvaWQgRVBXTV9FbmFibGVQRE1BKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyUmlzaW5nRmlyc3QsIHVpbnQzMl90IHUzMk1vZGUpOwordm9pZCBFUFdNX0Rpc2FibGVQRE1BKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fRW5hYmxlRGVhZFpvbmUoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJEdXJhdGlvbik7Cit2b2lkIEVQV01fRGlzYWJsZURlYWRab25lKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fRW5hYmxlQ2FwdHVyZUludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkVkZ2UpOwordm9pZCBFUFdNX0Rpc2FibGVDYXB0dXJlSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyRWRnZSk7Cit2b2lkIEVQV01fQ2xlYXJDYXB0dXJlSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkVkZ2UpOwordWludDMyX3QgRVBXTV9HZXRDYXB0dXJlSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0VuYWJsZUR1dHlJbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJJbnREdXR5VHlwZSk7Cit2b2lkIEVQV01fRGlzYWJsZUR1dHlJbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgRVBXTV9DbGVhckR1dHlJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit1aW50MzJfdCBFUFdNX0dldER1dHlJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fRW5hYmxlRmF1bHRCcmFrZUludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlU291cmNlKTsKK3ZvaWQgRVBXTV9EaXNhYmxlRmF1bHRCcmFrZUludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlU291cmNlKTsKK3ZvaWQgRVBXTV9DbGVhckZhdWx0QnJha2VJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQnJha2VTb3VyY2UpOwordWludDMyX3QgRVBXTV9HZXRGYXVsdEJyYWtlSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlU291cmNlKTsKK3ZvaWQgRVBXTV9FbmFibGVQZXJpb2RJbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCAgdWludDMyX3QgdTMySW50UGVyaW9kVHlwZSk7Cit2b2lkIEVQV01fRGlzYWJsZVBlcmlvZEludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0NsZWFyUGVyaW9kSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordWludDMyX3QgRVBXTV9HZXRQZXJpb2RJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fRW5hYmxlWmVyb0ludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0Rpc2FibGVaZXJvSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fQ2xlYXJaZXJvSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordWludDMyX3QgRVBXTV9HZXRaZXJvSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0VuYWJsZUFjYyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkludEZsYWdDbnQsIHVpbnQzMl90IHUzMkludEFjY1NyYyk7Cit2b2lkIEVQV01fRGlzYWJsZUFjYyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0VuYWJsZUFjY0ludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0Rpc2FibGVBY2NJbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgRVBXTV9DbGVhckFjY0ludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordWludDMyX3QgRVBXTV9HZXRBY2NJbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgRVBXTV9FbmFibGVBY2NQRE1BKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fRGlzYWJsZUFjY1BETUEoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgRVBXTV9DbGVhckZURHV0eUludEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3VpbnQzMl90IEVQV01fR2V0RlREdXR5SW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0VuYWJsZUxvYWRNb2RlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyTG9hZE1vZGUpOwordm9pZCBFUFdNX0Rpc2FibGVMb2FkTW9kZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkxvYWRNb2RlKTsKK3ZvaWQgRVBXTV9Db25maWdTeW5jUGhhc2UoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJTeW5jU3JjLCB1aW50MzJfdCB1MzJEaXJlY3Rpb24sIHVpbnQzMl90IHUzMlN0YXJ0UGhhc2UpOwordm9pZCBFUFdNX0VuYWJsZVN5bmNQaGFzZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKTsKK3ZvaWQgRVBXTV9EaXNhYmxlU3luY1BoYXNlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spOwordm9pZCBFUFdNX0VuYWJsZVN5bmNOb2lzZUZpbHRlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNsa0NudCwgdWludDMyX3QgdTMyQ2xrRGl2U2VsKTsKK3ZvaWQgRVBXTV9EaXNhYmxlU3luY05vaXNlRmlsdGVyKEVQV01fVCAqZXB3bSk7Cit2b2lkIEVQV01fRW5hYmxlU3luY1BpbkludmVyc2UoRVBXTV9UICplcHdtKTsKK3ZvaWQgRVBXTV9EaXNhYmxlU3luY1BpbkludmVyc2UoRVBXTV9UICplcHdtKTsKK3ZvaWQgRVBXTV9TZXRDbG9ja1NvdXJjZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkNsa1NyY1NlbCk7Cit2b2lkIEVQV01fRW5hYmxlQnJha2VOb2lzZUZpbHRlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlUGluTnVtLCB1aW50MzJfdCB1MzJDbGtDbnQsIHVpbnQzMl90IHUzMkNsa0RpdlNlbCk7Cit2b2lkIEVQV01fRGlzYWJsZUJyYWtlTm9pc2VGaWx0ZXIoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJCcmFrZVBpbk51bSk7Cit2b2lkIEVQV01fRW5hYmxlQnJha2VQaW5JbnZlcnNlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQnJha2VQaW5OdW0pOwordm9pZCBFUFdNX0Rpc2FibGVCcmFrZVBpbkludmVyc2UoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJCcmFrZVBpbk51bSk7Cit2b2lkIEVQV01fU2V0QnJha2VQaW5Tb3VyY2UoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJCcmFrZVBpbk51bSwgdWludDMyX3QgdTMyU2VsQW5vdGhlck1vZHVsZSk7Cit2b2lkIEVQV01fU2V0TGVhZGluZ0VkZ2VCbGFua2luZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMlRyaWdTcmNTZWwsIHVpbnQzMl90IHUzMlRyaWdUeXBlLCB1aW50MzJfdCB1MzJCbGFua2luZ0NudCwgdWludDMyX3QgdTMyQmxhbmtpbmdFbmFibGUpOwordWludDMyX3QgRVBXTV9HZXRXcmFwQXJvdW5kRmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0NsZWFyV3JhcEFyb3VuZEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFUFdNX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEVQV01fRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0VQV01fSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2ZtYy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZm1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlZWUzOAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2ZtYy5oCkBAIC0wLDAgKzEsNDkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZm1jLmgKKyAqIEB2ZXJzaW9uICBWMy4wCisgKiAkUmV2aXNpb246IDIgJAorICogJERhdGU6IDE2LzA3LzI5IDM6MTFwICQKKyAqIEBicmllZiAgICBNMjM1MSBTZXJpZXMgRmxhc2ggTWVtb3J5IENvbnRyb2xsZXIoRk1DKSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19GTUNfSF9fCisjZGVmaW5lIF9fRk1DX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRk1DX0RyaXZlciBGTUMgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRk1DX0VYUE9SVEVEX0NPTlNUQU5UUyBGTUMgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBHbG9iYWwgY29uc3RhbnQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgSVNCRU4gICAwVUwKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGVmaW5lIEJhc2UgQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBGTUNfQVBST01fQkFTRSAgICAgICAgICAweDAwMDAwMDAwVUwgICAgLyohPCBBUFJPTSAgQmFzZSBBZGRyZXNzICAgICAgICAgICovCisjZGVmaW5lIEZNQ19BUFJPTV9FTkQgICAgICAgICAgIDB4MDAwODAwMDBVTCAgICAvKiE8IEFQUk9NIGVuZCBhZGRyZXNzICAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0FQUk9NX0JBTkswX0VORCAgICAgKEZNQ19BUFJPTV9FTkQvMlVMKSAgLyohPCBBUFJPTSBiYW5rMCBlbmQgYWRkcmVzcyAqLworI2RlZmluZSBGTUNfTERST01fQkFTRSAgICAgICAgICAweDAwMTAwMDAwVUwgICAgLyohPCBMRFJPTSAgQmFzZSBBZGRyZXNzICAgICAgICAgICovCisjZGVmaW5lIEZNQ19MRFJPTV9FTkQgICAgICAgICAgIDB4MDAxMDEwMDBVTCAgICAvKiE8IExEUk9NIGVuZCBhZGRyZXNzICAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX1hPTV9CQVNFICAgICAgICAgICAgMHgwMDIwMDAwMFVMICAgIC8qITwgWE9NICBCYXNlIEFkZHJlc3MgICAgICAgICAgICAqLworI2RlZmluZSBGTUNfWE9NUjBfQkFTRSAgICAgICAgICAweDAwMjAwMDAwVUwgICAgLyohPCBYT01SIDAgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIEZNQ19YT01SMV9CQVNFICAgICAgICAgIDB4MDAyMDAwMTBVTCAgICAvKiE8IFhPTVIgMSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgRk1DX1hPTVIyX0JBU0UgICAgICAgICAgMHgwMDIwMDAyMFVMICAgIC8qITwgWE9NUiAyIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBGTUNfWE9NUjNfQkFTRSAgICAgICAgICAweDAwMjAwMDMwVUwgICAgLyohPCBYT01SIDMgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIEZNQ19OU0NCQV9CQVNFICAgICAgICAgIDB4MDAyMDA4MDBVTCAgICAvKiE8IE5vbi1TZWN1cmUgYmFzZSBhZGRyZXNzICAgICAgKi8KKyNkZWZpbmUgRk1DX1NDUkxPQ0tfQkFTRSAgICAgICAgMHgwMDIwMDgwNFVMICAgIC8qITwgU2VjdXJlIFJlZ2lvbiBMb2NrIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBGTUNfQVJMT0NLX0JBU0UgICAgICAgICAweDAwMjEwODA0VUwgICAgLyohPCBBbGwgUmVnaW9uIExvY2sgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEZNQ19DT05GSUdfQkFTRSAgICAgICAgIDB4MDAzMDAwMDBVTCAgICAvKiE8IENPTkZJRyBCYXNlIEFkZHJlc3MgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX1VTRVJfQ09ORklHXzAgICAgICAgMHgwMDMwMDAwMFVMICAgIC8qITwgQ09ORklHIDAgQWRkcmVzcyAqLworI2RlZmluZSBGTUNfVVNFUl9DT05GSUdfMSAgICAgICAweDAwMzAwMDA0VUwgICAgLyohPCBDT05GSUcgMSBBZGRyZXNzICovCisjZGVmaW5lIEZNQ19VU0VSX0NPTkZJR18yICAgICAgIDB4MDAzMDAwMDhVTCAgICAvKiE8IENPTkZJRyAyIEFkZHJlc3MgKi8KKyNkZWZpbmUgRk1DX1VTRVJfQ09ORklHXzMgICAgICAgMHgwMDMwMDAwQ1VMICAgIC8qITwgQ09ORklHIDMgQWRkcmVzcyAqLworI2RlZmluZSBGTUNfT1RQX0JBU0UgICAgICAgICAgICAweDAwMzEwMDAwVUwgICAgLyohPCBPVFAgZmxhc2ggYmFzZSBhZGRyZXNzICAgICAgICovCisjZGVmaW5lIEZNQ19LUFJPTV9CQVNFICAgICAgICAgIDB4MDAzMTEwMDBVTCAgICAvKiE8IFNlY3VyaXR5IFJPTSBiYXNlIGFkZHJlc3MgICAgKi8KKworI2RlZmluZSBGTUNfRkxBU0hfUEFHRV9TSVpFICAgICAweDgwMFVMICAgICAgICAgLyohPCBGbGFzaCBQYWdlIFNpemUgKDIwNDggQnl0ZXMpICovCisjZGVmaW5lIEZNQ19QQUdFX0FERFJfTUFTSyAgICAgIDB4RkZGRkY4MDBVTCAgICAvKiE8IEZsYXNoIHBhZ2UgYWRkcmVzcyBtYXNrICAgICAgKi8KKyNkZWZpbmUgRk1DX01VTFRJX1dPUkRfUFJPR19MRU4gNTEyVUwgICAgICAgICAgIC8qITwgVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgbXVsdGktd29yZCBwcm9ncmFtLiAgKi8KKworI2RlZmluZSBGTUNfQVBST01fU0laRSAgICAgICAgICBGTUNfQVBST01fRU5EICAgLyohPCBBUFJPTSBTaXplICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0JBTktfU0laRSAgICAgICAgICAgKEZNQ19BUFJPTV9TSVpFLzJVTCkgLyohPCBBUFJPTSBCYW5rIFNpemUgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0xEUk9NX1NJWkUgICAgICAgICAgMHgxMDAwVUwgICAgICAgIC8qITwgTERST00gU2l6ZSAoNCBLYnl0ZXMpICAgICAgICovCisjZGVmaW5lIEZNQ19PVFBfRU5UUllfQ05UICAgICAgIDI1NlVMICAgICAgICAgICAvKiE8IE9UUCBlbnRyeSBudW1iZXIgICAgICAgICAgICAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgWE9NIHJlZ2lvbiBudW1iZXIgY29uc3RhbnQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFhPTVIwICAgMFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFhPTSByZWdpb24gMCAgICAgKi8KKyNkZWZpbmUgWE9NUjEgICAxVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWE9NIHJlZ2lvbiAxICAgICAqLworI2RlZmluZSBYT01SMiAgIDJVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBYT00gcmVnaW9uIDIgICAgICovCisjZGVmaW5lIFhPTVIzICAgM1VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFhPTSByZWdpb24gMyAgICAgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIElTUENUTCBjb25zdGFudCBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBJU19CT09UX0ZST01fTERST00gICAgICAweDFVTCAgICAgLyohPCBJU1BDVEwgc2V0dGluZyB0byBzZWxlY3QgdG8gYm9vdCBmcm9tIExEUk9NICovCisjZGVmaW5lIElTX0JPT1RfRlJPTV9BUFJPTSAgICAgIDB4MFVMICAgICAvKiE8IElTUENUTCBzZXR0aW5nIHRvIHNlbGVjdCB0byBib290IGZyb20gQVBST00gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIElTUENNRCBjb25zdGFudCBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBGTUNfSVNQQ01EX1JFQUQgICAgICAgICAweDAwVUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IFJlYWQgRmxhc2ggICAgICAgICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ01EX1JFQURfVUlEICAgICAweDA0VUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IFJlYWQgVW5pcXVlIElEICAgICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ01EX1JFQURfQUxMMSAgICAweDA4VUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IFJlYWQgYWxsLW9uZSByZXN1bHQgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ01EX1JFQURfQ0lEICAgICAweDBCVUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IFJlYWQgQ29tcGFueSBJRCAgICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ01EX1JFQURfRElEICAgICAweDBDVUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IFJlYWQgRGV2aWNlIElEICAgICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ01EX1JFQURfQ0tTICAgICAweDBEVUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IFJlYWQgQ2hlY2tzdW0gICAgICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ01EX1BST0dSQU0gICAgICAweDIxVUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IDMyLWJpdCBQcm9ncmFtIEZsYXNoICAgICAqLworI2RlZmluZSBGTUNfSVNQQ01EX1BBR0VfRVJBU0UgICAweDIyVUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IFBhZ2UgRXJhc2UgRmxhc2ggICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ01EX0JBTktfRVJBU0UgICAweDIzVUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IEVyYXNlIEZsYXNoIGJhbmsgMCBvciAxICovCisjZGVmaW5lIEZNQ19JU1BDTURfQkxPQ0tfRVJBU0UgIDB4MjVVTCAgICAgLyohPCBJU1AgQ29tbWFuZDogRXJhc2UgNCBwYWdlcyBhbGlnbm1lbnQgb2YgQVBST00gaW4gYmFuayAwIG9yIDEgICovCisjZGVmaW5lIEZNQ19JU1BDTURfUFJPR1JBTV9NVUwgIDB4MjdVTCAgICAgLyohPCBJU1AgQ29tbWFuZDogRmxhc2ggTXVsdGktV29yZCBQcm9ncmFtICovCisjZGVmaW5lIEZNQ19JU1BDTURfUlVOX0FMTDEgICAgIDB4MjhVTCAgICAgLyohPCBJU1AgQ29tbWFuZDogUnVuIGFsbC1vbmUgdmVyaWZpY2F0aW9uKi8KKyNkZWZpbmUgRk1DX0lTUENNRF9SVU5fQ0tTICAgICAgMHgyRFVMICAgICAvKiE8IElTUCBDb21tYW5kOiBSdW4gQ2hlY2sgQ2FsY3VsYXRpb24gICAgKi8KKyNkZWZpbmUgRk1DX0lTUENNRF9WRUNNQVAgICAgICAgMHgyRVVMICAgICAvKiE8IElTUCBDb21tYW5kOiBTZXQgdmVjdG9yIG1hcHBpbmcgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUENNRF9SRUFEXzY0ICAgICAgMHg0MFVMICAgICAvKiE8IElTUCBDb21tYW5kOiA2NC1iaXQgcmVhZCBGbGFzaCAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUENNRF9QUk9HUkFNXzY0ICAgMHg2MVVMICAgICAvKiE8IElTUCBDb21tYW5kOiA2NC1iaXQgcHJvZ3JhbSBGbGFzaCAgICAgKi8KKworI2RlZmluZSBSRUFEX0FMTE9ORV9ZRVMgICAgICAgICAweEExMUZGRkZGVUwgICAgLyohPCBDaGVjay1hbGwtb25lIHJlc3VsdCBpcyBhbGwgb25lLiAgICAgKi8KKyNkZWZpbmUgUkVBRF9BTExPTkVfTk9UICAgICAgICAgMHhBMTEwMDAwMFVMICAgIC8qITwgQ2hlY2stYWxsLW9uZSByZXN1bHQgaXMgbm90IGFsbCBvbmUuICovCisjZGVmaW5lIFJFQURfQUxMT05FX0NNRF9GQUlMICAgIDB4RkZGRkZGRkZVTCAgICAvKiE8IENoZWNrLWFsbC1vbmUgY29tbWFuZCBmYWlsZWQuICAgICAgICAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEZNQ19FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworLyoqIEBhZGR0b2dyb3VwIEZNQ19FWFBPUlRFRF9GVU5DVElPTlMgRk1DIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEZNQyBNYWNybyBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgKiBAYnJpZWYgICAgICBFbmFibGUgSVNQIEZ1bmN0aW9uCisgKgorICogQHBhcmFtICAgICAgTm9uZQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IElTUEVOIGJpdCBvZiBJU1BDVEwgY29udHJvbCByZWdpc3RlciB0byBlbmFibGUgSVNQIGZ1bmN0aW9uLgorICoKKyAqLworI2RlZmluZSBGTUNfRU5BQkxFX0lTUCgpICAgICAgICAgIChGTUMtPklTUENUTCB8PSAgRk1DX0lTUENUTF9JU1BFTl9Nc2spICAvKiE8IEVuYWJsZSBJU1AgRnVuY3Rpb24gICovCisKKy8qKgorICogQGJyaWVmICAgICAgRGlzYWJsZSBJU1AgRnVuY3Rpb24KKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBJU1BFTiBiaXQgb2YgSVNQQ1RMIGNvbnRyb2wgcmVnaXN0ZXIgdG8gZGlzYWJsZSBJU1AgZnVuY3Rpb24uCisgKgorICovCisjZGVmaW5lIEZNQ19ESVNBQkxFX0lTUCgpICAgICAgICAgKEZNQy0+SVNQQ1RMICY9IH5GTUNfSVNQQ1RMX0lTUEVOX01zaykgIC8qITwgRGlzYWJsZSBJU1AgRnVuY3Rpb24gKi8KKworLyoqCisgKiBAYnJpZWYgICAgICBFbmFibGUgTERST00gVXBkYXRlIEZ1bmN0aW9uCisgKgorICogQHBhcmFtICAgICAgTm9uZQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IExEVUVOIGJpdCBvZiBJU1BDVEwgY29udHJvbCByZWdpc3RlciB0byBlbmFibGUgTERST00gdXBkYXRlIGZ1bmN0aW9uLgorICogICAgICAgICAgICAgVXNlciBuZWVkcyB0byBzZXQgTERVRU4gYml0IGJlZm9yZSB0aGV5IGNhbiB1cGRhdGUgTERST00uCisgKgorICovCisjZGVmaW5lIEZNQ19FTkFCTEVfTERfVVBEQVRFKCkgICAgKEZNQy0+SVNQQ1RMIHw9ICBGTUNfSVNQQ1RMX0xEVUVOX01zaykgIC8qITwgRW5hYmxlIExEUk9NIFVwZGF0ZSBGdW5jdGlvbiAgICovCisKKy8qKgorICogQGJyaWVmICAgICAgRGlzYWJsZSBMRFJPTSBVcGRhdGUgRnVuY3Rpb24KKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgSVNQRU4gYml0IG9mIElTUENUTCBjb250cm9sIHJlZ2lzdGVyIHRvIGRpc2FibGUgTERST00gdXBkYXRlIGZ1bmN0aW9uLgorICoKKyAqLworI2RlZmluZSBGTUNfRElTQUJMRV9MRF9VUERBVEUoKSAgIChGTUMtPklTUENUTCAmPSB+Rk1DX0lTUENUTF9MRFVFTl9Nc2spICAvKiE8IERpc2FibGUgTERST00gVXBkYXRlIEZ1bmN0aW9uICAqLworCisvKioKKyAqIEBicmllZiAgICAgIEVuYWJsZSBVc2VyIENvbmZpZ3VyYXRpb24gVXBkYXRlIEZ1bmN0aW9uCisgKgorICogQHBhcmFtICAgICAgTm9uZQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IENGR1VFTiBiaXQgb2YgSVNQQ1RMIGNvbnRyb2wgcmVnaXN0ZXIgdG8gZW5hYmxlIFVzZXIgQ29uZmlndXJhdGlvbiB1cGRhdGUgZnVuY3Rpb24uCisgKiAgICAgICAgICAgICBVc2VyIG5lZWRzIHRvIHNldCBDRkdVRU4gYml0IGJlZm9yZSB0aGV5IGNhbiB1cGRhdGUgVXNlciBDb25maWd1cmF0aW9uIGFyZWEuCisgKgorICovCisjZGVmaW5lIEZNQ19FTkFCTEVfQ0ZHX1VQREFURSgpICAgKEZNQy0+SVNQQ1RMIHw9ICBGTUNfSVNQQ1RMX0NGR1VFTl9Nc2spIC8qITwgRW5hYmxlIENPTkZJRyBVcGRhdGUgRnVuY3Rpb24gICovCisKKy8qKgorICogQGJyaWVmICAgICAgRGlzYWJsZSBVc2VyIENvbmZpZ3VyYXRpb24gVXBkYXRlIEZ1bmN0aW9uCisgKgorICogQHBhcmFtICAgICAgTm9uZQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgQ0ZHVUVOIGJpdCBvZiBJU1BDVEwgY29udHJvbCByZWdpc3RlciB0byBkaXNhYmxlIFVzZXIgQ29uZmlndXJhdGlvbiB1cGRhdGUgZnVuY3Rpb24uCisgKgorICovCisjZGVmaW5lIEZNQ19ESVNBQkxFX0NGR19VUERBVEUoKSAgKEZNQy0+SVNQQ1RMICY9IH5GTUNfSVNQQ1RMX0NGR1VFTl9Nc2spIC8qITwgRGlzYWJsZSBDT05GSUcgVXBkYXRlIEZ1bmN0aW9uICovCisKKworLyoqCisgKiBAYnJpZWYgICAgICBFbmFibGUgQVBST00gVXBkYXRlIEZ1bmN0aW9uCisgKgorICogQHBhcmFtICAgICAgTm9uZQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IEFQVUVOIGJpdCBvZiBJU1BDVEwgY29udHJvbCByZWdpc3RlciB0byBlbmFibGUgQVBST00gdXBkYXRlIGZ1bmN0aW9uLgorICogICAgICAgICAgICAgVXNlciBuZWVkcyB0byBzZXQgQVBVRU4gYml0IGJlZm9yZSB0aGV5IGNhbiB1cGRhdGUgQVBST00gaW4gQVBST00gYm9vdCBtb2RlLgorICoKKyAqLworI2RlZmluZSBGTUNfRU5BQkxFX0FQX1VQREFURSgpICAgIChGTUMtPklTUENUTCB8PSAgRk1DX0lTUENUTF9BUFVFTl9Nc2spICAvKiE8IEVuYWJsZSBBUFJPTSBVcGRhdGUgRnVuY3Rpb24gICAqLworCisvKioKKyAqIEBicmllZiAgICAgIERpc2FibGUgQVBST00gVXBkYXRlIEZ1bmN0aW9uCisgKgorICogQHBhcmFtICAgICAgTm9uZQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgQVBVRU4gYml0IG9mIElTUENUTCBjb250cm9sIHJlZ2lzdGVyIHRvIGRpc2FibGUgQVBST00gdXBkYXRlIGZ1bmN0aW9uLgorICoKKyAqLworI2RlZmluZSBGTUNfRElTQUJMRV9BUF9VUERBVEUoKSAgIChGTUMtPklTUENUTCAmPSB+Rk1DX0lTUENUTF9BUFVFTl9Nc2spICAvKiE8IERpc2FibGUgQVBST00gVXBkYXRlIEZ1bmN0aW9uICAqLworCisvKioKKyAqIEBicmllZiAgICAgIFNldCBCb290IGZyb20gQVBST00KKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgc2VsZWN0IGJvb3RpbmcgZnJvbSBBUFJPTS4KKyAqCisgKi8KKyNkZWZpbmUgRk1DX1NFVF9BUFJPTV9CT09UKCkgICAgICAgIChGTUMtPklTUENUTCAmPSB+Rk1DX0lTUENUTF9CU19Nc2spICAgICAgICAgLyohPCBTZWxlY3QgYm9vdGluZyBmcm9tIEFQUk9NICAqLworCisvKioKKyAqIEBicmllZiAgICAgIFNldCBCb290IGZyb20gTERST00KKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgc2VsZWN0IGJvb3RpbmcgZnJvbSBMRFJPTS4KKyAqCisgKi8KKyNkZWZpbmUgRk1DX1NFVF9MRFJPTV9CT09UKCkgICAgICAgIChGTUMtPklTUENUTCB8PSBGTUNfSVNQQ1RMX0JTX01zaykgICAgICAgICAgLyohPCBTZWxlY3QgYm9vdGluZyBmcm9tIExEUk9NICAqLworCisvKioKKyAqIEBicmllZiAgICAgIEdldCBJU1AgRmFpbCBGbGFnCisgKgorICogQHBhcmFtICAgICAgTm9uZQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IElTUCBmYWlsIGZsYWcgd2hlbiBkbyBJU1AgYWN0b2luLgorICoKKyAqLworI2RlZmluZSBGTUNfR0VUX0ZBSUxfRkxBRygpICAgICAgICAgKChGTUMtPklTUENUTCAmIEZNQ19JU1BDVExfSVNQRkZfTXNrKSA/IDFVTCA6IDBVTCkgIC8qITwgR2V0IElTUCBmYWlsIGZsYWcgKi8KKworLyoqCisgKiBAYnJpZWYgICAgICBDbGVhciBJU1AgRmFpbCBGbGFnCisgKgorICogQHBhcmFtICAgICAgTm9uZQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgSVNQIGZhaWwgZmxhZyB3aGVuIElTUCBmYWlsIGZsYWcgc2V0LgorICoKKyAqLworI2RlZmluZSBGTUNfQ0xSX0ZBSUxfRkxBRygpICAgICAgICAgKEZNQy0+SVNQQ1RMIHw9IEZNQ19JU1BDVExfSVNQRkZfTXNrKSAgICAgICAvKiE8IENsZWFyIElTUCBmYWlsIGZsYWcgKi8KKworLyoqCisgKiBAYnJpZWYgICAgICBFbmFibGUgSVNQIEludGVycnVwdAorICoKKyAqIEBwYXJhbSAgICAgIE5vbmUKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZSBJU1AgYWN0aW9uIGludGVycnVwdC4KKyAqCisgKi8KKyNkZWZpbmUgRk1DX0VOQUJMRV9JU1BfSU5UKCkgICAgIChGTUMtPklTUENUTCB8PSAgRk1DX0lTUENUTF9JTlRFTl9Nc2spIC8qITwgRW5hYmxlIElTUCBpbnRlcnJ1cHQgKi8KKworLyoqCisgKiBAYnJpZWYgICAgICBEaXNhYmxlIElTUCBJbnRlcnJ1cHQKKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBkaXNhYmxlIElTUCBhY3Rpb24gaW50ZXJydXB0LgorICoKKyAqLworI2RlZmluZSBGTUNfRElTQUJMRV9JU1BfSU5UKCkgICAgIChGTUMtPklTUENUTCAmPSB+Rk1DX0lTUENUTF9JTlRFTl9Nc2spIC8qITwgRGlzYWJsZSBJU1AgaW50ZXJydXB0ICovCisKKworLyoqCisgKiBAYnJpZWYgICAgICBHZXQgSVNQIEludGVycnVwdCBGbGFnCisgKgorICogQHBhcmFtICAgICAgTm9uZQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IElTUCBhY3Rpb24gaW50ZXJydXB0IHN0YXR1cworICoKKyAqLworI2RlZmluZSBGTUNfR0VUX0lTUF9JTlRfRkxBRygpICAgICAoKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JTlRGTEFHX01zaykgPyAxVUwgOiAwVUwpIC8qITwgR2V0IElTUCBpbnRlcnJ1cHQgZmxhZyBTdGF0dXMgKi8KKworCisvKioKKyAqIEBicmllZiAgICAgIENsZWFyIElTUCBJbnRlcnJ1cHQgRmxhZworICoKKyAqIEBwYXJhbSAgICAgIE5vbmUKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIElTUCBpbnRlcnJ1cHQgZmxhZworICoKKyAqLworI2RlZmluZSBGTUNfQ0xFQVJfSVNQX0lOVF9GTEFHKCkgICAgIChGTUMtPklTUFNUUyA9IEZNQ19JU1BTVFNfSU5URkxBR19Nc2spIC8qITwgQ2xlYXIgSVNQIGludGVycnVwdCBmbGFnKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogaW5saW5lIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IEZNQ19SZWFkQ0lEKHZvaWQpOworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IEZNQ19SZWFkUElEKHZvaWQpOworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IEZNQ19SZWFkVUlEKHVpbnQ4X3QgdThJbmRleCk7CitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgRk1DX1JlYWRVQ0lEKHVpbnQzMl90IHUzMkluZGV4KTsKK19fU1RBVElDX0lOTElORSB2b2lkIEZNQ19TZXRWZWN0b3JQYWdlQWRkcih1aW50MzJfdCB1MzJQYWdlQWRkcik7CitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgRk1DX0dldFZFQ01BUCh2b2lkKTsKKworCisvKioKKyAqIEBicmllZiAgICAgICBHZXQgY3VycmVudCB2ZWN0b3IgbWFwcGluZyBhZGRyZXNzLgorICoKKyAqIEBwYXJhbSAgICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgIFRoZSBjdXJyZW50IHZlY3RvciBtYXBwaW5nIGFkZHJlc3MuCisgKgorICogQGRldGFpbHMgICAgIFRvIGdldCBWRUNNQVAgdmFsdWUgd2hpY2ggaXMgdGhlIHBhZ2UgYWRkcmVzcyBmb3IgcmVtYXBwaW5nIHRvIHZlY3RvciBwYWdlICgweDApLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IEZNQ19HZXRWRUNNQVAodm9pZCkKK3sKKyAgICByZXR1cm4gKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19WRUNNQVBfTXNrKTsKK30KKworLyoqCisgICogQGJyaWVmICAgIFJlYWQgY29tcGFueSBJRAorICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBUaGUgY29tcGFueSBJRCAoMzItYml0KQorICAqCisgICogQGRldGFpbHMgIFRoZSBjb21wYW55IElEIG9mIE51dm90b24gaXMgZml4ZWQgdG8gYmUgMHhEQQorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IEZNQ19SZWFkQ0lEKHZvaWQpCit7CisgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1JFQURfQ0lEOyAgICAgICAgICAgLyogU2V0IElTUCBDb21tYW5kIENvZGUgKi8KKyAgICBGTUMtPklTUEFERFIgPSAweDB1OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNdXN0IGtlZXAgMHgwIHdoZW4gcmVhZCBDSUQgKi8KKyAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOyAgICAgICAgICAvKiBUcmlnZ2VyIHRvIHN0YXJ0IElTUCBwcm9jZWR1cmUgKi8KKyNpZiBJU0JFTgorICAgIF9fSVNCKCk7CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVG8gbWFrZSBzdXJlIElTUC9DUFUgYmUgU3luY2hyb25pemVkICovCisgICAgd2hpbGUoRk1DLT5JU1BUUkcgJiBGTUNfSVNQVFJHX0lTUEdPX01zaykge30gLyogV2FpdGluZyBmb3IgSVNQIERvbmUgKi8KKworICAgIHJldHVybiBGTUMtPklTUERBVDsKK30KKworLyoqCisgICogQGJyaWVmICAgIFJlYWQgcHJvZHVjdCBJRAorICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBUaGUgcHJvZHVjdCBJRCAoMzItYml0KQorICAqCisgICogQGRldGFpbHMgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIHByb2R1Y3QgSUQuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgRk1DX1JlYWRQSUQodm9pZCkKK3sKKyAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUkVBRF9ESUQ7ICAgICAgICAgIC8qIFNldCBJU1AgQ29tbWFuZCBDb2RlICovCisgICAgRk1DLT5JU1BBRERSID0gMHgwNHU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBNdXN0IGtlZXAgMHg0IHdoZW4gcmVhZCBQSUQgKi8KKyAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOyAgICAgICAgIC8qIFRyaWdnZXIgdG8gc3RhcnQgSVNQIHByb2NlZHVyZSAqLworI2lmIElTQkVOCisgICAgX19JU0IoKTsKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvIG1ha2Ugc3VyZSBJU1AvQ1BVIGJlIFN5bmNocm9uaXplZCAqLworICAgIHdoaWxlKEZNQy0+SVNQVFJHICYgRk1DX0lTUFRSR19JU1BHT19Nc2spIHt9IC8qIFdhaXRpbmcgZm9yIElTUCBEb25lICovCisKKyAgICByZXR1cm4gRk1DLT5JU1BEQVQ7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIFJlYWQgVW5pcXVlIElECisgKgorICogQHBhcmFtW2luXSAgIHU4SW5kZXggIFVJRCBpbmRleC4gMCA9IFVJRFszMTowXSwgMSA9IFVJRFs2MzozMl0sIDIgPSBVSURbOTU6NjRdCisgKgorICogQHJldHVybiAgICAgIFRoZSAzMi1iaXQgdW5pcXVlIElEIGRhdGEgb2Ygc3BlY2lmaWVkIFVJRCBpbmRleC4KKyAqCisgKiBAZGV0YWlscyAgICAgVG8gcmVhZCBvdXQgOTYtYml0IFVuaXF1ZSBJRC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IEZNQ19SZWFkVUlEKHVpbnQ4X3QgdThJbmRleCkKK3sKKyAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUkVBRF9VSUQ7CisgICAgRk1DLT5JU1BBRERSID0gKCh1aW50MzJfdCl1OEluZGV4IDw8IDJ1KTsKKyAgICBGTUMtPklTUERBVCA9IDB1OworICAgIEZNQy0+SVNQVFJHID0gMHgxdTsKKyNpZiBJU0JFTgorICAgIF9fSVNCKCk7CisjZW5kaWYKKyAgICB3aGlsZShGTUMtPklTUFRSRykge30KKworICAgIHJldHVybiBGTUMtPklTUERBVDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgVG8gcmVhZCBVQ0lECisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJJbmRleCAgICBJbmRleCBvZiB0aGUgVUNJRCB0byByZWFkLiB1MzJJbmRleCBtdXN0IGJlIDAsIDEsIDIsIG9yIDMuCisgICoKKyAgKiBAcmV0dXJuICAgICBUaGUgVUNJRCBvZiBzcGVjaWZpZWQgaW5kZXgKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIHVuaXF1ZSBjaGlwIElEIChVQ0lEKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBGTUNfUmVhZFVDSUQodWludDMyX3QgdTMySW5kZXgpCit7CisgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1JFQURfVUlEOyAgICAgICAgICAgIC8qIFNldCBJU1AgQ29tbWFuZCBDb2RlICovCisgICAgRk1DLT5JU1BBRERSID0gKDB4MDR1ICogdTMySW5kZXgpICsgMHgxMHU7ICAgIC8qIFRoZSBVQ0lEIGlzIGF0IG9mZnNldCAweDEwIHdpdGggd29yZCBhbGlnbm1lbnQuICovCisgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsgICAgICAgICAgIC8qIFRyaWdnZXIgdG8gc3RhcnQgSVNQIHByb2NlZHVyZSAqLworI2lmIElTQkVOCisgICAgX19JU0IoKTsKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVG8gbWFrZSBzdXJlIElTUC9DUFUgYmUgU3luY2hyb25pemVkICovCisgICAgd2hpbGUoRk1DLT5JU1BUUkcgJiBGTUNfSVNQVFJHX0lTUEdPX01zaykge30gIC8qIFdhaXRpbmcgZm9yIElTUCBEb25lICovCisKKyAgICByZXR1cm4gRk1DLT5JU1BEQVQ7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCB2ZWN0b3IgbWFwcGluZyBhZGRyZXNzCisgKgorICogQHBhcmFtW2luXSAgIHUzMlBhZ2VBZGRyICBUaGUgcGFnZSBhZGRyZXNzIHRvIHJlbWFwIHRvIGFkZHJlc3MgMHgwLiBUaGUgYWRkcmVzcyBtdXN0IGJlIHBhZ2UgYWxpZ25tZW50LgorICoKKyAqIEByZXR1cm4gICAgICBUbyBzZXQgVkVDTUFQIHRvIHJlbWFwIHNwZWNpZmllZCBwYWdlIGFkZHJlc3MgdG8gMHgwLgorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IFZFQ01BUCB0byBtYXAgc3BlY2lmaWVkIHBhZ2UgdG8gdmVjdG9yIHBhZ2UgKDB4MCkuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIEZNQ19TZXRWZWN0b3JQYWdlQWRkcih1aW50MzJfdCB1MzJQYWdlQWRkcikKK3sKKyAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfVkVDTUFQOyAgLyogU2V0IElTUCBDb21tYW5kIENvZGUgKi8KKyAgICBGTUMtPklTUEFERFIgPSB1MzJQYWdlQWRkcjsgICAgICAgLyogVGhlIGFkZHJlc3Mgb2Ygc3BlY2lmaWVkIHBhZ2Ugd2hpY2ggd2lsbCBiZSBtYXAgdG8gYWRkcmVzcyAweDAuIEl0IG11c3QgYmUgcGFnZSBhbGlnbm1lbnQuICovCisgICAgRk1DLT5JU1BUUkcgPSAweDF1OyAgICAgICAgICAgICAgIC8qIFRyaWdnZXIgdG8gc3RhcnQgSVNQIHByb2NlZHVyZSAqLworI2lmIElTQkVOCisgICAgX19JU0IoKTsKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVG8gbWFrZSBzdXJlIElTUC9DUFUgYmUgU3luY2hyb25pemVkICovCisgICAgd2hpbGUoRk1DLT5JU1BUUkcpIHt9ICAgICAgICAgICAgIC8qIFdhaXRpbmcgZm9yIElTUCBEb25lICovCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBGdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZXh0ZXJuIHVpbnQzMl90ICBGTUNfQ2hlY2tBbGxPbmUodWludDMyX3QgdTMyYWRkciwgdWludDMyX3QgdTMyY291bnQpOworZXh0ZXJuIHZvaWQgRk1DX0Nsb3NlKHZvaWQpOworZXh0ZXJuIGludDMyX3QgRk1DX0NvbmZpZ1hPTSh1aW50MzJfdCB4b21fbnVtLCB1aW50MzJfdCB4b21fYmFzZSwgdWludDhfdCB4b21fcGFnZSk7CitleHRlcm4gaW50MzJfdCBGTUNfRXJhc2UodWludDMyX3QgdTMyUGFnZUFkZHIpOworZXh0ZXJuIGludDMyX3QgRk1DX0VyYXNlX0JhbmsodWludDMyX3QgdTMyQmFua0FkZHIpOworZXh0ZXJuIGludDMyX3QgRk1DX0VyYXNlX0Jsb2NrKHVpbnQzMl90IHUzMkJsb2NrQWRkcik7CitleHRlcm4gaW50MzJfdCBGTUNfRXJhc2VYT00odWludDMyX3QgeG9tX251bSk7CitleHRlcm4gaW50MzJfdCBGTUNfR2V0Qm9vdFNvdXJjZSh2b2lkKTsKK2V4dGVybiB1aW50MzJfdCAgRk1DX0dldENoa1N1bSh1aW50MzJfdCB1MzJhZGRyLCB1aW50MzJfdCB1MzJjb3VudCk7CitleHRlcm4gaW50MzJfdCBGTUNfSXNfT1RQX0xvY2tlZCh1aW50MzJfdCBvdHBfbnVtKTsKK2V4dGVybiBpbnQzMl90IEZNQ19HZXRYT01TdGF0ZSh1aW50MzJfdCB4b21fbnVtKTsKK2V4dGVybiBpbnQzMl90IEZNQ19Mb2NrX09UUCh1aW50MzJfdCBvdHBfbnVtKTsKK2V4dGVybiB2b2lkIEZNQ19PcGVuKHZvaWQpOworZXh0ZXJuIHVpbnQzMl90IEZNQ19SZWFkKHVpbnQzMl90IHUzMkFkZHIpOworZXh0ZXJuIGludDMyX3QgRk1DX1JlYWRfNjQodWludDMyX3QgdTMyYWRkciwgdWludDMyX3QgKiB1MzJkYXRhMCwgdWludDMyX3QgKiB1MzJkYXRhMSk7CitleHRlcm4gaW50MzJfdCBGTUNfUmVhZF9PVFAodWludDMyX3Qgb3RwX251bSwgdWludDMyX3QgKmxvd193b3JkLCB1aW50MzJfdCAqaGlnaF93b3JkKTsKK2V4dGVybiBpbnQzMl90IEZNQ19SZWFkQ29uZmlnKHVpbnQzMl90IHUzMkNvbmZpZ1tdLCB1aW50MzJfdCB1MzJDb3VudCk7CitleHRlcm4gdm9pZCBGTUNfU2V0Qm9vdFNvdXJjZShpbnQzMl90IGkzMkJvb3RTcmMpOworZXh0ZXJuIGludDMyX3QgIEZNQ19Db21wYXJlU1BLZXkodWludDMyX3Qga2V5WzNdKTsKK2V4dGVybiBpbnQzMl90ICBGTUNfU2V0U1BLZXkodWludDMyX3Qga2V5WzNdLCB1aW50MzJfdCBrcG1heCwgdWludDMyX3Qga2VtYXgsIGNvbnN0IGludDMyX3QgbG9ja19DT05GSUcsIGNvbnN0IGludDMyX3QgbG9ja19TUFJPTSk7CitleHRlcm4gdm9pZCBGTUNfV3JpdGUodWludDMyX3QgdTMyQWRkciwgdWludDMyX3QgdTMyRGF0YSk7CitleHRlcm4gaW50MzJfdCBGTUNfV3JpdGU4Qnl0ZXModWludDMyX3QgdTMyYWRkciwgdWludDMyX3QgdTMyZGF0YTAsIHVpbnQzMl90IHUzMmRhdGExKTsKK2V4dGVybiBpbnQzMl90IEZNQ19Xcml0ZUNvbmZpZyh1aW50MzJfdCBhdTMyQ29uZmlnW10sIHVpbnQzMl90IHUzMkNvdW50KTsKK2V4dGVybiBpbnQzMl90IEZNQ19Xcml0ZU11bHRpcGxlKHVpbnQzMl90IHUzMkFkZHIsIHVpbnQzMl90IHB1MzJCdWZbXSwgdWludDMyX3QgdTMyTGVuKTsKK2V4dGVybiBpbnQzMl90IEZNQ19Xcml0ZV9PVFAodWludDMyX3Qgb3RwX251bSwgdWludDMyX3QgbG93X3dvcmQsIHVpbnQzMl90IGhpZ2hfd29yZCk7CitleHRlcm4gaW50MzJfdCBGTUNfV3JpdGVNdWx0aXBsZUEodWludDMyX3QgdTMyQWRkciwgdWludDMyX3QgcHUzMkJ1ZltdLCB1aW50MzJfdCB1MzJMZW4pOworLypAfSovIC8qIGVuZCBvZiBncm91cCBGTUNfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRk1DX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19GTUNfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2dwaW8uaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWNjNmExCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZ3Bpby5oCkBAIC0wLDAgKzEsNzY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgR1BJTy5oCisgKiBAdmVyc2lvbiAgVjMuMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBHZW5lcmFsIFB1cnBvc2UgSS9PIChHUElPKSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19HUElPX0hfXworI2RlZmluZSBfX0dQSU9fSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBHUElPX0RyaXZlciBHUElPIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEdQSU9fRVhQT1JURURfQ09OU1RBTlRTIEdQSU8gRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisjZGVmaW5lIEdQSU9fUElOX01BWCAgICAgICAgICAgIDE2VUwgLyohPCBTcGVjaWZ5IE1heGltdW0gUGlucyBvZiBFYWNoIEdQSU8gUG9ydCAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBHUElPX01PREUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgR1BJT19NT0RFX0lOUFVUICAgICAgICAgIDB4MFVMIC8qITwgSW5wdXQgTW9kZSAqLworI2RlZmluZSBHUElPX01PREVfT1VUUFVUICAgICAgICAgMHgxVUwgLyohPCBPdXRwdXQgTW9kZSAqLworI2RlZmluZSBHUElPX01PREVfT1BFTl9EUkFJTiAgICAgMHgyVUwgLyohPCBPcGVuLURyYWluIE1vZGUgKi8KKyNkZWZpbmUgR1BJT19NT0RFX1FVQVNJICAgICAgICAgIDB4M1VMIC8qITwgUXVhc2ktYmlkaXJlY3Rpb25hbCBNb2RlICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEdQSU8gSW50ZXJydXB0IFR5cGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBHUElPX0lOVF9SSVNJTkcgICAgICAgICAweDAwMDEwMDAwVUwgLyohPCBJbnRlcnJ1cHQgZW5hYmxlIGJ5IElucHV0IFJpc2luZyBFZGdlICovCisjZGVmaW5lIEdQSU9fSU5UX0ZBTExJTkcgICAgICAgIDB4MDAwMDAwMDFVTCAvKiE8IEludGVycnVwdCBlbmFibGUgYnkgSW5wdXQgRmFsbGluZyBFZGdlICovCisjZGVmaW5lIEdQSU9fSU5UX0JPVEhfRURHRSAgICAgIDB4MDAwMTAwMDFVTCAvKiE8IEludGVycnVwdCBlbmFibGUgYnkgYm90aCBSaXNpbmcgRWRnZSBhbmQgRmFsbGluZyBFZGdlICovCisjZGVmaW5lIEdQSU9fSU5UX0hJR0ggICAgICAgICAgIDB4MDEwMTAwMDBVTCAvKiE8IEludGVycnVwdCBlbmFibGUgYnkgTGV2ZWwtSGlnaCAqLworI2RlZmluZSBHUElPX0lOVF9MT1cgICAgICAgICAgICAweDAxMDAwMDAxVUwgLyohPCBJbnRlcnJ1cHQgZW5hYmxlIGJ5IExldmVsLUxldmVsICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEdQSU9fSU5UVFlQRSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBHUElPX0lOVFRZUEVfRURHRSAgICAgICAgICAgMFVMIC8qITwgR1BJT19JTlRUWVBFIFNldHRpbmcgZm9yIEVkZ2UgVHJpZ2dlciBNb2RlICovCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9MRVZFTCAgICAgICAgICAxVUwgLyohPCBHUElPX0lOVFRZUEUgU2V0dGluZyBmb3IgRWRnZSBMZXZlbCBNb2RlICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEdQSU8gU2xldyBSYXRlIFR5cGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBHUElPX1NMRVdDVExfTk9STUFMICAgICAgICAgMHgwVUwgICAgICAgICAgIC8qITwgR1BJTyBzbGV3IHNldHRpbmcgZm9yIG5vcm1hbCBNb2RlICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9ISUdIICAgICAgICAgICAweDFVTCAgICAgICAgICAgLyohPCBHUElPIHNsZXcgc2V0dGluZyBmb3IgaGlnaCBNb2RlICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9GQVNUICAgICAgICAgICAweDJVTCAgICAgICAgICAgLyohPCBHUElPIHNsZXcgc2V0dGluZyBmb3IgZmFzdCBNb2RlICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEdQSU8gUHVsbC11cCBBbmQgUHVsbC1kb3duIFR5cGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBHUElPX1BVU0VMX0RJU0FCTEUgICAgICAgICAgMHgwVUwgICAgICAgICAgIC8qITwgR1BJTyBQVVNFTCBzZXR0aW5nIGZvciBEaXNhYmxlIE1vZGUgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVUxMX1VQICAgICAgICAgIDB4MVVMICAgICAgICAgICAvKiE8IEdQSU8gUFVTRUwgc2V0dGluZyBmb3IgUHVsbC11cCBNb2RlICovCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVMTF9ET1dOICAgICAgICAweDJVTCAgICAgICAgICAgLyohPCBHUElPIFBVU0VMIHNldHRpbmcgZm9yIFB1bGwtZG93biBNb2RlICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEdQSU9fREJDVEwgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBHUElPX0RCQ1RMX0lDTEtfT04gICAgICAgICAgICAweDAwMDAwMDIwVUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIGFsbCBJTyBwaW5zIGVkZ2UgZGV0ZWN0aW9uIGNpcmN1aXQgaXMgYWx3YXlzIGFjdGl2ZSBhZnRlciByZXNldCAqLworI2RlZmluZSBHUElPX0RCQ1RMX0lDTEtfT0ZGICAgICAgICAgICAweDAwMDAwMDAwVUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIGVkZ2UgZGV0ZWN0aW9uIGNpcmN1aXQgaXMgYWN0aXZlIG9ubHkgaWYgSU8gcGluIGNvcnJlc3BvbmRpbmcgR1BJT3hfSUVOIGJpdCBpcyBzZXQgdG8gMSAqLworCisjZGVmaW5lIEdQSU9fREJDVExfREJDTEtTUkNfTElSQyAgICAgIDB4MDAwMDAwMTBVTCAvKiE8IEdQSU9fREJDVEwgc2V0dGluZyBmb3IgZGUtYm91bmNlIGNvdW50ZXIgY2xvY2sgc291cmNlIGlzIHRoZSBpbnRlcm5hbCAxMCBrSHogKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NSQ19IQ0xLICAgICAgMHgwMDAwMDAwMFVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBkZS1ib3VuY2UgY291bnRlciBjbG9jayBzb3VyY2UgaXMgdGhlIEhDTEsgKi8KKworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMXzEgICAgICAgICAweDAwMDAwMDAwVUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIHNhbXBsaW5nIGN5Y2xlID0gMSBjbG9ja3MgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF8yICAgICAgICAgMHgwMDAwMDAwMVVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBzYW1wbGluZyBjeWNsZSA9IDIgY2xvY2tzICovCisjZGVmaW5lIEdQSU9fREJDVExfREJDTEtTRUxfNCAgICAgICAgIDB4MDAwMDAwMDJVTCAvKiE8IEdQSU9fREJDVEwgc2V0dGluZyBmb3Igc2FtcGxpbmcgY3ljbGUgPSA0IGNsb2NrcyAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMXzggICAgICAgICAweDAwMDAwMDAzVUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIHNhbXBsaW5nIGN5Y2xlID0gOCBjbG9ja3MgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF8xNiAgICAgICAgMHgwMDAwMDAwNFVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBzYW1wbGluZyBjeWNsZSA9IDE2IGNsb2NrcyAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMXzMyICAgICAgICAweDAwMDAwMDA1VUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIHNhbXBsaW5nIGN5Y2xlID0gMzIgY2xvY2tzICovCisjZGVmaW5lIEdQSU9fREJDVExfREJDTEtTRUxfNjQgICAgICAgIDB4MDAwMDAwMDZVTCAvKiE8IEdQSU9fREJDVEwgc2V0dGluZyBmb3Igc2FtcGxpbmcgY3ljbGUgPSA2NCBjbG9ja3MgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF8xMjggICAgICAgMHgwMDAwMDAwN1VMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBzYW1wbGluZyBjeWNsZSA9IDEyOCBjbG9ja3MgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF8yNTYgICAgICAgMHgwMDAwMDAwOFVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBzYW1wbGluZyBjeWNsZSA9IDI1NiBjbG9ja3MgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF81MTIgICAgICAgMHgwMDAwMDAwOVVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBzYW1wbGluZyBjeWNsZSA9IDUxMiBjbG9ja3MgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF8xMDI0ICAgICAgMHgwMDAwMDAwQVVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBzYW1wbGluZyBjeWNsZSA9IDEwMjQgY2xvY2tzICovCisjZGVmaW5lIEdQSU9fREJDVExfREJDTEtTRUxfMjA0OCAgICAgIDB4MDAwMDAwMEJVTCAvKiE8IEdQSU9fREJDVEwgc2V0dGluZyBmb3Igc2FtcGxpbmcgY3ljbGUgPSAyMDQ4IGNsb2NrcyAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMXzQwOTYgICAgICAweDAwMDAwMDBDVUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIHNhbXBsaW5nIGN5Y2xlID0gNDA5NiBjbG9ja3MgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF84MTkyICAgICAgMHgwMDAwMDAwRFVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBzYW1wbGluZyBjeWNsZSA9IDgxOTIgY2xvY2tzICovCisjZGVmaW5lIEdQSU9fREJDVExfREJDTEtTRUxfMTYzODQgICAgIDB4MDAwMDAwMEVVTCAvKiE8IEdQSU9fREJDVEwgc2V0dGluZyBmb3Igc2FtcGxpbmcgY3ljbGUgPSAxNjM4NCBjbG9ja3MgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF8zMjc2OCAgICAgMHgwMDAwMDAwRlVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBzYW1wbGluZyBjeWNsZSA9IDMyNzY4IGNsb2NrcyAqLworCisKKy8qKiBEZWZpbmUgR1BJTyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQuIEl0IGNvdWxkIGJlIHVzZWQgdG8gY29udHJvbCBlYWNoIEkvTyBwaW4gYnkgcGluIGFkZHJlc3MgbWFwcGluZy4KKyAqICBFeGFtcGxlIDE6CisgKgorICogICAgICBQQTAgPSAxOworICoKKyAqICBJdCBpcyB1c2VkIHRvIHNldCBQQS4wIHRvIGhpZ2g7CisgKgorICogIEV4YW1wbGUgMjoKKyAqCisgKiAgICAgIGlmIChQQTApCisgKiAgICAgICAgICBQQTAgPSAwOworICoKKyAqICBJZiBQQS4wIHBpbiBzdGF0dXMgaXMgaGlnaCwgdGhlbiBzZXQgUEEuMCBkYXRhIG91dHB1dCB0byBsb3cuCisgKi8KKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCkgJiYgKFNDVV9JTklUX0lPTlNTRVRfVkFMICYgQklUMCApCisjIGRlZmluZSBQQV9QSU5fREFUQShwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFK05TX09GRlNFVCsoMHg0MCoocG9ydCkpKSArICgocGluKTw8MikpKSkKKyNlbHNlCisjIGRlZmluZSBQQV9QSU5fREFUQShwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2VuZGlmCisjZGVmaW5lIFBBMCAgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCAwICkgLyohPCBTcGVjaWZ5IFBBLjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMSAgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCAxICkgLyohPCBTcGVjaWZ5IFBBLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMiAgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCAyICkgLyohPCBTcGVjaWZ5IFBBLjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMyAgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCAzICkgLyohPCBTcGVjaWZ5IFBBLjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBNCAgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCA0ICkgLyohPCBTcGVjaWZ5IFBBLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBNSAgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCA1ICkgLyohPCBTcGVjaWZ5IFBBLjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBNiAgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCA2ICkgLyohPCBTcGVjaWZ5IFBBLjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBNyAgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCA3ICkgLyohPCBTcGVjaWZ5IFBBLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBOCAgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCA4ICkgLyohPCBTcGVjaWZ5IFBBLjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBOSAgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCA5ICkgLyohPCBTcGVjaWZ5IFBBLjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTAgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCAxMCkgLyohPCBTcGVjaWZ5IFBBLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTExICAgICAgICAgICAgUEFfUElOX0RBVEEoMCwgMTEpIC8qITwgU3BlY2lmeSBQQS4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExMiAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDEyKSAvKiE8IFNwZWNpZnkgUEEuMTIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTMgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCAxMykgLyohPCBTcGVjaWZ5IFBBLjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTE0ICAgICAgICAgICAgUEFfUElOX0RBVEEoMCwgMTQpIC8qITwgU3BlY2lmeSBQQS4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExNSAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDE1KSAvKiE8IFNwZWNpZnkgUEEuMTUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCkgJiYgKFNDVV9JTklUX0lPTlNTRVRfVkFMICYgQklUMSApCisjIGRlZmluZSBQQl9QSU5fREFUQShwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFK05TX09GRlNFVCsoMHg0MCoocG9ydCkpKSArICgocGluKTw8MikpKSkKKyNlbHNlCisjIGRlZmluZSBQQl9QSU5fREFUQShwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2VuZGlmCisjZGVmaW5lIFBCMCAgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCAwICkgLyohPCBTcGVjaWZ5IFBCLjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMSAgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCAxICkgLyohPCBTcGVjaWZ5IFBCLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMiAgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCAyICkgLyohPCBTcGVjaWZ5IFBCLjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMyAgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCAzICkgLyohPCBTcGVjaWZ5IFBCLjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCNCAgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCA0ICkgLyohPCBTcGVjaWZ5IFBCLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCNSAgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCA1ICkgLyohPCBTcGVjaWZ5IFBCLjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCNiAgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCA2ICkgLyohPCBTcGVjaWZ5IFBCLjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCNyAgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCA3ICkgLyohPCBTcGVjaWZ5IFBCLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCOCAgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCA4ICkgLyohPCBTcGVjaWZ5IFBCLjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCOSAgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCA5ICkgLyohPCBTcGVjaWZ5IFBCLjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMTAgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCAxMCkgLyohPCBTcGVjaWZ5IFBCLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjExICAgICAgICAgICAgUEJfUElOX0RBVEEoMSwgMTEpIC8qITwgU3BlY2lmeSBQQi4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxMiAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDEyKSAvKiE8IFNwZWNpZnkgUEIuMTIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMTMgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCAxMykgLyohPCBTcGVjaWZ5IFBCLjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjE0ICAgICAgICAgICAgUEJfUElOX0RBVEEoMSwgMTQpIC8qITwgU3BlY2lmeSBQQi4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxNSAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDE1KSAvKiE8IFNwZWNpZnkgUEIuMTUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCkgJiYgKFNDVV9JTklUX0lPTlNTRVRfVkFMICYgQklUMiApCisjIGRlZmluZSBQQ19QSU5fREFUQShwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFK05TX09GRlNFVCsoMHg0MCoocG9ydCkpKSArICgocGluKTw8MikpKSkKKyNlbHNlCisjIGRlZmluZSBQQ19QSU5fREFUQShwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2VuZGlmCisjZGVmaW5lIFBDMCAgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCAwICkgLyohPCBTcGVjaWZ5IFBDLjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMSAgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCAxICkgLyohPCBTcGVjaWZ5IFBDLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMiAgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCAyICkgLyohPCBTcGVjaWZ5IFBDLjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMyAgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCAzICkgLyohPCBTcGVjaWZ5IFBDLjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDNCAgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCA0ICkgLyohPCBTcGVjaWZ5IFBDLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDNSAgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCA1ICkgLyohPCBTcGVjaWZ5IFBDLjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDNiAgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCA2ICkgLyohPCBTcGVjaWZ5IFBDLjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDNyAgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCA3ICkgLyohPCBTcGVjaWZ5IFBDLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDOCAgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCA4ICkgLyohPCBTcGVjaWZ5IFBDLjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDOSAgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCA5ICkgLyohPCBTcGVjaWZ5IFBDLjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMTAgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCAxMCkgLyohPCBTcGVjaWZ5IFBDLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzExICAgICAgICAgICAgUENfUElOX0RBVEEoMiwgMTEpIC8qITwgU3BlY2lmeSBQQy4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMxMiAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDEyKSAvKiE8IFNwZWNpZnkgUEMuMTIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMTMgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCAxMykgLyohPCBTcGVjaWZ5IFBDLjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfSU9OU1NFVF9WQUwpICYmIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCAmIEJJVDMgKQorIyBkZWZpbmUgUERfUElOX0RBVEEocG9ydCwgcGluKSAgICAoKigodm9sYXRpbGUgdWludDMyX3QgKikoKEdQSU9fUElOX0RBVEFfQkFTRStOU19PRkZTRVQrKDB4NDAqKHBvcnQpKSkgKyAoKHBpbik8PDIpKSkpCisjZWxzZQorIyBkZWZpbmUgUERfUElOX0RBVEEocG9ydCwgcGluKSAgICAoKigodm9sYXRpbGUgdWludDMyX3QgKikoKEdQSU9fUElOX0RBVEFfQkFTRSsoMHg0MCoocG9ydCkpKSArICgocGluKTw8MikpKSkKKyNlbmRpZgorI2RlZmluZSBQRDAgICAgICAgICAgICAgUERfUElOX0RBVEEoMywgMCApIC8qITwgU3BlY2lmeSBQRC4wIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDEgICAgICAgICAgICAgUERfUElOX0RBVEEoMywgMSApIC8qITwgU3BlY2lmeSBQRC4xIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDIgICAgICAgICAgICAgUERfUElOX0RBVEEoMywgMiApIC8qITwgU3BlY2lmeSBQRC4yIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDMgICAgICAgICAgICAgUERfUElOX0RBVEEoMywgMyApIC8qITwgU3BlY2lmeSBQRC4zIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDQgICAgICAgICAgICAgUERfUElOX0RBVEEoMywgNCApIC8qITwgU3BlY2lmeSBQRC40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDUgICAgICAgICAgICAgUERfUElOX0RBVEEoMywgNSApIC8qITwgU3BlY2lmeSBQRC41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDYgICAgICAgICAgICAgUERfUElOX0RBVEEoMywgNiApIC8qITwgU3BlY2lmeSBQRC42IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDcgICAgICAgICAgICAgUERfUElOX0RBVEEoMywgNyApIC8qITwgU3BlY2lmeSBQRC43IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDggICAgICAgICAgICAgUERfUElOX0RBVEEoMywgOCApIC8qITwgU3BlY2lmeSBQRC44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDkgICAgICAgICAgICAgUERfUElOX0RBVEEoMywgOSApIC8qITwgU3BlY2lmeSBQRC45IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDEwICAgICAgICAgICAgUERfUElOX0RBVEEoMywgMTApIC8qITwgU3BlY2lmeSBQRC4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxMSAgICAgICAgICAgIFBEX1BJTl9EQVRBKDMsIDExKSAvKiE8IFNwZWNpZnkgUEQuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMTIgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCAxMikgLyohPCBTcGVjaWZ5IFBELjEyIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDEzICAgICAgICAgICAgUERfUElOX0RBVEEoMywgMTMpIC8qITwgU3BlY2lmeSBQRC4xMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxNCAgICAgICAgICAgIFBEX1BJTl9EQVRBKDMsIDE0KSAvKiE8IFNwZWNpZnkgUEQuMTQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCkgJiYgKFNDVV9JTklUX0lPTlNTRVRfVkFMICYgQklUNCApCisjIGRlZmluZSBQRV9QSU5fREFUQShwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFK05TX09GRlNFVCsoMHg0MCoocG9ydCkpKSArICgocGluKTw8MikpKSkKKyNlbHNlCisjIGRlZmluZSBQRV9QSU5fREFUQShwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2VuZGlmCisjZGVmaW5lIFBFMCAgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCAwICkgLyohPCBTcGVjaWZ5IFBFLjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMSAgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCAxICkgLyohPCBTcGVjaWZ5IFBFLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMiAgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCAyICkgLyohPCBTcGVjaWZ5IFBFLjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMyAgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCAzICkgLyohPCBTcGVjaWZ5IFBFLjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFNCAgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCA0ICkgLyohPCBTcGVjaWZ5IFBFLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFNSAgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCA1ICkgLyohPCBTcGVjaWZ5IFBFLjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFNiAgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCA2ICkgLyohPCBTcGVjaWZ5IFBFLjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFNyAgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCA3ICkgLyohPCBTcGVjaWZ5IFBFLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFOCAgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCA4ICkgLyohPCBTcGVjaWZ5IFBFLjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFOSAgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCA5ICkgLyohPCBTcGVjaWZ5IFBFLjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMTAgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCAxMCkgLyohPCBTcGVjaWZ5IFBFLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTExICAgICAgICAgICAgUEVfUElOX0RBVEEoNCwgMTEpIC8qITwgU3BlY2lmeSBQRS4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxMiAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDEyKSAvKiE8IFNwZWNpZnkgUEUuMTIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMTMgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCAxMykgLyohPCBTcGVjaWZ5IFBFLjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTE0ICAgICAgICAgICAgUEVfUElOX0RBVEEoNCwgMTQpIC8qITwgU3BlY2lmeSBQRS4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxNSAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDE1KSAvKiE8IFNwZWNpZnkgUEUuMTUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCkgJiYgKFNDVV9JTklUX0lPTlNTRVRfVkFMICYgQklUNSApCisjIGRlZmluZSBQRl9QSU5fREFUQShwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFK05TX09GRlNFVCsoMHg0MCoocG9ydCkpKSArICgocGluKTw8MikpKSkKKyNlbHNlCisjIGRlZmluZSBQRl9QSU5fREFUQShwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2VuZGlmCisjZGVmaW5lIFBGMCAgICAgICAgICAgICBQRl9QSU5fREFUQSg1LCAwICkgLyohPCBTcGVjaWZ5IFBGLjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGMSAgICAgICAgICAgICBQRl9QSU5fREFUQSg1LCAxICkgLyohPCBTcGVjaWZ5IFBGLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGMiAgICAgICAgICAgICBQRl9QSU5fREFUQSg1LCAyICkgLyohPCBTcGVjaWZ5IFBGLjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGMyAgICAgICAgICAgICBQRl9QSU5fREFUQSg1LCAzICkgLyohPCBTcGVjaWZ5IFBGLjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGNCAgICAgICAgICAgICBQRl9QSU5fREFUQSg1LCA0ICkgLyohPCBTcGVjaWZ5IFBGLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGNSAgICAgICAgICAgICBQRl9QSU5fREFUQSg1LCA1ICkgLyohPCBTcGVjaWZ5IFBGLjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGNiAgICAgICAgICAgICBQRl9QSU5fREFUQSg1LCA2ICkgLyohPCBTcGVjaWZ5IFBGLjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGNyAgICAgICAgICAgICBQRl9QSU5fREFUQSg1LCA3ICkgLyohPCBTcGVjaWZ5IFBGLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGOCAgICAgICAgICAgICBQRl9QSU5fREFUQSg1LCA4ICkgLyohPCBTcGVjaWZ5IFBGLjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGOSAgICAgICAgICAgICBQRl9QSU5fREFUQSg1LCA5ICkgLyohPCBTcGVjaWZ5IFBGLjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGMTAgICAgICAgICAgICBQRl9QSU5fREFUQSg1LCAxMCkgLyohPCBTcGVjaWZ5IFBGLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjExICAgICAgICAgICAgUEZfUElOX0RBVEEoNSwgMTEpIC8qITwgU3BlY2lmeSBQRi4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKworI2lmIGRlZmluZWQgKFNDVV9JTklUX0lPTlNTRVRfVkFMKSAmJiAoU0NVX0lOSVRfSU9OU1NFVF9WQUwgJiBCSVQ2ICkKKyMgZGVmaW5lIFBHX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrTlNfT0ZGU0VUKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2Vsc2UKKyMgZGVmaW5lIFBHX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrKDB4NDAqKHBvcnQpKSkgKyAoKHBpbik8PDIpKSkpCisjZW5kaWYKKyNkZWZpbmUgUEcyICAgICAgICAgICAgIFBHX1BJTl9EQVRBKDYsIDIgKSAvKiE8IFNwZWNpZnkgUEcuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEczICAgICAgICAgICAgIFBHX1BJTl9EQVRBKDYsIDMgKSAvKiE8IFNwZWNpZnkgUEcuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEc0ICAgICAgICAgICAgIFBHX1BJTl9EQVRBKDYsIDQgKSAvKiE8IFNwZWNpZnkgUEcuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEc5ICAgICAgICAgICAgIFBHX1BJTl9EQVRBKDYsIDkgKSAvKiE8IFNwZWNpZnkgUEcuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxMCAgICAgICAgICAgIFBHX1BJTl9EQVRBKDYsIDEwKSAvKiE8IFNwZWNpZnkgUEcuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTEgICAgICAgICAgICBQR19QSU5fREFUQSg2LCAxMSkgLyohPCBTcGVjaWZ5IFBHLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzEyICAgICAgICAgICAgUEdfUElOX0RBVEEoNiwgMTIpIC8qITwgU3BlY2lmeSBQRy4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxMyAgICAgICAgICAgIFBHX1BJTl9EQVRBKDYsIDEzKSAvKiE8IFNwZWNpZnkgUEcuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTQgICAgICAgICAgICBQR19QSU5fREFUQSg2LCAxNCkgLyohPCBTcGVjaWZ5IFBHLjE0IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzE1ICAgICAgICAgICAgUEdfUElOX0RBVEEoNiwgMTUpIC8qITwgU3BlY2lmeSBQRy4xNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKworI2lmIGRlZmluZWQgKFNDVV9JTklUX0lPTlNTRVRfVkFMKSAmJiAoU0NVX0lOSVRfSU9OU1NFVF9WQUwgJiBCSVQ3ICkKKyMgZGVmaW5lIFBIX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrTlNfT0ZGU0VUKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2Vsc2UKKyMgZGVmaW5lIFBIX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrKDB4NDAqKHBvcnQpKSkgKyAoKHBpbik8PDIpKSkpCisjZW5kaWYKKyNkZWZpbmUgUEg0ICAgICAgICAgICAgIFBIX1BJTl9EQVRBKDcsIDQgKSAvKiE8IFNwZWNpZnkgUEguNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg1ICAgICAgICAgICAgIFBIX1BJTl9EQVRBKDcsIDUgKSAvKiE8IFNwZWNpZnkgUEguNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg2ICAgICAgICAgICAgIFBIX1BJTl9EQVRBKDcsIDYgKSAvKiE8IFNwZWNpZnkgUEguNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg3ICAgICAgICAgICAgIFBIX1BJTl9EQVRBKDcsIDcgKSAvKiE8IFNwZWNpZnkgUEguNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg4ICAgICAgICAgICAgIFBIX1BJTl9EQVRBKDcsIDggKSAvKiE8IFNwZWNpZnkgUEguOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg5ICAgICAgICAgICAgIFBIX1BJTl9EQVRBKDcsIDkgKSAvKiE8IFNwZWNpZnkgUEguOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEgxMCAgICAgICAgICAgIFBIX1BJTl9EQVRBKDcsIDEwKSAvKiE8IFNwZWNpZnkgUEguMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBIMTEgICAgICAgICAgICBQSF9QSU5fREFUQSg3LCAxMSkgLyohPCBTcGVjaWZ5IFBILjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworCisvKiBHUElPIGJpdCBkZWZpbml0aW9ucyBmb3Igc2VjdXJlICovCisjZGVmaW5lIEdQSU9fUElOX0RBVEFfUyhwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2RlZmluZSBQQTBfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygwLCAwICkgLyohPCBTcGVjaWZ5IFBBLjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDEgKSAvKiE8IFNwZWNpZnkgUEEuMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEEyX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMCwgMiApIC8qITwgU3BlY2lmeSBQQS4yIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTNfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygwLCAzICkgLyohPCBTcGVjaWZ5IFBBLjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBNF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDQgKSAvKiE8IFNwZWNpZnkgUEEuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE1X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMCwgNSApIC8qITwgU3BlY2lmeSBQQS41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTZfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygwLCA2ICkgLyohPCBTcGVjaWZ5IFBBLjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBN19TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDcgKSAvKiE8IFNwZWNpZnkgUEEuNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE4X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMCwgOCApIC8qITwgU3BlY2lmeSBQQS44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTlfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygwLCA5ICkgLyohPCBTcGVjaWZ5IFBBLjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTBfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDEwKSAvKiE8IFNwZWNpZnkgUEEuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTFfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDExKSAvKiE8IFNwZWNpZnkgUEEuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTJfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDEyKSAvKiE8IFNwZWNpZnkgUEEuMTIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTNfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDEzKSAvKiE8IFNwZWNpZnkgUEEuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTRfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDE0KSAvKiE8IFNwZWNpZnkgUEEuMTQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTVfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDE1KSAvKiE8IFNwZWNpZnkgUEEuMTUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDEsIDAgKSAvKiE8IFNwZWNpZnkgUEIuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgMSApIC8qITwgU3BlY2lmeSBQQi4xIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjJfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygxLCAyICkgLyohPCBTcGVjaWZ5IFBCLjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCM19TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDEsIDMgKSAvKiE8IFNwZWNpZnkgUEIuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI0X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgNCApIC8qITwgU3BlY2lmeSBQQi40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjVfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygxLCA1ICkgLyohPCBTcGVjaWZ5IFBCLjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCNl9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDEsIDYgKSAvKiE8IFNwZWNpZnkgUEIuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI3X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgNyApIC8qITwgU3BlY2lmeSBQQi43IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjhfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygxLCA4ICkgLyohPCBTcGVjaWZ5IFBCLjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCOV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDEsIDkgKSAvKiE8IFNwZWNpZnkgUEIuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxMF9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgMTApIC8qITwgU3BlY2lmeSBQQi4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxMV9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgMTEpIC8qITwgU3BlY2lmeSBQQi4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxMl9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgMTIpIC8qITwgU3BlY2lmeSBQQi4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxM19TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgMTMpIC8qITwgU3BlY2lmeSBQQi4xMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxNF9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgMTQpIC8qITwgU3BlY2lmeSBQQi4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxNV9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgMTUpIC8qITwgU3BlY2lmeSBQQi4xNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMwX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMiwgMCApIC8qITwgU3BlY2lmeSBQQy4wIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzFfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygyLCAxICkgLyohPCBTcGVjaWZ5IFBDLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMl9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDIsIDIgKSAvKiE8IFNwZWNpZnkgUEMuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMzX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMiwgMyApIC8qITwgU3BlY2lmeSBQQy4zIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzRfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygyLCA0ICkgLyohPCBTcGVjaWZ5IFBDLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDNV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDIsIDUgKSAvKiE8IFNwZWNpZnkgUEMuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM2X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMiwgNiApIC8qITwgU3BlY2lmeSBQQy42IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzdfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygyLCA3ICkgLyohPCBTcGVjaWZ5IFBDLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDOF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDIsIDggKSAvKiE8IFNwZWNpZnkgUEMuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM5X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMiwgOSApIC8qITwgU3BlY2lmeSBQQy45IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzEwX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygyLCAxMCkgLyohPCBTcGVjaWZ5IFBDLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzExX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygyLCAxMSkgLyohPCBTcGVjaWZ5IFBDLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzEyX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygyLCAxMikgLyohPCBTcGVjaWZ5IFBDLjEyIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzEzX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygyLCAxMykgLyohPCBTcGVjaWZ5IFBDLjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDBfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygzLCAwICkgLyohPCBTcGVjaWZ5IFBELjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDMsIDEgKSAvKiE8IFNwZWNpZnkgUEQuMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQyX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMywgMiApIC8qITwgU3BlY2lmeSBQRC4yIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDNfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygzLCAzICkgLyohPCBTcGVjaWZ5IFBELjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBENF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDMsIDQgKSAvKiE8IFNwZWNpZnkgUEQuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQ1X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMywgNSApIC8qITwgU3BlY2lmeSBQRC41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDZfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygzLCA2ICkgLyohPCBTcGVjaWZ5IFBELjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEN19TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDMsIDcgKSAvKiE8IFNwZWNpZnkgUEQuNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQ4X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMywgOCApIC8qITwgU3BlY2lmeSBQRC44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDlfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygzLCA5ICkgLyohPCBTcGVjaWZ5IFBELjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMTBfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDMsIDEwKSAvKiE8IFNwZWNpZnkgUEQuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMTFfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDMsIDExKSAvKiE8IFNwZWNpZnkgUEQuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMTJfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDMsIDEyKSAvKiE8IFNwZWNpZnkgUEQuMTIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMTNfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDMsIDEzKSAvKiE8IFNwZWNpZnkgUEQuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMTRfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDMsIDE0KSAvKiE8IFNwZWNpZnkgUEQuMTQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDQsIDAgKSAvKiE8IFNwZWNpZnkgUEUuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgMSApIC8qITwgU3BlY2lmeSBQRS4xIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTJfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg0LCAyICkgLyohPCBTcGVjaWZ5IFBFLjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFM19TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDQsIDMgKSAvKiE8IFNwZWNpZnkgUEUuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU0X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgNCApIC8qITwgU3BlY2lmeSBQRS40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTVfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg0LCA1ICkgLyohPCBTcGVjaWZ5IFBFLjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFNl9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDQsIDYgKSAvKiE8IFNwZWNpZnkgUEUuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU3X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgNyApIC8qITwgU3BlY2lmeSBQRS43IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRThfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg0LCA4ICkgLyohPCBTcGVjaWZ5IFBFLjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFOV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDQsIDkgKSAvKiE8IFNwZWNpZnkgUEUuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxMF9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgMTApIC8qITwgU3BlY2lmeSBQRS4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxMV9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgMTEpIC8qITwgU3BlY2lmeSBQRS4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxMl9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgMTIpIC8qITwgU3BlY2lmeSBQRS4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxM19TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgMTMpIC8qITwgU3BlY2lmeSBQRS4xMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxNF9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgMTQpIC8qITwgU3BlY2lmeSBQRS4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxNV9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgMTUpIC8qITwgU3BlY2lmeSBQRS4xNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEYwX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNSwgMCApIC8qITwgU3BlY2lmeSBQRi4wIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjFfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg1LCAxICkgLyohPCBTcGVjaWZ5IFBGLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGMl9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDUsIDIgKSAvKiE8IFNwZWNpZnkgUEYuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEYzX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNSwgMyApIC8qITwgU3BlY2lmeSBQRi4zIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjRfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg1LCA0ICkgLyohPCBTcGVjaWZ5IFBGLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGNV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDUsIDUgKSAvKiE8IFNwZWNpZnkgUEYuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY2X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNSwgNiApIC8qITwgU3BlY2lmeSBQRi42IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjdfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg1LCA3ICkgLyohPCBTcGVjaWZ5IFBGLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGOF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDUsIDggKSAvKiE8IFNwZWNpZnkgUEYuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY5X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNSwgOSApIC8qITwgU3BlY2lmeSBQRi45IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjEwX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg1LCAxMCkgLyohPCBTcGVjaWZ5IFBGLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjExX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg1LCAxMSkgLyohPCBTcGVjaWZ5IFBGLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzJfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg2LCAyICkgLyohPCBTcGVjaWZ5IFBHLjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHM19TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDYsIDMgKSAvKiE8IFNwZWNpZnkgUEcuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEc0X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNiwgNCApIC8qITwgU3BlY2lmeSBQRy40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzlfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg2LCA5ICkgLyohPCBTcGVjaWZ5IFBHLjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTBfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDYsIDEwKSAvKiE8IFNwZWNpZnkgUEcuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTFfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDYsIDExKSAvKiE8IFNwZWNpZnkgUEcuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTJfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDYsIDEyKSAvKiE8IFNwZWNpZnkgUEcuMTIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTNfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDYsIDEzKSAvKiE8IFNwZWNpZnkgUEcuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTRfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDYsIDE0KSAvKiE8IFNwZWNpZnkgUEcuMTQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTVfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDYsIDE1KSAvKiE8IFNwZWNpZnkgUEcuMTUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBINF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDcsIDQgKSAvKiE8IFNwZWNpZnkgUEguNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg1X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNywgNSApIC8qITwgU3BlY2lmeSBQSC41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDZfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg3LCA2ICkgLyohPCBTcGVjaWZ5IFBILjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBIN19TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDcsIDcgKSAvKiE8IFNwZWNpZnkgUEguNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg4X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNywgOCApIC8qITwgU3BlY2lmeSBQSC44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDlfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg3LCA5ICkgLyohPCBTcGVjaWZ5IFBILjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBIMTBfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDcsIDEwKSAvKiE8IFNwZWNpZnkgUEguMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBIMTFfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDcsIDExKSAvKiE8IFNwZWNpZnkgUEguMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisKKy8qIEdQSU8gYml0IGRlZmluaXRpb25zIGZvciBub24tc2VjdXJlICovCisjZGVmaW5lIEdQSU9fUElOX0RBVEFfTlMocG9ydCwgcGluKSAgICAoKigodm9sYXRpbGUgdWludDMyX3QgKikoKEdQSU9fUElOX0RBVEFfQkFTRStOU19PRkZTRVQrKDB4NDAqKHBvcnQpKSkgKyAoKHBpbik8PDIpKSkpCisjZGVmaW5lIFBBMF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMCwgMCApIC8qITwgU3BlY2lmeSBQQS4wIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTFfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDAsIDEgKSAvKiE8IFNwZWNpZnkgUEEuMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEEyX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygwLCAyICkgLyohPCBTcGVjaWZ5IFBBLjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBM19OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMCwgMyApIC8qITwgU3BlY2lmeSBQQS4zIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTRfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDAsIDQgKSAvKiE8IFNwZWNpZnkgUEEuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE1X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygwLCA1ICkgLyohPCBTcGVjaWZ5IFBBLjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBNl9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMCwgNiApIC8qITwgU3BlY2lmeSBQQS42IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTdfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDAsIDcgKSAvKiE8IFNwZWNpZnkgUEEuNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE4X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygwLCA4ICkgLyohPCBTcGVjaWZ5IFBBLjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBOV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMCwgOSApIC8qITwgU3BlY2lmeSBQQS45IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTEwX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDAsIDEwKSAvKiE8IFNwZWNpZnkgUEEuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTFfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMCwgMTEpIC8qITwgU3BlY2lmeSBQQS4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExMl9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygwLCAxMikgLyohPCBTcGVjaWZ5IFBBLjEyIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTEzX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDAsIDEzKSAvKiE8IFNwZWNpZnkgUEEuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTRfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMCwgMTQpIC8qITwgU3BlY2lmeSBQQS4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExNV9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygwLCAxNSkgLyohPCBTcGVjaWZ5IFBBLjE1IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjBfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDEsIDAgKSAvKiE8IFNwZWNpZnkgUEIuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygxLCAxICkgLyohPCBTcGVjaWZ5IFBCLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMl9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMSwgMiApIC8qITwgU3BlY2lmeSBQQi4yIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjNfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDEsIDMgKSAvKiE8IFNwZWNpZnkgUEIuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI0X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygxLCA0ICkgLyohPCBTcGVjaWZ5IFBCLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCNV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMSwgNSApIC8qITwgU3BlY2lmeSBQQi41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjZfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDEsIDYgKSAvKiE8IFNwZWNpZnkgUEIuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI3X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygxLCA3ICkgLyohPCBTcGVjaWZ5IFBCLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCOF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMSwgOCApIC8qITwgU3BlY2lmeSBQQi44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjlfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDEsIDkgKSAvKiE8IFNwZWNpZnkgUEIuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxMF9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygxLCAxMCkgLyohPCBTcGVjaWZ5IFBCLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjExX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDEsIDExKSAvKiE8IFNwZWNpZnkgUEIuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMTJfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMSwgMTIpIC8qITwgU3BlY2lmeSBQQi4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxM19OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygxLCAxMykgLyohPCBTcGVjaWZ5IFBCLjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjE0X05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDEsIDE0KSAvKiE8IFNwZWNpZnkgUEIuMTQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMTVfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMSwgMTUpIC8qITwgU3BlY2lmeSBQQi4xNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMwX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygyLCAwICkgLyohPCBTcGVjaWZ5IFBDLjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMiwgMSApIC8qITwgU3BlY2lmeSBQQy4xIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzJfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDIsIDIgKSAvKiE8IFNwZWNpZnkgUEMuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMzX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygyLCAzICkgLyohPCBTcGVjaWZ5IFBDLjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDNF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMiwgNCApIC8qITwgU3BlY2lmeSBQQy40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzVfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDIsIDUgKSAvKiE8IFNwZWNpZnkgUEMuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM2X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygyLCA2ICkgLyohPCBTcGVjaWZ5IFBDLjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDN19OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMiwgNyApIC8qITwgU3BlY2lmeSBQQy43IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzhfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDIsIDggKSAvKiE8IFNwZWNpZnkgUEMuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM5X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygyLCA5ICkgLyohPCBTcGVjaWZ5IFBDLjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMTBfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMiwgMTApIC8qITwgU3BlY2lmeSBQQy4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMxMV9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygyLCAxMSkgLyohPCBTcGVjaWZ5IFBDLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzEyX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDIsIDEyKSAvKiE8IFNwZWNpZnkgUEMuMTIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMTNfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMiwgMTMpIC8qITwgU3BlY2lmeSBQQy4xMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQwX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygzLCAwICkgLyohPCBTcGVjaWZ5IFBELjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMywgMSApIC8qITwgU3BlY2lmeSBQRC4xIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDJfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDMsIDIgKSAvKiE8IFNwZWNpZnkgUEQuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQzX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygzLCAzICkgLyohPCBTcGVjaWZ5IFBELjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBENF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMywgNCApIC8qITwgU3BlY2lmeSBQRC40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDVfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDMsIDUgKSAvKiE8IFNwZWNpZnkgUEQuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQ2X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygzLCA2ICkgLyohPCBTcGVjaWZ5IFBELjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEN19OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMywgNyApIC8qITwgU3BlY2lmeSBQRC43IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDhfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDMsIDggKSAvKiE8IFNwZWNpZnkgUEQuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQ5X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygzLCA5ICkgLyohPCBTcGVjaWZ5IFBELjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMTBfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMywgMTApIC8qITwgU3BlY2lmeSBQRC4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxMV9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygzLCAxMSkgLyohPCBTcGVjaWZ5IFBELjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDEyX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDMsIDEyKSAvKiE8IFNwZWNpZnkgUEQuMTIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMTNfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMywgMTMpIC8qITwgU3BlY2lmeSBQRC4xMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxNF9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygzLCAxNCkgLyohPCBTcGVjaWZ5IFBELjE0IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTBfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDQsIDAgKSAvKiE8IFNwZWNpZnkgUEUuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg0LCAxICkgLyohPCBTcGVjaWZ5IFBFLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMl9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNCwgMiApIC8qITwgU3BlY2lmeSBQRS4yIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTNfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDQsIDMgKSAvKiE8IFNwZWNpZnkgUEUuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU0X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg0LCA0ICkgLyohPCBTcGVjaWZ5IFBFLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFNV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNCwgNSApIC8qITwgU3BlY2lmeSBQRS41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTZfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDQsIDYgKSAvKiE8IFNwZWNpZnkgUEUuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU3X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg0LCA3ICkgLyohPCBTcGVjaWZ5IFBFLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFOF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNCwgOCApIC8qITwgU3BlY2lmeSBQRS44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTlfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDQsIDkgKSAvKiE8IFNwZWNpZnkgUEUuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxMF9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg0LCAxMCkgLyohPCBTcGVjaWZ5IFBFLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTExX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDQsIDExKSAvKiE8IFNwZWNpZnkgUEUuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMTJfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNCwgMTIpIC8qITwgU3BlY2lmeSBQRS4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxM19OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg0LCAxMykgLyohPCBTcGVjaWZ5IFBFLjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTE0X05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDQsIDE0KSAvKiE8IFNwZWNpZnkgUEUuMTQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMTVfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNCwgMTUpIC8qITwgU3BlY2lmeSBQRS4xNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEYwX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg1LCAwICkgLyohPCBTcGVjaWZ5IFBGLjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGMV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNSwgMSApIC8qITwgU3BlY2lmeSBQRi4xIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjJfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDUsIDIgKSAvKiE8IFNwZWNpZnkgUEYuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEYzX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg1LCAzICkgLyohPCBTcGVjaWZ5IFBGLjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGNF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNSwgNCApIC8qITwgU3BlY2lmeSBQRi40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjVfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDUsIDUgKSAvKiE8IFNwZWNpZnkgUEYuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY2X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg1LCA2ICkgLyohPCBTcGVjaWZ5IFBGLjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGN19OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNSwgNyApIC8qITwgU3BlY2lmeSBQRi43IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjhfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDUsIDggKSAvKiE8IFNwZWNpZnkgUEYuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY5X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg1LCA5ICkgLyohPCBTcGVjaWZ5IFBGLjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGMTBfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNSwgMTApIC8qITwgU3BlY2lmeSBQRi4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEYxMV9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg1LCAxMSkgLyohPCBTcGVjaWZ5IFBGLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzJfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDYsIDIgKSAvKiE8IFNwZWNpZnkgUEcuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEczX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg2LCAzICkgLyohPCBTcGVjaWZ5IFBHLjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHNF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNiwgNCApIC8qITwgU3BlY2lmeSBQRy40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzlfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDYsIDkgKSAvKiE8IFNwZWNpZnkgUEcuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxMF9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg2LCAxMCkgLyohPCBTcGVjaWZ5IFBHLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzExX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDYsIDExKSAvKiE8IFNwZWNpZnkgUEcuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTJfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNiwgMTIpIC8qITwgU3BlY2lmeSBQRy4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxM19OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg2LCAxMykgLyohPCBTcGVjaWZ5IFBHLjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzE0X05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDYsIDE0KSAvKiE8IFNwZWNpZnkgUEcuMTQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTVfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNiwgMTUpIC8qITwgU3BlY2lmeSBQRy4xNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg0X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg3LCA0ICkgLyohPCBTcGVjaWZ5IFBILjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBINV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNywgNSApIC8qITwgU3BlY2lmeSBQSC41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDZfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDcsIDYgKSAvKiE8IFNwZWNpZnkgUEguNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg3X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg3LCA3ICkgLyohPCBTcGVjaWZ5IFBILjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBIOF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNywgOCApIC8qITwgU3BlY2lmeSBQSC44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDlfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDcsIDkgKSAvKiE8IFNwZWNpZnkgUEguOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEgxMF9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg3LCAxMCkgLyohPCBTcGVjaWZ5IFBILjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDExX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDcsIDExKSAvKiE8IFNwZWNpZnkgUEguMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgR1BJT19FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgR1BJT19FWFBPUlRFRF9GVU5DVElPTlMgR1BJTyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICogQGJyaWVmICAgICAgIENsZWFyIEdQSU8gUGluIEludGVycnVwdCBGbGFnCisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgUEEsIFBCLCBQQywgUEQsIFBFLCBQRiwgUEcgb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyUGluTWFzayAgVGhlIHNpbmdsZSBvciBtdWx0aXBsZSBwaW5zIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE1IGZvciBQQSwgUEIsIFBDLCBQRCBhbmQgUEYuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDEzIGZvciBQRS4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQxIH4gQklUNSwgQklUNyB+IEJJVDEyIGZvciBQRy4KKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBDbGVhciB0aGUgaW50ZXJydXB0IHN0YXR1cyBvZiBzcGVjaWZpZWQgR1BJTyBwaW4uCisgKi8KKyNkZWZpbmUgR1BJT19DTFJfSU5UX0ZMQUcocG9ydCwgdTMyUGluTWFzaykgICAgICAgICAoKHBvcnQpLT5JTlRTUkMgPSAodTMyUGluTWFzaykpCisKKy8qKgorICogQGJyaWVmICAgICAgIERpc2FibGUgUGluIERlLWJvdW5jZSBGdW5jdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMlBpbk1hc2sgIFRoZSBzaW5nbGUgb3IgbXVsdGlwbGUgcGlucyBvZiBzcGVjaWZpZWQgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNSBmb3IgUEEsIFBCIGFuZCBQRS4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTMgZm9yIFBDLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNCBmb3IgUEQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDExIGZvciBQRi4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQyIH4gQklUMywgQklUOSB+IEJJVDE1IGZvciBQRy4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQ0IH4gQklUMTEgZm9yIFBILgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIERpc2FibGUgdGhlIGludGVycnVwdCBkZS1ib3VuY2UgZnVuY3Rpb24gb2Ygc3BlY2lmaWVkIEdQSU8gcGluLgorICovCisjZGVmaW5lIEdQSU9fRElTQUJMRV9ERUJPVU5DRShwb3J0LCB1MzJQaW5NYXNrKSAgICAgKChwb3J0KS0+REJFTiAmPSB+KHUzMlBpbk1hc2spKQorCisvKioKKyAqIEBicmllZiAgICAgICBFbmFibGUgUGluIERlLWJvdW5jZSBGdW5jdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMlBpbk1hc2sgIFRoZSBzaW5nbGUgb3IgbXVsdGlwbGUgcGlucyBvZiBzcGVjaWZpZWQgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNSBmb3IgUEEsIFBCIGFuZCBQRS4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTMgZm9yIFBDLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNCBmb3IgUEQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDExIGZvciBQRi4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQyIH4gQklUMywgQklUOSB+IEJJVDE1IGZvciBQRy4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQ0IH4gQklUMTEgZm9yIFBILgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgRW5hYmxlIHRoZSBpbnRlcnJ1cHQgZGUtYm91bmNlIGZ1bmN0aW9uIG9mIHNwZWNpZmllZCBHUElPIHBpbi4KKyAqLworI2RlZmluZSBHUElPX0VOQUJMRV9ERUJPVU5DRShwb3J0LCB1MzJQaW5NYXNrKSAgICAgICgocG9ydCktPkRCRU4gfD0gKHUzMlBpbk1hc2spKQorCisvKioKKyAqIEBicmllZiAgICAgICBEaXNhYmxlIEkvTyBEaWdpdGFsIElucHV0IFBhdGgKKyAqCisgKiBAcGFyYW1baW5dICAgcG9ydCAgICAgICAgR1BJTyBwb3J0LiBJdCBjb3VsZCBiZSBQQSwgUEIsIFBDLCBQRCwgUEUsIFBGLCBQRyBvciBQSC4KKyAqIEBwYXJhbVtpbl0gICB1MzJQaW5NYXNrICBUaGUgc2luZ2xlIG9yIG11bHRpcGxlIHBpbnMgb2Ygc3BlY2lmaWVkIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTUgZm9yIFBBLCBQQiBhbmQgUEUuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDEzIGZvciBQQy4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTQgZm9yIFBELiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMSBmb3IgUEYuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMiB+IEJJVDMsIEJJVDkgfiBCSVQxNSBmb3IgUEcuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUNCB+IEJJVDExIGZvciBQSC4KKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBEaXNhYmxlIEkvTyBkaWdpdGFsIGlucHV0IHBhdGggb2Ygc3BlY2lmaWVkIEdQSU8gcGluLgorICovCisjZGVmaW5lIEdQSU9fRElTQUJMRV9ESUdJVEFMX1BBVEgocG9ydCwgdTMyUGluTWFzaykgKChwb3J0KS0+RElOT0ZGIHw9ICgodTMyUGluTWFzayk8PDE2KSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgRW5hYmxlIEkvTyBEaWdpdGFsIElucHV0IFBhdGgKKyAqCisgKiBAcGFyYW1baW5dICAgcG9ydCAgICAgICAgR1BJTyBwb3J0LiBJdCBjb3VsZCBiZSBQQSwgUEIsIFBDLCBQRCwgUEUsIFBGLCBQRyBvciBQSC4KKyAqIEBwYXJhbVtpbl0gICB1MzJQaW5NYXNrICBUaGUgc2luZ2xlIG9yIG11bHRpcGxlIHBpbnMgb2Ygc3BlY2lmaWVkIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTUgZm9yIFBBLCBQQiBhbmQgUEUuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDEzIGZvciBQQy4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTQgZm9yIFBELiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMSBmb3IgUEYuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMiB+IEJJVDMsIEJJVDkgfiBCSVQxNSBmb3IgUEcuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUNCB+IEJJVDExIGZvciBQSC4KKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBFbmFibGUgSS9PIGRpZ2l0YWwgaW5wdXQgcGF0aCBvZiBzcGVjaWZpZWQgR1BJTyBwaW4uCisgKi8KKyNkZWZpbmUgR1BJT19FTkFCTEVfRElHSVRBTF9QQVRIKHBvcnQsIHUzMlBpbk1hc2spICAoKHBvcnQpLT5ESU5PRkYgJj0gfigodTMyUGluTWFzayk8PDE2KSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgRGlzYWJsZSBJL08gRE9VVCBtYXNrCisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgUEEsIFBCLCBQQywgUEQsIFBFLCBQRiwgUEcgb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyUGluTWFzayAgVGhlIHNpbmdsZSBvciBtdWx0aXBsZSBwaW5zIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE1IGZvciBQQSwgUEIgYW5kIFBFLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMyBmb3IgUEMuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE0IGZvciBQRC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTEgZm9yIFBGLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDIgfiBCSVQzLCBCSVQ5IH4gQklUMTUgZm9yIFBHLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDQgfiBCSVQxMSBmb3IgUEguCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgRGlzYWJsZSBJL08gRE9VVCBtYXNrIG9mIHNwZWNpZmllZCBHUElPIHBpbi4KKyAqLworI2RlZmluZSBHUElPX0RJU0FCTEVfRE9VVF9NQVNLKHBvcnQsIHUzMlBpbk1hc2spICAgICgocG9ydCktPkRBVE1TSyAmPSB+KHUzMlBpbk1hc2spKQorCisvKioKKyAqIEBicmllZiAgICAgICBFbmFibGUgSS9PIERPVVQgbWFzaworICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMlBpbk1hc2sgIFRoZSBzaW5nbGUgb3IgbXVsdGlwbGUgcGlucyBvZiBzcGVjaWZpZWQgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNSBmb3IgUEEsIFBCIGFuZCBQRS4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTMgZm9yIFBDLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNCBmb3IgUEQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDExIGZvciBQRi4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQyIH4gQklUMywgQklUOSB+IEJJVDE1IGZvciBQRy4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQ0IH4gQklUMTEgZm9yIFBILgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIEVuYWJsZSBJL08gRE9VVCBtYXNrIG9mIHNwZWNpZmllZCBHUElPIHBpbi4KKyAqLworI2RlZmluZSBHUElPX0VOQUJMRV9ET1VUX01BU0socG9ydCwgdTMyUGluTWFzaykgKChwb3J0KS0+REFUTVNLIHw9ICh1MzJQaW5NYXNrKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgR2V0IEdQSU8gUGluIEludGVycnVwdCBGbGFnCisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgUEEsIFBCLCBQQywgUEQsIFBFLCBQRiwgUEcgb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyUGluTWFzayAgVGhlIHNpbmdsZSBvciBtdWx0aXBsZSBwaW5zIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE1IGZvciBQQSwgUEIgYW5kIFBFLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMyBmb3IgUEMuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE0IGZvciBQRC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTEgZm9yIFBGLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDIgfiBCSVQzLCBCSVQ5IH4gQklUMTUgZm9yIFBHLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDQgfiBCSVQxMSBmb3IgUEguCisgKgorICogQHJldHZhbCAgICAgIDAgICAgICAgICAgIE5vIGludGVycnVwdCBhdCBzcGVjaWZpZWQgR1BJTyBwaW4KKyAqIEByZXR2YWwgICAgICAxICAgICAgICAgICBUaGUgc3BlY2lmaWVkIEdQSU8gcGluIGdlbmVyYXRlIGFuIGludGVycnVwdAorICoKKyAqIEBkZXRhaWxzICAgICBHZXQgdGhlIGludGVycnVwdCBzdGF0dXMgb2Ygc3BlY2lmaWVkIEdQSU8gcGluLgorICovCisjZGVmaW5lIEdQSU9fR0VUX0lOVF9GTEFHKHBvcnQsIHUzMlBpbk1hc2spICAgICAoKHBvcnQpLT5JTlRTUkMgJiAodTMyUGluTWFzaykpCisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgVGltZQorICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMkNsa1NyYyAgIFRoZSBkZS1ib3VuY2UgY291bnRlciBjbG9jayBzb3VyY2UuIEl0IGNvdWxkIGJlIEdQSU9fREJDVExfREJDTEtTUkNfSENMSyBvciBHUElPX0RCQ1RMX0RCQ0xLU1JDX0xJUkMuCisgKiBAcGFyYW1baW5dICAgdTMyQ2xrU2VsICAgVGhlIGRlLWJvdW5jZSBzYW1wbGluZyBjeWNsZSBzZWxlY3Rpb24uIEl0IGNvdWxkIGJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF8xCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF8yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF80CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF84CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF8xNgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fREJDVExfREJDTEtTRUxfMzIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzY0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF8xMjgKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzI1NgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fREJDVExfREJDTEtTRUxfNTEyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF8xMDI0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF8yMDQ4CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF80MDk2CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF84MTkyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF8xNjM4NAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fREJDVExfREJDTEtTRUxfMzI3NjgKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBTZXQgdGhlIGludGVycnVwdCBkZS1ib3VuY2Ugc2FtcGxpbmcgY3ljbGUgdGltZSBiYXNlZCBvbiB0aGUgZGVib3VuY2UgY291bnRlciBjbG9jayBzb3VyY2UuIFxuCisgKiAgICAgICAgICAgICAgRXhhbXBsZTogX0dQSU9fU0VUX0RFQk9VTkNFX1RJTUUoUEEsIEdQSU9fREJDVExfREJDTEtTUkNfTElSQywgR1BJT19EQkNUTF9EQkNMS1NFTF80KS4gXG4KKyAqICAgICAgICAgICAgICBJdCdzIG1lYW5pbmcgdGhlIERlLWRlYm91bmNlIGNvdW50ZXIgY2xvY2sgc291cmNlIGlzIGludGVybmFsIDEwIEtIeiBhbmQgc2FtcGxpbmcgY3ljbGUgc2VsZWN0aW9uIGlzIDQuIFxuCisgKiAgICAgICAgICAgICAgVGhlbiB0aGUgdGFyZ2V0IGRlLWJvdW5jZSBzYW1wbGluZyBjeWNsZSB0aW1lIGlzICg0KSooMS8oMTAqMTAwMCkpIHMgPSA0KjAuMDAwMSBzID0gNDAwIHVzLAorICogICAgICAgICAgICAgIGFuZCBzeXN0ZW0gd2lsbCBzYW1wbGluZyBpbnRlcnJ1cHQgaW5wdXQgb25jZSBwZXIgNDAwIHVzLgorICovCisjZGVmaW5lIEdQSU9fU0VUX0RFQk9VTkNFX1RJTUUocG9ydCwgdTMyQ2xrU3JjLCB1MzJDbGtTZWwpICAgICgocG9ydCktPkRCQ1RMID0gKEdQSU9fREJDVExfSUNMS09OX01zayB8ICh1MzJDbGtTcmMpIHwgKHUzMkNsa1NlbCkpKQorCisvKioKKyAqIEBicmllZiAgICAgICBHZXQgR1BJTyBQb3J0IElOIERhdGEKKyAqCisgKiBAcGFyYW1baW5dICAgcG9ydCAgICAgICAgR1BJTyBwb3J0LiBJdCBjb3VsZCBiZSBQQSwgUEIsIFBDLCBQRCwgUEUsIFBGLCBQRyBvciBQSC4KKyAqCisgKiBAcmV0dXJuICAgICAgVGhlIHNwZWNpZmllZCBwb3J0IGRhdGEKKyAqCisgKiBAZGV0YWlscyAgICAgR2V0IHRoZSBQSU4gcmVnaXN0ZXIgb2Ygc3BlY2lmaWVkIEdQSU8gcG9ydC4KKyAqLworI2RlZmluZSBHUElPX0dFVF9JTl9EQVRBKHBvcnQpICAoKHBvcnQpLT5QSU4pCisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBHUElPIFBvcnQgT1VUIERhdGEKKyAqCisgKiBAcGFyYW1baW5dICAgcG9ydCAgICAgICAgR1BJTyBwb3J0LiBJdCBjb3VsZCBiZSBQQSwgUEIsIFBDLCBQRCwgUEUsIFBGLCBQRyBvciBQSC4KKyAqIEBwYXJhbVtpbl0gICB1MzJEYXRhICAgICBHUElPIHBvcnQgZGF0YS4KKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBTZXQgdGhlIERhdGEgaW50byBzcGVjaWZpZWQgR1BJTyBwb3J0LgorICovCisjZGVmaW5lIEdQSU9fU0VUX09VVF9EQVRBKHBvcnQsIHUzMkRhdGEpICAgICgocG9ydCktPkRPVVQgPSAodTMyRGF0YSkpCisKKy8qKgorICogQGJyaWVmICAgICAgIFRvZ2dsZSBTcGVjaWZpZWQgR1BJTyBwaW4KKyAqCisgKiBAcGFyYW1baW5dICAgdTMyUGluICAgICAgUHh5CisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVG9nZ2xlIHRoZSBzcGVjaWZpZWQgR1BJTyBwaW50LgorICovCisjZGVmaW5lIEdQSU9fVE9HR0xFKHUzMlBpbikgKCh1MzJQaW4pIF49IDEpCisKKworLyoqCisgKiBAYnJpZWYgICAgICAgRW5hYmxlIEV4dGVybmFsIEdQSU8gaW50ZXJydXB0CisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMlBpbiAgICAgICAgICBUaGUgcGluIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDAgfiAxNSBmb3IgUEEsIFBCIGFuZCBQRS4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMCB+IDEzIGZvciBQQyBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDAgfiAxNCBmb3IgUEQgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSAwIH4gMTEgZm9yIFBGIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMiB+IDQsIDkgfiAxNSBmb3IgUEcgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSA0IH4gMTEgZm9yIFBIIEdQSU8gcG9ydC4KKyAqIEBwYXJhbVtpbl0gICB1MzJJbnRBdHRyaWJzICAgVGhlIGludGVycnVwdCBhdHRyaWJ1dGUgb2Ygc3BlY2lmaWVkIEdQSU8gcGluLiBJdCBjb3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19JTlRfUklTSU5HCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0lOVF9GQUxMSU5HCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0lOVF9CT1RIX0VER0UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fSU5UX0hJR0gKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fSU5UX0xPVworICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgc3BlY2lmaWVkIEdQSU8gcGluIGludGVycnVwdC4KKyAqLworI2RlZmluZSBHUElPX0VuYWJsZUVJTlQgICAgIEdQSU9fRW5hYmxlSW50CisKKy8qKgorICogQGJyaWVmICAgICAgIERpc2FibGUgRXh0ZXJuYWwgR1BJTyBpbnRlcnJ1cHQKKyAqCisgKiBAcGFyYW1baW5dICAgcG9ydCAgICAgICAgR1BJTyBwb3J0LiBJdCBjb3VsZCBiZSBQQSwgUEIsIFBDLCBQRCwgUEUsIFBGLCBQRyBvciBQSC4KKyAqIEBwYXJhbVtpbl0gICB1MzJQaW4gICAgICBUaGUgcGluIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMCB+IDE1IGZvciBQQSwgUEIgYW5kIFBFLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDAgfiAxMyBmb3IgUEMgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDAgfiAxNCBmb3IgUEQgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDAgfiAxMSBmb3IgUEYgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDIgfiA0LCA5IH4gMTUgZm9yIFBHIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSA0IH4gMTEgZm9yIFBIIEdQSU8gcG9ydC4KKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHNwZWNpZmllZCBHUElPIHBpbiBpbnRlcnJ1cHQuCisgKi8KKyNkZWZpbmUgR1BJT19EaXNhYmxlRUlOVCAgICBHUElPX0Rpc2FibGVJbnQKKworCit2b2lkIEdQSU9fU2V0TW9kZShHUElPX1QgKnBvcnQsIHVpbnQzMl90IHUzMlBpbk1hc2ssIHVpbnQzMl90IHUzMk1vZGUpOwordm9pZCBHUElPX0VuYWJsZUludChHUElPX1QgKnBvcnQsIHVpbnQzMl90IHUzMlBpbiwgdWludDMyX3QgdTMySW50QXR0cmlicyk7Cit2b2lkIEdQSU9fRGlzYWJsZUludChHUElPX1QgKnBvcnQsIHVpbnQzMl90IHUzMlBpbik7Cit2b2lkIEdQSU9fU2V0U2xld0N0bChHUElPX1QgKnBvcnQsIHVpbnQzMl90IHUzMlBpbk1hc2ssIHVpbnQzMl90IHUzMk1vZGUpOwordm9pZCBHUElPX1NldFB1bGxDdGwoR1BJT19UICpwb3J0LCB1aW50MzJfdCB1MzJQaW5NYXNrLCB1aW50MzJfdCB1MzJNb2RlKTsKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEdQSU9fRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgR1BJT19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fR1BJT19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvaGRpdi5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvaGRpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjNjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9oZGl2LmgKQEAgLTAsMCArMSw4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGhkaXYuaAorICogQHZlcnNpb24gIFYzLjAKKyAqICRSZXZpc2lvbjogMSAkCisgKiAkRGF0ZTogMTYvMDcvMDcgNzo1MHAgJAorICogQGJyaWVmICAgIE0wNTY0IHNlcmllcyBIYXJkd2FyZSBEaXZpZGVyKEhESVYpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0hESVZfSF9fCisjZGVmaW5lIF9fSERJVl9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEhESVZfRHJpdmVyIEhESVYgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgSERJVl9FWFBPUlRFRF9GVU5DVElPTlMgSERJViBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICogQGJyaWVmICAgICAgRGl2aXNpb24gZnVuY3Rpb24gdG8gY2FsY3VsYXRlICh4L3kpCisgKgorICogQHBhcmFtW2luXSAgeCB0aGUgZGl2aWRlbmQgb2YgdGhlIGRpdmlzaW9uCisgKiBAcGFyYW1baW5dICB5IHRoZSBkaXZpc29yIG9mIHRoZSBkaXZpc2lvbgorICoKKyAqIEByZXR1cm4gICAgIFRoZSByZXN1bHQgb2YgKHgveSkKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGlzIGEgZGl2aXNpb24gZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHgveQorICoKKyAqLworc3RhdGljIF9fSU5MSU5FIGludDMyX3QgSERJVl9EaXYoaW50MzJfdCB4LCBpbnQxNl90IHkpCit7CisgICAgdWludDMyX3QgKnAzMjsKKworICAgIHAzMiA9ICh1aW50MzJfdCAqKUhESVZfQkFTRTsKKyAgICAqcDMyKysgPSAodWludDMyX3QpeDsKKyAgICAqcDMyKysgPSAodWludDMyX3QpeTsKKyAgICByZXR1cm4gKGludDMyX3QpICogcDMyOworfQorCisKKy8qKgorICogQGJyaWVmICAgICAgVG8gY2FsY3VsYXRlIHRoZSByZW1haW5kZXIgb2YgeC95LCBpLmUuLCB0aGUgcmVzdWx0IG9mIHggbW9kIHkuCisgKgorICogQHBhcmFtW2luXSAgeCB0aGUgZGl2aWRlbmQgb2YgdGhlIGRpdmlzaW9uCisgKiBAcGFyYW1baW5dICB5IHRoZSBkaXZpc29yIG9mIHRoZSBkaXZpc2lvbgorICoKKyAqIEByZXR1cm4gICAgIFRoZSByZW1haW5kZXIgb2YgKHgveSkKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSByZW1haW5kZXIgb2YgeC95LgorICovCitzdGF0aWMgX19JTkxJTkUgaW50MTZfdCBIRElWX01vZChpbnQzMl90IHgsIGludDE2X3QgeSkKK3sKKyAgICB1aW50MzJfdCAqcDMyOworCisgICAgcDMyID0gKHVpbnQzMl90ICopSERJVl9CQVNFOworICAgICpwMzIrKyA9ICh1aW50MzJfdCl4OworICAgICpwMzIrKyA9ICh1aW50MzJfdCl5OworICAgIHJldHVybiAoaW50MTZfdClwMzJbMV07Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgSERJVl9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBIRElWX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy9fX0hESVZfSF9fCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2kyYy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0ZjMzYQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2kyYy5oCkBAIC0wLDAgKzEsNTI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgaTJjLmgKKyAqIEB2ZXJzaW9uICBWMy4wCisgKiAkUmV2aXNpb246IDEgJAorICogJERhdGU6IDE2LzA3LzA3IDc6NTBwICQKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgSTJDIFNlcmlhbCBJbnRlcmZhY2UgQ29udHJvbGxlcihJMkMpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0kyQ19IX18KKyNkZWZpbmUgX19JMkNfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBJMkNfRHJpdmVyIEkyQyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBJMkNfRVhQT1JURURfQ09OU1RBTlRTIEkyQyBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBJMkNfQ1RMIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgSTJDX0NUTF9TVEFfU0kgICAgICAgICAgICAoMHgyOFUpIC8qITwgSTJDX0NUTCBzZXR0aW5nIGZvciBJMkMgY29udHJvbCBiaXRzLiBJdCB3b3VsZCBzZXQgU1RBIGFuZCBTSSBiaXRzICAgICAgICAgICovCisjZGVmaW5lIEkyQ19DVExfU1RBX1NJX0FBICAgICAgICAgKDB4MkNVKSAvKiE8IEkyQ19DVEwgc2V0dGluZyBmb3IgSTJDIGNvbnRyb2wgYml0cy4gSXQgd291bGQgc2V0IFNUQSwgU0kgYW5kIEFBIGJpdHMgICAgICAqLworI2RlZmluZSBJMkNfQ1RMX1NUT19TSSAgICAgICAgICAgICgweDE4VSkgLyohPCBJMkNfQ1RMIHNldHRpbmcgZm9yIEkyQyBjb250cm9sIGJpdHMuIEl0IHdvdWxkIHNldCBTVE8gYW5kIFNJIGJpdHMgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0NUTF9TVE9fU0lfQUEgICAgICAgICAoMHgxQ1UpIC8qITwgSTJDX0NUTCBzZXR0aW5nIGZvciBJMkMgY29udHJvbCBiaXRzLiBJdCB3b3VsZCBzZXQgU1RPLCBTSSBhbmQgQUEgYml0cyAgICAgICovCisjZGVmaW5lIEkyQ19DVExfU0kgICAgICAgICAgICAgICAgKDB4MDhVKSAvKiE8IEkyQ19DVEwgc2V0dGluZyBmb3IgSTJDIGNvbnRyb2wgYml0cy4gSXQgd291bGQgc2V0IFNJIGJpdCAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQ1RMX1NJX0FBICAgICAgICAgICAgICgweDBDVSkgLyohPCBJMkNfQ1RMIHNldHRpbmcgZm9yIEkyQyBjb250cm9sIGJpdHMuIEl0IHdvdWxkIHNldCBTSSBhbmQgQUEgYml0cyAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0NUTF9TVEEgICAgICAgICAgICAgICAoMHgyMFUpIC8qITwgSTJDX0NUTCBzZXR0aW5nIGZvciBJMkMgY29udHJvbCBiaXRzLiBJdCB3b3VsZCBzZXQgU1RBIGJpdCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19DVExfU1RPICAgICAgICAgICAgICAgKDB4MTBVKSAvKiE8IEkyQ19DVEwgc2V0dGluZyBmb3IgSTJDIGNvbnRyb2wgYml0cy4gSXQgd291bGQgc2V0IFNUTyBiaXQgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQ1RMX0FBICAgICAgICAgICAgICAgICgweDA0VSkgLyohPCBJMkNfQ1RMIHNldHRpbmcgZm9yIEkyQyBjb250cm9sIGJpdHMuIEl0IHdvdWxkIHNldCBBQSBiaXQgICAgICAgICAgICAgICAgICAgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEkyQyBHQ01vZGUgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBJMkNfR0NNT0RFX0VOQUJMRSAgICAgICAgICAgKDFVKSAgICAvKiE8IEVuYWJsZSAgSTJDIEdDIE1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfR0NNT0RFX0RJU0FCTEUgICAgICAgICAgKDBVKSAgICAvKiE8IERpc2FibGUgSTJDIEdDIE1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgSTJDIFNNQlVTIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEkyQ19TTUJIX0VOQUJMRSAgICAgICAgICAgICAoMVUpICAgIC8qITwgRW5hYmxlICBTTUJ1cyBIb3N0IE1vZGUgZW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19TTUJEX0VOQUJMRSAgICAgICAgICAgICAoMFUpICAgIC8qITwgRW5hYmxlICBTTUJ1cyBEZXZpY2UgTW9kZSBlbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19QRUNUWF9FTkFCTEUgICAgICAgICAgICAoMVUpICAgIC8qITwgRW5hYmxlICBTTUJ1cyBQYWNrZXQgRXJyb3IgQ2hlY2sgVHJhbnNtaXQgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19QRUNUWF9ESVNBQkxFICAgICAgICAgICAoMFUpICAgIC8qITwgRGlzYWJsZSBTTUJ1cyBQYWNrZXQgRXJyb3IgQ2hlY2sgVHJhbnNtaXQgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgSTJDX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisvKiogQGFkZHRvZ3JvdXAgSTJDX0VYUE9SVEVEX0ZVTkNUSU9OUyBJMkMgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoZSBtYWNybyBpcyB1c2VkIHRvIHNldCBJMkMgYnVzIGNvbmRpdGlvbiBhdCBPbmUgVGltZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgaTJjICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKiAgICBAcGFyYW1baW5dICAgIHU4Q3RybCAgICAgQSBieXRlIHdyaXRlcyB0byBJMkMgY29udHJvbCByZWdpc3RlcgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgU2V0IEkyQ19DVEwgcmVnaXN0ZXIgdG8gY29udHJvbCBJMkMgYnVzIGNvbmRpdGlvbnMgb2YgU1RBUlQsIFNUT1AsIFNJLCBBQ0suCisgKi8KKyNkZWZpbmUgSTJDX1NFVF9DT05UUk9MX1JFRyhpMmMsIHU4Q3RybCkgKChpMmMpLT5DVEwwID0gKChpMmMpLT5DVEwwICYgfjB4M0N1KSB8ICh1OEN0cmwpKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhlIG1hY3JvIGlzIHVzZWQgdG8gc2V0IFNUQVJUIGNvbmRpdGlvbiBvZiBJMkMgQnVzCisgKgorICogICAgQHBhcmFtW2luXSAgICBpMmMgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFNldCB0aGUgSTJDIGJ1cyBTVEFSVCBjb25kaXRpb24gaW4gSTJDX0NUTCByZWdpc3Rlci4KKyAqLworI2RlZmluZSBJMkNfU1RBUlQoaTJjKSAgKChpMmMpLT5DVEwwID0gKChpMmMpLT5DVEwwIHwgSTJDX0NUTDBfU0lfTXNrKSB8IEkyQ19DVEwwX1NUQV9Nc2spCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGUgbWFjcm8gaXMgdXNlZCB0byB3YWl0IEkyQyBidXMgc3RhdHVzIGdldCByZWFkeQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgaTJjICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBXaGVuIGEgbmV3IHN0YXR1cyBpcyBwcmVzZW50ZWQgb2YgSTJDIGJ1cywgdGhlIFNJIGZsYWcgd2lsbCBiZSBzZXQgaW4gSTJDX0NUTCByZWdpc3Rlci4KKyAqLworI2RlZmluZSBJMkNfV0FJVF9SRUFEWShpMmMpICAgICB3aGlsZSghKChpMmMpLT5DVEwwICYgSTJDX0NUTDBfU0lfTXNrKSkKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoZSBtYWNybyBpcyB1c2VkIHRvIFJlYWQgSTJDIEJ1cyBEYXRhIFJlZ2lzdGVyCisgKgorICogICAgQHBhcmFtW2luXSAgICBpMmMgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIEEgYnl0ZSBvZiBJMkMgZGF0YSByZWdpc3RlcgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgSTJDIGNvbnRyb2xsZXIgcmVhZCBkYXRhIGZyb20gYnVzIGFuZCBzYXZlIGl0IGluIEkyQ0RBVCByZWdpc3Rlci4KKyAqLworI2RlZmluZSBJMkNfR0VUX0RBVEEoaTJjKSAgICgoaTJjKS0+REFUKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgV3JpdGUgYSBEYXRhIHRvIEkyQyBEYXRhIFJlZ2lzdGVyCisgKgorICogICAgQHBhcmFtW2luXSAgICBpMmMgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKiAgICBAcGFyYW1baW5dICAgIHU4RGF0YSAgICAgIEEgYnl0ZSB0aGF0IHdyaXRlcyB0byBkYXRhIHJlZ2lzdGVyCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBXaGVuIHdyaXRlIGEgZGF0YSB0byBJMkNfREFUIHJlZ2lzdGVyLCB0aGUgSTJDIGNvbnRyb2xsZXIgd2lsbCBzaGlmdCBpdCB0byBJMkMgYnVzLgorICovCisjZGVmaW5lIEkyQ19TRVRfREFUQShpMmMsIHU4RGF0YSkgKChpMmMpLT5EQVQgPSAodThEYXRhKSkKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEdldCBJMkMgQnVzIHN0YXR1cyBjb2RlCisgKgorICogICAgQHBhcmFtW2luXSAgICBpMmMgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIEkyQyBzdGF0dXMgY29kZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVG8gZ2V0IHRoaXMgc3RhdHVzIGNvZGUgdG8gbW9uaXRvciBJMkMgYnVzIGV2ZW50LgorICovCisjZGVmaW5lIEkyQ19HRVRfU1RBVFVTKGkyYykgKChpMmMpLT5TVEFUVVMwKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgR2V0IFRpbWUtb3V0IGZsYWcgZnJvbSBJMkMgQnVzCisgKgorICogICAgQHBhcmFtW2luXSAgICBpMmMgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgICAgICAgSTJDIEJ1cyB0aW1lLW91dCBpcyBub3QgaGFwcGVuZWQKKyAqICAgIEByZXR2YWwgICAgICAgMSAgICAgICBJMkMgQnVzIHRpbWUtb3V0IGlzIGhhcHBlbmVkCisgKgorICogICAgQGRldGFpbHMgICAgICBXaGVuIEkyQyBidXMgb2NjdXJzIHRpbWUtb3V0IGV2ZW50LCB0aGUgdGltZS1vdXQgZmxhZyB3aWxsIGJlIHNldC4KKyAqLworI2RlZmluZSBJMkNfR0VUX1RJTUVPVVRfRkxBRyhpMmMpICAgKCAoKGkyYyktPlRPQ1RMICYgSTJDX1RPQ1RMX1RPSUZfTXNrKSA9PSBJMkNfVE9DVExfVE9JRl9Nc2sgPyAxdSA6IDB1KQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVG8gZ2V0IHdha2UtdXAgZmxhZyBmcm9tIEkyQyBCdXMKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIGkyYyAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCAgICAgICBDaGlwIGlzIG5vdCB3b2tlbi11cCBmcm9tIHBvd2VyLWRvd24gbW9kZQorICogICAgQHJldHZhbCAgICAgICAxICAgICAgIENoaXAgaXMgd29rZW4tdXAgZnJvbSBwb3dlci1kb3duIG1vZGUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIEkyQyBidXMgb2NjdXJzIHdha2UtdXAgZXZlbnQsIHdha2UtdXAgZmxhZyB3aWxsIGJlIHNldC4KKyAqLworI2RlZmluZSBJMkNfR0VUX1dBS0VVUF9GTEFHKGkyYykgKCAoKGkyYyktPldLU1RTICYgSTJDX1dLU1RTX1dLSUZfTXNrKSA9PSBJMkNfV0tTVFNfV0tJRl9Nc2sgPyAxdSA6IDB1KQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVG8gY2xlYXIgd2FrZS11cCBmbGFnCisgKgorICogICAgQHBhcmFtW2luXSAgICBpMmMgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIElmIHdha2UtdXAgZmxhZyBpcyBzZXQsIHVzZSB0aGlzIG1hY3JvIHRvIGNsZWFyIGl0LgorICovCisjZGVmaW5lIEkyQ19DTEVBUl9XQUtFVVBfRkxBRyhpMmMpICAoKGkyYyktPldLU1RTID0gSTJDX1dLU1RTX1dLSUZfTXNrKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVG8gZ2V0IHdha2UtdXAgYWRkcmVzcyBmcmFtZSBBQ0sgZG9uZSBmbGFnIGZyb20gSTJDIEJ1cworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgaTJjICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogICAgQHJldHZhbCAgICAgICAwICAgICAgIFRoZSBBQ0sgYml0IGN5Y2xlIG9mIGFkZHJlc3MgbWF0Y2ggZnJhbWUgaXMgbm90IGRvbmUKKyAqICAgIEByZXR2YWwgICAgICAgMSAgICAgICBUaGUgQUNLIGJpdCBjeWNsZSBvZiBhZGRyZXNzIG1hdGNoIGZyYW1lIGlzIGRvbmUgaW4gcG93ZXItZG93bgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgSTJDIGJ1cyBvY2N1cnMgd2FrZS11cCBldmVudCBhbmQgYWRkcmVzcyBmcmFtZSBBQ0sgaXMgZG9uZSwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0LgorICoKKyAqICAgIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBJMkNfR0VUX1dBS0VVUF9ET05FKGkyYykgKCAoKGkyYyktPldLU1RTICYgSTJDX1dLU1RTX1dLQUtET05FX01zaykgPT0gSTJDX1dLU1RTX1dLQUtET05FX01zayA/IDF1IDogMHUpCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUbyBjbGVhciBhZGRyZXNzIGZyYW1lIEFDSyBkb25lIGZsYWcKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIGkyYyAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgSWYgd2FrZS11cCBkb25lIGlzIHNldCwgdXNlIHRoaXMgbWFjcm8gdG8gY2xlYXIgaXQuCisgKgorICogICAgXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEkyQ19DTEVBUl9XQUtFVVBfRE9ORShpMmMpICAoKGkyYyktPldLU1RTID0gSTJDX1dLU1RTX1dLQUtET05FX01zaykKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRvIGdldCByZWFkL3dyaXRlIHN0YXR1cyBiaXQgaW4gYWRkcmVzcyB3YWtldXAgZnJhbWUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIGkyYyAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCAgICAgICBXcml0ZSBjb21tYW5kIGJlIHJlY29yZCBvbiB0aGUgYWRkcmVzcyBtYXRjaCB3YWtldXAgZnJhbWUKKyAqICAgIEByZXR2YWwgICAgICAgMSAgICAgICBSZWFkIGNvbW1hbmQgYmUgcmVjb3JkIG9uIHRoZSBhZGRyZXNzIG1hdGNoIHdha2V1cCBmcmFtZS4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIEkyQyBidXMgb2NjdXJzIHdha2UtdXAgZXZlbnQgYW5kIGFkZHJlc3MgZnJhbWUgaXMgcmVjZWl2ZWQsIHRoaXMgYml0IHdpbGwgcmVjb3JkIHJlYWQvd3JpdGUgc3RhdHVzLgorICoKKyAqICAgIFxoaWRlaW5pdGlhbGl6ZXIKKyovCisjZGVmaW5lIEkyQ19HRVRfV0FLRVVQX1dSX1NUQVRVUyhpMmMpICggKChpMmMpLT5XS1NUUyAmIEkyQ19XS1NUU19XUlNUU1dLX01zaykgPT0gSTJDX1dLU1RTX1dSU1RTV0tfTXNrID8gMXUgOiAwdSkKKworLyoqCisgKiBAYnJpZWYgICAgICBUbyBnZXQgU01CdXMgU3RhdHVzCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBTTUJ1cyBzdGF0dXMKKyAqCisgKiBAZGV0YWlscyAgICBUbyBnZXQgdGhlIEJ1cyBNYW5hZ2VtZW50IHN0YXR1cyBvZiBJMkNfQlVTU1RTIHJlZ2lzdGVyCisgKgorICovCisjZGVmaW5lIEkyQ19TTUJVU19HRVRfU1RBVFVTKGkyYykgKChpMmMpLT5CVVNTVFMpCisKKy8qKgorICogQGJyaWVmICAgICAgR2V0IFNNQnVzIENSQyB2YWx1ZQorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgUGFja2V0IGVycm9yIGNoZWNrIGJ5dGUgdmFsdWUKKyAqCisgKiBAZGV0YWlscyAgICBUaGUgQ1JDIGNoZWNrIHZhbHVlIGFmdGVyIGEgdHJhbnNtaXNzaW9uIG9yIGEgcmVjZXB0aW9uIGJ5IGNvdW50IGJ5IHVzaW5nIENSQzgKKyAqCisgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX0dFVF9QRUNfVkFMVUUoaTJjKSAoKGkyYyktPlBLVENSQykKKworLyoqCisgKiBAYnJpZWYgICAgICBTZXQgU01CdXMgQnl0ZXMgbnVtYmVyIG9mIFRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24KKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqIEBwYXJhbVtpbl0gIHUzMlBrdFNpemUgICAgICAgVHJhbnNtaXQgLyBSZWNlaXZlIGJ5dGVzCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoZSB0cmFuc21pc3Npb24gb3IgcmVjZWl2ZSBieXRlIG51bWJlciBpbiBvbmUgdHJhbnNhY3Rpb24gd2hlbiBQRUNFTiBpcyBzZXQuIFRoZSBtYXhpbXVtIGlzIDI1NSBieXRlcy4KKyAqCisgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX1NFVF9QQUNLRVRfQllURV9DT1VOVChpMmMsIHUzMlBrdFNpemUpICgoaTJjKS0+UEtUU0laRSA9ICh1MzJQa3RTaXplKSkKKworLyoqCisgKiBAYnJpZWYgICAgICBFbmFibGUgU01CdXMgQWxlcnQgZnVuY3Rpb24KKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgRGV2aWNlIE1vZGUoQk1IRU49MCk6IElmIEFMRVJURU4oSTJDX0JVU0NUTFs0XSkgaXMgc2V0LCB0aGUgQWxlcnQgcGluIHdpbGwgcHVsbCBsbywgYW5kIHJlcGx5IEFDSyB3aGVuIGdldCBBUlAgZnJvbSBob3N0CisgKiAgICAgICAgICAgICBIb3N0ICAgTW9kZShCTUhFTj0xKTogSWYgQUxFUlRFTihJMkNfQlVTQ1RMWzRdKSBpcyBzZXQsIHRoZSBBbGVydCBwaW4gaXMgc3VwcG9ydGVkIHRvIHJlY2VpdmUgYWxlcnQgc3RhdGUoTG8gdHJpZ2dlcikKKyAqCisgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX0VOQUJMRV9BTEVSVChpMmMpICgoaTJjKS0+QlVTQ1RMIHw9IEkyQ19CVVNDVExfQUxFUlRFTl9Nc2spCisKKy8qKgorICogQGJyaWVmICAgICAgRGlzYWJsZSBTTUJ1cyBBbGVydCBwaW4gZnVuY3Rpb24KKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgRGV2aWNlIE1vZGUoQk1IRU49MCk6IElmIEFMRVJURU4oSTJDX0JVU0NUTFs0XSkgaXMgY2xlYXIsIHRoZSBBbGVydCBwaW4gd2lsbCBwdWxsIGhpLCBhbmQgcmVwbHkgTkFDSyB3aGVuIGdldCBBUlAgZnJvbSBob3N0CisgKiAgICAgICAgICAgICBIb3N0ICAgTW9kZShCTUhFTj0xKTogSWYgQUxFUlRFTihJMkNfQlVTQ1RMWzRdKSBpcyBjbGVhciwgdGhlIEFsZXJ0IHBpbiBpcyBub3Qgc3VwcG9ydGVkIHRvIHJlY2VpdmUgYWxlcnQgc3RhdGUoTG8gdHJpZ2dlcikKKyAqCisgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX0RJU0FCTEVfQUxFUlQoaTJjKSAoKGkyYyktPkJVU0NUTCAmPSB+STJDX0JVU0NUTF9BTEVSVEVOX01zaykKKworLyoqCisgKiBAYnJpZWYgICAgICBTZXQgU01CdXMgU1VTQ09OIHBpbiBpcyBvdXRwdXQgbW9kZQorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHRvIHNldCBTVVNDT04oSTJDX0JVU0NUTFs2XSkgcGluIGlzIG91dHB1dCBtb2RlLgorICoKKyAqCisgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX1NFVF9TVVNDT05fT1VUKGkyYykgICAoKGkyYyktPkJVU0NUTCB8PSBJMkNfQlVTQ1RMX1NDVExPRU5fTXNrKQorCisvKioKKyAqIEBicmllZiAgICAgIFNldCBTTUJ1cyBTVVNDT04gcGluIGlzIGlucHV0IG1vZGUKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB0byBzZXQgU1VTQ09OKEkyQ19CVVNDVExbNl0pIHBpbiBpcyBpbnB1dCBtb2RlLgorICoKKyAqCisgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX1NFVF9TVVNDT05fSU4oaTJjKSAgICgoaTJjKS0+QlVTQ1RMICY9IH5JMkNfQlVTQ1RMX1NDVExPRU5fTXNrKQorCisvKioKKyAqIEBicmllZiAgICAgIFNldCBTTUJ1cyBTVVNDT04gcGluIG91dHB1dCBoaWdoIHN0YXRlCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gdG8gc2V0IFNVU0NPTihJMkNfQlVTQ1RMWzZdKSBwaW4gaXMgb3V0cHV0IGhpIHN0YXRlLgorICoKKyAqLworI2RlZmluZSBJMkNfU01CVVNfU0VUX1NVU0NPTl9ISUdIKGkyYykgICAoKGkyYyktPkJVU0NUTCB8PSBJMkNfQlVTQ1RMX1NDVExPU1RTX01zaykKKworCisvKioKKyAqIEBicmllZiAgICAgIFNldCBTTUJ1cyBTVVNDT04gcGluIG91dHB1dCBsb3cgc3RhdGUKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB0byBzZXQgU1VTQ09OKEkyQ19CVVNDVExbNl0pIHBpbiBpcyBvdXRwdXQgbG8gc3RhdGUuCisgKgorICovCisjZGVmaW5lIEkyQ19TTUJVU19TRVRfU1VTQ09OX0xPVyhpMmMpICAgKChpMmMpLT5CVVNDVEwgJj0gfkkyQ19CVVNDVExfU0NUTE9TVFNfTXNrKQorCisvKioKKyAqIEBicmllZiAgICAgIEVuYWJsZSBTTUJ1cyBBY2tub3dsZWRnZSBjb250cm9sIGJ5IG1hbnVhbAorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGUgOXRoIGJpdCBjYW4gcmVzcG9uc2UgdGhlIEFDSyBvciBOQUNLIGFjY29yZGluZyB0aGUgcmVjZWl2ZWQgZGF0YSBieSB1c2VyLiBXaGVuIHRoZSBieXRlIGlzIHJlY2VpdmVkLCBTQ0xLIGxpbmUgc3RyZXRjaGluZyB0byBsb3cgYmV0d2VlbiB0aGUgOHRoIGFuZCA5dGggU0NMSyBwdWxzZS4KKyAqCisgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX0FDS19NQU5VQUwoaTJjKSAgICgoaTJjKS0+QlVTQ1RMIHw9IEkyQ19CVVNDVExfQUNLTUVOX01zaykKKworLyoqCisgKiBAYnJpZWYgICAgICBEaXNhYmxlIFNNQnVzIEFja25vd2xlZGdlIGNvbnRyb2wgYnkgbWFudWFsCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIERpc2FibGUgYWNrbm93bGVkZ2UgcmVzcG9uc2UgY29udHJvbCBieSB1c2VyLgorICoKKyAqLworI2RlZmluZSBJMkNfU01CVVNfQUNLX0FVVE8oaTJjKSAgICgoaTJjKS0+QlVTQ1RMICY9IH5JMkNfQlVTQ1RMX0FDS01FTl9Nc2spCisKKy8qKgorICogQGJyaWVmICAgICAgRW5hYmxlIFNNQnVzIEFja25vd2xlZGdlIG1hbnVhbCBpbnRlcnJ1cHQKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBTTUJVUyBhY2tub3dsZWRnZSBtYW51YWwgaW50ZXJydXB0IG9uIHRoZSA5dGggY2xvY2sgY3ljbGUgd2hlbiBTTUJVUz0xIGFuZCBBQ0tNRU49MQorICoKKyAqLworI2RlZmluZSBJMkNfU01CVVNfOVRIQklUX0lOVF9FTkFCTEUoaTJjKSAgICgoaTJjKS0+QlVTQ1RMIHw9IEkyQ19CVVNDVExfQUNLTTlTSV9Nc2spCisKKy8qKgorICogQGJyaWVmICAgICAgRGlzYWJsZSBTTUJ1cyBBY2tub3dsZWRnZSBtYW51YWwgaW50ZXJydXB0CisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIFNNQlVTIGFja25vd2xlZGdlIG1hbnVhbCBpbnRlcnJ1cHQgb24gdGhlIDl0aCBjbG9jayBjeWNsZSB3aGVuIFNNQlVTPTEgYW5kIEFDS01FTj0xCisgKgorICovCisjZGVmaW5lIEkyQ19TTUJVU185VEhCSVRfSU5UX0RJU0FCTEUoaTJjKSAgICgoaTJjKS0+QlVTQ1RMICY9IH5JMkNfQlVTQ1RMX0FDS005U0lfTXNrKQorCisvKioKKyAqIEBicmllZiAgICAgIEVuYWJsZSBTTUJ1cyBQRUMgY2xlYXIgYXQgUkVQRUFUIFNUQVJUCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgdGhlIGNvbmRpdGlvbiBvZiBSRUFFQVQgU1RBUlQgY2FuIGNsZWFyIHRoZSBQRUMgY2FsY3VsYXRpb24uCisgKgorICovCisjZGVmaW5lIEkyQ19TTUJVU19SU1RfUEVDX0FUX1NUQVJUX0VOQUJMRShpMmMpICAgKChpMmMpLT5CVVNDVEwgfD0gSTJDX0JVU0NUTF9QRUNDTFJfTXNrKQorCisvKioKKyAqIEBicmllZiAgICAgIERpc2FibGUgU01CdXMgUEVDIGNsZWFyIGF0IFJlcGVhdCBTVEFSVAorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgY29uZGl0aW9uIG9mIFJlcGVhdCBTVEFSVCBjYW4gY2xlYXIgdGhlIFBFQyBjYWxjdWxhdGlvbi4KKyAqCisgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX1JTVF9QRUNfQVRfU1RBUlRfRElTQUJMRShpMmMpICAgKChpMmMpLT5CVVNDVEwgJj0gfkkyQ19CVVNDVExfUEVDQ0xSX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFJYIFBETUEgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgaTJjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJDIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBSWFBETUFFTiBiaXQgb2YgSTJDX0NUTDEgcmVnaXN0ZXIgdG8gZW5hYmxlIFJYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIEkyQ19FTkFCTEVfUlhfUERNQShpMmMpICAgKChpMmMpLT5DVEwxIHw9IEkyQ19DVEwxX1JYUERNQUVOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFRYIFBETUEgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgaTJjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJDIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBUWFBETUFFTiBiaXQgb2YgSTJDX0NUTDEgcmVnaXN0ZXIgdG8gZW5hYmxlIFRYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIEkyQ19FTkFCTEVfVFhfUERNQShpMmMpICAgKChpMmMpLT5DVEwxIHw9IEkyQ19DVEwxX1RYUERNQUVOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBSWCBQRE1BIHRyYW5zZmVyLgorICAqIEBwYXJhbVtpbl0gIGkyYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyQyBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBSWFBETUFFTiBiaXQgb2YgSTJDX0NUTDEgcmVnaXN0ZXIgdG8gZGlzYWJsZSBSWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBJMkNfRElTQUJMRV9SWF9QRE1BKGkyYykgICAoKGkyYyktPkNUTDEgJj0gfkkyQ19DVEwxX1JYUERNQUVOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBUWCBQRE1BIHRyYW5zZmVyLgorICAqIEBwYXJhbVtpbl0gIGkyYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyQyBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBUWFBETUFFTiBiaXQgb2YgSTJDX0NUTDEgcmVnaXN0ZXIgdG8gZGlzYWJsZSBUWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBJMkNfRElTQUJMRV9UWF9QRE1BKGkyYykgICAoKGkyYyktPkNUTDEgJj0gfkkyQ19DVEwxX1RYUERNQUVOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFBETUEgc3RyZXRjaCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBpMmMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMkMgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgRW5hYmxlIHRoaXMgZnVuY3Rpb24gaXMgdG8gc3RyZXRjaCBidXMgYnkgaGFyZHdhcmUgYWZ0ZXIgUERNQSB0cmFuc2ZlciBpcyBkb25lIGlmIFNJIGlzIG5vdCBjbGVhcmVkLgorICAqLworI2RlZmluZSBJMkNfRU5BQkxFX1BETUFfU1RSRVRDSChpMmMpICAgKChpMmMpLT5DVEwxIHw9IEkyQ19DVEwxX1BETUFTVFJfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFBETUEgc3RyZXRjaCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBpMmMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMkMgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgSTJDIHdpbCBzZW5kIFNUT1AgYWZ0ZXIgUERNQSB0cmFuc2ZlcnMgZG9uZSBhdXRvbWF0aWNhbGx5LgorICAqLworI2RlZmluZSBJMkNfRElTQUJMRV9QRE1BX1NUUkVUQ0goaTJjKSAgICgoaTJjKS0+Q1RMMSAmPSB+STJDX0NUTDFfUERNQVNUUl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlc2V0IFBETUEgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgaTJjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJDIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIEkyQyBQRE1BIGVuZ2luZSB3aWxsIGJlIHJlc2V0IGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICAqLworI2RlZmluZSBJMkNfRElTQUJMRV9SU1RfUERNQShpMmMpICAgKChpMmMpLT5DVEwxIHw9IEkyQ19DVEwxX1BETUFSU1RfTXNrKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBpbmxpbmUgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgX19JTkxJTkUgdm9pZCBJMkNfU1RPUChJMkNfVCAqaTJjKTsKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoZSBtYWNybyBpcyB1c2VkIHRvIHNldCBTVE9QIGNvbmRpdGlvbiBvZiBJMkMgQnVzCisgKgorICogICAgQHBhcmFtW2luXSAgICBpMmMgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFNldCB0aGUgSTJDIGJ1cyBTVE9QIGNvbmRpdGlvbiBpbiBJMkNfQ1RMIHJlZ2lzdGVyLgorICovCitzdGF0aWMgX19JTkxJTkUgdm9pZCBJMkNfU1RPUChJMkNfVCAqaTJjKQoreworCisgICAgKGkyYyktPkNUTDAgfD0gKEkyQ19DVEwwX1NJX01zayB8IEkyQ19DVEwwX1NUT19Nc2spOworICAgIHdoaWxlKGkyYy0+Q1RMMCAmIEkyQ19DVEwwX1NUT19Nc2spIHt9Cit9CisKKwordm9pZCBJMkNfQ2xlYXJUaW1lb3V0RmxhZyhJMkNfVCAqaTJjKTsKK3ZvaWQgSTJDX0Nsb3NlKEkyQ19UICppMmMpOwordm9pZCBJMkNfVHJpZ2dlcihJMkNfVCAqaTJjLCB1aW50OF90IHU4U3RhcnQsIHVpbnQ4X3QgdThTdG9wLCB1aW50OF90IHU4U2ksIHVpbnQ4X3QgdThBY2spOwordm9pZCBJMkNfRGlzYWJsZUludChJMkNfVCAqaTJjKTsKK3ZvaWQgSTJDX0VuYWJsZUludChJMkNfVCAqaTJjKTsKK3VpbnQzMl90IEkyQ19HZXRCdXNDbG9ja0ZyZXEoSTJDX1QgKmkyYyk7Cit1aW50MzJfdCBJMkNfR2V0SW50RmxhZyhJMkNfVCAqaTJjKTsKK3VpbnQzMl90IEkyQ19HZXRTdGF0dXMoSTJDX1QgKmkyYyk7Cit1aW50MzJfdCBJMkNfT3BlbihJMkNfVCAqaTJjLCB1aW50MzJfdCB1MzJCdXNDbG9jayk7Cit1aW50OF90IEkyQ19HZXREYXRhKEkyQ19UICppMmMpOwordm9pZCBJMkNfU2V0U2xhdmVBZGRyKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZU5vLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IHU4R0NNb2RlKTsKK3ZvaWQgSTJDX1NldFNsYXZlQWRkck1hc2soSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlTm8sIHVpbnQ4X3QgdThTbGF2ZUFkZHJNYXNrKTsKK3VpbnQzMl90IEkyQ19TZXRCdXNDbG9ja0ZyZXEoSTJDX1QgKmkyYywgdWludDMyX3QgdTMyQnVzQ2xvY2spOwordm9pZCBJMkNfRW5hYmxlVGltZW91dChJMkNfVCAqaTJjLCB1aW50OF90IHU4TG9uZ1RpbWVvdXQpOwordm9pZCBJMkNfRGlzYWJsZVRpbWVvdXQoSTJDX1QgKmkyYyk7Cit2b2lkIEkyQ19FbmFibGVXYWtldXAoSTJDX1QgKmkyYyk7Cit2b2lkIEkyQ19EaXNhYmxlV2FrZXVwKEkyQ19UICppMmMpOwordm9pZCBJMkNfU2V0RGF0YShJMkNfVCAqaTJjLCB1aW50OF90IHU4RGF0YSk7Cit1aW50OF90IEkyQ19Xcml0ZUJ5dGUoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGEpOwordWludDMyX3QgSTJDX1dyaXRlTXVsdGlCeXRlcyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IGF1OERhdGFbXSwgdWludDMyX3QgdTMyd0xlbik7Cit1aW50OF90IEkyQ19Xcml0ZUJ5dGVPbmVSZWcoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGFBZGRyLCB1aW50OF90IHU4RGF0YSk7Cit1aW50MzJfdCBJMkNfV3JpdGVNdWx0aUJ5dGVzT25lUmVnKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhQWRkciwgdWludDhfdCBhdThEYXRhW10sIHVpbnQzMl90IHUzMndMZW4pOwordWludDhfdCBJMkNfV3JpdGVCeXRlVHdvUmVncyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50MTZfdCB1MTZEYXRhQWRkciwgdWludDhfdCB1OERhdGEpOwordWludDMyX3QgSTJDX1dyaXRlTXVsdGlCeXRlc1R3b1JlZ3MoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDE2X3QgdTE2RGF0YUFkZHIsIHVpbnQ4X3QgYXU4RGF0YVtdLCB1aW50MzJfdCB1MzJ3TGVuKTsKK3VpbnQ4X3QgSTJDX1JlYWRCeXRlKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIpOwordWludDMyX3QgSTJDX1JlYWRNdWx0aUJ5dGVzKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgYXU4UmRhdGFbXSwgdWludDMyX3QgdTMyckxlbik7Cit1aW50OF90IEkyQ19SZWFkQnl0ZU9uZVJlZyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IHU4RGF0YUFkZHIpOwordWludDMyX3QgSTJDX1JlYWRNdWx0aUJ5dGVzT25lUmVnKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhQWRkciwgdWludDhfdCBhdThSZGF0YVtdLCB1aW50MzJfdCB1MzJyTGVuKTsKK3VpbnQ4X3QgSTJDX1JlYWRCeXRlVHdvUmVncyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50MTZfdCB1MTZEYXRhQWRkcik7Cit1aW50MzJfdCBJMkNfUmVhZE11bHRpQnl0ZXNUd29SZWdzKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQxNl90IHUxNkRhdGFBZGRyLCB1aW50OF90IGF1OFJkYXRhW10sIHVpbnQzMl90IHUzMnJMZW4pOwordWludDMyX3QgSTJDX1NNQnVzR2V0U3RhdHVzKEkyQ19UICppMmMpOwordm9pZCBJMkNfU01CdXNDbGVhckludGVycnVwdEZsYWcoSTJDX1QgKmkyYywgdWludDhfdCB1OENsclNNQnVzSW50RmxhZyk7Cit2b2lkIEkyQ19TTUJ1c1NldFBhY2tldEJ5dGVDb3VudChJMkNfVCAqaTJjLCB1aW50MzJfdCB1MzJQa3RTaXplKTsKK3ZvaWQgSTJDX1NNQnVzT3BlbihJMkNfVCAqaTJjLCB1aW50OF90IHU4SG9zdERldmljZSk7Cit2b2lkIEkyQ19TTUJ1c0Nsb3NlKEkyQ19UICppMmMpOwordm9pZCBJMkNfU01CdXNQRUNUeEVuYWJsZShJMkNfVCAqaTJjLCB1aW50OF90IHU4UEVDVHhFbik7Cit1aW50OF90IEkyQ19TTUJ1c0dldFBFQ1ZhbHVlKEkyQ19UICppMmMpOwordm9pZCBJMkNfU01CdXNJZGxlVGltZW91dChJMkNfVCAqaTJjLCB1aW50MzJfdCB1MzJVcywgdWludDMyX3QgdTMySGNsayk7Cit2b2lkIEkyQ19TTUJ1c1RpbWVvdXQoSTJDX1QgKmkyYywgdWludDMyX3QgbXMsIHVpbnQzMl90IHUzMlBjbGspOwordm9pZCBJMkNfU01CdXNDbG9ja0xvVGltZW91dChJMkNfVCAqaTJjLCB1aW50MzJfdCBtcywgdWludDMyX3QgdTMyUGNsayk7CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgSTJDX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEkyQ19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2kycy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvaTJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllOGYyOQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2kycy5oCkBAIC0wLDAgKzEsMzU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBpMnMuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIEkyUyBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0kyU19IX18KKyNkZWZpbmUgX19JMlNfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBJMlNfRHJpdmVyIEkyUyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBJMlNfRVhQT1JURURfQ09OU1RBTlRTIEkyUyBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKyNkZWZpbmUgSTJTX0RBVEFCSVRfOCAgICAgICAgICAgKDBVTCA8PCBJMlNfQ1RMMF9EQVRXSURUSF9Qb3MpICAgICAgIC8qITwgSTJTIGRhdGEgd2lkdGggaXMgOC1iaXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0RBVEFCSVRfMTYgICAgICAgICAgKDFVTCA8PCBJMlNfQ1RMMF9EQVRXSURUSF9Qb3MpICAgICAgIC8qITwgSTJTIGRhdGEgd2lkdGggaXMgMTYtYml0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19EQVRBQklUXzI0ICAgICAgICAgICgyVUwgPDwgSTJTX0NUTDBfREFUV0lEVEhfUG9zKSAgICAgICAvKiE8IEkyUyBkYXRhIHdpZHRoIGlzIDI0LWJpdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfREFUQUJJVF8zMiAgICAgICAgICAoM1VMIDw8IEkyU19DVEwwX0RBVFdJRFRIX1BvcykgICAgICAgLyohPCBJMlMgZGF0YSB3aWR0aCBpcyAzMi1iaXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyogQXVkaW8gRm9ybWF0ICovCisjZGVmaW5lIEkyU19FTkFCTEVfTU9OTyAgICAgICAgIEkyU19DVEwwX01PTk9fTXNrICAgICAgICAgICAgICAgICAgICAvKiE8IE1vbm8gY2hhbm5lbCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRElTQUJMRV9NT05PICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGVyZW8gY2hhbm5lbCAgXGhpZGVpbml0aWFsaXplciAqLworCisvKiBJMlMgRGF0YSBGb3JtYXQgKi8KKyNkZWZpbmUgSTJTX0ZPUk1BVF9JMlMgICAgICAgICAgKDBVTCA8PCBJMlNfQ1RMMF9GT1JNQVRfUG9zKSAgICAgICAgIC8qITwgSTJTIGRhdGEgZm9ybWF0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GT1JNQVRfSTJTX01TQiAgICAgICgxVUwgPDwgSTJTX0NUTDBfRk9STUFUX1BvcykgICAgICAgICAvKiE8IEkyUyBNU0IgZGF0YSBmb3JtYXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZPUk1BVF9JMlNfTFNCICAgICAgKDJVTCA8PCBJMlNfQ1RMMF9GT1JNQVRfUG9zKSAgICAgICAgIC8qITwgSTJTIExTQiBkYXRhIGZvcm1hdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRk9STUFUX1BDTSAgICAgICAgICAoNFVMIDw8IEkyU19DVEwwX0ZPUk1BVF9Qb3MpICAgICAgICAgLyohPCBQQ00gZGF0YSBmb3JtYXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZPUk1BVF9QQ01fTVNCICAgICAgKDVVTCA8PCBJMlNfQ1RMMF9GT1JNQVRfUG9zKSAgICAgICAgIC8qITwgUENNIE1TQiBkYXRhIGZvcm1hdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRk9STUFUX1BDTV9MU0IgICAgICAoNlVMIDw8IEkyU19DVEwwX0ZPUk1BVF9Qb3MpICAgICAgICAgLyohPCBQQ00gTFNCIGRhdGEgZm9ybWF0ICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qIEkyUyBEYXRhIEZvcm1hdCAqLworI2RlZmluZSBJMlNfT1JERVJfQVRfTVNCICAgICAgICAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDaGFubmVsIGRhdGEgaXMgYXQgTVNCICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19PUkRFUl9BVF9MU0IgICAgICAgIEkyU19DVEwwX09SREVSX01zayAgICAgICAgICAgICAgICAgICAvKiE8IENoYW5uZWwgZGF0YSBpcyBhdCBMU0IgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyogSTJTIFRETSBDaGFubmVsIE51bWJlciAqLworI2RlZmluZSBJMlNfVERNXzJDSCAgICAgICAgICAgICAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVc2UgVERNIDIgY2hhbm5lbCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfVERNXzRDSCAgICAgICAgICAgICAxVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVc2UgVERNIDQgY2hhbm5lbCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfVERNXzZDSCAgICAgICAgICAgICAyVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVc2UgVERNIDYgY2hhbm5lbCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfVERNXzhDSCAgICAgICAgICAgICAzVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVc2UgVERNIDggY2hhbm5lbCAgXGhpZGVpbml0aWFsaXplciAqLworCisvKiBJMlMgVERNIENoYW5uZWwgV2lkdGggKi8KKyNkZWZpbmUgSTJTX1RETV9XSURUSF84QklUICAgICAgMFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVERNIGNoYW5uZWwgd2l0Y2ggaXMgOC1iaXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX1RETV9XSURUSF8xNkJJVCAgICAgMVVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVERNIGNoYW5uZWwgd2l0Y2ggaXMgMTYtYml0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19URE1fV0lEVEhfMjRCSVQgICAgIDJVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRETSBjaGFubmVsIHdpdGNoIGlzIDI0LWJpdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfVERNX1dJRFRIXzMyQklUICAgICAzVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBURE0gY2hhbm5lbCB3aXRjaCBpcyAzMi1iaXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyogSTJTIFRETSBTeW5jIFdpZHRoICovCisjZGVmaW5lIEkyU19URE1fU1lOQ19PTkVfQkNMSyAgICAgICAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRETSBzeW5jIHdpZGh0IGlzIG9uZSBCTENLIHBlcmlvZCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfVERNX1NZTkNfT05FX0NIQU5ORUwgICAgMVVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBURE0gc3luYyB3aWRodCBpcyBvbmUgY2hhbm5lbCBwZXJpb2QgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyogSTJTIE9wZXJhdGlvbiBtb2RlICovCisjZGVmaW5lIEkyU19NT0RFX1NMQVZFICAgICAgICAgIEkyU19DVEwwX1NMQVZFX01zayAgICAgICAgICAgICAgICAgICAvKiE8IEFzIHNsYXZlIG1vZGUgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX01PREVfTUFTVEVSICAgICAgICAgMFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQXMgbWFzdGVyIG1vZGUgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyogSTJTIEZJRk8gVGhyZXNob2xkICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfMCAgICAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyAwIHdvcmQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fVFhfTEVWRUxfV09SRF8xICAgICgxVUwgPDwgSTJTX0NUTDFfVFhUSF9Qb3MpICAgICAgIC8qITwgVFggdGhyZXNob2xkIGlzIDEgd29yZCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzIgICAgKDJVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgMiB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzMgICAgKDNVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgMyB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzQgICAgKDRVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgNCB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzUgICAgKDVVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgNSB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzYgICAgKDZVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgNiB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzcgICAgKDdVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgNyB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzggICAgKDhVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgOCB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzkgICAgKDlVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgOSB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzEwICAgKDEwVUwgPDwgSTJTX0NUTDFfVFhUSF9Qb3MpICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgMTAgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fVFhfTEVWRUxfV09SRF8xMSAgICgxMVVMIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgIC8qITwgVFggdGhyZXNob2xkIGlzIDExIHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfMTIgICAoMTJVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyAxMiB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzEzICAgKDEzVUwgPDwgSTJTX0NUTDFfVFhUSF9Qb3MpICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgMTMgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fVFhfTEVWRUxfV09SRF8xNCAgICgxNFVMIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgIC8qITwgVFggdGhyZXNob2xkIGlzIDE0IHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfMTUgICAoMTVVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyAxNSB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIEkyU19GSUZPX1JYX0xFVkVMX1dPUkRfMSAgICAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYIHRocmVzaG9sZCBpcyAxIHdvcmQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF8yICAgICgxVUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDIgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF8zICAgICgyVUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDMgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF80ICAgICgzVUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDQgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF81ICAgICg0VUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDUgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF82ICAgICg1VUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDYgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF83ICAgICg2VUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDcgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF84ICAgICg3VUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDggd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF85ICAgICg4VUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDkgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF8xMCAgICg5VUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDEwIHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1JYX0xFVkVMX1dPUkRfMTEgICAoMTBVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAvKiE8IFJYIHRocmVzaG9sZCBpcyAxMSB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzEyICAgKDExVUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgMTIgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF8xMyAgICgxMlVMIDw8IEkyU19DVEwxX1JYVEhfUG9zKSAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDEzIHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1JYX0xFVkVMX1dPUkRfMTQgICAoMTNVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAvKiE8IFJYIHRocmVzaG9sZCBpcyAxNCB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzE1ICAgKDE0VUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgMTUgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF8xNiAgICgxNVVMIDw8IEkyU19DVEwxX1JYVEhfUG9zKSAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDE2IHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qIEkyUyBSZWNvcmQgQ2hhbm5lbCAqLworI2RlZmluZSBJMlNfTU9OT19SSUdIVCAgICAgICAgICAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWNvcmQgbW9ubyByaWdodCBjaGFubmVsICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19NT05PX0xFRlQgICAgICAgICAgIEkyU19DVEwwX1JYTENIX01zayAgICAgICAgICAgICAgICAgICAvKiE8IFJlY29yZCBtb25vIGxlZnQgY2hhbm5lbCAgXGhpZGVpbml0aWFsaXplciAqLworCisvKiBJMlMgQ2hhbm5lbCAqLworI2RlZmluZSBJMlNfUklHSFQgICAgICAgICAgICAgICAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZWxlY3QgcmlnaHQgY2hhbm5lbCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfTEVGVCAgICAgICAgICAgICAgICAxVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZWxlY3QgbGVmdCBjaGFubmVsICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgSTJTX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBJMlNfRVhQT1JURURfRlVOQ1RJT05TIEkyUyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKworLyoqCisgICogQGJyaWVmICBFbmFibGUgemVybyBjcm9zcyBkZXRlY3QgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ2hNYXNrIGlzIHRoZSBtYXNrIGZvciBjaGFubmVsIG51bWJlciAodmFsaWQgdmFsdWUgaXMgZnJvbSAoMX44KS4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBJMlNfRU5BQkxFX1RYX1pDRChJMlNfVCAqaTJzLCB1aW50MzJfdCB1MzJDaE1hc2spCit7CisgICAgaWYoKHUzMkNoTWFzayA+IDBVTCkgJiYgKHUzMkNoTWFzayA8IDlVTCkpCisgICAgeworICAgICAgICBpMnMtPkNUTDEgfD0gKDFVTCA8PCAodTMyQ2hNYXNrIC0gMVVMKSk7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgemVybyBjcm9zcyBkZXRlY3QgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ2hNYXNrIGlzIHRoZSBtYXNrIGZvciBjaGFubmVsIG51bWJlciAodmFsaWQgdmFsdWUgaXMgZnJvbSAoMX44KS4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBJMlNfRElTQUJMRV9UWF9aQ0QoSTJTX1QgKmkycywgdWludDMyX3QgdTMyQ2hNYXNrKQoreworICAgIGlmKCh1MzJDaE1hc2sgPiAwVUwpICYmICh1MzJDaE1hc2sgPCA5VUwpKQorICAgIHsKKyAgICAgICAgaTJzLT5DVEwxICY9IH4oMVVMIDw8ICh1MzJDaE1hc2sgLSAxVUwpKTsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIEkyUyBUeCBETUEgZnVuY3Rpb24uIEkyUyByZXF1ZXN0cyBETUEgdG8gdHJhbnNmZXIgZGF0YSB0byBUeCBGSUZPLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19FTkFCTEVfVFhETUEoaTJzKSAgKCAoaTJzKS0+Q1RMMCB8PSBJMlNfQ1RMMF9UWFBETUFFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgSTJTIFR4IERNQSBmdW5jdGlvbi4gSTJTIHJlcXVlc3RzIERNQSB0byB0cmFuc2ZlciBkYXRhIHRvIFR4IEZJRk8uCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0RJU0FCTEVfVFhETUEoaTJzKSAoIChpMnMpLT5DVEwwICY9IH5JMlNfQ1RMMF9UWFBETUFFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBJMlMgUnggRE1BIGZ1bmN0aW9uLiBJMlMgcmVxdWVzdHMgRE1BIHRvIHRyYW5zZmVyIGRhdGEgZnJvbSBSeCBGSUZPLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19FTkFCTEVfUlhETUEoaTJzKSAoIChpMnMpLT5DVEwwIHw9IEkyU19DVEwwX1JYUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBJMlMgUnggRE1BIGZ1bmN0aW9uLiBJMlMgcmVxdWVzdHMgRE1BIHRvIHRyYW5zZmVyIGRhdGEgZnJvbSBSeCBGSUZPLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19ESVNBQkxFX1JYRE1BKGkycykgKCAoaTJzKS0+Q1RMMCAmPSB+STJTX0NUTDBfUlhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBFbmFibGUgSTJTIFR4IGZ1bmN0aW9uIC4KKyAgKiBAcGFyYW1baW5dIGkycyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBub25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBJMlNfRU5BQkxFX1RYKGkycykgKCAoaTJzKS0+Q1RMMCB8PSBJMlNfQ1RMMF9UWEVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBJMlMgVHggZnVuY3Rpb24gLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19ESVNBQkxFX1RYKGkycykgKCAoaTJzKS0+Q1RMMCAmPSB+STJTX0NUTDBfVFhFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBJMlMgUnggZnVuY3Rpb24gLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19FTkFCTEVfUlgoaTJzKSAoIChpMnMpLT5DVEwwIHw9IEkyU19DVEwwX1JYRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIEkyUyBSeCBmdW5jdGlvbiAuCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0RJU0FCTEVfUlgoaTJzKSAoIChpMnMpLT5DVEwwICY9IH5JMlNfQ1RMMF9SWEVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIFR4IE11dGUgZnVuY3Rpb24gLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19FTkFCTEVfVFhfTVVURShpMnMpICAoIChpMnMpLT5DVEwwIHw9IEkyU19DVEwwX01VVEVfTXNrICkKKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIFR4IE11dGUgZnVuY3Rpb24gLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19ESVNBQkxFX1RYX01VVEUoaTJzKSAoIChpMnMpLT5DVEwwICY9IH5JMlNfQ1RMMF9NVVRFX01zayApCisKKy8qKgorICAqIEBicmllZiAgQ2xlYXIgVHggRklGTy4gSW50ZXJuYWwgcG9pbnRlciBpcyByZXNldCB0byBGSUZPIHN0YXJ0IHBvaW50LgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19DTFJfVFhfRklGTyhpMnMpICggKGkycyktPkNUTDAgfD0gSTJTX0NUTDBfVFhGQkNMUl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIENsZWFyIFJ4IEZJRk8uIEludGVybmFsIHBvaW50ZXIgaXMgcmVzZXQgdG8gRklGTyBzdGFydCBwb2ludC4KKyAgKiBAcGFyYW1baW5dIGkycyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBub25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBJMlNfQ0xSX1JYX0ZJRk8oaTJzKSAoIChpMnMpLT5DVEwwIHw9IEkyU19DVEwwX1JYRkJDTFJfTXNrICkKKworLyoqCisgICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHJlY29yZGluZyBzb3VyY2UgY2hhbm5lbCB3aGVuIG1vbm8gbW9kZSBpcyB1c2VkLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkNoIGxlZnQgb3IgcmlnaHQgY2hhbm5lbC4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX01PTk9fTEVGVAorICAqICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfTU9OT19SSUdIVAorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIEkyU19TRVRfTU9OT19SWF9DSEFOTkVMKEkyU19UICppMnMsIHVpbnQzMl90IHUzMkNoKQoreworICAgIHUzMkNoID09IEkyU19NT05PX0xFRlQgPworICAgIChpMnMtPkNUTDAgfD0gSTJTX0NUTDBfUlhMQ0hfTXNrKSA6CisgICAgKGkycy0+Q1RMMCAmPSB+STJTX0NUTDBfUlhMQ0hfTXNrKTsKK30KKworLyoqCisgICogQGJyaWVmICBXcml0ZSBkYXRhIHRvIEkyUyBUeCBGSUZPLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkRhdGE6IFRoZSBkYXRhIHdyaXR0ZW4gdG8gRklGTy4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19XUklURV9UWF9GSUZPKGkycywgdTMyRGF0YSkgICggKGkycyktPlRYRklGTyA9ICh1MzJEYXRhKSApCisKKy8qKgorICAqIEBicmllZiAgUmVhZCBSeCBGSUZPLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIERhdGEgaW4gUnggRklGTy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19SRUFEX1JYX0ZJRk8oaTJzKSAoIChpMnMpLT5SWEZJRk8gKQorCisvKioKKyAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgaW50ZXJydXB0IGZsYWcgYWNjb3JkaW5nIHRvIHRoZSBtYXNrIHBhcmFtZXRlci4KKyAgKiBAcGFyYW1baW5dIGkycyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNYXNrIGlzIHRoZSBtYXNrIGZvciB0aGUgYWxsIGludGVycnVwdCBmbGFncy4KKyAgKiBAcmV0dXJuIFRoZSBtYXNrZWQgYml0IHZhbHVlIG9mIGludGVycnVwdCBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0dFVF9JTlRfRkxBRyhpMnMsIHUzMk1hc2spICggKGkycyktPlNUQVRVUzAgJiAodTMyTWFzaykgKQorCisvKioKKyAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBpbnRlcnJ1cHQgZmxhZyBhY2NvcmRpbmcgdG8gdGhlIG1hc2sgcGFyYW1ldGVyLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgaXMgdGhlIG1hc2sgZm9yIHRoZSBhbGwgaW50ZXJydXB0IGZsYWdzLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0NMUl9JTlRfRkxBRyhpMnMsIHUzMk1hc2spICggKGkycyktPlNUQVRVUzAgfD0gKHUzMk1hc2spICkKKworLyoqCisgICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHplcm8gY3Jvc3NpbmcgaW50ZXJydXB0IGZsYWcgYWNjb3JkaW5nIHRvIHRoZSBtYXNrIHBhcmFtZXRlci4KKyAgKiBAcGFyYW1baW5dIGkycyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNYXNrIGlzIHRoZSBtYXNrIGZvciB0aGUgYWxsIGludGVycnVwdCBmbGFncy4KKyAgKiBAcmV0dXJuIFRoZSBtYXNrZWQgYml0IHZhbHVlIG9mIGludGVycnVwdCBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0dFVF9aQ19JTlRfRkxBRyhpMnMsIHUzMk1hc2spICggKGkycyktPlNUQVRVUzEgJiAodTMyTWFzaykgKQorCisvKioKKyAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSB6ZXJvIGNyb3NzaW5nIGludGVycnVwdCBmbGFnIGFjY29yZGluZyB0byB0aGUgbWFzayBwYXJhbWV0ZXIuCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzayBpcyB0aGUgbWFzayBmb3IgdGhlIGFsbCBpbnRlcnJ1cHQgZmxhZ3MuCisgICogQHJldHVybiBub25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBJMlNfQ0xSX1pDX0lOVF9GTEFHKGkycywgdTMyTWFzaykgKCAoaTJzKS0+U1RBVFVTMSB8PSAodTMyTWFzaykgKQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0cmFuc21pdCBGSUZPIGxldmVsCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gRklGTyBsZXZlbAorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0dFVF9UWF9GSUZPX0xFVkVMKGkycykgKCAoKChpMnMpLT5TVEFUVVMxICYgSTJTX1NUQVRVUzFfVFhDTlRfTXNrKSA+PiBJMlNfU1RBVFVTMV9UWENOVF9Qb3MpICYgMHhGICkKKworLyoqCisgICogQGJyaWVmICBHZXQgcmVjZWl2ZSBGSUZPIGxldmVsCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gRklGTyBsZXZlbAorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0dFVF9SWF9GSUZPX0xFVkVMKGkycykgKCAoKChpMnMpLT5TVEFUVVMxICYgSTJTX1NUQVRVUzFfUlhDTlRfTXNrKSA+PiBJMlNfU1RBVFVTMV9SWENOVF9Qb3MpICYgMHhGICkKKwordWludDMyX3QgSTJTX09wZW4oSTJTX1QgKmkycywgdWludDMyX3QgdTMyTWFzdGVyU2xhdmUsIHVpbnQzMl90IHUzMlNhbXBsZVJhdGUsIHVpbnQzMl90IHUzMldvcmRXaWR0aCwgdWludDMyX3QgdTMyTW9ub0RhdGEsIHVpbnQzMl90IHUzMkRhdGFGb3JtYXQpOwordm9pZCBJMlNfQ2xvc2UoSTJTX1QgKmkycyk7Cit2b2lkIEkyU19FbmFibGVJbnQoSTJTX1QgKmkycywgdWludDMyX3QgdTMyTWFzayk7Cit2b2lkIEkyU19EaXNhYmxlSW50KEkyU19UICppMnMsIHVpbnQzMl90IHUzMk1hc2spOwordWludDMyX3QgSTJTX0VuYWJsZU1DTEsoSTJTX1QgKmkycywgdWludDMyX3QgdTMyQnVzQ2xvY2spOwordm9pZCBJMlNfRGlzYWJsZU1DTEsoSTJTX1QgKmkycyk7Cit2b2lkIEkyU19TZXRGSUZPKEkyU19UICppMnMsIHVpbnQzMl90IHUzMlR4VGhyZXNob2xkLCB1aW50MzJfdCB1MzJSeFRocmVzaG9sZCk7Cit2b2lkIEkyU19Db25maWd1cmVURE0oSTJTX1QgKmkycywgdWludDMyX3QgdTMyQ2hhbm5lbFdpZHRoLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJTeW5jV2lkdGgpOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgSTJTX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEkyU19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fSTJTX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9ta3JvbWxpYi5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvbWtyb21saWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Y4NDA4Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvbWtyb21saWIuaApAQCAtMCwwICsxLDExMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBNS1JPTUxpYi5oCisgKiBAdmVyc2lvbiAgVjIuMDAKKyAqIEBicmllZiAgICBNYXNrUk9NIGxpYnJhcnkgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxOC0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01LUk9NX0xJQl9IX18KKyNkZWZpbmUgX19NS1JPTV9MSUJfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBNS1JPTV9Ecml2ZXIgTUtST00gRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgTUtST01fRVhQT1JURURfQ09OU1RBTlRTIE1LUk9NIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFN0YXR1cyBhbmQgRXJyb3IgQ29kZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQkxfRVJSX1RUX0NIRUNLICAgICAgICAgMHhGMEYwMDAwMFVMICAgIC8qITwgTm90IGEgTm9uLXNlY3VyZSBwYXJhbWV0ZXIgICAgICAgICAqLworI2RlZmluZSBCTF9FUlJfUEFSQU1FVEVSICAgICAgICAweEYwRjAwMDAxVUwgICAgLyohPCBJbnZhbGlkIHBhcmFtZXRlciAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMX1BBUkFNX0FMSUdOICAgICAgICAgIDB4RjBGMDAwMDJVTCAgICAvKiE8IFBhcmFtZXRlciBhbGlnbm1lbnQgZXJyb3IgICAgICAgICAgKi8KKyNkZWZpbmUgQkxfTk9UX0ZMQVNIX0FERFIgICAgICAgMHhGMEYwMDAwM1VMICAgIC8qITwgSW52YWxpZCBmbGFzaCBhZGRyZXNzICAgICAgICAgICAgICAqLworI2RlZmluZSBCTF9OT1RfU1JBTV9BRERSICAgICAgICAweEYwRjAwMDA0VUwgICAgLyohPCBJbnZhbGlkIHNyYW0gYWRkcmVzcyAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMX1hPTV9OT1RfQ09ORklHICAgICAgIDB4RjBGMDAwMDVVTCAgICAvKiE8IFhPTSBpcyBub3QgY29uZmlndXJlIHlldCAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxfWE9NX0hBU19DT05GSUcgICAgICAgMHhGMEYwMDAwNlVMICAgIC8qITwgWE9NIGhhcyBiZWVlbiBjb25maWd1cmVkICAgICAgICAgICAqLworI2RlZmluZSBCTF9YT01fSEFTX0FDVElWRSAgICAgICAweEYwRjAwMDA3VUwgICAgLyohPCBYT00gaXMgYWN0aXZlZCAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMX1hPTV9CQVNFX0VSUk9SICAgICAgIDB4RjBGMDAwMDhVTCAgICAvKiE8IEludmFsaWQgWE9NIGJhc2UgYWRkcmVzcyAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxfS1BST01fTk9UX0VOQUJMRSAgICAgMHhGMEYwMDAwOVVMICAgIC8qITwgS1BST00gaXMgbm90IGVuYWJsZWQgeWV0ICAgICAgICAgICAqLworI2RlZmluZSBCTF9LUFJPTV9LRVlfRk9SQklEICAgICAweEYwRjAwMDBBVUwgICAgLyohPCBLUFJPTSBjb21wYXJpc29uIGlzIGZvcmJpZGRlbiAgICAgICovCisjZGVmaW5lIEJMX0tQUk9NX0tFWV9VTk1BVENIICAgIDB4RjBGMDAwMEJVTCAgICAvKiE8IEtQUk9NIGNvbXBhcmlzb24gaXMgdW5tYXRjaGVkICAgICAgKi8KKyNkZWZpbmUgQkxfS1BST01fS0VZX0xPQ0tFRCAgICAgMHhGMEYwMDAwQ1VMICAgIC8qITwgS1BST00gd3JpdGUtcHJvdGVjdCBpcyBlbmFibGVkICAgICAqLworI2RlZmluZSBCTF9LUFJPTV9TRVRfRkFJTCAgICAgICAweEYwRjAwMDBFVUwgICAgLyohPCBTZXQgS1BST00ga2V5IGZhaWwgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMX0lTUF9DTURfRkFJTCAgICAgICAgICgtMSkgICAgICAgICAgICAvKiE8IEZNQyBjb21tYW5kIGZhaWwgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxfRkxBU0hfQUxMT05FICAgICAgICAgMHhBMTFGRkZGRlVMICAgIC8qITwgQ2hlY2stYWxsLW9uZSByZXN1bHQgaXMgYWxsIG9uZSAgICAqLworI2RlZmluZSBCTF9GTEFTSF9OT1RfQUxMT05FICAgICAweEExMTAwMDAwVUwgICAgLyohPCBDaGVjay1hbGwtb25lIHJlc3VsdCBpcyBub3QgYWxsIG9uZSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQkxfUk5HX1BSTkcgICAgICAgICAgICAgKDBVTCkgICAvKiE8VXNlIEgvVyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworI2RlZmluZSBCTF9STkdfU1dSTkcgICAgICAgICAgICAoMVVMKSAgIC8qITxVc2UgUy9XIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisjZGVmaW5lIEJMX1JOR19MSVJDMzJLICAgICAgICAgICgwVUwpICAgLyohPFVzZSBMSVJDMzIgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisjZGVmaW5lIEJMX1JOR19MWFQgICAgICAgICAgICAgICgyVUwpICAgLyohPFVzZSBMWFQgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisjZGVmaW5lIFhUUk5HX1BSTkcgICAgICAgICAgICAgICgwVUwpICAgLyohPFVzZSBIL1cgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKyNkZWZpbmUgWFRSTkdfU1dSTkcgICAgICAgICAgICAgKDFVTCkgICAvKiE8VXNlIFMvVyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworI2RlZmluZSBYVFJOR19MSVJDMzJLICAgICAgICAgICAoMFVMKSAgIC8qITxVc2UgTElSQzMyIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworI2RlZmluZSBYVFJOR19MWFQgICAgICAgICAgICAgICAoMlVMKSAgIC8qITxVc2UgTFhUIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBNYXhpbXVtIFNlY3VyZUlTUCBNb2RlIFRyYW5zbWl0L1JlY2VpdmUgUGFja2V0IFNpemUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIE1BWF9QS1RfU0laRSAgICAgICAgICAgIDY0CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgTUtST01fRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIE1LUk9NX0VYUE9SVEVEX1NUUlVDVFMgTUtST00gRXhwb3J0ZWQgU3RydWN0cworICBAeworKi8KKy8qKgorICAqIEBkZXRhaWxzICAgIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHN0cnVjdHVyZQorICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCBvcHQ7ICAgICAgIC8qITwgT3BlcmF0aW9uIG1vZGUgKi8KKyAgICBpbnQzMl90IGRhdGFfbGVuOyAgIC8qITwgSW50ZXJuYWwgdXNlIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworICAgIHVpbnQ4X3QgYnVmWzMyXTsgICAgLyohPCBJbnRlcm5hbCB1c2UgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisgICAgdWludDhfdCBidWYyWzIwXTsgICAvKiE8IEludGVybmFsIHVzZSBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KK30gQkxfUk5HX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3Qgb3B0OyAgICAgICAvKiE8IE9wZXJhdGlvbiBtb2RlICovCisgICAgaW50MzJfdCBkYXRhX2xlbjsgICAvKiE8IEludGVybmFsIHVzZSBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKyAgICB1aW50OF90IGJ1ZlszMl07ICAgIC8qITwgSW50ZXJuYWwgdXNlIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworICAgIHVpbnQ4X3QgYnVmMlsyMF07ICAgLyohPCBJbnRlcm5hbCB1c2UgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCit9IFhUUk5HX1Q7CisKKworLyoqCisgICogQGRldGFpbHMgICAgWENSUFRfVCBpcyBzdHJ1Y3R1cmUgZm9yIGFjY2VzcyBNS1JPTSBDcnlwdG8gbGlicmFyeQorICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBDUlBUX1QgICAgICAqY3JwdDsgICAgICAgLyohPCBUaGUgcG9pbnRlciBvZiB0aGUgQ1JZUFRPIG1vZHVsZSAqLworICAgIEVDQ19DVVJWRSAgICpwQ3VydmU7ICAgICAvKiE8IEludGVybmFsIHVzZSBmb3IgRUNDICovCisgICAgRUNDX0NVUlZFICAgQ3VydmVfQ29weTsgIC8qITwgSW50ZXJuYWwgdXNlIGZvciBFQ0MgKi8KKyAgICB1aW50MzJfdCAgICBBRVNfQ1RMWzRdOyAgLyohPCBBRVMgY2hhbm5lbCBzZWxlY3Rpb24gKi8KKyAgICB1aW50MzJfdCAgICBUREVTX0NUTFs0XTsgLyohPCBUREVTIGNoYW5uZWwgc2VsZWN0aW9uICovCit9IFhDUlBUX1Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBEZWZpbmUgYSBnbG9iYWwgY29uc3RhbnQgWENSUFQgYXMgdGhlIGFjY2VzcyBhZGRyZXNzIG9mIGdfeGNycHRhIGZvciB1c2luZyBNS1JPTSBDcnlwdG8gbGlicmFyeS4gKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2V4dGVybiBYQ1JQVF9UIGdfeGNycHQ7CisjZGVmaW5lIFhDUlBUICgmZ194Y3JwdCkKKworCisvKioKKyAgKiBAZGV0YWlscyAgICBDb21tYW5kIHBhY2tldCBzdHJ1Y3R1cmUgZm9yIHRyYW5zbWl0L3JlY2VpdmUgZGF0YSBpbiBTZWN1cmVJU1AgZnVuY3Rpb24KKyAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyogV29yZC0wICovCisgICAgdWludDE2X3QgICAgICAgIHUxNkNSQzE2OyAgICAgICAvKiBDUkMxNiBjaGVja3N1bSBvZiBmcm9tIHU4Q21kSUQgdG8gV29yZC0xMyAqLworICAgIHVpbnQxNl90ICAgICAgICB1MTZDbWRJRDsgICAgICAgLyogQ29tbWFuZCBJRCAqLworCisgICAgLyogV29yZC0xICovCisgICAgdWludDE2X3QgICAgICAgIHUxNlBhY2tldElEOyAgICAvKiBQYWNrZXQgSUQgKi8KKyAgICB1aW50MTZfdCAgICAgICAgdTE2TGVuOyAgICAgICAgIC8qIFZhbGlkIGRhdGEgbGVuZ3RoIGluIGNvbW1hbmQgZGF0YSBmaWVsZCAqLworCisgICAgLyogV29yZC0yIH4gMTMgKi8KKyAgICB1aW50MzJfdCAgICAgICAgYXUzMkRhdGFbMTJdOyAgIC8qIERhdGEgZmllbGRzICovCisKKyAgICAvKiBXb3JkLTE0ICovCisgICAgdWludDMyX3QgICAgICAgIHUzMkNSQzMyOyAgICAgICAvKiBDUkMzMiBmcm9tIFdvcmQtMCB0byBXb3JkLTEzIGZvciBjaGVjayBjbWQgaW50ZWdyaXR5ICovCisKKyAgICAvKiBXb3JkLTE1ICovCisgICAgdWludDMyX3QgICAgICAgIFJTVkQ7ICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworCit9IENNRF9QQUNLRVRfVDsKKworCisvKioKKyAgKiBAZGV0YWlscyAgICBFQ0MgcHVibGljIGtleSBzdHJ1Y3R1cmUKKyAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgICAgICAgIGF1MzJLZXkwWzhdOyAgICAvKiAyNTYtYml0cyAqLworICAgIHVpbnQzMl90ICAgICAgICBhdTMyS2V5MVs4XTsgICAgLyogMjU2LWJpdHMgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgRUNDX1BVQktFWV9UOworCisKKy8qKgorICAqIEBkZXRhaWxzICAgIEVDQyBFQ0RTQSBzaWduYXR1cmUgc3RydWN0dXJlCisgICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQzMl90ICAgICAgICBhdTMyUls4XTsgICAvKiAyNTYtYml0cyAqLworICAgIHVpbnQzMl90ICAgICAgICBhdTMyU1s4XTsgICAvKiAyNTYtYml0cyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBFQ0RTQV9TSUdOX1Q7CisKKworLyoqCisgICogQGRldGFpbHMgICAgU2VjdXJlSVNQIG9wZXJhdGlvbiBtb2RlIGVudW1lcmF0ZQorICAqLwordHlwZWRlZiBlbnVtCit7CisgICAgVVNCX01PREUgICAgICAgID0gMHgxLAorICAgIFVBUlRfTU9ERSAgICAgICA9IDB4MiwKKyAgICBVU0JfVUFSVF9NT0RFICAgPSAweDMsCisgICAgUkVTWU5DX0lTUCAgICAgID0gMHg4MCwgLyogVG8gc2V0IFNlY3VyZUlTUCBpbiB3YWl0aW5nIGNvbm5lY3Rpb24gc3RhdGUgKi8KK30gRV9JU1BfTU9ERTsKKworCisvKioKKyAgKiBAZGV0YWlscyAgICBHbG9iYWwgSVNQIGluZm9ybWF0aW9uIGRhdGEgZm9yIHBlcmZvcm0gU2VjdXJlSVNQIGZ1bmN0aW9uCisgICovCit0eXBlZGVmIHZvaWQgKCpJU1BDYWxsYmFjaykodWludDMyX3QgKnB1MzJCdWYsIHVpbnQzMl90IHUzMkRhdGEpOwordHlwZWRlZiB2b2lkICgqVVNCREVQRnVuYykodm9pZCk7Cit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQzMl90ICAgICAgICB1MzJDbWRNYXNrOyAgICAgICAgIC8qIERpc2FibGUgdGhlIHNwZWNpZnkgY29tbWFuZCBpbiBTZWN1cmVJU1AgKi8KKworICAgIHVpbnQzMl90ICAgICAgICBhdTMyQUVTS2V5WzhdOyAgICAgIC8qIEFFUy0yNTYga2V5cyAqLworICAgIHVpbnQzMl90ICAgICAgICBhdTMyQUVTSVZbNF07ICAgICAgIC8qIEFFUyBJViwgMTI4LWJpdHMgKi8KKworICAgIEVDQ19QVUJLRVlfVCAgICBDbGllbnRQdWJLZXk7ICAgICAgIC8qIENsaWVudCdzIEVDQyBwdWJsaWMga2V5LCA2NC1ieXRlcyAoMjU2LWJpdHMgKyAyNTYtYml0cykgKi8KKyAgICBFQ0NfUFVCS0VZX1QgICAgU2VydmVyUHViS2V5OyAgICAgICAvKiBTZXJ2ZXIncyBFQ0MgcHVibGljIGtleSwgNjQtYnl0ZXMgKDI1Ni1iaXRzICsgMjU2LWJpdHMpICovCisKKyAgICBFQ0RTQV9TSUdOX1QgICAgc2lnbjsgICAgICAgICAgICAgICAvKiA2NC1ieXRlcyAoMjU2LWJpdHMgUiArIDI1Ni1iaXRzIFMpICovCisKKyAgICB1aW50MzJfdCAgICAgICAgSXNDb25uZWN0T0s7ICAgICAgICAvKiBJbnRlcm5hbCB1c2UgaW4gU2VjdXJlSVNQICovCisgICAgdWludDMyX3QgICAgICAgIHRpbWVvdXQ7ICAgICAgICAgICAgLyogVGltZW91dCBwZXJpb2QgZm9yIGNvbm5lY3RpbmcgdG8gU2VjdXJlSVNQIFRvb2wgKi8KKworICAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKSB1aW50OF90IHJjdmJ1ZltNQVhfUEtUX1NJWkVdOyAvKiBJbnRlcm5hbCB1c2UgaW4gU2VjdXJlSVNQICovCisgICAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg0KSkpIHVpbnQ4X3QgcnNwYnVmW01BWF9QS1RfU0laRV07IC8qIEludGVybmFsIHVzZSBpbiBTZWN1cmVJU1AgKi8KKworICAgIFVTQkRFUEZ1bmMgICAgICBwZm5VU0JERVBbVVNCRF9NQVhfRVBdOyAvKiBJbnRlcm5hbCB1c2UgaW4gU2VjdXJlSVNQICovCisgICAgdWludDMyX3QgICAgICAgIElzVVNCRGF0YVJlYWR5OyAgICAgLyogSW50ZXJuYWwgdXNlIGluIFNlY3VyZUlTUCAqLworCisgICAgdWludDMyX3QgICAgICAgIFVBUlRDbG9ja0ZyZXE7ICAgICAgLyogVUFSVCBjbG9jayBmcmVxdWVuY3kgKi8KKyAgICB1aW50MzJfdCAgICAgICAgVUFSVERhdGFJZHg7ICAgICAgICAvKiBJbnRlcm5hbCB1c2UgaW4gU2VjdXJlSVNQICovCisgICAgdWludDMyX3QgICAgICAgIElzVUFSVERhdGFSZWFkeTsgICAgLyogSW50ZXJuYWwgdXNlIGluIFNlY3VyZUlTUCAqLworCisgICAgSVNQQ2FsbGJhY2sgICAgIHBmblZlbmRvckZ1bmM7ICAgICAgLyogVmVuZG9yIGZ1bmN0aW9uIGFkZHJlc3MgKi8KKworICAgIHVpbnQzMl90ICAgICAgICB0bXAwWzhdOyAgICAgICAgICAgIC8qIEludGVybmFsIHVzZSBpbiBTZWN1cmVJU1AgKi8KKyAgICB1aW50MzJfdCAgICAgICAgdG1wMVs4XTsgICAgICAgICAgICAvKiBJbnRlcm5hbCB1c2UgaW4gU2VjdXJlSVNQICovCisKK30gSVNQX0lORk9fVDsKKworCisvKioKKyAgKiBAZGV0YWlscyAgICBHbG9iYWwgVVNCRCBkYXRhIGZvciBTZWN1cmVJU1AgVVNCCisgICAgICAgIFRoaXMgZGF0YSBpcyBpbnRlcm5hbCB1c2UgaW4gU2VjdXJlSVNQIG9wZXJhdGlvbgorICAqLworI3ByYWdtYSBwYWNrKHB1c2gpCisjcHJhZ21hIHBhY2soMSkKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDhfdCAgICAgICAgICAgICBnX3VzYmRfU2V0dXBQYWNrZXRbOF07CisgICAgdm9sYXRpbGUgdWludDhfdCAgICBnX3VzYmRfUmVtb3RlV2FrZXVwRW47CisgICAgdm9sYXRpbGUgdWludDhfdCAgICBnX3VzYmRfdThaZXJvRmxhZzsKKworICAgIHZvbGF0aWxlIHVpbnQ4X3QgICAgKmdfdXNiZF9DdHJsSW5Qb2ludGVyOworICAgIHZvbGF0aWxlIHVpbnQ4X3QgICAgKmdfdXNiZF9DdHJsT3V0UG9pbnRlcjsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAgIGdfdXNiZF9DdHJsSW5TaXplOworICAgIHZvbGF0aWxlIHVpbnQzMl90ICAgZ191c2JkX0N0cmxPdXRTaXplOworICAgIHZvbGF0aWxlIHVpbnQzMl90ICAgZ191c2JkX0N0cmxPdXRTaXplTGltaXQ7CisgICAgdm9sYXRpbGUgdWludDMyX3QgICBnX3VzYmRfVXNiQWRkcjsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAgIGdfdXNiZF9Vc2JDb25maWc7CisgICAgdm9sYXRpbGUgdWludDMyX3QgICBnX3VzYmRfQ3RybE1heFBrdFNpemU7CisgICAgdm9sYXRpbGUgdWludDMyX3QgICBnX3VzYmRfVXNiQWx0SW50ZXJmYWNlOworCisgICAgU19VU0JEX0lORk9fVCAgICAgICAqZ191c2JkX3NJbmZvOworCisgICAgVkVORE9SX1JFUSAgICAgICAgICBnX3VzYmRfcGZuVmVuZG9yUmVxdWVzdDsKKyAgICBDTEFTU19SRVEgICAgICAgICAgIGdfdXNiZF9wZm5DbGFzc1JlcXVlc3Q7CisgICAgU0VUX0lOVEVSRkFDRV9SRVEgICBnX3VzYmRfcGZuU2V0SW50ZXJmYWNlOworICAgIFNFVF9DT05GSUdfQ0IgICAgICAgZ191c2JkX3BmblNldENvbmZpZ0NhbGxiYWNrOworICAgIHVpbnQzMl90ICAgICAgICAgICAgZ191MzJFcFN0YWxsTG9jazsKKworfSBCTF9VU0JEX0lORk9fVDsKKyNwcmFnbWEgcGFjayhwb3ApCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgTUtST01fRVhQT1JURURfU1RSVUNUUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBNS1JPTV9FWFBPUlRFRF9GVU5DVElPTlMgQm9vdGxvYWRlciBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgTUtST00gVmVyc2lvbiBOdW1iZXIKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgVmVyc2lvbiBudW1iZXIgb2YgTUtST00KKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSB3aWxsIHJldHVybiB0aGUgTUtST00gdmVyc2lvbiBudW1iZXIuCisgICovCit1aW50MzJfdCBCTF9HZXRWZXJzaW9uKHZvaWQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBGTUMgSVNQIEZ1bmN0aW9uIGFuZCByZXR1cm4gbWF4aW11bSBBUFJPTSBzaXplCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE1heGltdW0gQVBST00gc2l6ZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIHdpbGwgdW5sb2NrIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3QsIGVuYWJsZSByZWxhdGl2ZSBzZXR0aW5ncyBmb3IgYWNjZXNzIEZNQyBJU1AgY29tbWFuZHMKKyAgKiAgICAgICAgICAgICBhbmQgcmV0dXJuIG1heGltdW0gQVBST00gYnkgY2hpcCBwYWNrYWdlLgorICAqLwordWludDMyX3QgQkxfRW5hYmxlRk1DKHZvaWQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgRk1DIElTUCBGdW5jdGlvbgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgd2lsbCBkaXNhYmxlIHJlbGF0aXZlIHNldHRpbmdzIGZvciBkaXNhYmxlIEZNQyBJU1AgZnVuY3Rpb24gYW5kIGxvY2sgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdAorICAqICAgICAgICAgICAgIHVudGlsIGxhc3QgSVNQIG9wZXJhdGlvbiBpcyBmaW5pc2hlZC4KKyAgKi8KK3ZvaWQgQkxfRGlzYWJsZUZNQyh2b2lkKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgRk1DIElTUCBCdXN5IFN0YXR1cworICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dmFsICAgICAwICAgSVNQIG9wZXJhdGlvbiBpcyBmaW5pc2hlZAorICAqIEByZXR2YWwgICAgIDEgICBJU1Agb3BlcmF0aW9uIGlzIGluIHByb2Nlc3NpbmcKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpbmRpY2F0ZXMgSVNQIG9wZXJhdGlvbiBpbiBpbiBwcm9jZXNzaW5nIG9yIGZpbmlzaGVkLgorICAqLwordWludDMyX3QgQkxfR2V0SVNQU3RhdHVzKHZvaWQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBOb24tc2VjdXJlIEJvdW5kYXJ5CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIEN1cnJlbnQgTm9uLXNlY3VyZSBib3VuZGFyeQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGNhbiBnZXQgY3VycmVudCBOb24tc2VjdXJlIGJvdW5kYXJ5IGFkZHJlc3MuCisgICovCit1aW50MzJfdCBCTF9HZXROU0JvdW5kYXJ5KHZvaWQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBBbGwgRmxhc2ggUmVnaW9uIExvY2sKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHZhbCAgICAgLTEgICAgICBTZXQgZmxhc2ggYWxsIGxvY2sgZmFpbGVkCisgICogQHJldHZhbCAgICAgMCAgICAgICBTZXQgZmxhc2ggYWxsIGxvY2sgb3BlcmF0aW9uIGlzIHN1Y2Nlc3MKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSB3aWxsIHByb3RlY3QgYWxsIGZsYXNoIHJlZ2lvbiByZWFkL3dyaXRlIG9wZXJhdGUgYnkgSUNFIGludGVyZmFjZS4KKyAgKi8KK2ludDMyX3QgQkxfU2V0Rmxhc2hBbGxMb2NrKHZvaWQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgTm9uLXNlY3VyZSBGbGFzaCBBZGRyZXNzIERhdGEgKGZvciBOb24tc2VjdXJlIHJlZ2lvbikKKyAgKiBAcGFyYW1baW5dICB1MzJOU0FkZHIgICBOb24tc2VjdXJlIGZsYXNoIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAwICB1MzJOU0FkZHIgaXNuJ3QgaW4gTm9uLXNlY3VyZSBhcmVhCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMSAgdTMyTlNBZGRyIGlzbid0IHdvcmQgYWxpZ25lZAorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDMgIHUzMk5TQWRkciBpc24ndCB2YWxpZCBmbGFzaCBhZGRyZXNzCisgICogQHJldHZhbCAgICAgLTEgICAgICAgICAgRmxhc2ggcmVhZCBmYWlsZWQKKyAgKiBAcmV0dmFsICAgICBUaGUgZGF0YSBvZiBzcGVjaWZpZWQgTm9uLXNlY3VyZSBhZGRyZXNzCisgICogQGRldGFpbHMgICAgVG8gcmVhZCB3b3JkIGRhdGEgZnJvbSBzcGVjaWZpZWQgTm9uLXNlY3VyZSBmbGFzaCBhZGRyZXNzLgorICAqLwordWludDMyX3QgQkxfRmxhc2hSZWFkKHVpbnQzMl90IHUzMk5TQWRkcik7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBNdWx0aS1Xb3JkIERhdGEgZnJvbSBOb24tc2VjdXJlIEZsYXNoIEFkZHJlc3MgKGZvciBOb24tc2VjdXJlIHJlZ2lvbikKKyAgKiBAcGFyYW1baW5dICB1MzJOU0FkZHIgICAgICAgU3RhcnRpbmcgTm9uLXNlY3VyZSBmbGFzaCBhZGRyZXNzCisgICogQHBhcmFtW291dF0gcHUzMk5TUmFtQnVmICAgIE5vbi1zZWN1cmUgc3JhbSBhZGRyZXNzIHRvIHN0b3JlIHJlYWRpbmcgZGF0YQorICAqIEBwYXJhbVtpbl0gIHUzMlNpemUgICAgICAgICBUb3RhbCByZWFkIGJ5dGUgY291bnRzLCBpdCBzaG91bGQgYmUgd29yZCBhbGlnbmVkIGFuZCBtYXhpbXVtIHNpemUgaXMgb25lIHBhZ2Ugc2l6ZS4KKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAwICAgICAgdTMyTlNBZGRyIG9yIHB1MzJOU1JhbUJ1ZiByZWdpb24gaXNuJ3QgaW4gTm9uLXNlY3VyZSBhcmVhCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMSAgICAgIFdyb25nIHUzMk5TQWRkciwgcHUzMk5TUmFtQnVmIG9yIHUzMlNpemUgcGFyYW1ldGVyCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMyAgICAgIHUzMk5TQWRkciBpc24ndCB2YWxpZCBmbGFzaCBhZGRyZXNzCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwNCAgICAgIHB1MzJOU1JhbUJ1ZiBpc24ndCB2YWxpZCBzcmFtIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgICAgICAgICAgTXVsdGktd29yZHMgcmVhZCBmYWlsZWQKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICAgICAgUmVhZCBvcGVyYXRpb24gaXMgc3VjY2VzcworICAqIEBkZXRhaWxzICAgIFRvIHJlYWQgbXVsdGktd29yZHMgZGF0YSBzdGFydCBmcm9tIHNwZWNpZmllZCBOb24tc2VjdXJlIGZsYXNoIGFkZHJlc3MuCisgICogICAgICAgICAgICAgQW5kIG1heGltdW0gcmVhZCBzaXplIGlzIG9uZSBwYWdlIHNpemUsIDIwNDggYnl0ZXMuCisgICovCitpbnQzMl90IEJMX0ZsYXNoTXVsdGlSZWFkKHVpbnQzMl90IHUzMk5TQWRkciwgdWludDMyX3QgKnB1MzJOU1JhbUJ1ZiwgdWludDMyX3QgdTMyU2l6ZSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUHJvZ3JhbSBEYXRhIGludG8gTm9uLXNlY3VyZSBGbGFzaCBBZGRyZXNzIChmb3IgTm9uLXNlY3VyZSByZWdpb24pCisgICogQHBhcmFtW2luXSAgdTMyTlNBZGRyICAgTm9uLXNlY3VyZSBmbGFzaCBhZGRyZXNzCisgICogQHBhcmFtW2luXSAgdTMyRGF0YSAgICAgMzItYml0IERhdGEgdG8gcHJvZ3JhbQorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDAgIHUzMk5TQWRkciBpc24ndCBpbiBOb24tc2VjdXJlIGFyZWEKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAxICB1MzJOU0FkZHIgaXNuJ3Qgd29yZCBhbGlnbmVkCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMyAgdTMyTlNBZGRyIGlzbid0IHZhbGlkIGZsYXNoIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgICAgICBGbGFzaCB3cml0ZSBmYWlsZWQKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICBQcm9ncmFtIGNvbW1hbmQgaXMgZmluaXNoZWQKKyAgKiBAZGV0YWlscyAgICBUbyBwcm9ncmFtIHdvcmQgZGF0YSBpbnRvIHNwZWNpZmllZCBOb24tc2VjdXJlIGZsYXNoIGFkZHJlc3MuCisgICovCitpbnQzMl90IEJMX0ZsYXNoV3JpdGUodWludDMyX3QgdTMyTlNBZGRyLCB1aW50MzJfdCB1MzJEYXRhKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBQcm9ncmFtIE11bHRpLVdvcmQgRGF0YSBpbnRvIE5vbi1zZWN1cmUgRmxhc2ggQWRkcmVzcyAoZm9yIE5vbi1zZWN1cmUgcmVnaW9uKQorICAqIEBwYXJhbVtpbl0gIHUzMk5TQWRkciAgICAgICBTdGFydGluZyBOb24tc2VjdXJlIGZsYXNoIGFkZHJlc3MKKyAgKiBAcGFyYW1baW5dICBwdTMyTlNSYW1CdWYgICAgTm9uLXNlY3VyZSBzcmFtIGJ1ZmZlciBhZGRyZXNzIHRvIHN0b3JlIHByb2dyYW0gZGF0YQorICAqIEBwYXJhbVtpbl0gIHUzMlNpemUgICAgICAgICBUb3RhbCBwcm9ncmFtIGJ5dGUgY291bnRzLCBpdCBzaG91bGQgYmUgd29yZCBhbGlnbmVkIGFuZCBtYXhpbXVtIHNpemUgaXMgb25lIHBhZ2Ugc2l6ZS4KKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAwICAgICAgdTMyTlNBZGRyIG9yIHB1MzJOU1JhbUJ1ZiByZWdpb24gaXNuJ3QgaW4gTm9uLXNlY3VyZSBhcmVhCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMSAgICAgIFdyb25nIHUzMk5TQWRkciwgcHUzMk5TUmFtQnVmIG9yIHUzMlNpemUgcGFyYW1ldGVyCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMyAgICAgIHUzMk5TQWRkciBpc24ndCB2YWxpZCBmbGFzaCBhZGRyZXNzCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwNCAgICAgIHB1MzJOU1JhbUJ1ZiBpc24ndCB2YWxpZCBzcmFtIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgICAgICAgICAgTXVsdGktd29yZHMgd3JpdGUgZmFpbGVkCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgICAgIFByb2dyYW0gb3BlcmF0aW9uIGlzIGZpbmlzaGVkCisgICogQGRldGFpbHMgICAgVG8gcHJvZ3JhbSBtdWx0aS13b3JkcyBkYXRhIHN0YXJ0IGZyb20gc3BlY2lmaWVkIE5vbi1zZWN1cmUgZmxhc2ggYWRkcmVzcy4KKyAgKiAgICAgICAgICAgICBBbmQgbWF4aW11bSBwcm9ncmFtIHNpemUgaXMgb25lIHBhZ2Ugc2l6ZSwgMjA0OCBieXRlcy4KKyAgKi8KK2ludDMyX3QgQkxfRmxhc2hNdWx0aVdyaXRlKHVpbnQzMl90IHUzMk5TQWRkciwgdWludDMyX3QgKnB1MzJOU1JhbUJ1ZiwgdWludDMyX3QgdTMyU2l6ZSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgTm9uLXNlY3VyZSBGbGFzaCBQYWdlIEVyYXNlIChmb3IgTm9uLXNlY3VyZSByZWdpb24pCisgICogQHBhcmFtW2luXSAgdTMyTlNBZGRyICAgTm9uLXNlY3VyZSBmbGFzaCByZWdpb24gdG8gYmUgZXJhc2VkIGFuZCBtdXN0IGJlIGEgcGFnZSBzaXplIGFsaWduZWQgYWRkcmVzcy4KKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAwICB1MzJOU0FkZHIgcmVnaW9uIGlzbid0IGluIE5vbi1zZWN1cmUgYXJlYQorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDEgIHUzMk5TQWRkciBpc24ndCBwYWdlIHNpemUgYWxpZ25lZAorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDMgIHUzMk5TQWRkciBpc24ndCB2YWxpZCBmbGFzaCBhZGRyZXNzCisgICogQHJldHZhbCAgICAgLTEgICAgICAgICAgUGFnZSBlcmFzZSBmYWlsZWQKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICBQYWdlIGVyYXNlIHN1Y2Nlc3MKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHBlcmZvcm0gcGFnZSBlcmFzZSBjb21tYW5kIG9uIHNwZWNpZmllZCBOb24tc2VjdXJlIGZsYXNoIGFkZHJlc3MuCisgICogICAgICAgICAgICAgQW5kIHRoaXMgYWRkcmVzcyBtdXN0IGJlIGEgcGFnZSBzaXplIGFsaWduZWQgYWRkcmVzcy4KKyAgKi8KK2ludDMyX3QgQkxfRmxhc2hQYWdlRXJhc2UodWludDMyX3QgdTMyTlNBZGRyKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgTm9uLXNlY3VyZSBGbGFzaCBBcmVhIENSQzMyIENoZWNrc3VtIChmb3IgTm9uLXNlY3VyZSByZWdpb24pCisgICogQHBhcmFtW2luXSAgdTMyTlNBZGRyICAgICAgIE5vbi1zZWN1cmUgZmxhc2ggcmVnaW9uIHRvIGJlIGNhbGN1bGF0ZWQuIHUzMk5TQWRkciBtdXN0IGJlIGEgcGFnZSBzaXplIGFsaWduZWQgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dICB1MzJCeXRlQ291bnQgICAgQnl0ZSBjb3VudHMgb2YgTm9uLXNlY3VyZSBmbGFzaCBhcmVhIHRvIGJlIGNhbGN1bGF0ZWQuIEl0IG11c3QgYmUgbXVsdGlwbGUgb2YgMjA0OCBieXRlcy4KKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAwICAgICAgdTMyTlNBZGRyIHJlZ2lvbiBpc24ndCBpbiBOb24tc2VjdXJlIGFyZWEKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAxICAgICAgV3JvbmcgdTMyTlNBZGRyIG9yIHUzMkJ5dGVDb3VudCBwYXJhbWV0ZXIKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAzICAgICAgdTMyTlNBZGRyIGlzbid0IHZhbGlkIGZsYXNoIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgICAgICAgICAgRXhlY3V0ZSBDUkMzMiBvcGVyYXRpb24gZmFpbGVkCisgICogQHJldHZhbCAgICAgUmVzdWx0IG9mIENSQzMyIGNoZWNrc3VtCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgd2lsbCBjYWxjdWxhdGUgdGhlIENSQzMyIGNoZWNrc3VtIHJlc3VsdCBvZiBzcGVjaWZpZWQgbm9uLXNlY3VyZSBmbGFzaCBhcmVhLgorICAqICAgICAgICAgICAgIFRoZSBzdGFydGluZyBhZGRyZXNzIGFuZCBjYWxjdWxhdGVkIHNpemUgbXVzdCBiZSBhbGwgMjA0OCBieXRlcyBwYWdlIHNpemUgYWxpZ25lZC4KKyAgKi8KK3VpbnQzMl90IEJMX0ZsYXNoQ2hlY2tzdW0odWludDMyX3QgdTMyTlNBZGRyLCB1aW50MzJfdCB1MzJCeXRlQ291bnQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIENoZWNrIE5vbi1zZWN1cmUgRmxhc2ggQXJlYSBEYXRhIGFyZSBhbGwgT05FIG9yIG5vdCAoZm9yIE5vbi1zZWN1cmUgcmVnaW9uKQorICAqIEBwYXJhbVtpbl0gIHUzMk5TQWRkciAgICAgICBOb24tc2VjdXJlIGZsYXNoIHJlZ2lvbiB0byBiZSBjYWxjdWxhdGVkLiB1MzJOU0FkZHIgbXVzdCBiZSBhIHBhZ2Ugc2l6ZSBhbGlnbmVkIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSAgdTMyQnl0ZUNvdW50ICAgIEJ5dGUgY291bnRzIG9mIE5vbi1zZWN1cmUgZmxhc2ggYXJlYSB0byBiZSBjYWxjdWxhdGVkLiBJdCBtdXN0IGJlIG11bHRpcGxlIG9mIDIwNDggYnl0ZXMuCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMCAgICAgIHUzMk5TQWRkciByZWdpb24gaXNuJ3QgaW4gTm9uLXNlY3VyZSBhcmVhCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMSAgICAgIFdyb25nIHUzMk5TQWRkciBvciB1MzJCeXRlQ291bnQgcGFyYW1ldGVyCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMyAgICAgIHUzMk5TQWRkciBpc24ndCB2YWxpZCBmbGFzaCBhZGRyZXNzCisgICogQHJldHZhbCAgICAgLTEgICAgICAgICAgICAgIEV4ZWN1dGUgQ2hlY2sgRmxhc2ggQWxsIE9uZSBvcGVyYXRpb24gZmFpbGVkCisgICogQHJldHZhbCAgICAgMHhBMTFGRkZGRiAgICAgIFRoZSBjb250ZW50cyBvZiB2ZXJpZmllZCBOb24tc2VjdXJlIGZsYXNoIGFyZWEgYXJlIDB4RkZGRkZGRkYKKyAgKiBAcmV0dmFsICAgICAweEExMTAwMDAwICAgICAgU29tZSBjb250ZW50cyBvZiB2ZXJpZmllZCBOb24tc2VjdXJlIGZsYXNoIGFyZWEgYXJlIG5vdCAweEZGRkZGRkZGCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBjaGVjayBzcGVjaWZpZWQgTm9uLXNlY3VyZSBmbGFzaCBhcmVhIGFyZSBhbGwgMHhGRkZGRkZGRiBvciBub3QuCisgICovCit1aW50MzJfdCBCTF9DaGVja0ZsYXNoQWxsT25lKHVpbnQzMl90IHUzMk5TQWRkciwgdWludDMyX3QgdTMyQnl0ZUNvdW50KTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIENvbXBhbnkgSUQKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgVGhlIGNvbXBhbnkgSUQgKDMyLWJpdCkKKyAgKiBAZGV0YWlscyAgICBUaGUgY29tcGFueSBJRCBvZiBOdXZvdG9uIGlzIGZpeGVkIHRvIGJlIDB4REEuCisgICovCit1aW50MzJfdCBCTF9SZWFkQ0lEKHZvaWQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgRGV2aWNlIElECisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIFRoZSBkZXZpY2UgSUQgKDMyLWJpdCkKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVhZCBkZXZpY2UgSUQuCisgICovCit1aW50MzJfdCBCTF9SZWFkRElEKHZvaWQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgUHJvZHVjdCBJRAorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBUaGUgcHJvZHVjdCBJRCAoMzItYml0KQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIHByb2R1Y3QgSUQuCisgICovCit1aW50MzJfdCBCTF9SZWFkUElEKHZvaWQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgVUNJRAorICAqIEBwYXJhbVtpbl0gIHUzMkluZGV4ICAgIEluZGV4IG9mIHRoZSBVQ0lEIHRvIHJlYWQgYW5kIHUzMkluZGV4IG11c3QgYmUgMCwgMSwgMiwgb3IgMy4KKyAgKiBAcmV0dXJuICAgICBUaGUgVUNJRCBvZiBzcGVjaWZpZWQgaW5kZXgKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVhZCB1bmlxdWUgY2hpcCBJRCAoVUNJRCkuCisgICovCit1aW50MzJfdCBCTF9SZWFkVUNJRCh1aW50MzJfdCB1MzJJbmRleCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBVSUQKKyAgKiBAcGFyYW1baW5dICB1MzJJbmRleCAgICBVSUQgaW5kZXguIDAgPSBVSURbMzE6MF0sIDEgPSBVSURbNjM6MzJdLCAyID0gVUlEWzk1OjY0XQorICAqIEByZXR1cm4gICAgIFRoZSAzMi1iaXQgdW5pcXVlIElEIGRhdGEgb2Ygc3BlY2lmaWVkIFVJRCBpbmRleAorICAqIEBkZXRhaWxzICAgIFRvIHJlYWQgb3V0IHNwZWNpZmllZCAzMi1iaXQgdW5pcXVlIElELgorICAqLwordWludDMyX3QgQkxfUmVhZFVJRCh1aW50MzJfdCB1MzJJbmRleCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFhPTSBBY3RpdmUgU3RhdHVzCisgICogQHBhcmFtW2luXSAgdTMyWE9NICAgICAgU3BlY2lmaWVkIFhPTSByZWdpb24sIGl0IG11c3QgYmUgYmV0d2VlbiAwfjMuCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMSAgSW52YWxpZCB1MzJYT00gbnVtYmVyCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgQ3VycmVudCBYT00gcmVnaW9uIGlzbid0IGFjdGl2ZSB5ZXQKKyAgKiBAcmV0dmFsICAgICAxICAgICAgICAgICBDdXJyZW50IFhPTSByZWdpb24gaXMgYWN0aXZlCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgd2lsbCByZXR1cm4gc3BlY2lmaWVkIFhPTSByZWdpb24gYWN0aXZlIHN0YXR1cy4KKyAgKi8KK3VpbnQzMl90IEJMX0dldFhPTUFjdGl2ZVN0YXR1cyh1aW50MzJfdCB1MzJYT00pOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgWE9NIFNldHRpbmcgKGZvciBOb24tc2VjdXJlIHJlZ2lvbikKKyAgKiBAcGFyYW1baW5dICB1MzJYT00gICAgICAgICAgU3BlY2lmaWVkIFhPTSByZWdpb24sIGl0IG11c3QgYmUgYmV0d2VlbiAwfjMKKyAgKiBAcGFyYW1bb3V0XSBwdTMyQmFzZSAgICAgICAgUmV0dXJuIHNwZWNpZmllZCBYT00gYmFzZSBhZGRyZXNzCisgICogQHBhcmFtW291dF0gcHUzMlBhZ2VDbnQgICAgIFJldHVybiBzcGVjaWZpZWQgWE9NIHBhZ2UgY291bnQKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAwICAgICAgcHUzMkJhc2UsIHB1MzJQYWdlQ250IG9yIFhPTSBiYXNlIGFkZHJlc3MgaXNuJ3QgaW4gTm9uLXNlY3VyZSBhcmVhCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMSAgICAgIFdyb25nIHUzMlhPTSwgcHUzMkJhc2Ugb3IgcHUzMlBhZ2VDbnQgcGFyYW1ldGVyCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMyAgICAgIFhPTSBiYXNlIGFkZHJlc3MgaXNuJ3QgdmFsaWQgZmxhc2ggYWRkcmVzcworICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDQgICAgICBwdTMyQmFzZSBvciBwdTMyUGFnZUNudCBpc24ndCB2YWxpZCBzcmFtIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDA1ICAgICAgWE9NIHJlZ2lvbiBpc24ndCBjb25maWd1cmVkCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgICAgIFJlYWQgc3BlY2lmaWVkIFhPTSBzZXR0aW5nIHN1Y2Nlc3MKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSB3aWxsIHJlYWQgc3BlY2lmaWVkIFhPTSByZWxhdGl2ZSBzZXR0aW5ncy4KKyAgKi8KK2ludDMyX3QgQkxfUmVhZFhPTVJlZ2lvbih1aW50MzJfdCB1MzJYT00sIHVpbnQzMl90ICpwdTMyQmFzZSwgdWludDMyX3QgKnB1MzJQYWdlQ250KTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgWE9NIFJlZ2lvbiBhbmQgQWN0aXZlIChmb3IgTm9uLXNlY3VyZSByZWdpb24pCisgICogQHBhcmFtW2luXSAgdTMyWE9NICAgICAgICAgIFNwZWNpZmllZCBYT00gcmVnaW9uLCBpdCBtdXN0IGJlIGJldHdlZW4gMH4zCisgICogQHBhcmFtW2luXSAgdTMyQmFzZSAgICAgICAgIEJhc2UgYWRkcmVzcyBvZiBYT00gcmVnaW9uCisgICogQHBhcmFtW2luXSAgdTMyUGFnZUNudCAgICAgIFBhZ2UgY291bnQgb2YgWE9NIHJlZ2lvbgorICAqIEBwYXJhbVtpbl0gIHUzMklzRGVidWdNb2RlICAxOiBFbmFibGUgWE9NIGRlYnVnIG1vZGU7IG90aGVycyB3aWxsIGRpc2FibGUgWE9NIGRlYnVnIG1vZGUuCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMCAgICAgIFhPTSByZWdpb24gaXNuJ3QgaW4gTm9uLXNlY3VyZSBhcmVhCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMSAgICAgIFdyb25nIHUzMlhPTSwgdTMyQmFzZSBvciB1MzJQYWdlQ250IHBhcmFtZXRlcgorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDMgICAgICB1MzJCYXNlIGlzbid0IHZhbGlkIGZsYXNoIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDA2ICAgICAgWE9NIHJlZ2lvbiBoYXMgY29uZmlndXJlZAorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDcgICAgICBYT00gcmVnaW9uIGhhcyBhY3RpdmUKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgICAgICAgICAgU2V0IFhPTSBmYWlsZWQKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICAgICAgU2V0IHNwZWNpZmllZCBYT00gc3VjY2VzcworICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIHdpbGwgc2V0IHNwZWNpZmllZCBYT00gYWN0aXZlLgorICAqLworaW50MzJfdCBCTF9TZXRYT01SZWdpb24odWludDMyX3QgdTMyWE9NLCB1aW50MzJfdCB1MzJCYXNlLCB1aW50MzJfdCB1MzJQYWdlQ250LCB1aW50MzJfdCB1MzJJc0RlYnVnTW9kZSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgRXJhc2UgWE9NIFNldHRpbmcgKGZvciBOb24tc2VjdXJlIHJlZ2lvbikKKyAgKiBAcGFyYW1baW5dICB1MzJYT01CYXNlICBTcGVjaWZpZWQgWE9NIHJlZ2lvbiB0byBiZSBlcmFzZQorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDAgIHUzMlhPTUJhc2Ugb3IgZXJhc2UgWE9NIHJlZ2lvbiBpc24ndCBpbiBOb24tc2VjdXJlIGFyZWEKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAxICB1MzJYT01CYXNlIGlzbid0IHBhZ2Ugc2l6ZSBhbGlnbmVkCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMyAgdTMyWE9NQmFzZSBpc24ndCB2YWxpZCBmbGFzaCBhZGRyZXNzCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwOCAgSW52YWxpZCB1MzJYT01CYXNlIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgICAgICBFcmFzZSBYT00gcmVnaW9uIGZhaWxlZAorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgIEVyYXNlIFhPTSByZWdpb24gc3VjY2VzcworICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIHdpbGwgZXJhc2Ugc3BlY2lmaWVkIFhPTSByZWdpb24gZGF0YSBhbmQgcmVsYXRpdmUgWE9NIHNldHRpbmcuCisgICovCitpbnQzMl90IEJMX0VyYXNlWE9NUmVnaW9uKHVpbnQzMl90IHUzMlhPTUJhc2UpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBYT00gRXJhc2VkIFN0YXR1cworICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgIEVyYXNlIFhPTSBvcGVyYXRpb24gZmFpbGVkCisgICogQHJldHZhbCAgICAgMCAgICAgICBFcmFzZSBYT00gb3BlcmF0aW9uIHN1Y2Nlc3MKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSB3aWxsIHJldHVybiB0aGUgWE9NIGVyYXNlIG9wZXJhdGlvbiBpcyBzdWNjZXNzIG9yIG5vdC4KKyAgKi8KK2ludDMyX3QgQkxfR2V0WE9NRXJhc2VTdGF0dXModm9pZCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBLUEtFWVNUUyBTdGF0dXMKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgS1BLRVlTVFMgcmVnaXN0ZXIgc3RhdHVzCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgY2FuIHJlYWQgS1BST00gS1BLRVlTVFMgcmVnaXN0ZXIgc3RhdHVzLgorICAqLwordWludDMyX3QgQkxfR2V0S1BST01TdGF0dXModm9pZCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBLUEtFWUNOVCBTdGF0dXMKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgS1BLRVlDTlQgcmVnaXN0ZXIgc3RhdHVzCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgY2FuIHJlYWQgS1BST00gS1BLRVlDTlQgcmVnaXN0ZXIgc3RhdHVzLgorICAqLwordWludDMyX3QgQkxfR2V0S1BST01Db3VudGVyKHZvaWQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgS1BDTlQgU3RhdHVzCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIEtQQ05UIHJlZ2lzdGVyIHN0YXR1cworICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGNhbiByZWFkIEtQUk9NIEtQQ05UIHJlZ2lzdGVyIHN0YXR1cy4KKyAgKi8KK3VpbnQzMl90IEJMX0dldEtQUk9NUG93ZXJPbkNvdW50ZXIodm9pZCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgRXhlY3V0ZSBLUFJPTSBLZXkgQ29tcGFyaXNvbgorICAqIEBwYXJhbVtpbl0gIGtleTAgICAgICAgIEtQUk9NIGtleTAKKyAgKiBAcGFyYW1baW5dICBrZXkxICAgICAgICBLUFJPTSBrZXkxCisgICogQHBhcmFtW2luXSAga2V5MiAgICAgICAgS1BST00ga2V5MgorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDkgIEtQUk9NIGZ1bmN0aW9uIGlzbid0IGVuYWJsZWQKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDBBICBUcmlnZ2VyIEtQUk9NIGtleSBjb21wYXJpc29uIGlzIEZPUkJJRAorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMEIgIEtQUk9NIEtleSBpcyBtaXNtYXRjaAorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMEMgIEtQUk9NIGtleSBzdGlsbCBsb2NrZWQKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICBLUFJPTSBLZXkgYXJlIG1hdGNoZWQKKyAgKiBAZGV0YWlscyAgICBXaXRoIHRoaXMgQVBJLCB1c2VyIGNhbiB1bmxvY2sgS1BST00gd3JpdGUtcHJvdGVjdGlvbiBhbmQgdGhlbiBleGVjdXRlIEZNQyBwcm9ncmFtIGNvbW1hbmQgd2VsbC4KKyAgKi8KK2ludDMyX3QgQkxfVHJnS1BST01Db21wYXJlKHVpbnQzMl90IGtleTAsIHVpbnQzMl90IGtleTEsIHVpbnQzMl90IGtleTIpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIEV4ZWN1dGUgQ0hJUCBSZXNldAorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgd2lsbCBwZXJmb3JtIHJlc2V0IENISVAgY29tbWFuZCB0byByZXNldCBjaGlwLgorICAqLwordm9pZCBCTF9SZXNldENoaXAodm9pZCk7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGZvciBTZWN1cmUgY29kZSBvbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICogQGJyaWVmICAgICAgQ2hlY2sgaWYgRUNDIFByaXZhdGUgS2V5IFZhbGlkCisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgZWNjX2N1cnZlICAgVGhlIHByZS1kZWZpbmVkIEVDQyBjdXJ2ZS4KKyAgKiBAcGFyYW1baW5dICBwcml2YXRlX2sgICBUaGUgaW5wdXQgcHJpdmF0ZSBrZXkuCisgICogQHJldHVybiAgICAgMSAgIElzIHZhbGlkLgorICAqIEByZXR1cm4gICAgIDAgICBJcyBub3QgdmFsaWQuCisgICogQHJldHVybiAgICAgLTEgIEludmFsaWQgY3VydmUuCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgcHJpdmF0ZSBrZXkgaXMgcGxhY2VkIGluIHZhbGlkIHJhbmdlIG9mIGN1cnZlLgorICAqLworaW50MzJfdCBYRUNDX0lzUHJpdmF0ZUtleVZhbGlkKFhDUlBUX1QgKnhjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsIGNoYXIgcHJpdmF0ZV9rW10pOworCisKKy8qKgorICAqIEBicmllZiAgICAgIEdlbmVyYXRlIEVDQyBQdWJsaWMgS2V5CisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgZWNjX2N1cnZlICAgVGhlIHByZS1kZWZpbmVkIEVDQyBjdXJ2ZS4KKyAgKiBAcGFyYW1baW5dICBwcml2YXRlX2sgICBUaGUgaW5wdXQgcHJpdmF0ZSBrZXkuCisgICogQHBhcmFtW291dF0gcHVibGljX2sxICAgVGhlIG91dHB1dCBwdWJsaWMga2V5IDEuCisgICogQHBhcmFtW291dF0gcHVibGljX2syICAgVGhlIG91dHB1dCBwdWJsaWMga2V5IDIuCisgICogQHJldHVybiAgICAgMCAgIFN1Y2Nlc3MuCisgICogQHJldHVybiAgICAgLTEgICJlY2NfY3VydmUiIHZhbHVlIGlzIGludmFsaWQuCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIHB1YmxpYyBrZXkgcGFpciBieSBhIHNwZWNpZmllZCBFQ0MgcHJpdmF0ZSBrZXkgYW5kIEVDQyBjdXJ2ZS4KKyAgKi8KK2ludDMyX3QgWEVDQ19HZW5lcmF0ZVB1YmxpY0tleShYQ1JQVF9UICp4Y3JwdCwgRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlLCBjaGFyICpwcml2YXRlX2ssIGNoYXIgcHVibGljX2sxW10sIGNoYXIgcHVibGljX2syW10pOworCisKKy8qKgorICAqIEBicmllZiAgICAgIEdlbmVyYXRlIEVDRFNBIFNpZ25hdHVyZQorICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBnbG9iYWwgWENSUFQgZGF0YQorICAqIEBwYXJhbVtpbl0gIGVjY19jdXJ2ZSAgIFRoZSBwcmUtZGVmaW5lZCBFQ0MgY3VydmUuCisgICogQHBhcmFtW2luXSAgbWVzc2FnZSAgICAgVGhlIGhhc2ggdmFsdWUgb2Ygc291cmNlIGNvbnRleHQuCisgICogQHBhcmFtW2luXSAgZCAgICAgICAgICAgVGhlIHByaXZhdGUga2V5LgorICAqIEBwYXJhbVtpbl0gIGsgICAgICAgICAgIFRoZSBzZWxlY3RlZCByYW5kb20gaW50ZWdlci4KKyAgKiBAcGFyYW1bb3V0XSBSICAgICAgICAgICBSIG9mIHRoZSAoUixTKSBwYWlyIGRpZ2l0YWwgc2lnbmF0dXJlCisgICogQHBhcmFtW291dF0gUyAgICAgICAgICAgUyBvZiB0aGUgKFIsUykgcGFpciBkaWdpdGFsIHNpZ25hdHVyZQorICAqIEByZXR1cm4gICAgIDAgICBTdWNjZXNzLgorICAqIEByZXR1cm4gICAgIC0xICAiZWNjX2N1cnZlIiB2YWx1ZSBpcyBpbnZhbGlkLgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYW4gRUNEU0EgZGlnaXRhbCBzaWduYXR1cmUuCisgICovCitpbnQzMl90IFhFQ0NfR2VuZXJhdGVTaWduYXR1cmUoWENSUFRfVCAqeGNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgY2hhciAqbWVzc2FnZSwgY2hhciAqZCwgY2hhciAqaywgY2hhciAqUiwgY2hhciAqUyk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgVmVyaWZ5IEVDRFNBIFNpZ25hdHVyZQorICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBnbG9iYWwgWENSUFQgZGF0YQorICAqIEBwYXJhbVtpbl0gIGVjY19jdXJ2ZSAgIFRoZSBwcmUtZGVmaW5lZCBFQ0MgY3VydmUuCisgICogQHBhcmFtW2luXSAgbWVzc2FnZSAgICAgVGhlIGhhc2ggdmFsdWUgb2Ygc291cmNlIGNvbnRleHQuCisgICogQHBhcmFtW2luXSAgcHVibGljX2sxICAgVGhlIHB1YmxpYyBrZXkgMS4KKyAgKiBAcGFyYW1baW5dICBwdWJsaWNfazIgICBUaGUgcHVibGljIGtleSAyLgorICAqIEBwYXJhbVtpbl0gIFIgICAgICAgICAgIFIgb2YgdGhlIChSLFMpIHBhaXIgZGlnaXRhbCBzaWduYXR1cmUKKyAgKiBAcGFyYW1baW5dICBTICAgICAgICAgICBTIG9mIHRoZSAoUixTKSBwYWlyIGRpZ2l0YWwgc2lnbmF0dXJlCisgICogQHJldHVybiAgICAgMCAgIFN1Y2Nlc3MuCisgICogQHJldHVybiAgICAgLTEgICJlY2NfY3VydmUiIHZhbHVlIGlzIGludmFsaWQuCisgICogQHJldHVybiAgICAgLTIgIFZlcmlmaWNhdGlvbiBmYWlsZWQuCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBwZXJmb3JtIHRoZSBFQ0RTQSBkaWdpdGFsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uCisgICovCitpbnQzMl90IFhFQ0NfVmVyaWZ5U2lnbmF0dXJlKFhDUlBUX1QgKnhjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsIGNoYXIgKm1lc3NhZ2UsIGNoYXIgKnB1YmxpY19rMSwgY2hhciAqcHVibGljX2syLCBjaGFyICpSLCBjaGFyICpTKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBHZW5lcmF0ZSBFQ0RIIFNlY3JldCBTaGFyZWQgS2V5CisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgZWNjX2N1cnZlICAgVGhlIHByZS1kZWZpbmVkIEVDQyBjdXJ2ZS4KKyAgKiBAcGFyYW1baW5dICBwcml2YXRlX2sgICBPbmUncyBvd24gcHJpdmF0ZSBrZXkuCisgICogQHBhcmFtW2luXSAgcHVibGljX2sxICAgVGhlIG90aGVyIHBhcnR5J3MgcHVibGljIGtleSAxLgorICAqIEBwYXJhbVtpbl0gIHB1YmxpY19rMiAgIFRoZSBvdGhlciBwYXJ0eSdzIHB1YmxpYyBrZXkgMi4KKyAgKiBAcGFyYW1bb3V0XSBzZWNyZXRfeiAgICBUaGUgRUNDIENESCBzZWNyZXQgWi4KKyAgKiBAcmV0dXJuICAgICAwICAgU3VjY2Vzcy4KKyAgKiBAcmV0dXJuICAgICAtMSAgImVjY19jdXJ2ZSIgdmFsdWUgaXMgaW52YWxpZC4KKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGdlbmVyYXRlIGFuIEVDREggc2hhcmVkIGtleS4KKyAgKi8KK2ludDMyX3QgWEVDQ19HZW5lcmF0ZVNlY3JldFooWENSUFRfVCAqeGNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgY2hhciAqcHJpdmF0ZV9rLCBjaGFyIHB1YmxpY19rMVtdLCBjaGFyIHB1YmxpY19rMltdLCBjaGFyIHNlY3JldF96W10pOworCisKKy8qKgorICAqIEBicmllZiAgICAgIENvbnZlcnQgRGF0YSB0byBIZXggRm9ybWF0CisgICogQHBhcmFtW2luXSAgY291bnQgICBCeXRlIGNvdW50cyBmb3IgY29udmVydC4KKyAgKiBAcGFyYW1baW5dICByZWcgICAgIFRoZSBpbnB1dCBkYXRhIGJ1ZmZlci4KKyAgKiBAcGFyYW1bb3V0XSBvdXRwdXQgIFRoZSBvdXRwdXQgZGF0YSBidWZmZXIuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gY29udmVydCB0aGUgZGF0YSB0byBoZXggZm9ybWF0LgorICAqLwordm9pZCBYRUNDX1JlZzJIZXgoaW50MzJfdCBjb3VudCwgdWludDMyX3Qgdm9sYXRpbGUgcmVnW10sIGNoYXIgb3V0cHV0W10pOworCisKKy8qKgorICAqIEBicmllZiAgICAgIENvbnZlcnQgRGF0YSB0byBSZWdpc3RlciBGb3JtYXQKKyAgKiBAcGFyYW1baW5dICBpbnB1dCAgIFRoZSBpbnB1dCBkYXRhIGJ1ZmZlci4KKyAgKiBAcGFyYW1bb3V0XSByZWcgICAgIFRoZSBvdXRwdXQgZGF0YSBidWZmZXIuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gY29udmVydCB0aGUgZGF0YSBpbiBhIHJlZ2lzdGVyIGRhdGEgZm9ybWF0LgorICAqLwordm9pZCBYRUNDX0hleDJSZWcoY2hhciBpbnB1dFtdLCB1aW50MzJfdCB2b2xhdGlsZSByZWdbXSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IElEIEVDQyBSLCBTIGRpZ2l0YWwgc2lnbmF0dXJlIChmb3IgU2VjdXJlIGNvZGUpCisgICogQHBhcmFtW291dF0gUiAgICAgICAgICAgUiBvZiB0aGUgKFIsUykgcGFpciBkaWdpdGFsIHNpZ25hdHVyZQorICAqIEBwYXJhbVtvdXRdIFMgICAgICAgICAgIFMgb2YgdGhlIChSLFMpIHBhaXIgZGlnaXRhbCBzaWduYXR1cmUKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgICAgICBHZXQgUiwgUyBkaWdpdGFsIHNpZ25hdHVyZSBmYWlsCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgU3VjY2VzcworICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIHdpbGwgcmV0dXJuIEVDQyBSLCBTIGRpZ2l0YWwgc2lnbmF0dXJlIG9mIGNoaXAgSUQsIGluY2x1ZGUgUERJRCwgVUlEMH4yIGFuZCBVQ0lEMH4zLgorICAqLworaW50MzJfdCBYRUNDX0dldElERUNDU2lnbmF0dXJlKHVpbnQzMl90ICpSLCB1aW50MzJfdCAqUyk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgT3BlbiBUREVTIEVuY3J5cHQvRGVjcnlwdAorICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBnbG9iYWwgWENSUFQgZGF0YQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgIFRERVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuCisgICogQHBhcmFtW2luXSAgdTMyRW5jRGVjICAgMTogVERFUyBlbmNvZGU7IDA6IFRERVMgZGVjb2RlCisgICogQHBhcmFtW2luXSAgSXMzREVTICAgICAgMTogVERFUzsgMDogREVTCisgICogQHBhcmFtW2luXSAgSXMzS2V5ICAgICAgMTogVERFUyAzIGtleSBtb2RlOyAwOiBUREVTIDIga2V5IG1vZGUKKyAgKiBAcGFyYW1baW5dICB1MzJPcE1vZGUgICBUREVTIG9wZXJhdGlvbiBtb2RlLCBpbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBUREVTX01PREVfRUNCCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBUREVTX01PREVfQ0JDCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBUREVTX01PREVfQ0ZCCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBUREVTX01PREVfT0ZCCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBUREVTX01PREVfQ1RSCisgICogQHBhcmFtW2luXSAgdTMyU3dhcFR5cGUgaXMgVERFUyBpbnB1dC9vdXRwdXQgZGF0YSBzd2FwIGNvbnRyb2wgYW5kIHdvcmQgc3dhcCBjb250cm9sLCBpbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBUREVTX05PX1NXQVAKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfV0hMX1NXQVAKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfT1VUX1NXQVAKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfT1VUX1dITF9TV0FQCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBUREVTX0lOX1NXQVAKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfSU5fV0hMX1NXQVAKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfSU5fT1VUX1NXQVAKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfSU5fT1VUX1dITF9TV0FQCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZW5hYmxlIFRERVMgZW5jcnlwdC9kZWNyeXB0IGZ1bmN0aW9uLgorICAqLwordm9pZCBYVERFU19PcGVuKFhDUlBUX1QgKnhjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJFbmNEZWMsIGludDMyX3QgSXMzREVTLCBpbnQzMl90IElzM0tleSwgdWludDMyX3QgdTMyT3BNb2RlLCB1aW50MzJfdCB1MzJTd2FwVHlwZSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgU3RhcnQgVERFUyBFbmNyeXB0L0RlY3J5cHQKKyAgKiBAcGFyYW1baW5dICB4Y3JwdCAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZ2xvYmFsIFhDUlBUIGRhdGEKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICBUREVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIHUzMkRNQU1vZGUgIFRERVMgRE1BIGNvbnRyb2wsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIENSWVBUT19ETUFfT05FX1NIT1QgIE9uZSBzaG90IFRERVMgZW5jcnlwdC9kZWNyeXB0LgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9DT05USU5VRSAgQ29udGludW91cyBUREVTIGVuY3J5cHQvZGVjcnlwdC4KKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIENSWVBUT19ETUFfTEFTVCAgICAgIExhc3QgVERFUyBlbmNyeXB0L2RlY3J5cHQgb2YgYSBzZXJpZXMgb2YgWFRERVNfU3RhcnQuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gc3RhcnQgVERFUyBlbmNyeXB0L2RlY3J5cHQuCisgICovCit2b2lkIFhUREVTX1N0YXJ0KFhDUlBUX1QgKnhjcnB0LCBpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMkRNQU1vZGUpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBUREVTIEtleXMKKyAgKiBAcGFyYW1baW5dICB4Y3JwdCAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgICAgIFRERVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuCisgICogQHBhcmFtW2luXSAgYXUzMktleXMgICAgICAgIFRoZSBUREVTIGtleXMuIGF1MzJLZXlzWzBdWzBdIGlzIEtleTAgaGlnaCB3b3JkIGFuZCBhdTMyS2V5c1swXVsxXSBpcyBrZXkwIGxvdyB3b3JkLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHNldCBUREVTIGtleXMuCisgICovCit2b2lkIFhUREVTX1NldEtleShYQ1JQVF9UICp4Y3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgYXUzMktleXNbM11bMl0pOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBUREVTIEluaXRpYWwgVmVjdG9ycworICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBnbG9iYWwgWENSUFQgZGF0YQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgIFRERVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuCisgICogQHBhcmFtW2luXSAgdTMySVZIICAgICAgVERFUyBpbml0aWFsIHZlY3RvciBoaWdoIHdvcmQuCisgICogQHBhcmFtW2luXSAgdTMySVZMICAgICAgVERFUyBpbml0aWFsIHZlY3RvciBsb3cgd29yZC4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBzZXQgVERFUyBpbml0aWFsIHZlY3RvcnMuCisgICovCit2b2lkIFhUREVTX1NldEluaXRWZWN0KFhDUlBUX1QgKnhjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJJVkgsIHVpbnQzMl90IHUzMklWTCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFRERVMgRE1BIFRyYW5zZmVyIENvbmZpZ3VyYXRpb24KKyAgKiBAcGFyYW1baW5dICB4Y3JwdCAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZ2xvYmFsIFhDUlBUIGRhdGEKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICBUREVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIHUzMlNyY0FkZHIgIFRERVMgRE1BIHNvdXJjZSBhZGRyZXNzCisgICogQHBhcmFtW2luXSAgdTMyRHN0QWRkciAgVERFUyBETUEgZGVzdGluYXRpb24gYWRkcmVzcworICAqIEBwYXJhbVtpbl0gIHUzMlRyYW5zQ250IFRERVMgRE1BIHRyYW5zZmVyIGJ5dGUgY291bnQKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIFRERVMgRE1BIHRyYW5zZmVyLgorICAqLwordm9pZCBYVERFU19TZXRETUFUcmFuc2ZlcihYQ1JQVF9UICp4Y3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyU3JjQWRkciwgdWludDMyX3QgdTMyRHN0QWRkciwgdWludDMyX3QgdTMyVHJhbnNDbnQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIE9wZW4gU0hBIEVuY3J5cHQKKyAgKiBAcGFyYW1baW5dICB4Y3JwdCAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZ2xvYmFsIFhDUlBUIGRhdGEKKyAgKiBAcGFyYW1baW5dICB1MzJPcE1vZGUgICBTSEEgb3BlcmF0aW9uIG1vZGUsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFNIQV9NT0RFX1NIQTEKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFNIQV9NT0RFX1NIQTIyNAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgU0hBX01PREVfU0hBMjU2CisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBTSEFfTU9ERV9TSEEzODQKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFNIQV9NT0RFX1NIQTUxMgorICAqIEBwYXJhbVtpbl0gIHUzMlN3YXBUeXBlIGlzIHRoZSBTSEEgaW5wdXQvb3V0cHV0IGRhdGEgc3dhcCBjb250cm9sLCBpbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBTSEFfTk9fU1dBUAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgU0hBX09VVF9TV0FQCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBTSEFfSU5fU1dBUAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgU0hBX0lOX09VVF9TV0FQCisgICogQHBhcmFtW2luXSAgaG1hY19rZXlfbGVuICAgIEhNQUMga2V5IGJ5dGUgY291bnQKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBlbmFibGUgU0hBIGVuY3J5cHQgZnVuY3Rpb24uCisgICovCit2b2lkIFhTSEFfT3BlbihYQ1JQVF9UICp4Y3JwdCwgdWludDMyX3QgdTMyT3BNb2RlLCB1aW50MzJfdCB1MzJTd2FwVHlwZSwgdWludDMyX3QgaG1hY19rZXlfbGVuKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTdGFydCBTSEEgRW5jcnlwdAorICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBnbG9iYWwgWENSUFQgZGF0YQorICAqIEBwYXJhbVtpbl0gIHUzMkRNQU1vZGUgIFNIQSBETUEgY29udHJvbCwgaW5jbHVkaW5nOgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9PTkVfU0hPVCAgT25lIHNob3QgU0hBIGVuY3J5cHQuCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX0NPTlRJTlVFICBDb250aW51b3VzIFNIQSBlbmNyeXB0LgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9MQVNUICAgICAgTGFzdCBTSEEgZW5jcnlwdCBvZiBhIHNlcmllcyBvZiBYU0hBX1N0YXJ0LgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHN0YXJ0IFNIQSBlbmNyeXB0LgorICAqLwordm9pZCBYU0hBX1N0YXJ0KFhDUlBUX1QgKnhjcnB0LCB1aW50MzJfdCB1MzJETUFNb2RlKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgU0hBIERNQSBUcmFuc2ZlciBDb25maWd1cmF0aW9uCisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgdTMyU3JjQWRkciAgU0hBIERNQSBzb3VyY2UgYWRkcmVzcworICAqIEBwYXJhbVtpbl0gIHUzMlRyYW5zQ250IFNIQSBETUEgdHJhbnNmZXIgYnl0ZSBjb3VudAorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgU0hBIERNQSB0cmFuc2Zlci4KKyAgKi8KK3ZvaWQgWFNIQV9TZXRETUFUcmFuc2ZlcihYQ1JQVF9UICp4Y3JwdCwgdWludDMyX3QgdTMyU3JjQWRkciwgdWludDMyX3QgdTMyVHJhbnNDbnQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgU0hBIERpZ2VzdAorICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBnbG9iYWwgWENSUFQgZGF0YQorICAqIEBwYXJhbVtvdXRdIHUzMkRpZ2VzdCAgIFRoZSBTSEEgZW5jcnlwdCBvdXRwdXQgZGlnZXN0LgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHJlYWQgdGhlIFNIQSBkaWdlc3QuCisgICovCit2b2lkIFhTSEFfUmVhZChYQ1JQVF9UICp4Y3JwdCwgdWludDMyX3QgdTMyRGlnZXN0W10pOworCisKKy8qKgorICAqIEBicmllZiAgICAgIE9wZW4gQUVTIEVuY3J5cHQvRGVjcnlwdAorICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBnbG9iYWwgWENSUFQgZGF0YQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgIEFFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICB1MzJFbmNEZWMgICAxOiBBRVMgZW5jb2RlOyAgMDogQUVTIGRlY29kZQorICAqIEBwYXJhbVtpbl0gIHUzMk9wTW9kZSAgIEFFUyBvcGVyYXRpb24gbW9kZSwgaW5jbHVkaW5nOgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX01PREVfRUNCCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9DQkMKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIEFFU19NT0RFX0NGQgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX01PREVfT0ZCCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9DVFIKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIEFFU19NT0RFX0NCQ19DUzEKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIEFFU19NT0RFX0NCQ19DUzIKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIEFFU19NT0RFX0NCQ19DUzMKKyAgKiBAcGFyYW1baW5dICB1MzJLZXlTaXplIGlzIEFFUyBrZXkgc2l6ZSwgaW5jbHVkaW5nOgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX0tFWV9TSVpFXzEyOAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX0tFWV9TSVpFXzE5MgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX0tFWV9TSVpFXzI1NgorICAqIEBwYXJhbVtpbl0gIHUzMlN3YXBUeXBlIGlzIEFFUyBpbnB1dC9vdXRwdXQgZGF0YSBzd2FwIGNvbnRyb2wsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIEFFU19OT19TV0FQCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBBRVNfT1VUX1NXQVAKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIEFFU19JTl9TV0FQCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBBRVNfSU5fT1VUX1NXQVAKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBlbmFibGUgQUVTIGVuY3J5cHQvZGVjcnlwdCBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgWEFFU19PcGVuKFhDUlBUX1QgKnhjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJFbmNEZWMsIHVpbnQzMl90IHUzMk9wTW9kZSwgdWludDMyX3QgdTMyS2V5U2l6ZSwgdWludDMyX3QgdTMyU3dhcFR5cGUpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFN0YXJ0IEFFUyBFbmNyeXB0L0RlY3J5cHQKKyAgKiBAcGFyYW1baW5dICB4Y3JwdCAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZ2xvYmFsIFhDUlBUIGRhdGEKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICBBRVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuCisgICogQHBhcmFtW2luXSAgdTMyRE1BTW9kZSAgQUVTIERNQSBjb250cm9sLCBpbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9PTkVfU0hPVCAgT25lIHNob3QgQUVTIGVuY3J5cHQvZGVjcnlwdC4KKyAgKiAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX0NPTlRJTlVFICBDb250aW51b3VzIEFFUyBlbmNyeXB0L2RlY3J5cHQuCisgICogICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9MQVNUICAgICAgTGFzdCBBRVMgZW5jcnlwdC9kZWNyeXB0IG9mIGEgc2VyaWVzIG9mIFhBRVNfU3RhcnQuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gc3RhcnQgQUVTIGVuY3J5cHQvZGVjcnlwdC4KKyAgKi8KK3ZvaWQgWEFFU19TdGFydChYQ1JQVF9UICp4Y3JwdCwgaW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJETUFNb2RlKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgQUVTIEtleXMKKyAgKiBAcGFyYW1baW5dICB4Y3JwdCAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZ2xvYmFsIFhDUlBUIGRhdGEKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICBBRVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuCisgICogQHBhcmFtW2luXSAgYXUzMktleXMgICAgQW4gd29yZCBhcnJheSBjb250YWlucyBBRVMga2V5cy4KKyAgKiBAcGFyYW1baW5dICB1MzJLZXlTaXplIGlzIEFFUyBrZXkgc2l6ZSwgaW5jbHVkaW5nOgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX0tFWV9TSVpFXzEyOAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX0tFWV9TSVpFXzE5MgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX0tFWV9TSVpFXzI1NgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHNldCBBRVMga2V5cy4KKyAgKi8KK3ZvaWQgWEFFU19TZXRLZXkoWENSUFRfVCAqeGNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IGF1MzJLZXlzW10sIHVpbnQzMl90IHUzMktleVNpemUpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBBRVMgSW5pdGlhbCBWZWN0b3JzCisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgQUVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIGF1MzJJViAgICAgIEEgZm91ciBlbnRyeSB3b3JkIGFycmF5IGNvbnRhaW5zIEFFUyBpbml0aWFsIHZlY3RvcnMuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gc2V0IEFFUyBpbml0aWFsIHZlY3RvcnMuCisgICovCit2b2lkIFhBRVNfU2V0SW5pdFZlY3QoWENSUFRfVCAqeGNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IGF1MzJJVltdKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgQUVTIERNQSBUcmFuc2ZlciBDb25maWd1cmF0aW9uCisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgIEFFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICB1MzJTcmNBZGRyICAgQUVTIERNQSBzb3VyY2UgYWRkcmVzcworICAqIEBwYXJhbVtpbl0gIHUzMkRzdEFkZHIgICBBRVMgRE1BIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAgKiBAcGFyYW1baW5dICB1MzJUcmFuc0NudCAgQUVTIERNQSB0cmFuc2ZlciBieXRlIGNvdW50CisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBBRVMgRE1BIHRyYW5zZmVyLgorICAqLwordm9pZCBYQUVTX1NldERNQVRyYW5zZmVyKFhDUlBUX1QgKnhjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJTcmNBZGRyLCB1aW50MzJfdCB1MzJEc3RBZGRyLCB1aW50MzJfdCB1MzJUcmFuc0NudCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgSW5pdGlhbCBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciAoZm9yIFNlY3VyZSBjb2RlKQorICAqCisgICogQHBhcmFtW2luXSAgcm5nICAgICBUaGUgc3RydWN0dXJlIG9mIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICogQHBhcmFtW2luXSAgb3B0ICAgICBPcGVyYXRpb24gbW9kZXMuIFBvc3NpYmxlIG9wdGlvbnMgYXJlLAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIChYVFJOR19QUk5HIHwgWFRSTkdfTElSQzMySyksCisgICogICAgICAgICAgICAgICAgICAgICAgICAgKFhUUk5HX1BSTkcgfCBYVFJOR19MWFQpLAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIChYVFJOR19TV1JORyB8IFhUUk5HX0xJUkMzMkspLAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIChYVFJOR19TV1JORyB8IFhUUk5HX0xYVCkKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgIEZhaWwKKyAgKiBAcmV0dmFsICAgICAwICAgICAgIFN1Y2Nlc3MKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gaW5pdGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgKiAgICAgICAgICAgICBBZnRlciBpbml0aWFsIHRoaXMgQVBJIHN1Y2Nlc3MsIHVzZXIgY2FuIGNhbGwgWFRSTkdfUmFuZG9tIEFQSSB0byBnZW5lcmF0ZSB0aGUgcmFuZG9tIG51bWJlci4KKyAgKi8KK2ludDMyX3QgWFRSTkdfUmFuZG9tSW5pdChYVFJOR19UICpybmcsIHVpbnQzMl90IG9wdCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgR2VuZXJhdGUgUmFuZG9tIE51bWJlciAoZm9yIFNlY3VyZSBjb2RlKQorICAqCisgICogQHBhcmFtW2luXSAgcm5nICAgICBUaGUgc3RydWN0dXJlIG9mIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICogQHBhcmFtW291dF0gcCAgICAgICBTdGFydGluZyBidWZmZXIgYWRkcmVzcyB0byBzdG9yZSByYW5kb20gbnVtYmVyCisgICogQHBhcmFtW2luXSAgc2l6ZSAgICBUb3RhbCBieXRlIGNvdW50cyBvZiByYW5kb20gbnVtYmVyCisgICogQHJldHZhbCAgICAgLTEgICAgICBGYWlsCisgICogQHJldHZhbCAgICAgMCAgICAgICBTdWNjZXNzCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBnZW5lcmF0ZSByYW5kb20gbnVtYmVyLgorICAqLworaW50MzJfdCBYVFJOR19SYW5kb20oWFRSTkdfVCAqcm5nLCB1aW50OF90ICpwLCB1aW50MzJfdCBzaXplKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgSUQgRUNDIFIsIFMgRGlnaXRhbCBTaWduYXR1cmUgKGZvciBTZWN1cmUgY29kZSkKKyAgKiBAcGFyYW1bb3V0XSBSICAgICAgICAgICBSIG9mIHRoZSAoUixTKSBwYWlyIGRpZ2l0YWwgc2lnbmF0dXJlCisgICogQHBhcmFtW291dF0gUyAgICAgICAgICAgUyBvZiB0aGUgKFIsUykgcGFpciBkaWdpdGFsIHNpZ25hdHVyZQorICAqIEByZXR2YWwgICAgIC0xICAgICAgICAgIEdldCBSLCBTIGRpZ2l0YWwgc2lnbmF0dXJlIGZhaWwKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICBTdWNjZXNzCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgd2lsbCByZXR1cm4gRUNDIFIsIFMgZGlnaXRhbCBzaWduYXR1cmUgb2YgY2hpcCBJRCwgaW5jbHVkZSBQRElELCBVSUQwfjIgYW5kIFVDSUQwfjMuCisgICovCitpbnQzMl90IEJMX0dldElERUNDU2lnbmF0dXJlKHVpbnQzMl90ICpSLCB1aW50MzJfdCAqUyk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgSW5pdGlhbCBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciAoZm9yIFNlY3VyZSBjb2RlKQorICAqCisgICogQHBhcmFtW2luXSAgcm5nICAgICBUaGUgc3RydWN0dXJlIG9mIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICogQHBhcmFtW2luXSAgb3B0ICAgICBPcGVyYXRpb24gbW9kZXMuIFBvc3NpYmxlIG9wdGlvbnMgYXJlLAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIChCTF9STkdfUFJORyB8IEJMX1JOR19MSVJDMzJLKSwKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAoQkxfUk5HX1BSTkcgfCBCTF9STkdfTFhUKSwKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAoQkxfUk5HX1NXUk5HIHwgQkxfUk5HX0xJUkMzMkspLAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIChCTF9STkdfU1dSTkcgfCBCTF9STkdfTFhUKQorICAqIEByZXR2YWwgICAgIC0xICAgICAgRmFpbAorICAqIEByZXR2YWwgICAgIDAgICAgICAgU3VjY2VzcworICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBpbml0aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAqICAgICAgICAgICAgIEFmdGVyIGluaXRpYWwgdGhpcyBBUEkgc3VjY2VzcywgdXNlciBjYW4gcGVyZm9ybSBCTF9SYW5kb20gQVBJIHRvIGdlbmVyYXRlIHRoZSByYW5kb20gbnVtYmVyLgorICAqLworaW50MzJfdCBCTF9SYW5kb21Jbml0KEJMX1JOR19UICpybmcsIHVpbnQzMl90IG9wdCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgR2VuZXJhdGUgUmFuZG9tIE51bWJlciAoZm9yIFNlY3VyZSBjb2RlKQorICAqCisgICogQHBhcmFtW2luXSAgcm5nICAgICBUaGUgc3RydWN0dXJlIG9mIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICogQHBhcmFtW291dF0gcCAgICAgICBTdGFydGluZyBidWZmZXIgYWRkcmVzcyB0byBzdG9yZSByYW5kb20gbnVtYmVyCisgICogQHBhcmFtW2luXSAgc2l6ZSAgICBUb3RhbCBieXRlIGNvdW50cyBvZiByYW5kb20gbnVtYmVyCisgICogQHJldHZhbCAgICAgLTEgICAgICBGYWlsCisgICogQHJldHZhbCAgICAgMCAgICAgICBTdWNjZXNzCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBnZW5lcmF0ZSByYW5kb20gbnVtYmVyLgorICAqLworaW50MzJfdCBCTF9SYW5kb20oQkxfUk5HX1QgKnJuZywgdWludDhfdCAqcCwgdWludDMyX3Qgc2l6ZSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgSW5pdGlhbGl6ZSBTZWN1cmVJU1AgRnVuY3Rpb24gKGZvciBTZWN1cmUgY29kZSkKKyAgKiBAcGFyYW1baW5dICBwSVNQSW5mbyAgICBUaGUgSVNQIGluZm9ybWF0aW9uIGRhdGEgYnVmZmVyIGFkZHJlc3MKKyAgKiBAcGFyYW1baW5dICBwVVNCREluZm8gICBVU0IgZGF0YSBidWZmZXIgZm9yIFNlY3VyZUlTUCBVU0IKKyAgKiBAcGFyYW1baW5dICBtb2RlICAgICAgICBPcGVyYXRpb24gbW9kZS4gUG9zc2libGUgb3B0aW9ucyBhcmUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTQl9NT0RFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX01PREUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTQl9VQVJUX01PREUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJFU1lOQ19JU1AKKyAgKiBAcmV0dXJuICAgICBSZXR1cm4gcHJvY2VzcyBzdGF0dXMgYW5kIGV4aXQgU2VjdXJlSVNQIG1vZGUuCisgICogQGRldGFpbHMgICAgRXhlY3V0aW5nIHRoaXMgQVBJIHdpbGwgaW5pdGlhbGl6ZSBVU0Igb3IgVUFSVDEgU2VjdXJlSVNQIGZ1bmN0aW9uLgorICAqICAgICAgICAgICAgIFVzZXIgY2FuIHVzZSBTZWN1cmVJU1AgVG9vbCB0byBjb21tdW5pY2F0ZSB3aXRoIHRhcmdldCBjaGlwLgorICAgICAgICBDb25maWd1cmUgcmVsYXRlIFVTQiBhbmQgVUFSVDEgc2V0dGluZ3MgYXJlIG5lY2Vzc2FyeSBiZWZvcmUgZXhlY3V0aW5nIHRoaXMgQVBJLgorICAqLworaW50MzJfdCBCTF9TZWN1cmVJU1BJbml0KElTUF9JTkZPX1QgKnBJU1BJbmZvLCBCTF9VU0JEX0lORk9fVCAqcFVTQkRJbmZvLCBFX0lTUF9NT0RFIG1vZGUpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFByb2Nlc3MgVVNCRCBJbnRlcnJ1cHQgKGZvciBTZWN1cmUgY29kZSkKKyAgKiBAcGFyYW1baW5dICBwZm5FUFRhYmxlICAgICAgU3RhcnRpbmcgYWRkcmVzcyB0byBzdG9yZSBFUCBjYWxsYmFjayBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gIHBJbmZvICAgICAgICAgICBUaGUgSVNQIGluZm9ybWF0aW9uIGRhdGEgYnVmZmVyIGFkZHJlc3MKKyAgKiBAcGFyYW1baW5dICBwVVNCREluZm8gICAgICAgVVNCIGRhdGEgYnVmZmVyIGZvciBTZWN1cmVJU1AgVVNCCisgICogQHJldHZhbCAgICAgLTEgICAgICBFeGVjdXRlIEFQSSBpbiBOb24tc2VjdXJlIGNvZGUKKyAgKiBAcmV0dmFsICAgICAwICAgICAgIFByb2Nlc3MgVVNCRCBpbnRlcnJ1cHQgZXZlbnQgc3VjY2VzcworICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gcHJvY2VzcyBVU0JEIGNvbW1hbmQgYW5kIHNob3VsZCBiZSBjYWxsZWQgaW4gVVNCRF9JUlFIYW5kbGVyKCkuCisgICovCitpbnQzMl90IEJMX1Byb2Nlc3NVU0JESW50ZXJydXB0KHVpbnQzMl90ICpwZm5FUFRhYmxlLCB1aW50MzJfdCAqcEluZm8sIHVpbnQzMl90ICpwVVNCREluZm8pOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFByb2Nlc3MgVUFSVDEgSW50ZXJydXB0IChmb3IgU2VjdXJlIGNvZGUpCisgICogQHBhcmFtW2luXSAgcEluZm8gICBUaGUgSVNQIGluZm9ybWF0aW9uIGRhdGEgYnVmZmVyIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgIEV4ZWN1dGUgQVBJIGluIE5vbi1zZWN1cmUgY29kZQorICAqIEByZXR2YWwgICAgIDAgICAgICAgUHJvY2VzcyBVQVJUMSBpbnRlcnJ1cHQgZXZlbnQgc3VjY2VzcworICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gcHJvY2VzcyBVQVJUMSBjb21tYW5kIGFuZCBzaG91bGQgYmUgY2FsbGVkIGluIFVBUlQxX0lSUUhhbmRsZXIoKS4KKyAgKi8KK2ludDMyX3QgQkxfUHJvY2Vzc1VBUlQxSW50ZXJydXB0KHVpbnQzMl90ICpwSW5mbyk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFZlbmRvciBEYXRhIChmb3IgU2VjdXJlIGNvZGUpCisgICogQHBhcmFtW2luXSAgcEluZm8gICAgICAgVGhlIElTUCBpbmZvcm1hdGlvbiBkYXRhIGJ1ZmZlciBhZGRyZXNzCisgICogQHBhcmFtW291dF0gcHUzMkRhdGEgICAgRGF0YSBidWZmZXIgdG8gc3RvcmUgdmVuZG9yIGRhdGEuIE1heGltdW0gYnVmZmVyIHNpemUgaXMgNDQgYnl0ZXMuCisgICogQHBhcmFtW2luXSAgcHUzMkJ1ZiAgICAgSW50ZXJuYWwgdXNlZCBkYXRhIGJ1ZmZlciBhZGRyZXNzCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgU3VjY2VzcworICAqIEByZXR2YWwgICAgIC0xICAgICAgICAgIEludmFsaWQgY29tbWFuZCBwYWNrZXQKKyAgKiBAcmV0dmFsICAgICAtMiAgICAgICAgICBOb3QgaW4gdmVuZG9yIGZ1bmN0aW9uCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBnZXQgdGhlIHZlbmRvciBkYXRhIGFuZCBzaG91bGQgYmUgY2FsbGVkIGluIHRoZSB2ZW5kb3IgZnVuY3Rpb24uCisgICovCitpbnQzMl90IEJMX0dldFZlbmRvckRhdGEodWludDMyX3QgKnBJbmZvLCB1aW50MzJfdCAqcHUzMkRhdGEsIHVpbnQzMl90ICpwdTMyQnVmKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBSZXR1cm4gVmVuZG9yIERhdGEgKGZvciBTZWN1cmUgY29kZSkKKyAgKiBAcGFyYW1baW5dICBwdTMyRGF0YSAgICBEYXRhIGJ1ZmZlciB0byBzdG9yZSByZXNwb25zZSBkYXRhCisgICogQHBhcmFtW2luXSAgdTMyTGVuICAgICAgRGF0YSBidWZmZXIgbGVuZ3RoLCBtYXhpbXVtIHNpemUgaXMgNDAgYnl0ZXMuCisgICogQHBhcmFtW2luXSAgcHUzMkJ1ZiAgICAgSW50ZXJuYWwgdXNlZCBkYXRhIGJ1ZmZlciBhZGRyZXNzCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgU3VjY2VzcworICAqIEByZXR2YWwgICAgIC0xICAgICAgICAgIEludmFsaWQgYnVmZmVyIGxlbmd0aAorICAqIEByZXR2YWwgICAgIC0yICAgICAgICAgIE5vdCBpbiB2ZW5kb3IgZnVuY3Rpb24KKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHJldHVybiB2ZW5kb3IgZGF0YSB0byBzZXJ2ZXIgYW5kIHNob3VsZCBiZSBjYWxsZWQgaW4gdGhlIHZlbmRvciBmdW5jdGlvbi4KKyAgKi8KK2ludDMyX3QgQkxfUmV0dXJuVmVuZG9yRGF0YSh1aW50MzJfdCAqcHUzMkRhdGEsIHVpbnQzMl90IHUzMkxlbiwgdWludDMyX3QgKnB1MzJCdWYpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIEdlbmVyYXRlIENvbW1hbmQgUmVzcG9uc2UgRGF0YSAoZm9yIFNlY3VyZSBjb2RlKQorICAqIEBwYXJhbVtpbl0gIHBDTUQgICAgICAgIEJ1ZmZlciBhZGRyZXNzIHRvIHN0b3JlIGNvbW1hbmQgZGF0YQorICAqIEBwYXJhbVtpbl0gIHBJU1BJbmZvICAgIFRoZSBJU1AgaW5mb3JtYXRpb24gZGF0YSBidWZmZXIgYWRkcmVzcworICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgIENvbW1hbmQgc3VjY2VzcworICAqIEByZXR2YWwgICAgIE90aGVyICAgICAgIENvbW1hbmQgZmFpbAorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZ2VuZXJhdGUgcmVzcG9uc2UgZGF0YSB0byBzZXJ2ZXIuCisgICovCitpbnQzMl90IENtZF9HZW5Sc3BQYWNrZXQoQ01EX1BBQ0tFVF9UICpwQ01ELCBJU1BfSU5GT19UICpwSVNQSW5mbyk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUGFyc2UgQ29tbWFuZCAoZm9yIFNlY3VyZSBjb2RlKQorICAqIEBwYXJhbVtpbl0gIHBDTUQgICAgICAgIEJ1ZmZlciBhZGRyZXNzIHRvIHN0b3JlIGNvbW1hbmQKKyAgKiBAcGFyYW1baW5dICBwSVNQSW5mbyAgICBUaGUgSVNQIGluZm9ybWF0aW9uIGRhdGEgYnVmZmVyIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICBDb21tYW5kIHN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgICBPdGhlciAgICAgICBDb21tYW5kIGZhaWwKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHBhcnNlIGRhdGEgZnJvbSBzZXJ2ZXIuCisgICovCitpbnQzMl90IENtZF9QYXJzZVJlcVBhY2tldChDTURfUEFDS0VUX1QgKnBDTUQsIElTUF9JTkZPX1QgKnBJU1BJbmZvKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBQYXJzZSBDT05ORUNUIENvbW1hbmQgKGZvciBTZWN1cmUgY29kZSkKKyAgKiBAcGFyYW1baW5dICBwSVNQSW5mbyAgICBUaGUgSVNQIGluZm9ybWF0aW9uIGRhdGEgYnVmZmVyIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICBTdWNjZXNzCisgICogQHJldHZhbCAgICAgT3RoZXIgICAgICAgQ29tbWFuZCBmYWlsCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCBmb3IgcGFyc2UgQ09OTkVDVCBjb21tYW5kIG9ubHkuCisgICovCitpbnQzMl90IFBhcnNlQ09OTkVDVChJU1BfSU5GT19UICpwSVNQSW5mbyk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUGFyc2UgcmVsYXRlZCBFQ0RIIENvbW1hbmRzIChmb3IgU2VjdXJlIGNvZGUpCisgICogQHBhcmFtW2luXSAgcElTUEluZm8gICAgVGhlIElTUCBpbmZvcm1hdGlvbiBkYXRhIGJ1ZmZlciBhZGRyZXNzCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgU3VjY2VzcworICAqIEByZXR2YWwgICAgIE90aGVyICAgICAgIENvbW1hbmQgZmFpbAorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgZm9yIHBhcnNlIHJlbGF0ZWQgRUNESCBjb21tYW5kcy4KKyAgKi8KK2ludDMyX3QgUGFyc2VFQ0RIKElTUF9JTkZPX1QgKnBJU1BJbmZvKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBQYXJzZSBDb21tYW5kcyAoZm9yIFNlY3VyZSBjb2RlKQorICAqIEBwYXJhbVtpbl0gIHBJU1BJbmZvICAgIFRoZSBJU1AgaW5mb3JtYXRpb24gZGF0YSBidWZmZXIgYWRkcmVzcworICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgIFN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgICBPdGhlciAgICAgICBDb21tYW5kIGZhaWwKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIGZvciBwYXJzZSBhbGwgY29tbWFuZHMgZXhjZXB0IENPTk5FQ1QgYW5kIHJlbGF0ZWQgRUNESCBjb21tYW5kcy4KKyAgKi8KK2ludDMyX3QgUGFyc2VDb21tYW5kcyhJU1BfSU5GT19UICpwSVNQSW5mbyk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgSW5pdGlhbGl6ZSBVU0JEIE1vZHVsZSAoZm9yIFNlY3VyZSBjb2RlKQorICAqIEBwYXJhbVtpbl0gIHBhcmFtICAgICAgICAgICBUaGUgc3RydWN0dXJlIG9mIFVTQkQgaW5mb3JtYXRpb24KKyAgKiBAcGFyYW1baW5dICBwZm5DbGFzc1JlcSAgICAgVVNCIENsYXNzIHJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBwZm5TZXRJbnRlcmZhY2UgVVNCIFNldCBJbnRlcmZhY2UgcmVxdWVzdCBjYWxsYmFjayBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gIHBVU0JESW5mbyAgICAgICBVU0IgZGF0YSBidWZmZXIgZm9yIFNlY3VyZUlTUCBVU0IgbW9kZQorICAqIEByZXR2YWwgICAgIC0xICAgICAgICAgICAgICBFeGVjdXRlIEFQSSBpbiBOb24tc2VjdXJlIGNvZGUKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICAgICAgU3VjY2VzcworICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBlbmFibGUgVVNCIGNvbnRyb2xsZXIsIFVTQiBQSFkgdHJhbnNjZWl2ZXIgYW5kIHB1bGwtdXAgcmVzaXN0b3Igb2YgVVNCX0QrIHBpbi4gVVNCIFBIWSB3aWxsIGRyaXZlIFNFMCB0byBidXMuCisgICovCitpbnQzMl90IEJMX1VTQkRPcGVuKGNvbnN0IFNfVVNCRF9JTkZPX1QgKnBhcmFtLCBDTEFTU19SRVEgcGZuQ2xhc3NSZXEsIFNFVF9JTlRFUkZBQ0VfUkVRIHBmblNldEludGVyZmFjZSwgdWludDMyX3QgKnBVU0JESW5mbyk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgSW5zdGFsbCBFUCBDYWxsYmFjayBGdW5jdGlvbiAoZm9yIFNlY3VyZSBjb2RlKQorICAqIEBwYXJhbVtpbl0gIGVwICAgICAgICAgICAgICBFUCBudW1iZXIKKyAgKiBAcGFyYW1baW5dICBwZm5FUEhhbmRsZXIgICAgRVAgY2FsbGJhY2sgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBwZm5FUFRhYmxlICAgICAgU3RhcnRpbmcgYWRkcmVzcyB0byBzdG9yZSBFUCBjYWxsYmFjayBmdW5jdGlvbgorICAqIEByZXR2YWwgICAgIC0xICAgICAgRmFpbAorICAqIEByZXR2YWwgICAgIDAgICAgICAgU3VjY2VzcworICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgc3BlY2lmaWMgRVAgY2FsbGJhY2sgZnVuY3Rpb24KKyAgKi8KK2ludDMyX3QgQkxfVVNCREluc3RhbGxFUEhhbmRsZXIodWludDMyX3QgZXAsIHZvaWQgKnBmbkVQSGFuZGxlciwgdWludDMyX3QgKnBmbkVQVGFibGUpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFN0YXJ0IFVTQkQgRnVuY3Rpb24gKGZvciBTZWN1cmUgY29kZSkKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHZhbCAgICAgLTEgICAgICBFeGVjdXRlIEFQSSBpbiBOb24tc2VjdXJlIGNvZGUKKyAgKiBAcmV0dmFsICAgICAwICAgICAgIFN1Y2Nlc3MKKyAgKiBAZGV0YWlscyAgICBFbmFibGUgV0FLRVVQLCBGTERFVCwgVVNCIGFuZCBCVVMgaW50ZXJydXB0cy4gRGlzYWJsZSBzb2Z0d2FyZS1kaXNjb25uZWN0IGZ1bmN0aW9uIGFmdGVyIDEwMG1zIGRlbGF5IHdpdGggU3lzVGljayB0aW1lci4KKyAgKi8KK2ludDMyX3QgQkxfVVNCRFN0YXJ0KHZvaWQpOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgTUtST01fRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgTUtST01fRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAvKiBfX01LUk9NX0xJQl9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvb3RnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9vdGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDZkYzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvb3RnLmgKQEAgLTAsMCArMSwyNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBvdGcuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIE9URyBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19PVEdfSF9fCisjZGVmaW5lIF9fT1RHX0hfXworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBJbmNsdWRlIHJlbGF0ZWQgaGVhZGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaW5jbHVkZSAiTTIzNTEuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIE9UR19Ecml2ZXIgT1RHIERyaXZlcgorICBAeworKi8KKworCisvKiogQGFkZHRvZ3JvdXAgT1RHX0VYUE9SVEVEX0NPTlNUQU5UUyBPVEcgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogT1RHIGNvbnN0YW50IGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBPVEdfVkJVU19FTl9BQ1RJVkVfSElHSCAgICAgICgwVUwpIC8qITwgVVNCIFZCVVMgcG93ZXIgc3dpdGNoIGVuYWJsZSBzaWduYWwgaXMgYWN0aXZlIGhpZ2guICovCisjZGVmaW5lIE9UR19WQlVTX0VOX0FDVElWRV9MT1cgICAgICAgKDFVTCkgLyohPCBVU0IgVkJVUyBwb3dlciBzd2l0Y2ggZW5hYmxlIHNpZ25hbCBpcyBhY3RpdmUgbG93LiAqLworI2RlZmluZSBPVEdfVkJVU19TVF9WQUxJRF9ISUdIICAgICAgICgwVUwpIC8qITwgVVNCIFZCVVMgcG93ZXIgc3dpdGNoIHZhbGlkIHN0YXR1cyBpcyBoaWdoLiAqLworI2RlZmluZSBPVEdfVkJVU19TVF9WQUxJRF9MT1cgICAgICAgICgxVUwpIC8qITwgVVNCIFZCVVMgcG93ZXIgc3dpdGNoIHZhbGlkIHN0YXR1cyBpcyBsb3cuICovCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBPVEdfRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIE9UR19FWFBPUlRFRF9GVU5DVElPTlMgT1RHIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIERlZmluZSBNYWNyb3MgYW5kIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIE9URyBmdW5jdGlvbgorICAqIEBwYXJhbSBOb25lCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBPVEdFTiBiaXQgb2YgT1RHX0NUTCByZWdpc3RlciB0byBlbmFibGUgT1RHIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBPVEdfRU5BQkxFKCkgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoT1RHX05TLT5DVEwgfD0gT1RHX0NUTF9PVEdFTl9Nc2spOihPVEctPkNUTCB8PSBPVEdfQ1RMX09UR0VOX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBPVEcgZnVuY3Rpb24KKyAgKiBAcGFyYW0gTm9uZQorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBPVEdFTiBiaXQgb2YgT1RHX0NUTCByZWdpc3RlciB0byBkaXNhYmxlIE9URyBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgT1RHX0RJU0FCTEUoKSAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChPVEdfTlMtPkNUTCAmPSB+T1RHX0NUTF9PVEdFTl9Nc2spOihPVEctPkNUTCAmPSB+T1RHX0NUTF9PVEdFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBVU0IgUEhZCisgICogQHBhcmFtIE5vbmUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBXaGVuIHRoZSBVU0Igcm9sZSBpcyBzZWxlY3RlZCBhcyBPVEcgZGV2aWNlLCB1c2UgdGhpcyBtYWNybyB0byBlbmFibGUgVVNCIFBIWS4KKyAgKiAgICAgICAgICBUaGlzIG1hY3JvIHdpbGwgc2V0IE9UR1BIWUVOIGJpdCBvZiBPVEdfUEhZQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBVU0IgUEhZLgorICAqLworI2RlZmluZSBPVEdfRU5BQkxFX1BIWSgpICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKE9UR19OUy0+UEhZQ1RMIHw9IE9UR19QSFlDVExfT1RHUEhZRU5fTXNrKTooT1RHLT5QSFlDVEwgfD0gT1RHX1BIWUNUTF9PVEdQSFlFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgVVNCIFBIWQorICAqIEBwYXJhbSBOb25lCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIE9UR1BIWUVOIGJpdCBvZiBPVEdfUEhZQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgVVNCIFBIWS4KKyAgKi8KKyNkZWZpbmUgT1RHX0RJU0FCTEVfUEhZKCkgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoT1RHX05TLT5QSFlDVEwgJj0gfk9UR19QSFlDVExfT1RHUEhZRU5fTXNrKTooT1RHLT5QSFlDVEwgJj0gfk9UR19QSFlDVExfT1RHUEhZRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgSUQgZGV0ZWN0aW9uIGZ1bmN0aW9uCisgICogQHBhcmFtIE5vbmUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2V0IElEREVURU4gYml0IG9mIE9UR19QSFlDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIElEIGRldGVjdGlvbiBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgT1RHX0VOQUJMRV9JRF9ERVRFQ1QoKSAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChPVEdfTlMtPlBIWUNUTCB8PSBPVEdfUEhZQ1RMX0lEREVURU5fTXNrKTooT1RHLT5QSFlDVEwgfD0gT1RHX1BIWUNUTF9JRERFVEVOX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBJRCBkZXRlY3Rpb24gZnVuY3Rpb24KKyAgKiBAcGFyYW0gTm9uZQorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBJRERFVEVOIGJpdCBvZiBPVEdfUEhZQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgSUQgZGV0ZWN0aW9uIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBPVEdfRElTQUJMRV9JRF9ERVRFQ1QoKSAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChPVEdfTlMtPlBIWUNUTCAmPSB+T1RHX1BIWUNUTF9JRERFVEVOX01zayk6KE9URy0+UEhZQ1RMICY9IH5PVEdfUEhZQ1RMX0lEREVURU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgT1RHIHdha2UtdXAgZnVuY3Rpb24KKyAgKiBAcGFyYW0gTm9uZQorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgV0tFTiBiaXQgb2YgT1RHX0NUTCByZWdpc3RlciB0byBlbmFibGUgT1RHIHdha2UtdXAgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIE9UR19FTkFCTEVfV0FLRVVQKCkgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoT1RHX05TLT5DVEwgfD0gT1RHX0NUTF9XS0VOX01zayk6KE9URy0+Q1RMIHw9IE9UR19DVExfV0tFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgT1RHIHdha2UtdXAgZnVuY3Rpb24KKyAgKiBAcGFyYW0gTm9uZQorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBXS0VOIGJpdCBvZiBPVEdfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgT1RHIHdha2UtdXAgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIE9UR19ESVNBQkxFX1dBS0VVUCgpICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKE9UR19OUy0+Q1RMICY9IH5PVEdfQ1RMX1dLRU5fTXNrKTooT1RHLT5DVEwgJj0gfk9UR19DVExfV0tFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCB0aGUgcG9sYXJpdHkgb2YgVVNCX1ZCVVNfRU4gcGluCisgICogQHBhcmFtW2luXSB1MzJQb2wgVGhlIHBvbGFyaXR5IHNlbGVjdGlvbi4gVmFsaWQgdmFsdWVzIGFyZSBsaXN0ZWQgYmVsb3cuCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfVkJVU19FTl9BQ1RJVkVfSElHSAorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX1ZCVVNfRU5fQUNUSVZFX0xPVworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgdGhlIHBvbGFyaXR5IG9mIGV4dGVybmFsIFVTQiBWQlVTIHBvd2VyIHN3aXRjaCBlbmFibGUgc2lnbmFsLgorICAqLworI2RlZmluZSBPVEdfU0VUX1ZCVVNfRU5fUE9MKHUzMlBvbCkgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoT1RHX05TLT5QSFlDVEwgPSAoT1RHX05TLT5QSFlDVEwgJiAofk9UR19QSFlDVExfVkJFTlBPTF9Nc2spKSB8ICgodTMyUG9sKTw8T1RHX1BIWUNUTF9WQkVOUE9MX1BvcykpOihPVEctPlBIWUNUTCA9IChPVEctPlBIWUNUTCAmICh+T1RHX1BIWUNUTF9WQkVOUE9MX01zaykpIHwgKCh1MzJQb2wpPDxPVEdfUEhZQ1RMX1ZCRU5QT0xfUG9zKSkpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IHRoZSBwb2xhcml0eSBvZiBVU0JfVkJVU19TVCBwaW4KKyAgKiBAcGFyYW1baW5dIHUzMlBvbCBUaGUgcG9sYXJpdHkgc2VsZWN0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdy4KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19WQlVTX1NUX1ZBTElEX0hJR0gKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19WQlVTX1NUX1ZBTElEX0xPVworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgdGhlIHBvbGFyaXR5IG9mIGV4dGVybmFsIFVTQiBWQlVTIHBvd2VyIHN3aXRjaCBzdGF0dXMgc2lnbmFsLgorICAqLworI2RlZmluZSBPVEdfU0VUX1ZCVVNfU1RTX1BPTCh1MzJQb2wpICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKE9UR19OUy0+UEhZQ1RMID0gKE9UR19OUy0+UEhZQ1RMICYgKH5PVEdfUEhZQ1RMX1ZCU1RTUE9MX01zaykpIHwgKCh1MzJQb2wpPDxPVEdfUEhZQ1RMX1ZCU1RTUE9MX1BvcykpOihPVEctPlBIWUNUTCA9IChPVEctPlBIWUNUTCAmICh+T1RHX1BIWUNUTF9WQlNUU1BPTF9Nc2spKSB8ICgodTMyUG9sKTw8T1RHX1BIWUNUTF9WQlNUU1BPTF9Qb3MpKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgT1RHIHJlbGF0ZWQgaW50ZXJydXB0cworICAqIEBwYXJhbVtpbl0gdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgaW50ZXJydXB0IHNvdXJjZS4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgc291cmNlLiBWYWxpZCB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdy4KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9ST0xFQ0hHSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX1ZCRUlFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9TUlBGSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX0hOUEZJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fR09JRExFSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX0lEQ0hHSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX1BERVZJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fSE9TVElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9CVkxEQ0hHSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX0FWTERDSEdJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fVkJDSEdJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fU0VDSEdJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fU1JQREVUSUVOX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBlbmFibGUgT1RHIHJlbGF0ZWQgaW50ZXJydXB0cyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCisjZGVmaW5lIE9UR19FTkFCTEVfSU5UKHUzMk1hc2spICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKE9UR19OUy0+SU5URU4gfD0gKHUzMk1hc2spKTooT1RHLT5JTlRFTiB8PSAodTMyTWFzaykpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgT1RHIHJlbGF0ZWQgaW50ZXJydXB0cworICAqIEBwYXJhbVtpbl0gdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgaW50ZXJydXB0IHNvdXJjZS4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgc291cmNlLiBWYWxpZCB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdy4KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9ST0xFQ0hHSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX1ZCRUlFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9TUlBGSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX0hOUEZJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fR09JRExFSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX0lEQ0hHSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX1BERVZJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fSE9TVElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9CVkxEQ0hHSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX0FWTERDSEdJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fVkJDSEdJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fU0VDSEdJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fU1JQREVUSUVOX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBkaXNhYmxlIE9URyByZWxhdGVkIGludGVycnVwdHMgc3BlY2lmaWVkIGJ5IHUzMk1hc2sgcGFyYW1ldGVyLgorICAqLworI2RlZmluZSBPVEdfRElTQUJMRV9JTlQodTMyTWFzaykgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoT1RHX05TLT5JTlRFTiAmPSB+KHUzMk1hc2spKTooT1RHLT5JTlRFTiAmPSB+KHUzMk1hc2spKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgT1RHIHJlbGF0ZWQgaW50ZXJydXB0IGZsYWdzCisgICogQHBhcmFtW2luXSB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBpbnRlcnJ1cHQgc291cmNlLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuIFZhbGlkIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93LgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19ST0xFQ0hHSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX1ZCRUlGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19TUlBGSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX0hOUEZJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfR09JRExFSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX0lEQ0hHSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX1BERVZJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfSE9TVElGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19CVkxEQ0hHSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX0FWTERDSEdJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfVkJDSEdJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfU0VDSEdJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfU1JQREVUSUZfTXNrCisgICogQHJldHVybiBJbnRlcnJ1cHQgZmxhZ3Mgb2Ygc2VsZWN0ZWQgc291cmNlcy4KKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgcmV0dXJuIE9URyByZWxhdGVkIGludGVycnVwdCBmbGFncyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCisjZGVmaW5lIE9UR19HRVRfSU5UX0ZMQUcodTMyTWFzaykgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoT1RHX05TLT5JTlRTVFMgJiAodTMyTWFzaykpOihPVEctPklOVFNUUyAmICh1MzJNYXNrKSkpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY2xlYXIgT1RHIHJlbGF0ZWQgaW50ZXJydXB0IGZsYWdzCisgICogQHBhcmFtW2luXSB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBpbnRlcnJ1cHQgc291cmNlLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuIFZhbGlkIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93LgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19ST0xFQ0hHSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX1ZCRUlGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19TUlBGSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX0hOUEZJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfR09JRExFSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX0lEQ0hHSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX1BERVZJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfSE9TVElGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19CVkxEQ0hHSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX0FWTERDSEdJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfVkJDSEdJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfU0VDSEdJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfU1JQREVUSUZfTXNrCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIE9URyByZWxhdGVkIGludGVycnVwdCBmbGFncyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCisjZGVmaW5lIE9UR19DTFJfSU5UX0ZMQUcodTMyTWFzaykgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoT1RHX05TLT5JTlRTVFMgPSAodTMyTWFzaykpOihPVEctPklOVFNUUyA9ICh1MzJNYXNrKSkpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZ2V0IE9URyByZWxhdGVkIHN0YXR1cworICAqIEBwYXJhbVtpbl0gdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgdXNlciBzcGVjaWZpZWQgc291cmNlLiBWYWxpZCB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdy4KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19TVEFUVVNfT1ZFUkNVUl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19TVEFUVVNfSURTVFNfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfU1RBVFVTX1NFU1NFTkRfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfU1RBVFVTX0JWTERfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfU1RBVFVTX0FWTERfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfU1RBVFVTX1ZCVVNWTERfTXNrCisgICogQHJldHVybiBUaGUgdXNlciBzcGVjaWZpZWQgc3RhdHVzLgorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCByZXR1cm4gT1RHIHJlbGF0ZWQgc3RhdHVzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KKyNkZWZpbmUgT1RHX0dFVF9TVEFUVVModTMyTWFzaykgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoT1RHX05TLT5TVEFUVVMgJiAodTMyTWFzaykpOihPVEctPlNUQVRVUyAmICh1MzJNYXNrKSkpCisKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIE9UR19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBPVEdfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8qIF9fT1RHX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9wYXJ0aXRpb25fTTIzNTEuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3BhcnRpdGlvbl9NMjM1MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZGU4NTgKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9wYXJ0aXRpb25fTTIzNTEuaApAQCAtMCwwICsxLDUwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHBhcnRpdGlvbl9NMjM1MS5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBTQVUgY29uZmlndXJhdGlvbiBmb3Igc2VjdXJlL25vbnNlY3VyZSByZWdpb24gc2V0dGluZ3MuCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgUEFSVElUSU9OX00yMzUxCisjZGVmaW5lIFBBUlRJVElPTl9NMjM1MQorCisjaWYgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKworLyoKKyAgIERlZmF1bHQgTTIzNTEgcHJpdGl0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBmb3Igbm9uLVRydXN0Wm9uZSBzYW1wbGUgY29kZSBvbmx5LgorICAgSWYgdXNlciB3YW50cyB0byB1c2UgVHJ1cnN0Wm9uZSwgdGhleSBzaG91bGQgaGF2ZSB0aGVpciBwYXJ0aXRpb25fbTIzNTEuaC4KKyAgIEZvciBUcnVzdFpvbmUgcHJvamVjdHMsIHBhdGggb2YgbG9jYWwgcGFydGl0aW9uX20yMzUxLmggc2hvdWxkIGJlIGluIHRoZQorICAgZnJvbnQgb2YgdGhlIGluY2x1ZGUgcGF0aCBsaXN0IHRvIG1ha2Ugc3VyZSBsb2NhbCBwYXJ0aXRpb25fbTIzNTEuaCBpcyB1c2VkLgorCisgICBJdCBhbHNvIGFwcGx5IHRvIG5vbi1zZWN1cmUgcHJvamVjdCBvZiB0aGUgVHJ1c3Rab25lIHByb2plY3RzLgorCisqLworIyBlcnJvciAiTGluayB0byBkZWZhdWx0IHBhcnRpdGlvbl9tMjM1MS5oIGluIHNlY3VyZSBtb2RlLiBQbGVhc2UgY2hlY2sgeW91ciBpbmNsdWRlIHBhdGguIgorCisjZW5kaWYKKworCisKKy8qCisvLy0tLS0tLS0tIDw8PCBVc2UgQ29uZmlndXJhdGlvbiBXaXphcmQgaW4gQ29udGV4dCBNZW51ID4+PiAtLS0tLS0tLS0tLS0tLS0tLQorKi8KKworCisvKgorICAgIFNSQU1OU1NFVAorKi8KKy8qCisvLyBCaXQgMC4uMTYKKy8vIDxvLjAuLjE2PiBTZWN1cmUgU1JBTSBTaXplICAgICAgICAgICAgICA8MD0+IDAgS0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHgyMDAwPT4gOEtCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4NDAwMD0+IDE2S0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHg2MDAwPT4gMjRLQgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwweDgwMDA9PiAzMktCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4YTAwMD0+IDQwS0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHhjMDAwPT4gNDhLQgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwweGUwMDA9PiA1NktCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4MTAwMDA9PiA2NEtCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4MTIwMDA9PiA3MktCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4MTQwMDA9PiA4MEtCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4MTYwMDA9PiA4OEtCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4MTgwMDA9PiA5NktCCisqLworI2RlZmluZSBTQ1VfU0VDVVJFX1NSQU1fU0laRSAgICAgIDB4MTgwMDAKKyNkZWZpbmUgTk9OX1NFQ1VSRV9TUkFNX0JBU0UgICAgKDB4MzAwMDAwMDAgKyBTQ1VfU0VDVVJFX1NSQU1fU0laRSkKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICAgIE5TQkEKKyovCisjZGVmaW5lIEZNQ19JTklUX05TQkEgICAgICAgICAgMQorLyoKKy8vICAgICA8bz5TZWN1cmUgRmxhc2ggUk9NIFNpemUgPDB4ODAwLTB4ODAwMDA6MHg4MDA+CisqLworCisjZGVmaW5lIEZNQ19TRUNVUkVfUk9NX1NJWkUgICAgICAweDgwMDAwCisKKyNkZWZpbmUgRk1DX05PTl9TRUNVUkVfQkFTRSAgICAgKDB4MTAwMDAwMDAgKyBGTUNfU0VDVVJFX1JPTV9TSVpFKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisvKgorLy8gPGg+IFBlcmlwaGVyYWwgU2VjdXJlIEF0dHJpYnV0aW9uIENvbmZpZ3VyYXRpb24KKyovCisKKy8qCisgICAgUE5TU0VUMAorKi8KKy8qCisvLyBNb2R1bGUgMC4uMzEKKy8vICAgPG8uOT4gIFVTQkggICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjEzPiAgU0QwICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE2PiAgRUJJICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yND4gIFBETUExICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisqLworI2RlZmluZSBTQ1VfSU5JVF9QTlNTRVQwX1ZBTCAgICAgIDB4MAorLyoKKyAgICBQTlNTRVQxCisqLworLyoKKy8vIE1vZHVsZSAwLi4zMQorLy8gICA8by4xNz4gIENSQyAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTg+ICBDUlBUICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisqLworI2RlZmluZSBTQ1VfSU5JVF9QTlNTRVQxX1ZBTCAgICAgIDB4MDAwMDAKKy8qCisgICAgUE5TU0VUMgorKi8KKy8qCisvLyBNb2R1bGUgMC4uMzEKKy8vICAgPG8uMT4gIFJUQyAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMz4gIEVBREMgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uNT4gIEFDTVAwMSAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLworLy8gICA8by43PiAgREFDICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjg+ICBJMlMwICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjEzPiAgT1RHICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE3PiAgVE1SMjMgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPGg+IEVQV00KKy8vICAgPG8uMjQ+ICBFUFdNMCAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yNT4gIEVQV00xICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI2PiAgQlBXTTAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjc+ICBCUFdNMSAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisqLworI2RlZmluZSBTQ1VfSU5JVF9QTlNTRVQyX1ZBTCAgICAgIDB4MAorLyoKKyAgICBQTlNTRVQzCisqLworLyoKKy8vIE1vZHVsZSAwLi4zMQorLy8gICA8aD4gIFNQSQorLy8gICA8by4wPiAgUVNQSTAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE+ICBTUEkwICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI+ICBTUEkxICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjM+ICBTUEkyICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by40PiAgU1BJMyAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisvLyAgIDxoPiBVQVJUCisvLyAgIDxvLjE2PiAgVUFSVDAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTc+ICBVQVJUMSAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xOD4gIFVBUlQyICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE5PiAgVUFSVDMgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjA+ICBVQVJUNCAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMT4gIFVBUlQ1ICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKyovCisjZGVmaW5lIFNDVV9JTklUX1BOU1NFVDNfVkFMICAgICAgMHgwMDAwMAorLyoKKyAgICBQTlNTRVQ0CisqLworLyoKKy8vIE1vZHVsZSAwLi4zMQorLy8gICA8aD4gSTJDCisvLyAgIDxvLjA+ICBJMkMwICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xPiAgSTJDMSAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yPiAgSTJDMiAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisvLyAgIDxoPiBTbWFydCBDYXJkCisvLyAgIDxvLjE2PiAgU0MwICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE3PiAgU0MxICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE4PiAgU0MyICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKyovCisjZGVmaW5lIFNDVV9JTklUX1BOU1NFVDRfVkFMICAgICAgMHgwCisvKgorICAgIFBOU1NFVDUKKyovCisvKgorLy8gTW9kdWxlIDAuLjMxCisvLyAgIDxvLjA+ICBDQU4wICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8aD4gUUVJCisvLyAgIDxvLjE2PiAgUUVJMCAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xNz4gIFFFSTEgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorLy8gICA8aD4gRUNBUAorLy8gICA8by4yMD4gIEVDQVAwICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMT4gIEVDQVAxICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKy8vICAgPG8uMjU+ICBUUk5HICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorKi8KKyNkZWZpbmUgU0NVX0lOSVRfUE5TU0VUNV9WQUwgICAgICAweDAKKy8qCisgICAgUE5TU0VUNgorKi8KKy8qCisvLyBNb2R1bGUgMC4uMzEKKy8vICAgPG8uMD4gIFVTQkQgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxoPiBVU0NJCisvLyAgIDxvLjE2PiAgVVNDSTAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTc+ICBVU0NJMSAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisqLworI2RlZmluZSBTQ1VfSU5JVF9QTlNTRVQ2X1ZBTCAgICAgIDB4MAorLyoKKy8vIDwvaD4KKyovCisKKworCisvKgorLy8gPGg+IEdQSU8gU2VjdXJlIEF0dHJpYnV0aW9uIENvbmZpZ3VyYXRpb24KKyovCisKKy8qCisgICAgSU9OU1NFVAorKi8KKy8qCisvLyBCaXQgMC4uMzEKKy8vICAgPG8uMD4gIFBBICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xPiAgUEIgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMj4gIFBDICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjM+ICBQRCAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uND4gIFBFICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjU+ICBQRiAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by42PiAgUEcgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uNz4gIFBIICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisqLworI2RlZmluZSBTQ1VfSU5JVF9JT05TU0VUX1ZBTCAgICAgIDB4MAorLyoKKy8vIDwvaD4KKyovCisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisvLyA8ZT5TZWN1cmUgQXR0cmlidXRlIFVuaXQgKFNBVSkgQ29udHJvbAorKi8KKyNkZWZpbmUgU0FVX0lOSVRfQ1RSTCAwCisKKy8qCisvLyAgIDxxPiBFbmFibGUgU0FVCisvLyAgIDxpPiBUbyBlbmFibGUgU2VjdXJlIEF0dHJpYnV0ZSBVbml0IChTQVUpLgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfQ1RSTF9FTkFCTEUgMQorCisvKgorLy8gICA8bz4gQWxsIE1lbW9yeSBBdHRyaWJ1dGUgV2hlbiBTQVUgaXMgZGlzYWJsZWQKKy8vICAgICA8MD0+IEFsbCBNZW1vcnkgaXMgU2VjdXJlCisvLyAgICAgPDE9PiBBbGwgTWVtb3J5IGlzIE5vbi1TZWN1cmUKKy8vICAgPGk+IFRvIHNldCB0aGUgQUxMTlMgYml0IGluIFNBVSBDVFJMLgorLy8gICA8aT4gV2hlbiBhbGwgTWVtb3J5IGlzIE5vbi1TZWN1cmUgKEFMTE5TIGlzIDEpLCBJREFVIGNhbiBvdmVycmlkZSBtZW1vcnkgbWFwIGNvbmZpZ3VyYXRpb24uCisqLworI2RlZmluZSBTQVVfSU5JVF9DVFJMX0FMTE5TICAwCisKKy8qCisvLyA8L2U+CisqLworCisKKy8qCisvLyA8aD5FbmFibGUgYW5kIFNldCBTZWN1cmUvTm9uLVNlY3VyZSByZWdpb24KKyovCisjZGVmaW5lIFNBVV9SRUdJT05TX01BWCAgIDggICAgICAgICAgICAgICAgIC8qIE1heC4gbnVtYmVyIG9mIFNBVSByZWdpb25zICovCisKKy8qCisvLyAgIDxlPlNBVSBSZWdpb24gMAorLy8gICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiAwCisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT04wICAgIDAKKy8qCisvLyAgICAgPG8+U3RhcnQgQWRkcmVzcyA8MC0weEZGRkZGRkUwPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfU1RBUlQwICAgICAweDAwMDNGMDAwICAgICAgLyogc3RhcnQgYWRkcmVzcyBvZiBTQVUgcmVnaW9uIDAgKi8KKy8qCisvLyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDAgICAgICAgMHgwMDAzRkZGRiAgICAgIC8qIGVuZCBhZGRyZXNzIG9mIFNBVSByZWdpb24gMCAqLworLyoKKy8vICAgICA8bz5SZWdpb24gaXMKKy8vICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKy8vICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDMCAgICAgICAxCisvKgorLy8gICA8L2U+CisqLworCisvKgorLy8gICA8ZT5TQVUgUmVnaW9uIDEKKy8vICAgPGk+IFNldHVwIFNBVSBSZWdpb24gMQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9OMSAgICAwCisvKgorLy8gICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUMSAgICAgMHgxMDA0MDAwMAorLyoKKy8vICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5EMSAgICAgICAweDEwMDdGRkZGCisvKgorLy8gICAgIDxvPlJlZ2lvbiBpcworLy8gICAgICAgICA8MD0+Tm9uLVNlY3VyZQorLy8gICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0MxICAgICAgIDAKKy8qCisvLyAgIDwvZT4KKyovCisKKy8qCisvLyAgIDxlPlNBVSBSZWdpb24gMgorLy8gICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiAyCisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT04yICAgIDAKKy8qCisvLyAgICAgPG8+U3RhcnQgQWRkcmVzcyA8MC0weEZGRkZGRkUwPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfU1RBUlQyICAgICAweDIwMDBGMDAwCisvKgorLy8gICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQyICAgICAgIDB4MjAwMEZGRkYKKy8qCisvLyAgICAgPG8+UmVnaW9uIGlzCisvLyAgICAgICAgIDwwPT5Ob24tU2VjdXJlCisvLyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzIgICAgICAgMQorLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+U0FVIFJlZ2lvbiAzCisvLyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDMKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjMgICAgMAorLyoKKy8vICAgICA8bz5TdGFydCBBZGRyZXNzIDwwLTB4RkZGRkZGRTA+CisqLworI2RlZmluZSBTQVVfSU5JVF9TVEFSVDMgICAgIDB4M2YwMDAKKy8qCisvLyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDMgICAgICAgMHgzZjdmZgorLyoKKy8vICAgICA8bz5SZWdpb24gaXMKKy8vICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKy8vICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDMyAgICAgICAxCisvKgorLy8gICA8L2U+CisqLworCisvKgorICAgPGU+U0FVIFJlZ2lvbiA0CisgICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiA0CisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT040ICAgIDEKKy8qCisgICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUNCAgICAgRk1DX05PTl9TRUNVUkVfQkFTRSAgICAgIC8qIHN0YXJ0IGFkZHJlc3Mgb2YgU0FVIHJlZ2lvbiA0ICovCisKKy8qCisgICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQ0ICAgICAgIDB4MTAwN0ZGRkYgICAgICAvKiBlbmQgYWRkcmVzcyBvZiBTQVUgcmVnaW9uIDQgKi8KKworLyoKKyAgICAgPG8+UmVnaW9uIGlzCisgICAgICAgICA8MD0+Tm9uLVNlY3VyZQorICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDNCAgICAgICAwCisvKgorICAgPC9lPgorKi8KKworLyoKKyAgIDxlPlNBVSBSZWdpb24gNQorICAgPGk+IFNldHVwIFNBVSBSZWdpb24gNQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9ONSAgICAxCisKKy8qCisgICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUNSAgICAgMHgwMDgwN0UwMAorCisvKgorICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5ENSAgICAgICAweDAwODA3RkZGCisKKy8qCisgICAgIDxvPlJlZ2lvbiBpcworICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzUgICAgICAgMQorLyoKKyAgIDwvZT4KKyovCisKKy8qCisgICA8ZT5TQVUgUmVnaW9uIDYKKyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDYKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjYgICAgMQorCisvKgorICAgICA8bz5TdGFydCBBZGRyZXNzIDwwLTB4RkZGRkZGRTA+CisqLworI2RlZmluZSBTQVVfSU5JVF9TVEFSVDYgICAgIE5PTl9TRUNVUkVfU1JBTV9CQVNFCisKKy8qCisgICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQ2ICAgICAgIDB4MzAwMTdGRkYKKworLyoKKyAgICAgPG8+UmVnaW9uIGlzCisgICAgICAgICA8MD0+Tm9uLVNlY3VyZQorICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDNiAgICAgICAwCisvKgorICAgPC9lPgorKi8KKworLyoKKyAgIDxlPlNBVSBSZWdpb24gNworICAgPGk+IFNldHVwIFNBVSBSZWdpb24gNworKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9ONyAgICAxCisKKy8qCisgICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUNyAgICAgMHg1MDAwMDAwMAorCisvKgorICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5ENyAgICAgICAweDVGRkZGRkZGCisKKy8qCisgICAgIDxvPlJlZ2lvbiBpcworICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzcgICAgICAgMAorLyoKKyAgIDwvZT4KKyovCisKKy8qCisvLyA8L2g+CisqLworCisvKgorLy8gPGU+U2V0dXAgYmVoYXZpb3Igb2YgU2xlZXAgYW5kIEV4Y2VwdGlvbiBIYW5kbGluZworKi8KKyNkZWZpbmUgU0NCX0NTUl9BSVJDUl9JTklUICAxCisKKy8qCisvLyAgIDxvPiBEZWVwIFNsZWVwIGNhbiBiZSBlbmFibGVkIGJ5CisvLyAgICAgPDA9PlNlY3VyZSBhbmQgTm9uLVNlY3VyZSBzdGF0ZQorLy8gICAgIDwxPT5TZWN1cmUgc3RhdGUgb25seQorLy8gICA8aT4gVmFsdWUgZm9yIFNDQi0+Q1NSIHJlZ2lzdGVyIGJpdCBERUVQU0xFRVBTCisqLworI2RlZmluZSBTQ0JfQ1NSX0RFRVBTTEVFUFNfVkFMICAwCisKKy8qCisvLyAgIDxvPlN5c3RlbSByZXNldCByZXF1ZXN0IGFjY2Vzc2libGUgZnJvbQorLy8gICAgIDwwPT4gU2VjdXJlIGFuZCBOb24tU2VjdXJlIHN0YXRlCisvLyAgICAgPDE9PiBTZWN1cmUgc3RhdGUgb25seQorLy8gICA8aT4gVmFsdWUgZm9yIFNDQi0+QUlSQ1IgcmVnaXN0ZXIgYml0IFNZU1JFU0VUUkVRUworKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRU19WQUwgIDAKKworLyoKKy8vICAgPG8+UHJpb3JpdHkgb2YgTm9uLVNlY3VyZSBleGNlcHRpb25zIGlzCisvLyAgICAgPDA9PiBOb3QgYWx0ZXJlZAorLy8gICAgIDwxPT4gTG93ZXJlZCB0byAweDgwLTB4RkYKKy8vICAgPGk+IFZhbHVlIGZvciBTQ0ItPkFJUkNSIHJlZ2lzdGVyIGJpdCBQUklTCisqLworI2RlZmluZSBTQ0JfQUlSQ1JfUFJJU19WQUwgICAgICAwCisKKy8qIEFzc2lnbiBIYXJkRmF1bHQgdG8gYmUgYWx3YXlzIHNlY3VyZSBmb3Igc2FmZSAqLworI2RlZmluZSBTQ0JfQUlSQ1JfQkZIRk5NSU5TX1ZBTCAwCisKKy8qCisvLyA8L2U+CisqLworCisvKgorICAgIG1heCAxMjggU0FVIHJlZ2lvbnMuCisgICAgU0FVIHJlZ2lvbnMgYXJlIGRlZmluZWQgaW4gcGFydGl0aW9uLmgKKyAqLworCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTihuKSBcCisgICAgU0FVLT5STlIgID0gIChuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgU0FVX1JOUl9SRUdJT05fTXNrKTsgXAorICAgIFNBVS0+UkJBUiA9ICAoU0FVX0lOSVRfU1RBUlQjI24gICAgICAgICAgICAgICAgICAgICAmIFNBVV9SQkFSX0JBRERSX01zayk7IFwKKyAgICBTQVUtPlJMQVIgPSAgKFNBVV9JTklUX0VORCMjbiAgICAgICAgICAgICAgICAgICAgICAgJiBTQVVfUkxBUl9MQUREUl9Nc2spIHwgXAorICAgICAgICAgICAgICAgICgoU0FVX0lOSVRfTlNDIyNuIDw8IFNBVV9STEFSX05TQ19Qb3MpICAmIFNBVV9STEFSX05TQ19Nc2spICAgfCAxVQorCisKKyNlbmRpZiAgLyogUEFSVElUSU9OX00yMzUxICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3BkbWEuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3BkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDAwZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvcGRtYS5oCkBAIC0wLDAgKzEsMzc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgcGRtYS5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgUERNQSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1BETUFfSF9fCisjZGVmaW5lIF9fUERNQV9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFBETUFfRHJpdmVyIFBETUEgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgUERNQV9FWFBPUlRFRF9DT05TVEFOVFMgUERNQSBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisjZGVmaW5lIFBETUFfQ0hfTUFYICAgIDhVTCAgIC8qITwgU3BlY2lmeSBNYXhpbXVtIENoYW5uZWxzIG9mIFBETUEgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIE9wZXJhdGlvbiBNb2RlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBQRE1BX09QX1NUT1AgICAgICAgIDB4MDAwMDAwMDBVTCAgICAgICAgICAgIC8qITxETUEgU3RvcCBNb2RlICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfT1BfQkFTSUMgICAgICAgMHgwMDAwMDAwMVVMICAgICAgICAgICAgLyohPERNQSBCYXNpYyBNb2RlICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfT1BfU0NBVFRFUiAgICAgMHgwMDAwMDAwMlVMICAgICAgICAgICAgLyohPERNQSBTY2F0dGVyLWdhdGhlciBNb2RlICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBEYXRhIFdpZHRoIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUERNQV9XSURUSF84ICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAvKiE8RE1BIFRyYW5zZmVyIFdpZHRoIDgtYml0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfV0lEVEhfMTYgICAgICAgMHgwMDAwMTAwMFVMICAgICAgICAgICAgLyohPERNQSBUcmFuc2ZlciBXaWR0aCAxNi1iaXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9XSURUSF8zMiAgICAgICAweDAwMDAyMDAwVUwgICAgICAgICAgICAvKiE8RE1BIFRyYW5zZmVyIFdpZHRoIDMyLWJpdCAgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQWRkcmVzcyBBdHRyaWJ1dGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFBETUFfU0FSX0lOQyAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgLyohPERNQSBTQVIgaW5jcmVtZW50ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfU0FSX0ZJWCAgICAgICAgMHgwMDAwMDMwMFVMICAgICAgICAgICAgLyohPERNQSBTQVIgZml4IGFkZHJlc3MgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9EQVJfSU5DICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAvKiE8RE1BIERBUiBpbmNyZW1lbnQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9EQVJfRklYICAgICAgICAweDAwMDAwQzAwVUwgICAgICAgICAgICAvKiE8RE1BIERBUiBmaXggYWRkcmVzcyAgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQnVyc3QgTW9kZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFBETUFfUkVRX1NJTkdMRSAgICAgMHgwMDAwMDAwNFVMICAgICAgICAgICAgLyohPERNQSBTaW5nbGUgUmVxdWVzdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1JFUV9CVVJTVCAgICAgIDB4MDAwMDAwMDBVTCAgICAgICAgICAgIC8qITxETUEgQnVyc3QgUmVxdWVzdCAgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFBETUFfQlVSU1RfMTI4ICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgLyohPERNQSBCdXJzdCAxMjggVHJhbnNmZXJzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfQlVSU1RfNjQgICAgICAgMHgwMDAwMDAxMFVMICAgICAgICAgICAgLyohPERNQSBCdXJzdCA2NCBUcmFuc2ZlcnMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9CVVJTVF8zMiAgICAgICAweDAwMDAwMDIwVUwgICAgICAgICAgICAvKiE8RE1BIEJ1cnN0IDMyIFRyYW5zZmVycyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0JVUlNUXzE2ICAgICAgIDB4MDAwMDAwMzBVTCAgICAgICAgICAgIC8qITxETUEgQnVyc3QgMTYgVHJhbnNmZXJzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfQlVSU1RfOCAgICAgICAgMHgwMDAwMDA0MFVMICAgICAgICAgICAgLyohPERNQSBCdXJzdCA4IFRyYW5zZmVycyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0JVUlNUXzQgICAgICAgIDB4MDAwMDAwNTBVTCAgICAgICAgICAgIC8qITxETUEgQnVyc3QgNCBUcmFuc2ZlcnMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9CVVJTVF8yICAgICAgICAweDAwMDAwMDYwVUwgICAgICAgICAgICAvKiE8RE1BIEJ1cnN0IDIgVHJhbnNmZXJzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfQlVSU1RfMSAgICAgICAgMHgwMDAwMDA3MFVMICAgICAgICAgICAgLyohPERNQSBCdXJzdCAxIFRyYW5zZmVycyAgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgVGFibGUgSW50ZXJydXB0IERpc2FibGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFBETUFfVEJJTlRESVNfRU5BQkxFICAoMHgwVUw8PFBETUFfRFNDVF9DVExfVEJJTlRESVNfUG9zKSAgLyohPERNQSBUYWJsZSBJbnRlcnJ1cHQgRW5hYmxlZCAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9UQklOVERJU19ESVNBQkxFICgweDFVTDw8UERNQV9EU0NUX0NUTF9UQklOVERJU19Qb3MpICAvKiE8RE1BIFRhYmxlIEludGVycnVwdCBEaXNhYmxlZCAgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgUGVyaXBoZXJhbCBUcmFuc2ZlciBNb2RlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFBETUFfTUVNICAgICAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIE1lbW9yeSAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1VTQl9UWCAgICAgICAgIDB4MDAwMDAwMDJVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBVU0IgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VU0JfUlggICAgICAgICAweDAwMDAwMDAzVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVVNCIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVUFSVDBfVFggICAgICAgMHgwMDAwMDAwNFVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVBUlQwIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVUFSVDBfUlggICAgICAgMHgwMDAwMDAwNVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVBUlQwIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVUFSVDFfVFggICAgICAgMHgwMDAwMDAwNlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVBUlQxIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVUFSVDFfUlggICAgICAgMHgwMDAwMDAwN1VMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVBUlQxIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVUFSVDJfVFggICAgICAgMHgwMDAwMDAwOFVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVBUlQyIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVUFSVDJfUlggICAgICAgMHgwMDAwMDAwOVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVBUlQyIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVUFSVDNfVFggICAgICAgMHgwMDAwMDAwQVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVBUlQzIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVUFSVDNfUlggICAgICAgMHgwMDAwMDAwQlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVBUlQzIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVUFSVDRfVFggICAgICAgMHgwMDAwMDAwQ1VMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVBUlQ0IFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVUFSVDRfUlggICAgICAgMHgwMDAwMDAwRFVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVBUlQ0IFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVUFSVDVfVFggICAgICAgMHgwMDAwMDAwRVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVBUlQ1IFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVUFSVDVfUlggICAgICAgMHgwMDAwMDAwRlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVBUlQ1IFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVVNDSTBfVFggICAgICAgMHgwMDAwMDAxMFVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVTQ0kwIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVVNDSTBfUlggICAgICAgMHgwMDAwMDAxMVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVTQ0kwIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVVNDSTFfVFggICAgICAgMHgwMDAwMDAxMlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVTQ0kxIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVVNDSTFfUlggICAgICAgMHgwMDAwMDAxM1VMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVTQ0kxIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfUVNQSTBfVFggICAgICAgMHgwMDAwMDAxNFVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFFTUEkwIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfUVNQSTBfUlggICAgICAgMHgwMDAwMDAxNVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFFTUEkwIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfU1BJMF9UWCAgICAgICAgMHgwMDAwMDAxNlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFNQSTAgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9TUEkwX1JYICAgICAgICAweDAwMDAwMDE3VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gU1BJMCBSWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1NQSTFfVFggICAgICAgIDB4MDAwMDAwMThVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBTUEkxIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfU1BJMV9SWCAgICAgICAgMHgwMDAwMDAxOVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFNQSTEgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9TUEkyX1RYICAgICAgICAweDAwMDAwMDFBVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gU1BJMiBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1NQSTJfUlggICAgICAgIDB4MDAwMDAwMUJVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBTUEkyIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfU1BJM19UWCAgICAgICAgMHgwMDAwMDAxQ1VMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFNQSTMgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9TUEkzX1JYICAgICAgICAweDAwMDAwMDFEVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gU1BJMyBSWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0VQV00wX1AxX1JYICAgICAweDAwMDAwMDIwVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gRVBXTTAgUDEgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9FUFdNMF9QMl9SWCAgICAgMHgwMDAwMDAyMVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEVQV00wIFAyIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfRVBXTTBfUDNfUlggICAgIDB4MDAwMDAwMjJVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBFUFdNMCBQMyBSWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0VQV00xX1AxX1JYICAgICAweDAwMDAwMDIzVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gRVBXTTEgUDEgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9FUFdNMV9QMl9SWCAgICAgMHgwMDAwMDAyNFVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEVQV00xIFAyIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfRVBXTTFfUDNfUlggICAgIDB4MDAwMDAwMjVVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBFUFdNMSBQMyBSWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0kyQzBfVFggICAgICAgIDB4MDAwMDAwMjZVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBJMkMwIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfSTJDMF9SWCAgICAgICAgMHgwMDAwMDAyN1VMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEkyQzAgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9JMkMxX1RYICAgICAgICAweDAwMDAwMDI4VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gSTJDMSBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0kyQzFfUlggICAgICAgIDB4MDAwMDAwMjlVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBJMkMxIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfSTJDMl9UWCAgICAgICAgMHgwMDAwMDAyQVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEkyQzIgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9JMkMyX1JYICAgICAgICAweDAwMDAwMDJCVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gSTJDMiBSWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0kyUzBfVFggICAgICAgIDB4MDAwMDAwMkNVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBJMlMwIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfSTJTMF9SWCAgICAgICAgMHgwMDAwMDAyRFVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEkyUzAgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9UTVIwICAgICAgICAgICAweDAwMDAwMDJFVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVE1SMCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1RNUjEgICAgICAgICAgIDB4MDAwMDAwMkZVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBUTVIxICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVE1SMiAgICAgICAgICAgMHgwMDAwMDAzMFVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFRNUjIgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9UTVIzICAgICAgICAgICAweDAwMDAwMDMxVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVE1SMyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0FEQ19SWCAgICAgICAgIDB4MDAwMDAwMzJVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBBREMgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9EQUMwX1RYICAgICAgICAweDAwMDAwMDMzVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gREFDMCBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0RBQzFfVFggICAgICAgIDB4MDAwMDAwMzRVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBEQUMxIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfRVBXTTBfQ0gwX1RYICAgIDB4MDAwMDAwMzVVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBFUFdNMCBDSDAgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9FUFdNMF9DSDFfVFggICAgMHgwMDAwMDAzNlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEVQV00wIENIMSBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0VQV00wX0NIMl9UWCAgICAweDAwMDAwMDM3VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gRVBXTTAgQ0gyIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfRVBXTTBfQ0gzX1RYICAgIDB4MDAwMDAwMzhVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBFUFdNMCBDSDMgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9FUFdNMF9DSDRfVFggICAgMHgwMDAwMDAzOVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEVQV00wIENINCBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0VQV00wX0NINV9UWCAgICAweDAwMDAwMDNBVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gRVBXTTAgQ0g1IFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfRVBXTTFfQ0gwX1RYICAgIDB4MDAwMDAwM0JVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBFUFdNMSBDSDAgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9FUFdNMV9DSDFfVFggICAgMHgwMDAwMDAzQ1VMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEVQV00xIENIMSBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0VQV00xX0NIMl9UWCAgICAweDAwMDAwMDNEVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gRVBXTTEgQ0gyIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfRVBXTTFfQ0gzX1RYICAgIDB4MDAwMDAwM0VVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBFUFdNMSBDSDMgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9FUFdNMV9DSDRfVFggICAgMHgwMDAwMDAzRlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEVQV00xIENINCBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0VQV00xX0NINV9UWCAgICAweDAwMDAwMDQwVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gRVBXTTEgQ0g1IFRYICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBJbnRlcnJ1cHQgVHlwZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUERNQV9JTlRfVFJBTlNfRE9ORSAweDAwMDAwMDAwVUwgICAgICAgICAgICAvKiE8VHJhbnNmZXIgRG9uZSBJbnRlcnJ1cHQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9JTlRfVEFCTEUgICAgICAweDAwMDAwMDAxVUwgICAgICAgICAgICAvKiE8VGFibGUgSW50ZXJydXB0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfSU5UX1RJTUVPVVQgICAgMHgwMDAwMDAwMlVMICAgICAgICAgICAgLyohPFRpbWVvdXQgSW50ZXJydXB0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfSU5UX0FMSUdOICAgICAgMHgwMDAwMDAwM1VMICAgICAgICAgICAgLyohPFRyYW5zZmVyIEFsaWdubWVudCBJbnRlcnJ1cHQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFBETUFfRVhQT1JURURfQ09OU1RBTlRTICovCisKKy8qKiBAYWRkdG9ncm91cCBQRE1BX0VYUE9SVEVEX0ZVTkNUSU9OUyBQRE1BIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgKiBAYnJpZWYgICAgICAgR2V0IFBETUEgSW50ZXJydXB0IFN0YXR1cworICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBtYWNybyBnZXRzIHRoZSBpbnRlcnJ1cHQgc3RhdHVzLgorICovCisjZGVmaW5lIFBETUFfR0VUX0lOVF9TVEFUVVMocGRtYSkgKCh1aW50MzJfdCkoKHBkbWEpLT5JTlRTVFMpKQorCisvKioKKyAqIEBicmllZiAgICAgICBHZXQgVHJhbnNmZXIgRG9uZSBJbnRlcnJ1cHQgU3RhdHVzCisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBHZXQgdGhlIHRyYW5zZmVyIGRvbmUgSW50ZXJydXB0IHN0YXR1cy4KKyAqLworI2RlZmluZSBQRE1BX0dFVF9URF9TVFMocGRtYSkgKCh1aW50MzJfdCkoKHBkbWEpLT5URFNUUykpCisKKy8qKgorICogQGJyaWVmICAgICAgIENsZWFyIFRyYW5zZmVyIERvbmUgSW50ZXJydXB0IFN0YXR1cworICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyTWFzayAgICAgVGhlIGNoYW5uZWwgbWFzaworICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIENsZWFyIHRoZSB0cmFuc2ZlciBkb25lIEludGVycnVwdCBzdGF0dXMuCisgKi8KKyNkZWZpbmUgUERNQV9DTFJfVERfRkxBRyhwZG1hLCB1MzJNYXNrKSAoKHVpbnQzMl90KSgocGRtYSktPlREU1RTID0gKHUzMk1hc2spKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgR2V0IFRhcmdldCBBYm9ydCBJbnRlcnJ1cHQgU3RhdHVzCisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBHZXQgdGhlIHRhcmdldCBhYm9ydCBJbnRlcnJ1cHQgc3RhdHVzLgorICovCisjZGVmaW5lIFBETUFfR0VUX0FCT1JUX1NUUyhwZG1hKSAoKHVpbnQzMl90KSgocGRtYSktPkFCVFNUUykpCisKKy8qKgorICogQGJyaWVmICAgICAgIENsZWFyIFRhcmdldCBBYm9ydCBJbnRlcnJ1cHQgU3RhdHVzCisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gICB1MzJNYXNrICAgICBUaGUgY2hhbm5lbCBtYXNrCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgQ2xlYXIgdGhlIHRhcmdldCBhYm9ydCBJbnRlcnJ1cHQgc3RhdHVzLgorICovCisjZGVmaW5lIFBETUFfQ0xSX0FCT1JUX0ZMQUcocGRtYSwgdTMyTWFzaykgKCh1aW50MzJfdCkoKHBkbWEpLT5BQlRTVFMgPSAodTMyTWFzaykpKQorCisvKioKKyAqIEBicmllZiAgICAgICBHZXQgUERNQSBUcmFuc2ZlciBBbGlnbm1lbnQgU3RhdHVzCisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBHZXQgdGhlIFBETUEgdHJhbnNmZXIgYWxpZ25tZW50IHN0YXR1cy4KKyAqLworI2RlZmluZSBQRE1BX0dFVF9BTElHTl9TVFMocGRtYSkgKCh1aW50MzJfdCkoKHBkbWEpLT5BTElHTikpCisKKy8qKgorICogQGJyaWVmICAgICAgIENsZWFyIFBETUEgVHJhbnNmZXIgQWxpZ25tZW50IEludGVycnVwdCBTdGF0dXMKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMk1hc2sgICAgIFRoZSBjaGFubmVsIG1hc2sKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBDbGVhciB0aGUgUERNQSB0cmFuc2ZlciBhbGlnbm1lbnQgSW50ZXJydXB0IHN0YXR1cy4KKyAqLworI2RlZmluZSBQRE1BX0NMUl9BTElHTl9GTEFHKHBkbWEsIHUzMk1hc2spICgodWludDMyX3QpKChwZG1hKS0+QUxJR04gPSAodTMyTWFzaykpKQorCisvKioKKyAqIEBicmllZiAgICAgICBDbGVhciBUaW1lb3V0IEludGVycnVwdCBTdGF0dXMKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgQ2xlYXIgdGhlIHNlbGVjdGVkIGNoYW5uZWwgdGltZW91dCBpbnRlcnJ1cHQgc3RhdHVzLgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGluIGNoYW5uZWwgMCBhbmQgY2hhbm5lbCAxLgorICovCisjZGVmaW5lIFBETUFfQ0xSX1RNT1VUX0ZMQUcocGRtYSwgdTMyQ2gpICgodWludDMyX3QpKChwZG1hKS0+SU5UU1RTID0gKDFVTCA8PCAoKHUzMkNoKSArIDhVTCkpKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgQ2hlY2sgQ2hhbm5lbCBTdGF0dXMKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKgorICogQHJldHZhbCAgICAgIDAgSWRsZSBzdGF0ZQorICogQHJldHZhbCAgICAgIDEgQnVzeSBzdGF0ZQorICoKKyAqIEBkZXRhaWxzICAgICBDaGVjayB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBpcyBidXN5IG9yIG5vdC4KKyAqLworI2RlZmluZSBQRE1BX0lTX0NIX0JVU1kocGRtYSwgdTMyQ2gpICgodWludDMyX3QpKChwZG1hKS0+VFJHU1RTICYgKDFVTCA8PCAodTMyQ2gpKSk/IDEgOiAwKQorCisvKioKKyAqIEBicmllZiAgICAgICBTZXQgU291cmNlIEFkZHJlc3MKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dICAgdTMyQWRkciAgICAgVGhlIHNlbGVjdGVkIGFkZHJlc3MKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIG1hY3JvIHNldCB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBzb3VyY2UgYWRkcmVzcy4KKyAqLworI2RlZmluZSBQRE1BX1NFVF9TUkNfQUREUihwZG1hLCB1MzJDaCwgdTMyQWRkcikgKCh1aW50MzJfdCkoKHBkbWEpLT5EU0NUWyh1MzJDaCldLlNBID0gKHUzMkFkZHIpKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IERlc3RpbmF0aW9uIEFkZHJlc3MKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dICAgdTMyQWRkciAgICAgVGhlIHNlbGVjdGVkIGFkZHJlc3MKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIG1hY3JvIHNldCB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICovCisjZGVmaW5lIFBETUFfU0VUX0RTVF9BRERSKHBkbWEsIHUzMkNoLCB1MzJBZGRyKSAoKHVpbnQzMl90KSgocGRtYSktPkRTQ1RbKHUzMkNoKV0uREEgPSAodTMyQWRkcikpKQorCisvKioKKyAqIEBicmllZiAgICAgICBTZXQgVHJhbnNmZXIgQ291bnQKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dICAgdTMyVHJhbnNDb3VudCAgVHJhbnNmZXIgQ291bnQKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIG1hY3JvIHNldCB0aGUgc2VsZWN0ZWQgY2hhbm5lbCB0cmFuc2ZlciBjb3VudC4KKyAqLworI2RlZmluZSBQRE1BX1NFVF9UUkFOU19DTlQocGRtYSwgdTMyQ2gsIHUzMlRyYW5zQ291bnQpICgodWludDMyX3QpKChwZG1hKS0+RFNDVFsodTMyQ2gpXS5DVEw9KChwZG1hKS0+RFNDVFsodTMyQ2gpXS5DVEwmflBETUFfRFNDVF9DVExfVFhDTlRfTXNrKXwoKCh1MzJUcmFuc0NvdW50KS0xVUwpIDw8IFBETUFfRFNDVF9DVExfVFhDTlRfUG9zKSkpCisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBTY2F0dGVyLWdhdGhlciBkZXNjcmlwdG9yIEFkZHJlc3MKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dICAgdTMyQWRkciAgICAgVGhlIGRlc2NyaXB0b3IgYWRkcmVzcworICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgbWFjcm8gc2V0IHRoZSBzZWxlY3RlZCBjaGFubmVsIHNjYXR0ZXItZ2F0aGVyIGRlc2NyaXB0b3IgYWRkcmVzcy4KKyAqLworI2RlZmluZSBQRE1BX1NFVF9TQ0FUVEVSX0RFU0MocGRtYSwgdTMyQ2gsIHUzMkFkZHIpICgodWludDMyX3QpKChwZG1hKS0+RFNDVFsodTMyQ2gpXS5ORVhUID0gKHUzMkFkZHIpIC0gKChwZG1hKS0+U0NBVEJBKSkpCisKKy8qKgorICogQGJyaWVmICAgICAgIFN0b3AgdGhlIGNoYW5uZWwKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBtYWNybyBzdG9wIHRoZSBzZWxlY3RlZCBjaGFubmVsLgorICovCisjZGVmaW5lIFBETUFfU1RPUChwZG1hLCB1MzJDaCkgKCh1aW50MzJfdCkoKHBkbWEpLT5QQVVTRSA9ICgxVUwgPDwgKHUzMkNoKSkpKQorCisvKioKKyAqIEBicmllZiAgICAgICBQYXVzZSB0aGUgY2hhbm5lbAorICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIG1hY3JvIHBhdXNlIHRoZSBzZWxlY3RlZCBjaGFubmVsLgorICovCisjZGVmaW5lIFBETUFfUEFVU0UocGRtYSwgdTMyQ2gpICgodWludDMyX3QpKChwZG1hKS0+UEFVU0UgPSAoMVVMIDw8ICh1MzJDaCkpKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgUmVzZXQgdGhlIGNoYW5uZWwKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBtYWNybyByZXNldCB0aGUgc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLworI2RlZmluZSBQRE1BX1JFU0VUKHBkbWEsIHUzMkNoKSAoKHVpbnQzMl90KSgocGRtYSktPkNIUlNUID0gKDFVTCA8PCAodTMyQ2gpKSkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIERlZmluZSBQV00gZnVuY3Rpb25zIHByb3RvdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgUERNQV9PcGVuKFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyTWFzayk7Cit2b2lkIFBETUFfQ2xvc2UoUERNQV9UICpwZG1hKTsKK3ZvaWQgUERNQV9TZXRUcmFuc2ZlckNudChQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoLCB1aW50MzJfdCB1MzJXaWR0aCwgdWludDMyX3QgdTMyVHJhbnNDb3VudCk7Cit2b2lkIFBETUFfU2V0U3RyaWRlKFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMkRlc3RMZW4sIHVpbnQzMl90IHUzMlNyY0xlbiwgdWludDMyX3QgdTMyVHJhbnNDb3VudCk7Cit2b2lkIFBETUFfU2V0VHJhbnNmZXJBZGRyKFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMlNyY0FkZHIsIHVpbnQzMl90IHUzMlNyY0N0cmwsIHVpbnQzMl90IHUzMkRzdEFkZHIsIHVpbnQzMl90IHUzMkRzdEN0cmwpOwordm9pZCBQRE1BX1NldFRyYW5zZmVyTW9kZShQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoLCB1aW50MzJfdCB1MzJQZXJpcGhlcmFsLCB1aW50MzJfdCB1MzJTY2F0dGVyRW4sIHVpbnQzMl90IHUzMkRlc2NBZGRyKTsKK3ZvaWQgUERNQV9TZXRCdXJzdFR5cGUoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJDaCwgdWludDMyX3QgdTMyQnVyc3RUeXBlLCB1aW50MzJfdCB1MzJCdXJzdFNpemUpOwordm9pZCBQRE1BX0VuYWJsZVRpbWVvdXQoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgUERNQV9EaXNhYmxlVGltZW91dChQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMk1hc2spOwordm9pZCBQRE1BX1NldFRpbWVPdXQoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJDaCwgdWludDMyX3QgdTMyT25PZmYsIHVpbnQzMl90IHUzMlRpbWVPdXRDbnQpOwordm9pZCBQRE1BX1RyaWdnZXIoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJDaCk7Cit2b2lkIFBETUFfRW5hYmxlSW50KFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMk1hc2spOwordm9pZCBQRE1BX0Rpc2FibGVJbnQoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJDaCwgdWludDMyX3QgdTMyTWFzayk7CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBQRE1BX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFBETUFfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1BETUFfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3FlaS5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvcWVpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYxMDE3NAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3FlaS5oCkBAIC0wLDAgKzEsMzg5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgcWVpLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFF1YWRyYXR1cmUgRW5jb2RlciBJbnRlcmZhY2UgKFFFSSkgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19RRUlfSF9fCisjZGVmaW5lIF9fUUVJX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgUUVJX0RyaXZlciBRRUkgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgUUVJX0VYUE9SVEVEX0NPTlNUQU5UUyBRRUkgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBRRUkgY291bnRpbmcgbW9kZSBzZWxlY3Rpb24gY29uc3RhbnRzIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFFFSV9DVExfWDRfRlJFRV9DT1VOVElOR19NT0RFICAgICAgICgweDA8PFFFSV9DVExfTU9ERV9Qb3MpIC8qITwgUUVJIG9wZXJhdGUgaW4gWDQgZnJlZS1jb3VudGluZyBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUUVJX0NUTF9YMl9GUkVFX0NPVU5USU5HX01PREUgICAgICAgKDB4MTw8UUVJX0NUTF9NT0RFX1BvcykgLyohPCBRRUkgb3BlcmF0ZSBpbiBYMiBmcmVlLWNvdW50aW5nIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBRRUlfQ1RMX1g0X0NPTVBBUkVfQ09VTlRJTkdfTU9ERSAgICAoMHgyPDxRRUlfQ1RMX01PREVfUG9zKSAvKiE8IFFFSSBvcGVyYXRlIGluIFg0IGNvbXBhcmUtY291bnRpbmcgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFFFSV9DVExfWDJfQ09NUEFSRV9DT1VOVElOR19NT0RFICAgICgweDM8PFFFSV9DVExfTU9ERV9Qb3MpIC8qITwgUUVJIG9wZXJhdGUgaW4gWDIgY29tcGFyZS1jb3VudGluZyBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUUVJIG5vaXNlIGZpbHRlciBjbG9jayBwcmUtZGl2aWRlIHNlbGVjdGlvbiBjb25zdGFudHMgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBRRUlfQ1RMX05GQ0xLU0VMX0RJVjEgICAoMHgwPDxRRUlfQ1RMX05GQ0xLU0VMX1BvcykgLyohPCBUaGUgc2FtcGxpbmcgZnJlcXVlbmN5IG9mIHRoZSBub2lzZSBmaWx0ZXIgaXMgUUVJX0NMSyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFFFSV9DVExfTkZDTEtTRUxfRElWMiAgICgweDE8PFFFSV9DVExfTkZDTEtTRUxfUG9zKSAvKiE8IFRoZSBzYW1wbGluZyBmcmVxdWVuY3kgb2YgdGhlIG5vaXNlIGZpbHRlciBpcyBRRUlfQ0xLLzIgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBRRUlfQ1RMX05GQ0xLU0VMX0RJVjQgICAoMHgyPDxRRUlfQ1RMX05GQ0xLU0VMX1BvcykgLyohPCBUaGUgc2FtcGxpbmcgZnJlcXVlbmN5IG9mIHRoZSBub2lzZSBmaWx0ZXIgaXMgUUVJX0NMSy80IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUUVJX0NUTF9ORkNMS1NFTF9ESVYxNiAgKDB4Mzw8UUVJX0NUTF9ORkNMS1NFTF9Qb3MpIC8qITwgVGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBvZiB0aGUgbm9pc2UgZmlsdGVyIGlzIFFFSV9DTEsvMTYgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBRRUlfQ1RMX05GQ0xLU0VMX0RJVjMyICAoMHg0PDxRRUlfQ1RMX05GQ0xLU0VMX1BvcykgLyohPCBUaGUgc2FtcGxpbmcgZnJlcXVlbmN5IG9mIHRoZSBub2lzZSBmaWx0ZXIgaXMgUUVJX0NMSy8zMiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFFFSV9DVExfTkZDTEtTRUxfRElWNjQgICgweDU8PFFFSV9DVExfTkZDTEtTRUxfUG9zKSAvKiE8IFRoZSBzYW1wbGluZyBmcmVxdWVuY3kgb2YgdGhlIG5vaXNlIGZpbHRlciBpcyBRRUlfQ0xLLzY0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBRRUlfRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIFFFSV9FWFBPUlRFRF9GVU5DVElPTlMgUUVJIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBRRUkgY29tcGFyZSBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGRpc2FibGUgUUVJIGNvdW50ZXIgY29tcGFyZSBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9ESVNBQkxFX0NOVF9DTVAocWVpKSAgICAoKHFlaSktPkNUTCAmPSAoflFFSV9DVExfQ01QRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFFFSSBjb21wYXJlIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSAgcWVpICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZW5hYmxlIFFFSSBjb3VudGVyIGNvbXBhcmUgZnVuY3Rpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfRU5BQkxFX0NOVF9DTVAocWVpKSAgICAgKChxZWkpLT5DVEwgfD0gUUVJX0NUTF9DTVBFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgUUVJIGluZGV4IGxhdGNoIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSAgcWVpICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZGlzYWJsZSBRRUkgaW5kZXggdHJpZ2dlciBjb3VudGVyIGxhdGNoIGZ1bmN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0RJU0FCTEVfSU5ERVhfTEFUQ0gocWVpKSAgICAgKChxZWkpLT5DVEwgJj0gKH5RRUlfQ1RMX0lEWExBVEVOX01zaykpCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBRRUkgaW5kZXggbGF0Y2ggZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBxZWkgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBlbmFibGUgUUVJIGluZGV4IHRyaWdnZXIgY291bnRlciBsYXRjaCBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9FTkFCTEVfSU5ERVhfTEFUQ0gocWVpKSAgICAgKChxZWkpLT5DVEwgfD0gUUVJX0NUTF9JRFhMQVRFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgUUVJIGluZGV4IHJlbG9hZCBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGRpc2FibGUgUUVJIGluZGV4IHRyaWdnZXIgY291bnRlciByZWxvYWQgZnVuY3Rpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfRElTQUJMRV9JTkRFWF9SRUxPQUQocWVpKSAgICAoKHFlaSktPkNUTCAmPSAoflFFSV9DVExfSURYUkxERU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFFFSSBpbmRleCByZWxvYWQgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBxZWkgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBlbmFibGUgUUVJIGluZGV4IHRyaWdnZXIgY291bnRlciByZWxvYWQgZnVuY3Rpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfRU5BQkxFX0lOREVYX1JFTE9BRChxZWkpICAgICgocWVpKS0+Q1RMIHw9IFFFSV9DVExfSURYUkxERU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFFFSSBpbnB1dAorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMySW5wdXRUeXBlICAgIElucHV0IHNpZ25hbCB0eXBlLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9DSEFFTl9Nc2sgICAgOiBRRUEgaW5wdXQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfQ0hBRU5fTXNrICAgIDogUUVCIGlucHV0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0lEWEVOX01zayAgICA6IElEWCBpbnB1dAorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGRpc2FibGUgc3BlY2lmaWVkIFFFSSBzaWduYWwgaW5wdXQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfRElTQUJMRV9JTlBVVChxZWksIHUzMklucHV0VHlwZSkgICAgICgocWVpKS0+Q1RMICY9IH4odTMySW5wdXRUeXBlKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFFFSSBpbnB1dAorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMySW5wdXRUeXBlICAgIElucHV0IHNpZ25hbCB0eXBlIC4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfQ0hBRU5fTXNrICAgIDogUUVBIGlucHV0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0NIQkVOX01zayAgICA6IFFFQiBpbnB1dAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9JRFhFTl9Nc2sgICAgOiBJRFggaW5wdXQKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBlbmFibGUgc3BlY2lmaWVkIFFFSSBzaWduYWwgaW5wdXQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfRU5BQkxFX0lOUFVUKHFlaSwgdTMySW5wdXRUeXBlKSAgICAgKChxZWkpLT5DVEwgfD0gKHUzMklucHV0VHlwZSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgaW52ZXJ0ZWQgaW5wdXQgcG9sYXJpdHkKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMklucHV0VHlwZSAgICBJbnB1dCBzaWduYWwgdHlwZSAuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0NIQUlOVl9Nc2sgICA6IFFFQSBJbnB1dAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9DSEJJTlZfTXNrICAgOiBRRUIgSW5wdXQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfSURYSU5WX01zayAgIDogSURYIElucHV0CisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZGlzYWJsZSBzcGVjaWZpZWQgUUVJIHNpZ25hbCBpbnZlcnRlZCBpbnB1dCBwb2xhcml0eS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9ESVNBQkxFX0lOUFVUX0lOVihxZWksIHUzMklucHV0VHlwZSkgICAgKChxZWkpLT5DVEwgJj0gfih1MzJJbnB1dFR5cGUpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgaW52ZXJ0ZWQgaW5wdXQgcG9sYXJpdHkKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMklucHV0VHlwZSAgICBJbnB1dCBzaWduYWwgdHlwZS4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfQ0hBSU5WX01zayAgIDogUUVBIElucHV0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0NIQklOVl9Nc2sgICA6IFFFQiBJbnB1dAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9JRFhJTlZfTXNrICAgOiBJRFggSW5wdXQKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpbnZlcnNlIHNwZWNpZmllZCBRRUkgc2lnbmFsIGlucHV0IHBvbGFyaXR5LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0VOQUJMRV9JTlBVVF9JTlYocWVpLCB1MzJJbnB1dFR5cGUpICAgICAoKHFlaSktPkNUTCB8PSAodTMySW5wdXRUeXBlKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBRRUkgaW50ZXJydXB0CisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkludFNlbCAgIEludGVycnVwdCB0eXBlIHNlbGVjdGlvbi4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9ESVJJRU5fTXNrICAgOiBEaXJlY3Rpb24gY2hhbmdlIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX09WVU5JRU5fTXNrICA6IENvdW50ZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0NNUElFTl9Nc2sgICA6IENvbXBhcmUtbWF0Y2ggaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfSURYSUVOX01zayAgIDogSW5kZXggZGV0ZWN0ZWQgaW50ZXJydXB0CisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZGlzYWJsZSBzcGVjaWZpZWQgUUVJIGludGVycnVwdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9ESVNBQkxFX0lOVChxZWksIHUzMkludFNlbCkgICAgICgocWVpKS0+Q1RMICY9IH4odTMySW50U2VsKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFFFSSBpbnRlcnJ1cHQKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMySW50U2VsICAgSW50ZXJydXB0IHR5cGUgc2VsZWN0aW9uLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0RJUklFTl9Nc2sgICA6IERpcmVjdGlvbiBjaGFuZ2UgaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfT1ZVTklFTl9Nc2sgIDogQ291bnRlciBvdmVyZmxvdyBvciB1bmRlcmZsb3cgaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfQ01QSUVOX01zayAgIDogQ29tcGFyZS1tYXRjaCBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9JRFhJRU5fTXNrICAgOiBJbmRleCBkZXRlY3RlZCBpbnRlcnJ1cHQKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBlbmFibGUgc3BlY2lmaWVkIFFFSSBpbnRlcnJ1cHQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfRU5BQkxFX0lOVChxZWksIHUzMkludFNlbCkgICAgICAoKHFlaSktPkNUTCB8PSAodTMySW50U2VsKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBRRUkgbm9pc2UgZmlsdGVyCisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGRpc2FibGUgUUVJIG5vaXNlIGZpbHRlciBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9ESVNBQkxFX05PSVNFX0ZJTFRFUihxZWkpICAgICAgICgocWVpKS0+Q1RMIHw9IFFFSV9DVExfTkZESVNfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUUVJIG5vaXNlIGZpbHRlcgorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJDbGtTZWwgICBUaGUgc2FtcGxpbmcgZnJlcXVlbmN5IG9mIHRoZSBub2lzZSBmaWx0ZXIgY2xvY2suCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfTkZDTEtTRUxfRElWMQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX05GQ0xLU0VMX0RJVjIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9ORkNMS1NFTF9ESVY0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfTkZDTEtTRUxfRElWMTYKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9ORkNMS1NFTF9ESVYzMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX05GQ0xLU0VMX0RJVjY0CisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZW5hYmxlIFFFSSBub2lzZSBmaWx0ZXIgZnVuY3Rpb24gYW5kIHNlbGVjdCBub2lzZSBmaWx0ZXIgY2xvY2suCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfRU5BQkxFX05PSVNFX0ZJTFRFUihxZWksIHUzMkNsa1NlbCkgICAgICgocWVpKS0+Q1RMID0gKChxZWkpLT5DVEwgJiAofihRRUlfQ1RMX05GRElTX01za3xRRUlfQ1RMX05GQ0xLU0VMX01zaykpKSB8ICh1MzJDbGtTZWwpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUUVJIGNvdW50ZXIgdmFsdWUKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBRRUkgcHVsc2UgY291bnRlciByZWdpc3RlciB2YWx1ZS4KKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGdldCBRRUkgcHVsc2UgY291bnRlciB2YWx1ZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9HRVRfQ05UX1ZBTFVFKHFlaSkgICAgICAoKHFlaSktPkNOVCkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFFFSSBjb3VudGluZyBkaXJlY3Rpb24KKyAgKiBAcGFyYW1baW5dICBxZWkgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcmV0dmFsICAgICAwICAgICAgIFFFSSBjb3VudGVyIGlzIGluIGRvd24tY291bnRpbmcuCisgICogQHJldHZhbCAgICAgMSAgICAgICBRRUkgY291bnRlciBpcyBpbiB1cC1jb3VudGluZy4KKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGdldCBRRUkgY291bnRpbmcgZGlyZWN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0dFVF9ESVIocWVpKSAgICAoKChxZWkpLT5TVEFUVVMgJiAoUUVJX1NUQVRVU19ESVJGX01zaykpPzE6MCkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFFFSSBjb3VudGVyIGhvbGQgdmFsdWUKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBRRUkgcHVsc2UgY291bnRlciBob2xkIHJlZ2lzdGVyIHZhbHVlLgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0IFFFSSBwdWxzZSBjb3VudGVyIGhvbGQgdmFsdWUsIHdoaWNoIGlzIHVwZGF0ZWQgd2l0aCBjb3VudGVyIHZhbHVlIGluIGhvbGQgY291bnRlciB2YWx1ZSBjb250cm9sLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0dFVF9IT0xEX1ZBTFVFKHFlaSkgICAgICgocWVpKS0+Q05USE9MRCkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFFFSSBjb3VudGVyIGluZGV4IGxhdGNoIHZhbHVlCisgICogQHBhcmFtW2luXSAgcWVpICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgUUVJIHB1bHNlIGNvdW50ZXIgaW5kZXggbGF0Y2ggdmFsdWUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGdldCBRRUkgcHVsc2UgY291bnRlciBpbmRleCBsYXRjaCB2YWx1ZSwgd2hpY2ggaXMgdXBkYXRlZCB3aXRoIGNvdW50ZXIgdmFsdWUgd2hlbiB0aGUgaW5kZXggaXMgZGV0ZWN0ZWQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfR0VUX0lOREVYX0xBVENIX1ZBTFVFKHFlaSkgICAgICgocWVpKS0+Q05UTEFUQ0gpCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBRRUkgY291bnRlciBpbmRleCBsYXRjaCB2YWx1ZQorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlZhbCAgVGhlIGxhdGNoIHZhbHVlLgorICAqIEByZXR1cm4gICAgIFFFSSBwdWxzZSBjb3VudGVyIGluZGV4IGxhdGNoIHZhbHVlCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBzZXQgUUVJIHB1bHNlIGNvdW50ZXIgaW5kZXggbGF0Y2ggdmFsdWUsIHdoaWNoIGlzIHVwZGF0ZWQgd2l0aCBjb3VudGVyIHZhbHVlIHdoZW4gdGhlIGluZGV4IGlzIGRldGVjdGVkLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX1NFVF9JTkRFWF9MQVRDSF9WQUxVRShxZWksdTMyVmFsKSAgICAgKChxZWkpLT5DTlRMQVRDSCA9ICh1MzJWYWwpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUUVJIGludGVycnVwdCBmbGFnIHN0YXR1cworICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJJbnRTZWwgICBJbnRlcnJ1cHQgdHlwZSBzZWxlY3Rpb24uCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9TVEFUVVNfRElSRl9Nc2sgICAgICA6IENvdW50aW5nIGRpcmVjdGlvbiBmbGFnCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9TVEFUVVNfRElSQ0hHRl9Nc2sgICA6IERpcmVjdGlvbiBjaGFuZ2UgZmxhZworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfU1RBVFVTX09WVU5GX01zayAgICAgOiBDb3VudGVyIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBmbGFnCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9TVEFUVVNfQ01QRl9Nc2sgICAgICA6IENvbXBhcmUtbWF0Y2ggZmxhZworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfU1RBVFVTX0lEWEZfTXNrICAgICAgOiBJbmRleCBkZXRlY3RlZCBmbGFnCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgUUVJIHNwZWNpZmllZCBpbnRlcnJ1cHQgZmxhZyBpcyBub3Qgc2V0LgorICAqIEByZXR2YWwgICAgIDEgICAgICAgICAgIFFFSSBzcGVjaWZpZWQgaW50ZXJydXB0IGZsYWcgaXMgc2V0LgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0IFFFSSBzcGVjaWZpZWQgaW50ZXJydXB0IGZsYWcgc3RhdHVzLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0dFVF9JTlRfRkxBRyhxZWksIHUzMkludFNlbCkgICAgICAgICgoKHFlaSktPlNUQVRVUyAmICh1MzJJbnRTZWwpKT8xOjApCisKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgUUVJIGludGVycnVwdCBmbGFnCisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkludFNlbCAgIEludGVycnVwdCB0eXBlIHNlbGVjdGlvbi4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX1NUQVRVU19ESVJDSEdGX01zayAgIDogRGlyZWN0aW9uIGNoYW5nZSBmbGFnCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9TVEFUVVNfT1ZVTkZfTXNrICAgICA6IENvdW50ZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGZsYWcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX1NUQVRVU19DTVBGX01zayAgICAgIDogQ29tcGFyZS1tYXRjaCBmbGFnCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9TVEFUVVNfSURYRl9Nc2sgICAgICA6IEluZGV4IGRldGVjdGVkIGZsYWcKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBjbGVhciBRRUkgc3BlY2lmaWVkIGludGVycnVwdCBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0NMUl9JTlRfRkxBRyhxZWksIHUzMkludFNlbCkgICAgICgocWVpKS0+U1RBVFVTID0gKHUzMkludFNlbCkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBRRUkgY291bnRlciBjb21wYXJlIHZhbHVlCisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlZhbHVlICAgIFRoZSBjb3VudGVyIGNvbXBhcmUgdmFsdWUuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gc2V0IFFFSSBwdWxzZSBjb3VudGVyIGNvbXBhcmUgdmFsdWUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfU0VUX0NOVF9DTVAocWVpLCB1MzJWYWx1ZSkgICAgICAoKHFlaSktPkNOVENNUCA9ICh1MzJWYWx1ZSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBRRUkgY291bnRlciB2YWx1ZQorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJWYWx1ZSAgICBUaGUgY291bnRlciBjb21wYXJlIHZhbHVlLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIHNldCBRRUkgcHVsc2UgY291bnRlciB2YWx1ZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9TRVRfQ05UX1ZBTFVFKHFlaSwgdTMyVmFsdWUpICAgICAgKChxZWkpLT5DTlQgPSAodTMyVmFsdWUpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUUVJIGNvdW50ZXIgaG9sZCBtb2RlCisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlR5cGUgICAgIFRoZSB0cmlnZ2VyZWQgdHlwZS4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9IT0xEQ05UX01zayAgICAgIDogSG9sZCBRRUlfQ05UIGNvbnRyb2wKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9IT0xEVE1SMF9Nc2sgICAgIDogSG9sZCBRRUlfQ05UIGJ5IFRpbWVyMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0hPTERUTVIxX01zayAgICAgOiBIb2xkIFFFSV9DTlQgYnkgVGltZXIxCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfSE9MRFRNUjJfTXNrICAgICA6IEhvbGQgUUVJX0NOVCBieSBUaW1lcjIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9IT0xEVE1SM19Nc2sgICAgIDogSG9sZCBRRUlfQ05UIGJ5IFRpbWVyMworICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGVuYWJsZSBRRUkgY291bnRlciBob2xkIG1vZGUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfRU5BQkxFX0hPTERfVFJHX1NSQyhxZWksIHUzMlR5cGUpICAgICAgKChxZWkpLT5DVEwgfD0gKHUzMlR5cGUpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFFFSSBjb3VudGVyIGhvbGQgbW9kZQorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJUeXBlICAgICBUaGUgdHJpZ2dlcmVkIHR5cGUuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfSE9MRENOVF9Nc2sgICAgICA6IEhvbGQgUUVJX0NOVCBjb250cm9sCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfSE9MRFRNUjBfTXNrICAgICA6IEhvbGQgUUVJX0NOVCBieSBUaW1lcjAKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9IT0xEVE1SMV9Nc2sgICAgIDogSG9sZCBRRUlfQ05UIGJ5IFRpbWVyMQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0hPTERUTVIyX01zayAgICAgOiBIb2xkIFFFSV9DTlQgYnkgVGltZXIyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfSE9MRFRNUjNfTXNrICAgICA6IEhvbGQgUUVJX0NOVCBieSBUaW1lcjMKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBkaXNhYmxlIFFFSSBjb3VudGVyIGhvbGQgbW9kZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9ESVNBQkxFX0hPTERfVFJHX1NSQyhxZWksIHUzMlR5cGUpICAgICAgKChxZWkpLT5DVEwgJj0gfih1MzJUeXBlKSkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFFFSSBtYXhpbXVtIGNvdW50IHZhbHVlCisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlZhbHVlICAgIFRoZSBjb3VudGVyIG1heGltdW0gdmFsdWUuCisgICogQHJldHVybiAgICAgUUVJIG1heGltdW0gY291bnQgdmFsdWUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIHNldCBRRUkgbWF4aW11bSBjb3VudCB2YWx1ZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9TRVRfQ05UX01BWChxZWksIHUzMlZhbHVlKSAgICAgICgocWVpKS0+Q05UTUFYID0gKHUzMlZhbHVlKSkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFFFSSBjb3VudGluZyBtb2RlCisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1vZGUgICAgIFFFSSBjb3VudGluZyBtb2RlLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX1g0X0ZSRUVfQ09VTlRJTkdfTU9ERQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX1gyX0ZSRUVfQ09VTlRJTkdfTU9ERQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX1g0X0NPTVBBUkVfQ09VTlRJTkdfTU9ERQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX1gyX0NPTVBBUkVfQ09VTlRJTkdfTU9ERQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIHNldCBRRUkgY291bnRpbmcgbW9kZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9TRVRfQ05UX01PREUocWVpLCB1MzJNb2RlKSAgICAgICAoKHFlaSktPkNUTCA9ICgocWVpKS0+Q1RMICYgKH5RRUlfQ1RMX01PREVfTXNrKSkgfCAodTMyTW9kZSkpCisKKwordm9pZCBRRUlfQ2xvc2UoUUVJX1QqIHFlaSk7Cit2b2lkIFFFSV9EaXNhYmxlSW50KFFFSV9UKiBxZWksIHVpbnQzMl90IHUzMkludFNlbCk7Cit2b2lkIFFFSV9FbmFibGVJbnQoUUVJX1QqIHFlaSwgdWludDMyX3QgdTMySW50U2VsKTsKK3ZvaWQgUUVJX09wZW4oUUVJX1QqIHFlaSwgdWludDMyX3QgdTMyTW9kZSwgdWludDMyX3QgdTMyVmFsdWUpOwordm9pZCBRRUlfU3RhcnQoUUVJX1QqIHFlaSk7Cit2b2lkIFFFSV9TdG9wKFFFSV9UKiBxZWkpOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUUVJX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFFFSV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qX19RRUlfSF9fKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvcXNwaS5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvcXNwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjI5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9xc3BpLmgKQEAgLTAsMCArMSwzODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBxc3BpLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBRU1BJIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fUVNQSV9IX18KKyNkZWZpbmUgX19RU1BJX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgUVNQSV9Ecml2ZXIgUVNQSSBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBRU1BJX0VYUE9SVEVEX0NPTlNUQU5UUyBRU1BJIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKworI2RlZmluZSBRU1BJX01PREVfMCAgICAgICAgKFFTUElfQ1RMX1RYTkVHX01zaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLUE9MPTA7IFJYTkVHPTA7IFRYTkVHPTEgKi8KKyNkZWZpbmUgUVNQSV9NT0RFXzEgICAgICAgIChRU1BJX0NUTF9SWE5FR19Nc2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS1BPTD0wOyBSWE5FRz0xOyBUWE5FRz0wICovCisjZGVmaW5lIFFTUElfTU9ERV8yICAgICAgICAoUVNQSV9DVExfQ0xLUE9MX01zayB8IFFTUElfQ1RMX1JYTkVHX01zaykgICAgICAgLyohPCBDTEtQT0w9MTsgUlhORUc9MTsgVFhORUc9MCAqLworI2RlZmluZSBRU1BJX01PREVfMyAgICAgICAgKFFTUElfQ1RMX0NMS1BPTF9Nc2sgfCBRU1BJX0NUTF9UWE5FR19Nc2spICAgICAgIC8qITwgQ0xLUE9MPTE7IFJYTkVHPTA7IFRYTkVHPTEgKi8KKworI2RlZmluZSBRU1BJX1NMQVZFICAgICAgICAgKFFTUElfQ1RMX1NMQVZFX01zaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IGFzIHNsYXZlICovCisjZGVmaW5lIFFTUElfTUFTVEVSICAgICAgICAoMHgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZXQgYXMgbWFzdGVyICovCisKKyNkZWZpbmUgUVNQSV9TUyAgICAgICAgICAgICAgICAoUVNQSV9TU0NUTF9TU19Nc2spICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNldCBTUyAqLworI2RlZmluZSBRU1BJX1NTX0FDVElWRV9ISUdIICAgIChRU1BJX1NTQ1RMX1NTQUNUUE9MX01zaykgICAgICAgICAgICAgICAgICAgIC8qITwgU1MgYWN0aXZlIGhpZ2ggKi8KKyNkZWZpbmUgUVNQSV9TU19BQ1RJVkVfTE9XICAgICAoMHgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNTIGFjdGl2ZSBsb3cgKi8KKworLyogUVNQSSBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSBRU1BJX1VOSVRfSU5UX01BU0sgICAgICAgICAgICAgICAgKDB4MDAxVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbml0IHRyYW5zZmVyIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFFTUElfU1NBQ1RfSU5UX01BU0sgICAgICAgICAgICAgICAoMHgwMDJVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIHNlbGVjdGlvbiBzaWduYWwgYWN0aXZlIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFFTUElfU1NJTkFDVF9JTlRfTUFTSyAgICAgICAgICAgICAoMHgwMDRVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaW5hY3RpdmUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgUVNQSV9TTFZVUl9JTlRfTUFTSyAgICAgICAgICAgICAgICgweDAwOFVMKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xhdmUgdW5kZXIgcnVuIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFFTUElfU0xWQkVfSU5UX01BU0sgICAgICAgICAgICAgICAoMHgwMTBVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBRU1BJX1NMVlRPX0lOVF9NQVNLICAgICAgICAgICAgICAgKDB4MDIwVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTbGF2ZSBNb2RlIFRpbWUtb3V0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFFTUElfVFhVRl9JTlRfTUFTSyAgICAgICAgICAgICAgICAoMHgwNDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBRU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSyAgICAgICAgICAgKDB4MDgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGSUZPIFRYIHRocmVzaG9sZCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBRU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSyAgICAgICAgICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGSUZPIFJYIHRocmVzaG9sZCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBRU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSyAgICAgICAgICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGSUZPIFJYIG92ZXJydW4gaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgUVNQSV9GSUZPX1JYVE9fSU5UX01BU0sgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRklGTyBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgbWFzayAqLworCisvKiBRU1BJIFN0YXR1cyBNYXNrICovCisjZGVmaW5lIFFTUElfQlVTWV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgwMVVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJ1c3kgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgUVNQSV9SWF9FTVBUWV9NQVNLICAgICAgICAgICAgICAgICgweDAyVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlggZW1wdHkgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgUVNQSV9SWF9GVUxMX01BU0sgICAgICAgICAgICAgICAgICgweDA0VUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlggZnVsbCBzdGF0dXMgbWFzayAqLworI2RlZmluZSBRU1BJX1RYX0VNUFRZX01BU0sgICAgICAgICAgICAgICAgKDB4MDhVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWCBlbXB0eSBzdGF0dXMgbWFzayAqLworI2RlZmluZSBRU1BJX1RYX0ZVTExfTUFTSyAgICAgICAgICAgICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWCBmdWxsIHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFFTUElfVFhSWF9SRVNFVF9NQVNLICAgICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRYIG9yIFJYIHJlc2V0IHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFFTUElfU1BJRU5fU1RTX01BU0sgICAgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSUVOIHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFFTUElfU1NMSU5FX1NUU19NQVNLICAgICAgICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUEl4X1NTIGxpbmUgc3RhdHVzIG1hc2sgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBRU1BJX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBRU1BJX0VYUE9SVEVEX0ZVTkNUSU9OUyBRU1BJIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgdGhlIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgV3JpdGUgMSB0byBVTklUSUYgYml0IG9mIFFTUElfU1RBVFVTIHJlZ2lzdGVyIHRvIGNsZWFyIHRoZSB1bml0IHRyYW5zZmVyIGludGVycnVwdCBmbGFnLgorICAqLworI2RlZmluZSBRU1BJX0NMUl9VTklUX1RSQU5TX0lOVF9GTEFHKHFzcGkpICAgKCAocXNwaSktPlNUQVRVUyA9IFFTUElfU1RBVFVTX1VOSVRJRl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIDItYml0IFRyYW5zZmVyIG1vZGUuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgQ2xlYXIgVFdPQklUIGJpdCBvZiBRU1BJX0NUTCByZWdpc3RlciB0byBkaXNhYmxlIDItYml0IFRyYW5zZmVyIG1vZGUuCisgICovCisjZGVmaW5lIFFTUElfRElTQUJMRV8yQklUX01PREUocXNwaSkgICAoIChxc3BpKS0+Q1RMICY9IH5RU1BJX0NUTF9UV09CSVRfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBTbGF2ZSAzLXdpcmUgbW9kZS4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBTTFYzV0lSRSBiaXQgb2YgUVNQSV9TU0NUTCByZWdpc3RlciB0byBkaXNhYmxlIFNsYXZlIDMtd2lyZSBtb2RlLgorICAqLworI2RlZmluZSBRU1BJX0RJU0FCTEVfM1dJUkVfTU9ERShxc3BpKSAgICggKHFzcGkpLT5TU0NUTCAmPSB+UVNQSV9TU0NUTF9TTFYzV0lSRV9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIER1YWwgSS9PIG1vZGUuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgQ2xlYXIgRFVBTElPRU4gYml0IG9mIFFTUElfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgRHVhbCBJL08gbW9kZS4KKyAgKi8KKyNkZWZpbmUgUVNQSV9ESVNBQkxFX0RVQUxfTU9ERShxc3BpKSAgICggKHFzcGkpLT5DVEwgJj0gflFTUElfQ1RMX0RVQUxJT0VOX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgUXVhZCBJL08gbW9kZS4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBRVUFESU9FTiBiaXQgb2YgUVNQSV9DVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBRdWFkIEkvTyBtb2RlLgorICAqLworI2RlZmluZSBRU1BJX0RJU0FCTEVfUVVBRF9NT0RFKHFzcGkpICAgKCAocXNwaSktPkNUTCAmPSB+UVNQSV9DVExfUVVBRElPRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIDItYml0IFRyYW5zZmVyIG1vZGUuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgU2V0IFRXT0JJVCBiaXQgb2YgUVNQSV9DVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIDItYml0IFRyYW5zZmVyIG1vZGUuCisgICovCisjZGVmaW5lIFFTUElfRU5BQkxFXzJCSVRfTU9ERShxc3BpKSAgICggKHFzcGkpLT5DVEwgfD0gUVNQSV9DVExfVFdPQklUX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBTbGF2ZSAzLXdpcmUgbW9kZS4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgU0xWM1dJUkUgYml0IG9mIFFTUElfU1NDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIFNsYXZlIDMtd2lyZSBtb2RlLgorICAqLworI2RlZmluZSBRU1BJX0VOQUJMRV8zV0lSRV9NT0RFKHFzcGkpICAgKCAocXNwaSktPlNTQ1RMIHw9IFFTUElfU1NDVExfU0xWM1dJUkVfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIER1YWwgaW5wdXQgbW9kZS4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBEQVRESVIgYml0IGFuZCBzZXQgRFVBTElPRU4gYml0IG9mIFFTUElfQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBEdWFsIGlucHV0IG1vZGUuCisgICovCisjZGVmaW5lIFFTUElfRU5BQkxFX0RVQUxfSU5QVVRfTU9ERShxc3BpKSAgICggKHFzcGkpLT5DVEwgPSAoKHFzcGkpLT5DVEwgJiAoflFTUElfQ1RMX0RBVERJUl9Nc2spKSB8IFFTUElfQ1RMX0RVQUxJT0VOX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBEdWFsIG91dHB1dCBtb2RlLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBEQVRESVIgYml0IGFuZCBEVUFMSU9FTiBiaXQgb2YgUVNQSV9DVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIER1YWwgb3V0cHV0IG1vZGUuCisgICovCisjZGVmaW5lIFFTUElfRU5BQkxFX0RVQUxfT1VUUFVUX01PREUocXNwaSkgICAoIChxc3BpKS0+Q1RMIHw9IChRU1BJX0NUTF9EQVRESVJfTXNrIHwgUVNQSV9DVExfRFVBTElPRU5fTXNrKSApCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBRdWFkIGlucHV0IG1vZGUuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgQ2xlYXIgREFURElSIGJpdCBhbmQgc2V0IFFVQURJT0VOIGJpdCBvZiBRU1BJX0NUTCByZWdpc3RlciB0byBlbmFibGUgUXVhZCBpbnB1dCBtb2RlLgorICAqLworI2RlZmluZSBRU1BJX0VOQUJMRV9RVUFEX0lOUFVUX01PREUocXNwaSkgICAoIChxc3BpKS0+Q1RMID0gKChxc3BpKS0+Q1RMICYgKH5RU1BJX0NUTF9EQVRESVJfTXNrKSkgfCBRU1BJX0NUTF9RVUFESU9FTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUXVhZCBvdXRwdXQgbW9kZS4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgREFURElSIGJpdCBhbmQgUVVBRElPRU4gYml0IG9mIFFTUElfQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBRdWFkIG91dHB1dCBtb2RlLgorICAqLworI2RlZmluZSBRU1BJX0VOQUJMRV9RVUFEX09VVFBVVF9NT0RFKHFzcGkpICAgKCAocXNwaSktPkNUTCB8PSAoUVNQSV9DVExfREFURElSX01zayB8IFFTUElfQ1RMX1FVQURJT0VOX01zaykgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUcmlnZ2VyIFJYIFBETUEgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgU2V0IFJYUERNQUVOIGJpdCBvZiBRU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIFJYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFFTUElfVFJJR0dFUl9SWF9QRE1BKHFzcGkpICAgKCAocXNwaSktPlBETUFDVEwgfD0gUVNQSV9QRE1BQ1RMX1JYUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIFRyaWdnZXIgVFggUERNQSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgVFhQRE1BRU4gYml0IG9mIFFTUElfUERNQUNUTCByZWdpc3RlciB0byBlbmFibGUgVFggUERNQSB0cmFuc2ZlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgUVNQSV9UUklHR0VSX1RYX1BETUEocXNwaSkgICAoIChxc3BpKS0+UERNQUNUTCB8PSBRU1BJX1BETUFDVExfVFhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgVHJpZ2dlciBUWCBhbmQgUlggUERNQSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgVFhQRE1BRU4gYml0IGFuZCBSWFBETUFFTiBiaXQgb2YgUVNQSV9QRE1BQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBUWCBhbmQgUlggUERNQSB0cmFuc2ZlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgUVNQSV9UUklHR0VSX1RYX1JYX1BETUEocXNwaSkgICAoIChxc3BpKS0+UERNQUNUTCB8PSAoUVNQSV9QRE1BQ1RMX1RYUERNQUVOX01zayB8IFFTUElfUERNQUNUTF9SWFBETUFFTl9Nc2spICkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBSWCBQRE1BIHRyYW5zZmVyLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFJYUERNQUVOIGJpdCBvZiBRU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBSWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBRU1BJX0RJU0FCTEVfUlhfUERNQShxc3BpKSAgICggKHFzcGkpLT5QRE1BQ1RMICY9IH5RU1BJX1BETUFDVExfUlhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBUWCBQRE1BIHRyYW5zZmVyLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFRYUERNQUVOIGJpdCBvZiBRU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBUWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBRU1BJX0RJU0FCTEVfVFhfUERNQShxc3BpKSAgICggKHFzcGkpLT5QRE1BQ1RMICY9IH5RU1BJX1BETUFDVExfVFhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBUWCBhbmQgUlggUERNQSB0cmFuc2Zlci4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBUWFBETUFFTiBiaXQgYW5kIFJYUERNQUVOIGJpdCBvZiBRU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBUWCBhbmQgUlggUERNQSB0cmFuc2ZlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgUVNQSV9ESVNBQkxFX1RYX1JYX1BETUEocXNwaSkgICAoIChxc3BpKS0+UERNQUNUTCAmPSB+KFFTUElfUERNQUNUTF9UWFBETUFFTl9Nc2sgfCBRU1BJX1BETUFDVExfUlhQRE1BRU5fTXNrKSApCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCB0aGUgY291bnQgb2YgYXZhaWxhYmxlIGRhdGEgaW4gUlggRklGTy4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgVGhlIGNvdW50IG9mIGF2YWlsYWJsZSBkYXRhIGluIFJYIEZJRk8uCisgICogQGRldGFpbHMgICAgUmVhZCBSWENOVCAoUVNQSV9TVEFUVVNbMjc6MjRdKSB0byBnZXQgdGhlIGNvdW50IG9mIGF2YWlsYWJsZSBkYXRhIGluIFJYIEZJRk8uCisgICovCisjZGVmaW5lIFFTUElfR0VUX1JYX0ZJRk9fQ09VTlQocXNwaSkgICAoICgocXNwaSktPlNUQVRVUyAmIFFTUElfU1RBVFVTX1JYQ05UX01zaykgPj4gUVNQSV9TVEFUVVNfUlhDTlRfUG9zICkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHRoZSBSWCBGSUZPIGVtcHR5IGZsYWcuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR2YWwgICAgIDAgUlggRklGTyBpcyBub3QgZW1wdHkuCisgICogQHJldHZhbCAgICAgMSBSWCBGSUZPIGlzIGVtcHR5LgorICAqIEBkZXRhaWxzICAgIFJlYWQgUlhFTVBUWSBiaXQgb2YgUVNQSV9TVEFUVVMgcmVnaXN0ZXIgdG8gZ2V0IHRoZSBSWCBGSUZPIGVtcHR5IGZsYWcuCisgICovCisjZGVmaW5lIFFTUElfR0VUX1JYX0ZJRk9fRU1QVFlfRkxBRyhxc3BpKSAgICggKChxc3BpKS0+U1RBVFVTICYgUVNQSV9TVEFUVVNfUlhFTVBUWV9Nc2spID4+IFFTUElfU1RBVFVTX1JYRU1QVFlfUG9zICkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHRoZSBUWCBGSUZPIGVtcHR5IGZsYWcuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR2YWwgICAgIDAgVFggRklGTyBpcyBub3QgZW1wdHkuCisgICogQHJldHZhbCAgICAgMSBUWCBGSUZPIGlzIGVtcHR5LgorICAqIEBkZXRhaWxzICAgIFJlYWQgVFhFTVBUWSBiaXQgb2YgUVNQSV9TVEFUVVMgcmVnaXN0ZXIgdG8gZ2V0IHRoZSBUWCBGSUZPIGVtcHR5IGZsYWcuCisgICovCisjZGVmaW5lIFFTUElfR0VUX1RYX0ZJRk9fRU1QVFlfRkxBRyhxc3BpKSAgICggKChxc3BpKS0+U1RBVFVTICYgUVNQSV9TVEFUVVNfVFhFTVBUWV9Nc2spID4+IFFTUElfU1RBVFVTX1RYRU1QVFlfUG9zICkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHRoZSBUWCBGSUZPIGZ1bGwgZmxhZy4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHZhbCAgICAgMCBUWCBGSUZPIGlzIG5vdCBmdWxsLgorICAqIEByZXR2YWwgICAgIDEgVFggRklGTyBpcyBmdWxsLgorICAqIEBkZXRhaWxzICAgIFJlYWQgVFhGVUxMIGJpdCBvZiBRU1BJX1NUQVRVUyByZWdpc3RlciB0byBnZXQgdGhlIFRYIEZJRk8gZnVsbCBmbGFnLgorICAqLworI2RlZmluZSBRU1BJX0dFVF9UWF9GSUZPX0ZVTExfRkxBRyhxc3BpKSAgICggKChxc3BpKS0+U1RBVFVTICYgUVNQSV9TVEFUVVNfVFhGVUxMX01zaykgPj4gUVNQSV9TVEFUVVNfVFhGVUxMX1BvcyApCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCB0aGUgZGF0dW0gcmVhZCBmcm9tIFJYIHJlZ2lzdGVyLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBEYXRhIGluIFJYIHJlZ2lzdGVyLgorICAqIEBkZXRhaWxzICAgIFJlYWQgUVNQSV9SWCByZWdpc3RlciB0byBnZXQgdGhlIHJlY2VpdmVkIGRhdHVtLgorICAqLworI2RlZmluZSBRU1BJX1JFQURfUlgocXNwaSkgICAoIChxc3BpKS0+UlggKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSBkYXR1bSB0byBUWCByZWdpc3Rlci4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyVHhEYXRhIFRoZSBkYXR1bSB3aGljaCB1c2VyIGF0dGVtcHQgdG8gdHJhbnNmZXIgdGhyb3VnaCBRU1BJIGJ1cy4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFdyaXRlIHUzMlR4RGF0YSB0byBRU1BJX1RYIHJlZ2lzdGVyLgorICAqLworI2RlZmluZSBRU1BJX1dSSVRFX1RYKHFzcGksIHUzMlR4RGF0YSkgICAoIChxc3BpKS0+VFggPSAodTMyVHhEYXRhKSApCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBRU1BJeF9TUyBwaW4gdG8gaGlnaCBzdGF0ZS4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBEaXNhYmxlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24gYW5kIHNldCBRU1BJeF9TUyBwaW4gdG8gaGlnaCBzdGF0ZS4KKyAgKi8KKyNkZWZpbmUgUVNQSV9TRVRfU1NfSElHSChxc3BpKSAgICggKHFzcGkpLT5TU0NUTCA9ICgocXNwaSktPlNTQ1RMICYgKH5RU1BJX1NTQ1RMX0FVVE9TU19Nc2spKSB8IChRU1BJX1NTQ1RMX1NTQUNUUE9MX01zayB8IFFTUElfU1NDVExfU1NfTXNrKSApCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBRU1BJeF9TUyBwaW4gdG8gbG93IHN0YXRlLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIERpc2FibGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbiBhbmQgc2V0IFFTUEl4X1NTIHBpbiB0byBsb3cgc3RhdGUuCisgICovCisjZGVmaW5lIFFTUElfU0VUX1NTX0xPVyhxc3BpKSAgICggKHFzcGkpLT5TU0NUTCA9ICgocXNwaSktPlNTQ1RMICYgKH4oUVNQSV9TU0NUTF9BVVRPU1NfTXNrIHwgUVNQSV9TU0NUTF9TU0FDVFBPTF9Nc2spKSkgfCBRU1BJX1NTQ1RMX1NTX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBCeXRlIFJlb3JkZXIgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgRW5hYmxlIEJ5dGUgUmVvcmRlciBmdW5jdGlvbi4gVGhlIHN1c3BlbmQgaW50ZXJ2YWwgZGVwZW5kcyBvbiB0aGUgc2V0dGluZyBvZiBTVVNQSVRWIChRU1BJX0NUTFs3OjRdKS4KKyAgKi8KKyNkZWZpbmUgUVNQSV9FTkFCTEVfQllURV9SRU9SREVSKHFzcGkpICAgKCAocXNwaSktPkNUTCB8PSAgUVNQSV9DVExfUkVPUkRFUl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIEJ5dGUgUmVvcmRlciBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBSRU9SREVSIGJpdCBmaWVsZCBvZiBRU1BJX0NUTCByZWdpc3RlciB0byBkaXNhYmxlIEJ5dGUgUmVvcmRlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgUVNQSV9ESVNBQkxFX0JZVEVfUkVPUkRFUihxc3BpKSAgICggKHFzcGkpLT5DVEwgJj0gflFTUElfQ1RMX1JFT1JERVJfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IHRoZSBsZW5ndGggb2Ygc3VzcGVuZCBpbnRlcnZhbC4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyU3VzcEN5Y2xlIERlY2lkZXMgdGhlIGxlbmd0aCBvZiBzdXNwZW5kIGludGVydmFsLiBJdCBjb3VsZCBiZSAwIH4gMTUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgdGhlIGxlbmd0aCBvZiBzdXNwZW5kIGludGVydmFsIGFjY29yZGluZyB0byB1MzJTdXNwQ3ljbGUuCisgICogICAgICAgICAgICAgVGhlIGxlbmd0aCBvZiBzdXNwZW5kIGludGVydmFsIGlzICgodTMyU3VzcEN5Y2xlICsgMC41KSAqIHRoZSBsZW5ndGggb2Ygb25lIFFTUEkgYnVzIGNsb2NrIGN5Y2xlKS4KKyAgKi8KKyNkZWZpbmUgUVNQSV9TRVRfU1VTUEVORF9DWUNMRShxc3BpLCB1MzJTdXNwQ3ljbGUpICAgKCAocXNwaSktPkNUTCA9ICgocXNwaSktPkNUTCAmIH5RU1BJX0NUTF9TVVNQSVRWX01zaykgfCAoKHUzMlN1c3BDeWNsZSkgPDwgUVNQSV9DVExfU1VTUElUVl9Qb3MpICkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IHRoZSBRU1BJIHRyYW5zZmVyIHNlcXVlbmNlIHdpdGggTFNCIGZpcnN0LgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBMU0IgYml0IG9mIFFTUElfQ1RMIHJlZ2lzdGVyIHRvIHNldCB0aGUgUVNQSSB0cmFuc2ZlciBzZXF1ZW5jZSB3aXRoIExTQiBmaXJzdC4KKyAgKi8KKyNkZWZpbmUgUVNQSV9TRVRfTFNCX0ZJUlNUKHFzcGkpICAgKCAocXNwaSktPkNUTCB8PSBRU1BJX0NUTF9MU0JfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IHRoZSBRU1BJIHRyYW5zZmVyIHNlcXVlbmNlIHdpdGggTVNCIGZpcnN0LgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIExTQiBiaXQgb2YgUVNQSV9DVEwgcmVnaXN0ZXIgdG8gc2V0IHRoZSBRU1BJIHRyYW5zZmVyIHNlcXVlbmNlIHdpdGggTVNCIGZpcnN0LgorICAqLworI2RlZmluZSBRU1BJX1NFVF9NU0JfRklSU1QocXNwaSkgICAoIChxc3BpKS0+Q1RMICY9IH5RU1BJX0NUTF9MU0JfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IHRoZSBkYXRhIHdpZHRoIG9mIGEgUVNQSSB0cmFuc2FjdGlvbi4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyV2lkdGggVGhlIGJpdCB3aWR0aCBvZiBvbmUgdHJhbnNhY3Rpb24uCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBUaGUgZGF0YSB3aWR0aCBjYW4gYmUgOCB+IDMyIGJpdHMuCisgICovCisjZGVmaW5lIFFTUElfU0VUX0RBVEFfV0lEVEgocXNwaSwgdTMyV2lkdGgpICAgKCAocXNwaSktPkNUTCA9ICgocXNwaSktPkNUTCAmIH5RU1BJX0NUTF9EV0lEVEhfTXNrKSB8ICgoKHUzMldpZHRoKSAmIDB4MUYpIDw8IFFTUElfQ1RMX0RXSURUSF9Qb3MpICkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHRoZSBRU1BJIGJ1c3kgc3RhdGUuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR2YWwgICAgIDAgUVNQSSBjb250cm9sbGVyIGlzIG5vdCBidXN5LgorICAqIEByZXR2YWwgICAgIDEgUVNQSSBjb250cm9sbGVyIGlzIGJ1c3kuCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyB3aWxsIHJldHVybiB0aGUgYnVzeSBzdGF0ZSBvZiBRU1BJIGNvbnRyb2xsZXIuCisgICovCisjZGVmaW5lIFFTUElfSVNfQlVTWShxc3BpKSAgICggKChxc3BpKS0+U1RBVFVTICYgUVNQSV9TVEFUVVNfQlVTWV9Nc2spID4+IFFTUElfU1RBVFVTX0JVU1lfUG9zICkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFFTUEkgY29udHJvbGxlci4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgU1BJRU4gKFFTUElfQ1RMWzBdKSB0byBlbmFibGUgUVNQSSBjb250cm9sbGVyLgorICAqLworI2RlZmluZSBRU1BJX0VOQUJMRShxc3BpKSAgICggKHFzcGkpLT5DVEwgfD0gUVNQSV9DVExfU1BJRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBRU1BJIGNvbnRyb2xsZXIuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgQ2xlYXIgU1BJRU4gKFFTUElfQ1RMWzBdKSB0byBkaXNhYmxlIFFTUEkgY29udHJvbGxlci4KKyAgKi8KKyNkZWZpbmUgUVNQSV9ESVNBQkxFKHFzcGkpICAgKCAocXNwaSktPkNUTCAmPSB+UVNQSV9DVExfU1BJRU5fTXNrICkKKworLyogRnVuY3Rpb24gcHJvdG90eXBlIGRlY2xhcmF0aW9uICovCit1aW50MzJfdCBRU1BJX09wZW4oUVNQSV9UICpxc3BpLCB1aW50MzJfdCB1MzJNYXN0ZXJTbGF2ZSwgdWludDMyX3QgdTMyUVNQSU1vZGUsIHVpbnQzMl90IHUzMkRhdGFXaWR0aCwgdWludDMyX3QgdTMyQnVzQ2xvY2spOwordm9pZCBRU1BJX0Nsb3NlKFFTUElfVCAqcXNwaSk7Cit2b2lkIFFTUElfQ2xlYXJSeEZJRk8oUVNQSV9UICpxc3BpKTsKK3ZvaWQgUVNQSV9DbGVhclR4RklGTyhRU1BJX1QgKnFzcGkpOwordm9pZCBRU1BJX0Rpc2FibGVBdXRvU1MoUVNQSV9UICpxc3BpKTsKK3ZvaWQgUVNQSV9FbmFibGVBdXRvU1MoUVNQSV9UICpxc3BpLCB1aW50MzJfdCB1MzJTU1Bpbk1hc2ssIHVpbnQzMl90IHUzMkFjdGl2ZUxldmVsKTsKK3VpbnQzMl90IFFTUElfU2V0QnVzQ2xvY2soUVNQSV9UICpxc3BpLCB1aW50MzJfdCB1MzJCdXNDbG9jayk7Cit2b2lkIFFTUElfU2V0RklGTyhRU1BJX1QgKnFzcGksIHVpbnQzMl90IHUzMlR4VGhyZXNob2xkLCB1aW50MzJfdCB1MzJSeFRocmVzaG9sZCk7Cit1aW50MzJfdCBRU1BJX0dldEJ1c0Nsb2NrKFFTUElfVCAqcXNwaSk7Cit2b2lkIFFTUElfRW5hYmxlSW50KFFTUElfVCAqcXNwaSwgdWludDMyX3QgdTMyTWFzayk7Cit2b2lkIFFTUElfRGlzYWJsZUludChRU1BJX1QgKnFzcGksIHVpbnQzMl90IHUzMk1hc2spOwordWludDMyX3QgUVNQSV9HZXRJbnRGbGFnKFFTUElfVCAqcXNwaSwgdWludDMyX3QgdTMyTWFzayk7Cit2b2lkIFFTUElfQ2xlYXJJbnRGbGFnKFFTUElfVCAqcXNwaSwgdWludDMyX3QgdTMyTWFzayk7Cit1aW50MzJfdCBRU1BJX0dldFN0YXR1cyhRU1BJX1QgKnFzcGksIHVpbnQzMl90IHUzMk1hc2spOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUVNQSV9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBRU1BJX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19RU1BJX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9ydGMuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MmUyZWMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9ydGMuaApAQCAtMCwwICsxLDM1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHJ0Yy5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBSZWFsIFRpbWUgQ2xvY2soUlRDKSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1JUQ19IX18KKyNkZWZpbmUgX19SVENfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBSVENfRHJpdmVyIFJUQyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBSVENfRVhQT1JURURfQ09OU1RBTlRTIFJUQyBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgUlRDIEluaXRpYWwgS2V5d29yZCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFJUQ19JTklUX0tFWSAgICAgICAgICAgIDB4QTVFQjEzNTdVTCAgICAvKiE8IFJUQyBJbml0aWF0aW9uIEtleSB0byBtYWtlIFJUQyBsZWF2aW5nIHJlc2V0IHN0YXRlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1dSSVRFX0tFWSAgICAgICAgICAgMHgwMDAwQTk2NVVMICAgIC8qITwgUlRDIFJlZ2lzdGVyIEFjY2VzcyBFbmFibGUgS2V5IHRvIGVuYWJsZSBSVEMgcmVhZC93cml0ZSBhY2Nlc3NpYmxlIGFuZCBrZXB0IDEwMjQgUlRDIGNsb2NrIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFJUQyBUaW1lIEF0dHJpYnV0ZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBSVENfQ0xPQ0tfMTIgICAgICAgICAgICAwVUwgICAgICAgICAgICAgLyohPCBSVEMgYXMgMTItaG91ciB0aW1lIHNjYWxlIHdpdGggQU0gYW5kIFBNIGluZGljYXRpb24gXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfQ0xPQ0tfMjQgICAgICAgICAgICAxVUwgICAgICAgICAgICAgLyohPCBSVEMgYXMgMjQtaG91ciB0aW1lIHNjYWxlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX0FNICAgICAgICAgICAgICAgICAgMVVMICAgICAgICAgICAgIC8qITwgUlRDIGFzIEFNIGluZGljYXRpb24gXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfUE0gICAgICAgICAgICAgICAgICAyVUwgICAgICAgICAgICAgLyohPCBSVEMgYXMgUE0gaW5kaWNhdGlvbiBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBSVEMgVGljayBQZXJpb2QgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUlRDX1RJQ0tfMV9TRUMgICAgICAgICAgMHgwVUwgICAgICAgICAgIC8qITwgUlRDIHRpbWUgdGljayBwZXJpb2QgaXMgMSBzZWNvbmQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfVElDS18xXzJfU0VDICAgICAgICAweDFVTCAgICAgICAgICAgLyohPCBSVEMgdGltZSB0aWNrIHBlcmlvZCBpcyAxLzIgc2Vjb25kIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RJQ0tfMV80X1NFQyAgICAgICAgMHgyVUwgICAgICAgICAgIC8qITwgUlRDIHRpbWUgdGljayBwZXJpb2QgaXMgMS80IHNlY29uZCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19USUNLXzFfOF9TRUMgICAgICAgIDB4M1VMICAgICAgICAgICAvKiE8IFJUQyB0aW1lIHRpY2sgcGVyaW9kIGlzIDEvOCBzZWNvbmQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfVElDS18xXzE2X1NFQyAgICAgICAweDRVTCAgICAgICAgICAgLyohPCBSVEMgdGltZSB0aWNrIHBlcmlvZCBpcyAxLzE2IHNlY29uZCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19USUNLXzFfMzJfU0VDICAgICAgIDB4NVVMICAgICAgICAgICAvKiE8IFJUQyB0aW1lIHRpY2sgcGVyaW9kIGlzIDEvMzIgc2Vjb25kIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RJQ0tfMV82NF9TRUMgICAgICAgMHg2VUwgICAgICAgICAgIC8qITwgUlRDIHRpbWUgdGljayBwZXJpb2QgaXMgMS82NCBzZWNvbmQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfVElDS18xXzEyOF9TRUMgICAgICAweDdVTCAgICAgICAgICAgLyohPCBSVEMgdGltZSB0aWNrIHBlcmlvZCBpcyAxLzEyOCBzZWNvbmQgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgUlRDIERheSBvZiBXZWVrIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFJUQ19TVU5EQVkgICAgICAgICAgICAgIDB4MFVMICAgICAgICAgICAvKiE8IERheSBvZiB0aGUgV2VlayBpcyBTdW5kYXkgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfTU9OREFZICAgICAgICAgICAgICAweDFVTCAgICAgICAgICAgLyohPCBEYXkgb2YgdGhlIFdlZWsgaXMgTW9uZGF5IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RVRVNEQVkgICAgICAgICAgICAgMHgyVUwgICAgICAgICAgIC8qITwgRGF5IG9mIHRoZSBXZWVrIGlzIFR1ZXNkYXkgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfV0VETkVTREFZICAgICAgICAgICAweDNVTCAgICAgICAgICAgLyohPCBEYXkgb2YgdGhlIFdlZWsgaXMgV2VkbmVzZGF5IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RIVVJTREFZICAgICAgICAgICAgMHg0VUwgICAgICAgICAgIC8qITwgRGF5IG9mIHRoZSBXZWVrIGlzIFRodXJzZGF5IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX0ZSSURBWSAgICAgICAgICAgICAgMHg1VUwgICAgICAgICAgIC8qITwgRGF5IG9mIHRoZSBXZWVrIGlzIEZyaWRheSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19TQVRVUkRBWSAgICAgICAgICAgIDB4NlVMICAgICAgICAgICAvKiE8IERheSBvZiB0aGUgV2VlayBpcyBTYXR1cmRheSBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBSVEMgTWlzY2VsbGFuZW91cyBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBSVENfWUVBUjIwMDAgICAgICAgICAgICAyMDAwVUwgICAgICAgICAgLyohPCBSVEMgUmVmZXJlbmNlIGZvciBjb21wdXRlIHllYXIgZGF0YSBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgUlRDX1RBTVBFUjBfU0VMRUNUICAgICAgKDB4MXVsIDw8IDApICAgIC8qITwgU2VsZWN0IFRhbXBlciAwIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUjFfU0VMRUNUICAgICAgKDB4MXVsIDw8IDEpICAgIC8qITwgU2VsZWN0IFRhbXBlciAxIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUjJfU0VMRUNUICAgICAgKDB4MXVsIDw8IDIpICAgIC8qITwgU2VsZWN0IFRhbXBlciAyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUjNfU0VMRUNUICAgICAgKDB4MXVsIDw8IDMpICAgIC8qITwgU2VsZWN0IFRhbXBlciAzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUjRfU0VMRUNUICAgICAgKDB4MXVsIDw8IDQpICAgIC8qITwgU2VsZWN0IFRhbXBlciA0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUjVfU0VMRUNUICAgICAgKDB4MXVsIDw8IDUpICAgIC8qITwgU2VsZWN0IFRhbXBlciA1IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgTUFYX1RBTVBFUl9QSU5fTlVNICAgICAgNnVsICAgICAgICAgICAgIC8qITwgVGFtcGVyIFBpbiBudW1iZXIgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFJUQ19UQU1QRVJfSElHSF9MRVZFTF9ERVRFQ1QgICAgMXVsICAgICAvKiE8IFRhbXBlciBwaW4gZGV0ZWN0IHZvbHRhZ2UgbGV2ZWwgaXMgaGlnaCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19UQU1QRVJfTE9XX0xFVkVMX0RFVEVDVCAgICAgMHVsICAgICAvKiE8IFRhbXBlciBwaW4gZGV0ZWN0IHZvbHRhZ2UgbGV2ZWwgaXMgbG93ICBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgUlRDX1RBTVBFUl9ERUJPVU5DRV9FTkFCTEUgICAgICAxdWwgICAgIC8qITwgRW5hYmxlIFJUQyB0YW1wZXIgcGluIGRlLWJvdW5jZSBmdW5jdGlvbiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19UQU1QRVJfREVCT1VOQ0VfRElTQUJMRSAgICAgMHVsICAgICAvKiE8IERpc2FibGUgUlRDIHRhbXBlciBwaW4gZGUtYm91bmNlIGZ1bmN0aW9uIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBSVENfUEFJUjBfU0VMRUNUICAgICAgICAoMHgxdWwgPDwgMCkgICAgLyohPCBTZWxlY3QgUGFpciAwIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1BBSVIxX1NFTEVDVCAgICAgICAgKDB4MXVsIDw8IDEpICAgIC8qITwgU2VsZWN0IFBhaXIgMSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19QQUlSMl9TRUxFQ1QgICAgICAgICgweDF1bCA8PCAyKSAgICAvKiE8IFNlbGVjdCBQYWlyIDIgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBNQVhfUEFJUl9OVU0gICAgICAgICAgICAzdWwgICAgICAgICAgICAgLyohPCBQYWlyIG51bWJlciBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgUlRDXzJQT1cxMF9DTEsgICAgICAgICAgKDB4MHVsIDw8IFJUQ19UQU1QQ1RMX0RZTlJBVEVfUG9zKSAvKiE8IDEwMjQgUlRDIGNsb2NrIGN5Y2xlcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ18yUE9XMTFfQ0xLICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9EWU5SQVRFX1BvcykgLyohPCAxMDI0IHggMiBSVEMgY2xvY2sgY3ljbGVzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDXzJQT1cxMl9DTEsgICAgICAgICAgKDB4MnVsIDw8IFJUQ19UQU1QQ1RMX0RZTlJBVEVfUG9zKSAvKiE8IDEwMjQgeCA0IFJUQyBjbG9jayBjeWNsZXMgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfMlBPVzEzX0NMSyAgICAgICAgICAoMHgzdWwgPDwgUlRDX1RBTVBDVExfRFlOUkFURV9Qb3MpIC8qITwgMTAyNCB4IDYgUlRDIGNsb2NrIGN5Y2xlcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ18yUE9XMTRfQ0xLICAgICAgICAgICgweDR1bCA8PCBSVENfVEFNUENUTF9EWU5SQVRFX1BvcykgLyohPCAxMDI0IHggOCBSVEMgY2xvY2sgY3ljbGVzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDXzJQT1cxNV9DTEsgICAgICAgICAgKDB4NXVsIDw8IFJUQ19UQU1QQ1RMX0RZTlJBVEVfUG9zKSAvKiE8IDEwMjQgeCAxNiBSVEMgY2xvY2sgY3ljbGVzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDXzJQT1cxNl9DTEsgICAgICAgICAgKDB4NnVsIDw8IFJUQ19UQU1QQ1RMX0RZTlJBVEVfUG9zKSAvKiE8IDEwMjQgeCAzMiBSVEMgY2xvY2sgY3ljbGVzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDXzJQT1cxN19DTEsgICAgICAgICAgKDB4N3VsIDw8IFJUQ19UQU1QQ1RMX0RZTlJBVEVfUG9zKSAvKiE8IDEwMjQgeCA2NCBSVEMgY2xvY2sgY3ljbGVzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBSRUZfUkFORE9NX1BBVFRFUk4gICAgICAweDB1bCAgIC8qITwgVGhlIG5ldyByZWZlcmVuY2UgcGF0dGVybiBpcyBnZW5lcmF0ZWQgYnkgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd2hlbiB0aGUgcmVmZXJlbmNlIHBhdHRlcm4gcnVuIG91dCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJFRl9QUkVWSU9VU19QQVRURVJOICAgIDB4MXVsICAgLyohPCBUaGUgbmV3IHJlZmVyZW5jZSBwYXR0ZXJuIGlzIHJlcGVhdGVkIHByZXZpb3VzIHJhbmRvbSB2YWx1ZSB3aGVuIHRoZSByZWZlcmVuY2UgcGF0dGVybiBydW4gb3V0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUkVGX1NFRUQgICAgICAgICAgICAgICAgMHgzdWwgICAvKiE8IFRoZSBuZXcgcmVmZXJlbmNlIHBhdHRlcm4gaXMgcmVwZWF0ZWQgZnJvbSBTRUVEIChSVENfVEFNUFNFRURbMzE6MF0pIHdoZW4gdGhlIHJlZmVyZW5jZSBwYXR0ZXJuIHJ1biBvdXQgXGhpZGVpbml0aWFsaXplciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFJUQ19FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgUlRDX0VYUE9SVEVEX1NUUlVDVFMgUlRDIEV4cG9ydGVkIFN0cnVjdHMKKyAgQHsKKyovCisvKioKKyAgKiBAZGV0YWlscyAgICBSVEMgZGVmaW5lIFRpbWUgRGF0YSBTdHJ1Y3QKKyAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgdTMyWWVhcjsgICAgICAgICAgIC8qITwgWWVhciB2YWx1ZSAqLworICAgIHVpbnQzMl90IHUzMk1vbnRoOyAgICAgICAgICAvKiE8IE1vbnRoIHZhbHVlICovCisgICAgdWludDMyX3QgdTMyRGF5OyAgICAgICAgICAgIC8qITwgRGF5IHZhbHVlICovCisgICAgdWludDMyX3QgdTMyRGF5T2ZXZWVrOyAgICAgIC8qITwgRGF5IG9mIHdlZWsgdmFsdWUgKi8KKyAgICB1aW50MzJfdCB1MzJIb3VyOyAgICAgICAgICAgLyohPCBIb3VyIHZhbHVlICovCisgICAgdWludDMyX3QgdTMyTWludXRlOyAgICAgICAgIC8qITwgTWludXRlIHZhbHVlICovCisgICAgdWludDMyX3QgdTMyU2Vjb25kOyAgICAgICAgIC8qITwgU2Vjb25kIHZhbHVlICovCisgICAgdWludDMyX3QgdTMyVGltZVNjYWxlOyAgICAgIC8qITwgMTItSG91ciwgMjQtSG91ciAqLworICAgIHVpbnQzMl90IHUzMkFtUG07ICAgICAgICAgICAvKiE8IE9ubHkgVGltZSBTY2FsZSBzZWxlY3QgMTItaHIgdXNlZCAqLworfSBTX1JUQ19USU1FX0RBVEFfVDsKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBSVENfRVhQT1JURURfU1RSVUNUUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBSVENfRVhQT1JURURfRlVOQ1RJT05TIFJUQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIEluZGljYXRlIGlzIExlYXAgWWVhciBvciBub3QKKyAgKgorICAqIEBwYXJhbVtpbl0gIHJ0YyAgICAgICAgIFRoZSBwb2ludGVyIG9mIFJUQyBtb2R1bGUuCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgVGhpcyB5ZWFyIGlzIG5vdCBhIGxlYXAgeWVhcgorICAqIEByZXR2YWwgICAgIDEgICBUaGlzIHllYXIgaXMgYSBsZWFwIHllYXIKKyAgKgorICAqIEBkZXRhaWxzICAgIEFjY29yZGluZyB0byBjdXJyZW50IGRhdGUsIHJldHVybiB0aGlzIHllYXIgaXMgbGVhcCB5ZWFyIG9yIG5vdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFJUQ19JU19MRUFQX1lFQVIocnRjKSAgICAgICAgICAgKChydGMpLT5MRUFQWUVBUiAmIFJUQ19MRUFQWUVBUl9MRUFQWUVBUl9Nc2sgPyAxOjApCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIFJUQyBBbGFybSBJbnRlcnJ1cHQgRmxhZworICAqCisgICogQHBhcmFtW2luXSAgcnRjICAgICAgICAgVGhlIHBvaW50ZXIgb2YgUlRDIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjbGVhciBSVEMgYWxhcm0gaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBSVENfQ0xFQVJfQUxBUk1fSU5UX0ZMQUcocnRjKSAgICgocnRjKS0+SU5UU1RTID0gUlRDX0lOVFNUU19BTE1JRl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIFJUQyBUaWNrIEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICBydGMgICAgICAgICBUaGUgcG9pbnRlciBvZiBSVEMgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNsZWFyIFJUQyB0aWNrIGludGVycnVwdCBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUlRDX0NMRUFSX1RJQ0tfSU5UX0ZMQUcocnRjKSAgICAoKHJ0YyktPklOVFNUUyA9IFJUQ19JTlRTVFNfVElDS0lGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgUlRDIFRhbXBlciBJbnRlcnJ1cHQgRmxhZworICAqCisgICogQHBhcmFtW2luXSAgcnRjICAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIFJUQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyVGFtcGVyRmxhZyAgIFRhbXBlciBpbnRlcnJ1cHQgZmxhZy4gSXQgY29uc2lzdHMgb2Y6ICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5UU1RTX1RBTVAwSUZfTXNrICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5UU1RTX1RBTVAxSUZfTXNrICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5UU1RTX1RBTVAySUZfTXNrICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5UU1RTX1RBTVAzSUZfTXNrICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5UU1RTX1RBTVA0SUZfTXNrICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5UU1RTX1RBTVA1SUZfTXNrCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY2xlYXIgUlRDIHRhbXBlciBwaW4gaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBSVENfQ0xFQVJfVEFNUEVSX0lOVF9GTEFHKHJ0YywgdTMyVGFtcGVyRmxhZykgICAoKHJ0YyktPklOVFNUUyA9ICh1MzJUYW1wZXJGbGFnKSkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFJUQyBBbGFybSBJbnRlcnJ1cHQgRmxhZworICAqCisgICogQHBhcmFtW2luXSAgcnRjICAgICAgICAgVGhlIHBvaW50ZXIgb2YgUlRDIG1vZHVsZS4KKyAgKgorICAqIEByZXR2YWwgICAgIDAgICBSVEMgYWxhcm0gaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAgKiBAcmV0dmFsICAgICAxICAgUlRDIGFsYXJtIGludGVycnVwdCBvY2N1cnJlZAorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpbmRpY2F0ZXMgUlRDIGFsYXJtIGludGVycnVwdCBvY2N1cnJlZCBvciBub3QuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBSVENfR0VUX0FMQVJNX0lOVF9GTEFHKHJ0YykgICAgICAgICAoKChydGMpLT5JTlRTVFMgJiBSVENfSU5UU1RTX0FMTUlGX01zayk/IDE6MCkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFJUQyBUaW1lIFRpY2sgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHJ0YyAgICAgICAgIFRoZSBwb2ludGVyIG9mIFJUQyBtb2R1bGUuCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgUlRDIHRpbWUgdGljayBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICAqIEByZXR2YWwgICAgIDEgICBSVEMgdGltZSB0aWNrIGludGVycnVwdCBvY2N1cnJlZAorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpbmRpY2F0ZXMgUlRDIHRpbWUgdGljayBpbnRlcnJ1cHQgb2NjdXJyZWQgb3Igbm90LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUlRDX0dFVF9USUNLX0lOVF9GTEFHKHJ0YykgICAgICAgICAgKCgocnRjKS0+SU5UU1RTICYgUlRDX0lOVFNUU19USUNLSUZfTXNrKT8gMTowKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUlRDIFRhbXBlciBJbnRlcnJ1cHQgRmxhZworICAqCisgICogQHBhcmFtW2luXSAgcnRjICAgICAgICAgVGhlIHBvaW50ZXIgb2YgUlRDIG1vZHVsZS4KKyAgKgorICAqIEByZXR2YWwgICAgIDAgICBSVEMgdGFtcGVyIGV2ZW50IGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgICogQHJldHZhbCAgICAgMSAgIFJUQyB0YW1wZXIgZXZlbnQgaW50ZXJydXB0IG9jY3VycmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGluZGljYXRlcyBSVEMgdGFtcGVyIGV2ZW50IG9jY3VycmVkIG9yIG5vdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFJUQ19HRVRfVEFNUEVSX0lOVF9GTEFHKHJ0YykgICAgICAgICgoKHJ0YyktPklOVFNUUyAmICgweDNGMDApKT8gMTowKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUlRDIFRhbXBlciBJbnRlcnJ1cHQgU3RhdHVzCisgICoKKyAgKiBAcGFyYW1baW5dICBydGMgICAgICAgICBUaGUgcG9pbnRlciBvZiBSVEMgbW9kdWxlLgorICAqCisgICogQHJldHZhbCAgICAgUlRDX0lOVFNUU19UQU1QMElGX01zayAgICBUYW1wZXIgMCBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQKKyAgKiBAcmV0dmFsICAgICBSVENfSU5UU1RTX1RBTVAxSUZfTXNrICAgIFRhbXBlciAxIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZAorICAqIEByZXR2YWwgICAgIFJUQ19JTlRTVFNfVEFNUDJJRl9Nc2sgICAgVGFtcGVyIDIgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkCisgICogQHJldHZhbCAgICAgUlRDX0lOVFNUU19UQU1QM0lGX01zayAgICBUYW1wZXIgMyBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQKKyAgKiBAcmV0dmFsICAgICBSVENfSU5UU1RTX1RBTVA0SUZfTXNrICAgIFRhbXBlciA0IGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZAorICAqIEByZXR2YWwgICAgIFJUQ19JTlRTVFNfVEFNUDVJRl9Nc2sgICAgVGFtcGVyIDUgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGluZGljYXRlcyBSVEMgdGFtcGVyIGludGVycnVwdCBzdGF0dXMuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBSVENfR0VUX1RBTVBFUl9JTlRfU1RBVFVTKHJ0YykgICAgICAoKChydGMpLT5JTlRTVFMgJiAoMHgzRjAwKSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBSVEMgVGljayBXYWtlLXVwIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICBydGMgICAgICAgICBUaGUgcG9pbnRlciBvZiBSVEMgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBSVEMgdGljayBpbnRlcnJ1cHQgd2FrZS11cCBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFJUQ19FTkFCTEVfVElDS19XQUtFVVAocnRjKSAgICAgICAgICgocnRjKS0+SU5URU4gfD0gUlRDX0lOVEVOX1RJQ0tJRU5fTXNrKTsKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBSVEMgVGljayBXYWtlLXVwIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICBydGMgICAgICAgICBUaGUgcG9pbnRlciBvZiBSVEMgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgUlRDIHRpY2sgaW50ZXJydXB0IHdha2UtdXAgZnVuY3Rpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBSVENfRElTQUJMRV9USUNLX1dBS0VVUChydGMpICAgICAgICAoKHJ0YyktPklOVEVOICY9IH5SVENfSU5URU5fVElDS0lFTl9Nc2spOworCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIFNwYXJlIFJlZ2lzdGVyCisgICoKKyAgKiBAcGFyYW1baW5dICBydGMgICAgICAgICBUaGUgcG9pbnRlciBvZiBSVEMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlJlZ051bSAgIFRoZSBzcGFyZSByZWdpc3RlciBudW1iZXIsIDB+MTkuCisgICoKKyAgKiBAcmV0dXJuICAgICBTcGFyZSByZWdpc3RlciBjb250ZW50CisgICoKKyAgKiBAZGV0YWlscyAgICBSZWFkIHRoZSBzcGVjaWZ5IHNwYXJlIHJlZ2lzdGVyIGNvbnRlbnQuCisgICAgICAgIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyB2YWxpZCBvbmx5IHdoZW4gUldFTkYgKFJUQ19SV0VOWzE2XSkgYml0IGlzIHNldC4gXG4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFJUQ19SRUFEX1NQQVJFX1JFR0lTVEVSKHJ0YywgdTMyUmVnTnVtKSAgICAgKChydGMpLT5TUFJbKHUzMlJlZ051bSldKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSBTcGFyZSBSZWdpc3RlcgorICAqCisgICogQHBhcmFtW2luXSAgcnRjICAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIFJUQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyUmVnTnVtICAgICAgIFRoZSBzcGFyZSByZWdpc3RlciBudW1iZXIsIDB+MTkuCisgICogQHBhcmFtW2luXSAgdTMyUmVnVmFsdWUgICAgIFRoZSBzcGFyZSByZWdpc3RlciB2YWx1ZS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFdyaXRlIHNwZWNpZnkgZGF0YSB0byBzcGFyZSByZWdpc3Rlci4KKyAgICAgICAgVGhpcyBtYWNybyBpcyBlZmZlY3Qgb25seSB3aGVuIFJXRU5GIChSVENfUldFTlsxNl0pIGJpdCBpcyBzZXQuIFxuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBSVENfV1JJVEVfU1BBUkVfUkVHSVNURVIocnRjLCB1MzJSZWdOdW0sIHUzMlJlZ1ZhbHVlKSAgICgocnRjKS0+U1BSWyh1MzJSZWdOdW0pXSA9ICh1MzJSZWdWYWx1ZSkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogc3RhdGljIGlubGluZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGVjbGFyZSB0aGVzZSBpbmxpbmUgZnVuY3Rpb25zIGhlcmUgdG8gYXZvaWQgTUlTUkEgQyAyMDA0IHJ1bGUgOC4xIGVycm9yICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBSVENfV2FpdEFjY2Vzc0VuYWJsZSh2b2lkKTsKKworLyoqCisgICogQGJyaWVmICAgICAgV2FpdCBSVEMgQWNjZXNzIEVuYWJsZQorICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgbWF4aW11bSBSVEMgcmVhZC93cml0ZSBhY2Nlc3NpYmxlIHRpbWUuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBSVENfV2FpdEFjY2Vzc0VuYWJsZSh2b2lkKQoreworICAgIHdoaWxlKChSVEMtPlJXRU4gJiBSVENfUldFTl9SV0VORl9Nc2spID09IDB4MFVMKSB7fQorfQorCit2b2lkIFJUQ19PcGVuKFNfUlRDX1RJTUVfREFUQV9UICpzUHQpOwordm9pZCBSVENfQ2xvc2Uodm9pZCk7Cit2b2lkIFJUQ18zMktDYWxpYnJhdGlvbihpbnQzMl90IGkzMkZyZXF1ZW5jeVgxMDAwMCk7Cit2b2lkIFJUQ19HZXREYXRlQW5kVGltZShTX1JUQ19USU1FX0RBVEFfVCAqc1B0KTsKK3ZvaWQgUlRDX0dldEFsYXJtRGF0ZUFuZFRpbWUoU19SVENfVElNRV9EQVRBX1QgKnNQdCk7Cit2b2lkIFJUQ19TZXREYXRlQW5kVGltZShTX1JUQ19USU1FX0RBVEFfVCAqc1B0KTsKK3ZvaWQgUlRDX1NldEFsYXJtRGF0ZUFuZFRpbWUoU19SVENfVElNRV9EQVRBX1QgKnNQdCk7Cit2b2lkIFJUQ19TZXREYXRlKHVpbnQzMl90IHUzMlllYXIsIHVpbnQzMl90IHUzMk1vbnRoLCB1aW50MzJfdCB1MzJEYXksIHVpbnQzMl90IHUzMkRheU9mV2Vlayk7Cit2b2lkIFJUQ19TZXRUaW1lKHVpbnQzMl90IHUzMkhvdXIsIHVpbnQzMl90IHUzMk1pbnV0ZSwgdWludDMyX3QgdTMyU2Vjb25kLCB1aW50MzJfdCB1MzJUaW1lTW9kZSwgdWludDMyX3QgdTMyQW1QbSk7Cit2b2lkIFJUQ19TZXRBbGFybURhdGUodWludDMyX3QgdTMyWWVhciwgdWludDMyX3QgdTMyTW9udGgsIHVpbnQzMl90IHUzMkRheSk7Cit2b2lkIFJUQ19TZXRBbGFybVRpbWUodWludDMyX3QgdTMySG91ciwgdWludDMyX3QgdTMyTWludXRlLCB1aW50MzJfdCB1MzJTZWNvbmQsIHVpbnQzMl90IHUzMlRpbWVNb2RlLCB1aW50MzJfdCB1MzJBbVBtKTsKK3ZvaWQgUlRDX1NldEFsYXJtRGF0ZU1hc2sodWludDhfdCB1OElzVGVuWU1zaywgdWludDhfdCB1OElzWU1zaywgdWludDhfdCB1OElzVGVuTU1zaywgdWludDhfdCB1OElzTU1zaywgdWludDhfdCB1OElzVGVuRE1zaywgdWludDhfdCB1OElzRE1zayk7Cit2b2lkIFJUQ19TZXRBbGFybVRpbWVNYXNrKHVpbnQ4X3QgdThJc1RlbkhNc2ssIHVpbnQ4X3QgdThJc0hNc2ssIHVpbnQ4X3QgdThJc1Rlbk1Nc2ssIHVpbnQ4X3QgdThJc01Nc2ssIHVpbnQ4X3QgdThJc1RlblNNc2ssIHVpbnQ4X3QgdThJc1NNc2spOwordWludDMyX3QgUlRDX0dldERheU9mV2Vlayh2b2lkKTsKK3ZvaWQgUlRDX1NldFRpY2tQZXJpb2QodWludDMyX3QgdTMyVGlja1NlbGVjdGlvbik7Cit2b2lkIFJUQ19FbmFibGVJbnQodWludDMyX3QgdTMySW50RmxhZ01hc2spOwordm9pZCBSVENfRGlzYWJsZUludCh1aW50MzJfdCB1MzJJbnRGbGFnTWFzayk7Cit2b2lkIFJUQ19FbmFibGVTcGFyZUFjY2Vzcyh2b2lkKTsKK3ZvaWQgUlRDX0Rpc2FibGVTcGFyZVJlZ2lzdGVyKHZvaWQpOwordm9pZCBSVENfU3RhdGljVGFtcGVyRW5hYmxlKHVpbnQzMl90IHUzMlRhbXBlclNlbGVjdCwgdWludDMyX3QgdTMyRGV0ZWNMZXZlbCwgdWludDMyX3QgdTMyRGVib3VuY2VFbik7Cit2b2lkIFJUQ19TdGF0aWNUYW1wZXJEaXNhYmxlKHVpbnQzMl90IHUzMlRhbXBlclNlbGVjdCk7Cit2b2lkIFJUQ19EeW5hbWljVGFtcGVyRW5hYmxlKHVpbnQzMl90IHUzMlBhaXJTZWwsIHVpbnQzMl90IHUzMkRlYm91bmNlRW4sIHVpbnQzMl90IHUzMlBhaXIxU291cmNlLCB1aW50MzJfdCB1MzJQYWlyMlNvdXJjZSk7Cit2b2lkIFJUQ19EeW5hbWljVGFtcGVyRGlzYWJsZSh1aW50MzJfdCB1MzJQYWlyU2VsKTsKK3ZvaWQgUlRDX0R5bmFtaWNUYW1wZXJDb25maWcodWludDMyX3QgdTMyQ2hhbmdlUmF0ZSwgdWludDMyX3QgdTMyU2VlZFJlbG9hZCwgdWludDMyX3QgdTMyUmVmUGF0dGVybiwgdWludDMyX3QgdTMyU2VlZCk7CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUlRDX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFJUQ19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fUlRDX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zYy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTVlMTA2Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvc2MuaApAQCAtMCwwICsxLDMwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHNjLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFNtYXJ0Y2FyZChTQykgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TQ19IX18KKyNkZWZpbmUgX19TQ19IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFNDX0RyaXZlciBTQyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTQ19FWFBPUlRFRF9DT05TVEFOVFMgU0MgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworI2RlZmluZSBTQ19JTlRFUkZBQ0VfTlVNICAgICAgICAgICAgICAgICgzdWwpICAgICAgICAgICAgICAgIC8qITwgU21hcnRjYXJkIGludGVyZmFjZSBudW1iZXJzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0NfUElOX1NUQVRFX0hJR0ggICAgICAgICAgICAgICAoMXVsKSAgICAgICAgICAgICAgICAvKiE8IFNtYXJ0Y2FyZCBwaW4gc3RhdHVzIGhpZ2ggICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDX1BJTl9TVEFURV9MT1cgICAgICAgICAgICAgICAgKDB1bCkgICAgICAgICAgICAgICAgLyohPCBTbWFydGNhcmQgcGluIHN0YXR1cyBsb3cgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ19QSU5fU1RBVEVfSUdOT1JFICAgICAgICAgICAgICgweEZGRkZGRkZGdWwpICAgICAgIC8qITwgSWdub3JlIHBpbiBzdGF0dXMgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0NfQ0xLX09OICAgICAgICAgICAgICAgICAgICAgICAoMXVsKSAgICAgICAgICAgICAgICAvKiE8IFNtYXJ0Y2FyZCBjbG9jayBvbiAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDX0NMS19PRkYgICAgICAgICAgICAgICAgICAgICAgKDB1bCkgICAgICAgICAgICAgICAgLyohPCBTbWFydGNhcmQgY2xvY2sgb2ZmICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFNDX1RNUl9NT0RFXzAgICAgICAgICAgICAgICAgICAgKDB1bCA8PCBTQ19UTVJDVEwwX09QTU9ERV9Qb3MpICAgICAvKiE8VGltZXIgT3BlcmF0aW9uIE1vZGUgMCwgZG93biBjb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0NfVE1SX01PREVfMSAgICAgICAgICAgICAgICAgICAoMXVsIDw8IFNDX1RNUkNUTDBfT1BNT0RFX1BvcykgICAgIC8qITxUaW1lciBPcGVyYXRpb24gTW9kZSAxLCBkb3duIGNvdW50LCBzdGFydCBhZnRlciBkZXRlY3Qgc3RhcnQgYml0ICAgICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ19UTVJfTU9ERV8yICAgICAgICAgICAgICAgICAgICgydWwgPDwgU0NfVE1SQ1RMMF9PUE1PREVfUG9zKSAgICAgLyohPFRpbWVyIE9wZXJhdGlvbiBNb2RlIDIsIGRvd24gY291bnQsIHN0YXJ0IGFmdGVyIHJlY2VpdmUgc3RhcnQgYml0ICAgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDX1RNUl9NT0RFXzMgICAgICAgICAgICAgICAgICAgKDN1bCA8PCBTQ19UTVJDVEwwX09QTU9ERV9Qb3MpICAgICAvKiE8VGltZXIgT3BlcmF0aW9uIE1vZGUgMywgZG93biBjb3VudCwgdXNlIGZvciBhY3RpdmF0aW9uLCBvbmx5IHRpbWVyIDAgc3VwcG9ydCB0aGlzIG1vZGUgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0NfVE1SX01PREVfNCAgICAgICAgICAgICAgICAgICAoNHVsIDw8IFNDX1RNUkNUTDBfT1BNT0RFX1BvcykgICAgIC8qITxUaW1lciBPcGVyYXRpb24gTW9kZSA0LCBkb3duIGNvdW50IHdpdGggcmVsb2FkIGFmdGVyIHRpbWVvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ19UTVJfTU9ERV81ICAgICAgICAgICAgICAgICAgICg1dWwgPDwgU0NfVE1SQ1RMMF9PUE1PREVfUG9zKSAgICAgLyohPFRpbWVyIE9wZXJhdGlvbiBNb2RlIDUsIGRvd24gY291bnQsIHN0YXJ0IGFmdGVyIGRldGVjdCBzdGFydCBiaXQsIHJlbG9hZCBhZnRlciB0aW1lb3V0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDX1RNUl9NT0RFXzYgICAgICAgICAgICAgICAgICAgKDZ1bCA8PCBTQ19UTVJDVEwwX09QTU9ERV9Qb3MpICAgICAvKiE8VGltZXIgT3BlcmF0aW9uIE1vZGUgNiwgZG93biBjb3VudCwgc3RhcnQgYWZ0ZXIgcmVjZWl2ZSBzdGFydCBiaXQsIHJlbG9hZCBhZnRlciB0aW1lb3V0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0NfVE1SX01PREVfNyAgICAgICAgICAgICAgICAgICAoN3VsIDw8IFNDX1RNUkNUTDBfT1BNT0RFX1BvcykgICAgIC8qITxUaW1lciBPcGVyYXRpb24gTW9kZSA3LCBkb3duIGNvdW50LCBzdGFydCBhbmQgcmVsb2FkIGFmdGVyIGRldGVjdCBzdGFydCBiaXQgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ19UTVJfTU9ERV84ICAgICAgICAgICAgICAgICAgICg4dWwgPDwgU0NfVE1SQ1RMMF9PUE1PREVfUG9zKSAgICAgLyohPFRpbWVyIE9wZXJhdGlvbiBNb2RlIDgsIHVwIGNvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDX1RNUl9NT0RFX0YgICAgICAgICAgICAgICAgICAgKDB4RiA8PCBTQ19UTVJDVEwwX09QTU9ERV9Qb3MpICAgICAvKiE8VGltZXIgT3BlcmF0aW9uIE1vZGUgMTUsIGRvd24gY291bnQsIHJlbG9hZCBhZnRlciBkZXRlY3Qgc3RhcnQgYml0ICAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTQ19FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgU0NfRVhQT1JURURfRlVOQ1RJT05TIFNDIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBtYWNybyBlbmFibGUgc21hcnRjYXJkIGludGVycnVwdAorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgSW50ZXJydXB0IG1hc2sgdG8gYmUgZW5hYmxlZC4gQSBjb21iaW5hdGlvbiBvZgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9BQ0VSUklFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fUlhUT0lFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fSU5JVElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fQ0RJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX0JHVElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fVE1SMklFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fVE1SMUlFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fVE1SMElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fVEVSUklFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fVEJFSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9SREFJRU5fTXNrCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgQXV0by1jb252ZW50aW9uIGVycm9yIGludGVycnVwdCwgUmVjZWl2ZXIgYnVmZmVyIHRpbWUtb3V0IGludGVycnVwdCwgSW5pdGlhbCBlbmQgaW50ZXJydXB0LAorICAqICAgICAgICAgICAgIENhcmQgZGV0ZWN0IGludGVycnVwdCwgQmxvY2sgZ3VhcmQgdGltZSBpbnRlcnJ1cHQsIFRpbWVyMiBpbnRlcnJ1cHQsIFRpbWVyMSBpbnRlcnJ1cHQsIFRpbWVyMCBpbnRlcnJ1cHQsCisgICogICAgICAgICAgICAgVHJhbnNmZXIgZXJyb3IgaW50ZXJydXB0LCBUcmFuc21pdCBidWZmZXIgZW1wdHkgaW50ZXJydXB0IG9yIFJlY2VpdmUgZGF0YSByZWFjaCB0cmlnZ2VyIGxldmVsIGludGVycnVwdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDX0VOQUJMRV9JTlQoc2MsIHUzMk1hc2spICAgICAgKChzYyktPklOVEVOIHw9ICh1MzJNYXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBtYWNybyBkaXNhYmxlIHNtYXJ0Y2FyZCBpbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIEludGVycnVwdCBtYXNrIHRvIGJlIGRpc2FibGVkLiBBIGNvbWJpbmF0aW9uIG9mCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX0FDRVJSSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9SWFRPSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9JTklUSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9DRElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fQkdUSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9UTVIySUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9UTVIxSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9UTVIwSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9URVJSSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9UQkVJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1JEQUlFTl9Nc2sKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgQXV0by1jb252ZW50aW9uIGVycm9yIGludGVycnVwdCwgUmVjZWl2ZXIgYnVmZmVyIHRpbWUtb3V0IGludGVycnVwdCwgSW5pdGlhbCBlbmQgaW50ZXJydXB0LAorICAqICAgICAgICAgICAgIENhcmQgZGV0ZWN0IGludGVycnVwdCwgQmxvY2sgZ3VhcmQgdGltZSBpbnRlcnJ1cHQsIFRpbWVyMiBpbnRlcnJ1cHQsIFRpbWVyMSBpbnRlcnJ1cHQsIFRpbWVyMCBpbnRlcnJ1cHQsCisgICogICAgICAgICAgICAgVHJhbnNmZXIgZXJyb3IgaW50ZXJydXB0LCBUcmFuc21pdCBidWZmZXIgZW1wdHkgaW50ZXJydXB0IG9yIFJlY2VpdmUgZGF0YSByZWFjaCB0cmlnZ2VyIGxldmVsIGludGVycnVwdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDX0RJU0FCTEVfSU5UKHNjLCB1MzJNYXNrKSAgICAgKChzYyktPklOVEVOICY9IH4odTMyTWFzaykpCisKKy8qKgorICAqIEBicmllZiAgICAgIFRoaXMgbWFjcm8gc2V0IFZDQyBwaW4gc3RhdGUgb2Ygc21hcnRjYXJkIGludGVyZmFjZQorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJTdGF0ZSAgICBQaW4gc3RhdGUgb2YgVkNDIHBpbiwgdmFsaWQgcGFyYW1ldGVycyBhcmUgXHJlZiBTQ19QSU5fU1RBVEVfSElHSCBhbmQgXHJlZiBTQ19QSU5fU1RBVEVfTE9XLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVXNlciBjYW4gc2V0IFBXUkVOIChTQ19QSU5DVExbMF0pIGFuZCBQV1JJTlYgKFNDX1BJTkNUTFsxMV0pIHRvIGRlY2lkZSBTQ19QV1IgcGluIGlzIGluIGhpZ2ggb3IgbG93IGxldmVsLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NfU0VUX1ZDQ19QSU4oc2MsIHUzMlN0YXRlKSBcCisgICAgZG8ge1wKKyAgICAgICAgICAgIHdoaWxlKChzYyktPlBJTkNUTCAmIFNDX1BJTkNUTF9TWU5DX01zayk7XAorICAgICAgICAgICAgaWYodTMyU3RhdGUpXAorICAgICAgICAgICAgICAgIChzYyktPlBJTkNUTCB8PSBTQ19QSU5DVExfUFdSRU5fTXNrO1wKKyAgICAgICAgICAgIGVsc2VcCisgICAgICAgICAgICAgICAgKHNjKS0+UElOQ1RMICY9IH5TQ19QSU5DVExfUFdSRU5fTXNrO1wKKyAgICB9d2hpbGUoMCkKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIG1hY3JvIHR1cm5zIENMSyBvdXRwdXQgb24gb3Igb2ZmCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyT25PZmYgICAgIENsb2NrIG9uIG9yIG9mZiBmb3Igc2VsZWN0ZWQgc21hcnRjYXJkIG1vZHVsZSwgdmFsaWQgdmFsdWVzIGFyZSBccmVmIFNDX0NMS19PTiBhbmQgXHJlZiBTQ19DTEtfT0ZGLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVXNlciBjYW4gc2V0IENMS0tFRVAgKFNDX1BJTkNUTFs2XSkgdG8gZGVjaWRlIFNDX0NMSyBwaW4gYWx3YXlzIGtlZXBzIGZyZWUgcnVubmluZyBvciBub3QuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ19TRVRfQ0xLX1BJTihzYywgdTMyT25PZmYpXAorICAgIGRvIHtcCisgICAgICAgICAgICB3aGlsZSgoc2MpLT5QSU5DVEwgJiBTQ19QSU5DVExfU1lOQ19Nc2spO1wKKyAgICAgICAgICAgIGlmKHUzMk9uT2ZmKVwKKyAgICAgICAgICAgICAgICAoc2MpLT5QSU5DVEwgfD0gU0NfUElOQ1RMX0NMS0tFRVBfTXNrO1wKKyAgICAgICAgICAgIGVsc2VcCisgICAgICAgICAgICAgICAgKHNjKS0+UElOQ1RMICY9IH4oU0NfUElOQ1RMX0NMS0tFRVBfTXNrKTtcCisgICAgfXdoaWxlKDApCisKKy8qKgorICAqIEBicmllZiAgICAgIFRoaXMgbWFjcm8gc2V0IEkvTyBwaW4gc3RhdGUgb2Ygc21hcnRjYXJkIGludGVyZmFjZQorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMlN0YXRlICAgICBQaW4gc3RhdGUgb2YgSS9PIHBpbiwgdmFsaWQgcGFyYW1ldGVycyBhcmUgXHJlZiBTQ19QSU5fU1RBVEVfSElHSCBhbmQgXHJlZiBTQ19QSU5fU1RBVEVfTE9XLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVXNlciBjYW4gc2V0IFNDREFUQSAoU0NfUElOQ1RMWzldKSB0byBkZWNpZGUgU0NfREFUQSBwaW4gdG8gaGlnaCBvciBsb3cuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ19TRVRfSU9fUElOKHNjLCB1MzJTdGF0ZSlcCisgICAgZG8ge1wKKyAgICAgICAgICAgIHdoaWxlKChzYyktPlBJTkNUTCAmIFNDX1BJTkNUTF9TWU5DX01zayk7XAorICAgICAgICAgICAgaWYodTMyU3RhdGUpXAorICAgICAgICAgICAgICAgIChzYyktPlBJTkNUTCB8PSBTQ19QSU5DVExfU0NEQVRBX01zaztcCisgICAgICAgICAgICBlbHNlXAorICAgICAgICAgICAgICAgIChzYyktPlBJTkNUTCAmPSB+U0NfUElOQ1RMX1NDREFUQV9Nc2s7XAorICAgIH13aGlsZSgwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIG1hY3JvIHNldCBSU1QgcGluIHN0YXRlIG9mIHNtYXJ0Y2FyZCBpbnRlcmZhY2UKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJTdGF0ZSAgICAgUGluIHN0YXRlIG9mIFJTVCBwaW4sIHZhbGlkIHBhcmFtZXRlcnMgYXJlIFxyZWYgU0NfUElOX1NUQVRFX0hJR0ggYW5kIFxyZWYgU0NfUElOX1NUQVRFX0xPVy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFVzZXIgY2FuIHNldCBTQ1JTVCAoU0NfUElOQ1RMWzFdKSB0byBkZWNpZGUgU0NfUlNUIHBpbiB0byBoaWdoIG9yIGxvdy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDX1NFVF9SU1RfUElOKHNjLCB1MzJTdGF0ZSlcCisgICAgZG8ge1wKKyAgICAgICAgICAgIHdoaWxlKChzYyktPlBJTkNUTCAmIFNDX1BJTkNUTF9TWU5DX01zayk7XAorICAgICAgICAgICAgaWYodTMyU3RhdGUpXAorICAgICAgICAgICAgICAgIChzYyktPlBJTkNUTCB8PSBTQ19QSU5DVExfUlNURU5fTXNrO1wKKyAgICAgICAgICAgIGVsc2VcCisgICAgICAgICAgICAgICAgKHNjKS0+UElOQ1RMICY9IH5TQ19QSU5DVExfUlNURU5fTXNrO1wKKyAgICB9d2hpbGUoMCkKKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBtYWNybyByZWFkIG9uZSBieXRlIGZyb20gc21hcnRjYXJkIG1vZHVsZSByZWNlaXZlIEZJRk8KKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIE9uZSBieXRlIHJlYWQgZnJvbSByZWNlaXZlIEZJRk8KKyAgKgorICAqIEBkZXRhaWxzICAgIEJ5IHJlYWRpbmcgREFUIHJlZ2lzdGVyLCB0aGUgU0Mgd2lsbCByZXR1cm4gYW4gOC1iaXQgcmVjZWl2ZWQgZGF0YS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDX1JFQUQoc2MpICAgICAgICAgICAgICgoY2hhcikoKHNjKS0+REFUKSkKKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBtYWNybyB3cml0ZSBvbmUgYnl0ZSB0byBzbWFydGNhcmQgbW9kdWxlIHRyYW5zbWl0IEZJRk8KKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1OERhdGEgIERhdGEgdG8gd3JpdGUgdG8gdHJhbnNtaXQgRklGTy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIEJ5IHdyaXRpbmcgZGF0YSB0byBEQVQgcmVnaXN0ZXIsIHRoZSBTQyB3aWxsIHNlbmQgb3V0IGFuIDgtYml0IGRhdGEuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ19XUklURShzYywgdThEYXRhKSAgICAoKHNjKS0+REFUID0gKHU4RGF0YSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFRoaXMgbWFjcm8gc2V0IHNtYXJ0Y2FyZCBzdG9wIGJpdCBsZW5ndGgKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJMZW4gIFN0b3AgYml0IGxlbmd0aCwgZXRoZXIgMSBvciAyLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgU3RvcCBiaXQgbGVuZ3RoIG11c3QgYmUgMSBmb3IgVCA9IDEgcHJvdG9jb2wgYW5kIDIgZm9yIFQgPSAwIHByb3RvY29sLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NfU0VUX1NUT1BfQklUX0xFTihzYywgdTMyTGVuKSAoKHNjKS0+Q1RMID0gKChzYyktPkNUTCAmIH5TQ19DVExfTlNCX01zaykgfCAoKCh1MzJMZW4pID09IDEpPyBTQ19DVExfTlNCX01zayA6IDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIERlY2xhcmUgdGhlc2UgaW5saW5lIGZ1bmN0aW9ucyBoZXJlIHRvIGF2b2lkIE1JU1JBIEMgMjAwNCBydWxlIDguMSBlcnJvciAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NfU2V0VHhSZXRyeShTQ19UICpzYywgdWludDMyX3QgdTMyQ291bnQpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NfU2V0UnhSZXRyeShTQ19UICpzYywgdWludDMyX3QgdTMyQ291bnQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZS9EaXNhYmxlIFR4IGVycm9yIHJldHJ5LCBhbmQgc2V0IFR4IGVycm9yIHJldHJ5IGNvdW50CisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkNvdW50ICAgIFRoZSBudW1iZXIgb2YgdGltZXMgb2YgVHggZXJyb3IgcmV0cnkgY291bnQsIGJldHdlZW4gMH44LiAwIG1lYW5zIGRpc2FibGUgVHggZXJyb3IgcmV0cnkuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgdHJhbnNtaXR0ZXIgcmV0cnkgZnVuY3Rpb24gd2hlbiBwYXJpdHkgZXJyb3IgaGFzIG9jY3VycmVkLCBhbmQgc2V0IGVycm9yIHJldHJ5IGNvdW50LgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NfU2V0VHhSZXRyeShTQ19UICpzYywgdWludDMyX3QgdTMyQ291bnQpCit7CisgICAgd2hpbGUoKHNjKS0+Q1RMICYgU0NfQ1RMX1NZTkNfTXNrKSB7fQorCisgICAgLyogUmV0cnkgY291bnQgbXVzdCBzZXQgd2hpbGUgZW5hYmxlIGJpdCBkaXNhYmxlZCwgc28gZGlzYWJsZSBpdCBmaXJzdCAqLworICAgIChzYyktPkNUTCAmPSB+KFNDX0NUTF9UWFJUWV9Nc2sgfCBTQ19DVExfVFhSVFlFTl9Nc2spOworCisgICAgaWYoKHUzMkNvdW50KSAhPSAwVUwpCisgICAgeworICAgICAgICB3aGlsZSgoc2MpLT5DVEwgJiBTQ19DVExfU1lOQ19Nc2spIHt9CisgICAgICAgIChzYyktPkNUTCB8PSAoKCh1MzJDb3VudCkgLSAxVUwpIDw8IFNDX0NUTF9UWFJUWV9Qb3MpIHwgU0NfQ1RMX1RYUlRZRU5fTXNrOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlL0Rpc2FibGUgUnggZXJyb3IgcmV0cnksIGFuZCBzZXQgUnggZXJyb3IgcmV0cnkgY291bnQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQ291bnQgICAgVGhlIG51bWJlciBvZiB0aW1lcyBvZiBSeCBlcnJvciByZXRyeSBjb3VudCwgYmV0d2VlbiAwfjguIDAgbWVhbnMgZGlzYWJsZSBSeCBlcnJvciByZXRyeS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSByZWNlaXZlciByZXRyeSBmdW5jdGlvbiB3aGVuIHBhcml0eSBlcnJvciBoYXMgb2NjdXJyZWQsIGFuZCBzZXQgZXJyb3IgcmV0cnkgY291bnQuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ19TZXRSeFJldHJ5KFNDX1QgKnNjLCB1aW50MzJfdCB1MzJDb3VudCkKK3sKKyAgICB3aGlsZSgoc2MpLT5DVEwgJiBTQ19DVExfU1lOQ19Nc2spIHt9CisKKyAgICAvKiBSZXRyeSBjb3VudCBtdXN0IHNldCB3aGlsZSBlbmFibGUgYml0IGRpc2FibGVkLCBzbyBkaXNhYmxlIGl0IGZpcnN0ICovCisgICAgKHNjKS0+Q1RMICY9IH4oU0NfQ1RMX1JYUlRZX01zayB8IFNDX0NUTF9SWFJUWUVOX01zayk7CisKKyAgICBpZigodTMyQ291bnQpICE9IDBVTCkKKyAgICB7CisgICAgICAgIHdoaWxlKChzYyktPkNUTCAmIFNDX0NUTF9TWU5DX01zaykge30KKyAgICAgICAgKHNjKS0+Q1RMIHw9ICgoKHUzMkNvdW50KSAtIDFVTCkgPDwgU0NfQ1RMX1JYUlRZX1BvcykgfCBTQ19DVExfUlhSVFlFTl9Nc2s7CisgICAgfQorfQorCisKK3VpbnQzMl90IFNDX0lzQ2FyZEluc2VydGVkKFNDX1QgKnNjKTsKK3ZvaWQgU0NfQ2xlYXJGSUZPKFNDX1QgKnNjKTsKK3ZvaWQgU0NfQ2xvc2UoU0NfVCAqc2MpOwordm9pZCBTQ19PcGVuKFNDX1QgKnNjLCB1aW50MzJfdCB1MzJDYXJkRGV0LCB1aW50MzJfdCB1MzJQV1IpOwordm9pZCBTQ19SZXNldFJlYWRlcihTQ19UICpzYyk7Cit2b2lkIFNDX1NldEJsb2NrR3VhcmRUaW1lKFNDX1QgKnNjLCB1aW50MzJfdCB1MzJCR1QpOwordm9pZCBTQ19TZXRDaGFyR3VhcmRUaW1lKFNDX1QgKnNjLCB1aW50MzJfdCB1MzJDR1QpOwordm9pZCBTQ19TdG9wQWxsVGltZXIoU0NfVCAqc2MpOwordm9pZCBTQ19TdGFydFRpbWVyKFNDX1QgKnNjLCB1aW50MzJfdCB1MzJUaW1lck51bSwgdWludDMyX3QgdTMyTW9kZSwgdWludDMyX3QgdTMyRVRVQ291bnQpOwordm9pZCBTQ19TdG9wVGltZXIoU0NfVCAqc2MsIHVpbnQzMl90IHUzMlRpbWVyTnVtKTsKK3VpbnQzMl90IFNDX0dldEludGVyZmFjZUNsb2NrKFNDX1QgKnNjKTsKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNDX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNDX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19TQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvc2N1LmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zY3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTY3MTQzCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvc2N1LmgKQEAgLTAsMCArMSwzNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzY3UuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgU2VjdXJlIENvbmZpZ3VyYXRpb24gVW5pdCBEcml2ZXIgSGVhZGVyCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TQ1VfSF9fCisjZGVmaW5lIF9fU0NVX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU0NVX0RyaXZlciBTQ1UgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU0NVX0VYUE9SVEVEX0NPTlNUQU5UUyBTQ1UgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisKKworCisvKioKKyAqIEBkZXRhaWxzICBOb24tc2VjdXJlIEF0dHJpYnV0aW9uIERlZmluaXRpb24uCisgKi8KK3R5cGVkZWYgZW51bSBOU0FUVFIKK3sKKyAgICAvKioqKioqICBQTk5TRVQwICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgVVNCSF9BdHRyICAgPSAgICAgOSwKKyAgICBTREgwX0F0dHIgICA9ICAgIDEzLAorICAgIEVCSV9BdHRyICAgID0gICAgMTYsCisgICAgUERNQTFfQXR0ciAgPSAgICAyNCwKKworICAgIC8qKioqKiogIFBOTlNFVDEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBDUkNfQXR0ciAgICA9IDMyICsgMTcsCisgICAgQ1JQVF9BdHRyICAgPSAzMiArIDE4LAorCisgICAgLyoqKioqKiAgUE5OU0VUMiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIFJUQ19BdHRyICAgID0gNjQgKyAxLAorICAgIEVBRENfQXR0ciAgID0gNjQgKyAzLAorICAgIEFDTVAwMV9BdHRyID0gNjQgKyA1LAorICAgIERBQ19BdHRyICAgID0gNjQgKyA3LAorICAgIEkyUzBfQXR0ciAgID0gNjQgKyA4LAorICAgIE9UR19BdHRyICAgID0gNjQgKyAxMywKKyAgICBUTVIyM19BdHRyICA9IDY0ICsgMTcsCisgICAgRVBXTTBfQXR0ciAgPSA2NCArIDI0LAorICAgIEVQV00xX0F0dHIgID0gNjQgKyAyNSwKKyAgICBCUFdNMF9BdHRyICA9IDY0ICsgMjYsCisgICAgQlBXTTFfQXR0ciAgPSA2NCArIDI3LAorICAgIC8qKioqKiogIFBOTlNFVDMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBRU1BJMF9BdHRyICA9IDk2ICsgMCwKKyAgICBTUEkwX0F0dHIgICA9IDk2ICsgMSwKKyAgICBTUEkxX0F0dHIgICA9IDk2ICsgMiwKKyAgICBTUEkyX0F0dHIgICA9IDk2ICsgMywKKyAgICBTUEkzX0F0dHIgICA9IDk2ICsgNCwKKyAgICBVQVJUMF9BdHRyICA9IDk2ICsgMTYsCisgICAgVUFSVDFfQXR0ciAgPSA5NiArIDE3LAorICAgIFVBUlQyX0F0dHIgID0gOTYgKyAxOCwKKyAgICBVQVJUM19BdHRyICA9IDk2ICsgMTksCisgICAgVUFSVDRfQXR0ciAgPSA5NiArIDIwLAorICAgIFVBUlQ1X0F0dHIgID0gOTYgKyAyMSwKKyAgICAvKioqKioqICBQTk5TRVQ0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgSTJDMF9BdHRyICAgPSAxMjggKyAwLAorICAgIEkyQzFfQXR0ciAgID0gMTI4ICsgMSwKKyAgICBJMkMyX0F0dHIgICA9IDEyOCArIDIsCisgICAgU0MwX0F0dHIgICAgPSAxMjggKyAxNiwKKyAgICBTQzFfQXR0ciAgICA9IDEyOCArIDE3LAorICAgIFNDMl9BdHRyICAgID0gMTI4ICsgMTgsCisKKworICAgIC8qKioqKiogIFBOTlNFVDUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBDQU4wX0F0dHIgICA9IDE2MCArIDAsCisgICAgUUVJMF9BdHRyICAgPSAxNjAgKyAxNiwKKyAgICBRRUkxX0F0dHIgICA9IDE2MCArIDE3LAorICAgIEVDQVAwX0F0dHIgID0gMTYwICsgMjAsCisgICAgRUNBUDFfQXR0ciAgPSAxNjAgKyAyMSwKKyAgICBUUk5HX0F0dHIgICA9IDE2MCArIDI1LAorCisgICAgLyoqKioqKiAgUE5OU0VUNiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIFVTQkRfQXR0ciAgID0gMTkyICsgMCwKKyAgICBVU0NJMF9BdHRyICA9IDE5MiArIDE2LAorICAgIFVTQ0kxX0F0dHIgID0gMTkyICsgMTcKKworCit9IE5TQVRUUl9UOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0NVX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBTQ1VfRVhQT1JURURfRlVOQ1RJT05TIFNDVSBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBwZXJpcGhlcmFsIG5vbi1zZWN1cmUgYXR0cmlidXRpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIG5zYXR0ciAgICAgVGhlIHNlY3VyZS9ub24tc2VjdXJlIGF0dHJpYnV0aW9uIG9mIHNwZWNpZmllZCBtb2R1bGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcG9zc2libGUgdmFsdWUgY291bGQgYmUgcmVmZXIgdG8gXHJlZiBOU0FUVFIuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IGEgcGVyaXBoZXJhbCB0byBiZSBub24tc2VjdXJlIHBlcmlwaGVyYWwuCisgICoKKyAgKi8KKyNkZWZpbmUgU0NVX1NFVF9QTlNTRVQobnNhdHRyKSAgIHsgU0NVLT5QTlNTRVRbKG5zYXR0cikvMzJdIHw9ICgxIDw8ICgobnNhdHRyKSAmIDB4MWZ1bCkpOyB9CisKKy8qKgorICogQGJyaWVmICAgICAgIEdldCBwZXJpcGhlcmFsIHNlY3VyZS9ub24tc2VjdXJlIGF0dHJpYnV0aW9uCisgKgorICAqIEBwYXJhbVtpbl0gIG5zYXR0ciAgICAgVGhlIHNlY3VyZS9ub24tc2VjdXJlIGF0dHJpYnV0aW9uIG9mIHNwZWNpZmllZCBtb2R1bGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcG9zc2libGUgdmFsdWUgY291bGQgYmUgcmVmZXIgdG8gXHJlZiBOU0FUVFIuCisgKgorICogQHJldHVybiAgICAgIFRoZSBzZWN1cmUvbm9uLXNlY3VyZSBhdHRyaWJ1dGlvbiBvZiBzcGVjaWZpZWQgcGVyaXBoZXJhbC4KKyAqIEByZXR2YWwgICAgICAwIFRoZSBwZXJpcGhlcmFsIGlzIHNlY3VyZQorICogQHJldHZhbCAgICAgIDEgVGhlIHBlcmlwaGVyYWwgaXMgbm9uLXNlY3VyZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIG1hY3JvIGdldHMgdGhlIHBlcmlwaGVyYWwgc2VjdXJlL25vbi1zZWN1cmUgYXR0cmlidXRpb24uCisgKi8KKyNkZWZpbmUgU0NVX0dFVF9QTlNTRVQobnNhdHRyKSAgICgoU0NVLT5QTlNTRVRbKG5zYXR0cikvMzJdID4+ICgobnNhdHRyKSAmIDB4MWZ1bCkpICYgMXVsKQorCisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBzZWN1cmUvbm9uLXNlY3VyZSBhdHRyaWJ1dGlvbiBvZiBzcGVjaWZpZWQgR1BJTyBwb3J0cworICoKKyAqIEBwYXJhbVtpbl0gICBtYXNrICAgIFRoZSBwb3J0IG1hc2sgb2YgZWFjaCBHUElPIHBvcnQKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX0lPTlNTRVRfUEFfTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9JT05TU0VUX1BCX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfSU9OU1NFVF9QQ19Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX0lPTlNTRVRfUERfTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9JT05TU0VUX1BFX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfSU9OU1NFVF9QRl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX0lPTlNTRVRfUEdfTXNrCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBtYWNybyBnZXRzIHRoZSBwZXJpcGhlcmFsIHNlY3VyZS9ub24tc2VjdXJlIGF0dHJpYnV0aW9uLgorICovCisjZGVmaW5lIFNDVV9TRVRfSU9OU1NFVChtYXNrKSAgIChTQ1UtPklPTlNTRVQgfD0gKG1hc2spKQorCisKKy8qKgorICogQGJyaWVmICAgICAgIEdldCBzZWN1cmUvbm9uLXNlY3VyZSBhdHRyaWJ1dGlvbiBvZiBzcGVjaWZpZWQgR1BJTyBwb3J0cworICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgIFRoZSBwb3J0IG1hc2sgb2YgZWFjaCBHUElPIHBvcnQKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX0lPTlNTRVRfUEFfTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9JT05TU0VUX1BCX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfSU9OU1NFVF9QQ19Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX0lPTlNTRVRfUERfTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9JT05TU0VUX1BFX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfSU9OU1NFVF9QRl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX0lPTlNTRVRfUEdfTXNrCisgKgorICogQHJldHVybiAgICAgIFRoZSBzZWN1cmUvbm9uLXNlY3VyZSBhdHRyaWJ1dGlvbiBvZiBzcGVjaWZpZWQgcGVyaXBoZXJhbC4KKyAqIEByZXR2YWwgICAgICAwIFRoZSBzcGVjaWZpZWQgSU8gcG9ydCBpcyBzZWN1cmUKKyAqIEByZXR2YWwgICAgICAxIFRoZSBzcGVjaWZpZWQgSU8gcG9ydCBpcyBub24tc2VjdXJlCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgbWFjcm8gZ2V0cyBHUElPIHBvcnQgc2VjdXJlL25vbi1zZWN1cmUgYXR0cmlidXRpb24uCisgKi8KKyNkZWZpbmUgU0NVX0dFVF9JT05TU0VUKHBvcnQpICAgKChTQ1UtPklPTlNTRVQmKHBvcnQpKT8xOjApCisKKworLyoqCisgKiBAYnJpZWYgICAgICAgRW5hYmxlIHNlcmN1cmUgdmlvbGF0aW9uIGludGVycnVwdHMKKyAqCisgKiBAcGFyYW1baW5dICAgbWFzayAgICBUaGUgbWFzayBvZiBlYWNoIHNlY3VyZSB2aW9sYXRpb24gaW50ZXJydXB0IHNvdXJjZQorICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9BUEIwSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9BUEIxSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9HUElPSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9FQklJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX1VTQkhJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0NSQ0lFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fU0RIMElFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fUERNQTBJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX1BETUExSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9TUkFNMElFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fU1JBTTFJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0ZNQ0lFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fRkxBU0hJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX1NDVUlFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fU1lTSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9DUlBUSUVOX01zaworICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgc2VjdXJlIHZpb2xhdGlvbiBpbnRlcnJ1cHQgb2YgU0NVLgorICogICAgICAgICAgICAgIFRoZSBzZWN1cmUgdmlvbGF0aW9uIGludGVycnVwdCBjb3VsZCBiZSB1c2VkIHRvIGRldGVjdCBhdHRhY2sgb2Ygc2VjdXJlIGVsZW1lbnRzLgorICovCisjZGVmaW5lIFNDVV9FTkFCTEVfSU5UKG1hc2spICAgIChTQ1UtPlNWSU9JRU4gfD0gKG1hc2spKQorCisKKy8qKgorICogQGJyaWVmICAgICAgIERpc2FibGUgc2VyY3VyZSB2aW9sYXRpb24gaW50ZXJydXB0cworICoKKyAqIEBwYXJhbVtpbl0gICBtYXNrICAgIFRoZSBtYXNrIG9mIGVhY2ggc2VjdXJlIHZpb2xhdGlvbiBpbnRlcnJ1cHQgc291cmNlCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0FQQjBJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0FQQjFJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0dQSU9JRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0VCSUlFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fVVNCSElFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fQ1JDSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9TREgwSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9QRE1BMElFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fUERNQTFJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX1NSQU0wSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9TUkFNMUlFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fRk1DSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9GTEFTSElFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fU0NVSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9TWVNJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0NSUFRJRU5fTXNrCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgc2VjdXJlIHZpb2xhdGlvbiBpbnRlcnJ1cHQgb2YgU0NVLgorICoKKyAqLworI2RlZmluZSBTQ1VfRElTQUJMRV9JTlQobWFzaykgICAgKFNDVS0+U1ZJT0lFTiAmPSAofihtYXNrKSkpCisKKworLyoqCisgICogQGJyaWVmICAgIEdldCBzZWN1cmUgdmlvbGF0aW9uIGludGVycnVwdCBzdGF0dXMKKyAgKgorICAqIEBwYXJhbSAgICBtYXNrICBUaGUgaW50ZXJydXB0IGZsYWcgbWFzayBiaXQKKyAgKgorICAqIEByZXR1cm4gICBUaGUgdmFsdWUgb2YgU0NVX1NWSU5UU1RTIHJlZ2lzdGVyCisgICoKKyAgKiBAZGV0YWlscyAgUmV0dXJuIGludGVycnVwdCBmbGFnIG9mIFNDVV9TVklOVFNUUyByZWdpc3Rlci4KKyAgKgorICAqLworI2RlZmluZSBTQ1VfR0VUX0lOVF9GTEFHKG1hc2spICAgICAgICAgKFNDVS0+U1ZJTlRTVFMmKG1hc2spKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBzZWN1cmUgdmlvbGF0aW9uIGludGVycnVwdCBmbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICBmbGFnIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGludGVycnVwdCBmbGFncy4KKyAgKiAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuCisgICogICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHQgZmxhZ3Mgd2lsbCBiZSBjbGVhcmVkLgorICAqICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJTlRTVFNfQVBCMElGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJTlRTVFNfQVBCMUlGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJTlRTVFNfR1BJT0lGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJTlRTVFNfRUJJSUZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNDVV9TVklOVFNUU19VU0JISUZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNDVV9TVklOVFNUU19DUkNJRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU5UU1RTX1NESDBJRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU5UU1RTX1BETUEwSUZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNDVV9TVklOVFNUU19QRE1BMUlGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJTlRTVFNfU1JBTTBJRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU5UU1RTX1NSQU0xSUZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNDVV9TVklOVFNUU19GTUNJRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU5UU1RTX0ZMQVNISUZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNDVV9TVklOVFNUU19TQ1VJRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU5UU1RTX1NZU0lGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJTlRTVFNfQ1JQVElGX01zaworICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgQ2xlYXIgU0NVIHJlbGF0ZWQgaW50ZXJydXB0IGZsYWdzIHNwZWNpZmllZCBieSBmbGFnIHBhcmFtZXRlci4KKyAgKgorICAqLworI2RlZmluZSBTQ1VfQ0xSX0lOVF9GTEFHKGZsYWcpICAgICAoU0NVLT5TVklOVFNUUyA9IChmbGFnKSkKKworCisKKy8qKgorICAqIEBicmllZiAgICAgIENvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIG5vbi1zZWN1cmUgbW9uaXRvciB3aGVuIENQVSBpcyBpbiBpZGxlIHN0YXRlLgorICAqCisgICogQHBhcmFtW2luXSAgb3B0IE9wdGlvbiBmb3IgYmVoYXZpb3IgY29udHJvbCBvZiBub24tc2VjdXJlIG1vbml0b3Igd2hlbiBDUFUgaW4gaWRsZS4KKyAgKiAgICAgICAgICAgICAgLSB0cnVlICAgICBUaGUgY291bnRlciBrZWVwcyBjb3VudGluZyB3aGVuIENQVSBpcyBpbiBpZGxlLgorICAgICAgICAgICAgICAgICAtIGZhbHNlICAgIFRoZSBjb3VudGVyIHdpbGwgc3RvcCB3aGVuIENQVSBpcyBpbiBpZGxlLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVG8gY29udHJvbCBub24tc2VjdXJlIG1vbml0b3IgY291bnRlciB3aGVuIENQVSBpcyBpbiBpZGxlLgorICAqCisgICovCisjZGVmaW5lIFNDVV9OU01fSURMRV9PTihvcHQpICAgICgob3B0KT8oU0NVLT5OU01DVEwgfD0gU0NVX05TTUNUTF9JRExFT05fTXNrKTooU0NVLT5OU01DVEwgJj0gflNDVV9OU01DVExfSURMRU9OX01zaykpCisKKy8qKgorICAqIEBicmllZiAgICAgIENvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIG5vbi1zZWN1cmUgbW9uaXRvciB3aGVuIENQVSBpcyBpbiBkZWJ1ZyBzdGF0ZS4KKyAgKgorICAqIEBwYXJhbVtpbl0gIG9wdCBPcHRpb24gZm9yIGJlaGF2aW9yIGNvbnRyb2wgb2Ygbm9uLXNlY3VyZSBtb25pdG9yIHdoZW4gQ1BVIGluIGRlYnVnLgorICAqICAgICAgICAgICAgICAtIHRydWUgICAgIFRoZSBjb3VudGVyIGtlZXBzIGNvdW50aW5nIHdoZW4gQ1BVIGlzIGluIGRlYnVnLgorICAgICAgICAgICAgICAgICAtIGZhbHNlICAgIFRoZSBjb3VudGVyIHdpbGwgc3RvcCB3aGVuIENQVSBpcyBpbiBkZWJ1Zy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRvIGNvbnRyb2wgbm9uLXNlY3VyZSBtb25pdG9yIGNvdW50ZXIgd2hlbiBDUFUgaXMgaW4gZGVidWcuCisgICoKKyAgKi8KKyNkZWZpbmUgU0NVX05TTV9EQkdfT04ob3B0KSAgICAoKG9wdCk/KFNDVS0+TlNNQ1RMIHw9IFNDVV9OU01DVExfREJHT05fTXNrKTooU0NVLT5OU01DVEwgJj0gflNDVV9OU01DVExfREJHT05fTXNrKSkKKworCisvKiBEZWNsYXJlIHRoZXNlIGlubGluZSBmdW5jdGlvbnMgaGVyZSB0byBhdm9pZCBNSVNSQSBDIDIwMDQgcnVsZSA4LjEgZXJyb3IgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNDVV9OU01Db25maWcodWludDMyX3QgdTMyVGlja3MsIHVpbnQzMl90IHUzMlByZXNjYWxlKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFNDVV9UaW1lckNvbmZpZyh1aW50MzJfdCB1MzJUaWNrcywgdWludDMyX3QgdTMyUHJlc2NhbGUpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIENvbmZpZyBub24tc2VjdXJlIG1vbml0b3IgdG8gZGV0ZWN0IHRpbWVvdXQgaW4gbm9uLXNlY3VyZSBzdGF0ZS4KKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlRpY2tzICAgICAgIEEgc3BlY2lmaWVkIHBlcmlvZCBmb3IgdGltZW91dCBpbiBub24tc2VjdXJlIHN0YXRlCisgICogQHBhcmFtW2luXSAgdTMyUHJlc2NhbGUgICAgQSBwcmUtc2NhbGUgZGl2aWRlciB0byBub24tc2VjdXJlIG1vbml0b3IgY2xvY2sKKworICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBub24tc2VjdXJlIG1vbml0b3IuIElmIHRoZSBDUFUgc3RhdGUgc3RheSBpbiBub24tc2VjdXJlIHN0YXRlIGZvcgorICAqICAgICAgICAgICAgIGEgc3BlY2lmaWVkIHBlcmlvZC4gVGhlIG5vbi1zZWN1cmUgbW9uaXRvciB3aWxsIHRpbWVvdXQgYW5kIGFzc2VydCBhbiBpbnRlcnJ1cHQuIE90aGVyd2lzZSwgdGhlCisgICogICAgICAgICAgICAgbm9uLXNlY3VyZSBtb25pdG9yIHdpbGwgYXV0byBjbGVhciB3aGVuZXZlciByZXR1cm5pbmcgdG8gc2VjdXJlIHN0YXRlLiBUaGlzIGNvdWxkIGJlIHVzZWQgdG8gYXZvaWQKKyAgKiAgICAgICAgICAgICBDUFUgc3RhdGUgaW4gbm9uLXNlY3VyZSBzdGF0ZSB0b28gbG9uZyB0aW1lIGZvciBzZWN1cml0eSBwdXJwb3NlLiBVc2VyIG11c3QgZW5hYmxlIFNDVV9JUlFuIGlmIGludGVycnVwdAorICAqICAgICAgICAgICAgIGlzIG5lY2Vzc2FyeS4KKyAgKgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NVX05TTUNvbmZpZyh1aW50MzJfdCB1MzJUaWNrcywgdWludDMyX3QgdTMyUHJlc2NhbGUpCit7CisKKyAgICBTQ1UtPk5TTUxPQUQgPSB1MzJUaWNrczsKKyAgICBTQ1UtPk5TTVZBTCAgPSAwdWw7CisgICAgU0NVLT5OU01DVEwgID0gU0NVX05TTUNUTF9BVVRPUkxEX01zayB8IFNDVV9OU01DVExfTlNNSUVOX01zayB8ICh1MzJQcmVzY2FsZSAmIDB4ZmZ1bCk7Cit9CisKKworLyoqCisgICogQGJyaWVmICAgICAgQ29uZmlnIG5vbi1zZWN1cmUgbW9uaXRvciB0byBiZSBhIHRpbWVyLgorICAqCisgICogQHBhcmFtW2luXSAgdTMyVGlja3MgICAgICAgQSBzcGVjaWZpZWQgcGVyaW9kIGZvciB0aW1lciBpbnRlcnJ1cHQuCisgICogQHBhcmFtW2luXSAgdTMyUHJlc2NhbGUgICAgQSBwcmUtc2NhbGUgZGl2aWRlciB0byB0aW1lciBjbG9jayBzb3VyY2UuCisKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgbm9uLXNlY3VyZSBtb25pdG9yIGFzIGEgdGltZXIuIEluIG90aGVyIHdvcmRzLCB0aGUgdGltZXIgY291bnRlcgorICAqICAgICAgICAgICAgIGtlZXBzIGNvdW50aW5nIGV2ZW4gQ1BVIGlzIGluIHNlY3VyZSBzdGF0ZS4KKyAgKgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NVX1RpbWVyQ29uZmlnKHVpbnQzMl90IHUzMlRpY2tzLCB1aW50MzJfdCB1MzJQcmVzY2FsZSkKK3sKKworICAgIFNDVS0+TlNNTE9BRCA9IHUzMlRpY2tzOworICAgIFNDVS0+TlNNVkFMICA9IDB1bDsKKyAgICBTQ1UtPk5TTUNUTCAgPSBTQ1VfTlNNQ1RMX0FVVE9STERfTXNrIHwgU0NVX05TTUNUTF9OU01JRU5fTXNrIHwgU0NVX05TTUNUTF9UTVJNT0RfTXNrIHwgKHUzMlByZXNjYWxlICYgMHhmZnVsKTsKK30KKworCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTQ1VfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0NVX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19TQ1VfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3NjdWFydC5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvc2N1YXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5MTFlNgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3NjdWFydC5oCkBAIC0wLDAgKzEsMzU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc2N1YXJ0LmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFNtYXJ0Y2FyZCBVQVJUIG1vZGUgKFNDVUFSVCkgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TQ1VBUlRfSF9fCisjZGVmaW5lIF9fU0NVQVJUX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU0NVQVJUX0RyaXZlciBTQ1VBUlQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU0NVQVJUX0VYUE9SVEVEX0NPTlNUQU5UUyBTQ1VBUlQgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworI2RlZmluZSBTQ1VBUlRfQ0hBUl9MRU5fNSAgICAgKDB4M1VMIDw8IFNDX1VBUlRDVExfV0xTX1BvcykgICAgIC8qITwgU2V0IFNDVUFSVCB3b3JkIGxlbmd0aCB0byA1IGJpdHMgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ1VBUlRfQ0hBUl9MRU5fNiAgICAgKDB4MlVMIDw8IFNDX1VBUlRDVExfV0xTX1BvcykgICAgIC8qITwgU2V0IFNDVUFSVCB3b3JkIGxlbmd0aCB0byA2IGJpdHMgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ1VBUlRfQ0hBUl9MRU5fNyAgICAgKDB4MVVMIDw8IFNDX1VBUlRDVExfV0xTX1BvcykgICAgIC8qITwgU2V0IFNDVUFSVCB3b3JkIGxlbmd0aCB0byA3IGJpdHMgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ1VBUlRfQ0hBUl9MRU5fOCAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IFNDVUFSVCB3b3JkIGxlbmd0aCB0byA4IGJpdHMgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFNDVUFSVF9QQVJJVFlfTk9ORSAgICAoU0NfVUFSVENUTF9QQk9GRl9Nc2spICAgICAgICAgICAgLyohPCBTZXQgU0NVQVJUIHRyYW5zZmVyIHdpdGggbm8gcGFyaXR5ICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ1VBUlRfUEFSSVRZX09ERCAgICAgKFNDX1VBUlRDVExfT1BFX01zaykgICAgICAgICAgICAgIC8qITwgU2V0IFNDVUFSVCB0cmFuc2ZlciB3aXRoIG9kZCBwYXJpdHkgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0NVQVJUX1BBUklUWV9FVkVOICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNldCBTQ1VBUlQgdHJhbnNmZXIgd2l0aCBldmVuIHBhcml0eSBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgU0NVQVJUX1NUT1BfQklUXzEgICAgIChTQ19DVExfTlNCX01zaykgICAgICAgICAgICAgICAgICAvKiE8IFNldCBTQ1VBUlQgdHJhbnNmZXIgd2l0aCBvbmUgc3RvcCBiaXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0NVQVJUX1NUT1BfQklUXzIgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNldCBTQ1VBUlQgdHJhbnNmZXIgd2l0aCB0d28gc3RvcCBiaXRzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTQ1VBUlRfRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIFNDVUFSVF9FWFBPUlRFRF9GVU5DVElPTlMgU0NVQVJUIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyogVFggTWFjcm9zICovCisvKioKKyAgKiBAYnJpZWYgV3JpdGUgRGF0YSB0byBUeCBkYXRhIHJlZ2lzdGVyCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdThEYXRhICBEYXRhIGJ5dGUgdG8gdHJhbnNtaXQuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBCeSB3cml0aW5nIGRhdGEgdG8gREFUIHJlZ2lzdGVyLCB0aGUgU0Mgd2lsbCBzZW5kIG91dCBhbiA4LWJpdCBkYXRhLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX1dSSVRFKHNjLCB1OERhdGEpICAgICgoc2MpLT5EQVQgPSAodThEYXRhKSkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFR4IEZJRk8gZW1wdHkgZmxhZyBzdGF0dXMgZnJvbSByZWdpc3RlcgorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgVHJhbnNtaXQgRklGTyBlbXB0eSBzdGF0dXMKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICAgICAgICAgICAgICBUcmFuc21pdCBGSUZPIGlzIG5vdCBlbXB0eQorICAqIEByZXR2YWwgICAgIFNDX1NUQVRVU19UWEVNUFRZX01zayAgIFRyYW5zbWl0IEZJRk8gaXMgZW1wdHkKKyAgKgorICAqIEBkZXRhaWxzICAgIFdoZW4gdGhlIGxhc3QgYnl0ZSBvZiBUeCBidWZmZXIgaGFzIGJlZW4gdHJhbnNmZXJyZWQgdG8gVHJhbnNtaXR0ZXIgU2hpZnQgUmVnaXN0ZXIsIGhhcmR3YXJlIHNldHMgVFhFTVBUWSAoU0NfU1RBVFVTWzldKSBoaWdoLgorICAqICAgICAgICAgICAgIEl0IHdpbGwgYmUgY2xlYXJlZCB3aGVuIHdyaXRpbmcgZGF0YSBpbnRvIERBVCAoU0NfREFUWzc6MF0pLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX0dFVF9UWF9FTVBUWShzYykgICAgICgoc2MpLT5TVEFUVVMgJiBTQ19TVEFUVVNfVFhFTVBUWV9Nc2spCisKKy8qKgorICAqIEBicmllZiBHZXQgVHggRklGTyBmdWxsIGZsYWcgc3RhdHVzIGZyb20gcmVnaXN0ZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIFRyYW5zbWl0IEZJRk8gZnVsbCBzdGF0dXMKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICAgICAgICAgICAgICBUcmFuc21pdCBGSUZPIGlzIG5vdCBmdWxsCisgICogQHJldHZhbCAgICAgU0NfU1RBVFVTX1RYRlVMTF9Nc2sgICAgVHJhbnNtaXQgRklGTyBpcyBmdWxsCisgICoKKyAgKiBAZGV0YWlscyAgICBUWEZVTEwgKFNDX1NUQVRVU1sxMF0pIGlzIHNldCB3aGVuIFR4IGJ1ZmZlciBjb3VudHMgZXF1YWxzIHRvIDQsIG90aGVyd2lzZSBpcyBjbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX0dFVF9UWF9GVUxMKHNjKSAgICAgICgoc2MpLT5TVEFUVVMgJiBTQ19TVEFUVVNfVFhGVUxMX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgV2FpdCBzcGVjaWZpZWQgc21hcnRjYXJkIHBvcnQgdHJhbnNtaXNzaW9uIGNvbXBsZXRlCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUWEFDVCAoU0NfU1RBVFVTWzMxXSkgaXMgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gVHggdHJhbnNmZXIgaXMgZmluaXNoZWQgb3IgdGhlIGxhc3QgYnl0ZSB0cmFuc21pc3Npb24gaGFzIGNvbXBsZXRlZC4KKyAgKgorICAgICAgICBUaGlzIG1hY3JvIGJsb2NrcyB1bnRpbCB0cmFuc21pdCBjb21wbGV0ZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDVUFSVF9XQUlUX1RYX0VNUFRZKHNjKSAgICB3aGlsZSgoc2MpLT5TVEFUVVMgJiBTQ19TVEFUVVNfVFhBQ1RfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDaGVjayBzcGVjaWZpZWQgc21hcnRjYXJkIHBvcnQgdHJhbnNtaXQgRklGTyBpcyBmdWxsIG9yIG5vdAorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgVHJhbnNtaXQgRklGTyBmdWxsIHN0YXR1cworICAqIEByZXR2YWwgICAgIDAgICAgICAgVHJhbnNtaXQgRklGTyBpcyBub3QgZnVsbAorICAqIEByZXR2YWwgICAgIDEgICAgICAgVHJhbnNtaXQgRklGTyBpcyBmdWxsCisgICoKKyAgKiBAZGV0YWlscyAgICBUWEZVTEwgKFNDX1NUQVRVU1sxMF0pIGluZGljYXRlcyBUeCBidWZmZXIgZnVsbCBvciBub3QuCisgICogICAgICAgICAgICAgVGhpcyBiaXQgaXMgc2V0IHdoZW4gVHggYnVmZmVyIGNvdW50cyBlcXVhbHMgdG8gNCwgb3RoZXJ3aXNlIGlzIGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ1VBUlRfSVNfVFhfRlVMTChzYykgICAgICAgKCgoc2MpLT5TVEFUVVMgJiBTQ19TVEFUVVNfVFhGVUxMX01zayk/IDEgOiAwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDaGVjayBzcGVjaWZpZWQgc21hcnRjYXJkIHBvcnQgdHJhbnNtaXNzaW9uIGlzIG92ZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIFRyYW5zbWl0IGNvbXBsZXRlIHN0YXR1cworICAqIEByZXR2YWwgICAgIDAgICAgICAgVHJhbnNtaXQgaXMgbm90IGNvbXBsZXRlCisgICogQHJldHZhbCAgICAgMSAgICAgICBUcmFuc21pdCBjb21wbGV0ZQorICAqCisgICogQGRldGFpbHMgICAgVFhBQ1QgKFNDX1NUQVRVU1szMV0pIGluZGljYXRlcyBUeCBUcmFuc21pdCBpcyBjb21wbGV0ZSBvciBub3QuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ1VBUlRfSVNfVFhfRU1QVFkoc2MpICAgICAgKCgoc2MpLT5TVEFUVVMgJiBTQ19TVEFUVVNfVFhBQ1RfTXNrKT8gMCA6IDEpCisKKy8qKgorICAqIEBicmllZiAgICAgIENoZWNrIHNwZWNpZmllZCBzbWFydGNhcmQgcG9ydCB0cmFuc21pdCBGSUZPIGVtcHR5IHN0YXR1cworICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgVHJhbnNtaXQgRklGTyBlbXB0eSBzdGF0dXMKKyAgKiBAcmV0dmFsICAgICAwICAgICAgIFRyYW5zbWl0IEZJRk8gaXMgbm90IGVtcHR5CisgICogQHJldHZhbCAgICAgMSAgICAgICBUcmFuc21pdCBGSUZPIGlzIGVtcHR5CisgICoKKyAgKiBAZGV0YWlscyAgICBUWEVNUFRZIChTQ19TVEFUVVNbOV0pIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIHRoZSBsYXN0IGJ5dGUgb2YgVHggYnVmZmVyIGhhcyBiZWVuIHRyYW5zZmVycmVkIHRvIFRyYW5zbWl0dGVyIFNoaWZ0IFJlZ2lzdGVyLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX0lTX1RYX0ZJRk9fRU1QVFkoc2MpICgoKHNjKS0+U1RBVFVTICYgU0NfU1RBVFVTX1RYRU1QVFlfTXNrKT8gMSA6IDApCisKKy8qKgorICAqIEBicmllZiAgICAgIENoZWNrIHNwZWNpZmllZCBTbWFydGNhcmQgcG9ydCBUcmFuc21pc3Npb24gU3RhdHVzCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgICAgIFRyYW5zbWl0IGlzIGNvbXBsZXRlZAorICAqIEByZXR2YWwgICAgIDEgICAgICAgVHJhbnNtaXQgaXMgYWN0aXZlCisgICoKKyAgKiBAZGV0YWlscyAgICBUWEFDVCAoU0NfU1RBVFVTWzMxXSkgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gVHggdHJhbnNmZXIgaXMgaW4gYWN0aXZlIGFuZCB0aGUgU1RPUCBiaXQgb2YgdGhlIGxhc3QgYnl0ZSBoYXMgYmVlbiB0cmFuc21pdHRlZC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDVUFSVF9JU19UWF9BQ1RJVkUoc2MpICAgICAoKChzYyktPlNUQVRVUyAmIFNDX1NUQVRVU19UWEFDVF9Nc2spPyAxIDogMCkKKworCisvKiBSWCBNYWNyb3MgKi8KKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgUnggZGF0YSByZWdpc3RlcgorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgVGhlIG9sZGVzdCBkYXRhIGJ5dGUgaW4gUlggRklGTworICAqCisgICogQGRldGFpbHMgICAgQnkgcmVhZGluZyBEQVQgcmVnaXN0ZXIsIHRoZSBTQyB3aWxsIHJldHVybiBhbiA4LWJpdCByZWNlaXZlZCBkYXRhLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX1JFQUQoc2MpICAgICAgICAgKChzYyktPkRBVCkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFJ4IEZJRk8gZW1wdHkgZmxhZyBzdGF0dXMgZnJvbSByZWdpc3RlcgorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgUmVjZWl2ZSBGSUZPIGVtcHR5IHN0YXR1cworICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgICAgICAgICAgICAgIFJlY2VpdmUgRklGTyBpcyBub3QgZW1wdHkKKyAgKiBAcmV0dmFsICAgICBTQ19TVEFUVVNfUlhFTVBUWV9Nc2sgICBSZWNlaXZlIEZJRk8gaXMgZW1wdHkKKyAgKgorICAqIEBkZXRhaWxzICAgIFdoZW4gdGhlIGxhc3QgYnl0ZSBvZiBSeCBidWZmZXIgaGFzIGJlZW4gcmVhZCBieSBDUFUsIGhhcmR3YXJlIHNldHMgUlhFTVBUWSAoU0NfU1RBVFVTWzFdKSBoaWdoLgorICAqICAgICAgICAgICAgIEl0IHdpbGwgYmUgY2xlYXJlZCB3aGVuIFNDIHJlY2VpdmVzIGFueSBuZXcgZGF0YS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDVUFSVF9HRVRfUlhfRU1QVFkoc2MpICgoc2MpLT5TVEFUVVMgJiBTQ19TVEFUVVNfUlhFTVBUWV9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBSeCBGSUZPIGZ1bGwgZmxhZyBzdGF0dXMgZnJvbSByZWdpc3RlcgorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgUmVjZWl2ZSBGSUZPIGZ1bGwgc3RhdHVzCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBGSUZPIGlzIG5vdCBmdWxsCisgICogQHJldHZhbCAgICAgU0NfU1RBVFVTX1RYRlVMTF9Nc2sgICAgUmVjZWl2ZSBGSUZPIGlzIGZ1bGwKKyAgKgorICAqIEBkZXRhaWxzICAgIFJYRlVMTCAoU0NfU1RBVFVTWzJdKSBpcyBzZXQgd2hlbiBSeCBidWZmZXIgY291bnRzIGVxdWFscyB0byA0LCBvdGhlcndpc2UgaXQgaXMgY2xlYXJlZCBieSBoYXJkd2FyZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDVUFSVF9HRVRfUlhfRlVMTChzYykgICgoc2MpLT5TVEFUVVMgJiBTQ19TVEFUVVNfUlhGVUxMX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgQ2hlY2sgaWYgcmVjZWl2ZSBkYXRhIG51bWJlciBpbiBGSUZPIHJlYWNoIEZJRk8gdHJpZ2dlciBsZXZlbCBvciBub3QKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIFJlY2VpdmUgRklGTyBkYXRhIHN0YXR1cworICAqIEByZXR2YWwgICAgIDAgICAgICAgVGhlIG51bWJlciBvZiBieXRlcyBpbiByZWNlaXZlIEZJRk8gaXMgbGVzcyB0aGFuIHRyaWdnZXIgbGV2ZWwKKyAgKiBAcmV0dmFsICAgICAxICAgICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gcmVjZWl2ZSBGSUZPIGVxdWFscyBvciBsYXJnZXIgdGhhbiB0cmlnZ2VyIGxldmVsCisgICoKKyAgKiBAZGV0YWlscyAgICBSREFJRiAoU0NfSU5UU1RTWzBdKSBpcyB1c2VkIGZvciByZWNlaXZlZCBkYXRhIHJlYWNoaW5nIHRyaWdnZXIgbGV2ZWwgUlhUUkdMViAoU0NfQ1RMWzc6Nl0pIGludGVycnVwdCBzdGF0dXMgZmxhZy4KKyAgKgorICAgICAgICBJZiByZWNlaXZlIHRyaWdnZXIgbGV2ZWwgaXMgXGIgbm90IDEgYnl0ZSwgdGhpcyBtYWNybyByZXR1cm4gMCBkb2VzIG5vdCBuZWNlc3NhcnkgaW5kaWNhdGVzIHRoZXJlIGlzIG5vIGRhdGEgaW4gRklGTy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDVUFSVF9JU19SWF9SRUFEWShzYykgICgoKHNjKS0+SU5UU1RTICYgU0NfSU5UU1RTX1JEQUlGX01zayk/IDEgOiAwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDaGVjayBzcGVjaWZpZWQgc21hcnRjYXJkIHBvcnQgcmVjZWl2ZSBGSUZPIGlzIGZ1bGwgb3Igbm90CisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBSZWNlaXZlIEZJRk8gZnVsbCBzdGF0dXMKKyAgKiBAcmV0dmFsICAgICAwICAgICAgIFJlY2VpdmUgRklGTyBpcyBub3QgZnVsbAorICAqIEByZXR2YWwgICAgIDEgICAgICAgUmVjZWl2ZSBGSUZPIGlzIGZ1bGwKKyAgKgorICAqIEBkZXRhaWxzICAgIFJYRlVMTEYoIFNDX1NUQVRVU1syXSkgaXMgc2V0IHdoZW4gUnggYnVmZmVyIGNvdW50cyBlcXVhbHMgdG8gNCwgb3RoZXJ3aXNlIGl0IGlzIGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ1VBUlRfSVNfUlhfRlVMTChzYykgICAoKChzYyktPlNUQVRVUyAmIFNDX1NUQVRVU19SWEZVTExfTXNrKT8gMSA6IDApCisKKworLyogSW50ZXJydXB0IE1hY3JvcyAqLworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIHNwZWNpZmllZCBpbnRlcnJ1cHRzCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBJbnRlcnJ1cHQgbWFza3MgdG8gZW5hYmxlLCBhIGNvbWJpbmF0aW9uIG9mIGZvbGxvd2luZyBiaXRzLAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9SWFRPSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9URVJSSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9UQkVJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1JEQUlFTl9Nc2sKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSByZWNlaXZlciBidWZmZXIgdGltZS1vdXQgaW50ZXJydXB0LCB0cmFuc2ZlciBlcnJvciBpbnRlcnJ1cHQsCisgICogICAgICAgICAgICAgdHJhbnNtaXQgYnVmZmVyIGVtcHR5IGludGVycnVwdCBvciByZWNlaXZlIGRhdGEgcmVhY2ggdHJpZ2dlciBsZXZlbCBpbnRlcnJ1cHQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ1VBUlRfRU5BQkxFX0lOVChzYywgdTMyTWFzaykgICgoc2MpLT5JTlRFTiB8PSAodTMyTWFzaykpCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgc3BlY2lmaWVkIGludGVycnVwdHMKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIEludGVycnVwdCBtYXNrcyB0byBkaXNhYmxlLCBhIGNvbWJpbmF0aW9uIG9mIGZvbGxvd2luZyBiaXRzLAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9SWFRPSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9URVJSSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9UQkVJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1JEQUlFTl9Nc2sKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgcmVjZWl2ZXIgYnVmZmVyIHRpbWUtb3V0IGludGVycnVwdCwgdHJhbnNmZXIgZXJyb3IgaW50ZXJydXB0LAorICAqICAgICAgICAgICAgIHRyYW5zbWl0IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgb3IgcmVjZWl2ZSBkYXRhIHJlYWNoIHRyaWdnZXIgbGV2ZWwgaW50ZXJydXB0LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX0RJU0FCTEVfSU5UKHNjLCB1MzJNYXNrKSAoKHNjKS0+SU5URU4gJj0gfih1MzJNYXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHNwZWNpZmllZCBpbnRlcnJ1cHQgZmxhZy9zdGF0dXMKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMlR5cGUgIEludGVycnVwdCBmbGFnL3N0YXR1cyB0byBjaGVjaywgY291bGQgYmUgb25lIG9mIGZvbGxvd2luZyB2YWx1ZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRTVFNfUlhUT0lGX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRTVFNfVEVSUklGX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRTVFNfVEJFSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVFNUU19SREFJRl9Nc2sKKyAgKgorICAqIEByZXR1cm4gICAgIFRoZSBzdGF0dXMgb2Ygc3BlY2lmaWVkIGludGVycnVwdAorICAqIEByZXR2YWwgICAgIDAgICAgICAgU3BlY2lmaWVkIGludGVycnVwdCBkb2VzIG5vdCBoYXBwZW5lZAorICAqIEByZXR2YWwgICAgIDEgICAgICAgU3BlY2lmaWVkIGludGVycnVwdCBoYXBwZW5lZAorICAqCisgICogQGRldGFpbHMgICAgVGhlIG1hY3JvIGlzIHVzZWQgdG8gZ2V0IHJlY2VpdmVyIGJ1ZmZlciB0aW1lLW91dCBpbnRlcnJ1cHQgc3RhdHVzLCB0cmFuc2ZlciBlcnJvciBpbnRlcnJ1cHQgc3RhdHVzLAorICAqICAgICAgICAgICAgIHRyYW5zbWl0IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgc3RhdHVzIG9yIHJlY2VpdmUgZGF0YSByZWFjaCBpbnRlcnJ1cHQgc3RhdHVzLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX0dFVF9JTlRfRkxBRyhzYywgdTMyVHlwZSkgICAgKCgoc2MpLT5JTlRTVFMgJiAodTMyVHlwZSkpPyAxIDogMCkKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgc3BlY2lmaWVkIGludGVycnVwdCBmbGFnL3N0YXR1cworICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyVHlwZSAgSW50ZXJydXB0IGZsYWcvc3RhdHVzIHRvIGNsZWFyLCBvbmx5IFxyZWYgU0NfSU5UU1RTX1RFUlJJRl9Nc2sgdmFsaWQgZm9yIHRoaXMgbWFjcm8uCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgbWFjcm8gaXMgdXNlZCB0byBjbGVhciB0cmFuc2ZlciBlcnJvciBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDVUFSVF9DTFJfSU5UX0ZMQUcoc2MsIHUzMlR5cGUpICAgICgoc2MpLT5JTlRTVFMgPSAodTMyVHlwZSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCByZWNlaXZlIGVycm9yIGZsYWcvc3RhdHVzCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIEN1cnJlbnQgcmVjZWl2ZSBlcnJvciBzdGF0dXMsIGNvdWxkIG9uZSBvZiBmb2xsb3dpbmcgZXJyb3JzOgorICAqIEByZXR2YWwgICAgIFNDX1NUQVRVU19QRUZfTXNrICAgUGFyaXR5IGVycm9yCisgICogQHJldHZhbCAgICAgU0NfU1RBVFVTX0ZFRl9Nc2sgICBGcmFtZSBlcnJvcgorICAqIEByZXR2YWwgICAgIFNDX1NUQVRVU19CRUZfTXNrICAgQnJlYWsgZXJyb3IKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBtYWNybyBpcyB1c2VkIHRvIGdldCByZWNlaXZlciBwYXJpdHkgZXJyb3Igc3RhdHVzLCBmcmFtZSBlcnJvciBzdGF0dXMgb3IgYnJlYWsgZXJyb3Igc3RhdHVzLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX0dFVF9FUlJfRkxBRyhzYykgICAgICAgICAgICAgKChzYyktPlNUQVRVUyAmIChTQ19TVEFUVVNfUEVGX01zayB8IFNDX1NUQVRVU19GRUZfTXNrIHwgU0NfU1RBVFVTX0JFRl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBzcGVjaWZpZWQgcmVjZWl2ZSBlcnJvciBmbGFnL3N0YXR1cworICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgUmVjZWl2ZSBlcnJvciBmbGFnL3N0YXR1cyB0byBjbGVhciwgY29tYmluYXRpb24gZm9sbG93aW5nIHZhbHVlcworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19TVEFUVVNfUEVGX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19TVEFUVVNfRkVGX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19TVEFUVVNfQkVGX01zaworICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIG1hY3JvIGlzIHVzZWQgdG8gY2xlYXIgcmVjZWl2ZXIgcGFyaXR5IGVycm9yIGZsYWcsIGZyYW1lIGVycm9yIGZsYWcgb3IgYnJlYWsgZXJyb3IgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDVUFSVF9DTFJfRVJSX0ZMQUcoc2MsIHUzMk1hc2spICAgICgoc2MpLT5TVEFUVVMgPSAodTMyTWFzaykpCisKK3ZvaWQgU0NVQVJUX0Nsb3NlKFNDX1QqIHNjKTsKK3VpbnQzMl90IFNDVUFSVF9PcGVuKFNDX1QqIHNjLCB1aW50MzJfdCB1MzJCYXVkcmF0ZSk7Cit1aW50MzJfdCBTQ1VBUlRfUmVhZChTQ19UKiBzYywgdWludDhfdCBwdThSeEJ1ZltdLCB1aW50MzJfdCB1MzJSZWFkQnl0ZXMpOwordWludDMyX3QgU0NVQVJUX1NldExpbmVDb25maWcoU0NfVCogc2MsIHVpbnQzMl90IHUzMkJhdWRyYXRlLCB1aW50MzJfdCB1MzJEYXRhV2lkdGgsIHVpbnQzMl90IHUzMlBhcml0eSwgdWludDMyX3QgdTMyU3RvcEJpdHMpOwordm9pZCBTQ1VBUlRfU2V0VGltZW91dENudChTQ19UKiBzYywgdWludDMyX3QgdTMyVE9DKTsKK3ZvaWQgU0NVQVJUX1dyaXRlKFNDX1QqIHNjLCB1aW50OF90IHB1OFR4QnVmW10sIHVpbnQzMl90IHUzMldyaXRlQnl0ZXMpOworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNDVUFSVF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTQ1VBUlRfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1NDVUFSVF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvc2RoLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zZGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGU5OGI3Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvc2RoLmgKQEAgLTAsMCArMSwyMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzZGguaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgU0RIIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fU0RIX0hfXworI2RlZmluZSBfX1NESF9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU0RIX0RyaXZlciBTREggRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBTREhfRVhQT1JURURfQ09OU1RBTlRTIFNESCBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKyNkZWZpbmUgU0RIX0VSUl9JRCAgICAgICAweEZGRkYwMTAwVUwgLyohPCBTREggZXJyb3IgSUQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBTREhfVElNRU9VVCAgICAgIChTREhfRVJSX0lEfDB4MDFVTCkgLyohPCBUaW1lb3V0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNESF9OT19NRU1PUlkgICAgKFNESF9FUlJfSUR8MHgwMlVMKSAvKiE8IE9PTSAgXGhpZGVpbml0aWFsaXplciAqLworCisvKiAtLSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgKi8KKyNkZWZpbmUgICAgU3VjY2Vzc2Z1bCAgMFUgICAvKiE8IFN1Y2Nlc3MgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgICAgRmFpbCAgICAgICAgMVUgICAvKiE8IEZhaWxlZCAgXGhpZGVpbml0aWFsaXplciAqLworCisvKiAtLS0gZGVmaW5lIHR5cGUgb2YgU0QgY2FyZCBvciBNTUMgKi8KKyNkZWZpbmUgU0RIX1RZUEVfVU5LTk9XTiAgICAgMFVMIC8qITwgVW5rbm93biBjYXJkIHR5cGUgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0RIX1RZUEVfU0RfSElHSCAgICAgMVVMIC8qITwgU0RIQyBjYXJkICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNESF9UWVBFX1NEX0xPVyAgICAgIDJVTCAvKiE8IFNEIGNhcmQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0RIX1RZUEVfTU1DICAgICAgICAgM1VMIC8qITwgTU1DIGNhcmQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0RIX1RZUEVfRU1NQyAgICAgICAgNFVMIC8qITwgZU1NQyBjYXJkICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qIFNEIGVycm9yICovCisjZGVmaW5lIFNESF9OT19TRF9DQVJEICAgICAgIChTREhfRVJSX0lEfDB4MTBVTCkgLyohPCBDYXJkIHJlbW92ZWQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0RIX0VSUl9ERVZJQ0UgICAgICAgKFNESF9FUlJfSUR8MHgxMVVMKSAvKiE8IERldmljZSBlcnJvciAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTREhfSU5JVF9USU1FT1VUICAgICAoU0RIX0VSUl9JRHwweDEyVUwpIC8qITwgQ2FyZCBpbml0IHRpbWVvdXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0RIX1NFTEVDVF9FUlJPUiAgICAgKFNESF9FUlJfSUR8MHgxM1VMKSAvKiE8IENhcmQgc2VsZWN0IGVycm9yICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNESF9XUklURV9QUk9URUNUICAgIChTREhfRVJSX0lEfDB4MTRVTCkgLyohPCBDYXJkIHdyaXRlIHByb3RlY3QgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0RIX0lOSVRfRVJST1IgICAgICAgKFNESF9FUlJfSUR8MHgxNVVMKSAvKiE8IENhcmQgaW5pdCBlcnJvciAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTREhfQ1JDN19FUlJPUiAgICAgICAoU0RIX0VSUl9JRHwweDE2VUwpIC8qITwgQ1JDIDcgZXJyb3IgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0RIX0NSQzE2X0VSUk9SICAgICAgKFNESF9FUlJfSUR8MHgxN1VMKSAvKiE8IENSQyAxNiBlcnJvciAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTREhfQ1JDX0VSUk9SICAgICAgICAoU0RIX0VSUl9JRHwweDE4VUwpIC8qITwgQ1JDIGVycm9yICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNESF9DTUQ4X0VSUk9SICAgICAgIChTREhfRVJSX0lEfDB4MTlVTCkgLyohPCBDb21tYW5kIDggZXJyb3IgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBNTUNfRlJFUSAgICAgICAgMjAwMDBVTCAgIC8qITwgb3V0cHV0IDIwTUh6IHRvIE1NQyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTRF9GUkVRICAgICAgICAgMjUwMDBVTCAgIC8qITwgb3V0cHV0IDI1TUh6IHRvIFNEICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNESENfRlJFUSAgICAgICA1MDAwMFVMICAgLyohPCBvdXRwdXQgNTBNSHogdG8gU0RIIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSAgICBDYXJkRGV0ZWN0X0Zyb21fR1BJTyAgKDFVTCA8PCA4KSAgIC8qITwgQ2FyZCBkZXRlY3Rpb24gcGluIGlzIEdQSU8gXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSAgICBDYXJkRGV0ZWN0X0Zyb21fREFUMyAgKDFVTCA8PCA5KSAgIC8qITwgQ2FyZCBkZXRlY3Rpb24gcGluIGlzIERBVDMgXGhpZGVpbml0aWFsaXplciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNESF9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworLyoqIEBhZGR0b2dyb3VwIFNESF9FWFBPUlRFRF9UWVBFREVGIFNESCBFeHBvcnRlZCBUeXBlIERlZmluZXMKKyAgQHsKKyovCisjcHJhZ21hIHBhY2socHVzaCkKKyNwcmFnbWEgcGFjaygxKQordHlwZWRlZiBzdHJ1Y3QgU0RIX2luZm9fdAoreworICAgIHVuc2lnbmVkIGludCAgICBDYXJkVHlwZTsgICAgICAgLyohPCBTREhDLCBTRCwgb3IgTU1DICovCisgICAgdW5zaWduZWQgaW50ICAgIFJDQTsgICAgICAgICAgICAvKiE8IFJlbGF0aXZlIGNhcmQgYWRkcmVzcyAqLworICAgIHVuc2lnbmVkIGNoYXIgICBJc0NhcmRJbnNlcnQ7ICAgLyohPCBDYXJkIGluc2VydCBzdGF0ZSAqLworICAgIHVuc2lnbmVkIGludCAgICB0b3RhbFNlY3Rvck47ICAgLyohPCBUb3RhbCBzZWN0b3IgbnVtYmVyICovCisgICAgdW5zaWduZWQgaW50ICAgIGRpc2tTaXplOyAgICAgICAvKiE8IERpc2sgc2l6ZSBpbiBLIGJ5dGVzICovCisgICAgaW50ICAgICAgICAgICAgIHNlY3RvclNpemU7ICAgICAvKiE8IFNlY3RvciBzaXplIGluIGJ5dGVzICovCit9IFNESF9JTkZPX1Q7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSBob2xkcyBTRCBjYXJkIGluZm8gKi8KKyNwcmFnbWEgcGFjayhwb3ApCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0RIX0VYUE9SVEVEX1RZUEVERUYgKi8KKworLyoqIEBjb25kIEhJRERFTl9TWU1CT0xTICovCitleHRlcm4gU0RIX0lORk9fVCBTRDA7CisvKiogQGVuZGNvbmQgSElEREVOX1NZTUJPTFMgKi8KKworLyoqIEBhZGR0b2dyb3VwIFNESF9FWFBPUlRFRF9GVU5DVElPTlMgU0RIIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgKiAgQGJyaWVmICAgIEVuYWJsZSBzcGVjaWZpZWQgaW50ZXJydXB0LgorICoKKyAqICBAcGFyYW1baW5dICAgIHNkaCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNESCBtb2R1bGUuCisgKiAgQHBhcmFtW2luXSAgICB1MzJJbnRNYXNrICAgIEludGVycnVwdCB0eXBlIG1hc2s6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyZWYgU0RIX0lOVEVOX0JMS0RJRU5fTXNrIC8gXHJlZiBTREhfSU5URU5fQ1JDSUVOX01zayAvIFxyZWYgU0RIX0lOVEVOX0NESUVOX01zayAvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyZWYgU0RIX0lOVEVOX0NEU1JDX01zayAvIFxyZWYgU0RIX0lOVEVOX1JUT0lFTl9Nc2sgLyBccmVmIFNESF9JTlRFTl9ESVRPSUVOX01zayAvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyZWYgU0RIX0lOVEVOX1dLSUVOX01zaworICoKKyAqICBAcmV0dXJuICAgTm9uZS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBTREhfRU5BQkxFX0lOVChzZGgsIHUzMkludE1hc2spICAgICgoc2RoKS0+SU5URU4gfD0gKHUzMkludE1hc2spKQorCisvKioKKyAqICBAYnJpZWYgICAgRGlzYWJsZSBzcGVjaWZpZWQgaW50ZXJydXB0LgorICoKKyAqICBAcGFyYW1baW5dICAgIHNkaCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNESCBtb2R1bGUuCisgKiAgQHBhcmFtW2luXSAgICB1MzJJbnRNYXNrICAgIEludGVycnVwdCB0eXBlIG1hc2s6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyZWYgU0RIX0lOVEVOX0JMS0RJRU5fTXNrIC8gXHJlZiBTREhfSU5URU5fQ1JDSUVOX01zayAvIFxyZWYgU0RIX0lOVEVOX0NESUVOX01zayAvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyZWYgU0RIX0lOVEVOX1JUT0lFTl9Nc2sgLyBccmVmIFNESF9JTlRFTl9ESVRPSUVOX01zayAvIFxyZWYgU0RIX0lOVEVOX1dLSUVOX01zayAvIFxyZWYgU0RIX0lOVEVOX0NEU1JDX01zayAvCisgKgorICogIEByZXR1cm4gICBOb25lLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIFNESF9ESVNBQkxFX0lOVChzZGgsIHUzMkludE1hc2spICAgICgoc2RoKS0+SU5URU4gJj0gfih1MzJJbnRNYXNrKSkKKworLyoqCisgKiAgQGJyaWVmICAgIEdldCBzcGVjaWZpZWQgaW50ZXJydXB0IGZsYWcvc3RhdHVzLgorICoKKyAqICBAcGFyYW1baW5dICAgIHNkaCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNESCBtb2R1bGUuCisgKiAgQHBhcmFtW2luXSAgICB1MzJJbnRNYXNrICAgIEludGVycnVwdCB0eXBlIG1hc2s6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyZWYgU0RIX0lOVFNUU19CTEtESUZfTXNrIC8gXHJlZiBTREhfSU5UU1RTX0NSQ0lGX01zayAvIFxyZWYgU0RIX0lOVFNUU19DUkM3X01zayAvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyZWYgU0RIX0lOVFNUU19DUkMxNl9Nc2sgLyBccmVmIFNESF9JTlRTVFNfQ1JDU1RTX01zayAvIFxyZWYgU0RIX0lOVFNUU19EQVQwU1RTX01zayAvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyZWYgU0RIX0lOVFNUU19DRElGX01zayAvIFxyZWYgU0RIX0lOVFNUU19SVE9JRl9Nc2sgLworICogICAgICAgICAgICAgICAgICAgICAgICAgICBccmVmIFNESF9JTlRTVFNfRElUT0lGX01zayAvIFxyZWYgU0RIX0lOVFNUU19DRFNUU19Nc2sgLworICogICAgICAgICAgICAgICAgICAgICAgICAgICBccmVmIFNESF9JTlRTVFNfREFUMVNUU19Nc2sKKyAqCisgKgorICogIEByZXR1cm4gIDAgPSBUaGUgc3BlY2lmaWVkIGludGVycnVwdCBpcyBub3QgaGFwcGVuZWQuCisgKiAgICAgICAgICAgMSA9IFRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IGlzIGhhcHBlbmVkLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIFNESF9HRVRfSU5UX0ZMQUcoc2RoLCB1MzJJbnRNYXNrKSAoKChzZGgpLT5JTlRTVFMgJiAodTMySW50TWFzaykpPzE6MCkKKworCisvKioKKyAqICBAYnJpZWYgICAgQ2xlYXIgc3BlY2lmaWVkIGludGVycnVwdCBmbGFnL3N0YXR1cy4KKyAqCisgKiAgQHBhcmFtW2luXSAgICBzZGggICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTREggbW9kdWxlLgorICogIEBwYXJhbVtpbl0gICAgdTMySW50TWFzayAgICBJbnRlcnJ1cHQgdHlwZSBtYXNrOgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBccmVmIFNESF9JTlRTVFNfQkxLRElGX01zayAvIFxyZWYgU0RIX0lOVFNUU19DUkNJRl9Nc2sgLyBccmVmIFNESF9JTlRTVFNfQ0RJRl9Nc2sgLworICogICAgICAgICAgICAgICAgICAgICAgICAgICBccmVmIFNESF9JTlRTVFNfUlRPSUZfTXNrIC8gXHJlZiBTREhfSU5UU1RTX0RJVE9JRl9Nc2sKKyAqCisgKgorICogIEByZXR1cm4gICBOb25lLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIFNESF9DTFJfSU5UX0ZMQUcoc2RoLCB1MzJJbnRNYXNrKSAoKHNkaCktPklOVFNUUyA9ICh1MzJJbnRNYXNrKSkKKworCisvKioKKyAqICBAYnJpZWYgICAgQ2hlY2sgU0QgQ2FyZCBpbnNlcnRlZCBvciByZW1vdmVkLgorICoKKyAqICBAcGFyYW1baW5dICAgIHNkaCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNESCBtb2R1bGUuCisgKgorICogIEByZXR1cm4gICAxOiBDYXJkIGluc2VydGVkLgorICogICAgICAgICAgICAwOiBDYXJkIHJlbW92ZWQuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgU0RIX0lTX0NBUkRfUFJFU0VOVChzZGgpICgoKChzZGgpID09IFNESDApfHwoKHNkaCkgPT0gU0RIMF9OUykpPyBTRDAuSXNDYXJkSW5zZXJ0IDogMCkKKworLyoqCisgKiAgQGJyaWVmICAgIEdldCBTRCBDYXJkIGNhcGFjaXR5LgorICoKKyAqICBAcGFyYW1baW5dICAgIHNkaCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNESCBtb2R1bGUuCisgKgorICogIEByZXR1cm4gICBTRCBDYXJkIGNhcGFjaXR5LiAodW5pdDogS0J5dGUpCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgU0RIX0dFVF9DQVJEX0NBUEFDSVRZKHNkaCkgICgoKChzZGgpID09IFNESDApfHwoKHNkaCkgPT0gU0RIMF9OUykpPyBTRDAuZGlza1NpemUgOiAwKQorCitleHRlcm4gdWludDhfdCBnX3U4UjNGbGFnOworZXh0ZXJuIHVpbnQ4X3Qgdm9sYXRpbGUgZ191OFNERGF0YVJlYWR5RmxhZzsKK2V4dGVybiBpbnQgICAgIFNESF9vazsKKwordm9pZCBTREhfT3BlbihTREhfVCAqc2RoLCB1aW50MzJfdCB1MzJDYXJkRGV0U3JjKTsKK3VpbnQzMl90IFNESF9Qcm9iZShTREhfVCAqc2RoKTsKK3VpbnQzMl90IFNESF9SZWFkKFNESF9UICpzZGgsIHVpbnQ4X3QgKnB1OEJ1ZkFkZHIsIHVpbnQzMl90IHUzMlN0YXJ0U2VjLCB1aW50MzJfdCB1MzJTZWNDb3VudCk7Cit1aW50MzJfdCBTREhfV3JpdGUoU0RIX1QgKnNkaCwgdWludDhfdCAqcHU4QnVmQWRkciwgdWludDMyX3QgdTMyU3RhcnRTZWMsIHVpbnQzMl90IHUzMlNlY0NvdW50KTsKKwordWludDMyX3QgU0RIX0NhcmREZXRlY3Rpb24oU0RIX1QgKnNkaCk7Cit2b2lkIFNESF9PcGVuX0Rpc2soU0RIX1QgKnNkaCwgdWludDMyX3QgdTMyQ2FyZERldFNyYyk7Cit2b2lkIFNESF9DbG9zZV9EaXNrKFNESF9UICpzZGgpOworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNESF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTREhfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAgLyogZW5kIG9mIF9fU0RIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvc3BpLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjRhN2UwCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvc3BpLmgKQEAgLTAsMCArMSw1NjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzcGkuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIFNQSSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1NQSV9IX18KKyNkZWZpbmUgX19TUElfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTUElfRHJpdmVyIFNQSSBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTUElfRVhQT1JURURfQ09OU1RBTlRTIFNQSSBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKyNkZWZpbmUgU1BJX01PREVfMCAgICAgICAgKFNQSV9DVExfVFhORUdfTXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtQT0w9MDsgUlhORUc9MDsgVFhORUc9MSAqLworI2RlZmluZSBTUElfTU9ERV8xICAgICAgICAoU1BJX0NUTF9SWE5FR19Nc2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS1BPTD0wOyBSWE5FRz0xOyBUWE5FRz0wICovCisjZGVmaW5lIFNQSV9NT0RFXzIgICAgICAgIChTUElfQ1RMX0NMS1BPTF9Nc2sgfCBTUElfQ1RMX1JYTkVHX01zaykgICAgICAgIC8qITwgQ0xLUE9MPTE7IFJYTkVHPTE7IFRYTkVHPTAgKi8KKyNkZWZpbmUgU1BJX01PREVfMyAgICAgICAgKFNQSV9DVExfQ0xLUE9MX01zayB8IFNQSV9DVExfVFhORUdfTXNrKSAgICAgICAgLyohPCBDTEtQT0w9MTsgUlhORUc9MDsgVFhORUc9MSAqLworCisjZGVmaW5lIFNQSV9TTEFWRSAgICAgICAgIChTUElfQ1RMX1NMQVZFX01zaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IGFzIHNsYXZlICovCisjZGVmaW5lIFNQSV9NQVNURVIgICAgICAgICgweDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IGFzIG1hc3RlciAqLworCisjZGVmaW5lIFNQSV9TUyAgICAgICAgICAgICAgICAoU1BJX1NTQ1RMX1NTX01zaykgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IFNTICovCisjZGVmaW5lIFNQSV9TU19BQ1RJVkVfSElHSCAgICAoU1BJX1NTQ1RMX1NTQUNUUE9MX01zaykgICAgICAgICAgICAgICAgICAgIC8qITwgU1MgYWN0aXZlIGhpZ2ggKi8KKyNkZWZpbmUgU1BJX1NTX0FDVElWRV9MT1cgICAgICgweDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUyBhY3RpdmUgbG93ICovCisKKy8qIFNQSSBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSBTUElfVU5JVF9JTlRfTUFTSyAgICAgICAgICAgICAgICAoMHgwMDFVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJX1NTQUNUX0lOVF9NQVNLICAgICAgICAgICAgICAgKDB4MDAyVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGFjdGl2ZSBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBTUElfU1NJTkFDVF9JTlRfTUFTSyAgICAgICAgICAgICAoMHgwMDRVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaW5hY3RpdmUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJX1NMVlVSX0lOVF9NQVNLICAgICAgICAgICAgICAgKDB4MDA4VUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTbGF2ZSB1bmRlciBydW4gaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJX1NMVkJFX0lOVF9NQVNLICAgICAgICAgICAgICAgKDB4MDEwVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTbGF2ZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJX1RYVUZfSU5UX01BU0sgICAgICAgICAgICAgICAgKDB4MDQwVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTbGF2ZSBUWCB1bmRlcmZsb3cgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSyAgICAgICAgICAgKDB4MDgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGSUZPIFRYIHRocmVzaG9sZCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBTUElfRklGT19SWFRIX0lOVF9NQVNLICAgICAgICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZJRk8gUlggdGhyZXNob2xkIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFNQSV9GSUZPX1JYT1ZfSU5UX01BU0sgICAgICAgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRklGTyBSWCBvdmVycnVuIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFNQSV9GSUZPX1JYVE9fSU5UX01BU0sgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRklGTyBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgbWFzayAqLworCisvKiBTUEkgU3RhdHVzIE1hc2sgKi8KKyNkZWZpbmUgU1BJX0JVU1lfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MDFVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCdXN5IHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFNQSV9SWF9FTVBUWV9NQVNLICAgICAgICAgICAgICAgICgweDAyVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlggZW1wdHkgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgU1BJX1JYX0ZVTExfTUFTSyAgICAgICAgICAgICAgICAgKDB4MDRVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWCBmdWxsIHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFNQSV9UWF9FTVBUWV9NQVNLICAgICAgICAgICAgICAgICgweDA4VUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFggZW1wdHkgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgU1BJX1RYX0ZVTExfTUFTSyAgICAgICAgICAgICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWCBmdWxsIHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFNQSV9UWFJYX1JFU0VUX01BU0sgICAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFggb3IgUlggcmVzZXQgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgU1BJX1NQSUVOX1NUU19NQVNLICAgICAgICAgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElFTiBzdGF0dXMgbWFzayAqLworI2RlZmluZSBTUElfU1NMSU5FX1NUU19NQVNLICAgICAgICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSXhfU1MgbGluZSBzdGF0dXMgbWFzayAqLworCisKKy8qIEkyUyBEYXRhIFdpZHRoICovCisjZGVmaW5lIFNQSUkyU19EQVRBQklUXzggICAgICAgICAgICgwVUwgPDwgU1BJX0kyU0NUTF9XRFdJRFRIX1BvcykgICAgICAgIC8qITwgSTJTIGRhdGEgd2lkdGggaXMgOC1iaXQgKi8KKyNkZWZpbmUgU1BJSTJTX0RBVEFCSVRfMTYgICAgICAgICAgKDFVTCA8PCBTUElfSTJTQ1RMX1dEV0lEVEhfUG9zKSAgICAgICAgLyohPCBJMlMgZGF0YSB3aWR0aCBpcyAxNi1iaXQgKi8KKyNkZWZpbmUgU1BJSTJTX0RBVEFCSVRfMjQgICAgICAgICAgKDJVTCA8PCBTUElfSTJTQ1RMX1dEV0lEVEhfUG9zKSAgICAgICAgLyohPCBJMlMgZGF0YSB3aWR0aCBpcyAyNC1iaXQgKi8KKyNkZWZpbmUgU1BJSTJTX0RBVEFCSVRfMzIgICAgICAgICAgKDNVTCA8PCBTUElfSTJTQ1RMX1dEV0lEVEhfUG9zKSAgICAgICAgLyohPCBJMlMgZGF0YSB3aWR0aCBpcyAzMi1iaXQgKi8KKworLyogSTJTIEF1ZGlvIEZvcm1hdCAqLworI2RlZmluZSBTUElJMlNfTU9OTyAgICAgICAgICAgICAgICBTUElfSTJTQ1RMX01PTk9fTXNrICAgICAgICAgICAgICAgICAgICAvKiE8IE1vbmF1cmFsIGNoYW5uZWwgKi8KKyNkZWZpbmUgU1BJSTJTX1NURVJFTyAgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGVyZW8gY2hhbm5lbCAqLworCisvKiBJMlMgRGF0YSBGb3JtYXQgKi8KKyNkZWZpbmUgU1BJSTJTX0ZPUk1BVF9JMlMgICAgICAgICAgKDBVTCA8PCBTUElfSTJTQ1RMX0ZPUk1BVF9Qb3MpICAgICAgICAgLyohPCBJMlMgZGF0YSBmb3JtYXQgKi8KKyNkZWZpbmUgU1BJSTJTX0ZPUk1BVF9NU0IgICAgICAgICAgKDFVTCA8PCBTUElfSTJTQ1RMX0ZPUk1BVF9Qb3MpICAgICAgICAgLyohPCBNU0IganVzdGlmaWVkIGRhdGEgZm9ybWF0ICovCisjZGVmaW5lIFNQSUkyU19GT1JNQVRfUENNQSAgICAgICAgICgyVUwgPDwgU1BJX0kyU0NUTF9GT1JNQVRfUG9zKSAgICAgICAgIC8qITwgUENNIG1vZGUgQSBkYXRhIGZvcm1hdCAqLworI2RlZmluZSBTUElJMlNfRk9STUFUX1BDTUIgICAgICAgICAoM1VMIDw8IFNQSV9JMlNDVExfRk9STUFUX1BvcykgICAgICAgICAvKiE8IFBDTSBtb2RlIEIgZGF0YSBmb3JtYXQgKi8KKworLyogSTJTIE9wZXJhdGlvbiBtb2RlICovCisjZGVmaW5lIFNQSUkyU19NT0RFX1NMQVZFICAgICAgICAgIFNQSV9JMlNDVExfU0xBVkVfTXNrICAgICAgICAgICAgICAgICAgIC8qITwgQXMgc2xhdmUgbW9kZSAqLworI2RlZmluZSBTUElJMlNfTU9ERV9NQVNURVIgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFzIG1hc3RlciBtb2RlICovCisKKy8qIEkyUyBUWCBGSUZPIFRocmVzaG9sZCAqLworI2RlZmluZSBTUElJMlNfRklGT19UWF9MRVZFTF9XT1JEXzAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyAwIHdvcmQgKi8KKyNkZWZpbmUgU1BJSTJTX0ZJRk9fVFhfTEVWRUxfV09SRF8xICAgICgxVUwgPDwgU1BJX0ZJRk9DVExfVFhUSF9Qb3MpICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgMSB3b3JkICovCisjZGVmaW5lIFNQSUkyU19GSUZPX1RYX0xFVkVMX1dPUkRfMiAgICAoMlVMIDw8IFNQSV9GSUZPQ1RMX1RYVEhfUG9zKSAgICAgIC8qITwgVFggdGhyZXNob2xkIGlzIDIgd29yZHMgKi8KKyNkZWZpbmUgU1BJSTJTX0ZJRk9fVFhfTEVWRUxfV09SRF8zICAgICgzVUwgPDwgU1BJX0ZJRk9DVExfVFhUSF9Qb3MpICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgMyB3b3JkcyAqLworLyogSTJTIFJYIEZJRk8gVGhyZXNob2xkICovCisjZGVmaW5lIFNQSUkyU19GSUZPX1JYX0xFVkVMX1dPUkRfMSAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDEgd29yZCAqLworI2RlZmluZSBTUElJMlNfRklGT19SWF9MRVZFTF9XT1JEXzIgICAgKDFVTCA8PCBTUElfRklGT0NUTF9SWFRIX1BvcykgICAgICAvKiE8IFJYIHRocmVzaG9sZCBpcyAyIHdvcmRzICovCisjZGVmaW5lIFNQSUkyU19GSUZPX1JYX0xFVkVMX1dPUkRfMyAgICAoMlVMIDw8IFNQSV9GSUZPQ1RMX1JYVEhfUG9zKSAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDMgd29yZHMgKi8KKyNkZWZpbmUgU1BJSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF80ICAgICgzVUwgPDwgU1BJX0ZJRk9DVExfUlhUSF9Qb3MpICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgNCB3b3JkcyAqLworCisvKiBJMlMgUmVjb3JkIENoYW5uZWwgKi8KKyNkZWZpbmUgU1BJSTJTX01PTk9fUklHSFQgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWNvcmQgbW9ubyByaWdodCBjaGFubmVsICovCisjZGVmaW5lIFNQSUkyU19NT05PX0xFRlQgICAgICAgICAgIFNQSV9JMlNDVExfUlhMQ0hfTXNrICAgICAgICAgICAgICAgICAgIC8qITwgUmVjb3JkIG1vbm8gbGVmdCBjaGFubmVsICovCisKKy8qIEkyUyBDaGFubmVsICovCisjZGVmaW5lIFNQSUkyU19SSUdIVCAgICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VsZWN0IHJpZ2h0IGNoYW5uZWwgKi8KKyNkZWZpbmUgU1BJSTJTX0xFRlQgICAgICAgICAgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZWxlY3QgbGVmdCBjaGFubmVsICovCisKKy8qIEkyUyBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSBTUElJMlNfRklGT19UWFRIX0lOVF9NQVNLICAgICAgICAgICAoMHgwMVVMKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRYIEZJRk8gdGhyZXNob2xkIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFNQSUkyU19GSUZPX1JYVEhfSU5UX01BU0sgICAgICAgICAgICgweDAyVUwpICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlggRklGTyB0aHJlc2hvbGQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJSTJTX0ZJRk9fUlhPVl9JTlRfTUFTSyAgICAgICAgICAgKDB4MDRVTCkgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWCBGSUZPIG92ZXJydW4gaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJSTJTX0ZJRk9fUlhUT19JTlRfTUFTSyAgICAgICAgICAgKDB4MDhVTCkgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWCBGSUZPIHRpbWUtb3V0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFNQSUkyU19UWFVGX0lOVF9NQVNLICAgICAgICAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFggRklGTyB1bmRlcmZsb3cgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJSTJTX1JJR0hUX1pDX0lOVF9NQVNLICAgICAgICAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAgICAgLyohPCBSaWdodCBjaGFubmVsIHplcm8gY3Jvc3MgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJSTJTX0xFRlRfWkNfSU5UX01BU0sgICAgICAgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAgICAgLyohPCBMZWZ0IGNoYW5uZWwgemVybyBjcm9zcyBpbnRlcnJ1cHQgbWFzayAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNQSV9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgU1BJX0VYUE9SVEVEX0ZVTkNUSU9OUyBTUEkgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciB0aGUgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgV3JpdGUgMSB0byBVTklUSUYgYml0IG9mIFNQSV9TVEFUVVMgcmVnaXN0ZXIgdG8gY2xlYXIgdGhlIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IGZsYWcuCisgICovCisjZGVmaW5lIFNQSV9DTFJfVU5JVF9UUkFOU19JTlRfRkxBRyhzcGkpICAgKCAoc3BpKS0+U1RBVFVTID0gU1BJX1NUQVRVU19VTklUSUZfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgVHJpZ2dlciBSWCBQRE1BIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgUlhQRE1BRU4gYml0IG9mIFNQSV9QRE1BQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBSWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBTUElfVFJJR0dFUl9SWF9QRE1BKHNwaSkgICAoIChzcGkpLT5QRE1BQ1RMIHw9IFNQSV9QRE1BQ1RMX1JYUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIFRyaWdnZXIgVFggUERNQSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgU2V0IFRYUERNQUVOIGJpdCBvZiBTUElfUERNQUNUTCByZWdpc3RlciB0byBlbmFibGUgVFggUERNQSB0cmFuc2ZlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgU1BJX1RSSUdHRVJfVFhfUERNQShzcGkpICAgKCAoc3BpKS0+UERNQUNUTCB8PSBTUElfUERNQUNUTF9UWFBETUFFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUcmlnZ2VyIFRYIGFuZCBSWCBQRE1BIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgVFhQRE1BRU4gYml0IGFuZCBSWFBETUFFTiBiaXQgb2YgU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIFRYIGFuZCBSWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBTUElfVFJJR0dFUl9UWF9SWF9QRE1BKHNwaSkgICAoIChzcGkpLT5QRE1BQ1RMIHw9IChTUElfUERNQUNUTF9UWFBETUFFTl9Nc2sgfCBTUElfUERNQUNUTF9SWFBETUFFTl9Nc2spICkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBSWCBQRE1BIHRyYW5zZmVyLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBSWFBETUFFTiBiaXQgb2YgU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBSWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBTUElfRElTQUJMRV9SWF9QRE1BKHNwaSkgKCAoc3BpKS0+UERNQUNUTCAmPSB+U1BJX1BETUFDVExfUlhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBUWCBQRE1BIHRyYW5zZmVyLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBUWFBETUFFTiBiaXQgb2YgU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBUWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBTUElfRElTQUJMRV9UWF9QRE1BKHNwaSkgKCAoc3BpKS0+UERNQUNUTCAmPSB+U1BJX1BETUFDVExfVFhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBUWCBhbmQgUlggUERNQSB0cmFuc2Zlci4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgQ2xlYXIgVFhQRE1BRU4gYml0IGFuZCBSWFBETUFFTiBiaXQgb2YgU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBUWCBhbmQgUlggUERNQSB0cmFuc2ZlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgU1BJX0RJU0FCTEVfVFhfUlhfUERNQShzcGkpICAgKCAoc3BpKS0+UERNQUNUTCAmPSB+KFNQSV9QRE1BQ1RMX1RYUERNQUVOX01zayB8IFNQSV9QRE1BQ1RMX1JYUERNQUVOX01zaykgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgdGhlIGNvdW50IG9mIGF2YWlsYWJsZSBkYXRhIGluIFJYIEZJRk8uCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBUaGUgY291bnQgb2YgYXZhaWxhYmxlIGRhdGEgaW4gUlggRklGTy4KKyAgKiBAZGV0YWlscyAgICBSZWFkIFJYQ05UIChTUElfU1RBVFVTWzI3OjI0XSkgdG8gZ2V0IHRoZSBjb3VudCBvZiBhdmFpbGFibGUgZGF0YSBpbiBSWCBGSUZPLgorICAqLworI2RlZmluZSBTUElfR0VUX1JYX0ZJRk9fQ09VTlQoc3BpKSAgICggKChzcGkpLT5TVEFUVVMgJiBTUElfU1RBVFVTX1JYQ05UX01zaykgPj4gU1BJX1NUQVRVU19SWENOVF9Qb3MgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgdGhlIFJYIEZJRk8gZW1wdHkgZmxhZy4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR2YWwgICAgIDAgUlggRklGTyBpcyBub3QgZW1wdHkuCisgICogQHJldHZhbCAgICAgMSBSWCBGSUZPIGlzIGVtcHR5LgorICAqIEBkZXRhaWxzICAgIFJlYWQgUlhFTVBUWSBiaXQgb2YgU1BJX1NUQVRVUyByZWdpc3RlciB0byBnZXQgdGhlIFJYIEZJRk8gZW1wdHkgZmxhZy4KKyAgKi8KKyNkZWZpbmUgU1BJX0dFVF9SWF9GSUZPX0VNUFRZX0ZMQUcoc3BpKSAgICggKChzcGkpLT5TVEFUVVMgJiBTUElfU1RBVFVTX1JYRU1QVFlfTXNrKSA+PiBTUElfU1RBVFVTX1JYRU1QVFlfUG9zICkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHRoZSBUWCBGSUZPIGVtcHR5IGZsYWcuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dmFsICAgICAwIFRYIEZJRk8gaXMgbm90IGVtcHR5LgorICAqIEByZXR2YWwgICAgIDEgVFggRklGTyBpcyBlbXB0eS4KKyAgKiBAZGV0YWlscyAgICBSZWFkIFRYRU1QVFkgYml0IG9mIFNQSV9TVEFUVVMgcmVnaXN0ZXIgdG8gZ2V0IHRoZSBUWCBGSUZPIGVtcHR5IGZsYWcuCisgICovCisjZGVmaW5lIFNQSV9HRVRfVFhfRklGT19FTVBUWV9GTEFHKHNwaSkgICAoICgoc3BpKS0+U1RBVFVTICYgU1BJX1NUQVRVU19UWEVNUFRZX01zaykgPj4gU1BJX1NUQVRVU19UWEVNUFRZX1BvcyApCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCB0aGUgVFggRklGTyBmdWxsIGZsYWcuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dmFsICAgICAwIFRYIEZJRk8gaXMgbm90IGZ1bGwuCisgICogQHJldHZhbCAgICAgMSBUWCBGSUZPIGlzIGZ1bGwuCisgICogQGRldGFpbHMgICAgUmVhZCBUWEZVTEwgYml0IG9mIFNQSV9TVEFUVVMgcmVnaXN0ZXIgdG8gZ2V0IHRoZSBUWCBGSUZPIGZ1bGwgZmxhZy4KKyAgKi8KKyNkZWZpbmUgU1BJX0dFVF9UWF9GSUZPX0ZVTExfRkxBRyhzcGkpICAgKCAoKHNwaSktPlNUQVRVUyAmIFNQSV9TVEFUVVNfVFhGVUxMX01zaykgPj4gU1BJX1NUQVRVU19UWEZVTExfUG9zICkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHRoZSBkYXR1bSByZWFkIGZyb20gUlggcmVnaXN0ZXIuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBEYXRhIGluIFJYIHJlZ2lzdGVyLgorICAqIEBkZXRhaWxzICAgIFJlYWQgU1BJX1JYIHJlZ2lzdGVyIHRvIGdldCB0aGUgcmVjZWl2ZWQgZGF0dW0uCisgICovCisjZGVmaW5lIFNQSV9SRUFEX1JYKHNwaSkgICAoIChzcGkpLT5SWCApCisKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIGRhdHVtIHRvIFRYIHJlZ2lzdGVyLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyVHhEYXRhIFRoZSBkYXR1bSB3aGljaCB1c2VyIGF0dGVtcHQgdG8gdHJhbnNmZXIgdGhyb3VnaCBTUEkgYnVzLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgV3JpdGUgdTMyVHhEYXRhIHRvIFNQSV9UWCByZWdpc3Rlci4KKyAgKi8KKyNkZWZpbmUgU1BJX1dSSVRFX1RYKHNwaSwgdTMyVHhEYXRhKSAgICggKHNwaSktPlRYID0gKHUzMlR4RGF0YSkgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgU1BJeF9TUyBwaW4gdG8gaGlnaCBzdGF0ZS4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgRGlzYWJsZSBhdXRvbWF0aWMgc2xhdmUgc2VsZWN0aW9uIGZ1bmN0aW9uIGFuZCBzZXQgU1BJeF9TUyBwaW4gdG8gaGlnaCBzdGF0ZS4KKyAgKi8KKyNkZWZpbmUgU1BJX1NFVF9TU19ISUdIKHNwaSkgICAoIChzcGkpLT5TU0NUTCA9ICgoc3BpKS0+U1NDVEwgJiAoflNQSV9TU0NUTF9BVVRPU1NfTXNrKSkgfCAoU1BJX1NTQ1RMX1NTQUNUUE9MX01zayB8IFNQSV9TU0NUTF9TU19Nc2spICkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFNQSXhfU1MgcGluIHRvIGxvdyBzdGF0ZS4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgRGlzYWJsZSBhdXRvbWF0aWMgc2xhdmUgc2VsZWN0aW9uIGZ1bmN0aW9uIGFuZCBzZXQgU1BJeF9TUyBwaW4gdG8gbG93IHN0YXRlLgorICAqLworI2RlZmluZSBTUElfU0VUX1NTX0xPVyhzcGkpICAgKCAoc3BpKS0+U1NDVEwgPSAoKHNwaSktPlNTQ1RMICYgKH4oU1BJX1NTQ1RMX0FVVE9TU19Nc2sgfCBTUElfU1NDVExfU1NBQ1RQT0xfTXNrKSkpIHwgU1BJX1NTQ1RMX1NTX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBCeXRlIFJlb3JkZXIgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIEVuYWJsZSBCeXRlIFJlb3JkZXIgZnVuY3Rpb24uIFRoZSBzdXNwZW5kIGludGVydmFsIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgU1VTUElUViAoU1BJX0NUTFs3OjRdKS4KKyAgKi8KKyNkZWZpbmUgU1BJX0VOQUJMRV9CWVRFX1JFT1JERVIoc3BpKSAgICggKHNwaSktPkNUTCB8PSAgU1BJX0NUTF9SRU9SREVSX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgQnl0ZSBSZW9yZGVyIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBSRU9SREVSIGJpdCBmaWVsZCBvZiBTUElfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgQnl0ZSBSZW9yZGVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBTUElfRElTQUJMRV9CWVRFX1JFT1JERVIoc3BpKSAgICggKHNwaSktPkNUTCAmPSB+U1BJX0NUTF9SRU9SREVSX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCB0aGUgbGVuZ3RoIG9mIHN1c3BlbmQgaW50ZXJ2YWwuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJTdXNwQ3ljbGUgRGVjaWRlcyB0aGUgbGVuZ3RoIG9mIHN1c3BlbmQgaW50ZXJ2YWwuIEl0IGNvdWxkIGJlIDAgfiAxNS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCB0aGUgbGVuZ3RoIG9mIHN1c3BlbmQgaW50ZXJ2YWwgYWNjb3JkaW5nIHRvIHUzMlN1c3BDeWNsZS4KKyAgKiAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHN1c3BlbmQgaW50ZXJ2YWwgaXMgKCh1MzJTdXNwQ3ljbGUgKyAwLjUpICogdGhlIGxlbmd0aCBvZiBvbmUgU1BJIGJ1cyBjbG9jayBjeWNsZSkuCisgICovCisjZGVmaW5lIFNQSV9TRVRfU1VTUEVORF9DWUNMRShzcGksIHUzMlN1c3BDeWNsZSkgICAoIChzcGkpLT5DVEwgPSAoKHNwaSktPkNUTCAmIH5TUElfQ1RMX1NVU1BJVFZfTXNrKSB8ICgodTMyU3VzcEN5Y2xlKSA8PCBTUElfQ1RMX1NVU1BJVFZfUG9zKSApCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCB0aGUgU1BJIHRyYW5zZmVyIHNlcXVlbmNlIHdpdGggTFNCIGZpcnN0LgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgTFNCIGJpdCBvZiBTUElfQ1RMIHJlZ2lzdGVyIHRvIHNldCB0aGUgU1BJIHRyYW5zZmVyIHNlcXVlbmNlIHdpdGggTFNCIGZpcnN0LgorICAqLworI2RlZmluZSBTUElfU0VUX0xTQl9GSVJTVChzcGkpICAgKCAoc3BpKS0+Q1RMIHw9IFNQSV9DVExfTFNCX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCB0aGUgU1BJIHRyYW5zZmVyIHNlcXVlbmNlIHdpdGggTVNCIGZpcnN0LgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBMU0IgYml0IG9mIFNQSV9DVEwgcmVnaXN0ZXIgdG8gc2V0IHRoZSBTUEkgdHJhbnNmZXIgc2VxdWVuY2Ugd2l0aCBNU0IgZmlyc3QuCisgICovCisjZGVmaW5lIFNQSV9TRVRfTVNCX0ZJUlNUKHNwaSkgICAoIChzcGkpLT5DVEwgJj0gflNQSV9DVExfTFNCX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCB0aGUgZGF0YSB3aWR0aCBvZiBhIFNQSSB0cmFuc2FjdGlvbi4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMldpZHRoIFRoZSBiaXQgd2lkdGggb2Ygb25lIHRyYW5zYWN0aW9uLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgVGhlIGRhdGEgd2lkdGggY2FuIGJlIDggfiAzMiBiaXRzLgorICAqLworI2RlZmluZSBTUElfU0VUX0RBVEFfV0lEVEgoc3BpLCB1MzJXaWR0aCkgICAoIChzcGkpLT5DVEwgPSAoKHNwaSktPkNUTCAmIH5TUElfQ1RMX0RXSURUSF9Nc2spIHwgKCgodTMyV2lkdGgpICYgMHgxRikgPDwgU1BJX0NUTF9EV0lEVEhfUG9zKSApCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCB0aGUgU1BJIGJ1c3kgc3RhdGUuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dmFsICAgICAwIFNQSSBjb250cm9sbGVyIGlzIG5vdCBidXN5LgorICAqIEByZXR2YWwgICAgIDEgU1BJIGNvbnRyb2xsZXIgaXMgYnVzeS4KKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIHdpbGwgcmV0dXJuIHRoZSBidXN5IHN0YXRlIG9mIFNQSSBjb250cm9sbGVyLgorICAqLworI2RlZmluZSBTUElfSVNfQlVTWShzcGkpICAgKCAoKHNwaSktPlNUQVRVUyAmIFNQSV9TVEFUVVNfQlVTWV9Nc2spID4+IFNQSV9TVEFUVVNfQlVTWV9Qb3MgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgU1BJIGNvbnRyb2xsZXIuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBTUElFTiAoU1BJX0NUTFswXSkgdG8gZW5hYmxlIFNQSSBjb250cm9sbGVyLgorICAqLworI2RlZmluZSBTUElfRU5BQkxFKHNwaSkgICAoIChzcGkpLT5DVEwgfD0gU1BJX0NUTF9TUElFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFNQSSBjb250cm9sbGVyLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBTUElFTiAoU1BJX0NUTFswXSkgdG8gZGlzYWJsZSBTUEkgY29udHJvbGxlci4KKyAgKi8KKyNkZWZpbmUgU1BJX0RJU0FCTEUoc3BpKSAgICggKHNwaSktPkNUTCAmPSB+U1BJX0NUTF9TUElFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSB6ZXJvIGNyb3NzIGRldGVjdGlvbiBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJDaE1hc2sgVGhlIG1hc2sgZm9yIGxlZnQgb3IgcmlnaHQgY2hhbm5lbC4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSUkyU19SSUdIVAorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJSTJTX0xFRlQKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IFJaQ0VOIG9yIExaQ0VOIGJpdCBvZiBTUElfSTJTQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSB6ZXJvIGNyb3NzIGRldGVjdGlvbiBmdW5jdGlvbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNQSUkyU19FTkFCTEVfVFhfWkNEKFNQSV9UICppMnMsIHVpbnQzMl90IHUzMkNoTWFzaykKK3sKKyAgICBpZih1MzJDaE1hc2sgPT0gU1BJSTJTX1JJR0hUKQorICAgIHsKKyAgICAgICAgaTJzLT5JMlNDVEwgfD0gU1BJX0kyU0NUTF9SWkNFTl9Nc2s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGkycy0+STJTQ1RMIHw9IFNQSV9JMlNDVExfTFpDRU5fTXNrOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIHplcm8gY3Jvc3MgZGV0ZWN0aW9uIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkNoTWFzayBUaGUgbWFzayBmb3IgbGVmdCBvciByaWdodCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJSTJTX1JJR0hUCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfTEVGVAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBSWkNFTiBvciBMWkNFTiBiaXQgb2YgU1BJX0kyU0NUTCByZWdpc3RlciB0byBkaXNhYmxlIHplcm8gY3Jvc3MgZGV0ZWN0aW9uIGZ1bmN0aW9uLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU1BJSTJTX0RJU0FCTEVfVFhfWkNEKFNQSV9UICppMnMsIHVpbnQzMl90IHUzMkNoTWFzaykKK3sKKyAgICBpZih1MzJDaE1hc2sgPT0gU1BJSTJTX1JJR0hUKQorICAgIHsKKyAgICAgICAgaTJzLT5JMlNDVEwgJj0gflNQSV9JMlNDVExfUlpDRU5fTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpMnMtPkkyU0NUTCAmPSB+U1BJX0kyU0NUTF9MWkNFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBJMlMgVFggRE1BIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2V0IFRYUERNQUVOIGJpdCBvZiBTUElfUERNQUNUTCByZWdpc3RlciB0byB0cmFuc21pdCBkYXRhIHdpdGggUERNQS4KKyAgKi8KKyNkZWZpbmUgU1BJSTJTX0VOQUJMRV9UWERNQShpMnMpICAoIChpMnMpLT5QRE1BQ1RMIHw9IFNQSV9QRE1BQ1RMX1RYUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBJMlMgVFggRE1BIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgY2xlYXIgVFhQRE1BRU4gYml0IG9mIFNQSV9QRE1BQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgVFggRE1BIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBTUElJMlNfRElTQUJMRV9UWERNQShpMnMpICggKGkycyktPlBETUFDVEwgJj0gflNQSV9QRE1BQ1RMX1RYUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIEkyUyBSWCBETUEgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgUlhQRE1BRU4gYml0IG9mIFNQSV9QRE1BQ1RMIHJlZ2lzdGVyIHRvIHJlY2VpdmUgZGF0YSB3aXRoIFBETUEuCisgICovCisjZGVmaW5lIFNQSUkyU19FTkFCTEVfUlhETUEoaTJzKSAoIChpMnMpLT5QRE1BQ1RMIHw9IFNQSV9QRE1BQ1RMX1JYUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBJMlMgUlggRE1BIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgY2xlYXIgUlhQRE1BRU4gYml0IG9mIFNQSV9QRE1BQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgUlggRE1BIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBTUElJMlNfRElTQUJMRV9SWERNQShpMnMpICggKGkycyktPlBETUFDVEwgJj0gflNQSV9QRE1BQ1RMX1JYUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIEkyUyBUWCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBUWEVOIGJpdCBvZiBTUElfSTJTQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBJMlMgVFggZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSUkyU19FTkFCTEVfVFgoaTJzKSAoIChpMnMpLT5JMlNDVEwgfD0gU1BJX0kyU0NUTF9UWEVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBJMlMgVFggZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBUWEVOIGJpdCBvZiBTUElfSTJTQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgSTJTIFRYIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBTUElJMlNfRElTQUJMRV9UWChpMnMpICggKGkycyktPkkyU0NUTCAmPSB+U1BJX0kyU0NUTF9UWEVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIEkyUyBSWCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBSWEVOIGJpdCBvZiBTUElfSTJTQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBJMlMgUlggZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSUkyU19FTkFCTEVfUlgoaTJzKSAoIChpMnMpLT5JMlNDVEwgfD0gU1BJX0kyU0NUTF9SWEVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBJMlMgUlggZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBSWEVOIGJpdCBvZiBTUElfSTJTQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgSTJTIFJYIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBTUElJMlNfRElTQUJMRV9SWChpMnMpICggKGkycyktPkkyU0NUTCAmPSB+U1BJX0kyU0NUTF9SWEVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIFRYIE11dGUgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgTVVURSBiaXQgb2YgU1BJX0kyU0NUTCByZWdpc3RlciB0byBlbmFibGUgSTJTIFRYIG11dGUgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSUkyU19FTkFCTEVfVFhfTVVURShpMnMpICAoIChpMnMpLT5JMlNDVEwgfD0gU1BJX0kyU0NUTF9NVVRFX01zayApCisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBUWCBNdXRlIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgY2xlYXIgTVVURSBiaXQgb2YgU1BJX0kyU0NUTCByZWdpc3RlciB0byBkaXNhYmxlIEkyUyBUWCBtdXRlIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBTUElJMlNfRElTQUJMRV9UWF9NVVRFKGkycykgKCAoaTJzKS0+STJTQ1RMICY9IH5TUElfSTJTQ1RMX01VVEVfTXNrICkKKworLyoqCisgICogQGJyaWVmICBDbGVhciBUWCBGSUZPLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgY2xlYXIgVFggRklGTy4gVGhlIGludGVybmFsIFRYIEZJRk8gcG9pbnRlciB3aWxsIGJlIHJlc2V0IHRvIEZJRk8gc3RhcnQgcG9pbnQuCisgICovCisjZGVmaW5lIFNQSUkyU19DTFJfVFhfRklGTyhpMnMpICggKGkycyktPkZJRk9DVEwgfD0gU1BJX0ZJRk9DVExfVFhGQkNMUl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIENsZWFyIFJYIEZJRk8uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBSWCBGSUZPLiBUaGUgaW50ZXJuYWwgUlggRklGTyBwb2ludGVyIHdpbGwgYmUgcmVzZXQgdG8gRklGTyBzdGFydCBwb2ludC4KKyAgKi8KKyNkZWZpbmUgU1BJSTJTX0NMUl9SWF9GSUZPKGkycykgKCAoaTJzKS0+RklGT0NUTCB8PSBTUElfRklGT0NUTF9SWEZCQ0xSX01zayApCisKKy8qKgorICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSByZWNvcmRpbmcgc291cmNlIGNoYW5uZWwgd2hlbiBtb25vIG1vZGUgaXMgdXNlZC4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJDaCBsZWZ0IG9yIHJpZ2h0IGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgLSBccmVmIFNQSUkyU19NT05PX0xFRlQKKyAgKiAgICAgICAgICAgICAgICAtIFxyZWYgU1BJSTJTX01PTk9fUklHSFQKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHNlbGVjdHMgdGhlIHJlY29yZGluZyBzb3VyY2UgY2hhbm5lbCBvZiBtb25hdXJhbCBtb2RlLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU1BJSTJTX1NFVF9NT05PX1JYX0NIQU5ORUwoU1BJX1QgKmkycywgdWludDMyX3QgdTMyQ2gpCit7CisgICAgdTMyQ2ggPT0gU1BJSTJTX01PTk9fTEVGVCA/CisgICAgKGkycy0+STJTQ1RMIHw9IFNQSV9JMlNDVExfUlhMQ0hfTXNrKSA6CisgICAgKGkycy0+STJTQ1RMICY9IH5TUElfSTJTQ1RMX1JYTENIX01zayk7Cit9CisKKy8qKgorICAqIEBicmllZiAgV3JpdGUgZGF0YSB0byBJMlMgVFggRklGTy4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJEYXRhIFRoZSB2YWx1ZSB3cml0dGVuIHRvIFRYIEZJRk8uCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHdyaXRlIGEgdmFsdWUgdG8gVFggRklGTy4KKyAgKi8KKyNkZWZpbmUgU1BJSTJTX1dSSVRFX1RYX0ZJRk8oaTJzLCB1MzJEYXRhKSAgKCAoaTJzKS0+VFggPSAodTMyRGF0YSkgKQorCisvKioKKyAgKiBAYnJpZWYgIFJlYWQgUlggRklGTy4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBUaGUgdmFsdWUgcmVhZCBmcm9tIFJYIEZJRk8uCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIHZhbHVlIHJlYWQgZnJvbSBSWCBGSUZPLgorICAqLworI2RlZmluZSBTUElJMlNfUkVBRF9SWF9GSUZPKGkycykgKCAoaTJzKS0+UlggKQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzayBUaGUgbWFzayB2YWx1ZSBmb3IgYWxsIGludGVycnVwdCBmbGFncy4KKyAgKiBAcmV0dXJuIFRoZSBpbnRlcnJ1cHQgZmxhZ3Mgc3BlY2lmaWVkIGJ5IHRoZSB1MzJtYXNrIHBhcmFtZXRlci4KKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgcmV0dXJuIHRoZSBjb21iaW5hdGlvbiBpbnRlcnJ1cHQgZmxhZ3Mgb2YgU1BJX0kyU1NUUyByZWdpc3Rlci4gVGhlIGZsYWdzIGFyZSBzcGVjaWZpZWQgYnkgdGhlIHUzMm1hc2sgcGFyYW1ldGVyLgorICAqLworI2RlZmluZSBTUElJMlNfR0VUX0lOVF9GTEFHKGkycywgdTMyTWFzaykgKCAoaTJzKS0+STJTU1RTICYgKHUzMk1hc2spICkKKworLyoqCisgICogQGJyaWVmICBDbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzayBUaGUgbWFzayB2YWx1ZSBmb3IgYWxsIGludGVycnVwdCBmbGFncy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgY2xlYXIgdGhlIGludGVycnVwdCBmbGFncyBzcGVjaWZpZWQgYnkgdGhlIHUzMm1hc2sgcGFyYW1ldGVyLgorICBFeGNlcHQgVFggYW5kIFJYIEZJRk8gdGhyZXNob2xkIGludGVycnVwdCBmbGFncywgdGhlIG90aGVyIGludGVycnVwdCBmbGFncyBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXRzZWxmLgorICAqLworI2RlZmluZSBTUElJMlNfQ0xSX0lOVF9GTEFHKGkycywgdTMyTWFzaykgKCAoaTJzKS0+STJTU1RTID0gKHUzMk1hc2spICkKKworLyoqCisgICogQGJyaWVmICBHZXQgdHJhbnNtaXQgRklGTyBsZXZlbAorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIFRYIEZJRk8gbGV2ZWwKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIHdvcmRzIGluIFRYIEZJRk8uCisgICovCisjZGVmaW5lIFNQSUkyU19HRVRfVFhfRklGT19MRVZFTChpMnMpICggKChpMnMpLT5JMlNTVFMgJiBTUElfSTJTU1RTX1RYQ05UX01zaykgPj4gU1BJX0kyU1NUU19UWENOVF9Qb3MgKQorCisvKioKKyAgKiBAYnJpZWYgIEdldCByZWNlaXZlIEZJRk8gbGV2ZWwKKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBSWCBGSUZPIGxldmVsCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSB3b3JkcyBpbiBSWCBGSUZPLgorICAqLworI2RlZmluZSBTUElJMlNfR0VUX1JYX0ZJRk9fTEVWRUwoaTJzKSAoICgoaTJzKS0+STJTU1RTICYgU1BJX0kyU1NUU19SWENOVF9Nc2spID4+IFNQSV9JMlNTVFNfUlhDTlRfUG9zICkKKworLyogRnVuY3Rpb24gcHJvdG90eXBlIGRlY2xhcmF0aW9uICovCit1aW50MzJfdCBTUElfT3BlbihTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJNYXN0ZXJTbGF2ZSwgdWludDMyX3QgdTMyU1BJTW9kZSwgdWludDMyX3QgdTMyRGF0YVdpZHRoLCB1aW50MzJfdCB1MzJCdXNDbG9jayk7Cit2b2lkIFNQSV9DbG9zZShTUElfVCAqc3BpKTsKK3ZvaWQgU1BJX0NsZWFyUnhGSUZPKFNQSV9UICpzcGkpOwordm9pZCBTUElfQ2xlYXJUeEZJRk8oU1BJX1QgKnNwaSk7Cit2b2lkIFNQSV9EaXNhYmxlQXV0b1NTKFNQSV9UICpzcGkpOwordm9pZCBTUElfRW5hYmxlQXV0b1NTKFNQSV9UICpzcGksIHVpbnQzMl90IHUzMlNTUGluTWFzaywgdWludDMyX3QgdTMyQWN0aXZlTGV2ZWwpOwordWludDMyX3QgU1BJX1NldEJ1c0Nsb2NrKFNQSV9UICpzcGksIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKTsKK3ZvaWQgU1BJX1NldEZJRk8oU1BJX1QgKnNwaSwgdWludDMyX3QgdTMyVHhUaHJlc2hvbGQsIHVpbnQzMl90IHUzMlJ4VGhyZXNob2xkKTsKK3VpbnQzMl90IFNQSV9HZXRCdXNDbG9jayhTUElfVCAqc3BpKTsKK3ZvaWQgU1BJX0VuYWJsZUludChTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgU1BJX0Rpc2FibGVJbnQoU1BJX1QgKnNwaSwgdWludDMyX3QgdTMyTWFzayk7Cit1aW50MzJfdCBTUElfR2V0SW50RmxhZyhTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgU1BJX0NsZWFySW50RmxhZyhTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJNYXNrKTsKK3VpbnQzMl90IFNQSV9HZXRTdGF0dXMoU1BJX1QgKnNwaSwgdWludDMyX3QgdTMyTWFzayk7CisKK3VpbnQzMl90IFNQSUkyU19PcGVuKFNQSV9UICppMnMsIHVpbnQzMl90IHUzMk1hc3RlclNsYXZlLCB1aW50MzJfdCB1MzJTYW1wbGVSYXRlLCB1aW50MzJfdCB1MzJXb3JkV2lkdGgsIHVpbnQzMl90IHUzMkNoYW5uZWxzLCB1aW50MzJfdCB1MzJEYXRhRm9ybWF0KTsKK3ZvaWQgU1BJSTJTX0Nsb3NlKFNQSV9UICppMnMpOwordm9pZCBTUElJMlNfRW5hYmxlSW50KFNQSV9UICppMnMsIHVpbnQzMl90IHUzMk1hc2spOwordm9pZCBTUElJMlNfRGlzYWJsZUludChTUElfVCAqaTJzLCB1aW50MzJfdCB1MzJNYXNrKTsKK3VpbnQzMl90IFNQSUkyU19FbmFibGVNQ0xLKFNQSV9UICppMnMsIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKTsKK3ZvaWQgU1BJSTJTX0Rpc2FibGVNQ0xLKFNQSV9UICppMnMpOwordm9pZCBTUElJMlNfU2V0RklGTyhTUElfVCAqaTJzLCB1aW50MzJfdCB1MzJUeFRocmVzaG9sZCwgdWludDMyX3QgdTMyUnhUaHJlc2hvbGQpOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU1BJX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNQSV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fU1BJX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zeXMuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3N5cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NGRhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zeXMuaApAQCAtMCwwICsxLDMwOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBTWVMuaAorICogQHZlcnNpb24gIFYzCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIFN5c3RlbSBNYW5hZ2VyIChTWVMpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TWVNfSF9fCisjZGVmaW5lIF9fU1lTX0hfXworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU1lTX0RyaXZlciBTWVMgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU1lTX0VYUE9SVEVEX0NPTlNUQU5UUyBTWVMgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgTW9kdWxlIFJlc2V0IENvbnRyb2wgUmVzaXN0ZXIgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFBETUEwX1JTVCAgICgoMHgwVUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMF9QRE1BMFJTVF9Qb3MpICAgICAvKiE8IFBETUEwIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBFQklfUlNUICAgICAoKDB4MFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDBfRUJJUlNUX1BvcykgICAgICAgLyohPCBFQkkgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFVTQkhfUlNUICAgICgoMHgwVUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMF9VU0JIUlNUX1BvcykgICAgICAvKiE8IFVTQkggcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFNESDBfUlNUICAgICgoMHgwVUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMF9TREgwUlNUX1BvcykgICAgICAvKiE8IFNESDAgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIENSQ19SU1QgICAgICgoMHgwVUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMF9DUkNSU1RfUG9zKSAgICAgICAvKiE8IENSQyByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgQ1JQVF9SU1QgICAgKCgweDBVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QwX0NSUFRSU1RfUG9zKSAgICAgIC8qITwgQ1JQVCByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgUERNQTFfUlNUICAgKCgweDBVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QwX1BETUExUlNUX1BvcykgICAgIC8qITwgUERNQTEgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisKKyNkZWZpbmUgR1BJT19SU1QgICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX0dQSU9SU1RfUG9zKSAgICAgIC8qITwgR1BJTyByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgVE1SMF9SU1QgICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX1RNUjBSU1RfUG9zKSAgICAgIC8qITwgVE1SMCByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgVE1SMV9SU1QgICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX1RNUjFSU1RfUG9zKSAgICAgIC8qITwgVE1SMSByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgVE1SMl9SU1QgICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX1RNUjJSU1RfUG9zKSAgICAgIC8qITwgVE1SMiByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgVE1SM19SU1QgICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX1RNUjNSU1RfUG9zKSAgICAgIC8qITwgVE1SMyByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgQUNNUDAxX1JTVCAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX0FDTVAwMVJTVF9Qb3MpICAgIC8qITwgQUNNUDAxIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBJMkMwX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfSTJDMFJTVF9Qb3MpICAgICAgLyohPCBJMkMwIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBJMkMxX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfSTJDMVJTVF9Qb3MpICAgICAgLyohPCBJMkMxIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBJMkMyX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfSTJDMlJTVF9Qb3MpICAgICAgLyohPCBJMkMyIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBRU1BJMF9SU1QgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfUVNQSTBSU1RfUG9zKSAgICAgLyohPCBRU1BJMCByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgU1BJMF9SU1QgICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX1NQSTBSU1RfUG9zKSAgICAgIC8qITwgU1BJMCByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgU1BJMV9SU1QgICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX1NQSTFSU1RfUG9zKSAgICAgIC8qITwgU1BJMSByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgU1BJMl9SU1QgICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX1NQSTJSU1RfUG9zKSAgICAgIC8qITwgU1BJMiByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgVUFSVDBfUlNUICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX1VBUlQwUlNUX1BvcykgICAgIC8qITwgVUFSVDAgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFVBUlQxX1JTVCAgICgoMHg0VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMV9VQVJUMVJTVF9Qb3MpICAgICAvKiE8IFVBUlQxIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBVQVJUMl9SU1QgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfVUFSVDJSU1RfUG9zKSAgICAgLyohPCBVQVJUMiByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgVUFSVDNfUlNUICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX1VBUlQzUlNUX1BvcykgICAgIC8qITwgVUFSVDMgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFVBUlQ0X1JTVCAgICgoMHg0VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMV9VQVJUNFJTVF9Qb3MpICAgICAvKiE8IFVBUlQ0IHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBVQVJUNV9SU1QgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfVUFSVDVSU1RfUG9zKSAgICAgLyohPCBVQVJUNSByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgQ0FOMF9SU1QgICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX0NBTjBSU1RfUG9zKSAgICAgIC8qITwgQ0FOMCByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgT1RHX1JTVCAgICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX09UR1JTVF9Qb3MpICAgICAgIC8qITwgT1RHIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBVU0JEX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfVVNCRFJTVF9Qb3MpICAgICAgLyohPCBVU0JEIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBFQURDX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfRUFEQ1JTVF9Qb3MpICAgICAgLyohPCBFQURDIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBJMlMwX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfSTJTMFJTVF9Qb3MpICAgICAgLyohPCBJMlMwIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBUUk5HX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfVFJOR1JTVF9Qb3MpICAgICAgLyohPCBUUk5HIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworCisjZGVmaW5lIFNDMF9SU1QgICAgICgoMHg4VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMl9TQzBSU1RfUG9zKSAgICAgICAvKiE8IFNDMCByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgU0MxX1JTVCAgICAgKCgweDhVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QyX1NDMVJTVF9Qb3MpICAgICAgIC8qITwgU0MxIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBTQzJfUlNUICAgICAoKDB4OFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDJfU0MyUlNUX1BvcykgICAgICAgLyohPCBTQzIgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFNQSTNfUlNUICAgICgoMHg4VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMl9TUEkzUlNUX1BvcykgICAgICAvKiE8IFNQSTMgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFVTQ0kwX1JTVCAgICgoMHg4VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMl9VU0NJMFJTVF9Qb3MpICAgICAvKiE8IFVTQ0kwIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBVU0NJMV9SU1QgICAoKDB4OFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDJfVVNDSTFSU1RfUG9zKSAgICAgLyohPCBVU0NJMSByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgVVNDSTJfUlNUICAgKCgweDhVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QyX1VTQ0kyUlNUX1BvcykgICAgIC8qITwgVVNDSTIgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIERBQ19SU1QgICAgICgoMHg4VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMl9EQUNSU1RfUG9zKSAgICAgICAvKiE8IERBQyByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgRVBXTTBfUlNUICAgKCgweDhVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QyX0VQV00wUlNUX1BvcykgICAgIC8qITwgRVBXTTAgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIEVQV00xX1JTVCAgICgoMHg4VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMl9FUFdNMVJTVF9Qb3MpICAgICAvKiE8IEVQV00xIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBCUFdNMF9SU1QgICAoKDB4OFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDJfQlBXTTBSU1RfUG9zKSAgICAgLyohPCBCUFdNMCByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgQlBXTTFfUlNUICAgKCgweDhVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QyX0JQV00xUlNUX1BvcykgICAgIC8qITwgQlBXTTEgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFFFSTBfUlNUICAgICgoMHg4VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMl9RRUkwUlNUX1BvcykgICAgICAvKiE8IFFFSTAgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFFFSTFfUlNUICAgICgoMHg4VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMl9RRUkxUlNUX1BvcykgICAgICAvKiE8IFFFSTEgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIEVDQVAwX1JTVCAgICgoMHg4VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMl9FQ0FQMFJTVF9Qb3MpICAgICAvKiE8IEVDQVAwIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBFQ0FQMV9SU1QgICAoKDB4OFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDJfRUNBUDFSU1RfUG9zKSAgICAgLyohPCBFQ0FQMSByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQnJvd24gT3V0IERldGVjdG9yIFRocmVzaG9sZCBWb2x0YWdlIFNlbGVjdGlvbiBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNZU19CT0RDVExfQk9EX1JTVF9FTiAgICAgICAgICAgKDFVTDw8U1lTX0JPRENUTF9CT0RSU1RFTl9Qb3MpICAgIC8qITwgQnJvd24tb3V0IFJlc2V0IEVuYWJsZSAqLworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRF9JTlRFUlJVUFRfRU4gICAgICgwVUw8PFNZU19CT0RDVExfQk9EUlNURU5fUG9zKSAgICAvKiE8IEJyb3duLW91dCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFNZU19CT0RDVExfQk9EVkxfM18wViAgICAgICAgICAgKDdVTDw8U1lTX0JPRENUTF9CT0RWTF9Qb3MpICAgICAgIC8qITwgU2V0dGluZyBCcm93biBPdXQgRGV0ZWN0b3IgVGhyZXNob2xkIFZvbHRhZ2UgYXMgMy4wViAqLworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRFZMXzJfOFYgICAgICAgICAgICg2VUw8PFNZU19CT0RDVExfQk9EVkxfUG9zKSAgICAgICAvKiE8IFNldHRpbmcgQnJvd24gT3V0IERldGVjdG9yIFRocmVzaG9sZCBWb2x0YWdlIGFzIDIuOFYgKi8KKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RWTF8yXzZWICAgICAgICAgICAoNVVMPDxTWVNfQk9EQ1RMX0JPRFZMX1BvcykgICAgICAgLyohPCBTZXR0aW5nIEJyb3duIE91dCBEZXRlY3RvciBUaHJlc2hvbGQgVm9sdGFnZSBhcyAyLjZWICovCisjZGVmaW5lIFNZU19CT0RDVExfQk9EVkxfMl80ViAgICAgICAgICAgKDRVTDw8U1lTX0JPRENUTF9CT0RWTF9Qb3MpICAgICAgIC8qITwgU2V0dGluZyBCcm93biBPdXQgRGV0ZWN0b3IgVGhyZXNob2xkIFZvbHRhZ2UgYXMgMi40ViAqLworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRFZMXzJfMlYgICAgICAgICAgICgzVUw8PFNZU19CT0RDVExfQk9EVkxfUG9zKSAgICAgICAvKiE8IFNldHRpbmcgQnJvd24gT3V0IERldGVjdG9yIFRocmVzaG9sZCBWb2x0YWdlIGFzIDIuMlYgKi8KKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RWTF8yXzBWICAgICAgICAgICAoMlVMPDxTWVNfQk9EQ1RMX0JPRFZMX1BvcykgICAgICAgLyohPCBTZXR0aW5nIEJyb3duIE91dCBEZXRlY3RvciBUaHJlc2hvbGQgVm9sdGFnZSBhcyAyLjBWICovCisjZGVmaW5lIFNZU19CT0RDVExfQk9EVkxfMV84ViAgICAgICAgICAgKDFVTDw8U1lTX0JPRENUTF9CT0RWTF9Qb3MpICAgICAgIC8qITwgU2V0dGluZyBCcm93biBPdXQgRGV0ZWN0b3IgVGhyZXNob2xkIFZvbHRhZ2UgYXMgMS44ViAqLworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRFZMXzFfNlYgICAgICAgICAgICgwVUw8PFNZU19CT0RDVExfQk9EVkxfUG9zKSAgICAgICAvKiE8IFNldHRpbmcgQnJvd24gT3V0IERldGVjdG9yIFRocmVzaG9sZCBWb2x0YWdlIGFzIDEuNlYgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgVlJFRkNUTCBjb25zdGFudCBkZWZpbml0aW9ucy4gKFdyaXRlLVByb3RlY3Rpb24gUmVnaXN0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNZU19WUkVGQ1RMX1ZSRUZfUElOICAgICAgICAoMHgwVUw8PFNZU19WUkVGQ1RMX1ZSRUZDVExfUG9zKSAgICAvKiE8IFZyZWYgPSBWcmVmIHBpbiAqLworI2RlZmluZSBTWVNfVlJFRkNUTF9WUkVGXzFfNlYgICAgICAgKDB4M1VMPDxTWVNfVlJFRkNUTF9WUkVGQ1RMX1BvcykgICAgLyohPCBWcmVmID0gMS42ViAqLworI2RlZmluZSBTWVNfVlJFRkNUTF9WUkVGXzJfMFYgICAgICAgKDB4N1VMPDxTWVNfVlJFRkNUTF9WUkVGQ1RMX1BvcykgICAgLyohPCBWcmVmID0gMi4wViAqLworI2RlZmluZSBTWVNfVlJFRkNUTF9WUkVGXzJfNVYgICAgICAgKDB4QlVMPDxTWVNfVlJFRkNUTF9WUkVGQ1RMX1BvcykgICAgLyohPCBWcmVmID0gMi41ViAqLworI2RlZmluZSBTWVNfVlJFRkNUTF9WUkVGXzNfMFYgICAgICAgKDB4RlVMPDxTWVNfVlJFRkNUTF9WUkVGQ1RMX1BvcykgICAgLyohPCBWcmVmID0gMy4wViAqLworI2RlZmluZSBTWVNfVlJFRkNUTF9WUkVGX0FWREQgICAgICAgKDB4MTBVTDw8U1lTX1ZSRUZDVExfVlJFRkNUTF9Qb3MpICAgLyohPCBWcmVmID0gQVZERCAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBVU0JQSFkgY29uc3RhbnQgZGVmaW5pdGlvbnMuIChXcml0ZS1Qcm90ZWN0aW9uIFJlZ2lzdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1lTX1VTQlBIWV9VU0JST0xFX1NURF9VU0JEICAgKDB4MFVMPDxTWVNfVVNCUEhZX1VTQlJPTEVfUG9zKSAgIC8qITwgU3RhbmRhcmQgVVNCIGRldmljZSAqLworI2RlZmluZSBTWVNfVVNCUEhZX1VTQlJPTEVfU1REX1VTQkggICAoMHgxVUw8PFNZU19VU0JQSFlfVVNCUk9MRV9Qb3MpICAgLyohPCBTdGFuZGFyZCBVU0IgaG9zdCAqLworI2RlZmluZSBTWVNfVVNCUEhZX1VTQlJPTEVfSURfREVQSCAgICAoMHgyVUw8PFNZU19VU0JQSFlfVVNCUk9MRV9Qb3MpICAgLyohPCBJRCBkZXBlbmRlbnQgZGV2aWNlICovCisjZGVmaW5lIFNZU19VU0JQSFlfVVNCUk9MRV9PTl9USEVfR08gICgweDNVTDw8U1lTX1VTQlBIWV9VU0JST0xFX1BvcykgICAvKiE8IE9uLVRoZS1HbyBkZXZpY2UgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgUExDVEwgY29uc3RhbnQgZGVmaW5pdGlvbnMuIChXcml0ZS1Qcm90ZWN0aW9uIFJlZ2lzdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNZU19QTENUTF9QTFNFTF9QTDAgICAgICgweDBVTDw8U1lTX1BMQ1RMX1BMU0VMX1BvcykgICAvKiE8IFNldCBwb3dlciBsZXZlbCB0byBwb3dlciBsZXZlbCAwICovCisjZGVmaW5lIFNZU19QTENUTF9QTFNFTF9QTDEgICAgICgweDFVTDw8U1lTX1BMQ1RMX1BMU0VMX1BvcykgICAvKiE8IFNldCBwb3dlciBsZXZlbCB0byBwb3dlciBsZXZlbCAxICovCisjZGVmaW5lIFNZU19QTENUTF9NVlJTX0xETyAgICAgICgweDBVTDw8U1lTX1BMQ1RMX01WUlNfUG9zKSAgICAvKiE8IFNldCBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUgdG8gTERPICovCisjZGVmaW5lIFNZU19QTENUTF9NVlJTX0RDREMgICAgICgweDFVTDw8U1lTX1BMQ1RMX01WUlNfUG9zKSAgICAvKiE8IFNldCBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUgdG8gRENEQyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBQTFNUUyBjb25zdGFudCBkZWZpbml0aW9ucy4gKFdyaXRlLVByb3RlY3Rpb24gUmVnaXN0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1lTX1BMU1RTX1BMU1RBVFVTX1BMMCAgKDB4MFVMPDxTWVNfUExTVFNfUExTVEFUVVNfUG9zKSAvKiE8IFBvd2VyIGxldmVsIGlzIHBvd2VyIGxldmVsIDAgKi8KKyNkZWZpbmUgU1lTX1BMU1RTX1BMU1RBVFVTX1BMMSAgKDB4MVVMPDxTWVNfUExTVFNfUExTVEFUVVNfUG9zKSAvKiE8IFBvd2VyIGxldmVsIGlzIHBvd2VyIGxldmVsIDEgKi8KKyNkZWZpbmUgU1lTX1BMU1RTX0NVUk1WUl9MRE8gICAgKDB4MFVMPDxTWVNfUExTVFNfQ1VSTVZSX1BvcykgICAvKiE8IE1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBpcyBMRE8gKi8KKyNkZWZpbmUgU1lTX1BMU1RTX0NVUk1WUl9EQ0RDICAgKDB4MVVMPDxTWVNfUExTVFNfQ1VSTVZSX1BvcykgICAvKiE8IE1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBpcyBEQ0RDICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFNSQU1QQ1RMIGNvbnN0YW50IGRlZmluaXRpb25zLiAoV3JpdGUtUHJvdGVjdGlvbiBSZWdpc3RlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTWVNfU1JBTVBDVExfU1JBTV9OT1JNQUwgICAgICAgICAgMHgwVUwgICAvKiE8IFNlbGVjdCBzeXN0ZW0gU1JBTSBwb3dlciBtb2RlIHRvIG5vcm1hbCBtb2RlICovCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNX1JFVEVOVElPTiAgICAgICAweDFVTCAgIC8qITwgU2VsZWN0IHN5c3RlbSBTUkFNIHBvd2VyIG1vZGUgdG8gcmV0ZW50aW9uIG1vZGUgKi8KKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU1fUE9XRVJfU0hVVF9ET1dOIDB4MlVMICAgLyohPCBTZWxlY3Qgc3lzdGVtIFNSQU0gcG93ZXIgbW9kZSB0byBwb3dlciBzaHV0IGRvd24gbW9kZSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgU1JBTVBQQ1RMIGNvbnN0YW50IGRlZmluaXRpb25zLiAoV3JpdGUtUHJvdGVjdGlvbiBSZWdpc3RlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNZU19TUkFNUFBDVF9TUkFNX05PUk1BTCAgICAgICAgICAweDBVTCAgIC8qITwgU2VsZWN0IHBlcmlwaGVyYWwgU1JBTSBwb3dlciBtb2RlIHRvIG5vcm1hbCBtb2RlICovCisjZGVmaW5lIFNZU19TUkFNUFBDVF9TUkFNX1JFVEVOVElPTiAgICAgICAweDFVTCAgIC8qITwgU2VsZWN0IHBlcmlwaGVyYWwgU1JBTSBwb3dlciBtb2RlIHRvIHJldGVudGlvbiBtb2RlICovCisjZGVmaW5lIFNZU19TUkFNUFBDVF9TUkFNX1BPV0VSX1NIVVRfRE9XTiAweDJVTCAgIC8qITwgU2VsZWN0IHBlcmlwaGVyYWwgU1JBTSBwb3dlciBtb2RlIHRvIHBvd2VyIHNodXQgZG93biBtb2RlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBNdWx0aS1GdW5jdGlvbiBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogSG93IHRvIHVzZSBiZWxvdyAjZGVmaW5lPworCitFeGFtcGxlOiBJZiB1c2VyIHdhbnQgdG8gc2V0IFBBLjEgYXMgVUFSVDBfVFhEIGFuZCBQQS4wIGFzIFVBUlQwX1JYRCBpbiBpbml0aWFsIGZ1bmN0aW9uLAorICAgICAgICAgdXNlciBjYW4gaXNzdWUgZm9sbG93aW5nIGNvbW1hbmQgdG8gYWNoaWV2ZSBpdC4KKworICAgIFNZUy0+R1BBX01GUEwgPSAoU1lTLT5HUEFfTUZQTCAmICh+U1lTX0dQQV9NRlBMX1BBME1GUF9Nc2spKSB8IFNZU19HUEFfTUZQTF9QQTBNRlBfVUFSVDBfUlhEOworICAgIFNZUy0+R1BBX01GUEwgPSAoU1lTLT5HUEFfTUZQTCAmICh+U1lTX0dQQV9NRlBMX1BBMU1GUF9Nc2spKSB8IFNZU19HUEFfTUZQTF9QQTFNRlBfVUFSVDBfVFhEOworKi8KKworLyogUEEuMCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBME1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQV9NRlBMX1BBME1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEwIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTBNRlBfUVNQSTBfTU9TSTAgICgweDAzVUw8PFNZU19HUEFfTUZQTF9QQTBNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMCBzZXR0aW5nIGZvciBRU1BJMF9NT1NJMCAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEwTUZQX1NQSTBfTU9TSSAgICAoMHgwNFVMPDxTWVNfR1BBX01GUExfUEEwTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgU1BJMF9NT1NJICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBME1GUF9TQzBfQ0xLICAgICAgKDB4MDZVTDw8U1lTX0dQQV9NRlBMX1BBME1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEwIHNldHRpbmcgZm9yIFNDMF9DTEsgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTBNRlBfVUFSVDBfUlhEICAgICgweDA3VUw8PFNZU19HUEFfTUZQTF9QQTBNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMCBzZXR0aW5nIGZvciBVQVJUMF9SWEQgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEwTUZQX1VBUlQxX25SVFMgICAoMHgwOFVMPDxTWVNfR1BBX01GUExfUEEwTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgVUFSVDFfblJUUyAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBME1GUF9JMkMyX1NEQSAgICAgKDB4MDlVTDw8U1lTX0dQQV9NRlBMX1BBME1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEwIHNldHRpbmcgZm9yIEkyQzJfU0RBICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTBNRlBfQlBXTTBfQ0gwICAgICgweDBjVUw8PFNZU19HUEFfTUZQTF9QQTBNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMCBzZXR0aW5nIGZvciBCUFdNMF9DSDAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEwTUZQX0VQV00wX0NINSAgICAoMHgwZFVMPDxTWVNfR1BBX01GUExfUEEwTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgRVBXTTBfQ0g1ICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBME1GUF9EQUMwX1NUICAgICAgKDB4MGZVTDw8U1lTX0dQQV9NRlBMX1BBME1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEwIHNldHRpbmcgZm9yIERBQzBfU1QgICAgICovCisKKy8qIFBBLjEgTUZQICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTFNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEFfTUZQTF9QQTFNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMSBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEExTUZQX1FTUEkwX01JU08wICAoMHgwM1VMPDxTWVNfR1BBX01GUExfUEExTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgUVNQSTBfTUlTTzAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMU1GUF9TUEkwX01JU08gICAgKDB4MDRVTDw8U1lTX0dQQV9NRlBMX1BBMU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIFNQSTBfTUlTTyAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTFNRlBfU0MwX0RBVCAgICAgICgweDA2VUw8PFNZU19HUEFfTUZQTF9QQTFNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMSBzZXR0aW5nIGZvciBTQzBfREFUICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEExTUZQX1VBUlQwX1RYRCAgICAoMHgwN1VMPDxTWVNfR1BBX01GUExfUEExTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgVUFSVDBfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMU1GUF9VQVJUMV9uQ1RTICAgKDB4MDhVTDw8U1lTX0dQQV9NRlBMX1BBMU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIFVBUlQxX25DVFMgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTFNRlBfSTJDMl9TQ0wgICAgICgweDA5VUw8PFNZU19HUEFfTUZQTF9QQTFNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMSBzZXR0aW5nIGZvciBJMkMyX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEExTUZQX0JQV00wX0NIMSAgICAoMHgwY1VMPDxTWVNfR1BBX01GUExfUEExTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgQlBXTTBfQ0gxICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMU1GUF9FUFdNMF9DSDQgICAgKDB4MGRVTDw8U1lTX0dQQV9NRlBMX1BBMU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIEVQV00wX0NINCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTFNRlBfREFDMV9TVCAgICAgICgweDBmVUw8PFNZU19HUEFfTUZQTF9QQTFNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMSBzZXR0aW5nIGZvciBEQUMxX1NUICAgICAqLworCisvKiBQQS4yIE1GUCAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEyTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BBX01GUExfUEEyTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMk1GUF9RU1BJMF9DTEsgICAgKDB4MDNVTDw8U1lTX0dQQV9NRlBMX1BBMk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEyIHNldHRpbmcgZm9yIFFTUEkwX0NMSyAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTJNRlBfU1BJMF9DTEsgICAgICgweDA0VUw8PFNZU19HUEFfTUZQTF9QQTJNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMiBzZXR0aW5nIGZvciBTUEkwX0NMSyAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEyTUZQX1NDMF9SU1QgICAgICAoMHgwNlVMPDxTWVNfR1BBX01GUExfUEEyTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgU0MwX1JTVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMk1GUF9VQVJUNF9SWEQgICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBMX1BBMk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEyIHNldHRpbmcgZm9yIFVBUlQ0X1JYRCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTJNRlBfVUFSVDFfUlhEICAgICgweDA4VUw8PFNZU19HUEFfTUZQTF9QQTJNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMiBzZXR0aW5nIGZvciBVQVJUMV9SWEQgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEyTUZQX0kyQzFfU0RBICAgICAoMHgwOVVMPDxTWVNfR1BBX01GUExfUEEyTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgSTJDMV9TREEgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMk1GUF9CUFdNMF9DSDIgICAgKDB4MGNVTDw8U1lTX0dQQV9NRlBMX1BBMk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEyIHNldHRpbmcgZm9yIEJQV00wX0NIMiAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTJNRlBfRVBXTTBfQ0gzICAgICgweDBkVUw8PFNZU19HUEFfTUZQTF9QQTJNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMiBzZXR0aW5nIGZvciBFUFdNMF9DSDMgICAqLworCisvKiBQQS4zIE1GUCAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEzTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BBX01GUExfUEEzTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTMgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBM01GUF9RU1BJMF9TUyAgICAgKDB4MDNVTDw8U1lTX0dQQV9NRlBMX1BBM01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIFFTUEkwX1NTICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTNNRlBfU1BJMF9TUyAgICAgICgweDA0VUw8PFNZU19HUEFfTUZQTF9QQTNNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBTUEkwX1NTICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEzTUZQX1NDMF9QV1IgICAgICAoMHgwNlVMPDxTWVNfR1BBX01GUExfUEEzTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTMgc2V0dGluZyBmb3IgU0MwX1BXUiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBM01GUF9VQVJUNF9UWEQgICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBMX1BBM01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIFVBUlQ0X1RYRCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTNNRlBfVUFSVDFfVFhEICAgICgweDA4VUw8PFNZU19HUEFfTUZQTF9QQTNNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBVQVJUMV9UWEQgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEzTUZQX0kyQzFfU0NMICAgICAoMHgwOVVMPDxTWVNfR1BBX01GUExfUEEzTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTMgc2V0dGluZyBmb3IgSTJDMV9TQ0wgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBM01GUF9CUFdNMF9DSDMgICAgKDB4MGNVTDw8U1lTX0dQQV9NRlBMX1BBM01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIEJQV00wX0NIMyAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTNNRlBfRVBXTTBfQ0gyICAgICgweDBkVUw8PFNZU19HUEFfTUZQTF9QQTNNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBFUFdNMF9DSDIgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEzTUZQX1FFSTBfQiAgICAgICAoMHgwZVVMPDxTWVNfR1BBX01GUExfUEEzTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTMgc2V0dGluZyBmb3IgUUVJMF9CICAgICAgKi8KKworLyogUEEuNCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNE1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQV9NRlBMX1BBNE1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTRNRlBfUVNQSTBfTU9TSTEgICgweDAzVUw8PFNZU19HUEFfTUZQTF9QQTRNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBRU1BJMF9NT1NJMSAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE0TUZQX1NQSTBfSTJTTUNMSyAoMHgwNFVMPDxTWVNfR1BBX01GUExfUEE0TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgU1BJMF9JMlNNQ0xLKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNE1GUF9TQzBfbkNEICAgICAgKDB4MDZVTDw8U1lTX0dQQV9NRlBMX1BBNE1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIFNDMF9uQ0QgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTRNRlBfVUFSVDBfblJUUyAgICgweDA3VUw8PFNZU19HUEFfTUZQTF9QQTRNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBVQVJUMF9uUlRTICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE0TUZQX1VBUlQ1X1JYRCAgICAoMHgwOFVMPDxTWVNfR1BBX01GUExfUEE0TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgVUFSVDVfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNE1GUF9JMkMwX1NEQSAgICAgKDB4MDlVTDw8U1lTX0dQQV9NRlBMX1BBNE1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIEkyQzBfU0RBICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTRNRlBfQ0FOMF9SWEQgICAgICgweDBhVUw8PFNZU19HUEFfTUZQTF9QQTRNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBDQU4wX1JYRCAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE0TUZQX0JQV00wX0NINCAgICAoMHgwY1VMPDxTWVNfR1BBX01GUExfUEE0TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgQlBXTTBfQ0g0ICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNE1GUF9FUFdNMF9DSDEgICAgKDB4MGRVTDw8U1lTX0dQQV9NRlBMX1BBNE1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIEVQV00wX0NIMSAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTRNRlBfUUVJMF9BICAgICAgICgweDBlVUw8PFNZU19HUEFfTUZQTF9QQTRNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBRRUkwX0EgICAgICAqLworCisvKiBQQS41IE1GUCAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE1TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BBX01GUExfUEE1TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNU1GUF9RU1BJMF9NSVNPMSAgKDB4MDNVTDw8U1lTX0dQQV9NRlBMX1BBNU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIFFTUEkwX01JU08xICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTVNRlBfU1BJMV9JMlNNQ0xLICgweDA0VUw8PFNZU19HUEFfTUZQTF9QQTVNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBTUEkxX0kyU01DTEsqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE1TUZQX1NDMl9uQ0QgICAgICAoMHgwNlVMPDxTWVNfR1BBX01GUExfUEE1TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgU0MyX25DRCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNU1GUF9VQVJUMF9uQ1RTICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBMX1BBNU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIFVBUlQwX25DVFMgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTVNRlBfVUFSVDVfVFhEICAgICgweDA4VUw8PFNZU19HUEFfTUZQTF9QQTVNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBVQVJUNV9UWEQgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE1TUZQX0kyQzBfU0NMICAgICAoMHgwOVVMPDxTWVNfR1BBX01GUExfUEE1TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgSTJDMF9TQ0wgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNU1GUF9DQU4wX1RYRCAgICAgKDB4MGFVTDw8U1lTX0dQQV9NRlBMX1BBNU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIENBTjBfVFhEICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTVNRlBfQlBXTTBfQ0g1ICAgICgweDBjVUw8PFNZU19HUEFfTUZQTF9QQTVNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBCUFdNMF9DSDUgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE1TUZQX0VQV00wX0NIMCAgICAoMHgwZFVMPDxTWVNfR1BBX01GUExfUEE1TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgRVBXTTBfQ0gwICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNU1GUF9RRUkwX0lOREVYICAgKDB4MGVVTDw8U1lTX0dQQV9NRlBMX1BBNU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIFFFSTBfSU5ERVggICovCisKKy8qIFBBLjYgTUZQICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTZNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEFfTUZQTF9QQTZNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE2TUZQX0VCSV9BRDYgICAgICAoMHgwMlVMPDxTWVNfR1BBX01GUExfUEE2TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgRUJJX0FENiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNk1GUF9TUEkxX1NTICAgICAgKDB4MDRVTDw8U1lTX0dQQV9NRlBMX1BBNk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE2IHNldHRpbmcgZm9yIFNQSTFfU1MgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTZNRlBfU0MyX0NMSyAgICAgICgweDA2VUw8PFNZU19HUEFfTUZQTF9QQTZNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBTQzJfQ0xLICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE2TUZQX1VBUlQwX1JYRCAgICAoMHgwN1VMPDxTWVNfR1BBX01GUExfUEE2TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgVUFSVDBfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNk1GUF9JMkMxX1NEQSAgICAgKDB4MDhVTDw8U1lTX0dQQV9NRlBMX1BBNk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE2IHNldHRpbmcgZm9yIEkyQzFfU0RBICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTZNRlBfRVBXTTFfQ0g1ICAgICgweDBiVUw8PFNZU19HUEFfTUZQTF9QQTZNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBFUFdNMV9DSDUgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE2TUZQX0JQV00xX0NIMyAgICAoMHgwY1VMPDxTWVNfR1BBX01GUExfUEE2TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgQlBXTTFfQ0gzICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNk1GUF9BQ01QMV9XTEFUICAgKDB4MGRVTDw8U1lTX0dQQV9NRlBMX1BBNk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE2IHNldHRpbmcgZm9yIEFDTVAxX1dMQVQgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTZNRlBfVE0zICAgICAgICAgICgweDBlVUw8PFNZU19HUEFfTUZQTF9QQTZNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBUTTMgICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE2TUZQX0lOVDAgICAgICAgICAoMHgwZlVMPDxTWVNfR1BBX01GUExfUEE2TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgSU5UMCAgICAgICAgKi8KKworLyogUEEuNyBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBN01GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQV9NRlBMX1BBN01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTdNRlBfRUJJX0FENyAgICAgICgweDAyVUw8PFNZU19HUEFfTUZQTF9QQTdNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNyBzZXR0aW5nIGZvciBFQklfQUQ3ICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE3TUZQX1NQSTFfQ0xLICAgICAoMHgwNFVMPDxTWVNfR1BBX01GUExfUEE3TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgU1BJMV9DTEsgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBN01GUF9TQzJfREFUICAgICAgKDB4MDZVTDw8U1lTX0dQQV9NRlBMX1BBN01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIFNDMl9EQVQgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTdNRlBfVUFSVDBfVFhEICAgICgweDA3VUw8PFNZU19HUEFfTUZQTF9QQTdNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNyBzZXR0aW5nIGZvciBVQVJUMF9UWEQgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE3TUZQX0kyQzFfU0NMICAgICAoMHgwOFVMPDxTWVNfR1BBX01GUExfUEE3TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgSTJDMV9TQ0wgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBN01GUF9FUFdNMV9DSDQgICAgKDB4MGJVTDw8U1lTX0dQQV9NRlBMX1BBN01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIEVQV00xX0NINCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTdNRlBfQlBXTTFfQ0gyICAgICgweDBjVUw8PFNZU19HUEFfTUZQTF9QQTdNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNyBzZXR0aW5nIGZvciBCUFdNMV9DSDIgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE3TUZQX0FDTVAwX1dMQVQgICAoMHgwZFVMPDxTWVNfR1BBX01GUExfUEE3TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgQUNNUDBfV0xBVCAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBN01GUF9UTTIgICAgICAgICAgKDB4MGVVTDw8U1lTX0dQQV9NRlBMX1BBN01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIFRNMiAgICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTdNRlBfSU5UMSAgICAgICAgICgweDBmVUw8PFNZU19HUEFfTUZQTF9QQTdNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNyBzZXR0aW5nIGZvciBJTlQxICAgICAgICAqLworCisvKiBQQS44IE1GUCAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE4TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BBX01GUEhfUEE4TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTggc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOE1GUF9FQklfQUxFICAgICAgKDB4MDJVTDw8U1lTX0dQQV9NRlBIX1BBOE1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIEVCSV9BTEUgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQThNRlBfU0MyX0NMSyAgICAgICgweDAzVUw8PFNZU19HUEFfTUZQSF9QQThNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBTQzJfQ0xLICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE4TUZQX1NQSTJfTU9TSSAgICAoMHgwNFVMPDxTWVNfR1BBX01GUEhfUEE4TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTggc2V0dGluZyBmb3IgU1BJMl9NT1NJICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOE1GUF9VU0NJMF9DVEwxICAgKDB4MDZVTDw8U1lTX0dQQV9NRlBIX1BBOE1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIFVTQ0kwX0NUTDEgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQThNRlBfVUFSVDFfUlhEICAgICgweDA3VUw8PFNZU19HUEFfTUZQSF9QQThNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBVQVJUMV9SWEQgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE4TUZQX0JQV00wX0NIMyAgICAoMHgwOVVMPDxTWVNfR1BBX01GUEhfUEE4TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTggc2V0dGluZyBmb3IgQlBXTTBfQ0gzICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOE1GUF9RRUkxX0IgICAgICAgKDB4MGFVTDw8U1lTX0dQQV9NRlBIX1BBOE1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIFFFSTFfQiAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQThNRlBfRUNBUDBfSUMyICAgICgweDBiVUw8PFNZU19HUEFfTUZQSF9QQThNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBFQ0FQMF9JQzIgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE4TUZQX1RNM19FWFQgICAgICAoMHgwZFVMPDxTWVNfR1BBX01GUEhfUEE4TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTggc2V0dGluZyBmb3IgVE0zX0VYVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOE1GUF9JTlQ0ICAgICAgICAgKDB4MGZVTDw8U1lTX0dQQV9NRlBIX1BBOE1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIElOVDQgICAgICAgICovCisKKy8qIFBBLjkgTUZQICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTlNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEFfTUZQSF9QQTlNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE5TUZQX0VCSV9NQ0xLICAgICAoMHgwMlVMPDxTWVNfR1BBX01GUEhfUEE5TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTkgc2V0dGluZyBmb3IgRUJJX01DTEsgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOU1GUF9TQzJfREFUICAgICAgKDB4MDNVTDw8U1lTX0dQQV9NRlBIX1BBOU1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIFNDMl9EQVQgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTlNRlBfU1BJMl9NSVNPICAgICgweDA0VUw8PFNZU19HUEFfTUZQSF9QQTlNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBTUEkyX01JU08gICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE5TUZQX1VTQ0kwX0RBVDEgICAoMHgwNlVMPDxTWVNfR1BBX01GUEhfUEE5TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTkgc2V0dGluZyBmb3IgVVNDSTBfREFUMSAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOU1GUF9VQVJUMV9UWEQgICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBIX1BBOU1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIFVBUlQxX1RYRCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTlNRlBfQlBXTTBfQ0gyICAgICgweDA5VUw8PFNZU19HUEFfTUZQSF9QQTlNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBCUFdNMF9DSDIgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE5TUZQX1FFSTFfQSAgICAgICAoMHgwYVVMPDxTWVNfR1BBX01GUEhfUEE5TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTkgc2V0dGluZyBmb3IgUUVJMV9BICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOU1GUF9FQ0FQMF9JQzEgICAgKDB4MGJVTDw8U1lTX0dQQV9NRlBIX1BBOU1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIEVDQVAwX0lDMSAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTlNRlBfVE0yX0VYVCAgICAgICgweDBkVUw8PFNZU19HUEFfTUZQSF9QQTlNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBUTTJfRVhUICAgICAqLworCisvKiBQQS4xMCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTBNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQQV9NRlBIX1BBMTBNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEwTUZQX0FDTVAxX1AwICAgICgweDAxVUw8PFNZU19HUEFfTUZQSF9QQTEwTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgQUNNUDFfUDAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExME1GUF9FQklfbldSICAgICAoMHgwMlVMPDxTWVNfR1BBX01GUEhfUEExME1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEwIHNldHRpbmcgZm9yIEVCSV9uV1IgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTBNRlBfU0MyX1JTVCAgICAgKDB4MDNVTDw8U1lTX0dQQV9NRlBIX1BBMTBNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBTQzJfUlNUICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEwTUZQX1NQSTJfQ0xLICAgICgweDA0VUw8PFNZU19HUEFfTUZQSF9QQTEwTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgU1BJMl9DTEsgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExME1GUF9VU0NJMF9EQVQwICAoMHgwNlVMPDxTWVNfR1BBX01GUEhfUEExME1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEwIHNldHRpbmcgZm9yIFVTQ0kwX0RBVDAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTBNRlBfSTJDMl9TREEgICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBIX1BBMTBNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBJMkMyX1NEQSAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEwTUZQX0JQV00wX0NIMSAgICgweDA5VUw8PFNZU19HUEFfTUZQSF9QQTEwTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgQlBXTTBfQ0gxICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExME1GUF9RRUkxX0lOREVYICAoMHgwYVVMPDxTWVNfR1BBX01GUEhfUEExME1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEwIHNldHRpbmcgZm9yIFFFSTFfSU5ERVggKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTBNRlBfRUNBUDBfSUMwICAgKDB4MGJVTDw8U1lTX0dQQV9NRlBIX1BBMTBNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBFQ0FQMF9JQzAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEwTUZQX1RNMV9FWFQgICAgICgweDBkVUw8PFNZU19HUEFfTUZQSF9QQTEwTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgVE0xX0VYVCAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExME1GUF9EQUMwX1NUICAgICAoMHgwZVVMPDxTWVNfR1BBX01GUEhfUEExME1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEwIHNldHRpbmcgZm9yIERBQzBfU1QgICAgKi8KKworLyogUEEuMTEgTUZQICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTExTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEFfTUZQSF9QQTExTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMU1GUF9BQ01QMF9QMCAgICAoMHgwMVVMPDxTWVNfR1BBX01GUEhfUEExMU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIEFDTVAwX1AwICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTFNRlBfRUJJX25SRCAgICAgKDB4MDJVTDw8U1lTX0dQQV9NRlBIX1BBMTFNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBFQklfblJEICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTExTUZQX1NDMl9QV1IgICAgICgweDAzVUw8PFNZU19HUEFfTUZQSF9QQTExTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgU0MyX1BXUiAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMU1GUF9TUEkyX1NTICAgICAoMHgwNFVMPDxTWVNfR1BBX01GUEhfUEExMU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIFNQSTJfU1MgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTFNRlBfVVNDSTBfQ0xLICAgKDB4MDZVTDw8U1lTX0dQQV9NRlBIX1BBMTFNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBVU0NJMF9DTEsgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTExTUZQX0kyQzJfU0NMICAgICgweDA3VUw8PFNZU19HUEFfTUZQSF9QQTExTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgSTJDMl9TQ0wgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMU1GUF9CUFdNMF9DSDAgICAoMHgwOVVMPDxTWVNfR1BBX01GUEhfUEExMU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIEJQV00wX0NIMCAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTFNRlBfRVBXTTBfU1lOQ19PVVQgKDB4MGFVTDw8U1lTX0dQQV9NRlBIX1BBMTFNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBFUFdNMF9TWU5DX09VVCovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTExTUZQX1RNMF9FWFQgICAgICgweDBkVUw8PFNZU19HUEFfTUZQSF9QQTExTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgVE0wX0VYVCAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMU1GUF9EQUMxX1NUICAgICAoMHgwZVVMPDxTWVNfR1BBX01GUEhfUEExMU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIERBQzFfU1QgICAgKi8KKworLyogUEEuMTIgTUZQICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEyTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEFfTUZQSF9QQTEyTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMk1GUF9JMlMwX0JDTEsgICAoMHgwMlVMPDxTWVNfR1BBX01GUEhfUEExMk1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEyIHNldHRpbmcgZm9yIEkyUzBfQkNMSyAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTJNRlBfVUFSVDRfVFhEICAgKDB4MDNVTDw8U1lTX0dQQV9NRlBIX1BBMTJNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMiBzZXR0aW5nIGZvciBVQVJUNF9UWEQgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEyTUZQX0kyQzFfU0NMICAgICgweDA0VUw8PFNZU19HUEFfTUZQSF9QQTEyTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgSTJDMV9TQ0wgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMk1GUF9TUEkyX1NTICAgICAoMHgwNVVMPDxTWVNfR1BBX01GUEhfUEExMk1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEyIHNldHRpbmcgZm9yIFNQSTJfU1MgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTJNRlBfQ0FOMF9UWEQgICAgKDB4MDZVTDw8U1lTX0dQQV9NRlBIX1BBMTJNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMiBzZXR0aW5nIGZvciBDQU4wX1RYRCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEyTUZQX1NDMl9QV1IgICAgICgweDA3VUw8PFNZU19HUEFfTUZQSF9QQTEyTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgU0MyX1BXUiAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMk1GUF9CUFdNMV9DSDIgICAoMHgwYlVMPDxTWVNfR1BBX01GUEhfUEExMk1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEyIHNldHRpbmcgZm9yIEJQV00xX0NIMiAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTJNRlBfUUVJMV9JTkRFWCAgKDB4MGNVTDw8U1lTX0dQQV9NRlBIX1BBMTJNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMiBzZXR0aW5nIGZvciBRRUkxX0lOREVYICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEyTUZQX1VTQl9WQlVTICAgICgweDBlVUw8PFNZU19HUEFfTUZQSF9QQTEyTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgVVNCX1ZCVVMgICAqLworCisvKiBQQS4xMyBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTNNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQQV9NRlBIX1BBMTNNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEzTUZQX0kyUzBfTUNMSyAgICgweDAyVUw8PFNZU19HUEFfTUZQSF9QQTEzTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTMgc2V0dGluZyBmb3IgSTJTMF9NQ0xLICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExM01GUF9VQVJUNF9SWEQgICAoMHgwM1VMPDxTWVNfR1BBX01GUEhfUEExM01GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIFVBUlQ0X1JYRCAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTNNRlBfSTJDMV9TREEgICAgKDB4MDRVTDw8U1lTX0dQQV9NRlBIX1BBMTNNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBJMkMxX1NEQSAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEzTUZQX1NQSTJfQ0xLICAgICgweDA1VUw8PFNZU19HUEFfTUZQSF9QQTEzTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTMgc2V0dGluZyBmb3IgU1BJMl9DTEsgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExM01GUF9DQU4wX1JYRCAgICAoMHgwNlVMPDxTWVNfR1BBX01GUEhfUEExM01GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIENBTjBfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTNNRlBfU0MyX1JTVCAgICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBIX1BBMTNNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBTQzJfUlNUICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEzTUZQX0JQV00xX0NIMyAgICgweDBiVUw8PFNZU19HUEFfTUZQSF9QQTEzTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTMgc2V0dGluZyBmb3IgQlBXTTFfQ0gzICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExM01GUF9RRUkxX0EgICAgICAoMHgwY1VMPDxTWVNfR1BBX01GUEhfUEExM01GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIFFFSTFfQSAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTNNRlBfVVNCX0RfTiAgICAgKDB4MGVVTDw8U1lTX0dQQV9NRlBIX1BBMTNNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBVU0JfRF9OICAgICovCisKKy8qIFBBLjE0IE1GUCAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNE1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BBX01GUEhfUEExNE1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTRNRlBfSTJTMF9ESSAgICAgKDB4MDJVTDw8U1lTX0dQQV9NRlBIX1BBMTRNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNCBzZXR0aW5nIGZvciBJMlMwX0RJICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE0TUZQX1VBUlQwX1RYRCAgICgweDAzVUw8PFNZU19HUEFfTUZQSF9QQTE0TUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTQgc2V0dGluZyBmb3IgVUFSVDBfVFhEICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNE1GUF9TUEkyX01JU08gICAoMHgwNVVMPDxTWVNfR1BBX01GUEhfUEExNE1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIFNQSTJfTUlTTyAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTRNRlBfSTJDMl9TQ0wgICAgKDB4MDZVTDw8U1lTX0dQQV9NRlBIX1BBMTRNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNCBzZXR0aW5nIGZvciBJMkMyX1NDTCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE0TUZQX1NDMl9EQVQgICAgICgweDA3VUw8PFNZU19HUEFfTUZQSF9QQTE0TUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTQgc2V0dGluZyBmb3IgU0MyX0RBVCAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNE1GUF9CUFdNMV9DSDQgICAoMHgwYlVMPDxTWVNfR1BBX01GUEhfUEExNE1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIEJQV00xX0NINCAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTRNRlBfUUVJMV9CICAgICAgKDB4MGNVTDw8U1lTX0dQQV9NRlBIX1BBMTRNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNCBzZXR0aW5nIGZvciBRRUkxX0IgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE0TUZQX1VTQl9EX1AgICAgICgweDBlVUw8PFNZU19HUEFfTUZQSF9QQTE0TUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTQgc2V0dGluZyBmb3IgVVNCX0RfUCAgICAqLworCisvKiBQQS4xNSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTVNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQQV9NRlBIX1BBMTVNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE1TUZQX0kyUzBfRE8gICAgICgweDAyVUw8PFNZU19HUEFfTUZQSF9QQTE1TUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTUgc2V0dGluZyBmb3IgSTJTMF9ETyAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNU1GUF9VQVJUMF9SWEQgICAoMHgwM1VMPDxTWVNfR1BBX01GUEhfUEExNU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE1IHNldHRpbmcgZm9yIFVBUlQwX1JYRCAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTVNRlBfU1BJMl9NT1NJICAgKDB4MDVVTDw8U1lTX0dQQV9NRlBIX1BBMTVNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBTUEkyX01PU0kgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE1TUZQX0kyQzJfU0RBICAgICgweDA2VUw8PFNZU19HUEFfTUZQSF9QQTE1TUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTUgc2V0dGluZyBmb3IgSTJDMl9TREEgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNU1GUF9TQzJfQ0xLICAgICAoMHgwN1VMPDxTWVNfR1BBX01GUEhfUEExNU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE1IHNldHRpbmcgZm9yIFNDMl9DTEsgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTVNRlBfQlBXTTFfQ0g1ICAgKDB4MGJVTDw8U1lTX0dQQV9NRlBIX1BBMTVNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBCUFdNMV9DSDUgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE1TUZQX0VQV00wX1NZTkNfSU4gKDB4MGNVTDw8U1lTX0dQQV9NRlBIX1BBMTVNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBFUFdNMF9TWU5DX0lOKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTVNRlBfVVNCX09UR19JRCAgKDB4MGVVTDw8U1lTX0dQQV9NRlBIX1BBMTVNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBVU0JfT1RHX0lEICovCisKKy8qIFBCLjAgTUZQICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjBNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEJfTUZQTF9QQjBNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIwTUZQX0VBREMwX0NIMCAgICAoMHgwMVVMPDxTWVNfR1BCX01GUExfUEIwTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjAgc2V0dGluZyBmb3IgRUFEQzBfQ0gwICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCME1GUF9FQklfQURSOSAgICAgKDB4MDJVTDw8U1lTX0dQQl9NRlBMX1BCME1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIEVCSV9BRFI5ICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjBNRlBfU0QwX0NNRCAgICAgICgweDAzVUw8PFNZU19HUEJfTUZQTF9QQjBNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBTRDBfQ01EICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIwTUZQX1VBUlQyX1JYRCAgICAoMHgwN1VMPDxTWVNfR1BCX01GUExfUEIwTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjAgc2V0dGluZyBmb3IgVUFSVDJfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCME1GUF9TUEkwX0kyU01DTEsgKDB4MDhVTDw8U1lTX0dQQl9NRlBMX1BCME1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIFNQSTBfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjBNRlBfSTJDMV9TREEgICAgICgweDA5VUw8PFNZU19HUEJfTUZQTF9QQjBNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBJMkMxX1NEQSAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIwTUZQX0VQV00wX0NINSAgICAoMHgwYlVMPDxTWVNfR1BCX01GUExfUEIwTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjAgc2V0dGluZyBmb3IgRVBXTTBfQ0g1ICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCME1GUF9FUFdNMV9DSDUgICAgKDB4MGNVTDw8U1lTX0dQQl9NRlBMX1BCME1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIEVQV00xX0NINSAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjBNRlBfRVBXTTBfQlJBS0UxICgweDBkVUw8PFNZU19HUEJfTUZQTF9QQjBNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBFUFdNMF9CUkFLRTEqLworCisvKiBQQi4xIE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIxTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUExfUEIxTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMU1GUF9FQURDMF9DSDEgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBMX1BCMU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIEVBREMwX0NIMSAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjFNRlBfRUJJX0FEUjggICAgICgweDAyVUw8PFNZU19HUEJfTUZQTF9QQjFNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBFQklfQURSOCAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIxTUZQX1NEMF9DTEsgICAgICAoMHgwM1VMPDxTWVNfR1BCX01GUExfUEIxTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgU0QwX0NMSyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMU1GUF9TUEkxX0kyU01DTEsgKDB4MDVVTDw8U1lTX0dQQl9NRlBMX1BCMU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIFNQSTFfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjFNRlBfU1BJM19JMlNNQ0xLICgweDA2VUw8PFNZU19HUEJfTUZQTF9QQjFNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBTUEkzX0kyU01DTEsqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIxTUZQX1VBUlQyX1RYRCAgICAoMHgwN1VMPDxTWVNfR1BCX01GUExfUEIxTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgVUFSVDJfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMU1GUF9VU0NJMV9DTEsgICAgKDB4MDhVTDw8U1lTX0dQQl9NRlBMX1BCMU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIFVTQ0kxX0NMSyAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjFNRlBfSTJDMV9TQ0wgICAgICgweDA5VUw8PFNZU19HUEJfTUZQTF9QQjFNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBJMkMxX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIxTUZQX0kyUzBfTFJDSyAgICAoMHgwYVVMPDxTWVNfR1BCX01GUExfUEIxTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgSTJTMF9MUkNLICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMU1GUF9FUFdNMF9DSDQgICAgKDB4MGJVTDw8U1lTX0dQQl9NRlBMX1BCMU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIEVQV00wX0NINCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjFNRlBfRVBXTTFfQ0g0ICAgICgweDBjVUw8PFNZU19HUEJfTUZQTF9QQjFNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBFUFdNMV9DSDQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIxTUZQX0VQV00wX0JSQUtFMCAoMHgwZFVMPDxTWVNfR1BCX01GUExfUEIxTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgRVBXTTBfQlJBS0UwKi8KKworLyogUEIuMiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMk1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQl9NRlBMX1BCMk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjJNRlBfRUFEQzBfQ0gyICAgICgweDAxVUw8PFNZU19HUEJfTUZQTF9QQjJNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBFQURDMF9DSDIgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIyTUZQX0FDTVAwX1AxICAgICAoMHgwMVVMPDxTWVNfR1BCX01GUExfUEIyTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgQUNNUDBfUDEgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMk1GUF9FQklfQURSMyAgICAgKDB4MDJVTDw8U1lTX0dQQl9NRlBMX1BCMk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIEVCSV9BRFIzICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjJNRlBfU0QwX0RBVDAgICAgICgweDAzVUw8PFNZU19HUEJfTUZQTF9QQjJNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBTRDBfREFUMCAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIyTUZQX1NQSTFfU1MgICAgICAoMHgwNVVMPDxTWVNfR1BCX01GUExfUEIyTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgU1BJMV9TUyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMk1GUF9VQVJUMV9SWEQgICAgKDB4MDZVTDw8U1lTX0dQQl9NRlBMX1BCMk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIFVBUlQxX1JYRCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjJNRlBfVUFSVDVfbkNUUyAgICgweDA3VUw8PFNZU19HUEJfTUZQTF9QQjJNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBVQVJUNV9uQ1RTICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIyTUZQX1VTQ0kxX0RBVDAgICAoMHgwOFVMPDxTWVNfR1BCX01GUExfUEIyTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgVVNDSTFfREFUMCAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMk1GUF9TQzBfUFdSICAgICAgKDB4MDlVTDw8U1lTX0dQQl9NRlBMX1BCMk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIFNDMF9QV1IgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjJNRlBfSTJTMF9ETyAgICAgICgweDBhVUw8PFNZU19HUEJfTUZQTF9QQjJNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBJMlMwX0RPICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIyTUZQX0VQV00wX0NIMyAgICAoMHgwYlVMPDxTWVNfR1BCX01GUExfUEIyTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgRVBXTTBfQ0gzICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMk1GUF9UTTMgICAgICAgICAgKDB4MGVVTDw8U1lTX0dQQl9NRlBMX1BCMk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIFRNMyAgICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjJNRlBfSU5UMyAgICAgICAgICgweDBmVUw8PFNZU19HUEJfTUZQTF9QQjJNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBJTlQzICAgICAgICAqLworCisvKiBQQi4zIE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIzTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUExfUEIzTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCM01GUF9FQURDMF9DSDMgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBMX1BCM01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIEVBREMwX0NIMyAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjNNRlBfQUNNUDBfTiAgICAgICgweDAxVUw8PFNZU19HUEJfTUZQTF9QQjNNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBBQ01QMF9OICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIzTUZQX0VCSV9BRFIyICAgICAoMHgwMlVMPDxTWVNfR1BCX01GUExfUEIzTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgRUJJX0FEUjIgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCM01GUF9TRDBfREFUMSAgICAgKDB4MDNVTDw8U1lTX0dQQl9NRlBMX1BCM01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIFNEMF9EQVQxICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjNNRlBfU1BJMV9DTEsgICAgICgweDA1VUw8PFNZU19HUEJfTUZQTF9QQjNNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBTUEkxX0NMSyAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIzTUZQX1VBUlQxX1RYRCAgICAoMHgwNlVMPDxTWVNfR1BCX01GUExfUEIzTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgVUFSVDFfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCM01GUF9VQVJUNV9uUlRTICAgKDB4MDdVTDw8U1lTX0dQQl9NRlBMX1BCM01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIFVBUlQ1X25SVFMgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjNNRlBfVVNDSTFfREFUMSAgICgweDA4VUw8PFNZU19HUEJfTUZQTF9QQjNNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBVU0NJMV9EQVQxICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIzTUZQX1NDMF9SU1QgICAgICAoMHgwOVVMPDxTWVNfR1BCX01GUExfUEIzTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgU0MwX1JTVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCM01GUF9JMlMwX0RJICAgICAgKDB4MGFVTDw8U1lTX0dQQl9NRlBMX1BCM01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIEkyUzBfREkgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjNNRlBfRVBXTTBfQ0gyICAgICgweDBiVUw8PFNZU19HUEJfTUZQTF9QQjNNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBFUFdNMF9DSDIgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIzTUZQX1RNMiAgICAgICAgICAoMHgwZVVMPDxTWVNfR1BCX01GUExfUEIzTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgVE0yICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCM01GUF9JTlQyICAgICAgICAgKDB4MGZVTDw8U1lTX0dQQl9NRlBMX1BCM01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIElOVDIgICAgICAgICovCisKKy8qIFBCLjQgTUZQICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjRNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEJfTUZQTF9QQjRNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI0TUZQX0VBREMwX0NINCAgICAoMHgwMVVMPDxTWVNfR1BCX01GUExfUEI0TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgRUFEQzBfQ0g0ICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNE1GUF9BQ01QMV9QMSAgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBMX1BCNE1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIEFDTVAxX1AxICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjRNRlBfRUJJX0FEUjEgICAgICgweDAyVUw8PFNZU19HUEJfTUZQTF9QQjRNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBFQklfQURSMSAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI0TUZQX1NEMF9EQVQyICAgICAoMHgwM1VMPDxTWVNfR1BCX01GUExfUEI0TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgU0QwX0RBVDIgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNE1GUF9TUEkxX01PU0kgICAgKDB4MDVVTDw8U1lTX0dQQl9NRlBMX1BCNE1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIFNQSTFfTU9TSSAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjRNRlBfSTJDMF9TREEgICAgICgweDA2VUw8PFNZU19HUEJfTUZQTF9QQjRNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBJMkMwX1NEQSAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI0TUZQX1VBUlQ1X1JYRCAgICAoMHgwN1VMPDxTWVNfR1BCX01GUExfUEI0TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgVUFSVDVfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNE1GUF9VU0NJMV9DVEwxICAgKDB4MDhVTDw8U1lTX0dQQl9NRlBMX1BCNE1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIFVTQ0kxX0NUTDEgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjRNRlBfU0MwX0RBVCAgICAgICgweDA5VUw8PFNZU19HUEJfTUZQTF9QQjRNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBTQzBfREFUICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI0TUZQX0kyUzBfTUNMSyAgICAoMHgwYVVMPDxTWVNfR1BCX01GUExfUEI0TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgSTJTMF9NQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNE1GUF9FUFdNMF9DSDEgICAgKDB4MGJVTDw8U1lTX0dQQl9NRlBMX1BCNE1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIEVQV00wX0NIMSAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjRNRlBfVE0xICAgICAgICAgICgweDBlVUw8PFNZU19HUEJfTUZQTF9QQjRNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBUTTEgICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI0TUZQX0lOVDEgICAgICAgICAoMHgwZlVMPDxTWVNfR1BCX01GUExfUEI0TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgSU5UMSAgICAgICAgKi8KKworLyogUEIuNSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQl9NRlBMX1BCNU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjVNRlBfRUFEQzBfQ0g1ICAgICgweDAxVUw8PFNZU19HUEJfTUZQTF9QQjVNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBFQURDMF9DSDUgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI1TUZQX0FDTVAxX04gICAgICAoMHgwMVVMPDxTWVNfR1BCX01GUExfUEI1TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgQUNNUDFfTiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNU1GUF9FQklfQURSMCAgICAgKDB4MDJVTDw8U1lTX0dQQl9NRlBMX1BCNU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIEVCSV9BRFIwICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjVNRlBfU0QwX0RBVDMgICAgICgweDAzVUw8PFNZU19HUEJfTUZQTF9QQjVNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBTRDBfREFUMyAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI1TUZQX1NQSTFfTUlTTyAgICAoMHgwNVVMPDxTWVNfR1BCX01GUExfUEI1TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgU1BJMV9NSVNPICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNU1GUF9JMkMwX1NDTCAgICAgKDB4MDZVTDw8U1lTX0dQQl9NRlBMX1BCNU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIEkyQzBfU0NMICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjVNRlBfVUFSVDVfVFhEICAgICgweDA3VUw8PFNZU19HUEJfTUZQTF9QQjVNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBVQVJUNV9UWEQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI1TUZQX1VTQ0kxX0NUTDAgICAoMHgwOFVMPDxTWVNfR1BCX01GUExfUEI1TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgVVNDSTFfQ1RMMCAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNU1GUF9TQzBfQ0xLICAgICAgKDB4MDlVTDw8U1lTX0dQQl9NRlBMX1BCNU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIFNDMF9DTEsgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjVNRlBfSTJTMF9CQ0xLICAgICgweDBhVUw8PFNZU19HUEJfTUZQTF9QQjVNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBJMlMwX0JDTEsgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI1TUZQX0VQV00wX0NIMCAgICAoMHgwYlVMPDxTWVNfR1BCX01GUExfUEI1TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgRVBXTTBfQ0gwICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNU1GUF9UTTAgICAgICAgICAgKDB4MGVVTDw8U1lTX0dQQl9NRlBMX1BCNU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIFRNMCAgICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjVNRlBfSU5UMCAgICAgICAgICgweDBmVUw8PFNZU19HUEJfTUZQTF9QQjVNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBJTlQwICAgICAgICAqLworCisvKiBQQi42IE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI2TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUExfUEI2TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNk1GUF9FQURDMF9DSDYgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBMX1BCNk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIEVBREMwX0NINiAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjZNRlBfRUJJX25XUkggICAgICgweDAyVUw8PFNZU19HUEJfTUZQTF9QQjZNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBFQklfbldSSCAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI2TUZQX1VTQ0kxX0RBVDEgICAoMHgwNFVMPDxTWVNfR1BCX01GUExfUEI2TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgVVNDSTFfREFUMSAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNk1GUF9VQVJUMV9SWEQgICAgKDB4MDZVTDw8U1lTX0dQQl9NRlBMX1BCNk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIFVBUlQxX1JYRCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjZNRlBfRUJJX25DUzEgICAgICgweDA4VUw8PFNZU19HUEJfTUZQTF9QQjZNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBFQklfbkNTMSAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI2TUZQX0JQV00xX0NINSAgICAoMHgwYVVMPDxTWVNfR1BCX01GUExfUEI2TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgQlBXTTFfQ0g1ICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNk1GUF9FUFdNMV9CUkFLRTEgKDB4MGJVTDw8U1lTX0dQQl9NRlBMX1BCNk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIEVQV00xX0JSQUtFMSovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjZNRlBfRVBXTTFfQ0g1ICAgICgweDBjVUw8PFNZU19HUEJfTUZQTF9QQjZNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBFUFdNMV9DSDUgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI2TUZQX0lOVDQgICAgICAgICAoMHgwZFVMPDxTWVNfR1BCX01GUExfUEI2TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgSU5UNCAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNk1GUF9VU0JfVkJVU19FTiAgKDB4MGVVTDw8U1lTX0dQQl9NRlBMX1BCNk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIFVTQl9WQlVTX0VOICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjZNRlBfQUNNUDFfTyAgICAgICgweDBmVUw8PFNZU19HUEJfTUZQTF9QQjZNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBBQ01QMV9PICAgICAqLworCisvKiBQQi43IE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI3TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUExfUEI3TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjcgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCN01GUF9FQURDMF9DSDcgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBMX1BCN01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIEVBREMwX0NINyAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjdNRlBfRUJJX25XUkwgICAgICgweDAyVUw8PFNZU19HUEJfTUZQTF9QQjdNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBFQklfbldSTCAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI3TUZQX1VTQ0kxX0RBVDAgICAoMHgwNFVMPDxTWVNfR1BCX01GUExfUEI3TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjcgc2V0dGluZyBmb3IgVVNDSTFfREFUMCAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCN01GUF9VQVJUMV9UWEQgICAgKDB4MDZVTDw8U1lTX0dQQl9NRlBMX1BCN01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIFVBUlQxX1RYRCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjdNRlBfRUJJX25DUzAgICAgICgweDA4VUw8PFNZU19HUEJfTUZQTF9QQjdNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBFQklfbkNTMCAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI3TUZQX0JQV00xX0NINCAgICAoMHgwYVVMPDxTWVNfR1BCX01GUExfUEI3TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjcgc2V0dGluZyBmb3IgQlBXTTFfQ0g0ICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCN01GUF9FUFdNMV9CUkFLRTAgKDB4MGJVTDw8U1lTX0dQQl9NRlBMX1BCN01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIEVQV00xX0JSQUtFMCovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjdNRlBfRVBXTTFfQ0g0ICAgICgweDBjVUw8PFNZU19HUEJfTUZQTF9QQjdNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBFUFdNMV9DSDQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI3TUZQX0lOVDUgICAgICAgICAoMHgwZFVMPDxTWVNfR1BCX01GUExfUEI3TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjcgc2V0dGluZyBmb3IgSU5UNSAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCN01GUF9VU0JfVkJVU19TVCAgKDB4MGVVTDw8U1lTX0dQQl9NRlBMX1BCN01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIFVTQl9WQlVTX1NUICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjdNRlBfQUNNUDBfTyAgICAgICgweDBmVUw8PFNZU19HUEJfTUZQTF9QQjdNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBBQ01QMF9PICAgICAqLworCisvKiBQQi44IE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI4TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUEhfUEI4TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOE1GUF9FQURDMF9DSDggICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBIX1BCOE1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIEVBREMwX0NIOCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjhNRlBfRUJJX0FEUjE5ICAgICgweDAyVUw8PFNZU19HUEJfTUZQSF9QQjhNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOCBzZXR0aW5nIGZvciBFQklfQURSMTkgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI4TUZQX1VTQ0kxX0NMSyAgICAoMHgwNFVMPDxTWVNfR1BCX01GUEhfUEI4TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgVVNDSTFfQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOE1GUF9VQVJUMF9SWEQgICAgKDB4MDVVTDw8U1lTX0dQQl9NRlBIX1BCOE1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIFVBUlQwX1JYRCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjhNRlBfVUFSVDFfblJUUyAgICgweDA2VUw8PFNZU19HUEJfTUZQSF9QQjhNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOCBzZXR0aW5nIGZvciBVQVJUMV9uUlRTICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI4TUZQX0kyQzFfU01CU1VTICAoMHgwN1VMPDxTWVNfR1BCX01GUEhfUEI4TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgSTJDMV9TTUJTVVMgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOE1GUF9CUFdNMV9DSDMgICAgKDB4MGFVTDw8U1lTX0dQQl9NRlBIX1BCOE1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIEJQV00xX0NIMyAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjhNRlBfU1BJM19NT1NJICAgICgweDBiVUw8PFNZU19HUEJfTUZQSF9QQjhNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOCBzZXR0aW5nIGZvciBTUEkzX01PU0kgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI4TUZQX0lOVDYgICAgICAgICAoMHgwZFVMPDxTWVNfR1BCX01GUEhfUEI4TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgSU5UNiAgICAgICAgKi8KKworLyogUEIuOSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQl9NRlBIX1BCOU1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjlNRlBfRUFEQzBfQ0g5ICAgICgweDAxVUw8PFNZU19HUEJfTUZQSF9QQjlNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOSBzZXR0aW5nIGZvciBFQURDMF9DSDkgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI5TUZQX0VCSV9BRFIxOCAgICAoMHgwMlVMPDxTWVNfR1BCX01GUEhfUEI5TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgRUJJX0FEUjE4ICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOU1GUF9VU0NJMV9DVEwxICAgKDB4MDRVTDw8U1lTX0dQQl9NRlBIX1BCOU1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIFVTQ0kxX0NUTDEgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjlNRlBfVUFSVDBfVFhEICAgICgweDA1VUw8PFNZU19HUEJfTUZQSF9QQjlNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOSBzZXR0aW5nIGZvciBVQVJUMF9UWEQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI5TUZQX1VBUlQxX25DVFMgICAoMHgwNlVMPDxTWVNfR1BCX01GUEhfUEI5TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgVUFSVDFfbkNUUyAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOU1GUF9JMkMxX1NNQkFMICAgKDB4MDdVTDw8U1lTX0dQQl9NRlBIX1BCOU1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIEkyQzFfU01CQUwgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjlNRlBfQlBXTTFfQ0gyICAgICgweDBhVUw8PFNZU19HUEJfTUZQSF9QQjlNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOSBzZXR0aW5nIGZvciBCUFdNMV9DSDIgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI5TUZQX1NQSTNfTUlTTyAgICAoMHgwYlVMPDxTWVNfR1BCX01GUEhfUEI5TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgU1BJM19NSVNPICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOU1GUF9JTlQ3ICAgICAgICAgKDB4MGRVTDw8U1lTX0dQQl9NRlBIX1BCOU1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIElOVDcgICAgICAgICovCisKKy8qIFBCLjEwIE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxME1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUEhfUEIxME1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTBNRlBfRUFEQzBfQ0gxMCAgKDB4MDFVTDw8U1lTX0dQQl9NRlBIX1BCMTBNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMCBzZXR0aW5nIGZvciBFQURDMF9DSDEwICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEwTUZQX0VCSV9BRFIxNyAgICgweDAyVUw8PFNZU19HUEJfTUZQSF9QQjEwTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTAgc2V0dGluZyBmb3IgRUJJX0FEUjE3ICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxME1GUF9VU0NJMV9DVEwwICAoMHgwNFVMPDxTWVNfR1BCX01GUEhfUEIxME1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIFVTQ0kxX0NUTDAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTBNRlBfVUFSVDBfblJUUyAgKDB4MDVVTDw8U1lTX0dQQl9NRlBIX1BCMTBNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMCBzZXR0aW5nIGZvciBVQVJUMF9uUlRTICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEwTUZQX1VBUlQ0X1JYRCAgICgweDA2VUw8PFNZU19HUEJfTUZQSF9QQjEwTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTAgc2V0dGluZyBmb3IgVUFSVDRfUlhEICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxME1GUF9JMkMxX1NEQSAgICAoMHgwN1VMPDxTWVNfR1BCX01GUEhfUEIxME1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIEkyQzFfU0RBICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTBNRlBfQ0FOMF9SWEQgICAgKDB4MDhVTDw8U1lTX0dQQl9NRlBIX1BCMTBNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMCBzZXR0aW5nIGZvciBDQU4wX1JYRCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEwTUZQX0JQV00xX0NIMSAgICgweDBhVUw8PFNZU19HUEJfTUZQSF9QQjEwTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTAgc2V0dGluZyBmb3IgQlBXTTFfQ0gxICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxME1GUF9TUEkzX1NTICAgICAoMHgwYlVMPDxTWVNfR1BCX01GUEhfUEIxME1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIFNQSTNfU1MgICAgKi8KKworLyogUEIuMTEgTUZQICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjExTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEJfTUZQSF9QQjExTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTEgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMU1GUF9FQURDMF9DSDExICAoMHgwMVVMPDxTWVNfR1BCX01GUEhfUEIxMU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjExIHNldHRpbmcgZm9yIEVBREMwX0NIMTEgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTFNRlBfRUJJX0FEUjE2ICAgKDB4MDJVTDw8U1lTX0dQQl9NRlBIX1BCMTFNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBFQklfQURSMTYgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjExTUZQX1VBUlQwX25DVFMgICgweDA1VUw8PFNZU19HUEJfTUZQSF9QQjExTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTEgc2V0dGluZyBmb3IgVUFSVDBfbkNUUyAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMU1GUF9VQVJUNF9UWEQgICAoMHgwNlVMPDxTWVNfR1BCX01GUEhfUEIxMU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjExIHNldHRpbmcgZm9yIFVBUlQ0X1RYRCAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTFNRlBfSTJDMV9TQ0wgICAgKDB4MDdVTDw8U1lTX0dQQl9NRlBIX1BCMTFNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBJMkMxX1NDTCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjExTUZQX0NBTjBfVFhEICAgICgweDA4VUw8PFNZU19HUEJfTUZQSF9QQjExTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTEgc2V0dGluZyBmb3IgQ0FOMF9UWEQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMU1GUF9TUEkwX0kyU01DTEsgKDB4MDlVTDw8U1lTX0dQQl9NRlBIX1BCMTFNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBTUEkwX0kyU01DTEsqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMU1GUF9CUFdNMV9DSDAgICAoMHgwYVVMPDxTWVNfR1BCX01GUEhfUEIxMU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjExIHNldHRpbmcgZm9yIEJQV00xX0NIMCAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTFNRlBfU1BJM19DTEsgICAgKDB4MGJVTDw8U1lTX0dQQl9NRlBIX1BCMTFNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBTUEkzX0NMSyAgICovCisKKy8qIFBCLjEyIE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMk1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUEhfUEIxMk1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTJNRlBfRUFEQzBfQ0gxMiAgKDB4MDFVTDw8U1lTX0dQQl9NRlBIX1BCMTJNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBFQURDMF9DSDEyICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEyTUZQX0RBQzBfT1VUICAgICgweDAxVUw8PFNZU19HUEJfTUZQSF9QQjEyTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgREFDMF9PVVQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMk1GUF9BQ01QMF9QMiAgICAoMHgwMVVMPDxTWVNfR1BCX01GUEhfUEIxMk1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIEFDTVAwX1AyICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTJNRlBfQUNNUDFfUDIgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBIX1BCMTJNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBBQ01QMV9QMiAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEyTUZQX0VCSV9BRDE1ICAgICgweDAyVUw8PFNZU19HUEJfTUZQSF9QQjEyTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgRUJJX0FEMTUgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMk1GUF9TQzFfQ0xLICAgICAoMHgwM1VMPDxTWVNfR1BCX01GUEhfUEIxMk1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIFNDMV9DTEsgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTJNRlBfU1BJMF9NT1NJICAgKDB4MDRVTDw8U1lTX0dQQl9NRlBIX1BCMTJNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBTUEkwX01PU0kgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEyTUZQX1VTQ0kwX0NMSyAgICgweDA1VUw8PFNZU19HUEJfTUZQSF9QQjEyTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgVVNDSTBfQ0xLICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMk1GUF9VQVJUMF9SWEQgICAoMHgwNlVMPDxTWVNfR1BCX01GUEhfUEIxMk1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIFVBUlQwX1JYRCAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTJNRlBfVUFSVDNfbkNUUyAgKDB4MDdVTDw8U1lTX0dQQl9NRlBIX1BCMTJNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBVQVJUM19uQ1RTICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEyTUZQX0kyQzJfU0RBICAgICgweDA4VUw8PFNZU19HUEJfTUZQSF9QQjEyTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgSTJDMl9TREEgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMk1GUF9TRDBfbkNEICAgICAoMHgwOVVMPDxTWVNfR1BCX01GUEhfUEIxMk1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIFNEMF9uQ0QgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTJNRlBfRVBXTTFfQ0gzICAgKDB4MGJVTDw8U1lTX0dQQl9NRlBIX1BCMTJNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBFUFdNMV9DSDMgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEyTUZQX1RNM19FWFQgICAgICgweDBkVUw8PFNZU19HUEJfTUZQSF9QQjEyTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgVE0zX0VYVCAgICAqLworCisvKiBQQi4xMyBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTNNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQQl9NRlBIX1BCMTNNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEzTUZQX0VBREMwX0NIMTMgICgweDAxVUw8PFNZU19HUEJfTUZQSF9QQjEzTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgRUFEQzBfQ0gxMyAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxM01GUF9EQUMxX09VVCAgICAoMHgwMVVMPDxTWVNfR1BCX01GUEhfUEIxM01GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIERBQzFfT1VUICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTNNRlBfQUNNUDBfUDMgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBIX1BCMTNNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBBQ01QMF9QMyAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEzTUZQX0FDTVAxX1AzICAgICgweDAxVUw8PFNZU19HUEJfTUZQSF9QQjEzTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgQUNNUDFfUDMgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxM01GUF9FQklfQUQxNCAgICAoMHgwMlVMPDxTWVNfR1BCX01GUEhfUEIxM01GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIEVCSV9BRDE0ICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTNNRlBfU0MxX0RBVCAgICAgKDB4MDNVTDw8U1lTX0dQQl9NRlBIX1BCMTNNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBTQzFfREFUICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEzTUZQX1NQSTBfTUlTTyAgICgweDA0VUw8PFNZU19HUEJfTUZQSF9QQjEzTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgU1BJMF9NSVNPICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxM01GUF9VU0NJMF9EQVQwICAoMHgwNVVMPDxTWVNfR1BCX01GUEhfUEIxM01GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIFVTQ0kwX0RBVDAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTNNRlBfVUFSVDBfVFhEICAgKDB4MDZVTDw8U1lTX0dQQl9NRlBIX1BCMTNNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBVQVJUMF9UWEQgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEzTUZQX1VBUlQzX25SVFMgICgweDA3VUw8PFNZU19HUEJfTUZQSF9QQjEzTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgVUFSVDNfblJUUyAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxM01GUF9JMkMyX1NDTCAgICAoMHgwOFVMPDxTWVNfR1BCX01GUEhfUEIxM01GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIEkyQzJfU0NMICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTNNRlBfRVBXTTFfQ0gyICAgKDB4MGJVTDw8U1lTX0dQQl9NRlBIX1BCMTNNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBFUFdNMV9DSDIgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEzTUZQX1RNMl9FWFQgICAgICgweDBkVUw8PFNZU19HUEJfTUZQSF9QQjEzTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgVE0yX0VYVCAgICAqLworCisvKiBQQi4xNCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTRNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQQl9NRlBIX1BCMTRNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE0TUZQX0VBREMwX0NIMTQgICgweDAxVUw8PFNZU19HUEJfTUZQSF9QQjE0TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgRUFEQzBfQ0gxNCAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNE1GUF9FQklfQUQxMyAgICAoMHgwMlVMPDxTWVNfR1BCX01GUEhfUEIxNE1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIEVCSV9BRDEzICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTRNRlBfU0MxX1JTVCAgICAgKDB4MDNVTDw8U1lTX0dQQl9NRlBIX1BCMTRNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBTQzFfUlNUICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE0TUZQX1NQSTBfQ0xLICAgICgweDA0VUw8PFNZU19HUEJfTUZQSF9QQjE0TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgU1BJMF9DTEsgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNE1GUF9VU0NJMF9EQVQxICAoMHgwNVVMPDxTWVNfR1BCX01GUEhfUEIxNE1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIFVTQ0kwX0RBVDEgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTRNRlBfVUFSVDBfblJUUyAgKDB4MDZVTDw8U1lTX0dQQl9NRlBIX1BCMTRNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBVQVJUMF9uUlRTICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE0TUZQX1VBUlQzX1JYRCAgICgweDA3VUw8PFNZU19HUEJfTUZQSF9QQjE0TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgVUFSVDNfUlhEICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNE1GUF9JMkMyX1NNQlNVUyAoMHgwOFVMPDxTWVNfR1BCX01GUEhfUEIxNE1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIEkyQzJfU01CU1VTKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTRNRlBfRVBXTTFfQ0gxICAgKDB4MGJVTDw8U1lTX0dQQl9NRlBIX1BCMTRNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBFUFdNMV9DSDEgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE0TUZQX1RNMV9FWFQgICAgICgweDBkVUw8PFNZU19HUEJfTUZQSF9QQjE0TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgVE0xX0VYVCAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNE1GUF9DTEtPICAgICAgICAoMHgwZVVMPDxTWVNfR1BCX01GUEhfUEIxNE1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIENMS08gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTRNRlBfVVNCX1ZCVVNfU1QgKDB4MGZVTDw8U1lTX0dQQl9NRlBIX1BCMTRNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBVU0JfVkJVU19TVCovCisKKy8qIFBCLjE1IE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNU1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUEhfUEIxNU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTVNRlBfRUFEQzBfQ0gxNSAgKDB4MDFVTDw8U1lTX0dQQl9NRlBIX1BCMTVNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBFQURDMF9DSDE1ICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE1TUZQX0VCSV9BRDEyICAgICgweDAyVUw8PFNZU19HUEJfTUZQSF9QQjE1TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgRUJJX0FEMTIgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNU1GUF9TQzFfUFdSICAgICAoMHgwM1VMPDxTWVNfR1BCX01GUEhfUEIxNU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIFNDMV9QV1IgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTVNRlBfU1BJMF9TUyAgICAgKDB4MDRVTDw8U1lTX0dQQl9NRlBIX1BCMTVNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBTUEkwX1NTICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE1TUZQX1VTQ0kwX0NUTDEgICgweDA1VUw8PFNZU19HUEJfTUZQSF9QQjE1TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgVVNDSTBfQ1RMMSAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNU1GUF9VQVJUMF9uQ1RTICAoMHgwNlVMPDxTWVNfR1BCX01GUEhfUEIxNU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIFVBUlQwX25DVFMgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTVNRlBfVUFSVDNfVFhEICAgKDB4MDdVTDw8U1lTX0dQQl9NRlBIX1BCMTVNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBVQVJUM19UWEQgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE1TUZQX0kyQzJfU01CQUwgICgweDA4VUw8PFNZU19HUEJfTUZQSF9QQjE1TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgSTJDMl9TTUJBTCAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNU1GUF9FUFdNMV9DSDAgICAoMHgwYlVMPDxTWVNfR1BCX01GUEhfUEIxNU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIEVQV00xX0NIMCAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTVNRlBfVE0wX0VYVCAgICAgKDB4MGRVTDw8U1lTX0dQQl9NRlBIX1BCMTVNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBUTTBfRVhUICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE1TUZQX1VTQl9WQlVTX0VOICgweDBlVUw8PFNZU19HUEJfTUZQSF9QQjE1TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgVVNCX1ZCVVNfRU4qLworCisvKiBQQy4wIE1GUCAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMwTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BDX01GUExfUEMwTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDME1GUF9FQklfQUQwICAgICAgKDB4MDJVTDw8U1lTX0dQQ19NRlBMX1BDME1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMwIHNldHRpbmcgZm9yIEVCSV9BRDAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzBNRlBfUVNQSTBfTU9TSTAgICgweDA0VUw8PFNZU19HUENfTUZQTF9QQzBNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBRU1BJMF9NT1NJMCAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMwTUZQX1NDMV9DTEsgICAgICAoMHgwNVVMPDxTWVNfR1BDX01GUExfUEMwTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgU0MxX0NMSyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDME1GUF9JMlMwX0xSQ0sgICAgKDB4MDZVTDw8U1lTX0dQQ19NRlBMX1BDME1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMwIHNldHRpbmcgZm9yIEkyUzBfTFJDSyAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzBNRlBfU1BJMV9TUyAgICAgICgweDA3VUw8PFNZU19HUENfTUZQTF9QQzBNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBTUEkxX1NTICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMwTUZQX1VBUlQyX1JYRCAgICAoMHgwOFVMPDxTWVNfR1BDX01GUExfUEMwTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgVUFSVDJfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDME1GUF9JMkMwX1NEQSAgICAgKDB4MDlVTDw8U1lTX0dQQ19NRlBMX1BDME1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMwIHNldHRpbmcgZm9yIEkyQzBfU0RBICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzBNRlBfRVBXTTFfQ0g1ICAgICgweDBjVUw8PFNZU19HUENfTUZQTF9QQzBNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBFUFdNMV9DSDUgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMwTUZQX0FDTVAxX08gICAgICAoMHgwZVVMPDxTWVNfR1BDX01GUExfUEMwTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgQUNNUDFfTyAgICAgKi8KKworLyogUEMuMSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQ19NRlBMX1BDMU1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzFNRlBfRUJJX0FEMSAgICAgICgweDAyVUw8PFNZU19HUENfTUZQTF9QQzFNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBFQklfQUQxICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMxTUZQX1FTUEkwX01JU08wICAoMHgwNFVMPDxTWVNfR1BDX01GUExfUEMxTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzEgc2V0dGluZyBmb3IgUVNQSTBfTUlTTzAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMU1GUF9TQzFfREFUICAgICAgKDB4MDVVTDw8U1lTX0dQQ19NRlBMX1BDMU1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIFNDMV9EQVQgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzFNRlBfSTJTMF9ETyAgICAgICgweDA2VUw8PFNZU19HUENfTUZQTF9QQzFNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBJMlMwX0RPICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMxTUZQX1NQSTFfQ0xLICAgICAoMHgwN1VMPDxTWVNfR1BDX01GUExfUEMxTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzEgc2V0dGluZyBmb3IgU1BJMV9DTEsgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMU1GUF9VQVJUMl9UWEQgICAgKDB4MDhVTDw8U1lTX0dQQ19NRlBMX1BDMU1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIFVBUlQyX1RYRCAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzFNRlBfSTJDMF9TQ0wgICAgICgweDA5VUw8PFNZU19HUENfTUZQTF9QQzFNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBJMkMwX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMxTUZQX0VQV00xX0NINCAgICAoMHgwY1VMPDxTWVNfR1BDX01GUExfUEMxTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzEgc2V0dGluZyBmb3IgRVBXTTFfQ0g0ICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMU1GUF9BQ01QMF9PICAgICAgKDB4MGVVTDw8U1lTX0dQQ19NRlBMX1BDMU1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIEFDTVAwX08gICAgICovCisKKy8qIFBDLjIgTUZQICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzJNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUENfTUZQTF9QQzJNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMiBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMyTUZQX0VCSV9BRDIgICAgICAoMHgwMlVMPDxTWVNfR1BDX01GUExfUEMyTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgRUJJX0FEMiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMk1GUF9RU1BJMF9DTEsgICAgKDB4MDRVTDw8U1lTX0dQQ19NRlBMX1BDMk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMyIHNldHRpbmcgZm9yIFFTUEkwX0NMSyAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzJNRlBfU0MxX1JTVCAgICAgICgweDA1VUw8PFNZU19HUENfTUZQTF9QQzJNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMiBzZXR0aW5nIGZvciBTQzFfUlNUICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMyTUZQX0kyUzBfREkgICAgICAoMHgwNlVMPDxTWVNfR1BDX01GUExfUEMyTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgSTJTMF9ESSAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMk1GUF9TUEkxX01PU0kgICAgKDB4MDdVTDw8U1lTX0dQQ19NRlBMX1BDMk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMyIHNldHRpbmcgZm9yIFNQSTFfTU9TSSAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzJNRlBfVUFSVDJfbkNUUyAgICgweDA4VUw8PFNZU19HUENfTUZQTF9QQzJNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMiBzZXR0aW5nIGZvciBVQVJUMl9uQ1RTICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMyTUZQX0kyQzBfU01CU1VTICAoMHgwOVVMPDxTWVNfR1BDX01GUExfUEMyTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgSTJDMF9TTUJTVVMgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMk1GUF9VQVJUM19SWEQgICAgKDB4MGJVTDw8U1lTX0dQQ19NRlBMX1BDMk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMyIHNldHRpbmcgZm9yIFVBUlQzX1JYRCAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzJNRlBfRVBXTTFfQ0gzICAgICgweDBjVUw8PFNZU19HUENfTUZQTF9QQzJNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMiBzZXR0aW5nIGZvciBFUFdNMV9DSDMgICAqLworCisvKiBQQy4zIE1GUCAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMzTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BDX01GUExfUEMzTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDM01GUF9FQklfQUQzICAgICAgKDB4MDJVTDw8U1lTX0dQQ19NRlBMX1BDM01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMzIHNldHRpbmcgZm9yIEVCSV9BRDMgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzNNRlBfUVNQSTBfU1MgICAgICgweDA0VUw8PFNZU19HUENfTUZQTF9QQzNNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBRU1BJMF9TUyAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMzTUZQX1NDMV9QV1IgICAgICAoMHgwNVVMPDxTWVNfR1BDX01GUExfUEMzTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgU0MxX1BXUiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDM01GUF9JMlMwX01DTEsgICAgKDB4MDZVTDw8U1lTX0dQQ19NRlBMX1BDM01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMzIHNldHRpbmcgZm9yIEkyUzBfTUNMSyAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzNNRlBfU1BJMV9NSVNPICAgICgweDA3VUw8PFNZU19HUENfTUZQTF9QQzNNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBTUEkxX01JU08gICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMzTUZQX1VBUlQyX25SVFMgICAoMHgwOFVMPDxTWVNfR1BDX01GUExfUEMzTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgVUFSVDJfblJUUyAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDM01GUF9JMkMwX1NNQkFMICAgKDB4MDlVTDw8U1lTX0dQQ19NRlBMX1BDM01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMzIHNldHRpbmcgZm9yIEkyQzBfU01CQUwgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzNNRlBfVUFSVDNfVFhEICAgICgweDBiVUw8PFNZU19HUENfTUZQTF9QQzNNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBVQVJUM19UWEQgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMzTUZQX0VQV00xX0NIMiAgICAoMHgwY1VMPDxTWVNfR1BDX01GUExfUEMzTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgRVBXTTFfQ0gyICAgKi8KKworLyogUEMuNCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNE1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQ19NRlBMX1BDNE1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzRNRlBfRUJJX0FENCAgICAgICgweDAyVUw8PFNZU19HUENfTUZQTF9QQzRNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBFQklfQUQ0ICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM0TUZQX1FTUEkwX01PU0kxICAoMHgwNFVMPDxTWVNfR1BDX01GUExfUEM0TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgUVNQSTBfTU9TSTEgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNE1GUF9TQzFfbkNEICAgICAgKDB4MDVVTDw8U1lTX0dQQ19NRlBMX1BDNE1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIFNDMV9uQ0QgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzRNRlBfSTJTMF9CQ0xLICAgICgweDA2VUw8PFNZU19HUENfTUZQTF9QQzRNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBJMlMwX0JDTEsgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM0TUZQX1NQSTFfSTJTTUNMSyAoMHgwN1VMPDxTWVNfR1BDX01GUExfUEM0TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgU1BJMV9JMlNNQ0xLKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNE1GUF9VQVJUMl9SWEQgICAgKDB4MDhVTDw8U1lTX0dQQ19NRlBMX1BDNE1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIFVBUlQyX1JYRCAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzRNRlBfSTJDMV9TREEgICAgICgweDA5VUw8PFNZU19HUENfTUZQTF9QQzRNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBJMkMxX1NEQSAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM0TUZQX0NBTjBfUlhEICAgICAoMHgwYVVMPDxTWVNfR1BDX01GUExfUEM0TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgQ0FOMF9SWEQgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNE1GUF9VQVJUNF9SWEQgICAgKDB4MGJVTDw8U1lTX0dQQ19NRlBMX1BDNE1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIFVBUlQ0X1JYRCAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzRNRlBfRVBXTTFfQ0gxICAgICgweDBjVUw8PFNZU19HUENfTUZQTF9QQzRNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBFUFdNMV9DSDEgICAqLworCisvKiBQQy41IE1GUCAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM1TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BDX01GUExfUEM1TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzUgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNU1GUF9FQklfQUQ1ICAgICAgKDB4MDJVTDw8U1lTX0dQQ19NRlBMX1BDNU1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM1IHNldHRpbmcgZm9yIEVCSV9BRDUgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzVNRlBfUVNQSTBfTUlTTzEgICgweDA0VUw8PFNZU19HUENfTUZQTF9QQzVNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNSBzZXR0aW5nIGZvciBRU1BJMF9NSVNPMSAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM1TUZQX1VBUlQyX1RYRCAgICAoMHgwOFVMPDxTWVNfR1BDX01GUExfUEM1TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzUgc2V0dGluZyBmb3IgVUFSVDJfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNU1GUF9JMkMxX1NDTCAgICAgKDB4MDlVTDw8U1lTX0dQQ19NRlBMX1BDNU1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM1IHNldHRpbmcgZm9yIEkyQzFfU0NMICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzVNRlBfQ0FOMF9UWEQgICAgICgweDBhVUw8PFNZU19HUENfTUZQTF9QQzVNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNSBzZXR0aW5nIGZvciBDQU4wX1RYRCAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM1TUZQX1VBUlQ0X1RYRCAgICAoMHgwYlVMPDxTWVNfR1BDX01GUExfUEM1TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzUgc2V0dGluZyBmb3IgVUFSVDRfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNU1GUF9FUFdNMV9DSDAgICAgKDB4MGNVTDw8U1lTX0dQQ19NRlBMX1BDNU1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM1IHNldHRpbmcgZm9yIEVQV00xX0NIMCAgICovCisKKy8qIFBDLjYgTUZQICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzZNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUENfTUZQTF9QQzZNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM2TUZQX0VCSV9BRDggICAgICAoMHgwMlVMPDxTWVNfR1BDX01GUExfUEM2TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgRUJJX0FEOCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNk1GUF9TUEkxX01PU0kgICAgKDB4MDRVTDw8U1lTX0dQQ19NRlBMX1BDNk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM2IHNldHRpbmcgZm9yIFNQSTFfTU9TSSAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzZNRlBfVUFSVDRfUlhEICAgICgweDA1VUw8PFNZU19HUENfTUZQTF9QQzZNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBVQVJUNF9SWEQgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM2TUZQX1NDMl9SU1QgICAgICAoMHgwNlVMPDxTWVNfR1BDX01GUExfUEM2TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgU0MyX1JTVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNk1GUF9VQVJUMF9uUlRTICAgKDB4MDdVTDw8U1lTX0dQQ19NRlBMX1BDNk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM2IHNldHRpbmcgZm9yIFVBUlQwX25SVFMgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzZNRlBfSTJDMV9TTUJTVVMgICgweDA4VUw8PFNZU19HUENfTUZQTF9QQzZNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBJMkMxX1NNQlNVUyAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM2TUZQX0VQV00xX0NIMyAgICAoMHgwYlVMPDxTWVNfR1BDX01GUExfUEM2TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgRVBXTTFfQ0gzICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNk1GUF9CUFdNMV9DSDEgICAgKDB4MGNVTDw8U1lTX0dQQ19NRlBMX1BDNk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM2IHNldHRpbmcgZm9yIEJQV00xX0NIMSAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzZNRlBfVE0xICAgICAgICAgICgweDBlVUw8PFNZU19HUENfTUZQTF9QQzZNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBUTTEgICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM2TUZQX0lOVDIgICAgICAgICAoMHgwZlVMPDxTWVNfR1BDX01GUExfUEM2TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgSU5UMiAgICAgICAgKi8KKworLyogUEMuNyBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDN01GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQ19NRlBMX1BDN01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzdNRlBfRUJJX0FEOSAgICAgICgweDAyVUw8PFNZU19HUENfTUZQTF9QQzdNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBFQklfQUQ5ICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM3TUZQX1NQSTFfTUlTTyAgICAoMHgwNFVMPDxTWVNfR1BDX01GUExfUEM3TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgU1BJMV9NSVNPICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDN01GUF9VQVJUNF9UWEQgICAgKDB4MDVVTDw8U1lTX0dQQ19NRlBMX1BDN01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIFVBUlQ0X1RYRCAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzdNRlBfU0MyX1BXUiAgICAgICgweDA2VUw8PFNZU19HUENfTUZQTF9QQzdNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBTQzJfUFdSICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM3TUZQX1VBUlQwX25DVFMgICAoMHgwN1VMPDxTWVNfR1BDX01GUExfUEM3TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgVUFSVDBfbkNUUyAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDN01GUF9JMkMxX1NNQkFMICAgKDB4MDhVTDw8U1lTX0dQQ19NRlBMX1BDN01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIEkyQzFfU01CQUwgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzdNRlBfRVBXTTFfQ0gyICAgICgweDBiVUw8PFNZU19HUENfTUZQTF9QQzdNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBFUFdNMV9DSDIgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM3TUZQX0JQV00xX0NIMCAgICAoMHgwY1VMPDxTWVNfR1BDX01GUExfUEM3TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgQlBXTTFfQ0gwICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDN01GUF9UTTAgICAgICAgICAgKDB4MGVVTDw8U1lTX0dQQ19NRlBMX1BDN01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIFRNMCAgICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzdNRlBfSU5UMyAgICAgICAgICgweDBmVUw8PFNZU19HUENfTUZQTF9QQzdNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBJTlQzICAgICAgICAqLworCisvKiBQQy44IE1GUCAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEM4TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BDX01GUEhfUEM4TUZQX1BvcykgLyohPCBHUENfTUZQSCBQQzggc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDOE1GUF9FQklfQURSMTYgICAgKDB4MDJVTDw8U1lTX0dQQ19NRlBIX1BDOE1GUF9Qb3MpIC8qITwgR1BDX01GUEggUEM4IHNldHRpbmcgZm9yIEVCSV9BRFIxNiAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzhNRlBfSTJDMF9TREEgICAgICgweDA0VUw8PFNZU19HUENfTUZQSF9QQzhNRlBfUG9zKSAvKiE8IEdQQ19NRlBIIFBDOCBzZXR0aW5nIGZvciBJMkMwX1NEQSAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEM4TUZQX1VBUlQ0X25DVFMgICAoMHgwNVVMPDxTWVNfR1BDX01GUEhfUEM4TUZQX1BvcykgLyohPCBHUENfTUZQSCBQQzggc2V0dGluZyBmb3IgVUFSVDRfbkNUUyAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDOE1GUF9VQVJUMV9SWEQgICAgKDB4MDhVTDw8U1lTX0dQQ19NRlBIX1BDOE1GUF9Qb3MpIC8qITwgR1BDX01GUEggUEM4IHNldHRpbmcgZm9yIFVBUlQxX1JYRCAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzhNRlBfRVBXTTFfQ0gxICAgICgweDBiVUw8PFNZU19HUENfTUZQSF9QQzhNRlBfUG9zKSAvKiE8IEdQQ19NRlBIIFBDOCBzZXR0aW5nIGZvciBFUFdNMV9DSDEgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEM4TUZQX0JQV00xX0NINCAgICAoMHgwY1VMPDxTWVNfR1BDX01GUEhfUEM4TUZQX1BvcykgLyohPCBHUENfTUZQSCBQQzggc2V0dGluZyBmb3IgQlBXTTFfQ0g0ICAgKi8KKworLyogUEMuOSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDOU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQ19NRlBIX1BDOU1GUF9Qb3MpIC8qITwgR1BDX01GUEggUEM5IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzlNRlBfRUJJX0FEUjcgICAgICgweDAyVUw8PFNZU19HUENfTUZQSF9QQzlNRlBfUG9zKSAvKiE8IEdQQ19NRlBIIFBDOSBzZXR0aW5nIGZvciBFQklfQURSNyAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEM5TUZQX1NQSTNfU1MgICAgICAoMHgwNlVMPDxTWVNfR1BDX01GUEhfUEM5TUZQX1BvcykgLyohPCBHUENfTUZQSCBQQzkgc2V0dGluZyBmb3IgU1BJM19TUyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDOU1GUF9VQVJUM19SWEQgICAgKDB4MDdVTDw8U1lTX0dQQ19NRlBIX1BDOU1GUF9Qb3MpIC8qITwgR1BDX01GUEggUEM5IHNldHRpbmcgZm9yIFVBUlQzX1JYRCAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzlNRlBfRVBXTTFfQ0gzICAgICgweDBjVUw8PFNZU19HUENfTUZQSF9QQzlNRlBfUG9zKSAvKiE8IEdQQ19NRlBIIFBDOSBzZXR0aW5nIGZvciBFUFdNMV9DSDMgICAqLworCisvKiBQQy4xMCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTBNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQQ19NRlBIX1BDMTBNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMCBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEwTUZQX0VCSV9BRFI2ICAgICgweDAyVUw8PFNZU19HUENfTUZQSF9QQzEwTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTAgc2V0dGluZyBmb3IgRUJJX0FEUjYgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxME1GUF9TUEkzX0NMSyAgICAoMHgwNlVMPDxTWVNfR1BDX01GUEhfUEMxME1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEwIHNldHRpbmcgZm9yIFNQSTNfQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTBNRlBfVUFSVDNfVFhEICAgKDB4MDdVTDw8U1lTX0dQQ19NRlBIX1BDMTBNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMCBzZXR0aW5nIGZvciBVQVJUM19UWEQgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEwTUZQX0VDQVAxX0lDMCAgICgweDBiVUw8PFNZU19HUENfTUZQSF9QQzEwTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTAgc2V0dGluZyBmb3IgRUNBUDFfSUMwICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxME1GUF9FUFdNMV9DSDIgICAoMHgwY1VMPDxTWVNfR1BDX01GUEhfUEMxME1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEwIHNldHRpbmcgZm9yIEVQV00xX0NIMiAgKi8KKworLyogUEMuMTEgTUZQICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzExTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUENfTUZQSF9QQzExTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTEgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMU1GUF9FQklfQURSNSAgICAoMHgwMlVMPDxTWVNfR1BDX01GUEhfUEMxMU1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzExIHNldHRpbmcgZm9yIEVCSV9BRFI1ICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTFNRlBfVUFSVDBfUlhEICAgKDB4MDNVTDw8U1lTX0dQQ19NRlBIX1BDMTFNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMSBzZXR0aW5nIGZvciBVQVJUMF9SWEQgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzExTUZQX0kyQzBfU0RBICAgICgweDA0VUw8PFNZU19HUENfTUZQSF9QQzExTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTEgc2V0dGluZyBmb3IgSTJDMF9TREEgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMU1GUF9TUEkzX01PU0kgICAoMHgwNlVMPDxTWVNfR1BDX01GUEhfUEMxMU1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzExIHNldHRpbmcgZm9yIFNQSTNfTU9TSSAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTFNRlBfRUNBUDFfSUMxICAgKDB4MGJVTDw8U1lTX0dQQ19NRlBIX1BDMTFNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMSBzZXR0aW5nIGZvciBFQ0FQMV9JQzEgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzExTUZQX0VQV00xX0NIMSAgICgweDBjVUw8PFNZU19HUENfTUZQSF9QQzExTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTEgc2V0dGluZyBmb3IgRVBXTTFfQ0gxICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMU1GUF9BQ01QMV9PICAgICAoMHgwZVVMPDxTWVNfR1BDX01GUEhfUEMxMU1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzExIHNldHRpbmcgZm9yIEFDTVAxX08gICAgKi8KKworLyogUEMuMTIgTUZQICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEyTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUENfTUZQSF9QQzEyTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTIgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMk1GUF9FQklfQURSNCAgICAoMHgwMlVMPDxTWVNfR1BDX01GUEhfUEMxMk1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEyIHNldHRpbmcgZm9yIEVCSV9BRFI0ICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTJNRlBfVUFSVDBfVFhEICAgKDB4MDNVTDw8U1lTX0dQQ19NRlBIX1BDMTJNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBVQVJUMF9UWEQgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEyTUZQX0kyQzBfU0NMICAgICgweDA0VUw8PFNZU19HUENfTUZQSF9QQzEyTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTIgc2V0dGluZyBmb3IgSTJDMF9TQ0wgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMk1GUF9TUEkzX01JU08gICAoMHgwNlVMPDxTWVNfR1BDX01GUEhfUEMxMk1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEyIHNldHRpbmcgZm9yIFNQSTNfTUlTTyAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTJNRlBfU0MwX25DRCAgICAgKDB4MDlVTDw8U1lTX0dQQ19NRlBIX1BDMTJNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBTQzBfbkNEICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEyTUZQX0VDQVAxX0lDMiAgICgweDBiVUw8PFNZU19HUENfTUZQSF9QQzEyTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTIgc2V0dGluZyBmb3IgRUNBUDFfSUMyICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMk1GUF9FUFdNMV9DSDAgICAoMHgwY1VMPDxTWVNfR1BDX01GUEhfUEMxMk1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEyIHNldHRpbmcgZm9yIEVQV00xX0NIMCAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTJNRlBfQUNNUDBfTyAgICAgKDB4MGVVTDw8U1lTX0dQQ19NRlBIX1BDMTJNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBBQ01QMF9PICAgICovCisKKy8qIFBDLjEzIE1GUCAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxM01GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BDX01GUEhfUEMxM01GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEzIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTNNRlBfRUJJX0FEUjEwICAgKDB4MDJVTDw8U1lTX0dQQ19NRlBIX1BDMTNNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBFQklfQURSMTAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEzTUZQX1NDMl9uQ0QgICAgICgweDAzVUw8PFNZU19HUENfTUZQSF9QQzEzTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTMgc2V0dGluZyBmb3IgU0MyX25DRCAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxM01GUF9TUEkyX0kyU01DTEsgKDB4MDRVTDw8U1lTX0dQQ19NRlBIX1BDMTNNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBTUEkyX0kyU01DTEsqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxM01GUF9VU0NJMF9DVEwwICAoMHgwNlVMPDxTWVNfR1BDX01GUEhfUEMxM01GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEzIHNldHRpbmcgZm9yIFVTQ0kwX0NUTDAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTNNRlBfVUFSVDJfVFhEICAgKDB4MDdVTDw8U1lTX0dQQ19NRlBIX1BDMTNNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBVQVJUMl9UWEQgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEzTUZQX0JQV00wX0NINCAgICgweDA5VUw8PFNZU19HUENfTUZQSF9QQzEzTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTMgc2V0dGluZyBmb3IgQlBXTTBfQ0g0ICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxM01GUF9DTEtPICAgICAgICAoMHgwZFVMPDxTWVNfR1BDX01GUEhfUEMxM01GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEzIHNldHRpbmcgZm9yIENMS08gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTNNRlBfRUFEQzBfU1QgICAgKDB4MGVVTDw8U1lTX0dQQ19NRlBIX1BDMTNNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBFQURDMF9TVCAgICovCisKKy8qIFBELjAgTUZQICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDBNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUERfTUZQTF9QRDBNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQwTUZQX0VCSV9BRDEzICAgICAoMHgwMlVMPDxTWVNfR1BEX01GUExfUEQwTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDAgc2V0dGluZyBmb3IgRUJJX0FEMTMgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEME1GUF9VU0NJMF9DTEsgICAgKDB4MDNVTDw8U1lTX0dQRF9NRlBMX1BEME1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQwIHNldHRpbmcgZm9yIFVTQ0kwX0NMSyAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDBNRlBfU1BJMF9NT1NJICAgICgweDA0VUw8PFNZU19HUERfTUZQTF9QRDBNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMCBzZXR0aW5nIGZvciBTUEkwX01PU0kgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQwTUZQX1VBUlQzX1JYRCAgICAoMHgwNVVMPDxTWVNfR1BEX01GUExfUEQwTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDAgc2V0dGluZyBmb3IgVUFSVDNfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEME1GUF9JMkMyX1NEQSAgICAgKDB4MDZVTDw8U1lTX0dQRF9NRlBMX1BEME1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQwIHNldHRpbmcgZm9yIEkyQzJfU0RBICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDBNRlBfU0MyX0NMSyAgICAgICgweDA3VUw8PFNZU19HUERfTUZQTF9QRDBNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMCBzZXR0aW5nIGZvciBTQzJfQ0xLICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQwTUZQX1RNMiAgICAgICAgICAoMHgwZVVMPDxTWVNfR1BEX01GUExfUEQwTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDAgc2V0dGluZyBmb3IgVE0yICAgICAgICAgKi8KKworLyogUEQuMSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQRF9NRlBMX1BEMU1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQxIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDFNRlBfRUJJX0FEMTIgICAgICgweDAyVUw8PFNZU19HUERfTUZQTF9QRDFNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMSBzZXR0aW5nIGZvciBFQklfQUQxMiAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQxTUZQX1VTQ0kwX0RBVDAgICAoMHgwM1VMPDxTWVNfR1BEX01GUExfUEQxTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDEgc2V0dGluZyBmb3IgVVNDSTBfREFUMCAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMU1GUF9TUEkwX01JU08gICAgKDB4MDRVTDw8U1lTX0dQRF9NRlBMX1BEMU1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQxIHNldHRpbmcgZm9yIFNQSTBfTUlTTyAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDFNRlBfVUFSVDNfVFhEICAgICgweDA1VUw8PFNZU19HUERfTUZQTF9QRDFNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMSBzZXR0aW5nIGZvciBVQVJUM19UWEQgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQxTUZQX0kyQzJfU0NMICAgICAoMHgwNlVMPDxTWVNfR1BEX01GUExfUEQxTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDEgc2V0dGluZyBmb3IgSTJDMl9TQ0wgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMU1GUF9TQzJfREFUICAgICAgKDB4MDdVTDw8U1lTX0dQRF9NRlBMX1BEMU1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQxIHNldHRpbmcgZm9yIFNDMl9EQVQgICAgICovCisKKy8qIFBELjIgTUZQICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDJNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUERfTUZQTF9QRDJNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMiBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQyTUZQX0VCSV9BRDExICAgICAoMHgwMlVMPDxTWVNfR1BEX01GUExfUEQyTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDIgc2V0dGluZyBmb3IgRUJJX0FEMTEgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMk1GUF9VU0NJMF9EQVQxICAgKDB4MDNVTDw8U1lTX0dQRF9NRlBMX1BEMk1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQyIHNldHRpbmcgZm9yIFVTQ0kwX0RBVDEgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDJNRlBfU1BJMF9DTEsgICAgICgweDA0VUw8PFNZU19HUERfTUZQTF9QRDJNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMiBzZXR0aW5nIGZvciBTUEkwX0NMSyAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQyTUZQX1VBUlQzX25DVFMgICAoMHgwNVVMPDxTWVNfR1BEX01GUExfUEQyTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDIgc2V0dGluZyBmb3IgVUFSVDNfbkNUUyAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMk1GUF9TQzJfUlNUICAgICAgKDB4MDdVTDw8U1lTX0dQRF9NRlBMX1BEMk1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQyIHNldHRpbmcgZm9yIFNDMl9SU1QgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDJNRlBfVUFSVDBfUlhEICAgICgweDA5VUw8PFNZU19HUERfTUZQTF9QRDJNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMiBzZXR0aW5nIGZvciBVQVJUMF9SWEQgICAqLworCisvKiBQRC4zIE1GUCAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQzTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BEX01GUExfUEQzTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDMgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEM01GUF9FQklfQUQxMCAgICAgKDB4MDJVTDw8U1lTX0dQRF9NRlBMX1BEM01GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQzIHNldHRpbmcgZm9yIEVCSV9BRDEwICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDNNRlBfVVNDSTBfQ1RMMSAgICgweDAzVUw8PFNZU19HUERfTUZQTF9QRDNNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMyBzZXR0aW5nIGZvciBVU0NJMF9DVEwxICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQzTUZQX1NQSTBfU1MgICAgICAoMHgwNFVMPDxTWVNfR1BEX01GUExfUEQzTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDMgc2V0dGluZyBmb3IgU1BJMF9TUyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEM01GUF9VQVJUM19uUlRTICAgKDB4MDVVTDw8U1lTX0dQRF9NRlBMX1BEM01GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQzIHNldHRpbmcgZm9yIFVBUlQzX25SVFMgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDNNRlBfVVNDSTFfQ1RMMCAgICgweDA2VUw8PFNZU19HUERfTUZQTF9QRDNNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMyBzZXR0aW5nIGZvciBVU0NJMV9DVEwwICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQzTUZQX1NDMl9QV1IgICAgICAoMHgwN1VMPDxTWVNfR1BEX01GUExfUEQzTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDMgc2V0dGluZyBmb3IgU0MyX1BXUiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEM01GUF9TQzFfbkNEICAgICAgKDB4MDhVTDw8U1lTX0dQRF9NRlBMX1BEM01GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQzIHNldHRpbmcgZm9yIFNDMV9uQ0QgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDNNRlBfVUFSVDBfVFhEICAgICgweDA5VUw8PFNZU19HUERfTUZQTF9QRDNNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMyBzZXR0aW5nIGZvciBVQVJUMF9UWEQgICAqLworCisvKiBQRC40IE1GUCAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ0TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BEX01GUExfUEQ0TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDQgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENE1GUF9VU0NJMF9DVEwwICAgKDB4MDNVTDw8U1lTX0dQRF9NRlBMX1BENE1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ0IHNldHRpbmcgZm9yIFVTQ0kwX0NUTDAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDRNRlBfSTJDMV9TREEgICAgICgweDA0VUw8PFNZU19HUERfTUZQTF9QRDRNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENCBzZXR0aW5nIGZvciBJMkMxX1NEQSAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ0TUZQX1NQSTFfU1MgICAgICAoMHgwNVVMPDxTWVNfR1BEX01GUExfUEQ0TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDQgc2V0dGluZyBmb3IgU1BJMV9TUyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENE1GUF9VU0NJMV9DVEwxICAgKDB4MDZVTDw8U1lTX0dQRF9NRlBMX1BENE1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ0IHNldHRpbmcgZm9yIFVTQ0kxX0NUTDEgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDRNRlBfU0MxX0NMSyAgICAgICgweDA4VUw8PFNZU19HUERfTUZQTF9QRDRNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENCBzZXR0aW5nIGZvciBTQzFfQ0xLICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ0TUZQX1VTQl9WQlVTX1NUICAoMHgwZVVMPDxTWVNfR1BEX01GUExfUEQ0TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDQgc2V0dGluZyBmb3IgVVNCX1ZCVVNfU1QgKi8KKworLyogUEQuNSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQRF9NRlBMX1BENU1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ1IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDVNRlBfSTJDMV9TQ0wgICAgICgweDA0VUw8PFNZU19HUERfTUZQTF9QRDVNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENSBzZXR0aW5nIGZvciBJMkMxX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ1TUZQX1NQSTFfQ0xLICAgICAoMHgwNVVMPDxTWVNfR1BEX01GUExfUEQ1TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDUgc2V0dGluZyBmb3IgU1BJMV9DTEsgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENU1GUF9VU0NJMV9EQVQwICAgKDB4MDZVTDw8U1lTX0dQRF9NRlBMX1BENU1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ1IHNldHRpbmcgZm9yIFVTQ0kxX0RBVDAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDVNRlBfU0MxX0RBVCAgICAgICgweDA4VUw8PFNZU19HUERfTUZQTF9QRDVNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENSBzZXR0aW5nIGZvciBTQzFfREFUICAgICAqLworCisvKiBQRC42IE1GUCAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ2TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BEX01GUExfUEQ2TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDYgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENk1GUF9VQVJUMV9SWEQgICAgKDB4MDNVTDw8U1lTX0dQRF9NRlBMX1BENk1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ2IHNldHRpbmcgZm9yIFVBUlQxX1JYRCAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDZNRlBfSTJDMF9TREEgICAgICgweDA0VUw8PFNZU19HUERfTUZQTF9QRDZNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENiBzZXR0aW5nIGZvciBJMkMwX1NEQSAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ2TUZQX1NQSTFfTU9TSSAgICAoMHgwNVVMPDxTWVNfR1BEX01GUExfUEQ2TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDYgc2V0dGluZyBmb3IgU1BJMV9NT1NJICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENk1GUF9VU0NJMV9EQVQxICAgKDB4MDZVTDw8U1lTX0dQRF9NRlBMX1BENk1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ2IHNldHRpbmcgZm9yIFVTQ0kxX0RBVDEgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDZNRlBfU0MxX1JTVCAgICAgICgweDA4VUw8PFNZU19HUERfTUZQTF9QRDZNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENiBzZXR0aW5nIGZvciBTQzFfUlNUICAgICAqLworCisvKiBQRC43IE1GUCAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ3TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BEX01GUExfUEQ3TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDcgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEN01GUF9VQVJUMV9UWEQgICAgKDB4MDNVTDw8U1lTX0dQRF9NRlBMX1BEN01GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ3IHNldHRpbmcgZm9yIFVBUlQxX1RYRCAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDdNRlBfSTJDMF9TQ0wgICAgICgweDA0VUw8PFNZU19HUERfTUZQTF9QRDdNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENyBzZXR0aW5nIGZvciBJMkMwX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ3TUZQX1NQSTFfTUlTTyAgICAoMHgwNVVMPDxTWVNfR1BEX01GUExfUEQ3TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDcgc2V0dGluZyBmb3IgU1BJMV9NSVNPICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEN01GUF9VU0NJMV9DTEsgICAgKDB4MDZVTDw8U1lTX0dQRF9NRlBMX1BEN01GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ3IHNldHRpbmcgZm9yIFVTQ0kxX0NMSyAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDdNRlBfU0MxX1BXUiAgICAgICgweDA4VUw8PFNZU19HUERfTUZQTF9QRDdNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENyBzZXR0aW5nIGZvciBTQzFfUFdSICAgICAqLworCisvKiBQRC44IE1GUCAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQ4TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BEX01GUEhfUEQ4TUZQX1BvcykgLyohPCBHUERfTUZQSCBQRDggc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEOE1GUF9FQklfQUQ2ICAgICAgKDB4MDJVTDw8U1lTX0dQRF9NRlBIX1BEOE1GUF9Qb3MpIC8qITwgR1BEX01GUEggUEQ4IHNldHRpbmcgZm9yIEVCSV9BRDYgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDhNRlBfSTJDMl9TREEgICAgICgweDAzVUw8PFNZU19HUERfTUZQSF9QRDhNRlBfUG9zKSAvKiE8IEdQRF9NRlBIIFBEOCBzZXR0aW5nIGZvciBJMkMyX1NEQSAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQ4TUZQX1VBUlQyX25SVFMgICAoMHgwNFVMPDxTWVNfR1BEX01GUEhfUEQ4TUZQX1BvcykgLyohPCBHUERfTUZQSCBQRDggc2V0dGluZyBmb3IgVUFSVDJfblJUUyAgKi8KKworLyogUEQuOSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEOU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQRF9NRlBIX1BEOU1GUF9Qb3MpIC8qITwgR1BEX01GUEggUEQ5IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDlNRlBfRUJJX0FENyAgICAgICgweDAyVUw8PFNZU19HUERfTUZQSF9QRDlNRlBfUG9zKSAvKiE8IEdQRF9NRlBIIFBEOSBzZXR0aW5nIGZvciBFQklfQUQ3ICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQ5TUZQX0kyQzJfU0NMICAgICAoMHgwM1VMPDxTWVNfR1BEX01GUEhfUEQ5TUZQX1BvcykgLyohPCBHUERfTUZQSCBQRDkgc2V0dGluZyBmb3IgSTJDMl9TQ0wgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEOU1GUF9VQVJUMl9uQ1RTICAgKDB4MDRVTDw8U1lTX0dQRF9NRlBIX1BEOU1GUF9Qb3MpIC8qITwgR1BEX01GUEggUEQ5IHNldHRpbmcgZm9yIFVBUlQyX25DVFMgICovCisKKy8qIFBELjEwIE1GUCAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxME1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BEX01GUEhfUEQxME1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEwIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTBNRlBfRUJJX25DUzIgICAgKDB4MDJVTDw8U1lTX0dQRF9NRlBIX1BEMTBNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMCBzZXR0aW5nIGZvciBFQklfbkNTMiAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEwTUZQX1VBUlQxX1JYRCAgICgweDAzVUw8PFNZU19HUERfTUZQSF9QRDEwTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTAgc2V0dGluZyBmb3IgVUFSVDFfUlhEICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxME1GUF9DQU4wX1JYRCAgICAoMHgwNFVMPDxTWVNfR1BEX01GUEhfUEQxME1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEwIHNldHRpbmcgZm9yIENBTjBfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTBNRlBfUUVJMF9CICAgICAgKDB4MGFVTDw8U1lTX0dQRF9NRlBIX1BEMTBNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMCBzZXR0aW5nIGZvciBRRUkwX0IgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEwTUZQX0lOVDcgICAgICAgICgweDBmVUw8PFNZU19HUERfTUZQSF9QRDEwTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTAgc2V0dGluZyBmb3IgSU5UNyAgICAgICAqLworCisvKiBQRC4xMSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTFNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQRF9NRlBIX1BEMTFNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMSBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDExTUZQX0VCSV9uQ1MxICAgICgweDAyVUw8PFNZU19HUERfTUZQSF9QRDExTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTEgc2V0dGluZyBmb3IgRUJJX25DUzEgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxMU1GUF9VQVJUMV9UWEQgICAoMHgwM1VMPDxTWVNfR1BEX01GUEhfUEQxMU1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDExIHNldHRpbmcgZm9yIFVBUlQxX1RYRCAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTFNRlBfQ0FOMF9UWEQgICAgKDB4MDRVTDw8U1lTX0dQRF9NRlBIX1BEMTFNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMSBzZXR0aW5nIGZvciBDQU4wX1RYRCAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDExTUZQX1FFSTBfQSAgICAgICgweDBhVUw8PFNZU19HUERfTUZQSF9QRDExTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTEgc2V0dGluZyBmb3IgUUVJMF9BICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxMU1GUF9JTlQ2ICAgICAgICAoMHgwZlVMPDxTWVNfR1BEX01GUEhfUEQxMU1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDExIHNldHRpbmcgZm9yIElOVDYgICAgICAgKi8KKworLyogUEQuMTIgTUZQICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEyTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUERfTUZQSF9QRDEyTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTIgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxMk1GUF9FQklfbkNTMCAgICAoMHgwMlVMPDxTWVNfR1BEX01GUEhfUEQxMk1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEyIHNldHRpbmcgZm9yIEVCSV9uQ1MwICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTJNRlBfVUFSVDJfUlhEICAgKDB4MDdVTDw8U1lTX0dQRF9NRlBIX1BEMTJNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMiBzZXR0aW5nIGZvciBVQVJUMl9SWEQgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEyTUZQX0JQV00wX0NINSAgICgweDA5VUw8PFNZU19HUERfTUZQSF9QRDEyTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTIgc2V0dGluZyBmb3IgQlBXTTBfQ0g1ICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxMk1GUF9RRUkwX0lOREVYICAoMHgwYVVMPDxTWVNfR1BEX01GUEhfUEQxMk1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEyIHNldHRpbmcgZm9yIFFFSTBfSU5ERVggKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTJNRlBfQ0xLTyAgICAgICAgKDB4MGRVTDw8U1lTX0dQRF9NRlBIX1BEMTJNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMiBzZXR0aW5nIGZvciBDTEtPICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEyTUZQX0VBREMwX1NUICAgICgweDBlVUw8PFNZU19HUERfTUZQSF9QRDEyTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTIgc2V0dGluZyBmb3IgRUFEQzBfU1QgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxMk1GUF9JTlQ1ICAgICAgICAoMHgwZlVMPDxTWVNfR1BEX01GUEhfUEQxMk1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEyIHNldHRpbmcgZm9yIElOVDUgICAgICAgKi8KKworLyogUEQuMTMgTUZQICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEzTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUERfTUZQSF9QRDEzTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTMgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxM01GUF9FQklfQUQxMCAgICAoMHgwMlVMPDxTWVNfR1BEX01GUEhfUEQxM01GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEzIHNldHRpbmcgZm9yIEVCSV9BRDEwICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTNNRlBfU0QwX25DRCAgICAgKDB4MDNVTDw8U1lTX0dQRF9NRlBIX1BEMTNNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMyBzZXR0aW5nIGZvciBTRDBfbkNEICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEzTUZQX1NQSTBfSTJTTUNMSyAoMHgwNFVMPDxTWVNfR1BEX01GUEhfUEQxM01GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEzIHNldHRpbmcgZm9yIFNQSTBfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEzTUZQX1NQSTFfSTJTTUNMSyAoMHgwNVVMPDxTWVNfR1BEX01GUEhfUEQxM01GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEzIHNldHRpbmcgZm9yIFNQSTFfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEzTUZQX1NDMl9uQ0QgICAgICgweDA3VUw8PFNZU19HUERfTUZQSF9QRDEzTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTMgc2V0dGluZyBmb3IgU0MyX25DRCAgICAqLworCisvKiBQRC4xNCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTRNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQRF9NRlBIX1BEMTRNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxNCBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDE0TUZQX0VCSV9uQ1MwICAgICgweDAyVUw8PFNZU19HUERfTUZQSF9QRDE0TUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTQgc2V0dGluZyBmb3IgRUJJX25DUzAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxNE1GUF9TUEkzX0kyU01DTEsgKDB4MDNVTDw8U1lTX0dQRF9NRlBIX1BEMTRNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxNCBzZXR0aW5nIGZvciBTUEkzX0kyU01DTEsqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxNE1GUF9TQzFfbkNEICAgICAoMHgwNFVMPDxTWVNfR1BEX01GUEhfUEQxNE1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDE0IHNldHRpbmcgZm9yIFNDMV9uQ0QgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTRNRlBfVVNDSTBfQ1RMMCAgKDB4MDVVTDw8U1lTX0dQRF9NRlBIX1BEMTRNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxNCBzZXR0aW5nIGZvciBVU0NJMF9DVEwwICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDE0TUZQX1NQSTBfSTJTTUNMSyAoMHgwNlVMPDxTWVNfR1BEX01GUEhfUEQxNE1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDE0IHNldHRpbmcgZm9yIFNQSTBfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDE0TUZQX0VQV00wX0NINCAgICgweDBiVUw8PFNZU19HUERfTUZQSF9QRDE0TUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTQgc2V0dGluZyBmb3IgRVBXTTBfQ0g0ICAqLworCisvKiBQRS4wIE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUwTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUExfUEUwTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTAgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFME1GUF9FQklfQUQxMSAgICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBMX1BFME1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUwIHNldHRpbmcgZm9yIEVCSV9BRDExICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTBNRlBfUVNQSTBfTU9TSTAgICgweDAzVUw8PFNZU19HUEVfTUZQTF9QRTBNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMCBzZXR0aW5nIGZvciBRU1BJMF9NT1NJMCAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUwTUZQX1NDMl9DTEsgICAgICAoMHgwNFVMPDxTWVNfR1BFX01GUExfUEUwTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTAgc2V0dGluZyBmb3IgU0MyX0NMSyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFME1GUF9JMlMwX01DTEsgICAgKDB4MDVVTDw8U1lTX0dQRV9NRlBMX1BFME1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUwIHNldHRpbmcgZm9yIEkyUzBfTUNMSyAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTBNRlBfU1BJMV9NT1NJICAgICgweDA2VUw8PFNZU19HUEVfTUZQTF9QRTBNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMCBzZXR0aW5nIGZvciBTUEkxX01PU0kgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUwTUZQX1VBUlQzX1JYRCAgICAoMHgwN1VMPDxTWVNfR1BFX01GUExfUEUwTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTAgc2V0dGluZyBmb3IgVUFSVDNfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFME1GUF9JMkMxX1NEQSAgICAgKDB4MDhVTDw8U1lTX0dQRV9NRlBMX1BFME1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUwIHNldHRpbmcgZm9yIEkyQzFfU0RBICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTBNRlBfVUFSVDRfblJUUyAgICgweDA5VUw8PFNZU19HUEVfTUZQTF9QRTBNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMCBzZXR0aW5nIGZvciBVQVJUNF9uUlRTICAqLworCisvKiBQRS4xIE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUxTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUExfUEUxTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTEgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMU1GUF9FQklfQUQxMCAgICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBMX1BFMU1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUxIHNldHRpbmcgZm9yIEVCSV9BRDEwICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTFNRlBfUVNQSTBfTUlTTzAgICgweDAzVUw8PFNZU19HUEVfTUZQTF9QRTFNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMSBzZXR0aW5nIGZvciBRU1BJMF9NSVNPMCAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUxTUZQX1NDMl9EQVQgICAgICAoMHgwNFVMPDxTWVNfR1BFX01GUExfUEUxTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTEgc2V0dGluZyBmb3IgU0MyX0RBVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMU1GUF9JMlMwX0JDTEsgICAgKDB4MDVVTDw8U1lTX0dQRV9NRlBMX1BFMU1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUxIHNldHRpbmcgZm9yIEkyUzBfQkNMSyAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTFNRlBfU1BJMV9NSVNPICAgICgweDA2VUw8PFNZU19HUEVfTUZQTF9QRTFNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMSBzZXR0aW5nIGZvciBTUEkxX01JU08gICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUxTUZQX1VBUlQzX1RYRCAgICAoMHgwN1VMPDxTWVNfR1BFX01GUExfUEUxTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTEgc2V0dGluZyBmb3IgVUFSVDNfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMU1GUF9JMkMxX1NDTCAgICAgKDB4MDhVTDw8U1lTX0dQRV9NRlBMX1BFMU1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUxIHNldHRpbmcgZm9yIEkyQzFfU0NMICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTFNRlBfVUFSVDRfbkNUUyAgICgweDA5VUw8PFNZU19HUEVfTUZQTF9QRTFNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMSBzZXR0aW5nIGZvciBVQVJUNF9uQ1RTICAqLworCisvKiBQRS4yIE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUyTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUExfUEUyTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMk1GUF9FQklfQUxFICAgICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBMX1BFMk1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUyIHNldHRpbmcgZm9yIEVCSV9BTEUgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTJNRlBfU0QwX0RBVDAgICAgICgweDAzVUw8PFNZU19HUEVfTUZQTF9QRTJNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMiBzZXR0aW5nIGZvciBTRDBfREFUMCAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUyTUZQX1NQSTNfTU9TSSAgICAoMHgwNVVMPDxTWVNfR1BFX01GUExfUEUyTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgU1BJM19NT1NJICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMk1GUF9TQzBfQ0xLICAgICAgKDB4MDZVTDw8U1lTX0dQRV9NRlBMX1BFMk1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUyIHNldHRpbmcgZm9yIFNDMF9DTEsgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTJNRlBfVVNDSTBfQ0xLICAgICgweDA3VUw8PFNZU19HUEVfTUZQTF9QRTJNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMiBzZXR0aW5nIGZvciBVU0NJMF9DTEsgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUyTUZQX1FFSTBfQiAgICAgICAoMHgwYlVMPDxTWVNfR1BFX01GUExfUEUyTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgUUVJMF9CICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMk1GUF9FUFdNMF9DSDUgICAgKDB4MGNVTDw8U1lTX0dQRV9NRlBMX1BFMk1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUyIHNldHRpbmcgZm9yIEVQV00wX0NINSAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTJNRlBfQlBXTTBfQ0gwICAgICgweDBkVUw8PFNZU19HUEVfTUZQTF9QRTJNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMiBzZXR0aW5nIGZvciBCUFdNMF9DSDAgICAqLworCisvKiBQRS4zIE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUzTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUExfUEUzTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFM01GUF9FQklfTUNMSyAgICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBMX1BFM01GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUzIHNldHRpbmcgZm9yIEVCSV9NQ0xLICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTNNRlBfU0QwX0RBVDEgICAgICgweDAzVUw8PFNZU19HUEVfTUZQTF9QRTNNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMyBzZXR0aW5nIGZvciBTRDBfREFUMSAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUzTUZQX1NQSTNfTUlTTyAgICAoMHgwNVVMPDxTWVNfR1BFX01GUExfUEUzTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgU1BJM19NSVNPICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFM01GUF9TQzBfREFUICAgICAgKDB4MDZVTDw8U1lTX0dQRV9NRlBMX1BFM01GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUzIHNldHRpbmcgZm9yIFNDMF9EQVQgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTNNRlBfVVNDSTBfREFUMCAgICgweDA3VUw8PFNZU19HUEVfTUZQTF9QRTNNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMyBzZXR0aW5nIGZvciBVU0NJMF9EQVQwICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUzTUZQX1FFSTBfQSAgICAgICAoMHgwYlVMPDxTWVNfR1BFX01GUExfUEUzTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgUUVJMF9BICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFM01GUF9FUFdNMF9DSDQgICAgKDB4MGNVTDw8U1lTX0dQRV9NRlBMX1BFM01GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUzIHNldHRpbmcgZm9yIEVQV00wX0NINCAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTNNRlBfQlBXTTBfQ0gxICAgICgweDBkVUw8PFNZU19HUEVfTUZQTF9QRTNNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMyBzZXR0aW5nIGZvciBCUFdNMF9DSDEgICAqLworCisvKiBQRS40IE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU0TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUExfUEU0TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTQgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNE1GUF9FQklfbldSICAgICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBMX1BFNE1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU0IHNldHRpbmcgZm9yIEVCSV9uV1IgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTRNRlBfU0QwX0RBVDIgICAgICgweDAzVUw8PFNZU19HUEVfTUZQTF9QRTRNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNCBzZXR0aW5nIGZvciBTRDBfREFUMiAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU0TUZQX1NQSTNfQ0xLICAgICAoMHgwNVVMPDxTWVNfR1BFX01GUExfUEU0TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTQgc2V0dGluZyBmb3IgU1BJM19DTEsgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNE1GUF9TQzBfUlNUICAgICAgKDB4MDZVTDw8U1lTX0dQRV9NRlBMX1BFNE1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU0IHNldHRpbmcgZm9yIFNDMF9SU1QgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTRNRlBfVVNDSTBfREFUMSAgICgweDA3VUw8PFNZU19HUEVfTUZQTF9QRTRNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNCBzZXR0aW5nIGZvciBVU0NJMF9EQVQxICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU0TUZQX1FFSTBfSU5ERVggICAoMHgwYlVMPDxTWVNfR1BFX01GUExfUEU0TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTQgc2V0dGluZyBmb3IgUUVJMF9JTkRFWCAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNE1GUF9FUFdNMF9DSDMgICAgKDB4MGNVTDw8U1lTX0dQRV9NRlBMX1BFNE1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU0IHNldHRpbmcgZm9yIEVQV00wX0NIMyAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTRNRlBfQlBXTTBfQ0gyICAgICgweDBkVUw8PFNZU19HUEVfTUZQTF9QRTRNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNCBzZXR0aW5nIGZvciBCUFdNMF9DSDIgICAqLworCisvKiBQRS41IE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU1TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUExfUEU1TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTUgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNU1GUF9FQklfblJEICAgICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBMX1BFNU1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU1IHNldHRpbmcgZm9yIEVCSV9uUkQgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTVNRlBfU0QwX0RBVDMgICAgICgweDAzVUw8PFNZU19HUEVfTUZQTF9QRTVNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNSBzZXR0aW5nIGZvciBTRDBfREFUMyAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU1TUZQX1NQSTNfU1MgICAgICAoMHgwNVVMPDxTWVNfR1BFX01GUExfUEU1TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTUgc2V0dGluZyBmb3IgU1BJM19TUyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNU1GUF9TQzBfUFdSICAgICAgKDB4MDZVTDw8U1lTX0dQRV9NRlBMX1BFNU1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU1IHNldHRpbmcgZm9yIFNDMF9QV1IgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTVNRlBfVVNDSTBfQ1RMMSAgICgweDA3VUw8PFNZU19HUEVfTUZQTF9QRTVNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNSBzZXR0aW5nIGZvciBVU0NJMF9DVEwxICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU1TUZQX1FFSTFfQiAgICAgICAoMHgwYlVMPDxTWVNfR1BFX01GUExfUEU1TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTUgc2V0dGluZyBmb3IgUUVJMV9CICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNU1GUF9FUFdNMF9DSDIgICAgKDB4MGNVTDw8U1lTX0dQRV9NRlBMX1BFNU1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU1IHNldHRpbmcgZm9yIEVQV00wX0NIMiAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTVNRlBfQlBXTTBfQ0gzICAgICgweDBkVUw8PFNZU19HUEVfTUZQTF9QRTVNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNSBzZXR0aW5nIGZvciBCUFdNMF9DSDMgICAqLworCisvKiBQRS42IE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU2TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUExfUEU2TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTYgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNk1GUF9TRDBfQ0xLICAgICAgKDB4MDNVTDw8U1lTX0dQRV9NRlBMX1BFNk1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU2IHNldHRpbmcgZm9yIFNEMF9DTEsgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTZNRlBfU1BJM19JMlNNQ0xLICgweDA1VUw8PFNZU19HUEVfTUZQTF9QRTZNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNiBzZXR0aW5nIGZvciBTUEkzX0kyU01DTEsqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU2TUZQX1NDMF9uQ0QgICAgICAoMHgwNlVMPDxTWVNfR1BFX01GUExfUEU2TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTYgc2V0dGluZyBmb3IgU0MwX25DRCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNk1GUF9VU0NJMF9DVEwwICAgKDB4MDdVTDw8U1lTX0dQRV9NRlBMX1BFNk1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU2IHNldHRpbmcgZm9yIFVTQ0kwX0NUTDAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTZNRlBfVUFSVDVfUlhEICAgICgweDA4VUw8PFNZU19HUEVfTUZQTF9QRTZNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNiBzZXR0aW5nIGZvciBVQVJUNV9SWEQgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU2TUZQX1FFSTFfQSAgICAgICAoMHgwYlVMPDxTWVNfR1BFX01GUExfUEU2TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTYgc2V0dGluZyBmb3IgUUVJMV9BICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNk1GUF9FUFdNMF9DSDEgICAgKDB4MGNVTDw8U1lTX0dQRV9NRlBMX1BFNk1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU2IHNldHRpbmcgZm9yIEVQV00wX0NIMSAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTZNRlBfQlBXTTBfQ0g0ICAgICgweDBkVUw8PFNZU19HUEVfTUZQTF9QRTZNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNiBzZXR0aW5nIGZvciBCUFdNMF9DSDQgICAqLworCisvKiBQRS43IE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU3TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUExfUEU3TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTcgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFN01GUF9TRDBfQ01EICAgICAgKDB4MDNVTDw8U1lTX0dQRV9NRlBMX1BFN01GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU3IHNldHRpbmcgZm9yIFNEMF9DTUQgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTdNRlBfVUFSVDVfVFhEICAgICgweDA4VUw8PFNZU19HUEVfTUZQTF9QRTdNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNyBzZXR0aW5nIGZvciBVQVJUNV9UWEQgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU3TUZQX1FFSTFfSU5ERVggICAoMHgwYlVMPDxTWVNfR1BFX01GUExfUEU3TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTcgc2V0dGluZyBmb3IgUUVJMV9JTkRFWCAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFN01GUF9FUFdNMF9DSDAgICAgKDB4MGNVTDw8U1lTX0dQRV9NRlBMX1BFN01GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU3IHNldHRpbmcgZm9yIEVQV00wX0NIMCAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTdNRlBfQlBXTTBfQ0g1ICAgICgweDBkVUw8PFNZU19HUEVfTUZQTF9QRTdNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNyBzZXR0aW5nIGZvciBCUFdNMF9DSDUgICAqLworCisvKiBQRS44IE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU4TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUEhfUEU4TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTggc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOE1GUF9FQklfQURSMTAgICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBIX1BFOE1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU4IHNldHRpbmcgZm9yIEVCSV9BRFIxMCAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRThNRlBfSTJTMF9CQ0xLICAgICgweDA0VUw8PFNZU19HUEVfTUZQSF9QRThNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBJMlMwX0JDTEsgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU4TUZQX1NQSTJfQ0xLICAgICAoMHgwNVVMPDxTWVNfR1BFX01GUEhfUEU4TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTggc2V0dGluZyBmb3IgU1BJMl9DTEsgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOE1GUF9VU0NJMV9DVEwxICAgKDB4MDZVTDw8U1lTX0dQRV9NRlBIX1BFOE1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU4IHNldHRpbmcgZm9yIFVTQ0kxX0NUTDEgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRThNRlBfVUFSVDJfVFhEICAgICgweDA3VUw8PFNZU19HUEVfTUZQSF9QRThNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBVQVJUMl9UWEQgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU4TUZQX0VQV00wX0NIMCAgICAoMHgwYVVMPDxTWVNfR1BFX01GUEhfUEU4TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTggc2V0dGluZyBmb3IgRVBXTTBfQ0gwICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOE1GUF9FUFdNMF9CUkFLRTAgKDB4MGJVTDw8U1lTX0dQRV9NRlBIX1BFOE1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU4IHNldHRpbmcgZm9yIEVQV00wX0JSQUtFMCovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRThNRlBfRUNBUDBfSUMwICAgICgweDBjVUw8PFNZU19HUEVfTUZQSF9QRThNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBFQ0FQMF9JQzAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU4TUZQX1RSQUNFX0RBVEEzICAoMHgwZVVMPDxTWVNfR1BFX01GUEhfUEU4TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTggc2V0dGluZyBmb3IgVFJBQ0VfREFUQTMgKi8KKworLyogUEUuOSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQRV9NRlBIX1BFOU1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTlNRlBfRUJJX0FEUjExICAgICgweDAyVUw8PFNZU19HUEVfTUZQSF9QRTlNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOSBzZXR0aW5nIGZvciBFQklfQURSMTEgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU5TUZQX0kyUzBfTUNMSyAgICAoMHgwNFVMPDxTWVNfR1BFX01GUEhfUEU5TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgSTJTMF9NQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOU1GUF9TUEkyX01JU08gICAgKDB4MDVVTDw8U1lTX0dQRV9NRlBIX1BFOU1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIFNQSTJfTUlTTyAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTlNRlBfVVNDSTFfQ1RMMCAgICgweDA2VUw8PFNZU19HUEVfTUZQSF9QRTlNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOSBzZXR0aW5nIGZvciBVU0NJMV9DVEwwICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU5TUZQX1VBUlQyX1JYRCAgICAoMHgwN1VMPDxTWVNfR1BFX01GUEhfUEU5TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgVUFSVDJfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOU1GUF9FUFdNMF9DSDEgICAgKDB4MGFVTDw8U1lTX0dQRV9NRlBIX1BFOU1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIEVQV00wX0NIMSAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTlNRlBfRVBXTTBfQlJBS0UxICgweDBiVUw8PFNZU19HUEVfTUZQSF9QRTlNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOSBzZXR0aW5nIGZvciBFUFdNMF9CUkFLRTEqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU5TUZQX0VDQVAwX0lDMSAgICAoMHgwY1VMPDxTWVNfR1BFX01GUEhfUEU5TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgRUNBUDBfSUMxICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOU1GUF9UUkFDRV9EQVRBMiAgKDB4MGVVTDw8U1lTX0dQRV9NRlBIX1BFOU1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIFRSQUNFX0RBVEEyICovCisKKy8qIFBFLjEwIE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxME1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUEhfUEUxME1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEwIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTBNRlBfRUJJX0FEUjEyICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBIX1BFMTBNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMCBzZXR0aW5nIGZvciBFQklfQURSMTIgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEwTUZQX0kyUzBfREkgICAgICgweDA0VUw8PFNZU19HUEVfTUZQSF9QRTEwTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgSTJTMF9ESSAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxME1GUF9TUEkyX01PU0kgICAoMHgwNVVMPDxTWVNfR1BFX01GUEhfUEUxME1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEwIHNldHRpbmcgZm9yIFNQSTJfTU9TSSAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTBNRlBfVVNDSTFfREFUMCAgKDB4MDZVTDw8U1lTX0dQRV9NRlBIX1BFMTBNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMCBzZXR0aW5nIGZvciBVU0NJMV9EQVQwICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEwTUZQX1VBUlQzX1RYRCAgICgweDA3VUw8PFNZU19HUEVfTUZQSF9QRTEwTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgVUFSVDNfVFhEICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxME1GUF9FUFdNMF9DSDIgICAoMHgwYVVMPDxTWVNfR1BFX01GUEhfUEUxME1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEwIHNldHRpbmcgZm9yIEVQV00wX0NIMiAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTBNRlBfRVBXTTFfQlJBS0UwICgweDBiVUw8PFNZU19HUEVfTUZQSF9QRTEwTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgRVBXTTFfQlJBS0UwKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTBNRlBfRUNBUDBfSUMyICAgKDB4MGNVTDw8U1lTX0dQRV9NRlBIX1BFMTBNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMCBzZXR0aW5nIGZvciBFQ0FQMF9JQzIgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEwTUZQX1RSQUNFX0RBVEExICgweDBlVUw8PFNZU19HUEVfTUZQSF9QRTEwTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgVFJBQ0VfREFUQTEqLworCisvKiBQRS4xMSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTFNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQRV9NRlBIX1BFMTFNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTExTUZQX0VCSV9BRFIxMyAgICgweDAyVUw8PFNZU19HUEVfTUZQSF9QRTExTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTEgc2V0dGluZyBmb3IgRUJJX0FEUjEzICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMU1GUF9JMlMwX0RPICAgICAoMHgwNFVMPDxTWVNfR1BFX01GUEhfUEUxMU1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIEkyUzBfRE8gICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTFNRlBfU1BJMl9TUyAgICAgKDB4MDVVTDw8U1lTX0dQRV9NRlBIX1BFMTFNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBTUEkyX1NTICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTExTUZQX1VTQ0kxX0RBVDEgICgweDA2VUw8PFNZU19HUEVfTUZQSF9QRTExTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTEgc2V0dGluZyBmb3IgVVNDSTFfREFUMSAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMU1GUF9VQVJUM19SWEQgICAoMHgwN1VMPDxTWVNfR1BFX01GUEhfUEUxMU1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIFVBUlQzX1JYRCAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTFNRlBfVUFSVDFfbkNUUyAgKDB4MDhVTDw8U1lTX0dQRV9NRlBIX1BFMTFNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBVQVJUMV9uQ1RTICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTExTUZQX0VQV00wX0NIMyAgICgweDBhVUw8PFNZU19HUEVfTUZQSF9QRTExTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTEgc2V0dGluZyBmb3IgRVBXTTBfQ0gzICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMU1GUF9FUFdNMV9CUkFLRTEgKDB4MGJVTDw8U1lTX0dQRV9NRlBIX1BFMTFNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBFUFdNMV9CUkFLRTEqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMU1GUF9FQ0FQMV9JQzIgICAoMHgwZFVMPDxTWVNfR1BFX01GUEhfUEUxMU1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIEVDQVAxX0lDMiAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTFNRlBfVFJBQ0VfREFUQTAgKDB4MGVVTDw8U1lTX0dQRV9NRlBIX1BFMTFNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBUUkFDRV9EQVRBMCovCisKKy8qIFBFLjEyIE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMk1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUEhfUEUxMk1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEyIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTJNRlBfRUJJX0FEUjE0ICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBIX1BFMTJNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMiBzZXR0aW5nIGZvciBFQklfQURSMTQgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEyTUZQX0kyUzBfTFJDSyAgICgweDA0VUw8PFNZU19HUEVfTUZQSF9QRTEyTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTIgc2V0dGluZyBmb3IgSTJTMF9MUkNLICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMk1GUF9TUEkyX0kyU01DTEsgKDB4MDVVTDw8U1lTX0dQRV9NRlBIX1BFMTJNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMiBzZXR0aW5nIGZvciBTUEkyX0kyU01DTEsqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMk1GUF9VU0NJMV9DTEsgICAoMHgwNlVMPDxTWVNfR1BFX01GUEhfUEUxMk1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEyIHNldHRpbmcgZm9yIFVTQ0kxX0NMSyAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTJNRlBfVUFSVDFfblJUUyAgKDB4MDhVTDw8U1lTX0dQRV9NRlBIX1BFMTJNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMiBzZXR0aW5nIGZvciBVQVJUMV9uUlRTICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEyTUZQX0VQV00wX0NINCAgICgweDBhVUw8PFNZU19HUEVfTUZQSF9QRTEyTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTIgc2V0dGluZyBmb3IgRVBXTTBfQ0g0ICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMk1GUF9FQ0FQMV9JQzEgICAoMHgwZFVMPDxTWVNfR1BFX01GUEhfUEUxMk1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEyIHNldHRpbmcgZm9yIEVDQVAxX0lDMSAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTJNRlBfVFJBQ0VfQ0xLICAgKDB4MGVVTDw8U1lTX0dQRV9NRlBIX1BFMTJNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMiBzZXR0aW5nIGZvciBUUkFDRV9DTEsgICovCisKKy8qIFBFLjEzIE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxM01GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUEhfUEUxM01GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEzIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTNNRlBfRUJJX0FEUjE1ICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBIX1BFMTNNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMyBzZXR0aW5nIGZvciBFQklfQURSMTUgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEzTUZQX0kyQzBfU0NMICAgICgweDA0VUw8PFNZU19HUEVfTUZQSF9QRTEzTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTMgc2V0dGluZyBmb3IgSTJDMF9TQ0wgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxM01GUF9VQVJUNF9uUlRTICAoMHgwNVVMPDxTWVNfR1BFX01GUEhfUEUxM01GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEzIHNldHRpbmcgZm9yIFVBUlQ0X25SVFMgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTNNRlBfVUFSVDFfVFhEICAgKDB4MDhVTDw8U1lTX0dQRV9NRlBIX1BFMTNNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMyBzZXR0aW5nIGZvciBVQVJUMV9UWEQgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEzTUZQX0VQV00wX0NINSAgICgweDBhVUw8PFNZU19HUEVfTUZQSF9QRTEzTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTMgc2V0dGluZyBmb3IgRVBXTTBfQ0g1ICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxM01GUF9FUFdNMV9DSDAgICAoMHgwYlVMPDxTWVNfR1BFX01GUEhfUEUxM01GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEzIHNldHRpbmcgZm9yIEVQV00xX0NIMCAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTNNRlBfQlBXTTFfQ0g1ICAgKDB4MGNVTDw8U1lTX0dQRV9NRlBIX1BFMTNNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMyBzZXR0aW5nIGZvciBCUFdNMV9DSDUgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEzTUZQX0VDQVAxX0lDMCAgICgweDBkVUw8PFNZU19HUEVfTUZQSF9QRTEzTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTMgc2V0dGluZyBmb3IgRUNBUDFfSUMwICAqLworCisvKiBQRS4xNCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTRNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQRV9NRlBIX1BFMTRNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxNCBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTE0TUZQX0VCSV9BRDggICAgICgweDAyVUw8PFNZU19HUEVfTUZQSF9QRTE0TUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTQgc2V0dGluZyBmb3IgRUJJX0FEOCAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxNE1GUF9VQVJUMl9UWEQgICAoMHgwM1VMPDxTWVNfR1BFX01GUEhfUEUxNE1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTE0IHNldHRpbmcgZm9yIFVBUlQyX1RYRCAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTRNRlBfQ0FOMF9UWEQgICAgKDB4MDRVTDw8U1lTX0dQRV9NRlBIX1BFMTRNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxNCBzZXR0aW5nIGZvciBDQU4wX1RYRCAgICovCisKKy8qIFBFLjE1IE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxNU1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUEhfUEUxNU1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTE1IHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTVNRlBfRUJJX0FEOSAgICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBIX1BFMTVNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxNSBzZXR0aW5nIGZvciBFQklfQUQ5ICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTE1TUZQX1VBUlQyX1JYRCAgICgweDAzVUw8PFNZU19HUEVfTUZQSF9QRTE1TUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTUgc2V0dGluZyBmb3IgVUFSVDJfUlhEICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxNU1GUF9DQU4wX1JYRCAgICAoMHgwNFVMPDxTWVNfR1BFX01GUEhfUEUxNU1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTE1IHNldHRpbmcgZm9yIENBTjBfUlhEICAgKi8KKworLyogUEYuMCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGME1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQRl9NRlBMX1BGME1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYwIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjBNRlBfVUFSVDFfVFhEICAgICgweDAyVUw8PFNZU19HUEZfTUZQTF9QRjBNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMCBzZXR0aW5nIGZvciBVQVJUMV9UWEQgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYwTUZQX0kyQzFfU0NMICAgICAoMHgwM1VMPDxTWVNfR1BGX01GUExfUEYwTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjAgc2V0dGluZyBmb3IgSTJDMV9TQ0wgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGME1GUF9CUFdNMV9DSDAgICAgKDB4MGNVTDw8U1lTX0dQRl9NRlBMX1BGME1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYwIHNldHRpbmcgZm9yIEJQV00xX0NIMCAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjBNRlBfSUNFX0RBVCAgICAgICgweDBlVUw8PFNZU19HUEZfTUZQTF9QRjBNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMCBzZXR0aW5nIGZvciBJQ0VfREFUICAgICAqLworCisvKiBQRi4xIE1GUCAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYxTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BGX01GUExfUEYxTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjEgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGMU1GUF9VQVJUMV9SWEQgICAgKDB4MDJVTDw8U1lTX0dQRl9NRlBMX1BGMU1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYxIHNldHRpbmcgZm9yIFVBUlQxX1JYRCAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjFNRlBfSTJDMV9TREEgICAgICgweDAzVUw8PFNZU19HUEZfTUZQTF9QRjFNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMSBzZXR0aW5nIGZvciBJMkMxX1NEQSAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYxTUZQX0JQV00xX0NIMSAgICAoMHgwY1VMPDxTWVNfR1BGX01GUExfUEYxTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjEgc2V0dGluZyBmb3IgQlBXTTFfQ0gxICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGMU1GUF9JQ0VfQ0xLICAgICAgKDB4MGVVTDw8U1lTX0dQRl9NRlBMX1BGMU1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYxIHNldHRpbmcgZm9yIElDRV9DTEsgICAgICovCisKKy8qIFBGLjIgTUZQICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjJNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEZfTUZQTF9QRjJNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMiBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYyTUZQX0VCSV9uQ1MxICAgICAoMHgwMlVMPDxTWVNfR1BGX01GUExfUEYyTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjIgc2V0dGluZyBmb3IgRUJJX25DUzEgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGMk1GUF9VQVJUMF9SWEQgICAgKDB4MDNVTDw8U1lTX0dQRl9NRlBMX1BGMk1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYyIHNldHRpbmcgZm9yIFVBUlQwX1JYRCAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjJNRlBfSTJDMF9TREEgICAgICgweDA0VUw8PFNZU19HUEZfTUZQTF9QRjJNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMiBzZXR0aW5nIGZvciBJMkMwX1NEQSAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYyTUZQX1FTUEkwX0NMSyAgICAoMHgwNVVMPDxTWVNfR1BGX01GUExfUEYyTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjIgc2V0dGluZyBmb3IgUVNQSTBfQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGMk1GUF9YVDFfT1VUICAgICAgKDB4MGFVTDw8U1lTX0dQRl9NRlBMX1BGMk1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYyIHNldHRpbmcgZm9yIFhUMV9PVVQgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjJNRlBfQlBXTTFfQ0gxICAgICgweDBiVUw8PFNZU19HUEZfTUZQTF9QRjJNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMiBzZXR0aW5nIGZvciBCUFdNMV9DSDEgICAqLworCisvKiBQRi4zIE1GUCAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYzTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BGX01GUExfUEYzTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjMgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGM01GUF9FQklfbkNTMCAgICAgKDB4MDJVTDw8U1lTX0dQRl9NRlBMX1BGM01GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYzIHNldHRpbmcgZm9yIEVCSV9uQ1MwICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjNNRlBfVUFSVDBfVFhEICAgICgweDAzVUw8PFNZU19HUEZfTUZQTF9QRjNNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMyBzZXR0aW5nIGZvciBVQVJUMF9UWEQgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYzTUZQX0kyQzBfU0NMICAgICAoMHgwNFVMPDxTWVNfR1BGX01GUExfUEYzTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjMgc2V0dGluZyBmb3IgSTJDMF9TQ0wgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGM01GUF9YVDFfSU4gICAgICAgKDB4MGFVTDw8U1lTX0dQRl9NRlBMX1BGM01GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYzIHNldHRpbmcgZm9yIFhUMV9JTiAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjNNRlBfQlBXTTFfQ0gwICAgICgweDBiVUw8PFNZU19HUEZfTUZQTF9QRjNNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMyBzZXR0aW5nIGZvciBCUFdNMV9DSDAgICAqLworCisvKiBQRi40IE1GUCAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY0TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BGX01GUExfUEY0TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjQgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNE1GUF9VQVJUMl9UWEQgICAgKDB4MDJVTDw8U1lTX0dQRl9NRlBMX1BGNE1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY0IHNldHRpbmcgZm9yIFVBUlQyX1RYRCAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjRNRlBfVUFSVDJfblJUUyAgICgweDA0VUw8PFNZU19HUEZfTUZQTF9QRjRNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNCBzZXR0aW5nIGZvciBVQVJUMl9uUlRTICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY0TUZQX0JQV00wX0NINSAgICAoMHgwOFVMPDxTWVNfR1BGX01GUExfUEY0TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjQgc2V0dGluZyBmb3IgQlBXTTBfQ0g1ICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNE1GUF9YMzJfT1VUICAgICAgKDB4MGFVTDw8U1lTX0dQRl9NRlBMX1BGNE1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY0IHNldHRpbmcgZm9yIFgzMl9PVVQgICAgICovCisKKy8qIFBGLjUgTUZQICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjVNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEZfTUZQTF9QRjVNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNSBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY1TUZQX1VBUlQyX1JYRCAgICAoMHgwMlVMPDxTWVNfR1BGX01GUExfUEY1TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjUgc2V0dGluZyBmb3IgVUFSVDJfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNU1GUF9VQVJUMl9uQ1RTICAgKDB4MDRVTDw8U1lTX0dQRl9NRlBMX1BGNU1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY1IHNldHRpbmcgZm9yIFVBUlQyX25DVFMgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjVNRlBfQlBXTTBfQ0g0ICAgICgweDA4VUw8PFNZU19HUEZfTUZQTF9QRjVNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNSBzZXR0aW5nIGZvciBCUFdNMF9DSDQgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY1TUZQX0VQV00wX1NZTkNfT1VUICgweDA5VUw8PFNZU19HUEZfTUZQTF9QRjVNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNSBzZXR0aW5nIGZvciBFUFdNMF9TWU5DX09VVCovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjVNRlBfWDMyX0lOICAgICAgICgweDBhVUw8PFNZU19HUEZfTUZQTF9QRjVNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNSBzZXR0aW5nIGZvciBYMzJfSU4gICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY1TUZQX0VBREMwX1NUICAgICAoMHgwYlVMPDxTWVNfR1BGX01GUExfUEY1TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjUgc2V0dGluZyBmb3IgRUFEQzBfU1QgICAgKi8KKworLyogUEYuNiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNk1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQRl9NRlBMX1BGNk1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjZNRlBfRUJJX0FEUjE5ICAgICgweDAyVUw8PFNZU19HUEZfTUZQTF9QRjZNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNiBzZXR0aW5nIGZvciBFQklfQURSMTkgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY2TUZQX1NDMF9DTEsgICAgICAoMHgwM1VMPDxTWVNfR1BGX01GUExfUEY2TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjYgc2V0dGluZyBmb3IgU0MwX0NMSyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNk1GUF9JMlMwX0xSQ0sgICAgKDB4MDRVTDw8U1lTX0dQRl9NRlBMX1BGNk1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIEkyUzBfTFJDSyAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjZNRlBfU1BJMF9NT1NJICAgICgweDA1VUw8PFNZU19HUEZfTUZQTF9QRjZNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNiBzZXR0aW5nIGZvciBTUEkwX01PU0kgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY2TUZQX1VBUlQ0X1JYRCAgICAoMHgwNlVMPDxTWVNfR1BGX01GUExfUEY2TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjYgc2V0dGluZyBmb3IgVUFSVDRfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNk1GUF9FQklfbkNTMCAgICAgKDB4MDdVTDw8U1lTX0dQRl9NRlBMX1BGNk1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIEVCSV9uQ1MwICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjZNRlBfVEFNUEVSMCAgICAgICgweDBhVUw8PFNZU19HUEZfTUZQTF9QRjZNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNiBzZXR0aW5nIGZvciBUQU1QRVIwICAgICAqLworCisvKiBQRi43IE1GUCAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY3TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BGX01GUExfUEY3TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjcgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGN01GUF9FQklfQURSMTggICAgKDB4MDJVTDw8U1lTX0dQRl9NRlBMX1BGN01GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY3IHNldHRpbmcgZm9yIEVCSV9BRFIxOCAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjdNRlBfU0MwX0RBVCAgICAgICgweDAzVUw8PFNZU19HUEZfTUZQTF9QRjdNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNyBzZXR0aW5nIGZvciBTQzBfREFUICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY3TUZQX0kyUzBfRE8gICAgICAoMHgwNFVMPDxTWVNfR1BGX01GUExfUEY3TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjcgc2V0dGluZyBmb3IgSTJTMF9ETyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGN01GUF9TUEkwX01JU08gICAgKDB4MDVVTDw8U1lTX0dQRl9NRlBMX1BGN01GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY3IHNldHRpbmcgZm9yIFNQSTBfTUlTTyAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjdNRlBfVUFSVDRfVFhEICAgICgweDA2VUw8PFNZU19HUEZfTUZQTF9QRjdNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNyBzZXR0aW5nIGZvciBVQVJUNF9UWEQgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY3TUZQX1RBTVBFUjEgICAgICAoMHgwYVVMPDxTWVNfR1BGX01GUExfUEY3TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjcgc2V0dGluZyBmb3IgVEFNUEVSMSAgICAgKi8KKworLyogUEYuOCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGOE1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQRl9NRlBIX1BGOE1GUF9Qb3MpIC8qITwgR1BGX01GUEggUEY4IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjhNRlBfRUJJX0FEUjE3ICAgICgweDAyVUw8PFNZU19HUEZfTUZQSF9QRjhNRlBfUG9zKSAvKiE8IEdQRl9NRlBIIFBGOCBzZXR0aW5nIGZvciBFQklfQURSMTcgICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEY4TUZQX1NDMF9SU1QgICAgICAoMHgwM1VMPDxTWVNfR1BGX01GUEhfUEY4TUZQX1BvcykgLyohPCBHUEZfTUZQSCBQRjggc2V0dGluZyBmb3IgU0MwX1JTVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGOE1GUF9JMlMwX0RJICAgICAgKDB4MDRVTDw8U1lTX0dQRl9NRlBIX1BGOE1GUF9Qb3MpIC8qITwgR1BGX01GUEggUEY4IHNldHRpbmcgZm9yIEkyUzBfREkgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjhNRlBfU1BJMF9DTEsgICAgICgweDA1VUw8PFNZU19HUEZfTUZQSF9QRjhNRlBfUG9zKSAvKiE8IEdQRl9NRlBIIFBGOCBzZXR0aW5nIGZvciBTUEkwX0NMSyAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEY4TUZQX1RBTVBFUjIgICAgICAoMHgwYVVMPDxTWVNfR1BGX01GUEhfUEY4TUZQX1BvcykgLyohPCBHUEZfTUZQSCBQRjggc2V0dGluZyBmb3IgVEFNUEVSMiAgICAgKi8KKworLyogUEYuOSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGOU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQRl9NRlBIX1BGOU1GUF9Qb3MpIC8qITwgR1BGX01GUEggUEY5IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjlNRlBfRUJJX0FEUjE2ICAgICgweDAyVUw8PFNZU19HUEZfTUZQSF9QRjlNRlBfUG9zKSAvKiE8IEdQRl9NRlBIIFBGOSBzZXR0aW5nIGZvciBFQklfQURSMTYgICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEY5TUZQX1NDMF9QV1IgICAgICAoMHgwM1VMPDxTWVNfR1BGX01GUEhfUEY5TUZQX1BvcykgLyohPCBHUEZfTUZQSCBQRjkgc2V0dGluZyBmb3IgU0MwX1BXUiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGOU1GUF9JMlMwX01DTEsgICAgKDB4MDRVTDw8U1lTX0dQRl9NRlBIX1BGOU1GUF9Qb3MpIC8qITwgR1BGX01GUEggUEY5IHNldHRpbmcgZm9yIEkyUzBfTUNMSyAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjlNRlBfU1BJMF9TUyAgICAgICgweDA1VUw8PFNZU19HUEZfTUZQSF9QRjlNRlBfUG9zKSAvKiE8IEdQRl9NRlBIIFBGOSBzZXR0aW5nIGZvciBTUEkwX1NTICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEY5TUZQX1RBTVBFUjMgICAgICAoMHgwYVVMPDxTWVNfR1BGX01GUEhfUEY5TUZQX1BvcykgLyohPCBHUEZfTUZQSCBQRjkgc2V0dGluZyBmb3IgVEFNUEVSMyAgICAgKi8KKworLyogUEYuMTAgTUZQICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjEwTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEZfTUZQSF9QRjEwTUZQX1BvcykvKiE8IEdQRl9NRlBIIFBGMTAgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEYxME1GUF9FQklfQURSMTUgICAoMHgwMlVMPDxTWVNfR1BGX01GUEhfUEYxME1GUF9Qb3MpLyohPCBHUEZfTUZQSCBQRjEwIHNldHRpbmcgZm9yIEVCSV9BRFIxNSAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGMTBNRlBfU0MwX25DRCAgICAgKDB4MDNVTDw8U1lTX0dQRl9NRlBIX1BGMTBNRlBfUG9zKS8qITwgR1BGX01GUEggUEYxMCBzZXR0aW5nIGZvciBTQzBfbkNEICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjEwTUZQX0kyUzBfQkNMSyAgICgweDA0VUw8PFNZU19HUEZfTUZQSF9QRjEwTUZQX1BvcykvKiE8IEdQRl9NRlBIIFBGMTAgc2V0dGluZyBmb3IgSTJTMF9CQ0xLICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEYxME1GUF9TUEkwX0kyU01DTEsgKDB4MDVVTDw8U1lTX0dQRl9NRlBIX1BGMTBNRlBfUG9zKS8qITwgR1BGX01GUEggUEYxMCBzZXR0aW5nIGZvciBTUEkwX0kyU01DTEsqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEYxME1GUF9UQU1QRVI0ICAgICAoMHgwYVVMPDxTWVNfR1BGX01GUEhfUEYxME1GUF9Qb3MpLyohPCBHUEZfTUZQSCBQRjEwIHNldHRpbmcgZm9yIFRBTVBFUjQgICAgKi8KKworLyogUEYuMTEgTUZQICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjExTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEZfTUZQSF9QRjExTUZQX1BvcykvKiE8IEdQRl9NRlBIIFBGMTEgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEYxMU1GUF9FQklfQURSMTQgICAoMHgwMlVMPDxTWVNfR1BGX01GUEhfUEYxMU1GUF9Qb3MpLyohPCBHUEZfTUZQSCBQRjExIHNldHRpbmcgZm9yIEVCSV9BRFIxNCAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGMTFNRlBfU1BJMl9NT1NJICAgKDB4MDNVTDw8U1lTX0dQRl9NRlBIX1BGMTFNRlBfUG9zKS8qITwgR1BGX01GUEggUEYxMSBzZXR0aW5nIGZvciBTUEkyX01PU0kgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjExTUZQX1RBTVBFUjUgICAgICgweDBhVUw8PFNZU19HUEZfTUZQSF9QRjExTUZQX1BvcykvKiE8IEdQRl9NRlBIIFBGMTEgc2V0dGluZyBmb3IgVEFNUEVSNSAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEYxMU1GUF9UTTMgICAgICAgICAoMHgwZFVMPDxTWVNfR1BGX01GUEhfUEYxMU1GUF9Qb3MpLyohPCBHUEZfTUZQSCBQRjExIHNldHRpbmcgZm9yIFRNMyAgICAgICAgKi8KKworLyogUEcuMiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHMk1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQR19NRlBMX1BHMk1GUF9Qb3MpIC8qITwgR1BHX01GUEwgUEcyIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzJNRlBfRUJJX0FEUjExICAgICgweDAyVUw8PFNZU19HUEdfTUZQTF9QRzJNRlBfUG9zKSAvKiE8IEdQR19NRlBMIFBHMiBzZXR0aW5nIGZvciBFQklfQURSMTEgICAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEcyTUZQX1NQSTJfU1MgICAgICAoMHgwM1VMPDxTWVNfR1BHX01GUExfUEcyTUZQX1BvcykgLyohPCBHUEdfTUZQTCBQRzIgc2V0dGluZyBmb3IgU1BJMl9TUyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHMk1GUF9JMkMwX1NNQkFMICAgKDB4MDRVTDw8U1lTX0dQR19NRlBMX1BHMk1GUF9Qb3MpIC8qITwgR1BHX01GUEwgUEcyIHNldHRpbmcgZm9yIEkyQzBfU01CQUwgICovCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzJNRlBfSTJDMV9TQ0wgICAgICgweDA1VUw8PFNZU19HUEdfTUZQTF9QRzJNRlBfUG9zKSAvKiE8IEdQR19NRlBMIFBHMiBzZXR0aW5nIGZvciBJMkMxX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEcyTUZQX1RNMCAgICAgICAgICAoMHgwZFVMPDxTWVNfR1BHX01GUExfUEcyTUZQX1BvcykgLyohPCBHUEdfTUZQTCBQRzIgc2V0dGluZyBmb3IgVE0wICAgICAgICAgKi8KKworLyogUEcuMyBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHM01GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQR19NRlBMX1BHM01GUF9Qb3MpIC8qITwgR1BHX01GUEwgUEczIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzNNRlBfRUJJX0FEUjEyICAgICgweDAyVUw8PFNZU19HUEdfTUZQTF9QRzNNRlBfUG9zKSAvKiE8IEdQR19NRlBMIFBHMyBzZXR0aW5nIGZvciBFQklfQURSMTIgICAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEczTUZQX1NQSTJfQ0xLICAgICAoMHgwM1VMPDxTWVNfR1BHX01GUExfUEczTUZQX1BvcykgLyohPCBHUEdfTUZQTCBQRzMgc2V0dGluZyBmb3IgU1BJMl9DTEsgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHM01GUF9JMkMwX1NNQlNVUyAgKDB4MDRVTDw8U1lTX0dQR19NRlBMX1BHM01GUF9Qb3MpIC8qITwgR1BHX01GUEwgUEczIHNldHRpbmcgZm9yIEkyQzBfU01CU1VTICovCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzNNRlBfSTJDMV9TREEgICAgICgweDA1VUw8PFNZU19HUEdfTUZQTF9QRzNNRlBfUG9zKSAvKiE8IEdQR19NRlBMIFBHMyBzZXR0aW5nIGZvciBJMkMxX1NEQSAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEczTUZQX1RNMSAgICAgICAgICAoMHgwZFVMPDxTWVNfR1BHX01GUExfUEczTUZQX1BvcykgLyohPCBHUEdfTUZQTCBQRzMgc2V0dGluZyBmb3IgVE0xICAgICAgICAgKi8KKworLyogUEcuNCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHNE1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQR19NRlBMX1BHNE1GUF9Qb3MpIC8qITwgR1BHX01GUEwgUEc0IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzRNRlBfRUJJX0FEUjEzICAgICgweDAyVUw8PFNZU19HUEdfTUZQTF9QRzRNRlBfUG9zKSAvKiE8IEdQR19NRlBMIFBHNCBzZXR0aW5nIGZvciBFQklfQURSMTMgICAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEc0TUZQX1NQSTJfTUlTTyAgICAoMHgwM1VMPDxTWVNfR1BHX01GUExfUEc0TUZQX1BvcykgLyohPCBHUEdfTUZQTCBQRzQgc2V0dGluZyBmb3IgU1BJMl9NSVNPICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHNE1GUF9UTTIgICAgICAgICAgKDB4MGRVTDw8U1lTX0dQR19NRlBMX1BHNE1GUF9Qb3MpIC8qITwgR1BHX01GUEwgUEc0IHNldHRpbmcgZm9yIFRNMiAgICAgICAgICovCisKKy8qIFBHLjkgTUZQICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzlNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEdfTUZQSF9QRzlNRlBfUG9zKSAvKiE8IEdQR19NRlBIIFBHOSBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEc5TUZQX0VCSV9BRDAgICAgICAoMHgwMlVMPDxTWVNfR1BHX01GUEhfUEc5TUZQX1BvcykgLyohPCBHUEdfTUZQSCBQRzkgc2V0dGluZyBmb3IgRUJJX0FEMCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHOU1GUF9CUFdNMF9DSDUgICAgKDB4MGNVTDw8U1lTX0dQR19NRlBIX1BHOU1GUF9Qb3MpIC8qITwgR1BHX01GUEggUEc5IHNldHRpbmcgZm9yIEJQV00wX0NINSAgICovCisKKy8qIFBHLjEwIE1GUCAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxME1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BHX01GUEhfUEcxME1GUF9Qb3MpLyohPCBHUEdfTUZQSCBQRzEwIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTBNRlBfRUJJX0FEMSAgICAgKDB4MDJVTDw8U1lTX0dQR19NRlBIX1BHMTBNRlBfUG9zKS8qITwgR1BHX01GUEggUEcxMCBzZXR0aW5nIGZvciBFQklfQUQxICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzEwTUZQX0JQV00wX0NINCAgICgweDBjVUw8PFNZU19HUEdfTUZQSF9QRzEwTUZQX1BvcykvKiE8IEdQR19NRlBIIFBHMTAgc2V0dGluZyBmb3IgQlBXTTBfQ0g0ICAqLworCisvKiBQRy4xMSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTFNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQR19NRlBIX1BHMTFNRlBfUG9zKS8qITwgR1BHX01GUEggUEcxMSBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzExTUZQX0VCSV9BRDIgICAgICgweDAyVUw8PFNZU19HUEdfTUZQSF9QRzExTUZQX1BvcykvKiE8IEdQR19NRlBIIFBHMTEgc2V0dGluZyBmb3IgRUJJX0FEMiAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxMU1GUF9CUFdNMF9DSDMgICAoMHgwY1VMPDxTWVNfR1BHX01GUEhfUEcxMU1GUF9Qb3MpLyohPCBHUEdfTUZQSCBQRzExIHNldHRpbmcgZm9yIEJQV00wX0NIMyAgKi8KKworLyogUEcuMTIgTUZQICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzEyTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEdfTUZQSF9QRzEyTUZQX1BvcykvKiE8IEdQR19NRlBIIFBHMTIgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxMk1GUF9FQklfQUQzICAgICAoMHgwMlVMPDxTWVNfR1BHX01GUEhfUEcxMk1GUF9Qb3MpLyohPCBHUEdfTUZQSCBQRzEyIHNldHRpbmcgZm9yIEVCSV9BRDMgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTJNRlBfQlBXTTBfQ0gyICAgKDB4MGNVTDw8U1lTX0dQR19NRlBIX1BHMTJNRlBfUG9zKS8qITwgR1BHX01GUEggUEcxMiBzZXR0aW5nIGZvciBCUFdNMF9DSDIgICovCisKKy8qIFBHLjEzIE1GUCAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxM01GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BHX01GUEhfUEcxM01GUF9Qb3MpLyohPCBHUEdfTUZQSCBQRzEzIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTNNRlBfRUJJX0FENCAgICAgKDB4MDJVTDw8U1lTX0dQR19NRlBIX1BHMTNNRlBfUG9zKS8qITwgR1BHX01GUEggUEcxMyBzZXR0aW5nIGZvciBFQklfQUQ0ICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzEzTUZQX0JQV00wX0NIMSAgICgweDBjVUw8PFNZU19HUEdfTUZQSF9QRzEzTUZQX1BvcykvKiE8IEdQR19NRlBIIFBHMTMgc2V0dGluZyBmb3IgQlBXTTBfQ0gxICAqLworCisvKiBQRy4xNCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTRNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQR19NRlBIX1BHMTRNRlBfUG9zKS8qITwgR1BHX01GUEggUEcxNCBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzE0TUZQX0VCSV9BRDUgICAgICgweDAyVUw8PFNZU19HUEdfTUZQSF9QRzE0TUZQX1BvcykvKiE8IEdQR19NRlBIIFBHMTQgc2V0dGluZyBmb3IgRUJJX0FENSAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxNE1GUF9CUFdNMF9DSDAgICAoMHgwY1VMPDxTWVNfR1BHX01GUEhfUEcxNE1GUF9Qb3MpLyohPCBHUEdfTUZQSCBQRzE0IHNldHRpbmcgZm9yIEJQV00wX0NIMCAgKi8KKworLyogUEcuMTUgTUZQICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzE1TUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEdfTUZQSF9QRzE1TUZQX1BvcykvKiE8IEdQR19NRlBIIFBHMTUgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxNU1GUF9DTEtPICAgICAgICAoMHgwZVVMPDxTWVNfR1BHX01GUEhfUEcxNU1GUF9Qb3MpLyohPCBHUEdfTUZQSCBQRzE1IHNldHRpbmcgZm9yIENMS08gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTVNRlBfRUFEQzBfU1QgICAgKDB4MGZVTDw8U1lTX0dQR19NRlBIX1BHMTVNRlBfUG9zKS8qITwgR1BHX01GUEggUEcxNSBzZXR0aW5nIGZvciBFQURDMF9TVCAgICovCisKKy8qIFBILjQgTUZQICovCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDRNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEhfTUZQTF9QSDRNRlBfUG9zKSAvKiE8IEdQSF9NRlBMIFBINCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUExfUEg0TUZQX0VCSV9BRFIzICAgICAoMHgwMlVMPDxTWVNfR1BIX01GUExfUEg0TUZQX1BvcykgLyohPCBHUEhfTUZQTCBQSDQgc2V0dGluZyBmb3IgRUJJX0FEUjMgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BINE1GUF9TUEkxX01JU08gICAgKDB4MDNVTDw8U1lTX0dQSF9NRlBMX1BINE1GUF9Qb3MpIC8qITwgR1BIX01GUEwgUEg0IHNldHRpbmcgZm9yIFNQSTFfTUlTTyAgICovCisKKy8qIFBILjUgTUZQICovCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDVNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEhfTUZQTF9QSDVNRlBfUG9zKSAvKiE8IEdQSF9NRlBMIFBINSBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUExfUEg1TUZQX0VCSV9BRFIyICAgICAoMHgwMlVMPDxTWVNfR1BIX01GUExfUEg1TUZQX1BvcykgLyohPCBHUEhfTUZQTCBQSDUgc2V0dGluZyBmb3IgRUJJX0FEUjIgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BINU1GUF9TUEkxX01PU0kgICAgKDB4MDNVTDw8U1lTX0dQSF9NRlBMX1BINU1GUF9Qb3MpIC8qITwgR1BIX01GUEwgUEg1IHNldHRpbmcgZm9yIFNQSTFfTU9TSSAgICovCisKKy8qIFBILjYgTUZQICovCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDZNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEhfTUZQTF9QSDZNRlBfUG9zKSAvKiE8IEdQSF9NRlBMIFBINiBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUExfUEg2TUZQX0VCSV9BRFIxICAgICAoMHgwMlVMPDxTWVNfR1BIX01GUExfUEg2TUZQX1BvcykgLyohPCBHUEhfTUZQTCBQSDYgc2V0dGluZyBmb3IgRUJJX0FEUjEgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BINk1GUF9TUEkxX0NMSyAgICAgKDB4MDNVTDw8U1lTX0dQSF9NRlBMX1BINk1GUF9Qb3MpIC8qITwgR1BIX01GUEwgUEg2IHNldHRpbmcgZm9yIFNQSTFfQ0xLICAgICovCisKKy8qIFBILjcgTUZQICovCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDdNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEhfTUZQTF9QSDdNRlBfUG9zKSAvKiE8IEdQSF9NRlBMIFBINyBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUExfUEg3TUZQX0VCSV9BRFIwICAgICAoMHgwMlVMPDxTWVNfR1BIX01GUExfUEg3TUZQX1BvcykgLyohPCBHUEhfTUZQTCBQSDcgc2V0dGluZyBmb3IgRUJJX0FEUjAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BIN01GUF9TUEkxX1NTICAgICAgKDB4MDNVTDw8U1lTX0dQSF9NRlBMX1BIN01GUF9Qb3MpIC8qITwgR1BIX01GUEwgUEg3IHNldHRpbmcgZm9yIFNQSTFfU1MgICAgICovCisKKy8qIFBILjggTUZQICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDhNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEhfTUZQSF9QSDhNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg4TUZQX0VCSV9BRDEyICAgICAoMHgwMlVMPDxTWVNfR1BIX01GUEhfUEg4TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDggc2V0dGluZyBmb3IgRUJJX0FEMTIgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOE1GUF9RU1BJMF9DTEsgICAgKDB4MDNVTDw8U1lTX0dQSF9NRlBIX1BIOE1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIFFTUEkwX0NMSyAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDhNRlBfU0MyX1BXUiAgICAgICgweDA0VUw8PFNZU19HUEhfTUZQSF9QSDhNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBTQzJfUFdSICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg4TUZQX0kyUzBfREkgICAgICAoMHgwNVVMPDxTWVNfR1BIX01GUEhfUEg4TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDggc2V0dGluZyBmb3IgSTJTMF9ESSAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOE1GUF9TUEkxX0NMSyAgICAgKDB4MDZVTDw8U1lTX0dQSF9NRlBIX1BIOE1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIFNQSTFfQ0xLICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDhNRlBfVUFSVDNfblJUUyAgICgweDA3VUw8PFNZU19HUEhfTUZQSF9QSDhNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBVQVJUM19uUlRTICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg4TUZQX0kyQzFfU01CQUwgICAoMHgwOFVMPDxTWVNfR1BIX01GUEhfUEg4TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDggc2V0dGluZyBmb3IgSTJDMV9TTUJBTCAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOE1GUF9JMkMyX1NDTCAgICAgKDB4MDlVTDw8U1lTX0dQSF9NRlBIX1BIOE1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIEkyQzJfU0NMICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDhNRlBfVUFSVDFfVFhEICAgICgweDBhVUw8PFNZU19HUEhfTUZQSF9QSDhNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBVQVJUMV9UWEQgICAqLworCisvKiBQSC45IE1GUCAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg5TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BIX01GUEhfUEg5TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDkgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOU1GUF9FQklfQUQxMyAgICAgKDB4MDJVTDw8U1lTX0dQSF9NRlBIX1BIOU1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIEVCSV9BRDEzICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDlNRlBfUVNQSTBfU1MgICAgICgweDAzVUw8PFNZU19HUEhfTUZQSF9QSDlNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBRU1BJMF9TUyAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg5TUZQX1NDMl9SU1QgICAgICAoMHgwNFVMPDxTWVNfR1BIX01GUEhfUEg5TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDkgc2V0dGluZyBmb3IgU0MyX1JTVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOU1GUF9JMlMwX0RPICAgICAgKDB4MDVVTDw8U1lTX0dQSF9NRlBIX1BIOU1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIEkyUzBfRE8gICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDlNRlBfU1BJMV9TUyAgICAgICgweDA2VUw8PFNZU19HUEhfTUZQSF9QSDlNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBTUEkxX1NTICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg5TUZQX1VBUlQzX25DVFMgICAoMHgwN1VMPDxTWVNfR1BIX01GUEhfUEg5TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDkgc2V0dGluZyBmb3IgVUFSVDNfbkNUUyAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOU1GUF9JMkMxX1NNQlNVUyAgKDB4MDhVTDw8U1lTX0dQSF9NRlBIX1BIOU1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIEkyQzFfU01CU1VTICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDlNRlBfSTJDMl9TREEgICAgICgweDA5VUw8PFNZU19HUEhfTUZQSF9QSDlNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBJMkMyX1NEQSAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg5TUZQX1VBUlQxX1JYRCAgICAoMHgwYVVMPDxTWVNfR1BIX01GUEhfUEg5TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDkgc2V0dGluZyBmb3IgVUFSVDFfUlhEICAgKi8KKworLyogUEguMTAgTUZQICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDEwTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEhfTUZQSF9QSDEwTUZQX1BvcykvKiE8IEdQSF9NRlBIIFBIMTAgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEgxME1GUF9FQklfQUQxNCAgICAoMHgwMlVMPDxTWVNfR1BIX01GUEhfUEgxME1GUF9Qb3MpLyohPCBHUEhfTUZQSCBQSDEwIHNldHRpbmcgZm9yIEVCSV9BRDE0ICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTBNRlBfUVNQSTBfTUlTTzEgKDB4MDNVTDw8U1lTX0dQSF9NRlBIX1BIMTBNRlBfUG9zKS8qITwgR1BIX01GUEggUEgxMCBzZXR0aW5nIGZvciBRU1BJMF9NSVNPMSovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDEwTUZQX1NDMl9uQ0QgICAgICgweDA0VUw8PFNZU19HUEhfTUZQSF9QSDEwTUZQX1BvcykvKiE8IEdQSF9NRlBIIFBIMTAgc2V0dGluZyBmb3IgU0MyX25DRCAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEgxME1GUF9JMlMwX0xSQ0sgICAoMHgwNVVMPDxTWVNfR1BIX01GUEhfUEgxME1GUF9Qb3MpLyohPCBHUEhfTUZQSCBQSDEwIHNldHRpbmcgZm9yIEkyUzBfTFJDSyAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTBNRlBfU1BJMV9JMlNNQ0xLICgweDA2VUw8PFNZU19HUEhfTUZQSF9QSDEwTUZQX1BvcykvKiE8IEdQSF9NRlBIIFBIMTAgc2V0dGluZyBmb3IgU1BJMV9JMlNNQ0xLKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTBNRlBfVUFSVDRfVFhEICAgKDB4MDdVTDw8U1lTX0dQSF9NRlBIX1BIMTBNRlBfUG9zKS8qITwgR1BIX01GUEggUEgxMCBzZXR0aW5nIGZvciBVQVJUNF9UWEQgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDEwTUZQX1VBUlQwX1RYRCAgICgweDA4VUw8PFNZU19HUEhfTUZQSF9QSDEwTUZQX1BvcykvKiE8IEdQSF9NRlBIIFBIMTAgc2V0dGluZyBmb3IgVUFSVDBfVFhEICAqLworCisvKiBQSC4xMSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTFNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQSF9NRlBIX1BIMTFNRlBfUG9zKS8qITwgR1BIX01GUEggUEgxMSBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDExTUZQX0VCSV9BRDE1ICAgICgweDAyVUw8PFNZU19HUEhfTUZQSF9QSDExTUZQX1BvcykvKiE8IEdQSF9NRlBIIFBIMTEgc2V0dGluZyBmb3IgRUJJX0FEMTUgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEgxMU1GUF9RU1BJMF9NT1NJMSAoMHgwM1VMPDxTWVNfR1BIX01GUEhfUEgxMU1GUF9Qb3MpLyohPCBHUEhfTUZQSCBQSDExIHNldHRpbmcgZm9yIFFTUEkwX01PU0kxKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTFNRlBfVUFSVDRfUlhEICAgKDB4MDdVTDw8U1lTX0dQSF9NRlBIX1BIMTFNRlBfUG9zKS8qITwgR1BIX01GUEggUEgxMSBzZXR0aW5nIGZvciBVQVJUNF9SWEQgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDExTUZQX1VBUlQwX1JYRCAgICgweDA4VUw8PFNZU19HUEhfTUZQSF9QSDExTUZQX1BvcykvKiE8IEdQSF9NRlBIIFBIMTEgc2V0dGluZyBmb3IgVUFSVDBfUlhEICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEgxMU1GUF9FUFdNMF9DSDUgICAoMHgwYlVMPDxTWVNfR1BIX01GUEhfUEgxMU1GUF9Qb3MpLyohPCBHUEhfTUZQSCBQSDExIHNldHRpbmcgZm9yIEVQV00wX0NINSAgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgTXVsdGktRnVuY3Rpb24gc2V0dGluZyBjb25zdGFudCBkZWZpbml0aW9ucyBhYmJyZXZpYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgQUNNUDBfTl9QQjMgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfQUNNUDBfTiAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBBQ01QMF9OKi8KKyNkZWZpbmUgQUNNUDBfT19QQjcgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfQUNNUDBfTyAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBBQ01QMF9PKi8KKyNkZWZpbmUgQUNNUDBfT19QQzEgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfQUNNUDBfTyAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBBQ01QMF9PKi8KKyNkZWZpbmUgQUNNUDBfT19QQzEyICAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEyTUZQX0FDTVAwX08gICAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTIgc2V0dGluZyBmb3IgQUNNUDBfTyovCisjZGVmaW5lIEFDTVAwX1AwX1BBMTEgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9BQ01QMF9QMCAgICAgICAgLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIEFDTVAwX1AwKi8KKyNkZWZpbmUgQUNNUDBfUDFfUEIyICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfQUNNUDBfUDEgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBBQ01QMF9QMSovCisjZGVmaW5lIEFDTVAwX1AyX1BCMTIgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9BQ01QMF9QMiAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIEFDTVAwX1AyKi8KKyNkZWZpbmUgQUNNUDBfUDNfUEIxMyAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX0FDTVAwX1AzICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgQUNNUDBfUDMqLworI2RlZmluZSBBQ01QMF9XTEFUX1BBNyAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9BQ01QMF9XTEFUICAgICAgIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIEFDTVAwX1dMQVQqLworI2RlZmluZSBBQ01QMV9OX1BCNSAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9BQ01QMV9OICAgICAgICAgIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIEFDTVAxX04qLworI2RlZmluZSBBQ01QMV9PX1BCNiAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNk1GUF9BQ01QMV9PICAgICAgICAgIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIEFDTVAxX08qLworI2RlZmluZSBBQ01QMV9PX1BDMTEgICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTFNRlBfQUNNUDFfTyAgICAgICAgIC8qITwgR1BDX01GUEggUEMxMSBzZXR0aW5nIGZvciBBQ01QMV9PKi8KKyNkZWZpbmUgQUNNUDFfT19QQzAgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfQUNNUDFfTyAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBBQ01QMV9PKi8KKyNkZWZpbmUgQUNNUDFfUDBfUEExMCAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX0FDTVAxX1AwICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgQUNNUDFfUDAqLworI2RlZmluZSBBQ01QMV9QMV9QQjQgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9BQ01QMV9QMSAgICAgICAgIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIEFDTVAxX1AxKi8KKyNkZWZpbmUgQUNNUDFfUDJfUEIxMiAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX0FDTVAxX1AyICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgQUNNUDFfUDIqLworI2RlZmluZSBBQ01QMV9QM19QQjEzICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfQUNNUDFfUDMgICAgICAgIC8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBBQ01QMV9QMyovCisjZGVmaW5lIEFDTVAxX1dMQVRfUEE2ICAgICAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX0FDTVAxX1dMQVQgICAgICAgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgQUNNUDFfV0xBVCovCisjZGVmaW5lIEJQV00wX0NIMF9QQTAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEwTUZQX0JQV00wX0NIMCAgICAgICAgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgQlBXTTBfQ0gwKi8KKyNkZWZpbmUgQlBXTTBfQ0gwX1BBMTEgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX0JQV00wX0NIMCAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgQlBXTTBfQ0gwKi8KKyNkZWZpbmUgQlBXTTBfQ0gwX1BFMiAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTJNRlBfQlBXTTBfQ0gwICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMiBzZXR0aW5nIGZvciBCUFdNMF9DSDAqLworI2RlZmluZSBCUFdNMF9DSDBfUEcxNCAgICAgICAgICAgU1lTX0dQR19NRlBIX1BHMTRNRlBfQlBXTTBfQ0gwICAgICAgIC8qITwgR1BHX01GUEggUEcxNCBzZXR0aW5nIGZvciBCUFdNMF9DSDAqLworI2RlZmluZSBCUFdNMF9DSDFfUEExICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9CUFdNMF9DSDEgICAgICAgIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIEJQV00wX0NIMSovCisjZGVmaW5lIEJQV00wX0NIMV9QRTMgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX0JQV00wX0NIMSAgICAgICAgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgQlBXTTBfQ0gxKi8KKyNkZWZpbmUgQlBXTTBfQ0gxX1BHMTMgICAgICAgICAgIFNZU19HUEdfTUZQSF9QRzEzTUZQX0JQV00wX0NIMSAgICAgICAvKiE8IEdQR19NRlBIIFBHMTMgc2V0dGluZyBmb3IgQlBXTTBfQ0gxKi8KKyNkZWZpbmUgQlBXTTBfQ0gxX1BBMTAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX0JQV00wX0NIMSAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgQlBXTTBfQ0gxKi8KKyNkZWZpbmUgQlBXTTBfQ0gyX1BFNCAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTRNRlBfQlBXTTBfQ0gyICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNCBzZXR0aW5nIGZvciBCUFdNMF9DSDIqLworI2RlZmluZSBCUFdNMF9DSDJfUEcxMiAgICAgICAgICAgU1lTX0dQR19NRlBIX1BHMTJNRlBfQlBXTTBfQ0gyICAgICAgIC8qITwgR1BHX01GUEggUEcxMiBzZXR0aW5nIGZvciBCUFdNMF9DSDIqLworI2RlZmluZSBCUFdNMF9DSDJfUEEyICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMk1GUF9CUFdNMF9DSDIgICAgICAgIC8qITwgR1BBX01GUEwgUEEyIHNldHRpbmcgZm9yIEJQV00wX0NIMiovCisjZGVmaW5lIEJQV00wX0NIMl9QQTkgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEE5TUZQX0JQV00wX0NIMiAgICAgICAgLyohPCBHUEFfTUZQSCBQQTkgc2V0dGluZyBmb3IgQlBXTTBfQ0gyKi8KKyNkZWZpbmUgQlBXTTBfQ0gzX1BHMTEgICAgICAgICAgIFNZU19HUEdfTUZQSF9QRzExTUZQX0JQV00wX0NIMyAgICAgICAvKiE8IEdQR19NRlBIIFBHMTEgc2V0dGluZyBmb3IgQlBXTTBfQ0gzKi8KKyNkZWZpbmUgQlBXTTBfQ0gzX1BBMyAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfQlBXTTBfQ0gzICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBCUFdNMF9DSDMqLworI2RlZmluZSBCUFdNMF9DSDNfUEE4ICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9CUFdNMF9DSDMgICAgICAgIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIEJQV00wX0NIMyovCisjZGVmaW5lIEJQV00wX0NIM19QRTUgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU1TUZQX0JQV00wX0NIMyAgICAgICAgLyohPCBHUEVfTUZQTCBQRTUgc2V0dGluZyBmb3IgQlBXTTBfQ0gzKi8KKyNkZWZpbmUgQlBXTTBfQ0g0X1BHMTAgICAgICAgICAgIFNZU19HUEdfTUZQSF9QRzEwTUZQX0JQV00wX0NINCAgICAgICAvKiE8IEdQR19NRlBIIFBHMTAgc2V0dGluZyBmb3IgQlBXTTBfQ0g0Ki8KKyNkZWZpbmUgQlBXTTBfQ0g0X1BBNCAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfQlBXTTBfQ0g0ICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBCUFdNMF9DSDQqLworI2RlZmluZSBCUFdNMF9DSDRfUEMxMyAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfQlBXTTBfQ0g0ICAgICAgIC8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBCUFdNMF9DSDQqLworI2RlZmluZSBCUFdNMF9DSDRfUEU2ICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNk1GUF9CUFdNMF9DSDQgICAgICAgIC8qITwgR1BFX01GUEwgUEU2IHNldHRpbmcgZm9yIEJQV00wX0NINCovCisjZGVmaW5lIEJQV00wX0NINF9QRjUgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY1TUZQX0JQV00wX0NINCAgICAgICAgLyohPCBHUEZfTUZQTCBQRjUgc2V0dGluZyBmb3IgQlBXTTBfQ0g0Ki8KKyNkZWZpbmUgQlBXTTBfQ0g1X1BBNSAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfQlBXTTBfQ0g1ICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBCUFdNMF9DSDUqLworI2RlZmluZSBCUFdNMF9DSDVfUEU3ICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFN01GUF9CUFdNMF9DSDUgICAgICAgIC8qITwgR1BFX01GUEwgUEU3IHNldHRpbmcgZm9yIEJQV00wX0NINSovCisjZGVmaW5lIEJQV00wX0NINV9QRjQgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY0TUZQX0JQV00wX0NINSAgICAgICAgLyohPCBHUEZfTUZQTCBQRjQgc2V0dGluZyBmb3IgQlBXTTBfQ0g1Ki8KKyNkZWZpbmUgQlBXTTBfQ0g1X1BEMTIgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEyTUZQX0JQV00wX0NINSAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTIgc2V0dGluZyBmb3IgQlBXTTBfQ0g1Ki8KKyNkZWZpbmUgQlBXTTBfQ0g1X1BHOSAgICAgICAgICAgIFNZU19HUEdfTUZQSF9QRzlNRlBfQlBXTTBfQ0g1ICAgICAgICAvKiE8IEdQR19NRlBIIFBHOSBzZXR0aW5nIGZvciBCUFdNMF9DSDUqLworI2RlZmluZSBCUFdNMV9DSDBfUEIxMSAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfQlBXTTFfQ0gwICAgICAgIC8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBCUFdNMV9DSDAqLworI2RlZmluZSBCUFdNMV9DSDBfUEM3ICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9CUFdNMV9DSDAgICAgICAgIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIEJQV00xX0NIMCovCisjZGVmaW5lIEJQV00xX0NIMF9QRjAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEYwTUZQX0JQV00xX0NIMCAgICAgICAgLyohPCBHUEZfTUZQTCBQRjAgc2V0dGluZyBmb3IgQlBXTTFfQ0gwKi8KKyNkZWZpbmUgQlBXTTFfQ0gwX1BGMyAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjNNRlBfQlBXTTFfQ0gwICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMyBzZXR0aW5nIGZvciBCUFdNMV9DSDAqLworI2RlZmluZSBCUFdNMV9DSDFfUEM2ICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9CUFdNMV9DSDEgICAgICAgIC8qITwgR1BDX01GUEwgUEM2IHNldHRpbmcgZm9yIEJQV00xX0NIMSovCisjZGVmaW5lIEJQV00xX0NIMV9QRjEgICAgICAgICAgICBTWVNfR1BGX01GUExfUEYxTUZQX0JQV00xX0NIMSAgICAgICAgLyohPCBHUEZfTUZQTCBQRjEgc2V0dGluZyBmb3IgQlBXTTFfQ0gxKi8KKyNkZWZpbmUgQlBXTTFfQ0gxX1BGMiAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjJNRlBfQlBXTTFfQ0gxICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMiBzZXR0aW5nIGZvciBCUFdNMV9DSDEqLworI2RlZmluZSBCUFdNMV9DSDFfUEIxMCAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfQlBXTTFfQ0gxICAgICAgIC8qITwgR1BCX01GUEggUEIxMCBzZXR0aW5nIGZvciBCUFdNMV9DSDEqLworI2RlZmluZSBCUFdNMV9DSDJfUEI5ICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOU1GUF9CUFdNMV9DSDIgICAgICAgIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIEJQV00xX0NIMiovCisjZGVmaW5lIEJQV00xX0NIMl9QQTcgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX0JQV00xX0NIMiAgICAgICAgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgQlBXTTFfQ0gyKi8KKyNkZWZpbmUgQlBXTTFfQ0gyX1BBMTIgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEyTUZQX0JQV00xX0NIMiAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgQlBXTTFfQ0gyKi8KKyNkZWZpbmUgQlBXTTFfQ0gzX1BBNiAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfQlBXTTFfQ0gzICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBCUFdNMV9DSDMqLworI2RlZmluZSBCUFdNMV9DSDNfUEExMyAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfQlBXTTFfQ0gzICAgICAgIC8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBCUFdNMV9DSDMqLworI2RlZmluZSBCUFdNMV9DSDNfUEI4ICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9CUFdNMV9DSDMgICAgICAgIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIEJQV00xX0NIMyovCisjZGVmaW5lIEJQV00xX0NINF9QQTE0ICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExNE1GUF9CUFdNMV9DSDQgICAgICAgLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIEJQV00xX0NINCovCisjZGVmaW5lIEJQV00xX0NINF9QQzggICAgICAgICAgICBTWVNfR1BDX01GUEhfUEM4TUZQX0JQV00xX0NINCAgICAgICAgLyohPCBHUENfTUZQSCBQQzggc2V0dGluZyBmb3IgQlBXTTFfQ0g0Ki8KKyNkZWZpbmUgQlBXTTFfQ0g0X1BCNyAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfQlBXTTFfQ0g0ICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBCUFdNMV9DSDQqLworI2RlZmluZSBCUFdNMV9DSDVfUEExNSAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTVNRlBfQlBXTTFfQ0g1ICAgICAgIC8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBCUFdNMV9DSDUqLworI2RlZmluZSBCUFdNMV9DSDVfUEI2ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNk1GUF9CUFdNMV9DSDUgICAgICAgIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIEJQV00xX0NINSovCisjZGVmaW5lIEJQV00xX0NINV9QRTEzICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxM01GUF9CUFdNMV9DSDUgICAgICAgLyohPCBHUEVfTUZQSCBQRTEzIHNldHRpbmcgZm9yIEJQV00xX0NINSovCisjZGVmaW5lIENBTjBfUlhEX1BBMTMgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExM01GUF9DQU4wX1JYRCAgICAgICAgLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIENBTjBfUlhEKi8KKyNkZWZpbmUgQ0FOMF9SWERfUEQxMCAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEwTUZQX0NBTjBfUlhEICAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTAgc2V0dGluZyBmb3IgQ0FOMF9SWEQqLworI2RlZmluZSBDQU4wX1JYRF9QQTQgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNE1GUF9DQU4wX1JYRCAgICAgICAgIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIENBTjBfUlhEKi8KKyNkZWZpbmUgQ0FOMF9SWERfUEM0ICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfQ0FOMF9SWEQgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBDQU4wX1JYRCovCisjZGVmaW5lIENBTjBfUlhEX1BCMTAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9DQU4wX1JYRCAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIENBTjBfUlhEKi8KKyNkZWZpbmUgQ0FOMF9SWERfUEUxNSAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTE1TUZQX0NBTjBfUlhEICAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTUgc2V0dGluZyBmb3IgQ0FOMF9SWEQqLworI2RlZmluZSBDQU4wX1RYRF9QRDExICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTFNRlBfQ0FOMF9UWEQgICAgICAgIC8qITwgR1BEX01GUEggUEQxMSBzZXR0aW5nIGZvciBDQU4wX1RYRCovCisjZGVmaW5lIENBTjBfVFhEX1BDNSAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM1TUZQX0NBTjBfVFhEICAgICAgICAgLyohPCBHUENfTUZQTCBQQzUgc2V0dGluZyBmb3IgQ0FOMF9UWEQqLworI2RlZmluZSBDQU4wX1RYRF9QQjExICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfQ0FOMF9UWEQgICAgICAgIC8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBDQU4wX1RYRCovCisjZGVmaW5lIENBTjBfVFhEX1BBMTIgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9DQU4wX1RYRCAgICAgICAgLyohPCBHUEFfTUZQSCBQQTEyIHNldHRpbmcgZm9yIENBTjBfVFhEKi8KKyNkZWZpbmUgQ0FOMF9UWERfUEUxNCAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTE0TUZQX0NBTjBfVFhEICAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTQgc2V0dGluZyBmb3IgQ0FOMF9UWEQqLworI2RlZmluZSBDQU4wX1RYRF9QQTUgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9DQU4wX1RYRCAgICAgICAgIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIENBTjBfVFhEKi8KKyNkZWZpbmUgQ0xLT19QQzEzICAgICAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEzTUZQX0NMS08gICAgICAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTMgc2V0dGluZyBmb3IgQ0xLTyovCisjZGVmaW5lIENMS09fUEIxNCAgICAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9DTEtPICAgICAgICAgICAgLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIENMS08qLworI2RlZmluZSBDTEtPX1BEMTIgICAgICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfQ0xLTyAgICAgICAgICAgIC8qITwgR1BEX01GUEggUEQxMiBzZXR0aW5nIGZvciBDTEtPKi8KKyNkZWZpbmUgQ0xLT19QRzE1ICAgICAgICAgICAgICAgIFNZU19HUEdfTUZQSF9QRzE1TUZQX0NMS08gICAgICAgICAgICAvKiE8IEdQR19NRlBIIFBHMTUgc2V0dGluZyBmb3IgQ0xLTyovCisjZGVmaW5lIERBQzBfT1VUX1BCMTIgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9EQUMwX09VVCAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIERBQzBfT1VUKi8KKyNkZWZpbmUgREFDMF9TVF9QQTEwICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX0RBQzBfU1QgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgREFDMF9TVCovCisjZGVmaW5lIERBQzBfU1RfUEEwICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEwTUZQX0RBQzBfU1QgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgREFDMF9TVCovCisjZGVmaW5lIERBQzFfT1VUX1BCMTMgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9EQUMxX09VVCAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIERBQzFfT1VUKi8KKyNkZWZpbmUgREFDMV9TVF9QQTEgICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTFNRlBfREFDMV9TVCAgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMSBzZXR0aW5nIGZvciBEQUMxX1NUKi8KKyNkZWZpbmUgREFDMV9TVF9QQTExICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX0RBQzFfU1QgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgREFDMV9TVCovCisjZGVmaW5lIEVBREMwX0NIMF9QQjAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIwTUZQX0VBREMwX0NIMCAgICAgICAgLyohPCBHUEJfTUZQTCBQQjAgc2V0dGluZyBmb3IgRUFEQzBfQ0gwKi8KKyNkZWZpbmUgRUFEQzBfQ0gxX1BCMSAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfRUFEQzBfQ0gxICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBFQURDMF9DSDEqLworI2RlZmluZSBFQURDMF9DSDEwX1BCMTAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfRUFEQzBfQ0gxMCAgICAgIC8qITwgR1BCX01GUEggUEIxMCBzZXR0aW5nIGZvciBFQURDMF9DSDEwKi8KKyNkZWZpbmUgRUFEQzBfQ0gxMV9QQjExICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjExTUZQX0VBREMwX0NIMTEgICAgICAvKiE8IEdQQl9NRlBIIFBCMTEgc2V0dGluZyBmb3IgRUFEQzBfQ0gxMSovCisjZGVmaW5lIEVBREMwX0NIMTJfUEIxMiAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9FQURDMF9DSDEyICAgICAgLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIEVBREMwX0NIMTIqLworI2RlZmluZSBFQURDMF9DSDEzX1BCMTMgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfRUFEQzBfQ0gxMyAgICAgIC8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBFQURDMF9DSDEzKi8KKyNkZWZpbmUgRUFEQzBfQ0gxNF9QQjE0ICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX0VBREMwX0NIMTQgICAgICAvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgRUFEQzBfQ0gxNCovCisjZGVmaW5lIEVBREMwX0NIMTVfUEIxNSAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9FQURDMF9DSDE1ICAgICAgLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIEVBREMwX0NIMTUqLworI2RlZmluZSBFQURDMF9DSDJfUEIyICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9FQURDMF9DSDIgICAgICAgIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIEVBREMwX0NIMiovCisjZGVmaW5lIEVBREMwX0NIM19QQjMgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX0VBREMwX0NIMyAgICAgICAgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgRUFEQzBfQ0gzKi8KKyNkZWZpbmUgRUFEQzBfQ0g0X1BCNCAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfRUFEQzBfQ0g0ICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBFQURDMF9DSDQqLworI2RlZmluZSBFQURDMF9DSDVfUEI1ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9FQURDMF9DSDUgICAgICAgIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIEVBREMwX0NINSovCisjZGVmaW5lIEVBREMwX0NINl9QQjYgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX0VBREMwX0NINiAgICAgICAgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgRUFEQzBfQ0g2Ki8KKyNkZWZpbmUgRUFEQzBfQ0g3X1BCNyAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfRUFEQzBfQ0g3ICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBFQURDMF9DSDcqLworI2RlZmluZSBFQURDMF9DSDhfUEI4ICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9FQURDMF9DSDggICAgICAgIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIEVBREMwX0NIOCovCisjZGVmaW5lIEVBREMwX0NIOV9QQjkgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX0VBREMwX0NIOSAgICAgICAgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgRUFEQzBfQ0g5Ki8KKyNkZWZpbmUgRUFEQzBfU1RfUEQxMiAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEyTUZQX0VBREMwX1NUICAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTIgc2V0dGluZyBmb3IgRUFEQzBfU1QqLworI2RlZmluZSBFQURDMF9TVF9QRjUgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNU1GUF9FQURDMF9TVCAgICAgICAgIC8qITwgR1BGX01GUEwgUEY1IHNldHRpbmcgZm9yIEVBREMwX1NUKi8KKyNkZWZpbmUgRUFEQzBfU1RfUEMxMyAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEzTUZQX0VBREMwX1NUICAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTMgc2V0dGluZyBmb3IgRUFEQzBfU1QqLworI2RlZmluZSBFQURDMF9TVF9QRzE1ICAgICAgICAgICAgU1lTX0dQR19NRlBIX1BHMTVNRlBfRUFEQzBfU1QgICAgICAgIC8qITwgR1BHX01GUEggUEcxNSBzZXR0aW5nIGZvciBFQURDMF9TVCovCisjZGVmaW5lIEVCSV9BRDBfUEc5ICAgICAgICAgICAgICBTWVNfR1BHX01GUEhfUEc5TUZQX0VCSV9BRDAgICAgICAgICAgLyohPCBHUEdfTUZQSCBQRzkgc2V0dGluZyBmb3IgRUJJX0FEMCovCisjZGVmaW5lIEVCSV9BRDBfUEMwICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMwTUZQX0VCSV9BRDAgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgRUJJX0FEMCovCisjZGVmaW5lIEVCSV9BRDFfUEMxICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMxTUZQX0VCSV9BRDEgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzEgc2V0dGluZyBmb3IgRUJJX0FEMSovCisjZGVmaW5lIEVCSV9BRDFfUEcxMCAgICAgICAgICAgICBTWVNfR1BHX01GUEhfUEcxME1GUF9FQklfQUQxICAgICAgICAgLyohPCBHUEdfTUZQSCBQRzEwIHNldHRpbmcgZm9yIEVCSV9BRDEqLworI2RlZmluZSBFQklfQUQxMF9QRTEgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFMU1GUF9FQklfQUQxMCAgICAgICAgIC8qITwgR1BFX01GUEwgUEUxIHNldHRpbmcgZm9yIEVCSV9BRDEwKi8KKyNkZWZpbmUgRUJJX0FEMTBfUEQzICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDNNRlBfRUJJX0FEMTAgICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMyBzZXR0aW5nIGZvciBFQklfQUQxMCovCisjZGVmaW5lIEVCSV9BRDEwX1BEMTMgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxM01GUF9FQklfQUQxMCAgICAgICAgLyohPCBHUERfTUZQSCBQRDEzIHNldHRpbmcgZm9yIEVCSV9BRDEwKi8KKyNkZWZpbmUgRUJJX0FEMTFfUEUwICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTBNRlBfRUJJX0FEMTEgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMCBzZXR0aW5nIGZvciBFQklfQUQxMSovCisjZGVmaW5lIEVCSV9BRDExX1BEMiAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQyTUZQX0VCSV9BRDExICAgICAgICAgLyohPCBHUERfTUZQTCBQRDIgc2V0dGluZyBmb3IgRUJJX0FEMTEqLworI2RlZmluZSBFQklfQUQxMl9QRDEgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEMU1GUF9FQklfQUQxMiAgICAgICAgIC8qITwgR1BEX01GUEwgUEQxIHNldHRpbmcgZm9yIEVCSV9BRDEyKi8KKyNkZWZpbmUgRUJJX0FEMTJfUEIxNSAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX0VCSV9BRDEyICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgRUJJX0FEMTIqLworI2RlZmluZSBFQklfQUQxMl9QSDggICAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9FQklfQUQxMiAgICAgICAgIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIEVCSV9BRDEyKi8KKyNkZWZpbmUgRUJJX0FEMTNfUEQwICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDBNRlBfRUJJX0FEMTMgICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMCBzZXR0aW5nIGZvciBFQklfQUQxMyovCisjZGVmaW5lIEVCSV9BRDEzX1BCMTQgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9FQklfQUQxMyAgICAgICAgLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIEVCSV9BRDEzKi8KKyNkZWZpbmUgRUJJX0FEMTNfUEg5ICAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfRUJJX0FEMTMgICAgICAgICAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBFQklfQUQxMyovCisjZGVmaW5lIEVCSV9BRDE0X1BCMTMgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9FQklfQUQxNCAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIEVCSV9BRDE0Ki8KKyNkZWZpbmUgRUJJX0FEMTRfUEgxMCAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDEwTUZQX0VCSV9BRDE0ICAgICAgICAvKiE8IEdQSF9NRlBIIFBIMTAgc2V0dGluZyBmb3IgRUJJX0FEMTQqLworI2RlZmluZSBFQklfQUQxNV9QQjEyICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfRUJJX0FEMTUgICAgICAgIC8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBFQklfQUQxNSovCisjZGVmaW5lIEVCSV9BRDE1X1BIMTEgICAgICAgICAgICBTWVNfR1BIX01GUEhfUEgxMU1GUF9FQklfQUQxNSAgICAgICAgLyohPCBHUEhfTUZQSCBQSDExIHNldHRpbmcgZm9yIEVCSV9BRDE1Ki8KKyNkZWZpbmUgRUJJX0FEMl9QRzExICAgICAgICAgICAgIFNZU19HUEdfTUZQSF9QRzExTUZQX0VCSV9BRDIgICAgICAgICAvKiE8IEdQR19NRlBIIFBHMTEgc2V0dGluZyBmb3IgRUJJX0FEMiovCisjZGVmaW5lIEVCSV9BRDJfUEMyICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMyTUZQX0VCSV9BRDIgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgRUJJX0FEMiovCisjZGVmaW5lIEVCSV9BRDNfUEMzICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX0VCSV9BRDMgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgRUJJX0FEMyovCisjZGVmaW5lIEVCSV9BRDNfUEcxMiAgICAgICAgICAgICBTWVNfR1BHX01GUEhfUEcxMk1GUF9FQklfQUQzICAgICAgICAgLyohPCBHUEdfTUZQSCBQRzEyIHNldHRpbmcgZm9yIEVCSV9BRDMqLworI2RlZmluZSBFQklfQUQ0X1BHMTMgICAgICAgICAgICAgU1lTX0dQR19NRlBIX1BHMTNNRlBfRUJJX0FENCAgICAgICAgIC8qITwgR1BHX01GUEggUEcxMyBzZXR0aW5nIGZvciBFQklfQUQ0Ki8KKyNkZWZpbmUgRUJJX0FENF9QQzQgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfRUJJX0FENCAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBFQklfQUQ0Ki8KKyNkZWZpbmUgRUJJX0FENV9QRzE0ICAgICAgICAgICAgIFNZU19HUEdfTUZQSF9QRzE0TUZQX0VCSV9BRDUgICAgICAgICAvKiE8IEdQR19NRlBIIFBHMTQgc2V0dGluZyBmb3IgRUJJX0FENSovCisjZGVmaW5lIEVCSV9BRDVfUEM1ICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM1TUZQX0VCSV9BRDUgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzUgc2V0dGluZyBmb3IgRUJJX0FENSovCisjZGVmaW5lIEVCSV9BRDZfUEQ4ICAgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQ4TUZQX0VCSV9BRDYgICAgICAgICAgLyohPCBHUERfTUZQSCBQRDggc2V0dGluZyBmb3IgRUJJX0FENiovCisjZGVmaW5lIEVCSV9BRDZfUEE2ICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX0VCSV9BRDYgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgRUJJX0FENiovCisjZGVmaW5lIEVCSV9BRDdfUEE3ICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX0VCSV9BRDcgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgRUJJX0FENyovCisjZGVmaW5lIEVCSV9BRDdfUEQ5ICAgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQ5TUZQX0VCSV9BRDcgICAgICAgICAgLyohPCBHUERfTUZQSCBQRDkgc2V0dGluZyBmb3IgRUJJX0FENyovCisjZGVmaW5lIEVCSV9BRDhfUEM2ICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM2TUZQX0VCSV9BRDggICAgICAgICAgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgRUJJX0FEOCovCisjZGVmaW5lIEVCSV9BRDhfUEUxNCAgICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxNE1GUF9FQklfQUQ4ICAgICAgICAgLyohPCBHUEVfTUZQSCBQRTE0IHNldHRpbmcgZm9yIEVCSV9BRDgqLworI2RlZmluZSBFQklfQUQ5X1BFMTUgICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTVNRlBfRUJJX0FEOSAgICAgICAgIC8qITwgR1BFX01GUEggUEUxNSBzZXR0aW5nIGZvciBFQklfQUQ5Ki8KKyNkZWZpbmUgRUJJX0FEOV9QQzcgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfRUJJX0FEOSAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBFQklfQUQ5Ki8KKyNkZWZpbmUgRUJJX0FEUjBfUEI1ICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfRUJJX0FEUjAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBFQklfQURSMCovCisjZGVmaW5lIEVCSV9BRFIwX1BINyAgICAgICAgICAgICBTWVNfR1BIX01GUExfUEg3TUZQX0VCSV9BRFIwICAgICAgICAgLyohPCBHUEhfTUZQTCBQSDcgc2V0dGluZyBmb3IgRUJJX0FEUjAqLworI2RlZmluZSBFQklfQURSMV9QSDYgICAgICAgICAgICAgU1lTX0dQSF9NRlBMX1BINk1GUF9FQklfQURSMSAgICAgICAgIC8qITwgR1BIX01GUEwgUEg2IHNldHRpbmcgZm9yIEVCSV9BRFIxKi8KKyNkZWZpbmUgRUJJX0FEUjFfUEI0ICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfRUJJX0FEUjEgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBFQklfQURSMSovCisjZGVmaW5lIEVCSV9BRFIxMF9QRTggICAgICAgICAgICBTWVNfR1BFX01GUEhfUEU4TUZQX0VCSV9BRFIxMCAgICAgICAgLyohPCBHUEVfTUZQSCBQRTggc2V0dGluZyBmb3IgRUJJX0FEUjEwKi8KKyNkZWZpbmUgRUJJX0FEUjEwX1BDMTMgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEzTUZQX0VCSV9BRFIxMCAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTMgc2V0dGluZyBmb3IgRUJJX0FEUjEwKi8KKyNkZWZpbmUgRUJJX0FEUjExX1BHMiAgICAgICAgICAgIFNZU19HUEdfTUZQTF9QRzJNRlBfRUJJX0FEUjExICAgICAgICAvKiE8IEdQR19NRlBMIFBHMiBzZXR0aW5nIGZvciBFQklfQURSMTEqLworI2RlZmluZSBFQklfQURSMTFfUEU5ICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9FQklfQURSMTEgICAgICAgIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIEVCSV9BRFIxMSovCisjZGVmaW5lIEVCSV9BRFIxMl9QRzMgICAgICAgICAgICBTWVNfR1BHX01GUExfUEczTUZQX0VCSV9BRFIxMiAgICAgICAgLyohPCBHUEdfTUZQTCBQRzMgc2V0dGluZyBmb3IgRUJJX0FEUjEyKi8KKyNkZWZpbmUgRUJJX0FEUjEyX1BFMTAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX0VCSV9BRFIxMiAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgRUJJX0FEUjEyKi8KKyNkZWZpbmUgRUJJX0FEUjEzX1BHNCAgICAgICAgICAgIFNZU19HUEdfTUZQTF9QRzRNRlBfRUJJX0FEUjEzICAgICAgICAvKiE8IEdQR19NRlBMIFBHNCBzZXR0aW5nIGZvciBFQklfQURSMTMqLworI2RlZmluZSBFQklfQURSMTNfUEUxMSAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfRUJJX0FEUjEzICAgICAgIC8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBFQklfQURSMTMqLworI2RlZmluZSBFQklfQURSMTRfUEUxMiAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTJNRlBfRUJJX0FEUjE0ICAgICAgIC8qITwgR1BFX01GUEggUEUxMiBzZXR0aW5nIGZvciBFQklfQURSMTQqLworI2RlZmluZSBFQklfQURSMTRfUEYxMSAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGMTFNRlBfRUJJX0FEUjE0ICAgICAgIC8qITwgR1BGX01GUEggUEYxMSBzZXR0aW5nIGZvciBFQklfQURSMTQqLworI2RlZmluZSBFQklfQURSMTVfUEYxMCAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGMTBNRlBfRUJJX0FEUjE1ICAgICAgIC8qITwgR1BGX01GUEggUEYxMCBzZXR0aW5nIGZvciBFQklfQURSMTUqLworI2RlZmluZSBFQklfQURSMTVfUEUxMyAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTNNRlBfRUJJX0FEUjE1ICAgICAgIC8qITwgR1BFX01GUEggUEUxMyBzZXR0aW5nIGZvciBFQklfQURSMTUqLworI2RlZmluZSBFQklfQURSMTZfUEIxMSAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfRUJJX0FEUjE2ICAgICAgIC8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBFQklfQURSMTYqLworI2RlZmluZSBFQklfQURSMTZfUEY5ICAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOU1GUF9FQklfQURSMTYgICAgICAgIC8qITwgR1BGX01GUEggUEY5IHNldHRpbmcgZm9yIEVCSV9BRFIxNiovCisjZGVmaW5lIEVCSV9BRFIxNl9QQzggICAgICAgICAgICBTWVNfR1BDX01GUEhfUEM4TUZQX0VCSV9BRFIxNiAgICAgICAgLyohPCBHUENfTUZQSCBQQzggc2V0dGluZyBmb3IgRUJJX0FEUjE2Ki8KKyNkZWZpbmUgRUJJX0FEUjE3X1BGOCAgICAgICAgICAgIFNZU19HUEZfTUZQSF9QRjhNRlBfRUJJX0FEUjE3ICAgICAgICAvKiE8IEdQRl9NRlBIIFBGOCBzZXR0aW5nIGZvciBFQklfQURSMTcqLworI2RlZmluZSBFQklfQURSMTdfUEIxMCAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfRUJJX0FEUjE3ICAgICAgIC8qITwgR1BCX01GUEggUEIxMCBzZXR0aW5nIGZvciBFQklfQURSMTcqLworI2RlZmluZSBFQklfQURSMThfUEI5ICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOU1GUF9FQklfQURSMTggICAgICAgIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIEVCSV9BRFIxOCovCisjZGVmaW5lIEVCSV9BRFIxOF9QRjcgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY3TUZQX0VCSV9BRFIxOCAgICAgICAgLyohPCBHUEZfTUZQTCBQRjcgc2V0dGluZyBmb3IgRUJJX0FEUjE4Ki8KKyNkZWZpbmUgRUJJX0FEUjE5X1BGNiAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjZNRlBfRUJJX0FEUjE5ICAgICAgICAvKiE8IEdQRl9NRlBMIFBGNiBzZXR0aW5nIGZvciBFQklfQURSMTkqLworI2RlZmluZSBFQklfQURSMTlfUEI4ICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9FQklfQURSMTkgICAgICAgIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIEVCSV9BRFIxOSovCisjZGVmaW5lIEVCSV9BRFIyX1BCMyAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX0VCSV9BRFIyICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgRUJJX0FEUjIqLworI2RlZmluZSBFQklfQURSMl9QSDUgICAgICAgICAgICAgU1lTX0dQSF9NRlBMX1BINU1GUF9FQklfQURSMiAgICAgICAgIC8qITwgR1BIX01GUEwgUEg1IHNldHRpbmcgZm9yIEVCSV9BRFIyKi8KKyNkZWZpbmUgRUJJX0FEUjNfUEg0ICAgICAgICAgICAgIFNZU19HUEhfTUZQTF9QSDRNRlBfRUJJX0FEUjMgICAgICAgICAvKiE8IEdQSF9NRlBMIFBINCBzZXR0aW5nIGZvciBFQklfQURSMyovCisjZGVmaW5lIEVCSV9BRFIzX1BCMiAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX0VCSV9BRFIzICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgRUJJX0FEUjMqLworI2RlZmluZSBFQklfQURSNF9QQzEyICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfRUJJX0FEUjQgICAgICAgIC8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBFQklfQURSNCovCisjZGVmaW5lIEVCSV9BRFI1X1BDMTEgICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxMU1GUF9FQklfQURSNSAgICAgICAgLyohPCBHUENfTUZQSCBQQzExIHNldHRpbmcgZm9yIEVCSV9BRFI1Ki8KKyNkZWZpbmUgRUJJX0FEUjZfUEMxMCAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEwTUZQX0VCSV9BRFI2ICAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTAgc2V0dGluZyBmb3IgRUJJX0FEUjYqLworI2RlZmluZSBFQklfQURSN19QQzkgICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDOU1GUF9FQklfQURSNyAgICAgICAgIC8qITwgR1BDX01GUEggUEM5IHNldHRpbmcgZm9yIEVCSV9BRFI3Ki8KKyNkZWZpbmUgRUJJX0FEUjhfUEIxICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfRUJJX0FEUjggICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBFQklfQURSOCovCisjZGVmaW5lIEVCSV9BRFI5X1BCMCAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIwTUZQX0VCSV9BRFI5ICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjAgc2V0dGluZyBmb3IgRUJJX0FEUjkqLworI2RlZmluZSBFQklfQUxFX1BBOCAgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9FQklfQUxFICAgICAgICAgIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIEVCSV9BTEUqLworI2RlZmluZSBFQklfQUxFX1BFMiAgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFMk1GUF9FQklfQUxFICAgICAgICAgIC8qITwgR1BFX01GUEwgUEUyIHNldHRpbmcgZm9yIEVCSV9BTEUqLworI2RlZmluZSBFQklfTUNMS19QRTMgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFM01GUF9FQklfTUNMSyAgICAgICAgIC8qITwgR1BFX01GUEwgUEUzIHNldHRpbmcgZm9yIEVCSV9NQ0xLKi8KKyNkZWZpbmUgRUJJX01DTEtfUEE5ICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTlNRlBfRUJJX01DTEsgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBFQklfTUNMSyovCisjZGVmaW5lIEVCSV9uQ1MwX1BCNyAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI3TUZQX0VCSV9uQ1MwICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjcgc2V0dGluZyBmb3IgRUJJX25DUzAqLworI2RlZmluZSBFQklfbkNTMF9QRjYgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNk1GUF9FQklfbkNTMCAgICAgICAgIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIEVCSV9uQ1MwKi8KKyNkZWZpbmUgRUJJX25DUzBfUEQxMiAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEyTUZQX0VCSV9uQ1MwICAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTIgc2V0dGluZyBmb3IgRUJJX25DUzAqLworI2RlZmluZSBFQklfbkNTMF9QRDE0ICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTRNRlBfRUJJX25DUzAgICAgICAgIC8qITwgR1BEX01GUEggUEQxNCBzZXR0aW5nIGZvciBFQklfbkNTMCovCisjZGVmaW5lIEVCSV9uQ1MwX1BGMyAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEYzTUZQX0VCSV9uQ1MwICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjMgc2V0dGluZyBmb3IgRUJJX25DUzAqLworI2RlZmluZSBFQklfbkNTMV9QRjIgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGMk1GUF9FQklfbkNTMSAgICAgICAgIC8qITwgR1BGX01GUEwgUEYyIHNldHRpbmcgZm9yIEVCSV9uQ1MxKi8KKyNkZWZpbmUgRUJJX25DUzFfUEQxMSAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDExTUZQX0VCSV9uQ1MxICAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTEgc2V0dGluZyBmb3IgRUJJX25DUzEqLworI2RlZmluZSBFQklfbkNTMV9QQjYgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNk1GUF9FQklfbkNTMSAgICAgICAgIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIEVCSV9uQ1MxKi8KKyNkZWZpbmUgRUJJX25DUzJfUEQxMCAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEwTUZQX0VCSV9uQ1MyICAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTAgc2V0dGluZyBmb3IgRUJJX25DUzIqLworI2RlZmluZSBFQklfblJEX1BBMTEgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTFNRlBfRUJJX25SRCAgICAgICAgIC8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBFQklfblJEKi8KKyNkZWZpbmUgRUJJX25SRF9QRTUgICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTVNRlBfRUJJX25SRCAgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNSBzZXR0aW5nIGZvciBFQklfblJEKi8KKyNkZWZpbmUgRUJJX25XUl9QQTEwICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX0VCSV9uV1IgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgRUJJX25XUiovCisjZGVmaW5lIEVCSV9uV1JfUEU0ICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU0TUZQX0VCSV9uV1IgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTQgc2V0dGluZyBmb3IgRUJJX25XUiovCisjZGVmaW5lIEVCSV9uV1JIX1BCNiAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX0VCSV9uV1JIICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgRUJJX25XUkgqLworI2RlZmluZSBFQklfbldSTF9QQjcgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9FQklfbldSTCAgICAgICAgIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIEVCSV9uV1JMKi8KKyNkZWZpbmUgRUNBUDBfSUMwX1BBMTAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX0VDQVAwX0lDMCAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgRUNBUDBfSUMwKi8KKyNkZWZpbmUgRUNBUDBfSUMwX1BFOCAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfRUNBUDBfSUMwICAgICAgICAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBFQ0FQMF9JQzAqLworI2RlZmluZSBFQ0FQMF9JQzFfUEU5ICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9FQ0FQMF9JQzEgICAgICAgIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIEVDQVAwX0lDMSovCisjZGVmaW5lIEVDQVAwX0lDMV9QQTkgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEE5TUZQX0VDQVAwX0lDMSAgICAgICAgLyohPCBHUEFfTUZQSCBQQTkgc2V0dGluZyBmb3IgRUNBUDBfSUMxKi8KKyNkZWZpbmUgRUNBUDBfSUMyX1BBOCAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfRUNBUDBfSUMyICAgICAgICAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBFQ0FQMF9JQzIqLworI2RlZmluZSBFQ0FQMF9JQzJfUEUxMCAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTBNRlBfRUNBUDBfSUMyICAgICAgIC8qITwgR1BFX01GUEggUEUxMCBzZXR0aW5nIGZvciBFQ0FQMF9JQzIqLworI2RlZmluZSBFQ0FQMV9JQzBfUEMxMCAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTBNRlBfRUNBUDFfSUMwICAgICAgIC8qITwgR1BDX01GUEggUEMxMCBzZXR0aW5nIGZvciBFQ0FQMV9JQzAqLworI2RlZmluZSBFQ0FQMV9JQzBfUEUxMyAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTNNRlBfRUNBUDFfSUMwICAgICAgIC8qITwgR1BFX01GUEggUEUxMyBzZXR0aW5nIGZvciBFQ0FQMV9JQzAqLworI2RlZmluZSBFQ0FQMV9JQzFfUEUxMiAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTJNRlBfRUNBUDFfSUMxICAgICAgIC8qITwgR1BFX01GUEggUEUxMiBzZXR0aW5nIGZvciBFQ0FQMV9JQzEqLworI2RlZmluZSBFQ0FQMV9JQzFfUEMxMSAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTFNRlBfRUNBUDFfSUMxICAgICAgIC8qITwgR1BDX01GUEggUEMxMSBzZXR0aW5nIGZvciBFQ0FQMV9JQzEqLworI2RlZmluZSBFQ0FQMV9JQzJfUEUxMSAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfRUNBUDFfSUMyICAgICAgIC8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBFQ0FQMV9JQzIqLworI2RlZmluZSBFQ0FQMV9JQzJfUEMxMiAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfRUNBUDFfSUMyICAgICAgIC8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBFQ0FQMV9JQzIqLworI2RlZmluZSBJMkMwX1NDTF9QQjUgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9JMkMwX1NDTCAgICAgICAgIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIEkyQzBfU0NMKi8KKyNkZWZpbmUgSTJDMF9TQ0xfUEMxICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfSTJDMF9TQ0wgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBJMkMwX1NDTCovCisjZGVmaW5lIEkyQzBfU0NMX1BGMyAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEYzTUZQX0kyQzBfU0NMICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjMgc2V0dGluZyBmb3IgSTJDMF9TQ0wqLworI2RlZmluZSBJMkMwX1NDTF9QRTEzICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTNNRlBfSTJDMF9TQ0wgICAgICAgIC8qITwgR1BFX01GUEggUEUxMyBzZXR0aW5nIGZvciBJMkMwX1NDTCovCisjZGVmaW5lIEkyQzBfU0NMX1BENyAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ3TUZQX0kyQzBfU0NMICAgICAgICAgLyohPCBHUERfTUZQTCBQRDcgc2V0dGluZyBmb3IgSTJDMF9TQ0wqLworI2RlZmluZSBJMkMwX1NDTF9QQTUgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9JMkMwX1NDTCAgICAgICAgIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIEkyQzBfU0NMKi8KKyNkZWZpbmUgSTJDMF9TQ0xfUEMxMiAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEyTUZQX0kyQzBfU0NMICAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTIgc2V0dGluZyBmb3IgSTJDMF9TQ0wqLworI2RlZmluZSBJMkMwX1NEQV9QQjQgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9JMkMwX1NEQSAgICAgICAgIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIEkyQzBfU0RBKi8KKyNkZWZpbmUgSTJDMF9TREFfUEM4ICAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzhNRlBfSTJDMF9TREEgICAgICAgICAvKiE8IEdQQ19NRlBIIFBDOCBzZXR0aW5nIGZvciBJMkMwX1NEQSovCisjZGVmaW5lIEkyQzBfU0RBX1BDMCAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMwTUZQX0kyQzBfU0RBICAgICAgICAgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgSTJDMF9TREEqLworI2RlZmluZSBJMkMwX1NEQV9QRDYgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BENk1GUF9JMkMwX1NEQSAgICAgICAgIC8qITwgR1BEX01GUEwgUEQ2IHNldHRpbmcgZm9yIEkyQzBfU0RBKi8KKyNkZWZpbmUgSTJDMF9TREFfUEMxMSAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzExTUZQX0kyQzBfU0RBICAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTEgc2V0dGluZyBmb3IgSTJDMF9TREEqLworI2RlZmluZSBJMkMwX1NEQV9QQTQgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNE1GUF9JMkMwX1NEQSAgICAgICAgIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIEkyQzBfU0RBKi8KKyNkZWZpbmUgSTJDMF9TREFfUEYyICAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjJNRlBfSTJDMF9TREEgICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMiBzZXR0aW5nIGZvciBJMkMwX1NEQSovCisjZGVmaW5lIEkyQzBfU01CQUxfUEcyICAgICAgICAgICBTWVNfR1BHX01GUExfUEcyTUZQX0kyQzBfU01CQUwgICAgICAgLyohPCBHUEdfTUZQTCBQRzIgc2V0dGluZyBmb3IgSTJDMF9TTUJBTCovCisjZGVmaW5lIEkyQzBfU01CQUxfUEMzICAgICAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX0kyQzBfU01CQUwgICAgICAgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgSTJDMF9TTUJBTCovCisjZGVmaW5lIEkyQzBfU01CU1VTX1BDMiAgICAgICAgICBTWVNfR1BDX01GUExfUEMyTUZQX0kyQzBfU01CU1VTICAgICAgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgSTJDMF9TTUJTVVMqLworI2RlZmluZSBJMkMwX1NNQlNVU19QRzMgICAgICAgICAgU1lTX0dQR19NRlBMX1BHM01GUF9JMkMwX1NNQlNVUyAgICAgIC8qITwgR1BHX01GUEwgUEczIHNldHRpbmcgZm9yIEkyQzBfU01CU1VTKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEEzICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfSTJDMV9TQ0wgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBJMkMxX1NDTCovCisjZGVmaW5lIEkyQzFfU0NMX1BHMiAgICAgICAgICAgICBTWVNfR1BHX01GUExfUEcyTUZQX0kyQzFfU0NMICAgICAgICAgLyohPCBHUEdfTUZQTCBQRzIgc2V0dGluZyBmb3IgSTJDMV9TQ0wqLworI2RlZmluZSBJMkMxX1NDTF9QQjEgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9JMkMxX1NDTCAgICAgICAgIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIEkyQzFfU0NMKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEIxMSAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjExTUZQX0kyQzFfU0NMICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTEgc2V0dGluZyBmb3IgSTJDMV9TQ0wqLworI2RlZmluZSBJMkMxX1NDTF9QRDUgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BENU1GUF9JMkMxX1NDTCAgICAgICAgIC8qITwgR1BEX01GUEwgUEQ1IHNldHRpbmcgZm9yIEkyQzFfU0NMKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEExMiAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEyTUZQX0kyQzFfU0NMICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgSTJDMV9TQ0wqLworI2RlZmluZSBJMkMxX1NDTF9QQzUgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNU1GUF9JMkMxX1NDTCAgICAgICAgIC8qITwgR1BDX01GUEwgUEM1IHNldHRpbmcgZm9yIEkyQzFfU0NMKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEE3ICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTdNRlBfSTJDMV9TQ0wgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNyBzZXR0aW5nIGZvciBJMkMxX1NDTCovCisjZGVmaW5lIEkyQzFfU0NMX1BGMCAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEYwTUZQX0kyQzFfU0NMICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjAgc2V0dGluZyBmb3IgSTJDMV9TQ0wqLworI2RlZmluZSBJMkMxX1NDTF9QRTEgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFMU1GUF9JMkMxX1NDTCAgICAgICAgIC8qITwgR1BFX01GUEwgUEUxIHNldHRpbmcgZm9yIEkyQzFfU0NMKi8KKyNkZWZpbmUgSTJDMV9TREFfUEIwICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfSTJDMV9TREEgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBJMkMxX1NEQSovCisjZGVmaW5lIEkyQzFfU0RBX1BBNiAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX0kyQzFfU0RBICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgSTJDMV9TREEqLworI2RlZmluZSBJMkMxX1NEQV9QQTEzICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfSTJDMV9TREEgICAgICAgIC8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBJMkMxX1NEQSovCisjZGVmaW5lIEkyQzFfU0RBX1BHMyAgICAgICAgICAgICBTWVNfR1BHX01GUExfUEczTUZQX0kyQzFfU0RBICAgICAgICAgLyohPCBHUEdfTUZQTCBQRzMgc2V0dGluZyBmb3IgSTJDMV9TREEqLworI2RlZmluZSBJMkMxX1NEQV9QRTAgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9JMkMxX1NEQSAgICAgICAgIC8qITwgR1BFX01GUEwgUEUwIHNldHRpbmcgZm9yIEkyQzFfU0RBKi8KKyNkZWZpbmUgSTJDMV9TREFfUEM0ICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfSTJDMV9TREEgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBJMkMxX1NEQSovCisjZGVmaW5lIEkyQzFfU0RBX1BBMiAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX0kyQzFfU0RBICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgSTJDMV9TREEqLworI2RlZmluZSBJMkMxX1NEQV9QQjEwICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfSTJDMV9TREEgICAgICAgIC8qITwgR1BCX01GUEggUEIxMCBzZXR0aW5nIGZvciBJMkMxX1NEQSovCisjZGVmaW5lIEkyQzFfU0RBX1BGMSAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEYxTUZQX0kyQzFfU0RBICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjEgc2V0dGluZyBmb3IgSTJDMV9TREEqLworI2RlZmluZSBJMkMxX1NEQV9QRDQgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BENE1GUF9JMkMxX1NEQSAgICAgICAgIC8qITwgR1BEX01GUEwgUEQ0IHNldHRpbmcgZm9yIEkyQzFfU0RBKi8KKyNkZWZpbmUgSTJDMV9TTUJBTF9QQjkgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjlNRlBfSTJDMV9TTUJBTCAgICAgICAvKiE8IEdQQl9NRlBIIFBCOSBzZXR0aW5nIGZvciBJMkMxX1NNQkFMKi8KKyNkZWZpbmUgSTJDMV9TTUJBTF9QQzcgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfSTJDMV9TTUJBTCAgICAgICAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBJMkMxX1NNQkFMKi8KKyNkZWZpbmUgSTJDMV9TTUJBTF9QSDggICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDhNRlBfSTJDMV9TTUJBTCAgICAgICAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBJMkMxX1NNQkFMKi8KKyNkZWZpbmUgSTJDMV9TTUJTVVNfUEg5ICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfSTJDMV9TTUJTVVMgICAgICAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBJMkMxX1NNQlNVUyovCisjZGVmaW5lIEkyQzFfU01CU1VTX1BDNiAgICAgICAgICBTWVNfR1BDX01GUExfUEM2TUZQX0kyQzFfU01CU1VTICAgICAgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgSTJDMV9TTUJTVVMqLworI2RlZmluZSBJMkMxX1NNQlNVU19QQjggICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9JMkMxX1NNQlNVUyAgICAgIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIEkyQzFfU01CU1VTKi8KKyNkZWZpbmUgSTJDMl9TQ0xfUEIxMyAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX0kyQzJfU0NMICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgSTJDMl9TQ0wqLworI2RlZmluZSBJMkMyX1NDTF9QQTExICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTFNRlBfSTJDMl9TQ0wgICAgICAgIC8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBJMkMyX1NDTCovCisjZGVmaW5lIEkyQzJfU0NMX1BIOCAgICAgICAgICAgICBTWVNfR1BIX01GUEhfUEg4TUZQX0kyQzJfU0NMICAgICAgICAgLyohPCBHUEhfTUZQSCBQSDggc2V0dGluZyBmb3IgSTJDMl9TQ0wqLworI2RlZmluZSBJMkMyX1NDTF9QRDkgICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEOU1GUF9JMkMyX1NDTCAgICAgICAgIC8qITwgR1BEX01GUEggUEQ5IHNldHRpbmcgZm9yIEkyQzJfU0NMKi8KKyNkZWZpbmUgSTJDMl9TQ0xfUEQxICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDFNRlBfSTJDMl9TQ0wgICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMSBzZXR0aW5nIGZvciBJMkMyX1NDTCovCisjZGVmaW5lIEkyQzJfU0NMX1BBMTQgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExNE1GUF9JMkMyX1NDTCAgICAgICAgLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIEkyQzJfU0NMKi8KKyNkZWZpbmUgSTJDMl9TQ0xfUEExICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTFNRlBfSTJDMl9TQ0wgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMSBzZXR0aW5nIGZvciBJMkMyX1NDTCovCisjZGVmaW5lIEkyQzJfU0RBX1BBMCAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEwTUZQX0kyQzJfU0RBICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgSTJDMl9TREEqLworI2RlZmluZSBJMkMyX1NEQV9QQjEyICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfSTJDMl9TREEgICAgICAgIC8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBJMkMyX1NEQSovCisjZGVmaW5lIEkyQzJfU0RBX1BBMTAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9JMkMyX1NEQSAgICAgICAgLyohPCBHUEFfTUZQSCBQQTEwIHNldHRpbmcgZm9yIEkyQzJfU0RBKi8KKyNkZWZpbmUgSTJDMl9TREFfUEExNSAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX0kyQzJfU0RBICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTUgc2V0dGluZyBmb3IgSTJDMl9TREEqLworI2RlZmluZSBJMkMyX1NEQV9QSDkgICAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOU1GUF9JMkMyX1NEQSAgICAgICAgIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIEkyQzJfU0RBKi8KKyNkZWZpbmUgSTJDMl9TREFfUEQ4ICAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDhNRlBfSTJDMl9TREEgICAgICAgICAvKiE8IEdQRF9NRlBIIFBEOCBzZXR0aW5nIGZvciBJMkMyX1NEQSovCisjZGVmaW5lIEkyQzJfU0RBX1BEMCAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQwTUZQX0kyQzJfU0RBICAgICAgICAgLyohPCBHUERfTUZQTCBQRDAgc2V0dGluZyBmb3IgSTJDMl9TREEqLworI2RlZmluZSBJMkMyX1NNQkFMX1BCMTUgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfSTJDMl9TTUJBTCAgICAgIC8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBJMkMyX1NNQkFMKi8KKyNkZWZpbmUgSTJDMl9TTUJTVVNfUEIxNCAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX0kyQzJfU01CU1VTICAgICAvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgSTJDMl9TTUJTVVMqLworI2RlZmluZSBJMlMwX0JDTEtfUEExMiAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTJNRlBfSTJTMF9CQ0xLICAgICAgIC8qITwgR1BBX01GUEggUEExMiBzZXR0aW5nIGZvciBJMlMwX0JDTEsqLworI2RlZmluZSBJMlMwX0JDTEtfUEI1ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9JMlMwX0JDTEsgICAgICAgIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIEkyUzBfQkNMSyovCisjZGVmaW5lIEkyUzBfQkNMS19QRTggICAgICAgICAgICBTWVNfR1BFX01GUEhfUEU4TUZQX0kyUzBfQkNMSyAgICAgICAgLyohPCBHUEVfTUZQSCBQRTggc2V0dGluZyBmb3IgSTJTMF9CQ0xLKi8KKyNkZWZpbmUgSTJTMF9CQ0xLX1BFMSAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTFNRlBfSTJTMF9CQ0xLICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMSBzZXR0aW5nIGZvciBJMlMwX0JDTEsqLworI2RlZmluZSBJMlMwX0JDTEtfUEYxMCAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGMTBNRlBfSTJTMF9CQ0xLICAgICAgIC8qITwgR1BGX01GUEggUEYxMCBzZXR0aW5nIGZvciBJMlMwX0JDTEsqLworI2RlZmluZSBJMlMwX0JDTEtfUEM0ICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9JMlMwX0JDTEsgICAgICAgIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIEkyUzBfQkNMSyovCisjZGVmaW5lIEkyUzBfRElfUEY4ICAgICAgICAgICAgICBTWVNfR1BGX01GUEhfUEY4TUZQX0kyUzBfREkgICAgICAgICAgLyohPCBHUEZfTUZQSCBQRjggc2V0dGluZyBmb3IgSTJTMF9ESSovCisjZGVmaW5lIEkyUzBfRElfUEIzICAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX0kyUzBfREkgICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgSTJTMF9ESSovCisjZGVmaW5lIEkyUzBfRElfUEUxMCAgICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxME1GUF9JMlMwX0RJICAgICAgICAgLyohPCBHUEVfTUZQSCBQRTEwIHNldHRpbmcgZm9yIEkyUzBfREkqLworI2RlZmluZSBJMlMwX0RJX1BBMTQgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTRNRlBfSTJTMF9ESSAgICAgICAgIC8qITwgR1BBX01GUEggUEExNCBzZXR0aW5nIGZvciBJMlMwX0RJKi8KKyNkZWZpbmUgSTJTMF9ESV9QSDggICAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDhNRlBfSTJTMF9ESSAgICAgICAgICAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBJMlMwX0RJKi8KKyNkZWZpbmUgSTJTMF9ESV9QQzIgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfSTJTMF9ESSAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMiBzZXR0aW5nIGZvciBJMlMwX0RJKi8KKyNkZWZpbmUgSTJTMF9ET19QQjIgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfSTJTMF9ETyAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBJMlMwX0RPKi8KKyNkZWZpbmUgSTJTMF9ET19QSDkgICAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfSTJTMF9ETyAgICAgICAgICAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBJMlMwX0RPKi8KKyNkZWZpbmUgSTJTMF9ET19QRjcgICAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjdNRlBfSTJTMF9ETyAgICAgICAgICAvKiE8IEdQRl9NRlBMIFBGNyBzZXR0aW5nIGZvciBJMlMwX0RPKi8KKyNkZWZpbmUgSTJTMF9ET19QRTExICAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTExTUZQX0kyUzBfRE8gICAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTEgc2V0dGluZyBmb3IgSTJTMF9ETyovCisjZGVmaW5lIEkyUzBfRE9fUEMxICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMxTUZQX0kyUzBfRE8gICAgICAgICAgLyohPCBHUENfTUZQTCBQQzEgc2V0dGluZyBmb3IgSTJTMF9ETyovCisjZGVmaW5lIEkyUzBfRE9fUEExNSAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExNU1GUF9JMlMwX0RPICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTE1IHNldHRpbmcgZm9yIEkyUzBfRE8qLworI2RlZmluZSBJMlMwX0xSQ0tfUEY2ICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNk1GUF9JMlMwX0xSQ0sgICAgICAgIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIEkyUzBfTFJDSyovCisjZGVmaW5lIEkyUzBfTFJDS19QRTEyICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMk1GUF9JMlMwX0xSQ0sgICAgICAgLyohPCBHUEVfTUZQSCBQRTEyIHNldHRpbmcgZm9yIEkyUzBfTFJDSyovCisjZGVmaW5lIEkyUzBfTFJDS19QQzAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMwTUZQX0kyUzBfTFJDSyAgICAgICAgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgSTJTMF9MUkNLKi8KKyNkZWZpbmUgSTJTMF9MUkNLX1BIMTAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDEwTUZQX0kyUzBfTFJDSyAgICAgICAvKiE8IEdQSF9NRlBIIFBIMTAgc2V0dGluZyBmb3IgSTJTMF9MUkNLKi8KKyNkZWZpbmUgSTJTMF9MUkNLX1BCMSAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfSTJTMF9MUkNLICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBJMlMwX0xSQ0sqLworI2RlZmluZSBJMlMwX01DTEtfUEU5ICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9JMlMwX01DTEsgICAgICAgIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIEkyUzBfTUNMSyovCisjZGVmaW5lIEkyUzBfTUNMS19QQjQgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX0kyUzBfTUNMSyAgICAgICAgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgSTJTMF9NQ0xLKi8KKyNkZWZpbmUgSTJTMF9NQ0xLX1BDMyAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfSTJTMF9NQ0xLICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBJMlMwX01DTEsqLworI2RlZmluZSBJMlMwX01DTEtfUEUwICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9JMlMwX01DTEsgICAgICAgIC8qITwgR1BFX01GUEwgUEUwIHNldHRpbmcgZm9yIEkyUzBfTUNMSyovCisjZGVmaW5lIEkyUzBfTUNMS19QQTEzICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExM01GUF9JMlMwX01DTEsgICAgICAgLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIEkyUzBfTUNMSyovCisjZGVmaW5lIEkyUzBfTUNMS19QRjkgICAgICAgICAgICBTWVNfR1BGX01GUEhfUEY5TUZQX0kyUzBfTUNMSyAgICAgICAgLyohPCBHUEZfTUZQSCBQRjkgc2V0dGluZyBmb3IgSTJTMF9NQ0xLKi8KKyNkZWZpbmUgSUNFX0NMS19QRjEgICAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjFNRlBfSUNFX0NMSyAgICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMSBzZXR0aW5nIGZvciBJQ0VfQ0xLKi8KKyNkZWZpbmUgSUNFX0RBVF9QRjAgICAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjBNRlBfSUNFX0RBVCAgICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMCBzZXR0aW5nIGZvciBJQ0VfREFUKi8KKyNkZWZpbmUgSU5UMF9QQjUgICAgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfSU5UMCAgICAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBJTlQwKi8KKyNkZWZpbmUgSU5UMF9QQTYgICAgICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfSU5UMCAgICAgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBJTlQwKi8KKyNkZWZpbmUgSU5UMV9QQjQgICAgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfSU5UMSAgICAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBJTlQxKi8KKyNkZWZpbmUgSU5UMV9QQTcgICAgICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTdNRlBfSU5UMSAgICAgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNyBzZXR0aW5nIGZvciBJTlQxKi8KKyNkZWZpbmUgSU5UMl9QQjMgICAgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfSU5UMiAgICAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBJTlQyKi8KKyNkZWZpbmUgSU5UMl9QQzYgICAgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfSU5UMiAgICAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBJTlQyKi8KKyNkZWZpbmUgSU5UM19QQzcgICAgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfSU5UMyAgICAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBJTlQzKi8KKyNkZWZpbmUgSU5UM19QQjIgICAgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfSU5UMyAgICAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBJTlQzKi8KKyNkZWZpbmUgSU5UNF9QQjYgICAgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfSU5UNCAgICAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBJTlQ0Ki8KKyNkZWZpbmUgSU5UNF9QQTggICAgICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfSU5UNCAgICAgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBJTlQ0Ki8KKyNkZWZpbmUgSU5UNV9QQjcgICAgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfSU5UNSAgICAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBJTlQ1Ki8KKyNkZWZpbmUgSU5UNV9QRDEyICAgICAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEyTUZQX0lOVDUgICAgICAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTIgc2V0dGluZyBmb3IgSU5UNSovCisjZGVmaW5lIElOVDZfUEQxMSAgICAgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxMU1GUF9JTlQ2ICAgICAgICAgICAgLyohPCBHUERfTUZQSCBQRDExIHNldHRpbmcgZm9yIElOVDYqLworI2RlZmluZSBJTlQ2X1BCOCAgICAgICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9JTlQ2ICAgICAgICAgICAgIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIElOVDYqLworI2RlZmluZSBJTlQ3X1BCOSAgICAgICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOU1GUF9JTlQ3ICAgICAgICAgICAgIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIElOVDcqLworI2RlZmluZSBJTlQ3X1BEMTAgICAgICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTBNRlBfSU5UNyAgICAgICAgICAgIC8qITwgR1BEX01GUEggUEQxMCBzZXR0aW5nIGZvciBJTlQ3Ki8KKyNkZWZpbmUgRVBXTTBfQlJBS0UwX1BFOCAgICAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfRVBXTTBfQlJBS0UwICAgICAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBFUFdNMF9CUkFLRTAqLworI2RlZmluZSBFUFdNMF9CUkFLRTBfUEIxICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9FUFdNMF9CUkFLRTAgICAgIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIEVQV00wX0JSQUtFMCovCisjZGVmaW5lIEVQV00wX0JSQUtFMV9QQjAgICAgICAgICBTWVNfR1BCX01GUExfUEIwTUZQX0VQV00wX0JSQUtFMSAgICAgLyohPCBHUEJfTUZQTCBQQjAgc2V0dGluZyBmb3IgRVBXTTBfQlJBS0UxKi8KKyNkZWZpbmUgRVBXTTBfQlJBS0UxX1BFOSAgICAgICAgIFNZU19HUEVfTUZQSF9QRTlNRlBfRVBXTTBfQlJBS0UxICAgICAvKiE8IEdQRV9NRlBIIFBFOSBzZXR0aW5nIGZvciBFUFdNMF9CUkFLRTEqLworI2RlZmluZSBFUFdNMF9DSDBfUEE1ICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9FUFdNMF9DSDAgICAgICAgIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIEVQV00wX0NIMCovCisjZGVmaW5lIEVQV00wX0NIMF9QRTcgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU3TUZQX0VQV00wX0NIMCAgICAgICAgLyohPCBHUEVfTUZQTCBQRTcgc2V0dGluZyBmb3IgRVBXTTBfQ0gwKi8KKyNkZWZpbmUgRVBXTTBfQ0gwX1BFOCAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfRVBXTTBfQ0gwICAgICAgICAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBFUFdNMF9DSDAqLworI2RlZmluZSBFUFdNMF9DSDBfUEI1ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9FUFdNMF9DSDAgICAgICAgIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIEVQV00wX0NIMCovCisjZGVmaW5lIEVQV00wX0NIMV9QQTQgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE0TUZQX0VQV00wX0NIMSAgICAgICAgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgRVBXTTBfQ0gxKi8KKyNkZWZpbmUgRVBXTTBfQ0gxX1BCNCAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfRVBXTTBfQ0gxICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBFUFdNMF9DSDEqLworI2RlZmluZSBFUFdNMF9DSDFfUEU5ICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9FUFdNMF9DSDEgICAgICAgIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIEVQV00wX0NIMSovCisjZGVmaW5lIEVQV00wX0NIMV9QRTYgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU2TUZQX0VQV00wX0NIMSAgICAgICAgLyohPCBHUEVfTUZQTCBQRTYgc2V0dGluZyBmb3IgRVBXTTBfQ0gxKi8KKyNkZWZpbmUgRVBXTTBfQ0gyX1BFNSAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTVNRlBfRVBXTTBfQ0gyICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNSBzZXR0aW5nIGZvciBFUFdNMF9DSDIqLworI2RlZmluZSBFUFdNMF9DSDJfUEIzICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9FUFdNMF9DSDIgICAgICAgIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIEVQV00wX0NIMiovCisjZGVmaW5lIEVQV00wX0NIMl9QRTEwICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxME1GUF9FUFdNMF9DSDIgICAgICAgLyohPCBHUEVfTUZQSCBQRTEwIHNldHRpbmcgZm9yIEVQV00wX0NIMiovCisjZGVmaW5lIEVQV00wX0NIMl9QQTMgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEzTUZQX0VQV00wX0NIMiAgICAgICAgLyohPCBHUEFfTUZQTCBQQTMgc2V0dGluZyBmb3IgRVBXTTBfQ0gyKi8KKyNkZWZpbmUgRVBXTTBfQ0gzX1BBMiAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTJNRlBfRVBXTTBfQ0gzICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMiBzZXR0aW5nIGZvciBFUFdNMF9DSDMqLworI2RlZmluZSBFUFdNMF9DSDNfUEUxMSAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfRVBXTTBfQ0gzICAgICAgIC8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBFUFdNMF9DSDMqLworI2RlZmluZSBFUFdNMF9DSDNfUEU0ICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9FUFdNMF9DSDMgICAgICAgIC8qITwgR1BFX01GUEwgUEU0IHNldHRpbmcgZm9yIEVQV00wX0NIMyovCisjZGVmaW5lIEVQV00wX0NIM19QQjIgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX0VQV00wX0NIMyAgICAgICAgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgRVBXTTBfQ0gzKi8KKyNkZWZpbmUgRVBXTTBfQ0g0X1BEMTQgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDE0TUZQX0VQV00wX0NINCAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTQgc2V0dGluZyBmb3IgRVBXTTBfQ0g0Ki8KKyNkZWZpbmUgRVBXTTBfQ0g0X1BCMSAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfRVBXTTBfQ0g0ICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBFUFdNMF9DSDQqLworI2RlZmluZSBFUFdNMF9DSDRfUEUzICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFM01GUF9FUFdNMF9DSDQgICAgICAgIC8qITwgR1BFX01GUEwgUEUzIHNldHRpbmcgZm9yIEVQV00wX0NINCovCisjZGVmaW5lIEVQV00wX0NINF9QQTEgICAgICAgICAgICBTWVNfR1BBX01GUExfUEExTUZQX0VQV00wX0NINCAgICAgICAgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgRVBXTTBfQ0g0Ki8KKyNkZWZpbmUgRVBXTTBfQ0g0X1BFMTIgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEyTUZQX0VQV00wX0NINCAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTIgc2V0dGluZyBmb3IgRVBXTTBfQ0g0Ki8KKyNkZWZpbmUgRVBXTTBfQ0g1X1BCMCAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfRVBXTTBfQ0g1ICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBFUFdNMF9DSDUqLworI2RlZmluZSBFUFdNMF9DSDVfUEUyICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFMk1GUF9FUFdNMF9DSDUgICAgICAgIC8qITwgR1BFX01GUEwgUEUyIHNldHRpbmcgZm9yIEVQV00wX0NINSovCisjZGVmaW5lIEVQV00wX0NINV9QQTAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEwTUZQX0VQV00wX0NINSAgICAgICAgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgRVBXTTBfQ0g1Ki8KKyNkZWZpbmUgRVBXTTBfQ0g1X1BFMTMgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEzTUZQX0VQV00wX0NINSAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTMgc2V0dGluZyBmb3IgRVBXTTBfQ0g1Ki8KKyNkZWZpbmUgRVBXTTBfQ0g1X1BIMTEgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDExTUZQX0VQV00wX0NINSAgICAgICAvKiE8IEdQSF9NRlBIIFBIMTEgc2V0dGluZyBmb3IgRVBXTTBfQ0g1Ki8KKyNkZWZpbmUgRVBXTTBfU1lOQ19JTl9QQTE1ICAgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX0VQV00wX1NZTkNfSU4gICAvKiE8IEdQQV9NRlBIIFBBMTUgc2V0dGluZyBmb3IgRVBXTTBfU1lOQ19JTiovCisjZGVmaW5lIEVQV00wX1NZTkNfT1VUX1BGNSAgICAgICBTWVNfR1BGX01GUExfUEY1TUZQX0VQV00wX1NZTkNfT1VUICAgLyohPCBHUEZfTUZQTCBQRjUgc2V0dGluZyBmb3IgRVBXTTBfU1lOQ19PVVQqLworI2RlZmluZSBFUFdNMF9TWU5DX09VVF9QQTExICAgICAgU1lTX0dQQV9NRlBIX1BBMTFNRlBfRVBXTTBfU1lOQ19PVVQgIC8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBFUFdNMF9TWU5DX09VVCovCisjZGVmaW5lIEVQV00xX0JSQUtFMF9QQjcgICAgICAgICBTWVNfR1BCX01GUExfUEI3TUZQX0VQV00xX0JSQUtFMCAgICAgLyohPCBHUEJfTUZQTCBQQjcgc2V0dGluZyBmb3IgRVBXTTFfQlJBS0UwKi8KKyNkZWZpbmUgRVBXTTFfQlJBS0UwX1BFMTAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX0VQV00xX0JSQUtFMCAgICAvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgRVBXTTFfQlJBS0UwKi8KKyNkZWZpbmUgRVBXTTFfQlJBS0UxX1BCNiAgICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfRVBXTTFfQlJBS0UxICAgICAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBFUFdNMV9CUkFLRTEqLworI2RlZmluZSBFUFdNMV9CUkFLRTFfUEUxMSAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfRVBXTTFfQlJBS0UxICAgIC8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBFUFdNMV9CUkFLRTEqLworI2RlZmluZSBFUFdNMV9DSDBfUEM1ICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNU1GUF9FUFdNMV9DSDAgICAgICAgIC8qITwgR1BDX01GUEwgUEM1IHNldHRpbmcgZm9yIEVQV00xX0NIMCovCisjZGVmaW5lIEVQV00xX0NIMF9QRTEzICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxM01GUF9FUFdNMV9DSDAgICAgICAgLyohPCBHUEVfTUZQSCBQRTEzIHNldHRpbmcgZm9yIEVQV00xX0NIMCovCisjZGVmaW5lIEVQV00xX0NIMF9QQzEyICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxMk1GUF9FUFdNMV9DSDAgICAgICAgLyohPCBHUENfTUZQSCBQQzEyIHNldHRpbmcgZm9yIEVQV00xX0NIMCovCisjZGVmaW5lIEVQV00xX0NIMF9QQjE1ICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9FUFdNMV9DSDAgICAgICAgLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIEVQV00xX0NIMCovCisjZGVmaW5lIEVQV00xX0NIMV9QQjE0ICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9FUFdNMV9DSDEgICAgICAgLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIEVQV00xX0NIMSovCisjZGVmaW5lIEVQV00xX0NIMV9QQzExICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxMU1GUF9FUFdNMV9DSDEgICAgICAgLyohPCBHUENfTUZQSCBQQzExIHNldHRpbmcgZm9yIEVQV00xX0NIMSovCisjZGVmaW5lIEVQV00xX0NIMV9QQzQgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX0VQV00xX0NIMSAgICAgICAgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgRVBXTTFfQ0gxKi8KKyNkZWZpbmUgRVBXTTFfQ0gxX1BDOCAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzhNRlBfRVBXTTFfQ0gxICAgICAgICAvKiE8IEdQQ19NRlBIIFBDOCBzZXR0aW5nIGZvciBFUFdNMV9DSDEqLworI2RlZmluZSBFUFdNMV9DSDJfUEM3ICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9FUFdNMV9DSDIgICAgICAgIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIEVQV00xX0NIMiovCisjZGVmaW5lIEVQV00xX0NIMl9QQzEwICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxME1GUF9FUFdNMV9DSDIgICAgICAgLyohPCBHUENfTUZQSCBQQzEwIHNldHRpbmcgZm9yIEVQV00xX0NIMiovCisjZGVmaW5lIEVQV00xX0NIMl9QQzMgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX0VQV00xX0NIMiAgICAgICAgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgRVBXTTFfQ0gyKi8KKyNkZWZpbmUgRVBXTTFfQ0gyX1BCMTMgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX0VQV00xX0NIMiAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgRVBXTTFfQ0gyKi8KKyNkZWZpbmUgRVBXTTFfQ0gzX1BCMTIgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX0VQV00xX0NIMyAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgRVBXTTFfQ0gzKi8KKyNkZWZpbmUgRVBXTTFfQ0gzX1BDNiAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfRVBXTTFfQ0gzICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBFUFdNMV9DSDMqLworI2RlZmluZSBFUFdNMV9DSDNfUEM5ICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDOU1GUF9FUFdNMV9DSDMgICAgICAgIC8qITwgR1BDX01GUEggUEM5IHNldHRpbmcgZm9yIEVQV00xX0NIMyovCisjZGVmaW5lIEVQV00xX0NIM19QQzIgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMyTUZQX0VQV00xX0NIMyAgICAgICAgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgRVBXTTFfQ0gzKi8KKyNkZWZpbmUgRVBXTTFfQ0g0X1BCNyAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfRVBXTTFfQ0g0ICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBFUFdNMV9DSDQqLworI2RlZmluZSBFUFdNMV9DSDRfUEIxICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9FUFdNMV9DSDQgICAgICAgIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIEVQV00xX0NINCovCisjZGVmaW5lIEVQV00xX0NINF9QQzEgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMxTUZQX0VQV00xX0NINCAgICAgICAgLyohPCBHUENfTUZQTCBQQzEgc2V0dGluZyBmb3IgRVBXTTFfQ0g0Ki8KKyNkZWZpbmUgRVBXTTFfQ0g0X1BBNyAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTdNRlBfRVBXTTFfQ0g0ICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNyBzZXR0aW5nIGZvciBFUFdNMV9DSDQqLworI2RlZmluZSBFUFdNMV9DSDVfUEE2ICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9FUFdNMV9DSDUgICAgICAgIC8qITwgR1BBX01GUEwgUEE2IHNldHRpbmcgZm9yIEVQV00xX0NINSovCisjZGVmaW5lIEVQV00xX0NINV9QQzAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMwTUZQX0VQV00xX0NINSAgICAgICAgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgRVBXTTFfQ0g1Ki8KKyNkZWZpbmUgRVBXTTFfQ0g1X1BCNiAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfRVBXTTFfQ0g1ICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBFUFdNMV9DSDUqLworI2RlZmluZSBFUFdNMV9DSDVfUEIwICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCME1GUF9FUFdNMV9DSDUgICAgICAgIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIEVQV00xX0NINSovCisjZGVmaW5lIFFFSTBfQV9QRTMgICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX1FFSTBfQSAgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgUUVJMF9BKi8KKyNkZWZpbmUgUUVJMF9BX1BBNCAgICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfUUVJMF9BICAgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBRRUkwX0EqLworI2RlZmluZSBRRUkwX0FfUEQxMSAgICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTFNRlBfUUVJMF9BICAgICAgICAgIC8qITwgR1BEX01GUEggUEQxMSBzZXR0aW5nIGZvciBRRUkwX0EqLworI2RlZmluZSBRRUkwX0JfUEQxMCAgICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTBNRlBfUUVJMF9CICAgICAgICAgIC8qITwgR1BEX01GUEggUEQxMCBzZXR0aW5nIGZvciBRRUkwX0IqLworI2RlZmluZSBRRUkwX0JfUEEzICAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBM01GUF9RRUkwX0IgICAgICAgICAgIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIFFFSTBfQiovCisjZGVmaW5lIFFFSTBfQl9QRTIgICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUyTUZQX1FFSTBfQiAgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgUUVJMF9CKi8KKyNkZWZpbmUgUUVJMF9JTkRFWF9QRTQgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTRNRlBfUUVJMF9JTkRFWCAgICAgICAvKiE8IEdQRV9NRlBMIFBFNCBzZXR0aW5nIGZvciBRRUkwX0lOREVYKi8KKyNkZWZpbmUgUUVJMF9JTkRFWF9QQTUgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfUUVJMF9JTkRFWCAgICAgICAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBRRUkwX0lOREVYKi8KKyNkZWZpbmUgUUVJMF9JTkRFWF9QRDEyICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEyTUZQX1FFSTBfSU5ERVggICAgICAvKiE8IEdQRF9NRlBIIFBEMTIgc2V0dGluZyBmb3IgUUVJMF9JTkRFWCovCisjZGVmaW5lIFFFSTFfQV9QRTYgICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU2TUZQX1FFSTFfQSAgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTYgc2V0dGluZyBmb3IgUUVJMV9BKi8KKyNkZWZpbmUgUUVJMV9BX1BBMTMgICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEzTUZQX1FFSTFfQSAgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTMgc2V0dGluZyBmb3IgUUVJMV9BKi8KKyNkZWZpbmUgUUVJMV9BX1BBOSAgICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTlNRlBfUUVJMV9BICAgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBRRUkxX0EqLworI2RlZmluZSBRRUkxX0JfUEExNCAgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTRNRlBfUUVJMV9CICAgICAgICAgIC8qITwgR1BBX01GUEggUEExNCBzZXR0aW5nIGZvciBRRUkxX0IqLworI2RlZmluZSBRRUkxX0JfUEE4ICAgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9RRUkxX0IgICAgICAgICAgIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIFFFSTFfQiovCisjZGVmaW5lIFFFSTFfQl9QRTUgICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU1TUZQX1FFSTFfQiAgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTUgc2V0dGluZyBmb3IgUUVJMV9CKi8KKyNkZWZpbmUgUUVJMV9JTkRFWF9QRTcgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTdNRlBfUUVJMV9JTkRFWCAgICAgICAvKiE8IEdQRV9NRlBMIFBFNyBzZXR0aW5nIGZvciBRRUkxX0lOREVYKi8KKyNkZWZpbmUgUUVJMV9JTkRFWF9QQTEwICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX1FFSTFfSU5ERVggICAgICAvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgUUVJMV9JTkRFWCovCisjZGVmaW5lIFFFSTFfSU5ERVhfUEExMiAgICAgICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9RRUkxX0lOREVYICAgICAgLyohPCBHUEFfTUZQSCBQQTEyIHNldHRpbmcgZm9yIFFFSTFfSU5ERVgqLworI2RlZmluZSBTQzBfQ0xLX1BGNiAgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNk1GUF9TQzBfQ0xLICAgICAgICAgIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIFNDMF9DTEsqLworI2RlZmluZSBTQzBfQ0xLX1BFMiAgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFMk1GUF9TQzBfQ0xLICAgICAgICAgIC8qITwgR1BFX01GUEwgUEUyIHNldHRpbmcgZm9yIFNDMF9DTEsqLworI2RlZmluZSBTQzBfQ0xLX1BBMCAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBME1GUF9TQzBfQ0xLICAgICAgICAgIC8qITwgR1BBX01GUEwgUEEwIHNldHRpbmcgZm9yIFNDMF9DTEsqLworI2RlZmluZSBTQzBfQ0xLX1BCNSAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9TQzBfQ0xLICAgICAgICAgIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIFNDMF9DTEsqLworI2RlZmluZSBTQzBfREFUX1BFMyAgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFM01GUF9TQzBfREFUICAgICAgICAgIC8qITwgR1BFX01GUEwgUEUzIHNldHRpbmcgZm9yIFNDMF9EQVQqLworI2RlZmluZSBTQzBfREFUX1BCNCAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9TQzBfREFUICAgICAgICAgIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIFNDMF9EQVQqLworI2RlZmluZSBTQzBfREFUX1BBMSAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9TQzBfREFUICAgICAgICAgIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIFNDMF9EQVQqLworI2RlZmluZSBTQzBfREFUX1BGNyAgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGN01GUF9TQzBfREFUICAgICAgICAgIC8qITwgR1BGX01GUEwgUEY3IHNldHRpbmcgZm9yIFNDMF9EQVQqLworI2RlZmluZSBTQzBfUFdSX1BFNSAgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNU1GUF9TQzBfUFdSICAgICAgICAgIC8qITwgR1BFX01GUEwgUEU1IHNldHRpbmcgZm9yIFNDMF9QV1IqLworI2RlZmluZSBTQzBfUFdSX1BBMyAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBM01GUF9TQzBfUFdSICAgICAgICAgIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIFNDMF9QV1IqLworI2RlZmluZSBTQzBfUFdSX1BCMiAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9TQzBfUFdSICAgICAgICAgIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIFNDMF9QV1IqLworI2RlZmluZSBTQzBfUFdSX1BGOSAgICAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOU1GUF9TQzBfUFdSICAgICAgICAgIC8qITwgR1BGX01GUEggUEY5IHNldHRpbmcgZm9yIFNDMF9QV1IqLworI2RlZmluZSBTQzBfUlNUX1BGOCAgICAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOE1GUF9TQzBfUlNUICAgICAgICAgIC8qITwgR1BGX01GUEggUEY4IHNldHRpbmcgZm9yIFNDMF9SU1QqLworI2RlZmluZSBTQzBfUlNUX1BFNCAgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9TQzBfUlNUICAgICAgICAgIC8qITwgR1BFX01GUEwgUEU0IHNldHRpbmcgZm9yIFNDMF9SU1QqLworI2RlZmluZSBTQzBfUlNUX1BBMiAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMk1GUF9TQzBfUlNUICAgICAgICAgIC8qITwgR1BBX01GUEwgUEEyIHNldHRpbmcgZm9yIFNDMF9SU1QqLworI2RlZmluZSBTQzBfUlNUX1BCMyAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9TQzBfUlNUICAgICAgICAgIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIFNDMF9SU1QqLworI2RlZmluZSBTQzBfbkNEX1BFNiAgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNk1GUF9TQzBfbkNEICAgICAgICAgIC8qITwgR1BFX01GUEwgUEU2IHNldHRpbmcgZm9yIFNDMF9uQ0QqLworI2RlZmluZSBTQzBfbkNEX1BGMTAgICAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGMTBNRlBfU0MwX25DRCAgICAgICAgIC8qITwgR1BGX01GUEggUEYxMCBzZXR0aW5nIGZvciBTQzBfbkNEKi8KKyNkZWZpbmUgU0MwX25DRF9QQTQgICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfU0MwX25DRCAgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBTQzBfbkNEKi8KKyNkZWZpbmUgU0MwX25DRF9QQzEyICAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEyTUZQX1NDMF9uQ0QgICAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTIgc2V0dGluZyBmb3IgU0MwX25DRCovCisjZGVmaW5lIFNDMV9DTEtfUEMwICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMwTUZQX1NDMV9DTEsgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgU0MxX0NMSyovCisjZGVmaW5lIFNDMV9DTEtfUEIxMiAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9TQzFfQ0xLICAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIFNDMV9DTEsqLworI2RlZmluZSBTQzFfQ0xLX1BENCAgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BENE1GUF9TQzFfQ0xLICAgICAgICAgIC8qITwgR1BEX01GUEwgUEQ0IHNldHRpbmcgZm9yIFNDMV9DTEsqLworI2RlZmluZSBTQzFfREFUX1BENSAgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BENU1GUF9TQzFfREFUICAgICAgICAgIC8qITwgR1BEX01GUEwgUEQ1IHNldHRpbmcgZm9yIFNDMV9EQVQqLworI2RlZmluZSBTQzFfREFUX1BCMTMgICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfU0MxX0RBVCAgICAgICAgIC8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBTQzFfREFUKi8KKyNkZWZpbmUgU0MxX0RBVF9QQzEgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfU0MxX0RBVCAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBTQzFfREFUKi8KKyNkZWZpbmUgU0MxX1BXUl9QQjE1ICAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX1NDMV9QV1IgICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgU0MxX1BXUiovCisjZGVmaW5lIFNDMV9QV1JfUEMzICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX1NDMV9QV1IgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgU0MxX1BXUiovCisjZGVmaW5lIFNDMV9QV1JfUEQ3ICAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ3TUZQX1NDMV9QV1IgICAgICAgICAgLyohPCBHUERfTUZQTCBQRDcgc2V0dGluZyBmb3IgU0MxX1BXUiovCisjZGVmaW5lIFNDMV9SU1RfUEQ2ICAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ2TUZQX1NDMV9SU1QgICAgICAgICAgLyohPCBHUERfTUZQTCBQRDYgc2V0dGluZyBmb3IgU0MxX1JTVCovCisjZGVmaW5lIFNDMV9SU1RfUEIxNCAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9TQzFfUlNUICAgICAgICAgLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIFNDMV9SU1QqLworI2RlZmluZSBTQzFfUlNUX1BDMiAgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMk1GUF9TQzFfUlNUICAgICAgICAgIC8qITwgR1BDX01GUEwgUEMyIHNldHRpbmcgZm9yIFNDMV9SU1QqLworI2RlZmluZSBTQzFfbkNEX1BEMyAgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEM01GUF9TQzFfbkNEICAgICAgICAgIC8qITwgR1BEX01GUEwgUEQzIHNldHRpbmcgZm9yIFNDMV9uQ0QqLworI2RlZmluZSBTQzFfbkNEX1BDNCAgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9TQzFfbkNEICAgICAgICAgIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIFNDMV9uQ0QqLworI2RlZmluZSBTQzFfbkNEX1BEMTQgICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTRNRlBfU0MxX25DRCAgICAgICAgIC8qITwgR1BEX01GUEggUEQxNCBzZXR0aW5nIGZvciBTQzFfbkNEKi8KKyNkZWZpbmUgU0MyX0NMS19QRDAgICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDBNRlBfU0MyX0NMSyAgICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMCBzZXR0aW5nIGZvciBTQzJfQ0xLKi8KKyNkZWZpbmUgU0MyX0NMS19QQTE1ICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX1NDMl9DTEsgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTUgc2V0dGluZyBmb3IgU0MyX0NMSyovCisjZGVmaW5lIFNDMl9DTEtfUEUwICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUwTUZQX1NDMl9DTEsgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTAgc2V0dGluZyBmb3IgU0MyX0NMSyovCisjZGVmaW5lIFNDMl9DTEtfUEE4ICAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEE4TUZQX1NDMl9DTEsgICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTggc2V0dGluZyBmb3IgU0MyX0NMSyovCisjZGVmaW5lIFNDMl9DTEtfUEE2ICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX1NDMl9DTEsgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgU0MyX0NMSyovCisjZGVmaW5lIFNDMl9EQVRfUEUxICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUxTUZQX1NDMl9EQVQgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTEgc2V0dGluZyBmb3IgU0MyX0RBVCovCisjZGVmaW5lIFNDMl9EQVRfUEQxICAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQxTUZQX1NDMl9EQVQgICAgICAgICAgLyohPCBHUERfTUZQTCBQRDEgc2V0dGluZyBmb3IgU0MyX0RBVCovCisjZGVmaW5lIFNDMl9EQVRfUEE5ICAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEE5TUZQX1NDMl9EQVQgICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTkgc2V0dGluZyBmb3IgU0MyX0RBVCovCisjZGVmaW5lIFNDMl9EQVRfUEExNCAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExNE1GUF9TQzJfREFUICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIFNDMl9EQVQqLworI2RlZmluZSBTQzJfREFUX1BBNyAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9TQzJfREFUICAgICAgICAgIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIFNDMl9EQVQqLworI2RlZmluZSBTQzJfUFdSX1BEMyAgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEM01GUF9TQzJfUFdSICAgICAgICAgIC8qITwgR1BEX01GUEwgUEQzIHNldHRpbmcgZm9yIFNDMl9QV1IqLworI2RlZmluZSBTQzJfUFdSX1BBMTEgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTFNRlBfU0MyX1BXUiAgICAgICAgIC8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBTQzJfUFdSKi8KKyNkZWZpbmUgU0MyX1BXUl9QQTEyICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEyTUZQX1NDMl9QV1IgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgU0MyX1BXUiovCisjZGVmaW5lIFNDMl9QV1JfUEg4ICAgICAgICAgICAgICBTWVNfR1BIX01GUEhfUEg4TUZQX1NDMl9QV1IgICAgICAgICAgLyohPCBHUEhfTUZQSCBQSDggc2V0dGluZyBmb3IgU0MyX1BXUiovCisjZGVmaW5lIFNDMl9QV1JfUEM3ICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX1NDMl9QV1IgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgU0MyX1BXUiovCisjZGVmaW5lIFNDMl9SU1RfUEQyICAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQyTUZQX1NDMl9SU1QgICAgICAgICAgLyohPCBHUERfTUZQTCBQRDIgc2V0dGluZyBmb3IgU0MyX1JTVCovCisjZGVmaW5lIFNDMl9SU1RfUEM2ICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM2TUZQX1NDMl9SU1QgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgU0MyX1JTVCovCisjZGVmaW5lIFNDMl9SU1RfUEg5ICAgICAgICAgICAgICBTWVNfR1BIX01GUEhfUEg5TUZQX1NDMl9SU1QgICAgICAgICAgLyohPCBHUEhfTUZQSCBQSDkgc2V0dGluZyBmb3IgU0MyX1JTVCovCisjZGVmaW5lIFNDMl9SU1RfUEExMCAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9TQzJfUlNUICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTEwIHNldHRpbmcgZm9yIFNDMl9SU1QqLworI2RlZmluZSBTQzJfUlNUX1BBMTMgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfU0MyX1JTVCAgICAgICAgIC8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBTQzJfUlNUKi8KKyNkZWZpbmUgU0MyX25DRF9QSDEwICAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDEwTUZQX1NDMl9uQ0QgICAgICAgICAvKiE8IEdQSF9NRlBIIFBIMTAgc2V0dGluZyBmb3IgU0MyX25DRCovCisjZGVmaW5lIFNDMl9uQ0RfUEE1ICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE1TUZQX1NDMl9uQ0QgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgU0MyX25DRCovCisjZGVmaW5lIFNDMl9uQ0RfUEMxMyAgICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxM01GUF9TQzJfbkNEICAgICAgICAgLyohPCBHUENfTUZQSCBQQzEzIHNldHRpbmcgZm9yIFNDMl9uQ0QqLworI2RlZmluZSBTQzJfbkNEX1BEMTMgICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTNNRlBfU0MyX25DRCAgICAgICAgIC8qITwgR1BEX01GUEggUEQxMyBzZXR0aW5nIGZvciBTQzJfbkNEKi8KKyNkZWZpbmUgU0QwX0NMS19QRTYgICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTZNRlBfU0QwX0NMSyAgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNiBzZXR0aW5nIGZvciBTRDBfQ0xLKi8KKyNkZWZpbmUgU0QwX0NMS19QQjEgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfU0QwX0NMSyAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBTRDBfQ0xLKi8KKyNkZWZpbmUgU0QwX0NNRF9QQjAgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfU0QwX0NNRCAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBTRDBfQ01EKi8KKyNkZWZpbmUgU0QwX0NNRF9QRTcgICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTdNRlBfU0QwX0NNRCAgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNyBzZXR0aW5nIGZvciBTRDBfQ01EKi8KKyNkZWZpbmUgU0QwX0RBVDBfUEIyICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfU0QwX0RBVDAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBTRDBfREFUMCovCisjZGVmaW5lIFNEMF9EQVQwX1BFMiAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUyTUZQX1NEMF9EQVQwICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgU0QwX0RBVDAqLworI2RlZmluZSBTRDBfREFUMV9QRTMgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFM01GUF9TRDBfREFUMSAgICAgICAgIC8qITwgR1BFX01GUEwgUEUzIHNldHRpbmcgZm9yIFNEMF9EQVQxKi8KKyNkZWZpbmUgU0QwX0RBVDFfUEIzICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfU0QwX0RBVDEgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBTRDBfREFUMSovCisjZGVmaW5lIFNEMF9EQVQyX1BCNCAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX1NEMF9EQVQyICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgU0QwX0RBVDIqLworI2RlZmluZSBTRDBfREFUMl9QRTQgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9TRDBfREFUMiAgICAgICAgIC8qITwgR1BFX01GUEwgUEU0IHNldHRpbmcgZm9yIFNEMF9EQVQyKi8KKyNkZWZpbmUgU0QwX0RBVDNfUEU1ICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTVNRlBfU0QwX0RBVDMgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNSBzZXR0aW5nIGZvciBTRDBfREFUMyovCisjZGVmaW5lIFNEMF9EQVQzX1BCNSAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX1NEMF9EQVQzICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgU0QwX0RBVDMqLworI2RlZmluZSBTRDBfbkNEX1BCMTIgICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfU0QwX25DRCAgICAgICAgIC8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBTRDBfbkNEKi8KKyNkZWZpbmUgU0QwX25DRF9QRDEzICAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEzTUZQX1NEMF9uQ0QgICAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTMgc2V0dGluZyBmb3IgU0QwX25DRCovCisjZGVmaW5lIFFTUEkwX0NMS19QRjIgICAgICAgICAgICBTWVNfR1BGX01GUExfUEYyTUZQX1FTUEkwX0NMSyAgICAgICAgLyohPCBHUEZfTUZQTCBQRjIgc2V0dGluZyBmb3IgUVNQSTBfQ0xLKi8KKyNkZWZpbmUgUVNQSTBfQ0xLX1BIOCAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDhNRlBfUVNQSTBfQ0xLICAgICAgICAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBRU1BJMF9DTEsqLworI2RlZmluZSBRU1BJMF9DTEtfUEEyICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMk1GUF9RU1BJMF9DTEsgICAgICAgIC8qITwgR1BBX01GUEwgUEEyIHNldHRpbmcgZm9yIFFTUEkwX0NMSyovCisjZGVmaW5lIFFTUEkwX0NMS19QQzIgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMyTUZQX1FTUEkwX0NMSyAgICAgICAgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgUVNQSTBfQ0xLKi8KKyNkZWZpbmUgUVNQSTBfTUlTTzBfUEMxICAgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfUVNQSTBfTUlTTzAgICAgICAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBRU1BJMF9NSVNPMCovCisjZGVmaW5lIFFTUEkwX01JU08wX1BFMSAgICAgICAgICBTWVNfR1BFX01GUExfUEUxTUZQX1FTUEkwX01JU08wICAgICAgLyohPCBHUEVfTUZQTCBQRTEgc2V0dGluZyBmb3IgUVNQSTBfTUlTTzAqLworI2RlZmluZSBRU1BJMF9NSVNPMF9QQTEgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9RU1BJMF9NSVNPMCAgICAgIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIFFTUEkwX01JU08wKi8KKyNkZWZpbmUgUVNQSTBfTUlTTzFfUEM1ICAgICAgICAgIFNZU19HUENfTUZQTF9QQzVNRlBfUVNQSTBfTUlTTzEgICAgICAvKiE8IEdQQ19NRlBMIFBDNSBzZXR0aW5nIGZvciBRU1BJMF9NSVNPMSovCisjZGVmaW5lIFFTUEkwX01JU08xX1BIMTAgICAgICAgICBTWVNfR1BIX01GUEhfUEgxME1GUF9RU1BJMF9NSVNPMSAgICAgLyohPCBHUEhfTUZQSCBQSDEwIHNldHRpbmcgZm9yIFFTUEkwX01JU08xKi8KKyNkZWZpbmUgUVNQSTBfTUlTTzFfUEE1ICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfUVNQSTBfTUlTTzEgICAgICAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBRU1BJMF9NSVNPMSovCisjZGVmaW5lIFFTUEkwX01PU0kwX1BDMCAgICAgICAgICBTWVNfR1BDX01GUExfUEMwTUZQX1FTUEkwX01PU0kwICAgICAgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgUVNQSTBfTU9TSTAqLworI2RlZmluZSBRU1BJMF9NT1NJMF9QRTAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9RU1BJMF9NT1NJMCAgICAgIC8qITwgR1BFX01GUEwgUEUwIHNldHRpbmcgZm9yIFFTUEkwX01PU0kwKi8KKyNkZWZpbmUgUVNQSTBfTU9TSTBfUEEwICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTBNRlBfUVNQSTBfTU9TSTAgICAgICAvKiE8IEdQQV9NRlBMIFBBMCBzZXR0aW5nIGZvciBRU1BJMF9NT1NJMCovCisjZGVmaW5lIFFTUEkwX01PU0kxX1BBNCAgICAgICAgICBTWVNfR1BBX01GUExfUEE0TUZQX1FTUEkwX01PU0kxICAgICAgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgUVNQSTBfTU9TSTEqLworI2RlZmluZSBRU1BJMF9NT1NJMV9QSDExICAgICAgICAgU1lTX0dQSF9NRlBIX1BIMTFNRlBfUVNQSTBfTU9TSTEgICAgIC8qITwgR1BIX01GUEggUEgxMSBzZXR0aW5nIGZvciBRU1BJMF9NT1NJMSovCisjZGVmaW5lIFFTUEkwX01PU0kxX1BDNCAgICAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX1FTUEkwX01PU0kxICAgICAgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgUVNQSTBfTU9TSTEqLworI2RlZmluZSBRU1BJMF9TU19QSDkgICAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOU1GUF9RU1BJMF9TUyAgICAgICAgIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIFFTUEkwX1NTKi8KKyNkZWZpbmUgUVNQSTBfU1NfUEEzICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfUVNQSTBfU1MgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBRU1BJMF9TUyovCisjZGVmaW5lIFFTUEkwX1NTX1BDMyAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX1FTUEkwX1NTICAgICAgICAgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgUVNQSTBfU1MqLworI2RlZmluZSBTUEkwX0NMS19QRDIgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEMk1GUF9TUEkwX0NMSyAgICAgICAgIC8qITwgR1BEX01GUEwgUEQyIHNldHRpbmcgZm9yIFNQSTBfQ0xLKi8KKyNkZWZpbmUgU1BJMF9DTEtfUEY4ICAgICAgICAgICAgIFNZU19HUEZfTUZQSF9QRjhNRlBfU1BJMF9DTEsgICAgICAgICAvKiE8IEdQRl9NRlBIIFBGOCBzZXR0aW5nIGZvciBTUEkwX0NMSyovCisjZGVmaW5lIFNQSTBfQ0xLX1BBMiAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX1NQSTBfQ0xLICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgU1BJMF9DTEsqLworI2RlZmluZSBTUEkwX0NMS19QQjE0ICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfU1BJMF9DTEsgICAgICAgIC8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBTUEkwX0NMSyovCisjZGVmaW5lIFNQSTBfSTJTTUNMS19QRDEzICAgICAgICBTWVNfR1BEX01GUEhfUEQxM01GUF9TUEkwX0kyU01DTEsgICAgLyohPCBHUERfTUZQSCBQRDEzIHNldHRpbmcgZm9yIFNQSTBfSTJTTUNMSyovCisjZGVmaW5lIFNQSTBfSTJTTUNMS19QQTQgICAgICAgICBTWVNfR1BBX01GUExfUEE0TUZQX1NQSTBfSTJTTUNMSyAgICAgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgU1BJMF9JMlNNQ0xLKi8KKyNkZWZpbmUgU1BJMF9JMlNNQ0xLX1BCMTEgICAgICAgIFNZU19HUEJfTUZQSF9QQjExTUZQX1NQSTBfSTJTTUNMSyAgICAvKiE8IEdQQl9NRlBIIFBCMTEgc2V0dGluZyBmb3IgU1BJMF9JMlNNQ0xLKi8KKyNkZWZpbmUgU1BJMF9JMlNNQ0xLX1BCMCAgICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfU1BJMF9JMlNNQ0xLICAgICAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBTUEkwX0kyU01DTEsqLworI2RlZmluZSBTUEkwX0kyU01DTEtfUEQxNCAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTRNRlBfU1BJMF9JMlNNQ0xLICAgIC8qITwgR1BEX01GUEggUEQxNCBzZXR0aW5nIGZvciBTUEkwX0kyU01DTEsqLworI2RlZmluZSBTUEkwX0kyU01DTEtfUEYxMCAgICAgICAgU1lTX0dQRl9NRlBIX1BGMTBNRlBfU1BJMF9JMlNNQ0xLICAgIC8qITwgR1BGX01GUEggUEYxMCBzZXR0aW5nIGZvciBTUEkwX0kyU01DTEsqLworI2RlZmluZSBTUEkwX01JU09fUEY3ICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGN01GUF9TUEkwX01JU08gICAgICAgIC8qITwgR1BGX01GUEwgUEY3IHNldHRpbmcgZm9yIFNQSTBfTUlTTyovCisjZGVmaW5lIFNQSTBfTUlTT19QQjEzICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9TUEkwX01JU08gICAgICAgLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIFNQSTBfTUlTTyovCisjZGVmaW5lIFNQSTBfTUlTT19QQTEgICAgICAgICAgICBTWVNfR1BBX01GUExfUEExTUZQX1NQSTBfTUlTTyAgICAgICAgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgU1BJMF9NSVNPKi8KKyNkZWZpbmUgU1BJMF9NSVNPX1BEMSAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDFNRlBfU1BJMF9NSVNPICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMSBzZXR0aW5nIGZvciBTUEkwX01JU08qLworI2RlZmluZSBTUEkwX01PU0lfUEEwICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBME1GUF9TUEkwX01PU0kgICAgICAgIC8qITwgR1BBX01GUEwgUEEwIHNldHRpbmcgZm9yIFNQSTBfTU9TSSovCisjZGVmaW5lIFNQSTBfTU9TSV9QQjEyICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9TUEkwX01PU0kgICAgICAgLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIFNQSTBfTU9TSSovCisjZGVmaW5lIFNQSTBfTU9TSV9QRDAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQwTUZQX1NQSTBfTU9TSSAgICAgICAgLyohPCBHUERfTUZQTCBQRDAgc2V0dGluZyBmb3IgU1BJMF9NT1NJKi8KKyNkZWZpbmUgU1BJMF9NT1NJX1BGNiAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjZNRlBfU1BJMF9NT1NJICAgICAgICAvKiE8IEdQRl9NRlBMIFBGNiBzZXR0aW5nIGZvciBTUEkwX01PU0kqLworI2RlZmluZSBTUEkwX1NTX1BCMTUgICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfU1BJMF9TUyAgICAgICAgIC8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBTUEkwX1NTKi8KKyNkZWZpbmUgU1BJMF9TU19QQTMgICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfU1BJMF9TUyAgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBTUEkwX1NTKi8KKyNkZWZpbmUgU1BJMF9TU19QRDMgICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDNNRlBfU1BJMF9TUyAgICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMyBzZXR0aW5nIGZvciBTUEkwX1NTKi8KKyNkZWZpbmUgU1BJMF9TU19QRjkgICAgICAgICAgICAgIFNZU19HUEZfTUZQSF9QRjlNRlBfU1BJMF9TUyAgICAgICAgICAvKiE8IEdQRl9NRlBIIFBGOSBzZXR0aW5nIGZvciBTUEkwX1NTKi8KKyNkZWZpbmUgU1BJMV9DTEtfUEIzICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfU1BJMV9DTEsgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBTUEkxX0NMSyovCisjZGVmaW5lIFNQSTFfQ0xLX1BINiAgICAgICAgICAgICBTWVNfR1BIX01GUExfUEg2TUZQX1NQSTFfQ0xLICAgICAgICAgLyohPCBHUEhfTUZQTCBQSDYgc2V0dGluZyBmb3IgU1BJMV9DTEsqLworI2RlZmluZSBTUEkxX0NMS19QSDggICAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9TUEkxX0NMSyAgICAgICAgIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIFNQSTFfQ0xLKi8KKyNkZWZpbmUgU1BJMV9DTEtfUEMxICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfU1BJMV9DTEsgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBTUEkxX0NMSyovCisjZGVmaW5lIFNQSTFfQ0xLX1BENSAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ1TUZQX1NQSTFfQ0xLICAgICAgICAgLyohPCBHUERfTUZQTCBQRDUgc2V0dGluZyBmb3IgU1BJMV9DTEsqLworI2RlZmluZSBTUEkxX0NMS19QQTcgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9TUEkxX0NMSyAgICAgICAgIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIFNQSTFfQ0xLKi8KKyNkZWZpbmUgU1BJMV9JMlNNQ0xLX1BCMSAgICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfU1BJMV9JMlNNQ0xLICAgICAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBTUEkxX0kyU01DTEsqLworI2RlZmluZSBTUEkxX0kyU01DTEtfUEgxMCAgICAgICAgU1lTX0dQSF9NRlBIX1BIMTBNRlBfU1BJMV9JMlNNQ0xLICAgIC8qITwgR1BIX01GUEggUEgxMCBzZXR0aW5nIGZvciBTUEkxX0kyU01DTEsqLworI2RlZmluZSBTUEkxX0kyU01DTEtfUEM0ICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9TUEkxX0kyU01DTEsgICAgIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIFNQSTFfSTJTTUNMSyovCisjZGVmaW5lIFNQSTFfSTJTTUNMS19QRDEzICAgICAgICBTWVNfR1BEX01GUEhfUEQxM01GUF9TUEkxX0kyU01DTEsgICAgLyohPCBHUERfTUZQSCBQRDEzIHNldHRpbmcgZm9yIFNQSTFfSTJTTUNMSyovCisjZGVmaW5lIFNQSTFfSTJTTUNMS19QQTUgICAgICAgICBTWVNfR1BBX01GUExfUEE1TUZQX1NQSTFfSTJTTUNMSyAgICAgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgU1BJMV9JMlNNQ0xLKi8KKyNkZWZpbmUgU1BJMV9NSVNPX1BENyAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDdNRlBfU1BJMV9NSVNPICAgICAgICAvKiE8IEdQRF9NRlBMIFBENyBzZXR0aW5nIGZvciBTUEkxX01JU08qLworI2RlZmluZSBTUEkxX01JU09fUEM3ICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9TUEkxX01JU08gICAgICAgIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIFNQSTFfTUlTTyovCisjZGVmaW5lIFNQSTFfTUlTT19QQjUgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX1NQSTFfTUlTTyAgICAgICAgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgU1BJMV9NSVNPKi8KKyNkZWZpbmUgU1BJMV9NSVNPX1BFMSAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTFNRlBfU1BJMV9NSVNPICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMSBzZXR0aW5nIGZvciBTUEkxX01JU08qLworI2RlZmluZSBTUEkxX01JU09fUEg0ICAgICAgICAgICAgU1lTX0dQSF9NRlBMX1BINE1GUF9TUEkxX01JU08gICAgICAgIC8qITwgR1BIX01GUEwgUEg0IHNldHRpbmcgZm9yIFNQSTFfTUlTTyovCisjZGVmaW5lIFNQSTFfTUlTT19QQzMgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX1NQSTFfTUlTTyAgICAgICAgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgU1BJMV9NSVNPKi8KKyNkZWZpbmUgU1BJMV9NT1NJX1BENiAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDZNRlBfU1BJMV9NT1NJICAgICAgICAvKiE8IEdQRF9NRlBMIFBENiBzZXR0aW5nIGZvciBTUEkxX01PU0kqLworI2RlZmluZSBTUEkxX01PU0lfUEUwICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9TUEkxX01PU0kgICAgICAgIC8qITwgR1BFX01GUEwgUEUwIHNldHRpbmcgZm9yIFNQSTFfTU9TSSovCisjZGVmaW5lIFNQSTFfTU9TSV9QQjQgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX1NQSTFfTU9TSSAgICAgICAgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgU1BJMV9NT1NJKi8KKyNkZWZpbmUgU1BJMV9NT1NJX1BDNiAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfU1BJMV9NT1NJICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBTUEkxX01PU0kqLworI2RlZmluZSBTUEkxX01PU0lfUEMyICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMk1GUF9TUEkxX01PU0kgICAgICAgIC8qITwgR1BDX01GUEwgUEMyIHNldHRpbmcgZm9yIFNQSTFfTU9TSSovCisjZGVmaW5lIFNQSTFfTU9TSV9QSDUgICAgICAgICAgICBTWVNfR1BIX01GUExfUEg1TUZQX1NQSTFfTU9TSSAgICAgICAgLyohPCBHUEhfTUZQTCBQSDUgc2V0dGluZyBmb3IgU1BJMV9NT1NJKi8KKyNkZWZpbmUgU1BJMV9TU19QQjIgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfU1BJMV9TUyAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBTUEkxX1NTKi8KKyNkZWZpbmUgU1BJMV9TU19QSDkgICAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfU1BJMV9TUyAgICAgICAgICAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBTUEkxX1NTKi8KKyNkZWZpbmUgU1BJMV9TU19QRDQgICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDRNRlBfU1BJMV9TUyAgICAgICAgICAvKiE8IEdQRF9NRlBMIFBENCBzZXR0aW5nIGZvciBTUEkxX1NTKi8KKyNkZWZpbmUgU1BJMV9TU19QQzAgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfU1BJMV9TUyAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBTUEkxX1NTKi8KKyNkZWZpbmUgU1BJMV9TU19QQTYgICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfU1BJMV9TUyAgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBTUEkxX1NTKi8KKyNkZWZpbmUgU1BJMV9TU19QSDcgICAgICAgICAgICAgIFNZU19HUEhfTUZQTF9QSDdNRlBfU1BJMV9TUyAgICAgICAgICAvKiE8IEdQSF9NRlBMIFBINyBzZXR0aW5nIGZvciBTUEkxX1NTKi8KKyNkZWZpbmUgU1BJMl9DTEtfUEU4ICAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfU1BJMl9DTEsgICAgICAgICAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBTUEkyX0NMSyovCisjZGVmaW5lIFNQSTJfQ0xLX1BHMyAgICAgICAgICAgICBTWVNfR1BHX01GUExfUEczTUZQX1NQSTJfQ0xLICAgICAgICAgLyohPCBHUEdfTUZQTCBQRzMgc2V0dGluZyBmb3IgU1BJMl9DTEsqLworI2RlZmluZSBTUEkyX0NMS19QQTEwICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfU1BJMl9DTEsgICAgICAgIC8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBTUEkyX0NMSyovCisjZGVmaW5lIFNQSTJfQ0xLX1BBMTMgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExM01GUF9TUEkyX0NMSyAgICAgICAgLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIFNQSTJfQ0xLKi8KKyNkZWZpbmUgU1BJMl9JMlNNQ0xLX1BDMTMgICAgICAgIFNZU19HUENfTUZQSF9QQzEzTUZQX1NQSTJfSTJTTUNMSyAgICAvKiE8IEdQQ19NRlBIIFBDMTMgc2V0dGluZyBmb3IgU1BJMl9JMlNNQ0xLKi8KKyNkZWZpbmUgU1BJMl9JMlNNQ0xLX1BFMTIgICAgICAgIFNZU19HUEVfTUZQSF9QRTEyTUZQX1NQSTJfSTJTTUNMSyAgICAvKiE8IEdQRV9NRlBIIFBFMTIgc2V0dGluZyBmb3IgU1BJMl9JMlNNQ0xLKi8KKyNkZWZpbmUgU1BJMl9NSVNPX1BHNCAgICAgICAgICAgIFNZU19HUEdfTUZQTF9QRzRNRlBfU1BJMl9NSVNPICAgICAgICAvKiE8IEdQR19NRlBMIFBHNCBzZXR0aW5nIGZvciBTUEkyX01JU08qLworI2RlZmluZSBTUEkyX01JU09fUEE5ICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9TUEkyX01JU08gICAgICAgIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIFNQSTJfTUlTTyovCisjZGVmaW5lIFNQSTJfTUlTT19QQTE0ICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExNE1GUF9TUEkyX01JU08gICAgICAgLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIFNQSTJfTUlTTyovCisjZGVmaW5lIFNQSTJfTUlTT19QRTkgICAgICAgICAgICBTWVNfR1BFX01GUEhfUEU5TUZQX1NQSTJfTUlTTyAgICAgICAgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgU1BJMl9NSVNPKi8KKyNkZWZpbmUgU1BJMl9NT1NJX1BFMTAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX1NQSTJfTU9TSSAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgU1BJMl9NT1NJKi8KKyNkZWZpbmUgU1BJMl9NT1NJX1BBMTUgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX1NQSTJfTU9TSSAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTUgc2V0dGluZyBmb3IgU1BJMl9NT1NJKi8KKyNkZWZpbmUgU1BJMl9NT1NJX1BBOCAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfU1BJMl9NT1NJICAgICAgICAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBTUEkyX01PU0kqLworI2RlZmluZSBTUEkyX01PU0lfUEYxMSAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGMTFNRlBfU1BJMl9NT1NJICAgICAgIC8qITwgR1BGX01GUEggUEYxMSBzZXR0aW5nIGZvciBTUEkyX01PU0kqLworI2RlZmluZSBTUEkyX1NTX1BHMiAgICAgICAgICAgICAgU1lTX0dQR19NRlBMX1BHMk1GUF9TUEkyX1NTICAgICAgICAgIC8qITwgR1BHX01GUEwgUEcyIHNldHRpbmcgZm9yIFNQSTJfU1MqLworI2RlZmluZSBTUEkyX1NTX1BFMTEgICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfU1BJMl9TUyAgICAgICAgIC8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBTUEkyX1NTKi8KKyNkZWZpbmUgU1BJMl9TU19QQTExICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX1NQSTJfU1MgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgU1BJMl9TUyovCisjZGVmaW5lIFNQSTJfU1NfUEExMiAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9TUEkyX1NTICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTEyIHNldHRpbmcgZm9yIFNQSTJfU1MqLworI2RlZmluZSBTUEkzX0NMS19QQjExICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfU1BJM19DTEsgICAgICAgIC8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBTUEkzX0NMSyovCisjZGVmaW5lIFNQSTNfQ0xLX1BFNCAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU0TUZQX1NQSTNfQ0xLICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTQgc2V0dGluZyBmb3IgU1BJM19DTEsqLworI2RlZmluZSBTUEkzX0NMS19QQzEwICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTBNRlBfU1BJM19DTEsgICAgICAgIC8qITwgR1BDX01GUEggUEMxMCBzZXR0aW5nIGZvciBTUEkzX0NMSyovCisjZGVmaW5lIFNQSTNfSTJTTUNMS19QRTYgICAgICAgICBTWVNfR1BFX01GUExfUEU2TUZQX1NQSTNfSTJTTUNMSyAgICAgLyohPCBHUEVfTUZQTCBQRTYgc2V0dGluZyBmb3IgU1BJM19JMlNNQ0xLKi8KKyNkZWZpbmUgU1BJM19JMlNNQ0xLX1BCMSAgICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfU1BJM19JMlNNQ0xLICAgICAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBTUEkzX0kyU01DTEsqLworI2RlZmluZSBTUEkzX0kyU01DTEtfUEQxNCAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTRNRlBfU1BJM19JMlNNQ0xLICAgIC8qITwgR1BEX01GUEggUEQxNCBzZXR0aW5nIGZvciBTUEkzX0kyU01DTEsqLworI2RlZmluZSBTUEkzX01JU09fUEMxMiAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfU1BJM19NSVNPICAgICAgIC8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBTUEkzX01JU08qLworI2RlZmluZSBTUEkzX01JU09fUEI5ICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOU1GUF9TUEkzX01JU08gICAgICAgIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIFNQSTNfTUlTTyovCisjZGVmaW5lIFNQSTNfTUlTT19QRTMgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX1NQSTNfTUlTTyAgICAgICAgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgU1BJM19NSVNPKi8KKyNkZWZpbmUgU1BJM19NT1NJX1BCOCAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjhNRlBfU1BJM19NT1NJICAgICAgICAvKiE8IEdQQl9NRlBIIFBCOCBzZXR0aW5nIGZvciBTUEkzX01PU0kqLworI2RlZmluZSBTUEkzX01PU0lfUEUyICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFMk1GUF9TUEkzX01PU0kgICAgICAgIC8qITwgR1BFX01GUEwgUEUyIHNldHRpbmcgZm9yIFNQSTNfTU9TSSovCisjZGVmaW5lIFNQSTNfTU9TSV9QQzExICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxMU1GUF9TUEkzX01PU0kgICAgICAgLyohPCBHUENfTUZQSCBQQzExIHNldHRpbmcgZm9yIFNQSTNfTU9TSSovCisjZGVmaW5lIFNQSTNfU1NfUEU1ICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU1TUZQX1NQSTNfU1MgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTUgc2V0dGluZyBmb3IgU1BJM19TUyovCisjZGVmaW5lIFNQSTNfU1NfUEIxMCAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9TUEkzX1NTICAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIFNQSTNfU1MqLworI2RlZmluZSBTUEkzX1NTX1BDOSAgICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDOU1GUF9TUEkzX1NTICAgICAgICAgIC8qITwgR1BDX01GUEggUEM5IHNldHRpbmcgZm9yIFNQSTNfU1MqLworI2RlZmluZSBUQU1QRVIwX1BGNiAgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNk1GUF9UQU1QRVIwICAgICAgICAgIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIFRBTVBFUjAqLworI2RlZmluZSBUQU1QRVIxX1BGNyAgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGN01GUF9UQU1QRVIxICAgICAgICAgIC8qITwgR1BGX01GUEwgUEY3IHNldHRpbmcgZm9yIFRBTVBFUjEqLworI2RlZmluZSBUQU1QRVIyX1BGOCAgICAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOE1GUF9UQU1QRVIyICAgICAgICAgIC8qITwgR1BGX01GUEggUEY4IHNldHRpbmcgZm9yIFRBTVBFUjIqLworI2RlZmluZSBUQU1QRVIzX1BGOSAgICAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOU1GUF9UQU1QRVIzICAgICAgICAgIC8qITwgR1BGX01GUEggUEY5IHNldHRpbmcgZm9yIFRBTVBFUjMqLworI2RlZmluZSBUQU1QRVI0X1BGMTAgICAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGMTBNRlBfVEFNUEVSNCAgICAgICAgIC8qITwgR1BGX01GUEggUEYxMCBzZXR0aW5nIGZvciBUQU1QRVI0Ki8KKyNkZWZpbmUgVEFNUEVSNV9QRjExICAgICAgICAgICAgIFNZU19HUEZfTUZQSF9QRjExTUZQX1RBTVBFUjUgICAgICAgICAvKiE8IEdQRl9NRlBIIFBGMTEgc2V0dGluZyBmb3IgVEFNUEVSNSovCisjZGVmaW5lIFRNMF9QQzcgICAgICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX1RNMCAgICAgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgVE0wKi8KKyNkZWZpbmUgVE0wX1BCNSAgICAgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfVE0wICAgICAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBUTTAqLworI2RlZmluZSBUTTBfUEcyICAgICAgICAgICAgICAgICAgU1lTX0dQR19NRlBMX1BHMk1GUF9UTTAgICAgICAgICAgICAgIC8qITwgR1BHX01GUEwgUEcyIHNldHRpbmcgZm9yIFRNMCovCisjZGVmaW5lIFRNMF9FWFRfUEExMSAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9UTTBfRVhUICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIFRNMF9FWFQqLworI2RlZmluZSBUTTBfRVhUX1BCMTUgICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfVE0wX0VYVCAgICAgICAgIC8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBUTTBfRVhUKi8KKyNkZWZpbmUgVE0xX1BHMyAgICAgICAgICAgICAgICAgIFNZU19HUEdfTUZQTF9QRzNNRlBfVE0xICAgICAgICAgICAgICAvKiE8IEdQR19NRlBMIFBHMyBzZXR0aW5nIGZvciBUTTEqLworI2RlZmluZSBUTTFfUEI0ICAgICAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9UTTEgICAgICAgICAgICAgIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIFRNMSovCisjZGVmaW5lIFRNMV9QQzYgICAgICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM2TUZQX1RNMSAgICAgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgVE0xKi8KKyNkZWZpbmUgVE0xX0VYVF9QQTEwICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX1RNMV9FWFQgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgVE0xX0VYVCovCisjZGVmaW5lIFRNMV9FWFRfUEIxNCAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9UTTFfRVhUICAgICAgICAgLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIFRNMV9FWFQqLworI2RlZmluZSBUTTJfUEc0ICAgICAgICAgICAgICAgICAgU1lTX0dQR19NRlBMX1BHNE1GUF9UTTIgICAgICAgICAgICAgIC8qITwgR1BHX01GUEwgUEc0IHNldHRpbmcgZm9yIFRNMiovCisjZGVmaW5lIFRNMl9QRDAgICAgICAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQwTUZQX1RNMiAgICAgICAgICAgICAgLyohPCBHUERfTUZQTCBQRDAgc2V0dGluZyBmb3IgVE0yKi8KKyNkZWZpbmUgVE0yX1BCMyAgICAgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfVE0yICAgICAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBUTTIqLworI2RlZmluZSBUTTJfUEE3ICAgICAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9UTTIgICAgICAgICAgICAgIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIFRNMiovCisjZGVmaW5lIFRNMl9FWFRfUEIxMyAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9UTTJfRVhUICAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIFRNMl9FWFQqLworI2RlZmluZSBUTTJfRVhUX1BBOSAgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9UTTJfRVhUICAgICAgICAgIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIFRNMl9FWFQqLworI2RlZmluZSBUTTNfUEE2ICAgICAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9UTTMgICAgICAgICAgICAgIC8qITwgR1BBX01GUEwgUEE2IHNldHRpbmcgZm9yIFRNMyovCisjZGVmaW5lIFRNM19QRjExICAgICAgICAgICAgICAgICBTWVNfR1BGX01GUEhfUEYxMU1GUF9UTTMgICAgICAgICAgICAgLyohPCBHUEZfTUZQSCBQRjExIHNldHRpbmcgZm9yIFRNMyovCisjZGVmaW5lIFRNM19QQjIgICAgICAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX1RNMyAgICAgICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgVE0zKi8KKyNkZWZpbmUgVE0zX0VYVF9QQTggICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfVE0zX0VYVCAgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBUTTNfRVhUKi8KKyNkZWZpbmUgVE0zX0VYVF9QQjEyICAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX1RNM19FWFQgICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgVE0zX0VYVCovCisjZGVmaW5lIFRSQUNFX0NMS19QRTEyICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMk1GUF9UUkFDRV9DTEsgICAgICAgLyohPCBHUEVfTUZQSCBQRTEyIHNldHRpbmcgZm9yIFRSQUNFX0NMSyovCisjZGVmaW5lIFRSQUNFX0RBVEEwX1BFMTEgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9UUkFDRV9EQVRBMCAgICAgLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIFRSQUNFX0RBVEEwKi8KKyNkZWZpbmUgVFJBQ0VfREFUQTFfUEUxMCAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX1RSQUNFX0RBVEExICAgICAvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgVFJBQ0VfREFUQTEqLworI2RlZmluZSBUUkFDRV9EQVRBMl9QRTkgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9UUkFDRV9EQVRBMiAgICAgIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIFRSQUNFX0RBVEEyKi8KKyNkZWZpbmUgVFJBQ0VfREFUQTNfUEU4ICAgICAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfVFJBQ0VfREFUQTMgICAgICAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBUUkFDRV9EQVRBMyovCisjZGVmaW5lIFVBUlQwX1JYRF9QRDIgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQyTUZQX1VBUlQwX1JYRCAgICAgICAgLyohPCBHUERfTUZQTCBQRDIgc2V0dGluZyBmb3IgVUFSVDBfUlhEKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BCOCAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjhNRlBfVUFSVDBfUlhEICAgICAgICAvKiE8IEdQQl9NRlBIIFBCOCBzZXR0aW5nIGZvciBVQVJUMF9SWEQqLworI2RlZmluZSBVQVJUMF9SWERfUEEwICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBME1GUF9VQVJUMF9SWEQgICAgICAgIC8qITwgR1BBX01GUEwgUEEwIHNldHRpbmcgZm9yIFVBUlQwX1JYRCovCisjZGVmaW5lIFVBUlQwX1JYRF9QQTYgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX1VBUlQwX1JYRCAgICAgICAgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgVUFSVDBfUlhEKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BCMTIgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX1VBUlQwX1JYRCAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgVUFSVDBfUlhEKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BBMTUgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX1VBUlQwX1JYRCAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTUgc2V0dGluZyBmb3IgVUFSVDBfUlhEKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BDMTEgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzExTUZQX1VBUlQwX1JYRCAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTEgc2V0dGluZyBmb3IgVUFSVDBfUlhEKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BIMTEgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDExTUZQX1VBUlQwX1JYRCAgICAgICAvKiE8IEdQSF9NRlBIIFBIMTEgc2V0dGluZyBmb3IgVUFSVDBfUlhEKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BGMiAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjJNRlBfVUFSVDBfUlhEICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMiBzZXR0aW5nIGZvciBVQVJUMF9SWEQqLworI2RlZmluZSBVQVJUMF9UWERfUEE3ICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9VQVJUMF9UWEQgICAgICAgIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIFVBUlQwX1RYRCovCisjZGVmaW5lIFVBUlQwX1RYRF9QRDMgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQzTUZQX1VBUlQwX1RYRCAgICAgICAgLyohPCBHUERfTUZQTCBQRDMgc2V0dGluZyBmb3IgVUFSVDBfVFhEKi8KKyNkZWZpbmUgVUFSVDBfVFhEX1BGMyAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjNNRlBfVUFSVDBfVFhEICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMyBzZXR0aW5nIGZvciBVQVJUMF9UWEQqLworI2RlZmluZSBVQVJUMF9UWERfUEMxMiAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfVUFSVDBfVFhEICAgICAgIC8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBVQVJUMF9UWEQqLworI2RlZmluZSBVQVJUMF9UWERfUEgxMCAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIMTBNRlBfVUFSVDBfVFhEICAgICAgIC8qITwgR1BIX01GUEggUEgxMCBzZXR0aW5nIGZvciBVQVJUMF9UWEQqLworI2RlZmluZSBVQVJUMF9UWERfUEExICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9VQVJUMF9UWEQgICAgICAgIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIFVBUlQwX1RYRCovCisjZGVmaW5lIFVBUlQwX1RYRF9QQjkgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX1VBUlQwX1RYRCAgICAgICAgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgVUFSVDBfVFhEKi8KKyNkZWZpbmUgVUFSVDBfVFhEX1BCMTMgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX1VBUlQwX1RYRCAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgVUFSVDBfVFhEKi8KKyNkZWZpbmUgVUFSVDBfVFhEX1BBMTQgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX1VBUlQwX1RYRCAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTQgc2V0dGluZyBmb3IgVUFSVDBfVFhEKi8KKyNkZWZpbmUgVUFSVDBfbkNUU19QQTUgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfVUFSVDBfbkNUUyAgICAgICAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBVQVJUMF9uQ1RTKi8KKyNkZWZpbmUgVUFSVDBfbkNUU19QQjExICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjExTUZQX1VBUlQwX25DVFMgICAgICAvKiE8IEdQQl9NRlBIIFBCMTEgc2V0dGluZyBmb3IgVUFSVDBfbkNUUyovCisjZGVmaW5lIFVBUlQwX25DVFNfUEIxNSAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9VQVJUMF9uQ1RTICAgICAgLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIFVBUlQwX25DVFMqLworI2RlZmluZSBVQVJUMF9uQ1RTX1BDNyAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9VQVJUMF9uQ1RTICAgICAgIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIFVBUlQwX25DVFMqLworI2RlZmluZSBVQVJUMF9uUlRTX1BCMTQgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfVUFSVDBfblJUUyAgICAgIC8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBVQVJUMF9uUlRTKi8KKyNkZWZpbmUgVUFSVDBfblJUU19QQjEwICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEwTUZQX1VBUlQwX25SVFMgICAgICAvKiE8IEdQQl9NRlBIIFBCMTAgc2V0dGluZyBmb3IgVUFSVDBfblJUUyovCisjZGVmaW5lIFVBUlQwX25SVFNfUEM2ICAgICAgICAgICBTWVNfR1BDX01GUExfUEM2TUZQX1VBUlQwX25SVFMgICAgICAgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgVUFSVDBfblJUUyovCisjZGVmaW5lIFVBUlQwX25SVFNfUEE0ICAgICAgICAgICBTWVNfR1BBX01GUExfUEE0TUZQX1VBUlQwX25SVFMgICAgICAgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgVUFSVDBfblJUUyovCisjZGVmaW5lIFVBUlQxX1JYRF9QRjEgICAgICAgICAgICBTWVNfR1BGX01GUExfUEYxTUZQX1VBUlQxX1JYRCAgICAgICAgLyohPCBHUEZfTUZQTCBQRjEgc2V0dGluZyBmb3IgVUFSVDFfUlhEKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BBOCAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfVUFSVDFfUlhEICAgICAgICAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBVQVJUMV9SWEQqLworI2RlZmluZSBVQVJUMV9SWERfUEEyICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMk1GUF9VQVJUMV9SWEQgICAgICAgIC8qITwgR1BBX01GUEwgUEEyIHNldHRpbmcgZm9yIFVBUlQxX1JYRCovCisjZGVmaW5lIFVBUlQxX1JYRF9QQjIgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX1VBUlQxX1JYRCAgICAgICAgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgVUFSVDFfUlhEKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BCNiAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfVUFSVDFfUlhEICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBVQVJUMV9SWEQqLworI2RlZmluZSBVQVJUMV9SWERfUEQ2ICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BENk1GUF9VQVJUMV9SWEQgICAgICAgIC8qITwgR1BEX01GUEwgUEQ2IHNldHRpbmcgZm9yIFVBUlQxX1JYRCovCisjZGVmaW5lIFVBUlQxX1JYRF9QRDEwICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxME1GUF9VQVJUMV9SWEQgICAgICAgLyohPCBHUERfTUZQSCBQRDEwIHNldHRpbmcgZm9yIFVBUlQxX1JYRCovCisjZGVmaW5lIFVBUlQxX1JYRF9QSDkgICAgICAgICAgICBTWVNfR1BIX01GUEhfUEg5TUZQX1VBUlQxX1JYRCAgICAgICAgLyohPCBHUEhfTUZQSCBQSDkgc2V0dGluZyBmb3IgVUFSVDFfUlhEKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BDOCAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzhNRlBfVUFSVDFfUlhEICAgICAgICAvKiE8IEdQQ19NRlBIIFBDOCBzZXR0aW5nIGZvciBVQVJUMV9SWEQqLworI2RlZmluZSBVQVJUMV9UWERfUEIzICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9VQVJUMV9UWEQgICAgICAgIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIFVBUlQxX1RYRCovCisjZGVmaW5lIFVBUlQxX1RYRF9QQTMgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEzTUZQX1VBUlQxX1RYRCAgICAgICAgLyohPCBHUEFfTUZQTCBQQTMgc2V0dGluZyBmb3IgVUFSVDFfVFhEKi8KKyNkZWZpbmUgVUFSVDFfVFhEX1BFMTMgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEzTUZQX1VBUlQxX1RYRCAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTMgc2V0dGluZyBmb3IgVUFSVDFfVFhEKi8KKyNkZWZpbmUgVUFSVDFfVFhEX1BBOSAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTlNRlBfVUFSVDFfVFhEICAgICAgICAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBVQVJUMV9UWEQqLworI2RlZmluZSBVQVJUMV9UWERfUEYwICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGME1GUF9VQVJUMV9UWEQgICAgICAgIC8qITwgR1BGX01GUEwgUEYwIHNldHRpbmcgZm9yIFVBUlQxX1RYRCovCisjZGVmaW5lIFVBUlQxX1RYRF9QRDExICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxMU1GUF9VQVJUMV9UWEQgICAgICAgLyohPCBHUERfTUZQSCBQRDExIHNldHRpbmcgZm9yIFVBUlQxX1RYRCovCisjZGVmaW5lIFVBUlQxX1RYRF9QRDcgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ3TUZQX1VBUlQxX1RYRCAgICAgICAgLyohPCBHUERfTUZQTCBQRDcgc2V0dGluZyBmb3IgVUFSVDFfVFhEKi8KKyNkZWZpbmUgVUFSVDFfVFhEX1BCNyAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfVUFSVDFfVFhEICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBVQVJUMV9UWEQqLworI2RlZmluZSBVQVJUMV9UWERfUEg4ICAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9VQVJUMV9UWEQgICAgICAgIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIFVBUlQxX1RYRCovCisjZGVmaW5lIFVBUlQxX25DVFNfUEUxMSAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9VQVJUMV9uQ1RTICAgICAgLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIFVBUlQxX25DVFMqLworI2RlZmluZSBVQVJUMV9uQ1RTX1BCOSAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOU1GUF9VQVJUMV9uQ1RTICAgICAgIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIFVBUlQxX25DVFMqLworI2RlZmluZSBVQVJUMV9uQ1RTX1BBMSAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9VQVJUMV9uQ1RTICAgICAgIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIFVBUlQxX25DVFMqLworI2RlZmluZSBVQVJUMV9uUlRTX1BBMCAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBME1GUF9VQVJUMV9uUlRTICAgICAgIC8qITwgR1BBX01GUEwgUEEwIHNldHRpbmcgZm9yIFVBUlQxX25SVFMqLworI2RlZmluZSBVQVJUMV9uUlRTX1BFMTIgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTJNRlBfVUFSVDFfblJUUyAgICAgIC8qITwgR1BFX01GUEggUEUxMiBzZXR0aW5nIGZvciBVQVJUMV9uUlRTKi8KKyNkZWZpbmUgVUFSVDFfblJUU19QQjggICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjhNRlBfVUFSVDFfblJUUyAgICAgICAvKiE8IEdQQl9NRlBIIFBCOCBzZXR0aW5nIGZvciBVQVJUMV9uUlRTKi8KKyNkZWZpbmUgVUFSVDJfUlhEX1BCMCAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfVUFSVDJfUlhEICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBVQVJUMl9SWEQqLworI2RlZmluZSBVQVJUMl9SWERfUEUxNSAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTVNRlBfVUFSVDJfUlhEICAgICAgIC8qITwgR1BFX01GUEggUEUxNSBzZXR0aW5nIGZvciBVQVJUMl9SWEQqLworI2RlZmluZSBVQVJUMl9SWERfUEQxMiAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfVUFSVDJfUlhEICAgICAgIC8qITwgR1BEX01GUEggUEQxMiBzZXR0aW5nIGZvciBVQVJUMl9SWEQqLworI2RlZmluZSBVQVJUMl9SWERfUEY1ICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNU1GUF9VQVJUMl9SWEQgICAgICAgIC8qITwgR1BGX01GUEwgUEY1IHNldHRpbmcgZm9yIFVBUlQyX1JYRCovCisjZGVmaW5lIFVBUlQyX1JYRF9QQzAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMwTUZQX1VBUlQyX1JYRCAgICAgICAgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgVUFSVDJfUlhEKi8KKyNkZWZpbmUgVUFSVDJfUlhEX1BDNCAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfVUFSVDJfUlhEICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBVQVJUMl9SWEQqLworI2RlZmluZSBVQVJUMl9SWERfUEU5ICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9VQVJUMl9SWEQgICAgICAgIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIFVBUlQyX1JYRCovCisjZGVmaW5lIFVBUlQyX1RYRF9QRTggICAgICAgICAgICBTWVNfR1BFX01GUEhfUEU4TUZQX1VBUlQyX1RYRCAgICAgICAgLyohPCBHUEVfTUZQSCBQRTggc2V0dGluZyBmb3IgVUFSVDJfVFhEKi8KKyNkZWZpbmUgVUFSVDJfVFhEX1BGNCAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjRNRlBfVUFSVDJfVFhEICAgICAgICAvKiE8IEdQRl9NRlBMIFBGNCBzZXR0aW5nIGZvciBVQVJUMl9UWEQqLworI2RlZmluZSBVQVJUMl9UWERfUEMxMyAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfVUFSVDJfVFhEICAgICAgIC8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBVQVJUMl9UWEQqLworI2RlZmluZSBVQVJUMl9UWERfUEMxICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMU1GUF9VQVJUMl9UWEQgICAgICAgIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIFVBUlQyX1RYRCovCisjZGVmaW5lIFVBUlQyX1RYRF9QRTE0ICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxNE1GUF9VQVJUMl9UWEQgICAgICAgLyohPCBHUEVfTUZQSCBQRTE0IHNldHRpbmcgZm9yIFVBUlQyX1RYRCovCisjZGVmaW5lIFVBUlQyX1RYRF9QQzUgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM1TUZQX1VBUlQyX1RYRCAgICAgICAgLyohPCBHUENfTUZQTCBQQzUgc2V0dGluZyBmb3IgVUFSVDJfVFhEKi8KKyNkZWZpbmUgVUFSVDJfVFhEX1BCMSAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfVUFSVDJfVFhEICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBVQVJUMl9UWEQqLworI2RlZmluZSBVQVJUMl9uQ1RTX1BGNSAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNU1GUF9VQVJUMl9uQ1RTICAgICAgIC8qITwgR1BGX01GUEwgUEY1IHNldHRpbmcgZm9yIFVBUlQyX25DVFMqLworI2RlZmluZSBVQVJUMl9uQ1RTX1BEOSAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEOU1GUF9VQVJUMl9uQ1RTICAgICAgIC8qITwgR1BEX01GUEggUEQ5IHNldHRpbmcgZm9yIFVBUlQyX25DVFMqLworI2RlZmluZSBVQVJUMl9uQ1RTX1BDMiAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMk1GUF9VQVJUMl9uQ1RTICAgICAgIC8qITwgR1BDX01GUEwgUEMyIHNldHRpbmcgZm9yIFVBUlQyX25DVFMqLworI2RlZmluZSBVQVJUMl9uUlRTX1BGNCAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNE1GUF9VQVJUMl9uUlRTICAgICAgIC8qITwgR1BGX01GUEwgUEY0IHNldHRpbmcgZm9yIFVBUlQyX25SVFMqLworI2RlZmluZSBVQVJUMl9uUlRTX1BEOCAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEOE1GUF9VQVJUMl9uUlRTICAgICAgIC8qITwgR1BEX01GUEggUEQ4IHNldHRpbmcgZm9yIFVBUlQyX25SVFMqLworI2RlZmluZSBVQVJUMl9uUlRTX1BDMyAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDM01GUF9VQVJUMl9uUlRTICAgICAgIC8qITwgR1BDX01GUEwgUEMzIHNldHRpbmcgZm9yIFVBUlQyX25SVFMqLworI2RlZmluZSBVQVJUM19SWERfUEQwICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEME1GUF9VQVJUM19SWEQgICAgICAgIC8qITwgR1BEX01GUEwgUEQwIHNldHRpbmcgZm9yIFVBUlQzX1JYRCovCisjZGVmaW5lIFVBUlQzX1JYRF9QRTExICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9VQVJUM19SWEQgICAgICAgLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIFVBUlQzX1JYRCovCisjZGVmaW5lIFVBUlQzX1JYRF9QQzkgICAgICAgICAgICBTWVNfR1BDX01GUEhfUEM5TUZQX1VBUlQzX1JYRCAgICAgICAgLyohPCBHUENfTUZQSCBQQzkgc2V0dGluZyBmb3IgVUFSVDNfUlhEKi8KKyNkZWZpbmUgVUFSVDNfUlhEX1BFMCAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTBNRlBfVUFSVDNfUlhEICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMCBzZXR0aW5nIGZvciBVQVJUM19SWEQqLworI2RlZmluZSBVQVJUM19SWERfUEMyICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMk1GUF9VQVJUM19SWEQgICAgICAgIC8qITwgR1BDX01GUEwgUEMyIHNldHRpbmcgZm9yIFVBUlQzX1JYRCovCisjZGVmaW5lIFVBUlQzX1JYRF9QQjE0ICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9VQVJUM19SWEQgICAgICAgLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIFVBUlQzX1JYRCovCisjZGVmaW5lIFVBUlQzX1RYRF9QRDEgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQxTUZQX1VBUlQzX1RYRCAgICAgICAgLyohPCBHUERfTUZQTCBQRDEgc2V0dGluZyBmb3IgVUFSVDNfVFhEKi8KKyNkZWZpbmUgVUFSVDNfVFhEX1BDMTAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEwTUZQX1VBUlQzX1RYRCAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTAgc2V0dGluZyBmb3IgVUFSVDNfVFhEKi8KKyNkZWZpbmUgVUFSVDNfVFhEX1BCMTUgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX1VBUlQzX1RYRCAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgVUFSVDNfVFhEKi8KKyNkZWZpbmUgVUFSVDNfVFhEX1BDMyAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfVUFSVDNfVFhEICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBVQVJUM19UWEQqLworI2RlZmluZSBVQVJUM19UWERfUEUxICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFMU1GUF9VQVJUM19UWEQgICAgICAgIC8qITwgR1BFX01GUEwgUEUxIHNldHRpbmcgZm9yIFVBUlQzX1RYRCovCisjZGVmaW5lIFVBUlQzX1RYRF9QRTEwICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxME1GUF9VQVJUM19UWEQgICAgICAgLyohPCBHUEVfTUZQSCBQRTEwIHNldHRpbmcgZm9yIFVBUlQzX1RYRCovCisjZGVmaW5lIFVBUlQzX25DVFNfUEIxMiAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9VQVJUM19uQ1RTICAgICAgLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIFVBUlQzX25DVFMqLworI2RlZmluZSBVQVJUM19uQ1RTX1BIOSAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOU1GUF9VQVJUM19uQ1RTICAgICAgIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIFVBUlQzX25DVFMqLworI2RlZmluZSBVQVJUM19uQ1RTX1BEMiAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEMk1GUF9VQVJUM19uQ1RTICAgICAgIC8qITwgR1BEX01GUEwgUEQyIHNldHRpbmcgZm9yIFVBUlQzX25DVFMqLworI2RlZmluZSBVQVJUM19uUlRTX1BCMTMgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfVUFSVDNfblJUUyAgICAgIC8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBVQVJUM19uUlRTKi8KKyNkZWZpbmUgVUFSVDNfblJUU19QSDggICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDhNRlBfVUFSVDNfblJUUyAgICAgICAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBVQVJUM19uUlRTKi8KKyNkZWZpbmUgVUFSVDNfblJUU19QRDMgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDNNRlBfVUFSVDNfblJUUyAgICAgICAvKiE8IEdQRF9NRlBMIFBEMyBzZXR0aW5nIGZvciBVQVJUM19uUlRTKi8KKyNkZWZpbmUgVUFSVDRfUlhEX1BBMTMgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEzTUZQX1VBUlQ0X1JYRCAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTMgc2V0dGluZyBmb3IgVUFSVDRfUlhEKi8KKyNkZWZpbmUgVUFSVDRfUlhEX1BDNiAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfVUFSVDRfUlhEICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBVQVJUNF9SWEQqLworI2RlZmluZSBVQVJUNF9SWERfUEM0ICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9VQVJUNF9SWEQgICAgICAgIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIFVBUlQ0X1JYRCovCisjZGVmaW5lIFVBUlQ0X1JYRF9QQjEwICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9VQVJUNF9SWEQgICAgICAgLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIFVBUlQ0X1JYRCovCisjZGVmaW5lIFVBUlQ0X1JYRF9QSDExICAgICAgICAgICBTWVNfR1BIX01GUEhfUEgxMU1GUF9VQVJUNF9SWEQgICAgICAgLyohPCBHUEhfTUZQSCBQSDExIHNldHRpbmcgZm9yIFVBUlQ0X1JYRCovCisjZGVmaW5lIFVBUlQ0X1JYRF9QQTIgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX1VBUlQ0X1JYRCAgICAgICAgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgVUFSVDRfUlhEKi8KKyNkZWZpbmUgVUFSVDRfUlhEX1BGNiAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjZNRlBfVUFSVDRfUlhEICAgICAgICAvKiE8IEdQRl9NRlBMIFBGNiBzZXR0aW5nIGZvciBVQVJUNF9SWEQqLworI2RlZmluZSBVQVJUNF9UWERfUEgxMCAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIMTBNRlBfVUFSVDRfVFhEICAgICAgIC8qITwgR1BIX01GUEggUEgxMCBzZXR0aW5nIGZvciBVQVJUNF9UWEQqLworI2RlZmluZSBVQVJUNF9UWERfUEEzICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBM01GUF9VQVJUNF9UWEQgICAgICAgIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIFVBUlQ0X1RYRCovCisjZGVmaW5lIFVBUlQ0X1RYRF9QQTEyICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9VQVJUNF9UWEQgICAgICAgLyohPCBHUEFfTUZQSCBQQTEyIHNldHRpbmcgZm9yIFVBUlQ0X1RYRCovCisjZGVmaW5lIFVBUlQ0X1RYRF9QQzcgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX1VBUlQ0X1RYRCAgICAgICAgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgVUFSVDRfVFhEKi8KKyNkZWZpbmUgVUFSVDRfVFhEX1BCMTEgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjExTUZQX1VBUlQ0X1RYRCAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTEgc2V0dGluZyBmb3IgVUFSVDRfVFhEKi8KKyNkZWZpbmUgVUFSVDRfVFhEX1BGNyAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjdNRlBfVUFSVDRfVFhEICAgICAgICAvKiE8IEdQRl9NRlBMIFBGNyBzZXR0aW5nIGZvciBVQVJUNF9UWEQqLworI2RlZmluZSBVQVJUNF9UWERfUEM1ICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNU1GUF9VQVJUNF9UWEQgICAgICAgIC8qITwgR1BDX01GUEwgUEM1IHNldHRpbmcgZm9yIFVBUlQ0X1RYRCovCisjZGVmaW5lIFVBUlQ0X25DVFNfUEUxICAgICAgICAgICBTWVNfR1BFX01GUExfUEUxTUZQX1VBUlQ0X25DVFMgICAgICAgLyohPCBHUEVfTUZQTCBQRTEgc2V0dGluZyBmb3IgVUFSVDRfbkNUUyovCisjZGVmaW5lIFVBUlQ0X25DVFNfUEM4ICAgICAgICAgICBTWVNfR1BDX01GUEhfUEM4TUZQX1VBUlQ0X25DVFMgICAgICAgLyohPCBHUENfTUZQSCBQQzggc2V0dGluZyBmb3IgVUFSVDRfbkNUUyovCisjZGVmaW5lIFVBUlQ0X25SVFNfUEUwICAgICAgICAgICBTWVNfR1BFX01GUExfUEUwTUZQX1VBUlQ0X25SVFMgICAgICAgLyohPCBHUEVfTUZQTCBQRTAgc2V0dGluZyBmb3IgVUFSVDRfblJUUyovCisjZGVmaW5lIFVBUlQ0X25SVFNfUEUxMyAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxM01GUF9VQVJUNF9uUlRTICAgICAgLyohPCBHUEVfTUZQSCBQRTEzIHNldHRpbmcgZm9yIFVBUlQ0X25SVFMqLworI2RlZmluZSBVQVJUNV9SWERfUEI0ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9VQVJUNV9SWEQgICAgICAgIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIFVBUlQ1X1JYRCovCisjZGVmaW5lIFVBUlQ1X1JYRF9QQTQgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE0TUZQX1VBUlQ1X1JYRCAgICAgICAgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgVUFSVDVfUlhEKi8KKyNkZWZpbmUgVUFSVDVfUlhEX1BFNiAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTZNRlBfVUFSVDVfUlhEICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNiBzZXR0aW5nIGZvciBVQVJUNV9SWEQqLworI2RlZmluZSBVQVJUNV9UWERfUEI1ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9VQVJUNV9UWEQgICAgICAgIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIFVBUlQ1X1RYRCovCisjZGVmaW5lIFVBUlQ1X1RYRF9QRTcgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU3TUZQX1VBUlQ1X1RYRCAgICAgICAgLyohPCBHUEVfTUZQTCBQRTcgc2V0dGluZyBmb3IgVUFSVDVfVFhEKi8KKyNkZWZpbmUgVUFSVDVfVFhEX1BBNSAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfVUFSVDVfVFhEICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBVQVJUNV9UWEQqLworI2RlZmluZSBVQVJUNV9uQ1RTX1BCMiAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9VQVJUNV9uQ1RTICAgICAgIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIFVBUlQ1X25DVFMqLworI2RlZmluZSBVQVJUNV9uUlRTX1BCMyAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9VQVJUNV9uUlRTICAgICAgIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIFVBUlQ1X25SVFMqLworI2RlZmluZSBVU0JfRF9QX1BBMTQgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTRNRlBfVVNCX0RfUCAgICAgICAgIC8qITwgR1BBX01GUEggUEExNCBzZXR0aW5nIGZvciBVU0JfRF9QKi8KKyNkZWZpbmUgVVNCX0RfTl9QQTEzICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEzTUZQX1VTQl9EX04gICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTMgc2V0dGluZyBmb3IgVVNCX0RfTiovCisjZGVmaW5lIFVTQl9PVEdfSURfUEExNSAgICAgICAgICBTWVNfR1BBX01GUEhfUEExNU1GUF9VU0JfT1RHX0lEICAgICAgLyohPCBHUEFfTUZQSCBQQTE1IHNldHRpbmcgZm9yIFVTQl9PVEdfSUQqLworI2RlZmluZSBVU0JfVkJVU19QQTEyICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTJNRlBfVVNCX1ZCVVMgICAgICAgIC8qITwgR1BBX01GUEggUEExMiBzZXR0aW5nIGZvciBVU0JfVkJVUyovCisjZGVmaW5lIFVTQl9WQlVTX0VOX1BCNiAgICAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX1VTQl9WQlVTX0VOICAgICAgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgVVNCX1ZCVVNfRU4qLworI2RlZmluZSBVU0JfVkJVU19FTl9QQjE1ICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfVVNCX1ZCVVNfRU4gICAgIC8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBVU0JfVkJVU19FTiovCisjZGVmaW5lIFVTQl9WQlVTX1NUX1BCMTQgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9VU0JfVkJVU19TVCAgICAgLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIFVTQl9WQlVTX1NUKi8KKyNkZWZpbmUgVVNCX1ZCVVNfU1RfUEI3ICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfVVNCX1ZCVVNfU1QgICAgICAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBVU0JfVkJVU19TVCovCisjZGVmaW5lIFVTQl9WQlVTX1NUX1BENCAgICAgICAgICBTWVNfR1BEX01GUExfUEQ0TUZQX1VTQl9WQlVTX1NUICAgICAgLyohPCBHUERfTUZQTCBQRDQgc2V0dGluZyBmb3IgVVNCX1ZCVVNfU1QqLworI2RlZmluZSBVU0NJMF9DTEtfUEQwICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEME1GUF9VU0NJMF9DTEsgICAgICAgIC8qITwgR1BEX01GUEwgUEQwIHNldHRpbmcgZm9yIFVTQ0kwX0NMSyovCisjZGVmaW5lIFVTQ0kwX0NMS19QQTExICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9VU0NJMF9DTEsgICAgICAgLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIFVTQ0kwX0NMSyovCisjZGVmaW5lIFVTQ0kwX0NMS19QRTIgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUyTUZQX1VTQ0kwX0NMSyAgICAgICAgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgVVNDSTBfQ0xLKi8KKyNkZWZpbmUgVVNDSTBfQ0xLX1BCMTIgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX1VTQ0kwX0NMSyAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgVVNDSTBfQ0xLKi8KKyNkZWZpbmUgVVNDSTBfQ1RMMF9QRDQgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDRNRlBfVVNDSTBfQ1RMMCAgICAgICAvKiE8IEdQRF9NRlBMIFBENCBzZXR0aW5nIGZvciBVU0NJMF9DVEwwKi8KKyNkZWZpbmUgVVNDSTBfQ1RMMF9QRTYgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTZNRlBfVVNDSTBfQ1RMMCAgICAgICAvKiE8IEdQRV9NRlBMIFBFNiBzZXR0aW5nIGZvciBVU0NJMF9DVEwwKi8KKyNkZWZpbmUgVVNDSTBfQ1RMMF9QQzEzICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEzTUZQX1VTQ0kwX0NUTDAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTMgc2V0dGluZyBmb3IgVVNDSTBfQ1RMMCovCisjZGVmaW5lIFVTQ0kwX0NUTDBfUEQxNCAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxNE1GUF9VU0NJMF9DVEwwICAgICAgLyohPCBHUERfTUZQSCBQRDE0IHNldHRpbmcgZm9yIFVTQ0kwX0NUTDAqLworI2RlZmluZSBVU0NJMF9DVEwxX1BEMyAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEM01GUF9VU0NJMF9DVEwxICAgICAgIC8qITwgR1BEX01GUEwgUEQzIHNldHRpbmcgZm9yIFVTQ0kwX0NUTDEqLworI2RlZmluZSBVU0NJMF9DVEwxX1BFNSAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNU1GUF9VU0NJMF9DVEwxICAgICAgIC8qITwgR1BFX01GUEwgUEU1IHNldHRpbmcgZm9yIFVTQ0kwX0NUTDEqLworI2RlZmluZSBVU0NJMF9DVEwxX1BCMTUgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfVVNDSTBfQ1RMMSAgICAgIC8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBVU0NJMF9DVEwxKi8KKyNkZWZpbmUgVVNDSTBfQ1RMMV9QQTggICAgICAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfVVNDSTBfQ1RMMSAgICAgICAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBVU0NJMF9DVEwxKi8KKyNkZWZpbmUgVVNDSTBfREFUMF9QRTMgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTNNRlBfVVNDSTBfREFUMCAgICAgICAvKiE8IEdQRV9NRlBMIFBFMyBzZXR0aW5nIGZvciBVU0NJMF9EQVQwKi8KKyNkZWZpbmUgVVNDSTBfREFUMF9QQjEzICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX1VTQ0kwX0RBVDAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgVVNDSTBfREFUMCovCisjZGVmaW5lIFVTQ0kwX0RBVDBfUEQxICAgICAgICAgICBTWVNfR1BEX01GUExfUEQxTUZQX1VTQ0kwX0RBVDAgICAgICAgLyohPCBHUERfTUZQTCBQRDEgc2V0dGluZyBmb3IgVVNDSTBfREFUMCovCisjZGVmaW5lIFVTQ0kwX0RBVDBfUEExMCAgICAgICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9VU0NJMF9EQVQwICAgICAgLyohPCBHUEFfTUZQSCBQQTEwIHNldHRpbmcgZm9yIFVTQ0kwX0RBVDAqLworI2RlZmluZSBVU0NJMF9EQVQxX1BFNCAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9VU0NJMF9EQVQxICAgICAgIC8qITwgR1BFX01GUEwgUEU0IHNldHRpbmcgZm9yIFVTQ0kwX0RBVDEqLworI2RlZmluZSBVU0NJMF9EQVQxX1BEMiAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEMk1GUF9VU0NJMF9EQVQxICAgICAgIC8qITwgR1BEX01GUEwgUEQyIHNldHRpbmcgZm9yIFVTQ0kwX0RBVDEqLworI2RlZmluZSBVU0NJMF9EQVQxX1BCMTQgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfVVNDSTBfREFUMSAgICAgIC8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBVU0NJMF9EQVQxKi8KKyNkZWZpbmUgVVNDSTBfREFUMV9QQTkgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTlNRlBfVVNDSTBfREFUMSAgICAgICAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBVU0NJMF9EQVQxKi8KKyNkZWZpbmUgVVNDSTFfQ0xLX1BFMTIgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEyTUZQX1VTQ0kxX0NMSyAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTIgc2V0dGluZyBmb3IgVVNDSTFfQ0xLKi8KKyNkZWZpbmUgVVNDSTFfQ0xLX1BENyAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDdNRlBfVVNDSTFfQ0xLICAgICAgICAvKiE8IEdQRF9NRlBMIFBENyBzZXR0aW5nIGZvciBVU0NJMV9DTEsqLworI2RlZmluZSBVU0NJMV9DTEtfUEI4ICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9VU0NJMV9DTEsgICAgICAgIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIFVTQ0kxX0NMSyovCisjZGVmaW5lIFVTQ0kxX0NMS19QQjEgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIxTUZQX1VTQ0kxX0NMSyAgICAgICAgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgVVNDSTFfQ0xLKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMF9QQjEwICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEwTUZQX1VTQ0kxX0NUTDAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTAgc2V0dGluZyBmb3IgVVNDSTFfQ1RMMCovCisjZGVmaW5lIFVTQ0kxX0NUTDBfUEI1ICAgICAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX1VTQ0kxX0NUTDAgICAgICAgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgVVNDSTFfQ1RMMCovCisjZGVmaW5lIFVTQ0kxX0NUTDBfUEU5ICAgICAgICAgICBTWVNfR1BFX01GUEhfUEU5TUZQX1VTQ0kxX0NUTDAgICAgICAgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgVVNDSTFfQ1RMMCovCisjZGVmaW5lIFVTQ0kxX0NUTDBfUEQzICAgICAgICAgICBTWVNfR1BEX01GUExfUEQzTUZQX1VTQ0kxX0NUTDAgICAgICAgLyohPCBHUERfTUZQTCBQRDMgc2V0dGluZyBmb3IgVVNDSTFfQ1RMMCovCisjZGVmaW5lIFVTQ0kxX0NUTDFfUEQ0ICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ0TUZQX1VTQ0kxX0NUTDEgICAgICAgLyohPCBHUERfTUZQTCBQRDQgc2V0dGluZyBmb3IgVVNDSTFfQ1RMMSovCisjZGVmaW5lIFVTQ0kxX0NUTDFfUEU4ICAgICAgICAgICBTWVNfR1BFX01GUEhfUEU4TUZQX1VTQ0kxX0NUTDEgICAgICAgLyohPCBHUEVfTUZQSCBQRTggc2V0dGluZyBmb3IgVVNDSTFfQ1RMMSovCisjZGVmaW5lIFVTQ0kxX0NUTDFfUEI5ICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX1VTQ0kxX0NUTDEgICAgICAgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgVVNDSTFfQ1RMMSovCisjZGVmaW5lIFVTQ0kxX0NUTDFfUEI0ICAgICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX1VTQ0kxX0NUTDEgICAgICAgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgVVNDSTFfQ1RMMSovCisjZGVmaW5lIFVTQ0kxX0RBVDBfUEIyICAgICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX1VTQ0kxX0RBVDAgICAgICAgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgVVNDSTFfREFUMCovCisjZGVmaW5lIFVTQ0kxX0RBVDBfUEI3ICAgICAgICAgICBTWVNfR1BCX01GUExfUEI3TUZQX1VTQ0kxX0RBVDAgICAgICAgLyohPCBHUEJfTUZQTCBQQjcgc2V0dGluZyBmb3IgVVNDSTFfREFUMCovCisjZGVmaW5lIFVTQ0kxX0RBVDBfUEUxMCAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxME1GUF9VU0NJMV9EQVQwICAgICAgLyohPCBHUEVfTUZQSCBQRTEwIHNldHRpbmcgZm9yIFVTQ0kxX0RBVDAqLworI2RlZmluZSBVU0NJMV9EQVQwX1BENSAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BENU1GUF9VU0NJMV9EQVQwICAgICAgIC8qITwgR1BEX01GUEwgUEQ1IHNldHRpbmcgZm9yIFVTQ0kxX0RBVDAqLworI2RlZmluZSBVU0NJMV9EQVQxX1BENiAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BENk1GUF9VU0NJMV9EQVQxICAgICAgIC8qITwgR1BEX01GUEwgUEQ2IHNldHRpbmcgZm9yIFVTQ0kxX0RBVDEqLworI2RlZmluZSBVU0NJMV9EQVQxX1BCMyAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9VU0NJMV9EQVQxICAgICAgIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIFVTQ0kxX0RBVDEqLworI2RlZmluZSBVU0NJMV9EQVQxX1BFMTEgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfVVNDSTFfREFUMSAgICAgIC8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBVU0NJMV9EQVQxKi8KKyNkZWZpbmUgVVNDSTFfREFUMV9QQjYgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfVVNDSTFfREFUMSAgICAgICAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBVU0NJMV9EQVQxKi8KKyNkZWZpbmUgWDMyX0lOX1BGNSAgICAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjVNRlBfWDMyX0lOICAgICAgICAgICAvKiE8IEdQRl9NRlBMIFBGNSBzZXR0aW5nIGZvciBYMzJfSU4qLworI2RlZmluZSBYMzJfT1VUX1BGNCAgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNE1GUF9YMzJfT1VUICAgICAgICAgIC8qITwgR1BGX01GUEwgUEY0IHNldHRpbmcgZm9yIFgzMl9PVVQqLworI2RlZmluZSBYVDFfSU5fUEYzICAgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGM01GUF9YVDFfSU4gICAgICAgICAgIC8qITwgR1BGX01GUEwgUEYzIHNldHRpbmcgZm9yIFhUMV9JTiovCisjZGVmaW5lIFhUMV9PVVRfUEYyICAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEYyTUZQX1hUMV9PVVQgICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjIgc2V0dGluZyBmb3IgWFQxX09VVCovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBNdWx0aS1GdW5jdGlvbiBzZXR0aW5nIG1hc2sgY29uc3RhbnQgZGVmaW5pdGlvbnMgYWJicmV2aWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjZGVmaW5lIEFDTVAwX05fUEIzX01zayAgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfTXNrICAgICAgICAvKjwhIEFDTVAwX04gICAgICAgICBQQjMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBBQ01QMF9PX1BCN19Nc2sgICAgICAgICBTWVNfR1BCX01GUExfUEI3TUZQX01zayAgICAgICAgLyo8ISBBQ01QMF9PICAgICAgICAgUEI3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQUNNUDBfT19QQzFfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMU1GUF9Nc2sgICAgICAgIC8qPCEgQUNNUDBfTyAgICAgICAgIFBDMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEFDTVAwX09fUEMxMl9Nc2sgICAgICAgIFNZU19HUENfTUZQSF9QQzEyTUZQX01zayAgICAgICAvKjwhIEFDTVAwX08gICAgICAgICBQQzEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBBQ01QMF9QMF9QQTExX01zayAgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9Nc2sgICAgICAgLyo8ISBBQ01QMF9QMCAgICAgICAgUEExMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQUNNUDBfUDFfUEIyX01zayAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9Nc2sgICAgICAgIC8qPCEgQUNNUDBfUDEgICAgICAgIFBCMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEFDTVAwX1AyX1BCMTJfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX01zayAgICAgICAvKjwhIEFDTVAwX1AyICAgICAgICBQQjEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBBQ01QMF9QM19QQjEzX01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgLyo8ISBBQ01QMF9QMyAgICAgICAgUEIxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQUNNUDBfV0xBVF9QQTdfTXNrICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9Nc2sgICAgICAgIC8qPCEgQUNNUDBfV0xBVCAgICAgIFBBNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEFDTVAxX05fUEI1X01zayAgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfTXNrICAgICAgICAvKjwhIEFDTVAxX04gICAgICAgICBQQjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBBQ01QMV9PX1BCNl9Nc2sgICAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX01zayAgICAgICAgLyo8ISBBQ01QMV9PICAgICAgICAgUEI2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQUNNUDFfT19QQzExX01zayAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTFNRlBfTXNrICAgICAgIC8qPCEgQUNNUDFfTyAgICAgICAgIFBDMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEFDTVAxX09fUEMwX01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfTXNrICAgICAgICAvKjwhIEFDTVAxX08gICAgICAgICBQQzAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBBQ01QMV9QMF9QQTEwX01zayAgICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9Nc2sgICAgICAgLyo8ISBBQ01QMV9QMCAgICAgICAgUEExMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQUNNUDFfUDFfUEI0X01zayAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9Nc2sgICAgICAgIC8qPCEgQUNNUDFfUDEgICAgICAgIFBCNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEFDTVAxX1AyX1BCMTJfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX01zayAgICAgICAvKjwhIEFDTVAxX1AyICAgICAgICBQQjEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBBQ01QMV9QM19QQjEzX01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgLyo8ISBBQ01QMV9QMyAgICAgICAgUEIxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQUNNUDFfV0xBVF9QQTZfTXNrICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9Nc2sgICAgICAgIC8qPCEgQUNNUDFfV0xBVCAgICAgIFBBNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NIMF9QQTBfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTBNRlBfTXNrICAgICAgICAvKjwhIEJQV00wX0NIMCAgICAgICBQQTAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDBfUEExMV9Nc2sgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9Nc2sgICAgICAgLyo8ISBCUFdNMF9DSDAgICAgICAgUEExMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0gwX1BFMl9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFMk1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTBfQ0gwICAgICAgIFBFMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NIMF9QRzE0X01zayAgICAgIFNZU19HUEdfTUZQSF9QRzE0TUZQX01zayAgICAgICAvKjwhIEJQV00wX0NIMCAgICAgICBQRzE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDFfUEExX01zayAgICAgICBTWVNfR1BBX01GUExfUEExTUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDEgICAgICAgUEExICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0gxX1BFM19Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFM01GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTBfQ0gxICAgICAgIFBFMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NIMV9QRzEzX01zayAgICAgIFNZU19HUEdfTUZQSF9QRzEzTUZQX01zayAgICAgICAvKjwhIEJQV00wX0NIMSAgICAgICBQRzEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDFfUEExMF9Nc2sgICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9Nc2sgICAgICAgLyo8ISBCUFdNMF9DSDEgICAgICAgUEExMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0gyX1BFNF9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTBfQ0gyICAgICAgIFBFNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NIMl9QRzEyX01zayAgICAgIFNZU19HUEdfTUZQSF9QRzEyTUZQX01zayAgICAgICAvKjwhIEJQV00wX0NIMiAgICAgICBQRzEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDJfUEEyX01zayAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDIgICAgICAgUEEyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0gyX1BBOV9Nc2sgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTBfQ0gyICAgICAgIFBBOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NIM19QRzExX01zayAgICAgIFNZU19HUEdfTUZQSF9QRzExTUZQX01zayAgICAgICAvKjwhIEJQV00wX0NIMyAgICAgICBQRzExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDNfUEEzX01zayAgICAgICBTWVNfR1BBX01GUExfUEEzTUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDMgICAgICAgUEEzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0gzX1BBOF9Nc2sgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTBfQ0gzICAgICAgIFBBOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NIM19QRTVfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTVNRlBfTXNrICAgICAgICAvKjwhIEJQV00wX0NIMyAgICAgICBQRTUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDRfUEcxMF9Nc2sgICAgICBTWVNfR1BHX01GUEhfUEcxME1GUF9Nc2sgICAgICAgLyo8ISBCUFdNMF9DSDQgICAgICAgUEcxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0g0X1BBNF9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBNE1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTBfQ0g0ICAgICAgIFBBNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NINF9QQzEzX01zayAgICAgIFNZU19HUENfTUZQSF9QQzEzTUZQX01zayAgICAgICAvKjwhIEJQV00wX0NINCAgICAgICBQQzEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDRfUEU2X01zayAgICAgICBTWVNfR1BFX01GUExfUEU2TUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDQgICAgICAgUEU2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0g0X1BGNV9Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGNU1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTBfQ0g0ICAgICAgIFBGNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NINV9QQTVfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfTXNrICAgICAgICAvKjwhIEJQV00wX0NINSAgICAgICBQQTUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDVfUEU3X01zayAgICAgICBTWVNfR1BFX01GUExfUEU3TUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDUgICAgICAgUEU3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0g1X1BGNF9Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGNE1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTBfQ0g1ICAgICAgIFBGNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NINV9QRDEyX01zayAgICAgIFNZU19HUERfTUZQSF9QRDEyTUZQX01zayAgICAgICAvKjwhIEJQV00wX0NINSAgICAgICBQRDEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDVfUEc5X01zayAgICAgICBTWVNfR1BHX01GUEhfUEc5TUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDUgICAgICAgUEc5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0gwX1BCMTFfTXNrICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfTXNrICAgICAgIC8qPCEgQlBXTTFfQ0gwICAgICAgIFBCMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NIMF9QQzdfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfTXNrICAgICAgICAvKjwhIEJQV00xX0NIMCAgICAgICBQQzcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDBfUEYwX01zayAgICAgICBTWVNfR1BGX01GUExfUEYwTUZQX01zayAgICAgICAgLyo8ISBCUFdNMV9DSDAgICAgICAgUEYwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0gwX1BGM19Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGM01GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTFfQ0gwICAgICAgIFBGMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NIMV9QQzZfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfTXNrICAgICAgICAvKjwhIEJQV00xX0NIMSAgICAgICBQQzYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDFfUEYxX01zayAgICAgICBTWVNfR1BGX01GUExfUEYxTUZQX01zayAgICAgICAgLyo8ISBCUFdNMV9DSDEgICAgICAgUEYxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0gxX1BGMl9Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGMk1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTFfQ0gxICAgICAgIFBGMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NIMV9QQjEwX01zayAgICAgIFNZU19HUEJfTUZQSF9QQjEwTUZQX01zayAgICAgICAvKjwhIEJQV00xX0NIMSAgICAgICBQQjEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDJfUEI5X01zayAgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX01zayAgICAgICAgLyo8ISBCUFdNMV9DSDIgICAgICAgUEI5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0gyX1BBN19Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTFfQ0gyICAgICAgIFBBNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NIMl9QQTEyX01zayAgICAgIFNZU19HUEFfTUZQSF9QQTEyTUZQX01zayAgICAgICAvKjwhIEJQV00xX0NIMiAgICAgICBQQTEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDNfUEE2X01zayAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX01zayAgICAgICAgLyo8ISBCUFdNMV9DSDMgICAgICAgUEE2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0gzX1BBMTNfTXNrICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfTXNrICAgICAgIC8qPCEgQlBXTTFfQ0gzICAgICAgIFBBMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NIM19QQjhfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjhNRlBfTXNrICAgICAgICAvKjwhIEJQV00xX0NIMyAgICAgICBQQjggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDRfUEExNF9Nc2sgICAgICBTWVNfR1BBX01GUEhfUEExNE1GUF9Nc2sgICAgICAgLyo8ISBCUFdNMV9DSDQgICAgICAgUEExNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0g0X1BDOF9Nc2sgICAgICAgU1lTX0dQQ19NRlBIX1BDOE1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTFfQ0g0ICAgICAgIFBDOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NINF9QQjdfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfTXNrICAgICAgICAvKjwhIEJQV00xX0NINCAgICAgICBQQjcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDVfUEExNV9Nc2sgICAgICBTWVNfR1BBX01GUEhfUEExNU1GUF9Nc2sgICAgICAgLyo8ISBCUFdNMV9DSDUgICAgICAgUEExNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0g1X1BCNl9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCNk1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTFfQ0g1ICAgICAgIFBCNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NINV9QRTEzX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTEzTUZQX01zayAgICAgICAvKjwhIEJQV00xX0NINSAgICAgICBQRTEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBDQU4wX1JYRF9QQTEzX01zayAgICAgICBTWVNfR1BBX01GUEhfUEExM01GUF9Nc2sgICAgICAgLyo8ISBDQU4wX1JYRCAgICAgICAgUEExMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQ0FOMF9SWERfUEQxMF9Nc2sgICAgICAgU1lTX0dQRF9NRlBIX1BEMTBNRlBfTXNrICAgICAgIC8qPCEgQ0FOMF9SWEQgICAgICAgIFBEMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIENBTjBfUlhEX1BBNF9Nc2sgICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfTXNrICAgICAgICAvKjwhIENBTjBfUlhEICAgICAgICBQQTQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBDQU4wX1JYRF9QQzRfTXNrICAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX01zayAgICAgICAgLyo8ISBDQU4wX1JYRCAgICAgICAgUEM0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQ0FOMF9SWERfUEIxMF9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfTXNrICAgICAgIC8qPCEgQ0FOMF9SWEQgICAgICAgIFBCMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIENBTjBfUlhEX1BFMTVfTXNrICAgICAgIFNZU19HUEVfTUZQSF9QRTE1TUZQX01zayAgICAgICAvKjwhIENBTjBfUlhEICAgICAgICBQRTE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBDQU4wX1RYRF9QRDExX01zayAgICAgICBTWVNfR1BEX01GUEhfUEQxMU1GUF9Nc2sgICAgICAgLyo8ISBDQU4wX1RYRCAgICAgICAgUEQxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQ0FOMF9UWERfUEM1X01zayAgICAgICAgU1lTX0dQQ19NRlBMX1BDNU1GUF9Nc2sgICAgICAgIC8qPCEgQ0FOMF9UWEQgICAgICAgIFBDNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIENBTjBfVFhEX1BCMTFfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjExTUZQX01zayAgICAgICAvKjwhIENBTjBfVFhEICAgICAgICBQQjExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBDQU4wX1RYRF9QQTEyX01zayAgICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9Nc2sgICAgICAgLyo8ISBDQU4wX1RYRCAgICAgICAgUEExMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQ0FOMF9UWERfUEUxNF9Nc2sgICAgICAgU1lTX0dQRV9NRlBIX1BFMTRNRlBfTXNrICAgICAgIC8qPCEgQ0FOMF9UWEQgICAgICAgIFBFMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIENBTjBfVFhEX1BBNV9Nc2sgICAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfTXNrICAgICAgICAvKjwhIENBTjBfVFhEICAgICAgICBQQTUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBDTEtPX1BDMTNfTXNrICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxM01GUF9Nc2sgICAgICAgLyo8ISBDTEtPICAgICAgICAgICAgUEMxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQ0xLT19QQjE0X01zayAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfTXNrICAgICAgIC8qPCEgQ0xLTyAgICAgICAgICAgIFBCMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIENMS09fUEQxMl9Nc2sgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEyTUZQX01zayAgICAgICAvKjwhIENMS08gICAgICAgICAgICBQRDEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBDTEtPX1BHMTVfTXNrICAgICAgICAgICBTWVNfR1BHX01GUEhfUEcxNU1GUF9Nc2sgICAgICAgLyo8ISBDTEtPICAgICAgICAgICAgUEcxNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgREFDMF9PVVRfUEIxMl9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfTXNrICAgICAgIC8qPCEgREFDMF9PVVQgICAgICAgIFBCMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIERBQzBfU1RfUEExMF9Nc2sgICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX01zayAgICAgICAvKjwhIERBQzBfU1QgICAgICAgICBQQTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBEQUMwX1NUX1BBMF9Nc2sgICAgICAgICBTWVNfR1BBX01GUExfUEEwTUZQX01zayAgICAgICAgLyo8ISBEQUMwX1NUICAgICAgICAgUEEwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgREFDMV9PVVRfUEIxM19Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfTXNrICAgICAgIC8qPCEgREFDMV9PVVQgICAgICAgIFBCMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIERBQzFfU1RfUEExX01zayAgICAgICAgIFNZU19HUEFfTUZQTF9QQTFNRlBfTXNrICAgICAgICAvKjwhIERBQzFfU1QgICAgICAgICBQQTEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBEQUMxX1NUX1BBMTFfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9Nc2sgICAgICAgLyo8ISBEQUMxX1NUICAgICAgICAgUEExMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfQ0gwX1BCMF9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCME1GUF9Nc2sgICAgICAgIC8qPCEgRUFEQzBfQ0gwICAgICAgIFBCMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX0NIMV9QQjFfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfTXNrICAgICAgICAvKjwhIEVBREMwX0NIMSAgICAgICBQQjEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9DSDEwX1BCMTBfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9Nc2sgICAgICAgLyo8ISBFQURDMF9DSDEwICAgICAgUEIxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfQ0gxMV9QQjExX01zayAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfTXNrICAgICAgIC8qPCEgRUFEQzBfQ0gxMSAgICAgIFBCMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX0NIMTJfUEIxMl9Nc2sgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX01zayAgICAgICAvKjwhIEVBREMwX0NIMTIgICAgICBQQjEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9DSDEzX1BCMTNfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgLyo8ISBFQURDMF9DSDEzICAgICAgUEIxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfQ0gxNF9QQjE0X01zayAgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfTXNrICAgICAgIC8qPCEgRUFEQzBfQ0gxNCAgICAgIFBCMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX0NIMTVfUEIxNV9Nc2sgICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX01zayAgICAgICAvKjwhIEVBREMwX0NIMTUgICAgICBQQjE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9DSDJfUEIyX01zayAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX01zayAgICAgICAgLyo8ISBFQURDMF9DSDIgICAgICAgUEIyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfQ0gzX1BCM19Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9Nc2sgICAgICAgIC8qPCEgRUFEQzBfQ0gzICAgICAgIFBCMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX0NINF9QQjRfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfTXNrICAgICAgICAvKjwhIEVBREMwX0NINCAgICAgICBQQjQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9DSDVfUEI1X01zayAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX01zayAgICAgICAgLyo8ISBFQURDMF9DSDUgICAgICAgUEI1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfQ0g2X1BCNl9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCNk1GUF9Nc2sgICAgICAgIC8qPCEgRUFEQzBfQ0g2ICAgICAgIFBCNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX0NIN19QQjdfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfTXNrICAgICAgICAvKjwhIEVBREMwX0NINyAgICAgICBQQjcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9DSDhfUEI4X01zayAgICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX01zayAgICAgICAgLyo8ISBFQURDMF9DSDggICAgICAgUEI4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfQ0g5X1BCOV9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCOU1GUF9Nc2sgICAgICAgIC8qPCEgRUFEQzBfQ0g5ICAgICAgIFBCOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX1NUX1BEMTJfTXNrICAgICAgIFNZU19HUERfTUZQSF9QRDEyTUZQX01zayAgICAgICAvKjwhIEVBREMwX1NUICAgICAgICBQRDEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9TVF9QRjVfTXNrICAgICAgICBTWVNfR1BGX01GUExfUEY1TUZQX01zayAgICAgICAgLyo8ISBFQURDMF9TVCAgICAgICAgUEY1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfU1RfUEMxM19Nc2sgICAgICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfTXNrICAgICAgIC8qPCEgRUFEQzBfU1QgICAgICAgIFBDMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX1NUX1BHMTVfTXNrICAgICAgIFNZU19HUEdfTUZQSF9QRzE1TUZQX01zayAgICAgICAvKjwhIEVBREMwX1NUICAgICAgICBQRzE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQwX1BHOV9Nc2sgICAgICAgICBTWVNfR1BHX01GUEhfUEc5TUZQX01zayAgICAgICAgLyo8ISBFQklfQUQwICAgICAgICAgUEc5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMF9QQzBfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDME1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEMCAgICAgICAgIFBDMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDFfUEMxX01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDEgICAgICAgICBQQzEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQxX1BHMTBfTXNrICAgICAgICBTWVNfR1BHX01GUEhfUEcxME1GUF9Nc2sgICAgICAgLyo8ISBFQklfQUQxICAgICAgICAgUEcxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMTBfUEUxX01zayAgICAgICAgU1lTX0dQRV9NRlBMX1BFMU1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEMTAgICAgICAgIFBFMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDEwX1BEM19Nc2sgICAgICAgIFNZU19HUERfTUZQTF9QRDNNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDEwICAgICAgICBQRDMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQxMF9QRDEzX01zayAgICAgICBTWVNfR1BEX01GUEhfUEQxM01GUF9Nc2sgICAgICAgLyo8ISBFQklfQUQxMCAgICAgICAgUEQxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMTFfUEUwX01zayAgICAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEMTEgICAgICAgIFBFMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDExX1BEMl9Nc2sgICAgICAgIFNZU19HUERfTUZQTF9QRDJNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDExICAgICAgICBQRDIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQxMl9QRDFfTXNrICAgICAgICBTWVNfR1BEX01GUExfUEQxTUZQX01zayAgICAgICAgLyo8ISBFQklfQUQxMiAgICAgICAgUEQxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMTJfUEIxNV9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEMTIgICAgICAgIFBCMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDEyX1BIOF9Nc2sgICAgICAgIFNZU19HUEhfTUZQSF9QSDhNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDEyICAgICAgICBQSDggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQxM19QRDBfTXNrICAgICAgICBTWVNfR1BEX01GUExfUEQwTUZQX01zayAgICAgICAgLyo8ISBFQklfQUQxMyAgICAgICAgUEQwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMTNfUEIxNF9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEMTMgICAgICAgIFBCMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDEzX1BIOV9Nc2sgICAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDEzICAgICAgICBQSDkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQxNF9QQjEzX01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgLyo8ISBFQklfQUQxNCAgICAgICAgUEIxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMTRfUEgxMF9Nc2sgICAgICAgU1lTX0dQSF9NRlBIX1BIMTBNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEMTQgICAgICAgIFBIMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDE1X1BCMTJfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX01zayAgICAgICAvKjwhIEVCSV9BRDE1ICAgICAgICBQQjEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQxNV9QSDExX01zayAgICAgICBTWVNfR1BIX01GUEhfUEgxMU1GUF9Nc2sgICAgICAgLyo8ISBFQklfQUQxNSAgICAgICAgUEgxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMl9QRzExX01zayAgICAgICAgU1lTX0dQR19NRlBIX1BHMTFNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEMiAgICAgICAgIFBHMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDJfUEMyX01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDIgICAgICAgICBQQzIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQzX1BDM19Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX01zayAgICAgICAgLyo8ISBFQklfQUQzICAgICAgICAgUEMzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEM19QRzEyX01zayAgICAgICAgU1lTX0dQR19NRlBIX1BHMTJNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEMyAgICAgICAgIFBHMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDRfUEcxM19Nc2sgICAgICAgIFNZU19HUEdfTUZQSF9QRzEzTUZQX01zayAgICAgICAvKjwhIEVCSV9BRDQgICAgICAgICBQRzEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQ0X1BDNF9Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX01zayAgICAgICAgLyo8ISBFQklfQUQ0ICAgICAgICAgUEM0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FENV9QRzE0X01zayAgICAgICAgU1lTX0dQR19NRlBIX1BHMTRNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FENSAgICAgICAgIFBHMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDVfUEM1X01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzVNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDUgICAgICAgICBQQzUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQ2X1BEOF9Nc2sgICAgICAgICBTWVNfR1BEX01GUEhfUEQ4TUZQX01zayAgICAgICAgLyo8ISBFQklfQUQ2ICAgICAgICAgUEQ4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FENl9QQTZfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FENiAgICAgICAgIFBBNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDdfUEE3X01zayAgICAgICAgIFNZU19HUEFfTUZQTF9QQTdNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDcgICAgICAgICBQQTcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQ3X1BEOV9Nc2sgICAgICAgICBTWVNfR1BEX01GUEhfUEQ5TUZQX01zayAgICAgICAgLyo8ISBFQklfQUQ3ICAgICAgICAgUEQ5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEOF9QQzZfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEOCAgICAgICAgIFBDNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDhfUEUxNF9Nc2sgICAgICAgIFNZU19HUEVfTUZQSF9QRTE0TUZQX01zayAgICAgICAvKjwhIEVCSV9BRDggICAgICAgICBQRTE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQ5X1BFMTVfTXNrICAgICAgICBTWVNfR1BFX01GUEhfUEUxNU1GUF9Nc2sgICAgICAgLyo8ISBFQklfQUQ5ICAgICAgICAgUEUxNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEOV9QQzdfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEOSAgICAgICAgIFBDNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIwX1BCNV9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIwICAgICAgICBQQjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMF9QSDdfTXNrICAgICAgICBTWVNfR1BIX01GUExfUEg3TUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMCAgICAgICAgUEg3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjFfUEg2X01zayAgICAgICAgU1lTX0dQSF9NRlBMX1BINk1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjEgICAgICAgIFBINiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxX1BCNF9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIxICAgICAgICBQQjQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTBfUEU4X01zayAgICAgICBTWVNfR1BFX01GUEhfUEU4TUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMTAgICAgICAgUEU4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjEwX1BDMTNfTXNrICAgICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEUjEwICAgICAgIFBDMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxMV9QRzJfTXNrICAgICAgIFNZU19HUEdfTUZQTF9QRzJNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIxMSAgICAgICBQRzIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTFfUEU5X01zayAgICAgICBTWVNfR1BFX01GUEhfUEU5TUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMTEgICAgICAgUEU5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjEyX1BHM19Nc2sgICAgICAgU1lTX0dQR19NRlBMX1BHM01GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjEyICAgICAgIFBHMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxMl9QRTEwX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX01zayAgICAgICAvKjwhIEVCSV9BRFIxMiAgICAgICBQRTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTNfUEc0X01zayAgICAgICBTWVNfR1BHX01GUExfUEc0TUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMTMgICAgICAgUEc0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjEzX1BFMTFfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEUjEzICAgICAgIFBFMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxNF9QRTEyX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTEyTUZQX01zayAgICAgICAvKjwhIEVCSV9BRFIxNCAgICAgICBQRTEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTRfUEYxMV9Nc2sgICAgICBTWVNfR1BGX01GUEhfUEYxMU1GUF9Nc2sgICAgICAgLyo8ISBFQklfQURSMTQgICAgICAgUEYxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjE1X1BGMTBfTXNrICAgICAgU1lTX0dQRl9NRlBIX1BGMTBNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEUjE1ICAgICAgIFBGMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxNV9QRTEzX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTEzTUZQX01zayAgICAgICAvKjwhIEVCSV9BRFIxNSAgICAgICBQRTEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTZfUEIxMV9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxMU1GUF9Nc2sgICAgICAgLyo8ISBFQklfQURSMTYgICAgICAgUEIxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjE2X1BGOV9Nc2sgICAgICAgU1lTX0dQRl9NRlBIX1BGOU1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjE2ICAgICAgIFBGOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxNl9QQzhfTXNrICAgICAgIFNZU19HUENfTUZQSF9QQzhNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIxNiAgICAgICBQQzggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTdfUEY4X01zayAgICAgICBTWVNfR1BGX01GUEhfUEY4TUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMTcgICAgICAgUEY4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjE3X1BCMTBfTXNrICAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEUjE3ICAgICAgIFBCMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxOF9QQjlfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjlNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIxOCAgICAgICBQQjkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMThfUEY3X01zayAgICAgICBTWVNfR1BGX01GUExfUEY3TUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMTggICAgICAgUEY3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjE5X1BGNl9Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGNk1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjE5ICAgICAgIFBGNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxOV9QQjhfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjhNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIxOSAgICAgICBQQjggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMl9QQjNfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMiAgICAgICAgUEIzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjJfUEg1X01zayAgICAgICAgU1lTX0dQSF9NRlBMX1BINU1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjIgICAgICAgIFBINSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIzX1BINF9Nc2sgICAgICAgIFNZU19HUEhfTUZQTF9QSDRNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIzICAgICAgICBQSDQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSM19QQjJfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMyAgICAgICAgUEIyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjRfUEMxMl9Nc2sgICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEUjQgICAgICAgIFBDMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFI1X1BDMTFfTXNrICAgICAgIFNZU19HUENfTUZQSF9QQzExTUZQX01zayAgICAgICAvKjwhIEVCSV9BRFI1ICAgICAgICBQQzExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSNl9QQzEwX01zayAgICAgICBTWVNfR1BDX01GUEhfUEMxME1GUF9Nc2sgICAgICAgLyo8ISBFQklfQURSNiAgICAgICAgUEMxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjdfUEM5X01zayAgICAgICAgU1lTX0dQQ19NRlBIX1BDOU1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjcgICAgICAgIFBDOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFI4X1BCMV9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFI4ICAgICAgICBQQjEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSOV9QQjBfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEIwTUZQX01zayAgICAgICAgLyo8ISBFQklfQURSOSAgICAgICAgUEIwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FMRV9QQThfTXNrICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FMRSAgICAgICAgIFBBOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BTEVfUEUyX01zayAgICAgICAgIFNZU19HUEVfTUZQTF9QRTJNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BTEUgICAgICAgICBQRTIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfTUNMS19QRTNfTXNrICAgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX01zayAgICAgICAgLyo8ISBFQklfTUNMSyAgICAgICAgUEUzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX01DTEtfUEE5X01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX01DTEsgICAgICAgIFBBOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9uQ1MwX1BCN19Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfTXNrICAgICAgICAvKjwhIEVCSV9uQ1MwICAgICAgICBQQjcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfbkNTMF9QRjZfTXNrICAgICAgICBTWVNfR1BGX01GUExfUEY2TUZQX01zayAgICAgICAgLyo8ISBFQklfbkNTMCAgICAgICAgUEY2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX25DUzBfUEQxMl9Nc2sgICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfTXNrICAgICAgIC8qPCEgRUJJX25DUzAgICAgICAgIFBEMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9uQ1MwX1BEMTRfTXNrICAgICAgIFNZU19HUERfTUZQSF9QRDE0TUZQX01zayAgICAgICAvKjwhIEVCSV9uQ1MwICAgICAgICBQRDE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfbkNTMF9QRjNfTXNrICAgICAgICBTWVNfR1BGX01GUExfUEYzTUZQX01zayAgICAgICAgLyo8ISBFQklfbkNTMCAgICAgICAgUEYzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX25DUzFfUEYyX01zayAgICAgICAgU1lTX0dQRl9NRlBMX1BGMk1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX25DUzEgICAgICAgIFBGMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9uQ1MxX1BEMTFfTXNrICAgICAgIFNZU19HUERfTUZQSF9QRDExTUZQX01zayAgICAgICAvKjwhIEVCSV9uQ1MxICAgICAgICBQRDExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfbkNTMV9QQjZfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX01zayAgICAgICAgLyo8ISBFQklfbkNTMSAgICAgICAgUEI2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX25DUzJfUEQxMF9Nc2sgICAgICAgU1lTX0dQRF9NRlBIX1BEMTBNRlBfTXNrICAgICAgIC8qPCEgRUJJX25DUzIgICAgICAgIFBEMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9uUkRfUEExMV9Nc2sgICAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX01zayAgICAgICAvKjwhIEVCSV9uUkQgICAgICAgICBQQTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfblJEX1BFNV9Nc2sgICAgICAgICBTWVNfR1BFX01GUExfUEU1TUZQX01zayAgICAgICAgLyo8ISBFQklfblJEICAgICAgICAgUEU1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX25XUl9QQTEwX01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfTXNrICAgICAgIC8qPCEgRUJJX25XUiAgICAgICAgIFBBMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9uV1JfUEU0X01zayAgICAgICAgIFNZU19HUEVfTUZQTF9QRTRNRlBfTXNrICAgICAgICAvKjwhIEVCSV9uV1IgICAgICAgICBQRTQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfbldSSF9QQjZfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX01zayAgICAgICAgLyo8ISBFQklfbldSSCAgICAgICAgUEI2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX25XUkxfUEI3X01zayAgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9Nc2sgICAgICAgIC8qPCEgRUJJX25XUkwgICAgICAgIFBCNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVDQVAwX0lDMF9QQTEwX01zayAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX01zayAgICAgICAvKjwhIEVDQVAwX0lDMCAgICAgICBQQTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQ0FQMF9JQzBfUEU4X01zayAgICAgICBTWVNfR1BFX01GUEhfUEU4TUZQX01zayAgICAgICAgLyo8ISBFQ0FQMF9JQzAgICAgICAgUEU4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUNBUDBfSUMxX1BFOV9Nc2sgICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9Nc2sgICAgICAgIC8qPCEgRUNBUDBfSUMxICAgICAgIFBFOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVDQVAwX0lDMV9QQTlfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTlNRlBfTXNrICAgICAgICAvKjwhIEVDQVAwX0lDMSAgICAgICBQQTkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQ0FQMF9JQzJfUEE4X01zayAgICAgICBTWVNfR1BBX01GUEhfUEE4TUZQX01zayAgICAgICAgLyo8ISBFQ0FQMF9JQzIgICAgICAgUEE4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUNBUDBfSUMyX1BFMTBfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTBNRlBfTXNrICAgICAgIC8qPCEgRUNBUDBfSUMyICAgICAgIFBFMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVDQVAxX0lDMF9QQzEwX01zayAgICAgIFNZU19HUENfTUZQSF9QQzEwTUZQX01zayAgICAgICAvKjwhIEVDQVAxX0lDMCAgICAgICBQQzEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQ0FQMV9JQzBfUEUxM19Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxM01GUF9Nc2sgICAgICAgLyo8ISBFQ0FQMV9JQzAgICAgICAgUEUxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUNBUDFfSUMxX1BFMTJfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTJNRlBfTXNrICAgICAgIC8qPCEgRUNBUDFfSUMxICAgICAgIFBFMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVDQVAxX0lDMV9QQzExX01zayAgICAgIFNZU19HUENfTUZQSF9QQzExTUZQX01zayAgICAgICAvKjwhIEVDQVAxX0lDMSAgICAgICBQQzExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQ0FQMV9JQzJfUEUxMV9Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9Nc2sgICAgICAgLyo8ISBFQ0FQMV9JQzIgICAgICAgUEUxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUNBUDFfSUMyX1BDMTJfTXNrICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfTXNrICAgICAgIC8qPCEgRUNBUDFfSUMyICAgICAgIFBDMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzBfU0NMX1BCNV9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfTXNrICAgICAgICAvKjwhIEkyQzBfU0NMICAgICAgICBQQjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMwX1NDTF9QQzFfTXNrICAgICAgICBTWVNfR1BDX01GUExfUEMxTUZQX01zayAgICAgICAgLyo8ISBJMkMwX1NDTCAgICAgICAgUEMxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMF9TQ0xfUEYzX01zayAgICAgICAgU1lTX0dQRl9NRlBMX1BGM01GUF9Nc2sgICAgICAgIC8qPCEgSTJDMF9TQ0wgICAgICAgIFBGMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzBfU0NMX1BFMTNfTXNrICAgICAgIFNZU19HUEVfTUZQSF9QRTEzTUZQX01zayAgICAgICAvKjwhIEkyQzBfU0NMICAgICAgICBQRTEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMwX1NDTF9QRDdfTXNrICAgICAgICBTWVNfR1BEX01GUExfUEQ3TUZQX01zayAgICAgICAgLyo8ISBJMkMwX1NDTCAgICAgICAgUEQ3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMF9TQ0xfUEE1X01zayAgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMF9TQ0wgICAgICAgIFBBNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzBfU0NMX1BDMTJfTXNrICAgICAgIFNZU19HUENfTUZQSF9QQzEyTUZQX01zayAgICAgICAvKjwhIEkyQzBfU0NMICAgICAgICBQQzEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMwX1NEQV9QQjRfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX01zayAgICAgICAgLyo8ISBJMkMwX1NEQSAgICAgICAgUEI0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMF9TREFfUEM4X01zayAgICAgICAgU1lTX0dQQ19NRlBIX1BDOE1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMF9TREEgICAgICAgIFBDOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzBfU0RBX1BDMF9Nc2sgICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfTXNrICAgICAgICAvKjwhIEkyQzBfU0RBICAgICAgICBQQzAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMwX1NEQV9QRDZfTXNrICAgICAgICBTWVNfR1BEX01GUExfUEQ2TUZQX01zayAgICAgICAgLyo8ISBJMkMwX1NEQSAgICAgICAgUEQ2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMF9TREFfUEMxMV9Nc2sgICAgICAgU1lTX0dQQ19NRlBIX1BDMTFNRlBfTXNrICAgICAgIC8qPCEgSTJDMF9TREEgICAgICAgIFBDMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzBfU0RBX1BBNF9Nc2sgICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfTXNrICAgICAgICAvKjwhIEkyQzBfU0RBICAgICAgICBQQTQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMwX1NEQV9QRjJfTXNrICAgICAgICBTWVNfR1BGX01GUExfUEYyTUZQX01zayAgICAgICAgLyo8ISBJMkMwX1NEQSAgICAgICAgUEYyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMF9TTUJBTF9QRzJfTXNrICAgICAgU1lTX0dQR19NRlBMX1BHMk1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMF9TTUJBTCAgICAgIFBHMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzBfU01CQUxfUEMzX01zayAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfTXNrICAgICAgICAvKjwhIEkyQzBfU01CQUwgICAgICBQQzMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMwX1NNQlNVU19QQzJfTXNrICAgICBTWVNfR1BDX01GUExfUEMyTUZQX01zayAgICAgICAgLyo8ISBJMkMwX1NNQlNVUyAgICAgUEMyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMF9TTUJTVVNfUEczX01zayAgICAgU1lTX0dQR19NRlBMX1BHM01GUF9Nc2sgICAgICAgIC8qPCEgSTJDMF9TTUJTVVMgICAgIFBHMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0NMX1BBM19Nc2sgICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU0NMICAgICAgICBQQTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NDTF9QRzJfTXNrICAgICAgICBTWVNfR1BHX01GUExfUEcyTUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NDTCAgICAgICAgUEcyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEIxX01zayAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TQ0wgICAgICAgIFBCMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0NMX1BCMTFfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjExTUZQX01zayAgICAgICAvKjwhIEkyQzFfU0NMICAgICAgICBQQjExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NDTF9QRDVfTXNrICAgICAgICBTWVNfR1BEX01GUExfUEQ1TUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NDTCAgICAgICAgUEQ1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEExMl9Nc2sgICAgICAgU1lTX0dQQV9NRlBIX1BBMTJNRlBfTXNrICAgICAgIC8qPCEgSTJDMV9TQ0wgICAgICAgIFBBMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0NMX1BDNV9Nc2sgICAgICAgIFNZU19HUENfTUZQTF9QQzVNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU0NMICAgICAgICBQQzUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NDTF9QQTdfTXNrICAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NDTCAgICAgICAgUEE3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEYwX01zayAgICAgICAgU1lTX0dQRl9NRlBMX1BGME1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TQ0wgICAgICAgIFBGMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0NMX1BFMV9Nc2sgICAgICAgIFNZU19HUEVfTUZQTF9QRTFNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU0NMICAgICAgICBQRTEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NEQV9QQjBfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEIwTUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NEQSAgICAgICAgUEIwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TREFfUEE2X01zayAgICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TREEgICAgICAgIFBBNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0RBX1BBMTNfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTEzTUZQX01zayAgICAgICAvKjwhIEkyQzFfU0RBICAgICAgICBQQTEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NEQV9QRzNfTXNrICAgICAgICBTWVNfR1BHX01GUExfUEczTUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NEQSAgICAgICAgUEczICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TREFfUEUwX01zayAgICAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TREEgICAgICAgIFBFMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0RBX1BDNF9Nc2sgICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU0RBICAgICAgICBQQzQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NEQV9QQTJfTXNrICAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NEQSAgICAgICAgUEEyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TREFfUEIxMF9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfTXNrICAgICAgIC8qPCEgSTJDMV9TREEgICAgICAgIFBCMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0RBX1BGMV9Nc2sgICAgICAgIFNZU19HUEZfTUZQTF9QRjFNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU0RBICAgICAgICBQRjEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NEQV9QRDRfTXNrICAgICAgICBTWVNfR1BEX01GUExfUEQ0TUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NEQSAgICAgICAgUEQ0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TTUJBTF9QQjlfTXNrICAgICAgU1lTX0dQQl9NRlBIX1BCOU1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TTUJBTCAgICAgIFBCOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU01CQUxfUEM3X01zayAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU01CQUwgICAgICBQQzcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NNQkFMX1BIOF9Nc2sgICAgICBTWVNfR1BIX01GUEhfUEg4TUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NNQkFMICAgICAgUEg4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TTUJTVVNfUEg5X01zayAgICAgU1lTX0dQSF9NRlBIX1BIOU1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TTUJTVVMgICAgIFBIOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU01CU1VTX1BDNl9Nc2sgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU01CU1VTICAgICBQQzYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NNQlNVU19QQjhfTXNrICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NNQlNVUyAgICAgUEI4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMl9TQ0xfUEIxM19Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfTXNrICAgICAgIC8qPCEgSTJDMl9TQ0wgICAgICAgIFBCMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzJfU0NMX1BBMTFfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX01zayAgICAgICAvKjwhIEkyQzJfU0NMICAgICAgICBQQTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMyX1NDTF9QSDhfTXNrICAgICAgICBTWVNfR1BIX01GUEhfUEg4TUZQX01zayAgICAgICAgLyo8ISBJMkMyX1NDTCAgICAgICAgUEg4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMl9TQ0xfUEQ5X01zayAgICAgICAgU1lTX0dQRF9NRlBIX1BEOU1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMl9TQ0wgICAgICAgIFBEOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzJfU0NMX1BEMV9Nc2sgICAgICAgIFNZU19HUERfTUZQTF9QRDFNRlBfTXNrICAgICAgICAvKjwhIEkyQzJfU0NMICAgICAgICBQRDEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMyX1NDTF9QQTE0X01zayAgICAgICBTWVNfR1BBX01GUEhfUEExNE1GUF9Nc2sgICAgICAgLyo8ISBJMkMyX1NDTCAgICAgICAgUEExNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMl9TQ0xfUEExX01zayAgICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMl9TQ0wgICAgICAgIFBBMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzJfU0RBX1BBMF9Nc2sgICAgICAgIFNZU19HUEFfTUZQTF9QQTBNRlBfTXNrICAgICAgICAvKjwhIEkyQzJfU0RBICAgICAgICBQQTAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMyX1NEQV9QQjEyX01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9Nc2sgICAgICAgLyo8ISBJMkMyX1NEQSAgICAgICAgUEIxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMl9TREFfUEExMF9Nc2sgICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfTXNrICAgICAgIC8qPCEgSTJDMl9TREEgICAgICAgIFBBMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzJfU0RBX1BBMTVfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX01zayAgICAgICAvKjwhIEkyQzJfU0RBICAgICAgICBQQTE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMyX1NEQV9QSDlfTXNrICAgICAgICBTWVNfR1BIX01GUEhfUEg5TUZQX01zayAgICAgICAgLyo8ISBJMkMyX1NEQSAgICAgICAgUEg5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMl9TREFfUEQ4X01zayAgICAgICAgU1lTX0dQRF9NRlBIX1BEOE1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMl9TREEgICAgICAgIFBEOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzJfU0RBX1BEMF9Nc2sgICAgICAgIFNZU19HUERfTUZQTF9QRDBNRlBfTXNrICAgICAgICAvKjwhIEkyQzJfU0RBICAgICAgICBQRDAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMyX1NNQkFMX1BCMTVfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9Nc2sgICAgICAgLyo8ISBJMkMyX1NNQkFMICAgICAgUEIxNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMl9TTUJTVVNfUEIxNF9Nc2sgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfTXNrICAgICAgIC8qPCEgSTJDMl9TTUJTVVMgICAgIFBCMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfQkNMS19QQTEyX01zayAgICAgIFNZU19HUEFfTUZQSF9QQTEyTUZQX01zayAgICAgICAvKjwhIEkyUzBfQkNMSyAgICAgICBQQTEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0JDTEtfUEI1X01zayAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX01zayAgICAgICAgLyo8ISBJMlMwX0JDTEsgICAgICAgUEI1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9CQ0xLX1BFOF9Nc2sgICAgICAgU1lTX0dQRV9NRlBIX1BFOE1GUF9Nc2sgICAgICAgIC8qPCEgSTJTMF9CQ0xLICAgICAgIFBFOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfQkNMS19QRTFfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTFNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfQkNMSyAgICAgICBQRTEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0JDTEtfUEYxMF9Nc2sgICAgICBTWVNfR1BGX01GUEhfUEYxME1GUF9Nc2sgICAgICAgLyo8ISBJMlMwX0JDTEsgICAgICAgUEYxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9CQ0xLX1BDNF9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9Nc2sgICAgICAgIC8qPCEgSTJTMF9CQ0xLICAgICAgIFBDNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfRElfUEY4X01zayAgICAgICAgIFNZU19HUEZfTUZQSF9QRjhNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfREkgICAgICAgICBQRjggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0RJX1BCM19Nc2sgICAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX01zayAgICAgICAgLyo8ISBJMlMwX0RJICAgICAgICAgUEIzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9ESV9QRTEwX01zayAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTBNRlBfTXNrICAgICAgIC8qPCEgSTJTMF9ESSAgICAgICAgIFBFMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfRElfUEExNF9Nc2sgICAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX01zayAgICAgICAvKjwhIEkyUzBfREkgICAgICAgICBQQTE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0RJX1BIOF9Nc2sgICAgICAgICBTWVNfR1BIX01GUEhfUEg4TUZQX01zayAgICAgICAgLyo8ISBJMlMwX0RJICAgICAgICAgUEg4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9ESV9QQzJfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMk1GUF9Nc2sgICAgICAgIC8qPCEgSTJTMF9ESSAgICAgICAgIFBDMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfRE9fUEIyX01zayAgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfRE8gICAgICAgICBQQjIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0RPX1BIOV9Nc2sgICAgICAgICBTWVNfR1BIX01GUEhfUEg5TUZQX01zayAgICAgICAgLyo8ISBJMlMwX0RPICAgICAgICAgUEg5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9ET19QRjdfTXNrICAgICAgICAgU1lTX0dQRl9NRlBMX1BGN01GUF9Nc2sgICAgICAgIC8qPCEgSTJTMF9ETyAgICAgICAgIFBGNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfRE9fUEUxMV9Nc2sgICAgICAgIFNZU19HUEVfTUZQSF9QRTExTUZQX01zayAgICAgICAvKjwhIEkyUzBfRE8gICAgICAgICBQRTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0RPX1BDMV9Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEMxTUZQX01zayAgICAgICAgLyo8ISBJMlMwX0RPICAgICAgICAgUEMxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9ET19QQTE1X01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTVNRlBfTXNrICAgICAgIC8qPCEgSTJTMF9ETyAgICAgICAgIFBBMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfTFJDS19QRjZfTXNrICAgICAgIFNZU19HUEZfTUZQTF9QRjZNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfTFJDSyAgICAgICBQRjYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0xSQ0tfUEUxMl9Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxMk1GUF9Nc2sgICAgICAgLyo8ISBJMlMwX0xSQ0sgICAgICAgUEUxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9MUkNLX1BDMF9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDME1GUF9Nc2sgICAgICAgIC8qPCEgSTJTMF9MUkNLICAgICAgIFBDMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfTFJDS19QSDEwX01zayAgICAgIFNZU19HUEhfTUZQSF9QSDEwTUZQX01zayAgICAgICAvKjwhIEkyUzBfTFJDSyAgICAgICBQSDEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0xSQ0tfUEIxX01zayAgICAgICBTWVNfR1BCX01GUExfUEIxTUZQX01zayAgICAgICAgLyo8ISBJMlMwX0xSQ0sgICAgICAgUEIxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9NQ0xLX1BFOV9Nc2sgICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9Nc2sgICAgICAgIC8qPCEgSTJTMF9NQ0xLICAgICAgIFBFOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfTUNMS19QQjRfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfTUNMSyAgICAgICBQQjQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX01DTEtfUEMzX01zayAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX01zayAgICAgICAgLyo8ISBJMlMwX01DTEsgICAgICAgUEMzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9NQ0xLX1BFMF9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9Nc2sgICAgICAgIC8qPCEgSTJTMF9NQ0xLICAgICAgIFBFMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfTUNMS19QQTEzX01zayAgICAgIFNZU19HUEFfTUZQSF9QQTEzTUZQX01zayAgICAgICAvKjwhIEkyUzBfTUNMSyAgICAgICBQQTEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX01DTEtfUEY5X01zayAgICAgICBTWVNfR1BGX01GUEhfUEY5TUZQX01zayAgICAgICAgLyo8ISBJMlMwX01DTEsgICAgICAgUEY5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSUNFX0NMS19QRjFfTXNrICAgICAgICAgU1lTX0dQRl9NRlBMX1BGMU1GUF9Nc2sgICAgICAgIC8qPCEgSUNFX0NMSyAgICAgICAgIFBGMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIElDRV9EQVRfUEYwX01zayAgICAgICAgIFNZU19HUEZfTUZQTF9QRjBNRlBfTXNrICAgICAgICAvKjwhIElDRV9EQVQgICAgICAgICBQRjAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJTlQwX1BCNV9Nc2sgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX01zayAgICAgICAgLyo8ISBJTlQwICAgICAgICAgICAgUEI1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSU5UMF9QQTZfTXNrICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9Nc2sgICAgICAgIC8qPCEgSU5UMCAgICAgICAgICAgIFBBNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIElOVDFfUEI0X01zayAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfTXNrICAgICAgICAvKjwhIElOVDEgICAgICAgICAgICBQQjQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJTlQxX1BBN19Nc2sgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX01zayAgICAgICAgLyo8ISBJTlQxICAgICAgICAgICAgUEE3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSU5UMl9QQjNfTXNrICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9Nc2sgICAgICAgIC8qPCEgSU5UMiAgICAgICAgICAgIFBCMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIElOVDJfUEM2X01zayAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfTXNrICAgICAgICAvKjwhIElOVDIgICAgICAgICAgICBQQzYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJTlQzX1BDN19Nc2sgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX01zayAgICAgICAgLyo8ISBJTlQzICAgICAgICAgICAgUEM3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSU5UM19QQjJfTXNrICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9Nc2sgICAgICAgIC8qPCEgSU5UMyAgICAgICAgICAgIFBCMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIElOVDRfUEI2X01zayAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfTXNrICAgICAgICAvKjwhIElOVDQgICAgICAgICAgICBQQjYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJTlQ0X1BBOF9Nc2sgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEE4TUZQX01zayAgICAgICAgLyo8ISBJTlQ0ICAgICAgICAgICAgUEE4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSU5UNV9QQjdfTXNrICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9Nc2sgICAgICAgIC8qPCEgSU5UNSAgICAgICAgICAgIFBCNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIElOVDVfUEQxMl9Nc2sgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEyTUZQX01zayAgICAgICAvKjwhIElOVDUgICAgICAgICAgICBQRDEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJTlQ2X1BEMTFfTXNrICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxMU1GUF9Nc2sgICAgICAgLyo8ISBJTlQ2ICAgICAgICAgICAgUEQxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSU5UNl9QQjhfTXNrICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9Nc2sgICAgICAgIC8qPCEgSU5UNiAgICAgICAgICAgIFBCOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIElOVDdfUEI5X01zayAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjlNRlBfTXNrICAgICAgICAvKjwhIElOVDcgICAgICAgICAgICBQQjkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJTlQ3X1BEMTBfTXNrICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxME1GUF9Nc2sgICAgICAgLyo8ISBJTlQ3ICAgICAgICAgICAgUEQxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQlJBS0UwX1BFOF9Nc2sgICAgU1lTX0dQRV9NRlBIX1BFOE1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQlJBS0UwICAgIFBFOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0JSQUtFMF9QQjFfTXNrICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0JSQUtFMCAgICBQQjEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9CUkFLRTFfUEIwX01zayAgICBTWVNfR1BCX01GUExfUEIwTUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9CUkFLRTEgICAgUEIwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQlJBS0UxX1BFOV9Nc2sgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQlJBS0UxICAgIFBFOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NIMF9QQTVfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NIMCAgICAgICBQQTUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDBfUEU3X01zayAgICAgICBTWVNfR1BFX01GUExfUEU3TUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9DSDAgICAgICAgUEU3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0gwX1BFOF9Nc2sgICAgICAgU1lTX0dQRV9NRlBIX1BFOE1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0gwICAgICAgIFBFOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NIMF9QQjVfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NIMCAgICAgICBQQjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDFfUEE0X01zayAgICAgICBTWVNfR1BBX01GUExfUEE0TUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9DSDEgICAgICAgUEE0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0gxX1BCNF9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0gxICAgICAgIFBCNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NIMV9QRTlfTXNrICAgICAgIFNZU19HUEVfTUZQSF9QRTlNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NIMSAgICAgICBQRTkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDFfUEU2X01zayAgICAgICBTWVNfR1BFX01GUExfUEU2TUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9DSDEgICAgICAgUEU2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0gyX1BFNV9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFNU1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0gyICAgICAgIFBFNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NIMl9QQjNfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NIMiAgICAgICBQQjMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDJfUEUxMF9Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxME1GUF9Nc2sgICAgICAgLyo8ISBFUFdNMF9DSDIgICAgICAgUEUxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0gyX1BBM19Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBM01GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0gyICAgICAgIFBBMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NIM19QQTJfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTJNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NIMyAgICAgICBQQTIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDNfUEUxMV9Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9Nc2sgICAgICAgLyo8ISBFUFdNMF9DSDMgICAgICAgUEUxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0gzX1BFNF9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0gzICAgICAgIFBFNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NIM19QQjJfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NIMyAgICAgICBQQjIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDRfUEQxNF9Nc2sgICAgICBTWVNfR1BEX01GUEhfUEQxNE1GUF9Nc2sgICAgICAgLyo8ISBFUFdNMF9DSDQgICAgICAgUEQxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0g0X1BCMV9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0g0ICAgICAgIFBCMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NINF9QRTNfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTNNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NINCAgICAgICBQRTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDRfUEExX01zayAgICAgICBTWVNfR1BBX01GUExfUEExTUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9DSDQgICAgICAgUEExICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0g0X1BFMTJfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTJNRlBfTXNrICAgICAgIC8qPCEgRVBXTTBfQ0g0ICAgICAgIFBFMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NINV9QQjBfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NINSAgICAgICBQQjAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDVfUEUyX01zayAgICAgICBTWVNfR1BFX01GUExfUEUyTUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9DSDUgICAgICAgUEUyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0g1X1BBMF9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBME1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0g1ICAgICAgIFBBMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NINV9QRTEzX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTEzTUZQX01zayAgICAgICAvKjwhIEVQV00wX0NINSAgICAgICBQRTEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDVfUEgxMV9Nc2sgICAgICBTWVNfR1BIX01GUEhfUEgxMU1GUF9Nc2sgICAgICAgLyo8ISBFUFdNMF9DSDUgICAgICAgUEgxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfU1lOQ19JTl9QQTE1X01zayAgU1lTX0dQQV9NRlBIX1BBMTVNRlBfTXNrICAgICAgIC8qPCEgRVBXTTBfU1lOQ19JTiAgIFBBMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX1NZTkNfT1VUX1BGNV9Nc2sgIFNZU19HUEZfTUZQTF9QRjVNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX1NZTkNfT1VUICBQRjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9TWU5DX09VVF9QQTExX01zayBTWVNfR1BBX01GUEhfUEExMU1GUF9Nc2sgICAgICAgLyo8ISBFUFdNMF9TWU5DX09VVCAgUEExMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQlJBS0UwX1BCN19Nc2sgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTFfQlJBS0UwICAgIFBCNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0JSQUtFMF9QRTEwX01zayAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX01zayAgICAgICAvKjwhIEVQV00xX0JSQUtFMCAgICBQRTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9CUkFLRTFfUEI2X01zayAgICBTWVNfR1BCX01GUExfUEI2TUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9CUkFLRTEgICAgUEI2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQlJBS0UxX1BFMTFfTXNrICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfTXNrICAgICAgIC8qPCEgRVBXTTFfQlJBS0UxICAgIFBFMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NIMF9QQzVfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzVNRlBfTXNrICAgICAgICAvKjwhIEVQV00xX0NIMCAgICAgICBQQzUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDBfUEUxM19Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxM01GUF9Nc2sgICAgICAgLyo8ISBFUFdNMV9DSDAgICAgICAgUEUxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0gwX1BDMTJfTXNrICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfTXNrICAgICAgIC8qPCEgRVBXTTFfQ0gwICAgICAgIFBDMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NIMF9QQjE1X01zayAgICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX01zayAgICAgICAvKjwhIEVQV00xX0NIMCAgICAgICBQQjE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDFfUEIxNF9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9Nc2sgICAgICAgLyo8ISBFUFdNMV9DSDEgICAgICAgUEIxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0gxX1BDMTFfTXNrICAgICAgU1lTX0dQQ19NRlBIX1BDMTFNRlBfTXNrICAgICAgIC8qPCEgRVBXTTFfQ0gxICAgICAgIFBDMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NIMV9QQzRfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfTXNrICAgICAgICAvKjwhIEVQV00xX0NIMSAgICAgICBQQzQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDFfUEM4X01zayAgICAgICBTWVNfR1BDX01GUEhfUEM4TUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9DSDEgICAgICAgUEM4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0gyX1BDN19Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTFfQ0gyICAgICAgIFBDNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NIMl9QQzEwX01zayAgICAgIFNZU19HUENfTUZQSF9QQzEwTUZQX01zayAgICAgICAvKjwhIEVQV00xX0NIMiAgICAgICBQQzEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDJfUEMzX01zayAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9DSDIgICAgICAgUEMzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0gyX1BCMTNfTXNrICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfTXNrICAgICAgIC8qPCEgRVBXTTFfQ0gyICAgICAgIFBCMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NIM19QQjEyX01zayAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX01zayAgICAgICAvKjwhIEVQV00xX0NIMyAgICAgICBQQjEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDNfUEM2X01zayAgICAgICBTWVNfR1BDX01GUExfUEM2TUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9DSDMgICAgICAgUEM2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0gzX1BDOV9Nc2sgICAgICAgU1lTX0dQQ19NRlBIX1BDOU1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTFfQ0gzICAgICAgIFBDOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NIM19QQzJfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfTXNrICAgICAgICAvKjwhIEVQV00xX0NIMyAgICAgICBQQzIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDRfUEI3X01zayAgICAgICBTWVNfR1BCX01GUExfUEI3TUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9DSDQgICAgICAgUEI3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0g0X1BCMV9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTFfQ0g0ICAgICAgIFBCMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NINF9QQzFfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfTXNrICAgICAgICAvKjwhIEVQV00xX0NINCAgICAgICBQQzEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDRfUEE3X01zayAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9DSDQgICAgICAgUEE3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0g1X1BBNl9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTFfQ0g1ICAgICAgIFBBNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NINV9QQzBfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfTXNrICAgICAgICAvKjwhIEVQV00xX0NINSAgICAgICBQQzAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDVfUEI2X01zayAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9DSDUgICAgICAgUEI2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0g1X1BCMF9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCME1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTFfQ0g1ICAgICAgIFBCMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFFSTBfQV9QRTNfTXNrICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTNNRlBfTXNrICAgICAgICAvKjwhIFFFSTBfQSAgICAgICAgICBQRTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRRUkwX0FfUEE0X01zayAgICAgICAgICBTWVNfR1BBX01GUExfUEE0TUZQX01zayAgICAgICAgLyo8ISBRRUkwX0EgICAgICAgICAgUEE0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUUVJMF9BX1BEMTFfTXNrICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTFNRlBfTXNrICAgICAgIC8qPCEgUUVJMF9BICAgICAgICAgIFBEMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFFSTBfQl9QRDEwX01zayAgICAgICAgIFNZU19HUERfTUZQSF9QRDEwTUZQX01zayAgICAgICAvKjwhIFFFSTBfQiAgICAgICAgICBQRDEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRRUkwX0JfUEEzX01zayAgICAgICAgICBTWVNfR1BBX01GUExfUEEzTUZQX01zayAgICAgICAgLyo8ISBRRUkwX0IgICAgICAgICAgUEEzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUUVJMF9CX1BFMl9Nc2sgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFMk1GUF9Nc2sgICAgICAgIC8qPCEgUUVJMF9CICAgICAgICAgIFBFMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFFSTBfSU5ERVhfUEU0X01zayAgICAgIFNZU19HUEVfTUZQTF9QRTRNRlBfTXNrICAgICAgICAvKjwhIFFFSTBfSU5ERVggICAgICBQRTQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRRUkwX0lOREVYX1BBNV9Nc2sgICAgICBTWVNfR1BBX01GUExfUEE1TUZQX01zayAgICAgICAgLyo8ISBRRUkwX0lOREVYICAgICAgUEE1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUUVJMF9JTkRFWF9QRDEyX01zayAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfTXNrICAgICAgIC8qPCEgUUVJMF9JTkRFWCAgICAgIFBEMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFFSTFfQV9QRTZfTXNrICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTZNRlBfTXNrICAgICAgICAvKjwhIFFFSTFfQSAgICAgICAgICBQRTYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRRUkxX0FfUEExM19Nc2sgICAgICAgICBTWVNfR1BBX01GUEhfUEExM01GUF9Nc2sgICAgICAgLyo8ISBRRUkxX0EgICAgICAgICAgUEExMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUUVJMV9BX1BBOV9Nc2sgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9Nc2sgICAgICAgIC8qPCEgUUVJMV9BICAgICAgICAgIFBBOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFFSTFfQl9QQTE0X01zayAgICAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX01zayAgICAgICAvKjwhIFFFSTFfQiAgICAgICAgICBQQTE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRRUkxX0JfUEE4X01zayAgICAgICAgICBTWVNfR1BBX01GUEhfUEE4TUZQX01zayAgICAgICAgLyo8ISBRRUkxX0IgICAgICAgICAgUEE4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUUVJMV9CX1BFNV9Nc2sgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNU1GUF9Nc2sgICAgICAgIC8qPCEgUUVJMV9CICAgICAgICAgIFBFNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFFSTFfSU5ERVhfUEU3X01zayAgICAgIFNZU19HUEVfTUZQTF9QRTdNRlBfTXNrICAgICAgICAvKjwhIFFFSTFfSU5ERVggICAgICBQRTcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRRUkxX0lOREVYX1BBMTBfTXNrICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9Nc2sgICAgICAgLyo8ISBRRUkxX0lOREVYICAgICAgUEExMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUUVJMV9JTkRFWF9QQTEyX01zayAgICAgU1lTX0dQQV9NRlBIX1BBMTJNRlBfTXNrICAgICAgIC8qPCEgUUVJMV9JTkRFWCAgICAgIFBBMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9DTEtfUEY2X01zayAgICAgICAgIFNZU19HUEZfTUZQTF9QRjZNRlBfTXNrICAgICAgICAvKjwhIFNDMF9DTEsgICAgICAgICBQRjYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfQ0xLX1BFMl9Nc2sgICAgICAgICBTWVNfR1BFX01GUExfUEUyTUZQX01zayAgICAgICAgLyo8ISBTQzBfQ0xLICAgICAgICAgUEUyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX0NMS19QQTBfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBME1GUF9Nc2sgICAgICAgIC8qPCEgU0MwX0NMSyAgICAgICAgIFBBMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9DTEtfUEI1X01zayAgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfTXNrICAgICAgICAvKjwhIFNDMF9DTEsgICAgICAgICBQQjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfREFUX1BFM19Nc2sgICAgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX01zayAgICAgICAgLyo8ISBTQzBfREFUICAgICAgICAgUEUzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX0RBVF9QQjRfTXNrICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9Nc2sgICAgICAgIC8qPCEgU0MwX0RBVCAgICAgICAgIFBCNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9EQVRfUEExX01zayAgICAgICAgIFNZU19HUEFfTUZQTF9QQTFNRlBfTXNrICAgICAgICAvKjwhIFNDMF9EQVQgICAgICAgICBQQTEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfREFUX1BGN19Nc2sgICAgICAgICBTWVNfR1BGX01GUExfUEY3TUZQX01zayAgICAgICAgLyo8ISBTQzBfREFUICAgICAgICAgUEY3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX1BXUl9QRTVfTXNrICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNU1GUF9Nc2sgICAgICAgIC8qPCEgU0MwX1BXUiAgICAgICAgIFBFNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9QV1JfUEEzX01zayAgICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfTXNrICAgICAgICAvKjwhIFNDMF9QV1IgICAgICAgICBQQTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfUFdSX1BCMl9Nc2sgICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX01zayAgICAgICAgLyo8ISBTQzBfUFdSICAgICAgICAgUEIyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX1BXUl9QRjlfTXNrICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOU1GUF9Nc2sgICAgICAgIC8qPCEgU0MwX1BXUiAgICAgICAgIFBGOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9SU1RfUEY4X01zayAgICAgICAgIFNZU19HUEZfTUZQSF9QRjhNRlBfTXNrICAgICAgICAvKjwhIFNDMF9SU1QgICAgICAgICBQRjggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfUlNUX1BFNF9Nc2sgICAgICAgICBTWVNfR1BFX01GUExfUEU0TUZQX01zayAgICAgICAgLyo8ISBTQzBfUlNUICAgICAgICAgUEU0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX1JTVF9QQTJfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMk1GUF9Nc2sgICAgICAgIC8qPCEgU0MwX1JTVCAgICAgICAgIFBBMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9SU1RfUEIzX01zayAgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfTXNrICAgICAgICAvKjwhIFNDMF9SU1QgICAgICAgICBQQjMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfbkNEX1BFNl9Nc2sgICAgICAgICBTWVNfR1BFX01GUExfUEU2TUZQX01zayAgICAgICAgLyo8ISBTQzBfbkNEICAgICAgICAgUEU2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX25DRF9QRjEwX01zayAgICAgICAgU1lTX0dQRl9NRlBIX1BGMTBNRlBfTXNrICAgICAgIC8qPCEgU0MwX25DRCAgICAgICAgIFBGMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9uQ0RfUEE0X01zayAgICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfTXNrICAgICAgICAvKjwhIFNDMF9uQ0QgICAgICAgICBQQTQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfbkNEX1BDMTJfTXNrICAgICAgICBTWVNfR1BDX01GUEhfUEMxMk1GUF9Nc2sgICAgICAgLyo8ISBTQzBfbkNEICAgICAgICAgUEMxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MxX0NMS19QQzBfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDME1GUF9Nc2sgICAgICAgIC8qPCEgU0MxX0NMSyAgICAgICAgIFBDMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMV9DTEtfUEIxMl9Nc2sgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX01zayAgICAgICAvKjwhIFNDMV9DTEsgICAgICAgICBQQjEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzFfQ0xLX1BENF9Nc2sgICAgICAgICBTWVNfR1BEX01GUExfUEQ0TUZQX01zayAgICAgICAgLyo8ISBTQzFfQ0xLICAgICAgICAgUEQ0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MxX0RBVF9QRDVfTXNrICAgICAgICAgU1lTX0dQRF9NRlBMX1BENU1GUF9Nc2sgICAgICAgIC8qPCEgU0MxX0RBVCAgICAgICAgIFBENSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMV9EQVRfUEIxM19Nc2sgICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX01zayAgICAgICAvKjwhIFNDMV9EQVQgICAgICAgICBQQjEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzFfREFUX1BDMV9Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEMxTUZQX01zayAgICAgICAgLyo8ISBTQzFfREFUICAgICAgICAgUEMxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MxX1BXUl9QQjE1X01zayAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfTXNrICAgICAgIC8qPCEgU0MxX1BXUiAgICAgICAgIFBCMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMV9QV1JfUEMzX01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfTXNrICAgICAgICAvKjwhIFNDMV9QV1IgICAgICAgICBQQzMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzFfUFdSX1BEN19Nc2sgICAgICAgICBTWVNfR1BEX01GUExfUEQ3TUZQX01zayAgICAgICAgLyo8ISBTQzFfUFdSICAgICAgICAgUEQ3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MxX1JTVF9QRDZfTXNrICAgICAgICAgU1lTX0dQRF9NRlBMX1BENk1GUF9Nc2sgICAgICAgIC8qPCEgU0MxX1JTVCAgICAgICAgIFBENiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMV9SU1RfUEIxNF9Nc2sgICAgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX01zayAgICAgICAvKjwhIFNDMV9SU1QgICAgICAgICBQQjE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzFfUlNUX1BDMl9Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEMyTUZQX01zayAgICAgICAgLyo8ISBTQzFfUlNUICAgICAgICAgUEMyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MxX25DRF9QRDNfTXNrICAgICAgICAgU1lTX0dQRF9NRlBMX1BEM01GUF9Nc2sgICAgICAgIC8qPCEgU0MxX25DRCAgICAgICAgIFBEMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMV9uQ0RfUEM0X01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfTXNrICAgICAgICAvKjwhIFNDMV9uQ0QgICAgICAgICBQQzQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzFfbkNEX1BEMTRfTXNrICAgICAgICBTWVNfR1BEX01GUEhfUEQxNE1GUF9Nc2sgICAgICAgLyo8ISBTQzFfbkNEICAgICAgICAgUEQxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX0NMS19QRDBfTXNrICAgICAgICAgU1lTX0dQRF9NRlBMX1BEME1GUF9Nc2sgICAgICAgIC8qPCEgU0MyX0NMSyAgICAgICAgIFBEMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9DTEtfUEExNV9Nc2sgICAgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX01zayAgICAgICAvKjwhIFNDMl9DTEsgICAgICAgICBQQTE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfQ0xLX1BFMF9Nc2sgICAgICAgICBTWVNfR1BFX01GUExfUEUwTUZQX01zayAgICAgICAgLyo8ISBTQzJfQ0xLICAgICAgICAgUEUwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX0NMS19QQThfTXNrICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9Nc2sgICAgICAgIC8qPCEgU0MyX0NMSyAgICAgICAgIFBBOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9DTEtfUEE2X01zayAgICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfTXNrICAgICAgICAvKjwhIFNDMl9DTEsgICAgICAgICBQQTYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfREFUX1BFMV9Nc2sgICAgICAgICBTWVNfR1BFX01GUExfUEUxTUZQX01zayAgICAgICAgLyo8ISBTQzJfREFUICAgICAgICAgUEUxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX0RBVF9QRDFfTXNrICAgICAgICAgU1lTX0dQRF9NRlBMX1BEMU1GUF9Nc2sgICAgICAgIC8qPCEgU0MyX0RBVCAgICAgICAgIFBEMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9EQVRfUEE5X01zayAgICAgICAgIFNZU19HUEFfTUZQSF9QQTlNRlBfTXNrICAgICAgICAvKjwhIFNDMl9EQVQgICAgICAgICBQQTkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfREFUX1BBMTRfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEExNE1GUF9Nc2sgICAgICAgLyo8ISBTQzJfREFUICAgICAgICAgUEExNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX0RBVF9QQTdfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9Nc2sgICAgICAgIC8qPCEgU0MyX0RBVCAgICAgICAgIFBBNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9QV1JfUEQzX01zayAgICAgICAgIFNZU19HUERfTUZQTF9QRDNNRlBfTXNrICAgICAgICAvKjwhIFNDMl9QV1IgICAgICAgICBQRDMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfUFdSX1BBMTFfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9Nc2sgICAgICAgLyo8ISBTQzJfUFdSICAgICAgICAgUEExMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX1BXUl9QQTEyX01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTJNRlBfTXNrICAgICAgIC8qPCEgU0MyX1BXUiAgICAgICAgIFBBMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9QV1JfUEg4X01zayAgICAgICAgIFNZU19HUEhfTUZQSF9QSDhNRlBfTXNrICAgICAgICAvKjwhIFNDMl9QV1IgICAgICAgICBQSDggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfUFdSX1BDN19Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX01zayAgICAgICAgLyo8ISBTQzJfUFdSICAgICAgICAgUEM3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX1JTVF9QRDJfTXNrICAgICAgICAgU1lTX0dQRF9NRlBMX1BEMk1GUF9Nc2sgICAgICAgIC8qPCEgU0MyX1JTVCAgICAgICAgIFBEMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9SU1RfUEM2X01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfTXNrICAgICAgICAvKjwhIFNDMl9SU1QgICAgICAgICBQQzYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfUlNUX1BIOV9Nc2sgICAgICAgICBTWVNfR1BIX01GUEhfUEg5TUZQX01zayAgICAgICAgLyo8ISBTQzJfUlNUICAgICAgICAgUEg5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX1JTVF9QQTEwX01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfTXNrICAgICAgIC8qPCEgU0MyX1JTVCAgICAgICAgIFBBMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9SU1RfUEExM19Nc2sgICAgICAgIFNZU19HUEFfTUZQSF9QQTEzTUZQX01zayAgICAgICAvKjwhIFNDMl9SU1QgICAgICAgICBQQTEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfbkNEX1BIMTBfTXNrICAgICAgICBTWVNfR1BIX01GUEhfUEgxME1GUF9Nc2sgICAgICAgLyo8ISBTQzJfbkNEICAgICAgICAgUEgxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX25DRF9QQTVfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9Nc2sgICAgICAgIC8qPCEgU0MyX25DRCAgICAgICAgIFBBNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9uQ0RfUEMxM19Nc2sgICAgICAgIFNZU19HUENfTUZQSF9QQzEzTUZQX01zayAgICAgICAvKjwhIFNDMl9uQ0QgICAgICAgICBQQzEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfbkNEX1BEMTNfTXNrICAgICAgICBTWVNfR1BEX01GUEhfUEQxM01GUF9Nc2sgICAgICAgLyo8ISBTQzJfbkNEICAgICAgICAgUEQxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0QwX0NMS19QRTZfTXNrICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNk1GUF9Nc2sgICAgICAgIC8qPCEgU0QwX0NMSyAgICAgICAgIFBFNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNEMF9DTEtfUEIxX01zayAgICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfTXNrICAgICAgICAvKjwhIFNEMF9DTEsgICAgICAgICBQQjEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTRDBfQ01EX1BCMF9Nc2sgICAgICAgICBTWVNfR1BCX01GUExfUEIwTUZQX01zayAgICAgICAgLyo8ISBTRDBfQ01EICAgICAgICAgUEIwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0QwX0NNRF9QRTdfTXNrICAgICAgICAgU1lTX0dQRV9NRlBMX1BFN01GUF9Nc2sgICAgICAgIC8qPCEgU0QwX0NNRCAgICAgICAgIFBFNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNEMF9EQVQwX1BCMl9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfTXNrICAgICAgICAvKjwhIFNEMF9EQVQwICAgICAgICBQQjIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTRDBfREFUMF9QRTJfTXNrICAgICAgICBTWVNfR1BFX01GUExfUEUyTUZQX01zayAgICAgICAgLyo8ISBTRDBfREFUMCAgICAgICAgUEUyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0QwX0RBVDFfUEUzX01zayAgICAgICAgU1lTX0dQRV9NRlBMX1BFM01GUF9Nc2sgICAgICAgIC8qPCEgU0QwX0RBVDEgICAgICAgIFBFMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNEMF9EQVQxX1BCM19Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfTXNrICAgICAgICAvKjwhIFNEMF9EQVQxICAgICAgICBQQjMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTRDBfREFUMl9QQjRfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX01zayAgICAgICAgLyo8ISBTRDBfREFUMiAgICAgICAgUEI0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0QwX0RBVDJfUEU0X01zayAgICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9Nc2sgICAgICAgIC8qPCEgU0QwX0RBVDIgICAgICAgIFBFNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNEMF9EQVQzX1BFNV9Nc2sgICAgICAgIFNZU19HUEVfTUZQTF9QRTVNRlBfTXNrICAgICAgICAvKjwhIFNEMF9EQVQzICAgICAgICBQRTUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTRDBfREFUM19QQjVfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX01zayAgICAgICAgLyo8ISBTRDBfREFUMyAgICAgICAgUEI1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0QwX25DRF9QQjEyX01zayAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfTXNrICAgICAgIC8qPCEgU0QwX25DRCAgICAgICAgIFBCMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNEMF9uQ0RfUEQxM19Nc2sgICAgICAgIFNZU19HUERfTUZQSF9QRDEzTUZQX01zayAgICAgICAvKjwhIFNEMF9uQ0QgICAgICAgICBQRDEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9DTEtfUEYyX01zayAgICAgICBTWVNfR1BGX01GUExfUEYyTUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9DTEsgICAgICAgUEYyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUVNQSTBfQ0xLX1BIOF9Nc2sgICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9Nc2sgICAgICAgIC8qPCEgUVNQSTBfQ0xLICAgICAgIFBIOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX0NMS19QQTJfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTJNRlBfTXNrICAgICAgICAvKjwhIFFTUEkwX0NMSyAgICAgICBQQTIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9DTEtfUEMyX01zayAgICAgICBTWVNfR1BDX01GUExfUEMyTUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9DTEsgICAgICAgUEMyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUVNQSTBfTUlTTzBfUEMxX01zayAgICAgU1lTX0dQQ19NRlBMX1BDMU1GUF9Nc2sgICAgICAgIC8qPCEgUVNQSTBfTUlTTzAgICAgIFBDMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX01JU08wX1BFMV9Nc2sgICAgIFNZU19HUEVfTUZQTF9QRTFNRlBfTXNrICAgICAgICAvKjwhIFFTUEkwX01JU08wICAgICBQRTEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9NSVNPMF9QQTFfTXNrICAgICBTWVNfR1BBX01GUExfUEExTUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9NSVNPMCAgICAgUEExICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUVNQSTBfTUlTTzFfUEM1X01zayAgICAgU1lTX0dQQ19NRlBMX1BDNU1GUF9Nc2sgICAgICAgIC8qPCEgUVNQSTBfTUlTTzEgICAgIFBDNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX01JU08xX1BIMTBfTXNrICAgIFNZU19HUEhfTUZQSF9QSDEwTUZQX01zayAgICAgICAvKjwhIFFTUEkwX01JU08xICAgICBQSDEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9NSVNPMV9QQTVfTXNrICAgICBTWVNfR1BBX01GUExfUEE1TUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9NSVNPMSAgICAgUEE1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUVNQSTBfTU9TSTBfUEMwX01zayAgICAgU1lTX0dQQ19NRlBMX1BDME1GUF9Nc2sgICAgICAgIC8qPCEgUVNQSTBfTU9TSTAgICAgIFBDMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX01PU0kwX1BFMF9Nc2sgICAgIFNZU19HUEVfTUZQTF9QRTBNRlBfTXNrICAgICAgICAvKjwhIFFTUEkwX01PU0kwICAgICBQRTAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9NT1NJMF9QQTBfTXNrICAgICBTWVNfR1BBX01GUExfUEEwTUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9NT1NJMCAgICAgUEEwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUVNQSTBfTU9TSTFfUEE0X01zayAgICAgU1lTX0dQQV9NRlBMX1BBNE1GUF9Nc2sgICAgICAgIC8qPCEgUVNQSTBfTU9TSTEgICAgIFBBNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX01PU0kxX1BIMTFfTXNrICAgIFNZU19HUEhfTUZQSF9QSDExTUZQX01zayAgICAgICAvKjwhIFFTUEkwX01PU0kxICAgICBQSDExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9NT1NJMV9QQzRfTXNrICAgICBTWVNfR1BDX01GUExfUEM0TUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9NT1NJMSAgICAgUEM0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUVNQSTBfU1NfUEg5X01zayAgICAgICAgU1lTX0dQSF9NRlBIX1BIOU1GUF9Nc2sgICAgICAgIC8qPCEgUVNQSTBfU1MgICAgICAgIFBIOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX1NTX1BBM19Nc2sgICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfTXNrICAgICAgICAvKjwhIFFTUEkwX1NTICAgICAgICBQQTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9TU19QQzNfTXNrICAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9TUyAgICAgICAgUEMzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9DTEtfUEQyX01zayAgICAgICAgU1lTX0dQRF9NRlBMX1BEMk1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMF9DTEsgICAgICAgIFBEMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfQ0xLX1BGOF9Nc2sgICAgICAgIFNZU19HUEZfTUZQSF9QRjhNRlBfTXNrICAgICAgICAvKjwhIFNQSTBfQ0xLICAgICAgICBQRjggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX0NMS19QQTJfTXNrICAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX01zayAgICAgICAgLyo8ISBTUEkwX0NMSyAgICAgICAgUEEyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9DTEtfUEIxNF9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfTXNrICAgICAgIC8qPCEgU1BJMF9DTEsgICAgICAgIFBCMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfSTJTTUNMS19QRDEzX01zayAgIFNZU19HUERfTUZQSF9QRDEzTUZQX01zayAgICAgICAvKjwhIFNQSTBfSTJTTUNMSyAgICBQRDEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX0kyU01DTEtfUEE0X01zayAgICBTWVNfR1BBX01GUExfUEE0TUZQX01zayAgICAgICAgLyo8ISBTUEkwX0kyU01DTEsgICAgUEE0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9JMlNNQ0xLX1BCMTFfTXNrICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfTXNrICAgICAgIC8qPCEgU1BJMF9JMlNNQ0xLICAgIFBCMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfSTJTTUNMS19QQjBfTXNrICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfTXNrICAgICAgICAvKjwhIFNQSTBfSTJTTUNMSyAgICBQQjAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX0kyU01DTEtfUEQxNF9Nc2sgICBTWVNfR1BEX01GUEhfUEQxNE1GUF9Nc2sgICAgICAgLyo8ISBTUEkwX0kyU01DTEsgICAgUEQxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9JMlNNQ0xLX1BGMTBfTXNrICAgU1lTX0dQRl9NRlBIX1BGMTBNRlBfTXNrICAgICAgIC8qPCEgU1BJMF9JMlNNQ0xLICAgIFBGMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfTUlTT19QRjdfTXNrICAgICAgIFNZU19HUEZfTUZQTF9QRjdNRlBfTXNrICAgICAgICAvKjwhIFNQSTBfTUlTTyAgICAgICBQRjcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX01JU09fUEIxM19Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgLyo8ISBTUEkwX01JU08gICAgICAgUEIxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9NSVNPX1BBMV9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMF9NSVNPICAgICAgIFBBMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfTUlTT19QRDFfTXNrICAgICAgIFNZU19HUERfTUZQTF9QRDFNRlBfTXNrICAgICAgICAvKjwhIFNQSTBfTUlTTyAgICAgICBQRDEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX01PU0lfUEEwX01zayAgICAgICBTWVNfR1BBX01GUExfUEEwTUZQX01zayAgICAgICAgLyo8ISBTUEkwX01PU0kgICAgICAgUEEwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9NT1NJX1BCMTJfTXNrICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfTXNrICAgICAgIC8qPCEgU1BJMF9NT1NJICAgICAgIFBCMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfTU9TSV9QRDBfTXNrICAgICAgIFNZU19HUERfTUZQTF9QRDBNRlBfTXNrICAgICAgICAvKjwhIFNQSTBfTU9TSSAgICAgICBQRDAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX01PU0lfUEY2X01zayAgICAgICBTWVNfR1BGX01GUExfUEY2TUZQX01zayAgICAgICAgLyo8ISBTUEkwX01PU0kgICAgICAgUEY2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9TU19QQjE1X01zayAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfTXNrICAgICAgIC8qPCEgU1BJMF9TUyAgICAgICAgIFBCMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfU1NfUEEzX01zayAgICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfTXNrICAgICAgICAvKjwhIFNQSTBfU1MgICAgICAgICBQQTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX1NTX1BEM19Nc2sgICAgICAgICBTWVNfR1BEX01GUExfUEQzTUZQX01zayAgICAgICAgLyo8ISBTUEkwX1NTICAgICAgICAgUEQzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9TU19QRjlfTXNrICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOU1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMF9TUyAgICAgICAgIFBGOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfQ0xLX1BCM19Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfQ0xLICAgICAgICBQQjMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX0NMS19QSDZfTXNrICAgICAgICBTWVNfR1BIX01GUExfUEg2TUZQX01zayAgICAgICAgLyo8ISBTUEkxX0NMSyAgICAgICAgUEg2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9DTEtfUEg4X01zayAgICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9DTEsgICAgICAgIFBIOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfQ0xLX1BDMV9Nc2sgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfQ0xLICAgICAgICBQQzEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX0NMS19QRDVfTXNrICAgICAgICBTWVNfR1BEX01GUExfUEQ1TUZQX01zayAgICAgICAgLyo8ISBTUEkxX0NMSyAgICAgICAgUEQ1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9DTEtfUEE3X01zayAgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9DTEsgICAgICAgIFBBNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfSTJTTUNMS19QQjFfTXNrICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfSTJTTUNMSyAgICBQQjEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX0kyU01DTEtfUEgxMF9Nc2sgICBTWVNfR1BIX01GUEhfUEgxME1GUF9Nc2sgICAgICAgLyo8ISBTUEkxX0kyU01DTEsgICAgUEgxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9JMlNNQ0xLX1BDNF9Nc2sgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9JMlNNQ0xLICAgIFBDNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfSTJTTUNMS19QRDEzX01zayAgIFNZU19HUERfTUZQSF9QRDEzTUZQX01zayAgICAgICAvKjwhIFNQSTFfSTJTTUNMSyAgICBQRDEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX0kyU01DTEtfUEE1X01zayAgICBTWVNfR1BBX01GUExfUEE1TUZQX01zayAgICAgICAgLyo8ISBTUEkxX0kyU01DTEsgICAgUEE1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9NSVNPX1BEN19Nc2sgICAgICAgU1lTX0dQRF9NRlBMX1BEN01GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9NSVNPICAgICAgIFBENyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfTUlTT19QQzdfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfTUlTTyAgICAgICBQQzcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX01JU09fUEI1X01zayAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX01zayAgICAgICAgLyo8ISBTUEkxX01JU08gICAgICAgUEI1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9NSVNPX1BFMV9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFMU1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9NSVNPICAgICAgIFBFMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfTUlTT19QSDRfTXNrICAgICAgIFNZU19HUEhfTUZQTF9QSDRNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfTUlTTyAgICAgICBQSDQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX01JU09fUEMzX01zayAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX01zayAgICAgICAgLyo8ISBTUEkxX01JU08gICAgICAgUEMzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9NT1NJX1BENl9Nc2sgICAgICAgU1lTX0dQRF9NRlBMX1BENk1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9NT1NJICAgICAgIFBENiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfTU9TSV9QRTBfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTBNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfTU9TSSAgICAgICBQRTAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX01PU0lfUEI0X01zayAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX01zayAgICAgICAgLyo8ISBTUEkxX01PU0kgICAgICAgUEI0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9NT1NJX1BDNl9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9NT1NJICAgICAgIFBDNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfTU9TSV9QQzJfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfTU9TSSAgICAgICBQQzIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX01PU0lfUEg1X01zayAgICAgICBTWVNfR1BIX01GUExfUEg1TUZQX01zayAgICAgICAgLyo8ISBTUEkxX01PU0kgICAgICAgUEg1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9TU19QQjJfTXNrICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9TUyAgICAgICAgIFBCMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfU1NfUEg5X01zayAgICAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfU1MgICAgICAgICBQSDkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX1NTX1BENF9Nc2sgICAgICAgICBTWVNfR1BEX01GUExfUEQ0TUZQX01zayAgICAgICAgLyo8ISBTUEkxX1NTICAgICAgICAgUEQ0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9TU19QQzBfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDME1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9TUyAgICAgICAgIFBDMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfU1NfUEE2X01zayAgICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfU1MgICAgICAgICBQQTYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX1NTX1BIN19Nc2sgICAgICAgICBTWVNfR1BIX01GUExfUEg3TUZQX01zayAgICAgICAgLyo8ISBTUEkxX1NTICAgICAgICAgUEg3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMl9DTEtfUEU4X01zayAgICAgICAgU1lTX0dQRV9NRlBIX1BFOE1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMl9DTEsgICAgICAgIFBFOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTJfQ0xLX1BHM19Nc2sgICAgICAgIFNZU19HUEdfTUZQTF9QRzNNRlBfTXNrICAgICAgICAvKjwhIFNQSTJfQ0xLICAgICAgICBQRzMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkyX0NMS19QQTEwX01zayAgICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9Nc2sgICAgICAgLyo8ISBTUEkyX0NMSyAgICAgICAgUEExMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMl9DTEtfUEExM19Nc2sgICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfTXNrICAgICAgIC8qPCEgU1BJMl9DTEsgICAgICAgIFBBMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTJfSTJTTUNMS19QQzEzX01zayAgIFNZU19HUENfTUZQSF9QQzEzTUZQX01zayAgICAgICAvKjwhIFNQSTJfSTJTTUNMSyAgICBQQzEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkyX0kyU01DTEtfUEUxMl9Nc2sgICBTWVNfR1BFX01GUEhfUEUxMk1GUF9Nc2sgICAgICAgLyo8ISBTUEkyX0kyU01DTEsgICAgUEUxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMl9NSVNPX1BHNF9Nc2sgICAgICAgU1lTX0dQR19NRlBMX1BHNE1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMl9NSVNPICAgICAgIFBHNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTJfTUlTT19QQTlfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTlNRlBfTXNrICAgICAgICAvKjwhIFNQSTJfTUlTTyAgICAgICBQQTkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkyX01JU09fUEExNF9Nc2sgICAgICBTWVNfR1BBX01GUEhfUEExNE1GUF9Nc2sgICAgICAgLyo8ISBTUEkyX01JU08gICAgICAgUEExNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMl9NSVNPX1BFOV9Nc2sgICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMl9NSVNPICAgICAgIFBFOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTJfTU9TSV9QRTEwX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX01zayAgICAgICAvKjwhIFNQSTJfTU9TSSAgICAgICBQRTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkyX01PU0lfUEExNV9Nc2sgICAgICBTWVNfR1BBX01GUEhfUEExNU1GUF9Nc2sgICAgICAgLyo8ISBTUEkyX01PU0kgICAgICAgUEExNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMl9NT1NJX1BBOF9Nc2sgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMl9NT1NJICAgICAgIFBBOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTJfTU9TSV9QRjExX01zayAgICAgIFNZU19HUEZfTUZQSF9QRjExTUZQX01zayAgICAgICAvKjwhIFNQSTJfTU9TSSAgICAgICBQRjExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkyX1NTX1BHMl9Nc2sgICAgICAgICBTWVNfR1BHX01GUExfUEcyTUZQX01zayAgICAgICAgLyo8ISBTUEkyX1NTICAgICAgICAgUEcyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMl9TU19QRTExX01zayAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfTXNrICAgICAgIC8qPCEgU1BJMl9TUyAgICAgICAgIFBFMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTJfU1NfUEExMV9Nc2sgICAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX01zayAgICAgICAvKjwhIFNQSTJfU1MgICAgICAgICBQQTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkyX1NTX1BBMTJfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9Nc2sgICAgICAgLyo8ISBTUEkyX1NTICAgICAgICAgUEExMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJM19DTEtfUEIxMV9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfTXNrICAgICAgIC8qPCEgU1BJM19DTEsgICAgICAgIFBCMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTNfQ0xLX1BFNF9Nc2sgICAgICAgIFNZU19HUEVfTUZQTF9QRTRNRlBfTXNrICAgICAgICAvKjwhIFNQSTNfQ0xLICAgICAgICBQRTQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkzX0NMS19QQzEwX01zayAgICAgICBTWVNfR1BDX01GUEhfUEMxME1GUF9Nc2sgICAgICAgLyo8ISBTUEkzX0NMSyAgICAgICAgUEMxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJM19JMlNNQ0xLX1BFNl9Nc2sgICAgU1lTX0dQRV9NRlBMX1BFNk1GUF9Nc2sgICAgICAgIC8qPCEgU1BJM19JMlNNQ0xLICAgIFBFNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTNfSTJTTUNMS19QQjFfTXNrICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfTXNrICAgICAgICAvKjwhIFNQSTNfSTJTTUNMSyAgICBQQjEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkzX0kyU01DTEtfUEQxNF9Nc2sgICBTWVNfR1BEX01GUEhfUEQxNE1GUF9Nc2sgICAgICAgLyo8ISBTUEkzX0kyU01DTEsgICAgUEQxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJM19NSVNPX1BDMTJfTXNrICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfTXNrICAgICAgIC8qPCEgU1BJM19NSVNPICAgICAgIFBDMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTNfTUlTT19QQjlfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjlNRlBfTXNrICAgICAgICAvKjwhIFNQSTNfTUlTTyAgICAgICBQQjkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkzX01JU09fUEUzX01zayAgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX01zayAgICAgICAgLyo8ISBTUEkzX01JU08gICAgICAgUEUzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJM19NT1NJX1BCOF9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9Nc2sgICAgICAgIC8qPCEgU1BJM19NT1NJICAgICAgIFBCOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTNfTU9TSV9QRTJfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTJNRlBfTXNrICAgICAgICAvKjwhIFNQSTNfTU9TSSAgICAgICBQRTIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkzX01PU0lfUEMxMV9Nc2sgICAgICBTWVNfR1BDX01GUEhfUEMxMU1GUF9Nc2sgICAgICAgLyo8ISBTUEkzX01PU0kgICAgICAgUEMxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJM19TU19QRTVfTXNrICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNU1GUF9Nc2sgICAgICAgIC8qPCEgU1BJM19TUyAgICAgICAgIFBFNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTNfU1NfUEIxMF9Nc2sgICAgICAgIFNZU19HUEJfTUZQSF9QQjEwTUZQX01zayAgICAgICAvKjwhIFNQSTNfU1MgICAgICAgICBQQjEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkzX1NTX1BDOV9Nc2sgICAgICAgICBTWVNfR1BDX01GUEhfUEM5TUZQX01zayAgICAgICAgLyo8ISBTUEkzX1NTICAgICAgICAgUEM5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVEFNUEVSMF9QRjZfTXNrICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNk1GUF9Nc2sgICAgICAgIC8qPCEgVEFNUEVSMCAgICAgICAgIFBGNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRBTVBFUjFfUEY3X01zayAgICAgICAgIFNZU19HUEZfTUZQTF9QRjdNRlBfTXNrICAgICAgICAvKjwhIFRBTVBFUjEgICAgICAgICBQRjcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUQU1QRVIyX1BGOF9Nc2sgICAgICAgICBTWVNfR1BGX01GUEhfUEY4TUZQX01zayAgICAgICAgLyo8ISBUQU1QRVIyICAgICAgICAgUEY4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVEFNUEVSM19QRjlfTXNrICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOU1GUF9Nc2sgICAgICAgIC8qPCEgVEFNUEVSMyAgICAgICAgIFBGOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRBTVBFUjRfUEYxMF9Nc2sgICAgICAgIFNZU19HUEZfTUZQSF9QRjEwTUZQX01zayAgICAgICAvKjwhIFRBTVBFUjQgICAgICAgICBQRjEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUQU1QRVI1X1BGMTFfTXNrICAgICAgICBTWVNfR1BGX01GUEhfUEYxMU1GUF9Nc2sgICAgICAgLyo8ISBUQU1QRVI1ICAgICAgICAgUEYxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0wX1BDN19Nc2sgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9Nc2sgICAgICAgIC8qPCEgVE0wICAgICAgICAgICAgIFBDNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNMF9QQjVfTXNrICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfTXNrICAgICAgICAvKjwhIFRNMCAgICAgICAgICAgICBQQjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTBfUEcyX01zayAgICAgICAgICAgICBTWVNfR1BHX01GUExfUEcyTUZQX01zayAgICAgICAgLyo8ISBUTTAgICAgICAgICAgICAgUEcyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0wX0VYVF9QQTExX01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTFNRlBfTXNrICAgICAgIC8qPCEgVE0wX0VYVCAgICAgICAgIFBBMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNMF9FWFRfUEIxNV9Nc2sgICAgICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX01zayAgICAgICAvKjwhIFRNMF9FWFQgICAgICAgICBQQjE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTFfUEczX01zayAgICAgICAgICAgICBTWVNfR1BHX01GUExfUEczTUZQX01zayAgICAgICAgLyo8ISBUTTEgICAgICAgICAgICAgUEczICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0xX1BCNF9Nc2sgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9Nc2sgICAgICAgIC8qPCEgVE0xICAgICAgICAgICAgIFBCNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNMV9QQzZfTXNrICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfTXNrICAgICAgICAvKjwhIFRNMSAgICAgICAgICAgICBQQzYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTFfRVhUX1BBMTBfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9Nc2sgICAgICAgLyo8ISBUTTFfRVhUICAgICAgICAgUEExMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0xX0VYVF9QQjE0X01zayAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfTXNrICAgICAgIC8qPCEgVE0xX0VYVCAgICAgICAgIFBCMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNMl9QRzRfTXNrICAgICAgICAgICAgIFNZU19HUEdfTUZQTF9QRzRNRlBfTXNrICAgICAgICAvKjwhIFRNMiAgICAgICAgICAgICBQRzQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTJfUEQwX01zayAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQwTUZQX01zayAgICAgICAgLyo8ISBUTTIgICAgICAgICAgICAgUEQwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0yX1BCM19Nc2sgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9Nc2sgICAgICAgIC8qPCEgVE0yICAgICAgICAgICAgIFBCMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNMl9QQTdfTXNrICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTdNRlBfTXNrICAgICAgICAvKjwhIFRNMiAgICAgICAgICAgICBQQTcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTJfRVhUX1BCMTNfTXNrICAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgLyo8ISBUTTJfRVhUICAgICAgICAgUEIxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0yX0VYVF9QQTlfTXNrICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9Nc2sgICAgICAgIC8qPCEgVE0yX0VYVCAgICAgICAgIFBBOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNM19QQTZfTXNrICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfTXNrICAgICAgICAvKjwhIFRNMyAgICAgICAgICAgICBQQTYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTNfUEYxMV9Nc2sgICAgICAgICAgICBTWVNfR1BGX01GUEhfUEYxMU1GUF9Nc2sgICAgICAgLyo8ISBUTTMgICAgICAgICAgICAgUEYxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0zX1BCMl9Nc2sgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9Nc2sgICAgICAgIC8qPCEgVE0zICAgICAgICAgICAgIFBCMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNM19FWFRfUEE4X01zayAgICAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfTXNrICAgICAgICAvKjwhIFRNM19FWFQgICAgICAgICBQQTggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTNfRVhUX1BCMTJfTXNrICAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9Nc2sgICAgICAgLyo8ISBUTTNfRVhUICAgICAgICAgUEIxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVFJBQ0VfQ0xLX1BFMTJfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFOE1GUF9Nc2sgICAgICAgIC8qPCEgVFJBQ0VfQ0xLICAgICAgIFBFMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRSQUNFX0RBVEEwX1BFMTFfTXNrICAgIFNZU19HUEVfTUZQSF9QRTlNRlBfTXNrICAgICAgICAvKjwhIFRSQUNFX0RBVEEwICAgICBQRTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUUkFDRV9EQVRBMV9QRTEwX01zayAgICBTWVNfR1BFX01GUEhfUEUxME1GUF9Nc2sgICAgICAgLyo8ISBUUkFDRV9EQVRBMSAgICAgUEUxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVFJBQ0VfREFUQTJfUEU5X01zayAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfTXNrICAgICAgIC8qPCEgVFJBQ0VfREFUQTIgICAgIFBFOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRSQUNFX0RBVEEzX1BFOF9Nc2sgICAgIFNZU19HUEVfTUZQSF9QRTEyTUZQX01zayAgICAgICAvKjwhIFRSQUNFX0RBVEEzICAgICBQRTggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9SWERfUEQyX01zayAgICAgICBTWVNfR1BEX01GUExfUEQyTUZQX01zayAgICAgICAgLyo8ISBVQVJUMF9SWEQgICAgICAgUEQyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BCOF9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDBfUlhEICAgICAgIFBCOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX1JYRF9QQTBfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTBNRlBfTXNrICAgICAgICAvKjwhIFVBUlQwX1JYRCAgICAgICBQQTAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9SWERfUEE2X01zayAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX01zayAgICAgICAgLyo8ISBVQVJUMF9SWEQgICAgICAgUEE2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BCMTJfTXNrICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfTXNrICAgICAgIC8qPCEgVUFSVDBfUlhEICAgICAgIFBCMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX1JYRF9QQTE1X01zayAgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX01zayAgICAgICAvKjwhIFVBUlQwX1JYRCAgICAgICBQQTE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9SWERfUEMxMV9Nc2sgICAgICBTWVNfR1BDX01GUEhfUEMxMU1GUF9Nc2sgICAgICAgLyo8ISBVQVJUMF9SWEQgICAgICAgUEMxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BIMTFfTXNrICAgICAgU1lTX0dQSF9NRlBIX1BIMTFNRlBfTXNrICAgICAgIC8qPCEgVUFSVDBfUlhEICAgICAgIFBIMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX1JYRF9QRjJfTXNrICAgICAgIFNZU19HUEZfTUZQTF9QRjJNRlBfTXNrICAgICAgICAvKjwhIFVBUlQwX1JYRCAgICAgICBQRjIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9UWERfUEE3X01zayAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX01zayAgICAgICAgLyo8ISBVQVJUMF9UWEQgICAgICAgUEE3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfVFhEX1BEM19Nc2sgICAgICAgU1lTX0dQRF9NRlBMX1BEM01GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDBfVFhEICAgICAgIFBEMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX1RYRF9QRjNfTXNrICAgICAgIFNZU19HUEZfTUZQTF9QRjNNRlBfTXNrICAgICAgICAvKjwhIFVBUlQwX1RYRCAgICAgICBQRjMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9UWERfUEMxMl9Nc2sgICAgICBTWVNfR1BDX01GUEhfUEMxMk1GUF9Nc2sgICAgICAgLyo8ISBVQVJUMF9UWEQgICAgICAgUEMxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfVFhEX1BIMTBfTXNrICAgICAgU1lTX0dQSF9NRlBIX1BIMTBNRlBfTXNrICAgICAgIC8qPCEgVUFSVDBfVFhEICAgICAgIFBIMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX1RYRF9QQTFfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTFNRlBfTXNrICAgICAgICAvKjwhIFVBUlQwX1RYRCAgICAgICBQQTEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9UWERfUEI5X01zayAgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX01zayAgICAgICAgLyo8ISBVQVJUMF9UWEQgICAgICAgUEI5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfVFhEX1BCMTNfTXNrICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfTXNrICAgICAgIC8qPCEgVUFSVDBfVFhEICAgICAgIFBCMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX1RYRF9QQTE0X01zayAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX01zayAgICAgICAvKjwhIFVBUlQwX1RYRCAgICAgICBQQTE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9uQ1RTX1BBNV9Nc2sgICAgICBTWVNfR1BBX01GUExfUEE1TUZQX01zayAgICAgICAgLyo8ISBVQVJUMF9uQ1RTICAgICAgUEE1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfbkNUU19QQjExX01zayAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfTXNrICAgICAgIC8qPCEgVUFSVDBfbkNUUyAgICAgIFBCMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX25DVFNfUEIxNV9Nc2sgICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX01zayAgICAgICAvKjwhIFVBUlQwX25DVFMgICAgICBQQjE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9uQ1RTX1BDN19Nc2sgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX01zayAgICAgICAgLyo8ISBVQVJUMF9uQ1RTICAgICAgUEM3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfblJUU19QQjE0X01zayAgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfTXNrICAgICAgIC8qPCEgVUFSVDBfblJUUyAgICAgIFBCMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX25SVFNfUEIxMF9Nc2sgICAgIFNZU19HUEJfTUZQSF9QQjEwTUZQX01zayAgICAgICAvKjwhIFVBUlQwX25SVFMgICAgICBQQjEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9uUlRTX1BDNl9Nc2sgICAgICBTWVNfR1BDX01GUExfUEM2TUZQX01zayAgICAgICAgLyo8ISBVQVJUMF9uUlRTICAgICAgUEM2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfblJUU19QQTRfTXNrICAgICAgU1lTX0dQQV9NRlBMX1BBNE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDBfblJUUyAgICAgIFBBNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX1JYRF9QRjFfTXNrICAgICAgIFNZU19HUEZfTUZQTF9QRjFNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX1JYRCAgICAgICBQRjEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9SWERfUEE4X01zayAgICAgICBTWVNfR1BBX01GUEhfUEE4TUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9SWEQgICAgICAgUEE4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BBMl9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBMk1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDFfUlhEICAgICAgIFBBMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX1JYRF9QQjJfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX1JYRCAgICAgICBQQjIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9SWERfUEI2X01zayAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9SWEQgICAgICAgUEI2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BENl9Nc2sgICAgICAgU1lTX0dQRF9NRlBMX1BENk1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDFfUlhEICAgICAgIFBENiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX1JYRF9QRDEwX01zayAgICAgIFNZU19HUERfTUZQSF9QRDEwTUZQX01zayAgICAgICAvKjwhIFVBUlQxX1JYRCAgICAgICBQRDEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9SWERfUEg5X01zayAgICAgICBTWVNfR1BIX01GUEhfUEg5TUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9SWEQgICAgICAgUEg5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BDOF9Nc2sgICAgICAgU1lTX0dQQ19NRlBIX1BDOE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDFfUlhEICAgICAgIFBDOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX1RYRF9QQjNfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX1RYRCAgICAgICBQQjMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9UWERfUEEzX01zayAgICAgICBTWVNfR1BBX01GUExfUEEzTUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9UWEQgICAgICAgUEEzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfVFhEX1BFMTNfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTNNRlBfTXNrICAgICAgIC8qPCEgVUFSVDFfVFhEICAgICAgIFBFMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX1RYRF9QQTlfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTlNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX1RYRCAgICAgICBQQTkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9UWERfUEYwX01zayAgICAgICBTWVNfR1BGX01GUExfUEYwTUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9UWEQgICAgICAgUEYwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfVFhEX1BEMTFfTXNrICAgICAgU1lTX0dQRF9NRlBIX1BEMTFNRlBfTXNrICAgICAgIC8qPCEgVUFSVDFfVFhEICAgICAgIFBEMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX1RYRF9QRDdfTXNrICAgICAgIFNZU19HUERfTUZQTF9QRDdNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX1RYRCAgICAgICBQRDcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9UWERfUEI3X01zayAgICAgICBTWVNfR1BCX01GUExfUEI3TUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9UWEQgICAgICAgUEI3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfVFhEX1BIOF9Nc2sgICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDFfVFhEICAgICAgIFBIOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX25DVFNfUEUxMV9Nc2sgICAgIFNZU19HUEVfTUZQSF9QRTExTUZQX01zayAgICAgICAvKjwhIFVBUlQxX25DVFMgICAgICBQRTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9uQ1RTX1BCOV9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9uQ1RTICAgICAgUEI5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfbkNUU19QQTFfTXNrICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDFfbkNUUyAgICAgIFBBMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX25SVFNfUEEwX01zayAgICAgIFNZU19HUEFfTUZQTF9QQTBNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX25SVFMgICAgICBQQTAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9uUlRTX1BFMTJfTXNrICAgICBTWVNfR1BFX01GUEhfUEUxMk1GUF9Nc2sgICAgICAgLyo8ISBVQVJUMV9uUlRTICAgICAgUEUxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfblJUU19QQjhfTXNrICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDFfblJUUyAgICAgIFBCOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX1JYRF9QQjBfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfTXNrICAgICAgICAvKjwhIFVBUlQyX1JYRCAgICAgICBQQjAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9SWERfUEUxNV9Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxNU1GUF9Nc2sgICAgICAgLyo8ISBVQVJUMl9SWEQgICAgICAgUEUxNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfUlhEX1BEMTJfTXNrICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfTXNrICAgICAgIC8qPCEgVUFSVDJfUlhEICAgICAgIFBEMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX1JYRF9QRjVfTXNrICAgICAgIFNZU19HUEZfTUZQTF9QRjVNRlBfTXNrICAgICAgICAvKjwhIFVBUlQyX1JYRCAgICAgICBQRjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9SWERfUEMwX01zayAgICAgICBTWVNfR1BDX01GUExfUEMwTUZQX01zayAgICAgICAgLyo8ISBVQVJUMl9SWEQgICAgICAgUEMwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfUlhEX1BDNF9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDJfUlhEICAgICAgIFBDNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX1JYRF9QRTlfTXNrICAgICAgIFNZU19HUEVfTUZQSF9QRTlNRlBfTXNrICAgICAgICAvKjwhIFVBUlQyX1JYRCAgICAgICBQRTkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9UWERfUEU4X01zayAgICAgICBTWVNfR1BFX01GUEhfUEU4TUZQX01zayAgICAgICAgLyo8ISBVQVJUMl9UWEQgICAgICAgUEU4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfVFhEX1BGNF9Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGNE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDJfVFhEICAgICAgIFBGNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX1RYRF9QQzEzX01zayAgICAgIFNZU19HUENfTUZQSF9QQzEzTUZQX01zayAgICAgICAvKjwhIFVBUlQyX1RYRCAgICAgICBQQzEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9UWERfUEMxX01zayAgICAgICBTWVNfR1BDX01GUExfUEMxTUZQX01zayAgICAgICAgLyo8ISBVQVJUMl9UWEQgICAgICAgUEMxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfVFhEX1BFMTRfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTRNRlBfTXNrICAgICAgIC8qPCEgVUFSVDJfVFhEICAgICAgIFBFMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX1RYRF9QQzVfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzVNRlBfTXNrICAgICAgICAvKjwhIFVBUlQyX1RYRCAgICAgICBQQzUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9UWERfUEIxX01zayAgICAgICBTWVNfR1BCX01GUExfUEIxTUZQX01zayAgICAgICAgLyo8ISBVQVJUMl9UWEQgICAgICAgUEIxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfbkNUU19QRjVfTXNrICAgICAgU1lTX0dQRl9NRlBMX1BGNU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDJfbkNUUyAgICAgIFBGNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX25DVFNfUEQ5X01zayAgICAgIFNZU19HUERfTUZQSF9QRDlNRlBfTXNrICAgICAgICAvKjwhIFVBUlQyX25DVFMgICAgICBQRDkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9uQ1RTX1BDMl9Nc2sgICAgICBTWVNfR1BDX01GUExfUEMyTUZQX01zayAgICAgICAgLyo8ISBVQVJUMl9uQ1RTICAgICAgUEMyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfblJUU19QRjRfTXNrICAgICAgU1lTX0dQRl9NRlBMX1BGNE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDJfblJUUyAgICAgIFBGNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX25SVFNfUEQ4X01zayAgICAgIFNZU19HUERfTUZQSF9QRDhNRlBfTXNrICAgICAgICAvKjwhIFVBUlQyX25SVFMgICAgICBQRDggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9uUlRTX1BDM19Nc2sgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX01zayAgICAgICAgLyo8ISBVQVJUMl9uUlRTICAgICAgUEMzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDNfUlhEX1BEMF9Nc2sgICAgICAgU1lTX0dQRF9NRlBMX1BEME1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDNfUlhEICAgICAgIFBEMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQzX1JYRF9QRTExX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTExTUZQX01zayAgICAgICAvKjwhIFVBUlQzX1JYRCAgICAgICBQRTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUM19SWERfUEM5X01zayAgICAgICBTWVNfR1BDX01GUEhfUEM5TUZQX01zayAgICAgICAgLyo8ISBVQVJUM19SWEQgICAgICAgUEM5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDNfUlhEX1BFMF9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDNfUlhEICAgICAgIFBFMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQzX1JYRF9QQzJfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfTXNrICAgICAgICAvKjwhIFVBUlQzX1JYRCAgICAgICBQQzIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUM19SWERfUEIxNF9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9Nc2sgICAgICAgLyo8ISBVQVJUM19SWEQgICAgICAgUEIxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDNfVFhEX1BEMV9Nc2sgICAgICAgU1lTX0dQRF9NRlBMX1BEMU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDNfVFhEICAgICAgIFBEMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQzX1RYRF9QQzEwX01zayAgICAgIFNZU19HUENfTUZQSF9QQzEwTUZQX01zayAgICAgICAvKjwhIFVBUlQzX1RYRCAgICAgICBQQzEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUM19UWERfUEIxNV9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9Nc2sgICAgICAgLyo8ISBVQVJUM19UWEQgICAgICAgUEIxNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDNfVFhEX1BDM19Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDM01GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDNfVFhEICAgICAgIFBDMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQzX1RYRF9QRTFfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTFNRlBfTXNrICAgICAgICAvKjwhIFVBUlQzX1RYRCAgICAgICBQRTEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUM19UWERfUEUxMF9Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxME1GUF9Nc2sgICAgICAgLyo8ISBVQVJUM19UWEQgICAgICAgUEUxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDNfbkNUU19QQjEyX01zayAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfTXNrICAgICAgIC8qPCEgVUFSVDNfbkNUUyAgICAgIFBCMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQzX25DVFNfUEg5X01zayAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfTXNrICAgICAgICAvKjwhIFVBUlQzX25DVFMgICAgICBQSDkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUM19uQ1RTX1BEMl9Nc2sgICAgICBTWVNfR1BEX01GUExfUEQyTUZQX01zayAgICAgICAgLyo8ISBVQVJUM19uQ1RTICAgICAgUEQyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDNfblJUU19QQjEzX01zayAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfTXNrICAgICAgIC8qPCEgVUFSVDNfblJUUyAgICAgIFBCMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQzX25SVFNfUEg4X01zayAgICAgIFNZU19HUEhfTUZQSF9QSDhNRlBfTXNrICAgICAgICAvKjwhIFVBUlQzX25SVFMgICAgICBQSDggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUM19uUlRTX1BEM19Nc2sgICAgICBTWVNfR1BEX01GUExfUEQzTUZQX01zayAgICAgICAgLyo8ISBVQVJUM19uUlRTICAgICAgUEQzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDRfUlhEX1BBMTNfTXNrICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfTXNrICAgICAgIC8qPCEgVUFSVDRfUlhEICAgICAgIFBBMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ0X1JYRF9QQzZfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ0X1JYRCAgICAgICBQQzYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNF9SWERfUEM0X01zayAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX01zayAgICAgICAgLyo8ISBVQVJUNF9SWEQgICAgICAgUEM0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDRfUlhEX1BCMTBfTXNrICAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfTXNrICAgICAgIC8qPCEgVUFSVDRfUlhEICAgICAgIFBCMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ0X1JYRF9QSDExX01zayAgICAgIFNZU19HUEhfTUZQSF9QSDExTUZQX01zayAgICAgICAvKjwhIFVBUlQ0X1JYRCAgICAgICBQSDExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNF9SWERfUEEyX01zayAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX01zayAgICAgICAgLyo8ISBVQVJUNF9SWEQgICAgICAgUEEyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDRfUlhEX1BGNl9Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGNk1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDRfUlhEICAgICAgIFBGNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ0X1RYRF9QSDEwX01zayAgICAgIFNZU19HUEhfTUZQSF9QSDEwTUZQX01zayAgICAgICAvKjwhIFVBUlQ0X1RYRCAgICAgICBQSDEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNF9UWERfUEEzX01zayAgICAgICBTWVNfR1BBX01GUExfUEEzTUZQX01zayAgICAgICAgLyo8ISBVQVJUNF9UWEQgICAgICAgUEEzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDRfVFhEX1BBMTJfTXNrICAgICAgU1lTX0dQQV9NRlBIX1BBMTJNRlBfTXNrICAgICAgIC8qPCEgVUFSVDRfVFhEICAgICAgIFBBMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ0X1RYRF9QQzdfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ0X1RYRCAgICAgICBQQzcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNF9UWERfUEIxMV9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxMU1GUF9Nc2sgICAgICAgLyo8ISBVQVJUNF9UWEQgICAgICAgUEIxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDRfVFhEX1BGN19Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGN01GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDRfVFhEICAgICAgIFBGNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ0X1RYRF9QQzVfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzVNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ0X1RYRCAgICAgICBQQzUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNF9uQ1RTX1BFMV9Nc2sgICAgICBTWVNfR1BFX01GUExfUEUxTUZQX01zayAgICAgICAgLyo8ISBVQVJUNF9uQ1RTICAgICAgUEUxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDRfbkNUU19QQzhfTXNrICAgICAgU1lTX0dQQ19NRlBIX1BDOE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDRfbkNUUyAgICAgIFBDOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ0X25SVFNfUEUwX01zayAgICAgIFNZU19HUEVfTUZQTF9QRTBNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ0X25SVFMgICAgICBQRTAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNF9uUlRTX1BFMTNfTXNrICAgICBTWVNfR1BFX01GUEhfUEUxM01GUF9Nc2sgICAgICAgLyo8ISBVQVJUNF9uUlRTICAgICAgUEUxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDVfUlhEX1BCNF9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDVfUlhEICAgICAgIFBCNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ1X1JYRF9QQTRfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ1X1JYRCAgICAgICBQQTQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNV9SWERfUEU2X01zayAgICAgICBTWVNfR1BFX01GUExfUEU2TUZQX01zayAgICAgICAgLyo8ISBVQVJUNV9SWEQgICAgICAgUEU2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDVfVFhEX1BCNV9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDVfVFhEICAgICAgIFBCNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ1X1RYRF9QRTdfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTdNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ1X1RYRCAgICAgICBQRTcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNV9UWERfUEE1X01zayAgICAgICBTWVNfR1BBX01GUExfUEE1TUZQX01zayAgICAgICAgLyo8ISBVQVJUNV9UWEQgICAgICAgUEE1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDVfbkNUU19QQjJfTXNrICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDVfbkNUUyAgICAgIFBCMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ1X25SVFNfUEIzX01zayAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ1X25SVFMgICAgICBQQjMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0JfRF9QX1BBMTRfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEExNE1GUF9Nc2sgICAgICAgLyo8ISBVU0JfRF9QICAgICAgICAgUEExNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNCX0RfTl9QQTEzX01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfTXNrICAgICAgIC8qPCEgVVNCX0RfTiAgICAgICAgIFBBMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQl9PVEdfSURfUEExNV9Nc2sgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX01zayAgICAgICAvKjwhIFVTQl9PVEdfSUQgICAgICBQQTE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0JfVkJVU19QQTEyX01zayAgICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9Nc2sgICAgICAgLyo8ISBVU0JfVkJVUyAgICAgICAgUEExMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNCX1ZCVVNfRU5fUEI2X01zayAgICAgU1lTX0dQQl9NRlBMX1BCNk1GUF9Nc2sgICAgICAgIC8qPCEgVVNCX1ZCVVNfRU4gICAgIFBCNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQl9WQlVTX0VOX1BCMTVfTXNrICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX01zayAgICAgICAvKjwhIFVTQl9WQlVTX0VOICAgICBQQjE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0JfVkJVU19TVF9QQjE0X01zayAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9Nc2sgICAgICAgLyo8ISBVU0JfVkJVU19TVCAgICAgUEIxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNCX1ZCVVNfU1RfUEI3X01zayAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9Nc2sgICAgICAgIC8qPCEgVVNCX1ZCVVNfU1QgICAgIFBCNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQl9WQlVTX1NUX1BENF9Nc2sgICAgIFNZU19HUERfTUZQTF9QRDRNRlBfTXNrICAgICAgICAvKjwhIFVTQl9WQlVTX1NUICAgICBQRDQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9DTEtfUEQwX01zayAgICAgICBTWVNfR1BEX01GUExfUEQwTUZQX01zayAgICAgICAgLyo8ISBVU0NJMF9DTEsgICAgICAgUEQwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfQ0xLX1BBMTFfTXNrICAgICAgU1lTX0dQQV9NRlBIX1BBMTFNRlBfTXNrICAgICAgIC8qPCEgVVNDSTBfQ0xLICAgICAgIFBBMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0NMS19QRTJfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTJNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kwX0NMSyAgICAgICBQRTIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9DTEtfUEIxMl9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9Nc2sgICAgICAgLyo8ISBVU0NJMF9DTEsgICAgICAgUEIxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfQ1RMMF9QRDRfTXNrICAgICAgU1lTX0dQRF9NRlBMX1BENE1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTBfQ1RMMCAgICAgIFBENCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0NUTDBfUEU2X01zayAgICAgIFNZU19HUEVfTUZQTF9QRTZNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kwX0NUTDAgICAgICBQRTYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9DVEwwX1BDMTNfTXNrICAgICBTWVNfR1BDX01GUEhfUEMxM01GUF9Nc2sgICAgICAgLyo8ISBVU0NJMF9DVEwwICAgICAgUEMxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfQ1RMMF9QRDE0X01zayAgICAgU1lTX0dQRF9NRlBIX1BEMTRNRlBfTXNrICAgICAgIC8qPCEgVVNDSTBfQ1RMMCAgICAgIFBEMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0NUTDFfUEQzX01zayAgICAgIFNZU19HUERfTUZQTF9QRDNNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kwX0NUTDEgICAgICBQRDMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9DVEwxX1BFNV9Nc2sgICAgICBTWVNfR1BFX01GUExfUEU1TUZQX01zayAgICAgICAgLyo8ISBVU0NJMF9DVEwxICAgICAgUEU1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfQ1RMMV9QQjE1X01zayAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfTXNrICAgICAgIC8qPCEgVVNDSTBfQ1RMMSAgICAgIFBCMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0NUTDFfUEE4X01zayAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kwX0NUTDEgICAgICBQQTggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9EQVQwX1BFM19Nc2sgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX01zayAgICAgICAgLyo8ISBVU0NJMF9EQVQwICAgICAgUEUzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfREFUMF9QQjEzX01zayAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfTXNrICAgICAgIC8qPCEgVVNDSTBfREFUMCAgICAgIFBCMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0RBVDBfUEQxX01zayAgICAgIFNZU19HUERfTUZQTF9QRDFNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kwX0RBVDAgICAgICBQRDEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9EQVQwX1BBMTBfTXNrICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9Nc2sgICAgICAgLyo8ISBVU0NJMF9EQVQwICAgICAgUEExMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfREFUMV9QRTRfTXNrICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTBfREFUMSAgICAgIFBFNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0RBVDFfUEQyX01zayAgICAgIFNZU19HUERfTUZQTF9QRDJNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kwX0RBVDEgICAgICBQRDIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9EQVQxX1BCMTRfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9Nc2sgICAgICAgLyo8ISBVU0NJMF9EQVQxICAgICAgUEIxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfREFUMV9QQTlfTXNrICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTBfREFUMSAgICAgIFBBOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0NMS19QRTEyX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTEyTUZQX01zayAgICAgICAvKjwhIFVTQ0kxX0NMSyAgICAgICBQRTEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9DTEtfUEQ3X01zayAgICAgICBTWVNfR1BEX01GUExfUEQ3TUZQX01zayAgICAgICAgLyo8ISBVU0NJMV9DTEsgICAgICAgUEQ3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfQ0xLX1BCOF9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTFfQ0xLICAgICAgIFBCOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0NMS19QQjFfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kxX0NMSyAgICAgICBQQjEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9DVEwwX1BCMTBfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9Nc2sgICAgICAgLyo8ISBVU0NJMV9DVEwwICAgICAgUEIxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMF9QQjVfTXNrICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTFfQ1RMMCAgICAgIFBCNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0NUTDBfUEU5X01zayAgICAgIFNZU19HUEVfTUZQSF9QRTlNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kxX0NUTDAgICAgICBQRTkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9DVEwwX1BEM19Nc2sgICAgICBTWVNfR1BEX01GUExfUEQzTUZQX01zayAgICAgICAgLyo8ISBVU0NJMV9DVEwwICAgICAgUEQzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMV9QRDRfTXNrICAgICAgU1lTX0dQRF9NRlBMX1BENE1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTFfQ1RMMSAgICAgIFBENCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0NUTDFfUEU4X01zayAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kxX0NUTDEgICAgICBQRTggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9DVEwxX1BCOV9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX01zayAgICAgICAgLyo8ISBVU0NJMV9DVEwxICAgICAgUEI5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMV9QQjRfTXNrICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTFfQ1RMMSAgICAgIFBCNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0RBVDBfUEIyX01zayAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kxX0RBVDAgICAgICBQQjIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9EQVQwX1BCN19Nc2sgICAgICBTWVNfR1BCX01GUExfUEI3TUZQX01zayAgICAgICAgLyo8ISBVU0NJMV9EQVQwICAgICAgUEI3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfREFUMF9QRTEwX01zayAgICAgU1lTX0dQRV9NRlBIX1BFMTBNRlBfTXNrICAgICAgIC8qPCEgVVNDSTFfREFUMCAgICAgIFBFMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0RBVDBfUEQ1X01zayAgICAgIFNZU19HUERfTUZQTF9QRDVNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kxX0RBVDAgICAgICBQRDUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9EQVQxX1BENl9Nc2sgICAgICBTWVNfR1BEX01GUExfUEQ2TUZQX01zayAgICAgICAgLyo8ISBVU0NJMV9EQVQxICAgICAgUEQ2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfREFUMV9QQjNfTXNrICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTFfREFUMSAgICAgIFBCMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0RBVDFfUEUxMV9Nc2sgICAgIFNZU19HUEVfTUZQSF9QRTExTUZQX01zayAgICAgICAvKjwhIFVTQ0kxX0RBVDEgICAgICBQRTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9EQVQxX1BCNl9Nc2sgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX01zayAgICAgICAgLyo8ISBVU0NJMV9EQVQxICAgICAgUEI2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgWDMyX0lOX1BGNV9Nc2sgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNU1GUF9Nc2sgICAgICAgIC8qPCEgWDMyX0lOICAgICAgICAgIFBGNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFgzMl9PVVRfUEY0X01zayAgICAgICAgIFNZU19HUEZfTUZQTF9QRjRNRlBfTXNrICAgICAgICAvKjwhIFgzMl9PVVQgICAgICAgICBQRjQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBYVDFfSU5fUEYzX01zayAgICAgICAgICBTWVNfR1BGX01GUExfUEYzTUZQX01zayAgICAgICAgLyo8ISBYVDFfSU4gICAgICAgICAgUEYzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgWFQxX09VVF9QRjJfTXNrICAgICAgICAgU1lTX0dQRl9NRlBMX1BGMk1GUF9Nc2sgICAgICAgIC8qPCEgWFQxX09VVCAgICAgICAgIFBGMiAgICAgIE1GUCBNYXNrICovCisKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNZU19FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworLyoqIEBhZGR0b2dyb3VwIFNZU19FWFBPUlRFRF9GVU5DVElPTlMgU1lTIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBCcm93bi1vdXQgZGV0ZWN0b3IgaW50ZXJydXB0IGZsYWcKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gY2xlYXIgQnJvd24tb3V0IGRldGVjdG9yIGludGVycnVwdCBmbGFnLgorICAqLworI2RlZmluZSBTWVNfQ0xFQVJfQk9EX0lOVF9GTEFHKCkgICAgICAgIChTWVMtPkJPRENUTCB8PSBTWVNfQk9EQ1RMX0JPRElGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IEJyb3duLW91dCBkZXRlY3RvciBmdW5jdGlvbiB0byBub3JtYWwgbW9kZQorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBzZXQgQnJvd24tb3V0IGRldGVjdG9yIHRvIG5vcm1hbCBtb2RlLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBtYWNyby4KKyAgKi8KKyNkZWZpbmUgU1lTX0NMRUFSX0JPRF9MUE0oKSAgICAgICAgICAgICAoU1lTLT5CT0RDVEwgJj0gflNZU19CT0RDVExfQk9ETFBNX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBCcm93bi1vdXQgZGV0ZWN0b3IgZnVuY3Rpb24KKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZGlzYWJsZSBCcm93bi1vdXQgZGV0ZWN0b3IgZnVuY3Rpb24uCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIG1hY3JvLgorICAqLworI2RlZmluZSBTWVNfRElTQUJMRV9CT0QoKSAgICAgICAgICAgICAgIChTWVMtPkJPRENUTCAmPSB+U1lTX0JPRENUTF9CT0RFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBCcm93bi1vdXQgZGV0ZWN0b3IgZnVuY3Rpb24KKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZW5hYmxlIEJyb3duLW91dCBkZXRlY3RvciBmdW5jdGlvbi4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgbWFjcm8uCisgICovCisjZGVmaW5lIFNZU19FTkFCTEVfQk9EKCkgICAgICAgICAgICAgICAgKFNZUy0+Qk9EQ1RMIHw9IFNZU19CT0RDVExfQk9ERU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgQnJvd24tb3V0IGRldGVjdG9yIGludGVycnVwdCBmbGFnCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR2YWwgICAgIDAgICBCcm93bi1vdXQgZGV0ZWN0IGludGVycnVwdCBmbGFnIGlzIG5vdCBzZXQuCisgICogQHJldHZhbCAgICAgPj0xIEJyb3duLW91dCBkZXRlY3QgaW50ZXJydXB0IGZsYWcgaXMgc2V0LgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0IEJyb3duLW91dCBkZXRlY3RvciBpbnRlcnJ1cHQgZmxhZy4KKyAgKi8KKyNkZWZpbmUgU1lTX0dFVF9CT0RfSU5UX0ZMQUcoKSAgICAgICAgICAoU1lTLT5CT0RDVEwgJiBTWVNfQk9EQ1RMX0JPRElGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IEJyb3duLW91dCBkZXRlY3RvciBzdGF0dXMKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHZhbCAgICAgMCAgIFN5c3RlbSB2b2x0YWdlIGlzIGhpZ2hlciB0aGFuIEJPRCB0aHJlc2hvbGQgdm9sdGFnZSBzZXR0aW5nIG9yIEJPRCBmdW5jdGlvbiBpcyBkaXNhYmxlZC4KKyAgKiBAcmV0dmFsICAgICA+PTEgU3lzdGVtIHZvbHRhZ2UgaXMgbG93ZXIgdGhhbiBCT0QgdGhyZXNob2xkIHZvbHRhZ2Ugc2V0dGluZy4KKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGdldCBCcm93bi1vdXQgZGV0ZWN0b3Igb3V0cHV0IHN0YXR1cy4KKyAgKiAgICAgICAgICAgICBJZiB0aGUgQk9EIGZ1bmN0aW9uIGlzIGRpc2FibGVkLCB0aGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm4gMC4KKyAgKi8KKyNkZWZpbmUgU1lTX0dFVF9CT0RfT1VUUFVUKCkgICAgICAgICAgICAoU1lTLT5CT0RDVEwgJiBTWVNfQk9EQ1RMX0JPRE9VVF9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBCcm93bi1vdXQgZGV0ZWN0b3IgaW50ZXJydXB0IGZ1bmN0aW9uCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGVuYWJsZSBCcm93bi1vdXQgZGV0ZWN0b3IgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBtYWNyby4KKyAgKi8KKyNkZWZpbmUgU1lTX0RJU0FCTEVfQk9EX1JTVCgpICAgICAgICAgICAoU1lTLT5CT0RDVEwgJj0gflNZU19CT0RDVExfQk9EUlNURU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgQnJvd24tb3V0IGRldGVjdG9yIHJlc2V0IGZ1bmN0aW9uCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGVuYWJsZSBCcm93bi1vdXQgZGV0ZWN0IHJlc2V0IGZ1bmN0aW9uLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBtYWNyby4KKyAgKi8KKyNkZWZpbmUgU1lTX0VOQUJMRV9CT0RfUlNUKCkgICAgICAgICAgICAoU1lTLT5CT0RDVEwgfD0gU1lTX0JPRENUTF9CT0RSU1RFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBCcm93bi1vdXQgZGV0ZWN0b3IgZnVuY3Rpb24gbG93IHBvd2VyIG1vZGUKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gc2V0IEJyb3duLW91dCBkZXRlY3RvciB0byBsb3cgcG93ZXIgbW9kZS4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgbWFjcm8uCisgICovCisjZGVmaW5lIFNZU19TRVRfQk9EX0xQTSgpICAgICAgICAgICAgICAgKFNZUy0+Qk9EQ1RMIHw9IFNZU19CT0RDVExfQk9ETFBNX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IEJyb3duLW91dCBkZXRlY3RvciB2b2x0YWdlIGxldmVsCisgICogQHBhcmFtW2luXSAgdTMyTGV2ZWwgaXMgQnJvd24tb3V0IHZvbHRhZ2UgbGV2ZWwuIEluY2x1ZGluZyA6CisgICogICAgICAgICAgICAgLSBccmVmIFNZU19CT0RDVExfQk9EVkxfMV82VgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfQk9EQ1RMX0JPRFZMXzFfOFYKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX0JPRENUTF9CT0RWTF8yXzBWCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19CT0RDVExfQk9EVkxfMl8yVgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfQk9EQ1RMX0JPRFZMXzJfNFYKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX0JPRENUTF9CT0RWTF8yXzZWCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19CT0RDVExfQk9EVkxfMl84VgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfQk9EQ1RMX0JPRFZMXzNfMFYKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBzZXQgQnJvd24tb3V0IGRldGVjdG9yIHZvbHRhZ2UgbGV2ZWwuCisgICogICAgICAgICAgICAgVGhlIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIG1hY3JvLgorICAqLworI2RlZmluZSBTWVNfU0VUX0JPRF9MRVZFTCh1MzJMZXZlbCkgICAgIChTWVMtPkJPRENUTCA9IChTWVMtPkJPRENUTCAmIH5TWVNfQk9EQ1RMX0JPRFZMX01zaykgfCAodTMyTGV2ZWwpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgcmVzZXQgc291cmNlIGlzIGZyb20gQnJvd24tb3V0IGRldGVjdG9yIHJlc2V0CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR2YWwgICAgIDAgICBQcmV2aW91cyByZXNldCBzb3VyY2UgaXMgbm90IGZyb20gQnJvd24tb3V0IGRldGVjdG9yIHJlc2V0CisgICogQHJldHZhbCAgICAgPj0xIFByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBmcm9tIEJyb3duLW91dCBkZXRlY3RvciByZXNldAorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0IHByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBmcm9tIEJyb3duLW91dCBkZXRlY3QgcmVzZXQgb3Igbm90LgorICAqLworI2RlZmluZSBTWVNfSVNfQk9EX1JTVCgpICAgICAgICAgICAgICAgIChTWVMtPlJTVFNUUyAmIFNZU19SU1RTVFNfQk9EUkZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgcmVzZXQgc291cmNlIGlzIGZyb20gQ1BVIHJlc2V0CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR2YWwgICAgIDAgICBQcmV2aW91cyByZXNldCBzb3VyY2UgaXMgbm90IGZyb20gQ1BVIHJlc2V0CisgICogQHJldHZhbCAgICAgPj0xIFByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBmcm9tIENQVSByZXNldAorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0IHByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBmcm9tIENQVSByZXNldC4KKyAgKi8KKyNkZWZpbmUgU1lTX0lTX0NQVV9SU1QoKSAgICAgICAgICAgICAgICAoU1lTLT5SU1RTVFMgJiBTWVNfUlNUU1RTX0NQVVJGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHJlc2V0IHNvdXJjZSBpcyBmcm9tIExWUiBSZXNldAorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dmFsICAgICAwICAgUHJldmlvdXMgcmVzZXQgc291cmNlIGlzIG5vdCBmcm9tIExvdy1Wb2x0YWdlLVJlc2V0CisgICogQHJldHZhbCAgICAgPj0xIFByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBmcm9tIExvdy1Wb2x0YWdlLVJlc2V0CisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBnZXQgcHJldmlvdXMgcmVzZXQgc291cmNlIGlzIGZyb20gTG93LVZvbHRhZ2UtUmVzZXQuCisgICovCisjZGVmaW5lIFNZU19JU19MVlJfUlNUKCkgICAgICAgICAgICAgICAgKFNZUy0+UlNUU1RTICYgU1lTX1JTVFNUU19MVlJGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHJlc2V0IHNvdXJjZSBpcyBmcm9tIFBvd2VyLW9uIFJlc2V0CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR2YWwgICAgIDAgICBQcmV2aW91cyByZXNldCBzb3VyY2UgaXMgbm90IGZyb20gUG93ZXItb24gUmVzZXQKKyAgKiBAcmV0dmFsICAgICA+PTEgUHJldmlvdXMgcmVzZXQgc291cmNlIGlzIGZyb20gUG93ZXItb24gUmVzZXQKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGdldCBwcmV2aW91cyByZXNldCBzb3VyY2UgaXMgZnJvbSBQb3dlci1vbiBSZXNldC4KKyAgKi8KKyNkZWZpbmUgU1lTX0lTX1BPUl9SU1QoKSAgICAgICAgICAgICAgICAoU1lTLT5SU1RTVFMgJiBTWVNfUlNUU1RTX1BPUkZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgcmVzZXQgc291cmNlIGlzIGZyb20gcmVzZXQgcGluIHJlc2V0CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR2YWwgICAgIDAgICBQcmV2aW91cyByZXNldCBzb3VyY2UgaXMgbm90IGZyb20gcmVzZXQgcGluIHJlc2V0CisgICogQHJldHZhbCAgICAgPj0xIFByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBmcm9tIHJlc2V0IHBpbiByZXNldAorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0IHByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBmcm9tIHJlc2V0IHBpbiByZXNldC4KKyAgKi8KKyNkZWZpbmUgU1lTX0lTX1JTVFBJTl9SU1QoKSAgICAgICAgICAgICAoU1lTLT5SU1RTVFMgJiBTWVNfUlNUU1RTX1BJTlJGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHJlc2V0IHNvdXJjZSBpcyBmcm9tIHN5c3RlbSByZXNldAorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dmFsICAgICAwICAgUHJldmlvdXMgcmVzZXQgc291cmNlIGlzIG5vdCBmcm9tIHN5c3RlbSByZXNldAorICAqIEByZXR2YWwgICAgID49MSBQcmV2aW91cyByZXNldCBzb3VyY2UgaXMgZnJvbSBzeXN0ZW0gcmVzZXQKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGdldCBwcmV2aW91cyByZXNldCBzb3VyY2UgaXMgZnJvbSBzeXN0ZW0gcmVzZXQuCisgICovCisjZGVmaW5lIFNZU19JU19TWVNURU1fUlNUKCkgICAgICAgICAgICAgKFNZUy0+UlNUU1RTICYgU1lTX1JTVFNUU19TWVNSRl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCByZXNldCBzb3VyY2UgaXMgZnJvbSB3aW5kb3cgd2F0Y2ggZG9nIHJlc2V0CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR2YWwgICAgIDAgICBQcmV2aW91cyByZXNldCBzb3VyY2UgaXMgbm90IGZyb20gd2luZG93IHdhdGNoIGRvZyByZXNldAorICAqIEByZXR2YWwgICAgID49MSBQcmV2aW91cyByZXNldCBzb3VyY2UgaXMgZnJvbSB3aW5kb3cgd2F0Y2ggZG9nIHJlc2V0CisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBnZXQgcHJldmlvdXMgcmVzZXQgc291cmNlIGlzIGZyb20gd2luZG93IHdhdGNoIGRvZyByZXNldC4KKyAgKi8KKyNkZWZpbmUgU1lTX0lTX1dEVF9SU1QoKSAgICAgICAgICAgICAgICAoU1lTLT5SU1RTVFMgJiBTWVNfUlNUU1RTX1dEVFJGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBMb3ctVm9sdGFnZS1SZXNldCBmdW5jdGlvbgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBkaXNhYmxlIExvdy1Wb2x0YWdlLVJlc2V0IGZ1bmN0aW9uLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBtYWNyby4KKyAgKi8KKyNkZWZpbmUgU1lTX0RJU0FCTEVfTFZSKCkgICAgICAgICAgICAgICAoU1lTLT5CT0RDVEwgJj0gflNZU19CT0RDVExfTFZSRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgTG93LVZvbHRhZ2UtUmVzZXQgZnVuY3Rpb24KKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZW5hYmxlIExvdy1Wb2x0YWdlLVJlc2V0IGZ1bmN0aW9uLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBtYWNyby4KKyAgKi8KKyNkZWZpbmUgU1lTX0VOQUJMRV9MVlIoKSAgICAgICAgICAgICAgICAoU1lTLT5CT0RDVEwgfD0gU1lTX0JPRENUTF9MVlJFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgUG93ZXItb24gUmVzZXQgZnVuY3Rpb24KKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZGlzYWJsZSBQb3dlci1vbiBSZXNldCBmdW5jdGlvbi4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgbWFjcm8uCisgICovCisjZGVmaW5lIFNZU19ESVNBQkxFX1BPUigpICAgICAgICAgICAgICAgKFNZUy0+UE9SQ1RMMCA9IDB4NUFBNSkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFBvd2VyLW9uIFJlc2V0IGZ1bmN0aW9uCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGVuYWJsZSBQb3dlci1vbiBSZXNldCBmdW5jdGlvbi4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgbWFjcm8uCisgICovCisjZGVmaW5lIFNZU19FTkFCTEVfUE9SKCkgICAgICAgICAgICAgICAgKFNZUy0+UE9SQ1RMMCA9IDApCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIHJlc2V0IHNvdXJjZSBmbGFnCisgICogQHBhcmFtW2luXSAgdTMyUnN0U3JjIGlzIHJlc2V0IHNvdXJjZS4gSW5jbHVkaW5nIDoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1JTVFNUU19QT1JGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfUlNUU1RTX1BJTlJGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfUlNUU1RTX1dEVFJGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfUlNUU1RTX0xWUkZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19SU1RTVFNfQk9EUkZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19SU1RTVFNfU1lTUkZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19SU1RTVFNfQ1BVUkZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19SU1RTVFNfQ1BVTEtSRl9Nc2sKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBjbGVhciByZXNldCBzb3VyY2UgZmxhZy4KKyAgKi8KKyNkZWZpbmUgU1lTX0NMRUFSX1JTVF9TT1VSQ0UodTMyUnN0U3JjKSAoKFNZUy0+UlNUU1RTKSA9ICh1MzJSc3RTcmMpICkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBEZWNsYXJlIHRoZXNlIGlubGluZSBmdW5jdGlvbnMgaGVyZSB0byBhdm9pZCBNSVNSQSBDIDIwMDQgcnVsZSA4LjEgZXJyb3IgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNZU19VbmxvY2tSZWcodm9pZCk7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTWVNfTG9ja1JlZyh2b2lkKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24KKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZGlzYWJsZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uLgorICAqICAgICAgICAgICAgIFRvIHVubG9jayB0aGUgcHJvdGVjdGVkIHJlZ2lzdGVyIHRvIGFsbG93IHdyaXRlIGFjY2Vzcy4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNZU19VbmxvY2tSZWcodm9pZCkKK3sKKyAgICBkbworICAgIHsKKyAgICAgICAgU1lTLT5SRUdMQ1RMID0gMHg1OVVMOworICAgICAgICBTWVMtPlJFR0xDVEwgPSAweDE2VUw7CisgICAgICAgIFNZUy0+UkVHTENUTCA9IDB4ODhVTDsKKyAgICB9CisgICAgd2hpbGUoU1lTLT5SRUdMQ1RMID09IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24uCisgICogICAgICAgICAgICAgVG8gbG9jayB0aGUgcHJvdGVjdGVkIHJlZ2lzdGVyIHRvIGZvcmJpZCB3cml0ZSBhY2Nlc3MuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTWVNfTG9ja1JlZyh2b2lkKQoreworICAgIFNZUy0+UkVHTENUTCA9IDBVTDsKK30KKworCit2b2lkIFNZU19DbGVhclJlc2V0U3JjKHVpbnQzMl90IHUzMlNyYyk7Cit1aW50MzJfdCBTWVNfR2V0Qk9EU3RhdHVzKHZvaWQpOwordWludDMyX3QgU1lTX0dldFJlc2V0U3JjKHZvaWQpOwordWludDMyX3QgU1lTX0lzUmVnTG9ja2VkKHZvaWQpOwordWludDMyX3QgU1lTX1JlYWRQRElEKHZvaWQpOwordm9pZCBTWVNfUmVzZXRDaGlwKHZvaWQpOwordm9pZCBTWVNfUmVzZXRDUFUodm9pZCk7Cit2b2lkIFNZU19SZXNldE1vZHVsZSh1aW50MzJfdCB1MzJNb2R1bGVJbmRleCk7Cit2b2lkIFNZU19FbmFibGVCT0QoaW50MzJfdCBpMzJNb2RlLCB1aW50MzJfdCB1MzJCT0RMZXZlbCk7Cit2b2lkIFNZU19EaXNhYmxlQk9EKHZvaWQpOwordm9pZCBTWVNfU2V0UG93ZXJMZXZlbCh1aW50MzJfdCB1MzJQb3dlckxldmVsKTsKK3VpbnQzMl90IFNZU19TZXRQb3dlclJlZ3VsYXRvcih1aW50MzJfdCB1MzJQb3dlclJlZ3VsYXRvcik7Cit2b2lkIFNZU19TZXRTU1JBTVBvd2VyTW9kZSh1aW50MzJfdCB1MzJTUkFNU2VsLCB1aW50MzJfdCB1MzJQb3dlck1vZGUpOwordm9pZCBTWVNfU2V0UFNSQU1Qb3dlck1vZGUodWludDMyX3QgdTMyU1JBTVNlbCwgdWludDMyX3QgdTMyUG93ZXJNb2RlKTsKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNZU19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTWVNfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fU1lTX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy90aW1lci5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWM2YjY4Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdGltZXIuaApAQCAtMCwwICsxLDUwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHRpbWVyLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFRpbWVyIENvbnRyb2xsZXIoVGltZXIpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVElNRVJfSF9fCisjZGVmaW5lIF9fVElNRVJfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBUSU1FUl9Ecml2ZXIgVElNRVIgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgVElNRVJfRVhQT1JURURfQ09OU1RBTlRTIFRJTUVSIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBUSU1FUiBPcGVyYXRpb24gTW9kZSwgRXh0ZXJuYWwgQ291bnRlciBhbmQgQ2FwdHVyZSBNb2RlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVElNRVJfT05FU0hPVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICgwVUwgPDwgVElNRVJfQ1RMX09QTU9ERV9Qb3MpICAgICAgLyohPCBUaW1lciB3b3JraW5nIGluIG9uZS1zaG90IG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9QRVJJT0RJQ19NT0RFICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBUSU1FUl9DVExfT1BNT0RFX1BvcykgICAgICAvKiE8IFRpbWVyIHdvcmtpbmcgaW4gcGVyaW9kaWMgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRJTUVSX1RPR0dMRV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAoMlVMIDw8IFRJTUVSX0NUTF9PUE1PREVfUG9zKSAgICAgIC8qITwgVGltZXIgd29ya2luZyBpbiB0b2dnbGUtb3V0cHV0IG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9DT05USU5VT1VTX01PREUgICAgICAgICAgICAgICAgICAgKDNVTCA8PCBUSU1FUl9DVExfT1BNT0RFX1BvcykgICAgICAvKiE8IFRpbWVyIHdvcmtpbmcgaW4gY29udGludW91cyBjb3VudGluZyBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVElNRVJfVE9VVF9QSU5fRlJPTV9UTVggICAgICAgICAgICAgICAgICgwVUwgPDwgVElNRVJfQ1RMX1RHTFBJTlNFTF9Qb3MpICAgLyohPCBUaW1lciB0b2dnbGUtb3V0cHV0IHBpbiBpcyBmcm9tIFRNeCBwaW4gXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9UT1VUX1BJTl9GUk9NX1RNWF9FWFQgICAgICAgICAgICAgKDFVTCA8PCBUSU1FUl9DVExfVEdMUElOU0VMX1BvcykgICAvKiE8IFRpbWVyIHRvZ2dsZS1vdXRwdXQgcGluIGlzIGZyb20gVE14X0VYVCBwaW4gXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFRJTUVSX0NPVU5URVJfRVZFTlRfRkFMTElORyAgICAgICAgICAgICAoMFVMIDw8IFRJTUVSX0VYVENUTF9DTlRQSEFTRV9Qb3MpIC8qITwgQ291bnRlciBpbmNyZWFzZSBvbiBmYWxsaW5nIGVkZ2UgZGV0ZWN0aW9uIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVElNRVJfQ09VTlRFUl9FVkVOVF9SSVNJTkcgICAgICAgICAgICAgICgxVUwgPDwgVElNRVJfRVhUQ1RMX0NOVFBIQVNFX1BvcykgLyohPCBDb3VudGVyIGluY3JlYXNlIG9uIHJpc2luZyBlZGdlIGRldGVjdGlvbiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRJTUVSX0NBUFRVUkVfRlJFRV9DT1VOVElOR19NT0RFICAgICAgICAoMFVMIDw8IFRJTUVSX0VYVENUTF9DQVBGVU5DU19Qb3MpIC8qITwgVGltZXIgY2FwdHVyZSBldmVudCB0byBnZXQgdGltZXIgY291bnRlciB2YWx1ZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRJTUVSX0NBUFRVUkVfQ09VTlRFUl9SRVNFVF9NT0RFICAgICAgICAoMVVMIDw8IFRJTUVSX0VYVENUTF9DQVBGVU5DU19Qb3MpIC8qITwgVGltZXIgY2FwdHVyZSBldmVudCB0byByZXNldCB0aW1lciBjb3VudGVyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBUSU1FUl9DQVBUVVJFX0VWRU5UX0ZBTExJTkcgICAgICAgICAgICAgKDBVTCA8PCBUSU1FUl9FWFRDVExfQ0FQRURHRV9Qb3MpICAvKiE8IEZhbGxpbmcgZWRnZSBkZXRlY3Rpb24gdG8gdHJpZ2dlciBjYXB0dXJlIGV2ZW50IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVElNRVJfQ0FQVFVSRV9FVkVOVF9SSVNJTkcgICAgICAgICAgICAgICgxVUwgPDwgVElNRVJfRVhUQ1RMX0NBUEVER0VfUG9zKSAgLyohPCBSaXNpbmcgZWRnZSBkZXRlY3Rpb24gdG8gdHJpZ2dlciBjYXB0dXJlIGV2ZW50IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVElNRVJfQ0FQVFVSRV9FVkVOVF9GQUxMSU5HX1JJU0lORyAgICAgICgyVUwgPDwgVElNRVJfRVhUQ1RMX0NBUEVER0VfUG9zKSAgLyohPCBCb3RoIGZhbGxpbmcgYW5kIHJpc2luZyBlZGdlIGRldGVjdGlvbiB0byB0cmlnZ2VyIGNhcHR1cmUgZXZlbnQsIGFuZCBmaXJzdCBldmVudCBhdCBmYWxsaW5nIGVkZ2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9DQVBUVVJFX0VWRU5UX1JJU0lOR19GQUxMSU5HICAgICAgKDNVTCA8PCBUSU1FUl9FWFRDVExfQ0FQRURHRV9Qb3MpICAvKiE8IEJvdGggcmlzaW5nIGFuZCBmYWxsaW5nIGVkZ2UgZGV0ZWN0aW9uIHRvIHRyaWdnZXIgY2FwdHVyZSBldmVudCwgYW5kIGZpcnN0IGV2ZW50IGF0IHJpc2luZyBlZGdlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVElNRVJfQ0FQVFVSRV9FVkVOVF9HRVRfTE9XX1BFUklPRCAgICAgICg2VUwgPDwgVElNRVJfRVhUQ1RMX0NBUEVER0VfUG9zKSAgLyohPCBGaXJzdCBjYXB0dXJlIGV2ZW50IGlzIGF0IGZhbGxpbmcgZWRnZSwgZm9sbG93cyBhcmUgYXQgYXQgcmlzaW5nIGVkZ2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9DQVBUVVJFX0VWRU5UX0dFVF9ISUdIX1BFUklPRCAgICAgKDdVTCA8PCBUSU1FUl9FWFRDVExfQ0FQRURHRV9Qb3MpICAvKiE8IEZpcnN0IGNhcHR1cmUgZXZlbnQgaXMgYXQgcmlzaW5nIGVkZ2UsIGZvbGxvd3MgYXJlIGF0IGF0IGZhbGxpbmcgZWRnZSBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgVElNRVJfVFJHU1JDX1RJTUVPVVRfRVZFTlQgICAgICAgICAgICAgICgwVUwgPDwgVElNRVJfVFJHQ1RMX1RSR1NTRUxfUG9zKSAvKiE8IFNlbGVjdCBpbnRlcm5hbCB0cmlnZ2VyIHNvdXJjZSBmcm9tIHRpbWVyIHRpbWUtb3V0IGV2ZW50IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVElNRVJfVFJHU1JDX0NBUFRVUkVfRVZFTlQgICAgICAgICAgICAgICgxVUwgPDwgVElNRVJfVFJHQ1RMX1RSR1NTRUxfUG9zKSAvKiE8IFNlbGVjdCBpbnRlcm5hbCB0cmlnZ2VyIHNvdXJjZSBmcm9tIHRpbWVyIGNhcHR1cmUgZXZlbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9UUkdfVE9fRVBXTSAgICAgICAgICAgICAgICAgICAgICAgKFRJTUVSX1RSR0NUTF9UUkdFUFdNX01zaykgICAgICAgIC8qITwgRWFjaCB0aW1lciBldmVudCBhcyBFUFdNIGNvdW50ZXIgY2xvY2sgc291cmNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVElNRVJfVFJHX1RPX0VBREMgICAgICAgICAgICAgICAgICAgICAgIChUSU1FUl9UUkdDVExfVFJHRUFEQ19Nc2spICAgICAgICAvKiE8IEVhY2ggdGltZXIgZXZlbnQgdG8gc3RhcnQgQURDIGNvbnZlcnNpb24gXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9UUkdfVE9fREFDICAgICAgICAgICAgICAgICAgICAgICAgKFRJTUVSX1RSR0NUTF9UUkdEQUNfTXNrKSAgICAgICAgIC8qITwgRWFjaCB0aW1lciBldmVudCB0byBzdGFydCBEQUMgY29udmVyc2lvbiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRJTUVSX1RSR19UT19QRE1BICAgICAgICAgICAgICAgICAgICAgICAoVElNRVJfVFJHQ1RMX1RSR1BETUFfTXNrKSAgICAgICAgLyohPCBFYWNoIHRpbWVyIGV2ZW50IHRvIHRyaWdnZXIgUERNQSB0cmFuc2ZlciBcaGlkZWluaXRpYWxpemVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVElNRVJfRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIFRJTUVSX0VYUE9SVEVEX0ZVTkNUSU9OUyBUSU1FUiBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBUaW1lciBDb21wYXJlZCBWYWx1ZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB1MzJWYWx1ZSAgICBUaW1lciBjb21wYXJlIHZhbHVlLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMiB0byAweEZGRkZGRi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgdGltZXIgY29tcGFyZWQgdmFsdWUgdG8gYWRqdXN0IHRpbWVyIHRpbWUtb3V0IGludGVydmFsLgorICAgICAgICAxLiBOZXZlciB3cml0ZSAweDAgb3IgMHgxIGluIHRoaXMgZmllbGQsIG9yIHRoZSBjb3JlIHdpbGwgcnVuIGludG8gdW5rbm93biBzdGF0ZS4gXG4KKyAgKiAgICAgICAgICAgICAyLiBJZiB1cGRhdGUgdGltZXIgY29tcGFyZWQgdmFsdWUgaW4gY29udGludW91cyBjb3VudGluZyBtb2RlLCB0aW1lciBjb3VudGVyIHZhbHVlIHdpbGwga2VlcCBjb3VudGluZyBjb250aW51b3VzbHkuIFxuCisgICogICAgICAgICAgICAgICAgQnV0IGlmIHRpbWVyIGlzIG9wZXJhdGluZyBhdCBvdGhlciBtb2RlcywgdGhlIHRpbWVyIHVwIGNvdW50ZXIgd2lsbCByZXN0YXJ0IGNvdW50aW5nIGFuZCBzdGFydCBmcm9tIDAuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUSU1FUl9TRVRfQ01QX1ZBTFVFKHRpbWVyLCB1MzJWYWx1ZSkgICAgICAgICgodGltZXIpLT5DTVAgPSAodTMyVmFsdWUpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgVGltZXIgUHJlc2NhbGUgVmFsdWUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyVmFsdWUgICAgVGltZXIgcHJlc2NhbGUgdmFsdWUuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwIHRvIDB4RkYuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IHRpbWVyIHByZXNjYWxlIHZhbHVlIGFuZCB0aW1lciBzb3VyY2UgY2xvY2sgd2lsbCBiZSBkaXZpZGVkIGJ5IChwcmVzY2FsZSArIDEpIFxuCisgICogICAgICAgICAgICAgYmVmb3JlIGl0IGlzIGZlZCBpbnRvIHRpbWVyLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVElNRVJfU0VUX1BSRVNDQUxFX1ZBTFVFKHRpbWVyLCB1MzJWYWx1ZSkgICAoKHRpbWVyKS0+Q1RMID0gKCh0aW1lciktPkNUTCAmIH5USU1FUl9DVExfUFNDX01zaykgfCAodTMyVmFsdWUpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDaGVjayBzcGVjaWZ5IFRpbWVyIFN0YXR1cworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR2YWwgICAgIDAgICBUaW1lciAyNC1iaXQgdXAgY291bnRlciBpcyBpbmFjdGl2ZQorICAqIEByZXR2YWwgICAgIDEgICBUaW1lciAyNC1iaXQgdXAgY291bnRlciBpcyBhY3RpdmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjaGVjayBpZiBzcGVjaWZ5IFRpbWVyIGNvdW50ZXIgaXMgaW5hY3RpdmUgb3IgYWN0aXZlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVElNRVJfSVNfQUNUSVZFKHRpbWVyKSAgICAgICAgICAgICAgICAgICAgICAoKCh0aW1lciktPkNUTCAmIFRJTUVSX0NUTF9BQ1RTVFNfTXNrKT8gMSA6IDApCisKKy8qKgorICAqIEBicmllZiAgICAgIFNlbGVjdCBUb2dnbGUtb3V0cHV0IFBpbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB1MzJUb3V0U2VsICBUb2dnbGUtb3V0cHV0IHBpbiBzZWxlY3Rpb24sIHZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX1RPVVRfUElOX0ZST01fVE1YCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX1RPVVRfUElOX0ZST01fVE1YX0VYVAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNlbGVjdCB0aW1lciB0b2dnbGUtb3V0cHV0IHBpbiBpcyBvdXRwdXQgb24gVE14IG9yIFRNeF9FWFQgcGluLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVElNRVJfU0VMRUNUX1RPVVRfUElOKHRpbWVyLCB1MzJUb3V0U2VsKSAgICAoKHRpbWVyKS0+Q1RMID0gKCh0aW1lciktPkNUTCAmIH5USU1FUl9DVExfVEdMUElOU0VMX01zaykgfCAodTMyVG91dFNlbCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogc3RhdGljIGlubGluZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGVjbGFyZSB0aGVzZSBpbmxpbmUgZnVuY3Rpb25zIGhlcmUgdG8gYXZvaWQgTUlTUkEgQyAyMDA0IHJ1bGUgOC4xIGVycm9yICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9TdGFydChUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9TdG9wKFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0VuYWJsZVdha2V1cChUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9EaXNhYmxlV2FrZXVwKFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX1N0YXJ0Q2FwdHVyZShUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9TdG9wQ2FwdHVyZShUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9FbmFibGVDYXB0dXJlRGVib3VuY2UoVElNRVJfVCAqdGltZXIpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfRGlzYWJsZUNhcHR1cmVEZWJvdW5jZShUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9FbmFibGVFdmVudENvdW50ZXJEZWJvdW5jZShUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9EaXNhYmxlRXZlbnRDb3VudGVyRGVib3VuY2UoVElNRVJfVCAqdGltZXIpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfRW5hYmxlSW50KFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0Rpc2FibGVJbnQoVElNRVJfVCAqdGltZXIpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfRW5hYmxlQ2FwdHVyZUludChUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9EaXNhYmxlQ2FwdHVyZUludChUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgVElNRVJfR2V0SW50RmxhZyhUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9DbGVhckludEZsYWcoVElNRVJfVCAqdGltZXIpOworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFRJTUVSX0dldENhcHR1cmVJbnRGbGFnKFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0NsZWFyQ2FwdHVyZUludEZsYWcoVElNRVJfVCAqdGltZXIpOworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFRJTUVSX0dldFdha2V1cEZsYWcoVElNRVJfVCAqdGltZXIpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfQ2xlYXJXYWtldXBGbGFnKFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBUSU1FUl9HZXRDYXB0dXJlRGF0YShUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgVElNRVJfR2V0Q291bnRlcihUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9SZXNldENvdW50ZXIoVElNRVJfVCAqdGltZXIpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFN0YXJ0IFRpbWVyIENvdW50aW5nCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN0YXJ0IFRpbWVyIGNvdW50aW5nLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfU3RhcnQoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkNUTCB8PSBUSU1FUl9DVExfQ05URU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTdG9wIFRpbWVyIENvdW50aW5nCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN0b3Avc3VzcGVuZCBUaW1lciBjb3VudGluZy4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX1N0b3AoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkNUTCAmPSB+VElNRVJfQ1RMX0NOVEVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFRpbWVyIEludGVycnVwdCBXYWtlLXVwIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0IHdha2UtdXAgZnVuY3Rpb24gYW5kIGludGVycnVwdCBzb3VyY2UgY291bGQgYmUgdGltZS1vdXQgaW50ZXJydXB0LCBcbgorICAqICAgICAgICAgICAgIGNvdW50ZXIgZXZlbnQgaW50ZXJydXB0IG9yIGNhcHR1cmUgdHJpZ2dlciBpbnRlcnJ1cHQuCisgICAgICAgIFRvIHdha2UgdGhlIHN5c3RlbSBmcm9tIFBvd2VyLWRvd24gbW9kZSwgdGltZXIgY2xvY2sgc291cmNlIG11c3QgYmUgZXRoZXIgTFhUIG9yIExJUkMuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9FbmFibGVXYWtldXAoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkNUTCB8PSBUSU1FUl9DVExfV0tFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgVGltZXIgV2FrZS11cCBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQgd2FrZS11cCBmdW5jdGlvbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0Rpc2FibGVXYWtldXAoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkNUTCAmPSB+VElNRVJfQ1RMX1dLRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTdGFydCBUaW1lciBDYXB0dXJlIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN0YXJ0IFRpbWVyIGNhcHR1cmUgZnVuY3Rpb24uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9TdGFydENhcHR1cmUoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkVYVENUTCB8PSBUSU1FUl9FWFRDVExfQ0FQRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTdG9wIFRpbWVyIENhcHR1cmUgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RvcCBUaW1lciBjYXB0dXJlIGZ1bmN0aW9uLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfU3RvcENhcHR1cmUoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkVYVENUTCAmPSB+VElNRVJfRVhUQ1RMX0NBUEVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIENhcHR1cmUgUGluIERlLWJvdW5jZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgdGhlIGRldGVjdCBkZS1ib3VuY2UgZnVuY3Rpb24gb2YgY2FwdHVyZSBwaW4uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9FbmFibGVDYXB0dXJlRGVib3VuY2UoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkVYVENUTCB8PSBUSU1FUl9FWFRDVExfQ0FQREJFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgQ2FwdHVyZSBQaW4gRGUtYm91bmNlCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIGRldGVjdCBkZS1ib3VuY2UgZnVuY3Rpb24gb2YgY2FwdHVyZSBwaW4uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9EaXNhYmxlQ2FwdHVyZURlYm91bmNlKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5FWFRDVEwgJj0gflRJTUVSX0VYVENUTF9DQVBEQkVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIENvdW50ZXIgUGluIERlLWJvdW5jZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgdGhlIGRldGVjdCBkZS1ib3VuY2UgZnVuY3Rpb24gb2YgY291bnRlciBwaW4uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9FbmFibGVFdmVudENvdW50ZXJEZWJvdW5jZShUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+RVhUQ1RMIHw9IFRJTUVSX0VYVENUTF9DTlREQkVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBDb3VudGVyIFBpbiBEZS1ib3VuY2UKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgZGV0ZWN0IGRlLWJvdW5jZSBmdW5jdGlvbiBvZiBjb3VudGVyIHBpbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0Rpc2FibGVFdmVudENvdW50ZXJEZWJvdW5jZShUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+RVhUQ1RMICY9IH5USU1FUl9FWFRDVExfQ05UREJFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBUaW1lciBUaW1lLW91dCBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSB0aW1lciB0aW1lLW91dCBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9FbmFibGVJbnQoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkNUTCB8PSBUSU1FUl9DVExfSU5URU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFRpbWVyIFRpbWUtb3V0IEludGVycnVwdAorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIHRoZSB0aW1lciB0aW1lLW91dCBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9EaXNhYmxlSW50KFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5DVEwgJj0gflRJTUVSX0NUTF9JTlRFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBDYXB0dXJlIFRyaWdnZXIgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgdGltZXIgY2FwdHVyZSB0cmlnZ2VyIGludGVycnVwdCBmdW5jdGlvbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0VuYWJsZUNhcHR1cmVJbnQoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkVYVENUTCB8PSBUSU1FUl9FWFRDVExfQ0FQSUVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBDYXB0dXJlIFRyaWdnZXIgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIHRpbWVyIGNhcHR1cmUgdHJpZ2dlciBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9EaXNhYmxlQ2FwdHVyZUludChUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+RVhUQ1RMICY9IH5USU1FUl9FWFRDVExfQ0FQSUVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFRpbWVyIFRpbWUtb3V0IEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgVGltZXIgdGltZS1vdXQgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAgKiBAcmV0dmFsICAgICAxICAgVGltZXIgdGltZS1vdXQgaW50ZXJydXB0IG9jY3VycmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGluZGljYXRlcyB0aW1lciB0aW1lLW91dCBpbnRlcnJ1cHQgb2NjdXJyZWQgb3Igbm90LgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFRJTUVSX0dldEludEZsYWcoVElNRVJfVCAqdGltZXIpCit7CisgICAgcmV0dXJuICgodGltZXItPklOVFNUUyAmIFRJTUVSX0lOVFNUU19USUZfTXNrKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIFRpbWVyIFRpbWUtb3V0IEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGltZXIgdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgdG8gMC4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0NsZWFySW50RmxhZyhUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+SU5UU1RTID0gVElNRVJfSU5UU1RTX1RJRl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBUaW1lciBDYXB0dXJlIEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgVGltZXIgY2FwdHVyZSBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICAqIEByZXR2YWwgICAgIDEgICBUaW1lciBjYXB0dXJlIGludGVycnVwdCBvY2N1cnJlZAorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgdGltZXIgY2FwdHVyZSB0cmlnZ2VyIGludGVycnVwdCBvY2N1cnJlZCBvciBub3QuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgVElNRVJfR2V0Q2FwdHVyZUludEZsYWcoVElNRVJfVCAqdGltZXIpCit7CisgICAgcmV0dXJuIHRpbWVyLT5FSU5UU1RTOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBUaW1lciBDYXB0dXJlIEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGltZXIgY2FwdHVyZSB0cmlnZ2VyIGludGVycnVwdCBmbGFnIHRvIDAuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9DbGVhckNhcHR1cmVJbnRGbGFnKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5FSU5UU1RTID0gVElNRVJfRUlOVFNUU19DQVBJRl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBUaW1lciBXYWtlLXVwIEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR2YWwgICAgIDAgICBUaW1lciBkb2VzIG5vdCBjYXVzZSBDUFUgd2FrZS11cAorICAqIEByZXR2YWwgICAgIDEgICBUaW1lciBpbnRlcnJ1cHQgZXZlbnQgY2F1c2UgQ1BVIHdha2UtdXAKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaW5kaWNhdGVzIHRpbWVyIGludGVycnVwdCBldmVudCBoYXMgd2FrZWQgdXAgc3lzdGVtIG9yIG5vdC4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBUSU1FUl9HZXRXYWtldXBGbGFnKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHJldHVybiAodGltZXItPklOVFNUUyAmIFRJTUVSX0lOVFNUU19UV0tGX01zayA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIFRpbWVyIFdha2UtdXAgRmxhZworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSB0aW1lciB3YWtlLXVwIHN5c3RlbSBmbGFnIHRvIDAuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9DbGVhcldha2V1cEZsYWcoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPklOVFNUUyA9IFRJTUVSX0lOVFNUU19UV0tGX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IENhcHR1cmUgdmFsdWUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICAyNC1iaXQgQ2FwdHVyZSBWYWx1ZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiByZXBvcnRzIHRoZSBjdXJyZW50IDI0LWJpdCB0aW1lciBjYXB0dXJlIHZhbHVlLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFRJTUVSX0dldENhcHR1cmVEYXRhKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHJldHVybiB0aW1lci0+Q0FQOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgQ291bnRlciB2YWx1ZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIDI0LWJpdCBDb3VudGVyIFZhbHVlCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHJlcG9ydHMgdGhlIGN1cnJlbnQgMjQtYml0IHRpbWVyIGNvdW50ZXIgdmFsdWUuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgVElNRVJfR2V0Q291bnRlcihUSU1FUl9UICp0aW1lcikKK3sKKyAgICByZXR1cm4gdGltZXItPkNOVDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgUmVzZXQgQ291bnRlcgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXNldCBjdXJyZW50IGNvdW50ZXIgdmFsdWUgYW5kIGludGVybmFsIHByZXNjYWxlIGNvdW50ZXIgdmFsdWUuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9SZXNldENvdW50ZXIoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkNOVCA9IDBVTDsKKyAgICB3aGlsZSgodGltZXItPkNOVCAmIFRJTUVSX0NOVF9SU1RBQ1RfTXNrKSA9PSBUSU1FUl9DTlRfUlNUQUNUX01zaykge30KK30KKworCit1aW50MzJfdCBUSU1FUl9PcGVuKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJNb2RlLCB1aW50MzJfdCB1MzJGcmVxKTsKK3ZvaWQgVElNRVJfQ2xvc2UoVElNRVJfVCAqdGltZXIpOwordm9pZCBUSU1FUl9EZWxheShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyVXNlYyk7Cit2b2lkIFRJTUVSX0VuYWJsZUNhcHR1cmUoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkNhcE1vZGUsIHVpbnQzMl90IHUzMkVkZ2UpOwordm9pZCBUSU1FUl9EaXNhYmxlQ2FwdHVyZShUSU1FUl9UICp0aW1lcik7Cit2b2lkIFRJTUVSX0VuYWJsZUV2ZW50Q291bnRlcihUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyRWRnZSk7Cit2b2lkIFRJTUVSX0Rpc2FibGVFdmVudENvdW50ZXIoVElNRVJfVCAqdGltZXIpOwordWludDMyX3QgVElNRVJfR2V0TW9kdWxlQ2xvY2soVElNRVJfVCAqdGltZXIpOwordm9pZCBUSU1FUl9FbmFibGVGcmVxQ291bnRlcihUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyRHJvcENvdW50LCB1aW50MzJfdCB1MzJUaW1lb3V0LCB1aW50MzJfdCB1MzJFbmFibGVJbnQpOwordm9pZCBUSU1FUl9EaXNhYmxlRnJlcUNvdW50ZXIoVElNRVJfVCAqdGltZXIpOwordm9pZCBUSU1FUl9TZXRUcmlnZ2VyU291cmNlKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJTcmMpOwordm9pZCBUSU1FUl9TZXRUcmlnZ2VyVGFyZ2V0KFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJNYXNrKTsKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBUSU1FUl9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBUSU1FUl9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fVElNRVJfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3RpbWVyX3B3bS5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdGltZXJfcHdtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzZDI0OAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3RpbWVyX3B3bS5oCkBAIC0wLDAgKzEsNzQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdGltZXIuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgVGltZXIgUFdNIENvbnRyb2xsZXIoVGltZXIgUFdNKSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1RJTUVSX1BXTV9IX18KKyNkZWZpbmUgX19USU1FUl9QV01fSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBUSU1FUl9QV01fRHJpdmVyIFRJTUVSIFBXTSBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBUSU1FUl9QV01fRVhQT1JURURfQ09OU1RBTlRTIFRJTUVSIFBXTSBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgT3V0cHV0IENoYW5uZWwgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFRQV01fQ0gwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQklUMCkgICAgICAgLyohPCBJbmRpY2F0ZSBQV014X0NIMCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQ0gxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQklUMSkgICAgICAgLyohPCBJbmRpY2F0ZSBQV014X0NIMSBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDb3VudGVyIFR5cGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVFBXTV9VUF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICgwVUwgPDwgVElNRVJfUFdNQ1RMX0NOVFRZUEVfUG9zKSAgICAgICAvKiE8IFVwIGNvdW50IHR5cGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0RPV05fQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBUSU1FUl9QV01DVExfQ05UVFlQRV9Qb3MpICAgICAgIC8qITwgRG93biBjb3VudCB0eXBlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9VUF9ET1dOX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICgyVUwgPDwgVElNRVJfUFdNQ1RMX0NOVFRZUEVfUG9zKSAgICAgICAvKiE8IFVwLURvd24gY291bnQgdHlwZSBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDb3VudGVyIE1vZGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVFBXTV9BVVRPX1JFTE9BRF9NT0RFICAgICAgICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQXV0by1yZWxvYWQgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fT05FX1NIT1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAoVElNRVJfUFdNQ1RMX0NOVE1PREVfTXNrKSAgICAgICAvKiE8IE9uZS1zaG90IG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgT3V0cHV0IExldmVsIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFRQV01fT1VUUFVUX1RPR0dMRSAgICAgICAgICAgICAgICAgICAgICAoMFVMKSAgICAgIC8qITwgVGltZXIgUFdNIG91dHB1dCB0b2dnbGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX09VVFBVVF9OT1RISU5HICAgICAgICAgICAgICAgICAgICAgKDFVTCkgICAgICAvKiE8IFRpbWVyIFBXTSBvdXRwdXQgbm90aGluZyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fT1VUUFVUX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAoMlVMKSAgICAgIC8qITwgVGltZXIgUFdNIG91dHB1dCBsb3cgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX09VVFBVVF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgKDNVTCkgICAgICAvKiE8IFRpbWVyIFBXTSBvdXRwdXQgaGlnaCBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBUcmlnZ2VyIEFEQyBTb3VyY2UgU2VsZWN0IENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVFBXTV9UUklHR0VSX0FEQ19BVF9aRVJPX1BPSU5UICAgICAgICAgICAgICAgICAgICAgICgwVUwgPDwgVElNRVJfUFdNRUFEQ1RTX1RSR1NFTF9Qb3MpICAgICAvKiE8IFRpbWVyIFBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIHplcm8gcG9pbnQgZXZlbnQgb2NjdXJyZWQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX1RSSUdHRVJfQURDX0FUX1BFUklPRF9QT0lOVCAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBUSU1FUl9QV01FQURDVFNfVFJHU0VMX1BvcykgICAgIC8qITwgVGltZXIgUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgcGVyaW9kIHBvaW50IGV2ZW50IG9jY3VycmVkIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9UUklHR0VSX0FEQ19BVF9aRVJPX09SX1BFUklPRF9QT0lOVCAgICAgICAgICAgICgyVUwgPDwgVElNRVJfUFdNRUFEQ1RTX1RSR1NFTF9Qb3MpICAgICAvKiE8IFRpbWVyIFBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIHplcm8gb3IgcGVyaW9kIHBvaW50IGV2ZW50IG9jY3VycmVkIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9UUklHR0VSX0FEQ19BVF9DT01QQVJFX1VQX0NPVU5UX1BPSU5UICAgICAgICAgICgzVUwgPDwgVElNRVJfUFdNRUFEQ1RTX1RSR1NFTF9Qb3MpICAgICAvKiE8IFRpbWVyIFBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIHVwIGNvdW50IGNvbXBhcmUgcG9pbnQgZXZlbnQgb2NjdXJyZWQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX1RSSUdHRVJfQURDX0FUX0NPTVBBUkVfRE9XTl9DT1VOVF9QT0lOVCAgICAgICAgKDRVTCA8PCBUSU1FUl9QV01FQURDVFNfVFJHU0VMX1BvcykgICAgIC8qITwgVGltZXIgUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgZG93biBjb3VudCBjb21wYXJlIHBvaW50IGV2ZW50IG9jY3VycmVkIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEJyYWtlIENvbnRyb2wgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBUUFdNX0JSQUtFX1NPVVJDRV9FREdFX0FDTVAwICAgICAgICAgICAgKFRJTUVSX1BXTUJSS0NUTF9DUE8wRUJFTl9Nc2spIC8qITwgQ29tcGFyYXRvciAwIGFzIGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQlJBS0VfU09VUkNFX0VER0VfQUNNUDEgICAgICAgICAgICAoVElNRVJfUFdNQlJLQ1RMX0NQTzFFQkVOX01zaykgLyohPCBDb21wYXJhdG9yIDEgYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CUkFLRV9TT1VSQ0VfRURHRV9CS1BJTiAgICAgICAgICAgIChUSU1FUl9QV01CUktDVExfQlJLUEVFTl9Nc2spICAvKiE8IEJyYWtlIHBpbiBhcyBlZGdlLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JSQUtFX1NPVVJDRV9FREdFX1NZU19DU1MgICAgICAgICAgKFRJTUVSX1BXTUJSS0NUTF9TWVNFQkVOX01zayB8IChUSU1FUl9QV01GQUlMQlJLX0NTU0JSS0VOX01zayA8PCAxNikpICAgIC8qITwgU3lzdGVtIGZhaWwgY29uZGl0aW9uOiBjbG9jayBzZWN1cml0eSBzeXN0ZW0gZGV0ZWN0aW9uIGFzIGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQlJBS0VfU09VUkNFX0VER0VfU1lTX0JPRCAgICAgICAgICAoVElNRVJfUFdNQlJLQ1RMX1NZU0VCRU5fTXNrIHwgKFRJTUVSX1BXTUZBSUxCUktfQk9EQlJLRU5fTXNrIDw8IDE2KSkgICAgLyohPCBTeXN0ZW0gZmFpbCBjb25kaXRpb246IGJyb3duLW91dCBkZXRlY3Rpb24gYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CUkFLRV9TT1VSQ0VfRURHRV9TWVNfQ09SICAgICAgICAgIChUSU1FUl9QV01CUktDVExfU1lTRUJFTl9Nc2sgfCAoVElNRVJfUFdNRkFJTEJSS19DT1JCUktFTl9Nc2sgPDwgMTYpKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogY29yZSBsb2NrdXAgZGV0ZWN0aW9uIGFzIGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQlJBS0VfU09VUkNFX0VER0VfU1lTX1JBTSAgICAgICAgICAoVElNRVJfUFdNQlJLQ1RMX1NZU0VCRU5fTXNrIHwgKFRJTUVSX1BXTUZBSUxCUktfUkFNQlJLRU5fTXNrIDw8IDE2KSkgICAgLyohPCBTeXN0ZW0gZmFpbCBjb25kaXRpb246IFNSQU0gcGFyaXR5IGVycm9yIGRldGVjdGlvbiBhcyBlZGdlLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFRQV01fQlJBS0VfU09VUkNFX0xFVkVMX0FDTVAwICAgICAgICAgICAoVElNRVJfUFdNQlJLQ1RMX0NQTzBMQkVOX01zaykgIC8qITwgQ29tcGFyYXRvciAwIGFzIGxldmVsLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JSQUtFX1NPVVJDRV9MRVZFTF9BQ01QMSAgICAgICAgICAgKFRJTUVSX1BXTUJSS0NUTF9DUE8xTEJFTl9Nc2spICAvKiE8IENvbXBhcmF0b3IgMSBhcyBsZXZlbC1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CUkFLRV9TT1VSQ0VfTEVWRUxfQktQSU4gICAgICAgICAgIChUSU1FUl9QV01CUktDVExfQlJLUExFTl9Nc2spICAgLyohPCBCcmFrZSBwaW4gYXMgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQlJBS0VfU09VUkNFX0xFVkVMX1NZU19DU1MgICAgICAgICAoVElNRVJfUFdNQlJLQ1RMX1NZU0xCRU5fTXNrIHwgKFRJTUVSX1BXTUZBSUxCUktfQ1NTQlJLRU5fTXNrIDw8IDE2KSkgICAgLyohPCBTeXN0ZW0gZmFpbCBjb25kaXRpb246IGNsb2NrIHNlY3VyaXR5IHN5c3RlbSBkZXRlY3Rpb24gYXMgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQlJBS0VfU09VUkNFX0xFVkVMX1NZU19CT0QgICAgICAgICAoVElNRVJfUFdNQlJLQ1RMX1NZU0xCRU5fTXNrIHwgKFRJTUVSX1BXTUZBSUxCUktfQk9EQlJLRU5fTXNrIDw8IDE2KSkgICAgLyohPCBTeXN0ZW0gZmFpbCBjb25kaXRpb246IGJyb3duLW91dCBkZXRlY3Rpb24gYXMgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQlJBS0VfU09VUkNFX0xFVkVMX1NZU19DT1IgICAgICAgICAoVElNRVJfUFdNQlJLQ1RMX1NZU0xCRU5fTXNrIHwgKFRJTUVSX1BXTUZBSUxCUktfQ09SQlJLRU5fTXNrIDw8IDE2KSkgICAgLyohPCBTeXN0ZW0gZmFpbCBjb25kaXRpb246IGNvcmUgbG9ja3VwIGRldGVjdGlvbiBhcyBsZXZlbC1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CUkFLRV9TT1VSQ0VfTEVWRUxfU1lTX1JBTSAgICAgICAgIChUSU1FUl9QV01CUktDVExfU1lTTEJFTl9Nc2sgfCAoVElNRVJfUFdNRkFJTEJSS19SQU1CUktFTl9Nc2sgPDwgMTYpKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogU1JBTSBwYXJpdHkgZXJyb3IgZGV0ZWN0aW9uIGFzIGxldmVsLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFRQV01fQlJBS0VfRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAoVElNRVJfUFdNU1dCUktfQlJLRVRSR19Nc2spICAgIC8qITwgRWRnZS1kZXRlY3QgZmF1bHQgYnJha2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JSQUtFX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgKFRJTUVSX1BXTVNXQlJLX0JSS0xUUkdfTXNrKSAgICAvKiE8IExldmVsLWRldGVjdCBmYXVsdCBicmFrZSBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBMb2FkIE1vZGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVFBXTV9MT0FEX01PREVfUEVSSU9EICAgICAgICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRpbWVyIFBXTSBwZXJpb2QgbG9hZCBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9MT0FEX01PREVfSU1NRURJQVRFICAgICAgICAgICAgICAgIChUSU1FUl9QV01DVExfSU1NTERFTl9Nc2spICAvKiE8IFRpbWVyIFBXTSBpbW1lZGlhdGVseSBsb2FkIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0xPQURfTU9ERV9DRU5URVIgICAgICAgICAgICAgICAgICAgKFRJTUVSX1BXTUNUTF9DVFJMRF9Nc2spICAgIC8qITwgVGltZXIgUFdNIGNlbnRlciBsb2FkIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQnJha2UgUGluIERlLWJvdW5jZSBDbG9jayBTb3VyY2UgU2VsZWN0IENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFRQV01fQktQX0RCQ0xLX1BDTEtfRElWXzEgICAgICAgICAgICAgICAoMFVMKSAgICAvKiE8IERlLWJvdW5jZSBjbG9jayBpcyBQQ0xLIGRpdmlkZSBieSAxIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfMiAgICAgICAgICAgICAgICgxVUwpICAgIC8qITwgRGUtYm91bmNlIGNsb2NrIGlzIFBDTEsgZGl2aWRlIGJ5IDIgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JLUF9EQkNMS19QQ0xLX0RJVl80ICAgICAgICAgICAgICAgKDJVTCkgICAgLyohPCBEZS1ib3VuY2UgY2xvY2sgaXMgUENMSyBkaXZpZGUgYnkgNCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQktQX0RCQ0xLX1BDTEtfRElWXzggICAgICAgICAgICAgICAoM1VMKSAgICAvKiE8IERlLWJvdW5jZSBjbG9jayBpcyBQQ0xLIGRpdmlkZSBieSA4IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfMTYgICAgICAgICAgICAgICg0VUwpICAgIC8qITwgRGUtYm91bmNlIGNsb2NrIGlzIFBDTEsgZGl2aWRlIGJ5IDE2IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfMzIgICAgICAgICAgICAgICg1VUwpICAgIC8qITwgRGUtYm91bmNlIGNsb2NrIGlzIFBDTEsgZGl2aWRlIGJ5IDMyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfNjQgICAgICAgICAgICAgICg2VUwpICAgIC8qITwgRGUtYm91bmNlIGNsb2NrIGlzIFBDTEsgZGl2aWRlIGJ5IDY0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfMTI4ICAgICAgICAgICAgICg3VUwpICAgIC8qITwgRGUtYm91bmNlIGNsb2NrIGlzIFBDTEsgZGl2aWRlIGJ5IDEyOCBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBCcmFrZSBQaW4gU291cmNlIFNlbGVjdCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVFBXTV9UTV9CUkFLRTAgICAgICAgICAgICAgICAgICAgICAgICAgICgwVUwpICAgIC8qITwgQnJha2UgcGluIHNvdXJjZSBjb21lcyBmcm9tIFRNX0JSQUtFMCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fVE1fQlJBS0UxICAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMKSAgICAvKiE8IEJyYWtlIHBpbiBzb3VyY2UgY29tZXMgZnJvbSBUTV9CUkFLRTEgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX1RNX0JSQUtFMiAgICAgICAgICAgICAgICAgICAgICAgICAgKDJVTCkgICAgLyohPCBCcmFrZSBwaW4gc291cmNlIGNvbWVzIGZyb20gVE1fQlJBS0UyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9UTV9CUkFLRTMgICAgICAgICAgICAgICAgICAgICAgICAgICgzVUwpICAgIC8qITwgQnJha2UgcGluIHNvdXJjZSBjb21lcyBmcm9tIFRNX0JSQUtFMyBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDb3VudGVyIENsb2NrIFNvdXJjZSBTZWxlY3QgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVFBXTV9DTlRSX0NMS1NSQ19UTVJfQ0xLICAgICAgICAgICAgICAgICgwVUwpICAgIC8qITwgVGltZXIgUFdNIENsb2NrIHNvdXJjZSBzZWxlY3RzIHRvIFRNUl9DTEsgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0NOVFJfQ0xLU1JDX1RJTUVSMF9JTlQgICAgICAgICAgICAgKDFVTCkgICAgLyohPCBUaW1lciBQV00gQ2xvY2sgc291cmNlIHNlbGVjdHMgdG8gVElNRVIwIGludGVycnVwdCBldmVudCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQ05UUl9DTEtTUkNfVElNRVIxX0lOVCAgICAgICAgICAgICAoMlVMKSAgICAvKiE8IFRpbWVyIFBXTSBDbG9jayBzb3VyY2Ugc2VsZWN0cyB0byBUSU1FUjEgaW50ZXJydXB0IGV2ZW50IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9DTlRSX0NMS1NSQ19USU1FUjJfSU5UICAgICAgICAgICAgICgzVUwpICAgIC8qITwgVGltZXIgUFdNIENsb2NrIHNvdXJjZSBzZWxlY3RzIHRvIFRJTUVSMiBpbnRlcnJ1cHQgZXZlbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0NOVFJfQ0xLU1JDX1RJTUVSM19JTlQgICAgICAgICAgICAgKDRVTCkgICAgLyohPCBUaW1lciBQV00gQ2xvY2sgc291cmNlIHNlbGVjdHMgdG8gVElNRVIzIGludGVycnVwdCBldmVudCBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDb3VudGVyIFN5bmNocm9ub3VzIE1vZGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVFBXTV9DTlRSX1NZTkNfRElTQUJMRSAgICAgICAgICAgICAgICAgICgwVUwpICAgIC8qITwgRGlzYWJsZSBUSU1FUiBQV00gc3luY2hyb25vdXMgZnVuY3Rpb24gXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0NOVFJfU1lOQ19TVEFSVF9CWV9USU1FUjAgICAgICAgICAgKCgwPDxUSU1FUl9QV01TQ1RMX1NZTkNTUkNfUG9zKSB8ICgxPDxUSU1FUl9QV01TQ1RMX1NZTkNNT0RFX1BvcykpICAvKiE8IFBXTSBjb3VudGVyIHN5bmNocm9ub3VzIHN0YXJ0IGJ5IFRJTUVSMCBQV00gXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0NOVFJfU1lOQ19DTEVBUl9CWV9USU1FUjAgICAgICAgICAgKCgwPDxUSU1FUl9QV01TQ1RMX1NZTkNTUkNfUG9zKSB8ICgzPDxUSU1FUl9QV01TQ1RMX1NZTkNNT0RFX1BvcykpICAvKiE8IFBXTSBjb3VudGVyIHN5bmNocm9ub3VzIGNsZWFyIGJ5IFRJTUVSMCBQV00gXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0NOVFJfU1lOQ19TVEFSVF9CWV9USU1FUjIgICAgICAgICAgKCgxPDxUSU1FUl9QV01TQ1RMX1NZTkNTUkNfUG9zKSB8ICgxPDxUSU1FUl9QV01TQ1RMX1NZTkNNT0RFX1BvcykpICAvKiE8IFBXTSBjb3VudGVyIHN5bmNocm9ub3VzIHN0YXJ0IGJ5IFRJTUVSMiBQV00gXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0NOVFJfU1lOQ19DTEVBUl9CWV9USU1FUjIgICAgICAgICAgKCgxPDxUSU1FUl9QV01TQ1RMX1NZTkNTUkNfUG9zKSB8ICgzPDxUSU1FUl9QV01TQ1RMX1NZTkNNT0RFX1BvcykpICAvKiE8IFBXTSBjb3VudGVyIHN5bmNocm9ub3VzIGNsZWFyIGJ5IFRJTUVSMiBQV00gXGhpZGVpbml0aWFsaXplciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFRJTUVSX1BXTV9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgVElNRVJfUFdNX0VYUE9SVEVEX0ZVTkNUSU9OUyBUSU1FUiBQV00gRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUFdNIENvdW50ZXIgTW9kZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBzcGVjaWZpZWQgVGltZXIgY2hhbm5lbCBhcyBQV00gY291bnRlciBtb2RlLCB0aGVuIHRpbWVyIGNvdW50ZXIgbW9kZSBpcyBpbnZhbGlkLgorICAgICAgICBBbGwgcmVnaXN0ZXJzIGFib3V0IHRpbWUgY291bnRlciBmdW5jdGlvbiB3aWxsIGJlIGNsZWFyZWQgdG8gMCBhbmQgdGltZXIgY2xvY2sgc291cmNlIHdpbGwgYmUgY2hhbmdlZCB0byBQQ0xLeCBhdXRvbWF0aWNhbGx5IGFmdGVyIGV4ZWN1dGluZyB0aGlzIG1hY3JvLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9FTkFCTEVfUFdNX01PREUodGltZXIpICAgICAgICAgICAgICgodGltZXIpLT5BTFRDVEwgPSAoMSA8PCBUSU1FUl9BTFRDVExfRlVOQ1NFTF9Qb3MpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFBXTSBDb3VudGVyIE1vZGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIHNwZWNpZmllZCBUaW1lciBjaGFubmVsIGFzIFBXTSBjb3VudGVyIG1vZGUsIHRoZW4gdGltZXIgY291bnRlciBtb2RlIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgQWxsIHJlZ2lzdGVycyBhYm91dCBQV00gY291bnRlciBmdW5jdGlvbiB3aWxsIGJlIGNsZWFyZWQgdG8gMCBhZnRlciBleGVjdXRpbmcgdGhpcyBtYWNyby4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fRElTQUJMRV9QV01fTU9ERSh0aW1lcikgICAgICAgICAgICAoKHRpbWVyKS0+QUxUQ1RMID0gKDAgPDwgVElNRVJfQUxUQ1RMX0ZVTkNTRUxfUG9zKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIEluZGVwZW5kZW50IE1vZGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgaW5kZXBlbmRlbnQgbW9kZSBvZiBUSU1FUiBQV00gbW9kdWxlIGFuZCBjb21wbGVtZW50YXJ5IG1vZGUgd2lsbCBiZSBkaXNhYmxlZC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fRU5BQkxFX0lOREVQRU5ERU5UX01PREUodGltZXIpICAgICAoKHRpbWVyKS0+UFdNQ1RMICY9IH4oMXVsIDw8IFRJTUVSX1BXTUNUTF9PVVRNT0RFX1BvcykpCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBDb21wbGVtZW50YXJ5IE1vZGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgY29tcGxlbWVudGFyeSBtb2RlIG9mIFRpbWVyIFBXTSBtb2R1bGUgYW5kIGluZGVwZW5kZW50IG1vZGUgd2lsbCBiZSBkaXNhYmxlZC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fRU5BQkxFX0NPTVBMRU1FTlRBUllfTU9ERSh0aW1lcikgICAoKHRpbWVyKS0+UFdNQ1RMIHw9ICgxIDw8IFRJTUVSX1BXTUNUTF9PVVRNT0RFX1BvcykpCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBDb3VudGVyIFR5cGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdHlwZSAgICAgICAgVGltZXIgUFdNIGNvdW50IHR5cGUsIGNvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR5cGUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fVVBfQ09VTlQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fRE9XTl9DT1VOVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9VUF9ET1dOX0NPVU5UCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IFRpbWVyIFBXTSBjb3VudGVyIHR5cGUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX1NFVF9DT1VOVEVSX1RZUEUodGltZXIsIHR5cGUpICAgICAgKCh0aW1lciktPlBXTUNUTCA9ICgodGltZXIpLT5QV01DVEwgJiB+VElNRVJfUFdNQ1RMX0NOVFRZUEVfTXNrKSB8ICh0eXBlKSkKKworLyoqCisgICogQGJyaWVmICAgICAgU3RhcnQgUFdNIENvdW50ZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIFBXTSBnZW5lcmF0b3IgYW5kIHN0YXJ0IGNvdW50ZXIgY291bnRpbmcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX1NUQVJUX0NPVU5URVIodGltZXIpICAgICAgICAgICAgICAgKCh0aW1lciktPlBXTUNUTCB8PSBUSU1FUl9QV01DVExfQ05URU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTdG9wIFBXTSBDb3VudGVyCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHN0b3AgUFdNIGNvdW50ZXIgYWZ0ZXIgY3VycmVudCBwZXJpb2QgaXMgY29tcGxldGVkLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9TVE9QX0NPVU5URVIodGltZXIpICAgICAgICAgICAgICAgICgodGltZXIpLT5QV01QRVJJT0QgPSAweDApCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBDb3VudGVyIENsb2NrIFByZXNjYWxlcgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEBwYXJhbVtpbl0gIHByZXNjYWxlciAgICBDbG9jayBwcmVzY2FsZXIgb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAweDB+MHhGRkYuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IHRoZSBwcmVzY2FsZXIgb2Ygc3BlY2lmaWVkIFRJTUVSIFBXTS4KKyAgICAgICAgSWYgcHJlc2NhbGVyIGlzIDAsIHRoZW4gdGhlcmUgaXMgbm8gc2NhbGluZyBpbiBjb3VudGVyIGNsb2NrIHNvdXJjZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fU0VUX1BSRVNDQUxFUih0aW1lciwgcHJlc2NhbGVyKSAgICAoKHRpbWVyKS0+UFdNQ0xLUFNDID0gKHByZXNjYWxlcikpCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBDb3VudGVyIENsb2NrIFByZXNjYWxlcgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIFRhcmdldCBwcmVzY2FsZXIgc2V0dGluZywgQ0xLUFNDIChUSU1FUnhfUFdNQ0xLUFNDWzExOjBdKQorICAqCisgICogQGRldGFpbHMgICAgR2V0IHRoZSBwcmVzY2FsZXIgc2V0dGluZywgdGhlIHRhcmdldCBjb3VudGVyIGNsb2NrIGRpdmlkZXIgaXMgKENMS1BTQyArIDEpLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9HRVRfUFJFU0NBTEVSKHRpbWVyKSAgICAgICAgICAgICAgICgodGltZXIpLT5QV01DTEtQU0MpCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBDb3VuZXIgUGVyaW9kCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHBhcmFtW2luXSAgcGVyaW9kICAgICAgUGVyaW9kIG9mIHNwZWNpZmllZCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMHgwfjB4RkZGRi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgdGhlIHBlcmlvZCBvZiBzcGVjaWZpZWQgVElNRVIgUFdNLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9TRVRfUEVSSU9EKHRpbWVyLCBwZXJpb2QpICAgICAgICAgICgodGltZXIpLT5QV01QRVJJT0QgPSAocGVyaW9kKSkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IENvdW5lciBQZXJpb2QKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBUYXJnZXQgcGVyaW9kIHNldHRpbmcsIFBFUklPRCAoVElNRVJ4X1BXTVBFUklPRFsxNTowXSkKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgdGhlIHBlcmlvZCBvZiBzcGVjaWZpZWQgVElNRVIgUFdNLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9HRVRfUEVSSU9EKHRpbWVyKSAgICAgICAgICAgICAgICAgICgodGltZXIpLT5QV01QRVJJT0QpCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBDb21wYXJhdG9yIFZhbHVlCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcGFyYW1baW5dICBjbXAgICAgIENvbXBhcmF0b3Igb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAweDB+MHhGRkZGLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCB0aGUgY29tcGFyYXRvciB2YWx1ZSBvZiBzcGVjaWZpZWQgVElNRVIgUFdNLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9TRVRfQ01QREFUKHRpbWVyLCBjbXApICAgICAgICAgICAgICgodGltZXIpLT5QV01DTVBEQVQgPSAoY21wKSkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IENvbXBhcmF0b3IgVmFsdWUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIFRhcmdldCBjb21wYXJhdG9yIHNldHRpbmcsIENNUERBVCAoVElNRVJ4X1BXTUNNUERBVFsxNTowXSkKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgdGhlIGNvbXBhcmF0b3IgdmFsdWUgb2Ygc3BlY2lmaWVkIFRJTUVSIFBXTS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fR0VUX0NNUERBVCh0aW1lcikgICAgICAgICAgICAgICAgICAoKHRpbWVyKS0+UFdNQ01QREFUKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBDb3VudGVyCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY2xlYXIgY291bnRlciBvZiBzcGVjaWZpZWQgVElNRVIgUFdNLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9DTEVBUl9DT1VOVEVSKHRpbWVyKSAgICAgICAgICAgICAgICgodGltZXIpLT5QV01DTlRDTFIgPSBUSU1FUl9QV01DTlRDTFJfQ05UQ0xSX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgU29mdHdhcmUgVHJpZ2dlciBCcmFrZSBFdmVudAorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEBwYXJhbVtpbl0gIHR5cGUgICAgICAgIFR5cGUgb2YgYnJha2UgdHJpZ2dlci4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfRURHRQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9MRVZFTAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHRyaWdnZXIgYnJha2UgZXZlbnQgYnkgd3JpdGluZyBQV01TV0JSSyByZWdpc3Rlci4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fU1dfVFJJR0dFUl9CUkFLRSh0aW1lciwgdHlwZSkgICAgICAoKHRpbWVyKS0+UFdNU1dCUksgPSAodHlwZSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBPdXRwdXQgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcGFyYW1baW5dICBjaCAgICAgICAgICBFbmFibGUgc3BlY2lmaWVkIGNoYW5uZWwgb3V0cHV0IGZ1bmN0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9DSDAKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQ0gxCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIG91dHB1dCBmdW5jdGlvbiBvZiBzcGVjaWZpZWQgb3V0cHV0IHBpbnMuCisgICAgICAgIElmIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB1MzJDaE1hc2sgcGFyYW1ldGVyIGlzIDAsIHRoZW4gb3V0cHV0IGZ1bmN0aW9uIHdpbGwgYmUgZGlzYWJsZWQgaW4gdGhpcyBjaGFubmVsLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9FTkFCTEVfT1VUUFVUKHRpbWVyLCBjaCkgICAgICAgICAgICgodGltZXIpLT5QV01QT0VOID0gKGNoKSkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IE91dHB1dCBJbnZlcnNlCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHBhcmFtW2luXSAgY2ggICAgICAgICAgU2V0IHNwZWNpZmllZCBjaGFubmVsIG91dHB1dCBpcyBpbnZlcnNlZCBvciBub3QuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NIMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9DSDEKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgb3V0cHV0IGludmVyc2Ugb2Ygc3BlY2lmaWVkIG91dHB1dCBwaW5zLgorICAgICAgICBJZiB1MzJDaE1hc2sgcGFyYW1ldGVyIGlzIDAsIHRoZW4gb3V0cHV0IGludmVyc2UgZnVuY3Rpb24gd2lsbCBiZSBkaXNhYmxlZC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fU0VUX09VVFBVVF9JTlZFUlNFKHRpbWVyLCBjaCkgICAgICAoKHRpbWVyKS0+UFdNUE9MQ1RMID0gKGNoKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIE91dHB1dCBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHBhcmFtW2luXSAgY2ggICAgICAgRW5hYmxlIHNwZWNpZmllZCBjaGFubmVsIG91dHB1dCBtYXNrIGZ1bmN0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9DSDAKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQ0gxCisgICoKKyAgKiBAcGFyYW1baW5dICBsZXZlbCAgICBPdXRwdXQgdG8gaGlnaCBvciBsb3cgb24gc3BlY2lmaWVkIG1hc2sgY2hhbm5lbC4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgb3V0cHV0IGZ1bmN0aW9uIG9mIHNwZWNpZmllZCBvdXRwdXQgcGlucy4KKyAgICAgICAgSWYgdTMyQ2hNYXNrIHBhcmFtZXRlciBpcyAwLCB0aGVuIG91dHB1dCBtYXNrIGZ1bmN0aW9uIHdpbGwgYmUgZGlzYWJsZWQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX1NFVF9NQVNLX09VVFBVVCh0aW1lciwgY2gsIGxldmVsKSBkbyB7KHRpbWVyKS0+UFdNTVNLRU4gPSAoY2gpOyAodGltZXIpLT5QV01NU0sgPSAobGV2ZWwpOyB9d2hpbGUoMCkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IENvdW50ZXIgU3luY2hyb25vdXMgTW9kZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHBhcmFtW2luXSAgbW9kZSAgICBTeW5jaHJvbm91cyBtb2RlLiBQb3NzaWJsZSBvcHRpb25zIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9DTlRSX1NZTkNfRElTQUJMRQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NOVFJfU1lOQ19TVEFSVF9CWV9USU1FUjAKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9DTlRSX1NZTkNfQ0xFQVJfQllfVElNRVIwCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQ05UUl9TWU5DX1NUQVJUX0JZX1RJTUVSMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NOVFJfU1lOQ19DTEVBUl9CWV9USU1FUjIKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgY291bnRlciBzeW5jaHJvbm91cyBtb2RlIG9mIHNwZWNpZmllZCBUaW1lciBQV00gbW9kdWxlLgorICAgICAgICBPbmx5IHN1cHBvcnQgYWxsIFBXTSBjb3VudGVycyBhcmUgc3luY2hyb25vdXMgYnkgVElNRVIwIFBXTSBvciBUSU1FUjB+MSBQV00gY291bnRlciBzeW5jaHJvbm91cyBieSBUSU1FUjAgUFdNIGFuZAorICAqICAgICAgICAgICAgIFRJTUVSMn4zIFBXTSBjb3VudGVyIHN5bmNocm9ub3VzIGJ5IFRJTUVSMiBQV00uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX1NFVF9DT1VOVEVSX1NZTkNfTU9ERSh0aW1lciwgbW9kZSkgICAgICgodGltZXIpLT5QV01TQ1RMID0gKG1vZGUpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUcmlnZ2VyIENvdW50ZXIgU3luY2hyb25vdXMKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byB0cmlnZ2VyIHN5bmNocm9ub3VzIGV2ZW50IGJ5IHNwZWNpZmllZCBUSU1FUiBQV00uCisgICAgICAgIDEuIFRoaXMgbWFjcm8gaXMgb25seSBhdmFpbGFibGUgZm9yIFRJTUVSMCBQV00gYW5kIFRJTUVSMiBQV00uIFxuCisgICogICAgICAgICAgICAgMi4gU1RSR0VOIChQV01TVFJHWzBdKSBpcyB3cml0ZSBvbmx5IGFuZCBhbHdheXMgcmVhZCBhcyAwLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9UUklHR0VSX0NPVU5URVJfU1lOQyh0aW1lcikgICAgICAgICAgICAoKHRpbWVyKS0+UFdNU1RSRyA9IFRJTUVSX1BXTVNUUkdfU1RSR0VOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFplcm8gRXZlbnQgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgemVybyBldmVudCBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0VOQUJMRV9aRVJPX0lOVCh0aW1lcikgICAgICAgICAgICAgICAgICgodGltZXIpLT5QV01JTlRFTjAgfD0gVElNRVJfUFdNSU5URU4wX1pJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFplcm8gRXZlbnQgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIHplcm8gZXZlbnQgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9ESVNBQkxFX1pFUk9fSU5UKHRpbWVyKSAgICAgICAgICAgICAgICAoKHRpbWVyKS0+UFdNSU5URU4wICY9IH5USU1FUl9QV01JTlRFTjBfWklFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBaZXJvIEV2ZW50IEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHZhbCAgICAgMCAgIFplcm8gZXZlbnQgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAgKiBAcmV0dmFsICAgICAxICAgWmVybyBldmVudCBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaW5kaWNhdGVzIHplcm8gZXZlbnQgb2NjdXJyZWQgb3Igbm90LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9HRVRfWkVST19JTlRfRkxBRyh0aW1lcikgICAgICAgICAgICAgICAoKCh0aW1lciktPlBXTUlOVFNUUzAgJiBUSU1FUl9QV01JTlRTVFMwX1pJRl9Nc2spPyAxIDogMCkKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgWmVybyBFdmVudCBJbnRlcnJ1cHQgRmxhZworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gY2xlYXJzIHplcm8gZXZlbnQgaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0NMRUFSX1pFUk9fSU5UX0ZMQUcodGltZXIpICAgICAgICAgICAgICgodGltZXIpLT5QV01JTlRTVFMwID0gVElNRVJfUFdNSU5UU1RTMF9aSUZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUGVyaW9kIEV2ZW50IEludGVycnVwdAorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgdGhlIHBlcmlvZCBldmVudCBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0VOQUJMRV9QRVJJT0RfSU5UKHRpbWVyKSAgICAgICAgICAgICAgICgodGltZXIpLT5QV01JTlRFTjAgfD0gVElNRVJfUFdNSU5URU4wX1BJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFBlcmlvZCBFdmVudCBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgcGVyaW9kIGV2ZW50IGludGVycnVwdCBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fRElTQUJMRV9QRVJJT0RfSU5UKHRpbWVyKSAgICAgICAgICAgICAgKCh0aW1lciktPlBXTUlOVEVOMCAmPSB+VElNRVJfUFdNSU5URU4wX1BJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUGVyaW9kIEV2ZW50IEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHZhbCAgICAgMCAgIFBlcmlvZCBldmVudCBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICAqIEByZXR2YWwgICAgIDEgICBQZXJpb2QgZXZlbnQgaW50ZXJydXB0IG9jY3VycmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGluZGljYXRlcyBwZXJpb2QgZXZlbnQgb2NjdXJyZWQgb3Igbm90LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9HRVRfUEVSSU9EX0lOVF9GTEFHKHRpbWVyKSAgICAgICAgICAgICAoKCh0aW1lciktPlBXTUlOVFNUUzAgJiBUSU1FUl9QV01JTlRTVFMwX1BJRl9Nc2spPyAxIDogMCkKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgUGVyaW9kIEV2ZW50IEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBjbGVhcnMgcGVyaW9kIGV2ZW50IGludGVycnVwdCBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9DTEVBUl9QRVJJT0RfSU5UX0ZMQUcodGltZXIpICAgICAgICAgICAoKHRpbWVyKS0+UFdNSU5UU1RTMCA9IFRJTUVSX1BXTUlOVFNUUzBfUElGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIENvbXBhcmUgVXAgRXZlbnQgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgY29tcGFyZSB1cCBldmVudCBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0VOQUJMRV9DTVBfVVBfSU5UKHRpbWVyKSAgICAgICAgICAgICAgICgodGltZXIpLT5QV01JTlRFTjAgfD0gVElNRVJfUFdNSU5URU4wX0NNUFVJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIENvbXBhcmUgVXAgRXZlbnQgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIGNvbXBhcmUgdXAgZXZlbnQgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9ESVNBQkxFX0NNUF9VUF9JTlQodGltZXIpICAgICAgICAgICAgICAoKHRpbWVyKS0+UFdNSU5URU4wICY9IH5USU1FUl9QV01JTlRFTjBfQ01QVUlFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBDb21wYXJlIFVwIEV2ZW50IEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHZhbCAgICAgMCAgIENvbXBhcmUgdXAgZXZlbnQgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAgKiBAcmV0dmFsICAgICAxICAgQ29tcGFyZSB1cCBldmVudCBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaW5kaWNhdGVzIGNvbXBhcmUgdXAgZXZlbnQgb2NjdXJyZWQgb3Igbm90LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9HRVRfQ01QX1VQX0lOVF9GTEFHKHRpbWVyKSAgICAgICAgICAgICAoKCh0aW1lciktPlBXTUlOVFNUUzAgJiBUSU1FUl9QV01JTlRTVFMwX0NNUFVJRl9Nc2spPyAxIDogMCkKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgQ29tcGFyZSBVcCBFdmVudCBJbnRlcnJ1cHQgRmxhZworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gY2xlYXJzIGNvbXBhcmUgdXAgZXZlbnQgaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0NMRUFSX0NNUF9VUF9JTlRfRkxBRyh0aW1lcikgICAgICAgICAgICgodGltZXIpLT5QV01JTlRTVFMwID0gVElNRVJfUFdNSU5UU1RTMF9DTVBVSUZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgQ29tcGFyZSBEb3duIEV2ZW50IEludGVycnVwdAorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgdGhlIGNvbXBhcmUgZG93biBldmVudCBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0VOQUJMRV9DTVBfRE9XTl9JTlQodGltZXIpICAgICAgICAgICAgICgodGltZXIpLT5QV01JTlRFTjAgfD0gVElNRVJfUFdNSU5URU4wX0NNUERJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIENvbXBhcmUgRG93biBFdmVudCBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgY29tcGFyZSBkb3duIGV2ZW50IGludGVycnVwdCBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fRElTQUJMRV9DTVBfRE9XTl9JTlQodGltZXIpICAgICAgICAgICAgKCh0aW1lciktPlBXTUlOVEVOMCAmPSB+VElNRVJfUFdNSU5URU4wX0NNUERJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgQ29tcGFyZSBEb3duIEV2ZW50IEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHZhbCAgICAgMCAgIENvbXBhcmUgZG93biBldmVudCBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICAqIEByZXR2YWwgICAgIDEgICBDb21wYXJlIGRvd24gZXZlbnQgaW50ZXJydXB0IG9jY3VycmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGluZGljYXRlcyBjb21wYXJlIGRvd24gZXZlbnQgb2NjdXJyZWQgb3Igbm90LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9HRVRfQ01QX0RPV05fSU5UX0ZMQUcodGltZXIpICAgICAgICAgICAoKCh0aW1lciktPlBXTUlOVFNUUzAgJiBUSU1FUl9QV01JTlRTVFMwX0NNUERJRl9Nc2spPyAxIDogMCkKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgQ29tcGFyZSBEb3duIEV2ZW50IEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBjbGVhcnMgY29tcGFyZSBkb3duIGV2ZW50IGludGVycnVwdCBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9DTEVBUl9DTVBfRE9XTl9JTlRfRkxBRyh0aW1lcikgICAgICAgICAoKHRpbWVyKS0+UFdNSU5UU1RTMCA9IFRJTUVSX1BXTUlOVFNUUzBfQ01QRElGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IENvdW50ZXIgUmVhY2ggTWF4aW11bSBDb3VudCBTdGF0dXMKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgVGltZXIgUFdNIGNvdW50ZXIgbmV2ZXIgY291bnRzIHRvIG1heGltdW0gdmFsdWUKKyAgKiBAcmV0dmFsICAgICAxICAgVGltZXIgUFdNIGNvdW50ZXIgY291bnRzIHRvIG1heGltdW0gdmFsdWUsIDB4RkZGRgorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpbmRpY2F0ZXMgVGltZXIgUFdNIGNvdW50ZXIgaGFzIGNvdW50IHRvIDB4RkZGRiBvciBub3QuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0dFVF9SRUFDSF9NQVhfQ05UX1NUQVRVUyh0aW1lcikgICAgICAgICgoKHRpbWVyKS0+UFdNU1RBVFVTICYgVElNRVJfUFdNU1RBVFVTX0NOVE1BWEZfTXNrKT8gMSA6IDApCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIENvdW50ZXIgUmVhY2ggTWF4aW11bSBDb3VudCBTdGF0dXMKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGNsZWFycyByZWFjaCBtYXhpbXVtIGNvdW50IHN0YXR1cy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fQ0xFQVJfUkVBQ0hfTUFYX0NOVF9TVEFUVVModGltZXIpICAgICAgKCh0aW1lciktPlBXTVNUQVRVUyA9IFRJTUVSX1BXTVNUQVRVU19DTlRNQVhGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFRyaWdnZXIgQURDIFN0YXR1cworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHZhbCAgICAgMCAgICAgICBUcmlnZ2VyIEFEQyBzdGFydCBjb252ZXJzaW9uIGlzIG5vdCBvY2N1cgorICAqIEByZXR2YWwgICAgIDEgICAgICAgU3BlY2lmaWVkIGNvdW50ZXIgY29tcGFyZSBldmVudCBoYXMgdHJpZ2dlciBBREMgc3RhcnQgY29udmVyc2lvbgorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGluZGljYXRlIFBXTSBjb3VudGVyIGNvbXBhcmUgZXZlbnQgaGFzIHRyaWdnZXJlZCBBREMgc3RhcnQgY29udmVyc2lvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fR0VUX1RSR19BRENfU1RBVFVTKHRpbWVyKSAgICAgICAgICAgICAgKCgodGltZXIpLT5QV01TVEFUVVMgJiBUSU1FUl9QV01TVEFUVVNfRUFEQ1RSR0ZfTXNrKT8gMSA6IDApCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIFRyaWdnZXIgQURDIFN0YXR1cworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNsZWFyIFBXTSBjb3VudGVyIGNvbXBhcmUgZXZlbnQgdHJpZ2dlciBBREMgc3RhdHVzLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9DTEVBUl9UUkdfQURDX1NUQVRVUyh0aW1lcikgICAgICAgICAgICAoKHRpbWVyKS0+UFdNU1RBVFVTID0gVElNRVJfUFdNU1RBVFVTX0VBRENUUkdGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IEJyYWtlIEV2ZW50IGF0IEJyYWtlIFBpbiBIaWdoIG9yIExvdy10by1IaWdoCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCBkZXRlY3QgYnJha2UgZXZlbnQgd2hlbiBleHRlcm5hbCBicmFrZSBwaW4gYXQgaGlnaCBsZXZlbCBvciB0cmFuc2ZlciBmcm9tIGxvdyB0byBoaWdoLgorICAgICAgICBUaGUgZGVmYXVsdCBicmFrZSBwaW4gZGV0ZWN0aW9uIGlzIGhpZ2ggbGV2ZWwgb3IgZnJvbSBsb3cgdG8gaGlnaC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fU0VUX0JSQUtFX1BJTl9ISUdIX0RFVEVDVCh0aW1lcikgICAgICAgKCh0aW1lciktPlBXTUJORiAmPSB+VElNRVJfUFdNQk5GX0JSS1BJTlZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgQnJha2UgRXZlbnQgYXQgQnJha2UgUGluIExvdyBvciBIaWdoLXRvLUxvdworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgZGV0ZWN0IGJyYWtlIGV2ZW50IHdoZW4gZXh0ZXJuYWwgYnJha2UgcGluIGF0IGxvdyBsZXZlbCBvciB0cmFuc2ZlciBmcm9tIGhpZ2ggdG8gbG93LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9TRVRfQlJBS0VfUElOX0xPV19ERVRFQ1QodGltZXIpICAgICAgICAoKHRpbWVyKS0+UFdNQk5GIHw9IFRJTUVSX1BXTUJORl9CUktQSU5WX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IEV4dGVybmFsIEJyYWtlIFBpbiBTb3VyY2UKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgcGluICAgICAgICAgVGhlIGV4dGVybmFsIGJyYWtlIHBpbiBzb3VyY2UsIGNvdWxkIGJlIG9uZSBvZiBmb2xsb3dpbmcgc291cmNlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9UTV9CUkFLRTAKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RNX0JSQUtFMQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fVE1fQlJBS0UyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9UTV9CUkFLRTMKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgZGV0ZWN0IGJyYWtlIGV2ZW50IHdoZW4gZXh0ZXJuYWwgYnJha2UgcGluIGF0IGhpZ2ggbGV2ZWwgb3IgdHJhbnNmZXIgZnJvbSBsb3cgdG8gaGlnaC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fU0VUX0JSQUtFX1BJTl9TT1VSQ0UodGltZXIsIHBpbikgICAgICAgKCh0aW1lciktPlBXTUJORiA9ICgodGltZXIpLT5QV01CTkYgJiB+VElNRVJfUFdNQk5GX0JLUElOU1JDX01zaykgfCAoKHBpbik8PFRJTUVSX1BXTUJORl9CS1BJTlNSQ19Qb3MpKQorCisKK3ZvaWQgVFBXTV9TZXRDb3VudGVyQ2xvY2tTb3VyY2UoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkNudENsa1NyYyk7Cit1aW50MzJfdCBUUFdNX0NvbmZpZ091dHB1dEZyZXFBbmREdXR5KFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJGcmVxdWVuY3ksIHVpbnQzMl90IHUzMkR1dHlDeWNsZSk7Cit2b2lkIFRQV01fRW5hYmxlRGVhZFRpbWUoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkRUQ291bnQpOwordm9pZCBUUFdNX0VuYWJsZURlYWRUaW1lV2l0aFByZXNjYWxlKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJEVENvdW50KTsKK3ZvaWQgVFBXTV9EaXNhYmxlRGVhZFRpbWUoVElNRVJfVCAqdGltZXIpOwordm9pZCBUUFdNX0VuYWJsZUNvdW50ZXIoVElNRVJfVCAqdGltZXIpOwordm9pZCBUUFdNX0Rpc2FibGVDb3VudGVyKFRJTUVSX1QgKnRpbWVyKTsKK3ZvaWQgVFBXTV9FbmFibGVUcmlnZ2VyQURDKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJDb25kaXRpb24pOwordm9pZCBUUFdNX0Rpc2FibGVUcmlnZ2VyQURDKFRJTUVSX1QgKnRpbWVyKTsKK3ZvaWQgVFBXTV9FbmFibGVGYXVsdEJyYWtlKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJDSDBMZXZlbCwgdWludDMyX3QgdTMyQ0gxTGV2ZWwsIHVpbnQzMl90IHUzMkJyYWtlU291cmNlKTsKK3ZvaWQgVFBXTV9FbmFibGVGYXVsdEJyYWtlSW50KFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJJbnRTb3VyY2UpOwordm9pZCBUUFdNX0Rpc2FibGVGYXVsdEJyYWtlSW50KFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJJbnRTb3VyY2UpOwordWludDMyX3QgVFBXTV9HZXRGYXVsdEJyYWtlSW50RmxhZyhUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMySW50U291cmNlKTsKK3ZvaWQgVFBXTV9DbGVhckZhdWx0QnJha2VJbnRGbGFnKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJJbnRTb3VyY2UpOwordm9pZCBUUFdNX1NldExvYWRNb2RlKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJMb2FkTW9kZSk7Cit2b2lkIFRQV01fRW5hYmxlQnJha2VQaW5EZWJvdW5jZShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyQnJha2VQaW5TcmMsIHVpbnQzMl90IHUzMkRlYm91bmNlQ250LCB1aW50MzJfdCB1MzJDbGtTcmNTZWwpOwordm9pZCBUUFdNX0Rpc2FibGVCcmFrZVBpbkRlYm91bmNlKFRJTUVSX1QgKnRpbWVyKTsKK3ZvaWQgVFBXTV9FbmFibGVCcmFrZVBpbkludmVyc2UoVElNRVJfVCAqdGltZXIpOwordm9pZCBUUFdNX0Rpc2FibGVCcmFrZVBpbkludmVyc2UoVElNRVJfVCAqdGltZXIpOwordm9pZCBUUFdNX1NldEJyYWtlUGluU291cmNlKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJCcmFrZVBpbk51bSk7CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVElNRVJfUFdNX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFRJTUVSX1BXTV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fVElNRVJfUFdNX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy91YXJ0LmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy91YXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAwZDFhNAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3VhcnQuaApAQCAtMCwwICsxLDQ5OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIFVBUlQuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIFVBUlQgSW50ZXJmYWNlIENvbnRyb2xsZXIgKFVBUlQpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVUFSVF9IX18KKyNkZWZpbmUgX19VQVJUX0hfXworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBVQVJUX0RyaXZlciBVQVJUIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFVBUlRfRVhQT1JURURfQ09OU1RBTlRTIFVBUlQgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVQVJUIEZJRk8gc2l6ZSBjb25zdGFudHMgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVBUlQwX0ZJRk9fU0laRSAxNlVMIC8qITwgVUFSVDAgc3VwcG9ydHMgc2VwYXJhdGVkIHJlY2VpdmUvdHJhbnNtaXQgMTYvMTYgYnl0ZXMgZW50cnkgRklGTyAqLworI2RlZmluZSBVQVJUMV9GSUZPX1NJWkUgMTZVTCAvKiE8IFVBUlQxIHN1cHBvcnRzIHNlcGFyYXRlZCByZWNlaXZlL3RyYW5zbWl0IDE2LzE2IGJ5dGVzIGVudHJ5IEZJRk8gKi8KKyNkZWZpbmUgVUFSVDJfRklGT19TSVpFIDE2VUwgLyohPCBVQVJUMiBzdXBwb3J0cyBzZXBhcmF0ZWQgcmVjZWl2ZS90cmFuc21pdCAxNi8xNiBieXRlcyBlbnRyeSBGSUZPICovCisjZGVmaW5lIFVBUlQzX0ZJRk9fU0laRSAxNlVMIC8qITwgVUFSVDMgc3VwcG9ydHMgc2VwYXJhdGVkIHJlY2VpdmUvdHJhbnNtaXQgMTYvMTYgYnl0ZXMgZW50cnkgRklGTyAqLworI2RlZmluZSBVQVJUNF9GSUZPX1NJWkUgMTZVTCAvKiE8IFVBUlQ0IHN1cHBvcnRzIHNlcGFyYXRlZCByZWNlaXZlL3RyYW5zbWl0IDE2LzE2IGJ5dGVzIGVudHJ5IEZJRk8gKi8KKyNkZWZpbmUgVUFSVDVfRklGT19TSVpFIDE2VUwgLyohPCBVQVJUNSBzdXBwb3J0cyBzZXBhcmF0ZWQgcmVjZWl2ZS90cmFuc21pdCAxNi8xNiBieXRlcyBlbnRyeSBGSUZPICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVUFSVF9GSUZPIGNvbnN0YW50cyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVQVJUX0ZJRk9fUkZJVExfMUJZVEUgICAgICAoMHgwVUwgPDwgVUFSVF9GSUZPX1JGSVRMX1BvcykgICAvKiE8IFVBUlRfRklGTyBzZXR0aW5nIHRvIHNldCBSWCBGSUZPIFRyaWdnZXIgTGV2ZWwgdG8gMSBieXRlICovCisjZGVmaW5lIFVBUlRfRklGT19SRklUTF80QllURVMgICAgICgweDFVTCA8PCBVQVJUX0ZJRk9fUkZJVExfUG9zKSAgIC8qITwgVUFSVF9GSUZPIHNldHRpbmcgdG8gc2V0IFJYIEZJRk8gVHJpZ2dlciBMZXZlbCB0byA0IGJ5dGVzICovCisjZGVmaW5lIFVBUlRfRklGT19SRklUTF84QllURVMgICAgICgweDJVTCA8PCBVQVJUX0ZJRk9fUkZJVExfUG9zKSAgIC8qITwgVUFSVF9GSUZPIHNldHRpbmcgdG8gc2V0IFJYIEZJRk8gVHJpZ2dlciBMZXZlbCB0byA4IGJ5dGVzICovCisjZGVmaW5lIFVBUlRfRklGT19SRklUTF8xNEJZVEVTICAgICgweDNVTCA8PCBVQVJUX0ZJRk9fUkZJVExfUG9zKSAgIC8qITwgVUFSVF9GSUZPIHNldHRpbmcgdG8gc2V0IFJYIEZJRk8gVHJpZ2dlciBMZXZlbCB0byAxNCBieXRlcyAqLworCisjZGVmaW5lIFVBUlRfRklGT19SVFNUUkdMVl8xQllURSAgICAgICgweDBVTCA8PCBVQVJUX0ZJRk9fUlRTVFJHTFZfUG9zKSAgLyohPCBVQVJUX0ZJRk8gc2V0dGluZyB0byBzZXQgUlRTIFRyaWdnZXIgTGV2ZWwgdG8gMSBieXRlICovCisjZGVmaW5lIFVBUlRfRklGT19SVFNUUkdMVl80QllURVMgICAgICgweDFVTCA8PCBVQVJUX0ZJRk9fUlRTVFJHTFZfUG9zKSAgLyohPCBVQVJUX0ZJRk8gc2V0dGluZyB0byBzZXQgUlRTIFRyaWdnZXIgTGV2ZWwgdG8gNCBieXRlcyAqLworI2RlZmluZSBVQVJUX0ZJRk9fUlRTVFJHTFZfOEJZVEVTICAgICAoMHgyVUwgPDwgVUFSVF9GSUZPX1JUU1RSR0xWX1BvcykgIC8qITwgVUFSVF9GSUZPIHNldHRpbmcgdG8gc2V0IFJUUyBUcmlnZ2VyIExldmVsIHRvIDggYnl0ZXMgKi8KKyNkZWZpbmUgVUFSVF9GSUZPX1JUU1RSR0xWXzE0QllURVMgICAgKDB4M1VMIDw8IFVBUlRfRklGT19SVFNUUkdMVl9Qb3MpICAvKiE8IFVBUlRfRklGTyBzZXR0aW5nIHRvIHNldCBSVFMgVHJpZ2dlciBMZXZlbCB0byAxNCBieXRlcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVQVJUX0xJTkUgY29uc3RhbnRzIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVBUlRfV09SRF9MRU5fNSAgICAgKDBVTCkgLyohPCBVQVJUX0xJTkUgc2V0dGluZyB0byBzZXQgVUFSVCB3b3JkIGxlbmd0aCB0byA1IGJpdHMgKi8KKyNkZWZpbmUgVUFSVF9XT1JEX0xFTl82ICAgICAoMVVMKSAvKiE8IFVBUlRfTElORSBzZXR0aW5nIHRvIHNldCBVQVJUIHdvcmQgbGVuZ3RoIHRvIDYgYml0cyAqLworI2RlZmluZSBVQVJUX1dPUkRfTEVOXzcgICAgICgyVUwpIC8qITwgVUFSVF9MSU5FIHNldHRpbmcgdG8gc2V0IFVBUlQgd29yZCBsZW5ndGggdG8gNyBiaXRzICovCisjZGVmaW5lIFVBUlRfV09SRF9MRU5fOCAgICAgKDNVTCkgLyohPCBVQVJUX0xJTkUgc2V0dGluZyB0byBzZXQgVUFSVCB3b3JkIGxlbmd0aCB0byA4IGJpdHMgKi8KKworI2RlZmluZSBVQVJUX1BBUklUWV9OT05FICAgICgweDBVTCA8PCBVQVJUX0xJTkVfUEJFX1BvcykgLyohPCBVQVJUX0xJTkUgc2V0dGluZyB0byBzZXQgVUFSVCBhcyBubyBwYXJpdHkgICAqLworI2RlZmluZSBVQVJUX1BBUklUWV9PREQgICAgICgweDFVTCA8PCBVQVJUX0xJTkVfUEJFX1BvcykgLyohPCBVQVJUX0xJTkUgc2V0dGluZyB0byBzZXQgVUFSVCBhcyBvZGQgcGFyaXR5ICAqLworI2RlZmluZSBVQVJUX1BBUklUWV9FVkVOICAgICgweDNVTCA8PCBVQVJUX0xJTkVfUEJFX1BvcykgLyohPCBVQVJUX0xJTkUgc2V0dGluZyB0byBzZXQgVUFSVCBhcyBldmVuIHBhcml0eSAqLworI2RlZmluZSBVQVJUX1BBUklUWV9NQVJLICAgICgweDVVTCA8PCBVQVJUX0xJTkVfUEJFX1BvcykgLyohPCBVQVJUX0xJTkUgc2V0dGluZyB0byBrZWVwIHBhcml0eSBiaXQgYXMgJzEnICAqLworI2RlZmluZSBVQVJUX1BBUklUWV9TUEFDRSAgICgweDdVTCA8PCBVQVJUX0xJTkVfUEJFX1BvcykgLyohPCBVQVJUX0xJTkUgc2V0dGluZyB0byBrZWVwIHBhcml0eSBiaXQgYXMgJzAnICAqLworCisjZGVmaW5lIFVBUlRfU1RPUF9CSVRfMSAgICAgKDB4MFVMIDw8IFVBUlRfTElORV9OU0JfUG9zKSAvKiE8IFVBUlRfTElORSBzZXR0aW5nIGZvciBvbmUgc3RvcCBiaXQgKi8KKyNkZWZpbmUgVUFSVF9TVE9QX0JJVF8xXzUgICAoMHgxVUwgPDwgVUFSVF9MSU5FX05TQl9Qb3MpIC8qITwgVUFSVF9MSU5FIHNldHRpbmcgZm9yIDEuNSBzdG9wIGJpdCB3aGVuIDUtYml0IHdvcmQgbGVuZ3RoICovCisjZGVmaW5lIFVBUlRfU1RPUF9CSVRfMiAgICAgKDB4MVVMIDw8IFVBUlRfTElORV9OU0JfUG9zKSAvKiE8IFVBUlRfTElORSBzZXR0aW5nIGZvciB0d28gc3RvcCBiaXQgd2hlbiA2LCA3LCA4LWJpdCB3b3JkIGxlbmd0aCAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVBUlQgUlRTIEFDVElWRSBMRVZFTCBjb25zdGFudHMgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVUFSVF9SVFNfSVNfTE9XX0xFVl9BQ1RJVkUgICAoMHgxVUwgPDwgVUFSVF9NT0RFTV9SVFNBQ1RMVl9Qb3MpIC8qITwgU2V0IFJUUyBpcyBMb3cgTGV2ZWwgQWN0aXZlICovCisjZGVmaW5lIFVBUlRfUlRTX0lTX0hJR0hfTEVWX0FDVElWRSAgKDB4MFVMIDw8IFVBUlRfTU9ERU1fUlRTQUNUTFZfUG9zKSAvKiE8IFNldCBSVFMgaXMgSGlnaCBMZXZlbCBBY3RpdmUgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVQVJUX0lSREEgY29uc3RhbnRzIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVBUlRfSVJEQV9UWEVOICAgICAgKDB4MVVMIDw8IFVBUlRfSVJEQV9UWEVOX1BvcykgLyohPCBTZXQgSXJEQSBmdW5jdGlvbiBUeCBtb2RlICovCisjZGVmaW5lIFVBUlRfSVJEQV9SWEVOICAgICAgKDB4MFVMIDw8IFVBUlRfSVJEQV9UWEVOX1BvcykgLyohPCBTZXQgSXJEQSBmdW5jdGlvbiBSeCBtb2RlICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVUFSVF9GVU5DU0VMIGNvbnN0YW50cyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVQVJUX0ZVTkNTRUxfVUFSVCAgKDB4MFVMIDw8IFVBUlRfRlVOQ1NFTF9GVU5DU0VMX1BvcykgLyohPCBVQVJUX0ZVTkNTRUwgc2V0dGluZyB0byBzZXQgVUFSVCBGdW5jdGlvbiAoRGVmYXVsdCkgKi8KKyNkZWZpbmUgVUFSVF9GVU5DU0VMX0xJTiAgICgweDFVTCA8PCBVQVJUX0ZVTkNTRUxfRlVOQ1NFTF9Qb3MpIC8qITwgVUFSVF9GVU5DU0VMIHNldHRpbmcgdG8gc2V0IExJTiBGdW5jdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfRlVOQ1NFTF9JckRBICAoMHgyVUwgPDwgVUFSVF9GVU5DU0VMX0ZVTkNTRUxfUG9zKSAvKiE8IFVBUlRfRlVOQ1NFTCBzZXR0aW5nIHRvIHNldCBJckRBIEZ1bmN0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0ZVTkNTRUxfUlM0ODUgKDB4M1VMIDw8IFVBUlRfRlVOQ1NFTF9GVU5DU0VMX1BvcykgLyohPCBVQVJUX0ZVTkNTRUwgc2V0dGluZyB0byBzZXQgUlM0ODUgRnVuY3Rpb24gICAgICAgICAgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVQVJUX0xJTkNUTCBjb25zdGFudHMgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVBUlRfTElOQ1RMX0JSS0ZMKHgpICAgICgoKHgpLTFVTCkgPDwgVUFSVF9MSU5DVExfQlJLRkxfUG9zKSAgLyohPCBVQVJUX0xJTkNUTCBzZXR0aW5nIHRvIHNldCBMSU4gQnJlYWsgRmllbGQgTGVuZ3RoLCB4ID0gMTAgfiAxNSwgZGVmYXVsdCB2YWx1ZSBpcyAxMiAqLworI2RlZmluZSBVQVJUX0xJTkNUTF9CU0woeCkgICAgICAoKCh4KS0xVUwpIDw8IFVBUlRfTElOQ1RMX0JTTF9Qb3MpICAgIC8qITwgVUFSVF9MSU5DVEwgc2V0dGluZyB0byBzZXQgTElOIEJyZWFrL1N5bmMgRGVsaW1pdGVyIExlbmd0aCwgeCA9IDEgfiA0ICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX0hTRUxfQlJFQUsgICAgICAgICAgICAgKDB4MFVMIDw8IFVBUlRfTElOQ1RMX0hTRUxfUG9zKSAgICAvKiE8IFVBUlRfTElOQ1RMIHNldHRpbmcgdG8gc2V0IExJTiBIZWFkZXIgU2VsZWN0IHRvIGJyZWFrIGZpZWxkICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX0hTRUxfQlJFQUtfU1lOQyAgICAgICAgKDB4MVVMIDw8IFVBUlRfTElOQ1RMX0hTRUxfUG9zKSAgICAvKiE8IFVBUlRfTElOQ1RMIHNldHRpbmcgdG8gc2V0IExJTiBIZWFkZXIgU2VsZWN0IHRvIGJyZWFrIGZpZWxkIGFuZCBzeW5jIGZpZWxkICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX0hTRUxfQlJFQUtfU1lOQ19JRCAgICAgKDB4MlVMIDw8IFVBUlRfTElOQ1RMX0hTRUxfUG9zKSAgICAvKiE8IFVBUlRfTElOQ1RMIHNldHRpbmcgdG8gc2V0IExJTiBIZWFkZXIgU2VsZWN0IHRvIGJyZWFrIGZpZWxkLCBzeW5jIGZpZWxkIGFuZCBJRCBmaWVsZCovCisjZGVmaW5lIFVBUlRfTElOQ1RMX1BJRCh4KSAgICAgICgoeCkgPDwgVUFSVF9MSU5DVExfUElEX1BvcykgICAgICAgLyohPCBVQVJUX0xJTkNUTCBzZXR0aW5nIHRvIHNldCBMSU4gUElEIHZhbHVlICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVUFSVCBCQVVEUkFURSBNT0RFIGNvbnN0YW50cyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVQVJUX0JBVURfTU9ERTAgICAgICgwVUwpIC8qITwgU2V0IFVBUlQgQmF1ZHJhdGUgTW9kZSBpcyBNb2RlMCAqLworI2RlZmluZSBVQVJUX0JBVURfTU9ERTIgICAgIChVQVJUX0JBVURfQkFVRE0xX01zayB8IFVBUlRfQkFVRF9CQVVETTBfTXNrKSAvKiE8IFNldCBVQVJUIEJhdWRyYXRlIE1vZGUgaXMgTW9kZTIgKi8KKworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVUFSVF9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgVUFSVF9FWFBPUlRFRF9GVU5DVElPTlMgVUFSVCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIENhbGN1bGF0ZSBVQVJUIGJhdWRyYXRlIG1vZGUwIGRpdmlkZXIKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHUzMlNyY0ZyZXEgICAgICBVQVJUIGNsb2NrIGZyZXF1ZW5jeQorICogICAgQHBhcmFtW2luXSAgICB1MzJCYXVkUmF0ZSAgICAgQmF1ZHJhdGUgb2YgVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIFVBUlQgYmF1ZHJhdGUgbW9kZTAgZGl2aWRlcgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBjYWxjdWxhdGUgVUFSVCBiYXVkcmF0ZSBtb2RlMCBkaXZpZGVyLgorICovCisjZGVmaW5lIFVBUlRfQkFVRF9NT0RFMF9ESVZJREVSKHUzMlNyY0ZyZXEsIHUzMkJhdWRSYXRlKSAgICAoKCgodTMyU3JjRnJlcSkgKyAoKHUzMkJhdWRSYXRlKSo4dWwpKSAvICh1MzJCYXVkUmF0ZSkgPj4gNHVsKS0ydWwpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIENhbGN1bGF0ZSBVQVJUIGJhdWRyYXRlIG1vZGUyIGRpdmlkZXIKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHUzMlNyY0ZyZXEgICAgICBVQVJUIGNsb2NrIGZyZXF1ZW5jeQorICogICAgQHBhcmFtW2luXSAgICB1MzJCYXVkUmF0ZSAgICAgQmF1ZHJhdGUgb2YgVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIFVBUlQgYmF1ZHJhdGUgbW9kZTIgZGl2aWRlcgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBjYWxjdWxhdGUgVUFSVCBiYXVkcmF0ZSBtb2RlMiBkaXZpZGVyLgorICovCisjZGVmaW5lIFVBUlRfQkFVRF9NT0RFMl9ESVZJREVSKHUzMlNyY0ZyZXEsIHUzMkJhdWRSYXRlKSAgICAoKCgodTMyU3JjRnJlcSkgKyAoKHUzMkJhdWRSYXRlKS8ydWwpKSAvICh1MzJCYXVkUmF0ZSkpLTJ1bCkKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgV3JpdGUgVUFSVCBkYXRhCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqICAgIEBwYXJhbVtpbl0gICAgdThEYXRhICBEYXRhIGJ5dGUgdG8gdHJhbnNtaXQuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIHdyaXRlIERhdGEgdG8gVHggZGF0YSByZWdpc3Rlci4KKyAqLworI2RlZmluZSBVQVJUX1dSSVRFKHVhcnQsIHU4RGF0YSkgICAgKCh1YXJ0KS0+REFUID0gKHU4RGF0YSkpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFJlYWQgVUFSVCBkYXRhCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIFRoZSBvbGRlc3QgZGF0YSBieXRlIGluIFJYIEZJRk8uCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIHJlYWQgUnggZGF0YSByZWdpc3Rlci4KKyAqLworI2RlZmluZSBVQVJUX1JFQUQodWFydCkgICAgKCh1YXJ0KS0+REFUKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBHZXQgVHggZW1wdHkKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCAgIFR4IEZJRk8gaXMgbm90IGVtcHR5CisgKiAgICBAcmV0dmFsICAgICAgID49MSBUeCBGSUZPIGlzIGVtcHR5CisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGdldCBUcmFuc21pdHRlciBGSUZPIGVtcHR5IHJlZ2lzdGVyIHZhbHVlLgorICovCisjZGVmaW5lIFVBUlRfR0VUX1RYX0VNUFRZKHVhcnQpICAgICgodWFydCktPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfVFhFTVBUWV9Nc2spCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEdldCBSeCBlbXB0eQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlCisgKgorICogICAgQHJldHZhbCAgICAgICAwICAgUnggRklGTyBpcyBub3QgZW1wdHkKKyAqICAgIEByZXR2YWwgICAgICAgPj0xIFJ4IEZJRk8gaXMgZW1wdHkKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZ2V0IFJlY2VpdmVyIEZJRk8gZW1wdHkgcmVnaXN0ZXIgdmFsdWUuCisgKi8KKyNkZWZpbmUgVUFSVF9HRVRfUlhfRU1QVFkodWFydCkgICAgKCh1YXJ0KS0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19SWEVNUFRZX01zaykKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgQ2hlY2sgc3BlY2lmaWVkIHVhcnQgcG9ydCB0cmFuc21pc3Npb24gaXMgb3Zlci4KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCBUeCB0cmFuc21pc3Npb24gaXMgbm90IG92ZXIKKyAqICAgIEByZXR2YWwgICAgICAgMSBUeCB0cmFuc21pc3Npb24gaXMgb3ZlcgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyByZXR1cm4gVHJhbnNtaXR0ZXIgRW1wdHkgRmxhZyByZWdpc3RlciBiaXQgdmFsdWUuCisgKiAgICAgICAgICAgICAgICAgIEl0IGluZGljYXRlcyBpZiBzcGVjaWZpZWQgdWFydCBwb3J0IHRyYW5zbWlzc2lvbiBpcyBvdmVyIG5vciBub3QuCisgKi8KKyNkZWZpbmUgVUFSVF9JU19UWF9FTVBUWSh1YXJ0KSAgICAoKCh1YXJ0KS0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19UWEVNUFRZRl9Nc2spID4+IFVBUlRfRklGT1NUU19UWEVNUFRZRl9Qb3MpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFdhaXQgc3BlY2lmaWVkIHVhcnQgcG9ydCB0cmFuc21pc3Npb24gaXMgb3ZlcgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIHdhaXQgc3BlY2lmaWVkIHVhcnQgcG9ydCB0cmFuc21pc3Npb24gaXMgb3Zlci4KKyAqLworI2RlZmluZSBVQVJUX1dBSVRfVFhfRU1QVFkodWFydCkgICAgd2hpbGUoISgoKCh1YXJ0KS0+RklGT1NUUykgJiBVQVJUX0ZJRk9TVFNfVFhFTVBUWUZfTXNrKSA+PiBVQVJUX0ZJRk9TVFNfVFhFTVBUWUZfUG9zKSkKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgQ2hlY2sgUlggaXMgcmVhZHkgb3Igbm90CisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgVGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgUlggRklGTyBpcyBsZXNzIHRoYW4gdGhlIFJGSVRMCisgKiAgICBAcmV0dmFsICAgICAgIDEgVGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgUlggRklGTyBlcXVhbHMgb3IgbGFyZ2VyIHRoYW4gUkZJVEwKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gY2hlY2sgcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSBpbnRlcnJ1cHQgZmxhZyBpcyBzZXQgb3Igbm90LgorICovCisjZGVmaW5lIFVBUlRfSVNfUlhfUkVBRFkodWFydCkgICAgKCgodWFydCktPklOVFNUUyAmIFVBUlRfSU5UU1RTX1JEQUlGX01zayk+PlVBUlRfSU5UU1RTX1JEQUlGX1BvcykKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgQ2hlY2sgVFggRklGTyBpcyBmdWxsIG9yIG5vdAorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlCisgKgorICogICAgQHJldHZhbCAgICAgICAxIFRYIEZJRk8gaXMgZnVsbAorICogICAgQHJldHZhbCAgICAgICAwIFRYIEZJRk8gaXMgbm90IGZ1bGwKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gY2hlY2sgVFggRklGTyBpcyBmdWxsIG9yIG5vdC4KKyAqLworI2RlZmluZSBVQVJUX0lTX1RYX0ZVTEwodWFydCkgICAgKCgodWFydCktPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfVFhGVUxMX01zayk+PlVBUlRfRklGT1NUU19UWEZVTExfUG9zKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDaGVjayBSWCBGSUZPIGlzIGZ1bGwgb3Igbm90CisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDEgUlggRklGTyBpcyBmdWxsCisgKiAgICBAcmV0dmFsICAgICAgIDAgUlggRklGTyBpcyBub3QgZnVsbAorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBjaGVjayBSWCBGSUZPIGlzIGZ1bGwgb3Igbm90LgorICovCisjZGVmaW5lIFVBUlRfSVNfUlhfRlVMTCh1YXJ0KSAgICAoKCh1YXJ0KS0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19SWEZVTExfTXNrKT4+VUFSVF9GSUZPU1RTX1JYRlVMTF9Qb3MpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEdldCBUeCBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgICBUeCBGSUZPIGlzIG5vdCBmdWxsLgorICogICAgQHJldHZhbCAgICAgICA+PTEgVHggRklGTyBpcyBmdWxsLgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBnZXQgVHggZnVsbCByZWdpc3RlciB2YWx1ZS4KKyAqLworI2RlZmluZSBVQVJUX0dFVF9UWF9GVUxMKHVhcnQpICAgICgodWFydCktPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfVFhGVUxMX01zaykKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgR2V0IFJ4IGZ1bGwgcmVnaXN0ZXIgdmFsdWUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCAgIFJ4IEZJRk8gaXMgbm90IGZ1bGwuCisgKiAgICBAcmV0dmFsICAgICAgID49MSBSeCBGSUZPIGlzIGZ1bGwuCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGdldCBSeCBmdWxsIHJlZ2lzdGVyIHZhbHVlLgorICovCisjZGVmaW5lIFVBUlRfR0VUX1JYX0ZVTEwodWFydCkgICAgKCh1YXJ0KS0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19SWEZVTExfTXNrKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBFbmFibGUgc3BlY2lmaWVkIFVBUlQgaW50ZXJydXB0CisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlCisgKiAgICBAcGFyYW1baW5dICAgIHUzMmVJbnRTZWwgIEludGVycnVwdCB0eXBlIHNlbGVjdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9UWEVORElFTl9Nc2sgICA6IFRyYW5zbWl0dGVyIGVtcHR5IGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9BQlJJRU5fTXNrICAgICA6IEF1dG8gYmF1ZCByYXRlIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9MSU5JRU5fTXNrICAgICA6IExpbiBidXMgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1dLSUVOX01zayAgICAgIDogV2FrZS11cCBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fQlVGRVJSSUVOX01zayAgOiBCdWZmZXIgRXJyb3IgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1JYVE9JRU5fTXNrICAgIDogUnggdGltZS1vdXQgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX01PREVNSUVOX01zayAgIDogTW9kZW0gaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1JMU0lFTl9Nc2sgICAgIDogUnggTGluZSBzdGF0dXMgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1RIUkVJRU5fTXNrICAgIDogVHggZW1wdHkgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1JEQUlFTl9Nc2sgICAgIDogUnggcmVhZHkgaW50ZXJydXB0CisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGVuYWJsZSBzcGVjaWZpZWQgVUFSVCBpbnRlcnJ1cHQuCisgKi8KKyNkZWZpbmUgVUFSVF9FTkFCTEVfSU5UKHVhcnQsIHUzMmVJbnRTZWwpICAgICgodWFydCktPklOVEVOIHw9ICh1MzJlSW50U2VsKSkKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRGlzYWJsZSBzcGVjaWZpZWQgVUFSVCBpbnRlcnJ1cHQKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyZUludFNlbCAgSW50ZXJydXB0IHR5cGUgc2VsZWN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1RYRU5ESUVOX01zayAgIDogVHJhbnNtaXR0ZXIgRW1wdHkgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX0FCUklFTl9Nc2sgICAgIDogQXV0by1iYXVkIFJhdGUgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX0xJTklFTl9Nc2sgICAgIDogTGluIEJ1cyBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fV0tJRU5fTXNrICAgICAgOiBXYWtlLXVwIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9CVUZFUlJJRU5fTXNrICA6IEJ1ZmZlciBFcnJvciBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fUlhUT0lFTl9Nc2sgICAgOiBSeCBUaW1lLW91dCBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fTU9ERU1JRU5fTXNrICAgOiBNT0RFTSBTdGF0dXMgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1JMU0lFTl9Nc2sgICAgIDogUmVjZWl2ZSBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fVEhSRUlFTl9Nc2sgICAgOiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyIEVtcHR5IEludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9SREFJRU5fTXNrICAgICA6IFJlY2VpdmUgRGF0YSBBdmFpbGFibGUgSW50ZXJydXB0CisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGVuYWJsZSBzcGVjaWZpZWQgVUFSVCBpbnRlcnJ1cHQuCisgKi8KKyNkZWZpbmUgVUFSVF9ESVNBQkxFX0lOVCh1YXJ0LCB1MzJlSW50U2VsKSAgICAoKHVhcnQpLT5JTlRFTiAmPSB+ICh1MzJlSW50U2VsKSkKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgR2V0IHNwZWNpZmllZCBpbnRlcnJ1cHQgZmxhZy9zdGF0dXMKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlCisgKiAgICBAcGFyYW1baW5dICAgIHUzMmVJbnRUeXBlRmxhZyBJbnRlcnJ1cHQgVHlwZSBGbGFnLCBzaG91bGQgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19IV0JVRkVJTlRfTXNrIDogUERNQSBNb2RlIEJ1ZmZlciBFcnJvciBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfSFdUT0lOVF9Nc2sgICA6IFBETUEgTW9kZSBSeCBUaW1lLW91dCBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfSFdNT0RJTlRfTXNrICA6IFBETUEgTW9kZSBNT0RFTSBTdGF0dXMgSW50ZXJydXB0IEluZGljYXRvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX0hXUkxTSU5UX01zayAgOiBQRE1BIE1vZGUgUmVjZWl2ZSBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfSFdCVUZFSUZfTXNrICA6IFBETUEgTW9kZSBCdWZmZXIgRXJyb3IgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19IV1RPSUZfTXNrICAgIDogUERNQSBNb2RlIFRpbWUtb3V0IEludGVycnVwdCBGbGFnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfSFdNT0RJRl9Nc2sgICA6IFBETUEgTW9kZSBNT0RFTSBTdGF0dXMgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19IV1JMU0lGX01zayAgIDogUERNQSBNb2RlIFJlY2VpdmUgTGluZSBTdGF0dXMgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX0FCUklOVF9Nc2sgICAgOiBBdXRvLWJhdWQgUmF0ZSBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfVFhFTkRJTlRfTXNrICA6IFRyYW5zbWl0dGVyIEVtcHR5IEludGVycnVwdCBJbmRpY2F0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19MSU5JTlRfTXNrICAgIDogTElOIEJ1cyBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfV0tJTlRfTXNrICAgICA6IFdha2UtdXAgSW50ZXJydXB0IEluZGljYXRvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX0JVRkVSUklOVF9Nc2sgOiBCdWZmZXIgRXJyb3IgSW50ZXJydXB0IEluZGljYXRvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX1JYVE9JTlRfTXNrICAgOiBSeCBUaW1lLW91dCBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfTU9ERU1JTlRfTXNrICA6IE1vZGVtIFN0YXR1cyBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfUkxTSU5UX01zayAgICA6IFJlY2VpdmUgTGluZSBTdGF0dXMgSW50ZXJydXB0IEluZGljYXRvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX1RIUkVJTlRfTXNrICAgOiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyIEVtcHR5IEludGVycnVwdCBJbmRpY2F0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19SREFJTlRfTXNrICAgIDogUmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfVFhFTkRJRl9Nc2sgICA6IFRyYW5zbWl0dGVyIEVtcHR5IEludGVycnVwdCBGbGFnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfTElOSUZfTXNrICAgICA6IExJTiBCdXMgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19XS0lGX01zayAgICAgIDogV2FrZS11cCBJbnRlcnJ1cHQgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX0JVRkVSUklGX01zayAgOiBCdWZmZXIgRXJyb3IgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19SWFRPSUZfTXNrICAgIDogUnggVGltZS1vdXQgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19NT0RFTUlGX01zayAgIDogTU9ERU0gU3RhdHVzIEludGVycnVwdCBGbGFnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfUkxTSUZfTXNrICAgICA6IFJlY2VpdmUgTGluZSBTdGF0dXMgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19USFJFSUZfTXNrICAgIDogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciBFbXB0eSBJbnRlcnJ1cHQgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX1JEQUlGX01zayAgICAgOiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlIEludGVycnVwdCBGbGFnCisgKgorICogICAgQHJldHZhbCAgICAgICAwIFRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IGlzIG5vdCBoYXBwZW5lZC4KKyAqICAgICAgICAgICAgICAgICAgMSBUaGUgc3BlY2lmaWVkIGludGVycnVwdCBpcyBoYXBwZW5lZC4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZ2V0IHNwZWNpZmllZCBpbnRlcnJ1cHQgZmxhZyBvciBpbnRlcnJ1cHQgaW5kaWNhdG9yIHN0YXR1cy4KKyAqLworI2RlZmluZSBVQVJUX0dFVF9JTlRfRkxBRyh1YXJ0LHUzMmVJbnRUeXBlRmxhZykgICAgKCgodWFydCktPklOVFNUUyAmICh1MzJlSW50VHlwZUZsYWcpKT8xOjApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIERlY2xhcmUgdGhlc2UgaW5saW5lIGZ1bmN0aW9ucyBoZXJlIHRvIGF2b2lkIE1JU1JBIEMgMjAwNCBydWxlIDguMSBlcnJvciAqLworc3RhdGljIF9fSU5MSU5FIHZvaWQgVUFSVF9DTEVBUl9SVFMoVUFSVF9UKiB1YXJ0KTsKK3N0YXRpYyBfX0lOTElORSB2b2lkIFVBUlRfU0VUX1JUUyhVQVJUX1QqIHVhcnQpOworCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBTZXQgUlRTIHBpbiB0byBsb3cKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBzZXQgUlRTIHBpbiB0byBsb3cuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFVBUlRfQ0xFQVJfUlRTKFVBUlRfVCogdWFydCkKK3sKKyAgICB1YXJ0LT5NT0RFTSB8PSBVQVJUX01PREVNX1JUU0FDVExWX01zazsKKyAgICB1YXJ0LT5NT0RFTSAmPSB+VUFSVF9NT0RFTV9SVFNfTXNrOworfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBTZXQgUlRTIHBpbiB0byBoaWdoCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gc2V0IFJUUyBwaW4gdG8gaGlnaC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgVUFSVF9TRVRfUlRTKFVBUlRfVCogdWFydCkKK3sKKyAgICB1YXJ0LT5NT0RFTSB8PSBVQVJUX01PREVNX1JUU0FDVExWX01zayB8IFVBUlRfTU9ERU1fUlRTX01zazsKK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgQ2xlYXIgUlMtNDg1IEFkZHJlc3MgQnl0ZSBEZXRlY3Rpb24gRmxhZworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGNsZWFyIFJTLTQ4NSBhZGRyZXNzIGJ5dGUgZGV0ZWN0aW9uIGZsYWcuCisgKi8KKyNkZWZpbmUgVUFSVF9SUzQ4NV9DTEVBUl9BRERSX0ZMQUcodWFydCkgICAgKCh1YXJ0KS0+RklGT1NUUyA9IFVBUlRfRklGT1NUU19BRERSREVURl9Nc2spCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEdldCBSUy00ODUgQWRkcmVzcyBCeXRlIERldGVjdGlvbiBGbGFnCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgUmVjZWl2ZXIgZGV0ZWN0cyBhIGRhdGEgdGhhdCBpcyBub3QgYW4gYWRkcmVzcyBiaXQuCisgKiAgICBAcmV0dmFsICAgICAgIDEgUmVjZWl2ZXIgZGV0ZWN0cyBhIGRhdGEgdGhhdCBpcyBhbiBhZGRyZXNzIGJpdC4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZ2V0IFJTLTQ4NSBhZGRyZXNzIGJ5dGUgZGV0ZWN0aW9uIGZsYWcuCisgKi8KKyNkZWZpbmUgVUFSVF9SUzQ4NV9HRVRfQUREUl9GTEFHKHVhcnQpICAgICgoKHVhcnQpLT5GSUZPU1RTICAmIFVBUlRfRklGT1NUU19BRERSREVURl9Nc2spID4+IFVBUlRfRklGT1NUU19BRERSREVURl9Qb3MpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEVuYWJsZSBzcGVjaWZpZWQgVUFSVCBQRE1BIGZ1bmN0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkZ1bmNTZWwgIENvbWJpbmF0aW9uIG9mIGZvbGxvd2luZyBmdW5jdGlvbnMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9UWFBETUFFTl9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9SWFBETUFFTl9Nc2sKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZW5hYmxlIHNwZWNpZmllZCBVQVJUIFBETUEgZnVuY3Rpb24uCisgKi8KKyNkZWZpbmUgVUFSVF9QRE1BX0VOQUJMRSh1YXJ0LCB1MzJGdW5jU2VsKSAgICAoKHVhcnQpLT5JTlRFTiB8PSAodTMyRnVuY1NlbCkpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIERpc2FibGUgc3BlY2lmaWVkIFVBUlQgUERNQSBmdW5jdGlvbgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICogICAgQHBhcmFtW2luXSAgICB1MzJGdW5jU2VsICBDb21iaW5hdGlvbiBvZiBmb2xsb3dpbmcgZnVuY3Rpb25zCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fVFhQRE1BRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fUlhQRE1BRU5fTXNrCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGRpc2FibGUgc3BlY2lmaWVkIFVBUlQgUERNQSBmdW5jdGlvbi4KKyAqLworI2RlZmluZSBVQVJUX1BETUFfRElTQUJMRSh1YXJ0LCB1MzJGdW5jU2VsKSAgICAoKHVhcnQpLT5JTlRFTiAmPSB+KHUzMkZ1bmNTZWwpKQorCisKK3ZvaWQgVUFSVF9DbGVhckludEZsYWcoVUFSVF9UKiB1YXJ0LCB1aW50MzJfdCB1MzJJbnRlcnJ1cHRGbGFnKTsKK3ZvaWQgVUFSVF9DbG9zZShVQVJUX1QqIHVhcnQpOwordm9pZCBVQVJUX0Rpc2FibGVGbG93Q3RybChVQVJUX1QqIHVhcnQpOwordm9pZCBVQVJUX0Rpc2FibGVJbnQoVUFSVF9UKiAgdWFydCwgdWludDMyX3QgdTMySW50ZXJydXB0RmxhZyk7Cit2b2lkIFVBUlRfRW5hYmxlRmxvd0N0cmwoVUFSVF9UKiB1YXJ0KTsKK3ZvaWQgVUFSVF9FbmFibGVJbnQoVUFSVF9UKiAgdWFydCwgdWludDMyX3QgdTMySW50ZXJydXB0RmxhZyk7Cit2b2lkIFVBUlRfT3BlbihVQVJUX1QqIHVhcnQsIHVpbnQzMl90IHUzMmJhdWRyYXRlKTsKK3VpbnQzMl90IFVBUlRfUmVhZChVQVJUX1QqIHVhcnQsIHVpbnQ4X3QgcHU4UnhCdWZbXSwgdWludDMyX3QgdTMyUmVhZEJ5dGVzKTsKK3ZvaWQgVUFSVF9TZXRMaW5lQ29uZmlnKFVBUlRfVCogdWFydCwgdWludDMyX3QgdTMyYmF1ZHJhdGUsIHVpbnQzMl90IHUzMmRhdGFfd2lkdGgsIHVpbnQzMl90IHUzMnBhcml0eSwgdWludDMyX3QgIHUzMnN0b3BfYml0cyk7Cit2b2lkIFVBUlRfU2V0VGltZW91dENudChVQVJUX1QqIHVhcnQsIHVpbnQzMl90IHUzMlRPQyk7Cit2b2lkIFVBUlRfU2VsZWN0SXJEQU1vZGUoVUFSVF9UKiB1YXJ0LCB1aW50MzJfdCB1MzJCdWFkcmF0ZSwgdWludDMyX3QgdTMyRGlyZWN0aW9uKTsKK3ZvaWQgVUFSVF9TZWxlY3RSUzQ4NU1vZGUoVUFSVF9UKiB1YXJ0LCB1aW50MzJfdCB1MzJNb2RlLCB1aW50MzJfdCB1MzJBZGRyKTsKK3ZvaWQgVUFSVF9TZWxlY3RMSU5Nb2RlKFVBUlRfVCogdWFydCwgdWludDMyX3QgdTMyTW9kZSwgdWludDMyX3QgdTMyQnJlYWtMZW5ndGgpOwordWludDMyX3QgVUFSVF9Xcml0ZShVQVJUX1QqIHVhcnQsIHVpbnQ4X3QgcHU4VHhCdWZbXSwgdWludDMyX3QgdTMyV3JpdGVCeXRlcyk7CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVQVJUX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVBUlRfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1VBUlRfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3VzYmQuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3VzYmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNiODIwCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdXNiZC5oCkBAIC0wLDAgKzEsNzMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdXNiZC5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgVVNCRCBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxOC0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19VU0JEX0hfXworI2RlZmluZSBfX1VTQkRfSF9fCisKKyNkZWZpbmUgU1VQUE9SVF9MUE0gICAgIC8vIGRlZmluZSB0byBzdXBwb3J0IExQTQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgVVNCRF9Ecml2ZXIgVVNCRCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBVU0JEX0VYUE9SVEVEX1NUUlVDVFMgVVNCRCBFeHBvcnRlZCBTdHJ1Y3RzCisgIEB7CisqLworCit0eXBlZGVmIHN0cnVjdCBzX3VzYmRfaW5mbworeworICAgIHVpbnQ4X3QgKmd1OERldkRlc2M7ICAgICAgICAgICAgLyohPCBQb2ludGVyIGZvciBVU0IgRGV2aWNlIERlc2NyaXB0b3IgICAgICAgICAgKi8KKyAgICB1aW50OF90ICpndThDb25maWdEZXNjOyAgICAgICAgIC8qITwgUG9pbnRlciBmb3IgVVNCIENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvciAgICovCisgICAgdWludDhfdCAqKmd1OFN0cmluZ0Rlc2M7ICAgICAgICAvKiE8IFBvaW50ZXIgZm9yIFVTQiBTdHJpbmcgRGVzY3JpcHRvciBwb2ludGVycyAqLworICAgIHVpbnQ4X3QgKipndThIaWRSZXBvcnREZXNjOyAgICAgLyohPCBQb2ludGVyIGZvciBVU0IgSElEIFJlcG9ydCBEZXNjcmlwdG9yICAgICAgKi8KKyAgICB1aW50OF90ICpndThCb3NEZXNjOyAgICAgICAgICAgIC8qITwgUG9pbnRlciBmb3IgVVNCIEJPUyBEZXNjcmlwdG9yICAgICAgICAgICAgICovCisgICAgdWludDMyX3QgKmd1MzJIaWRSZXBvcnRTaXplOyAgICAvKiE8IFBvaW50ZXIgZm9yIEhJRCBSZXBvcnQgZGVzY3JpcHRvciBTaXplICovCisgICAgdWludDMyX3QgKmd1MzJDb25maWdIaWREZXNjSWR4OyAvKiE8IFBvaW50ZXIgZm9yIEhJRCBEZXNjcmlwdG9yIHN0YXJ0IGluZGV4ICovCisKK30gU19VU0JEX0lORk9fVDsgIC8qITwgRGV2aWNlIGRlc2NyaXB0aW9uIHN0cnVjdHVyZSAqLworCitleHRlcm4gY29uc3QgU19VU0JEX0lORk9fVCBnc0luZm87CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNCRF9FWFBPUlRFRF9TVFJVQ1RTICovCisKKworLyoqIEBhZGR0b2dyb3VwIFVTQkRfRVhQT1JURURfQ09OU1RBTlRTIFVTQkQgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisjZGVmaW5lIFVTQkRfQlVGX0JBU0UgICAgICAodWludDMyX3QpKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoVVNCRF9CQVNFK05TX09GRlNFVCsweDEwMFVMKTooVVNCRF9CQVNFKzB4MTAwVUwpKSAgLyohPCBVU0JEIGJ1ZmZlciBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgVVNCRF9NQVhfRVAgICAgICAgIDEyVUwgIC8qITwgVG90YWwgRVAgbnVtYmVyICovCisKKyNkZWZpbmUgRVAwICAgICAwVUwgICAgICAgLyohPCBFbmRwb2ludCAwICovCisjZGVmaW5lIEVQMSAgICAgMVVMICAgICAgIC8qITwgRW5kcG9pbnQgMSAqLworI2RlZmluZSBFUDIgICAgIDJVTCAgICAgICAvKiE8IEVuZHBvaW50IDIgKi8KKyNkZWZpbmUgRVAzICAgICAzVUwgICAgICAgLyohPCBFbmRwb2ludCAzICovCisjZGVmaW5lIEVQNCAgICAgNFVMICAgICAgIC8qITwgRW5kcG9pbnQgNCAqLworI2RlZmluZSBFUDUgICAgIDVVTCAgICAgICAvKiE8IEVuZHBvaW50IDUgKi8KKyNkZWZpbmUgRVA2ICAgICA2VUwgICAgICAgLyohPCBFbmRwb2ludCA2ICovCisjZGVmaW5lIEVQNyAgICAgN1VMICAgICAgIC8qITwgRW5kcG9pbnQgNyAqLworI2RlZmluZSBFUDggICAgIDhVTCAgICAgICAvKiE8IEVuZHBvaW50IDggKi8KKyNkZWZpbmUgRVA5ICAgICA5VUwgICAgICAgLyohPCBFbmRwb2ludCA5ICovCisjZGVmaW5lIEVQMTAgICAgMTBVTCAgICAgIC8qITwgRW5kcG9pbnQgMTAgKi8KKyNkZWZpbmUgRVAxMSAgICAxMVVMICAgICAgLyohPCBFbmRwb2ludCAxMSAqLworCisvKiogQGNvbmQgSElEREVOX1NZTUJPTFMgKi8KKy8qIFVTQiBSZXF1ZXN0IFR5cGUgKi8KKyNkZWZpbmUgUkVRX1NUQU5EQVJEICAgICAgICAweDAwVUwKKyNkZWZpbmUgUkVRX0NMQVNTICAgICAgICAgICAweDIwVUwKKyNkZWZpbmUgUkVRX1ZFTkRPUiAgICAgICAgICAweDQwVUwKKworLyogVVNCIFN0YW5kYXJkIFJlcXVlc3QgKi8KKyNkZWZpbmUgR0VUX1NUQVRVUyAgICAgICAgICAweDAwVUwKKyNkZWZpbmUgQ0xFQVJfRkVBVFVSRSAgICAgICAweDAxVUwKKyNkZWZpbmUgU0VUX0ZFQVRVUkUgICAgICAgICAweDAzVUwKKyNkZWZpbmUgU0VUX0FERFJFU1MgICAgICAgICAweDA1VUwKKyNkZWZpbmUgR0VUX0RFU0NSSVBUT1IgICAgICAweDA2VUwKKyNkZWZpbmUgU0VUX0RFU0NSSVBUT1IgICAgICAweDA3VUwKKyNkZWZpbmUgR0VUX0NPTkZJR1VSQVRJT04gICAweDA4VUwKKyNkZWZpbmUgU0VUX0NPTkZJR1VSQVRJT04gICAweDA5VUwKKyNkZWZpbmUgR0VUX0lOVEVSRkFDRSAgICAgICAweDBBVUwKKyNkZWZpbmUgU0VUX0lOVEVSRkFDRSAgICAgICAweDBCVUwKKyNkZWZpbmUgU1lOQ19GUkFNRSAgICAgICAgICAweDBDVUwKKworLyogVVNCIERlc2NyaXB0b3IgVHlwZSAqLworI2RlZmluZSBERVNDX0RFVklDRSAgICAgICAgIDB4MDFVTAorI2RlZmluZSBERVNDX0NPTkZJRyAgICAgICAgIDB4MDJVTAorI2RlZmluZSBERVNDX1NUUklORyAgICAgICAgIDB4MDNVTAorI2RlZmluZSBERVNDX0lOVEVSRkFDRSAgICAgIDB4MDRVTAorI2RlZmluZSBERVNDX0VORFBPSU5UICAgICAgIDB4MDVVTAorI2RlZmluZSBERVNDX1FVQUxJRklFUiAgICAgIDB4MDZVTAorI2RlZmluZSBERVNDX09USEVSU1BFRUQgICAgIDB4MDdVTAorI2RlZmluZSBERVNDX0lGUE9XRVIgICAgICAgIDB4MDhVTAorI2RlZmluZSBERVNDX09URyAgICAgICAgICAgIDB4MDlVTAorI2RlZmluZSBERVNDX0JPUyAgICAgICAgICAgIDB4MEZVTAorI2RlZmluZSBERVNDX0NBUEFCSUxJVFkgICAgIDB4MTBVTAorCisvKiBVU0IgRGV2aWNlIENhcGFiaWxpdHkgVHlwZSAqLworI2RlZmluZSBDQVBfV0lSRUxFU1MgICAgICAgIDB4MDFVTAorI2RlZmluZSBDQVBfVVNCMjBfRVhUICAgICAgIDB4MDJVTAorCisvKiE8VVNCIEhJRCBEZXNjcmlwdG9yIFR5cGUgKi8KKyNkZWZpbmUgREVTQ19ISUQgICAgICAgICAgICAweDIxVUwKKyNkZWZpbmUgREVTQ19ISURfUlBUICAgICAgICAweDIyVUwKKworLyogVVNCIERlc2NyaXB0b3IgTGVuZ3RoICovCisjZGVmaW5lIExFTl9ERVZJQ0UgICAgICAgICAgMThVTAorI2RlZmluZSBMRU5fUVVBTElGSUVSICAgICAgIDEwVUwKKyNkZWZpbmUgTEVOX0NPTkZJRyAgICAgICAgICA5VUwKKyNkZWZpbmUgTEVOX0lOVEVSRkFDRSAgICAgICA5VUwKKyNkZWZpbmUgTEVOX0VORFBPSU5UICAgICAgICA3VUwKKyNkZWZpbmUgTEVOX09URyAgICAgICAgICAgICA1VUwKKyNkZWZpbmUgTEVOX0JPUyAgICAgICAgICAgICA1VUwKKyNkZWZpbmUgTEVOX0hJRCAgICAgICAgICAgICA5VUwKKyNkZWZpbmUgTEVOX0NDSUQgICAgICAgICAgICAweDM2VUwKKyNkZWZpbmUgTEVOX0JPU0NBUCAgICAgICAgICA3VUwKKworLyogVVNCIEVuZHBvaW50IFR5cGUgKi8KKyNkZWZpbmUgRVBfSVNPICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEVQX0JVTEsgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBFUF9JTlQgICAgICAgICAgICAgIDB4MDMKKworI2RlZmluZSBFUF9JTlBVVCAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgRVBfT1VUUFVUICAgICAgICAgICAweDAwCisKKy8qIFVTQiBGZWF0dXJlIFNlbGVjdG9yICovCisjZGVmaW5lIEZFQVRVUkVfREVWSUNFX1JFTU9URV9XQUtFVVAgICAgMHgwMVVMCisjZGVmaW5lIEZFQVRVUkVfRU5EUE9JTlRfSEFMVCAgICAgICAgICAgMHgwMFVMCisvKiogQGVuZGNvbmQgSElEREVOX1NZTUJPTFMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgIFVTQiBTcGVjaWZpYyBNYWNyb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFVTQkRfV0FLRVVQX0VOICAgICAgICAgIFVTQkRfSU5URU5fV0tFTl9Nc2sgICAgICAgICAvKiE8IFVTQiBXYWtlLXVwIEVuYWJsZSAqLworI2RlZmluZSBVU0JEX0RSVlNFMCAgICAgICAgICAgICBVU0JEX1NFMF9TRTBfTXNrICAgICAgICAgICAgLyohPCBEcml2ZSBTRTAgKi8KKworI2RlZmluZSBVU0JEX0xQTUFDSyAgICAgICAgICAgICBVU0JEX0FUVFJfTFBNQUNLX01zayAgICAgICAgLyohPCBMUE0gRW5hYmxlICovCisjZGVmaW5lIFVTQkRfQllURU0gICAgICAgICAgICAgIFVTQkRfQVRUUl9CWVRFTV9Nc2sgICAgICAgICAvKiE8IEFjY2VzcyBTaXplIE1vZGUgU2VsZWN0aW9uICovCisjZGVmaW5lIFVTQkRfRFBQVV9FTiAgICAgICAgICAgIFVTQkRfQVRUUl9EUFBVRU5fTXNrICAgICAgICAvKiE8IFVTQiBEKyBQdWxsLXVwIEVuYWJsZSAqLworI2RlZmluZSBVU0JEX1VTQl9FTiAgICAgICAgICAgICBVU0JEX0FUVFJfVVNCRU5fTXNrICAgICAgICAgLyohPCBVU0IgRW5hYmxlICovCisjZGVmaW5lIFVTQkRfUldBS0VVUCAgICAgICAgICAgIFVTQkRfQVRUUl9SV0FLRVVQX01zayAgICAgICAvKiE8IFJlbW90ZSBXYWtlLVVwICovCisjZGVmaW5lIFVTQkRfUEhZX0VOICAgICAgICAgICAgIFVTQkRfQVRUUl9QSFlFTl9Nc2sgICAgICAgICAvKiE8IFBIWSBFbmFibGUgKi8KKworI2RlZmluZSBVU0JEX0lOVF9CVVMgICAgICAgICAgICBVU0JEX0lOVEVOX0JVU0lFTl9Nc2sgICAgICAgLyohPCBVU0IgQnVzIEV2ZW50IEludGVycnVwdCAqLworI2RlZmluZSBVU0JEX0lOVF9VU0IgICAgICAgICAgICBVU0JEX0lOVEVOX1VTQklFTl9Nc2sgICAgICAgLyohPCBVU0IgRXZlbnQgSW50ZXJydXB0ICovCisjZGVmaW5lIFVTQkRfSU5UX0ZMREVUICAgICAgICAgIFVTQkRfSU5URU5fVkJERVRJRU5fTXNrICAgICAvKiE8IFVTQiBWQlVTIERldGVjdGlvbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVVNCRF9JTlRfV0FLRVVQICAgICAgICAgKFVTQkRfSU5URU5fTkVWV0tJRU5fTXNrIHwgVVNCRF9JTlRFTl9XS0VOX01zaykgICAgIC8qITwgVVNCIE5vLUV2ZW50LVdha2UtVXAgSW50ZXJydXB0ICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfV0FLRVVQICAgICAgVVNCRF9JTlRTVFNfTkVWV0tJRl9Nc2sgICAgIC8qITwgVVNCIE5vLUV2ZW50LVdha2UtVXAgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBVU0JEX0lOVFNUU19GTERFVCAgICAgICBVU0JEX0lOVFNUU19WQkRFVElGX01zayAgICAgLyohPCBVU0IgRmxvYXQgRGV0ZWN0IEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfQlVTICAgICAgICAgVVNCRF9JTlRTVFNfQlVTSUZfTXNrICAgICAgIC8qITwgVVNCIEJ1cyBFdmVudCBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX1VTQiAgICAgICAgIFVTQkRfSU5UU1RTX1VTQklGX01zayAgICAgICAvKiE8IFVTQiBFdmVudCBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX1NFVFVQICAgICAgIFVTQkRfSU5UU1RTX1NFVFVQX01zayAgICAgICAvKiE8IFVTQiBTZXR1cCBFdmVudCAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUDAgICAgICAgICBVU0JEX0lOVFNUU19FUEVWVDBfTXNrICAgICAgLyohPCBVU0IgRW5kcG9pbnQgMCBFdmVudCAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUDEgICAgICAgICBVU0JEX0lOVFNUU19FUEVWVDFfTXNrICAgICAgLyohPCBVU0IgRW5kcG9pbnQgMSBFdmVudCAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUDIgICAgICAgICBVU0JEX0lOVFNUU19FUEVWVDJfTXNrICAgICAgLyohPCBVU0IgRW5kcG9pbnQgMiBFdmVudCAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUDMgICAgICAgICBVU0JEX0lOVFNUU19FUEVWVDNfTXNrICAgICAgLyohPCBVU0IgRW5kcG9pbnQgMyBFdmVudCAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUDQgICAgICAgICBVU0JEX0lOVFNUU19FUEVWVDRfTXNrICAgICAgLyohPCBVU0IgRW5kcG9pbnQgNCBFdmVudCAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUDUgICAgICAgICBVU0JEX0lOVFNUU19FUEVWVDVfTXNrICAgICAgLyohPCBVU0IgRW5kcG9pbnQgNSBFdmVudCAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUDYgICAgICAgICBVU0JEX0lOVFNUU19FUEVWVDZfTXNrICAgICAgLyohPCBVU0IgRW5kcG9pbnQgNiBFdmVudCAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUDcgICAgICAgICBVU0JEX0lOVFNUU19FUEVWVDdfTXNrICAgICAgLyohPCBVU0IgRW5kcG9pbnQgNyBFdmVudCAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUDggICAgICAgICBVU0JEX0lOVFNUU19FUEVWVDhfTXNrICAgICAgLyohPCBVU0IgRW5kcG9pbnQgOCBFdmVudCAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUDkgICAgICAgICBVU0JEX0lOVFNUU19FUEVWVDlfTXNrICAgICAgLyohPCBVU0IgRW5kcG9pbnQgOSBFdmVudCAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUDEwICAgICAgICBVU0JEX0lOVFNUU19FUEVWVDEwX01zayAgICAgLyohPCBVU0IgRW5kcG9pbnQgMTAgRXZlbnQgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVAxMSAgICAgICAgVVNCRF9JTlRTVFNfRVBFVlQxMV9Nc2sgICAgIC8qITwgVVNCIEVuZHBvaW50IDExIEV2ZW50ICovCisKKyNkZWZpbmUgVVNCRF9TVEFURV9VU0JSU1QgICAgICAgVVNCRF9BVFRSX1VTQlJTVF9Nc2sgICAgICAgIC8qITwgVVNCIEJ1cyBSZXNldCAqLworI2RlZmluZSBVU0JEX1NUQVRFX1NVU1BFTkQgICAgICBVU0JEX0FUVFJfU1VTUEVORF9Nc2sgICAgICAgLyohPCBVU0IgQnVzIFN1c3BlbmQgKi8KKyNkZWZpbmUgVVNCRF9TVEFURV9SRVNVTUUgICAgICAgVVNCRF9BVFRSX1JFU1VNRV9Nc2sgICAgICAgIC8qITwgVVNCIEJ1cyBSZXN1bWUgKi8KKyNkZWZpbmUgVVNCRF9TVEFURV9USU1FT1VUICAgICAgVVNCRF9BVFRSX1RPVVRfTXNrICAgICAgICAgIC8qITwgVVNCIEJ1cyBUaW1lb3V0ICovCisjZGVmaW5lIFVTQkRfU1RBVEVfTDFTVVNQRU5EICAgIFVTQkRfQVRUUl9MMVNVU1BFTkRfTXNrICAgICAvKiE8IFVTQiBCdXMgTDFTVVNQRU5EICovCisjZGVmaW5lIFVTQkRfU1RBVEVfTDFSRVNVTUUgICAgIFVTQkRfQVRUUl9MMVJFU1VNRV9Nc2sgICAgICAvKiE8IFVTQiBCdXMgTDFSRVNVTUUgKi8KKworI2RlZmluZSBVU0JEX0NGR1BfU1NUQUxMICAgICAgICBVU0JEX0NGR1BfU1NUQUxMX01zayAgICAgICAgLyohPCBTZXQgU3RhbGwgKi8KKyNkZWZpbmUgVVNCRF9DRkdfQ1NUQUxMICAgICAgICAgVVNCRF9DRkdfQ1NUQUxMX01zayAgICAgICAgIC8qITwgQ2xlYXIgU3RhbGwgKi8KKworI2RlZmluZSBVU0JEX0NGR19FUE1PREVfRElTQUJMRSAoMFVMIDw8IFVTQkRfQ0ZHX1NUQVRFX1BvcykvKiE8IEVuZHBvaW50IERpc2FibGUgKi8KKyNkZWZpbmUgVVNCRF9DRkdfRVBNT0RFX09VVCAgICAgKDFVTCA8PCBVU0JEX0NGR19TVEFURV9Qb3MpLyohPCBPdXQgRW5kcG9pbnQgKi8KKyNkZWZpbmUgVVNCRF9DRkdfRVBNT0RFX0lOICAgICAgKDJVTCA8PCBVU0JEX0NGR19TVEFURV9Qb3MpLyohPCBJbiBFbmRwb2ludCAqLworI2RlZmluZSBVU0JEX0NGR19UWVBFX0lTTyAgICAgICAoMVVMIDw8IFVTQkRfQ0ZHX0lTT0NIX1BvcykvKiE8IElzb2Nocm9ub3VzICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNCRF9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgVVNCRF9FWFBPUlRFRF9GVU5DVElPTlMgVVNCRCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIENvbXBhcmUgdHdvIGlucHV0IG51bWJlcnMgYW5kIHJldHVybiBtYXhpbXVtIG9uZS4KKyAgKgorICAqIEBwYXJhbVtpbl0gIGEgICBGaXJzdCBudW1iZXIgdG8gYmUgY29tcGFyZWQuCisgICogQHBhcmFtW2luXSAgYiAgIFNlY29uZCBudW1iZXIgdG8gYmUgY29tcGFyZWQuCisgICoKKyAgKiBAcmV0dXJuICAgICBNYXhpbXVtIHZhbHVlIGJldHdlZW4gYSBhbmQgYi4KKyAgKgorICAqIEBkZXRhaWxzICAgIElmIGEgPiBiLCB0aGVuIHJldHVybiBhLiBPdGhlcndpc2UsIHJldHVybiBiLgorICAqLworI2RlZmluZSBVU0JEX01heGltdW0oYSxiKSAgICAgICAgKChhKT4oYikgPyAoYSkgOiAoYikpCisKKy8qKgorICAqIEBicmllZiAgICAgIENvbXBhcmUgdHdvIGlucHV0IG51bWJlcnMgYW5kIHJldHVybiBtaW5pbXVtIG9uZQorICAqCisgICogQHBhcmFtW2luXSAgYSAgIEZpcnN0IG51bWJlciB0byBiZSBjb21wYXJlZAorICAqIEBwYXJhbVtpbl0gIGIgICBTZWNvbmQgbnVtYmVyIHRvIGJlIGNvbXBhcmVkCisgICoKKyAgKiBAcmV0dXJuICAgICBNaW5pbXVtIHZhbHVlIGJldHdlZW4gYSBhbmQgYgorICAqCisgICogQGRldGFpbHMgICAgSWYgYSA8IGIsIHRoZW4gcmV0dXJuIGEuIE90aGVyd2lzZSwgcmV0dXJuIGIuCisgICovCisjZGVmaW5lIFVTQkRfTWluaW11bShhLGIpICAgICAgICAoKGEpPChiKSA/IChhKSA6IChiKSkKKworLyoqCisgICogQGJyaWVmICAgIEVuYWJsZSBVU0IKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgTm9uZQorICAqCisgICogQGRldGFpbHMgIFRvIHNldCBVU0IgQVRUUiBjb250cm9sIHJlZ2lzdGVyIHRvIGVuYWJsZSBVU0IgYW5kIFBIWS4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0VOQUJMRV9VU0IoKSAgICAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKHVpbnQzMl90KShVU0JEX05TLT5BVFRSIHw9IDB4N0QwKSk6KCh1aW50MzJfdCkoVVNCRC0+QVRUUiB8PSAweDdEMCkpKQorCisvKioKKyAgKiBAYnJpZWYgICAgRGlzYWJsZSBVU0IKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgTm9uZQorICAqCisgICogQGRldGFpbHMgIFRvIHNldCBVU0IgQVRUUiBjb250cm9sIHJlZ2lzdGVyIHRvIGRpc2FibGUgVVNCLgorICAqCisgICovCisjZGVmaW5lIFVTQkRfRElTQUJMRV9VU0IoKSAgICAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgodWludDMyX3QpKFVTQkRfTlMtPkFUVFIgJj0gflVTQkRfVVNCX0VOKSk6KCh1aW50MzJfdCkoVVNCRC0+QVRUUiAmPSB+VVNCRF9VU0JfRU4pKSkKKworLyoqCisgICogQGJyaWVmICAgIEVuYWJsZSBVU0IgUEhZCisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICBUbyBzZXQgVVNCIEFUVFIgY29udHJvbCByZWdpc3RlciB0byBlbmFibGUgVVNCIFBIWS4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0VOQUJMRV9QSFkoKSAgICAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKHVpbnQzMl90KShVU0JEX05TLT5BVFRSIHw9IFVTQkRfUEhZX0VOKSk6KCh1aW50MzJfdCkoVVNCRC0+QVRUUiB8PSBVU0JEX1BIWV9FTikpKQorCisvKioKKyAgKiBAYnJpZWYgICAgRGlzYWJsZSBVU0IgUEhZCisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICBUbyBzZXQgVVNCIEFUVFIgY29udHJvbCByZWdpc3RlciB0byBkaXNhYmxlIFVTQiBQSFkuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9ESVNBQkxFX1BIWSgpICAgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCh1aW50MzJfdCkoVVNCRF9OUy0+QVRUUiAmPSB+VVNCRF9QSFlfRU4pKTooKHVpbnQzMl90KShVU0JELT5BVFRSICY9IH5VU0JEX1BIWV9FTikpKQorCisvKioKKyAgKiBAYnJpZWYgICAgRW5hYmxlIFNFMC4gRm9yY2UgVVNCIFBIWSB0cmFuc2NlaXZlciB0byBkcml2ZSBTRTAuCisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICBTZXQgRFJWU0UwIGJpdCBvZiBVU0JfRFJWU0UwIHJlZ2lzdGVyIHRvIGVuYWJsZSBzb2Z0d2FyZS1kaXNjb25uZWN0IGZ1bmN0aW9uLiBGb3JjZSBVU0IgUEhZIHRyYW5zY2VpdmVyIHRvIGRyaXZlIFNFMCB0byBidXMuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9TRVRfU0UwKCkgICAgICAgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCh1aW50MzJfdCkoVVNCRF9OUy0+U0UwIHw9IFVTQkRfRFJWU0UwKSk6KCh1aW50MzJfdCkoVVNCRC0+U0UwIHw9IFVTQkRfRFJWU0UwKSkpCisKKy8qKgorICAqIEBicmllZiAgICBEaXNhYmxlIFNFMAorICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgQ2xlYXIgRFJWU0UwIGJpdCBvZiBVU0JfRFJWU0UwIHJlZ2lzdGVyIHRvIGRpc2FibGUgc29mdHdhcmUtZGlzY29ubmVjdCBmdW5jdGlvbi4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0NMUl9TRTAoKSAgICAgICAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKHVpbnQzMl90KShVU0JEX05TLT5TRTAgJj0gflVTQkRfRFJWU0UwKSk6KCh1aW50MzJfdCkoVVNCRC0+U0UwICY9IH5VU0JEX0RSVlNFMCkpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICAgU2V0IFVTQiBkZXZpY2UgYWRkcmVzcworICAqCisgICogQHBhcmFtW2luXSAgIGFkZHIgVGhlIFVTQiBkZXZpY2UgYWRkcmVzcy4KKyAgKgorICAqIEByZXR1cm4gICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICAgV3JpdGUgVVNCIGRldmljZSBhZGRyZXNzIHRvIFVTQl9GQUREUiByZWdpc3Rlci4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX1NFVF9BRERSKGFkZHIpICAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoVVNCRF9OUy0+RkFERFIgPSAoYWRkcikpOihVU0JELT5GQUREUiA9IChhZGRyKSkpCisKKy8qKgorICAqIEBicmllZiAgICBHZXQgVVNCIGRldmljZSBhZGRyZXNzCisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIFVTQiBkZXZpY2UgYWRkcmVzcworICAqCisgICogQGRldGFpbHMgIFJlYWQgVVNCX0ZBRERSIHJlZ2lzdGVyIHRvIGdldCBVU0IgZGV2aWNlIGFkZHJlc3MuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9HRVRfQUREUigpICAgICAgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCh1aW50MzJfdCkoVVNCRF9OUy0+RkFERFIpKTooKHVpbnQzMl90KShVU0JELT5GQUREUikpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgVVNCIGludGVycnVwdCBmdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgaW50ciBUaGUgY29tYmluYXRpb24gb2YgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMuCisgICogICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgZW5hYmxlIGJpdC4KKyAgKiAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdHMgd2lsbCBiZSBlbmFibGVkLgorICAqICAgICAgICAgICAgIChVU0JEX0lOVF9XQUtFVVAsIFVTQkRfSU5UX0ZMREVULCBVU0JEX0lOVF9VU0IsIFVTQkRfSU5UX0JVUykKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIEVuYWJsZSBVU0IgcmVsYXRlZCBpbnRlcnJ1cHQgZnVuY3Rpb25zIHNwZWNpZmllZCBieSBpbnRyIHBhcmFtZXRlci4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0VOQUJMRV9JTlQoaW50cikgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoVVNCRF9OUy0+SU5URU4gfD0gKGludHIpKTooVVNCRC0+SU5URU4gfD0gKGludHIpKSkKKworLyoqCisgICogQGJyaWVmICAgIEdldCBpbnRlcnJ1cHQgc3RhdHVzCisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIFRoZSB2YWx1ZSBvZiBVU0JfSU5UU1RTIHJlZ2lzdGVyCisgICoKKyAgKiBAZGV0YWlscyAgUmV0dXJuIGFsbCBpbnRlcnJ1cHQgZmxhZ3Mgb2YgVVNCX0lOVFNUUyByZWdpc3Rlci4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0dFVF9JTlRfRkxBRygpICAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKHVpbnQzMl90KShVU0JEX05TLT5JTlRTVFMpKTooKHVpbnQzMl90KShVU0JELT5JTlRTVFMpKSkKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgVVNCIGludGVycnVwdCBmbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICBmbGFnIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGludGVycnVwdCBmbGFncy4KKyAgKiAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuCisgICogICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHQgZmxhZ3Mgd2lsbCBiZSBjbGVhcmVkLgorICAqICAgICAgICAgICAgIChVU0JEX0lOVFNUU19XQUtFVVAsIFVTQkRfSU5UU1RTX0ZMREVULCBVU0JEX0lOVFNUU19CVVMsIFVTQkRfSU5UU1RTX1VTQikKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIENsZWFyIFVTQiByZWxhdGVkIGludGVycnVwdCBmbGFncyBzcGVjaWZpZWQgYnkgZmxhZyBwYXJhbWV0ZXIuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9DTFJfSU5UX0ZMQUcoZmxhZykgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKFVTQkRfTlMtPklOVFNUUyA9IChmbGFnKSk6KFVTQkQtPklOVFNUUyA9IChmbGFnKSkpCisKKy8qKgorICAqIEBicmllZiAgICBHZXQgZW5kcG9pbnQgc3RhdHVzCisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIFRoZSB2YWx1ZSBvZiBVU0JfRVBTVFMgcmVnaXN0ZXIuCisgICoKKyAgKiBAZGV0YWlscyAgUmV0dXJuIGFsbCBlbmRwb2ludCBzdGF0dXMuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9HRVRfRVBfRkxBRygpICAgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCh1aW50MzJfdCkoVVNCRF9OUy0+RVBTVFMpKTooKHVpbnQzMl90KShVU0JELT5FUFNUUykpKQorCisvKioKKyAgKiBAYnJpZWYgICAgR2V0IFVTQiBidXMgc3RhdGUKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgVGhlIHZhbHVlIG9mIFVTQl9BVFRSWzEzOjEyXSBhbmQgVVNCX0FUVFJbMzowXS4KKyAgKiAgICAgICAgICAgQml0IDAgIGluZGljYXRlcyBVU0IgYnVzIHJlc2V0IHN0YXR1cy4KKyAgKiAgICAgICAgICAgQml0IDEgIGluZGljYXRlcyBVU0IgYnVzIHN1c3BlbmQgc3RhdHVzLgorICAqICAgICAgICAgICBCaXQgMiAgaW5kaWNhdGVzIFVTQiBidXMgcmVzdW1lIHN0YXR1cy4KKyAgKiAgICAgICAgICAgQml0IDMgIGluZGljYXRlcyBVU0IgYnVzIHRpbWUtb3V0IHN0YXR1cy4KKyAgKiAgICAgICAgICAgQml0IDEyIGluZGljYXRlcyBVU0IgYnVzIExQTSBMMSBzdXNwZW5kIHN0YXR1cy4KKyAgKiAgICAgICAgICAgQml0IDEzIGluZGljYXRlcyBVU0IgYnVzIExQTSBMMSByZXN1bWUgc3RhdHVzLgorICAqCisgICogQGRldGFpbHMgIFJldHVybiBVU0JfQVRUUlsxMzoxMl0gYW5kIFVTQl9BVFRSWzM6MF0gZm9yIFVTQiBidXMgZXZlbnRzLgorICAqCisgICovCisjZGVmaW5lIFVTQkRfR0VUX0JVU19TVEFURSgpICAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgodWludDMyX3QpKFVTQkRfTlMtPkFUVFIgJiAweDMwMEYpKTooKHVpbnQzMl90KShVU0JELT5BVFRSICYgMHgzMDBGKSkpCisKKy8qKgorICAqIEBicmllZiAgICBDaGVjayBjYWJsZSBjb25uZWN0aW9uIHN0YXRlCisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHZhbCAgIDAgVVNCIGNhYmxlIGlzIG5vdCBhdHRhY2hlZC4KKyAgKiBAcmV0dmFsICAgMSBVU0IgY2FibGUgaXMgYXR0YWNoZWQuCisgICoKKyAgKiBAZGV0YWlscyAgQ2hlY2sgdGhlIGNvbm5lY3Rpb24gc3RhdGUgYnkgRkxERVQgYml0IG9mIFVTQl9GTERFVCByZWdpc3Rlci4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0lTX0FUVEFDSEVEKCkgICAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKHVpbnQzMl90KShVU0JEX05TLT5WQlVTREVUICYgVVNCRF9WQlVTREVUX1ZCVVNERVRfTXNrKSk6KCh1aW50MzJfdCkoVVNCRC0+VkJVU0RFVCAmIFVTQkRfVkJVU0RFVF9WQlVTREVUX01zaykpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTdG9wIFVTQiB0cmFuc2FjdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGVuZHBvaW50IElECisgICoKKyAgKiBAcGFyYW1baW5dICBlcCBUaGUgVVNCIGVuZHBvaW50IElELiBNMjM1MSBTZXJpZXMgc3VwcG9ydHMgMTIgaGFyZHdhcmUgZW5kcG9pbnQgSUQuIFRoaXMgcGFyYW1ldGVyIGNvdWxkIGJlIDAgfiAxMS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFdyaXRlIDEgdG8gQ0xSUkRZIGJpdCBvZiBVU0JfQ0ZHUHggcmVnaXN0ZXIgdG8gc3RvcCBVU0IgdHJhbnNhY3Rpb24gb2YgdGhlIHNwZWNpZmllZCBlbmRwb2ludCBJRC4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX1NUT1BfVFJBTlNBQ1RJT04oZXApICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JEX05TLT5FUFswXS5DRkdQICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkgfD0gVVNCRF9DRkdQX0NMUlJEWV9Nc2spOigqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkQtPkVQWzBdLkNGR1AgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSB8PSBVU0JEX0NGR1BfQ0xSUkRZX01zaykpCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBVU0IgREFUQTEgUElEIGZvciB0aGUgc3BlY2lmaWVkIGVuZHBvaW50IElECisgICoKKyAgKiBAcGFyYW1baW5dICBlcCBUaGUgVVNCIGVuZHBvaW50IElELiBNMjM1MSBTZXJpZXMgc3VwcG9ydHMgMTIgaGFyZHdhcmUgZW5kcG9pbnQgSUQuIFRoaXMgcGFyYW1ldGVyIGNvdWxkIGJlIDAgfiAxMS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFNldCBEU1FfU1lOQyBiaXQgb2YgVVNCX0NGR3ggcmVnaXN0ZXIgdG8gc3BlY2lmeSB0aGUgREFUQTEgUElEIGZvciB0aGUgZm9sbG93aW5nIElOIHRva2VuIHRyYW5zYWN0aW9uLgorICAqICAgICAgICAgICAgIEJhc2Ugb24gdGhpcyBzZXR0aW5nLCBoYXJkd2FyZSB3aWxsIHRvZ2dsZSBQSUQgYmV0d2VlbiBEQVRBMCBhbmQgREFUQTEgYXV0b21hdGljYWxseSBmb3IgSU4gdG9rZW4gdHJhbnNhY3Rpb25zLgorICAqCisgICovCisjZGVmaW5lIFVTQkRfU0VUX0RBVEExKGVwKSAgICAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkRfTlMtPkVQWzBdLkNGRyArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpIHw9IFVTQkRfQ0ZHX0RTUVNZTkNfTXNrKTooKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JELT5FUFswXS5DRkcgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSB8PSBVU0JEX0NGR19EU1FTWU5DX01zaykpCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBVU0IgREFUQTAgUElEIGZvciB0aGUgc3BlY2lmaWVkIGVuZHBvaW50IElECisgICoKKyAgKiBAcGFyYW1baW5dICBlcCBUaGUgVVNCIGVuZHBvaW50IElELiBNMjM1MSBTZXJpZXMgc3VwcG9ydHMgMTIgaGFyZHdhcmUgZW5kcG9pbnQgSUQuIFRoaXMgcGFyYW1ldGVyIGNvdWxkIGJlIDAgfiAxMS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIENsZWFyIERTUV9TWU5DIGJpdCBvZiBVU0JfQ0ZHeCByZWdpc3RlciB0byBzcGVjaWZ5IHRoZSBEQVRBMCBQSUQgZm9yIHRoZSBmb2xsb3dpbmcgSU4gdG9rZW4gdHJhbnNhY3Rpb24uCisgICogICAgICAgICAgICAgQmFzZSBvbiB0aGlzIHNldHRpbmcsIGhhcmR3YXJlIHdpbGwgdG9nZ2xlIFBJRCBiZXR3ZWVuIERBVEEwIGFuZCBEQVRBMSBhdXRvbWF0aWNhbGx5IGZvciBJTiB0b2tlbiB0cmFuc2FjdGlvbnMuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9TRVRfREFUQTAoZXApICAgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRF9OUy0+RVBbMF0uQ0ZHICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkgJj0gKH5VU0JEX0NGR19EU1FTWU5DX01zaykpOigqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkQtPkVQWzBdLkNGRyArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpICY9ICh+VVNCRF9DRkdfRFNRU1lOQ19Nc2spKSkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFVTQiBwYXlsb2FkIHNpemUgKElOIGRhdGEpCisgICoKKyAgKiBAcGFyYW1baW5dICBlcCBUaGUgVVNCIGVuZHBvaW50IElELiBNMjM1MSBTZXJpZXMgc3VwcG9ydHMgMTIgaGFyZHdhcmUgZW5kcG9pbnQgSUQuIFRoaXMgcGFyYW1ldGVyIGNvdWxkIGJlIDAgfiAxMS4KKyAgKgorICAqIEBwYXJhbVtpbl0gIHNpemUgVGhlIHRyYW5zZmVyIGxlbmd0aC4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gd2lsbCB3cml0ZSB0aGUgdHJhbnNmZXIgbGVuZ3RoIHRvIFVTQl9NWFBMRHggcmVnaXN0ZXIgZm9yIElOIGRhdGEgdHJhbnNhY3Rpb24uCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9TRVRfUEFZTE9BRF9MRU4oZXAsIHNpemUpICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkRfTlMtPkVQWzBdLk1YUExEICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkgPSAoc2l6ZSkpOigqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkQtPkVQWzBdLk1YUExEICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkgPSAoc2l6ZSkpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgVVNCIHBheWxvYWQgc2l6ZSAoT1VUIGRhdGEpCisgICoKKyAgKiBAcGFyYW1baW5dICBlcCBUaGUgVVNCIGVuZHBvaW50IElELiBNMjM1MSBTZXJpZXMgc3VwcG9ydHMgMTIgaGFyZHdhcmUgZW5kcG9pbnQgSUQuIFRoaXMgcGFyYW1ldGVyIGNvdWxkIGJlIDAgfiAxMS4KKyAgKgorICAqIEByZXR1cm4gICAgIFRoZSB2YWx1ZSBvZiBVU0JfTVhQTER4IHJlZ2lzdGVyLgorICAqCisgICogQGRldGFpbHMgICAgR2V0IHRoZSBkYXRhIGxlbmd0aCBvZiBPVVQgZGF0YSB0cmFuc2FjdGlvbiBieSByZWFkaW5nIFVTQl9NWFBMRHggcmVnaXN0ZXIuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9HRVRfUEFZTE9BRF9MRU4oZXApICAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgodWludDMyX3QpKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JEX05TLT5FUFswXS5NWFBMRCArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpKTooKHVpbnQzMl90KSooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRC0+RVBbMF0uTVhQTEQgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIENvbmZpZ3VyZSBlbmRwb2ludAorICAqCisgICogQHBhcmFtW2luXSAgZXAgVGhlIFVTQiBlbmRwb2ludCBJRC4gTTIzNTEgU2VyaWVzIHN1cHBvcnRzIDEyIGhhcmR3YXJlIGVuZHBvaW50IElELiBUaGlzIHBhcmFtZXRlciBjb3VsZCBiZSAwIH4gMTEuCisgICoKKyAgKiBAcGFyYW1baW5dICBjb25maWcgVGhlIFVTQiBjb25maWd1cmF0aW9uLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyB3aWxsIHdyaXRlIGNvbmZpZyBwYXJhbWV0ZXIgdG8gVVNCX0NGR3ggcmVnaXN0ZXIgb2Ygc3BlY2lmaWVkIGVuZHBvaW50IElELgorICAqCisgICovCisjZGVmaW5lIFVTQkRfQ09ORklHX0VQKGVwLCBjb25maWcpICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JEX05TLT5FUFswXS5DRkcgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSA9IChjb25maWcpKTooKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JELT5FUFswXS5DRkcgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSA9IChjb25maWcpKSkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFVTQiBlbmRwb2ludCBidWZmZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIGVwIFRoZSBVU0IgZW5kcG9pbnQgSUQuIE0yMzUxIFNlcmllcyBzdXBwb3J0cyAxMiBoYXJkd2FyZSBlbmRwb2ludCBJRC4gVGhpcyBwYXJhbWV0ZXIgY291bGQgYmUgMCB+IDExLgorICAqCisgICogQHBhcmFtW2luXSAgb2Zmc2V0IFRoZSBTUkFNIG9mZnNldC4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gd2lsbCBzZXQgdGhlIFNSQU0gb2Zmc2V0IGZvciB0aGUgc3BlY2lmaWVkIGVuZHBvaW50IElELgorICAqCisgICovCisjZGVmaW5lIFVTQkRfU0VUX0VQX0JVRl9BRERSKGVwLCBvZmZzZXQpICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRF9OUy0+RVBbMF0uQlVGU0VHICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkgPSAob2Zmc2V0KSk6KCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRC0+RVBbMF0uQlVGU0VHICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkgPSAob2Zmc2V0KSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCB0aGUgb2Zmc2V0IG9mIHRoZSBzcGVjaWZpZWQgVVNCIGVuZHBvaW50IGJ1ZmZlcgorICAqCisgICogQHBhcmFtW2luXSAgZXAgVGhlIFVTQiBlbmRwb2ludCBJRC4gTTIzNTEgU2VyaWVzIHN1cHBvcnRzIDEyIGhhcmR3YXJlIGVuZHBvaW50IElELiBUaGlzIHBhcmFtZXRlciBjb3VsZCBiZSAwIH4gMTEuCisgICoKKyAgKiBAcmV0dXJuICAgICBUaGUgb2Zmc2V0IG9mIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgYnVmZmVyLgorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyB3aWxsIHJldHVybiB0aGUgU1JBTSBvZmZzZXQgb2YgdGhlIHNwZWNpZmllZCBlbmRwb2ludCBJRC4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0dFVF9FUF9CVUZfQUREUihlcCkgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCh1aW50MzJfdCkqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkRfTlMtPkVQWzBdLkJVRlNFRyArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpKTooKHVpbnQzMl90KSooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRC0+RVBbMF0uQlVGU0VHICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICAgU2V0IFVTQiBlbmRwb2ludCBzdGFsbCBzdGF0ZQorICAqCisgICogQHBhcmFtW2luXSAgIGVwICBUaGUgVVNCIGVuZHBvaW50IElELiBNMjM1MSBTZXJpZXMgc3VwcG9ydHMgMTIgaGFyZHdhcmUgZW5kcG9pbnQgSUQuIFRoaXMgcGFyYW1ldGVyIGNvdWxkIGJlIDAgfiAxMS4KKyAgKgorICAqIEByZXR1cm4gICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICAgU2V0IFVTQiBlbmRwb2ludCBzdGFsbCBzdGF0ZSBmb3IgdGhlIHNwZWNpZmllZCBlbmRwb2ludCBJRC4gRW5kcG9pbnQgd2lsbCByZXNwb25kIFNUQUxMIHRva2VuIGF1dG9tYXRpY2FsbHkuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9TRVRfRVBfU1RBTEwoZXApICAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkRfTlMtPkVQWzBdLkNGR1AgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSB8PSBVU0JEX0NGR1BfU1NUQUxMX01zayk6KCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRC0+RVBbMF0uQ0ZHUCArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpIHw9IFVTQkRfQ0ZHUF9TU1RBTExfTXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgIENsZWFyIFVTQiBlbmRwb2ludCBzdGFsbCBzdGF0ZQorICAqCisgICogQHBhcmFtW2luXSAgIGVwICBUaGUgVVNCIGVuZHBvaW50IElELiBNMjM1MSBTZXJpZXMgc3VwcG9ydHMgMTIgaGFyZHdhcmUgZW5kcG9pbnQgSUQuIFRoaXMgcGFyYW1ldGVyIGNvdWxkIGJlIDAgfiAxMS4KKyAgKgorICAqIEByZXR1cm4gICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICAgQ2xlYXIgVVNCIGVuZHBvaW50IHN0YWxsIHN0YXRlIGZvciB0aGUgc3BlY2lmaWVkIGVuZHBvaW50IElELiBFbmRwb2ludCB3aWxsIHJlc3BvbmQgQUNLL05BSyB0b2tlbi4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0NMUl9FUF9TVEFMTChlcCkgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRF9OUy0+RVBbMF0uQ0ZHUCArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpICY9IH5VU0JEX0NGR1BfU1NUQUxMX01zayk6KCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRC0+RVBbMF0uQ0ZHUCArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpICY9IH5VU0JEX0NGR1BfU1NUQUxMX01zaykpCisKKy8qKgorICAqIEBicmllZiAgICAgICBHZXQgVVNCIGVuZHBvaW50IHN0YWxsIHN0YXRlCisgICoKKyAgKiBAcGFyYW1baW5dICAgZXAgIFRoZSBVU0IgZW5kcG9pbnQgSUQuIE0yMzUxIFNlcmllcyBzdXBwb3J0cyAxMiBoYXJkd2FyZSBlbmRwb2ludCBJRC4gVGhpcyBwYXJhbWV0ZXIgY291bGQgYmUgMCB+IDExLgorICAqCisgICogQHJldHZhbCAgICAgIDAgICAgICBVU0IgZW5kcG9pbnQgaXMgbm90IHN0YWxsZWQuCisgICogQHJldHZhbCAgICAgIE90aGVycyBVU0IgZW5kcG9pbnQgaXMgc3RhbGxlZC4KKyAgKgorICAqIEBkZXRhaWxzICAgICBHZXQgVVNCIGVuZHBvaW50IHN0YWxsIHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgSUQuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9HRVRfRVBfU1RBTEwoZXApICAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkRfTlMtPkVQWzBdLkNGR1AgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSAmIFVTQkRfQ0ZHUF9TU1RBTExfTXNrKTooKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JELT5FUFswXS5DRkdQICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkgJiBVU0JEX0NGR1BfU1NUQUxMX01zaykpCisKKy8qKgorICAqIEBicmllZiAgICAgIFRvIHN1cHBvcnQgYnl0ZSBhY2Nlc3MgYmV0d2VlbiBVU0IgU1JBTSBhbmQgc3lzdGVtIFNSQU0KKyAgKgorICAqIEBwYXJhbVtpbl0gIGRlc3QgRGVzdGluYXRpb24gcG9pbnRlci4KKyAgKgorICAqIEBwYXJhbVtpbl0gIHNyYyAgU291cmNlIHBvaW50ZXIuCisgICoKKyAgKiBAcGFyYW1baW5dICBzaXplIEJ5dGUgY291bnQuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY29weSB0aGUgbnVtYmVyIG9mIGRhdGEgc3BlY2lmaWVkIGJ5IHNpemUgYW5kIHNyYyBwYXJhbWV0ZXJzIHRvIHRoZSBhZGRyZXNzIHNwZWNpZmllZCBieSBkZXN0IHBhcmFtZXRlci4KKyAgKgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgVVNCRF9NZW1Db3B5KHVpbnQ4X3QgZGVzdFtdLCB1aW50OF90IHNyY1tdLCB1aW50MzJfdCBzaXplKQoreworICAgIHVpbnQzMl90IHZvbGF0aWxlIGkgPSAwVUw7CisKKyAgICB3aGlsZShzaXplLS0pCisgICAgeworICAgICAgICBkZXN0W2ldID0gc3JjW2ldOworICAgICAgICBpKys7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICAgU2V0IFVTQiBlbmRwb2ludCBzdGFsbCBzdGF0ZQorICAqCisgICogQHBhcmFtW2luXSAgIGVwbnVtICBVU0IgZW5kcG9pbnQgbnVtYmVyCisgICoKKyAgKiBAcmV0dXJuICAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgIFNldCBVU0IgZW5kcG9pbnQgc3RhbGwgc3RhdGUuIEVuZHBvaW50IHdpbGwgcmVzcG9uZCBTVEFMTCB0b2tlbiBhdXRvbWF0aWNhbGx5LgorICAqCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBVU0JEX1NldFN0YWxsKHVpbnQ4X3QgZXBudW0pCit7CisgICAgdWludDMyX3QgdTMyQ2ZnQWRkcjsKKyAgICB1aW50MzJfdCB1MzJDZmc7CisgICAgdWludDMyX3QgaTsKKyAgICBVU0JEX1QgKnBVU0JEOworCisgICAgaWYoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKQorICAgIHsKKyAgICAgICAgcFVTQkQgPSBVU0JEX05TOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwVVNCRCA9IFVTQkQ7CisgICAgfQorCisgICAgZm9yKGkgPSAwVUw7IGkgPCBVU0JEX01BWF9FUDsgaSsrKQorICAgIHsKKyAgICAgICAgdTMyQ2ZnQWRkciA9ICh1aW50MzJfdCkoaSA8PCA0KSArICh1aW50MzJfdCkmcFVTQkQtPkVQWzBdLkNGRzsgLyogVVNCRF9DRkcwICovCisgICAgICAgIHUzMkNmZyA9ICooKF9fSU8gdWludDMyX3QgKikodTMyQ2ZnQWRkcikpOworCisgICAgICAgIGlmKCh1MzJDZmcgJiAweEZVTCkgPT0gZXBudW0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNmZ0FkZHIgPSAodWludDMyX3QpKGkgPDwgNCkgKyAodWludDMyX3QpJnBVU0JELT5FUFswXS5DRkdQOyAvKiBVU0JEX0NGR1AwICovCisgICAgICAgICAgICB1MzJDZmcgPSAqKChfX0lPIHVpbnQzMl90ICopKHUzMkNmZ0FkZHIpKTsKKworICAgICAgICAgICAgKigoX19JTyB1aW50MzJfdCAqKSh1MzJDZmdBZGRyKSkgPSAodTMyQ2ZnIHwgVVNCRF9DRkdQX1NTVEFMTCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgIENsZWFyIFVTQiBlbmRwb2ludCBzdGFsbCBzdGF0ZQorICAqCisgICogQHBhcmFtW2luXSAgIGVwbnVtICBVU0IgZW5kcG9pbnQgbnVtYmVyCisgICoKKyAgKiBAcmV0dXJuICAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgIENsZWFyIFVTQiBlbmRwb2ludCBzdGFsbCBzdGF0ZS4gRW5kcG9pbnQgd2lsbCByZXNwb25kIEFDSy9OQUsgdG9rZW4uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBVU0JEX0NsZWFyU3RhbGwodWludDhfdCBlcG51bSkKK3sKKyAgICB1aW50MzJfdCB1MzJDZmdBZGRyOworICAgIHVpbnQzMl90IHUzMkNmZzsKKyAgICB1aW50MzJfdCBpOworICAgIFVTQkRfVCAqcFVTQkQ7CisKKyAgICBpZigoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpCisgICAgeworICAgICAgICBwVVNCRCA9IFVTQkRfTlM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBVU0JEID0gVVNCRDsKKyAgICB9CisKKyAgICBmb3IoaSA9IDBVTDsgaSA8IFVTQkRfTUFYX0VQOyBpKyspCisgICAgeworICAgICAgICB1MzJDZmdBZGRyID0gKHVpbnQzMl90KShpIDw8IDQpICsgKHVpbnQzMl90KSZwVVNCRC0+RVBbMF0uQ0ZHOyAvKiBVU0JEX0NGRzAgKi8KKyAgICAgICAgdTMyQ2ZnID0gKigoX19JTyB1aW50MzJfdCAqKSh1MzJDZmdBZGRyKSk7CisKKyAgICAgICAgaWYoKHUzMkNmZyAmIDB4RlVMKSA9PSBlcG51bSkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2ZnQWRkciA9ICh1aW50MzJfdCkoaSA8PCA0KSArICh1aW50MzJfdCkmcFVTQkQtPkVQWzBdLkNGR1A7IC8qIFVTQkRfQ0ZHUDAgKi8KKyAgICAgICAgICAgIHUzMkNmZyA9ICooKF9fSU8gdWludDMyX3QgKikodTMyQ2ZnQWRkcikpOworCisgICAgICAgICAgICAqKChfX0lPIHVpbnQzMl90ICopKHUzMkNmZ0FkZHIpKSA9ICh1MzJDZmcgJiB+VVNCRF9DRkdQX1NTVEFMTCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgIEdldCBVU0IgZW5kcG9pbnQgc3RhbGwgc3RhdGUKKyAgKgorICAqIEBwYXJhbVtpbl0gICBlcG51bSAgVVNCIGVuZHBvaW50IG51bWJlcgorICAqCisgICogQHJldHZhbCAgICAgIDAgICAgICBVU0IgZW5kcG9pbnQgaXMgbm90IHN0YWxsZWQuCisgICogQHJldHZhbCAgICAgIE90aGVycyBVU0IgZW5kcG9pbnQgaXMgc3RhbGxlZC4KKyAgKgorICAqIEBkZXRhaWxzICAgICBHZXQgVVNCIGVuZHBvaW50IHN0YWxsIHN0YXRlLgorICAqCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgVVNCRF9HZXRTdGFsbCh1aW50OF90IGVwbnVtKQoreworICAgIHVpbnQzMl90IHUzMkNmZ0FkZHIgPSAwVUw7CisgICAgdWludDMyX3QgdTMyQ2ZnOworICAgIHVpbnQzMl90IGk7CisgICAgVVNCRF9UICpwVVNCRDsKKworICAgIGlmKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCkKKyAgICB7CisgICAgICAgIHBVU0JEID0gVVNCRF9OUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcFVTQkQgPSBVU0JEOworICAgIH0KKworICAgIGZvcihpID0gMFVMOyBpIDwgVVNCRF9NQVhfRVA7IGkrKykKKyAgICB7CisgICAgICAgIHUzMkNmZ0FkZHIgPSAodWludDMyX3QpKGkgPDwgNCkgKyAodWludDMyX3QpJnBVU0JELT5FUFswXS5DRkc7IC8qIFVTQkRfQ0ZHMCAqLworICAgICAgICB1MzJDZmcgPSAqKChfX0lPIHVpbnQzMl90ICopKHUzMkNmZ0FkZHIpKTsKKworICAgICAgICBpZigodTMyQ2ZnICYgMHhGVUwpID09IGVwbnVtKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDZmdBZGRyID0gKHVpbnQzMl90KShpIDw8IDQpICsgKHVpbnQzMl90KSZwVVNCRC0+RVBbMF0uQ0ZHUDsgLyogVVNCRF9DRkdQMCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKCgqKChfX0lPIHVpbnQzMl90ICopKHUzMkNmZ0FkZHIpKSkgJiBVU0JEX0NGR1BfU1NUQUxMKTsKK30KKworZXh0ZXJuIHVpbnQ4X3QgZ19VU0JEX2F1OFNldHVwUGFja2V0WzhdOworZXh0ZXJuIHZvbGF0aWxlIHVpbnQ4X3QgZ19VU0JEX3U4UmVtb3RlV2FrZXVwRW47CisKK3R5cGVkZWYgdm9pZCAoKlZFTkRPUl9SRVEpKHZvaWQpOyAgICAgICAgICAgLyohPCBGdW5jdGlvbmFsIHBvaW50ZXIgdHlwZSBkZWZpbml0aW9uIGZvciBWZW5kb3IgY2xhc3MgKi8KK3R5cGVkZWYgdm9pZCAoKkNMQVNTX1JFUSkodm9pZCk7ICAgICAgICAgICAgLyohPCBGdW5jdGlvbmFsIHBvaW50ZXIgdHlwZSBkZWNsYXJhdGlvbiBmb3IgVVNCIGNsYXNzIHJlcXVlc3QgY2FsbGJhY2sgaGFuZGxlciAqLwordHlwZWRlZiB2b2lkICgqU0VUX0lOVEVSRkFDRV9SRVEpKHVpbnQzMl90IHUzMkFsdEludGVyZmFjZSk7ICAgIC8qITwgRnVuY3Rpb25hbCBwb2ludGVyIHR5cGUgZGVjbGFyYXRpb24gZm9yIFVTQiBzZXQgaW50ZXJmYWNlIHJlcXVlc3QgY2FsbGJhY2sgaGFuZGxlciAqLwordHlwZWRlZiB2b2lkICgqU0VUX0NPTkZJR19DQikodm9pZCk7ICAgICAgIC8qITwgRnVuY3Rpb25hbCBwb2ludGVyIHR5cGUgZGVjbGFyYXRpb24gZm9yIFVTQiBzZXQgY29uZmlndXJhdGlvbiByZXF1ZXN0IGNhbGxiYWNrIGhhbmRsZXIgKi8KKworZXh0ZXJuIGNvbnN0IFNfVVNCRF9JTkZPX1QgKmdfVVNCRF9zSW5mbzsKKworZXh0ZXJuIFZFTkRPUl9SRVEgZ19VU0JEX3BmblZlbmRvclJlcXVlc3Q7CitleHRlcm4gQ0xBU1NfUkVRIGdfVVNCRF9wZm5DbGFzc1JlcXVlc3Q7CitleHRlcm4gU0VUX0lOVEVSRkFDRV9SRVEgZ19VU0JEX3BmblNldEludGVyZmFjZTsKK2V4dGVybiBTRVRfQ09ORklHX0NCIGdfVVNCRF9wZm5TZXRDb25maWdDYWxsYmFjazsKK2V4dGVybiB1aW50MzJfdCBnX1VTQkRfdTMyRXBTdGFsbExvY2s7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBVU0JEX09wZW4oY29uc3QgU19VU0JEX0lORk9fVCAqcGFyYW0sIENMQVNTX1JFUSBwZm5DbGFzc1JlcSwgU0VUX0lOVEVSRkFDRV9SRVEgcGZuU2V0SW50ZXJmYWNlKTsKK3ZvaWQgVVNCRF9TdGFydCh2b2lkKTsKK3ZvaWQgVVNCRF9HZXRTZXR1cFBhY2tldCh1aW50OF90ICpidWYpOwordm9pZCBVU0JEX1Byb2Nlc3NTZXR1cFBhY2tldCh2b2lkKTsKK3ZvaWQgVVNCRF9HZXREZXNjcmlwdG9yKHZvaWQpOwordm9pZCBVU0JEX1N0YW5kYXJkUmVxdWVzdCh2b2lkKTsKK3ZvaWQgVVNCRF9QcmVwYXJlQ3RybEluKHVpbnQ4X3QgcHU4QnVmW10sIHVpbnQzMl90IHUzMlNpemUpOwordm9pZCBVU0JEX0N0cmxJbih2b2lkKTsKK3ZvaWQgVVNCRF9QcmVwYXJlQ3RybE91dCh1aW50OF90ICpwdThCdWYsIHVpbnQzMl90IHUzMlNpemUpOwordm9pZCBVU0JEX0N0cmxPdXQodm9pZCk7Cit2b2lkIFVTQkRfU3dSZXNldCh2b2lkKTsKK3ZvaWQgVVNCRF9TZXRWZW5kb3JSZXF1ZXN0KFZFTkRPUl9SRVEgcGZuVmVuZG9yUmVxKTsKK3ZvaWQgVVNCRF9TZXRDb25maWdDYWxsYmFjayhTRVRfQ09ORklHX0NCIHBmblNldENvbmZpZ0NhbGxiYWNrKTsKK3ZvaWQgVVNCRF9Mb2NrRXBTdGFsbCh1aW50MzJfdCB1MzJFcEJpdG1hcCk7CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVU0JEX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQkRfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1VTQkRfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3VzY2lfaTJjLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy91c2NpX2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OWYxYmMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy91c2NpX2kyYy5oCkBAIC0wLDAgKzEsMzE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgVVNDSV9JMkMuaAorICogQHZlcnNpb24gIFYzLjAKKyAqICRSZXZpc2lvbjogMSAkCisgKiAkRGF0ZTogMTYvMDcvMDcgNzo1MHAgJAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBVU0NJIEkyQyhVSTJDKSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19VU0NJX0kyQ19IX18KKyNkZWZpbmUgX19VU0NJX0kyQ19IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFVTQ0lfSTJDX0RyaXZlciBVU0NJX0kyQyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBVU0NJX0kyQ19FWFBPUlRFRF9DT05TVEFOVFMgVVNDSV9JMkMgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVU0NJX0kyQyBtYXN0ZXIgZXZlbnQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitlbnVtIFVJMkNfTUFTVEVSX0VWRU5UCit7CisgICAgTUFTVEVSX1NFTkRfQUREUkVTUyA9IDEwdSwgICAgLyohPCBNYXN0ZXIgc2VuZCBhZGRyZXNzIHRvIFNsYXZlICovCisgICAgTUFTVEVSX1NFTkRfSF9XUl9BRERSRVNTLCAgICAvKiE8IE1hc3RlciBzZW5kIEhpZ2ggYWRkcmVzcyB0byBTbGF2ZSAqLworICAgIE1BU1RFUl9TRU5EX0hfUkRfQUREUkVTUywgICAgLyohPCBNYXN0ZXIgc2VuZCBhZGRyZXNzIHRvIFNsYXZlIChSZWFkIEFERFIpICovCisgICAgTUFTVEVSX1NFTkRfTF9BRERSRVNTLCAgICAgICAvKiE8IE1hc3RlciBzZW5kIExvdyBhZGRyZXNzIHRvIFNsYXZlICovCisgICAgTUFTVEVSX1NFTkRfREFUQSwgICAgICAgICAgICAvKiE8IE1hc3RlciBTZW5kIERhdGEgdG8gU2xhdmUgKi8KKyAgICBNQVNURVJfU0VORF9SRVBFQVRfU1RBUlQsICAgIC8qITwgTWFzdGVyIHNlbmQgcmVwZWF0IHN0YXJ0IHRvIFNsYXZlICovCisgICAgTUFTVEVSX1JFQURfREFUQSwgICAgICAgICAgICAvKiE8IE1hc3RlciBHZXQgRGF0YSBmcm9tIFNsYXZlICovCisgICAgTUFTVEVSX1NUT1AsICAgICAgICAgICAgICAgICAvKiE8IE1hc3RlciBzZW5kIHN0b3AgdG8gU2xhdmUgKi8KKyAgICBNQVNURVJfU0VORF9TVEFSVCAgICAgICAgICAgIC8qITwgTWFzdGVyIHNlbmQgc3RhcnQgdG8gU2xhdmUgKi8KK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVTQ0lfSTJDIHNsYXZlIGV2ZW50IGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2VudW0gVUkyQ19TTEFWRV9FVkVOVAoreworICAgIFNMQVZFX0FERFJFU1NfQUNLID0gMTAwdSwgICAgICAvKiE8IFNsYXZlIHNlbmQgYWRkcmVzcyBBQ0sgKi8KKyAgICBTTEFWRV9IX1dSX0FERFJFU1NfQUNLLCAgICAgICAvKiE8IFNsYXZlIHNlbmQgSGlnaCBhZGRyZXNzIEFDSyAqLworICAgIFNMQVZFX0xfV1JfQUREUkVTU19BQ0ssICAgICAgIC8qITwgU2xhdmUgc2VuZCBMb3cgYWRkcmVzcyBBQ0sgKi8KKyAgICBTTEFWRV9HRVRfREFUQSwgICAgICAgICAgICAgICAvKiE8IFNsYXZlIEdldCBEYXRhIGZyb20gTWFzdGVyIChXcml0ZSBDTUQpICovCisgICAgU0xBVkVfU0VORF9EQVRBLCAgICAgICAgICAgICAgLyohPCBTbGF2ZSBTZW5kIERhdGEgdG8gTWFzdGVyIChSZWFkIENNRCkgKi8KKyAgICBTTEFWRV9IX1JEX0FERFJFU1NfQUNLLCAgICAgICAvKiE8IFNsYXZlIHNlbmQgSGlnaCBhZGRyZXNzIEFDSyAqLworICAgIFNMQVZFX0xfUkRfQUREUkVTU19BQ0sgICAgICAgIC8qITwgU2xhdmUgc2VuZCBMb3cgYWRkcmVzcyBBQ0sgKi8KK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBVU0NJX0NUTCBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVUkyQ19DVExfUFRSRyAgICAgICAgICAgICAgKDB4MjBVKSAgICAvKiE8IFVTQ0lfQ1RMIHNldHRpbmcgZm9yIEkyQyBjb250cm9sIGJpdHMuIEl0IHdvdWxkIHNldCBQVFJHIGJpdCAqLworI2RlZmluZSBVSTJDX0NUTF9TVEEgICAgICAgICAgICAgICAoMHgwOFUpICAgIC8qITwgVVNDSV9DVEwgc2V0dGluZyBmb3IgSTJDIGNvbnRyb2wgYml0cy4gSXQgd291bGQgc2V0IFNUQSBiaXQgKi8KKyNkZWZpbmUgVUkyQ19DVExfU1RPICAgICAgICAgICAgICAgKDB4MDRVKSAgICAvKiE8IFVTQ0lfQ1RMIHNldHRpbmcgZm9yIEkyQyBjb250cm9sIGJpdHMuIEl0IHdvdWxkIHNldCBTVE8gYml0ICovCisjZGVmaW5lIFVJMkNfQ1RMX0FBICAgICAgICAgICAgICAgICgweDAyVSkgICAgLyohPCBVU0NJX0NUTCBzZXR0aW5nIGZvciBJMkMgY29udHJvbCBiaXRzLiBJdCB3b3VsZCBzZXQgQUEgYml0ICAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgVVNDSV9JMkMgR0NNb2RlIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVJMkNfR0NNT0RFX0VOQUJMRSAgICAgICAgICgxVSkgICAgLyohPCBFbmFibGUgIFVTQ0lfSTJDIEdDIE1vZGUgKi8KKyNkZWZpbmUgVUkyQ19HQ01PREVfRElTQUJMRSAgICAgICAgKDBVKSAgICAvKiE8IERpc2FibGUgVVNDSV9JMkMgR0MgTW9kZSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgVVNDSV9JMkMgV2FrZXVwIE1vZGUgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVJMkNfREFUQV9UT0dHTEVfV0sgICAgICAgICgweDBVIDw8IFVJMkNfV0tDVExfV0tBRERSRU5fUG9zKSAgICAvKiE8IFdha2V1cCBhY2NvcmRpbmcgZGF0YSB0b2dnbGUgKi8KKyNkZWZpbmUgVUkyQ19BRERSX01BVENIX1dLICAgICAgICAgKDB4MVUgPDwgVUkyQ19XS0NUTF9XS0FERFJFTl9Qb3MpICAgIC8qITwgV2FrZXVwIGFjY29yZGluZyBhZGRyZXNzIG1hdGNoICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVTQ0lfSTJDIGludGVycnVwdCBtYXNrIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVUkyQ19UT19JTlRfTUFTSyAgICAgICAgICAgKDB4MDAxVSkgICAgLyohPCBUaW1lLW91dCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVSTJDX1NUQVJfSU5UX01BU0sgICAgICAgICAoMHgwMDJVKSAgICAvKiE8IFN0YXJ0IGNvbmRpdGlvbiByZWNlaXZlZCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVSTJDX1NUT1JfSU5UX01BU0sgICAgICAgICAoMHgwMDRVKSAgICAvKiE8IFN0b3AgY29uZGl0aW9uIHJlY2VpdmVkIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVJMkNfTkFDS19JTlRfTUFTSyAgICAgICAgICgweDAwOFUpICAgIC8qITwgTm9uLWFja25vd2xlZGdlIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVJMkNfQVJCTE9fSU5UX01BU0sgICAgICAgICgweDAxMFUpICAgIC8qITwgQXJiaXRyYXRpb24gbG9zdCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVSTJDX0VSUl9JTlRfTUFTSyAgICAgICAgICAoMHgwMjBVKSAgICAvKiE8IEVycm9yIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVJMkNfQUNLX0lOVF9NQVNLICAgICAgICAgICgweDA0MFUpICAgIC8qITwgQWNrbm93bGVkZ2UgaW50ZXJydXB0IG1hc2sgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVU0NJX0kyQ19FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgVVNDSV9JMkNfRVhQT1JURURfRlVOQ1RJT05TIFVTQ0lfSTJDIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgbWFjcm8gc2V0cyB0aGUgVVNDSV9JMkMgcHJvdG9jb2wgY29udHJvbCByZWdpc3RlciBhdCBvbmUgdGltZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1OEN0cmwgICAgU2V0IHRoZSByZWdpc3RlciB2YWx1ZSBvZiBVU0NJX0kyQyBjb250cm9sIHJlZ2lzdGVyLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgU2V0IFVJMkNfUFJPVENUTCByZWdpc3RlciB0byBjb250cm9sIFVTQ0lfSTJDIGJ1cyBjb25kaXRpb25zIG9mIFNUQVJULCBTVE9QLCBQVFJHLCBBQ0suCisgKi8KKyNkZWZpbmUgVUkyQ19TRVRfQ09OVFJPTF9SRUcodWkyYywgdThDdHJsKSAoKHVpMmMpLT5QUk9UQ1RMID0gKCh1aTJjKS0+UFJPVENUTCAmIH4weDJFVSkgfCAodThDdHJsKSkKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgbWFjcm8gb25seSBzZXQgU1RBUlQgYml0IHRvIHByb3RvY29sIGNvbnRyb2wgcmVnaXN0ZXIgb2YgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgU2V0IHRoZSBVU0NJX0kyQyBidXMgU1RBUlQgY29uZGl0aW9uIGluIFVJMkNfUFJPVENUTCByZWdpc3Rlci4KKyAqLworI2RlZmluZSBVSTJDX1NUQVJUKHVpMmMpICgodWkyYyktPlBST1RDVEwgPSAoKHVpMmMpLT5QUk9UQ1RMICYgflVJMkNfUFJPVENUTF9QVFJHX01zaykgfCBVSTJDX1BST1RDVExfU1RBX01zaykKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgbWFjcm8gb25seSBzZXQgU1RPUCBiaXQgdG8gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgb2YgVVNDSV9JMkMgbW9kdWxlCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBTZXQgdGhlIFVTQ0lfSTJDIGJ1cyBTVE9QIGNvbmRpdGlvbiBpbiBVSTJDX1BST1RDVEwgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgVUkyQ19TVE9QKHVpMmMpICgodWkyYyktPlBST1RDVEwgPSAoKHVpMmMpLT5QUk9UQ1RMICYgfjB4MkUpIHwgKFVJMkNfUFJPVENUTF9QVFJHX01zayB8IFVJMkNfUFJPVENUTF9TVE9fTXNrKSkKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgbWFjcm8gcmV0dXJucyB0aGUgZGF0YSBzdG9yZWQgaW4gZGF0YSByZWdpc3RlciBvZiBVU0NJX0kyQyBtb2R1bGUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIERhdGEKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFJlYWQgYSBieXRlIGRhdGEgdmFsdWUgb2YgVUkyQ19SWERBVCByZWdpc3RlciBmcm9tIFVTQ0lfSTJDIGJ1cworICovCisjZGVmaW5lIFVJMkNfR0VUX0RBVEEodWkyYykgKCh1aTJjKS0+UlhEQVQpCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIG1hY3JvIHdyaXRlcyB0aGUgZGF0YSB0byBkYXRhIHJlZ2lzdGVyIG9mIFVTQ0lfSTJDIG1vZHVsZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHU4RGF0YSAgIFRoZSBkYXRhIHdoaWNoIHdpbGwgYmUgd3JpdHRlbiB0byBkYXRhIHJlZ2lzdGVyIG9mIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFdyaXRlIGEgYnl0ZSBkYXRhIHZhbHVlIG9mIFVJMkNfVFhEQVQgcmVnaXN0ZXIsIHRoZW4gc2VuZHMgYWRkcmVzcyBvciBkYXRhIHRvIFVTQ0kgSTJDIGJ1cworICovCisjZGVmaW5lIFVJMkNfU0VUX0RBVEEodWkyYywgdThEYXRhKSAoKHVpMmMpLT5UWERBVCA9ICh1OERhdGEpKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBtYWNybyByZXR1cm5zIHRpbWUtb3V0IGZsYWcKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCAgICAgICAgVVNDSV9JMkMgYnVzIHRpbWUtb3V0IGlzIG5vdCBoYXBwZW5lZAorICogICAgQHJldHZhbCAgICAgICAxICAgICAgICBVU0NJX0kyQyBidXMgdGltZS1vdXQgaXMgaGFwcGVuZWQKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFVTQ0lfSTJDIGJ1cyBvY2N1cnMgdGltZS1vdXQgZXZlbnQsIHRoZSB0aW1lLW91dCBmbGFnIHdpbGwgYmUgc2V0LiBJZiBub3Qgb2NjdXJzIHRpbWUtb3V0IGV2ZW50LCB0aGlzIGJpdCBpcyBjbGVhcmVkLgorICovCisjZGVmaW5lIFVJMkNfR0VUX1RJTUVPVVRfRkxBRyh1aTJjKSAoKCh1aTJjKS0+UFJPVFNUUyAmIFVJMkNfUFJPVFNUU19UT0lGX01zaykgPT0gVUkyQ19QUk9UU1RTX1RPSUZfTXNrID8gMTowKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBtYWNybyByZXR1cm5zIHdha2UtdXAgZmxhZworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHZhbCAgICAgICAwICAgICAgICBDaGlwIGlzIG5vdCB3b2tlbi11cCBmcm9tIHBvd2VyLWRvd24gbW9kZQorICogICAgQHJldHZhbCAgICAgICAxICAgICAgICBDaGlwIGlzIHdva2VuLXVwIGZyb20gcG93ZXItZG93biBtb2RlCisgKgorICogICAgQGRldGFpbHMgICAgICBVU0NJX0kyQyBjb250cm9sbGVyIHdha2UtdXAgZmxhZyB3aWxsIGJlIHNldCB3aGVuIFVTQ0lfSTJDIGJ1cyBvY2N1cnMgd2FrZS11cCBmcm9tIGRlZXAtc2xlZXAuCisgKi8KKyNkZWZpbmUgVUkyQ19HRVRfV0FLRVVQX0ZMQUcodWkyYykgKCgodWkyYyktPldLU1RTICYgVUkyQ19XS1NUU19XS0ZfTXNrKSA9PSBVSTJDX1dLU1RTX1dLRl9Nc2sgPyAxOjApCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY2xlYXIgVVNDSV9JMkMgd2FrZS11cCBmbGFnCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIElmIFVTQ0lfSTJDIHdha2UtdXAgZmxhZyBpcyBzZXQsIHVzZSB0aGlzIG1hY3JvIHRvIGNsZWFyIGl0LgorICovCisjZGVmaW5lIFVJMkNfQ0xSX1dBS0VVUF9GTEFHKHVpMmMpICAoKHVpMmMpLT5XS1NUUyA9IFVJMkNfV0tTVFNfV0tGX01zaykKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgbWFjcm8gZGlzYWJsZXMgdGhlIFVTQ0lfSTJDIDEwLWJpdCBhZGRyZXNzIG1vZGUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIFVJMkNfSTJDIGlzIDctYml0IGFkZHJlc3MgbW9kZSwgd2hlbiBkaXNhYmxlIFVTQ0lfSTJDIDEwLWJpdCBhZGRyZXNzIG1hdGNoIGZ1bmN0aW9uLgorICovCisjZGVmaW5lIFVJMkNfRElTQUJMRV8xMEJJVF9BRERSX01PREUodWkyYykgICgodWkyYyktPlBST1RDVEwgJj0gfihVSTJDX1BST1RDVExfQUREUjEwRU5fTXNrKSkKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgbWFjcm8gZW5hYmxlcyB0aGUgMTAtYml0IGFkZHJlc3MgbW9kZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUbyBlbmFibGUgVVNDSV9JMkMgMTAtYml0IGFkZHJlc3MgbWF0Y2ggZnVuY3Rpb24uCisgKi8KKyNkZWZpbmUgVUkyQ19FTkFCTEVfMTBCSVRfQUREUl9NT0RFKHVpMmMpICAoKHVpMmMpLT5QUk9UQ1RMIHw9IFVJMkNfUFJPVENUTF9BRERSMTBFTl9Nc2spCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIG1hY3JvIGdldHMgVVNDSV9JMkMgcHJvdG9jb2wgaW50ZXJydXB0IGZsYWcgb3IgYnVzIHN0YXR1cworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBBIHdvcmQgZGF0YSBvZiBVU0NJX0kyQ19QUk9UU1RTIHJlZ2lzdGVyCisgKgorICogICAgQGRldGFpbHMgICAgICBSZWFkIGEgd29yZCBkYXRhIG9mIFVTQ0lfSTJDIFBST1RTVFMgcmVnaXN0ZXIgdG8gZ2V0IFVTQ0lfSTJDIGJ1cyBJbnRlcnJ1cHQgZmxhZ3Mgb3Igc3RhdHVzLgorICovCisjZGVmaW5lIFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICAgICgodWkyYyktPlBST1RTVFMpCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIG1hY3JvIGNsZWFycyBzcGVjaWZpZWQgcHJvdG9jb2wgaW50ZXJydXB0IGZsYWcKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkludFR5cGVGbGFnIEludGVycnVwdCBUeXBlIEZsYWcsIHNob3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1BST1RTVFNfRVJSSUZfTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9UU1RTX0FSQkxPSUZfTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1BST1RTVFNfU1RPUklGX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9UU1RTX1RPSUZfTXNrCisgKiAgICBAcmV0dXJuIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRvIGNsZWFyIGludGVycnVwdCBmbGFnIHdoZW4gVVNDSV9JMkMgb2NjdXJzIGludGVycnVwdCBhbmQgc2V0IGludGVycnVwdCBmbGFnLgorICovCisjZGVmaW5lIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYyx1MzJJbnRUeXBlRmxhZykgICAgKCh1aTJjKS0+UFJPVFNUUyA9ICh1MzJJbnRUeXBlRmxhZykpCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIG1hY3JvIGVuYWJsZXMgc3BlY2lmaWVkIHByb3RvY29sIGludGVycnVwdAorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMySW50U2VsIEludGVycnVwdCBUeXBlLCBzaG91bGQgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1BST1RJRU5fQUNLSUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVElFTl9FUlJJRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9USUVOX0FSQkxPSUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVElFTl9OQUNLSUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVElFTl9TVE9SSUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVElFTl9TVEFSSUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVElFTl9UT0lFTl9Nc2sKKyAqICAgIEByZXR1cm4gTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgU2V0IHNwZWNpZmllZCBVU0NJX0kyQyBwcm90b2NvbCBpbnRlcnJ1cHQgYml0cyB0byBlbmFibGUgaW50ZXJydXB0IGZ1bmN0aW9uLgorICovCisjZGVmaW5lIFVJMkNfRU5BQkxFX1BST1RfSU5UKHVpMmMsIHUzMkludFNlbCkgICAgKCh1aTJjKS0+UFJPVElFTiB8PSAodTMySW50U2VsKSkKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgbWFjcm8gZGlzYWJsZXMgc3BlY2lmaWVkIHByb3RvY29sIGludGVycnVwdAorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMySW50U2VsIEludGVycnVwdCBUeXBlLCBzaG91bGQgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1BST1RJRU5fQUNLSUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVElFTl9FUlJJRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9USUVOX0FSQkxPSUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVElFTl9OQUNLSUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVElFTl9TVE9SSUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVElFTl9TVEFSSUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVElFTl9UT0lFTl9Nc2sKKyAqICAgIEByZXR1cm4gTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgQ2xlYXIgc3BlY2lmaWVkIFVTQ0lfSTJDIHByb3RvY29sIGludGVycnVwdCBiaXRzIHRvIGRpc2FibGUgaW50ZXJydXB0IGZ1bnRpb24uCisgKi8KKyNkZWZpbmUgVUkyQ19ESVNBQkxFX1BST1RfSU5UKHVpMmMsIHUzMkludFNlbCkgICAgKCh1aTJjKS0+UFJPVElFTiAmPSB+ICh1MzJJbnRTZWwpKQorCisKK3VpbnQzMl90IFVJMkNfT3BlbihVSTJDX1QgKnVpMmMsIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKTsKK3ZvaWQgVUkyQ19DbG9zZShVSTJDX1QgKnVpMmMpOwordm9pZCBVSTJDX0NsZWFyVGltZW91dEZsYWcoVUkyQ19UICp1aTJjKTsKK3ZvaWQgVUkyQ19UcmlnZ2VyKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFN0YXJ0LCB1aW50OF90IHU4U3RvcCwgdWludDhfdCB1OFB0cmcsIHVpbnQ4X3QgdThBY2spOwordm9pZCBVSTJDX0Rpc2FibGVJbnQoVUkyQ19UICp1aTJjLCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgVUkyQ19FbmFibGVJbnQoVUkyQ19UICp1aTJjLCB1aW50MzJfdCB1MzJNYXNrKTsKK3VpbnQzMl90IFVJMkNfR2V0QnVzQ2xvY2tGcmVxKFVJMkNfVCAqdWkyYyk7Cit1aW50MzJfdCBVSTJDX1NldEJ1c0Nsb2NrRnJlcShVSTJDX1QgKnVpMmMsIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKTsKK3VpbnQzMl90IFVJMkNfR2V0SW50RmxhZyhVSTJDX1QgKnVpMmMsIHVpbnQzMl90IHUzMk1hc2spOwordm9pZCBVSTJDX0NsZWFySW50RmxhZyhVSTJDX1QqIHVpMmMsIHVpbnQzMl90IHUzMk1hc2spOwordWludDMyX3QgVUkyQ19HZXREYXRhKFVJMkNfVCAqdWkyYyk7Cit2b2lkIFVJMkNfU2V0RGF0YShVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThEYXRhKTsKK3ZvaWQgVUkyQ19TZXRTbGF2ZUFkZHIoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVObywgdWludDE2X3QgdTE2U2xhdmVBZGRyLCB1aW50OF90IHU4R0NNb2RlKTsKK3ZvaWQgVUkyQ19TZXRTbGF2ZUFkZHJNYXNrKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlTm8sIHVpbnQxNl90IHUxNlNsYXZlQWRkck1hc2spOwordm9pZCBVSTJDX0VuYWJsZVRpbWVvdXQoVUkyQ19UICp1aTJjLCB1aW50MzJfdCB1MzJUaW1lb3V0Q250KTsKK3ZvaWQgVUkyQ19EaXNhYmxlVGltZW91dChVSTJDX1QgKnVpMmMpOwordm9pZCBVSTJDX0VuYWJsZVdha2V1cChVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThXYWtldXBNb2RlKTsKK3ZvaWQgVUkyQ19EaXNhYmxlV2FrZXVwKFVJMkNfVCAqdWkyYyk7Cit1aW50OF90IFVJMkNfV3JpdGVCeXRlKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCBkYXRhKTsKK3VpbnQzMl90IFVJMkNfV3JpdGVNdWx0aUJ5dGVzKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCBkYXRhW10sIHVpbnQzMl90IHUzMndMZW4pOwordWludDhfdCBVSTJDX1dyaXRlQnl0ZU9uZVJlZyhVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhQWRkciwgdWludDhfdCBkYXRhKTsKK3VpbnQzMl90IFVJMkNfV3JpdGVNdWx0aUJ5dGVzT25lUmVnKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGFBZGRyLCB1aW50OF90IGRhdGFbXSwgdWludDMyX3QgdTMyd0xlbik7Cit1aW50OF90IFVJMkNfV3JpdGVCeXRlVHdvUmVncyhVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQxNl90IHUxNkRhdGFBZGRyLCB1aW50OF90IGRhdGEpOwordWludDMyX3QgVUkyQ19Xcml0ZU11bHRpQnl0ZXNUd29SZWdzKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDE2X3QgdTE2RGF0YUFkZHIsIHVpbnQ4X3QgZGF0YVtdLCB1aW50MzJfdCB1MzJ3TGVuKTsKK3VpbnQ4X3QgVUkyQ19SZWFkQnl0ZShVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIpOwordWludDMyX3QgVUkyQ19SZWFkTXVsdGlCeXRlcyhVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgcmRhdGFbXSwgdWludDMyX3QgdTMyckxlbik7Cit1aW50OF90IFVJMkNfUmVhZEJ5dGVPbmVSZWcoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IHU4RGF0YUFkZHIpOwordWludDMyX3QgVUkyQ19SZWFkTXVsdGlCeXRlc09uZVJlZyhVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhQWRkciwgdWludDhfdCByZGF0YVtdLCB1aW50MzJfdCB1MzJyTGVuKTsKK3VpbnQ4X3QgVUkyQ19SZWFkQnl0ZVR3b1JlZ3MoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50MTZfdCB1MTZEYXRhQWRkcik7Cit1aW50MzJfdCBVSTJDX1JlYWRNdWx0aUJ5dGVzVHdvUmVncyhVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQxNl90IHUxNkRhdGFBZGRyLCB1aW50OF90IHJkYXRhW10sIHVpbnQzMl90IHUzMnJMZW4pOworLypAfSovIC8qIGVuZCBvZiBncm91cCBVU0NJX0kyQ19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVU0NJX0kyQ19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3VzY2lfc3BpLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy91c2NpX3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZjFmNDAKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy91c2NpX3NwaS5oCkBAIC0wLDAgKzEsNDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB1c2NpX3NwaS5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgVVNDSV9TUEkgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19VU0NJX1NQSV9IX18KKyNkZWZpbmUgX19VU0NJX1NQSV9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFVTQ0lfU1BJX0RyaXZlciBVU0NJX1NQSSBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBVU0NJX1NQSV9FWFBPUlRFRF9DT05TVEFOVFMgVVNDSV9TUEkgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisjZGVmaW5lIFVTUElfTU9ERV8wICAgICAgICAoMHgwVUwgPDwgVVNQSV9QUk9UQ1RMX1NDTEtNT0RFX1BvcykgICAgICAgIC8qITwgU0NMSyBpZGxlIGxvdzsgZGF0YSB0cmFuc21pdCB3aXRoIGZhbGxpbmcgZWRnZSBhbmQgcmVjZWl2ZSB3aXRoIHJpc2luZyBlZGdlICovCisjZGVmaW5lIFVTUElfTU9ERV8xICAgICAgICAoMHgxVUwgPDwgVVNQSV9QUk9UQ1RMX1NDTEtNT0RFX1BvcykgICAgICAgIC8qITwgU0NMSyBpZGxlIGxvdzsgZGF0YSB0cmFuc21pdCB3aXRoIHJpc2luZyBlZGdlIGFuZCByZWNlaXZlIHdpdGggZmFsbGluZyBlZGdlICovCisjZGVmaW5lIFVTUElfTU9ERV8yICAgICAgICAoMHgyVUwgPDwgVVNQSV9QUk9UQ1RMX1NDTEtNT0RFX1BvcykgICAgICAgIC8qITwgU0NMSyBpZGxlIGhpZ2g7IGRhdGEgdHJhbnNtaXQgd2l0aCByaXNpbmcgZWRnZSBhbmQgcmVjZWl2ZSB3aXRoIGZhbGxpbmcgZWRnZSAqLworI2RlZmluZSBVU1BJX01PREVfMyAgICAgICAgKDB4M1VMIDw8IFVTUElfUFJPVENUTF9TQ0xLTU9ERV9Qb3MpICAgICAgICAvKiE8IFNDTEsgaWRsZSBoaWdoOyBkYXRhIHRyYW5zbWl0IHdpdGggZmFsbGluZyBlZGdlIGFuZCByZWNlaXZlIHdpdGggcmlzaW5nIGVkZ2UgKi8KKworI2RlZmluZSBVU1BJX1NMQVZFICAgICAgICAgKFVTUElfUFJPVENUTF9TTEFWRV9Nc2spICAgICAgICAgICAgICAgICAgICAvKiE8IFNldCBhcyBzbGF2ZSAqLworI2RlZmluZSBVU1BJX01BU1RFUiAgICAgICAgKDB4MFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNldCBhcyBtYXN0ZXIgKi8KKworI2RlZmluZSBVU1BJX1NTICAgICAgICAgICAgICAgIChVU1BJX1BST1RDVExfU1NfTXNrKSAgICAgICAgICAgICAgICAgICAvKiE8IFNldCBTUyAqLworI2RlZmluZSBVU1BJX1NTX0FDVElWRV9ISUdIICAgICgweDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNTIGFjdGl2ZSBoaWdoICovCisjZGVmaW5lIFVTUElfU1NfQUNUSVZFX0xPVyAgICAgKFVTUElfTElORUNUTF9DVExPSU5WX01zaykgICAgICAgICAgICAgIC8qITwgU1MgYWN0aXZlIGxvdyAqLworCisvKiBVU0NJX1NQSSBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSBVU1BJX1NTSU5BQ1RfSU5UX01BU0sgICAgICAgICgweDAwMVVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIFNsYXZlIEluYWN0aXZlIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVTUElfU1NBQ1RfSU5UX01BU0sgICAgICAgICAgKDB4MDAyVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xhdmUgU2xhdmUgQWN0aXZlIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVTUElfU0xWVE9fSU5UX01BU0sgICAgICAgICAgKDB4MDA0VUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xhdmUgTW9kZSBUaW1lLW91dCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVU1BJX1NMVkJFX0lOVF9NQVNLICAgICAgICAgICgweDAwOFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIE1vZGUgQml0IENvdW50IEVycm9yIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVTUElfVFhVRFJfSU5UX01BU0sgICAgICAgICAgKDB4MDEwVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xhdmUgVHJhbnNtaXQgVW5kZXIgUnVuIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVTUElfUlhPVl9JTlRfTUFTSyAgICAgICAgICAgKDB4MDIwVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBCdWZmZXIgT3ZlcnJ1biBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVU1BJX1RYU1RfSU5UX01BU0sgICAgICAgICAgICgweDA0MFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRyYW5zbWl0IFN0YXJ0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVTUElfVFhFTkRfSU5UX01BU0sgICAgICAgICAgKDB4MDgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHJhbnNtaXQgRW5kIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVTUElfUlhTVF9JTlRfTUFTSyAgICAgICAgICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBTdGFydCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVU1BJX1JYRU5EX0lOVF9NQVNLICAgICAgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlY2VpdmUgRW5kIGludGVycnVwdCBtYXNrICovCisKKy8qIFVTQ0lfU1BJIFN0YXR1cyBNYXNrICovCisjZGVmaW5lIFVTUElfQlVTWV9NQVNLICAgICAgICAgICAgICAgKDB4MDFVTCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQnVzeSBzdGF0dXMgbWFzayAqLworI2RlZmluZSBVU1BJX1JYX0VNUFRZX01BU0sgICAgICAgICAgICgweDAyVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYIGVtcHR5IHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFVTUElfUlhfRlVMTF9NQVNLICAgICAgICAgICAgKDB4MDRVTCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlggZnVsbCBzdGF0dXMgbWFzayAqLworI2RlZmluZSBVU1BJX1RYX0VNUFRZX01BU0sgICAgICAgICAgICgweDA4VUwpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRYIGVtcHR5IHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFVTUElfVFhfRlVMTF9NQVNLICAgICAgICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFggZnVsbCBzdGF0dXMgbWFzayAqLworI2RlZmluZSBVU1BJX1NTTElORV9TVFNfTUFTSyAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQ0lfU1BJX1NTIGxpbmUgc3RhdHVzIG1hc2sgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVU0NJX1NQSV9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgVVNDSV9TUElfRVhQT1JURURfRlVOQ1RJT05TIFVTQ0lfU1BJIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIHNsYXZlIDMtd2lyZSBtb2RlLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX0RJU0FCTEVfM1dJUkVfTU9ERSh1c3BpKSAoICh1c3BpKS0+UFJPVENUTCAmPSB+VVNQSV9QUk9UQ1RMX1NMVjNXSVJFX01zayApCisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIHNsYXZlIDMtd2lyZSBtb2RlLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX0VOQUJMRV8zV0lSRV9NT0RFKHVzcGkpICggKHVzcGkpLT5QUk9UQ1RMIHw9IFVTUElfUFJPVENUTF9TTFYzV0lSRV9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgUnggYnVmZmVyIGVtcHR5IGZsYWcuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIFJ4IGJ1ZmZlciBmbGFnCisgICogQHJldHZhbCAwOiBSeCBidWZmZXIgaXMgbm90IGVtcHR5CisgICogQHJldHZhbCAxOiBSeCBidWZmZXIgaXMgZW1wdHkKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfR0VUX1JYX0VNUFRZX0ZMQUcodXNwaSkgKCAoKHVzcGkpLT5CVUZTVFMgJiBVU1BJX0JVRlNUU19SWEVNUFRZX01zaykgPT0gVVNQSV9CVUZTVFNfUlhFTVBUWV9Nc2sgPyAxOjAgKQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgVHggYnVmZmVyIGVtcHR5IGZsYWcuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIFR4IGJ1ZmZlciBmbGFnCisgICogQHJldHZhbCAwOiBUeCBidWZmZXIgaXMgbm90IGVtcHR5CisgICogQHJldHZhbCAxOiBUeCBidWZmZXIgaXMgZW1wdHkKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfR0VUX1RYX0VNUFRZX0ZMQUcodXNwaSkgKCAoKHVzcGkpLT5CVUZTVFMgJiBVU1BJX0JVRlNUU19UWEVNUFRZX01zaykgPT0gVVNQSV9CVUZTVFNfVFhFTVBUWV9Nc2sgPyAxOjAgKQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgVHggYnVmZmVyIGZ1bGwgZmxhZy4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gVHggYnVmZmVyIGZsYWcKKyAgKiBAcmV0dmFsIDA6IFR4IGJ1ZmZlciBpcyBub3QgZnVsbAorICAqIEByZXR2YWwgMTogVHggYnVmZmVyIGlzIGZ1bGwKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfR0VUX1RYX0ZVTExfRkxBRyh1c3BpKSAoICgodXNwaSktPkJVRlNUUyAmIFVTUElfQlVGU1RTX1RYRlVMTF9Nc2spID09IFVTUElfQlVGU1RTX1RYRlVMTF9Nc2sgPyAxOjAgKQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgZGF0dW0gcmVhZCBmcm9tIFJYIHJlZ2lzdGVyLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBkYXRhIGluIFJ4IHJlZ2lzdGVyCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX1JFQURfUlgodXNwaSkgKCAodXNwaSktPlJYREFUICkKKworLyoqCisgICogQGJyaWVmICBXcml0ZSBkYXR1bSB0byBUWCByZWdpc3Rlci4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlR4RGF0YSBUaGUgZGF0dW0gd2hpY2ggdXNlciBhdHRlbXB0IHRvIHRyYW5zZmVyIHRocm91Z2ggVVNDSV9TUEkgYnVzLgorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9XUklURV9UWCh1c3BpLCB1MzJUeERhdGEpICggKHVzcGkpLT5UWERBVCA9ICh1MzJUeERhdGEpICkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFVTQ0lfU1BJX1NTIHBpbiB0byBoaWdoIHN0YXRlLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBEaXNhYmxlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24gYW5kIHNldCBVU0NJX1NQSV9TUyBwaW4gdG8gaGlnaCBzdGF0ZS4gT25seSBhdmFpbGFibGUgaW4gTWFzdGVyIG1vZGUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX1NFVF9TU19ISUdIKHVzcGkpIFwKKyAgICBkb3sgXAorICAgICAgICAodXNwaSktPkxJTkVDVEwgJj0gflVTUElfTElORUNUTF9DVExPSU5WX01zazsgXAorICAgICAgICAodXNwaSktPlBST1RDVEwgPSAoKCh1c3BpKS0+UFJPVENUTCAmIH5VU1BJX1BST1RDVExfQVVUT1NTX01zaykgfCBVU1BJX1BST1RDVExfU1NfTXNrKTsgXAorICAgIH13aGlsZSgwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgVVNDSV9TUElfU1MgcGluIHRvIGxvdyBzdGF0ZS4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgRGlzYWJsZSBhdXRvbWF0aWMgc2xhdmUgc2VsZWN0aW9uIGZ1bmN0aW9uIGFuZCBzZXQgVVNDSV9TUElfU1MgcGluIHRvIGxvdyBzdGF0ZS4gT25seSBhdmFpbGFibGUgaW4gTWFzdGVyIG1vZGUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX1NFVF9TU19MT1codXNwaSkgXAorICAgIGRveyBcCisgICAgICAgICh1c3BpKS0+TElORUNUTCB8PSBVU1BJX0xJTkVDVExfQ1RMT0lOVl9Nc2s7IFwKKyAgICAgICAgKHVzcGkpLT5QUk9UQ1RMID0gKCgodXNwaSktPlBST1RDVEwgJiB+VVNQSV9QUk9UQ1RMX0FVVE9TU19Nc2spIHwgVVNQSV9QUk9UQ1RMX1NTX01zayk7IFwKKyAgICB9d2hpbGUoMCkKKworLyoqCisgICogQGJyaWVmICBTZXQgdGhlIGxlbmd0aCBvZiBzdXNwZW5kIGludGVydmFsLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyU3VzcEN5Y2xlIERlY2lkZSB0aGUgbGVuZ3RoIG9mIHN1c3BlbmQgaW50ZXJ2YWwuCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX1NFVF9TVVNQRU5EX0NZQ0xFKHVzcGksIHUzMlN1c3BDeWNsZSkgKCAodXNwaSktPlBST1RDVEwgPSAoKHVzcGkpLT5QUk9UQ1RMICYgflVTUElfUFJPVENUTF9TVVNQSVRWX01zaykgfCAoKHUzMlN1c3BDeWNsZSkgPDwgVVNQSV9QUk9UQ1RMX1NVU1BJVFZfUG9zKSApCisKKy8qKgorICAqIEBicmllZiAgU2V0IHRoZSBVU0NJX1NQSSB0cmFuc2ZlciBzZXF1ZW5jZSB3aXRoIExTQiBmaXJzdC4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9TRVRfTFNCX0ZJUlNUKHVzcGkpICggKHVzcGkpLT5MSU5FQ1RMIHw9IFVTUElfTElORUNUTF9MU0JfTXNrICkKKworLyoqCisgICogQGJyaWVmICBTZXQgdGhlIFVTQ0lfU1BJIHRyYW5zZmVyIHNlcXVlbmNlIHdpdGggTVNCIGZpcnN0LgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX1NFVF9NU0JfRklSU1QodXNwaSkgKCAodXNwaSktPkxJTkVDVEwgJj0gflVTUElfTElORUNUTF9MU0JfTXNrICkKKworLyoqCisgICogQGJyaWVmICBTZXQgdGhlIGRhdGEgd2lkdGggb2YgYSBVU0NJX1NQSSB0cmFuc2FjdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMldpZHRoIFRoZSBkYXRhIHdpZHRoCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX1NFVF9EQVRBX1dJRFRIKHVzcGksIHUzMldpZHRoKSBcCisgICAgZG97IFwKKyAgICAgIGlmKCh1MzJXaWR0aCkgPT0gMTZ1bCl7IFwKKyAgICAgICAgKHVzcGkpLT5MSU5FQ1RMID0gKCh1c3BpKS0+TElORUNUTCAmIH5VU1BJX0xJTkVDVExfRFdJRFRIX01zaykgfCAoMCA8PCBVU1BJX0xJTkVDVExfRFdJRFRIX1Bvcyk7IFwKKyAgICAgIH1lbHNlIHsgXAorICAgICAgICAodXNwaSktPkxJTkVDVEwgPSAoKHVzcGkpLT5MSU5FQ1RMICYgflVTUElfTElORUNUTF9EV0lEVEhfTXNrKSB8ICgodTMyV2lkdGgpIDw8IFVTUElfTElORUNUTF9EV0lEVEhfUG9zKTsgXAorICAgICAgfSBcCisgICAgfXdoaWxlKDApCisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBVU0NJX1NQSSBidXN5IHN0YXRlLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBVU0NJX1NQSSBidXN5IHN0YXR1cworICAqIEByZXR2YWwgMDogVVNDSV9TUEkgbW9kdWxlIGlzIG5vdCBidXN5CisgICogQHJldHZhbCAxOiBVU0NJX1NQSSBtb2R1bGUgaXMgYnVzeQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9JU19CVVNZKHVzcGkpICggKCh1c3BpKS0+UFJPVFNUUyAmIFVTUElfUFJPVFNUU19CVVNZX01zaykgPT0gVVNQSV9QUk9UU1RTX0JVU1lfTXNrID8gMTowICkKKworLyoqCisgICogQGJyaWVmIEdldCB0aGUgVVNDSV9TUEkgd2FrZXVwIGZsYWcuCisgICogQHBhcmFtW2luXSB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gV2FrZXVwIHN0YXR1cy4KKyAgKiBAcmV0dmFsIDAgRmxhZyBpcyBub3Qgc2V0LgorICAqIEByZXR2YWwgMSBGbGFnIGlzIHNldC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfR0VUX1dBS0VVUF9GTEFHKHVzcGkpICggKCh1c3BpKS0+V0tTVFMgJiBVU1BJX1dLU1RTX1dLRl9Nc2spID09IFVTUElfV0tTVFNfV0tGX01zayA/IDE6MCApCisKKy8qKgorICAqIEBicmllZiBDbGVhciB0aGUgVVNDSV9TUEkgd2FrZXVwIGZsYWcuCisgICogQHBhcmFtW2luXSB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9DTFJfV0FLRVVQX0ZMQUcodXNwaSkgKCAodXNwaSktPldLU1RTIHw9IFVTUElfV0tTVFNfV0tGX01zayApCisKKy8qKgorICAqIEBicmllZiBHZXQgcHJvdG9jb2wgaW50ZXJydXB0IGZsYWcvc3RhdHVzLgorICAqIEBwYXJhbVtpbl0gdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIFRoZSBpbnRlcnJ1cHQgZmxhZy9zdGF0dXMgb2YgcHJvdG9jb2wgc3RhdHVzIHJlZ2lzdGVyLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9HRVRfUFJPVF9TVEFUVVModXNwaSkgKCAodXNwaSktPlBST1RTVFMgKQorCisvKioKKyAgKiBAYnJpZWYgQ2xlYXIgc3BlY2lmaWVkIHByb3RvY29sIGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbVtpbl0gdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkludFR5cGVGbGFnIEludGVycnVwdCBUeXBlIEZsYWcsIHNob3VsZCBiZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX1BST1RTVFNfU1NBQ1RJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9QUk9UU1RTX1NTSU5BSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfUFJPVFNUU19TTFZCRUlGX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX1BST1RTVFNfU0xWVE9JRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9QUk9UU1RTX1JYRU5ESUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfUFJPVFNUU19SWFNUSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfUFJPVFNUU19UWEVORElGX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX1BST1RTVFNfVFhTVElGX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9DTFJfUFJPVF9JTlRfRkxBRyh1c3BpLCB1MzJJbnRUeXBlRmxhZykgKCAodXNwaSktPlBST1RTVFMgPSAodTMySW50VHlwZUZsYWcpICkKKworLyoqCisgICogQGJyaWVmIEdldCBidWZmZXIgaW50ZXJydXB0IGZsYWcvc3RhdHVzLgorICAqIEBwYXJhbVtpbl0gdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIFRoZSBpbnRlcnJ1cHQgZmxhZy9zdGF0dXMgb2YgYnVmZmVyIHN0YXR1cyByZWdpc3Rlci4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfR0VUX0JVRl9TVEFUVVModXNwaSkgKCAodXNwaSktPkJVRlNUUyApCisKKy8qKgorICAqIEBicmllZiBDbGVhciBzcGVjaWZpZWQgYnVmZmVyIGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbVtpbl0gdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkludFR5cGVGbGFnIEludGVycnVwdCBUeXBlIEZsYWcsIHNob3VsZCBiZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX0JVRlNUU19UWFVEUklGX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX0JVRlNUU19SWE9WSUZfTXNrCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX0NMUl9CVUZfSU5UX0ZMQUcodXNwaSwgdTMySW50VHlwZUZsYWcpICggKHVzcGkpLT5CVUZTVFMgPSAodTMySW50VHlwZUZsYWcpICkKKworLyoqCisgICogQGJyaWVmIEVuYWJsZSBzcGVjaWZpZWQgcHJvdG9jb2wgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkludFNlbCBJbnRlcnJ1cHQgVHlwZSwgc2hvdWxkIGJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfUFJPVElFTl9TTFZCRUlFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9QUk9USUVOX1NMVlRPSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX1BST1RJRU5fU1NBQ1RJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfUFJPVElFTl9TU0lOQUlFTl9Nc2sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfRU5BQkxFX1BST1RfSU5UKHVzcGksIHUzMkludFNlbCkgKCAodXNwaSktPlBST1RJRU4gfD0gKHUzMkludFNlbCkgKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBzcGVjaWZpZWQgcHJvdG9jb2wgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkludFNlbCBJbnRlcnJ1cHQgVHlwZSwgc2hvdWxkIGJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfUFJPVElFTl9TTFZCRUlFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9QUk9USUVOX1NMVlRPSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX1BST1RJRU5fU1NBQ1RJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfUFJPVElFTl9TU0lOQUlFTl9Nc2sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfRElTQUJMRV9QUk9UX0lOVCh1c3BpLCB1MzJJbnRTZWwpICggKHVzcGkpLT5QUk9USUVOICY9IH4gKHUzMkludFNlbCkgKQorCisvKioKKyAgKiBAYnJpZWYgRW5hYmxlIHNwZWNpZmllZCBidWZmZXIgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkludFNlbCBJbnRlcnJ1cHQgVHlwZSwgc2hvdWxkIGJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfQlVGQ1RMX1JYT1ZJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfQlVGQ1RMX1RYVURSSUVOX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9FTkFCTEVfQlVGX0lOVCh1c3BpLCB1MzJJbnRTZWwpICggKHVzcGkpLT5CVUZDVEwgfD0gKHUzMkludFNlbCkgKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBzcGVjaWZpZWQgYnVmZmVyIGludGVycnVwdC4KKyAgKiBAcGFyYW1baW5dIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJJbnRTZWwgSW50ZXJydXB0IFR5cGUsIHNob3VsZCBiZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX0JVRkNUTF9SWE9WSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX0JVRkNUTF9UWFVEUklFTl9Nc2sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfRElTQUJMRV9CVUZfSU5UKHVzcGksIHUzMkludFNlbCkgKCAodXNwaSktPkJVRkNUTCAmPSB+ICh1MzJJbnRTZWwpICkKKworLyoqCisgICogQGJyaWVmIEVuYWJsZSBzcGVjaWZpZWQgdHJhbnNmZXIgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkludFNlbCBJbnRlcnJ1cHQgVHlwZSwgc2hvdWxkIGJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfSU5URU5fUlhFTkRJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfSU5URU5fUlhTVElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9JTlRFTl9UWEVORElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9JTlRFTl9UWFNUSUVOX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9FTkFCTEVfVFJBTlNfSU5UKHVzcGksIHUzMkludFNlbCkgKCAodXNwaSktPklOVEVOIHw9ICh1MzJJbnRTZWwpICkKKworLyoqCisgICogQGJyaWVmIERpc2FibGUgc3BlY2lmaWVkIHRyYW5zZmVyIGludGVycnVwdC4KKyAgKiBAcGFyYW1baW5dIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJJbnRTZWwgSW50ZXJydXB0IFR5cGUsIHNob3VsZCBiZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX0lOVEVOX1JYRU5ESUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX0lOVEVOX1JYU1RJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfSU5URU5fVFhFTkRJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfSU5URU5fVFhTVElFTl9Nc2sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfRElTQUJMRV9UUkFOU19JTlQodXNwaSwgdTMySW50U2VsKSAoICh1c3BpKS0+SU5URU4gJj0gfiAodTMySW50U2VsKSApCisKKy8qKgorICAqIEBicmllZiAgICAgIFRyaWdnZXIgUlggUERNQSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgU2V0IFJYUERNQUVOIGJpdCBvZiBVU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIFJYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFVTUElfVFJJR0dFUl9SWF9QRE1BKHVzcGkpICggKHVzcGkpLT5QRE1BQ1RMIHw9IFVTUElfUERNQUNUTF9SWFBETUFFTl9Nc2sgfCBVU1BJX1BETUFDVExfUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIFRyaWdnZXIgVFggUERNQSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgU2V0IFRYUERNQUVOIGJpdCBvZiBVU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIFRYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFVTUElfVFJJR0dFUl9UWF9QRE1BKHVzcGkpICggKHVzcGkpLT5QRE1BQ1RMIHw9IFVTUElfUERNQUNUTF9UWFBETUFFTl9Nc2sgfCBVU1BJX1BETUFDVExfUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIFRyaWdnZXIgVFggYW5kIFJYIFBETUEgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBUWFBETUFFTiBiaXQgYW5kIFJYUERNQUVOIGJpdCBvZiBVU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIFRYIGFuZCBSWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBVU1BJX1RSSUdHRVJfVFhfUlhfUERNQSh1c3BpKSAoICh1c3BpKS0+UERNQUNUTCB8PSBVU1BJX1BETUFDVExfVFhQRE1BRU5fTXNrIHwgVVNQSV9QRE1BQ1RMX1JYUERNQUVOX01zayB8IFVTUElfUERNQUNUTF9QRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBSWCBQRE1BIHRyYW5zZmVyLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBSWFBETUFFTiBiaXQgb2YgVVNQSV9QRE1BQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgUlggUERNQSB0cmFuc2ZlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgVVNQSV9ESVNBQkxFX1JYX1BETUEodXNwaSkgKCAodXNwaSktPlBETUFDVEwgJj0gflVTUElfUERNQUNUTF9SWFBETUFFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFRYIFBETUEgdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFRYUERNQUVOIGJpdCBvZiBVU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBUWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBVU1BJX0RJU0FCTEVfVFhfUERNQSh1c3BpKSAoICh1c3BpKS0+UERNQUNUTCAmPSB+VVNQSV9QRE1BQ1RMX1RYUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgVFggYW5kIFJYIFBETUEgdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFRYUERNQUVOIGJpdCBhbmQgUlhQRE1BRU4gYml0IG9mIFVTUElfUERNQUNUTCByZWdpc3RlciB0byBkaXNhYmxlIFRYIGFuZCBSWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBVU1BJX0RJU0FCTEVfVFhfUlhfUERNQSh1c3BpKSAoICh1c3BpKS0+UERNQUNUTCAmPSB+KFVTUElfUERNQUNUTF9UWFBETUFFTl9Nc2sgfCBVU1BJX1BETUFDVExfUlhQRE1BRU5fTXNrKSApCisKK3VpbnQzMl90IFVTUElfT3BlbihVU1BJX1QgKnVzcGksIHVpbnQzMl90IHUzMk1hc3RlclNsYXZlLCB1aW50MzJfdCB1MzJTUElNb2RlLCAgdWludDMyX3QgdTMyRGF0YVdpZHRoLCB1aW50MzJfdCB1MzJCdXNDbG9jayk7Cit2b2lkIFVTUElfQ2xvc2UoVVNQSV9UICp1c3BpKTsKK3ZvaWQgVVNQSV9DbGVhclJ4QnVmKFVTUElfVCAqdXNwaSk7Cit2b2lkIFVTUElfQ2xlYXJUeEJ1ZihVU1BJX1QgKnVzcGkpOwordm9pZCBVU1BJX0Rpc2FibGVBdXRvU1MoVVNQSV9UICp1c3BpKTsKK3ZvaWQgVVNQSV9FbmFibGVBdXRvU1MoVVNQSV9UICp1c3BpLCB1aW50MzJfdCB1MzJTU1Bpbk1hc2ssIHVpbnQzMl90IHUzMkFjdGl2ZUxldmVsKTsKK3VpbnQzMl90IFVTUElfU2V0QnVzQ2xvY2soVVNQSV9UICp1c3BpLCB1aW50MzJfdCB1MzJCdXNDbG9jayk7Cit1aW50MzJfdCBVU1BJX0dldEJ1c0Nsb2NrKFVTUElfVCAqdXNwaSk7Cit2b2lkIFVTUElfRW5hYmxlSW50KFVTUElfVCAqdXNwaSwgdWludDMyX3QgdTMyTWFzayk7Cit2b2lkIFVTUElfRGlzYWJsZUludChVU1BJX1QgKnVzcGksIHVpbnQzMl90IHUzMk1hc2spOwordWludDMyX3QgVVNQSV9HZXRJbnRGbGFnKFVTUElfVCAqdXNwaSwgdWludDMyX3QgdTMyTWFzayk7Cit2b2lkIFVTUElfQ2xlYXJJbnRGbGFnKFVTUElfVCAqdXNwaSwgdWludDMyX3QgdTMyTWFzayk7Cit1aW50MzJfdCBVU1BJX0dldFN0YXR1cyhVU1BJX1QgKnVzcGksIHVpbnQzMl90IHUzMk1hc2spOwordm9pZCBVU1BJX0VuYWJsZVdha2V1cChVU1BJX1QgKnVzcGkpOwordm9pZCBVU1BJX0Rpc2FibGVXYWtldXAoVVNQSV9UICp1c3BpKTsKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfU1BJX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfU1BJX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19VU0NJX1NQSV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdXNjaV91YXJ0LmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy91c2NpX3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmE2ZjdhCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdXNjaV91YXJ0LmgKQEAgLTAsMCArMSw0NDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB1c2NpX3VhcnQuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIFVTQ0kgVUFSVCAoVVVBUlQpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVVNDSV9VQVJUX0hfXworI2RlZmluZSBfX1VTQ0lfVUFSVF9IX18KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgVVNDSV9VQVJUX0RyaXZlciBVU0NJX1VBUlQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgVVNDSV9VQVJUX0VYUE9SVEVEX0NPTlNUQU5UUyBVU0NJX1VBUlQgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVVUFSVF9MSU5FQ1RMIGNvbnN0YW50cyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVVQVJUX1dPUkRfTEVOXzYgICAgICg2VUwgPDwgVVVBUlRfTElORUNUTF9EV0lEVEhfUG9zKSAvKiE8IFVVQVJUX0xJTkVDVEwgc2V0dGluZyB0byBzZXQgVUFSVCB3b3JkIGxlbmd0aCB0byA2IGJpdHMgKi8KKyNkZWZpbmUgVVVBUlRfV09SRF9MRU5fNyAgICAgKDdVTCA8PCBVVUFSVF9MSU5FQ1RMX0RXSURUSF9Qb3MpIC8qITwgVVVBUlRfTElORUNUTCBzZXR0aW5nIHRvIHNldCBVQVJUIHdvcmQgbGVuZ3RoIHRvIDcgYml0cyAqLworI2RlZmluZSBVVUFSVF9XT1JEX0xFTl84ICAgICAoOFVMIDw8IFVVQVJUX0xJTkVDVExfRFdJRFRIX1BvcykgLyohPCBVVUFSVF9MSU5FQ1RMIHNldHRpbmcgdG8gc2V0IFVBUlQgd29yZCBsZW5ndGggdG8gOCBiaXRzICovCisjZGVmaW5lIFVVQVJUX1dPUkRfTEVOXzkgICAgICg5VUwgPDwgVVVBUlRfTElORUNUTF9EV0lEVEhfUG9zKSAvKiE8IFVVQVJUX0xJTkVDVEwgc2V0dGluZyB0byBzZXQgVUFSVCB3b3JkIGxlbmd0aCB0byA5IGJpdHMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVVVBUlRfUFJPVENUTCBjb25zdGFudHMgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVVUFSVF9QQVJJVFlfTk9ORSAgICAoMHgwVUwgPDwgVVVBUlRfUFJPVENUTF9QQVJJVFlFTl9Qb3MpICAgIC8qITwgVVVBUlRfUFJPVENUTCBzZXR0aW5nIHRvIHNldCBVQVJUIGFzIG5vIHBhcml0eSAqLworI2RlZmluZSBVVUFSVF9QQVJJVFlfT0REICAgICAoMHgxVUwgPDwgVVVBUlRfUFJPVENUTF9QQVJJVFlFTl9Qb3MpICAgIC8qITwgVVVBUlRfUFJPVENUTCBzZXR0aW5nIHRvIHNldCBVQVJUIGFzIG9kZCBwYXJpdHkgKi8KKyNkZWZpbmUgVVVBUlRfUEFSSVRZX0VWRU4gICAgKDB4M1VMIDw8IFVVQVJUX1BST1RDVExfUEFSSVRZRU5fUG9zKSAgICAvKiE8IFVVQVJUX1BST1RDVEwgc2V0dGluZyB0byBzZXQgVUFSVCBhcyBldmVuIHBhcml0eSAqLworCisjZGVmaW5lIFVVQVJUX1NUT1BfQklUXzEgICAgICgweDBVTCkgLyohPCBVVUFSVF9QUk9UQ1RMIHNldHRpbmcgZm9yIG9uZSBzdG9wIGJpdCAqLworI2RlZmluZSBVVUFSVF9TVE9QX0JJVF8yICAgICAoMHgxVUwpIC8qITwgVVVBUlRfUFJPVENUTCBzZXR0aW5nIGZvciB0d28gc3RvcCBiaXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVVNDSSBVQVJUIGludGVycnVwdCBtYXNrIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVVQVJUX0FCUl9JTlRfTUFTSyAgICAgICgweDAwMlVMKSAvKiE8IEF1dG8tYmF1ZCByYXRlIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVVQVJUX1JMU19JTlRfTUFTSyAgICAgICgweDAwNFVMKSAvKiE8IFJlY2VpdmUgbGluZSBzdGF0dXMgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVVBUlRfQlVGX1JYT1ZfSU5UX01BU0sgKDB4MDA4VUwpIC8qITwgQnVmZmVyIFJYIG92ZXJydW4gaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVVBUlRfVFhTVF9JTlRfTUFTSyAgICAgKDB4MDEwVUwpIC8qITwgVFggc3RhcnQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVVBUlRfVFhFTkRfSU5UX01BU0sgICAgKDB4MDIwVUwpIC8qITwgVHggZW5kIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVVQVJUX1JYU1RfSU5UX01BU0sgICAgICgweDA0MFVMKSAvKiE8IFJYIHN0YXJ0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVVQVJUX1JYRU5EX0lOVF9NQVNLICAgICgweDA4MFVMKSAvKiE8IFJYIGVuZCBpbnRlcnJ1cHQgbWFzayAqLworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNDSV9VQVJUX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBVU0NJX1VBUlRfRVhQT1JURURfRlVOQ1RJT05TIFVTQ0lfVUFSVCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFdyaXRlIFVTQ0lfVUFSVCBkYXRhCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICogICAgQHBhcmFtW2luXSAgICB1OERhdGEgIERhdGEgYnl0ZSB0byB0cmFuc21pdC4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gd3JpdGUgRGF0YSB0byBUeCBkYXRhIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFVVQVJUX1dSSVRFKHV1YXJ0LCB1OERhdGEpICAgICgodXVhcnQpLT5UWERBVCA9ICh1OERhdGEpKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBSZWFkIFVTQ0lfVUFSVCBkYXRhCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIFRoZSBvbGRlc3QgZGF0YSBieXRlIGluIFJYIGJ1ZmZlci4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gcmVhZCBSeCBkYXRhIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFVVQVJUX1JFQUQodXVhcnQpICAgICgodXVhcnQpLT5SWERBVCkKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgR2V0IFR4IGVtcHR5CisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgICBUeCBidWZmZXIgaXMgbm90IGVtcHR5CisgKiAgICBAcmV0dmFsICAgICAgID49MSBUeCBidWZmZXIgaXMgZW1wdHkKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZ2V0IFRyYW5zbWl0dGVyIGJ1ZmZlciBlbXB0eSByZWdpc3RlciB2YWx1ZS4KKyAqLworI2RlZmluZSBVVUFSVF9HRVRfVFhfRU1QVFkodXVhcnQpICAgICgodXVhcnQpLT5CVUZTVFMgJiBVVUFSVF9CVUZTVFNfVFhFTVBUWV9Nc2spCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEdldCBSeCBlbXB0eQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKgorICogICAgQHJldHZhbCAgICAgICAwICAgUnggYnVmZmVyIGlzIG5vdCBlbXB0eQorICogICAgQHJldHZhbCAgICAgICA+PTEgUnggYnVmZmVyIGlzIGVtcHR5CisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGdldCBSZWNlaXZlciBidWZmZXIgZW1wdHkgcmVnaXN0ZXIgdmFsdWUuCisgKi8KKyNkZWZpbmUgVVVBUlRfR0VUX1JYX0VNUFRZKHV1YXJ0KSAgICAoKHV1YXJ0KS0+QlVGU1RTICYgVVVBUlRfQlVGU1RTX1JYRU1QVFlfTXNrKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDaGVjayBzcGVjaWZpZWQgdXNjaV91YXJ0IHBvcnQgdHJhbnNtaXNzaW9uIGlzIG92ZXIuCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgVHggdHJhbnNtaXNzaW9uIGlzIG5vdCBvdmVyCisgKiAgICBAcmV0dmFsICAgICAgIDEgVHggdHJhbnNtaXNzaW9uIGlzIG92ZXIKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gcmV0dXJuIFRyYW5zbWl0dGVyIEVtcHR5IEZsYWcgcmVnaXN0ZXIgYml0IHZhbHVlLiBcbgorICogICAgICAgICAgICAgICAgICBJdCBpbmRpY2F0ZXMgaWYgc3BlY2lmaWVkIHVzY2lfdWFydCBwb3J0IHRyYW5zbWlzc2lvbiBpcyBvdmVyIG5vciBub3QuCisgKi8KKyNkZWZpbmUgVVVBUlRfSVNfVFhfRU1QVFkodXVhcnQpICAgICgoKHV1YXJ0KS0+QlVGU1RTICYgVVVBUlRfQlVGU1RTX1RYRU1QVFlfTXNrKSA+PiBVVUFSVF9CVUZTVFNfVFhFTVBUWV9Qb3MpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIENoZWNrIHNwZWNpZmllZCB1c2NpX3VhcnQgcG9ydCByZWNlaXZlciBpcyBlbXB0eS4KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCBSeCByZWNlaXZlciBpcyBub3QgZW1wdHkKKyAqICAgIEByZXR2YWwgICAgICAgMSBSeCByZWNlaXZlciBpcyBlbXB0eQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyByZXR1cm4gUmVjZWl2ZSBFbXB0eSBGbGFnIHJlZ2lzdGVyIGJpdCB2YWx1ZS4gXG4KKyAqICAgICAgICAgICAgICAgICAgSXQgaW5kaWNhdGVzIGlmIHNwZWNpZmllZCB1c2NpX3VhcnQgcG9ydCByZWNlaXZlciBpcyBlbXB0eSBub3Igbm90LgorICovCisjZGVmaW5lIFVVQVJUX0lTX1JYX0VNUFRZKHV1YXJ0KSAgICAoKCh1dWFydCktPkJVRlNUUyAmIFVVQVJUX0JVRlNUU19SWEVNUFRZX01zaykgPj4gVVVBUlRfQlVGU1RTX1JYRU1QVFlfUG9zKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBXYWl0IHNwZWNpZmllZCB1c2NpX3VhcnQgcG9ydCB0cmFuc21pc3Npb24gaXMgb3ZlcgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIHdhaXQgc3BlY2lmaWVkIHVzY2lfdWFydCBwb3J0IHRyYW5zbWlzc2lvbiBpcyBvdmVyLgorICovCisjZGVmaW5lIFVVQVJUX1dBSVRfVFhfRU1QVFkodXVhcnQpICAgIHdoaWxlKCEoKCgodXVhcnQpLT5CVUZTVFMpICYgVVVBUlRfQlVGU1RTX1RYRU1QVFlfTXNrKSA+PiBVVUFSVF9CVUZTVFNfVFhFTVBUWV9Qb3MpKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDaGVjayBUWCBidWZmZXIgaXMgZnVsbCBvciBub3QKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMSBUWCBidWZmZXIgaXMgZnVsbAorICogICAgQHJldHZhbCAgICAgICAwIFRYIGJ1ZmZlciBpcyBub3QgZnVsbAorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBjaGVjayBUWCBidWZmZXIgaXMgZnVsbCBvciBub3QuCisgKi8KKyNkZWZpbmUgVVVBUlRfSVNfVFhfRlVMTCh1dWFydCkgICAgKCgodXVhcnQpLT5CVUZTVFMgJiBVVUFSVF9CVUZTVFNfVFhGVUxMX01zayk+PlVVQVJUX0JVRlNUU19UWEZVTExfUG9zKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDaGVjayBSWCBidWZmZXIgaXMgZnVsbCBvciBub3QKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMSBSWCBidWZmZXIgaXMgZnVsbAorICogICAgQHJldHZhbCAgICAgICAwIFJYIGJ1ZmZlciBpcyBub3QgZnVsbAorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBjaGVjayBSWCBidWZmZXIgaXMgZnVsbCBvciBub3QuCisgKi8KKyNkZWZpbmUgVVVBUlRfSVNfUlhfRlVMTCh1dWFydCkgICAgKCgodXVhcnQpLT5CVUZTVFMgJiBVVUFSVF9CVUZTVFNfUlhGVUxMX01zayk+PlVVQVJUX0JVRlNUU19SWEZVTExfUG9zKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBHZXQgVHggZnVsbCByZWdpc3RlciB2YWx1ZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKgorICogICAgQHJldHZhbCAgICAgICAwICAgVHggYnVmZmVyIGlzIG5vdCBmdWxsLgorICogICAgQHJldHZhbCAgICAgICA+PTEgVHggYnVmZmVyIGlzIGZ1bGwuCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGdldCBUeCBmdWxsIHJlZ2lzdGVyIHZhbHVlLgorICovCisjZGVmaW5lIFVVQVJUX0dFVF9UWF9GVUxMKHV1YXJ0KSAgICAoKHV1YXJ0KS0+QlVGU1RTICYgVVVBUlRfQlVGU1RTX1RYRlVMTF9Nc2spCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEdldCBSeCBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgICBSeCBidWZmZXIgaXMgbm90IGZ1bGwuCisgKiAgICBAcmV0dmFsICAgICAgID49MSBSeCBidWZmZXIgaXMgZnVsbC4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZ2V0IFJ4IGZ1bGwgcmVnaXN0ZXIgdmFsdWUuCisgKi8KKyNkZWZpbmUgVVVBUlRfR0VUX1JYX0ZVTEwodXVhcnQpICAgICgodXVhcnQpLT5CVUZTVFMgJiBVVUFSVF9CVUZTVFNfUlhGVUxMX01zaykKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRW5hYmxlIHNwZWNpZmllZCBVU0NJX1VBUlQgcHJvdG9jb2wgaW50ZXJydXB0CisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICogICAgQHBhcmFtW2luXSAgICB1MzJJbnRTZWwgIEludGVycnVwdCB0eXBlIHNlbGVjdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QUk9USUVOX1JMU0lFTl9Nc2sgICA6IFJ4IExpbmUgc3RhdHVzIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QUk9USUVOX0FCUklFTl9Nc2sgICA6IEF1dG8tYmF1ZCByYXRlIGludGVycnVwdAorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBlbmFibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBwcm90b2NvbCBpbnRlcnJ1cHQuCisgKi8KKyNkZWZpbmUgVVVBUlRfRU5BQkxFX1BST1RfSU5UKHV1YXJ0LCB1MzJJbnRTZWwpICAgICgodXVhcnQpLT5QUk9USUVOIHw9ICh1MzJJbnRTZWwpKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBEaXNhYmxlIHNwZWNpZmllZCBVU0NJX1VBUlQgcHJvdG9jb2wgaW50ZXJydXB0CisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICogICAgQHBhcmFtW2luXSAgICB1MzJJbnRTZWwgIEludGVycnVwdCB0eXBlIHNlbGVjdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QUk9USUVOX1JMU0lFTl9Nc2sgICA6IFJ4IExpbmUgc3RhdHVzIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QUk9USUVOX0FCUklFTl9Nc2sgICA6IEF1dG8tYmF1ZCByYXRlIGludGVycnVwdAorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBkaXNhYmxlIHNwZWNpZmllZCBVU0NJX1VBUlQgcHJvdG9jb2wgaW50ZXJydXB0LgorICovCisjZGVmaW5lIFVVQVJUX0RJU0FCTEVfUFJPVF9JTlQodXVhcnQsIHUzMkludFNlbCkgICAgKCh1dWFydCktPlBST1RJRU4gJj0gfih1MzJJbnRTZWwpKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBFbmFibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBidWZmZXIgaW50ZXJydXB0CisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICogICAgQHBhcmFtW2luXSAgICB1MzJJbnRTZWwgIEludGVycnVwdCB0eXBlIHNlbGVjdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9CVUZDVExfUlhPVklFTl9Nc2sgICAgIDogUmVjZWl2ZSBidWZmZXIgb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZW5hYmxlIHNwZWNpZmllZCBVU0NJX1VBUlQgYnVmZmVyIGludGVycnVwdC4KKyAqLworI2RlZmluZSBVVUFSVF9FTkFCTEVfQlVGX0lOVCh1dWFydCwgdTMySW50U2VsKSAgICAoKHV1YXJ0KS0+QlVGQ1RMIHw9ICh1MzJJbnRTZWwpKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBEaXNhYmxlIHNwZWNpZmllZCBVU0NJX1VBUlQgYnVmZmVyIGludGVycnVwdAorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMySW50U2VsICBJbnRlcnJ1cHQgdHlwZSBzZWxlY3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfQlVGQ1RMX1JYT1ZJRU5fTXNrICAgICA6IFJlY2VpdmUgYnVmZmVyIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0CisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGRpc2FibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBidWZmZXIgaW50ZXJydXB0LgorICovCisjZGVmaW5lIFVVQVJUX0RJU0FCTEVfQlVGX0lOVCh1dWFydCwgdTMySW50U2VsKSAgICAoKHV1YXJ0KS0+QlVGQ1RMICY9IH4gKHUzMkludFNlbCkpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEVuYWJsZSBzcGVjaWZpZWQgVVNDSV9VQVJUIHRyYW5zZmVyIGludGVycnVwdAorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMySW50U2VsICBJbnRlcnJ1cHQgdHlwZSBzZWxlY3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfSU5URU5fUlhFTkRJRU5fTXNrICA6IFJlY2VpdmUgZW5kIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9JTlRFTl9SWFNUSUVOX01zayAgIDogUmVjZWl2ZSBzdGFydCBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfSU5URU5fVFhFTkRJRU5fTXNrICA6IFRyYW5zbWl0IGVuZCBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfSU5URU5fVFhTVElFTl9Nc2sgICA6IFRyYW5zbWl0IHN0YXJ0IGludGVycnVwdAorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBlbmFibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCB0cmFuc2ZlciBpbnRlcnJ1cHQuCisgKi8KKyNkZWZpbmUgVVVBUlRfRU5BQkxFX1RSQU5TX0lOVCh1dWFydCwgdTMySW50U2VsKSAgICAoKHV1YXJ0KS0+SU5URU4gfD0gKHUzMkludFNlbCkpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIERpc2FibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCB0cmFuc2ZlciBpbnRlcnJ1cHQKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkludFNlbCAgSW50ZXJydXB0IHR5cGUgc2VsZWN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX0lOVEVOX1JYRU5ESUVOX01zayAgOiBSZWNlaXZlIGVuZCBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfSU5URU5fUlhTVElFTl9Nc2sgICA6IFJlY2VpdmUgc3RhcnQgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX0lOVEVOX1RYRU5ESUVOX01zayAgOiBUcmFuc21pdCBlbmQgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX0lOVEVOX1RYU1RJRU5fTXNrICAgOiBUcmFuc21pdCBzdGFydCBpbnRlcnJ1cHQKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZGlzYWJsZSBzcGVjaWZpZWQgVVNDSV9VQVJUIHRyYW5zZmVyIGludGVycnVwdC4KKyAqLworI2RlZmluZSBVVUFSVF9ESVNBQkxFX1RSQU5TX0lOVCh1dWFydCwgdTMySW50U2VsKSAgICAoKHV1YXJ0KS0+SU5URU4gJj0gfih1MzJJbnRTZWwpKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBHZXQgcHJvdG9jb2wgaW50ZXJydXB0IGZsYWcvc3RhdHVzCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKgorICogICAgQHJldHVybiAgICAgICBUaGUgaW50ZXJydXB0IGZsYWcvc3RhdHVzIG9mIHByb3RvY29sIHN0YXR1cyByZWdpc3Rlci4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZ2V0IHByb3RvY29sIHN0YXR1cyByZWdpc3RlciB2YWx1ZS4KKyAqLworI2RlZmluZSBVVUFSVF9HRVRfUFJPVF9TVEFUVVModXVhcnQpICAgICgodXVhcnQpLT5QUk9UU1RTKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDbGVhciBzcGVjaWZpZWQgcHJvdG9jb2wgaW50ZXJydXB0IGZsYWcKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMySW50VHlwZUZsYWcgIEludGVycnVwdCBUeXBlIEZsYWcsIHNob3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BST1RTVFNfQUJFUlJTVFNfTXNrICAgIDogQXV0by1iYXVkIFJhdGUgRXJyb3IgSW50ZXJydXB0IEluZGljYXRvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BST1RTVFNfQUJSREVUSUZfTXNrICAgIDogQXV0by1iYXVkIFJhdGUgRGV0ZWN0ZWQgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QUk9UU1RTX0JSRUFLX01zayAgICAgICA6IEJyZWFrIEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QUk9UU1RTX0ZSTUVSUl9Nc2sgICAgICA6IEZyYW1pbmcgRXJyb3IgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BST1RTVFNfUEFSSVRZRVJSX01zayAgIDogUGFyaXR5IEVycm9yIEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QUk9UU1RTX1JYRU5ESUZfTXNrICAgICA6IFJlY2VpdmUgRW5kIEludGVycnVwdCBGbGFnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUFJPVFNUU19SWFNUSUZfTXNrICAgICAgOiBSZWNlaXZlIFN0YXJ0IEludGVycnVwdCBGbGFnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUFJPVFNUU19UWEVORElGX01zayAgICAgOiBUcmFuc21pdCBFbmQgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QUk9UU1RTX1RYU1RJRl9Nc2sgICAgICA6IFRyYW5zbWl0IFN0YXJ0IEludGVycnVwdCBGbGFnCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGNsZWFyIHNwZWNpZmllZCBwcm90b2NvbCBpbnRlcnJ1cHQgZmxhZy4KKyAqLworI2RlZmluZSBVVUFSVF9DTFJfUFJPVF9JTlRfRkxBRyh1dWFydCx1MzJJbnRUeXBlRmxhZykgICAgKCh1dWFydCktPlBST1RTVFMgPSAodTMySW50VHlwZUZsYWcpKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBHZXQgdHJhbnNtaXQvcmVjZWl2ZSBidWZmZXIgaW50ZXJydXB0IGZsYWcvc3RhdHVzCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKgorICogICAgQHJldHVybiAgICAgICBUaGUgaW50ZXJydXB0IGZsYWcvc3RhdHVzIG9mIGJ1ZmZlciBzdGF0dXMgcmVnaXN0ZXIuCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGdldCBidWZmZXIgc3RhdHVzIHJlZ2lzdGVyIHZhbHVlLgorICovCisjZGVmaW5lIFVVQVJUX0dFVF9CVUZfU1RBVFVTKHV1YXJ0KSAgICAoKHV1YXJ0KS0+QlVGU1RTKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDbGVhciBzcGVjaWZpZWQgYnVmZmVyIGludGVycnVwdCBmbGFnCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkludFR5cGVGbGFnICBJbnRlcnJ1cHQgVHlwZSBGbGFnLCBzaG91bGQgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9CVUZTVFNfUlhPVklGX01zayA6IFJlY2VpdmUgQnVmZmVyIE92ZXItcnVuIEVycm9yICBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGNsZWFyIHNwZWNpZmllZCBidWZmZXIgaW50ZXJydXB0IGZsYWcuCisgKi8KKyNkZWZpbmUgVVVBUlRfQ0xSX0JVRl9JTlRfRkxBRyh1dWFydCx1MzJJbnRUeXBlRmxhZykgICAgKCh1dWFydCktPkJVRlNUUyA9ICh1MzJJbnRUeXBlRmxhZykpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEdldCB3YWtldXAgZmxhZworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKgorICogICAgQHJldHZhbCAgICAgICAwICAgICAgIENoaXAgZGlkIG5vdCB3YWtlIHVwIGZyb20gcG93ZXItZG93biBtb2RlLgorICogICAgQHJldHZhbCAgICAgICAxICAgICAgIENoaXAgd2FrZWQgdXAgZnJvbSBwb3dlci1kb3duIG1vZGUuCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGdldCB3YWtldXAgZmxhZy4KKyAqLworI2RlZmluZSBVVUFSVF9HRVRfV0FLRVVQX0ZMQUcodXVhcnQpICAgICgodXVhcnQpLT5XS1NUUyAmIFVVQVJUX1dLU1RTX1dLRl9Nc2sgPyAxOiAwICkKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgQ2xlYXIgd2FrZXVwIGZsYWcKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gY2xlYXIgd2FrZXVwIGZsYWcuCisgKi8KKyNkZWZpbmUgVVVBUlRfQ0xSX1dBS0VVUF9GTEFHKHV1YXJ0KSAgICAoKHV1YXJ0KS0+V0tTVFMgPSBVVUFSVF9XS1NUU19XS0ZfTXNrKQorCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEVuYWJsZSBzcGVjaWZpZWQgVVNDSV9VQVJUIFBETUEgZnVuY3Rpb24KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkZ1bmNTZWwgQ29tYmluYXRpb24gb2YgZm9sbG93aW5nIGZ1bmN0aW9ucworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QRE1BQ1RMX1RYUERNQUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QRE1BQ1RMX1JYUERNQUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QRE1BQ1RMX1BETUFFTl9Nc2sKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZW5hYmxlIHNwZWNpZmllZCBVU0NJX1VBUlQgUERNQSBmdW5jdGlvbi4KKyAqLworI2RlZmluZSBVVUFSVF9QRE1BX0VOQUJMRSh1dWFydCwgdTMyRnVuY1NlbCkgICAoKHV1YXJ0KS0+UERNQUNUTCB8PSAodTMyRnVuY1NlbCkpCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBEaXNhYmxlIHNwZWNpZmllZCBVU0NJX1VBUlQgUERNQSBmdW5jdGlvbgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyRnVuY1NlbCBDb21iaW5hdGlvbiBvZiBmb2xsb3dpbmcgZnVuY3Rpb25zCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BETUFDVExfVFhQRE1BRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BETUFDVExfUlhQRE1BRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BETUFDVExfUERNQUVOX01zaworICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBkaXNhYmxlIHNwZWNpZmllZCBVU0NJX1VBUlQgUERNQSBmdW5jdGlvbi4KKyAqLworI2RlZmluZSBVVUFSVF9QRE1BX0RJU0FCTEUodXVhcnQsIHUzMkZ1bmNTZWwpICAgKCh1dWFydCktPlBETUFDVEwgJj0gfih1MzJGdW5jU2VsKSkKKworCit2b2lkIFVVQVJUX0NsZWFySW50RmxhZyhVVUFSVF9UKiB1dWFydCwgdWludDMyX3QgdTMyTWFzayk7Cit1aW50MzJfdCBVVUFSVF9HZXRJbnRGbGFnKFVVQVJUX1QqIHV1YXJ0LCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgVVVBUlRfQ2xvc2UoVVVBUlRfVCogdXVhcnQpOwordm9pZCBVVUFSVF9EaXNhYmxlSW50KFVVQVJUX1QqICB1dWFydCwgdWludDMyX3QgdTMyTWFzayk7Cit2b2lkIFVVQVJUX0VuYWJsZUludChVVUFSVF9UKiAgdXVhcnQsIHVpbnQzMl90IHUzMk1hc2spOwordWludDMyX3QgVVVBUlRfT3BlbihVVUFSVF9UKiB1dWFydCwgdWludDMyX3QgdTMyYmF1ZHJhdGUpOwordWludDMyX3QgVVVBUlRfUmVhZChVVUFSVF9UKiB1dWFydCwgdWludDhfdCBwdThSeEJ1ZltdLCB1aW50MzJfdCB1MzJSZWFkQnl0ZXMpOwordWludDMyX3QgVVVBUlRfU2V0TGluZV9Db25maWcoVVVBUlRfVCogdXVhcnQsIHVpbnQzMl90IHUzMmJhdWRyYXRlLCB1aW50MzJfdCB1MzJkYXRhX3dpZHRoLCB1aW50MzJfdCB1MzJwYXJpdHksIHVpbnQzMl90IHUzMnN0b3BfYml0cyk7Cit1aW50MzJfdCBVVUFSVF9Xcml0ZShVVUFSVF9UKiB1dWFydCwgdWludDhfdCBwdThUeEJ1ZltdLCB1aW50MzJfdCB1MzJXcml0ZUJ5dGVzKTsKK3ZvaWQgVVVBUlRfRW5hYmxlV2FrZXVwKFVVQVJUX1QqIHV1YXJ0LCB1aW50MzJfdCB1MzJXYWtldXBNb2RlKTsKK3ZvaWQgVVVBUlRfRGlzYWJsZVdha2V1cChVVUFSVF9UKiB1dWFydCk7Cit2b2lkIFVVQVJUX0VuYWJsZUZsb3dDdHJsKFVVQVJUX1QqIHV1YXJ0KTsKK3ZvaWQgVVVBUlRfRGlzYWJsZUZsb3dDdHJsKFVVQVJUX1QqIHV1YXJ0KTsKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfVUFSVF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVU0NJX1VBUlRfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1VTQ0lfVUFSVF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvd2R0LmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy93ZHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTQ1ZWEzCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvd2R0LmgKQEAgLTAsMCArMSwyMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB3ZHQuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgV2F0Y2hkb2cgVGltZXIoV0RUKSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1dEVF9IX18KKyNkZWZpbmUgX19XRFRfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBXRFRfRHJpdmVyIFdEVCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBXRFRfRVhQT1JURURfQ09OU1RBTlRTIFdEVCBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgV0RUIFRpbWUtb3V0IEludGVydmFsIFBlcmlvZCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdEVF9USU1FT1VUXzJQT1c0ICAgICAgICAgICAoMFVMIDw8IFdEVF9DVExfVE9VVFNFTF9Qb3MpIC8qITwgU2V0dGluZyBXRFQgdGltZS1vdXQgaW50ZXJ2YWwgdG8gMl40ICogV0RUIGNsb2NrcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdEVF9USU1FT1VUXzJQT1c2ICAgICAgICAgICAoMVVMIDw8IFdEVF9DVExfVE9VVFNFTF9Qb3MpIC8qITwgU2V0dGluZyBXRFQgdGltZS1vdXQgaW50ZXJ2YWwgdG8gMl42ICogV0RUIGNsb2NrcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdEVF9USU1FT1VUXzJQT1c4ICAgICAgICAgICAoMlVMIDw8IFdEVF9DVExfVE9VVFNFTF9Qb3MpIC8qITwgU2V0dGluZyBXRFQgdGltZS1vdXQgaW50ZXJ2YWwgdG8gMl44ICogV0RUIGNsb2NrcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdEVF9USU1FT1VUXzJQT1cxMCAgICAgICAgICAoM1VMIDw8IFdEVF9DVExfVE9VVFNFTF9Qb3MpIC8qITwgU2V0dGluZyBXRFQgdGltZS1vdXQgaW50ZXJ2YWwgdG8gMl4xMCAqIFdEVCBjbG9ja3MgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXRFRfVElNRU9VVF8yUE9XMTIgICAgICAgICAgKDRVTCA8PCBXRFRfQ1RMX1RPVVRTRUxfUG9zKSAvKiE8IFNldHRpbmcgV0RUIHRpbWUtb3V0IGludGVydmFsIHRvIDJeMTIgKiBXRFQgY2xvY2tzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV0RUX1RJTUVPVVRfMlBPVzE0ICAgICAgICAgICg1VUwgPDwgV0RUX0NUTF9UT1VUU0VMX1BvcykgLyohPCBTZXR0aW5nIFdEVCB0aW1lLW91dCBpbnRlcnZhbCB0byAyXjE0ICogV0RUIGNsb2NrcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdEVF9USU1FT1VUXzJQT1cxNiAgICAgICAgICAoNlVMIDw8IFdEVF9DVExfVE9VVFNFTF9Qb3MpIC8qITwgU2V0dGluZyBXRFQgdGltZS1vdXQgaW50ZXJ2YWwgdG8gMl4xNiAqIFdEVCBjbG9ja3MgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXRFRfVElNRU9VVF8yUE9XMTggICAgICAgICAgKDdVTCA8PCBXRFRfQ1RMX1RPVVRTRUxfUG9zKSAvKiE8IFNldHRpbmcgV0RUIHRpbWUtb3V0IGludGVydmFsIHRvIDJeMTggKiBXRFQgY2xvY2tzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFdEVCAgUmVzZXQgRGVsYXkgUGVyaW9kIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBXRFRfUkVTRVRfREVMQVlfMTAyNkNMSyAgICAgKDBVTCA8PCBXRFRfQUxUQ1RMX1JTVERTRUxfUG9zKSAvKiE8IFNldHRpbmcgV0RUIHJlc2V0IGRlbGF5IHBlcmlvZCB0byAxMDI2ICogV0RUIGNsb2NrcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdEVF9SRVNFVF9ERUxBWV8xMzBDTEsgICAgICAoMVVMIDw8IFdEVF9BTFRDVExfUlNURFNFTF9Qb3MpIC8qITwgU2V0dGluZyBXRFQgcmVzZXQgZGVsYXkgcGVyaW9kIHRvIDEzMCAqIFdEVCBjbG9ja3MgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXRFRfUkVTRVRfREVMQVlfMThDTEsgICAgICAgKDJVTCA8PCBXRFRfQUxUQ1RMX1JTVERTRUxfUG9zKSAvKiE8IFNldHRpbmcgV0RUIHJlc2V0IGRlbGF5IHBlcmlvZCB0byAxOCAqIFdEVCBjbG9ja3MgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXRFRfUkVTRVRfREVMQVlfM0NMSyAgICAgICAgKDNVTCA8PCBXRFRfQUxUQ1RMX1JTVERTRUxfUG9zKSAvKiE8IFNldHRpbmcgV0RUIHJlc2V0IGRlbGF5IHBlcmlvZCB0byAzICogV0RUIGNsb2NrcyBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBXRFQgRnJlZSBSZXNldCBDb3VudGVyIEtleXdvcmQgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0RUX1JFU0VUX0NPVU5URVJfS0VZV09SRCAgICgweDAwMDA1QUE1VUwpICAgIC8qITwgRmlsbCB0aGlzIHZhbHVlIHRvIFdEVF9SU1RDTlQgcmVnaXN0ZXIgdG8gZnJlZSByZXNldCBXRFQgY291bnRlciBcaGlkZWluaXRpYWxpemVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgV0RUX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBXRFRfRVhQT1JURURfRlVOQ1RJT05TIFdEVCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIFdEVCBSZXNldCBTeXN0ZW0gRmxhZworICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBjbGVhcnMgV0RUIHRpbWUtb3V0IHJlc2V0IHN5c3RlbSBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgV0RUX0NMRUFSX1JFU0VUX0ZMQUcoKSAgICAgICAgICAoV0RULT5DVEwgPSAoV0RULT5DVEwgJiB+KFdEVF9DVExfSUZfTXNrIHwgV0RUX0NUTF9XS0ZfTXNrKSkgfCBXRFRfQ1RMX1JTVEZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBXRFQgVGltZS1vdXQgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gY2xlYXJzIFdEVCB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFdEVF9DTEVBUl9USU1FT1VUX0lOVF9GTEFHKCkgICAgKFdEVC0+Q1RMID0gKFdEVC0+Q1RMICYgfihXRFRfQ1RMX1JTVEZfTXNrIHwgV0RUX0NUTF9XS0ZfTXNrKSkgfCBXRFRfQ1RMX0lGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgV0RUIFdha2UtdXAgRmxhZworICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBjbGVhcnMgV0RUIHRpbWUtb3V0IHdha2UtdXAgc3lzdGVtIGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBXRFRfQ0xFQVJfVElNRU9VVF9XQUtFVVBfRkxBRygpIChXRFQtPkNUTCA9IChXRFQtPkNUTCAmIH4oV0RUX0NUTF9SU1RGX01zayB8IFdEVF9DVExfSUZfTXNrKSkgfCBXRFRfQ1RMX1dLRl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBXRFQgVGltZS1vdXQgUmVzZXQgRmxhZworICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHZhbCAgICAgMCAgIFdEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gZGlkIG5vdCBvY2N1cgorICAqIEByZXR2YWwgICAgIDEgICBXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIG9jY3VycmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGluZGljYXRlcyBzeXN0ZW0gaGFzIGJlZW4gcmVzZXQgYnkgV0RUIHRpbWUtb3V0IHJlc2V0IG9yIG5vdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFdEVF9HRVRfUkVTRVRfRkxBRygpICAgICAgICAgICAgKChXRFQtPkNUTCAmIFdEVF9DVExfUlNURl9Nc2spPyAxVUwgOiAwVUwpCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBXRFQgVGltZS1vdXQgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKgorICAqIEByZXR2YWwgICAgIDAgICBXRFQgdGltZS1vdXQgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAgKiBAcmV0dmFsICAgICAxICAgV0RUIHRpbWUtb3V0IGludGVycnVwdCBvY2N1cnJlZAorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpbmRpY2F0ZXMgV0RUIHRpbWUtb3V0IGludGVycnVwdCBvY2N1cnJlZCBvciBub3QuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBXRFRfR0VUX1RJTUVPVVRfSU5UX0ZMQUcoKSAgICAgICgoV0RULT5DVEwgJiBXRFRfQ1RMX0lGX01zayk/IDFVTCA6IDBVTCkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFdEVCBUaW1lLW91dCBXYWtlLXVwIEZsYWcKKyAgKgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKgorICAqIEByZXR2YWwgICAgIDAgICBXRFQgdGltZS1vdXQgaW50ZXJydXB0IGRvZXMgbm90IGNhdXNlIENQVSB3YWtlLXVwCisgICogQHJldHZhbCAgICAgMSAgIFdEVCB0aW1lLW91dCBpbnRlcnJ1cHQgZXZlbnQgY2F1c2UgQ1BVIHdha2UtdXAKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaW5kaWNhdGVzIFdEVCB0aW1lLW91dCBpbnRlcnJ1cHQgZXZlbnQgaGFzIHdha2VkIHVwIHN5c3RlbSBvciBub3QuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBXRFRfR0VUX1RJTUVPVVRfV0FLRVVQX0ZMQUcoKSAgICgoV0RULT5DVEwgJiBXRFRfQ1RMX1dLRl9Nc2spPyAxVUwgOiAwVUwpCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlc2V0IFdEVCBDb3VudGVyCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVzZXQgdGhlIGludGVybmFsIDE4LWJpdCBXRFQgdXAgY291bnRlciB2YWx1ZS4KKyAgICAgICAgSWYgV0RUIGlzIGFjdGl2YXRlZCBhbmQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGZ1bmN0aW9uIGlzIGVuYWJsZWQgYWxzbywgdXNlciBzaG91bGQgXG4KKyAgKiAgICAgICAgICAgICByZXNldCB0aGUgMTgtYml0IFdEVCB1cCBjb3VudGVyIHZhbHVlIHRvIGF2b2lkIGdlbmVyYXRlIFdEVCB0aW1lLW91dCByZXNldCBzaWduYWwgdG8gXG4KKyAgKiAgICAgICAgICAgICByZXNldCBzeXN0ZW0gYmVmb3JlIHRoZSBXRFQgdGltZS1vdXQgcmVzZXQgZGVsYXkgcGVyaW9kIGV4cGlyZXMuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBXRFRfUkVTRVRfQ09VTlRFUigpICAgICAgICAgICAgIChXRFQtPlJTVENOVCA9IFdEVF9SRVNFVF9DT1VOVEVSX0tFWVdPUkQpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogc3RhdGljIGlubGluZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGVjbGFyZSB0aGVzZSBpbmxpbmUgZnVuY3Rpb25zIGhlcmUgdG8gYXZvaWQgTUlTUkEgQyAyMDA0IHJ1bGUgOC4xIGVycm9yICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBXRFRfQ2xvc2Uodm9pZCk7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBXRFRfRW5hYmxlSW50KHZvaWQpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgV0RUX0Rpc2FibGVJbnQodm9pZCk7CisKKy8qKgorICAqIEBicmllZiAgICAgIFN0b3AgV0RUIENvdW50aW5nCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RvcCBXRFQgY291bnRpbmcgYW5kIGRpc2FibGUgV0RUIG1vZHVsZS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFdEVF9DbG9zZSh2b2lkKQoreworICAgIFdEVC0+Q1RMID0gMFVMOworICAgIHdoaWxlKFdEVC0+Q1RMICYgV0RUX0NUTF9TWU5DX01zaykge30gLyogV2FpdCBkaXNhYmxlIFdEVEVOIGJpdCBjb21wbGV0ZWQsIGl0IG5lZWRzIDIgKiBXRFRfQ0xLLiAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgV0RUIFRpbWUtb3V0IEludGVycnVwdAorICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZSB0aGUgV0RUIHRpbWUtb3V0IGludGVycnVwdCBmdW5jdGlvbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFdEVF9FbmFibGVJbnQodm9pZCkKK3sKKyAgICBXRFQtPkNUTCB8PSBXRFRfQ1RMX0lOVEVOX01zazsKKyAgICB3aGlsZShXRFQtPkNUTCAmIFdEVF9DVExfU1lOQ19Nc2spIHt9IC8qIFdhaXQgZW5hYmxlIFdEVEVOIGJpdCBjb21wbGV0ZWQsIGl0IG5lZWRzIDIgKiBXRFRfQ0xLLiAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFdEVCBUaW1lLW91dCBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBkaXNhYmxlIHRoZSBXRFQgdGltZS1vdXQgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgV0RUX0Rpc2FibGVJbnQodm9pZCkKK3sKKyAgICAvKiBEbyBub3QgdG91Y2ggYW5vdGhlciB3cml0ZSAxIGNsZWFyIGJpdHMgKi8KKyAgICBXRFQtPkNUTCAmPSB+KFdEVF9DVExfSU5URU5fTXNrIHwgV0RUX0NUTF9SU1RGX01zayB8IFdEVF9DVExfSUZfTXNrIHwgV0RUX0NUTF9XS0ZfTXNrKTsKK30KKwordm9pZCBXRFRfT3Blbih1aW50MzJfdCB1MzJUaW1lb3V0SW50ZXJ2YWwsIHVpbnQzMl90IHUzMlJlc2V0RGVsYXksIHVpbnQzMl90IHUzMkVuYWJsZVJlc2V0LCB1aW50MzJfdCB1MzJFbmFibGVXYWtldXApOworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFdEVF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBXRFRfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1dEVF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvd3dkdC5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvd3dkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZWYxMzcKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy93d2R0LmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB3d2R0LmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFdpbmRvdyBXYXRjaGRvZyBUaW1lcihXV0RUKSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1dXRFRfSF9fCisjZGVmaW5lIF9fV1dEVF9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFdXRFRfRHJpdmVyIFdXRFQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgV1dEVF9FWFBPUlRFRF9DT05TVEFOVFMgV1dEVCBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgV1dEVCBQcmVzY2FsZSBQZXJpb2QgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdXRFRfUFJFU0NBTEVSXzEgICAgICAgICgwIDw8IFdXRFRfQ1RMX1BTQ1NFTF9Qb3MpICAvKiE8IFNlbGVjdCBtYXggdGltZS1vdXQgcGVyaW9kIHRvIDEgKiAoNjQqV1dEVF9DTEspIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV1dEVF9QUkVTQ0FMRVJfMiAgICAgICAgKDEgPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgIC8qITwgU2VsZWN0IG1heCB0aW1lLW91dCBwZXJpb2QgdG8gMiAqICg2NCpXV0RUX0NMSykgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXV0RUX1BSRVNDQUxFUl80ICAgICAgICAoMiA8PCBXV0RUX0NUTF9QU0NTRUxfUG9zKSAgLyohPCBTZWxlY3QgbWF4IHRpbWUtb3V0IHBlcmlvZCB0byA0ICogKDY0KldXRFRfQ0xLKSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdXRFRfUFJFU0NBTEVSXzggICAgICAgICgzIDw8IFdXRFRfQ1RMX1BTQ1NFTF9Qb3MpICAvKiE8IFNlbGVjdCBtYXggdGltZS1vdXQgcGVyaW9kIHRvIDggKiAoNjQqV1dEVF9DTEspIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV1dEVF9QUkVTQ0FMRVJfMTYgICAgICAgKDQgPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgIC8qITwgU2VsZWN0IG1heCB0aW1lLW91dCBwZXJpb2QgdG8gMTYgKiAoNjQqV1dEVF9DTEspIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV1dEVF9QUkVTQ0FMRVJfMzIgICAgICAgKDUgPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgIC8qITwgU2VsZWN0IG1heCB0aW1lLW91dCBwZXJpb2QgdG8gMzIgKiAoNjQqV1dEVF9DTEspIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV1dEVF9QUkVTQ0FMRVJfNjQgICAgICAgKDYgPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgIC8qITwgU2VsZWN0IG1heCB0aW1lLW91dCBwZXJpb2QgdG8gNjQgKiAoNjQqV1dEVF9DTEspIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV1dEVF9QUkVTQ0FMRVJfMTI4ICAgICAgKDcgPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgIC8qITwgU2VsZWN0IG1heCB0aW1lLW91dCBwZXJpb2QgdG8gMTI4ICogKDY0KldXRFRfQ0xLKSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdXRFRfUFJFU0NBTEVSXzE5MiAgICAgICg4IDw8IFdXRFRfQ1RMX1BTQ1NFTF9Qb3MpICAvKiE8IFNlbGVjdCBtYXggdGltZS1vdXQgcGVyaW9kIHRvIDE5MiAqICg2NCpXV0RUX0NMSykgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXV0RUX1BSRVNDQUxFUl8yNTYgICAgICAoOSA8PCBXV0RUX0NUTF9QU0NTRUxfUG9zKSAgLyohPCBTZWxlY3QgbWF4IHRpbWUtb3V0IHBlcmlvZCB0byAyNTYgKiAoNjQqV1dEVF9DTEspIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV1dEVF9QUkVTQ0FMRVJfMzg0ICAgICAgKDEwIDw8IFdXRFRfQ1RMX1BTQ1NFTF9Qb3MpIC8qITwgU2VsZWN0IG1heCB0aW1lLW91dCBwZXJpb2QgdG8gMzg0ICogKDY0KldXRFRfQ0xLKSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdXRFRfUFJFU0NBTEVSXzUxMiAgICAgICgxMSA8PCBXV0RUX0NUTF9QU0NTRUxfUG9zKSAvKiE8IFNlbGVjdCBtYXggdGltZS1vdXQgcGVyaW9kIHRvIDUxMiAqICg2NCpXV0RUX0NMSykgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXV0RUX1BSRVNDQUxFUl83NjggICAgICAoMTIgPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgLyohPCBTZWxlY3QgbWF4IHRpbWUtb3V0IHBlcmlvZCB0byA3NjggKiAoNjQqV1dEVF9DTEspIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV1dEVF9QUkVTQ0FMRVJfMTAyNCAgICAgKDEzIDw8IFdXRFRfQ1RMX1BTQ1NFTF9Qb3MpIC8qITwgU2VsZWN0IG1heCB0aW1lLW91dCBwZXJpb2QgdG8gMTAyNCAqICg2NCpXV0RUX0NMSykgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXV0RUX1BSRVNDQUxFUl8xNTM2ICAgICAoMTQgPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgLyohPCBTZWxlY3QgbWF4IHRpbWUtb3V0IHBlcmlvZCB0byAxNTM2ICogKDY0KldXRFRfQ0xLKSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdXRFRfUFJFU0NBTEVSXzIwNDggICAgICgxNSA8PCBXV0RUX0NUTF9QU0NTRUxfUG9zKSAvKiE8IFNlbGVjdCBtYXggdGltZS1vdXQgcGVyaW9kIHRvIDIwNDggKiAoNjQqV1dEVF9DTEspIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFdXRFQgUmVsb2FkIENvdW50ZXIgS2V5d29yZCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBXV0RUX1JFTE9BRF9XT1JEICAgICAgICAoMHgwMDAwNUFBNSkgICAgICAgICAgICAgICAgLyohPCBGaWxsIHRoaXMgdmFsdWUgdG8gV1dEVF9STERDTlQgcmVnaXN0ZXIgdG8gcmVsb2FkIFdXRFQgY291bnRlciBcaGlkZWluaXRpYWxpemVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgV1dEVF9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgV1dEVF9FWFBPUlRFRF9GVU5DVElPTlMgV1dEVCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIFdXRFQgUmVzZXQgU3lzdGVtIEZsYWcKKyAgKgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjbGVhciBXV0RUIHRpbWUtb3V0IHJlc2V0IHN5c3RlbSBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgV1dEVF9DTEVBUl9SRVNFVF9GTEFHKCkgICAgIChXV0RULT5TVEFUVVMgPSBXV0RUX1NUQVRVU19XV0RUUkZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBXV0RUIENvbXBhcmVkIE1hdGNoIEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY2xlYXIgV1dEVCBjb21wYXJlZCBtYXRjaCBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFdXRFRfQ0xFQVJfSU5UX0ZMQUcoKSAgICAgICAoV1dEVC0+U1RBVFVTID0gV1dEVF9TVEFUVVNfV1dEVElGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFdXRFQgUmVzZXQgU3lzdGVtIEZsYWcKKyAgKgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKgorICAqIEByZXR2YWwgICAgIDAgICBXV0RUIHRpbWUtb3V0IHJlc2V0IHN5c3RlbSBkaWQgbm90IG9jY3VyCisgICogQHJldHZhbCAgICAgMSAgIFdXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIG9jY3VycmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gaW5kaWNhdGUgc3lzdGVtIGhhcyBiZWVuIHJlc2V0IGJ5IFdXRFQgdGltZS1vdXQgcmVzZXQgb3Igbm90LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgV1dEVF9HRVRfUkVTRVRfRkxBRygpICAgICAgICgoV1dEVC0+U1RBVFVTICYgV1dEVF9TVEFUVVNfV1dEVFJGX01zayk/IDEgOiAwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgV1dEVCBDb21wYXJlZCBNYXRjaCBJbnRlcnJ1cHQgRmxhZworICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHZhbCAgICAgMCAgIFdXRFQgY29tcGFyZSBtYXRjaCBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICAqIEByZXR2YWwgICAgIDEgICBXV0RUIGNvbXBhcmUgbWF0Y2ggaW50ZXJydXB0IG9jY3VycmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gaW5kaWNhdGUgV1dEVCBjb3VudGVyIHZhbHVlIG1hdGNoZXMgQ01QREFUIHZhbHVlIG9yIG5vdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFdXRFRfR0VUX0lOVF9GTEFHKCkgICAgICAgICAoKFdXRFQtPlNUQVRVUyAmIFdXRFRfU1RBVFVTX1dXRFRJRl9Nc2spPyAxIDogMCkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFdXRFQgQ291bnRlcgorICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHVybiAgICAgV1dEVCBDb3VudGVyIFZhbHVlCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIHJlZmxlY3RzIHRoZSBjdXJyZW50IFdXRFQgY291bnRlciB2YWx1ZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFdXRFRfR0VUX0NPVU5URVIoKSAgICAgICAgICAoV1dEVC0+Q05UKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWxvYWQgV1dEVCBDb3VudGVyCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVsb2FkIHRoZSBXV0RUIGNvdW50ZXIgdmFsdWUgdG8gMHgzRi4KKyAgICAgICAgVXNlciBjYW4gb25seSB3cml0ZSBXV0RUX1JMRENOVCByZWdpc3RlciB0byByZWxvYWQgV1dEVCBjb3VudGVyIHZhbHVlIHdoZW4gY3VycmVudCBXV0RUIGNvdW50ZXIgdmFsdWUgXG4KKyAgKiAgICAgICAgICAgICBiZXR3ZWVuIDAgYW5kIENNUERBVCB2YWx1ZS4gSWYgdXNlciB3cml0ZXMgV1dEVF9STERDTlQgd2hlbiBjdXJyZW50IFdXRFQgY291bnRlciB2YWx1ZSBpcyBsYXJnZXIgdGhhbiBDTVBEQVQsIFxuCisgICogICAgICAgICAgICAgV1dEVCByZXNldCBzaWduYWwgd2lsbCBnZW5lcmF0ZSBpbW1lZGlhdGVseSB0byByZXNldCBzeXN0ZW0uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBXV0RUX1JFTE9BRF9DT1VOVEVSKCkgICAgICAgKFdXRFQtPlJMRENOVCA9IFdXRFRfUkVMT0FEX1dPUkQpCisKK3ZvaWQgV1dEVF9PcGVuKHVpbnQzMl90IHUzMlByZVNjYWxlLCB1aW50MzJfdCB1MzJDbXBWYWx1ZSwgdWludDMyX3QgdTMyRW5hYmxlSW50KTsKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBXV0RUX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFdXRFRfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1dXRFRfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2FjbXAuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2FjbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWRhYmRiCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvYWNtcC5jCkBAIC0wLDAgKzEsODMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBhY21wLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogJFJldmlzaW9uOiAxICQKKyAqICREYXRlOiAxNi8wNy8wNyA3OjUwcCAkCisgKiBAYnJpZWYgICAgQW5hbG9nIENvbXBhcmF0b3IoQUNNUCkgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJNMjM1MS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEFDTVBfRHJpdmVyIEFDTVAgRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBBQ01QX0VYUE9SVEVEX0ZVTkNUSU9OUyBBQ01QIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICoKKyAgKiBAcGFyYW1baW5dICBhY21wICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMkNoTnVtICBDb21wYXJhdG9yIG51bWJlci4KKyAgKiBAcGFyYW1baW5dICB1MzJOZWdTcmMgQ29tcGFyYXRvciBuZWdhdGl2ZSBpbnB1dCBzZWxlY3Rpb24uICBJbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfTkVHU0VMX1BJTgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX05FR1NFTF9DUlYKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9ORUdTRUxfVkJHCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfTkVHU0VMX0RBQworICAqIEBwYXJhbVtpbl0gIHUzMkh5c1NlbCBUaGUgaHlzdGVyZXNpcyBmdW5jdGlvbiBvcHRpb24uIEluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9IWVNURVJFU0lTXzMwTVYKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9IWVNURVJFU0lTXzIwTVYKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9IWVNURVJFU0lTXzEwTVYKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9IWVNURVJFU0lTX0RJU0FCTEUKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIENvbmZpZ3VyZSBoeXN0ZXJlc2lzIGZ1bmN0aW9uLCBzZWxlY3QgdGhlIHNvdXJjZSBvZiBuZWdhdGl2ZSBpbnB1dCBhbmQgZW5hYmxlIGFuYWxvZyBjb21wYXJhdG9yLgorICAqLwordm9pZCBBQ01QX09wZW4oQUNNUF9UICphY21wLCB1aW50MzJfdCB1MzJDaE51bSwgdWludDMyX3QgdTMyTmVnU3JjLCB1aW50MzJfdCB1MzJIeXNTZWwpCit7CisgICAgYWNtcC0+Q1RMW3UzMkNoTnVtXSA9IChhY21wLT5DVExbdTMyQ2hOdW1dICYgKH4oQUNNUF9DVExfTkVHU0VMX01zayB8IEFDTVBfQ1RMX0hZU1NFTF9Nc2spKSkgfCAodTMyTmVnU3JjIHwgdTMySHlzU2VsIHwgQUNNUF9DVExfQUNNUEVOX01zayk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2xvc2UgYW5hbG9nIGNvbXBhcmF0b3IKKyAgKgorICAqIEBwYXJhbVtpbl0gIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMkNoTnVtIENvbXBhcmF0b3IgbnVtYmVyLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBBQ01QRU4gYml0IG9mIEFDTVBfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgYW5hbG9nIGNvbXBhcmF0b3IuCisgICovCit2b2lkIEFDTVBfQ2xvc2UoQUNNUF9UICphY21wLCB1aW50MzJfdCB1MzJDaE51bSkKK3sKKyAgICBhY21wLT5DVExbdTMyQ2hOdW1dICY9ICh+QUNNUF9DVExfQUNNUEVOX01zayk7Cit9CisKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEFDTVBfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQUNNUF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvYnB3bS5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvYnB3bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTdjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9icHdtLmMKQEAgLTAsMCArMSw3MTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBicHdtLmMKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBCUFdNIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEJQV01fRHJpdmVyIEJQV00gRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBCUFdNX0VYUE9SVEVEX0ZVTkNUSU9OUyBCUFdNIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgKiBAYnJpZWYgQ29uZmlndXJlIEJQV00gY2FwdHVyZSBhbmQgZ2V0IHRoZSBuZWFyZXN0IHVuaXQgdGltZS4KKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJVbml0VGltZU5zZWMgVGhlIHVuaXQgdGltZSBvZiBjb3VudGVyCisgKiBAcGFyYW1baW5dIHUzMkNhcHR1cmVFZGdlIFRoZSBjb25kaXRpb24gdG8gbGF0Y2ggdGhlIGNvdW50ZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkCisgKiBAcmV0dXJuIFRoZSBuZWFyZXN0IHVuaXQgdGltZSBpbiBuYW5vIHNlY29uZC4KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBDb25maWd1cmUgQlBXTSBjYXB0dXJlIGFuZCBnZXQgdGhlIG5lYXJlc3QgdW5pdCB0aW1lLgorICovCit1aW50MzJfdCBCUFdNX0NvbmZpZ0NhcHR1cmVDaGFubmVsKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyVW5pdFRpbWVOc2VjLCB1aW50MzJfdCB1MzJDYXB0dXJlRWRnZSkKK3sKKyAgICB1aW50MzJfdCB1MzJQV01DbG9ja1NyYzsKKyAgICB1aW50MzJfdCB1MzJOZWFyZXN0VW5pdFRpbWVOc2VjID0gMFU7CisgICAgdWludDMyX3QgdTMyUHJlc2NhbGUgPSAxVSwgdTMyQ05SID0gMHhGRkZGVTsKKyAgICB1aW50OF90IHU4QnJlYWtMb29wID0gMFU7CisKKyAgICAodm9pZCl1MzJDaGFubmVsTnVtOworICAgICh2b2lkKXUzMkNhcHR1cmVFZGdlOworICAgIC8qIGNsb2NrIHNvdXJjZSBpcyBmcm9tIFBDTEsgKi8KKyAgICBpZigoKCh1aW50MzJfdClicHdtKSA9PSBCUFdNMF9CQVNFKSB8fCAoKCh1aW50MzJfdClicHdtKSA9PSBCUFdNMF9CQVNFICsgTlNfT0ZGU0VUKSkKKyAgICB7CisgICAgICAgIHUzMlBXTUNsb2NrU3JjID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgIH0KKyAgICBlbHNlLyogaWYoKGJwd20gPT0gQlBXTTEpfHwoYnB3bSA9PSBCUFdNMV9OUykpICovCisgICAgeworICAgICAgICB1MzJQV01DbG9ja1NyYyA9IENMS19HZXRQQ0xLMUZyZXEoKTsKKyAgICB9CisKKyAgICB1MzJQV01DbG9ja1NyYyAvPSAxMDAwVUw7CisgICAgZm9yKHUzMlByZXNjYWxlID0gMVU7IHUzMlByZXNjYWxlIDw9IDB4MTAwMFVMOyB1MzJQcmVzY2FsZSsrKQorICAgIHsKKyAgICAgICAgdTMyTmVhcmVzdFVuaXRUaW1lTnNlYyA9ICgxMDAwMDAwVUwgKiB1MzJQcmVzY2FsZSkgLyB1MzJQV01DbG9ja1NyYzsKKyAgICAgICAgaWYodTMyTmVhcmVzdFVuaXRUaW1lTnNlYyA8IHUzMlVuaXRUaW1lTnNlYykKKyAgICAgICAgeworICAgICAgICAgICAgaWYodTMyUHJlc2NhbGUgPT0gMHgxMDAwVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBsaW1pdCB0byB0aGUgbWF4aW11bSB1bml0IHRpbWUobmFubyBzZWNvbmQpICovCisgICAgICAgICAgICAgICAgdThCcmVha0xvb3AgPSAxVTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCEoKDEwMDAwMDBVTCAqICh1MzJQcmVzY2FsZSArIDFVTCkgPiAodTMyTmVhcmVzdFVuaXRUaW1lTnNlYyAqIHUzMlBXTUNsb2NrU3JjKSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHU4QnJlYWtMb29wID0gMVU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1OEJyZWFrTG9vcCA9IDFVOworICAgICAgICB9CisgICAgICAgIGlmKHU4QnJlYWtMb29wKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGNvbnZlcnQgdG8gcmVhbCByZWdpc3RlciB2YWx1ZSAqLworICAgIHUzMlByZXNjYWxlID0gdTMyUHJlc2NhbGUgLSAxVTsKKyAgICAvKiBhbGwgY2hhbm5lbHMgc2hhcmUgYSBwcmVzY2FsZXIgKi8KKyAgICBCUFdNX1NFVF9QUkVTQ0FMRVIoYnB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyUHJlc2NhbGUpOworCisgICAgLyogc2V0IEJQV00gdG8gZG93biBjb3VudCB0eXBlKGVkZ2UgYWxpZ25lZCkgKi8KKyAgICAoYnB3bSktPkNUTDEgPSAoMVVMKTsKKworICAgIEJQV01fU0VUX0NOUihicHdtLCB1MzJDaGFubmVsTnVtLCB1MzJDTlIpOworCisgICAgcmV0dXJuICh1MzJOZWFyZXN0VW5pdFRpbWVOc2VjKTsKK30KKworLyoqCisgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBDb25maWd1cmUgQlBXTSBnZW5lcmF0b3IgYW5kIGdldCB0aGUgbmVhcmVzdCBmcmVxdWVuY3kgaW4gZWRnZSBhbGlnbmVkKHVwIGNvdW50ZXIgdHlwZSkgYXV0by1yZWxvYWQgbW9kZQorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkZyZXF1ZW5jeSBUYXJnZXQgZ2VuZXJhdG9yIGZyZXF1ZW5jeQorICogQHBhcmFtW2luXSB1MzJEdXR5Q3ljbGUgVGFyZ2V0IGdlbmVyYXRvciBkdXR5IGN5Y2xlIHBlcmNlbnRhZ2UuIFZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDAgfiAxMDAuIDEwIG1lYW5zIDEwJSwgMjAgbWVhbnMgMjAlLi4uCisgKiBAcmV0dXJuIE5lYXJlc3QgZnJlcXVlbmN5IGNsb2NrIGluIG5hbm8gc2Vjb25kCisgU2luY2UgYWxsIGNoYW5uZWxzIHNoYXJlcyBhIHByZXNjYWxlci4gQ2FsbCB0aGlzIEFQSSB0byBjb25maWd1cmUgQlBXTSBmcmVxdWVuY3kgbWF5IGFmZmVjdAorICogICAgICAgZXhpc3RpbmcgZnJlcXVlbmN5IG9mIG90aGVyIGNoYW5uZWwuCisgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBpbml0aWFsIHN0YWdlLgorICogICAgICAgVG8gY2hhbmdlIGR1dHkgY3ljbGUgbGF0ZXIsIGl0IHNob3VsZCBnZXQgdGhlIGNvbmZpZ3VyZWQgcGVyaW9kIHZhbHVlIGFuZCBjYWxjdWxhdGUgdGhlIG5ldyBjb21wYXJhdG9yIHZhbHVlLgorICovCit1aW50MzJfdCBCUFdNX0NvbmZpZ091dHB1dENoYW5uZWwoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJGcmVxdWVuY3ksIHVpbnQzMl90IHUzMkR1dHlDeWNsZSkKK3sKKyAgICB1aW50MzJfdCB1MzJQV01DbG9ja1NyYzsKKyAgICB1aW50MzJfdCBpOworICAgIHVpbnQzMl90IHUzMlByZXNjYWxlID0gMVUsIHUzMkNOUiA9IDB4RkZGRlU7CisKKyAgICAvKiBjbG9jayBzb3VyY2UgaXMgZnJvbSBQQ0xLICovCisgICAgaWYoKCh1aW50MzJfdClicHdtID09IEJQV00wX0JBU0UpIHx8ICgodWludDMyX3QpYnB3bSA9PSBCUFdNMF9CQVNFICsgTlNfT0ZGU0VUKSkKKyAgICB7CisgICAgICAgIHUzMlBXTUNsb2NrU3JjID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgIH0KKyAgICBlbHNlLyogaWYoKGJwd20gPT0gQlBXTTEpfHwoYnB3bSA9PSBCUFdNMV9OUykpICovCisgICAgeworICAgICAgICB1MzJQV01DbG9ja1NyYyA9IENMS19HZXRQQ0xLMUZyZXEoKTsKKyAgICB9CisKKyAgICBmb3IodTMyUHJlc2NhbGUgPSAxVTsgdTMyUHJlc2NhbGUgPCAweEZGRlU7IHUzMlByZXNjYWxlKyspLyogcHJlc2NhbGUgY291bGQgYmUgMH4weEZGRiAqLworICAgIHsKKyAgICAgICAgaSA9ICh1MzJQV01DbG9ja1NyYyAvIHUzMkZyZXF1ZW5jeSkgLyB1MzJQcmVzY2FsZTsKKyAgICAgICAgLyogSWYgdGFyZ2V0IHZhbHVlIGlzIGxhcmdlciB0aGFuIENOUiwgbmVlZCB0byB1c2UgYSBsYXJnZXIgcHJlc2NhbGVyICovCisgICAgICAgIGlmKGkgPD0gKDB4MTAwMDBVKSkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ05SID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIC8qIFN0b3JlIHJldHVybiB2YWx1ZSBoZXJlICdjb3Mgd2UncmUgZ29ubmEgY2hhbmdlIHUzMlByZXNjYWxlICYgdTMyQ05SIHRvIHRoZSByZWFsIHZhbHVlIHRvIGZpbGwgaW50byByZWdpc3RlciAqLworICAgIGkgPSB1MzJQV01DbG9ja1NyYyAvICh1MzJQcmVzY2FsZSAqIHUzMkNOUik7CisKKyAgICAvKiBjb252ZXJ0IHRvIHJlYWwgcmVnaXN0ZXIgdmFsdWUgKi8KKyAgICB1MzJQcmVzY2FsZSA9IHUzMlByZXNjYWxlIC0gMVU7CisgICAgLyogYWxsIGNoYW5uZWxzIHNoYXJlIGEgcHJlc2NhbGVyICovCisgICAgQlBXTV9TRVRfUFJFU0NBTEVSKGJwd20sIHUzMkNoYW5uZWxOdW0sIHUzMlByZXNjYWxlKTsKKyAgICAvKiBzZXQgQlBXTSB0byB1cCBjb3VudGVyIHR5cGUoZWRnZSBhbGlnbmVkKSAqLworICAgIChicHdtKS0+Q1RMMSA9IEJQV01fVVBfQ09VTlRFUjsKKworICAgIHUzMkNOUiA9IHUzMkNOUiAtIDFVOworICAgIEJQV01fU0VUX0NOUihicHdtLCB1MzJDaGFubmVsTnVtLCB1MzJDTlIpOworICAgIEJQV01fU0VUX0NNUihicHdtLCB1MzJDaGFubmVsTnVtLCB1MzJEdXR5Q3ljbGUgKiAodTMyQ05SICsgMVVMKSAvIDEwMFVMKTsKKworCisgICAgKGJwd20pLT5XR0NUTDAgPSAoKGJwd20pLT5XR0NUTDAgJiB+KChCUFdNX1dHQ1RMMF9QUkRQQ1RMMF9Nc2sgfCBCUFdNX1dHQ1RMMF9aUENUTDBfTXNrKSA8PCAodTMyQ2hhbm5lbE51bSA8PCAxKSkpIHwgXAorICAgICAgICAgICAgICAgICAgICAgKEJQV01fT1VUUFVUX0hJR0ggPDwgKHUzMkNoYW5uZWxOdW0gPDwgMVVMIDw8IEJQV01fV0dDVEwwX1pQQ1RMMF9Qb3MpKTsKKyAgICAoYnB3bSktPldHQ1RMMSA9ICgoYnB3bSktPldHQ1RMMSAmIH4oKEJQV01fV0dDVEwxX0NNUERDVEwwX01zayB8IEJQV01fV0dDVEwxX0NNUFVDVEwwX01zaykgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMSkpKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgIChCUFdNX09VVFBVVF9MT1cgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMVVMIDw8IEJQV01fV0dDVEwxX0NNUFVDVEwwX1BvcykpOworCisgICAgcmV0dXJuKGkpOworfQorCisvKioKKyAqIEBicmllZiBTdGFydCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzdGFydCBCUFdNIG1vZHVsZS4KKyBBbGwgY2hhbm5lbHMgc2hhcmUgb25lIGNvdW50ZXIuCisgKi8KK3ZvaWQgQlBXTV9TdGFydChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKQoreworICAgICh2b2lkKXUzMkNoYW5uZWxNYXNrOworICAgIChicHdtKS0+Q05URU4gPSBCUFdNX0NOVEVOX0NOVEVOMF9Nc2s7Cit9CisKKy8qKgorICogQGJyaWVmIFN0b3AgQlBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RvcCBCUFdNIG1vZHVsZS4KKyBBbGwgY2hhbm5lbHMgc2hhcmUgb25lIHBlcmlvZC4KKyAqLwordm9pZCBCUFdNX1N0b3AoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICAodm9pZCl1MzJDaGFubmVsTWFzazsKKyAgICAoYnB3bSktPlBFUklPRCA9IDBVTDsKK30KKworLyoqCisgKiBAYnJpZWYgU3RvcCBCUFdNIGdlbmVyYXRpb24gaW1tZWRpYXRlbHkgYnkgY2xlYXIgY2hhbm5lbCBlbmFibGUgYml0CisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN0b3AgQlBXTSBnZW5lcmF0aW9uIGltbWVkaWF0ZWx5IGJ5IGNsZWFyIGNoYW5uZWwgZW5hYmxlIGJpdC4KKyBBbGwgY2hhbm5lbHMgc2hhcmUgb25lIGNvdW50ZXIuCisgKi8KK3ZvaWQgQlBXTV9Gb3JjZVN0b3AoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICAodm9pZCl1MzJDaGFubmVsTWFzazsKKyAgICAoYnB3bSktPkNOVEVOICY9IH5CUFdNX0NOVEVOX0NOVEVOMF9Nc2s7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBzZWxlY3RlZCBjaGFubmVsIHRvIHRyaWdnZXIgQURDCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyQ29uZGl0aW9uIFRoZSBjb25kaXRpb24gdG8gdHJpZ2dlciBBREMuIENvbWJpbmF0aW9uIG9mIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogICAgICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9UUklHR0VSX0FEQ19FVkVOX1pFUk9fUE9JTlQKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEJQV01fVFJJR0dFUl9BRENfRVZFTl9QRVJJT0RfUE9JTlQKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEJQV01fVFJJR0dFUl9BRENfRVZFTl9aRVJPX09SX1BFUklPRF9QT0lOVAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9UUklHR0VSX0FEQ19FVkVOX0NNUF9VUF9DT1VOVF9QT0lOVAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9UUklHR0VSX0FEQ19FVkVOX0NNUF9ET1dOX0NPVU5UX1BPSU5UCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBCUFdNX1RSSUdHRVJfQURDX09ERF9DTVBfVVBfQ09VTlRfUE9JTlQKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEJQV01fVFJJR0dFUl9BRENfT0REX0NNUF9ET1dOX0NPVU5UX1BPSU5UCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgc2VsZWN0ZWQgY2hhbm5lbCB0byB0cmlnZ2VyIEFEQworICovCit2b2lkIEJQV01fRW5hYmxlQURDVHJpZ2dlcihCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkNvbmRpdGlvbikKK3sKKyAgICBpZih1MzJDaGFubmVsTnVtIDwgNFVMKQorICAgIHsKKyAgICAgICAgKGJwd20pLT5FQURDVFMwICY9IH4oKEJQV01fRUFEQ1RTMF9UUkdTRUwwX01zaykgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMykpOworICAgICAgICAoYnB3bSktPkVBRENUUzAgfD0gKChCUFdNX0VBRENUUzBfVFJHRU4wX01zayB8IHUzMkNvbmRpdGlvbikgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAoYnB3bSktPkVBRENUUzEgJj0gfigoQlBXTV9FQURDVFMxX1RSR1NFTDRfTXNrKSA8PCAoKHUzMkNoYW5uZWxOdW0gLSA0VUwpIDw8IDMpKTsKKyAgICAgICAgKGJwd20pLT5FQURDVFMxIHw9ICgoQlBXTV9FQURDVFMxX1RSR0VONF9Nc2sgfCB1MzJDb25kaXRpb24pIDw8ICgodTMyQ2hhbm5lbE51bSAtIDRVTCkgPDwgMykpOworICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBzZWxlY3RlZCBjaGFubmVsIHRvIHRyaWdnZXIgQURDCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjMKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgc2VsZWN0ZWQgY2hhbm5lbCB0byB0cmlnZ2VyIEFEQworICovCit2b2lkIEJQV01fRGlzYWJsZUFEQ1RyaWdnZXIoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIGlmKHUzMkNoYW5uZWxOdW0gPCA0VUwpCisgICAgeworICAgICAgICAoYnB3bSktPkVBRENUUzAgJj0gfihCUFdNX0VBRENUUzBfVFJHRU4wX01zayA8PCAodTMyQ2hhbm5lbE51bSA8PCAzKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIChicHdtKS0+RUFEQ1RTMSAmPSB+KEJQV01fRUFEQ1RTMV9UUkdFTjRfTXNrIDw8ICgodTMyQ2hhbm5lbE51bSAtIDRVTCkgPDwgMykpOworICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgc2VsZWN0ZWQgY2hhbm5lbCB0cmlnZ2VyIEFEQyBmbGFnCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyQ29uZGl0aW9uIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBzZWxlY3RlZCBjaGFubmVsIHRyaWdnZXIgQURDIGZsYWcKKyAqLwordm9pZCBCUFdNX0NsZWFyQURDVHJpZ2dlckZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJDb25kaXRpb24pCit7CisgICAgKHZvaWQpdTMyQ29uZGl0aW9uOworICAgIChicHdtKS0+U1RBVFVTID0gKEJQV01fU1RBVFVTX0VBRENUUkcwX01zayA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgR2V0IHNlbGVjdGVkIGNoYW5uZWwgdHJpZ2dlciBBREMgZmxhZworICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dmFsIDAgVGhlIHNwZWNpZmllZCBjaGFubmVsIHRyaWdnZXIgQURDIHRvIHN0YXJ0IG9mIGNvbnZlcnNpb24gZmxhZyBpcyBub3Qgc2V0CisgKiBAcmV0dmFsIDEgVGhlIHNwZWNpZmllZCBjaGFubmVsIHRyaWdnZXIgQURDIHRvIHN0YXJ0IG9mIGNvbnZlcnNpb24gZmxhZyBpcyBzZXQKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgQlBXTSB0cmlnZ2VyIEFEQyB0byBzdGFydCBvZiBjb252ZXJzaW9uIGZsYWcgZm9yIHNwZWNpZmllZCBjaGFubmVsCisgKi8KK3VpbnQzMl90IEJQV01fR2V0QURDVHJpZ2dlckZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIHJldHVybiAoKChicHdtKS0+U1RBVFVTICYgKEJQV01fU1RBVFVTX0VBRENUUkcwX01zayA8PCB1MzJDaGFubmVsTnVtKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgY2FwdHVyZSBvZiBzZWxlY3RlZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIGlzIGNoYW5uZWwgMCwgYml0IDEgaXMgY2hhbm5lbCAxLi4uCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgY2FwdHVyZSBvZiBzZWxlY3RlZCBjaGFubmVsKHMpCisgKi8KK3ZvaWQgQlBXTV9FbmFibGVDYXB0dXJlKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spCit7CisgICAgKGJwd20pLT5DQVBJTkVOIHw9IHUzMkNoYW5uZWxNYXNrOworICAgIChicHdtKS0+Q0FQQ1RMIHw9IHUzMkNoYW5uZWxNYXNrOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIGNhcHR1cmUgb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCBpcyBjaGFubmVsIDAsIGJpdCAxIGlzIGNoYW5uZWwgMS4uLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBjYXB0dXJlIG9mIHNlbGVjdGVkIGNoYW5uZWwocykKKyAqLwordm9pZCBCUFdNX0Rpc2FibGVDYXB0dXJlKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spCit7CisgICAgKGJwd20pLT5DQVBJTkVOICY9IH51MzJDaGFubmVsTWFzazsKKyAgICAoYnB3bSktPkNBUENUTCAmPSB+dTMyQ2hhbm5lbE1hc2s7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZXMgQlBXTSBvdXRwdXQgZ2VuZXJhdGlvbiBvZiBzZWxlY3RlZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCBiaXQgMCB0byAxIGVuYWJsZXMgY2hhbm5lbCAwIG91dHB1dCwgc2V0IGJpdCAxIHRvIDEgZW5hYmxlcyBjaGFubmVsIDEgb3V0cHV0Li4uCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGVzIEJQV00gb3V0cHV0IGdlbmVyYXRpb24gb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKQorICovCit2b2lkIEJQV01fRW5hYmxlT3V0cHV0KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spCit7CisgICAgKGJwd20pLT5QT0VOIHw9IHUzMkNoYW5uZWxNYXNrOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlcyBCUFdNIG91dHB1dCBnZW5lcmF0aW9uIG9mIHNlbGVjdGVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgYml0IDAgdG8gMSBkaXNhYmxlcyBjaGFubmVsIDAgb3V0cHV0LCBzZXQgYml0IDEgdG8gMSBkaXNhYmxlcyBjaGFubmVsIDEgb3V0cHV0Li4uCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlcyBCUFdNIG91dHB1dCBnZW5lcmF0aW9uIG9mIHNlbGVjdGVkIGNoYW5uZWwocykKKyAqLwordm9pZCBCUFdNX0Rpc2FibGVPdXRwdXQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICAoYnB3bSktPlBPRU4gJj0gfnUzMkNoYW5uZWxNYXNrOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJFZGdlIFJpc2luZyBvciBmYWxsaW5nIGVkZ2UgdG8gbGF0Y2ggY291bnRlci4KKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9DQVBUVVJFX0lOVF9SSVNJTkdfTEFUQ0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9DQVBUVVJFX0lOVF9GQUxMSU5HX0xBVENICisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBCUFdNX0VuYWJsZUNhcHR1cmVJbnQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJFZGdlKQoreworICAgIChicHdtKS0+Q0FQSUVOIHw9ICh1MzJFZGdlIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIGNhcHR1cmUgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyRWRnZSBSaXNpbmcgb3IgZmFsbGluZyBlZGdlIHRvIGxhdGNoIGNvdW50ZXIuCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fQ0FQVFVSRV9JTlRfUklTSU5HX0xBVENICisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fQ0FQVFVSRV9JTlRfRkFMTElOR19MQVRDSAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBjYXB0dXJlIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEJQV01fRGlzYWJsZUNhcHR1cmVJbnQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJFZGdlKQoreworICAgIChicHdtKS0+Q0FQSUVOICY9IH4odTMyRWRnZSA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJFZGdlIFJpc2luZyBvciBmYWxsaW5nIGVkZ2UgdG8gbGF0Y2ggY291bnRlci4KKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9DQVBUVVJFX0lOVF9SSVNJTkdfTEFUQ0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9DQVBUVVJFX0lOVF9GQUxMSU5HX0xBVENICisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBjYXB0dXJlIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEJQV01fQ2xlYXJDYXB0dXJlSW50RmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkVkZ2UpCit7CisgICAgKGJwd20pLT5DQVBJRiA9ICh1MzJFZGdlIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBHZXQgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHZhbCAwIE5vIGNhcHR1cmUgaW50ZXJydXB0CisgKiBAcmV0dmFsIDEgUmlzaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0CisgKiBAcmV0dmFsIDIgRmFsbGluZyBlZGdlIGxhdGNoIGludGVycnVwdAorICogQHJldHZhbCAzIFJpc2luZyBhbmQgZmFsbGluZyBsYXRjaCBpbnRlcnJ1cHQKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordWludDMyX3QgQlBXTV9HZXRDYXB0dXJlSW50RmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgdWludDMyX3QgdTMyQ2FwSWYgPSAwVUw7CisKKyAgICB1MzJDYXBJZiA9ICgoKChicHdtKS0+Q0FQSUYgJiAoQllURTFfTXNrIDw8IHUzMkNoYW5uZWxOdW0pKSA/IDFVTCA6IDBVTCkgPDwgMSk7CisgICAgdTMyQ2FwSWYgfD0gKCgoYnB3bSktPkNBUElGICYgKEJZVEUwX01zayA8PCB1MzJDaGFubmVsTnVtKSkgPyAxVUwgOiAwVUwpOworICAgIHJldHVybiB1MzJDYXBJZjsKK30KKy8qKgorICogQGJyaWVmIEVuYWJsZSBkdXR5IGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMySW50RHV0eVR5cGUgRHV0eSBpbnRlcnJ1cHQgdHlwZSwgY291bGQgYmUgZWl0aGVyCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fRFVUWV9JTlRfRE9XTl9DT1VOVF9NQVRDSF9DTVAKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9EVVRZX0lOVF9VUF9DT1VOVF9NQVRDSF9DTVAKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBkdXR5IGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEJQV01fRW5hYmxlRHV0eUludChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkludER1dHlUeXBlKQoreworICAgIChicHdtKS0+SU5URU4gfD0gKHUzMkludER1dHlUeXBlIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIGR1dHkgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBkdXR5IGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKi8KK3ZvaWQgQlBXTV9EaXNhYmxlRHV0eUludChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGJwd20pLT5JTlRFTiAmPSB+KHVpbnQzMl90KSgoQlBXTV9EVVRZX0lOVF9ET1dOX0NPVU5UX01BVENIX0NNUCB8IEJQV01fRFVUWV9JTlRfVVBfQ09VTlRfTUFUQ0hfQ01QKSA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgZHV0eSBpbnRlcnJ1cHQgZmxhZyBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIGR1dHkgaW50ZXJydXB0IGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICovCit2b2lkIEJQV01fQ2xlYXJEdXR5SW50RmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGJwd20pLT5JTlRTVFMgPSAoQllURTJfTXNrIHwgQllURTNfTXNrKSA8PCB1MzJDaGFubmVsTnVtOworfQorCisvKioKKyAqIEBicmllZiBHZXQgZHV0eSBpbnRlcnJ1cHQgZmxhZyBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gRHV0eSBpbnRlcnJ1cHQgZmxhZyBvZiBzcGVjaWZpZWQgY2hhbm5lbAorICogQHJldHZhbCAwIER1dHkgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAqIEByZXR2YWwgMSBEdXR5IGludGVycnVwdCBvY2N1cnJlZAorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBkdXR5IGludGVycnVwdCBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqLwordWludDMyX3QgQlBXTV9HZXREdXR5SW50RmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgcmV0dXJuICgoKChicHdtKS0+SU5UU1RTICYgKChCWVRFMl9Nc2sgfCBCWVRFM19Nc2spIDw8IHUzMkNoYW5uZWxOdW0pKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgcGVyaW9kIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHBhcmFtW2luXSB1MzJJbnRQZXJpb2RUeXBlIFBlcmlvZCBpbnRlcnJ1cHQgdHlwZS4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgcGVyaW9kIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorIEFsbCBjaGFubmVscyBzaGFyZSBjaGFubmVsIDAncyBzZXR0aW5nLgorICovCit2b2lkIEJQV01fRW5hYmxlUGVyaW9kSW50KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgIHVpbnQzMl90IHUzMkludFBlcmlvZFR5cGUpCit7CisgICAgKHZvaWQpdTMyQ2hhbm5lbE51bTsKKyAgICAodm9pZCl1MzJJbnRQZXJpb2RUeXBlOworICAgIChicHdtKS0+SU5URU4gfD0gQlBXTV9JTlRFTl9QSUVOMF9Nc2s7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgcGVyaW9kIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBwZXJpb2QgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgQWxsIGNoYW5uZWxzIHNoYXJlIGNoYW5uZWwgMCdzIHNldHRpbmcuCisgKi8KK3ZvaWQgQlBXTV9EaXNhYmxlUGVyaW9kSW50KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAodm9pZCl1MzJDaGFubmVsTnVtOworICAgIChicHdtKS0+SU5URU4gJj0gfkJQV01fSU5URU5fUElFTjBfTXNrOworfQorCisvKioKKyAqIEBicmllZiBDbGVhciBwZXJpb2QgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBwZXJpb2QgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyBBbGwgY2hhbm5lbHMgc2hhcmUgY2hhbm5lbCAwJ3Mgc2V0dGluZy4KKyAqLwordm9pZCBCUFdNX0NsZWFyUGVyaW9kSW50RmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKHZvaWQpdTMyQ2hhbm5lbE51bTsKKyAgICAoYnB3bSktPklOVFNUUyA9IEJQV01fSU5UU1RTX1BJRjBfTXNrOworfQorCisvKioKKyAqIEBicmllZiBHZXQgcGVyaW9kIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHJldHVybiBQZXJpb2QgaW50ZXJydXB0IGZsYWcgb2Ygc3BlY2lmaWVkIGNoYW5uZWwKKyAqIEByZXR2YWwgMCBQZXJpb2QgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAqIEByZXR2YWwgMSBQZXJpb2QgaW50ZXJydXB0IG9jY3VycmVkCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHBlcmlvZCBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorIEFsbCBjaGFubmVscyBzaGFyZSBjaGFubmVsIDAncyBzZXR0aW5nLgorICovCit1aW50MzJfdCBCUFdNX0dldFBlcmlvZEludEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgICh2b2lkKXUzMkNoYW5uZWxOdW07CisgICAgcmV0dXJuICgoKGJwd20pLT5JTlRTVFMgJiBCUFdNX0lOVFNUU19QSUYwX01zaykgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgemVybyBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSB6ZXJvIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorIEFsbCBjaGFubmVscyBzaGFyZSBjaGFubmVsIDAncyBzZXR0aW5nLgorICovCit2b2lkIEJQV01fRW5hYmxlWmVyb0ludChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKHZvaWQpdTMyQ2hhbm5lbE51bTsKKyAgICAoYnB3bSktPklOVEVOIHw9IEJQV01fSU5URU5fWklFTjBfTXNrOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIHplcm8gaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIHplcm8gaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgQWxsIGNoYW5uZWxzIHNoYXJlIGNoYW5uZWwgMCdzIHNldHRpbmcuCisgKi8KK3ZvaWQgQlBXTV9EaXNhYmxlWmVyb0ludChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKHZvaWQpdTMyQ2hhbm5lbE51bTsKKyAgICAoYnB3bSktPklOVEVOICY9IH5CUFdNX0lOVEVOX1pJRU4wX01zazsKK30KKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgemVybyBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIHplcm8gaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgQWxsIGNoYW5uZWxzIHNoYXJlIGNoYW5uZWwgMCdzIHNldHRpbmcuCisgKi8KK3ZvaWQgQlBXTV9DbGVhclplcm9JbnRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAodm9pZCl1MzJDaGFubmVsTnVtOworICAgIChicHdtKS0+SU5UU1RTID0gQlBXTV9JTlRTVFNfWklGMF9Nc2s7Cit9CisKKy8qKgorICogQGJyaWVmIEdldCB6ZXJvIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHJldHVybiB6ZXJvIGludGVycnVwdCBmbGFnIG9mIHNwZWNpZmllZCBjaGFubmVsCisgKiBAcmV0dmFsIDAgemVybyBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICogQHJldHZhbCAxIHplcm8gaW50ZXJydXB0IG9jY3VycmVkCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHplcm8gaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgQWxsIGNoYW5uZWxzIHNoYXJlIGNoYW5uZWwgMCdzIHNldHRpbmcuCisgKi8KK3VpbnQzMl90IEJQV01fR2V0WmVyb0ludEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgICh2b2lkKXUzMkNoYW5uZWxOdW07CisgICAgcmV0dXJuICgoKGJwd20pLT5JTlRTVFMgJiBCUFdNX0lOVFNUU19aSUYwX01zaykgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgbG9hZCBtb2RlIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJMb2FkTW9kZSBCUFdNIGNvdW50ZXIgbG9hZGluZyBtb2RlLgorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0xPQURfTU9ERV9JTU1FRElBVEUKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9MT0FEX01PREVfQ0VOVEVSCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgbG9hZCBtb2RlIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgQlBXTV9FbmFibGVMb2FkTW9kZShCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkxvYWRNb2RlKQoreworICAgIChicHdtKS0+Q1RMMCB8PSAodTMyTG9hZE1vZGUgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgbG9hZCBtb2RlIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJMb2FkTW9kZSBCUFdNIGNvdW50ZXIgbG9hZGluZyBtb2RlLgorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0xPQURfTU9ERV9JTU1FRElBVEUKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9MT0FEX01PREVfQ0VOVEVSCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGxvYWQgbW9kZSBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEJQV01fRGlzYWJsZUxvYWRNb2RlKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyTG9hZE1vZGUpCit7CisgICAgKGJwd20pLT5DVEwwICY9IH4odTMyTG9hZE1vZGUgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIFNldCBCUFdNIGNsb2NrIHNvdXJjZQorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEBwYXJhbVtpbl0gdTMyQ2xrU3JjU2VsIEJQV00gZXh0ZXJuYWwgY2xvY2sgc291cmNlLgorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0NMS1NSQ19CUFdNX0NMSworICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0NMS1NSQ19USU1FUjAKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9DTEtTUkNfVElNRVIxCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fQ0xLU1JDX1RJTUVSMgorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0NMS1NSQ19USU1FUjMKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBCUFdNIGNsb2NrIHNvdXJjZS4KKyBBbGwgY2hhbm5lbHMgc2hhcmUgY2hhbm5lbCAwJ3Mgc2V0dGluZy4KKyAqLwordm9pZCBCUFdNX1NldENsb2NrU291cmNlKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyQ2xrU3JjU2VsKQoreworICAgICh2b2lkKXUzMkNoYW5uZWxOdW07CisgICAgKGJwd20pLT5DTEtTUkMgPSAodTMyQ2xrU3JjU2VsKTsKK30KKworLyoqCisgKiBAYnJpZWYgR2V0IHRoZSB0aW1lLWJhc2UgY291bnRlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEByZXR1cm4gQ291bnQgdG8gbWF4IGludGVycnVwdCBmbGFnIG9mIHNwZWNpZmllZCBjaGFubmVsCisgKiBAcmV0dmFsIDAgQ291bnQgdG8gbWF4IGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgKiBAcmV0dmFsIDEgQ291bnQgdG8gbWF4IGludGVycnVwdCBvY2N1cnJlZAorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgdGltZS1iYXNlIGNvdW50ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgQWxsIGNoYW5uZWxzIHNoYXJlIGNoYW5uZWwgMCdzIHNldHRpbmcuCisgKi8KK3VpbnQzMl90IEJQV01fR2V0V3JhcEFyb3VuZEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgICh2b2lkKXUzMkNoYW5uZWxOdW07CisgICAgcmV0dXJuICgoKGJwd20pLT5TVEFUVVMgJiBCUFdNX1NUQVRVU19DTlRNQVgwX01zaykgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBDbGVhciB0aGUgdGltZS1iYXNlIGNvdW50ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciB0aGUgdGltZS1iYXNlIGNvdW50ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgQWxsIGNoYW5uZWxzIHNoYXJlIGNoYW5uZWwgMCdzIHNldHRpbmcuCisgKi8KK3ZvaWQgQlBXTV9DbGVhcldyYXBBcm91bmRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAodm9pZCl1MzJDaGFubmVsTnVtOworICAgIChicHdtKS0+U1RBVFVTID0gQlBXTV9TVEFUVVNfQ05UTUFYMF9Nc2s7Cit9CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBCUFdNX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEJQV01fRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2Nhbi5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzOWJjNAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2Nhbi5jCkBAIC0wLDAgKzEsMTE5MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNhbi5jCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBDQU4gZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJNMjM1MS5oIgorCisjaWYgZGVmaW5lZChfX0lDQ0FSTV9fKQorIyBwcmFnbWEgZGlhZ19zdXBwcmVzcz1QbTA3MywgUG0xNDMgICAgICAgIC8qIE1pc3JhIEMgcnVsZSAxNC43ICovCisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIENBTl9Ecml2ZXIgQ0FOIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIENBTl9FWFBPUlRFRF9GVU5DVElPTlMgQ0FOIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqIEBjb25kIEhJRERFTl9TWU1CT0xTICovCisKKyNpZiBkZWZpbmVkKENBTjEpCitzdGF0aWMgdWludDhfdCBndThMb2NrQ2FuSWZbMl1bMl0gPSB7ezBVfX07ICAgIC8qIFRoZSBjaGlwIGhhcyB0d28gQ0FOcy4gKi8KKyNlbGlmIGRlZmluZWQoQ0FOMCkgfHwgZGVmaW5lZChDQU4pCitzdGF0aWMgdWludDhfdCBndThMb2NrQ2FuSWZbMV1bMl0gPSB7ezBVfX07ICAgIC8qIFRoZSBjaGlwIG9ubHkgaGFzIG9uZSBDQU4uICovCisjZW5kaWYKKworI2RlZmluZSBSRVRSWV9DT1VOVFMgICAgKDB4MTAwMDAwMDBVTCkKKworI2RlZmluZSBUU0VHMV9NSU4gMgorI2RlZmluZSBUU0VHMV9NQVggMTYKKyNkZWZpbmUgVFNFRzJfTUlOIDEKKyNkZWZpbmUgVFNFRzJfTUFYIDgKKyNkZWZpbmUgQlJQX01JTiAgIDEKKyNkZWZpbmUgQlJQX01BWCAgIDEwMjQgIC8qIDYtYml0IEJSUCBmaWVsZCArIDQtYml0IEJSUEUgZmllbGQqLworI2RlZmluZSBTSldfTUFYICAgNFVMCisjZGVmaW5lIEJSUF9JTkMgICAxCisKKy8qICNkZWZpbmUgREVCVUdfUFJJTlRGIHByaW50ZiAqLworI2RlZmluZSBERUJVR19QUklOVEYoLi4uKQorCisKK3N0YXRpYyB1aW50MzJfdCBMb2NrSUYoQ0FOX1QgKnRDQU4pOworc3RhdGljIHVpbnQzMl90IExvY2tJRl9UTChDQU5fVCAqdENBTik7CitzdGF0aWMgdm9pZCBSZWxlYXNlSUYoQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMklmTm8pOworc3RhdGljIGludCBjYW5fdXBkYXRlX3NwdChpbnQgc2FtcGxfcHQsIGludCB0c2VnLCBpbnQgKnRzZWcxLCBpbnQgKnRzZWcyKTsKKworLyoqCisgICogQGJyaWVmIENoZWNrIGlmIGFueSBpbnRlcmZhY2UgaXMgYXZhaWxhYmxlIHRoZW4gbG9jayBpdCBmb3IgdXNhZ2UuCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEByZXR2YWwgMCBJRjAgaXMgZnJlZQorICAqIEByZXR2YWwgMSBJRjEgaXMgZnJlZQorICAqIEByZXR2YWwgMiBObyBJRiBpcyBmcmVlCisgICogQGRldGFpbHMgU2VhcmNoIHRoZSBmaXJzdCBmcmVlIG1lc3NhZ2UgaW50ZXJmYWNlLCBzdGFydGluZyBmcm9tIDAuIElmIGEgaW50ZXJmYWNlIGlzCisgICogICAgICAgICAgYXZhaWxhYmxlLCBzZXQgYSBmbGFnIHRvIGxvY2sgdGhlIGludGVyZmFjZS4KKyAgKi8KK3N0YXRpYyB1aW50MzJfdCBMb2NrSUYoQ0FOX1QgKnRDQU4pCit7CisgICAgdWludDMyX3QgdTMyQ2FuTm87CisgICAgdWludDMyX3QgdTMyRnJlZUlmTm87CisgICAgdWludDMyX3QgdTMySW50TWFzazsKKworI2lmIGRlZmluZWQoQ0FOMSkKKyAgICB1MzJDYW5ObyA9ICh0Q0FOID09IENBTjEpID8gMSA6IDA7CisjZWxzZSAvLyBkZWZpbmVkKENBTjApIHx8IGRlZmluZWQoQ0FOKQorICAgIHUzMkNhbk5vID0gMFU7CisjZW5kaWYKKworICAgIHUzMkZyZWVJZk5vID0gMlU7CisKKyAgICAvKiBEaXNhYmxlIENBTiBpbnRlcnJ1cHQgKi8KKyAgICB1MzJJbnRNYXNrID0gdENBTi0+Q09OICYgKENBTl9DT05fSUVfTXNrIHwgQ0FOX0NPTl9TSUVfTXNrIHwgQ0FOX0NPTl9FSUVfTXNrKTsKKyAgICB0Q0FOLT5DT04gPSB0Q0FOLT5DT04gJiB+KENBTl9DT05fSUVfTXNrIHwgQ0FOX0NPTl9TSUVfTXNrIHwgQ0FOX0NPTl9FSUVfTXNrKTsKKworICAgIC8qIENoZWNrIGludGVyZmFjZSAxIGlzIGF2YWlsYWJsZSBvciBub3QgKi8KKyAgICBpZigodENBTi0+SUZbMF0uQ1JFUSAmIENBTl9JRl9DUkVRX0JVU1lfTXNrKSA9PSAwVSkKKyAgICB7CisgICAgICAgIGlmKGd1OExvY2tDYW5JZlt1MzJDYW5Ob11bMF0gPT0gKHVpbnQ4X3QpRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGd1OExvY2tDYW5JZlt1MzJDYW5Ob11bMF0gPSAodWludDhfdClUUlVFOworICAgICAgICAgICAgdTMyRnJlZUlmTm8gPSAwVTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIE9yIGNoZWNrIGludGVyZmFjZSAyIGlzIGF2YWlsYWJsZSBvciBub3QgKi8KKyAgICBpZih1MzJGcmVlSWZObyA9PSAyVSkKKyAgICB7CisgICAgICAgIGlmKCh0Q0FOLT5JRlsxXS5DUkVRICYgQ0FOX0lGX0NSRVFfQlVTWV9Nc2spID09IDBVKQorICAgICAgICB7CisgICAgICAgICAgICBpZihndThMb2NrQ2FuSWZbdTMyQ2FuTm9dWzFdID09ICh1aW50OF90KUZBTFNFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGd1OExvY2tDYW5JZlt1MzJDYW5Ob11bMV0gPSAodWludDhfdClUUlVFOworICAgICAgICAgICAgICAgIHUzMkZyZWVJZk5vID0gMVU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBFbmFibGUgQ0FOIGludGVycnVwdCAqLworICAgIHRDQU4tPkNPTiB8PSB1MzJJbnRNYXNrOworCisgICAgcmV0dXJuIHUzMkZyZWVJZk5vOworfQorCisvKioKKyAgKiBAYnJpZWYgQ2hlY2sgaWYgYW55IGludGVyZmFjZSBpcyBhdmFpbGFibGUgaW4gYSB0aW1lIGxpbWl0YXRpb24gdGhlbiBsb2NrIGl0IGZvciB1c2FnZS4KKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHJldHZhbCAwIElGMCBpcyBmcmVlCisgICogQHJldHZhbCAxIElGMSBpcyBmcmVlCisgICogQHJldHZhbCAyIE5vIElGIGlzIGZyZWUKKyAgKiBAZGV0YWlscyBTZWFyY2ggdGhlIGZpcnN0IGZyZWUgbWVzc2FnZSBpbnRlcmZhY2UsIHN0YXJ0aW5nIGZyb20gMC4gSWYgbm8gaW50ZXJmYWNlIGlzCisgICogICAgICAgICAgaXQgd2lsbCB0cnkgYWdhaW4gdW50aWwgdGltZSBvdXQuIElmIGEgaW50ZXJmYWNlIGlzIGF2YWlsYWJsZSwgIHNldCBhIGZsYWcgdG8KKyAgKiAgICAgICAgICBsb2NrIHRoZSBpbnRlcmZhY2UuCisgICovCitzdGF0aWMgdWludDMyX3QgTG9ja0lGX1RMKENBTl9UICp0Q0FOKQoreworICAgIHVpbnQzMl90IHUzMkNvdW50OworICAgIHVpbnQzMl90IHUzMkZyZWVJZk5vID0gMFU7CisKKyAgICBmb3IodTMyQ291bnQgPSAwVTsgdTMyQ291bnQgPCAodWludDMyX3QpUkVUUllfQ09VTlRTOyB1MzJDb3VudCsrKQorICAgIHsKKyAgICAgICAgaWYoKHUzMkZyZWVJZk5vID0gTG9ja0lGKHRDQU4pKSAhPSAyVSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdTMyRnJlZUlmTm87Cit9CisKKy8qKgorICAqIEBicmllZiBSZWxlYXNlIGxvY2tlZCBpbnRlcmZhY2UuCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdTMySW5mbyBUaGUgaW50ZXJmYWNlIG51bWJlciwgMCBvciAxLgorICAqIEByZXR1cm4gbm9uZQorICAqIEBkZXRhaWxzIFJlbGVhc2UgdGhlIGxvY2tlZCBpbnRlcmZhY2UuCisgICovCitzdGF0aWMgdm9pZCBSZWxlYXNlSUYoQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMklmTm8pCit7CisgICAgdWludDMyX3QgdTMySW50TWFzazsKKyAgICB1aW50MzJfdCB1MzJDYW5ObzsKKworICAgIGlmKHUzMklmTm8gPCAyVSkKKyAgICB7CisKKyNpZiBkZWZpbmVkKENBTjEpCisgICAgICAgIHUzMkNhbk5vID0gKHRDQU4gPT0gQ0FOMSkgPyAxVSA6IDBVOworI2Vsc2UgLy8gZGVmaW5lZChDQU4wKSB8fCBkZWZpbmVkKENBTikKKyAgICAgICAgdTMyQ2FuTm8gPSAwVTsKKyNlbmRpZgorCisgICAgICAgIC8qIERpc2FibGUgQ0FOIGludGVycnVwdCAqLworICAgICAgICB1MzJJbnRNYXNrID0gdENBTi0+Q09OICYgKENBTl9DT05fSUVfTXNrIHwgQ0FOX0NPTl9TSUVfTXNrIHwgQ0FOX0NPTl9FSUVfTXNrKTsKKyAgICAgICAgdENBTi0+Q09OID0gdENBTi0+Q09OICYgfihDQU5fQ09OX0lFX01zayB8IENBTl9DT05fU0lFX01zayB8IENBTl9DT05fRUlFX01zayk7CisKKyAgICAgICAgZ3U4TG9ja0NhbklmW3UzMkNhbk5vXVt1MzJJZk5vXSA9ICh1aW50OF90KUZBTFNFOworCisgICAgICAgIC8qIEVuYWJsZSBDQU4gaW50ZXJydXB0ICovCisgICAgICAgIHRDQU4tPkNPTiB8PSB1MzJJbnRNYXNrOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmIEVudGVyIGluaXRpYWxpemF0aW9uIG1vZGUKKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSBGb2xsb3dpbmcgdmFsdWVzIGNhbiBiZSB1c2VkLgorICAqICAgICAgICAgICAgXHJlZiBDQU5fQ09OX0RBUl9Nc2sgRGlzYWJsZSBhdXRvbWF0aWMgcmV0cmFuc21pc3Npb24uCisgICogICAgICAgICAgICBccmVmIENBTl9DT05fRUlFX01zayBFbmFibGUgZXJyb3IgaW50ZXJydXB0LgorICAqICAgICAgICAgICAgXHJlZiBDQU5fQ09OX1NJRV9Nc2sgRW5hYmxlIHN0YXR1cyBpbnRlcnJ1cHQuCisgICogICAgICAgICAgICBccmVmIENBTl9DT05fSUVfTXNrIENBTiBpbnRlcnJ1cHQuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBDQU4gdG8gZW50ZXIgaW5pdGlhbGl6YXRpb24gbW9kZSBhbmQgZW5hYmxlIGFjY2VzcyBiaXQgdGltaW5nCisgICogICAgICAgICAgcmVnaXN0ZXIuIEFmdGVyIGJpdCB0aW1pbmcgY29uZmlndXJhdGlvbiByZWFkeSwgdXNlciBtdXN0IGNhbGwgQ0FOX0xlYXZlSW5pdE1vZGUoKQorICAqICAgICAgICAgIHRvIGxlYXZlIGluaXRpYWxpemF0aW9uIG1vZGUgYW5kIGxvY2sgYml0IHRpbWluZyByZWdpc3RlciB0byBsZXQgbmV3IGNvbmZpZ3VyYXRpb24KKyAgKiAgICAgICAgICB0YWtlIGVmZmVjdC4KKyAgKi8KK3ZvaWQgQ0FOX0VudGVySW5pdE1vZGUoQ0FOX1QgKnRDQU4sIHVpbnQ4X3QgdThNYXNrKQoreworICAgIHRDQU4tPkNPTiA9IHU4TWFzayB8IChDQU5fQ09OX0lOSVRfTXNrIHwgQ0FOX0NPTl9DQ0VfTXNrKTsKK30KKworCisvKioKKyAgKiBAYnJpZWYgTGVhdmUgaW5pdGlhbGl6YXRpb24gbW9kZQorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IENBTiB0byBsZWF2ZSBpbml0aWFsaXphdGlvbiBtb2RlIHRvIGxldAorICAqICAgICAgICAgIGJpdCB0aW1pbmcgY29uZmlndXJhdGlvbiB0YWtlIGVmZmVjdCBhZnRlciBjb25maWd1cmF0aW9uIHJlYWR5LgorICAqLwordm9pZCBDQU5fTGVhdmVJbml0TW9kZShDQU5fVCAqdENBTikKK3sKKyAgICB0Q0FOLT5DT04gJj0gKH4oQ0FOX0NPTl9JTklUX01zayB8IENBTl9DT05fQ0NFX01zaykpOworICAgIHdoaWxlKHRDQU4tPkNPTiAmIENBTl9DT05fSU5JVF9Nc2spIHt9IC8qIENoZWNrIElOSVQgYml0IGlzIHJlbGVhc2VkICovCit9CisKKy8qKgorICAqIEBicmllZiBXYWl0IG1lc3NhZ2UgaW50byBtZXNzYWdlIGJ1ZmZlciBpbiBiYXNpYyBtb2RlLgorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gd2FpdCBtZXNzYWdlIGludG8gbWVzc2FnZSBidWZmZXIgaW4gYmFzaWMgbW9kZS4gUGxlYXNlIG5vdGljZSB0aGUKKyAgKiAgICAgICAgICBmdW5jdGlvbiBpcyBwb2xsaW5nIE5FV0RBVCBiaXQgb2YgTUNPTiByZWdpc3RlciBieSB3aGlsZSBsb29wIGFuZCBpdCBpcyB1c2VkIGluIGJhc2ljIG1vZGUuCisgICovCit2b2lkIENBTl9XYWl0TXNnKENBTl9UICp0Q0FOKQoreworICAgIHRDQU4tPlNUQVRVUyA9IDB4MFU7IC8qIGNsciBzdGF0dXMgKi8KKworICAgIHdoaWxlKDEpCisgICAgeworICAgICAgICBpZih0Q0FOLT5JRlsxXS5NQ09OICYgQ0FOX0lGX01DT05fTkVXREFUX01zaykgICAvKiBjaGVjayBuZXcgZGF0YSAqLworICAgICAgICB7CisgICAgICAgICAgICAvKiBERUJVR19QUklOVEYoIk5ldyBEYXRhIElOXG4iKTsgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYodENBTi0+U1RBVFVTICYgQ0FOX1NUQVRVU19SWE9LX01zaykKKyAgICAgICAgeworICAgICAgICAgICAgLyogREVCVUdfUFJJTlRGKCJSeCBPS1xuIik7ICovCisgICAgICAgIH0KKworICAgICAgICBpZih0Q0FOLT5TVEFUVVMgJiBDQU5fU1RBVFVTX0xFQ19Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERFQlVHX1BSSU5URigiRXJyb3JcbiIpOyAqLworICAgICAgICB9CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgR2V0IGN1cnJlbnQgYml0IHJhdGUKKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHJldHVybiBDdXJyZW50IEJpdC1SYXRlIChraWxvIGJpdCBwZXIgc2Vjb25kKQorICAqIEBkZXRhaWxzIFJldHVybiBjdXJyZW50IENBTiBiaXQgcmF0ZSBhY2NvcmRpbmcgdG8gdGhlIHVzZXIgYml0LXRpbWluZyBwYXJhbWV0ZXIgc2V0dGluZ3MKKyAgKi8KK3VpbnQzMl90IENBTl9HZXRDQU5CaXRSYXRlKENBTl9UICp0Q0FOKQoreworICAgIHVpbnQ4X3QgdThUc2VnMSwgdThUc2VnMjsKKyAgICB1aW50MzJfdCB1MzJCcHI7CisKKyAgICB1OFRzZWcxID0gKHVpbnQ4X3QpKCh0Q0FOLT5CVElNRSAmIENBTl9CVElNRV9UU0VHMV9Nc2spID4+IENBTl9CVElNRV9UU0VHMV9Qb3MpOworICAgIHU4VHNlZzIgPSAodWludDhfdCkoKHRDQU4tPkJUSU1FICYgQ0FOX0JUSU1FX1RTRUcyX01zaykgPj4gQ0FOX0JUSU1FX1RTRUcyX1Bvcyk7CisgICAgdTMyQnByID0gKHRDQU4tPkJUSU1FICYgQ0FOX0JUSU1FX0JSUF9Nc2spOworICAgIHUzMkJwciB8PSAodENBTi0+QlJQRSA8PCA2KTsKKworCisgICAgcmV0dXJuIChTeXN0ZW1Db3JlQ2xvY2sgLyAodTMyQnByICsgMVUpIC8gKCh1aW50MzJfdCl1OFRzZWcxICsgKHVpbnQzMl90KXU4VHNlZzIgKyAzVSkpOworfQorCisvKioKKyAgKiBAYnJpZWYgU3dpdGNoIHRoZSBDQU4gaW50byB0ZXN0IG1vZGUuCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdThUZXN0TWFzayBTcGVjaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGVzdCBtb2RlcworICAqICAgICAgICAgICAgICAgICAgICAgICBccmVmIENBTl9URVNUX0JBU0lDX01zayBFbmFibGUgYmFzaWMgbW9kZSBvZiB0ZXN0IG1vZGUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgXHJlZiBDQU5fVEVTVF9TSUxFTlRfTXNrIEVuYWJsZSBzaWxlbnQgbW9kZSBvZiB0ZXN0IG1vZGUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgXHJlZiBDQU5fVEVTVF9MQkFDS19Nc2sgRW5hYmxlIExvb3AgQmFjayBNb2RlIG9mIHRlc3QgbW9kZQorICAqICAgICAgICAgICAgICAgICAgICAgICBccmVmIENBTl9URVNUX1RYMF9Nc2sgLyBccmVmIENBTl9URVNUX1RYMV9Nc2sgQ29udHJvbCBDQU5fVFggcGluIGJpdCBmaWVsZAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFN3aXRjaCB0aGUgQ0FOIGludG8gdGVzdCBtb2RlLiBUaGVyZSBhcmUgZm91ciB0ZXN0IG1vZGUgKEJBU0lDL1NJTEVOVC9MT09QQkFDSy8KKyAgKiAgICAgICAgICBMT09QQkFDSyBjb21iaW5lZCBTSUxFTlQvQ09OVFJPTF9UWF9QSU4pY291bGQgYmUgc2VsZWN0ZWQuIEFmdGVyIHNldHRpbmcgdGVzdCBtb2RlLHVzZXIKKyAgKiAgICAgICAgICBtdXN0IGNhbGwgQ0FOX0xlYXZlSW5pdE1vZGUoKSB0byBsZXQgdGhlIHNldHRpbmcgdGFrZSBlZmZlY3QuCisgICovCit2b2lkIENBTl9FbnRlclRlc3RNb2RlKENBTl9UICp0Q0FOLCB1aW50OF90IHU4VGVzdE1hc2spCit7CisgICAgdENBTi0+Q09OIHw9IENBTl9DT05fVEVTVF9Nc2s7CisgICAgdENBTi0+VEVTVCA9IHU4VGVzdE1hc2s7Cit9CisKKworLyoqCisgICogQGJyaWVmIExlYXZlIHRoZSB0ZXN0IG1vZGUKKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHJldHVybiAgIE5vbmUKKyAgKiBAZGV0YWlscyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIExlYXZlIHRoZSB0ZXN0IG1vZGUgKHN3aXRjaCBpbnRvIG5vcm1hbCBtb2RlKS4KKyAgKi8KK3ZvaWQgQ0FOX0xlYXZlVGVzdE1vZGUoQ0FOX1QgKnRDQU4pCit7CisgICAgdENBTi0+Q09OIHw9IENBTl9DT05fVEVTVF9Nc2s7CisgICAgdENBTi0+VEVTVCAmPSB+KENBTl9URVNUX0xCQUNLX01zayB8IENBTl9URVNUX1NJTEVOVF9Nc2sgfCBDQU5fVEVTVF9CQVNJQ19Nc2spOworICAgIHRDQU4tPkNPTiAmPSAofkNBTl9DT05fVEVTVF9Nc2spOworfQorCisvKioKKyAgKiBAYnJpZWYgR2V0IHRoZSB3YWl0aW5nIHN0YXR1cyBvZiBhIHJlY2VpdmVkIG1lc3NhZ2UuCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdThNc2dPYmogU3BlY2lmaWVzIHRoZSBNZXNzYWdlIG9iamVjdCBudW1iZXIsIGZyb20gMCB0byAzMS4KKyAgKiBAcmV0dmFsIG5vbi16ZXJvIFRoZSBjb3JyZXNwb25kaW5nIG1lc3NhZ2Ugb2JqZWN0IGhhcyBhIG5ldyBkYXRhIGJpdCBpcyBzZXQuCisgICogQHJldHZhbCAwIE5vIG1lc3NhZ2Ugb2JqZWN0IGhhcyBuZXcgZGF0YS4KKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSB3YWl0aW5nIHN0YXR1cyBvZiBhIHJlY2VpdmVkIG1lc3NhZ2UuCisgICovCit1aW50MzJfdCBDQU5fSXNOZXdEYXRhUmVjZWl2ZWQoQ0FOX1QgKnRDQU4sIHVpbnQ4X3QgdThNc2dPYmopCit7CisgICAgdWludDMyX3QgcmV0OworCisgICAgaWYoKHVpbnQzMl90KXU4TXNnT2JqIDwgMTZVKQorICAgIHsKKyAgICAgICAgcmV0ID0gdENBTi0+TkRBVDEgJiAoMVVMIDw8IHU4TXNnT2JqKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0ID0gdENBTi0+TkRBVDIgJiAoMVVMIDw8ICh1OE1zZ09iaiAtIDE2VSkpOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKworLyoqCisgICogQGJyaWVmIFNlbmQgQ0FOIG1lc3NhZ2UgaW4gQkFTSUMgbW9kZSBvZiB0ZXN0IG1vZGUKKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSBwQ2FuTXNnIFBvaW50ZXIgdG8gdGhlIG1lc3NhZ2Ugc3RydWN0dXJlIGNvbnRhaW5pbmcgZGF0YSB0byB0cmFuc21pdC4KKyAgKiBAcmV0dXJuIFRSVUU6ICBUcmFuc21pc3Npb24gT0sKKyAgKiAgICAgICAgIEZBTFNFOiBDaGVjayBidXN5IGZsYWcgb2YgaW50ZXJmYWNlIDAgaXMgdGltZW91dAorICAqIEBkZXRhaWxzIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbmQgQ0FOIG1lc3NhZ2UgaW4gQkFTSUMgbW9kZSBvZiB0ZXN0IG1vZGUuIEJlZm9yZSBjYWxsIHRoZSBBUEksCisgICogICAgICAgICAgdGhlIHVzZXIgc2hvdWxkIGJlIGNhbGwgQ0FOX0VudGVyVGVzdE1vZGUoQ0FOX1RFU1RfQkFTSUMpIGFuZCBsZXQgQ0FOIGNvbnRyb2xsZXIgZW50ZXIKKyAgKiAgICAgICAgICBiYXNpYyBtb2RlIG9mIHRlc3QgbW9kZS4gUGxlYXNlIG5vdGljZSBJRjEgUmVnaXN0ZXJzIHVzZWQgYXMgVHggQnVmZmVyIGluIGJhc2ljIG1vZGUuCisgICovCitpbnQzMl90IENBTl9CYXNpY1NlbmRNc2coQ0FOX1QgKnRDQU4sIFNUUl9DQU5NU0dfVCogcENhbk1zZykKK3sKKyAgICB1aW50MzJfdCBpID0gMFVMOworICAgIHdoaWxlKHRDQU4tPklGWzBdLkNSRVEgJiBDQU5fSUZfQ1JFUV9CVVNZX01zaykge30KKworCisgICAgdENBTi0+U1RBVFVTICY9ICh+Q0FOX1NUQVRVU19UWE9LX01zayk7CisKKyAgICBpZihwQ2FuTXNnLT5JZFR5cGUgPT0gQ0FOX1NURF9JRCkKKyAgICB7CisgICAgICAgIC8qIHN0YW5kYXJkIElEKi8KKyAgICAgICAgdENBTi0+SUZbMF0uQVJCMSA9IDBVTDsKKyAgICAgICAgdENBTi0+SUZbMF0uQVJCMiA9ICgoKHBDYW5Nc2ctPklkKSAmIDB4N0ZGVUwpIDw8IDIpIDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogZXh0ZW5kZWQgSUQqLworICAgICAgICB0Q0FOLT5JRlswXS5BUkIxID0gKHBDYW5Nc2ctPklkKSAmIDB4RkZGRlVMOworICAgICAgICB0Q0FOLT5JRlswXS5BUkIyID0gKCgocENhbk1zZy0+SWQpICYgMHgxRkZGMDAwMFVMKSA+PiAxNikgIHwgQ0FOX0lGX0FSQjJfWFREX01zazsKKworICAgIH0KKworICAgIGlmKHBDYW5Nc2ctPkZyYW1lVHlwZSkKKyAgICB7CisgICAgICAgIHRDQU4tPklGWzBdLkFSQjIgfD0gQ0FOX0lGX0FSQjJfRElSX01zazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdENBTi0+SUZbMF0uQVJCMiAmPSAofkNBTl9JRl9BUkIyX0RJUl9Nc2spOworICAgIH0KKworICAgIHRDQU4tPklGWzBdLk1DT04gPSAodENBTi0+SUZbMF0uTUNPTiAmICh+Q0FOX0lGX01DT05fRExDX01zaykpIHwgcENhbk1zZy0+RExDOworICAgIHRDQU4tPklGWzBdLkRBVF9BMSA9ICgodWludDMyX3QpcENhbk1zZy0+RGF0YVsxXSA8PCA4KSB8IHBDYW5Nc2ctPkRhdGFbMF07CisgICAgdENBTi0+SUZbMF0uREFUX0EyID0gKCh1aW50MzJfdClwQ2FuTXNnLT5EYXRhWzNdIDw8IDgpIHwgcENhbk1zZy0+RGF0YVsyXTsKKyAgICB0Q0FOLT5JRlswXS5EQVRfQjEgPSAoKHVpbnQzMl90KXBDYW5Nc2ctPkRhdGFbNV0gPDwgOCkgfCBwQ2FuTXNnLT5EYXRhWzRdOworICAgIHRDQU4tPklGWzBdLkRBVF9CMiA9ICgodWludDMyX3QpcENhbk1zZy0+RGF0YVs3XSA8PCA4KSB8IHBDYW5Nc2ctPkRhdGFbNl07CisKKyAgICAvKiByZXF1ZXN0IHRyYW5zbWlzc2lvbiovCisgICAgdENBTi0+SUZbMF0uQ1JFUSAmPSAofkNBTl9JRl9DUkVRX0JVU1lfTXNrKTsKKyAgICBpZih0Q0FOLT5JRlswXS5DUkVRICYgQ0FOX0lGX0NSRVFfQlVTWV9Nc2spCisgICAgeworICAgICAgICAvKiBERUJVR19QUklOVEYoIkNhbm5vdCBjbGVhciBidXN5IGZvciBzZW5kaW5nIC4uLlxuIik7ICovCisgICAgICAgIHJldHVybiAoaW50MzJfdClGQUxTRTsKKyAgICB9CisKKyAgICB0Q0FOLT5JRlswXS5DUkVRIHw9IENBTl9JRl9DUkVRX0JVU1lfTXNrOyAvKiBzZW5kaW5nICovCisKKyAgICBmb3IoaSA9IDBVTDsgaSA8IDB4RkZGRkZVTDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYoKHRDQU4tPklGWzBdLkNSRVEgJiBDQU5fSUZfQ1JFUV9CVVNZX01zaykgPT0gMFVMKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKGkgPj0gMHhGRkZGRlVMKQorICAgIHsKKyAgICAgICAgLyogREVCVUdfUFJJTlRGKCJDYW5ub3Qgc2VuZCBvdXQuLi5cbiIpOyAqLworICAgICAgICByZXR1cm4gKGludDMyX3QpRkFMU0U7CisgICAgfQorCisKKyAgICByZXR1cm4gKGludDMyX3QpVFJVRTsKK30KKworLyoqCisgICogQGJyaWVmIEdldCBhIG1lc3NhZ2UgaW5mb3JtYXRpb24gaW4gQkFTSUMgbW9kZS4KKyAgKgorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIHBDYW5Nc2cgUG9pbnRlciB0byB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUgd2hlcmUgcmVjZWl2ZWQgZGF0YSBpcyBjb3BpZWQuCisgICoKKyAgKiBAcmV0dXJuIEZBTFNFIE5vIGFueSBtZXNzYWdlIHJlY2VpdmVkLgorICAqICAgICAgICAgVFJVRSBSZWNlaXZlIGEgbWVzc2FnZSBzdWNjZXNzLgorICAqCisgICovCitpbnQzMl90IENBTl9CYXNpY1JlY2VpdmVNc2coQ0FOX1QgKnRDQU4sIFNUUl9DQU5NU0dfVCogcENhbk1zZykKK3sKKworICAgIGlmKCh0Q0FOLT5JRlsxXS5NQ09OICYgQ0FOX0lGX01DT05fTkVXREFUX01zaykgPT0gMFVMKSAgIC8qIEluIGJhc2ljIG1vZGUsIHJlY2VpdmUgZGF0YSBhbHdheXMgc2F2ZSBpbiBJRjIgKi8KKyAgICB7CisgICAgICAgIHJldHVybiAoaW50MzJfdClGQUxTRTsKKyAgICB9CisKKyAgICB0Q0FOLT5TVEFUVVMgJj0gKH5DQU5fU1RBVFVTX1JYT0tfTXNrKTsKKworICAgIHRDQU4tPklGWzFdLkNNQVNLID0gQ0FOX0lGX0NNQVNLX0FSQl9Nc2sKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgQ0FOX0lGX0NNQVNLX0NPTlRST0xfTXNrCisgICAgICAgICAgICAgICAgICAgICAgICB8IENBTl9JRl9DTUFTS19EQVRBQV9Nc2sKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgQ0FOX0lGX0NNQVNLX0RBVEFCX01zazsKKworICAgIGlmKCh0Q0FOLT5JRlsxXS5BUkIyICYgQ0FOX0lGX0FSQjJfWFREX01zaykgPT0gMFVMKQorICAgIHsKKyAgICAgICAgLyogc3RhbmRhcmQgSUQqLworICAgICAgICBwQ2FuTXNnLT5JZFR5cGUgPSBDQU5fU1REX0lEOworICAgICAgICBwQ2FuTXNnLT5JZCA9ICh0Q0FOLT5JRlsxXS5BUkIyID4+IDIpICYgMHgwN0ZGVUw7CisKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogZXh0ZW5kZWQgSUQqLworICAgICAgICBwQ2FuTXNnLT5JZFR5cGUgPSBDQU5fRVhUX0lEOworICAgICAgICBwQ2FuTXNnLT5JZCAgPSAodENBTi0+SUZbMV0uQVJCMiAmIDB4MUZGRlVMKSA8PCAxNjsKKyAgICAgICAgcENhbk1zZy0+SWQgfD0gKHVpbnQzMl90KXRDQU4tPklGWzFdLkFSQjE7CisgICAgfQorCisgICAgLyoKKyAgICBwQ2FuTXNnLT5GcmFtZVR5cGUgPSAodWludDMyX3QpKCEodWludDMyX3QpKCh0Q0FOLT5JRlsxXS5BUkIyICYgKHVpbnQzMl90KUNBTl9JRl9BUkIyX0RJUl9Nc2spID4+ICh1aW50MzJfdClDQU5fSUZfQVJCMl9ESVJfUG9zKSk7CisgICAgKi8KKworICAgIHBDYW5Nc2ctPkZyYW1lVHlwZSA9ICh0Q0FOLT5JRlsxXS5BUkIyICYgQ0FOX0lGX0FSQjJfRElSX01zaykgPyAwVUwgOiAxVUw7CisKKyAgICBwQ2FuTXNnLT5ETEMgICAgID0gKHVpbnQ4X3QpKHRDQU4tPklGWzFdLk1DT04gJiBDQU5fSUZfTUNPTl9ETENfTXNrKTsKKyAgICBwQ2FuTXNnLT5EYXRhWzBdID0gKHVpbnQ4X3QpKHRDQU4tPklGWzFdLkRBVF9BMSAmIENBTl9JRl9EQVRfQTFfREFUQTBfTXNrKTsKKyAgICBwQ2FuTXNnLT5EYXRhWzFdID0gKHVpbnQ4X3QpKCh0Q0FOLT5JRlsxXS5EQVRfQTEgJiBDQU5fSUZfREFUX0ExX0RBVEExX01zaykgPj4gQ0FOX0lGX0RBVF9BMV9EQVRBMV9Qb3MpOworICAgIHBDYW5Nc2ctPkRhdGFbMl0gPSAodWludDhfdCkodENBTi0+SUZbMV0uREFUX0EyICYgQ0FOX0lGX0RBVF9BMl9EQVRBMl9Nc2spOworICAgIHBDYW5Nc2ctPkRhdGFbM10gPSAodWludDhfdCkoKHRDQU4tPklGWzFdLkRBVF9BMiAmIENBTl9JRl9EQVRfQTJfREFUQTNfTXNrKSA+PiBDQU5fSUZfREFUX0EyX0RBVEEzX1Bvcyk7CisgICAgcENhbk1zZy0+RGF0YVs0XSA9ICh1aW50OF90KSh0Q0FOLT5JRlsxXS5EQVRfQjEgJiBDQU5fSUZfREFUX0IxX0RBVEE0X01zayk7CisgICAgcENhbk1zZy0+RGF0YVs1XSA9ICh1aW50OF90KSgodENBTi0+SUZbMV0uREFUX0IxICYgQ0FOX0lGX0RBVF9CMV9EQVRBNV9Nc2spID4+IENBTl9JRl9EQVRfQjFfREFUQTVfUG9zKTsKKyAgICBwQ2FuTXNnLT5EYXRhWzZdID0gKHVpbnQ4X3QpKHRDQU4tPklGWzFdLkRBVF9CMiAmIENBTl9JRl9EQVRfQjJfREFUQTZfTXNrKTsKKyAgICBwQ2FuTXNnLT5EYXRhWzddID0gKHVpbnQ4X3QpKCh0Q0FOLT5JRlsxXS5EQVRfQjIgJiBDQU5fSUZfREFUX0IyX0RBVEE3X01zaykgPj4gQ0FOX0lGX0RBVF9CMl9EQVRBN19Qb3MpOworCisgICAgcmV0dXJuIChpbnQzMl90KVRSVUU7Cit9CisKKy8qKgorICAqIEBicmllZiBTZXQgUnggbWVzc2FnZSBvYmplY3QsIGluY2x1ZGUgSUQgbWFzay4KKyAgKiBAcGFyYW1baW5dIHU4TXNnT2JqIFNwZWNpZmllcyB0aGUgTWVzc2FnZSBvYmplY3QgbnVtYmVyLCBmcm9tIDAgdG8gMzEuCisgICogQHBhcmFtW2luXSB1OGlkVHlwZSBTcGVjaWZpZXMgdGhlIGlkZW50aWZpZXIgdHlwZSBvZiB0aGUgZnJhbWVzIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZAorICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgICAgICAgICAgIFxyZWYgQ0FOX1NURF9JRCAoc3RhbmRhcmQgSUQsIDExLWJpdCkKKyAgKiAgICAgICAgICAgICAgICAgICAgIFxyZWYgQ0FOX0VYVF9JRCAoZXh0ZW5kZWQgSUQsIDI5LWJpdCkKKyAgKiBAcGFyYW1baW5dIHUzMmlkIFNwZWNpZmllcyB0aGUgaWRlbnRpZmllciB1c2VkIGZvciBhY2NlcHRhbmNlIGZpbHRlcmluZy4KKyAgKiBAcGFyYW1baW5dIHU4c2luZ2xlT3JGaWZvTGFzdCBTcGVjaWZpZXMgdGhlIGVuZC1vZi1idWZmZXIgaW5kaWNhdG9yLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRTogZm9yIGEgc2luZ2xlIHJlY2VpdmUgb2JqZWN0IG9yIGEgRklGTyByZWNlaXZlIG9iamVjdCB0aGF0IGlzIHRoZSBsYXN0IG9uZSBvZiB0aGUgRklGTy4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRTogZm9yIGEgRklGTyByZWNlaXZlIG9iamVjdCB0aGF0IGlzIG5vdCB0aGUgbGFzdCBvbmUuCisgICogQHJldHZhbCBUUlVFIFNVQ0NFU1MKKyAgKiBAcmV0dmFsIEZBTFNFIE5vIHVzZWZ1bCBpbnRlcmZhY2UKKyAgKiBAZGV0YWlscyBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgYSByZWNlaXZlIG1lc3NhZ2Ugb2JqZWN0LgorICAqLworaW50MzJfdCBDQU5fU2V0UnhNc2dPYmpBbmRNc2soQ0FOX1QgKnRDQU4sIHVpbnQ4X3QgdThNc2dPYmosIHVpbnQ4X3QgdThpZFR5cGUsIHVpbnQzMl90IHUzMmlkLCB1aW50MzJfdCB1MzJpZG1hc2ssIHVpbnQ4X3QgdThzaW5nbGVPckZpZm9MYXN0KQoreworICAgIHVpbnQ4X3QgdThNc2dJZk51bTsKKworICAgIC8qIEdldCBhbmQgbG9jayBhIGZyZWUgaW50ZXJmYWNlICovCisgICAgaWYoKHU4TXNnSWZOdW0gPSAodWludDhfdClMb2NrSUZfVEwodENBTikpID09IDJVKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChpbnQzMl90KUZBTFNFOworICAgIH0KKworICAgIC8qIENvbW1hbmQgU2V0dGluZyAqLworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkNNQVNLID0gQ0FOX0lGX0NNQVNLX1dSUkRfTXNrIHwgQ0FOX0lGX0NNQVNLX01BU0tfTXNrIHwgQ0FOX0lGX0NNQVNLX0FSQl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOX0lGX0NNQVNLX0NPTlRST0xfTXNrIHwgQ0FOX0lGX0NNQVNLX0RBVEFBX01zayB8IENBTl9JRl9DTUFTS19EQVRBQl9Nc2s7CisKKyAgICBpZih1OGlkVHlwZSA9PSBDQU5fU1REX0lEKSAgICAvKiBBY2NvcmRpbmcgU1REL0VYVCBJRCBmb3JtYXQsQ29uZmlndXJlIE1hc2sgYW5kIEFyYml0cmF0aW9uIHJlZ2lzdGVyICovCisgICAgeworICAgICAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5BUkIxID0gMFU7CisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjIgPSBDQU5fSUZfQVJCMl9NU0dWQUxfTXNrIHwgKHUzMmlkICYgMHg3RkZVTCkgPDwgMjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQVJCMSA9IHUzMmlkICYgMHhGRkZGVUw7CisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjIgPSBDQU5fSUZfQVJCMl9NU0dWQUxfTXNrIHwgQ0FOX0lGX0FSQjJfWFREX01zayB8ICh1MzJpZCAmIDB4MUZGRjAwMDBVTCkgPj4gMTY7CisgICAgfQorCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uTUFTSzEgPSAodTMyaWRtYXNrICYgMHhGRkZGVUwpOworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLk1BU0syID0gKHUzMmlkbWFzayA+PiAxNikgJiAweEZGRkZVTDsKKworCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uTUNPTiA9IENBTl9JRl9NQ09OX1VNQVNLX01zayB8IENBTl9JRl9NQ09OX1JYSUVfTXNrOworICAgIGlmKHU4c2luZ2xlT3JGaWZvTGFzdCkKKyAgICB7CisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLk1DT04gfD0gQ0FOX0lGX01DT05fRU9CX01zazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uTUNPTiAmPSAofkNBTl9JRl9NQ09OX0VPQl9Nc2spOworICAgIH0KKworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9BMSAgPSAwVTsKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQTIgID0gMFU7CisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uREFUX0IxICA9IDBVOworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9CMiAgPSAwVTsKKworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkNSRVEgPSAxVUwgKyB1OE1zZ09iajsKKyAgICBSZWxlYXNlSUYodENBTiwgKHVpbnQzMl90KXU4TXNnSWZOdW0pOworCisgICAgcmV0dXJuIChpbnQzMl90KVRSVUU7Cit9CisKKy8qKgorICAqIEBicmllZiBTZXQgUnggbWVzc2FnZSBvYmplY3QKKyAgKiBAcGFyYW1baW5dIHU4TXNnT2JqIFNwZWNpZmllcyB0aGUgTWVzc2FnZSBvYmplY3QgbnVtYmVyLCBmcm9tIDAgdG8gMzEuCisgICogQHBhcmFtW2luXSB1OGlkVHlwZSBTcGVjaWZpZXMgdGhlIGlkZW50aWZpZXIgdHlwZSBvZiB0aGUgZnJhbWVzIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZAorICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgICAgICAgICAgIFxyZWYgQ0FOX1NURF9JRCAoc3RhbmRhcmQgSUQsIDExLWJpdCkKKyAgKiAgICAgICAgICAgICAgICAgICAgIFxyZWYgQ0FOX0VYVF9JRCAoZXh0ZW5kZWQgSUQsIDI5LWJpdCkKKyAgKiBAcGFyYW1baW5dIHUzMmlkIFNwZWNpZmllcyB0aGUgaWRlbnRpZmllciB1c2VkIGZvciBhY2NlcHRhbmNlIGZpbHRlcmluZy4KKyAgKiBAcGFyYW1baW5dIHU4c2luZ2xlT3JGaWZvTGFzdCBTcGVjaWZpZXMgdGhlIGVuZC1vZi1idWZmZXIgaW5kaWNhdG9yLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRTogZm9yIGEgc2luZ2xlIHJlY2VpdmUgb2JqZWN0IG9yIGEgRklGTyByZWNlaXZlIG9iamVjdCB0aGF0IGlzIHRoZSBsYXN0IG9uZSBvZiB0aGUgRklGTy4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRTogZm9yIGEgRklGTyByZWNlaXZlIG9iamVjdCB0aGF0IGlzIG5vdCB0aGUgbGFzdCBvbmUuCisgICogQHJldHZhbCBUUlVFIFNVQ0NFU1MKKyAgKiBAcmV0dmFsIEZBTFNFIE5vIHVzZWZ1bCBpbnRlcmZhY2UKKyAgKiBAZGV0YWlscyBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgYSByZWNlaXZlIG1lc3NhZ2Ugb2JqZWN0LgorICAqLworaW50MzJfdCBDQU5fU2V0UnhNc2dPYmooQ0FOX1QgKnRDQU4sIHVpbnQ4X3QgdThNc2dPYmosIHVpbnQ4X3QgdThpZFR5cGUsIHVpbnQzMl90IHUzMmlkLCB1aW50OF90IHU4c2luZ2xlT3JGaWZvTGFzdCkKK3sKKyAgICB1aW50OF90IHU4TXNnSWZOdW07CisKKyAgICAvKiBHZXQgYW5kIGxvY2sgYSBmcmVlIGludGVyZmFjZSAqLworICAgIGlmKCh1OE1zZ0lmTnVtID0gKHVpbnQ4X3QpTG9ja0lGX1RMKHRDQU4pKSA9PSAyVSkKKyAgICB7CisgICAgICAgIHJldHVybiAoaW50MzJfdClGQUxTRTsKKyAgICB9CisKKyAgICAvKiBDb21tYW5kIFNldHRpbmcgKi8KKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5DTUFTSyA9IENBTl9JRl9DTUFTS19XUlJEX01zayB8IENBTl9JRl9DTUFTS19NQVNLX01zayB8IENBTl9JRl9DTUFTS19BUkJfTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTl9JRl9DTUFTS19DT05UUk9MX01zayB8IENBTl9JRl9DTUFTS19EQVRBQV9Nc2sgfCBDQU5fSUZfQ01BU0tfREFUQUJfTXNrOworCisgICAgaWYodThpZFR5cGUgPT0gQ0FOX1NURF9JRCkgICAgLyogQWNjb3JkaW5nIFNURC9FWFQgSUQgZm9ybWF0LENvbmZpZ3VyZSBNYXNrIGFuZCBBcmJpdHJhdGlvbiByZWdpc3RlciAqLworICAgIHsKKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQVJCMSA9IDBVOworICAgICAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5BUkIyID0gQ0FOX0lGX0FSQjJfTVNHVkFMX01zayB8ICh1MzJpZCAmIDB4N0ZGVUwpIDw8IDI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjEgPSB1MzJpZCAmIDB4RkZGRlVMOworICAgICAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5BUkIyID0gQ0FOX0lGX0FSQjJfTVNHVkFMX01zayB8IENBTl9JRl9BUkIyX1hURF9Nc2sgfCAodTMyaWQgJiAweDFGRkYwMDAwVUwpID4+IDE2OworICAgIH0KKworCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uTUNPTiA9IENBTl9JRl9NQ09OX1VNQVNLX01zayB8IENBTl9JRl9NQ09OX1JYSUVfTXNrOworICAgIGlmKHU4c2luZ2xlT3JGaWZvTGFzdCkKKyAgICB7CisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLk1DT04gfD0gQ0FOX0lGX01DT05fRU9CX01zazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uTUNPTiAmPSAofkNBTl9JRl9NQ09OX0VPQl9Nc2spOworICAgIH0KKworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9BMSAgPSAwVTsKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQTIgID0gMFU7CisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uREFUX0IxICA9IDBVOworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9CMiAgPSAwVTsKKworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkNSRVEgPSAxVUwgKyB1OE1zZ09iajsKKyAgICBSZWxlYXNlSUYodENBTiwgKHVpbnQzMl90KXU4TXNnSWZOdW0pOworCisgICAgcmV0dXJuIChpbnQzMl90KVRSVUU7Cit9CisKKy8qKgorICAqIEBicmllZiBHZXRzIHRoZSBtZXNzYWdlCisgICogQHBhcmFtW2luXSB1OE1zZ09iaiBTcGVjaWZpZXMgdGhlIE1lc3NhZ2Ugb2JqZWN0IG51bWJlciwgZnJvbSAwIHRvIDMxLgorICAqIEBwYXJhbVtpbl0gdThSZWxlYXNlIFNwZWNpZmllcyB0aGUgbWVzc2FnZSByZWxlYXNlIGluZGljYXRvci4KKyAgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgICAgICAgICAgIFRSVUU6IHRoZSBtZXNzYWdlIG9iamVjdCBpcyByZWxlYXNlZCB3aGVuIGdldHRpbmcgdGhlIGRhdGEuCisgICogICAgICAgICAgICAgICAgICAgICAgRkFMU0U6dGhlIG1lc3NhZ2Ugb2JqZWN0IGlzIG5vdCByZWxlYXNlZC4KKyAgKiBAcGFyYW1baW5dIHBDYW5Nc2cgUG9pbnRlciB0byB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUgd2hlcmUgcmVjZWl2ZWQgZGF0YSBpcyBjb3BpZWQuCisgICogQHJldHZhbCBUUlVFIFN1Y2Nlc3MKKyAgKiBAcmV0dmFsIEZBTFNFIE5vIGFueSBtZXNzYWdlIHJlY2VpdmVkCisgICogQGRldGFpbHMgR2V0cyB0aGUgbWVzc2FnZSwgaWYgcmVjZWl2ZWQuCisgICovCitpbnQzMl90IENBTl9SZWFkTXNnT2JqKENBTl9UICp0Q0FOLCB1aW50OF90IHU4TXNnT2JqLCB1aW50OF90IHU4UmVsZWFzZSwgU1RSX0NBTk1TR19UKiBwQ2FuTXNnKQoreworICAgIHVpbnQ4X3QgdThNc2dJZk51bTsKKyAgICB1aW50MzJfdCB1MzJUbXA7CisKKyAgICBpZighQ0FOX0lzTmV3RGF0YVJlY2VpdmVkKHRDQU4sIHU4TXNnT2JqKSkKKyAgICB7CisgICAgICAgIHJldHVybiAoaW50MzJfdClGQUxTRTsKKyAgICB9CisKKyAgICAvKiBHZXQgYW5kIGxvY2sgYSBmcmVlIGludGVyZmFjZSAqLworICAgIGlmKCh1OE1zZ0lmTnVtID0gKHVpbnQ4X3QpTG9ja0lGX1RMKHRDQU4pKSA9PSAyVSkKKyAgICB7CisgICAgICAgIHJldHVybiAoaW50MzJfdClGQUxTRTsKKyAgICB9CisKKyAgICB0Q0FOLT5TVEFUVVMgJj0gKH5DQU5fU1RBVFVTX1JYT0tfTXNrKTsKKworICAgIC8qIHJlYWQgdGhlIG1lc3NhZ2UgY29udGVudHMqLworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkNNQVNLID0gQ0FOX0lGX0NNQVNLX01BU0tfTXNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENBTl9JRl9DTUFTS19BUkJfTXNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENBTl9JRl9DTUFTS19DT05UUk9MX01zaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDQU5fSUZfQ01BU0tfQ0xSSU5UUE5EX01zaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAodThSZWxlYXNlID8gQ0FOX0lGX0NNQVNLX1RYUlFTVE5FV0RBVF9Nc2sgOiAwVUwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENBTl9JRl9DTUFTS19EQVRBQV9Nc2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ0FOX0lGX0NNQVNLX0RBVEFCX01zazsKKworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkNSRVEgPSAxVUwgKyB1OE1zZ09iajsKKworICAgIHdoaWxlKHRDQU4tPklGW3U4TXNnSWZOdW1dLkNSRVEgJiBDQU5fSUZfQ1JFUV9CVVNZX01zaykKKyAgICB7CisgICAgICAgIC8qV2FpdCovCisgICAgfQorCisgICAgaWYoKHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjIgJiBDQU5fSUZfQVJCMl9YVERfTXNrKSA9PSAwVSkKKyAgICB7CisgICAgICAgIC8qIHN0YW5kYXJkIElEKi8KKyAgICAgICAgcENhbk1zZy0+SWRUeXBlID0gQ0FOX1NURF9JRDsKKyAgICAgICAgcENhbk1zZy0+SWQgICAgID0gKHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjIgJiBDQU5fSUZfQVJCMl9JRF9Nc2spID4+IDI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIGV4dGVuZGVkIElEKi8KKyAgICAgICAgcENhbk1zZy0+SWRUeXBlID0gQ0FOX0VYVF9JRDsKKworICAgICAgICB1MzJUbXAgPSAoKCh0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5BUkIyKSAmIDB4MUZGRlVMKSA8PCAxNik7CisgICAgICAgIHUzMlRtcCB8PSB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5BUkIxOworCisgICAgICAgIHBDYW5Nc2ctPklkICA9IHUzMlRtcDsKKyAgICB9CisKKyAgICBwQ2FuTXNnLT5ETEMgICAgID0gKHVpbnQ4X3QpKHRDQU4tPklGW3U4TXNnSWZOdW1dLk1DT04gJiBDQU5fSUZfTUNPTl9ETENfTXNrKTsKKyAgICBwQ2FuTXNnLT5EYXRhWzBdID0gKHVpbnQ4X3QpKHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9BMSAmIENBTl9JRl9EQVRfQTFfREFUQTBfTXNrKTsKKyAgICBwQ2FuTXNnLT5EYXRhWzFdID0gKHVpbnQ4X3QpKCh0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQTEgJiBDQU5fSUZfREFUX0ExX0RBVEExX01zaykgPj4gQ0FOX0lGX0RBVF9BMV9EQVRBMV9Qb3MpOworICAgIHBDYW5Nc2ctPkRhdGFbMl0gPSAodWludDhfdCkodENBTi0+SUZbdThNc2dJZk51bV0uREFUX0EyICYgQ0FOX0lGX0RBVF9BMl9EQVRBMl9Nc2spOworICAgIHBDYW5Nc2ctPkRhdGFbM10gPSAodWludDhfdCkoKHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9BMiAmIENBTl9JRl9EQVRfQTJfREFUQTNfTXNrKSA+PiBDQU5fSUZfREFUX0EyX0RBVEEzX1Bvcyk7CisgICAgcENhbk1zZy0+RGF0YVs0XSA9ICh1aW50OF90KSh0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQjEgJiBDQU5fSUZfREFUX0IxX0RBVEE0X01zayk7CisgICAgcENhbk1zZy0+RGF0YVs1XSA9ICh1aW50OF90KSgodENBTi0+SUZbdThNc2dJZk51bV0uREFUX0IxICYgQ0FOX0lGX0RBVF9CMV9EQVRBNV9Nc2spID4+IENBTl9JRl9EQVRfQjFfREFUQTVfUG9zKTsKKyAgICBwQ2FuTXNnLT5EYXRhWzZdID0gKHVpbnQ4X3QpKHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9CMiAmIENBTl9JRl9EQVRfQjJfREFUQTZfTXNrKTsKKyAgICBwQ2FuTXNnLT5EYXRhWzddID0gKHVpbnQ4X3QpKCh0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQjIgJiBDQU5fSUZfREFUX0IyX0RBVEE3X01zaykgPj4gQ0FOX0lGX0RBVF9CMl9EQVRBN19Qb3MpOworCisgICAgUmVsZWFzZUlGKHRDQU4sICh1aW50MzJfdCl1OE1zZ0lmTnVtKTsKKyAgICByZXR1cm4gKGludDMyX3QpVFJVRTsKK30KKworc3RhdGljIGludCBjYW5fdXBkYXRlX3NwdChpbnQgc2FtcGxfcHQsIGludCB0c2VnLCBpbnQgKnRzZWcxLCBpbnQgKnRzZWcyKQoreworICAgICp0c2VnMiA9IHRzZWcgKyAxIC0gKHNhbXBsX3B0ICogKHRzZWcgKyAxKSkgLyAxMDAwOworICAgIGlmKCp0c2VnMiA8IFRTRUcyX01JTikKKyAgICB7CisgICAgICAgICp0c2VnMiA9IFRTRUcyX01JTjsKKyAgICB9CisgICAgaWYoKnRzZWcyID4gVFNFRzJfTUFYKQorICAgIHsKKyAgICAgICAgKnRzZWcyID0gVFNFRzJfTUFYOworICAgIH0KKworICAgICp0c2VnMSA9IHRzZWcgLSAqdHNlZzI7CisKKyAgICBpZigqdHNlZzEgPiBUU0VHMV9NQVgpCisgICAgeworICAgICAgICAqdHNlZzEgPSBUU0VHMV9NQVg7CisgICAgICAgICp0c2VnMiA9IHRzZWcgLSAqdHNlZzE7CisgICAgfQorICAgIHJldHVybiAxMDAwICogKHRzZWcgKyAxIC0gKnRzZWcyKSAvICh0c2VnICsgMSk7Cit9CisKKy8qKiBAZW5kY29uZCBISURERU5fU1lNQk9MUyAqLworCisvKioKKyAgKiBAYnJpZWYgU2V0IGJ1cyBiYXVkLXJhdGUuCisgICoKKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1MzJCYXVkUmF0ZSBUaGUgdGFyZ2V0IENBTiBiYXVkLXJhdGUuIFRoZSByYW5nZSBvZiB1MzJCYXVkUmF0ZSBpcyAxfjEwMDBLSHouCisgICoKKyAgKiBAcmV0dXJuIHUzMkN1cnJlbnRCaXRSYXRlICBSZWFsIGJhdWQtcmF0ZSB2YWx1ZS4KKyAgKgorICAqIEBkZXRhaWxzIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBidXMgdGltaW5nIHBhcmFtZXRlciBhY2NvcmRpbmcgY3VycmVudCBjbG9jayBhbmQgdGFyZ2V0IGJhdWQtcmF0ZS4KKyAgKi8KK3VpbnQzMl90IENBTl9TZXRCYXVkUmF0ZShDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyQmF1ZFJhdGUpCit7CisgICAgbG9uZyByYXRlOworICAgIGxvbmcgYmVzdF9lcnJvciA9IDEwMDAwMDAwMDAsIGVycm9yID0gMDsKKyAgICBpbnQgYmVzdF90c2VnID0gMCwgYmVzdF9icnAgPSAwLCBicnAgPSAwOworICAgIGludCB0c2VnYWxsLCB0c2VnID0gMCwgdHNlZzEgPSAwLCB0c2VnMiA9IDA7CisgICAgaW50IHNwdF9lcnJvciA9IDEwMDAsIHNwdCA9IDAsIHNhbXBsX3B0OworICAgIGludDY0X3QgY2xvY2tfZnJlcSA9IDA7CisgICAgdWludDMyX3Qgc2p3ID0gMVVMOworCisgICAgQ0FOX0VudGVySW5pdE1vZGUodENBTiwgMFUpOworCisgICAgY2xvY2tfZnJlcSA9IChpbnQ2NF90KUNMS19HZXRQQ0xLMEZyZXEoKTsKKworICAgIGlmKHUzMkJhdWRSYXRlID49IDEwMDAwMDBVTCkKKyAgICB7CisgICAgICAgIHUzMkJhdWRSYXRlID0gMTAwMDAwMFVMOworICAgIH0KKworICAgIC8qIFVzZSBDSUEgcmVjb21tZW5kZWQgc2FtcGxlIHBvaW50cyAqLworICAgIGlmKHUzMkJhdWRSYXRlID4gODAwMDAwVUwpCisgICAgeworICAgICAgICBzYW1wbF9wdCA9IDc1MDsKKyAgICB9CisgICAgZWxzZSBpZih1MzJCYXVkUmF0ZSA+IDUwMDAwMFVMKQorICAgIHsKKyAgICAgICAgc2FtcGxfcHQgPSA4MDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNhbXBsX3B0ID0gODc1OworICAgIH0KKworICAgIC8qIHRzZWcgZXZlbiA9IHJvdW5kIGRvd24sIG9kZCA9IHJvdW5kIHVwICovCisgICAgZm9yKHRzZWcgPSAoVFNFRzFfTUFYICsgVFNFRzJfTUFYKSAqIDIgKyAxOyB0c2VnID49IChUU0VHMV9NSU4gKyBUU0VHMl9NSU4pICogMjsgdHNlZy0tKQorICAgIHsKKyAgICAgICAgdHNlZ2FsbCA9IDEgKyB0c2VnIC8gMjsKKyAgICAgICAgLyogQ29tcHV0ZSBhbGwgcG9zc2libGUgdHNlZyBjaG9pY2VzICh0c2VnPXRzZWcxK3RzZWcyKSAqLworCisgICAgICAgIC8qIGJycCA9IChpbnQzMl90KShjbG9ja19mcmVxIC8gKHRzZWdhbGwgKiB1MzJCYXVkUmF0ZSkpICsgKHRzZWcgJSAyKTsgKi8KKyAgICAgICAgYnJwID0gKGludDMyX3QpKGNsb2NrX2ZyZXEgLyAoKGludDY0X3QpdHNlZ2FsbCAqIChpbnQzMl90KXUzMkJhdWRSYXRlKSkgKyAodHNlZyAlIDIpOworCisKKyAgICAgICAgLyogY2hvc2UgYnJwIHN0ZXAgd2hpY2ggaXMgcG9zc2libGUgaW4gc3lzdGVtICovCisgICAgICAgIGJycCA9IChicnAgLyBCUlBfSU5DKSAqIEJSUF9JTkM7CisKKyAgICAgICAgaWYoKGJycCA+PSBCUlBfTUlOKSAmJiAoYnJwIDw9IEJSUF9NQVgpKQorICAgICAgICB7CisgICAgICAgICAgICByYXRlID0gKGludDMyX3QpKGNsb2NrX2ZyZXEgLyAoKGludDY0X3QpYnJwICogdHNlZ2FsbCkpOworCisgICAgICAgICAgICBlcnJvciA9IChpbnQzMl90KXUzMkJhdWRSYXRlIC0gcmF0ZTsKKworICAgICAgICAgICAgLyogdHNlZyBicnAgYml0ZXJyb3IgKi8KKyAgICAgICAgICAgIGlmKGVycm9yIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnJvciA9IC1lcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoZXJyb3IgPD0gYmVzdF9lcnJvcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiZXN0X2Vycm9yID0gZXJyb3I7CisgICAgICAgICAgICAgICAgaWYoZXJyb3IgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNwdCA9IGNhbl91cGRhdGVfc3B0KHNhbXBsX3B0LCB0c2VnIC8gMiwgJnRzZWcxLCAmdHNlZzIpOworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHNhbXBsX3B0IC0gc3B0OworICAgICAgICAgICAgICAgICAgICBpZihlcnJvciA8IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gLWVycm9yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKGVycm9yIDw9IHNwdF9lcnJvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3B0X2Vycm9yID0gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICBiZXN0X3RzZWcgPSB0c2VnIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfYnJwID0gYnJwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXJyb3IgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBiZXN0X3RzZWcgPSB0c2VnIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgYmVzdF9icnAgPSBicnA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3B0ID0gY2FuX3VwZGF0ZV9zcHQoc2FtcGxfcHQsIGJlc3RfdHNlZywgJnRzZWcxLCAmdHNlZzIpOworCisgICAgLyogY2hlY2sgZm9yIHNqdyB1c2VyIHNldHRpbmdzICovCisgICAgLyogYnQtPnNqdyBpcyBhdCBsZWFzdCAxIC0+IHNhbml0aXplIHVwcGVyIGJvdW5kIHRvIHNqd19tYXggKi8KKyAgICBpZihzancgPiBTSldfTUFYKQorICAgIHsKKyAgICAgICAgc2p3ID0gU0pXX01BWDsKKyAgICB9CisgICAgLyogYnQtPnNqdyBtdXN0IG5vdCBiZSBoaWdoZXIgdGhhbiB0c2VnMiAqLworICAgIGlmKHRzZWcyIDwgKGludDMyX3Qpc2p3KQorICAgIHsKKyAgICAgICAgc2p3ID0gKHVpbnQzMl90KXRzZWcyOworICAgIH0KKworICAgIC8qIHJlYWwgYml0LXJhdGUgKi8KKyAgICB1MzJCYXVkUmF0ZSA9ICh1aW50MzJfdCkoaW50MzJfdCkoY2xvY2tfZnJlcSAvIChpbnQzMl90KShiZXN0X2JycCAqICh0c2VnMSArIHRzZWcyICsgMSkpKTsKKworICAgIHRDQU4tPkJUSU1FID0gKCgodWludDMyX3QpdHNlZzIgLSAxVUwpIDw8IENBTl9CVElNRV9UU0VHMl9Qb3MpIHwgKCgodWludDMyX3QpdHNlZzEgLSAxVUwpIDw8IENBTl9CVElNRV9UU0VHMV9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KWJlc3RfYnJwIC0gMVVMKSAmIENBTl9CVElNRV9CUlBfTXNrKSB8IChzancgPDwgQ0FOX0JUSU1FX1NKV19Qb3MpOworCisKKyAgICB0Q0FOLT5CUlBFICA9ICgoKHVpbnQzMl90KWJlc3RfYnJwIC0gMVVMKSA+PiA2KSAmIDB4MEZVTDsKKworICAgIC8qIERFQlVHX1BSSU5URigiXG4gYml0cmF0ZSA9ICVkIFxuIiwgQ0FOX0dldENBTkJpdFJhdGUodENBTikpOyAqLworCisgICAgQ0FOX0xlYXZlSW5pdE1vZGUodENBTik7CisKKyAgICByZXR1cm4gdTMyQmF1ZFJhdGU7Cit9CisKKy8qKgorICAqIEBicmllZiBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGFsbCBDQU4gaW50ZXJydXB0LgorICAqCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqCisgICogQHJldHVybiBOb25lCisgICoKKyAgKiBAZGV0YWlscyBObyBTdGF0dXMgQ2hhbmdlIEludGVycnVwdCBhbmQgRXJyb3IgU3RhdHVzIEludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgKi8KKworCit2b2lkIENBTl9DbG9zZShDQU5fVCAqdENBTikKK3sKKyAgICBDQU5fRGlzYWJsZUludCh0Q0FOLCAoQ0FOX0NPTl9JRV9Nc2sgfCBDQU5fQ09OX1NJRV9Nc2sgfCBDQU5fQ09OX0VJRV9Nc2spKTsKK30KKworCisKKy8qKgorICAqIEBicmllZiBTZXQgQ0FOIG9wZXJhdGlvbiBtb2RlIGFuZCB0YXJnZXQgYmF1ZC1yYXRlLgorICAqCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdTMyQmF1ZFJhdGUgVGhlIHRhcmdldCBDQU4gYmF1ZC1yYXRlLiBUaGUgcmFuZ2Ugb2YgdTMyQmF1ZFJhdGUgaXMgMX4xMDAwS0h6LgorICAqIEBwYXJhbVtpbl0gdTMyTW9kZSBUaGUgQ0FOIG9wZXJhdGlvbiBtb2RlLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0FOX05PUk1BTF9NT0RFIE5vcm1hbCBvcGVyYXRpb24uCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDQU5fQkFTSUNfTU9ERSBCYXNpYyBtb2RlLgorICAqIEByZXR1cm4gdTMyQ3VycmVudEJpdFJhdGUgIFJlYWwgYmF1ZC1yYXRlIHZhbHVlLgorICAqCisgICogQGRldGFpbHMgU2V0IGJ1cyB0aW1pbmcgcGFyYW1ldGVyIGFjY29yZGluZyBjdXJyZW50IGNsb2NrIGFuZCB0YXJnZXQgYmF1ZC1yYXRlLgorICAqICAgICAgICAgIEluIEJhc2ljIG1vZGUsIElGMSBSZWdpc3RlcnMgdXNlZCBhcyBUeCBCdWZmZXIsIElGMiBSZWdpc3RlcnMgdXNlZCBhcyBSeCBCdWZmZXIuCisgICovCit1aW50MzJfdCBDQU5fT3BlbihDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyQmF1ZFJhdGUsIHVpbnQzMl90IHUzMk1vZGUpCit7CisgICAgdWludDMyX3QgdTMyQ3VycmVudEJpdFJhdGU7CisKKyAgICB1MzJDdXJyZW50Qml0UmF0ZSA9IENBTl9TZXRCYXVkUmF0ZSh0Q0FOLCB1MzJCYXVkUmF0ZSk7CisKKyAgICBpZih1MzJNb2RlID09IENBTl9CQVNJQ19NT0RFKQorICAgIHsKKyAgICAgICAgQ0FOX0VudGVyVGVzdE1vZGUodENBTiwgKHVpbnQ4X3QpQ0FOX1RFU1RfQkFTSUNfTXNrKTsKKyAgICB9CisKKyAgICByZXR1cm4gdTMyQ3VycmVudEJpdFJhdGU7Cit9CisKKy8qKgorICAqIEBicmllZiBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgYSB0cmFuc21pdCBvYmplY3QuCisgICoKKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1MzJNc2dOdW0gU3BlY2lmaWVzIHRoZSBNZXNzYWdlIG9iamVjdCBudW1iZXIsIGZyb20gMCB0byAzMS4KKyAgKiBAcGFyYW1baW5dIHBDYW5Nc2cgUG9pbnRlciB0byB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUgd2hlcmUgcmVjZWl2ZWQgZGF0YSBpcyBjb3BpZWQuCisgICoKKyAgKiBAcmV0dmFsIEZBTFNFIE5vIHVzZWZ1bCBpbnRlcmZhY2UuCisgICogQHJldHZhbCBUUlVFIENvbmZpZyBtZXNzYWdlIG9iamVjdCBzdWNjZXNzLgorICAqCisgICogQGRldGFpbHMgVGhlIHR3byBzZXRzIG9mIGludGVyZmFjZSByZWdpc3RlcnMgKElGMSBhbmQgSUYyKSBjb250cm9sIHRoZSBzb2Z0d2FyZSBhY2Nlc3MgdG8gdGhlIE1lc3NhZ2UgUkFNLgorICAqICAgICAgICAgIFRoZXkgYnVmZmVyIHRoZSBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIHRvIGFuZCBmcm9tIHRoZSBSQU0sIGF2b2lkaW5nIGNvbmZsaWN0cyBiZXR3ZWVuIHNvZnR3YXJlIGFjY2Vzc2VzIGFuZCBtZXNzYWdlIHJlY2VwdGlvbi90cmFuc21pc3Npb24uCisgICovCitpbnQzMl90IENBTl9TZXRUeE1zZyhDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyTXNnTnVtLCBTVFJfQ0FOTVNHX1QqIHBDYW5Nc2cpCit7CisgICAgdWludDhfdCB1OE1zZ0lmTnVtOworCisgICAgaWYoKHU4TXNnSWZOdW0gPSAodWludDhfdClMb2NrSUZfVEwodENBTikpID09IDJVKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChpbnQzMl90KUZBTFNFOworICAgIH0KKworICAgIC8qIHVwZGF0ZSB0aGUgY29udGVudHMgbmVlZGVkIGZvciB0cmFuc21pc3Npb24qLworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkNNQVNLID0gQ0FOX0lGX0NNQVNLX1dSUkRfTXNrIHwgQ0FOX0lGX0NNQVNLX01BU0tfTXNrIHwgQ0FOX0lGX0NNQVNLX0FSQl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOX0lGX0NNQVNLX0NPTlRST0xfTXNrIHwgQ0FOX0lGX0NNQVNLX0RBVEFBX01zayAgfCBDQU5fSUZfQ01BU0tfREFUQUJfTXNrOworCisgICAgaWYocENhbk1zZy0+SWRUeXBlID09IENBTl9TVERfSUQpCisgICAgeworICAgICAgICAvKiBzdGFuZGFyZCBJRCovCisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjEgPSAwVUw7CisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjIgPSAoKChwQ2FuTXNnLT5JZCkgJiAweDdGRlVMKSA8PCAyKSB8IENBTl9JRl9BUkIyX0RJUl9Nc2sgfCBDQU5fSUZfQVJCMl9NU0dWQUxfTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBleHRlbmRlZCBJRCovCisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjEgPSAocENhbk1zZy0+SWQpICYgMHhGRkZGVUw7CisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjIgPSAoKChwQ2FuTXNnLT5JZCkgJiAweDFGRkYwMDAwVUwpID4+IDE2KSB8IENBTl9JRl9BUkIyX0RJUl9Nc2sgfCBDQU5fSUZfQVJCMl9YVERfTXNrIHwgQ0FOX0lGX0FSQjJfTVNHVkFMX01zazsKKyAgICB9CisKKyAgICBpZihwQ2FuTXNnLT5GcmFtZVR5cGUpCisgICAgeworICAgICAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5BUkIyIHw9ICAgQ0FOX0lGX0FSQjJfRElSX01zazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQVJCMiAmPSAofkNBTl9JRl9BUkIyX0RJUl9Nc2spOworICAgIH0KKworCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uREFUX0ExID0gKCh1aW50MzJfdClwQ2FuTXNnLT5EYXRhWzFdIDw8IDgpIHwgKHVpbnQzMl90KXBDYW5Nc2ctPkRhdGFbMF07CisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uREFUX0EyID0gKCh1aW50MzJfdClwQ2FuTXNnLT5EYXRhWzNdIDw8IDgpIHwgKHVpbnQzMl90KXBDYW5Nc2ctPkRhdGFbMl07CisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uREFUX0IxID0gKCh1aW50MzJfdClwQ2FuTXNnLT5EYXRhWzVdIDw8IDgpIHwgcENhbk1zZy0+RGF0YVs0XTsKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQjIgPSAoKHVpbnQzMl90KXBDYW5Nc2ctPkRhdGFbN10gPDwgOCkgfCBwQ2FuTXNnLT5EYXRhWzZdOworCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uTUNPTiAgID0gIENBTl9JRl9NQ09OX05FV0RBVF9Nc2sgfCBwQ2FuTXNnLT5ETEMgfCBDQU5fSUZfTUNPTl9UWElFX01zayB8IENBTl9JRl9NQ09OX0VPQl9Nc2s7CisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQ1JFUSAgID0gMVVMICsgdTMyTXNnTnVtOworCisgICAgUmVsZWFzZUlGKHRDQU4sICh1aW50MzJfdCl1OE1zZ0lmTnVtKTsKKworICAgIHJldHVybiAoaW50MzJfdClUUlVFOworfQorCisvKioKKyAgKiBAYnJpZWYgU2V0IHRyYW5zbWl0IHJlcXVlc3QgYml0LgorICAqCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdTMyTXNnTnVtIFNwZWNpZmllcyB0aGUgTWVzc2FnZSBvYmplY3QgbnVtYmVyLCBmcm9tIDAgdG8gMzEuCisgICoKKyAgKiBAcmV0dXJuIFRSVUU6IFN0YXJ0IHRyYW5zbWl0IG1lc3NhZ2UuCisgICoKKyAgKiBAZGV0YWlscyBJZiBhIHRyYW5zbWlzc2lvbiBpcyByZXF1ZXN0ZWQgYnkgcHJvZ3JhbW1pbmcgYml0IFR4UnFzdC9OZXdEYXQgKElGbl9DTUFTS1syXSksIHRoZSBUeFJxc3QgKElGbl9NQ09OWzhdKSB3aWxsIGJlIGlnbm9yZWQuCisgICovCitpbnQzMl90IENBTl9UcmlnZ2VyVHhNc2coQ0FOX1QgICp0Q0FOLCB1aW50MzJfdCB1MzJNc2dOdW0pCit7CisgICAgdWludDhfdCB1OE1zZ0lmTnVtOworCisgICAgaWYoKHU4TXNnSWZOdW0gPSAodWludDhfdClMb2NrSUZfVEwodENBTikpID09IDJVKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChpbnQzMl90KUZBTFNFOworICAgIH0KKworICAgIHRDQU4tPlNUQVRVUyAmPSAofkNBTl9TVEFUVVNfVFhPS19Nc2spOworCisgICAgLyogcmVhZCB0aGUgbWVzc2FnZSBjb250ZW50cyovCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQ01BU0sgPSBDQU5fSUZfQ01BU0tfQ0xSSU5UUE5EX01zaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDQU5fSUZfQ01BU0tfVFhSUVNUTkVXREFUX01zazsKKworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkNSRVEgPSAxVUwgKyB1MzJNc2dOdW07CisKKyAgICB3aGlsZSh0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5DUkVRICYgQ0FOX0lGX0NSRVFfQlVTWV9Nc2spCisgICAgeworICAgICAgICAvKldhaXQqLworICAgIH0KKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5DTUFTSyAgPSBDQU5fSUZfQ01BU0tfV1JSRF9Nc2sgfCBDQU5fSUZfQ01BU0tfVFhSUVNUTkVXREFUX01zazsKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5DUkVRICA9IDFVTCArIHUzMk1zZ051bTsKKworICAgIFJlbGVhc2VJRih0Q0FOLCAodWludDMyX3QpdThNc2dJZk51bSk7CisKKyAgICByZXR1cm4gKGludDMyX3QpVFJVRTsKK30KKworLyoqCisgICogQGJyaWVmIEVuYWJsZSBDQU4gaW50ZXJydXB0LgorICAqCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzayBJbnRlcnJ1cHQgTWFzay4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIENBTl9DT05fSUVfTXNrIE1vZHVsZSBpbnRlcnJ1cHQgZW5hYmxlLgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0FOX0NPTl9TSUVfTXNrIFN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0IGVuYWJsZS4KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIENBTl9DT05fRUlFX01zayBFcnJvciBpbnRlcnJ1cHQgZW5hYmxlLgorICAqCisgICogQHJldHVybiBOb25lCisgICoKKyAgKiBAZGV0YWlscyBUaGUgYXBwbGljYXRpb24gc29mdHdhcmUgaGFzIHR3byBwb3NzaWJpbGl0aWVzIHRvIGZvbGxvdyB0aGUgc291cmNlIG9mIGEgbWVzc2FnZSBpbnRlcnJ1cHQuCisgICogICAgICAgICAgRmlyc3QsIGl0IGNhbiBmb2xsb3cgdGhlIEludElkIGluIHRoZSBJbnRlcnJ1cHQgUmVnaXN0ZXIgYW5kIHNlY29uZCBpdCBjYW4gcG9sbCB0aGUgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIuCisgICovCit2b2lkIENBTl9FbmFibGVJbnQoQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgdENBTi0+Q09OID0gKHRDQU4tPkNPTiAmIH4oQ0FOX0NPTl9JRV9Nc2sgfCBDQU5fQ09OX1NJRV9Nc2sgfCBDQU5fQ09OX0VJRV9Nc2spKSB8CisgICAgICAgICAgICAgICAgKHUzMk1hc2sgJiAoQ0FOX0NPTl9JRV9Nc2sgfCBDQU5fQ09OX1NJRV9Nc2sgfCBDQU5fQ09OX0VJRV9Nc2spKTsKK30KKworLyoqCisgICogQGJyaWVmIERpc2FibGUgQ0FOIGludGVycnVwdC4KKyAgKgorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgSW50ZXJydXB0IE1hc2suIChDQU5fQ09OX0lFX01zayAvIENBTl9DT05fU0lFX01zayAvIENBTl9DT05fRUlFX01zaykuCisgICoKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzIFRoZSBpbnRlcnJ1cHQgcmVtYWlucyBhY3RpdmUgdW50aWwgdGhlIEludGVycnVwdCBSZWdpc3RlciBpcyBiYWNrIHRvIHZhbHVlIHplcm8gKHRoZSBjYXVzZSBvZiB0aGUgaW50ZXJydXB0IGlzIHJlc2V0KSBvciB1bnRpbCBJRSBpcyByZXNldC4KKyAgKi8KK3ZvaWQgQ0FOX0Rpc2FibGVJbnQoQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgdENBTi0+Q09OID0gdENBTi0+Q09OICYgfigodTMyTWFzayAmIChDQU5fQ09OX0lFX01zayB8IENBTl9DT05fU0lFX01zayB8IENBTl9DT05fRUlFX01zaykpKTsKK30KKworCisvKioKKyAgKiBAYnJpZWYgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29uZmlndXJlIGEgcmVjZWl2ZSBtZXNzYWdlIG9iamVjdC4KKyAgKgorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIHUzMk1zZ051bSBTcGVjaWZpZXMgdGhlIE1lc3NhZ2Ugb2JqZWN0IG51bWJlciwgZnJvbSAwIHRvIDMxLgorICAqIEBwYXJhbVtpbl0gdTMySURUeXBlIFNwZWNpZmllcyB0aGUgaWRlbnRpZmllciB0eXBlIG9mIHRoZSBmcmFtZXMgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDQU5fU1REX0lEIFRoZSAxMS1iaXQgaWRlbnRpZmllci4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0FOX0VYVF9JRCBUaGUgMjktYml0IGlkZW50aWZpZXIuCisgICogQHBhcmFtW2luXSB1MzJJRCBTcGVjaWZpZXMgdGhlIGlkZW50aWZpZXIgdXNlZCBmb3IgYWNjZXB0YW5jZSBmaWx0ZXJpbmcuCisgICoKKyAgKiBAcmV0dmFsIEZBTFNFIE5vIHVzZWZ1bCBpbnRlcmZhY2UuCisgICogQHJldHZhbCBUUlVFIENvbmZpZ3VyZSBhIHJlY2VpdmUgbWVzc2FnZSBvYmplY3Qgc3VjY2Vzcy4KKyAgKgorICAqIEBkZXRhaWxzIElmIHRoZSBSeElFIGJpdCAoQ0FOX0lGbl9NQ09OWzEwXSkgaXMgc2V0LCB0aGUgSW50UG5kIGJpdCAoQ0FOX0lGbl9NQ09OWzEzXSkKKyAgKiAgICAgICAgICB3aWxsIGJlIHNldCB3aGVuIGEgcmVjZWl2ZWQgRGF0YSBGcmFtZSBpcyBhY2NlcHRlZCBhbmQgc3RvcmVkIGluIHRoZSBNZXNzYWdlIE9iamVjdC4KKyAgKi8KK2ludDMyX3QgQ0FOX1NldFJ4TXNnKENBTl9UICp0Q0FOLCB1aW50MzJfdCB1MzJNc2dOdW0sIHVpbnQzMl90IHUzMklEVHlwZSwgdWludDMyX3QgdTMySUQpCit7CisgICAgdWludDMyX3QgdTMyVGltZU91dENvdW50ID0gMFVMOworCisgICAgd2hpbGUoQ0FOX1NldFJ4TXNnT2JqKHRDQU4sICh1aW50OF90KXUzMk1zZ051bSwgKHVpbnQ4X3QpdTMySURUeXBlLCB1MzJJRCwgKHVpbnQ4X3QpVFJVRSkgPT0gKGludDMyX3QpRkFMU0UpCisgICAgeworICAgICAgICBpZigrK3UzMlRpbWVPdXRDb3VudCA+PSBSRVRSWV9DT1VOVFMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoaW50MzJfdClGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAoaW50MzJfdClUUlVFOworfQorCisvKioKKyAgKiBAYnJpZWYgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29uZmlndXJlIGEgcmVjZWl2ZSBtZXNzYWdlIG9iamVjdC4KKyAgKgorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIHUzMk1zZ051bSBTcGVjaWZpZXMgdGhlIE1lc3NhZ2Ugb2JqZWN0IG51bWJlciwgZnJvbSAwIHRvIDMxLgorICAqIEBwYXJhbVtpbl0gdTMySURUeXBlIFNwZWNpZmllcyB0aGUgaWRlbnRpZmllciB0eXBlIG9mIHRoZSBmcmFtZXMgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDQU5fU1REX0lEIFRoZSAxMS1iaXQgaWRlbnRpZmllci4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0FOX0VYVF9JRCBUaGUgMjktYml0IGlkZW50aWZpZXIuCisgICogQHBhcmFtW2luXSB1MzJJRCBTcGVjaWZpZXMgdGhlIGlkZW50aWZpZXIgdXNlZCBmb3IgYWNjZXB0YW5jZSBmaWx0ZXJpbmcuCisgICogQHBhcmFtW2luXSB1MzJJRE1hc2sgU3BlY2lmaWVzIHRoZSBpZGVudGlmaWVyIG1hc2sgdXNlZCBmb3IgYWNjZXB0YW5jZSBmaWx0ZXJpbmcuCisgICoKKyAgKiBAcmV0dmFsIEZBTFNFIE5vIHVzZWZ1bCBpbnRlcmZhY2UuCisgICogQHJldHZhbCBUUlVFIENvbmZpZ3VyZSBhIHJlY2VpdmUgbWVzc2FnZSBvYmplY3Qgc3VjY2Vzcy4KKyAgKgorICAqIEBkZXRhaWxzIElmIHRoZSBSeElFIGJpdCAoQ0FOX0lGbl9NQ09OWzEwXSkgaXMgc2V0LCB0aGUgSW50UG5kIGJpdCAoQ0FOX0lGbl9NQ09OWzEzXSkKKyAgKiAgICAgICAgICB3aWxsIGJlIHNldCB3aGVuIGEgcmVjZWl2ZWQgRGF0YSBGcmFtZSBpcyBhY2NlcHRlZCBhbmQgc3RvcmVkIGluIHRoZSBNZXNzYWdlIE9iamVjdC4KKyAgKi8KK2ludDMyX3QgQ0FOX1NldFJ4TXNnQW5kTXNrKENBTl9UICp0Q0FOLCB1aW50MzJfdCB1MzJNc2dOdW0sIHVpbnQzMl90IHUzMklEVHlwZSwgdWludDMyX3QgdTMySUQsIHVpbnQzMl90IHUzMklETWFzaykKK3sKKyAgICB1aW50MzJfdCB1MzJUaW1lT3V0Q291bnQgPSAwVUw7CisKKyAgICB3aGlsZShDQU5fU2V0UnhNc2dPYmpBbmRNc2sodENBTiwgKHVpbnQ4X3QpdTMyTXNnTnVtLCAodWludDhfdCl1MzJJRFR5cGUsIHUzMklELCB1MzJJRE1hc2ssICh1aW50OF90KVRSVUUpID09IChpbnQzMl90KUZBTFNFKQorICAgIHsKKyAgICAgICAgaWYoKyt1MzJUaW1lT3V0Q291bnQgPj0gUkVUUllfQ09VTlRTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKGludDMyX3QpRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKGludDMyX3QpVFJVRTsKK30KKworLyoqCisgICogQGJyaWVmIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBzZXZlcmFsIHJlY2VpdmUgbWVzc2FnZSBvYmplY3RzLgorICAqCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdTMyTXNnTnVtIFRoZSBzdGFydGluZyBNU0cgUkFNIG51bWJlcigwIH4gMzEpLgorICAqIEBwYXJhbVtpbl0gdTMyTXNnQ291bnQgdGhlIG51bWJlciBvZiBNU0cgUkFNIG9mIHRoZSBGSUZPLgorICAqIEBwYXJhbVtpbl0gdTMySURUeXBlIFNwZWNpZmllcyB0aGUgaWRlbnRpZmllciB0eXBlIG9mIHRoZSBmcmFtZXMgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDQU5fU1REX0lEIFRoZSAxMS1iaXQgaWRlbnRpZmllci4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0FOX0VYVF9JRCBUaGUgMjktYml0IGlkZW50aWZpZXIuCisgICogQHBhcmFtW2luXSB1MzJJRCBTcGVjaWZpZXMgdGhlIGlkZW50aWZpZXIgdXNlZCBmb3IgYWNjZXB0YW5jZSBmaWx0ZXJpbmcuCisgICoKKyAgKiBAcmV0dmFsIEZBTFNFIE5vIHVzZWZ1bCBpbnRlcmZhY2UuCisgICogQHJldHZhbCBUUlVFIENvbmZpZ3VyZSByZWNlaXZlIG1lc3NhZ2Ugb2JqZWN0cyBzdWNjZXNzLgorICAqCisgICogQGRldGFpbHMgVGhlIEludGVyZmFjZSBSZWdpc3RlcnMgYXZvaWQgY29uZmxpY3QgYmV0d2VlbiB0aGUgQ1BVIGFjY2Vzc2VzIHRvIHRoZSBNZXNzYWdlIFJBTSBhbmQgQ0FOIG1lc3NhZ2UgcmVjZXB0aW9uCisgICogICAgICAgICAgYW5kIHRyYW5zbWlzc2lvbiBieSBidWZmZXJpbmcgdGhlIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQuCisgICovCitpbnQzMl90IENBTl9TZXRNdWx0aVJ4TXNnKENBTl9UICp0Q0FOLCB1aW50MzJfdCB1MzJNc2dOdW0sIHVpbnQzMl90IHUzMk1zZ0NvdW50LCB1aW50MzJfdCB1MzJJRFR5cGUsIHVpbnQzMl90IHUzMklEKQoreworICAgIHVpbnQzMl90IGkgPSAwVUw7CisgICAgdWludDMyX3QgdTMyVGltZU91dENvdW50OworICAgIHVpbnQzMl90IHUzMkVPQl9GbGFnID0gMFVMOworCisgICAgZm9yKGkgPSAxVUw7IGkgPCB1MzJNc2dDb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdTMyVGltZU91dENvdW50ID0gMFVMOworCisgICAgICAgIHUzMk1zZ051bSArPSAoaSAtIDFVTCk7CisKKyAgICAgICAgaWYoaSA9PSB1MzJNc2dDb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRU9CX0ZsYWcgPSAxVUw7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZShDQU5fU2V0UnhNc2dPYmoodENBTiwgKHVpbnQ4X3QpdTMyTXNnTnVtLCAodWludDhfdCl1MzJJRFR5cGUsIHUzMklELCAodWludDhfdCl1MzJFT0JfRmxhZykgPT0gKGludDMyX3QpRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCsrdTMyVGltZU91dENvdW50ID49IFJFVFJZX0NPVU5UUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGludDMyX3QpRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKGludDMyX3QpVFJVRTsKK30KKworCisvKioKKyAgKiBAYnJpZWYgU2VuZCBDQU4gbWVzc2FnZS4KKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1MzJNc2dOdW0gU3BlY2lmaWVzIHRoZSBNZXNzYWdlIG9iamVjdCBudW1iZXIsIGZyb20gMCB0byAzMS4KKyAgKiBAcGFyYW1baW5dIHBDYW5Nc2cgUG9pbnRlciB0byB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUgd2hlcmUgcmVjZWl2ZWQgZGF0YSBpcyBjb3BpZWQuCisgICoKKyAgKiBAcmV0dmFsIEZBTFNFIDEuIFdoZW4gb3BlcmF0aW9uIGluIGJhc2ljIG1vZGU6IFRyYW5zbWl0IG1lc3NhZ2UgdGltZSBvdXQuIFxuCisgICogICAgICAgICAgICAgICAyLiBXaGVuIG9wZXJhdGlvbiBpbiBub3JtYWwgbW9kZTogTm8gdXNlZnVsIGludGVyZmFjZS4gXG4KKyAgKiBAcmV0dmFsIFRSVUUgVHJhbnNtaXQgTWVzc2FnZSBzdWNjZXNzLgorICAqCisgICogQGRldGFpbHMgVGhlIHJlY2VpdmUvdHJhbnNtaXQgcHJpb3JpdHkgZm9yIHRoZSBNZXNzYWdlIE9iamVjdHMgaXMgYXR0YWNoZWQgdG8gdGhlIG1lc3NhZ2UgbnVtYmVyLgorICAqICAgICAgICAgIE1lc3NhZ2UgT2JqZWN0IDEgaGFzIHRoZSBoaWdoZXN0IHByaW9yaXR5LCB3aGlsZSBNZXNzYWdlIE9iamVjdCAzMiBoYXMgdGhlIGxvd2VzdCBwcmlvcml0eS4KKyAgKi8KK2ludDMyX3QgQ0FOX1RyYW5zbWl0KENBTl9UICp0Q0FOLCB1aW50MzJfdCB1MzJNc2dOdW0sIFNUUl9DQU5NU0dfVCogcENhbk1zZykKK3sKKyAgICB1aW50MzJfdCBjb25kMCwgY29uZDE7CisKKyAgICBjb25kMCA9IHRDQU4tPkNPTiAmIENBTl9DT05fVEVTVF9Nc2s7CisgICAgY29uZDEgPSB0Q0FOLT5URVNUICYgQ0FOX1RFU1RfQkFTSUNfTXNrOworICAgIGlmKGNvbmQwICYmIGNvbmQxKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChDQU5fQmFzaWNTZW5kTXNnKHRDQU4sIHBDYW5Nc2cpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYoQ0FOX1NldFR4TXNnKHRDQU4sIHUzMk1zZ051bSwgcENhbk1zZykgPT0gKGludDMyX3QpRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoaW50MzJfdClGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBDQU5fVHJpZ2dlclR4TXNnKHRDQU4sIHUzMk1zZ051bSk7CisgICAgfQorCisgICAgcmV0dXJuIChpbnQzMl90KVRSVUU7Cit9CisKKworLyoqCisgICogQGJyaWVmIEdldHMgdGhlIG1lc3NhZ2UsIGlmIHJlY2VpdmVkLgorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIHUzMk1zZ051bSBTcGVjaWZpZXMgdGhlIE1lc3NhZ2Ugb2JqZWN0IG51bWJlciwgZnJvbSAwIHRvIDMxLgorICAqIEBwYXJhbVtpbl0gcENhbk1zZyBQb2ludGVyIHRvIHRoZSBtZXNzYWdlIHN0cnVjdHVyZSB3aGVyZSByZWNlaXZlZCBkYXRhIGlzIGNvcGllZC4KKyAgKgorICAqIEByZXR2YWwgRkFMU0UgTm8gYW55IG1lc3NhZ2UgcmVjZWl2ZWQuCisgICogQHJldHZhbCBUUlVFIFJlY2VpdmUgTWVzc2FnZSBzdWNjZXNzLgorICAqCisgICogQGRldGFpbHMgVGhlIEludGVyZmFjZSBSZWdpc3RlcnMgYXZvaWQgY29uZmxpY3QgYmV0d2VlbiB0aGUgQ1BVIGFjY2Vzc2VzIHRvIHRoZSBNZXNzYWdlIFJBTSBhbmQgQ0FOIG1lc3NhZ2UgcmVjZXB0aW9uCisgICogICAgICAgICAgYW5kIHRyYW5zbWlzc2lvbiBieSBidWZmZXJpbmcgdGhlIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQuCisgICovCitpbnQzMl90IENBTl9SZWNlaXZlKENBTl9UICp0Q0FOLCB1aW50MzJfdCB1MzJNc2dOdW0sIFNUUl9DQU5NU0dfVCogcENhbk1zZykKK3sKKyAgICB1aW50MzJfdCBjb25kMCwgY29uZDE7CisKKyAgICBjb25kMCA9IHRDQU4tPkNPTiAmIENBTl9DT05fVEVTVF9Nc2s7CisgICAgY29uZDEgPSB0Q0FOLT5URVNUICYgQ0FOX1RFU1RfQkFTSUNfTXNrOworCisgICAgaWYoY29uZDAgJiYgY29uZDEpCisgICAgeworICAgICAgICByZXR1cm4gKENBTl9CYXNpY1JlY2VpdmVNc2codENBTiwgcENhbk1zZykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gQ0FOX1JlYWRNc2dPYmoodENBTiwgKHVpbnQ4X3QpdTMyTXNnTnVtLCAodWludDhfdClUUlVFLCBwQ2FuTXNnKTsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiBDbGVhciBpbnRlcnJ1cHQgcGVuZGluZyBiaXQuCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdTMyTXNnTnVtIFNwZWNpZmllcyB0aGUgTWVzc2FnZSBvYmplY3QgbnVtYmVyLCBmcm9tIDAgdG8gMzEuCisgICoKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzIEFuIGludGVycnVwdCByZW1haW5zIHBlbmRpbmcgdW50aWwgdGhlIGFwcGxpY2F0aW9uIHNvZnR3YXJlIGhhcyBjbGVhcmVkIGl0LgorICAqLwordm9pZCBDQU5fQ0xSX0lOVF9QRU5ESU5HX0JJVChDQU5fVCAqdENBTiwgdWludDhfdCB1MzJNc2dOdW0pCit7CisgICAgdWludDMyX3QgdTMyTXNnSWZOdW07CisKKyAgICBpZigodTMyTXNnSWZOdW0gPSBMb2NrSUZfVEwodENBTikpID09IDJVTCkKKyAgICB7CisgICAgICAgIHUzMk1zZ0lmTnVtID0gMFVMOworICAgIH0KKworICAgIHRDQU4tPklGW3UzMk1zZ0lmTnVtXS5DTUFTSyA9IENBTl9JRl9DTUFTS19DTFJJTlRQTkRfTXNrIHwgQ0FOX0lGX0NNQVNLX1RYUlFTVE5FV0RBVF9Nc2s7CisgICAgdENBTi0+SUZbdTMyTXNnSWZOdW1dLkNSRVEgPSAxVUwgKyB1MzJNc2dOdW07CisKKyAgICBSZWxlYXNlSUYodENBTiwgdTMyTXNnSWZOdW0pOworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENBTl9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDQU5fRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2Nsay5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvY2xrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlYmQyMwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2Nsay5jCkBAIC0wLDAgKzEsMTIzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNsay5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgQ2xvY2sgQ29udHJvbGxlciAoQ0xLKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQ0xLX0RyaXZlciBDTEsgRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBDTEtfRVhQT1JURURfRlVOQ1RJT05TIENMSyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBmcmVxdWVuY3kgb3V0cHV0IGZ1bmN0aW9uCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGRpc2FibGUgZnJlcXVlbmN5IG91dHB1dCBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgQ0xLX0Rpc2FibGVDS08odm9pZCkKK3sKKyAgICAvKiBEaXNhYmxlIENLTyBjbG9jayBzb3VyY2UgKi8KKyAgICBDTEstPkFQQkNMSzAgJj0gKH5DTEtfQVBCQ0xLMF9DTEtPQ0tFTl9Nc2spOworfQorCisKKy8qKgorICAqIEBicmllZiAgICAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlIGZyZXF1ZW5jeSBkaXZpZGVyIG1vZHVsZSBjbG9jay4KKyAgKiAgICAgICAgICAgICBlbmFibGUgZnJlcXVlbmN5IGRpdmlkZXIgY2xvY2sgZnVuY3Rpb24gYW5kIGNvbmZpZ3VyZSBmcmVxdWVuY3kgZGl2aWRlci4KKyAgKiBAcGFyYW1baW5dICB1MzJDbGtTcmMgaXMgZnJlcXVlbmN5IGRpdmlkZXIgZnVuY3Rpb24gY2xvY2sgc291cmNlLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMV9DTEtPU0VMX0hYVAorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMV9DTEtPU0VMX0xYVAorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMV9DTEtPU0VMX0hDTEsKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDFfQ0xLT1NFTF9ISVJDCisgICogQHBhcmFtW2luXSAgdTMyQ2xrRGl2IGlzIGRpdmlkZXIgb3V0cHV0IGZyZXF1ZW5jeSBzZWxlY3Rpb24uCisgICogQHBhcmFtW2luXSAgdTMyQ2xrRGl2QnkxRW4gaXMgZnJlcXVlbmN5IGRpdmlkZWQgYnkgb25lIGVuYWJsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBPdXRwdXQgc2VsZWN0ZWQgY2xvY2sgdG8gQ0tPLiBUaGUgb3V0cHV0IGNsb2NrIGZyZXF1ZW5jeSBpcyBkaXZpZGVkIGJ5IHUzMkNsa0Rpdi4KKyAgKiAgICAgICAgICAgICBUaGUgZm9ybXVsYSBpczoKKyAgKiAgICAgICAgICAgICAgICAgQ0tPIGZyZXF1ZW5jeSA9IChDbG9jayBzb3VyY2UgZnJlcXVlbmN5KSAvIDJeKHUzMkNsa0RpdiArIDEpCisgICogICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBqdXN0IHVzZWQgdG8gc2V0IENLTyBjbG9jay4KKyAgKiAgICAgICAgICAgICBVc2VyIG11c3QgZW5hYmxlIEkvTyBmb3IgQ0tPIGNsb2NrIG91dHB1dCBwaW4gYnkgdGhlbXNlbHZlcy4KKyAgKi8KK3ZvaWQgQ0xLX0VuYWJsZUNLTyh1aW50MzJfdCB1MzJDbGtTcmMsIHVpbnQzMl90IHUzMkNsa0RpdiwgdWludDMyX3QgdTMyQ2xrRGl2QnkxRW4pCit7CisgICAgLyogQ0tPID0gY2xvY2sgc291cmNlIC8gMl4odTMyQ2xrRGl2ICsgMSkgKi8KKyAgICBDTEstPkNMS09DVEwgPSBDTEtfQ0xLT0NUTF9DTEtPRU5fTXNrIHwgdTMyQ2xrRGl2IHwgKHUzMkNsa0RpdkJ5MUVuIDw8IENMS19DTEtPQ1RMX0RJVjFFTl9Qb3MpOworCisgICAgLyogRW5hYmxlIENLTyBjbG9jayBzb3VyY2UgKi8KKyAgICBDTEstPkFQQkNMSzAgfD0gQ0xLX0FQQkNMSzBfQ0xLT0NLRU5fTXNrOworCisgICAgLyogU2VsZWN0IENLTyBjbG9jayBzb3VyY2UgKi8KKyAgICBDTEstPkNMS1NFTDEgPSAoQ0xLLT5DTEtTRUwxICYgKH5DTEtfQ0xLU0VMMV9DTEtPU0VMX01zaykpIHwgKHUzMkNsa1NyYyk7CisKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW50ZXIgdG8gUG93ZXItZG93biBtb2RlCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbGV0IHN5c3RlbSBlbnRlciB0byBQb3dlci1kb3duIG1vZGUuIFxuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBDTEtfUG93ZXJEb3duKHZvaWQpCit7CisgICAgLyogU2V0IHRoZSBwcm9jZXNzb3IgdXNlcyBkZWVwIHNsZWVwIGFzIGl0cyBsb3cgcG93ZXIgbW9kZSAqLworICAgIFNDQi0+U0NSIHw9IFNDQl9TQ1JfU0xFRVBERUVQX01zazsKKworICAgIC8qIFNldCBzeXN0ZW0gUG93ZXItZG93biBlbmFibGVkKi8KKyAgICBDTEstPlBXUkNUTCB8PSBDTEtfUFdSQ1RMX1BERU5fTXNrOworCisgICAgLyogQ2hpcCBlbnRlciBQb3dlci1kb3duIG1vZGUgYWZ0ZXIgQ1BVIHJ1biBXRkkgaW5zdHJ1Y3Rpb24gKi8KKyAgICBfX1dGSSgpOworfQorCisKKworLyoqCisgICogQGJyaWVmICAgICAgRW50ZXIgdG8gSWRsZSBtb2RlCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGxldCBzeXN0ZW0gZW50ZXIgdG8gSWRsZSBtb2RlLiBcbgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgQ0xLX0lkbGUodm9pZCkKK3sKKyAgICAvKiBTZXQgdGhlIHByb2Nlc3NvciB1c2VzIHNsZWVwIGFzIGl0cyBsb3cgcG93ZXIgbW9kZSAqLworICAgIFNDQi0+U0NSICY9IH5TQ0JfU0NSX1NMRUVQREVFUF9Nc2s7CisKKyAgICAvKiBTZXQgY2hpcCBpbiBpZGxlIG1vZGUgYmVjYXVzZSBvZiBXRkkgY29tbWFuZCAqLworICAgIENMSy0+UFdSQ1RMICY9IH5DTEtfUFdSQ1RMX1BERU5fTXNrOworCisgICAgLyogQ2hpcCBlbnRlciBpZGxlIG1vZGUgYWZ0ZXIgQ1BVIHJ1biBXRkkgaW5zdHJ1Y3Rpb24gKi8KKyAgICBfX1dGSSgpOworfQorCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgY2xvY2sgZnJlcXVlbmN5CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIEV4dGVybmFsIGhpZ2ggZnJlcXVlbmN5IGNyeXN0YWwgZnJlcXVlbmN5CisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBnZXQgZXh0ZXJuYWwgaGlnaCBmcmVxdWVuY3kgY3J5c3RhbCBmcmVxdWVuY3kuIFRoZSBmcmVxdWVuY3kgdW5pdCBpcyBIei4KKyAgKi8KK19fTk9OU0VDVVJFX0VOVFJZX1dFQUsKK3VpbnQzMl90IENMS19HZXRIWFRGcmVxKHZvaWQpCit7CisgICAgdWludDMyX3QgdTMyRnJlcSA9IDBVTDsKKyAgICB1aW50MzJfdCB1MzJIWFRFTiA9IENMSy0+UFdSQ1RMICYgQ0xLX1BXUkNUTF9IWFRFTl9Nc2s7CisKKyAgICBpZih1MzJIWFRFTikKKyAgICB7CisgICAgICAgIHUzMkZyZXEgPSBfX0hYVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyRnJlcSA9IDBVTDsKKyAgICB9CisKKyAgICByZXR1cm4gdTMyRnJlcTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIGNsb2NrIGZyZXF1ZW5jeQorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBFeHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBjbG9jayBmcmVxdWVuY3kKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGdldCBleHRlcm5hbCBsb3cgZnJlcXVlbmN5IGNyeXN0YWwgZnJlcXVlbmN5LiBUaGUgZnJlcXVlbmN5IHVuaXQgaXMgSHouCisgICovCisKK19fTk9OU0VDVVJFX0VOVFJZX1dFQUsKK3VpbnQzMl90IENMS19HZXRMWFRGcmVxKHZvaWQpCit7CisgICAgdWludDMyX3QgdTMyRnJlcSA9IDBVTDsKKyAgICB1aW50MzJfdCB1MzJMWFRFTiA9IENMSy0+UFdSQ1RMICYgQ0xLX1BXUkNUTF9MWFRFTl9Nc2s7CisKKyAgICBpZih1MzJMWFRFTikKKyAgICB7CisgICAgICAgIHUzMkZyZXEgPSBfX0xYVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyRnJlcSA9IDBVTDsKKyAgICB9CisKKyAgICByZXR1cm4gdTMyRnJlcTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IEhDTEsgZnJlcXVlbmN5CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIEhDTEsgZnJlcXVlbmN5CisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBnZXQgSENMSyBmcmVxdWVuY3kuIFRoZSBmcmVxdWVuY3kgdW5pdCBpcyBIei4KKyAgKi8KKworX19OT05TRUNVUkVfRU5UUllfV0VBSwordWludDMyX3QgQ0xLX0dldEhDTEtGcmVxKHZvaWQpCit7CisgICAgU3lzdGVtQ29yZUNsb2NrVXBkYXRlKCk7CisgICAgcmV0dXJuIFN5c3RlbUNvcmVDbG9jazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFBDTEswIGZyZXF1ZW5jeQorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBQQ0xLMCBmcmVxdWVuY3kKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGdldCBQQ0xLMCBmcmVxdWVuY3kuIFRoZSBmcmVxdWVuY3kgdW5pdCBpcyBIei4KKyAgKi8KKworX19OT05TRUNVUkVfRU5UUllfV0VBSwordWludDMyX3QgQ0xLX0dldFBDTEswRnJlcSh2b2lkKQoreworICAgIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSgpOworICAgIHJldHVybiAoU3lzdGVtQ29yZUNsb2NrID4+ICgoQ0xLLT5QQ0xLRElWICYgQ0xLX1BDTEtESVZfQVBCMERJVl9Nc2spID4+IENMS19QQ0xLRElWX0FQQjBESVZfUG9zKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBQQ0xLMSBmcmVxdWVuY3kKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgUENMSzEgZnJlcXVlbmN5CisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBnZXQgUENMSzEgZnJlcXVlbmN5LiBUaGUgZnJlcXVlbmN5IHVuaXQgaXMgSHouCisgICovCisKK19fTk9OU0VDVVJFX0VOVFJZX1dFQUsKK3VpbnQzMl90IENMS19HZXRQQ0xLMUZyZXEodm9pZCkKK3sKKyAgICBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUoKTsKKyAgICByZXR1cm4gKFN5c3RlbUNvcmVDbG9jayA+PiAoKENMSy0+UENMS0RJViAmIENMS19QQ0xLRElWX0FQQjFESVZfTXNrKSA+PiBDTEtfUENMS0RJVl9BUEIxRElWX1BvcykpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgQ1BVIGZyZXF1ZW5jeQorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBDUFUgZnJlcXVlbmN5CisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBnZXQgQ1BVIGZyZXF1ZW5jeS4gVGhlIGZyZXF1ZW5jeSB1bml0IGlzIEh6LgorICAqLworCitfX05PTlNFQ1VSRV9FTlRSWV9XRUFLCit1aW50MzJfdCBDTEtfR2V0Q1BVRnJlcSh2b2lkKQoreworICAgIHVpbnQzMl90IHUzMkZyZXEsIHUzMkhjbGtTcmMsIHUzMkhjbGtEaXY7CisgICAgdWludDMyX3QgYXUzMkNsa1RibFtdID0ge19fSFhULCBfX0xYVCwgMFVMLCBfX0xJUkMsIDBVTCwgX19ISVJDNDgsIDBVTCwgX19ISVJDfTsKKyAgICB1aW50MzJfdCB1MzJQbGxSZWcsIHUzMkZJTiwgdTMyTkYsIHUzMk5SLCB1MzJOTzsKKyAgICB1aW50OF90IGF1OE5vVGJsWzRdID0gezFVLCAyVSwgMlUsIDRVfTsKKyAgICB1aW50MzJfdCB1MzJSVENDS0VOID0gQ0xLLT5BUEJDTEswICYgQ0xLX0FQQkNMSzBfUlRDQ0tFTl9Nc2s7CisKKyAgICAvKiBVcGRhdGUgUExMIENsb2NrICovCisgICAgdTMyUGxsUmVnID0gQ0xLLT5QTExDVEw7CisKKyAgICBpZih1MzJQbGxSZWcgJiAoQ0xLX1BMTENUTF9QRF9Nc2sgfCBDTEtfUExMQ1RMX09FX01zaykpCisgICAgeworICAgICAgICBQbGxDbG9jayA9IDBVTDsgICAgICAgICAgIC8qIFBMTCBpcyBpbiBwb3dlciBkb3duIG1vZGUgb3IgZml4IGxvdyAqLworICAgIH0KKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyogUExMIGlzIGluIG5vcm1hbCBtb2RlICovCisgICAgeworCisgICAgICAgIC8qIFBMTCBzb3VyY2UgY2xvY2sgKi8KKyAgICAgICAgaWYodTMyUGxsUmVnICYgQ0xLX1BMTENUTF9QTExTUkNfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGSU4gPSBfX0hJUkM7ICAgIC8qIFBMTCBzb3VyY2UgY2xvY2sgZnJvbSBISVJDICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGSU4gPSBfX0hYVDsgICAgIC8qIFBMTCBzb3VyY2UgY2xvY2sgZnJvbSBIWFQgKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qIENhbGN1bGF0ZSBQTEwgZnJlcXVlbmN5ICovCisgICAgICAgIGlmKHUzMlBsbFJlZyAmIENMS19QTExDVExfQlBfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICBQbGxDbG9jayA9IHUzMkZJTjsgIC8qIFBMTCBpcyBpbiBieXBhc3MgbW9kZSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogUExMIGlzIG91dHB1dCBlbmFibGVkIGluIG5vcm1hbCB3b3JrIG1vZGUgKi8KKyAgICAgICAgICAgIHUzMk5PID0gYXU4Tm9UYmxbKCh1MzJQbGxSZWcgJiBDTEtfUExMQ1RMX09VVERJVl9Nc2spID4+IENMS19QTExDVExfT1VURElWX1BvcyldOworICAgICAgICAgICAgdTMyTkYgPSAoKHUzMlBsbFJlZyAmIENMS19QTExDVExfRkJESVZfTXNrKSA+PiBDTEtfUExMQ1RMX0ZCRElWX1BvcykgKyAyVUw7CisgICAgICAgICAgICB1MzJOUiA9ICgodTMyUGxsUmVnICYgQ0xLX1BMTENUTF9JTkRJVl9Nc2spID4+IENMS19QTExDVExfSU5ESVZfUG9zKSArIDFVTDsKKworICAgICAgICAgICAgLyogdTMyRklOIGlzIHNoaWZ0ZWQgMiBiaXRzIHRvIGF2b2lkIG92ZXJmbG93ICovCisgICAgICAgICAgICBQbGxDbG9jayA9ICgoKHUzMkZJTiA+PiAyKSAqICh1MzJORiA8PCAxKSkgLyAodTMyTlIgKiB1MzJOTykgPDwgMik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBIQ0xLIGNsb2NrIHNvdXJjZSAqLworICAgIHUzMkhjbGtTcmMgPSBDTEstPkNMS1NFTDAgJiBDTEtfQ0xLU0VMMF9IQ0xLU0VMX01zazsKKworICAgIGlmKHUzMkhjbGtTcmMgPT0gQ0xLX0NMS1NFTDBfSENMS1NFTF9MWFQpCisgICAgeworCisgICAgICAgIGlmKHUzMlJUQ0NLRU4gPT0gMFVMKQorICAgICAgICB7CisgICAgICAgICAgICBDTEstPkFQQkNMSzAgfD0gQ0xLX0FQQkNMSzBfUlRDQ0tFTl9Nc2s7IC8qIEVuYWJsZSBSVEMgY2xvY2sgdG8gZ2V0IExYVCBjbG9jayBzb3VyY2UgKi8KKyAgICAgICAgfQorCisgICAgICAgIGlmKFJUQy0+TFhUQ1RMICYgUlRDX0xYVENUTF9DMzJLU19Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBfX0xJUkMzMjsgLyogTFhUIGNsb2NrIHNvdXJjZSBpcyBMSVJDMzIgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBfX0xYVDsgICAgLyogTFhUIGNsb2NrIHNvdXJjZSBpcyBleHRlcm5hbCBMWFQgKi8KKyAgICAgICAgfQorCisgICAgICAgIGlmKHUzMlJUQ0NLRU4gPT0gMFVMKQorICAgICAgICB7CisgICAgICAgICAgICBDTEstPkFQQkNMSzAgJj0gKH5DTEtfQVBCQ0xLMF9SVENDS0VOX01zayk7IC8qIERpc2FibGUgUlRDIGNsb2NrIGlmIGl0IGlzIGRpc2FibGVkIGJlZm9yZSAqLworICAgICAgICB9CisKKyAgICB9CisgICAgZWxzZSBpZih1MzJIY2xrU3JjID09IENMS19DTEtTRUwwX0hDTEtTRUxfUExMKQorICAgIHsKKyAgICAgICAgdTMyRnJlcSA9IFBsbENsb2NrOy8qIFVzZSBQTEwgY2xvY2sgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyRnJlcSA9IGF1MzJDbGtUYmxbdTMySGNsa1NyY107IC8qIFVzZSB0aGUgY2xvY2sgc291cmNlcyBkaXJlY3RseSAqLworICAgIH0KKworICAgIC8qIEhDTEsgY2xvY2sgc291cmNlIGRpdmlkZXIgKi8KKyAgICB1MzJIY2xrRGl2ID0gKENMSy0+Q0xLRElWMCAmIENMS19DTEtESVYwX0hDTEtESVZfTXNrKSArIDFVTDsKKworICAgIC8qIFVwZGF0ZSBTeXN0ZW0gQ29yZSBDbG9jayAqLworICAgIFN5c3RlbUNvcmVDbG9jayA9IHUzMkZyZXEgLyB1MzJIY2xrRGl2OworCisgICAgLyogVXBkYXRlIEN5Y2xlcyBwZXIgbWljcm8gc2Vjb25kICovCisgICAgQ3ljbGVzUGVyVXMgPSAoU3lzdGVtQ29yZUNsb2NrICsgNTAwMDAwVUwpIC8gMTAwMDAwMFVMOworCisgICAgcmV0dXJuIFN5c3RlbUNvcmVDbG9jazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IEhDTEsgZnJlcXVlbmN5CisgICogQHBhcmFtW2luXSAgdTMySGNsayBpcyBIQ0xLIGZyZXF1ZW5jeS4KKyAgKiAgICAgICAgICAgICBUaGUgcmFuZ2Ugb2YgdTMySGNsayBpcyAyNCBNSHogfiA2NCBNSHogaWYgcG93ZXIgbGV2ZWwgaXMgUEwwLgorICAqICAgICAgICAgICAgIFRoZSByYW5nZSBvZiB1MzJIY2xrIGlzIDI0IE1IeiB+IDQ4IE1IeiBpZiBwb3dlciBsZXZlbCBpcyBQTDEuCisgICogQHJldHVybiAgICAgSENMSyBmcmVxdWVuY3kKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IEhDTEsgZnJlcXVlbmN5LiBUaGUgZnJlcXVlbmN5IHVuaXQgaXMgSHouIFxuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordWludDMyX3QgQ0xLX1NldENvcmVDbG9jayh1aW50MzJfdCB1MzJIY2xrKQoreworICAgIHVpbnQzMl90IHUzMkhJUkNTVEIsIHUzMlBMU1RBVFVTOworCisgICAgLyogUmVhZCBISVJDIGNsb2NrIHNvdXJjZSBzdGFibGUgZmxhZyAqLworICAgIHUzMkhJUkNTVEIgPSBDTEstPlNUQVRVUyAmIENMS19TVEFUVVNfSElSQ1NUQl9Nc2s7CisKKyAgICAvKiBSZWFkIHBvd2VyIGxldmVsIHN0YXR1cyAqLworICAgIHUzMlBMU1RBVFVTID0gU1lTLT5QTFNUUyAmIFNZU19QTFNUU19QTFNUQVRVU19Nc2s7CisKKyAgICAvKiBDaGVjayBIQ0xLIGZyZXF1ZW5jeSByYW5nZSAqLworICAgIGlmKCh1MzJQTFNUQVRVUyA9PSBTWVNfUExTVFNfUExTVEFUVVNfUEwwKSAmJiAodTMySGNsayA+IEZSRVFfNjRNSFopKQorICAgIHsKKyAgICAgICAgdTMySGNsayA9IEZSRVFfNjRNSFo7CisgICAgfQorICAgIGVsc2UgaWYoKHUzMlBMU1RBVFVTID09IFNZU19QTFNUU19QTFNUQVRVU19QTDEpICYmICh1MzJIY2xrID4gRlJFUV80OE1IWikpCisgICAgeworICAgICAgICB1MzJIY2xrID0gRlJFUV80OE1IWjsKKyAgICB9CisgICAgZWxzZSBpZih1MzJIY2xrIDwgRlJFUV8yNE1IWikKKyAgICB7CisgICAgICAgIHUzMkhjbGsgPSBGUkVRXzI0TUhaOworICAgIH0KKworICAgIC8qIFN3aXRjaCBIQ0xLIGNsb2NrIHNvdXJjZSB0byBISVJDIGNsb2NrIGZvciBzYWZlICovCisgICAgQ0xLLT5QV1JDVEwgfD0gQ0xLX1BXUkNUTF9ISVJDRU5fTXNrOworICAgIENMS19XYWl0Q2xvY2tSZWFkeShDTEtfU1RBVFVTX0hJUkNTVEJfTXNrKTsKKyAgICBDTEstPkNMS1NFTDAgfD0gQ0xLX0NMS1NFTDBfSENMS1NFTF9Nc2s7CisgICAgQ0xLLT5DTEtESVYwICY9ICh+Q0xLX0NMS0RJVjBfSENMS0RJVl9Nc2spOworCisgICAgLyogRW5hYmxlIEZsYXNoIGFjY2VzcyBjeWNsZSBhdXRvLXR1bmluZyBmdW5jdGlvbiAqLworICAgIEZNQy0+Q1lDQ1RMICY9ICh+Rk1DX0NZQ0NUTF9GQURJU19Nc2spOworCisgICAgLyogQ29uZmlndXJlIFBMTCBzZXR0aW5nIGlmIEhYVCBjbG9jayBpcyBzdGFibGUgKi8KKyAgICBpZihDTEstPlNUQVRVUyAmIENMS19TVEFUVVNfSFhUU1RCX01zaykKKyAgICB7CisgICAgICAgIHUzMkhjbGsgPSBDTEtfRW5hYmxlUExMKENMS19QTExDVExfUExMU1JDX0hYVCwgdTMySGNsayk7CisgICAgfQorICAgIC8qIENvbmZpZ3VyZSBQTEwgc2V0dGluZyBpZiBIWFQgY2xvY2sgaXMgbm90IHN0YWJsZSAqLworICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMkhjbGsgPSBDTEtfRW5hYmxlUExMKENMS19QTExDVExfUExMU1JDX0hJUkMsIHUzMkhjbGspOworCisgICAgICAgIC8qIFJlYWQgSElSQyBjbG9jayBzb3VyY2Ugc3RhYmxlIGZsYWcgKi8KKyAgICAgICAgdTMySElSQ1NUQiA9IENMSy0+U1RBVFVTICYgQ0xLX1NUQVRVU19ISVJDU1RCX01zazsKKyAgICB9CisKKyAgICAvKiBTZWxlY3QgSENMSyBjbG9jayBzb3VyY2UgdG8gUExMLAorICAgICAgIFNlbGVjdCBIQ0xLIGNsb2NrIHNvdXJjZSBkaXZpZGVyIGFzIDEKKyAgICAgICBhbmQgdXBkYXRlIHN5c3RlbSBjb3JlIGNsb2NrCisgICAgKi8KKyAgICBDTEtfU2V0SENMSyhDTEtfQ0xLU0VMMF9IQ0xLU0VMX1BMTCwgQ0xLX0NMS0RJVjBfSENMSygxVUwpKTsKKworICAgIC8qIERpc2FibGUgSElSQyBpZiBISVJDIGlzIGRpc2FibGVkIGJlZm9yZSBzZXR0aW5nIGNvcmUgY2xvY2sgKi8KKyAgICBpZih1MzJISVJDU1RCID09IDBVTCkKKyAgICB7CisgICAgICAgIENMSy0+UFdSQ1RMICY9IH5DTEtfUFdSQ1RMX0hJUkNFTl9Nc2s7CisgICAgfQorCisgICAgLyogUmV0dXJuIGFjdHVhbGx5IEhDTEsgZnJlcXVlbmN5IGlzIFBMTCBmcmVxdWVuY3kgZGl2aWRlIDEgKi8KKyAgICByZXR1cm4gdTMySGNsazsKK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgSENMSyBjbG9jayBzb3VyY2UgYW5kIEhDTEsgY2xvY2sgZGl2aWRlcgorICAqIEBwYXJhbVtpbl0gIHUzMkNsa1NyYyBpcyBIQ0xLIGNsb2NrIHNvdXJjZS4gSW5jbHVkaW5nIDoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfSENMS1NFTF9IWFQKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfSENMS1NFTF9MWFQKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfSENMS1NFTF9QTEwKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfSENMS1NFTF9MSVJDCisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtTRUwwX0hDTEtTRUxfSElSQzQ4CisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtTRUwwX0hDTEtTRUxfSElSQworICAqIEBwYXJhbVtpbl0gIHUzMkNsa0RpdiBpcyBIQ0xLIGNsb2NrIGRpdmlkZXIuIEluY2x1ZGluZyA6CisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtESVYwX0hDTEsoeCkKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBzZXQgSENMSyBjbG9jayBzb3VyY2UgYW5kIEhDTEsgY2xvY2sgZGl2aWRlci4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIENMS19TZXRIQ0xLKHVpbnQzMl90IHUzMkNsa1NyYywgdWludDMyX3QgdTMyQ2xrRGl2KQoreworICAgIHVpbnQzMl90IHUzMkhJUkNTVEI7CisKKyAgICAvKiBSZWFkIEhJUkMgY2xvY2sgc291cmNlIHN0YWJsZSBmbGFnICovCisgICAgdTMySElSQ1NUQiA9IENMSy0+U1RBVFVTICYgQ0xLX1NUQVRVU19ISVJDU1RCX01zazsKKworICAgIC8qIFN3aXRjaCB0byBISVJDIGZvciBTYWZlLiBBdm9pZCBIQ0xLIHRvbyBoaWdoIHdoZW4gYXBwbHlpbmcgbmV3IGRpdmlkZXIuICovCisgICAgQ0xLLT5QV1JDVEwgfD0gQ0xLX1BXUkNUTF9ISVJDRU5fTXNrOworICAgIENMS19XYWl0Q2xvY2tSZWFkeShDTEtfU1RBVFVTX0hJUkNTVEJfTXNrKTsKKyAgICBDTEstPkNMS1NFTDAgPSAoQ0xLLT5DTEtTRUwwICYgKH5DTEtfQ0xLU0VMMF9IQ0xLU0VMX01zaykpIHwgQ0xLX0NMS1NFTDBfSENMS1NFTF9ISVJDOworCisgICAgLyogRW5hYmxlIEZsYXNoIGFjY2VzcyBjeWNsZSBhdXRvLXR1bmluZyBmdW5jdGlvbiAqLworICAgIEZNQy0+Q1lDQ1RMICY9ICh+Rk1DX0NZQ0NUTF9GQURJU19Nc2spOworCisgICAgLyogQXBwbHkgbmV3IERpdmlkZXIgKi8KKyAgICBDTEstPkNMS0RJVjAgPSAoQ0xLLT5DTEtESVYwICYgKH5DTEtfQ0xLRElWMF9IQ0xLRElWX01zaykpIHwgdTMyQ2xrRGl2OworCisgICAgLyogRGlzYWJsZSBGbGFzaCBhY2Nlc3MgY3ljbGUgYXV0by10dW5pbmcgZnVuY3Rpb24gYW5kIHNldCBGbGFzaCBhY2Nlc3MgY3ljbGUgaWYgSENMSyBzd2l0Y2hlcyB0byBISVJDNDggKi8KKyAgICBpZih1MzJDbGtTcmMgPT0gQ0xLX0NMS1NFTDBfSENMS1NFTF9ISVJDNDgpCisgICAgeworICAgICAgICBGTUMtPkNZQ0NUTCA9IChGTUMtPkNZQ0NUTCAmICh+Rk1DX0NZQ0NUTF9DWUNMRV9Nc2spKSB8IEZNQ19DWUNDVExfRkFESVNfTXNrIHwgKDNVTCk7CisgICAgfQorCisgICAgLyogU3dpdGNoIEhDTEsgdG8gbmV3IEhDTEsgc291cmNlICovCisgICAgQ0xLLT5DTEtTRUwwID0gKENMSy0+Q0xLU0VMMCAmICh+Q0xLX0NMS1NFTDBfSENMS1NFTF9Nc2spKSB8IHUzMkNsa1NyYzsKKworICAgIC8qIFVwZGF0ZSBTeXN0ZW0gQ29yZSBDbG9jayAqLworICAgIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSgpOworCisgICAgLyogRGlzYWJsZSBISVJDIGlmIEhJUkMgaXMgZGlzYWJsZWQgYmVmb3JlIHN3aXRjaGluZyBIQ0xLIHNvdXJjZSAqLworICAgIGlmKHUzMkhJUkNTVEIgPT0gMFVMKQorICAgIHsKKyAgICAgICAgQ0xLLT5QV1JDVEwgJj0gfkNMS19QV1JDVExfSElSQ0VOX01zazsKKyAgICB9Cit9CisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIHNldCBzZWxlY3RlZCBtb2R1bGUgY2xvY2sgc291cmNlIGFuZCBtb2R1bGUgY2xvY2sgZGl2aWRlcgorICAqIEBwYXJhbVtpbl0gIHUzMk1vZHVsZUlkeCBpcyBtb2R1bGUgaW5kZXguCisgICogQHBhcmFtW2luXSAgdTMyQ2xrU3JjIGlzIG1vZHVsZSBjbG9jayBzb3VyY2UuCisgICogQHBhcmFtW2luXSAgdTMyQ2xrRGl2IGlzIG1vZHVsZSBjbG9jayBkaXZpZGVyLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBWYWxpZCBwYXJhbWV0ZXIgY29tYmluYXRpb25zIGxpc3RlZCBpbiBmb2xsb3dpbmcgdGFibGU6CisgICoKKyAgKiB8TW9kdWxlIGluZGV4ICAgICAgICB8Q2xvY2sgc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICB8RGl2aWRlciAgICAgICAgICAgICAgICAgICB8CisgICogfCA6LS0tLS0tLS0tLS0tLS0tLSAgfCA6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCA6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfAorICAqIHxccmVmIFNESDBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwwX1NESDBTRUxfSFhUICAgICAgICAgIHxccmVmIENMS19DTEtESVYwX1NESDAoeCkgIHwKKyAgKiB8XHJlZiBTREgwX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMF9TREgwU0VMX1BMTCAgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMF9TREgwKHgpICB8CisgICogfFxyZWYgU0RIMF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDBfU0RIMFNFTF9IQ0xLICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfU0RIMCh4KSAgfAorICAqIHxccmVmIFNESDBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwwX1NESDBTRUxfSElSQyAgICAgICAgIHxccmVmIENMS19DTEtESVYwX1NESDAoeCkgIHwKKyAgKiB8XHJlZiBXRFRfTU9EVUxFICAgICB8XHJlZiBDTEtfQ0xLU0VMMV9XRFRTRUxfTFhUICAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgV0RUX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDFfV0RUU0VMX0hDTEtfRElWMjA0OCAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFdEVF9NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwxX1dEVFNFTF9MSVJDICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBFQURDX01PRFVMRSAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMF9FQURDKHgpICB8CisgICogfFxyZWYgVE1SMF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SMFNFTF9IWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjBTRUxfTFhUICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIwX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIwU0VMX1BDTEswICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SMF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SMFNFTF9FWFRfVFJHICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjBTRUxfTElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIwX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIwU0VMX0hJUkMgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SMV9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SMVNFTF9IWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjFfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjFTRUxfTFhUICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIxX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIxU0VMX1BDTEswICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SMV9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SMVNFTF9FWFRfVFJHICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjFfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjFTRUxfTElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIxX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIxU0VMX0hJUkMgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SMl9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SMlNFTF9IWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjJfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjJTRUxfTFhUICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIyX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIyU0VMX1BDTEsxICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SMl9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SMlNFTF9FWFRfVFJHICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjJfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjJTRUxfTElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIyX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIyU0VMX0hJUkMgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SM19NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SM1NFTF9IWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjNfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjNTRUxfTFhUICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIzX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIzU0VMX1BDTEsxICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SM19NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SM1NFTF9FWFRfVFJHICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjNfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjNTRUxfTElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIzX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIzU0VMX0hJUkMgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVUFSVDBfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDFfVUFSVDBTRUxfSFhUICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfVUFSVDAoeCkgfAorICAqIHxccmVmIFVBUlQwX01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwxX1VBUlQwU0VMX1BMTCAgICAgICAgIHxccmVmIENMS19DTEtESVYwX1VBUlQwKHgpIHwKKyAgKiB8XHJlZiBVQVJUMF9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMMV9VQVJUMFNFTF9MWFQgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMF9VQVJUMCh4KSB8CisgICogfFxyZWYgVUFSVDBfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDFfVUFSVDBTRUxfSElSQyAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfVUFSVDAoeCkgfAorICAqIHxccmVmIFVBUlQxX01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwxX1VBUlQxU0VMX0hYVCAgICAgICAgIHxccmVmIENMS19DTEtESVYwX1VBUlQxKHgpIHwKKyAgKiB8XHJlZiBVQVJUMV9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMMV9VQVJUMVNFTF9QTEwgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMF9VQVJUMSh4KSB8CisgICogfFxyZWYgVUFSVDFfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDFfVUFSVDFTRUxfTFhUICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfVUFSVDEoeCkgfAorICAqIHxccmVmIFVBUlQxX01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwxX1VBUlQxU0VMX0hJUkMgICAgICAgIHxccmVmIENMS19DTEtESVYwX1VBUlQxKHgpIHwKKyAgKiB8XHJlZiBVQVJUMl9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMM19VQVJUMlNFTF9IWFQgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWNF9VQVJUMih4KSB8CisgICogfFxyZWYgVUFSVDJfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDNfVUFSVDJTRUxfUExMICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjRfVUFSVDIoeCkgfAorICAqIHxccmVmIFVBUlQyX01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwzX1VBUlQyU0VMX0xYVCAgICAgICAgIHxccmVmIENMS19DTEtESVY0X1VBUlQyKHgpIHwKKyAgKiB8XHJlZiBVQVJUMl9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMM19VQVJUMlNFTF9ISVJDICAgICAgICB8XHJlZiBDTEtfQ0xLRElWNF9VQVJUMih4KSB8CisgICogfFxyZWYgVUFSVDNfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDNfVUFSVDNTRUxfSFhUICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjRfVUFSVDMoeCkgfAorICAqIHxccmVmIFVBUlQzX01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwzX1VBUlQzU0VMX1BMTCAgICAgICAgIHxccmVmIENMS19DTEtESVY0X1VBUlQzKHgpIHwKKyAgKiB8XHJlZiBVQVJUM19NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMM19VQVJUM1NFTF9MWFQgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWNF9VQVJUMyh4KSB8CisgICogfFxyZWYgVUFSVDNfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDNfVUFSVDNTRUxfSElSQyAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjRfVUFSVDMoeCkgfAorICAqIHxccmVmIFVBUlQ0X01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwzX1VBUlQ0U0VMX0hYVCAgICAgICAgIHxccmVmIENMS19DTEtESVY0X1VBUlQ0KHgpIHwKKyAgKiB8XHJlZiBVQVJUNF9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMM19VQVJUNFNFTF9QTEwgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWNF9VQVJUNCh4KSB8CisgICogfFxyZWYgVUFSVDRfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDNfVUFSVDRTRUxfTFhUICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjRfVUFSVDQoeCkgfAorICAqIHxccmVmIFVBUlQ0X01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwzX1VBUlQ0U0VMX0hJUkMgICAgICAgIHxccmVmIENMS19DTEtESVY0X1VBUlQ0KHgpIHwKKyAgKiB8XHJlZiBVQVJUNV9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMM19VQVJUNVNFTF9IWFQgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWNF9VQVJUNSh4KSB8CisgICogfFxyZWYgVUFSVDVfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDNfVUFSVDVTRUxfUExMICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjRfVUFSVDUoeCkgfAorICAqIHxccmVmIFVBUlQ1X01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwzX1VBUlQ1U0VMX0xYVCAgICAgICAgIHxccmVmIENMS19DTEtESVY0X1VBUlQ1KHgpIHwKKyAgKiB8XHJlZiBVQVJUNV9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMM19VQVJUNVNFTF9ISVJDICAgICAgICB8XHJlZiBDTEtfQ0xLRElWNF9VQVJUNSh4KSB8CisgICogfFxyZWYgQ0xLT19NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfQ0xLT1NFTF9IWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIENMS09fTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX0NMS09TRUxfTFhUICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBDTEtPX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9DTEtPU0VMX0hDTEsgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgQ0xLT19NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfQ0xLT1NFTF9ISVJDICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFdXRFRfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1dXRFRTRUxfSENMS19ESVYyMDQ4IHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBXV0RUX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9XV0RUU0VMX0xJUkMgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgUlRDX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDNfUlRDU0VMX0xYVCAgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFJUQ19NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwzX1JUQ1NFTF9MSVJDICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBJMlMwX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMM19JMlMwU0VMX0hYVCAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgSTJTMF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDNfSTJTMFNFTF9QTEwgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIEkyUzBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwzX0kyUzBTRUxfUENMSzAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBJMlMwX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMM19JMlMwU0VMX0hJUkMgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgUVNQSTBfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfSFhUICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFFTUEkwX01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwyX1FTUEkwU0VMX1BMTCAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBRU1BJMF9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9QQ0xLMCAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgUVNQSTBfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfSElSQyAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFNQSTBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwyX1NQSTBTRUxfSFhUICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBTUEkwX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BMTCAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgU1BJMF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDJfU1BJMFNFTF9QQ0xLMSAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFNQSTBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwyX1NQSTBTRUxfSElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBTUEkxX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMl9TUEkxU0VMX0hYVCAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgU1BJMV9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDJfU1BJMVNFTF9QTEwgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFNQSTFfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwyX1NQSTFTRUxfUENMSzAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBTUEkxX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMl9TUEkxU0VMX0hJUkMgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgU1BJMl9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDJfU1BJMlNFTF9IWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFNQSTJfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwyX1NQSTJTRUxfUExMICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBTUEkyX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BDTEsxICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgU1BJMl9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDJfU1BJMlNFTF9ISVJDICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFNQSTNfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwyX1NQSTNTRUxfSFhUICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBTUEkzX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BMTCAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgU1BJM19NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDJfU1BJM1NFTF9QQ0xLMCAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFNQSTNfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwyX1NQSTNTRUxfSElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBTQzBfTU9EVUxFICAgICB8XHJlZiBDTEtfQ0xLU0VMM19TQzBTRUxfSFhUICAgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMV9TQzAoeCkgICB8CisgICogfFxyZWYgU0MwX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDNfU0MwU0VMX1BMTCAgICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjFfU0MwKHgpICAgfAorICAqIHxccmVmIFNDMF9NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwzX1NDMFNFTF9QQ0xLMCAgICAgICAgIHxccmVmIENMS19DTEtESVYxX1NDMCh4KSAgIHwKKyAgKiB8XHJlZiBTQzBfTU9EVUxFICAgICB8XHJlZiBDTEtfQ0xLU0VMM19TQzBTRUxfSElSQyAgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMV9TQzAoeCkgICB8CisgICogfFxyZWYgU0MxX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDNfU0MxU0VMX0hYVCAgICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjFfU0MxKHgpICAgfAorICAqIHxccmVmIFNDMV9NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwzX1NDMVNFTF9QTEwgICAgICAgICAgIHxccmVmIENMS19DTEtESVYxX1NDMSh4KSAgIHwKKyAgKiB8XHJlZiBTQzFfTU9EVUxFICAgICB8XHJlZiBDTEtfQ0xLU0VMM19TQzFTRUxfUENMSzEgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMV9TQzEoeCkgICB8CisgICogfFxyZWYgU0MxX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDNfU0MxU0VMX0hJUkMgICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjFfU0MxKHgpICAgfAorICAqIHxccmVmIFNDMl9NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwzX1NDMlNFTF9IWFQgICAgICAgICAgIHxccmVmIENMS19DTEtESVYxX1NDMih4KSAgIHwKKyAgKiB8XHJlZiBTQzJfTU9EVUxFICAgICB8XHJlZiBDTEtfQ0xLU0VMM19TQzJTRUxfUExMICAgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMV9TQzIoeCkgICB8CisgICogfFxyZWYgU0MyX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDNfU0MyU0VMX1BDTEswICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjFfU0MyKHgpICAgfAorICAqIHxccmVmIFNDMl9NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwzX1NDMlNFTF9ISVJDICAgICAgICAgIHxccmVmIENMS19DTEtESVYxX1NDMih4KSAgIHwKKyAgKiB8XHJlZiBVU0JIX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMF9VU0JTRUxfSElSQzQ4ICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMF9VU0IoeCkgICB8CisgICogfFxyZWYgVVNCSF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDBfVVNCU0VMX1BMTCAgICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfVVNCKHgpICAgfAorICAqIHxccmVmIE9UR19NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwwX1VTQlNFTF9ISVJDNDggICAgICAgIHxccmVmIENMS19DTEtESVYwX1VTQih4KSAgIHwKKyAgKiB8XHJlZiBPVEdfTU9EVUxFICAgICB8XHJlZiBDTEtfQ0xLU0VMMF9VU0JTRUxfUExMICAgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMF9VU0IoeCkgICB8CisgICogfFxyZWYgVVNCRF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDBfVVNCU0VMX0hJUkM0OCAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfVVNCKHgpICAgfAorICAqIHxccmVmIFVTQkRfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwwX1VTQlNFTF9QTEwgICAgICAgICAgIHxccmVmIENMS19DTEtESVYwX1VTQih4KSAgIHwKKyAgKi8KK3ZvaWQgQ0xLX1NldE1vZHVsZUNsb2NrKHVpbnQzMl90IHUzMk1vZHVsZUlkeCwgdWludDMyX3QgdTMyQ2xrU3JjLCB1aW50MzJfdCB1MzJDbGtEaXYpCit7CisgICAgdWludDMyX3QgdTMyU2VsID0gMFVMLCB1MzJEaXYgPSAwVUw7CisgICAgdWludDMyX3QgYXUzMlNlbFRibFs0XSA9IHsweDBVTCwgMHg0VUwsIDB4OFVMLCAweENVTH07CisgICAgdWludDMyX3QgYXUzMkRpdlRibFs0XSA9IHsweDBVTCwgMHg0VUwsIDB4OFVMLCAweDEwVUx9OworCisgICAgaWYoTU9EVUxFX0NMS0RJVl9Nc2sodTMyTW9kdWxlSWR4KSAhPSBNT0RVTEVfTm9Nc2spCisgICAgeworICAgICAgICAvKiBHZXQgY2xvY2sgZGl2aWRlciBjb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKyAgICAgICAgdTMyRGl2ID0gKHVpbnQzMl90KSZDTEstPkNMS0RJVjAgKyAoYXUzMkRpdlRibFtNT0RVTEVfQ0xLRElWKHUzMk1vZHVsZUlkeCldKTsKKyAgICAgICAgLyogQXBwbHkgbmV3IGRpdmlkZXIgKi8KKyAgICAgICAgTTMyKHUzMkRpdikgPSAoTTMyKHUzMkRpdikgJiAofihNT0RVTEVfQ0xLRElWX01zayh1MzJNb2R1bGVJZHgpIDw8IE1PRFVMRV9DTEtESVZfUG9zKHUzMk1vZHVsZUlkeCkpKSkgfCB1MzJDbGtEaXY7CisgICAgfQorCisgICAgaWYoTU9EVUxFX0NMS1NFTF9Nc2sodTMyTW9kdWxlSWR4KSAhPSBNT0RVTEVfTm9Nc2spCisgICAgeworICAgICAgICAvKiBHZXQgY2xvY2sgc2VsZWN0IGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyAqLworICAgICAgICB1MzJTZWwgPSAodWludDMyX3QpJkNMSy0+Q0xLU0VMMCArIChhdTMyU2VsVGJsW01PRFVMRV9DTEtTRUwodTMyTW9kdWxlSWR4KV0pOworICAgICAgICAvKiBTZXQgbmV3IGNsb2NrIHNlbGVjdGlvbiBzZXR0aW5nICovCisgICAgICAgIE0zMih1MzJTZWwpID0gKE0zMih1MzJTZWwpICYgKH4oTU9EVUxFX0NMS1NFTF9Nc2sodTMyTW9kdWxlSWR4KSA8PCBNT0RVTEVfQ0xLU0VMX1Bvcyh1MzJNb2R1bGVJZHgpKSkpIHwgdTMyQ2xrU3JjOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFN5c1RpY2sgY2xvY2sgc291cmNlCisgICogQHBhcmFtW2luXSAgdTMyQ2xrU3JjIGlzIG1vZHVsZSBjbG9jayBzb3VyY2UuIEluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfSFhUCisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtTRUwwX1NUQ0xLU0VMX0xYVAorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMF9TVENMS1NFTF9IWFRfRElWMgorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMF9TVENMS1NFTF9IQ0xLX0RJVjIKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfSElSQ19ESVYyCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gc2V0IFN5c1RpY2sgY2xvY2sgc291cmNlLiBcbgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgQ0xLX1NldFN5c1RpY2tDbG9ja1NyYyh1aW50MzJfdCB1MzJDbGtTcmMpCit7CisgICAgQ0xLLT5DTEtTRUwwID0gKENMSy0+Q0xLU0VMMCAmIH5DTEtfQ0xLU0VMMF9TVENMS1NFTF9Nc2spIHwgdTMyQ2xrU3JjOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgY2xvY2sgc291cmNlCisgICogQHBhcmFtW2luXSAgdTMyQ2xrTWFzayBpcyBjbG9jayBzb3VyY2UgbWFzay4gSW5jbHVkaW5nIDoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BXUkNUTF9IWFRFTl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BXUkNUTF9MWFRFTl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BXUkNUTF9ISVJDRU5fTXNrCisgICogICAgICAgICAgICAgLSBccmVmIENMS19QV1JDVExfTElSQ0VOX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUFdSQ1RMX0hJUkM0OEVOX01zaworICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZSBjbG9jayBzb3VyY2UuIFxuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBDTEtfRW5hYmxlWHRhbFJDKHVpbnQzMl90IHUzMkNsa01hc2spCit7CisgICAgQ0xLLT5QV1JDVEwgfD0gdTMyQ2xrTWFzazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBjbG9jayBzb3VyY2UKKyAgKiBAcGFyYW1baW5dICB1MzJDbGtNYXNrIGlzIGNsb2NrIHNvdXJjZSBtYXNrLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUFdSQ1RMX0hYVEVOX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUFdSQ1RMX0xYVEVOX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUFdSQ1RMX0hJUkNFTl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BXUkNUTF9MSVJDRU5fTXNrCisgICogICAgICAgICAgICAgLSBccmVmIENMS19QV1JDVExfSElSQzQ4RU5fTXNrCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZGlzYWJsZSBjbG9jayBzb3VyY2UuIFxuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBDTEtfRGlzYWJsZVh0YWxSQyh1aW50MzJfdCB1MzJDbGtNYXNrKQoreworICAgIENMSy0+UFdSQ1RMICY9IH51MzJDbGtNYXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZSBtb2R1bGUgY2xvY2sKKyAgKiBAcGFyYW1baW5dICB1MzJNb2R1bGVJZHggaXMgbW9kdWxlIGluZGV4LiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBQRE1BMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUERNQTFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIElTUF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRUJJX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTREgwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBDUkNfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIENSUFRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEZNQ0lETEVfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVTQkhfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFdEVF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgV1dEVF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUlRDX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBUTVIwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBUTVIxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBUTVIyX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBUTVIzX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtPX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBBQ01QMDFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEkyQzBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEkyQzFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEkyQzJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFFTUEkwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkyX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkzX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQyX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUM19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQ1X01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBDQU4wX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBPVEdfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVTQkRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEVBRENfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEkyUzBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNDMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0MxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTQzJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVTQ0kwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVU0NJMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgREFDX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBFUFdNMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRVBXTTFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEJQV00wX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBCUFdNMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUUVJMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUUVJMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUUVJMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVFJOR19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRUNBUDBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEVDQVAxX01PRFVMRQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZSBtb2R1bGUgY2xvY2suCisgICovCit2b2lkIENMS19FbmFibGVNb2R1bGVDbG9jayh1aW50MzJfdCB1MzJNb2R1bGVJZHgpCit7CisgICAgdWludDMyX3QgdTMyVG1wVmFsID0gMFVMLCB1MzJUbXBBZGRyID0gMFVMOworCisgICAgdTMyVG1wVmFsID0gKDFVTCA8PCBNT0RVTEVfSVBfRU5fUG9zKHUzMk1vZHVsZUlkeCkpOworICAgIHUzMlRtcEFkZHIgPSAodWludDMyX3QpJkNMSy0+QUhCQ0xLOworICAgIHUzMlRtcEFkZHIgKz0gKChNT0RVTEVfQVBCQ0xLKHUzMk1vZHVsZUlkeCkgKiA0VUwpKTsKKworICAgICoodm9sYXRpbGUgdWludDMyX3QgKil1MzJUbXBBZGRyIHw9IHUzMlRtcFZhbDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIG1vZHVsZSBjbG9jaworICAqIEBwYXJhbVtpbl0gIHUzMk1vZHVsZUlkeCBpcyBtb2R1bGUgaW5kZXgKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUERNQTBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFBETUExX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBJU1BfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEVCSV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0RIMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ1JDX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBDUlBUX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBGTUNJRExFX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVU0JIX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBXRFRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFdXRFRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFJUQ19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVE1SMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVE1SMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVE1SMl9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVE1SM19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLT19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQUNNUDAxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBJMkMwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBJMkMxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBJMkMyX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBRU1BJMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1BJMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1BJMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1BJMl9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1BJM19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUMl9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDNfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQ0X01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUNV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0FOMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgT1RHX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVU0JEX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBFQURDX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBJMlMwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTQzBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNDMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0MyX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVU0NJMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVVNDSTFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIERBQ19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRVBXTTBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEVQV00xX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBCUFdNMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQlBXTTFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFFFSTBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFFFSTFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFFFSTBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFRSTkdfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEVDQVAwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBFQ0FQMV9NT0RVTEUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIG1vZHVsZSBjbG9jay4KKyAgKi8KK3ZvaWQgQ0xLX0Rpc2FibGVNb2R1bGVDbG9jayh1aW50MzJfdCB1MzJNb2R1bGVJZHgpCit7CisgICAgdWludDMyX3QgdTMyVG1wVmFsID0gMFVMLCB1MzJUbXBBZGRyID0gMFVMOworCisgICAgdTMyVG1wVmFsID0gfigxVUwgPDwgTU9EVUxFX0lQX0VOX1Bvcyh1MzJNb2R1bGVJZHgpKTsKKyAgICB1MzJUbXBBZGRyID0gKHVpbnQzMl90KSZDTEstPkFIQkNMSzsKKyAgICB1MzJUbXBBZGRyICs9ICgoTU9EVUxFX0FQQkNMSyh1MzJNb2R1bGVJZHgpICogNFVMKSk7CisKKyAgICAqKHVpbnQzMl90ICopdTMyVG1wQWRkciAmPSB1MzJUbXBWYWw7Cit9CisKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFBMTCBmcmVxdWVuY3kKKyAgKiBAcGFyYW1baW5dICB1MzJQbGxDbGtTcmMgaXMgUExMIGNsb2NrIHNvdXJjZS4gSW5jbHVkaW5nIDoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BMTENUTF9QTExTUkNfSFhUCisgICogICAgICAgICAgICAgLSBccmVmIENMS19QTExDVExfUExMU1JDX0hJUkMKKyAgKiBAcGFyYW1baW5dICB1MzJQbGxGcmVxIGlzIFBMTCBmcmVxdWVuY3kuIFRoZSByYW5nZSBvZiB1MzJQbGxGcmVxIGlzIDI0IE1IeiB+IDE0NCBNSHouCisgICogQHJldHVybiAgICAgUExMIGZyZXF1ZW5jeQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgUExMQ1RMIHJlZ2lzdGVyIHRvIHNldCBzcGVjaWZpZWQgUExMIGZyZXF1ZW5jeS4gXG4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit1aW50MzJfdCBDTEtfRW5hYmxlUExMKHVpbnQzMl90IHUzMlBsbENsa1NyYywgdWludDMyX3QgdTMyUGxsRnJlcSkKK3sKKyAgICB1aW50MzJfdCB1MzJQbGxTcmNDbGssIHUzMk5SLCB1MzJORiwgdTMyTk8sIHUzMlBsbENsazsKKyAgICB1aW50MzJfdCB1MzJUbXAsIHUzMlRtcDIsIHUzMlRtcDMsIHUzMk1pbiwgdTMyTWluTkYsIHUzMk1pbk5SOworCisgICAgLyogRGlzYWJsZSBQTEwgZmlyc3QgdG8gYXZvaWQgdW5zdGFibGUgd2hlbiBzZXR0aW5nIFBMTCAqLworICAgIENMS19EaXNhYmxlUExMKCk7CisKKyAgICAvKiBQTEwgc291cmNlIGNsb2NrIGlzIGZyb20gSFhUICovCisgICAgaWYodTMyUGxsQ2xrU3JjID09IENMS19QTExDVExfUExMU1JDX0hYVCkKKyAgICB7CisKKyAgICAgICAgLyogRW5hYmxlIEhYVCBjbG9jayAqLworICAgICAgICBDTEstPlBXUkNUTCB8PSBDTEtfUFdSQ1RMX0hYVEVOX01zazsKKworICAgICAgICAvKiBXYWl0IGZvciBIWFQgY2xvY2sgcmVhZHkgKi8KKyAgICAgICAgQ0xLX1dhaXRDbG9ja1JlYWR5KENMS19TVEFUVVNfSFhUU1RCX01zayk7CisKKyAgICAgICAgLyogU2VsZWN0IFBMTCBzb3VyY2UgY2xvY2sgZnJvbSBIWFQgKi8KKyAgICAgICAgdTMyUGxsU3JjQ2xrID0gX19IWFQ7CisgICAgfQorCisgICAgLyogUExMIHNvdXJjZSBjbG9jayBpcyBmcm9tIEhJUkMgKi8KKyAgICBlbHNlCisgICAgeworCisgICAgICAgIC8qIEVuYWJsZSBISVJDIGNsb2NrICovCisgICAgICAgIENMSy0+UFdSQ1RMIHw9IENMS19QV1JDVExfSElSQ0VOX01zazsKKworICAgICAgICAvKiBXYWl0IGZvciBISVJDIGNsb2NrIHJlYWR5ICovCisgICAgICAgIENMS19XYWl0Q2xvY2tSZWFkeShDTEtfU1RBVFVTX0hJUkNTVEJfTXNrKTsKKworICAgICAgICAvKiBTZWxlY3QgUExMIHNvdXJjZSBjbG9jayBmcm9tIEhJUkMgKi8KKyAgICAgICAgdTMyUGxsU3JjQ2xrID0gX19ISVJDOworICAgIH0KKworICAgIC8qIENoZWNrIFBMTCBmcmVxdWVuY3kgcmFuZ2UgKi8KKyAgICBpZigodTMyUGxsRnJlcSA8PSBGUkVRXzE0NE1IWikgJiYgKHUzMlBsbEZyZXEgPj0gRlJFUV8yNE1IWikpCisgICAgeworCisgICAgICAgIC8qIFNlbGVjdCAiTk8iIGFjY29yZGluZyB0byByZXF1ZXN0IGZyZXF1ZW5jeSAqLworICAgICAgICBpZigodTMyUGxsRnJlcSA8IEZSRVFfNDhNSFopICYmICh1MzJQbGxGcmVxID49IEZSRVFfMjRNSFopKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJOTyA9IDNVTDsKKyAgICAgICAgICAgIHUzMlBsbEZyZXEgPSB1MzJQbGxGcmVxIDw8IDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigodTMyUGxsRnJlcSA8IEZSRVFfOTZNSFopICYmICh1MzJQbGxGcmVxID49IEZSRVFfNDhNSFopKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJOTyA9IDFVTDsKKyAgICAgICAgICAgIHUzMlBsbEZyZXEgPSB1MzJQbGxGcmVxIDw8IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJOTyA9IDBVTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHUzMk5SIHN0YXJ0IGZyb20gMyB0byBhdm9pZCBjYWxjdWxhdGlvbiBvdmVyZmxvdyAqLworICAgICAgICB1MzJOUiA9IDNVTDsKKworICAgICAgICAvKiBGaW5kIGJlc3Qgc29sdXRpb24gKi8KKyAgICAgICAgdTMyTWluID0gKHVpbnQzMl90KSAtIDE7CisgICAgICAgIHUzMk1pbk5SID0gMFVMOworICAgICAgICB1MzJNaW5ORiA9IDBVTDsKKworICAgICAgICBmb3IoOyB1MzJOUiA8PSAzMlVMOyB1MzJOUisrKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJUbXAgPSB1MzJQbGxTcmNDbGsgLyB1MzJOUjsKKyAgICAgICAgICAgIGlmKCh1MzJUbXAgPj0gRlJFUV8yTUhaKSAmJiAodTMyVG1wIDw9IEZSRVFfOE1IWikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yKHUzMk5GID0gMlVMOyB1MzJORiA8PSA1MTNVTDsgdTMyTkYrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlRtcDIgPSAodTMyVG1wICogdTMyTkYpIDw8IDE7CisgICAgICAgICAgICAgICAgICAgIGlmKCh1MzJUbXAyID49IEZSRVFfOTZNSFopICYmICh1MzJUbXAyIDw9IEZSRVFfMjAwTUhaKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdTMyVG1wMyA9ICh1MzJUbXAyID4gdTMyUGxsRnJlcSkgPyB1MzJUbXAyIC0gdTMyUGxsRnJlcSA6IHUzMlBsbEZyZXEgLSB1MzJUbXAyOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodTMyVG1wMyA8IHUzMk1pbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzJNaW4gPSB1MzJUbXAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMk1pbk5SID0gdTMyTlI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyTWluTkYgPSB1MzJORjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJyZWFrIHdoZW4gZ2V0IGdvb2QgcmVzdWx0cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHUzMk1pbiA9PSAwVUwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBFbmFibGUgYW5kIGFwcGx5IG5ldyBQTEwgc2V0dGluZy4gKi8KKyAgICAgICAgQ0xLLT5QTExDVEwgPSB1MzJQbGxDbGtTcmMgfCAodTMyTk8gPDwgMTQpIHwgKCh1MzJNaW5OUiAtIDFVTCkgPDwgOSkgfCAodTMyTWluTkYgLSAyVUwpOworCisgICAgICAgIC8qIEFjdHVhbCBQTEwgb3V0cHV0IGNsb2NrIGZyZXF1ZW5jeSAqLworICAgICAgICB1MzJQbGxDbGsgPSB1MzJQbGxTcmNDbGsgLyAoKHUzMk5PICsgMVVMKSAqIHUzMk1pbk5SKSAqICh1MzJNaW5ORiA8PCAxKTsKKworICAgIH0KKyAgICBlbHNlCisgICAgeworCisgICAgICAgIC8qIFdyb25nIGZyZXF1ZW5jeSByZXF1ZXN0LiBKdXN0IHJldHVybiBkZWZhdWx0IHNldHRpbmcuICovCisgICAgICAgIGlmKChTWVMtPlBMU1RTICYgU1lTX1BMU1RTX1BMU1RBVFVTX01zaykgPT0gU1lTX1BMQ1RMX1BMU0VMX1BMMCkKKyAgICAgICAgeworCisgICAgICAgICAgICAvKiBBcHBseSBkZWZhdWx0IFBMTCBzZXR0aW5nIGFuZCByZXR1cm4gKi8KKyAgICAgICAgICAgIENMSy0+UExMQ1RMID0gdTMyUGxsQ2xrU3JjIHwgQ0xLX1BMTENUTF82NE1Iel9IWFQ7CisKKyAgICAgICAgICAgIC8qIEFjdHVhbCBQTEwgb3V0cHV0IGNsb2NrIGZyZXF1ZW5jeSAqLworICAgICAgICAgICAgdTMyUGxsQ2xrID0gRlJFUV82NE1IWjsKKworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworCisgICAgICAgICAgICAvKiBBcHBseSBkZWZhdWx0IFBMTCBzZXR0aW5nIGFuZCByZXR1cm4gKi8KKyAgICAgICAgICAgIENMSy0+UExMQ1RMID0gdTMyUGxsQ2xrU3JjIHwgQ0xLX1BMTENUTF80OE1Iel9IWFQ7CisKKyAgICAgICAgICAgIC8qIEFjdHVhbCBQTEwgb3V0cHV0IGNsb2NrIGZyZXF1ZW5jeSAqLworICAgICAgICAgICAgdTMyUGxsQ2xrID0gRlJFUV80OE1IWjsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgLyogV2FpdCBmb3IgUExMIGNsb2NrIHN0YWJsZSAqLworICAgIENMS19XYWl0Q2xvY2tSZWFkeShDTEtfU1RBVFVTX1BMTFNUQl9Nc2spOworCisgICAgLyogUmV0dXJuIGFjdHVhbCBQTEwgb3V0cHV0IGNsb2NrIGZyZXF1ZW5jeSAqLworICAgIHJldHVybiB1MzJQbGxDbGs7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgUExMCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHNldCBQTEwgaW4gUG93ZXItZG93biBtb2RlLiBcbgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgQ0xLX0Rpc2FibGVQTEwodm9pZCkKK3sKKyAgICBDTEstPlBMTENUTCB8PSBDTEtfUExMQ1RMX1BEX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBmdW5jdGlvbiBjaGVjayBzZWxlY3RlZCBjbG9jayBzb3VyY2Ugc3RhdHVzCisgICogQHBhcmFtW2luXSAgdTMyQ2xrTWFzayBpcyBzZWxlY3RlZCBjbG9jayBzb3VyY2UuIEluY2x1ZGluZyA6CisgICogICAgICAgICAgICAgLSBccmVmIENMS19TVEFUVVNfSFhUU1RCX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1RBVFVTX0xYVFNUQl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NUQVRVU19ISVJDU1RCX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1RBVFVTX0xJUkNTVEJfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIENMS19TVEFUVVNfUExMU1RCX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1RBVFVTX0hJUkM0OFNUQl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NUQVRVU19FWFRMWFRTVEJfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIENMS19TVEFUVVNfTElSQzMyU1RCX01zaworICAqIEByZXR2YWwgICAgIDAgIGNsb2NrIGlzIG5vdCBzdGFibGUKKyAgKiBAcmV0dmFsICAgICAxICBjbG9jayBpcyBzdGFibGUKKyAgKiBAZGV0YWlscyAgICBUbyB3YWl0IGZvciBjbG9jayByZWFkeSBieSBzcGVjaWZpZWQgY2xvY2sgc291cmNlIHN0YWJsZSBmbGFnIG9yIHRpbWVvdXQgKH4zMDBtcykKKyAgKi8KK3VpbnQzMl90IENMS19XYWl0Q2xvY2tSZWFkeSh1aW50MzJfdCB1MzJDbGtNYXNrKQoreworICAgIGludDMyX3QgaTMyVGltZU91dENudCA9IDI0MDAwMDA7CisgICAgdWludDMyX3QgdTMyUmV0ID0gMVU7CisKKyAgICB3aGlsZSgoQ0xLLT5TVEFUVVMgJiB1MzJDbGtNYXNrKSAhPSB1MzJDbGtNYXNrKQorICAgIHsKKyAgICAgICAgaWYoaTMyVGltZU91dENudC0tIDw9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlJldCA9IDBVOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHUzMlJldDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFN5c3RlbSBUaWNrIGNvdW50ZXIKKyAgKiBAcGFyYW1baW5dICB1MzJDbGtTcmMgaXMgU3lzdGVtIFRpY2sgY2xvY2sgc291cmNlLiBJbmNsdWRpbmc6CisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtTRUwwX1NUQ0xLU0VMX0hYVAorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMF9TVENMS1NFTF9MWFQKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfSFhUX0RJVjIKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfSENMS19ESVYyCisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtTRUwwX1NUQ0xLU0VMX0hJUkNfRElWMgorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMF9TVENMS1NFTF9IQ0xLCisgICogQHBhcmFtW2luXSAgdTMyQ291bnQgaXMgU3lzdGVtIFRpY2sgcmVsb2FkIHZhbHVlLiBJdCBjb3VsZCBiZSAwfjB4RkZGRkZGLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHNldCBTeXN0ZW0gVGljayBjbG9jayBzb3VyY2UsIHJlbG9hZCB2YWx1ZSwgZW5hYmxlIFN5c3RlbSBUaWNrIGNvdW50ZXIgYW5kIGludGVycnVwdC4gXG4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIENMS19FbmFibGVTeXNUaWNrKHVpbnQzMl90IHUzMkNsa1NyYywgdWludDMyX3QgdTMyQ291bnQpCit7CisgICAgLyogU2V0IFN5c3RlbSBUaWNrIGNvdW50ZXIgZGlzYWJsZWQgKi8KKyAgICBTeXNUaWNrLT5DVFJMID0gMFVMOworCisgICAgLyogU2V0IFN5c3RlbSBUaWNrIGNsb2NrIHNvdXJjZSAqLworICAgIGlmKHUzMkNsa1NyYyA9PSBDTEtfQ0xLU0VMMF9TVENMS1NFTF9IQ0xLKQorICAgIHsKKyAgICAgICAgU3lzVGljay0+Q1RSTCB8PSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQ0xLLT5DTEtTRUwwID0gKENMSy0+Q0xLU0VMMCAmIH5DTEtfQ0xLU0VMMF9TVENMS1NFTF9Nc2spIHwgdTMyQ2xrU3JjOworICAgIH0KKworICAgIC8qIFNldCBTeXN0ZW0gVGljayByZWxvYWQgdmFsdWUgKi8KKyAgICBTeXNUaWNrLT5MT0FEID0gdTMyQ291bnQ7CisKKyAgICAvKiBDbGVhciBTeXN0ZW0gVGljayBjdXJyZW50IHZhbHVlIGFuZCBjb3VudGVyIGZsYWcgKi8KKyAgICBTeXNUaWNrLT5WQUwgPSAwVUw7CisKKyAgICAvKiBTZXQgU3lzdGVtIFRpY2sgaW50ZXJydXB0IGVuYWJsZWQgYW5kIGNvdW50ZXIgZW5hYmxlZCAqLworICAgIFN5c1RpY2stPkNUUkwgfD0gU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrIHwgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgU3lzdGVtIFRpY2sgY291bnRlcgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIFN5c3RlbSBUaWNrIGNvdW50ZXIuCisgICovCit2b2lkIENMS19EaXNhYmxlU3lzVGljayh2b2lkKQoreworICAgIC8qIFNldCBTeXN0ZW0gVGljayBjb3VudGVyIGRpc2FibGVkICovCisgICAgU3lzVGljay0+Q1RSTCA9IDBVTDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgUG93ZXItZG93biBtb2RlIHNlbGVjdGVkCisgICogQHBhcmFtW2luXSAgdTMyUERNb2RlIGlzIHBvd2VyIGRvd24gbW9kZSBpbmRleC4gSW5jbHVkaW5nIDoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BNVUNUTF9QRE1TRUxfUEQKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BNVUNUTF9QRE1TRUxfTExQRAorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUE1VQ1RMX1BETVNFTF9GV1BECisgICogICAgICAgICAgICAgLSBccmVmIENMS19QTVVDVExfUERNU0VMX1VMTFBECisgICogICAgICAgICAgICAgLSBccmVmIENMS19QTVVDVExfUERNU0VMX1NQRAorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUE1VQ1RMX1BETVNFTF9EUEQKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBwb3dlci1kb3duIG1vZGUuCisgICovCit2b2lkIENMS19TZXRQb3dlckRvd25Nb2RlKHVpbnQzMl90IHUzMlBETW9kZSkKK3sKKyAgICBDTEstPlBNVUNUTCA9IChDTEstPlBNVUNUTCAmICh+Q0xLX1BNVUNUTF9QRE1TRUxfTXNrKSkgfCAodTMyUERNb2RlKTsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IFdha2UtdXAgcGluIHRyaWdnZXIgdHlwZSBhdCBEZWVwIFBvd2VyIGRvd24gbW9kZQorICogQHBhcmFtW2luXSAgIHUzMlRyaWdnZXJUeXBlIFdha2UtdXAgcGluIHRyaWdnZXIgdHlwZQorICogICAgICAgICAgICAgIC0gXHJlZiBDTEtfRFBEV0tQSU5fUklTSU5HCisgKiAgICAgICAgICAgICAgLSBccmVmIENMS19EUERXS1BJTl9GQUxMSU5HCisgKiAgICAgICAgICAgICAgLSBccmVmIENMS19EUERXS1BJTl9CT1RIRURHRQorICogQHJldHVybiAgICAgIE5vbmUKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIFdha2UtdXAgcGluIHRyaWdnZXIgdHlwZS4KKyAqLworCit2b2lkIENMS19FbmFibGVEUERXS1Bpbih1aW50MzJfdCB1MzJUcmlnZ2VyVHlwZSkKK3sKKyAgICBDTEstPlBNVUNUTCA9IChDTEstPlBNVUNUTCAmICh+Q0xLX1BNVUNUTF9XS1BJTkVOX01zaykpIHwgKHUzMlRyaWdnZXJUeXBlKTsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgR2V0IHBvd2VyIG1hbmFnZXIgd2FrZSB1cCBzb3VyY2UKKyAqIEBwYXJhbVtpbl0gICBOb25lCisgKiBAcmV0dXJuICAgICAgTm9uZQorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gZ2V0IHBvd2VyIG1hbmFnZXIgd2FrZSB1cCBzb3VyY2UuCisgKi8KKwordWludDMyX3QgQ0xLX0dldFBNVVdLU3JjKHZvaWQpCit7CisgICAgcmV0dXJuIChDTEstPlBNVVNUUyk7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBzcGVjaWZpZWQgR1BJTyBhcyB3YWtlIHVwIHNvdXJjZSBhdCBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZQorICogQHBhcmFtW2luXSAgIHUzMlBvcnQgR1BJTyBwb3J0LiBJdCBjb3VsZCBiZSAwfjMuCisgKiBAcGFyYW1baW5dICAgdTMyUGluICBUaGUgcGluIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIDAgfiAxNS4KKyAqIEBwYXJhbVtpbl0gICB1MzJUcmlnZ2VyVHlwZSBXYWtlLXVwIHBpbiB0cmlnZ2VyIHR5cGUKKyAqICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NQRFdLUElOX1JJU0lORworICogICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1BEV0tQSU5fRkFMTElORworICogQHBhcmFtW2luXSAgIHUzMkRlYm91bmNlRW4gU3RhbmRieSBQb3dlci1kb3duIG1vZGUgd2FrZS11cCBwaW4gZGUtYm91bmNlIGZ1bmN0aW9uCisgKiAgICAgICAgICAgICAgLSBccmVmIENMS19TUERXS1BJTl9ERUJPVU5DRUVOCisgKiAgICAgICAgICAgICAgLSBccmVmIENMS19TUERXS1BJTl9ERUJPVU5DRURJUworICogQHJldHVybiAgICAgIE5vbmUKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHNwZWNpZmllZCBHUElPIGFzIHdha2UgdXAgc291cmNlIGF0IFN0YW5kYnkgUG93ZXItZG93biBtb2RlLgorICovCisKK3ZvaWQgQ0xLX0VuYWJsZVNQRFdLUGluKHVpbnQzMl90IHUzMlBvcnQsIHVpbnQzMl90IHUzMlBpbiwgdWludDMyX3QgdTMyVHJpZ2dlclR5cGUsIHVpbnQzMl90IHUzMkRlYm91bmNlRW4pCit7CisgICAgdWludDMyX3QgdTMyVG1wQWRkciA9IDBVTDsKKyAgICB1aW50MzJfdCB1MzJUbXBWYWwgPSAwVUw7CisKKyAgICAvKiBHUHggU3RhbmQtYnkgUG93ZXItZG93biBXYWtlLXVwIFBpbiBTZWxlY3QgKi8KKyAgICB1MzJUbXBBZGRyID0gKHVpbnQzMl90KSZDTEstPlBBU1dLQ1RMOworICAgIHUzMlRtcEFkZHIgKz0gKDB4NFVMICogdTMyUG9ydCk7CisKKyAgICB1MzJUbXBWYWwgPSBpbnB3KCh1aW50MzJfdCAqKXUzMlRtcEFkZHIpOworICAgIHUzMlRtcFZhbCA9ICh1MzJUbXBWYWwgJiB+KENMS19QQVNXS0NUTF9XS1BTRUxfTXNrIHwgQ0xLX1BBU1dLQ1RMX1BSV0tFTl9Nc2sgfCBDTEtfUEFTV0tDVExfUEZXS0VOX01zayB8IENMS19QQVNXS0NUTF9EQkVOX01zayB8IENMS19QQVNXS0NUTF9XS0VOX01zaykpIHwKKyAgICAgICAgICAgICAgICAodTMyUGluIDw8IENMS19QQVNXS0NUTF9XS1BTRUxfUG9zKSB8IHUzMlRyaWdnZXJUeXBlIHwgdTMyRGVib3VuY2VFbiB8IENMS19TUERXS1BJTl9FTkFCTEU7CisgICAgb3V0cHcoKHVpbnQzMl90ICopdTMyVG1wQWRkciwgdTMyVG1wVmFsKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFBMTCBjbG9jayBmcmVxdWVuY3kKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgUExMIGZyZXF1ZW5jeQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZ2V0IFBMTCBmcmVxdWVuY3kuIFRoZSBmcmVxdWVuY3kgdW5pdCBpcyBIei4KKyAgKi8KKworX19OT05TRUNVUkVfRU5UUllfV0VBSwordWludDMyX3QgQ0xLX0dldFBMTENsb2NrRnJlcSh2b2lkKQoreworICAgIHVpbnQzMl90IHUzMlBsbEZyZXEgPSAwVUwsIHUzMlBsbFJlZzsKKyAgICB1aW50MzJfdCB1MzJGSU4sIHUzMk5GLCB1MzJOUiwgdTMyTk87CisgICAgdWludDhfdCBhdThOb1RibFs0XSA9IHsxVSwgMlUsIDJVLCA0VX07CisKKyAgICB1MzJQbGxSZWcgPSBDTEstPlBMTENUTDsKKworICAgIGlmKHUzMlBsbFJlZyAmIChDTEtfUExMQ1RMX1BEX01zayB8IENMS19QTExDVExfT0VfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMlBsbEZyZXEgPSAwVUw7ICAgICAgICAgIC8qIFBMTCBpcyBpbiBwb3dlciBkb3duIG1vZGUgb3IgZml4IGxvdyAqLworICAgIH0KKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyogUExMIGlzIGluIG5vcm1hbCBtb2RlICovCisgICAgeworCisgICAgICAgIC8qIFBMTCBzb3VyY2UgY2xvY2sgKi8KKyAgICAgICAgaWYodTMyUGxsUmVnICYgQ0xLX1BMTENUTF9QTExTUkNfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGSU4gPSBfX0hJUkM7ICAgIC8qIFBMTCBzb3VyY2UgY2xvY2sgZnJvbSBISVJDICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGSU4gPSBfX0hYVDsgICAgIC8qIFBMTCBzb3VyY2UgY2xvY2sgZnJvbSBIWFQgKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qIENhbGN1bGF0ZSBQTEwgZnJlcXVlbmN5ICovCisgICAgICAgIGlmKHUzMlBsbFJlZyAmIENMS19QTExDVExfQlBfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJQbGxGcmVxID0gdTMyRklOOyAgLyogUExMIGlzIGluIGJ5cGFzcyBtb2RlICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBQTEwgaXMgb3V0cHV0IGVuYWJsZWQgaW4gbm9ybWFsIHdvcmsgbW9kZSAqLworICAgICAgICAgICAgdTMyTk8gPSBhdThOb1RibFsoKHUzMlBsbFJlZyAmIENMS19QTExDVExfT1VURElWX01zaykgPj4gQ0xLX1BMTENUTF9PVVRESVZfUG9zKV07CisgICAgICAgICAgICB1MzJORiA9ICgodTMyUGxsUmVnICYgQ0xLX1BMTENUTF9GQkRJVl9Nc2spID4+IENMS19QTExDVExfRkJESVZfUG9zKSArIDJVTDsKKyAgICAgICAgICAgIHUzMk5SID0gKCh1MzJQbGxSZWcgJiBDTEtfUExMQ1RMX0lORElWX01zaykgPj4gQ0xLX1BMTENUTF9JTkRJVl9Qb3MpICsgMVVMOworCisgICAgICAgICAgICAvKiB1MzJGSU4gaXMgc2hpZnRlZCAyIGJpdHMgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgIHUzMlBsbEZyZXEgPSAoKCh1MzJGSU4gPj4gMikgKiAodTMyTkYgPDwgMSkpIC8gKHUzMk5SICogdTMyTk8pIDw8IDIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHUzMlBsbEZyZXE7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBzZWxlY3RlZCBtb2R1bGUgY2xvY2sgc291cmNlCisgICogQHBhcmFtW2luXSAgdTMyTW9kdWxlSWR4IGlzIG1vZHVsZSBpbmRleC4KKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0RIMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVVNCSF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgV0RUX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBXV0RUX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBSVENfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFRNUjBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFRNUjFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFRNUjJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFRNUjNfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIENMS09fTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFFTUEkwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkyX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkzX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQyX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUM19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQ1X01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBPVEdfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVTQkRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEkyUzBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNDMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0MxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTQzJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEVQV00wX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBFUFdNMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQlBXTTBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEJQV00xX01PRFVMRQorICAqIEByZXR1cm4gICAgIFNlbGVjdGVkIG1vZHVsZSBjbG9jayBzb3VyY2Ugc2V0dGluZworICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZ2V0IHNlbGVjdGVkIG1vZHVsZSBjbG9jayBzb3VyY2UuCisgICovCisKK19fTk9OU0VDVVJFX0VOVFJZX1dFQUsKK3VpbnQzMl90IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZSh1aW50MzJfdCB1MzJNb2R1bGVJZHgpCit7CisgICAgdWludDMyX3QgdTMyVG1wVmFsID0gMFVMLCB1MzJUbXBBZGRyID0gMFVMOworICAgIHVpbnQzMl90IGF1MzJTZWxUYmxbNF0gPSB7MHgwVUwsIDB4NFVMLCAweDhVTCwgMHhDVUx9OworCisgICAgLyogR2V0IGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gc2V0dGluZyAqLworICAgIGlmKHUzMk1vZHVsZUlkeCA9PSBFUFdNMF9NT0RVTEUpCisgICAgeworICAgICAgICB1MzJUbXBWYWwgPSAoKENMSy0+Q0xLU0VMMiAmIENMS19DTEtTRUwyX0VQV00wU0VMX01zaykgPj4gQ0xLX0NMS1NFTDJfRVBXTTBTRUxfUG9zKTsKKyAgICB9CisgICAgZWxzZSBpZih1MzJNb2R1bGVJZHggPT0gRVBXTTFfTU9EVUxFKQorICAgIHsKKyAgICAgICAgdTMyVG1wVmFsID0gKChDTEstPkNMS1NFTDIgJiBDTEtfQ0xLU0VMMl9FUFdNMVNFTF9Nc2spID4+IENMS19DTEtTRUwyX0VQV00xU0VMX1Bvcyk7CisgICAgfQorICAgIGVsc2UgaWYodTMyTW9kdWxlSWR4ID09IEJQV00wX01PRFVMRSkKKyAgICB7CisgICAgICAgIHUzMlRtcFZhbCA9ICgoQ0xLLT5DTEtTRUwyICYgQ0xLX0NMS1NFTDJfQlBXTTBTRUxfTXNrKSA+PiBDTEtfQ0xLU0VMMl9CUFdNMFNFTF9Qb3MpOworICAgIH0KKyAgICBlbHNlIGlmKHUzMk1vZHVsZUlkeCA9PSBCUFdNMV9NT0RVTEUpCisgICAgeworICAgICAgICB1MzJUbXBWYWwgPSAoKENMSy0+Q0xLU0VMMiAmIENMS19DTEtTRUwyX0JQV00xU0VMX01zaykgPj4gQ0xLX0NMS1NFTDJfQlBXTTFTRUxfUG9zKTsKKyAgICB9CisgICAgZWxzZSBpZihNT0RVTEVfQ0xLU0VMX01zayh1MzJNb2R1bGVJZHgpICE9IE1PRFVMRV9Ob01zaykKKyAgICB7CisgICAgICAgIC8qIEdldCBjbG9jayBzZWxlY3QgY29udHJvbCByZWdpc3RlciBhZGRyZXNzICovCisgICAgICAgIHUzMlRtcEFkZHIgPSAodWludDMyX3QpJkNMSy0+Q0xLU0VMMCArIChhdTMyU2VsVGJsW01PRFVMRV9DTEtTRUwodTMyTW9kdWxlSWR4KV0pOworCisgICAgICAgIC8qIEdldCBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIHNldHRpbmcgKi8KKyAgICAgICAgdTMyVG1wVmFsID0gKChpbnB3KCh1aW50MzJfdCAqKXUzMlRtcEFkZHIpICYgKE1PRFVMRV9DTEtTRUxfTXNrKHUzMk1vZHVsZUlkeCkgPDwgTU9EVUxFX0NMS1NFTF9Qb3ModTMyTW9kdWxlSWR4KSkpID4+IE1PRFVMRV9DTEtTRUxfUG9zKHUzMk1vZHVsZUlkeCkpOworICAgIH0KKworICAgIHJldHVybiB1MzJUbXBWYWw7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBzZWxlY3RlZCBtb2R1bGUgY2xvY2sgZGl2aWRlciBudW1iZXIKKyAgKiBAcGFyYW1baW5dICB1MzJNb2R1bGVJZHggaXMgbW9kdWxlIGluZGV4LgorICAqICAgICAgICAgICAgIC0gXHJlZiBTREgwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVU0JIX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQyX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUM19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQ1X01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBPVEdfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVTQkRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNDMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0MxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTQzJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEVBRENfTU9EVUxFCisgICogQHJldHVybiAgICAgU2VsZWN0ZWQgbW9kdWxlIGNsb2NrIGRpdmlkZXIgbnVtYmVyIHNldHRpbmcKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGdldCBzZWxlY3RlZCBtb2R1bGUgY2xvY2sgZGl2aWRlciBudW1iZXIuCisgICovCisKK19fTk9OU0VDVVJFX0VOVFJZX1dFQUsKK3VpbnQzMl90IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIodWludDMyX3QgdTMyTW9kdWxlSWR4KQoreworICAgIHVpbnQzMl90IHUzMlRtcFZhbCA9IDBVTCwgdTMyVG1wQWRkciA9IDBVTDsKKyAgICB1aW50MzJfdCBhdTMyRGl2VGJsWzRdID0gezB4MFVMLCAweDRVTCwgMHg4VUwsIDB4MTBVTH07CisKKyAgICBpZihNT0RVTEVfQ0xLRElWX01zayh1MzJNb2R1bGVJZHgpICE9IE1PRFVMRV9Ob01zaykKKyAgICB7CisgICAgICAgIC8qIEdldCBjbG9jayBkaXZpZGVyIGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyAqLworICAgICAgICB1MzJUbXBBZGRyID0gKHVpbnQzMl90KSZDTEstPkNMS0RJVjAgKyAoYXUzMkRpdlRibFtNT0RVTEVfQ0xLRElWKHUzMk1vZHVsZUlkeCldKTsKKyAgICAgICAgLyogR2V0IGNsb2NrIGRpdmlkZXIgbnVtYmVyIHNldHRpbmcgKi8KKyAgICAgICAgdTMyVG1wVmFsID0gKChpbnB3KCh1aW50MzJfdCAqKXUzMlRtcEFkZHIpICYgKE1PRFVMRV9DTEtESVZfTXNrKHUzMk1vZHVsZUlkeCkgPDwgTU9EVUxFX0NMS0RJVl9Qb3ModTMyTW9kdWxlSWR4KSkpID4+IE1PRFVMRV9DTEtESVZfUG9zKHUzMk1vZHVsZUlkeCkpOworICAgIH0KKworICAgIHJldHVybiB1MzJUbXBWYWw7Cit9CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTEtfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ0xLX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9jcmMuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2NyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NDMzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9jcmMuYwpAQCAtMCwwICsxLDExOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNyYy5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBDeWNsaWMgUmVkdW5kYW5jeSBDaGVjayhDUkMpIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQ1JDX0RyaXZlciBDUkMgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQ1JDX0VYUE9SVEVEX0ZVTkNUSU9OUyBDUkMgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBDUkMgT3BlbgorICAqCisgICogQHBhcmFtW2luXSAgdTMyTW9kZSAgICAgICAgIENSQyBvcGVyYXRpb24gcG9seW5vbWlhbCBtb2RlLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JDX0NDSVRUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDUkNfOAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JDXzE2CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDUkNfMzIKKyAgKiBAcGFyYW1baW5dICB1MzJBdHRyaWJ1dGUgICAgQ1JDIG9wZXJhdGlvbiBkYXRhIGF0dHJpYnV0ZS4gVmFsaWQgdmFsdWVzIGFyZSBjb21iaW5lZCB3aXRoOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JDX0NIRUNLU1VNX0NPTQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JDX0NIRUNLU1VNX1JWUworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JDX1dEQVRBX0NPTQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JDX1dEQVRBX1JWUworICAqIEBwYXJhbVtpbl0gIHUzMlNlZWQgICAgICAgICBTZWVkIHZhbHVlLgorICAqIEBwYXJhbVtpbl0gIHUzMkRhdGFMZW4gICAgICBDUFUgV3JpdGUgRGF0YSBMZW5ndGguIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDUkNfQ1BVX1dEQVRBXzgKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENSQ19DUFVfV0RBVEFfMTYKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENSQ19DUFVfV0RBVEFfMzIKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBlbmFibGUgdGhlIENSQyBjb250cm9sbGVyIGJ5IHNwZWNpZnkgQ1JDIG9wZXJhdGlvbiBtb2RlLCBhdHRyaWJ1dGUsIGluaXRpYWwgc2VlZCBhbmQgd3JpdGUgZGF0YSBsZW5ndGguIFxuCisgICogICAgICAgICAgICAgQWZ0ZXIgdGhhdCwgdXNlciBjYW4gc3RhcnQgdG8gcGVyZm9ybSBDUkMgY2FsY3VsYXRlIGJ5IGNhbGxpbmcgQ1JDX1dSSVRFX0RBVEEgbWFjcm8gb3IgQ1JDX0RBVCByZWdpc3RlciBkaXJlY3RseS4KKyAgKi8KK3ZvaWQgQ1JDX09wZW4odWludDMyX3QgdTMyTW9kZSwgdWludDMyX3QgdTMyQXR0cmlidXRlLCB1aW50MzJfdCB1MzJTZWVkLCB1aW50MzJfdCB1MzJEYXRhTGVuKQoreworICAgIENSQ19UICpwQ1JDOworCisgICAgaWYoKF9fUEMoKSZOU19PRkZTRVQpID09IE5TX09GRlNFVCkKKyAgICB7CisgICAgICAgIHBDUkMgPSBDUkNfTlM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBDUkMgPSBDUkM7CisgICAgfQorCisgICAgcENSQy0+U0VFRCA9IHUzMlNlZWQ7CisgICAgcENSQy0+Q1RMID0gdTMyTW9kZSB8IHUzMkF0dHJpYnV0ZSB8IHUzMkRhdGFMZW4gfCBDUkNfQ1RMX0NSQ0VOX01zazsKKworICAgIC8qIFNldHRpbmcgQ0hLU0lOSVQgYml0IHdpbGwgcmVsb2FkIHRoZSBpbml0aWFsIHNlZWQgdmFsdWUoQ1JDX1NFRUQgcmVnaXN0ZXIpIHRvIENSQyBjb250cm9sbGVyICovCisgICAgcENSQy0+Q1RMIHw9IENSQ19DVExfQ0hLU0lOSVRfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgQ1JDIENoZWNrc3VtCisgICoKKyAgKiBAcGFyYW1baW5dICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgICBDaGVja3N1bSBSZXN1bHQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0cyB0aGUgQ1JDIGNoZWNrc3VtIHJlc3VsdCBieSBjdXJyZW50IENSQyBwb2x5bm9taWFsIG1vZGUuCisgICovCit1aW50MzJfdCBDUkNfR2V0Q2hlY2tzdW0odm9pZCkKK3sKKyAgICBDUkNfVCAqcENSQzsKKyAgICB1aW50MzJfdCB1MzJDaGVja3N1bSA9IDBVTDsKKworICAgIGlmKChfX1BDKCkmTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpCisgICAgeworICAgICAgICBwQ1JDID0gQ1JDX05TOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwQ1JDID0gQ1JDOworICAgIH0KKworICAgIHN3aXRjaChwQ1JDLT5DVEwgJiBDUkNfQ1RMX0NSQ01PREVfTXNrKQorICAgIHsKKyAgICAgICAgY2FzZSBDUkNfQ0NJVFQ6CisgICAgICAgIGNhc2UgQ1JDXzE2OgorICAgICAgICAgICAgdTMyQ2hlY2tzdW0gPSAocENSQy0+Q0hFQ0tTVU0gJiAweEZGRkZVTCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENSQ18zMjoKKyAgICAgICAgICAgIHUzMkNoZWNrc3VtID0gcENSQy0+Q0hFQ0tTVU07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENSQ184OgorICAgICAgICAgICAgdTMyQ2hlY2tzdW0gPSAocENSQy0+Q0hFQ0tTVU0gJiAweEZGVUwpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB1MzJDaGVja3N1bTsKK30KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDUkNfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ1JDX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9jcnlwdG8uYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2NyeXB0by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZjlhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9jcnlwdG8uYwpAQCAtMCwwICsxLDM0ODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjcnlwdG8uYworICogQHZlcnNpb24gIFYxLjEwCisgKiBAYnJpZWYgIENyeXB0b2dyYXBoaWMgQWNjZWxlcmF0b3IgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiTTIzNTEuaCIKKworI2RlZmluZSBFTkFCTEVfREVCVUcgICAgMAorI2RlZmluZSBYT01fU1VQUE9SVCAgICAgMAorCisjaWYgRU5BQkxFX0RFQlVHCisjZGVmaW5lIENSUFRfREJHTVNHICAgcHJpbnRmCisjZWxzZQorI2RlZmluZSBDUlBUX0RCR01TRyguLi4pICAgZG8geyB9IHdoaWxlICgwKSAgICAgICAvKiBkaXNhYmxlIGRlYnVnICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19JQ0NBUk1fXykKKyMgcHJhZ21hIGRpYWdfc3VwcHJlc3M9UG0wNzMsIFBtMTQzICAgICAgICAvKiBNaXNyYSBDIHJ1bGUgMTQuNyAqLworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBDUllQVE9fRHJpdmVyIENSWVBUTyBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIENSWVBUT19FWFBPUlRFRF9GVU5DVElPTlMgQ1JZUFRPIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyogLy8gQGNvbmQgSElEREVOX1NZTUJPTFMgKi8KKworc3RhdGljIHVpbnQzMl90IGdfQUVTX0NUTFs0XTsKK3N0YXRpYyB1aW50MzJfdCBnX1RERVNfQ1RMWzRdOworCitzdGF0aWMgY2hhciAgaGV4X2NoYXJfdGJsW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisKK3N0YXRpYyB2b2lkIGR1bXBfZWNjX3JlZyhjaGFyICpzdHIsIHVpbnQzMl90IHZvbGF0aWxlIHJlZ3NbXSwgaW50MzJfdCBjb3VudCk7CitzdGF0aWMgY2hhciBnZXRfTnRoX25pYmJsZV9jaGFyKHVpbnQzMl90IHZhbDMyLCB1aW50MzJfdCBpZHgpOworc3RhdGljIHZvaWQgSGV4MlJlZyhjaGFyIGlucHV0W10sIHVpbnQzMl90IHZvbGF0aWxlIHJlZ1tdKTsKK3N0YXRpYyB2b2lkIFJlZzJIZXgoaW50MzJfdCBjb3VudCwgdWludDMyX3Qgdm9sYXRpbGUgcmVnW10sIGNoYXIgb3V0cHV0W10pOworc3RhdGljIGNoYXIgY2gyaGV4KGNoYXIgY2gpOworc3RhdGljIHZvaWQgSGV4MlJlZ0V4KGNoYXIgaW5wdXRbXSwgdWludDMyX3Qgdm9sYXRpbGUgcmVnW10sIGludCBzaGlmdCk7CitzdGF0aWMgaW50ICBnZXRfbmliYmxlX3ZhbHVlKGNoYXIgYyk7CisKKy8qIC8vIEBlbmRjb25kIEhJRERFTl9TWU1CT0xTICovCisKKy8qKgorICAqIEBicmllZiAgT3BlbiBQUk5HIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1baW5dICB1MzJLZXlTaXplICAgaXQgaXMgUFJORyBrZXkgc2l6ZSwgaW5jbHVkaW5nOgorICAqICAgICAgICAgLSBccmVmIFBSTkdfS0VZX1NJWkVfNjQKKyAgKiAgICAgICAgIC0gXHJlZiBQUk5HX0tFWV9TSVpFXzEyOAorICAqICAgICAgICAgLSBccmVmIFBSTkdfS0VZX1NJWkVfMTkyCisgICogICAgICAgICAtIFxyZWYgUFJOR19LRVlfU0laRV8yNTYKKyAgKiBAcGFyYW1baW5dICB1MzJTZWVkUmVsb2FkIGlzIFBSTkcgc2VlZCByZWxvYWQgb3Igbm90LCBpbmNsdWRpbmc6CisgICogICAgICAgICAtIFxyZWYgUFJOR19TRUVEX0NPTlQKKyAgKiAgICAgICAgIC0gXHJlZiBQUk5HX1NFRURfUkVMT0FECisgICogQHBhcmFtW2luXSAgdTMyU2VlZCAgVGhlIG5ldyBzZWVkLiBPbmx5IHZhbGlkIHdoZW4gdTMyU2VlZFJlbG9hZCBpcyBQUk5HX1NFRURfUkVMT0FELgorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBQUk5HX09wZW4oQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJLZXlTaXplLCB1aW50MzJfdCB1MzJTZWVkUmVsb2FkLCB1aW50MzJfdCB1MzJTZWVkKQoreworICAgIGlmKHUzMlNlZWRSZWxvYWQpCisgICAgeworICAgICAgICBjcnB0LT5QUk5HX1NFRUQgPSB1MzJTZWVkOworICAgIH0KKworICAgIGNycHQtPlBSTkdfQ1RMID0gKHUzMktleVNpemUgPDwgQ1JQVF9QUk5HX0NUTF9LRVlTWl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgICh1MzJTZWVkUmVsb2FkIDw8IENSUFRfUFJOR19DVExfU0VFRFJMRF9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgIFN0YXJ0IHRvIGdlbmVyYXRlIG9uZSBQUk5HIGtleS4KKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBQUk5HX1N0YXJ0KENSUFRfVCAqY3JwdCkKK3sKKyAgICBjcnB0LT5QUk5HX0NUTCB8PSBDUlBUX1BSTkdfQ1RMX1NUQVJUX01zazsKK30KKworLyoqCisgICogQGJyaWVmICBSZWFkIHRoZSBQUk5HIGtleS4KKyAgKiBAcGFyYW1baW5dICAgY3JwdCAgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1bb3V0XSAgdTMyUmFuZEtleSAgVGhlIGtleSBidWZmZXIgdG8gc3RvcmUgbmV3bHkgZ2VuZXJhdGVkIFBSTkcga2V5LgorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBQUk5HX1JlYWQoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJSYW5kS2V5W10pCit7CisgICAgdWludDMyX3QgIGksIHdjbnQ7CisKKyAgICB3Y250ID0gKCgoY3JwdC0+UFJOR19DVEwgJiBDUlBUX1BSTkdfQ1RMX0tFWVNaX01zaykgPj4gQ1JQVF9QUk5HX0NUTF9LRVlTWl9Qb3MpICsgMVUpICogMlU7CisKKyAgICBmb3IoaSA9IDBVOyBpIDwgd2NudDsgaSsrKQorICAgIHsKKyAgICAgICAgdTMyUmFuZEtleVtpXSA9IGNycHQtPlBSTkdfS0VZW2ldOworICAgIH0KKworICAgIGNycHQtPlBSTkdfQ1RMICY9IH5DUlBUX1BSTkdfQ1RMX1NFRURSTERfTXNrOworfQorCisKKy8qKgorICAqIEBicmllZiAgT3BlbiBBRVMgZW5jcnlwdC9kZWNyeXB0IGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgIEFFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICB1MzJFbmNEZWMgICAgMTogQUVTIGVuY29kZTsgIDA6IEFFUyBkZWNvZGUKKyAgKiBAcGFyYW1baW5dICB1MzJPcE1vZGUgICAgQUVTIG9wZXJhdGlvbiBtb2RlLCBpbmNsdWRpbmc6CisgICogICAgICAgICAtIFxyZWYgQUVTX01PREVfRUNCCisgICogICAgICAgICAtIFxyZWYgQUVTX01PREVfQ0JDCisgICogICAgICAgICAtIFxyZWYgQUVTX01PREVfQ0ZCCisgICogICAgICAgICAtIFxyZWYgQUVTX01PREVfT0ZCCisgICogICAgICAgICAtIFxyZWYgQUVTX01PREVfQ1RSCisgICogICAgICAgICAtIFxyZWYgQUVTX01PREVfQ0JDX0NTMQorICAqICAgICAgICAgLSBccmVmIEFFU19NT0RFX0NCQ19DUzIKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9DQkNfQ1MzCisgICogQHBhcmFtW2luXSAgdTMyS2V5U2l6ZSBpcyBBRVMga2V5IHNpemUsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfS0VZX1NJWkVfMTI4CisgICogICAgICAgICAtIFxyZWYgQUVTX0tFWV9TSVpFXzE5MgorICAqICAgICAgICAgLSBccmVmIEFFU19LRVlfU0laRV8yNTYKKyAgKiBAcGFyYW1baW5dICB1MzJTd2FwVHlwZSBpcyBBRVMgaW5wdXQvb3V0cHV0IGRhdGEgc3dhcCBjb250cm9sLCBpbmNsdWRpbmc6CisgICogICAgICAgICAtIFxyZWYgQUVTX05PX1NXQVAKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfT1VUX1NXQVAKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfSU5fU1dBUAorICAqICAgICAgICAgLSBccmVmIEFFU19JTl9PVVRfU1dBUAorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBBRVNfT3BlbihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMkVuY0RlYywKKyAgICAgICAgICAgICAgdWludDMyX3QgdTMyT3BNb2RlLCB1aW50MzJfdCB1MzJLZXlTaXplLCB1aW50MzJfdCB1MzJTd2FwVHlwZSkKK3sKKyAgICBjcnB0LT5BRVNfQ1RMID0gKHUzMkNoYW5uZWwgPDwgQ1JQVF9BRVNfQ1RMX0NIQU5ORUxfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICh1MzJFbmNEZWMgPDwgQ1JQVF9BRVNfQ1RMX0VOQ1JQVF9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgKHUzMk9wTW9kZSA8PCBDUlBUX0FFU19DVExfT1BNT0RFX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAodTMyS2V5U2l6ZSA8PCBDUlBUX0FFU19DVExfS0VZU1pfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICh1MzJTd2FwVHlwZSA8PCBDUlBUX0FFU19DVExfT1VUU1dBUF9Qb3MpOworICAgIGdfQUVTX0NUTFt1MzJDaGFubmVsXSA9IGNycHQtPkFFU19DVEw7Cit9CisKKy8qKgorICAqIEBicmllZiAgU3RhcnQgQUVTIGVuY3J5cHQvZGVjcnlwdAorICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICBBRVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuCisgICogQHBhcmFtW2luXSAgdTMyRE1BTW9kZSAgQUVTIERNQSBjb250cm9sLCBpbmNsdWRpbmc6CisgICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9PTkVfU0hPVCAgIE9uZSBzaG9wIEFFUyBlbmNyeXB0L2RlY3J5cHQuCisgICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9DT05USU5VRSAgIENvbnRpbnVvdXMgQUVTIGVuY3J5cHQvZGVjcnlwdC4KKyAgKiAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX0xBU1QgICAgICAgTGFzdCBBRVMgZW5jcnlwdC9kZWNyeXB0IG9mIGEgc2VyaWVzIG9mIEFFU19TdGFydC4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgQUVTX1N0YXJ0KENSUFRfVCAqY3JwdCwgaW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJETUFNb2RlKQoreworICAgIGNycHQtPkFFU19DVEwgPSBnX0FFU19DVExbdTMyQ2hhbm5lbF07CisgICAgY3JwdC0+QUVTX0NUTCB8PSBDUlBUX0FFU19DVExfU1RBUlRfTXNrIHwgKHUzMkRNQU1vZGUgPDwgQ1JQVF9BRVNfQ1RMX0RNQUxBU1RfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICBTZXQgQUVTIGtleXMKKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgQUVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIGF1MzJLZXlzICAgIEFuIHdvcmQgYXJyYXkgY29udGFpbnMgQUVTIGtleXMuCisgICogQHBhcmFtW2luXSAgdTMyS2V5U2l6ZSBpcyBBRVMga2V5IHNpemUsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfS0VZX1NJWkVfMTI4CisgICogICAgICAgICAtIFxyZWYgQUVTX0tFWV9TSVpFXzE5MgorICAqICAgICAgICAgLSBccmVmIEFFU19LRVlfU0laRV8yNTYKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgQUVTX1NldEtleShDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IGF1MzJLZXlzW10sIHVpbnQzMl90IHUzMktleVNpemUpCit7CisgICAgdWludDMyX3QgIGksIHdjbnQsIGtleV9yZWdfYWRkcjsKKworICAgIGtleV9yZWdfYWRkciA9ICh1aW50MzJfdCkmY3JwdC0+QUVTMF9LRVlbMF0gKyAodTMyQ2hhbm5lbCAqIDB4M0NVTCk7CisgICAgd2NudCA9IDRVTCArIHUzMktleVNpemUgKiAyVUw7CisKKyAgICBmb3IoaSA9IDBVOyBpIDwgd2NudDsgaSsrKQorICAgIHsKKyAgICAgICAgb3V0cHcoa2V5X3JlZ19hZGRyLCBhdTMyS2V5c1tpXSk7CisgICAgICAgIGtleV9yZWdfYWRkciArPSA0VUw7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIFNldCBBRVMgaW5pdGlhbCB2ZWN0b3JzCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgIEFFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICBhdTMySVYgICAgICBBIGZvdXIgZW50cnkgd29yZCBhcnJheSBjb250YWlucyBBRVMgaW5pdGlhbCB2ZWN0b3JzLgorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBBRVNfU2V0SW5pdFZlY3QoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCBhdTMySVZbXSkKK3sKKyAgICB1aW50MzJfdCAgaSwga2V5X3JlZ19hZGRyOworCisgICAga2V5X3JlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5BRVMwX0lWWzBdICsgKHUzMkNoYW5uZWwgKiAweDNDVUwpOworCisgICAgZm9yKGkgPSAwVTsgaSA8IDRVOyBpKyspCisgICAgeworICAgICAgICBvdXRwdyhrZXlfcmVnX2FkZHIsIGF1MzJJVltpXSk7CisgICAgICAgIGtleV9yZWdfYWRkciArPSA0VUw7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIFNldCBBRVMgRE1BIHRyYW5zZmVyIGNvbmZpZ3VyYXRpb24uCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICAgQUVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIHUzMlNyY0FkZHIgICBBRVMgRE1BIHNvdXJjZSBhZGRyZXNzCisgICogQHBhcmFtW2luXSAgdTMyRHN0QWRkciAgIEFFUyBETUEgZGVzdGluYXRpb24gYWRkcmVzcworICAqIEBwYXJhbVtpbl0gIHUzMlRyYW5zQ250ICBBRVMgRE1BIHRyYW5zZmVyIGJ5dGUgY291bnQKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgQUVTX1NldERNQVRyYW5zZmVyKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyU3JjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMkRzdEFkZHIsIHVpbnQzMl90IHUzMlRyYW5zQ250KQoreworICAgIHVpbnQzMl90ICByZWdfYWRkcjsKKworICAgIHJlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5BRVMwX1NBRERSICsgKHUzMkNoYW5uZWwgKiAweDNDVUwpOworICAgIG91dHB3KHJlZ19hZGRyLCB1MzJTcmNBZGRyKTsKKworICAgIHJlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5BRVMwX0RBRERSICsgKHUzMkNoYW5uZWwgKiAweDNDVUwpOworICAgIG91dHB3KHJlZ19hZGRyLCB1MzJEc3RBZGRyKTsKKworICAgIHJlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5BRVMwX0NOVCArICh1MzJDaGFubmVsICogMHgzQ1VMKTsKKyAgICBvdXRwdyhyZWdfYWRkciwgdTMyVHJhbnNDbnQpOworfQorCisvKioKKyAgKiBAYnJpZWYgIE9wZW4gVERFUyBlbmNyeXB0L2RlY3J5cHQgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICAgVERFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICB1MzJFbmNEZWMgICAgMTogVERFUyBlbmNvZGU7IDA6IFRERVMgZGVjb2RlCisgICogQHBhcmFtW2luXSAgSXMzREVTICAgICAgIDE6IFRERVM7IDA6IERFUworICAqIEBwYXJhbVtpbl0gIElzM0tleSAgICAgICAxOiBUREVTIDMga2V5IG1vZGU7IDA6IFRERVMgMiBrZXkgbW9kZQorICAqIEBwYXJhbVtpbl0gIHUzMk9wTW9kZSAgICBUREVTIG9wZXJhdGlvbiBtb2RlLCBpbmNsdWRpbmc6CisgICogICAgICAgICAtIFxyZWYgVERFU19NT0RFX0VDQgorICAqICAgICAgICAgLSBccmVmIFRERVNfTU9ERV9DQkMKKyAgKiAgICAgICAgIC0gXHJlZiBUREVTX01PREVfQ0ZCCisgICogICAgICAgICAtIFxyZWYgVERFU19NT0RFX09GQgorICAqICAgICAgICAgLSBccmVmIFRERVNfTU9ERV9DVFIKKyAgKiBAcGFyYW1baW5dICB1MzJTd2FwVHlwZSBpcyBUREVTIGlucHV0L291dHB1dCBkYXRhIHN3YXAgY29udHJvbCBhbmQgd29yZCBzd2FwIGNvbnRyb2wsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgIC0gXHJlZiBUREVTX05PX1NXQVAKKyAgKiAgICAgICAgIC0gXHJlZiBUREVTX1dITF9TV0FQCisgICogICAgICAgICAtIFxyZWYgVERFU19PVVRfU1dBUAorICAqICAgICAgICAgLSBccmVmIFRERVNfT1VUX1dITF9TV0FQCisgICogICAgICAgICAtIFxyZWYgVERFU19JTl9TV0FQCisgICogICAgICAgICAtIFxyZWYgVERFU19JTl9XSExfU1dBUAorICAqICAgICAgICAgLSBccmVmIFRERVNfSU5fT1VUX1NXQVAKKyAgKiAgICAgICAgIC0gXHJlZiBUREVTX0lOX09VVF9XSExfU1dBUAorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBUREVTX09wZW4oQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJFbmNEZWMsIGludDMyX3QgSXMzREVTLCBpbnQzMl90IElzM0tleSwKKyAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMk9wTW9kZSwgdWludDMyX3QgdTMyU3dhcFR5cGUpCit7CisgICAgKHZvaWQpY3JwdDsKKyAgICBnX1RERVNfQ1RMW3UzMkNoYW5uZWxdID0gKHUzMkNoYW5uZWwgPDwgQ1JQVF9UREVTX0NUTF9DSEFOTkVMX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyRW5jRGVjIDw8IENSUFRfVERFU19DVExfRU5DUlBUX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzJPcE1vZGUgfCAodTMyU3dhcFR5cGUgPDwgQ1JQVF9UREVTX0NUTF9CTEtTV0FQX1Bvcyk7CisgICAgaWYoSXMzREVTKQorICAgIHsKKyAgICAgICAgZ19UREVTX0NUTFt1MzJDaGFubmVsXSB8PSBDUlBUX1RERVNfQ1RMX1RNT0RFX01zazsKKyAgICB9CisgICAgaWYoSXMzS2V5KQorICAgIHsKKyAgICAgICAgZ19UREVTX0NUTFt1MzJDaGFubmVsXSB8PSBDUlBUX1RERVNfQ1RMXzNLRVlTX01zazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgU3RhcnQgVERFUyBlbmNyeXB0L2RlY3J5cHQKKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgVERFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICB1MzJETUFNb2RlICBUREVTIERNQSBjb250cm9sLCBpbmNsdWRpbmc6CisgICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9PTkVfU0hPVCAgIE9uZSBzaG9wIFRERVMgZW5jcnlwdC9kZWNyeXB0LgorICAqICAgICAgICAgLSBccmVmIENSWVBUT19ETUFfQ09OVElOVUUgICBDb250aW51b3VzIFRERVMgZW5jcnlwdC9kZWNyeXB0LgorICAqICAgICAgICAgLSBccmVmIENSWVBUT19ETUFfTEFTVCAgICAgICBMYXN0IFRERVMgZW5jcnlwdC9kZWNyeXB0IG9mIGEgc2VyaWVzIG9mIFRERVNfU3RhcnQuCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFRERVNfU3RhcnQoQ1JQVF9UICpjcnB0LCBpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMkRNQU1vZGUpCit7CisgICAgZ19UREVTX0NUTFt1MzJDaGFubmVsXSB8PSBDUlBUX1RERVNfQ1RMX1NUQVJUX01zayB8ICh1MzJETUFNb2RlIDw8IENSUFRfVERFU19DVExfRE1BTEFTVF9Qb3MpOworICAgIGNycHQtPlRERVNfQ1RMID0gZ19UREVTX0NUTFt1MzJDaGFubmVsXTsKK30KKworLyoqCisgICogQGJyaWVmICBTZXQgVERFUyBrZXlzCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgIFRERVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuCisgICogQHBhcmFtW2luXSAgYXUzMktleXMgICAgVGhlIFRERVMga2V5cy4gYXUzMktleXNbMF1bMF0gaXMgS2V5MCBoaWdoIHdvcmQgYW5kIGF1MzJLZXlzWzBdWzFdIGlzIGtleTAgbG93IHdvcmQuCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFRERVNfU2V0S2V5KENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgYXUzMktleXNbM11bMl0pCit7CisgICAgdWludDMyX3QgICBpLCByZWdfYWRkcjsKKworICAgIHJlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5UREVTMF9LRVkxSCArICgweDQwVUwgKiB1MzJDaGFubmVsKTsKKworICAgIGZvcihpID0gMFU7IGkgPCAzVTsgaSsrKQorICAgIHsKKyAgICAgICAgb3V0cHcocmVnX2FkZHIsIGF1MzJLZXlzW2ldWzBdKTsgICAvKiBUREVTbl9LRVl4SCAqLworICAgICAgICByZWdfYWRkciArPSA0VUw7CisgICAgICAgIG91dHB3KHJlZ19hZGRyLCBhdTMyS2V5c1tpXVsxXSk7ICAgLyogVERFU25fS0VZeEwgKi8KKyAgICAgICAgcmVnX2FkZHIgKz0gNFVMOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICBTZXQgVERFUyBpbml0aWFsIHZlY3RvcnMKKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgVERFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICB1MzJJVkggICAgICBUREVTIGluaXRpYWwgdmVjdG9yIGhpZ2ggd29yZC4KKyAgKiBAcGFyYW1baW5dICB1MzJJVkwgICAgICBUREVTIGluaXRpYWwgdmVjdG9yIGxvdyB3b3JkLgorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBUREVTX1NldEluaXRWZWN0KENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMySVZILCB1aW50MzJfdCB1MzJJVkwpCit7CisgICAgdWludDMyX3QgIHJlZ19hZGRyOworCisgICAgcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPlRERVMwX0lWSCArICh1MzJDaGFubmVsICogMHg0MFVMKTsKKyAgICBvdXRwdyhyZWdfYWRkciwgdTMySVZIKTsKKworICAgIHJlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5UREVTMF9JVkwgKyAodTMyQ2hhbm5lbCAqIDB4NDBVTCk7CisgICAgb3V0cHcocmVnX2FkZHIsIHUzMklWTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU2V0IFRERVMgRE1BIHRyYW5zZmVyIGNvbmZpZ3VyYXRpb24uCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICAgVERFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICB1MzJTcmNBZGRyICAgVERFUyBETUEgc291cmNlIGFkZHJlc3MKKyAgKiBAcGFyYW1baW5dICB1MzJEc3RBZGRyICAgVERFUyBETUEgZGVzdGluYXRpb24gYWRkcmVzcworICAqIEBwYXJhbVtpbl0gIHUzMlRyYW5zQ250ICBUREVTIERNQSB0cmFuc2ZlciBieXRlIGNvdW50CisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFRERVNfU2V0RE1BVHJhbnNmZXIoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJTcmNBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMkRzdEFkZHIsIHVpbnQzMl90IHUzMlRyYW5zQ250KQoreworICAgIHVpbnQzMl90ICByZWdfYWRkcjsKKworICAgIHJlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5UREVTMF9TQUREUiArICh1MzJDaGFubmVsICogMHg0MFVMKTsKKyAgICBvdXRwdyhyZWdfYWRkciwgdTMyU3JjQWRkcik7CisKKyAgICByZWdfYWRkciA9ICh1aW50MzJfdCkmY3JwdC0+VERFUzBfREFERFIgKyAodTMyQ2hhbm5lbCAqIDB4NDBVTCk7CisgICAgb3V0cHcocmVnX2FkZHIsIHUzMkRzdEFkZHIpOworCisgICAgcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPlRERVMwX0NOVCArICh1MzJDaGFubmVsICogMHg0MFVMKTsKKyAgICBvdXRwdyhyZWdfYWRkciwgdTMyVHJhbnNDbnQpOworfQorCisvKioKKyAgKiBAYnJpZWYgIE9wZW4gU0hBIGVuY3J5cHQgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMk9wTW9kZSAgIFNIQSBvcGVyYXRpb24gbW9kZSwgaW5jbHVkaW5nOgorICAqICAgICAgICAgLSBccmVmIFNIQV9NT0RFX1NIQTEKKyAgKiAgICAgICAgIC0gXHJlZiBTSEFfTU9ERV9TSEEyMjQKKyAgKiAgICAgICAgIC0gXHJlZiBTSEFfTU9ERV9TSEEyNTYKKyAgKiBAcGFyYW1baW5dICB1MzJTd2FwVHlwZSBpcyBTSEEgaW5wdXQvb3V0cHV0IGRhdGEgc3dhcCBjb250cm9sLCBpbmNsdWRpbmc6CisgICogICAgICAgICAtIFxyZWYgU0hBX05PX1NXQVAKKyAgKiAgICAgICAgIC0gXHJlZiBTSEFfT1VUX1NXQVAKKyAgKiAgICAgICAgIC0gXHJlZiBTSEFfSU5fU1dBUAorICAqICAgICAgICAgLSBccmVmIFNIQV9JTl9PVVRfU1dBUAorICAqIEBwYXJhbVtpbl0gIGhtYWNfa2V5X2xlbiAgIEhNQUMga2V5IGJ5dGUgY291bnQKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgU0hBX09wZW4oQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJPcE1vZGUsIHVpbnQzMl90IHUzMlN3YXBUeXBlLCB1aW50MzJfdCBobWFjX2tleV9sZW4pCit7CisgICAgY3JwdC0+SE1BQ19DVEwgPSAodTMyT3BNb2RlIDw8IENSUFRfSE1BQ19DVExfT1BNT0RFX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAgKHUzMlN3YXBUeXBlIDw8IENSUFRfSE1BQ19DVExfT1VUU1dBUF9Qb3MpOworCisgICAgaWYoaG1hY19rZXlfbGVuICE9IDBVTCkKKyAgICB7CisgICAgICAgIGNycHQtPkhNQUNfS0VZQ05UID0gaG1hY19rZXlfbGVuOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICBTdGFydCBTSEEgZW5jcnlwdAorICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1baW5dICB1MzJETUFNb2RlICBUREVTIERNQSBjb250cm9sLCBpbmNsdWRpbmc6CisgICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9PTkVfU0hPVCAgIE9uZSBzaG9wIFNIQSBlbmNyeXB0LgorICAqICAgICAgICAgLSBccmVmIENSWVBUT19ETUFfQ09OVElOVUUgICBDb250aW51b3VzIFNIQSBlbmNyeXB0LgorICAqICAgICAgICAgLSBccmVmIENSWVBUT19ETUFfTEFTVCAgICAgICBMYXN0IFNIQSBlbmNyeXB0IG9mIGEgc2VyaWVzIG9mIFNIQV9TdGFydC4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgU0hBX1N0YXJ0KENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyRE1BTW9kZSkKK3sKKyAgICBjcnB0LT5ITUFDX0NUTCAmPSB+KDB4N1VMIDw8IENSUFRfSE1BQ19DVExfRE1BTEFTVF9Qb3MpOworICAgIGNycHQtPkhNQUNfQ1RMIHw9IENSUFRfSE1BQ19DVExfU1RBUlRfTXNrIHwgKHUzMkRNQU1vZGUgPDwgQ1JQVF9ITUFDX0NUTF9ETUFMQVNUX1Bvcyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU2V0IFNIQSBETUEgdHJhbnNmZXIKKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMlNyY0FkZHIgICBTSEEgRE1BIHNvdXJjZSBhZGRyZXNzCisgICogQHBhcmFtW2luXSAgdTMyVHJhbnNDbnQgIFNIQSBETUEgdHJhbnNmZXIgYnl0ZSBjb3VudAorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBTSEFfU2V0RE1BVHJhbnNmZXIoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJTcmNBZGRyLCB1aW50MzJfdCB1MzJUcmFuc0NudCkKK3sKKyAgICBjcnB0LT5ITUFDX1NBRERSID0gdTMyU3JjQWRkcjsKKyAgICBjcnB0LT5ITUFDX0RNQUNOVCA9IHUzMlRyYW5zQ250OworfQorCisvKioKKyAgKiBAYnJpZWYgIFJlYWQgdGhlIFNIQSBkaWdlc3QuCisgICogQHBhcmFtW2luXSAgIGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtvdXRdICB1MzJEaWdlc3QgIFRoZSBTSEEgZW5jcnlwdCBvdXRwdXQgZGlnZXN0LgorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBTSEFfUmVhZChDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkRpZ2VzdFtdKQoreworICAgIHVpbnQzMl90ICBpLCB3Y250LCByZWdfYWRkcjsKKworICAgIGkgPSAoY3JwdC0+SE1BQ19DVEwgJiBDUlBUX0hNQUNfQ1RMX09QTU9ERV9Nc2spID4+IENSUFRfSE1BQ19DVExfT1BNT0RFX1BvczsKKworICAgIGlmKGkgPT0gU0hBX01PREVfU0hBMSkKKyAgICB7CisgICAgICAgIHdjbnQgPSA1VUw7CisgICAgfQorICAgIGVsc2UgaWYoaSA9PSBTSEFfTU9ERV9TSEEyMjQpCisgICAgeworICAgICAgICB3Y250ID0gN1VMOworICAgIH0KKyAgICBlbHNlIGlmKGkgPT0gU0hBX01PREVfU0hBMjU2KQorICAgIHsKKyAgICAgICAgd2NudCA9IDhVTDsKKyAgICB9CisgICAgZWxzZSBpZihpID09IFNIQV9NT0RFX1NIQTM4NCkKKyAgICB7CisgICAgICAgIHdjbnQgPSAxMlVMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBTSEFfTU9ERV9TSEE1MTIgKi8KKyAgICAgICAgd2NudCA9IDE2VUw7CisgICAgfQorCisgICAgcmVnX2FkZHIgPSAodWludDMyX3QpICYgKGNycHQtPkhNQUNfREdTVFswXSk7CisgICAgZm9yKGkgPSAwVUw7IGkgPCB3Y250OyBpKyspCisgICAgeworICAgICAgICB1MzJEaWdlc3RbaV0gPSBpbnB3KHJlZ19hZGRyKTsKKyAgICAgICAgcmVnX2FkZHIgKz0gNFVMOworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRUNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIEVDQ09QX1BPSU5UX01VTCAgICAgKDB4MFVMIDw8IENSUFRfRUNDX0NUTF9FQ0NPUF9Qb3MpCisjZGVmaW5lIEVDQ09QX01PRFVMRSAgICAgICAgKDB4MVVMIDw8IENSUFRfRUNDX0NUTF9FQ0NPUF9Qb3MpCisjZGVmaW5lIEVDQ09QX1BPSU5UX0FERCAgICAgKDB4MlVMIDw8IENSUFRfRUNDX0NUTF9FQ0NPUF9Qb3MpCisjZGVmaW5lIEVDQ09QX1BPSU5UX0RPVUJMRSAgKDB4MFVMIDw8IENSUFRfRUNDX0NUTF9FQ0NPUF9Qb3MpCisKKyNkZWZpbmUgTU9ET1BfRElWICAgICAgICAgICAoMHgwVUwgPDwgQ1JQVF9FQ0NfQ1RMX01PRE9QX1BvcykKKyNkZWZpbmUgTU9ET1BfTVVMICAgICAgICAgICAoMHgxVUwgPDwgQ1JQVF9FQ0NfQ1RMX01PRE9QX1BvcykKKyNkZWZpbmUgTU9ET1BfQUREICAgICAgICAgICAoMHgyVUwgPDwgQ1JQVF9FQ0NfQ1RMX01PRE9QX1BvcykKKyNkZWZpbmUgTU9ET1BfU1VCICAgICAgICAgICAoMHgzVUwgPDwgQ1JQVF9FQ0NfQ1RMX01PRE9QX1BvcykKKworZW51bQoreworICAgIENVUlZFX0dGX1AsCisgICAgQ1VSVkVfR0ZfMk0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBEZWZpbmUgZWxsaXB0aWMgY3VydmUgKEVDKTogICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgIVhPTV9TVVBQT1JUIC8vIFJlcGxhY2Ugd2l0aCBYT00gcmVhZHkgY3VydmUgdGFibGUKK3N0YXRpYyBjb25zdCBFQ0NfQ1VSVkUgX0N1cnZlW10gPQoreworICAgIHsKKyAgICAgICAgLyogTklTVDogQ3VydmUgUC0xOTIgOiB5XjI9eF4zLWF4K2IgKG1vZCBwKSAqLworICAgICAgICBDVVJWRV9QXzE5MiwKKyAgICAgICAgNDgsICAgICAvKiBFY2hhciAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZDIiwgICAvKiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzIiAqLworICAgICAgICAiNjQyMTA1MTllNTljODBlNzBmYTdlOWFiNzIyNDMwNDlmZWI4ZGVlY2MxNDZiOWIxIiwKKyAgICAgICAgIjE4OGRhODBlYjAzMDkwZjY3Y2JmMjBlYjQzYTE4ODAwZjRmZjBhZmQ4MmZmMTAxMiIsCisgICAgICAgICIwNzE5MmI5NWZmYzhkYTc4NjMxMDExZWQ2YjI0Y2RkNTczZjk3N2ExMWU3OTQ4MTEiLAorICAgICAgICA1OCwgICAgIC8qIEVwbCAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGIiwgICAvKiAiNjI3NzEwMTczNTM4NjY4MDc2MzgzNTc4OTQyMzIwNzY2NjQxNjA4MzkwODcwMDM5MDMyNDk2MTI3OSIgKi8KKyAgICAgICAgNTgsICAgICAvKiBFb2wgKi8KKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjk5REVGODM2MTQ2QkM5QjFCNEQyMjgzMSIsICAgLyogIjYyNzcxMDE3MzUzODY2ODA3NjM4MzU3ODk0MjMxNzYwNTkwMTM3NjcxOTQ3NzMxODI4NDIyODQwODEiICovCisgICAgICAgIDE5MiwgICAgLyoga2V5X2xlbiAqLworICAgICAgICA3LAorICAgICAgICAyLAorICAgICAgICAxLAorICAgICAgICBDVVJWRV9HRl9QCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIE5JU1Q6IEN1cnZlIFAtMjI0IDogeV4yPXheMy1heCtiIChtb2QgcCkgKi8KKyAgICAgICAgQ1VSVkVfUF8yMjQsCisgICAgICAgIDU2LCAgICAgLyogRWNoYXIgKi8KKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFIiwgIC8qICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyIgKi8KKyAgICAgICAgImI0MDUwYTg1MGMwNGIzYWJmNTQxMzI1NjUwNDRiMGI3ZDdiZmQ4YmEyNzBiMzk0MzIzNTVmZmI0IiwKKyAgICAgICAgImI3MGUwY2JkNmJiNGJmN2YzMjEzOTBiOTRhMDNjMWQzNTZjMjExMjIzNDMyODBkNjExNWMxZDIxIiwKKyAgICAgICAgImJkMzc2Mzg4YjVmNzIzZmI0YzIyZGZlNmNkNDM3NWEwNWEwNzQ3NjQ0NGQ1ODE5OTg1MDA3ZTM0IiwKKyAgICAgICAgNzAsICAgICAvKiBFcGwgKi8KKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwgIC8qICIwMDI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLworICAgICAgICA3MCwgICAgIC8qIEVvbCAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE2QTJFMEI4RjAzRTEzREQyOTQ1NUM1QzJBM0QiLCAgLyogIjAwMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MjU5NDA0NTc4MDc3MTQ0MjQzOTE3MjE2ODI3MjIzNjgwNjEiICovCisgICAgICAgIDIyNCwgICAgLyoga2V5X2xlbiAqLworICAgICAgICA5LAorICAgICAgICA4LAorICAgICAgICAzLAorICAgICAgICBDVVJWRV9HRl9QCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIE5JU1Q6IEN1cnZlIFAtMjU2IDogeV4yPXheMy1heCtiIChtb2QgcCkgKi8KKyAgICAgICAgQ1VSVkVfUF8yNTYsCisgICAgICAgIDY0LCAgICAgLyogRWNoYXIgKi8KKyAgICAgICAgIkZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkMiLCAgLyogIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMiICovCisgICAgICAgICI1YWM2MzVkOGFhM2E5M2U3YjNlYmJkNTU3Njk4ODZiYzY1MWQwNmIwY2M1M2IwZjYzYmNlM2MzZTI3ZDI2MDRiIiwKKyAgICAgICAgIjZiMTdkMWYyZTEyYzQyNDdmOGJjZTZlNTYzYTQ0MGYyNzcwMzdkODEyZGViMzNhMGY0YTEzOTQ1ZDg5OGMyOTYiLAorICAgICAgICAiNGZlMzQyZTJmZTFhN2Y5YjhlZTdlYjRhN2MwZjllMTYyYmNlMzM1NzZiMzE1ZWNlY2JiNjQwNjgzN2JmNTFmNSIsCisgICAgICAgIDc4LCAgICAgLyogRXBsICovCisgICAgICAgICJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIiwgIC8qICIxMTU3OTIwODkyMTAzNTYyNDg3NjI2OTc0NDY5NDk0MDc1NzM1MzAwODYxNDM0MTUyOTAzMTQxOTU1MzM2MzEzMDg4NjcwOTc4NTM5NTEiICovCisgICAgICAgIDc4LCAgICAgLyogRW9sICovCisgICAgICAgICJGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkJDRTZGQUFEQTcxNzlFODRGM0I5Q0FDMkZDNjMyNTUxIiwgIC8qICIxMTU3OTIwODkyMTAzNTYyNDg3NjI2OTc0NDY5NDk0MDc1NzM1Mjk5OTY5NTUyMjQxMzU3NjAzNDI0MjIyNTkwNjEwNjg1MTIwNDQzNjkiICovCisgICAgICAgIDI1NiwgICAgLyoga2V5X2xlbiAqLworICAgICAgICAxMCwKKyAgICAgICAgNSwKKyAgICAgICAgMiwKKyAgICAgICAgQ1VSVkVfR0ZfUAorICAgIH0sCisgICAgeworICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBQLTM4NCA6IHleMj14XjMtYXgrYiAobW9kIHApICovCisgICAgICAgIENVUlZFX1BfMzg0LAorICAgICAgICA5NiwgICAgIC8qIEVjaGFyICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkMiLCAgLyogIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyIgKi8KKyAgICAgICAgImIzMzEyZmE3ZTIzZWU3ZTQ5ODhlMDU2YmUzZjgyZDE5MTgxZDljNmVmZTgxNDExMjAzMTQwODhmNTAxMzg3NWFjNjU2Mzk4ZDhhMmVkMTlkMmE4NWM4ZWRkM2VjMmFlZiIsCisgICAgICAgICJhYTg3Y2EyMmJlOGIwNTM3OGViMWM3MWVmMzIwYWQ3NDZlMWQzYjYyOGJhNzliOTg1OWY3NDFlMDgyNTQyYTM4NTUwMmYyNWRiZjU1Mjk2YzNhNTQ1ZTM4NzI3NjBhYjciLAorICAgICAgICAiMzYxN2RlNGE5NjI2MmM2ZjVkOWU5OGJmOTI5MmRjMjlmOGY0MWRiZDI4OWExNDdjZTlkYTMxMTNiNWYwYjhjMDBhNjBiMWNlMWQ3ZTgxOWQ3YTQzMWQ3YzkwZWEwZTVmIiwKKyAgICAgICAgMTE2LCAgICAvKiBFcGwgKi8KKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRiIsICAvKiAiMzk0MDIwMDYxOTYzOTQ0NzkyMTIyNzkwNDAxMDAxNDM2MTM4MDUwNzk3MzkyNzA0NjU0NDY2Njc5NDgyOTM0MDQyNDU3MjE3NzE0OTY4NzAzMjkwNDcyNjYwODgyNTg5MzgwMDE4NjE2MDY5NzMxMTIzMTkiICovCisgICAgICAgIDExNiwgICAgLyogRW9sICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDNzYzNEQ4MUY0MzcyRERGNTgxQTBEQjI0OEIwQTc3QUVDRUMxOTZBQ0NDNTI5NzMiLCAgLyogIjM5NDAyMDA2MTk2Mzk0NDc5MjEyMjc5MDQwMTAwMTQzNjEzODA1MDc5NzM5MjcwNDY1NDQ2NjY3OTQ2OTA1Mjc5NjI3NjU5Mzk5MTEzMjYzNTY5Mzk4OTU2MzA4MTUyMjk0OTEzNTU0NDMzNjUzOTQyNjQzIiAqLworICAgICAgICAzODQsICAgIC8qIGtleV9sZW4gKi8KKyAgICAgICAgMTIsCisgICAgICAgIDMsCisgICAgICAgIDIsCisgICAgICAgIENVUlZFX0dGX1AKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogTklTVDogQ3VydmUgUC01MjEgOiB5XjI9eF4zLWF4K2IgKG1vZCBwKSovCisgICAgICAgIENVUlZFX1BfNTIxLAorICAgICAgICAxMzEsICAgIC8qIEVjaGFyICovCisgICAgICAgICIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQyIsICAvKiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMiICovCisgICAgICAgICIwNTE5NTNlYjk2MThlMWM5YTFmOTI5YTIxYTBiNjg1NDBlZWEyZGE3MjViOTliMzE1ZjNiOGI0ODk5MThlZjEwOWUxNTYxOTM5NTFlYzdlOTM3YjE2NTJjMGJkM2JiMWJmMDczNTczZGY4ODNkMmMzNGYxZWY0NTFmZDQ2YjUwM2YwMCIsCisgICAgICAgICIwYzY4NThlMDZiNzA0MDRlOWNkOWUzZWNiNjYyMzk1YjQ0MjljNjQ4MTM5MDUzZmI1MjFmODI4YWY2MDZiNGQzZGJhYTE0YjVlNzdlZmU3NTkyOGZlMWRjMTI3YTJmZmE4ZGUzMzQ4YjNjMTg1NmE0MjliZjk3ZTdlMzFjMmU1YmQ2NiIsCisgICAgICAgICIxMTgzOTI5NmE3ODlhM2JjMDA0NWM4YTVmYjQyYzdkMWJkOTk4ZjU0NDQ5NTc5YjQ0NjgxN2FmYmQxNzI3M2U2NjJjOTdlZTcyOTk1ZWY0MjY0MGM1NTBiOTAxM2ZhZDA3NjEzNTNjNzA4NmEyNzJjMjQwODhiZTk0NzY5ZmQxNjY1MCIsCisgICAgICAgIDE1NywgICAgLyogRXBsICovCisgICAgICAgICIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIsICAvKiAiNjg2NDc5NzY2MDEzMDYwOTcxNDk4MTkwMDc5OTA4MTM5MzIxNzI2OTQzNTMwMDE0MzMwNTQwOTM5NDQ2MzQ1OTE4NTU0MzE4MzM5NzY1NjA1MjEyMjU1OTY0MDY2MTQ1NDU1NDk3NzI5NjMxMTM5MTQ4MDg1ODAzNzEyMTk4Nzk5OTcxNjY0MzgxMjU3NDAyODI5MTExNTA1NzE1MSIgKi8KKyAgICAgICAgMTU3LCAgICAvKiBFb2wgKi8KKyAgICAgICAgIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE1MTg2ODc4M0JGMkY5NjZCN0ZDQzAxNDhGNzA5QTVEMDNCQjVDOUI4ODk5QzQ3QUVCQjZGQjcxRTkxMzg2NDA5IiwgIC8qICI2ODY0Nzk3NjYwMTMwNjA5NzE0OTgxOTAwNzk5MDgxMzkzMjE3MjY5NDM1MzAwMTQzMzA1NDA5Mzk0NDYzNDU5MTg1NTQzMTgzMzk3NjU1Mzk0MjQ1MDU3NzQ2MzMzMjE3MTk3NTMyOTYzOTk2MzcxMzYzMzIxMTEzODY0NzY4NjEyNDQwMzgwMzQwMzcyODA4ODkyNzA3MDA1NDQ5IiAqLworICAgICAgICA1MjEsICAgIC8qIGtleV9sZW4gKi8KKyAgICAgICAgMzIsCisgICAgICAgIDMyLAorICAgICAgICAzMiwKKyAgICAgICAgQ1VSVkVfR0ZfUAorICAgIH0sCisgICAgeworICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBCLTE2MyA6IHleMit4eT14XjMrYXheMitiICovCisgICAgICAgIENVUlZFX0JfMTYzLAorICAgICAgICA0MSwgICAgIC8qIEVjaGFyICovCisgICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCisgICAgICAgICIyMGE2MDE5MDdiOGM5NTNjYTE0ODFlYjEwNTEyZjc4NzQ0YTMyMDVmZCIsCisgICAgICAgICIzZjBlYmExNjI4NmEyZDU3ZWEwOTkxMTY4ZDQ5OTQ2MzdlODM0M2UzNiIsCisgICAgICAgICIwZDUxZmJjNmM3MWEwMDk0ZmEyY2RkNTQ1YjExYzVjMGM3OTczMjRmMSIsCisgICAgICAgIDY4LCAgICAgLyogRXBsICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsICAvKiAiMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MzA2NzM1NTc5MTYyNjAwMjYzMDgxNDM1MTAwNjYyOTg4ODEiICovCisgICAgICAgIDQ5LCAgICAgLyogRW9sICovCisgICAgICAgICI0MDAwMDAwMDAwMDAwMDAwMDAwMDI5MkZFNzdFNzBDMTJBNDIzNEMzMyIsICAgLyogIjU4NDYwMDY1NDkzMjM2MTE2NzI4MTQ3NDI0NDI4NzYzOTA2ODkyNTY4NDMyMDE1ODciICovCisgICAgICAgIDE2MywgICAgLyoga2V5X2xlbiAqLworICAgICAgICA3LAorICAgICAgICA2LAorICAgICAgICAzLAorICAgICAgICBDVVJWRV9HRl8yTQorICAgIH0sCisgICAgeworICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBCLTIzMyA6IHleMit4eT14XjMrYXheMitiICovCisgICAgICAgIENVUlZFX0JfMjMzLAorICAgICAgICA1OSwgICAgIC8qIEVjaGFyIDU5ICovCisgICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCisgICAgICAgICIwNjY2NDdlZGU2YzMzMmM3ZjhjMDkyM2JiNTgyMTNiMzMzYjIwZTljZTQyODFmZTExNWY3ZDhmOTBhZCIsCisgICAgICAgICIwZmFjOWRmY2JhYzgzMTNiYjIxMzlmMWJiNzU1ZmVmNjViYzM5MWY4YjM2ZjhmOGViNzM3MWZkNTU4YiIsCisgICAgICAgICIxMDA2YTA4YTQxOTAzMzUwNjc4ZTU4NTI4YmViZjhhMGJlZmY4NjdhN2NhMzY3MTZmN2UwMWY4MTA1MiIsCisgICAgICAgIDY4LCAgICAgLyogRXBsICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsICAvKiAiMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MzA2NzM1NTc5MTYyNjAwMjYzMDgxNDM1MTAwNjYyOTg4ODEiICovCisgICAgICAgIDcwLCAgICAgLyogRW9sICovCisgICAgICAgICIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzRTk3NEU3MkY4QTY5MjIwMzFEMjYwM0NGRTBENyIsICAvKiAiNjkwMTc0NjM0Njc5MDU2Mzc4NzQzNDc1NTg2MjI3NzAyNTU1NTgzOTgxMjczNzM0NTAxMzU1NTM3OTM4MzYzNDQ4NTQ2MyIgKi8KKyAgICAgICAgMjMzLCAgICAvKiBrZXlfbGVuICovCisgICAgICAgIDc0LAorICAgICAgICA3NCwKKyAgICAgICAgNzQsCisgICAgICAgIENVUlZFX0dGXzJNCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIE5JU1Q6IEN1cnZlIEItMjgzIDogeV4yK3h5PXheMytheF4yK2IgKi8KKyAgICAgICAgQ1VSVkVfQl8yODMsCisgICAgICAgIDcxLCAgICAgLyogRWNoYXIgKi8KKyAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwKKyAgICAgICAgIjI3YjY4MGFjOGI4NTk2ZGE1YTRhZjhhMTlhMDMwM2ZjYTk3ZmQ3NjQ1MzA5ZmEyYTU4MTQ4NWFmNjI2M2UzMTNiNzlhMmY1IiwKKyAgICAgICAgIjVmOTM5MjU4ZGI3ZGQ5MGUxOTM0ZjhjNzBiMGRmZWMyZWVkMjViODU1N2VhYzljODBlMmUxOThmOGNkYmVjZDg2YjEyMDUzIiwKKyAgICAgICAgIjM2NzY4NTRmZTI0MTQxY2I5OGZlNmQ0YjIwZDAyYjQ1MTZmZjcwMjM1MGVkZGIwODI2Nzc5YzgxM2YwZGY0NWJlODExMmY0IiwKKyAgICAgICAgNjgsICAgICAvKiBFcGwgKi8KKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwgIC8qICIyNjk1OTk0NjY2NzE1MDYzOTc5NDY2NzAxNTA4NzAxOTYzMDY3MzU1NzkxNjI2MDAyNjMwODE0MzUxMDA2NjI5ODg4MSIgKi8KKyAgICAgICAgODUsICAgICAvKiBFb2wgKi8KKyAgICAgICAgIjNGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUY5MDM5OTY2MEZDOTM4QTkwMTY1QjA0MkE3Q0VGQURCMzA3IiwgIC8qICI3NzcwNjc1NTY4OTAyOTE2MjgzNjc3ODQ3NjI3Mjk0MDc1NjI2NTY5NjI1OTI0Mzc2OTA0ODg5MTA5MTk2NTI2NzcwMDQ0Mjc3Nzg3Mzc4NjkyODcxIiAqLworICAgICAgICAyODMsICAgIC8qIGtleV9sZW4gKi8KKyAgICAgICAgMTIsCisgICAgICAgIDcsCisgICAgICAgIDUsCisgICAgICAgIENVUlZFX0dGXzJNCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIE5JU1Q6IEN1cnZlIEItNDA5IDogeV4yK3h5PXheMytheF4yK2IgKi8KKyAgICAgICAgQ1VSVkVfQl80MDksCisgICAgICAgIDEwMywgICAgLyogRWNoYXIgKi8KKyAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLAorICAgICAgICAiMDIxYTVjMmM4ZWU5ZmViNWM0YjlhNzUzYjdiNDc2YjdmZDY0MjJlZjFmM2RkNjc0NzYxZmE5OWQ2YWMyN2M4YTlhMTk3YjI3MjgyMmY2Y2Q1N2E1NWFhNGY1MGFlMzE3YjEzNTQ1ZiIsCisgICAgICAgICIxNWQ0ODYwZDA4OGRkYjM0OTZiMGM2MDY0NzU2MjYwNDQxY2RlNGFmMTc3MWQ0ZGIwMWZmZTViMzRlNTk3MDNkYzI1NWE4NjhhMTE4MDUxNTYwM2FlYWI2MDc5NGU1NGJiNzk5NmE3IiwKKyAgICAgICAgIjA2MWIxY2ZhYjZiZTVmMzJiYmZhNzgzMjRlZDEwNmE3NjM2YjljNWE3YmQxOThkMDE1OGFhNGY1NDg4ZDA4ZjM4NTE0ZjFmZGY0YjRmNDBkMjE4MWIzNjgxYzM2NGJhMDI3M2M3MDYiLAorICAgICAgICA2OCwgICAgIC8qIEVwbCAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLCAgLyogIjI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLworICAgICAgICAxMjMsICAgIC8qIEVvbCAqLworICAgICAgICAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFMkFBRDZBNjEyRjMzMzA3QkU1RkE0N0MzQzlFMDUyRjgzODE2NENEMzdEOUEyMTE3MyIsICAvKiAiNjYxMDU1OTY4NzkwMjQ4NTk4OTUxOTE1MzA4MDMyNzcxMDM5ODI4NDA0NjgyOTY0MjgxMjE5Mjg0NjQ4Nzk4MzA0MTU3Nzc0ODI3Mzc0ODA1MjA4MTQzNzIzNzYyMTc5MTEwOTY1OTc5ODY3Mjg4MzY2NTY3NTI2NzcxIiAqLworICAgICAgICA0MDksICAgIC8qIGtleV9sZW4gKi8KKyAgICAgICAgODcsCisgICAgICAgIDg3LAorICAgICAgICA4NywKKyAgICAgICAgQ1VSVkVfR0ZfMk0KKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogTklTVDogQ3VydmUgQi01NzEgOiB5XjIreHk9eF4zK2F4XjIrYiAqLworICAgICAgICBDVVJWRV9CXzU3MSwKKyAgICAgICAgMTQzLCAgICAvKiBFY2hhciAqLworICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLAorICAgICAgICAiMmY0MGU3ZTIyMjFmMjk1ZGUyOTcxMTdiN2YzZDYyZjVjNmE5N2ZmY2I4Y2VmZjFjZDZiYThjZTRhOWExOGFkODRmZmFiYmQ4ZWZhNTkzMzJiZTdhZDY3NTZhNjZlMjk0YWZkMTg1YTc4ZmYxMmFhNTIwZTRkZTczOWJhY2EwYzdmZmVmZjdmMjk1NTcyN2EiLAorICAgICAgICAiMzAzMDAxZDM0Yjg1NjI5NmMxNmMwZDQwZDNjZDc3NTBhOTNkMWQyOTU1ZmE4MGFhNWY0MGZjOGRiN2IyYWJkYmRlNTM5NTBmNGMwZDI5M2NkZDcxMWEzNWI2N2ZiMTQ5OWFlNjAwMzg2MTRmMTM5NGFiZmEzYjRjODUwZDkyN2UxZTc3NjljOGVlYzJkMTkiLAorICAgICAgICAiMzdiZjI3MzQyZGE2MzliNmRjY2ZmZmViNzNkNjlkNzhjNmMyN2E2MDA5Y2JiY2ExOTgwZjg1MzM5MjFlOGE2ODQ0MjNlNDNiYWIwOGE1NzYyOTFhZjhmNDYxYmIyYThiMzUzMWQyZjA0ODVjMTliMTZlMmYxNTE2ZTIzZGQzYzFhNDgyN2FmMWI4YWMxNWIiLAorICAgICAgICA2OCwgICAgIC8qIEVwbCAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLCAgLyogIjI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLworICAgICAgICAxNzIsICAgIC8qIEVvbCAqLworICAgICAgICAiM0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFNjYxQ0UxOEZGNTU5ODczMDgwNTlCMTg2ODIzODUxRUM3REQ5Q0ExMTYxREU5M0Q1MTc0RDY2RTgzODJFOUJCMkZFODRFNDciLCAgLyogIjM4NjQ1Mzc1MjMwMTcyNTgzNDQ2OTUzNTE4OTA5MzE5ODczNDQyOTg5MjczMjk3MDY0MzQ5OTg2NTcyMzUyNTE0NTE1MTkxNDIyODk1NjA0MjQ1MzYxNDM5OTkzODk0MTU3NzMwODMxMzM4ODExMjE5MjY5NDQ0ODYyNDY4NzI0NjI4MTY4MTMwNzAyMzQ1MjgyODgzMDMzMzI0MTEzOTMxOTExMDUyODU3MDMiICovCisgICAgICAgIDU3MSwgICAgLyoga2V5X2xlbiAqLworICAgICAgICAxMCwKKyAgICAgICAgNSwKKyAgICAgICAgMiwKKyAgICAgICAgQ1VSVkVfR0ZfMk0KKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogTklTVDogQ3VydmUgSy0xNjMgOiB5XjIreHk9eF4zK2F4XjIrYiAqLworICAgICAgICBDVVJWRV9LXzE2MywKKyAgICAgICAgNDEsICAgICAvKiBFY2hhciAqLworICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLAorICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLAorICAgICAgICAiMmZlMTNjMDUzN2JiYzExYWNhYTA3ZDc5M2RlNGU2ZDVlNWM5NGVlZTgiLAorICAgICAgICAiMjg5MDcwZmIwNWQzOGZmNTgzMjFmMmU4MDA1MzZkNTM4Y2NkYWEzZDkiLAorICAgICAgICA2OCwgICAgIC8qIEVwbCAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLCAgLyogIjI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLworICAgICAgICA0OSwgICAgIC8qIEVvbCAqLworICAgICAgICAiNDAwMDAwMDAwMDAwMDAwMDAwMDAyMDEwOEEyRTBDQzBEOTlGOEE1RUYiLCAgLyogIjU4NDYwMDY1NDkzMjM2MTE2NzI4MTQ3NDE3NTM1OTg0NDgzNDgzMjkxMTg1NzQwNjMiICovCisgICAgICAgIDE2MywgICAgLyoga2V5X2xlbiAqLworICAgICAgICA3LAorICAgICAgICA2LAorICAgICAgICAzLAorICAgICAgICBDVVJWRV9HRl8yTQorICAgIH0sCisgICAgeworICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBLLTIzMyA6IHleMit4eT14XjMrYXheMitiICovCisgICAgICAgIENVUlZFX0tfMjMzLAorICAgICAgICA1OSwgICAgIC8qIEVjaGFyIDU5ICovCisgICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCisgICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCisgICAgICAgICIxNzIzMmJhODUzYTdlNzMxYWYxMjlmMjJmZjQxNDk1NjNhNDE5YzI2YmY1MGE0YzlkNmVlZmFkNjEyNiIsCisgICAgICAgICIxZGI1MzdkZWNlODE5YjdmNzBmNTU1YTY3YzQyN2E4Y2Q5YmYxOGFlYjliNTZlMGMxMTA1NmZhZTZhMyIsCisgICAgICAgIDY4LCAgICAgLyogRXBsICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsICAgIC8qICIyNjk1OTk0NjY2NzE1MDYzOTc5NDY2NzAxNTA4NzAxOTYzMDY3MzU1NzkxNjI2MDAyNjMwODE0MzUxMDA2NjI5ODg4MSIgKi8KKyAgICAgICAgNzAsICAgICAvKiBFb2wgKi8KKyAgICAgICAgIjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjlENUJCOTE1QkNENDZFRkIxQUQ1RjE3M0FCREYiLCAgLyogIjM0NTA4NzMxNzMzOTUyODE4OTM3MTczNzc5MzExMzg1MTI3NjA1NzA5NDA5ODg4NjIyNTIxMjYzMjgwODcwMjQ3NDEzNDMiICovCisgICAgICAgIDIzMywgICAgLyoga2V5X2xlbiAqLworICAgICAgICA3NCwKKyAgICAgICAgNzQsCisgICAgICAgIDc0LAorICAgICAgICBDVVJWRV9HRl8yTQorICAgIH0sCisgICAgeworICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBLLTI4MyA6IHleMit4eT14XjMrYXheMitiICovCisgICAgICAgIENVUlZFX0tfMjgzLAorICAgICAgICA3MSwgICAgIC8qIEVjaGFyICovCisgICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCisgICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCisgICAgICAgICI1MDMyMTNmNzhjYTQ0ODgzZjFhM2I4MTYyZjE4OGU1NTNjZDI2NWYyM2MxNTY3YTE2ODc2OTEzYjBjMmFjMjQ1ODQ5MjgzNiIsCisgICAgICAgICIxY2NkYTM4MGYxYzllMzE4ZDkwZjk1ZDA3ZTU0MjZmZTg3ZTQ1YzBlODE4NDY5OGU0NTk2MjM2NGUzNDExNjE3N2RkMjI1OSIsCisgICAgICAgIDY4LCAgICAgLyogRXBsICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsICAvKiAiMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MzA2NzM1NTc5MTYyNjAwMjYzMDgxNDM1MTAwNjYyOTg4ODEiICovCisgICAgICAgIDg1LCAgICAgLyogRW9sICovCisgICAgICAgICIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkU5QUUyRUQwNzU3NzI2NURGRjdGOTQ0NTFFMDYxRTE2M0M2MSIsICAvKiAiMzg4NTMzNzc4NDQ1MTQ1ODE0MTgzODkyMzgxMzY0NzAzNzgxMzI4NDgxMTczMzc5MzA2MTMyNDI5NTg3NDk5NzUyOTgxNTgyOTcwNDQyMjYwMzg3MyIgKi8KKyAgICAgICAgMjgzLCAgICAvKiBrZXlfbGVuICovCisgICAgICAgIDEyLAorICAgICAgICA3LAorICAgICAgICA1LAorICAgICAgICBDVVJWRV9HRl8yTQorICAgIH0sCisgICAgeworICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBLLTQwOSA6IHleMit4eT14XjMrYXheMitiICovCisgICAgICAgIENVUlZFX0tfNDA5LAorICAgICAgICAxMDMsICAgIC8qIEVjaGFyICovCisgICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKKyAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLAorICAgICAgICAiMDYwZjA1ZjY1OGY0OWMxYWQzYWIxODkwZjcxODQyMTBlZmQwOTg3ZTMwN2M4NGMyN2FjY2ZiOGY5ZjY3Y2MyYzQ2MDE4OWViNWFhYWE2MmVlMjIyZWIxYjM1NTQwY2ZlOTAyMzc0NiIsCisgICAgICAgICIxZTM2OTA1MGI3YzRlNDJhY2JhMWRhY2JmMDQyOTljMzQ2MDc4MmY5MThlYTQyN2U2MzI1MTY1ZTllYTEwZTNkYTVmNmM0MmU5YzU1MjE1YWE5Y2EyN2E1ODYzZWM0OGQ4ZTAyODZiIiwKKyAgICAgICAgNjgsICAgICAvKiBFcGwgKi8KKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwgIC8qICIyNjk1OTk0NjY2NzE1MDYzOTc5NDY2NzAxNTA4NzAxOTYzMDY3MzU1NzkxNjI2MDAyNjMwODE0MzUxMDA2NjI5ODg4MSIgKi8KKyAgICAgICAgMTIzLCAgICAvKiBFb2wgKi8KKyAgICAgICAgIjdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkU1RjgzQjJENEVBMjA0MDBFQzQ1NTdENUVEM0UzRTdDQTVCNEI1QzgzQjhFMDFFNUZDRiIsICAvKiAiMzMwNTI3OTg0Mzk1MTI0Mjk5NDc1OTU3NjU0MDE2Mzg1NTE5OTE0MjAyMzQxNDgyMTQwNjA5NjQyMzI0Mzk1MDIyODgwNzExMjg5MjQ5MTkxMDUwNjczMjU4NDU3Nzc3NDU4MDE0MDk2MzY2NTkwNjE3NzMxMzU4NjcxIiAqLworICAgICAgICA0MDksICAgIC8qIGtleV9sZW4gKi8KKyAgICAgICAgODcsCisgICAgICAgIDg3LAorICAgICAgICA4NywKKyAgICAgICAgQ1VSVkVfR0ZfMk0KKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogTklTVDogQ3VydmUgSy01NzEgOiB5XjIreHk9eF4zK2F4XjIrYiAqLworICAgICAgICBDVVJWRV9LXzU3MSwKKyAgICAgICAgMTQzLCAgICAvKiBFY2hhciAqLworICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAorICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLAorICAgICAgICAiMjZlYjdhODU5OTIzZmJjODIxODk2MzFmODEwM2ZlNGFjOWNhMjk3MDAxMmQ1ZDQ2MDI0ODA0ODAxODQxY2E0NDM3MDk1ODQ5M2IyMDVlNjQ3ZGEzMDRkYjRjZWIwOGNiYmQxYmEzOTQ5NDc3NmZiOTg4YjQ3MTc0ZGNhODhjN2UyOTQ1MjgzYTAxYzg5NzIiLAorICAgICAgICAiMzQ5ZGM4MDdmNGZiZjM3NGY0YWVhZGUzYmNhOTUzMTRkZDU4Y2VjOWYzMDdhNTRmZmM2MWVmYzAwNmQ4YTJjOWQ0OTc5YzBhYzQ0YWVhNzRmYmViYmI5Zjc3MmFlZGNiNjIwYjAxYTdiYTdhZjFiMzIwNDMwYzg1OTE5ODRmNjAxY2Q0YzE0M2VmMWM3YTMiLAorICAgICAgICA2OCwgICAgIC8qIEVwbCAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLCAgLyogIjI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLworICAgICAgICAxNzIsICAgIC8qIEVvbCAqLworICAgICAgICAiMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMzE4NTBFMUYxOUE2M0U0QjM5MUE4REI5MTdGNDEzOEI2MzBEODRCRTVENjM5MzgxRTkxREVCNDVDRkU3NzhGNjM3QzEwMDEiLCAgLyogIjE5MzIyNjg3NjE1MDg2MjkxNzIzNDc2NzU5NDU0NjU5OTM2NzIxNDk0NjM2NjQ4NTMyMTc0OTkzMjg2MTc2MjU3MjU3NTk1NzExNDQ3ODAyMTIyNjgxMzM5Nzg1MjI3MDY3MTE4MzQ3MDY3MTI4MDA4MjUzNTE0NjEyNzM2NzQ5NzQwNjY2MTczMTE5Mjk2ODI0MjE2MTcwOTI1MDM1NTU3MzM2ODUyNzY2NzMiICovCisgICAgICAgIDU3MSwgICAgLyoga2V5X2xlbiAqLworICAgICAgICAxMCwKKyAgICAgICAgNSwKKyAgICAgICAgMiwKKyAgICAgICAgQ1VSVkVfR0ZfMk0KKyAgICB9LAorfTsKKyNlbmRpZgorCisKK3N0YXRpYyBFQ0NfQ1VSVkUgICpwQ3VydmU7CitzdGF0aWMgRUNDX0NVUlZFICBDdXJ2ZV9Db3B5OworCitzdGF0aWMgRUNDX0NVUlZFICogZ2V0X2N1cnZlKEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSk7CitzdGF0aWMgaW50MzJfdCBlY2NfaW5pdF9jdXJ2ZShDUlBUX1QgKmNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSk7CitzdGF0aWMgdm9pZCBydW5fZWNjX2NvZGVjKENSUFRfVCAqY3JwdCwgdWludDMyX3QgbW9kZSk7CisKK3N0YXRpYyBjaGFyICB0ZW1wX2hleF9zdHJbMTYwXTsKKworc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IGdfRUNDX2RvbmUsIGdfRUNDRVJSX2RvbmU7CisKK3ZvaWQgRUNDX0RyaXZlcklTUihDUlBUX1QgKmNycHQpCit7CisgICAgaWYoY3JwdC0+SU5UU1RTICYgQ1JQVF9JTlRTVFNfRUNDSUZfTXNrKQorICAgIHsKKyAgICAgICAgZ19FQ0NfZG9uZSA9IDFVTDsKKyAgICAgICAgY3JwdC0+SU5UU1RTID0gQ1JQVF9JTlRTVFNfRUNDSUZfTXNrOworICAgICAgICAvKiBwcmludGYoIkVDQyBkb25lIElSUS5cbiIpOyAqLworICAgIH0KKworICAgIGlmKGNycHQtPklOVFNUUyAmIENSUFRfSU5UU1RTX0VDQ0VJRl9Nc2spCisgICAgeworICAgICAgICBnX0VDQ0VSUl9kb25lID0gMVVMOworICAgICAgICBjcnB0LT5JTlRTVFMgPSBDUlBUX0lOVFNUU19FQ0NFSUZfTXNrOworICAgICAgICAvKiBwcmludGYoIkVDQ0VSUklGIGlzIHNldCEhXG4iKTsgKi8KKyAgICB9Cit9CisKKworI2lmIEVOQUJMRV9ERUJVRworc3RhdGljIHZvaWQgZHVtcF9lY2NfcmVnKGNoYXIgKnN0ciwgdWludDMyX3Qgdm9sYXRpbGUgcmVnc1tdLCBpbnQzMl90IGNvdW50KQoreworICAgIGludDMyX3QgIGk7CisKKyAgICBwcmludGYoIiVzID0+ICIsIHN0cik7CisgICAgZm9yKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHByaW50ZigiMHglMDh4ICIsIHJlZ3NbaV0pOworICAgIH0KKyAgICBwcmludGYoIlxuIik7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgZHVtcF9lY2NfcmVnKGNoYXIgKnN0ciwgdWludDMyX3Qgdm9sYXRpbGUgcmVnc1tdLCBpbnQzMl90IGNvdW50KSB7ICh2b2lkKXN0cjsgKHZvaWQpcmVnczsgKHZvaWQpY291bnQ7IH0KKyNlbmRpZgorc3RhdGljIGNoYXIgIGNoMmhleChjaGFyIGNoKQoreworICAgIGlmKGNoIDw9ICc5JykKKyAgICB7CisgICAgICAgIHJldHVybiBjaCAtICcwJzsKKyAgICB9CisgICAgZWxzZSBpZigoY2ggPD0gJ3onKSAmJiAoY2ggPj0gJ2EnKSkKKyAgICB7CisgICAgICAgIHJldHVybiBjaCAtICdhJyArIDEwVTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoIC0gJ0EnICsgMTBVOworICAgIH0KK30KKworc3RhdGljIHZvaWQgSGV4MlJlZyhjaGFyIGlucHV0W10sIHVpbnQzMl90IHZvbGF0aWxlIHJlZ1tdKQoreworICAgIGNoYXIgICAgICBoZXg7CisgICAgaW50ICAgICAgIHNpLCByaTsKKyAgICB1aW50MzJfdCAgaSwgdmFsMzI7CisKKyAgICBzaSA9IChpbnQpc3RybGVuKGlucHV0KSAtIDE7CisgICAgcmkgPSAwOworCisgICAgd2hpbGUoc2kgPj0gMCkKKyAgICB7CisgICAgICAgIHZhbDMyID0gMFVMOworICAgICAgICBmb3IoaSA9IDBVTDsgKGkgPCA4VUwpICYmIChzaSA+PSAwKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBoZXggPSBjaDJoZXgoaW5wdXRbc2ldKTsKKyAgICAgICAgICAgIHZhbDMyIHw9ICh1aW50MzJfdCloZXggPDwgKGkgKiA0VUwpOworICAgICAgICAgICAgc2ktLTsKKyAgICAgICAgfQorICAgICAgICByZWdbcmkrK10gPSB2YWwzMjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEhleDJSZWdFeChjaGFyIGlucHV0W10sIHVpbnQzMl90IHZvbGF0aWxlIHJlZ1tdLCBpbnQgc2hpZnQpCit7CisgICAgdWludDMyX3QgIGhleCwgY2Fycnk7CisgICAgaW50ICAgICAgIHNpLCByaTsKKyAgICB1aW50MzJfdCAgaSwgdmFsMzI7CisKKyAgICBzaSA9IChpbnQpc3RybGVuKGlucHV0KSAtIDE7CisgICAgcmkgPSAwOworICAgIGNhcnJ5ID0gMFU7CisgICAgd2hpbGUoc2kgPj0gMCkKKyAgICB7CisgICAgICAgIHZhbDMyID0gMFVMOworICAgICAgICBmb3IoaSA9IDBVTDsgKGkgPCA4VUwpICYmIChzaSA+PSAwKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBoZXggPSAodWludDMyX3QpY2gyaGV4KGlucHV0W3NpXSk7CisgICAgICAgICAgICBoZXggPDw9IHNoaWZ0OworCisgICAgICAgICAgICB2YWwzMiB8PSAodWludDMyX3QpKChoZXggJiAweEZVKSB8IGNhcnJ5KSA8PCAoaSAqIDRVTCk7CisgICAgICAgICAgICBjYXJyeSA9IChoZXggPj4gNCkgJiAweEZVOworICAgICAgICAgICAgc2ktLTsKKyAgICAgICAgfQorICAgICAgICByZWdbcmkrK10gPSB2YWwzMjsKKyAgICB9CisgICAgaWYoY2FycnkgIT0gMFUpCisgICAgeworICAgICAgICByZWdbcmldID0gY2Fycnk7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEV4dHJhY3Qgc3BlY2lmaWVkIG5pYmJsZSBmcm9tIGFuIHVuc2lnbmVkIHdvcmQgaW4gY2hhcmFjdGVyIGZvcm1hdC4KKyAgKiAgICAgICAgIEZvciBleGFtcGxlOgorICAqICAgICAgICAgICAgICAgIFN1cHBvc2UgdmFsMzIgaXMgMHg3ODY1NDMyMTAsIGdldF9OdGhfbmliYmxlX2NoYXIodmFsMzIsIDMpIHdpbGwgcmV0dXJuIGEgJzMnLgorICAqIEBwYXJhbVtpbl0gIHZhbDMyICAgVGhlIGlucHV0IHVuc2lnbmVkIHdvcmQKKyAgKiBAcGFyYW1baW5dICBpZHggICAgIFRoZSBOdGggbmliYmxlIHRvIGJlIGV4dHJhY3RlZC4KKyAgKiBAcmV0dXJuICBUaGUgbmliYmxlIGluIGNoYXJhY3RlciBmb3JtYXQuCisgICovCitzdGF0aWMgY2hhciBnZXRfTnRoX25pYmJsZV9jaGFyKHVpbnQzMl90IHZhbDMyLCB1aW50MzJfdCBpZHgpCit7CisgICAgcmV0dXJuIGhleF9jaGFyX3RibFsodmFsMzIgPj4gKGlkeCAqIDRVKSkgJiAweGZVIF07Cit9CisKKworc3RhdGljIHZvaWQgUmVnMkhleChpbnQzMl90IGNvdW50LCB1aW50MzJfdCB2b2xhdGlsZSByZWdbXSwgY2hhciBvdXRwdXRbXSkKK3sKKyAgICBpbnQzMl90ICAgIGlkeCwgcmk7CisgICAgdWludDMyX3QgICBpOworCisgICAgb3V0cHV0W2NvdW50XSA9IDBVOworICAgIGlkeCA9IGNvdW50IC0gMTsKKworICAgIGZvcihyaSA9IDA7IGlkeCA+PSAwOyByaSsrKQorICAgIHsKKyAgICAgICAgZm9yKGkgPSAwVUw7IChpIDwgOFVMKSAmJiAoaWR4ID49IDApOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFtpZHhdID0gZ2V0X050aF9uaWJibGVfY2hhcihyZWdbcmldLCBpKTsKKyAgICAgICAgICAgIGlkeC0tOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW50MzJfdCBlY2NfaW5pdF9jdXJ2ZShDUlBUX1QgKmNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSkKK3sKKyAgICBpbnQzMl90ICBpLCByZXQgPSAwOworCisgICAgcEN1cnZlID0gZ2V0X2N1cnZlKGVjY19jdXJ2ZSk7CisgICAgaWYocEN1cnZlID09IE5VTEwpCisgICAgeworICAgICAgICBDUlBUX0RCR01TRygiQ2Fubm90IGZpbmQgY3VydmUgJWQhIVxuIiwgZWNjX2N1cnZlKTsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorCisgICAgaWYocmV0ID09IDApCisgICAgeworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfQVtpXSA9IDBVTDsKKyAgICAgICAgICAgIGNycHQtPkVDQ19CW2ldID0gMFVMOworICAgICAgICAgICAgY3JwdC0+RUNDX1gxW2ldID0gMFVMOworICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gMFVMOworICAgICAgICAgICAgY3JwdC0+RUNDX05baV0gPSAwVUw7CisgICAgICAgIH0KKworICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RWEsIGNycHQtPkVDQ19BKTsKKyAgICAgICAgSGV4MlJlZyhwQ3VydmUtPkViLCBjcnB0LT5FQ0NfQik7CisgICAgICAgIEhleDJSZWcocEN1cnZlLT5QeCwgY3JwdC0+RUNDX1gxKTsKKyAgICAgICAgSGV4MlJlZyhwQ3VydmUtPlB5LCBjcnB0LT5FQ0NfWTEpOworCisgICAgICAgIENSUFRfREJHTVNHKCJLZXkgbGVuZ3RoID0gJWRcbiIsIHBDdXJ2ZS0+a2V5X2xlbik7CisgICAgICAgIGR1bXBfZWNjX3JlZygiQ1JQVF9FQ0NfQ1VSVkVfQSIsIGNycHQtPkVDQ19BLCAxMCk7CisgICAgICAgIGR1bXBfZWNjX3JlZygiQ1JQVF9FQ0NfQ1VSVkVfQiIsIGNycHQtPkVDQ19CLCAxMCk7CisgICAgICAgIGR1bXBfZWNjX3JlZygiQ1JQVF9FQ0NfUE9JTlRfWDEiLCBjcnB0LT5FQ0NfWDEsIDEwKTsKKyAgICAgICAgZHVtcF9lY2NfcmVnKCJDUlBUX0VDQ19QT0lOVF9ZMSIsIGNycHQtPkVDQ19ZMSwgMTApOworCisgICAgICAgIGlmKHBDdXJ2ZS0+R0YgPT0gKGludClDVVJWRV9HRl8yTSkKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX05bMF0gPSAweDFVTDsKKyAgICAgICAgICAgIGNycHQtPkVDQ19OWyhwQ3VydmUtPmtleV9sZW4pIC8gMzJdIHw9ICgxVUwgPDwgKChwQ3VydmUtPmtleV9sZW4pICUgMzIpKTsKKyAgICAgICAgICAgIGNycHQtPkVDQ19OWyhwQ3VydmUtPmlycmVkdWNpYmxlX2sxKSAvIDMyXSB8PSAoMVVMIDw8ICgocEN1cnZlLT5pcnJlZHVjaWJsZV9rMSkgJSAzMikpOworICAgICAgICAgICAgY3JwdC0+RUNDX05bKHBDdXJ2ZS0+aXJyZWR1Y2libGVfazIpIC8gMzJdIHw9ICgxVUwgPDwgKChwQ3VydmUtPmlycmVkdWNpYmxlX2syKSAlIDMyKSk7CisgICAgICAgICAgICBjcnB0LT5FQ0NfTlsocEN1cnZlLT5pcnJlZHVjaWJsZV9rMykgLyAzMl0gfD0gKDFVTCA8PCAoKHBDdXJ2ZS0+aXJyZWR1Y2libGVfazMpICUgMzIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEhleDJSZWcocEN1cnZlLT5QcCwgY3JwdC0+RUNDX04pOworICAgICAgICB9CisgICAgfQorICAgIGR1bXBfZWNjX3JlZygiQ1JQVF9FQ0NfQ1VSVkVfTiIsIGNycHQtPkVDQ19OLCAxMCk7CisgICAgcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50ICBnZXRfbmliYmxlX3ZhbHVlKGNoYXIgYykKK3sKKyAgICBjaGFyIGNoOworCisgICAgaWYoKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpKQorICAgIHsKKyAgICAgICAgY2ggPSAnMCc7CisgICAgICAgIHJldHVybiAoKGludCljIC0gKGludCljaCk7CisgICAgfQorCisgICAgaWYoKGMgPj0gJ2EnKSAmJiAoYyA8PSAnZicpKQorICAgIHsKKyAgICAgICAgY2ggPSAnYSc7CisgICAgICAgIHJldHVybiAoKGludCljIC0gKGludCljaCArIDEwKTsKKyAgICB9CisKKyAgICBpZigoYyA+PSAnQScpICYmIChjIDw9ICdGJykpCisgICAgeworICAgICAgICBjaCA9ICdBJzsKKyAgICAgICAgcmV0dXJuICgoaW50KWMgLSAoaW50KWNoICsgMTApOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBwcml2YXRlIGtleSBpcyBsb2NhdGVkIGluIHZhbGlkIHJhbmdlIG9mIGN1cnZlLgorICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1baW5dICBlY2NfY3VydmUgICBUaGUgcHJlLWRlZmluZWQgRUNDIGN1cnZlLgorICAqIEBwYXJhbVtpbl0gIHByaXZhdGVfayAgIFRoZSBpbnB1dCBwcml2YXRlIGtleS4KKyAgKiBAcmV0dXJuICAxICAgIElzIHZhbGlkLgorICAqIEByZXR1cm4gIDAgICAgSXMgbm90IHZhbGlkLgorICAqIEByZXR1cm4gIC0xICAgSW52YWxpZCBjdXJ2ZS4KKyAgKi8KK2ludCBFQ0NfSXNQcml2YXRlS2V5VmFsaWQoQ1JQVF9UICpjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsICBjaGFyIHByaXZhdGVfa1tdKQoreworICAgIHVpbnQzMl90ICBpOworCisgICAgKHZvaWQpY3JwdDsKKyAgICBwQ3VydmUgPSBnZXRfY3VydmUoZWNjX2N1cnZlKTsKKyAgICBpZihwQ3VydmUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZihzdHJsZW4ocHJpdmF0ZV9rKSA8IHN0cmxlbihwQ3VydmUtPkVvcmRlcikpCisgICAgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZihzdHJsZW4ocHJpdmF0ZV9rKSA+IHN0cmxlbihwQ3VydmUtPkVvcmRlcikpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBmb3IoaSA9IDBVOyBpIDwgc3RybGVuKHByaXZhdGVfayk7IGkrKykKKyAgICB7CisgICAgICAgIGlmKGdldF9uaWJibGVfdmFsdWUocHJpdmF0ZV9rW2ldKSA8IGdldF9uaWJibGVfdmFsdWUocEN1cnZlLT5Fb3JkZXJbaV0pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKGdldF9uaWJibGVfdmFsdWUocHJpdmF0ZV9rW2ldKSA+IGdldF9uaWJibGVfdmFsdWUocEN1cnZlLT5Fb3JkZXJbaV0pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCisvKioKKyAgKiBAYnJpZWYgIEdpdmVuIGEgcHJpdmF0ZSBrZXkgYW5kIGN1cnZlIHRvIGdlbmVyYXRlIHRoZSBwdWJsaWMga2V5IHBhaXIuCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHByaXZhdGVfayAgIFRoZSBpbnB1dCBwcml2YXRlIGtleS4KKyAgKiBAcGFyYW1baW5dICBlY2NfY3VydmUgICBUaGUgcHJlLWRlZmluZWQgRUNDIGN1cnZlLgorICAqIEBwYXJhbVtvdXRdIHB1YmxpY19rMSAgIFRoZSBvdXRwdXQgcHVibGljayBrZXkgMS4KKyAgKiBAcGFyYW1bb3V0XSBwdWJsaWNfazIgICBUaGUgb3V0cHV0IHB1YmxpY2sga2V5IDIuCisgICogQHJldHVybiAgMCAgICBTdWNjZXNzLgorICAqIEByZXR1cm4gIC0xICAgImVjY19jdXJ2ZSIgdmFsdWUgaXMgaW52YWxpZC4KKyAgKi8KK2ludDMyX3QgIEVDQ19HZW5lcmF0ZVB1YmxpY0tleShDUlBUX1QgKmNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgY2hhciAqcHJpdmF0ZV9rLCBjaGFyIHB1YmxpY19rMVtdLCBjaGFyIHB1YmxpY19rMltdKQoreworICAgIGludDMyX3QgIHJldCA9IDAsIGk7CisgICAgdWludDMyX3QgdTMyVG1wOworCisgICAgaWYoZWNjX2luaXRfY3VydmUoY3JwdCwgZWNjX2N1cnZlKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorCisgICAgaWYocmV0ID09IDApCisgICAgeworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfS1tpXSA9IDBVTDsKKyAgICAgICAgfQorCisgICAgICAgIEhleDJSZWcocHJpdmF0ZV9rLCBjcnB0LT5FQ0NfSyk7CisKKyAgICAgICAgLyogc2V0IEZTRUwgKEZpZWxkIHNlbGVjdGlvbikgKi8KKyAgICAgICAgaWYocEN1cnZlLT5HRiA9PSAoaW50KUNVUlZFX0dGXzJNKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfQ1RMID0gMFVMOworICAgICAgICB9CisgICAgICAgIGVsc2UgICAgICAgICAgIC8qICBDVVJWRV9HRl9QICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19DVEwgPSBDUlBUX0VDQ19DVExfRlNFTF9Nc2s7CisgICAgICAgIH0KKworICAgICAgICBnX0VDQ19kb25lID0gZ19FQ0NFUlJfZG9uZSA9IDBVTDsKKyAgICAgICAgY3JwdC0+RUNDX0NUTCB8PSAoKHVpbnQzMl90KXBDdXJ2ZS0+a2V5X2xlbiA8PCBDUlBUX0VDQ19DVExfQ1VSVkVNX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAgICAgIEVDQ09QX1BPSU5UX01VTCB8IENSUFRfRUNDX0NUTF9TVEFSVF9Nc2s7CisKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgdTMyVG1wID0gZ19FQ0NfZG9uZTsKKyAgICAgICAgICAgIHUzMlRtcCB8PSBnX0VDQ0VSUl9kb25lOworICAgICAgICB9CisgICAgICAgIHdoaWxlKHUzMlRtcCA9PSAwVUwpOworCisgICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgY3JwdC0+RUNDX1gxLCBwdWJsaWNfazEpOworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIGNycHQtPkVDQ19ZMSwgcHVibGljX2syKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisKKy8qKgorICAqIEBicmllZiAgR2l2ZW4gYSBjdXJ2ZSBwYXJhbWV0ZXIsIHRoZSBvdGhlciBwYXJ0eSdzIHB1YmxpYyBrZXksIGFuZCBvbmUncyBvd24gcHJpdmF0ZSBrZXkgdG8gZ2VuZXJhdGUgdGhlIHNlY3JldCBaLgorICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1baW5dICBlY2NfY3VydmUgICBUaGUgcHJlLWRlZmluZWQgRUNDIGN1cnZlLgorICAqIEBwYXJhbVtpbl0gIHByaXZhdGVfayAgIE9uZSdzIG93biBwcml2YXRlIGtleS4KKyAgKiBAcGFyYW1baW5dICBwdWJsaWNfazEgICBUaGUgb3RoZXIgcGFydHkncyBwdWJsaWNrIGtleSAxLgorICAqIEBwYXJhbVtpbl0gIHB1YmxpY19rMiAgIFRoZSBvdGhlciBwYXJ0eSdzIHB1YmxpY2sga2V5IDIuCisgICogQHBhcmFtW291dF0gc2VjcmV0X3ogICAgVGhlIEVDQyBDREggc2VjcmV0IFouCisgICogQHJldHVybiAgMCAgICBTdWNjZXNzLgorICAqIEByZXR1cm4gIC0xICAgImVjY19jdXJ2ZSIgdmFsdWUgaXMgaW52YWxpZC4KKyAgKi8KK2ludDMyX3QgIEVDQ19HZW5lcmF0ZVNlY3JldFooQ1JQVF9UICpjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsIGNoYXIgKnByaXZhdGVfaywgY2hhciBwdWJsaWNfazFbXSwgY2hhciBwdWJsaWNfazJbXSwgY2hhciBzZWNyZXRfeltdKQoreworICAgIGludDMyX3QgIGksIHJldCA9IDA7CisgICAgdWludDMyX3QgdTMyVG1wOworCisgICAgaWYoZWNjX2luaXRfY3VydmUoY3JwdCwgZWNjX2N1cnZlKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorCisgICAgaWYocmV0ID09IDApCisgICAgeworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfS1tpXSA9IDBVTDsKKyAgICAgICAgICAgIGNycHQtPkVDQ19YMVtpXSA9IDBVTDsKKyAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IDBVTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKChlY2NfY3VydmUgPT0gQ1VSVkVfQl8xNjMpIHx8IChlY2NfY3VydmUgPT0gQ1VSVkVfQl8yMzMpIHx8IChlY2NfY3VydmUgPT0gQ1VSVkVfQl8yODMpIHx8CisgICAgICAgICAgICAgICAgKGVjY19jdXJ2ZSA9PSBDVVJWRV9CXzQwOSkgfHwgKGVjY19jdXJ2ZSA9PSBDVVJWRV9CXzU3MSkgfHwgKGVjY19jdXJ2ZSA9PSBDVVJWRV9LXzE2MykpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhleDJSZWdFeChwcml2YXRlX2ssIGNycHQtPkVDQ19LLCAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChlY2NfY3VydmUgPT0gQ1VSVkVfS18yMzMpIHx8IChlY2NfY3VydmUgPT0gQ1VSVkVfS18yODMpIHx8CisgICAgICAgICAgICAgICAgKGVjY19jdXJ2ZSA9PSBDVVJWRV9LXzQwOSkgfHwgKGVjY19jdXJ2ZSA9PSBDVVJWRV9LXzU3MSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhleDJSZWdFeChwcml2YXRlX2ssIGNycHQtPkVDQ19LLCAyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEhleDJSZWcocHJpdmF0ZV9rLCBjcnB0LT5FQ0NfSyk7CisgICAgICAgIH0KKworICAgICAgICBIZXgyUmVnKHB1YmxpY19rMSwgY3JwdC0+RUNDX1gxKTsKKyAgICAgICAgSGV4MlJlZyhwdWJsaWNfazIsIGNycHQtPkVDQ19ZMSk7CisKKyAgICAgICAgLyogc2V0IEZTRUwgKEZpZWxkIHNlbGVjdGlvbikgKi8KKyAgICAgICAgaWYocEN1cnZlLT5HRiA9PSAoaW50KUNVUlZFX0dGXzJNKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfQ1RMID0gMFVMOworICAgICAgICB9CisgICAgICAgIGVsc2UgICAgICAgICAgIC8qICBDVVJWRV9HRl9QICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19DVEwgPSBDUlBUX0VDQ19DVExfRlNFTF9Nc2s7CisgICAgICAgIH0KKyAgICAgICAgZ19FQ0NfZG9uZSA9IGdfRUNDRVJSX2RvbmUgPSAwVUw7CisgICAgICAgIGNycHQtPkVDQ19DVEwgfD0gKCh1aW50MzJfdClwQ3VydmUtPmtleV9sZW4gPDwgQ1JQVF9FQ0NfQ1RMX0NVUlZFTV9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFQ0NPUF9QT0lOVF9NVUwgfCBDUlBUX0VDQ19DVExfU1RBUlRfTXNrOworCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlRtcCA9IGdfRUNDX2RvbmU7CisgICAgICAgICAgICB1MzJUbXAgfD0gZ19FQ0NFUlJfZG9uZTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSh1MzJUbXAgPT0gMFVMKTsKKworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIGNycHQtPkVDQ19YMSwgc2VjcmV0X3opOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9lY2NfY29kZWMoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCBtb2RlKQoreworICAgIHVpbnQzMl90IHUzMlRtcDsKKworICAgIGlmKChtb2RlICYgQ1JQVF9FQ0NfQ1RMX0VDQ09QX01zaykgPT0gRUNDT1BfTU9EVUxFKQorICAgIHsKKyAgICAgICAgY3JwdC0+RUNDX0NUTCA9IENSUFRfRUNDX0NUTF9GU0VMX01zazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYocEN1cnZlLT5HRiA9PSAoaW50KUNVUlZFX0dGXzJNKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBwb2ludCAqLworICAgICAgICAgICAgY3JwdC0+RUNDX0NUTCA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENVUlZFX0dGX1AgKi8KKyAgICAgICAgICAgIGNycHQtPkVDQ19DVEwgPSBDUlBUX0VDQ19DVExfRlNFTF9Nc2s7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnX0VDQ19kb25lID0gZ19FQ0NFUlJfZG9uZSA9IDBVTDsKKyAgICBjcnB0LT5FQ0NfQ1RMIHw9ICgodWludDMyX3QpcEN1cnZlLT5rZXlfbGVuIDw8IENSUFRfRUNDX0NUTF9DVVJWRU1fUG9zKSB8IG1vZGUgfCBDUlBUX0VDQ19DVExfU1RBUlRfTXNrOworCisgICAgZG8KKyAgICB7CisgICAgICAgIHUzMlRtcCA9IGdfRUNDX2RvbmU7CisgICAgICAgIHUzMlRtcCB8PSBnX0VDQ0VSUl9kb25lOworICAgIH0KKyAgICB3aGlsZSh1MzJUbXAgPT0gMFVMKTsKKworICAgIHdoaWxlKGNycHQtPkVDQ19TVFMgJiBDUlBUX0VDQ19TVFNfQlVTWV9Nc2spIHsgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEVDRFNBIGRpZ2l0YWwgc2lnbmF0dXJlIGdlbmVyYXRpb24uCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIGVjY19jdXJ2ZSAgIFRoZSBwcmUtZGVmaW5lZCBFQ0MgY3VydmUuCisgICogQHBhcmFtW2luXSAgbWVzc2FnZSAgICAgVGhlIGhhc2ggdmFsdWUgb2Ygc291cmNlIGNvbnRleHQuCisgICogQHBhcmFtW2luXSAgZCAgICAgICAgICAgVGhlIHByaXZhdGUga2V5LgorICAqIEBwYXJhbVtpbl0gIGsgICAgICAgICAgIFRoZSBzZWxlY3RlZCByYW5kb20gaW50ZWdlci4KKyAgKiBAcGFyYW1bb3V0XSBSICAgICAgICAgICBSIG9mIHRoZSAoUixTKSBwYWlyIGRpZ2l0YWwgc2lnbmF0dXJlCisgICogQHBhcmFtW291dF0gUyAgICAgICAgICAgUyBvZiB0aGUgKFIsUykgcGFpciBkaWdpdGFsIHNpZ25hdHVyZQorICAqIEByZXR1cm4gIDAgICAgU3VjY2Vzcy4KKyAgKiBAcmV0dXJuICAtMSAgICJlY2NfY3VydmUiIHZhbHVlIGlzIGludmFsaWQuCisgICovCitpbnQzMl90ICBFQ0NfR2VuZXJhdGVTaWduYXR1cmUoQ1JQVF9UICpjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsIGNoYXIgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZCwgY2hhciAqaywgY2hhciAqUiwgY2hhciAqUykKK3sKKyAgICB1aW50MzJfdCB2b2xhdGlsZSB0ZW1wX3Jlc3VsdDFbMThdLCB0ZW1wX3Jlc3VsdDJbMThdOworICAgIGludDMyX3QgIGksIHJldCA9IDA7CisKKyAgICBpZihlY2NfaW5pdF9jdXJ2ZShjcnB0LCBlY2NfY3VydmUpICE9IDApCisgICAgeworICAgICAgICByZXQgPSAtMTsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogICAxLiBDYWxjdWxhdGUgZSA9IEhBU0gobSksIHdoZXJlIEhBU0ggaXMgYSBjcnlwdG9ncmFwaGljIGhhc2hpbmcgYWxnb3JpdGhtLCAoaS5lLiBTSEEtMSkKKyAgICAgICAgICogICAgICAoMSkgVXNlIFNIQSB0byBjYWxjdWxhdGUgZQorICAgICAgICAgKi8KKworICAgICAgICAvKiAgIDIuIFNlbGVjdCBhIHJhbmRvbSBpbnRlZ2VyIGsgZm9ybSBbMSwgbi0xXQorICAgICAgICAgKiAgICAgICgxKSBOb3RpY2UgdGhhdCBuIGlzIG9yZGVyLCBub3QgcHJpbWUgbW9kdWx1cyBvciBpcnJlZHVjaWJsZSBwb2x5bm9taWFsIGZ1bmN0aW9uCisgICAgICAgICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqICAgMy4gQ29tcHV0ZSByID0geDEgKG1vZCBuKSwgd2hlcmUgKHgxLCB5MSkgPSBrICogRy4gSWYgciA9IDAsIGdvIHRvIHN0ZXAgMgorICAgICAgICAgKiAgICAgICgxKSBXcml0ZSB0aGUgY3VydmUgcGFyYW1ldGVyIEEsIEIsIGFuZCBjdXJ2ZSBsZW5ndGggTSB0byBjb3JyZXNwb25kaW5nIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgyKSBXcml0ZSB0aGUgcHJpbWUgbW9kdWx1cyBvciBpcnJlZHVjaWJsZSBwb2x5bm9taWFsIGZ1bmN0aW9uIHRvIE4gcmVnaXN0ZXJzIGFjY29yZGluZworICAgICAgICAgKiAgICAgICgzKSBXcml0ZSB0aGUgcG9pbnQgRyh4LCB5KSB0byBYMSwgWTEgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDQpIFdyaXRlIHRoZSByYW5kb20gaW50ZWdlciBrIHRvIEsgcmVnaXN0ZXIKKyAgICAgICAgICogICAgICAoNSkgU2V0IEVDQ09QKENSUFRfRUNDX0NUTFsxMDo5XSkgdG8gMDAKKyAgICAgICAgICogICAgICAoNikgU2V0IEZTRUwoQ1JQVF9FQ0NfQ1RMWzhdKSBhY2NvcmRpbmcgdG8gdXNlZCBjdXJ2ZSBvZiBwcmltZSBmaWVsZCBvciBiaW5hcnkgZmllbGQKKyAgICAgICAgICogICAgICAoNykgU2V0IFNUQVJUKENSUFRfRUNDX0NUTFswXSkgdG8gMQorICAgICAgICAgKiAgICAgICg4KSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZAorICAgICAgICAgKiAgICAgICg5KSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgYW5kIGN1cnZlIGxlbmd0aCB0byBOICxNIHJlZ2lzdGVycyBhY2NvcmRpbmcKKyAgICAgICAgICogICAgICAoMTApIFdyaXRlIDB4MCB0byBZMSByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMTEpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAxCisgICAgICAgICAqICAgICAgKDEyKSBTZXQgTU9QT1AoQ1JQVF9FQ0NfQ1RMWzEyOjExXSkgdG8gMTAKKyAgICAgICAgICogICAgICAoMTMpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDEgICAgICAgICAqCisgICAgICAgICAqICAgICAgKDE0KSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZAorICAgICAgICAgKiAgICAgICgxNSkgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IHIKKyAgICAgICAgICovCisKKyAgICAgICAgLyogMy0oNCkgV3JpdGUgdGhlIHJhbmRvbSBpbnRlZ2VyIGsgdG8gSyByZWdpc3RlciAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfS1tpXSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBIZXgyUmVnKGssIGNycHQtPkVDQ19LKTsKKworICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX1BPSU5UX01VTCk7CisKKyAgICAgICAgLyogIDMtKDkpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciB0byBOIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfTltpXSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RW9yZGVyLCBjcnB0LT5FQ0NfTik7CisKKyAgICAgICAgLyogMy0oMTApIFdyaXRlIDB4MCB0byBZMSByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gMFVMOworICAgICAgICB9CisKKyAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9NT0RVTEUgfCBNT0RPUF9BREQpOworCisgICAgICAgIC8qIDMtKDE1KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgciAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wX3Jlc3VsdDFbaV0gPSBjcnB0LT5FQ0NfWDFbaV07CisgICAgICAgIH0KKworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfcmVzdWx0MSwgUik7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogICA0LiBDb21wdXRlIHMgPSBrID8gMSCh0SAoZSArIGQgodEgcikobW9kIG4pLiBJZiBzID0gMCwgZ28gdG8gc3RlcCAyCisgICAgICAgICAqICAgICAgKDEpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciB0byBOIHJlZ2lzdGVycyBhY2NvcmRpbmcKKyAgICAgICAgICogICAgICAoMikgV3JpdGUgMHgxIHRvIFkxIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgzKSBXcml0ZSB0aGUgcmFuZG9tIGludGVnZXIgayB0byBYMSByZWdpc3RlcnMgYWNjb3JkaW5nCisgICAgICAgICAqICAgICAgKDQpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAxCisgICAgICAgICAqICAgICAgKDUpIFNldCBNT1BPUChDUlBUX0VDQ19DVExbMTI6MTFdKSB0byAwMAorICAgICAgICAgKiAgICAgICg2KSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxCisgICAgICAgICAqICAgICAgKDcpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkCisgICAgICAgICAqICAgICAgKDgpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCBrXi0xCisgICAgICAgICAqICAgICAgKDkpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciBhbmQgY3VydmUgbGVuZ3RoIHRvIE4gLE0gcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDEwKSBXcml0ZSByLCBkIHRvIFgxLCBZMSByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMTEpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAxCisgICAgICAgICAqICAgICAgKDEyKSBTZXQgTU9QT1AoQ1JQVF9FQ0NfQ1RMWzEyOjExXSkgdG8gMDEKKyAgICAgICAgICogICAgICAoMTMpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDEKKyAgICAgICAgICogICAgICAoMTQpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkCisgICAgICAgICAqICAgICAgKDE1KSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgdG8gTiByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMTYpIFdyaXRlIGUgdG8gWTEgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDE3KSBTZXQgRUNDT1AoQ1JQVF9FQ0NfQ1RMWzEwOjldKSB0byAwMQorICAgICAgICAgKiAgICAgICgxOCkgU2V0IE1PUE9QKENSUFRfRUNDX0NUTFsxMjoxMV0pIHRvIDEwCisgICAgICAgICAqICAgICAgKDE5KSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxCisgICAgICAgICAqICAgICAgKDIwKSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZAorICAgICAgICAgKiAgICAgICgyMSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIGFuZCBjdXJ2ZSBsZW5ndGggdG8gTiAsTSByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMjIpIFdyaXRlIGteLTEgdG8gWTEgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDIzKSBTZXQgRUNDT1AoQ1JQVF9FQ0NfQ1RMWzEwOjldKSB0byAwMQorICAgICAgICAgKiAgICAgICgyNCkgU2V0IE1PUE9QKENSUFRfRUNDX0NUTFsxMjoxMV0pIHRvIDAxCisgICAgICAgICAqICAgICAgKDI1KSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxCisgICAgICAgICAqICAgICAgKDI2KSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZAorICAgICAgICAgKiAgICAgICgyNykgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IHMKKyAgICAgICAgICovCisKKyAgICAgICAgLyogUy9XOiBHRnBfYWRkX21vZF9vcmRlcihwQ3VydmUtPmtleV9sZW4rMiwgMCwgeDEsIGEsIFIpOyAqLworCisgICAgICAgIC8qICA0LSgxKSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgdG8gTiByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX05baV0gPSAwVUw7CisgICAgICAgIH0KKyAgICAgICAgSGV4MlJlZyhwQ3VydmUtPkVvcmRlciwgY3JwdC0+RUNDX04pOworCisgICAgICAgIC8qICA0LSgyKSBXcml0ZSAweDEgdG8gWTEgcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBjcnB0LT5FQ0NfWTFbMF0gPSAweDFVTDsKKworICAgICAgICAvKiAgNC0oMykgV3JpdGUgdGhlIHJhbmRvbSBpbnRlZ2VyIGsgdG8gWDEgcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19YMVtpXSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBIZXgyUmVnKGssIGNycHQtPkVDQ19YMSk7CisKKyAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9NT0RVTEUgfCBNT0RPUF9ESVYpOworCisjaWYgRU5BQkxFX0RFQlVHCisgICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgY3JwdC0+RUNDX1gxLCB0ZW1wX2hleF9zdHIpOworICAgICAgICBDUlBUX0RCR01TRygiKDcpIG91dHB1dCA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworI2VuZGlmCisKKyAgICAgICAgLyogIDQtKDgpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCBrXi0xICovCisKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcF9yZXN1bHQyW2ldID0gY3JwdC0+RUNDX1gxW2ldOworICAgICAgICB9CisKKyNpZiBFTkFCTEVfREVCVUcKKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCB0ZW1wX3Jlc3VsdDIsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCJrXi0xID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7CisjZW5kaWYKKworICAgICAgICAvKiAgNC0oOSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIGFuZCBjdXJ2ZSBsZW5ndGggdG8gTiAsTSByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX05baV0gPSAwVUw7CisgICAgICAgIH0KKyAgICAgICAgSGV4MlJlZyhwQ3VydmUtPkVvcmRlciwgY3JwdC0+RUNDX04pOworCisgICAgICAgIC8qICA0LSgxMCkgV3JpdGUgciwgZCB0byBYMSwgWTEgcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19YMVtpXSA9IHRlbXBfcmVzdWx0MVtpXTsKKyAgICAgICAgfQorCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBIZXgyUmVnKGQsIGNycHQtPkVDQ19ZMSk7CisKKyAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9NT0RVTEUgfCBNT0RPUF9NVUwpOworCisjaWYgRU5BQkxFX0RFQlVHCisgICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgY3JwdC0+RUNDX1gxLCB0ZW1wX2hleF9zdHIpOworICAgICAgICBDUlBUX0RCR01TRygiKDE0KSBvdXRwdXQgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsKKyNlbmRpZgorCisgICAgICAgIC8qICA0LSgxNSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIHRvIE4gcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19OW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIEhleDJSZWcocEN1cnZlLT5Fb3JkZXIsIGNycHQtPkVDQ19OKTsKKworICAgICAgICAvKiAgNC0oMTYpIFdyaXRlIGUgdG8gWTEgcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IDBVTDsKKyAgICAgICAgfQorCisgICAgICAgIEhleDJSZWcobWVzc2FnZSwgY3JwdC0+RUNDX1kxKTsKKworICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX01PRFVMRSB8IE1PRE9QX0FERCk7CisKKyNpZiBFTkFCTEVfREVCVUcKKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCBjcnB0LT5FQ0NfWDEsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCIoMjApIG91dHB1dCA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworI2VuZGlmCisKKyAgICAgICAgLyogIDQtKDIxKSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgYW5kIGN1cnZlIGxlbmd0aCB0byBOICxNIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfTltpXSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RW9yZGVyLCBjcnB0LT5FQ0NfTik7CisKKyAgICAgICAgLyogIDQtKDIyKSBXcml0ZSBrXi0xIHRvIFkxIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWTFbaV0gPSB0ZW1wX3Jlc3VsdDJbaV07CisgICAgICAgIH0KKworICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX01PRFVMRSB8IE1PRE9QX01VTCk7CisKKyAgICAgICAgLyogIDQtKDI3KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgcyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wX3Jlc3VsdDJbaV0gPSBjcnB0LT5FQ0NfWDFbaV07CisgICAgICAgIH0KKworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfcmVzdWx0MiwgUyk7CisKKyAgICB9ICAvKiByZXQgPT0gMCAqLworCisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgICogQGJyaWVmICBFQ0RTQSBkb2dvdGFsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIGVjY19jdXJ2ZSAgIFRoZSBwcmUtZGVmaW5lZCBFQ0MgY3VydmUuCisgICogQHBhcmFtW2luXSAgbWVzc2FnZSAgICAgVGhlIGhhc2ggdmFsdWUgb2Ygc291cmNlIGNvbnRleHQuCisgICogQHBhcmFtW2luXSAgcHVibGljX2sxICAgVGhlIHB1YmxpYyBrZXkgMS4KKyAgKiBAcGFyYW1baW5dICBwdWJsaWNfazIgICBUaGUgcHVibGljIGtleSAyLgorICAqIEBwYXJhbVtpbl0gIFIgICAgICAgICAgIFIgb2YgdGhlIChSLFMpIHBhaXIgZGlnaXRhbCBzaWduYXR1cmUKKyAgKiBAcGFyYW1baW5dICBTICAgICAgICAgICBTIG9mIHRoZSAoUixTKSBwYWlyIGRpZ2l0YWwgc2lnbmF0dXJlCisgICogQHJldHVybiAgMCAgICBTdWNjZXNzLgorICAqIEByZXR1cm4gIC0xICAgImVjY19jdXJ2ZSIgdmFsdWUgaXMgaW52YWxpZC4KKyAgKiBAcmV0dXJuICAtMiAgIFZlcmlmaWNhdGlvbiBmYWlsZWQuCisgICovCitpbnQzMl90ICBFQ0NfVmVyaWZ5U2lnbmF0dXJlKENSUFRfVCAqY3JwdCwgRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlLCBjaGFyICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwdWJsaWNfazEsIGNoYXIgKnB1YmxpY19rMiwgY2hhciAqUiwgY2hhciAqUykKK3sKKyAgICB1aW50MzJfdCAgdGVtcF9yZXN1bHQxWzE4XSwgdGVtcF9yZXN1bHQyWzE4XTsKKyAgICB1aW50MzJfdCAgdGVtcF94WzE4XSwgdGVtcF95WzE4XTsKKyAgICBpbnQzMl90ICAgaSwgcmV0ID0gMDsKKworICAgIC8qCisgICAgICogICAxLiBWZXJpZnkgdGhhdCByIGFuZCBzIGFyZSBpbnRlZ2VycyBpbiB0aGUgaW50ZXJ2YWwgWzEsIG4tMV0uIElmIG5vdCwgdGhlIHNpZ25hdHVyZSBpcyBpbnZhbGlkCisgICAgICogICAyLiBDb21wdXRlIGUgPSBIQVNIIChtKSwgd2hlcmUgSEFTSCBpcyB0aGUgaGFzaGluZyBhbGdvcml0aG0gaW4gc2lnbmF0dXJlIGdlbmVyYXRpb24KKyAgICAgKiAgICAgICgxKSBVc2UgU0hBIHRvIGNhbGN1bGF0ZSBlCisgICAgICovCisKKyAgICAvKgorICAgICAqICAgMy4gQ29tcHV0ZSB3ID0gc14tMSAobW9kIG4pCisgICAgICogICAgICAoMSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIHRvIE4gcmVnaXN0ZXJzCisgICAgICogICAgICAoMikgV3JpdGUgMHgxIHRvIFkxIHJlZ2lzdGVycworICAgICAqICAgICAgKDMpIFdyaXRlIHMgdG8gWDEgcmVnaXN0ZXJzCisgICAgICogICAgICAoNCkgU2V0IEVDQ09QKENSUFRfRUNDX0NUTFsxMDo5XSkgdG8gMDEKKyAgICAgKiAgICAgICg1KSBTZXQgTU9QT1AoQ1JQVF9FQ0NfQ1RMWzEyOjExXSkgdG8gMDAKKyAgICAgKiAgICAgICg2KSBTZXQgRlNFTChDUlBUX0VDQ19DVExbOF0pIGFjY29yZGluZyB0byB1c2VkIGN1cnZlIG9mIHByaW1lIGZpZWxkIG9yIGJpbmFyeSBmaWVsZAorICAgICAqICAgICAgKDcpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDEKKyAgICAgKiAgICAgICg4KSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZAorICAgICAqICAgICAgKDkpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCB3CisgICAgICovCisKKyAgICBpZihlY2NfaW5pdF9jdXJ2ZShjcnB0LCBlY2NfY3VydmUpICE9IDApCisgICAgeworICAgICAgICByZXQgPSAtMTsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisKKyAgICAgICAgLyogIDMtKDEpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciB0byBOIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfTltpXSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RW9yZGVyLCBjcnB0LT5FQ0NfTik7CisKKyAgICAgICAgLyogIDMtKDIpIFdyaXRlIDB4MSB0byBZMSByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIGNycHQtPkVDQ19ZMVswXSA9IDB4MVVMOworCisgICAgICAgIC8qICAzLSgzKSBXcml0ZSBzIHRvIFgxIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBDUlBULT5FQ0NfWDFbaV0gPSAwVUw7CisgICAgICAgIH0KKyAgICAgICAgSGV4MlJlZyhTLCBjcnB0LT5FQ0NfWDEpOworCisgICAgICAgIHJ1bl9lY2NfY29kZWMoY3JwdCwgRUNDT1BfTU9EVUxFIHwgTU9ET1BfRElWKTsKKworICAgICAgICAvKiAgMy0oOSkgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IHcgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcF9yZXN1bHQyW2ldID0gY3JwdC0+RUNDX1gxW2ldOworICAgICAgICB9CisKKyNpZiBFTkFCTEVfREVCVUcKKyAgICAgICAgQ1JQVF9EQkdNU0coImUgPSAlc1xuIiwgbWVzc2FnZSk7CisgICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgdGVtcF9yZXN1bHQyLCB0ZW1wX2hleF9zdHIpOworICAgICAgICBDUlBUX0RCR01TRygidyA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworICAgICAgICBDUlBUX0RCR01TRygibyA9ICVzIChvcmRlcilcbiIsIHBDdXJ2ZS0+RW9yZGVyKTsKKyNlbmRpZgorCisgICAgICAgIC8qCisgICAgICAgICAqICAgNC4gQ29tcHV0ZSB1MSA9IGUgodEgdyAobW9kIG4pIGFuZCB1MiA9IHIgodEgdyAobW9kIG4pCisgICAgICAgICAqICAgICAgKDEpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciBhbmQgY3VydmUgbGVuZ3RoIHRvIE4gLE0gcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDIpIFdyaXRlIGUsIHcgdG8gWDEsIFkxIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgzKSBTZXQgRUNDT1AoQ1JQVF9FQ0NfQ1RMWzEwOjldKSB0byAwMQorICAgICAgICAgKiAgICAgICg0KSBTZXQgTU9QT1AoQ1JQVF9FQ0NfQ1RMWzEyOjExXSkgdG8gMDEKKyAgICAgICAgICogICAgICAoNSkgU2V0IFNUQVJUKENSUFRfRUNDX0NUTFswXSkgdG8gMQorICAgICAgICAgKiAgICAgICg2KSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZAorICAgICAgICAgKiAgICAgICg3KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgdTEKKyAgICAgICAgICogICAgICAoOCkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIGFuZCBjdXJ2ZSBsZW5ndGggdG8gTiAsTSByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoOSkgV3JpdGUgciwgdyB0byBYMSwgWTEgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDEwKSBTZXQgRUNDT1AoQ1JQVF9FQ0NfQ1RMWzEwOjldKSB0byAwMQorICAgICAgICAgKiAgICAgICgxMSkgU2V0IE1PUE9QKENSUFRfRUNDX0NUTFsxMjoxMV0pIHRvIDAxCisgICAgICAgICAqICAgICAgKDEyKSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxCisgICAgICAgICAqICAgICAgKDEzKSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZAorICAgICAgICAgKiAgICAgICgxNCkgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IHUyCisgICAgICAgICAqLworCisgICAgICAgIC8qICA0LSgxKSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgYW5kIGN1cnZlIGxlbmd0aCB0byBOICxNIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfTltpXSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RW9yZGVyLCBjcnB0LT5FQ0NfTik7CisKKyAgICAgICAgLyogNC0oMikgV3JpdGUgZSwgdyB0byBYMSwgWTEgcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19YMVtpXSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBIZXgyUmVnKG1lc3NhZ2UsIGNycHQtPkVDQ19YMSk7CisKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gdGVtcF9yZXN1bHQyW2ldOworICAgICAgICB9CisKKyAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9NT0RVTEUgfCBNT0RPUF9NVUwpOworCisgICAgICAgIC8qICA0LSg3KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgdTEgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcF9yZXN1bHQxW2ldID0gY3JwdC0+RUNDX1gxW2ldOworICAgICAgICB9CisKKyNpZiBFTkFCTEVfREVCVUcKKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCB0ZW1wX3Jlc3VsdDEsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCJ1MSA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworI2VuZGlmCisKKyAgICAgICAgLyogIDQtKDgpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciBhbmQgY3VydmUgbGVuZ3RoIHRvIE4gLE0gcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19OW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIEhleDJSZWcocEN1cnZlLT5Fb3JkZXIsIGNycHQtPkVDQ19OKTsKKworICAgICAgICAvKiA0LSg5KSBXcml0ZSByLCB3IHRvIFgxLCBZMSByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX1gxW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIEhleDJSZWcoUiwgY3JwdC0+RUNDX1gxKTsKKworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWTFbaV0gPSB0ZW1wX3Jlc3VsdDJbaV07CisgICAgICAgIH0KKworICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX01PRFVMRSB8IE1PRE9QX01VTCk7CisKKyAgICAgICAgLyogIDQtKDE0KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgdTIgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcF9yZXN1bHQyW2ldID0gY3JwdC0+RUNDX1gxW2ldOworICAgICAgICB9CisKKyNpZiBFTkFCTEVfREVCVUcKKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCB0ZW1wX3Jlc3VsdDIsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCJ1MiA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworI2VuZGlmCisKKyAgICAgICAgLyoKKyAgICAgICAgICogICA1LiBDb21wdXRlIFihpiAoeDGhpiwgeTGhpikgPSB1MSAqIEcgKyB1MiAqIFEKKyAgICAgICAgICogICAgICAoMSkgV3JpdGUgdGhlIGN1cnZlIHBhcmFtZXRlciBBLCBCLCBOLCBhbmQgY3VydmUgbGVuZ3RoIE0gdG8gY29ycmVzcG9uZGluZyByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMikgV3JpdGUgdGhlIHBvaW50IEcoeCwgeSkgdG8gWDEsIFkxIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgzKSBXcml0ZSB1MSB0byBLIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICg0KSBTZXQgRUNDT1AoQ1JQVF9FQ0NfQ1RMWzEwOjldKSB0byAwMAorICAgICAgICAgKiAgICAgICg1KSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxCisgICAgICAgICAqICAgICAgKDYpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkCisgICAgICAgICAqICAgICAgKDcpIFJlYWQgWDEsIFkxIHJlZ2lzdGVycyB0byBnZXQgdTEqRworICAgICAgICAgKiAgICAgICg4KSBXcml0ZSB0aGUgY3VydmUgcGFyYW1ldGVyIEEsIEIsIE4sIGFuZCBjdXJ2ZSBsZW5ndGggTSB0byBjb3JyZXNwb25kaW5nIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICg5KSBXcml0ZSB0aGUgcHVibGljIGtleSBRKHgseSkgdG8gWDEsIFkxIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgxMCkgV3JpdGUgdTIgdG8gSyByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMTEpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAwCisgICAgICAgICAqICAgICAgKDEyKSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxCisgICAgICAgICAqICAgICAgKDEzKSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZAorICAgICAgICAgKiAgICAgICgxNCkgV3JpdGUgdGhlIGN1cnZlIHBhcmFtZXRlciBBLCBCLCBOLCBhbmQgY3VydmUgbGVuZ3RoIE0gdG8gY29ycmVzcG9uZGluZyByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMTUpIFdyaXRlIHRoZSByZXN1bHQgZGF0YSB1MSpHIHRvIFgyLCBZMiByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMTYpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDEwCisgICAgICAgICAqICAgICAgKDE3KSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxCisgICAgICAgICAqICAgICAgKDE4KSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZAorICAgICAgICAgKiAgICAgICgxOSkgUmVhZCBYMSwgWTEgcmVnaXN0ZXJzIHRvIGdldCBYoaYoeDGhpiwgeTGhpikKKyAgICAgICAgICogICAgICAoMjApIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciBhbmQgY3VydmUgbGVuZ3RoIHRvIE4gLE0gcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDIxKSBXcml0ZSB4MaGmIHRvIFgxIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgyMikgV3JpdGUgMHgwIHRvIFkxIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgyMykgU2V0IEVDQ09QKENSUFRfRUNDX0NUTFsxMDo5XSkgdG8gMDEKKyAgICAgICAgICogICAgICAoMjQpIFNldCBNT1BPUChDUlBUX0VDQ19DVExbMTI6MTFdKSB0byAxMAorICAgICAgICAgKiAgICAgICgyNSkgU2V0IFNUQVJUKENSUFRfRUNDX0NUTFswXSkgdG8gMQorICAgICAgICAgKiAgICAgICgyNikgV2FpdCBmb3IgQlVTWShDUlBUX0VDQ19TVFNbMF0pIGJlIGNsZWFyZWQKKyAgICAgICAgICogICAgICAoMjcpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCB4MaGmIChtb2QgbikKKyAgICAgICAgICoKKyAgICAgICAgICogICA2LiBUaGUgc2lnbmF0dXJlIGlzIHZhbGlkIGlmIHgxoaYgPSByLCBvdGhlcndpc2UgaXQgaXMgaW52YWxpZAorICAgICAgICAgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiAgKDEpIFdyaXRlIHRoZSBjdXJ2ZSBwYXJhbWV0ZXIgQSwgQiwgTiwgYW5kIGN1cnZlIGxlbmd0aCBNIHRvIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXJzCisgICAgICAgICAqICAoMikgV3JpdGUgdGhlIHBvaW50IEcoeCwgeSkgdG8gWDEsIFkxIHJlZ2lzdGVycworICAgICAgICAgKi8KKyAgICAgICAgZWNjX2luaXRfY3VydmUoY3JwdCwgZWNjX2N1cnZlKTsKKworICAgICAgICAvKiAoMykgV3JpdGUgdTEgdG8gSyByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX0tbaV0gPSB0ZW1wX3Jlc3VsdDFbaV07CisgICAgICAgIH0KKworICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX1BPSU5UX01VTCk7CisKKyAgICAgICAgLyogKDcpIFJlYWQgWDEsIFkxIHJlZ2lzdGVycyB0byBnZXQgdTEqRyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wX3hbaV0gPSBjcnB0LT5FQ0NfWDFbaV07CisgICAgICAgICAgICB0ZW1wX3lbaV0gPSBjcnB0LT5FQ0NfWTFbaV07CisgICAgICAgIH0KKworI2lmIEVOQUJMRV9ERUJVRworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfeCwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coIjUtKDcpIHUxKkcsIHggPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCB0ZW1wX3ksIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCI1LSg3KSB1MSpHLCB5ID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7CisjZW5kaWYKKworICAgICAgICAvKiAoOCkgV3JpdGUgdGhlIGN1cnZlIHBhcmFtZXRlciBBLCBCLCBOLCBhbmQgY3VydmUgbGVuZ3RoIE0gdG8gY29ycmVzcG9uZGluZyByZWdpc3RlcnMgKi8KKyAgICAgICAgZWNjX2luaXRfY3VydmUoY3JwdCwgZWNjX2N1cnZlKTsKKworICAgICAgICAvKiAoOSkgV3JpdGUgdGhlIHB1YmxpYyBrZXkgUSh4LHkpIHRvIFgxLCBZMSByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX1gxW2ldID0gMFVMOworICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gMFVMOworICAgICAgICB9CisKKyAgICAgICAgSGV4MlJlZyhwdWJsaWNfazEsIGNycHQtPkVDQ19YMSk7CisgICAgICAgIEhleDJSZWcocHVibGljX2syLCBjcnB0LT5FQ0NfWTEpOworCisgICAgICAgIC8qICgxMCkgV3JpdGUgdTIgdG8gSyByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX0tbaV0gPSB0ZW1wX3Jlc3VsdDJbaV07CisgICAgICAgIH0KKworICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX1BPSU5UX01VTCk7CisKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcF9yZXN1bHQxW2ldID0gY3JwdC0+RUNDX1gxW2ldOworICAgICAgICAgICAgdGVtcF9yZXN1bHQyW2ldID0gY3JwdC0+RUNDX1kxW2ldOworICAgICAgICB9CisKKyNpZiBFTkFCTEVfREVCVUcKKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCB0ZW1wX3Jlc3VsdDEsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCI1LSgxMykgdTIqUSwgeCA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfcmVzdWx0MiwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coIjUtKDEzKSB1MipRLCB5ID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7CisjZW5kaWYKKworICAgICAgICAvKiAoMTQpIFdyaXRlIHRoZSBjdXJ2ZSBwYXJhbWV0ZXIgQSwgQiwgTiwgYW5kIGN1cnZlIGxlbmd0aCBNIHRvIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXJzICovCisgICAgICAgIGVjY19pbml0X2N1cnZlKGNycHQsIGVjY19jdXJ2ZSk7CisKKyAgICAgICAgLyogV3JpdGUgdGhlIHJlc3VsdCBkYXRhIHUyKlEgdG8gWDEsIFkxIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWDFbaV0gPSB0ZW1wX3Jlc3VsdDFbaV07CisgICAgICAgICAgICBjcnB0LT5FQ0NfWTFbaV0gPSB0ZW1wX3Jlc3VsdDJbaV07CisgICAgICAgIH0KKworICAgICAgICAvKiAoMTUpIFdyaXRlIHRoZSByZXN1bHQgZGF0YSB1MSpHIHRvIFgyLCBZMiByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX1gyW2ldID0gdGVtcF94W2ldOworICAgICAgICAgICAgY3JwdC0+RUNDX1kyW2ldID0gdGVtcF95W2ldOworICAgICAgICB9CisKKyAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9QT0lOVF9BREQpOworCisgICAgICAgIC8qICgxOSkgUmVhZCBYMSwgWTEgcmVnaXN0ZXJzIHRvIGdldCBYoaYoeDGhpiwgeTGhpikgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcF94W2ldID0gY3JwdC0+RUNDX1gxW2ldOworICAgICAgICAgICAgdGVtcF95W2ldID0gY3JwdC0+RUNDX1kxW2ldOworICAgICAgICB9CisKKyNpZiBFTkFCTEVfREVCVUcKKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCB0ZW1wX3gsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCI1LSgxOSkgeCcgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCB0ZW1wX3ksIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCI1LSgxOSkgeScgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsKKyNlbmRpZgorCisgICAgICAgIC8qICAoMjApIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciBhbmQgY3VydmUgbGVuZ3RoIHRvIE4gLE0gcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19OW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIEhleDJSZWcocEN1cnZlLT5Fb3JkZXIsIGNycHQtPkVDQ19OKTsKKworICAgICAgICAvKgorICAgICAgICAgKiAgKDIxKSBXcml0ZSB4MaGmIHRvIFgxIHJlZ2lzdGVycworICAgICAgICAgKiAgKDIyKSBXcml0ZSAweDAgdG8gWTEgcmVnaXN0ZXJzCisgICAgICAgICAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWDFbaV0gPSB0ZW1wX3hbaV07CisgICAgICAgICAgICBjcnB0LT5FQ0NfWTFbaV0gPSAwVUw7CisgICAgICAgIH0KKworI2lmIEVOQUJMRV9ERUJVRworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIGNycHQtPkVDQ19YMSwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coIjUtKDIxKSB4JyA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIGNycHQtPkVDQ19ZMSwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coIjUtKDIyKSB5JyA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworI2VuZGlmCisKKyAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9NT0RVTEUgfCBNT0RPUF9BREQpOworCisgICAgICAgIC8qICAoMjcpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCB4MaGmIChtb2QgbikgKi8KKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCBjcnB0LT5FQ0NfWDEsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCI1LSgyNykgeDEnIChtb2QgbikgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsKKworICAgICAgICAvKiA2LiBUaGUgc2lnbmF0dXJlIGlzIHZhbGlkIGlmIHgxoaYgPSByLCBvdGhlcndpc2UgaXQgaXMgaW52YWxpZCAqLworCisgICAgICAgIC8qIENvbXBhcmUgd2l0aCB0ZXN0IHBhdHRlcm4gdG8gY2hlY2sgaWYgciBpcyBjb3JyZWN0IG9yIG5vdCAqLworICAgICAgICBpZihzdHJjYXNlY21wKHRlbXBfaGV4X3N0ciwgUikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgQ1JQVF9EQkdNU0coIngxJyAobW9kIG4pICE9IFIgVGVzdCBmaWxlZCEhXG4iKTsKKyAgICAgICAgICAgIENSUFRfREJHTVNHKCJTaWduYXR1cmUgUiBbJXNdIGlzIG5vdCBtYXRjaGVkIHdpdGggZXhwZWN0ZWQgUiBbJXNdIVxuIiwgdGVtcF9oZXhfc3RyLCBSKTsKKyAgICAgICAgICAgIHJldCA9IC0yOworICAgICAgICB9CisgICAgfSAgLyogcmV0ID09IDAgKi8KKworICAgIHJldHVybiByZXQ7Cit9CisKKyNpZiBYT01fU1VQUE9SVCAvLyBUbyBzdXBwb3J0IFhPTSByZWFkeSBjdXJ2ZSB0YWJsZQorCitzdGF0aWMgaW50MzJfdCBDdXJ2ZUNweSh1bnNpZ25lZCBpbnQgKnAzMiwgRV9FQ0NfQ1VSVkUgaWQpCit7CisgICAgaW50MzJfdCBpOworCisgICAgc3dpdGNoKGlkKQorICAgIHsKKyAgICAgICAgY2FzZSBDVVJWRV9QXzE5MjoKKyAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSA4OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgcDMyWyAgOV0gPSAweDQ1NDY0NjQ2OworICAgICAgICAgICAgcDMyWyAxMF0gPSAweDQ2NDY0NjQ2OworICAgICAgICAgICAgcDMyWyAxMV0gPSAweDQ2NDY0NjQ2OworICAgICAgICAgICAgcDMyWyAxMl0gPSAweDQ2NDY0NjQ2OworICAgICAgICAgICAgcDMyWyAxM10gPSAweDQzNDY0NjQ2OworICAgICAgICAgICAgZm9yKGkgPSAxNDsgaSA8PSAzNzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgMzhdID0gMHgzMTMyMzQzNjsKKyAgICAgICAgICAgIHAzMlsgMzldID0gMHgzOTMxMzUzMDsKKyAgICAgICAgICAgIHAzMlsgNDBdID0gMHg2MzM5MzU2NTsKKyAgICAgICAgICAgIHAzMlsgNDFdID0gMHgzNzY1MzAzODsKKyAgICAgICAgICAgIHAzMlsgNDJdID0gMHgzNzYxNjYzMDsKKyAgICAgICAgICAgIHAzMlsgNDNdID0gMHg2MjYxMzk2NTsKKyAgICAgICAgICAgIHAzMlsgNDRdID0gMHgzNDMyMzIzNzsKKyAgICAgICAgICAgIHAzMlsgNDVdID0gMHgzOTM0MzAzMzsKKyAgICAgICAgICAgIHAzMlsgNDZdID0gMHgzODYyNjU2NjsKKyAgICAgICAgICAgIHAzMlsgNDddID0gMHg2MzY1NjU2NDsKKyAgICAgICAgICAgIHAzMlsgNDhdID0gMHgzNjM0MzE2MzsKKyAgICAgICAgICAgIHAzMlsgNDldID0gMHgzMTYyMzk2MjsKKyAgICAgICAgICAgIGZvcihpID0gNTA7IGkgPD0gNzM7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDc0XSA9IDB4NjQzODM4MzE7CisgICAgICAgICAgICBwMzJbIDc1XSA9IDB4NjUzMDM4NjE7CisgICAgICAgICAgICBwMzJbIDc2XSA9IDB4MzAzMzMwNjI7CisgICAgICAgICAgICBwMzJbIDc3XSA9IDB4MzY2NjMwMzk7CisgICAgICAgICAgICBwMzJbIDc4XSA9IDB4NjY2MjYzMzc7CisgICAgICAgICAgICBwMzJbIDc5XSA9IDB4NjI2NTMwMzI7CisgICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzE2MTMzMzQ7CisgICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzAzMDM4Mzg7CisgICAgICAgICAgICBwMzJbIDgyXSA9IDB4NjY2NjM0NjY7CisgICAgICAgICAgICBwMzJbIDgzXSA9IDB4NjQ2NjYxMzA7CisgICAgICAgICAgICBwMzJbIDg0XSA9IDB4NjY2NjMyMzg7CisgICAgICAgICAgICBwMzJbIDg1XSA9IDB4MzIzMTMwMzE7CisgICAgICAgICAgICBmb3IoaSA9IDg2OyBpIDw9IDEwOTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzOTMxMzczMDsKKyAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzNTM5NjIzMjsKKyAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzODYzNjY2NjsKKyAgICAgICAgICAgIHAzMlsxMTNdID0gMHgzODM3NjE2NDsKKyAgICAgICAgICAgIHAzMlsxMTRdID0gMHgzMDMxMzMzNjsKKyAgICAgICAgICAgIHAzMlsxMTVdID0gMHg2NDY1MzEzMTsKKyAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzNDMyNjIzNjsKKyAgICAgICAgICAgIHAzMlsxMTddID0gMHgzNTY0NjQ2MzsKKyAgICAgICAgICAgIHAzMlsxMThdID0gMHgzOTY2MzMzNzsKKyAgICAgICAgICAgIHAzMlsxMTldID0gMHgzMTYxMzczNzsKKyAgICAgICAgICAgIHAzMlsxMjBdID0gMHgzOTM3NjUzMTsKKyAgICAgICAgICAgIHAzMlsxMjFdID0gMHgzMTMxMzgzNDsKKyAgICAgICAgICAgIGZvcihpID0gMTIyOyBpIDw9IDE0NTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDAzYTsKKyAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1MzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsxNTRdID0gMHg0NTQ2NDY0NjsKKyAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1ODsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIGZvcihpID0gMTU5OyBpIDw9IDE5MDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDAzYTsKKyAgICAgICAgICAgIGZvcihpID0gMTkyOyBpIDw9IDE5NzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsxOThdID0gMHg0NTQ0MzkzOTsKKyAgICAgICAgICAgIHAzMlsxOTldID0gMHgzNjMzMzg0NjsKKyAgICAgICAgICAgIHAzMlsyMDBdID0gMHg0MjM2MzQzMTsKKyAgICAgICAgICAgIHAzMlsyMDFdID0gMHgzMTQyMzk0MzsKKyAgICAgICAgICAgIHAzMlsyMDJdID0gMHgzMjQ0MzQ0MjsKKyAgICAgICAgICAgIHAzMlsyMDNdID0gMHgzMTMzMzgzMjsKKyAgICAgICAgICAgIGZvcihpID0gMjA0OyBpIDw9IDIzNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDBjMDsKKyAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDAwNzsKKyAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDAwMjsKKyAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDAwMTsKKyAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIENVUlZFX1BfMjI0OgorICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDAxOworICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDM4OworICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDg7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBwMzJbICA5XSA9IDB4NDU0NjQ2NDY7CisgICAgICAgICAgICBmb3IoaSA9IDEwOyBpIDw9IDE0OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgcDMyWyAxNV0gPSAweDQ1NDY0NjQ2OworICAgICAgICAgICAgZm9yKGkgPSAxNjsgaSA8PSAzNzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgMzhdID0gMHgzNTMwMzQ2MjsKKyAgICAgICAgICAgIHAzMlsgMzldID0gMHgzNTM4NjEzMDsKKyAgICAgICAgICAgIHAzMlsgNDBdID0gMHgzNDMwNjMzMDsKKyAgICAgICAgICAgIHAzMlsgNDFdID0gMHg2MjYxMzM2MjsKKyAgICAgICAgICAgIHAzMlsgNDJdID0gMHgzMTM0MzU2NjsKKyAgICAgICAgICAgIHAzMlsgNDNdID0gMHgzNjM1MzIzMzsKKyAgICAgICAgICAgIHAzMlsgNDRdID0gMHgzNDM0MzAzNTsKKyAgICAgICAgICAgIHAzMlsgNDVdID0gMHgzNzYyMzA2MjsKKyAgICAgICAgICAgIHAzMlsgNDZdID0gMHg2NjYyMzc2NDsKKyAgICAgICAgICAgIHAzMlsgNDddID0gMHg2MTYyMzg2NDsKKyAgICAgICAgICAgIHAzMlsgNDhdID0gMHg2MjMwMzczMjsKKyAgICAgICAgICAgIHAzMlsgNDldID0gMHgzMzM0MzkzMzsKKyAgICAgICAgICAgIHAzMlsgNTBdID0gMHgzNTM1MzMzMjsKKyAgICAgICAgICAgIHAzMlsgNTFdID0gMHgzNDYyNjY2NjsKKyAgICAgICAgICAgIGZvcihpID0gNTI7IGkgPD0gNzM7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDc0XSA9IDB4NjUzMDM3NjI7CisgICAgICAgICAgICBwMzJbIDc1XSA9IDB4NjQ2MjYzMzA7CisgICAgICAgICAgICBwMzJbIDc2XSA9IDB4MzQ2MjYyMzY7CisgICAgICAgICAgICBwMzJbIDc3XSA9IDB4NjYzNzY2NjI7CisgICAgICAgICAgICBwMzJbIDc4XSA9IDB4MzMzMTMyMzM7CisgICAgICAgICAgICBwMzJbIDc5XSA9IDB4Mzk2MjMwMzk7CisgICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzMzMDYxMzQ7CisgICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzM2NDMxNjM7CisgICAgICAgICAgICBwMzJbIDgyXSA9IDB4MzI2MzM2MzU7CisgICAgICAgICAgICBwMzJbIDgzXSA9IDB4MzIzMjMxMzE7CisgICAgICAgICAgICBwMzJbIDg0XSA9IDB4MzIzMzM0MzM7CisgICAgICAgICAgICBwMzJbIDg1XSA9IDB4MzY2NDMwMzg7CisgICAgICAgICAgICBwMzJbIDg2XSA9IDB4NjMzNTMxMzE7CisgICAgICAgICAgICBwMzJbIDg3XSA9IDB4MzEzMjY0MzE7CisgICAgICAgICAgICBmb3IoaSA9IDg4OyBpIDw9IDEwOTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzNzMzNjQ2MjsKKyAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzODM4MzMzNjsKKyAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzNzY2MzU2MjsKKyAgICAgICAgICAgIHAzMlsxMTNdID0gMHg2MjY2MzMzMjsKKyAgICAgICAgICAgIHAzMlsxMTRdID0gMHgzMjMyNjMzNDsKKyAgICAgICAgICAgIHAzMlsxMTVdID0gMHgzNjY1NjY2NDsKKyAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzMzM0NjQ2MzsKKyAgICAgICAgICAgIHAzMlsxMTddID0gMHgzMDYxMzUzNzsKKyAgICAgICAgICAgIHAzMlsxMThdID0gMHgzNzMwNjEzNTsKKyAgICAgICAgICAgIHAzMlsxMTldID0gMHgzNDM2MzczNDsKKyAgICAgICAgICAgIHAzMlsxMjBdID0gMHgzNTY0MzQzNDsKKyAgICAgICAgICAgIHAzMlsxMjFdID0gMHgzOTM5MzEzODsKKyAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzMDMwMzUzODsKKyAgICAgICAgICAgIHAzMlsxMjNdID0gMHgzNDMzNjUzNzsKKyAgICAgICAgICAgIGZvcihpID0gMTI0OyBpIDw9IDE0NTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NjsKKyAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDA0NjsKKyAgICAgICAgICAgIGZvcihpID0gMTkyOyBpIDw9IDE5ODsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsxOTldID0gMHgzMjQxMzYzMTsKKyAgICAgICAgICAgIHAzMlsyMDBdID0gMHgzODQyMzA0NTsKKyAgICAgICAgICAgIHAzMlsyMDFdID0gMHg0NTMzMzA0NjsKKyAgICAgICAgICAgIHAzMlsyMDJdID0gMHg0NDQ0MzMzMTsKKyAgICAgICAgICAgIHAzMlsyMDNdID0gMHgzNTM0MzkzMjsKKyAgICAgICAgICAgIHAzMlsyMDRdID0gMHg0MzM1NDMzNTsKKyAgICAgICAgICAgIHAzMlsyMDVdID0gMHg0NDMzNDEzMjsKKyAgICAgICAgICAgIGZvcihpID0gMjA2OyBpIDw9IDIzNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDBlMDsKKyAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDAwOTsKKyAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDAwODsKKyAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDAwMzsKKyAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIENVUlZFX1BfMjU2OgorICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDAyOworICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDQwOworICAgICAgICAgICAgcDMyWyAgMl0gPSAweDQ2NDY0NjQ2OworICAgICAgICAgICAgcDMyWyAgM10gPSAweDQ2NDY0NjQ2OworICAgICAgICAgICAgcDMyWyAgNF0gPSAweDMwMzAzMDMwOworICAgICAgICAgICAgcDMyWyAgNV0gPSAweDMxMzAzMDMwOworICAgICAgICAgICAgZm9yKGkgPSA2OyBpIDw9IDExOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgZm9yKGkgPSAxMjsgaSA8PSAxNjsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsgMTddID0gMHg0MzQ2NDY0NjsKKyAgICAgICAgICAgIGZvcihpID0gMTg7IGkgPD0gMzc7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzY2MzYxMzU7CisgICAgICAgICAgICBwMzJbIDM5XSA9IDB4Mzg2NDM1MzM7CisgICAgICAgICAgICBwMzJbIDQwXSA9IDB4NjEzMzYxNjE7CisgICAgICAgICAgICBwMzJbIDQxXSA9IDB4Mzc2NTMzMzk7CisgICAgICAgICAgICBwMzJbIDQyXSA9IDB4NjI2NTMzNjI7CisgICAgICAgICAgICBwMzJbIDQzXSA9IDB4MzUzNTY0NjI7CisgICAgICAgICAgICBwMzJbIDQ0XSA9IDB4MzgzOTM2Mzc7CisgICAgICAgICAgICBwMzJbIDQ1XSA9IDB4NjM2MjM2Mzg7CisgICAgICAgICAgICBwMzJbIDQ2XSA9IDB4NjQzMTM1MzY7CisgICAgICAgICAgICBwMzJbIDQ3XSA9IDB4MzA2MjM2MzA7CisgICAgICAgICAgICBwMzJbIDQ4XSA9IDB4MzMzNTYzNjM7CisgICAgICAgICAgICBwMzJbIDQ5XSA9IDB4MzY2NjMwNjI7CisgICAgICAgICAgICBwMzJbIDUwXSA9IDB4NjU2MzYyMzM7CisgICAgICAgICAgICBwMzJbIDUxXSA9IDB4NjUzMzYzMzM7CisgICAgICAgICAgICBwMzJbIDUyXSA9IDB4MzI2NDM3MzI7CisgICAgICAgICAgICBwMzJbIDUzXSA9IDB4NjIzNDMwMzY7CisgICAgICAgICAgICBmb3IoaSA9IDU0OyBpIDw9IDczOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWyA3NF0gPSAweDM3MzE2MjM2OworICAgICAgICAgICAgcDMyWyA3NV0gPSAweDMyNjYzMTY0OworICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDYzMzIzMTY1OworICAgICAgICAgICAgcDMyWyA3N10gPSAweDM3MzQzMjM0OworICAgICAgICAgICAgcDMyWyA3OF0gPSAweDYzNjIzODY2OworICAgICAgICAgICAgcDMyWyA3OV0gPSAweDM1NjUzNjY1OworICAgICAgICAgICAgcDMyWyA4MF0gPSAweDM0NjEzMzM2OworICAgICAgICAgICAgcDMyWyA4MV0gPSAweDMyNjYzMDM0OworICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDMzMzAzNzM3OworICAgICAgICAgICAgcDMyWyA4M10gPSAweDMxMzg2NDM3OworICAgICAgICAgICAgcDMyWyA4NF0gPSAweDYyNjU2NDMyOworICAgICAgICAgICAgcDMyWyA4NV0gPSAweDMwNjEzMzMzOworICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDMxNjEzNDY2OworICAgICAgICAgICAgcDMyWyA4N10gPSAweDM1MzQzOTMzOworICAgICAgICAgICAgcDMyWyA4OF0gPSAweDM4MzkzODY0OworICAgICAgICAgICAgcDMyWyA4OV0gPSAweDM2MzkzMjYzOworICAgICAgICAgICAgZm9yKGkgPSA5MDsgaSA8PSAxMDk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTEwXSA9IDB4MzM2NTY2MzQ7CisgICAgICAgICAgICBwMzJbMTExXSA9IDB4MzI2NTMyMzQ7CisgICAgICAgICAgICBwMzJbMTEyXSA9IDB4NjEzMTY1NjY7CisgICAgICAgICAgICBwMzJbMTEzXSA9IDB4NjIzOTY2Mzc7CisgICAgICAgICAgICBwMzJbMTE0XSA9IDB4Mzc2NTY1Mzg7CisgICAgICAgICAgICBwMzJbMTE1XSA9IDB4NjEzNDYyNjU7CisgICAgICAgICAgICBwMzJbMTE2XSA9IDB4NjYzMDYzMzc7CisgICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzYzMTY1Mzk7CisgICAgICAgICAgICBwMzJbMTE4XSA9IDB4NjU2MzYyMzI7CisgICAgICAgICAgICBwMzJbMTE5XSA9IDB4MzczNTMzMzM7CisgICAgICAgICAgICBwMzJbMTIwXSA9IDB4MzEzMzYyMzY7CisgICAgICAgICAgICBwMzJbMTIxXSA9IDB4NjU2MzY1MzU7CisgICAgICAgICAgICBwMzJbMTIyXSA9IDB4MzY2MjYyNjM7CisgICAgICAgICAgICBwMzJbMTIzXSA9IDB4MzgzNjMwMzQ7CisgICAgICAgICAgICBwMzJbMTI0XSA9IDB4NjY2MjM3MzM7CisgICAgICAgICAgICBwMzJbMTI1XSA9IDB4MzU2NjMxMzU7CisgICAgICAgICAgICBmb3IoaSA9IDEyNjsgaSA8PSAxNDU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNGU7CisgICAgICAgICAgICBwMzJbMTQ3XSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBwMzJbMTQ4XSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBwMzJbMTQ5XSA9IDB4MzAzMDMwMzA7CisgICAgICAgICAgICBwMzJbMTUwXSA9IDB4MzEzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDE1MTsgaSA8PSAxNTY7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBmb3IoaSA9IDE1NzsgaSA8PSAxNjI7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBmb3IoaSA9IDE2MzsgaSA8PSAxOTA7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwNGU7CisgICAgICAgICAgICBwMzJbMTkyXSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBwMzJbMTkzXSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBwMzJbMTk0XSA9IDB4MzAzMDMwMzA7CisgICAgICAgICAgICBwMzJbMTk1XSA9IDB4MzAzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDE5NjsgaSA8PSAxOTk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBwMzJbMjAwXSA9IDB4MzY0NTQzNDI7CisgICAgICAgICAgICBwMzJbMjAxXSA9IDB4NDQ0MTQxNDY7CisgICAgICAgICAgICBwMzJbMjAyXSA9IDB4MzczMTM3NDE7CisgICAgICAgICAgICBwMzJbMjAzXSA9IDB4MzQzODQ1Mzk7CisgICAgICAgICAgICBwMzJbMjA0XSA9IDB4Mzk0MjMzNDY7CisgICAgICAgICAgICBwMzJbMjA1XSA9IDB4MzI0MzQxNDM7CisgICAgICAgICAgICBwMzJbMjA2XSA9IDB4MzMzNjQzNDY7CisgICAgICAgICAgICBwMzJbMjA3XSA9IDB4MzEzNTM1MzI7CisgICAgICAgICAgICBmb3IoaSA9IDIwODsgaSA8PSAyMzU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAxMDA7CisgICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMGE7CisgICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMDU7CisgICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMDI7CisgICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBDVVJWRV9QXzM4NDoKKyAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwMzsKKyAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDA2MDsKKyAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAxNjsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsgMTddID0gMHg0NTQ2NDY0NjsKKyAgICAgICAgICAgIHAzMlsgMThdID0gMHg0NjQ2NDY0NjsKKyAgICAgICAgICAgIHAzMlsgMTldID0gMHg0NjQ2NDY0NjsKKyAgICAgICAgICAgIGZvcihpID0gMjA7IGkgPD0gMjM7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbIDI0XSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBwMzJbIDI1XSA9IDB4NDM0NjQ2NDY7CisgICAgICAgICAgICBmb3IoaSA9IDI2OyBpIDw9IDM3OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWyAzOF0gPSAweDMxMzMzMzYyOworICAgICAgICAgICAgcDMyWyAzOV0gPSAweDM3NjE2NjMyOworICAgICAgICAgICAgcDMyWyA0MF0gPSAweDY1MzMzMjY1OworICAgICAgICAgICAgcDMyWyA0MV0gPSAweDM0NjUzNzY1OworICAgICAgICAgICAgcDMyWyA0Ml0gPSAweDY1MzgzODM5OworICAgICAgICAgICAgcDMyWyA0M10gPSAweDYyMzYzNTMwOworICAgICAgICAgICAgcDMyWyA0NF0gPSAweDM4NjYzMzY1OworICAgICAgICAgICAgcDMyWyA0NV0gPSAweDM5MzE2NDMyOworICAgICAgICAgICAgcDMyWyA0Nl0gPSAweDY0MzEzODMxOworICAgICAgICAgICAgcDMyWyA0N10gPSAweDY1MzY2MzM5OworICAgICAgICAgICAgcDMyWyA0OF0gPSAweDMxMzg2NTY2OworICAgICAgICAgICAgcDMyWyA0OV0gPSAweDMyMzEzMTM0OworICAgICAgICAgICAgcDMyWyA1MF0gPSAweDM0MzEzMzMwOworICAgICAgICAgICAgcDMyWyA1MV0gPSAweDY2MzgzODMwOworICAgICAgICAgICAgcDMyWyA1Ml0gPSAweDMzMzEzMDM1OworICAgICAgICAgICAgcDMyWyA1M10gPSAweDYxMzUzNzM4OworICAgICAgICAgICAgcDMyWyA1NF0gPSAweDM2MzUzNjYzOworICAgICAgICAgICAgcDMyWyA1NV0gPSAweDY0MzgzOTMzOworICAgICAgICAgICAgcDMyWyA1Nl0gPSAweDY1MzI2MTM4OworICAgICAgICAgICAgcDMyWyA1N10gPSAweDY0MzkzMTY0OworICAgICAgICAgICAgcDMyWyA1OF0gPSAweDM1Mzg2MTMyOworICAgICAgICAgICAgcDMyWyA1OV0gPSAweDY0NjUzODYzOworICAgICAgICAgICAgcDMyWyA2MF0gPSAweDYzNjUzMzY0OworICAgICAgICAgICAgcDMyWyA2MV0gPSAweDY2NjU2MTMyOworICAgICAgICAgICAgZm9yKGkgPSA2MjsgaSA8PSA3MzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgNzRdID0gMHgzNzM4NjE2MTsKKyAgICAgICAgICAgIHAzMlsgNzVdID0gMHgzMjMyNjE2MzsKKyAgICAgICAgICAgIHAzMlsgNzZdID0gMHg2MjM4NjU2MjsKKyAgICAgICAgICAgIHAzMlsgNzddID0gMHgzNzMzMzUzMDsKKyAgICAgICAgICAgIHAzMlsgNzhdID0gMHgzMTYyNjUzODsKKyAgICAgICAgICAgIHAzMlsgNzldID0gMHg2NTMxMzc2MzsKKyAgICAgICAgICAgIHAzMlsgODBdID0gMHgzMDMyMzM2NjsKKyAgICAgICAgICAgIHAzMlsgODFdID0gMHgzNDM3NjQ2MTsKKyAgICAgICAgICAgIHAzMlsgODJdID0gMHg2NDMxNjUzNjsKKyAgICAgICAgICAgIHAzMlsgODNdID0gMHgzMjM2NjIzMzsKKyAgICAgICAgICAgIHAzMlsgODRdID0gMHgzNzYxNjIzODsKKyAgICAgICAgICAgIHAzMlsgODVdID0gMHgzODM5NjIzOTsKKyAgICAgICAgICAgIHAzMlsgODZdID0gMHgzNzY2MzkzNTsKKyAgICAgICAgICAgIHAzMlsgODddID0gMHgzMDY1MzEzNDsKKyAgICAgICAgICAgIHAzMlsgODhdID0gMHgzNDM1MzIzODsKKyAgICAgICAgICAgIHAzMlsgODldID0gMHgzODMzNjEzMjsKKyAgICAgICAgICAgIHAzMlsgOTBdID0gMHgzMjMwMzUzNTsKKyAgICAgICAgICAgIHAzMlsgOTFdID0gMHg2NDM1MzI2NjsKKyAgICAgICAgICAgIHAzMlsgOTJdID0gMHgzNTM1NjY2MjsKKyAgICAgICAgICAgIHAzMlsgOTNdID0gMHg2MzM2MzkzMjsKKyAgICAgICAgICAgIHAzMlsgOTRdID0gMHgzNDM1NjEzMzsKKyAgICAgICAgICAgIHAzMlsgOTVdID0gMHgzODMzNjUzNTsKKyAgICAgICAgICAgIHAzMlsgOTZdID0gMHgzNjM3MzIzNzsKKyAgICAgICAgICAgIHAzMlsgOTddID0gMHgzNzYyNjEzMDsKKyAgICAgICAgICAgIGZvcihpID0gOTg7IGkgPD0gMTA5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzExMF0gPSAweDM3MzEzNjMzOworICAgICAgICAgICAgcDMyWzExMV0gPSAweDYxMzQ2NTY0OworICAgICAgICAgICAgcDMyWzExMl0gPSAweDM2MzIzNjM5OworICAgICAgICAgICAgcDMyWzExM10gPSAweDY2MzY2MzMyOworICAgICAgICAgICAgcDMyWzExNF0gPSAweDY1Mzk2NDM1OworICAgICAgICAgICAgcDMyWzExNV0gPSAweDY2NjIzODM5OworICAgICAgICAgICAgcDMyWzExNl0gPSAweDMyMzkzMjM5OworICAgICAgICAgICAgcDMyWzExN10gPSAweDM5MzI2MzY0OworICAgICAgICAgICAgcDMyWzExOF0gPSAweDM0NjYzODY2OworICAgICAgICAgICAgcDMyWzExOV0gPSAweDY0NjI2NDMxOworICAgICAgICAgICAgcDMyWzEyMF0gPSAweDYxMzkzODMyOworICAgICAgICAgICAgcDMyWzEyMV0gPSAweDYzMzczNDMxOworICAgICAgICAgICAgcDMyWzEyMl0gPSAweDYxNjQzOTY1OworICAgICAgICAgICAgcDMyWzEyM10gPSAweDMzMzEzMTMzOworICAgICAgICAgICAgcDMyWzEyNF0gPSAweDMwNjYzNTYyOworICAgICAgICAgICAgcDMyWzEyNV0gPSAweDMwNjMzODYyOworICAgICAgICAgICAgcDMyWzEyNl0gPSAweDMwMzY2MTMwOworICAgICAgICAgICAgcDMyWzEyN10gPSAweDY1NjMzMTYyOworICAgICAgICAgICAgcDMyWzEyOF0gPSAweDY1Mzc2NDMxOworICAgICAgICAgICAgcDMyWzEyOV0gPSAweDY0MzkzMTM4OworICAgICAgICAgICAgcDMyWzEzMF0gPSAweDMzMzQ2MTM3OworICAgICAgICAgICAgcDMyWzEzMV0gPSAweDYzMzc2NDMxOworICAgICAgICAgICAgcDMyWzEzMl0gPSAweDYxNjUzMDM5OworICAgICAgICAgICAgcDMyWzEzM10gPSAweDY2MzU2NTMwOworICAgICAgICAgICAgZm9yKGkgPSAxMzQ7IGkgPD0gMTQ1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE0Nl0gPSAweDAwMDAwMDc0OworICAgICAgICAgICAgZm9yKGkgPSAxNDc7IGkgPD0gMTYxOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgcDMyWzE2Ml0gPSAweDQ1NDY0NjQ2OworICAgICAgICAgICAgcDMyWzE2M10gPSAweDQ2NDY0NjQ2OworICAgICAgICAgICAgcDMyWzE2NF0gPSAweDQ2NDY0NjQ2OworICAgICAgICAgICAgZm9yKGkgPSAxNjU7IGkgPD0gMTY4OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWzE2OV0gPSAweDQ2NDY0NjQ2OworICAgICAgICAgICAgcDMyWzE3MF0gPSAweDQ2NDY0NjQ2OworICAgICAgICAgICAgZm9yKGkgPSAxNzE7IGkgPD0gMTkwOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE5MV0gPSAweDAwMDAwMDc0OworICAgICAgICAgICAgZm9yKGkgPSAxOTI7IGkgPD0gMjAzOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgcDMyWzIwNF0gPSAweDMzMzYzNzQzOworICAgICAgICAgICAgcDMyWzIwNV0gPSAweDMxMzg0NDM0OworICAgICAgICAgICAgcDMyWzIwNl0gPSAweDM3MzMzNDQ2OworICAgICAgICAgICAgcDMyWzIwN10gPSAweDQ2NDQ0NDMyOworICAgICAgICAgICAgcDMyWzIwOF0gPSAweDQxMzEzODM1OworICAgICAgICAgICAgcDMyWzIwOV0gPSAweDMyNDI0NDMwOworICAgICAgICAgICAgcDMyWzIxMF0gPSAweDMwNDIzODM0OworICAgICAgICAgICAgcDMyWzIxMV0gPSAweDQxMzczNzQxOworICAgICAgICAgICAgcDMyWzIxMl0gPSAweDQzNDU0MzQ1OworICAgICAgICAgICAgcDMyWzIxM10gPSAweDQxMzYzOTMxOworICAgICAgICAgICAgcDMyWzIxNF0gPSAweDM1NDM0MzQzOworICAgICAgICAgICAgcDMyWzIxNV0gPSAweDMzMzczOTMyOworICAgICAgICAgICAgZm9yKGkgPSAyMTY7IGkgPD0gMjM1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzIzNl0gPSAweDAwMDAwMTgwOworICAgICAgICAgICAgcDMyWzIzN10gPSAweDAwMDAwMDBjOworICAgICAgICAgICAgcDMyWzIzOF0gPSAweDAwMDAwMDAzOworICAgICAgICAgICAgcDMyWzIzOV0gPSAweDAwMDAwMDAyOworICAgICAgICAgICAgcDMyWzI0MF0gPSAweDAwMDAwMDAwOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgQ1VSVkVfUF81MjE6CisgICAgICAgICAgICBwMzJbICAwXSA9IDB4MDAwMDAwMDQ7CisgICAgICAgICAgICBwMzJbICAxXSA9IDB4MDAwMDAwODM7CisgICAgICAgICAgICBwMzJbICAyXSA9IDB4NDY0NjQ2MzE7CisgICAgICAgICAgICBmb3IoaSA9IDM7IGkgPD0gMzM7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBwMzJbIDM0XSA9IDB4MDA0MzQ2NDY7CisgICAgICAgICAgICBwMzJbIDM1XSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICBwMzJbIDM2XSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICBwMzJbIDM3XSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzkzMTM1MzA7CisgICAgICAgICAgICBwMzJbIDM5XSA9IDB4NjI2NTMzMzU7CisgICAgICAgICAgICBwMzJbIDQwXSA9IDB4MzgzMTM2Mzk7CisgICAgICAgICAgICBwMzJbIDQxXSA9IDB4Mzk2MzMxNjU7CisgICAgICAgICAgICBwMzJbIDQyXSA9IDB4Mzk2NjMxNjE7CisgICAgICAgICAgICBwMzJbIDQzXSA9IDB4MzI2MTM5MzI7CisgICAgICAgICAgICBwMzJbIDQ0XSA9IDB4NjIzMDYxMzE7CisgICAgICAgICAgICBwMzJbIDQ1XSA9IDB4MzQzNTM4MzY7CisgICAgICAgICAgICBwMzJbIDQ2XSA9IDB4NjE2NTY1MzA7CisgICAgICAgICAgICBwMzJbIDQ3XSA9IDB4Mzc2MTY0MzI7CisgICAgICAgICAgICBwMzJbIDQ4XSA9IDB4Mzk2MjM1MzI7CisgICAgICAgICAgICBwMzJbIDQ5XSA9IDB4MzEzMzYyMzk7CisgICAgICAgICAgICBwMzJbIDUwXSA9IDB4NjIzMzY2MzU7CisgICAgICAgICAgICBwMzJbIDUxXSA9IDB4MzgzNDYyMzg7CisgICAgICAgICAgICBwMzJbIDUyXSA9IDB4MzgzMTM5Mzk7CisgICAgICAgICAgICBwMzJbIDUzXSA9IDB4MzAzMTY2NjU7CisgICAgICAgICAgICBwMzJbIDU0XSA9IDB4MzUzMTY1Mzk7CisgICAgICAgICAgICBwMzJbIDU1XSA9IDB4MzMzOTMxMzY7CisgICAgICAgICAgICBwMzJbIDU2XSA9IDB4NjUzMTM1Mzk7CisgICAgICAgICAgICBwMzJbIDU3XSA9IDB4Mzk2NTM3NjM7CisgICAgICAgICAgICBwMzJbIDU4XSA9IDB4MzE2MjM3MzM7CisgICAgICAgICAgICBwMzJbIDU5XSA9IDB4NjMzMjM1MzY7CisgICAgICAgICAgICBwMzJbIDYwXSA9IDB4MzM2NDYyMzA7CisgICAgICAgICAgICBwMzJbIDYxXSA9IDB4NjIzMTYyNjI7CisgICAgICAgICAgICBwMzJbIDYyXSA9IDB4MzMzNzMwNjY7CisgICAgICAgICAgICBwMzJbIDYzXSA9IDB4NjQzMzM3MzU7CisgICAgICAgICAgICBwMzJbIDY0XSA9IDB4MzMzODM4NjY7CisgICAgICAgICAgICBwMzJbIDY1XSA9IDB4MzM2MzMyNjQ7CisgICAgICAgICAgICBwMzJbIDY2XSA9IDB4NjUzMTY2MzQ7CisgICAgICAgICAgICBwMzJbIDY3XSA9IDB4MzEzNTM0NjY7CisgICAgICAgICAgICBwMzJbIDY4XSA9IDB4MzYzNDY0NjY7CisgICAgICAgICAgICBwMzJbIDY5XSA9IDB4MzMzMDM1NjI7CisgICAgICAgICAgICBwMzJbIDcwXSA9IDB4MDAzMDMwNjY7CisgICAgICAgICAgICBwMzJbIDcxXSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICBwMzJbIDcyXSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICBwMzJbIDczXSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICBwMzJbIDc0XSA9IDB4MzgzNjYzMzA7CisgICAgICAgICAgICBwMzJbIDc1XSA9IDB4MzA2NTM4MzU7CisgICAgICAgICAgICBwMzJbIDc2XSA9IDB4MzAzNzYyMzY7CisgICAgICAgICAgICBwMzJbIDc3XSA9IDB4NjUzNDMwMzQ7CisgICAgICAgICAgICBwMzJbIDc4XSA9IDB4Mzk2NDYzMzk7CisgICAgICAgICAgICBwMzJbIDc5XSA9IDB4NjM2NTMzNjU7CisgICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzIzNjM2NjI7CisgICAgICAgICAgICBwMzJbIDgxXSA9IDB4NjIzNTM5MzM7CisgICAgICAgICAgICBwMzJbIDgyXSA9IDB4MzkzMjM0MzQ7CisgICAgICAgICAgICBwMzJbIDgzXSA9IDB4MzgzNDM2NjM7CisgICAgICAgICAgICBwMzJbIDg0XSA9IDB4MzAzOTMzMzE7CisgICAgICAgICAgICBwMzJbIDg1XSA9IDB4NjI2NjMzMzU7CisgICAgICAgICAgICBwMzJbIDg2XSA9IDB4NjYzMTMyMzU7CisgICAgICAgICAgICBwMzJbIDg3XSA9IDB4NjEzODMyMzg7CisgICAgICAgICAgICBwMzJbIDg4XSA9IDB4MzYzMDM2NjY7CisgICAgICAgICAgICBwMzJbIDg5XSA9IDB4MzM2NDM0NjI7CisgICAgICAgICAgICBwMzJbIDkwXSA9IDB4NjE2MTYyNjQ7CisgICAgICAgICAgICBwMzJbIDkxXSA9IDB4MzU2MjM0MzE7CisgICAgICAgICAgICBwMzJbIDkyXSA9IDB4NjUzNzM3NjU7CisgICAgICAgICAgICBwMzJbIDkzXSA9IDB4MzUzNzY1NjY7CisgICAgICAgICAgICBwMzJbIDk0XSA9IDB4NjYzODMyMzk7CisgICAgICAgICAgICBwMzJbIDk1XSA9IDB4NjM2NDMxNjU7CisgICAgICAgICAgICBwMzJbIDk2XSA9IDB4NjEzNzMyMzE7CisgICAgICAgICAgICBwMzJbIDk3XSA9IDB4NjE2NjY2MzI7CisgICAgICAgICAgICBwMzJbIDk4XSA9IDB4MzM2NTY0Mzg7CisgICAgICAgICAgICBwMzJbIDk5XSA9IDB4NjIzODM0MzM7CisgICAgICAgICAgICBwMzJbMTAwXSA9IDB4MzgzMTYzMzM7CisgICAgICAgICAgICBwMzJbMTAxXSA9IDB4MzQ2MTM2MzU7CisgICAgICAgICAgICBwMzJbMTAyXSA9IDB4NjY2MjM5MzI7CisgICAgICAgICAgICBwMzJbMTAzXSA9IDB4Mzc2NTM3Mzk7CisgICAgICAgICAgICBwMzJbMTA0XSA9IDB4NjMzMTMzNjU7CisgICAgICAgICAgICBwMzJbMTA1XSA9IDB4NjIzNTY1MzI7CisgICAgICAgICAgICBwMzJbMTA2XSA9IDB4MDAzNjM2NjQ7CisgICAgICAgICAgICBwMzJbMTA3XSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICBwMzJbMTA4XSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICBwMzJbMTA5XSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICBwMzJbMTEwXSA9IDB4MzMzODMxMzE7CisgICAgICAgICAgICBwMzJbMTExXSA9IDB4MzYzOTMyMzk7CisgICAgICAgICAgICBwMzJbMTEyXSA9IDB4MzkzODM3NjE7CisgICAgICAgICAgICBwMzJbMTEzXSA9IDB4NjM2MjMzNjE7CisgICAgICAgICAgICBwMzJbMTE0XSA9IDB4MzUzNDMwMzA7CisgICAgICAgICAgICBwMzJbMTE1XSA9IDB4MzU2MTM4NjM7CisgICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzIzNDYyNjY7CisgICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzE2NDM3NjM7CisgICAgICAgICAgICBwMzJbMTE4XSA9IDB4MzkzOTY0NjI7CisgICAgICAgICAgICBwMzJbMTE5XSA9IDB4MzQzNTY2Mzg7CisgICAgICAgICAgICBwMzJbMTIwXSA9IDB4MzUzOTM0MzQ7CisgICAgICAgICAgICBwMzJbMTIxXSA9IDB4MzQ2MjM5Mzc7CisgICAgICAgICAgICBwMzJbMTIyXSA9IDB4MzEzODM2MzQ7CisgICAgICAgICAgICBwMzJbMTIzXSA9IDB4NjI2NjYxMzc7CisgICAgICAgICAgICBwMzJbMTI0XSA9IDB4MzIzNzMxNjQ7CisgICAgICAgICAgICBwMzJbMTI1XSA9IDB4MzY2NTMzMzc7CisgICAgICAgICAgICBwMzJbMTI2XSA9IDB4Mzk2MzMyMzY7CisgICAgICAgICAgICBwMzJbMTI3XSA9IDB4Mzc2NTY1Mzc7CisgICAgICAgICAgICBwMzJbMTI4XSA9IDB4MzUzOTM5MzI7CisgICAgICAgICAgICBwMzJbMTI5XSA9IDB4MzIzNDY2NjU7CisgICAgICAgICAgICBwMzJbMTMwXSA9IDB4NjMzMDM0MzY7CisgICAgICAgICAgICBwMzJbMTMxXSA9IDB4NjIzMDM1MzU7CisgICAgICAgICAgICBwMzJbMTMyXSA9IDB4MzMzMTMwMzk7CisgICAgICAgICAgICBwMzJbMTMzXSA9IDB4MzA2NDYxNjY7CisgICAgICAgICAgICBwMzJbMTM0XSA9IDB4MzMzMTM2Mzc7CisgICAgICAgICAgICBwMzJbMTM1XSA9IDB4Mzc2MzMzMzU7CisgICAgICAgICAgICBwMzJbMTM2XSA9IDB4NjEzNjM4MzA7CisgICAgICAgICAgICBwMzJbMTM3XSA9IDB4NjMzMjM3MzI7CisgICAgICAgICAgICBwMzJbMTM4XSA9IDB4MzgzMDM0MzI7CisgICAgICAgICAgICBwMzJbMTM5XSA9IDB4Mzk2NTYyMzg7CisgICAgICAgICAgICBwMzJbMTQwXSA9IDB4MzkzNjM3MzQ7CisgICAgICAgICAgICBwMzJbMTQxXSA9IDB4MzYzMTY0NjY7CisgICAgICAgICAgICBwMzJbMTQyXSA9IDB4MDAzMDM1MzY7CisgICAgICAgICAgICBwMzJbMTQzXSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICBwMzJbMTQ0XSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICBwMzJbMTQ1XSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwOWQ7CisgICAgICAgICAgICBwMzJbMTQ3XSA9IDB4NDY0NjQ2MzE7CisgICAgICAgICAgICBmb3IoaSA9IDE0ODsgaSA8PSAxNzg7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBwMzJbMTc5XSA9IDB4MDA0NjQ2NDY7CisgICAgICAgICAgICBmb3IoaSA9IDE4MDsgaSA8PSAxOTA7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwOWQ7CisgICAgICAgICAgICBwMzJbMTkyXSA9IDB4NDY0NjQ2MzE7CisgICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAyMDc7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBwMzJbMjA4XSA9IDB4MzU0MTQ2NDY7CisgICAgICAgICAgICBwMzJbMjA5XSA9IDB4MzgzNjM4MzE7CisgICAgICAgICAgICBwMzJbMjEwXSA9IDB4NDIzMzM4Mzc7CisgICAgICAgICAgICBwMzJbMjExXSA9IDB4Mzk0NjMyNDY7CisgICAgICAgICAgICBwMzJbMjEyXSA9IDB4Mzc0MjM2MzY7CisgICAgICAgICAgICBwMzJbMjEzXSA9IDB4MzA0MzQzNDY7CisgICAgICAgICAgICBwMzJbMjE0XSA9IDB4NDYzODM0MzE7CisgICAgICAgICAgICBwMzJbMjE1XSA9IDB4NDEzOTMwMzc7CisgICAgICAgICAgICBwMzJbMjE2XSA9IDB4MzMzMDQ0MzU7CisgICAgICAgICAgICBwMzJbMjE3XSA9IDB4NDMzNTQyNDI7CisgICAgICAgICAgICBwMzJbMjE4XSA9IDB4MzgzODQyMzk7CisgICAgICAgICAgICBwMzJbMjE5XSA9IDB4MzQ0MzM5Mzk7CisgICAgICAgICAgICBwMzJbMjIwXSA9IDB4NDI0NTQxMzc7CisgICAgICAgICAgICBwMzJbMjIxXSA9IDB4NDI0NjM2NDI7CisgICAgICAgICAgICBwMzJbMjIyXSA9IDB4Mzk0NTMxMzc7CisgICAgICAgICAgICBwMzJbMjIzXSA9IDB4MzYzODMzMzE7CisgICAgICAgICAgICBwMzJbMjI0XSA9IDB4MDAzOTMwMzQ7CisgICAgICAgICAgICBmb3IoaSA9IDIyNTsgaSA8PSAyMzU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAyMDk7CisgICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMjA7CisgICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMjA7CisgICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMjA7CisgICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBDVVJWRV9CXzE2MzoKKyAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwYTsKKyAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDAyOTsKKyAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAxMTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsgMTJdID0gMHgwMDAwMDAzMTsKKyAgICAgICAgICAgIGZvcihpID0gMTM7IGkgPD0gMzc7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzY2MTMwMzI7CisgICAgICAgICAgICBwMzJbIDM5XSA9IDB4MzAzOTMxMzA7CisgICAgICAgICAgICBwMzJbIDQwXSA9IDB4NjMzODYyMzc7CisgICAgICAgICAgICBwMzJbIDQxXSA9IDB4NjMzMzM1Mzk7CisgICAgICAgICAgICBwMzJbIDQyXSA9IDB4MzgzNDMxNjE7CisgICAgICAgICAgICBwMzJbIDQzXSA9IDB4MzE2MjY1MzE7CisgICAgICAgICAgICBwMzJbIDQ0XSA9IDB4MzIzMTM1MzA7CisgICAgICAgICAgICBwMzJbIDQ1XSA9IDB4MzczODM3NjY7CisgICAgICAgICAgICBwMzJbIDQ2XSA9IDB4MzM2MTM0MzQ7CisgICAgICAgICAgICBwMzJbIDQ3XSA9IDB4NjYzNTMwMzI7CisgICAgICAgICAgICBwMzJbIDQ4XSA9IDB4MDAwMDAwNjQ7CisgICAgICAgICAgICBmb3IoaSA9IDQ5OyBpIDw9IDczOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWyA3NF0gPSAweDY1MzA2NjMzOworICAgICAgICAgICAgcDMyWyA3NV0gPSAweDM2MzE2MTYyOworICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDYxMzYzODMyOworICAgICAgICAgICAgcDMyWyA3N10gPSAweDM3MzU2NDMyOworICAgICAgICAgICAgcDMyWyA3OF0gPSAweDM5MzA2MTY1OworICAgICAgICAgICAgcDMyWyA3OV0gPSAweDM2MzEzMTM5OworICAgICAgICAgICAgcDMyWyA4MF0gPSAweDM5MzQ2NDM4OworICAgICAgICAgICAgcDMyWyA4MV0gPSAweDMzMzYzNDM5OworICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDMzMzg2NTM3OworICAgICAgICAgICAgcDMyWyA4M10gPSAweDMzNjUzMzM0OworICAgICAgICAgICAgcDMyWyA4NF0gPSAweDAwMDAwMDM2OworICAgICAgICAgICAgZm9yKGkgPSA4NTsgaSA8PSAxMDk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTEwXSA9IDB4MzEzNTY0MzA7CisgICAgICAgICAgICBwMzJbMTExXSA9IDB4MzY2MzYyNjY7CisgICAgICAgICAgICBwMzJbMTEyXSA9IDB4NjEzMTM3NjM7CisgICAgICAgICAgICBwMzJbMTEzXSA9IDB4MzQzOTMwMzA7CisgICAgICAgICAgICBwMzJbMTE0XSA9IDB4NjMzMjYxNjY7CisgICAgICAgICAgICBwMzJbMTE1XSA9IDB4MzQzNTY0NjQ7CisgICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzEzMTYyMzU7CisgICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzA2MzM1NjM7CisgICAgICAgICAgICBwMzJbMTE4XSA9IDB4MzczOTM3NjM7CisgICAgICAgICAgICBwMzJbMTE5XSA9IDB4NjYzNDMyMzM7CisgICAgICAgICAgICBwMzJbMTIwXSA9IDB4MDAwMDAwMzE7CisgICAgICAgICAgICBmb3IoaSA9IDEyMTsgaSA8PSAxNDU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNDQ7CisgICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNTQ7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBmb3IoaSA9IDE1NTsgaSA8PSAxNTk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbMTYwXSA9IDB4MzEzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDE2MTsgaSA8PSAxOTA7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwMzE7CisgICAgICAgICAgICBwMzJbMTkyXSA9IDB4MzAzMDMwMzQ7CisgICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAxOTY7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbMTk3XSA9IDB4NDYzMjM5MzI7CisgICAgICAgICAgICBwMzJbMTk4XSA9IDB4NDUzNzM3NDU7CisgICAgICAgICAgICBwMzJbMTk5XSA9IDB4MzE0MzMwMzc7CisgICAgICAgICAgICBwMzJbMjAwXSA9IDB4MzIzNDQxMzI7CisgICAgICAgICAgICBwMzJbMjAxXSA9IDB4MzM0MzM0MzM7CisgICAgICAgICAgICBwMzJbMjAyXSA9IDB4MDAwMDAwMzM7CisgICAgICAgICAgICBmb3IoaSA9IDIwMzsgaSA8PSAyMzU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAwYTM7CisgICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMDc7CisgICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMDY7CisgICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMDM7CisgICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBDVVJWRV9CXzIzMzoKKyAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwYjsKKyAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDAzYjsKKyAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAxNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsgMTZdID0gMHgwMDMxMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTc7IGkgPD0gMzc7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzYzNjM2MzA7CisgICAgICAgICAgICBwMzJbIDM5XSA9IDB4NjQ2NTM3MzQ7CisgICAgICAgICAgICBwMzJbIDQwXSA9IDB4MzM2MzM2NjU7CisgICAgICAgICAgICBwMzJbIDQxXSA9IDB4Mzc2MzMyMzM7CisgICAgICAgICAgICBwMzJbIDQyXSA9IDB4MzA2MzM4NjY7CisgICAgICAgICAgICBwMzJbIDQzXSA9IDB4NjIzMzMyMzk7CisgICAgICAgICAgICBwMzJbIDQ0XSA9IDB4MzIzODM1NjI7CisgICAgICAgICAgICBwMzJbIDQ1XSA9IDB4MzM2MjMzMzE7CisgICAgICAgICAgICBwMzJbIDQ2XSA9IDB4MzI2MjMzMzM7CisgICAgICAgICAgICBwMzJbIDQ3XSA9IDB4NjMzOTY1MzA7CisgICAgICAgICAgICBwMzJbIDQ4XSA9IDB4MzgzMjM0NjU7CisgICAgICAgICAgICBwMzJbIDQ5XSA9IDB4MzE2NTY2MzE7CisgICAgICAgICAgICBwMzJbIDUwXSA9IDB4Mzc2NjM1MzE7CisgICAgICAgICAgICBwMzJbIDUxXSA9IDB4Mzk2NjM4NjQ7CisgICAgICAgICAgICBwMzJbIDUyXSA9IDB4MDA2NDYxMzA7CisgICAgICAgICAgICBmb3IoaSA9IDUzOyBpIDw9IDczOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWyA3NF0gPSAweDYzNjE2NjMwOworICAgICAgICAgICAgcDMyWyA3NV0gPSAweDYzNjY2NDM5OworICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDM4NjM2MTYyOworICAgICAgICAgICAgcDMyWyA3N10gPSAweDYyMzMzMTMzOworICAgICAgICAgICAgcDMyWyA3OF0gPSAweDMzMzEzMjYyOworICAgICAgICAgICAgcDMyWyA3OV0gPSAweDYyMzE2NjM5OworICAgICAgICAgICAgcDMyWyA4MF0gPSAweDM1MzUzNzYyOworICAgICAgICAgICAgcDMyWyA4MV0gPSAweDM2NjY2NTY2OworICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDMzNjM2MjM1OworICAgICAgICAgICAgcDMyWyA4M10gPSAweDM4NjYzMTM5OworICAgICAgICAgICAgcDMyWyA4NF0gPSAweDY2MzYzMzYyOworICAgICAgICAgICAgcDMyWyA4NV0gPSAweDY1Mzg2NjM4OworICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDM3MzMzNzYyOworICAgICAgICAgICAgcDMyWyA4N10gPSAweDM1NjQ2NjMxOworICAgICAgICAgICAgcDMyWyA4OF0gPSAweDAwNjIzODM1OworICAgICAgICAgICAgZm9yKGkgPSA4OTsgaSA8PSAxMDk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTEwXSA9IDB4MzYzMDMwMzE7CisgICAgICAgICAgICBwMzJbMTExXSA9IDB4NjEzODMwNjE7CisgICAgICAgICAgICBwMzJbMTEyXSA9IDB4MzAzOTMxMzQ7CisgICAgICAgICAgICBwMzJbMTEzXSA9IDB4MzAzNTMzMzM7CisgICAgICAgICAgICBwMzJbMTE0XSA9IDB4NjUzODM3MzY7CisgICAgICAgICAgICBwMzJbMTE1XSA9IDB4MzIzNTM4MzU7CisgICAgICAgICAgICBwMzJbMTE2XSA9IDB4NjI2NTYyMzg7CisgICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzA2MTM4NjY7CisgICAgICAgICAgICBwMzJbMTE4XSA9IDB4NjY2NjY1NjI7CisgICAgICAgICAgICBwMzJbMTE5XSA9IDB4NjEzNzM2Mzg7CisgICAgICAgICAgICBwMzJbMTIwXSA9IDB4MzM2MTYzMzc7CisgICAgICAgICAgICBwMzJbMTIxXSA9IDB4MzYzMTM3MzY7CisgICAgICAgICAgICBwMzJbMTIyXSA9IDB4MzA2NTM3NjY7CisgICAgICAgICAgICBwMzJbMTIzXSA9IDB4MzEzODY2MzE7CisgICAgICAgICAgICBwMzJbMTI0XSA9IDB4MDAzMjM1MzA7CisgICAgICAgICAgICBmb3IoaSA9IDEyNTsgaSA8PSAxNDU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNDQ7CisgICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNTQ7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBmb3IoaSA9IDE1NTsgaSA8PSAxNTk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbMTYwXSA9IDB4MzEzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDE2MTsgaSA8PSAxOTA7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwNDY7CisgICAgICAgICAgICBwMzJbMTkyXSA9IDB4MzAzMDMwMzE7CisgICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAxOTg7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbMTk5XSA9IDB4NDUzMzMxMzA7CisgICAgICAgICAgICBwMzJbMjAwXSA9IDB4NDUzNDM3Mzk7CisgICAgICAgICAgICBwMzJbMjAxXSA9IDB4Mzg0NjMyMzc7CisgICAgICAgICAgICBwMzJbMjAyXSA9IDB4MzIzOTM2NDE7CisgICAgICAgICAgICBwMzJbMjAzXSA9IDB4MzEzMzMwMzI7CisgICAgICAgICAgICBwMzJbMjA0XSA9IDB4MzAzNjMyNDQ7CisgICAgICAgICAgICBwMzJbMjA1XSA9IDB4NDU0NjQzMzM7CisgICAgICAgICAgICBwMzJbMjA2XSA9IDB4MDAzNzQ0MzA7CisgICAgICAgICAgICBmb3IoaSA9IDIwNzsgaSA8PSAyMzU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAwZTk7CisgICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwNGE7CisgICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwNGE7CisgICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwNGE7CisgICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBDVVJWRV9CXzI4MzoKKyAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwYzsKKyAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDA0NzsKKyAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAxODsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsgMTldID0gMHgwMDMxMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMjA7IGkgPD0gMzc7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzY2MjM3MzI7CisgICAgICAgICAgICBwMzJbIDM5XSA9IDB4NjM2MTMwMzg7CisgICAgICAgICAgICBwMzJbIDQwXSA9IDB4MzUzODYyMzg7CisgICAgICAgICAgICBwMzJbIDQxXSA9IDB4NjE2NDM2Mzk7CisgICAgICAgICAgICBwMzJbIDQyXSA9IDB4NjEzNDYxMzU7CisgICAgICAgICAgICBwMzJbIDQzXSA9IDB4MzE2MTM4NjY7CisgICAgICAgICAgICBwMzJbIDQ0XSA9IDB4MzMzMDYxMzk7CisgICAgICAgICAgICBwMzJbIDQ1XSA9IDB4NjM2NjMzMzA7CisgICAgICAgICAgICBwMzJbIDQ2XSA9IDB4NjYzNzM5NjE7CisgICAgICAgICAgICBwMzJbIDQ3XSA9IDB4MzQzNjM3NjQ7CisgICAgICAgICAgICBwMzJbIDQ4XSA9IDB4MzkzMDMzMzU7CisgICAgICAgICAgICBwMzJbIDQ5XSA9IDB4NjEzMjYxNjY7CisgICAgICAgICAgICBwMzJbIDUwXSA9IDB4MzQzMTM4MzU7CisgICAgICAgICAgICBwMzJbIDUxXSA9IDB4NjY2MTM1Mzg7CisgICAgICAgICAgICBwMzJbIDUyXSA9IDB4MzMzNjMyMzY7CisgICAgICAgICAgICBwMzJbIDUzXSA9IDB4MzMzMTMzNjU7CisgICAgICAgICAgICBwMzJbIDU0XSA9IDB4NjEzOTM3NjI7CisgICAgICAgICAgICBwMzJbIDU1XSA9IDB4MDAzNTY2MzI7CisgICAgICAgICAgICBmb3IoaSA9IDU2OyBpIDw9IDczOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWyA3NF0gPSAweDMzMzk2NjM1OworICAgICAgICAgICAgcDMyWyA3NV0gPSAweDM4MzUzMjM5OworICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDY0Mzc2MjY0OworICAgICAgICAgICAgcDMyWyA3N10gPSAweDY1MzAzOTY0OworICAgICAgICAgICAgcDMyWyA3OF0gPSAweDM0MzMzOTMxOworICAgICAgICAgICAgcDMyWyA3OV0gPSAweDM3NjMzODY2OworICAgICAgICAgICAgcDMyWyA4MF0gPSAweDY0MzA2MjMwOworICAgICAgICAgICAgcDMyWyA4MV0gPSAweDMyNjM2NTY2OworICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDMyNjQ2NTY1OworICAgICAgICAgICAgcDMyWyA4M10gPSAweDM1Mzg2MjM1OworICAgICAgICAgICAgcDMyWyA4NF0gPSAweDYxNjUzNzM1OworICAgICAgICAgICAgcDMyWyA4NV0gPSAweDM4NjMzOTYzOworICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDY1MzI2NTMwOworICAgICAgICAgICAgcDMyWyA4N10gPSAweDY2MzgzOTMxOworICAgICAgICAgICAgcDMyWyA4OF0gPSAweDYyNjQ2MzM4OworICAgICAgICAgICAgcDMyWyA4OV0gPSAweDM4NjQ2MzY1OworICAgICAgICAgICAgcDMyWyA5MF0gPSAweDMyMzE2MjM2OworICAgICAgICAgICAgcDMyWyA5MV0gPSAweDAwMzMzNTMwOworICAgICAgICAgICAgZm9yKGkgPSA5MjsgaSA8PSAxMDk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTEwXSA9IDB4MzYzNzM2MzM7CisgICAgICAgICAgICBwMzJbMTExXSA9IDB4NjYzNDM1Mzg7CisgICAgICAgICAgICBwMzJbMTEyXSA9IDB4MzEzNDMyNjU7CisgICAgICAgICAgICBwMzJbMTEzXSA9IDB4NjI2MzMxMzQ7CisgICAgICAgICAgICBwMzJbMTE0XSA9IDB4NjU2NjM4Mzk7CisgICAgICAgICAgICBwMzJbMTE1XSA9IDB4NjIzNDY0MzY7CisgICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzA2NDMwMzI7CisgICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzUzNDYyMzI7CisgICAgICAgICAgICBwMzJbMTE4XSA9IDB4NjY2NjM2MzE7CisgICAgICAgICAgICBwMzJbMTE5XSA9IDB4MzMzMjMwMzc7CisgICAgICAgICAgICBwMzJbMTIwXSA9IDB4NjQ2NTMwMzU7CisgICAgICAgICAgICBwMzJbMTIxXSA9IDB4MzgzMDYyNjQ7CisgICAgICAgICAgICBwMzJbMTIyXSA9IDB4MzczNzM2MzI7CisgICAgICAgICAgICBwMzJbMTIzXSA9IDB4MzEzODYzMzk7CisgICAgICAgICAgICBwMzJbMTI0XSA9IDB4NjQzMDY2MzM7CisgICAgICAgICAgICBwMzJbMTI1XSA9IDB4NjIzNTM0NjY7CisgICAgICAgICAgICBwMzJbMTI2XSA9IDB4MzEzMTM4NjU7CisgICAgICAgICAgICBwMzJbMTI3XSA9IDB4MDAzNDY2MzI7CisgICAgICAgICAgICBmb3IoaSA9IDEyODsgaSA8PSAxNDU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNDQ7CisgICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNTQ7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBmb3IoaSA9IDE1NTsgaSA8PSAxNTk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbMTYwXSA9IDB4MzEzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDE2MTsgaSA8PSAxOTA7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwNTU7CisgICAgICAgICAgICBwMzJbMTkyXSA9IDB4NDY0NjQ2MzM7CisgICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAxOTk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBwMzJbMjAwXSA9IDB4NDU0NjQ2NDY7CisgICAgICAgICAgICBwMzJbMjAxXSA9IDB4MzMzMDM5NDY7CisgICAgICAgICAgICBwMzJbMjAyXSA9IDB4MzYzNjM5Mzk7CisgICAgICAgICAgICBwMzJbMjAzXSA9IDB4Mzk0MzQ2MzA7CisgICAgICAgICAgICBwMzJbMjA0XSA9IDB4Mzk0MTM4MzM7CisgICAgICAgICAgICBwMzJbMjA1XSA9IDB4MzUzNjMxMzA7CisgICAgICAgICAgICBwMzJbMjA2XSA9IDB4MzIzNDMwNDI7CisgICAgICAgICAgICBwMzJbMjA3XSA9IDB4NDU0MzM3NDE7CisgICAgICAgICAgICBwMzJbMjA4XSA9IDB4NDI0NDQxNDY7CisgICAgICAgICAgICBwMzJbMjA5XSA9IDB4MDAzNzMwMzM7CisgICAgICAgICAgICBmb3IoaSA9IDIxMDsgaSA8PSAyMzU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAxMWI7CisgICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMGM7CisgICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMDc7CisgICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMDU7CisgICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBDVVJWRV9CXzQwOToKKyAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwZDsKKyAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDA2NzsKKyAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAyNjsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsgMjddID0gMHgwMDMxMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMjg7IGkgPD0gMzc7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDM4XSA9IDB4NjEzMTMyMzA7CisgICAgICAgICAgICBwMzJbIDM5XSA9IDB4NjMzMjYzMzU7CisgICAgICAgICAgICBwMzJbIDQwXSA9IDB4Mzk2NTY1Mzg7CisgICAgICAgICAgICBwMzJbIDQxXSA9IDB4MzU2MjY1NjY7CisgICAgICAgICAgICBwMzJbIDQyXSA9IDB4Mzk2MjM0NjM7CisgICAgICAgICAgICBwMzJbIDQzXSA9IDB4MzMzNTM3NjE7CisgICAgICAgICAgICBwMzJbIDQ0XSA9IDB4MzQ2MjM3NjI7CisgICAgICAgICAgICBwMzJbIDQ1XSA9IDB4Mzc2MjM2Mzc7CisgICAgICAgICAgICBwMzJbIDQ2XSA9IDB4MzQzNjY0NjY7CisgICAgICAgICAgICBwMzJbIDQ3XSA9IDB4NjY2NTMyMzI7CisgICAgICAgICAgICBwMzJbIDQ4XSA9IDB4NjQzMzY2MzE7CisgICAgICAgICAgICBwMzJbIDQ5XSA9IDB4MzQzNzM2NjQ7CisgICAgICAgICAgICBwMzJbIDUwXSA9IDB4NjYzMTM2Mzc7CisgICAgICAgICAgICBwMzJbIDUxXSA9IDB4NjQzOTM5NjE7CisgICAgICAgICAgICBwMzJbIDUyXSA9IDB4MzI2MzYxMzY7CisgICAgICAgICAgICBwMzJbIDUzXSA9IDB4NjEzODYzMzc7CisgICAgICAgICAgICBwMzJbIDU0XSA9IDB4MzkzMTYxMzk7CisgICAgICAgICAgICBwMzJbIDU1XSA9IDB4MzczMjYyMzc7CisgICAgICAgICAgICBwMzJbIDU2XSA9IDB4MzIzMjM4MzI7CisgICAgICAgICAgICBwMzJbIDU3XSA9IDB4NjQ2MzM2NjY7CisgICAgICAgICAgICBwMzJbIDU4XSA9IDB4MzU2MTM3MzU7CisgICAgICAgICAgICBwMzJbIDU5XSA9IDB4MzQ2MTYxMzU7CisgICAgICAgICAgICBwMzJbIDYwXSA9IDB4NjEzMDM1NjY7CisgICAgICAgICAgICBwMzJbIDYxXSA9IDB4MzczMTMzNjU7CisgICAgICAgICAgICBwMzJbIDYyXSA9IDB4MzUzMzMxNjI7CisgICAgICAgICAgICBwMzJbIDYzXSA9IDB4MDA2NjM1MzQ7CisgICAgICAgICAgICBmb3IoaSA9IDY0OyBpIDw9IDczOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWyA3NF0gPSAweDM0NjQzNTMxOworICAgICAgICAgICAgcDMyWyA3NV0gPSAweDY0MzAzNjM4OworICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDY0MzgzODMwOworICAgICAgICAgICAgcDMyWyA3N10gPSAweDM0MzM2MjY0OworICAgICAgICAgICAgcDMyWyA3OF0gPSAweDMwNjIzNjM5OworICAgICAgICAgICAgcDMyWyA3OV0gPSAweDM2MzAzNjYzOworICAgICAgICAgICAgcDMyWyA4MF0gPSAweDM2MzUzNzM0OworICAgICAgICAgICAgcDMyWyA4MV0gPSAweDM0MzAzNjMyOworICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDY0NjMzMTM0OworICAgICAgICAgICAgcDMyWyA4M10gPSAweDY2NjEzNDY1OworICAgICAgICAgICAgcDMyWyA4NF0gPSAweDMxMzczNzMxOworICAgICAgICAgICAgcDMyWyA4NV0gPSAweDYyNjQzNDY0OworICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDY2NjYzMTMwOworICAgICAgICAgICAgcDMyWyA4N10gPSAweDMzNjIzNTY1OworICAgICAgICAgICAgcDMyWyA4OF0gPSAweDM5MzU2NTM0OworICAgICAgICAgICAgcDMyWyA4OV0gPSAweDY0MzMzMDM3OworICAgICAgICAgICAgcDMyWyA5MF0gPSAweDM1MzUzMjYzOworICAgICAgICAgICAgcDMyWyA5MV0gPSAweDM4MzYzODYxOworICAgICAgICAgICAgcDMyWyA5Ml0gPSAweDM4MzEzMTYxOworICAgICAgICAgICAgcDMyWyA5M10gPSAweDM1MzEzNTMwOworICAgICAgICAgICAgcDMyWyA5NF0gPSAweDYxMzMzMDM2OworICAgICAgICAgICAgcDMyWyA5NV0gPSAweDM2NjI2MTY1OworICAgICAgICAgICAgcDMyWyA5Nl0gPSAweDM0MzkzNzMwOworICAgICAgICAgICAgcDMyWyA5N10gPSAweDYyMzQzNTY1OworICAgICAgICAgICAgcDMyWyA5OF0gPSAweDM5MzkzNzYyOworICAgICAgICAgICAgcDMyWyA5OV0gPSAweDAwMzc2MTM2OworICAgICAgICAgICAgZm9yKGkgPSAxMDA7IGkgPD0gMTA5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzExMF0gPSAweDYyMzEzNjMwOworICAgICAgICAgICAgcDMyWzExMV0gPSAweDYxNjY2MzMxOworICAgICAgICAgICAgcDMyWzExMl0gPSAweDY1NjIzNjYyOworICAgICAgICAgICAgcDMyWzExM10gPSAweDMyMzM2NjM1OworICAgICAgICAgICAgcDMyWzExNF0gPSAweDYxNjY2MjYyOworICAgICAgICAgICAgcDMyWzExNV0gPSAweDMyMzMzODM3OworICAgICAgICAgICAgcDMyWzExNl0gPSAweDMxNjQ2NTM0OworICAgICAgICAgICAgcDMyWzExN10gPSAweDM3NjEzNjMwOworICAgICAgICAgICAgcDMyWzExOF0gPSAweDYyMzYzMzM2OworICAgICAgICAgICAgcDMyWzExOV0gPSAweDYxMzU2MzM5OworICAgICAgICAgICAgcDMyWzEyMF0gPSAweDMxNjQ2MjM3OworICAgICAgICAgICAgcDMyWzEyMV0gPSAweDMwNjQzODM5OworICAgICAgICAgICAgcDMyWzEyMl0gPSAweDYxMzgzNTMxOworICAgICAgICAgICAgcDMyWzEyM10gPSAweDM1NjYzNDYxOworICAgICAgICAgICAgcDMyWzEyNF0gPSAweDY0MzgzODM0OworICAgICAgICAgICAgcDMyWzEyNV0gPSAweDMzNjYzODMwOworICAgICAgICAgICAgcDMyWzEyNl0gPSAweDM0MzEzNTM4OworICAgICAgICAgICAgcDMyWzEyN10gPSAweDY0NjYzMTY2OworICAgICAgICAgICAgcDMyWzEyOF0gPSAweDM0NjIzNDY2OworICAgICAgICAgICAgcDMyWzEyOV0gPSAweDY0MzAzNDY2OworICAgICAgICAgICAgcDMyWzEzMF0gPSAweDMxMzgzMTMyOworICAgICAgICAgICAgcDMyWzEzMV0gPSAweDM4MzYzMzYyOworICAgICAgICAgICAgcDMyWzEzMl0gPSAweDM2MzM2MzMxOworICAgICAgICAgICAgcDMyWzEzM10gPSAweDMwNjE2MjM0OworICAgICAgICAgICAgcDMyWzEzNF0gPSAweDYzMzMzNzMyOworICAgICAgICAgICAgcDMyWzEzNV0gPSAweDAwMzYzMDM3OworICAgICAgICAgICAgZm9yKGkgPSAxMzY7IGkgPD0gMTQ1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE0Nl0gPSAweDAwMDAwMDQ0OworICAgICAgICAgICAgZm9yKGkgPSAxNDc7IGkgPD0gMTU0OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgZm9yKGkgPSAxNTU7IGkgPD0gMTU5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWzE2MF0gPSAweDMxMzAzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAxNjE7IGkgPD0gMTkwOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE5MV0gPSAweDAwMDAwMDdiOworICAgICAgICAgICAgcDMyWzE5Ml0gPSAweDMwMzAzMDMxOworICAgICAgICAgICAgZm9yKGkgPSAxOTM7IGkgPD0gMjA0OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWzIwNV0gPSAweDQxMzI0NTMxOworICAgICAgICAgICAgcDMyWzIwNl0gPSAweDQxMzY0NDQxOworICAgICAgICAgICAgcDMyWzIwN10gPSAweDQ2MzIzMTM2OworICAgICAgICAgICAgcDMyWzIwOF0gPSAweDMwMzMzMzMzOworICAgICAgICAgICAgcDMyWzIwOV0gPSAweDM1NDU0MjM3OworICAgICAgICAgICAgcDMyWzIxMF0gPSAweDM3MzQ0MTQ2OworICAgICAgICAgICAgcDMyWzIxMV0gPSAweDM5NDMzMzQzOworICAgICAgICAgICAgcDMyWzIxMl0gPSAweDMyMzUzMDQ1OworICAgICAgICAgICAgcDMyWzIxM10gPSAweDM4MzMzODQ2OworICAgICAgICAgICAgcDMyWzIxNF0gPSAweDQzMzQzNjMxOworICAgICAgICAgICAgcDMyWzIxNV0gPSAweDQ0MzczMzQ0OworICAgICAgICAgICAgcDMyWzIxNl0gPSAweDMxMzI0MTM5OworICAgICAgICAgICAgcDMyWzIxN10gPSAweDAwMzMzNzMxOworICAgICAgICAgICAgZm9yKGkgPSAyMTg7IGkgPD0gMjM1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzIzNl0gPSAweDAwMDAwMTk5OworICAgICAgICAgICAgcDMyWzIzN10gPSAweDAwMDAwMDU3OworICAgICAgICAgICAgcDMyWzIzOF0gPSAweDAwMDAwMDU3OworICAgICAgICAgICAgcDMyWzIzOV0gPSAweDAwMDAwMDU3OworICAgICAgICAgICAgcDMyWzI0MF0gPSAweDAwMDAwMDAxOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgQ1VSVkVfQl81NzE6CisgICAgICAgICAgICBwMzJbICAwXSA9IDB4MDAwMDAwMGU7CisgICAgICAgICAgICBwMzJbICAxXSA9IDB4MDAwMDAwOGY7CisgICAgICAgICAgICBmb3IoaSA9IDI7IGkgPD0gMzY7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbIDM3XSA9IDB4MDAzMTMwMzA7CisgICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzAzNDY2MzI7CisgICAgICAgICAgICBwMzJbIDM5XSA9IDB4MzI2NTM3NjU7CisgICAgICAgICAgICBwMzJbIDQwXSA9IDB4NjYzMTMyMzI7CisgICAgICAgICAgICBwMzJbIDQxXSA9IDB4NjQzNTM5MzI7CisgICAgICAgICAgICBwMzJbIDQyXSA9IDB4MzczOTMyNjU7CisgICAgICAgICAgICBwMzJbIDQzXSA9IDB4NjIzNzMxMzE7CisgICAgICAgICAgICBwMzJbIDQ0XSA9IDB4NjQzMzY2Mzc7CisgICAgICAgICAgICBwMzJbIDQ1XSA9IDB4MzU2NjMyMzY7CisgICAgICAgICAgICBwMzJbIDQ2XSA9IDB4Mzk2MTM2NjM7CisgICAgICAgICAgICBwMzJbIDQ3XSA9IDB4NjM2NjY2Mzc7CisgICAgICAgICAgICBwMzJbIDQ4XSA9IDB4NjU2MzM4NjI7CisgICAgICAgICAgICBwMzJbIDQ5XSA9IDB4NjMzMTY2NjY7CisgICAgICAgICAgICBwMzJbIDUwXSA9IDB4NjE2MjM2NjQ7CisgICAgICAgICAgICBwMzJbIDUxXSA9IDB4MzQ2NTYzMzg7CisgICAgICAgICAgICBwMzJbIDUyXSA9IDB4MzE2MTM5NjE7CisgICAgICAgICAgICBwMzJbIDUzXSA9IDB4Mzg2NDYxMzg7CisgICAgICAgICAgICBwMzJbIDU0XSA9IDB4NjE2NjY2MzQ7CisgICAgICAgICAgICBwMzJbIDU1XSA9IDB4Mzg2NDYyNjI7CisgICAgICAgICAgICBwMzJbIDU2XSA9IDB4MzU2MTY2NjU7CisgICAgICAgICAgICBwMzJbIDU3XSA9IDB4MzIzMzMzMzk7CisgICAgICAgICAgICBwMzJbIDU4XSA9IDB4NjEzNzY1NjI7CisgICAgICAgICAgICBwMzJbIDU5XSA9IDB4MzUzNzM2NjQ7CisgICAgICAgICAgICBwMzJbIDYwXSA9IDB4MzYzNjYxMzY7CisgICAgICAgICAgICBwMzJbIDYxXSA9IDB4MzQzOTMyNjU7CisgICAgICAgICAgICBwMzJbIDYyXSA9IDB4MzE2NDY2NjE7CisgICAgICAgICAgICBwMzJbIDYzXSA9IDB4Mzc2MTM1Mzg7CisgICAgICAgICAgICBwMzJbIDY0XSA9IDB4MzE2NjY2Mzg7CisgICAgICAgICAgICBwMzJbIDY1XSA9IDB4MzU2MTYxMzI7CisgICAgICAgICAgICBwMzJbIDY2XSA9IDB4MzQ2NTMwMzI7CisgICAgICAgICAgICBwMzJbIDY3XSA9IDB4MzMzNzY1NjQ7CisgICAgICAgICAgICBwMzJbIDY4XSA9IDB4NjM2MTYyMzk7CisgICAgICAgICAgICBwMzJbIDY5XSA9IDB4Mzc2MzMwNjE7CisgICAgICAgICAgICBwMzJbIDcwXSA9IDB4NjY2NTY2NjY7CisgICAgICAgICAgICBwMzJbIDcxXSA9IDB4MzI2NjM3NjY7CisgICAgICAgICAgICBwMzJbIDcyXSA9IDB4MzczNTM1Mzk7CisgICAgICAgICAgICBwMzJbIDczXSA9IDB4MDA2MTM3MzI7CisgICAgICAgICAgICBwMzJbIDc0XSA9IDB4MzAzMzMwMzM7CisgICAgICAgICAgICBwMzJbIDc1XSA9IDB4MzM2NDMxMzA7CisgICAgICAgICAgICBwMzJbIDc2XSA9IDB4MzUzODYyMzQ7CisgICAgICAgICAgICBwMzJbIDc3XSA9IDB4MzYzOTMyMzY7CisgICAgICAgICAgICBwMzJbIDc4XSA9IDB4NjMzNjMxNjM7CisgICAgICAgICAgICBwMzJbIDc5XSA9IDB4MzAzNDY0MzA7CisgICAgICAgICAgICBwMzJbIDgwXSA9IDB4NjQ2MzMzNjQ7CisgICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzAzNTM3Mzc7CisgICAgICAgICAgICBwMzJbIDgyXSA9IDB4NjQzMzM5NjE7CisgICAgICAgICAgICBwMzJbIDgzXSA9IDB4MzkzMjY0MzE7CisgICAgICAgICAgICBwMzJbIDg0XSA9IDB4NjE2NjM1MzU7CisgICAgICAgICAgICBwMzJbIDg1XSA9IDB4NjE2MTMwMzg7CisgICAgICAgICAgICBwMzJbIDg2XSA9IDB4MzAzNDY2MzU7CisgICAgICAgICAgICBwMzJbIDg3XSA9IDB4NjQzODYzNjY7CisgICAgICAgICAgICBwMzJbIDg4XSA9IDB4MzI2MjM3NjI7CisgICAgICAgICAgICBwMzJbIDg5XSA9IDB4NjI2NDYyNjE7CisgICAgICAgICAgICBwMzJbIDkwXSA9IDB4MzMzNTY1NjQ7CisgICAgICAgICAgICBwMzJbIDkxXSA9IDB4NjYzMDM1Mzk7CisgICAgICAgICAgICBwMzJbIDkyXSA9IDB4NjQzMDYzMzQ7CisgICAgICAgICAgICBwMzJbIDkzXSA9IDB4NjMzMzM5MzI7CisgICAgICAgICAgICBwMzJbIDk0XSA9IDB4MzEzNzY0NjQ7CisgICAgICAgICAgICBwMzJbIDk1XSA9IDB4MzUzMzYxMzE7CisgICAgICAgICAgICBwMzJbIDk2XSA9IDB4NjYzNzM2NjI7CisgICAgICAgICAgICBwMzJbIDk3XSA9IDB4MzkzNDMxNjI7CisgICAgICAgICAgICBwMzJbIDk4XSA9IDB4MzY2NTYxMzk7CisgICAgICAgICAgICBwMzJbIDk5XSA9IDB4MzgzMzMwMzA7CisgICAgICAgICAgICBwMzJbMTAwXSA9IDB4NjYzNDMxMzY7CisgICAgICAgICAgICBwMzJbMTAxXSA9IDB4MzQzOTMzMzE7CisgICAgICAgICAgICBwMzJbMTAyXSA9IDB4NjE2NjYyNjE7CisgICAgICAgICAgICBwMzJbMTAzXSA9IDB4NjMzNDYyMzM7CisgICAgICAgICAgICBwMzJbMTA0XSA9IDB4NjQzMDM1Mzg7CisgICAgICAgICAgICBwMzJbMTA1XSA9IDB4NjUzNzMyMzk7CisgICAgICAgICAgICBwMzJbMTA2XSA9IDB4MzczNzY1MzE7CisgICAgICAgICAgICBwMzJbMTA3XSA9IDB4Mzg2MzM5MzY7CisgICAgICAgICAgICBwMzJbMTA4XSA9IDB4MzI2MzY1NjU7CisgICAgICAgICAgICBwMzJbMTA5XSA9IDB4MDAzOTMxNjQ7CisgICAgICAgICAgICBwMzJbMTEwXSA9IDB4NjY2MjM3MzM7CisgICAgICAgICAgICBwMzJbMTExXSA9IDB4MzQzMzM3MzI7CisgICAgICAgICAgICBwMzJbMTEyXSA9IDB4MzY2MTY0MzI7CisgICAgICAgICAgICBwMzJbMTEzXSA9IDB4MzY2MjM5MzM7CisgICAgICAgICAgICBwMzJbMTE0XSA9IDB4NjY2MzYzNjQ7CisgICAgICAgICAgICBwMzJbMTE1XSA9IDB4NjI2NTY2NjY7CisgICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzY2NDMzMzc7CisgICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzgzNzY0Mzk7CisgICAgICAgICAgICBwMzJbMTE4XSA9IDB4MzI2MzM2NjM7CisgICAgICAgICAgICBwMzJbMTE5XSA9IDB4MzAzNjYxMzc7CisgICAgICAgICAgICBwMzJbMTIwXSA9IDB4NjI2MzM5MzA7CisgICAgICAgICAgICBwMzJbMTIxXSA9IDB4MzE2MTYzNjI7CisgICAgICAgICAgICBwMzJbMTIyXSA9IDB4NjYzMDM4Mzk7CisgICAgICAgICAgICBwMzJbMTIzXSA9IDB4MzMzMzM1Mzg7CisgICAgICAgICAgICBwMzJbMTI0XSA9IDB4NjUzMTMyMzk7CisgICAgICAgICAgICBwMzJbMTI1XSA9IDB4MzgzNjYxMzg7CisgICAgICAgICAgICBwMzJbMTI2XSA9IDB4MzMzMjM0MzQ7CisgICAgICAgICAgICBwMzJbMTI3XSA9IDB4NjIzMzM0NjU7CisgICAgICAgICAgICBwMzJbMTI4XSA9IDB4MzgzMDYyNjE7CisgICAgICAgICAgICBwMzJbMTI5XSA9IDB4MzYzNzM1NjE7CisgICAgICAgICAgICBwMzJbMTMwXSA9IDB4NjEzMTM5MzI7CisgICAgICAgICAgICBwMzJbMTMxXSA9IDB4MzQ2NjM4NjY7CisgICAgICAgICAgICBwMzJbMTMyXSA9IDB4NjI2MjMxMzY7CisgICAgICAgICAgICBwMzJbMTMzXSA9IDB4NjIzODYxMzI7CisgICAgICAgICAgICBwMzJbMTM0XSA9IDB4MzEzMzM1MzM7CisgICAgICAgICAgICBwMzJbMTM1XSA9IDB4MzA2NjMyNjQ7CisgICAgICAgICAgICBwMzJbMTM2XSA9IDB4NjMzNTM4MzQ7CisgICAgICAgICAgICBwMzJbMTM3XSA9IDB4MzE2MjM5MzE7CisgICAgICAgICAgICBwMzJbMTM4XSA9IDB4NjYzMjY1MzY7CisgICAgICAgICAgICBwMzJbMTM5XSA9IDB4MzYzMTM1MzE7CisgICAgICAgICAgICBwMzJbMTQwXSA9IDB4NjQzMzMyNjU7CisgICAgICAgICAgICBwMzJbMTQxXSA9IDB4MzE2MzMzNjQ7CisgICAgICAgICAgICBwMzJbMTQyXSA9IDB4MzIzODM0NjE7CisgICAgICAgICAgICBwMzJbMTQzXSA9IDB4MzE2NjYxMzc7CisgICAgICAgICAgICBwMzJbMTQ0XSA9IDB4NjM2MTM4NjI7CisgICAgICAgICAgICBwMzJbMTQ1XSA9IDB4MDA2MjM1MzE7CisgICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNDQ7CisgICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNTQ7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBmb3IoaSA9IDE1NTsgaSA8PSAxNTk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbMTYwXSA9IDB4MzEzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDE2MTsgaSA8PSAxOTA7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwYWM7CisgICAgICAgICAgICBwMzJbMTkyXSA9IDB4NDY0NjQ2MzM7CisgICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAyMDg7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBwMzJbMjA5XSA9IDB4NDU0NjQ2NDY7CisgICAgICAgICAgICBwMzJbMjEwXSA9IDB4NDMzMTM2MzY7CisgICAgICAgICAgICBwMzJbMjExXSA9IDB4NDYzODMxNDU7CisgICAgICAgICAgICBwMzJbMjEyXSA9IDB4MzkzNTM1NDY7CisgICAgICAgICAgICBwMzJbMjEzXSA9IDB4MzAzMzM3Mzg7CisgICAgICAgICAgICBwMzJbMjE0XSA9IDB4MzkzNTMwMzg7CisgICAgICAgICAgICBwMzJbMjE1XSA9IDB4MzYzODMxNDI7CisgICAgICAgICAgICBwMzJbMjE2XSA9IDB4MzgzMzMyMzg7CisgICAgICAgICAgICBwMzJbMjE3XSA9IDB4NDM0NTMxMzU7CisgICAgICAgICAgICBwMzJbMjE4XSA9IDB4Mzk0NDQ0Mzc7CisgICAgICAgICAgICBwMzJbMjE5XSA9IDB4MzEzMTQxNDM7CisgICAgICAgICAgICBwMzJbMjIwXSA9IDB4NDU0NDMxMzY7CisgICAgICAgICAgICBwMzJbMjIxXSA9IDB4MzU0NDMzMzk7CisgICAgICAgICAgICBwMzJbMjIyXSA9IDB4NDQzNDM3MzE7CisgICAgICAgICAgICBwMzJbMjIzXSA9IDB4Mzg0NTM2MzY7CisgICAgICAgICAgICBwMzJbMjI0XSA9IDB4NDUzMjM4MzM7CisgICAgICAgICAgICBwMzJbMjI1XSA9IDB4MzI0MjQyMzk7CisgICAgICAgICAgICBwMzJbMjI2XSA9IDB4MzQzODQ1NDY7CisgICAgICAgICAgICBwMzJbMjI3XSA9IDB4MDAzNzM0NDU7CisgICAgICAgICAgICBmb3IoaSA9IDIyODsgaSA8PSAyMzU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAyM2I7CisgICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMGE7CisgICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMDU7CisgICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMDI7CisgICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBDVVJWRV9LXzE2MzoKKyAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwNTsKKyAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDAyOTsKKyAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAxMTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsgMTJdID0gMHgwMDAwMDAzMTsKKyAgICAgICAgICAgIGZvcihpID0gMTM7IGkgPD0gMzc7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBmb3IoaSA9IDM4OyBpIDw9IDQ3OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWyA0OF0gPSAweDAwMDAwMDMxOworICAgICAgICAgICAgZm9yKGkgPSA0OTsgaSA8PSA3MzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgNzRdID0gMHgzMTY1NjYzMjsKKyAgICAgICAgICAgIHAzMlsgNzVdID0gMHgzNTMwNjMzMzsKKyAgICAgICAgICAgIHAzMlsgNzZdID0gMHg2MjYyMzczMzsKKyAgICAgICAgICAgIHAzMlsgNzddID0gMHg2MTMxMzE2MzsKKyAgICAgICAgICAgIHAzMlsgNzhdID0gMHgzMDYxNjE2MzsKKyAgICAgICAgICAgIHAzMlsgNzldID0gMHgzOTM3NjQzNzsKKyAgICAgICAgICAgIHAzMlsgODBdID0gMHgzNDY1NjQzMzsKKyAgICAgICAgICAgIHAzMlsgODFdID0gMHgzNTY0MzY2NTsKKyAgICAgICAgICAgIHAzMlsgODJdID0gMHgzOTYzMzU2NTsKKyAgICAgICAgICAgIHAzMlsgODNdID0gMHg2NTY1NjUzNDsKKyAgICAgICAgICAgIHAzMlsgODRdID0gMHgwMDAwMDAzODsKKyAgICAgICAgICAgIGZvcihpID0gODU7IGkgPD0gMTA5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzExMF0gPSAweDMwMzkzODMyOworICAgICAgICAgICAgcDMyWzExMV0gPSAweDYyNjYzMDM3OworICAgICAgICAgICAgcDMyWzExMl0gPSAweDMzNjQzNTMwOworICAgICAgICAgICAgcDMyWzExM10gPSAweDM1NjY2NjM4OworICAgICAgICAgICAgcDMyWzExNF0gPSAweDMxMzIzMzM4OworICAgICAgICAgICAgcDMyWzExNV0gPSAweDM4NjUzMjY2OworICAgICAgICAgICAgcDMyWzExNl0gPSAweDMzMzUzMDMwOworICAgICAgICAgICAgcDMyWzExN10gPSAweDMzMzU2NDM2OworICAgICAgICAgICAgcDMyWzExOF0gPSAweDY0NjM2MzM4OworICAgICAgICAgICAgcDMyWzExOV0gPSAweDY0MzM2MTYxOworICAgICAgICAgICAgcDMyWzEyMF0gPSAweDAwMDAwMDM5OworICAgICAgICAgICAgZm9yKGkgPSAxMjE7IGkgPD0gMTQ1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE0Nl0gPSAweDAwMDAwMDQ0OworICAgICAgICAgICAgZm9yKGkgPSAxNDc7IGkgPD0gMTU0OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgZm9yKGkgPSAxNTU7IGkgPD0gMTU5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWzE2MF0gPSAweDMxMzAzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAxNjE7IGkgPD0gMTkwOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE5MV0gPSAweDAwMDAwMDMxOworICAgICAgICAgICAgcDMyWzE5Ml0gPSAweDMwMzAzMDM0OworICAgICAgICAgICAgZm9yKGkgPSAxOTM7IGkgPD0gMTk2OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWzE5N10gPSAweDMwMzEzMDMyOworICAgICAgICAgICAgcDMyWzE5OF0gPSAweDQ1MzI0MTM4OworICAgICAgICAgICAgcDMyWzE5OV0gPSAweDMwNDM0MzMwOworICAgICAgICAgICAgcDMyWzIwMF0gPSAweDQ2MzkzOTQ0OworICAgICAgICAgICAgcDMyWzIwMV0gPSAweDQ1MzU0MTM4OworICAgICAgICAgICAgcDMyWzIwMl0gPSAweDAwMDAwMDQ2OworICAgICAgICAgICAgZm9yKGkgPSAyMDM7IGkgPD0gMjM1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzIzNl0gPSAweDAwMDAwMGEzOworICAgICAgICAgICAgcDMyWzIzN10gPSAweDAwMDAwMDA3OworICAgICAgICAgICAgcDMyWzIzOF0gPSAweDAwMDAwMDA2OworICAgICAgICAgICAgcDMyWzIzOV0gPSAweDAwMDAwMDAzOworICAgICAgICAgICAgcDMyWzI0MF0gPSAweDAwMDAwMDAxOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgQ1VSVkVfS18yMzM6CisgICAgICAgICAgICBwMzJbICAwXSA9IDB4MDAwMDAwMDY7CisgICAgICAgICAgICBwMzJbICAxXSA9IDB4MDAwMDAwM2I7CisgICAgICAgICAgICBmb3IoaSA9IDI7IGkgPD0gMTU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbIDE2XSA9IDB4MDAzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDE3OyBpIDw9IDM3OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgZm9yKGkgPSAzODsgaSA8PSA1MTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsgNTJdID0gMHgwMDMxMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gNTM7IGkgPD0gNzM7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDc0XSA9IDB4MzMzMjM3MzE7CisgICAgICAgICAgICBwMzJbIDc1XSA9IDB4Mzg2MTYyMzI7CisgICAgICAgICAgICBwMzJbIDc2XSA9IDB4Mzc2MTMzMzU7CisgICAgICAgICAgICBwMzJbIDc3XSA9IDB4MzEzMzM3NjU7CisgICAgICAgICAgICBwMzJbIDc4XSA9IDB4MzIzMTY2NjE7CisgICAgICAgICAgICBwMzJbIDc5XSA9IDB4MzIzMjY2Mzk7CisgICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzEzNDY2NjY7CisgICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzYzNTM5MzQ7CisgICAgICAgICAgICBwMzJbIDgyXSA9IDB4MzEzNDYxMzM7CisgICAgICAgICAgICBwMzJbIDgzXSA9IDB4MzYzMjYzMzk7CisgICAgICAgICAgICBwMzJbIDg0XSA9IDB4MzAzNTY2NjI7CisgICAgICAgICAgICBwMzJbIDg1XSA9IDB4Mzk2MzM0NjE7CisgICAgICAgICAgICBwMzJbIDg2XSA9IDB4NjU2NTM2NjQ7CisgICAgICAgICAgICBwMzJbIDg3XSA9IDB4MzY2NDYxNjY7CisgICAgICAgICAgICBwMzJbIDg4XSA9IDB4MDAzNjMyMzE7CisgICAgICAgICAgICBmb3IoaSA9IDg5OyBpIDw9IDEwOTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzNTYyNjQzMTsKKyAgICAgICAgICAgIHAzMlsxMTFdID0gMHg2NTY0MzczMzsKKyAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzMTM4NjU2MzsKKyAgICAgICAgICAgIHAzMlsxMTNdID0gMHg2NjM3NjIzOTsKKyAgICAgICAgICAgIHAzMlsxMTRdID0gMHgzNTY2MzAzNzsKKyAgICAgICAgICAgIHAzMlsxMTVdID0gMHgzNjYxMzUzNTsKKyAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzMjM0NjMzNzsKKyAgICAgICAgICAgIHAzMlsxMTddID0gMHg2MzM4NjEzNzsKKyAgICAgICAgICAgIHAzMlsxMThdID0gMHg2NjYyMzk2NDsKKyAgICAgICAgICAgIHAzMlsxMTldID0gMHg2NTYxMzgzMTsKKyAgICAgICAgICAgIHAzMlsxMjBdID0gMHgzNTYyMzk2MjsKKyAgICAgICAgICAgIHAzMlsxMjFdID0gMHg2MzMwNjUzNjsKKyAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzNTMwMzEzMTsKKyAgICAgICAgICAgIHAzMlsxMjNdID0gMHg2NTYxNjYzNjsKKyAgICAgICAgICAgIHAzMlsxMjRdID0gMHgwMDMzNjEzNjsKKyAgICAgICAgICAgIGZvcihpID0gMTI1OyBpIDw9IDE0NTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NDsKKyAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDA0NjsKKyAgICAgICAgICAgIHAzMlsxOTJdID0gMHgzMDMwMzAzODsKKyAgICAgICAgICAgIGZvcihpID0gMTkzOyBpIDw9IDE5ODsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsxOTldID0gMHg0NDM5MzYzMDsKKyAgICAgICAgICAgIHAzMlsyMDBdID0gMHgzOTQyNDIzNTsKKyAgICAgICAgICAgIHAzMlsyMDFdID0gMHg0MzQyMzUzMTsKKyAgICAgICAgICAgIHAzMlsyMDJdID0gMHg0NTM2MzQ0NDsKKyAgICAgICAgICAgIHAzMlsyMDNdID0gMHg0MTMxNDI0NjsKKyAgICAgICAgICAgIHAzMlsyMDRdID0gMHgzMTQ2MzU0NDsKKyAgICAgICAgICAgIHAzMlsyMDVdID0gMHg0MjQxMzMzNzsKKyAgICAgICAgICAgIHAzMlsyMDZdID0gMHgwMDAwNDY0NDsKKyAgICAgICAgICAgIGZvcihpID0gMjA3OyBpIDw9IDIzNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDBlOTsKKyAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDA0YTsKKyAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDA0YTsKKyAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDA0YTsKKyAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIENVUlZFX0tfMjgzOgorICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDA3OworICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDQ3OworICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDE4OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWyAxOV0gPSAweDAwMzAzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAyMDsgaSA8PSAzNzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIGZvcihpID0gMzg7IGkgPD0gNTQ7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbIDU1XSA9IDB4MDAzMTMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDU2OyBpIDw9IDczOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWyA3NF0gPSAweDMyMzMzMDM1OworICAgICAgICAgICAgcDMyWyA3NV0gPSAweDM3NjYzMzMxOworICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDM0NjE2MzM4OworICAgICAgICAgICAgcDMyWyA3N10gPSAweDMzMzgzODM0OworICAgICAgICAgICAgcDMyWyA3OF0gPSAweDMzNjEzMTY2OworICAgICAgICAgICAgcDMyWyA3OV0gPSAweDM2MzEzODYyOworICAgICAgICAgICAgcDMyWyA4MF0gPSAweDM4MzE2NjMyOworICAgICAgICAgICAgcDMyWyA4MV0gPSAweDM1MzU2NTM4OworICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDMyNjQ2MzMzOworICAgICAgICAgICAgcDMyWyA4M10gPSAweDMyNjYzNTM2OworICAgICAgICAgICAgcDMyWyA4NF0gPSAweDM1MzE2MzMzOworICAgICAgICAgICAgcDMyWyA4NV0gPSAweDMxNjEzNzM2OworICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDM2MzczODM2OworICAgICAgICAgICAgcDMyWyA4N10gPSAweDYyMzMzMTM5OworICAgICAgICAgICAgcDMyWyA4OF0gPSAweDYxMzI2MzMwOworICAgICAgICAgICAgcDMyWyA4OV0gPSAweDM1MzQzMjYzOworICAgICAgICAgICAgcDMyWyA5MF0gPSAweDMyMzkzNDM4OworICAgICAgICAgICAgcDMyWyA5MV0gPSAweDAwMzYzMzM4OworICAgICAgICAgICAgZm9yKGkgPSA5MjsgaSA8PSAxMDk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTEwXSA9IDB4NjQ2MzYzMzE7CisgICAgICAgICAgICBwMzJbMTExXSA9IDB4MzAzODMzNjE7CisgICAgICAgICAgICBwMzJbMTEyXSA9IDB4Mzk2MzMxNjY7CisgICAgICAgICAgICBwMzJbMTEzXSA9IDB4MzgzMTMzNjU7CisgICAgICAgICAgICBwMzJbMTE0XSA9IDB4NjYzMDM5NjQ7CisgICAgICAgICAgICBwMzJbMTE1XSA9IDB4MzA2NDM1Mzk7CisgICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzQzNTY1Mzc7CisgICAgICAgICAgICBwMzJbMTE3XSA9IDB4NjU2NjM2MzI7CisgICAgICAgICAgICBwMzJbMTE4XSA9IDB4MzQ2NTM3Mzg7CisgICAgICAgICAgICBwMzJbMTE5XSA9IDB4NjUzMDYzMzU7CisgICAgICAgICAgICBwMzJbMTIwXSA9IDB4MzQzODMxMzg7CisgICAgICAgICAgICBwMzJbMTIxXSA9IDB4NjUzODM5MzY7CisgICAgICAgICAgICBwMzJbMTIyXSA9IDB4MzYzOTM1MzQ7CisgICAgICAgICAgICBwMzJbMTIzXSA9IDB4MzQzNjMzMzI7CisgICAgICAgICAgICBwMzJbMTI0XSA9IDB4MzEzNDMzNjU7CisgICAgICAgICAgICBwMzJbMTI1XSA9IDB4MzczMTM2MzE7CisgICAgICAgICAgICBwMzJbMTI2XSA9IDB4MzI2NDY0Mzc7CisgICAgICAgICAgICBwMzJbMTI3XSA9IDB4MDAzOTM1MzI7CisgICAgICAgICAgICBmb3IoaSA9IDEyODsgaSA8PSAxNDU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNDQ7CisgICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNTQ7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBmb3IoaSA9IDE1NTsgaSA8PSAxNTk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbMTYwXSA9IDB4MzEzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDE2MTsgaSA8PSAxOTA7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwNTU7CisgICAgICAgICAgICBwMzJbMTkyXSA9IDB4NDY0NjQ2MzE7CisgICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAxOTk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBwMzJbMjAwXSA9IDB4NDU0NjQ2NDY7CisgICAgICAgICAgICBwMzJbMjAxXSA9IDB4MzI0NTQxMzk7CisgICAgICAgICAgICBwMzJbMjAyXSA9IDB4MzczMDQ0NDU7CisgICAgICAgICAgICBwMzJbMjAzXSA9IDB4MzIzNzM3MzU7CisgICAgICAgICAgICBwMzJbMjA0XSA9IDB4NDY0NDM1MzY7CisgICAgICAgICAgICBwMzJbMjA1XSA9IDB4Mzk0NjM3NDY7CisgICAgICAgICAgICBwMzJbMjA2XSA9IDB4MzEzNTM0MzQ7CisgICAgICAgICAgICBwMzJbMjA3XSA9IDB4MzEzNjMwNDU7CisgICAgICAgICAgICBwMzJbMjA4XSA9IDB4MzMzNjMxNDU7CisgICAgICAgICAgICBwMzJbMjA5XSA9IDB4MDAzMTM2NDM7CisgICAgICAgICAgICBmb3IoaSA9IDIxMDsgaSA8PSAyMzU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAxMWI7CisgICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMGM7CisgICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMDc7CisgICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMDU7CisgICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBDVVJWRV9LXzQwOToKKyAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwODsKKyAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDA2NzsKKyAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAyNjsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsgMjddID0gMHgwMDMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMjg7IGkgPD0gMzc7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBmb3IoaSA9IDM4OyBpIDw9IDYyOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWyA2M10gPSAweDAwMzEzMDMwOworICAgICAgICAgICAgZm9yKGkgPSA2NDsgaSA8PSA3MzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgNzRdID0gMHg2NjMwMzYzMDsKKyAgICAgICAgICAgIHAzMlsgNzVdID0gMHgzNjY2MzUzMDsKKyAgICAgICAgICAgIHAzMlsgNzZdID0gMHgzNDY2MzgzNTsKKyAgICAgICAgICAgIHAzMlsgNzddID0gMHg2MTMxNjMzOTsKKyAgICAgICAgICAgIHAzMlsgNzhdID0gMHg2MjYxMzM2NDsKKyAgICAgICAgICAgIHAzMlsgNzldID0gMHgzMDM5MzgzMTsKKyAgICAgICAgICAgIHAzMlsgODBdID0gMHgzODMxMzc2NjsKKyAgICAgICAgICAgIHAzMlsgODFdID0gMHgzMDMxMzIzNDsKKyAgICAgICAgICAgIHAzMlsgODJdID0gMHgzMDY0NjY2NTsKKyAgICAgICAgICAgIHAzMlsgODNdID0gMHg2NTM3MzgzOTsKKyAgICAgICAgICAgIHAzMlsgODRdID0gMHg2MzM3MzAzMzsKKyAgICAgICAgICAgIHAzMlsgODVdID0gMHgzMjYzMzQzODsKKyAgICAgICAgICAgIHAzMlsgODZdID0gMHg2MzYzNjEzNzsKKyAgICAgICAgICAgIHAzMlsgODddID0gMHg2NjM4NjI2NjsKKyAgICAgICAgICAgIHAzMlsgODhdID0gMHgzNzM2NjYzOTsKKyAgICAgICAgICAgIHAzMlsgODldID0gMHg2MzMyNjM2MzsKKyAgICAgICAgICAgIHAzMlsgOTBdID0gMHgzMTMwMzYzNDsKKyAgICAgICAgICAgIHAzMlsgOTFdID0gMHg2MjY1MzkzODsKKyAgICAgICAgICAgIHAzMlsgOTJdID0gMHg2MTYxNjEzNTsKKyAgICAgICAgICAgIHAzMlsgOTNdID0gMHg2NTMyMzY2MTsKKyAgICAgICAgICAgIHAzMlsgOTRdID0gMHgzMjMyMzI2NTsKKyAgICAgICAgICAgIHAzMlsgOTVdID0gMHg2MjMxNjI2NTsKKyAgICAgICAgICAgIHAzMlsgOTZdID0gMHgzNDM1MzUzMzsKKyAgICAgICAgICAgIHAzMlsgOTddID0gMHg2NTY2NjMzMDsKKyAgICAgICAgICAgIHAzMlsgOThdID0gMHgzMzMyMzAzOTsKKyAgICAgICAgICAgIHAzMlsgOTldID0gMHgwMDM2MzQzNzsKKyAgICAgICAgICAgIGZvcihpID0gMTAwOyBpIDw9IDEwOTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzNjMzNjUzMTsKKyAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzMDM1MzAzOTsKKyAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzNDYzMzc2MjsKKyAgICAgICAgICAgIHAzMlsxMTNdID0gMHg2MTMyMzQ2NTsKKyAgICAgICAgICAgIHAzMlsxMTRdID0gMHgzMTYxNjI2MzsKKyAgICAgICAgICAgIHAzMlsxMTVdID0gMHg2MjYzNjE2NDsKKyAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzMjM0MzA2NjsKKyAgICAgICAgICAgIHAzMlsxMTddID0gMHgzMzYzMzkzOTsKKyAgICAgICAgICAgIHAzMlsxMThdID0gMHgzNzMwMzYzNDsKKyAgICAgICAgICAgIHAzMlsxMTldID0gMHgzOTY2MzIzODsKKyAgICAgICAgICAgIHAzMlsxMjBdID0gMHg2MTY1MzgzMTsKKyAgICAgICAgICAgIHAzMlsxMjFdID0gMHg2NTM3MzIzNDsKKyAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzNTMyMzMzNjsKKyAgICAgICAgICAgIHAzMlsxMjNdID0gMHg2NTM1MzYzMTsKKyAgICAgICAgICAgIHAzMlsxMjRdID0gMHgzMTYxNjUzOTsKKyAgICAgICAgICAgIHAzMlsxMjVdID0gMHg2NDMzNjUzMDsKKyAgICAgICAgICAgIHAzMlsxMjZdID0gMHgzNjY2MzU2MTsKKyAgICAgICAgICAgIHAzMlsxMjddID0gMHg2NTMyMzQ2MzsKKyAgICAgICAgICAgIHAzMlsxMjhdID0gMHgzNTM1NjMzOTsKKyAgICAgICAgICAgIHAzMlsxMjldID0gMHg2MTM1MzEzMjsKKyAgICAgICAgICAgIHAzMlsxMzBdID0gMHg2MTYzMzk2MTsKKyAgICAgICAgICAgIHAzMlsxMzFdID0gMHgzNTYxMzczMjsKKyAgICAgICAgICAgIHAzMlsxMzJdID0gMHg2NTMzMzYzODsKKyAgICAgICAgICAgIHAzMlsxMzNdID0gMHg2NDM4MzQ2MzsKKyAgICAgICAgICAgIHAzMlsxMzRdID0gMHgzMjMwNjUzODsKKyAgICAgICAgICAgIHAzMlsxMzVdID0gMHgwMDYyMzYzODsKKyAgICAgICAgICAgIGZvcihpID0gMTM2OyBpIDw9IDE0NTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NDsKKyAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDA3YjsKKyAgICAgICAgICAgIHAzMlsxOTJdID0gMHg0NjQ2NDYzNzsKKyAgICAgICAgICAgIGZvcihpID0gMTkzOyBpIDw9IDIwMzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsyMDRdID0gMHg0NTQ2NDY0NjsKKyAgICAgICAgICAgIHAzMlsyMDVdID0gMHgzMzM4NDYzNTsKKyAgICAgICAgICAgIHAzMlsyMDZdID0gMHgzNDQ0MzI0MjsKKyAgICAgICAgICAgIHAzMlsyMDddID0gMHgzMDMyNDE0NTsKKyAgICAgICAgICAgIHAzMlsyMDhdID0gMHg0NTMwMzAzNDsKKyAgICAgICAgICAgIHAzMlsyMDldID0gMHgzNTM1MzQ0MzsKKyAgICAgICAgICAgIHAzMlsyMTBdID0gMHg0NTM1NDQzNzsKKyAgICAgICAgICAgIHAzMlsyMTFdID0gMHgzMzQ1MzM0NDsKKyAgICAgICAgICAgIHAzMlsyMTJdID0gMHg0MTQzMzc0NTsKKyAgICAgICAgICAgIHAzMlsyMTNdID0gMHg0MjM0NDIzNTsKKyAgICAgICAgICAgIHAzMlsyMTRdID0gMHgzMzM4NDMzNTsKKyAgICAgICAgICAgIHAzMlsyMTVdID0gMHgzMDQ1Mzg0MjsKKyAgICAgICAgICAgIHAzMlsyMTZdID0gMHg0NjM1NDUzMTsKKyAgICAgICAgICAgIHAzMlsyMTddID0gMHgwMDAwNDY0MzsKKyAgICAgICAgICAgIGZvcihpID0gMjE4OyBpIDw9IDIzNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDE5OTsKKyAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDA1NzsKKyAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDA1NzsKKyAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDA1NzsKKyAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIENVUlZFX0tfNTcxOgorICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDA5OworICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDhmOworICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDM2OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWyAzN10gPSAweDAwMzAzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAzODsgaSA8PSA3MjsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsgNzNdID0gMHgwMDMxMzAzMDsKKyAgICAgICAgICAgIHAzMlsgNzRdID0gMHg2MjY1MzYzMjsKKyAgICAgICAgICAgIHAzMlsgNzVdID0gMHgzNTM4NjEzNzsKKyAgICAgICAgICAgIHAzMlsgNzZdID0gMHgzMzMyMzkzOTsKKyAgICAgICAgICAgIHAzMlsgNzddID0gMHgzODYzNjI2NjsKKyAgICAgICAgICAgIHAzMlsgNzhdID0gMHgzOTM4MzEzMjsKKyAgICAgICAgICAgIHAzMlsgNzldID0gMHg2NjMxMzMzNjsKKyAgICAgICAgICAgIHAzMlsgODBdID0gMHgzMzMwMzEzODsKKyAgICAgICAgICAgIHAzMlsgODFdID0gMHg2MTM0NjU2NjsKKyAgICAgICAgICAgIHAzMlsgODJdID0gMHg2MTYzMzk2MzsKKyAgICAgICAgICAgIHAzMlsgODNdID0gMHgzMDM3MzkzMjsKKyAgICAgICAgICAgIHAzMlsgODRdID0gMHg2NDMyMzEzMDsKKyAgICAgICAgICAgIHAzMlsgODVdID0gMHgzNjM0NjQzNTsKKyAgICAgICAgICAgIHAzMlsgODZdID0gMHgzODM0MzIzMDsKKyAgICAgICAgICAgIHAzMlsgODddID0gMHgzMDM4MzQzMDsKKyAgICAgICAgICAgIHAzMlsgODhdID0gMHgzMTM0MzgzMTsKKyAgICAgICAgICAgIHAzMlsgODldID0gMHgzNDM0NjE2MzsKKyAgICAgICAgICAgIHAzMlsgOTBdID0gMHgzOTMwMzczMzsKKyAgICAgICAgICAgIHAzMlsgOTFdID0gMHgzOTM0MzgzNTsKKyAgICAgICAgICAgIHAzMlsgOTJdID0gMHgzMDMyNjIzMzsKKyAgICAgICAgICAgIHAzMlsgOTNdID0gMHgzNDM2NjUzNTsKKyAgICAgICAgICAgIHAzMlsgOTRdID0gMHgzMzYxNjQzNzsKKyAgICAgICAgICAgIHAzMlsgOTVdID0gMHg2MjY0MzQzMDsKKyAgICAgICAgICAgIHAzMlsgOTZdID0gMHg2MjY1NjMzNDsKKyAgICAgICAgICAgIHAzMlsgOTddID0gMHg2MjYzMzgzMDsKKyAgICAgICAgICAgIHAzMlsgOThdID0gMHg2MjMxNjQ2MjsKKyAgICAgICAgICAgIHAzMlsgOTldID0gMHgzNDM5MzM2MTsKKyAgICAgICAgICAgIHAzMlsxMDBdID0gMHgzNzM3MzQzOTsKKyAgICAgICAgICAgIHAzMlsxMDFdID0gMHgzOTYyNjYzNjsKKyAgICAgICAgICAgIHAzMlsxMDJdID0gMHgzNDYyMzgzODsKKyAgICAgICAgICAgIHAzMlsxMDNdID0gMHgzNDM3MzEzNzsKKyAgICAgICAgICAgIHAzMlsxMDRdID0gMHgzODYxNjM2NDsKKyAgICAgICAgICAgIHAzMlsxMDVdID0gMHg2NTM3NjMzODsKKyAgICAgICAgICAgIHAzMlsxMDZdID0gMHgzNTM0MzkzMjsKKyAgICAgICAgICAgIHAzMlsxMDddID0gMHg2MTMzMzgzMjsKKyAgICAgICAgICAgIHAzMlsxMDhdID0gMHgzODYzMzEzMDsKKyAgICAgICAgICAgIHAzMlsxMDldID0gMHgwMDMyMzczOTsKKyAgICAgICAgICAgIHAzMlsxMTBdID0gMHg2NDM5MzQzMzsKKyAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzNzMwMzg2MzsKKyAgICAgICAgICAgIHAzMlsxMTJdID0gMHg2MjY2MzQ2NjsKKyAgICAgICAgICAgIHAzMlsxMTNdID0gMHgzNDM3MzM2NjsKKyAgICAgICAgICAgIHAzMlsxMTRdID0gMHg2NTYxMzQ2NjsKKyAgICAgICAgICAgIHAzMlsxMTVdID0gMHgzMzY1NjQ2MTsKKyAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzOTYxNjM2MjsKKyAgICAgICAgICAgIHAzMlsxMTddID0gMHgzNDMxMzMzNTsKKyAgICAgICAgICAgIHAzMlsxMThdID0gMHgzODM1NjQ2NDsKKyAgICAgICAgICAgIHAzMlsxMTldID0gMHgzOTYzNjU2MzsKKyAgICAgICAgICAgIHAzMlsxMjBdID0gMHgzNzMwMzM2NjsKKyAgICAgICAgICAgIHAzMlsxMjFdID0gMHg2NjM0MzU2MTsKKyAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzMTM2NjM2NjsKKyAgICAgICAgICAgIHAzMlsxMjNdID0gMHgzMDYzNjY2NTsKKyAgICAgICAgICAgIHAzMlsxMjRdID0gMHgzODY0MzYzMDsKKyAgICAgICAgICAgIHAzMlsxMjVdID0gMHgzOTYzMzI2MTsKKyAgICAgICAgICAgIHAzMlsxMjZdID0gMHgzNzM5MzQ2NDsKKyAgICAgICAgICAgIHAzMlsxMjddID0gMHg2MTMwNjMzOTsKKyAgICAgICAgICAgIHAzMlsxMjhdID0gMHg2MTM0MzQ2MzsKKyAgICAgICAgICAgIHAzMlsxMjldID0gMHgzNDM3NjE2NTsKKyAgICAgICAgICAgIHAzMlsxMzBdID0gMHg2MjY1NjI2NjsKKyAgICAgICAgICAgIHAzMlsxMzFdID0gMHg2NjM5NjI2MjsKKyAgICAgICAgICAgIHAzMlsxMzJdID0gMHg2MTMyMzczNzsKKyAgICAgICAgICAgIHAzMlsxMzNdID0gMHg2MjYzNjQ2NTsKKyAgICAgICAgICAgIHAzMlsxMzRdID0gMHg2MjMwMzIzNjsKKyAgICAgICAgICAgIHAzMlsxMzVdID0gMHgzNzYxMzEzMDsKKyAgICAgICAgICAgIHAzMlsxMzZdID0gMHg2MTM3NjE2MjsKKyAgICAgICAgICAgIHAzMlsxMzddID0gMHgzMzYyMzE2NjsKKyAgICAgICAgICAgIHAzMlsxMzhdID0gMHgzMzM0MzAzMjsKKyAgICAgICAgICAgIHAzMlsxMzldID0gMHgzNTM4NjMzMDsKKyAgICAgICAgICAgIHAzMlsxNDBdID0gMHgzODM5MzEzOTsKKyAgICAgICAgICAgIHAzMlsxNDFdID0gMHgzMDM2NjYzNDsKKyAgICAgICAgICAgIHAzMlsxNDJdID0gMHgzNDY0NjMzMTsKKyAgICAgICAgICAgIHAzMlsxNDNdID0gMHgzMzM0MzE2MzsKKyAgICAgICAgICAgIHAzMlsxNDRdID0gMHg2MzMxNjY2NTsKKyAgICAgICAgICAgIHAzMlsxNDVdID0gMHgwMDMzNjEzNzsKKyAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NDsKKyAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDBhYzsKKyAgICAgICAgICAgIHAzMlsxOTJdID0gMHgzMDMwMzAzMjsKKyAgICAgICAgICAgIGZvcihpID0gMTkzOyBpIDw9IDIwODsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsyMDldID0gMHgzMTMwMzAzMDsKKyAgICAgICAgICAgIHAzMlsyMTBdID0gMHgzNTM4MzEzMzsKKyAgICAgICAgICAgIHAzMlsyMTFdID0gMHg0NjMxNDUzMDsKKyAgICAgICAgICAgIHAzMlsyMTJdID0gMHgzNjQxMzkzMTsKKyAgICAgICAgICAgIHAzMlsyMTNdID0gMHg0MjM0NDUzMzsKKyAgICAgICAgICAgIHAzMlsyMTRdID0gMHg0MTMxMzkzMzsKKyAgICAgICAgICAgIHAzMlsyMTVdID0gMHgzOTQyNDQzODsKKyAgICAgICAgICAgIHAzMlsyMTZdID0gMHgzNDQ2MzczMTsKKyAgICAgICAgICAgIHAzMlsyMTddID0gMHg0MjM4MzMzMTsKKyAgICAgICAgICAgIHAzMlsyMThdID0gMHg0NDMwMzMzNjsKKyAgICAgICAgICAgIHAzMlsyMTldID0gMHg0NTQyMzQzODsKKyAgICAgICAgICAgIHAzMlsyMjBdID0gMHgzMzM2NDQzNTsKKyAgICAgICAgICAgIHAzMlsyMjFdID0gMHgzMTM4MzMzOTsKKyAgICAgICAgICAgIHAzMlsyMjJdID0gMHg0NDMxMzk0NTsKKyAgICAgICAgICAgIHAzMlsyMjNdID0gMHgzNTM0NDI0NTsKKyAgICAgICAgICAgIHAzMlsyMjRdID0gMHgzNzQ1NDY0MzsKKyAgICAgICAgICAgIHAzMlsyMjVdID0gMHgzNjQ2MzgzNzsKKyAgICAgICAgICAgIHAzMlsyMjZdID0gMHgzMTQzMzczMzsKKyAgICAgICAgICAgIHAzMlsyMjddID0gMHgwMDMxMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMjI4OyBpIDw9IDIzNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDIzYjsKKyAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDAwYTsKKyAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDAwNTsKKyAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDAwMjsKKyAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworCisKK3N0YXRpYyBFQ0NfQ1VSVkUgKiBnZXRfY3VydmUoRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlKQoreworICAgIGlmKEN1cnZlQ3B5KCh1bnNpZ25lZCBpbnQgKikmQ3VydmVfQ29weSwgZWNjX2N1cnZlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gJkN1cnZlX0NvcHk7CisKK30KKworCisjZWxzZQorc3RhdGljIEVDQ19DVVJWRSAqIGdldF9jdXJ2ZShFX0VDQ19DVVJWRSBlY2NfY3VydmUpCit7CisgICAgdWludDMyX3QgICBpOworICAgIEVDQ19DVVJWRSAgKnJldCA9IE5VTEw7CisKKyAgICBmb3IoaSA9IDBVTDsgaSA8IHNpemVvZihfQ3VydmUpIC8gc2l6ZW9mKEVDQ19DVVJWRSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmKGVjY19jdXJ2ZSA9PSBfQ3VydmVbaV0uY3VydmVfaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKSZDdXJ2ZV9Db3B5LCAmX0N1cnZlW2ldLCBzaXplb2YoRUNDX0NVUlZFKSk7CisgICAgICAgICAgICByZXQgPSAmQ3VydmVfQ29weTsgICAvKiAoRUNDX0NVUlZFICopJl9DdXJ2ZVtpXTsgKi8KKyAgICAgICAgfQorICAgICAgICBpZihyZXQgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ1JZUFRPX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENSWVBUT19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZGFjLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9kYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTk0OWVhCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZGFjLmMKQEAgLTAsMCArMSw5MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGRhYy5jCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgREFDIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIERBQ19Ecml2ZXIgREFDIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIERBQ19FWFBPUlRFRF9GVU5DVElPTlMgREFDIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gbWFrZSBEQUMgbW9kdWxlIGJlIHJlYWR5IHRvIGNvbnZlcnQuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ2ggTm90IHVzZWQgaW4gTTIzNTEgU2VyaWVzIERBQy4KKyAgKiBAcGFyYW1baW5dIHUzMlRyZ1NyYyBEZWNpZGVzIHRoZSB0cmlnZ2VyIHNvdXJjZS4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgREFDX1dSSVRFX0RBVF9UUklHR0VSICAgICAgICAgICAgIDpXcml0ZSBEQUNfREFUIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgREFDX1NPRlRXQVJFX1RSSUdHRVIgICAgICAgICAgICAgIDpTb2Z0d2FyZSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIERBQ19MT1dfTEVWRUxfVFJJR0dFUiAgICAgICAgICAgICA6U1REQUMgcGluIGxvdyBsZXZlbCB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIERBQ19ISUdIX0xFVkVMX1RSSUdHRVIgICAgICAgICAgICA6U1REQUMgcGluIGhpZ2ggbGV2ZWwgdHJpZ2dlcgorICAqICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBEQUNfRkFMTElOR19FREdFX1RSSUdHRVIgICAgICAgICAgOlNUREFDIHBpbiBmYWxsaW5nIGVkZ2UgdHJpZ2dlcgorICAqICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBEQUNfUklTSU5HX0VER0VfVFJJR0dFUiAgICAgICAgICAgOlNUREFDIHBpbiByaXNpbmcgZWRnZSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIERBQ19USU1FUjBfVFJJR0dFUiAgICAgICAgICAgICAgICA6VGltZXIgMCB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIERBQ19USU1FUjFfVFJJR0dFUiAgICAgICAgICAgICAgICA6VGltZXIgMSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIERBQ19USU1FUjJfVFJJR0dFUiAgICAgICAgICAgICAgICA6VGltZXIgMiB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIERBQ19USU1FUjNfVFJJR0dFUiAgICAgICAgICAgICAgICA6VGltZXIgMyB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIERBQ19FUFdNMF9UUklHR0VSICAgICAgICAgICAgICAgICA6RVBXTTAgdHJpZ2dlcgorICAqICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBEQUNfRVBXTTFfVFJJR0dFUiAgICAgICAgICAgICAgICAgOkVQV00xIHRyaWdnZXIKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGUgREFDIGNvbnZlcnNpb24gY2FuIGJlIHN0YXJ0ZWQgYnkgd3JpdGluZyBEQUNfREFULCBzb2Z0d2FyZSB0cmlnZ2VyIG9yIGhhcmR3YXJlIHRyaWdnZXIuCisgICogICAgICAgICBXaGVuIFRSR0VOIChEQUNfQ1RMWzRdKSBpcyAwLCB0aGUgZGF0YSBjb252ZXJzaW9uIGlzIHN0YXJ0ZWQgYnkgd3JpdGluZyBEQUNfREFUIHJlZ2lzdGVyLgorICAqICAgICAgICAgV2hlbiBUUkdFTiAoREFDX0NUTFs0XSkgaXMgMSwgdGhlIGRhdGEgY29udmVyc2lvbiBpcyBzdGFydGVkIGJ5IFNXVFJHIChEQUNfU1dUUkdbMF0pIGlzIHNldCB0byAxLAorICAqICAgICAgICAgZXh0ZXJuYWwgU1REQUMgcGluLCB0aW1lciBldmVudCwgb3IgRVBXTSBldmVudC4KKyAgKi8KK3ZvaWQgREFDX09wZW4oREFDX1QgKmRhYywKKyAgICAgICAgICAgICAgdWludDMyX3QgdTMyQ2gsCisgICAgICAgICAgICAgIHVpbnQzMl90IHUzMlRyZ1NyYykKK3sKKyAgICAodm9pZCl1MzJDaDsKKyAgICBkYWMtPkNUTCAmPSB+KERBQ19DVExfRVRSR1NFTF9Nc2sgfCBEQUNfQ1RMX1RSR1NFTF9Nc2sgfCBEQUNfQ1RMX1RSR0VOX01zayk7CisKKyAgICBkYWMtPkNUTCB8PSAodTMyVHJnU3JjIHwgREFDX0NUTF9EQUNFTl9Nc2spOworfQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBEQUMgYW5hbG9nIHBvd2VyLgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkNoIE5vdCB1c2VkIGluIE0yMzUxIFNlcmllcyBEQUMuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgRGlzYWJsZSBEQUMgYW5hbG9nIHBvd2VyIGZvciBzYXZpbmcgcG93ZXIgY29uc3VtcHRpb24uCisgICovCit2b2lkIERBQ19DbG9zZShEQUNfVCAqZGFjLCB1aW50MzJfdCB1MzJDaCkKK3sKKyAgICAodm9pZCl1MzJDaDsKKyAgICBkYWMtPkNUTCAmPSAofkRBQ19DVExfREFDRU5fTXNrKTsKK30KKworLyoqCisgICogQGJyaWVmIFNldCBkZWxheSB0aW1lIGZvciBEQUMgdG8gYmVjb21lIHN0YWJsZS4KKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJEZWxheSBEZWNpZGVzIHRoZSBEQUMgY29udmVyc2lvbiBzZXR0bGluZyB0aW1lLCB0aGUgcmFuZ2UgaXMgZnJvbSAwfigxMDIzL1BDTEsxKjEwMDAwMDApIG1pY3JvIHNlY29uZHMuCisgICogQHJldHVybiBSZWFsIERBQyBjb252ZXJzaW9uIHNldHRsaW5nIHRpbWUgKG1pY3JvIHNlY29uZCkuCisgICogQGRldGFpbHMgRm9yIGV4YW1wbGUsIERBQyBjb250cm9sbGVyIGNsb2NrIHNwZWVkIGlzIDY0TUh6IGFuZCBEQUMgY29udmVyc2lvbiBzZXR0aW5nIHRpbWUgaXMgMSB1cywgU0VUVExFVCAoREFDX1RDVExbOTowXSkgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMHg0MC4KKyAgVXNlciBuZWVkcyB0byB3cml0ZSBhcHByb3ByaWF0ZSB2YWx1ZSB0byBtZWV0IERBQyBjb252ZXJzaW9uIHNldHRsaW5nIHRpbWUgYmFzZSBvbiBQQ0xLIChBUEIgY2xvY2spIHNwZWVkLgorICAqLwordWludDMyX3QgREFDX1NldERlbGF5VGltZShEQUNfVCAqZGFjLCB1aW50MzJfdCB1MzJEZWxheSkKK3sKKworICAgIGRhYy0+VENUTCA9ICgoQ0xLX0dldFBDTEsxRnJlcSgpICogdTMyRGVsYXkgLyAxMDAwMDAwVUwpICYgMHgzRkZVTCk7CisKKyAgICByZXR1cm4gKChkYWMtPlRDVEwpICogMTAwMDAwMFVMIC8gQ0xLX0dldFBDTEsxRnJlcSgpKTsKK30KKworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgREFDX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIERBQ19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZWFkYy5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZWFkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZDIxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9lYWRjLmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBlYWRjLmMKKyAqIEB2ZXJzaW9uICBWMi4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBFQURDIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEVBRENfRHJpdmVyIEVBREMgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRUFEQ19FWFBPUlRFRF9GVU5DVElPTlMgRUFEQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIG1ha2UgRUFEQ19tb2R1bGUgYmUgcmVhZHkgdG8gY29udmVydC4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMklucHV0TW9kZSBEZWNpZGVzIHRoZSBpbnB1dCBtb2RlLgorICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19DVExfRElGRkVOX1NJTkdMRV9FTkQgICAgICA6U2luZ2xlIGVuZCBpbnB1dCBtb2RlLgorICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19DVExfRElGRkVOX0RJRkZFUkVOVElBTCAgICA6RGlmZmVyZW50aWFsIGlucHV0IHR5cGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBhbmFsb2cgaW5wdXQgbW9kZSBhbmQgZW5hYmxlIEEvRCBDb252ZXJ0ZXIuCisgICogICAgICAgICBCZWZvcmUgc3RhcnRpbmcgQS9EIGNvbnZlcnNpb24gZnVuY3Rpb24sIEFEQ0VOIGJpdCAoRUFEQ19DVExbMF0pIHNob3VsZCBiZSBzZXQgdG8gMS4KKyAKKyAgKi8KK3ZvaWQgRUFEQ19PcGVuKEVBRENfVCAqZWFkYywgdWludDMyX3QgdTMySW5wdXRNb2RlKQoreworICAgIGVhZGMtPkNUTCAmPSAofihFQURDX0NUTF9ESUZGRU5fTXNrKSk7CisKKyAgICBlYWRjLT5DVEwgfD0gKHUzMklucHV0TW9kZSB8IEVBRENfQ1RMX0FEQ0VOX01zayk7CisKKyAgICB3aGlsZSghKGVhZGMtPlBXUk0gJiBFQURDX1BXUk1fUFdVUFJEWV9Nc2spKSB7fQorfQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBFQURDX21vZHVsZS4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBDbGVhciBBRENFTiBiaXQgKEVBRENfQ1RMWzBdKSB0byBkaXNhYmxlIEEvRCBjb252ZXJ0ZXIgYW5hbG9nIGNpcmN1aXQgcG93ZXIgY29uc3VtcHRpb24uCisgICovCit2b2lkIEVBRENfQ2xvc2UoRUFEQ19UICplYWRjKQoreworICAgIGVhZGMtPkNUTCAmPSB+RUFEQ19DVExfQURDRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgQ29uZmlndXJlIHRoZSBzYW1wbGUgY29udHJvbCBsb2dpYyBtb2R1bGUuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVOdW0gRGVjaWRlcyB0aGUgc2FtcGxlIG1vZHVsZSBudW1iZXIsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMTUuCisgICogQHBhcmFtW2luXSB1MzJUcmlnZ2VyU3JjIERlY2lkZXMgdGhlIHRyaWdnZXIgc291cmNlLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX1NPRlRXQVJFX1RSSUdHRVIgICAgICAgICAgICAgIDogRGlzYWJsZSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfRkFMTElOR19FREdFX1RSSUdHRVIgICAgICAgICAgOiBTVEFEQyBwaW4gZmFsbGluZyBlZGdlIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19SSVNJTkdfRURHRV9UUklHR0VSICAgICAgICAgICA6IFNUQURDIHBpbiByaXNpbmcgZWRnZSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfRkFMTElOR19SSVNJTkdfRURHRV9UUklHR0VSICAgOiBTVEFEQyBwaW4gYm90aCBmYWxsaW5nIGFuZCByaXNpbmcgZWRnZSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfQURJTlQwX1RSSUdHRVIgICAgICAgICAgICAgICAgOiBBREMgQURJTlQwIGludGVycnVwdCBFT0MgcHVsc2UgdHJpZ2dlcgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX0FESU5UMV9UUklHR0VSICAgICAgICAgICAgICAgIDogQURDIEFESU5UMSBpbnRlcnJ1cHQgRU9DIHB1bHNlIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19USU1FUjBfVFJJR0dFUiAgICAgICAgICAgICAgICA6IFRpbWVyMCBvdmVyZmxvdyBwdWxzZSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfVElNRVIxX1RSSUdHRVIgICAgICAgICAgICAgICAgOiBUaW1lcjEgb3ZlcmZsb3cgcHVsc2UgdHJpZ2dlcgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX1RJTUVSMl9UUklHR0VSICAgICAgICAgICAgICAgIDogVGltZXIyIG92ZXJmbG93IHB1bHNlIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19USU1FUjNfVFJJR0dFUiAgICAgICAgICAgICAgICA6IFRpbWVyMyBvdmVyZmxvdyBwdWxzZSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfUFdNMFRHMF9UUklHR0VSICAgICAgICAgICAgICAgOiBFUFdNMFRHMCB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfUFdNMFRHMV9UUklHR0VSICAgICAgICAgICAgICAgOiBFUFdNMFRHMSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfUFdNMFRHMl9UUklHR0VSICAgICAgICAgICAgICAgOiBFUFdNMFRHMiB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfUFdNMFRHM19UUklHR0VSICAgICAgICAgICAgICAgOiBFUFdNMFRHMyB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfUFdNMFRHNF9UUklHR0VSICAgICAgICAgICAgICAgOiBFUFdNMFRHNCB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfUFdNMFRHNV9UUklHR0VSICAgICAgICAgICAgICAgOiBFUFdNMFRHNSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfUFdNMVRHMF9UUklHR0VSICAgICAgICAgICAgICAgOiBFUFdNMVRHMCB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfUFdNMVRHMV9UUklHR0VSICAgICAgICAgICAgICAgOiBFUFdNMVRHMSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfUFdNMVRHMl9UUklHR0VSICAgICAgICAgICAgICAgOiBFUFdNMVRHMiB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfUFdNMVRHM19UUklHR0VSICAgICAgICAgICAgICAgOiBFUFdNMVRHMyB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfUFdNMVRHNF9UUklHR0VSICAgICAgICAgICAgICAgOiBFUFdNMVRHNCB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfUFdNMVRHNV9UUklHR0VSICAgICAgICAgICAgICAgOiBFUFdNMVRHNSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfQlBXTTBUR19UUklHR0VSICAgICAgICAgICAgICAgOiBCUFdNMFRHIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19CUFdNMVRHX1RSSUdHRVIgICAgICAgICAgICAgICA6IEJQV00xVEcgdHJpZ2dlcgorICAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbCBTcGVjaWZpZXMgdGhlIHNhbXBsZSBtb2R1bGUgY2hhbm5lbCwgdmFsaWQgdmFsdWUgYXJlIGZyb20gMCB0byAxNS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBFYWNoIG9mIEFEQyBjb250cm9sIGxvZ2ljIG1vZHVsZXMgMH4xNSB3aGljaCBpcyBjb25maWd1cmFibGUgZm9yIEFEQyBjb252ZXJ0ZXIgY2hhbm5lbCBFQURDX0NIMH4xNSBhbmQgdHJpZ2dlciBzb3VyY2UuCisgICogICAgICAgICBzYW1wbGUgbW9kdWxlIDE2fjE4IGlzIGZpeGVkIGZvciBBREMgY2hhbm5lbCAxNiwgMTcsIDE4IGlucHV0IHNvdXJjZXMgYXMgYmFuZC1nYXAgdm9sdGFnZSwgdGVtcGVyYXR1cmUgc2Vuc29yLCBhbmQgYmF0dGVyeSBwb3dlciAoVkJBVCkuCisgICovCit2b2lkIEVBRENfQ29uZmlnU2FtcGxlTW9kdWxlKEVBRENfVCAqZWFkYywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJNb2R1bGVOdW0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyVHJpZ2dlclNyYywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJDaGFubmVsKQoreworICAgIGVhZGMtPlNDVExbdTMyTW9kdWxlTnVtXSAmPSB+KEVBRENfU0NUTF9FWFRGRU5fTXNrIHwgRUFEQ19TQ1RMX0VYVFJFTl9Nc2sgfCBFQURDX1NDVExfVFJHU0VMX01zayB8IEVBRENfU0NUTF9DSFNFTF9Nc2spOworICAgIGVhZGMtPlNDVExbdTMyTW9kdWxlTnVtXSB8PSAodTMyVHJpZ2dlclNyYyB8IHUzMkNoYW5uZWwpOworfQorCisKKy8qKgorICAqIEBicmllZiBTZXQgdHJpZ2dlciBkZWxheSB0aW1lLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTnVtIERlY2lkZXMgdGhlIHNhbXBsZSBtb2R1bGUgbnVtYmVyLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDE1LgorICAqIEBwYXJhbVtpbl0gdTMyVHJpZ2dlckRlbGF5VGltZSBEZWNpZGVzIHRoZSB0cmlnZ2VyIGRlbGF5IHRpbWUsIHZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDB+MHhGRi4KKyAgKiBAcGFyYW1baW5dIHUzMkRlbGF5Q2xvY2tEaXZpZGVyIERlY2lkZXMgdGhlIHRyaWdnZXIgZGVsYXkgY2xvY2sgZGl2aWRlci4gVmFsaWQgdmFsdWVzIGFyZToKKyAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19TQ1RMX1RSR0RMWURJVl9ESVZJREVSXzEgICAgOiBUcmlnZ2VyIGRlbGF5IGNsb2NrIGZyZXF1ZW5jeSBpcyBBRENfQ0xLLzEKKyAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19TQ1RMX1RSR0RMWURJVl9ESVZJREVSXzIgICAgOiBUcmlnZ2VyIGRlbGF5IGNsb2NrIGZyZXF1ZW5jeSBpcyBBRENfQ0xLLzIKKyAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19TQ1RMX1RSR0RMWURJVl9ESVZJREVSXzQgICAgOiBUcmlnZ2VyIGRlbGF5IGNsb2NrIGZyZXF1ZW5jeSBpcyBBRENfQ0xLLzQKKyAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19TQ1RMX1RSR0RMWURJVl9ESVZJREVSXzE2ICAgOiBUcmlnZ2VyIGRlbGF5IGNsb2NrIGZyZXF1ZW5jeSBpcyBBRENfQ0xLLzE2CisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVXNlciBjYW4gY29uZmlndXJlIHRoZSB0cmlnZ2VyIGRlbGF5IHRpbWUgYnkgc2V0dGluZyBUUkdETFlDTlQgKEVBRENfU0NUTG5bMTU6OF0sIG49MH4xNSkgYW5kIFRSR0RMWURJViAoRUFEQ19TQ1RMbls3OjZdLCBuPTB+MTUpLgorICAqICAgICAgICAgVHJpZ2dlciBkZWxheSB0aW1lID0gKHUzMlRyaWdnZXJEZWxheVRpbWUpIHggVHJpZ2dlciBkZWxheSBjbG9jayBwZXJpb2QuCisgICovCit2b2lkIEVBRENfU2V0VHJpZ2dlckRlbGF5VGltZShFQURDX1QgKmVhZGMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMk1vZHVsZU51bSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyVHJpZ2dlckRlbGF5VGltZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyRGVsYXlDbG9ja0RpdmlkZXIpCit7CisgICAgZWFkYy0+U0NUTFt1MzJNb2R1bGVOdW1dICY9IH4oRUFEQ19TQ1RMX1RSR0RMWURJVl9Nc2sgfCBFQURDX1NDVExfVFJHRExZQ05UX01zayk7CisgICAgZWFkYy0+U0NUTFt1MzJNb2R1bGVOdW1dIHw9ICgodTMyVHJpZ2dlckRlbGF5VGltZSA8PCBFQURDX1NDVExfVFJHRExZQ05UX1BvcykgfCB1MzJEZWxheUNsb2NrRGl2aWRlcik7Cit9CisKKy8qKgorICAqIEBicmllZiBTZXQgQURDIGV4dGVuZCBzYW1wbGUgdGltZS4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU51bSBEZWNpZGVzIHRoZSBzYW1wbGUgbW9kdWxlIG51bWJlciwgdmFsaWQgdmFsdWUgYXJlIGZyb20gMCB0byAxOC4KKyAgKiBAcGFyYW1baW5dIHUzMkV4dGVuZFNhbXBsZVRpbWUgRGVjaWRlcyB0aGUgZXh0ZW5kIHNhbXBsaW5nIHRpbWUsIHRoZSByYW5nZSBpcyBmcm9tIDB+MjU1IEFEQyBjbG9jay4gVmFsaWQgdmFsdWUgYXJlIGZyb20gMCB0byAweEZGLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFdoZW4gQS9EIGNvbnZlcnRpbmcgYXQgaGlnaCBjb252ZXJzaW9uIHJhdGUsIHRoZSBzYW1wbGluZyB0aW1lIG9mIGFuYWxvZyBpbnB1dCB2b2x0YWdlIG1heSBub3QgZW5vdWdoIGlmIGlucHV0IGNoYW5uZWwgbG9hZGluZyBpcyBoZWF2eSwKKyAgKiAgICAgICAgIHVzZXIgY2FuIGV4dGVuZCBBL0Qgc2FtcGxpbmcgdGltZSBhZnRlciB0cmlnZ2VyIHNvdXJjZSBpcyBjb21pbmcgdG8gZ2V0IGVub3VnaCBzYW1wbGluZyB0aW1lLgorICAqLwordm9pZCBFQURDX1NldEV4dGVuZFNhbXBsZVRpbWUoRUFEQ19UICplYWRjLCB1aW50MzJfdCB1MzJNb2R1bGVOdW0sIHVpbnQzMl90IHUzMkV4dGVuZFNhbXBsZVRpbWUpCit7CisgICAgZWFkYy0+U0NUTFt1MzJNb2R1bGVOdW1dICY9IH5FQURDX1NDVExfRVhUU01QVF9Nc2s7CisKKyAgICBlYWRjLT5TQ1RMW3UzMk1vZHVsZU51bV0gfD0gKHUzMkV4dGVuZFNhbXBsZVRpbWUgPDwgRUFEQ19TQ1RMX0VYVFNNUFRfUG9zKTsKKworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEVBRENfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRUFEQ19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZWJpLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9lYmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGViNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZWJpLmMKQEAgLTAsMCArMSwyMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBlYmkuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgRXh0ZXJuYWwgQnVzIEludGVyZmFjZShFQkkpIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRUJJX0RyaXZlciBFQkkgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRUJJX0VYUE9SVEVEX0ZVTkNUSU9OUyBFQkkgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBJbml0aWFsaXplIEVCSSBmb3Igc3BlY2lmeSBCYW5rCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJCYW5rICAgICAgICAgICAgIEJhbmsgbnVtYmVyIGZvciBFQkkuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9CQU5LMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfQkFOSzEKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX0JBTksyCisgICogQHBhcmFtW2luXSAgdTMyRGF0YVdpZHRoICAgICAgICBEYXRhIGJ1cyB3aWR0aC4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX0JVU1dJRFRIXzhCSVQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX0JVU1dJRFRIXzE2QklUCisgICogQHBhcmFtW2luXSAgdTMyVGltaW5nQ2xhc3MgICAgICBEZWZhdWx0IHRpbWluZyBjb25maWd1cmF0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfVElNSU5HX0ZBU1RFU1QKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX1RJTUlOR19WRVJZRkFTVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfVElNSU5HX0ZBU1QKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX1RJTUlOR19OT1JNQUwKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX1RJTUlOR19TTE9XCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9USU1JTkdfVkVSWVNMT1cKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX1RJTUlOR19TTE9XRVNUCisgICogQHBhcmFtW2luXSAgdTMyQnVzTW9kZSAgICAgICAgICBTZXQgRUJJIGJ1cyBvcGVyYXRlIG1vZGUuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9PUE1PREVfTk9STUFMCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9PUE1PREVfQ0FDQ0VTUworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfT1BNT0RFX0FEU0VQQVJBVEUKKyAgKiBAcGFyYW1baW5dICB1MzJDU0FjdGl2ZUxldmVsICAgIENTIGlzIGFjdGl2ZSBIaWdoL0xvdy4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX0NTX0FDVElWRV9ISUdICisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9DU19BQ1RJVkVfTE9XCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gb3BlbiBzcGVjaWZ5IEVCSSBiYW5rIHdpdGggZGlmZmVyZW50IGJ1cyB3aWR0aCwgdGltaW5nIHNldHRpbmcgYW5kIFxuCisgICogICAgICAgICAgICAgYWN0aXZlIGxldmVsIG9mIENTIHBpbiB0byBhY2Nlc3MgRUJJIGRldmljZS4KKyAgICAgICAgV3JpdGUgQnVmZmVyIEVuYWJsZShXQlVGRU4pIGFuZCBFeHRlbmQgVGltZSBPZiBBTEUoVEFMRSkgYXJlIG9ubHkgYXZhaWxhYmxlIGluIEVCSSBiYW5rMCBjb250cm9sIHJlZ2lzdGVyLgorICAqLwordm9pZCBFQklfT3Blbih1aW50MzJfdCB1MzJCYW5rLCB1aW50MzJfdCB1MzJEYXRhV2lkdGgsIHVpbnQzMl90IHUzMlRpbWluZ0NsYXNzLCB1aW50MzJfdCB1MzJCdXNNb2RlLCB1aW50MzJfdCB1MzJDU0FjdGl2ZUxldmVsKQoreworICAgIHVpbnQzMl90IHUzMkluZGV4MCA9ICh1aW50MzJfdCkmRUJJLT5DVEwwICsgKHVpbnQzMl90KXUzMkJhbmsgKiAweDEwVTsKKyAgICB1aW50MzJfdCB1MzJJbmRleDEgPSAodWludDMyX3QpJkVCSS0+VENUTDAgKyAodWludDMyX3QpdTMyQmFuayAqIDB4MTBVOworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpwdTMyRUJJQ1RMLCAqcHUzMkVCSVRDVEw7CisgICAgdWludDMyX3QgcHUzMkluZGV4MCwgcHUzMkluZGV4MTsKKworICAgIGlmKChfX1BDKCkmTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpCisgICAgeworICAgICAgICBwdTMySW5kZXgwID0gKHUzMkluZGV4MCB8IE5TX09GRlNFVCk7CisgICAgICAgIHB1MzJJbmRleDEgPSAodTMySW5kZXgxIHwgTlNfT0ZGU0VUKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcHUzMkluZGV4MCA9IHUzMkluZGV4MDsKKyAgICAgICAgcHUzMkluZGV4MSA9IHUzMkluZGV4MTsKKyAgICB9CisKKyAgICBwdTMyRUJJQ1RMICA9ICh1aW50MzJfdCAqKShwdTMySW5kZXgwKTsKKyAgICBwdTMyRUJJVENUTCA9ICh1aW50MzJfdCAqKShwdTMySW5kZXgxKTsKKworICAgIGlmKHUzMkRhdGFXaWR0aCA9PSBFQklfQlVTV0lEVEhfOEJJVCkKKyAgICB7CisgICAgICAgICpwdTMyRUJJQ1RMICY9IH5FQklfQ1RMX0RXMTZfTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqcHUzMkVCSUNUTCB8PSBFQklfQ1RMX0RXMTZfTXNrOworICAgIH0KKworICAgICpwdTMyRUJJQ1RMIHw9IHUzMkJ1c01vZGU7CisKKyAgICBzd2l0Y2godTMyVGltaW5nQ2xhc3MpCisgICAgeworICAgICAgICBjYXNlIEVCSV9USU1JTkdfRkFTVEVTVDoKKyAgICAgICAgICAgICpwdTMyRUJJQ1RMID0gKCpwdTMyRUJJQ1RMICYgfihFQklfQ1RMX01DTEtESVZfTXNrIHwgRUJJX0NUTF9UQUxFX01zaykpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKEVCSV9NQ0xLRElWXzEgPDwgRUJJX0NUTF9NQ0xLRElWX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyQ1NBY3RpdmVMZXZlbCA8PCBFQklfQ1RMX0NTUE9MSU5WX1BvcykgfCBFQklfQ1RMX0VOX01zazsKKyAgICAgICAgICAgICpwdTMyRUJJVENUTCA9IDB4MFU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVCSV9USU1JTkdfVkVSWUZBU1Q6CisgICAgICAgICAgICAqcHUzMkVCSUNUTCA9ICgqcHUzMkVCSUNUTCAmIH4oRUJJX0NUTF9NQ0xLRElWX01zayB8IEVCSV9DVExfVEFMRV9Nc2spKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIChFQklfTUNMS0RJVl8xIDw8IEVCSV9DVExfTUNMS0RJVl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMkNTQWN0aXZlTGV2ZWwgPDwgRUJJX0NUTF9DU1BPTElOVl9Qb3MpIHwgRUJJX0NUTF9FTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgzVSA8PCBFQklfQ1RMX1RBTEVfUG9zKSA7CisgICAgICAgICAgICAqcHUzMkVCSVRDVEwgPSAweDAzMDAzMzE4VTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRUJJX1RJTUlOR19GQVNUOgorICAgICAgICAgICAgKnB1MzJFQklDVEwgPSAoKnB1MzJFQklDVEwgJiB+KEVCSV9DVExfTUNMS0RJVl9Nc2sgfCBFQklfQ1RMX1RBTEVfTXNrKSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoRUJJX01DTEtESVZfMiA8PCBFQklfQ1RMX01DTEtESVZfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzJDU0FjdGl2ZUxldmVsIDw8IEVCSV9DVExfQ1NQT0xJTlZfUG9zKSB8IEVCSV9DVExfRU5fTXNrOworICAgICAgICAgICAgKnB1MzJFQklUQ1RMID0gMHgwVTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRUJJX1RJTUlOR19OT1JNQUw6CisgICAgICAgICAgICAqcHUzMkVCSUNUTCA9ICgqcHUzMkVCSUNUTCAmIH4oRUJJX0NUTF9NQ0xLRElWX01zayB8IEVCSV9DVExfVEFMRV9Nc2spKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIChFQklfTUNMS0RJVl8yIDw8IEVCSV9DVExfTUNMS0RJVl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMkNTQWN0aXZlTGV2ZWwgPDwgRUJJX0NUTF9DU1BPTElOVl9Qb3MpIHwgRUJJX0NUTF9FTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgzVSA8PCBFQklfQ1RMX1RBTEVfUG9zKSA7CisgICAgICAgICAgICAqcHUzMkVCSVRDVEwgPSAweDAzMDAzMzE4VTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRUJJX1RJTUlOR19TTE9XOgorICAgICAgICAgICAgKnB1MzJFQklDVEwgPSAoKnB1MzJFQklDVEwgJiB+KEVCSV9DVExfTUNMS0RJVl9Nc2sgfCBFQklfQ1RMX1RBTEVfTXNrKSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoRUJJX01DTEtESVZfMiA8PCBFQklfQ1RMX01DTEtESVZfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzJDU0FjdGl2ZUxldmVsIDw8IEVCSV9DVExfQ1NQT0xJTlZfUG9zKSB8IEVCSV9DVExfRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4N1UgPDwgRUJJX0NUTF9UQUxFX1BvcykgOworICAgICAgICAgICAgKnB1MzJFQklUQ1RMID0gMHgwNzAwNzczOFU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVCSV9USU1JTkdfVkVSWVNMT1c6CisgICAgICAgICAgICAqcHUzMkVCSUNUTCA9ICgqcHUzMkVCSUNUTCAmIH4oRUJJX0NUTF9NQ0xLRElWX01zayB8IEVCSV9DVExfVEFMRV9Nc2spKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIChFQklfTUNMS0RJVl80IDw8IEVCSV9DVExfTUNMS0RJVl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMkNTQWN0aXZlTGV2ZWwgPDwgRUJJX0NUTF9DU1BPTElOVl9Qb3MpIHwgRUJJX0NUTF9FTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3VSA8PCBFQklfQ1RMX1RBTEVfUG9zKSA7CisgICAgICAgICAgICAqcHUzMkVCSVRDVEwgPSAweDA3MDA3NzM4VTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRUJJX1RJTUlOR19TTE9XRVNUOgorICAgICAgICAgICAgKnB1MzJFQklDVEwgPSAoKnB1MzJFQklDVEwgJiB+KEVCSV9DVExfTUNMS0RJVl9Nc2sgfCBFQklfQ1RMX1RBTEVfTXNrKSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoRUJJX01DTEtESVZfOCA8PCBFQklfQ1RMX01DTEtESVZfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzJDU0FjdGl2ZUxldmVsIDw8IEVCSV9DVExfQ1NQT0xJTlZfUG9zKSB8IEVCSV9DVExfRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4N1UgPDwgRUJJX0NUTF9UQUxFX1BvcykgOworICAgICAgICAgICAgKnB1MzJFQklUQ1RMID0gMHgwNzAwNzczOFU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnB1MzJFQklDVEwgJj0gfkVCSV9DVExfRU5fTXNrOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIEVCSSBvbiBzcGVjaWZ5IEJhbmsKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMkJhbmsgICAgIEJhbmsgbnVtYmVyIGZvciBFQkkuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfQkFOSzAKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9CQU5LMQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX0JBTksyCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xvc2Ugc3BlY2lmeSBFQkkgZnVuY3Rpb24uCisgICovCit2b2lkIEVCSV9DbG9zZSh1aW50MzJfdCB1MzJCYW5rKQoreworICAgIHVpbnQzMl90IHUzMkluZGV4ID0gKHVpbnQzMl90KSZFQkktPkNUTDAgKyB1MzJCYW5rICogMHgxMFU7CisgICAgdm9sYXRpbGUgdWludDMyX3QgKnB1MzJFQklDVEw7CisgICAgdWludDMyX3QgcHUzMkluZGV4OworCisgICAgaWYoKF9fUEMoKSZOU19PRkZTRVQpID09IE5TX09GRlNFVCkKKyAgICB7CisgICAgICAgIHB1MzJJbmRleCA9ICh1MzJJbmRleCB8IE5TX09GRlNFVCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHB1MzJJbmRleCA9IHUzMkluZGV4OworICAgIH0KKworICAgIHB1MzJFQklDVEwgID0gKHVpbnQzMl90ICopKHB1MzJJbmRleCk7CisKKyAgICAqcHUzMkVCSUNUTCAmPSB+RUJJX0NUTF9FTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBFQkkgQnVzIFRpbWluZyBmb3Igc3BlY2lmeSBCYW5rCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJCYW5rICAgICAgICAgICAgIEJhbmsgbnVtYmVyIGZvciBFQkkuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9CQU5LMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfQkFOSzEKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX0JBTksyCisgICogQHBhcmFtW2luXSAgdTMyVGltaW5nQ29uZmlnICAgICBDb25maWd1cmUgRUJJIHRpbWluZyBzZXR0aW5ncywgaW5jbHVkZXMgVEFDQywgVEFIRCwgVzJYIGFuZCBSMlIgc2V0dGluZy4KKyAgKiBAcGFyYW1baW5dICB1MzJNY2xrRGl2ICAgICAgICAgIERpdmlkZXIgZm9yIE1DTEsuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9NQ0xLRElWXzEKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX01DTEtESVZfMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfTUNMS0RJVl80CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9NQ0xLRElWXzgKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX01DTEtESVZfMTYKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX01DTEtESVZfMzIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX01DTEtESVZfNjQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX01DTEtESVZfMTI4CisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29uZmlndXJlIHNwZWNpZnkgRUJJIGJ1cyB0aW1pbmcgZm9yIGFjY2VzcyBFQkkgZGV2aWNlLgorICAqLwordm9pZCBFQklfU2V0QnVzVGltaW5nKHVpbnQzMl90IHUzMkJhbmssIHVpbnQzMl90IHUzMlRpbWluZ0NvbmZpZywgdWludDMyX3QgdTMyTWNsa0RpdikKK3sKKyAgICB1aW50MzJfdCB1MzJJbmRleDAgPSAodWludDMyX3QpJkVCSS0+Q1RMMCArICh1aW50MzJfdCl1MzJCYW5rICogMHgxMFU7CisgICAgdWludDMyX3QgdTMySW5kZXgxID0gKHVpbnQzMl90KSZFQkktPlRDVEwwICsgKHVpbnQzMl90KXUzMkJhbmsgKiAweDEwVTsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqcHUzMkVCSUNUTCwgKnB1MzJFQklUQ1RMOworICAgIHVpbnQzMl90IHB1MzJJbmRleDAsIHB1MzJJbmRleDE7CisKKyAgICBpZigoX19QQygpJk5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKQorICAgIHsKKyAgICAgICAgcHUzMkluZGV4MCA9ICh1MzJJbmRleDAgfCBOU19PRkZTRVQpOworICAgICAgICBwdTMySW5kZXgxID0gKHUzMkluZGV4MSB8IE5TX09GRlNFVCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHB1MzJJbmRleDAgPSB1MzJJbmRleDA7CisgICAgICAgIHB1MzJJbmRleDEgPSB1MzJJbmRleDE7CisgICAgfQorCisgICAgcHUzMkVCSUNUTCAgPSAodWludDMyX3QgKikocHUzMkluZGV4MCk7CisgICAgcHUzMkVCSVRDVEwgPSAodWludDMyX3QgKikocHUzMkluZGV4MSk7CisKKyAgICAqcHUzMkVCSUNUTCA9ICgqcHUzMkVCSUNUTCAmIH5FQklfQ1RMX01DTEtESVZfTXNrKSB8ICh1MzJNY2xrRGl2IDw8IEVCSV9DVExfTUNMS0RJVl9Qb3MpOworICAgICpwdTMyRUJJVENUTCA9IHUzMlRpbWluZ0NvbmZpZzsKK30KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFQklfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRUJJX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9lY2FwLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9lY2FwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2NTIyNQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2VjYXAuYwpAQCAtMCwwICsxLDExOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGVjYXAuYworICogQHZlcnNpb24gIFYzLjAwCisKKyAqIEBicmllZiAgICBFbmhhbmNlZCBJbnB1dCBDYXB0dXJlIFRpbWVyIChFQ0FQKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk0yMzUxLmgiCisKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEVDQVBfRHJpdmVyIEVDQVAgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRUNBUF9FWFBPUlRFRF9GVU5DVElPTlMgRUNBUCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBFQ0FQIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSAgZWNhcCAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQ0FQIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJGdW5jTWFzayBJbnB1dCBjYXB0dXJlIGZ1bmN0aW9uIHNlbGVjdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0RJU0FCTEVfQ09NUEFSRQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NPTVBBUkVfRlVOQ1RJT04KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBlbmFibGUgaW5wdXQgY2FwdHVyZSBmdW5jdGlvbiBhbmQgc2VsZWN0IGNvbXBhcmUgYW5kIHJlbG9hZCBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgRUNBUF9PcGVuKEVDQVBfVCogZWNhcCwgdWludDMyX3QgdTMyRnVuY01hc2spCit7CisgICAgLyogQ2xlYXIgSW5wdXQgY2FwdHVyZSBtb2RlKi8KKyAgICBlY2FwLT5DVEwwID0gZWNhcC0+Q1RMMCAmIH4oRUNBUF9DVEwwX0NNUEVOX01zayk7CisKKyAgICAvKiBFbmFibGUgSW5wdXQgQ2FwdHVyZSBhbmQgc2V0IG1vZGUgKi8KKyAgICBlY2FwLT5DVEwwIHw9IEVDQVBfQ1RMMF9DQVBFTl9Nc2sgfCAodTMyRnVuY01hc2spOworfQorCisKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBFQ0FQIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSAgZWNhcCAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQ0FQIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBkaXNhYmxlIGlucHV0IGNhcHR1cmUgZnVuY3Rpb24uCisgICovCit2b2lkIEVDQVBfQ2xvc2UoRUNBUF9UKiBlY2FwKQoreworICAgIC8qIERpc2FibGUgSW5wdXQgQ2FwdHVyZSovCisgICAgZWNhcC0+Q1RMMCAmPSB+RUNBUF9DVEwwX0NBUEVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgaW5wdXQgY2hhbm5lbCBpbnRlcnJ1cHQKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyTWFzayAgVGhlIGlucHV0IGNoYW5uZWwgTWFzaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9DQVBJRU4wX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9DQVBJRU4xX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9DQVBJRU4yX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9PVklFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfQ01QSUVOX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBlbmFibGUgdGhlIGlucHV0IGNoYW5uZWxfbiBpbnRlcnJ1cHQuCisgICovCit2b2lkIEVDQVBfRW5hYmxlSU5UKEVDQVBfVCogZWNhcCwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICAvKiBFbmFibGUgaW5wdXQgY2hhbm5lbCBpbnRlcnJ1cHQgKi8KKyAgICBlY2FwLT5DVEwwIHw9ICh1MzJNYXNrKTsKKworICAgIC8qIEVuYWJsZSBOVklDIEVDQVAgSVJRICovCisgICAgaWYoKGVjYXAgPT0gRUNBUDApIHx8IChlY2FwID09IEVDQVAwX05TKSkKKyAgICB7CisgICAgICAgIE5WSUNfRW5hYmxlSVJRKEVDQVAwX0lSUW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBOVklDX0VuYWJsZUlSUShFQ0FQMV9JUlFuKTsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBpbnB1dCBjaGFubmVsIGludGVycnVwdAorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJNYXNrICBUaGUgaW5wdXQgY2hhbm5lbCBudW1iZXIKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfQ0FQSUVOMF9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfQ0FQSUVOMV9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfQ0FQSUVOMl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfT1ZJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwwX0NNUElFTl9Nc2sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZGlzYWJsZSB0aGUgaW5wdXQgY2hhbm5lbF9uIGludGVycnVwdC4KKyAgKi8KK3ZvaWQgRUNBUF9EaXNhYmxlSU5UKEVDQVBfVCogZWNhcCwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICAvKiBEaXNhYmxlIGlucHV0IGNoYW5uZWwgaW50ZXJydXB0ICovCisgICAgKGVjYXAtPkNUTDApICY9IH4odTMyTWFzayk7CisKKyAgICAvKiBEaXNhYmxlIE5WSUMgRUNBUCBJUlEgKi8KKyAgICBpZigoZWNhcCA9PSBFQ0FQMCkgfHwgKGVjYXAgPT0gRUNBUDBfTlMpKQorICAgIHsKKyAgICAgICAgTlZJQ19EaXNhYmxlSVJRKEVDQVAwX0lSUW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBOVklDX0Rpc2FibGVJUlEoRUNBUDFfSVJRbik7CisgICAgfQorfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEVDQVBfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRUNBUF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZXB3bS5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZXB3bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NjJkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9lcHdtLmMKQEAgLTAsMCArMSwxMzk3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZXB3bS5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgRVBXTSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBFUFdNX0RyaXZlciBFUFdNIERyaXZlcgorICBAeworKi8KKworCisvKiogQGFkZHRvZ3JvdXAgRVBXTV9FWFBPUlRFRF9GVU5DVElPTlMgRVBXTSBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICogQGJyaWVmIENvbmZpZ3VyZSBFUFdNIGNhcHR1cmUgYW5kIGdldCB0aGUgbmVhcmVzdCB1bml0IHRpbWUuCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyVW5pdFRpbWVOc2VjIFRoZSB1bml0IHRpbWUgb2YgY291bnRlcgorICogQHBhcmFtW2luXSB1MzJDYXB0dXJlRWRnZSBUaGUgY29uZGl0aW9uIHRvIGxhdGNoIHRoZSBjb3VudGVyLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZAorICogQHJldHVybiBUaGUgbmVhcmVzdCB1bml0IHRpbWUgaW4gbmFubyBzZWNvbmQuCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gQ29uZmlndXJlIEVQV00gY2FwdHVyZSBhbmQgZ2V0IHRoZSBuZWFyZXN0IHVuaXQgdGltZS4KKyAqLwordWludDMyX3QgRVBXTV9Db25maWdDYXB0dXJlQ2hhbm5lbChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMlVuaXRUaW1lTnNlYywgdWludDMyX3QgdTMyQ2FwdHVyZUVkZ2UpCit7CisgICAgdWludDMyX3QgdTMyUFdNQ2xvY2tTcmM7CisgICAgdWludDMyX3QgdTMyTmVhcmVzdFVuaXRUaW1lTnNlYyA9IDBVOworICAgIHVpbnQzMl90IHUzMlByZXNjYWxlID0gMVUsIHUzMkNOUiA9IDB4RkZGRlU7CisgICAgdWludDhfdCB1OEJyZWFrTG9vcCA9IDBVOworCisgICAgKHZvaWQpdTMyQ2FwdHVyZUVkZ2U7CisgICAgLyogY2xvY2sgc291cmNlIGlzIGZyb20gUENMSyAqLworICAgIGlmKChlcHdtID09IEVQV00wKSB8fCAoZXB3bSA9PSBFUFdNMF9OUykpCisgICAgeworICAgICAgICB1MzJQV01DbG9ja1NyYyA9IENMS19HZXRQQ0xLMEZyZXEoKTsKKyAgICB9CisgICAgZWxzZSAvKiBpZigoZXB3bSA9PSBFUFdNMSl8fChlcHdtID09IEVQV00xX05TKSkgKi8KKyAgICB7CisgICAgICAgIHUzMlBXTUNsb2NrU3JjID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgIH0KKworICAgIHUzMlBXTUNsb2NrU3JjIC89IDEwMDBVTDsKKyAgICBmb3IodTMyUHJlc2NhbGUgPSAxVTsgdTMyUHJlc2NhbGUgPD0gMHgxMDAwVTsgdTMyUHJlc2NhbGUrKykKKyAgICB7CisgICAgICAgIHUzMk5lYXJlc3RVbml0VGltZU5zZWMgPSAoMTAwMDAwMFVMICogdTMyUHJlc2NhbGUpIC8gdTMyUFdNQ2xvY2tTcmM7CisgICAgICAgIGlmKHUzMk5lYXJlc3RVbml0VGltZU5zZWMgPCB1MzJVbml0VGltZU5zZWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHUzMlByZXNjYWxlID09IDB4MTAwMFUpICAvKiBsaW1pdCB0byB0aGUgbWF4aW11bSB1bml0IHRpbWUobmFubyBzZWNvbmQpICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdThCcmVha0xvb3AgPSAxVTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCEoKDEwMDAwMDBVTCAqICh1MzJQcmVzY2FsZSArIDFVTCkgPiAodTMyTmVhcmVzdFVuaXRUaW1lTnNlYyAqIHUzMlBXTUNsb2NrU3JjKSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHU4QnJlYWtMb29wID0gMVU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1OEJyZWFrTG9vcCA9IDFVOworICAgICAgICB9CisgICAgICAgIGlmKHU4QnJlYWtMb29wKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGNvbnZlcnQgdG8gcmVhbCByZWdpc3RlciB2YWx1ZSAqLworICAgIHUzMlByZXNjYWxlID0gdTMyUHJlc2NhbGUgLSAxVTsKKyAgICAvKiBldmVyeSB0d28gY2hhbm5lbHMgc2hhcmUgYSBwcmVzY2FsZXIgKi8KKyAgICBFUFdNX1NFVF9QUkVTQ0FMRVIoZXB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyUHJlc2NhbGUpOworCisgICAgLyogc2V0IEVQV00gdG8gZG93biBjb3VudCB0eXBlKGVkZ2UgYWxpZ25lZCkgKi8KKyAgICAoZXB3bSktPkNUTDEgPSAoKGVwd20pLT5DVEwxICYgfihFUFdNX0NUTDFfQ05UVFlQRTBfTXNrIDw8ICh1MzJDaGFubmVsTnVtIDw8IDEpKSkgfCAoMVVMIDw8ICh1MzJDaGFubmVsTnVtIDw8IDEpKTsKKyAgICAvKiBzZXQgRVBXTSB0byBhdXRvLXJlbG9hZCBtb2RlICovCisgICAgKGVwd20pLT5DVEwxICY9IH4oRVBXTV9DVEwxX0NOVE1PREUwX01zayA8PCB1MzJDaGFubmVsTnVtKTsKKyAgICBFUFdNX1NFVF9DTlIoZXB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyQ05SKTsKKworICAgIHJldHVybiAodTMyTmVhcmVzdFVuaXRUaW1lTnNlYyk7Cit9CisKKy8qKgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gQ29uZmlndXJlIEVQV00gZ2VuZXJhdG9yIGFuZCBnZXQgdGhlIG5lYXJlc3QgZnJlcXVlbmN5IGluIGVkZ2UgYWxpZ25lZCh1cCBjb3VudGVyIHR5cGUpIGF1dG8tcmVsb2FkIG1vZGUKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJGcmVxdWVuY3kgVGFyZ2V0IGdlbmVyYXRvciBmcmVxdWVuY3kKKyAqIEBwYXJhbVtpbl0gdTMyRHV0eUN5Y2xlIFRhcmdldCBnZW5lcmF0b3IgZHV0eSBjeWNsZSBwZXJjZW50YWdlLiBWYWxpZCByYW5nZSBhcmUgYmV0d2VlbiAwIH4gMTAwLiAxMCBtZWFucyAxMCUsIDIwIG1lYW5zIDIwJS4uLgorICogQHJldHVybiBOZWFyZXN0IGZyZXF1ZW5jeSBjbG9jayBpbiBuYW5vIHNlY29uZAorIFNpbmNlIGV2ZXJ5IHR3byBjaGFubmVscywgKDAgJiAxKSwgKDIgJiAzKSwgc2hhcmVzIGEgcHJlc2NhbGVyLiBDYWxsIHRoaXMgQVBJIHRvIGNvbmZpZ3VyZSBFUFdNIGZyZXF1ZW5jeSBtYXkgYWZmZWN0CisgKiAgICAgICBleGlzdGluZyBmcmVxdWVuY3kgb2Ygb3RoZXIgY2hhbm5lbC4KKyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGluaXRpYWwgc3RhZ2UuCisgKiAgICAgICBUbyBjaGFuZ2UgZHV0eSBjeWNsZSBsYXRlciwgaXQgc2hvdWxkIGdldCB0aGUgY29uZmlndXJlZCBwZXJpb2QgdmFsdWUgYW5kIGNhbGN1bGF0ZSB0aGUgbmV3IGNvbXBhcmF0b3IgdmFsdWUuCisgKi8KK3VpbnQzMl90IEVQV01fQ29uZmlnT3V0cHV0Q2hhbm5lbChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkZyZXF1ZW5jeSwgdWludDMyX3QgdTMyRHV0eUN5Y2xlKQoreworICAgIHVpbnQzMl90IHUzMlBXTUNsb2NrU3JjOworICAgIHVpbnQzMl90IGk7CisgICAgdWludDMyX3QgdTMyUHJlc2NhbGUgPSAxVSwgdTMyQ05SID0gMHhGRkZGVTsKKworICAgIC8qIGNsb2NrIHNvdXJjZSBpcyBmcm9tIFBDTEsgKi8KKyAgICBpZigoZXB3bSA9PSBFUFdNMCkgfHwgKGVwd20gPT0gRVBXTTBfTlMpKQorICAgIHsKKyAgICAgICAgdTMyUFdNQ2xvY2tTcmMgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgfQorICAgIGVsc2UgLyogaWYoKGVwd20gPT0gRVBXTTEpfHwoZXB3bSA9PSBFUFdNMV9OUykpICovCisgICAgeworICAgICAgICB1MzJQV01DbG9ja1NyYyA9IENMS19HZXRQQ0xLMUZyZXEoKTsKKyAgICB9CisKKyAgICBmb3IodTMyUHJlc2NhbGUgPSAxVTsgdTMyUHJlc2NhbGUgPCAweEZGRlU7IHUzMlByZXNjYWxlKyspLyogcHJlc2NhbGUgY291bGQgYmUgMH4weEZGRiAqLworICAgIHsKKyAgICAgICAgaSA9ICh1MzJQV01DbG9ja1NyYyAvIHUzMkZyZXF1ZW5jeSkgLyB1MzJQcmVzY2FsZTsKKyAgICAgICAgLyogSWYgdGFyZ2V0IHZhbHVlIGlzIGxhcmdlciB0aGFuIENOUiwgbmVlZCB0byB1c2UgYSBsYXJnZXIgcHJlc2NhbGVyICovCisgICAgICAgIGlmKGkgPD0gKDB4MTAwMDBVKSkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ05SID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIC8qIFN0b3JlIHJldHVybiB2YWx1ZSBoZXJlICdjb3Mgd2UncmUgZ29ubmEgY2hhbmdlIHUzMlByZXNjYWxlICYgdTMyQ05SIHRvIHRoZSByZWFsIHZhbHVlIHRvIGZpbGwgaW50byByZWdpc3RlciAqLworICAgIGkgPSB1MzJQV01DbG9ja1NyYyAvICh1MzJQcmVzY2FsZSAqIHUzMkNOUik7CisKKyAgICAvKiBjb252ZXJ0IHRvIHJlYWwgcmVnaXN0ZXIgdmFsdWUgKi8KKyAgICB1MzJQcmVzY2FsZSA9IHUzMlByZXNjYWxlIC0gMVU7CisgICAgLyogZXZlcnkgdHdvIGNoYW5uZWxzIHNoYXJlIGEgcHJlc2NhbGVyICovCisgICAgRVBXTV9TRVRfUFJFU0NBTEVSKGVwd20sIHUzMkNoYW5uZWxOdW0sIHUzMlByZXNjYWxlKTsKKyAgICAvKiBzZXQgRVBXTSB0byB1cCBjb3VudGVyIHR5cGUoZWRnZSBhbGlnbmVkKSBhbmQgYXV0by1yZWxvYWQgbW9kZSAqLworICAgIChlcHdtKS0+Q1RMMSA9ICgoZXB3bSktPkNUTDEgJiB+KChFUFdNX0NUTDFfQ05UVFlQRTBfTXNrIDw8ICh1MzJDaGFubmVsTnVtIDw8IDEpKSB8IChFUFdNX0NUTDFfQ05UTU9ERTBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pKSk7CisKKyAgICB1MzJDTlIgPSB1MzJDTlIgLSAxVTsKKyAgICBFUFdNX1NFVF9DTlIoZXB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyQ05SKTsKKyAgICBFUFdNX1NFVF9DTVIoZXB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyRHV0eUN5Y2xlICogKHUzMkNOUiArIDFVTCkgLyAxMDBVTCk7CisKKyAgICAoZXB3bSktPldHQ1RMMCA9ICgoZXB3bSktPldHQ1RMMCAmIH4oKEVQV01fV0dDVEwwX1BSRFBDVEwwX01zayB8IEVQV01fV0dDVEwwX1pQQ1RMMF9Nc2spIDw8ICh1MzJDaGFubmVsTnVtIDw8IDEpKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAoRVBXTV9PVVRQVVRfSElHSCA8PCAodTMyQ2hhbm5lbE51bSA8PCAxVUwgPDwgRVBXTV9XR0NUTDBfWlBDVEwwX1BvcykpOworICAgIChlcHdtKS0+V0dDVEwxID0gKChlcHdtKS0+V0dDVEwxICYgfigoRVBXTV9XR0NUTDFfQ01QRENUTDBfTXNrIHwgRVBXTV9XR0NUTDFfQ01QVUNUTDBfTXNrKSA8PCAodTMyQ2hhbm5lbE51bSA8PCAxKSkpIHwgXAorICAgICAgICAgICAgICAgICAgICAgKEVQV01fT1VUUFVUX0xPVyA8PCAodTMyQ2hhbm5lbE51bSA8PCAxVUwgPDwgRVBXTV9XR0NUTDFfQ01QVUNUTDBfUG9zKSk7CisKKyAgICByZXR1cm4oaSk7Cit9CisKKy8qKgorICogQGJyaWVmIFN0YXJ0IEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIGlzIGNoYW5uZWwgMCwgYml0IDEgaXMgY2hhbm5lbCAxLi4uCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzdGFydCBFUFdNIG1vZHVsZS4KKyAqLwordm9pZCBFUFdNX1N0YXJ0KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spCit7CisgICAgKGVwd20pLT5DTlRFTiB8PSB1MzJDaGFubmVsTWFzazsKK30KKworLyoqCisgKiBAYnJpZWYgU3RvcCBFUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCBpcyBjaGFubmVsIDAsIGJpdCAxIGlzIGNoYW5uZWwgMS4uLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RvcCBFUFdNIG1vZHVsZS4KKyAqLwordm9pZCBFUFdNX1N0b3AoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICB1aW50MzJfdCBpOworICAgIGZvcihpID0gMFVMOyBpIDwgRVBXTV9DSEFOTkVMX05VTTsgaSArKykKKyAgICB7CisgICAgICAgIGlmKHUzMkNoYW5uZWxNYXNrICYgKDFVTCA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgKGVwd20pLT5QRVJJT0RbaV0gPSAwVUw7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmIFN0b3AgRVBXTSBnZW5lcmF0aW9uIGltbWVkaWF0ZWx5IGJ5IGNsZWFyIGNoYW5uZWwgZW5hYmxlIGJpdAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCBpcyBjaGFubmVsIDAsIGJpdCAxIGlzIGNoYW5uZWwgMS4uLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RvcCBFUFdNIGdlbmVyYXRpb24gaW1tZWRpYXRlbHkgYnkgY2xlYXIgY2hhbm5lbCBlbmFibGUgYml0LgorICovCit2b2lkIEVQV01fRm9yY2VTdG9wKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spCit7CisgICAgKGVwd20pLT5DTlRFTiAmPSB+dTMyQ2hhbm5lbE1hc2s7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBzZWxlY3RlZCBjaGFubmVsIHRvIHRyaWdnZXIgQURDCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyQ29uZGl0aW9uIFRoZSBjb25kaXRpb24gdG8gdHJpZ2dlciBBREMuIENvbWJpbmF0aW9uIG9mIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUkdfQURDX0VWRU5fWkVSTworICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUkdfQURDX0VWRU5fUEVSSU9ECisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSR19BRENfRVZFTl9aRVJPX1BFUklPRAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUkdfQURDX0VWRU5fQ09NUEFSRV9VUAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUkdfQURDX0VWRU5fQ09NUEFSRV9ET1dOCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSR19BRENfT0REX1pFUk8KKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fVFJHX0FEQ19PRERfUEVSSU9ECisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSR19BRENfT0REX1pFUk9fUEVSSU9ECisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSR19BRENfT0REX0NPTVBBUkVfVVAKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fVFJHX0FEQ19PRERfQ09NUEFSRV9ET1dOCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSR19BRENfQ0hfMF9GUkVFX0NNUF9VUAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUkdfQURDX0NIXzBfRlJFRV9DTVBfRE9XTgorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUkdfQURDX0NIXzJfRlJFRV9DTVBfVVAKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fVFJHX0FEQ19DSF8yX0ZSRUVfQ01QX0RPV04KKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fVFJHX0FEQ19DSF80X0ZSRUVfQ01QX1VQCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSR19BRENfQ0hfNF9GUkVFX0NNUF9ET1dOCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgc2VsZWN0ZWQgY2hhbm5lbCB0byB0cmlnZ2VyIEFEQy4KKyAqLwordm9pZCBFUFdNX0VuYWJsZUFEQ1RyaWdnZXIoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJDb25kaXRpb24pCit7CisgICAgaWYodTMyQ2hhbm5lbE51bSA8IDRVTCkKKyAgICB7CisgICAgICAgIChlcHdtKS0+RUFEQ1RTMCAmPSB+KChFUFdNX0VBRENUUzBfVFJHU0VMMF9Nc2spIDw8ICh1MzJDaGFubmVsTnVtIDw8IDMpKTsKKyAgICAgICAgKGVwd20pLT5FQURDVFMwIHw9ICgoRVBXTV9FQURDVFMwX1RSR0VOMF9Nc2sgfCB1MzJDb25kaXRpb24pIDw8ICh1MzJDaGFubmVsTnVtIDw8IDMpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKGVwd20pLT5FQURDVFMxICY9IH4oKEVQV01fRUFEQ1RTMV9UUkdTRUw0X01zaykgPDwgKCh1MzJDaGFubmVsTnVtIC0gNFVMKSA8PCAzKSk7CisgICAgICAgIChlcHdtKS0+RUFEQ1RTMSB8PSAoKEVQV01fRUFEQ1RTMV9UUkdFTjRfTXNrIHwgdTMyQ29uZGl0aW9uKSA8PCAoKHUzMkNoYW5uZWxOdW0gLSA0VUwpIDw8IDMpKTsKKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgc2VsZWN0ZWQgY2hhbm5lbCB0byB0cmlnZ2VyIEFEQworICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIHNlbGVjdGVkIGNoYW5uZWwgdG8gdHJpZ2dlciBBREMuCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlQURDVHJpZ2dlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgaWYodTMyQ2hhbm5lbE51bSA8IDRVTCkKKyAgICB7CisgICAgICAgIChlcHdtKS0+RUFEQ1RTMCAmPSB+KEVQV01fRUFEQ1RTMF9UUkdFTjBfTXNrIDw8ICh1MzJDaGFubmVsTnVtIDw8IDMpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKGVwd20pLT5FQURDVFMxICY9IH4oRVBXTV9FQURDVFMxX1RSR0VONF9Nc2sgPDwgKCh1MzJDaGFubmVsTnVtIC0gNFVMKSA8PCAzKSk7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiBDbGVhciBzZWxlY3RlZCBjaGFubmVsIHRyaWdnZXIgQURDIGZsYWcKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJDb25kaXRpb24gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIHNlbGVjdGVkIGNoYW5uZWwgdHJpZ2dlciBBREMgZmxhZy4KKyAqLwordm9pZCBFUFdNX0NsZWFyQURDVHJpZ2dlckZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJDb25kaXRpb24pCit7CisgICAgKHZvaWQpdTMyQ29uZGl0aW9uOworICAgIChlcHdtKS0+U1RBVFVTID0gKEVQV01fU1RBVFVTX0VBRENUUkdGMF9Nc2sgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIEdldCBzZWxlY3RlZCBjaGFubmVsIHRyaWdnZXIgQURDIGZsYWcKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHZhbCAwIFRoZSBzcGVjaWZpZWQgY2hhbm5lbCB0cmlnZ2VyIEFEQyB0byBzdGFydCBvZiBjb252ZXJzaW9uIGZsYWcgaXMgbm90IHNldAorICogQHJldHZhbCAxIFRoZSBzcGVjaWZpZWQgY2hhbm5lbCB0cmlnZ2VyIEFEQyB0byBzdGFydCBvZiBjb252ZXJzaW9uIGZsYWcgaXMgc2V0CisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IEVQV00gdHJpZ2dlciBBREMgdG8gc3RhcnQgb2YgY29udmVyc2lvbiBmbGFnIGZvciBzcGVjaWZpZWQgY2hhbm5lbC4KKyAqLwordWludDMyX3QgRVBXTV9HZXRBRENUcmlnZ2VyRmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgcmV0dXJuICgoKGVwd20pLT5TVEFUVVMgJiAoRVBXTV9TVEFUVVNfRUFEQ1RSR0YwX01zayA8PCB1MzJDaGFubmVsTnVtKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgc2VsZWN0ZWQgY2hhbm5lbCB0byB0cmlnZ2VyIERBQworICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIHRyaWdnZXIgREFDLiBDb21iaW5hdGlvbiBvZiBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fVFJJR0dFUl9EQUNfWkVSTworICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUklHR0VSX0RBQ19QRVJJT0QKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fVFJJR0dFUl9EQUNfQ09NUEFSRV9VUAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUklHR0VSX0RBQ19DT01QQVJFX0RPV04KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBzZWxlY3RlZCBjaGFubmVsIHRvIHRyaWdnZXIgREFDLgorICovCit2b2lkIEVQV01fRW5hYmxlREFDVHJpZ2dlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkNvbmRpdGlvbikKK3sKKyAgICAoZXB3bSktPkRBQ1RSR0VOIHw9ICh1MzJDb25kaXRpb24gPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgc2VsZWN0ZWQgY2hhbm5lbCB0byB0cmlnZ2VyIERBQworICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIHNlbGVjdGVkIGNoYW5uZWwgdG8gdHJpZ2dlciBEQUMuCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlREFDVHJpZ2dlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5EQUNUUkdFTiAmPSB+KChFUFdNX1RSSUdHRVJfREFDX1pFUk8gfCBFUFdNX1RSSUdHRVJfREFDX1BFUklPRCB8IEVQV01fVFJJR0dFUl9EQUNfQ09NUEFSRV9VUCB8IEVQV01fVFJJR0dFUl9EQUNfQ09NUEFSRV9ET1dOKSA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgc2VsZWN0ZWQgY2hhbm5lbCB0cmlnZ2VyIERBQyBmbGFnCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkCisgKiBAcGFyYW1baW5dIHUzMkNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIHRyaWdnZXIgREFDLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgc2VsZWN0ZWQgY2hhbm5lbCB0cmlnZ2VyIERBQyBmbGFnLgorICovCit2b2lkIEVQV01fQ2xlYXJEQUNUcmlnZ2VyRmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkNvbmRpdGlvbikKK3sKKyAgICAodm9pZCl1MzJDaGFubmVsTnVtOworICAgICh2b2lkKXUzMkNvbmRpdGlvbjsKKyAgICAoZXB3bSktPlNUQVRVUyA9IEVQV01fU1RBVFVTX0RBQ1RSR0ZfTXNrOworfQorCisvKioKKyAqIEBicmllZiBHZXQgc2VsZWN0ZWQgY2hhbm5lbCB0cmlnZ2VyIERBQyBmbGFnCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkCisgKiBAcmV0dmFsIDAgVGhlIHNwZWNpZmllZCBjaGFubmVsIHRyaWdnZXIgREFDIHRvIHN0YXJ0IG9mIGNvbnZlcnNpb24gZmxhZyBpcyBub3Qgc2V0CisgKiBAcmV0dmFsIDEgVGhlIHNwZWNpZmllZCBjaGFubmVsIHRyaWdnZXIgREFDIHRvIHN0YXJ0IG9mIGNvbnZlcnNpb24gZmxhZyBpcyBzZXQKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgc2VsZWN0ZWQgY2hhbm5lbCB0cmlnZ2VyIERBQyBmbGFnLgorICovCit1aW50MzJfdCBFUFdNX0dldERBQ1RyaWdnZXJGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAodm9pZCl1MzJDaGFubmVsTnVtOworICAgIHJldHVybiAoKChlcHdtKS0+U1RBVFVTICYgRVBXTV9TVEFUVVNfREFDVFJHRl9Nc2spID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBlbmFibGUgZmF1bHQgYnJha2Ugb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsLgorICogQHBhcmFtW2luXSB1MzJMZXZlbE1hc2sgT3V0cHV0IGhpZ2ggb3IgbG93IHdoaWxlIGZhdWx0IGJyYWtlIG9jY3VycywgZWFjaCBiaXQgcmVwcmVzZW50IHRoZSBsZXZlbCBvZiBhIGNoYW5uZWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGZhdWx0IGJyYWtlIG9jY3Vycy4gQml0IDAgcmVwcmVzZW50cyBjaGFubmVsIDAsIGJpdCAxIHJlcHJlc2VudHMgY2hhbm5lbCAxLi4uCisgKiBAcGFyYW1baW5dIHUzMkJyYWtlU291cmNlIEZhdWx0IGJyYWtlIHNvdXJjZSwgY291bGQgYmUgb25lIG9mIGZvbGxvd2luZyBzb3VyY2UKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfRURHRV9BRENSTQorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9FREdFX0FDTVAwCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0VER0VfQUNNUDEKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfRURHRV9CS1AwCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0VER0VfQktQMQorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9FREdFX1NZU19DU1MKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfRURHRV9TWVNfQk9ECisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0VER0VfU1lTX1JBTQorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9FREdFX1NZU19DT1IKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfTEVWRUxfQURDUk0KKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfTEVWRUxfQUNNUDAKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfTEVWRUxfQUNNUDEKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfTEVWRUxfQktQMAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9MRVZFTF9CS1AxCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0xFVkVMX1NZU19DU1MKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfTEVWRUxfU1lTX0JPRAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9MRVZFTF9TWVNfUkFNCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0xFVkVMX1NZU19DT1IKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBmYXVsdCBicmFrZSBvZiBzZWxlY3RlZCBjaGFubmVsKHMpLgorICogICAgICAgICAgVGhlIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIEVQV01fRW5hYmxlRmF1bHRCcmFrZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrLCB1aW50MzJfdCB1MzJMZXZlbE1hc2ssIHVpbnQzMl90IHUzMkJyYWtlU291cmNlKQoreworICAgIHVpbnQzMl90IGk7CisKKyAgICBmb3IoaSA9IDBVTDsgaSA8IEVQV01fQ0hBTk5FTF9OVU07IGkrKykKKyAgICB7CisgICAgICAgIGlmKHUzMkNoYW5uZWxNYXNrICYgKDFVTCA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoKHUzMkJyYWtlU291cmNlID09IEVQV01fRkJfRURHRV9TWVNfQ1NTKSB8fCAodTMyQnJha2VTb3VyY2UgPT0gRVBXTV9GQl9FREdFX1NZU19CT0QpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgKHUzMkJyYWtlU291cmNlID09IEVQV01fRkJfRURHRV9TWVNfUkFNKSB8fCAodTMyQnJha2VTb3VyY2UgPT0gRVBXTV9GQl9FREdFX1NZU19DT1IpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgKHUzMkJyYWtlU291cmNlID09IEVQV01fRkJfTEVWRUxfU1lTX0NTUykgfHwgKHUzMkJyYWtlU291cmNlID09IEVQV01fRkJfTEVWRUxfU1lTX0JPRCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAodTMyQnJha2VTb3VyY2UgPT0gRVBXTV9GQl9MRVZFTF9TWVNfUkFNKSB8fCAodTMyQnJha2VTb3VyY2UgPT0gRVBXTV9GQl9MRVZFTF9TWVNfQ09SKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAoZXB3bSktPkJSS0NUTFtpID4+IDFdIHw9ICh1MzJCcmFrZVNvdXJjZSAmIChFUFdNX0JSS0NUTDBfMV9TWVNFQkVOX01zayB8IEVQV01fQlJLQ1RMMF8xX1NZU0xCRU5fTXNrKSk7CisgICAgICAgICAgICAgICAgKGVwd20pLT5GQUlMQlJLIHw9ICh1MzJCcmFrZVNvdXJjZSAmIDB4RlVMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAoZXB3bSktPkJSS0NUTFtpID4+IDFdIHw9IHUzMkJyYWtlU291cmNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYodTMyTGV2ZWxNYXNrICYgKDFVTCA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoKGkgJiAweDFVTCkgPT0gMFVMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHNldCBicmFrZSBhY3Rpb24gYXMgaGlnaCBsZXZlbCBmb3IgZXZlbiBjaGFubmVsICovCisgICAgICAgICAgICAgICAgKGVwd20pLT5CUktDVExbaSA+PiAxXSAmPSB+RVBXTV9CUktDVEwwXzFfQlJLQUVWRU5fTXNrOworICAgICAgICAgICAgICAgIChlcHdtKS0+QlJLQ1RMW2kgPj4gMV0gfD0gKCgzVUwpIDw8IEVQV01fQlJLQ1RMMF8xX0JSS0FFVkVOX1Bvcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogc2V0IGJyYWtlIGFjdGlvbiBhcyBoaWdoIGxldmVsIGZvciBvZGQgY2hhbm5lbCAqLworICAgICAgICAgICAgICAgIChlcHdtKS0+QlJLQ1RMW2kgPj4gMV0gJj0gfkVQV01fQlJLQ1RMMF8xX0JSS0FPRERfTXNrOworICAgICAgICAgICAgICAgIChlcHdtKS0+QlJLQ1RMW2kgPj4gMV0gfD0gKCgzVUwpIDw8IEVQV01fQlJLQ1RMMF8xX0JSS0FPRERfUG9zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKChpICYgMHgxVUwpID09IDBVTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBzZXQgYnJha2UgYWN0aW9uIGFzIGxvdyBsZXZlbCBmb3IgZXZlbiBjaGFubmVsICovCisgICAgICAgICAgICAgICAgKGVwd20pLT5CUktDVExbaSA+PiAxXSAmPSB+RVBXTV9CUktDVEwwXzFfQlJLQUVWRU5fTXNrOworICAgICAgICAgICAgICAgIChlcHdtKS0+QlJLQ1RMW2kgPj4gMV0gfD0gKCgyVUwpIDw8IEVQV01fQlJLQ1RMMF8xX0JSS0FFVkVOX1Bvcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogc2V0IGJyYWtlIGFjdGlvbiBhcyBsb3cgbGV2ZWwgZm9yIG9kZCBjaGFubmVsICovCisgICAgICAgICAgICAgICAgKGVwd20pLT5CUktDVExbaSA+PiAxXSAmPSB+RVBXTV9CUktDVEwwXzFfQlJLQU9ERF9Nc2s7CisgICAgICAgICAgICAgICAgKGVwd20pLT5CUktDVExbaSA+PiAxXSB8PSAoKDJVTCkgPDwgRVBXTV9CUktDVEwwXzFfQlJLQU9ERF9Qb3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgY2FwdHVyZSBvZiBzZWxlY3RlZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIGlzIGNoYW5uZWwgMCwgYml0IDEgaXMgY2hhbm5lbCAxLi4uCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgY2FwdHVyZSBvZiBzZWxlY3RlZCBjaGFubmVsKHMpLgorICovCit2b2lkIEVQV01fRW5hYmxlQ2FwdHVyZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKQoreworICAgIChlcHdtKS0+Q0FQSU5FTiB8PSB1MzJDaGFubmVsTWFzazsKKyAgICAoZXB3bSktPkNBUENUTCB8PSB1MzJDaGFubmVsTWFzazsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBjYXB0dXJlIG9mIHNlbGVjdGVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgY2hhbm5lbCAwLCBiaXQgMSBpcyBjaGFubmVsIDEuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgY2FwdHVyZSBvZiBzZWxlY3RlZCBjaGFubmVsKHMpLgorICovCit2b2lkIEVQV01fRGlzYWJsZUNhcHR1cmUoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICAoZXB3bSktPkNBUElORU4gJj0gfnUzMkNoYW5uZWxNYXNrOworICAgIChlcHdtKS0+Q0FQQ1RMICY9IH51MzJDaGFubmVsTWFzazsKK30KKworLyoqCisgKiBAYnJpZWYgRW5hYmxlcyBFUFdNIG91dHB1dCBnZW5lcmF0aW9uIG9mIHNlbGVjdGVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IGJpdCAwIHRvIDEgZW5hYmxlcyBjaGFubmVsIDAgb3V0cHV0LCBzZXQgYml0IDEgdG8gMSBlbmFibGVzIGNoYW5uZWwgMSBvdXRwdXQuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBFUFdNIG91dHB1dCBnZW5lcmF0aW9uIG9mIHNlbGVjdGVkIGNoYW5uZWwocykuCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVPdXRwdXQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICAoZXB3bSktPlBPRU4gfD0gdTMyQ2hhbm5lbE1hc2s7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGVzIEVQV00gb3V0cHV0IGdlbmVyYXRpb24gb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCBiaXQgMCB0byAxIGRpc2FibGVzIGNoYW5uZWwgMCBvdXRwdXQsIHNldCBiaXQgMSB0byAxIGRpc2FibGVzIGNoYW5uZWwgMSBvdXRwdXQuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgRVBXTSBvdXRwdXQgZ2VuZXJhdGlvbiBvZiBzZWxlY3RlZCBjaGFubmVsKHMpLgorICovCit2b2lkIEVQV01fRGlzYWJsZU91dHB1dChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKQoreworICAgIChlcHdtKS0+UE9FTiAmPSB+dTMyQ2hhbm5lbE1hc2s7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZXMgUERNQSB0cmFuc2ZlciBvZiBzZWxlY3RlZCBjaGFubmVsIGZvciBFUFdNIGNhcHR1cmUKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4KKyAqIEBwYXJhbVtpbl0gdTMyUmlzaW5nRmlyc3QgVGhlIGNhcHR1cmUgb3JkZXIgaXMgcmlzaW5nLCBmYWxsaW5nIGZpcnN0LiBFdmVyeSB0d28gY2hhbm5lbHMgc2hhcmUgdGhlIHNhbWUgc2V0dGluZy4gVmFsaWQgdmFsdWVzIGFyZSBUUlVFIGFuZCBGQUxTRS4KKyAqIEBwYXJhbVtpbl0gdTMyTW9kZSBDYXB0dXJlZCBkYXRhIHRyYW5zZmVycmVkIGJ5IFBETUEgaW50ZXJydXB0IHR5cGUuIEl0IGNvdWxkIGJlIGVpdGhlcgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0NBUFRVUkVfUERNQV9SSVNJTkdfTEFUQ0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9DQVBUVVJFX1BETUFfRkFMTElOR19MQVRDSAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0NBUFRVUkVfUERNQV9SSVNJTkdfRkFMTElOR19MQVRDSAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIFBETUEgdHJhbnNmZXIgb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKSBmb3IgRVBXTSBjYXB0dXJlLgorIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgc2VsZWN0cyBldmVuIG9yIG9kZCBjaGFubmVsIG9mIHBhaXJzIHRvIGRvIFBETUEgdHJhbnNmZXIuCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVQRE1BKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyUmlzaW5nRmlyc3QsIHVpbnQzMl90IHUzMk1vZGUpCit7CisgICAgdWludDMyX3QgdTMySXNPZGRDaDsKKyAgICB1MzJJc09kZENoID0gdTMyQ2hhbm5lbE51bSAmIDB4MVVMOworICAgIChlcHdtKS0+UERNQUNUTCA9ICgoZXB3bSktPlBETUFDVEwgJiB+KChFUFdNX1BETUFDVExfQ0hTRUwwXzFfTXNrIHwgRVBXTV9QRE1BQ1RMX0NBUE9SRDBfMV9Nc2sgfCBFUFdNX1BETUFDVExfQ0FQTU9EMF8xX01zaykgPDwgKCh1MzJDaGFubmVsTnVtID4+IDEpIDw8IDMpKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgodTMySXNPZGRDaCA8PCBFUFdNX1BETUFDVExfQ0hTRUwwXzFfUG9zKSB8ICh1MzJSaXNpbmdGaXJzdCA8PCBFUFdNX1BETUFDVExfQ0FQT1JEMF8xX1BvcykgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICB1MzJNb2RlIHwgRVBXTV9QRE1BQ1RMX0NIRU4wXzFfTXNrKSA8PCAoKHUzMkNoYW5uZWxOdW0gPj4gMSkgPDwgMykpOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlcyBQRE1BIHRyYW5zZmVyIG9mIHNlbGVjdGVkIGNoYW5uZWwgZm9yIEVQV00gY2FwdHVyZQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIFBETUEgdHJhbnNmZXIgb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKSBmb3IgRVBXTSBjYXB0dXJlLgorICovCit2b2lkIEVQV01fRGlzYWJsZVBETUEoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIChlcHdtKS0+UERNQUNUTCAmPSB+KEVQV01fUERNQUNUTF9DSEVOMF8xX01zayA8PCAoKHUzMkNoYW5uZWxOdW0gPj4gMSkgPDwgMykpOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgRGVhZCB6b25lIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJEdXJhdGlvbiBEZWFkIHpvbmUgbGVuZ3RoIGluIEVQV00gY2xvY2sgY291bnQsIHZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjB4RkZGLCBidXQgMCBtZWFucyB0aGVyZSBpcyBubyBEZWFkIHpvbmUuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgRGVhZCB6b25lIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKiAgICAgICAgICBUaGUgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgRXZlcnkgdHdvIGNoYW5uZWxzIHNoYXJlIHRoZSBzYW1lIHNldHRpbmcuCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVEZWFkWm9uZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkR1cmF0aW9uKQoreworICAgIC8qIGV2ZXJ5IHR3byBjaGFubmVscyBzaGFyZSB0aGUgc2FtZSBzZXR0aW5nICovCisgICAgKGVwd20pLT5EVENUTFsodTMyQ2hhbm5lbE51bSkgPj4gMV0gJj0gfkVQV01fRFRDVEwwXzFfRFRDTlRfTXNrOworICAgIChlcHdtKS0+RFRDVExbKHUzMkNoYW5uZWxOdW0pID4+IDFdIHw9IEVQV01fRFRDVEwwXzFfRFRFTl9Nc2sgfCB1MzJEdXJhdGlvbjsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBEZWFkIHpvbmUgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIERlYWQgem9uZSBvZiBzZWxlY3RlZCBjaGFubmVsLgorICogICAgICAgICAgVGhlIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIEVQV01fRGlzYWJsZURlYWRab25lKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAvKiBldmVyeSB0d28gY2hhbm5lbHMgc2hhcmVzIHRoZSBzYW1lIHNldHRpbmcgKi8KKyAgICAoZXB3bSktPkRUQ1RMWyh1MzJDaGFubmVsTnVtKSA+PiAxXSAmPSB+RVBXTV9EVENUTDBfMV9EVEVOX01zazsKK30KKworLyoqCisgKiBAYnJpZWYgRW5hYmxlIGNhcHR1cmUgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyRWRnZSBSaXNpbmcgb3IgZmFsbGluZyBlZGdlIHRvIGxhdGNoIGNvdW50ZXIuCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0FQVFVSRV9JTlRfUklTSU5HX0xBVENICisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0FQVFVSRV9JTlRfRkFMTElOR19MQVRDSAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIGNhcHR1cmUgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVDYXB0dXJlSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyRWRnZSkKK3sKKyAgICAoZXB3bSktPkNBUElFTiB8PSAodTMyRWRnZSA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBjYXB0dXJlIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkVkZ2UgUmlzaW5nIG9yIGZhbGxpbmcgZWRnZSB0byBsYXRjaCBjb3VudGVyLgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0NBUFRVUkVfSU5UX1JJU0lOR19MQVRDSAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0NBUFRVUkVfSU5UX0ZBTExJTkdfTEFUQ0gKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0Rpc2FibGVDYXB0dXJlSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyRWRnZSkKK3sKKyAgICAoZXB3bSktPkNBUElFTiAmPSB+KHUzMkVkZ2UgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIENsZWFyIGNhcHR1cmUgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyRWRnZSBSaXNpbmcgb3IgZmFsbGluZyBlZGdlIHRvIGxhdGNoIGNvdW50ZXIuCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0FQVFVSRV9JTlRfUklTSU5HX0xBVENICisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0FQVFVSRV9JTlRfRkFMTElOR19MQVRDSAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0NsZWFyQ2FwdHVyZUludEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJFZGdlKQoreworICAgIChlcHdtKS0+Q0FQSUYgPSAodTMyRWRnZSA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgR2V0IGNhcHR1cmUgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR2YWwgMCBObyBjYXB0dXJlIGludGVycnVwdAorICogQHJldHZhbCAxIFJpc2luZyBlZGdlIGxhdGNoIGludGVycnVwdAorICogQHJldHZhbCAyIEZhbGxpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQKKyAqIEByZXR2YWwgMyBSaXNpbmcgYW5kIGZhbGxpbmcgbGF0Y2ggaW50ZXJydXB0CisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGNhcHR1cmUgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3VpbnQzMl90IEVQV01fR2V0Q2FwdHVyZUludEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIHVpbnQzMl90IHUzMkNhcElmID0gMFVMOworCisgICAgdTMyQ2FwSWYgPSAoKCgoZXB3bSktPkNBUElGICYgKEVQV01fQ0FQSUZfQ0ZMSUYwX01zayA8PCB1MzJDaGFubmVsTnVtKSkgPyAxVUwgOiAwVUwpIDw8IDEpOworICAgIHUzMkNhcElmIHw9ICgoKGVwd20pLT5DQVBJRiAmIChFUFdNX0NBUElGX0NSTElGMF9Nc2sgPDwgdTMyQ2hhbm5lbE51bSkpID8gMVVMIDogMFVMKTsKKyAgICByZXR1cm4gdTMyQ2FwSWY7Cit9CisvKioKKyAqIEBicmllZiBFbmFibGUgZHV0eSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkludER1dHlUeXBlIER1dHkgaW50ZXJydXB0IHR5cGUsIGNvdWxkIGJlIGVpdGhlcgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0RVVFlfSU5UX0RPV05fQ09VTlRfTUFUQ0hfQ01QCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fRFVUWV9JTlRfVVBfQ09VTlRfTUFUQ0hfQ01QCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgZHV0eSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0VuYWJsZUR1dHlJbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJJbnREdXR5VHlwZSkKK3sKKyAgICAoZXB3bSktPklOVEVOMCB8PSAodTMySW50RHV0eVR5cGUgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgZHV0eSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGR1dHkgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlRHV0eUludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5JTlRFTjAgJj0gfigoRVBXTV9EVVRZX0lOVF9ET1dOX0NPVU5UX01BVENIX0NNUCB8IEVQV01fRFVUWV9JTlRfVVBfQ09VTlRfTUFUQ0hfQ01QKSA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgZHV0eSBpbnRlcnJ1cHQgZmxhZyBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIGR1dHkgaW50ZXJydXB0IGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0NsZWFyRHV0eUludEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIChlcHdtKS0+SU5UU1RTMCA9IChFUFdNX0lOVFNUUzBfQ01QVUlGMF9Nc2sgfCBFUFdNX0lOVFNUUzBfQ01QRElGMF9Nc2spIDw8IHUzMkNoYW5uZWxOdW07Cit9CisKKy8qKgorICogQGJyaWVmIEdldCBkdXR5IGludGVycnVwdCBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBEdXR5IGludGVycnVwdCBmbGFnIG9mIHNwZWNpZmllZCBjaGFubmVsCisgKiBAcmV0dmFsIDAgRHV0eSBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICogQHJldHZhbCAxIER1dHkgaW50ZXJydXB0IG9jY3VycmVkCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGR1dHkgaW50ZXJydXB0IGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordWludDMyX3QgRVBXTV9HZXREdXR5SW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgcmV0dXJuICgoKChlcHdtKS0+SU5UU1RTMCAmICgoRVBXTV9JTlRTVFMwX0NNUERJRjBfTXNrIHwgRVBXTV9JTlRTVFMwX0NNUFVJRjBfTXNrKSA8PCB1MzJDaGFubmVsTnVtKSkpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBlbmFibGUgZmF1bHQgYnJha2UgaW50ZXJydXB0CisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJCcmFrZVNvdXJjZSBGYXVsdCBicmFrZSBzb3VyY2UuCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfRURHRQorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0xFVkVMCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgZmF1bHQgYnJha2UgaW50ZXJydXB0LgorICogICAgICAgICAgVGhlIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorIEV2ZXJ5IHR3byBjaGFubmVscyBzaGFyZSB0aGUgc2FtZSBzZXR0aW5nLgorICovCit2b2lkIEVQV01fRW5hYmxlRmF1bHRCcmFrZUludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlU291cmNlKQoreworICAgIChlcHdtKS0+SU5URU4xIHw9ICgweDdVTCA8PCB1MzJCcmFrZVNvdXJjZSk7Cit9CisKKy8qKgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gZGlzYWJsZSBmYXVsdCBicmFrZSBpbnRlcnJ1cHQKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkJyYWtlU291cmNlIEZhdWx0IGJyYWtlIHNvdXJjZS4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9FREdFCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfTEVWRUwKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgZmF1bHQgYnJha2UgaW50ZXJydXB0LgorICogICAgICAgICAgVGhlIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorIEV2ZXJ5IHR3byBjaGFubmVscyBzaGFyZSB0aGUgc2FtZSBzZXR0aW5nLgorICovCit2b2lkIEVQV01fRGlzYWJsZUZhdWx0QnJha2VJbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJCcmFrZVNvdXJjZSkKK3sKKyAgICAoZXB3bSktPklOVEVOMSAmPSB+KDB4N1VMIDw8IHUzMkJyYWtlU291cmNlKTsKK30KKworLyoqCisgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBjbGVhciBmYXVsdCBicmFrZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgc291cmNlCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJCcmFrZVNvdXJjZSBGYXVsdCBicmFrZSBzb3VyY2UuCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfRURHRQorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0xFVkVMCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBmYXVsdCBicmFrZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgc291cmNlLgorICogICAgICAgICAgVGhlIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIEVQV01fQ2xlYXJGYXVsdEJyYWtlSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlU291cmNlKQoreworICAgIChlcHdtKS0+SU5UU1RTMSA9ICgweDNmVUwgPDwgdTMyQnJha2VTb3VyY2UpOworfQorCisvKioKKyAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGdldCBmYXVsdCBicmFrZSBpbnRlcnJ1cHQgZmxhZyBvZiBzZWxlY3RlZCBzb3VyY2UKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkJyYWtlU291cmNlIEZhdWx0IGJyYWtlIHNvdXJjZSwgY291bGQgYmUgZWl0aGVyCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfRURHRQorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0xFVkVMCisgKiBAcmV0dXJuIEZhdWx0IGJyYWtlIGludGVycnVwdCBmbGFnIG9mIHNwZWNpZmllZCBzb3VyY2UKKyAqIEByZXR2YWwgMCBGYXVsdCBicmFrZSBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cnJlZAorICogQHJldHZhbCAxIEZhdWx0IGJyYWtlIGludGVycnVwdCBvY2N1cnJlZAorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBmYXVsdCBicmFrZSBpbnRlcnJ1cHQgZmxhZyBvZiBzZWxlY3RlZCBzb3VyY2UuCisgKi8KK3VpbnQzMl90IEVQV01fR2V0RmF1bHRCcmFrZUludEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJCcmFrZVNvdXJjZSkKK3sKKyAgICByZXR1cm4gKCgoZXB3bSktPklOVFNUUzEgJiAoMHgzZlVMIDw8IHUzMkJyYWtlU291cmNlKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgcGVyaW9kIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMySW50UGVyaW9kVHlwZSBQZXJpb2QgaW50ZXJydXB0IHR5cGUuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHBlcmlvZCBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0VuYWJsZVBlcmlvZEludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sICB1aW50MzJfdCB1MzJJbnRQZXJpb2RUeXBlKQoreworICAgICh2b2lkKXUzMkludFBlcmlvZFR5cGU7CisgICAgKGVwd20pLT5JTlRFTjAgfD0gKEVQV01fSU5URU4wX1BJRU4wX01zayA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBwZXJpb2QgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBwZXJpb2QgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlUGVyaW9kSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAoZXB3bSktPklOVEVOMCAmPSB+KEVQV01fSU5URU4wX1BJRU4wX01zayA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgcGVyaW9kIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIHBlcmlvZCBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0NsZWFyUGVyaW9kSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5JTlRTVFMwID0gKEVQV01fSU5UU1RTMF9QSUYwX01zayA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgR2V0IHBlcmlvZCBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIFBlcmlvZCBpbnRlcnJ1cHQgZmxhZyBvZiBzcGVjaWZpZWQgY2hhbm5lbAorICogQHJldHZhbCAwIFBlcmlvZCBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICogQHJldHZhbCAxIFBlcmlvZCBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgcGVyaW9kIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit1aW50MzJfdCBFUFdNX0dldFBlcmlvZEludEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIHJldHVybiAoKCgoZXB3bSktPklOVFNUUzAgJiAoRVBXTV9JTlRTVFMwX1BJRjBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgemVybyBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgemVybyBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0VuYWJsZVplcm9JbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIChlcHdtKS0+SU5URU4wIHw9IChFUFdNX0lOVEVOMF9aSUVOMF9Nc2sgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgemVybyBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIHplcm8gaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlWmVyb0ludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5JTlRFTjAgJj0gfihFUFdNX0lOVEVOMF9aSUVOMF9Nc2sgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIENsZWFyIHplcm8gaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgemVybyBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0NsZWFyWmVyb0ludEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIChlcHdtKS0+SU5UU1RTMCA9IChFUFdNX0lOVFNUUzBfWklGMF9Nc2sgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIEdldCB6ZXJvIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gWmVybyBpbnRlcnJ1cHQgZmxhZyBvZiBzcGVjaWZpZWQgY2hhbm5lbAorICogQHJldHZhbCAwIFplcm8gaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAqIEByZXR2YWwgMSBaZXJvIGludGVycnVwdCBvY2N1cnJlZAorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB6ZXJvIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit1aW50MzJfdCBFUFdNX0dldFplcm9JbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICByZXR1cm4gKCgoKGVwd20pLT5JTlRTVFMwICYgKEVQV01fSU5UU1RTMF9aSUYwX01zayA8PCB1MzJDaGFubmVsTnVtKSkpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgKiBAYnJpZWYgRW5hYmxlIGludGVycnVwdCBmbGFnIGFjY3VtdWxhdG9yIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJJbnRGbGFnQ250IEludGVycnVwdCBmbGFnIGNvdW50ZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjY1NTM1LgorICogQHBhcmFtW2luXSB1MzJJbnRBY2NTcmMgSW50ZXJydXB0IGZsYWcgYWNjdW11bGF0b3Igc291cmNlIHNlbGVjdGlvbi4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9JRkFfWkVST19QT0lOVAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0lGQV9QRVJJT0RfUE9JTlQKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9JRkFfQ09NUEFSRV9VUF9DT1VOVF9QT0lOVAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0lGQV9DT01QQVJFX0RPV05fQ09VTlRfUE9JTlQKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBpbnRlcnJ1cHQgZmxhZyBhY2N1bXVsYXRvciBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fRW5hYmxlQWNjKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMySW50RmxhZ0NudCwgdWludDMyX3QgdTMySW50QWNjU3JjKQoreworICAgIChlcHdtKS0+SUZBW3UzMkNoYW5uZWxOdW1dID0gKCgoZXB3bSktPklGQVt1MzJDaGFubmVsTnVtXSAmIH4oKEVQV01fSUZBMF9JRkFDTlRfTXNrIHwgRVBXTV9JRkEwX0lGQVNFTF9Nc2spKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVQV01fSUZBMF9JRkFFTl9Nc2sgfCAodTMySW50QWNjU3JjIDw8IEVQV01fSUZBMF9JRkFTRUxfUG9zKSB8IHUzMkludEZsYWdDbnQpKTsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBpbnRlcnJ1cHQgZmxhZyBhY2N1bXVsYXRvciBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIERpc2FibGUgaW50ZXJydXB0IGZsYWcgYWNjdW11bGF0b3Igb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0Rpc2FibGVBY2MoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIChlcHdtKS0+SUZBW3UzMkNoYW5uZWxOdW1dID0gKChlcHdtKS0+SUZBW3UzMkNoYW5uZWxOdW1dICYgfihFUFdNX0lGQTBfSUZBRU5fTXNrKSk7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBpbnRlcnJ1cHQgZmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgaW50ZXJydXB0IGZsYWcgYWNjdW11bGF0b3IgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVBY2NJbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIChlcHdtKS0+QUlOVEVOIHw9ICgxVUwgPDwgKHUzMkNoYW5uZWxOdW0pKTsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBpbnRlcnJ1cHQgZmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGludGVycnVwdCBmbGFnIGFjY3VtdWxhdG9yIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fRGlzYWJsZUFjY0ludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5BSU5URU4gJj0gfigxVUwgPDwgKHUzMkNoYW5uZWxOdW0pKTsKK30KKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgaW50ZXJydXB0IGZsYWcgYWNjdW11bGF0b3IgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgaW50ZXJydXB0IGZsYWcgYWNjdW11bGF0b3IgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgRVBXTV9DbGVhckFjY0ludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5BSU5UU1RTID0gKDFVTCA8PCAodTMyQ2hhbm5lbE51bSkpOworfQorCisvKioKKyAqIEBicmllZiBHZXQgaW50ZXJydXB0IGZsYWcgYWNjdW11bGF0b3IgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHZhbCAwIEFjY3VtdWxhdG9yIGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgKiBAcmV0dmFsIDEgQWNjdW11bGF0b3IgaW50ZXJydXB0IG9jY3VycmVkCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gR2V0IGludGVycnVwdCBmbGFnIGFjY3VtdWxhdG9yIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit1aW50MzJfdCBFUFdNX0dldEFjY0ludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgcmV0dXJuICgoKGVwd20pLT5BSU5UU1RTICYgKDFVTCA8PCAodTMyQ2hhbm5lbE51bSkpKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBhY2N1bXVsYXRvciBQRE1BIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIGFjY3VtdWxhdG9yIGludGVycnVwdCB0cmlnZ2VyIFBETUEgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0VuYWJsZUFjY1BETUEoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIChlcHdtKS0+QVBETUFDVEwgfD0gKDFVTCA8PCAodTMyQ2hhbm5lbE51bSkpOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIGFjY3VtdWxhdG9yIFBETUEgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGFjY3VtdWxhdG9yIGludGVycnVwdCB0cmlnZ2VyIFBETUEgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0Rpc2FibGVBY2NQRE1BKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAoZXB3bSktPkFQRE1BQ1RMICY9IH4oMVVMIDw8ICh1MzJDaGFubmVsTnVtKSk7Cit9CisKKy8qKgorICogQGJyaWVmIENsZWFyIGZyZWUgdHJpZ2dlciBkdXR5IGludGVycnVwdCBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgZnJlZSB0cmlnZ2VyIGR1dHkgaW50ZXJydXB0IGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0NsZWFyRlREdXR5SW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5GVENJID0gKChFUFdNX0ZUQ0lfRlRDTVUwX01zayB8IEVQV01fRlRDSV9GVENNRDBfTXNrKSA8PCAodTMyQ2hhbm5lbE51bSA+PiAxKSk7Cit9CisKKy8qKgorICogQGJyaWVmIEdldCBmcmVlIHRyaWdnZXIgZHV0eSBpbnRlcnJ1cHQgZmxhZyBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gRHV0eSBpbnRlcnJ1cHQgZmxhZyBvZiBzcGVjaWZpZWQgY2hhbm5lbAorICogQHJldHZhbCAwIEZyZWUgdHJpZ2dlciBkdXR5IGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgKiBAcmV0dmFsIDEgRnJlZSB0cmlnZ2VyIGR1dHkgaW50ZXJydXB0IG9jY3VycmVkCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGZyZWUgdHJpZ2dlciBkdXR5IGludGVycnVwdCBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3VpbnQzMl90IEVQV01fR2V0RlREdXR5SW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgcmV0dXJuICgoKGVwd20pLT5GVENJICYgKChFUFdNX0ZUQ0lfRlRDTVUwX01zayB8IEVQV01fRlRDSV9GVENNRDBfTXNrKSA8PCAodTMyQ2hhbm5lbE51bSA+PiAxKSkpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgKiBAYnJpZWYgRW5hYmxlIGxvYWQgbW9kZSBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyTG9hZE1vZGUgRVBXTSBjb3VudGVyIGxvYWRpbmcgbW9kZS4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9MT0FEX01PREVfSU1NRURJQVRFCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTE9BRF9NT0RFX1dJTkRPVworICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xPQURfTU9ERV9DRU5URVIKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBsb2FkIG1vZGUgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0VuYWJsZUxvYWRNb2RlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyTG9hZE1vZGUpCit7CisgICAgKGVwd20pLT5DVEwwIHw9ICh1MzJMb2FkTW9kZSA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBsb2FkIG1vZGUgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkxvYWRNb2RlIEVQV00gY291bnRlciBsb2FkaW5nIG1vZGUuCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTE9BRF9NT0RFX0lNTUVESUFURQorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xPQURfTU9ERV9XSU5ET1cKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9MT0FEX01PREVfQ0VOVEVSCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGxvYWQgbW9kZSBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fRGlzYWJsZUxvYWRNb2RlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyTG9hZE1vZGUpCit7CisgICAgKGVwd20pLT5DVEwwICY9IH4odTMyTG9hZE1vZGUgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIENvbmZpZ3VyZSBzeW5jaHJvbml6YXRpb24gcGhhc2Ugb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMlN5bmNTcmMgRVBXTSBzeW5jaHJvbml6ZSBzb3VyY2Ugc2VsZWN0aW9uLgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1NZTkNfT1VUX0ZST01fU1lOQ0lOX1NXU1lOQworICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1NZTkNfT1VUX0ZST01fQ09VTlRfVE9fWkVSTworICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1NZTkNfT1VUX0ZST01fQ09VTlRfVE9fQ09NUEFSQVRPUgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1NZTkNfT1VUX0RJU0FCTEUKKyAqIEBwYXJhbVtpbl0gdTMyRGlyZWN0aW9uIFBoYXNlIGRpcmVjdGlvbi4gQ29udHJvbCBFUFdNIGNvdW50ZXIgY291bnQgZGVjcmVtZW50IG9yIGluY3JlbWVudCAgYWZ0ZXIgc3luY2hyb25pemluZy4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9QSFNfRElSX0RFQ1JFTUVOVAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1BIU19ESVJfSU5DUkVNRU5UCisgKiBAcGFyYW1baW5dIHUzMlN0YXJ0UGhhc2UgU3luY2hyb25vdXMgc3RhcnQgcGhhc2UgdmFsdWUuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjY1NTM1LgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29uZmlndXJlIHN5bmNocm9uaXphdGlvbiBwaGFzZSBvZiBzZWxlY3RlZCBjaGFubmVsLgorIEV2ZXJ5IHR3byBjaGFubmVscyBzaGFyZSB0aGUgc2FtZSBzZXR0aW5nLgorICovCit2b2lkIEVQV01fQ29uZmlnU3luY1BoYXNlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyU3luY1NyYywgdWludDMyX3QgdTMyRGlyZWN0aW9uLCB1aW50MzJfdCB1MzJTdGFydFBoYXNlKQoreworICAgIC8qIGV2ZXJ5IHR3byBjaGFubmVscyBzaGFyZXMgdGhlIHNhbWUgc2V0dGluZyAqLworICAgIHUzMkNoYW5uZWxOdW0gPj49IDE7CisgICAgKGVwd20pLT5TWU5DID0gKCgoZXB3bSktPlNZTkMgJiB+KChFUFdNX1NZTkNfU0lOU1JDMF9Nc2sgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMSkpIHwgKEVQV01fU1lOQ19QSFNESVIwX01zayA8PCB1MzJDaGFubmVsTnVtKSkpIHwgXAorICAgICAgICAgICAgICAgICAgICAodTMyRGlyZWN0aW9uIDw8IEVQV01fU1lOQ19QSFNESVIwX1BvcyA8PCB1MzJDaGFubmVsTnVtKSB8ICh1MzJTeW5jU3JjIDw8IEVQV01fU1lOQ19TSU5TUkMwX1BvcykgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMSkpOworICAgIChlcHdtKS0+UEhTWyh1MzJDaGFubmVsTnVtKV0gPSB1MzJTdGFydFBoYXNlOworfQorCisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBTWU5DIHBoYXNlIG9mIHNlbGVjdGVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgY2hhbm5lbCAwLCBiaXQgMSBpcyBjaGFubmVsIDEuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBTWU5DIHBoYXNlIG9mIHNlbGVjdGVkIGNoYW5uZWwocykuCisgRXZlcnkgdHdvIGNoYW5uZWxzIHNoYXJlIHRoZSBzYW1lIHNldHRpbmcuCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVTeW5jUGhhc2UoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICB1aW50MzJfdCBpOworICAgIGZvcihpID0gMFVMOyBpIDwgRVBXTV9DSEFOTkVMX05VTTsgaSArKykKKyAgICB7CisgICAgICAgIGlmKHUzMkNoYW5uZWxNYXNrICYgKDFVTCA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgKGVwd20pLT5TWU5DIHw9IChFUFdNX1NZTkNfUEhTRU4wX01zayA8PCAoaSA+PiAxKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgU1lOQyBwaGFzZSBvZiBzZWxlY3RlZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIGlzIGNoYW5uZWwgMCwgYml0IDEgaXMgY2hhbm5lbCAxLi4uCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIFNZTkMgcGhhc2Ugb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKS4KKyBFdmVyeSB0d28gY2hhbm5lbHMgc2hhcmUgdGhlIHNhbWUgc2V0dGluZy4KKyAqLwordm9pZCBFUFdNX0Rpc2FibGVTeW5jUGhhc2UoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICB1aW50MzJfdCBpOworICAgIGZvcihpID0gMFVMOyBpIDwgRVBXTV9DSEFOTkVMX05VTTsgaSArKykKKyAgICB7CisgICAgICAgIGlmKHUzMkNoYW5uZWxNYXNrICYgKDFVTCA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgKGVwd20pLT5TWU5DICY9IH4oRVBXTV9TWU5DX1BIU0VOMF9Nc2sgPDwgKGkgPj4gMSkpOworICAgICAgICB9CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgRVBXTSBTWU5DX0lOIG5vaXNlIGZpbHRlciBmdW5jdGlvbgorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2xrQ250IFNZTkMgRWRnZSBEZXRlY3RvciBGaWx0ZXIgQ291bnQuIFRoaXMgY29udHJvbHMgdGhlIGNvdW50ZXIgbnVtYmVyIG9mIGVkZ2UgZGV0ZWN0b3IuCisgKiAgICAgICAgICAgIFRoZSB2YWxpZCB2YWx1ZSBpcyAwfjcuCisgKiBAcGFyYW1baW5dIHUzMkNsa0RpdlNlbCBTWU5DIEVkZ2UgRGV0ZWN0b3IgRmlsdGVyIENsb2NrIFNlbGVjdGlvbi4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzEKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzIKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzQKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzgKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzE2CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTkZfQ0xLX0RJVl8zMgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX05GX0NMS19ESVZfNjQKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzEyOAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIEVQV00gU1lOQ19JTiBub2lzZSBmaWx0ZXIgZnVuY3Rpb24uCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVTeW5jTm9pc2VGaWx0ZXIoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDbGtDbnQsIHVpbnQzMl90IHUzMkNsa0RpdlNlbCkKK3sKKyAgICAoZXB3bSktPlNZTkMgPSAoKGVwd20pLT5TWU5DICYgfihFUFdNX1NZTkNfU0ZMVENOVF9Nc2sgfCBFUFdNX1NZTkNfU0ZMVENTRUxfTXNrKSkgfCBcCisgICAgICAgICAgICAgICAgICAgKCh1MzJDbGtDbnQgPDwgRVBXTV9TWU5DX1NGTFRDTlRfUG9zKSB8ICh1MzJDbGtEaXZTZWwgPDwgRVBXTV9TWU5DX1NGTFRDU0VMX1BvcykgfCBFUFdNX1NZTkNfU05GTFRFTl9Nc2spOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIEVQV00gU1lOQ19JTiBub2lzZSBmaWx0ZXIgZnVuY3Rpb24KKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBEaXNhYmxlIEVQV00gU1lOQ19JTiBub2lzZSBmaWx0ZXIgZnVuY3Rpb24uCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlU3luY05vaXNlRmlsdGVyKEVQV01fVCAqZXB3bSkKK3sKKyAgICAoZXB3bSktPlNZTkMgJj0gfkVQV01fU1lOQ19TTkZMVEVOX01zazsKK30KKworLyoqCisgKiBAYnJpZWYgRW5hYmxlIEVQV00gU1lOQyBpbnB1dCBwaW4gaW52ZXJzZSBmdW5jdGlvbgorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBFUFdNIFNZTkMgaW5wdXQgcGluIGludmVyc2UgZnVuY3Rpb24uCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVTeW5jUGluSW52ZXJzZShFUFdNX1QgKmVwd20pCit7CisgICAgKGVwd20pLT5TWU5DIHw9IEVQV01fU1lOQ19TSU5QSU5WX01zazsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBFUFdNIFNZTkMgaW5wdXQgcGluIGludmVyc2UgZnVuY3Rpb24KKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBEaXNhYmxlIEVQV00gU1lOQyBpbnB1dCBwaW4gaW52ZXJzZSBmdW5jdGlvbi4KKyAqLwordm9pZCBFUFdNX0Rpc2FibGVTeW5jUGluSW52ZXJzZShFUFdNX1QgKmVwd20pCit7CisgICAgKGVwd20pLT5TWU5DICY9ICh+RVBXTV9TWU5DX1NJTlBJTlZfTXNrKTsKK30KKworLyoqCisgKiBAYnJpZWYgU2V0IEVQV00gY2xvY2sgc291cmNlCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyQ2xrU3JjU2VsIEVQV00gZXh0ZXJuYWwgY2xvY2sgc291cmNlLgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0NMS1NSQ19FUFdNX0NMSworICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0NMS1NSQ19USU1FUjAKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9DTEtTUkNfVElNRVIxCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0xLU1JDX1RJTUVSMgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0NMS1NSQ19USU1FUjMKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBFUFdNIGNsb2NrIHNvdXJjZS4KKyBFdmVyeSB0d28gY2hhbm5lbHMgc2hhcmUgdGhlIHNhbWUgc2V0dGluZy4KKyBJZiB0aGUgY2xvY2sgc291cmNlIG9mIEVQV00gY291bnRlciBpcyBzZWxlY3RlZCBmcm9tIFRJTUVSbiBpbnRlcnJ1cHQgZXZlbnRzLCB0aGUgVFJHRVBXTShUSU1FUm5fVFJHQ1RMWzFdLCBuPTAsMS4uMykgYml0IG11c3QgYmUgc2V0IGFzIDEuCisgKi8KK3ZvaWQgRVBXTV9TZXRDbG9ja1NvdXJjZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkNsa1NyY1NlbCkKK3sKKyAgICAoZXB3bSktPkNMS1NSQyA9ICgoZXB3bSktPkNMS1NSQyAmIH4oRVBXTV9DTEtTUkNfRUNMS1NSQzBfTXNrIDw8ICgodTMyQ2hhbm5lbE51bSA+PiAxKSA8PCAzKSkpIHwgXAorICAgICAgICAgICAgICAgICAgICAgKHUzMkNsa1NyY1NlbCA8PCAoKHUzMkNoYW5uZWxOdW0gPj4gMSkgPDwgMykpOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgRVBXTSBicmFrZSBub2lzZSBmaWx0ZXIgZnVuY3Rpb24KKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkJyYWtlUGluTnVtIEJyYWtlIHBpbiBzZWxlY3Rpb24uIFZhbGlkIHZhbHVlcyBhcmUgMCBvciAxLgorICogQHBhcmFtW2luXSB1MzJDbGtDbnQgU1lOQyBFZGdlIERldGVjdG9yIEZpbHRlciBDb3VudC4gVGhpcyBjb250cm9scyB0aGUgY291bnRlciBudW1iZXIgb2YgZWRnZSBkZXRlY3RvcgorICogQHBhcmFtW2luXSB1MzJDbGtEaXZTZWwgU1lOQyBFZGdlIERldGVjdG9yIEZpbHRlciBDbG9jayBTZWxlY3Rpb24uCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTkZfQ0xLX0RJVl8xCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTkZfQ0xLX0RJVl8yCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTkZfQ0xLX0RJVl80CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTkZfQ0xLX0RJVl84CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTkZfQ0xLX0RJVl8xNgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX05GX0NMS19ESVZfMzIKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzY0CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTkZfQ0xLX0RJVl8xMjgKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBFUFdNIGJyYWtlIG5vaXNlIGZpbHRlciBmdW5jdGlvbi4KKyAqLwordm9pZCBFUFdNX0VuYWJsZUJyYWtlTm9pc2VGaWx0ZXIoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJCcmFrZVBpbk51bSwgdWludDMyX3QgdTMyQ2xrQ250LCB1aW50MzJfdCB1MzJDbGtEaXZTZWwpCit7CisgICAgKGVwd20pLT5CTkYgPSAoKGVwd20pLT5CTkYgJiB+KChFUFdNX0JORl9CUkswRkNOVF9Nc2sgfCBFUFdNX0JORl9CUkswTkZTRUxfTXNrKSA8PCAodTMyQnJha2VQaW5OdW0gPDwgMykpKSB8IFwKKyAgICAgICAgICAgICAgICAgICgoKHUzMkNsa0NudCA8PCBFUFdNX0JORl9CUkswRkNOVF9Qb3MpIHwgKHUzMkNsa0RpdlNlbCA8PCBFUFdNX0JORl9CUkswTkZTRUxfUG9zKSB8IEVQV01fQk5GX0JSSzBORkVOX01zaykgPDwgKHUzMkJyYWtlUGluTnVtIDw8IDMpKTsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBFUFdNIGJyYWtlIG5vaXNlIGZpbHRlciBmdW5jdGlvbgorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQnJha2VQaW5OdW0gQnJha2UgcGluIHNlbGVjdGlvbi4gVmFsaWQgdmFsdWVzIGFyZSAwIG9yIDEuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIEVQV00gYnJha2Ugbm9pc2UgZmlsdGVyIGZ1bmN0aW9uLgorICovCit2b2lkIEVQV01fRGlzYWJsZUJyYWtlTm9pc2VGaWx0ZXIoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJCcmFrZVBpbk51bSkKK3sKKyAgICAoZXB3bSktPkJORiAmPSB+KEVQV01fQk5GX0JSSzBORkVOX01zayA8PCAodTMyQnJha2VQaW5OdW0gPDwgMykpOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgRVBXTSBicmFrZSBwaW4gaW52ZXJzZSBmdW5jdGlvbgorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQnJha2VQaW5OdW0gQnJha2UgcGluIHNlbGVjdGlvbi4gVmFsaWQgdmFsdWVzIGFyZSAwIG9yIDEuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgRVBXTSBicmFrZSBwaW4gaW52ZXJzZSBmdW5jdGlvbi4KKyAqLwordm9pZCBFUFdNX0VuYWJsZUJyYWtlUGluSW52ZXJzZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlUGluTnVtKQoreworICAgIChlcHdtKS0+Qk5GIHw9IChFUFdNX0JORl9CUkswUElOVl9Nc2sgPDwgKHUzMkJyYWtlUGluTnVtIDw8IDMpKTsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBFUFdNIGJyYWtlIHBpbiBpbnZlcnNlIGZ1bmN0aW9uCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJCcmFrZVBpbk51bSBCcmFrZSBwaW4gc2VsZWN0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlIDAgb3IgMS4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgRVBXTSBicmFrZSBwaW4gaW52ZXJzZSBmdW5jdGlvbi4KKyAqLwordm9pZCBFUFdNX0Rpc2FibGVCcmFrZVBpbkludmVyc2UoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJCcmFrZVBpbk51bSkKK3sKKyAgICAoZXB3bSktPkJORiAmPSB+KEVQV01fQk5GX0JSSzBQSU5WX01zayA8PCAodTMyQnJha2VQaW5OdW0gKiAodWludDMyX3QpRVBXTV9CTkZfQlJLMU5GRU5fUG9zKSk7Cit9CisKKy8qKgorICogQGJyaWVmIFNldCBFUFdNIGJyYWtlIHBpbiBzb3VyY2UKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkJyYWtlUGluTnVtIEJyYWtlIHBpbiBzZWxlY3Rpb24uIFZhbGlkIHZhbHVlcyBhcmUgMCBvciAxLgorICogQHBhcmFtW2luXSB1MzJTZWxBbm90aGVyTW9kdWxlIFNlbGVjdCB0byBhbm90aGVyIG1vZHVsZS4gVmFsaWQgdmFsdWVzIGFyZSBUUlVFIG9yIEZBTFNFLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IEVQV00gYnJha2UgcGluIHNvdXJjZS4KKyAqLwordm9pZCBFUFdNX1NldEJyYWtlUGluU291cmNlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQnJha2VQaW5OdW0sIHVpbnQzMl90IHUzMlNlbEFub3RoZXJNb2R1bGUpCit7CisgICAgKGVwd20pLT5CTkYgPSAoKGVwd20pLT5CTkYgJiB+KEVQV01fQk5GX0JLMFNSQ19Nc2sgPDwgKHUzMkJyYWtlUGluTnVtIDw8IDMpKSkgfCAodTMyU2VsQW5vdGhlck1vZHVsZSA8PCAoKHVpbnQzMl90KUVQV01fQk5GX0JLMFNSQ19Qb3MgKyAodTMyQnJha2VQaW5OdW0gPDwgMykpKTsKK30KKworLyoqCisgKiBAYnJpZWYgU2V0IEVQV00gbGVhZGluZyBlZGdlIGJsYW5raW5nIGZ1bmN0aW9uCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJUcmlnU3JjU2VsIExlYWRpbmcgZWRnZSBibGFua2luZyBzb3VyY2Ugc2VsZWN0aW9uLgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xFQkNUTF9TUkNFTjAKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9MRUJDVExfU1JDRU4yCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTEVCQ1RMX1NSQ0VONAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xFQkNUTF9TUkNFTjBfMgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xFQkNUTF9TUkNFTjBfNAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xFQkNUTF9TUkNFTjJfNAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xFQkNUTF9TUkNFTjBfMl80CisgKiBAcGFyYW1baW5dIHUzMlRyaWdUeXBlICBMZWFkaW5nIGVkZ2UgYmxhbmtpbmcgdHJpZ2dlciB0eXBlLgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xFQkNUTF9UUkdUWVBFX1JJU0lORworICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xFQkNUTF9UUkdUWVBFX0ZBTExJTkcKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9MRUJDVExfVFJHVFlQRV9SSVNJTkdfT1JfRkFMTElORworICogQHBhcmFtW2luXSB1MzJCbGFua2luZ0NudCAgTGVhZGluZyBFZGdlIEJsYW5raW5nIENvdW50ZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAxfjUxMi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciB2YWx1ZSBkZWNpZGVzIGxlYWRpbmcgZWRnZSBibGFua2luZyB3aW5kb3cgc2l6ZSwgYW5kIHRoaXMgY291bnRlciBjbG9jayBiYXNlIGlzIEVDTEsuCisgKiBAcGFyYW1baW5dIHUzMkJsYW5raW5nRW5hYmxlIEVuYWJsZSBFUFdNIGxlYWRpbmcgZWRnZSBibGFua2luZyBmdW5jdGlvbi4gVmFsaWQgdmFsdWVzIGFyZSBUUlVFIChFTkFCTEUpIG9yIEZBTFNFIChESVNBQkxFKS4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRkFMU0UKKyAqICAgICAgICAgICAgICAtIFxyZWYgVFJVRQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29uZmlndXJlIEVQV00gbGVhZGluZyBlZGdlIGJsYW5raW5nIGZ1bmN0aW9uIHRoYXQgYmxhbmsgdGhlIGZhbHNlIHRyaWdnZXIgZnJvbSBBQ01QIGJyYWtlIHNvdXJjZSB3aGljaCBtYXkgY2F1c2UgYnkgRVBXTSBvdXRwdXQgdHJhbnNpdGlvbi4KKyBFUFdNIGxlYWRpbmcgZWRnZSBibGFua2luZyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgZm9yIGJyYWtlIHNvdXJjZSBmcm9tIEFDTVAuCisgKi8KK3ZvaWQgRVBXTV9TZXRMZWFkaW5nRWRnZUJsYW5raW5nKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyVHJpZ1NyY1NlbCwgdWludDMyX3QgdTMyVHJpZ1R5cGUsIHVpbnQzMl90IHUzMkJsYW5raW5nQ250LCB1aW50MzJfdCB1MzJCbGFua2luZ0VuYWJsZSkKK3sKKyAgICAoZXB3bSktPkxFQkNUTCA9ICh1MzJUcmlnVHlwZSkgfCAodTMyVHJpZ1NyY1NlbCkgfCAodTMyQmxhbmtpbmdFbmFibGUpOworICAgIC8qIEJsYW5raW5nIHdpbmRvdyBzaXplID0gTEVCQ05UICsgMSwgc28gTEVCQ05UID0gdTMyQmxhbmtpbmdDbnQgLSAxICovCisgICAgKGVwd20pLT5MRUJDTlQgPSAodTMyQmxhbmtpbmdDbnQpIC0gMVVMOworfQorCisvKioKKyAqIEBicmllZiBHZXQgdGhlIHRpbWUtYmFzZSBjb3VudGVyIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUgZmxhZyBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gQ291bnQgdG8gbWF4IGludGVycnVwdCBmbGFnIG9mIHNwZWNpZmllZCBjaGFubmVsCisgKiBAcmV0dmFsIDAgQ291bnQgdG8gbWF4IGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgKiBAcmV0dmFsIDEgQ291bnQgdG8gbWF4IGludGVycnVwdCBvY2N1cnJlZAorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgdGltZS1iYXNlIGNvdW50ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3VpbnQzMl90IEVQV01fR2V0V3JhcEFyb3VuZEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIHJldHVybiAoKChlcHdtKS0+U1RBVFVTICYgKEVQV01fU1RBVFVTX0NOVE1BWEYwX01zayA8PCB1MzJDaGFubmVsTnVtKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBDbGVhciB0aGUgdGltZS1iYXNlIGNvdW50ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgdGhlIHRpbWUtYmFzZSBjb3VudGVyIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUgZmxhZyBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fQ2xlYXJXcmFwQXJvdW5kRmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5TVEFUVVMgPSAoRVBXTV9TVEFUVVNfQ05UTUFYRjBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRVBXTV9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFUFdNX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9mbWMuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2ZtYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OGJkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9mbWMuYwpAQCAtMCwwICsxLDEwNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBmbWMuYworICogQHZlcnNpb24gIFYzLjAwCisgKiAkUmV2aXNpb246IDEgJAorICogJERhdGU6IDE2LzA3LzA3IDc6NTBwICQKKyAqIEBicmllZiAgICBNMjM1MSBTZXJpZXMgRmxhc2ggTWVtb3J5IENvbnRyb2xsZXIoRk1DKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEZNQ19Ecml2ZXIgRk1DIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEZNQ19FWFBPUlRFRF9GVU5DVElPTlMgRk1DIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmIFJ1biBmbGFzaCBhbGwgb25lIHZlcmlmaWNhdGlvbiBhbmQgZ2V0IHJlc3VsdC4KKyAgKgorICAqIEBwYXJhbVtpbl0gdTMyYWRkciAgIFN0YXJ0aW5nIGZsYXNoIGFkZHJlc3MuIEl0IG11c3QgYmUgYSBwYWdlIGFsaWduZWQgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIHUzMmNvdW50ICBCeXRlIGNvdW50IG9mIGZsYXNoIHRvIGJlIGNhbGN1bGF0ZWQuIEl0IG11c3QgYmUgbXVsdGlwbGUgb2YgNTEyIGJ5dGVzLgorICAqCisgICogQHJldHZhbCAgIFJFQURfQUxMT05FX1lFUyAgICAgICBUaGUgY29udGVudHMgb2YgdmVyaWZpZWQgZmxhc2ggYXJlYSBhcmUgMHhBMTFGRkZGRi4KKyAgKiBAcmV0dmFsICAgUkVBRF9BTExPTkVfTk9UICAgICAgIFNvbWUgY29udGVudHMgb2YgdmVyaWZpZWQgZmxhc2ggYXJlYSBhcmUgbm90IDB4QTExMDAwMDAuCisgICogQHJldHZhbCAgIFJFQURfQUxMT05FX0NNRF9GQUlMICBVbmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLgorICAqCisgICogQGRldGFpbHMgIFJ1biBJU1AgY2hlY2sgYWxsIG9uZSBjb21tYW5kIHRvIGNoZWNrIHNwZWNpZnkgYXJlYSBpcyBhbGwgb25lIG9yIG5vdC4KKyAgKi8KK3VpbnQzMl90ICBGTUNfQ2hlY2tBbGxPbmUodWludDMyX3QgdTMyYWRkciwgdWludDMyX3QgdTMyY291bnQpCit7CisgICAgdWludDMyX3QgIHJldCA9IFJFQURfQUxMT05FX0NNRF9GQUlMOworCisgICAgRk1DLT5JU1BTVFMgPSAweDgwVUw7ICAgLyogY2xlYXIgY2hlY2sgYWxsIG9uZSBiaXQgKi8KKworICAgIEZNQy0+SVNQQ01EICAgPSBGTUNfSVNQQ01EX1JVTl9BTEwxOworICAgIEZNQy0+SVNQQUREUiAgPSB1MzJhZGRyOworICAgIEZNQy0+SVNQREFUICAgPSB1MzJjb3VudDsKKyAgICBGTUMtPklTUFRSRyAgID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisKKyAgICB3aGlsZShGTUMtPklTUFNUUyAmIEZNQ19JU1BTVFNfSVNQQlVTWV9Nc2spIHsgfQorCisgICAgZG8KKyAgICB7CisgICAgICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9SRUFEX0FMTDE7CisgICAgICAgIEZNQy0+SVNQQUREUiAgICA9IHUzMmFkZHI7CisgICAgICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisgICAgICAgIHdoaWxlKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JU1BCVVNZX01zaykgeyB9CisgICAgfQorICAgIHdoaWxlKEZNQy0+SVNQREFUID09IDBVTCk7CisKKyAgICBpZihGTUMtPklTUERBVCA9PSBSRUFEX0FMTE9ORV9ZRVMpCisgICAgeworICAgICAgICByZXQgPSBGTUMtPklTUERBVDsKKyAgICB9CisKKyAgICBpZihGTUMtPklTUERBVCA9PSBSRUFEX0FMTE9ORV9OT1QpCisgICAgeworICAgICAgICByZXQgPSBGTUMtPklTUERBVDsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgICAgRGlzYWJsZSBJU1AgRnVuY3Rpb25zCisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgSVNQRU4gYml0IG9mIElTUENPTiB0byBkaXNhYmxlIElTUCBmdW5jdGlvbgorICAqCisgICovCit2b2lkIEZNQ19DbG9zZSh2b2lkKQoreworICAgIEZNQy0+SVNQQ1RMICY9IH5GTUNfSVNQQ1RMX0lTUEVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICBDb25maWcgWE9NIFJlZ2lvbgorICAqIEBwYXJhbVtpbl0gdTMyWG9tTnVtICAgIFRoZSBYT00gbnVtYmVyKDB+MykKKyAgKiBAcGFyYW1baW5dIHUzMlhvbUJhc2UgICBUaGUgWE9NIHJlZ2lvbiBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1OFhvbVBhZ2UgICBUaGUgWE9NIHBhZ2UgbnVtYmVyIG9mIHJlZ2lvbiBzaXplLgorICAqCisgICogQHJldHZhbCAgIDAgICBTdWNjZXNzCisgICogQHJldHZhbCAgIDEgICBYT00gaXMgaGFzIGFscmVhZHkgYWN0aXZlZC4KKyAgKiBAcmV0dmFsICAgLTEgIFByb2dyYW0gZmFpbGVkLgorICAqIEByZXR2YWwgICAtMiAgSW52YWxpZCBYT00gbnVtYmVyLgorICAqCisgICogQGRldGFpbHMgIFByb2dyYW0gWE9NIGJhc2UgYWRkcmVzcyBhbmQgWE9NIHNpemUocGFnZSkKKyAgKi8KK2ludDMyX3QgRk1DX0NvbmZpZ1hPTSh1aW50MzJfdCB1MzJYb21OdW0sIHVpbnQzMl90IHUzMlhvbUJhc2UsIHVpbnQ4X3QgdThYb21QYWdlKQoreworICAgIGludDMyX3QgIHJldCA9IDA7CisKKyAgICBpZih1MzJYb21OdW0gPj0gNFVMKQorICAgIHsKKyAgICAgICAgcmV0ID0gLTI7CisgICAgfQorCisgICAgaWYocmV0ID09IDApCisgICAgeworICAgICAgICByZXQgPSBGTUNfR2V0WE9NU3RhdGUodTMyWG9tTnVtKTsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisgICAgICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9QUk9HUkFNOworICAgICAgICBGTUMtPklTUEFERFIgPSBGTUNfWE9NX0JBU0UgKyAodTMyWG9tTnVtICogMHgxMHUpOworICAgICAgICBGTUMtPklTUERBVCA9IHUzMlhvbUJhc2U7CisgICAgICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisgICAgICAgIHdoaWxlKEZNQy0+SVNQVFJHICYgRk1DX0lTUFRSR19JU1BHT19Nc2spIHt9CisKKyAgICAgICAgaWYoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lTUEZGX01zaykKKyAgICAgICAgeworICAgICAgICAgICAgRk1DLT5JU1BTVFMgfD0gRk1DX0lTUFNUU19JU1BGRl9Nc2s7CisgICAgICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKHJldCA9PSAwKQorICAgIHsKKyAgICAgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1BST0dSQU07CisgICAgICAgIEZNQy0+SVNQQUREUiA9IEZNQ19YT01fQkFTRSArICh1MzJYb21OdW0gKiAweDEwdSArIDB4MDR1KTsKKyAgICAgICAgRk1DLT5JU1BEQVQgPSB1OFhvbVBhZ2U7CisgICAgICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisgICAgICAgIHdoaWxlKEZNQy0+SVNQVFJHICYgRk1DX0lTUFRSR19JU1BHT19Nc2spIHt9CisKKyAgICAgICAgaWYoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lTUEZGX01zaykKKyAgICAgICAgeworICAgICAgICAgICAgRk1DLT5JU1BTVFMgfD0gRk1DX0lTUFNUU19JU1BGRl9Nc2s7CisgICAgICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKHJldCA9PSAwKQorICAgIHsKKyAgICAgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1BST0dSQU07CisgICAgICAgIEZNQy0+SVNQQUREUiA9IEZNQ19YT01fQkFTRSArICh1MzJYb21OdW0gKiAweDEwdSArIDB4MDh1KTsKKyAgICAgICAgRk1DLT5JU1BEQVQgPSAwdTsKKyAgICAgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKyAgICAgICAgd2hpbGUoRk1DLT5JU1BUUkcgJiBGTUNfSVNQVFJHX0lTUEdPX01zaykge30KKworICAgICAgICBpZihGTUMtPklTUFNUUyAmIEZNQ19JU1BTVFNfSVNQRkZfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICBGTUMtPklTUFNUUyB8PSBGTUNfSVNQU1RTX0lTUEZGX01zazsKKyAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRXhlY3V0ZSBGbGFzaCBQYWdlIGVyYXNlCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJQYWdlQWRkciBBZGRyZXNzIG9mIHRoZSBmbGFzaCBwYWdlIHRvIGJlIGVyYXNlZC4KKyAgKiAgICAgICAgICAgICBJdCBtdXN0IGJlIGEgMjA0OCBieXRlcyBhbGlnbmVkIGFkZHJlc3MuCisgICoKKyAgKiBAcmV0dXJuICAgICBJU1AgcGFnZSBlcmFzZSBzdWNjZXNzIG9yIG5vdC4KKyAgKiBAcmV0dmFsICAgICAwICBTdWNjZXNzCisgICogQHJldHZhbCAgICAgLTEgIEVyYXNlIGZhaWxlZAorICAqCisgICogQGRldGFpbHMgICAgRXhlY3V0ZSBGTUNfSVNQQ01EX1BBR0VfRVJBU0UgY29tbWFuZCB0byBlcmFzZSBhIGZsYXNoIHBhZ2UuIFRoZSBwYWdlIHNpemUgaXMgMjA0OCBieXRlcy4KKyAgKi8KK2ludDMyX3QgRk1DX0VyYXNlKHVpbnQzMl90IHUzMlBhZ2VBZGRyKQoreworICAgIGludDMyX3QgIHJldCA9IDA7CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisgICAgICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9QQUdFX0VSQVNFOworICAgICAgICBGTUMtPklTUEFERFIgPSB1MzJQYWdlQWRkcjsKKyAgICAgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKworICAgICAgICB3aGlsZShGTUMtPklTUFRSRyAmIEZNQ19JU1BUUkdfSVNQR09fTXNrKSB7IH0KKworICAgICAgICBpZihGTUMtPklTUENUTCAmIEZNQ19JU1BDVExfSVNQRkZfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICBGTUMtPklTUENUTCB8PSBGTUNfSVNQQ1RMX0lTUEZGX01zazsKKyAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEV4ZWN1dGUgRmxhc2ggQmFuayBlcmFzZQorICAqCisgICogQHBhcmFtW2luXSAgdTMyQmFua0FkZHIgQmFzZSBhZGRyZXNzIG9mIHRoZSBmbGFzaCBiYW5rIHRvIGJlIGVyYXNlZC4KKyAgKgorICAqIEByZXR1cm4gICAgIElTUCBiYW5rIGVyYXNlIHN1Y2Nlc3Mgb3Igbm90LgorICAqIEByZXR2YWwgICAgIDAgIFN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgICAtMSAgRXJhc2UgZmFpbGVkCisgICoKKyAgKiBAZGV0YWlscyAgRXhlY3V0ZSBGTUNfSVNQQ01EX0JBTktfRVJBU0UgY29tbWFuZCB0byBlcmFzZSBhIGZsYXNoIGJsb2NrLgorICAqLworaW50MzJfdCBGTUNfRXJhc2VfQmFuayh1aW50MzJfdCB1MzJCYW5rQWRkcikKK3sKKyAgICBpbnQzMl90ICByZXQgPSAwOworCisgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX0JBTktfRVJBU0U7CisgICAgRk1DLT5JU1BBRERSID0gdTMyQmFua0FkZHI7CisgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKworICAgIHdoaWxlKEZNQy0+SVNQVFJHICYgRk1DX0lTUFRSR19JU1BHT19Nc2spIHt9CisKKyAgICBpZihGTUMtPklTUENUTCAmIEZNQ19JU1BDVExfSVNQRkZfTXNrKQorICAgIHsKKyAgICAgICAgRk1DLT5JU1BDVEwgfD0gRk1DX0lTUENUTF9JU1BGRl9Nc2s7CisgICAgICAgIHJldCA9IC0xOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFeGVjdXRlIEZsYXNoIEJsb2NrIGVyYXNlCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJCbG9ja0FkZHIgIEFkZHJlc3Mgb2YgdGhlIGZsYXNoIGJsb2NrIHRvIGJlIGVyYXNlZC4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IG11c3QgYmUgYSA0IHBhZ2VzIGFsaWduZWQgYWRkcmVzcy4KKyAgKgorICAqIEByZXR1cm4gICAgIElTUCBibG9jayBlcmFzZSBzdWNjZXNzIG9yIG5vdC4KKyAgKiBAcmV0dmFsICAgICAwICBTdWNjZXNzCisgICogQHJldHZhbCAgICAgLTEgIEVyYXNlIGZhaWxlZAorICAqCisgICogQGRldGFpbHMgRXhlY3V0ZSBGTUNfSVNQQ01EX0JMT0NLX0VSQVNFIGNvbW1hbmQgdG8gZXJhc2UgYSBmbGFzaCBibG9jay4gVGhlIGJsb2NrIHNpemUgaXMgNCBwYWdlcy4KKyAgKi8KK2ludDMyX3QgRk1DX0VyYXNlX0Jsb2NrKHVpbnQzMl90IHUzMkJsb2NrQWRkcikKK3sKKyAgICBpbnQzMl90ICByZXQgPSAwOworCisgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX0JMT0NLX0VSQVNFOworICAgIEZNQy0+SVNQQUREUiA9IHUzMkJsb2NrQWRkcjsKKyAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworCisgICAgd2hpbGUoRk1DLT5JU1BUUkcgJiBGTUNfSVNQVFJHX0lTUEdPX01zaykge30KKworICAgIGlmKEZNQy0+SVNQQ1RMICYgRk1DX0lTUENUTF9JU1BGRl9Nc2spCisgICAgeworICAgICAgICBGTUMtPklTUENUTCB8PSBGTUNfSVNQQ1RMX0lTUEZGX01zazsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgRXhlY3V0ZSBFcmFzZSBYT00gUmVnaW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJYb21OdW0gIFRoZSBYT01SbihuPTB+MykKKyAgKgorICAqIEByZXR1cm4gICBYT00gZXJhc2Ugc3VjY2VzcyBvciBub3QuCisgICogQHJldHZhbCAgICAwICBTdWNjZXNzCisgICogQHJldHZhbCAgIC0xICBFcmFzZSBmYWlsZWQKKyAgKiBAcmV0dmFsICAgLTIgIEludmFsaWQgWE9NIG51bWJlci4KKyAgKgorICAqIEBkZXRhaWxzIEV4ZWN1dGUgRk1DX0lTUENNRF9QQUdFX0VSQVNFIGNvbW1hbmQgdG8gZXJhc2UgWE9NLgorICAqLworaW50MzJfdCBGTUNfRXJhc2VYT00odWludDMyX3QgdTMyWG9tTnVtKQoreworICAgIHVpbnQzMl90IHUzMkFkZHI7CisgICAgaW50MzJfdCBpMzJBY3RpdmUsIGVyciA9IDA7CisKKyAgICBpZih1MzJYb21OdW0gPj0gNFVMKQorICAgIHsKKyAgICAgICAgZXJyID0gLTI7CisgICAgfQorCisgICAgaWYoZXJyID09IDApCisgICAgeworICAgICAgICBpMzJBY3RpdmUgPSBGTUNfR2V0WE9NU3RhdGUodTMyWG9tTnVtKTsKKworICAgICAgICBpZihpMzJBY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkFkZHIgPSAoICggKHVpbnQzMl90KSgmRk1DLT5YT01SMFNUUylbdTMyWG9tTnVtXSApICYgMHhGRkZGRkYwMHUgKSA+PiA4dTsKKworICAgICAgICAgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1BBR0VfRVJBU0U7CisgICAgICAgICAgICBGTUMtPklTUEFERFIgPSB1MzJBZGRyOworICAgICAgICAgICAgRk1DLT5JU1BEQVQgPSAweDU1YWEwM3U7CisgICAgICAgICAgICBGTUMtPklTUFRSRyA9IDB4MXU7CisjaWYgSVNCRU4KKyAgICAgICAgICAgIF9fSVNCKCk7CisjZW5kaWYKKyAgICAgICAgICAgIHdoaWxlKEZNQy0+SVNQVFJHKSB7fQorCisgICAgICAgICAgICAvKiBDaGVjayBJU1BGRiBmbGFnIHRvIGtub3cgd2hldGhlciBlcmFzZSBPSyBvciBmYWlsLiAqLworICAgICAgICAgICAgaWYoRk1DLT5JU1BDVEwgJiBGTUNfSVNQQ1RMX0lTUEZGX01zaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGTUMtPklTUENUTCB8PSBGTUNfSVNQQ1RMX0lTUEZGX01zazsKKyAgICAgICAgICAgICAgICBlcnIgPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVyciA9IC0xOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBlcnI7Cit9CisKKy8qKgorICAqIEBicmllZiAgICBHZXQgdGhlIGN1cnJlbnQgYm9vdCBzb3VyY2UKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgVGhlIGN1cnJlbnQgYm9vdCBzb3VyY2UuCisgICogQHJldHZhbCAgIDAgVGhpcyBjaGlwIGlzIGN1cnJlbnRseSBib290aW5nIGZyb20gQVBST00KKyAgKiBAcmV0dmFsICAgMSBUaGlzIGNoaXAgaXMgY3VycmVudGx5IGJvb3RpbmcgZnJvbSBMRFJPTQorICAqCisgICAgICBUaGlzIGZ1bmN0aW9uIG9ubHkgc2hvdyB0aGUgYm9vdCBzb3VyY2UuCisgICogICAgICAgICAgIFVzZXIgbmVlZCB0byByZWFkIElTUFNUQSByZWdpc3RlciB0byBrbm93IGlmIElBUCBtb2RlIHN1cHBvcnRlZCBvciBub3QgaW4gcmVsYXRpdmUgYm9vdC4KKyAgKi8KK2ludDMyX3QgRk1DX0dldEJvb3RTb3VyY2Uodm9pZCkKK3sKKyAgICBpbnQzMl90ICByZXQgPSAwOworCisgICAgaWYoRk1DLT5JU1BDVEwgJiBGTUNfSVNQQ1RMX0JTX01zaykKKyAgICB7CisgICAgICAgIHJldCA9IDE7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgICogQGJyaWVmICAgICBSdW4gQ1JDMzIgY2hlY2tzdW0gY2FsY3VsYXRpb24gYW5kIGdldCByZXN1bHQuCisgICoKKyAgKiBAcGFyYW1baW5dIHUzMmFkZHIgICBTdGFydGluZyBmbGFzaCBhZGRyZXNzLiBJdCBtdXN0IGJlIGEgcGFnZSBhbGlnbmVkIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1MzJjb3VudCAgQnl0ZSBjb3VudCBvZiBmbGFzaCB0byBiZSBjYWxjdWxhdGVkLiBJdCBtdXN0IGJlIG11bHRpcGxlIG9mIDIwNDhieXRlcy4KKyAgKgorICAqIEByZXR1cm4gICAgU3VjY2VzcyBvciBub3QuCisgICogQHJldHZhbCAgICAwICAgICAgICAgICBTdWNjZXNzLgorICAqIEByZXR2YWwgICAgMHhGRkZGRkZGRiAgSW52YWxpZCBwYXJhbWV0ZXIuCisgICoKKyAgKiBAZGV0YWlscyAgUnVuIElTUCBDUkMzMiBjaGVja3N1bSBjb21tYW5kIHRvIGNhbGN1bGF0ZSBjaGVja3N1bSB0aGVuIGdldCBhbmQgcmV0dXJuIGNoZWNrc3VtIGRhdGEuCisgICovCit1aW50MzJfdCAgRk1DX0dldENoa1N1bSh1aW50MzJfdCB1MzJhZGRyLCB1aW50MzJfdCB1MzJjb3VudCkKK3sKKyAgICB1aW50MzJfdCAgIHJldDsKKworICAgIGlmKCh1MzJhZGRyICUgMjA0OFVMKSB8fCAodTMyY291bnQgJSAyMDQ4VUwpKQorICAgIHsKKyAgICAgICAgcmV0ID0gMHhGRkZGRkZGRjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRk1DLT5JU1BDTUQgID0gRk1DX0lTUENNRF9SVU5fQ0tTOworICAgICAgICBGTUMtPklTUEFERFIgPSB1MzJhZGRyOworICAgICAgICBGTUMtPklTUERBVCAgPSB1MzJjb3VudDsKKyAgICAgICAgRk1DLT5JU1BUUkcgID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisKKyAgICAgICAgd2hpbGUoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lTUEJVU1lfTXNrKSB7IH0KKworICAgICAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUkVBRF9DS1M7CisgICAgICAgIEZNQy0+SVNQQUREUiAgICA9IHUzMmFkZHI7CisgICAgICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisKKyAgICAgICAgd2hpbGUoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lTUEJVU1lfTXNrKSB7IH0KKworICAgICAgICByZXQgPSBGTUMtPklTUERBVDsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIHRoZSBPVFAgaXMgbG9ja2VkIG9yIG5vdC4KKyAgKgorICAqIEBwYXJhbVtpbl0gdTMyT3RwTnVtICAgIFRoZSBPVFAgbnVtYmVyLgorICAqCisgICogQHJldHZhbCAgIDEgICBPVFAgaXMgbG9ja2VkLgorICAqIEByZXR2YWwgICAwICAgT1RQIGlzIG5vdCBsb2NrZWQuCisgICogQHJldHZhbCAgIC0xICBGYWlsZWQgdG8gcmVhZCBPVFAgbG9jayBiaXRzLgorICAqIEByZXR2YWwgICAtMiAgSW52YWxpZCBPVFAgbnVtYmVyLgorICAqCisgICogQGRldGFpbHMgVG8gZ2V0IHNwZWNpZnkgT1RQIGxvY2sgc3RhdHVzCisgICovCitpbnQzMl90IEZNQ19Jc19PVFBfTG9ja2VkKHVpbnQzMl90IHUzMk90cE51bSkKK3sKKyAgICBpbnQzMl90ICByZXQgPSAwOworCisgICAgaWYodTMyT3RwTnVtID4gMjU1VUwpCisgICAgeworICAgICAgICByZXQgPSAtMjsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisgICAgICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9SRUFEOworICAgICAgICBGTUMtPklTUEFERFIgPSBGTUNfT1RQX0JBU0UgKyAweDgwMFVMICsgdTMyT3RwTnVtICogNFVMOworICAgICAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworCisgICAgICAgIHdoaWxlKEZNQy0+SVNQVFJHICYgRk1DX0lTUFRSR19JU1BHT19Nc2spIHsgfQorCisgICAgICAgIGlmKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JU1BGRl9Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIEZNQy0+SVNQU1RTIHw9IEZNQ19JU1BTVFNfSVNQRkZfTXNrOworICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZihGTUMtPklTUERBVCAhPSAweEZGRkZGRkZGVUwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gMTsgICAvKiBMb2NrIHdvcmsgd2FzIHByb2dybW1lZC4gT1RQIHdhcyBsb2NrZWQuICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgICogQGJyaWVmICBDaGVjayB0aGUgWE9NIGlzIGFjdGl2ZWQgb3Igbm90LgorICAqCisgICogQHBhcmFtW2luXSB1MzJYb21OdW0gICAgVGhlIHhvbSBudW1iZXIoMH4zKS4KKyAgKgorICAqIEByZXR2YWwgICAxICAgWE9NIGlzIGFjdGl2ZWQuCisgICogQHJldHZhbCAgIDAgICBYT00gaXMgbm90IGFjdGl2ZWQuCisgICogQHJldHZhbCAgIC0yICBJbnZhbGlkIFhPTSBudW1iZXIuCisgICoKKyAgKiBAZGV0YWlscyBUbyBnZXQgc3BlY2lmeSBYT01SbihuPTB+MykgYWN0aXZlIHN0YXR1cworICAqLworaW50MzJfdCBGTUNfR2V0WE9NU3RhdGUodWludDMyX3QgdTMyWG9tTnVtKQoreworICAgIHVpbnQzMl90IHUzMmFjdDsKKyAgICBpbnQzMl90ICByZXQgPSAwOworCisgICAgaWYodTMyWG9tTnVtID49IDRVTCkKKyAgICB7CisgICAgICAgIHJldCA9IC0yOworICAgIH0KKworICAgIGlmKHJldCA+PSAwKQorICAgIHsKKyAgICAgICAgdTMyYWN0ID0gKCgoRk1DLT5YT01TVFMpICYgMHhmdWwpICYgKDF1bCA8PCB1MzJYb21OdW0pKSA+PiB1MzJYb21OdW07CisgICAgICAgIHJldCA9IChpbnQzMl90KXUzMmFjdDsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgICogQGJyaWVmICBMb2NrIHRoZSBzcGVjaWZpZWQgT1RQLgorICAqCisgICogQHBhcmFtW2luXSB1MzJPdHBOdW0gICAgVGhlIE9UUCBudW1iZXIuCisgICoKKyAgKiBAcmV0dmFsICAgIDAgICBTdWNjZXNzCisgICogQHJldHZhbCAgIC0xICBGYWlsZWQgdG8gd3JpdGUgT1RQIGxvY2sgYml0cy4KKyAgKiBAcmV0dmFsICAgLTIgIEludmFsaWQgT1RQIG51bWJlci4KKyAgKgorICAqIEBkZXRhaWxzICBUbyBsb2NrIHNwZWNpZmllZCBPVFAgbnVtYmVyCisgICovCitpbnQzMl90IEZNQ19Mb2NrX09UUCh1aW50MzJfdCB1MzJPdHBOdW0pCit7CisgICAgaW50MzJfdCAgcmV0ID0gMDsKKworICAgIGlmKHUzMk90cE51bSA+IDI1NVVMKQorICAgIHsKKyAgICAgICAgcmV0ID0gLTI7CisgICAgfQorCisgICAgaWYocmV0ID09IDApCisgICAgeworICAgICAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUFJPR1JBTTsKKyAgICAgICAgRk1DLT5JU1BBRERSID0gRk1DX09UUF9CQVNFICsgMHg4MDBVTCArIHUzMk90cE51bSAqIDRVTDsKKyAgICAgICAgRk1DLT5JU1BEQVQgPSAwVUw7CisgICAgICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisKKyAgICAgICAgd2hpbGUoRk1DLT5JU1BUUkcgJiBGTUNfSVNQVFJHX0lTUEdPX01zaykgeyB9CisKKyAgICAgICAgaWYoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lTUEZGX01zaykKKyAgICAgICAgeworICAgICAgICAgICAgRk1DLT5JU1BTVFMgfD0gRk1DX0lTUFNUU19JU1BGRl9Nc2s7CisgICAgICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgICAgRW5hYmxlIEZNQyBJU1AgZnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgTm9uZQorICAqCisgICogQGRldGFpbHMgIElTUEVOIGJpdCBvZiBJU1BDT04gbXVzdCBiZSBzZXQgYmVmb3JlIHdlIGNhbiB1c2UgSVNQIGNvbW1hbmRzLgorICAqICAgICAgICAgICBUaGVyZWZvcmUsIFRvIHVzZSBhbGwgRk1DIGZ1bmN0aW9uIEFQSXMsIHVzZXIgbmVlZHMgdG8gY2FsbCBGTUNfT3BlbigpIGZpcnN0IHRvIGVuYWJsZSBJU1AgZnVuY3Rpb25zLgorICAqCisgICAgICBJU1AgZnVuY3Rpb25zIGFyZSB3cml0ZS1wcm90ZWN0ZWQuIHVzZXIgYWxzbyBuZWVkcyB0byB1bmxvY2sgaXQgYnkgY2FsbGluZyBTWVNfVW5sb2NrUmVnKCkgYmVmb3JlIHVzaW5nIGFsbCBJU1AgZnVuY3Rpb25zLgorICAqCisgICovCit2b2lkIEZNQ19PcGVuKHZvaWQpCit7CisgICAgRk1DLT5JU1BDVEwgfD0gIEZNQ19JU1BDVExfSVNQRU5fTXNrOworfQorCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgYSB3b3JkIGJ5dGVzIGZyb20gZmxhc2gKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgQWRkcmVzcyBvZiB0aGUgZmxhc2ggbG9jYXRpb24gdG8gYmUgcmVhZC4KKyAgKiAgICAgICAgICAgICBJdCBtdXN0IGJlIGEgd29yZCBhbGlnbmVkIGFkZHJlc3MuCisgICoKKyAgKiBAcmV0dXJuICAgICBUaGUgd29yZCBkYXRhIHJlYWQgZnJvbSBzcGVjaWZpZWQgZmxhc2ggYWRkcmVzcy4KKyAgKgorICAqIEBkZXRhaWxzICAgIEV4ZWN1dGUgRk1DX0lTUENNRF9SRUFEIGNvbW1hbmQgdG8gcmVhZCBhIHdvcmQgZnJvbSBmbGFzaC4KKyAgKi8KK3VpbnQzMl90IEZNQ19SZWFkKHVpbnQzMl90IHUzMkFkZHIpCit7CisgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1JFQUQ7CisgICAgRk1DLT5JU1BBRERSID0gdTMyQWRkcjsKKyAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworICAgIHdoaWxlKEZNQy0+SVNQVFJHICYgRk1DX0lTUFRSR19JU1BHT19Nc2spIHsgfQorCisgICAgcmV0dXJuIEZNQy0+SVNQREFUOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIGEgZG91YmxlLXdvcmQgYnl0ZXMgZnJvbSBmbGFzaAorICAqCisgICogQHBhcmFtW2luXSAgdTMyYWRkciAgIEFkZHJlc3Mgb2YgdGhlIGZsYXNoIGxvY2F0aW9uIHRvIGJlIHJlYWQuCisgICogICAgICAgICAgICAgSXQgbXVzdCBiZSBhIGRvdWJsZS13b3JkIGFsaWduZWQgYWRkcmVzcy4KKyAgKgorICAqIEBwYXJhbVtvdXRdIHUzMmRhdGEwICBQbGFjZSBob2xkZXIgb2Ygd29yZCAwIHJlYWQgZnJvbSBmbGFzaCBhZGRyZXNzIHUzMmFkZHIuCisgICogQHBhcmFtW291dF0gdTMyZGF0YTEgIFBsYWNlIGhvbGRlciBvZiB3b3JkIDAgcmVhZCBmcm9tIGZsYXNoIGFkZHJlc3MgdTMyYWRkcis0LgorICAqCisgICogQHJldHVybiAgICAgMCAgIFN1Y2Nlc3MKKyAgKiBAcmV0dXJuICAgICAtMSAgRmFpbGVkCisgICoKKyAgKiBAZGV0YWlscyAgICBFeGVjdXRlIEZNQ19JU1BDTURfUkVBRF82NCBjb21tYW5kIHRvIHJlYWQgYSBkb3VibGUtd29yZCBmcm9tIGZsYXNoLgorICAqLworaW50MzJfdCBGTUNfUmVhZF82NCh1aW50MzJfdCB1MzJhZGRyLCB1aW50MzJfdCAqIHUzMmRhdGEwLCB1aW50MzJfdCAqIHUzMmRhdGExKQoreworICAgIGludDMyX3QgIHJldCA9IDA7CisKKyAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUkVBRF82NDsKKyAgICBGTUMtPklTUEFERFIgICAgPSB1MzJhZGRyOworICAgIEZNQy0+SVNQREFUID0gMHgwVUw7CisgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKworICAgIHdoaWxlKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JU1BCVVNZX01zaykgeyB9CisKKyAgICBpZihGTUMtPklTUFNUUyAmIEZNQ19JU1BTVFNfSVNQRkZfTXNrKQorICAgIHsKKyAgICAgICAgRk1DLT5JU1BTVFMgfD0gRk1DX0lTUFNUU19JU1BGRl9Nc2s7CisgICAgICAgIHJldCA9IC0xOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqdTMyZGF0YTAgPSBGTUMtPk1QREFUMDsKKyAgICAgICAgKnUzMmRhdGExID0gRk1DLT5NUERBVDE7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmVhZCBkYXRhIGZyb20gT1RQCisgICoKKyAgKiBAcGFyYW1baW5dIHUzMk90cE51bSAgICBUaGUgT1RQIG51bWJlcigwfjI1NSkuCisgICogQHBhcmFtW2luXSB1MzJMb3dXb3JkICAgTG93IHdvcmQgb2YgdGhlIDY0LWJpdHMgZGF0YS4KKyAgKiBAcGFyYW1baW5dIHUzMkhpZ2hXb3JkICAgSGlnaCB3b3JkIG9mIHRoZSA2NC1iaXRzIGRhdGEuCisgICoKKyAgKiBAcmV0dmFsICAgIDAgICBTdWNjZXNzCisgICogQHJldHZhbCAgIC0xICBSZWFkIGZhaWxlZC4KKyAgKiBAcmV0dmFsICAgLTIgIEludmFsaWQgT1RQIG51bWJlci4KKyAgKgorICAqIEBkZXRhaWxzICBSZWFkIHRoZSA2NC1iaXRzIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkIE9UUC4KKyAgKi8KK2ludDMyX3QgRk1DX1JlYWRfT1RQKHVpbnQzMl90IHUzMk90cE51bSwgdWludDMyX3QgKnUzMkxvd1dvcmQsIHVpbnQzMl90ICp1MzJIaWdoV29yZCkKK3sKKyAgICBpbnQzMl90ICByZXQgPSAwOworCisgICAgaWYodTMyT3RwTnVtID4gMjU1VUwpCisgICAgeworICAgICAgICByZXQgPSAtMjsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisgICAgICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9SRUFEXzY0OworICAgICAgICBGTUMtPklTUEFERFIgICAgPSBGTUNfT1RQX0JBU0UgKyB1MzJPdHBOdW0gKiA4VUwgOworICAgICAgICBGTUMtPklTUERBVCA9IDB4MFVMOworICAgICAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworCisgICAgICAgIHdoaWxlKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JU1BCVVNZX01zaykge30KKworICAgICAgICBpZihGTUMtPklTUFNUUyAmIEZNQ19JU1BTVFNfSVNQRkZfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICBGTUMtPklTUFNUUyB8PSBGTUNfSVNQU1RTX0lTUEZGX01zazsKKyAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgKnUzMkxvd1dvcmQgPSBGTUMtPk1QREFUMDsKKyAgICAgICAgICAgICp1MzJIaWdoV29yZCA9IEZNQy0+TVBEQVQxOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgICBSZWFkIHRoZSBVc2VyIENvbmZpZ3VyYXRpb24gd29yZHMuCisgICoKKyAgKiBAcGFyYW1bb3V0XSAgdTMyQ29uZmlnW10gIFRoZSB3b3JkIGJ1ZmZlciB0byBzdG9yZSB0aGUgVXNlciBDb25maWd1cmF0aW9uIGRhdGEuCisgICogQHBhcmFtW2luXSAgIHUzMkNvdW50ICAgVGhlIHdvcmQgY291bnQgdG8gYmUgcmVhZC4KKyAgKgorICAqIEByZXR1cm4gICAgICBTdWNjZXNzIG9yIG5vdC4KKyAgKiBAcmV0dmFsICAgICAgIDAgU3VjY2VzcworICAqIEByZXR2YWwgICAgICAtMSBGYWlsZWQKKyAgKgorICAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVhZCB0aGUgc2V0dGluZ3Mgb2YgdXNlciBjb25maWd1cmF0aW9uLgorICAqICAgICAgICAgICAgICBpZiB1MzJDb3VudCA9IDEsIE9ubHkgQ09ORklHMCB3aWxsIGJlIHJldHVybmVkIHRvIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IHUzMkNvbmZpZy4KKyAgKiAgICAgICAgICAgICAgaWYgdTMyQ291bnQgPSAyLCBCb3RoIENPTkZJRzAgYW5kIENPTkZJRzEgd2lsbCBiZSByZXR1cm5lZC4KKyAgKi8KK2ludDMyX3QgRk1DX1JlYWRDb25maWcodWludDMyX3QgdTMyQ29uZmlnW10sIHVpbnQzMl90IHUzMkNvdW50KQoreworICAgIHVpbnQzMl90IGk7CisKKyAgICBmb3IoaSA9IDB1OyBpIDwgdTMyQ291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHUzMkNvbmZpZ1tpXSA9IEZNQ19SZWFkKEZNQ19DT05GSUdfQkFTRSArIGkgKiA0dSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgYm9vdCBzb3VyY2UgZnJvbSBMRFJPTSBvciBBUFJPTSBhZnRlciBuZXh0IHNvZnR3YXJlIHJlc2V0CisgICoKKyAgKiBAcGFyYW1baW5dICBpMzJCb290U3JjCisgICogICAgICAgICAgICAgICAgMTogQm9vdCBmcm9tIExEUk9NCisgICogICAgICAgICAgICAgICAgMDogQm9vdCBmcm9tIEFQUk9NCisgICoKKyAgKiBAcmV0dXJuICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN3aXRjaCBBUFJPTSBib290IG9yIExEUk9NIGJvb3QuIFVzZXIgbmVlZCB0byBjYWxsCisgICogICAgICAgICAgICBGTUNfU2V0Qm9vdFNvdXJjZSB0byBzZWxlY3QgYm9vdCBzb3VyY2UgZmlyc3QsIHRoZW4gdXNlIENQVSByZXNldCBvcgorICAqICAgICAgICAgICAgU3lzdGVtIFJlc2V0IFJlcXVlc3QgdG8gcmVzZXQgc3lzdGVtLgorICAqCisgICovCit2b2lkIEZNQ19TZXRCb290U291cmNlKGludDMyX3QgaTMyQm9vdFNyYykKK3sKKyAgICBpZihpMzJCb290U3JjKQorICAgIHsKKyAgICAgICAgRk1DLT5JU1BDVEwgfD0gRk1DX0lTUENUTF9CU19Nc2s7IC8qIEJvb3QgZnJvbSBMRFJPTSAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBGTUMtPklTUENUTCAmPSB+Rk1DX0lTUENUTF9CU19Nc2s7LyogQm9vdCBmcm9tIEFQUk9NICovCisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgRXhlY3V0ZSBTZWN1cml0eSBLZXkgQ29tcGFyaXNvbi4KKyAgKgorICAqIEBwYXJhbVtpbl0ga2V5ICBLZXkgMH4yIHRvIGJlIGNvbXBhcmVkLgorICAqCisgICogQHJldHZhbCAgIDAgICAgIEtleSBtYXRjaGVkLgorICAqIEByZXR2YWwgICAtMSAgICBGb3JiaWRkZW4uIFRpbWVzIG9mIGtleSBjb21wYXJpc29uIG1pc21hdGNoIHJlYWNoIHRoZSBtYXhpbXVtIGNvdW50LgorICAqIEByZXR2YWwgICAtMiAgICBLZXkgbWlzbWF0Y2hlZC4KKyAgKiBAcmV0dmFsICAgLTMgICAgTm8gS1BST00ga2V5IGxvY2suIEtleSBjb21wYXJpc29uIGlzIG5vdCByZXF1aXJlZC4KKyAgKgorICAqIEAgZGV0YWlscyAgIElucHV0IGEga2V5cyB0byBjb21wYXJlIHdpdGggc2VjdXJpdHkga2V5CisgICovCitpbnQzMl90ICBGTUNfQ29tcGFyZVNQS2V5KHVpbnQzMl90IGtleVszXSkKK3sKKyAgICB1aW50MzJfdCAgdTMyS2V5U3RzOworICAgIGludDMyX3QgICByZXQgPSAwOworCisgICAgaWYoRk1DLT5LUEtFWVNUUyAmIEZNQ19LUEtFWVNUU19GT1JCSURfTXNrKQorICAgIHsKKyAgICAgICAgLyogRk1DX1NLZXlfQ29tcGFyZSAtIEZPUkJJRCEgICovCisgICAgICAgIHJldCA9IC0xOworICAgIH0KKworICAgIGlmKCEoRk1DLT5LUEtFWVNUUyAmIEZNQ19LUEtFWVNUU19LRVlMT0NLX01zaykpCisgICAgeworICAgICAgICAvKiBGTUNfU0tleV9Db21wYXJlIC0ga2V5IGlzIG5vdCBsb2NrZWQhICAqLworICAgICAgICByZXQgPSAtMzsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisgICAgICAgIEZNQy0+S1BLRVkwID0ga2V5WzBdOworICAgICAgICBGTUMtPktQS0VZMSA9IGtleVsxXTsKKyAgICAgICAgRk1DLT5LUEtFWTIgPSBrZXlbMl07CisgICAgICAgIEZNQy0+S1BLRVlUUkcgPSBGTUNfS1BLRVlUUkdfS1BLRVlHT19Nc2sgfCBGTUNfS1BLRVlUUkdfVENFTl9Nc2s7CisKKyAgICAgICAgd2hpbGUoRk1DLT5LUEtFWVNUUyAmIEZNQ19LUEtFWVNUU19LRVlCVVNZX01zaykgeyB9CisKKyAgICAgICAgdTMyS2V5U3RzID0gRk1DLT5LUEtFWVNUUzsKKworICAgICAgICBpZighKHUzMktleVN0cyAmIEZNQ19LUEtFWVNUU19LRVlNQVRDSF9Nc2spKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBLZXkgbWlzbWF0Y2hlZCEgKi8KKyAgICAgICAgICAgIHJldCA9IC0yOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYodTMyS2V5U3RzICYgRk1DX0tQS0VZU1RTX0tFWUxPQ0tfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBLZXkgbWF0Y2hlZCwgYnV0IHN0aWxsIGJlIGxvY2tlZCEgKi8KKyAgICAgICAgICAgIHJldCA9IC0yOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgICBTZXR1cCBTZWN1cml0eSBLZXkuCisgICoKKyAgKiBAcGFyYW1baW5dIGF1MzJLZXkgICAgICBLZXkgMH4yIHRvIGJlIHNldHVwLgorICAqIEBwYXJhbVtpbl0gdTMyS3BtYXggICAgTWF4aW11bSB1bm1hdGNoZWQgcG93ZXItb24gY291bnRpbmcgbnVtYmVyLgorICAqIEBwYXJhbVtpbl0gdTMyS2VtYXggICAgTWF4aW11bSB1bm1hdGNoZWQgY291bnRpbmcgbnVtYmVyLgorICAqIEBwYXJhbVtpbl0gaTMyTG9ja0NPTkZJRyAgIDE6IFNlY3VyaXR5IGtleSBsb2NrIENPTkZJRyB0byB3cml0ZS1wcm90ZWN0LiAwOiBEb24ndCBsb2NrIENPTkZJRy4KKyAgKiBAcGFyYW1baW5dIGkzMkxvY2tTUFJPTSAgICAxOiBTZWN1cml0eSBrZXkgbG9jayBTUFJPTSB0byB3cml0ZS1wcm90ZWN0LiAwOiBEb24ndCBsb2NrIFNQUk9NLiAoVGhpcyBwYXJhbSBpcyBub3Qgc3VwcG9ydGVkIG9uIE0yMzUxKQorICAqCisgICogQHJldHZhbCAgICAwICAgIFN1Y2Nlc3MuCisgICogQHJldHZhbCAgIC0xICAgIEtleSBpcyBsb2NrZWQuIENhbm5vdCBvdmVyd3JpdGUgdGhlIGN1cnJlbnQga2V5LgorICAqIEByZXR2YWwgICAtMiAgICBGYWlsZWQgdG8gZXJhc2UgZmxhc2guCisgICogQHJldHZhbCAgIC0zICAgIEZhaWxlZCB0byBwcm9ncmFtIGtleS4KKyAgKiBAcmV0dmFsICAgLTQgICAgS2V5IGxvY2sgZnVuY3Rpb24gZmFpbGVkLgorICAqIEByZXR2YWwgICAtNSAgICBDT05GSUcgbG9jayBmdW5jdGlvbiBmYWlsZWQuCisgICogQHJldHZhbCAgIC02ICAgIFNQUk9NIGxvY2sgZnVuY3Rpb24gZmFpbGVkLiAoVGhpcyBzdGF0dXMgaXMgbm90IHN1cHBvcnRlZCBvbiBNMjM1MSkKKyAgKiBAcmV0dmFsICAgLTcgICAgS1BNQVggZnVuY3Rpb24gZmFpbGVkLgorICAqIEByZXR2YWwgICAtOCAgICBLRU1BWCBmdW5jdGlvbiBmYWlsZWQuCisgICoKKyAgKiBAZGV0YWlscyAgU2V0IHNlY3VyZSBrZXlzIGFuZCBzZXR1cCBrZXkgY29tcGFyZSBjb3VudC4gVGhlIHNlY3VyZSBrZXkgYWxzbyBjYW4gcHJvdGVjdCB1c2VyIGNvbmZpZy4KKyAgKi8KK2ludDMyX3QgIEZNQ19TZXRTUEtleSh1aW50MzJfdCBhdTMyS2V5WzNdLCB1aW50MzJfdCB1MzJLcG1heCwgdWludDMyX3QgdTMyS2VtYXgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBpMzJMb2NrQ09ORklHLCBjb25zdCBpbnQzMl90IGkzMkxvY2tTUFJPTSkKK3sKKyAgICB1aW50MzJfdCAgbG9ja19jdHJsID0gMFVMOworICAgIHVpbnQzMl90ICB1MzJLZXlTdHM7CisgICAgaW50MzJfdCAgIHJldCA9IDA7CisKKyAgICBpZihGTUMtPktQS0VZU1RTICE9IDB4MjAwVUwpCisgICAgeworICAgICAgICByZXQgPSAtMTsKKyAgICB9CisKKyAgICBpZihGTUNfRXJhc2UoRk1DX0tQUk9NX0JBU0UpKQorICAgIHsKKyAgICAgICAgcmV0ID0gLTI7CisgICAgfQorCisgICAgaWYoRk1DX0VyYXNlKEZNQ19LUFJPTV9CQVNFICsgMHgyMDBVTCkpCisgICAgeworICAgICAgICByZXQgPSAtMzsKKyAgICB9CisKKyAgICBpZighaTMyTG9ja0NPTkZJRykKKyAgICB7CisgICAgICAgIGxvY2tfY3RybCB8PSAweDFVTDsKKyAgICB9CisKKyAgICBpZighaTMyTG9ja1NQUk9NKQorICAgIHsKKyAgICAgICAgbG9ja19jdHJsIHw9IDB4MlVMOworICAgIH0KKworICAgIGlmKHJldCA9PSAwKQorICAgIHsKKyAgICAgICAgRk1DX1dyaXRlKEZNQ19LUFJPTV9CQVNFLCBhdTMyS2V5WzBdKTsKKyAgICAgICAgRk1DX1dyaXRlKEZNQ19LUFJPTV9CQVNFICsgMHg0VUwsIGF1MzJLZXlbMV0pOworICAgICAgICBGTUNfV3JpdGUoRk1DX0tQUk9NX0JBU0UgKyAweDhVTCwgYXUzMktleVsyXSk7CisgICAgICAgIEZNQ19Xcml0ZShGTUNfS1BST01fQkFTRSArIDB4Q1VMLCB1MzJLcG1heCk7CisgICAgICAgIEZNQ19Xcml0ZShGTUNfS1BST01fQkFTRSArIDB4MTBVTCwgdTMyS2VtYXgpOworICAgICAgICBGTUNfV3JpdGUoRk1DX0tQUk9NX0JBU0UgKyAweDE0VUwsIGxvY2tfY3RybCk7CisKKyAgICAgICAgd2hpbGUoRk1DLT5LUEtFWVNUUyAmIEZNQ19LUEtFWVNUU19LRVlCVVNZX01zaykgeyB9CisKKyAgICAgICAgdTMyS2V5U3RzID0gRk1DLT5LUEtFWVNUUzsKKworICAgICAgICBpZighKHUzMktleVN0cyAmIEZNQ19LUEtFWVNUU19LRVlMT0NLX01zaykpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNlY3VyaXR5IGtleSBsb2NrIGZhaWxlZCEgKi8KKyAgICAgICAgICAgIHJldCA9IC00OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKGkzMkxvY2tDT05GSUcgJiYgKCEodTMyS2V5U3RzICYgRk1DX0tQS0VZU1RTX0NGR0ZMQUdfTXNrKSkpIHx8CisgICAgICAgICAgICAgICAgKCghaTMyTG9ja0NPTkZJRykgJiYgKHUzMktleVN0cyAmIEZNQ19LUEtFWVNUU19DRkdGTEFHX01zaykpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDT05GSUcgbG9jayBmYWlsZWQhICovCisgICAgICAgICAgICByZXQgPSAtNTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCgoRk1DLT5LUENOVCAmIEZNQ19LUENOVF9LUE1BWF9Nc2spID4+IEZNQ19LUENOVF9LUE1BWF9Qb3MpICE9IHUzMktwbWF4KQorICAgICAgICB7CisgICAgICAgICAgICAvKiBLUE1BWCBmYWlsZWQhICovCisgICAgICAgICAgICByZXQgPSAtNzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCgoRk1DLT5LUEtFWUNOVCAmIEZNQ19LUEtFWUNOVF9LUEtFTUFYX01zaykgPj4gRk1DX0tQS0VZQ05UX0tQS0VNQVhfUG9zKSAhPSB1MzJLZW1heCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogS0VNQVggZmFpbGVkISAqLworICAgICAgICAgICAgcmV0ID0gLTg7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgV3JpdGUgYSB3b3JkIGJ5dGVzIHRvIGZsYXNoLgorICAqCisgICogQHBhcmFtW2luXSAgdTMyQWRkciBBZGRyZXNzIG9mIHRoZSBmbGFzaCBsb2NhdGlvbiB0byBiZSBwcm9ncmFtbWVkLgorICAqICAgICAgICAgICAgIEl0IG11c3QgYmUgYSB3b3JkIGFsaWduZWQgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dICB1MzJEYXRhIFRoZSB3b3JkIGRhdGEgdG8gYmUgcHJvZ3JhbW1lZC4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEAgZGV0YWlscyAgIEV4ZWN1dGUgSVNQIEZNQ19JU1BDTURfUFJPR1JBTSB0byBwcm9ncmFtIGEgd29yZCB0byBmbGFzaC4KKyAgKi8KK3ZvaWQgRk1DX1dyaXRlKHVpbnQzMl90IHUzMkFkZHIsIHVpbnQzMl90IHUzMkRhdGEpCit7CisgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1BST0dSQU07CisgICAgRk1DLT5JU1BBRERSID0gdTMyQWRkcjsKKyAgICBGTUMtPklTUERBVCA9IHUzMkRhdGE7CisgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKyAgICB3aGlsZShGTUMtPklTUFRSRyAmIEZNQ19JU1BUUkdfSVNQR09fTXNrKSB7IH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgV3JpdGUgYSBkb3VibGUtd29yZCBieXRlcyB0byBmbGFzaAorICAqCisgICogQHBhcmFtW2luXSAgdTMyYWRkciBBZGRyZXNzIG9mIHRoZSBmbGFzaCBsb2NhdGlvbiB0byBiZSBwcm9ncmFtbWVkLgorICAqICAgICAgICAgICAgIEl0IG11c3QgYmUgYSBkb3VibGUtd29yZCBhbGlnbmVkIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSAgdTMyZGF0YTAgICBUaGUgd29yZCBkYXRhIHRvIGJlIHByb2dyYW1tZWQgdG8gZmxhc2ggYWRkcmVzcyB1MzJhZGRyLgorICAqIEBwYXJhbVtpbl0gIHUzMmRhdGExICAgVGhlIHdvcmQgZGF0YSB0byBiZSBwcm9ncmFtbWVkIHRvIGZsYXNoIGFkZHJlc3MgdTMyYWRkcis0LgorICAqCisgICogQHJldHVybiAgICAgMCAgIFN1Y2Nlc3MKKyAgKiBAcmV0dXJuICAgICAtMSAgRmFpbGVkCisgICoKKyAgKiBAIGRldGFpbHMgICBFeGVjdXRlIElTUCBGTUNfSVNQQ01EX1BST0dSQU1fNjQgdG8gcHJvZ3JhbSBhIGRvdWJsZS13b3JkIHRvIGZsYXNoLgorICAqLworaW50MzJfdCBGTUNfV3JpdGU4Qnl0ZXModWludDMyX3QgdTMyYWRkciwgdWludDMyX3QgdTMyZGF0YTAsIHVpbnQzMl90IHUzMmRhdGExKQoreworICAgIGludDMyX3QgIHJldCA9IDA7CisKKyAgICBGTUMtPklTUENNRCAgPSBGTUNfSVNQQ01EX1BST0dSQU1fNjQ7CisgICAgRk1DLT5JU1BBRERSID0gdTMyYWRkcjsKKyAgICBGTUMtPk1QREFUMCAgPSB1MzJkYXRhMDsKKyAgICBGTUMtPk1QREFUMSAgPSB1MzJkYXRhMTsKKyAgICBGTUMtPklTUFRSRyAgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKworICAgIHdoaWxlKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JU1BCVVNZX01zaykgeyB9CisKKyAgICBpZihGTUMtPklTUFNUUyAmIEZNQ19JU1BTVFNfSVNQRkZfTXNrKQorICAgIHsKKyAgICAgICAgRk1DLT5JU1BTVFMgfD0gRk1DX0lTUFNUU19JU1BGRl9Nc2s7CisgICAgICAgIHJldCA9IC0xOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgICAgV3JpdGUgVXNlciBDb25maWd1cmF0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICBhdTMyQ29uZmlnW10gVGhlIHdvcmQgYnVmZmVyIHRvIHN0b3JlIHRoZSBVc2VyIENvbmZpZ3VyYXRpb24gZGF0YS4KKyAgKiBAcGFyYW1baW5dICB1MzJDb3VudCBUaGUgd29yZCBjb3VudCB0byBwcm9ncmFtIHRvIFVzZXIgQ29uZmlndXJhdGlvbi4KKyAgKgorICAqIEByZXR2YWwgICAgIDAgU3VjY2VzcworICAqIEByZXR2YWwgICAgLTEgRmFpbGVkCisgICoKKyAgKiBAZGV0YWlscyAgVXNlciBtdXN0IGVuYWJsZSBVc2VyIENvbmZpZ3VyYXRpb24gdXBkYXRlIGJlZm9yZSB3cml0aW5nIGl0LgorICAqICAgICAgICAgICBVc2VyIG11c3QgZXJhc2UgVXNlciBDb25maWd1cmF0aW9uIGJlZm9yZSB3cml0aW5nIGl0LgorICAqICAgICAgICAgICBVc2VyIENvbmZpZ3VyYXRpb24gaXMgYWxzbyBiZSBwYWdlIGVyYXNlLiBVc2VyIG5lZWRzIHRvIGJhY2t1cCBuZWNlc3NhcnkgZGF0YQorICAqICAgICAgICAgICBiZWZvcmUgZXJhc2UgVXNlciBDb25maWd1cmF0aW9uLgorICAqLworaW50MzJfdCBGTUNfV3JpdGVDb25maWcodWludDMyX3QgYXUzMkNvbmZpZ1tdLCB1aW50MzJfdCB1MzJDb3VudCkKK3sKKyAgICBpbnQzMl90ICByZXQgPSAwOworICAgIHVpbnQzMl90IGk7CisKKyAgICBGTUNfRU5BQkxFX0NGR19VUERBVEUoKTsKKyAgICBmb3IoaSA9IDB1OyBpIDwgdTMyQ291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIEZNQ19Xcml0ZShGTUNfQ09ORklHX0JBU0UgKyBpICogNHUsIGF1MzJDb25maWdbaV0pOworICAgICAgICBpZihGTUNfUmVhZChGTUNfQ09ORklHX0JBU0UgKyBpICogNHUpICE9IGF1MzJDb25maWdbaV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICB9CisgICAgfQorICAgIEZNQ19ESVNBQkxFX0NGR19VUERBVEUoKTsKKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSBNdWx0aS1Xb3JkIGJ5dGVzIHRvIGZsYXNoCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJBZGRyICAgIFN0YXJ0IGZsYXNoIGFkZHJlc3MgaW4gQVBST00gd2hlcmUgdGhlIGRhdGEgY2h1bmsgdG8gYmUgcHJvZ3JhbW1lZCBpbnRvLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhZGRyZXNzIG11c3QgYmUgOC1ieXRlcyBhbGlnbmVkIHRvIGZsYXNoIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSAgcHUzMkJ1ZiAgICBCdWZmZXIgdGhhdCBjYXJyeSB0aGUgZGF0YSBjaHVuay4KKyAgKiBAcGFyYW1baW5dICB1MzJMZW4gICAgIExlbmd0aCBvZiB0aGUgZGF0YSBjaHVuayBpbiBieXRlcy4KKyAgKgorICAqIEByZXR2YWwgICAgID49MCAgTnVtYmVyIG9mIGRhdGEgYnl0ZXMgd2VyZSBwcm9ncmFtbWVkLgorICAqIEByZXR1cm4gICAgIC0xICAgSW52YWxpZCBhZGRyZXNzLgorICAqCisgICogQGRldGFpbHMgICAgIFByb2dyYW0gTXVsdGktV29yZCBkYXRhIGludG8gc3BlY2lmaWVkIGFkZHJlc3Mgb2YgZmxhc2guCisgICovCisKK2ludDMyX3QgRk1DX1dyaXRlTXVsdGlwbGUodWludDMyX3QgdTMyQWRkciwgdWludDMyX3QgcHUzMkJ1ZltdLCB1aW50MzJfdCB1MzJMZW4pCit7CisKKyAgICB1aW50MzJfdCBpLCBpZHgsIHUzMk9uUHJvZzsKKyAgICBpbnQzMl90IGVyciwgcmV0dmFsID0gMDsKKworICAgIGlmKCh1MzJBZGRyID49IEZNQ19BUFJPTV9FTkQpIHx8ICgodTMyQWRkciAlIDgpICE9IDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlkeCA9IDB1OworICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9QUk9HUkFNX01VTDsKKyAgICBGTUMtPklTUEFERFIgPSB1MzJBZGRyOworICAgIHJldHZhbCArPSAxNjsKKyAgICBkbworICAgIHsKKyAgICAgICAgZXJyID0gMDsKKyAgICAgICAgdTMyT25Qcm9nID0gMXU7CisgICAgICAgIEZNQy0+TVBEQVQwID0gcHUzMkJ1ZltpZHggKyAwdV07CisgICAgICAgIEZNQy0+TVBEQVQxID0gcHUzMkJ1ZltpZHggKyAxdV07CisgICAgICAgIEZNQy0+TVBEQVQyID0gcHUzMkJ1ZltpZHggKyAydV07CisgICAgICAgIEZNQy0+TVBEQVQzID0gcHUzMkJ1ZltpZHggKyAzdV07CisgICAgICAgIEZNQy0+SVNQVFJHID0gMHgxdTsKKyAgICAgICAgaWR4ICs9IDR1OworCisgICAgICAgIGZvcihpID0gaWR4OyBpIDwgKHUzMkxlbiAvIDR1KTsgaSArPSA0dSkgLyogTWF4IGRhdGEgbGVuZ3RoIGlzIDI1NiBieXRlcyAoNTEyLzQgd29yZHMpKi8KKyAgICAgICAgeworICAgICAgICAgICAgX19zZXRfUFJJTUFTSygxdSk7IC8qIE1hc2sgaW50ZXJydXB0IHRvIGF2b2lkIHN0YXR1cyBjaGVjayBjb2hlcmVuY2UgZXJyb3IqLworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigoRk1DLT5NUFNUUyAmIEZNQ19NUFNUU19NUEJVU1lfTXNrKSA9PSAwdSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIF9fc2V0X1BSSU1BU0soMHUpOworCisgICAgICAgICAgICAgICAgICAgIEZNQy0+SVNQQUREUiA9IEZNQy0+TVBBRERSICYgKH4weGZ1bCk7CisgICAgICAgICAgICAgICAgICAgIGlkeCA9IChGTUMtPklTUEFERFIgLSB1MzJBZGRyKSAvIDR1OworICAgICAgICAgICAgICAgICAgICBlcnIgPSAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSgoRk1DLT5NUFNUUyAmICgzdSA8PCBGTUNfTVBTVFNfRDBfUG9zKSkgJiYgKGVyciA9PSAwKSk7CisKKyAgICAgICAgICAgIGlmKGVyciA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHZhbCArPSA4OworCisgICAgICAgICAgICAgICAgLyogVXBkYXRlIG5ldyBkYXRhIGZvciBEMCAqLworICAgICAgICAgICAgICAgIEZNQy0+TVBEQVQwID0gcHUzMkJ1ZltpXTsKKyAgICAgICAgICAgICAgICBGTUMtPk1QREFUMSA9IHB1MzJCdWZbaSArIDF1XTsKKyAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoKEZNQy0+TVBTVFMgJiBGTUNfTVBTVFNfTVBCVVNZX01zaykgPT0gMHUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fc2V0X1BSSU1BU0soMHUpOworICAgICAgICAgICAgICAgICAgICAgICAgRk1DLT5JU1BBRERSID0gRk1DLT5NUEFERFIgJiAofjB4ZnVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IChGTUMtPklTUEFERFIgLSB1MzJBZGRyKSAvIDR1OworICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2hpbGUoKEZNQy0+TVBTVFMgJiAoM3UgPDwgRk1DX01QU1RTX0QyX1BvcykpICYmIChlcnIgPT0gMCkpOworCisgICAgICAgICAgICAgICAgaWYoZXJyID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR2YWwgKz0gODsKKworICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgbmV3IGRhdGEgZm9yIEQyKi8KKyAgICAgICAgICAgICAgICAgICAgRk1DLT5NUERBVDIgPSBwdTMyQnVmW2kgKyAydV07CisgICAgICAgICAgICAgICAgICAgIEZNQy0+TVBEQVQzID0gcHUzMkJ1ZltpICsgM3VdOworICAgICAgICAgICAgICAgICAgICBfX3NldF9QUklNQVNLKDB1KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKGVyciA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYoZXJyID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMk9uUHJvZyA9IDB1OworICAgICAgICAgICAgd2hpbGUoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lTUEJVU1lfTXNrKSB7fQorICAgICAgICB9CisgICAgfQorICAgIHdoaWxlKHUzMk9uUHJvZyk7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgIFdyaXRlIGRhdGEgdG8gT1RQCisgICoKKyAgKiBAcGFyYW1baW5dIHUzMk90cE51bSAgICBUaGUgT1RQIG51bWJlcigwfjI1NSkuCisgICogQHBhcmFtW2luXSB1MzJMb3dXb3JkICAgTG93IHdvcmQgb2YgdGhlIDY0LWJpdHMgZGF0YS4KKyAgKiBAcGFyYW1baW5dIHUzMkhpZ2hXb3JkICAgSGlnaCB3b3JkIG9mIHRoZSA2NC1iaXRzIGRhdGEuCisgICoKKyAgKiBAcmV0dmFsICAgIDAgICBTdWNjZXNzCisgICogQHJldHZhbCAgICAtMSAgUHJvZ3JhbSBmYWlsZWQuCisgICogQHJldHZhbCAgICAtMiAgSW52YWxpZCBPVFAgbnVtYmVyLgorICAqCisgICogQGRldGFpbHMgIFByb2dyYW0gYSA2NC1iaXRzIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBPVFAuCisgICovCitpbnQzMl90IEZNQ19Xcml0ZV9PVFAodWludDMyX3QgdTMyT3RwTnVtLCB1aW50MzJfdCB1MzJMb3dXb3JkLCB1aW50MzJfdCB1MzJIaWdoV29yZCkKK3sKKyAgICBpbnQzMl90ICByZXQgPSAwOworCisgICAgaWYodTMyT3RwTnVtID4gMjU1VUwpCisgICAgeworICAgICAgICByZXQgPSAtMjsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisgICAgICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9QUk9HUkFNOworICAgICAgICBGTUMtPklTUEFERFIgPSBGTUNfT1RQX0JBU0UgKyB1MzJPdHBOdW0gKiA4VUw7CisgICAgICAgIEZNQy0+SVNQREFUID0gdTMyTG93V29yZDsKKyAgICAgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKworICAgICAgICB3aGlsZShGTUMtPklTUFRSRyAmIEZNQ19JU1BUUkdfSVNQR09fTXNrKSB7IH0KKworICAgICAgICBpZihGTUMtPklTUFNUUyAmIEZNQ19JU1BTVFNfSVNQRkZfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICBGTUMtPklTUFNUUyB8PSBGTUNfSVNQU1RTX0lTUEZGX01zazsKKyAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICB9CisgICAgfQorCisgICAgaWYocmV0ID09IDApCisgICAgeworICAgICAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUFJPR1JBTTsKKyAgICAgICAgRk1DLT5JU1BBRERSID0gRk1DX09UUF9CQVNFICsgdTMyT3RwTnVtICogOFVMICsgNFVMOworICAgICAgICBGTUMtPklTUERBVCA9IHUzMkhpZ2hXb3JkOworICAgICAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworCisgICAgICAgIHdoaWxlKEZNQy0+SVNQVFJHICYgRk1DX0lTUFRSR19JU1BHT19Nc2spIHsgfQorCisgICAgICAgIGlmKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JU1BGRl9Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIEZNQy0+SVNQU1RTIHw9IEZNQ19JU1BTVFNfSVNQRkZfTXNrOworICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEZNQ19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBGTUNfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2dwaW8uYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDZkYWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZ3Bpby5jCkBAIC0wLDAgKzEsMTg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZ3Bpby5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgR2VuZXJhbCBQdXJwb3NlIEkvTyAoR1BJTykgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBHUElPX0RyaXZlciBHUElPIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEdQSU9fRVhQT1JURURfRlVOQ1RJT05TIEdQSU8gRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAqIEBicmllZiAgICAgICBTZXQgR1BJTyBvcGVyYXRpb24gbW9kZQorICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMlBpbk1hc2sgIFRoZSBzaW5nbGUgb3IgbXVsdGlwbGUgcGlucyBvZiBzcGVjaWZpZWQgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNSBmb3IgUEEsIFBCIGFuZCBQRS4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTMgZm9yIFBDLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNCBmb3IgUEQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDExIGZvciBQRi4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQyIH4gQklUMywgQklUOSB+IEJJVDE1IGZvciBQRy4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQ0IH4gQklUMTEgZm9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMk1vZGUgICAgIE9wZXJhdGlvbiBtb2RlLiBJdCBjb3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX01PREVfSU5QVVQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19NT0RFX09VVFBVVAorICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX01PREVfT1BFTl9EUkFJTgorICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX01PREVfUVVBU0kKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHNwZWNpZmllZCBHUElPIG9wZXJhdGlvbiBtb2RlLgorICovCit2b2lkIEdQSU9fU2V0TW9kZShHUElPX1QgKnBvcnQsIHVpbnQzMl90IHUzMlBpbk1hc2ssIHVpbnQzMl90IHUzMk1vZGUpCit7CisgICAgdWludDMyX3QgdTMySWR4OworCisgICAgZm9yKHUzMklkeCA9IDB1bDsgdTMySWR4IDwgR1BJT19QSU5fTUFYOyB1MzJJZHgrKykKKyAgICB7CisgICAgICAgIGlmKCh1MzJQaW5NYXNrICYgKDF1bCA8PCB1MzJJZHgpKSA9PSAoMXVsIDw8IHUzMklkeCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBvcnQtPk1PREUgPSAocG9ydC0+TU9ERSAmIH4oMHgzdWwgPDwgKHUzMklkeCA8PCAxKSkpIHwgKHUzMk1vZGUgPDwgKHUzMklkeCA8PCAxKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIEVuYWJsZSBHUElPIGludGVycnVwdAorICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICAgICAgR1BJTyBwb3J0LiBJdCBjb3VsZCBiZSBQQSwgUEIsIFBDLCBQRCwgUEUsIFBGLCBQRyBvciBQSC4KKyAqIEBwYXJhbVtpbl0gICB1MzJQaW4gICAgICAgICAgVGhlIHBpbiBvZiBzcGVjaWZpZWQgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSAwIH4gMTUgZm9yIFBBLCBQQiBhbmQgUEUuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDAgfiAxMyBmb3IgUEMgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSAwIH4gMTQgZm9yIFBEIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMCB+IDExIGZvciBQRiBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDIgfiA0LCA5IH4gMTUgZm9yIFBHIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgNCB+IDExIGZvciBQSCBHUElPIHBvcnQuCisgKiBAcGFyYW1baW5dICAgdTMySW50QXR0cmlicyAgIFRoZSBpbnRlcnJ1cHQgYXR0cmlidXRlIG9mIHNwZWNpZmllZCBHUElPIHBpbi4gSXQgY291bGQgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fSU5UX1JJU0lORworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19JTlRfRkFMTElORworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19JTlRfQk9USF9FREdFCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0lOVF9ISUdICisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0lOVF9MT1cKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHNwZWNpZmllZCBHUElPIHBpbiBpbnRlcnJ1cHQuCisgKi8KK3ZvaWQgR1BJT19FbmFibGVJbnQoR1BJT19UICpwb3J0LCB1aW50MzJfdCB1MzJQaW4sIHVpbnQzMl90IHUzMkludEF0dHJpYnMpCit7CisgICAgLyogQ29uZmlndXJlIGludGVycnVwdCBtb2RlIG9mIHNwZWNpZmllZCBwaW4gKi8KKyAgICBwb3J0LT5JTlRUWVBFID0gKHBvcnQtPklOVFRZUEUgJiB+KDF1bCA8PCB1MzJQaW4pKSB8ICgoKHUzMkludEF0dHJpYnMgPj4gMjQpICYgMHhGRlVMKSA8PCB1MzJQaW4pOworCisgICAgLyogRW5hYmxlIGludGVycnVwdCBmdW5jdGlvbiBvZiBzcGVjaWZpZWQgcGluICovCisgICAgcG9ydC0+SU5URU4gPSAocG9ydC0+SU5URU4gJiB+KDB4MDAwMTAwMDF1bCA8PCB1MzJQaW4pKSB8ICgodTMySW50QXR0cmlicyAmIDB4RkZGRkZGVUwpIDw8IHUzMlBpbik7Cit9CisKKworLyoqCisgKiBAYnJpZWYgICAgICAgRGlzYWJsZSBHUElPIGludGVycnVwdAorICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMlBpbiAgICAgIFRoZSBwaW4gb2Ygc3BlY2lmaWVkIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSAwIH4gMTUgZm9yIFBBLCBQQiBhbmQgUEUuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMCB+IDEzIGZvciBQQyBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMCB+IDE0IGZvciBQRCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMCB+IDExIGZvciBQRiBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMiB+IDQsIDkgfiAxNSBmb3IgUEcgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDQgfiAxMSBmb3IgUEggR1BJTyBwb3J0LgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgc3BlY2lmaWVkIEdQSU8gcGluIGludGVycnVwdC4KKyAqLwordm9pZCBHUElPX0Rpc2FibGVJbnQoR1BJT19UICpwb3J0LCB1aW50MzJfdCB1MzJQaW4pCit7CisgICAgLyogQ29uZmlndXJlIGludGVycnVwdCBtb2RlIG9mIHNwZWNpZmllZCBwaW4gKi8KKyAgICBwb3J0LT5JTlRUWVBFICY9IH4oMVVMIDw8IHUzMlBpbik7CisKKyAgICAvKiBEaXNhYmxlIGludGVycnVwdCBmdW5jdGlvbiBvZiBzcGVjaWZpZWQgcGluICovCisgICAgcG9ydC0+SU5URU4gJj0gfigoMHgwMDAxMDAwMVVMKSA8PCB1MzJQaW4pOworfQorCisvKioKKyAqIEBicmllZiAgICAgICBTZXQgR1BJTyBzbGV3IHJhdGUgY29udHJvbAorICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMlBpbk1hc2sgIFRoZSBzaW5nbGUgb3IgbXVsdGlwbGUgcGlucyBvZiBzcGVjaWZpZWQgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNSBmb3IgUEEsIFBCIGFuZCBQRS4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTMgZm9yIFBDLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNCBmb3IgUEQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDExIGZvciBQRi4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQyIH4gQklUMywgQklUOSB+IEJJVDE1IGZvciBQRy4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQ0IH4gQklUMTEgZm9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMk1vZGUgICAgIFNsZXcgcmF0ZSBtb2RlLiAgSXQgY291bGQgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19TTEVXQ1RMX05PUk1BTCAobWF4aW11bSA0MCBNSHogYXQgMi43VikKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19TTEVXQ1RMX0hJR0ggKG1heGltdW0gODAgTUh6IGF0IDIuN1YpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fU0xFV0NUTF9GQVNUIChtYXhpbXVtIDEwMCBNSHogYXQgMi43VikKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHNwZWNpZmllZCBHUElPIG9wZXJhdGlvbiBtb2RlLgorICovCit2b2lkIEdQSU9fU2V0U2xld0N0bChHUElPX1QgKnBvcnQsIHVpbnQzMl90IHUzMlBpbk1hc2ssIHVpbnQzMl90IHUzMk1vZGUpCit7CisgICAgdWludDMyX3QgdTMySWR4OworCisgICAgZm9yKHUzMklkeCA9IDB1bDsgdTMySWR4IDwgR1BJT19QSU5fTUFYOyB1MzJJZHgrKykKKyAgICB7CisgICAgICAgIGlmKHUzMlBpbk1hc2sgJiAoMXVsIDw8IHUzMklkeCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBvcnQtPlNMRVdDVEwgPSAocG9ydC0+U0xFV0NUTCAmIH4oMHgzdWwgPDwgKHUzMklkeCA8PCAxKSkpIHwgKHUzMk1vZGUgPDwgKHUzMklkeCA8PCAxKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBHUElPIFB1bGwtdXAgYW5kIFB1bGwtZG93biBjb250cm9sCisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgUEEsIFBCLCBQQywgUEQsIFBFLCBQRiwgUEcgb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyUGluTWFzayAgVGhlIHNpbmdsZSBvciBtdWx0aXBsZSBwaW5zIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE1IGZvciBQQSwgUEIgYW5kIFBFLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMyBmb3IgUEMuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE0IGZvciBQRC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTEgZm9yIFBGLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDIgfiBCSVQzLCBCSVQ5IH4gQklUMTUgZm9yIFBHLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDQgfiBCSVQxMSBmb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyTW9kZSAgICAgVGhlIHBpbiBtb2RlIG9mIHNwZWNpZmllZCBHUElPIHBpbi4gSXQgY291bGQgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19QVVNFTF9ESVNBQkxFCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fUFVTRUxfUFVMTF9VUAorICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX1BVU0VMX1BVTExfRE9XTgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFNldCB0aGUgcGluIG1vZGUgb2Ygc3BlY2lmaWVkIEdQSU8gcGluLgorICovCit2b2lkIEdQSU9fU2V0UHVsbEN0bChHUElPX1QgKnBvcnQsIHVpbnQzMl90IHUzMlBpbk1hc2ssIHVpbnQzMl90IHUzMk1vZGUpCit7CisgICAgdWludDMyX3QgdTMySWR4OworCisgICAgZm9yKHUzMklkeCA9IDB1bDsgdTMySWR4IDwgR1BJT19QSU5fTUFYOyB1MzJJZHgrKykKKyAgICB7CisgICAgICAgIGlmKHUzMlBpbk1hc2sgJiAoMXVsIDw8IHUzMklkeCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBvcnQtPlBVU0VMID0gKHBvcnQtPlBVU0VMICYgfigweDN1bCA8PCAodTMySWR4IDw8IDEpKSkgfCAodTMyTW9kZSA8PCAodTMySWR4IDw8IDEpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBHUElPX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEdQSU9fRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2kyYy5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3YWQ4NQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2kyYy5jCkBAIC0wLDAgKzEsMTQ2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGkyYy5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqICRSZXZpc2lvbjogMiAkCisgKiAkRGF0ZTogMTYvMDgvMDIgNjowMnAgJAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBJMkMgU2VyaWFsIEludGVyZmFjZSBDb250cm9sbGVyKEkyQykgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgSTJDX0RyaXZlciBJMkMgRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBJMkNfRVhQT1JURURfRlVOQ1RJT05TIEkyQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBzcGVjaWZ5IEkyQyBDb250cm9sbGVyIGFuZCBzZXQgQ2xvY2sgRGl2aWRlcgorICAqCisgICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICAqIEBwYXJhbVtpbl0gIHUzMkJ1c0Nsb2NrIFRoZSB0YXJnZXQgSTJDIGJ1cyBjbG9jayBpbiBIegorICAqCisgICogQHJldHVybiAgICAgQWN0dWFsIEkyQyBidXMgY2xvY2sgZnJlcXVlbmN5CisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gZW5hYmxlIHRoZSBzcGVjaWZ5IEkyQyBDb250cm9sbGVyIGFuZCBzZXQgcHJvcGVyIENsb2NrIERpdmlkZXIKKyAgKiAgICAgICAgICAgICBpbiBJMkMgQ0xPQ0sgRElWSURFRCBSRUdJU1RFUiAoSTJDTEspIGFjY29yZGluZyB0byB0aGUgdGFyZ2V0IEkyQyBCdXMgY2xvY2suCisgICogICAgICAgICAgICAgSTJDIEJ1cyBjbG9jayA9IFBDTEsgLyAoNCooZGl2aWRlcisxKS4KKyAgKgorICAqLwordWludDMyX3QgSTJDX09wZW4oSTJDX1QgKmkyYywgdWludDMyX3QgdTMyQnVzQ2xvY2spCit7CisgICAgdWludDMyX3QgdTMyRGl2OworICAgIHVpbnQzMl90IHUzMlBjbGs7CisKKyAgICBpZigoaTJjID09IEkyQzEpIHx8IChpMmMgPT0gSTJDMV9OUykpCisgICAgeworICAgICAgICB1MzJQY2xrID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJQY2xrID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgIH0KKworICAgIHUzMkRpdiA9ICh1aW50MzJfdCkoKCh1MzJQY2xrICogMTB1KSAvICh1MzJCdXNDbG9jayAqIDR1KSArIDV1KSAvIDEwdSAtIDF1KTsgLyogQ29tcHV0ZSBwcm9wZXIgZGl2aWRlciBmb3IgSTJDIGNsb2NrICovCisgICAgaTJjLT5DTEtESVYgPSB1MzJEaXY7CisKKyAgICAvKiBFbmFibGUgSTJDICovCisgICAgaTJjLT5DVEwwIHw9IEkyQ19DVEwwX0kyQ0VOX01zazsKKworICAgIHJldHVybiAodTMyUGNsayAvICgodTMyRGl2ICsgMXUpIDw8IDJ1KSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgc3BlY2lmeSBJMkMgQ29udHJvbGxlcgorICAqCisgICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICAgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBSZXNldCBJMkMgQ29udHJvbGxlciBhbmQgZGlzYWJsZSBzcGVjaWZ5IEkyQyBwb3J0LgorICAgICoKKyAgKi8KKwordm9pZCBJMkNfQ2xvc2UoSTJDX1QgKmkyYykKK3sKKyAgICBpZighKF9fUEMoKSAmIE5TX09GRlNFVCkpCisgICAgeworICAgICAgICAvKiBSZXNldCBJMkMgQ29udHJvbGxlciAqLworICAgICAgICBpZihpMmMgPT0gSTJDMCkKKyAgICAgICAgeworICAgICAgICAgICAgU1lTLT5JUFJTVDEgfD0gU1lTX0lQUlNUMV9JMkMwUlNUX01zazsKKyAgICAgICAgICAgIFNZUy0+SVBSU1QxICY9IH5TWVNfSVBSU1QxX0kyQzBSU1RfTXNrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoaTJjID09IEkyQzEpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNZUy0+SVBSU1QxIHw9IFNZU19JUFJTVDFfSTJDMVJTVF9Nc2s7CisgICAgICAgICAgICBTWVMtPklQUlNUMSAmPSB+U1lTX0lQUlNUMV9JMkMxUlNUX01zazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKGkyYyA9PSBJMkMyKQorICAgICAgICB7CisgICAgICAgICAgICBTWVMtPklQUlNUMSB8PSBTWVNfSVBSU1QxX0kyQzJSU1RfTXNrOworICAgICAgICAgICAgU1lTLT5JUFJTVDEgJj0gflNZU19JUFJTVDFfSTJDMlJTVF9Nc2s7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogRGlzYWJsZSBJMkMgKi8KKyAgICBpMmMtPkNUTDAgJj0gfkkyQ19DVEwwX0kyQ0VOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgVGltZS1vdXQgQ291bnRlciBmbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgICAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFdoZW4gVGltZS1vdXQgZmxhZyB3aWxsIGJlIHNldCwgdXNlIHRoaXMgZnVuY3Rpb24gdG8gY2xlYXIgSTJDIEJ1cyBUaW1lLW91dCBjb3VudGVyIGZsYWcgLgorICAgICoKKyAgKi8KK3ZvaWQgSTJDX0NsZWFyVGltZW91dEZsYWcoSTJDX1QgKmkyYykKK3sKKyAgICBpMmMtPlRPQ1RMIHw9IEkyQ19UT0NUTF9UT0lGX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IENvbnRyb2wgYml0IG9mIEkyQyBDb250cm9sbGVyCisgICoKKyAgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgICogQHBhcmFtW2luXSAgdThTdGFydCAgICAgU2V0IEkyQyBTVEFSVCBjb25kaXRpb24KKyAgKiBAcGFyYW1baW5dICB1OFN0b3AgICAgICBTZXQgSTJDIFNUT1AgY29uZGl0aW9uCisgICogQHBhcmFtW2luXSAgdThTaSAgICAgICAgQ2xlYXIgU0kgZmxhZworICAqIEBwYXJhbVtpbl0gIHU4QWNrICAgICAgIFNldCBJMkMgQUNLIGJpdAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIHNldCBJMkMgQ29udHJvbCBiaXQgb2YgSTJDIEJ1cyBwcm90b2NvbC4KKyAgKgorICAqLwordm9pZCBJMkNfVHJpZ2dlcihJMkNfVCAqaTJjLCB1aW50OF90IHU4U3RhcnQsIHVpbnQ4X3QgdThTdG9wLCB1aW50OF90IHU4U2ksIHVpbnQ4X3QgdThBY2spCit7CisgICAgdWludDMyX3QgdTMyUmVnID0gMHU7CisKKyAgICBpZih1OFN0YXJ0KQorICAgIHsKKyAgICAgICAgdTMyUmVnIHw9IEkyQ19DVExfU1RBOworICAgIH0KKyAgICBpZih1OFN0b3ApCisgICAgeworICAgICAgICB1MzJSZWcgfD0gSTJDX0NUTF9TVE87CisgICAgfQorICAgIGlmKHU4U2kpCisgICAgeworICAgICAgICB1MzJSZWcgfD0gSTJDX0NUTF9TSTsKKyAgICB9CisgICAgaWYodThBY2spCisgICAgeworICAgICAgICB1MzJSZWcgfD0gSTJDX0NUTF9BQTsKKyAgICB9CisKKyAgICBpMmMtPkNUTDAgPSAoaTJjLT5DVEwwICYgfjB4M0N1KSB8IHUzMlJlZzsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQgb2YgSTJDIENvbnRyb2xsZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBkaXNhYmxlIEkyQyBpbnRlcnJ1cHQKKyAgKgorICAqLwordm9pZCBJMkNfRGlzYWJsZUludChJMkNfVCAqaTJjKQoreworICAgIGkyYy0+Q1RMMCAmPSB+STJDX0NUTDBfSU5URU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgSW50ZXJydXB0IG9mIEkyQyBDb250cm9sbGVyCisgICoKKyAgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgZW5hYmxlIEkyQyBpbnRlcnJ1cHQKKyAgKgorICAqLwordm9pZCBJMkNfRW5hYmxlSW50KEkyQ19UICppMmMpCit7CisgICAgaTJjLT5DVEwwIHw9IEkyQ19DVEwwX0lOVEVOX01zazsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICBHZXQgSTJDIEJ1cyBDbG9jaworICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgVGhlIGFjdHVhbCBJMkMgQnVzIGNsb2NrIGluIEh6CisgKgorICogQGRldGFpbHMgICAgVG8gZ2V0IHRoZSBhY3R1YWwgSTJDIEJ1cyBDbG9jayBmcmVxdWVuY3kuCisgKi8KK3VpbnQzMl90IEkyQ19HZXRCdXNDbG9ja0ZyZXEoSTJDX1QgKmkyYykKK3sKKyAgICB1aW50MzJfdCB1MzJEaXZpZGVyID0gaTJjLT5DTEtESVY7CisgICAgdWludDMyX3QgdTMyUGNsazsKKworICAgIGlmKChpMmMgPT0gSTJDMSkgfHwgKGkyYyA9PSBJMkMxX05TKSkKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgfQorCisgICAgcmV0dXJuICh1MzJQY2xrIC8gKCh1MzJEaXZpZGVyICsgMXUpIDw8IDJ1KSk7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgU2V0IEkyQyBCdXMgQ2xvY2sKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICogQHBhcmFtW2luXSAgdTMyQnVzQ2xvY2sgIFRoZSB0YXJnZXQgSTJDIEJ1cyBDbG9jayBpbiBIegorICoKKyAqIEByZXR1cm4gICAgIFRoZSBhY3R1YWwgSTJDIEJ1cyBDbG9jayBpbiBIegorICoKKyAqIEBkZXRhaWxzICAgIFRvIHNldCB0aGUgYWN0dWFsIEkyQyBCdXMgQ2xvY2sgZnJlcXVlbmN5LgorICovCit1aW50MzJfdCBJMkNfU2V0QnVzQ2xvY2tGcmVxKEkyQ19UICppMmMsIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKQoreworICAgIHVpbnQzMl90IHUzMkRpdjsKKyAgICB1aW50MzJfdCB1MzJQY2xrOworCisgICAgaWYoKGkyYyA9PSBJMkMxKSB8fCAoaTJjID09IEkyQzFfTlMpKQorICAgIHsKKyAgICAgICAgdTMyUGNsayA9IENMS19HZXRQQ0xLMUZyZXEoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyUGNsayA9IENMS19HZXRQQ0xLMEZyZXEoKTsKKyAgICB9CisKKyAgICB1MzJEaXYgPSAodWludDMyX3QpKCgodTMyUGNsayAqIDEwdSkgLyAodTMyQnVzQ2xvY2sgKiA0dSkgKyA1dSkgLyAxMHUgLSAxdSk7IC8qIENvbXB1dGUgcHJvcGVyIGRpdmlkZXIgZm9yIEkyQyBjbG9jayAqLworICAgIGkyYy0+Q0xLRElWID0gdTMyRGl2OworCisgICAgcmV0dXJuICh1MzJQY2xrIC8gKCh1MzJEaXYgKyAxdSkgPDwgMnUpKTsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICBHZXQgSW50ZXJydXB0IEZsYWcKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIEkyQyBpbnRlcnJ1cHQgZmxhZyBzdGF0dXMKKyAqCisgKiBAZGV0YWlscyAgICBUbyBnZXQgSTJDIEJ1cyBpbnRlcnJ1cHQgZmxhZy4KKyAqLwordWludDMyX3QgSTJDX0dldEludEZsYWcoSTJDX1QgKmkyYykKK3sKKyAgICByZXR1cm4gKChpMmMtPkNUTDAgJiBJMkNfQ1RMMF9TSV9Nc2spID09IEkyQ19DVEwwX1NJX01zayA/IDF1bCA6IDB1bCk7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgR2V0IEkyQyBCdXMgU3RhdHVzIENvZGUKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIEkyQyBTdGF0dXMgQ29kZQorICoKKyAqIEBkZXRhaWxzICAgIFRvIGdldCBJMkMgQnVzIFN0YXR1cyBDb2RlLgorICovCit1aW50MzJfdCBJMkNfR2V0U3RhdHVzKEkyQ19UICppMmMpCit7CisgICAgcmV0dXJuIChpMmMtPlNUQVRVUzApOworfQorCisvKioKKyAqIEBicmllZiAgICAgIFJlYWQgYSBCeXRlIGZyb20gSTJDIEJ1cworICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgSTJDIERhdGEKKyAqCisgKiBAZGV0YWlscyAgICBUbyByZWFkIGEgYnl0ZXMgZGF0YSBmcm9tIHNwZWNpZnkgSTJDIHBvcnQuCisgKi8KK3VpbnQ4X3QgSTJDX0dldERhdGEoSTJDX1QgKmkyYykKK3sKKyAgICByZXR1cm4gKHVpbnQ4X3QpKGkyYy0+REFUKTsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICBTZW5kIGEgYnl0ZSB0byBJMkMgQnVzCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqIEBwYXJhbVtpbl0gIHU4RGF0YSAgICAgICBUaGUgZGF0YSB0byBzZW5kIHRvIEkyQyBidXMKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHdyaXRlIGEgYnl0ZSB0byBzcGVjaWZpZWQgSTJDIHBvcnQKKyAqLwordm9pZCBJMkNfU2V0RGF0YShJMkNfVCAqaTJjLCB1aW50OF90IHU4RGF0YSkKK3sKKyAgICBpMmMtPkRBVCA9IHU4RGF0YTsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICBTZXQgNy1iaXQgU2xhdmUgQWRkcmVzcyBhbmQgR0MgTW9kZQorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKiBAcGFyYW1baW5dICB1OFNsYXZlTm8gICAgU2V0IHRoZSBudW1iZXIgb2YgSTJDIGFkZHJlc3MgcmVnaXN0ZXIgKDB+MykKKyAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICA3LWJpdCBzbGF2ZSBhZGRyZXNzCisgKiBAcGFyYW1baW5dICB1OEdDTW9kZSAgICAgRW5hYmxlL0Rpc2FibGUgR0MgbW9kZSAoSTJDX0dDTU9ERV9FTkFCTEUgLyBJMkNfR0NNT0RFX0RJU0FCTEUpCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgNy1iaXQgc2xhdmUgYWRkcmVzc2VzIGluIEkyQyBTTEFWRSBBRERSRVNTIFJFR0lTVEVSIChJMkNBRERSMH4zKQorICogICAgICAgICAgICAgYW5kIGVuYWJsZSBHQyBNb2RlLgorICoKKyAqLwordm9pZCBJMkNfU2V0U2xhdmVBZGRyKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZU5vLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IHU4R0NNb2RlKQoreworICAgIHN3aXRjaCh1OFNsYXZlTm8pCisgICAgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpMmMtPkFERFIxICA9ICgodWludDMyX3QpdThTbGF2ZUFkZHIgPDwgMSkgfCB1OEdDTW9kZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpMmMtPkFERFIyICA9ICgodWludDMyX3QpdThTbGF2ZUFkZHIgPDwgMSkgfCB1OEdDTW9kZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBpMmMtPkFERFIzICA9ICgodWludDMyX3QpdThTbGF2ZUFkZHIgPDwgMSkgfCB1OEdDTW9kZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDA6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpMmMtPkFERFIwICA9ICgodWludDMyX3QpdThTbGF2ZUFkZHIgPDwgMSkgfCB1OEdDTW9kZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgICAgICBDb25maWd1cmUgdGhlIG1hc2sgYml0cyBvZiA3LWJpdCBTbGF2ZSBBZGRyZXNzCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKiBAcGFyYW1baW5dICB1OFNsYXZlTm8gICAgICAgIFNldCB0aGUgbnVtYmVyIG9mIEkyQyBhZGRyZXNzIG1hc2sgcmVnaXN0ZXIgKDB+MykKKyAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyTWFzayAgQSBieXRlIGZvciBzbGF2ZSBhZGRyZXNzIG1hc2sKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCA3LWJpdCBzbGF2ZSBhZGRyZXNzZXMuCisgKgorICovCit2b2lkIEkyQ19TZXRTbGF2ZUFkZHJNYXNrKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZU5vLCB1aW50OF90IHU4U2xhdmVBZGRyTWFzaykKK3sKKyAgICBzd2l0Y2godThTbGF2ZU5vKQorICAgIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaTJjLT5BRERSTVNLMSAgPSAodWludDMyX3QpdThTbGF2ZUFkZHJNYXNrIDw8IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaTJjLT5BRERSTVNLMiAgPSAodWludDMyX3QpdThTbGF2ZUFkZHJNYXNrIDw8IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgaTJjLT5BRERSTVNLMyAgPSAodWludDMyX3QpdThTbGF2ZUFkZHJNYXNrIDw8IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaTJjLT5BRERSTVNLMCAgPSAodWludDMyX3QpdThTbGF2ZUFkZHJNYXNrIDw8IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgRW5hYmxlIFRpbWUtb3V0IENvdW50ZXIgRnVuY3Rpb24gYW5kIHN1cHBvcnQgTG9uZyBUaW1lLW91dAorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICogQHBhcmFtW2luXSAgdThMb25nVGltZW91dCAgICBDb25maWd1cmUgRElWNCB0byBlbmFibGUgTG9uZyBUaW1lLW91dCAoMC8xKQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZSBUaW1lLW91dCBDb3VudGVyIGZ1bmN0aW9uIGFuZCBjb25maWd1cmUgRElWNCB0byBzdXBwb3J0IExvbmcKKyAqICAgICAgICAgICAgIFRpbWUtb3V0LgorICoKKyAqLwordm9pZCBJMkNfRW5hYmxlVGltZW91dChJMkNfVCAqaTJjLCB1aW50OF90IHU4TG9uZ1RpbWVvdXQpCit7CisgICAgaWYodThMb25nVGltZW91dCkKKyAgICB7CisgICAgICAgIGkyYy0+VE9DVEwgfD0gSTJDX1RPQ1RMX1RPQ0RJVjRfTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpMmMtPlRPQ1RMICY9IH5JMkNfVE9DVExfVE9DRElWNF9Nc2s7CisgICAgfQorCisgICAgaTJjLT5UT0NUTCB8PSBJMkNfVE9DVExfVE9DRU5fTXNrOworfQorCisvKioKKyAqIEBicmllZiAgICAgIERpc2FibGUgVGltZS1vdXQgQ291bnRlciBGdW5jdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRvIGRpc2FibGUgVGltZS1vdXQgQ291bnRlciBmdW5jdGlvbiBpbiBJMkNUT0MgcmVnaXN0ZXIuCisgKgorICovCit2b2lkIEkyQ19EaXNhYmxlVGltZW91dChJMkNfVCAqaTJjKQoreworICAgIGkyYy0+VE9DVEwgJj0gfkkyQ19UT0NUTF9UT0NFTl9Nc2s7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgRW5hYmxlIEkyQyBXYWtlLXVwIEZ1bmN0aW9uCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVG8gZW5hYmxlIFdha2UtdXAgZnVuY3Rpb24gb2YgSTJDIFdha2UtdXAgY29udHJvbCByZWdpc3Rlci4KKyAqCisgKi8KK3ZvaWQgSTJDX0VuYWJsZVdha2V1cChJMkNfVCAqaTJjKQoreworICAgIGkyYy0+V0tDVEwgfD0gSTJDX1dLQ1RMX1dLRU5fTXNrOworfQorCisvKioKKyAqIEBicmllZiAgICAgIERpc2FibGUgSTJDIFdha2UtdXAgRnVuY3Rpb24KKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUbyBkaXNhYmxlIFdha2UtdXAgZnVuY3Rpb24gb2YgSTJDIFdha2UtdXAgY29udHJvbCByZWdpc3Rlci4KKyAqCisgKi8KK3ZvaWQgSTJDX0Rpc2FibGVXYWtldXAoSTJDX1QgKmkyYykKK3sKKyAgICBpMmMtPldLQ1RMICY9IH5JMkNfV0tDVExfV0tFTl9Nc2s7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgVG8gZ2V0IFNNQnVzIFN0YXR1cworICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgU01CdXMgc3RhdHVzCisgKgorICogQGRldGFpbHMgICAgVG8gZ2V0IHRoZSBCdXMgTWFuYWdlbWVudCBzdGF0dXMgb2YgSTJDX0JVU1NUUyByZWdpc3RlcgorICoKKyAqLwordWludDMyX3QgSTJDX1NNQnVzR2V0U3RhdHVzKEkyQ19UICppMmMpCit7CisgICAgcmV0dXJuIChpMmMtPkJVU1NUUyk7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgQ2xlYXIgU01CdXMgSW50ZXJydXB0IEZsYWcKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqIEBwYXJhbVtpbl0gIHU4U01CdXNJbnRGbGFnICAgU3BlY2lmeSBTTUJ1cyBpbnRlcnJ1cHQgZmxhZworICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUbyBjbGVhciBmbGFncyBvZiBJMkNfQlVTU1RTIHN0YXR1cyByZWdpc3RlciBpZiBpbnRlcnJ1cHQgc2V0LgorICoKKyAqLwordm9pZCBJMkNfU01CdXNDbGVhckludGVycnVwdEZsYWcoSTJDX1QgKmkyYywgdWludDhfdCB1OFNNQnVzSW50RmxhZykKK3sKKyAgICBpMmMtPkJVU1NUUyA9IHU4U01CdXNJbnRGbGFnOworfQorCisvKioKKyAqIEBicmllZiAgICAgIFNldCBTTUJ1cyBCeXRlcyBDb3VudHMgb2YgVHJhbnNtaXNzaW9uIG9yIFJlY2VwdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICogQHBhcmFtW2luXSAgdTMyUGt0U2l6ZSAgICAgICBUcmFuc21pdCAvIFJlY2VpdmUgYnl0ZXMKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhlIHRyYW5zbWlzc2lvbiBvciByZWNlaXZlIGJ5dGUgbnVtYmVyIGluIG9uZSB0cmFuc2FjdGlvbiB3aGVuIFBFQ0VOIGlzIHNldC4gVGhlIG1heGltdW0gaXMgMjU1IGJ5dGVzLgorICoKKyAqLwordm9pZCBJMkNfU01CdXNTZXRQYWNrZXRCeXRlQ291bnQoSTJDX1QgKmkyYywgdWludDMyX3QgdTMyUGt0U2l6ZSkKK3sKKyAgICBpMmMtPlBLVFNJWkUgPSB1MzJQa3RTaXplOworfQorCisvKioKKyAqIEBicmllZiAgICAgIEluaXQgU01CdXMgSG9zdC9EZXZpY2UgTW9kZQorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICogQHBhcmFtW2luXSAgdThIb3N0RGV2aWNlICAgICBJbml0IFNNQnVzIHBvcnQgbW9kZShJMkNfU01CSF9FTkFCTEUoMSkvSTJDX1NNQkRfRU5BQkxFKDApKQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBVc2luZyBTTUJ1cyBjb21tdW5pY2F0aW9uIG11c3Qgc3BlY2lmeSB0aGUgcG9ydCBpcyBhIEhvc3Qgb3IgYSBEZXZpY2UuCisgKgorICovCit2b2lkIEkyQ19TTUJ1c09wZW4oSTJDX1QgKmkyYywgdWludDhfdCB1OEhvc3REZXZpY2UpCit7CisgICAgLyogQ2xlYXIgIEJNSEVOLCBCTURFTiBvZiBCVVNDVEwgUmVnaXN0ZXIgKi8KKyAgICBpMmMtPkJVU0NUTCAmPSAgfihJMkNfQlVTQ1RMX0JNSEVOX01zayB8IEkyQ19CVVNDVExfQk1ERU5fTXNrKTsKKworICAgIC8qIFNldCBTTUJ1cyBIb3N0L0RldmljZSBNb2RlLCBhbmQgZW5hYmxlIEJ1cyBNYW5hZ2VtZW50Ki8KKyAgICBpZih1OEhvc3REZXZpY2UgPT0gKHVpbnQ4X3QpSTJDX1NNQkhfRU5BQkxFKQorICAgIHsKKyAgICAgICAgaTJjLT5CVVNDVEwgfD0gKEkyQ19CVVNDVExfQk1IRU5fTXNrIHwgSTJDX0JVU0NUTF9CVVNFTl9Nc2spOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpMmMtPkJVU0NUTCB8PSAoSTJDX0JVU0NUTF9CTURFTl9Nc2sgfCBJMkNfQlVTQ1RMX0JVU0VOX01zayk7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiAgICAgIERpc2FibGUgU01CdXMgZnVuY3Rpb24KKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgRGlzYWJsZSBhbGwgU01CdXMgZnVuY3Rpb24gaW5jbHVkZSBCdXMgZGlzYWJsZSwgQ1JDIGNoZWNrLCBBY2tub3dsZWRnZSBieSBtYW51YWwsIEhvc3QvRGV2aWNlIE1vZGUuCisgKgorICovCit2b2lkIEkyQ19TTUJ1c0Nsb3NlKEkyQ19UICppMmMpCit7CisKKyAgICBpMmMtPkJVU0NUTCA9IDB4MDBVOworfQorCisvKioKKyAqIEBicmllZiAgICAgIEVuYWJsZSBTTUJ1cyBQRUMgVHJhbnNtaXQgRnVuY3Rpb24KKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqIEBwYXJhbVtpbl0gIHU4UEVDVHhFbiAgICAgICAgQ1JDIHRyYW5zbWl0IGVuYWJsZShQRUNUWF9FTkFCTEUpIG9yIGRpc2FibGUoUEVDVFhfRElTQUJMRSkKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgV2hlbiBlbmFibGUgQ1JDIGNoZWNrIGZ1bmN0aW9uLCB0aGUgSG9zdCBvciBEZXZpY2UgbmVlZHMgdG8gdHJhbnNtaXQgQ1JDIGJ5dGUuCisgKgorICovCit2b2lkIEkyQ19TTUJ1c1BFQ1R4RW5hYmxlKEkyQ19UICppMmMsIHVpbnQ4X3QgdThQRUNUeEVuKQoreworICAgIGkyYy0+QlVTQ1RMICY9IH5JMkNfQlVTQ1RMX1BFQ1RYRU5fTXNrOworCisgICAgaWYodThQRUNUeEVuKQorICAgIHsKKyAgICAgICAgaTJjLT5CVVNDVEwgfD0gKEkyQ19CVVNDVExfUEVDRU5fTXNrIHwgSTJDX0JVU0NUTF9QRUNUWEVOX01zayk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGkyYy0+QlVTQ1RMIHw9IEkyQ19CVVNDVExfUEVDRU5fTXNrOworICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgICAgICBHZXQgU01CdXMgQ1JDIHZhbHVlCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgQSBieXRlIGlzIHBhY2tldCBlcnJvciBjaGVjayB2YWx1ZQorICoKKyAqIEBkZXRhaWxzICAgIFRoZSBDUkMgY2hlY2sgdmFsdWUgYWZ0ZXIgYSB0cmFuc21pc3Npb24gb3IgYSByZWNlcHRpb24gYnkgY291bnQgYnkgdXNpbmcgQ1JDOAorICoKKyAqLwordWludDhfdCBJMkNfU01CdXNHZXRQRUNWYWx1ZShJMkNfVCAqaTJjKQoreworICAgIHJldHVybiAodWludDhfdClpMmMtPlBLVENSQzsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICBDYWxjdWxhdGUgVGltZS1vdXQgb2YgU01CdXMgaWRsZSBwZXJpb2QKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqIEBwYXJhbVtpbl0gIHUzMlVzICAgICAgICAgICAgICAgVGltZS1vdXQgbGVuZ3RoKHVzKQorICogQHBhcmFtW2luXSAgdTMySGNsayAgICAgICAgICBJMkMgcGVyaXBoZXJhbCBjbG9jayBmcmVxdWVuY3kKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBTTUJ1cyBUaW1lLW91dCBsZW5ndGggd2hlbiBidXMgaXMgaW4gSWRsZSBzdGF0ZS4KKyAqCisgKi8KKwordm9pZCBJMkNfU01CdXNJZGxlVGltZW91dChJMkNfVCAqaTJjLCB1aW50MzJfdCB1MzJVcywgdWludDMyX3QgdTMySGNsaykKK3sKKyAgICB1aW50MzJfdCAgdTMyRGl2LCB1MzJIY2xrS0h6OworCisgICAgaTJjLT5CVVNDVEwgfD0gSTJDX0JVU0NUTF9USURMRV9Nc2s7CisgICAgdTMySGNsa0tIeiA9IHUzMkhjbGsgLyAxMDAwVTsKKyAgICB1MzJEaXYgPSAoKCh1MzJVcyAqIHUzMkhjbGtLSHopIC8gMTAwMFUpID4+IDJVKSAtIDFVOworICAgIGlmKHUzMkRpdiA+IDI1NVUpCisgICAgeworICAgICAgICBpMmMtPkJVU1RPVVQgPSAweEZGVTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaTJjLT5CVVNUT1VUID0gdTMyRGl2OworICAgIH0KKworfQorCisvKioKKyAqIEBicmllZiAgICAgIENhbGN1bGF0ZSBUaW1lLW91dCBvZiBTTUJ1cyBhY3RpdmUgcGVyaW9kCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKiBAcGFyYW1baW5dICBtcyAgICAgICAgICAgICAgIFRpbWUtb3V0IGxlbmd0aChtcykKKyAqIEBwYXJhbVtpbl0gIHUzMlBjbGsgICAgICAgICAgcGVyaXBoZXJhbCBjbG9jayBmcmVxdWVuY3kKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBTTUJ1cyBUaW1lLW91dCBsZW5ndGggd2hlbiBidXMgaXMgaW4gYWN0aXZlIHN0YXRlLgorICogICAgICAgICAgICAgVGltZS1vdXQgbGVuZ3RoIGlzIGNhbGN1bGF0ZSB0aGUgU0NMIGxpbmUgIm9uZSBjbG9jayIgcHVsbCBsb3cgdGltaW5nLgorICoKKyAqLworCit2b2lkIEkyQ19TTUJ1c1RpbWVvdXQoSTJDX1QgKmkyYywgdWludDMyX3QgbXMsIHVpbnQzMl90IHUzMlBjbGspCit7CisgICAgdWludDMyX3QgdTMyRGl2LCB1MzJQY2xrX2tIejsKKworICAgIGkyYy0+QlVTQ1RMICY9IH5JMkNfQlVTQ1RMX1RJRExFX01zazsKKworICAgIC8qIERJVjQgZGlzYWJsZWQgKi8KKyAgICBpMmMtPlRPQ1RMICY9IH5JMkNfVE9DVExfVE9DRU5fTXNrOworICAgIHUzMlBjbGtfa0h6ID0gdTMyUGNsayAvIDEwMDBVOworICAgIHUzMkRpdiA9ICgobXMgKiB1MzJQY2xrX2tIeikgLyAoMTZVICogMTAyNFUpKSAtIDFVOworICAgIGlmKHUzMkRpdiA8PSAweEZGVSkKKyAgICB7CisgICAgICAgIGkyYy0+QlVTVE9VVCA9IHUzMkRpdjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRElWNCBlbmFibGVkICovCisgICAgICAgIGkyYy0+VE9DVEwgfD0gSTJDX1RPQ1RMX1RPQ0VOX01zazsKKyAgICAgICAgaTJjLT5CVVNUT1VUID0gKCgobXMgKiB1MzJQY2xrX2tIeikgLyAoMTZVICogMTAyNFUgKiA0VSkpIC0gMVUpICYgMHhGRlU7IC8qIFRoZSBtYXggdmFsdWUgaXMgMjU1ICovCisgICAgfQorfQorCisvKioKKyAqIEBicmllZiAgICAgIENhbGN1bGF0ZSBDdW11bGF0aXZlIENsb2NrIGxvdyBUaW1lLW91dCBvZiBTTUJ1cyBhY3RpdmUgcGVyaW9kCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKiBAcGFyYW1baW5dICBtcyAgICAgICAgICAgICAgIFRpbWUtb3V0IGxlbmd0aChtcykKKyAqIEBwYXJhbVtpbl0gIHUzMlBjbGsgICAgICAgICAgcGVyaXBoZXJhbCBjbG9jayBmcmVxdWVuY3kKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBTTUJ1cyBUaW1lLW91dCBsZW5ndGggd2hlbiBidXMgaXMgaW4gQWN0aXZlIHN0YXRlLgorICogICAgICAgICAgICAgVGltZS1vdXQgbGVuZ3RoIGlzIGNhbGN1bGF0ZSB0aGUgU0NMIGxpbmUgImNsb2NrcyIgbG93IGN1bXVsYXRpdmUgdGltaW5nLgorICoKKyAqLworCit2b2lkIEkyQ19TTUJ1c0Nsb2NrTG9UaW1lb3V0KEkyQ19UICppMmMsIHVpbnQzMl90IG1zLCB1aW50MzJfdCB1MzJQY2xrKQoreworICAgIHVpbnQzMl90IHUzMkRpdiwgdTMyUGNsa19rSHo7CisKKyAgICBpMmMtPkJVU0NUTCAmPSB+STJDX0JVU0NUTF9USURMRV9Nc2s7CisKKyAgICAvKiBESVY0IGRpc2FibGVkICovCisgICAgaTJjLT5UT0NUTCAmPSB+STJDX1RPQ1RMX1RPQ0VOX01zazsKKyAgICB1MzJQY2xrX2tIeiA9IHUzMlBjbGsgLyAxMDAwVTsKKyAgICB1MzJEaXYgPSAoKG1zICogdTMyUGNsa19rSHopIC8gKDE2VSAqIDEwMjRVKSkgLSAxVTsKKyAgICBpZih1MzJEaXYgPD0gMHhGRlUpCisgICAgeworICAgICAgICBpMmMtPkNMS1RPVVQgPSB1MzJEaXY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIERJVjQgZW5hYmxlZCAqLworICAgICAgICBpMmMtPlRPQ1RMIHw9IEkyQ19UT0NUTF9UT0NFTl9Nc2s7CisgICAgICAgIGkyYy0+Q0xLVE9VVCA9ICgoKG1zICogdTMyUGNsa19rSHopIC8gKDE2VSAqIDEwMjRVICogNFUpKSAtIDFVKSAmIDB4RkZVOyAvKiBUaGUgbWF4IHZhbHVlIGlzIDI1NSAqLworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgV3JpdGUgYSBieXRlIHRvIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqaTJjICAgICAgICAgICAgUG9pbnQgdG8gSTJDIHBlcmlwaGVyYWwKKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgdThEYXRhICAgICAgICAgICAgV3JpdGUgYSBieXRlIGRhdGEgdG8gU2xhdmUKKyAgKgorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgICAgICBXcml0ZSBkYXRhIHN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgICAxICAgICAgICAgICAgICAgV3JpdGUgZGF0YSBmYWlsLCBvciBidXMgb2NjdXJzIGVycm9yIGV2ZW50cworICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIEkyQyBNYXN0ZXIgd3JpdGUgYSBieXRlIGRhdGEgdG8gU2xhdmUuCisgICoKKyAgKi8KKwordWludDhfdCBJMkNfV3JpdGVCeXRlKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMXUsIHU4RXJyID0gMHUsIHU4Q3RybCA9IDB1OworCisgICAgSTJDX1NUQVJUKGkyYyk7CisgICAgd2hpbGUodThYZmVyaW5nICYmICh1OEVyciA9PSAwdSkpCisgICAgeworICAgICAgICBJMkNfV0FJVF9SRUFEWShpMmMpIHt9CisgICAgICAgIHN3aXRjaChJMkNfR0VUX1NUQVRVUyhpMmMpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDB4MDh1OgorICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMXUpIHwgMHgwMHUpKTsgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIEkyQ0RBVCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgxOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgQUNLICovCisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgdThEYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGRhdGEgdG8gSTJDREFUICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MjB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgIGNhc2UgMHgzMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hc3RlciB0cmFuc21pdCBkYXRhIE5BQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDI4dToKKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgzOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEkyQ19TRVRfQ09OVFJPTF9SRUcoaTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gSTJDX0NUTCByZWdpc3RlciAqLworICAgIH0KKyAgICByZXR1cm4gKHU4RXJyIHwgdThYZmVyaW5nKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIChTdWNjZXNzKS8oRmFpbCkgc3RhdHVzICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIG11bHRpIGJ5dGVzIHRvIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqaTJjICAgICAgICAgICAgUG9pbnQgdG8gSTJDIHBlcmlwaGVyYWwKKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgKmF1OERhdGEgICAgICAgICAgIFBvaW50ZXIgdG8gYXJyYXkgdG8gd3JpdGUgZGF0YSB0byBTbGF2ZQorICAqIEBwYXJhbVtpbl0gIHUzMndMZW4gICAgICAgICBIb3cgbWFueSBieXRlcyBuZWVkIHRvIHdyaXRlIHRvIFNsYXZlCisgICoKKyAgKiBAcmV0dXJuICAgICBBIGxlbmd0aCBvZiBob3cgbWFueSBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQuCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgSTJDIE1hc3RlciB3cml0ZSBtdWx0aSBieXRlcyBkYXRhIHRvIFNsYXZlLgorICAqCisgICovCisKK3VpbnQzMl90IEkyQ19Xcml0ZU11bHRpQnl0ZXMoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCBhdThEYXRhW10sIHVpbnQzMl90IHUzMndMZW4pCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxdSwgdThFcnIgPSAwdSwgdThDdHJsID0gMHU7CisgICAgdWludDMyX3QgdTMydHhMZW4gPSAwdTsKKworICAgIEkyQ19TVEFSVChpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisgICAgd2hpbGUodThYZmVyaW5nICYmICh1OEVyciA9PSAwdSkpCisgICAgeworICAgICAgICBJMkNfV0FJVF9SRUFEWShpMmMpIHt9CisgICAgICAgIHN3aXRjaChJMkNfR0VUX1NUQVRVUyhpMmMpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDB4MDh1OgorICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMXUpIHwgMHgwMHUpKTsgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIEkyQ0RBVCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgxOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgQUNLICovCisgICAgICAgICAgICBjYXNlIDB4Mjh1OgorICAgICAgICAgICAgICAgIGlmKHUzMnR4TGVuIDwgdTMyd0xlbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsIGF1OERhdGFbdTMydHhMZW4rK10pOyAgICAgICAgICAgICAgICAvKiBXcml0ZSBEYXRhIHRvIEkyQ0RBVCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwdTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MjB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgIGNhc2UgMHgzMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hc3RlciB0cmFuc21pdCBkYXRhIE5BQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDM4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBJMkNfU0VUX0NPTlRST0xfUkVHKGkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIEkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisgICAgcmV0dXJuIHUzMnR4TGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBieXRlcyBsZW5ndGggdGhhdCBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgKi8KK30KKworLyoqCisgICogQGJyaWVmICAgICAgU3BlY2lmeSBhIGJ5dGUgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgd3JpdGUgYSBieXRlIHRvIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqaTJjICAgICAgICAgICAgUG9pbnQgdG8gSTJDIHBlcmlwaGVyYWwKKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgdThEYXRhQWRkciAgICAgIFNwZWNpZnkgYSBhZGRyZXNzICgxIGJ5dGUpIG9mIGRhdGEgd3JpdGUgdG8KKyAgKiBAcGFyYW1baW5dICB1OERhdGEgICAgICAgICAgICBBIGJ5dGUgZGF0YSB0byB3cml0ZSBpdCB0byBTbGF2ZQorICAqCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgICAgIFdyaXRlIGRhdGEgc3VjY2VzcworICAqIEByZXR2YWwgICAgIDEgICAgICAgICAgICAgICBXcml0ZSBkYXRhIGZhaWwsIG9yIGJ1cyBvY2N1cnMgZXJyb3IgZXZlbnRzCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgSTJDIE1hc3RlciBzcGVjaWZ5IGEgYWRkcmVzcyB0aGF0IGRhdGEgd3JpdGUgdG8gaW4gU2xhdmUuCisgICoKKyAgKi8KKwordWludDhfdCBJMkNfV3JpdGVCeXRlT25lUmVnKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhQWRkciwgdWludDhfdCB1OERhdGEpCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxdSwgdThFcnIgPSAwdSwgdThDdHJsID0gMHU7CisgICAgdWludDMyX3QgdTMydHhMZW4gPSAwdTsKKworICAgIEkyQ19TVEFSVChpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisgICAgd2hpbGUodThYZmVyaW5nICYmICh1OEVyciA9PSAwdSkpCisgICAgeworICAgICAgICBJMkNfV0FJVF9SRUFEWShpMmMpIHt9CisgICAgICAgIHN3aXRjaChJMkNfR0VUX1NUQVRVUyhpMmMpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDB4MDh1OgorICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMXUpIHwgMHgwMHUpKTsgIC8qIFNlbmQgU2xhdmUgYWRkcmVzcyB3aXRoIHdyaXRlIGJpdCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgxOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgQUNLICovCisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgdThEYXRhQWRkcik7ICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIExvIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDIwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBOQUNLICovCisgICAgICAgICAgICBjYXNlIDB4MzB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXN0ZXIgdHJhbnNtaXQgZGF0YSBOQUNLICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyOHU6CisgICAgICAgICAgICAgICAgaWYodTMydHhMZW4gPCAxdSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsIHU4RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIHUzMnR4TGVuKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDB1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgzOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgSTJDX1NFVF9DT05UUk9MX1JFRyhpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgY29udHJvbGJpdCB0byBJMkNfQ1RMIHJlZ2lzdGVyICovCisgICAgfQorICAgIHJldHVybiAodThFcnIgfCB1OFhmZXJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gKFN1Y2Nlc3MpLyhGYWlsKSBzdGF0dXMgKi8KK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IGEgYnl0ZSByZWdpc3RlciBhZGRyZXNzIGFuZCB3cml0ZSBtdWx0aSBieXRlcyB0byBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKmkyYyAgICAgICAgICAgIFBvaW50IHRvIEkyQyBwZXJpcGhlcmFsCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gIHU4RGF0YUFkZHIgICAgICBTcGVjaWZ5IGEgYWRkcmVzcyAoMSBieXRlKSBvZiBkYXRhIHdyaXRlIHRvCisgICogQHBhcmFtW2luXSAgKmF1OERhdGEgICAgICAgICAgIFBvaW50ZXIgdG8gYXJyYXkgdG8gd3JpdGUgZGF0YSB0byBTbGF2ZQorICAqIEBwYXJhbVtpbl0gIHUzMndMZW4gICAgICAgICBIb3cgbWFueSBieXRlcyBuZWVkIHRvIHdyaXRlIHRvIFNsYXZlCisgICoKKyAgKiBAcmV0dXJuICAgICBBIGxlbmd0aCBvZiBob3cgbWFueSBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQuCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgSTJDIE1hc3RlciBzcGVjaWZ5IGEgYnl0ZSBhZGRyZXNzIHRoYXQgbXVsdGkgZGF0YSBieXRlcyB3cml0ZSB0byBpbiBTbGF2ZS4KKyAgKgorICAqLworCit1aW50MzJfdCBJMkNfV3JpdGVNdWx0aUJ5dGVzT25lUmVnKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhQWRkciwgdWludDhfdCBhdThEYXRhW10sIHVpbnQzMl90IHUzMndMZW4pCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxdSwgdThFcnIgPSAwdSwgdThDdHJsID0gMHU7CisgICAgdWludDMyX3QgdTMydHhMZW4gPSAwdTsKKworICAgIEkyQ19TVEFSVChpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisgICAgd2hpbGUodThYZmVyaW5nICYmICh1OEVyciA9PSAwdSkpCisgICAgeworICAgICAgICBJMkNfV0FJVF9SRUFEWShpMmMpIHt9CisgICAgICAgIHN3aXRjaChJMkNfR0VUX1NUQVRVUyhpMmMpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDB4MDh1OgorICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMXUpIHwgMHgwMHUpKTsgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIEkyQ0RBVCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MTh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIEFDSyAqLworICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsIHU4RGF0YUFkZHIpOyAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBMbyBieXRlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgTkFDSyAqLworICAgICAgICAgICAgY2FzZSAweDMwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFzdGVyIHRyYW5zbWl0IGRhdGEgTkFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4Mjh1OgorICAgICAgICAgICAgICAgIGlmKHUzMnR4TGVuIDwgdTMyd0xlbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsIGF1OERhdGFbdTMydHhMZW4rK10pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwdTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4Mzh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEkyQ19TRVRfQ09OVFJPTF9SRUcoaTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gSTJDX0NUTCByZWdpc3RlciAqLworICAgIH0KKworICAgIHJldHVybiB1MzJ0eExlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gYnl0ZXMgbGVuZ3RoIHRoYXQgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNwZWNpZnkgdHdvIGJ5dGVzIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIFdyaXRlIGEgYnl0ZSB0byBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKmkyYyAgICAgICAgICAgIFBvaW50IHRvIEkyQyBwZXJpcGhlcmFsCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gIHUxNkRhdGFBZGRyICAgICBTcGVjaWZ5IGEgYWRkcmVzcyAoMiBieXRlKSBvZiBkYXRhIHdyaXRlIHRvCisgICogQHBhcmFtW2luXSAgdThEYXRhICAgICAgICAgICAgV3JpdGUgYSBieXRlIGRhdGEgdG8gU2xhdmUKKyAgKgorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgICAgICBXcml0ZSBkYXRhIHN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgICAxICAgICAgICAgICAgICAgV3JpdGUgZGF0YSBmYWlsLCBvciBidXMgb2NjdXJzIGVycm9yIGV2ZW50cworICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIEkyQyBNYXN0ZXIgc3BlY2lmeSB0d28gYnl0ZXMgYWRkcmVzcyB0aGF0IGRhdGEgd3JpdGUgdG8gaW4gU2xhdmUuCisgICoKKyAgKi8KKwordWludDhfdCBJMkNfV3JpdGVCeXRlVHdvUmVncyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50MTZfdCB1MTZEYXRhQWRkciwgdWludDhfdCB1OERhdGEpCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxdSwgdThFcnIgPSAwdSwgdThBZGRyID0gMXUsIHU4Q3RybCA9IDB1OworICAgIHVpbnQzMl90IHUzMnR4TGVuID0gMHU7CisKKyAgICBJMkNfU1RBUlQoaTJjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisgICAgd2hpbGUodThYZmVyaW5nICYmICh1OEVyciA9PSAwdSkpCisgICAgeworICAgICAgICBJMkNfV0FJVF9SRUFEWShpMmMpIHt9CisgICAgICAgIHN3aXRjaChJMkNfR0VUX1NUQVRVUyhpMmMpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDB4MDh1OgorICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMXUpIHwgMHgwMHUpKTsgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIEkyQ0RBVCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDE4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIEFDSyAqLworICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICh1aW50OF90KSgodTE2RGF0YUFkZHIgJiAweEZGMDB1KSA+PiA4dSkpOyAgICAvKiBXcml0ZSBIaSBieXRlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBOQUNLICovCisgICAgICAgICAgICBjYXNlIDB4MzB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hc3RlciB0cmFuc21pdCBkYXRhIE5BQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4Mjh1OgorICAgICAgICAgICAgICAgIGlmKHU4QWRkcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICh1aW50OF90KSh1MTZEYXRhQWRkciAmIDB4RkZ1KSk7ICAgICAgIC8qIFdyaXRlIExvIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgICAgICB1OEFkZHIgPSAwdTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigodTMydHhMZW4gPCAxdSkgJiYgKHU4QWRkciA9PSAwdSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCB1OERhdGEpOworICAgICAgICAgICAgICAgICAgICB1MzJ0eExlbisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDB1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgzOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgSTJDX1NFVF9DT05UUk9MX1JFRyhpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIEkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisgICAgcmV0dXJuICh1OEVyciB8IHU4WGZlcmluZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIChTdWNjZXNzKS8oRmFpbCkgc3RhdHVzICovCit9CisKKworLyoqCisgICogQGJyaWVmICAgICAgU3BlY2lmeSB0d28gYnl0ZXMgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgd3JpdGUgbXVsdGkgYnl0ZXMgdG8gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICppMmMgICAgICAgICAgICBQb2ludCB0byBJMkMgcGVyaXBoZXJhbAorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICB1MTZEYXRhQWRkciAgICAgU3BlY2lmeSBhIGFkZHJlc3MgKDIgYnl0ZXMpIG9mIGRhdGEgd3JpdGUgdG8KKyAgKiBAcGFyYW1baW5dICBhdThEYXRhW10gICAgICAgICAgQSBkYXRhIGFycmF5IGZvciB3cml0ZSBkYXRhIHRvIFNsYXZlCisgICogQHBhcmFtW2luXSAgdTMyd0xlbiAgICAgICAgIEhvdyBtYW55IGJ5dGVzIG5lZWQgdG8gd3JpdGUgdG8gU2xhdmUKKyAgKgorICAqIEByZXR1cm4gICAgIEEgbGVuZ3RoIG9mIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZC4KKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBJMkMgTWFzdGVyIHNwZWNpZnkgYSBieXRlIGFkZHJlc3MgdGhhdCBtdWx0aSBkYXRhIHdyaXRlIHRvIGluIFNsYXZlLgorICAqCisgICovCisKK3VpbnQzMl90IEkyQ19Xcml0ZU11bHRpQnl0ZXNUd29SZWdzKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQxNl90IHUxNkRhdGFBZGRyLCB1aW50OF90IGF1OERhdGFbXSwgdWludDMyX3QgdTMyd0xlbikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDF1LCB1OEVyciA9IDB1LCB1OEFkZHIgPSAxdSwgdThDdHJsID0gMHU7CisgICAgdWludDMyX3QgdTMydHhMZW4gPSAwdTsKKworICAgIEkyQ19TVEFSVChpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKyAgICB3aGlsZSh1OFhmZXJpbmcgJiYgKHU4RXJyID09IDB1KSkKKyAgICB7CisgICAgICAgIEkyQ19XQUlUX1JFQURZKGkyYykge30KKyAgICAgICAgc3dpdGNoKEkyQ19HRVRfU1RBVFVTKGkyYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHgwOHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAwdSkpOyAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgSTJDREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MTh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgQUNLICovCisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKHVpbnQ4X3QpKCh1MTZEYXRhQWRkciAmIDB4RkYwMHUpID4+IDh1KSk7ICAgIC8qIFdyaXRlIEhpIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDIwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgIGNhc2UgMHgzMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFzdGVyIHRyYW5zbWl0IGRhdGEgTkFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyOHU6CisgICAgICAgICAgICAgICAgaWYodThBZGRyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKHVpbnQ4X3QpKHUxNkRhdGFBZGRyICYgMHhGRnUpKTsgICAgICAgLyogV3JpdGUgTG8gYnl0ZSBhZGRyZXNzIG9mIHJlZ2lzdGVyICovCisgICAgICAgICAgICAgICAgICAgIHU4QWRkciA9IDB1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKCh1MzJ0eExlbiA8IHUzMndMZW4pICYmICh1OEFkZHIgPT0gMHUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgYXU4RGF0YVt1MzJ0eExlbisrXSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgZGF0YSB0byBSZWdpc3RlciBJMkNEQVQqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDB1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgzOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgSTJDX1NFVF9DT05UUk9MX1JFRyhpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIEkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisgICAgcmV0dXJuIHUzMnR4TGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJ5dGVzIGxlbmd0aCB0aGF0IGhhdmUgYmVlbiB0cmFuc21pdHRlZCAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIGEgYnl0ZSBmcm9tIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqaTJjICAgICAgICAgICAgUG9pbnQgdG8gSTJDIHBlcmlwaGVyYWwKKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICoKKyAgKiBAcmV0dXJuICAgICBSZWFkIGEgYnl0ZSBkYXRhIGZyb20gU2xhdmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBJMkMgTWFzdGVyIHRvIHJlYWQgYSBieXRlIGRhdGEgZnJvbSBTbGF2ZS4KKyAgKgorICAqLwordWludDhfdCBJMkNfUmVhZEJ5dGUoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkcikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDF1LCB1OEVyciA9IDB1LCByZGF0YSA9IDB1LCB1OEN0cmwgPSAwdTsKKworICAgIEkyQ19TVEFSVChpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKyAgICB3aGlsZSh1OFhmZXJpbmcgJiYgKHU4RXJyID09IDB1KSkKKyAgICB7CisgICAgICAgIEkyQ19XQUlUX1JFQURZKGkyYykge30KKyAgICAgICAgc3dpdGNoKEkyQ19HRVRfU1RBVFVTKGkyYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHgwOHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAxdSkpOyAgLyogV3JpdGUgU0xBK1IgdG8gUmVnaXN0ZXIgSTJDREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NDB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgQUNLICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NDh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgTkFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg1OHU6CisgICAgICAgICAgICAgICAgcmRhdGEgPSAodW5zaWduZWQgY2hhcikgSTJDX0dFVF9EQVRBKGkyYyk7ICAgICAgICAgLyogUmVjZWl2ZSBEYXRhICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgzOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgSTJDX1NFVF9DT05UUk9MX1JFRyhpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIEkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisgICAgaWYodThFcnIpCisgICAgeworICAgICAgICByZGF0YSA9IDB1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBvY2N1cnMgZXJyb3IsIHJldHVybiAwICovCisgICAgfQorICAgIHJldHVybiByZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiByZWFkIGRhdGEgKi8KK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIG11bHRpIGJ5dGVzIGZyb20gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICppMmMgICAgICAgICAgICBQb2ludCB0byBJMkMgcGVyaXBoZXJhbAorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1bb3V0XSBhdThSZGF0YVtdICAgICAgICAgQSBkYXRhIGFycmF5IHRvIHN0b3JlIGRhdGEgZnJvbSBTbGF2ZQorICAqIEBwYXJhbVtpbl0gIHUzMnJMZW4gICAgICAgICBIb3cgbWFueSBieXRlcyBuZWVkIHRvIHJlYWQgZnJvbSBTbGF2ZQorICAqCisgICogQHJldHVybiAgICAgQSBsZW5ndGggb2YgaG93IG1hbnkgYnl0ZXMgaGF2ZSBiZWVuIHJlY2VpdmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgSTJDIE1hc3RlciB0byByZWFkIG11bHRpIGRhdGEgYnl0ZXMgZnJvbSBTbGF2ZS4KKyAgKgorICAqCisgICovCit1aW50MzJfdCBJMkNfUmVhZE11bHRpQnl0ZXMoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCBhdThSZGF0YVtdLCB1aW50MzJfdCB1MzJyTGVuKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMXUsIHU4RXJyID0gMHUsIHU4Q3RybCA9IDB1OworICAgIHVpbnQzMl90IHUzMnJ4TGVuID0gMHU7CisKKyAgICBJMkNfU1RBUlQoaTJjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisgICAgd2hpbGUodThYZmVyaW5nICYmICh1OEVyciA9PSAwdSkpCisgICAgeworICAgICAgICBJMkNfV0FJVF9SRUFEWShpMmMpIHt9CisgICAgICAgIHN3aXRjaChJMkNfR0VUX1NUQVRVUyhpMmMpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDB4MDh1OgorICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMXUpIHwgMHgwMXUpKTsgIC8qIFdyaXRlIFNMQStSIHRvIFJlZ2lzdGVyIEkyQ0RBVCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDQwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIEFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0lfQUE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2V0IEFDSyAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDQ4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NTB1OgorICAgICAgICAgICAgICAgIGF1OFJkYXRhW3UzMnJ4TGVuKytdID0gKHVuc2lnbmVkIGNoYXIpIEkyQ19HRVRfREFUQShpMmMpOyAgICAvKiBSZWNlaXZlIERhdGEgKi8KKyAgICAgICAgICAgICAgICBpZih1MzJyeExlbiA8ICh1MzJyTGVuIC0gMXUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSV9BQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZXQgQUNLICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg1OHU6CisgICAgICAgICAgICAgICAgYXU4UmRhdGFbdTMycnhMZW4rK10gPSAodW5zaWduZWQgY2hhcikgSTJDX0dFVF9EQVRBKGkyYyk7ICAgIC8qIFJlY2VpdmUgRGF0YSAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDB1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDM4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBJMkNfU0VUX0NPTlRST0xfUkVHKGkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIEkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisgICAgcmV0dXJuIHUzMnJ4TGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBieXRlcyBsZW5ndGggdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgKi8KK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IGEgYnl0ZSByZWdpc3RlciBhZGRyZXNzIGFuZCByZWFkIGEgYnl0ZSBmcm9tIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqaTJjICAgICAgICAgICAgUG9pbnQgdG8gSTJDIHBlcmlwaGVyYWwKKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgdThEYXRhQWRkciAgICAgIFNwZWNpZnkgYSBhZGRyZXNzKDEgYnl0ZSkgb2YgZGF0YSByZWFkIGZyb20KKyAgKgorICAqIEByZXR1cm4gICAgIFJlYWQgYSBieXRlIGRhdGEgZnJvbSBTbGF2ZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIEkyQyBNYXN0ZXIgc3BlY2lmeSBhIGJ5dGUgYWRkcmVzcyB0aGF0IGEgZGF0YSBieXRlIHJlYWQgZnJvbSBTbGF2ZS4KKyAgKgorICAqCisgICovCit1aW50OF90IEkyQ19SZWFkQnl0ZU9uZVJlZyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IHU4RGF0YUFkZHIpCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxdSwgdThFcnIgPSAwdSwgdThSZGF0YSA9IDB1LCB1OEN0cmwgPSAwdTsKKworICAgIEkyQ19TVEFSVChpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKyAgICB3aGlsZSh1OFhmZXJpbmcgJiYgKHU4RXJyID09IDB1KSkKKyAgICB7CisgICAgICAgIEkyQ19XQUlUX1JFQURZKGkyYykge30KKyAgICAgICAgc3dpdGNoKEkyQ19HRVRfU1RBVFVTKGkyYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHgwOHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAwdSkpOyAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgSTJDREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MTh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgQUNLICovCisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgdThEYXRhQWRkcik7ICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgTG8gYnl0ZSBhZGRyZXNzIG9mIHJlZ2lzdGVyICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MjB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgTkFDSyAqLworICAgICAgICAgICAgY2FzZSAweDMwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXN0ZXIgdHJhbnNtaXQgZGF0YSBOQUNLICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDI4dToKKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUQV9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCByZXBlYXQgU1RBUlQgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgxMHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAxdSkpOyAgLyogV3JpdGUgU0xBK1IgdG8gUmVnaXN0ZXIgSTJDREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg0MHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBBQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg0OHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBOQUNLICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDU4dToKKyAgICAgICAgICAgICAgICB1OFJkYXRhID0gKHVpbnQ4X3QpIEkyQ19HRVRfREFUQShpMmMpOyAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgRGF0YSAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMHU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4Mzh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEkyQ19TRVRfQ09OVFJPTF9SRUcoaTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgY29udHJvbGJpdCB0byBJMkNfQ1RMIHJlZ2lzdGVyICovCisgICAgfQorICAgIGlmKHU4RXJyKQorICAgIHsKKyAgICAgICAgdThSZGF0YSA9IDB1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBvY2N1cnMgZXJyb3IsIHJldHVybiAwICovCisgICAgfQorICAgIHJldHVybiB1OFJkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHJlYWQgZGF0YSAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IGEgYnl0ZSByZWdpc3RlciBhZGRyZXNzIGFuZCByZWFkIG11bHRpIGJ5dGVzIGZyb20gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICppMmMgICAgICAgICAgICBQb2ludCB0byBJMkMgcGVyaXBoZXJhbAorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICB1OERhdGFBZGRyICAgICAgU3BlY2lmeSBhIGFkZHJlc3MgKDEgYnl0ZXMpIG9mIGRhdGEgcmVhZCBmcm9tCisgICogQHBhcmFtW291dF0gYXU4UmRhdGFbXSAgICAgICAgIEEgZGF0YSBhcnJheSB0byBzdG9yZSBkYXRhIGZyb20gU2xhdmUKKyAgKiBAcGFyYW1baW5dICB1MzJyTGVuICAgICAgICAgSG93IG1hbnkgYnl0ZXMgbmVlZCB0byByZWFkIGZyb20gU2xhdmUKKyAgKgorICAqIEByZXR1cm4gICAgIEEgbGVuZ3RoIG9mIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiByZWNlaXZlZAorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIEkyQyBNYXN0ZXIgc3BlY2lmeSBhIGJ5dGUgYWRkcmVzcyB0aGF0IG11bHRpIGRhdGEgYnl0ZXMgcmVhZCBmcm9tIFNsYXZlLgorICAqCisgICoKKyAgKi8KK3VpbnQzMl90IEkyQ19SZWFkTXVsdGlCeXRlc09uZVJlZyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IHU4RGF0YUFkZHIsIHVpbnQ4X3QgYXU4UmRhdGFbXSwgdWludDMyX3QgdTMyckxlbikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDF1LCB1OEVyciA9IDB1LCB1OEN0cmwgPSAwdTsKKyAgICB1aW50MzJfdCB1MzJyeExlbiA9IDB1OworCisgICAgSTJDX1NUQVJUKGkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBTVEFSVCAqLworICAgIHdoaWxlKHU4WGZlcmluZyAmJiAodThFcnIgPT0gMHUpKQorICAgIHsKKyAgICAgICAgSTJDX1dBSVRfUkVBRFkoaTJjKSB7fQorICAgICAgICBzd2l0Y2goSTJDX0dFVF9TVEFUVVMoaTJjKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAweDA4dToKKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDF1KSB8IDB4MDB1KSk7ICAvKiBXcml0ZSBTTEErVyB0byBSZWdpc3RlciBJMkNEQVQgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgxOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBBQ0sgKi8KKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCB1OERhdGFBZGRyKTsgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBMbyBieXRlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBOQUNLICovCisgICAgICAgICAgICBjYXNlIDB4MzB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hc3RlciB0cmFuc21pdCBkYXRhIE5BQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4Mjh1OgorICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RBX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIHJlcGVhdCBTVEFSVCAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDEwdToKKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDF1KSB8IDB4MDF1KSk7ICAvKiBXcml0ZSBTTEErUiB0byBSZWdpc3RlciBJMkNEQVQgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg0MHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBBQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJX0FBOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNldCBBQ0sgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg0OHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBOQUNLICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDUwdToKKyAgICAgICAgICAgICAgICBhdThSZGF0YVt1MzJyeExlbisrXSA9ICh1aW50OF90KSBJMkNfR0VUX0RBVEEoaTJjKTsgICAvKiBSZWNlaXZlIERhdGEgKi8KKyAgICAgICAgICAgICAgICBpZih1MzJyeExlbiA8ICh1MzJyTGVuIC0gMXUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSV9BQTsgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNldCBBQ0sgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NTh1OgorICAgICAgICAgICAgICAgIGF1OFJkYXRhW3UzMnJ4TGVuKytdID0gKHVpbnQ4X3QpIEkyQ19HRVRfREFUQShpMmMpOyAgIC8qIFJlY2VpdmUgRGF0YSAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMHU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4Mzh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEkyQ19TRVRfQ09OVFJPTF9SRUcoaTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgY29udHJvbGJpdCB0byBJMkNfQ1RMIHJlZ2lzdGVyICovCisgICAgfQorICAgIHJldHVybiB1MzJyeExlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBieXRlcyBsZW5ndGggdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgKi8KK30KKworLyoqCisgICogQGJyaWVmICAgICAgU3BlY2lmeSB0d28gYnl0ZXMgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgcmVhZCBhIGJ5dGUgZnJvbSBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKmkyYyAgICAgICAgICAgIFBvaW50IHRvIEkyQyBwZXJpcGhlcmFsCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gIHUxNkRhdGFBZGRyICAgICBTcGVjaWZ5IGFuIGFkZHJlc3MoMiBieXRlcykgb2YgZGF0YSByZWFkIGZyb20KKyAgKgorICAqIEByZXR1cm4gICAgIFJlYWQgYSBieXRlIGRhdGEgZnJvbSBTbGF2ZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIEkyQyBNYXN0ZXIgc3BlY2lmeSB0d28gYnl0ZXMgYWRkcmVzcyB0aGF0IGEgZGF0YSBieXRlIHJlYWQgZnJvbSBTbGF2ZS4KKyAgKgorICAqCisgICovCit1aW50OF90IEkyQ19SZWFkQnl0ZVR3b1JlZ3MoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDE2X3QgdTE2RGF0YUFkZHIpCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxdSwgdThFcnIgPSAwdSwgdThSZGF0YSA9IDB1LCB1OEFkZHIgPSAxdSwgdThDdHJsID0gMHU7CisKKyAgICBJMkNfU1RBUlQoaTJjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisgICAgd2hpbGUodThYZmVyaW5nICYmICh1OEVyciA9PSAwdSkpCisgICAgeworICAgICAgICBJMkNfV0FJVF9SRUFEWShpMmMpIHt9CisgICAgICAgIHN3aXRjaChJMkNfR0VUX1NUQVRVUyhpMmMpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDB4MDh1OgorICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMXUpIHwgMHgwMHUpKTsgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIEkyQ0RBVCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDE4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIEFDSyAqLworICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICh1aW50OF90KSgodTE2RGF0YUFkZHIgJiAweEZGMDB1KSA+PiA4dSkpOyAgICAvKiBXcml0ZSBIaSBieXRlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBOQUNLICovCisgICAgICAgICAgICBjYXNlIDB4MzB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hc3RlciB0cmFuc21pdCBkYXRhIE5BQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4Mjh1OgorICAgICAgICAgICAgICAgIGlmKHU4QWRkcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICh1aW50OF90KSh1MTZEYXRhQWRkciAmIDB4RkZ1KSk7ICAgICAgIC8qIFdyaXRlIExvIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgICAgICB1OEFkZHIgPSAwdTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVEFfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgcmVwZWF0IFNUQVJUICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDEwdToKKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDF1KSB8IDB4MDF1KSk7ICAvKiBXcml0ZSBTTEErUiB0byBSZWdpc3RlciBJMkNEQVQgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg0MHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBBQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg0OHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBOQUNLICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDU4dToKKyAgICAgICAgICAgICAgICB1OFJkYXRhID0gKHVuc2lnbmVkIGNoYXIpIEkyQ19HRVRfREFUQShpMmMpOyAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgRGF0YSAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMHU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4Mzh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEkyQ19TRVRfQ09OVFJPTF9SRUcoaTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgY29udHJvbGJpdCB0byBJMkNfQ1RMIHJlZ2lzdGVyICovCisgICAgfQorICAgIGlmKHU4RXJyKQorICAgIHsKKyAgICAgICAgdThSZGF0YSA9IDB1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBvY2N1cnMgZXJyb3IsIHJldHVybiAwICovCisgICAgfQorICAgIHJldHVybiB1OFJkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHJlYWQgZGF0YSAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IHR3byBieXRlcyByZWdpc3RlciBhZGRyZXNzIGFuZCByZWFkIG11bHRpIGJ5dGVzIGZyb20gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICppMmMgICAgICAgICAgICBQb2ludCB0byBJMkMgcGVyaXBoZXJhbAorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICB1MTZEYXRhQWRkciAgICAgU3BlY2lmeSBhIGFkZHJlc3MgKDIgYnl0ZXMpIG9mIGRhdGEgcmVhZCBmcm9tCisgICogQHBhcmFtW291dF0gYXU4UmRhdGFbXSAgICAgICAgIEEgZGF0YSBhcnJheSB0byBzdG9yZSBkYXRhIGZyb20gU2xhdmUKKyAgKiBAcGFyYW1baW5dICB1MzJyTGVuICAgICAgICAgSG93IG1hbnkgYnl0ZXMgbmVlZCB0byByZWFkIGZyb20gU2xhdmUKKyAgKgorICAqIEByZXR1cm4gICAgIEEgbGVuZ3RoIG9mIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiByZWNlaXZlZAorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIEkyQyBNYXN0ZXIgc3BlY2lmeSB0d28gYnl0ZXMgYWRkcmVzcyB0aGF0IG11bHRpIGRhdGEgYnl0ZXMgcmVhZCBmcm9tIFNsYXZlLgorICAqCisgICoKKyAgKi8KK3VpbnQzMl90IEkyQ19SZWFkTXVsdGlCeXRlc1R3b1JlZ3MoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDE2X3QgdTE2RGF0YUFkZHIsIHVpbnQ4X3QgYXU4UmRhdGFbXSwgdWludDMyX3QgdTMyckxlbikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDF1LCB1OEVyciA9IDB1LCB1OEFkZHIgPSAxdSwgdThDdHJsID0gMHU7CisgICAgdWludDMyX3QgdTMycnhMZW4gPSAwdTsKKworICAgIEkyQ19TVEFSVChpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKyAgICB3aGlsZSh1OFhmZXJpbmcgJiYgKHU4RXJyID09IDB1KSkKKyAgICB7CisgICAgICAgIEkyQ19XQUlUX1JFQURZKGkyYykge30KKyAgICAgICAgc3dpdGNoKEkyQ19HRVRfU1RBVFVTKGkyYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHgwOHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAwdSkpOyAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgSTJDREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MTh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgQUNLICovCisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKHVpbnQ4X3QpKCh1MTZEYXRhQWRkciAmIDB4RkYwMHUpID4+IDh1KSk7ICAgIC8qIFdyaXRlIEhpIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDIwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgIGNhc2UgMHgzMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFzdGVyIHRyYW5zbWl0IGRhdGEgTkFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyOHU6CisgICAgICAgICAgICAgICAgaWYodThBZGRyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKHVpbnQ4X3QpKHUxNkRhdGFBZGRyICYgMHhGRnUpKTsgICAgICAgLyogV3JpdGUgTG8gYnl0ZSBhZGRyZXNzIG9mIHJlZ2lzdGVyICovCisgICAgICAgICAgICAgICAgICAgIHU4QWRkciA9IDB1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUQV9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCByZXBlYXQgU1RBUlQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MTB1OgorICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMXUpIHwgMHgwMXUpKTsgIC8qIFdyaXRlIFNMQStSIHRvIFJlZ2lzdGVyIEkyQ0RBVCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDQwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIEFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0lfQUE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2V0IEFDSyAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDQ4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NTB1OgorICAgICAgICAgICAgICAgIGF1OFJkYXRhW3UzMnJ4TGVuKytdID0gKHVuc2lnbmVkIGNoYXIpIEkyQ19HRVRfREFUQShpMmMpOyAgICAgIC8qIFJlY2VpdmUgRGF0YSAqLworICAgICAgICAgICAgICAgIGlmKHUzMnJ4TGVuIDwgKHUzMnJMZW4gLSAxdSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJX0FBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2V0IEFDSyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg1OHU6CisgICAgICAgICAgICAgICAgYXU4UmRhdGFbdTMycnhMZW4rK10gPSAodW5zaWduZWQgY2hhcikgSTJDX0dFVF9EQVRBKGkyYyk7ICAgICAgLyogUmVjZWl2ZSBEYXRhICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgzOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgSTJDX1NFVF9DT05UUk9MX1JFRyhpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIEkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisgICAgcmV0dXJuIHUzMnJ4TGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJ5dGVzIGxlbmd0aCB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCAqLworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEkyQ19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBJMkNfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2kycy5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvaTJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhZWU5OAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2kycy5jCkBAIC0wLDAgKzEsMjYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgaTJzLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBJMlMgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgIk51TWljcm8uaCIKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBJMlNfRHJpdmVyIEkyUyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBJMlNfRVhQT1JURURfRlVOQ1RJT05TIEkyUyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKK3N0YXRpYyB1aW50MzJfdCBJMlNfR2V0U291cmNlQ2xvY2tGcmVxKEkyU19UICppMnMpOworCisvKioKKyAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgSTJTIHNvdXJjZSBjbG9jayBmcmVxdWVuY3kuCisgICogQHBhcmFtW2luXSAgaTJzIFRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIEkyUyBzb3VyY2UgY2xvY2sgZnJlcXVlbmN5IChIeikuCisgICogQGRldGFpbHMgUmV0dXJuIHRoZSBzb3VyY2UgY2xvY2sgZnJlcXVlbmN5IGFjY29yZGluZyB0byB0aGUgc2V0dGluZyBvZiBJMlMwU0VMIChDTEtfQ0xLU0VMM1sxNzoxNl0pLgorICAqLworc3RhdGljIHVpbnQzMl90IEkyU19HZXRTb3VyY2VDbG9ja0ZyZXEoSTJTX1QgKmkycykKK3sKKyAgICAodm9pZClpMnM7CisgICAgdWludDMyX3QgdTMyRnJlcSwgdTMyQ2xrU3JjU2VsOworCisgICAgdTMyQ2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKEkyUzBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMM19JMlMwU0VMX1BvczsKKworICAgIHN3aXRjaCh1MzJDbGtTcmNTZWwpCisgICAgeworICAgICAgICBjYXNlIENMS19DTEtTRUwzX0kyUzBTRUxfSFhUOgorICAgICAgICAgICAgdTMyRnJlcSA9IF9fSFhUOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDTEtfQ0xLU0VMM19JMlMwU0VMX1BMTDoKKyAgICAgICAgICAgIHUzMkZyZXEgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENMS19DTEtTRUwzX0kyUzBTRUxfSElSQzoKKyAgICAgICAgICAgIHUzMkZyZXEgPSBfX0hJUkM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENMS19DTEtTRUwzX0kyUzBTRUxfUENMSzA6CisgICAgICAgICAgICB1MzJGcmVxID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHUzMkZyZXEgPSBfX0hYVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB1MzJGcmVxOworfQorCisvKioKKyAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyBzb21lIHBhcmFtZXRlcnMgb2YgSTJTIGludGVyZmFjZSBmb3IgZ2VuZXJhbCBwdXJwb3NlIHVzZS4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNYXN0ZXJTbGF2ZSBJMlMgb3BlcmF0aW9uIG1vZGUuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19NT0RFX01BU1RFUgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfTU9ERV9TTEFWRQorICAqIEBwYXJhbVtpbl0gdTMyU2FtcGxlUmF0ZSBTYW1wbGUgcmF0ZQorICAqIEBwYXJhbVtpbl0gdTMyV29yZFdpZHRoIERhdGEgbGVuZ3RoLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfREFUQUJJVF84CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19EQVRBQklUXzE2CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19EQVRBQklUXzI0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19EQVRBQklUXzMyCisgICogQHBhcmFtW2luXSB1MzJNb25vRGF0YSBTZXQgYXVkaW8gZGF0YSB0byBtb25vIG9yIG5vdC4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX0VOQUJMRV9NT05PCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19ESVNBQkxFX01PTk8KKyAgKiBAcGFyYW1baW5dIHUzMkRhdGFGb3JtYXQgRGF0YSBmb3JtYXQuIFRoaXMgaXMgYWxzbyB1c2VkIHRvIHNlbGVjdCBJMlMgb3IgUENNKFRETSkgZnVuY3Rpb24uIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19GT1JNQVRfSTJTCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19GT1JNQVRfSTJTX01TQgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfRk9STUFUX0kyU19MU0IKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX0ZPUk1BVF9QQ00KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX0ZPUk1BVF9QQ01fTVNCCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19GT1JNQVRfUENNX0xTQgorICAqIEByZXR1cm4gUmVhbCBzYW1wbGUgcmF0ZS4KKyAgKiBAZGV0YWlscyBTZXQgVFggYW5kIFJYIEZJRk8gdGhyZXNob2xkIHRvIG1pZGRsZSB2YWx1ZS4KKyAgKiAgICAgICAgICBUaGUgc2FtcGxlIHJhdGUgbWF5IG5vdCBiZSB1c2VkIGZyb20gdGhlIHBhcmFtZXRlciwgaXQgZGVwZW5kcyBvbiBzeXN0ZW0ncyBjbG9jayBzZXR0aW5ncywKKyAgKiAgICAgICAgICBidXQgcmVhbCBzYW1wbGUgcmF0ZSB1c2VkIGJ5IHN5c3RlbSB3aWxsIGJlIHJldHVybmVkIGZvciByZWZlcmVuY2UuCisgICAgSTJTIHdpbGwgYmUgcmVzZXQgaW4gaW5pdGlhbGl6YXRpb24gb25seSBmb3IgU2VjdXJlLgorICAqLwordWludDMyX3QgSTJTX09wZW4oSTJTX1QgKmkycywgdWludDMyX3QgdTMyTWFzdGVyU2xhdmUsIHVpbnQzMl90IHUzMlNhbXBsZVJhdGUsIHVpbnQzMl90IHUzMldvcmRXaWR0aCwgdWludDMyX3QgdTMyTW9ub0RhdGEsIHVpbnQzMl90IHUzMkRhdGFGb3JtYXQpCit7CisgICAgdWludDE2X3QgdTE2RGl2aWRlcjsKKyAgICB1aW50MzJfdCB1MzJCaXRSYXRlLCB1MzJTcmNDbGs7CisKKyAgICBpZighKF9fUEMoKSAmIE5TX09GRlNFVCkpCisgICAgeworICAgICAgICAvKiBSZXNldCBJMlMgKi8KKyAgICAgICAgU1lTLT5JUFJTVDEgfD0gU1lTX0lQUlNUMV9JMlMwUlNUX01zazsKKyAgICAgICAgU1lTLT5JUFJTVDEgJj0gflNZU19JUFJTVDFfSTJTMFJTVF9Nc2s7CisgICAgfQorCisgICAgLyogQ29uZmlndXJlIEkyUyBjb250cm9sbGVyIGFjY29yZGluZyB0byBpbnB1dCBwYXJhbWV0ZXJzLiAqLworICAgIGkycy0+Q1RMMCA9IHUzMk1hc3RlclNsYXZlIHwgdTMyV29yZFdpZHRoIHwgdTMyTW9ub0RhdGEgfCB1MzJEYXRhRm9ybWF0OworICAgIGkycy0+Q1RMMSA9IEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfOCB8IEkyU19GSUZPX1JYX0xFVkVMX1dPUkRfODsKKworICAgIC8qIEdldCBJMlMgc291cmNlIGNsb2NrIGZyZXF1ZW5jeSAqLworICAgIHUzMlNyY0NsayA9IEkyU19HZXRTb3VyY2VDbG9ja0ZyZXEoaTJzKTsKKworICAgIC8qIENhbGN1bGF0ZSBiaXQgY2xvY2sgcmF0ZSAqLworICAgIHUzMkJpdFJhdGUgPSB1MzJTYW1wbGVSYXRlICogKCgodTMyV29yZFdpZHRoID4+IDRVTCkgJiAweDNVTCkgKyAxVUwpICogMTZVTDsKKyAgICB1MTZEaXZpZGVyID0gKHVpbnQxNl90KSgoKCgoKHUzMlNyY0NsayAqIDEwVUwpIC8gdTMyQml0UmF0ZSkgPj4gMVVMKSArIDVVTCkgLyAxMFVMKSAtIDFVTCk7IC8qIFJvdW5kIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgKi8KKyAgICBpMnMtPkNMS0RJViA9IChpMnMtPkNMS0RJViAmIH5JMlNfQ0xLRElWX0JDTEtESVZfTXNrKSB8ICgodWludDMyX3QpdTE2RGl2aWRlciA8PCA4VUwpOworCisgICAgLyogQ2FsY3VsYXRlIHJlYWwgc2FtcGxlIHJhdGUgKi8KKyAgICB1MzJCaXRSYXRlID0gdTMyU3JjQ2xrIC8gKCgodWludDMyX3QpdTE2RGl2aWRlciArIDFVTCkgKiAyVUwpOworICAgIHUzMlNhbXBsZVJhdGUgPSB1MzJCaXRSYXRlIC8gKCgoKHUzMldvcmRXaWR0aCA+PiA0VUwpICYgMHgzVUwpICsgMVVMKSAqIDE2VUwpOworCisgICAgLyogRW5hYmxlIEkyUyBjb250cm9sbGVyICovCisgICAgaTJzLT5DVEwwIHw9IEkyU19DVEwwX0kyU0VOX01zazsKKworICAgIHJldHVybiB1MzJTYW1wbGVSYXRlOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgSTJTIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIGkycyBUaGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgQ2xlYXIgSTJTRU4gKEkyU19DVEwwWzBdKSB0byBkaXNhYmxlIEkyUyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgSTJTX0Nsb3NlKEkyU19UICppMnMpCit7CisgICAgaTJzLT5DVEwwICY9IH5JMlNfQ1RMMF9JMlNFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiBFbmFibGUgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBlbmFibGUgYml0cy4KKyAgKiAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IGJpdC4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGludGVycnVwdCBhY2NvcmRpbmcgdG8gdGhlIG1hc2sgcGFyYW1ldGVyLgorICAqLwordm9pZCBJMlNfRW5hYmxlSW50KEkyU19UICppMnMsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgaTJzLT5JRU4gfD0gdTMyTWFzazsKK30KKworLyoqCisgICogQGJyaWVmIERpc2FibGUgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBlbmFibGUgYml0cy4KKyAgKiAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IGJpdC4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBpbnRlcnJ1cHQgYWNjb3JkaW5nIHRvIHRoZSBtYXNrIHBhcmFtZXRlci4KKyAgKi8KK3ZvaWQgSTJTX0Rpc2FibGVJbnQoSTJTX1QgKmkycywgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICBpMnMtPklFTiAmPSB+dTMyTWFzazsKK30KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgbWFzdGVyIGNsb2NrIChNQ0xLKS4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJCdXNDbG9jayBUaGUgdGFyZ2V0IE1DTEsgY2xvY2suCisgICogQHJldHVybiBBY3R1YWwgTUNMSyBjbG9jaworICAqIEBkZXRhaWxzIFNldCB0aGUgbWFzdGVyIGNsb2NrIHJhdGUgYWNjb3JkaW5nIHRvIHUzMkJ1c0Nsb2NrIHBhcmFtZXRlciBhbmQgZW5hYmxlIG1hc3RlciBjbG9jayBvdXRwdXQuCisgICogICAgICAgICAgVGhlIGFjdHVhbCBtYXN0ZXIgY2xvY2sgcmF0ZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIHRhcmdldCBtYXN0ZXIgY2xvY2sgcmF0ZS4gVGhlIHJlYWwgbWFzdGVyIGNsb2NrIHJhdGUgd2lsbCBiZSByZXR1cm5lZCBmb3IgcmVmZXJlbmNlLgorICAqLwordWludDMyX3QgSTJTX0VuYWJsZU1DTEsoSTJTX1QgKmkycywgdWludDMyX3QgdTMyQnVzQ2xvY2spCit7CisgICAgdWludDhfdCB1OERpdmlkZXI7CisgICAgdWludDMyX3QgdTMyU3JjQ2xrLCB1MzJSZWcsIHUzMkNsb2NrOworCisgICAgdTMyU3JjQ2xrID0gSTJTX0dldFNvdXJjZUNsb2NrRnJlcShpMnMpOworICAgIGlmKHUzMkJ1c0Nsb2NrID09IHUzMlNyY0NsaykKKyAgICB7CisgICAgICAgIHU4RGl2aWRlciA9ICh1aW50OF90KTBVTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdThEaXZpZGVyID0gKHVpbnQ4X3QpKHUzMlNyY0NsayAvIHUzMkJ1c0Nsb2NrKSA+PiAxVUw7CisgICAgfQorCisgICAgaTJzLT5DTEtESVYgPSAoaTJzLT5DTEtESVYgJiB+STJTX0NMS0RJVl9NQ0xLRElWX01zaykgfCB1OERpdmlkZXI7CisKKyAgICBpMnMtPkNUTDAgfD0gSTJTX0NUTDBfTUNMS0VOX01zazsKKworICAgIHUzMlJlZyA9IGkycy0+Q0xLRElWICYgSTJTX0NMS0RJVl9NQ0xLRElWX01zazsKKworICAgIGlmKHUzMlJlZyA9PSAwVUwpCisgICAgeworICAgICAgICB1MzJDbG9jayA9IHUzMlNyY0NsazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyQ2xvY2sgPSAoKHUzMlNyY0NsayA+PiAxVUwpIC8gdTMyUmVnKTsKKyAgICB9CisKKyAgICByZXR1cm4gdTMyQ2xvY2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBtYXN0ZXIgY2xvY2sgKE1DTEspLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBEaXNhYmxlIG1hc3RlciBjbG9jayBvdXRwdXQuCisgICovCit2b2lkIEkyU19EaXNhYmxlTUNMSyhJMlNfVCAqaTJzKQoreworICAgIGkycy0+Q1RMMCAmPSB+STJTX0NUTDBfTUNMS0VOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgRklGTyB0aHJlc2hvbGQgc2V0dGluZy4KKyAgKiBAcGFyYW1baW5dICBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlR4VGhyZXNob2xkIERlY2lkZXMgdGhlIFRYIEZJRk8gdGhyZXNob2xkLiBJdCBjb3VsZCBiZSAwIH4gMTUuCisgICogQHBhcmFtW2luXSAgdTMyUnhUaHJlc2hvbGQgRGVjaWRlcyB0aGUgUlggRklGTyB0aHJlc2hvbGQuIEl0IGNvdWxkIGJlIDAgfiAxNS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBTZXQgVFggRklGTyB0aHJlc2hvbGQgYW5kIFJYIEZJRk8gdGhyZXNob2xkIGNvbmZpZ3VyYXRpb25zLgorICAqLwordm9pZCBJMlNfU2V0RklGTyhJMlNfVCAqaTJzLCB1aW50MzJfdCB1MzJUeFRocmVzaG9sZCwgdWludDMyX3QgdTMyUnhUaHJlc2hvbGQpCit7CisgICAgaTJzLT5DVEwxID0gKGkycy0+Q1RMMSAmIH4oSTJTX0NUTDFfVFhUSF9Nc2sgfCBJMlNfQ1RMMV9SWFRIX01zaykpIHwKKyAgICAgICAgICAgICAgICAodTMyVHhUaHJlc2hvbGQgPDwgSTJTX0NUTDFfVFhUSF9Qb3MpIHwKKyAgICAgICAgICAgICAgICAodTMyUnhUaHJlc2hvbGQgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBQQ00oVERNKSBmdW5jdGlvbiBwYXJhbWV0ZXJzLCBzdWNoIGFzIGNoYW5uZWwgd2lkdGgsIGNoYW5uZWwgbnVtYmVyIGFuZCBzeW5jIHB1bHNlIHdpZHRoCisgICogQHBhcmFtW2luXSAgaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsV2lkdGggQ2hhbm5lbCB3aWR0aC4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX1RETV9XSURUSF84QklUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19URE1fV0lEVEhfMTZCSVQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX1RETV9XSURUSF8yNEJJVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfVERNX1dJRFRIXzMyQklUCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbE51bSBDaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX1RETV8yQ0gKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX1RETV80Q0gKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX1RETV82Q0gKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX1RETV84Q0gKKyAgKiBAcGFyYW1baW5dICB1MzJTeW5jV2lkdGggV2lkdGggZm9yIHN5bmMgcHVsc2UuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19URE1fU1lOQ19PTkVfQkNMSworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfVERNX1NZTkNfT05FX0NIQU5ORUwKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBTZXQgVFggRklGTyB0aHJlc2hvbGQgYW5kIFJYIEZJRk8gdGhyZXNob2xkIGNvbmZpZ3VyYXRpb25zLgorICAqLwordm9pZCBJMlNfQ29uZmlndXJlVERNKEkyU19UICppMnMsIHVpbnQzMl90IHUzMkNoYW5uZWxXaWR0aCwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyU3luY1dpZHRoKQoreworICAgIGkycy0+Q1RMMCA9IChpMnMtPkNUTDAgJiB+KEkyU19DVEwwX1RETUNITlVNX01zayB8IEkyU19DVEwwX0NIV0lEVEhfTXNrIHwgSTJTX0NUTDBfUENNU1lOQ19Nc2spKSB8CisgICAgICAgICAgICAgICAgKHUzMkNoYW5uZWxXaWR0aCA8PCBJMlNfQ1RMMF9DSFdJRFRIX1BvcykgfAorICAgICAgICAgICAgICAgICh1MzJDaGFubmVsTnVtIDw8IEkyU19DVEwwX1RETUNITlVNX1BvcykgfAorICAgICAgICAgICAgICAgICh1MzJTeW5jV2lkdGggPDwgSTJTX0NUTDBfUENNU1lOQ19Qb3MpOworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEkyU19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBJMlNfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3BkbWEuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3BkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWQzNzhmCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvcGRtYS5jCkBAIC0wLDAgKzEsNDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgcGRtYS5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgUERNQSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworCitzdGF0aWMgdWludDhfdCBhdThDaFNlbGVjdFtQRE1BX0NIX01BWF07CisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgUERNQV9Ecml2ZXIgUERNQSBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIFBETUFfRVhQT1JURURfRlVOQ1RJT05TIFBETUEgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAqIEBicmllZiAgICAgICBQRE1BIE9wZW4KKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gICB1MzJNYXNrICAgICAgICAgQ2hhbm5lbCBlbmFibGUgYml0cy4KKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZSB0aGUgUERNQSBjaGFubmVscy4KKyAqLwordm9pZCBQRE1BX09wZW4oUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIHVpbnQzMl90IGk7CisKKyAgICBmb3IoaSA9IDBVTDsgaSA8IChpbnQpUERNQV9DSF9NQVg7IGkrKykKKyAgICB7CisgICAgICAgIGlmKCgxIDw8IGkpICYgdTMyTWFzaykKKyAgICAgICAgeworICAgICAgICAgICAgKHBkbWEpLT5EU0NUW2ldLkNUTCA9IDBVTDsKKyAgICAgICAgICAgIGF1OENoU2VsZWN0W2ldID0gKHVpbnQ4X3QpUERNQV9NRU07CisgICAgICAgIH0KKyAgICB9CisKKyAgICAocGRtYSktPkNIQ1RMIHw9IHUzMk1hc2s7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIFBETUEgQ2xvc2UKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIGRpc2FibGUgYWxsIFBETUEgY2hhbm5lbHMuCisgKi8KK3ZvaWQgUERNQV9DbG9zZShQRE1BX1QgKnBkbWEpCit7CisgICAgKHBkbWEpLT5DSENUTCA9IDBVTDsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IFBETUEgVHJhbnNmZXIgQ291bnQKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gICB1MzJDaCAgICAgICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gICB1MzJXaWR0aCAgICAgICAgRGF0YSB3aWR0aC4gVmFsaWQgdmFsdWVzIGFyZQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfV0lEVEhfOAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfV0lEVEhfMTYKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1dJRFRIXzMyCisgKiBAcGFyYW1baW5dICAgdTMyVHJhbnNDb3VudCAgIFRyYW5zZmVyIGNvdW50CisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBzZXQgdGhlIHNlbGVjdGVkIGNoYW5uZWwgZGF0YSB3aWR0aCBhbmQgdHJhbnNmZXIgY291bnQuCisgKi8KK3ZvaWQgUERNQV9TZXRUcmFuc2ZlckNudChQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoLCB1aW50MzJfdCB1MzJXaWR0aCwgdWludDMyX3QgdTMyVHJhbnNDb3VudCkKK3sKKyAgICAocGRtYSktPkRTQ1RbdTMyQ2hdLkNUTCAmPSB+KFBETUFfRFNDVF9DVExfVFhDTlRfTXNrIHwgUERNQV9EU0NUX0NUTF9UWFdJRFRIX01zayk7CisgICAgKHBkbWEpLT5EU0NUW3UzMkNoXS5DVEwgfD0gKHUzMldpZHRoIHwgKCh1MzJUcmFuc0NvdW50IC0gMVVMKSA8PCBQRE1BX0RTQ1RfQ1RMX1RYQ05UX1BvcykpOworfQorCisvKioKKyAqIEBicmllZiAgICAgICBTZXQgUERNQSBTdHJpZGUgTW9kZQorICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgICAgICBUaGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSAgIHUzMkRlc3RMZW4gICAgICBEZXN0aW5hdGlvbiBzdHJpZGUgY291bnQKKyAqIEBwYXJhbVtpbl0gICB1MzJTcmNMZW4gICAgICAgU291cmNlIHN0cmlkZSBjb3VudAorICogQHBhcmFtW2luXSAgIHUzMlRyYW5zQ291bnQgICBUcmFuc2ZlciBjb3VudAorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gc2V0IHRoZSBzZWxlY3RlZCBzdHJpZGUgbW9kZS4KKyAqLwordm9pZCBQRE1BX1NldFN0cmlkZShQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoLCB1aW50MzJfdCB1MzJEZXN0TGVuLCB1aW50MzJfdCB1MzJTcmNMZW4sIHVpbnQzMl90IHUzMlRyYW5zQ291bnQpCit7CisgICAgKHBkbWEpLT5EU0NUW3UzMkNoXS5DVEwgfD0gUERNQV9EU0NUX0NUTF9TVFJJREVFTl9Nc2s7CisgICAgKHBkbWEpLT5TVFJJREVbdTMyQ2hdLkFTT0NSID0gKHUzMkRlc3RMZW4gPDwgMTYpIHwgdTMyU3JjTGVuOworICAgIChwZG1hKS0+U1RSSURFW3UzMkNoXS5TVENSID0gdTMyVHJhbnNDb3VudDsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IFBETUEgVHJhbnNmZXIgQWRkcmVzcworICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgICAgICBUaGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSAgIHUzMlNyY0FkZHIgICAgICBTb3VyY2UgYWRkcmVzcworICogQHBhcmFtW2luXSAgIHUzMlNyY0N0cmwgICAgICBTb3VyY2UgY29udHJvbCBhdHRyaWJ1dGUuIFZhbGlkIHZhbHVlcyBhcmUKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1NBUl9JTkMKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1NBUl9GSVgKKyAqIEBwYXJhbVtpbl0gICB1MzJEc3RBZGRyICAgICAgZGVzdGluYXRpb24gYWRkcmVzcworICogQHBhcmFtW2luXSAgIHUzMkRzdEN0cmwgICAgICBkZXN0aW5hdGlvbiBjb250cm9sIGF0dHJpYnV0ZS4gVmFsaWQgdmFsdWVzIGFyZQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfREFSX0lOQworICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfREFSX0ZJWAorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gc2V0IHRoZSBzZWxlY3RlZCBjaGFubmVsIHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGFuZCBhdHRyaWJ1dGUuCisgKi8KK3ZvaWQgUERNQV9TZXRUcmFuc2ZlckFkZHIoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJDaCwgdWludDMyX3QgdTMyU3JjQWRkciwgdWludDMyX3QgdTMyU3JjQ3RybCwgdWludDMyX3QgdTMyRHN0QWRkciwgdWludDMyX3QgdTMyRHN0Q3RybCkKK3sKKyAgICAocGRtYSktPkRTQ1RbdTMyQ2hdLlNBID0gdTMyU3JjQWRkcjsKKyAgICAocGRtYSktPkRTQ1RbdTMyQ2hdLkRBID0gdTMyRHN0QWRkcjsKKyAgICAocGRtYSktPkRTQ1RbdTMyQ2hdLkNUTCAmPSB+KFBETUFfRFNDVF9DVExfU0FJTkNfTXNrIHwgUERNQV9EU0NUX0NUTF9EQUlOQ19Nc2spOworICAgIChwZG1hKS0+RFNDVFt1MzJDaF0uQ1RMIHw9ICh1MzJTcmNDdHJsIHwgdTMyRHN0Q3RybCk7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBQRE1BIFRyYW5zZmVyIE1vZGUKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gICB1MzJDaCAgICAgICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gICB1MzJQZXJpcGhlcmFsICAgVGhlIHNlbGVjdGVkIHBlcmlwaGVyYWwuIFZhbGlkIHZhbHVlcyBhcmUKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX01FTQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVVNCX1RYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9VU0JfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1VBUlQwX1RYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9VQVJUMF9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVUFSVDFfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1VBUlQxX1JYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9VQVJUMl9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVUFSVDJfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1VBUlQzX1RYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9VQVJUM19SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVUFSVDRfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1VBUlQ0X1JYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9VQVJUNV9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVUFSVDVfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1VTQ0kwX1RYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9VU0NJMF9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVVNDSTFfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1VTQ0kxX1JYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9RU1BJMF9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfUVNQSTBfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1NQSTBfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1NQSTBfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1NQSTFfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1NQSTFfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1NQSTJfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1NQSTJfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1NQSTNfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1NQSTNfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0VQV00wX1AxX1JYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9FUFdNMF9QMl9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfRVBXTTBfUDNfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0VQV00xX1AxX1JYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9FUFdNMV9QMl9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfRVBXTTFfUDNfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0kyQzBfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0kyQzBfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0kyQzFfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0kyQzFfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0kyQzJfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0kyQzJfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0kyUzBfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0kyUzBfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1RNUjAKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1RNUjEKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1RNUjIKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1RNUjMKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0FEQ19SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfREFDMF9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfREFDMV9UWAorICogQHBhcmFtW2luXSAgIHUzMlNjYXR0ZXJFbiAgICBTY2F0dGVyLWdhdGhlciBtb2RlIGVuYWJsZQorICogQHBhcmFtW2luXSAgIHUzMkRlc2NBZGRyICAgICBTY2F0dGVyLWdhdGhlciBkZXNjcmlwdG9yIGFkZHJlc3MKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIHNldCB0aGUgc2VsZWN0ZWQgY2hhbm5lbCB0cmFuc2ZlciBtb2RlLiBJbmNsdWRlIHBlcmlwaGVyYWwgc2V0dGluZy4KKyAqLwordm9pZCBQRE1BX1NldFRyYW5zZmVyTW9kZShQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoLCB1aW50MzJfdCB1MzJQZXJpcGhlcmFsLCB1aW50MzJfdCB1MzJTY2F0dGVyRW4sIHVpbnQzMl90IHUzMkRlc2NBZGRyKQoreworICAgIGF1OENoU2VsZWN0W3UzMkNoXSA9ICh1aW50OF90KXUzMlBlcmlwaGVyYWw7CisgICAgc3dpdGNoKHUzMkNoKQorICAgIHsKKyAgICAgICAgY2FzZSAwVUw6CisgICAgICAgICAgICAocGRtYSktPlJFUVNFTDBfMyA9ICgocGRtYSktPlJFUVNFTDBfMyAmIH5QRE1BX1JFUVNFTDBfM19SRVFTUkMwX01zaykgfCB1MzJQZXJpcGhlcmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMVVMOgorICAgICAgICAgICAgKHBkbWEpLT5SRVFTRUwwXzMgPSAoKHBkbWEpLT5SRVFTRUwwXzMgJiB+UERNQV9SRVFTRUwwXzNfUkVRU1JDMV9Nc2spIHwgKHUzMlBlcmlwaGVyYWwgPDwgUERNQV9SRVFTRUwwXzNfUkVRU1JDMV9Qb3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMlVMOgorICAgICAgICAgICAgKHBkbWEpLT5SRVFTRUwwXzMgPSAoKHBkbWEpLT5SRVFTRUwwXzMgJiB+UERNQV9SRVFTRUwwXzNfUkVRU1JDMl9Nc2spIHwgKHUzMlBlcmlwaGVyYWwgPDwgUERNQV9SRVFTRUwwXzNfUkVRU1JDMl9Qb3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgM1VMOgorICAgICAgICAgICAgKHBkbWEpLT5SRVFTRUwwXzMgPSAoKHBkbWEpLT5SRVFTRUwwXzMgJiB+UERNQV9SRVFTRUwwXzNfUkVRU1JDM19Nc2spIHwgKHUzMlBlcmlwaGVyYWwgPDwgUERNQV9SRVFTRUwwXzNfUkVRU1JDM19Qb3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNFVMOgorICAgICAgICAgICAgKHBkbWEpLT5SRVFTRUw0XzcgPSAoKHBkbWEpLT5SRVFTRUw0XzcgJiB+UERNQV9SRVFTRUw0XzdfUkVRU1JDNF9Nc2spIHwgdTMyUGVyaXBoZXJhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDVVTDoKKyAgICAgICAgICAgIChwZG1hKS0+UkVRU0VMNF83ID0gKChwZG1hKS0+UkVRU0VMNF83ICYgflBETUFfUkVRU0VMNF83X1JFUVNSQzVfTXNrKSB8ICh1MzJQZXJpcGhlcmFsIDw8IFBETUFfUkVRU0VMNF83X1JFUVNSQzVfUG9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDZVTDoKKyAgICAgICAgICAgIChwZG1hKS0+UkVRU0VMNF83ID0gKChwZG1hKS0+UkVRU0VMNF83ICYgflBETUFfUkVRU0VMNF83X1JFUVNSQzZfTXNrKSB8ICh1MzJQZXJpcGhlcmFsIDw8IFBETUFfUkVRU0VMNF83X1JFUVNSQzZfUG9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDdVTDoKKyAgICAgICAgICAgIChwZG1hKS0+UkVRU0VMNF83ID0gKChwZG1hKS0+UkVRU0VMNF83ICYgflBETUFfUkVRU0VMNF83X1JFUVNSQzdfTXNrKSB8ICh1MzJQZXJpcGhlcmFsIDw8IFBETUFfUkVRU0VMNF83X1JFUVNSQzdfUG9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYodTMyU2NhdHRlckVuKQorICAgIHsKKyAgICAgICAgKHBkbWEpLT5EU0NUW3UzMkNoXS5DVEwgPSAoKHBkbWEpLT5EU0NUW3UzMkNoXS5DVEwgJiB+UERNQV9EU0NUX0NUTF9PUE1PREVfTXNrKSB8IFBETUFfT1BfU0NBVFRFUjsKKyAgICAgICAgKHBkbWEpLT5EU0NUW3UzMkNoXS5ORVhUID0gdTMyRGVzY0FkZHIgLSAoKHBkbWEpLT5TQ0FUQkEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAocGRtYSktPkRTQ1RbdTMyQ2hdLkNUTCA9ICgocGRtYSktPkRTQ1RbdTMyQ2hdLkNUTCAmIH5QRE1BX0RTQ1RfQ1RMX09QTU9ERV9Nc2spIHwgUERNQV9PUF9CQVNJQzsKKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBQRE1BIEJ1cnN0IFR5cGUgYW5kIFNpemUKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gICB1MzJDaCAgICAgICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gICB1MzJCdXJzdFR5cGUgICAgQnVyc3QgbW9kZSBvciBzaW5nbGUgbW9kZS4gVmFsaWQgdmFsdWVzIGFyZQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfUkVRX1NJTkdMRQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfUkVRX0JVUlNUCisgKiBAcGFyYW1baW5dICAgdTMyQnVyc3RTaXplICAgIFNldCB0aGUgc2l6ZSBvZiBidXJzdCBtb2RlLiBWYWxpZCB2YWx1ZXMgYXJlCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9CVVJTVF8xMjgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0JVUlNUXzY0CisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9CVVJTVF8zMgorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfQlVSU1RfMTYKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0JVUlNUXzgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0JVUlNUXzQKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0JVUlNUXzIKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0JVUlNUXzEKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIHNldCB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBidXJzdCB0eXBlIGFuZCBzaXplLgorICovCit2b2lkIFBETUFfU2V0QnVyc3RUeXBlKFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMkJ1cnN0VHlwZSwgdWludDMyX3QgdTMyQnVyc3RTaXplKQoreworICAgIChwZG1hKS0+RFNDVFt1MzJDaF0uQ1RMICY9IH4oUERNQV9EU0NUX0NUTF9UWFRZUEVfTXNrIHwgUERNQV9EU0NUX0NUTF9CVVJTSVpFX01zayk7CisgICAgKHBkbWEpLT5EU0NUW3UzMkNoXS5DVEwgfD0gKHUzMkJ1cnN0VHlwZSB8IHUzMkJ1cnN0U2l6ZSk7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIEVuYWJsZSB0aW1lb3V0IGZ1bmN0aW9uCisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyTWFzayAgICAgICAgIENoYW5uZWwgZW5hYmxlIGJpdHMuCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBlbmFibGUgdGltZW91dCBmdW5jdGlvbiBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbChzKS4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBpbiBjaGFubmVsIDAgYW5kIGNoYW5uZWwgMS4KKyAqLwordm9pZCBQRE1BX0VuYWJsZVRpbWVvdXQoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIChwZG1hKS0+VE9VVEVOIHw9IHUzMk1hc2s7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIERpc2FibGUgdGltZW91dCBmdW5jdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMk1hc2sgICAgICAgICBDaGFubmVsIGVuYWJsZSBiaXRzLgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gZGlzYWJsZSB0aW1lb3V0IGZ1bmN0aW9uIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsKHMpLgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGluIGNoYW5uZWwgMCBhbmQgY2hhbm5lbCAxLgorICovCit2b2lkIFBETUFfRGlzYWJsZVRpbWVvdXQoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIChwZG1hKS0+VE9VVEVOICY9IH51MzJNYXNrOworfQorCisvKioKKyAqIEBicmllZiAgICAgICBTZXQgUERNQSBUaW1lb3V0IENvdW50CisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dICAgdTMyT25PZmYgICAgICAgIEVuYWJsZS9kaXNhYmxlIHRpbWVvdXQgZnVuY3Rpb24KKyAqIEBwYXJhbVtpbl0gICB1MzJUaW1lT3V0Q250ICAgVGltZW91dCBjb3VudAorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gc2V0IHRoZSB0aW1lb3V0IGNvdW50LgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGluIGNoYW5uZWwgMCBhbmQgY2hhbm5lbCAxLgorICovCit2b2lkIFBETUFfU2V0VGltZU91dChQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoLCB1aW50MzJfdCB1MzJPbk9mZiwgdWludDMyX3QgdTMyVGltZU91dENudCkKK3sKKyAgICBzd2l0Y2godTMyQ2gpCisgICAgeworICAgICAgICBjYXNlIDBVTDoKKyAgICAgICAgICAgIChwZG1hKS0+VE9DMF8xID0gKChwZG1hKS0+VE9DMF8xICYgflBETUFfVE9DMF8xX1RPQzBfTXNrKSB8IHUzMlRpbWVPdXRDbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxVUw6CisgICAgICAgICAgICAocGRtYSktPlRPQzBfMSA9ICgocGRtYSktPlRPQzBfMSAmIH5QRE1BX1RPQzBfMV9UT0MxX01zaykgfCAodTMyVGltZU91dENudCA8PCBQRE1BX1RPQzBfMV9UT0MxX1Bvcyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmKHUzMk9uT2ZmKQorICAgIHsKKyAgICAgICAgKHBkbWEpLT5UT1VURU4gfD0gKDFVTCA8PCB1MzJDaCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIChwZG1hKS0+VE9VVEVOICY9IH4oMVVMIDw8IHUzMkNoKTsKKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIFRyaWdnZXIgUERNQQorICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgICAgICBUaGUgc2VsZWN0ZWQgY2hhbm5lbAorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gdHJpZ2dlciB0aGUgc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBQRE1BX1RyaWdnZXIoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJDaCkKK3sKKyAgICBpZihhdThDaFNlbGVjdFt1MzJDaF0gPT0gUERNQV9NRU0pCisgICAgeworICAgICAgICAocGRtYSktPlNXUkVRID0gKDFVTCA8PCB1MzJDaCk7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiAgICAgICBFbmFibGUgSW50ZXJydXB0CisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dICAgdTMyTWFzayAgICAgICAgIFRoZSBJbnRlcnJ1cHQgVHlwZS4gVmFsaWQgdmFsdWVzIGFyZQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSU5UX1RSQU5TX0RPTkUKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0lOVF9UQUJMRQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSU5UX1RJTUVPVVQKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0lOVF9BTElHTgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlIHRoZSBzZWxlY3RlZCBjaGFubmVsIGludGVycnVwdC4KKyAgICAgICAgUERNQV9JTlRfVElNRU9VVCBpcyBvbmx5IHN1cHBvcnRlZCBpbiBjaGFubmVsIDAgYW5kIGNoYW5uZWwgMS4KKyAqLwordm9pZCBQRE1BX0VuYWJsZUludChQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIHN3aXRjaCh1MzJNYXNrKQorICAgIHsKKyAgICAgICAgY2FzZSBQRE1BX0lOVF9UUkFOU19ET05FOgorICAgICAgICBjYXNlIFBETUFfSU5UX0FMSUdOOgorICAgICAgICAgICAgKHBkbWEpLT5JTlRFTiB8PSAoMVVMIDw8IHUzMkNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBETUFfSU5UX1RBQkxFOgorICAgICAgICAgICAgKHBkbWEpLT5EU0NUW3UzMkNoXS5DVEwgJj0gflBETUFfRFNDVF9DVExfVEJJTlRESVNfTXNrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERNQV9JTlRfVElNRU9VVDoKKyAgICAgICAgICAgIChwZG1hKS0+VE9VVElFTiB8PSAoMVVMIDw8IHUzMkNoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIERpc2FibGUgSW50ZXJydXB0CisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dICAgdTMyTWFzayAgICAgICAgIFRoZSBJbnRlcnJ1cHQgVHlwZS4gVmFsaWQgdmFsdWVzIGFyZQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSU5UX1RSQU5TX0RPTkUKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0lOVF9UQUJMRQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSU5UX1RJTUVPVVQKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0lOVF9BTElHTgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gZGlzYWJsZSB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBpbnRlcnJ1cHQuCisgICAgICAgIFBETUFfSU5UX1RJTUVPVVQgaXMgb25seSBzdXBwb3J0ZWQgaW4gY2hhbm5lbCAwIGFuZCBjaGFubmVsIDEuCisgICAgICAgIFRoZSB0cmFuc2ZlciBkb25lIGludGVycnVwdCBpcyBkaXNhYmxlZCB3aGVuIHRhYmxlIGVtcHR5IGludGVycnVwdCBpcyBkaXNhYmxlZChQRE1BX0lOVF9URU1QVFkpLgorICovCit2b2lkIFBETUFfRGlzYWJsZUludChQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIHN3aXRjaCh1MzJNYXNrKQorICAgIHsKKyAgICAgICAgY2FzZSBQRE1BX0lOVF9UUkFOU19ET05FOgorICAgICAgICBjYXNlIFBETUFfSU5UX0FMSUdOOgorICAgICAgICAgICAgKHBkbWEpLT5JTlRFTiAmPSB+KDFVTCA8PCB1MzJDaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQRE1BX0lOVF9UQUJMRToKKyAgICAgICAgICAgIChwZG1hKS0+RFNDVFt1MzJDaF0uQ1RMIHw9IFBETUFfRFNDVF9DVExfVEJJTlRESVNfTXNrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERNQV9JTlRfVElNRU9VVDoKKyAgICAgICAgICAgIChwZG1hKS0+VE9VVElFTiAmPSB+KDFVTCA8PCB1MzJDaCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFBETUFfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUERNQV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvcWVpLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9xZWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzYyZTIzCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvcWVpLmMKQEAgLTAsMCArMSwxNDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBxZWkuYworICogQHZlcnNpb24gIFYzLjAwCisgKiAkUmV2aXNpb246IDIgJAorICogJERhdGU6IDE3LzA5LzIwIDk6MzNhICQKKyAqIEBicmllZiAgICBRdWFkcmF0dXJlIEVuY29kZXIgSW50ZXJmYWNlIChRRUkpIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTTIzNTEuaCIKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFFFSV9Ecml2ZXIgUUVJIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFFFSV9FWFBPUlRFRF9GVU5DVElPTlMgUUVJIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgQ2xvc2UgUUVJIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHJlc2V0IFFFSSBjb25maWd1cmF0aW9uIGFuZCBzdG9wIFFFSSBjb3VudGluZy4KKyAgKi8KK3ZvaWQgUUVJX0Nsb3NlKFFFSV9UKiBxZWkpCit7CisgICAgLyogUmVzZXQgUUVJIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBxZWktPkNUTCA9IDBVTDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBRRUkgaW50ZXJydXB0CisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkludFNlbCAgIEludGVycnVwdCB0eXBlIHNlbGVjdGlvbi4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9ESVJJRU5fTXNrICAgOiBEaXJlY3Rpb24gY2hhbmdlIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX09WVU5JRU5fTXNrICA6IENvdW50ZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0NNUElFTl9Nc2sgICA6IENvbXBhcmUtbWF0Y2ggaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfSURYSUVOX01zayAgIDogSW5kZXggZGV0ZWN0ZWQgaW50ZXJydXB0CisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZGlzYWJsZSBRRUkgc3BlY2lmaWVkIGludGVycnVwdC4KKyAgKi8KK3ZvaWQgUUVJX0Rpc2FibGVJbnQoUUVJX1QqIHFlaSwgdWludDMyX3QgdTMySW50U2VsKQoreworICAgIC8qIERpc2FibGUgUUVJIHNwZWNpZmllZCBpbnRlcnJ1cHQgKi8KKyAgICBRRUlfRElTQUJMRV9JTlQocWVpLCB1MzJJbnRTZWwpOworCisgICAgLyogRGlzYWJsZSBOVklDIFFFSSBJUlEgKi8KKyAgICBpZigocWVpID09IFFFSTApIHx8IChxZWkgPT0gUUVJMF9OUykpCisgICAgeworICAgICAgICBOVklDX0Rpc2FibGVJUlEoUUVJMF9JUlFuKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTlZJQ19EaXNhYmxlSVJRKFFFSTFfSVJRbik7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUUVJIGludGVycnVwdAorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJJbnRTZWwgICBJbnRlcnJ1cHQgdHlwZSBzZWxlY3Rpb24uCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfRElSSUVOX01zayAgIDogRGlyZWN0aW9uIGNoYW5nZSBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9PVlVOSUVOX01zayAgOiBDb3VudGVyIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9DTVBJRU5fTXNrICAgOiBDb21wYXJlLW1hdGNoIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0lEWElFTl9Nc2sgICA6IEluZGV4IGRldGVjdGVkIGludGVycnVwdAorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZSBRRUkgc3BlY2lmaWVkIGludGVycnVwdC4KKyAgKi8KK3ZvaWQgUUVJX0VuYWJsZUludChRRUlfVCogcWVpLCB1aW50MzJfdCB1MzJJbnRTZWwpCit7CisgICAgLyogRW5hYmxlIFFFSSBzcGVjaWZpZWQgaW50ZXJydXB0ICovCisgICAgUUVJX0VOQUJMRV9JTlQocWVpLCB1MzJJbnRTZWwpOworCisgICAgLyogRW5hYmxlIE5WSUMgUUVJIElSUSAqLworICAgIGlmKChxZWkgPT0gUUVJMCkgfHwgKHFlaSA9PSBRRUkwX05TKSkKKyAgICB7CisgICAgICAgIE5WSUNfRW5hYmxlSVJRKFFFSTBfSVJRbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE5WSUNfRW5hYmxlSVJRKFFFSTFfSVJRbik7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBPcGVuIFFFSSBpbiBzcGVjaWZpZWQgbW9kZSBhbmQgZW5hYmxlIGlucHV0CisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1vZGUgICAgIFFFSSBjb3VudGluZyBtb2RlLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX1g0X0ZSRUVfQ09VTlRJTkdfTU9ERQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX1gyX0ZSRUVfQ09VTlRJTkdfTU9ERQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX1g0X0NPTVBBUkVfQ09VTlRJTkdfTU9ERQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX1gyX0NPTVBBUkVfQ09VTlRJTkdfTU9ERQorICAqIEBwYXJhbVtpbl0gIHUzMlZhbHVlICAgIFRoZSBjb3VudGVyIG1heGltdW0gdmFsdWUgaW4gY29tcGFyZS1jb3VudGluZyBtb2RlLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHNldCBRRUkgaW4gc3BlY2lmaWVkIG1vZGUgYW5kIGVuYWJsZSBpbnB1dC4KKyAgKi8KK3ZvaWQgUUVJX09wZW4oUUVJX1QqIHFlaSwgdWludDMyX3QgdTMyTW9kZSwgdWludDMyX3QgdTMyVmFsdWUpCit7CisgICAgLyogU2V0IFFFSSBmdW5jdGlvbiBjb25maWd1cmF0aW9uICovCisgICAgLyogU2V0IFFFSSBjb3VudGluZyBtb2RlICovCisgICAgLyogRW5hYmxlIElEWCwgUUVBIGFuZCBRRUIgaW5wdXQgdG8gUUVJIGNvbnRyb2xsZXIgKi8KKyAgICBxZWktPkNUTCA9IChxZWktPkNUTCAmICh+UUVJX0NUTF9NT0RFX01zaykpIHwgKCh1MzJNb2RlKSB8IFFFSV9DVExfQ0hBRU5fTXNrIHwgUUVJX0NUTF9DSEJFTl9Nc2sgfCBRRUlfQ1RMX0lEWEVOX01zayk7CisKKyAgICAvKiBTZXQgUUVJIG1heGltdW0gY291bnQgdmFsdWUgaW4gaW4gY29tcGFyZS1jb3VudGluZyBtb2RlICovCisgICAgcWVpLT5DTlRNQVggPSB1MzJWYWx1ZTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgU3RhcnQgUUVJIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSAgcWVpICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlIFFFSSBmdW5jdGlvbiBhbmQgc3RhcnQgUUVJIGNvdW50aW5nLgorICAqLwordm9pZCBRRUlfU3RhcnQoUUVJX1QqIHFlaSkKK3sKKyAgICAvKiBFbmFibGUgUUVJIGNvbnRyb2xsZXIgZnVuY3Rpb24gKi8KKyAgICBxZWktPkNUTCB8PSBRRUlfQ1RMX1FFSUVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgU3RvcCBRRUkgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBxZWkgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIFFFSSBmdW5jdGlvbiBhbmQgc3RvcCBRRUkgY291bnRpbmcuCisgICovCit2b2lkIFFFSV9TdG9wKFFFSV9UKiBxZWkpCit7CisgICAgLyogRGlzYWJsZSBRRUkgY29udHJvbGxlciBmdW5jdGlvbiAqLworICAgIHFlaS0+Q1RMICY9ICh+UUVJX0NUTF9RRUlFTl9Nc2spOworfQorCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUUVJX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFFFSV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvcXNwaS5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvcXNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYmFmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9xc3BpLmMKQEAgLTAsMCArMSw4MzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBxc3BpLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBRU1BJIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFFTUElfRHJpdmVyIFFTUEkgRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBRU1BJX0VYUE9SVEVEX0ZVTkNUSU9OUyBRU1BJIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIG1ha2UgUVNQSSBtb2R1bGUgYmUgcmVhZHkgdG8gdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc3RlclNsYXZlIERlY2lkZXMgdGhlIFFTUEkgbW9kdWxlIGlzIG9wZXJhdGluZyBpbiBtYXN0ZXIgbW9kZSBvciBpbiBzbGF2ZSBtb2RlLiAoUVNQSV9TTEFWRSwgUVNQSV9NQVNURVIpCisgICogQHBhcmFtW2luXSAgdTMyUVNQSU1vZGUgRGVjaWRlcyB0aGUgdHJhbnNmZXIgdGltaW5nLiAoUVNQSV9NT0RFXzAsIFFTUElfTU9ERV8xLCBRU1BJX01PREVfMiwgUVNQSV9NT0RFXzMpCisgICogQHBhcmFtW2luXSAgdTMyRGF0YVdpZHRoIERlY2lkZXMgdGhlIGRhdGEgd2lkdGggb2YgYSBRU1BJIHRyYW5zYWN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHUzMkJ1c0Nsb2NrIFRoZSBleHBlY3RlZCBmcmVxdWVuY3kgb2YgUVNQSSBidXMgY2xvY2sgaW4gSHouCisgICogQHJldHVybiBBY3R1YWwgZnJlcXVlbmN5IG9mIFFTUEkgcGVyaXBoZXJhbCBjbG9jay4KKyAgKiBAZGV0YWlscyBCeSBkZWZhdWx0LCB0aGUgUVNQSSB0cmFuc2ZlciBzZXF1ZW5jZSBpcyBNU0IgZmlyc3QsIHRoZSBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGlzIGFjdGl2ZSBsb3cgYW5kIHRoZSBhdXRvbWF0aWMKKyAgKiAgICAgICAgICBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24gaXMgZGlzYWJsZWQuCisgICogICAgICAgICAgSW4gU2xhdmUgbW9kZSwgdGhlIHUzMkJ1c0Nsb2NrIHNoYWxsIGJlIE5VTEwgYW5kIHRoZSBRU1BJIGNsb2NrIGRpdmlkZXIgc2V0dGluZyB3aWxsIGJlIDAuCisgICogICAgICAgICAgVGhlIGFjdHVhbCBjbG9jayByYXRlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgdGFyZ2V0IFFTUEkgY2xvY2sgcmF0ZS4KKyAgKiAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIFFTUEkgc291cmNlIGNsb2NrIHJhdGUgaXMgMTIgTUh6IGFuZCB0aGUgdGFyZ2V0IFFTUEkgYnVzIGNsb2NrIHJhdGUgaXMgNyBNSHosIHRoZQorICAqICAgICAgICAgIGFjdHVhbCBRU1BJIGNsb2NrIHJhdGUgd2lsbCBiZSA2TUh6LgorICAgIElmIHUzMkJ1c0Nsb2NrID0gMCwgRElWSURFUiBzZXR0aW5nIHdpbGwgYmUgc2V0IHRvIHRoZSBtYXhpbXVtIHZhbHVlLgorICAgIElmIHUzMkJ1c0Nsb2NrID49IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgZm9yIFNlY3VyZSwgUVNQSSBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSB3aWxsIGJlIHNldCB0byBBUEIgY2xvY2sgYW5kIERJVklERVIgd2lsbCBiZSBzZXQgdG8gMC4KKyAgICBJZiB1MzJCdXNDbG9jayA+PSBzeXN0ZW0gY2xvY2sgZnJlcXVlbmN5IGZvciBOb24tU2VjdXJlLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGRvIGFueXRoaW5nIHRvIGF2b2lkIHRoZSBzaXR1YXRpb24gdGhhdCB0aGUgZnJlcXVlbmN5IG9mCisgICogICAgICAgICBRU1BJIGJ1cyBjbG9jayBjYW5ub3QgYmUgZmFzdGVyIHRoYW4gdGhlIHN5c3RlbSBjbG9jayByYXRlLiBVc2VyIHNob3VsZCBzZXQgdXAgY2FyZWZ1bGx5LgorICAgIElmIHUzMkJ1c0Nsb2NrID49IFFTUEkgcGVyaXBoZXJhbCBjbG9jayBzb3VyY2UsIERJVklERVIgd2lsbCBiZSBzZXQgdG8gMC4KKyAgICBJbiBzbGF2ZSBtb2RlIGZvciBTZWN1cmUsIHRoZSBRU1BJIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSB3aWxsIGVxdWFsIHRvIEFQQiBjbG9jayByYXRlLgorICAgIEluIHNsYXZlIG1vZGUgZm9yIE5vbi1TZWN1cmUsIHRoZSBRU1BJIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSB3aWxsIGVxdWFsIHRvIHRoZSBjbG9jayByYXRlIHNldCBpbiBzZWN1cmUgbW9kZS4KKyAgKi8KK3VpbnQzMl90IFFTUElfT3BlbihRU1BJX1QgKnFzcGksCisgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyTWFzdGVyU2xhdmUsCisgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyUVNQSU1vZGUsCisgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyRGF0YVdpZHRoLAorICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKQoreworICAgIHVpbnQzMl90IHUzMkNsa1NyYyA9IDBVTCwgdTMyRGl2LCB1MzJIQ0xLRnJlcSwgdTMyUENMSzBGcmVxLCB1MzJSZXRWYWx1ZSA9IDBVTDsKKworICAgIGlmKHUzMkRhdGFXaWR0aCA9PSAzMlVMKQorICAgIHsKKyAgICAgICAgdTMyRGF0YVdpZHRoID0gMFVMOworICAgIH0KKworICAgIC8qIEdldCBzeXN0ZW0gY2xvY2sgZnJlcXVlbmN5ICovCisgICAgdTMySENMS0ZyZXEgPSBDTEtfR2V0SENMS0ZyZXEoKTsKKyAgICAvKiBHZXQgQVBCMCBjbG9jayBmcmVxdWVuY3kgKi8KKyAgICB1MzJQQ0xLMEZyZXEgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisKKyAgICBpZih1MzJNYXN0ZXJTbGF2ZSA9PSBRU1BJX01BU1RFUikKKyAgICB7CisgICAgICAgIC8qIERlZmF1bHQgc2V0dGluZzogc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpcyBhY3RpdmUgbG93OyBkaXNhYmxlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24uICovCisgICAgICAgIHFzcGktPlNTQ1RMID0gUVNQSV9TU19BQ1RJVkVfTE9XOworCisgICAgICAgIC8qIERlZmF1bHQgc2V0dGluZzogTVNCIGZpcnN0LCBkaXNhYmxlIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0LCBTUF9DWUNMRSA9IDAuICovCisgICAgICAgIHFzcGktPkNUTCA9IHUzMk1hc3RlclNsYXZlIHwgKHUzMkRhdGFXaWR0aCA8PCBRU1BJX0NUTF9EV0lEVEhfUG9zKSB8ICh1MzJRU1BJTW9kZSkgfCBRU1BJX0NUTF9TUElFTl9Nc2s7CisKKyAgICAgICAgaWYodTMyQnVzQ2xvY2sgPj0gdTMySENMS0ZyZXEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCEoX19QQygpICYgTlNfT0ZGU0VUKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgUENMSyBhcyB0aGUgY2xvY2sgc291cmNlIG9mIFFTUEkgKi8KKyAgICAgICAgICAgICAgICBpZigocXNwaSA9PSBRU1BJMCkgfHwgKHFzcGkgPT0gUVNQSTBfTlMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfUVNQSTBTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9QQ0xLMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBDaGVjayBjbG9jayBzb3VyY2Ugb2YgUVNQSSAqLworICAgICAgICBpZigocXNwaSA9PSBRU1BJMCkgfHwgKHFzcGkgPT0gUVNQSTBfTlMpKQorICAgICAgICB7CisgICAgICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFFTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9IWFQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShRU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1FTUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUExMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFFTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9QQ0xLMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UENMSzBGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKHUzMkJ1c0Nsb2NrID49IHUzMkhDTEtGcmVxKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXQgRElWSURFUiA9IDAgKi8KKyAgICAgICAgICAgIHFzcGktPkNMS0RJViA9IDBVTDsKKyAgICAgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMkNsa1NyYzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHUzMkJ1c0Nsb2NrID49IHUzMkNsa1NyYykKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2V0IERJVklERVIgPSAwICovCisgICAgICAgICAgICBxc3BpLT5DTEtESVYgPSAwVUw7CisgICAgICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJDbGtTcmM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZih1MzJCdXNDbG9jayA9PSAwVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNldCBESVZJREVSIHRvIHRoZSBtYXhpbXVtIHZhbHVlIDB4MUZGLiBmX3NwaSA9IGZfc3BpX2Nsa19zcmMgLyAoRElWSURFUiArIDEpICovCisgICAgICAgICAgICBxc3BpLT5DTEtESVYgfD0gUVNQSV9DTEtESVZfRElWSURFUl9Nc2s7CisgICAgICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSAodTMyQ2xrU3JjIC8gKDB4MUZGVUwgKyAxVUwpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkRpdiA9ICgoKHUzMkNsa1NyYyAqIDEwVUwpIC8gdTMyQnVzQ2xvY2sgKyA1VUwpIC8gMTBVTCkgLSAxVUw7IC8qIFJvdW5kIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgKi8KKyAgICAgICAgICAgIGlmKHUzMkRpdiA+IDB4MUZGVUwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyRGl2ID0gMHgxRkZVTDsKKyAgICAgICAgICAgICAgICBxc3BpLT5DTEtESVYgfD0gUVNQSV9DTEtESVZfRElWSURFUl9Nc2s7CisgICAgICAgICAgICAgICAgLyogUmV0dXJuIG1hc3RlciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9ICh1MzJDbGtTcmMgLyAoMHgxRkZVTCArIDFVTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHFzcGktPkNMS0RJViA9IChxc3BpLT5DTEtESVYgJiAoflFTUElfQ0xLRElWX0RJVklERVJfTXNrKSkgfCAodTMyRGl2IDw8IFFTUElfQ0xLRElWX0RJVklERVJfUG9zKTsKKyAgICAgICAgICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gKHUzMkNsa1NyYyAvICh1MzJEaXYgKyAxVUwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAgICAvKiBGb3Igc2xhdmUgbW9kZSwgZm9yY2UgdGhlIFFTUEkgcGVyaXBoZXJhbCBjbG9jayByYXRlIHRvIGVxdWFsIEFQQiBjbG9jayByYXRlLiAqLworICAgIHsKKyAgICAgICAgLyogRGVmYXVsdCBzZXR0aW5nOiBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGlzIGxvdyBsZXZlbCBhY3RpdmUuICovCisgICAgICAgIHFzcGktPlNTQ1RMID0gUVNQSV9TU19BQ1RJVkVfTE9XOworCisgICAgICAgIC8qIERlZmF1bHQgc2V0dGluZzogTVNCIGZpcnN0LCBkaXNhYmxlIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0LCBTUF9DWUNMRSA9IDAuICovCisgICAgICAgIHFzcGktPkNUTCA9IHUzMk1hc3RlclNsYXZlIHwgKHUzMkRhdGFXaWR0aCA8PCBRU1BJX0NUTF9EV0lEVEhfUG9zKSB8ICh1MzJRU1BJTW9kZSkgfCBRU1BJX0NUTF9TUElFTl9Nc2s7CisKKyAgICAgICAgLyogU2V0IERJVklERVIgPSAwICovCisgICAgICAgIHFzcGktPkNMS0RJViA9IDBVTDsKKworICAgICAgICBpZighKF9fUEMoKSAmIE5TX09GRlNFVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNlbGVjdCBQQ0xLIGFzIHRoZSBjbG9jayBzb3VyY2Ugb2YgUVNQSSAqLworICAgICAgICAgICAgaWYoKHFzcGkgPT0gUVNQSTApIHx8IChxc3BpID09IFFTUEkwX05TKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDTEstPkNMS1NFTDIgPSAoQ0xLLT5DTEtTRUwyICYgKH5DTEtfQ0xLU0VMMl9RU1BJMFNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1FTUEkwU0VMX1BDTEswOworICAgICAgICAgICAgICAgIC8qIFJldHVybiBzbGF2ZSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMlBDTEswRnJlcTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoZWNrIGNsb2NrIHNvdXJjZSBvZiBRU1BJICovCisgICAgICAgICAgICBpZigocXNwaSA9PSBRU1BJMCkgfHwgKHFzcGkgPT0gUVNQSTBfTlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoUVNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1FTUEkwU0VMX0hYVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFFTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9QTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoUVNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1FTUEkwU0VMX1BDTEswKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJQQ0xLMEZyZXE7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdTMyUmV0VmFsdWU7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBRU1BJIGNvbnRyb2xsZXIuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIENsZWFyIFNQSUVOIGJpdCBvZiBRU1BJX0NUTCByZWdpc3RlciB0byBkaXNhYmxlIFFTUEkgdHJhbnNmZXIgY29udHJvbC4KKyAgKi8KK3ZvaWQgUVNQSV9DbG9zZShRU1BJX1QgKnFzcGkpCit7CisgICAgcXNwaS0+Q1RMICY9IH5RU1BJX0NUTF9TUElFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2xlYXIgUlggRklGTyBidWZmZXIuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBRU1BJIFJYIEZJRk8gYnVmZmVyLiBUaGUgUlhFTVBUWSAoUVNQSV9TVEFUVVNbOF0pIHdpbGwgYmUgc2V0IHRvIDEuCisgICovCit2b2lkIFFTUElfQ2xlYXJSeEZJRk8oUVNQSV9UICpxc3BpKQoreworICAgIHFzcGktPkZJRk9DVEwgfD0gUVNQSV9GSUZPQ1RMX1JYRkJDTFJfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgIENsZWFyIFRYIEZJRk8gYnVmZmVyLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgUVNQSSBUWCBGSUZPIGJ1ZmZlci4gVGhlIFRYRU1QVFkgKFFTUElfU1RBVFVTWzE2XSkgd2lsbCBiZSBzZXQgdG8gMS4KKyAgVGhlIFRYIHNoaWZ0IHJlZ2lzdGVyIHdpbGwgbm90IGJlIGNsZWFyZWQuCisgICovCit2b2lkIFFTUElfQ2xlYXJUeEZJRk8oUVNQSV9UICpxc3BpKQoreworICAgIHFzcGktPkZJRk9DVEwgfD0gUVNQSV9GSUZPQ1RMX1RYRkJDTFJfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgdGhlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gd2lsbCBkaXNhYmxlIHRoZSBhdXRvbWF0aWMgc2xhdmUgc2VsZWN0aW9uIGZ1bmN0aW9uIGFuZCBzZXQgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCB0byBpbmFjdGl2ZSBzdGF0ZS4KKyAgKi8KK3ZvaWQgUVNQSV9EaXNhYmxlQXV0b1NTKFFTUElfVCAqcXNwaSkKK3sKKyAgICBxc3BpLT5TU0NUTCAmPSB+KFFTUElfU1NDVExfQVVUT1NTX01zayB8IFFTUElfU1NDVExfU1NfTXNrKTsKK30KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgdGhlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlNTUGluTWFzayBTcGVjaWZpZXMgc2xhdmUgc2VsZWN0aW9uIHBpbnMuIChRU1BJX1NTKQorICAqIEBwYXJhbVtpbl0gIHUzMkFjdGl2ZUxldmVsIFNwZWNpZmllcyB0aGUgYWN0aXZlIGxldmVsIG9mIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwuIChRU1BJX1NTX0FDVElWRV9ISUdILCBRU1BJX1NTX0FDVElWRV9MT1cpCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZSB0aGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbi4gT25seSBhdmFpbGFibGUgaW4gTWFzdGVyIG1vZGUuCisgICogICAgICAgICAgVGhlIHNsYXZlIHNlbGVjdGlvbiBwaW4gYW5kIHRoZSBhY3RpdmUgbGV2ZWwgd2lsbCBiZSBzZXQgaW4gdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgUVNQSV9FbmFibGVBdXRvU1MoUVNQSV9UICpxc3BpLCB1aW50MzJfdCB1MzJTU1Bpbk1hc2ssIHVpbnQzMl90IHUzMkFjdGl2ZUxldmVsKQoreworICAgIHFzcGktPlNTQ1RMID0gKHFzcGktPlNTQ1RMICYgKH4oUVNQSV9TU0NUTF9BVVRPU1NfTXNrIHwgUVNQSV9TU0NUTF9TU0FDVFBPTF9Nc2sgfCBRU1BJX1NTQ1RMX1NTX01zaykpKSB8ICh1MzJTU1Bpbk1hc2sgfCB1MzJBY3RpdmVMZXZlbCB8IFFTUElfU1NDVExfQVVUT1NTX01zayk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU2V0IHRoZSBRU1BJIGJ1cyBjbG9jay4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQnVzQ2xvY2sgVGhlIGV4cGVjdGVkIGZyZXF1ZW5jeSBvZiBRU1BJIGJ1cyBjbG9jayBpbiBIei4KKyAgKiBAcmV0dXJuIEFjdHVhbCBmcmVxdWVuY3kgb2YgUVNQSSBidXMgY2xvY2suCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpbiBNYXN0ZXIgbW9kZS4gVGhlIGFjdHVhbCBjbG9jayByYXRlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgdGFyZ2V0IFFTUEkgYnVzIGNsb2NrIHJhdGUuCisgICogICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSBRU1BJIHNvdXJjZSBjbG9jayByYXRlIGlzIDEyIE1IeiBhbmQgdGhlIHRhcmdldCBRU1BJIGJ1cyBjbG9jayByYXRlIGlzIDcgTUh6LCB0aGUgYWN0dWFsIFFTUEkgYnVzIGNsb2NrCisgICogICAgICAgICAgcmF0ZSB3aWxsIGJlIDYgTUh6LgorICAgIElmIHUzMkJ1c0Nsb2NrID0gMCwgRElWSURFUiBzZXR0aW5nIHdpbGwgYmUgc2V0IHRvIHRoZSBtYXhpbXVtIHZhbHVlLgorICAgIElmIHUzMkJ1c0Nsb2NrID49IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgZm9yIFNlY3VyZSwgUVNQSSBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSB3aWxsIGJlIHNldCB0byBBUEIgY2xvY2sgYW5kIERJVklERVIgd2lsbCBiZSBzZXQgdG8gMC4KKyAgICBJZiB1MzJCdXNDbG9jayA+PSBzeXN0ZW0gY2xvY2sgZnJlcXVlbmN5IGZvciBOb24tU2VjdXJlLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGRvIGFueXRoaW5nIHRvIGF2b2lkIHRoZSBzaXR1YXRpb24gdGhhdCB0aGUgZnJlcXVlbmN5IG9mCisgICogICAgICAgICBRU1BJIGJ1cyBjbG9jayBjYW5ub3QgYmUgZmFzdGVyIHRoYW4gdGhlIHN5c3RlbSBjbG9jayByYXRlLiBVc2VyIHNob3VsZCBzZXQgdXAgY2FyZWZ1bGx5LgorICAgIElmIHUzMkJ1c0Nsb2NrID49IFFTUEkgcGVyaXBoZXJhbCBjbG9jayBzb3VyY2UsIERJVklERVIgd2lsbCBiZSBzZXQgdG8gMC4KKyAgKi8KK3VpbnQzMl90IFFTUElfU2V0QnVzQ2xvY2soUVNQSV9UICpxc3BpLCB1aW50MzJfdCB1MzJCdXNDbG9jaykKK3sKKyAgICB1aW50MzJfdCB1MzJDbGtTcmMsIHUzMkhDTEtGcmVxOworICAgIHVpbnQzMl90IHUzMkRpdiwgdTMyUmV0VmFsdWU7CisKKyAgICAvKiBDaGVjayBpZiB2YWxpZCBRU1BJIGV4aXN0ICovCisgICAgaWYoISgocXNwaSA9PSBRU1BJMCkgfHwgKHFzcGkgPT0gUVNQSTBfTlMpKSkKKyAgICB7CisgICAgICAgIHJldHVybiAwVUw7CisgICAgfQorCisgICAgLyogR2V0IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgKi8KKyAgICB1MzJIQ0xLRnJlcSA9IENMS19HZXRIQ0xLRnJlcSgpOworCisgICAgaWYodTMyQnVzQ2xvY2sgPj0gdTMySENMS0ZyZXEpCisgICAgeworICAgICAgICBpZighKF9fUEMoKSAmIE5TX09GRlNFVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNlbGVjdCBQQ0xLIGFzIHRoZSBjbG9jayBzb3VyY2Ugb2YgUVNQSSAqLworICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfUVNQSTBTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9QQ0xLMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENoZWNrIGNsb2NrIHNvdXJjZSBvZiBRU1BJICovCisgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShRU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1FTUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfUVNQSTBTRUxfSFhUKQorICAgIHsKKyAgICAgICAgdTMyQ2xrU3JjID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICB9CisgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFFTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9QTEwpCisgICAgeworICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICB9CisgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFFTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9QQ0xLMCkKKyAgICB7CisgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQQ0xLMEZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEswICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMkNsa1NyYyA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICB9CisKKyAgICBpZih1MzJCdXNDbG9jayA+PSB1MzJIQ0xLRnJlcSkKKyAgICB7CisgICAgICAgIC8qIFNldCBESVZJREVSID0gMCAqLworICAgICAgICBxc3BpLT5DTEtESVYgPSAwVUw7CisgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgIHUzMlJldFZhbHVlID0gdTMyQ2xrU3JjOworICAgIH0KKyAgICBlbHNlIGlmKHUzMkJ1c0Nsb2NrID49IHUzMkNsa1NyYykKKyAgICB7CisgICAgICAgIC8qIFNldCBESVZJREVSID0gMCAqLworICAgICAgICBxc3BpLT5DTEtESVYgPSAwVUw7CisgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgIHUzMlJldFZhbHVlID0gdTMyQ2xrU3JjOworICAgIH0KKyAgICBlbHNlIGlmKHUzMkJ1c0Nsb2NrID09IDBVTCkKKyAgICB7CisgICAgICAgIC8qIFNldCBESVZJREVSIHRvIHRoZSBtYXhpbXVtIHZhbHVlIDB4MUZGLiBmX3NwaSA9IGZfc3BpX2Nsa19zcmMgLyAoRElWSURFUiArIDEpICovCisgICAgICAgIHFzcGktPkNMS0RJViB8PSBRU1BJX0NMS0RJVl9ESVZJREVSX01zazsKKyAgICAgICAgLyogUmV0dXJuIG1hc3RlciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgdTMyUmV0VmFsdWUgPSAodTMyQ2xrU3JjIC8gKDB4MUZGVUwgKyAxVUwpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyRGl2ID0gKCgodTMyQ2xrU3JjICogMTBVTCkgLyB1MzJCdXNDbG9jayArIDVVTCkgLyAxMFVMKSAtIDFVTDsgLyogUm91bmQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciAqLworICAgICAgICBpZih1MzJEaXYgPiAweDFGRlVMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJEaXYgPSAweDFGRlVMOworICAgICAgICAgICAgcXNwaS0+Q0xLRElWIHw9IFFTUElfQ0xLRElWX0RJVklERVJfTXNrOworICAgICAgICAgICAgLyogUmV0dXJuIG1hc3RlciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgIHUzMlJldFZhbHVlID0gKHUzMkNsa1NyYyAvICgweDFGRlVMICsgMVVMKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBxc3BpLT5DTEtESVYgPSAocXNwaS0+Q0xLRElWICYgKH5RU1BJX0NMS0RJVl9ESVZJREVSX01zaykpIHwgKHUzMkRpdiA8PCBRU1BJX0NMS0RJVl9ESVZJREVSX1Bvcyk7CisgICAgICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSAodTMyQ2xrU3JjIC8gKHUzMkRpdiArIDFVTCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHUzMlJldFZhbHVlOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBGSUZPIHRocmVzaG9sZCBzZXR0aW5nLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJUeFRocmVzaG9sZCBEZWNpZGVzIHRoZSBUWCBGSUZPIHRocmVzaG9sZC4gSXQgY291bGQgYmUgMCB+IDcuCisgICogQHBhcmFtW2luXSAgdTMyUnhUaHJlc2hvbGQgRGVjaWRlcyB0aGUgUlggRklGTyB0aHJlc2hvbGQuIEl0IGNvdWxkIGJlIDAgfiA3LgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFNldCBUWCBGSUZPIHRocmVzaG9sZCBhbmQgUlggRklGTyB0aHJlc2hvbGQgY29uZmlndXJhdGlvbnMuCisgICovCit2b2lkIFFTUElfU2V0RklGTyhRU1BJX1QgKnFzcGksIHVpbnQzMl90IHUzMlR4VGhyZXNob2xkLCB1aW50MzJfdCB1MzJSeFRocmVzaG9sZCkKK3sKKyAgICBxc3BpLT5GSUZPQ1RMID0gKHFzcGktPkZJRk9DVEwgJiB+KFFTUElfRklGT0NUTF9UWFRIX01zayB8IFFTUElfRklGT0NUTF9SWFRIX01zaykpIHwKKyAgICAgICAgICAgICAgICAgICAgKHUzMlR4VGhyZXNob2xkIDw8IFFTUElfRklGT0NUTF9UWFRIX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAodTMyUnhUaHJlc2hvbGQgPDwgUVNQSV9GSUZPQ1RMX1JYVEhfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgdGhlIGFjdHVhbCBmcmVxdWVuY3kgb2YgUVNQSSBidXMgY2xvY2suIE9ubHkgYXZhaWxhYmxlIGluIE1hc3RlciBtb2RlLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIEFjdHVhbCBRU1BJIGJ1cyBjbG9jayBmcmVxdWVuY3kgaW4gSHouCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGN1bGF0ZSB0aGUgYWN0dWFsIFFTUEkgYnVzIGNsb2NrIHJhdGUgYWNjb3JkaW5nIHRvIHRoZSBRUVNQSVNFTC9RU1BJeFNFTCBhbmQgRElWSURFUiBzZXR0aW5ncy4gT25seSBhdmFpbGFibGUgaW4gTWFzdGVyIG1vZGUuCisgICovCit1aW50MzJfdCBRU1BJX0dldEJ1c0Nsb2NrKFFTUElfVCAqcXNwaSkKK3sKKyAgICB1aW50MzJfdCB1MzJEaXY7CisgICAgdWludDMyX3QgdTMyQ2xrU3JjOworCisgICAgLyogQ2hlY2sgaWYgdmFsaWQgUVNQSSBleGlzdCAqLworICAgIGlmKCEoKHFzcGkgPT0gUVNQSTApIHx8IChxc3BpID09IFFTUEkwX05TKSkpCisgICAgeworICAgICAgICByZXR1cm4gMFVMOworICAgIH0KKworICAgIC8qIEdldCBESVZJREVSIHNldHRpbmcgKi8KKyAgICB1MzJEaXYgPSAocXNwaS0+Q0xLRElWICYgUVNQSV9DTEtESVZfRElWSURFUl9Nc2spID4+IFFTUElfQ0xLRElWX0RJVklERVJfUG9zOworCisgICAgLyogQ2hlY2sgY2xvY2sgc291cmNlIG9mIFFTUEkgKi8KKyAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFFTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9IWFQpCisgICAgeworICAgICAgICB1MzJDbGtTcmMgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgIH0KKyAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoUVNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1FTUEkwU0VMX1BMTCkKKyAgICB7CisgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgIH0KKyAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoUVNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1FTUEkwU0VMX1BDTEswKQorICAgIHsKKyAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBDTEswRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzAgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyQ2xrU3JjID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgIH0KKworICAgIC8qIFJldHVybiBRU1BJIGJ1cyBjbG9jayByYXRlICovCisgICAgcmV0dXJuICh1MzJDbGtTcmMgLyAodTMyRGl2ICsgMVVMKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIGludGVycnVwdCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzLgorICAqICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgZW5hYmxlIGJpdC4KKyAgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQuIEl0IGlzIGNvbWJpbmF0aW9uIG9mOgorICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9VTklUX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NTQUNUX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NTSU5BQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU0xWVVJfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU0xWQkVfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU0xWVE9fSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfVFhVRl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9GSUZPX1RYVEhfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfRklGT19SWFRIX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9GSUZPX1JYVE9fSU5UX01BU0sKKyAgKgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIEVuYWJsZSBRU1BJIHJlbGF0ZWQgaW50ZXJydXB0cyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCit2b2lkIFFTUElfRW5hYmxlSW50KFFTUElfVCAqcXNwaSwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICAvKiBFbmFibGUgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9VTklUX0lOVF9NQVNLKSA9PSBRU1BJX1VOSVRfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5DVEwgfD0gUVNQSV9DVExfVU5JVElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1NTQUNUX0lOVF9NQVNLKSA9PSBRU1BJX1NTQUNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1NDVEwgfD0gUVNQSV9TU0NUTF9TU0FDVElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaW5hY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfU1NJTkFDVF9JTlRfTUFTSykgPT0gUVNQSV9TU0lOQUNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1NDVEwgfD0gUVNQSV9TU0NUTF9TU0lOQUlFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHNsYXZlIFRYIHVuZGVyIHJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9TTFZVUl9JTlRfTUFTSykgPT0gUVNQSV9TTFZVUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPlNTQ1RMIHw9IFFTUElfU1NDVExfU0xWVVJJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBzbGF2ZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfU0xWQkVfSU5UX01BU0spID09IFFTUElfU0xWQkVfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5TU0NUTCB8PSBRU1BJX1NTQ1RMX1NMVkJFSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgc2xhdmUgbW9kZSB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9TTFZUT19JTlRfTUFTSykgPT0gUVNQSV9TTFZUT19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPlNTQ1RMIHw9IFFTUElfU1NDVExfU0xWVE9JRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBzbGF2ZSBUWCB1bmRlcmZsb3cgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfVFhVRl9JTlRfTUFTSykgPT0gUVNQSV9UWFVGX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+RklGT0NUTCB8PSBRU1BJX0ZJRk9DVExfVFhVRklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFRYIHRocmVzaG9sZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9GSUZPX1RYVEhfSU5UX01BU0spID09IFFTUElfRklGT19UWFRIX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+RklGT0NUTCB8PSBRU1BJX0ZJRk9DVExfVFhUSElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFJYIHRocmVzaG9sZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9GSUZPX1JYVEhfSU5UX01BU0spID09IFFTUElfRklGT19SWFRIX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+RklGT0NUTCB8PSBRU1BJX0ZJRk9DVExfUlhUSElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFJYIG92ZXJydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfRklGT19SWE9WX0lOVF9NQVNLKSA9PSBRU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPkZJRk9DVEwgfD0gUVNQSV9GSUZPQ1RMX1JYT1ZJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9GSUZPX1JYVE9fSU5UX01BU0spID09IFFTUElfRklGT19SWFRPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+RklGT0NUTCB8PSBRU1BJX0ZJRk9DVExfUlhUT0lFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMuCisgICogICAgICAgICAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBiaXQuCisgICogICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdHMgd2lsbCBiZSBkaXNhYmxlZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1VOSVRfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU1NBQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU1NJTkFDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TTFZVUl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TTFZCRV9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TTFZUT19JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9UWFVGX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9GSUZPX1JYVEhfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfRklGT19SWE9WX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX0ZJRk9fUlhUT19JTlRfTUFTSworICAqCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgRGlzYWJsZSBRU1BJIHJlbGF0ZWQgaW50ZXJydXB0cyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCit2b2lkIFFTUElfRGlzYWJsZUludChRU1BJX1QgKnFzcGksIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgLyogRGlzYWJsZSB1bml0IHRyYW5zZmVyIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1VOSVRfSU5UX01BU0spID09IFFTUElfVU5JVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPkNUTCAmPSB+UVNQSV9DVExfVU5JVElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9TU0FDVF9JTlRfTUFTSykgPT0gUVNQSV9TU0FDVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPlNTQ1RMICY9IH5RU1BJX1NTQ1RMX1NTQUNUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaW5hY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfU1NJTkFDVF9JTlRfTUFTSykgPT0gUVNQSV9TU0lOQUNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1NDVEwgJj0gflFTUElfU1NDVExfU1NJTkFJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgc2xhdmUgVFggdW5kZXIgcnVuIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1NMVlVSX0lOVF9NQVNLKSA9PSBRU1BJX1NMVlVSX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1NDVEwgJj0gflFTUElfU1NDVExfU0xWVVJJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgc2xhdmUgYml0IGNvdW50IGVycm9yIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1NMVkJFX0lOVF9NQVNLKSA9PSBRU1BJX1NMVkJFX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1NDVEwgJj0gflFTUElfU1NDVExfU0xWQkVJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgc2xhdmUgbW9kZSB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9TTFZUT19JTlRfTUFTSykgPT0gUVNQSV9TTFZUT19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPlNTQ1RMICY9IH5RU1BJX1NTQ1RMX1NMVlRPSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHNsYXZlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9UWFVGX0lOVF9NQVNLKSA9PSBRU1BJX1RYVUZfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5GSUZPQ1RMICY9IH5RU1BJX0ZJRk9DVExfVFhVRklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBUWCB0aHJlc2hvbGQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfRklGT19UWFRIX0lOVF9NQVNLKSA9PSBRU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPkZJRk9DVEwgJj0gflFTUElfRklGT0NUTF9UWFRISUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFJYIHRocmVzaG9sZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9GSUZPX1JYVEhfSU5UX01BU0spID09IFFTUElfRklGT19SWFRIX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+RklGT0NUTCAmPSB+UVNQSV9GSUZPQ1RMX1JYVEhJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9GSUZPX1JYT1ZfSU5UX01BU0spID09IFFTUElfRklGT19SWE9WX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+RklGT0NUTCAmPSB+UVNQSV9GSUZPQ1RMX1JYT1ZJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgUlggdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfRklGT19SWFRPX0lOVF9NQVNLKSA9PSBRU1BJX0ZJRk9fUlhUT19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPkZJRk9DVEwgJj0gflFTUElfRklGT0NUTF9SWFRPSUVOX01zazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgc291cmNlcy4KKyAgKiAgICAgICAgICAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHNvdXJjZS4KKyAgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0IGZsYWdzIHdpbGwgYmUgcmVhZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1VOSVRfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU1NBQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU1NJTkFDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TTFZVUl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TTFZCRV9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TTFZUT19JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9UWFVGX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9GSUZPX1JYVEhfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfRklGT19SWE9WX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX0ZJRk9fUlhUT19JTlRfTUFTSworICAqCisgICogQHJldHVybiBJbnRlcnJ1cHQgZmxhZ3Mgb2Ygc2VsZWN0ZWQgc291cmNlcy4KKyAgKiBAZGV0YWlscyBHZXQgUVNQSSByZWxhdGVkIGludGVycnVwdCBmbGFncyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCit1aW50MzJfdCBRU1BJX0dldEludEZsYWcoUVNQSV9UICpxc3BpLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIHVpbnQzMl90IHUzMkludFN0YXR1czsKKyAgICB1aW50MzJfdCB1MzJJbnRGbGFnID0gMFVMOworCisgICAgdTMySW50U3RhdHVzID0gcXNwaS0+U1RBVFVTOworCisgICAgLyogQ2hlY2sgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9VTklUX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgUVNQSV9TVEFUVVNfVU5JVElGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFFTUElfVU5JVF9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9TU0FDVF9JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFFTUElfU1RBVFVTX1NTQUNUSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gUVNQSV9TU0FDVF9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGluYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1NTSU5BQ1RfSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBRU1BJX1NUQVRVU19TU0lOQUlGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFFTUElfU1NJTkFDVF9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBzbGF2ZSBUWCB1bmRlciBydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfU0xWVVJfSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBRU1BJX1NUQVRVU19TTFZVUklGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFFTUElfU0xWVVJfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgc2xhdmUgYml0IGNvdW50IGVycm9yIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1NMVkJFX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgUVNQSV9TVEFUVVNfU0xWQkVJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBRU1BJX1NMVkJFX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIHNsYXZlIG1vZGUgdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfU0xWVE9fSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBRU1BJX1NUQVRVU19TTFZUT0lGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFFTUElfU0xWVE9fSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgc2xhdmUgVFggdW5kZXJmbG93IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1RYVUZfSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBRU1BJX1NUQVRVU19UWFVGSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gUVNQSV9UWFVGX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFRYIHRocmVzaG9sZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9GSUZPX1RYVEhfSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBRU1BJX1NUQVRVU19UWFRISUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gUVNQSV9GSUZPX1RYVEhfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgUlggdGhyZXNob2xkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFFTUElfU1RBVFVTX1JYVEhJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBRU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCBvdmVycnVuIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFFTUElfU1RBVFVTX1JYT1ZJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBRU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9GSUZPX1JYVE9fSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBRU1BJX1NUQVRVU19SWFRPSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gUVNQSV9GSUZPX1JYVE9fSU5UX01BU0s7CisgICAgfQorCisgICAgcmV0dXJuIHUzMkludEZsYWc7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2xlYXIgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBzb3VyY2VzLgorICAqICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgc291cmNlLgorICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHQgZmxhZ3Mgd2lsbCBiZSBjbGVhcmVkLiBJdCBjb3VsZCBiZSB0aGUgY29tYmluYXRpb24gb2Y6CisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1VOSVRfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU1NBQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU1NJTkFDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TTFZVUl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TTFZCRV9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TTFZUT19JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9UWFVGX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9GSUZPX1JYVE9fSU5UX01BU0sKKyAgKgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIENsZWFyIFFTUEkgcmVsYXRlZCBpbnRlcnJ1cHQgZmxhZ3Mgc3BlY2lmaWVkIGJ5IHUzMk1hc2sgcGFyYW1ldGVyLgorICAqLwordm9pZCBRU1BJX0NsZWFySW50RmxhZyhRU1BJX1QgKnFzcGksIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgaWYodTMyTWFzayAmIFFTUElfVU5JVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPlNUQVRVUyA9IFFTUElfU1RBVFVTX1VOSVRJRl9Nc2s7IC8qIENsZWFyIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IGZsYWcgKi8KKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgUVNQSV9TU0FDVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPlNUQVRVUyA9IFFTUElfU1RBVFVTX1NTQUNUSUZfTXNrOyAvKiBDbGVhciBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBRU1BJX1NTSU5BQ1RfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5TVEFUVVMgPSBRU1BJX1NUQVRVU19TU0lOQUlGX01zazsgLyogQ2xlYXIgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpbmFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBRU1BJX1NMVlVSX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1RBVFVTID0gUVNQSV9TVEFUVVNfU0xWVVJJRl9Nc2s7IC8qIENsZWFyIHNsYXZlIFRYIHVuZGVyIHJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBRU1BJX1NMVkJFX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1RBVFVTID0gUVNQSV9TVEFUVVNfU0xWQkVJRl9Nc2s7IC8qIENsZWFyIHNsYXZlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBRU1BJX1NMVlRPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1RBVFVTID0gUVNQSV9TVEFUVVNfU0xWVE9JRl9Nc2s7IC8qIENsZWFyIHNsYXZlIG1vZGUgdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgUVNQSV9UWFVGX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1RBVFVTID0gUVNQSV9TVEFUVVNfVFhVRklGX01zazsgLyogQ2xlYXIgc2xhdmUgVFggdW5kZXJmbG93IGludGVycnVwdCBmbGFnICovCisgICAgfQorCisgICAgaWYodTMyTWFzayAmIFFTUElfRklGT19SWE9WX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1RBVFVTID0gUVNQSV9TVEFUVVNfUlhPVklGX01zazsgLyogQ2xlYXIgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBRU1BJX0ZJRk9fUlhUT19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPlNUQVRVUyA9IFFTUElfU1RBVFVTX1JYVE9JRl9Nc2s7IC8qIENsZWFyIFJYIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBRU1BJIHN0YXR1cy4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgc291cmNlcy4KKyAgKiAgICAgICAgICAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgc291cmNlLgorICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBmbGFncyB3aWxsIGJlIHJlYWQuIEl0IGlzIGNvbWJpbmF0aW9uIG9mOgorICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9CVVNZX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfUlhfRU1QVFlfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9SWF9GVUxMX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfVFhfRU1QVFlfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9UWF9GVUxMX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfVFhSWF9SRVNFVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NQSUVOX1NUU19NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NTTElORV9TVFNfTUFTSworICAqCisgICogQHJldHVybiBGbGFncyBvZiBzZWxlY3RlZCBzb3VyY2VzLgorICAqIEBkZXRhaWxzIEdldCBRU1BJIHJlbGF0ZWQgc3RhdHVzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KK3VpbnQzMl90IFFTUElfR2V0U3RhdHVzKFFTUElfVCAqcXNwaSwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICB1aW50MzJfdCB1MzJUbXBTdGF0dXM7CisgICAgdWludDMyX3QgdTMyRmxhZyA9IDBVTDsKKworICAgIHUzMlRtcFN0YXR1cyA9IHFzcGktPlNUQVRVUzsKKworICAgIC8qIENoZWNrIGJ1c3kgc3RhdHVzICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX0JVU1lfTUFTSykgJiYgKHUzMlRtcFN0YXR1cyAmIFFTUElfU1RBVFVTX0JVU1lfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gUVNQSV9CVVNZX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgUlggZW1wdHkgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9SWF9FTVBUWV9NQVNLKSAmJiAodTMyVG1wU3RhdHVzICYgUVNQSV9TVEFUVVNfUlhFTVBUWV9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBRU1BJX1JYX0VNUFRZX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgUlggZnVsbCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1JYX0ZVTExfTUFTSykgJiYgKHUzMlRtcFN0YXR1cyAmIFFTUElfU1RBVFVTX1JYRlVMTF9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBRU1BJX1JYX0ZVTExfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBUWCBlbXB0eSBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1RYX0VNUFRZX01BU0spICYmICh1MzJUbXBTdGF0dXMgJiBRU1BJX1NUQVRVU19UWEVNUFRZX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFFTUElfVFhfRU1QVFlfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBUWCBmdWxsIGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfVFhfRlVMTF9NQVNLKSAmJiAodTMyVG1wU3RhdHVzICYgUVNQSV9TVEFUVVNfVFhGVUxMX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFFTUElfVFhfRlVMTF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFRYL1JYIHJlc2V0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfVFhSWF9SRVNFVF9NQVNLKSAmJiAodTMyVG1wU3RhdHVzICYgUVNQSV9TVEFUVVNfVFhSWFJTVF9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBRU1BJX1RYUlhfUkVTRVRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBTUElFTiBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1NQSUVOX1NUU19NQVNLKSAmJiAodTMyVG1wU3RhdHVzICYgUVNQSV9TVEFUVVNfU1BJRU5TVFNfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gUVNQSV9TUElFTl9TVFNfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBRU1BJeF9TUyBsaW5lIHN0YXR1cyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9TU0xJTkVfU1RTX01BU0spICYmICh1MzJUbXBTdGF0dXMgJiBRU1BJX1NUQVRVU19TU0xJTkVfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gUVNQSV9TU0xJTkVfU1RTX01BU0s7CisgICAgfQorCisgICAgcmV0dXJuIHUzMkZsYWc7Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUVNQSV9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBRU1BJX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9yZXRhcmdldC5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvcmV0YXJnZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDA1N2I0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvcmV0YXJnZXQuYwpAQCAtMCwwICsxLDg2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHJldGFyZ2V0LmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIERlYnVnIFBvcnQgYW5kIFNlbWlob3N0IFNldHRpbmcgU291cmNlIEZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKyNpZiBkZWZpbmVkIChfX0lDQ0FSTV9fKQorIyBwcmFnbWEgZGlhZ19zdXBwcmVzcz1QbTE1MAorI2VuZGlmCisKKworI2lmIGRlZmluZWQgKCBfX0NDX0FSTSAgICkKKyNpZiAoX19BUk1DQ19WRVJTSU9OIDwgNDAwMDAwKQorI2Vsc2UKKy8qIEluc2lzdCBvbiBrZWVwaW5nIHdpZHRocHJlYywgdG8gYXZvaWQgWCBwcm9wYWdhdGlvbiBieSBiZW5pZ24gY29kZSBpbiBDLWxpYiAqLworI3ByYWdtYSBpbXBvcnQgX3ByaW50Zl93aWR0aHByZWMKKyNlbmRpZgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEdsb2JhbCB2YXJpYWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAhKGRlZmluZWQoX19JQ0NBUk1fXykgJiYgKF9fVkVSX18gPj0gNjAxMDAwMCkpCisjIGlmIChfX0FSTUNDX1ZFUlNJT04gPCA2MDQwMDAwKQorc3RydWN0IF9fRklMRQoreworICAgIGludCBoYW5kbGU7IC8qIEFkZCB3aGF0ZXZlciB5b3UgbmVlZCBoZXJlICovCit9OworIyBlbmRpZgorI2VsaWYoX19WRVJfXyA+PSA4MDAwMDAwKQorc3RydWN0IF9fRklMRQoreworICAgIGludCBoYW5kbGU7IC8qIEFkZCB3aGF0ZXZlciB5b3UgbmVlZCBoZXJlICovCit9OworI2VuZGlmCitGSUxFIF9fc3Rkb3V0OworRklMRSBfX3N0ZGluOworCisjaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPiA2MDQwMDAwKQorIyBpZiAhZGVmaW5lZChfX01JQ1JPTElCKQorX19hc20oIi5nbG9iYWwgX19BUk1fdXNlX25vX2FyZ3Zcblx0IiAiX19BUk1fdXNlX25vX2FyZ3Y6XG5cdCIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2lmIChkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgfHwgZGVmaW5lZChfX0lDQ0FSTV9fKSkKK2V4dGVybiBpbnQzMl90IFNIX0RvQ29tbWFuZChpbnQzMl90IG4zMkluX1IwLCBpbnQzMl90IG4zMkluX1IxLCBpbnQzMl90ICpwbjMyT3V0X1IwKTsKKworI2lmIGRlZmluZWQoIF9fSUNDQVJNX18gKQorX19XRUFLCisjZWxzZQorX19hdHRyaWJ1dGVfXygod2VhaykpCisjZW5kaWYKK3VpbnQzMl90IFByb2Nlc3NIYXJkRmF1bHQodWludDMyX3QgbHIsIHVpbnQzMl90IG1zcCwgdWludDMyX3QgcHNwKTsKKworI2VuZGlmCisKKyNwcmFnbWEgcGFjayhwdXNoKQorI3ByYWdtYSBwYWNrKDEpCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAqbmFtZTsKKyAgICB1aW50MzJfdCB1MzJBZGRyOworICAgIHVpbnQ4X3QgdThOU0lkeDsKK30gSVBfVDsKKyNwcmFnbWEgcGFjayhwb3ApCisKKyNpZm5kZWYgREVCVUdfRU5BQkxFX1NFTUlIT1NUCitzdGF0aWMgSVBfVCBzX0lwVGJsW10gPSB7Cit7IlNZUyIsU1lTX0JBU0UsMH0sCit7IkNMSyIsQ0xLX0JBU0UsMH0sCit7IklOVCIsSU5UX0JBU0UsMH0sCit7IkdQSU9BIixHUElPQV9CQVNFLDIyNCswfSwKK3siR1BJT0IiLEdQSU9CX0JBU0UsMjI0KzF9LAoreyJHUElPQyIsR1BJT0NfQkFTRSwyMjQrMn0sCit7IkdQSU9EIixHUElPRF9CQVNFLDIyNCszfSwKK3siR1BJT0UiLEdQSU9FX0JBU0UsMjI0KzR9LAoreyJHUElPRiIsR1BJT0ZfQkFTRSwyMjQrNX0sCit7IkdQSU9HIixHUElPR19CQVNFLDIyNCs2fSwKK3siR1BJT0giLEdQSU9IX0JBU0UsMjI0Kzd9LAoreyJHUElPX0RCQ1RMIixHUElPX0RCQ1RMX0JBU0UsMH0sCit7IlBBIixHUElPX1BJTl9EQVRBX0JBU0UgICAgICAgLDIyNCswfSwKK3siUEIiLEdQSU9fUElOX0RBVEFfQkFTRSsxNio0ICAsMjI0KzB9LAoreyJQQyIsR1BJT19QSU5fREFUQV9CQVNFKzIqMTYqNCwyMjQrMH0sCit7IlBEIixHUElPX1BJTl9EQVRBX0JBU0UrMyoxNio0LDIyNCswfSwKK3siUEUiLEdQSU9fUElOX0RBVEFfQkFTRSs0KjE2KjQsMjI0KzB9LAoreyJQRiIsR1BJT19QSU5fREFUQV9CQVNFKzUqMTYqNCwyMjQrMH0sCit7IlBHIixHUElPX1BJTl9EQVRBX0JBU0UrNioxNio0LDIyNCswfSwKK3siUEgiLEdQSU9fUElOX0RBVEFfQkFTRSs3KjE2KjQsMjI0KzB9LAoreyJQRE1BMCIsUERNQTBfQkFTRSwwfSwKK3siUERNQTEiLFBETUExX0JBU0UsUERNQTFfQXR0cn0sCit7IlVTQkgiLFVTQkhfQkFTRSxVU0JIX0F0dHJ9LAoreyJGTUMiLEZNQ19CQVNFLDB9LAoreyJTREgwIixTREgwX0JBU0UsU0RIMF9BdHRyfSwKK3siRUJJIixFQklfQkFTRSxFQklfQXR0cn0sCit7IlNDVSIsU0NVX0JBU0UsMH0sCit7IkNSQyIsQ1JDX0JBU0UsQ1JDX0F0dHJ9LAoreyJDUlBUIixDUlBUX0JBU0UsQ1JQVF9BdHRyfSwKK3siV0RUIixXRFRfQkFTRSwwfSwKK3siV1dEVCIsV1dEVF9CQVNFLDB9LAoreyJSVEMiLFJUQ19CQVNFLFJUQ19BdHRyfSwKK3siRUFEQyIsRUFEQ19CQVNFLEVBRENfQXR0cn0sCit7IkFDTVAwMSIsQUNNUDAxX0JBU0UsQUNNUDAxX0F0dHJ9LAoreyJEQUMwIixEQUMwX0JBU0UsREFDX0F0dHJ9LAoreyJEQUMxIixEQUMxX0JBU0UsREFDX0F0dHJ9LAoreyJJMlMwIixJMlMwX0JBU0UsSTJTMF9BdHRyfSwKK3siT1RHIixPVEdfQkFTRSxPVEdfQXR0cn0sCit7IlRNUjAxIixUTVIwMV9CQVNFLDB9LAoreyJUTVIyMyIsVE1SMjNfQkFTRSxUTVIyM19BdHRyfSwKK3siRVBXTTAiLEVQV00wX0JBU0UsRVBXTTBfQXR0cn0sCit7IkVQV00xIixFUFdNMV9CQVNFLEVQV00xX0F0dHJ9LAoreyJCUFdNMCIsQlBXTTBfQkFTRSxCUFdNMF9BdHRyfSwKK3siQlBXTTEiLEJQV00xX0JBU0UsQlBXTTFfQXR0cn0sCit7IlFTUEkwIixRU1BJMF9CQVNFLFFTUEkwX0F0dHJ9LAoreyJTUEkwIixTUEkwX0JBU0UsU1BJMF9BdHRyfSwKK3siU1BJMSIsU1BJMV9CQVNFLFNQSTFfQXR0cn0sCit7IlNQSTIiLFNQSTJfQkFTRSxTUEkyX0F0dHJ9LAoreyJTUEkzIixTUEkzX0JBU0UsU1BJM19BdHRyfSwKK3siVUFSVDAiLFVBUlQwX0JBU0UsVUFSVDBfQXR0cn0sCit7IlVBUlQxIixVQVJUMV9CQVNFLFVBUlQxX0F0dHJ9LAoreyJVQVJUMiIsVUFSVDJfQkFTRSxVQVJUMl9BdHRyfSwKK3siVUFSVDMiLFVBUlQzX0JBU0UsVUFSVDNfQXR0cn0sCit7IlVBUlQ0IixVQVJUNF9CQVNFLFVBUlQ0X0F0dHJ9LAoreyJVQVJUNSIsVUFSVDVfQkFTRSxVQVJUNV9BdHRyfSwKK3siSTJDMCIsSTJDMF9CQVNFLEkyQzBfQXR0cn0sCit7IkkyQzEiLEkyQzFfQkFTRSxJMkMxX0F0dHJ9LAoreyJJMkMyIixJMkMyX0JBU0UsSTJDMl9BdHRyfSwKK3siU0MwIixTQzBfQkFTRSxTQzBfQXR0cn0sCit7IlNDMSIsU0MxX0JBU0UsU0MxX0F0dHJ9LAoreyJTQzIiLFNDMl9CQVNFLFNDMl9BdHRyfSwKK3siQ0FOMCIsQ0FOMF9CQVNFLENBTjBfQXR0cn0sCit7IlFFSTAiLFFFSTBfQkFTRSxRRUkwX0F0dHJ9LAoreyJRRUkxIixRRUkxX0JBU0UsUUVJMV9BdHRyfSwKK3siRUNBUDAiLEVDQVAwX0JBU0UsRUNBUDBfQXR0cn0sCit7IkVDQVAxIixFQ0FQMV9CQVNFLEVDQVAxX0F0dHJ9LAoreyJUUk5HIixUUk5HX0JBU0UsVFJOR19BdHRyfSwKK3siVVNCRCIsVVNCRF9CQVNFLFVTQkRfQXR0cn0sCit7IlVTQ0kwIixVU0NJMF9CQVNFLCBVU0NJMF9BdHRyfSwKK3siVVNDSTEiLFVTQ0kxX0JBU0UsIFVTQ0kxX0F0dHJ9LAorezAsVVNDSTFfQkFTRSs0MDk2LCAwfSwKK307CisjZW5kaWYKKworaW50IGtiaGl0KHZvaWQpOworaW50IElzRGVidWdGaWZvRW1wdHkodm9pZCk7Cit2b2lkIF90dHl3cmNoKGludCBjaCk7CitpbnQgZnB1dGMoaW50IGNoLCBGSUxFICpzdHJlYW0pOworCisjaWYgKGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSB8fCBkZWZpbmVkKF9fSUNDQVJNX18pKQoraW50IGZnZXRjKEZJTEUgKnN0cmVhbSk7CitpbnQgZmVycm9yKEZJTEUgKnN0cmVhbSk7CisjZW5kaWYKKworY2hhciBHZXRDaGFyKHZvaWQpOwordm9pZCBTZW5kQ2hhcl9Ub1VBUlQoaW50IGNoKTsKK3ZvaWQgU2VuZENoYXIoaW50IGNoKTsKK2ludDMyX3QgU0hfUmV0dXJuKGludDMyX3QgbjMySW5fUjAsIGludDMyX3QgbjMySW5fUjEsIGludDMyX3QgKnBuMzJPdXRfUjApOwordm9pZCBfc3lzX2V4aXQoaW50IHJldHVybl9jb2RlKV9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CisKKyNpZiAoZGVmaW5lZChERUJVR19FTkFCTEVfU0VNSUhPU1QpIHx8IGRlZmluZWQoT1NfVVNFX1NFTUlIT1NUSU5HKSkKKyNpZiAoZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pIHx8IGRlZmluZWQoX19JQ0NBUk1fXykgfHwgZGVmaW5lZChfX0dOVUNfXykpCisvKiBUaGUgc3RhdGljIGJ1ZmZlciBpcyB1c2VkIHRvIHNwZWVkIHVwIHRoZSBzZW1paG9zdCAqLworc3RhdGljIGNoYXIgZ19idWZbMTZdOworc3RhdGljIGNoYXIgZ19idWZfbGVuID0gMDsKK3N0YXRpYyB2b2xhdGlsZSBpbnQzMl90IGdfSUNFX0Nvbm5lY2VkID0gMTsKKworLyoqCisgKiBAYnJpZWYgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgSGFyZGZhdWx0IGhhbmRsZXIuCisgKiBAcGFyYW0gICAgTm9uZQorICogQHJldHVybnMgIE5vbmUKKyAqIEBkZXRhaWxzICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBIYXJkZmF1bHQgaGFuZGxlciBhbmQgY2hlY2sgaWYgaXQgaXMgY2F1c2VkIGJ5IF9fQktQVCBvciBub3QuCisgKgorICovCisKK3VpbnQzMl90IFByb2Nlc3NIYXJkRmF1bHQodWludDMyX3QgbHIsIHVpbnQzMl90IG1zcCwgdWludDMyX3QgcHNwKQoreworICAgIHVpbnQzMl90ICpzcCA9IDA7CisgICAgdWludDMyX3QgaW5zdDsKKworICAgIC8qIENoZWNrIHRoZSB1c2VkIHN0YWNrICovCisgICAgaWYobHIgJiAweDQwKQorICAgIHsKKyAgICAgICAgLyogU2VjdXJlIHN0YWNrIHVzZWQgKi8KKyAgICAgICAgaWYobHIgJiA0KQorICAgICAgICAgICAgc3AgPSAodWludDMyX3QgKilwc3A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwID0gKHVpbnQzMl90ICopbXNwOworCisgICAgfQorI2lmIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogTm9uLXNlY3VyZSBzdGFjayB1c2VkICovCisgICAgICAgIGlmKGxyICYgNCkKKyAgICAgICAgICAgIHNwID0gKHVpbnQzMl90ICopX19UWl9nZXRfUFNQX05TKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwID0gKHVpbnQzMl90ICopX19UWl9nZXRfTVNQX05TKCk7CisKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChzcCAhPSAwKQorICAgIHsKKyAgICAgICAgLyogR2V0IHRoZSBpbnN0cnVjdGlvbiBjYXVzZWQgdGhlIGhhcmRmYXVsdCAqLworICAgICAgICBpbnN0ID0gTTE2KHNwWzZdKTsKKworCisgICAgICAgIGlmKGluc3QgPT0gMHhCRUFCKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIElmIHRoZSBpbnN0cnVjdGlvbiBpcyAweEJFQUIsIGl0IG1lYW5zIGl0IGlzIGNhdXNlZCBieSBCS1BUIHdpdGhvdXQgSUNFIGNvbm5lY3RlZC4KKyAgICAgICAgICAgICAgICBXZSBzdGlsbCByZXR1cm4gZm9yIG91dHB1dC9pbnB1dCBtZXNzYWdlIHRvIFVBUlQuCisgICAgICAgICAgICAqLworICAgICAgICAgICAgZ19JQ0VfQ29ubmVjZWQgPSAwOyAvLyBTZXQgYSBmbGFnIGZvciBJQ0Ugb2ZmbGluZQorICAgICAgICAgICAgc3BbNl0gKz0gMjsgLy8gcmV0dXJuIHRvIG5leHQgaW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgIHJldHVybiBscjsgIC8vIEtlZXAgbHIgaW4gUjAKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEl0IGlzIGNhc3VlZCBieSBoYXJkZmF1bHQgKE5vdCBzZW1paG9zdCkuIEp1c3QgcHJvY2VzcyB0aGUgaGFyZCBmYXVsdCBoZXJlLiAqLworICAgIC8qIFRPRE86IEltcGxlbWVudCB5b3VyIGhhcmRmYXVsdCBoYW5kbGUgY29kZSBoZXJlICovCisKKyAgICAvKgorICAgIHByaW50ZigiICBIYXJkRmF1bHQhXG5cbiIpOworICAgIHByaW50ZigicjAgID0gMHgleFxuIiwgc3BbMF0pOworICAgIHByaW50ZigicjEgID0gMHgleFxuIiwgc3BbMV0pOworICAgIHByaW50ZigicjIgID0gMHgleFxuIiwgc3BbMl0pOworICAgIHByaW50ZigicjMgID0gMHgleFxuIiwgc3BbM10pOworICAgIHByaW50ZigicjEyID0gMHgleFxuIiwgc3BbNF0pOworICAgIHByaW50ZigibHIgID0gMHgleFxuIiwgc3BbNV0pOworICAgIHByaW50ZigicGMgID0gMHgleFxuIiwgc3BbNl0pOworICAgIHByaW50ZigicHNyID0gMHgleFxuIiwgc3BbN10pOworICAgICovCisKKyAgICB3aGlsZSgxKXt9CisKK30KKworCisKKy8qKgorICoKKyAqIEBicmllZiAgICAgIFRoZSBmdW5jdGlvbiB0byBwcm9jZXNzIHNlbWlob3N0ZWQgY29tbWFuZAorICogQHBhcmFtW2luXSAgbjMySW5fUjAgIDogc2VtaWhvc3QgcmVnaXN0ZXIgMAorICogQHBhcmFtW2luXSAgbjMySW5fUjEgIDogc2VtaWhvc3QgcmVnaXN0ZXIgMQorICogQHBhcmFtW291dF0gcG4zMk91dF9SMDogc2VtaWhvc3QgcmVnaXN0ZXIgMAorICogQHJldHZhbCAgICAgMDogTm8gSUNFIGRlYnVnCisgKiBAcmV0dmFsICAgICAxOiBJQ0UgZGVidWcKKyAqCisgKi8KKworaW50MzJfdCBTSF9SZXR1cm4oaW50MzJfdCBuMzJJbl9SMCwgaW50MzJfdCBuMzJJbl9SMSwgaW50MzJfdCAqcG4zMk91dF9SMCkKK3sKKyAgICAodm9pZCluMzJJbl9SMTsKKyAgICBpZihnX0lDRV9Db25uZWNlZCkKKyAgICB7CisgICAgICAgIGlmKHBuMzJPdXRfUjApCisgICAgICAgICAgICAqcG4zMk91dF9SMCA9IG4zMkluX1IwOworCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCisKKyNlbmRpZgorI2Vsc2UgLy8gZGVmaW5lZChERUJVR19FTkFCTEVfU0VNSUhPU1QpCisKK2ludDMyX3QgU0hfUmV0dXJuKGludDMyX3QgbjMySW5fUjAsIGludDMyX3QgbjMySW5fUjEsIGludDMyX3QgKnBuMzJPdXRfUjApOworCisjaWYgZGVmaW5lZCggX19JQ0NBUk1fXyApCitfX1dFQUsKKyNlbHNlCitfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKyNlbmRpZgordWludDMyX3QgUHJvY2Vzc0hhcmRGYXVsdCh1aW50MzJfdCBsciwgdWludDMyX3QgbXNwLCB1aW50MzJfdCBwc3ApCit7CisgICAgZXh0ZXJuIHZvaWQgU0NVX0lSUUhhbmRsZXIodm9pZCk7CisgICAgdWludDMyX3QgKnNwID0gMHVsOworICAgIHVpbnQzMl90IGk7CisgICAgdWludDMyX3QgaW5zdCwgYWRkcix0YWRkciA9IDB1bCx0ZGF0YTsKKyAgICBpbnQzMl90IHNlY3VyZTsKKyAgICB1aW50MzJfdCBybSxybixydCwgaW1tNSwgaW1tODsKKyAgICBpbnQzMl90IGVGbGFnOworICAgIHVpbnQ4X3QgaWR4LCBiaXQ7CisgICAgaW50MzJfdCBzOworCisgICAgLyogQ2hlY2sgdGhlIHVzZWQgc3RhY2sgKi8KKyAgICBzZWN1cmUgPSAobHIgJiAweDQwdWwpPzF1bDowdWw7CisgICAgaWYoc2VjdXJlKQorICAgIHsKKyAgICAgICAgLyogU2VjdXJlIHN0YWNrIHVzZWQgKi8KKyAgICAgICAgaWYobHIgJiA0VUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNwID0gKHVpbnQzMl90ICopcHNwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3AgPSAodWludDMyX3QgKiltc3A7CisgICAgICAgIH0KKworICAgIH0KKyNpZiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDMpCisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogTm9uLXNlY3VyZSBzdGFjayB1c2VkICovCisgICAgICAgIGlmKGxyICYgNCkKKyAgICAgICAgICAgIHNwID0gKHVpbnQzMl90ICopKHVpbnQzMl90KV9fVFpfZ2V0X1BTUF9OUygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcCA9ICh1aW50MzJfdCAqKSh1aW50MzJfdClfX1RaX2dldF9NU1BfTlMoKTsKKworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgICAgcjAgID0gc3BbMF0KKyAgICAgICAgcjEgID0gc3BbMV0KKyAgICAgICAgcjIgID0gc3BbMl0KKyAgICAgICAgcjMgID0gc3BbM10KKyAgICAgICAgcjEyID0gc3BbNF0KKyAgICAgICAgbHIgID0gc3BbNV0KKyAgICAgICAgcGMgID0gc3BbNl0KKyAgICAgICAgcHNyID0gc3BbN10KKyAgICAqLworCisgICAgcHJpbnRmKCIhIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSEhXG4iKTsKKyAgICBwcmludGYoIiAgICAgICAgICAgICAgICAgICAgICAgPDw8IEhhcmRGYXVsdCA+Pj5cbiIpOworICAgIC8qIEdldCB0aGUgaW5zdHJ1Y3Rpb24gY2F1c2VkIHRoZSBoYXJkZmF1bHQgKi8KKyAgICBhZGRyID0gc3BbNl07CisgICAgaW5zdCA9IE0xNihhZGRyKTsKKyAgICBlRmxhZyA9IDA7CisgICAgaWYoKCFzZWN1cmUpICYmICgoYWRkciAmIE5TX09GRlNFVCkgPT0gMCkgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIgIE5vbi1zZWN1cmUgQ1BVIHRyeSB0byBmZXRjaCBzZWN1cmUgY29kZSBpbiAweCV4XG4iLCBhZGRyKTsKKyAgICAgICAgcHJpbnRmKCIgIFRyeSB0byBjaGVjayBOU0MgcmVnaW9uIG9yIFNBVSBzZXR0aW5ncy5cbiIpOworCisgICAgICAgIGVGbGFnID0gMTsKKyAgICB9ZWxzZSBpZihpbnN0ID09IDB4QkVBQikKKyAgICB7CisgICAgICAgIHByaW50ZigiICBFeGVjdXRlIEJLUFQgd2l0aG91dCBJQ0UgY29ubmVjdGVkXG4iKTsKKyAgICAgICAgZUZsYWcgPSAyOworICAgIH0KKyAgICBlbHNlIGlmKChpbnN0ID4+IDEyKSA9PSA1KQorICAgIHsKKyAgICAgICAgZUZsYWcgPSAzOworICAgICAgICAvKiAwMTAxeHggTG9hZC9zdG9yZSAocmVnaXN0ZXIgb2Zmc2V0KSBvbiBwYWdlIEMyLTMyNyBvZiBhcm12OG0gcmVmICovCisgICAgICAgIHJtID0gKGluc3QgPj4gNikgJiAweDc7CisgICAgICAgIHJuID0gKGluc3QgPj4gMykgJiAweDc7CisgICAgICAgIHJ0ID0gaW5zdCAmIDB4NzsKKworICAgICAgICB0YWRkciA9IHNwW3JuXSArIHNwW3JtXTsKKyAgICAgICAgdGRhdGEgPSBzcFtydF07CisgICAgICAgIGlmKHJuID09IHJ0KQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIiAgWzB4JTA4eF0gMHglMDR4ICVzIFIlZCBbMHgleF1cbiIsYWRkciwgaW5zdCwKKyAgICAgICAgICAgIChpbnN0JkJJVDExKT8iTERSIjoiU1RSIixydCwgdGFkZHIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCIgIFsweCUwOHhdIDB4JTA0eCAlcyAweCV4IFsweCV4XVxuIixhZGRyLCBpbnN0LAorICAgICAgICAgICAgKGluc3QmQklUMTEpPyJMRFIiOiJTVFIiLHRkYXRhLCB0YWRkcik7CisgICAgICAgIH0KKworICAgIH0KKyAgICBlbHNlIGlmKChpbnN0ID4+IDEzKSA9PSAzKQorICAgIHsKKyAgICAgICAgZUZsYWcgPSAzOworICAgICAgICAvKiAwMTF4eHgJIExvYWQvc3RvcmUgd29yZC9ieXRlIChpbW1lZGlhdGUgb2Zmc2V0KSBvbiBwYWdlIEMyLTMyNyBvZiBhcm12OG0gcmVmICovCisgICAgICAgIGltbTUgPSAoaW5zdCA+PiA2KSAmIDB4MWY7CisgICAgICAgIHJuID0gKGluc3QgPj4gMykgJiAweDc7CisgICAgICAgIHJ0ID0gaW5zdCAmIDB4NzsKKworICAgICAgICB0YWRkciA9IHNwW3JuXSArIGltbTU7CisgICAgICAgIHRkYXRhID0gc3BbcnRdOworICAgICAgICBpZihydCA9PSBybikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCIgIFsweCUwOHhdIDB4JTA0eCAlcyBSJWQgWzB4JXhdXG4iLGFkZHIsIGluc3QsCisgICAgICAgICAgICAoaW5zdCZCSVQxMSk/IkxEUiI6IlNUUiIscnQsIHRhZGRyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiICBbMHglMDh4XSAweCUwNHggJXMgMHgleCBbMHgleF1cbiIsYWRkciwgaW5zdCwKKyAgICAgICAgICAgIChpbnN0JkJJVDExKT8iTERSIjoiU1RSIix0ZGF0YSwgdGFkZHIpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoKGluc3QgPj4gMTIpID09IDgpCisgICAgeworICAgICAgICBlRmxhZyA9IDM7CisgICAgICAgIC8qIDEwMDB4eAkgTG9hZC9zdG9yZSBoYWxmd29yZCAoaW1tZWRpYXRlIG9mZnNldCkgb24gcGFnZSBDMi0zMjggKi8KKyAgICAgICAgaW1tNSA9IChpbnN0ID4+IDYpICYgMHgxZjsKKyAgICAgICAgcm4gPSAoaW5zdCA+PiAzKSAmIDB4NzsKKyAgICAgICAgcnQgPSBpbnN0ICYgMHg3OworCisgICAgICAgIHRhZGRyID0gc3Bbcm5dICsgaW1tNTsKKyAgICAgICAgdGRhdGEgPSBzcFtydF07CisgICAgICAgIGlmKHJ0ID09IHJuKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIiAgWzB4JTA4eF0gMHglMDR4ICVzIFIlZCBbMHgleF1cbiIsYWRkciwgaW5zdCwKKyAgICAgICAgICAgIChpbnN0JkJJVDExKT8iTERSIjoiU1RSIixydCwgdGFkZHIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCIgIFsweCUwOHhdIDB4JTA0eCAlcyAweCV4IFsweCV4XVxuIixhZGRyLCBpbnN0LAorICAgICAgICAgICAgKGluc3QmQklUMTEpPyJMRFIiOiJTVFIiLHRkYXRhLCB0YWRkcik7CisgICAgICAgIH0KKworICAgIH0KKyAgICBlbHNlIGlmKChpbnN0ID4+IDEyKSA9PSA5KQorICAgIHsKKyAgICAgICAgZUZsYWcgPSAzOworICAgICAgICAvKiAxMDAxeHgJIExvYWQvc3RvcmUgKFNQLXJlbGF0aXZlKSBvbiBwYWdlIEMyLTMyOCAqLworICAgICAgICBpbW04ID0gaW5zdCAmIDB4ZmY7CisgICAgICAgIHJ0ID0gKGluc3QgPj4gOCkgJiAweDc7CisKKyAgICAgICAgdGFkZHIgPSBzcFs2XSArIGltbTg7CisgICAgICAgIHRkYXRhID0gc3BbcnRdOworICAgICAgICBwcmludGYoIiAgWzB4JTA4eF0gMHglMDR4ICVzIDB4JXggWzB4JXhdXG4iLGFkZHIsIGluc3QsCisgICAgICAgIChpbnN0JkJJVDExKT8iTERSIjoiU1RSIix0ZGF0YSwgdGFkZHIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlRmxhZyA9IDQ7CisgICAgICAgIHByaW50ZigiICBVbmV4cGVjdGVkIGluc3RydWN0aW9uOiAweCUwNHggXG4iLCBpbnN0KTsKKyAgICB9CisKKyAgICBpZihlRmxhZyA9PSAzKQorICAgIHsKKyAgICAgICAgLyogSXQgaXMgTERSL1NUUiBoYXJkZmF1bHQgKi8KKyAgICAgICAgaWYoIXNlY3VyZSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogSXQgaXMgaGFwcGVuZWQgaW4gTm9uc2VjdXJlIGNvZGUgKi8KKworICAgICAgICAgICAgZm9yKGk9MDtpPCAodWludDMyX3QpKHNpemVvZihzX0lwVGJsKS9zaXplb2YoSVBfVCktMSk7aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIENhc2UgMTogTm9uc2VjdXJlIGNvZGUgdHJ5IHRvIGFjY2VzcyBzZWN1cmUgSVAuIEl0IGFsc28gY2F1c2VzIFNDVSB2aW9sYXRpb24gKi8KKyAgICAgICAgICAgICAgICBpZigodGFkZHIgPj0gc19JcFRibFtpXS51MzJBZGRyKSAmJiAodGFkZHIgPCAoc19JcFRibFtpKzFdLnUzMkFkZHIpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlkeCA9IHNfSXBUYmxbaV0udThOU0lkeDsKKyAgICAgICAgICAgICAgICAgICAgYml0ID0gaWR4ICYgMHgxZjsKKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gaWR4ID4+IDU7CisgICAgICAgICAgICAgICAgICAgIHMgPSAoU0NVLT5QTlNTRVRbaWR4XSA+PiBiaXQpICYgMXVsOworICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgSWxsZWdhbCBhY2Nlc3MgdG8gJXMgJXMgaW4gTm9uc2VjdXJlIGNvZGUuXG4iLChzKT8iTm9uc2VjdXJlIjoiU2VjdXJlIiwgc19JcFRibFtpXS5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogQ2FzZSAyOiBOb25zZWN1cmUgY29kZSB0cnkgdG8gYWNjZXNzIE5vbnNlY3VyZSBJUCBidXQgdGhlIElQIGlzIHNlY3VyZSBJUCAqLworICAgICAgICAgICAgICAgIGlmKCh0YWRkciA+PSAoc19JcFRibFtpXS51MzJBZGRyK05TX09GRlNFVCkpICYmICh0YWRkciA8IChzX0lwVGJsW2krMV0udTMyQWRkcitOU19PRkZTRVQpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlkeCA9IHNfSXBUYmxbaV0udThOU0lkeDsKKyAgICAgICAgICAgICAgICAgICAgYml0ID0gaWR4ICYgMHgxZjsKKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gaWR4ID4+IDU7CisgICAgICAgICAgICAgICAgICAgIHMgPSAoU0NVLT5QTlNTRVRbaWR4XSA+PiBiaXQpICYgMXVsOworICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgSWxsZWdhbCBhY2Nlc3MgdG8gJXMgJXMgaW4gTm9uc2VjdXJlIGNvZGUuXG5JdCBtYXkgYmUgc2V0IGFzIHNlY3VyZSBJUCBoZXJlLlxuIiwocyk/Ik5vbnNlY3VyZSI6IlNlY3VyZSIsIHNfSXBUYmxbaV0ubmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEl0IGlzIGhhcHBlbmVkIGluIHNlY3VyZSBjb2RlICovCisKKworICAgICAgICAgICAgaWYodGFkZHIgPiBOU19PRkZTRVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQ2FzZSAzOiBTZWN1cmUgdHJ5IHRvIGFjY2VzcyBzZWN1cmUgSVAgdGhyb3VnaCBOb25zZWN1cmUgYWRkcmVzcy4gSXQgYWxzbyBjYXVzZXMgU0NVIHZpb2xhdGlvbiAqLworICAgICAgICAgICAgICAgIGZvcihpPTA7aTwgKHVpbnQzMl90KShzaXplb2Yoc19JcFRibCkvc2l6ZW9mKElQX1QpLTEpO2krKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKCh0YWRkciA+PSAoc19JcFRibFtpXS51MzJBZGRyK05TX09GRlNFVCkpICYmICh0YWRkciA8IChzX0lwVGJsW2krMV0udTMyQWRkcitOU19PRkZTRVQpKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gc19JcFRibFtpXS51OE5TSWR4OworICAgICAgICAgICAgICAgICAgICAgICAgYml0ID0gaWR4ICYgMHgxZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGlkeCA+PiA1OworICAgICAgICAgICAgICAgICAgICAgICAgcyA9IChTQ1UtPlBOU1NFVFtpZHhdID4+IGJpdCkgJiAxdWw7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgSWxsZWdhbCB0byB1c2UgTm9uc2VjdXJlIGFkZHJlc3MgdG8gYWNjZXNzICVzICVzIGluIFNlY3VyZSBjb2RlXG4iLChzKT8iTm9uc2VjdXJlIjoiU2VjdXJlIiwgc19JcFRibFtpXS5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisKKyAgICAgICAgfQorICAgIH0KKworICAgIFNDVV9JUlFIYW5kbGVyKCk7CisKKyAgICBwcmludGYoIiEhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tISFcbiIpOworCisgICAgLyogT3IgKnNwIHRvIHJlbW92ZSBjb21waWxlciB3YXJuaW5nICovCisgICAgd2hpbGUoMVV8KnNwKXt9CisKKyAgICByZXR1cm4gbHI7Cit9CisKKworaW50MzJfdCBTSF9SZXR1cm4oaW50MzJfdCBuMzJJbl9SMCwgaW50MzJfdCBuMzJJbl9SMSwgaW50MzJfdCAqcG4zMk91dF9SMCkKK3sKKyAgICAodm9pZCluMzJJbl9SMDsKKyAgICAodm9pZCluMzJJbl9SMTsKKyAgICAodm9pZClwbjMyT3V0X1IwOworICAgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogZGVmaW5lZChERUJVR19FTkFCTEVfU0VNSUhPU1QpICovCisKKworLyoqCisgKiBAYnJpZWYgICAgUm91dGluZSB0byBzZW5kIGEgY2hhcgorICoKKyAqIEBwYXJhbVtpbl0gY2ggIEEgY2hhcmFjdGVyIGRhdGEgd3JpdGVzIHRvIGRlYnVnIHBvcnQKKyAqCisgKiBAcmV0dXJucyAgU2VuZCB2YWx1ZSBmcm9tIFVBUlQgZGVidWcgcG9ydAorICoKKyAqIEBkZXRhaWxzICBTZW5kIGEgdGFyZ2V0IGNoYXIgdG8gVUFSVCBkZWJ1ZyBwb3J0IC4KKyAqLworI2lmbmRlZiBOT05CTE9DS19QUklOVEYKK3ZvaWQgU2VuZENoYXJfVG9VQVJUKGludCBjaCkKK3sKKworICAgIHdoaWxlKERFQlVHX1BPUlQtPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfVFhGVUxMX01zayl7fQorICAgIGlmKChjaGFyKWNoID09ICdcbicpCisgICAgeworICAgICAgICBERUJVR19QT1JULT5EQVQgPSAnXHInOworICAgICAgICB3aGlsZShERUJVR19QT1JULT5GSUZPU1RTICYgVUFSVF9GSUZPU1RTX1RYRlVMTF9Nc2spe30KKyAgICB9CisgICAgREVCVUdfUE9SVC0+REFUID0gKHVpbnQzMl90KWNoOworfQorCisjZWxzZQorLyogTm9uLWJsb2NrIGltcGxlbWVudCBvZiBzZW5kIGNoYXIgKi8KKyMgZGVmaW5lIEJVRl9TSVpFICAgIDUxMgordm9pZCBTZW5kQ2hhcl9Ub1VBUlQoaW50IGNoKQoreworICAgIHN0YXRpYyB1aW50OF90IHU4QnVmW0JVRl9TSVpFXSA9IHswfTsKKyAgICBzdGF0aWMgaW50MzJfdCBpMzJIZWFkID0gMDsKKyAgICBzdGF0aWMgaW50MzJfdCBpMzJUYWlsID0gMDsKKyAgICBpbnQzMl90IGkzMlRtcDsKKworICAgIC8qIE9ubHkgZmx1c2ggdGhlIGRhdGEgaW4gYnVmZmVyIHRvIFVBUlQgd2hlbiBjaCA9PSAwICovCisgICAgaWYoY2gpCisgICAgeworICAgICAgICAvLyBQdXNoIGNoYXIKKyAgICAgICAgaWYoY2ggPT0gJ1xuJykKKyAgICAgICAgeworICAgICAgICAgICAgaTMyVG1wID0gaTMySGVhZCsxOworICAgICAgICAgICAgaWYoaTMyVG1wID4gQlVGX1NJWkUpIGkzMlRtcCA9IDA7CisgICAgICAgICAgICBpZihpMzJUbXAgIT0gaTMyVGFpbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1OEJ1ZltpMzJIZWFkXSA9ICdccic7CisgICAgICAgICAgICAgICAgaTMySGVhZCA9IGkzMlRtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGkzMlRtcCA9IGkzMkhlYWQrMTsKKyAgICAgICAgaWYoaTMyVG1wID4gQlVGX1NJWkUpIGkzMlRtcCA9IDA7CisgICAgICAgIGlmKGkzMlRtcCAhPSBpMzJUYWlsKQorICAgICAgICB7CisgICAgICAgICAgICB1OEJ1ZltpMzJIZWFkXSA9IGNoOworICAgICAgICAgICAgaTMySGVhZCA9IGkzMlRtcDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZihpMzJUYWlsID09IGkzMkhlYWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gcG9wIGNoYXIKKyAgICBkbworICAgIHsKKyAgICAgICAgaTMyVG1wID0gaTMyVGFpbCArIDE7CisgICAgICAgIGlmKGkzMlRtcCA+IEJVRl9TSVpFKSBpMzJUbXAgPSAwOworCisgICAgICAgIGlmKChERUJVR19QT1JULT5GU1IgJiBVQVJUX0ZTUl9UWF9GVUxMX01zaykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgREVCVUdfUE9SVC0+REFUQSA9IHU4QnVmW2kzMlRhaWxdOworICAgICAgICAgICAgaTMyVGFpbCA9IGkzMlRtcDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBicmVhazsgLy8gRklGTyBmdWxsCisgICAgfXdoaWxlKGkzMlRhaWwgIT0gaTMySGVhZCk7Cit9CisjZW5kaWYKKworLyoqCisgKiBAYnJpZWYgICAgUm91dGluZSB0byBzZW5kIGEgY2hhcgorICoKKyAqIEBwYXJhbVtpbl0gY2ggQSBjaGFyYWN0ZXIgZGF0YSB3cml0ZXMgdG8gZGVidWcgcG9ydAorICoKKyAqIEByZXR1cm5zICBTZW5kIHZhbHVlIGZyb20gVUFSVCBkZWJ1ZyBwb3J0IG9yIHNlbWlob3N0CisgKgorICogQGRldGFpbHMgIFNlbmQgYSB0YXJnZXQgY2hhciB0byBVQVJUIGRlYnVnIHBvcnQgb3Igc2VtaWhvc3QuCisgKi8KK3ZvaWQgU2VuZENoYXIoaW50IGNoKQoreworI2lmIGRlZmluZWQoREVCVUdfRU5BQkxFX1NFTUlIT1NUKQorCisgICAgZ19idWZbKHVpbnQ4X3QpZ19idWZfbGVuKytdID0gKGNoYXIpY2g7CisgICAgZ19idWZbKHVpbnQ4X3QpZ19idWZfbGVuXSA9ICdcMCc7CisgICAgaWYoZ19idWZfbGVuICsgMSA+PSBzaXplb2YoZ19idWYpIHx8IGNoID09ICdcbicgfHwgY2ggPT0gJ1wwJykKKyAgICB7CisgICAgICAgIC8qIFNlbmQgdGhlIGNoYXIgKi8KKyAgICAgICAgaWYoZ19JQ0VfQ29ubmVjZWQpCisgICAgICAgIHsKKworICAgICAgICAgICAgaWYoU0hfRG9Db21tYW5kKDB4MDQsIChpbnQpZ19idWYsIE5VTEwpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ19idWZfbGVuID0gMDsKKworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyMgaWYgKERFQlVHX0VOQUJMRV9TRU1JSE9TVCA9PSAyKSAvLyBSZS1kaXJlY3QgdG8gVUFSVCBEZWJ1ZyBQb3J0IG9ubHkgd2hlbiBERUJVR19FTkFCTEVfU0VNSUhPU1Q9MgorICAgICAgICAgICAgaW50IGk7CisKKyAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGdfYnVmX2xlbjsgaSsrKQorICAgICAgICAgICAgICAgIFNlbmRDaGFyX1RvVUFSVChnX2J1ZltpXSk7CisgICAgICAgICAgICBnX2J1Zl9sZW4gPSAwOworIyBlbmRpZgorICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBTZW5kQ2hhcl9Ub1VBUlQoY2gpOworI2VuZGlmCit9CisKKy8qKgorICogQGJyaWVmICAgIFJvdXRpbmUgdG8gZ2V0IGEgY2hhcgorICoKKyAqIEBwYXJhbSAgICBOb25lCisgKgorICogQHJldHVybnMgIEdldCB2YWx1ZSBmcm9tIFVBUlQgZGVidWcgcG9ydCBvciBzZW1paG9zdAorICoKKyAqIEBkZXRhaWxzICBXYWl0IFVBUlQgZGVidWcgcG9ydCBvciBzZW1paG9zdCB0byBpbnB1dCBhIGNoYXIuCisgKi8KK2NoYXIgR2V0Q2hhcih2b2lkKQoreworI2lmZGVmIERFQlVHX0VOQUJMRV9TRU1JSE9TVAorIyBpZiBkZWZpbmVkIChfX0lDQ0FSTV9fKQorICAgIGludCBuUmV0OworICAgIHdoaWxlKFNIX0RvQ29tbWFuZCgweDcsIDAsICZuUmV0KSAhPSAwKQorICAgIHsKKyAgICAgICAgaWYoblJldCAhPSAwKQorICAgICAgICAgICAgcmV0dXJuIChjaGFyKW5SZXQ7CisgICAgfQorIyBlbHNlCisgICAgaW50IG5SZXQ7CisgICAgd2hpbGUoU0hfRG9Db21tYW5kKDB4MTAxLCAwLCAmblJldCkgIT0gMCkKKyAgICB7CisgICAgICAgIGlmKG5SZXQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgU0hfRG9Db21tYW5kKDB4MDcsIDAsICZuUmV0KTsKKyAgICAgICAgICAgIHJldHVybiAoY2hhciluUmV0OworICAgICAgICB9CisgICAgfQorCisKKyMgaWYgKERFQlVHX0VOQUJMRV9TRU1JSE9TVCA9PSAyKSAvLyBSZS1kaXJlY3QgdG8gVUFSVCBEZWJ1ZyBQb3J0IG9ubHkgd2hlbiBERUJVR19FTkFCTEVfU0VNSUhPU1Q9MgorCisgICAgLyogVXNlIGRlYnVnIHBvcnQgd2hlbiBJQ0UgaXMgbm90IGNvbm5lY3RlZCBhdCBzZW1paG9zdCBtb2RlICovCisgICAgd2hpbGUoIWdfSUNFX0Nvbm5lY2VkKQorICAgIHsKKyAgICAgICAgaWYoKERFQlVHX1BPUlQtPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfUlhFTVBUWV9Nc2spID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoREVCVUdfUE9SVC0+REFUKTsKKyAgICAgICAgfQorICAgIH0KKyMgZW5kaWYKKworIyBlbmRpZgorICAgIHJldHVybiAoMCk7CisjZWxzZQorCisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgICAgIGlmKChERUJVR19QT1JULT5GSUZPU1RTICYgVUFSVF9GSUZPU1RTX1JYRU1QVFlfTXNrKSA9PSAwVSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICgoY2hhcilERUJVR19QT1JULT5EQVQpOworICAgICAgICB9CisgICAgfQorCisjZW5kaWYKK30KKworLyoqCisgKiBAYnJpZWYgICAgQ2hlY2sgYW55IGNoYXIgaW5wdXQgZnJvbSBVQVJUCisgKgorICogQHBhcmFtICAgIE5vbmUKKyAqCisgKiBAcmV0dmFsICAgMTogTm8gYW55IGNoYXIgaW5wdXQKKyAqIEByZXR2YWwgICAwOiBIYXZlIHNvbWUgY2hhciBpbnB1dAorICoKKyAqIEBkZXRhaWxzICBDaGVjayBVQVJUIFJTUiBSWCBFTVBUWSBvciBub3QgdG8gZGV0ZXJtaW5lIGlmIGFueSBjaGFyIGlucHV0IGZyb20gVUFSVAorICovCisKK2ludCBrYmhpdCh2b2lkKQoreworICAgIHJldHVybiAhKChERUJVR19QT1JULT5GSUZPU1RTICYgVUFSVF9GSUZPU1RTX1JYRU1QVFlfTXNrKSA9PSAwVSk7Cit9CisvKioKKyAqIEBicmllZiAgICBDaGVjayBpZiBkZWJ1ZyBtZXNzYWdlIGZpbmlzaGVkCisgKgorICogQHBhcmFtICAgIE5vbmUKKyAqCisgKiBAcmV0dmFsICAgMTogTWVzc2FnZSBpcyBmaW5pc2hlZAorICogQHJldHZhbCAgIDA6IE1lc3NhZ2UgaXMgdHJhbnNtaXR0aW5nLgorICoKKyAqIEBkZXRhaWxzICBDaGVjayBpZiBtZXNzYWdlIGZpbmlzaGVkIChGSUZPIGVtcHR5IG9mIGRlYnVnIHBvcnQpCisgKi8KKworaW50IElzRGVidWdGaWZvRW1wdHkodm9pZCkKK3sKKyAgICByZXR1cm4gKChERUJVR19QT1JULT5GSUZPU1RTICYgVUFSVF9GSUZPU1RTX1RYRU1QVFlGX01zaykgIT0gMFUpOworfQorCisvKioKKyAqIEBicmllZiAgICBDIGxpYnJhcnkgcmV0YXJnZXR0aW5nCisgKgorICogQHBhcmFtW2luXSAgY2ggIFdyaXRlIGEgY2hhcmFjdGVyIGRhdGEKKyAqCisgKiBAcmV0dXJucyAgTm9uZQorICoKKyAqIEBkZXRhaWxzICBDaGVjayBpZiBtZXNzYWdlIGZpbmlzaGVkIChGSUZPIGVtcHR5IG9mIGRlYnVnIHBvcnQpCisgKi8KKwordm9pZCBfdHR5d3JjaChpbnQgY2gpCit7CisgICAgU2VuZENoYXIoY2gpOworICAgIHJldHVybjsKK30KKworCisvKioKKyAqIEBicmllZiAgICAgIFdyaXRlIGNoYXJhY3RlciB0byBzdHJlYW0KKyAqCisgKiBAcGFyYW1baW5dICBjaCAgICAgICBDaGFyYWN0ZXIgdG8gYmUgd3JpdHRlbi4gVGhlIGNoYXJhY3RlciBpcyBwYXNzZWQgYXMgaXRzIGludCBwcm9tb3Rpb24uCisgKiBAcGFyYW1baW5dICBzdHJlYW0gICBQb2ludGVyIHRvIGEgRklMRSBvYmplY3QgdGhhdCBpZGVudGlmaWVzIHRoZSBzdHJlYW0gd2hlcmUgdGhlIGNoYXJhY3RlciBpcyB0byBiZSB3cml0dGVuLgorICoKKyAqIEByZXR1cm5zICAgIElmIHRoZXJlIGFyZSBubyBlcnJvcnMsIHRoZSBzYW1lIGNoYXJhY3RlciB0aGF0IGhhcyBiZWVuIHdyaXR0ZW4gaXMgcmV0dXJuZWQuCisgKiAgICAgICAgICAgICBJZiBhbiBlcnJvciBvY2N1cnMsIEVPRiBpcyByZXR1cm5lZCBhbmQgdGhlIGVycm9yIGluZGljYXRvciBpcyBzZXQgKHNlZSBmZXJyb3IpLgorICoKKyAqIEBkZXRhaWxzICAgIFdyaXRlcyBhIGNoYXJhY3RlciB0byB0aGUgc3RyZWFtIGFuZCBhZHZhbmNlcyB0aGUgcG9zaXRpb24gaW5kaWNhdG9yLlxuCisgKiAgICAgICAgICAgICBUaGUgY2hhcmFjdGVyIGlzIHdyaXR0ZW4gYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHN0cmVhbSBhcyBpbmRpY2F0ZWQgXG4KKyAqICAgICAgICAgICAgIGJ5IHRoZSBpbnRlcm5hbCBwb3NpdGlvbiBpbmRpY2F0b3IsIHdoaWNoIGlzIHRoZW4gYWR2YW5jZWQgb25lIGNoYXJhY3Rlci4KKyAqCisgICAgICAgVGhlIGFib3ZlIGRlc2NyaXB0aW9ucyBhcmUgY29waWVkIGZyb20gaHR0cDovL3d3dy5jcGx1c3BsdXMuY29tL3JlZmVyZW5jZS9jbGlicmFyeS9jc3RkaW8vZnB1dGMvLgorICoKKyAqCisgKi8KKworaW50IGZwdXRjKGludCBjaCwgRklMRSAqc3RyZWFtKQoreworICAgICh2b2lkKXN0cmVhbTsKKyAgICBTZW5kQ2hhcihjaCk7CisgICAgcmV0dXJuIGNoOworfQorCisKKyNpZiAoZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSkKKworI2lmICFkZWZpbmVkKE9TX1VTRV9TRU1JSE9TVElORykKK2ludCBfd3JpdGUgKGludCBmZCwgY2hhciAqcHRyLCBpbnQgbGVuKQoreworICAgIGludCBpID0gbGVuOworCisgICAgd2hpbGUoaS0tKSB7CisgICAgICAgIHdoaWxlKERFQlVHX1BPUlQtPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfVFhGVUxMX01zayk7CisKKyAgICAgICAgaWYoKnB0ciA9PSAnXG4nKSB7CisgICAgICAgICAgICBERUJVR19QT1JULT5EQVQgPSAnXHInOworICAgICAgICAgICAgd2hpbGUoREVCVUdfUE9SVC0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19UWEZVTExfTXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIERFQlVHX1BPUlQtPkRBVCA9ICpwdHIrKzsKKyAgICB9CisgICAgcmV0dXJuIGxlbjsKK30KKworaW50IF9yZWFkIChpbnQgZmQsIGNoYXIgKnB0ciwgaW50IGxlbikKK3sKKworICAgIHdoaWxlKChERUJVR19QT1JULT5GSUZPU1RTICYgVUFSVF9GSUZPU1RTX1JYRU1QVFlfTXNrKSAhPSAwKTsKKyAgICAqcHRyID0gREVCVUdfUE9SVC0+REFUOworICAgIHJldHVybiAxOworCisKK30KKyNlbmRpZgorCisjZWxzZQorLyoqCisgKiBAYnJpZWYgICAgICBHZXQgY2hhcmFjdGVyIGZyb20gVUFSVCBkZWJ1ZyBwb3J0IG9yIHNlbWlob3N0aW5nIGlucHV0CisgKgorICogQHBhcmFtW2luXSAgc3RyZWFtICAgUG9pbnRlciB0byBhIEZJTEUgb2JqZWN0IHRoYXQgaWRlbnRpZmllcyB0aGUgc3RyZWFtIG9uIHdoaWNoIHRoZSBvcGVyYXRpb24gaXMgdG8gYmUgcGVyZm9ybWVkLgorICoKKyAqIEByZXR1cm5zICAgIFRoZSBjaGFyYWN0ZXIgcmVhZCBmcm9tIFVBUlQgZGVidWcgcG9ydCBvciBzZW1paG9zdGluZworICoKKyAqIEBkZXRhaWxzICAgIEZvciBnZXQgbWVzc2FnZSBmcm9tIGRlYnVnIHBvcnQgb3Igc2VtaWhvc3RpbmcuCisgKgorICovCisKK2ludCBmZ2V0YyhGSUxFICpzdHJlYW0pCit7CisgICAgKHZvaWQpc3RyZWFtOworICAgIHJldHVybiAoKGludClHZXRDaGFyKCkpOworfQorCisvKioKKyAqIEBicmllZiAgICAgIENoZWNrIGVycm9yIGluZGljYXRvcgorICoKKyAqIEBwYXJhbVtpbl0gIHN0cmVhbSAgIFBvaW50ZXIgdG8gYSBGSUxFIG9iamVjdCB0aGF0IGlkZW50aWZpZXMgdGhlIHN0cmVhbS4KKyAqCisgKiBAcmV0dXJucyAgICBJZiB0aGUgZXJyb3IgaW5kaWNhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RyZWFtIHdhcyBzZXQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbm9uemVybyB2YWx1ZS4KKyAqICAgICAgICAgICAgIE90aGVyd2lzZSwgaXQgcmV0dXJucyBhIHplcm8gdmFsdWUuCisgKgorICogQGRldGFpbHMgICAgQ2hlY2tzIGlmIHRoZSBlcnJvciBpbmRpY2F0b3IgYXNzb2NpYXRlZCB3aXRoIHN0cmVhbSBpcyBzZXQsIHJldHVybmluZyBhIHZhbHVlIGRpZmZlcmVudAorICogICAgICAgICAgICAgZnJvbSB6ZXJvIGlmIGl0IGlzLiBUaGlzIGluZGljYXRvciBpcyBnZW5lcmFsbHkgc2V0IGJ5IGEgcHJldmlvdXMgb3BlcmF0aW9uIG9uIHRoZSBzdHJlYW0gdGhhdCBmYWlsZWQuCisgKgorICAgICAgIFRoZSBhYm92ZSBkZXNjcmlwdGlvbnMgYXJlIGNvcGllZCBmcm9tIGh0dHA6Ly93d3cuY3BsdXNwbHVzLmNvbS9yZWZlcmVuY2UvY2xpYnJhcnkvY3N0ZGlvL2ZlcnJvci8uCisgKgorICovCisKK2ludCBmZXJyb3IoRklMRSAqc3RyZWFtKQoreworICAgICh2b2lkKXN0cmVhbTsKKyAgICByZXR1cm4gRU9GOworfQorI2VuZGlmCisKKyNpZmRlZiBERUJVR19FTkFCTEVfU0VNSUhPU1QKKyMgaWZkZWYgX19JQ0NBUk1fXwordm9pZCBfX2V4aXQoaW50IHJldHVybl9jb2RlKQoreworCisgICAgLyogQ2hlY2sgaWYgbGluayB3aXRoIElDRSAqLworICAgIGlmKFNIX0RvQ29tbWFuZCgweDE4LCAweDIwMDI2LCBOVUxMKSA9PSAwKQorICAgIHsKKyAgICAgICAgLyogTWFrZSBzdXJlIGFsbCBtZXNzYWdlIGlzIHByaW50IG91dCAqLworICAgICAgICB3aGlsZShJc0RlYnVnRmlmb0VtcHR5KCkgPT0gMCk7CisgICAgfQorbGFiZWw6CisgICAgZ290byBsYWJlbDsgIC8qIGVuZGxlc3MgbG9vcCAqLworfQorIyBlbHNlCit2b2lkIF9zeXNfZXhpdChpbnQgcmV0dXJuX2NvZGUpCit7CisgICAgKHZvaWQpcmV0dXJuX2NvZGU7CisgICAgLyogQ2hlY2sgaWYgbGluayB3aXRoIElDRSAqLworICAgIGlmKFNIX0RvQ29tbWFuZCgweDE4LCAweDIwMDI2LCBOVUxMKSA9PSAwKQorICAgIHsKKyAgICAgICAgLyogTWFrZSBzdXJlIGFsbCBtZXNzYWdlIGlzIHByaW50IG91dCAqLworICAgICAgICB3aGlsZShJc0RlYnVnRmlmb0VtcHR5KCkgPT0gMCk7CisgICAgfQorbGFiZWw6CisgICAgZ290byBsYWJlbDsgIC8qIGVuZGxlc3MgbG9vcCAqLworfQorIyBlbmRpZgorI2VuZGlmCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3J0Yy5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4ZTE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3J0Yy5jCkBAIC0wLDAgKzEsMTA2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHJ0Yy5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBSZWFsIFRpbWUgQ2xvY2soUlRDKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworCisvKiogQGNvbmQgSElEREVOX1NZTUJPTFMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTWFjcm8sIHR5cGUgYW5kIGNvbnN0YW50IGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBSVENfR0xPQkFMUworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBHbG9iYWwgZmlsZSBzY29wZSAoc3RhdGljKSB2YXJpYWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9sYXRpbGUgdWludDMyX3QgZ191MzJoaVllYXIsIGdfdTMybG9ZZWFyLCBnX3UzMmhpTW9udGgsIGdfdTMybG9Nb250aCwgZ191MzJoaURheSwgZ191MzJsb0RheTsKK3N0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCBnX3UzMmhpSG91ciwgZ191MzJsb0hvdXIsIGdfdTMyaGlNaW4sIGdfdTMybG9NaW4sIGdfdTMyaGlTZWMsIGdfdTMybG9TZWM7CisKKy8qKiBAZW5kY29uZCBISURERU5fU1lNQk9MUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgUlRDX0RyaXZlciBSVEMgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgUlRDX0VYUE9SVEVEX0ZVTkNUSU9OUyBSVEMgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBJbml0aWFsaXplIFJUQyBtb2R1bGUgYW5kIHN0YXJ0IGNvdW50aW5nCisgICoKKyAgKiBAcGFyYW1baW5dICBzUHQgICAgIFNwZWNpZnkgdGhlIHRpbWUgcHJvcGVydHkgYW5kIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4gSXQgaW5jbHVkZXM6ICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyWWVhcjogWWVhciB2YWx1ZSwgcmFuZ2UgYmV0d2VlbiAyMDAwIH4gMjA5OS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJNb250aDogTW9udGggdmFsdWUsIHJhbmdlIGJldHdlZW4gMSB+IDEyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMkRheTogRGF5IHZhbHVlLCByYW5nZSBiZXR3ZWVuIDEgfiAzMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyRGF5T2ZXZWVrOiBEYXkgb2YgdGhlIHdlZWsuIFtSVENfU1VOREFZIC8gUlRDX01PTkRBWSAvIFJUQ19UVUVTREFZIC8KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX1dFRE5FU0RBWSAvIFJUQ19USFVSU0RBWSAvIFJUQ19GUklEQVkgLworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfU0FUVVJEQVldICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJIb3VyOiBIb3VyIHZhbHVlLCByYW5nZSBiZXR3ZWVuIDAgfiAyMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMk1pbnV0ZTogTWludXRlIHZhbHVlLCByYW5nZSBiZXR3ZWVuIDAgfiA1OS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyU2Vjb25kOiBTZWNvbmQgdmFsdWUsIHJhbmdlIGJldHdlZW4gMCB+IDU5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJUaW1lU2NhbGU6IFtSVENfQ0xPQ0tfMTIgLyBSVENfQ0xPQ0tfMjRdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHU4QW1QbTogW1JUQ19BTSAvIFJUQ19QTV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvOiBcbgorICAqICAgICAgICAgICAgICAgICAxLiBXcml0ZSBpbml0aWFsIGtleSB0byBsZXQgUlRDIHN0YXJ0IGNvdW50LiAgXG4KKyAgKiAgICAgICAgICAgICAgICAgMi4gSW5wdXQgcGFyYW1ldGVyIGluZGljYXRlcyBzdGFydCBkYXRlL3RpbWUuIFxuCisgICogICAgICAgICAgICAgICAgIDMuIFVzZXIgaGFzIHRvIG1ha2Ugc3VyZSB0aGF0IHBhcmFtZXRlcnMgb2YgUlRDIGRhdGUvdGltZSBhcmUgcmVhc29uYWJsZS4gXG4KKyAgICAgICAgTnVsbCBwb2ludGVyIGZvciB1c2luZyBkZWZhdWx0IHN0YXJ0aW5nIGRhdGUvdGltZS4KKyAgKi8KK3ZvaWQgUlRDX09wZW4oU19SVENfVElNRV9EQVRBX1QgKnNQdCkKK3sKKyAgICBSVEMtPklOSVQgPSBSVENfSU5JVF9LRVk7CisKKyAgICBpZihSVEMtPklOSVQgIT0gUlRDX0lOSVRfQUNUSVZFX01zaykKKyAgICB7CisgICAgICAgIFJUQy0+SU5JVCA9IFJUQ19JTklUX0tFWTsKKyAgICAgICAgd2hpbGUoUlRDLT5JTklUICE9IFJUQ19JTklUX0FDVElWRV9Nc2spIHt9CisgICAgfQorCisgICAgaWYoc1B0ICE9IDApCisgICAgeworICAgICAgICAvKiBTZXQgUlRDIGRhdGUgYW5kIHRpbWUgKi8KKyAgICAgICAgUlRDX1NldERhdGVBbmRUaW1lKHNQdCk7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFJUQyBDbG9jaworICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgd2lsbCBkaXNhYmxlIFJUQyBwZXJpcGhlcmFsIGNsb2NrIGFuZCBzdG9wcyBSVEMgY291bnRpbmcuCisgICovCit2b2lkIFJUQ19DbG9zZSh2b2lkKQoreworICAgIGlmKChfX1BDKCkmTlNfT0ZGU0VUKSA9PSAwKQorICAgIHsKKyAgICAgICAgLyogRGlzYWJsZSBSVEMgY2xvY2sgaW4gc2VjdXJlIG1vZGUgb25seSAqLworICAgICAgICBDTEstPkFQQkNMSzAgJj0gfkNMS19BUEJDTEswX1JUQ0NLRU5fTXNrOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IDMyayBGcmVxdWVuY3kgQ29tcGVuc2F0aW9uIERhdGEKKyAgKgorICAqICBAcGFyYW1baW5dICAgIGkzMkZyZXF1ZW5jeVgxMDAwMCAgICBTcGVjaWZ5IHRoZSBSVEMgY2xvY2sgWDEwMDAwLCBleDogMzI3NzM2NTEyIG1lYW5zIDMyNzczLjY1MTIuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGNvbXBlbnNhdGUgdGhlIDMyIGtIeiBmcmVxdWVuY3kgYnkgY3VycmVudCBMWFQgZnJlcXVlbmN5IGZvciBSVEMgYXBwbGljYXRpb24uCisgICovCit2b2lkIFJUQ18zMktDYWxpYnJhdGlvbihpbnQzMl90IGkzMkZyZXF1ZW5jeVgxMDAwMCkKK3sKKyAgICB1aW50NjRfdCB1NjRDb21wZW5zYXRlOworCisgICAgLyogdTY0Q29tcGVuc2F0ZSA9ICh1aW50NjRfdCkoMHg2NDAwMDAwMDAwMCk7ICovCisgICAgdTY0Q29tcGVuc2F0ZSA9ICh1aW50NjRfdCkoMHgyNzEwMDAwMDAwMDAwKTsKKyAgICB1NjRDb21wZW5zYXRlID0gKHVpbnQ2NF90KSh1NjRDb21wZW5zYXRlIC8gKHVpbnQ2NF90KWkzMkZyZXF1ZW5jeVgxMDAwMCk7CisgICAgLyoKKyAgICAgICAgRm9ybXVsYSBmb3IgMzJLIGNvbXBlbnNhdGlvbiBpcworICAgICAgICAgICAgRlJFUUFESiA9IDB4MjAwMDAwICogKDMyNzY4IC8gTFhUX2ZyZXEpCisgICAgKi8KKyAgICBpZih1NjRDb21wZW5zYXRlID49ICh1aW50NjRfdCkweDQwMDAwMCkKKyAgICB7CisgICAgICAgIHU2NENvbXBlbnNhdGUgPSAodWludDY0X3QpMHgzRkZGRkY7CisgICAgfQorCisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICBSVEMtPkZSRVFBREogPSAodWludDMyX3QpdTY0Q29tcGVuc2F0ZTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IEN1cnJlbnQgUlRDIERhdGUgYW5kIFRpbWUKKyAgKgorICAqIEBwYXJhbVtvdXRdIHNQdCAgICAgVGhlIHJldHVybmVkIHBvaW50ZXIgaXMgc3BlY2lmaWVkIHRoZSBjdXJyZW50IFJUQyB2YWx1ZS4gSXQgaW5jbHVkZXM6IFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJZZWFyOiBZZWFyIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMk1vbnRoOiBNb250aCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyRGF5OiBEYXkgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJEYXlPZldlZWs6IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMkhvdXI6IEhvdXIgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyTWludXRlOiBNaW51dGUgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJTZWNvbmQ6IFNlY29uZCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMlRpbWVTY2FsZTogW1JUQ19DTE9DS18xMiAvIFJUQ19DTE9DS18yNF0gICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdThBbVBtOiBbUlRDX0FNIC8gUlRDX1BNXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGdldCB0aGUgY3VycmVudCBSVEMgZGF0ZSBhbmQgdGltZSB2YWx1ZS4KKyAgKi8KK3ZvaWQgUlRDX0dldERhdGVBbmRUaW1lKFNfUlRDX1RJTUVfREFUQV9UICpzUHQpCit7CisgICAgdWludDMyX3QgdTMyVG1wOworCisgICAgc1B0LT51MzJUaW1lU2NhbGUgPSBSVEMtPkNMS0ZNVCAmIFJUQ19DTEtGTVRfMjRIRU5fTXNrOyAgICAgLyogMTIvMjQtaG91ciAqLworICAgIHNQdC0+dTMyRGF5T2ZXZWVrID0gUlRDLT5XRUVLREFZICYgUlRDX1dFRUtEQVlfV0VFS0RBWV9Nc2s7IC8qIERheSBvZiB0aGUgd2VlayAqLworCisgICAgLyogR2V0IFtEYXRlIGRpZ2l0XSBkYXRhICovCisgICAgZ191MzJoaVllYXIgID0gKFJUQy0+Q0FMICYgUlRDX0NBTF9URU5ZRUFSX01zaykgPj4gUlRDX0NBTF9URU5ZRUFSX1BvczsKKyAgICBnX3UzMmxvWWVhciAgPSAoUlRDLT5DQUwgJiBSVENfQ0FMX1lFQVJfTXNrKSA+PiBSVENfQ0FMX1lFQVJfUG9zOworICAgIGdfdTMyaGlNb250aCA9IChSVEMtPkNBTCAmIFJUQ19DQUxfVEVOTU9OX01zaykgPj4gUlRDX0NBTF9URU5NT05fUG9zOworICAgIGdfdTMybG9Nb250aCA9IChSVEMtPkNBTCAmIFJUQ19DQUxfTU9OX01zaykgPj4gUlRDX0NBTF9NT05fUG9zOworICAgIGdfdTMyaGlEYXkgICA9IChSVEMtPkNBTCAmIFJUQ19DQUxfVEVOREFZX01zaykgPj4gUlRDX0NBTF9URU5EQVlfUG9zOworICAgIGdfdTMybG9EYXkgICA9IChSVEMtPkNBTCAmIFJUQ19DQUxfREFZX01zaykgPj4gUlRDX0NBTF9EQVlfUG9zOworCisgICAgLyogR2V0IFtUaW1lIGRpZ2l0XSBkYXRhICovCisgICAgZ191MzJoaUhvdXIgPSAoUlRDLT5USU1FICYgUlRDX1RJTUVfVEVOSFJfTXNrKSA+PiBSVENfVElNRV9URU5IUl9Qb3M7CisgICAgZ191MzJsb0hvdXIgPSAoUlRDLT5USU1FICYgUlRDX1RJTUVfSFJfTXNrKSA+PiBSVENfVElNRV9IUl9Qb3M7CisgICAgZ191MzJoaU1pbiAgPSAoUlRDLT5USU1FICYgUlRDX1RJTUVfVEVOTUlOX01zaykgPj4gUlRDX1RJTUVfVEVOTUlOX1BvczsKKyAgICBnX3UzMmxvTWluICA9IChSVEMtPlRJTUUgJiBSVENfVElNRV9NSU5fTXNrKSA+PiBSVENfVElNRV9NSU5fUG9zOworICAgIGdfdTMyaGlTZWMgID0gKFJUQy0+VElNRSAmIFJUQ19USU1FX1RFTlNFQ19Nc2spID4+IFJUQ19USU1FX1RFTlNFQ19Qb3M7CisgICAgZ191MzJsb1NlYyAgPSAoUlRDLT5USU1FICYgUlRDX1RJTUVfU0VDX01zaykgPj4gUlRDX1RJTUVfU0VDX1BvczsKKworICAgIC8qIENvbXB1dGUgdG8gMjBYWCB5ZWFyICovCisgICAgdTMyVG1wICA9IChnX3UzMmhpWWVhciAqIDEwVUwpOworICAgIHUzMlRtcCArPSBnX3UzMmxvWWVhcjsKKyAgICBzUHQtPnUzMlllYXIgPSB1MzJUbXAgKyAodWludDMyX3QpUlRDX1lFQVIyMDAwOworCisgICAgLyogQ29tcHV0ZSAwfjEyIG1vbnRoICovCisgICAgdTMyVG1wID0gKGdfdTMyaGlNb250aCAqIDEwVUwpOworICAgIHNQdC0+dTMyTW9udGggPSB1MzJUbXAgKyBnX3UzMmxvTW9udGg7CisKKyAgICAvKiBDb21wdXRlIDB+MzEgZGF5ICovCisgICAgdTMyVG1wID0gKGdfdTMyaGlEYXkgKiAxMFVMKTsKKyAgICBzUHQtPnUzMkRheSA9ICB1MzJUbXAgICsgZ191MzJsb0RheTsKKworICAgIC8qIENvbXB1dGUgMTIvMjQgaG91ciAqLworICAgIGlmKHNQdC0+dTMyVGltZVNjYWxlID09ICh1aW50MzJfdClSVENfQ0xPQ0tfMTIpCisgICAgeworICAgICAgICB1MzJUbXAgPSAoZ191MzJoaUhvdXIgKiAxMFVMKTsKKyAgICAgICAgdTMyVG1wICs9IGdfdTMybG9Ib3VyOworICAgICAgICBzUHQtPnUzMkhvdXIgPSB1MzJUbXA7ICAgICAgICAgIC8qIEFNOiAxfjEyLiBQTTogMjF+MzIuICovCisKKyAgICAgICAgaWYoc1B0LT51MzJIb3VyID49IDIxVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNQdC0+dTMyQW1QbSAgPSAodWludDMyX3QpUlRDX1BNOworICAgICAgICAgICAgc1B0LT51MzJIb3VyIC09IDIwVUw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzUHQtPnUzMkFtUG0gPSAodWludDMyX3QpUlRDX0FNOworICAgICAgICB9CisKKyAgICAgICAgdTMyVG1wICA9IChnX3UzMmhpTWluICAqIDEwVUwpOworICAgICAgICB1MzJUbXAgKz0gZ191MzJsb01pbjsKKyAgICAgICAgc1B0LT51MzJNaW51dGUgPSB1MzJUbXA7CisKKyAgICAgICAgdTMyVG1wICA9IChnX3UzMmhpU2VjICAqIDEwVUwpOworICAgICAgICB1MzJUbXAgKz0gZ191MzJsb1NlYzsKKyAgICAgICAgc1B0LT51MzJTZWNvbmQgPSB1MzJUbXA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMlRtcCAgPSAoZ191MzJoaUhvdXIgKiAxMFVMKTsKKyAgICAgICAgdTMyVG1wICs9IGdfdTMybG9Ib3VyOworICAgICAgICBzUHQtPnUzMkhvdXIgPSB1MzJUbXA7CisKKyAgICAgICAgdTMyVG1wICA9IChnX3UzMmhpTWluICogMTBVTCk7CisgICAgICAgIHUzMlRtcCArPSAgZ191MzJsb01pbjsKKyAgICAgICAgc1B0LT51MzJNaW51dGUgPSB1MzJUbXA7CisKKyAgICAgICAgdTMyVG1wICA9IChnX3UzMmhpU2VjICogMTBVTCk7CisgICAgICAgIHUzMlRtcCArPSBnX3UzMmxvU2VjOworICAgICAgICBzUHQtPnUzMlNlY29uZCA9IHUzMlRtcDsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBSVEMgQWxhcm0gRGF0ZSBhbmQgVGltZQorICAqCisgICogQHBhcmFtW291dF0gc1B0ICAgICBUaGUgcmV0dXJuZWQgcG9pbnRlciBpcyBzcGVjaWZpZWQgdGhlIFJUQyBhbGFybSB2YWx1ZS4gSXQgaW5jbHVkZXM6IFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJZZWFyOiBZZWFyIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJNb250aDogTW9udGggdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJEYXk6IERheSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJEYXlPZldlZWs6IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJIb3VyOiBIb3VyIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJNaW51dGU6IE1pbnV0ZSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJTZWNvbmQ6IFNlY29uZCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJUaW1lU2NhbGU6IFtSVENfQ0xPQ0tfMTIgLyBSVENfQ0xPQ0tfMjRdICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1OEFtUG06IFtSVENfQU0gLyBSVENfUE1dICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGdldCB0aGUgUlRDIGFsYXJtIGRhdGUgYW5kIHRpbWUgc2V0dGluZy4KKyAgKi8KK3ZvaWQgUlRDX0dldEFsYXJtRGF0ZUFuZFRpbWUoU19SVENfVElNRV9EQVRBX1QgKnNQdCkKK3sKKyAgICB1aW50MzJfdCB1MzJUbXA7CisKKyAgICBzUHQtPnUzMlRpbWVTY2FsZSA9IFJUQy0+Q0xLRk1UICYgUlRDX0NMS0ZNVF8yNEhFTl9Nc2s7ICAgICAvKiAxMi8yNC1ob3VyICovCisgICAgc1B0LT51MzJEYXlPZldlZWsgPSBSVEMtPldFRUtEQVkgJiBSVENfV0VFS0RBWV9XRUVLREFZX01zazsgLyogRGF5IG9mIHRoZSB3ZWVrICovCisKKyAgICAvKiBHZXQgYWxhcm0gW0RhdGUgZGlnaXRdIGRhdGEgKi8KKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIGdfdTMyaGlZZWFyICA9IChSVEMtPkNBTE0gJiBSVENfQ0FMTV9URU5ZRUFSX01zaykgPj4gUlRDX0NBTE1fVEVOWUVBUl9Qb3M7CisgICAgZ191MzJsb1llYXIgID0gKFJUQy0+Q0FMTSAmIFJUQ19DQUxNX1lFQVJfTXNrKSA+PiBSVENfQ0FMTV9ZRUFSX1BvczsKKyAgICBnX3UzMmhpTW9udGggPSAoUlRDLT5DQUxNICYgUlRDX0NBTE1fVEVOTU9OX01zaykgPj4gUlRDX0NBTE1fVEVOTU9OX1BvczsKKyAgICBnX3UzMmxvTW9udGggPSAoUlRDLT5DQUxNICYgUlRDX0NBTE1fTU9OX01zaykgPj4gUlRDX0NBTE1fTU9OX1BvczsKKyAgICBnX3UzMmhpRGF5ICAgPSAoUlRDLT5DQUxNICYgUlRDX0NBTE1fVEVOREFZX01zaykgPj4gUlRDX0NBTE1fVEVOREFZX1BvczsKKyAgICBnX3UzMmxvRGF5ICAgPSAoUlRDLT5DQUxNICYgUlRDX0NBTE1fREFZX01zaykgPj4gUlRDX0NBTE1fREFZX1BvczsKKworICAgIC8qIEdldCBhbGFybSBbVGltZSBkaWdpdF0gZGF0YSAqLworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgZ191MzJoaUhvdXIgPSAoUlRDLT5UQUxNICYgUlRDX1RBTE1fVEVOSFJfTXNrKSA+PiBSVENfVEFMTV9URU5IUl9Qb3M7CisgICAgZ191MzJsb0hvdXIgPSAoUlRDLT5UQUxNICYgUlRDX1RBTE1fSFJfTXNrKSA+PiBSVENfVEFMTV9IUl9Qb3M7CisgICAgZ191MzJoaU1pbiAgPSAoUlRDLT5UQUxNICYgUlRDX1RBTE1fVEVOTUlOX01zaykgPj4gUlRDX1RBTE1fVEVOTUlOX1BvczsKKyAgICBnX3UzMmxvTWluICA9IChSVEMtPlRBTE0gJiBSVENfVEFMTV9NSU5fTXNrKSA+PiBSVENfVEFMTV9NSU5fUG9zOworICAgIGdfdTMyaGlTZWMgID0gKFJUQy0+VEFMTSAmIFJUQ19UQUxNX1RFTlNFQ19Nc2spID4+IFJUQ19UQUxNX1RFTlNFQ19Qb3M7CisgICAgZ191MzJsb1NlYyAgPSAoUlRDLT5UQUxNICYgUlRDX1RBTE1fU0VDX01zaykgPj4gUlRDX1RBTE1fU0VDX1BvczsKKworICAgIC8qIENvbXB1dGUgdG8gMjBYWCB5ZWFyICovCisgICAgdTMyVG1wICA9IChnX3UzMmhpWWVhciAqIDEwVUwpOworICAgIHUzMlRtcCArPSBnX3UzMmxvWWVhcjsKKyAgICBzUHQtPnUzMlllYXIgPSB1MzJUbXAgKyAodWludDMyX3QpUlRDX1lFQVIyMDAwOworCisgICAgLyogQ29tcHV0ZSAwfjEyIG1vbnRoICovCisgICAgdTMyVG1wID0gKGdfdTMyaGlNb250aCAqIDEwVUwpOworICAgIHNQdC0+dTMyTW9udGggPSB1MzJUbXAgKyBnX3UzMmxvTW9udGg7CisKKyAgICAvKiBDb21wdXRlIDB+MzEgZGF5ICovCisgICAgdTMyVG1wID0gKGdfdTMyaGlEYXkgKiAxMFVMKTsKKyAgICBzUHQtPnUzMkRheSA9IHUzMlRtcCArIGdfdTMybG9EYXk7CisKKyAgICAvKiBDb21wdXRlIDEyLzI0IGhvdXIgKi8KKyAgICBpZihzUHQtPnUzMlRpbWVTY2FsZSA9PSAodWludDMyX3QpUlRDX0NMT0NLXzEyKQorICAgIHsKKyAgICAgICAgdTMyVG1wICA9IChnX3UzMmhpSG91ciAqIDEwVUwpOworICAgICAgICB1MzJUbXAgKz0gZ191MzJsb0hvdXI7CisgICAgICAgIHNQdC0+dTMySG91ciA9IHUzMlRtcDsgICAgICAgICAgLyogQU06IDF+MTIuIFBNOiAyMX4zMi4gKi8KKworICAgICAgICBpZihzUHQtPnUzMkhvdXIgPj0gMjFVTCkKKyAgICAgICAgeworICAgICAgICAgICAgc1B0LT51MzJBbVBtICA9ICh1aW50MzJfdClSVENfUE07CisgICAgICAgICAgICBzUHQtPnUzMkhvdXIgLT0gMjBVTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNQdC0+dTMyQW1QbSA9ICh1aW50MzJfdClSVENfQU07CisgICAgICAgIH0KKworICAgICAgICB1MzJUbXAgID0gKGdfdTMyaGlNaW4gKiAxMFVMKTsKKyAgICAgICAgdTMyVG1wICs9IGdfdTMybG9NaW47CisgICAgICAgIHNQdC0+dTMyTWludXRlID0gdTMyVG1wOworCisgICAgICAgIHUzMlRtcCAgPSAoZ191MzJoaVNlYyAqIDEwVUwpOworICAgICAgICB1MzJUbXAgKz0gZ191MzJsb1NlYzsKKyAgICAgICAgc1B0LT51MzJTZWNvbmQgPSB1MzJUbXA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMlRtcCAgPSAoZ191MzJoaUhvdXIgKiAxMFVMKTsKKyAgICAgICAgdTMyVG1wICs9ICBnX3UzMmxvSG91cjsKKyAgICAgICAgc1B0LT51MzJIb3VyID0gdTMyVG1wOworCisgICAgICAgIHUzMlRtcCAgPSAoZ191MzJoaU1pbiAqIDEwVUwpOworICAgICAgICB1MzJUbXAgKz0gZ191MzJsb01pbjsKKyAgICAgICAgc1B0LT51MzJNaW51dGUgPSB1MzJUbXA7CisKKyAgICAgICAgdTMyVG1wICA9IChnX3UzMmhpU2VjICogMTBVTCk7CisgICAgICAgIHUzMlRtcCArPSBnX3UzMmxvU2VjOworICAgICAgICBzUHQtPnUzMlNlY29uZCA9IHUzMlRtcDsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFVwZGF0ZSBDdXJyZW50IFJUQyBEYXRlIGFuZCBUaW1lCisgICoKKyAgKiBAcGFyYW1baW5dICBzUHQgICAgIFNwZWNpZnkgdGhlIHRpbWUgcHJvcGVydHkgYW5kIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4gSXQgaW5jbHVkZXM6ICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyWWVhcjogWWVhciB2YWx1ZSwgcmFuZ2UgYmV0d2VlbiAyMDAwIH4gMjA5OS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJNb250aDogTW9udGggdmFsdWUsIHJhbmdlIGJldHdlZW4gMSB+IDEyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMkRheTogRGF5IHZhbHVlLCByYW5nZSBiZXR3ZWVuIDEgfiAzMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyRGF5T2ZXZWVrOiBEYXkgb2YgdGhlIHdlZWsuIFtSVENfU1VOREFZIC8gUlRDX01PTkRBWSAvIFJUQ19UVUVTREFZIC8KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX1dFRE5FU0RBWSAvIFJUQ19USFVSU0RBWSAvIFJUQ19GUklEQVkgLworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfU0FUVVJEQVldICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJIb3VyOiBIb3VyIHZhbHVlLCByYW5nZSBiZXR3ZWVuIDAgfiAyMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMk1pbnV0ZTogTWludXRlIHZhbHVlLCByYW5nZSBiZXR3ZWVuIDAgfiA1OS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyU2Vjb25kOiBTZWNvbmQgdmFsdWUsIHJhbmdlIGJldHdlZW4gMCB+IDU5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJUaW1lU2NhbGU6IFtSVENfQ0xPQ0tfMTIgLyBSVENfQ0xPQ0tfMjRdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHU4QW1QbTogW1JUQ19BTSAvIFJUQ19QTV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byB1cGRhdGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHRvIFJUQy4KKyAgKi8KK3ZvaWQgUlRDX1NldERhdGVBbmRUaW1lKFNfUlRDX1RJTUVfREFUQV9UICpzUHQpCit7CisgICAgdWludDMyX3QgdTMyUmVnQ0FMLCB1MzJSZWdUSU1FOworCisgICAgaWYoc1B0ICE9IDApCisgICAgeworICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgLyogU2V0IFJUQyAyNC8xMiBob3VyIHNldHRpbmcgYW5kIERheSBvZiB0aGUgV2VlayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgICAgICBpZihzUHQtPnUzMlRpbWVTY2FsZSA9PSAodWludDMyX3QpUlRDX0NMT0NLXzEyKQorICAgICAgICB7CisgICAgICAgICAgICBSVEMtPkNMS0ZNVCAmPSB+UlRDX0NMS0ZNVF8yNEhFTl9Nc2s7CisKKyAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgICAgICAvKiBJbXBvcnRhbnQsIHJhbmdlIG9mIDEyLWhvdXIgUE0gbW9kZSBpcyAyMSB1cCB0byAzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgICAgICBpZihzUHQtPnUzMkFtUG0gPT0gKHVpbnQzMl90KVJUQ19QTSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzUHQtPnUzMkhvdXIgKz0gMjBVTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFJUQy0+Q0xLRk1UIHw9IFJUQ19DTEtGTVRfMjRIRU5fTXNrOworICAgICAgICB9CisKKyAgICAgICAgLyogU2V0IERheSBvZiB0aGUgV2VlayAqLworICAgICAgICBSVEMtPldFRUtEQVkgPSBzUHQtPnUzMkRheU9mV2VlazsKKworICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgLyogU2V0IFJUQyBDdXJyZW50IERhdGUgYW5kIFRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgICB1MzJSZWdDQUwgID0gKChzUHQtPnUzMlllYXIgLSAodWludDMyX3QpUlRDX1lFQVIyMDAwKSAvIDEwVUwpIDw8IDIwOworICAgICAgICB1MzJSZWdDQUwgfD0gKCgoc1B0LT51MzJZZWFyIC0gKHVpbnQzMl90KVJUQ19ZRUFSMjAwMCkgJSAxMFVMKSA8PCAxNik7CisgICAgICAgIHUzMlJlZ0NBTCB8PSAoKHNQdC0+dTMyTW9udGggIC8gMTBVTCkgPDwgMTIpOworICAgICAgICB1MzJSZWdDQUwgfD0gKChzUHQtPnUzMk1vbnRoICAlIDEwVUwpIDw8IDgpOworICAgICAgICB1MzJSZWdDQUwgfD0gKChzUHQtPnUzMkRheSAgICAvIDEwVUwpIDw8IDQpOworICAgICAgICB1MzJSZWdDQUwgfD0gKHNQdC0+dTMyRGF5ICAgICAlIDEwVUwpOworCisgICAgICAgIHUzMlJlZ1RJTUUgID0gKChzUHQtPnUzMkhvdXIgICAvIDEwVUwpIDw8IDIwKTsKKyAgICAgICAgdTMyUmVnVElNRSB8PSAoKHNQdC0+dTMySG91ciAgICUgMTBVTCkgPDwgMTYpOworICAgICAgICB1MzJSZWdUSU1FIHw9ICgoc1B0LT51MzJNaW51dGUgLyAxMFVMKSA8PCAxMik7CisgICAgICAgIHUzMlJlZ1RJTUUgfD0gKChzUHQtPnUzMk1pbnV0ZSAlIDEwVUwpIDw8IDgpOworICAgICAgICB1MzJSZWdUSU1FIHw9ICgoc1B0LT51MzJTZWNvbmQgLyAxMFVMKSA8PCA0KTsKKyAgICAgICAgdTMyUmVnVElNRSB8PSAoc1B0LT51MzJTZWNvbmQgJSAxMFVMKTsKKworICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgLyogU2V0IFJUQyBDYWxlbmRlciBhbmQgVGltZSBMb2FkaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgICAgICBSVEMtPkNBTCAgPSAodWludDMyX3QpdTMyUmVnQ0FMOworICAgICAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgICAgICBSVEMtPlRJTUUgPSAodWludDMyX3QpdTMyUmVnVElNRTsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFVwZGF0ZSBSVEMgQWxhcm0gRGF0ZSBhbmQgVGltZQorICAqCisgICogQHBhcmFtW2luXSAgc1B0ICAgICBTcGVjaWZ5IHRoZSB0aW1lIHByb3BlcnR5IGFuZCBhbGFybSBkYXRlIGFuZCB0aW1lLiBJdCBpbmNsdWRlczogICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMlllYXI6IFllYXIgdmFsdWUsIHJhbmdlIGJldHdlZW4gMjAwMCB+IDIwOTkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyTW9udGg6IE1vbnRoIHZhbHVlLCByYW5nZSBiZXR3ZWVuIDEgfiAxMi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJEYXk6IERheSB2YWx1ZSwgcmFuZ2UgYmV0d2VlbiAxIH4gMzEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMkRheU9mV2VlazogRGF5IG9mIHRoZSB3ZWVrLiBbUlRDX1NVTkRBWSAvIFJUQ19NT05EQVkgLyBSVENfVFVFU0RBWSAvCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19XRURORVNEQVkgLyBSVENfVEhVUlNEQVkgLyBSVENfRlJJREFZIC8KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX1NBVFVSREFZXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMySG91cjogSG91ciB2YWx1ZSwgcmFuZ2UgYmV0d2VlbiAwIH4gMjMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJNaW51dGU6IE1pbnV0ZSB2YWx1ZSwgcmFuZ2UgYmV0d2VlbiAwIH4gNTkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMlNlY29uZDogU2Vjb25kIHZhbHVlLCByYW5nZSBiZXR3ZWVuIDAgfiA1OS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyVGltZVNjYWxlOiBbUlRDX0NMT0NLXzEyIC8gUlRDX0NMT0NLXzI0XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1OEFtUG06IFtSVENfQU0gLyBSVENfUE1dICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gdXBkYXRlIGFsYXJtIGRhdGUgYW5kIHRpbWUgc2V0dGluZyB0byBSVEMuCisgICovCit2b2lkIFJUQ19TZXRBbGFybURhdGVBbmRUaW1lKFNfUlRDX1RJTUVfREFUQV9UICpzUHQpCit7CisgICAgdWludDMyX3QgdTMyUmVnQ0FMTSwgdTMyUmVnVEFMTTsKKworICAgIGlmKHNQdCAhPSAwKQorICAgIHsKKyAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgIC8qIFNldCBSVEMgMjQvMTIgaG91ciBzZXR0aW5nIGFuZCBEYXkgb2YgdGhlIFdlZWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICAgICAgaWYoc1B0LT51MzJUaW1lU2NhbGUgPT0gKHVpbnQzMl90KVJUQ19DTE9DS18xMikKKyAgICAgICAgeworICAgICAgICAgICAgUlRDLT5DTEtGTVQgJj0gflJUQ19DTEtGTVRfMjRIRU5fTXNrOworCisgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgICAgICAgLyogSW1wb3J0YW50LCByYW5nZSBvZiAxMi1ob3VyIFBNIG1vZGUgaXMgMjEgdXAgdG8gMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgICAgICAgaWYoc1B0LT51MzJBbVBtID09ICh1aW50MzJfdClSVENfUE0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc1B0LT51MzJIb3VyICs9IDIwVUw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBSVEMtPkNMS0ZNVCB8PSBSVENfQ0xLRk1UXzI0SEVOX01zazsKKyAgICAgICAgfQorCisgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgICAvKiBTZXQgUlRDIEFsYXJtIERhdGUgYW5kIFRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgIHUzMlJlZ0NBTE0gID0gKChzUHQtPnUzMlllYXIgLSAodWludDMyX3QpUlRDX1lFQVIyMDAwKSAvIDEwVUwpIDw8IDIwOworICAgICAgICB1MzJSZWdDQUxNIHw9ICgoKHNQdC0+dTMyWWVhciAtICh1aW50MzJfdClSVENfWUVBUjIwMDApICUgMTBVTCkgPDwgMTYpOworICAgICAgICB1MzJSZWdDQUxNIHw9ICgoc1B0LT51MzJNb250aCAgLyAxMFVMKSA8PCAxMik7CisgICAgICAgIHUzMlJlZ0NBTE0gfD0gKChzUHQtPnUzMk1vbnRoICAlIDEwVUwpIDw8IDgpOworICAgICAgICB1MzJSZWdDQUxNIHw9ICgoc1B0LT51MzJEYXkgICAgLyAxMFVMKSA8PCA0KTsKKyAgICAgICAgdTMyUmVnQ0FMTSB8PSAoc1B0LT51MzJEYXkgICAgJSAxMFVMKTsKKworICAgICAgICB1MzJSZWdUQUxNICA9ICgoc1B0LT51MzJIb3VyICAgLyAxMFVMKSA8PCAyMCk7CisgICAgICAgIHUzMlJlZ1RBTE0gfD0gKChzUHQtPnUzMkhvdXIgICAlIDEwVUwpIDw8IDE2KTsKKyAgICAgICAgdTMyUmVnVEFMTSB8PSAoKHNQdC0+dTMyTWludXRlIC8gMTBVTCkgPDwgMTIpOworICAgICAgICB1MzJSZWdUQUxNIHw9ICgoc1B0LT51MzJNaW51dGUgJSAxMFVMKSA8PCA4KTsKKyAgICAgICAgdTMyUmVnVEFMTSB8PSAoKHNQdC0+dTMyU2Vjb25kIC8gMTBVTCkgPDwgNCk7CisgICAgICAgIHUzMlJlZ1RBTE0gfD0gKHNQdC0+dTMyU2Vjb25kICUgMTBVTCk7CisKKyAgICAgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICAgICAgUlRDLT5DQUxNID0gKHVpbnQzMl90KXUzMlJlZ0NBTE07CisgICAgICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgICAgIFJUQy0+VEFMTSA9ICh1aW50MzJfdCl1MzJSZWdUQUxNOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgVXBkYXRlIFJUQyBDdXJyZW50IERhdGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlllYXIgICAgICAgICBUaGUgeWVhciBjYWxlbmRhciBkaWdpdCBvZiBjdXJyZW50IFJUQyBzZXR0aW5nLgorICAqIEBwYXJhbVtpbl0gIHUzMk1vbnRoICAgICAgICBUaGUgbW9udGggY2FsZW5kYXIgZGlnaXQgb2YgY3VycmVudCBSVEMgc2V0dGluZy4KKyAgKiBAcGFyYW1baW5dICB1MzJEYXkgICAgICAgICAgVGhlIGRheSBjYWxlbmRhciBkaWdpdCBvZiBjdXJyZW50IFJUQyBzZXR0aW5nLgorICAqIEBwYXJhbVtpbl0gIHUzMkRheU9mV2VlayAgICBUaGUgRGF5IG9mIHRoZSB3ZWVrLiBbUlRDX1NVTkRBWSAvIFJUQ19NT05EQVkgLyBSVENfVFVFU0RBWSAvCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfV0VETkVTREFZIC8gUlRDX1RIVVJTREFZIC8gUlRDX0ZSSURBWSAvCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfU0FUVVJEQVldCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHVwZGF0ZSBjdXJyZW50IGRhdGUgdG8gUlRDLgorICAqLwordm9pZCBSVENfU2V0RGF0ZSh1aW50MzJfdCB1MzJZZWFyLCB1aW50MzJfdCB1MzJNb250aCwgdWludDMyX3QgdTMyRGF5LCB1aW50MzJfdCB1MzJEYXlPZldlZWspCit7CisgICAgdWludDMyX3QgdTMyUmVnQ0FMOworCisgICAgdTMyUmVnQ0FMICA9ICgodTMyWWVhciAtICh1aW50MzJfdClSVENfWUVBUjIwMDApIC8gMTBVTCkgPDwgMjA7CisgICAgdTMyUmVnQ0FMIHw9ICgoKHUzMlllYXIgLSAodWludDMyX3QpUlRDX1lFQVIyMDAwKSAlIDEwVUwpIDw8IDE2KTsKKyAgICB1MzJSZWdDQUwgfD0gKCh1MzJNb250aCAvIDEwVUwpIDw8IDEyKTsKKyAgICB1MzJSZWdDQUwgfD0gKCh1MzJNb250aCAlIDEwVUwpIDw8IDgpOworICAgIHUzMlJlZ0NBTCB8PSAoKHUzMkRheSAgIC8gMTBVTCkgPDwgNCk7CisgICAgdTMyUmVnQ0FMIHw9ICh1MzJEYXkgICAlIDEwVUwpOworCisgICAgLyogU2V0IERheSBvZiB0aGUgV2VlayAqLworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgUlRDLT5XRUVLREFZID0gdTMyRGF5T2ZXZWVrICYgUlRDX1dFRUtEQVlfV0VFS0RBWV9Nc2s7CisKKyAgICAvKiBTZXQgUlRDIENhbGVuZGVyIExvYWRpbmcgKi8KKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIFJUQy0+Q0FMID0gKHVpbnQzMl90KXUzMlJlZ0NBTDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgVXBkYXRlIFJUQyBDdXJyZW50IFRpbWUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMkhvdXIgICAgICAgICBUaGUgaG91ciB0aW1lIGRpZ2l0IG9mIGN1cnJlbnQgUlRDIHNldHRpbmcuCisgICogQHBhcmFtW2luXSAgdTMyTWludXRlICAgICAgIFRoZSBtaW51dGUgdGltZSBkaWdpdCBvZiBjdXJyZW50IFJUQyBzZXR0aW5nLgorICAqIEBwYXJhbVtpbl0gIHUzMlNlY29uZCAgICAgICBUaGUgc2Vjb25kIHRpbWUgZGlnaXQgb2YgY3VycmVudCBSVEMgc2V0dGluZy4KKyAgKiBAcGFyYW1baW5dICB1MzJUaW1lTW9kZSAgICAgVGhlIDI0LUhvdXIgLyAxMi1Ib3VyIFRpbWUgU2NhbGUgU2VsZWN0aW9uLiBbUlRDX0NMT0NLXzEyIC8gUlRDX0NMT0NLXzI0XQorICAqIEBwYXJhbVtpbl0gIHUzMkFtUG0gICAgICAgICAxMi1ob3VyIHRpbWUgc2NhbGUgd2l0aCBBTSBhbmQgUE0gaW5kaWNhdGlvbi4gT25seSBUaW1lIFNjYWxlIHNlbGVjdCAxMi1ob3VyIHVzZWQuIFtSVENfQU0gLyBSVENfUE1dCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHVwZGF0ZSBjdXJyZW50IHRpbWUgdG8gUlRDLgorICAqLwordm9pZCBSVENfU2V0VGltZSh1aW50MzJfdCB1MzJIb3VyLCB1aW50MzJfdCB1MzJNaW51dGUsIHVpbnQzMl90IHUzMlNlY29uZCwgdWludDMyX3QgdTMyVGltZU1vZGUsIHVpbnQzMl90IHUzMkFtUG0pCit7CisgICAgdWludDMyX3QgdTMyUmVnVElNRTsKKworICAgIC8qIEltcG9ydGFudCwgcmFuZ2Ugb2YgMTItaG91ciBQTSBtb2RlIGlzIDIxIHVwIHRvIDMyICovCisgICAgaWYoKHUzMlRpbWVNb2RlID09ICh1aW50MzJfdClSVENfQ0xPQ0tfMTIpICYmICh1MzJBbVBtID09ICh1aW50MzJfdClSVENfUE0pKQorICAgIHsKKyAgICAgICAgdTMySG91ciArPSAyMFVMOworICAgIH0KKworICAgIHUzMlJlZ1RJTUUgID0gKCh1MzJIb3VyICAgLyAxMFVMKSA8PCAyMCk7CisgICAgdTMyUmVnVElNRSB8PSAoKHUzMkhvdXIgICAlIDEwVUwpIDw8IDE2KTsKKyAgICB1MzJSZWdUSU1FIHw9ICgodTMyTWludXRlIC8gMTBVTCkgPDwgMTIpOworICAgIHUzMlJlZ1RJTUUgfD0gKCh1MzJNaW51dGUgJSAxMFVMKSA8PCA4KTsKKyAgICB1MzJSZWdUSU1FIHw9ICgodTMyU2Vjb25kIC8gMTBVTCkgPDwgNCk7CisgICAgdTMyUmVnVElNRSB8PSAodTMyU2Vjb25kICUgMTBVTCk7CisKKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAvKiBTZXQgUlRDIDI0LzEyIGhvdXIgc2V0dGluZyBhbmQgRGF5IG9mIHRoZSBXZWVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIGlmKHUzMlRpbWVNb2RlID09ICh1aW50MzJfdClSVENfQ0xPQ0tfMTIpCisgICAgeworICAgICAgICBSVEMtPkNMS0ZNVCAmPSB+UlRDX0NMS0ZNVF8yNEhFTl9Nc2s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFJUQy0+Q0xLRk1UIHw9IFJUQ19DTEtGTVRfMjRIRU5fTXNrOworICAgIH0KKworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgUlRDLT5USU1FID0gKHVpbnQzMl90KXUzMlJlZ1RJTUU7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFVwZGF0ZSBSVEMgQWxhcm0gRGF0ZQorICAqCisgICogQHBhcmFtW2luXSAgdTMyWWVhciAgICAgICAgIFRoZSB5ZWFyIGNhbGVuZGFyIGRpZ2l0IG9mIFJUQyBhbGFybSBzZXR0aW5nLgorICAqIEBwYXJhbVtpbl0gIHUzMk1vbnRoICAgICAgICBUaGUgbW9udGggY2FsZW5kYXIgZGlnaXQgb2YgUlRDIGFsYXJtIHNldHRpbmcuCisgICogQHBhcmFtW2luXSAgdTMyRGF5ICAgICAgICAgIFRoZSBkYXkgY2FsZW5kYXIgZGlnaXQgb2YgUlRDIGFsYXJtIHNldHRpbmcuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHVwZGF0ZSBhbGFybSBkYXRlIHNldHRpbmcgdG8gUlRDLgorICAqLwordm9pZCBSVENfU2V0QWxhcm1EYXRlKHVpbnQzMl90IHUzMlllYXIsIHVpbnQzMl90IHUzMk1vbnRoLCB1aW50MzJfdCB1MzJEYXkpCit7CisgICAgdWludDMyX3QgdTMyUmVnQ0FMTTsKKworICAgIHUzMlJlZ0NBTE0gID0gKCh1MzJZZWFyIC0gKHVpbnQzMl90KVJUQ19ZRUFSMjAwMCkgLyAxMFVMKSA8PCAyMDsKKyAgICB1MzJSZWdDQUxNIHw9ICgoKHUzMlllYXIgLSAodWludDMyX3QpUlRDX1lFQVIyMDAwKSAlIDEwVUwpIDw8IDE2KTsKKyAgICB1MzJSZWdDQUxNIHw9ICgodTMyTW9udGggLyAxMFVMKSA8PCAxMik7CisgICAgdTMyUmVnQ0FMTSB8PSAoKHUzMk1vbnRoICUgMTBVTCkgPDwgOCk7CisgICAgdTMyUmVnQ0FMTSB8PSAoKHUzMkRheSAgIC8gMTBVTCkgPDwgNCk7CisgICAgdTMyUmVnQ0FMTSB8PSAodTMyRGF5ICAgJSAxMFVMKTsKKworICAgIC8qIFNldCBSVEMgQWxhcm0gRGF0ZSAqLworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgUlRDLT5DQUxNID0gKHVpbnQzMl90KXUzMlJlZ0NBTE07Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFVwZGF0ZSBSVEMgQWxhcm0gVGltZQorICAqCisgICogQHBhcmFtW2luXSAgdTMySG91ciAgICAgICAgIFRoZSBob3VyIHRpbWUgZGlnaXQgb2YgUlRDIGFsYXJtIHNldHRpbmcuCisgICogQHBhcmFtW2luXSAgdTMyTWludXRlICAgICAgIFRoZSBtaW51dGUgdGltZSBkaWdpdCBvZiBSVEMgYWxhcm0gc2V0dGluZy4KKyAgKiBAcGFyYW1baW5dICB1MzJTZWNvbmQgICAgICAgVGhlIHNlY29uZCB0aW1lIGRpZ2l0IG9mIFJUQyBhbGFybSBzZXR0aW5nLgorICAqIEBwYXJhbVtpbl0gIHUzMlRpbWVNb2RlICAgICBUaGUgMjQtSG91ciAvIDEyLUhvdXIgVGltZSBTY2FsZSBTZWxlY3Rpb24uIFtSVENfQ0xPQ0tfMTIgLyBSVENfQ0xPQ0tfMjRdCisgICogQHBhcmFtW2luXSAgdTMyQW1QbSAgICAgICAgIDEyLWhvdXIgdGltZSBzY2FsZSB3aXRoIEFNIGFuZCBQTSBpbmRpY2F0aW9uLiBPbmx5IFRpbWUgU2NhbGUgc2VsZWN0IDEyLWhvdXIgdXNlZC4gW1JUQ19BTSAvIFJUQ19QTV0KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gdXBkYXRlIGFsYXJtIHRpbWUgc2V0dGluZyB0byBSVEMuCisgICovCit2b2lkIFJUQ19TZXRBbGFybVRpbWUodWludDMyX3QgdTMySG91ciwgdWludDMyX3QgdTMyTWludXRlLCB1aW50MzJfdCB1MzJTZWNvbmQsIHVpbnQzMl90IHUzMlRpbWVNb2RlLCB1aW50MzJfdCB1MzJBbVBtKQoreworICAgIHVpbnQzMl90IHUzMlJlZ1RBTE07CisKKyAgICAvKiBJbXBvcnRhbnQsIHJhbmdlIG9mIDEyLWhvdXIgUE0gbW9kZSBpcyAyMSB1cCB0byAzMiAqLworICAgIGlmKCh1MzJUaW1lTW9kZSA9PSAodWludDMyX3QpUlRDX0NMT0NLXzEyKSAmJiAodTMyQW1QbSA9PSAodWludDMyX3QpUlRDX1BNKSkKKyAgICB7CisgICAgICAgIHUzMkhvdXIgKz0gMjBVTDsKKyAgICB9CisKKyAgICB1MzJSZWdUQUxNICA9ICgodTMySG91ciAgIC8gMTBVTCkgPDwgMjApOworICAgIHUzMlJlZ1RBTE0gfD0gKCh1MzJIb3VyICAgJSAxMFVMKSA8PCAxNik7CisgICAgdTMyUmVnVEFMTSB8PSAoKHUzMk1pbnV0ZSAvIDEwVUwpIDw8IDEyKTsKKyAgICB1MzJSZWdUQUxNIHw9ICgodTMyTWludXRlICUgMTBVTCkgPDwgOCk7CisgICAgdTMyUmVnVEFMTSB8PSAoKHUzMlNlY29uZCAvIDEwVUwpIDw8IDQpOworICAgIHUzMlJlZ1RBTE0gfD0gKHUzMlNlY29uZCAlIDEwVUwpOworCisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLyogU2V0IFJUQyAyNC8xMiBob3VyIHNldHRpbmcgYW5kIERheSBvZiB0aGUgV2VlayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICBpZih1MzJUaW1lTW9kZSA9PSAodWludDMyX3QpUlRDX0NMT0NLXzEyKQorICAgIHsKKyAgICAgICAgUlRDLT5DTEtGTVQgJj0gflJUQ19DTEtGTVRfMjRIRU5fTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBSVEMtPkNMS0ZNVCB8PSBSVENfQ0xLRk1UXzI0SEVOX01zazsKKyAgICB9CisKKyAgICAvKiBTZXQgUlRDIEFsYXJtIFRpbWUgKi8KKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIFJUQy0+VEFMTSA9ICh1aW50MzJfdCl1MzJSZWdUQUxNOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgUlRDIEFsYXJtIERhdGUgTWFzayBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdThJc1RlbllNc2sgICAgIDE6IGVuYWJsZSAxMC1ZZWFyIGRpZ2l0IGFsYXJtIG1hc2s7IDA6IGRpc2FibGVkLgorICAqIEBwYXJhbVtpbl0gIHU4SXNZTXNrICAgICAgICAxOiBlbmFibGUgMS1ZZWFyIGRpZ2l0IGFsYXJtIG1hc2s7IDA6IGRpc2FibGVkLgorICAqIEBwYXJhbVtpbl0gIHU4SXNUZW5NTXNrICAgICAxOiBlbmFibGUgMTAtTW9uIGRpZ2l0IGFsYXJtIG1hc2s7IDA6IGRpc2FibGVkLgorICAqIEBwYXJhbVtpbl0gIHU4SXNNTXNrICAgICAgICAxOiBlbmFibGUgMS1Nb24gZGlnaXQgYWxhcm0gbWFzazsgMDogZGlzYWJsZWQuCisgICogQHBhcmFtW2luXSAgdThJc1RlbkRNc2sgICAgIDE6IGVuYWJsZSAxMC1EYXkgZGlnaXQgYWxhcm0gbWFzazsgMDogZGlzYWJsZWQuCisgICogQHBhcmFtW2luXSAgdThJc0RNc2sgICAgICAgIDE6IGVuYWJsZSAxLURheSBkaWdpdCBhbGFybSBtYXNrOyAwOiBkaXNhYmxlZC4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgUlRDIGFsYXJtIGRhdGUgbWFzayBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgUlRDX1NldEFsYXJtRGF0ZU1hc2sodWludDhfdCB1OElzVGVuWU1zaywgdWludDhfdCB1OElzWU1zaywgdWludDhfdCB1OElzVGVuTU1zaywgdWludDhfdCB1OElzTU1zaywgdWludDhfdCB1OElzVGVuRE1zaywgdWludDhfdCB1OElzRE1zaykKK3sKKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIFJUQy0+Q0FNU0sgPSAoKHVpbnQzMl90KXU4SXNUZW5ZTXNrIDw8IFJUQ19DQU1TS19NVEVOWUVBUl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCl1OElzWU1zayAgICA8PCBSVENfQ0FNU0tfTVlFQVJfUG9zKSB8CisgICAgICAgICAgICAgICAgICgodWludDMyX3QpdThJc1Rlbk1Nc2sgPDwgUlRDX0NBTVNLX01URU5NT05fUG9zKSB8CisgICAgICAgICAgICAgICAgICgodWludDMyX3QpdThJc01Nc2sgICAgPDwgUlRDX0NBTVNLX01NT05fUG9zKSB8CisgICAgICAgICAgICAgICAgICgodWludDMyX3QpdThJc1RlbkRNc2sgPDwgUlRDX0NBTVNLX01URU5EQVlfUG9zKSB8CisgICAgICAgICAgICAgICAgICgodWludDMyX3QpdThJc0RNc2sgICAgPDwgUlRDX0NBTVNLX01EQVlfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFJUQyBBbGFybSBUaW1lIE1hc2sgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHU4SXNUZW5ITXNrICAgICAxOiBlbmFibGUgMTAtSG91ciBkaWdpdCBhbGFybSBtYXNrOyAwOiBkaXNhYmxlZC4KKyAgKiBAcGFyYW1baW5dICB1OElzSE1zayAgICAgICAgMTogZW5hYmxlIDEtSG91ciBkaWdpdCBhbGFybSBtYXNrOyAwOiBkaXNhYmxlZC4KKyAgKiBAcGFyYW1baW5dICB1OElzVGVuTU1zayAgICAgMTogZW5hYmxlIDEwLU1pbiBkaWdpdCBhbGFybSBtYXNrOyAwOiBkaXNhYmxlZC4KKyAgKiBAcGFyYW1baW5dICB1OElzTU1zayAgICAgICAgMTogZW5hYmxlIDEtTWluIGRpZ2l0IGFsYXJtIG1hc2s7IDA6IGRpc2FibGVkLgorICAqIEBwYXJhbVtpbl0gIHU4SXNUZW5TTXNrICAgICAxOiBlbmFibGUgMTAtU2VjIGRpZ2l0IGFsYXJtIG1hc2s7IDA6IGRpc2FibGVkLgorICAqIEBwYXJhbVtpbl0gIHU4SXNTTXNrICAgICAgICAxOiBlbmFibGUgMS1TZWMgZGlnaXQgYWxhcm0gbWFzazsgMDogZGlzYWJsZWQuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGVuYWJsZSBvciBkaXNhYmxlIFJUQyBhbGFybSB0aW1lIG1hc2sgZnVuY3Rpb24uCisgICovCit2b2lkIFJUQ19TZXRBbGFybVRpbWVNYXNrKHVpbnQ4X3QgdThJc1RlbkhNc2ssIHVpbnQ4X3QgdThJc0hNc2ssIHVpbnQ4X3QgdThJc1Rlbk1Nc2ssIHVpbnQ4X3QgdThJc01Nc2ssIHVpbnQ4X3QgdThJc1RlblNNc2ssIHVpbnQ4X3QgdThJc1NNc2spCit7CisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICBSVEMtPlRBTVNLID0gKCh1aW50MzJfdCl1OElzVGVuSE1zayA8PCBSVENfVEFNU0tfTVRFTkhSX1BvcykgfAorICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KXU4SXNITXNrICAgIDw8IFJUQ19UQU1TS19NSFJfUG9zKSB8CisgICAgICAgICAgICAgICAgICgodWludDMyX3QpdThJc1Rlbk1Nc2sgPDwgUlRDX1RBTVNLX01URU5NSU5fUG9zKSB8CisgICAgICAgICAgICAgICAgICgodWludDMyX3QpdThJc01Nc2sgICAgPDwgUlRDX1RBTVNLX01NSU5fUG9zKSB8CisgICAgICAgICAgICAgICAgICgodWludDMyX3QpdThJc1RlblNNc2sgPDwgUlRDX1RBTVNLX01URU5TRUNfUG9zKSB8CisgICAgICAgICAgICAgICAgICgodWludDMyX3QpdThJc1NNc2sgICAgPDwgUlRDX1RBTVNLX01TRUNfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IERheSBvZiB0aGUgV2VlaworICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHZhbCAgICAgMCAgIFN1bmRheQorICAqIEByZXR2YWwgICAgIDEgICBNb25kYXkKKyAgKiBAcmV0dmFsICAgICAyICAgVHVlc2RheQorICAqIEByZXR2YWwgICAgIDMgICBXZWRuZXNkYXkKKyAgKiBAcmV0dmFsICAgICA0ICAgVGh1cnNkYXkKKyAgKiBAcmV0dmFsICAgICA1ICAgRnJpZGF5CisgICogQHJldHZhbCAgICAgNiAgIFNhdHVyZGF5CisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGdldCBkYXkgb2YgdGhlIHdlZWsgb2YgY3VycmVudCBSVEMgZGF0ZS4KKyAgKi8KK3VpbnQzMl90IFJUQ19HZXREYXlPZldlZWsodm9pZCkKK3sKKyAgICByZXR1cm4gKFJUQy0+V0VFS0RBWSAmIFJUQ19XRUVLREFZX1dFRUtEQVlfTXNrKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFJUQyBUaWNrIFBlcmlvZCBUaW1lCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJUaWNrU2VsZWN0aW9uICAgIEl0IGlzIHVzZWQgdG8gc2V0IHRoZSBSVEMgdGljayBwZXJpb2QgdGltZSBmb3IgUGVyaW9kaWMgVGltZSBUaWNrIHJlcXVlc3QuIFxuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb25zaXN0cyBvZjoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RJQ0tfMV9TRUMgICAgIDogVGltZSB0aWNrIGlzIDEgc2Vjb25kCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19USUNLXzFfMl9TRUMgICA6IFRpbWUgdGljayBpcyAxLzIgc2Vjb25kCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19USUNLXzFfNF9TRUMgICA6IFRpbWUgdGljayBpcyAxLzQgc2Vjb25kCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19USUNLXzFfOF9TRUMgICA6IFRpbWUgdGljayBpcyAxLzggc2Vjb25kCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19USUNLXzFfMTZfU0VDICA6IFRpbWUgdGljayBpcyAxLzE2IHNlY29uZAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfVElDS18xXzMyX1NFQyAgOiBUaW1lIHRpY2sgaXMgMS8zMiBzZWNvbmQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RJQ0tfMV82NF9TRUMgIDogVGltZSB0aWNrIGlzIDEvNjQgc2Vjb25kCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19USUNLXzFfMTI4X1NFQyA6IFRpbWUgdGljayBpcyAxLzEyOCBzZWNvbmQKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gc2V0IFJUQyB0aWNrIHBlcmlvZCB0aW1lIGZvciBlYWNoIHRpY2sgaW50ZXJydXB0LgorICAqLwordm9pZCBSVENfU2V0VGlja1BlcmlvZCh1aW50MzJfdCB1MzJUaWNrU2VsZWN0aW9uKQoreworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisKKyAgICBSVEMtPlRJQ0sgPSAoUlRDLT5USUNLICYgflJUQ19USUNLX1RJQ0tfTXNrKSB8IHUzMlRpY2tTZWxlY3Rpb247Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBSVEMgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJJbnRGbGFnTWFzayAgICAgIFNwZWNpZnkgdGhlIGludGVycnVwdCBzb3VyY2UuIEl0IGNvbnNpc3RzIG9mOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fQUxNSUVOX01zayAgIDogQWxhcm0gaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9USUNLSUVOX01zayAgOiBUaWNrIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fVEFNUDBJRU5fTXNrIDogVGFtcGVyIDAgUGluIEV2ZW50IERldGVjdGlvbiBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX0lOVEVOX1RBTVAxSUVOX01zayA6IFRhbXBlciAxIG9yIFBhaXIgMCBQaW4gRXZlbnQgRGV0ZWN0aW9uIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fVEFNUDJJRU5fTXNrIDogVGFtcGVyIDIgUGluIEV2ZW50IERldGVjdGlvbiBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX0lOVEVOX1RBTVAzSUVOX01zayA6IFRhbXBlciAzIG9yIFBhaXIgMSBQaW4gRXZlbnQgRGV0ZWN0aW9uIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fVEFNUDRJRU5fTXNrIDogVGFtcGVyIDQgUGluIEV2ZW50IERldGVjdGlvbiBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX0lOVEVOX1RBTVA1SUVOX01zayA6IFRhbXBlciA1IG9yIFBhaXIgMiBQaW4gRXZlbnQgRGV0ZWN0aW9uIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fQ0xLRklFTl9Nc2sgIDogTFhUIENsb2NrIEZyZXF1ZW5jeSBNb25pdG9yIEZhaWwgaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9DTEtTUElFTl9Nc2sgOiBMWFQgQ2xvY2sgRnJlcXVlbmN5IE1vbml0b3IgU3RvcCBpbnRlcnJ1cHQKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBzcGVjaWZ5IFJUQyBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICovCit2b2lkIFJUQ19FbmFibGVJbnQodWludDMyX3QgdTMySW50RmxhZ01hc2spCit7CisgICAgUlRDLT5JTlRFTiB8PSB1MzJJbnRGbGFnTWFzazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBSVEMgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJJbnRGbGFnTWFzayAgICAgIFNwZWNpZnkgdGhlIGludGVycnVwdCBzb3VyY2UuIEl0IGNvbnNpc3RzIG9mOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fQUxNSUVOX01zayAgIDogQWxhcm0gaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9USUNLSUVOX01zayAgOiBUaWNrIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fVEFNUDBJRU5fTXNrIDogVGFtcGVyIDAgUGluIEV2ZW50IERldGVjdGlvbiBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX0lOVEVOX1RBTVAxSUVOX01zayA6IFRhbXBlciAxIG9yIFBhaXIgMCBQaW4gRXZlbnQgRGV0ZWN0aW9uIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fVEFNUDJJRU5fTXNrIDogVGFtcGVyIDIgUGluIEV2ZW50IERldGVjdGlvbiBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX0lOVEVOX1RBTVAzSUVOX01zayA6IFRhbXBlciAzIG9yIFBhaXIgMSBQaW4gRXZlbnQgRGV0ZWN0aW9uIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fVEFNUDRJRU5fTXNrIDogVGFtcGVyIDQgUGluIEV2ZW50IERldGVjdGlvbiBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX0lOVEVOX1RBTVA1SUVOX01zayA6IFRhbXBlciA1IG9yIFBhaXIgMiBQaW4gRXZlbnQgRGV0ZWN0aW9uIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fQ0xLRklFTl9Nc2sgIDogTFhUIENsb2NrIEZyZXF1ZW5jeSBNb25pdG9yIEZhaWwgaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9DTEtTUElFTl9Nc2sgOiBMWFQgQ2xvY2sgRnJlcXVlbmN5IE1vbml0b3IgU3RvcCBpbnRlcnJ1cHQKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgc3BlY2lmeSBSVEMgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqLwordm9pZCBSVENfRGlzYWJsZUludCh1aW50MzJfdCB1MzJJbnRGbGFnTWFzaykKK3sKKyAgICBSVEMtPklOVEVOICAmPSB+dTMySW50RmxhZ01hc2s7CisgICAgUlRDLT5JTlRTVFMgPSB1MzJJbnRGbGFnTWFzazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFNwYXJlIFJlZ2lzdGVycyBBY2Nlc3MKKyAgKgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBzcGFyZSByZWdpc3RlcnMgMH4xOSBjYW4gYmUgYWNjZXNzZWQuCisgICovCit2b2lkIFJUQ19FbmFibGVTcGFyZUFjY2Vzcyh2b2lkKQoreworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisKKyAgICBSVEMtPlNQUkNUTCB8PSBSVENfU1BSQ1RMX1NQUlJXRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFNwYXJlIFJlZ2lzdGVyCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIHNwYXJlIHJlZ2lzdGVyIDB+MTkgY2Fubm90IGJlIGFjY2Vzc2VkLgorICAqLwordm9pZCBSVENfRGlzYWJsZVNwYXJlUmVnaXN0ZXIodm9pZCkKK3sKKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworCisgICAgUlRDLT5TUFJDVEwgJj0gflJUQ19TUFJDVExfU1BSUldFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFN0YXRpYyBUYW1wZXIgRGV0ZWN0CisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJUYW1wZXJTZWxlY3QgICAgIFRhbXBlciBwaW4gc2VsZWN0LiBQb3NzaWJsZSBvcHRpb25zIGFyZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVI1X1NFTEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVI0X1NFTEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVIzX1NFTEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVIyX1NFTEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVIxX1NFTEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVIwX1NFTEVDVAorICAqCisgICogQHBhcmFtW2luXSAgdTMyRGV0ZWNMZXZlbCAgICAgICBUYW1wZXIgcGluIGRldGVjdGlvbiBsZXZlbCBzZWxlY3QuIFBvc3NpYmxlIG9wdGlvbnMgYXJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUl9ISUdIX0xFVkVMX0RFVEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVJfTE9XX0xFVkVMX0RFVEVDVAorICAqCisgICogQHBhcmFtW2luXSAgdTMyRGVib3VuY2VFbiAgICAgICBUYW1wZXIgcGluIGRlLWJvdW5jZSBlbmFibGUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfVEFNUEVSX0RFQk9VTkNFX0VOQUJMRQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVJfREVCT1VOQ0VfRElTQUJMRQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBlbmFibGUgdGhlIHRhbXBlciBwaW4gZGV0ZWN0IGZ1bmN0aW9uIHdpdGggc3BlY2lmeSB0cmlnZ2VyIGNvbmRpdGlvbi4KKyAgKiAgICAgICAgICAgICBVc2VyIG5lZWQgZGlzYWJsZSBkeW5hbWljIHRhbXBlciBmdW5jdGlvbiBiZWZvcmUgdXNlIHRoaXMgQVBJLgorICAqLwordm9pZCBSVENfU3RhdGljVGFtcGVyRW5hYmxlKHVpbnQzMl90IHUzMlRhbXBlclNlbGVjdCwgdWludDMyX3QgdTMyRGV0ZWNMZXZlbCwgdWludDMyX3QgdTMyRGVib3VuY2VFbikKK3sKKyAgICB1aW50MzJfdCBpOworICAgIHVpbnQzMl90IHUzMlJlZzsKKyAgICB1aW50MzJfdCB1MzJUbXBSZWc7CisKKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIHUzMlJlZyA9IFJUQy0+VEFNUENUTDsKKworICAgIHUzMlRtcFJlZyA9IChSVENfVEFNUENUTF9UQU1QMEVOX01zayB8ICh1MzJEZXRlY0xldmVsIDw8IFJUQ19UQU1QQ1RMX1RBTVAwTFZfUG9zKSB8CisgICAgICAgICAgICAgICAgICh1MzJEZWJvdW5jZUVuIDw8IFJUQ19UQU1QQ1RMX1RBTVAwREJFTl9Qb3MpKTsKKworICAgIGZvcihpID0gMFVMOyBpIDwgKHVpbnQzMl90KU1BWF9UQU1QRVJfUElOX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYodTMyVGFtcGVyU2VsZWN0ICYgKDB4MVVMIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJSZWcgJj0gfigoUlRDX1RBTVBDVExfVEFNUDBFTl9Nc2sgfCBSVENfVEFNUENUTF9UQU1QMExWX01zayB8IFJUQ19UQU1QQ1RMX1RBTVAwREJFTl9Nc2spIDw8IChpICogNFVMKSk7CisgICAgICAgICAgICB1MzJSZWcgfD0gKHUzMlRtcFJlZyA8PCAoaSAqIDRVTCkpOworICAgICAgICB9CisgICAgfQorCisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICBSVEMtPlRBTVBDVEwgPSB1MzJSZWc7CisKK30KKworLyoqCisgICogQGJyaWVmICAgICAgU3RhdGljIFRhbXBlciBEaXNhYmxlCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJUYW1wZXJTZWxlY3QgICAgIFRhbXBlciBwaW4gc2VsZWN0LiBQb3NzaWJsZSBvcHRpb25zIGFyZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVI1X1NFTEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVI0X1NFTEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVIzX1NFTEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVIyX1NFTEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVIxX1NFTEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVIwX1NFTEVDVAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBkaXNhYmxlIHRoZSBzdGF0aWMgdGFtcGVyIHBpbiBkZXRlY3QuCisgICovCit2b2lkIFJUQ19TdGF0aWNUYW1wZXJEaXNhYmxlKHVpbnQzMl90IHUzMlRhbXBlclNlbGVjdCkKK3sKKyAgICB1aW50MzJfdCBpOworICAgIHVpbnQzMl90IHUzMlJlZzsKKyAgICB1aW50MzJfdCB1MzJUbXBSZWc7CisKKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIHUzMlJlZyA9IFJUQy0+VEFNUENUTDsKKworICAgIHUzMlRtcFJlZyA9IChSVENfVEFNUENUTF9UQU1QMEVOX01zayk7CisKKyAgICBmb3IoaSA9IDBVTDsgaSA8ICh1aW50MzJfdClNQVhfVEFNUEVSX1BJTl9OVU07IGkrKykKKyAgICB7CisgICAgICAgIGlmKHUzMlRhbXBlclNlbGVjdCAmICgweDFVTCA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyUmVnICY9IH4odTMyVG1wUmVnIDw8IChpICogNFVMKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIFJUQy0+VEFNUENUTCA9IHUzMlJlZzsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRHluYW1pYyBUYW1wZXIgRGV0ZWN0CisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJQYWlyU2VsICAgICAgICAgIFRhbXBlciBwaW4gZGV0ZWN0aW9uIGVuYWJsZS4gUG9zc2libGUgb3B0aW9ucyBhcmUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfUEFJUjBfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1BBSVIxX1NFTEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19QQUlSMl9TRUxFQ1QKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMkRlYm91bmNlRW4gICAgICAgVGFtcGVyIHBpbiBkZS1ib3VuY2UgZW5hYmxlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUl9ERUJPVU5DRV9FTkFCTEUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfVEFNUEVSX0RFQk9VTkNFX0RJU0FCTEUKKyAgKgorICAqICBAcGFyYW1baW5dICB1MzJQYWlyMVNvdXJjZSAgICAgRHluYW1pYyBQYWlyIDEgSW5wdXQgU291cmNlIFNlbGVjdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDogUGFpciAxIHNvdXJjZSBzZWxlY3QgdGFtcGVyIDIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6IFBhaXIgMSBzb3VyY2Ugc2VsZWN0IHRhbXBlciAwCisgICoKKyAgKiAgQHBhcmFtW2luXSAgdTMyUGFpcjJTb3VyY2UgICAgIER5bmFtaWMgUGFpciAyIElucHV0IFNvdXJjZSBTZWxlY3QKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6IFBhaXIgMiBzb3VyY2Ugc2VsZWN0IHRhbXBlciA0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiBQYWlyIDIgc291cmNlIHNlbGVjdCB0YW1wZXIgMAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBlbmFibGUgdGhlIGR5bmFtaWMgdGFtcGVyLgorICAqLwordm9pZCBSVENfRHluYW1pY1RhbXBlckVuYWJsZSh1aW50MzJfdCB1MzJQYWlyU2VsLCB1aW50MzJfdCB1MzJEZWJvdW5jZUVuLCB1aW50MzJfdCB1MzJQYWlyMVNvdXJjZSwgdWludDMyX3QgdTMyUGFpcjJTb3VyY2UpCit7CisgICAgdWludDMyX3QgaTsKKyAgICB1aW50MzJfdCB1MzJSZWc7CisgICAgdWludDMyX3QgdTMyVG1wUmVnOworICAgIHVpbnQzMl90IHUzMlRhbXBlcjJEZWJvdW5jZSwgdTMyVGFtcGVyNERlYm91bmNlOworCisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICB1MzJSZWcgPSBSVEMtPlRBTVBDVEw7CisgICAgdTMyUmVnICY9IH4oUlRDX1RBTVBDVExfVEFNUDBFTl9Nc2sgfCBSVENfVEFNUENUTF9UQU1QMUVOX01zayB8IFJUQ19UQU1QQ1RMX1RBTVAyRU5fTXNrIHwKKyAgICAgICAgICAgICAgICBSVENfVEFNUENUTF9UQU1QM0VOX01zayB8IFJUQ19UQU1QQ1RMX1RBTVA0RU5fTXNrIHwgUlRDX1RBTVBDVExfVEFNUDVFTl9Nc2spOworCisgICAgdTMyVGFtcGVyMkRlYm91bmNlID0gdTMyUmVnICYgUlRDX1RBTVBDVExfVEFNUDJEQkVOX01zazsKKyAgICB1MzJUYW1wZXI0RGVib3VuY2UgPSB1MzJSZWcgJiBSVENfVEFNUENUTF9UQU1QNERCRU5fTXNrOworCisgICAgdTMyUmVnICY9IH4oUlRDX1RBTVBDVExfVEFNUDBFTl9Nc2sgfCBSVENfVEFNUENUTF9UQU1QMUVOX01zayB8IFJUQ19UQU1QQ1RMX1RBTVAyRU5fTXNrIHwKKyAgICAgICAgICAgICAgICBSVENfVEFNUENUTF9UQU1QM0VOX01zayB8IFJUQ19UQU1QQ1RMX1RBTVA0RU5fTXNrIHwgUlRDX1RBTVBDVExfVEFNUDVFTl9Nc2spOworICAgIHUzMlJlZyAmPSB+KFJUQ19UQU1QQ1RMX0RZTjFJU1NfTXNrIHwgUlRDX1RBTVBDVExfRFlOMklTU19Nc2spOworICAgIHUzMlJlZyB8PSAoKHUzMlBhaXIxU291cmNlICYgMHgxVUwpIDw8IFJUQ19UQU1QQ1RMX0RZTjFJU1NfUG9zKSB8ICgodTMyUGFpcjJTb3VyY2UgJiAweDFVTCkgPDwgUlRDX1RBTVBDVExfRFlOMklTU19Qb3MpOworCisgICAgaWYodTMyRGVib3VuY2VFbikKKyAgICB7CisgICAgICAgIHUzMlRtcFJlZyA9IChSVENfVEFNUENUTF9UQU1QMEVOX01zayB8IFJUQ19UQU1QQ1RMX1RBTVAxRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFJUQ19UQU1QQ1RMX1RBTVAwREJFTl9Nc2sgfCBSVENfVEFNUENUTF9UQU1QMURCRU5fTXNrIHwgUlRDX1RBTVBDVExfRFlOUFIwRU5fTXNrKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyVG1wUmVnID0gKFJUQ19UQU1QQ1RMX1RBTVAwRU5fTXNrIHwgUlRDX1RBTVBDVExfVEFNUDFFTl9Nc2sgfCBSVENfVEFNUENUTF9EWU5QUjBFTl9Nc2spOworICAgIH0KKworICAgIGZvcihpID0gMFVMOyBpIDwgKHVpbnQzMl90KU1BWF9QQUlSX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYodTMyUGFpclNlbCAmICgweDFVTCA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyUmVnICY9IH4oKFJUQ19UQU1QQ1RMX1RBTVAwREJFTl9Nc2sgfCBSVENfVEFNUENUTF9UQU1QMURCRU5fTXNrKSA8PCAoaSAqIDhVTCkpOworICAgICAgICAgICAgdTMyUmVnIHw9ICh1MzJUbXBSZWcgPDwgKGkgKiA4VUwpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCh1MzJQYWlyMVNvdXJjZSkgJiYgKHUzMlBhaXJTZWwgJiAodWludDMyX3QpUlRDX1BBSVIxX1NFTEVDVCkpCisgICAgeworICAgICAgICB1MzJSZWcgJj0gflJUQ19UQU1QQ1RMX1RBTVAyRU5fTXNrOworICAgICAgICB1MzJSZWcgfD0gdTMyVGFtcGVyMkRlYm91bmNlOworICAgIH0KKworICAgIGlmKCh1MzJQYWlyMlNvdXJjZSkgJiYgKHUzMlBhaXJTZWwgJiAodWludDMyX3QpUlRDX1BBSVIyX1NFTEVDVCkpCisgICAgeworICAgICAgICB1MzJSZWcgJj0gflJUQ19UQU1QQ1RMX1RBTVA0RU5fTXNrOworICAgICAgICB1MzJSZWcgfD0gdTMyVGFtcGVyNERlYm91bmNlOworICAgIH0KKworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgUlRDLT5UQU1QQ1RMID0gdTMyUmVnOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEeW5hbWljIFRhbXBlciBEaXNhYmxlCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJQYWlyU2VsICAgICAgICAgIFRhbXBlciBwaW4gZGV0ZWN0aW9uIGVuYWJsZS4gUG9zc2libGUgb3B0aW9ucyBhcmUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfUEFJUjBfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1BBSVIxX1NFTEVDVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19QQUlSMl9TRUxFQ1QKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgZHluYW1pYyB0YW1wZXIuCisgICovCit2b2lkIFJUQ19EeW5hbWljVGFtcGVyRGlzYWJsZSh1aW50MzJfdCB1MzJQYWlyU2VsKQoreworICAgIHVpbnQzMl90IGk7CisgICAgdWludDMyX3QgdTMyUmVnOworICAgIHVpbnQzMl90IHUzMlRtcFJlZzsKKyAgICB1aW50MzJfdCB1MzJUYW1wZXIyRW4gPSAwVUwsIHUzMlRhbXBlcjRFbiA9IDBVTDsKKworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgdTMyUmVnID0gUlRDLT5UQU1QQ1RMOworCisgICAgaWYoKHUzMlJlZyAmICh1aW50MzJfdClSVENfVEFNUENUTF9EWU4xSVNTX01zaykgJiYgKHUzMlBhaXJTZWwgJiAodWludDMyX3QpUlRDX1BBSVIxX1NFTEVDVCkpCisgICAgeworICAgICAgICB1MzJUYW1wZXIyRW4gPSB1MzJSZWcgJiBSVENfVEFNUENUTF9UQU1QMkVOX01zazsKKyAgICB9CisKKyAgICBpZigodTMyUmVnICYgKHVpbnQzMl90KVJUQ19UQU1QQ1RMX0RZTjJJU1NfTXNrKSAmJiAodTMyUGFpclNlbCAmICh1aW50MzJfdClSVENfUEFJUjJfU0VMRUNUKSkKKyAgICB7CisgICAgICAgIHUzMlRhbXBlcjRFbiA9IHUzMlJlZyAmIFJUQ19UQU1QQ1RMX1RBTVA0RU5fTXNrOworICAgIH0KKworICAgIHUzMlRtcFJlZyA9IChSVENfVEFNUENUTF9UQU1QMEVOX01zayB8IFJUQ19UQU1QQ1RMX1RBTVAxRU5fTXNrIHwgUlRDX1RBTVBDVExfRFlOUFIwRU5fTXNrKTsKKworICAgIGZvcihpID0gMFVMOyBpIDwgKHVpbnQzMl90KU1BWF9QQUlSX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYodTMyUGFpclNlbCAmICgweDFVTCA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyUmVnICY9IH4odTMyVG1wUmVnIDw8ICgoaSAqIDhVTCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHUzMlJlZyB8PSAodTMyVGFtcGVyMkVuIHwgdTMyVGFtcGVyNEVuKTsKKworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgUlRDLT5UQU1QQ1RMID0gdTMyUmVnOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDb25maWcgZHluYW1pYyB0YW1wZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5nZVJhdGUgICAgICAgVGhlIGR5bmFtaWMgdGFtcGVyIG91dHB1dCBjaGFuZ2UgcmF0ZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ18yUE9XMTBfQ0xLCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDXzJQT1cxMV9DTEsKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfMlBPVzEyX0NMSworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ18yUE9XMTNfQ0xLCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDXzJQT1cxNF9DTEsKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfMlBPVzE1X0NMSworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ18yUE9XMTZfQ0xLCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDXzJQT1cxN19DTEsKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlNlZWRSZWxvYWQgICAgICAgUmVsb2FkIG5ldyBzZWVkIG9yIG5vdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDogbm90IHJlbG9hZCBuZXcgc2VlZAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogcmVsb2FkIG5ldyBzZWVkCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJSZWZQYXR0ZXJuICAgICAgIFJlZmVyZW5jZSBwYXR0ZXJuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUkVGX1JBTkRPTV9QQVRURVJOCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUkVGX1BSRVZJT1VTX1BBVFRFUk4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSRUZfU0VFRAorICAqCisgICogQHBhcmFtW2luXSAgdTMyU2VlZCAgICAgICAgICAgICBTZWVkIFZhbHVlICgweDAgfiAweEZGRkZGRkZGKQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBjb25maWcgZHluYW1pYyB0YW1wZXIgc2V0dGluZy4KKyAgKi8KK3ZvaWQgUlRDX0R5bmFtaWNUYW1wZXJDb25maWcodWludDMyX3QgdTMyQ2hhbmdlUmF0ZSwgdWludDMyX3QgdTMyU2VlZFJlbG9hZCwgdWludDMyX3QgdTMyUmVmUGF0dGVybiwgdWludDMyX3QgdTMyU2VlZCkKK3sKKyAgICB1aW50MzJfdCB1MzJSZWc7CisKKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIHUzMlJlZyA9IFJUQy0+VEFNUENUTDsKKworICAgIHUzMlJlZyAmPSB+KFJUQ19UQU1QQ1RMX0RZTlNSQ19Nc2sgfCBSVENfVEFNUENUTF9TRUVEUkxEX01zayB8IFJUQ19UQU1QQ1RMX0RZTlJBVEVfTXNrKTsKKworICAgIHUzMlJlZyB8PSAodTMyQ2hhbmdlUmF0ZSkgfCAoKHUzMlNlZWRSZWxvYWQgJiAweDFVTCkgPDwgUlRDX1RBTVBDVExfU0VFRFJMRF9Qb3MpIHwKKyAgICAgICAgICAgICAgKCh1MzJSZWZQYXR0ZXJuICYgMHgzVUwpIDw8IFJUQ19UQU1QQ1RMX0RZTlNSQ19Qb3MpOworCisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICBSVEMtPlRBTVBTRUVEID0gdTMyU2VlZDsgLyogbmVlZCBzZXQgc2VlZCB2YWx1ZSBiZWZvcmUgcmUtbG9hZGUgc2VlZCAqLworICAgIFJUQy0+VEFNUENUTCA9IHUzMlJlZzsKK30KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBSVENfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUlRDX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9zYy5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjg1MzRkCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvc2MuYwpAQCAtMCwwICsxLDQyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHNjLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFNtYXJ0Y2FyZChTQykgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKy8qIEJlbG93IGFyZSB2YXJpYWJsZXMgdXNlZCBsb2NhbGx5IGJ5IFNDIGRyaXZlciBhbmQgZG9lcyBub3Qgd2FudCB0byBwYXJzZSBieSBkb3h5Z2VuIHVubGVzcyBISURERU5fU1lNQk9MUyBpcyBkZWZpbmVkICovCisvKiogQGNvbmQgSElEREVOX1NZTUJPTFMgKi8KK3N0YXRpYyB1aW50MzJfdCBnX3UzMkNhcmRTdGF0ZUlnbm9yZVtTQ19JTlRFUkZBQ0VfTlVNXSA9IHswVUwsIDBVTCwgMFVMfTsKKworLyoqIEBlbmRjb25kIEhJRERFTl9TWU1CT0xTICovCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU0NfRHJpdmVyIFNDIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFNDX0VYUE9SVEVEX0ZVTkNUSU9OUyBTQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIEluZGljYXRlcyBzcGVjaWZpZWQgc21hcnRjYXJkIHNsb3Qgc3RhdHVzCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBDYXJkIGluc2VydCBzdGF0dXMKKyAgKiBAcmV0dmFsICAgICBUUlVFICAgIENhcmQgaW5zZXJ0CisgICogQHJldHZhbCAgICAgRkFMU0UgICBDYXJkIHJlbW92ZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGlmIHNwZWNpZmllZCBzbWFydGNhcmQgc2xvdCBpcyBwcmVzZW50ZWQuCisgICovCit1aW50MzJfdCBTQ19Jc0NhcmRJbnNlcnRlZChTQ19UICpzYykKK3sKKyAgICB1aW50MzJfdCB1MzJSZXQ7CisKKyAgICAvKiBwdXQgY29uZGl0aW9ucyBpbnRvIHR3byB2YXJpYWJsZSB0byByZW1vdmUgSUFSIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KKyAgICB1aW50MzJfdCBjb25kMSA9ICgoc2MtPlNUQVRVUyAmIFNDX1NUQVRVU19DRFBJTlNUU19Nc2spID4+IFNDX1NUQVRVU19DRFBJTlNUU19Qb3MpOworICAgIHVpbnQzMl90IGNvbmQyID0gKChzYy0+Q1RMICYgU0NfQ1RMX0NETFZfTXNrKSA+PiBTQ19DVExfQ0RMVl9Qb3MpOworCisgICAgaWYoKChzYyA9PSBTQzApIHx8IChzYyA9PSBTQzBfTlMpKSAmJiAoZ191MzJDYXJkU3RhdGVJZ25vcmVbMF0gPT0gMVVMKSkKKyAgICB7CisgICAgICAgIHUzMlJldCA9ICh1aW50MzJfdClUUlVFOworICAgIH0KKyAgICBlbHNlIGlmKCgoc2MgPT0gU0MxKSB8fCAoc2MgPT0gU0MxX05TKSkgJiYgKGdfdTMyQ2FyZFN0YXRlSWdub3JlWzFdID09IDFVTCkpCisgICAgeworICAgICAgICB1MzJSZXQgPSAodWludDMyX3QpVFJVRTsKKyAgICB9CisgICAgZWxzZSBpZigoKHNjID09IFNDMikgfHwgKHNjID09IFNDMl9OUykpICYmIChnX3UzMkNhcmRTdGF0ZUlnbm9yZVsyXSA9PSAxVUwpKQorICAgIHsKKyAgICAgICAgdTMyUmV0ID0gKHVpbnQzMl90KVRSVUU7CisgICAgfQorICAgIGVsc2UgaWYoY29uZDEgIT0gY29uZDIpCisgICAgeworICAgICAgICB1MzJSZXQgPSAodWludDMyX3QpRkFMU0U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMlJldCA9ICh1aW50MzJfdClUUlVFOworICAgIH0KKworICAgIHJldHVybiB1MzJSZXQ7Cit9CisKKy8qCisgICogQGJyaWVmICAgICAgUmVzZXQgdGhlIFR4IGFuZCBSeCBGSUZPIG9mIHNtYXJ0Y2FyZCBtb2R1bGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gcmVzZXQgYm90aCB0cmFuc21pdCBhbmQgcmVjZWl2ZSBGSUZPIG9mIHNwZWNpZmllZCBzbWFydGNhcmQgbW9kdWxlLgorICAqLwordm9pZCBTQ19DbGVhckZJRk8oU0NfVCAqc2MpCit7CisgICAgd2hpbGUoc2MtPkFMVENUTCAmIFNDX0FMVENUTF9TWU5DX01zaykge30KKworICAgIHNjLT5BTFRDVEwgfD0gKFNDX0FMVENUTF9UWFJTVF9Nc2sgfCBTQ19BTFRDVExfUlhSU1RfTXNrKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBzcGVjaWZpZWQgc21hcnRjYXJkIG1vZHVsZQorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIHNwZWNpZmllZCBzbWFydGNhcmQgbW9kdWxlLCBhbmQgZm9yY2UgYWxsIHRyYW5zaXRpb24gdG8gSURMRSBzdGF0ZS4KKyAgKi8KK3ZvaWQgU0NfQ2xvc2UoU0NfVCAqc2MpCit7CisgICAgc2MtPklOVEVOID0gMFVMOworICAgIHdoaWxlKHNjLT5QSU5DVEwgJiBTQ19QSU5DVExfU1lOQ19Nc2spIHt9CisKKyAgICBzYy0+UElOQ1RMID0gMFVMOworICAgIHNjLT5BTFRDVEwgPSAwVUw7CisgICAgd2hpbGUoc2MtPkNUTCAmIFNDX0NUTF9TWU5DX01zaykge30KKworICAgIHNjLT5DVEwgPSAwVUw7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEluaXRpYWxpemVkIHNtYXJ0Y2FyZCBtb2R1bGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQ2FyZERldCAgQ2FyZCBkZXRlY3QgcG9sYXJpdHksIHNlbGVjdCB0aGUgU0NfQ0QgcGluIHN0YXRlIHdoaWNoIGluZGljYXRlcyBjYXJkIGFic2VudC4gQ291bGQgYmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLVxyZWYgU0NfUElOX1NUQVRFX0hJR0gKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtXHJlZiBTQ19QSU5fU1RBVEVfTE9XCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLVxyZWYgU0NfUElOX1NUQVRFX0lHTk9SRSwgbm8gY2FyZCBkZXRlY3QgcGluLCBhbHdheXMgYXNzdW1lcyBjYXJkIHByZXNlbnQuCisgICogQHBhcmFtW2luXSAgdTMyUFdSICAgICAgUG93ZXIgb2ZmIHBvbGFyaXR5LCBzZWxlY3QgdGhlIFNDX1BXUiBwaW4gc3RhdGUgd2hpY2ggY291bGQgc2V0IHNtYXJ0Y2FyZCBWQ0MgdG8gaGlnaCBsZXZlbC4gQ291bGQgYmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLVxyZWYgU0NfUElOX1NUQVRFX0hJR0gKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtXHJlZiBTQ19QSU5fU1RBVEVfTE9XCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVkIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICovCit2b2lkIFNDX09wZW4oU0NfVCAqc2MsIHVpbnQzMl90IHUzMkNhcmREZXQsIHVpbnQzMl90IHUzMlBXUikKK3sKKyAgICB1aW50MzJfdCB1MzJSZWcgPSAwVUwsIHUzMkludGY7CisKKyAgICBpZigoc2MgPT0gU0MwKSB8fCAoc2MgPT0gU0MwX05TKSkKKyAgICB7CisgICAgICAgIHUzMkludGYgPSAwVUw7CisgICAgfQorICAgIGVsc2UgaWYoKHNjID09IFNDMSkgfHwgKHNjID09IFNDMV9OUykpCisgICAgeworICAgICAgICB1MzJJbnRmID0gMVVMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJJbnRmID0gMlVMOworICAgIH0KKworICAgIGlmKHUzMkNhcmREZXQgIT0gU0NfUElOX1NUQVRFX0lHTk9SRSkKKyAgICB7CisgICAgICAgIHUzMlJlZyA9IHUzMkNhcmREZXQgPyAwVUwgOiBTQ19DVExfQ0RMVl9Nc2s7CisgICAgICAgIGdfdTMyQ2FyZFN0YXRlSWdub3JlW3UzMkludGZdID0gMFVMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBnX3UzMkNhcmRTdGF0ZUlnbm9yZVt1MzJJbnRmXSA9IDFVTDsKKyAgICB9CisgICAgc2MtPlBJTkNUTCA9IHUzMlBXUiA/IDBVTCA6IFNDX1BJTkNUTF9QV1JJTlZfTXNrOworICAgIHdoaWxlKHNjLT5DVEwgJiBTQ19DVExfU1lOQ19Nc2spIHt9CisKKyAgICBzYy0+Q1RMID0gU0NfQ1RMX1NDRU5fTXNrIHwgU0NfQ1RMX1RNUlNFTF9Nc2sgfCB1MzJSZWc7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFJlc2V0IHNwZWNpZmllZCBzbWFydGNhcmQgbW9kdWxlCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHJlc2V0IHNwZWNpZmllZCBzbWFydGNhcmQgbW9kdWxlIHRvIGl0cyBkZWZhdWx0IHN0YXRlIGZvciBhY3RpdmF0ZSBzbWFydGNhcmQuCisgICovCit2b2lkIFNDX1Jlc2V0UmVhZGVyKFNDX1QgKnNjKQoreworICAgIHVpbnQzMl90IHUzMkludGY7CisKKyAgICBpZigoc2MgPT0gU0MwKSB8fCAoc2MgPT0gU0MwX05TKSkKKyAgICB7CisgICAgICAgIHUzMkludGYgPSAwVUw7CisgICAgfQorICAgIGVsc2UgaWYoKHNjID09IFNDMSkgfHwgKHNjID09IFNDMV9OUykpCisgICAgeworICAgICAgICB1MzJJbnRmID0gMVVMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJJbnRmID0gMlVMOworICAgIH0KKworICAgIC8qIFJlc2V0IEZJRk8sIGVuYWJsZSBhdXRvIGRlLWFjdGl2YXRpb24gd2hpbGUgY2FyZCByZW1vdmFsICovCisgICAgc2MtPkFMVENUTCB8PSAoU0NfQUxUQ1RMX1RYUlNUX01zayB8IFNDX0FMVENUTF9SWFJTVF9Nc2sgfCBTQ19BTFRDVExfQURBQ0VOX01zayk7CisgICAgLyogU2V0IFJ4IHRyaWdnZXIgbGV2ZWwgdG8gMSBjaGFyYWN0ZXIsIGxvbmdlc3QgY2FyZCBkZXRlY3QgZGVib3VuY2UgcGVyaW9kLCBkaXNhYmxlIGVycm9yIHJldHJ5IChFTVYgQVRSIGRvZXMgbm90IHVzZSBlcnJvciByZXRyeSkgKi8KKyAgICB3aGlsZShzYy0+Q1RMICYgU0NfQ1RMX1NZTkNfTXNrKSB7fQorCisgICAgc2MtPkNUTCAmPSB+KFNDX0NUTF9SWFRSR0xWX01zayB8CisgICAgICAgICAgICAgICAgIFNDX0NUTF9DRERCU0VMX01zayB8CisgICAgICAgICAgICAgICAgIFNDX0NUTF9UWFJUWV9Nc2sgfAorICAgICAgICAgICAgICAgICBTQ19DVExfVFhSVFlFTl9Nc2sgfAorICAgICAgICAgICAgICAgICBTQ19DVExfUlhSVFlfTXNrIHwKKyAgICAgICAgICAgICAgICAgU0NfQ1RMX1JYUlRZRU5fTXNrKTsKKyAgICB3aGlsZShzYy0+Q1RMICYgU0NfQ1RMX1NZTkNfTXNrKSB7fQorCisgICAgLyogRW5hYmxlIGF1dG8gY29udmVudGlvbiwgYW5kIGFsbCB0aHJlZSBzbWFydGNhcmQgaW50ZXJuYWwgdGltZXJzICovCisgICAgc2MtPkNUTCB8PSBTQ19DVExfQVVUT0NFTl9Nc2sgfCBTQ19DVExfVE1SU0VMX01zazsKKyAgICAvKiBEaXNhYmxlIFJ4IHRpbWVvdXQgKi8KKyAgICBzYy0+UlhUT1VUID0gMFVMOworICAgIC8qIDM3MiBjbG9ja3MgcGVyIEVUVSBieSBkZWZhdWx0ICovCisgICAgc2MtPkVUVUNUTCA9IDM3MVVMOworCisgICAgLyogRW5hYmxlIG5lY2Vzc2FyeSBpbnRlcnJ1cHQgZm9yIHNtYXJ0Y2FyZCBvcGVyYXRpb24gKi8KKyAgICBpZihnX3UzMkNhcmRTdGF0ZUlnbm9yZVt1MzJJbnRmXSkgICAvKiBEbyBub3QgZW5hYmxlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpZiBjYXJkIHByZXNlbnQgc3RhdGUgaWdub3JlICovCisgICAgeworICAgICAgICBzYy0+SU5URU4gPSAoU0NfSU5URU5fUkRBSUVOX01zayB8CisgICAgICAgICAgICAgICAgICAgICBTQ19JTlRFTl9URVJSSUVOX01zayB8CisgICAgICAgICAgICAgICAgICAgICBTQ19JTlRFTl9UTVIwSUVOX01zayB8CisgICAgICAgICAgICAgICAgICAgICBTQ19JTlRFTl9UTVIxSUVOX01zayB8CisgICAgICAgICAgICAgICAgICAgICBTQ19JTlRFTl9UTVIySUVOX01zayB8CisgICAgICAgICAgICAgICAgICAgICBTQ19JTlRFTl9CR1RJRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFNDX0lOVEVOX0FDRVJSSUVOX01zayk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNjLT5JTlRFTiA9IChTQ19JTlRFTl9SREFJRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFNDX0lOVEVOX1RFUlJJRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFNDX0lOVEVOX1RNUjBJRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFNDX0lOVEVOX1RNUjFJRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFNDX0lOVEVOX1RNUjJJRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFNDX0lOVEVOX0JHVElFTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgU0NfSU5URU5fQUNFUlJJRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFNDX0lOVEVOX0NESUVOX01zayk7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgQmxvY2sgR3VhcmQgVGltZSAoQkdUKQorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkJHVCAgQmxvY2sgZ3VhcmQgdGltZSB1c2luZyBFVFUgYXMgdW5pdCwgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMSB+IDMyLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBibG9jayBndWFyZCB0aW1lIChCR1QpIG9mIHNwZWNpZmllZCBzbWFydGNhcmQgbW9kdWxlLgorICAqLwordm9pZCBTQ19TZXRCbG9ja0d1YXJkVGltZShTQ19UICpzYywgdWludDMyX3QgdTMyQkdUKQoreworICAgIHNjLT5DVEwgPSAoc2MtPkNUTCAmIH5TQ19DVExfQkdUX01zaykgfCAoKHUzMkJHVCAtIDFVTCkgPDwgU0NfQ1RMX0JHVF9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgQ2hhcmFjdGVyIEd1YXJkIFRpbWUgKENHVCkKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJDR1QgIENoYXJhY3RlciBndWFyZCB0aW1lIHVzaW5nIEVUVSBhcyB1bml0LCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAxMSB+IDI2Ny4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgY2hhcmFjdGVyIGd1YXJkIHRpbWUgKENHVCkgb2Ygc3BlY2lmaWVkIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICAgICAgIEJlZm9yZSB1c2luZyB0aGlzIEFQSSwgdXNlciBzaG91bGQgc2V0IHRoZSBjb3JyZWN0IHN0b3AgYml0IGxlbmd0aCBmaXJzdC4KKyAgKi8KK3ZvaWQgU0NfU2V0Q2hhckd1YXJkVGltZShTQ19UICpzYywgdWludDMyX3QgdTMyQ0dUKQoreworICAgIC8qIENHVCBpcyAiU1RBUlQgYml0IiArICI4LWJpdHMiICsgIlBhcml0eSBiaXQiICsgIlNUT1AgYml0KHMpIiArICJFR1QgY291bnRzIiAqLworICAgIHUzMkNHVCAtPSBzYy0+Q1RMICYgU0NfQ1RMX05TQl9Nc2sgPyAxMVVMIDogMTJVTDsKKyAgICBzYy0+RUdUID0gdTMyQ0dUOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTdG9wIGFsbCBzbWFydGNhcmQgdGltZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHN0b3AgdGhlIHRpbWVycyB3aXRoaW4gc3BlY2lmaWVkIHNtYXJ0Y2FyZCBtb2R1bGUsIFxiIG5vdCB0aW1lciBtb2R1bGUuCisgICovCit2b2lkIFNDX1N0b3BBbGxUaW1lcihTQ19UICpzYykKK3sKKyAgICB3aGlsZShzYy0+QUxUQ1RMICYgU0NfQUxUQ1RMX1NZTkNfTXNrKSB7fQorCisgICAgc2MtPkFMVENUTCAmPSB+KFNDX0FMVENUTF9DTlRFTjBfTXNrIHwgU0NfQUxUQ1RMX0NOVEVOMV9Nc2sgfCBTQ19BTFRDVExfQ05URU4yX01zayk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIENvbmZpZ3VyZSBhbmQgc3RhcnQgc21hcnRjYXJkIHRpbWVyCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyVGltZXJOdW0gIFRpbWVyIHRvIHN0YXJ0LiBWYWxpZCB2YWx1ZXMgYXJlIDAsIDEsIDIuCisgICogQHBhcmFtW2luXSAgdTMyTW9kZSAgICAgVGltZXIgb3BlcmF0aW5nIG1vZGUsIHZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19UTVJfTU9ERV8wCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19UTVJfTU9ERV8xCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19UTVJfTU9ERV8yCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19UTVJfTU9ERV8zCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19UTVJfTU9ERV80CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19UTVJfTU9ERV81CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19UTVJfTU9ERV82CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19UTVJfTU9ERV83CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19UTVJfTU9ERV84CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19UTVJfTU9ERV9GCisgICogQHBhcmFtW2luXSAgdTMyRVRVQ291bnQgVGltZXIgdGltZW91dCBkdXJhdGlvbiwgRVRVIGJhc2VkLiBGb3IgdGltZXIgMCwgdmFsaWQgIHJhbmdlIGFyZSBiZXR3ZWVuIDEgfiAweDEwMDAwMDAgRVRVcy4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGltZXIgMSBhbmQgdGltZXIgMiwgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMSB+IDB4MTAwIEVUVXMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBzdGFydCB0aGUgdGltZXIgd2l0aGluIHNwZWNpZmllZCBzbWFydGNhcmQgbW9kdWxlLCBcYiBub3QgdGltZXIgbW9kdWxlLgorICAgICAgICBEZXBlbmQgb24gdGhlIHRpbWVyIG9wZXJhdGluZyBtb2RlLCB0aW1lciBtYXkgbm90IHN0YXJ0IGNvdW50aW5nIGltbWVkaWF0ZWx5IGFuZCBzdGFydHMgd2hlbiBjb25kaXRpb24gbWF0Y2guCisgICovCit2b2lkIFNDX1N0YXJ0VGltZXIoU0NfVCAqc2MsIHVpbnQzMl90IHUzMlRpbWVyTnVtLCB1aW50MzJfdCB1MzJNb2RlLCB1aW50MzJfdCB1MzJFVFVDb3VudCkKK3sKKyAgICB1aW50MzJfdCB1MzJSZWcgPSB1MzJNb2RlIHwgKFNDX1RNUkNUTDBfQ05UX01zayAmICh1MzJFVFVDb3VudCAtIDFVTCkpOworICAgIHdoaWxlKHNjLT5BTFRDVEwgJiBTQ19BTFRDVExfU1lOQ19Nc2spIHt9CisKKyAgICBpZih1MzJUaW1lck51bSA9PSAwVUwpCisgICAgeworICAgICAgICB3aGlsZShzYy0+VE1SQ1RMMCAmIFNDX1RNUkNUTDBfU1lOQ19Nc2spIHt9CisgICAgICAgIHNjLT5UTVJDVEwwID0gdTMyUmVnOworICAgICAgICBzYy0+QUxUQ1RMIHw9IFNDX0FMVENUTF9DTlRFTjBfTXNrOworICAgIH0KKyAgICBlbHNlIGlmKHUzMlRpbWVyTnVtID09IDFVTCkKKyAgICB7CisgICAgICAgIHdoaWxlKHNjLT5UTVJDVEwxICYgU0NfVE1SQ1RMMV9TWU5DX01zaykge30KKyAgICAgICAgc2MtPlRNUkNUTDEgPSB1MzJSZWc7CisgICAgICAgIHNjLT5BTFRDVEwgfD0gU0NfQUxUQ1RMX0NOVEVOMV9Nc2s7CisgICAgfQorICAgIGVsc2UgICAgICAgLyogdGltZXIgMiAqLworICAgIHsKKyAgICAgICAgd2hpbGUoc2MtPlRNUkNUTDIgJiBTQ19UTVJDVEwyX1NZTkNfTXNrKSB7fQorICAgICAgICBzYy0+VE1SQ1RMMiA9IHUzMlJlZzsKKyAgICAgICAgc2MtPkFMVENUTCB8PSBTQ19BTFRDVExfQ05URU4yX01zazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFN0b3AgYSBzbWFydGNhcmQgdGltZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJUaW1lck51bSAgVGltZXIgdG8gc3RvcC4gVmFsaWQgdmFsdWVzIGFyZSAwLCAxLCAyLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICAgICAgIFRoaXMgZnVuY3Rpb24gc3RvcCB0aGUgdGltZXIgd2l0aGluIHNwZWNpZmllZCBzbWFydGNhcmQgbW9kdWxlLCBcYiBub3QgdGltZXIgbW9kdWxlLgorICAqLwordm9pZCBTQ19TdG9wVGltZXIoU0NfVCAqc2MsIHVpbnQzMl90IHUzMlRpbWVyTnVtKQoreworICAgIHdoaWxlKHNjLT5BTFRDVEwgJiBTQ19BTFRDVExfU1lOQ19Nc2spIHt9CisKKyAgICBpZih1MzJUaW1lck51bSA9PSAwVUwpICAgICAgLyogdGltZXIgMCAqLworICAgIHsKKyAgICAgICAgc2MtPkFMVENUTCAmPSB+U0NfQUxUQ1RMX0NOVEVOMF9Nc2s7CisgICAgfQorICAgIGVsc2UgaWYodTMyVGltZXJOdW0gPT0gMVVMKSAvKiB0aW1lciAxICovCisgICAgeworICAgICAgICBzYy0+QUxUQ1RMICY9IH5TQ19BTFRDVExfQ05URU4xX01zazsKKyAgICB9CisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRpbWVyIDIgKi8KKyAgICB7CisgICAgICAgIHNjLT5BTFRDVEwgJj0gflNDX0FMVENUTF9DTlRFTjJfTXNrOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHNtYXJ0Y2FyZCBjbG9jayBmcmVxdWVuY3kKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIFNtYXJ0Y2FyZCBmcmVxdWVuY3kgaW4ga0haCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHNwZWNpZmllZCBzbWFydGNhcmQgbW9kdWxlIGNsb2NrIGZyZXF1ZW5jeSBpbiBrSHouCisgICovCit1aW50MzJfdCBTQ19HZXRJbnRlcmZhY2VDbG9jayhTQ19UICpzYykKK3sKKyAgICB1aW50MzJfdCB1MzJDbGtTcmMsIHUzMk51bSwgdTMyQ2xrID0gX19ISVJDLCB1MzJEaXY7CisKKyAgICAvKiBHZXQgc21hcnRjYXJkIG1vZHVsZSBjbG9jayBzb3VyY2UgYW5kIGRpdmlkZXIgKi8KKyAgICBpZigoc2MgPT0gU0MwKSB8fCAoc2MgPT0gU0MwX05TKSkKKyAgICB7CisgICAgICAgIHUzMk51bSA9IDBVTDsKKyAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNDMF9NT0RVTEUpOworICAgICAgICB1MzJEaXYgPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFNDMF9NT0RVTEUpOworICAgIH0KKyAgICBlbHNlIGlmKChzYyA9PSBTQzEpIHx8IChzYyA9PSBTQzFfTlMpKQorICAgIHsKKyAgICAgICAgdTMyTnVtID0gMVVMOworICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU0MxX01PRFVMRSk7CisgICAgICAgIHUzMkRpdiA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoU0MxX01PRFVMRSk7CisgICAgfQorICAgIGVsc2UgaWYoKHNjID09IFNDMikgfHwgKHNjID09IFNDMl9OUykpCisgICAgeworICAgICAgICB1MzJOdW0gPSAyVUw7CisgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTQzJfTU9EVUxFKTsKKyAgICAgICAgdTMyRGl2ID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihTQzJfTU9EVUxFKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDBVTDsKKyAgICB9CisKKyAgICAvKiBHZXQgc21hcnRjYXJkIG1vZHVsZSBjbG9jayAqLworICAgIGlmKHUzMkNsa1NyYyA9PSAwVUwpCisgICAgeworICAgICAgICB1MzJDbGsgPSBfX0hYVDsKKyAgICB9CisgICAgZWxzZSBpZih1MzJDbGtTcmMgPT0gMVVMKQorICAgIHsKKyAgICAgICAgdTMyQ2xrID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOworICAgIH0KKyAgICBlbHNlIGlmKHUzMkNsa1NyYyA9PSAyVUwpCisgICAgeworICAgICAgICBpZih1MzJOdW0gPT0gMVVMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGsgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGsgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyQ2xrID0gX19ISVJDOworICAgIH0KKworICAgIHUzMkNsayAvPSAodTMyRGl2ICsgMVVMKSAqIDEwMDBVTDsKKworICAgIHJldHVybiB1MzJDbGs7Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0NfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0NfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3NjdWFydC5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvc2N1YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyMjg3YgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3NjdWFydC5jCkBAIC0wLDAgKzEsMjY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc2N1YXJ0LmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFNtYXJ0Y2FyZCBVQVJUIG1vZGUgKFNDVUFSVCkgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKK3N0YXRpYyB1aW50MzJfdCBTQ1VBUlRfR2V0Q2xvY2soU0NfVCAqc2MpOworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFNDVUFSVF9Ecml2ZXIgU0NVQVJUIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFNDVUFSVF9FWFBPUlRFRF9GVU5DVElPTlMgU0NVQVJUIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBzbWFydGNhcmQgaW50ZXJmYWNlCisgICoKKyAgKiBAcGFyYW0gICAgICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIHNtYXJ0Y2FyZCBpbnRlcmZhY2UgVUFSVCBtb2RlLgorICAqLwordm9pZCBTQ1VBUlRfQ2xvc2UoU0NfVCogc2MpCit7CisgICAgc2MtPklOVEVOID0gMFVMOworICAgIHNjLT5VQVJUQ1RMID0gMFVMOworICAgIHNjLT5DVEwgPSAwVUw7Cit9CisKKy8qKiBAY29uZCBISURERU5fU1lNQk9MUyAqLworLyoqCisgICogQGJyaWVmICAgICAgUmV0dXJucyBtb2R1bGUgY2xvY2sgb2Ygc3BlY2lmaWVkIFNDIGludGVyZmFjZQorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgTW9kdWxlIGNsb2NrIG9mIHNwZWNpZmllZCBTQyBpbnRlcmZhY2UuCisgICovCitzdGF0aWMgdWludDMyX3QgU0NVQVJUX0dldENsb2NrKFNDX1QgKnNjKQoreworICAgIHVpbnQzMl90IHUzMkNsa1NyYywgdTMyTnVtLCB1MzJDbGsgPSBfX0hJUkMsIHUzMkRpdjsKKworICAgIC8qIEdldCBzbWFydGNhcmQgbW9kdWxlIGNsb2NrIHNvdXJjZSBhbmQgZGl2aWRlciAqLworICAgIGlmKChzYyA9PSBTQzApIHx8IChzYyA9PSBTQzBfTlMpKQorICAgIHsKKyAgICAgICAgdTMyTnVtID0gMFVMOworICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU0MwX01PRFVMRSk7CisgICAgICAgIHUzMkRpdiA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoU0MwX01PRFVMRSk7CisgICAgfQorICAgIGVsc2UgaWYoKHNjID09IFNDMSkgfHwgKHNjID09IFNDMV9OUykpCisgICAgeworICAgICAgICB1MzJOdW0gPSAxVUw7CisgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTQzFfTU9EVUxFKTsKKyAgICAgICAgdTMyRGl2ID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihTQzFfTU9EVUxFKTsKKyAgICB9CisgICAgZWxzZSBpZigoc2MgPT0gU0MyKSB8fCAoc2MgPT0gU0MyX05TKSkKKyAgICB7CisgICAgICAgIHUzMk51bSA9IDJVTDsKKyAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNDMl9NT0RVTEUpOworICAgICAgICB1MzJEaXYgPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFNDMl9NT0RVTEUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMFVMOworICAgIH0KKworICAgIC8qIEdldCBzbWFydGNhcmQgbW9kdWxlIGNsb2NrICovCisgICAgaWYodTMyQ2xrU3JjID09IDBVTCkKKyAgICB7CisgICAgICAgIHUzMkNsayA9IF9fSFhUOworICAgIH0KKyAgICBlbHNlIGlmKHUzMkNsa1NyYyA9PSAxVUwpCisgICAgeworICAgICAgICB1MzJDbGsgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7CisgICAgfQorICAgIGVsc2UgaWYodTMyQ2xrU3JjID09IDJVTCkKKyAgICB7CisgICAgICAgIGlmKHUzMk51bSA9PSAxVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsayA9IENMS19HZXRQQ0xLMUZyZXEoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsayA9IENMS19HZXRQQ0xLMEZyZXEoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJDbGsgPSBfX0hJUkM7CisgICAgfQorCisgICAgdTMyQ2xrIC89ICh1MzJEaXYgKyAxVUwpOworCisgICAgcmV0dXJuIHUzMkNsazsKK30KKy8qKiBAZW5kY29uZCBISURERU5fU1lNQk9MUyAqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgc21hcnRjYXJkIG1vZHVsZSBVQVJUIG1vZGUgYW5kIHNldCBiYXVkcmF0ZQorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJCYXVkcmF0ZSBUYXJnZXQgYmF1ZHJhdGUgb2Ygc21hcnRjYXJkIFVBUlQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgQWN0dWFsIGJhdWRyYXRlIG9mIHNtYXJ0Y2FyZCBVQVJUIG1vZGUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gdXNlIHRvIGVuYWJsZSBzbWFydGNhcmQgbW9kdWxlIFVBUlQgbW9kZSBhbmQgc2V0IGJhdWRyYXRlLgorICAqCisgICAgICAgIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyBjaGFyYWN0ZXIgd2lkdGggdG8gOCBiaXRzLCAxIHN0b3AgYml0LCBhbmQgbm8gcGFyaXR5LgorICAqICAgICAgICAgICAgIEFuZCBjYW4gdXNlIFxyZWYgU0NVQVJUX1NldExpbmVDb25maWcgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZXNlIHNldHRpbmdzLgorICAqICAgICAgICAgICAgIFRoZSBiYXVkcmF0ZSBjbG9jayBzb3VyY2UgY29tZXMgZnJvbSBTQ19DTEsvU0NfRElWLCB3aGVyZSBTQ19DTEsgaXMgY29udHJvbGxlZAorICAqICAgICAgICAgICAgIGJ5IFNDeFNFTCBpbiBDTEtTRUwzIHJlZ2lzdGVyLCBTQ19ESVYgaXMgY29udHJvbGxlZCBieSBTQ3hESVYgaW4gQ0xLRElWMQorICAqICAgICAgICAgICAgIHJlZ2lzdGVyLiBTaW5jZSB0aGUgYmF1ZHJhdGUgZGl2aWRlciBpcyAxMi1iaXQgd2lkZSBhbmQgbXVzdCBiZSBsYXJnZXIgdGhhbiA0LAorICAqICAgICAgICAgICAgIChjbG9jayBzb3VyY2UgLyBiYXVkcmF0ZSkgbXVzdCBiZSBsYXJnZXIgb3IgZXF1YWwgdG8gNSBhbmQgc21hbGxlciBvciBlcXVhbCB0bworICAqICAgICAgICAgICAgIDQwOTYuIE90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBjb25maWd1cmUgU0NVQVJUIHRvIHdvcmsgd2l0aCB0YXJnZXQgYmF1ZHJhdGUuCisgICovCit1aW50MzJfdCBTQ1VBUlRfT3BlbihTQ19UKiBzYywgdWludDMyX3QgdTMyQmF1ZHJhdGUpCit7CisgICAgdWludDMyX3QgdTMyQ2xrID0gU0NVQVJUX0dldENsb2NrKHNjKSwgdTMyRGl2OworCisgICAgLyogQ2FsY3VsYXRlIGRpdmlkZXIgZm9yIHRhcmdldCBiYXVkcmF0ZSAqLworICAgIHUzMkRpdiA9ICh1MzJDbGsgKyAodTMyQmF1ZHJhdGUgPj4gMSkgLSAxVUwpIC8gdTMyQmF1ZHJhdGUgLSAxVUw7CisKKyAgICBzYy0+Q1RMID0gU0NfQ1RMX1NDRU5fTXNrIHwgU0NfQ1RMX05TQl9Nc2s7ICAvKiBFbmFibGUgc21hcnRjYXJkIGludGVyZmFjZSBhbmQgc3RvcCBiaXQgPSAxICovCisgICAgc2MtPlVBUlRDVEwgPSBTQ1VBUlRfQ0hBUl9MRU5fOCB8IFNDVUFSVF9QQVJJVFlfTk9ORSB8IFNDX1VBUlRDVExfVUFSVEVOX01zazsgLyogRW5hYmxlIFVBUlQgbW9kZSwgZGlzYWJsZSBwYXJpdHkgYW5kIDggYml0IHBlciBjaGFyYWN0ZXIgKi8KKyAgICBzYy0+RVRVQ1RMID0gdTMyRGl2OworCisgICAgcmV0dXJuKHUzMkNsayAvICh1MzJEaXYgKyAxVUwpKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBSeCBkYXRhIGZyb20gUnggRklGTworICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgcHU4UnhCdWYgICAgICAgIFRoZSBidWZmZXIgdG8gc3RvcmUgcmVjZWl2ZSB0aGUgZGF0YS4KKyAgKiBAcGFyYW1baW5dIHUzMlJlYWRCeXRlcyAgICAgVGFyZ2V0IG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJlY2VpdmUKKyAgKgorICAqIEByZXR1cm4gICAgIEFjdHVhbCBjaGFyYWN0ZXIgbnVtYmVyIHJlYWRzIHRvIGJ1ZmZlcgorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVhZCBkYXRhIGZyb20gUnggRklGTy4KKyAgKgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGJsb2NrIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhlcmUncyBubyBkYXRhIGF2YWlsYWJsZS4KKyAgKi8KK3VpbnQzMl90IFNDVUFSVF9SZWFkKFNDX1QqIHNjLCB1aW50OF90IHB1OFJ4QnVmW10sIHVpbnQzMl90IHUzMlJlYWRCeXRlcykKK3sKKyAgICB1aW50MzJfdCB1MzJDb3VudDsKKworICAgIGZvcih1MzJDb3VudCA9IDBVTDsgdTMyQ291bnQgPCB1MzJSZWFkQnl0ZXM7IHUzMkNvdW50KyspCisgICAgeworICAgICAgICBpZihTQ1VBUlRfR0VUX1JYX0VNUFRZKHNjKSkgICAvKiBubyBkYXRhIGF2YWlsYWJsZSAqLworICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwdThSeEJ1Zlt1MzJDb3VudF0gPSAodWludDhfdClTQ1VBUlRfUkVBRChzYyk7ICAgIC8qIGdldCBkYXRhIGZyb20gRklGTyAqLworICAgIH0KKworICAgIHJldHVybiB1MzJDb3VudDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgQ29uZmlndXJlIHNtYXJ0Y2FyZCBVQVJUIG1vZGUgbGluZSBzZXR0aW5nCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJCYXVkcmF0ZSAgICAgVGFyZ2V0IGJhdWRyYXRlIG9mIHNtYXJ0Y2FyZCBVQVJUIG1vZGUuIElmIHRoaXMgdmFsdWUgaXMgMCwgU0MgVUFSVCBiYXVkcmF0ZSB3aWxsIG5vdCBjaGFuZ2UuCisgICogQHBhcmFtW2luXSAgdTMyRGF0YVdpZHRoICAgIFRoZSBkYXRhIGxlbmd0aCwgY291bGQgYmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NVQVJUX0NIQVJfTEVOXzUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ1VBUlRfQ0hBUl9MRU5fNgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDVUFSVF9DSEFSX0xFTl83CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NVQVJUX0NIQVJfTEVOXzgKKyAgKiBAcGFyYW1baW5dICB1MzJQYXJpdHkgICAgICAgVGhlIHBhcml0eSBzZXR0aW5nLCBjb3VsZCBiZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ1VBUlRfUEFSSVRZX05PTkUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ1VBUlRfUEFSSVRZX09ERAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ1VBUlRfUEFSSVRZX0VWRU4KKyAgKiBAcGFyYW1baW5dICB1MzJTdG9wQml0cyAgICAgVGhlIHN0b3AgYml0IGxlbmd0aCwgY291bGQgYmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NVQVJUX1NUT1BfQklUXzEKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ1VBUlRfU1RPUF9CSVRfMgorICAqCisgICogQHJldHVybiAgICAgQWN0dWFsIGJhdWRyYXRlIG9mIHNtYXJ0Y2FyZCBVQVJUIG1vZGUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBiYXVkcmF0ZSBjbG9jayBzb3VyY2UgY29tZXMgZnJvbSBTQ19DTEsvU0NfRElWLCB3aGVyZSBTQ19DTEsgaXMgY29udHJvbGxlZAorICAqICAgICAgICAgICAgIGJ5IFNDeFNFTCBpbiBDTEtTRUwzIHJlZ2lzdGVyLCBTQ19ESVYgaXMgY29udHJvbGxlZCBieSBTQ3hESVYgaW4gQ0xLRElWMQorICAqICAgICAgICAgICAgIHJlZ2lzdGVyLiBTaW5jZSB0aGUgYmF1ZHJhdGUgZGl2aWRlciBpcyAxMi1iaXQgd2lkZSBhbmQgbXVzdCBiZSBsYXJnZXIgdGhhbiA0LAorICAqICAgICAgICAgICAgIChjbG9jayBzb3VyY2UgLyBiYXVkcmF0ZSkgbXVzdCBiZSBsYXJnZXIgb3IgZXF1YWwgdG8gNSBhbmQgc21hbGxlciBvciBlcXVhbCB0bworICAqICAgICAgICAgICAgIDQwOTYuIE90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBjb25maWd1cmUgU0NVQVJUIHRvIHdvcmsgd2l0aCB0YXJnZXQgYmF1ZHJhdGUuCisgICovCit1aW50MzJfdCBTQ1VBUlRfU2V0TGluZUNvbmZpZyhTQ19UKiBzYywgdWludDMyX3QgdTMyQmF1ZHJhdGUsIHVpbnQzMl90IHUzMkRhdGFXaWR0aCwgdWludDMyX3QgdTMyUGFyaXR5LCB1aW50MzJfdCB1MzJTdG9wQml0cykKK3sKKyAgICB1aW50MzJfdCB1MzJDbGsgPSBTQ1VBUlRfR2V0Q2xvY2soc2MpLCB1MzJEaXY7CisKKyAgICBpZih1MzJCYXVkcmF0ZSA9PSAwVUwpCisgICAgeworICAgICAgICAvKiBLZWVwIG9yaWdpbmFsIGJhdWRyYXRlIHNldHRpbmcgKi8KKyAgICAgICAgdTMyRGl2ID0gc2MtPkVUVUNUTCAmIFNDX0VUVUNUTF9FVFVSRElWX01zazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogQ2FsY3VsYXRlIGRpdmlkZXIgZm9yIHRhcmdldCBiYXVkcmF0ZSAqLworICAgICAgICB1MzJEaXYgPSAoKHUzMkNsayArICh1MzJCYXVkcmF0ZSA+PiAxKSAtIDFVTCkgLyB1MzJCYXVkcmF0ZSkgLSAxVUw7CisgICAgICAgIHNjLT5FVFVDVEwgPSB1MzJEaXY7CisgICAgfQorCisgICAgc2MtPkNUTCA9IHUzMlN0b3BCaXRzIHwgU0NfQ1RMX1NDRU5fTXNrOyAgLyogU2V0IHN0b3AgYml0ICovCisgICAgc2MtPlVBUlRDVEwgPSB1MzJQYXJpdHkgfCB1MzJEYXRhV2lkdGggfCBTQ19VQVJUQ1RMX1VBUlRFTl9Nc2s7ICAvKiBTZXQgY2hhcmFjdGVyIHdpZHRoIGFuZCBwYXJpdHkgKi8KKworICAgIHJldHVybiAodTMyQ2xrIC8gKHUzMkRpdiArIDFVTCkpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgcmVjZWl2ZSB0aW1lb3V0IGNvdW50CisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyVE9DICBSeCB0aW1lLW91dCBjb3VudGVyLCB1c2luZyBiYXVkcmF0ZSBhcyBjb3VudGVyIHVuaXQuIFZhbGlkIHJhbmdlIGFyZSAwfjB4MUZGLAorICAqICAgICAgICAgICAgICAgICAgICAgc2V0IHRoaXMgdmFsdWUgdG8gMCB3aWxsIGRpc2FibGUgdGltZS1vdXQgY291bnRlci4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSB0aW1lLW91dCBjb3VudGVyIHJlc2V0cyBhbmQgc3RhcnRzIGNvdW50aW5nIHdoZW5ldmVyIHRoZSBSeCBidWZmZXIgcmVjZWl2ZWQgYQorICAqICAgICAgICAgICAgIG5ldyBkYXRhIHdvcmQuIE9uY2UgdGhlIGNvdW50ZXIgZGVjcmVhc2UgdG8gMSBhbmQgbm8gbmV3IGRhdGEgaXMgcmVjZWl2ZWQgb3IgQ1BVCisgICogICAgICAgICAgICAgZG9lcyBub3QgcmVhZCBhbnkgZGF0YSBmcm9tIEZJRk8sIGEgcmVjZWl2ZXIgdGltZS1vdXQgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAqLwordm9pZCBTQ1VBUlRfU2V0VGltZW91dENudChTQ19UKiBzYywgdWludDMyX3QgdTMyVE9DKQoreworICAgIHNjLT5SWFRPVVQgPSB1MzJUT0M7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIGRhdGEgaW50byB0cmFuc21pdCBGSUZPIHRvIHNlbmQgZGF0YSBvdXQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHB1OFR4QnVmICAgICAgICBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgZGF0YSB0byBzZW5kIHRvIHRyYW5zbWl0IEZJRk8uCisgICogQHBhcmFtW2luXSAgdTMyV3JpdGVCeXRlcyAgIE51bWJlciBvZiBkYXRhIHRvIHNlbmQuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gd3JpdGUgZGF0YSBpbnRvIFR4IEZJRk8gdG8gc2VuZCBkYXRhIG91dC4KKyAgKgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGJsb2NrcyB1bnRpbCBhbGwgZGF0YSB3cml0ZSBpbnRvIEZJRk8uCisgICovCit2b2lkIFNDVUFSVF9Xcml0ZShTQ19UKiBzYywgdWludDhfdCBwdThUeEJ1ZltdLCB1aW50MzJfdCB1MzJXcml0ZUJ5dGVzKQoreworICAgIHVpbnQzMl90IHUzMkNvdW50OworCisgICAgZm9yKHUzMkNvdW50ID0gMFVMOyB1MzJDb3VudCAhPSB1MzJXcml0ZUJ5dGVzOyB1MzJDb3VudCsrKQorICAgIHsKKyAgICAgICAgLyogV2FpdCAndGlsIEZJRk8gbm90IGZ1bGwgKi8KKyAgICAgICAgd2hpbGUoU0NVQVJUX0dFVF9UWF9GVUxMKHNjKSkge30KKworICAgICAgICAvKiBXcml0ZSAxIGJ5dGUgdG8gRklGTyAqLworICAgICAgICBzYy0+REFUID0gcHU4VHhCdWZbdTMyQ291bnRdOyAgLyogV3JpdGUgMSBieXRlIHRvIEZJRk8gKi8KKyAgICB9Cit9CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTQ1VBUlRfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0NVQVJUX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9zZGguYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3NkaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNWQ1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9zZGguYwpAQCAtMCwwICsxLDExNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBTREguYworICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgU0RIIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKyNpZiBkZWZpbmVkIChfX0lDQ0FSTV9fKQorIyBwcmFnbWEgZGlhZ19zdXBwcmVzcz1QbTA3MywgUG0xNDMgICAgICAgIC8qIE1pc3JhIEMgMjAwNCBydWxlIDE0LjcgKi8KKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU0RIX0RyaXZlciBTREggRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU0RIX0VYUE9SVEVEX0ZVTkNUSU9OUyBTREggRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisjZGVmaW5lIFNESF9CTE9DS19TSVpFICAgNTEyVUwKKworLyogI2RlZmluZSBERUJVR19QUklOVEYgcHJpbnRmICovCisjZGVmaW5lIERFQlVHX1BSSU5URiguLi4pCisKKy8qKiBAY29uZCBISURERU5fU1lNQk9MUyAqLworCisvKiBnbG9iYWwgdmFyaWFibGVzICovCisvKiBGb3IgcmVzcG9uc2UgUjMgKHN1Y2ggYXMgQUNNRDQxLCBDUkMtNyBpcyBpbnZhbGlkOyBidXQgU0QgY29udHJvbGxlciB3aWxsIHN0aWxsICovCisvKiBjYWxjdWxhdGUgQ1JDLTcgYW5kIGdldCBhbiBlcnJvciByZXN1bHQsIHNvZnR3YXJlIHNob3VsZCBpZ25vcmUgdGhpcyBlcnJvciBhbmQgY2xlYXIgU0RJU1IgW0NSQ19JRl0gZmxhZyAqLworLyogX3NkX3VSM19DTUQgaXMgdGhlIGZsYWcgZm9yIGl0LiAxIG1lYW5zIHNvZnR3YXJlIHNob3VsZCBpZ25vcmUgQ1JDLTcgZXJyb3IgKi8KK3VpbnQ4X3QgZ191OFIzRmxhZyA9IDBVTDsKK3VpbnQ4X3Qgdm9sYXRpbGUgZ191OFNERGF0YVJlYWR5RmxhZyA9ICh1aW50OF90KUZBTFNFOworaW50ICAgICBTREhfb2sgPSAwOworCitzdGF0aWMgdWludDMyX3QgX1NESF91UjdfQ01EID0gMFVMOworc3RhdGljIHVpbnQzMl90IF9TREhfUmVmZXJlbmNlQ2xvY2s7CisKKyNpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApIC8qITwgSUFSIENvbXBpbGVyICovCisjcHJhZ21hIGRhdGFfYWxpZ25tZW50ID0gNAorc3RhdGljIHVpbnQ4X3QgX1NESF91Y1NESENCdWZmZXJbNTEyXTsKKyNlbHNlCitzdGF0aWMgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCkpIHVpbnQ4X3QgX1NESF91Y1NESENCdWZmZXJbNTEyXTsKKyNlbmRpZgorCisvKiBEZWNsYXJlIHRoZXNlIGZ1bmN0aW9ucyBoZXJlIHRvIGF2b2lkIE1JU1JBIEMgMjAwNCBydWxlIDguMSBlcnJvciAqLwordm9pZCBTREhfQ2hlY2tSQihTREhfVCAqc2RoKTsKK3VpbnQzMl90IFNESF9TRENvbW1hbmQoU0RIX1QgKnNkaCwgdWludDMyX3QgdTMyQ21kLCB1aW50MzJfdCB1MzJBcmcpOwordWludDMyX3QgU0RIX1NEQ21kQW5kUnNwKFNESF9UICpzZGgsIHVpbnQzMl90IHUzMkNtZCwgdWludDMyX3QgdTMyQXJnLCB1aW50MzJfdCB1MzJUaWNrQ291bnQpOwordWludDMyX3QgU0RIX1N3YXAzMih1aW50MzJfdCB1MzJWYWwpOwordWludDMyX3QgU0RIX1NEQ21kQW5kUnNwMihTREhfVCAqc2RoLCB1aW50MzJfdCB1MzJDbWQsIHVpbnQzMl90IHUzMkFyZywgdWludDMyX3QgcHUzMlIycHRyW10pOwordWludDMyX3QgU0RIX1NEQ21kQW5kUnNwRGF0YUluKFNESF9UICpzZGgsIHVpbnQzMl90IHUzMkNtZCwgdWludDMyX3QgdTMyQXJnKTsKK3ZvaWQgU0RIX1NldF9jbG9jayhTREhfVCAqc2RoLCB1aW50MzJfdCB1MzJTRENsb2NrS2h6KTsKK3VpbnQzMl90IFNESF9DYXJkRGV0ZWN0aW9uKFNESF9UICpzZGgpOwordWludDMyX3QgU0RIX0luaXQoU0RIX1QgKnNkaCk7Cit1aW50MzJfdCBTREhfU3dpdGNoVG9IaWdoU3BlZWQoU0RIX1QgKnNkaCwgU0RIX0lORk9fVCAqcFNEKTsKK3VpbnQzMl90IFNESF9TZWxlY3RDYXJkVHlwZShTREhfVCAqc2RoKTsKK3ZvaWQgU0RIX0dldF9TRF9pbmZvKFNESF9UICpzZGgpOworCitTREhfSU5GT19UIFNEMDsKKwordm9pZCBTREhfQ2hlY2tSQihTREhfVCAqc2RoKQoreworICAgIHdoaWxlKDEpCisgICAgeworICAgICAgICBzZGgtPkNUTCB8PSBTREhfQ1RMX0NMSzhPRU5fTXNrOworICAgICAgICB3aGlsZShzZGgtPkNUTCAmIFNESF9DVExfQ0xLOE9FTl9Nc2spIHt9CisgICAgICAgIGlmKHNkaC0+SU5UU1RTICYgU0RIX0lOVFNUU19EQVQwU1RTX01zaykKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKKwordWludDMyX3QgU0RIX1NEQ29tbWFuZChTREhfVCAqc2RoLCB1aW50MzJfdCB1MzJDbWQsIHVpbnQzMl90IHUzMkFyZykKK3sKKyAgICBTREhfSU5GT19UICpwU0Q7CisgICAgdm9sYXRpbGUgdWludDMyX3QgdTMyU3RhdHVzID0gU3VjY2Vzc2Z1bDsKKworICAgIC8qIE0yMzUxIGlzIG9ubHkgc3VwcG9ydCBTREgwICovCisgICAgcFNEID0gJlNEMDsKKworICAgIHNkaC0+Q01EQVJHID0gdTMyQXJnOworICAgIHNkaC0+Q1RMID0gKHNkaC0+Q1RMICYgKH5TREhfQ1RMX0NNRENPREVfTXNrKSkgfCAodTMyQ21kIDw8IDgpIHwgKFNESF9DVExfQ09FTl9Nc2spOworCisgICAgd2hpbGUoc2RoLT5DVEwgJiBTREhfQ1RMX0NPRU5fTXNrKQorICAgIHsKKyAgICAgICAgaWYocFNELT5Jc0NhcmRJbnNlcnQgPT0gKHVpbnQzMl90KUZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJTdGF0dXMgPSBTREhfTk9fU0RfQ0FSRDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdTMyU3RhdHVzOworfQorCisKK3VpbnQzMl90IFNESF9TRENtZEFuZFJzcChTREhfVCAqc2RoLCB1aW50MzJfdCB1MzJDbWQsIHVpbnQzMl90IHUzMkFyZywgdWludDMyX3QgdTMyVGlja0NvdW50KQoreworICAgIFNESF9JTkZPX1QgKnBTRDsKKworICAgIC8qIE0yMzUxIGlzIG9ubHkgc3VwcG9ydCBTREgwICovCisgICAgcFNEID0gJlNEMDsKKworICAgIHNkaC0+Q01EQVJHID0gdTMyQXJnOworICAgIHNkaC0+Q1RMID0gKHNkaC0+Q1RMICYgKH5TREhfQ1RMX0NNRENPREVfTXNrKSkgfCAodTMyQ21kIDw8IDgpIHwgKFNESF9DVExfQ09FTl9Nc2sgfCBTREhfQ1RMX1JJRU5fTXNrKTsKKworICAgIGlmKHUzMlRpY2tDb3VudCA+IDBVTCkKKyAgICB7CisgICAgICAgIHdoaWxlKHNkaC0+Q1RMICYgU0RIX0NUTF9SSUVOX01zaykKKyAgICAgICAgeworICAgICAgICAgICAgaWYodTMyVGlja0NvdW50LS0gPT0gMFVMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNkaC0+Q1RMIHw9IFNESF9DVExfQ1RMUlNUX01zazsgLyogcmVzZXQgU0QgZW5naW5lICovCisgICAgICAgICAgICAgICAgcmV0dXJuIDJVTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKHBTRC0+SXNDYXJkSW5zZXJ0ID09ICh1aW50OF90KUZBTFNFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBTREhfTk9fU0RfQ0FSRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3aGlsZShzZGgtPkNUTCAmIFNESF9DVExfUklFTl9Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHBTRC0+SXNDYXJkSW5zZXJ0ID09ICh1aW50OF90KUZBTFNFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBTREhfTk9fU0RfQ0FSRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKF9TREhfdVI3X0NNRCkKKyAgICB7CisgICAgICAgIGlmKChzZGgtPlJFU1AxICYgMHhmZlVMKSAhPSAweDU1VUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKChzZGgtPlJFU1AwICYgMHhmVUwpICE9IDB4MDFVTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfU0RIX3VSN19DTUQgPSAwVUw7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNESF9DTUQ4X0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYoIWdfdThSM0ZsYWcpCisgICAgeworICAgICAgICBpZihzZGgtPklOVFNUUyAmIFNESF9JTlRTVFNfQ1JDN19Nc2spICAgICAgLyogY2hlY2sgQ1JDNyAqLworICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU3VjY2Vzc2Z1bDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTREhfQ1JDN19FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAgICAvKiBpZ25vcmUgQ1JDIGVycm9yIGZvciBSMyBjYXNlICovCisgICAgeworICAgICAgICBnX3U4UjNGbGFnID0gMFVMOworICAgICAgICBzZGgtPklOVFNUUyA9IFNESF9JTlRTVFNfQ1JDSUZfTXNrOworICAgICAgICByZXR1cm4gU3VjY2Vzc2Z1bDsKKyAgICB9Cit9CisKKwordWludDMyX3QgU0RIX1N3YXAzMih1aW50MzJfdCB1MzJWYWwpCit7CisgICAgdWludDMyX3QgdTMyQnVmOworCisgICAgdTMyQnVmID0gdTMyVmFsOworICAgIHUzMlZhbCA8PD0gMjQ7CisgICAgdTMyVmFsIHw9ICh1MzJCdWYgPDwgOCkgJiAweGZmMDAwMFVMOworICAgIHUzMlZhbCB8PSAodTMyQnVmID4+IDgpICYgMHhmZjAwVUw7CisgICAgdTMyVmFsIHw9ICh1MzJCdWYgPj4gMjQpICYgMHhmZlVMOworICAgIHJldHVybiB1MzJWYWw7Cit9CisKKy8qIEdldCAxNiBieXRlcyBDSUQgb3IgQ1NEICovCit1aW50MzJfdCBTREhfU0RDbWRBbmRSc3AyKFNESF9UICpzZGgsIHVpbnQzMl90IHUzMkNtZCwgdWludDMyX3QgdTMyQXJnLCB1aW50MzJfdCBwdTMyUjJwdHJbXSkKK3sKKyAgICB1aW50MzJfdCBpOworICAgIHVpbnQzMl90IGF1MzJUbXBCdWZbNV07CisgICAgU0RIX0lORk9fVCAqcFNEOworCisgICAgLyogTTIzNTEgaXMgb25seSBzdXBwb3J0IFNESDAgKi8KKyAgICBwU0QgPSAmU0QwOworCisgICAgc2RoLT5DTURBUkcgPSB1MzJBcmc7CisgICAgc2RoLT5DVEwgPSAoc2RoLT5DVEwgJiAoflNESF9DVExfQ01EQ09ERV9Nc2spKSB8ICh1MzJDbWQgPDwgOCkgfCAoU0RIX0NUTF9DT0VOX01zayB8IFNESF9DVExfUjJFTl9Nc2spOworCisgICAgd2hpbGUoc2RoLT5DVEwgJiBTREhfQ1RMX1IyRU5fTXNrKQorICAgIHsKKyAgICAgICAgaWYocFNELT5Jc0NhcmRJbnNlcnQgPT0gKHVpbnQ4X3QpRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTREhfTk9fU0RfQ0FSRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKHNkaC0+SU5UU1RTICYgU0RIX0lOVFNUU19DUkM3X01zaykKKyAgICB7CisgICAgICAgIGZvcihpID0gMFVMOyBpIDwgNVVMOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1MzJUbXBCdWZbaV0gPSBTREhfU3dhcDMyKHNkaC0+RkJbaV0pOworICAgICAgICB9CisgICAgICAgIGZvcihpID0gMFVMOyBpIDwgNFVMOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1MzJSMnB0cltpXSA9ICgoYXUzMlRtcEJ1ZltpXSAmIDB4MDBmZmZmZmZVTCkgPDwgOCkgfCAoKGF1MzJUbXBCdWZbaSArIDFVTF0gJiAweGZmMDAwMDAwVUwpID4+IDI0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3VjY2Vzc2Z1bDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNESF9DUkM3X0VSUk9SOworICAgIH0KK30KKworCit1aW50MzJfdCBTREhfU0RDbWRBbmRSc3BEYXRhSW4oU0RIX1QgKnNkaCwgdWludDMyX3QgdTMyQ21kLCB1aW50MzJfdCB1MzJBcmcpCit7CisgICAgU0RIX0lORk9fVCAqcFNEOworCisgICAgLyogTTIzNTEgaXMgb25seSBzdXBwb3J0IFNESDAgKi8KKyAgICBwU0QgPSAmU0QwOworCisgICAgc2RoLT5DTURBUkcgPSB1MzJBcmc7CisgICAgc2RoLT5DVEwgPSAoc2RoLT5DVEwgJiAoflNESF9DVExfQ01EQ09ERV9Nc2spKSB8ICgodWludDMyX3QpdTMyQ21kIDw8IDgpIHwKKyAgICAgICAgICAgICAgIChTREhfQ1RMX0NPRU5fTXNrIHwgU0RIX0NUTF9SSUVOX01zayB8IFNESF9DVExfRElFTl9Nc2spOworCisgICAgd2hpbGUoc2RoLT5DVEwgJiBTREhfQ1RMX1JJRU5fTXNrKQorICAgIHsKKyAgICAgICAgaWYocFNELT5Jc0NhcmRJbnNlcnQgPT0gKHVpbnQzMl90KUZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU0RIX05PX1NEX0NBUkQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZShzZGgtPkNUTCAmIFNESF9DVExfRElFTl9Nc2spCisgICAgeworICAgICAgICBpZihwU0QtPklzQ2FyZEluc2VydCA9PSAodWludDMyX3QpRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTREhfTk9fU0RfQ0FSRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCEoc2RoLT5JTlRTVFMgJiBTREhfSU5UU1RTX0NSQzdfTXNrKSkgICAgICAgLyogY2hlY2sgQ1JDNyAqLworICAgIHsKKyAgICAgICAgcmV0dXJuIFNESF9DUkM3X0VSUk9SOworICAgIH0KKworICAgIGlmKCEoc2RoLT5JTlRTVFMgJiBTREhfSU5UU1RTX0NSQzE2X01zaykpICAgICAgLyogY2hlY2sgQ1JDMTYgKi8KKyAgICB7CisgICAgICAgIHJldHVybiBTREhfQ1JDMTZfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIFN1Y2Nlc3NmdWw7Cit9CisKKy8qIHRoZXJlIGFyZSA4IGJpdHMgZm9yIGRpdmlkZXIwLCBtYXhpbXVtIGlzIDI1NiAqLworI2RlZmluZSBTREhfQ0xLX0RJVjBfTUFYICAgICAyNTZVTAorCit2b2lkIFNESF9TZXRfY2xvY2soU0RIX1QgKnNkaCwgdWludDMyX3QgdTMyU0RDbG9ja0toeikKK3sKKyAgICBpZighKF9fUEMoKSAmIE5TX09GRlNFVCkpCisgICAgeworICAgICAgICB1aW50MzJfdCB1MzJSYXRlLCB1MzJEaXYxOworICAgICAgICBzdGF0aWMgdWludDMyX3QgdTMyU0RDbGtTcmMgPSAwVUw7CisKKyAgICAgICAgaWYgKHNkaCA9PSBTREgwKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBNMjM1MSBpcyBvbmx5IHN1cHBvcnQgU0RIMCAqLworICAgICAgICAgICAgdTMyU0RDbGtTcmMgPSAoQ0xLLT5DTEtTRUwwICYgQ0xLX0NMS1NFTDBfU0RIMFNFTF9Nc2spOworICAgICAgICAgICAgaWYodTMyU0RDbGtTcmMgPT0gQ0xLX0NMS1NFTDBfU0RIMFNFTF9IWFQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX1NESF9SZWZlcmVuY2VDbG9jayA9IChDTEtfR2V0SFhURnJlcSgpIC8gMTAwMFVMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYodTMyU0RDbGtTcmMgPT0gQ0xLX0NMS1NFTDBfU0RIMFNFTF9ISVJDKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIF9TREhfUmVmZXJlbmNlQ2xvY2sgPSAoX19ISVJDIC8gMTAwMFVMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYodTMyU0RDbGtTcmMgPT0gQ0xLX0NMS1NFTDBfU0RIMFNFTF9QTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX1NESF9SZWZlcmVuY2VDbG9jayA9IChDTEtfR2V0UExMQ2xvY2tGcmVxKCkgLyAxMDAwVUwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZih1MzJTRENsa1NyYyA9PSBDTEtfQ0xLU0VMMF9TREgwU0VMX0hDTEspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX1NESF9SZWZlcmVuY2VDbG9jayA9IChDTEtfR2V0SENMS0ZyZXEoKSAvIDEwMDBVTCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZih1MzJTRENsb2NrS2h6ID49IDUwMDAwVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlNEQ2xvY2tLaHogPSA1MDAwMFVMOworICAgICAgICB9CisgICAgICAgIHUzMlJhdGUgPSBfU0RIX1JlZmVyZW5jZUNsb2NrIC8gdTMyU0RDbG9ja0toejsKKworICAgICAgICAvKiBjaG9vc2Ugc2xvd2VyIGNsb2NrIGlmIHN5c3RlbSBjbG9jayBjYW5ub3QgZGl2aXNpYmxlIGJ5IHdhbnRlZCBjbG9jayAqLworICAgICAgICBpZihfU0RIX1JlZmVyZW5jZUNsb2NrICUgdTMyU0RDbG9ja0toeiAhPSAwVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlJhdGUrKzsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHUzMlJhdGUgPj0gU0RIX0NMS19ESVYwX01BWCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyUmF0ZSA9IFNESF9DTEtfRElWMF9NQVg7CisgICAgICAgIH0KKworICAgICAgICAvKiAtLS0gY2FsY3VsYXRlIHRoZSBzZWNvbmQgZGl2aWRlciBDTEtESVYwW1NESE9TVF9OXSAqLworICAgICAgICBpZih1MzJSYXRlID09IDBVTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRGl2MSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkRpdjEgPSAoKHUzMlJhdGUgLSAxVUwpICYgMHhGRlVMKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIC0tLSBzZXR1cCByZWdpc3RlciAqLworICAgICAgICBpZiAoc2RoID09IFNESDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE0yMzUxIGlzIG9ubHkgc3VwcG9ydCBTREgwICovCisgICAgICAgICAgICBDTEstPkNMS0RJVjAgJj0gfkNMS19DTEtESVYwX1NESDBESVZfTXNrOworICAgICAgICAgICAgQ0xLLT5DTEtESVYwIHw9ICh1MzJEaXYxIDw8IENMS19DTEtESVYwX1NESDBESVZfUG9zKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordWludDMyX3QgU0RIX0NhcmREZXRlY3Rpb24oU0RIX1QgKnNkaCkKK3sKKyAgICB1aW50MzJfdCBpLCB1MzJTdGF0dXMgPSAodWludDMyX3QpVFJVRTsKKyAgICBTREhfSU5GT19UICpwU0Q7CisKKyAgICAvKiBNMjM1MSBpcyBvbmx5IHN1cHBvcnQgU0RIMCAqLworICAgIHBTRCA9ICZTRDA7CisKKyAgICBpZihzZGgtPklOVEVOICYgU0RIX0lOVEVOX0NEU1JDX01zaykgICAvKiBDYXJkIGRldGVjdCBwaW4gZnJvbSBHUElPICovCisgICAgeworICAgICAgICBpZihzZGgtPklOVFNUUyAmIFNESF9JTlRTVFNfQ0RTVFNfTXNrKSAgIC8qIENhcmQgcmVtb3ZlICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHBTRC0+SXNDYXJkSW5zZXJ0ID0gKHVpbnQ4X3QpRkFMU0U7CisgICAgICAgICAgICB1MzJTdGF0dXMgPSAodWludDMyX3QpRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwU0QtPklzQ2FyZEluc2VydCA9ICh1aW50OF90KVRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZighKHNkaC0+SU5URU4gJiBTREhfSU5URU5fQ0RTUkNfTXNrKSkKKyAgICB7CisgICAgICAgIHNkaC0+Q1RMIHw9IFNESF9DVExfQ0xLS0VFUF9Nc2s7CisgICAgICAgIGZvcihpID0gMFVMOyBpIDwgNTAwMFVMOyBpKyspIHt9CisKKyAgICAgICAgaWYoc2RoLT5JTlRTVFMgJiBTREhfSU5UU1RTX0NEU1RTX01zaykgLyogQ2FyZCBpbnNlcnQgKi8KKyAgICAgICAgeworICAgICAgICAgICAgcFNELT5Jc0NhcmRJbnNlcnQgPSAodWludDhfdClUUlVFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcFNELT5Jc0NhcmRJbnNlcnQgPSAodWludDhfdClGQUxTRTsKKyAgICAgICAgICAgIHUzMlN0YXR1cyA9ICh1aW50MzJfdClGQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIHNkaC0+Q1RMICY9IH5TREhfQ1RMX0NMS0tFRVBfTXNrOworICAgIH0KKworICAgIHJldHVybiB1MzJTdGF0dXM7Cit9CisKKworLyogSW5pdGlhbCAqLwordWludDMyX3QgU0RIX0luaXQoU0RIX1QgKnNkaCkKK3sKKyAgICB1aW50MzJfdCB2b2xhdGlsZSBpLCB1MzJTdGF0dXM7CisgICAgdWludDMyX3QgdTMyUmVzcDsKKyAgICB1aW50MzJfdCBhdTMyQ0lEQnVmZmVyWzRdOworICAgIHVpbnQzMl90IHZvbGF0aWxlIHUzMkNtZFRpbWVPdXQ7CisgICAgU0RIX0lORk9fVCAqcFNEOworCisgICAgLyogTTIzNTEgaXMgb25seSBzdXBwb3J0IFNESDAgKi8KKyAgICBwU0QgPSAmU0QwOworCisgICAgLyogc2V0IHRoZSBjbG9jayB0byAzMDBLSHogKi8KKyAgICBTREhfU2V0X2Nsb2NrKHNkaCwgMzAwVUwpOworCisgICAgLyogcG93ZXIgT04gNzQgY2xvY2sgKi8KKyAgICBzZGgtPkNUTCB8PSBTREhfQ1RMX0NMSzc0T0VOX01zazsKKworICAgIHdoaWxlKHNkaC0+Q1RMICYgU0RIX0NUTF9DTEs3NE9FTl9Nc2spCisgICAgeworICAgICAgICBpZihwU0QtPklzQ2FyZEluc2VydCA9PSAodWludDhfdClGQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNESF9OT19TRF9DQVJEOworICAgICAgICB9CisgICAgfQorCisgICAgU0RIX1NEQ29tbWFuZChzZGgsIDBVTCwgMFVMKTsgICAgICAgIC8qIHJlc2V0IGFsbCBjYXJkcyAqLworICAgIGZvcihpID0gMHgxMDAwVUw7IGkgPiAwVUw7IGktLSkge30KKworICAgIC8qIGluaXRpYWwgU0RIQyAqLworICAgIF9TREhfdVI3X0NNRCA9IDFVTDsKKyAgICB1MzJDbWRUaW1lT3V0ID0gMHhGRkZGRlVMOworCisgICAgaSA9IFNESF9TRENtZEFuZFJzcChzZGgsIDhVTCwgMHgwMDAwMDE1NVVMLCB1MzJDbWRUaW1lT3V0KTsKKyAgICBpZihpID09IFN1Y2Nlc3NmdWwpCisgICAgeworICAgICAgICAvKiBTRCAyLjAgKi8KKyAgICAgICAgU0RIX1NEQ21kQW5kUnNwKHNkaCwgNTVVTCwgMHgwMFVMLCB1MzJDbWRUaW1lT3V0KTsKKyAgICAgICAgZ191OFIzRmxhZyA9IDFVTDsKKyAgICAgICAgU0RIX1NEQ21kQW5kUnNwKHNkaCwgNDFVTCwgMHg0MGZmODAwMFVMLCB1MzJDbWRUaW1lT3V0KTsgLyogMi43di0zLjZ2ICovCisgICAgICAgIHUzMlJlc3AgPSBzZGgtPlJFU1AwOworCisgICAgICAgIHdoaWxlKCEodTMyUmVzcCAmIDB4MDA4MDAwMDBVTCkpICAgICAgICAgLyogY2hlY2sgaWYgY2FyZCBpcyByZWFkeSAqLworICAgICAgICB7CisgICAgICAgICAgICBTREhfU0RDbWRBbmRSc3Aoc2RoLCA1NVVMLCAweDAwVUwsIHUzMkNtZFRpbWVPdXQpOworICAgICAgICAgICAgZ191OFIzRmxhZyA9IDFVTDsKKyAgICAgICAgICAgIFNESF9TRENtZEFuZFJzcChzZGgsIDQxVUwsIDB4NDBmZjgwMDBVTCwgdTMyQ21kVGltZU91dCk7IC8qIDMuMHYtMy40diAqLworICAgICAgICAgICAgdTMyUmVzcCA9IHNkaC0+UkVTUDA7CisgICAgICAgIH0KKyAgICAgICAgaWYodTMyUmVzcCAmIDB4MDA0MDAwMDBVTCkKKyAgICAgICAgeworICAgICAgICAgICAgcFNELT5DYXJkVHlwZSA9IFNESF9UWVBFX1NEX0hJR0g7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwU0QtPkNhcmRUeXBlID0gU0RIX1RZUEVfU0RfTE9XOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFNEIDEuMSAqLworICAgICAgICBTREhfU0RDb21tYW5kKHNkaCwgMFVMLCAwVUwpOyAgICAgICAgLyogcmVzZXQgYWxsIGNhcmRzICovCisgICAgICAgIGZvcihpID0gMHgxMDBVTDsgaSA+IDBVTDsgaS0tKSB7fQorCisgICAgICAgIGkgPSBTREhfU0RDbWRBbmRSc3Aoc2RoLCA1NVVMLCAweDAwVUwsIHUzMkNtZFRpbWVPdXQpOworICAgICAgICBpZihpID09IDJVTCkgICAgICAvKiBNTUMgbWVtb3J5ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIFNESF9TRENvbW1hbmQoc2RoLCAwVUwsIDBVTCk7ICAgICAgICAvKiByZXNldCAqLworICAgICAgICAgICAgZm9yKGkgPSAweDEwMFVMOyBpID4gMFVMOyBpLS0pIHt9CisKKyAgICAgICAgICAgIGdfdThSM0ZsYWcgPSAxVUw7CisKKyAgICAgICAgICAgIGlmKFNESF9TRENtZEFuZFJzcChzZGgsIDFVTCwgMHg0MGZmODAwMFVMLCB1MzJDbWRUaW1lT3V0KSAhPSAyVUwpICAgICAvKiBlTU1DIG1lbW9yeSAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMlJlc3AgPSBzZGgtPlJFU1AwOworICAgICAgICAgICAgICAgIHdoaWxlKCEodTMyUmVzcCAmIDB4MDA4MDAwMDBVTCkpICAgICAgICAgLyogY2hlY2sgaWYgY2FyZCBpcyByZWFkeSAqLworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ191OFIzRmxhZyA9IDFVTDsKKworICAgICAgICAgICAgICAgICAgICBTREhfU0RDbWRBbmRSc3Aoc2RoLCAxVUwsIDB4NDBmZjgwMDBVTCwgdTMyQ21kVGltZU91dCk7ICAgICAgLyogaGlnaCB2b2x0YWdlICovCisgICAgICAgICAgICAgICAgICAgIHUzMlJlc3AgPSBzZGgtPlJFU1AwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKHUzMlJlc3AgJiAweDAwNDAwMDAwVUwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwU0QtPkNhcmRUeXBlID0gU0RIX1RZUEVfRU1NQzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcFNELT5DYXJkVHlwZSA9IFNESF9UWVBFX01NQzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcFNELT5DYXJkVHlwZSA9IFNESF9UWVBFX1VOS05PV047CisgICAgICAgICAgICAgICAgcmV0dXJuIFNESF9FUlJfREVWSUNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoaSA9PSAwVUwpICAgICAgLyogU0QgTWVtb3J5ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGdfdThSM0ZsYWcgPSAxVUw7CisgICAgICAgICAgICBTREhfU0RDbWRBbmRSc3Aoc2RoLCA0MVVMLCAweDAwZmY4MDAwVUwsIHUzMkNtZFRpbWVPdXQpOyAvKiAzLjB2LTMuNHYgKi8KKyAgICAgICAgICAgIHUzMlJlc3AgPSBzZGgtPlJFU1AwOworICAgICAgICAgICAgd2hpbGUoISh1MzJSZXNwICYgMHgwMDgwMDAwMFVMKSkgICAgICAgICAvKiBjaGVjayBpZiBjYXJkIGlzIHJlYWR5ICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU0RIX1NEQ21kQW5kUnNwKHNkaCwgNTVVTCwgMHgwMFVMLCB1MzJDbWRUaW1lT3V0KTsKKyAgICAgICAgICAgICAgICBnX3U4UjNGbGFnID0gMVVMOworICAgICAgICAgICAgICAgIFNESF9TRENtZEFuZFJzcChzZGgsIDQxVUwsIDB4MDBmZjgwMDBVTCwgdTMyQ21kVGltZU91dCk7IC8qIDMuMHYtMy40diAqLworICAgICAgICAgICAgICAgIHUzMlJlc3AgPSBzZGgtPlJFU1AwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcFNELT5DYXJkVHlwZSA9IFNESF9UWVBFX1NEX0xPVzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBTRC0+Q2FyZFR5cGUgPSBTREhfVFlQRV9VTktOT1dOOworICAgICAgICAgICAgcmV0dXJuIFNESF9JTklUX0VSUk9SOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ01EMiwgQ01EMyAqLworICAgIGlmKHBTRC0+Q2FyZFR5cGUgIT0gU0RIX1RZUEVfVU5LTk9XTikKKyAgICB7CisgICAgICAgIFNESF9TRENtZEFuZFJzcDIoc2RoLCAyVUwsIDB4MDBVTCwgYXUzMkNJREJ1ZmZlcik7CisgICAgICAgIGlmKChwU0QtPkNhcmRUeXBlID09IFNESF9UWVBFX01NQykgfHwgKHBTRC0+Q2FyZFR5cGUgPT0gU0RIX1RZUEVfRU1NQykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCh1MzJTdGF0dXMgPSBTREhfU0RDbWRBbmRSc3Aoc2RoLCAzVUwsIDB4MTAwMDBVTCwgMFVMKSkgIT0gU3VjY2Vzc2Z1bCkgICAgICAgICAvKiBzZXQgUkNBICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHUzMlN0YXR1czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBTRC0+UkNBID0gMHgxMDAwMFVMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcChzZGgsIDNVTCwgMHgwMFVMLCAwVUwpKSAhPSBTdWNjZXNzZnVsKSAgICAgICAgLyogZ2V0IFJDQSAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB1MzJTdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcFNELT5SQ0EgPSAoc2RoLT5SRVNQMCA8PCA4KSAmIDB4ZmZmZjAwMDBVTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBTdWNjZXNzZnVsOworfQorCisKK3VpbnQzMl90IFNESF9Td2l0Y2hUb0hpZ2hTcGVlZChTREhfVCAqc2RoLCBTREhfSU5GT19UICpwU0QpCit7CisgICAgdWludDMyX3Qgdm9sYXRpbGUgdTMyU3RhdHVzID0gMFVMOworICAgIHVpbnQxNl90IHUxNkN1cnJlbnRDb21zdW1wdGlvbiwgdTE2QnVzeVN0YXR1czA7CisKKyAgICAodm9pZClwU0Q7CisgICAgc2RoLT5ETUFTQSA9ICh1aW50MzJfdClfU0RIX3VjU0RIQ0J1ZmZlcjsgICAgLyogc2V0IERNQSB0cmFuc2ZlciBzdGFydGluZyBhZGRyZXNzICovCisgICAgc2RoLT5CTEVOID0gNjNVTDsgICAgLyogNTEyIGJpdCAqLworCisgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcERhdGFJbihzZGgsIDZVTCwgMHgwMGZmZmYwMVVMKSkgIT0gU3VjY2Vzc2Z1bCkKKyAgICB7CisgICAgICAgIHJldHVybiBGYWlsOworICAgIH0KKworICAgIHUxNkN1cnJlbnRDb21zdW1wdGlvbiA9ICh1aW50MTZfdCkoX1NESF91Y1NESENCdWZmZXJbMF0gPDwgOCk7CisgICAgdTE2Q3VycmVudENvbXN1bXB0aW9uIHw9ICh1aW50MTZfdClfU0RIX3VjU0RIQ0J1ZmZlclsxXTsKKyAgICBpZighdTE2Q3VycmVudENvbXN1bXB0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZhaWw7CisgICAgfQorCisgICAgdTE2QnVzeVN0YXR1czAgPSAodWludDE2X3QpKF9TREhfdWNTREhDQnVmZmVyWzI4XSA8PCA4KTsKKyAgICB1MTZCdXN5U3RhdHVzMCB8PSAodWludDE2X3QpX1NESF91Y1NESENCdWZmZXJbMjldOworCisgICAgaWYoIXUxNkJ1c3lTdGF0dXMwKSAgICAvKiBmdW5jdGlvbiByZWFkeSAqLworICAgIHsKKyAgICAgICAgc2RoLT5ETUFTQSA9ICh1aW50MzJfdClfU0RIX3VjU0RIQ0J1ZmZlcjsgICAgICAgIC8qIHNldCBETUEgdHJhbnNmZXIgc3RhcnRpbmcgYWRkcmVzcyAqLworICAgICAgICBzZGgtPkJMRU4gPSA2M1VMOyAgICAvKiA1MTIgYml0ICovCisKKyAgICAgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcERhdGFJbihzZGgsIDZVTCwgMHg4MGZmZmYwMVVMKSkgIT0gU3VjY2Vzc2Z1bCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZhaWw7CisgICAgICAgIH0KKworICAgICAgICAvKiBmdW5jdGlvbiBjaGFuZ2UgdGltaW5nOiA4IGNsb2NrcyAqLworICAgICAgICBzZGgtPkNUTCB8PSBTREhfQ1RMX0NMSzhPRU5fTXNrOworICAgICAgICB3aGlsZShzZGgtPkNUTCAmIFNESF9DVExfQ0xLOE9FTl9Nc2spIHt9CisKKyAgICAgICAgdTE2Q3VycmVudENvbXN1bXB0aW9uID0gKHVpbnQxNl90KShfU0RIX3VjU0RIQ0J1ZmZlclswXSA8PCA4KTsKKyAgICAgICAgdTE2Q3VycmVudENvbXN1bXB0aW9uIHw9ICh1aW50MTZfdClfU0RIX3VjU0RIQ0J1ZmZlclsxXTsKKyAgICAgICAgaWYoIXUxNkN1cnJlbnRDb21zdW1wdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZhaWw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gU3VjY2Vzc2Z1bDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZhaWw7CisgICAgfQorfQorCisKK3VpbnQzMl90IFNESF9TZWxlY3RDYXJkVHlwZShTREhfVCAqc2RoKQoreworICAgIHVpbnQzMl90IHZvbGF0aWxlIHUzMlN0YXR1cyA9IDBVTDsKKyAgICB1aW50MzJfdCB1MzJQYXJhbTsKKyAgICBTREhfSU5GT19UICpwU0Q7CisKKyAgICAvKiBNMjM1MSBpcyBvbmx5IHN1cHBvcnQgU0RIMCAqLworICAgIHBTRCA9ICZTRDA7CisKKyAgICBpZigodTMyU3RhdHVzID0gU0RIX1NEQ21kQW5kUnNwKHNkaCwgN1VMLCBwU0QtPlJDQSwgMFVMKSkgIT0gU3VjY2Vzc2Z1bCkKKyAgICB7CisgICAgICAgIHJldHVybiB1MzJTdGF0dXM7CisgICAgfQorCisgICAgU0RIX0NoZWNrUkIoc2RoKTsKKworICAgIC8qIGlmIFNEIGNhcmQgc2V0IDRiaXQgKi8KKyAgICBpZihwU0QtPkNhcmRUeXBlID09IFNESF9UWVBFX1NEX0hJR0gpCisgICAgeworICAgICAgICBzZGgtPkRNQVNBID0gKHVpbnQzMl90KV9TREhfdWNTREhDQnVmZmVyOyAgICAvKiBzZXQgRE1BIHRyYW5zZmVyIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKyAgICAgICAgc2RoLT5CTEVOID0gMHgwN1VMOyAgLyogNjQgYml0ICovCisKKyAgICAgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcChzZGgsIDU1VUwsIHBTRC0+UkNBLCAwVUwpKSAhPSBTdWNjZXNzZnVsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdTMyU3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgc2RoLT5ETUFDVEwgfD0gMHgyOworICAgICAgICB3aGlsZShzZGgtPkRNQUNUTCAmIDB4Mikge30KKworICAgICAgICBpZigodTMyU3RhdHVzID0gU0RIX1NEQ21kQW5kUnNwRGF0YUluKHNkaCwgNTFVTCwgMHgwMFVMKSkgIT0gU3VjY2Vzc2Z1bCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHUzMlN0YXR1czsKKyAgICAgICAgfQorCisgICAgICAgIGlmKChfU0RIX3VjU0RIQ0J1ZmZlclswXSAmIDB4ZlVMKSA9PSAweGZVTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyU3RhdHVzID0gU0RIX1N3aXRjaFRvSGlnaFNwZWVkKHNkaCwgcFNEKTsKKyAgICAgICAgICAgIGlmKHUzMlN0YXR1cyA9PSBTdWNjZXNzZnVsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGRpdmlkZXIgKi8KKyAgICAgICAgICAgICAgICBTREhfU2V0X2Nsb2NrKHNkaCwgU0RIQ19GUkVRKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCh1MzJTdGF0dXMgPSBTREhfU0RDbWRBbmRSc3Aoc2RoLCA1NVVMLCBwU0QtPlJDQSwgMFVMKSkgIT0gU3VjY2Vzc2Z1bCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHUzMlN0YXR1czsKKyAgICAgICAgfQorICAgICAgICBpZigodTMyU3RhdHVzID0gU0RIX1NEQ21kQW5kUnNwKHNkaCwgNlVMLCAweDAyVUwsIDBVTCkpICE9IFN1Y2Nlc3NmdWwpICAgIC8qIHNldCBidXMgd2lkdGggKi8KKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHUzMlN0YXR1czsKKyAgICAgICAgfQorCisgICAgICAgIHNkaC0+Q1RMIHw9IFNESF9DVExfREJXX01zazsKKyAgICB9CisgICAgZWxzZSBpZihwU0QtPkNhcmRUeXBlID09IFNESF9UWVBFX1NEX0xPVykKKyAgICB7CisgICAgICAgIHNkaC0+RE1BU0EgPSAodWludDMyX3QpIF9TREhfdWNTREhDQnVmZmVyOyAvKiBzZXQgRE1BIHRyYW5zZmVyIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKyAgICAgICAgc2RoLT5CTEVOID0gMHgwN1VMOyAgLyogNjQgYml0ICovCisKKyAgICAgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcChzZGgsIDU1VUwsIHBTRC0+UkNBLCAwVUwpKSAhPSBTdWNjZXNzZnVsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdTMyU3RhdHVzOworICAgICAgICB9CisgICAgICAgIGlmKCh1MzJTdGF0dXMgPSBTREhfU0RDbWRBbmRSc3BEYXRhSW4oc2RoLCA1MVVMLCAweDAwVUwpKSAhPSBTdWNjZXNzZnVsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdTMyU3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgLyogc2V0IGRhdGEgYnVzIHdpZHRoLiBBQ01ENiBmb3IgU0QgY2FyZCwgU0RDUl9EQlcgZm9yIGhvc3QuICovCisgICAgICAgIGlmKCh1MzJTdGF0dXMgPSBTREhfU0RDbWRBbmRSc3Aoc2RoLCA1NVVMLCBwU0QtPlJDQSwgMFVMKSkgIT0gU3VjY2Vzc2Z1bCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHUzMlN0YXR1czsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCh1MzJTdGF0dXMgPSBTREhfU0RDbWRBbmRSc3Aoc2RoLCA2VUwsIDB4MDJVTCwgMFVMKSkgIT0gU3VjY2Vzc2Z1bCkgICAgLyogc2V0IGJ1cyB3aWR0aCAqLworICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdTMyU3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgc2RoLT5DVEwgfD0gU0RIX0NUTF9EQldfTXNrOworICAgIH0KKyAgICBlbHNlIGlmKChwU0QtPkNhcmRUeXBlID09IFNESF9UWVBFX01NQykgfHwgKHBTRC0+Q2FyZFR5cGUgPT0gU0RIX1RZUEVfRU1NQykpCisgICAgeworCisgICAgICAgIGlmKHBTRC0+Q2FyZFR5cGUgPT0gU0RIX1RZUEVfTU1DKQorICAgICAgICB7CisgICAgICAgICAgICBzZGgtPkNUTCAmPSB+U0RIX0NUTF9EQldfTXNrOworICAgICAgICB9CisKKyAgICAgICAgLyogLS0tIHNlbnQgQ01ENiB0byBNTUMgY2FyZCB0byBzZXQgYnVzIHdpZHRoIHRvIDQgYml0cyBtb2RlICovCisgICAgICAgIC8qIHNldCBDTUQ2IGFyZ3VtZW50IEFjY2VzcyBmaWVsZCB0byAzLCBJbmRleCB0byAxODMsIFZhbHVlIHRvIDEgKDQtYml0IG1vZGUpICovCisgICAgICAgIHUzMlBhcmFtID0gKDNVTCA8PCAyNCkgfCAoMTgzVUwgPDwgMTYpIHwgKDFVTCA8PCA4KTsKKyAgICAgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcChzZGgsIDZVTCwgdTMyUGFyYW0sIDBVTCkpICE9IFN1Y2Nlc3NmdWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB1MzJTdGF0dXM7CisgICAgICAgIH0KKyAgICAgICAgU0RIX0NoZWNrUkIoc2RoKTsKKworICAgICAgICBzZGgtPkNUTCB8PSBTREhfQ1RMX0RCV19Nc2s7IC8qIHNldCBidXMgd2lkdGggdG8gNC1iaXQgbW9kZSBmb3IgU0QgaG9zdCBjb250cm9sbGVyICovCisgICAgfQorCisgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcChzZGgsIDE2VUwsIFNESF9CTE9DS19TSVpFLCAwVUwpKSAhPSBTdWNjZXNzZnVsKSAgLyogc2V0IGJsb2NrIGxlbmd0aCAqLworICAgIHsKKyAgICAgICAgcmV0dXJuIHUzMlN0YXR1czsKKyAgICB9CisgICAgc2RoLT5CTEVOID0gU0RIX0JMT0NLX1NJWkUgLSAxVUw7ICAgICAgICAgICAvKiBzZXQgdGhlIGJsb2NrIHNpemUgKi8KKworICAgIFNESF9TRENvbW1hbmQoc2RoLCA3VUwsIDBVTCk7CisgICAgc2RoLT5DVEwgfD0gU0RIX0NUTF9DTEs4T0VOX01zazsKKyAgICB3aGlsZShzZGgtPkNUTCAmIFNESF9DVExfQ0xLOE9FTl9Nc2spIHt9CisKKyAgICBzZGgtPklOVEVOIHw9IFNESF9JTlRFTl9CTEtESUVOX01zazsKKworICAgIHJldHVybiBTdWNjZXNzZnVsOworfQorCit2b2lkIFNESF9HZXRfU0RfaW5mbyhTREhfVCAqc2RoKQoreworICAgIHVpbnQzMl90IHUzMlJMZW4sIHUzMkNTaXplLCB1MzJNdWx0LCB1MzJTaXplOworICAgIHVpbnQzMl90IGF1MzJCdWZmZXJbNF07CisgICAgU0RIX0lORk9fVCAqcFNEOworCisgICAgLyogTTIzNTEgaXMgb25seSBzdXBwb3J0IFNESDAgKi8KKyAgICBwU0QgPSAmU0QwOworCisgICAgU0RIX1NEQ21kQW5kUnNwMihzZGgsIDlVTCwgcFNELT5SQ0EsIGF1MzJCdWZmZXIpOworCisgICAgaWYoKHBTRC0+Q2FyZFR5cGUgPT0gU0RIX1RZUEVfTU1DKSB8fCAocFNELT5DYXJkVHlwZSA9PSBTREhfVFlQRV9FTU1DKSkKKyAgICB7CisgICAgICAgIC8qIGZvciBNTUMvZU1NQyBjYXJkICovCisgICAgICAgIGlmKChhdTMyQnVmZmVyWzBdICYgMHhjMDAwMDAwMFVMKSA9PSAweGMwMDAwMDAwVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENTRF9TVFJVQ1RVUkUgWzEyNzoxMjZdIGlzIDMgKi8KKyAgICAgICAgICAgIC8qIENTRCB2ZXJzaW9uIGRlcGVuZCBvbiBFWFRfQ1NEIHJlZ2lzdGVyIGluIGVNTUMgdjQuNCBmb3IgY2FyZCBzaXplID4gMkdCICovCisgICAgICAgICAgICBTREhfU0RDbWRBbmRSc3Aoc2RoLCA3VUwsIHBTRC0+UkNBLCAwVUwpOworCisgICAgICAgICAgICBzZGgtPkRNQVNBID0gKHVpbnQzMl90KV9TREhfdWNTREhDQnVmZmVyOyAgLyogc2V0IERNQSB0cmFuc2ZlciBzdGFydGluZyBhZGRyZXNzICovCisgICAgICAgICAgICBzZGgtPkJMRU4gPSA1MTFVTDsgIC8qIHJlYWQgNTEyIGJ5dGVzIGZvciBFWFRfQ1NEICovCisKKyAgICAgICAgICAgIGlmKFNESF9TRENtZEFuZFJzcERhdGFJbihzZGgsIDhVTCwgMHgwMFVMKSAhPSBTdWNjZXNzZnVsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU0RIX1NEQ29tbWFuZChzZGgsIDdVTCwgMFVMKTsKKyAgICAgICAgICAgIHNkaC0+Q1RMIHw9IFNESF9DVExfQ0xLOE9FTl9Nc2s7CisgICAgICAgICAgICB3aGlsZShzZGgtPkNUTCAmIFNESF9DVExfQ0xLOE9FTl9Nc2spIHt9CisKKyAgICAgICAgICAgIHBTRC0+dG90YWxTZWN0b3JOID0gKHVpbnQzMl90KV9TREhfdWNTREhDQnVmZmVyWzIxNV0gPDwgMjQ7CisgICAgICAgICAgICBwU0QtPnRvdGFsU2VjdG9yTiB8PSAodWludDMyX3QpX1NESF91Y1NESENCdWZmZXJbMjE0XSA8PCAxNjsKKyAgICAgICAgICAgIHBTRC0+dG90YWxTZWN0b3JOIHw9ICh1aW50MzJfdClfU0RIX3VjU0RIQ0J1ZmZlclsyMTNdIDw8IDg7CisgICAgICAgICAgICBwU0QtPnRvdGFsU2VjdG9yTiB8PSAodWludDMyX3QpX1NESF91Y1NESENCdWZmZXJbMjEyXTsKKyAgICAgICAgICAgIHBTRC0+ZGlza1NpemUgPSBwU0QtPnRvdGFsU2VjdG9yTiAvIDJVTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENTRCB2ZXJzaW9uIHYxLjAvMS4xLzEuMiBpbiBlTU1DIHY0LjQgc3BlYyBmb3IgY2FyZCBzaXplIDw9IDJHQiAqLworICAgICAgICAgICAgdTMyUkxlbiA9IChhdTMyQnVmZmVyWzFdICYgMHgwMDBmMDAwMFVMKSA+PiAxNjsKKyAgICAgICAgICAgIHUzMkNTaXplID0gKChhdTMyQnVmZmVyWzFdICYgMHgwMDAwMDNmZlVMKSA8PCAyKSB8ICgoYXUzMkJ1ZmZlclsyXSAmIDB4YzAwMDAwMDBVTCkgPj4gMzApOworICAgICAgICAgICAgdTMyTXVsdCA9IChhdTMyQnVmZmVyWzJdICYgMHgwMDAzODAwMFVMKSA+PiAxNTsKKyAgICAgICAgICAgIHUzMlNpemUgPSAodTMyQ1NpemUgKyAxVUwpICogKDFVTCA8PCAodTMyTXVsdCArIDJVTCkpICogKDFVTCA8PCB1MzJSTGVuKTsKKworICAgICAgICAgICAgcFNELT5kaXNrU2l6ZSA9IHUzMlNpemUgLyAxMDI0VUw7CisgICAgICAgICAgICBwU0QtPnRvdGFsU2VjdG9yTiA9IHUzMlNpemUgLyA1MTJVTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZihhdTMyQnVmZmVyWzBdICYgMHhjMDAwMDAwMFVMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDU2l6ZSA9ICgoYXUzMkJ1ZmZlclsxXSAmIDB4MDAwMDAwM2ZVTCkgPDwgMTYpIHwgKChhdTMyQnVmZmVyWzJdICYgMHhmZmZmMDAwMFVMKSA+PiAxNik7CisgICAgICAgICAgICB1MzJTaXplID0gKHUzMkNTaXplICsgMVVMKSAqIDUxMlVMOyAgLyogS2J5dGVzICovCisKKyAgICAgICAgICAgIHBTRC0+ZGlza1NpemUgPSB1MzJTaXplOworICAgICAgICAgICAgcFNELT50b3RhbFNlY3Rvck4gPSB1MzJTaXplIDw8IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJSTGVuID0gKGF1MzJCdWZmZXJbMV0gJiAweDAwMGYwMDAwVUwpID4+IDE2OworICAgICAgICAgICAgdTMyQ1NpemUgPSAoKGF1MzJCdWZmZXJbMV0gJiAweDAwMDAwM2ZmVUwpIDw8IDIpIHwgKChhdTMyQnVmZmVyWzJdICYgMHhjMDAwMDAwMFVMKSA+PiAzMCk7CisgICAgICAgICAgICB1MzJNdWx0ID0gKGF1MzJCdWZmZXJbMl0gJiAweDAwMDM4MDAwVUwpID4+IDE1OworICAgICAgICAgICAgdTMyU2l6ZSA9ICh1MzJDU2l6ZSArIDFVTCkgKiAoMVVMIDw8ICh1MzJNdWx0ICsgMlVMKSkgKiAoMVVMIDw8IHUzMlJMZW4pOworCisgICAgICAgICAgICBwU0QtPmRpc2tTaXplID0gdTMyU2l6ZSAvIDEwMjRVTDsKKyAgICAgICAgICAgIHBTRC0+dG90YWxTZWN0b3JOID0gdTMyU2l6ZSAvIDUxMlVMOworICAgICAgICB9CisgICAgfQorICAgIHBTRC0+c2VjdG9yU2l6ZSA9IChpbnQpNTEyVUw7Cit9CisKKy8qKiBAZW5kY29uZCBISURERU5fU1lNQk9MUyAqLworCisKKy8qKgorICogIEBicmllZiAgVGhpcyBmdW5jdGlvbiB1c2UgdG8gcmVzZXQgU0QgZnVuY3Rpb24gYW5kIHNlbGVjdCBjYXJkIGRldGVjdGlvbiBzb3VyY2UgYW5kIHBpbi4KKyAqCisgKiAgQHBhcmFtW2luXSAgc2RoICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU0RIIG1vZHVsZS4KKyAqICBAcGFyYW1baW5dICB1MzJDYXJkRGV0U3JjICAgU2VsZWN0IGNhcmQgZGV0ZWN0aW9uIHBpbiBmcm9tIEdQSU8gb3IgREFUMyBwaW4uICggXHJlZiBDYXJkRGV0ZWN0X0Zyb21fR1BJTyAvIFxyZWYgQ2FyZERldGVjdF9Gcm9tX0RBVDMpCisgKgorICogIEByZXR1cm4gTm9uZQorICovCit2b2lkIFNESF9PcGVuKFNESF9UICpzZGgsIHVpbnQzMl90IHUzMkNhcmREZXRTcmMpCit7CisgICAgLyogZW5hYmxlIERNQUMgKi8KKyAgICBzZGgtPkRNQUNUTCA9IFNESF9ETUFDVExfRE1BUlNUX01zazsKKyAgICB3aGlsZShzZGgtPkRNQUNUTCAmIFNESF9ETUFDVExfRE1BUlNUX01zaykge30KKworICAgIHNkaC0+RE1BQ1RMID0gU0RIX0RNQUNUTF9ETUFFTl9Nc2s7CisKKyAgICAvKiBSZXNldCBGTUkgKi8KKyAgICBzZGgtPkdDVEwgPSBTREhfR0NUTF9HQ1RMUlNUX01zayB8IFNESF9HQ1RMX1NERU5fTXNrOyAgICAgICAgLyogU3RhcnQgcmVzZXQgRk1JIGNvbnRyb2xsZXIuICovCisgICAgd2hpbGUoc2RoLT5HQ1RMICYgU0RIX0dDVExfR0NUTFJTVF9Nc2spIHt9CisKKyAgICBtZW1zZXQoJlNEMCwgMCwgc2l6ZW9mKFNESF9JTkZPX1QpKTsKKworICAgIC8qIGVuYWJsZSBTRCAqLworICAgIHNkaC0+R0NUTCA9IFNESF9HQ1RMX1NERU5fTXNrOworCisgICAgaWYodTMyQ2FyZERldFNyYyAmIENhcmREZXRlY3RfRnJvbV9EQVQzKQorICAgIHsKKyAgICAgICAgc2RoLT5JTlRFTiAmPSB+U0RIX0lOVEVOX0NEU1JDX01zazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2RoLT5JTlRFTiB8PSBTREhfSU5URU5fQ0RTUkNfTXNrOworICAgIH0KKyAgICBzZGgtPklOVEVOIHw9IFNESF9JTlRFTl9DRElFTl9Nc2s7CisKKyAgICBzZGgtPkNUTCB8PSBTREhfQ1RMX0NUTFJTVF9Nc2s7ICAgICAvKiBTRCBzb2Z0d2FyZSByZXNldCAqLworICAgIHdoaWxlKHNkaC0+Q1RMICYgU0RIX0NUTF9DVExSU1RfTXNrKSB7fQorCit9CisKKy8qKgorICogIEBicmllZiAgVGhpcyBmdW5jdGlvbiB1c2UgdG8gaW5pdGlhbCBTRCBjYXJkLgorICoKKyAqICBAcGFyYW1baW5dICAgIHNkaCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNESCBtb2R1bGUuCisgKgorICogIEByZXR1cm4gTm9uZQorICoKKyAqICBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhbCBTRCBjYXJkLgorICogICAgICAgICAgIFNEIGluaXRpYWwgc3RhdGUgbmVlZHMgNDAwS0h6IGNsb2NrIG91dHB1dCwgZHJpdmVyIHdpbGwgdXNlIEhJUkMgZm9yIFNEIGluaXRpYWwgY2xvY2sgc291cmNlLgorICogICAgICAgICAgIEFuZCB0aGVuIHN3aXRjaCBiYWNrIHRvIHRoZSB1c2VyJ3Mgc2V0dGluZy4KKyAqLwordWludDMyX3QgU0RIX1Byb2JlKFNESF9UICpzZGgpCit7CisgICAgdWludDMyX3QgdTMyVmFsOworCisgICAgLyogRGlzYWJsZSBGTUkvU0QgaG9zdCBpbnRlcnJ1cHQgKi8KKyAgICBzZGgtPkdJTlRFTiA9IDBVTDsKKworICAgIHNkaC0+Q1RMICY9IH5TREhfQ1RMX1NETldSX01zazsKKyAgICBzZGgtPkNUTCB8PSAgMHgwOVVMIDw8IFNESF9DVExfU0ROV1JfUG9zOyAgICAgICAgIC8qIHNldCBTRE5XUiA9IDkgKi8KKyAgICBzZGgtPkNUTCAmPSB+U0RIX0NUTF9CTEtDTlRfTXNrOworICAgIHNkaC0+Q1RMIHw9ICAweDAxVUwgPDwgU0RIX0NUTF9CTEtDTlRfUG9zOyAgICAgICAgICAgLyogc2V0IEJMS0NOVCA9IDEgKi8KKyAgICBzZGgtPkNUTCAmPSB+U0RIX0NUTF9EQldfTXNrOyAgICAgICAgICAgICAgIC8qIFNEIDEtYml0IGRhdGEgYnVzICovCisKKyAgICBpZighKFNESF9DYXJkRGV0ZWN0aW9uKHNkaCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNESF9OT19TRF9DQVJEOworICAgIH0KKworICAgIGlmKCh1MzJWYWwgPSBTREhfSW5pdChzZGgpKSAhPSAwVUwpCisgICAgeworICAgICAgICByZXR1cm4gdTMyVmFsOworICAgIH0KKworICAgIC8qIGRpdmlkZXIgKi8KKyAgICBpZihTRDAuQ2FyZFR5cGUgPT0gU0RIX1RZUEVfTU1DKQorICAgIHsKKyAgICAgICAgU0RIX1NldF9jbG9jayhzZGgsIE1NQ19GUkVRKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU0RIX1NldF9jbG9jayhzZGgsIFNEX0ZSRVEpOworICAgIH0KKyAgICBTREhfR2V0X1NEX2luZm8oc2RoKTsKKworICAgIGlmKCh1MzJWYWwgPSBTREhfU2VsZWN0Q2FyZFR5cGUoc2RoKSkgIT0gMFVMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHUzMlZhbDsKKyAgICB9CisKKyAgICBTREhfb2sgPSAxOworICAgIHJldHVybiAwVUw7Cit9CisKKy8qKgorICogIEBicmllZiAgVGhpcyBmdW5jdGlvbiB1c2UgdG8gcmVhZCBkYXRhIGZyb20gU0QgY2FyZC4KKyAqCisgKiAgQHBhcmFtW2luXSAgICAgc2RoICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNESCBtb2R1bGUuCisgKiAgQHBhcmFtW291dF0gICAgcHU4QnVmQWRkciAgICBUaGUgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGRhdGEgZnJvbSBTRCBjYXJkLgorICogIEBwYXJhbVtpbl0gICAgIHUzMlN0YXJ0U2VjICAgVGhlIHN0YXJ0IHJlYWQgc2VjdG9yIGFkZHJlc3MuCisgKiAgQHBhcmFtW2luXSAgICAgdTMyU2VjQ291bnQgICBUaGUgdGhlIHJlYWQgc2VjdG9yIG51bWJlciBvZiBkYXRhCisgKgorICogIEByZXR1cm4gTm9uZQorICovCit1aW50MzJfdCBTREhfUmVhZChTREhfVCAqc2RoLCB1aW50OF90ICpwdThCdWZBZGRyLCB1aW50MzJfdCB1MzJTdGFydFNlYywgdWludDMyX3QgdTMyU2VjQ291bnQpCit7CisgICAgdWludDMyX3Qgdm9sYXRpbGUgdTMySXNTZW5kQ21kID0gKHVpbnQzMl90KUZBTFNFOworICAgIHVpbnQzMl90IHZvbGF0aWxlIHUzMlJlZzsKKyAgICB1aW50MzJfdCB2b2xhdGlsZSB1MzJMb29wLCB1MzJTdGF0dXM7CisgICAgdWludDMyX3QgdTMyQmxrU2l6ZSA9IFNESF9CTE9DS19TSVpFOworCisgICAgU0RIX0lORk9fVCAqcFNEOworCisgICAgLyogTTIzNTEgaXMgb25seSBzdXBwb3J0IFNESDAgKi8KKyAgICBwU0QgPSAmU0QwOworCisgICAgLyogLS0tIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KKyAgICBpZih1MzJTZWNDb3VudCA9PSAwVUwpCisgICAgeworICAgICAgICByZXR1cm4gU0RIX1NFTEVDVF9FUlJPUjsKKyAgICB9CisKKyAgICBpZigodTMyU3RhdHVzID0gU0RIX1NEQ21kQW5kUnNwKHNkaCwgN1VMLCBwU0QtPlJDQSwgMFVMKSkgIT0gU3VjY2Vzc2Z1bCkKKyAgICB7CisgICAgICAgIHJldHVybiB1MzJTdGF0dXM7CisgICAgfQorICAgIFNESF9DaGVja1JCKHNkaCk7CisKKyAgICBzZGgtPkJMRU4gPSB1MzJCbGtTaXplIC0gMVVMOyAgICAgICAvKiB0aGUgYWN0dWFsIGJ5dGUgY291bnQgaXMgZXF1YWwgdG8gKFNEQkxFTisxKSAqLworCisgICAgaWYoKHBTRC0+Q2FyZFR5cGUgPT0gU0RIX1RZUEVfU0RfSElHSCkgfHwgKHBTRC0+Q2FyZFR5cGUgPT0gU0RIX1RZUEVfRU1NQykpCisgICAgeworICAgICAgICBzZGgtPkNNREFSRyA9IHUzMlN0YXJ0U2VjOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzZGgtPkNNREFSRyA9IHUzMlN0YXJ0U2VjICogdTMyQmxrU2l6ZTsKKyAgICB9CisKKyAgICBzZGgtPkRNQVNBID0gKHVpbnQzMl90KXB1OEJ1ZkFkZHI7CisKKyAgICB1MzJMb29wID0gdTMyU2VjQ291bnQgLyAyNTVVTDsKKyAgICB3aGlsZSh1MzJMb29wID4gMFVMKQorICAgIHsKKyAgICAgICAgZ191OFNERGF0YVJlYWR5RmxhZyA9ICh1aW50OF90KUZBTFNFOworICAgICAgICB1MzJSZWcgPSBzZGgtPkNUTCAmIH5TREhfQ1RMX0NNRENPREVfTXNrOworICAgICAgICB1MzJSZWcgPSB1MzJSZWcgfCAweGZmMDAwMFVMOyAgIC8qIHNldCBCTEtfQ05UIHRvIDI1NSAqLworICAgICAgICBpZih1MzJJc1NlbmRDbWQgPT0gKHVpbnQzMl90KUZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICBzZGgtPkNUTCA9IHUzMlJlZyB8ICgxOFVMIDw8IDgpIHwgKFNESF9DVExfQ09FTl9Nc2sgfCBTREhfQ1RMX1JJRU5fTXNrIHwgU0RIX0NUTF9ESUVOX01zayk7CisgICAgICAgICAgICB1MzJJc1NlbmRDbWQgPSAodWludDMyX3QpVFJVRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNkaC0+Q1RMID0gdTMyUmVnIHwgU0RIX0NUTF9ESUVOX01zazsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlKCFnX3U4U0REYXRhUmVhZHlGbGFnKQorICAgICAgICB7CisgICAgICAgICAgICBpZihnX3U4U0REYXRhUmVhZHlGbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYocFNELT5Jc0NhcmRJbnNlcnQgPT0gKHVpbnQ4X3QpRkFMU0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNESF9OT19TRF9DQVJEOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoIShzZGgtPklOVFNUUyAmIFNESF9JTlRTVFNfQ1JDN19Nc2spKSAgICAgLyogY2hlY2sgQ1JDNyAqLworICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU0RIX0NSQzdfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBpZighKHNkaC0+SU5UU1RTICYgU0RIX0lOVFNUU19DUkMxNl9Nc2spKSAgICAvKiBjaGVjayBDUkMxNiAqLworICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU0RIX0NSQzE2X0VSUk9SOworICAgICAgICB9CisgICAgICAgIHUzMkxvb3AtLTsKKyAgICB9CisKKyAgICB1MzJMb29wID0gdTMyU2VjQ291bnQgJSAyNTVVTDsKKyAgICBpZih1MzJMb29wICE9IDBVTCkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHUzMlJlZ1RtcDsKKyAgICAgICAgZ191OFNERGF0YVJlYWR5RmxhZyA9ICh1aW50OF90KUZBTFNFOworICAgICAgICB1MzJSZWcgPSBzZGgtPkNUTCAmICh+U0RIX0NUTF9DTURDT0RFX01zayk7CisgICAgICAgIHUzMlJlZyA9IHUzMlJlZyAmICh+U0RIX0NUTF9CTEtDTlRfTXNrKTsKKyAgICAgICAgdTMyUmVnVG1wID0gKHUzMkxvb3AgPDwgMTYpOworICAgICAgICB1MzJSZWcgfD0gdTMyUmVnVG1wOyAgICAvKiBzZXR1cCBTRENSX0JMS0NOVCAqLworCisgICAgICAgIGlmKHUzMklzU2VuZENtZCA9PSAodWludDMyX3QpRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNkaC0+Q1RMID0gdTMyUmVnIHwgKDE4VUwgPDwgOCkgfCAoU0RIX0NUTF9DT0VOX01zayB8IFNESF9DVExfUklFTl9Nc2sgfCBTREhfQ1RMX0RJRU5fTXNrKTsKKyAgICAgICAgICAgIHUzMklzU2VuZENtZCA9ICh1aW50MzJfdClUUlVFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc2RoLT5DVEwgPSB1MzJSZWcgfCBTREhfQ1RMX0RJRU5fTXNrOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUoIWdfdThTRERhdGFSZWFkeUZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHBTRC0+SXNDYXJkSW5zZXJ0ID09ICh1aW50OF90KUZBTFNFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBTREhfTk9fU0RfQ0FSRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCEoc2RoLT5JTlRTVFMgJiBTREhfSU5UU1RTX0NSQzdfTXNrKSkgICAgIC8qIGNoZWNrIENSQzcgKi8KKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNESF9DUkM3X0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgaWYoIShzZGgtPklOVFNUUyAmIFNESF9JTlRTVFNfQ1JDMTZfTXNrKSkgICAgIC8qIGNoZWNrIENSQzE2ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTREhfQ1JDMTZfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZihTREhfU0RDbWRBbmRSc3Aoc2RoLCAxMlVMLCAwVUwsIDBVTCkpICAgICAvKiBzdG9wIGNvbW1hbmQgKi8KKyAgICB7CisgICAgICAgIHJldHVybiBTREhfQ1JDN19FUlJPUjsKKyAgICB9CisgICAgU0RIX0NoZWNrUkIoc2RoKTsKKworICAgIFNESF9TRENvbW1hbmQoc2RoLCA3VUwsIDBVTCk7CisgICAgc2RoLT5DVEwgfD0gU0RIX0NUTF9DTEs4T0VOX01zazsKKyAgICB3aGlsZShzZGgtPkNUTCAmIFNESF9DVExfQ0xLOE9FTl9Nc2spIHt9CisKKyAgICByZXR1cm4gU3VjY2Vzc2Z1bDsKK30KKworLyoqCisgKiAgQGJyaWVmICBUaGlzIGZ1bmN0aW9uIHVzZSB0byB3cml0ZSBkYXRhIHRvIFNEIGNhcmQuCisgKgorICogIEBwYXJhbVtpbl0gICAgc2RoICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNESCBtb2R1bGUuCisgKiAgQHBhcmFtW2luXSAgICBwdThCdWZBZGRyICAgIFRoZSBidWZmZXIgdG8gc2VuZCB0aGUgZGF0YSB0byBTRCBjYXJkLgorICogIEBwYXJhbVtpbl0gICAgdTMyU3RhcnRTZWMgICBUaGUgc3RhcnQgd3JpdGUgc2VjdG9yIGFkZHJlc3MuCisgKiAgQHBhcmFtW2luXSAgICB1MzJTZWNDb3VudCAgIFRoZSB0aGUgd3JpdGUgc2VjdG9yIG51bWJlciBvZiBkYXRhLgorICoKKyAqICBAcmV0dXJuICAgXHJlZiBTREhfU0VMRUNUX0VSUk9SIDogdTMyU2VjQ291bnQgaXMgemVyby4gXG4KKyAqICAgICAgICAgICAgXHJlZiBTREhfTk9fU0RfQ0FSRCA6IFNEIGNhcmQgYmUgcmVtb3ZlZC4gXG4KKyAqICAgICAgICAgICAgXHJlZiBTREhfQ1JDX0VSUk9SIDogQ1JDIGVycm9yIGhhcHBlbi4gXG4KKyAqICAgICAgICAgICAgXHJlZiBTREhfQ1JDN19FUlJPUiA6IENSQzcgZXJyb3IgaGFwcGVuLiBcbgorICogICAgICAgICAgICBccmVmIFN1Y2Nlc3NmdWwgOiBXcml0ZSBkYXRhIHRvIFNEIGNhcmQgc3VjY2Vzcy4KKyAqLwordWludDMyX3QgU0RIX1dyaXRlKFNESF9UICpzZGgsIHVpbnQ4X3QgKnB1OEJ1ZkFkZHIsIHVpbnQzMl90IHUzMlN0YXJ0U2VjLCB1aW50MzJfdCB1MzJTZWNDb3VudCkKK3sKKyAgICB1aW50MzJfdCB2b2xhdGlsZSB1MzJJc1NlbmRDbWQgPSAodWludDMyX3QpRkFMU0U7CisgICAgdWludDMyX3Qgdm9sYXRpbGUgdTMyUmVnOworICAgIHVpbnQzMl90IHZvbGF0aWxlIHUzMkxvb3AsIHUzMlN0YXR1czsKKworICAgIFNESF9JTkZPX1QgKnBTRDsKKworICAgIC8qIE0yMzUxIGlzIG9ubHkgc3VwcG9ydCBTREgwICovCisgICAgcFNEID0gJlNEMDsKKworICAgIC8qIC0tLSBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzICovCisgICAgaWYodTMyU2VjQ291bnQgPT0gMFVMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNESF9TRUxFQ1RfRVJST1I7CisgICAgfQorCisgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcChzZGgsIDdVTCwgcFNELT5SQ0EsIDBVTCkpICE9IFN1Y2Nlc3NmdWwpCisgICAgeworICAgICAgICByZXR1cm4gdTMyU3RhdHVzOworICAgIH0KKworICAgIFNESF9DaGVja1JCKHNkaCk7CisKKyAgICAvKiBBY2NvcmRpbmcgdG8gU0QgU3BlYyB2Mi4wLCB0aGUgd3JpdGUgQ01EIGJsb2NrIHNpemUgTVVTVCBiZSA1MTIsIGFuZCB0aGUgc3RhcnQgYWRkcmVzcyBNVVNUIGJlIDUxMipuLiAqLworICAgIHNkaC0+QkxFTiA9IFNESF9CTE9DS19TSVpFIC0gMVVMOyAgICAgICAgICAgLyogc2V0IHRoZSBibG9jayBzaXplICovCisKKyAgICBpZigocFNELT5DYXJkVHlwZSA9PSBTREhfVFlQRV9TRF9ISUdIKSB8fCAocFNELT5DYXJkVHlwZSA9PSBTREhfVFlQRV9FTU1DKSkKKyAgICB7CisgICAgICAgIHNkaC0+Q01EQVJHID0gdTMyU3RhcnRTZWM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNkaC0+Q01EQVJHID0gdTMyU3RhcnRTZWMgKiBTREhfQkxPQ0tfU0laRTsgIC8qIHNldCBzdGFydCBhZGRyZXNzIGZvciBTRCBDTUQgKi8KKyAgICB9CisKKyAgICBzZGgtPkRNQVNBID0gKHVpbnQzMl90KXB1OEJ1ZkFkZHI7CisgICAgdTMyTG9vcCA9IHUzMlNlY0NvdW50IC8gMjU1VUw7ICAgLyogdGhlIG1heGltdW0gYmxvY2sgY291bnQgaXMgMHhGRj0yNTUgZm9yIHJlZ2lzdGVyIFNEQ1JbQkxLX0NOVF0gKi8KKyAgICB3aGlsZSh1MzJMb29wID4gMFVMKQorICAgIHsKKyAgICAgICAgZ191OFNERGF0YVJlYWR5RmxhZyA9ICh1aW50OF90KUZBTFNFOworICAgICAgICB1MzJSZWcgPSBzZGgtPkNUTCAmIDB4ZmYwMGMwODBVTDsKKyAgICAgICAgdTMyUmVnID0gdTMyUmVnIHwgMHhmZjAwMDBVTDsgICAvKiBzZXQgQkxLX0NOVCB0byAweEZGPTI1NSAqLworICAgICAgICBpZighdTMySXNTZW5kQ21kKQorICAgICAgICB7CisgICAgICAgICAgICBzZGgtPkNUTCA9IHUzMlJlZyB8ICgyNVVMIDw8IDgpIHwgKFNESF9DVExfQ09FTl9Nc2sgfCBTREhfQ1RMX1JJRU5fTXNrIHwgU0RIX0NUTF9ET0VOX01zayk7CisgICAgICAgICAgICB1MzJJc1NlbmRDbWQgPSAodWludDMyX3QpVFJVRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNkaC0+Q1RMID0gdTMyUmVnIHwgU0RIX0NUTF9ET0VOX01zazsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlKCFnX3U4U0REYXRhUmVhZHlGbGFnKQorICAgICAgICB7CisgICAgICAgICAgICBpZihwU0QtPklzQ2FyZEluc2VydCA9PSAodWludDhfdClGQUxTRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gU0RIX05PX1NEX0NBUkQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZigoc2RoLT5JTlRTVFMgJiBTREhfSU5UU1RTX0NSQ0lGX01zaykgIT0gMFVMKSAgICAgIC8qIGNoZWNrIENSQyAqLworICAgICAgICB7CisgICAgICAgICAgICBzZGgtPklOVFNUUyA9IFNESF9JTlRTVFNfQ1JDSUZfTXNrOworICAgICAgICAgICAgcmV0dXJuIFNESF9DUkNfRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgdTMyTG9vcC0tOworICAgIH0KKworICAgIHUzMkxvb3AgPSB1MzJTZWNDb3VudCAlIDI1NVVMOworICAgIGlmKHUzMkxvb3AgIT0gMFVMKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgdTMyUmVnVG1wOworICAgICAgICBnX3U4U0REYXRhUmVhZHlGbGFnID0gKHVpbnQ4X3QpRkFMU0U7CisgICAgICAgIHUzMlJlZ1RtcCA9ICh1MzJMb29wIDw8IDE2KTsKKyAgICAgICAgdTMyUmVnID0gKHNkaC0+Q1RMICYgMHhmZjAwYzA4MFVMKSB8IHUzMlJlZ1RtcDsKKyAgICAgICAgaWYoIXUzMklzU2VuZENtZCkKKyAgICAgICAgeworICAgICAgICAgICAgc2RoLT5DVEwgPSB1MzJSZWcgfCAoMjVVTCA8PCA4KSB8IChTREhfQ1RMX0NPRU5fTXNrIHwgU0RIX0NUTF9SSUVOX01zayB8IFNESF9DVExfRE9FTl9Nc2spOworICAgICAgICAgICAgdTMySXNTZW5kQ21kID0gKHVpbnQzMl90KVRSVUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzZGgtPkNUTCA9IHUzMlJlZyB8IFNESF9DVExfRE9FTl9Nc2s7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSghZ191OFNERGF0YVJlYWR5RmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYocFNELT5Jc0NhcmRJbnNlcnQgPT0gKHVpbnQ4X3QpRkFMU0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNESF9OT19TRF9DQVJEOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoKHNkaC0+SU5UU1RTICYgU0RIX0lOVFNUU19DUkNJRl9Nc2spICE9IDBVTCkgICAgICAvKiBjaGVjayBDUkMgKi8KKyAgICAgICAgeworICAgICAgICAgICAgc2RoLT5JTlRTVFMgPSBTREhfSU5UU1RTX0NSQ0lGX01zazsKKyAgICAgICAgICAgIHJldHVybiBTREhfQ1JDX0VSUk9SOworICAgICAgICB9CisgICAgfQorICAgIHNkaC0+SU5UU1RTID0gU0RIX0lOVFNUU19DUkNJRl9Nc2s7CisKKyAgICBpZihTREhfU0RDbWRBbmRSc3Aoc2RoLCAxMlVMLCAwVUwsIDBVTCkpICAgICAgIC8qIHN0b3AgY29tbWFuZCAqLworICAgIHsKKyAgICAgICAgcmV0dXJuIFNESF9DUkM3X0VSUk9SOworICAgIH0KKyAgICBTREhfQ2hlY2tSQihzZGgpOworCisgICAgU0RIX1NEQ29tbWFuZChzZGgsIDdVTCwgMFVMKTsKKyAgICBzZGgtPkNUTCB8PSBTREhfQ1RMX0NMSzhPRU5fTXNrOworICAgIHdoaWxlKHNkaC0+Q1RMICYgU0RIX0NUTF9DTEs4T0VOX01zaykge30KKworICAgIHJldHVybiBTdWNjZXNzZnVsOworfQorCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0RIX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNESF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvc3BpLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzY2Yjc1Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvc3BpLmMKQEAgLTAsMCArMSwxNTk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc3BpLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBTUEkgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU1BJX0RyaXZlciBTUEkgRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBTUElfRVhQT1JURURfRlVOQ1RJT05TIFNQSSBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKK3N0YXRpYyB1aW50MzJfdCBTUElJMlNfR2V0U291cmNlQ2xvY2tGcmVxKFNQSV9UICppMnMpOworCisvKioKKyAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gbWFrZSBTUEkgbW9kdWxlIGJlIHJlYWR5IHRvIHRyYW5zZmVyLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzdGVyU2xhdmUgRGVjaWRlcyB0aGUgU1BJIG1vZHVsZSBpcyBvcGVyYXRpbmcgaW4gbWFzdGVyIG1vZGUgb3IgaW4gc2xhdmUgbW9kZS4gKFNQSV9TTEFWRSwgU1BJX01BU1RFUikKKyAgKiBAcGFyYW1baW5dICB1MzJTUElNb2RlIERlY2lkZXMgdGhlIHRyYW5zZmVyIHRpbWluZy4gKFNQSV9NT0RFXzAsIFNQSV9NT0RFXzEsIFNQSV9NT0RFXzIsIFNQSV9NT0RFXzMpCisgICogQHBhcmFtW2luXSAgdTMyRGF0YVdpZHRoIERlY2lkZXMgdGhlIGRhdGEgd2lkdGggb2YgYSBTUEkgdHJhbnNhY3Rpb24uCisgICogQHBhcmFtW2luXSAgdTMyQnVzQ2xvY2sgVGhlIGV4cGVjdGVkIGZyZXF1ZW5jeSBvZiBTUEkgYnVzIGNsb2NrIGluIEh6LgorICAqIEByZXR1cm4gQWN0dWFsIGZyZXF1ZW5jeSBvZiBTUEkgcGVyaXBoZXJhbCBjbG9jay4KKyAgKiBAZGV0YWlscyBCeSBkZWZhdWx0LCB0aGUgU1BJIHRyYW5zZmVyIHNlcXVlbmNlIGlzIE1TQiBmaXJzdCwgdGhlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaXMgYWN0aXZlIGxvdyBhbmQgdGhlIGF1dG9tYXRpYworICAqICAgICAgICAgIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbiBpcyBkaXNhYmxlZC4KKyAgKiAgICAgICAgICBJbiBTbGF2ZSBtb2RlLCB0aGUgdTMyQnVzQ2xvY2sgc2hhbGwgYmUgTlVMTCBhbmQgdGhlIFNQSSBjbG9jayBkaXZpZGVyIHNldHRpbmcgd2lsbCBiZSAwLgorICAqICAgICAgICAgIFRoZSBhY3R1YWwgY2xvY2sgcmF0ZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIHRhcmdldCBTUEkgY2xvY2sgcmF0ZS4KKyAgKiAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIFNQSSBzb3VyY2UgY2xvY2sgcmF0ZSBpcyAxMiBNSHogYW5kIHRoZSB0YXJnZXQgU1BJIGJ1cyBjbG9jayByYXRlIGlzIDcgTUh6LCB0aGUKKyAgKiAgICAgICAgICBhY3R1YWwgU1BJIGNsb2NrIHJhdGUgd2lsbCBiZSA2TUh6LgorICAgIElmIHUzMkJ1c0Nsb2NrID0gMCwgRElWSURFUiBzZXR0aW5nIHdpbGwgYmUgc2V0IHRvIHRoZSBtYXhpbXVtIHZhbHVlLgorICAgIElmIHUzMkJ1c0Nsb2NrID49IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgZm9yIFNlY3VyZSwgU1BJIHBlcmlwaGVyYWwgY2xvY2sgc291cmNlIHdpbGwgYmUgc2V0IHRvIEFQQiBjbG9jayBhbmQgRElWSURFUiB3aWxsIGJlIHNldCB0byAwLgorICAgIElmIHUzMkJ1c0Nsb2NrID49IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgZm9yIE5vbi1TZWN1cmUsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZG8gYW55dGhpbmcgdG8gYXZvaWQgdGhlIHNpdHVhdGlvbiB0aGF0IHRoZSBmcmVxdWVuY3kgb2YKKyAgKiAgICAgICAgIFNQSSBidXMgY2xvY2sgY2Fubm90IGJlIGZhc3RlciB0aGFuIHRoZSBzeXN0ZW0gY2xvY2sgcmF0ZS4gVXNlciBzaG91bGQgc2V0IHVwIGNhcmVmdWxseS4KKyAgICBJZiB1MzJCdXNDbG9jayA+PSBTUEkgcGVyaXBoZXJhbCBjbG9jayBzb3VyY2UsIERJVklERVIgd2lsbCBiZSBzZXQgdG8gMC4KKyAgICBJbiBzbGF2ZSBtb2RlIGZvciBTZWN1cmUsIHRoZSBTUEkgcGVyaXBoZXJhbCBjbG9jayByYXRlIHdpbGwgZXF1YWwgdG8gQVBCIGNsb2NrIHJhdGUuCisgICAgSW4gc2xhdmUgbW9kZSBmb3IgTm9uLVNlY3VyZSwgdGhlIFNQSSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgd2lsbCBlcXVhbCB0byB0aGUgY2xvY2sgcmF0ZSBzZXQgaW4gc2VjdXJlIG1vZGUuCisgICovCit1aW50MzJfdCBTUElfT3BlbihTUElfVCAqc3BpLAorICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyTWFzdGVyU2xhdmUsCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJTUElNb2RlLAorICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyRGF0YVdpZHRoLAorICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyQnVzQ2xvY2spCit7CisgICAgdWludDMyX3QgdTMyQ2xrU3JjID0gMFVMLCB1MzJEaXYsIHUzMkhDTEtGcmVxLCB1MzJQQ0xLMEZyZXEsIHUzMlBDTEsxRnJlcSwgdTMyUmV0VmFsdWUgPSAwVUw7CisKKyAgICAvKiBEaXNhYmxlIEkyUyBtb2RlICovCisgICAgc3BpLT5JMlNDVEwgJj0gflNQSV9JMlNDVExfSTJTRU5fTXNrOworCisgICAgaWYodTMyRGF0YVdpZHRoID09IDMyVUwpCisgICAgeworICAgICAgICB1MzJEYXRhV2lkdGggPSAwVUw7CisgICAgfQorCisgICAgLyogR2V0IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgKi8KKyAgICB1MzJIQ0xLRnJlcSA9IENMS19HZXRIQ0xLRnJlcSgpOworICAgIC8qIEdldCBBUEIwIGNsb2NrIGZyZXF1ZW5jeSAqLworICAgIHUzMlBDTEswRnJlcSA9IENMS19HZXRQQ0xLMEZyZXEoKTsKKyAgICAvKiBHZXQgQVBCMSBjbG9jayBmcmVxdWVuY3kgKi8KKyAgICB1MzJQQ0xLMUZyZXEgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisKKyAgICBpZih1MzJNYXN0ZXJTbGF2ZSA9PSBTUElfTUFTVEVSKQorICAgIHsKKyAgICAgICAgLyogRGVmYXVsdCBzZXR0aW5nOiBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGlzIGFjdGl2ZSBsb3c7IGRpc2FibGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbi4gKi8KKyAgICAgICAgc3BpLT5TU0NUTCA9IFNQSV9TU19BQ1RJVkVfTE9XOworCisgICAgICAgIC8qIERlZmF1bHQgc2V0dGluZzogTVNCIGZpcnN0LCBkaXNhYmxlIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0LCBTUF9DWUNMRSA9IDAuICovCisgICAgICAgIHNwaS0+Q1RMID0gdTMyTWFzdGVyU2xhdmUgfCAodTMyRGF0YVdpZHRoIDw8IFNQSV9DVExfRFdJRFRIX1BvcykgfCAodTMyU1BJTW9kZSkgfCBTUElfQ1RMX1NQSUVOX01zazsKKworICAgICAgICBpZih1MzJCdXNDbG9jayA+PSB1MzJIQ0xLRnJlcSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIShfX1BDKCkgJiBOU19PRkZTRVQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNlbGVjdCBQQ0xLIGFzIHRoZSBjbG9jayBzb3VyY2Ugb2YgU1BJICovCisgICAgICAgICAgICAgICAgaWYoKHNwaSA9PSBTUEkwKSB8fCAoc3BpID09IFNQSTBfTlMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJMFNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTBTRUxfUENMSzE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkxKSB8fCAoc3BpID09IFNQSTFfTlMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJMVNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTFTRUxfUENMSzA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkyKSB8fCAoc3BpID09IFNQSTJfTlMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJMlNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTJTRUxfUENMSzE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENMSy0+Q0xLU0VMMiA9IChDTEstPkNMS1NFTDIgJiAofkNMS19DTEtTRUwyX1NQSTNTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BDTEswOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGNsb2NrIHNvdXJjZSBvZiBTUEkgKi8KKyAgICAgICAgaWYoKHNwaSA9PSBTUEkwKSB8fCAoc3BpID09IFNQSTBfTlMpKQorICAgICAgICB7CisgICAgICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMFNFTF9IWFQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTBTRUxfUExMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMFNFTF9QQ0xLMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UENMSzFGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChzcGkgPT0gU1BJMSkgfHwgKHNwaSA9PSBTUEkxX05TKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfSFhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMV9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfUENMSzApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBDTEswRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzAgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoc3BpID09IFNQSTIpIHx8IChzcGkgPT0gU1BJMl9OUykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX0hYVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTJfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMlNFTF9QTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BDTEsxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQQ0xLMUZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEsxICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkzX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTNTRUxfSFhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJM19NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkzX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTNTRUxfUENMSzApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBDTEswRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzAgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZih1MzJCdXNDbG9jayA+PSB1MzJIQ0xLRnJlcSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2V0IERJVklERVIgPSAwICovCisgICAgICAgICAgICBzcGktPkNMS0RJViA9IDBVTDsKKyAgICAgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMkNsa1NyYzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHUzMkJ1c0Nsb2NrID49IHUzMkNsa1NyYykKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2V0IERJVklERVIgPSAwICovCisgICAgICAgICAgICBzcGktPkNMS0RJViA9IDBVTDsKKyAgICAgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMkNsa1NyYzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHUzMkJ1c0Nsb2NrID09IDBVTCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2V0IERJVklERVIgdG8gdGhlIG1heGltdW0gdmFsdWUgMHgxRkYuIGZfc3BpID0gZl9zcGlfY2xrX3NyYyAvIChESVZJREVSICsgMSkgKi8KKyAgICAgICAgICAgIHNwaS0+Q0xLRElWIHw9IFNQSV9DTEtESVZfRElWSURFUl9Nc2s7CisgICAgICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSAodTMyQ2xrU3JjIC8gKDB4MUZGVUwgKyAxVUwpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkRpdiA9ICgoKHUzMkNsa1NyYyAqIDEwVUwpIC8gdTMyQnVzQ2xvY2sgKyA1VUwpIC8gMTBVTCkgLSAxVUw7IC8qIFJvdW5kIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgKi8KKyAgICAgICAgICAgIGlmKHUzMkRpdiA+IDB4MUZGVUwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyRGl2ID0gMHgxRkZVTDsKKyAgICAgICAgICAgICAgICBzcGktPkNMS0RJViB8PSBTUElfQ0xLRElWX0RJVklERVJfTXNrOworICAgICAgICAgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSAodTMyQ2xrU3JjIC8gKDB4MUZGVUwgKyAxVUwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcGktPkNMS0RJViA9IChzcGktPkNMS0RJViAmICh+U1BJX0NMS0RJVl9ESVZJREVSX01zaykpIHwgKHUzMkRpdiA8PCBTUElfQ0xLRElWX0RJVklERVJfUG9zKTsKKyAgICAgICAgICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gKHUzMkNsa1NyYyAvICh1MzJEaXYgKyAxVUwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAgICAvKiBGb3Igc2xhdmUgbW9kZSwgZm9yY2UgdGhlIFNQSSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgdG8gZXF1YWwgQVBCIGNsb2NrIHJhdGUuICovCisgICAgeworICAgICAgICAvKiBEZWZhdWx0IHNldHRpbmc6IHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaXMgbG93IGxldmVsIGFjdGl2ZS4gKi8KKyAgICAgICAgc3BpLT5TU0NUTCA9IFNQSV9TU19BQ1RJVkVfTE9XOworCisgICAgICAgIC8qIERlZmF1bHQgc2V0dGluZzogTVNCIGZpcnN0LCBkaXNhYmxlIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0LCBTUF9DWUNMRSA9IDAuICovCisgICAgICAgIHNwaS0+Q1RMID0gdTMyTWFzdGVyU2xhdmUgfCAodTMyRGF0YVdpZHRoIDw8IFNQSV9DVExfRFdJRFRIX1BvcykgfCAodTMyU1BJTW9kZSkgfCBTUElfQ1RMX1NQSUVOX01zazsKKworICAgICAgICAvKiBTZXQgRElWSURFUiA9IDAgKi8KKyAgICAgICAgc3BpLT5DTEtESVYgPSAwVUw7CisKKyAgICAgICAgaWYoIShfX1BDKCkgJiBOU19PRkZTRVQpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZWxlY3QgUENMSyBhcyB0aGUgY2xvY2sgc291cmNlIG9mIFNQSSAqLworICAgICAgICAgICAgaWYoKHNwaSA9PSBTUEkwKSB8fCAoc3BpID09IFNQSTBfTlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENMSy0+Q0xLU0VMMiA9IChDTEstPkNMS1NFTDIgJiAofkNMS19DTEtTRUwyX1NQSTBTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BDTEsxOworICAgICAgICAgICAgICAgIC8qIFJldHVybiBzbGF2ZSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMlBDTEsxRnJlcTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkxKSB8fCAoc3BpID09IFNQSTFfTlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENMSy0+Q0xLU0VMMiA9IChDTEstPkNMS1NFTDIgJiAofkNMS19DTEtTRUwyX1NQSTFTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BDTEswOworICAgICAgICAgICAgICAgIC8qIFJldHVybiBzbGF2ZSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMlBDTEswRnJlcTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkyKSB8fCAoc3BpID09IFNQSTJfTlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENMSy0+Q0xLU0VMMiA9IChDTEstPkNMS1NFTDIgJiAofkNMS19DTEtTRUwyX1NQSTJTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BDTEsxOworICAgICAgICAgICAgICAgIC8qIFJldHVybiBzbGF2ZSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMlBDTEsxRnJlcTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDTEstPkNMS1NFTDIgPSAoQ0xLLT5DTEtTRUwyICYgKH5DTEtfQ0xLU0VMMl9TUEkzU0VMX01zaykpIHwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9QQ0xLMDsKKyAgICAgICAgICAgICAgICAvKiBSZXR1cm4gc2xhdmUgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJQQ0xLMEZyZXE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDaGVjayBjbG9jayBzb3VyY2Ugb2YgU1BJICovCisgICAgICAgICAgICBpZigoc3BpID09IFNQSTApIHx8IChzcGkgPT0gU1BJMF9OUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTBTRUxfSFhUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTBTRUxfUENMSzEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMlBDTEsxRnJlcTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEsxICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkxKSB8fCAoc3BpID09IFNQSTFfTlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMV9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkxU0VMX0hYVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTFfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMVNFTF9QTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMV9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BDTEswKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJQQ0xLMEZyZXE7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKChzcGkgPT0gU1BJMikgfHwgKHNwaSA9PSBTUEkyX05TKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTJfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMlNFTF9IWFQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfUExMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTJfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMlNFTF9QQ0xLMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gdTMyUENMSzFGcmVxOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzEgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJM19NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkzU0VMX0hYVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTNfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJM1NFTF9QTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJM19NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BDTEswKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJQQ0xLMEZyZXE7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdTMyUmV0VmFsdWU7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBTUEkgY29udHJvbGxlci4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIENsZWFyIFNQSUVOIGJpdCBvZiBTUElfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgU1BJIHRyYW5zZmVyIGNvbnRyb2wuCisgICovCit2b2lkIFNQSV9DbG9zZShTUElfVCAqc3BpKQoreworICAgIHNwaS0+Q1RMICY9IH5TUElfQ1RMX1NQSUVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICBDbGVhciBSWCBGSUZPIGJ1ZmZlci4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBTUEkgUlggRklGTyBidWZmZXIuIFRoZSBSWEVNUFRZIChTUElfU1RBVFVTWzhdKSB3aWxsIGJlIHNldCB0byAxLgorICAqLwordm9pZCBTUElfQ2xlYXJSeEZJRk8oU1BJX1QgKnNwaSkKK3sKKyAgICBzcGktPkZJRk9DVEwgfD0gU1BJX0ZJRk9DVExfUlhGQkNMUl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2xlYXIgVFggRklGTyBidWZmZXIuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgU1BJIFRYIEZJRk8gYnVmZmVyLiBUaGUgVFhFTVBUWSAoU1BJX1NUQVRVU1sxNl0pIHdpbGwgYmUgc2V0IHRvIDEuCisgIFRoZSBUWCBzaGlmdCByZWdpc3RlciB3aWxsIG5vdCBiZSBjbGVhcmVkLgorICAqLwordm9pZCBTUElfQ2xlYXJUeEZJRk8oU1BJX1QgKnNwaSkKK3sKKyAgICBzcGktPkZJRk9DVEwgfD0gU1BJX0ZJRk9DVExfVFhGQkNMUl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSB0aGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gd2lsbCBkaXNhYmxlIHRoZSBhdXRvbWF0aWMgc2xhdmUgc2VsZWN0aW9uIGZ1bmN0aW9uIGFuZCBzZXQgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCB0byBpbmFjdGl2ZSBzdGF0ZS4KKyAgKi8KK3ZvaWQgU1BJX0Rpc2FibGVBdXRvU1MoU1BJX1QgKnNwaSkKK3sKKyAgICBzcGktPlNTQ1RMICY9IH4oU1BJX1NTQ1RMX0FVVE9TU19Nc2sgfCBTUElfU1NDVExfU1NfTXNrKTsKK30KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgdGhlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJTU1Bpbk1hc2sgU3BlY2lmaWVzIHNsYXZlIHNlbGVjdGlvbiBwaW5zLiAoU1BJX1NTKQorICAqIEBwYXJhbVtpbl0gIHUzMkFjdGl2ZUxldmVsIFNwZWNpZmllcyB0aGUgYWN0aXZlIGxldmVsIG9mIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwuIChTUElfU1NfQUNUSVZFX0hJR0gsIFNQSV9TU19BQ1RJVkVfTE9XKQorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gd2lsbCBlbmFibGUgdGhlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24uIE9ubHkgYXZhaWxhYmxlIGluIE1hc3RlciBtb2RlLgorICAqICAgICAgICAgIFRoZSBzbGF2ZSBzZWxlY3Rpb24gcGluIGFuZCB0aGUgYWN0aXZlIGxldmVsIHdpbGwgYmUgc2V0IGluIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIFNQSV9FbmFibGVBdXRvU1MoU1BJX1QgKnNwaSwgdWludDMyX3QgdTMyU1NQaW5NYXNrLCB1aW50MzJfdCB1MzJBY3RpdmVMZXZlbCkKK3sKKyAgICBzcGktPlNTQ1RMID0gKHNwaS0+U1NDVEwgJiAofihTUElfU1NDVExfQVVUT1NTX01zayB8IFNQSV9TU0NUTF9TU0FDVFBPTF9Nc2sgfCBTUElfU1NDVExfU1NfTXNrKSkpIHwgKHUzMlNTUGluTWFzayB8IHUzMkFjdGl2ZUxldmVsIHwgU1BJX1NTQ1RMX0FVVE9TU19Nc2spOworfQorCisvKioKKyAgKiBAYnJpZWYgIFNldCB0aGUgU1BJIGJ1cyBjbG9jay4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkJ1c0Nsb2NrIFRoZSBleHBlY3RlZCBmcmVxdWVuY3kgb2YgU1BJIGJ1cyBjbG9jayBpbiBIei4KKyAgKiBAcmV0dXJuIEFjdHVhbCBmcmVxdWVuY3kgb2YgU1BJIGJ1cyBjbG9jay4KKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGluIE1hc3RlciBtb2RlLiBUaGUgYWN0dWFsIGNsb2NrIHJhdGUgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSB0YXJnZXQgU1BJIGJ1cyBjbG9jayByYXRlLgorICAqICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgU1BJIHNvdXJjZSBjbG9jayByYXRlIGlzIDEyIE1IeiBhbmQgdGhlIHRhcmdldCBTUEkgYnVzIGNsb2NrIHJhdGUgaXMgNyBNSHosIHRoZSBhY3R1YWwgU1BJIGJ1cyBjbG9jaworICAqICAgICAgICAgIHJhdGUgd2lsbCBiZSA2IE1Iei4KKyAgICBJZiB1MzJCdXNDbG9jayA9IDAsIERJVklERVIgc2V0dGluZyB3aWxsIGJlIHNldCB0byB0aGUgbWF4aW11bSB2YWx1ZS4KKyAgICBJZiB1MzJCdXNDbG9jayA+PSBzeXN0ZW0gY2xvY2sgZnJlcXVlbmN5IGZvciBTZWN1cmUsIFNQSSBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSB3aWxsIGJlIHNldCB0byBBUEIgY2xvY2sgYW5kIERJVklERVIgd2lsbCBiZSBzZXQgdG8gMC4KKyAgICBJZiB1MzJCdXNDbG9jayA+PSBzeXN0ZW0gY2xvY2sgZnJlcXVlbmN5IGZvciBOb24tU2VjdXJlLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGRvIGFueXRoaW5nIHRvIGF2b2lkIHRoZSBzaXR1YXRpb24gdGhhdCB0aGUgZnJlcXVlbmN5IG9mCisgICogICAgICAgICBTUEkgYnVzIGNsb2NrIGNhbm5vdCBiZSBmYXN0ZXIgdGhhbiB0aGUgc3lzdGVtIGNsb2NrIHJhdGUuIFVzZXIgc2hvdWxkIHNldCB1cCBjYXJlZnVsbHkuCisgICAgSWYgdTMyQnVzQ2xvY2sgPj0gU1BJIHBlcmlwaGVyYWwgY2xvY2sgc291cmNlLCBESVZJREVSIHdpbGwgYmUgc2V0IHRvIDAuCisgICovCit1aW50MzJfdCBTUElfU2V0QnVzQ2xvY2soU1BJX1QgKnNwaSwgdWludDMyX3QgdTMyQnVzQ2xvY2spCit7CisgICAgdWludDMyX3QgdTMyQ2xrU3JjLCB1MzJIQ0xLRnJlcTsKKyAgICB1aW50MzJfdCB1MzJEaXYsIHUzMlJldFZhbHVlOworCisgICAgLyogR2V0IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgKi8KKyAgICB1MzJIQ0xLRnJlcSA9IENMS19HZXRIQ0xLRnJlcSgpOworCisgICAgaWYodTMyQnVzQ2xvY2sgPj0gdTMySENMS0ZyZXEpCisgICAgeworICAgICAgICBpZighKF9fUEMoKSAmIE5TX09GRlNFVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNlbGVjdCBQQ0xLIGFzIHRoZSBjbG9jayBzb3VyY2Ugb2YgU1BJICovCisgICAgICAgICAgICBpZigoc3BpID09IFNQSTApIHx8IChzcGkgPT0gU1BJMF9OUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJMFNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTBTRUxfUENMSzE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKChzcGkgPT0gU1BJMSkgfHwgKHNwaSA9PSBTUEkxX05TKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDTEstPkNMS1NFTDIgPSAoQ0xLLT5DTEtTRUwyICYgKH5DTEtfQ0xLU0VMMl9TUEkxU0VMX01zaykpIHwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9QQ0xLMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkyKSB8fCAoc3BpID09IFNQSTJfTlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENMSy0+Q0xLU0VMMiA9IChDTEstPkNMS1NFTDIgJiAofkNMS19DTEtTRUwyX1NQSTJTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BDTEsxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENMSy0+Q0xLU0VMMiA9IChDTEstPkNMS1NFTDIgJiAofkNMS19DTEtTRUwyX1NQSTNTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BDTEswOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogQ2hlY2sgY2xvY2sgc291cmNlIG9mIFNQSSAqLworICAgIGlmKChzcGkgPT0gU1BJMCkgfHwgKHNwaSA9PSBTUEkwX05TKSkKKyAgICB7CisgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkwU0VMX0hYVCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BMTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMFNFTF9QQ0xLMSkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBDTEsxRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzEgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKChzcGkgPT0gU1BJMSkgfHwgKHNwaSA9PSBTUEkxX05TKSkKKyAgICB7CisgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMV9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkxU0VMX0hYVCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMV9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BMTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTFfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMVNFTF9QQ0xLMCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBDTEswRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzAgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKChzcGkgPT0gU1BJMikgfHwgKHNwaSA9PSBTUEkyX05TKSkKKyAgICB7CisgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX0hYVCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BMTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTJfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMlNFTF9QQ0xLMSkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBDTEsxRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzEgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTNfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJM1NFTF9IWFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTNfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJM1NFTF9QTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkzX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTNTRUxfUENMSzApCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQQ0xLMEZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEswICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZih1MzJCdXNDbG9jayA+PSB1MzJIQ0xLRnJlcSkKKyAgICB7CisgICAgICAgIC8qIFNldCBESVZJREVSID0gMCAqLworICAgICAgICBzcGktPkNMS0RJViA9IDBVTDsKKyAgICAgICAgLyogUmV0dXJuIG1hc3RlciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJDbGtTcmM7CisgICAgfQorICAgIGVsc2UgaWYodTMyQnVzQ2xvY2sgPj0gdTMyQ2xrU3JjKQorICAgIHsKKyAgICAgICAgLyogU2V0IERJVklERVIgPSAwICovCisgICAgICAgIHNwaS0+Q0xLRElWID0gMFVMOworICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMkNsa1NyYzsKKyAgICB9CisgICAgZWxzZSBpZih1MzJCdXNDbG9jayA9PSAwVUwpCisgICAgeworICAgICAgICAvKiBTZXQgRElWSURFUiB0byB0aGUgbWF4aW11bSB2YWx1ZSAweDFGRi4gZl9zcGkgPSBmX3NwaV9jbGtfc3JjIC8gKERJVklERVIgKyAxKSAqLworICAgICAgICBzcGktPkNMS0RJViB8PSBTUElfQ0xLRElWX0RJVklERVJfTXNrOworICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICB1MzJSZXRWYWx1ZSA9ICh1MzJDbGtTcmMgLyAoMHgxRkZVTCArIDFVTCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJEaXYgPSAoKCh1MzJDbGtTcmMgKiAxMFVMKSAvIHUzMkJ1c0Nsb2NrICsgNVVMKSAvIDEwVUwpIC0gMVVMOyAvKiBSb3VuZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyICovCisgICAgICAgIGlmKHUzMkRpdiA+IDB4MUZGVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkRpdiA9IDB4MUZGVUw7CisgICAgICAgICAgICBzcGktPkNMS0RJViB8PSBTUElfQ0xLRElWX0RJVklERVJfTXNrOworICAgICAgICAgICAgLyogUmV0dXJuIG1hc3RlciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgIHUzMlJldFZhbHVlID0gKHUzMkNsa1NyYyAvICgweDFGRlVMICsgMVVMKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzcGktPkNMS0RJViA9IChzcGktPkNMS0RJViAmICh+U1BJX0NMS0RJVl9ESVZJREVSX01zaykpIHwgKHUzMkRpdiA8PCBTUElfQ0xLRElWX0RJVklERVJfUG9zKTsKKyAgICAgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9ICh1MzJDbGtTcmMgLyAodTMyRGl2ICsgMVVMKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdTMyUmV0VmFsdWU7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIEZJRk8gdGhyZXNob2xkIHNldHRpbmcuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJUeFRocmVzaG9sZCBEZWNpZGVzIHRoZSBUWCBGSUZPIHRocmVzaG9sZC4gSXQgY291bGQgYmUgMCB+IDMuIElmIGRhdGEgd2lkdGggaXMgOCB+IDE2IGJpdHMsIGl0IGNvdWxkIGJlIDAgfiA3LgorICAqIEBwYXJhbVtpbl0gIHUzMlJ4VGhyZXNob2xkIERlY2lkZXMgdGhlIFJYIEZJRk8gdGhyZXNob2xkLiBJdCBjb3VsZCBiZSAwIH4gMy4gSWYgZGF0YSB3aWR0aCBpcyA4IH4gMTYgYml0cywgaXQgY291bGQgYmUgMCB+IDcuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgU2V0IFRYIEZJRk8gdGhyZXNob2xkIGFuZCBSWCBGSUZPIHRocmVzaG9sZCBjb25maWd1cmF0aW9ucy4KKyAgKi8KK3ZvaWQgU1BJX1NldEZJRk8oU1BJX1QgKnNwaSwgdWludDMyX3QgdTMyVHhUaHJlc2hvbGQsIHVpbnQzMl90IHUzMlJ4VGhyZXNob2xkKQoreworICAgIHNwaS0+RklGT0NUTCA9IChzcGktPkZJRk9DVEwgJiB+KFNQSV9GSUZPQ1RMX1RYVEhfTXNrIHwgU1BJX0ZJRk9DVExfUlhUSF9Nc2spKSB8CisgICAgICAgICAgICAgICAgICAgKHUzMlR4VGhyZXNob2xkIDw8IFNQSV9GSUZPQ1RMX1RYVEhfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgKHUzMlJ4VGhyZXNob2xkIDw8IFNQSV9GSUZPQ1RMX1JYVEhfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgdGhlIGFjdHVhbCBmcmVxdWVuY3kgb2YgU1BJIGJ1cyBjbG9jay4gT25seSBhdmFpbGFibGUgaW4gTWFzdGVyIG1vZGUuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIEFjdHVhbCBTUEkgYnVzIGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4KKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsY3VsYXRlIHRoZSBhY3R1YWwgU1BJIGJ1cyBjbG9jayByYXRlIGFjY29yZGluZyB0byB0aGUgU1BJeFNFTCBhbmQgRElWSURFUiBzZXR0aW5ncy4gT25seSBhdmFpbGFibGUgaW4gTWFzdGVyIG1vZGUuCisgICovCit1aW50MzJfdCBTUElfR2V0QnVzQ2xvY2soU1BJX1QgKnNwaSkKK3sKKyAgICB1aW50MzJfdCB1MzJEaXY7CisgICAgdWludDMyX3QgdTMyQ2xrU3JjOworCisgICAgLyogR2V0IERJVklERVIgc2V0dGluZyAqLworICAgIHUzMkRpdiA9IChzcGktPkNMS0RJViAmIFNQSV9DTEtESVZfRElWSURFUl9Nc2spID4+IFNQSV9DTEtESVZfRElWSURFUl9Qb3M7CisKKyAgICAvKiBDaGVjayBjbG9jayBzb3VyY2Ugb2YgU1BJICovCisgICAgaWYoKHNwaSA9PSBTUEkwKSB8fCAoc3BpID09IFNQSTBfTlMpKQorICAgIHsKKyAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTBTRUxfSFhUKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTBTRUxfUExMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BDTEsxKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UENMSzFGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkxKSB8fCAoc3BpID09IFNQSTFfTlMpKQorICAgIHsKKyAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfSFhUKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfUExMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMV9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BDTEswKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UENMSzBGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkyKSB8fCAoc3BpID09IFNQSTJfTlMpKQorICAgIHsKKyAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfSFhUKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfUExMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BDTEsxKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UENMSzFGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJM19NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkzU0VMX0hYVCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJM19NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BMTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTNfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJM1NFTF9QQ0xLMCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBDTEswRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzAgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFJldHVybiBTUEkgYnVzIGNsb2NrIHJhdGUgKi8KKyAgICByZXR1cm4gKHUzMkNsa1NyYyAvICh1MzJEaXYgKyAxVUwpKTsKK30KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzLgorICAqICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgZW5hYmxlIGJpdC4KKyAgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQuIEl0IGlzIGNvbWJpbmF0aW9uIG9mOgorICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1VOSVRfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TU0FDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NTSU5BQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TTFZVUl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NMVkJFX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfVFhVRl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fUlhUT19JTlRfTUFTSworICAqCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgRW5hYmxlIFNQSSByZWxhdGVkIGludGVycnVwdHMgc3BlY2lmaWVkIGJ5IHUzMk1hc2sgcGFyYW1ldGVyLgorICAqLwordm9pZCBTUElfRW5hYmxlSW50KFNQSV9UICpzcGksIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgLyogRW5hYmxlIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9VTklUX0lOVF9NQVNLKSA9PSBTUElfVU5JVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+Q1RMIHw9IFNQSV9DVExfVU5JVElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfU1NBQ1RfSU5UX01BU0spID09IFNQSV9TU0FDVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+U1NDVEwgfD0gU1BJX1NTQ1RMX1NTQUNUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpbmFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1NTSU5BQ1RfSU5UX01BU0spID09IFNQSV9TU0lOQUNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5TU0NUTCB8PSBTUElfU1NDVExfU1NJTkFJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBzbGF2ZSBUWCB1bmRlciBydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9TTFZVUl9JTlRfTUFTSykgPT0gU1BJX1NMVlVSX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5TU0NUTCB8PSBTUElfU1NDVExfU0xWVVJJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBzbGF2ZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9TTFZCRV9JTlRfTUFTSykgPT0gU1BJX1NMVkJFX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5TU0NUTCB8PSBTUElfU1NDVExfU0xWQkVJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBzbGF2ZSBUWCB1bmRlcmZsb3cgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9UWFVGX0lOVF9NQVNLKSA9PSBTUElfVFhVRl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+RklGT0NUTCB8PSBTUElfRklGT0NUTF9UWFVGSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgVFggdGhyZXNob2xkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfRklGT19UWFRIX0lOVF9NQVNLKSA9PSBTUElfRklGT19UWFRIX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5GSUZPQ1RMIHw9IFNQSV9GSUZPQ1RMX1RYVEhJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBSWCB0aHJlc2hvbGQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9GSUZPX1JYVEhfSU5UX01BU0spID09IFNQSV9GSUZPX1JYVEhfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPkZJRk9DVEwgfD0gU1BJX0ZJRk9DVExfUlhUSElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFJYIG92ZXJydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9GSUZPX1JYT1ZfSU5UX01BU0spID09IFNQSV9GSUZPX1JYT1ZfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPkZJRk9DVEwgfD0gU1BJX0ZJRk9DVExfUlhPVklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFJYIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfRklGT19SWFRPX0lOVF9NQVNLKSA9PSBTUElfRklGT19SWFRPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5GSUZPQ1RMIHw9IFNQSV9GSUZPQ1RMX1JYVE9JRU5fTXNrOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIGludGVycnVwdCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBlbmFibGUgYml0cy4KKyAgKiAgICAgICAgICAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IGJpdC4KKyAgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0cyB3aWxsIGJlIGRpc2FibGVkLiBJdCBpcyBjb21iaW5hdGlvbiBvZjoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9VTklUX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfU1NBQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TU0lOQUNUX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfU0xWVVJfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TTFZCRV9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1RYVUZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9GSUZPX1RYVEhfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9GSUZPX1JYVEhfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9GSUZPX1JYT1ZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9GSUZPX1JYVE9fSU5UX01BU0sKKyAgKgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIERpc2FibGUgU1BJIHJlbGF0ZWQgaW50ZXJydXB0cyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCit2b2lkIFNQSV9EaXNhYmxlSW50KFNQSV9UICpzcGksIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgLyogRGlzYWJsZSB1bml0IHRyYW5zZmVyIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfVU5JVF9JTlRfTUFTSykgPT0gU1BJX1VOSVRfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPkNUTCAmPSB+U1BJX0NUTF9VTklUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfU1NBQ1RfSU5UX01BU0spID09IFNQSV9TU0FDVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+U1NDVEwgJj0gflNQSV9TU0NUTF9TU0FDVElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGluYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfU1NJTkFDVF9JTlRfTUFTSykgPT0gU1BJX1NTSU5BQ1RfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPlNTQ1RMICY9IH5TUElfU1NDVExfU1NJTkFJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgc2xhdmUgVFggdW5kZXIgcnVuIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfU0xWVVJfSU5UX01BU0spID09IFNQSV9TTFZVUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+U1NDVEwgJj0gflNQSV9TU0NUTF9TTFZVUklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBzbGF2ZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9TTFZCRV9JTlRfTUFTSykgPT0gU1BJX1NMVkJFX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5TU0NUTCAmPSB+U1BJX1NTQ1RMX1NMVkJFSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHNsYXZlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1RYVUZfSU5UX01BU0spID09IFNQSV9UWFVGX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5GSUZPQ1RMICY9IH5TUElfRklGT0NUTF9UWFVGSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFRYIHRocmVzaG9sZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSykgPT0gU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+RklGT0NUTCAmPSB+U1BJX0ZJRk9DVExfVFhUSElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBSWCB0aHJlc2hvbGQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9GSUZPX1JYVEhfSU5UX01BU0spID09IFNQSV9GSUZPX1JYVEhfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPkZJRk9DVEwgJj0gflNQSV9GSUZPQ1RMX1JYVEhJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSykgPT0gU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+RklGT0NUTCAmPSB+U1BJX0ZJRk9DVExfUlhPVklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX0ZJRk9fUlhUT19JTlRfTUFTSykgPT0gU1BJX0ZJRk9fUlhUT19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+RklGT0NUTCAmPSB+U1BJX0ZJRk9DVExfUlhUT0lFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBzb3VyY2VzLgorICAqICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgc291cmNlLgorICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHQgZmxhZ3Mgd2lsbCBiZSByZWFkLiBJdCBpcyBjb21iaW5hdGlvbiBvZjoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9VTklUX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfU1NBQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TU0lOQUNUX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfU0xWVVJfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TTFZCRV9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1RYVUZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9GSUZPX1RYVEhfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9GSUZPX1JYVEhfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9GSUZPX1JYT1ZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9GSUZPX1JYVE9fSU5UX01BU0sKKyAgKgorICAqIEByZXR1cm4gSW50ZXJydXB0IGZsYWdzIG9mIHNlbGVjdGVkIHNvdXJjZXMuCisgICogQGRldGFpbHMgR2V0IFNQSSByZWxhdGVkIGludGVycnVwdCBmbGFncyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCit1aW50MzJfdCBTUElfR2V0SW50RmxhZyhTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIHVpbnQzMl90IHUzMkludFN0YXR1czsKKyAgICB1aW50MzJfdCB1MzJJbnRGbGFnID0gMFVMOworCisgICAgdTMySW50U3RhdHVzID0gc3BpLT5TVEFUVVM7CisKKyAgICAvKiBDaGVjayB1bml0IHRyYW5zZmVyIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfVU5JVF9JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFNQSV9TVEFUVVNfVU5JVElGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFNQSV9VTklUX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfU1NBQ1RfSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBTUElfU1RBVFVTX1NTQUNUSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gU1BJX1NTQUNUX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaW5hY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9TU0lOQUNUX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgU1BJX1NUQVRVU19TU0lOQUlGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFNQSV9TU0lOQUNUX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIHNsYXZlIFRYIHVuZGVyIHJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1NMVlVSX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgU1BJX1NUQVRVU19TTFZVUklGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFNQSV9TTFZVUl9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBzbGF2ZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9TTFZCRV9JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFNQSV9TVEFUVVNfU0xWQkVJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBTUElfU0xWQkVfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgc2xhdmUgVFggdW5kZXJmbG93IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfVFhVRl9JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFNQSV9TVEFUVVNfVFhVRklGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFNQSV9UWFVGX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFRYIHRocmVzaG9sZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFNQSV9TVEFUVVNfVFhUSElGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFNQSV9GSUZPX1RYVEhfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgUlggdGhyZXNob2xkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfRklGT19SWFRIX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgU1BJX1NUQVRVU19SWFRISUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCBvdmVycnVuIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfRklGT19SWE9WX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgU1BJX1NUQVRVU19SWE9WSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX0ZJRk9fUlhUT19JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFNQSV9TVEFUVVNfUlhUT0lGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFNQSV9GSUZPX1JYVE9fSU5UX01BU0s7CisgICAgfQorCisgICAgcmV0dXJuIHUzMkludEZsYWc7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2xlYXIgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgc291cmNlcy4KKyAgKiAgICAgICAgICAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHNvdXJjZS4KKyAgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0IGZsYWdzIHdpbGwgYmUgY2xlYXJlZC4gSXQgY291bGQgYmUgdGhlIGNvbWJpbmF0aW9uIG9mOgorICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1VOSVRfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TU0FDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NTSU5BQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TTFZVUl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NMVkJFX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfVFhVRl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fUlhUT19JTlRfTUFTSworICAqCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgQ2xlYXIgU1BJIHJlbGF0ZWQgaW50ZXJydXB0IGZsYWdzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KK3ZvaWQgU1BJX0NsZWFySW50RmxhZyhTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIGlmKHUzMk1hc2sgJiBTUElfVU5JVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+U1RBVFVTID0gU1BJX1NUQVRVU19VTklUSUZfTXNrOyAvKiBDbGVhciB1bml0IHRyYW5zZmVyIGludGVycnVwdCBmbGFnICovCisgICAgfQorCisgICAgaWYodTMyTWFzayAmIFNQSV9TU0FDVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+U1RBVFVTID0gU1BJX1NUQVRVU19TU0FDVElGX01zazsgLyogQ2xlYXIgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBhY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgU1BJX1NTSU5BQ1RfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPlNUQVRVUyA9IFNQSV9TVEFUVVNfU1NJTkFJRl9Nc2s7IC8qIENsZWFyIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaW5hY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgU1BJX1NMVlVSX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5TVEFUVVMgPSBTUElfU1RBVFVTX1NMVlVSSUZfTXNrOyAvKiBDbGVhciBzbGF2ZSBUWCB1bmRlciBydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgU1BJX1NMVkJFX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5TVEFUVVMgPSBTUElfU1RBVFVTX1NMVkJFSUZfTXNrOyAvKiBDbGVhciBzbGF2ZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgU1BJX1RYVUZfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPlNUQVRVUyA9IFNQSV9TVEFUVVNfVFhVRklGX01zazsgLyogQ2xlYXIgc2xhdmUgVFggdW5kZXJmbG93IGludGVycnVwdCBmbGFnICovCisgICAgfQorCisgICAgaWYodTMyTWFzayAmIFNQSV9GSUZPX1JYT1ZfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPlNUQVRVUyA9IFNQSV9TVEFUVVNfUlhPVklGX01zazsgLyogQ2xlYXIgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBTUElfRklGT19SWFRPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5TVEFUVVMgPSBTUElfU1RBVFVTX1JYVE9JRl9Nc2s7IC8qIENsZWFyIFJYIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBTUEkgc3RhdHVzLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgc291cmNlcy4KKyAgKiAgICAgICAgICAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgc291cmNlLgorICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBmbGFncyB3aWxsIGJlIHJlYWQuIEl0IGlzIGNvbWJpbmF0aW9uIG9mOgorICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0JVU1lfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1JYX0VNUFRZX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9SWF9GVUxMX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9UWF9FTVBUWV9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfVFhfRlVMTF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfVFhSWF9SRVNFVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfU1BJRU5fU1RTX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TU0xJTkVfU1RTX01BU0sKKyAgKgorICAqIEByZXR1cm4gRmxhZ3Mgb2Ygc2VsZWN0ZWQgc291cmNlcy4KKyAgKiBAZGV0YWlscyBHZXQgU1BJIHJlbGF0ZWQgc3RhdHVzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KK3VpbnQzMl90IFNQSV9HZXRTdGF0dXMoU1BJX1QgKnNwaSwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICB1aW50MzJfdCB1MzJUbXBTdGF0dXM7CisgICAgdWludDMyX3QgdTMyRmxhZyA9IDBVTDsKKworICAgIHUzMlRtcFN0YXR1cyA9IHNwaS0+U1RBVFVTOworCisgICAgLyogQ2hlY2sgYnVzeSBzdGF0dXMgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9CVVNZX01BU0spICYmICh1MzJUbXBTdGF0dXMgJiBTUElfU1RBVFVTX0JVU1lfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gU1BJX0JVU1lfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCBlbXB0eSBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfUlhfRU1QVFlfTUFTSykgJiYgKHUzMlRtcFN0YXR1cyAmIFNQSV9TVEFUVVNfUlhFTVBUWV9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBTUElfUlhfRU1QVFlfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCBmdWxsIGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9SWF9GVUxMX01BU0spICYmICh1MzJUbXBTdGF0dXMgJiBTUElfU1RBVFVTX1JYRlVMTF9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBTUElfUlhfRlVMTF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFRYIGVtcHR5IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9UWF9FTVBUWV9NQVNLKSAmJiAodTMyVG1wU3RhdHVzICYgU1BJX1NUQVRVU19UWEVNUFRZX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFNQSV9UWF9FTVBUWV9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFRYIGZ1bGwgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1RYX0ZVTExfTUFTSykgJiYgKHUzMlRtcFN0YXR1cyAmIFNQSV9TVEFUVVNfVFhGVUxMX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFNQSV9UWF9GVUxMX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgVFgvUlggcmVzZXQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1RYUlhfUkVTRVRfTUFTSykgJiYgKHUzMlRtcFN0YXR1cyAmIFNQSV9TVEFUVVNfVFhSWFJTVF9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBTUElfVFhSWF9SRVNFVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFNQSUVOIGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9TUElFTl9TVFNfTUFTSykgJiYgKHUzMlRtcFN0YXR1cyAmIFNQSV9TVEFUVVNfU1BJRU5TVFNfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gU1BJX1NQSUVOX1NUU19NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFNQSXhfU1MgbGluZSBzdGF0dXMgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9TU0xJTkVfU1RTX01BU0spICYmICh1MzJUbXBTdGF0dXMgJiBTUElfU1RBVFVTX1NTTElORV9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBTUElfU1NMSU5FX1NUU19NQVNLOworICAgIH0KKworICAgIHJldHVybiB1MzJGbGFnOworfQorCisKKy8qKgorICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBJMlMgc291cmNlIGNsb2NrIGZyZXF1ZW5jeS4KKyAgKiBAcGFyYW1baW5dICBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gSTJTIHNvdXJjZSBjbG9jayBmcmVxdWVuY3kgKEh6KS4KKyAgKiBAZGV0YWlscyBSZXR1cm4gdGhlIHNvdXJjZSBjbG9jayBmcmVxdWVuY3kgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5nIG9mIFNQSTBTRUwgKENMS19DTEtTRUwyWzU6NF0pIG9yIFNQSTFTRUwgKENMS19DTEtTRUwyWzc6Nl0pIG9yIFNQSTJTRUwgKENMS19DTEtTRUwyWzExOjEwXSkgb3IgU1BJM1NFTCAoQ0xLX0NMS1NFTDJbMTM6MTJdKS4KKyAgKi8KK3N0YXRpYyB1aW50MzJfdCBTUElJMlNfR2V0U291cmNlQ2xvY2tGcmVxKFNQSV9UICppMnMpCit7CisgICAgdWludDMyX3QgdTMyRnJlcTsKKworICAgIGlmKChpMnMgPT0gU1BJMCkgfHwgKGkycyA9PSBTUEkwX05TKSkKKyAgICB7CisgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkwU0VMX0hYVCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRnJlcSA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMFNFTF9QTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BDTEsxKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGcmVxID0gQ0xLX0dldFBDTEsxRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzEgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZigoaTJzID09IFNQSTEpIHx8IChpMnMgPT0gU1BJMV9OUykpCisgICAgeworICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTFfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMVNFTF9IWFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfUExMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGcmVxID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTFfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMVNFTF9QQ0xLMCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRnJlcSA9IENMS19HZXRQQ0xLMEZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEswICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGcmVxID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoKGkycyA9PSBTUEkyKSB8fCAoaTJzID09IFNQSTJfTlMpKQorICAgIHsKKyAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfSFhUKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGcmVxID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BMTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRnJlcSA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfUENMSzEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBDTEtfR2V0UENMSzFGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRnJlcSA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTNfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJM1NFTF9IWFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkzX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTNTRUxfUExMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGcmVxID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTNfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJM1NFTF9QQ0xLMCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRnJlcSA9IENMS19HZXRQQ0xLMEZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEswICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGcmVxID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHUzMkZyZXE7Cit9CisKKy8qKgorICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHNvbWUgcGFyYW1ldGVycyBvZiBJMlMgaW50ZXJmYWNlIGZvciBnZW5lcmFsIHB1cnBvc2UgdXNlLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1hc3RlclNsYXZlIEkyUyBvcGVyYXRpb24gbW9kZS4gVmFsaWQgdmFsdWVzIGFyZSBsaXN0ZWQgYmVsb3cuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSUkyU19NT0RFX01BU1RFUgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfTU9ERV9TTEFWRQorICAqIEBwYXJhbVtpbl0gdTMyU2FtcGxlUmF0ZSBTYW1wbGUgcmF0ZQorICAqIEBwYXJhbVtpbl0gdTMyV29yZFdpZHRoIERhdGEgbGVuZ3RoLiBWYWxpZCB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdy4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJSTJTX0RBVEFCSVRfOAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfREFUQUJJVF8xNgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfREFUQUJJVF8yNAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfREFUQUJJVF8zMgorICAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbHMgQXVkaW8gZm9ybWF0LiBWYWxpZCB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdy4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJSTJTX01PTk8KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJSTJTX1NURVJFTworICAqIEBwYXJhbVtpbl0gdTMyRGF0YUZvcm1hdCBEYXRhIGZvcm1hdC4gVmFsaWQgdmFsdWVzIGFyZSBsaXN0ZWQgYmVsb3cuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSUkyU19GT1JNQVRfSTJTCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSUkyU19GT1JNQVRfTVNCCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSUkyU19GT1JNQVRfUENNQQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfRk9STUFUX1BDTUIKKyAgKiBAcmV0dXJuIFJlYWwgc2FtcGxlIHJhdGUgb2YgbWFzdGVyIG1vZGUgb3IgcGVyaXBoZXJhbCBjbG9jayByYXRlIG9mIHNsYXZlIG1vZGUuCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IFNQSS9JMlMgY29udHJvbGxlciBhbmQgY29uZmlndXJlIEkyUyBjb250cm9sbGVyIGFjY29yZGluZyB0byB0aGUgaW5wdXQgcGFyYW1ldGVycy4KKyAgKiAgICAgICAgICBTZXQgVFggRklGTyB0aHJlc2hvbGQgdG8gMiBhbmQgUlggRklGTyB0aHJlc2hvbGQgdG8gMS4gQm90aCB0aGUgVFggYW5kIFJYIGZ1bmN0aW9ucyB3aWxsIGJlIGVuYWJsZWQuCisgICogICAgICAgICAgVGhlIGFjdHVhbCBzYW1wbGUgcmF0ZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIHRhcmdldCBzYW1wbGUgcmF0ZS4gVGhlIHJlYWwgc2FtcGxlIHJhdGUgd2lsbCBiZSByZXR1cm5lZCBmb3IgcmVmZXJlbmNlLgorICAgIEluIHNsYXZlIG1vZGUgZm9yIFNlY3VyZSwgdGhlIFNQSSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgd2lsbCBlcXVhbCB0byBBUEIgY2xvY2sgcmF0ZS4KKyAgICBJbiBzbGF2ZSBtb2RlIGZvciBOb24tU2VjdXJlLCB0aGUgU1BJIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSB3aWxsIGVxdWFsIHRvIHRoZSBjbG9jayByYXRlIHNldCBpbiBzZWN1cmUgbW9kZS4KKyAgKi8KK3VpbnQzMl90IFNQSUkyU19PcGVuKFNQSV9UICppMnMsIHVpbnQzMl90IHUzMk1hc3RlclNsYXZlLCB1aW50MzJfdCB1MzJTYW1wbGVSYXRlLCB1aW50MzJfdCB1MzJXb3JkV2lkdGgsIHVpbnQzMl90IHUzMkNoYW5uZWxzLCB1aW50MzJfdCB1MzJEYXRhRm9ybWF0KQoreworICAgIHVpbnQzMl90IHUzMkRpdmlkZXI7CisgICAgdWludDMyX3QgdTMyQml0UmF0ZSwgdTMyU3JjQ2xrLCB1MzJSZXRWYWx1ZTsKKyAgICB1aW50MzJfdCB1MzJQQ0xLMEZyZXEsIHUzMlBDTEsxRnJlcTsKKworICAgIGlmKCEoX19QQygpICYgTlNfT0ZGU0VUKSkKKyAgICB7CisgICAgICAgIC8qIFJlc2V0IFNQSS9JMlMgKi8KKyAgICAgICAgaWYoKGkycyA9PSBTUEkwKSB8fCAoaTJzID09IFNQSTBfTlMpKQorICAgICAgICB7CisgICAgICAgICAgICBTWVMtPklQUlNUMSB8PSBTWVNfSVBSU1QxX1NQSTBSU1RfTXNrOworICAgICAgICAgICAgU1lTLT5JUFJTVDEgJj0gflNZU19JUFJTVDFfU1BJMFJTVF9Nc2s7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoaTJzID09IFNQSTEpIHx8IChpMnMgPT0gU1BJMV9OUykpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNZUy0+SVBSU1QxIHw9IFNZU19JUFJTVDFfU1BJMVJTVF9Nc2s7CisgICAgICAgICAgICBTWVMtPklQUlNUMSAmPSB+U1lTX0lQUlNUMV9TUEkxUlNUX01zazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChpMnMgPT0gU1BJMikgfHwgKGkycyA9PSBTUEkyX05TKSkKKyAgICAgICAgeworICAgICAgICAgICAgU1lTLT5JUFJTVDEgfD0gU1lTX0lQUlNUMV9TUEkyUlNUX01zazsKKyAgICAgICAgICAgIFNZUy0+SVBSU1QxICY9IH5TWVNfSVBSU1QxX1NQSTJSU1RfTXNrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgU1lTLT5JUFJTVDIgfD0gU1lTX0lQUlNUMl9TUEkzUlNUX01zazsKKyAgICAgICAgICAgIFNZUy0+SVBSU1QyICY9IH5TWVNfSVBSU1QyX1NQSTNSU1RfTXNrOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ29uZmlndXJlIEkyUyBjb250cm9sbGVyICovCisgICAgaTJzLT5JMlNDVEwgPSB1MzJNYXN0ZXJTbGF2ZSB8IHUzMldvcmRXaWR0aCB8IHUzMkNoYW5uZWxzIHwgdTMyRGF0YUZvcm1hdDsKKyAgICAvKiBTZXQgVFggRklGTyB0aHJlc2hvbGQgdG8gMiBhbmQgUlggRklGTyB0aHJlc2hvbGQgdG8gMSAqLworICAgIGkycy0+RklGT0NUTCA9IFNQSUkyU19GSUZPX1RYX0xFVkVMX1dPUkRfMiB8IFNQSUkyU19GSUZPX1JYX0xFVkVMX1dPUkRfMjsKKworICAgIGlmKHUzMk1hc3RlclNsYXZlID09IFNQSUkyU19NT0RFX01BU1RFUikKKyAgICB7CisgICAgICAgIC8qIEdldCB0aGUgc291cmNlIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgdTMyU3JjQ2xrID0gU1BJSTJTX0dldFNvdXJjZUNsb2NrRnJlcShpMnMpOworCisgICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgYml0IGNsb2NrIHJhdGUgKi8KKyAgICAgICAgdTMyQml0UmF0ZSA9IHUzMlNhbXBsZVJhdGUgKiAoKHUzMldvcmRXaWR0aCA+PiBTUElfSTJTQ1RMX1dEV0lEVEhfUG9zKSArIDFVTCkgKiAxNlVMOworICAgICAgICB1MzJEaXZpZGVyID0gKCgoKCh1MzJTcmNDbGsgKiAxMFVMKSAvIHUzMkJpdFJhdGUpID4+IDFVTCkgKyA1VUwpIC8gMTBVTCkgLSAxVUw7IC8qIFJvdW5kIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgKi8KKyAgICAgICAgLyogU2V0IEJDTEtESVYgc2V0dGluZyAqLworICAgICAgICBpMnMtPkkyU0NMSyA9IChpMnMtPkkyU0NMSyAmIH5TUElfSTJTQ0xLX0JDTEtESVZfTXNrKSB8ICh1MzJEaXZpZGVyIDw8IFNQSV9JMlNDTEtfQkNMS0RJVl9Qb3MpOworCisgICAgICAgIC8qIENhbGN1bGF0ZSBiaXQgY2xvY2sgcmF0ZSAqLworICAgICAgICB1MzJCaXRSYXRlID0gdTMyU3JjQ2xrIC8gKCh1MzJEaXZpZGVyICsgMVVMKSAqIDJVTCk7CisgICAgICAgIC8qIENhbGN1bGF0ZSByZWFsIHNhbXBsZSByYXRlICovCisgICAgICAgIHUzMlNhbXBsZVJhdGUgPSB1MzJCaXRSYXRlIC8gKCgodTMyV29yZFdpZHRoID4+IFNQSV9JMlNDVExfV0RXSURUSF9Qb3MpICsgMVVMKSAqIDE2VUwpOworCisgICAgICAgIC8qIEVuYWJsZSBUWCBmdW5jdGlvbiwgUlggZnVuY3Rpb24gYW5kIEkyUyBtb2RlLiAqLworICAgICAgICBpMnMtPkkyU0NUTCB8PSAoU1BJX0kyU0NUTF9SWEVOX01zayB8IFNQSV9JMlNDVExfVFhFTl9Nc2sgfCBTUElfSTJTQ1RMX0kyU0VOX01zayk7CisKKyAgICAgICAgLyogUmV0dXJuIHRoZSByZWFsIHNhbXBsZSByYXRlICovCisgICAgICAgIHUzMlJldFZhbHVlID0gdTMyU2FtcGxlUmF0ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogU2V0IEJDTEtESVYgPSAwICovCisgICAgICAgIGkycy0+STJTQ0xLICY9IH5TUElfSTJTQ0xLX0JDTEtESVZfTXNrOworICAgICAgICAvKiBHZXQgQVBCMCBjbG9jayBmcmVxdWVuY3kgKi8KKyAgICAgICAgdTMyUENMSzBGcmVxID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgICAgICAvKiBHZXQgQVBCMSBjbG9jayBmcmVxdWVuY3kgKi8KKyAgICAgICAgdTMyUENMSzFGcmVxID0gQ0xLX0dldFBDTEsxRnJlcSgpOworCisgICAgICAgIGlmKChpMnMgPT0gU1BJMCkgfHwgKGkycyA9PSBTUEkwX05TKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIShfX1BDKCkgJiBOU19PRkZTRVQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNldCB0aGUgcGVyaXBoZXJhbCBjbG9jayByYXRlIHRvIGVxdWFsIEFQQiBjbG9jayByYXRlICovCisgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJMFNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTBTRUxfUENMSzE7CisgICAgICAgICAgICAgICAgLyogUmV0dXJuIHNsYXZlIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gdTMyUENMSzFGcmVxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIENoZWNrIGNsb2NrIHNvdXJjZSBvZiBJMlMgKi8KKyAgICAgICAgICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMFNFTF9IWFQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTBTRUxfUExMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMFNFTF9QQ0xLMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gQ0xLX0dldFBDTEsxRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzEgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogRW5hYmxlIFRYIGZ1bmN0aW9uLCBSWCBmdW5jdGlvbiBhbmQgSTJTIG1vZGUuICovCisgICAgICAgICAgICBpMnMtPkkyU0NUTCB8PSAoU1BJX0kyU0NUTF9SWEVOX01zayB8IFNQSV9JMlNDVExfVFhFTl9Nc2sgfCBTUElfSTJTQ1RMX0kyU0VOX01zayk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoaTJzID09IFNQSTEpIHx8IChpMnMgPT0gU1BJMV9OUykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCEoX19QQygpICYgTlNfT0ZGU0VUKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSB0byBlcXVhbCBBUEIgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIENMSy0+Q0xLU0VMMiA9IChDTEstPkNMS1NFTDIgJiAofkNMS19DTEtTRUwyX1NQSTFTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BDTEswOworICAgICAgICAgICAgICAgIC8qIFJldHVybiBzbGF2ZSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMlBDTEswRnJlcTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDaGVjayBjbG9jayBzb3VyY2Ugb2YgSTJTICovCisgICAgICAgICAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfSFhUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMV9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfUENMSzApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IENMS19HZXRQQ0xLMEZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEswICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIEVuYWJsZSBUWCBmdW5jdGlvbiwgUlggZnVuY3Rpb24gYW5kIEkyUyBtb2RlLiAqLworICAgICAgICAgICAgaTJzLT5JMlNDVEwgfD0gKFNQSV9JMlNDVExfUlhFTl9Nc2sgfCBTUElfSTJTQ1RMX1RYRU5fTXNrIHwgU1BJX0kyU0NUTF9JMlNFTl9Nc2spOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKGkycyA9PSBTUEkyKSB8fCAoaTJzID09IFNQSTJfTlMpKQorICAgICAgICB7CisgICAgICAgICAgICBpZighKF9fUEMoKSAmIE5TX09GRlNFVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU2V0IHRoZSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgdG8gZXF1YWwgQVBCIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgICAgICBDTEstPkNMS1NFTDIgPSAoQ0xLLT5DTEtTRUwyICYgKH5DTEtfQ0xLU0VMMl9TUEkyU0VMX01zaykpIHwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9QQ0xLMTsKKyAgICAgICAgICAgICAgICAvKiBSZXR1cm4gc2xhdmUgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJQQ0xLMUZyZXE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQ2hlY2sgY2xvY2sgc291cmNlIG9mIEkyUyAqLworICAgICAgICAgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX0hYVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTJfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMlNFTF9QTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BDTEsxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBDTEtfR2V0UENMSzFGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBFbmFibGUgVFggZnVuY3Rpb24sIFJYIGZ1bmN0aW9uIGFuZCBJMlMgbW9kZS4gKi8KKyAgICAgICAgICAgIGkycy0+STJTQ1RMIHw9IChTUElfSTJTQ1RMX1JYRU5fTXNrIHwgU1BJX0kyU0NUTF9UWEVOX01zayB8IFNQSV9JMlNDVExfSTJTRU5fTXNrKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCEoX19QQygpICYgTlNfT0ZGU0VUKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSB0byBlcXVhbCBBUEIgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIENMSy0+Q0xLU0VMMiA9IChDTEstPkNMS1NFTDIgJiAofkNMS19DTEtTRUwyX1NQSTNTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BDTEswOworICAgICAgICAgICAgICAgIC8qIFJldHVybiBzbGF2ZSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMlBDTEswRnJlcTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDaGVjayBjbG9jayBzb3VyY2Ugb2YgSTJTICovCisgICAgICAgICAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkzX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTNTRUxfSFhUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJM19NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkzX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTNTRUxfUENMSzApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IENMS19HZXRQQ0xLMEZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEswICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIEVuYWJsZSBUWCBmdW5jdGlvbiwgUlggZnVuY3Rpb24gYW5kIEkyUyBtb2RlLiAqLworICAgICAgICAgICAgaTJzLT5JMlNDVEwgfD0gKFNQSV9JMlNDVExfUlhFTl9Nc2sgfCBTUElfSTJTQ1RMX1RYRU5fTXNrIHwgU1BJX0kyU0NUTF9JMlNFTl9Nc2spOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHUzMlJldFZhbHVlOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgSTJTIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgRGlzYWJsZSBJMlMgZnVuY3Rpb24uCisgICovCit2b2lkIFNQSUkyU19DbG9zZShTUElfVCAqaTJzKQoreworICAgIGkycy0+STJTQ1RMICY9IH5TUElfSTJTQ1RMX0kyU0VOX01zazsKK30KKworLyoqCisgICogQGJyaWVmIEVuYWJsZSBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzLgorICAqICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgc291cmNlLiBWYWxpZCB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdy4KKyAgKiAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfRklGT19UWFRIX0lOVF9NQVNLCisgICogICAgICAgICAgICAtIFxyZWYgU1BJSTJTX0ZJRk9fUlhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgLSBccmVmIFNQSUkyU19GSUZPX1JYT1ZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfRklGT19SWFRPX0lOVF9NQVNLCisgICogICAgICAgICAgICAtIFxyZWYgU1BJSTJTX1RYVUZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfUklHSFRfWkNfSU5UX01BU0sKKyAgKiAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfTEVGVF9aQ19JTlRfTUFTSworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgaW50ZXJydXB0IGFjY29yZGluZyB0byB0aGUgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCit2b2lkIFNQSUkyU19FbmFibGVJbnQoU1BJX1QgKmkycywgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICAvKiBFbmFibGUgVFggdGhyZXNob2xkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElJMlNfRklGT19UWFRIX0lOVF9NQVNLKSA9PSBTUElJMlNfRklGT19UWFRIX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgaTJzLT5GSUZPQ1RMIHw9IFNQSV9GSUZPQ1RMX1RYVEhJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBSWCB0aHJlc2hvbGQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19GSUZPX1JYVEhfSU5UX01BU0spID09IFNQSUkyU19GSUZPX1JYVEhfSU5UX01BU0spCisgICAgeworICAgICAgICBpMnMtPkZJRk9DVEwgfD0gU1BJX0ZJRk9DVExfUlhUSElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFJYIG92ZXJydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19GSUZPX1JYT1ZfSU5UX01BU0spID09IFNQSUkyU19GSUZPX1JYT1ZfSU5UX01BU0spCisgICAgeworICAgICAgICBpMnMtPkZJRk9DVEwgfD0gU1BJX0ZJRk9DVExfUlhPVklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFJYIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElJMlNfRklGT19SWFRPX0lOVF9NQVNLKSA9PSBTUElJMlNfRklGT19SWFRPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgaTJzLT5GSUZPQ1RMIHw9IFNQSV9GSUZPQ1RMX1JYVE9JRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBUWCB1bmRlcmZsb3cgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19UWFVGX0lOVF9NQVNLKSA9PSBTUElJMlNfVFhVRl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIGkycy0+RklGT0NUTCB8PSBTUElfRklGT0NUTF9UWFVGSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgcmlnaHQgY2hhbm5lbCB6ZXJvIGNyb3NzIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElJMlNfUklHSFRfWkNfSU5UX01BU0spID09IFNQSUkyU19SSUdIVF9aQ19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIGkycy0+STJTQ1RMIHw9IFNQSV9JMlNDVExfUlpDSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgbGVmdCBjaGFubmVsIHplcm8gY3Jvc3MgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19MRUZUX1pDX0lOVF9NQVNLKSA9PSBTUElJMlNfTEVGVF9aQ19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIGkycy0+STJTQ1RMIHw9IFNQSV9JMlNDVExfTFpDSUVOX01zazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIGludGVycnVwdCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMuCisgICogICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuIFZhbGlkIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93LgorICAqICAgICAgICAgICAgLSBccmVmIFNQSUkyU19GSUZPX1RYVEhfSU5UX01BU0sKKyAgKiAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfRklGT19SWFRIX0lOVF9NQVNLCisgICogICAgICAgICAgICAtIFxyZWYgU1BJSTJTX0ZJRk9fUlhPVl9JTlRfTUFTSworICAqICAgICAgICAgICAgLSBccmVmIFNQSUkyU19GSUZPX1JYVE9fSU5UX01BU0sKKyAgKiAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfVFhVRl9JTlRfTUFTSworICAqICAgICAgICAgICAgLSBccmVmIFNQSUkyU19SSUdIVF9aQ19JTlRfTUFTSworICAqICAgICAgICAgICAgLSBccmVmIFNQSUkyU19MRUZUX1pDX0lOVF9NQVNLCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgaW50ZXJydXB0IGFjY29yZGluZyB0byB0aGUgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCit2b2lkIFNQSUkyU19EaXNhYmxlSW50KFNQSV9UICppMnMsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgLyogRGlzYWJsZSBUWCB0aHJlc2hvbGQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19GSUZPX1RYVEhfSU5UX01BU0spID09IFNQSUkyU19GSUZPX1RYVEhfSU5UX01BU0spCisgICAgeworICAgICAgICBpMnMtPkZJRk9DVEwgJj0gflNQSV9GSUZPQ1RMX1RYVEhJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgUlggdGhyZXNob2xkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElJMlNfRklGT19SWFRIX0lOVF9NQVNLKSA9PSBTUElJMlNfRklGT19SWFRIX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgaTJzLT5GSUZPQ1RMICY9IH5TUElfRklGT0NUTF9SWFRISUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFJYIG92ZXJydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19GSUZPX1JYT1ZfSU5UX01BU0spID09IFNQSUkyU19GSUZPX1JYT1ZfSU5UX01BU0spCisgICAgeworICAgICAgICBpMnMtPkZJRk9DVEwgJj0gflNQSV9GSUZPQ1RMX1JYT1ZJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgUlggdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19GSUZPX1JYVE9fSU5UX01BU0spID09IFNQSUkyU19GSUZPX1JYVE9fSU5UX01BU0spCisgICAgeworICAgICAgICBpMnMtPkZJRk9DVEwgJj0gflNQSV9GSUZPQ1RMX1JYVE9JRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgVFggdW5kZXJmbG93IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElJMlNfVFhVRl9JTlRfTUFTSykgPT0gU1BJSTJTX1RYVUZfSU5UX01BU0spCisgICAgeworICAgICAgICBpMnMtPkZJRk9DVEwgJj0gflNQSV9GSUZPQ1RMX1RYVUZJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgcmlnaHQgY2hhbm5lbCB6ZXJvIGNyb3NzIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElJMlNfUklHSFRfWkNfSU5UX01BU0spID09IFNQSUkyU19SSUdIVF9aQ19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIGkycy0+STJTQ1RMICY9IH5TUElfSTJTQ1RMX1JaQ0lFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBsZWZ0IGNoYW5uZWwgemVybyBjcm9zcyBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJSTJTX0xFRlRfWkNfSU5UX01BU0spID09IFNQSUkyU19MRUZUX1pDX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgaTJzLT5JMlNDVEwgJj0gflNQSV9JMlNDVExfTFpDSUVOX01zazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIG1hc3RlciBjbG9jayAoTUNMSykuCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQnVzQ2xvY2sgVGhlIHRhcmdldCBNQ0xLIGNsb2NrIHJhdGUuCisgICogQHJldHVybiBBY3R1YWwgTUNMSyBjbG9jayByYXRlCisgICogQGRldGFpbHMgU2V0IHRoZSBtYXN0ZXIgY2xvY2sgcmF0ZSBhY2NvcmRpbmcgdG8gdTMyQnVzQ2xvY2sgcGFyYW1ldGVyIGFuZCBlbmFibGUgbWFzdGVyIGNsb2NrIG91dHB1dC4KKyAgKiAgICAgICAgICBUaGUgYWN0dWFsIG1hc3RlciBjbG9jayByYXRlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgdGFyZ2V0IG1hc3RlciBjbG9jayByYXRlLiBUaGUgcmVhbCBtYXN0ZXIgY2xvY2sgcmF0ZSB3aWxsIGJlIHJldHVybmVkIGZvciByZWZlcmVuY2UuCisgICovCit1aW50MzJfdCBTUElJMlNfRW5hYmxlTUNMSyhTUElfVCAqaTJzLCB1aW50MzJfdCB1MzJCdXNDbG9jaykKK3sKKyAgICB1aW50MzJfdCB1MzJEaXZpZGVyOworICAgIHVpbnQzMl90IHUzMlNyY0NsaywgdTMyUmV0VmFsdWU7CisKKyAgICB1MzJTcmNDbGsgPSBTUElJMlNfR2V0U291cmNlQ2xvY2tGcmVxKGkycyk7CisgICAgaWYodTMyQnVzQ2xvY2sgPT0gdTMyU3JjQ2xrKQorICAgIHsKKyAgICAgICAgdTMyRGl2aWRlciA9IDBVTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyRGl2aWRlciA9ICh1MzJTcmNDbGsgLyB1MzJCdXNDbG9jaykgPj4gMVVMOworICAgICAgICAvKiBNQ0xLRElWIGlzIGEgNy1iaXQgd2lkdGggY29uZmlndXJhdGlvbi4gVGhlIG1heGltdW0gdmFsdWUgaXMgMHg3Ri4gKi8KKyAgICAgICAgaWYodTMyRGl2aWRlciA+IDB4N0ZVTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRGl2aWRlciA9IDB4N0ZVTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFdyaXRlIHUzMkRpdmlkZXIgdG8gTUNMS0RJViAoU1BJX0kyU0NMS1s2OjBdKSAqLworICAgIGkycy0+STJTQ0xLID0gKGkycy0+STJTQ0xLICYgflNQSV9JMlNDTEtfTUNMS0RJVl9Nc2spIHwgKHUzMkRpdmlkZXIgPDwgU1BJX0kyU0NMS19NQ0xLRElWX1Bvcyk7CisKKyAgICAvKiBFbmFibGUgTUNMSyBvdXRwdXQgKi8KKyAgICBpMnMtPkkyU0NUTCB8PSBTUElfSTJTQ1RMX01DTEtFTl9Nc2s7CisKKyAgICBpZih1MzJEaXZpZGVyID09IDBVTCkKKyAgICB7CisgICAgICAgIHUzMlJldFZhbHVlID0gdTMyU3JjQ2xrOyAvKiBJZiBNQ0xLRElWPTAsIG1hc3RlciBjbG9jayByYXRlIGlzIGVxdWFsIHRvIHRoZSBzb3VyY2UgY2xvY2sgcmF0ZS4gKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyUmV0VmFsdWUgPSAoKHUzMlNyY0NsayA+PiAxVUwpIC8gdTMyRGl2aWRlcik7IC8qIElmIE1DTEtESVY+MCwgbWFzdGVyIGNsb2NrIHJhdGUgPSBzb3VyY2UgY2xvY2sgcmF0ZSAvIChNQ0xLRElWICogMikgKi8KKyAgICB9CisKKyAgICByZXR1cm4gdTMyUmV0VmFsdWU7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBtYXN0ZXIgY2xvY2sgKE1DTEspLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBDbGVhciBNQ0xLRU4gYml0IG9mIFNQSV9JMlNDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBtYXN0ZXIgY2xvY2sgb3V0cHV0LgorICAqLwordm9pZCBTUElJMlNfRGlzYWJsZU1DTEsoU1BJX1QgKmkycykKK3sKKyAgICBpMnMtPkkyU0NUTCAmPSB+U1BJX0kyU0NUTF9NQ0xLRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBGSUZPIHRocmVzaG9sZCBzZXR0aW5nLgorICAqIEBwYXJhbVtpbl0gIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyVHhUaHJlc2hvbGQgRGVjaWRlcyB0aGUgVFggRklGTyB0aHJlc2hvbGQuIEl0IGNvdWxkIGJlIDAgfiAzLgorICAqIEBwYXJhbVtpbl0gIHUzMlJ4VGhyZXNob2xkIERlY2lkZXMgdGhlIFJYIEZJRk8gdGhyZXNob2xkLiBJdCBjb3VsZCBiZSAwIH4gMy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBTZXQgVFggRklGTyB0aHJlc2hvbGQgYW5kIFJYIEZJRk8gdGhyZXNob2xkIGNvbmZpZ3VyYXRpb25zLgorICAqLwordm9pZCBTUElJMlNfU2V0RklGTyhTUElfVCAqaTJzLCB1aW50MzJfdCB1MzJUeFRocmVzaG9sZCwgdWludDMyX3QgdTMyUnhUaHJlc2hvbGQpCit7CisgICAgaTJzLT5GSUZPQ1RMID0gKGkycy0+RklGT0NUTCAmIH4oU1BJX0ZJRk9DVExfVFhUSF9Nc2sgfCBTUElfRklGT0NUTF9SWFRIX01zaykpIHwKKyAgICAgICAgICAgICAgICAgICAodTMyVHhUaHJlc2hvbGQgPDwgU1BJX0ZJRk9DVExfVFhUSF9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAodTMyUnhUaHJlc2hvbGQgPDwgU1BJX0ZJRk9DVExfUlhUSF9Qb3MpOworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNQSV9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTUElfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3N5cy5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvc3lzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkYWEwMwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3N5cy5jCkBAIC0wLDAgKzEsMzg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc3lzLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBTeXN0ZW0gTWFuYWdlciAoU1lTKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU1lTX0RyaXZlciBTWVMgRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBTWVNfRVhQT1JURURfRlVOQ1RJT05TIFNZUyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIHJlc2V0IHNvdXJjZQorICAqIEBwYXJhbVtpbl0gIHUzMlNyYyBpcyBzeXN0ZW0gcmVzZXQgc291cmNlLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfUlNUU1RTX0NQVUxLUkZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19SU1RTVFNfQ1BVUkZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19SU1RTVFNfU1lTUkZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19SU1RTVFNfQk9EUkZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19SU1RTVFNfTFZSRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1JTVFNUU19XRFRSRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1JTVFNUU19QSU5SRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1JTVFNUU19QT1JGX01zaworICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGNsZWFyIHRoZSBzZWxlY3RlZCBzeXN0ZW0gcmVzZXQgc291cmNlLgorICAqLwordm9pZCBTWVNfQ2xlYXJSZXNldFNyYyh1aW50MzJfdCB1MzJTcmMpCit7CisgICAgU1lTLT5SU1RTVFMgPSB1MzJTcmM7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBCcm93bi1vdXQgZGV0ZWN0b3Igb3V0cHV0IHN0YXR1cworICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dmFsICAgICAwIFN5c3RlbSB2b2x0YWdlIGlzIGhpZ2hlciB0aGFuIEJPRFZMIHNldHRpbmcgb3IgQk9ERU4gaXMgMC4KKyAgKiBAcmV0dmFsICAgICAxIFN5c3RlbSB2b2x0YWdlIGlzIGxvd2VyIHRoYW4gQk9EVkwgc2V0dGluZy4KKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGdldCBCcm93bi1vdXQgZGV0ZWN0b3Igb3V0cHV0IHN0YXR1cy4KKyAgKi8KK3VpbnQzMl90IFNZU19HZXRCT0RTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gKChTWVMtPkJPRENUTCAmIFNZU19CT0RDVExfQk9ET1VUX01zaykgPj4gU1lTX0JPRENUTF9CT0RPVVRfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHJlc2V0IHN0YXR1cyByZWdpc3RlciB2YWx1ZQorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBSZXNldCBzb3VyY2UKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgc3lzdGVtIHJlc2V0IHN0YXR1cyByZWdpc3RlciB2YWx1ZS4KKyAgKi8KK3VpbnQzMl90IFNZU19HZXRSZXNldFNyYyh2b2lkKQoreworICAgIHJldHVybiAoU1lTLT5SU1RTVFMpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDaGVjayBpZiByZWdpc3RlciBpcyBsb2NrZWQgbm9yIG5vdAorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dmFsICAgICAwIFdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gaXMgZGlzYWJsZWQuCisgICogICAgICAgICAgICAgMSBXcml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIGlzIGVuYWJsZWQuCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBjaGVjayByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGJpdCBzZXR0aW5nLgorICAqLwordWludDMyX3QgU1lTX0lzUmVnTG9ja2VkKHZvaWQpCit7CisgICAgcmV0dXJuIFNZUy0+UkVHTENUTCAmIDFVTCA/IDBVTCA6IDFVTDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHByb2R1Y3QgSUQKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgUHJvZHVjdCBJRAorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZ2V0IHByb2R1Y3QgSUQuCisgICovCit1aW50MzJfdCAgU1lTX1JlYWRQRElEKHZvaWQpCit7CisgICAgcmV0dXJuIFNZUy0+UERJRDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgUmVzZXQgY2hpcCB3aXRoIGNoaXAgcmVzZXQKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gcmVzZXQgY2hpcCB3aXRoIGNoaXAgcmVzZXQuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBTWVNfUmVzZXRDaGlwKHZvaWQpCit7CisgICAgU1lTLT5JUFJTVDAgfD0gU1lTX0lQUlNUMF9DSElQUlNUX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgUmVzZXQgY2hpcCB3aXRoIENQVSByZXNldAorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiByZXNldCBDUFUgd2l0aCBDUFUgcmVzZXQuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBTWVNfUmVzZXRDUFUodm9pZCkKK3sKKyAgICBTWVMtPklQUlNUMCB8PSBTWVNfSVBSU1QwX0NQVVJTVF9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFJlc2V0IHNlbGVjdGVkIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMk1vZHVsZUluZGV4IGlzIG1vZHVsZSBpbmRleC4gSW5jbHVkaW5nIDoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUERNQTBfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFBETUExX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBFQklfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFVTQkhfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFNESDBfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIENSQ19SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ1JQVF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgR1BJT19SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVE1SMF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVE1SMV9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVE1SMl9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVE1SM19SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQUNNUDAxX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBJMkMwX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBJMkMxX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBJMkMyX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBRU1BJMF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1BJMF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1BJMV9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1BJMl9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1BJM19SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDBfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQxX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUMl9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDNfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQ0X1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUNV9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0FOMF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgT1RHX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBVU0JEX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBFQURDX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBJMlMwX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBUUk5HX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBTQzBfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFNDMV9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0MyX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBVU0NJMF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVVNDSTFfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIERBQ19SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRVBXTTBfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIEVQV00xX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBCUFdNMF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQlBXTTFfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFFFSTBfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFFFSTFfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIEVDQVAwX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBFQ0FQMV9SU1QKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiByZXNldCBzZWxlY3RlZCBtb2R1bGUuCisgICovCit2b2lkIFNZU19SZXNldE1vZHVsZSh1aW50MzJfdCB1MzJNb2R1bGVJbmRleCkKK3sKKyAgICB1aW50MzJfdCB1MzJUbXBWYWwgPSAwVUwsIHUzMlRtcEFkZHIgPSAwVUw7CisKKyAgICAvKiBHZW5lcmF0ZSByZXNldCBzaWduYWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlICovCisgICAgdTMyVG1wVmFsID0gKDFVTCA8PCAodTMyTW9kdWxlSW5kZXggJiAweDAwZmZmZmZmVUwpKTsKKyAgICB1MzJUbXBBZGRyID0gKHVpbnQzMl90KSZTWVMtPklQUlNUMCArICgodTMyTW9kdWxlSW5kZXggPj4gMjRVTCkpOworICAgICoodWludDMyX3QgKil1MzJUbXBBZGRyIHw9IHUzMlRtcFZhbDsKKworICAgIC8qIFJlbGVhc2UgY29ycmVzcG9uZGluZyBtb2R1bGUgZnJvbSByZXNldCBzdGF0ZSAqLworICAgIHUzMlRtcFZhbCA9IH4oMVVMIDw8ICh1MzJNb2R1bGVJbmRleCAmIDB4MDBmZmZmZmZVTCkpOworICAgICoodWludDMyX3QgKil1MzJUbXBBZGRyICY9IHUzMlRtcFZhbDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIGFuZCBjb25maWd1cmUgQnJvd24tb3V0IGRldGVjdG9yIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSAgaTMyTW9kZSBpcyByZXNldCBvciBpbnRlcnJ1cHQgbW9kZS4gSW5jbHVkaW5nIDoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX0JPRENUTF9CT0RfUlNUX0VOCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19CT0RDVExfQk9EX0lOVEVSUlVQVF9FTgorICAqIEBwYXJhbVtpbl0gIHUzMkJPRExldmVsIGlzIEJyb3duLW91dCB2b2x0YWdlIGxldmVsLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfQk9EQ1RMX0JPRFZMXzFfNlYKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX0JPRENUTF9CT0RWTF8xXzhWCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19CT0RDVExfQk9EVkxfMl8wVgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfQk9EQ1RMX0JPRFZMXzJfMlYKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX0JPRENUTF9CT0RWTF8yXzRWCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19CT0RDVExfQk9EVkxfMl82VgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfQk9EQ1RMX0JPRFZMXzJfOFYKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX0JPRENUTF9CT0RWTF8zXzBWCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlIEJyb3duLW91dCBkZXRlY3RvciByZXNldCBvciBpbnRlcnJ1cHQgbW9kZSwgZW5hYmxlIEJyb3duLW91dCBmdW5jdGlvbiBhbmQgc2V0IEJyb3duLW91dCB2b2x0YWdlIGxldmVsLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgU1lTX0VuYWJsZUJPRChpbnQzMl90IGkzMk1vZGUsIHVpbnQzMl90IHUzMkJPRExldmVsKQoreworICAgIC8qIEVuYWJsZSBCcm93bi1vdXQgRGV0ZWN0b3IgZnVuY3Rpb24gKi8KKyAgICBTWVMtPkJPRENUTCB8PSBTWVNfQk9EQ1RMX0JPREVOX01zazsKKworICAgIC8qIEVuYWJsZSBCcm93bi1vdXQgaW50ZXJydXB0IG9yIHJlc2V0IGZ1bmN0aW9uICovCisgICAgU1lTLT5CT0RDVEwgPSAoU1lTLT5CT0RDVEwgJiB+U1lTX0JPRENUTF9CT0RSU1RFTl9Nc2spIHwgKHVpbnQzMl90KWkzMk1vZGU7CisKKyAgICAvKiBTZWxlY3QgQnJvd24tb3V0IERldGVjdG9yIHRocmVzaG9sZCB2b2x0YWdlICovCisgICAgU1lTLT5CT0RDVEwgPSAoU1lTLT5CT0RDVEwgJiB+U1lTX0JPRENUTF9CT0RWTF9Nc2spIHwgdTMyQk9ETGV2ZWw7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgQnJvd24tb3V0IGRldGVjdG9yIGZ1bmN0aW9uCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGRpc2FibGUgQnJvd24tb3V0IGRldGVjdG9yIGZ1bmN0aW9uLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgU1lTX0Rpc2FibGVCT0Qodm9pZCkKK3sKKyAgICBTWVMtPkJPRENUTCAmPSB+U1lTX0JPRENUTF9CT0RFTl9Nc2s7Cit9CisKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFBvd2VyIExldmVsCisgICogQHBhcmFtW2luXSAgdTMyUG93ZXJMZXZlbCBpcyBwb3dlciBsZXZlbCBzZXR0aW5nLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfUExDVExfUExTRUxfUEwwCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19QTENUTF9QTFNFTF9QTDEKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBzZWxlY3QgcG93ZXIgbGV2ZWwuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBTWVNfU2V0UG93ZXJMZXZlbCh1aW50MzJfdCB1MzJQb3dlckxldmVsKQoreworICAgIC8qIFNldCBwb3dlciB2b2x0YWdlIGxldmVsICovCisgICAgU1lTLT5QTENUTCA9IChTWVMtPlBMQ1RMICYgKH5TWVNfUExDVExfUExTRUxfTXNrKSkgfCAodTMyUG93ZXJMZXZlbCk7Cit9CisKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IE1haW4gVm9sdGFnZSBSZWd1bGF0b3IgVHlwZQorICAqIEBwYXJhbVtpbl0gIHUzMlBvd2VyUmVndWxhdG9yIGlzIG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZS4gSW5jbHVkaW5nIDoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1BMQ1RMX01WUlNfTERPCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19QTENUTF9NVlJTX0RDREMKKyAgKiBAcmV0dmFsICAgICAwICBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUgc2V0dGluZyBpcyBub3QgZmluaXNoZWQKKyAgKiBAcmV0dmFsICAgICAxICBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUgc2V0dGluZyBpcyBmaW5pc2hlZAorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gc2V0IG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZS4KKyAgKiAgICAgICAgICAgICBUaGUgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIHNldHRpbmcgdG8gRENEQyBjYW5ub3QgZmluaXNoZWQgaWYgdGhlIGluZHVjdG9yIGlzIG5vdCBkZXRlY3RlZC4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit1aW50MzJfdCBTWVNfU2V0UG93ZXJSZWd1bGF0b3IodWludDMyX3QgdTMyUG93ZXJSZWd1bGF0b3IpCit7CisgICAgaW50MzJfdCBpMzJUaW1lT3V0Q250ID0gNDAwOworICAgIHVpbnQzMl90IHUzMlJldCA9IDFVOworICAgIHVpbnQzMl90IHUzMlBvd2VyUmVnU3RhdHVzOworCisgICAgLyogR2V0IG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBzdGF0dXMgKi8KKyAgICB1MzJQb3dlclJlZ1N0YXR1cyA9IFNZUy0+UExTVFMgJiBTWVNfUExTVFNfQ1VSTVZSX01zazsKKworICAgIC8qIFNldCBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUgKi8KKyAgICBpZigodTMyUG93ZXJSZWd1bGF0b3IgPT0gU1lTX1BMQ1RMX01WUlNfRENEQykgJiYgKHUzMlBvd2VyUmVnU3RhdHVzID09IFNZU19QTFNUU19DVVJNVlJfTERPKSkKKyAgICB7CisKKyAgICAgICAgLyogU2V0IG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSB0byBEQ0RDIGlmIHN0YXR1cyBpcyBMRE8gKi8KKyAgICAgICAgU1lTLT5QTENUTCB8PSBTWVNfUExDVExfTVZSU19Nc2s7CisKKyAgICAgICAgLyogV2FpdCBpbmR1Y3Rpb24gZGV0ZWN0aW9uIGFuZCBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUgY2hhbmdlIHJlYWR5ICovCisgICAgICAgIHdoaWxlKChTWVMtPlBMU1RTICYgU1lTX1BMU1RTX0NVUk1WUl9Nc2spICE9IFNZU19QTFNUU19DVVJNVlJfRENEQykKKyAgICAgICAgeworICAgICAgICAgICAgaWYoaTMyVGltZU91dENudC0tIDw9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyUmV0ID0gMFU7ICAgIC8qIE1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBjaGFuZ2UgdGltZS1vdXQgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfQorICAgIGVsc2UgaWYodTMyUG93ZXJSZWd1bGF0b3IgPT0gU1lTX1BMQ1RMX01WUlNfTERPKQorICAgIHsKKworICAgICAgICAvKiBTZXQgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIHRvIExETyBpZiBzdGF0dXMgaXMgRENEQyAqLworICAgICAgICBTWVMtPlBMQ1RMICY9ICh+U1lTX1BMQ1RMX01WUlNfTXNrKTsKKworICAgICAgICAvKiBXYWl0IG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBjaGFuZ2UgcmVhZHkgKi8KKyAgICAgICAgd2hpbGUoKFNZUy0+UExTVFMgJiBTWVNfUExTVFNfQ1VSTVZSX01zaykgIT0gU1lTX1BMU1RTX0NVUk1WUl9MRE8pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKGkzMlRpbWVPdXRDbnQtLSA8PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMlJldCA9IDBVOyAgICAvKiBNYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUgY2hhbmdlIHRpbWUtb3V0ICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKworICAgIC8qIENsZWFyIG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBjaGFuZ2UgZXJyb3IgZmxhZyAqLworICAgIGlmKFNZUy0+UExTVFMgJiBTWVNfUExTVFNfTVZSQ0VSUl9Nc2spCisgICAgeworICAgICAgICBTWVMtPlBMU1RTID0gU1lTX1BMU1RTX01WUkNFUlJfTXNrOworICAgICAgICB1MzJSZXQgPSAwVTsKKyAgICB9CisKKyAgICByZXR1cm4gdTMyUmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgU3lzdGVtIFNSQU0gUG93ZXIgTW9kZQorICAqIEBwYXJhbVtpbl0gIHUzMlNSQU1TZWwgaXMgU1JBTSByZWdpb24gc2VsZWN0aW9uLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBDVExfU1JBTTBQTTBfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUENUTF9TUkFNMFBNMV9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1NSQU1QQ1RMX1NSQU0wUE0yX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBDVExfU1JBTTBQTTNfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUENUTF9TUkFNMVBNMF9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1NSQU1QQ1RMX1NSQU0xUE0xX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBDVExfU1JBTTFQTTJfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUENUTF9TUkFNMVBNM19Nc2sKKyAgKiBAcGFyYW1baW5dICB1MzJQb3dlck1vZGUgaXMgU1JBTSBwb3dlciBtb2RlLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBDVExfU1JBTV9OT1JNQUwKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1NSQU1QQ1RMX1NSQU1fUkVURU5USU9OCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUENUTF9TUkFNX1BPV0VSX1NIVVRfRE9XTgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHNldCBzeXN0ZW0gU1JBTSBwb3dlciBtb2RlLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgU1lTX1NldFNTUkFNUG93ZXJNb2RlKHVpbnQzMl90IHUzMlNSQU1TZWwsIHVpbnQzMl90IHUzMlBvd2VyTW9kZSkKK3sKKyAgICB1aW50MzJfdCB1MzJTUkFNU2VsUG9zID0gOFVMOworCisgICAgLyogR2V0IHN5c3RlbSBTUkFNIHBvd2VyIG1vZGUgc2V0dGluZyBwb3NpdGlvbiAqLworICAgIHdoaWxlKHUzMlNSQU1TZWxQb3MgPCAyNFVMKQorICAgIHsKKyAgICAgICAgaWYodTMyU1JBTVNlbCAmICgxIDw8IHUzMlNSQU1TZWxQb3MpKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlNSQU1TZWxQb3MrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFNldCBzeXN0ZW0gU1JBTSBwb3dlciBtb2RlIHNldHRpbmcgKi8KKyAgICBTWVMtPlNSQU1QQ1RMID0gKFNZUy0+U1JBTVBDVEwgJiAofnUzMlNSQU1TZWwpKSB8ICh1MzJQb3dlck1vZGUgPDwgdTMyU1JBTVNlbFBvcyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBQZXJpcGhlcmFsIFNSQU0gUG93ZXIgTW9kZQorICAqIEBwYXJhbVtpbl0gIHUzMlNSQU1TZWwgaXMgU1JBTSByZWdpb24gc2VsZWN0aW9uLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBQQ1RfQ0FOX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBQQ1RfVVNCRF9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1NSQU1QUENUX1BETUEwX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBQQ1RfUERNQTFfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUFBDVF9GTUNfTXNrCisgICogQHBhcmFtW2luXSAgdTMyUG93ZXJNb2RlIGlzIFNSQU0gcG93ZXIgbW9kZS4gSW5jbHVkaW5nIDoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1NSQU1QUENUX1NSQU1fTk9STUFMCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUFBDVF9TUkFNX1JFVEVOVElPTgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBQQ1RfU1JBTV9QT1dFUl9TSFVUX0RPV04KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBzZXQgcGVyaXBoZXJhbCBTUkFNIHBvd2VyIG1vZGUuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBTWVNfU2V0UFNSQU1Qb3dlck1vZGUodWludDMyX3QgdTMyU1JBTVNlbCwgdWludDMyX3QgdTMyUG93ZXJNb2RlKQoreworICAgIHVpbnQzMl90IHUzMlNSQU1TZWxQb3MgPSAwVUw7CisKKyAgICAvKiBHZXQgcGVyaXBoZXJhbCBTUkFNIHBvd2VyIG1vZGUgc2V0dGluZyBwb3NpdGlvbiAqLworICAgIHdoaWxlKHUzMlNSQU1TZWxQb3MgPCAxMFVMKQorICAgIHsKKyAgICAgICAgaWYodTMyU1JBTVNlbCAmICgxIDw8IHUzMlNSQU1TZWxQb3MpKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlNSQU1TZWxQb3MrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFNldCBwZXJpcGhlcmFsIFNSQU0gcG93ZXIgbW9kZSBzZXR0aW5nICovCisgICAgU1lTLT5TUkFNUFBDVCA9IChTWVMtPlNSQU1QUENUICYgKH51MzJTUkFNU2VsKSkgfCAodTMyUG93ZXJNb2RlIDw8IHUzMlNSQU1TZWxQb3MpOworfQorCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU1lTX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNZU19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdGltZXIuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlZTYyYwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3RpbWVyLmMKQEAgLTAsMCArMSwzOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB0aW1lci5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBUaW1lciBDb250cm9sbGVyKFRpbWVyKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFRJTUVSX0RyaXZlciBUSU1FUiBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBUSU1FUl9FWFBPUlRFRF9GVU5DVElPTlMgVElNRVIgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBPcGVuIFRpbWVyIHdpdGggT3BlcmF0ZSBNb2RlIGFuZCBGcmVxdWVuY3kKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyTW9kZSAgICAgT3BlcmF0aW9uIG1vZGUuIFBvc3NpYmxlIG9wdGlvbnMgYXJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX09ORVNIT1RfTU9ERQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUSU1FUl9QRVJJT0RJQ19NT0RFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX1RPR0dMRV9NT0RFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX0NPTlRJTlVPVVNfTU9ERQorICAqIEBwYXJhbVtpbl0gIHUzMkZyZXEgICAgIFRhcmdldCB3b3JraW5nIGZyZXF1ZW5jeQorICAqCisgICogQHJldHVybiAgICAgUmVhbCB0aW1lciB3b3JraW5nIGZyZXF1ZW5jeQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBjb25maWd1cmUgdGltZXIgdG8gb3BlcmF0ZSBpbiBzcGVjaWZpZWQgbW9kZSBhbmQgZnJlcXVlbmN5LgorICAqICAgICAgICAgICAgIElmIHRpbWVyIGNhbm5vdCB3b3JrIGluIHRhcmdldCBmcmVxdWVuY3ksIGEgY2xvc2VzdCBmcmVxdWVuY3kgd2lsbCBiZSBjaG9zZSBhbmQgcmV0dXJuZWQuCisgICAgICAgIEFmdGVyIGNhbGxpbmcgdGhpcyBBUEksIFRpbWVyIGlzIFxiIE5PVCBydW5uaW5nIHlldC4gQnV0IGNvdWxkIHN0YXJ0IHRpbWVyIHJ1bm5pbmcgYmUgY2FsbGluZworICAqICAgICAgICAgICAgIFxyZWYgVElNRVJfU3RhcnQgbWFjcm8gb3IgcHJvZ3JhbSByZWdpc3RlcnMgZGlyZWN0bHkuCisgICovCit1aW50MzJfdCBUSU1FUl9PcGVuKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJNb2RlLCB1aW50MzJfdCB1MzJGcmVxKQoreworICAgIHVpbnQzMl90IHUzMkNsayA9IFRJTUVSX0dldE1vZHVsZUNsb2NrKHRpbWVyKTsKKyAgICB1aW50MzJfdCB1MzJDbXByID0gMFVMLCB1MzJQcmVzY2FsZSA9IDBVTDsKKworICAgIC8qIEZhc3Rlc3QgcG9zc2libGUgdGltZXIgd29ya2luZyBmcmVxIGlzICh1MzJDbGsgLyAyKS4gV2hpbGUgY21wciA9IDIsIHByZXNjYWxlciA9IDAuICovCisgICAgaWYodTMyRnJlcSA+ICh1MzJDbGsgLyAyVUwpKQorICAgIHsKKyAgICAgICAgdTMyQ21wciA9IDJVTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyQ21wciA9IHUzMkNsayAvIHUzMkZyZXE7CisgICAgICAgIHUzMlByZXNjYWxlID0gKHUzMkNtcHIgPj4gMjQpOyAgLyogZm9yIDI0IGJpdHMgQ01QREFUICovCisgICAgICAgIGlmICh1MzJQcmVzY2FsZSA+IDBVTCkKKyAgICAgICAgICAgIHUzMkNtcHIgPSB1MzJDbXByIC8gKHUzMlByZXNjYWxlICsgMVVMKTsKKyAgICB9CisKKyAgICB0aW1lci0+Q1RMID0gdTMyTW9kZSB8IHUzMlByZXNjYWxlOworICAgIHRpbWVyLT5DTVAgPSB1MzJDbXByOworCisgICAgcmV0dXJuKHUzMkNsayAvICh1MzJDbXByICogKHUzMlByZXNjYWxlICsgMVVMKSkpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTdG9wIFRpbWVyIENvdW50aW5nCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBzdG9wcyB0aW1lciBjb3VudGluZyBhbmQgZGlzYWJsZSBhbGwgdGltZXIgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqLwordm9pZCBUSU1FUl9DbG9zZShUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+Q1RMID0gMFVMOworICAgIHRpbWVyLT5FWFRDVEwgPSAwVUw7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIENyZWF0ZSBhIHNwZWNpZnkgRGVsYXkgVGltZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB1MzJVc2VjICAgICBEZWxheSBwZXJpb2QgaW4gbWljcm8gc2Vjb25kcy4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDEwMH4xMDAwMDAwICgxMDAgbWljcm8gc2Vjb25kIH4gMSBzZWNvbmQpLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBjcmVhdGUgYSBkZWxheSBsb29wIGZvciB1MzJ1c2VjIG1pY3JvIHNlY29uZHMgYnkgdXNpbmcgdGltZXIgb25lLXNob3QgbW9kZS4KKyAgICAgICAgVGhpcyBBUEkgb3ZlcndyaXRlcyB0aGUgcmVnaXN0ZXIgc2V0dGluZyBvZiB0aGUgdGltZXIgdXNlZCB0byBjb3VudCB0aGUgZGVsYXkgdGltZS4KKyAgICAgICAgVGhpcyBBUEkgdXNlIHBvbGxpbmcgbW9kZS4gU28gdGhlcmUgaXMgbm8gbmVlZCB0byBlbmFibGUgaW50ZXJydXB0IGZvciB0aGUgdGltZXIgbW9kdWxlIHVzZWQgdG8gZ2VuZXJhdGUgZGVsYXkuCisgICovCit2b2lkIFRJTUVSX0RlbGF5KFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJVc2VjKQoreworICAgIHVpbnQzMl90IHUzMkNsayA9IFRJTUVSX0dldE1vZHVsZUNsb2NrKHRpbWVyKTsKKyAgICB1aW50MzJfdCB1MzJQcmVzY2FsZSA9IDBVTCwgdTMyRGVsYXkgPSAoU3lzdGVtQ29yZUNsb2NrIC8gdTMyQ2xrKSArIDFVTDsKKyAgICB1aW50MzJfdCB1MzJDbXByLCB1MzJOc2VjUGVyVGljazsKKworICAgIC8qIENsZWFyIGN1cnJlbnQgdGltZXIgY29uZmlndXJhdGlvbiAqLworICAgIHRpbWVyLT5DVEwgPSAwVUw7CisgICAgdGltZXItPkVYVENUTCA9IDBVTDsKKworICAgIGlmKHUzMkNsayA8PSAxMDAwMDAwVUwpICAgLyogbWluIGRlbGF5IGlzIDEwMDAgdXMgaWYgdGltZXIgY2xvY2sgc291cmNlIGlzIDw9IDEgTUh6ICovCisgICAgeworICAgICAgICBpZih1MzJVc2VjIDwgMTAwMFVMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJVc2VjID0gMTAwMFVMOworICAgICAgICB9CisgICAgICAgIGlmKHUzMlVzZWMgPiAxMDAwMDAwVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlVzZWMgPSAxMDAwMDAwVUw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYodTMyVXNlYyA8IDEwMFVMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJVc2VjID0gMTAwVUw7CisgICAgICAgIH0KKyAgICAgICAgaWYodTMyVXNlYyA+IDEwMDAwMDBVTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyVXNlYyA9IDEwMDAwMDBVTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKHUzMkNsayA8PSAxMDAwMDAwVUwpCisgICAgeworICAgICAgICB1MzJQcmVzY2FsZSA9IDBVTDsKKyAgICAgICAgdTMyTnNlY1BlclRpY2sgPSAxMDAwMDAwMDAwVUwgLyB1MzJDbGs7CisgICAgICAgIHUzMkNtcHIgPSAodTMyVXNlYyAqIDEwMDBVTCkgLyB1MzJOc2VjUGVyVGljazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyQ21wciA9IHUzMlVzZWMgKiAodTMyQ2xrIC8gMTAwMDAwMFVMKTsKKyAgICAgICAgdTMyUHJlc2NhbGUgPSAodTMyQ21wciA+PiAyNCk7ICAvKiBmb3IgMjQgYml0cyBDTVBEQVQgKi8KKyAgICAgICAgaWYgKHUzMlByZXNjYWxlID4gMFVMKQorICAgICAgICAgICAgdTMyQ21wciA9IHUzMkNtcHIgLyAodTMyUHJlc2NhbGUgKyAxVUwpOworICAgIH0KKworICAgIHRpbWVyLT5DTVAgPSB1MzJDbXByOworICAgIHRpbWVyLT5DVEwgPSBUSU1FUl9DVExfQ05URU5fTXNrIHwgVElNRVJfT05FU0hPVF9NT0RFIHwgdTMyUHJlc2NhbGU7CisKKyAgICAvKgorICAgICAgICBXaGVuIHN5c3RlbSBjbG9jayBpcyBmYXN0ZXIgdGhhbiB0aW1lciBjbG9jaywgaXQgaXMgcG9zc2libGUgdGltZXIgYWN0aXZlIGJpdCBjYW5ub3Qgc2V0IGluIHRpbWUgd2hpbGUgd2UgY2hlY2sgaXQuCisgICAgICAgIEFuZCB0aGUgd2hpbGUgbG9vcCBiZWxvdyByZXR1cm4gaW1tZWRpYXRlbHksIHNvIHB1dCBhIHRpbnkgZGVsYXkgaGVyZSBhbGxvd2luZyB0aW1lciBzdGFydCBjb3VudGluZyBhbmQgcmFpc2UgYWN0aXZlIGZsYWcuCisgICAgKi8KKyAgICBmb3IoOyB1MzJEZWxheSA+IDBVTDsgdTMyRGVsYXktLSkKKyAgICB7CisgICAgICAgIF9fTk9QKCk7CisgICAgfQorCisgICAgd2hpbGUodGltZXItPkNUTCAmIFRJTUVSX0NUTF9BQ1RTVFNfTXNrKSB7fQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgVGltZXIgQ2FwdHVyZSBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB1MzJDYXBNb2RlICBUaW1lciBjYXB0dXJlIG1vZGUuIENvdWxkIGJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX0NBUFRVUkVfRlJFRV9DT1VOVElOR19NT0RFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX0NBUFRVUkVfQ09VTlRFUl9SRVNFVF9NT0RFCisgICogQHBhcmFtW2luXSAgdTMyRWRnZSAgICAgVGltZXIgY2FwdHVyZSB0cmlnZ2VyIGVkZ2UuIFBvc3NpYmxlIHZhbHVlcyBhcmUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfQ0FQVFVSRV9FVkVOVF9GQUxMSU5HCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX0NBUFRVUkVfRVZFTlRfUklTSU5HCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX0NBUFRVUkVfRVZFTlRfRkFMTElOR19SSVNJTkcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfQ0FQVFVSRV9FVkVOVF9SSVNJTkdfRkFMTElORworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUSU1FUl9DQVBUVVJFX0VWRU5UX0dFVF9MT1dfUEVSSU9ECisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX0NBUFRVUkVfRVZFTlRfR0VUX0hJR0hfUEVSSU9ECisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGVuYWJsZSB0aW1lciBjYXB0dXJlIGZ1bmN0aW9uIHdpdGggc3BlY2lmeSBjYXB0dXJlIHRyaWdnZXIgZWRnZSBcbgorICAqICAgICAgICAgICAgIHRvIGdldCBjdXJyZW50IGNvdW50ZXIgdmFsdWUgb3IgcmVzZXQgY291bnRlciB2YWx1ZSB0byAwLgorICAgICAgICBUaW1lciBmcmVxdWVuY3kgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgc2VwYXJhdGVseSBieSB1c2luZyBccmVmIFRJTUVSX09wZW4gQVBJLCBvciBwcm9ncmFtIHJlZ2lzdGVycyBkaXJlY3RseS4KKyAgKi8KK3ZvaWQgVElNRVJfRW5hYmxlQ2FwdHVyZShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyQ2FwTW9kZSwgdWludDMyX3QgdTMyRWRnZSkKK3sKKyAgICB0aW1lci0+RVhUQ1RMID0gKHRpbWVyLT5FWFRDVEwgJiB+KFRJTUVSX0VYVENUTF9DQVBGVU5DU19Nc2sgfCBUSU1FUl9FWFRDVExfQ0FQRURHRV9Nc2spKSB8CisgICAgICAgICAgICAgICAgICAgIHUzMkNhcE1vZGUgfCB1MzJFZGdlIHwgVElNRVJfRVhUQ1RMX0NBUEVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBUaW1lciBDYXB0dXJlIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIHRpbWVyIGNhcHR1cmUgZnVuY3Rpb24uCisgICovCit2b2lkIFRJTUVSX0Rpc2FibGVDYXB0dXJlKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5FWFRDVEwgJj0gflRJTUVSX0VYVENUTF9DQVBFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBUaW1lciBDb3VudGVyIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkVkZ2UgICAgIERldGVjdGlvbiBlZGdlIG9mIGNvdW50ZXIgcGluLiBDb3VsZCBiZSBldGhlcgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUSU1FUl9DT1VOVEVSX0VWRU5UX0ZBTExJTkcsIG9yCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX0NPVU5URVJfRVZFTlRfUklTSU5HCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSB0aW1lciBjb3VudGVyIGZ1bmN0aW9uIHdpdGggc3BlY2lmeSBkZXRlY3Rpb24gZWRnZS4KKyAgICAgICAgVGltZXIgY29tcGFyZSB2YWx1ZSBzaG91bGQgYmUgY29uZmlndXJlZCBzZXBhcmF0ZWx5IGJ5IHVzaW5nIFxyZWYgVElNRVJfU0VUX0NNUF9WQUxVRSBtYWNybyBvciBwcm9ncmFtIHJlZ2lzdGVycyBkaXJlY3RseS4KKyAgICAgICAgV2hpbGUgdXNpbmcgZXZlbnQgY291bnRlciBmdW5jdGlvbiwgXHJlZiBUSU1FUl9UT0dHTEVfTU9ERSBjYW5ub3Qgc2V0IGFzIHRpbWVyIG9wZXJhdGlvbiBtb2RlLgorICAqLwordm9pZCBUSU1FUl9FbmFibGVFdmVudENvdW50ZXIoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkVkZ2UpCit7CisgICAgdGltZXItPkVYVENUTCA9ICh0aW1lci0+RVhUQ1RMICYgflRJTUVSX0VYVENUTF9DTlRQSEFTRV9Nc2spIHwgdTMyRWRnZTsKKyAgICB0aW1lci0+Q1RMIHw9IFRJTUVSX0NUTF9FWFRDTlRFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgVGltZXIgQ291bnRlciBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBkaXNhYmxlIHRoZSB0aW1lciBldmVudCBjb3VudGVyIGZ1bmN0aW9uLgorICAqLwordm9pZCBUSU1FUl9EaXNhYmxlRXZlbnRDb3VudGVyKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5DVEwgJj0gflRJTUVSX0NUTF9FWFRDTlRFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBUaW1lciBDbG9jayBGcmVxdWVuY3kKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIFRpbWVyIGNsb2NrIGZyZXF1ZW5jeQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBnZXQgdGhlIHRpbWVyIGNsb2NrIGZyZXF1ZW5jeS4KKyAgICAgICAgVGhpcyBBUEkgY2Fubm90IHJldHVybiBjb3JyZWN0IGNsb2NrIHJhdGUgaWYgdGltZXIgc291cmNlIGlzIGZyb20gZXh0ZXJuYWwgY2xvY2sgaW5wdXQuCisgICovCit1aW50MzJfdCBUSU1FUl9HZXRNb2R1bGVDbG9jayhUSU1FUl9UICp0aW1lcikKK3sKKyNpZiAxCisgICAgcmV0dXJuIF9fSElSQzsKKyNlbHNlCisgICAgdWludDMyX3QgdTMyU3JjLCB1MzJDbGsgPSBfX0hJUkM7CisgICAgY29uc3QgdWludDMyX3QgYXUzMkNsa1tdID0ge19fSFhULCBfX0xYVCwgMFVMLCAwVUwsIDBVTCwgX19MSVJDLCAwVUwsIF9fSElSQ307CisKKyAgICBpZih0aW1lciA9PSBUSU1FUjApCisgICAgeworICAgICAgICB1MzJTcmMgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVE1SMF9NT0RVTEUpOworICAgIH0KKyAgICBlbHNlIGlmKHRpbWVyID09IFRJTUVSMSkKKyAgICB7CisgICAgICAgIHUzMlNyYyA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShUTVIxX01PRFVMRSk7CisgICAgfQorICAgIGVsc2UgaWYoKHRpbWVyID09IFRJTUVSMikgfHwgKHRpbWVyID09IFRJTUVSMl9OUykpCisgICAgeworICAgICAgICB1MzJTcmMgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVE1SMl9NT0RVTEUpOworICAgIH0KKyAgICBlbHNlIGlmKCh0aW1lciA9PSBUSU1FUjMpIHx8ICh0aW1lciA9PSBUSU1FUjNfTlMpKQorICAgIHsKKyAgICAgICAgdTMyU3JjID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFRNUjNfTU9EVUxFKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDBVTDsKKyAgICB9CisKKyAgICBpZih1MzJTcmMgPT0gMlVMKQorICAgIHsKKyAgICAgICAgaWYoKHRpbWVyID09IFRJTUVSMCkgfHwgKHRpbWVyID09IFRJTUVSMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsayA9IENMS19HZXRQQ0xLMEZyZXEoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsayA9IENMS19HZXRQQ0xLMUZyZXEoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJDbGsgPSBhdTMyQ2xrW3UzMlNyY107CisgICAgfQorCisgICAgcmV0dXJuIHUzMkNsazsKKyNlbmRpZgorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgVGltZXIgRnJlcXVlbmN5IENvdW50ZXIgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkRyb3BDb3VudCAgICBUaGlzIHBhcmFtZXRlciBoYXMgbm8gZWZmZWN0IGluIHRoaXMgQlNQCisgICogQHBhcmFtW2luXSAgdTMyVGltZW91dCAgICAgIFRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QgaW4gdGhpcyBCU1AKKyAgKiBAcGFyYW1baW5dICB1MzJFbmFibGVJbnQgICAgRW5hYmxlIGludGVycnVwdCBhc3NlcnRpb24gYWZ0ZXIgY2FwdHVyZSBjb21wbGV0ZSBvciBub3QuIFZhbGlkIHZhbHVlcyBhcmUgVFJVRSBhbmQgRkFMU0UKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjYWxjdWxhdGUgaW5wdXQgZXZlbnQgZnJlcXVlbmN5LiBBZnRlciBlbmFibGUKKyAgKiAgICAgICAgICAgICB0aGlzIGZ1bmN0aW9uLCBhIHBhaXIgb2YgdGltZXJzLCBUSU1FUjAgYW5kIFRJTUVSMSwgb3IgVElNRVIyIGFuZCBUSU1FUjMKKyAgKiAgICAgICAgICAgICB3aWxsIGJlIGNvbmZpZ3VyZWQgZm9yIHRoaXMgZnVuY3Rpb24uIFRoZSBtb2RlIHVzZWQgdG8gY2FsY3VsYXRlIGlucHV0CisgICogICAgICAgICAgICAgZXZlbnQgZnJlcXVlbmN5IGlzIG1lbnRpb25lZCBhcyAiSW50ZXIgVGltZXIgVHJpZ2dlciBNb2RlIiBpbiBUZWNobmljYWwKKyAgKiAgICAgICAgICAgICBSZWZlcmVuY2UgTWFudWFsLgorICAqLwordm9pZCBUSU1FUl9FbmFibGVGcmVxQ291bnRlcihUSU1FUl9UICp0aW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyRHJvcENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJUaW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJFbmFibGVJbnQpCit7CisgICAgVElNRVJfVCAqdDsgICAgLyogc3RvcmUgdGhlIHRpbWVyIGJhc2UgdG8gY29uZmlndXJlIGNvbXBhcmUgdmFsdWUgKi8KKworICAgICh2b2lkKXUzMkRyb3BDb3VudDsKKyAgICAodm9pZCl1MzJUaW1lb3V0OworCisgICAgaWYodGltZXIgPT0gVElNRVIwKQorICAgIHsKKyAgICAgICAgdCA9IFRJTUVSMTsKKyAgICB9CisgICAgZWxzZSBpZih0aW1lciA9PSBUSU1FUjIpCisgICAgeworICAgICAgICB0ID0gVElNRVIzOworICAgIH0KKyAgICBlbHNlIGlmKHRpbWVyID09IFRJTUVSMl9OUykKKyAgICB7CisgICAgICAgIHQgPSBUSU1FUjNfTlM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHQgPSAwVUw7CisgICAgfQorCisgICAgaWYodCAhPSAwKQorICAgIHsKKyAgICAgICAgdC0+Q01QID0gMHhGRkZGRkZVTDsKKyAgICAgICAgdC0+RVhUQ1RMID0gdTMyRW5hYmxlSW50ID8gVElNRVJfRVhUQ1RMX0NBUElFTl9Nc2sgOiAwVUw7CisgICAgICAgIHRpbWVyLT5DVEwgPSBUSU1FUl9DVExfSU5UUkdFTl9Nc2sgfCBUSU1FUl9DVExfQ05URU5fTXNrOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBUaW1lciBGcmVxdWVuY3kgQ291bnRlciBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGJyaWVmICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIFRpbWVyIGZyZXF1ZW5jeSBjb3VudGVyIGZ1bmN0aW9uLgorICAqLwordm9pZCBUSU1FUl9EaXNhYmxlRnJlcUNvdW50ZXIoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkNUTCAmPSB+VElNRVJfQ1RMX0lOVFJHRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZWxlY3QgSW50ZXJydXB0IFNvdXJjZSB0byBUcmlnZ2VyIG90aGVycyBNb2R1bGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB1MzJTcmMgIFNlbGVjdHMgdGhlIGludGVycnVwdCBzb3VyY2UgdG8gdHJpZ2dlciBvdGhlciBtb2R1bGVzLiBDb3VsZCBiZToKKyAgKiAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUSU1FUl9UUkdTUkNfVElNRU9VVF9FVkVOVAorICAqICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX1RSR1NSQ19DQVBUVVJFX0VWRU5UCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBpbnRlcnJ1cHQgc291cmNlIHVzZWQgdG8gdHJpZ2dlciBvdGhlciBtb2R1bGVzLgorICAqLwordm9pZCBUSU1FUl9TZXRUcmlnZ2VyU291cmNlKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJTcmMpCit7CisgICAgdGltZXItPlRSR0NUTCA9ICh0aW1lci0+VFJHQ1RMICYgflRJTUVSX1RSR0NUTF9UUkdTU0VMX01zaykgfCB1MzJTcmM7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBNb2R1bGVzIFRyaWdnZXIgYnkgVGltZXIgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBUaGUgbWFzayBvZiBtb2R1bGVzIChFUFdNLCBFQURDLCBEQUMgYW5kIFBETUEpIHRyaWdnZXIgYnkgdGltZXIuIElzIHRoZSBjb21iaW5hdGlvbiBvZgorICAqICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX1RSR19UT19FUFdNLAorICAqICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX1RSR19UT19FQURDLAorICAqICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX1RSR19UT19EQUMgYW5kCisgICogICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfVFJHX1RPX1BETUEKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgRVBXTSwgRUFEQywgREFDIGFuZCBQRE1BIG1vZHVsZSB0cmlnZ2VyZWQgYnkgdGltZXIgaW50ZXJydXB0IGV2ZW50LgorICAqLwordm9pZCBUSU1FUl9TZXRUcmlnZ2VyVGFyZ2V0KFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIHRpbWVyLT5UUkdDVEwgPSAodGltZXItPlRSR0NUTCAmIH4oVElNRVJfVFJHQ1RMX1RSR0VQV01fTXNrIHwgVElNRVJfVFJHQ1RMX1RSR0RBQ19Nc2sgfCBUSU1FUl9UUkdDVExfVFJHRUFEQ19Nc2sgfCBUSU1FUl9UUkdDVExfVFJHUERNQV9Nc2spKSB8IHUzMk1hc2s7Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVElNRVJfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVElNRVJfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3RpbWVyX3B3bS5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdGltZXJfcHdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE3Y2FiYwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3RpbWVyX3B3bS5jCkBAIC0wLDAgKzEsNDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdGltZXIuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgVGltZXIgUFdNIENvbnRyb2xsZXIoVGltZXIgUFdNKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFRJTUVSX1BXTV9Ecml2ZXIgVElNRVIgUFdNIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFRJTUVSX1BXTV9FWFBPUlRFRF9GVU5DVElPTlMgVElNRVIgUFdNIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFBXTSBDb3VudGVyIENsb2NrIFNvdXJjZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyQ250Q2xrU3JjICAgIFBXTSBjb3VudGVyIGNsb2NrIHNvdXJjZSwgY291bGQgYmUgb25lIG9mIGZvbGxvd2luZyBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NOVFJfQ0xLU1JDX1RNUl9DTEsKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NOVFJfQ0xLU1JDX1RJTUVSMF9JTlQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NOVFJfQ0xLU1JDX1RJTUVSMV9JTlQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NOVFJfQ0xLU1JDX1RJTUVSMl9JTlQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NOVFJfQ0xLU1JDX1RJTUVSM19JTlQKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgUFdNIGNvdW50ZXIgY2xvY2sgc291cmNlLgorICAqLwordm9pZCBUUFdNX1NldENvdW50ZXJDbG9ja1NvdXJjZShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyQ250Q2xrU3JjKQoreworICAgICh0aW1lciktPlBXTUNMS1NSQyA9ICgodGltZXIpLT5QV01DTEtTUkMgJiB+VElNRVJfUFdNQ0xLU1JDX0NMS1NSQ19Nc2spIHwgdTMyQ250Q2xrU3JjOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDb25maWd1cmUgUFdNIE91dHB1dCBGcmVxdWVuY3kgYW5kIER1dHkgQ3ljbGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkZyZXF1ZW5jeSAgICBUYXJnZXQgZ2VuZXJhdG9yIGZyZXF1ZW5jeS4KKyAgKiBAcGFyYW1baW5dICB1MzJEdXR5Q3ljbGUgICAgVGFyZ2V0IGdlbmVyYXRvciBkdXR5IGN5Y2xlIHBlcmNlbnRhZ2UuIFZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDB+MTAwLiAxMCBtZWFucyAxMCUsIDIwIG1lYW5zIDIwJS4uLgorICAqCisgICogQHJldHVybiAgICAgTmVhcmVzdCBmcmVxdWVuY3kgY2xvY2sgaW4gbmFubyBzZWNvbmQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gY29uZmlndXJlIFBXTSBvdXRwdXQgZnJlcXVlbmN5IGFuZCBkdXR5IGN5Y2xlIGluIHVwIGNvdW50IHR5cGUgYW5kIGF1dG8tcmVsb2FkIG9wZXJhdGlvbiBtb2RlLgorICAgICAgICBUaGlzIEFQSSBpcyBvbmx5IGF2YWlsYWJsZSBpZiBUaW1lciBQV00gY291bnRlciBjbG9jayBzb3VyY2UgaXMgZnJvbSBUTVJ4X0NMSy4KKyAgKi8KK3VpbnQzMl90IFRQV01fQ29uZmlnT3V0cHV0RnJlcUFuZER1dHkoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkZyZXF1ZW5jeSwgdWludDMyX3QgdTMyRHV0eUN5Y2xlKQoreworICAgIHVpbnQzMl90IHUzMlBXTUNsb2NrRnJlcSwgdTMyVGFyZ2V0RnJlcTsKKyAgICB1aW50MzJfdCB1MzJQcmVzY2FsZXIgPSAweDEwMDBVTCwgdTMyUGVyaW9kID0gMVVMLCB1MzJDTVA7CisKKyAgICBpZigodGltZXIgPT0gVElNRVIwKSB8fCAodGltZXIgPT0gVElNRVIxKSkKKyAgICB7CisgICAgICAgIHUzMlBXTUNsb2NrRnJlcSA9IENMS19HZXRQQ0xLMEZyZXEoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyUFdNQ2xvY2tGcmVxID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgIH0KKworICAgIC8qIENhbGN1bGF0ZSB1MTZQRVJJT0QgYW5kIHUxNlBTQyAqLworICAgIGZvcih1MzJQcmVzY2FsZXIgPSAxVUw7IHUzMlByZXNjYWxlciA8PSAweDEwMDBVTDsgdTMyUHJlc2NhbGVyKyspCisgICAgeworICAgICAgICB1MzJQZXJpb2QgPSAodTMyUFdNQ2xvY2tGcmVxIC8gdTMyUHJlc2NhbGVyKSAvIHUzMkZyZXF1ZW5jeTsKKworICAgICAgICAvKiBJZiB0YXJnZXQgdTMyUGVyaW9kIGlzIGxhcmdlciB0aGFuIDB4MTAwMDAsIG5lZWQgdG8gdXNlIGEgbGFyZ2VyIHByZXNjYWxlciAqLworICAgICAgICBpZih1MzJQZXJpb2QgPD0gMHgxMDAwMFVMKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBTdG9yZSByZXR1cm4gdmFsdWUgaGVyZSAnY29zIHdlJ3JlIGdvbm5hIGNoYW5nZSB1MzJQcmVzY2FsZXIgJiB1MzJQZXJpb2QgdG8gdGhlIHJlYWwgdmFsdWUgdG8gZmlsbCBpbnRvIHJlZ2lzdGVyICovCisgICAgdTMyVGFyZ2V0RnJlcSA9ICh1MzJQV01DbG9ja0ZyZXEgLyB1MzJQcmVzY2FsZXIpIC8gdTMyUGVyaW9kOworCisgICAgLyogU2V0IFBXTSB0byB1cCBjb3VudCB0eXBlICovCisgICAgdGltZXItPlBXTUNUTCA9ICh0aW1lci0+UFdNQ1RMICYgflRJTUVSX1BXTUNUTF9DTlRUWVBFX01zaykgfCAoVFBXTV9VUF9DT1VOVCA8PCBUSU1FUl9QV01DVExfQ05UVFlQRV9Qb3MpOworCisgICAgLyogU2V0IFBXTSB0byBhdXRvLXJlbG9hZCBtb2RlICovCisgICAgdGltZXItPlBXTUNUTCA9ICh0aW1lci0+UFdNQ1RMICYgflRJTUVSX1BXTUNUTF9DTlRNT0RFX01zaykgfCAoVFBXTV9BVVRPX1JFTE9BRF9NT0RFIDw8IFRJTUVSX1BXTUNUTF9DTlRNT0RFX1Bvcyk7CisKKyAgICAvKiBDb252ZXJ0IHRvIHJlYWwgcmVnaXN0ZXIgdmFsdWUgKi8KKyAgICBUUFdNX1NFVF9QRVJJT0QodGltZXIsICh1MzJQZXJpb2QgLSAxVUwpKTsKKyAgICBpZih1MzJEdXR5Q3ljbGUpCisgICAgeworICAgICAgICB1MzJDTVAgPSAodTMyRHV0eUN5Y2xlICogdTMyUGVyaW9kKSAvIDEwMFVMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJDTVAgPSAwVUw7CisgICAgfQorCisgICAgVFBXTV9TRVRfQ01QREFUKHRpbWVyLCB1MzJDTVApOworCisgICAgVFBXTV9TRVRfUFJFU0NBTEVSKHRpbWVyLCAodTMyUHJlc2NhbGVyIC0gMVVMKSk7CisKKyAgICByZXR1cm4gKHUzMlRhcmdldEZyZXEpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgRGVhZC1UaW1lIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkRUQ291bnQgIERlYWQtVGltZSBkdXJhdGlvbiBpbiBQV00gY2xvY2sgY291bnQsIHZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAweDB+MHhGRkYsIGJ1dCAweDAgbWVhbnMgdGhlcmUgaXMgbm8gRGVhZC1UaW1lIGluc2VydGlvbi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgRGVhZC1UaW1lIGZ1bmN0aW9uIGFuZCBjb3VudGVyIHNvdXJjZSBpcyB0aGUgc2FtZSBhcyBUaW1lciBQV00gY2xvY2sgc291cmNlLgorICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIFRQV01fRW5hYmxlRGVhZFRpbWUoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkRUQ291bnQpCit7CisgICAgdGltZXItPlBXTURUQ1RMID0gVElNRVJfUFdNRFRDVExfRFRFTl9Nc2sgfCB1MzJEVENvdW50OworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgRGVhZC1UaW1lIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkRUQ291bnQgIERlYWQtVGltZSBkdXJhdGlvbiBpbiBQV00gY2xvY2sgY291bnQsIHZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAweDB+MHhGRkYsIGJ1dCAweDAgbWVhbnMgdGhlcmUgaXMgbm8gRGVhZC1UaW1lIGluc2VydGlvbi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgRGVhZC1UaW1lIGZ1bmN0aW9uIGFuZCBjb3VudGVyIHNvdXJjZSBpcyB0aGUgVGltZXIgUFdNIGNsb2NrIHNvdXJjZSB3aXRoIHByZXNjYWxlLgorICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIFRQV01fRW5hYmxlRGVhZFRpbWVXaXRoUHJlc2NhbGUoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkRUQ291bnQpCit7CisgICAgdGltZXItPlBXTURUQ1RMID0gVElNRVJfUFdNRFRDVExfRFRDS1NFTF9Nc2sgfCBUSU1FUl9QV01EVENUTF9EVEVOX01zayB8IHUzMkRUQ291bnQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgRGVhZC1UaW1lIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgRGVhZC10aW1lIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgVFBXTV9EaXNhYmxlRGVhZFRpbWUoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPlBXTURUQ1RMID0gMHgwVUw7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBQV00gQ291bnRlcgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgUFdNIGdlbmVyYXRvciBhbmQgc3RhcnQgY291bnRlciBjb3VudGluZy4KKyAgKi8KK3ZvaWQgVFBXTV9FbmFibGVDb3VudGVyKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5QV01DVEwgfD0gVElNRVJfUFdNQ1RMX0NOVEVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBQV00gR2VuZXJhdG9yCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgUFdNIGNvdW50ZXIgaW1tZWRpYXRlbHkgYnkgY2xlYXIgQ05URU4gKFRJTUVSeF9QV01DVExbMF0pIGJpdC4KKyAgKi8KK3ZvaWQgVFBXTV9EaXNhYmxlQ291bnRlcihUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+UFdNQ1RMICY9IH5USU1FUl9QV01DVExfQ05URU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgVHJpZ2dlciBBREMKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkNvbmRpdGlvbiAgICBUaGUgY29uZGl0aW9uIHRvIHRyaWdnZXIgQURDLiBJdCBjb3VsZCBiZSBvbmUgb2YgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9UUklHR0VSX0FEQ19BVF9aRVJPX1BPSU5UCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9UUklHR0VSX0FEQ19BVF9QRVJJT0RfUE9JTlQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RSSUdHRVJfQURDX0FUX1pFUk9fT1JfUEVSSU9EX1BPSU5UCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9UUklHR0VSX0FEQ19BVF9DT01QQVJFX1VQX0NPVU5UX1BPSU5UCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9UUklHR0VSX0FEQ19BVF9DT01QQVJFX0RPV05fQ09VTlRfUE9JTlQKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgc3BlY2lmaWVkIGNvdW50ZXIgY29tcGFyZSBldmVudCB0byB0cmlnZ2VyIEFEQy4KKyAgKi8KK3ZvaWQgVFBXTV9FbmFibGVUcmlnZ2VyQURDKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJDb25kaXRpb24pCit7CisgICAgdGltZXItPlBXTUVBRENUUyA9IFRJTUVSX1BXTUVBRENUU19UUkdFTl9Nc2sgfCB1MzJDb25kaXRpb247Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgVHJpZ2dlciBBREMKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBjb3VudGVyIGNvbXBhcmUgZXZlbnQgdG8gdHJpZ2dlciBBREMuCisgICovCit2b2lkIFRQV01fRGlzYWJsZVRyaWdnZXJBREMoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPlBXTUVBRENUUyA9IDB4MFVMOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgRmF1bHQgQnJha2UgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkNIMExldmVsICAgICBQV014X0NIMCBvdXRwdXQgbGV2ZWwgd2hpbGUgZmF1bHQgYnJha2UgZXZlbnQgb2NjdXJzLiBWYWxpZCB2YWx1ZSBpcyBvbmUgb2YgZm9sbG93aW5nIHNldHRpbmcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX09VVFBVVF9UT0dHTEUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX09VVFBVVF9OT1RISU5HCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9PVVRQVVRfTE9XCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9PVVRQVVRfSElHSAorICAqIEBwYXJhbVtpbl0gIHUzMkNIMUxldmVsICAgICBQV014X0NIMSBvdXRwdXQgbGV2ZWwgd2hpbGUgZmF1bHQgYnJha2UgZXZlbnQgb2NjdXJzLiBWYWxpZCB2YWx1ZSBpcyBvbmUgb2YgZm9sbG93aW5nIHNldHRpbmcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX09VVFBVVF9UT0dHTEUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX09VVFBVVF9OT1RISU5HCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9PVVRQVVRfTE9XCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9PVVRQVVRfSElHSAorICAqIEBwYXJhbVtpbl0gIHUzMkJyYWtlU291cmNlICBGYXVsdCBicmFrZSBzb3VyY2UsIGNvbWJpbmF0aW9uIG9mIGZvbGxvd2luZyBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX1NPVVJDRV9FREdFX0FDTVAwCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9TT1VSQ0VfRURHRV9BQ01QMQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfU09VUkNFX0VER0VfQktQSU4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX1NPVVJDRV9FREdFX1NZU19DU1MKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX1NPVVJDRV9FREdFX1NZU19CT0QKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX1NPVVJDRV9FREdFX1NZU19DT1IKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX1NPVVJDRV9FREdFX1NZU19SQU0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX1NPVVJDRV9MRVZFTF9BQ01QMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfU09VUkNFX0xFVkVMX0FDTVAxCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9TT1VSQ0VfTEVWRUxfQktQSU4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX1NPVVJDRV9MRVZFTF9TWVNfQ1NTCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9TT1VSQ0VfTEVWRUxfU1lTX0JPRAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfU09VUkNFX0xFVkVMX1NZU19DT1IKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX1NPVVJDRV9MRVZFTF9TWVNfUkFNCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIGZhdWx0IGJyYWtlIGZ1bmN0aW9uLgorICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIFRQV01fRW5hYmxlRmF1bHRCcmFrZShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyQ0gwTGV2ZWwsIHVpbnQzMl90IHUzMkNIMUxldmVsLCB1aW50MzJfdCB1MzJCcmFrZVNvdXJjZSkKK3sKKyAgICB0aW1lci0+UFdNRkFJTEJSSyB8PSAoKHUzMkJyYWtlU291cmNlID4+IDE2KSAmIDB4RlVMKTsKKyAgICB0aW1lci0+UFdNQlJLQ1RMID0gKHRpbWVyLT5QV01CUktDVEwgJiB+KFRJTUVSX1BXTUJSS0NUTF9CUktBRVZFTl9Nc2sgfCBUSU1FUl9QV01CUktDVExfQlJLQU9ERF9Nc2spKSB8CisgICAgICAgICAgICAgICAgICAgICAgICh1MzJCcmFrZVNvdXJjZSAmIDB4RkZGRlVMKSB8ICh1MzJDSDBMZXZlbCA8PCBUSU1FUl9QV01CUktDVExfQlJLQUVWRU5fUG9zKSB8ICh1MzJDSDFMZXZlbCA8PCBUSU1FUl9QV01CUktDVExfQlJLQU9ERF9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgRmF1bHQgQnJha2UgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB1MzJJbnRTb3VyY2UgICAgSW50ZXJydXB0IHNvdXJjZSwgY291bGQgYmUgb25lIG9mIGZvbGxvd2luZyBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX0VER0UKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX0xFVkVMCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIGZhdWx0IGJyYWtlIGludGVycnVwdC4KKyAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBUUFdNX0VuYWJsZUZhdWx0QnJha2VJbnQoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkludFNvdXJjZSkKK3sKKyAgICB0aW1lci0+UFdNSU5URU4xIHw9IHUzMkludFNvdXJjZTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBGYXVsdCBCcmFrZSBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkludFNvdXJjZSAgICBJbnRlcnJ1cHQgc291cmNlLCBjb3VsZCBiZSBvbmUgb2YgZm9sbG93aW5nIHNvdXJjZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfRURHRQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfTEVWRUwKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGZhdWx0IGJyYWtlIGludGVycnVwdC4KKyAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBUUFdNX0Rpc2FibGVGYXVsdEJyYWtlSW50KFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJJbnRTb3VyY2UpCit7CisgICAgdGltZXItPlBXTUlOVEVOMSAmPSB+dTMySW50U291cmNlOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBJbmRpY2F0ZSBGYXVsdCBCcmFrZSBJbnRlcnJ1cHQgRmxhZworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMySW50U291cmNlICAgIEludGVycnVwdCBzb3VyY2UsIGNvdWxkIGJlIG9uZSBvZiBmb2xsb3dpbmcgc291cmNlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9FREdFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9MRVZFTAorICAqCisgICogQHJldHVybiAgICAgRmF1bHQgYnJha2UgaW50ZXJydXB0IGZsYWcgb2Ygc3BlY2lmaWVkIHNvdXJjZQorICAqIEByZXR2YWwgICAgIDAgICAgICAgRmF1bHQgYnJha2UgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXJyZWQKKyAgKiBAcmV0dmFsICAgICAxICAgICAgIEZhdWx0IGJyYWtlIGludGVycnVwdCBvY2N1cnJlZAorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGluZGljYXRlIGZhdWx0IGJyYWtlIGludGVycnVwdCBmbGFnIG9jY3VycmVkIG9yIG5vdCBvZiBzZWxlY3RlZCBzb3VyY2UuCisgICovCit1aW50MzJfdCBUUFdNX0dldEZhdWx0QnJha2VJbnRGbGFnKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJJbnRTb3VyY2UpCit7CisgICAgcmV0dXJuICgodGltZXItPlBXTUlOVFNUUzEgJiAoMHgzVUwgPDwgdTMySW50U291cmNlKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBGYXVsdCBCcmFrZSBJbnRlcnJ1cHQgRmxhZ3MKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkludFNvdXJjZSAgICBJbnRlcnJ1cHQgc291cmNlLCBjb3VsZCBiZSBvbmUgb2YgZm9sbG93aW5nIHNvdXJjZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfRURHRQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfTEVWRUwKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBmYXVsdCBicmFrZSBpbnRlcnJ1cHQgZmxhZ3Mgb2Ygc2VsZWN0ZWQgc291cmNlLgorICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIFRQV01fQ2xlYXJGYXVsdEJyYWtlSW50RmxhZyhUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMySW50U291cmNlKQoreworICAgIHRpbWVyLT5QV01JTlRTVFMxID0gKDB4M1VMIDw8IHUzMkludFNvdXJjZSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBMb2FkIE1vZGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyTG9hZE1vZGUgIFRpbWVyIFBXTSBjb3VudGVyIGxvYWRpbmcgbW9kZSwgY291bGQgYmUgb25lIG9mIGZvbGxvd2luZyBtb2RlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0xPQURfTU9ERV9QRVJJT0QKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fTE9BRF9NT0RFX0lNTUVESUFURQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9MT0FEX01PREVfQ0VOVEVSCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIGxvYWQgbW9kZSBvZiBzZWxlY3RlZCBjaGFubmVsLgorICAgICAgICBUaGUgZGVmYXVsdCBsb2FkaW5nIG1vZGUgaXMgcGVyaW9kIGxvYWRpbmcgbW9kZS4KKyAgKi8KK3ZvaWQgVFBXTV9TZXRMb2FkTW9kZShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyTG9hZE1vZGUpCit7CisgICAgdGltZXItPlBXTUNUTCA9ICh0aW1lci0+UFdNQ1RMICYgfihUSU1FUl9QV01DVExfSU1NTERFTl9Nc2sgfCBUSU1FUl9QV01DVExfQ1RSTERfTXNrKSkgfCB1MzJMb2FkTW9kZTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIEJyYWtlIFBpbiBOb2lzZSBGaWx0ZXIgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkJyYWtlUGluU3JjICBUaGUgZXh0ZXJuYWwgYnJha2UgcGluIHNvdXJjZSwgY291bGQgYmUgb25lIG9mIGZvbGxvd2luZyBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RNX0JSQUtFMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fVE1fQlJBS0UxCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9UTV9CUkFLRTIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RNX0JSQUtFMworICAqIEBwYXJhbVtpbl0gIHUzMkRlYm91bmNlQ250ICBUaGlzIHZhbHVlIGNvbnRyb2xzIHRoZSByZWFsIGRlYm91bmNlIHNhbXBsZSB0aW1lLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IGRlYm91bmNlIHNhbXBsZSB0aW1lIGlzIChkZWJvdW5jZSBzYW1wbGUgY2xvY2sgcGVyaW9kKSAqICh1MzJEZWJvdW5jZUNudCkuCisgICogQHBhcmFtW2luXSAgdTMyQ2xrU3JjU2VsICAgIEJyYWtlIHBpbiBkZXRlY3RvciBkZWJvdW5jZSBjbG9jayBzb3VyY2UsIGNvdWxkIGJlIG9uZSBvZiBmb2xsb3dpbmcgc291cmNlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfMQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQktQX0RCQ0xLX1BDTEtfRElWXzIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JLUF9EQkNMS19QQ0xLX0RJVl80CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfOAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQktQX0RCQ0xLX1BDTEtfRElWXzE2CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfMzIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JLUF9EQkNMS19QQ0xLX0RJVl82NAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQktQX0RCQ0xLX1BDTEtfRElWXzEyOAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBleHRlcm5hbCBicmFrZSBwaW4gZGV0ZWN0b3Igbm9pc2UgZmlsdGVyIGZ1bmN0aW9uLgorICAqLwordm9pZCBUUFdNX0VuYWJsZUJyYWtlUGluRGVib3VuY2UoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkJyYWtlUGluU3JjLCB1aW50MzJfdCB1MzJEZWJvdW5jZUNudCwgdWludDMyX3QgdTMyQ2xrU3JjU2VsKQoreworICAgIHRpbWVyLT5QV01CTkYgPSAodGltZXItPlBXTUJORiAmIH4oVElNRVJfUFdNQk5GX0JLUElOU1JDX01zayB8IFRJTUVSX1BXTUJORl9CUktGQ05UX01zayB8IFRJTUVSX1BXTUJORl9CUktORlNFTF9Nc2spKSB8CisgICAgICAgICAgICAgICAgICAgICh1MzJCcmFrZVBpblNyYyA8PCBUSU1FUl9QV01CTkZfQktQSU5TUkNfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICh1MzJEZWJvdW5jZUNudCA8PCBUSU1FUl9QV01CTkZfQlJLRkNOVF9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgKHUzMkNsa1NyY1NlbCA8PCBUSU1FUl9QV01CTkZfQlJLTkZTRUxfUG9zKSB8IFRJTUVSX1BXTUJORl9CUktORkVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBCcmFrZSBQaW4gTm9pc2UgRmlsdGVyIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgZXh0ZXJuYWwgYnJha2UgcGluIGRldGVjdG9yIG5vaXNlIGZpbHRlciBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgVFBXTV9EaXNhYmxlQnJha2VQaW5EZWJvdW5jZShUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+UFdNQk5GICY9IH5USU1FUl9QV01CTkZfQlJLTkZFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBCcmFrZSBQaW4gSW52ZXJzZSBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgUFdNIGJyYWtlIHBpbiBpbnZlcnNlIGZ1bmN0aW9uLgorICAqLwordm9pZCBUUFdNX0VuYWJsZUJyYWtlUGluSW52ZXJzZShUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+UFdNQk5GIHw9IFRJTUVSX1BXTUJORl9CUktQSU5WX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBCcmFrZSBQaW4gSW52ZXJzZSBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIFBXTSBicmFrZSBwaW4gaW52ZXJzZSBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgVFBXTV9EaXNhYmxlQnJha2VQaW5JbnZlcnNlKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5QV01CTkYgJj0gflRJTUVSX1BXTUJORl9CUktQSU5WX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IEJyYWtlIFBpbiBTb3VyY2UKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkJyYWtlUGluTnVtICBCcmFrZSBwaW4gc2VsZWN0aW9uLiBPbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RNX0JSQUtFMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fVE1fQlJBS0UxCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9UTV9CUkFLRTIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RNX0JSQUtFMworICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBQV00gYnJha2UgcGluIHNvdXJjZS4KKyAgKi8KK3ZvaWQgVFBXTV9TZXRCcmFrZVBpblNvdXJjZShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyQnJha2VQaW5OdW0pCit7CisgICAgdGltZXItPlBXTUJORiA9ICgoKHRpbWVyKS0+UFdNQk5GICYgflRJTUVSX1BXTUJORl9CS1BJTlNSQ19Nc2spIHwgKHUzMkJyYWtlUGluTnVtIDw8IFRJTUVSX1BXTUJORl9CS1BJTlNSQ19Qb3MpKTsKK30KKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFRJTUVSX1BXTV9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBUSU1FUl9QV01fRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3VhcnQuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzE4YzhkCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdWFydC5jCkBAIC0wLDAgKzEsNjkzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdWFydC5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgVUFSVCBJbnRlcmZhY2UgQ29udHJvbGxlciAoVUFSVCkgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgIk51TWljcm8uaCIKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBVQVJUX0RyaXZlciBVQVJUIERyaXZlcgorICBAeworKi8KKworCisvKiogQGFkZHRvZ3JvdXAgVUFSVF9FWFBPUlRFRF9GVU5DVElPTlMgVUFSVCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDbGVhciBVQVJUIHNwZWNpZmllZCBpbnRlcnJ1cHQgZmxhZworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICAgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJJbnRlcnJ1cHRGbGFnICAgIFRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IG9mIFVBUlQgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19MSU5JTlRfTXNrICAgIDogTElOIEJ1cyBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfV0tJTlRfTXNrICAgICA6IFdha2UtdXAgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX0JVRkVSUklOVF9Nc2sgOiBCdWZmZXIgRXJyb3IgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX01PREVNSU5UX01zayAgOiBNT0RFTSBTdGF0dXMgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX1JMU0lOVF9Nc2sgICAgOiBSZWNlaXZlIExpbmUgU3RhdHVzIGludGVycnVwdAorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgVUFSVCBzcGVjaWZpZWQgaW50ZXJydXB0IGZsYWcuCisgKi8KK3ZvaWQgVUFSVF9DbGVhckludEZsYWcoVUFSVF9UKiB1YXJ0LCB1aW50MzJfdCB1MzJJbnRlcnJ1cHRGbGFnKQoreworCisgICAgaWYodTMySW50ZXJydXB0RmxhZyAmIFVBUlRfSU5UU1RTX1JMU0lOVF9Nc2spICAgICAgICAgICAvKiBDbGVhciBSZWNlaXZlIExpbmUgU3RhdHVzIEludGVycnVwdCAqLworICAgIHsKKyAgICAgICAgdWFydC0+RklGT1NUUyA9IFVBUlRfRklGT1NUU19CSUZfTXNrIHwgVUFSVF9GSUZPU1RTX0ZFRl9Nc2sgfCBVQVJUX0ZJRk9TVFNfRkVGX01zayB8IFVBUlRfRklGT1NUU19BRERSREVURl9Nc2s7CisgICAgfQorCisgICAgaWYodTMySW50ZXJydXB0RmxhZyAmIFVBUlRfSU5UU1RTX01PREVNSU5UX01zaykgICAgICAgICAvKiBDbGVhciBNT0RFTSBTdGF0dXMgSW50ZXJydXB0ICovCisgICAgeworICAgICAgICB1YXJ0LT5NT0RFTVNUUyB8PSBVQVJUX01PREVNU1RTX0NUU0RFVEZfTXNrOworICAgIH0KKworICAgIGlmKHUzMkludGVycnVwdEZsYWcgJiBVQVJUX0lOVFNUU19CVUZFUlJJTlRfTXNrKSAgICAgICAgLyogQ2xlYXIgQnVmZmVyIEVycm9yIEludGVycnVwdCAqLworICAgIHsKKyAgICAgICAgdWFydC0+RklGT1NUUyA9IFVBUlRfRklGT1NUU19SWE9WSUZfTXNrIHwgVUFSVF9GSUZPU1RTX1RYT1ZJRl9Nc2s7CisgICAgfQorCisgICAgaWYodTMySW50ZXJydXB0RmxhZyAmIFVBUlRfSU5UU1RTX1dLSU5UX01zaykgICAgICAgICAgICAvKiBDbGVhciBXYWtlLXVwIEludGVycnVwdCAqLworICAgIHsKKyAgICAgICAgdWFydC0+V0tTVFMgPSBVQVJUX1dLU1RTX0NUU1dLRl9Nc2sgIHwgVUFSVF9XS1NUU19EQVRXS0ZfTXNrICAgfAorICAgICAgICAgICAgICAgICAgICAgIFVBUlRfV0tTVFNfUkZSVFdLRl9Nc2sgfCBVQVJUX1dLU1RTX1JTNDg1V0tGX01zayB8CisgICAgICAgICAgICAgICAgICAgICAgVUFSVF9XS1NUU19UT1VUV0tGX01zazsKKyAgICB9CisKKyAgICBpZih1MzJJbnRlcnJ1cHRGbGFnICYgVUFSVF9JTlRTVFNfTElOSU5UX01zaykgICAgICAgICAgIC8qIENsZWFyIExJTiBCdXMgSW50ZXJydXB0ICovCisgICAgeworICAgICAgICB1YXJ0LT5JTlRTVFMgPSBVQVJUX0lOVFNUU19MSU5JRl9Nc2s7CisgICAgICAgIHVhcnQtPkxJTlNUUyA9IFVBUlRfTElOU1RTX0JJVEVGX01zayAgICB8IFVBUlRfTElOU1RTX0JSS0RFVEZfTXNrICB8CisgICAgICAgICAgICAgICAgICAgICAgIFVBUlRfTElOU1RTX1NMVlNZTkNGX01zayB8IFVBUlRfTElOU1RTX1NMVklEUEVGX01zayB8CisgICAgICAgICAgICAgICAgICAgICAgIFVBUlRfTElOU1RTX1NMVkhFRl9Nc2sgICB8IFVBUlRfTElOU1RTX1NMVkhERVRGX01zayA7CisgICAgfQorCit9CisKKworLyoqCisgKiAgQGJyaWVmICAgICAgRGlzYWJsZSBVQVJUIGludGVycnVwdAorICoKKyAqICBAcGFyYW1baW5dICB1YXJ0IFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgKgorICogIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiAgQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBVQVJUIGludGVycnVwdC4KKyAqLwordm9pZCBVQVJUX0Nsb3NlKFVBUlRfVCogdWFydCkKK3sKKyAgICB1YXJ0LT5JTlRFTiA9IDB1bDsKK30KKworCisvKioKKyAqICBAYnJpZWYgICAgICBEaXNhYmxlIFVBUlQgYXV0byBmbG93IGNvbnRyb2wgZnVuY3Rpb24KKyAqCisgKiAgQHBhcmFtW2luXSAgdWFydCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgorICoKKyAqICBAcmV0dXJuICAgICBOb25lCisgKgorICogIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgVUFSVCBhdXRvIGZsb3cgY29udHJvbC4KKyAqLwordm9pZCBVQVJUX0Rpc2FibGVGbG93Q3RybChVQVJUX1QqIHVhcnQpCit7CisgICAgdWFydC0+SU5URU4gJj0gfihVQVJUX0lOVEVOX0FUT1JUU0VOX01zayB8IFVBUlRfSU5URU5fQVRPQ1RTRU5fTXNrKTsKK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRGlzYWJsZSBVQVJUIHNwZWNpZmllZCBpbnRlcnJ1cHQKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMySW50ZXJydXB0RmxhZyAgICBUaGUgc3BlY2lmaWVkIGludGVycnVwdCBvZiBVQVJUIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9UWEVORElFTl9Nc2sgICA6IFRyYW5zbWl0dGVyIEVtcHR5IEludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX0FCUklFTl9Nc2sgICAgIDogQXV0by1iYXVkIFJhdGUgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fTElOSUVOX01zayAgICAgOiBMaW4gQnVzIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1dLSUVOX01zayAgICAgIDogV2FrZS11cCBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9CVUZFUlJJRU5fTXNrICA6IEJ1ZmZlciBFcnJvciBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9SWFRPSUVOX01zayAgICA6IFJ4IFRpbWUtb3V0IEludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX01PREVNSUVOX01zayAgIDogTU9ERU0gU3RhdHVzIEludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1JMU0lFTl9Nc2sgICAgIDogUmVjZWl2ZSBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9USFJFSUVOX01zayAgICA6IFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fUkRBSUVOX01zayAgICAgOiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlIEludGVycnVwdAorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBVQVJUIHNwZWNpZmllZCBpbnRlcnJ1cHQgYW5kIGRpc2FibGUgTlZJQyBVQVJUIElSUS4KKyAqLwordm9pZCBVQVJUX0Rpc2FibGVJbnQoVUFSVF9UKiAgdWFydCwgdWludDMyX3QgdTMySW50ZXJydXB0RmxhZykKK3sKKyAgICAvKiBEaXNhYmxlIFVBUlQgc3BlY2lmaWVkIGludGVycnVwdCAqLworICAgIFVBUlRfRElTQUJMRV9JTlQodWFydCwgdTMySW50ZXJydXB0RmxhZyk7CisKKyAgICAvKiBEaXNhYmxlIE5WSUMgVUFSVCBJUlEgKi8KKyAgICBzd2l0Y2goKHVpbnQzMl90KXVhcnQpCisgICAgeworICAgICAgICBjYXNlIFVBUlQwX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDBfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICBOVklDX0Rpc2FibGVJUlEoVUFSVDBfSVJRbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUMV9CQVNFOgorICAgICAgICBjYXNlIFVBUlQxX0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgTlZJQ19EaXNhYmxlSVJRKFVBUlQxX0lSUW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDJfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUMl9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIE5WSUNfRGlzYWJsZUlSUShVQVJUMl9JUlFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQzX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDNfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICBOVklDX0Rpc2FibGVJUlEoVUFSVDNfSVJRbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUNF9CQVNFOgorICAgICAgICBjYXNlIFVBUlQ0X0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgTlZJQ19EaXNhYmxlSVJRKFVBUlQ0X0lSUW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDVfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUNV9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIE5WSUNfRGlzYWJsZUlSUShVQVJUNV9JUlFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBFbmFibGUgVUFSVCBhdXRvIGZsb3cgY29udHJvbCBmdW5jdGlvbgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gRW5hYmxlIFVBUlQgYXV0byBmbG93IGNvbnRyb2wuCisgKi8KKy8qKgorICogICAgQGJyaWVmICAgICAgICBFbmFibGUgVUFSVCBhdXRvIGZsb3cgY29udHJvbCBmdW5jdGlvbgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gRW5hYmxlIFVBUlQgYXV0byBmbG93IGNvbnRyb2wuCisgKi8KK3ZvaWQgVUFSVF9FbmFibGVGbG93Q3RybChVQVJUX1QqIHVhcnQpCit7CisgICAgLyogU2V0IFJUUyBwaW4gb3V0cHV0IGlzIGxvdyBsZXZlbCBhY3RpdmUgKi8KKyAgICB1YXJ0LT5NT0RFTSB8PSBVQVJUX01PREVNX1JUU0FDVExWX01zazsKKworICAgIC8qIFNldCBDVFMgcGluIGlucHV0IGlzIGxvdyBsZXZlbCBhY3RpdmUgKi8KKyAgICB1YXJ0LT5NT0RFTVNUUyB8PSBVQVJUX01PREVNU1RTX0NUU0FDVExWX01zazsKKworICAgIC8qIFNldCBSVFMgYW5kIENUUyBhdXRvIGZsb3cgY29udHJvbCBlbmFibGUgKi8KKyAgICB1YXJ0LT5JTlRFTiB8PSBVQVJUX0lOVEVOX0FUT1JUU0VOX01zayB8IFVBUlRfSU5URU5fQVRPQ1RTRU5fTXNrOworfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBFbmFibGUgVUFSVCBzcGVjaWZpZWQgaW50ZXJydXB0CisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgICAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkludGVycnVwdEZsYWcgICAgVGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQgb2YgVUFSVCBtb2R1bGU6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fVFhFTkRJRU5fTXNrICAgOiBUcmFuc21pdHRlciBFbXB0eSBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9BQlJJRU5fTXNrICAgICA6IEF1dG8tYmF1ZCBSYXRlIEludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX0xJTklFTl9Nc2sgICAgIDogTGluIEJ1cyBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9XS0lFTl9Nc2sgICAgICA6IFdha2UtdXAgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fQlVGRVJSSUVOX01zayAgOiBCdWZmZXIgRXJyb3IgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fUlhUT0lFTl9Nc2sgICAgOiBSeCBUaW1lLW91dCBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9NT0RFTUlFTl9Nc2sgICA6IE1PREVNIFN0YXR1cyBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9STFNJRU5fTXNrICAgICA6IFJlY2VpdmUgTGluZSBTdGF0dXMgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fVEhSRUlFTl9Nc2sgICAgOiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyIEVtcHR5IEludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1JEQUlFTl9Nc2sgICAgIDogUmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSBJbnRlcnJ1cHQKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBVQVJUIHNwZWNpZmllZCBpbnRlcnJ1cHQgYW5kIGVuYWJsZSBOVklDIFVBUlQgSVJRLgorICovCit2b2lkIFVBUlRfRW5hYmxlSW50KFVBUlRfVCogIHVhcnQsIHVpbnQzMl90IHUzMkludGVycnVwdEZsYWcpCit7CisKKyAgICAvKiBFbmFibGUgVUFSVCBzcGVjaWZpZWQgaW50ZXJydXB0ICovCisgICAgVUFSVF9FTkFCTEVfSU5UKHVhcnQsIHUzMkludGVycnVwdEZsYWcpOworCisgICAgLyogRW5hYmxlIE5WSUMgVUFSVCBJUlEgKi8KKyAgICBzd2l0Y2goKHVpbnQzMl90KXVhcnQpCisgICAgeworICAgICAgICBjYXNlIFVBUlQwX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDBfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICBOVklDX0VuYWJsZUlSUShVQVJUMF9JUlFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQxX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDFfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICBOVklDX0VuYWJsZUlSUShVQVJUMV9JUlFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQyX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDJfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICBOVklDX0VuYWJsZUlSUShVQVJUMl9JUlFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQzX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDNfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICBOVklDX0VuYWJsZUlSUShVQVJUM19JUlFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQ0X0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDRfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICBOVklDX0VuYWJsZUlSUShVQVJUNF9JUlFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQ1X0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDVfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICBOVklDX0VuYWJsZUlSUShVQVJUNV9JUlFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIE9wZW4gYW5kIHNldCBVQVJUIGZ1bmN0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyYmF1ZHJhdGUgICAgIFRoZSBiYXVkcmF0ZSBvZiBVQVJUIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgZnVuY3Rpb24gdXNlIHRvIGVuYWJsZSBVQVJUIGZ1bmN0aW9uIGFuZCBzZXQgYmF1ZC1yYXRlLgorICovCit2b2lkIFVBUlRfT3BlbihVQVJUX1QqIHVhcnQsIHVpbnQzMl90IHUzMmJhdWRyYXRlKQoreworICAgIHVpbnQzMl90IHUzMlVhcnRDbGtTcmNTZWwsIHUzMlVhcnRDbGtEaXZOdW07CisgICAgdWludDMyX3QgYXUzMkNsa1RibFs0XSA9IHtfX0hYVCwgMHVsLCBfX0xYVCwgX19ISVJDfTsKKyAgICB1aW50MzJfdCB1MzJCYXVkRGl2ID0gMHVsOworCisgICAgLyogR2V0IFVBUlQgY2xvY2sgc291cmNlIHNlbGVjdGlvbiBhbmQgVUFSVCBjbG9jayBkaXZpZGVyIG51bWJlciAqLworICAgIHN3aXRjaCgodWludDMyX3QpdWFydCkKKyAgICB7CisgICAgICAgIGNhc2UgVUFSVDBfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUMF9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIHUzMlVhcnRDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVUFSVDBfTU9EVUxFKTsKKyAgICAgICAgICAgIHUzMlVhcnRDbGtEaXZOdW0gPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFVBUlQwX01PRFVMRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUMV9CQVNFOgorICAgICAgICBjYXNlIFVBUlQxX0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgdTMyVWFydENsa1NyY1NlbCA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShVQVJUMV9NT0RVTEUpOworICAgICAgICAgICAgdTMyVWFydENsa0Rpdk51bSA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoVUFSVDFfTU9EVUxFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQyX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDJfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICB1MzJVYXJ0Q2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFVBUlQyX01PRFVMRSk7CisgICAgICAgICAgICB1MzJVYXJ0Q2xrRGl2TnVtID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihVQVJUMl9NT0RVTEUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDNfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUM19CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIHUzMlVhcnRDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVUFSVDNfTU9EVUxFKTsKKyAgICAgICAgICAgIHUzMlVhcnRDbGtEaXZOdW0gPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFVBUlQzX01PRFVMRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUNF9CQVNFOgorICAgICAgICBjYXNlIFVBUlQ0X0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgdTMyVWFydENsa1NyY1NlbCA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShVQVJUNF9NT0RVTEUpOworICAgICAgICAgICAgdTMyVWFydENsa0Rpdk51bSA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoVUFSVDRfTU9EVUxFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQ1X0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDVfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICB1MzJVYXJ0Q2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFVBUlQ1X01PRFVMRSk7CisgICAgICAgICAgICB1MzJVYXJ0Q2xrRGl2TnVtID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihVQVJUNV9NT0RVTEUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gOworICAgIH0KKworICAgIC8qIFNlbGVjdCBVQVJUIGZ1bmN0aW9uICovCisgICAgdWFydC0+RlVOQ1NFTCA9IFVBUlRfRlVOQ1NFTF9VQVJUOworCisgICAgLyogU2V0IFVBUlQgbGluZSBjb25maWd1cmF0aW9uICovCisgICAgdWFydC0+TElORSA9IFVBUlRfV09SRF9MRU5fOCB8IFVBUlRfUEFSSVRZX05PTkUgfCBVQVJUX1NUT1BfQklUXzE7CisKKyAgICAvKiBTZXQgVUFSVCBSeCBhbmQgUlRTIHRyaWdnZXIgbGV2ZWwgKi8KKyAgICB1YXJ0LT5GSUZPICY9IH4oVUFSVF9GSUZPX1JGSVRMX01zayB8IFVBUlRfRklGT19SVFNUUkdMVl9Nc2spOworCisgICAgLyogR2V0IFBMTCBjbG9jayBmcmVxdWVuY3kgaWYgVUFSVCBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIGlzIFBMTCAqLworICAgIGlmKHUzMlVhcnRDbGtTcmNTZWwgPT0gMXVsKQorICAgIHsKKyAgICAgICAgYXUzMkNsa1RibFt1MzJVYXJ0Q2xrU3JjU2VsXSA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsKKyAgICB9CisKKyAgICAvKiBTZXQgVUFSVCBiYXVkIHJhdGUgKi8KKyAgICBpZih1MzJiYXVkcmF0ZSAhPSAwdWwpCisgICAgeworICAgICAgICB1MzJCYXVkRGl2ID0gVUFSVF9CQVVEX01PREUyX0RJVklERVIoKGF1MzJDbGtUYmxbdTMyVWFydENsa1NyY1NlbF0pIC8gKHUzMlVhcnRDbGtEaXZOdW0gKyAxdWwpLCB1MzJiYXVkcmF0ZSk7CisKKyAgICAgICAgaWYodTMyQmF1ZERpdiA+IDB4RkZGRnVsKQorICAgICAgICB7CisgICAgICAgICAgICB1YXJ0LT5CQVVEID0gKFVBUlRfQkFVRF9NT0RFMCB8IFVBUlRfQkFVRF9NT0RFMF9ESVZJREVSKChhdTMyQ2xrVGJsW3UzMlVhcnRDbGtTcmNTZWxdKSAvICh1MzJVYXJ0Q2xrRGl2TnVtICsgMXVsKSwgdTMyYmF1ZHJhdGUpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVhcnQtPkJBVUQgPSAoVUFSVF9CQVVEX01PREUyIHwgdTMyQmF1ZERpdik7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFJlYWQgVUFSVCBkYXRhCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgcHU4UnhCdWYgICAgICAgIFRoZSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZGF0YSBvZiByZWNlaXZlIEZJRk8uCisgKiAgICBAcGFyYW1baW5dICAgIHUzMlJlYWRCeXRlcyAgICBUaGUgdGhlIHJlYWQgYnl0ZXMgbnVtYmVyIG9mIGRhdGEuCisgKgorICogICAgQHJldHVybiAgICAgICB1MzJDb3VudCBSZWNlaXZlIGJ5dGUgY291bnQKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgUnggZGF0YSBmcm9tIFJYIEZJRk8gYW5kIHRoZSBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHB1OFJ4QnVmLgorICovCit1aW50MzJfdCBVQVJUX1JlYWQoVUFSVF9UKiB1YXJ0LCB1aW50OF90IHB1OFJ4QnVmW10sIHVpbnQzMl90IHUzMlJlYWRCeXRlcykKK3sKKyAgICB1aW50MzJfdCAgdTMyQ291bnQsIHUzMmRlbGF5bm87CisgICAgdWludDMyX3QgIHUzMkV4aXQgPSAwdWw7CisKKyAgICBmb3IodTMyQ291bnQgPSAwdWw7IHUzMkNvdW50IDwgdTMyUmVhZEJ5dGVzOyB1MzJDb3VudCsrKQorICAgIHsKKyAgICAgICAgdTMyZGVsYXlubyA9IDB1bDsKKworICAgICAgICB3aGlsZSh1YXJ0LT5GSUZPU1RTICYgVUFSVF9GSUZPU1RTX1JYRU1QVFlfTXNrKSAgIC8qIENoZWNrIFJYIGVtcHR5ID0+IGZhaWxlZCAqLworICAgICAgICB7CisgICAgICAgICAgICB1MzJkZWxheW5vKys7CisgICAgICAgICAgICBpZih1MzJkZWxheW5vID49IDB4NDAwMDAwMDB1bCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJFeGl0ID0gMXVsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYodTMyRXhpdCA9PSAxdWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHU4UnhCdWZbdTMyQ291bnRdID0gKHVpbnQ4X3QpdWFydC0+REFUOyAvKiBHZXQgRGF0YSBmcm9tIFVBUlQgUlggICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdTMyQ291bnQ7Cit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFNldCBVQVJUIGxpbmUgY29uZmlndXJhdGlvbgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMmJhdWRyYXRlICAgICBUaGUgcmVnaXN0ZXIgdmFsdWUgb2YgYmF1ZHJhdGUgb2YgVUFSVCBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB1MzJiYXVkcmF0ZSA9IDAsIFVBUlQgYmF1ZHJhdGUgd2lsbCBub3QgY2hhbmdlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJkYXRhX3dpZHRoICAgVGhlIGRhdGEgbGVuZ3RoIG9mIFVBUlQgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfV09SRF9MRU5fNQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfV09SRF9MRU5fNgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfV09SRF9MRU5fNworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfV09SRF9MRU5fOAorICogICAgQHBhcmFtW2luXSAgICB1MzJwYXJpdHkgICAgICAgVGhlIHBhcml0eSBzZXR0aW5nIChub25lL29kZC9ldmVuL21hcmsvc3BhY2UpIG9mIFVBUlQgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfUEFSSVRZX05PTkUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX1BBUklUWV9PREQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX1BBUklUWV9FVkVOCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9QQVJJVFlfTUFSSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfUEFSSVRZX1NQQUNFCisgKiAgICBAcGFyYW1baW5dICAgIHUzMnN0b3BfYml0cyAgICBUaGUgc3RvcCBiaXQgbGVuZ3RoICgxLzEuNS8yIGJpdCkgb2YgVUFSVCBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9TVE9QX0JJVF8xCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9TVE9QX0JJVF8xXzUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX1NUT1BfQklUXzIKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgZnVuY3Rpb24gdXNlIHRvIGNvbmZpZyBVQVJUIGxpbmUgc2V0dGluZy4KKyAqLwordm9pZCBVQVJUX1NldExpbmVDb25maWcoVUFSVF9UKiB1YXJ0LCB1aW50MzJfdCB1MzJiYXVkcmF0ZSwgdWludDMyX3QgdTMyZGF0YV93aWR0aCwgdWludDMyX3QgdTMycGFyaXR5LCB1aW50MzJfdCAgdTMyc3RvcF9iaXRzKQoreworICAgIHVpbnQzMl90IHUzMlVhcnRDbGtTcmNTZWwsIHUzMlVhcnRDbGtEaXZOdW07CisgICAgdWludDMyX3QgYXUzMkNsa1RibFs0XSA9IHtfX0hYVCwgMHVsLCBfX0xYVCwgX19ISVJDfTsKKyAgICB1aW50MzJfdCB1MzJCYXVkRGl2ID0gMHVsOworCisgICAgLyogR2V0IFVBUlQgY2xvY2sgc291cmNlIHNlbGVjdGlvbiBhbmQgVUFSVCBjbG9jayBkaXZpZGVyIG51bWJlciAqLworICAgIHN3aXRjaCgodWludDMyX3QpdWFydCkKKyAgICB7CisgICAgICAgIGNhc2UgVUFSVDBfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUMF9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIHUzMlVhcnRDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVUFSVDBfTU9EVUxFKTsKKyAgICAgICAgICAgIHUzMlVhcnRDbGtEaXZOdW0gPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFVBUlQwX01PRFVMRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUMV9CQVNFOgorICAgICAgICBjYXNlIFVBUlQxX0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgdTMyVWFydENsa1NyY1NlbCA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShVQVJUMV9NT0RVTEUpOworICAgICAgICAgICAgdTMyVWFydENsa0Rpdk51bSA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoVUFSVDFfTU9EVUxFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQyX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDJfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICB1MzJVYXJ0Q2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFVBUlQyX01PRFVMRSk7CisgICAgICAgICAgICB1MzJVYXJ0Q2xrRGl2TnVtID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihVQVJUMl9NT0RVTEUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDNfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUM19CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIHUzMlVhcnRDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVUFSVDNfTU9EVUxFKTsKKyAgICAgICAgICAgIHUzMlVhcnRDbGtEaXZOdW0gPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFVBUlQzX01PRFVMRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUNF9CQVNFOgorICAgICAgICBjYXNlIFVBUlQ0X0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgdTMyVWFydENsa1NyY1NlbCA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShVQVJUNF9NT0RVTEUpOworICAgICAgICAgICAgdTMyVWFydENsa0Rpdk51bSA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoVUFSVDRfTU9EVUxFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQ1X0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDVfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICB1MzJVYXJ0Q2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFVBUlQ1X01PRFVMRSk7CisgICAgICAgICAgICB1MzJVYXJ0Q2xrRGl2TnVtID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihVQVJUNV9NT0RVTEUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gOworICAgIH0KKworICAgIC8qIEdldCBQTEwgY2xvY2sgZnJlcXVlbmN5IGlmIFVBUlQgY2xvY2sgc291cmNlIHNlbGVjdGlvbiBpcyBQTEwgKi8KKyAgICBpZih1MzJVYXJ0Q2xrU3JjU2VsID09IDF1bCkKKyAgICB7CisgICAgICAgIGF1MzJDbGtUYmxbdTMyVWFydENsa1NyY1NlbF0gPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7CisgICAgfQorCisgICAgLyogU2V0IFVBUlQgYmF1ZCByYXRlICovCisgICAgaWYodTMyYmF1ZHJhdGUgIT0gMHVsKQorICAgIHsKKyAgICAgICAgdTMyQmF1ZERpdiA9IFVBUlRfQkFVRF9NT0RFMl9ESVZJREVSKChhdTMyQ2xrVGJsW3UzMlVhcnRDbGtTcmNTZWxdKSAvICh1MzJVYXJ0Q2xrRGl2TnVtICsgMXVsKSwgdTMyYmF1ZHJhdGUpOworCisgICAgICAgIGlmKHUzMkJhdWREaXYgPiAweEZGRkZ1bCkKKyAgICAgICAgeworICAgICAgICAgICAgdWFydC0+QkFVRCA9IChVQVJUX0JBVURfTU9ERTAgfCBVQVJUX0JBVURfTU9ERTBfRElWSURFUigoYXUzMkNsa1RibFt1MzJVYXJ0Q2xrU3JjU2VsXSkgLyAodTMyVWFydENsa0Rpdk51bSArIDF1bCksIHUzMmJhdWRyYXRlKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1YXJ0LT5CQVVEID0gKFVBUlRfQkFVRF9NT0RFMiB8IHUzMkJhdWREaXYpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogU2V0IFVBUlQgbGluZSBjb25maWd1cmF0aW9uICovCisgICAgdWFydC0+TElORSA9IHUzMmRhdGFfd2lkdGggfCB1MzJwYXJpdHkgfCB1MzJzdG9wX2JpdHM7Cit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFNldCBSeCB0aW1lb3V0IGNvdW50CisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMlRPQyAgUnggdGltZW91dCBjb3VudGVyLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBmdW5jdGlvbiB1c2UgdG8gc2V0IFJ4IHRpbWVvdXQgY291bnQuCisgKi8KK3ZvaWQgVUFSVF9TZXRUaW1lb3V0Q250KFVBUlRfVCogdWFydCwgdWludDMyX3QgdTMyVE9DKQoreworICAgIC8qIFNldCB0aW1lLW91dCBpbnRlcnJ1cHQgY29tcGFyYXRvciAqLworICAgIHVhcnQtPlRPVVQgPSAodWFydC0+VE9VVCAmIH5VQVJUX1RPVVRfVE9JQ19Nc2spIHwgKHUzMlRPQyk7CisKKyAgICAvKiBTZXQgdGltZS1vdXQgY291bnRlciBlbmFibGUgKi8KKyAgICB1YXJ0LT5JTlRFTiB8PSBVQVJUX0lOVEVOX1RPQ05URU5fTXNrOworfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBTZWxlY3QgYW5kIGNvbmZpZ3VyZSBJckRBIGZ1bmN0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyQnVhZHJhdGUgICAgIFRoZSBiYXVkcmF0ZSBvZiBVQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyRGlyZWN0aW9uICAgIFRoZSBkaXJlY3Rpb24gb2YgVUFSVCBtb2R1bGUgaW4gSXJEQSBtb2RlOgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSVJEQV9UWEVOCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JUkRBX1JYRU4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgSXJEQSByZWxhdGl2ZSBzZXR0aW5ncy4gSXQgY29uc2lzdHMgb2YgVFggb3IgUlggbW9kZSBhbmQgYmF1ZHJhdGUuCisgKi8KK3ZvaWQgVUFSVF9TZWxlY3RJckRBTW9kZShVQVJUX1QqIHVhcnQsIHVpbnQzMl90IHUzMkJ1YWRyYXRlLCB1aW50MzJfdCB1MzJEaXJlY3Rpb24pCit7CisgICAgdWludDMyX3QgdTMyVWFydENsa1NyY1NlbCwgdTMyVWFydENsa0Rpdk51bTsKKyAgICB1aW50MzJfdCBhdTMyQ2xrVGJsWzRdID0ge19fSFhULCAwdWwsIF9fTFhULCBfX0hJUkN9OworICAgIHVpbnQzMl90IHUzMkJhdWREaXY7CisKKyAgICAvKiBTZWxlY3QgSXJEQSBmdW5jdGlvbiBtb2RlICovCisgICAgdWFydC0+RlVOQ1NFTCA9IFVBUlRfRlVOQ1NFTF9JckRBOworCisgICAgLyogR2V0IFVBUlQgY2xvY2sgc291cmNlIHNlbGVjdGlvbiBhbmQgVUFSVCBjbG9jayBkaXZpZGVyIG51bWJlciAqLworICAgIHN3aXRjaCgodWludDMyX3QpdWFydCkKKyAgICB7CisgICAgICAgIGNhc2UgVUFSVDBfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUMF9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIHUzMlVhcnRDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVUFSVDBfTU9EVUxFKTsKKyAgICAgICAgICAgIHUzMlVhcnRDbGtEaXZOdW0gPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFVBUlQwX01PRFVMRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUMV9CQVNFOgorICAgICAgICBjYXNlIFVBUlQxX0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgdTMyVWFydENsa1NyY1NlbCA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShVQVJUMV9NT0RVTEUpOworICAgICAgICAgICAgdTMyVWFydENsa0Rpdk51bSA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoVUFSVDFfTU9EVUxFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQyX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDJfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICB1MzJVYXJ0Q2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFVBUlQyX01PRFVMRSk7CisgICAgICAgICAgICB1MzJVYXJ0Q2xrRGl2TnVtID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihVQVJUMl9NT0RVTEUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDNfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUM19CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIHUzMlVhcnRDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVUFSVDNfTU9EVUxFKTsKKyAgICAgICAgICAgIHUzMlVhcnRDbGtEaXZOdW0gPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFVBUlQzX01PRFVMRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUNF9CQVNFOgorICAgICAgICBjYXNlIFVBUlQ0X0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgdTMyVWFydENsa1NyY1NlbCA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShVQVJUNF9NT0RVTEUpOworICAgICAgICAgICAgdTMyVWFydENsa0Rpdk51bSA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoVUFSVDRfTU9EVUxFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQ1X0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDVfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICB1MzJVYXJ0Q2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFVBUlQ1X01PRFVMRSk7CisgICAgICAgICAgICB1MzJVYXJ0Q2xrRGl2TnVtID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihVQVJUNV9NT0RVTEUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gOworICAgIH0KKworICAgIC8qIEdldCBQTEwgY2xvY2sgZnJlcXVlbmN5IGlmIFVBUlQgY2xvY2sgc291cmNlIHNlbGVjdGlvbiBpcyBQTEwgKi8KKyAgICBpZih1MzJVYXJ0Q2xrU3JjU2VsID09IDF1bCkKKyAgICB7CisgICAgICAgIGF1MzJDbGtUYmxbdTMyVWFydENsa1NyY1NlbF0gPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7CisgICAgfQorCisgICAgLyogU2V0IFVBUlQgSXJEQSBiYXVkIHJhdGUgaW4gbW9kZSAwICovCisgICAgaWYodTMyQnVhZHJhdGUgIT0gMHVsKQorICAgIHsKKyAgICAgICAgdTMyQmF1ZERpdiA9IFVBUlRfQkFVRF9NT0RFMF9ESVZJREVSKChhdTMyQ2xrVGJsW3UzMlVhcnRDbGtTcmNTZWxdKSAvICh1MzJVYXJ0Q2xrRGl2TnVtICsgMXVsKSwgdTMyQnVhZHJhdGUpOworCisgICAgICAgIGlmKHUzMkJhdWREaXYgPCAweEZGRkZ1bCkKKyAgICAgICAgeworICAgICAgICAgICAgdWFydC0+QkFVRCA9IChVQVJUX0JBVURfTU9ERTAgfCB1MzJCYXVkRGl2KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENvbmZpZ3VyZSBJckRBIHJlbGF0aXZlIHNldHRpbmdzICovCisgICAgaWYodTMyRGlyZWN0aW9uID09IFVBUlRfSVJEQV9SWEVOKQorICAgIHsKKyAgICAgICAgdWFydC0+SVJEQSB8PSBVQVJUX0lSREFfUlhJTlZfTXNrOyAgICAgLyogUnggc2lnbmFsIGlzIGludmVyc2UgKi8KKyAgICAgICAgdWFydC0+SVJEQSAmPSB+VUFSVF9JUkRBX1RYRU5fTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1YXJ0LT5JUkRBICY9IH5VQVJUX0lSREFfVFhJTlZfTXNrOyAgICAvKiBUeCBzaWduYWwgaXMgbm90IGludmVyc2UgKi8KKyAgICAgICAgdWFydC0+SVJEQSB8PSBVQVJUX0lSREFfVFhFTl9Nc2s7CisgICAgfQorCit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFNlbGVjdCBhbmQgY29uZmlndXJlIFJTNDg1IGZ1bmN0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJNb2RlICAgICBUaGUgb3BlcmF0aW9uIG1vZGUoTk1NL0FVRC9BQUQpLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9BTFRDVExfUlM0ODVOTU1fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0FMVENUTF9SUzQ4NUFVRF9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfQUxUQ1RMX1JTNDg1QUFEX01zaworICogICAgQHBhcmFtW2luXSAgICB1MzJBZGRyICAgICBUaGUgUlM0ODUgYWRkcmVzcy4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBSUzQ4NSByZWxhdGl2ZSBzZXR0aW5nLgorICovCit2b2lkIFVBUlRfU2VsZWN0UlM0ODVNb2RlKFVBUlRfVCogdWFydCwgdWludDMyX3QgdTMyTW9kZSwgdWludDMyX3QgdTMyQWRkcikKK3sKKyAgICAvKiBTZWxlY3QgVUFSVCBSUzQ4NSBmdW5jdGlvbiBtb2RlICovCisgICAgdWFydC0+RlVOQ1NFTCA9IFVBUlRfRlVOQ1NFTF9SUzQ4NTsKKworICAgIC8qIFNldCBSUzU4NSBjb25maWd1cmF0aW9uICovCisgICAgdWFydC0+QUxUQ1RMICY9IH4oVUFSVF9BTFRDVExfUlM0ODVOTU1fTXNrIHwgVUFSVF9BTFRDVExfUlM0ODVBVURfTXNrIHwgVUFSVF9BTFRDVExfUlM0ODVBQURfTXNrIHwgVUFSVF9BTFRDVExfQUREUk1WX01zayk7CisgICAgdWFydC0+QUxUQ1RMIHw9ICh1MzJNb2RlIHwgKHUzMkFkZHIgPDwgVUFSVF9BTFRDVExfQUREUk1WX1BvcykpOworfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBTZWxlY3QgYW5kIGNvbmZpZ3VyZSBMSU4gZnVuY3Rpb24KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJNb2RlICAgICAgICAgVGhlIExJTiBkaXJlY3Rpb24gOgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfQUxUQ1RMX0xJTlRYRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9BTFRDVExfTElOUlhFTl9Nc2sKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyQnJlYWtMZW5ndGggIFRoZSBicmVha2ZpZWxkIGxlbmd0aC4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBMSU4gcmVsYXRpdmUgc2V0dGluZy4KKyAqLwordm9pZCBVQVJUX1NlbGVjdExJTk1vZGUoVUFSVF9UKiB1YXJ0LCB1aW50MzJfdCB1MzJNb2RlLCB1aW50MzJfdCB1MzJCcmVha0xlbmd0aCkKK3sKKyAgICAvKiBTZWxlY3QgTElOIGZ1bmN0aW9uIG1vZGUgKi8KKyAgICB1YXJ0LT5GVU5DU0VMID0gVUFSVF9GVU5DU0VMX0xJTjsKKworICAgIC8qIFNlbGVjdCBMSU4gZnVuY3Rpb24gc2V0dGluZyA6IFR4IGVuYWJsZSwgUnggZW5hYmxlIGFuZCBicmVhayBmaWVsZCBsZW5ndGggKi8KKyAgICB1YXJ0LT5BTFRDVEwgJj0gfihVQVJUX0FMVENUTF9MSU5UWEVOX01zayB8IFVBUlRfQUxUQ1RMX0xJTlJYRU5fTXNrIHwgVUFSVF9BTFRDVExfQlJLRkxfTXNrKTsKKyAgICB1YXJ0LT5BTFRDVEwgfD0gKHUzMk1vZGUgfCAodTMyQnJlYWtMZW5ndGggPDwgVUFSVF9BTFRDVExfQlJLRkxfUG9zKSk7Cit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFdyaXRlIFVBUlQgZGF0YQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHB1OFR4QnVmICAgICAgICBUaGUgYnVmZmVyIHRvIHNlbmQgdGhlIGRhdGEgdG8gVUFSVCB0cmFuc21pc3Npb24gRklGTy4KKyAqICAgIEBwYXJhbVtvdXRdICAgdTMyV3JpdGVCeXRlcyAgIFRoZSBieXRlIG51bWJlciBvZiBkYXRhLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgdTMyQ291bnQgdHJhbnNmZXIgYnl0ZSBjb3VudAorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHRvIHdyaXRlIGRhdGEgaW50byBUWCBidWZmZXIgdG8gdHJhbnNtaXQgZGF0YSBieSBVQVJULgorICovCit1aW50MzJfdCBVQVJUX1dyaXRlKFVBUlRfVCogdWFydCwgdWludDhfdCBwdThUeEJ1ZltdLCB1aW50MzJfdCB1MzJXcml0ZUJ5dGVzKQoreworICAgIHVpbnQzMl90ICB1MzJDb3VudCwgdTMyZGVsYXlubzsKKyAgICB1aW50MzJfdCAgdTMyRXhpdCA9IDB1bDsKKworICAgIGZvcih1MzJDb3VudCA9IDB1bDsgdTMyQ291bnQgIT0gdTMyV3JpdGVCeXRlczsgdTMyQ291bnQrKykKKyAgICB7CisgICAgICAgIHUzMmRlbGF5bm8gPSAwdWw7CisgICAgICAgIHdoaWxlKCBVQVJUX0lTX1RYX0ZVTEwodWFydCkgKSAgIC8qIFdhaXQgVHggbm90IGZ1bGwgYW5kIFRpbWUtb3V0IG1hbm5lciAqLworICAgICAgICB7CisgICAgICAgICAgICB1MzJkZWxheW5vKys7CisgICAgICAgICAgICBpZih1MzJkZWxheW5vID49IDB4NDAwMDAwMDB1bCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJFeGl0ID0gMXVsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYodTMyRXhpdCA9PSAxdWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdWFydC0+REFUID0gcHU4VHhCdWZbdTMyQ291bnRdOyAgICAvKiBTZW5kIFVBUlQgRGF0YSBmcm9tIGJ1ZmZlciAqLworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHUzMkNvdW50OworfQorCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVUFSVF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVQVJUX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy91c2JkLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy91c2JkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk0MGY1NgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3VzYmQuYwpAQCAtMCwwICsxLDc4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHVzYmQuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIFVTQkQgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgVVNCRF9Ecml2ZXIgVVNCRCBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIFVTQkRfRVhQT1JURURfRlVOQ1RJT05TIFVTQkQgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKiBHbG9iYWwgdmFyaWFibGVzIGZvciBDb250cm9sIFBpcGUgKi8KK3VpbnQ4X3QgZ19VU0JEX2F1OFNldHVwUGFja2V0WzhdID0gezBVTH07ICAgICAgIC8qITwgU2V0dXAgcGFja2V0IGJ1ZmZlciAqLwordm9sYXRpbGUgdWludDhfdCBnX1VTQkRfdThSZW1vdGVXYWtldXBFbiA9IDBVTDsgLyohPCBSZW1vdGUgd2FrZSB1cCBmdW5jdGlvbiBlbmFibGUgZmxhZyAqLworCisvKioKKyAqIEBjb25kIEhJRERFTl9TWU1CT0xTCisgKi8KK3N0YXRpYyB1aW50OF90ICpzX1VTQkRfcHU4Q3RybEluUG9pbnRlciA9IDA7CitzdGF0aWMgdWludDhfdCAqc19VU0JEX3B1OEN0cmxPdXRQb2ludGVyID0gMDsKK3N0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCBzX1VTQkRfdTMyQ3RybEluU2l6ZSA9IDBVTDsKK3N0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCBzX1VTQkRfdTMyQ3RybE91dFNpemUgPSAwVUw7CitzdGF0aWMgdm9sYXRpbGUgdWludDMyX3Qgc19VU0JEX3UzMkN0cmxPdXRTaXplTGltaXQgPSAwVUw7CitzdGF0aWMgdm9sYXRpbGUgdWludDMyX3Qgc19VU0JEX3UzMlVzYkFkZHIgPSAwVUw7CitzdGF0aWMgdm9sYXRpbGUgdWludDMyX3Qgc19VU0JEX3UzMlVzYkNvbmZpZyA9IDBVTDsKK3N0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCBzX1VTQkRfdTMyQ3RybE1heFBrdFNpemUgPSA4VUw7CitzdGF0aWMgdm9sYXRpbGUgdWludDMyX3Qgc19VU0JEX3UzMlVzYkFsdEludGVyZmFjZSA9IDBVTDsKK3N0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCBzX1VTQkRfdTMyQ3RybE91dFRvZ2dsZSA9IDA7CitzdGF0aWMgdm9sYXRpbGUgdWludDhfdCAgc19VU0JEX3U4Q3RybEluWmVyb0ZsYWcgPSAwVUw7CisvKioKKyAqIEBlbmRjb25kCisgKi8KKworY29uc3QgU19VU0JEX0lORk9fVCAqZ19VU0JEX3NJbmZvOyAgICAgICAgICAgICAgICAgIC8qITwgQSBwb2ludGVyIGZvciBVU0IgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCisKK1ZFTkRPUl9SRVEgZ19VU0JEX3BmblZlbmRvclJlcXVlc3QgICAgICAgPSBOVUxMOyAgICAvKiE8IFVTQiBWZW5kb3IgUmVxdWVzdCBGdW5jdGlvbmFsIFBvaW50ZXIgKi8KK0NMQVNTX1JFUSBnX1VTQkRfcGZuQ2xhc3NSZXF1ZXN0ICAgICAgICAgPSBOVUxMOyAgICAvKiE8IFVTQiBDbGFzcyBSZXF1ZXN0IEZ1bmN0aW9uYWwgUG9pbnRlciAqLworU0VUX0lOVEVSRkFDRV9SRVEgZ19VU0JEX3BmblNldEludGVyZmFjZSA9IE5VTEw7ICAgIC8qITwgVVNCIFNldCBJbnRlcmZhY2UgRnVuY3Rpb25hbCBQb2ludGVyICovCitTRVRfQ09ORklHX0NCIGdfVVNCRF9wZm5TZXRDb25maWdDYWxsYmFjayA9IE5VTEw7ICAgLyohPCBVU0IgU2V0IGNvbmZpZ3VyYXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciAqLwordWludDMyX3QgZ19VU0JEX3UzMkVwU3RhbGxMb2NrICAgICAgICAgICA9IDBVTDsgICAgIC8qITwgQml0IG1hcCBmbGFnIHRvIGxvY2sgc3BlY2lmaWVkIEVQIHdoZW4gU0VUX0ZFQVRVUkUgKi8KKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBmdW5jdGlvbiBtYWtlcyBVU0JEIG1vZHVsZSB0byBiZSByZWFkeSB0byB1c2UKKyAgKgorICAqIEBwYXJhbVtpbl0gIHBhcmFtICAgICAgICAgICBUaGUgc3RydWN0dXJlIG9mIFVTQkQgaW5mb3JtYXRpb24uCisgICogQHBhcmFtW2luXSAgcGZuQ2xhc3NSZXEgICAgIFVTQiBDbGFzcyByZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHBmblNldEludGVyZmFjZSBVU0IgU2V0IEludGVyZmFjZSByZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZSBVU0IgY29udHJvbGxlciwgVVNCIFBIWSB0cmFuc2NlaXZlciBhbmQgcHVsbC11cCByZXNpc3RvciBvZiBVU0JfRCsgcGluLiBVU0IgUEhZIHdpbGwgZHJpdmUgU0UwIHRvIGJ1cy4KKyAgKi8KK3ZvaWQgVVNCRF9PcGVuKGNvbnN0IFNfVVNCRF9JTkZPX1QgKnBhcmFtLCBDTEFTU19SRVEgcGZuQ2xhc3NSZXEsIFNFVF9JTlRFUkZBQ0VfUkVRIHBmblNldEludGVyZmFjZSkKK3sKKyAgICBVU0JEX1QgKnBVU0JEOworCisgICAgaWYoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKQorICAgIHsKKyAgICAgICAgcFVTQkQgPSBVU0JEX05TOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwVVNCRCA9IFVTQkQ7CisgICAgfQorCisgICAgZ19VU0JEX3NJbmZvID0gcGFyYW07CisgICAgZ19VU0JEX3BmbkNsYXNzUmVxdWVzdCA9IHBmbkNsYXNzUmVxOworICAgIGdfVVNCRF9wZm5TZXRJbnRlcmZhY2UgPSBwZm5TZXRJbnRlcmZhY2U7CisKKyAgICAvKiBnZXQgRVAwIG1heGltdW0gcGFja2V0IHNpemUgKi8KKyAgICBzX1VTQkRfdTMyQ3RybE1heFBrdFNpemUgPSBnX1VTQkRfc0luZm8tPmd1OERldkRlc2NbN107CisKKyAgICAvKiBJbml0aWFsIFVTQiBlbmdpbmUgKi8KKyNpZmRlZiBTVVBQT1JUX0xQTQorICAgIHBVU0JELT5BVFRSID0gMHg3RDBVTCB8IFVTQkRfTFBNQUNLOworI2Vsc2UKKyAgICBwVVNCRC0+QVRUUiA9IDB4N0QwVUw7CisjZW5kaWYKKyAgICAvKiBGb3JjZSBTRTAgKi8KKyAgICBVU0JEX1NFVF9TRTAoKTsKK30KKworLyoqCisgICogQGJyaWVmICAgIFRoaXMgZnVuY3Rpb24gbWFrZXMgVVNCIGhvc3QgdG8gcmVjb2duaXplIHRoZSBkZXZpY2UKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgTm9uZQorICAqCisgICogQGRldGFpbHMgIEVuYWJsZSBXQUtFVVAsIEZMREVULCBVU0IgYW5kIEJVUyBpbnRlcnJ1cHRzLiBEaXNhYmxlIHNvZnR3YXJlLWRpc2Nvbm5lY3QgZnVuY3Rpb24gYWZ0ZXIgMTAwbXMgZGVsYXkgd2l0aCBTeXNUaWNrIHRpbWVyLgorICAqLwordm9pZCBVU0JEX1N0YXJ0KHZvaWQpCit7CisgICAgLyogRGlzYWJsZSBzb2Z0d2FyZS1kaXNjb25uZWN0IGZ1bmN0aW9uICovCisgICAgVVNCRF9DTFJfU0UwKCk7CisKKyAgICAvKiBDbGVhciBVU0ItcmVsYXRlZCBpbnRlcnJ1cHRzIGJlZm9yZSBlbmFibGUgaW50ZXJydXB0ICovCisgICAgVVNCRF9DTFJfSU5UX0ZMQUcoVVNCRF9JTlRfQlVTIHwgVVNCRF9JTlRfVVNCIHwgVVNCRF9JTlRfRkxERVQgfCBVU0JEX0lOVF9XQUtFVVApOworCisgICAgLyogRW5hYmxlIFVTQi1yZWxhdGVkIGludGVycnVwdHMuICovCisgICAgVVNCRF9FTkFCTEVfSU5UKFVTQkRfSU5UX0JVUyB8IFVTQkRfSU5UX1VTQiB8IFVTQkRfSU5UX0ZMREVUIHwgVVNCRF9JTlRfV0FLRVVQKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHRoZSByZWNlaXZlZCBTRVRVUCBwYWNrZXQKKyAgKgorICAqIEBwYXJhbVtpbl0gIGJ1ZiBBIGJ1ZmZlciBwb2ludGVyIHVzZWQgdG8gc3RvcmUgOC1ieXRlIFNFVFVQIHBhY2tldC4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFN0b3JlIFNFVFVQIHBhY2tldCB0byBhIHVzZXItc3BlY2lmaWVkIGJ1ZmZlci4KKyAgKgorICAqLwordm9pZCBVU0JEX0dldFNldHVwUGFja2V0KHVpbnQ4X3QgKmJ1ZikKK3sKKyAgICBVU0JEX01lbUNvcHkoYnVmLCBnX1VTQkRfYXU4U2V0dXBQYWNrZXQsIDhVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICBQcm9jZXNzIFNFVFVQIHBhY2tldAorICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgUGFyc2UgU0VUVVAgcGFja2V0IGFuZCBwZXJmb3JtIHRoZSBjb3JyZXNwb25kaW5nIGFjdGlvbi4KKyAgKgorICAqLwordm9pZCBVU0JEX1Byb2Nlc3NTZXR1cFBhY2tldCh2b2lkKQoreworICAgIHNfVVNCRF91MzJDdHJsT3V0VG9nZ2xlID0gMDsKKyAgICAvKiBHZXQgU0VUVVAgcGFja2V0IGZyb20gVVNCIGJ1ZmZlciAqLworICAgIFVTQkRfTWVtQ29weShnX1VTQkRfYXU4U2V0dXBQYWNrZXQsICh1aW50OF90ICopVVNCRF9CVUZfQkFTRSwgOFVMKTsKKworICAgIC8qIENoZWNrIHRoZSByZXF1ZXN0IHR5cGUgKi8KKyAgICBzd2l0Y2goZ19VU0JEX2F1OFNldHVwUGFja2V0WzBdICYgMHg2MFVMKQorICAgIHsKKyAgICAgICAgY2FzZSBSRVFfU1RBTkRBUkQ6ICAgLyogU3RhbmRhcmQgKi8KKyAgICAgICAgeworICAgICAgICAgICAgVVNCRF9TdGFuZGFyZFJlcXVlc3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgUkVRX0NMQVNTOiAgIC8qIENsYXNzICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKGdfVVNCRF9wZm5DbGFzc1JlcXVlc3QgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnX1VTQkRfcGZuQ2xhc3NSZXF1ZXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFJFUV9WRU5ET1I6ICAgLyogVmVuZG9yICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKGdfVVNCRF9wZm5WZW5kb3JSZXF1ZXN0ICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ19VU0JEX3BmblZlbmRvclJlcXVlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6ICAgLyogcmVzZXJ2ZWQgKi8KKyAgICAgICAgeworICAgICAgICAgICAgLyogU2V0dXAgZXJyb3IsIHN0YWxsIHRoZSBkZXZpY2UgKi8KKyAgICAgICAgICAgIFVTQkRfU0VUX0VQX1NUQUxMKEVQMCk7CisgICAgICAgICAgICBVU0JEX1NFVF9FUF9TVEFMTChFUDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICBQcm9jZXNzIEdldERlc2NyaXB0b3IgcmVxdWVzdAorICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgUGFyc2UgR2V0RGVzY3JpcHRvciByZXF1ZXN0IGFuZCBwZXJmb3JtIHRoZSBjb3JyZXNwb25kaW5nIGFjdGlvbi4KKyAgKgorICAqLwordm9pZCBVU0JEX0dldERlc2NyaXB0b3Iodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1MzJMZW47CisKKyAgICBzX1VTQkRfdThDdHJsSW5aZXJvRmxhZyA9ICh1aW50OF90KTBVTDsKKyAgICB1MzJMZW4gPSAwVUw7CisgICAgdTMyTGVuID0gZ19VU0JEX2F1OFNldHVwUGFja2V0WzddOworICAgIHUzMkxlbiA8PD0gOFVMOworICAgIHUzMkxlbiArPSBnX1VTQkRfYXU4U2V0dXBQYWNrZXRbNl07CisKKyAgICBzd2l0Y2goZ19VU0JEX2F1OFNldHVwUGFja2V0WzNdKQorICAgIHsKKyAgICAgICAgLyogR2V0IERldmljZSBEZXNjcmlwdG9yICovCisgICAgICAgIGNhc2UgREVTQ19ERVZJQ0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkxlbiA9IFVTQkRfTWluaW11bSh1MzJMZW4sICh1aW50MzJfdClMRU5fREVWSUNFKTsKKyAgICAgICAgICAgIFVTQkRfUHJlcGFyZUN0cmxJbigodWludDhfdCAqKWdfVVNCRF9zSW5mby0+Z3U4RGV2RGVzYywgdTMyTGVuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8qIEdldCBDb25maWd1cmF0aW9uIERlc2NyaXB0b3IgKi8KKyAgICAgICAgY2FzZSBERVNDX0NPTkZJRzoKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgdTMyVG90YWxMZW47CisKKyAgICAgICAgICAgIHUzMlRvdGFsTGVuID0gZ19VU0JEX3NJbmZvLT5ndThDb25maWdEZXNjWzNdOworICAgICAgICAgICAgdTMyVG90YWxMZW4gPSBnX1VTQkRfc0luZm8tPmd1OENvbmZpZ0Rlc2NbMl0gKyAodTMyVG90YWxMZW4gPDwgOFVMKTsKKworICAgICAgICAgICAgaWYodTMyTGVuID4gdTMyVG90YWxMZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyTGVuID0gdTMyVG90YWxMZW47CisgICAgICAgICAgICAgICAgaWYoKHUzMkxlbiAlIHNfVVNCRF91MzJDdHJsTWF4UGt0U2l6ZSkgPT0gMFVMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc19VU0JEX3U4Q3RybEluWmVyb0ZsYWcgPSAodWludDhfdCkxVUw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgVVNCRF9QcmVwYXJlQ3RybEluKCh1aW50OF90ICopZ19VU0JEX3NJbmZvLT5ndThDb25maWdEZXNjLCB1MzJMZW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyogR2V0IEJPUyBEZXNjcmlwdG9yICovCisgICAgICAgIGNhc2UgREVTQ19CT1M6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKGdfVVNCRF9zSW5mby0+Z3U4Qm9zRGVzYyA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVTQkRfU0VUX0VQX1NUQUxMKEVQMCk7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfRVBfU1RBTEwoRVAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJMZW4gPSBVU0JEX01pbmltdW0odTMyTGVuLCBMRU5fQk9TICsgTEVOX0JPU0NBUCk7CisgICAgICAgICAgICAgICAgVVNCRF9QcmVwYXJlQ3RybEluKCh1aW50OF90ICopZ19VU0JEX3NJbmZvLT5ndThCb3NEZXNjLCB1MzJMZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyogR2V0IEhJRCBEZXNjcmlwdG9yICovCisgICAgICAgIGNhc2UgREVTQ19ISUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENWMy4wIEhJRCBDbGFzcyBEZXNjcmlwdG9yIFRlc3QsCisgICAgICAgICAgICAgICBOZWVkIHRvIGluZGljYXRlIGluZGV4IG9mIHRoZSBISUQgRGVzY3JpcHRvciB3aXRoaW4gZ3U4Q29uZmlnRGVzY3JpcHRvciwgc3BlY2lmaWNhbGx5IEhJRCBDb21wb3NpdGUgZGV2aWNlLiAqLworICAgICAgICAgICAgdWludDMyX3QgdTMyQ29uZmlnRGVzY09mZnNldDsgICAvKiB1MzJDb25maWdEZXNjT2Zmc2V0IGlzIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciBvZmZzZXQgKEhJRCBkZXNjcmlwdG9yIHN0YXJ0IGluZGV4KSAqLworICAgICAgICAgICAgdTMyTGVuID0gVVNCRF9NaW5pbXVtKHUzMkxlbiwgTEVOX0hJRCk7CisgICAgICAgICAgICB1MzJDb25maWdEZXNjT2Zmc2V0ID0gZ19VU0JEX3NJbmZvLT5ndTMyQ29uZmlnSGlkRGVzY0lkeFtnX1VTQkRfYXU4U2V0dXBQYWNrZXRbNF1dOworICAgICAgICAgICAgVVNCRF9QcmVwYXJlQ3RybEluKCh1aW50OF90ICopJmdfVVNCRF9zSW5mby0+Z3U4Q29uZmlnRGVzY1t1MzJDb25maWdEZXNjT2Zmc2V0XSwgdTMyTGVuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8qIEdldCBSZXBvcnQgRGVzY3JpcHRvciAqLworICAgICAgICBjYXNlIERFU0NfSElEX1JQVDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYodTMyTGVuID4gZ19VU0JEX3NJbmZvLT5ndTMySGlkUmVwb3J0U2l6ZVtnX1VTQkRfYXU4U2V0dXBQYWNrZXRbNF1dKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkxlbiA9IGdfVVNCRF9zSW5mby0+Z3UzMkhpZFJlcG9ydFNpemVbZ19VU0JEX2F1OFNldHVwUGFja2V0WzRdXTsKKyAgICAgICAgICAgICAgICBpZigodTMyTGVuICUgc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplKSA9PSAwVUwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzX1VTQkRfdThDdHJsSW5aZXJvRmxhZyA9ICh1aW50OF90KTFVTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBVU0JEX1ByZXBhcmVDdHJsSW4oKHVpbnQ4X3QgKilnX1VTQkRfc0luZm8tPmd1OEhpZFJlcG9ydERlc2NbZ19VU0JEX2F1OFNldHVwUGFja2V0WzRdXSwgdTMyTGVuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8qIEdldCBTdHJpbmcgRGVzY3JpcHRvciAqLworICAgICAgICBjYXNlIERFU0NfU1RSSU5HOgorICAgICAgICB7CisgICAgICAgICAgICAvKiBHZXQgU3RyaW5nIERlc2NyaXB0b3IgKi8KKyAgICAgICAgICAgIGlmKGdfVVNCRF9hdThTZXR1cFBhY2tldFsyXSA8IDRVTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZih1MzJMZW4gPiBnX1VTQkRfc0luZm8tPmd1OFN0cmluZ0Rlc2NbZ19VU0JEX2F1OFNldHVwUGFja2V0WzJdXVswXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMkxlbiA9IGdfVVNCRF9zSW5mby0+Z3U4U3RyaW5nRGVzY1tnX1VTQkRfYXU4U2V0dXBQYWNrZXRbMl1dWzBdOworICAgICAgICAgICAgICAgICAgICBpZigodTMyTGVuICUgc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplKSA9PSAwVUwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNfVVNCRF91OEN0cmxJblplcm9GbGFnID0gKHVpbnQ4X3QpMVVMOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFVTQkRfUHJlcGFyZUN0cmxJbigodWludDhfdCAqKWdfVVNCRF9zSW5mby0+Z3U4U3RyaW5nRGVzY1tnX1VTQkRfYXU4U2V0dXBQYWNrZXRbMl1dLCB1MzJMZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIE5vdCBzdXBwb3J0LiBSZXBseSBTVEFMTC4gKi8KKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9FUF9TVEFMTChFUDApOworICAgICAgICAgICAgICAgIFVTQkRfU0VUX0VQX1NUQUxMKEVQMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIE5vdCBzdXBwb3J0LiBSZXBseSBTVEFMTC4gKi8KKyAgICAgICAgICAgIFVTQkRfU0VUX0VQX1NUQUxMKEVQMCk7CisgICAgICAgICAgICBVU0JEX1NFVF9FUF9TVEFMTChFUDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgUHJvY2VzcyBzdGFuZGFyZCByZXF1ZXN0CisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICBQYXJzZSBzdGFuZGFyZCByZXF1ZXN0IGFuZCBwZXJmb3JtIHRoZSBjb3JyZXNwb25kaW5nIGFjdGlvbi4KKyAgKgorICAqLwordm9pZCBVU0JEX1N0YW5kYXJkUmVxdWVzdCh2b2lkKQoreworICAgIHVpbnQzMl90IHUzMkFkZHI7CisgICAgVVNCRF9UICpwVVNCRDsKKyAgICBPVEdfVCAqcE9URzsKKworICAgIGlmKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCkKKyAgICB7CisgICAgICAgIHBVU0JEID0gVVNCRF9OUzsKKyAgICAgICAgcE9URyA9IE9UR19OUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcFVTQkQgPSBVU0JEOworICAgICAgICBwT1RHID0gT1RHOworICAgIH0KKworICAgIC8qIGNsZWFyIGdsb2JhbCB2YXJpYWJsZXMgZm9yIG5ldyByZXF1ZXN0ICovCisgICAgc19VU0JEX3B1OEN0cmxJblBvaW50ZXIgPSAwOworICAgIHNfVVNCRF91MzJDdHJsSW5TaXplID0gMFVMOworCisgICAgaWYoKGdfVVNCRF9hdThTZXR1cFBhY2tldFswXSAmIDB4ODBVTCkgPT0gMHg4MFVMKSAgICAvKiByZXF1ZXN0IGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uICovCisgICAgeworICAgICAgICAvKiBEZXZpY2UgdG8gaG9zdCAqLworICAgICAgICBzd2l0Y2goZ19VU0JEX2F1OFNldHVwUGFja2V0WzFdKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIEdFVF9DT05GSUdVUkFUSU9OOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFJldHVybiBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyAqLworICAgICAgICAgICAgICAgIC8qIERhdGEgc3RhZ2UgKi8KKyAgICAgICAgICAgICAgICB1MzJBZGRyID0gVVNCRF9CVUZfQkFTRSArIFVTQkRfR0VUX0VQX0JVRl9BRERSKEVQMCk7CisgICAgICAgICAgICAgICAgTTgodTMyQWRkcikgPSAodWludDhfdClzX1VTQkRfdTMyVXNiQ29uZmlnOworICAgICAgICAgICAgICAgIFVTQkRfU0VUX0RBVEExKEVQMCk7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfUEFZTE9BRF9MRU4oRVAwLCAxVUwpOworICAgICAgICAgICAgICAgIC8qIFN0YXR1cyBzdGFnZSAqLworICAgICAgICAgICAgICAgIFVTQkRfUHJlcGFyZUN0cmxPdXQoMCwgMFVMKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR0VUX0RFU0NSSVBUT1I6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVVNCRF9HZXREZXNjcmlwdG9yKCk7CisgICAgICAgICAgICAgICAgVVNCRF9QcmVwYXJlQ3RybE91dCgwLCAwVUwpOyAvKiBGb3Igc3RhdHVzIHN0YWdlICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEdFVF9JTlRFUkZBQ0U6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogUmV0dXJuIGN1cnJlbnQgaW50ZXJmYWNlIHNldHRpbmcgKi8KKyAgICAgICAgICAgICAgICAvKiBEYXRhIHN0YWdlICovCisgICAgICAgICAgICAgICAgdTMyQWRkciA9IFVTQkRfQlVGX0JBU0UgKyBVU0JEX0dFVF9FUF9CVUZfQUREUihFUDApOworICAgICAgICAgICAgICAgIE04KHUzMkFkZHIpID0gKHVpbnQ4X3Qpc19VU0JEX3UzMlVzYkFsdEludGVyZmFjZTsKKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9EQVRBMShFUDApOworICAgICAgICAgICAgICAgIFVTQkRfU0VUX1BBWUxPQURfTEVOKEVQMCwgMVVMKTsKKyAgICAgICAgICAgICAgICAvKiBTdGF0dXMgc3RhZ2UgKi8KKyAgICAgICAgICAgICAgICBVU0JEX1ByZXBhcmVDdHJsT3V0KDAsIDBVTCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEdFVF9TVEFUVVM6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRGV2aWNlICovCisgICAgICAgICAgICAgICAgaWYoZ19VU0JEX2F1OFNldHVwUGFja2V0WzBdID09IDB4ODBVTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdThUbXA7CisKKyAgICAgICAgICAgICAgICAgICAgdThUbXAgPSAodWludDhfdCkwVUw7CisgICAgICAgICAgICAgICAgICAgIGlmKChnX1VTQkRfc0luZm8tPmd1OENvbmZpZ0Rlc2NbN10gJiAweDQwVUwpID09IDB4NDBVTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdThUbXAgfD0gKHVpbnQ4X3QpMVVMOyAvKiBTZWxmLVBvd2VyZWQvQnVzLVBvd2VyZWQuICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYoKGdfVVNCRF9zSW5mby0+Z3U4Q29uZmlnRGVzY1s3XSAmIDB4MjBVTCkgPT0gMHgyMFVMKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1OFRtcCB8PSAodWludDhfdCkoZ19VU0JEX3U4UmVtb3RlV2FrZXVwRW4gPDwgMVVMKTsgLyogUmVtb3RlIHdha2UgdXAgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHUzMkFkZHIgPSBVU0JEX0JVRl9CQVNFICsgVVNCRF9HRVRfRVBfQlVGX0FERFIoRVAwKTsKKyAgICAgICAgICAgICAgICAgICAgTTgodTMyQWRkcikgPSB1OFRtcDsKKworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBJbnRlcmZhY2UgKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGdfVVNCRF9hdThTZXR1cFBhY2tldFswXSA9PSAweDgxVUwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJBZGRyID0gVVNCRF9CVUZfQkFTRSArIFVTQkRfR0VUX0VQX0JVRl9BRERSKEVQMCk7CisgICAgICAgICAgICAgICAgICAgIE04KHUzMkFkZHIpID0gKHVpbnQ4X3QpMFVMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBFbmRwb2ludCAqLworICAgICAgICAgICAgICAgIGVsc2UgaWYoZ19VU0JEX2F1OFNldHVwUGFja2V0WzBdID09IDB4ODJVTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZXAgPSAodWludDhfdCkoZ19VU0JEX2F1OFNldHVwUGFja2V0WzRdICYgMHhGVUwpOworICAgICAgICAgICAgICAgICAgICB1MzJBZGRyID0gVVNCRF9CVUZfQkFTRSArIFVTQkRfR0VUX0VQX0JVRl9BRERSKEVQMCk7CisgICAgICAgICAgICAgICAgICAgIE04KHUzMkFkZHIpID0gKHVpbnQ4X3QpKFVTQkRfR2V0U3RhbGwoZXApID8gMVVMIDogMFVMKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB1MzJBZGRyID0gVVNCRF9CVUZfQkFTRSArIFVTQkRfR0VUX0VQX0JVRl9BRERSKEVQMCkgKyAxVUw7CisgICAgICAgICAgICAgICAgTTgodTMyQWRkcikgPSAodWludDhfdCkwVUw7CisgICAgICAgICAgICAgICAgLyogRGF0YSBzdGFnZSAqLworICAgICAgICAgICAgICAgIFVTQkRfU0VUX0RBVEExKEVQMCk7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfUEFZTE9BRF9MRU4oRVAwLCAyVUwpOworICAgICAgICAgICAgICAgIC8qIFN0YXR1cyBzdGFnZSAqLworICAgICAgICAgICAgICAgIFVTQkRfUHJlcGFyZUN0cmxPdXQoMCwgMFVMKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU2V0dXAgZXJyb3IsIHN0YWxsIHRoZSBkZXZpY2UgKi8KKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9FUF9TVEFMTChFUDApOworICAgICAgICAgICAgICAgIFVTQkRfU0VUX0VQX1NUQUxMKEVQMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogSG9zdCB0byBkZXZpY2UgKi8KKyAgICAgICAgc3dpdGNoKGdfVVNCRF9hdThTZXR1cFBhY2tldFsxXSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBDTEVBUl9GRUFUVVJFOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKGdfVVNCRF9hdThTZXR1cFBhY2tldFsyXSA9PSBGRUFUVVJFX0VORFBPSU5UX0hBTFQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcE51bSwgaTsKKworICAgICAgICAgICAgICAgICAgICAvKiBFUCBudW1iZXIgc3RhbGwgaXMgbm90IGFsbG93IHRvIGJlIGNsZWFyIGluIE1TQyBjbGFzcyAiRXJyb3IgUmVjb3ZlcnkgVGVzdCIuCisgICAgICAgICAgICAgICAgICAgICAgIGEgZmxhZzogZ19VU0JEX3UzMkVwU3RhbGxMb2NrIGlzIGFkZGVkIHRvIHN1cHBvcnQgaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgZXBOdW0gPSAodWludDhfdCkoZ19VU0JEX2F1OFNldHVwUGFja2V0WzRdICYgMHhGVUwpOworICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IDBVTDsgaSA8IFVTQkRfTUFYX0VQOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCgocFVTQkQtPkVQW2ldLkNGRyAmIDB4RlVMKSA9PSBlcE51bSkgJiYgKChnX1VTQkRfdTMyRXBTdGFsbExvY2sgJiAoMVVMIDw8IGkpKSA9PSAwVUwpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBVU0JELT5FUFtpXS5DRkdQICY9IH5VU0JEX0NGR1BfU1NUQUxMX01zazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVVNCRC0+RVBbaV0uQ0ZHICY9IH5VU0JEX0NGR19EU1FTWU5DX01zazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGdfVVNCRF9hdThTZXR1cFBhY2tldFsyXSA9PSBGRUFUVVJFX0RFVklDRV9SRU1PVEVfV0FLRVVQKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ19VU0JEX3U4UmVtb3RlV2FrZXVwRW4gPSAodWludDhfdCkwVUw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogU3RhdHVzIHN0YWdlICovCisgICAgICAgICAgICAgICAgVVNCRF9TRVRfREFUQTEoRVAwKTsKKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9QQVlMT0FEX0xFTihFUDAsIDBVTCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFNFVF9BRERSRVNTOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNfVVNCRF91MzJVc2JBZGRyID0gZ19VU0JEX2F1OFNldHVwUGFja2V0WzJdOworCisgICAgICAgICAgICAgICAgLyogREFUQSBJTiBmb3IgZW5kIG9mIHNldHVwICovCisgICAgICAgICAgICAgICAgLyogU3RhdHVzIFN0YWdlICovCisgICAgICAgICAgICAgICAgVVNCRF9TRVRfREFUQTEoRVAwKTsKKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9QQVlMT0FEX0xFTihFUDAsIDBVTCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFNFVF9DT05GSUdVUkFUSU9OOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNfVVNCRF91MzJVc2JDb25maWcgPSBnX1VTQkRfYXU4U2V0dXBQYWNrZXRbMl07CisKKyAgICAgICAgICAgICAgICBpZihnX1VTQkRfcGZuU2V0Q29uZmlnQ2FsbGJhY2spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnX1VTQkRfcGZuU2V0Q29uZmlnQ2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBEQVRBIElOIGZvciBlbmQgb2Ygc2V0dXAgKi8KKyAgICAgICAgICAgICAgICAvKiBTdGF0dXMgc3RhZ2UgKi8KKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9EQVRBMShFUDApOworICAgICAgICAgICAgICAgIFVTQkRfU0VUX1BBWUxPQURfTEVOKEVQMCwgMFVMKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU0VUX0ZFQVRVUkU6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoKGdfVVNCRF9hdThTZXR1cFBhY2tldFswXSAmIDB4RlVMKSA9PSAwVUwpICAgLyogMDogZGV2aWNlICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZigoZ19VU0JEX2F1OFNldHVwUGFja2V0WzJdID09IDNVTCkgJiYgKGdfVVNCRF9hdThTZXR1cFBhY2tldFszXSA9PSAwVUwpKSAvKiAzOiBITlAgZW5hYmxlICovCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBPVEctPkNUTCB8PSAoT1RHX0NUTF9ITlBSRVFFTl9Nc2sgfCBPVEdfQ1RMX0JVU1JFUV9Nc2spOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKGdfVVNCRF9hdThTZXR1cFBhY2tldFsyXSA9PSBGRUFUVVJFX0VORFBPSU5UX0hBTFQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVU0JEX1NldFN0YWxsKCh1aW50OF90KShnX1VTQkRfYXU4U2V0dXBQYWNrZXRbNF0gJiAweEZVTCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGdfVVNCRF9hdThTZXR1cFBhY2tldFsyXSA9PSBGRUFUVVJFX0RFVklDRV9SRU1PVEVfV0FLRVVQKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ19VU0JEX3U4UmVtb3RlV2FrZXVwRW4gPSAodWludDhfdCkxVUw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogU3RhdHVzIHN0YWdlICovCisgICAgICAgICAgICAgICAgVVNCRF9TRVRfREFUQTEoRVAwKTsKKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9QQVlMT0FEX0xFTihFUDAsIDBVTCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFNFVF9JTlRFUkZBQ0U6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc19VU0JEX3UzMlVzYkFsdEludGVyZmFjZSA9IGdfVVNCRF9hdThTZXR1cFBhY2tldFsyXTsKKyAgICAgICAgICAgICAgICBpZihnX1VTQkRfcGZuU2V0SW50ZXJmYWNlICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnX1VTQkRfcGZuU2V0SW50ZXJmYWNlKHNfVVNCRF91MzJVc2JBbHRJbnRlcmZhY2UpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIFN0YXR1cyBzdGFnZSAqLworICAgICAgICAgICAgICAgIFVTQkRfU0VUX0RBVEExKEVQMCk7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfUEFZTE9BRF9MRU4oRVAwLCAwVUwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTZXR1cCBlcnJvciwgc3RhbGwgdGhlIGRldmljZSAqLworICAgICAgICAgICAgICAgIFVTQkRfU0VUX0VQX1NUQUxMKEVQMCk7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfRVBfU1RBTEwoRVAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgUHJlcGFyZSB0aGUgZmlyc3QgQ29udHJvbCBJTiBwaXBlCisgICoKKyAgKiBAcGFyYW1baW5dICBwdThCdWYgIFRoZSBwb2ludGVyIG9mIGRhdGEgc2VudCB0byBVU0IgaG9zdC4KKyAgKiBAcGFyYW1baW5dICB1MzJTaXplIFRoZSBJTiB0cmFuc2ZlciBzaXplLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgUHJlcGFyZSBkYXRhIGZvciBDb250cm9sIElOIHRyYW5zZmVyLgorICAqCisgICovCit2b2lkIFVTQkRfUHJlcGFyZUN0cmxJbih1aW50OF90IHB1OEJ1ZltdLCB1aW50MzJfdCB1MzJTaXplKQoreworICAgIHVpbnQzMl90IHUzMkFkZHI7CisKKyAgICBpZih1MzJTaXplID4gc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplKQorICAgIHsKKyAgICAgICAgLyogRGF0YSBzaXplID4gTVhQTEQgKi8KKyAgICAgICAgc19VU0JEX3B1OEN0cmxJblBvaW50ZXIgPSBwdThCdWYgKyBzX1VTQkRfdTMyQ3RybE1heFBrdFNpemU7CisgICAgICAgIHNfVVNCRF91MzJDdHJsSW5TaXplID0gdTMyU2l6ZSAtIHNfVVNCRF91MzJDdHJsTWF4UGt0U2l6ZTsKKyAgICAgICAgVVNCRF9TRVRfREFUQTEoRVAwKTsKKyAgICAgICAgdTMyQWRkciA9IFVTQkRfQlVGX0JBU0UgKyBVU0JEX0dFVF9FUF9CVUZfQUREUihFUDApOworICAgICAgICBVU0JEX01lbUNvcHkoKHVpbnQ4X3QgKil1MzJBZGRyLCBwdThCdWYsIHNfVVNCRF91MzJDdHJsTWF4UGt0U2l6ZSk7CisgICAgICAgIFVTQkRfU0VUX1BBWUxPQURfTEVOKEVQMCwgc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRGF0YSBzaXplIDw9IE1YUExEICovCisgICAgICAgIHNfVVNCRF9wdThDdHJsSW5Qb2ludGVyID0gMDsKKyAgICAgICAgc19VU0JEX3UzMkN0cmxJblNpemUgPSAwVUw7CisgICAgICAgIFVTQkRfU0VUX0RBVEExKEVQMCk7CisgICAgICAgIHUzMkFkZHIgPSBVU0JEX0JVRl9CQVNFICsgVVNCRF9HRVRfRVBfQlVGX0FERFIoRVAwKTsKKyAgICAgICAgVVNCRF9NZW1Db3B5KCh1aW50OF90ICopdTMyQWRkciwgcHU4QnVmLCB1MzJTaXplKTsKKyAgICAgICAgVVNCRF9TRVRfUEFZTE9BRF9MRU4oRVAwLCB1MzJTaXplKTsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICBSZXBlYXQgQ29udHJvbCBJTiBwaXBlCisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgcmVtYWluZWQgZGF0YSBvZiBDb250cm9sIElOIHRyYW5zZmVyLgorICAqCisgICovCit2b2lkIFVTQkRfQ3RybEluKHZvaWQpCit7CisgICAgdWludDMyX3QgdTMyQWRkcjsKKworICAgIGlmKHNfVVNCRF91MzJDdHJsSW5TaXplKQorICAgIHsKKyAgICAgICAgLyogUHJvY2VzcyByZW1haW5lZCBkYXRhICovCisgICAgICAgIGlmKHNfVVNCRF91MzJDdHJsSW5TaXplID4gc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBEYXRhIHNpemUgPiBNWFBMRCAqLworICAgICAgICAgICAgdTMyQWRkciA9IFVTQkRfQlVGX0JBU0UgKyBVU0JEX0dFVF9FUF9CVUZfQUREUihFUDApOworICAgICAgICAgICAgVVNCRF9NZW1Db3B5KCh1aW50OF90ICopdTMyQWRkciwgKHVpbnQ4X3QgKilzX1VTQkRfcHU4Q3RybEluUG9pbnRlciwgc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplKTsKKyAgICAgICAgICAgIFVTQkRfU0VUX1BBWUxPQURfTEVOKEVQMCwgc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplKTsKKyAgICAgICAgICAgIHNfVVNCRF9wdThDdHJsSW5Qb2ludGVyICs9IHNfVVNCRF91MzJDdHJsTWF4UGt0U2l6ZTsKKyAgICAgICAgICAgIHNfVVNCRF91MzJDdHJsSW5TaXplIC09IHNfVVNCRF91MzJDdHJsTWF4UGt0U2l6ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERhdGEgc2l6ZSA8PSBNWFBMRCAqLworICAgICAgICAgICAgdTMyQWRkciA9IFVTQkRfQlVGX0JBU0UgKyBVU0JEX0dFVF9FUF9CVUZfQUREUihFUDApOworICAgICAgICAgICAgVVNCRF9NZW1Db3B5KCh1aW50OF90ICopdTMyQWRkciwgKHVpbnQ4X3QgKilzX1VTQkRfcHU4Q3RybEluUG9pbnRlciwgc19VU0JEX3UzMkN0cmxJblNpemUpOworICAgICAgICAgICAgVVNCRF9TRVRfUEFZTE9BRF9MRU4oRVAwLCBzX1VTQkRfdTMyQ3RybEluU2l6ZSk7CisgICAgICAgICAgICBzX1VTQkRfcHU4Q3RybEluUG9pbnRlciA9IDA7CisgICAgICAgICAgICBzX1VTQkRfdTMyQ3RybEluU2l6ZSA9IDBVTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIC8qIE5vIG1vcmUgZGF0YSBmb3IgSU4gdG9rZW4gKi8KKyAgICB7CisgICAgICAgIC8qIEluIEFDSyBmb3IgU2V0IGFkZHJlc3MgKi8KKyAgICAgICAgaWYoKGdfVVNCRF9hdThTZXR1cFBhY2tldFswXSA9PSBSRVFfU1RBTkRBUkQpICYmIChnX1VTQkRfYXU4U2V0dXBQYWNrZXRbMV0gPT0gU0VUX0FERFJFU1MpKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJBZGRyID0gVVNCRF9HRVRfQUREUigpOworICAgICAgICAgICAgaWYoKHUzMkFkZHIgIT0gc19VU0JEX3UzMlVzYkFkZHIpICYmICh1MzJBZGRyID09IDBVTCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfQUREUihzX1VTQkRfdTMyVXNiQWRkcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBGb3IgdGhlIGNhc2Ugb2YgZGF0YSBzaXplIGlzIGludGVncmFsIHRpbWVzIG1heGltdW0gcGFja2V0IHNpemUgKi8KKyAgICAgICAgaWYoc19VU0JEX3U4Q3RybEluWmVyb0ZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIFVTQkRfU0VUX1BBWUxPQURfTEVOKEVQMCwgMFVMKTsKKyAgICAgICAgICAgIHNfVVNCRF91OEN0cmxJblplcm9GbGFnID0gKHVpbnQ4X3QpMFVMOworICAgICAgICB9CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBQcmVwYXJlIHRoZSBmaXJzdCBDb250cm9sIE9VVCBwaXBlCisgICoKKyAgKiBAcGFyYW1baW5dICBwdThCdWYgIFRoZSBwb2ludGVyIG9mIGRhdGEgcmVjZWl2ZWQgZnJvbSBVU0IgaG9zdC4KKyAgKiBAcGFyYW1baW5dICB1MzJTaXplIFRoZSBPVVQgdHJhbnNmZXIgc2l6ZS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwcmVwYXJlIHRoZSBmaXJzdCBDb250cm9sIE9VVCB0cmFuc2Zlci4KKyAgKgorICAqLwordm9pZCBVU0JEX1ByZXBhcmVDdHJsT3V0KHVpbnQ4X3QgKnB1OEJ1ZiwgdWludDMyX3QgdTMyU2l6ZSkKK3sKKyAgICBzX1VTQkRfcHU4Q3RybE91dFBvaW50ZXIgPSBwdThCdWY7CisgICAgc19VU0JEX3UzMkN0cmxPdXRTaXplID0gMFVMOworICAgIHNfVVNCRF91MzJDdHJsT3V0U2l6ZUxpbWl0ID0gdTMyU2l6ZTsKKyAgICBVU0JEX1NFVF9QQVlMT0FEX0xFTihFUDEsIHNfVVNCRF91MzJDdHJsTWF4UGt0U2l6ZSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICBSZXBlYXQgQ29udHJvbCBPVVQgcGlwZQorICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHN1Y2Nlc3NpdmUgQ29udHJvbCBPVVQgdHJhbnNmZXIuCisgICoKKyAgKi8KK3ZvaWQgVVNCRF9DdHJsT3V0KHZvaWQpCit7CisgICAgdWludDMyX3QgdTMyU2l6ZTsKKyAgICB1aW50MzJfdCB1MzJBZGRyOworICAgIFVTQkRfVCAqcFVTQkQ7CisKKyAgICBpZigoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpCisgICAgeworICAgICAgICBwVVNCRCA9IFVTQkRfTlM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBVU0JEID0gVVNCRDsKKyAgICB9CisKKyAgICBpZihzX1VTQkRfdTMyQ3RybE91dFRvZ2dsZSAhPSAocFVTQkQtPkVQU1RTMCAmIFVTQkRfRVBTVFMwX0VQU1RTMV9Nc2spKQorICAgIHsKKyAgICAgICAgc19VU0JEX3UzMkN0cmxPdXRUb2dnbGUgPSBwVVNCRC0+RVBTVFMwICYgVVNCRF9FUFNUUzBfRVBTVFMxX01zazsKKyAgICAgICAgaWYoc19VU0JEX3UzMkN0cmxPdXRTaXplIDwgc19VU0JEX3UzMkN0cmxPdXRTaXplTGltaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlNpemUgPSBVU0JEX0dFVF9QQVlMT0FEX0xFTihFUDEpOworICAgICAgICAgICAgdTMyQWRkciA9IFVTQkRfQlVGX0JBU0UgKyBVU0JEX0dFVF9FUF9CVUZfQUREUihFUDEpOworICAgICAgICAgICAgVVNCRF9NZW1Db3B5KCh1aW50OF90ICopc19VU0JEX3B1OEN0cmxPdXRQb2ludGVyLCAodWludDhfdCAqKXUzMkFkZHIsIHUzMlNpemUpOworICAgICAgICAgICAgc19VU0JEX3B1OEN0cmxPdXRQb2ludGVyICs9IHUzMlNpemU7CisgICAgICAgICAgICBzX1VTQkRfdTMyQ3RybE91dFNpemUgKz0gdTMyU2l6ZTsKKworICAgICAgICAgICAgaWYoc19VU0JEX3UzMkN0cmxPdXRTaXplIDwgc19VU0JEX3UzMkN0cmxPdXRTaXplTGltaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfUEFZTE9BRF9MRU4oRVAxLCBzX1VTQkRfdTMyQ3RybE1heFBrdFNpemUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVTQkRfU0VUX1BBWUxPQURfTEVOKEVQMSwgc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplKTsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICBSZXNldCBzb2Z0d2FyZSBmbGFncworICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgVGhpcyBmdW5jdGlvbiByZXNldHMgYWxsIHZhcmlhYmxlcyBmb3IgcHJvdG9jb2wgYW5kIHJlc2V0cyBVU0IgZGV2aWNlIGFkZHJlc3MgdG8gMC4KKyAgKgorICAqLwordm9pZCBVU0JEX1N3UmVzZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCBpOworICAgIFVTQkRfVCAqcFVTQkQ7CisKKyAgICBpZigoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpCisgICAgeworICAgICAgICBwVVNCRCA9IFVTQkRfTlM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBVU0JEID0gVVNCRDsKKyAgICB9CisKKyAgICAvKiBSZXNldCBhbGwgdmFyaWFibGVzIGZvciBwcm90b2NvbCAqLworICAgIHNfVVNCRF9wdThDdHJsSW5Qb2ludGVyID0gMDsKKyAgICBzX1VTQkRfdTMyQ3RybEluU2l6ZSA9IDBVTDsKKyAgICBzX1VTQkRfcHU4Q3RybE91dFBvaW50ZXIgPSAwOworICAgIHNfVVNCRF91MzJDdHJsT3V0U2l6ZSA9IDBVTDsKKyAgICBzX1VTQkRfdTMyQ3RybE91dFNpemVMaW1pdCA9IDBVTDsKKyAgICBnX1VTQkRfdTMyRXBTdGFsbExvY2sgPSAwVUw7CisgICAgbWVtc2V0KGdfVVNCRF9hdThTZXR1cFBhY2tldCwgMCwgOFVMKTsKKworICAgIC8qIFJlc2V0IFBJRCBEQVRBMCAqLworICAgIGZvcihpID0gMFVMOyBpIDwgVVNCRF9NQVhfRVA7IGkrKykKKyAgICB7CisgICAgICAgIHBVU0JELT5FUFtpXS5DRkcgJj0gflVTQkRfQ0ZHX0RTUVNZTkNfTXNrOworICAgIH0KKworICAgIC8qIFJlc2V0IFVTQiBkZXZpY2UgYWRkcmVzcyAqLworICAgIFVTQkRfU0VUX0FERFIoMFVMKTsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgVVNCRCBTZXQgVmVuZG9yIFJlcXVlc3QKKyAqCisgKiBAcGFyYW1baW5dICAgcGZuVmVuZG9yUmVxICAgIFZlbmRvciBSZXF1ZXN0IENhbGxiYWNrIEZ1bmN0aW9uCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBVU0JEIHZlbmRvciByZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uCisgKi8KK3ZvaWQgVVNCRF9TZXRWZW5kb3JSZXF1ZXN0KFZFTkRPUl9SRVEgcGZuVmVuZG9yUmVxKQoreworICAgIGdfVVNCRF9wZm5WZW5kb3JSZXF1ZXN0ID0gcGZuVmVuZG9yUmVxOworfQorCisvKioKKyAqIEBicmllZiAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggY2FsbGVkIHdoZW4gZ2V0IFNFVCBDT05GSUdVUkFUSU9OIHJlcXVlc3QKKyAqCisgKiBAcGFyYW1baW5dICAgcGZuU2V0Q29uZmlnQ2FsbGJhY2sgICAgQ2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciBmb3IgU0VUIENPTkZJR1VSQVRJT04gcmVxdWVzdAorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGF0IFNFVCBDT05GSUdVUkFUSU9OIHJlcXVlc3QuCisgKi8KK3ZvaWQgVVNCRF9TZXRDb25maWdDYWxsYmFjayhTRVRfQ09ORklHX0NCIHBmblNldENvbmZpZ0NhbGxiYWNrKQoreworICAgIGdfVVNCRF9wZm5TZXRDb25maWdDYWxsYmFjayA9IHBmblNldENvbmZpZ0NhbGxiYWNrOworfQorCisKKy8qKgorICogQGJyaWVmICAgICAgIEVQIHN0YWxsIGxvY2sgZnVuY3Rpb24gdG8gYXZvaWQgc3RhbGwgY2xlYXIgYnkgVVNCIFNFVCBGRUFUVVJFIHJlcXVlc3QuCisgKgorICogQHBhcmFtW2luXSAgIHUzMkVwQml0bWFwICAgIFVzZSBiaXRtYXAgdG8gc2VsZWN0IHdoaWNoIGVuZHBvaW50cyB3aWxsIGJlIGxvY2tlZAorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsb2NrIHJlbGF0aXZlIGVuZHBvaW50IHRvIGF2b2lkIHN0YWxsIGNsZWFyIGJ5IFNFVCBGRUFUVVJFIHJlcXVlc3QuCisgKiAgICAgICAgICAgICAgSWYgZXAgc3RhbGwgbG9ja2VkLCB1c2VyIG5lZWRzIHRvIHJlc2V0IFVTQiBkZXZpY2Ugb3IgcmUtY29uZmlndXJlIGRldmljZSB0byBjbGVhciBpdC4KKyAqLwordm9pZCBVU0JEX0xvY2tFcFN0YWxsKHVpbnQzMl90IHUzMkVwQml0bWFwKQoreworICAgIGdfVVNCRF91MzJFcFN0YWxsTG9jayA9IHUzMkVwQml0bWFwOworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQkRfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNCRF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdXNjaV9pMmMuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3VzY2lfaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU1ZmYzZAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3VzY2lfaTJjLmMKQEAgLTAsMCArMSwxNjU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB1c2NpX2kyYy5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqICRSZXZpc2lvbjogMSAkCisgKiAkRGF0ZTogMTYvMDcvMDcgNzo1MHAgJAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBVU0NJIEkyQyhVSTJDKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBVU0NJX0kyQ19Ecml2ZXIgVVNDSV9JMkMgRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBVU0NJX0kyQ19FWFBPUlRFRF9GVU5DVElPTlMgVVNDSV9JMkMgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBmdW5jdGlvbiBtYWtlcyBVU0NJX0kyQyBtb2R1bGUgYmUgcmVhZHkgYW5kIHNldCB0aGUgd2FudGVkIGJ1cyBjbG9jaworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJCdXNDbG9jayAgICAgVGhlIHRhcmdldCBidXMgc3BlZWQgb2YgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgQWN0dWFsIFVTQ0lfSTJDIGJ1cyBjbG9jayBmcmVxdWVuY3kuCisgKgorICogICAgQGRldGFpbHMgICAgICBFbmFibGUgVVNDSV9JMkMgbW9kdWxlIGFuZCBjb25maWd1cmUgVVNDSV9JMkMgbW9kdWxlKGJ1cyBjbG9jaywgZGF0YSBmb3JtYXQpLgorICovCit1aW50MzJfdCBVSTJDX09wZW4oVUkyQ19UICp1aTJjLCB1aW50MzJfdCB1MzJCdXNDbG9jaykKK3sKKyAgICB1aW50MzJfdCB1MzJDbGtEaXY7CisgICAgdWludDMyX3QgdTMyUGNsazsKKworICAgIGlmKCh1aTJjID09IFVJMkMxKSB8fCAodWkyYyA9PSBVSTJDMV9OUykpCisgICAgeworICAgICAgICB1MzJQY2xrID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJQY2xrID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgIH0KKworICAgIHUzMkNsa0RpdiA9ICh1aW50MzJfdCkoKCgoKCh1MzJQY2xrIC8gMnUpICogMTB1KSAvICh1MzJCdXNDbG9jaykpICsgNXUpIC8gMTB1KSAtIDF1KTsgLyogQ29tcHV0ZSBwcm9wZXIgZGl2aWRlciBmb3IgVVNDSV9JMkMgY2xvY2sgKi8KKworICAgIC8qIEVuYWJsZSBVU0NJX0kyQyBwcm90b2NvbCAqLworICAgIHVpMmMtPkNUTCAmPSB+VUkyQ19DVExfRlVOTU9ERV9Nc2s7CisgICAgdWkyYy0+Q1RMID0gNHUgPDwgVUkyQ19DVExfRlVOTU9ERV9Qb3M7CisKKyAgICAvKiBEYXRhIGZvcm1hdCBjb25maWd1cmF0aW9uICovCisgICAgLyogOCBiaXQgZGF0YSBsZW5ndGggKi8KKyAgICB1aTJjLT5MSU5FQ1RMICY9IH5VSTJDX0xJTkVDVExfRFdJRFRIX01zazsKKyAgICB1aTJjLT5MSU5FQ1RMIHw9IDh1IDw8IFVJMkNfTElORUNUTF9EV0lEVEhfUG9zOworCisgICAgLyogTVNCIGRhdGEgZm9ybWF0ICovCisgICAgdWkyYy0+TElORUNUTCAmPSB+VUkyQ19MSU5FQ1RMX0xTQl9Nc2s7CisKKyAgICAvKiBTZXQgVVNDSV9JMkMgYnVzIGNsb2NrICovCisgICAgdWkyYy0+QlJHRU4gJj0gflVJMkNfQlJHRU5fQ0xLRElWX01zazsKKyAgICB1aTJjLT5CUkdFTiB8PSAodTMyQ2xrRGl2IDw8IFVJMkNfQlJHRU5fQ0xLRElWX1Bvcyk7CisgICAgdWkyYy0+UFJPVENUTCB8PSAgVUkyQ19QUk9UQ1RMX1BST1RFTl9Nc2s7CisKKyAgICByZXR1cm4gKHUzMlBjbGsgLyAoKHUzMkNsa0RpdiArIDF1KSA8PCAxdSkpOworfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBmdW5jdGlvbiBjbG9zZXMgdGhlIFVTQ0lfSTJDIG1vZHVsZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgQ2xvc2UgVVNDSV9JMkMgcHJvdG9jb2wgZnVuY3Rpb24uCisgKi8KK3ZvaWQgVUkyQ19DbG9zZShVSTJDX1QgKnVpMmMpCit7CisgICAgLyogRGlzYWJsZSBVU0NJX0kyQyBmdW5jdGlvbiAqLworICAgIHVpMmMtPkNUTCAmPSB+VUkyQ19DVExfRlVOTU9ERV9Nc2s7Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgdGltZS1vdXQgZmxhZworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgQ2xlYXIgdGltZS1vdXQgZmxhZyB3aGVuIHRpbWUtb3V0IGZsYWcgaXMgc2V0LgorICovCit2b2lkIFVJMkNfQ2xlYXJUaW1lb3V0RmxhZyhVSTJDX1QgKnVpMmMpCit7CisgICAgdWkyYy0+UFJPVFNUUyA9IFVJMkNfUFJPVFNUU19UT0lGX01zazsKK30KKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY29udHJvbCBiaXQgb2YgdGhlIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdThTdGFydCAgICAgICAgIFNldCBTVEFSVCBiaXQgdG8gVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1OFN0b3AgU2V0ICAgICAgU1RPUCBiaXQgdG8gVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1OFB0cmcgU2V0ICAgICAgUFRSRyBiaXQgdG8gVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1OEFjayBTZXQgICAgICAgQUNLIGJpdCB0byBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gc2V0IFVTQ0lfSTJDIGNvbnRyb2wgYml0IG9mIFVTQ0lfSTJDIGJ1cyBwcm90b2NvbC4KKyAqLwordm9pZCBVSTJDX1RyaWdnZXIoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U3RhcnQsIHVpbnQ4X3QgdThTdG9wLCB1aW50OF90IHU4UHRyZywgdWludDhfdCB1OEFjaykKK3sKKyAgICB1aW50MzJfdCB1MzJSZWcgPSAwdTsKKyAgICB1aW50MzJfdCB1MzJWYWwgPSB1aTJjLT5QUk9UQ1RMICYgfihVSTJDX1BST1RDVExfU1RBX01zayB8IFVJMkNfUFJPVENUTF9TVE9fTXNrIHwgVUkyQ19QUk9UQ1RMX0FBX01zayk7CisKKyAgICBpZih1OFN0YXJ0KQorICAgIHsKKyAgICAgICAgdTMyUmVnIHw9IFVJMkNfUFJPVENUTF9TVEFfTXNrOworICAgIH0KKyAgICBpZih1OFN0b3ApCisgICAgeworICAgICAgICB1MzJSZWcgfD0gVUkyQ19QUk9UQ1RMX1NUT19Nc2s7CisgICAgfQorICAgIGlmKHU4UHRyZykKKyAgICB7CisgICAgICAgIHUzMlJlZyB8PSBVSTJDX1BST1RDVExfUFRSR19Nc2s7CisgICAgfQorICAgIGlmKHU4QWNrKQorICAgIHsKKyAgICAgICAgdTMyUmVnIHw9IFVJMkNfUFJPVENUTF9BQV9Nc2s7CisgICAgfQorICAgIHVpMmMtPlBST1RDVEwgPSB1MzJWYWwgfCB1MzJSZWc7Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBpbnRlcnJ1cHQgb2YgVVNDSV9JMkMgbW9kdWxlCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMk1hc2sgICAgICAgICBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYW4gaW50ZXJydXB0IGVuYWJsZSBiaXQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdHMgd2lsbCBiZSBkaXNhYmxlZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19UT19JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfU1RBUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfU1RPUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfTkFDS19JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfQVJCTE9fSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX0VSUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfQUNLX0lOVF9NQVNLCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIFVTQ0lfSTJDIGJ1cyBpbnRlcnJ1cHQgZXZlbnRzLgorICovCit2b2lkIFVJMkNfRGlzYWJsZUludChVSTJDX1QgKnVpMmMsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgLyogRGlzYWJsZSB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVUkyQ19UT19JTlRfTUFTSykgPT0gVUkyQ19UT19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RJRU4gJj0gflVJMkNfUFJPVElFTl9UT0lFTl9Nc2s7CisgICAgfQorICAgIC8qIERpc2FibGUgc3RhcnQgY29uZGl0aW9uIHJlY2VpdmVkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX1NUQVJfSU5UX01BU0spID09IFVJMkNfU1RBUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RJRU4gJj0gflVJMkNfUFJPVElFTl9TVEFSSUVOX01zazsKKyAgICB9CisgICAgLyogRGlzYWJsZSBzdG9wIGNvbmRpdGlvbiByZWNlaXZlZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVUkyQ19TVE9SX0lOVF9NQVNLKSA9PSBVSTJDX1NUT1JfSU5UX01BU0spCisgICAgeworICAgICAgICB1aTJjLT5QUk9USUVOICY9IH5VSTJDX1BST1RJRU5fU1RPUklFTl9Nc2s7CisgICAgfQorICAgIC8qIERpc2FibGUgbm9uLWFja25vd2xlZGdlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX05BQ0tfSU5UX01BU0spID09IFVJMkNfTkFDS19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RJRU4gJj0gflVJMkNfUFJPVElFTl9OQUNLSUVOX01zazsKKyAgICB9CisgICAgLyogRGlzYWJsZSBhcmJpdHJhdGlvbiBsb3N0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX0FSQkxPX0lOVF9NQVNLKSA9PSBVSTJDX0FSQkxPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVElFTiAmPSB+VUkyQ19QUk9USUVOX0FSQkxPSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIGVycm9yIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX0VSUl9JTlRfTUFTSykgPT0gVUkyQ19FUlJfSU5UX01BU0spCisgICAgeworICAgICAgICB1aTJjLT5QUk9USUVOICY9IH5VSTJDX1BST1RJRU5fRVJSSUVOX01zazsKKyAgICB9CisgICAgLyogRGlzYWJsZSBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVUkyQ19BQ0tfSU5UX01BU0spID09IFVJMkNfQUNLX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVElFTiAmPSB+VUkyQ19QUk9USUVOX0FDS0lFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgb2YgVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMk1hc2sgICAgICAgICBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgZW5hYmxlIGJpdC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQuIEl0IGlzIGNvbWJpbmF0aW9uIG9mOgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfVE9fSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1NUQVJfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1NUT1JfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX05BQ0tfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX0FSQkxPX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19FUlJfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX0FDS19JTlRfTUFTSworICogICAgQHJldHVybiBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgVVNDSV9JMkMgYnVzIGludGVycnVwdCBldmVudHMuCisgKi8KK3ZvaWQgVUkyQ19FbmFibGVJbnQoVUkyQ19UICp1aTJjLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIC8qIEVuYWJsZSB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVUkyQ19UT19JTlRfTUFTSykgPT0gVUkyQ19UT19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RJRU4gfD0gVUkyQ19QUk9USUVOX1RPSUVOX01zazsKKyAgICB9CisgICAgLyogRW5hYmxlIHN0YXJ0IGNvbmRpdGlvbiByZWNlaXZlZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVUkyQ19TVEFSX0lOVF9NQVNLKSA9PSBVSTJDX1NUQVJfSU5UX01BU0spCisgICAgeworICAgICAgICB1aTJjLT5QUk9USUVOIHw9IFVJMkNfUFJPVElFTl9TVEFSSUVOX01zazsKKyAgICB9CisgICAgLyogRW5hYmxlIHN0b3AgY29uZGl0aW9uIHJlY2VpdmVkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX1NUT1JfSU5UX01BU0spID09IFVJMkNfU1RPUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RJRU4gfD0gVUkyQ19QUk9USUVOX1NUT1JJRU5fTXNrOworICAgIH0KKyAgICAvKiBFbmFibGUgbm9uLWFja25vd2xlZGdlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX05BQ0tfSU5UX01BU0spID09IFVJMkNfTkFDS19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RJRU4gfD0gVUkyQ19QUk9USUVOX05BQ0tJRU5fTXNrOworICAgIH0KKyAgICAvKiBFbmFibGUgYXJiaXRyYXRpb24gbG9zdCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVUkyQ19BUkJMT19JTlRfTUFTSykgPT0gVUkyQ19BUkJMT19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RJRU4gfD0gVUkyQ19QUk9USUVOX0FSQkxPSUVOX01zazsKKyAgICB9CisgICAgLyogRW5hYmxlIGVycm9yIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX0VSUl9JTlRfTUFTSykgPT0gVUkyQ19FUlJfSU5UX01BU0spCisgICAgeworICAgICAgICB1aTJjLT5QUk9USUVOIHw9IFVJMkNfUFJPVElFTl9FUlJJRU5fTXNrOworICAgIH0KKyAgICAvKiBFbmFibGUgYWNrbm93bGVkZ2UgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfQUNLX0lOVF9NQVNLKSA9PSBVSTJDX0FDS19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RJRU4gfD0gVUkyQ19QUk9USUVOX0FDS0lFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZWFsIGJ1cyBjbG9jayBvZiBVU0NJX0kyQyBtb2R1bGUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIEFjdHVhbCBVU0NJX0kyQyBidXMgY2xvY2sgZnJlcXVlbmN5LgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFjdHVhbCBVU0NJX0kyQyBtb2R1bGUgYnVzIGNsb2NrLgorICovCit1aW50MzJfdCBVSTJDX0dldEJ1c0Nsb2NrRnJlcShVSTJDX1QgKnVpMmMpCit7CisgICAgdWludDMyX3QgdTMyRGl2aWRlcjsKKyAgICB1aW50MzJfdCB1MzJQY2xrOworCisgICAgaWYoKHVpMmMgPT0gVUkyQzEpIHx8ICh1aTJjID09IFVJMkMxX05TKSkKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgfQorICAgIHUzMkRpdmlkZXIgPSAodWkyYy0+QlJHRU4gJiBVSTJDX0JSR0VOX0NMS0RJVl9Nc2spID4+IFVJMkNfQlJHRU5fQ0xLRElWX1BvczsKKworICAgIHJldHVybiAodTMyUGNsayAvICgodTMyRGl2aWRlciArIDF1KSA8PCAxdSkpOworfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBmdW5jdGlvbiBzZXRzIGJ1cyBjbG9jayBmcmVxdWVuY3kgb2YgVVNDSV9JMkMgbW9kdWxlCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkJ1c0Nsb2NrICAgICBUaGUgdGFyZ2V0IGJ1cyBzcGVlZCBvZiBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiBBY3R1YWwgVVNDSV9JMkMgYnVzIGNsb2NrIGZyZXF1ZW5jeS4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFVzZSB0aGlzIGZ1bmN0aW9uIHNldCBVU0NJX0kyQyBidXMgY2xvY2sgZnJlcXVlbmN5IGFuZCByZXR1cm4gYWN0dWFsIGJ1cyBjbG9jay4KKyAqLwordWludDMyX3QgVUkyQ19TZXRCdXNDbG9ja0ZyZXEoVUkyQ19UICp1aTJjLCB1aW50MzJfdCB1MzJCdXNDbG9jaykKK3sKKyAgICB1aW50MzJfdCB1MzJDbGtEaXY7CisgICAgdWludDMyX3QgdTMyUGNsazsKKworICAgIGlmKCh1aTJjID09IFVJMkMxKSB8fCAodWkyYyA9PSBVSTJDMV9OUykpCisgICAgeworICAgICAgICB1MzJQY2xrID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJQY2xrID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgIH0KKyAgICB1MzJDbGtEaXYgPSAodWludDMyX3QpKCgoKCgodTMyUGNsayAvIDJ1KSAqIDEwdSkgLyAodTMyQnVzQ2xvY2spKSArIDV1KSAvIDEwdSkgLSAxdSk7IC8qIENvbXB1dGUgcHJvcGVyIGRpdmlkZXIgZm9yIFVTQ0lfSTJDIGNsb2NrICovCisKKyAgICAvKiBTZXQgVVNDSV9JMkMgYnVzIGNsb2NrICovCisgICAgdWkyYy0+QlJHRU4gJj0gflVJMkNfQlJHRU5fQ0xLRElWX01zazsKKyAgICB1aTJjLT5CUkdFTiB8PSAodTMyQ2xrRGl2IDw8IFVJMkNfQlJHRU5fQ0xLRElWX1Bvcyk7CisKKyAgICByZXR1cm4gKHUzMlBjbGsgLyAoKHUzMkNsa0RpdiArIDF1KSA8PCAxdSkpOworfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBpbnRlcnJ1cHQgZmxhZyBvZiBVU0NJX0kyQyBtb2R1bGUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyTWFzayAgICAgICAgIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgc291cmNlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHNvdXJjZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0IGZsYWdzIHdpbGwgYmUgcmVhZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19UT19JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfU1RBUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfU1RPUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfTkFDS19JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfQVJCTE9fSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX0VSUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfQUNLX0lOVF9NQVNLCisgKgorICogICAgQHJldHVybiAgICAgICBJbnRlcnJ1cHQgZmxhZ3Mgb2Ygc2VsZWN0ZWQgc291cmNlcy4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCBVU0NJX0kyQyBpbnRlcnJ1cHQgZmxhZyB3aGVuIG1vZHVsZSBvY2N1cnMgaW50ZXJydXB0IGV2ZW50LgorICovCit1aW50MzJfdCBVSTJDX0dldEludEZsYWcoVUkyQ19UICp1aTJjLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIHVpbnQzMl90IHUzMkludEZsYWcgPSAwVTsKKyAgICB1aW50MzJfdCB1MzJUbXBWYWx1ZTsKKworICAgIHUzMlRtcFZhbHVlID0gdWkyYy0+UFJPVFNUUyAmIFVJMkNfUFJPVFNUU19UT0lGX01zazsKKyAgICAvKiBDaGVjayBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVUkyQ19UT19JTlRfTUFTSykgJiYgKHUzMlRtcFZhbHVlKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVUkyQ19UT19JTlRfTUFTSzsKKyAgICB9CisKKyAgICB1MzJUbXBWYWx1ZSA9IHVpMmMtPlBST1RTVFMgJiBVSTJDX1BST1RTVFNfU1RBUklGX01zazsKKyAgICAvKiBDaGVjayBTdGFydCBDb25kaXRpb24gUmVjZWl2ZWQgSW50ZXJydXB0IEZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfU1RBUl9JTlRfTUFTSykgJiYgKHUzMlRtcFZhbHVlKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVUkyQ19TVEFSX0lOVF9NQVNLOworICAgIH0KKworICAgIHUzMlRtcFZhbHVlID0gdWkyYy0+UFJPVFNUUyAmIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrOworICAgIC8qIENoZWNrIFN0b3AgQ29uZGl0aW9uIFJlY2VpdmVkIEludGVycnVwdCBGbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX1NUT1JfSU5UX01BU0spICYmICh1MzJUbXBWYWx1ZSkpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVJMkNfU1RPUl9JTlRfTUFTSzsKKyAgICB9CisKKyAgICB1MzJUbXBWYWx1ZSA9IHVpMmMtPlBST1RTVFMgJiBVSTJDX1BST1RTVFNfTkFDS0lGX01zazsKKyAgICAvKiBDaGVjayBOb24tQWNrbm93bGVkZ2UgSW50ZXJydXB0IEZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfTkFDS19JTlRfTUFTSykgJiYgKHUzMlRtcFZhbHVlKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVUkyQ19OQUNLX0lOVF9NQVNLOworICAgIH0KKworICAgIHUzMlRtcFZhbHVlID0gdWkyYy0+UFJPVFNUUyAmIFVJMkNfUFJPVFNUU19BUkJMT0lGX01zazsKKyAgICAvKiBDaGVjayBBcmJpdHJhdGlvbiBMb3N0IEludGVycnVwdCBGbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX0FSQkxPX0lOVF9NQVNLKSAmJiAodTMyVG1wVmFsdWUpKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVSTJDX0FSQkxPX0lOVF9NQVNLOworICAgIH0KKworICAgIHUzMlRtcFZhbHVlID0gdWkyYy0+UFJPVFNUUyAmIFVJMkNfUFJPVFNUU19FUlJJRl9Nc2s7CisgICAgLyogQ2hlY2sgRXJyb3IgSW50ZXJydXB0IEZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfRVJSX0lOVF9NQVNLKSAmJiAodTMyVG1wVmFsdWUpKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVSTJDX0VSUl9JTlRfTUFTSzsKKyAgICB9CisKKyAgICB1MzJUbXBWYWx1ZSA9IHVpMmMtPlBST1RTVFMgJiBVSTJDX1BST1RTVFNfQUNLSUZfTXNrOworICAgIC8qIENoZWNrIEFja25vd2xlZGdlIEludGVycnVwdCBGbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX0FDS19JTlRfTUFTSykgJiYgKHUzMlRtcFZhbHVlKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVUkyQ19BQ0tfSU5UX01BU0s7CisgICAgfQorCisgICAgcmV0dXJuIHUzMkludEZsYWc7Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgaW50ZXJydXB0IGZsYWcgb2YgVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMk1hc2sgICAgICAgICBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IHNvdXJjZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdCBmbGFncyB3aWxsIGJlIGNsZWFyZWQuIEl0IGlzIGNvbWJpbmF0aW9uIG9mOgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfVE9fSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1NUQVJfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1NUT1JfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX05BQ0tfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX0FSQkxPX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19FUlJfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX0FDS19JTlRfTUFTSworICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVXNlIHRoaXMgZnVuY3Rpb24gdG8gY2xlYXIgVVNDSV9JMkMgaW50ZXJydXB0IGZsYWcgd2hlbiBtb2R1bGUgb2NjdXJzIGludGVycnVwdCBldmVudCBhbmQgc2V0IGZsYWcuCisgKi8KK3ZvaWQgVUkyQ19DbGVhckludEZsYWcoVUkyQ19UICp1aTJjLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIC8qIENsZWFyIFRpbWUtb3V0IEludGVycnVwdCBGbGFnICovCisgICAgaWYodTMyTWFzayAmIFVJMkNfVE9fSU5UX01BU0spCisgICAgeworICAgICAgICB1aTJjLT5QUk9UU1RTID0gVUkyQ19QUk9UU1RTX1RPSUZfTXNrOworICAgIH0KKyAgICAvKiBDbGVhciBTdGFydCBDb25kaXRpb24gUmVjZWl2ZWQgSW50ZXJydXB0IEZsYWcgKi8KKyAgICBpZih1MzJNYXNrICYgVUkyQ19TVEFSX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVFNUUyA9IFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrOworICAgIH0KKyAgICAvKiBDbGVhciBTdG9wIENvbmRpdGlvbiBSZWNlaXZlZCBJbnRlcnJ1cHQgRmxhZyAqLworICAgIGlmKHUzMk1hc2sgJiBVSTJDX1NUT1JfSU5UX01BU0spCisgICAgeworICAgICAgICB1aTJjLT5QUk9UU1RTID0gVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2s7CisgICAgfQorICAgIC8qIENsZWFyIE5vbi1BY2tub3dsZWRnZSBJbnRlcnJ1cHQgRmxhZyAqLworICAgIGlmKHUzMk1hc2sgJiBVSTJDX05BQ0tfSU5UX01BU0spCisgICAgeworICAgICAgICB1aTJjLT5QUk9UU1RTID0gVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2s7CisgICAgfQorICAgIC8qIENsZWFyIEFyYml0cmF0aW9uIExvc3QgSW50ZXJydXB0IEZsYWcgKi8KKyAgICBpZih1MzJNYXNrICYgVUkyQ19BUkJMT19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RTVFMgPSBVSTJDX1BST1RTVFNfQVJCTE9JRl9Nc2s7CisgICAgfQorICAgIC8qIENsZWFyIEVycm9yIEludGVycnVwdCBGbGFnICovCisgICAgaWYodTMyTWFzayAmIFVJMkNfRVJSX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVFNUUyA9IFVJMkNfUFJPVFNUU19FUlJJRl9Nc2s7CisgICAgfQorICAgIC8qIENsZWFyIEFja25vd2xlZGdlIEludGVycnVwdCBGbGFnICovCisgICAgaWYodTMyTWFzayAmIFVJMkNfQUNLX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVFNUUyA9IFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2s7CisgICAgfQorfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBkYXRhIHN0b3JlZCBpbiBkYXRhIHJlZ2lzdGVyIG9mIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIFVTQ0lfSTJDIGRhdGEuCisgKgorICogICAgQGRldGFpbHMgICAgICBUbyByZWFkIGEgYnl0ZSBkYXRhIGZyb20gVVNDSV9JMkMgbW9kdWxlIHJlY2VpdmUgZGF0YSByZWdpc3Rlci4KKyAqLwordWludDMyX3QgVUkyQ19HZXREYXRhKFVJMkNfVCAqdWkyYykKK3sKKyAgICByZXR1cm4gKHVpMmMtPlJYREFUKTsKK30KKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgZnVuY3Rpb24gd3JpdGVzIGEgYnl0ZSBkYXRhIHRvIGRhdGEgcmVnaXN0ZXIgb2YgVVNDSV9JMkMgbW9kdWxlCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHU4RGF0YSAgICAgICAgICBUaGUgZGF0YSB3aGljaCB3aWxsIGJlIHdyaXR0ZW4gdG8gZGF0YSByZWdpc3RlciBvZiBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUbyB3cml0ZSBhIGJ5dGUgZGF0YSB0byB0cmFuc21pdCBkYXRhIHJlZ2lzdGVyIHRvIHRyYW5zbWl0IGRhdGEuCisgKi8KK3ZvaWQgVUkyQ19TZXREYXRhKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OERhdGEpCit7CisgICAgdWkyYy0+VFhEQVQgPSB1OERhdGE7Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDb25maWd1cmUgc2xhdmUgYWRkcmVzcyBhbmQgZW5hYmxlIEdDIG1vZGUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdThTbGF2ZU5vICAgICAgIFNsYXZlIGNoYW5uZWwgbnVtYmVyIFswLzFdCisgKiAgICBAcGFyYW1baW5dICAgIHUxNlNsYXZlQWRkciAgICBUaGUgc2xhdmUgYWRkcmVzcy4KKyAqICAgIEBwYXJhbVtpbl0gICAgdThHQ01vZGUgICAgICAgIEdDIG1vZGUgZW5hYmxlIG9yIG5vdC4gVmFsaWQgdmFsdWVzIGFyZToKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX0dDTU9ERV9FTkFCTEUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX0dDTU9ERV9ESVNBQkxFCisgKgorICogICAgQHJldHVybiBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUbyBjb25maWd1cmUgVVNDSV9JMkMgbW9kdWxlIHNsYXZlIGFkZHJlc3MgYW5kIEdDIG1vZGUuCisgKi8KK3ZvaWQgVUkyQ19TZXRTbGF2ZUFkZHIoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVObywgdWludDE2X3QgdTE2U2xhdmVBZGRyLCB1aW50OF90IHU4R0NNb2RlKQoreworICAgIGlmKHU4U2xhdmVObykKKyAgICB7CisgICAgICAgIHVpMmMtPkRFVkFERFIxICA9IHUxNlNsYXZlQWRkcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWkyYy0+REVWQUREUjAgID0gdTE2U2xhdmVBZGRyOworICAgIH0KKyAgICB1aTJjLT5QUk9UQ1RMICA9ICh1aTJjLT5QUk9UQ1RMICYgflVJMkNfUFJPVENUTF9HQ0ZVTkNfTXNrKSB8IHU4R0NNb2RlOworfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgQ29uZmlndXJlIHRoZSBtYXNrIGJpdCBvZiBzbGF2ZSBhZGRyZXNzLgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdThTbGF2ZU5vICAgICAgICBTbGF2ZSBjaGFubmxlIG51bWJlciBbMC8xXQorICogICAgQHBhcmFtW2luXSAgICB1MTZTbGF2ZUFkZHJNYXNrIFRoZSBzbGF2ZSBhZGRyZXNzIG1hc2suCisgKgorICogICAgQHJldHVybiBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUbyBjb25maWd1cmUgVVNDSV9JMkMgbW9kdWxlIHNsYXZlICBhZGRyZXNzIG1hc2sgYml0LgorICogICAgQG5vdGUgICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBhZGRyZXNzIGJpdCBpcyAiRG9uJ3QgQ2FyZSIuCisgKi8KK3ZvaWQgVUkyQ19TZXRTbGF2ZUFkZHJNYXNrKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlTm8sIHVpbnQxNl90IHUxNlNsYXZlQWRkck1hc2spCit7CisgICAgaWYodThTbGF2ZU5vKQorICAgIHsKKyAgICAgICAgdWkyYy0+QUREUk1TSzEgID0gdTE2U2xhdmVBZGRyTWFzazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWkyYy0+QUREUk1TSzAgID0gdTE2U2xhdmVBZGRyTWFzazsKKyAgICB9Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGltZS1vdXQgZnVuY3Rpb24gYW5kIGNvbmZpZ3VyZXMgdGltZW91dCBjb3VudGVyCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMlRpbWVvdXRDbnQgICBUaW1lb3V0IGNvdW50ZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjB4M0ZGLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVG8gZW5hYmxlIFVTQ0lfSTJDIGJ1cyB0aW1lLW91dCBmdW5jdGlvbiBhbmQgc2V0IHRpbWUtb3V0IGNvdW50ZXIuCisgKi8KK3ZvaWQgVUkyQ19FbmFibGVUaW1lb3V0KFVJMkNfVCAqdWkyYywgdWludDMyX3QgdTMyVGltZW91dENudCkKK3sKKyAgICB1aTJjLT5QUk9UQ1RMID0gKHVpMmMtPlBST1RDVEwgJiB+VUkyQ19QUk9UQ1RMX1RPQ05UX01zaykgfCAodTMyVGltZW91dENudCA8PCBVSTJDX1BST1RDVExfVE9DTlRfUG9zKTsKKyAgICB1aTJjLT5CUkdFTiA9ICh1aTJjLT5CUkdFTiAmIH5VSTJDX0JSR0VOX1RNQ05UU1JDX01zaykgfCBVSTJDX0JSR0VOX1RNQ05URU5fTXNrOworfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aW1lLW91dCBmdW5jdGlvbgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVG8gZGlzYWJsZSBVU0NJX0kyQyBidXMgdGltZS1vdXQgZnVuY3Rpb24uCisgKi8KK3ZvaWQgVUkyQ19EaXNhYmxlVGltZW91dChVSTJDX1QgKnVpMmMpCit7CisgICAgdWkyYy0+UFJPVENUTCAmPSB+VUkyQ19QUk9UQ1RMX1RPQ05UX01zazsKKyAgICB1aTJjLT5CUkdFTiAmPSB+VUkyQ19CUkdFTl9UTUNOVEVOX01zazsKK30KKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgd2FrZXVwIGZ1bmN0aW9uIG9mIFVTQ0lfSTJDIG1vZHVsZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1OFdha2V1cE1vZGUgICAgVGhlIHdha2UtdXAgbW9kZSBzZWxlY3Rpb24uIFZhbGlkIHZhbHVlcyBhcmU6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19EQVRBX1RPR0dMRV9XSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfQUREUl9NQVRDSF9XSworICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVG8gZW5hYmxlIFVTQ0lfSTJDIG1vZHVsZSB3YWtlLXVwIGZ1bmN0aW9uLgorICovCit2b2lkIFVJMkNfRW5hYmxlV2FrZXVwKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFdha2V1cE1vZGUpCit7CisgICAgdWkyYy0+V0tDVEwgPSAodWkyYy0+V0tDVEwgJiB+VUkyQ19XS0NUTF9XS0FERFJFTl9Nc2spIHwgKHU4V2FrZXVwTW9kZSB8IFVJMkNfV0tDVExfV0tFTl9Nc2spOworfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgd2FrZXVwIGZ1bmN0aW9uIG9mIFVTQ0lfSTJDIG1vZHVsZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVG8gZGlzYWJsZSBVU0NJX0kyQyBtb2R1bGUgd2FrZS11cCBmdW5jdGlvbi4KKyAqLwordm9pZCBVSTJDX0Rpc2FibGVXYWtldXAoVUkyQ19UICp1aTJjKQoreworICAgIHVpMmMtPldLQ1RMICY9IH5VSTJDX1dLQ1RMX1dLRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSBhIGJ5dGUgdG8gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICp1aTJjICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgZGF0YSAgICAgICAgICAgIFdyaXRlIGEgYnl0ZSBkYXRhIHRvIFNsYXZlCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICAgICAgV3JpdGUgZGF0YSBzdWNjZXNzCisgICogQHJldHZhbCAgICAgMSAgICAgICAgICAgICAgIFdyaXRlIGRhdGEgZmFpbCwgb3IgYnVzIG9jY3VycyBlcnJvciBldmVudHMKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBVU0NJX0kyQyBNYXN0ZXIgd3JpdGUgYSBieXRlIGRhdGEgdG8gU2xhdmUuCisgICoKKyAgKi8KKwordWludDhfdCBVSTJDX1dyaXRlQnl0ZShVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgZGF0YSkKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDFVLCB1OEVyciA9IDBVLCB1OEN0cmwgPSAwVTsKKyAgICBlbnVtIFVJMkNfTUFTVEVSX0VWRU5UIGVFdmVudCA9IE1BU1RFUl9TRU5EX1NUQVJUOworCisgICAgVUkyQ19TVEFSVCh1aTJjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBTVEFSVCAqLworCisgICAgd2hpbGUodThYZmVyaW5nKQorICAgIHsKKyAgICAgICAgd2hpbGUoIShVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpKTsgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdCBVSTJDIG5ldyBzdGF0dXMgb2NjdXIgKi8KKworICAgICAgICBzd2l0Y2goVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RBUlQgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMFUpKTsgICAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9TRU5EX0FERFJFU1M7CisgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX0FDS0lGX01zayk7ICAgICAgLyogQ2xlYXIgQUNLIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfQUREUkVTUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgZGF0YSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgZGF0YSB0byBVSTJDX1RYREFUICovCisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9TRU5EX0RBVEE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2spOyAgICAgLyogQ2xlYXIgTkFDSyBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDFVOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RPUCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMFU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FSQkxPSUZfTXNrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDFVOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgVUkyQ19TRVRfQ09OVFJPTF9SRUcodWkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIFVJMkNfUFJPVENUTCByZWdpc3RlciAqLworICAgIH0KKworICAgIHJldHVybiAodThFcnIgfCB1OFhmZXJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiAoU3VjY2VzcykvKEZhaWwpIHN0YXR1cyAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSBtdWx0aSBieXRlcyB0byBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKnVpMmMgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICAqZGF0YSAgICAgICAgICAgUG9pbnRlciB0byBhcnJheSB0byB3cml0ZSBkYXRhIHRvIFNsYXZlCisgICogQHBhcmFtW2luXSAgdTMyd0xlbiAgICAgICAgIEhvdyBtYW55IGJ5dGVzIG5lZWQgdG8gd3JpdGUgdG8gU2xhdmUKKyAgKgorICAqIEByZXR1cm4gICAgIEEgbGVuZ3RoIG9mIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZC4KKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBVU0NJX0kyQyBNYXN0ZXIgd3JpdGUgbXVsdGkgYnl0ZXMgZGF0YSB0byBTbGF2ZS4KKyAgKgorICAqLworCit1aW50MzJfdCBVSTJDX1dyaXRlTXVsdGlCeXRlcyhVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IHUzMndMZW4pCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxVSwgdThDdHJsID0gMFU7CisgICAgdWludDMyX3QgdTMydHhMZW4gPSAwVTsKKworICAgIFVJMkNfU1RBUlQodWkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKworICAgIHdoaWxlKHU4WGZlcmluZykKKyAgICB7CisgICAgICAgIHdoaWxlKCEoVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgVUkyQyBuZXcgc3RhdHVzIG9jY3VyICovCisKKyAgICAgICAgc3dpdGNoKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RBUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUQVJUIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDBVKSk7ICAgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfQUNLSUZfTXNrKTsgICAgICAvKiBDbGVhciBBQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKHUzMnR4TGVuIDwgdTMyd0xlbikKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCBkYXRhW3UzMnR4TGVuKytdKTsgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBkYXRhIHRvIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfTkFDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrKTsgICAgIC8qIENsZWFyIE5BQ0sgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RPUklGX01zayk7ICAgICAvKiBDbGVhciBTVE9QIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwVTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQVJCTE9JRl9Nc2s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgVUkyQ19TRVRfQ09OVFJPTF9SRUcodWkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIFVJMkNfQ1RMIHJlZ2lzdGVyICovCisgICAgfQorCisgICAgcmV0dXJuIHUzMnR4TGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJ5dGVzIGxlbmd0aCB0aGF0IGhhdmUgYmVlbiB0cmFuc21pdHRlZCAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IGEgYnl0ZSByZWdpc3RlciBhZGRyZXNzIGFuZCB3cml0ZSBhIGJ5dGUgdG8gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICp1aTJjICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgdThEYXRhQWRkciAgICAgIFNwZWNpZnkgYSBhZGRyZXNzICgxIGJ5dGUpIG9mIGRhdGEgd3JpdGUgdG8KKyAgKiBAcGFyYW1baW5dICBkYXRhICAgICAgICAgICAgQSBieXRlIGRhdGEgdG8gd3JpdGUgaXQgdG8gU2xhdmUKKyAgKgorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgICAgICBXcml0ZSBkYXRhIHN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgICAxICAgICAgICAgICAgICAgV3JpdGUgZGF0YSBmYWlsLCBvciBidXMgb2NjdXJzIGVycm9yIGV2ZW50cworICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIFVTQ0lfSTJDIE1hc3RlciBzcGVjaWZ5IGEgYWRkcmVzcyB0aGF0IGRhdGEgd3JpdGUgdG8gaW4gU2xhdmUuCisgICoKKyAgKi8KKwordWludDhfdCBVSTJDX1dyaXRlQnl0ZU9uZVJlZyhVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhQWRkciwgdWludDhfdCBkYXRhKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMVUsIHU4RXJyID0gMFUsIHU4Q3RybCA9IDBVOworICAgIHVpbnQzMl90IHUzMnR4TGVuID0gMFU7CisKKyAgICBVSTJDX1NUQVJUKHVpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisKKyAgICB3aGlsZSh1OFhmZXJpbmcpCisgICAgeworICAgICAgICB3aGlsZSghKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkpOyAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IFVJMkMgbmV3IHN0YXR1cyBvY2N1ciAqLworCisgICAgICAgIHN3aXRjaChVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RBUklGX01zayk7ICAgICAvKiBDbGVhciBTVEFSVCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxVSkgfCAweDAwVSkpOyAgICAvKiBXcml0ZSBTTEErVyB0byBSZWdpc3RlciBVSTJDX1RYREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX0FDS0lGX01zayk7ICAgICAgLyogQ2xlYXIgQUNLIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZih1MzJ0eExlbiA9PSAwVSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgdThEYXRhQWRkcik7ICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgZGF0YSBhZGRyZXNzIHRvIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgdTMydHhMZW4rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZih1MzJ0eExlbiA9PSAxVSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgZGF0YSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgZGF0YSB0byBVSTJDX1RYREFUICovCisgICAgICAgICAgICAgICAgICAgIHUzMnR4TGVuKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2spOyAgICAgLyogQ2xlYXIgTkFDSyBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDFVOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RPUCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMFU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FSQkxPSUZfTXNrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDFVOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgVUkyQ19TRVRfQ09OVFJPTF9SRUcodWkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIFVJMkNfQ1RMIHJlZ2lzdGVyICovCisgICAgfQorCisgICAgcmV0dXJuICh1OEVyciB8IHU4WGZlcmluZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIChTdWNjZXNzKS8oRmFpbCkgc3RhdHVzICovCit9CisKKworLyoqCisgICogQGJyaWVmICAgICAgU3BlY2lmeSBhIGJ5dGUgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgd3JpdGUgbXVsdGkgYnl0ZXMgdG8gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICp1aTJjICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgdThEYXRhQWRkciAgICAgIFNwZWNpZnkgYSBhZGRyZXNzICgxIGJ5dGUpIG9mIGRhdGEgd3JpdGUgdG8KKyAgKiBAcGFyYW1baW5dICAqZGF0YSAgICAgICAgICAgUG9pbnRlciB0byBhcnJheSB0byB3cml0ZSBkYXRhIHRvIFNsYXZlCisgICogQHBhcmFtW2luXSAgdTMyd0xlbiAgICAgICAgIEhvdyBtYW55IGJ5dGVzIG5lZWQgdG8gd3JpdGUgdG8gU2xhdmUKKyAgKgorICAqIEByZXR1cm4gICAgIEEgbGVuZ3RoIG9mIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZC4KKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBVU0NJX0kyQyBNYXN0ZXIgc3BlY2lmeSBhIGJ5dGUgYWRkcmVzcyB0aGF0IG11bHRpIGRhdGEgYnl0ZXMgd3JpdGUgdG8gaW4gU2xhdmUuCisgICoKKyAgKi8KKwordWludDMyX3QgVUkyQ19Xcml0ZU11bHRpQnl0ZXNPbmVSZWcoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IHU4RGF0YUFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IHUzMndMZW4pCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxVSwgdThDdHJsID0gMFU7CisgICAgdWludDMyX3QgdTMydHhMZW4gPSAwVTsKKyAgICBlbnVtIFVJMkNfTUFTVEVSX0VWRU5UIGVFdmVudCA9IE1BU1RFUl9TRU5EX1NUQVJUOworCisgICAgVUkyQ19TVEFSVCh1aTJjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBTVEFSVCAqLworCisgICAgd2hpbGUodThYZmVyaW5nKQorICAgIHsKKyAgICAgICAgd2hpbGUoIShVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpKTsgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdCBVSTJDIG5ldyBzdGF0dXMgb2NjdXIgKi8KKworICAgICAgICBzd2l0Y2goVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RBUlQgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMFUpKTsgICAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9TRU5EX0FERFJFU1M7CisgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX0FDS0lGX01zayk7ICAgICAgLyogQ2xlYXIgQUNLIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfQUREUkVTUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgdThEYXRhQWRkcik7ICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgZGF0YSBhZGRyZXNzIHRvIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfREFUQTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYodTMydHhMZW4gPCB1MzJ3TGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCBkYXRhW3UzMnR4TGVuKytdKTsgICAgICAgICAgICAgIC8qIFdyaXRlIGRhdGEgdG8gVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfTkFDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrKTsgICAgIC8qIENsZWFyIE5BQ0sgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RPUklGX01zayk7ICAgICAvKiBDbGVhciBTVE9QIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwVTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQVJCTE9JRl9Nc2s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgVUkyQ19TRVRfQ09OVFJPTF9SRUcodWkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIFVJMkNfQ1RMIHJlZ2lzdGVyICovCisgICAgfQorCisgICAgcmV0dXJuIHUzMnR4TGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJ5dGVzIGxlbmd0aCB0aGF0IGhhdmUgYmVlbiB0cmFuc21pdHRlZCAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IHR3byBieXRlcyByZWdpc3RlciBhZGRyZXNzIGFuZCBXcml0ZSBhIGJ5dGUgdG8gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICp1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gIHUxNkRhdGFBZGRyICAgICBTcGVjaWZ5IGEgYWRkcmVzcyAoMiBieXRlKSBvZiBkYXRhIHdyaXRlIHRvCisgICogQHBhcmFtW2luXSAgZGF0YSAgICAgICAgICAgIFdyaXRlIGEgYnl0ZSBkYXRhIHRvIFNsYXZlCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICAgICAgV3JpdGUgZGF0YSBzdWNjZXNzCisgICogQHJldHZhbCAgICAgMSAgICAgICAgICAgICAgIFdyaXRlIGRhdGEgZmFpbCwgb3IgYnVzIG9jY3VycyBlcnJvciBldmVudHMKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBVU0NJX0kyQyBNYXN0ZXIgc3BlY2lmeSB0d28gYnl0ZXMgYWRkcmVzcyB0aGF0IGRhdGEgd3JpdGUgdG8gaW4gU2xhdmUuCisgICoKKyAgKi8KKwordWludDhfdCBVSTJDX1dyaXRlQnl0ZVR3b1JlZ3MoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50MTZfdCB1MTZEYXRhQWRkciwgdWludDhfdCBkYXRhKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMVUsIHU4RXJyID0gMFUsIHU4Q3RybCA9IDBVOworICAgIHVpbnQzMl90IHUzMnR4TGVuID0gMFU7CisKKyAgICBVSTJDX1NUQVJUKHVpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBTVEFSVCAqLworCisgICAgd2hpbGUodThYZmVyaW5nKQorICAgIHsKKyAgICAgICAgd2hpbGUoIShVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpKTsgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdCBVSTJDIG5ldyBzdGF0dXMgb2NjdXIgKi8KKworICAgICAgICBzd2l0Y2goVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2spOyAgICAgICAgIC8qIENsZWFyIFNUQVJUIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDBVKSk7ICAgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX0FDS0lGX01zayk7ICAgICAgICAgIC8qIENsZWFyIEFDSyBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYodTMydHhMZW4gPT0gMFUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICh1aW50OF90KSh1MTZEYXRhQWRkciAmIDB4RkYwMFUpID4+IDhVKTsgIC8qIFdyaXRlIEhpIGJ5dGUgZGF0YSBhZGRyZXNzIHRvIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgdTMydHhMZW4rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZih1MzJ0eExlbiA9PSAxVSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgKHVpbnQ4X3QpKHUxNkRhdGFBZGRyICYgMHhGRlUpKTsgICAgICAgICAvKiBXcml0ZSBMbyBieXRlIGRhdGEgYWRkcmVzcyB0byBVSTJDX1RYREFUICovCisgICAgICAgICAgICAgICAgICAgIHUzMnR4TGVuKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYodTMydHhMZW4gPT0gMlUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsIGRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBkYXRhIHRvIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgdTMydHhMZW4rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfTkFDS0lGX01zayk7ICAgICAgICAgLyogQ2xlYXIgTkFDSyBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxVTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RPUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUT1AgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDBVOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BUkJMT0lGX01zazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxVTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFVJMkNfU0VUX0NPTlRST0xfUkVHKHVpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gVUkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisKKyAgICByZXR1cm4gKHU4RXJyIHwgdThYZmVyaW5nKTsKK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IHR3byBieXRlcyByZWdpc3RlciBhZGRyZXNzIGFuZCB3cml0ZSBtdWx0aSBieXRlcyB0byBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKnVpMmMgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICB1MTZEYXRhQWRkciAgICAgU3BlY2lmeSBhIGFkZHJlc3MgKDIgYnl0ZXMpIG9mIGRhdGEgd3JpdGUgdG8KKyAgKiBAcGFyYW1baW5dICAqZGF0YSAgICAgICAgICAgUG9pbnRlciB0byBhcnJheSB0byB3cml0ZSBkYXRhIHRvIFNsYXZlCisgICogQHBhcmFtW2luXSAgdTMyd0xlbiAgICAgICAgIEhvdyBtYW55IGJ5dGVzIG5lZWQgdG8gd3JpdGUgdG8gU2xhdmUKKyAgKgorICAqIEByZXR1cm4gICAgIEEgbGVuZ3RoIG9mIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZC4KKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBVU0NJX0kyQyBNYXN0ZXIgc3BlY2lmeSBhIGJ5dGUgYWRkcmVzcyB0aGF0IG11bHRpIGRhdGEgd3JpdGUgdG8gaW4gU2xhdmUuCisgICoKKyAgKi8KKwordWludDMyX3QgVUkyQ19Xcml0ZU11bHRpQnl0ZXNUd29SZWdzKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDE2X3QgdTE2RGF0YUFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IHUzMndMZW4pCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxVSwgdThBZGRyID0gMVUsIHU4Q3RybCA9IDBVOworICAgIHVpbnQzMl90IHUzMnR4TGVuID0gMFU7CisgICAgZW51bSBVSTJDX01BU1RFUl9FVkVOVCBlRXZlbnQgPSBNQVNURVJfU0VORF9TVEFSVDsKKworICAgIFVJMkNfU1RBUlQodWkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisKKyAgICB3aGlsZSh1OFhmZXJpbmcpCisgICAgeworICAgICAgICB3aGlsZSghKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkpOyAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IFVJMkMgbmV3IHN0YXR1cyBvY2N1ciAqLworCisgICAgICAgIHN3aXRjaChVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RBUklGX01zayk7ICAgICAgICAgLyogQ2xlYXIgU1RBUlQgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMFUpKTsgICAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9TRU5EX0FERFJFU1M7CisgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2spOyAgICAgICAgICAvKiBDbGVhciBBQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9BRERSRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAodWludDhfdCkodTE2RGF0YUFkZHIgJiAweEZGMDBVKSA+PiA4VSk7ICAvKiBXcml0ZSBIaSBieXRlIGRhdGEgYWRkcmVzcyB0byBVSTJDX1RYREFUICovCisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9TRU5EX0RBVEE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX0RBVEEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZih1OEFkZHIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgKHVpbnQ4X3QpKHUxNkRhdGFBZGRyICYgMHhGRlUpKTsgICAgICAgICAvKiBXcml0ZSBMbyBieXRlIGRhdGEgYWRkcmVzcyB0byBVSTJDX1RYREFUICovCisgICAgICAgICAgICAgICAgICAgICAgICB1OEFkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodTMydHhMZW4gPCB1MzJ3TGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgZGF0YVt1MzJ0eExlbisrXSk7ICAgICAgICAgICAgICAgICAgLyogV3JpdGUgZGF0YSB0byBVSTJDX1RYREFUICovCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfTkFDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrKTsgICAgICAgICAvKiBDbGVhciBOQUNLIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RPUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUT1AgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDBVOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BUkJMT0lGX01zazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBVSTJDX1NFVF9DT05UUk9MX1JFRyh1aTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIFVJMkNfQ1RMIHJlZ2lzdGVyICovCisgICAgfQorCisgICAgcmV0dXJuIHUzMnR4TGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBieXRlcyBsZW5ndGggdGhhdCBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgKi8KK30KKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBhIGJ5dGUgZnJvbSBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKnVpMmMgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKgorICAqIEByZXR1cm4gICAgIFJlYWQgYSBieXRlIGRhdGEgZnJvbSBTbGF2ZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIFVTQ0lfSTJDIE1hc3RlciB0byByZWFkIGEgYnl0ZSBkYXRhIGZyb20gU2xhdmUuCisgICoKKyAgKi8KK3VpbnQ4X3QgVUkyQ19SZWFkQnl0ZShVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIpCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxVSwgdThFcnIgPSAwVSwgcmRhdGEgPSAwVSwgdThDdHJsID0gMFU7CisgICAgZW51bSBVSTJDX01BU1RFUl9FVkVOVCBlRXZlbnQgPSBNQVNURVJfU0VORF9TVEFSVDsKKworICAgIFVJMkNfU1RBUlQodWkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKworICAgIHdoaWxlKHU4WGZlcmluZykKKyAgICB7CisgICAgICAgIHdoaWxlKCEoVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgVUkyQyBuZXcgc3RhdHVzIG9jY3VyICovCisKKyAgICAgICAgc3dpdGNoKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RBUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUQVJUIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDFVKSk7ICAgIC8qIFdyaXRlIFNMQStSIHRvIFJlZ2lzdGVyIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9IX1JEX0FERFJFU1M7CisgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX0FDS0lGX01zayk7ICAgICAgLyogQ2xlYXIgQUNLIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1JFQURfREFUQTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfTkFDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrKTsgICAgIC8qIENsZWFyIE5BQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9IX1JEX0FERFJFU1MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEVyciA9IDFVOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZGF0YSA9ICh1bnNpZ25lZCBjaGFyKSBVSTJDX0dFVF9EQVRBKHVpMmMpOyAgICAgICAgICAgIC8qIFJlY2VpdmUgRGF0YSAqLworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RPUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUT1AgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDBVOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BUkJMT0lGX01zazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxVTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFVJMkNfU0VUX0NPTlRST0xfUkVHKHVpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgY29udHJvbGJpdCB0byBVSTJDX1BST1RDVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisKKyAgICBpZih1OEVycikKKyAgICAgICAgcmRhdGEgPSAwVTsKKworICAgIHJldHVybiByZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiByZWFkIGRhdGEgKi8KK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIG11bHRpIGJ5dGVzIGZyb20gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICp1aTJjICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW291dF0gKnJkYXRhICAgICAgICAgIFBvaW50IHRvIGFycmF5IHRvIHN0b3JlIGRhdGEgZnJvbSBTbGF2ZQorICAqIEBwYXJhbVtpbl0gIHUzMnJMZW4gICAgICAgICBIb3cgbWFueSBieXRlcyBuZWVkIHRvIHJlYWQgZnJvbSBTbGF2ZQorICAqCisgICogQHJldHVybiAgICAgQSBsZW5ndGggb2YgaG93IG1hbnkgYnl0ZXMgaGF2ZSBiZWVuIHJlY2VpdmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgVVNDSV9JMkMgTWFzdGVyIHRvIHJlYWQgbXVsdGkgZGF0YSBieXRlcyBmcm9tIFNsYXZlLgorICAqCisgICoKKyAgKi8KK3VpbnQzMl90IFVJMkNfUmVhZE11bHRpQnl0ZXMoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90ICpyZGF0YSwgdWludDMyX3QgdTMyckxlbikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDFVLCB1OEN0cmwgPSAwVTsKKyAgICB1aW50MzJfdCB1MzJyeExlbiA9IDBVOworICAgIGVudW0gVUkyQ19NQVNURVJfRVZFTlQgZUV2ZW50ID0gTUFTVEVSX1NFTkRfU1RBUlQ7CisKKyAgICBVSTJDX1NUQVJUKHVpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisKKyAgICB3aGlsZSh1OFhmZXJpbmcpCisgICAgeworICAgICAgICB3aGlsZSghKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkpOyAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IFVJMkMgbmV3IHN0YXR1cyBvY2N1ciAqLworCisgICAgICAgIHN3aXRjaChVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RBUklGX01zayk7ICAgICAvKiBDbGVhciBTVEFSVCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxVSkgfCAweDAxVSkpOyAvKiBXcml0ZSBTTEErUiB0byBSZWdpc3RlciBVSTJDX1RYREFUICovCisgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfSF9SRF9BRERSRVNTOworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2spOyAgICAgIC8qIENsZWFyIEFDSyBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX0hfUkRfQUREUkVTUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfQUEpOworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfUkVBRF9EQVRBOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZGF0YVt1MzJyeExlbisrXSA9ICh1bnNpZ25lZCBjaGFyKSBVSTJDX0dFVF9EQVRBKHVpMmMpOyAgICAvKiBSZWNlaXZlIERhdGEgKi8KKworICAgICAgICAgICAgICAgICAgICBpZih1MzJyeExlbiA8ICh1MzJyTGVuIC0gMVUpKQorICAgICAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9BQSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfTkFDS0lGX01zayk7ICAgICAvKiBDbGVhciBOQUNLIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZihlRXZlbnQgPT0gTUFTVEVSX1JFQURfREFUQSkKKyAgICAgICAgICAgICAgICAgICAgcmRhdGFbdTMycnhMZW4rK10gPSAodW5zaWduZWQgY2hhcikgVUkyQ19HRVRfREFUQSh1aTJjKTsgICAgLyogUmVjZWl2ZSBEYXRhICovCisKKyAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RPUklGX01zayk7ICAgICAvKiBDbGVhciBTVE9QIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwVTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQVJCTE9JRl9Nc2s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgVUkyQ19TRVRfQ09OVFJPTF9SRUcodWkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIFVJMkNfUFJPVENUTCByZWdpc3RlciAqLworICAgIH0KKworICAgIHJldHVybiB1MzJyeExlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBieXRlcyBsZW5ndGggdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgKi8KK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IGEgYnl0ZSByZWdpc3RlciBhZGRyZXNzIGFuZCByZWFkIGEgYnl0ZSBmcm9tIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqdWkyYyAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICB1OERhdGFBZGRyICAgICAgU3BlY2lmeSBhIGFkZHJlc3MoMSBieXRlKSBvZiBkYXRhIHJlYWQgZnJvbQorICAqCisgICogQHJldHVybiAgICAgUmVhZCBhIGJ5dGUgZGF0YSBmcm9tIFNsYXZlCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgVVNDSV9JMkMgTWFzdGVyIHNwZWNpZnkgYSBieXRlIGFkZHJlc3MgdGhhdCBhIGRhdGEgYnl0ZSByZWFkIGZyb20gU2xhdmUuCisgICoKKyAgKgorICAqLwordWludDhfdCBVSTJDX1JlYWRCeXRlT25lUmVnKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGFBZGRyKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMVUsIHU4RXJyID0gMFUsIHJkYXRhID0gMFUsIHU4Q3RybCA9IDBVOworICAgIGVudW0gVUkyQ19NQVNURVJfRVZFTlQgZUV2ZW50ID0gTUFTVEVSX1NFTkRfU1RBUlQ7CisKKyAgICBVSTJDX1NUQVJUKHVpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisKKyAgICB3aGlsZSh1OFhmZXJpbmcpCisgICAgeworICAgICAgICB3aGlsZSghKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkpOyAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IFVJMkMgbmV3IHN0YXR1cyBvY2N1ciAqLworCisgICAgICAgIHN3aXRjaChVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RBUklGX01zayk7ICAgICAvKiBDbGVhciBTVEFSVCBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX1NUQVJUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDBVKSk7ICAgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfQUREUkVTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfUkVQRUFUX1NUQVJUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDFVKSk7ICAgIC8qIFdyaXRlIFNMQStSIHRvIFJlZ2lzdGVyIFRYREFUICovCisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9TRU5EX0hfUkRfQUREUkVTUzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfQUNLSUZfTXNrKTsgICAgICAvKiBDbGVhciBBQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9BRERSRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCB1OERhdGFBZGRyKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBkYXRhIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsKKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfREFUQTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfREFUQSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RBKTsgICAgICAgICAgICAgICAgLyogU2VuZCByZXBlYXQgU1RBUlQgc2lnbmFsICovCisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9TRU5EX1JFUEVBVF9TVEFSVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogU0xBK1IgQUNLICovCisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7CisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9SRUFEX0RBVEE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfTkFDS0lGX01zayk7ICAgICAvKiBDbGVhciBOQUNLIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZihlRXZlbnQgPT0gTUFTVEVSX1JFQURfREFUQSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJkYXRhID0gKHVpbnQ4X3QpIFVJMkNfR0VUX0RBVEEodWkyYyk7ICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZSBEYXRhICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4RXJyID0gMVU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RPUCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMFU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FSQkxPSUZfTXNrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDFVOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgVUkyQ19TRVRfQ09OVFJPTF9SRUcodWkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIFVJMkNfUFJPVENUTCByZWdpc3RlciAqLworICAgIH0KKworICAgIGlmKHU4RXJyKQorICAgICAgICByZGF0YSA9IDBVOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBvY2N1cnMgZXJyb3IsIHJldHVybiAwICovCisKKyAgICByZXR1cm4gcmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gcmVhZCBkYXRhICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNwZWNpZnkgYSBieXRlIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHJlYWQgbXVsdGkgYnl0ZXMgZnJvbSBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKnVpMmMgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICB1OERhdGFBZGRyICAgICAgU3BlY2lmeSBhIGFkZHJlc3MgKDEgYnl0ZXMpIG9mIGRhdGEgcmVhZCBmcm9tCisgICogQHBhcmFtW291dF0gKnJkYXRhICAgICAgICAgIFBvaW50IHRvIGFycmF5IHRvIHN0b3JlIGRhdGEgZnJvbSBTbGF2ZQorICAqIEBwYXJhbVtpbl0gIHUzMnJMZW4gICAgICAgICBIb3cgbWFueSBieXRlcyBuZWVkIHRvIHJlYWQgZnJvbSBTbGF2ZQorICAqCisgICogQHJldHVybiAgICAgQSBsZW5ndGggb2YgaG93IG1hbnkgYnl0ZXMgaGF2ZSBiZWVuIHJlY2VpdmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgVVNDSV9JMkMgTWFzdGVyIHNwZWNpZnkgYSBieXRlIGFkZHJlc3MgdGhhdCBtdWx0aSBkYXRhIGJ5dGVzIHJlYWQgZnJvbSBTbGF2ZS4KKyAgKgorICAqCisgICovCit1aW50MzJfdCBVSTJDX1JlYWRNdWx0aUJ5dGVzT25lUmVnKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGFBZGRyLCB1aW50OF90ICpyZGF0YSwgdWludDMyX3QgdTMyckxlbikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDFVLCB1OEN0cmwgPSAwVTsKKyAgICB1aW50MzJfdCB1MzJyeExlbiA9IDBVOworICAgIGVudW0gVUkyQ19NQVNURVJfRVZFTlQgZUV2ZW50ID0gTUFTVEVSX1NFTkRfU1RBUlQ7CisKKyAgICBVSTJDX1NUQVJUKHVpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisKKyAgICB3aGlsZSh1OFhmZXJpbmcpCisgICAgeworICAgICAgICB3aGlsZSghKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkpOyAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IFVJMkMgbmV3IHN0YXR1cyBvY2N1ciAqLworCisgICAgICAgIHN3aXRjaChVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RBUklGX01zayk7ICAgICAvKiBDbGVhciBTVEFSVCBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX1NUQVJUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDBVKSk7ICAgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfQUREUkVTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfUkVQRUFUX1NUQVJUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDFVKSk7ICAgIC8qIFdyaXRlIFNMQStSIHRvIFJlZ2lzdGVyIFRYREFUICovCisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9TRU5EX0hfUkRfQUREUkVTUzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfQUNLSUZfTXNrKTsgICAgICAvKiBDbGVhciBBQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9BRERSRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCB1OERhdGFBZGRyKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBkYXRhIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsKKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfREFUQTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfREFUQSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RBKTsgICAgICAgICAgICAgICAgLyogU2VuZCByZXBlYXQgU1RBUlQgc2lnbmFsICovCisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9TRU5EX1JFUEVBVF9TVEFSVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfSF9SRF9BRERSRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogU0xBK1IgQUNLICovCisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfQUEpOworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfUkVBRF9EQVRBOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZGF0YVt1MzJyeExlbisrXSA9ICh1aW50OF90KSBVSTJDX0dFVF9EQVRBKHVpMmMpOyAgICAgIC8qIFJlY2VpdmUgRGF0YSAqLworCisgICAgICAgICAgICAgICAgICAgIGlmKHUzMnJ4TGVuIDwgdTMyckxlbiAtIDFVKQorICAgICAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9BQSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfTkFDS0lGX01zayk7ICAgICAvKiBDbGVhciBOQUNLIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZihlRXZlbnQgPT0gTUFTVEVSX1JFQURfREFUQSkKKyAgICAgICAgICAgICAgICAgICAgcmRhdGFbdTMycnhMZW4rK10gPSAodWludDhfdCkgVUkyQ19HRVRfREFUQSh1aTJjKTsgICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlIERhdGEgKi8KKworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RPUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUT1AgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDBVOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BUkJMT0lGX01zazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBVSTJDX1NFVF9DT05UUk9MX1JFRyh1aTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gVUkyQ19QUk9UQ1RMIHJlZ2lzdGVyICovCisgICAgfQorCisgICAgcmV0dXJuIHUzMnJ4TGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJ5dGVzIGxlbmd0aCB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IHR3byBieXRlcyByZWdpc3RlciBhZGRyZXNzIGFuZCByZWFkIGEgYnl0ZSBmcm9tIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqdWkyYyAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gIHUxNkRhdGFBZGRyICAgICBTcGVjaWZ5IGEgYWRkcmVzcygyIGJ5dGUpIG9mIGRhdGEgcmVhZCBmcm9tCisgICoKKyAgKiBAcmV0dXJuICAgICBSZWFkIGEgYnl0ZSBkYXRhIGZyb20gU2xhdmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBVU0NJX0kyQyBNYXN0ZXIgc3BlY2lmeSB0d28gYnl0ZXMgYWRkcmVzcyB0aGF0IGEgZGF0YSBieXRlIHJlYWQgZnJvbSBTbGF2ZS4KKyAgKgorICAqCisgICovCit1aW50OF90IFVJMkNfUmVhZEJ5dGVUd29SZWdzKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDE2X3QgdTE2RGF0YUFkZHIpCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxVSwgdThFcnIgPSAwVSwgcmRhdGEgPSAwVSwgdThBZGRyID0gMVUsIHU4Q3RybCA9IDBVOworICAgIGVudW0gVUkyQ19NQVNURVJfRVZFTlQgZUV2ZW50ID0gTUFTVEVSX1NFTkRfU1RBUlQ7CisKKyAgICBVSTJDX1NUQVJUKHVpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisKKyAgICB3aGlsZSh1OFhmZXJpbmcpCisgICAgeworICAgICAgICB3aGlsZSghKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkpOyAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IFVJMkMgbmV3IHN0YXR1cyBvY2N1ciAqLworCisgICAgICAgIHN3aXRjaChVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RBUklGX01zayk7ICAgICAvKiBDbGVhciBTVEFSVCBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX1NUQVJUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDBVKSk7ICAgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfQUREUkVTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfUkVQRUFUX1NUQVJUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDFVKSk7ICAgIC8qIFdyaXRlIFNMQStSIHRvIFJlZ2lzdGVyIFRYREFUICovCisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9TRU5EX0hfUkRfQUREUkVTUzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfQUNLSUZfTXNrKTsgICAgICAvKiBDbGVhciBBQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9BRERSRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAodWludDhfdCkodTE2RGF0YUFkZHIgJiAweEZGMDBVKSA+PiA4VSk7ICAvKiBXcml0ZSBIaSBieXRlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfREFUQTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfREFUQSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHU4QWRkcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAodWludDhfdCkodTE2RGF0YUFkZHIgJiAweEZGVSkpOyAgICAgICAvKiBXcml0ZSBMbyBieXRlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHU4QWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUQSk7ICAgICAgICAgICAgICAgIC8qIFNlbmQgcmVwZWF0IFNUQVJUIHNpZ25hbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfUkVQRUFUX1NUQVJUOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIFNMQStSIEFDSyAqLworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfUkVBRF9EQVRBOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2spOyAgICAgLyogQ2xlYXIgTkFDSyBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYoZUV2ZW50ID09IE1BU1RFUl9SRUFEX0RBVEEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZGF0YSA9ICh1aW50OF90KSBVSTJDX0dFVF9EQVRBKHVpMmMpOyAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgRGF0YSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEVyciA9IDFVOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RPUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUT1AgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDBVOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BUkJMT0lGX01zazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxVTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFVJMkNfU0VUX0NPTlRST0xfUkVHKHVpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgY29udHJvbGJpdCB0byBVSTJDX1BST1RDVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisKKyAgICBpZih1OEVycikKKyAgICAgICAgcmRhdGEgPSAwVTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgb2NjdXJzIGVycm9yLCByZXR1cm4gMCAqLworCisgICAgcmV0dXJuIHJkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHJlYWQgZGF0YSAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IHR3byBieXRlcyByZWdpc3RlciBhZGRyZXNzIGFuZCByZWFkIG11bHRpIGJ5dGVzIGZyb20gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICp1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gIHUxNkRhdGFBZGRyICAgICBTcGVjaWZ5IGEgYWRkcmVzcyAoMiBieXRlcykgb2YgZGF0YSByZWFkIGZyb20KKyAgKiBAcGFyYW1bb3V0XSAqcmRhdGEgICAgICAgICAgUG9pbnQgdG8gYXJyYXkgdG8gc3RvcmUgZGF0YSBmcm9tIFNsYXZlCisgICogQHBhcmFtW2luXSAgdTMyckxlbiAgICAgICAgIEhvdyBtYW55IGJ5dGVzIG5lZWQgdG8gcmVhZCBmcm9tIFNsYXZlCisgICoKKyAgKiBAcmV0dXJuICAgICBBIGxlbmd0aCBvZiBob3cgbWFueSBieXRlcyBoYXZlIGJlZW4gcmVjZWl2ZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBVU0NJX0kyQyBNYXN0ZXIgc3BlY2lmeSB0d28gYnl0ZXMgYWRkcmVzcyB0aGF0IG11bHRpIGRhdGEgYnl0ZXMgcmVhZCBmcm9tIFNsYXZlLgorICAqCisgICoKKyAgKi8KK3VpbnQzMl90IFVJMkNfUmVhZE11bHRpQnl0ZXNUd29SZWdzKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDE2X3QgdTE2RGF0YUFkZHIsIHVpbnQ4X3QgKnJkYXRhLCB1aW50MzJfdCB1MzJyTGVuKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMVUsIHU4QWRkciA9IDFVLCB1OEN0cmwgPSAwVTsKKyAgICB1aW50MzJfdCB1MzJyeExlbiA9IDBVOworICAgIGVudW0gVUkyQ19NQVNURVJfRVZFTlQgZUV2ZW50ID0gTUFTVEVSX1NFTkRfU1RBUlQ7CisKKyAgICBVSTJDX1NUQVJUKHVpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisKKyAgICB3aGlsZSh1OFhmZXJpbmcpCisgICAgeworICAgICAgICB3aGlsZSghKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkpOyAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IFVJMkMgbmV3IHN0YXR1cyBvY2N1ciAqLworCisgICAgICAgIHN3aXRjaChVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RBUklGX01zayk7ICAgICAvKiBDbGVhciBTVEFSVCBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX1NUQVJUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDBVKSk7ICAgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfQUREUkVTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfUkVQRUFUX1NUQVJUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDFVKSk7ICAgIC8qIFdyaXRlIFNMQStSIHRvIFJlZ2lzdGVyIFRYREFUICovCisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9TRU5EX0hfUkRfQUREUkVTUzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfQUNLSUZfTXNrKTsgICAgICAvKiBDbGVhciBBQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9BRERSRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAodWludDhfdCkodTE2RGF0YUFkZHIgJiAweEZGMDBVKSA+PiA4VSk7ICAvKiBXcml0ZSBIaSBieXRlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfREFUQTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfREFUQSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHU4QWRkcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAodWludDhfdCkodTE2RGF0YUFkZHIgJiAweEZGVSkpOyAgICAgICAvKiBXcml0ZSBMbyBieXRlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHU4QWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUQSk7ICAgICAgICAgICAgICAgIC8qIFNlbmQgcmVwZWF0IFNUQVJUIHNpZ25hbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfUkVQRUFUX1NUQVJUOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX0hfUkRfQUREUkVTUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfQUEpOworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfUkVBRF9EQVRBOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZGF0YVt1MzJyeExlbisrXSA9ICh1aW50OF90KSBVSTJDX0dFVF9EQVRBKHVpMmMpOyAgICAgIC8qIFJlY2VpdmUgRGF0YSAqLworCisgICAgICAgICAgICAgICAgICAgIGlmKHUzMnJ4TGVuIDwgdTMyckxlbiAtIDFVKQorICAgICAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9BQSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfTkFDS0lGX01zayk7ICAgICAvKiBDbGVhciBOQUNLIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZihlRXZlbnQgPT0gTUFTVEVSX1JFQURfREFUQSkKKyAgICAgICAgICAgICAgICAgICAgcmRhdGFbdTMycnhMZW4rK10gPSAodWludDhfdCkgVUkyQ19HRVRfREFUQSh1aTJjKTsgICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlIERhdGEgKi8KKworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RPUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUT1AgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDBVOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BUkJMT0lGX01zazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBVSTJDX1NFVF9DT05UUk9MX1JFRyh1aTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gVUkyQ19QUk9UQ1RMIHJlZ2lzdGVyICovCisgICAgfQorCisgICAgcmV0dXJuIHUzMnJ4TGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJ5dGVzIGxlbmd0aCB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCAqLworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfSTJDX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfSTJDX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy91c2NpX3NwaS5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdXNjaV9zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWRkOTFkCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdXNjaV9zcGkuYwpAQCAtMCwwICsxLDYzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdXNjaV9zcGkuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIFVTQ0lfU1BJIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFVTQ0lfU1BJX0RyaXZlciBVU0NJX1NQSSBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIFVTQ0lfU1BJX0VYUE9SVEVEX0ZVTkNUSU9OUyBVU0NJX1NQSSBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBtYWtlIFVTQ0lfU1BJIG1vZHVsZSBiZSByZWFkeSB0byB0cmFuc2Zlci4KKyAgKiAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBVU0NJX1NQSSB0cmFuc2ZlciBzZXF1ZW5jZSBpcyBNU0IgZmlyc3QsIHRoZSBzbGF2ZSBzZWxlY3Rpb24KKyAgKiAgICAgICAgIHNpZ25hbCBpcyBhY3RpdmUgbG93IGFuZCB0aGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdCBmdW5jdGlvbiBpcyBkaXNhYmxlZC4gSW4KKyAgKiAgICAgICAgIFNsYXZlIG1vZGUsIHRoZSB1MzJCdXNDbG9jayBtdXN0IGJlIE5VTEwgYW5kIHRoZSBVU0NJX1NQSSBjbG9jaworICAqICAgICAgICAgZGl2aWRlciBzZXR0aW5nIHdpbGwgYmUgMC4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc3RlclNsYXZlIERlY2lkZSB0aGUgVVNDSV9TUEkgbW9kdWxlIGlzIG9wZXJhdGluZyBpbiBtYXN0ZXIgbW9kZSBvciBpbiBzbGF2ZSBtb2RlLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9TTEFWRQorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9NQVNURVIKKyAgKiBAcGFyYW1baW5dICB1MzJTUElNb2RlIERlY2lkZSB0aGUgdHJhbnNmZXIgdGltaW5nLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9NT0RFXzAKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfTU9ERV8xCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX01PREVfMgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9NT0RFXzMKKyAgKiBAcGFyYW1baW5dICB1MzJEYXRhV2lkdGggVGhlIGRhdGEgd2lkdGggb2YgYSBVU0NJX1NQSSB0cmFuc2FjdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1MzJCdXNDbG9jayBUaGUgZXhwZWN0ZWQgZnJlcXVlbmN5IG9mIFVTQ0lfU1BJIGJ1cyBjbG9jayBpbiBIei4KKyAgKiBAcmV0dXJuIEFjdHVhbCBmcmVxdWVuY3kgb2YgVVNDSV9TUEkgcGVyaXBoZXJhbCBjbG9jay4KKyAgKi8KK3VpbnQzMl90IFVTUElfT3BlbihVU1BJX1QgKnVzcGksIHVpbnQzMl90IHUzMk1hc3RlclNsYXZlLCB1aW50MzJfdCB1MzJTUElNb2RlLCAgdWludDMyX3QgdTMyRGF0YVdpZHRoLCB1aW50MzJfdCB1MzJCdXNDbG9jaykKK3sKKyAgICB1aW50MzJfdCB1MzJDbGtEaXYgPSAwVUw7CisgICAgdWludDMyX3QgdTMyUGNsazsKKyAgICB1aW50MzJfdCB1MzJSZXRWYWx1ZSA9IDBVTDsKKworICAgIGlmKCh1c3BpID09IFVTUEkwKSB8fCAodXNwaSA9PSBVU1BJMF9OUykpCisgICAgeworICAgICAgICB1MzJQY2xrID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJQY2xrID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgIH0KKworICAgIGlmKHUzMkJ1c0Nsb2NrICE9IDBVTCkKKyAgICB7CisgICAgICAgIHUzMkNsa0RpdiA9ICh1aW50MzJfdCkoKCgoKCh1MzJQY2xrIC8gMlVMKSAqIDEwVUwpIC8gKHUzMkJ1c0Nsb2NrKSkgKyA1VUwpIC8gMTBVTCkgLSAxVUwpOyAvKiBDb21wdXRlIHByb3BlciBkaXZpZGVyIGZvciBVU0NJX1NQSSBjbG9jayAqLworICAgIH0KKworICAgIC8qIEVuYWJsZSBVU0NJX1NQSSBwcm90b2NvbCAqLworICAgIHVzcGktPkNUTCAmPSB+VVNQSV9DVExfRlVOTU9ERV9Nc2s7CisgICAgdXNwaS0+Q1RMID0gMVVMIDw8IFVTUElfQ1RMX0ZVTk1PREVfUG9zOworCisgICAgLyogRGF0YSBmb3JtYXQgY29uZmlndXJhdGlvbiAqLworICAgIGlmKHUzMkRhdGFXaWR0aCA9PSAxNlVMKQorICAgIHsKKyAgICAgICAgdTMyRGF0YVdpZHRoID0gMFVMOworICAgIH0KKyAgICB1c3BpLT5MSU5FQ1RMICY9IH5VU1BJX0xJTkVDVExfRFdJRFRIX01zazsKKyAgICB1c3BpLT5MSU5FQ1RMIHw9ICh1MzJEYXRhV2lkdGggPDwgVVNQSV9MSU5FQ1RMX0RXSURUSF9Qb3MpOworCisgICAgLyogTVNCIGRhdGEgZm9ybWF0ICovCisgICAgdXNwaS0+TElORUNUTCAmPSB+VVNQSV9MSU5FQ1RMX0xTQl9Nc2s7CisKKyAgICAvKiBTZXQgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBhY3RpdmUgbG93ICovCisgICAgaWYodTMyTWFzdGVyU2xhdmUgPT0gVVNQSV9NQVNURVIpCisgICAgeworICAgICAgICB1c3BpLT5MSU5FQ1RMIHw9IFVTUElfTElORUNUTF9DVExPSU5WX01zazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdXNwaS0+Q1RMSU4wIHw9IFVTUElfQ1RMSU4wX0lOSU5WX01zazsKKyAgICB9CisKKyAgICAvKiBTZXQgb3BlcmF0aW5nIG1vZGUgYW5kIHRyYW5zZmVyIHRpbWluZyAqLworICAgIHVzcGktPlBST1RDVEwgJj0gfihVU1BJX1BST1RDVExfU0NMS01PREVfTXNrIHwgVVNQSV9QUk9UQ1RMX0FVVE9TU19Nc2sgfCBVU1BJX1BST1RDVExfU0xBVkVfTXNrKTsKKyAgICB1c3BpLT5QUk9UQ1RMIHw9ICh1MzJNYXN0ZXJTbGF2ZSB8IHUzMlNQSU1vZGUpOworCisgICAgLyogU2V0IFVTQ0lfU1BJIGJ1cyBjbG9jayAqLworICAgIHVzcGktPkJSR0VOICY9IH5VU1BJX0JSR0VOX0NMS0RJVl9Nc2s7CisgICAgdXNwaS0+QlJHRU4gfD0gKHUzMkNsa0RpdiA8PCBVU1BJX0JSR0VOX0NMS0RJVl9Qb3MpOworICAgIHVzcGktPlBST1RDVEwgfD0gIFVTUElfUFJPVENUTF9QUk9URU5fTXNrOworCisgICAgaWYodTMyQnVzQ2xvY2sgIT0gMFVMKQorICAgIHsKKyAgICAgICAgdTMyUmV0VmFsdWUgPSAodTMyUGNsayAvICgodTMyQ2xrRGl2ICsgMVVMKSA8PCAxVUwpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyUmV0VmFsdWUgPSAwVUw7CisgICAgfQorCisgICAgcmV0dXJuIHUzMlJldFZhbHVlOworfQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBVU0NJX1NQSSBmdW5jdGlvbiBtb2RlLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFVTUElfQ2xvc2UoVVNQSV9UICp1c3BpKQoreworICAgIHVzcGktPkNUTCAmPSB+VVNQSV9DVExfRlVOTU9ERV9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiBDbGVhciBSeCBidWZmZXIuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgVVNQSV9DbGVhclJ4QnVmKFVTUElfVCAqdXNwaSkKK3sKKyAgICB1c3BpLT5CVUZDVEwgfD0gVVNQSV9CVUZDVExfUlhDTFJfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgQ2xlYXIgVHggYnVmZmVyLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFVTUElfQ2xlYXJUeEJ1ZihVU1BJX1QgKnVzcGkpCit7CisgICAgdXNwaS0+QlVGQ1RMIHw9IFVTUElfQlVGQ1RMX1RYQ0xSX01zazsKK30KKworLyoqCisgICogQGJyaWVmIERpc2FibGUgdGhlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3QgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgVVNQSV9EaXNhYmxlQXV0b1NTKFVTUElfVCAqdXNwaSkKK3sKKyAgICB1c3BpLT5QUk9UQ1RMICY9IH4oVVNQSV9QUk9UQ1RMX0FVVE9TU19Nc2sgfCBVU1BJX1BST1RDVExfU1NfTXNrKTsKK30KKworLyoqCisgICogQGJyaWVmIEVuYWJsZSB0aGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdCBmdW5jdGlvbi4gT25seSBhdmFpbGFibGUgaW4gTWFzdGVyIG1vZGUuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJTU1Bpbk1hc2sgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgICogQHBhcmFtW2luXSAgdTMyQWN0aXZlTGV2ZWwgVGhlIGFjdGl2ZSBsZXZlbCBvZiBzbGF2ZSBzZWxlY3Qgc2lnbmFsLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfU1NfQUNUSVZFX0hJR0gKKyAgKiAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX1NTX0FDVElWRV9MT1cKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgVVNQSV9FbmFibGVBdXRvU1MoVVNQSV9UICp1c3BpLCB1aW50MzJfdCB1MzJTU1Bpbk1hc2ssIHVpbnQzMl90IHUzMkFjdGl2ZUxldmVsKQoreworICAgICh2b2lkKXUzMlNTUGluTWFzazsKKyAgICB1c3BpLT5MSU5FQ1RMID0gKHVzcGktPkxJTkVDVEwgJiB+VVNQSV9MSU5FQ1RMX0NUTE9JTlZfTXNrKSB8IHUzMkFjdGl2ZUxldmVsOworICAgIHVzcGktPlBST1RDVEwgfD0gVVNQSV9QUk9UQ1RMX0FVVE9TU19Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiBTZXQgdGhlIFVTQ0lfU1BJIGJ1cyBjbG9jay4gT25seSBhdmFpbGFibGUgaW4gTWFzdGVyIG1vZGUuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJCdXNDbG9jayBUaGUgZXhwZWN0ZWQgZnJlcXVlbmN5IG9mIFVTQ0lfU1BJIGJ1cyBjbG9jay4KKyAgKiBAcmV0dXJuIEFjdHVhbCBmcmVxdWVuY3kgb2YgVVNDSV9TUEkgcGVyaXBoZXJhbCBjbG9jay4KKyAgKi8KK3VpbnQzMl90IFVTUElfU2V0QnVzQ2xvY2soVVNQSV9UICp1c3BpLCB1aW50MzJfdCB1MzJCdXNDbG9jaykKK3sKKyAgICB1aW50MzJfdCB1MzJDbGtEaXY7CisgICAgdWludDMyX3QgdTMyUGNsazsKKworICAgIGlmKCh1c3BpID09IFVTUEkwKSB8fCAodXNwaSA9PSBVU1BJMF9OUykpCisgICAgeworICAgICAgICB1MzJQY2xrID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJQY2xrID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgIH0KKworICAgIHUzMkNsa0RpdiA9ICh1aW50MzJfdCkoKCgoKCh1MzJQY2xrIC8gMlVMKSAqIDEwVUwpIC8gKHUzMkJ1c0Nsb2NrKSkgKyA1VUwpIC8gMTBVTCkgLSAxVUwpOyAvKiBDb21wdXRlIHByb3BlciBkaXZpZGVyIGZvciBVU0NJX1NQSSBjbG9jayAqLworCisgICAgLyogU2V0IFVTQ0lfU1BJIGJ1cyBjbG9jayAqLworICAgIHVzcGktPkJSR0VOICY9IH5VU1BJX0JSR0VOX0NMS0RJVl9Nc2s7CisgICAgdXNwaS0+QlJHRU4gfD0gKHUzMkNsa0RpdiA8PCBVU1BJX0JSR0VOX0NMS0RJVl9Qb3MpOworCisgICAgcmV0dXJuICh1MzJQY2xrIC8gKCh1MzJDbGtEaXYgKyAxVUwpIDw8IDFVTCkpOworfQorCisvKioKKyAgKiBAYnJpZWYgR2V0IHRoZSBhY3R1YWwgZnJlcXVlbmN5IG9mIFVTQ0lfU1BJIGJ1cyBjbG9jay4gT25seSBhdmFpbGFibGUgaW4gTWFzdGVyIG1vZGUuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIEFjdHVhbCBVU0NJX1NQSSBidXMgY2xvY2sgZnJlcXVlbmN5LgorICAqLwordWludDMyX3QgVVNQSV9HZXRCdXNDbG9jayhVU1BJX1QgKnVzcGkpCit7CisgICAgdWludDMyX3QgdTMyQ2xrRGl2LCB1MzJCdXNDbGs7CisKKyAgICB1MzJDbGtEaXYgPSAodXNwaS0+QlJHRU4gJiBVU1BJX0JSR0VOX0NMS0RJVl9Nc2spID4+IFVTUElfQlJHRU5fQ0xLRElWX1BvczsKKworICAgIGlmKCh1c3BpID09IFVTUEkwKSB8fCAodXNwaSA9PSBVU1BJMF9OUykpCisgICAgeworICAgICAgICB1MzJCdXNDbGsgPSAoQ0xLX0dldFBDTEswRnJlcSgpIC8gKCh1MzJDbGtEaXYgKyAxVUwpIDw8IDFVTCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJCdXNDbGsgPSAoQ0xLX0dldFBDTEsxRnJlcSgpIC8gKCh1MzJDbGtEaXYgKyAxVUwpIDw8IDFVTCkpOworICAgIH0KKworICAgIHJldHVybiB1MzJCdXNDbGs7Cit9CisKKy8qKgorICAqIEBicmllZiBFbmFibGUgcmVsYXRlZCBpbnRlcnJ1cHRzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBlbmFibGUgYml0cy4KKyAgKiAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IGJpdC4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1NTSU5BQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfU1NBQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfU0xWVE9fSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfU0xWQkVfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfVFhVRFJfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfUlhPVl9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9UWFNUX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1RYRU5EX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1JYU1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfUlhFTkRfSU5UX01BU0sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgVVNQSV9FbmFibGVJbnQoVVNQSV9UICp1c3BpLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIC8qIEVuYWJsZSBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGluYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1NTSU5BQ1RfSU5UX01BU0spID09IFVTUElfU1NJTkFDVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPlBST1RJRU4gfD0gVVNQSV9QUk9USUVOX1NTSU5BSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBhY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfU1NBQ1RfSU5UX01BU0spID09IFVTUElfU1NBQ1RfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5QUk9USUVOIHw9IFVTUElfUFJPVElFTl9TU0FDVElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHNsYXZlIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1NMVlRPX0lOVF9NQVNLKSA9PSBVU1BJX1NMVlRPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+UFJPVElFTiB8PSBVU1BJX1BST1RJRU5fU0xWVE9JRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBzbGF2ZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfU0xWQkVfSU5UX01BU0spID09IFVTUElfU0xWQkVfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5QUk9USUVOIHw9IFVTUElfUFJPVElFTl9TTFZCRUlFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFRYIHVuZGVyIHJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9UWFVEUl9JTlRfTUFTSykgPT0gVVNQSV9UWFVEUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPkJVRkNUTCB8PSBVU1BJX0JVRkNUTF9UWFVEUklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFJYIG92ZXJydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfUlhPVl9JTlRfTUFTSykgPT0gVVNQSV9SWE9WX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+QlVGQ1RMIHw9IFVTUElfQlVGQ1RMX1JYT1ZJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBUWCBzdGFydCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9UWFNUX0lOVF9NQVNLKSA9PSBVU1BJX1RYU1RfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5JTlRFTiB8PSBVU1BJX0lOVEVOX1RYU1RJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBUWCBlbmQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfVFhFTkRfSU5UX01BU0spID09IFVTUElfVFhFTkRfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5JTlRFTiB8PSBVU1BJX0lOVEVOX1RYRU5ESUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgUlggc3RhcnQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfUlhTVF9JTlRfTUFTSykgPT0gVVNQSV9SWFNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+SU5URU4gfD0gVVNQSV9JTlRFTl9SWFNUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgUlggZW5kIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1JYRU5EX0lOVF9NQVNLKSA9PSBVU1BJX1JYRU5EX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+SU5URU4gfD0gVVNQSV9JTlRFTl9SWEVORElFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSByZWxhdGVkIGludGVycnVwdHMgc3BlY2lmaWVkIGJ5IHUzMk1hc2sgcGFyYW1ldGVyLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzLgorICAqICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgYml0LgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHRzIHdpbGwgYmUgZGlzYWJsZWQuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1NTSU5BQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfU1NBQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfU0xWVE9fSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfU0xWQkVfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfVFhVRFJfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfUlhPVl9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9UWFNUX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1RYRU5EX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1JYU1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfUlhFTkRfSU5UX01BU0sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgVVNQSV9EaXNhYmxlSW50KFVTUElfVCAqdXNwaSwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICAvKiBEaXNhYmxlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaW5hY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfU1NJTkFDVF9JTlRfTUFTSykgPT0gVVNQSV9TU0lOQUNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+UFJPVElFTiAmPSB+VVNQSV9QUk9USUVOX1NTSU5BSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1NTQUNUX0lOVF9NQVNLKSA9PSBVU1BJX1NTQUNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+UFJPVElFTiAmPSB+VVNQSV9QUk9USUVOX1NTQUNUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHNsYXZlIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1NMVlRPX0lOVF9NQVNLKSA9PSBVU1BJX1NMVlRPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+UFJPVElFTiAmPSB+VVNQSV9QUk9USUVOX1NMVlRPSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHNsYXZlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9TTFZCRV9JTlRfTUFTSykgPT0gVVNQSV9TTFZCRV9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPlBST1RJRU4gJj0gflVTUElfUFJPVElFTl9TTFZCRUlFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBUWCB1bmRlciBydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfVFhVRFJfSU5UX01BU0spID09IFVTUElfVFhVRFJfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5CVUZDVEwgJj0gflVTUElfQlVGQ1RMX1RYVURSSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFJYIG92ZXJydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfUlhPVl9JTlRfTUFTSykgPT0gVVNQSV9SWE9WX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+QlVGQ1RMICY9IH5VU1BJX0JVRkNUTF9SWE9WSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFRYIHN0YXJ0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1RYU1RfSU5UX01BU0spID09IFVTUElfVFhTVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPklOVEVOICY9IH5VU1BJX0lOVEVOX1RYU1RJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgVFggZW5kIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1RYRU5EX0lOVF9NQVNLKSA9PSBVU1BJX1RYRU5EX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+SU5URU4gJj0gflVTUElfSU5URU5fVFhFTkRJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgUlggc3RhcnQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfUlhTVF9JTlRfTUFTSykgPT0gVVNQSV9SWFNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+SU5URU4gJj0gflVTUElfSU5URU5fUlhTVElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBSWCBlbmQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfUlhFTkRfSU5UX01BU0spID09IFVTUElfUlhFTkRfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5JTlRFTiAmPSB+VVNQSV9JTlRFTl9SWEVORElFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBzb3VyY2VzLgorICAqICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgc291cmNlLgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHQgZmxhZ3Mgd2lsbCBiZSByZWFkLiBJdCBpcyBjb21iaW5hdGlvbiBvZjoKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfU1NJTkFDVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TU0FDVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TTFZUT19JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TTFZCRV9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9UWFVEUl9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9SWE9WX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1RYU1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfVFhFTkRfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfUlhTVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9SWEVORF9JTlRfTUFTSworICAqIEByZXR1cm4gSW50ZXJydXB0IGZsYWdzIG9mIHNlbGVjdGVkIHNvdXJjZXMuCisgICovCit1aW50MzJfdCBVU1BJX0dldEludEZsYWcoVVNQSV9UICp1c3BpLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIHVpbnQzMl90IHUzMlByb3RTdGF0dXMsIHUzMkJ1ZlN0YXR1czsKKyAgICB1aW50MzJfdCB1MzJJbnRGbGFnID0gMFVMOworCisgICAgdTMyUHJvdFN0YXR1cyA9IHVzcGktPlBST1RTVFM7CisgICAgdTMyQnVmU3RhdHVzID0gdXNwaS0+QlVGU1RTOworCisgICAgLyogQ2hlY2sgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpbmFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9TU0lOQUNUX0lOVF9NQVNLKSAmJiAodTMyUHJvdFN0YXR1cyAmIFVTUElfUFJPVFNUU19TU0lOQUlGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVTUElfU1NJTkFDVF9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9TU0FDVF9JTlRfTUFTSykgJiYgKHUzMlByb3RTdGF0dXMgJiBVU1BJX1BST1RTVFNfU1NBQ1RJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVU1BJX1NTQUNUX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIHNsYXZlIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1NMVlRPX0lOVF9NQVNLKSAmJiAodTMyUHJvdFN0YXR1cyAmIFVTUElfUFJPVFNUU19TTFZUT0lGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVTUElfU0xWVE9fSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgc2xhdmUgYml0IGNvdW50IGVycm9yIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1NMVkJFX0lOVF9NQVNLKSAmJiAodTMyUHJvdFN0YXR1cyAmIFVTUElfUFJPVFNUU19TTFZCRUlGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVTUElfU0xWQkVfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgVFggdW5kZXIgcnVuIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1RYVURSX0lOVF9NQVNLKSAmJiAodTMyQnVmU3RhdHVzICYgVVNQSV9CVUZTVFNfVFhVRFJJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVU1BJX1RYVURSX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFJYIG92ZXJydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfUlhPVl9JTlRfTUFTSykgJiYgKHUzMkJ1ZlN0YXR1cyAmIFVTUElfQlVGU1RTX1JYT1ZJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVU1BJX1JYT1ZfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgVFggc3RhcnQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfVFhTVF9JTlRfTUFTSykgJiYgKHUzMlByb3RTdGF0dXMgJiBVU1BJX1BST1RTVFNfVFhTVElGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVTUElfVFhTVF9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBUWCBlbmQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfVFhFTkRfSU5UX01BU0spICYmICh1MzJQcm90U3RhdHVzICYgVVNQSV9QUk9UU1RTX1RYRU5ESUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVVNQSV9UWEVORF9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCBzdGFydCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9SWFNUX0lOVF9NQVNLKSAmJiAodTMyUHJvdFN0YXR1cyAmIFVTUElfUFJPVFNUU19SWFNUSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVVNQSV9SWFNUX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFJYIGVuZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9SWEVORF9JTlRfTUFTSykgJiYgKHUzMlByb3RTdGF0dXMgJiBVU1BJX1BST1RTVFNfUlhFTkRJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVU1BJX1JYRU5EX0lOVF9NQVNLOworICAgIH0KKworICAgIHJldHVybiB1MzJJbnRGbGFnOworfQorCisvKioKKyAgKiBAYnJpZWYgIENsZWFyIGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IHNvdXJjZXMuCisgICogICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdCBmbGFncyB3aWxsIGJlIGNsZWFyZWQuIEl0IGNvdWxkIGJlIHRoZSBjb21iaW5hdGlvbiBvZjoKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfU1NJTkFDVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TU0FDVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TTFZUT19JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TTFZCRV9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9UWFVEUl9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9SWE9WX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1RYU1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfVFhFTkRfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfUlhTVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9SWEVORF9JTlRfTUFTSworICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBVU1BJX0NsZWFySW50RmxhZyhVU1BJX1QgKnVzcGksIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgLyogQ2xlYXIgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpbmFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKHUzMk1hc2sgJiBVU1BJX1NTSU5BQ1RfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5QUk9UU1RTID0gVVNQSV9QUk9UU1RTX1NTSU5BSUZfTXNrOworICAgIH0KKworICAgIC8qIENsZWFyIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYodTMyTWFzayAmIFVTUElfU1NBQ1RfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5QUk9UU1RTID0gVVNQSV9QUk9UU1RTX1NTQUNUSUZfTXNrOworICAgIH0KKworICAgIC8qIENsZWFyIHNsYXZlIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYodTMyTWFzayAmIFVTUElfU0xWVE9fSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5QUk9UU1RTID0gVVNQSV9QUk9UU1RTX1NMVlRPSUZfTXNrOworICAgIH0KKworICAgIC8qIENsZWFyIHNsYXZlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKHUzMk1hc2sgJiBVU1BJX1NMVkJFX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+UFJPVFNUUyA9IFVTUElfUFJPVFNUU19TTFZCRUlGX01zazsKKyAgICB9CisKKyAgICAvKiBDbGVhciBUWCB1bmRlciBydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZih1MzJNYXNrICYgVVNQSV9UWFVEUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPkJVRlNUUyA9IFVTUElfQlVGU1RTX1RYVURSSUZfTXNrOworICAgIH0KKworICAgIC8qIENsZWFyIFJYIG92ZXJydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZih1MzJNYXNrICYgVVNQSV9SWE9WX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+QlVGU1RTID0gVVNQSV9CVUZTVFNfUlhPVklGX01zazsKKyAgICB9CisKKyAgICAvKiBDbGVhciBUWCBzdGFydCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKHUzMk1hc2sgJiBVU1BJX1RYU1RfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5QUk9UU1RTID0gVVNQSV9QUk9UU1RTX1RYU1RJRl9Nc2s7CisgICAgfQorCisgICAgLyogQ2xlYXIgVFggZW5kIGludGVycnVwdCBmbGFnICovCisgICAgaWYodTMyTWFzayAmIFVTUElfVFhFTkRfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5QUk9UU1RTID0gVVNQSV9QUk9UU1RTX1RYRU5ESUZfTXNrOworICAgIH0KKworICAgIC8qIENsZWFyIFJYIHN0YXJ0IGludGVycnVwdCBmbGFnICovCisgICAgaWYodTMyTWFzayAmIFVTUElfUlhTVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPlBST1RTVFMgPSBVU1BJX1BST1RTVFNfUlhTVElGX01zazsKKyAgICB9CisKKyAgICAvKiBDbGVhciBSWCBlbmQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZih1MzJNYXNrICYgVVNQSV9SWEVORF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPlBST1RTVFMgPSBVU1BJX1BST1RTVFNfUlhFTkRJRl9Nc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBVU0NJX1NQSSBzdGF0dXMuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBzb3VyY2VzLgorICAqICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBzb3VyY2UuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGZsYWdzIHdpbGwgYmUgcmVhZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX0JVU1lfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9SWF9FTVBUWV9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1JYX0ZVTExfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9UWF9FTVBUWV9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1RYX0ZVTExfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TU0xJTkVfU1RTX01BU0sKKyAgKiBAcmV0dXJuIEZsYWdzIG9mIHNlbGVjdGVkIHNvdXJjZXMuCisgICovCit1aW50MzJfdCBVU1BJX0dldFN0YXR1cyhVU1BJX1QgKnVzcGksIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgdWludDMyX3QgdTMyUHJvdFN0YXR1cywgdTMyQnVmU3RhdHVzOworICAgIHVpbnQzMl90IHUzMkZsYWcgPSAwVUw7CisKKyAgICB1MzJQcm90U3RhdHVzID0gdXNwaS0+UFJPVFNUUzsKKyAgICB1MzJCdWZTdGF0dXMgPSB1c3BpLT5CVUZTVFM7CisKKyAgICAvKiBDaGVjayBidXN5IHN0YXR1cyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9CVVNZX01BU0spICYmICh1MzJQcm90U3RhdHVzICYgVVNQSV9QUk9UU1RTX0JVU1lfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gVVNQSV9CVVNZX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgUlggZW1wdHkgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9SWF9FTVBUWV9NQVNLKSAmJiAodTMyQnVmU3RhdHVzICYgVVNQSV9CVUZTVFNfUlhFTVBUWV9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBVU1BJX1JYX0VNUFRZX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgUlggZnVsbCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1JYX0ZVTExfTUFTSykgJiYgKHUzMkJ1ZlN0YXR1cyAmIFVTUElfQlVGU1RTX1JYRlVMTF9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBVU1BJX1JYX0ZVTExfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBUWCBlbXB0eSBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1RYX0VNUFRZX01BU0spICYmICh1MzJCdWZTdGF0dXMgJiBVU1BJX0JVRlNUU19UWEVNUFRZX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFVTUElfVFhfRU1QVFlfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBUWCBmdWxsIGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfVFhfRlVMTF9NQVNLKSAmJiAodTMyQnVmU3RhdHVzICYgVVNQSV9CVUZTVFNfVFhGVUxMX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFVTUElfVFhfRlVMTF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFVTQ0lfU1BJX1NTIGxpbmUgc3RhdHVzICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1NTTElORV9TVFNfTUFTSykgJiYgKHUzMlByb3RTdGF0dXMgJiBVU1BJX1BST1RTVFNfU1NMSU5FX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFVTUElfU1NMSU5FX1NUU19NQVNLOworICAgIH0KKworICAgIHJldHVybiB1MzJGbGFnOworfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBVU0NJX1NQSSBXYWtlLXVwIEZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFVTUElfRW5hYmxlV2FrZXVwKFVTUElfVCAqdXNwaSkKK3sKKyAgICB1c3BpLT5XS0NUTCB8PSBVU1BJX1dLQ1RMX1dLRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgVVNDSV9TUEkgV2FrZS11cCBGdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBVU1BJX0Rpc2FibGVXYWtldXAoVVNQSV9UICp1c3BpKQoreworICAgIHVzcGktPldLQ1RMICY9IH5VU1BJX1dLQ1RMX1dLRU5fTXNrOworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfU1BJX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfU1BJX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy91c2NpX3VhcnQuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3VzY2lfdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YTBmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy91c2NpX3VhcnQuYwpAQCAtMCwwICsxLDcyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHVzY2lfdWFydC5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgVVNDSSBVQVJUIChVVUFSVCkgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgIk51TWljcm8uaCIKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBVU0NJX1VBUlRfRHJpdmVyIFVTQ0lfVUFSVCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBVU0NJX1VBUlRfRVhQT1JURURfRlVOQ1RJT05TIFVTQ0lfVUFSVCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDbGVhciBVU0NJX1VBUlQgc3BlY2lmaWVkIGludGVycnVwdCBmbGFnCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IHNvdXJjZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgc291cmNlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0IGZsYWdzIHdpbGwgYmUgY2xlYXJlZC4gSXQgY291bGQgYmUgdGhlIGNvbWJpbmF0aW9uIG9mOgorICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9BQlJfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUkxTX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX0JVRl9SWE9WX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1RYU1RfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfVFhFTkRfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUlhTVF9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9SWEVORF9JTlRfTUFTSworICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgVVNDSV9VQVJUIHJlbGF0ZWQgaW50ZXJydXB0IGZsYWdzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAqLworCit2b2lkIFVVQVJUX0NsZWFySW50RmxhZyhVVUFSVF9UKiB1dWFydCwgdWludDMyX3QgdTMyTWFzaykKK3sKKworICAgIGlmKHUzMk1hc2sgJiBVVUFSVF9BQlJfSU5UX01BU0spICAgLyogQ2xlYXIgQXV0by1iYXVkIFJhdGUgSW50ZXJydXB0ICovCisgICAgeworICAgICAgICB1dWFydC0+UFJPVFNUUyA9IFVVQVJUX1BST1RTVFNfQUJSREVUSUZfTXNrOworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBVVUFSVF9STFNfSU5UX01BU0spICAgLyogQ2xlYXIgUmVjZWl2ZSBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQgKi8KKyAgICB7CisgICAgICAgIHV1YXJ0LT5QUk9UU1RTID0gKFVVQVJUX1BST1RTVFNfQlJFQUtfTXNrIHwgVVVBUlRfUFJPVFNUU19GUk1FUlJfTXNrIHwgVVVBUlRfUFJPVFNUU19QQVJJVFlFUlJfTXNrKTsKKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgVVVBUlRfQlVGX1JYT1ZfSU5UX01BU0spICAgLyogQ2xlYXIgUmVjZWl2ZSBCdWZmZXIgT3Zlci1ydW4gRXJyb3IgSW50ZXJydXB0ICovCisgICAgeworICAgICAgICB1dWFydC0+QlVGU1RTID0gVVVBUlRfQlVGU1RTX1JYT1ZJRl9Nc2s7CisgICAgfQorCisgICAgaWYodTMyTWFzayAmIFVVQVJUX1RYU1RfSU5UX01BU0spICAgLyogQ2xlYXIgVHJhbnNtaXQgU3RhcnQgSW50ZXJydXB0ICovCisgICAgeworICAgICAgICB1dWFydC0+UFJPVFNUUyA9IFVVQVJUX1BST1RTVFNfVFhTVElGX01zazsKKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgVVVBUlRfVFhFTkRfSU5UX01BU0spICAgLyogQ2xlYXIgVHJhbnNtaXQgRW5kIEludGVycnVwdCAqLworICAgIHsKKyAgICAgICAgdXVhcnQtPlBST1RTVFMgPSBVVUFSVF9QUk9UU1RTX1RYRU5ESUZfTXNrOworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBVVUFSVF9SWFNUX0lOVF9NQVNLKSAgIC8qIENsZWFyIFJlY2VpdmUgU3RhcnQgSW50ZXJydXB0ICovCisgICAgeworICAgICAgICB1dWFydC0+UFJPVFNUUyA9IFVVQVJUX1BST1RTVFNfUlhTVElGX01zazsKKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgVVVBUlRfUlhFTkRfSU5UX01BU0spICAgLyogQ2xlYXIgUmVjZWl2ZSBFbmQgSW50ZXJydXB0ICovCisgICAgeworICAgICAgICB1dWFydC0+UFJPVFNUUyA9IFVVQVJUX1BST1RTVFNfUlhFTkRJRl9Nc2s7CisgICAgfQorCit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEdldCBVU0NJX1VBUlQgc3BlY2lmaWVkIGludGVycnVwdCBmbGFnCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IHNvdXJjZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgc291cmNlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0IGZsYWdzIHdpbGwgYmUgcmVhZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX0FCUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9STFNfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfQlVGX1JYT1ZfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfVFhTVF9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9UWEVORF9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9SWFNUX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1JYRU5EX0lOVF9NQVNLCisgKgorICogICAgQHJldHVybiAgICAgICBJbnRlcnJ1cHQgZmxhZ3Mgb2Ygc2VsZWN0ZWQgc291cmNlcy4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBVU0NJX1VBUlQgcmVsYXRlZCBpbnRlcnJ1cHQgZmxhZ3Mgc3BlY2lmaWVkIGJ5IHUzMk1hc2sgcGFyYW1ldGVyLgorICovCisKK3VpbnQzMl90IFVVQVJUX0dldEludEZsYWcoVVVBUlRfVCogdXVhcnQsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgdWludDMyX3QgdTMySW50RmxhZyA9IDB1bDsKKyAgICB1aW50MzJfdCB1MzJUbXAxLCB1MzJUbXAyOworCisgICAgLyogQ2hlY2sgQXV0by1iYXVkIFJhdGUgSW50ZXJydXB0IEZsYWcgKi8KKyAgICB1MzJUbXAxID0gKHUzMk1hc2sgJiBVVUFSVF9BQlJfSU5UX01BU0spOworICAgIHUzMlRtcDIgPSAodXVhcnQtPlBST1RTVFMgJiBVVUFSVF9QUk9UU1RTX0FCUkRFVElGX01zayk7CisgICAgaWYodTMyVG1wMSAmJiB1MzJUbXAyKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVVUFSVF9BQlJfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgUmVjZWl2ZSBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQgRmxhZyAqLworICAgIHUzMlRtcDEgPSAodTMyTWFzayAmIFVVQVJUX1JMU19JTlRfTUFTSyk7CisgICAgdTMyVG1wMiA9ICh1dWFydC0+UFJPVFNUUyAmIChVVUFSVF9QUk9UU1RTX0JSRUFLX01zayB8IFVVQVJUX1BST1RTVFNfRlJNRVJSX01zayB8IFVVQVJUX1BST1RTVFNfUEFSSVRZRVJSX01zaykpOworICAgIGlmKHUzMlRtcDEgJiYgdTMyVG1wMikKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVVVBUlRfUkxTX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFJlY2VpdmUgQnVmZmVyIE92ZXItcnVuIEVycm9yIEludGVycnVwdCBGbGFnICovCisgICAgdTMyVG1wMSA9ICh1MzJNYXNrICYgVVVBUlRfQlVGX1JYT1ZfSU5UX01BU0spOworICAgIHUzMlRtcDIgPSAodXVhcnQtPkJVRlNUUyAmIFVVQVJUX0JVRlNUU19SWE9WSUZfTXNrKTsKKyAgICBpZih1MzJUbXAxICYmIHUzMlRtcDIpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVVQVJUX0JVRl9SWE9WX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFRyYW5zbWl0IFN0YXJ0IEludGVycnVwdCBGbGFnICovCisgICAgdTMyVG1wMSA9ICh1MzJNYXNrICYgVVVBUlRfVFhTVF9JTlRfTUFTSyk7CisgICAgdTMyVG1wMiA9ICh1dWFydC0+UFJPVFNUUyAmIFVVQVJUX1BST1RTVFNfVFhTVElGX01zayk7CisgICAgaWYodTMyVG1wMSAmJiB1MzJUbXAyKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVVUFSVF9UWFNUX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFRyYW5zbWl0IEVuZCBJbnRlcnJ1cHQgRmxhZyAqLworICAgIHUzMlRtcDEgPSAodTMyTWFzayAmIFVVQVJUX1RYRU5EX0lOVF9NQVNLKTsKKyAgICB1MzJUbXAyID0gKHV1YXJ0LT5QUk9UU1RTICYgVVVBUlRfUFJPVFNUU19UWEVORElGX01zayk7CisgICAgaWYodTMyVG1wMSAmJiB1MzJUbXAyKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVVUFSVF9UWEVORF9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSZWNlaXZlIFN0YXJ0IEludGVycnVwdCBGbGFnICovCisgICAgdTMyVG1wMSA9ICh1MzJNYXNrICYgVVVBUlRfUlhTVF9JTlRfTUFTSyk7CisgICAgdTMyVG1wMiA9ICh1dWFydC0+UFJPVFNUUyAmIFVVQVJUX1BST1RTVFNfUlhTVElGX01zayk7CisgICAgaWYodTMyVG1wMSAmJiB1MzJUbXAyKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVVUFSVF9SWFNUX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFJlY2VpdmUgRW5kIEludGVycnVwdCBGbGFnICovCisgICAgdTMyVG1wMSA9ICh1MzJNYXNrICYgVVVBUlRfUlhFTkRfSU5UX01BU0spOworICAgIHUzMlRtcDIgPSAodXVhcnQtPlBST1RTVFMgJiBVVUFSVF9QUk9UU1RTX1JYRU5ESUZfTXNrKTsKKyAgICBpZih1MzJUbXAxICYmIHUzMlRtcDIpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVVQVJUX1JYRU5EX0lOVF9NQVNLOworICAgIH0KKworICAgIHJldHVybiB1MzJJbnRGbGFnOworfQorCisKKy8qKgorICogIEBicmllZiAgICAgIERpc2FibGUgVVNDSV9VQVJUIGZ1bmN0aW9uIG1vZGUKKyAqCisgKiAgQHBhcmFtW2luXSAgdXVhcnQgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlLgorICoKKyAqICBAcmV0dXJuICAgICBOb25lCisgKgorICogIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgVVNDSV9VQVJUIGZ1bmN0aW9uIG1vZGUuCisgKi8KK3ZvaWQgVVVBUlRfQ2xvc2UoVVVBUlRfVCogdXVhcnQpCit7CisgICAgdXVhcnQtPkNUTCA9IDBVTDsKK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRGlzYWJsZSBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IGVuYWJsZSBiaXQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHRzIHdpbGwgYmUgZGlzYWJsZWQuIEl0IGlzIGNvbWJpbmF0aW9uIG9mOgorICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9BQlJfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUkxTX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX0JVRl9SWE9WX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1RYU1RfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfVFhFTkRfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUlhTVF9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9SWEVORF9JTlRfTUFTSworICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZWQgVVNDSV9VQVJUIHJlbGF0ZWQgaW50ZXJydXB0cyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgKi8KK3ZvaWQgVVVBUlRfRGlzYWJsZUludChVVUFSVF9UKiB1dWFydCwgdWludDMyX3QgdTMyTWFzaykKK3sKKworICAgIC8qIERpc2FibGUgQXV0by1iYXVkIHJhdGUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVVQVJUX0FCUl9JTlRfTUFTSykgPT0gVVVBUlRfQUJSX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXVhcnQtPlBST1RJRU4gJj0gflVVQVJUX1BST1RJRU5fQUJSSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHJlY2VpdmUgbGluZSBzdGF0dXMgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVVQVJUX1JMU19JTlRfTUFTSykgPT0gVVVBUlRfUkxTX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXVhcnQtPlBST1RJRU4gJj0gflVVQVJUX1BST1RJRU5fUkxTSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFJYIG92ZXJydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVVQVJUX0JVRl9SWE9WX0lOVF9NQVNLKSA9PSBVVUFSVF9CVUZfUlhPVl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHV1YXJ0LT5CVUZDVEwgJj0gflVVQVJUX0JVRkNUTF9SWE9WSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFRYIHN0YXJ0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVVUFSVF9UWFNUX0lOVF9NQVNLKSA9PSBVVUFSVF9UWFNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXVhcnQtPklOVEVOICY9IH5VVUFSVF9JTlRFTl9UWFNUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFRYIGVuZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVVBUlRfVFhFTkRfSU5UX01BU0spID09IFVVQVJUX1RYRU5EX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXVhcnQtPklOVEVOICY9IH5VVUFSVF9JTlRFTl9UWEVORElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBSWCBzdGFydCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVVBUlRfUlhTVF9JTlRfTUFTSykgPT0gVVVBUlRfUlhTVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHV1YXJ0LT5JTlRFTiAmPSB+VVVBUlRfSU5URU5fUlhTVElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBSWCBlbmQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVVQVJUX1JYRU5EX0lOVF9NQVNLKSA9PSBVVUFSVF9SWEVORF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHV1YXJ0LT5JTlRFTiAmPSB+VVVBUlRfSU5URU5fUlhFTkRJRU5fTXNrOworICAgIH0KK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRW5hYmxlIGludGVycnVwdCBmdW5jdGlvbi4KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyTWFzayAgICAgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBlbmFibGUgYml0cy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgZW5hYmxlIGJpdC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9BQlJfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1JMU19JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfQlVGX1JYT1ZfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1RYU1RfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1RYRU5EX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9SWFNUX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9SWEVORF9JTlRfTUFTSworICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIFVTQ0lfVUFSVCByZWxhdGVkIGludGVycnVwdHMgc3BlY2lmaWVkIGJ5IHUzMk1hc2sgcGFyYW1ldGVyLi4KKyAqLwordm9pZCBVVUFSVF9FbmFibGVJbnQoVVVBUlRfVCogIHV1YXJ0LCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIC8qIEVuYWJsZSBBdXRvLWJhdWQgcmF0ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVVBUlRfQUJSX0lOVF9NQVNLKSA9PSBVVUFSVF9BQlJfSU5UX01BU0spCisgICAgeworICAgICAgICB1dWFydC0+UFJPVElFTiB8PSBVVUFSVF9QUk9USUVOX0FCUklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHJlY2VpdmUgbGluZSBzdGF0dXMgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVVQVJUX1JMU19JTlRfTUFTSykgPT0gVVVBUlRfUkxTX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXVhcnQtPlBST1RJRU4gfD0gVVVBUlRfUFJPVElFTl9STFNJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBSWCBvdmVycnVuIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVVUFSVF9CVUZfUlhPVl9JTlRfTUFTSykgPT0gVVVBUlRfQlVGX1JYT1ZfSU5UX01BU0spCisgICAgeworICAgICAgICB1dWFydC0+QlVGQ1RMIHw9IFVVQVJUX0JVRkNUTF9SWE9WSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgVFggc3RhcnQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVVQVJUX1RYU1RfSU5UX01BU0spID09IFVVQVJUX1RYU1RfSU5UX01BU0spCisgICAgeworICAgICAgICB1dWFydC0+SU5URU4gfD0gVVVBUlRfSU5URU5fVFhTVElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFRYIGVuZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVVBUlRfVFhFTkRfSU5UX01BU0spID09IFVVQVJUX1RYRU5EX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXVhcnQtPklOVEVOIHw9IFVVQVJUX0lOVEVOX1RYRU5ESUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgUlggc3RhcnQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVVQVJUX1JYU1RfSU5UX01BU0spID09IFVVQVJUX1JYU1RfSU5UX01BU0spCisgICAgeworICAgICAgICB1dWFydC0+SU5URU4gfD0gVVVBUlRfSU5URU5fUlhTVElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFJYIGVuZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVVBUlRfUlhFTkRfSU5UX01BU0spID09IFVVQVJUX1JYRU5EX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXVhcnQtPklOVEVOIHw9IFVVQVJUX0lOVEVOX1JYRU5ESUVOX01zazsKKyAgICB9Cit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIE9wZW4gYW5kIHNldCBVU0NJX1VBUlQgZnVuY3Rpb24KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMmJhdWRyYXRlICAgICBUaGUgYmF1ZCByYXRlIG9mIFVTQ0lfVUFSVCBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBSZWFsIGJhdWQgcmF0ZSBvZiBVU0NJX1VBUlQgbW9kdWxlLgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBmdW5jdGlvbiB1c2UgdG8gZW5hYmxlIFVTQ0lfVUFSVCBmdW5jdGlvbiBhbmQgc2V0IGJhdWQtcmF0ZS4KKyAqLwordWludDMyX3QgVVVBUlRfT3BlbihVVUFSVF9UKiB1dWFydCwgdWludDMyX3QgdTMyYmF1ZHJhdGUpCit7CisgICAgdWludDMyX3QgdTMyUENMS0ZyZXEsIHUzMlBEU0NudCwgdTMyRFNDbnQsIHUzMkNsa0RpdjsKKyAgICB1aW50MzJfdCB1MzJUbXAsIHUzMlRtcDIsIHUzMk1pbiwgdTMyTWluQ2xrRGl2LCB1MzJNaW5EU0NudDsKKyAgICB1aW50MzJfdCB1MzJEaXY7CisKKyAgICAvKiBHZXQgUENMSyBmcmVxdWVuY3kgKi8KKyAgICBpZigodXVhcnQgPT0gVVVBUlQwKSB8fCAodXVhcnQgPT0gVVVBUlQwX05TKSkKKyAgICB7CisgICAgICAgIHUzMlBDTEtGcmVxID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJQQ0xLRnJlcSA9IENMS19HZXRQQ0xLMUZyZXEoKTsKKyAgICB9CisKKyAgICAvKiBDYWxjdWxhdGUgYmF1ZCByYXRlIGRpdmlkZXIgKi8KKyAgICB1MzJEaXYgPSB1MzJQQ0xLRnJlcSAvIHUzMmJhdWRyYXRlOworICAgIHUzMlRtcCA9ICh1MzJQQ0xLRnJlcSAvIHUzMkRpdikgLSB1MzJiYXVkcmF0ZTsKKyAgICB1MzJUbXAyID0gdTMyYmF1ZHJhdGUgLSAodTMyUENMS0ZyZXEgLyAodTMyRGl2ICsgMXVsKSk7CisKKyAgICBpZih1MzJUbXAgPj0gdTMyVG1wMikgdTMyRGl2ID0gdTMyRGl2ICsgMXVsOworCisgICAgaWYodTMyRGl2ID49IDY1NTM2dWwpCisgICAgeworCisgICAgICAgIC8qIFNldCB0aGUgc21hbGxlc3QgYmF1ZCByYXRlIHRoYXQgVVNDSV9VQVJUIGNhbiBnZW5lcmF0ZSAqLworICAgICAgICB1MzJQRFNDbnQgPSAweDR1bDsKKyAgICAgICAgdTMyTWluRFNDbnQgPSAweDEwdWw7CisgICAgICAgIHUzMk1pbkNsa0RpdiA9IDB4NDAwdWw7CisKKyAgICB9CisgICAgZWxzZQorICAgIHsKKworICAgICAgICB1MzJUbXAgPSAweDQwMHVsICogMHgxMHVsOworICAgICAgICBmb3IodTMyUERTQ250ID0gMXVsOyB1MzJQRFNDbnQgPD0gMHgwNHVsOyB1MzJQRFNDbnQrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYodTMyRGl2IDw9ICh1MzJUbXAgKiB1MzJQRFNDbnQpKSBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHUzMlBEU0NudCA+IDB4NHVsKSB1MzJQRFNDbnQgPSAweDR1bDsKKworICAgICAgICB1MzJEaXYgPSB1MzJEaXYgLyB1MzJQRFNDbnQ7CisKKyAgICAgICAgLyogRmluZCBiZXN0IHNvbHV0aW9uICovCisgICAgICAgIHUzMk1pbiA9ICh1aW50MzJfdCkgLSAxOworICAgICAgICB1MzJNaW5EU0NudCA9IDB1bDsKKyAgICAgICAgdTMyTWluQ2xrRGl2ID0gMHVsOworICAgICAgICB1MzJUbXAgPSAwdWw7CisKKyAgICAgICAgZm9yKHUzMkRTQ250ID0gNnVsOyB1MzJEU0NudCA8PSAweDEwdWw7IHUzMkRTQ250KyspICAgLyogRFNDTlQgY291bGQgYmUgMHg1fjB4RiAqLworICAgICAgICB7CisKKyAgICAgICAgICAgIHUzMkNsa0RpdiA9IHUzMkRpdiAvIHUzMkRTQ250OworCisgICAgICAgICAgICBpZih1MzJDbGtEaXYgPiAweDQwMHVsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa0RpdiA9IDB4NDAwdWw7CisgICAgICAgICAgICAgICAgdTMyVG1wID0gdTMyRGl2IC0gKHUzMkNsa0RpdiAqIHUzMkRTQ250KTsKKyAgICAgICAgICAgICAgICB1MzJUbXAyID0gdTMyVG1wICsgMXVsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMlRtcCA9IHUzMkRpdiAtICh1MzJDbGtEaXYgKiB1MzJEU0NudCk7CisgICAgICAgICAgICAgICAgdTMyVG1wMiA9ICgodTMyQ2xrRGl2ICsgMXVsKSAqIHUzMkRTQ250KSAtIHUzMkRpdjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYodTMyVG1wID49IHUzMlRtcDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrRGl2ID0gdTMyQ2xrRGl2ICsgMXVsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB1MzJUbXAyID0gdTMyVG1wOworCisgICAgICAgICAgICBpZih1MzJUbXAyIDwgdTMyTWluKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMk1pbiA9IHUzMlRtcDI7CisgICAgICAgICAgICAgICAgdTMyTWluRFNDbnQgPSB1MzJEU0NudDsKKyAgICAgICAgICAgICAgICB1MzJNaW5DbGtEaXYgPSB1MzJDbGtEaXY7CisKKyAgICAgICAgICAgICAgICAvKiBCcmVhayB3aGVuIGdldCBnb29kIHJlc3VsdHMgKi8KKyAgICAgICAgICAgICAgICBpZih1MzJNaW4gPT0gMHVsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisKKyAgICAvKiBFbmFibGUgVVNDSV9VQVJUIHByb3RvY29sICovCisgICAgdXVhcnQtPkNUTCAmPSB+VVVBUlRfQ1RMX0ZVTk1PREVfTXNrOworICAgIHV1YXJ0LT5DVEwgPSAydWwgPDwgVVVBUlRfQ1RMX0ZVTk1PREVfUG9zOworCisgICAgLyogU2V0IFVTQ0lfVUFSVCBsaW5lIGNvbmZpZ3VyYXRpb24gKi8KKyAgICB1dWFydC0+TElORUNUTCA9IFVVQVJUX1dPUkRfTEVOXzggfCBVVUFSVF9MSU5FQ1RMX0xTQl9Nc2s7CisgICAgdXVhcnQtPkRBVElOMCA9ICgydWwgPDwgVVVBUlRfREFUSU4wX0VER0VERVRfUG9zKTsgIC8qIFNldCBmYWxsaW5nIGVkZ2UgZGV0ZWN0aW9uICovCisKKyAgICAvKiBTZXQgVVNDSV9VQVJUIGJhdWQgcmF0ZSAqLworICAgIHV1YXJ0LT5CUkdFTiA9ICgodTMyTWluQ2xrRGl2IC0gMXVsKSA8PCBVVUFSVF9CUkdFTl9DTEtESVZfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgKCh1MzJNaW5EU0NudCAtIDF1bCkgPDwgVVVBUlRfQlJHRU5fRFNDTlRfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgKCh1MzJQRFNDbnQgLSAxdWwpIDw8IFVVQVJUX0JSR0VOX1BEU0NOVF9Qb3MpOworCisgICAgdXVhcnQtPlBST1RDVEwgfD0gVVVBUlRfUFJPVENUTF9QUk9URU5fTXNrOworCisgICAgcmV0dXJuICh1MzJQQ0xLRnJlcSAvIHUzMlBEU0NudCAvIHUzMk1pbkRTQ250IC8gdTMyTWluQ2xrRGl2KTsKK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgUmVhZCBVU0NJX1VBUlQgZGF0YQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgcHU4UnhCdWYgICAgICAgIFRoZSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZGF0YSBvZiByZWNlaXZlIGJ1ZmZlci4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyUmVhZEJ5dGVzICAgIFRoZSByZWFkIGJ5dGVzIG51bWJlciBvZiBkYXRhLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgUmVjZWl2ZSBieXRlIGNvdW50CisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIFJ4IGRhdGEgZnJvbSBSWCBidWZmZXIgYW5kIHRoZSBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHB1OFJ4QnVmLgorICovCit1aW50MzJfdCBVVUFSVF9SZWFkKFVVQVJUX1QqIHV1YXJ0LCB1aW50OF90IHB1OFJ4QnVmW10sIHVpbnQzMl90IHUzMlJlYWRCeXRlcykKK3sKKyAgICB1aW50MzJfdCAgdTMyQ291bnQsIHUzMmRlbGF5bm87CisKKyAgICBmb3IodTMyQ291bnQgPSAwdWw7IHUzMkNvdW50IDwgdTMyUmVhZEJ5dGVzOyB1MzJDb3VudCsrKQorICAgIHsKKyAgICAgICAgdTMyZGVsYXlubyA9IDB1bDsKKworICAgICAgICB3aGlsZSh1dWFydC0+QlVGU1RTICYgVVVBUlRfQlVGU1RTX1JYRU1QVFlfTXNrKSAgIC8qIENoZWNrIFJYIGVtcHR5ID0+IGZhaWxlZCAqLworICAgICAgICB7CisgICAgICAgICAgICB1MzJkZWxheW5vKys7CisgICAgICAgICAgICBpZih1MzJkZWxheW5vID49IDB4NDAwMDAwMDB1bCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKHUzMmRlbGF5bm8gPj0gMHg0MDAwMDAwMHVsKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHB1OFJ4QnVmW3UzMkNvdW50XSA9ICh1aW50OF90KXV1YXJ0LT5SWERBVDsgICAgLyogR2V0IERhdGEgZnJvbSBVU0NJIFJYICAqLworICAgIH0KKworICAgIHJldHVybiB1MzJDb3VudDsKKworfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBTZXQgVVNDSV9VQVJUIGxpbmUgY29uZmlndXJhdGlvbgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyYmF1ZHJhdGUgICAgIFRoZSByZWdpc3RlciB2YWx1ZSBvZiBiYXVkIHJhdGUgb2YgVVNDSV9VQVJUIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHUzMmJhdWRyYXRlID0gMCwgVVNDSV9VQVJUIGJhdWQgcmF0ZSB3aWxsIG5vdCBjaGFuZ2UuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMmRhdGFfd2lkdGggICBUaGUgZGF0YSBsZW5ndGggb2YgVVNDSV9VQVJUIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9XT1JEX0xFTl82CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfV09SRF9MRU5fNworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1dPUkRfTEVOXzgKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9XT1JEX0xFTl85CisgKiAgICBAcGFyYW1baW5dICAgIHUzMnBhcml0eSAgICAgICBUaGUgcGFyaXR5IHNldHRpbmcgKG5vbmUvb2RkL2V2ZW4pIG9mIFVTQ0lfVUFSVCBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUEFSSVRZX05PTkUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QQVJJVFlfT0RECisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUEFSSVRZX0VWRU4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyc3RvcF9iaXRzICAgIFRoZSBzdG9wIGJpdCBsZW5ndGggKDEvMiBiaXQpIG9mIFVTQ0lfVUFSVCBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfU1RPUF9CSVRfMQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1NUT1BfQklUXzIKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIFJlYWwgYmF1ZCByYXRlIG9mIFVTQ0lfVUFSVCBtb2R1bGUuCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIGZ1bmN0aW9uIHVzZSB0byBjb25maWcgVVNDSV9VQVJUIGxpbmUgc2V0dGluZy4KKyAqLwordWludDMyX3QgVVVBUlRfU2V0TGluZV9Db25maWcoVVVBUlRfVCogdXVhcnQsIHVpbnQzMl90IHUzMmJhdWRyYXRlLCB1aW50MzJfdCB1MzJkYXRhX3dpZHRoLCB1aW50MzJfdCB1MzJwYXJpdHksIHVpbnQzMl90IHUzMnN0b3BfYml0cykKK3sKKyAgICB1aW50MzJfdCB1MzJQQ0xLRnJlcSwgdTMyUERTQ250LCB1MzJEU0NudCwgdTMyQ2xrRGl2OworICAgIHVpbnQzMl90IHUzMlRtcCwgdTMyVG1wMiwgdTMyTWluLCB1MzJNaW5DbGtEaXYsIHUzMk1pbkRTQ250OworICAgIHVpbnQzMl90IHUzMkRpdjsKKworICAgIC8qIEdldCBQQ0xLIGZyZXF1ZW5jeSAqLworICAgIGlmKCh1dWFydCA9PSBVVUFSVDApIHx8ICh1dWFydCA9PSBVVUFSVDBfTlMpKQorICAgIHsKKyAgICAgICAgdTMyUENMS0ZyZXEgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgfQorICAgIGVsc2UgICAgIC8qIFVVQVJUMSAqLworICAgIHsKKyAgICAgICAgdTMyUENMS0ZyZXEgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisgICAgfQorCisgICAgaWYodTMyYmF1ZHJhdGUgIT0gMHVsKQorICAgIHsKKworICAgICAgICAvKiBDYWxjdWxhdGUgYmF1ZCByYXRlIGRpdmlkZXIgKi8KKyAgICAgICAgdTMyRGl2ID0gdTMyUENMS0ZyZXEgLyB1MzJiYXVkcmF0ZTsKKyAgICAgICAgdTMyVG1wID0gKHUzMlBDTEtGcmVxIC8gdTMyRGl2KSAtIHUzMmJhdWRyYXRlOworICAgICAgICB1MzJUbXAyID0gdTMyYmF1ZHJhdGUgLSAodTMyUENMS0ZyZXEgLyAodTMyRGl2ICsgMXVsKSk7CisKKyAgICAgICAgaWYodTMyVG1wID49IHUzMlRtcDIpIHUzMkRpdiA9IHUzMkRpdiArIDF1bDsKKworICAgICAgICBpZih1MzJEaXYgPj0gNjU1MzZ1bCkKKyAgICAgICAgeworCisgICAgICAgICAgICAvKiBTZXQgdGhlIHNtYWxsZXN0IGJhdWQgcmF0ZSB0aGF0IFVTQ0lfVUFSVCBjYW4gZ2VuZXJhdGUgKi8KKyAgICAgICAgICAgIHUzMlBEU0NudCA9IDB4NHVsOworICAgICAgICAgICAgdTMyTWluRFNDbnQgPSAweDEwdWw7CisgICAgICAgICAgICB1MzJNaW5DbGtEaXYgPSAweDQwMHVsOworCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisKKyAgICAgICAgICAgIHUzMlRtcCA9IDB4NDAwdWwgKiAweDEwdWw7CisgICAgICAgICAgICBmb3IodTMyUERTQ250ID0gMXVsOyB1MzJQRFNDbnQgPD0gMHgwNHVsOyB1MzJQRFNDbnQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZih1MzJEaXYgPD0gKHUzMlRtcCAqIHUzMlBEU0NudCkpIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZih1MzJQRFNDbnQgPiAweDR1bCkgdTMyUERTQ250ID0gMHg0dWw7CisKKyAgICAgICAgICAgIHUzMkRpdiA9IHUzMkRpdiAvIHUzMlBEU0NudDsKKworICAgICAgICAgICAgLyogRmluZCBiZXN0IHNvbHV0aW9uICovCisgICAgICAgICAgICB1MzJNaW4gPSAodWludDMyX3QpIC0gMTsKKyAgICAgICAgICAgIHUzMk1pbkRTQ250ID0gMHVsOworICAgICAgICAgICAgdTMyTWluQ2xrRGl2ID0gMHVsOworCisgICAgICAgICAgICBmb3IodTMyRFNDbnQgPSA2dWw7IHUzMkRTQ250IDw9IDB4MTB1bDsgdTMyRFNDbnQrKykgICAvKiBEU0NOVCBjb3VsZCBiZSAweDV+MHhGICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrRGl2ID0gdTMyRGl2IC8gdTMyRFNDbnQ7CisKKyAgICAgICAgICAgICAgICBpZih1MzJDbGtEaXYgPiAweDQwMHVsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyQ2xrRGl2ID0gMHg0MDB1bDsKKyAgICAgICAgICAgICAgICAgICAgdTMyVG1wID0gdTMyRGl2IC0gKHUzMkNsa0RpdiAqIHUzMkRTQ250KTsKKyAgICAgICAgICAgICAgICAgICAgdTMyVG1wMiA9IHUzMlRtcCArIDF1bDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyVG1wID0gdTMyRGl2IC0gKHUzMkNsa0RpdiAqIHUzMkRTQ250KTsKKyAgICAgICAgICAgICAgICAgICAgdTMyVG1wMiA9ICgodTMyQ2xrRGl2ICsgMXVsKSAqIHUzMkRTQ250KSAtIHUzMkRpdjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZih1MzJUbXAgPj0gdTMyVG1wMikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMkNsa0RpdiA9IHUzMkNsa0RpdiArIDF1bDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB1MzJUbXAyID0gdTMyVG1wOworCisgICAgICAgICAgICAgICAgaWYodTMyVG1wMiA8IHUzMk1pbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMk1pbiA9IHUzMlRtcDI7CisgICAgICAgICAgICAgICAgICAgIHUzMk1pbkRTQ250ID0gdTMyRFNDbnQ7CisgICAgICAgICAgICAgICAgICAgIHUzMk1pbkNsa0RpdiA9IHUzMkNsa0RpdjsKKworICAgICAgICAgICAgICAgICAgICAvKiBCcmVhayB3aGVuIGdldCBnb29kIHJlc3VsdHMgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYodTMyTWluID09IDB1bCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNldCBVU0NJX1VBUlQgYmF1ZCByYXRlICovCisgICAgICAgIHV1YXJ0LT5CUkdFTiA9ICgodTMyTWluQ2xrRGl2IC0gMXVsKSA8PCBVVUFSVF9CUkdFTl9DTEtESVZfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICAgICgodTMyTWluRFNDbnQgLSAxdWwpIDw8IFVVQVJUX0JSR0VOX0RTQ05UX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAgICAoKHUzMlBEU0NudCAtIDF1bCkgPDwgVVVBUlRfQlJHRU5fUERTQ05UX1Bvcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMlBEU0NudCA9ICgodXVhcnQtPkJSR0VOICYgVVVBUlRfQlJHRU5fUERTQ05UX01zaykgPj4gVVVBUlRfQlJHRU5fUERTQ05UX1BvcykgKyAxdWw7CisgICAgICAgIHUzMk1pbkRTQ250ID0gKCh1dWFydC0+QlJHRU4gJiBVVUFSVF9CUkdFTl9EU0NOVF9Nc2spID4+IFVVQVJUX0JSR0VOX0RTQ05UX1BvcykgKyAxdWw7CisgICAgICAgIHUzMk1pbkNsa0RpdiA9ICgodXVhcnQtPkJSR0VOICYgVVVBUlRfQlJHRU5fQ0xLRElWX01zaykgPj4gVVVBUlRfQlJHRU5fQ0xLRElWX1BvcykgKyAxdWw7CisgICAgfQorCisgICAgLyogU2V0IFVTQ0lfVUFSVCBsaW5lIGNvbmZpZ3VyYXRpb24gKi8KKyAgICB1dWFydC0+TElORUNUTCA9ICh1dWFydC0+TElORUNUTCAmIH5VVUFSVF9MSU5FQ1RMX0RXSURUSF9Nc2spIHwgdTMyZGF0YV93aWR0aDsKKyAgICB1dWFydC0+UFJPVENUTCA9ICh1dWFydC0+UFJPVENUTCAmIH4oVVVBUlRfUFJPVENUTF9TVElDS0VOX01zayB8IFVVQVJUX1BST1RDVExfRVZFTlBBUklUWV9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVUFSVF9QUk9UQ1RMX1BBUklUWUVOX01zaykpIHwgdTMycGFyaXR5OworICAgIHV1YXJ0LT5QUk9UQ1RMID0gKHV1YXJ0LT5QUk9UQ1RMICYgflVVQVJUX1BST1RDVExfU1RPUEJfTXNrKSB8IHUzMnN0b3BfYml0czsKKworICAgIHJldHVybiAodTMyUENMS0ZyZXEgLyB1MzJQRFNDbnQgLyB1MzJNaW5EU0NudCAvIHUzMk1pbkNsa0Rpdik7Cit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFdyaXRlIFVTQ0lfVUFSVCBkYXRhCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICBwdThUeEJ1ZiAgICAgICAgVGhlIGJ1ZmZlciB0byBzZW5kIHRoZSBkYXRhIHRvIFVTQ0kgdHJhbnNtaXNzaW9uIGJ1ZmZlci4KKyAqICAgIEBwYXJhbVtvdXRdICAgdTMyV3JpdGVCeXRlcyAgIFRoZSBieXRlIG51bWJlciBvZiBkYXRhLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgVHJhbnNmZXIgYnl0ZSBjb3VudAorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHRvIHdyaXRlIGRhdGEgaW50byBUWCBidWZmZXIgdG8gdHJhbnNtaXQgZGF0YSBieSBVU0NJX1VBUlQuCisgKi8KK3VpbnQzMl90IFVVQVJUX1dyaXRlKFVVQVJUX1QqIHV1YXJ0LCB1aW50OF90IHB1OFR4QnVmW10sIHVpbnQzMl90IHUzMldyaXRlQnl0ZXMpCit7CisgICAgdWludDMyX3QgIHUzMkNvdW50LCB1MzJkZWxheW5vOworCisgICAgZm9yKHUzMkNvdW50ID0gMHVsOyB1MzJDb3VudCAhPSB1MzJXcml0ZUJ5dGVzOyB1MzJDb3VudCsrKQorICAgIHsKKyAgICAgICAgdTMyZGVsYXlubyA9IDB1bDsKKyAgICAgICAgd2hpbGUoKHV1YXJ0LT5CVUZTVFMgJiBVVUFSVF9CVUZTVFNfVFhFTVBUWV9Nc2spID09IDB1bCkgICAvKiBXYWl0IFR4IGVtcHR5ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMmRlbGF5bm8rKzsKKyAgICAgICAgICAgIGlmKHUzMmRlbGF5bm8gPj0gMHg0MDAwMDAwMHVsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYodTMyZGVsYXlubyA+PSAweDQwMDAwMDAwdWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgdXVhcnQtPlRYREFUID0gKHVpbnQ4X3QpcHU4VHhCdWZbdTMyQ291bnRdOyAgICAvKiBTZW5kIFVTQ0lfVUFSVCBEYXRhIHRvIGJ1ZmZlciAqLworICAgIH0KKworICAgIHJldHVybiB1MzJDb3VudDsKK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRW5hYmxlIFVTQ0lfVUFSVCBXYWtlLXVwIEZ1bmN0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJXYWtldXBNb2RlICAgVGhlIHdha2V1cCBtb2RlIG9mIFVTQ0lfVUFSVCBtb2R1bGUuCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUFJPVENUTF9EQVRXS0VOX01zayAgICA6IERhdGEgd2FrZS11cCBNb2RlCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUFJPVENUTF9DVFNXS0VOX01zayAgICA6IG5DVFMgd2FrZS11cCBNb2RlCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgV2FrZS11cCBmdW5jdGlvbiBvZiBVU0NJX1VBUlQuCisgKi8KK3ZvaWQgVVVBUlRfRW5hYmxlV2FrZXVwKFVVQVJUX1QqIHV1YXJ0LCB1aW50MzJfdCB1MzJXYWtldXBNb2RlKQoreworICAgIHV1YXJ0LT5QUk9UQ1RMIHw9IHUzMldha2V1cE1vZGU7CisgICAgdXVhcnQtPldLQ1RMIHw9IFVVQVJUX1dLQ1RMX1dLRU5fTXNrOworfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBEaXNhYmxlIFVTQ0lfVUFSVCBXYWtlLXVwIEZ1bmN0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgV2FrZS11cCBmdW5jdGlvbiBvZiBVU0NJX1VBUlQuCisgKi8KK3ZvaWQgVVVBUlRfRGlzYWJsZVdha2V1cChVVUFSVF9UKiB1dWFydCkKK3sKKyAgICB1dWFydC0+UFJPVENUTCAmPSB+KFVVQVJUX1BST1RDVExfREFUV0tFTl9Nc2sgfCBVVUFSVF9QUk9UQ1RMX0NUU1dLRU5fTXNrKTsKKyAgICB1dWFydC0+V0tDVEwgJj0gflVVQVJUX1dLQ1RMX1dLRU5fTXNrOworfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRW5hYmxlIFVTQ0lfVUFSVCBhdXRvIGZsb3cgY29udHJvbAorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgVVNDSV9VQVJUIGF1dG8gZmxvdyBjb250cm9sLgorICovCit2b2lkIFVVQVJUX0VuYWJsZUZsb3dDdHJsKFVVQVJUX1QqIHV1YXJ0KQoreworICAgIC8qIFNldCBSVFMgc2lnbmFsIGlzIGxvdyBsZXZlbCBhY3RpdmUgKi8KKyAgICB1dWFydC0+TElORUNUTCAmPSB+VVVBUlRfTElORUNUTF9DVExPSU5WX01zazsKKworICAgIC8qIFNldCBDVFMgc2lnbmFsIGlzIGxvdyBsZXZlbCBhY3RpdmUgKi8KKyAgICB1dWFydC0+Q1RMSU4wICY9IH5VVUFSVF9DVExJTjBfSU5JTlZfTXNrOworCisgICAgLyogRW5hYmxlIENUUyBhbmQgUlRTIGF1dG8gZmxvdyBjb250cm9sIGZ1bmN0aW9uICovCisgICAgdXVhcnQtPlBST1RDVEwgfD0gVVVBUlRfUFJPVENUTF9SVFNBVVRPRU5fTXNrIHwgVVVBUlRfUFJPVENUTF9DVFNBVVRPRU5fTXNrOworfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRGlzYWJsZSBVU0NJX1VBUlQgYXV0byBmbG93IGNvbnRyb2wKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgVVNDSV9VQVJUIGF1dG8gZmxvdyBjb250cm9sLgorICovCit2b2lkIFVVQVJUX0Rpc2FibGVGbG93Q3RybChVVUFSVF9UKiB1dWFydCkKK3sKKyAgICAvKiBEaXNhYmxlIENUUyBhbmQgUlRTIGF1dG8gZmxvdyBjb250cm9sIGZ1bmN0aW9uICovCisgICAgdXVhcnQtPlBST1RDVEwgJj0gfihVVUFSVF9QUk9UQ1RMX1JUU0FVVE9FTl9Nc2sgfCBVVUFSVF9QUk9UQ1RMX0NUU0FVVE9FTl9Nc2spOworfQorCisKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfVUFSVF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVU0NJX1VBUlRfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3dkdC5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvd2R0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNmYTg3NwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3dkdC5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB3ZHQuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgV2F0Y2hkb2cgVGltZXIoV0RUKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFdEVF9Ecml2ZXIgV0RUIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFdEVF9FWFBPUlRFRF9GVU5DVElPTlMgV0RUIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgSW5pdGlhbGl6ZSBXRFQgYW5kIHN0YXJ0IGNvdW50aW5nCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJUaW1lb3V0SW50ZXJ2YWwgIFRpbWUtb3V0IGludGVydmFsIHBlcmlvZCBvZiBXRFQgbW9kdWxlLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdEVF9USU1FT1VUXzJQT1c0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV0RUX1RJTUVPVVRfMlBPVzYKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXRFRfVElNRU9VVF8yUE9XOAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdEVF9USU1FT1VUXzJQT1cxMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdEVF9USU1FT1VUXzJQT1cxMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdEVF9USU1FT1VUXzJQT1cxNAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdEVF9USU1FT1VUXzJQT1cxNgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdEVF9USU1FT1VUXzJQT1cxOAorICAqIEBwYXJhbVtpbl0gIHUzMlJlc2V0RGVsYXkgICAgICAgQ29uZmlndXJlIFdEVCB0aW1lLW91dCByZXNldCBkZWxheSBwZXJpb2QuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV0RUX1JFU0VUX0RFTEFZXzEwMjZDTEsKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXRFRfUkVTRVRfREVMQVlfMTMwQ0xLCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV0RUX1JFU0VUX0RFTEFZXzE4Q0xLCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV0RUX1JFU0VUX0RFTEFZXzNDTEsKKyAgKiBAcGFyYW1baW5dICB1MzJFbmFibGVSZXNldCAgICAgIEVuYWJsZSBXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGZ1bmN0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlIFRSVUUgYW5kIEZBTFNFLgorICAqIEBwYXJhbVtpbl0gIHUzMkVuYWJsZVdha2V1cCAgICAgRW5hYmxlIFdEVCB0aW1lLW91dCB3YWtlLXVwIHN5c3RlbSBmdW5jdGlvbi4gVmFsaWQgdmFsdWVzIGFyZSBUUlVFIGFuZCBGQUxTRS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gbWFrZXMgV0RUIG1vZHVsZSBzdGFydCBjb3VudGluZyB3aXRoIGRpZmZlcmVudCB0aW1lLW91dCBpbnRlcnZhbCwgcmVzZXQgZGVsYXkgcGVyaW9kIGFuZCBjaG9vc2UgdG8gXG4KKyAgKiAgICAgICAgICAgICBlbmFibGUgb3IgZGlzYWJsZSBXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIG9yIHdha2UtdXAgc3lzdGVtLgorICAgICAgICBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgUmVnaXN0ZXIgV3JpdGUtUHJvdGVjdGlvbiBGdW5jdGlvbiBoYXMgYmVlbiBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgV0RUX09wZW4odWludDMyX3QgdTMyVGltZW91dEludGVydmFsLAorICAgICAgICAgICAgICB1aW50MzJfdCB1MzJSZXNldERlbGF5LAorICAgICAgICAgICAgICB1aW50MzJfdCB1MzJFbmFibGVSZXNldCwKKyAgICAgICAgICAgICAgdWludDMyX3QgdTMyRW5hYmxlV2FrZXVwKQoreworICAgIFdEVC0+QUxUQ1RMID0gdTMyUmVzZXREZWxheTsKKworICAgIFdEVC0+Q1RMID0gdTMyVGltZW91dEludGVydmFsIHwgV0RUX0NUTF9XRFRFTl9Nc2sgfAorICAgICAgICAgICAgICAgKHUzMkVuYWJsZVJlc2V0IDw8IFdEVF9DVExfUlNURU5fUG9zKSB8CisgICAgICAgICAgICAgICAodTMyRW5hYmxlV2FrZXVwIDw8IFdEVF9DVExfV0tFTl9Qb3MpOworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFdEVF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBXRFRfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3d3ZHQuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3d3ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDVjNzZkCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvd3dkdC5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB3d2R0LmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFdpbmRvdyBXYXRjaGRvZyBUaW1lcihXV0RUKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFdXRFRfRHJpdmVyIFdXRFQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgV1dEVF9FWFBPUlRFRF9GVU5DVElPTlMgV1dEVCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIE9wZW4gV1dEVCBhbmQgc3RhcnQgY291bnRpbmcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlByZVNjYWxlICAgICBQcmUtc2NhbGUgc2V0dGluZyBvZiBXV0RUIGNvdW50ZXIuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl8xCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl8yCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl80CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl84CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl8xNgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV1dEVF9QUkVTQ0FMRVJfMzIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzY0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl8xMjgKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzE5MgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV1dEVF9QUkVTQ0FMRVJfMjU2CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl8zODQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzUxMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV1dEVF9QUkVTQ0FMRVJfNzY4CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl8xMDI0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl8xNTM2CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl8yMDQ4CisgICogQHBhcmFtW2luXSAgdTMyQ21wVmFsdWUgICAgIFNldHRpbmcgdGhlIHdpbmRvdyBjb21wYXJlZCB2YWx1ZS4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB4MCB0byAweDNGLgorICAqIEBwYXJhbVtpbl0gIHUzMkVuYWJsZUludCAgICBFbmFibGUgV1dEVCB0aW1lLW91dCBpbnRlcnJ1cHQgZnVuY3Rpb24uIFZhbGlkIHZhbHVlcyBhcmUgVFJVRSBhbmQgRkFMU0UuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIG1ha2VzIFdXRFQgbW9kdWxlIHN0YXJ0IGNvdW50aW5nIHdpdGggZGlmZmVyZW50IGNvdW50ZXIgcGVyaW9kIGJ5IHByZS1zY2FsZSBzZXR0aW5nIGFuZCBjb21wYXJlZCB3aW5kb3cgdmFsdWUuCisgICAgICAgIEFwcGxpY2F0aW9uIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gb25seSBvbmNlIGFmdGVyIGJvb3QgdXAuCisgICovCit2b2lkIFdXRFRfT3Blbih1aW50MzJfdCB1MzJQcmVTY2FsZSwKKyAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMkNtcFZhbHVlLAorICAgICAgICAgICAgICAgdWludDMyX3QgdTMyRW5hYmxlSW50KQoreworICAgIFdXRFQtPkNUTCA9IHUzMlByZVNjYWxlIHwKKyAgICAgICAgICAgICAgICAodTMyQ21wVmFsdWUgPDwgV1dEVF9DVExfQ01QREFUX1BvcykgfAorICAgICAgICAgICAgICAgICgodTMyRW5hYmxlSW50ID09ICh1aW50MzJfdClUUlVFKSA/IFdXRFRfQ1RMX0lOVEVOX01zayA6IDBVTCkgfAorICAgICAgICAgICAgICAgIFdXRFRfQ1RMX1dXRFRFTl9Nc2s7Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgV1dEVF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBXV0RUX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvY21zaXNfZHJpdmVycy9Ecml2ZXJfRmxhc2guYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9jbXNpc19kcml2ZXJzL0RyaXZlcl9GbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YjY5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvY21zaXNfZHJpdmVycy9Ecml2ZXJfRmxhc2guYwpAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE4IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpOyB5b3UgbWF5CisgKiBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgIkRyaXZlcl9GbGFzaC5oIgorI2luY2x1ZGUgIk51TWljcm8uaCIKKyNpbmNsdWRlICJSVEVfRGV2aWNlLmgiCisjaW5jbHVkZSAiZmxhc2hfbGF5b3V0LmgiCisjaW5jbHVkZSAicmVnaW9uX2RlZnMuaCIKKworI2lmbmRlZiBBUkdfVU5VU0VECisjZGVmaW5lIEFSR19VTlVTRUQoYXJnKSAgKCh2b2lkKWFyZykKKyNlbmRpZgorCisvKiBEcml2ZXIgdmVyc2lvbiAqLworI2RlZmluZSBBUk1fRkxBU0hfRFJWX1ZFUlNJT04gICAgQVJNX0RSSVZFUl9WRVJTSU9OX01BSk9SX01JTk9SKDEsIDApCisKKy8qCisgKiBBUk0gRkxBU0ggZGV2aWNlIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYXJtX2ZsYXNoX2Rldl90Cit7CisgICAgY29uc3QgdWludDMyX3QgbWVtb3J5X2Jhc2U7ICAgLyohPCBGTEFTSCBtZW1vcnkgYmFzZSBhZGRyZXNzICovCisgICAgQVJNX0ZMQVNIX0lORk8gKmRhdGE7ICAgICAgICAgLyohPCBGTEFTSCBkYXRhICovCit9OworCisvKiBGbGFzaCBTdGF0dXMgKi8KK3N0YXRpYyBBUk1fRkxBU0hfU1RBVFVTIEZsYXNoU3RhdHVzID0gezAsIDAsIDB9OworCisvKiBEcml2ZXIgVmVyc2lvbiAqLworc3RhdGljIGNvbnN0IEFSTV9EUklWRVJfVkVSU0lPTiBEcml2ZXJWZXJzaW9uID0KK3sKKyAgICBBUk1fRkxBU0hfQVBJX1ZFUlNJT04sCisgICAgQVJNX0ZMQVNIX0RSVl9WRVJTSU9OCit9OworCisvKiBEcml2ZXIgQ2FwYWJpbGl0aWVzICovCitzdGF0aWMgY29uc3QgQVJNX0ZMQVNIX0NBUEFCSUxJVElFUyBEcml2ZXJDYXBhYmlsaXRpZXMgPQoreworICAgIDAsIC8qIGV2ZW50X3JlYWR5ICovCisgICAgMiwgLyogZGF0YV93aWR0aCA9IDA6OC1iaXQsIDE6MTYtYml0LCAyOjMyLWJpdCAqLworICAgIDEgIC8qIGVyYXNlX2NoaXAgKi8KK307CisKK3N0YXRpYyBpbnQzMl90IGlzX3JhbmdlX3ZhbGlkKHN0cnVjdCBhcm1fZmxhc2hfZGV2X3QgKmZsYXNoX2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldCkKK3sKKyAgICB1aW50MzJfdCBmbGFzaF9saW1pdCA9IDA7CisgICAgaW50MzJfdCByYyA9IDA7CisKKyAgICBmbGFzaF9saW1pdCA9IChmbGFzaF9kZXYtPmRhdGEtPnNlY3Rvcl9jb3VudCAqIGZsYXNoX2Rldi0+ZGF0YS0+c2VjdG9yX3NpemUpCisgICAgICAgICAgICAgICAgICAtIDE7CisKKyAgICBpZihvZmZzZXQgPiBmbGFzaF9saW1pdCkKKyAgICB7CisgICAgICAgIHJjID0gLTE7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludDMyX3QgaXNfd3JpdGVfYWxpZ25lZChzdHJ1Y3QgYXJtX2ZsYXNoX2Rldl90ICpmbGFzaF9kZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHBhcmFtKQoreworICAgIGludDMyX3QgcmMgPSAwOworCisgICAgaWYoKHBhcmFtICUgZmxhc2hfZGV2LT5kYXRhLT5wcm9ncmFtX3VuaXQpICE9IDApCisgICAgeworICAgICAgICByYyA9IC0xOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQzMl90IGlzX3NlY3Rvcl9hbGlnbmVkKHN0cnVjdCBhcm1fZmxhc2hfZGV2X3QgKmZsYXNoX2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldCkKK3sKKyAgICBpbnQzMl90IHJjID0gMDsKKworICAgIGlmKChvZmZzZXQgJSBmbGFzaF9kZXYtPmRhdGEtPnNlY3Rvcl9zaXplKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCisjaWYgKFJURV9GTEFTSDApCitzdGF0aWMgQVJNX0ZMQVNIX0lORk8gQVJNX0ZMQVNIMF9ERVZfREFUQSA9Cit7CisgICAgLnNlY3Rvcl9pbmZvICA9IE5VTEwsICAgICAgICAgICAgICAgICAgLyogVW5pZm9ybSBzZWN0b3IgbGF5b3V0ICovCisgICAgLnNlY3Rvcl9jb3VudCA9IEZNQ19BUFJPTV9TSVpFIC8gRk1DX0ZMQVNIX1BBR0VfU0laRSwKKyAgICAuc2VjdG9yX3NpemUgID0gRk1DX0ZMQVNIX1BBR0VfU0laRSwKKyAgICAucGFnZV9zaXplICAgID0gRk1DX0ZMQVNIX1BBR0VfU0laRSwKKyAgICAucHJvZ3JhbV91bml0ID0gNCwKKyAgICAuZXJhc2VkX3ZhbHVlID0gMHhGRgorfTsKKworc3RhdGljIHN0cnVjdCBhcm1fZmxhc2hfZGV2X3QgQVJNX0ZMQVNIMF9ERVYgPQoreworI2lmIChfX0RPTUFJTl9OUyA9PSAxKQorICAgIC5tZW1vcnlfYmFzZSA9IEZMQVNIMF9CQVNFX05TLAorI2Vsc2UKKyAgICAubWVtb3J5X2Jhc2UgPSBGTUNfQVBST01fQkFTRSwKKyNlbmRpZiAvKiBfX0RPTUFJTl9OUyA9PSAxICovCisgICAgLmRhdGEgICAgICAgID0gJihBUk1fRkxBU0gwX0RFVl9EQVRBKQorfTsKKworc3RydWN0IGFybV9mbGFzaF9kZXZfdCAqRkxBU0gwX0RFViA9ICZBUk1fRkxBU0gwX0RFVjsKKworLyoKKyAqIEZ1bmN0aW9ucworICovCisKK3N0YXRpYyBBUk1fRFJJVkVSX1ZFUlNJT04gQVJNX0ZsYXNoX0dldFZlcnNpb24odm9pZCkKK3sKKyAgICByZXR1cm4gRHJpdmVyVmVyc2lvbjsKK30KKworc3RhdGljIEFSTV9GTEFTSF9DQVBBQklMSVRJRVMgQVJNX0ZsYXNoX0dldENhcGFiaWxpdGllcyh2b2lkKQoreworICAgIHJldHVybiBEcml2ZXJDYXBhYmlsaXRpZXM7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9GbGFzaF9Jbml0aWFsaXplKEFSTV9GbGFzaF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIEFSR19VTlVTRUQoY2JfZXZlbnQpOworICAgIC8qIE5vdGhpbmcgdG8gYmUgZG9uZSAqLworCisgICAgRk1DX09wZW4oKTsKKyAgICBGTUNfRU5BQkxFX0FQX1VQREFURSgpOworICAgIEZNQ19FTkFCTEVfTERfVVBEQVRFKCk7CisKKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBBUk1fRmxhc2hfVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgLyogTm90aGluZyB0byBiZSBkb25lICovCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9GbGFzaF9Qb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHN3aXRjaChzdGF0ZSkKKyAgICB7CisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0ZVTEw6CisgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIGJlIGRvbmUgKi8KKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfT0ZGOgorICAgICAgICBjYXNlIEFSTV9QT1dFUl9MT1c6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9GbGFzaF9SZWFkRGF0YSh1aW50MzJfdCBhZGRyLCB2b2lkICpkYXRhLCB1aW50MzJfdCBjbnQpCit7CisgICAgdWludDMyX3Qgc3RhcnRfYWRkciA9IEZMQVNIMF9ERVYtPm1lbW9yeV9iYXNlICsgYWRkcjsKKyAgICBpbnQzMl90IHJjID0gMDsKKyAgICB1aW50OF90KiBwdTg7CisgICAgdWludDMyX3QgaSwgdGFkZHI7CisKKyAgICAvKiBDaGVjayBmbGFzaCBtZW1vcnkgYm91bmRhcmllcyAqLworICAgIHJjID0gaXNfcmFuZ2VfdmFsaWQoRkxBU0gwX0RFViwgYWRkciArIGNudCAtIDEpOworICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1BBUkFNRVRFUjsKKyAgICB9CisKKyAgICBwdTggPSAodWludDhfdCopZGF0YTsKKworICAgIGZvcihpID0gMDsgaSA8IGNudDsgaSsrKQorICAgIHsKKyAgICAgICAgdGFkZHIgPSBzdGFydF9hZGRyICsgaTsKKyAgICAgICAgaWYodGFkZHIgPj0gKEZMQVNIX0FSRUFfMF9PRkZTRVQrRkxBU0hfU19QQVJUSVRJT05fU0laRSkpCisgICAgICAgICAgICB0YWRkciArPSBOU19PRkZTRVQ7CisgICAgICAgIHB1OFtpXSA9ICoodWludDhfdCopdGFkZHI7CisgICAgfQorCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9GbGFzaF9Qcm9ncmFtRGF0YSh1aW50MzJfdCBhZGRyLCBjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBjbnQpCit7CisgICAgdm9sYXRpbGUgdWludDMyX3QgbWVtX2Jhc2UgPSBGTEFTSDBfREVWLT5tZW1vcnlfYmFzZTsKKyAgICB1aW50MzJfdCBzdGFydF9hZGRyID0gbWVtX2Jhc2UgKyBhZGRyOworICAgIGludDMyX3QgcmMgPSAwOworICAgIGludDMyX3QgaSxqOworCisgICAgLyogQ2hlY2sgZmxhc2ggbWVtb3J5IGJvdW5kYXJpZXMgYW5kIGFsaWdubWVudCB3aXRoIG1pbmltYWwgd3JpdGUgc2l6ZSAqLworICAgIHJjICA9IGlzX3JhbmdlX3ZhbGlkKEZMQVNIMF9ERVYsIGFkZHIgKyBjbnQgLSAxKTsKKyAgICByYyB8PSBpc193cml0ZV9hbGlnbmVkKEZMQVNIMF9ERVYsIGFkZHIpOworICAgIHJjIHw9IGlzX3dyaXRlX2FsaWduZWQoRkxBU0gwX0RFViwgY250KTsKKyAgICBpZihyYyAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgIH0KKworICAgIHsKKyAgICAgICAgdWludDhfdCAqcHU4OworICAgICAgICB1aW50MzJfdCB1MzJEYXRhOworCisgICAgICAgIHB1OCA9ICh1aW50OF90ICopZGF0YTsgLy8gTm90ZSB0aGUgZGF0YSBidWZmZXIgYWRkcmVzcyBtYXkgbm90IGJlIHdvcmQgYWxpZ25tZW50CisKKyAgICAgICAgdTMyRGF0YSA9IDA7CisgICAgICAgIGogPSAwOworICAgICAgICBmb3IoaT0wO2k8Y250O2krKykKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRGF0YSArPSAodWludDMyX3QpcHU4W2ldIDw8ICg4KmopOworICAgICAgICAgICAgaisrOworCisgICAgICAgICAgICBpZihqPj00KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZNQ19Xcml0ZShzdGFydF9hZGRyKyhpKzEtNCksIHUzMkRhdGEpOworICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgICAgIHUzMkRhdGEgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoaikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbi4KKyAgICAgICAgICAgIHdoaWxlKDEpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgQVJNX0ZsYXNoX0VyYXNlU2VjdG9yKHVpbnQzMl90IGFkZHIpCit7CisgICAgdm9sYXRpbGUgdWludDMyX3QgbWVtX2Jhc2UgPSBGTEFTSDBfREVWLT5tZW1vcnlfYmFzZTsKKyAgICB1aW50MzJfdCBzdGFydF9hZGRyID0gbWVtX2Jhc2UgKyBhZGRyOworICAgIHVpbnQzMl90IHJjID0gMDsKKworICAgIHJjICA9IGlzX3JhbmdlX3ZhbGlkKEZMQVNIMF9ERVYsIGFkZHIpOworICAgIHJjIHw9IGlzX3NlY3Rvcl9hbGlnbmVkKEZMQVNIMF9ERVYsIGFkZHIpOworICAgIGlmKHJjICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9QQVJBTUVURVI7CisgICAgfQorCisgICAgRk1DX0VyYXNlKHN0YXJ0X2FkZHIpOworCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9GbGFzaF9FcmFzZUNoaXAodm9pZCkKK3sKKyAgICB1aW50MzJfdCBpOworICAgIHVpbnQzMl90IGFkZHIgPSBGTEFTSDBfREVWLT5tZW1vcnlfYmFzZTsKKyAgICBpbnQzMl90IHJjID0gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKworICAgIC8qIENoZWNrIGRyaXZlciBjYXBhYmlsaXR5IGVyYXNlX2NoaXAgYml0ICovCisgICAgaWYoRHJpdmVyQ2FwYWJpbGl0aWVzLmVyYXNlX2NoaXAgPT0gMSkKKyAgICB7CisgICAgICAgIGZvcihpID0gMDsgaSA8IEZMQVNIMF9ERVYtPmRhdGEtPnNlY3Rvcl9jb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBGTUNfRXJhc2UoYWRkcik7CisgICAgICAgICAgICBhZGRyICs9IEZMQVNIMF9ERVYtPmRhdGEtPnNlY3Rvcl9zaXplOworICAgICAgICAgICAgcmMgPSBBUk1fRFJJVkVSX09LOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworc3RhdGljIEFSTV9GTEFTSF9TVEFUVVMgQVJNX0ZsYXNoX0dldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBGbGFzaFN0YXR1czsKK30KKworc3RhdGljIEFSTV9GTEFTSF9JTkZPICogQVJNX0ZsYXNoX0dldEluZm8odm9pZCkKK3sKKyAgICByZXR1cm4gRkxBU0gwX0RFVi0+ZGF0YTsKK30KKworQVJNX0RSSVZFUl9GTEFTSCBEcml2ZXJfRkxBU0gwID0KK3sKKyAgICBBUk1fRmxhc2hfR2V0VmVyc2lvbiwKKyAgICBBUk1fRmxhc2hfR2V0Q2FwYWJpbGl0aWVzLAorICAgIEFSTV9GbGFzaF9Jbml0aWFsaXplLAorICAgIEFSTV9GbGFzaF9VbmluaXRpYWxpemUsCisgICAgQVJNX0ZsYXNoX1Bvd2VyQ29udHJvbCwKKyAgICBBUk1fRmxhc2hfUmVhZERhdGEsCisgICAgQVJNX0ZsYXNoX1Byb2dyYW1EYXRhLAorICAgIEFSTV9GbGFzaF9FcmFzZVNlY3RvciwKKyAgICBBUk1fRmxhc2hfRXJhc2VDaGlwLAorICAgIEFSTV9GbGFzaF9HZXRTdGF0dXMsCisgICAgQVJNX0ZsYXNoX0dldEluZm8KK307CisjZW5kaWYgLyogUlRFX0ZMQVNIMCAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2Ntc2lzX2RyaXZlcnMvRHJpdmVyX1VTQVJULmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvY21zaXNfZHJpdmVycy9Ecml2ZXJfVVNBUlQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODkwYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2Ntc2lzX2RyaXZlcnMvRHJpdmVyX1VTQVJULmMKQEAgLTAsMCArMSw0MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxOCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heQorICogbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiRHJpdmVyX1VTQVJULmgiCisjaW5jbHVkZSAiTnVNaWNyby5oIgorI2luY2x1ZGUgIlJURV9EZXZpY2UuaCIKKworCisjaWZuZGVmIEFSR19VTlVTRUQKKyNkZWZpbmUgQVJHX1VOVVNFRChhcmcpICAodm9pZClhcmcKKyNlbmRpZgorCisvKiBEcml2ZXIgdmVyc2lvbiAqLworI2RlZmluZSBBUk1fVVNBUlRfRFJWX1ZFUlNJT04gIEFSTV9EUklWRVJfVkVSU0lPTl9NQUpPUl9NSU5PUigyLCAyKQorCisvKiBEcml2ZXIgVmVyc2lvbiAqLworc3RhdGljIGNvbnN0IEFSTV9EUklWRVJfVkVSU0lPTiBEcml2ZXJWZXJzaW9uID0KK3sKKyAgICBBUk1fVVNBUlRfQVBJX1ZFUlNJT04sCisgICAgQVJNX1VTQVJUX0RSVl9WRVJTSU9OCit9OworCisvKiBEcml2ZXIgQ2FwYWJpbGl0aWVzICovCitzdGF0aWMgY29uc3QgQVJNX1VTQVJUX0NBUEFCSUxJVElFUyBEcml2ZXJDYXBhYmlsaXRpZXMgPQoreworICAgIDEsIC8qIHN1cHBvcnRzIFVBUlQgKEFzeW5jaHJvbm91cykgbW9kZSAqLworICAgIDAsIC8qIHN1cHBvcnRzIFN5bmNocm9ub3VzIE1hc3RlciBtb2RlICovCisgICAgMCwgLyogc3VwcG9ydHMgU3luY2hyb25vdXMgU2xhdmUgbW9kZSAqLworICAgIDAsIC8qIHN1cHBvcnRzIFVBUlQgU2luZ2xlLXdpcmUgbW9kZSAqLworICAgIDAsIC8qIHN1cHBvcnRzIFVBUlQgSXJEQSBtb2RlICovCisgICAgMCwgLyogc3VwcG9ydHMgVUFSVCBTbWFydCBDYXJkIG1vZGUgKi8KKyAgICAwLCAvKiBTbWFydCBDYXJkIENsb2NrIGdlbmVyYXRvciBhdmFpbGFibGUgKi8KKyAgICAwLCAvKiBSVFMgRmxvdyBDb250cm9sIGF2YWlsYWJsZSAqLworICAgIDAsIC8qIENUUyBGbG93IENvbnRyb2wgYXZhaWxhYmxlICovCisgICAgMCwgLyogVHJhbnNtaXQgY29tcGxldGVkIGV2ZW50OiBccmVmIEFSTV9VU0FSVHhfRVZFTlRfVFhfQ09NUExFVEUgKi8KKyAgICAwLCAvKiBTaWduYWwgcmVjZWl2ZSBjaGFyYWN0ZXIgdGltZW91dCBldmVudDogXHJlZiBBUk1fVVNBUlR4X0VWRU5UX1JYX1RJTUVPVVQgKi8KKyAgICAwLCAvKiBSVFMgTGluZTogMD1ub3QgYXZhaWxhYmxlLCAxPWF2YWlsYWJsZSAqLworICAgIDAsIC8qIENUUyBMaW5lOiAwPW5vdCBhdmFpbGFibGUsIDE9YXZhaWxhYmxlICovCisgICAgMCwgLyogRFRSIExpbmU6IDA9bm90IGF2YWlsYWJsZSwgMT1hdmFpbGFibGUgKi8KKyAgICAwLCAvKiBEU1IgTGluZTogMD1ub3QgYXZhaWxhYmxlLCAxPWF2YWlsYWJsZSAqLworICAgIDAsIC8qIERDRCBMaW5lOiAwPW5vdCBhdmFpbGFibGUsIDE9YXZhaWxhYmxlICovCisgICAgMCwgLyogUkkgTGluZTogMD1ub3QgYXZhaWxhYmxlLCAxPWF2YWlsYWJsZSAqLworICAgIDAsIC8qIFNpZ25hbCBDVFMgY2hhbmdlIGV2ZW50OiBccmVmIEFSTV9VU0FSVHhfRVZFTlRfQ1RTICovCisgICAgMCwgLyogU2lnbmFsIERTUiBjaGFuZ2UgZXZlbnQ6IFxyZWYgQVJNX1VTQVJUeF9FVkVOVF9EU1IgKi8KKyAgICAwLCAvKiBTaWduYWwgRENEIGNoYW5nZSBldmVudDogXHJlZiBBUk1fVVNBUlR4X0VWRU5UX0RDRCAqLworICAgIDAsIC8qIFNpZ25hbCBSSSBjaGFuZ2UgZXZlbnQ6IFxyZWYgQVJNX1VTQVJUeF9FVkVOVF9SSSAqLworICAgIDAgIC8qIFJlc2VydmVkICovCit9OworCitzdGF0aWMgQVJNX0RSSVZFUl9WRVJTSU9OIEFSTV9VU0FSVF9HZXRWZXJzaW9uKHZvaWQpCit7CisgICAgcmV0dXJuIERyaXZlclZlcnNpb247Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfQ0FQQUJJTElUSUVTIEFSTV9VU0FSVF9HZXRDYXBhYmlsaXRpZXModm9pZCkKK3sKKyAgICByZXR1cm4gRHJpdmVyQ2FwYWJpbGl0aWVzOworfQorCit0eXBlZGVmIHN0cnVjdAoreworICAgIFVBUlRfVCogZGV2OyAgICAgIC8qIFVBUlQgZGV2aWNlIHN0cnVjdHVyZSAqLworICAgIHVpbnQzMl90IHR4X25icl9ieXRlczsgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVyZWQgKi8KKyAgICB1aW50MzJfdCByeF9uYnJfYnl0ZXM7ICAgICAgICAgICAgIC8qIE51bWJlciBvZiBieXRlcyByZWNldmllZCAqLworICAgIEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50OyAgLyogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGV2ZW50cyAqLworfSBVQVJUeF9SZXNvdXJjZXM7CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVHhfSW5pdGlhbGl6ZShVQVJUeF9SZXNvdXJjZXMqIHVhcnRfZGV2KQoreworICAgIC8qIEluaXRpYWxpemVzIGdlbmVyaWMgVUFSVCBkcml2ZXIgKi8KKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBBUk1fVVNBUlR4X1Bvd2VyQ29udHJvbChVQVJUeF9SZXNvdXJjZXMqIHVhcnRfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIEFSR19VTlVTRUQodWFydF9kZXYpOworCisgICAgc3dpdGNoKHN0YXRlKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfT0ZGOgorICAgICAgICBjYXNlIEFSTV9QT1dFUl9MT1c6CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfRlVMTDoKKyAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gYmUgZG9uZSAqLworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICAvKiBkZWZhdWx0OiAgVGhlIGRlZmF1bHQgaXMgbm90IGRlZmluZWQgaW50ZW50aW9uYWxseSB0byBmb3JjZSB0aGUKKyAgICAgICAgICAgICAqICAgICAgICAgICBjb21waWxlciB0byBjaGVjayB0aGF0IGFsbCB0aGUgZW51bWVyYXRpb24gdmFsdWVzIGFyZQorICAgICAgICAgICAgICogICAgICAgICAgIGNvdmVyZWQgaW4gdGhlIHN3aXRjaC4qLworICAgIH0KK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUeF9TZW5kKFVBUlR4X1Jlc291cmNlcyogdWFydF9kZXYsIGNvbnN0IHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtKQoreworICAgIGNvbnN0IHVpbnQ4X3QqIHBfZGF0YSA9IChjb25zdCB1aW50OF90KilkYXRhOworCisgICAgaWYoKGRhdGEgPT0gTlVMTCkgfHwgKG51bSA9PSAwVSkpCisgICAgeworICAgICAgICAvKiBJbnZhbGlkIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgIH0KKworICAgIC8qIFJlc2V0cyBwcmV2aW91cyBUWCBjb3VudGVyICovCisgICAgdWFydF9kZXYtPnR4X25icl9ieXRlcyA9IDA7CisKKyAgICB3aGlsZSh1YXJ0X2Rldi0+dHhfbmJyX2J5dGVzICE9IG51bSkKKyAgICB7CisgICAgICAgIC8qIFdhaXRzIHVudGlsIFVBUlQgaXMgcmVhZHkgdG8gdHJhbnNtaXQgKi8KKyAgICAgICAgd2hpbGUodWFydF9kZXYtPmRldi0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19UWEZVTExfTXNrKTsKKworICAgICAgICAvKiBBcyBVQVJUIGlzIHJlYWR5IHRvIHRyYW5zbWl0IGF0IHRoaXMgcG9pbnQsIHRoZSB3cml0ZSBmdW5jdGlvbiBjYW4KKyAgICAgICAgICogbm90IHJldHVybiBhbnkgdHJhbnNtaXQgZXJyb3IgKi8KKyAgICAgICAgdWFydF9kZXYtPmRldi0+REFUID0gKnBfZGF0YTsKKworICAgICAgICB1YXJ0X2Rldi0+dHhfbmJyX2J5dGVzKys7CisgICAgICAgIHBfZGF0YSsrOworICAgIH0KKworICAgIC8qIFdhaXRzIHVudGlsIGNoYXJhY3RlciBpcyB0cmFuc21pdGVkICovCisgICAgd2hpbGUoKHVhcnRfZGV2LT5kZXYtPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfVFhFTVBUWV9Nc2spID09IDApOworCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVHhfUmVjZWl2ZShVQVJUeF9SZXNvdXJjZXMqIHVhcnRfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICB1aW50OF90KiBwX2RhdGEgPSAodWludDhfdCopZGF0YTsKKworICAgIGlmKChkYXRhID09IE5VTEwpIHx8IChudW0gPT0gMFUpKQorICAgIHsKKyAgICAgICAgLy8gSW52YWxpZCBwYXJhbWV0ZXJzCisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1BBUkFNRVRFUjsKKyAgICB9CisKKyAgICAvKiBSZXNldHMgcHJldmlvdXMgUlggY291bnRlciAqLworICAgIHVhcnRfZGV2LT5yeF9uYnJfYnl0ZXMgPSAwOworCisgICAgd2hpbGUodWFydF9kZXYtPnJ4X25icl9ieXRlcyAhPSBudW0pCisgICAgeworICAgICAgICAvKiBXYWl0cyB1bnRpbCBvbmUgY2hhcmFjdGVyIGlzIHJlY2VpdmVkICovCisgICAgICAgIHdoaWxlKHVhcnRfZGV2LT5kZXYtPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfUlhFTVBUWV9Nc2spOworCisgICAgICAgIC8qIEFzIFVBUlQgaGFzIHJlY2VpdmVkIG9uZSBieXRlLCB0aGUgcmVhZCBjYW4gbm90CisgICAgICAgICAqIHJldHVybiBhbnkgcmVjZWl2ZSBlcnJvciBhdCB0aGlzIHBvaW50ICovCisgICAgICAgICpwX2RhdGEgPSB1YXJ0X2Rldi0+ZGV2LT5EQVQ7CisKKyAgICAgICAgdWFydF9kZXYtPnJ4X25icl9ieXRlcysrOworICAgICAgICBwX2RhdGErKzsKKyAgICB9CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIHVpbnQzMl90IEFSTV9VU0FSVHhfR2V0VHhDb3VudChVQVJUeF9SZXNvdXJjZXMqIHVhcnRfZGV2KQoreworICAgIHJldHVybiB1YXJ0X2Rldi0+dHhfbmJyX2J5dGVzOworfQorCitzdGF0aWMgdWludDMyX3QgQVJNX1VTQVJUeF9HZXRSeENvdW50KFVBUlR4X1Jlc291cmNlcyogdWFydF9kZXYpCit7CisgICAgcmV0dXJuIHVhcnRfZGV2LT5yeF9uYnJfYnl0ZXM7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVHhfQ29udHJvbChVQVJUeF9SZXNvdXJjZXMqIHVhcnRfZGV2LCB1aW50MzJfdCBjb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFyZykKK3sKKyAgICBzd2l0Y2goY29udHJvbCAmIEFSTV9VU0FSVF9DT05UUk9MX01zaykKKyAgICB7CisgICAgICAgIGNhc2UgQVJNX1VTQVJUX01PREVfQVNZTkNIUk9OT1VTOgorICAgICAgICAgICAgdWFydF9kZXYtPmRldi0+TElORSA9IFVBUlRfUEFSSVRZX05PTkUgfCBVQVJUX1NUT1BfQklUXzEgfCBVQVJUX1dPUkRfTEVOXzg7CisgICAgICAgICAgICB1YXJ0X2Rldi0+ZGV2LT5CQVVEID0gVUFSVF9CQVVEX01PREUyIHwgVUFSVF9CQVVEX01PREUyX0RJVklERVIoX19ISVJDLCBhcmcpOworCisgICAgICAgICAgICAvKiBhdm9pZCBub2lzZSBpbiByZXNldCBzdGF0ZSAqLworICAgICAgICAgICAgdWFydF9kZXYtPmRldi0+REFUID0gJ1xyJzsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qIFVuc3VwcG9ydGVkIGNvbW1hbmQgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8qIFVBUlQgRGF0YSBiaXRzICovCisgICAgaWYoY29udHJvbCAmIEFSTV9VU0FSVF9EQVRBX0JJVFNfTXNrKQorICAgIHsKKyAgICAgICAgLyogRGF0YSBiaXQgaXMgbm90IGNvbmZpZ3VyYWJsZSAqLworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICAvKiBVQVJUIFBhcml0eSAqLworICAgIGlmKGNvbnRyb2wgJiBBUk1fVVNBUlRfUEFSSVRZX01zaykKKyAgICB7CisgICAgICAgIC8qIFBhcml0eSBpcyBub3QgY29uZmlndXJhYmxlICovCisgICAgICAgIHJldHVybiBBUk1fVVNBUlRfRVJST1JfUEFSSVRZOworICAgIH0KKworICAgIC8qIFVTQVJUIFN0b3AgYml0cyAqLworICAgIGlmKGNvbnRyb2wgJiBBUk1fVVNBUlRfU1RPUF9CSVRTX01zaykKKyAgICB7CisgICAgICAgIC8qIFN0b3AgYml0IGlzIG5vdCBjb25maWd1cmFibGUgKi8KKyAgICAgICAgcmV0dXJuIEFSTV9VU0FSVF9FUlJPUl9TVE9QX0JJVFM7CisgICAgfQorCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKKyNpZiAoUlRFX1VTQVJUMCkKKy8qIFVTQVJUMCBEcml2ZXIgd3JhcHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBVQVJUeF9SZXNvdXJjZXMgVVNBUlQwX0RFViA9Cit7CisgICAgLmRldiA9IFVBUlQwX05TLAorICAgIC50eF9uYnJfYnl0ZXMgPSAwLAorICAgIC5yeF9uYnJfYnl0ZXMgPSAwLAorICAgIC5jYl9ldmVudCA9IE5VTEwsCit9OworCitzdGF0aWMgaW50MzJfdCBBUk1fVVNBUlQwX0luaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgVVNBUlQwX0RFVi5jYl9ldmVudCA9IGNiX2V2ZW50OworCisgICAgcmV0dXJuIEFSTV9VU0FSVHhfSW5pdGlhbGl6ZSgmVVNBUlQwX0RFVik7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVDBfVW5pbml0aWFsaXplKHZvaWQpCit7CisKKyAgICAvKiBOb3RoaW5nIHRvIGJlIGRvbmUgKi8KKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMF9Qb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBBUk1fVVNBUlR4X1Bvd2VyQ29udHJvbCgmVVNBUlQwX0RFViwgc3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBBUk1fVVNBUlQwX1NlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBBUk1fVVNBUlR4X1NlbmQoJlVTQVJUMF9ERVYsIGRhdGEsIG51bSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVDBfUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIEFSTV9VU0FSVHhfUmVjZWl2ZSgmVVNBUlQwX0RFViwgZGF0YSwgbnVtKTsKK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMF9UcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtKQoreworICAgIEFSR19VTlVTRUQoZGF0YV9vdXQpOworICAgIEFSR19VTlVTRUQoZGF0YV9pbik7CisgICAgQVJHX1VOVVNFRChudW0pOworCisgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBBUk1fVVNBUlQwX0dldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gQVJNX1VTQVJUeF9HZXRUeENvdW50KCZVU0FSVDBfREVWKTsKK30KKworc3RhdGljIHVpbnQzMl90IEFSTV9VU0FSVDBfR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBBUk1fVVNBUlR4X0dldFJ4Q291bnQoJlVTQVJUMF9ERVYpOworfQorc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMF9Db250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gQVJNX1VTQVJUeF9Db250cm9sKCZVU0FSVDBfREVWLCBjb250cm9sLCBhcmcpOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBBUk1fVVNBUlQwX0dldFN0YXR1cyh2b2lkKQoreworICAgIEFSTV9VU0FSVF9TVEFUVVMgc3RhdHVzID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVDBfU2V0TW9kZW1Db250cm9sKEFSTV9VU0FSVF9NT0RFTV9DT05UUk9MIGNvbnRyb2wpCit7CisgICAgQVJHX1VOVVNFRChjb250cm9sKTsKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKK30KKworc3RhdGljIEFSTV9VU0FSVF9NT0RFTV9TVEFUVVMgQVJNX1VTQVJUMF9HZXRNb2RlbVN0YXR1cyh2b2lkKQoreworICAgIEFSTV9VU0FSVF9NT0RFTV9TVEFUVVMgbW9kZW1fc3RhdHVzID0gezAsIDAsIDAsIDAsIDB9OworICAgIHJldHVybiBtb2RlbV9zdGF0dXM7Cit9CisKK2V4dGVybiBBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDA7CitBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDAgPQoreworICAgIEFSTV9VU0FSVF9HZXRWZXJzaW9uLAorICAgIEFSTV9VU0FSVF9HZXRDYXBhYmlsaXRpZXMsCisgICAgQVJNX1VTQVJUMF9Jbml0aWFsaXplLAorICAgIEFSTV9VU0FSVDBfVW5pbml0aWFsaXplLAorICAgIEFSTV9VU0FSVDBfUG93ZXJDb250cm9sLAorICAgIEFSTV9VU0FSVDBfU2VuZCwKKyAgICBBUk1fVVNBUlQwX1JlY2VpdmUsCisgICAgQVJNX1VTQVJUMF9UcmFuc2ZlciwKKyAgICBBUk1fVVNBUlQwX0dldFR4Q291bnQsCisgICAgQVJNX1VTQVJUMF9HZXRSeENvdW50LAorICAgIEFSTV9VU0FSVDBfQ29udHJvbCwKKyAgICBBUk1fVVNBUlQwX0dldFN0YXR1cywKKyAgICBBUk1fVVNBUlQwX1NldE1vZGVtQ29udHJvbCwKKyAgICBBUk1fVVNBUlQwX0dldE1vZGVtU3RhdHVzCit9OworI2VuZGlmIC8qIFJURV9VU0FSVDAgKi8KKworI2lmIChSVEVfVVNBUlQxKQorLyogVVNBUlQxIERyaXZlciB3cmFwcGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIFVBUlR4X1Jlc291cmNlcyBVU0FSVDFfREVWID0KK3sKKyAgICAuZGV2ID0gVUFSVDEsCisgICAgLnR4X25icl9ieXRlcyA9IDAsCisgICAgLnJ4X25icl9ieXRlcyA9IDAsCisgICAgLmNiX2V2ZW50ID0gTlVMTCwKK307CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVDFfSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBVU0FSVDFfREVWLmNiX2V2ZW50ID0gY2JfZXZlbnQ7CisKKyAgICByZXR1cm4gQVJNX1VTQVJUeF9Jbml0aWFsaXplKCZVU0FSVDFfREVWKTsKK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMV9VbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGJlIGRvbmUgKi8KKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMV9Qb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBBUk1fVVNBUlR4X1Bvd2VyQ29udHJvbCgmVVNBUlQxX0RFViwgc3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBBUk1fVVNBUlQxX1NlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBBUk1fVVNBUlR4X1NlbmQoJlVTQVJUMV9ERVYsIGRhdGEsIG51bSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVDFfUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIEFSTV9VU0FSVHhfUmVjZWl2ZSgmVVNBUlQxX0RFViwgZGF0YSwgbnVtKTsKK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMV9UcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtKQoreworICAgIEFSR19VTlVTRUQoZGF0YV9vdXQpOworICAgIEFSR19VTlVTRUQoZGF0YV9pbik7CisgICAgQVJHX1VOVVNFRChudW0pOworCisgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBBUk1fVVNBUlQxX0dldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gQVJNX1VTQVJUeF9HZXRUeENvdW50KCZVU0FSVDFfREVWKTsKK30KKworc3RhdGljIHVpbnQzMl90IEFSTV9VU0FSVDFfR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBBUk1fVVNBUlR4X0dldFJ4Q291bnQoJlVTQVJUMV9ERVYpOworfQorc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMV9Db250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gQVJNX1VTQVJUeF9Db250cm9sKCZVU0FSVDFfREVWLCBjb250cm9sLCBhcmcpOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBBUk1fVVNBUlQxX0dldFN0YXR1cyh2b2lkKQoreworICAgIEFSTV9VU0FSVF9TVEFUVVMgc3RhdHVzID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVDFfU2V0TW9kZW1Db250cm9sKEFSTV9VU0FSVF9NT0RFTV9DT05UUk9MIGNvbnRyb2wpCit7CisgICAgQVJHX1VOVVNFRChjb250cm9sKTsKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKK30KKworc3RhdGljIEFSTV9VU0FSVF9NT0RFTV9TVEFUVVMgQVJNX1VTQVJUMV9HZXRNb2RlbVN0YXR1cyh2b2lkKQoreworICAgIEFSTV9VU0FSVF9NT0RFTV9TVEFUVVMgbW9kZW1fc3RhdHVzID0gezAsIDAsIDAsIDAsIDB9OworICAgIHJldHVybiBtb2RlbV9zdGF0dXM7Cit9CisKK2V4dGVybiBBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDE7CitBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDEgPQoreworICAgIEFSTV9VU0FSVF9HZXRWZXJzaW9uLAorICAgIEFSTV9VU0FSVF9HZXRDYXBhYmlsaXRpZXMsCisgICAgQVJNX1VTQVJUMV9Jbml0aWFsaXplLAorICAgIEFSTV9VU0FSVDFfVW5pbml0aWFsaXplLAorICAgIEFSTV9VU0FSVDFfUG93ZXJDb250cm9sLAorICAgIEFSTV9VU0FSVDFfU2VuZCwKKyAgICBBUk1fVVNBUlQxX1JlY2VpdmUsCisgICAgQVJNX1VTQVJUMV9UcmFuc2ZlciwKKyAgICBBUk1fVVNBUlQxX0dldFR4Q291bnQsCisgICAgQVJNX1VTQVJUMV9HZXRSeENvdW50LAorICAgIEFSTV9VU0FSVDFfQ29udHJvbCwKKyAgICBBUk1fVVNBUlQxX0dldFN0YXR1cywKKyAgICBBUk1fVVNBUlQxX1NldE1vZGVtQ29udHJvbCwKKyAgICBBUk1fVVNBUlQxX0dldE1vZGVtU3RhdHVzCit9OworI2VuZGlmIC8qIFJURV9VU0FSVDEgKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9jbXNpc19kcml2ZXJzL2NvbmZpZy9SVEVfRGV2aWNlLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvY21zaXNfZHJpdmVycy9jb25maWcvUlRFX0RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZWYxNDcKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvY21zaXNfZHJpdmVycy9jb25maWcvUlRFX0RldmljZS5oCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTggQVJNIExpbWl0ZWQKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLy0tLS0tLS0tIDw8PCBVc2UgQ29uZmlndXJhdGlvbiBXaXphcmQgaW4gQ29udGV4dCBNZW51ID4+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWZuZGVmIF9fUlRFX0RFVklDRV9ICisjZGVmaW5lIF9fUlRFX0RFVklDRV9ICisKKy8vIDxlPiBTUEkgKFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSkgW0RyaXZlcl9TUEkwXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9TUEkwIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6U1BJCisjZGVmaW5lICAgUlRFX1NQSTAgICAgICAgICAgICAgICAgICAgICAgIDAKKy8vIDwvZT4gU1BJIChTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UpIFtEcml2ZXJfU1BJMF0KKworLy8gPGU+IFNQSSAoU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlKSBbRHJpdmVyX1NQSTFdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX1NQSTEgaW4gY29tcG9uZW50IDo6RHJpdmVyczpTUEkKKyNkZWZpbmUgICBSVEVfU1BJMSAgICAgICAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBTUEkgKFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSkgW0RyaXZlcl9TUEkxXQorCisvLyA8ZT4gU1BJIChTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UpIFtEcml2ZXJfU1BJMl0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfU1BJMiBpbiBjb21wb25lbnQgOjpEcml2ZXJzOlNQSQorI2RlZmluZSAgIFJURV9TUEkyICAgICAgICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFNQSSAoU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlKSBbRHJpdmVyX1NQSTJdCisKKy8vIDxlPiBTUEkgKFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSkgW0RyaXZlcl9TUEkzXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9TUEkzIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6U1BJCisjZGVmaW5lICAgUlRFX1NQSTMgICAgICAgICAgICAgICAgICAgICAgIDAKKy8vIDwvZT4gU1BJIChTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UpIFtEcml2ZXJfU1BJM10KKworLy8gPGU+IFNQSSAoU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlKSBbRHJpdmVyX1NQSTRdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX1NQSTQgaW4gY29tcG9uZW50IDo6RHJpdmVyczpTUEkKKyNkZWZpbmUgICBSVEVfU1BJNCAgICAgICAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBTUEkgKFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSkgW0RyaXZlcl9TUEk0XQorCisvLyA8ZT4gSTJDIChJbnRlci1pbnRlZ3JhdGVkIENpcmN1aXQgSW50ZXJmYWNlIDIpIFtEcml2ZXJfSTJDMF0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfSTJDMCBpbiBjb21wb25lbnQgOjpEcml2ZXJzOkkyQworI2RlZmluZSAgIFJURV9JMkMwICAgICAgICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IEkyQyAoSW50ZXItaW50ZWdyYXRlZCBDaXJjdWl0IEludGVyZmFjZSAyKSBbRHJpdmVyX0kyQzBdCisKKy8vIDxlPiBJMkMgKEludGVyLWludGVncmF0ZWQgQ2lyY3VpdCBJbnRlcmZhY2UgMikgW0RyaXZlcl9JMkMxXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9JMkMxIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6STJDCisjZGVmaW5lICAgUlRFX0kyQzEgICAgICAgICAgICAgICAgICAgICAgIDAKKy8vIDwvZT4gSTJDIChJbnRlci1pbnRlZ3JhdGVkIENpcmN1aXQgSW50ZXJmYWNlIDIpIFtEcml2ZXJfSTJDMV0KKworLy8gPGU+IEkyQyAoSW50ZXItaW50ZWdyYXRlZCBDaXJjdWl0IEludGVyZmFjZSAyKSBbRHJpdmVyX0kyQzJdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX0kyQzIgaW4gY29tcG9uZW50IDo6RHJpdmVyczpJMkMKKyNkZWZpbmUgICBSVEVfSTJDMiAgICAgICAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBJMkMgKEludGVyLWludGVncmF0ZWQgQ2lyY3VpdCBJbnRlcmZhY2UgMikgW0RyaXZlcl9JMkMyXQorCisvLyA8ZT4gSTJDIChJbnRlci1pbnRlZ3JhdGVkIENpcmN1aXQgSW50ZXJmYWNlIDIpIFtEcml2ZXJfSTJDM10KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfSTJDMyBpbiBjb21wb25lbnQgOjpEcml2ZXJzOkkyQworI2RlZmluZSAgIFJURV9JMkMzICAgICAgICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IEkyQyAoSW50ZXItaW50ZWdyYXRlZCBDaXJjdWl0IEludGVyZmFjZSAyKSBbRHJpdmVyX0kyQzNdCisKKy8vIDxlPiBVU0FSVCAoVW5pdmVyc2FsIHN5bmNocm9ub3VzIC0gYXN5bmNocm9ub3VzIHJlY2VpdmVyIHRyYW5zbWl0dGVyKSBbRHJpdmVyX1VTQVJUMF0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfVVNBUlQwIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6VVNBUlQKKyNkZWZpbmUgICBSVEVfVVNBUlQwICAgICAgICAgICAgICAgICAgICAgMQorLy8gPC9lPiBVU0FSVCAoVW5pdmVyc2FsIHN5bmNocm9ub3VzIC0gYXN5bmNocm9ub3VzIHJlY2VpdmVyIHRyYW5zbWl0dGVyKSBbRHJpdmVyX1VTQVJUMF0KKworLy8gPGU+IFVTQVJUIChVbml2ZXJzYWwgc3luY2hyb25vdXMgLSBhc3luY2hyb25vdXMgcmVjZWl2ZXIgdHJhbnNtaXR0ZXIpIFtEcml2ZXJfVVNBUlQxXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9VU0FSVDEgaW4gY29tcG9uZW50IDo6RHJpdmVyczpVU0FSVAorI2RlZmluZSAgIFJURV9VU0FSVDEgICAgICAgICAgICAgICAgICAgICAxCisvLyA8L2U+IFVTQVJUIChVbml2ZXJzYWwgc3luY2hyb25vdXMgLSBhc3luY2hyb25vdXMgcmVjZWl2ZXIgdHJhbnNtaXR0ZXIpIFtEcml2ZXJfVVNBUlQxXQorCisvLyA8ZT4gVVNBUlQgKFVuaXZlcnNhbCBzeW5jaHJvbm91cyAtIGFzeW5jaHJvbm91cyByZWNlaXZlciB0cmFuc21pdHRlcikgW0RyaXZlcl9VU0FSVDJdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX1VTQVJUMiBpbiBjb21wb25lbnQgOjpEcml2ZXJzOlVTQVJUCisjZGVmaW5lICAgUlRFX1VTQVJUMiAgICAgICAgICAgICAgICAgICAgIDAKKy8vIDwvZT4gVVNBUlQgKFVuaXZlcnNhbCBzeW5jaHJvbm91cyAtIGFzeW5jaHJvbm91cyByZWNlaXZlciB0cmFuc21pdHRlcikgW0RyaXZlcl9VU0FSVDJdCisKKy8vIDxlPiBVU0FSVCAoVW5pdmVyc2FsIHN5bmNocm9ub3VzIC0gYXN5bmNocm9ub3VzIHJlY2VpdmVyIHRyYW5zbWl0dGVyKSBbRHJpdmVyX1VTQVJUM10KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfVVNBUlQzIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6VVNBUlQKKyNkZWZpbmUgICBSVEVfVVNBUlQzICAgICAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBVU0FSVCAoVW5pdmVyc2FsIHN5bmNocm9ub3VzIC0gYXN5bmNocm9ub3VzIHJlY2VpdmVyIHRyYW5zbWl0dGVyKSBbRHJpdmVyX1VTQVJUM10KKworLy8gPGU+IFVTQVJUIChVbml2ZXJzYWwgc3luY2hyb25vdXMgLSBhc3luY2hyb25vdXMgcmVjZWl2ZXIgdHJhbnNtaXR0ZXIpIFtEcml2ZXJfVVNBUlQ0XQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9VU0FSVDQgaW4gY29tcG9uZW50IDo6RHJpdmVyczpVU0FSVAorI2RlZmluZSAgIFJURV9VU0FSVDQgICAgICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFVTQVJUIChVbml2ZXJzYWwgc3luY2hyb25vdXMgLSBhc3luY2hyb25vdXMgcmVjZWl2ZXIgdHJhbnNtaXR0ZXIpIFtEcml2ZXJfVVNBUlQ0XQorCisvLyA8ZT4gRkxBU0ggKEZsYXNoIE1lbW9yeSkgW0RyaXZlcl9GTEFTSDBdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX0ZMQVNIMCBpbiBjb21wb25lbnQgOjpEcml2ZXJzOkZMQVNICisjZGVmaW5lICAgUlRFX0ZMQVNIMCAgICAgICAgICAgICAgICAgICAgIDEKKy8vIDwvZT4gRkxBU0ggKEZsYXNoIE1lbW9yeSkgW0RyaXZlcl9GTEFTSDBdCisKKy8vIDxlPiBNUEMgKE1lbW9yeSBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfSVNSQU0wX01QQ10KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfSVNSQU0wX01QQyBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9JU1JBTTBfTVBDICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IE1QQyAoTWVtb3J5IFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9JU1JBTTBfTVBDXQorCisvLyA8ZT4gTVBDIChNZW1vcnkgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0lTUkFNMV9NUENdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX0lTUkFNMV9NUEMgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfSVNSQU0xX01QQyAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBNUEMgKE1lbW9yeSBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfSVNSQU0xX01QQ10KKworLy8gPGU+IE1QQyAoTWVtb3J5IFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9JU1JBTTJfTVBDXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9JU1JBTTJfTVBDIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6TVBDCisjZGVmaW5lICAgUlRFX0lTUkFNMl9NUEMgICAgICAgICAgICAgICAgIDAKKy8vIDwvZT4gTVBDIChNZW1vcnkgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0lTUkFNMl9NUENdCisKKy8vIDxlPiBNUEMgKE1lbW9yeSBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfSVNSQU0zX01QQ10KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfSVNSQU0zX01QQyBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9JU1JBTTNfTVBDICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IE1QQyAoTWVtb3J5IFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9JU1JBTTNfTVBDXQorCisvLyA8ZT4gTVBDIChNZW1vcnkgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX1NSQU0xX01QQ10KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfU1JBTTFfTVBDIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6TVBDCisjZGVmaW5lICAgUlRFX0NPREVfU1JBTTFfTVBDICAgICAgICAgICAgIDEKKy8vIDwvZT4gTVBDIChNZW1vcnkgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX1NSQU0xX01QQ10KKworLy8gPGU+IE1QQyAoTWVtb3J5IFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9TUkFNMl9NUENdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX1NSQU0yX01QQyBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9DT0RFX1NSQU0yX01QQyAgICAgICAgICAgICAxCisvLyA8L2U+IE1QQyAoTWVtb3J5IFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9TUkFNMl9NUENdCisKKy8vIDxlPiBNUEMgKE1lbW9yeSBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfU1JBTTNfTVBDXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9TUkFNM19NUEMgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfQ09ERV9TUkFNM19NUEMgICAgICAgICAgICAgMAorLy8gPC9lPiBNUEMgKE1lbW9yeSBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfU1JBTTNfTVBDXQorCisvLyA8ZT4gUFBDIChQZXJpcGhlcmFsIFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9BSEJfUFBDRVhQMF0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfQUhCX1BQQ0VYUDAgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfQUhCX1BQQ0VYUDAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FIQl9QUENFWFAwXQorCisvLyA8ZT4gUFBDIChQZXJpcGhlcmFsIFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9BSEJfUFBDRVhQMV0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfQUhCX1BQQ0VYUDEgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfQUhCX1BQQ0VYUDEgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FIQl9QUENFWFAxXQorCisvLyA8ZT4gUFBDIChQZXJpcGhlcmFsIFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9BSEJfUFBDRVhQMl0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfQUhCX1BQQ0VYUDIgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfQUhCX1BQQ0VYUDIgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FIQl9QUENFWFAyXQorCisvLyA8ZT4gUFBDIChQZXJpcGhlcmFsIFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9BSEJfUFBDRVhQM10KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfQUhCX1BQQ0VYUDMgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfQUhCX1BQQ0VYUDMgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FIQl9QUENFWFAzXQorCisvLyA8ZT4gUFBDIChQZXJpcGhlcmFsIFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9BUEJfUFBDMF0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfQVBCX1BQQzAgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfQVBCX1BQQzAgICAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FQQl9QUEMwXQorCisvLyA8ZT4gUFBDIChQZXJpcGhlcmFsIFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9BUEJfUFBDMV0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfQVBCX1BQQzEgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfQVBCX1BQQzEgICAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FQQl9QUEMxXQorCisvLyA8ZT4gUFBDIChQZXJpcGhlcmFsIFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9BUEJfUFBDRVhQMF0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfQVBCX1BQQ0VYUDAgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfQVBCX1BQQ0VYUDAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FQQl9QUENFWFAwXQorCisvLyA8ZT4gUFBDIChQZXJpcGhlcmFsIFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9BUEJfUFBDRVhQMV0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfQVBCX1BQQ0VYUDEgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfQVBCX1BQQ0VYUDEgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FQQl9QUENFWFAxXQorCisvLyA8ZT4gUFBDIChQZXJpcGhlcmFsIFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9BUEJfUFBDRVhQMl0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfQVBCX1BQQ0VYUDIgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfQVBCX1BQQ0VYUDIgICAgICAgICAgICAgICAgMQorLy8gPC9lPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FQQl9QUENFWFAyXQorCisvLyA8ZT4gUFBDIChQZXJpcGhlcmFsIFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9BUEJfUFBDRVhQM10KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfQVBCX1BQQ0VYUDMgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfQVBCX1BQQ0VYUDMgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FQQl9QUENFWFAzXQorCisjZW5kaWYgIC8qIF9fUlRFX0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvY21zaXNfZHJpdmVycy9jb25maWcvY21zaXNfZHJpdmVyX2NvbmZpZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2Ntc2lzX2RyaXZlcnMvY29uZmlnL2Ntc2lzX2RyaXZlcl9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWIzYjYzCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2Ntc2lzX2RyaXZlcnMvY29uZmlnL2Ntc2lzX2RyaXZlcl9jb25maWcuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE4IEFSTSBMaW1pdGVkCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfX0NNU0lTX0RSSVZFUl9DT05GSUdfSF9fCisjZGVmaW5lIF9fQ01TSVNfRFJJVkVSX0NPTkZJR19IX18KKworI2luY2x1ZGUgInBsYXRmb3JtX3JldGFyZ2V0X2Rldi5oIgorI2luY2x1ZGUgIlJURV9EZXZpY2UuaCIKKyNpbmNsdWRlICJ0YXJnZXRfY2ZnLmgiCisKKyNpZmRlZiBSVEVfVVNBUlQwCisjZGVmaW5lIFVBUlQwX0RFViAgICAgICBBUk1fVUFSVDBfREVWX05TCisjZW5kaWYKKworI2lmZGVmIFJURV9VU0FSVDEKKyNpZmRlZiBTRUNVUkVfVUFSVDEKKyNkZWZpbmUgVUFSVDFfREVWICAgICAgIEFSTV9VQVJUMV9ERVZfUworI2Vsc2UKKyNkZWZpbmUgVUFSVDFfREVWICAgICAgIEFSTV9VQVJUMV9ERVZfTlMKKyNlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAgLyogX19DTVNJU19EUklWRVJfQ09ORklHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9jb25maWcvZGV2aWNlX2NmZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9jb25maWcvZGV2aWNlX2NmZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZGNkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL2NvbmZpZy9kZXZpY2VfY2ZnLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOSBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUworICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX19ERVZJQ0VfQ0ZHX0hfXworI2RlZmluZSBfX0RFVklDRV9DRkdfSF9fCisKKy8qKgorICogXGZpbGUgZGV2aWNlX2NmZy5oCisgKiBcYnJpZWYKKyAqIFRoaXMgaXMgdGhlIGRldmljZSBjb25maWd1cmF0aW9uIGZpbGUgd2l0aCBvbmx5IHVzZWQgcGVyaXBoZXJhbHMKKyAqIGRlZmluZWQgYW5kIGNvbmZpZ3VyZWQgdmlhIHRoZSBzZWN1cmUgYW5kL29yIG5vbi1zZWN1cmUgYmFzZSBhZGRyZXNzLgorICovCisKKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKy8qIEFSTSBVQVJUIENNU0RLICovCisjZGVmaW5lIERFRkFVTFRfVUFSVF9CQVVEUkFURSAxMTUyMDAKKyNkZWZpbmUgVUFSVDBfQ01TREtfUworI2RlZmluZSBVQVJUMF9DTVNES19OUworCisvKiBDTVNESyBUaW1lcnMgKi8KKyNkZWZpbmUgQ01TREtfVElNRVIwX1MKKyNkZWZpbmUgQ01TREtfVElNRVIyX05TCisKKworI2VuZGlmICAvKiBfX0RFVklDRV9DRkdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL2luY2x1ZGUvY21zaXMuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2UvaW5jbHVkZS9jbXNpcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNjJlNjIKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL2luY2x1ZGUvY21zaXMuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE5IEFybSBMaW1pdGVkCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5EIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fQ01TSVNfSF9fCisjZGVmaW5lIF9fQ01TSVNfSF9fCisKKy8qID09PT09PT09PT09PT09PT09PT09PT0gIFN0YXJ0IG9mIHNlY3Rpb24gdXNpbmcgYW5vbnltb3VzIHVuaW9ucyAgPT09PT09PT09PT09PT0gKi8KKyNpZiAgIGRlZmluZWQgKF9fQ0NfQVJNKQorICAjcHJhZ21hIHB1c2gKKyAgI3ByYWdtYSBhbm9uX3VuaW9ucworI2VsaWYgZGVmaW5lZCAoX19JQ0NBUk1fXykKKyAgI3ByYWdtYSBsYW5ndWFnZT1leHRlbmRlZAorI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyAgI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XYzExLWV4dGVuc2lvbnMiCisgICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Jlc2VydmVkLWlkLW1hY3JvIgorI2VsaWYgZGVmaW5lZCAoX19HTlVDX18pCisgIC8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2VsaWYgZGVmaW5lZCAoX19UTVM0NzBfXykKKyAgLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkIChfX1RBU0tJTkdfXykKKyAgI3ByYWdtYSB3YXJuaW5nIDU4NgorI2VsaWYgZGVmaW5lZCAoX19DU01DX18pCisgIC8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2Vsc2UKKyAgI3dhcm5pbmcgTm90IHN1cHBvcnRlZCBjb21waWxlciB0eXBlCisjZW5kaWYKKworCisvKiA9PT09PT09PSAgQ29uZmlndXJhdGlvbiBvZiBDb3JlIFBlcmlwaGVyYWxzICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIF9fQ00yM19SRVYgICAgICAgICAgICAgICAgMHgwMTAwVSAgIC8qIENvcmUgcmV2aXNpb24gcjFwMCAqLworI2RlZmluZSBfX1NBVVJFR0lPTl9QUkVTRU5UICAgICAgIDFVICAgICAgICAvKiBTQVUgcmVnaW9ucyBwcmVzZW50ICovCisjZGVmaW5lIF9fTVBVX1BSRVNFTlQgICAgICAgICAgICAgMVUgICAgICAgIC8qIE1QVSBwcmVzZW50ICovCisjZGVmaW5lIF9fVlRPUl9QUkVTRU5UICAgICAgICAgICAgMVUgICAgICAgIC8qIFZUT1IgcHJlc2VudCAqLworI2RlZmluZSBfX05WSUNfUFJJT19CSVRTICAgICAgICAgIDJVICAgICAgICAvKiBOdW1iZXIgb2YgQml0cyB1c2VkIGZvciBQcmlvcml0eSBMZXZlbHMgKi8KKyNkZWZpbmUgX19WZW5kb3JfU3lzVGlja0NvbmZpZyAgICAwVSAgICAgICAgLyogU2V0IHRvIDEgaWYgZGlmZmVyZW50IFN5c1RpY2sgQ29uZmlnIGlzIHVzZWQgKi8KKworI2luY2x1ZGUgInBsYXRmb3JtX2Rlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSA8Y29yZV9jbTIzLmg+ICAgIC8qITwgQVJNIENvcnRleC1NMjMgcHJvY2Vzc29yIGFuZCBjb3JlIHBlcmlwaGVyYWxzICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PSAgRW5kIG9mIHNlY3Rpb24gdXNpbmcgYW5vbnltb3VzIHVuaW9ucyAgPT09PT09PT09PT09PT09PSAqLworI2lmICAgZGVmaW5lZCAoX19DQ19BUk0pCisgICNwcmFnbWEgcG9wCisjZWxpZiBkZWZpbmVkIChfX0lDQ0FSTV9fKQorICAvKiBsZWF2ZSBhbm9ueW1vdXMgdW5pb25zIGVuYWJsZWQgKi8KKyNlbGlmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VsaWYgZGVmaW5lZCAoX19HTlVDX18pCisgIC8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2VsaWYgZGVmaW5lZCAoX19UTVM0NzBfXykKKyAgLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkIChfX1RBU0tJTkdfXykKKyAgI3ByYWdtYSB3YXJuaW5nIHJlc3RvcmUKKyNlbGlmIGRlZmluZWQgKF9fQ1NNQ19fKQorICAvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbHNlCisgICN3YXJuaW5nIE5vdCBzdXBwb3J0ZWQgY29tcGlsZXIgdHlwZQorI2VuZGlmCisKKyNlbmRpZiAgLyogX19DTVNJU19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9pbmNsdWRlL2RldmljZV9kZWZpbml0aW9uLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL2luY2x1ZGUvZGV2aWNlX2RlZmluaXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTcyM2JlCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9pbmNsdWRlL2RldmljZV9kZWZpbml0aW9uLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogXGZpbGUgZGV2aWNlX2RlZmluaXRpb24uaAorICogXGJyaWVmIFRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBleHBvcnRlZCBiYXNlZAorICogb24gdGhlIHBlcmlwaGVyYWwgZGVmaW5pdGlvbnMgZnJvbSBkZXZpY2VfY2ZnLmguCisgKiBUaGlzIGZpbGUgaXMgbWVhbnQgdG8gYmUgdXNlZCBhcyBhIGhlbHBlciBmb3IgYmFyZW1ldGFsCisgKiBhcHBsaWNhdGlvbnMgYW5kL29yIGFzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGNvbmZpZ3VyZSB0aGUgZ2VuZXJpYworICogZHJpdmVyIHN0cnVjdHVyZXMuCisgKi8KKworI2lmbmRlZiBfX0RFVklDRV9ERUZJTklUSU9OX0hfXworI2RlZmluZSBfX0RFVklDRV9ERUZJTklUSU9OX0hfXworCisjaW5jbHVkZSAiZGV2aWNlX2NmZy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qID09PT09PT0gUGVyaXBoZXJhbCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBkZWNsYXJhdGlvbnMgPT09PT09PSAqLworCisvKiBBUk0gR1BJTyBkcml2ZXIgc3RydWN0dXJlcyAqLworI2lmZGVmIEdQSU8wX0NNU0RLX1MKKyNpbmNsdWRlICJncGlvX2Ntc2RrX2Rydi5oIgorZXh0ZXJuIHN0cnVjdCBncGlvX2Ntc2RrX2Rldl90IEdQSU8wX0NNU0RLX0RFVl9TOworI2VuZGlmCisKKy8qIFVBUlQgQ01TREsgZHJpdmVyIHN0cnVjdHVyZXMgKi8KKyNpZmRlZiBVQVJUMF9DTVNES19TCisjaW5jbHVkZSAidWFydF9jbXNka19kcnYuaCIKK2V4dGVybiBzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCBBUk1fVUFSVDBfREVWX1M7CisjZW5kaWYKKyNpZmRlZiBVQVJUMF9DTVNES19OUworI2luY2x1ZGUgInVhcnRfY21zZGtfZHJ2LmgiCitleHRlcm4gc3RydWN0IHVhcnRfY21zZGtfZGV2X3QgQVJNX1VBUlQwX0RFVl9OUzsKKyNlbmRpZgorCisjaWZkZWYgVUFSVDFfQ01TREtfUworI2luY2x1ZGUgInVhcnRfY21zZGtfZHJ2LmgiCitleHRlcm4gc3RydWN0IHVhcnRfY21zZGtfZGV2X3QgQVJNX1VBUlQxX0RFVl9TOworI2VuZGlmCisjaWZkZWYgVUFSVDFfQ01TREtfTlMKKyNpbmNsdWRlICJ1YXJ0X2Ntc2RrX2Rydi5oIgorZXh0ZXJuIHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90IEFSTV9VQVJUMV9ERVZfTlM7CisjZW5kaWYKKworLyogQ01TREsgVGltZXIgZHJpdmVyIHN0cnVjdHVyZXMgKi8KKyNpZmRlZiBDTVNES19USU1FUjBfUworI2luY2x1ZGUgInRpbWVyX2Ntc2RrX2Rydi5oIgorZXh0ZXJuIHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCBDTVNES19USU1FUjBfREVWX1M7CisjZW5kaWYKKyNpZmRlZiBDTVNES19USU1FUjBfTlMKKyNpbmNsdWRlICJ0aW1lcl9jbXNka19kcnYuaCIKK2V4dGVybiBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QgQ01TREtfVElNRVIwX0RFVl9OUzsKKyNlbmRpZgorCisjaWZkZWYgQ01TREtfVElNRVIxX1MKKyNpbmNsdWRlICJ0aW1lcl9jbXNka19kcnYuaCIKK2V4dGVybiBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QgQ01TREtfVElNRVIxX0RFVl9TOworI2VuZGlmCisjaWZkZWYgQ01TREtfVElNRVIxX05TCisjaW5jbHVkZSAidGltZXJfY21zZGtfZHJ2LmgiCitleHRlcm4gc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90IENNU0RLX1RJTUVSMV9ERVZfTlM7CisjZW5kaWYKKworI2lmZGVmIENNU0RLX1RJTUVSMl9TCisjaW5jbHVkZSAidGltZXJfY21zZGtfZHJ2LmgiCitleHRlcm4gc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90IENNU0RLX1RJTUVSMl9ERVZfUzsKKyNlbmRpZgorI2lmZGVmIENNU0RLX1RJTUVSMl9OUworI2luY2x1ZGUgInRpbWVyX2Ntc2RrX2Rydi5oIgorZXh0ZXJuIHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCBDTVNES19USU1FUjJfREVWX05TOworI2VuZGlmCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgIC8qIF9fREVWSUNFX0RFRklOSVRJT05fSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL2luY2x1ZGUvcGxhdGZvcm1fZGVzY3JpcHRpb24uaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2UvaW5jbHVkZS9wbGF0Zm9ybV9kZXNjcmlwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MDBmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL2luY2x1ZGUvcGxhdGZvcm1fZGVzY3JpcHRpb24uaApAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE5IEFybSBMaW1pdGVkCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5EIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fUExBVEZPUk1fREVTQ1JJUFRJT05fSF9fCisjZGVmaW5lIF9fUExBVEZPUk1fREVTQ1JJUFRJT05fSF9fCisKKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKyNlbmRpZiAgLyogX19QTEFURk9STV9ERVNDUklQVElPTl9IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2UvaW5jbHVkZS9zeXN0ZW1fY29yZV9pbml0LmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL2luY2x1ZGUvc3lzdGVtX2NvcmVfaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlM2U1Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL2luY2x1ZGUvc3lzdGVtX2NvcmVfaW5pdC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxOSBBcm0gTGltaXRlZAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBUaGlzIGZpbGUgaXMgZGVyaXZhdGl2ZSBvZiBDTVNJUyBWNS4wMCBzeXN0ZW1fQVJNQ00yMy5jCisgKi8KKworI2lmbmRlZiBfX1NZU1RFTV9DT1JFX0NMS19IX18KKyNkZWZpbmUgX19TWVNURU1fQ09SRV9DTEtfSF9fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitleHRlcm4gdWludDMyX3QgU3lzdGVtQ29yZUNsb2NrOyAgLyohPCBTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5IChDb3JlIENsb2NrKSAgKi8KK2V4dGVybiB1aW50MzJfdCBQZXJpcGhlcmFsQ2xvY2s7ICAvKiE8IFBlcmlwaGVyYWwgQ2xvY2sgRnJlcXVlbmN5ICovCisKKy8qKgorICogXGJyaWVmICBJbml0aWFsaXplcyB0aGUgc3lzdGVtCisgKi8KK2V4dGVybiB2b2lkIFN5c3RlbUluaXQodm9pZCk7CisKKy8qKgorICogXGJyaWVmICBSZXN0b3JlcyBzeXN0ZW0gY29yZSBjbG9jaworICovCitleHRlcm4gdm9pZCBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1NZU1RFTV9DT1JFX0NMS19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL20yMzUxX2JsMi5zY3QgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9tMjM1MV9ibDIuc2N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOWJkZGYKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9tMjM1MV9ibDIuc2N0CkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAicmVnaW9uX2RlZnMuaCIKKworTFJfQ09ERSBCTDJfQ09ERV9TVEFSVCB7CisgICAgRVJfQ09ERSBCTDJfQ09ERV9TVEFSVCBCTDJfQ09ERV9TSVpFIHsKKyAgICAgICAgKi5vIChSRVNFVCArRmlyc3QpCisgICAgICAgICogKCtSTykKKyAgICB9CisKKyAgICAvKiBCYXNlIGFkZHJlc3Mgb2YgYm9vdGxvYWRlciBkYXRhIGFyZWEgKi8KKyAgICBCTDJfREFUQV9TVEFSVCBTX0RBVEFfU1RBUlQgeworICAgIH0KKworICAgIFRGTV9TSEFSRURfREFUQSArMCBBTElHTiAzMiBFTVBUWSBCT09UX1RGTV9TSEFSRURfREFUQV9TSVpFIHsKKyAgICB9CisKKyAgICBFUl9EQVRBICswIHsKKyAgICAgICAgKiAoK1pJICtSVykKKyAgICB9CisKKyAgICAvKiBNU1AgKi8KKyAgICBBUk1fTElCX1NUQUNLICswIEFMSUdOIDMyIEVNUFRZIEJMMl9NU1BfU1RBQ0tfU0laRSB7CisgICAgfQorCisgICAgQVJNX0xJQl9IRUFQICswIEFMSUdOIDggRU1QVFkgQkwyX0hFQVBfU0laRSB7CisgICAgfQorCisgICAgLyogVGhpcyBlbXB0eSwgemVybyBsb25nIGV4ZWN1dGlvbiByZWdpb24gaXMgaGVyZSB0byBtYXJrIHRoZSBsaW1pdCBhZGRyZXNzCisgICAgICogb2YgdGhlIGxhc3QgZXhlY3V0aW9uIHJlZ2lvbiB0aGF0IGlzIGFsbG9jYXRlZCBpbiBTUkFNLgorICAgICAqLworICAgIFNSQU1fV0FURVJNQVJLICswIEVNUFRZIDB4MCB7CisgICAgfQorCisgICAgLyogTWFrZSBzdXJlIHRoYXQgdGhlIHNlY3Rpb25zIGFsbG9jYXRlZCBpbiB0aGUgU1JBTSBkb2VzIG5vdCBleGNlZWQgdGhlCisgICAgICogc2l6ZSBvZiB0aGUgU1JBTSBhdmFpbGFibGUuCisgICAgICovCisgICAgU2NhdHRlckFzc2VydChJbWFnZUxpbWl0KFNSQU1fV0FURVJNQVJLKSA8PSBCTDJfREFUQV9TVEFSVCArIEJMMl9EQVRBX1NJWkUpCit9CmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9tMjM1MV9ucy5zY3QgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9tMjM1MV9ucy5zY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1YjJkNwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL20yMzUxX25zLnNjdApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgInJlZ2lvbl9kZWZzLmgiCisKK0xSX0NPREUgTlNfQ09ERV9TVEFSVCB7CisgICAgRVJfQ09ERSBOU19DT0RFX1NUQVJUIE5TX0NPREVfU0laRSB7CisgICAgICAgICoubyAoUkVTRVQgK0ZpcnN0KQorICAgICAgICAqICgrUk8pCisgICAgfQorCisgICAgRVJfREFUQSBOU19EQVRBX1NUQVJUIHsKKyAgICAgICAgKiAoK1pJICtSVykKKyAgICB9CisKKyAgICAvKiBNU1AgKi8KKyAgICBBUk1fTElCX1NUQUNLX01TUCArMCBBTElHTiAzMiBFTVBUWSBOU19NU1BfU1RBQ0tfU0laRSB7CisgICAgfQorCisgICAgLyogUFNQICovCisgICAgQVJNX0xJQl9TVEFDSyArMCBBTElHTiAzMiBFTVBUWSBOU19QU1BfU1RBQ0tfU0laRSB7CisgICAgfQorCisgICAgQVJNX0xJQl9IRUFQICswIEFMSUdOIDggRU1QVFkgTlNfSEVBUF9TSVpFIHsKKyAgICB9CisKKyAgICAvKiBUaGlzIGVtcHR5LCB6ZXJvIGxvbmcgZXhlY3V0aW9uIHJlZ2lvbiBpcyBoZXJlIHRvIG1hcmsgdGhlIGxpbWl0IGFkZHJlc3MKKyAgICAgKiBvZiB0aGUgbGFzdCBleGVjdXRpb24gcmVnaW9uIHRoYXQgaXMgYWxsb2NhdGVkIGluIFNSQU0uCisgICAgICovCisgICAgU1JBTV9XQVRFUk1BUksgKzAgRU1QVFkgMHgwIHsKKyAgICB9CisKKyAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgc2VjdGlvbnMgYWxsb2NhdGVkIGluIHRoZSBTUkFNIGRvZXMgbm90IGV4Y2VlZCB0aGUKKyAgICAgKiBzaXplIG9mIHRoZSBTUkFNIGF2YWlsYWJsZS4KKyAgICAgKi8KKyAgICBTY2F0dGVyQXNzZXJ0KEltYWdlTGltaXQoU1JBTV9XQVRFUk1BUkspIDw9IE5TX0RBVEFfU1RBUlQgKyBOU19EQVRBX1NJWkUpCit9CmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9tMjM1MV9zLnNjdCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL20yMzUxX3Muc2N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNDJkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9tMjM1MV9zLnNjdApAQCAtMCwwICsxLDU0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKioqKioqKioqKiBXQVJOSU5HOiBUaGlzIGlzIGFuIGF1dG8tZ2VuZXJhdGVkIGZpbGUuIERvIG5vdCBlZGl0ISAqKioqKioqKioqKi8KKworI2luY2x1ZGUgInJlZ2lvbl9kZWZzLmgiCisKK0xSX0NPREUgU19DT0RFX1NUQVJUIHsKKworICAgIC8qKioqICBUaGlzIGluaXRpYWwgc2VjdGlvbiBjb250YWlucyBjb21tb24gY29kZSBmb3Igc2VjdXJlIGJpbmFyeSAqLworICAgIEVSX1RGTV9DT0RFIFNfQ09ERV9TVEFSVCBTX0NPREVfU0laRSB7CisgICAgICAgICoubyAoUkVTRVQgK0ZpcnN0KQorICAgICAgICAqICgrUk8pCisgICAgfQorCisgICAgLyoqKiogVW5wcml2aWxlZ2VkIFNlY3VyZSBjb2RlIHN0YXJ0IGhlcmUgKi8KKyAgICBURk1fVU5QUklWX0NPREUgKzAgQUxJR04gMzIgeworICAgICAgICB0Zm1fc3BtX3NlcnZpY2VzLm8gKCtSTykKKyAgICAgICAgcGxhdGZvcm1fcmV0YXJnZXRfZGV2Lm8gKCtSTykKKyAgICAgICAgZGV2aWNlX2RlZmluaXRpb24ubyAoK1JPKQorICAgICAgICAqKFNGTikKKyAgICAgICAgKmFybWxpYioKKyAgICAgICAgKmxpYnRmbXNwcnQuYSAoK1JPKQorICAgIH0KKworICAgIC8qKioqIFBTQSBSb1QgUk8gcGFydCAoQ09ERSArIFJPREFUQSkgc3RhcnQgaGVyZSAqLworICAgIC8qCisgICAgICogVGhpcyBlbXB0eSwgemVybyBsb25nIGV4ZWN1dGlvbiByZWdpb24gaXMgaGVyZSB0byBtYXJrIHRoZSBzdGFydCBhZGRyZXNzCisgICAgICogb2YgUFNBIFJvVCBjb2RlLgorICAgICAqLworICAgIFRGTV9QU0FfQ09ERV9TVEFSVCArMCBBTElHTiAzMiBFTVBUWSAweDAgeworICAgIH0KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFCisgICAgVEZNX1NQX0lUU19MSU5LRVIgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZSogKCtSTykKKyAgICAgICAgKihURk1fU1BfSVRTX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX0FVRElUX0xPRworICAgIFRGTV9TUF9BVURJVF9MT0dfTElOS0VSICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9hdWRpdCogKCtSTykKKyAgICAgICAgKihURk1fU1BfQVVESVRfTE9HX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fQVVESVRfTE9HICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX0NSWVBUTworICAgIFRGTV9TUF9DUllQVE9fTElOS0VSICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9jcnlwdG8qICgrUk8pCisgICAgICAgICooVEZNX1NQX0NSWVBUT19BVFRSX0ZOKQorICAgIH0KKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX0NSWVBUTyAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9QTEFURk9STQorICAgIFRGTV9TUF9QTEFURk9STV9MSU5LRVIgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX3BsYXRmb3JtKiAoK1JPKQorICAgICAgICAqKFRGTV9TUF9QTEFURk9STV9BVFRSX0ZOKQorICAgIH0KKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX1BMQVRGT1JNICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX0lOSVRJQUxfQVRURVNUQVRJT04KKyAgICBURk1fU1BfSU5JVElBTF9BVFRFU1RBVElPTl9MSU5LRVIgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX2F0dGVzdCogKCtSTykKKyAgICAgICAgKihURk1fU1BfSU5JVElBTF9BVFRFU1RBVElPTl9BVFRSX0ZOKQorICAgIH0KKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX0lOSVRJQUxfQVRURVNUQVRJT04gKi8KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fVEVTVF9DT1JFCisgICAgVEZNX1NQX0NPUkVfVEVTVF9MSU5LRVIgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX3NzX2NvcmVfdGVzdC4qICgrUk8pCisgICAgICAgICooVEZNX1NQX0NPUkVfVEVTVF9BVFRSX0ZOKQorICAgIH0KKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX1RFU1RfQ09SRSAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX1NFQ1VSRV9TRVJWSUNFUworICAgIFRGTV9TUF9TRUNVUkVfVEVTVF9QQVJUSVRJT05fTElOS0VSICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9zZWN1cmVfY2xpZW50X3NlcnZpY2UuKiAoK1JPKQorICAgICAgICAqdGVzdF9mcmFtZXdvcmsqICgrUk8pCisgICAgICAgICp1YXJ0X3N0ZG91dC4qICgrUk8pCisgICAgICAgICpEcml2ZXJfVVNBUlQuKiAoK1JPKQorICAgICAgICAqYXJtX3VhcnRfZHJ2LiogKCtSTykKKyAgICAgICAgKnVhcnRfcGwwMTFfZHJ2LiogKCtSTykKKyAgICAgICAgKnVhcnRfY21zZGtfZHJ2KiAoK1JPKQorICAgICAgICAqc2VjdXJlX3N1aXRlcy4qICgrUk8pCisgICAgICAgICphdHRlc3RhdGlvbl9zX2ludGVyZmFjZV90ZXN0c3VpdGUuKiAoK1JPKQorICAgICAgICAqKFRGTV9TUF9TRUNVUkVfVEVTVF9QQVJUSVRJT05fQVRUUl9GTikKKyAgICB9CisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9URVNUX1NFQ1VSRV9TRVJWSUNFUyAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX0NPUkVfSVBDCisgICAgVEZNX1NQX0lQQ19TRVJWSUNFX1RFU1RfTElOS0VSICswIEFMSUdOIDMyIHsKKyAgICAgICAgKmlwY19zZXJ2aWNlX3Rlc3QuKiAoK1JPKQorICAgICAgICAqKFRGTV9TUF9JUENfU0VSVklDRV9URVNUX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fVEVTVF9DT1JFX0lQQyAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX1BTCisgICAgVEZNX1NQX1BTX1RFU1RfTElOS0VSICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9wc190ZXN0X3NlcnZpY2UuKiAoK1JPKQorICAgICAgICAqKFRGTV9TUF9QU19URVNUX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fVEVTVF9QUyAqLworCisgICAgLyoKKyAgICAgKiBUaGlzIGVtcHR5LCB6ZXJvIGxvbmcgZXhlY3V0aW9uIHJlZ2lvbiBpcyBoZXJlIHRvIG1hcmsgdGhlIGVuZCBhZGRyZXNzCisgICAgICogb2YgUFNBIFJvVCBjb2RlLgorICAgICAqLworICAgIFRGTV9QU0FfQ09ERV9FTkQgKzAgQUxJR04gMzIgRU1QVFkgMHgwIHsKKyAgICB9CisKKyAgICAvKioqKiBBUFBMSUNBVElPTiBSb1QgUk8gcGFydCAoQ09ERSArIFJPREFUQSkgc3RhcnQgaGVyZSAqLworICAgIC8qCisgICAgICogVGhpcyBlbXB0eSwgemVybyBsb25nIGV4ZWN1dGlvbiByZWdpb24gaXMgaGVyZSB0byBtYXJrIHRoZSBzdGFydCBhZGRyZXNzCisgICAgICogb2YgQVBQIFJvVCBjb2RlLgorICAgICAqLworICAgIFRGTV9BUFBfQ09ERV9TVEFSVCArMCBBTElHTiAzMiBFTVBUWSAweDAgeworICAgIH0KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fUFJPVEVDVEVEX1NUT1JBR0UKKyAgICBURk1fU1BfUFNfTElOS0VSICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9zdG9yYWdlKiAoK1JPKQorICAgICAgICAqdGVzdF9wc19udl9jb3VudGVycy4qICgrUk8pCisgICAgICAgICooVEZNX1NQX1BTX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fUFJPVEVDVEVEX1NUT1JBR0UgKi8KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fVEVTVF9DT1JFCisgICAgVEZNX1NQX0NPUkVfVEVTVF8yX0xJTktFUiArMCBBTElHTiAzMiB7CisgICAgICAgICp0Zm1fc3NfY29yZV90ZXN0XzIuKiAoK1JPKQorICAgICAgICAqKFRGTV9TUF9DT1JFX1RFU1RfMl9BVFRSX0ZOKQorICAgIH0KKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX1RFU1RfQ09SRSAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX0NPUkVfSVBDCisgICAgVEZNX1NQX0lQQ19DTElFTlRfVEVTVF9MSU5LRVIgKzAgQUxJR04gMzIgeworICAgICAgICAqaXBjX2NsaWVudF90ZXN0LiogKCtSTykKKyAgICAgICAgKihURk1fU1BfSVBDX0NMSUVOVF9URVNUX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fVEVTVF9DT1JFX0lQQyAqLworCisjaWZkZWYgVEZNX0VOQUJMRV9JUlFfVEVTVAorICAgIFRGTV9JUlFfVEVTVF8xX0xJTktFUiArMCBBTElHTiAzMiB7CisgICAgICAgICp0Zm1faXJxX3Rlc3Rfc2VydmljZV8xLiogKCtSTykKKyAgICAgICAgKnRpbWVyX2Ntc2RrKiAoK1JPKQorICAgICAgICAqKFRGTV9JUlFfVEVTVF8xX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9FTkFCTEVfSVJRX1RFU1QgKi8KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fVEVTVF9TRUNVUkVfU0VSVklDRVMKKyAgICBURk1fU1BfU0VDVVJFX0NMSUVOVF8yX0xJTktFUiArMCBBTElHTiAzMiB7CisgICAgICAgICp0Zm1fc2VjdXJlX2NsaWVudF8yLiogKCtSTykKKyAgICAgICAgKihURk1fU1BfU0VDVVJFX0NMSUVOVF8yX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fVEVTVF9TRUNVUkVfU0VSVklDRVMgKi8KKworI2lmZGVmIFRGTV9NVUxUSV9DT1JFX1RFU1QKKyAgICBURk1fU1BfTVVMVElfQ09SRV9URVNUX0xJTktFUiArMCBBTElHTiAzMiB7CisgICAgICAgICptdWx0aV9jb3JlX3Rlc3QuKiAoK1JPKQorICAgICAgICAqKFRGTV9TUF9NVUxUSV9DT1JFX1RFU1RfQVRUUl9GTikKKyAgICB9CisjZW5kaWYgLyogVEZNX01VTFRJX0NPUkVfVEVTVCAqLworCisgICAgLyoKKyAgICAgKiBUaGlzIGVtcHR5LCB6ZXJvIGxvbmcgZXhlY3V0aW9uIHJlZ2lvbiBpcyBoZXJlIHRvIG1hcmsgdGhlIGVuZCBhZGRyZXNzCisgICAgICogb2YgQVBQIFJvVCBjb2RlLgorICAgICAqLworICAgIFRGTV9BUFBfQ09ERV9FTkQgKzAgQUxJR04gMzIgRU1QVFkgMHgwIHsKKyAgICB9CisKKyNpZiBkZWZpbmVkKFNfQ09ERV9TUkFNX0FMSUFTX0JBU0UpCisgICAgLyogZUZsYXNoIGRyaXZlciBjb2RlIHRoYXQgZ2V0cyBjb3BpZWQgZnJvbSBGbGFzaCB0byBTUkFNICovCisgICAgRVJfQ09ERV9TUkFNIFNfQ09ERV9TUkFNX0FMSUFTX0JBU0UgQUxJR04gNCB7CisgICAgICAgIERyaXZlcl9HRkMxMDBfRUZsYXNoLm8gKCtSTykKKyAgICAgICAgZ2ZjMTAwX2VmbGFzaF9kcnYubyAoK1JPKQorICAgICAgICBtdXNjYV9iMV9lZmxhc2hfZHJ2Lm8gKCtSTykKKyAgICB9CisjZW5kaWYKKworICAgIC8qKioqIEJhc2UgYWRkcmVzcyBvZiBzZWN1cmUgZGF0YSBhcmVhICovCisgICAgVEZNX1NFQ1VSRV9EQVRBX1NUQVJUIFNfREFUQV9TVEFSVCB7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBNUFUgb24gQXJtdjYtTS92Ny1NIGNvcmUgaW4gbXVsdGktY29yZSB0b3BvbG9neSBtYXkgcmVxdWlyZSBtb3JlIHN0cmljdAorICAgICAqIGFsaWdubWVudCB0aGF0IE1QVSByZWdpb24gYmFzZSBhZGRyZXNzIG11c3QgYWxpZ24gd2l0aCB0aGUgTVBVIHJlZ2lvbgorICAgICAqIHNpemUuCisgICAgICogQXMgYSByZXN1bHQsIGluIG11bHRpLWNvcmUgdG9wb2xvZ3ksIHRvIHNhdmUgbWVtb3J5IHJlc291cmNlIGFuZCBNUFUKKyAgICAgKiByZWdpb25zLCB1bnByaXZpbGVnZWQgZGF0YSBzZWN0aW9ucyBhbmQgcHJpdmlsZWdlZCBkYXRhIHNlY3Rpb25zIGFyZQorICAgICAqIHNlcGFyYXRlZCBhbmQgZ2F0aGVyZWQgaW4gdW5wcml2aWxlZ2VkL3ByaXZpbGVnZWQgZGF0YSBhcmVhIHJlc3BlY3RpdmVseS4KKyAgICAgKiBLZWVwIEJMMiBzaGFyZWQgZGF0YSBhbmQgTVNQIHN0YWNrIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY3VyZSBkYXRhCisgICAgICogYXJlYSBpbiBzaW5nbGUgQXJtdjgtTSB0b3BvbG9neSwgd2hpbGUgbW92ZSB0aGUgdHdvIGFyZWFzIHRvIHRoZQorICAgICAqIGJlZ2lubmluZyBvZiBwcml2aWxlZ2VkIGRhdGEgcmVnaW9uIGluIG11bHRpLWNvcmUgdG9wb2xvZ3kuCisgICAgICovCisjaWZuZGVmIFRGTV9NVUxUSV9DT1JFX1RPUE9MT0dZCisgICAgLyogU2hhcmVkIGFyZWEgYmV0d2VlbiBCTDIgYW5kIHJ1bnRpbWUgdG8gZXhjaGFuZ2UgZGF0YSAqLworICAgIFRGTV9TSEFSRURfREFUQSArMCBBTElHTiAzMiBPVkVSTEFZIEVNUFRZIEJPT1RfVEZNX1NIQVJFRF9EQVRBX1NJWkUgeworICAgIH0KKworICAgIC8qIE1TUCAqLworICAgIEFSTV9MSUJfU1RBQ0tfTVNQICswIEFMSUdOIDMyIE9WRVJMQVkgRU1QVFkgU19NU1BfU1RBQ0tfU0laRSB7CisgICAgfQorCisgICAgLyogUFNQIGlzIHVucHJpdmlsZWdlZCBpbiBzaW5nbGUtY29yZSB0b3BvbG9neSAqLworICAgIEFSTV9MSUJfU1RBQ0sgKzAgQUxJR04gMzIgRU1QVFkgU19QU1BfU1RBQ0tfU0laRSB7CisgICAgfQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChURk1fUFNBX0FQSSkKKyAgICBURk1fU0VDVVJFX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDIwMDAgeworICAgIH0KKyNlbmRpZiAvKiAhZGVmaW5lZChURk1fUFNBX0FQSSkgKi8KKworICAgIFRGTV9VTlBSSVZfREFUQSArMCBBTElHTiAzMiB7CisgICAgfQorCisgICAgLyoqKiogQVBQIFJvVCBEQVRBIHN0YXJ0IGhlcmUgKi8KKyAgICAvKgorICAgICAqIFRoaXMgZW1wdHksIHplcm8gbG9uZyBleGVjdXRpb24gcmVnaW9uIGlzIGhlcmUgdG8gbWFyayB0aGUgc3RhcnQgYWRkcmVzcworICAgICAqIG9mIEFQUCBSb1QgUlcgYW5kIFN0YWNrLgorICAgICAqLworICAgIFRGTV9BUFBfUldfU1RBQ0tfU1RBUlQgKzAgQUxJR04gMzIgRU1QVFkgMHgwIHsKKyAgICB9CisKKyNpZmRlZiBURk1fUEFSVElUSU9OX1BST1RFQ1RFRF9TVE9SQUdFCisgICAgVEZNX1NQX1BTX0xJTktFUl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9zdG9yYWdlKiAoK1JXICtaSSkKKyAgICAgICAgKnRlc3RfcHNfbnZfY291bnRlcnMuKiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fU1BfUFNfQVRUUl9SVykKKyAgICAgICAgKihURk1fU1BfUFNfQVRUUl9aSSkKKyAgICB9CisKKyNpZiBkZWZpbmVkIChURk1fUFNBX0FQSSkKKyAgICBURk1fU1BfUFNfTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDgwMCB7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9QUk9URUNURURfU1RPUkFHRSAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX0NPUkUKKyAgICBURk1fU1BfQ09SRV9URVNUXzJfTElOS0VSX0RBVEEgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX3NzX2NvcmVfdGVzdF8yLiogKCtSVyArWkkpCisgICAgICAgICooVEZNX1NQX0NPUkVfVEVTVF8yX0FUVFJfUlcpCisgICAgICAgICooVEZNX1NQX0NPUkVfVEVTVF8yX0FUVFJfWkkpCisgICAgfQorCisjaWYgZGVmaW5lZCAoVEZNX1BTQV9BUEkpCisgICAgVEZNX1NQX0NPUkVfVEVTVF8yX0xJTktFUl9TVEFDSyArMCBBTElHTiAxMjggRU1QVFkgMHgwMjgwIHsKKyAgICB9CisjZW5kaWYKKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX1RFU1RfQ09SRSAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX0NPUkVfSVBDCisgICAgVEZNX1NQX0lQQ19DTElFTlRfVEVTVF9MSU5LRVJfREFUQSArMCBBTElHTiAzMiB7CisgICAgICAgICppcGNfY2xpZW50X3Rlc3QuKiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fU1BfSVBDX0NMSUVOVF9URVNUX0FUVFJfUlcpCisgICAgICAgICooVEZNX1NQX0lQQ19DTElFTlRfVEVTVF9BVFRSX1pJKQorICAgIH0KKworI2lmIGRlZmluZWQgKFRGTV9QU0FfQVBJKQorICAgIFRGTV9TUF9JUENfQ0xJRU5UX1RFU1RfTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDAzMDAgeworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fVEVTVF9DT1JFX0lQQyAqLworCisjaWZkZWYgVEZNX0VOQUJMRV9JUlFfVEVTVAorICAgIFRGTV9JUlFfVEVTVF8xX0xJTktFUl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9pcnFfdGVzdF9zZXJ2aWNlXzEuKiAoK1JXICtaSSkKKyAgICAgICAgKnRpbWVyX2Ntc2RrKiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fSVJRX1RFU1RfMV9BVFRSX1JXKQorICAgICAgICAqKFRGTV9JUlFfVEVTVF8xX0FUVFJfWkkpCisgICAgfQorCisjaWYgZGVmaW5lZCAoVEZNX1BTQV9BUEkpCisgICAgVEZNX0lSUV9URVNUXzFfTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDA0MDAgeworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8qIFRGTV9FTkFCTEVfSVJRX1RFU1QgKi8KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fVEVTVF9TRUNVUkVfU0VSVklDRVMKKyAgICBURk1fU1BfU0VDVVJFX0NMSUVOVF8yX0xJTktFUl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9zZWN1cmVfY2xpZW50XzIuKiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fU1BfU0VDVVJFX0NMSUVOVF8yX0FUVFJfUlcpCisgICAgICAgICooVEZNX1NQX1NFQ1VSRV9DTElFTlRfMl9BVFRSX1pJKQorICAgIH0KKworI2lmIGRlZmluZWQgKFRGTV9QU0FfQVBJKQorICAgIFRGTV9TUF9TRUNVUkVfQ0xJRU5UXzJfTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDMwMCB7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9URVNUX1NFQ1VSRV9TRVJWSUNFUyAqLworCisjaWZkZWYgVEZNX01VTFRJX0NPUkVfVEVTVAorICAgIFRGTV9TUF9NVUxUSV9DT1JFX1RFU1RfTElOS0VSX0RBVEEgKzAgQUxJR04gMzIgeworICAgICAgICAqbXVsdGlfY29yZV90ZXN0LiogKCtSVyArWkkpCisgICAgICAgICooVEZNX1NQX01VTFRJX0NPUkVfVEVTVF9BVFRSX1JXKQorICAgICAgICAqKFRGTV9TUF9NVUxUSV9DT1JFX1RFU1RfQVRUUl9aSSkKKyAgICB9CisKKyNpZiBkZWZpbmVkIChURk1fUFNBX0FQSSkKKyAgICBURk1fU1BfTVVMVElfQ09SRV9URVNUX0xJTktFUl9TVEFDSyArMCBBTElHTiAxMjggRU1QVFkgMHgwMTAwIHsKKyAgICB9CisjZW5kaWYKKyNlbmRpZiAvKiBURk1fTVVMVElfQ09SRV9URVNUICovCisKKyAgICAvKgorICAgICAqIFRoaXMgZW1wdHksIHplcm8gbG9uZyBleGVjdXRpb24gcmVnaW9uIGlzIGhlcmUgdG8gbWFyayB0aGUgZW5kIGFkZHJlc3MKKyAgICAgKiBvZiBBUFAgUm9UIFJXIGFuZCBTdGFjay4KKyAgICAgKi8KKyAgICBURk1fQVBQX1JXX1NUQUNLX0VORCArMCBBTElHTiAzMiBFTVBUWSAweDAgeworICAgIH0KKworI2lmZGVmIFRGTV9NVUxUSV9DT1JFX1RPUE9MT0dZCisjaWZkZWYgU19EQVRBX1BSSVZfU1RBUlQKKyAgICAvKioqKiBQcml2aWxlZ2VkIGRhdGEgYXJlYSBiYXNlIGFkZHJlc3Mgc3BlY2lmaWVkIGJ5IG11bHRpLWNvcmUgcGxhdGZvcm0gKi8KKyAgICBURk1fU0VDVVJFX1BSSVZfREFUQV9CT1VOREFSWSBTX0RBVEFfUFJJVl9TVEFSVCB7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIE1vdmUgQkwyIHNoYXJlZCBhcmVhIGFuZCBNU1Agc3RhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBwcml2aWxlZ2VkIGRhdGEKKyAgICAgKiBhcmVhIGluIG11bHRpLWNvcmUgdG9wb2xvZ3kuCisgICAgICovCisgICAgLyogU2hhcmVkIGFyZWEgYmV0d2VlbiBCTDIgYW5kIHJ1bnRpbWUgdG8gZXhjaGFuZ2UgZGF0YSAqLworICAgIFRGTV9TSEFSRURfREFUQSArMCBBTElHTiAzMiBPVkVSTEFZIEVNUFRZIEJPT1RfVEZNX1NIQVJFRF9EQVRBX1NJWkUgeworICAgIH0KKworICAgIC8qIE1TUCAqLworICAgIEFSTV9MSUJfU1RBQ0tfTVNQICswIEFMSUdOIDMyIE9WRVJMQVkgRU1QVFkgU19NU1BfU1RBQ0tfU0laRSB7CisgICAgfQorCisgICAgLyogUFNQIGlzIHByaXZpbGVnZWQgaW4gbXVsdGktY29yZSB0b3BvbG9neSAqLworICAgIEFSTV9MSUJfU1RBQ0sgKzAgQUxJR04gMzIgRU1QVFkgU19QU1BfU1RBQ0tfU0laRSB7CisgICAgfQorI2VuZGlmCisKKyAgICBBUk1fTElCX0hFQVAgKzAgQUxJR04gOCBFTVBUWSBTX0hFQVBfU0laRSB7CisgICAgfQorCisgICAgRVJfVEZNX0RBVEEgKzAgeworICAgICAgICAqICgrUlcgK1pJKQorICAgIH0KKworICAgIC8qKioqIFBTQSBSb1QgREFUQSBzdGFydCBoZXJlICovCisgICAgLyoKKyAgICAgKiBUaGlzIGVtcHR5LCB6ZXJvIGxvbmcgZXhlY3V0aW9uIHJlZ2lvbiBpcyBoZXJlIHRvIG1hcmsgdGhlIHN0YXJ0IGFkZHJlc3MKKyAgICAgKiBvZiBQU0EgUm9UIFJXIGFuZCBTdGFjay4KKyAgICAgKi8KKyAgICBURk1fUFNBX1JXX1NUQUNLX1NUQVJUICswIEFMSUdOIDMyIEVNUFRZIDB4MCB7CisgICAgfQorCisjaWZkZWYgVEZNX1BBUlRJVElPTl9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0UKKyAgICBURk1fU1BfSVRTX0xJTktFUl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UqICgrUlcgK1pJKQorICAgICAgICAqKFRGTV9TUF9JVFNfQVRUUl9SVykKKyAgICAgICAgKihURk1fU1BfSVRTX0FUVFJfWkkpCisgICAgfQorCisjaWYgZGVmaW5lZCAoVEZNX1BTQV9BUEkpCisgICAgVEZNX1NQX0lUU19MSU5LRVJfU1RBQ0sgKzAgQUxJR04gMTI4IEVNUFRZIDB4NjgwIHsKKyAgICB9CisjZW5kaWYKKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRSAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9BVURJVF9MT0cKKyAgICBURk1fU1BfQVVESVRfTE9HX0xJTktFUl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9hdWRpdCogKCtSVyArWkkpCisgICAgICAgICooVEZNX1NQX0FVRElUX0xPR19BVFRSX1JXKQorICAgICAgICAqKFRGTV9TUF9BVURJVF9MT0dfQVRUUl9aSSkKKyAgICB9CisKKyNpZiBkZWZpbmVkIChURk1fUFNBX0FQSSkKKyAgICBURk1fU1BfQVVESVRfTE9HX0xJTktFUl9TVEFDSyArMCBBTElHTiAxMjggRU1QVFkgMCB7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9BVURJVF9MT0cgKi8KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fQ1JZUFRPCisgICAgVEZNX1NQX0NSWVBUT19MSU5LRVJfREFUQSArMCBBTElHTiAzMiB7CisgICAgICAgICp0Zm1fY3J5cHRvKiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fU1BfQ1JZUFRPX0FUVFJfUlcpCisgICAgICAgICooVEZNX1NQX0NSWVBUT19BVFRSX1pJKQorICAgIH0KKworI2lmIGRlZmluZWQgKFRGTV9QU0FfQVBJKQorICAgIFRGTV9TUF9DUllQVE9fTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDIwMDAgeworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fQ1JZUFRPICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX1BMQVRGT1JNCisgICAgVEZNX1NQX1BMQVRGT1JNX0xJTktFUl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9wbGF0Zm9ybSogKCtSVyArWkkpCisgICAgICAgICooVEZNX1NQX1BMQVRGT1JNX0FUVFJfUlcpCisgICAgICAgICooVEZNX1NQX1BMQVRGT1JNX0FUVFJfWkkpCisgICAgfQorCisjaWYgZGVmaW5lZCAoVEZNX1BTQV9BUEkpCisgICAgVEZNX1NQX1BMQVRGT1JNX0xJTktFUl9TVEFDSyArMCBBTElHTiAxMjggRU1QVFkgMHgwNDAwIHsKKyAgICB9CisjZW5kaWYKKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX1BMQVRGT1JNICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX0lOSVRJQUxfQVRURVNUQVRJT04KKyAgICBURk1fU1BfSU5JVElBTF9BVFRFU1RBVElPTl9MSU5LRVJfREFUQSArMCBBTElHTiAzMiB7CisgICAgICAgICp0Zm1fYXR0ZXN0KiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fU1BfSU5JVElBTF9BVFRFU1RBVElPTl9BVFRSX1JXKQorICAgICAgICAqKFRGTV9TUF9JTklUSUFMX0FUVEVTVEFUSU9OX0FUVFJfWkkpCisgICAgfQorCisjaWYgZGVmaW5lZCAoVEZNX1BTQV9BUEkpCisgICAgVEZNX1NQX0lOSVRJQUxfQVRURVNUQVRJT05fTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDBBODAgeworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fSU5JVElBTF9BVFRFU1RBVElPTiAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX0NPUkUKKyAgICBURk1fU1BfQ09SRV9URVNUX0xJTktFUl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9zc19jb3JlX3Rlc3QuKiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fU1BfQ09SRV9URVNUX0FUVFJfUlcpCisgICAgICAgICooVEZNX1NQX0NPUkVfVEVTVF9BVFRSX1pJKQorICAgIH0KKworI2lmIGRlZmluZWQgKFRGTV9QU0FfQVBJKQorICAgIFRGTV9TUF9DT1JFX1RFU1RfTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDAzODAgeworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fVEVTVF9DT1JFICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX1RFU1RfU0VDVVJFX1NFUlZJQ0VTCisgICAgVEZNX1NQX1NFQ1VSRV9URVNUX1BBUlRJVElPTl9MSU5LRVJfREFUQSArMCBBTElHTiAzMiB7CisgICAgICAgICp0Zm1fc2VjdXJlX2NsaWVudF9zZXJ2aWNlLiogKCtSVyArWkkpCisgICAgICAgICp0ZXN0X2ZyYW1ld29yayogKCtSVyArWkkpCisgICAgICAgICp1YXJ0X3N0ZG91dC4qICgrUlcgK1pJKQorICAgICAgICAqRHJpdmVyX1VTQVJULiogKCtSVyArWkkpCisgICAgICAgICphcm1fdWFydF9kcnYuKiAoK1JXICtaSSkKKyAgICAgICAgKnVhcnRfcGwwMTFfZHJ2LiogKCtSVyArWkkpCisgICAgICAgICp1YXJ0X2Ntc2RrX2RydiogKCtSVyArWkkpCisgICAgICAgICpzZWN1cmVfc3VpdGVzLiogKCtSVyArWkkpCisgICAgICAgICphdHRlc3RhdGlvbl9zX2ludGVyZmFjZV90ZXN0c3VpdGUuKiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fU1BfU0VDVVJFX1RFU1RfUEFSVElUSU9OX0FUVFJfUlcpCisgICAgICAgICooVEZNX1NQX1NFQ1VSRV9URVNUX1BBUlRJVElPTl9BVFRSX1pJKQorICAgIH0KKworI2lmIGRlZmluZWQgKFRGTV9QU0FfQVBJKQorICAgIFRGTV9TUF9TRUNVUkVfVEVTVF9QQVJUSVRJT05fTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDBEMDAgeworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fVEVTVF9TRUNVUkVfU0VSVklDRVMgKi8KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fVEVTVF9DT1JFX0lQQworICAgIFRGTV9TUF9JUENfU0VSVklDRV9URVNUX0xJTktFUl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICAgICAgKmlwY19zZXJ2aWNlX3Rlc3QuKiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fU1BfSVBDX1NFUlZJQ0VfVEVTVF9BVFRSX1JXKQorICAgICAgICAqKFRGTV9TUF9JUENfU0VSVklDRV9URVNUX0FUVFJfWkkpCisgICAgfQorCisjaWYgZGVmaW5lZCAoVEZNX1BTQV9BUEkpCisgICAgVEZNX1NQX0lQQ19TRVJWSUNFX1RFU1RfTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDAyMjAgeworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fVEVTVF9DT1JFX0lQQyAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX1BTCisgICAgVEZNX1NQX1BTX1RFU1RfTElOS0VSX0RBVEEgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX3BzX3Rlc3Rfc2VydmljZS4qICgrUlcgK1pJKQorICAgICAgICAqKFRGTV9TUF9QU19URVNUX0FUVFJfUlcpCisgICAgICAgICooVEZNX1NQX1BTX1RFU1RfQVRUUl9aSSkKKyAgICB9CisKKyNpZiBkZWZpbmVkIChURk1fUFNBX0FQSSkKKyAgICBURk1fU1BfUFNfVEVTVF9MSU5LRVJfU1RBQ0sgKzAgQUxJR04gMTI4IEVNUFRZIDB4NTAwIHsKKyAgICB9CisjZW5kaWYKKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX1RFU1RfUFMgKi8KKworICAgIC8qCisgICAgICogVGhpcyBlbXB0eSwgemVybyBsb25nIGV4ZWN1dGlvbiByZWdpb24gaXMgaGVyZSB0byBtYXJrIHRoZSBlbmQgYWRkcmVzcworICAgICAqIG9mIFBTQSBSb1QgUlcgYW5kIFN0YWNrLgorICAgICAqLworICAgIFRGTV9QU0FfUldfU1RBQ0tfRU5EICswIEFMSUdOIDMyIEVNUFRZIDB4MCB7CisgICAgfQorCisjaWYgZGVmaW5lZCAoU19SQU1fQ09ERV9TVEFSVCkKKyAgICAvKiBFeGVjdXRhYmxlIGNvZGUgYWxsb2NhdGVkIGluIFJBTSAqLworICAgIFRGTV9SQU1fQ09ERSBTX1JBTV9DT0RFX1NUQVJUIHsKKyAgICAgICAgKiAoLnJhbWZ1bmMpCisgICAgfQorI2VuZGlmCisKKyAgICAvKiBUaGlzIGVtcHR5LCB6ZXJvIGxvbmcgZXhlY3V0aW9uIHJlZ2lvbiBpcyBoZXJlIHRvIG1hcmsgdGhlIGxpbWl0IGFkZHJlc3MKKyAgICAgKiBvZiB0aGUgbGFzdCBleGVjdXRpb24gcmVnaW9uIHRoYXQgaXMgYWxsb2NhdGVkIGluIFNSQU0uCisgICAgICovCisgICAgU1JBTV9XQVRFUk1BUksgKzAgRU1QVFkgMHgwIHsKKyAgICB9CisKKyAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgc2VjdGlvbnMgYWxsb2NhdGVkIGluIHRoZSBTUkFNIGRvZXMgbm90IGV4Y2VlZCB0aGUKKyAgICAgKiBzaXplIG9mIHRoZSBTUkFNIGF2YWlsYWJsZS4KKyAgICAgKi8KKyAgICBTY2F0dGVyQXNzZXJ0KEltYWdlTGltaXQoU1JBTV9XQVRFUk1BUkspIDw9IFNfREFUQV9TVEFSVCArIFNfREFUQV9TSVpFKQorfQorCisjaWZuZGVmIFRGTV9NVUxUSV9DT1JFX1RPUE9MT0dZCitMUl9WRU5FRVIgQ01TRV9WRU5FRVJfUkVHSU9OX1NUQVJUIHsKKyAgICAvKgorICAgICAqIFBsYWNlIHRoZSBDTVNFIFZlbmVlcnMgKGNvbnRhaW5pbmcgdGhlIFNHIGluc3RydWN0aW9uKSBpbiBhIHNlcGFyYXRlCisgICAgICogMzIgYnl0ZXMgYWxpZ25lZCByZWdpb24gc28gdGhhdCB0aGUgU0FVIGNhbiBiZSBwcm9ncmFtbWVkIHRvCisgICAgICoganVzdCBzZXQgdGhpcyByZWdpb24gYXMgTm9uLVNlY3VyZSBDYWxsYWJsZS4KKyAgICAgKi8KKyAgICBFUl9DT0RFX0NNU0VfVkVORUVSIENNU0VfVkVORUVSX1JFR0lPTl9TVEFSVCBDTVNFX1ZFTkVFUl9SRUdJT05fU0laRSB7CisgICAgICAgICooVmVuZWVyJCRDTVNFKQorICAgIH0KK30KKyNlbmRpZgorCitMUl9OU19QQVJUSVRJT04gTlNfUEFSVElUSU9OX1NUQVJUIHsKKyAgICAvKiBSZXNlcnZlZCBwbGFjZSBmb3IgTlMgYXBwbGljYXRpb24uCisgICAgICogTm8gY29kZSB3aWxsIGJlIHBsYWNlZCBoZXJlLCBqdXN0IGFkZHJlc3Mgb2YgdGhpcyByZWdpb24gaXMgdXNlZCBpbiB0aGUKKyAgICAgKiBzZWN1cmUgY29kZSB0byBjb25maWd1cmUgY2VydGFpbiBIVyBjb21wb25lbnRzLiBUaGlzIGdlbmVyYXRlcyBhbiBlbXB0eQorICAgICAqIGV4ZWN1dGlvbiByZWdpb24gZGVzY3JpcHRpb24gd2FybmluZyBkdXJpbmcgbGlua2luZy4KKyAgICAgKi8KKyAgICBFUl9OU19QQVJUSVRJT04gTlNfUEFSVElUSU9OX1NUQVJUIFVOSU5JVCBOU19QQVJUSVRJT05fU0laRSB7CisgICAgfQorfQorCisjaWZkZWYgQkwyCitMUl9TRUNPTkRBUllfUEFSVElUSU9OIFNFQ09OREFSWV9QQVJUSVRJT05fU1RBUlQgeworICAgIC8qIFJlc2VydmVkIHBsYWNlIGZvciBuZXcgaW1hZ2UgaW4gY2FzZSBvZiBmaXJtd2FyZSB1cGdyYWRlLgorICAgICAqIE5vIGNvZGUgd2lsbCBiZSBwbGFjZWQgaGVyZSwganVzdCBhZGRyZXNzIG9mIHRoaXMgcmVnaW9uIGlzIHVzZWQgaW4gdGhlCisgICAgICogc2VjdXJlIGNvZGUgdG8gY29uZmlndXJlIGNlcnRhaW4gSFcgY29tcG9uZW50cy4gVGhpcyBnZW5lcmF0ZXMgYW4gZW1wdHkKKyAgICAgKiBleGVjdXRpb24gcmVnaW9uIGRlc2NyaXB0aW9uIHdhcm5pbmcgZHVyaW5nIGxpbmtpbmcuCisgICAgICovCisgICAgRVJfU0VDT05EQVJZX1BBUlRJVElPTiBTRUNPTkRBUllfUEFSVElUSU9OX1NUQVJUIFwKKyAgICAgICAgVU5JTklUIFNFQ09OREFSWV9QQVJUSVRJT05fU0laRSB7CisgICAgfQorfQorI2VuZGlmIC8qIEJMMiAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvYXJtY2xhbmcvc3RhcnR1cF9jbXNka19tMjM1MV9ibDIucyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL3N0YXJ0dXBfY21zZGtfbTIzNTFfYmwyLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhMjM4YQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL3N0YXJ0dXBfY21zZGtfbTIzNTFfYmwyLnMKQEAgLTAsMCArMSw0MzUgQEAKKzsvKgorOyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4IEFSTSBMaW1pdGVkCis7ICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCis7ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cis7ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorOyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorOyAqCis7ICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorOyAqCis7ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorOyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCis7ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCis7ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorOyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorOyAqLworOworOyBUaGlzIGZpbGUgaXMgZGVyaXZhdGl2ZSBvZiBDTVNJUyBWNS4wMCBzdGFydHVwX0FSTXY4TU1MLnMKKworOy8qCis7Ly8tLS0tLS0tLSA8PDwgVXNlIENvbmZpZ3VyYXRpb24gV2l6YXJkIGluIENvbnRleHQgTWVudSA+Pj4gLS0tLS0tLS0tLS0tLS0tLS0tCis7Ki8KKworCis7IDxoPiBTdGFjayBDb25maWd1cmF0aW9uCis7ICAgPG8+IFN0YWNrIFNpemUgKGluIEJ5dGVzKSA8MHgwLTB4RkZGRkZGRkY6OD4KKzsgPC9oPgorCisgICAgICAgICAgICAgICAgSU1QT1JUIHxJbWFnZSQkQVJNX0xJQl9TVEFDSyQkWkkkJExpbWl0fAorCis7IFZlY3RvciBUYWJsZSBNYXBwZWQgdG8gQWRkcmVzcyAwIGF0IFJlc2V0CisKKyAgICAgICAgICAgICAgICBBUkVBICAgIFJFU0VULCBEQVRBLCBSRUFET05MWQorICAgICAgICAgICAgICAgIEVYUE9SVCAgX19WZWN0b3JzCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX1ZlY3RvcnNfRW5kCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX1ZlY3RvcnNfU2l6ZQorCitfX1ZlY3RvcnMgICAgICAgRENEICAgICB8SW1hZ2UkJEFSTV9MSUJfU1RBQ0skJFpJJCRMaW1pdHwgIDsgVG9wIG9mIFN0YWNrCisgICAgICAgICAgICAgICAgRENEICAgICBSZXNldF9IYW5kbGVyICAgICAgICAgICAgIDsgUmVzZXQgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgTk1JX0hhbmRsZXIgICAgICAgICAgICAgICA7IE5NSSBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBIYXJkRmF1bHRfSGFuZGxlciAgICAgICAgIDsgSGFyZCBGYXVsdCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNWQ19IYW5kbGVyICAgICAgICAgICAgICAgOyBTVkNhbGwgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBlbmRTVl9IYW5kbGVyICAgICAgICAgICAgOyBQZW5kU1YgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgU3lzVGlja19IYW5kbGVyICAgICAgICAgICA7IFN5c1RpY2sgSGFuZGxlcgorCisgICAgICAgICAgICAgICAgOyBFeHRlcm5hbCBJbnRlcnJ1cHRzCisKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJPRF9JUlFIYW5kbGVyCQkgICAgICAgOyAwCisgICAgICAgICAgICAgICAgRENEICAgICBJUkNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorICAgICAgICAgICAgICAgIERDRCAgICAgU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCisgICAgICAgICAgICAgICAgRENEICAgICBDTEtGQUlMX0lSUUhhbmRsZXIgICAgICAgICA7IDQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNQorICAgICAgICAgICAgICAgIERDRCAgICAgUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2CisgICAgICAgICAgICAgICAgRENEICAgICBUQU1QRVJfSVJRSGFuZGxlciAgICAgICAgICA7IDcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFdEVF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOAorICAgICAgICAgICAgICAgIERDRCAgICAgV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDEwCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDExCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDEyCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UM19JUlFIYW5kbGVyICAgICAgICAgICA7IDEzCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDE0CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDE1CisgICAgICAgICAgICAgICAgRENEICAgICBHUEFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE2CisgICAgICAgICAgICAgICAgRENEICAgICBHUEJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE3CisgICAgICAgICAgICAgICAgRENEICAgICBHUENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE4CisgICAgICAgICAgICAgICAgRENEICAgICBHUERfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE5CisgICAgICAgICAgICAgICAgRENEICAgICBHUEVfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIwCisgICAgICAgICAgICAgICAgRENEICAgICBHUEZfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIxCisgICAgICAgICAgICAgICAgRENEICAgICBRU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDIyCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDIzCisgICAgICAgICAgICAgICAgRENEICAgICBCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgICA7IDI0CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI1CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgICA7IDI2CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgICA7IDI3CisgICAgICAgICAgICAgICAgRENEICAgICBCUkFLRTFfSVJRSGFuZGxlciAgICAgICAgICA7IDI4CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI5CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgICA7IDMwCisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMl9JUlFIYW5kbGVyICAgICAgICA7IDMxCisgICAgICAgICAgICAgICAgRENEICAgICBURk1fVElNRVIwX0lSUV9IYW5kbGVyICAgICA7IDMyCisgICAgICAgICAgICAgICAgRENEICAgICBUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMzCisgICAgICAgICAgICAgICAgRENEICAgICBUTVIyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM0CisgICAgICAgICAgICAgICAgRENEICAgICBUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM1CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDM2CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDM3CisgICAgICAgICAgICAgICAgRENEICAgICBJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM4CisgICAgICAgICAgICAgICAgRENEICAgICBJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM5CisgICAgICAgICAgICAgICAgRENEICAgICBQRE1BMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQwCisgICAgICAgICAgICAgICAgRENEICAgICBEQUNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDQxCisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQyCisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDQzCisgICAgICAgICAgICAgICAgRENEICAgICBBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgICA7IDQ0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDQ1CisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ2CisgICAgICAgICAgICAgICAgRENEICAgICBFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDUwCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUyCisgICAgICAgICAgICAgICAgRENEICAgICBVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCisgICAgICAgICAgICAgICAgRENEICAgICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CisgICAgICAgICAgICAgICAgRENEICAgICBVU0JPVEdfSVJRSGFuZGxlciAgICAgICAgICA7IDU1CisgICAgICAgICAgICAgICAgRENEICAgICBDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDU3CisgICAgICAgICAgICAgICAgRENEICAgICBTQzBfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU4CisgICAgICAgICAgICAgICAgRENEICAgICBTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CisgICAgICAgICAgICAgICAgRENEICAgICBTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDYxCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDYzCisgICAgICAgICAgICAgICAgRENEICAgICBTREgwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY1CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY3CisgICAgICAgICAgICAgICAgRENEICAgICBJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY4CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY5CisgICAgICAgICAgICAgICAgRENEICAgICBPUEEwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcwCisgICAgICAgICAgICAgICAgRENEICAgICBDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCisgICAgICAgICAgICAgICAgRENEICAgICBHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNl9JUlFIYW5kbGVyICAgICAgICAgICA7IDczCisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CisgICAgICAgICAgICAgICAgRENEICAgICBVU0NJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc2CisgICAgICAgICAgICAgICAgRENEICAgICBVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CisgICAgICAgICAgICAgICAgRENEICAgICBCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CisgICAgICAgICAgICAgICAgRENEICAgICBCUFdNMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgxCisgICAgICAgICAgICAgICAgRENEICAgICBJMkMyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDgyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgzCisgICAgICAgICAgICAgICAgRENEICAgICBRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CisgICAgICAgICAgICAgICAgRENEICAgICBRRUkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg1CisgICAgICAgICAgICAgICAgRENEICAgICBFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CisgICAgICAgICAgICAgICAgRENEICAgICBFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CisgICAgICAgICAgICAgICAgRENEICAgICBHUEhfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDg4CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkxCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkzCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk1CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk3CisgICAgICAgICAgICAgICAgRENEICAgICBQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4CisgICAgICAgICAgICAgICAgRENEICAgICBTQ1VfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDk5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDEwMAorICAgICAgICAgICAgICAgIERDRCAgICAgVFJOR19JUlFIYW5kbGVyICAgICAgICAgICAgOyAxMDEKK19fVmVjdG9yc19FbmQKKworX19WZWN0b3JzX1NpemUgIEVRVSAgICAgX19WZWN0b3JzX0VuZCAtIF9fVmVjdG9ycworCisgICAgICAgICAgICAgICAgQVJFQSAgICB8LnRleHR8LCBDT0RFLCBSRUFET05MWQorCisKKzsgUmVzZXQgSGFuZGxlcgorCitSZXNldF9IYW5kbGVyICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgUmVzZXRfSGFuZGxlciAgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBJTVBPUlQgIFN5c3RlbUluaXQKKyAgICAgICAgICAgICAgICBJTVBPUlQgIF9fbWFpbgorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1TeXN0ZW1Jbml0CisgICAgICAgICAgICAgICAgQkxYICAgICBSMAorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1fX21haW4KKyAgICAgICAgICAgICAgICBCWCAgICAgIFIwCisgICAgICAgICAgICAgICAgRU5EUAorCisKKzsgRHVtbXkgRXhjZXB0aW9uIEhhbmRsZXJzIChpbmZpbml0ZSBsb29wcyB3aGljaCBjYW4gYmUgbW9kaWZpZWQpCisKK05NSV9IYW5kbGVyICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBOTUlfSGFuZGxlciAgICAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK0hhcmRGYXVsdF9IYW5kbGVyXAorICAgICAgICAgICAgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEhhcmRGYXVsdF9IYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorTWVtTWFuYWdlX0hhbmRsZXJcCisgICAgICAgICAgICAgICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgTWVtTWFuYWdlX0hhbmRsZXIgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCisKK1NWQ19IYW5kbGVyICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBTVkNfSGFuZGxlciAgICAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK1BlbmRTVl9IYW5kbGVyICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBQZW5kU1ZfSGFuZGxlciAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK1N5c1RpY2tfSGFuZGxlciBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBTeXNUaWNrX0hhbmRsZXIgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK01QQ19IYW5kbGVyICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBNUENfSGFuZGxlciAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorUFBDX0hhbmRsZXIgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFBQQ19IYW5kbGVyICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCisKKworRGVmYXVsdF9IYW5kbGVyIFBST0MKKworICAgICAgICAgICAgICAgIEVYUE9SVCAgQk9EX0lSUUhhbmRsZXIJCSAgICAgIFtXRUFLXSA7IDAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIElSQ19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMQorICAgICAgICAgICAgICAgIEVYUE9SVCAgUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyAyCisgICAgICAgICAgICAgICAgRVhQT1JUICBTUkFNX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgW1dFQUtdIDsgNAorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA1CisgICAgICAgICAgICAgICAgRVhQT1JUICBSVENfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgNworICAgICAgICAgICAgICAgIEVYUE9SVCAgV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA4CisgICAgICAgICAgICAgICAgRVhQT1JUICBXV0RUX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQyX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQ1X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQQV9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMTYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQQl9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMTcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQQ19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMTgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQRF9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMTkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQRV9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMjAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQRl9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMjEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMjIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMjMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJSQUtFMF9JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgMjQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMjUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMjYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00wX1AyX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMjcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgMjgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMjkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00xX1AxX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMzAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMzEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRGTV9USU1FUjBfSVJRX0hhbmRsZXIgICAgW1dFQUtdIDsgMzIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRNUjFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRNUjJfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRNUjNfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMzYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMzcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyQzBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyQzFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFBETUEwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIERBQ19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNDEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVBREMwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVBREMxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEFDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgNDQKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNDUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVBREMyX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVBREMzX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQyX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDkKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNTAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNQSTFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNQSTJfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQkRfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQk9UR19JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgNTUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIENBTjBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIENBTjFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNDMF9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNTgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNDMV9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNTkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNDMl9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNjAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNDM19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNjEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNQSTNfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNjIKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNESDBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNjQKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjUKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjYKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyUzBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNjgKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIE9QQTBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNzAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIENSUFRfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNzEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQR19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNzIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQ1X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJQV00wX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJQV00xX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzkKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgODAKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgODEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyQzJfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgODIKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgODMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFFFSTBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgODQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFFFSTFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgODUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgODYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVDQVAxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgODcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQSF9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgODgKKyAgICAgICAgICAgICAgIEVYUE9SVCAgIEVJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgODkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNESDFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgOTAKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTEKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgOTIKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTMKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTQKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTUKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTYKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFBETUExX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgOTgKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIFNDVV9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgOTkKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgMTAwCisgICAgICAgICAgICAgICAgRVhQT1JUICBUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDEwMQorCisKKworICAgICAgICAgICAgICAgIEVYUE9SVAlERUZBVUxUX0lSUUhhbmRsZXIJCSAgW1dFQUtdCisKK0JPRF9JUlFIYW5kbGVyCQkgICAgICAgOyAwCitJUkNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDEKK1BXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCitDTEtGQUlMX0lSUUhhbmRsZXIgICAgICAgICA7IDQKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDUKK1JUQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNgorVEFNUEVSX0lSUUhhbmRsZXIgICAgICAgICAgOyA3CitXRFRfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDgKK1dXRFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOQorRUlOVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMAorRUlOVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMQorRUlOVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMgorRUlOVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMworRUlOVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNAorRUlOVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNQorR1BBX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNgorR1BCX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNworR1BDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOAorR1BEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOQorR1BFX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMAorR1BGX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMQorUVNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyAyMgorU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAyMworQlJBS0UwX0lSUUhhbmRsZXIgICAgICAgICAgOyAyNAorRVBXTTBfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyNQorRVBXTTBfUDFfSVJRSGFuZGxlciAgICAgICAgOyAyNgorRVBXTTBfUDJfSVJRSGFuZGxlciAgICAgICAgOyAyNworQlJBS0UxX0lSUUhhbmRsZXIgICAgICAgICAgOyAyOAorRVBXTTFfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyOQorRVBXTTFfUDFfSVJRSGFuZGxlciAgICAgICAgOyAzMAorRVBXTTFfUDJfSVJRSGFuZGxlciAgICAgICAgOyAzMQorVEZNX1RJTUVSMF9JUlFfSGFuZGxlciAgICAgOyAzMgorVE1SMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzMworVE1SMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNAorVE1SM19JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNQorVUFSVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNgorVUFSVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNworSTJDMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOAorSTJDMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOQorUERNQTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MAorREFDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA0MQorRUFEQzBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MgorRUFEQzFfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MworQUNNUDAxX0lSUUhhbmRsZXIgICAgICAgICAgOyA0NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNDUKK0VBREMyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDYKK0VBREMzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDcKK1VBUlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDgKK1VBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDkKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDUwCitTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCitTUEkyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUyCitVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCitVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CitVU0JPVEdfSVJRSGFuZGxlciAgICAgICAgICA7IDU1CitDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CitDQU4xX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU3CitTQzBfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU4CitTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CitTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCitTQzNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYxCitTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2MworU0RIMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjUKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY2Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NworSTJTMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2OAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjkKK09QQTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzAKK0NSUFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzEKK0dQR19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNzIKK0VJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzMKK1VBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzQKK1VBUlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzUKK1VTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzYKK1VTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzcKK0JQV00wX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzgKK0JQV00xX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzkKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgwCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MQorSTJDMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODMKK1FFSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODQKK1FFSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODUKK0VDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODYKK0VDQVAxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODcKK0dQSF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgODgKK0VJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgIDsgODkKK1NESDFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOTAKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDkxCis7VVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTMKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTYKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk3CitQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4CitTQ1VfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDk5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDEwMAorVFJOR19JUlFIYW5kbGVyICAgICAgICAgICAgOyAxMDEKK0RFRkFVTFRfSVJRSGFuZGxlcgorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKKworICAgICAgICAgICAgICAgIEFMSUdOCisKKyAgICAgICAgICAgICAgICBFTkQKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL3N0YXJ0dXBfY21zZGtfbTIzNTFfbnMucyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL3N0YXJ0dXBfY21zZGtfbTIzNTFfbnMucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGZjM2U3Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvYXJtY2xhbmcvc3RhcnR1cF9jbXNka19tMjM1MV9ucy5zCkBAIC0wLDAgKzEsNDI4IEBACis7LyoKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBBUk0gTGltaXRlZAorOyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworOyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworOyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKzsgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKzsgKgorOyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKzsgKgorOyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKzsgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorOyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorOyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKzsgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKzsgKi8KKzsKKzsgVGhpcyBmaWxlIGlzIGRlcml2YXRpdmUgb2YgQ01TSVMgVjUuMDAgc3RhcnR1cF9BUk12OE1NTC5zCisKKzsvKgorOy8vLS0tLS0tLS0gPDw8IFVzZSBDb25maWd1cmF0aW9uIFdpemFyZCBpbiBDb250ZXh0IE1lbnUgPj4+IC0tLS0tLS0tLS0tLS0tLS0tLQorOyovCisKKworOyA8aD4gU3RhY2sgQ29uZmlndXJhdGlvbgorOyAgIDxvPiBTdGFjayBTaXplIChpbiBCeXRlcykgPDB4MC0weEZGRkZGRkZGOjg+Cis7IDwvaD4KKworICAgICAgICAgICAgICAgIElNUE9SVCB8SW1hZ2UkJEFSTV9MSUJfU1RBQ0tfTVNQJCRaSSQkTGltaXR8CisgICAgICAgICAgICAgICAgSU1QT1JUIHxJbWFnZSQkQVJNX0xJQl9TVEFDSyQkWkkkJExpbWl0fAorCis7IFZlY3RvciBUYWJsZSBNYXBwZWQgdG8gQWRkcmVzcyAwIGF0IFJlc2V0CisKKyAgICAgICAgICAgICAgICBBUkVBICAgIFJFU0VULCBEQVRBLCBSRUFET05MWQorICAgICAgICAgICAgICAgIEVYUE9SVCAgX19WZWN0b3JzCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX1ZlY3RvcnNfRW5kCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX1ZlY3RvcnNfU2l6ZQorCitfX1ZlY3RvcnMgICAgICAgRENEICAgICB8SW1hZ2UkJEFSTV9MSUJfU1RBQ0tfTVNQJCRaSSQkTGltaXR8ICA7IFRvcCBvZiBTdGFjaworICAgICAgICAgICAgICAgIERDRCAgICAgUmVzZXRfSGFuZGxlciAgICAgICAgICAgICA7IFJlc2V0IEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIE5NSV9IYW5kbGVyICAgICAgICAgICAgICAgOyBOTUkgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgSGFyZEZhdWx0X0hhbmRsZXIgICAgICAgICA7IEhhcmQgRmF1bHQgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICBTVkNfSGFuZGxlciAgICAgICAgICAgICAgIDsgU1ZDYWxsIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICBQZW5kU1ZfSGFuZGxlciAgICAgICAgICAgIDsgUGVuZFNWIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFN5c1RpY2tfSGFuZGxlciAgICAgICAgICAgOyBTeXNUaWNrIEhhbmRsZXIKKworCisgICAgICAgICAgICAgICAgOyBFeHRlcm5hbCBJbnRlcnJ1cHRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG1heGltdW0gb2YgMzIgRXh0ZXJuYWwgSW50ZXJydXB0cyBhcmUgcG9zc2libGUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJPRF9JUlFIYW5kbGVyCQkgICAgICAgOyAwCisgICAgICAgICAgICAgICAgRENEICAgICBJUkNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorICAgICAgICAgICAgICAgIERDRCAgICAgU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCisgICAgICAgICAgICAgICAgRENEICAgICBDTEtGQUlMX0lSUUhhbmRsZXIgICAgICAgICA7IDQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNQorICAgICAgICAgICAgICAgIERDRCAgICAgUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2CisgICAgICAgICAgICAgICAgRENEICAgICBUQU1QRVJfSVJRSGFuZGxlciAgICAgICAgICA7IDcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFdEVF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOAorICAgICAgICAgICAgICAgIERDRCAgICAgV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDEwCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDExCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDEyCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UM19JUlFIYW5kbGVyICAgICAgICAgICA7IDEzCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDE0CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDE1CisgICAgICAgICAgICAgICAgRENEICAgICBHUEFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE2CisgICAgICAgICAgICAgICAgRENEICAgICBHUEJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE3CisgICAgICAgICAgICAgICAgRENEICAgICBHUENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE4CisgICAgICAgICAgICAgICAgRENEICAgICBHUERfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE5CisgICAgICAgICAgICAgICAgRENEICAgICBHUEVfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIwCisgICAgICAgICAgICAgICAgRENEICAgICBHUEZfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIxCisgICAgICAgICAgICAgICAgRENEICAgICBRU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDIyCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDIzCisgICAgICAgICAgICAgICAgRENEICAgICBCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgICA7IDI0CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI1CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgICA7IDI2CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgICA7IDI3CisgICAgICAgICAgICAgICAgRENEICAgICBCUkFLRTFfSVJRSGFuZGxlciAgICAgICAgICA7IDI4CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI5CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgICA7IDMwCisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMl9JUlFIYW5kbGVyICAgICAgICA7IDMxCisgICAgICAgICAgICAgICAgRENEICAgICBUTVIwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMyCisgICAgICAgICAgICAgICAgRENEICAgICBUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMzCisgICAgICAgICAgICAgICAgRENEICAgICBUSU1FUjFfSGFuZGxlciAgICAgICAgICAgICA7IFRNUjJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzQgOyAiVElNRVIxX0hhbmRsZXIiIGlzIGp1c3QgaGFuZGxlciwgbm90IHJlYWwgdGltZXIxCisgICAgICAgICAgICAgICAgRENEICAgICBUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM1CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDM2CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDM3CisgICAgICAgICAgICAgICAgRENEICAgICBJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM4CisgICAgICAgICAgICAgICAgRENEICAgICBJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM5CisgICAgICAgICAgICAgICAgRENEICAgICBQRE1BMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQwCisgICAgICAgICAgICAgICAgRENEICAgICBEQUNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDQxCisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQyCisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDQzCisgICAgICAgICAgICAgICAgRENEICAgICBBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgICA7IDQ0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDQ1CisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ2CisgICAgICAgICAgICAgICAgRENEICAgICBFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDUwCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUyCisgICAgICAgICAgICAgICAgRENEICAgICBVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCisgICAgICAgICAgICAgICAgRENEICAgICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CisgICAgICAgICAgICAgICAgRENEICAgICBVU0JPVEdfSVJRSGFuZGxlciAgICAgICAgICA7IDU1CisgICAgICAgICAgICAgICAgRENEICAgICBDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDU3CisgICAgICAgICAgICAgICAgRENEICAgICBTQzBfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU4CisgICAgICAgICAgICAgICAgRENEICAgICBTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CisgICAgICAgICAgICAgICAgRENEICAgICBTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDYxCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDYzCisgICAgICAgICAgICAgICAgRENEICAgICBTREgwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY1CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY3CisgICAgICAgICAgICAgICAgRENEICAgICBJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY4CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY5CisgICAgICAgICAgICAgICAgRENEICAgICBPUEEwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcwCisgICAgICAgICAgICAgICAgRENEICAgICBDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCisgICAgICAgICAgICAgICAgRENEICAgICBHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNl9JUlFIYW5kbGVyICAgICAgICAgICA7IDczCisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CisgICAgICAgICAgICAgICAgRENEICAgICBVU0NJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc2CisgICAgICAgICAgICAgICAgRENEICAgICBVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CisgICAgICAgICAgICAgICAgRENEICAgICBCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CisgICAgICAgICAgICAgICAgRENEICAgICBCUFdNMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgxCisgICAgICAgICAgICAgICAgRENEICAgICBJMkMyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDgyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgzCisgICAgICAgICAgICAgICAgRENEICAgICBRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CisgICAgICAgICAgICAgICAgRENEICAgICBRRUkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg1CisgICAgICAgICAgICAgICAgRENEICAgICBFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CisgICAgICAgICAgICAgICAgRENEICAgICBFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CisgICAgICAgICAgICAgICAgRENEICAgICBHUEhfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDg4CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkxCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkzCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk1CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk3CisgICAgICAgICAgICAgICAgRENEICAgICBQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDEwMAorICAgICAgICAgICAgICAgIERDRCAgICAgVFJOR19JUlFIYW5kbGVyICAgICAgICAgICAgOyAxMDEKK19fVmVjdG9yc19FbmQKKworX19WZWN0b3JzX1NpemUgIEVRVSAgICAgX19WZWN0b3JzX0VuZCAtIF9fVmVjdG9ycworCisgICAgICAgICAgICAgICAgQVJFQSAgICB8LnRleHR8LCBDT0RFLCBSRUFET05MWQorCisKKzsgUmVzZXQgSGFuZGxlcgorCitSZXNldF9IYW5kbGVyICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgUmVzZXRfSGFuZGxlciAgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBJTVBPUlQgIF9fbWFpbgorICAgICAgICAgICAgICAgIE1SUyAgICAgUjAsIGNvbnRyb2wgICAgOyBHZXQgY29udHJvbCB2YWx1ZQorICAgICAgICAgICAgICAgIE1PVlMgICAgUjEsICMyCisgICAgICAgICAgICAgICAgT1JSUyAgICBSMCwgUjAsIFIxICAgICA7IFNlbGVjdCBzd2l0Y2ggdG8gUFNQCisgICAgICAgICAgICAgICAgTVNSICAgICBjb250cm9sLCBSMAorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID18SW1hZ2UkJEFSTV9MSUJfU1RBQ0skJFpJJCRMaW1pdHwKKyAgICAgICAgICAgICAgICBNT1YgICAgIFNQLCBSMCAgICAgICAgIDsgSW5pdGlhbGlzZSBQU1AKKyAgICAgICAgICAgICAgICBMRFIgICAgIFIwLCA9X19tYWluCisgICAgICAgICAgICAgICAgQlggICAgICBSMAorICAgICAgICAgICAgICAgIEVORFAKKworCis7IER1bW15IEV4Y2VwdGlvbiBIYW5kbGVycyAoaW5maW5pdGUgbG9vcHMgd2hpY2ggY2FuIGJlIG1vZGlmaWVkKQorCitOTUlfSGFuZGxlciAgICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgTk1JX0hhbmRsZXIgICAgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCitIYXJkRmF1bHRfSGFuZGxlclwKKyAgICAgICAgICAgICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBIYXJkRmF1bHRfSGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKKworU1ZDX0hhbmRsZXIgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNWQ19IYW5kbGVyICAgICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorUGVuZFNWX0hhbmRsZXIgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFBlbmRTVl9IYW5kbGVyICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorU3lzVGlja19IYW5kbGVyIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFN5c1RpY2tfSGFuZGxlciAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorCisKK0RlZmF1bHRfSGFuZGxlciBQUk9DCisKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJPRF9JUlFIYW5kbGVyCQkgICAgICBbV0VBS10gOyAwCisgICAgICAgICAgICAgICAgRVhQT1JUICBJUkNfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFBXUldVX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMgorICAgICAgICAgICAgICAgIEVYUE9SVCAgU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyAzCisgICAgICAgICAgICAgICAgRVhQT1JUICBDTEtGQUlMX0lSUUhhbmRsZXIgICAgICAgIFtXRUFLXSA7IDQKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNQorICAgICAgICAgICAgICAgIEVYUE9SVCAgUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA2CisgICAgICAgICAgICAgICAgRVhQT1JUICBUQU1QRVJfSVJRSGFuZGxlciAgICAgICAgIFtXRUFLXSA7IDcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFdEVF9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgOAorICAgICAgICAgICAgICAgIEVYUE9SVCAgV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA5CisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDEwCisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDExCisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDEyCisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UM19JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDEzCisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDE0CisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDE1CisgICAgICAgICAgICAgICAgRVhQT1JUICBHUEFfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDE2CisgICAgICAgICAgICAgICAgRVhQT1JUICBHUEJfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDE3CisgICAgICAgICAgICAgICAgRVhQT1JUICBHUENfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDE4CisgICAgICAgICAgICAgICAgRVhQT1JUICBHUERfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDE5CisgICAgICAgICAgICAgICAgRVhQT1JUICBHUEVfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDIwCisgICAgICAgICAgICAgICAgRVhQT1JUICBHUEZfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDIxCisgICAgICAgICAgICAgICAgRVhQT1JUICBRU1BJMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDIyCisgICAgICAgICAgICAgICAgRVhQT1JUICBTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDIzCisgICAgICAgICAgICAgICAgRVhQT1JUICBCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgIFtXRUFLXSA7IDI0CisgICAgICAgICAgICAgICAgRVhQT1JUICBFUFdNMF9QMF9JUlFIYW5kbGVyICAgICAgIFtXRUFLXSA7IDI1CisgICAgICAgICAgICAgICAgRVhQT1JUICBFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgIFtXRUFLXSA7IDI2CisgICAgICAgICAgICAgICAgRVhQT1JUICBFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgIFtXRUFLXSA7IDI3CisgICAgICAgICAgICAgICAgRVhQT1JUICBCUkFLRTFfSVJRSGFuZGxlciAgICAgICAgIFtXRUFLXSA7IDI4CisgICAgICAgICAgICAgICAgRVhQT1JUICBFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgIFtXRUFLXSA7IDI5CisgICAgICAgICAgICAgICAgRVhQT1JUICBFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgIFtXRUFLXSA7IDMwCisgICAgICAgICAgICAgICAgRVhQT1JUICBFUFdNMV9QMl9JUlFIYW5kbGVyICAgICAgIFtXRUFLXSA7IDMxCisgICAgICAgICAgICAgICAgRVhQT1JUICBUTVIwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDMyCisgICAgICAgICAgICAgICAgRVhQT1JUICBUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDMzCisgICAgICAgICAgICAgICAgRVhQT1JUICBUSU1FUjFfSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDM0CisgICAgICAgICAgICAgICAgRVhQT1JUICBUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDM1CisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDM2CisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDM3CisgICAgICAgICAgICAgICAgRVhQT1JUICBJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDM4CisgICAgICAgICAgICAgICAgRVhQT1JUICBJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDM5CisgICAgICAgICAgICAgICAgRVhQT1JUICBQRE1BMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQwCisgICAgICAgICAgICAgICAgRVhQT1JUICBEQUNfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDQxCisgICAgICAgICAgICAgICAgRVhQT1JUICBFQURDMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQyCisgICAgICAgICAgICAgICAgRVhQT1JUICBFQURDMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQzCisgICAgICAgICAgICAgICAgRVhQT1JUICBBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgIFtXRUFLXSA7IDQ0CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDQ1CisgICAgICAgICAgICAgICAgRVhQT1JUICBFQURDMl9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQ2CisgICAgICAgICAgICAgICAgRVhQT1JUICBFQURDM19JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQ3CisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQ4CisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUM19JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQ5CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDUwCisgICAgICAgICAgICAgICAgRVhQT1JUICBTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDUxCisgICAgICAgICAgICAgICAgRVhQT1JUICBTUEkyX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDUyCisgICAgICAgICAgICAgICAgRVhQT1JUICBVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDUzCisgICAgICAgICAgICAgICAgRVhQT1JUICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDU0CisgICAgICAgICAgICAgICAgRVhQT1JUICBVU0JPVEdfSVJRSGFuZGxlciAgICAgICAgIFtXRUFLXSA7IDU1CisgICAgICAgICAgICAgICAgRVhQT1JUICBDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDU2CisgICAgICAgICAgICAgICAgRVhQT1JUICBDQU4xX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDU3CisgICAgICAgICAgICAgICAgRVhQT1JUICBTQzBfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDU4CisgICAgICAgICAgICAgICAgRVhQT1JUICBTQzFfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDU5CisgICAgICAgICAgICAgICAgRVhQT1JUICBTQzJfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDYwCisgICAgICAgICAgICAgICAgRVhQT1JUICBTQzNfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDYxCisgICAgICAgICAgICAgICAgRVhQT1JUICBTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDYyCisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDYzCisgICAgICAgICAgICAgICAgRVhQT1JUICBTREgwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDY0CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDY1CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDY2CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDY3CisgICAgICAgICAgICAgICAgRVhQT1JUICBJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDY4CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDY5CisgICAgICAgICAgICAgICAgRVhQT1JUICBPUEEwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDcwCisgICAgICAgICAgICAgICAgRVhQT1JUICBDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDcxCisgICAgICAgICAgICAgICAgRVhQT1JUICBHUEdfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDcyCisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UNl9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDczCisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDc0CisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDc1CisgICAgICAgICAgICAgICAgRVhQT1JUICBVU0NJMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDc2CisgICAgICAgICAgICAgICAgRVhQT1JUICBVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDc3CisgICAgICAgICAgICAgICAgRVhQT1JUICBCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDc4CisgICAgICAgICAgICAgICAgRVhQT1JUICBCUFdNMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDc5CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDgwCisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDgxCisgICAgICAgICAgICAgICAgRVhQT1JUICBJMkMyX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDgyCisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDgzCisgICAgICAgICAgICAgICAgRVhQT1JUICBRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDg0CisgICAgICAgICAgICAgICAgRVhQT1JUICBRRUkxX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDg1CisgICAgICAgICAgICAgICAgRVhQT1JUICBFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDg2CisgICAgICAgICAgICAgICAgRVhQT1JUICBFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDg3CisgICAgICAgICAgICAgICAgRVhQT1JUICBHUEhfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDg4CisgICAgICAgICAgICAgICBFWFBPUlQgICBFSU5UN19JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDg5CisgICAgICAgICAgICAgICAgRVhQT1JUICBTREgxX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDkwCisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDkxCisgICAgICAgICAgICAgICA7RVhQT1JUICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDkyCisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDkzCisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDk0CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDk1CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDk2CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDk3CisgICAgICAgICAgICAgICAgRVhQT1JUICBQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDk4CisgICAgICAgICAgICAgICA7RVhQT1JUICBTQ1VfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDk5CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDEwMAorICAgICAgICAgICAgICAgIEVYUE9SVCAgVFJOR19JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyAxMDEKKworCisKKyAgICAgICAgICAgICAgICBFWFBPUlQJREVGQVVMVF9JUlFIYW5kbGVyCQkgIFtXRUFLXQorCitCT0RfSVJRSGFuZGxlcgkJICAgICAgIDsgMAorSVJDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxCitQV1JXVV9JUlFIYW5kbGVyICAgICAgICAgICA7IDIKK1NSQU1fSVJRSGFuZGxlciAgICAgICAgICAgIDsgMworQ0xLRkFJTF9JUlFIYW5kbGVyICAgICAgICAgOyA0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA1CitSVENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYKK1RBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgIDsgNworV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4CitXV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkKK0VJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTAKK0VJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTEKK0VJTlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTIKK0VJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTMKK0VJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTQKK0VJTlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTUKK0dQQV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTYKK0dQQl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTcKK0dQQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTgKK0dQRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTkKK0dQRV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjAKK0dQRl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjEKK1FTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMjIKK1NQSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMjMKK0JSQUtFMF9JUlFIYW5kbGVyICAgICAgICAgIDsgMjQKK0VQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjUKK0VQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMjYKK0VQV00wX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMjcKK0JSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgIDsgMjgKK0VQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjkKK0VQV00xX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMzAKK0VQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMzEKK1RNUjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzIKK1RNUjFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzMKK1RJTUVSMV9IYW5kbGVyICAgICAgICAgICAgIDsgMzQKK1RNUjNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzUKK1VBUlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzYKK1VBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzcKK0kyQzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzgKK0kyQzFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzkKK1BETUEwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDAKK0RBQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNDEKK0VBREMwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDIKK0VBREMxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDMKK0FDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgIDsgNDQKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDQ1CitFQURDMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ2CitFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CitVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CitVQVJUM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA1MAorU1BJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MQorU1BJMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MgorVVNCRF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MworVVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NAorVVNCT1RHX0lSUUhhbmRsZXIgICAgICAgICAgOyA1NQorQ0FOMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NgorQ0FOMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NworU0MwX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OAorU0MxX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OQorU0MyX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MAorU0MzX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MQorU1BJM19JUlFIYW5kbGVyICAgICAgICAgICAgOyA2MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjMKK1NESDBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjQKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY1Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjcKK0kyUzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjgKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY5CitPUEEwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcwCitDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCitHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCitFSU5UNl9JUlFIYW5kbGVyICAgICAgICAgICA7IDczCitVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CitVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CitVU0NJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc2CitVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CitCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CitCUFdNMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODEKK0kyQzJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODIKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgzCitRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CitRRUkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg1CitFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CitFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CitHUEhfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDg4CitFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CitTREgxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkwCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MQorO1VTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOTIKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDkzCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTUKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk2Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NworUERNQTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA5OAorO1NDVV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOTkKKzswICAgICAgICAgICAgICAgICAgICAgICAgIDsgMTAwCitUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDEwMQorREVGQVVMVF9JUlFIYW5kbGVyCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisKKyAgICAgICAgICAgICAgICBFTkRQCisKKyAgICAgICAgICAgICAgICBBTElHTgorCisgICAgICAgICAgICAgICAgRU5ECmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9zdGFydHVwX2Ntc2RrX20yMzUxX3MucyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL3N0YXJ0dXBfY21zZGtfbTIzNTFfcy5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZDFlNzEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9zdGFydHVwX2Ntc2RrX20yMzUxX3MucwpAQCAtMCwwICsxLDQzNiBAQAorOy8qCis7ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTggQVJNIExpbWl0ZWQKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKzsgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKzsgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCis7ICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cis7ICoKKzsgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCis7ICoKKzsgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCis7ICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKzsgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKzsgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCis7ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCis7ICovCis7Cis7IFRoaXMgZmlsZSBpcyBkZXJpdmF0aXZlIG9mIENNU0lTIFY1LjAwIHN0YXJ0dXBfQVJNdjhNTUwucworCis7LyoKKzsvLy0tLS0tLS0tIDw8PCBVc2UgQ29uZmlndXJhdGlvbiBXaXphcmQgaW4gQ29udGV4dCBNZW51ID4+PiAtLS0tLS0tLS0tLS0tLS0tLS0KKzsqLworCisKKzsgPGg+IFN0YWNrIENvbmZpZ3VyYXRpb24KKzsgICA8bz4gU3RhY2sgU2l6ZSAoaW4gQnl0ZXMpIDwweDAtMHhGRkZGRkZGRjo4PgorOyA8L2g+CisKKyAgICAgICAgICAgICAgICBJTVBPUlQgfEltYWdlJCRBUk1fTElCX1NUQUNLX01TUCQkWkkkJExpbWl0fAorICAgICAgICAgICAgICAgIElNUE9SVCB8SW1hZ2UkJEFSTV9MSUJfU1RBQ0skJFpJJCRMaW1pdHwKKworOyBWZWN0b3IgVGFibGUgTWFwcGVkIHRvIEFkZHJlc3MgMCBhdCBSZXNldAorCisgICAgICAgICAgICAgICAgQVJFQSAgICBSRVNFVCwgREFUQSwgUkVBRE9OTFkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIF9fVmVjdG9ycworICAgICAgICAgICAgICAgIEVYUE9SVCAgX19WZWN0b3JzX0VuZAorICAgICAgICAgICAgICAgIEVYUE9SVCAgX19WZWN0b3JzX1NpemUKKyAgICAgICAgICAgICAgICBJTVBPUlQgIFNDVV9JUlFIYW5kbGVyCisKKyAgICAgICAgICAgICAgICBQUkVTRVJWRTgKKworX19WZWN0b3JzICAgICAgIERDRCAgICAgfEltYWdlJCRBUk1fTElCX1NUQUNLX01TUCQkWkkkJExpbWl0fCAgOyBUb3Agb2YgU3RhY2sKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFJlc2V0X0hhbmRsZXIgICAgICAgICAgICAgOyBSZXNldCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBOTUlfSGFuZGxlciAgICAgICAgICAgICAgIDsgTk1JIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEhhcmRGYXVsdF9IYW5kbGVyICAgICAgICAgOyBIYXJkIEZhdWx0IEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgU1ZDX0hhbmRsZXIgICAgICAgICAgICAgICA7IFNWQ2FsbCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgUGVuZFNWX0hhbmRsZXIgICAgICAgICAgICA7IFBlbmRTViBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBTeXNUaWNrX0hhbmRsZXIgICAgICAgICAgIDsgU3lzVGljayBIYW5kbGVyCisKKyAgICAgICAgICAgICAgICA7IEV4dGVybmFsIEludGVycnVwdHMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJPRF9JUlFIYW5kbGVyCQkgICAgICAgOyAwCisgICAgICAgICAgICAgICAgRENEICAgICBJUkNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorICAgICAgICAgICAgICAgIERDRCAgICAgU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCisgICAgICAgICAgICAgICAgRENEICAgICBDTEtGQUlMX0lSUUhhbmRsZXIgICAgICAgICA7IDQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNQorICAgICAgICAgICAgICAgIERDRCAgICAgUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2CisgICAgICAgICAgICAgICAgRENEICAgICBUQU1QRVJfSVJRSGFuZGxlciAgICAgICAgICA7IDcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFdEVF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOAorICAgICAgICAgICAgICAgIERDRCAgICAgV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDEwCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDExCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDEyCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UM19JUlFIYW5kbGVyICAgICAgICAgICA7IDEzCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDE0CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDE1CisgICAgICAgICAgICAgICAgRENEICAgICBHUEFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE2CisgICAgICAgICAgICAgICAgRENEICAgICBHUEJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE3CisgICAgICAgICAgICAgICAgRENEICAgICBHUENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE4CisgICAgICAgICAgICAgICAgRENEICAgICBHUERfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE5CisgICAgICAgICAgICAgICAgRENEICAgICBHUEVfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIwCisgICAgICAgICAgICAgICAgRENEICAgICBHUEZfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIxCisgICAgICAgICAgICAgICAgRENEICAgICBRU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDIyCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDIzCisgICAgICAgICAgICAgICAgRENEICAgICBCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgICA7IDI0CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI1CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgICA7IDI2CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgICA7IDI3CisgICAgICAgICAgICAgICAgRENEICAgICBCUkFLRTFfSVJRSGFuZGxlciAgICAgICAgICA7IDI4CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI5CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgICA7IDMwCisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMl9JUlFIYW5kbGVyICAgICAgICA7IDMxCisgICAgICAgICAgICAgICAgRENEICAgICBURk1fVElNRVIwX0lSUV9IYW5kbGVyICAgICA7IDMyCisgICAgICAgICAgICAgICAgRENEICAgICBUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMzCisgICAgICAgICAgICAgICAgRENEICAgICBUSU1FUjFfSGFuZGxlciAgICAgICAgICAgICA7IDM0CisgICAgICAgICAgICAgICAgRENEICAgICBUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM1CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDM2CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDM3CisgICAgICAgICAgICAgICAgRENEICAgICBJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM4CisgICAgICAgICAgICAgICAgRENEICAgICBJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM5CisgICAgICAgICAgICAgICAgRENEICAgICBQRE1BMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQwCisgICAgICAgICAgICAgICAgRENEICAgICBEQUNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDQxCisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQyCisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDQzCisgICAgICAgICAgICAgICAgRENEICAgICBBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgICA7IDQ0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDQ1CisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ2CisgICAgICAgICAgICAgICAgRENEICAgICBFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDUwCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUyCisgICAgICAgICAgICAgICAgRENEICAgICBVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCisgICAgICAgICAgICAgICAgRENEICAgICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CisgICAgICAgICAgICAgICAgRENEICAgICBVU0JPVEdfSVJRSGFuZGxlciAgICAgICAgICA7IDU1CisgICAgICAgICAgICAgICAgRENEICAgICBDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDU3CisgICAgICAgICAgICAgICAgRENEICAgICBTQzBfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU4CisgICAgICAgICAgICAgICAgRENEICAgICBTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CisgICAgICAgICAgICAgICAgRENEICAgICBTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDYxCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDYzCisgICAgICAgICAgICAgICAgRENEICAgICBTREgwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY1CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY3CisgICAgICAgICAgICAgICAgRENEICAgICBJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY4CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY5CisgICAgICAgICAgICAgICAgRENEICAgICBPUEEwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcwCisgICAgICAgICAgICAgICAgRENEICAgICBDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCisgICAgICAgICAgICAgICAgRENEICAgICBHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNl9JUlFIYW5kbGVyICAgICAgICAgICA7IDczCisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CisgICAgICAgICAgICAgICAgRENEICAgICBVU0NJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc2CisgICAgICAgICAgICAgICAgRENEICAgICBVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CisgICAgICAgICAgICAgICAgRENEICAgICBCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CisgICAgICAgICAgICAgICAgRENEICAgICBCUFdNMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgxCisgICAgICAgICAgICAgICAgRENEICAgICBJMkMyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDgyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgzCisgICAgICAgICAgICAgICAgRENEICAgICBRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CisgICAgICAgICAgICAgICAgRENEICAgICBRRUkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg1CisgICAgICAgICAgICAgICAgRENEICAgICBFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CisgICAgICAgICAgICAgICAgRENEICAgICBFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CisgICAgICAgICAgICAgICAgRENEICAgICBHUEhfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDg4CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkxCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkzCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk1CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk3CisgICAgICAgICAgICAgICAgRENEICAgICBQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4CisgICAgICAgICAgICAgICAgRENEICAgICBTQ1VfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDk5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDEwMAorICAgICAgICAgICAgICAgIERDRCAgICAgVFJOR19JUlFIYW5kbGVyICAgICAgICAgICAgOyAxMDEKKworX19WZWN0b3JzX0VuZAorCitfX1ZlY3RvcnNfU2l6ZSAgRVFVICAgICBfX1ZlY3RvcnNfRW5kIC0gX19WZWN0b3JzCisKKyAgICAgICAgICAgICAgICBBUkVBICAgIHwudGV4dHwsIENPREUsIFJFQURPTkxZCisKKworOyBSZXNldCBIYW5kbGVyCisKK1Jlc2V0X0hhbmRsZXIgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBSZXNldF9IYW5kbGVyICAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIElNUE9SVCAgU3lzdGVtSW5pdAorICAgICAgICAgICAgICAgIElNUE9SVCAgX19tYWluCisgICAgICAgICAgICAgICAgQ1BTSUQgICBpICAgICAgICAgICAgICA7IERpc2FibGUgSVJRcworICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1TeXN0ZW1Jbml0CisgICAgICAgICAgICAgICAgQkxYICAgICBSMAorICAgICAgICAgICAgICAgIE1SUyAgICAgUjAsIGNvbnRyb2wgICAgOyBHZXQgY29udHJvbCB2YWx1ZQorICAgICAgICAgICAgICAgIE1PVlMgICAgUjEsICMyCisgICAgICAgICAgICAgICAgT1JSUyAgICBSMCwgUjAsIFIxICAgICA7IFNlbGVjdCBzd2l0Y2ggdG8gUFNQCisgICAgICAgICAgICAgICAgTVNSICAgICBjb250cm9sLCBSMAorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID18SW1hZ2UkJEFSTV9MSUJfU1RBQ0skJFpJJCRMaW1pdHwKKyAgICAgICAgICAgICAgICBNT1ZTICAgIFIxLCAjNworICAgICAgICAgICAgICAgIEJJQ1MgICAgUjAsIFIxICAgICAgICAgOyBNYWtlIHN1cmUgdGhhdCB0aGUgU1AgYWRkcmVzcyBpcyBhbGlnbmVkIHRvIDgKKyAgICAgICAgICAgICAgICBNT1YgICAgIFNQLCBSMCAgICAgICAgIDsgSW5pdGlhbGlzZSBQU1AKKyAgICAgICAgICAgICAgICBMRFIgICAgIFIwLCA9X19tYWluCisgICAgICAgICAgICAgICAgQlggICAgICBSMAorICAgICAgICAgICAgICAgIEVORFAKKworCis7IER1bW15IEV4Y2VwdGlvbiBIYW5kbGVycyAoaW5maW5pdGUgbG9vcHMgd2hpY2ggY2FuIGJlIG1vZGlmaWVkKQorCitOTUlfSGFuZGxlciAgICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgTk1JX0hhbmRsZXIgICAgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCitIYXJkRmF1bHRfSGFuZGxlclwKKyAgICAgICAgICAgICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBIYXJkRmF1bHRfSGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKKworU1ZDX0hhbmRsZXIgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNWQ19IYW5kbGVyICAgICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorUGVuZFNWX0hhbmRsZXIgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFBlbmRTVl9IYW5kbGVyICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorU3lzVGlja19IYW5kbGVyIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFN5c1RpY2tfSGFuZGxlciAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorCisKK0RlZmF1bHRfSGFuZGxlciBQUk9DCisKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJPRF9JUlFIYW5kbGVyCQkgICAgICBbV0VBS10gOyAwCisgICAgICAgICAgICAgICAgRVhQT1JUICBJUkNfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFBXUldVX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMgorICAgICAgICAgICAgICAgIEVYUE9SVCAgU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyAzCisgICAgICAgICAgICAgICAgRVhQT1JUICBDTEtGQUlMX0lSUUhhbmRsZXIgICAgICAgIFtXRUFLXSA7IDQKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNQorICAgICAgICAgICAgICAgIEVYUE9SVCAgUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA2CisgICAgICAgICAgICAgICAgRVhQT1JUICBUQU1QRVJfSVJRSGFuZGxlciAgICAgICAgIFtXRUFLXSA7IDcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFdEVF9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgOAorICAgICAgICAgICAgICAgIEVYUE9SVCAgV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA5CisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDEwCisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDExCisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDEyCisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UM19JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDEzCisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDE0CisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDE1CisgICAgICAgICAgICAgICAgRVhQT1JUICBHUEFfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDE2CisgICAgICAgICAgICAgICAgRVhQT1JUICBHUEJfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDE3CisgICAgICAgICAgICAgICAgRVhQT1JUICBHUENfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDE4CisgICAgICAgICAgICAgICAgRVhQT1JUICBHUERfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDE5CisgICAgICAgICAgICAgICAgRVhQT1JUICBHUEVfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDIwCisgICAgICAgICAgICAgICAgRVhQT1JUICBHUEZfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDIxCisgICAgICAgICAgICAgICAgRVhQT1JUICBRU1BJMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDIyCisgICAgICAgICAgICAgICAgRVhQT1JUICBTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDIzCisgICAgICAgICAgICAgICAgRVhQT1JUICBCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgIFtXRUFLXSA7IDI0CisgICAgICAgICAgICAgICAgRVhQT1JUICBFUFdNMF9QMF9JUlFIYW5kbGVyICAgICAgIFtXRUFLXSA7IDI1CisgICAgICAgICAgICAgICAgRVhQT1JUICBFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgIFtXRUFLXSA7IDI2CisgICAgICAgICAgICAgICAgRVhQT1JUICBFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgIFtXRUFLXSA7IDI3CisgICAgICAgICAgICAgICAgRVhQT1JUICBCUkFLRTFfSVJRSGFuZGxlciAgICAgICAgIFtXRUFLXSA7IDI4CisgICAgICAgICAgICAgICAgRVhQT1JUICBFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgIFtXRUFLXSA7IDI5CisgICAgICAgICAgICAgICAgRVhQT1JUICBFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgIFtXRUFLXSA7IDMwCisgICAgICAgICAgICAgICAgRVhQT1JUICBFUFdNMV9QMl9JUlFIYW5kbGVyICAgICAgIFtXRUFLXSA7IDMxCisgICAgICAgICAgICAgICAgRVhQT1JUICBURk1fVElNRVIwX0lSUV9IYW5kbGVyICAgIFtXRUFLXSA7IDMyCisgICAgICAgICAgICAgICAgRVhQT1JUICBUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDMzCisgICAgICAgICAgICAgICAgRVhQT1JUICBUSU1FUjFfSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDM0CisgICAgICAgICAgICAgICAgRVhQT1JUICBUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDM1CisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDM2CisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDM3CisgICAgICAgICAgICAgICAgRVhQT1JUICBJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDM4CisgICAgICAgICAgICAgICAgRVhQT1JUICBJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDM5CisgICAgICAgICAgICAgICAgRVhQT1JUICBQRE1BMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQwCisgICAgICAgICAgICAgICAgRVhQT1JUICBEQUNfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDQxCisgICAgICAgICAgICAgICAgRVhQT1JUICBFQURDMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQyCisgICAgICAgICAgICAgICAgRVhQT1JUICBFQURDMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQzCisgICAgICAgICAgICAgICAgRVhQT1JUICBBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgIFtXRUFLXSA7IDQ0CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDQ1CisgICAgICAgICAgICAgICAgRVhQT1JUICBFQURDMl9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQ2CisgICAgICAgICAgICAgICAgRVhQT1JUICBFQURDM19JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQ3CisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQ4CisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUM19JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDQ5CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDUwCisgICAgICAgICAgICAgICAgRVhQT1JUICBTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDUxCisgICAgICAgICAgICAgICAgRVhQT1JUICBTUEkyX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDUyCisgICAgICAgICAgICAgICAgRVhQT1JUICBVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDUzCisgICAgICAgICAgICAgICAgRVhQT1JUICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDU0CisgICAgICAgICAgICAgICAgRVhQT1JUICBVU0JPVEdfSVJRSGFuZGxlciAgICAgICAgIFtXRUFLXSA7IDU1CisgICAgICAgICAgICAgICAgRVhQT1JUICBDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDU2CisgICAgICAgICAgICAgICAgRVhQT1JUICBDQU4xX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDU3CisgICAgICAgICAgICAgICAgRVhQT1JUICBTQzBfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDU4CisgICAgICAgICAgICAgICAgRVhQT1JUICBTQzFfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDU5CisgICAgICAgICAgICAgICAgRVhQT1JUICBTQzJfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDYwCisgICAgICAgICAgICAgICAgRVhQT1JUICBTQzNfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDYxCisgICAgICAgICAgICAgICAgRVhQT1JUICBTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDYyCisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDYzCisgICAgICAgICAgICAgICAgRVhQT1JUICBTREgwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDY0CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDY1CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDY2CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDY3CisgICAgICAgICAgICAgICAgRVhQT1JUICBJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDY4CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDY5CisgICAgICAgICAgICAgICAgRVhQT1JUICBPUEEwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDcwCisgICAgICAgICAgICAgICAgRVhQT1JUICBDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDcxCisgICAgICAgICAgICAgICAgRVhQT1JUICBHUEdfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDcyCisgICAgICAgICAgICAgICAgRVhQT1JUICBFSU5UNl9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDczCisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDc0CisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDc1CisgICAgICAgICAgICAgICAgRVhQT1JUICBVU0NJMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDc2CisgICAgICAgICAgICAgICAgRVhQT1JUICBVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDc3CisgICAgICAgICAgICAgICAgRVhQT1JUICBCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDc4CisgICAgICAgICAgICAgICAgRVhQT1JUICBCUFdNMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDc5CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDgwCisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDgxCisgICAgICAgICAgICAgICAgRVhQT1JUICBJMkMyX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDgyCisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDgzCisgICAgICAgICAgICAgICAgRVhQT1JUICBRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDg0CisgICAgICAgICAgICAgICAgRVhQT1JUICBRRUkxX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDg1CisgICAgICAgICAgICAgICAgRVhQT1JUICBFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDg2CisgICAgICAgICAgICAgICAgRVhQT1JUICBFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDg3CisgICAgICAgICAgICAgICAgRVhQT1JUICBHUEhfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDg4CisgICAgICAgICAgICAgICBFWFBPUlQgICBFSU5UN19JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDg5CisgICAgICAgICAgICAgICAgRVhQT1JUICBTREgxX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDkwCisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDkxCisgICAgICAgICAgICAgICA7RVhQT1JUICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDkyCisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDkzCisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDk0CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDk1CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDk2CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDk3CisgICAgICAgICAgICAgICAgRVhQT1JUICBQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDk4CisgICAgICAgICAgICAgICA7RVhQT1JUICBTQ1VfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDk5CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDEwMAorICAgICAgICAgICAgICAgIEVYUE9SVCAgVFJOR19JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyAxMDEKKworCisKKyAgICAgICAgICAgICAgICBFWFBPUlQJREVGQVVMVF9JUlFIYW5kbGVyCQkgIFtXRUFLXQorCitCT0RfSVJRSGFuZGxlcgkJICAgICAgIDsgMAorSVJDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxCitQV1JXVV9JUlFIYW5kbGVyICAgICAgICAgICA7IDIKK1NSQU1fSVJRSGFuZGxlciAgICAgICAgICAgIDsgMworQ0xLRkFJTF9JUlFIYW5kbGVyICAgICAgICAgOyA0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA1CitSVENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYKK1RBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgIDsgNworV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4CitXV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkKK0VJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTAKK0VJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTEKK0VJTlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTIKK0VJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTMKK0VJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTQKK0VJTlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTUKK0dQQV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTYKK0dQQl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTcKK0dQQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTgKK0dQRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTkKK0dQRV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjAKK0dQRl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjEKK1FTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMjIKK1NQSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMjMKK0JSQUtFMF9JUlFIYW5kbGVyICAgICAgICAgIDsgMjQKK0VQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjUKK0VQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMjYKK0VQV00wX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMjcKK0JSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgIDsgMjgKK0VQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjkKK0VQV00xX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMzAKK0VQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMzEKK1RGTV9USU1FUjBfSVJRX0hhbmRsZXIgICAgIDsgMzIKK1RNUjFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzMKK1RJTUVSMV9IYW5kbGVyICAgICAgICAgICAgIDsgMzQKK1RNUjNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzUKK1VBUlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzYKK1VBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzcKK0kyQzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzgKK0kyQzFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzkKK1BETUEwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDAKK0RBQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNDEKK0VBREMwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDIKK0VBREMxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDMKK0FDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgIDsgNDQKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDQ1CitFQURDMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ2CitFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CitVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CitVQVJUM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA1MAorU1BJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MQorU1BJMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MgorVVNCRF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MworVVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NAorVVNCT1RHX0lSUUhhbmRsZXIgICAgICAgICAgOyA1NQorQ0FOMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NgorQ0FOMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NworU0MwX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OAorU0MxX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OQorU0MyX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MAorU0MzX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MQorU1BJM19JUlFIYW5kbGVyICAgICAgICAgICAgOyA2MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjMKK1NESDBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjQKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY1Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjcKK0kyUzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjgKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY5CitPUEEwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcwCitDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCitHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCitFSU5UNl9JUlFIYW5kbGVyICAgICAgICAgICA7IDczCitVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CitVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CitVU0NJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc2CitVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CitCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CitCUFdNMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODEKK0kyQzJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODIKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgzCitRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CitRRUkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg1CitFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CitFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CitHUEhfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDg4CitFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CitTREgxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkwCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MQorO1VTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOTIKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDkzCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTUKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk2Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NworUERNQTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA5OAorO1NDVV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOTkKKzswICAgICAgICAgICAgICAgICAgICAgICAgIDsgMTAwCitUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDEwMQorREVGQVVMVF9JUlFIYW5kbGVyCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisKKyAgICAgICAgICAgICAgICBFTkRQCisKKyAgICAgICAgICAgICAgICBBTElHTgorCisgICAgICAgICAgICAgICAgRU5ECmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9kZXZpY2VfZGVmaW5pdGlvbi5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvZGV2aWNlX2RlZmluaXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTA2MGE4Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvZGV2aWNlX2RlZmluaXRpb24uYwpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBcZmlsZSBkZXZpY2VfZGVmaW5pdGlvbi5jCisgKiBcYnJpZWYgVGhpcyBmaWxlIGRlZmluZXMgZXhwb3J0cyB0aGUgc3RydWN0dXJlcyBiYXNlZCBvbiB0aGUgcGVyaXBoZXJhbAorICogZGVmaW5pdGlvbnMgZnJvbSBkZXZpY2VfY2ZnLmguCisgKiBUaGlzIGZpbGUgaXMgbWVhbnQgdG8gYmUgdXNlZCBhcyBhIGhlbHBlciBmb3IgYmFyZW1ldGFsCisgKiBhcHBsaWNhdGlvbnMgYW5kL29yIGFzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGNvbmZpZ3VyZSB0aGUgZ2VuZXJpYworICogZHJpdmVyIHN0cnVjdHVyZXMuCisgKi8KKworI2luY2x1ZGUgImRldmljZV9jZmcuaCIKKyNpbmNsdWRlICJkZXZpY2VfZGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgInBsYXRmb3JtX2Rlc2NyaXB0aW9uLmgiCisKKy8qID09PT09PT0gUGVyaXBoZXJhbCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBkZWZpbml0aW9ucyA9PT09PT09ICovCisKKy8qIENNU0RLIEdQSU8gZHJpdmVyIHN0cnVjdHVyZXMgKi8KKyNpZmRlZiBHUElPMF9DTVNES19TCitzdGF0aWMgY29uc3Qgc3RydWN0IGdwaW9fY21zZGtfZGV2X2NmZ190IEdQSU8wX0NNU0RLX0RFVl9DRkdfUyA9IHsKKyAgICAuYmFzZSA9IE1VU0NBX1MxX0dQSU9fU19CQVNFfTsKK3N0cnVjdCBncGlvX2Ntc2RrX2Rldl90IEdQSU8wX0NNU0RLX0RFVl9TID0geyYoR1BJTzBfQ01TREtfREVWX0NGR19TKX07CisjZW5kaWYKKworLyogQ01TREsgVGltZXJzIGRyaXZlciBzdHJ1Y3R1cmVzICovCisjaWZkZWYgQ01TREtfVElNRVIwX1MKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X2NmZ190IENNU0RLX1RJTUVSMF9ERVZfQ0ZHX1MgPSB7CisgICAgLmJhc2UgPSBUTVIwMV9CQVNFfTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X2RhdGFfdCBDTVNES19USU1FUjBfREVWX0RBVEFfUyA9IHsKKyAgICAuaXNfaW5pdGlhbGl6ZWQgPSAwfTsKK3N0cnVjdCB0aW1lcl9jbXNka19kZXZfdCBDTVNES19USU1FUjBfREVWX1MgPSB7JihDTVNES19USU1FUjBfREVWX0NGR19TKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihDTVNES19USU1FUjBfREVWX0RBVEFfUyl9OworI2VuZGlmCisKKyNpZmRlZiBDTVNES19USU1FUjFfUworc3RhdGljIGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfY2ZnX3QgQ01TREtfVElNRVIxX0RFVl9DRkdfUyA9IHsKKyAgICAuYmFzZSA9IFRNUn07CitzdGF0aWMgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl9kYXRhX3QgQ01TREtfVElNRVIxX0RFVl9EQVRBX1MgPSB7CisgICAgLmlzX2luaXRpYWxpemVkID0gMH07CitzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QgQ01TREtfVElNRVIxX0RFVl9TID0geyYoQ01TREtfVElNRVIxX0RFVl9DRkdfUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoQ01TREtfVElNRVIxX0RFVl9EQVRBX1MpfTsKKyNlbmRpZgorCisjaWZkZWYgQ01TREtfVElNRVIyX05TCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl9jZmdfdCBDTVNES19USU1FUjJfREVWX0NGR19OUyA9IHsKKyAgICAuYmFzZSA9IFRNUjIzX0JBU0UrTlNfT0ZGU0VUIH07CitzdGF0aWMgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl9kYXRhX3QgQ01TREtfVElNRVIyX0RFVl9EQVRBX05TID0geworICAgIC5pc19pbml0aWFsaXplZCA9IDAgfTsKK3N0cnVjdCB0aW1lcl9jbXNka19kZXZfdCBDTVNES19USU1FUjJfREVWX05TID0geyAmKENNU0RLX1RJTUVSMl9ERVZfQ0ZHX05TKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoQ01TREtfVElNRVIyX0RFVl9EQVRBX05TKSB9OworI2VuZGlmCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2djYy9tMjM1MV9ibDIubGQgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9nY2MvbTIzNTFfYmwyLmxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOGVhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9nY2MvbTIzNTFfYmwyLmxkCkBAIC0wLDAgKzEsMTkwIEBACis7LyoKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBBcm0gTGltaXRlZAorOyAqCis7ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cis7ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorOyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorOyAqCis7ICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorOyAqCis7ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorOyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCis7ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCis7ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorOyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorOyAqCis7ICoKKzsgKiBUaGlzIGZpbGUgaXMgZGVyaXZhdGl2ZSBvZiBDTVNJUyBWNS4wMCBnY2NfYXJtLmxkCis7ICovCisKKy8qIExpbmtlciBzY3JpcHQgdG8gY29uZmlndXJlIG1lbW9yeSByZWdpb25zLiAqLworLyogVGhpcyBmaWxlIHdpbGwgYmUgcnVuIHRyb3VnaCB0aGUgcHJlLXByb2Nlc3Nvci4gKi8KKworI2luY2x1ZGUgInJlZ2lvbl9kZWZzLmgiCisKK01FTU9SWQoreworICBGTEFTSCAocngpICA6IE9SSUdJTiA9IEJMMl9DT0RFX1NUQVJULCBMRU5HVEggPSBCTDJfQ09ERV9TSVpFCisgIFJBTSAgIChyd3gpIDogT1JJR0lOID0gQkwyX0RBVEFfU1RBUlQsIExFTkdUSCA9IEJMMl9EQVRBX1NJWkUKK30KKworX19oZWFwX3NpemVfXyAgPSBCTDJfSEVBUF9TSVpFOworX19tc3Bfc3RhY2tfc2l6ZV9fID0gQkwyX01TUF9TVEFDS19TSVpFOworCisvKiBMaWJyYXJ5IGNvbmZpZ3VyYXRpb25zICovCitHUk9VUChsaWJnY2MuYSBsaWJjLmEgbGlibS5hIGxpYm5vc3lzLmEpCisKK0VOVFJZKFJlc2V0X0hhbmRsZXIpCisKK1NFQ1RJT05TCit7CisgICAgLnRleHQgOgorICAgIHsKKyAgICAgICAgS0VFUCgqKC52ZWN0b3JzKSkKKyAgICAgICAgX19WZWN0b3JzX0VuZCA9IC47CisgICAgICAgIF9fVmVjdG9yc19TaXplID0gX19WZWN0b3JzX0VuZCAtIF9fVmVjdG9yczsKKyAgICAgICAgX19lbmRfXyA9IC47CisKKyAgICAgICAgKigudGV4dCopCisKKyAgICAgICAgS0VFUCgqKC5pbml0KSkKKyAgICAgICAgS0VFUCgqKC5maW5pKSkKKworCisgICAgICAgIC8qIC5jdG9ycyAqLworICAgICAgICAqY3J0YmVnaW4ubyguY3RvcnMpCisgICAgICAgICpjcnRiZWdpbj8ubyguY3RvcnMpCisgICAgICAgICooRVhDTFVERV9GSUxFKCpjcnRlbmQ/Lm8gKmNydGVuZC5vKSAuY3RvcnMpCisgICAgICAgICooU09SVCguY3RvcnMuKikpCisgICAgICAgICooLmN0b3JzKQorCisgICAgICAgIC8qIC5kdG9ycyAqLworICAgICAgICAgKmNydGJlZ2luLm8oLmR0b3JzKQorICAgICAgICAgKmNydGJlZ2luPy5vKC5kdG9ycykKKyAgICAgICAgICooRVhDTFVERV9GSUxFKCpjcnRlbmQ/Lm8gKmNydGVuZC5vKSAuZHRvcnMpCisgICAgICAgICAqKFNPUlQoLmR0b3JzLiopKQorICAgICAgICAgKiguZHRvcnMpCisKKyAgICAgICAgKigucm9kYXRhKikKKworICAgICAgICBLRUVQKCooLmVoX2ZyYW1lKikpCisgICAgfSA+IEZMQVNICisKKyAgICAuQVJNLmV4dGFiIDoKKyAgICB7CisgICAgICAgICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKQorICAgIH0gPiBGTEFTSAorCisgICAgX19leGlkeF9zdGFydCA9IC47CisgICAgLkFSTS5leGlkeCA6CisgICAgeworICAgICAgICAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikKKyAgICB9ID4gRkxBU0gKKyAgICBfX2V4aWR4X2VuZCA9IC47CisKKyAgICAvKiBUbyBjb3B5IG11bHRpcGxlIFJPTSB0byBSQU0gc2VjdGlvbnMsCisgICAgICogZGVmaW5lIGV0ZXh0Mi9kYXRhMl9zdGFydC9kYXRhMl9lbmQgYW5kCisgICAgICogZGVmaW5lIF9fU1RBUlRVUF9DT1BZX01VTFRJUExFIGluIHN0YXJ0dXBfY21zZGtfbXBzMl9hbjUxOV9ibDIuUyAqLworICAgIC5jb3B5LnRhYmxlIDoKKyAgICB7CisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX19jb3B5X3RhYmxlX3N0YXJ0X18gPSAuOworICAgICAgICBMT05HIChfX2V0ZXh0KQorICAgICAgICBMT05HIChfX2RhdGFfc3RhcnRfXykKKyAgICAgICAgTE9ORyAoX19kYXRhX2VuZF9fIC0gX19kYXRhX3N0YXJ0X18pCisgICAgICAgIExPTkcgKERFRklORUQoX19ldGV4dDIpID8gX19ldGV4dDIgOiAwKQorICAgICAgICBMT05HIChERUZJTkVEKF9fZGF0YTJfc3RhcnRfXykgPyBfX2RhdGEyX3N0YXJ0X18gOiAwKQorICAgICAgICBMT05HIChERUZJTkVEKF9fZGF0YTJfc3RhcnRfXykgPyBfX2RhdGEyX2VuZF9fIC0gX19kYXRhMl9zdGFydF9fIDogMCkKKyAgICAgICAgX19jb3B5X3RhYmxlX2VuZF9fID0gLjsKKyAgICB9ID4gRkxBU0gKKworICAgIC8qIFRvIGNsZWFyIG11bHRpcGxlIEJTUyBzZWN0aW9ucywKKyAgICAgKiB1bmNvbW1lbnQgLnplcm8udGFibGUgc2VjdGlvbiBhbmQsCisgICAgICogZGVmaW5lIF9fU1RBUlRVUF9DTEVBUl9CU1NfTVVMVElQTEUgaW4gc3RhcnR1cF9jbXNka19tcHMyX2FuNTE5X2JsMi5TICovCisgICAgLnplcm8udGFibGUgOgorICAgIHsKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICBfX3plcm9fdGFibGVfc3RhcnRfXyA9IC47CisgICAgICAgIExPTkcgKF9fYnNzX3N0YXJ0X18pCisgICAgICAgIExPTkcgKF9fYnNzX2VuZF9fIC0gX19ic3Nfc3RhcnRfXykKKyAgICAgICAgTE9ORyAoREVGSU5FRChfX2JzczJfc3RhcnRfXykgPyBfX2JzczJfc3RhcnRfXyA6IDApCisgICAgICAgIExPTkcgKERFRklORUQoX19ic3MyX3N0YXJ0X18pID8gX19ic3MyX2VuZF9fIC0gX19ic3MyX3N0YXJ0X18gOiAwKQorICAgICAgICBfX3plcm9fdGFibGVfZW5kX18gPSAuOworICAgIH0gPiBGTEFTSAorCisgICAgX19ldGV4dCA9IC47CisKKyAgICAudGZtX2JsMl9zaGFyZWRfZGF0YSA6IEFMSUdOKDMyKQorICAgIHsKKyAgICAgICAgLiArPSBCT09UX1RGTV9TSEFSRURfREFUQV9TSVpFOworICAgIH0gPiBSQU0KKyAgICBJbWFnZSQkU0hBUkVEX0RBVEEkJFJXJCRCYXNlID0gQUREUigudGZtX2JsMl9zaGFyZWRfZGF0YSk7CisgICAgSW1hZ2UkJFNIQVJFRF9EQVRBJCRSVyQkTGltaXQgPSBBRERSKC50Zm1fYmwyX3NoYXJlZF9kYXRhKSArIFNJWkVPRigudGZtX2JsMl9zaGFyZWRfZGF0YSk7CisKKyAgICAuZGF0YSA6IEFUIChfX2V0ZXh0KQorICAgIHsKKyAgICAgICAgX19kYXRhX3N0YXJ0X18gPSAuOworICAgICAgICAqKHZ0YWJsZSkKKyAgICAgICAgKiguZGF0YSopCisKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAvKiBwcmVpbml0IGRhdGEgKi8KKyAgICAgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgICAgICBLRUVQKCooLnByZWluaXRfYXJyYXkpKQorICAgICAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pOworCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgLyogaW5pdCBkYXRhICovCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICAgICAgS0VFUCgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgICAgICBLRUVQKCooLmluaXRfYXJyYXkpKQorICAgICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworCisKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAvKiBmaW5pdCBkYXRhICovCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICAgICAgS0VFUCgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgICAgICBLRUVQKCooLmZpbmlfYXJyYXkpKQorICAgICAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworCisgICAgICAgIEtFRVAoKiguamNyKikpCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgLyogQWxsIGRhdGEgZW5kICovCisgICAgICAgIF9fZGF0YV9lbmRfXyA9IC47CisKKyAgICB9ID4gUkFNCisgICAgSW1hZ2UkJEVSX0RBVEEkJEJhc2UgPSBBRERSKC5kYXRhKTsKKworICAgIC5ic3MgOgorICAgIHsKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICBfX2Jzc19zdGFydF9fID0gLjsKKyAgICAgICAgKiguYnNzKikKKyAgICAgICAgKihDT01NT04pCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX19ic3NfZW5kX18gPSAuOworICAgIH0gPiBSQU0KKworICAgIGJzc19zaXplID0gX19ic3NfZW5kX18gLSBfX2Jzc19zdGFydF9fOworCisgICAgLm1zcF9zdGFjayA6IEFMSUdOKDMyKQorICAgIHsKKyAgICAgICAgLiArPSBfX21zcF9zdGFja19zaXplX187CisgICAgfSA+IFJBTQorICAgIEltYWdlJCRBUk1fTElCX1NUQUNLJCRaSSQkQmFzZSA9IEFERFIoLm1zcF9zdGFjayk7CisgICAgSW1hZ2UkJEFSTV9MSUJfU1RBQ0skJFpJJCRMaW1pdCA9IEFERFIoLm1zcF9zdGFjaykgKyBTSVpFT0YoLm1zcF9zdGFjayk7CisKKyAgICAuaGVhcCA6IEFMSUdOKDgpCisgICAgeworICAgICAgICBfX2VuZF9fID0gLjsKKyAgICAgICAgUFJPVklERShlbmQgPSAuKTsKKyAgICAgICAgX19IZWFwQmFzZSA9IC47CisgICAgICAgIC4gKz0gX19oZWFwX3NpemVfXzsKKyAgICAgICAgX19IZWFwTGltaXQgPSAuOworICAgICAgICBfX2hlYXBfbGltaXQgPSAuOyAvKiBBZGQgZm9yIF9zYnJrICovCisgICAgfSA+IFJBTQorICAgIEltYWdlJCRBUk1fTElCX0hFQVAkJFpJJCRMaW1pdCA9IEFERFIoLmhlYXApICsgU0laRU9GKC5oZWFwKTsKKworICAgIFBST1ZJREUoX19zdGFjayA9IEltYWdlJCRBUk1fTElCX1NUQUNLJCRaSSQkTGltaXQpOworfQpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvZ2NjL20yMzUxX25zLmxkIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvZ2NjL20yMzUxX25zLmxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZGNiZmIKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9nY2MvbTIzNTFfbnMubGQKQEAgLTAsMCArMSwxODggQEAKKzsvKgorOyAqIENvcHlyaWdodCAoYykgMjAxOCBBUk0gTGltaXRlZAorOyAqCis7ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cis7ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorOyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorOyAqCis7ICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorOyAqCis7ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorOyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCis7ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCis7ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorOyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorOyAqCis7ICoKKzsgKiBUaGlzIGZpbGUgaXMgZGVyaXZhdGl2ZSBvZiBDTVNJUyBWNS4wMCBnY2NfYXJtLmxkCis7ICovCisKKy8qIExpbmtlciBzY3JpcHQgdG8gY29uZmlndXJlIG1lbW9yeSByZWdpb25zLiAqLworLyogVGhpcyBmaWxlIHdpbGwgYmUgcnVuIHRyb3VnaCB0aGUgcHJlLXByb2Nlc3Nvci4gKi8KKworI2luY2x1ZGUgInJlZ2lvbl9kZWZzLmgiCisKK01FTU9SWQoreworICBGTEFTSCAocngpICA6IE9SSUdJTiA9IE5TX0NPREVfU1RBUlQsIExFTkdUSCA9IE5TX0NPREVfU0laRQorICBSQU0gICAocnd4KSA6IE9SSUdJTiA9IE5TX0RBVEFfU1RBUlQsIExFTkdUSCA9IE5TX0RBVEFfU0laRQorfQorCitfX2hlYXBfc2l6ZV9fICA9IE5TX0hFQVBfU0laRTsKK19fcHNwX3N0YWNrX3NpemVfXyA9IE5TX1BTUF9TVEFDS19TSVpFOworX19tc3Bfc3RhY2tfc2l6ZV9fID0gTlNfTVNQX1NUQUNLX1NJWkU7CisKKy8qIExpYnJhcnkgY29uZmlndXJhdGlvbnMgKi8KK0dST1VQKGxpYmdjYy5hIGxpYmMuYSBsaWJtLmEgbGlibm9zeXMuYSkKKworRU5UUlkoUmVzZXRfSGFuZGxlcikKKworU0VDVElPTlMKK3sKKyAgICAudGV4dCA6CisgICAgeworICAgICAgICBLRUVQKCooLnZlY3RvcnMpKQorICAgICAgICBfX1ZlY3RvcnNfRW5kID0gLjsKKyAgICAgICAgX19WZWN0b3JzX1NpemUgPSBfX1ZlY3RvcnNfRW5kIC0gX19WZWN0b3JzOworICAgICAgICBfX2VuZF9fID0gLjsKKworICAgICAgICAqKC50ZXh0KikKKworICAgICAgICBLRUVQKCooLmluaXQpKQorICAgICAgICBLRUVQKCooLmZpbmkpKQorCisKKyAgICAgICAgLyogLmN0b3JzICovCisgICAgICAgICpjcnRiZWdpbi5vKC5jdG9ycykKKyAgICAgICAgKmNydGJlZ2luPy5vKC5jdG9ycykKKyAgICAgICAgKihFWENMVURFX0ZJTEUoKmNydGVuZD8ubyAqY3J0ZW5kLm8pIC5jdG9ycykKKyAgICAgICAgKihTT1JUKC5jdG9ycy4qKSkKKyAgICAgICAgKiguY3RvcnMpCisKKyAgICAgICAgLyogLmR0b3JzICovCisgICAgICAgICAqY3J0YmVnaW4ubyguZHRvcnMpCisgICAgICAgICAqY3J0YmVnaW4/Lm8oLmR0b3JzKQorICAgICAgICAgKihFWENMVURFX0ZJTEUoKmNydGVuZD8ubyAqY3J0ZW5kLm8pIC5kdG9ycykKKyAgICAgICAgICooU09SVCguZHRvcnMuKikpCisgICAgICAgICAqKC5kdG9ycykKKworICAgICAgICAqKC5yb2RhdGEqKQorCisgICAgICAgIEtFRVAoKiguZWhfZnJhbWUqKSkKKyAgICB9ID4gRkxBU0gKKworICAgIC5BUk0uZXh0YWIgOgorICAgIHsKKyAgICAgICAgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopCisgICAgfSA+IEZMQVNICisKKyAgICBfX2V4aWR4X3N0YXJ0ID0gLjsKKyAgICAuQVJNLmV4aWR4IDoKKyAgICB7CisgICAgICAgICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKQorICAgIH0gPiBGTEFTSAorICAgIF9fZXhpZHhfZW5kID0gLjsKKworICAgIC8qIFRvIGNvcHkgbXVsdGlwbGUgUk9NIHRvIFJBTSBzZWN0aW9ucywKKyAgICAgKiBkZWZpbmUgZXRleHQyL2RhdGEyX3N0YXJ0L2RhdGEyX2VuZCBhbmQKKyAgICAgKiBkZWZpbmUgX19TVEFSVFVQX0NPUFlfTVVMVElQTEUgaW4gc3RhcnR1cF9jbXNka19tcHMyX2FuNTE5X25zLlMgKi8KKyAgICAuY29weS50YWJsZSA6CisgICAgeworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIF9fY29weV90YWJsZV9zdGFydF9fID0gLjsKKyAgICAgICAgTE9ORyAoX19ldGV4dCkKKyAgICAgICAgTE9ORyAoX19kYXRhX3N0YXJ0X18pCisgICAgICAgIExPTkcgKF9fZGF0YV9lbmRfXyAtIF9fZGF0YV9zdGFydF9fKQorICAgICAgICBMT05HIChERUZJTkVEKF9fZXRleHQyKSA/IF9fZXRleHQyIDogMCkKKyAgICAgICAgTE9ORyAoREVGSU5FRChfX2RhdGEyX3N0YXJ0X18pID8gX19kYXRhMl9zdGFydF9fIDogMCkKKyAgICAgICAgTE9ORyAoREVGSU5FRChfX2RhdGEyX3N0YXJ0X18pID8gX19kYXRhMl9lbmRfXyAtIF9fZGF0YTJfc3RhcnRfXyA6IDApCisgICAgICAgIF9fY29weV90YWJsZV9lbmRfXyA9IC47CisgICAgfSA+IEZMQVNICisKKyAgICAvKiBUbyBjbGVhciBtdWx0aXBsZSBCU1Mgc2VjdGlvbnMsCisgICAgICogdW5jb21tZW50IC56ZXJvLnRhYmxlIHNlY3Rpb24gYW5kLAorICAgICAqIGRlZmluZSBfX1NUQVJUVVBfQ0xFQVJfQlNTX01VTFRJUExFIGluIHN0YXJ0dXBfY21zZGtfbXBzMl9hbjUxOV9ucy5TICovCisgICAgLnplcm8udGFibGUgOgorICAgIHsKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICBfX3plcm9fdGFibGVfc3RhcnRfXyA9IC47CisgICAgICAgIExPTkcgKF9fYnNzX3N0YXJ0X18pCisgICAgICAgIExPTkcgKF9fYnNzX2VuZF9fIC0gX19ic3Nfc3RhcnRfXykKKyAgICAgICAgTE9ORyAoREVGSU5FRChfX2JzczJfc3RhcnRfXykgPyBfX2JzczJfc3RhcnRfXyA6IDApCisgICAgICAgIExPTkcgKERFRklORUQoX19ic3MyX3N0YXJ0X18pID8gX19ic3MyX2VuZF9fIC0gX19ic3MyX3N0YXJ0X18gOiAwKQorICAgICAgICBfX3plcm9fdGFibGVfZW5kX18gPSAuOworICAgIH0gPiBGTEFTSAorCisgICAgX19ldGV4dCA9IC47CisKKyAgICAuZGF0YSA6IEFUIChfX2V0ZXh0KQorICAgIHsKKyAgICAgICAgX19kYXRhX3N0YXJ0X18gPSAuOworICAgICAgICAqKHZ0YWJsZSkKKyAgICAgICAgKiguZGF0YSopCisKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAvKiBwcmVpbml0IGRhdGEgKi8KKyAgICAgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgICAgICBLRUVQKCooLnByZWluaXRfYXJyYXkpKQorICAgICAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pOworCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgLyogaW5pdCBkYXRhICovCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICAgICAgS0VFUCgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgICAgICBLRUVQKCooLmluaXRfYXJyYXkpKQorICAgICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworCisKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAvKiBmaW5pdCBkYXRhICovCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICAgICAgS0VFUCgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgICAgICBLRUVQKCooLmZpbmlfYXJyYXkpKQorICAgICAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworCisgICAgICAgIEtFRVAoKiguamNyKikpCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgLyogQWxsIGRhdGEgZW5kICovCisgICAgICAgIF9fZGF0YV9lbmRfXyA9IC47CisKKyAgICB9ID4gUkFNCisKKyAgICAuYnNzIDoKKyAgICB7CisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX19ic3Nfc3RhcnRfXyA9IC47CisgICAgICAgICooLmJzcyopCisgICAgICAgICooQ09NTU9OKQorICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIF9fYnNzX2VuZF9fID0gLjsKKyAgICB9ID4gUkFNCisKKyAgICBic3Nfc2l6ZSA9IF9fYnNzX2VuZF9fIC0gX19ic3Nfc3RhcnRfXzsKKworICAgIC5tc3Bfc3RhY2sgOiBBTElHTigzMikKKyAgICB7CisgICAgICAgIC4gKz0gX19tc3Bfc3RhY2tfc2l6ZV9fOworICAgIH0gPiBSQU0KKyAgICBJbWFnZSQkQVJNX0xJQl9TVEFDS19NU1AkJFpJJCRMaW1pdCA9IEFERFIoLm1zcF9zdGFjaykgKyBTSVpFT0YoLm1zcF9zdGFjayk7CisKKyAgICAucHNwX3N0YWNrIDogQUxJR04oMzIpCisgICAgeworICAgICAgICAuICs9IF9fcHNwX3N0YWNrX3NpemVfXzsKKyAgICB9ID4gUkFNCisgICAgSW1hZ2UkJEFSTV9MSUJfU1RBQ0skJFpJJCRCYXNlID0gQUREUigucHNwX3N0YWNrKTsKKyAgICBJbWFnZSQkQVJNX0xJQl9TVEFDSyQkWkkkJExpbWl0ID0gQUREUigucHNwX3N0YWNrKSArIFNJWkVPRigucHNwX3N0YWNrKTsKKworICAgIC5oZWFwIDogQUxJR04oOCkKKyAgICB7CisgICAgICAgIF9fZW5kX18gPSAuOworICAgICAgICBQUk9WSURFKGVuZCA9IC4pOworICAgICAgICBfX0hlYXBCYXNlID0gLjsKKyAgICAgICAgLiArPSBfX2hlYXBfc2l6ZV9fOworICAgICAgICBfX0hlYXBMaW1pdCA9IC47CisgICAgICAgIF9faGVhcF9saW1pdCA9IC47IC8qIEFkZCBmb3IgX3NicmsgKi8KKyAgICB9ID4gUkFNCisKKyAgICBQUk9WSURFKF9fc3RhY2sgPSBJbWFnZSQkQVJNX0xJQl9TVEFDSyQkWkkkJExpbWl0KTsKK30KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2djYy9zdGFydHVwX2Ntc2RrX20yMzUxX2JsMi5TIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvZ2NjL3N0YXJ0dXBfY21zZGtfbTIzNTFfYmwyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1MTI1YwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2djYy9zdGFydHVwX2Ntc2RrX20yMzUxX2JsMi5TCkBAIC0wLDAgKzEsNDI3IEBACis7LyoKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxOCBBUk0gTGltaXRlZAorOyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworOyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworOyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKzsgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKzsgKgorOyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKzsgKgorOyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKzsgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorOyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorOyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKzsgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKzsgKgorOyAqCis7ICogVGhpcyBmaWxlIGlzIGRlcml2YXRpdmUgb2YgQ01TSVMgVjUuMy4xIHN0YXJ0dXBfQVJNQ00yMy5TCis7ICovCisKKyAgICAuc3ludGF4ICAgIHVuaWZpZWQKKyAgICAuYXJjaCAgICBhcm12OC1tLmJhc2UKKworICAgIC5zZWN0aW9uIC52ZWN0b3JzCisgICAgLmFsaWduIDIKKyAgICAuZ2xvYmwgICAgX19WZWN0b3JzCitfX1ZlY3RvcnM6CisgICAgLmxvbmcgICAgSW1hZ2UkJEFSTV9MSUJfU1RBQ0skJFpJJCRMaW1pdCAgIC8qIFRvcCBvZiBTdGFjayAqLworCisgICAgLyogQ29yZSBpbnRlcnJ1cHRzICovCisgICAgLmxvbmcgICAgUmVzZXRfSGFuZGxlciAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IEhhbmRsZXIgKi8KKyAgICAubG9uZyAgICBOTUlfSGFuZGxlciAgICAgICAgICAgICAgICAgICAgLyogTk1JIEhhbmRsZXIgKi8KKyAgICAubG9uZyAgICBIYXJkRmF1bHRfSGFuZGxlciAgICAgICAgICAgICAgLyogSGFyZCBGYXVsdCBIYW5kbGVyICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgU1ZDX0hhbmRsZXIgICAgICAgICAgICAgICAgICAgIC8qIFNWQ2FsbCBIYW5kbGVyICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgUGVuZFNWX0hhbmRsZXIgICAgICAgICAgICAgICAgIC8qIFBlbmRTViBIYW5kbGVyICovCisgICAgLmxvbmcgICAgU3lzVGlja19IYW5kbGVyICAgICAgICAgICAgICAgIC8qIFN5c1RpY2sgSGFuZGxlciAqLworCisgICAgLyogRXh0ZXJuYWwgaW50ZXJydXB0cyAqLworICAgIC5sb25nICAgQk9EX0lSUUhhbmRsZXIgICAgICAgIC8qIDAgICAqLworICAgIC5sb25nICAgSVJDX0lSUUhhbmRsZXIgICAgICAgIC8qIDEgICAqLworICAgIC5sb25nICAgUFdSV1VfSVJRSGFuZGxlciAgICAgIC8qIDIgICAqLworICAgIC5sb25nICAgU1JBTV9JUlFIYW5kbGVyICAgICAgIC8qIDMgICAqLworICAgIC5sb25nICAgQ0xLRkFJTF9JUlFIYW5kbGVyICAgIC8qIDQgICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDUgICAqLworICAgIC5sb25nICAgUlRDX0lSUUhhbmRsZXIgICAgICAgIC8qIDYgICAqLworICAgIC5sb25nICAgVEFNUEVSX0lSUUhhbmRsZXIgICAgIC8qIDcgICAqLworICAgIC5sb25nICAgV0RUX0lSUUhhbmRsZXIgICAgICAgIC8qIDggICAqLworICAgIC5sb25nICAgV1dEVF9JUlFIYW5kbGVyICAgICAgIC8qIDkgICAqLworICAgIC5sb25nICAgRUlOVDBfSVJRSGFuZGxlciAgICAgIC8qIDEwICAqLworICAgIC5sb25nICAgRUlOVDFfSVJRSGFuZGxlciAgICAgIC8qIDExICAqLworICAgIC5sb25nICAgRUlOVDJfSVJRSGFuZGxlciAgICAgIC8qIDEyICAqLworICAgIC5sb25nICAgRUlOVDNfSVJRSGFuZGxlciAgICAgIC8qIDEzICAqLworICAgIC5sb25nICAgRUlOVDRfSVJRSGFuZGxlciAgICAgIC8qIDE0ICAqLworICAgIC5sb25nICAgRUlOVDVfSVJRSGFuZGxlciAgICAgIC8qIDE1ICAqLworICAgIC5sb25nICAgR1BBX0lSUUhhbmRsZXIgICAgICAgIC8qIDE2ICAqLworICAgIC5sb25nICAgR1BCX0lSUUhhbmRsZXIgICAgICAgIC8qIDE3ICAqLworICAgIC5sb25nICAgR1BDX0lSUUhhbmRsZXIgICAgICAgIC8qIDE4ICAqLworICAgIC5sb25nICAgR1BEX0lSUUhhbmRsZXIgICAgICAgIC8qIDE5ICAqLworICAgIC5sb25nICAgR1BFX0lSUUhhbmRsZXIgICAgICAgIC8qIDIwICAqLworICAgIC5sb25nICAgR1BGX0lSUUhhbmRsZXIgICAgICAgIC8qIDIxICAqLworICAgIC5sb25nICAgUVNQSTBfSVJRSGFuZGxlciAgICAgIC8qIDIyICAqLworICAgIC5sb25nICAgU1BJMF9JUlFIYW5kbGVyICAgICAgIC8qIDIzICAqLworICAgIC5sb25nICAgQlJBS0UwX0lSUUhhbmRsZXIgICAgIC8qIDI0ICAqLworICAgIC5sb25nICAgRVBXTTBfUDBfSVJRSGFuZGxlciAgIC8qIDI1ICAqLworICAgIC5sb25nICAgRVBXTTBfUDFfSVJRSGFuZGxlciAgIC8qIDI2ICAqLworICAgIC5sb25nICAgRVBXTTBfUDJfSVJRSGFuZGxlciAgIC8qIDI3ICAqLworICAgIC5sb25nICAgQlJBS0UxX0lSUUhhbmRsZXIgICAgIC8qIDI4ICAqLworICAgIC5sb25nICAgRVBXTTFfUDBfSVJRSGFuZGxlciAgIC8qIDI5ICAqLworICAgIC5sb25nICAgRVBXTTFfUDFfSVJRSGFuZGxlciAgIC8qIDMwICAqLworICAgIC5sb25nICAgRVBXTTFfUDJfSVJRSGFuZGxlciAgIC8qIDMxICAqLworICAgIC5sb25nICAgVE1SMF9JUlFIYW5kbGVyICAgICAgIC8qIDMyICAqLworICAgIC5sb25nICAgVE1SMV9JUlFIYW5kbGVyICAgICAgIC8qIDMzICAqLworICAgIC5sb25nICAgVE1SMl9JUlFIYW5kbGVyICAgICAgIC8qIDM0ICAqLworICAgIC5sb25nICAgVE1SM19JUlFIYW5kbGVyICAgICAgIC8qIDM1ICAqLworICAgIC5sb25nICAgVUFSVDBfSVJRSGFuZGxlciAgICAgIC8qIDM2ICAqLworICAgIC5sb25nICAgVUFSVDFfSVJRSGFuZGxlciAgICAgIC8qIDM3ICAqLworICAgIC5sb25nICAgSTJDMF9JUlFIYW5kbGVyICAgICAgIC8qIDM4ICAqLworICAgIC5sb25nICAgSTJDMV9JUlFIYW5kbGVyICAgICAgIC8qIDM5ICAqLworICAgIC5sb25nICAgUERNQTBfSVJRSGFuZGxlciAgICAgIC8qIDQwICAqLworICAgIC5sb25nICAgREFDX0lSUUhhbmRsZXIgICAgICAgIC8qIDQxICAqLworICAgIC5sb25nICAgRUFEQzBfSVJRSGFuZGxlciAgICAgIC8qIDQyICAqLworICAgIC5sb25nICAgRUFEQzFfSVJRSGFuZGxlciAgICAgIC8qIDQzICAqLworICAgIC5sb25nICAgQUNNUDAxX0lSUUhhbmRsZXIgICAgIC8qIDQ0ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDQ1ICAqLworICAgIC5sb25nICAgRUFEQzJfSVJRSGFuZGxlciAgICAgIC8qIDQ2ICAqLworICAgIC5sb25nICAgRUFEQzNfSVJRSGFuZGxlciAgICAgIC8qIDQ3ICAqLworICAgIC5sb25nICAgVUFSVDJfSVJRSGFuZGxlciAgICAgIC8qIDQ4ICAqLworICAgIC5sb25nICAgVUFSVDNfSVJRSGFuZGxlciAgICAgIC8qIDQ5ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDUwICAqLworICAgIC5sb25nICAgU1BJMV9JUlFIYW5kbGVyICAgICAgIC8qIDUxICAqLworICAgIC5sb25nICAgU1BJMl9JUlFIYW5kbGVyICAgICAgIC8qIDUyICAqLworICAgIC5sb25nICAgVVNCRF9JUlFIYW5kbGVyICAgICAgIC8qIDUzICAqLworICAgIC5sb25nICAgVVNCSF9JUlFIYW5kbGVyICAgICAgIC8qIDU0ICAqLworICAgIC5sb25nICAgVVNCT1RHX0lSUUhhbmRsZXIgICAgIC8qIDU1ICAqLworICAgIC5sb25nICAgQ0FOMF9JUlFIYW5kbGVyICAgICAgIC8qIDU2ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDU3ICAqLworICAgIC5sb25nICAgU0MwX0lSUUhhbmRsZXIgICAgICAgIC8qIDU4ICAqLworICAgIC5sb25nICAgU0MxX0lSUUhhbmRsZXIgICAgICAgIC8qIDU5ICAqLworICAgIC5sb25nICAgU0MyX0lSUUhhbmRsZXIgICAgICAgIC8qIDYwICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDYxICAqLworICAgIC5sb25nICAgU1BJM19JUlFIYW5kbGVyICAgICAgIC8qIDYyICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDYzICAqLworICAgIC5sb25nICAgU0RIMF9JUlFIYW5kbGVyICAgICAgIC8qIDY0ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDY1ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDY2ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDY3ICAqLworICAgIC5sb25nICAgSTJTMF9JUlFIYW5kbGVyICAgICAgIC8qIDY4ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDY5ICAqLworICAgIC5sb25nICAgT1BBMF9JUlFIYW5kbGVyICAgICAgIC8qIDcwICAqLworICAgIC5sb25nICAgQ1JQVF9JUlFIYW5kbGVyICAgICAgIC8qIDcxICAqLworICAgIC5sb25nICAgR1BHX0lSUUhhbmRsZXIgICAgICAgIC8qIDcyICAqLworICAgIC5sb25nICAgRUlOVDZfSVJRSGFuZGxlciAgICAgIC8qIDczICAqLworICAgIC5sb25nICAgVUFSVDRfSVJRSGFuZGxlciAgICAgIC8qIDc0ICAqLworICAgIC5sb25nICAgVUFSVDVfSVJRSGFuZGxlciAgICAgIC8qIDc1ICAqLworICAgIC5sb25nICAgVVNDSTBfSVJRSGFuZGxlciAgICAgIC8qIDc2ICAqLworICAgIC5sb25nICAgVVNDSTFfSVJRSGFuZGxlciAgICAgIC8qIDc3ICAqLworICAgIC5sb25nICAgQlBXTTBfSVJRSGFuZGxlciAgICAgIC8qIDc4ICAqLworICAgIC5sb25nICAgQlBXTTFfSVJRSGFuZGxlciAgICAgIC8qIDc5ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDgwICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDgxICAqLworICAgIC5sb25nICAgSTJDMl9JUlFIYW5kbGVyICAgICAgIC8qIDgyICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDgzICAqLworICAgIC5sb25nICAgUUVJMF9JUlFIYW5kbGVyICAgICAgIC8qIDg0ICAqLworICAgIC5sb25nICAgUUVJMV9JUlFIYW5kbGVyICAgICAgIC8qIDg1ICAqLworICAgIC5sb25nICAgRUNBUDBfSVJRSGFuZGxlciAgICAgIC8qIDg2ICAqLworICAgIC5sb25nICAgRUNBUDFfSVJRSGFuZGxlciAgICAgIC8qIDg3ICAqLworICAgIC5sb25nICAgR1BIX0lSUUhhbmRsZXIgICAgICAgIC8qIDg4ICAqLworICAgIC5sb25nICAgRUlOVDdfSVJRSGFuZGxlciAgICAgIC8qIDg5ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDkwICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDkxICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDkyICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDkzICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDk0ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDk1ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDk2ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDk3ICAqLworICAgIC5sb25nICAgUERNQTFfSVJRSGFuZGxlciAgICAgIC8qIDk4ICAqLworICAgIC5sb25nICAgU0NVX0lSUUhhbmRsZXIgICAgICAgIC8qIDk5ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDEwMCAqLworICAgIC5sb25nICAgVFJOR19JUlFIYW5kbGVyICAgICAgIC8qIDEwMSAqLworCisKKyAgICAuc2l6ZSAgICBfX1ZlY3RvcnMsIC4gLSBfX1ZlY3RvcnMKKworICAgIC50ZXh0CisgICAgLnRodW1iCisgICAgLnRodW1iX2Z1bmMKKyAgICAuYWxpZ24gICAgMgorICAgIC5nbG9ibCAgICBSZXNldF9IYW5kbGVyCisgICAgLnR5cGUgICAgUmVzZXRfSGFuZGxlciwgJWZ1bmN0aW9uCitSZXNldF9IYW5kbGVyOgorLyogIEZpcnN0bHkgaXQgY29waWVzIGRhdGEgZnJvbSByZWFkIG9ubHkgbWVtb3J5IHRvIFJBTS4gVGhlcmUgYXJlIHR3byBzY2hlbWVzCisgKiAgdG8gY29weS4gT25lIGNhbiBjb3B5IG1vcmUgdGhhbiBvbmUgc2VjdGlvbnMuIEFub3RoZXIgY2FuIG9ubHkgY29weQorICogIG9uZSBzZWN0aW9uLiAgVGhlIGZvcm1lciBzY2hlbWUgbmVlZHMgbW9yZSBpbnN0cnVjdGlvbnMgYW5kIHJlYWQtb25seQorICogIGRhdGEgdG8gaW1wbGVtZW50IHRoYW4gdGhlIGxhdHRlci4KKyAqICBNYWNybyBfX1NUQVJUVVBfQ09QWV9NVUxUSVBMRSBpcyB1c2VkIHRvIGNob29zZSBiZXR3ZWVuIHR3byBzY2hlbWVzLiAgKi8KKworI2lmZGVmIF9fU1RBUlRVUF9DT1BZX01VTFRJUExFCisvKiAgTXVsdGlwbGUgc2VjdGlvbnMgc2NoZW1lLgorICoKKyAqICBCZXR3ZWVuIHN5bWJvbCBhZGRyZXNzIF9fY29weV90YWJsZV9zdGFydF9fIGFuZCBfX2NvcHlfdGFibGVfZW5kX18sCisgKiAgdGhlcmUgYXJlIGFycmF5IG9mIHRyaXBsZXRzLCBlYWNoIG9mIHdoaWNoIHNwZWNpZnk6CisgKiAgICBvZmZzZXQgMDogTE1BIG9mIHN0YXJ0IG9mIGEgc2VjdGlvbiB0byBjb3B5IGZyb20KKyAqICAgIG9mZnNldCA0OiBWTUEgb2Ygc3RhcnQgb2YgYSBzZWN0aW9uIHRvIGNvcHkgdG8KKyAqICAgIG9mZnNldCA4OiBzaXplIG9mIHRoZSBzZWN0aW9uIHRvIGNvcHkuIE11c3QgYmUgbXVsdGlwbHkgb2YgNAorICoKKyAqICBBbGwgYWRkcmVzc2VzIG11c3QgYmUgYWxpZ25lZCB0byA0IGJ5dGVzIGJvdW5kYXJ5LgorICovCisgICAgbGRyICAgIHI0LCA9X19jb3B5X3RhYmxlX3N0YXJ0X18KKyAgICBsZHIgICAgcjUsID1fX2NvcHlfdGFibGVfZW5kX18KKworLkxfbG9vcDA6CisgICAgY21wICAgIHI0LCByNQorICAgIGJnZSAgICAuTF9sb29wMF9kb25lCisgICAgbGRyICAgIHIxLCBbcjRdCisgICAgbGRyICAgIHIyLCBbcjQsICM0XQorICAgIGxkciAgICByMywgW3I0LCAjOF0KKworLkxfbG9vcDBfMDoKKyAgICBzdWJzICAgIHIzLCAjNAorICAgIGJsdCAgICAuTF9sb29wMF8wX2RvbmUKKyAgICBsZHIgICAgcjAsIFtyMSwgcjNdCisgICAgc3RyICAgIHIwLCBbcjIsIHIzXQorICAgIGIgICAgLkxfbG9vcDBfMAorCisuTF9sb29wMF8wX2RvbmU6CisgICAgYWRkcyAgICByNCwgIzEyCisgICAgYiAgICAuTF9sb29wMAorCisuTF9sb29wMF9kb25lOgorI2Vsc2UKKy8qICBTaW5nbGUgc2VjdGlvbiBzY2hlbWUuCisgKgorICogIFRoZSByYW5nZXMgb2YgY29weSBmcm9tL3RvIGFyZSBzcGVjaWZpZWQgYnkgZm9sbG93aW5nIHN5bWJvbHMKKyAqICAgIF9fZXRleHQ6IExNQSBvZiBzdGFydCBvZiB0aGUgc2VjdGlvbiB0byBjb3B5IGZyb20uIFVzdWFsbHkgZW5kIG9mIHRleHQKKyAqICAgIF9fZGF0YV9zdGFydF9fOiBWTUEgb2Ygc3RhcnQgb2YgdGhlIHNlY3Rpb24gdG8gY29weSB0bworICogICAgX19kYXRhX2VuZF9fOiBWTUEgb2YgZW5kIG9mIHRoZSBzZWN0aW9uIHRvIGNvcHkgdG8KKyAqCisgKiAgQWxsIGFkZHJlc3NlcyBtdXN0IGJlIGFsaWduZWQgdG8gNCBieXRlcyBib3VuZGFyeS4KKyAqLworICAgIGxkciAgICByMSwgPV9fZXRleHQKKyAgICBsZHIgICAgcjIsID1fX2RhdGFfc3RhcnRfXworICAgIGxkciAgICByMywgPV9fZGF0YV9lbmRfXworCisgICAgc3VicyAgICByMywgcjIKKyAgICBibGUgICAgLkxfbG9vcDFfZG9uZQorCisuTF9sb29wMToKKyAgICBzdWJzICAgIHIzLCAjNAorICAgIGxkciAgICByMCwgW3IxLHIzXQorICAgIHN0ciAgICByMCwgW3IyLHIzXQorICAgIGJndCAgICAuTF9sb29wMQorCisuTF9sb29wMV9kb25lOgorI2VuZGlmIC8qX19TVEFSVFVQX0NPUFlfTVVMVElQTEUgKi8KKworLyogIFRoaXMgcGFydCBvZiB3b3JrIHVzdWFsbHkgaXMgZG9uZSBpbiBDIGxpYnJhcnkgc3RhcnR1cCBjb2RlLiBPdGhlcndpc2UsCisgKiAgZGVmaW5lIHRoaXMgbWFjcm8gdG8gZW5hYmxlIGl0IGluIHRoaXMgc3RhcnR1cC4KKyAqCisgKiAgVGhlcmUgYXJlIHR3byBzY2hlbWVzIHRvby4gT25lIGNhbiBjbGVhciBtdWx0aXBsZSBCU1Mgc2VjdGlvbnMuIEFub3RoZXIKKyAqICBjYW4gb25seSBjbGVhciBvbmUgc2VjdGlvbi4gVGhlIGZvcm1lciBpcyBtb3JlIHNpemUgZXhwZW5zaXZlIHRoYW4gdGhlCisgKiAgbGF0dGVyLgorICoKKyAqICBEZWZpbmUgbWFjcm8gX19TVEFSVFVQX0NMRUFSX0JTU19NVUxUSVBMRSB0byBjaG9vc2UgdGhlIGZvcm1lci4KKyAqICBPdGhlcndpc2UgZWZpbmUgbWFjcm8gX19TVEFSVFVQX0NMRUFSX0JTUyB0byBjaG9vc2UgdGhlIGxhdGVyLgorICovCisjaWZkZWYgX19TVEFSVFVQX0NMRUFSX0JTU19NVUxUSVBMRQorLyogIE11bHRpcGxlIHNlY3Rpb25zIHNjaGVtZS4KKyAqCisgKiAgQmV0d2VlbiBzeW1ib2wgYWRkcmVzcyBfX2NvcHlfdGFibGVfc3RhcnRfXyBhbmQgX19jb3B5X3RhYmxlX2VuZF9fLAorICogIHRoZXJlIGFyZSBhcnJheSBvZiB0dXBsZXMgc3BlY2lmeWluZzoKKyAqICAgIG9mZnNldCAwOiBTdGFydCBvZiBhIEJTUyBzZWN0aW9uCisgKiAgICBvZmZzZXQgNDogU2l6ZSBvZiB0aGlzIEJTUyBzZWN0aW9uLiBNdXN0IGJlIG11bHRpcGx5IG9mIDQKKyAqLworICAgIGxkciAgICByMywgPV9femVyb190YWJsZV9zdGFydF9fCisgICAgbGRyICAgIHI0LCA9X196ZXJvX3RhYmxlX2VuZF9fCisKKy5MX2xvb3AyOgorICAgIGNtcCAgICByMywgcjQKKyAgICBiZ2UgICAgLkxfbG9vcDJfZG9uZQorICAgIGxkciAgICByMSwgW3IzXQorICAgIGxkciAgICByMiwgW3IzLCAjNF0KKyAgICBtb3ZzICAgIHIwLCAwCisKKy5MX2xvb3AyXzA6CisgICAgc3VicyAgICByMiwgIzQKKyAgICBibHQgICAgLkxfbG9vcDJfMF9kb25lCisgICAgc3RyICAgIHIwLCBbcjEsIHIyXQorICAgIGIgICAgLkxfbG9vcDJfMAorLkxfbG9vcDJfMF9kb25lOgorCisgICAgYWRkcyAgICByMywgIzgKKyAgICBiICAgIC5MX2xvb3AyCisuTF9sb29wMl9kb25lOgorI2VsaWYgZGVmaW5lZCAoX19TVEFSVFVQX0NMRUFSX0JTUykKKy8qICBTaW5nbGUgQlNTIHNlY3Rpb24gc2NoZW1lLgorICoKKyAqICBUaGUgQlNTIHNlY3Rpb24gaXMgc3BlY2lmaWVkIGJ5IGZvbGxvd2luZyBzeW1ib2xzCisgKiAgICBfX2Jzc19zdGFydF9fOiBzdGFydCBvZiB0aGUgQlNTIHNlY3Rpb24uCisgKiAgICBfX2Jzc19lbmRfXzogZW5kIG9mIHRoZSBCU1Mgc2VjdGlvbi4KKyAqCisgKiAgQm90aCBhZGRyZXNzZXMgbXVzdCBiZSBhbGlnbmVkIHRvIDQgYnl0ZXMgYm91bmRhcnkuCisgKi8KKyAgICBsZHIgICAgcjEsID1fX2Jzc19zdGFydF9fCisgICAgbGRyICAgIHIyLCA9X19ic3NfZW5kX18KKworICAgIG1vdnMgICAgcjAsIDAKKworICAgIHN1YnMgICAgcjIsIHIxCisgICAgYmxlICAgIC5MX2xvb3AzX2RvbmUKKworLkxfbG9vcDM6CisgICAgc3VicyAgICByMiwgIzQKKyAgICBzdHIgICAgcjAsIFtyMSwgcjJdCisgICAgYmd0ICAgIC5MX2xvb3AzCisuTF9sb29wM19kb25lOgorI2VuZGlmIC8qIF9fU1RBUlRVUF9DTEVBUl9CU1NfTVVMVElQTEUgfHwgX19TVEFSVFVQX0NMRUFSX0JTUyAqLworCisgICAgYmwgICAgU3lzdGVtSW5pdAorCisjaWZuZGVmIF9fU1RBUlQKKyNkZWZpbmUgX19TVEFSVCBfc3RhcnQKKyNlbmRpZgorICAgIGJsICAgIF9fU1RBUlQKKworICAgIC5wb29sCisgICAgLnNpemUgICAgUmVzZXRfSGFuZGxlciwgLiAtIFJlc2V0X0hhbmRsZXIKKworICAgIC5hbGlnbiAgMgorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgICBEZWZhdWx0X0hhbmRsZXIKKyAgICAudHlwZSAgIERlZmF1bHRfSGFuZGxlciwgJSBmdW5jdGlvbgorCitEZWZhdWx0X0hhbmRsZXI6CisgICAgYiAgIC4KKyAgICAuc2l6ZSAgIERlZmF1bHRfSGFuZGxlciwgLiAtIERlZmF1bHRfSGFuZGxlcgorCisKKworCisvKiAgTWFjcm8gdG8gZGVmaW5lIGRlZmF1bHQgaGFuZGxlcnMuICovCisgICAgLm1hY3JvICAgIGRlZl9pcnFfaGFuZGxlciAgICBoYW5kbGVyX25hbWUKKyAgICAuYWxpZ24gICAgMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgICAgXGhhbmRsZXJfbmFtZQorICAgIFxoYW5kbGVyX25hbWU6CisgICAgYiAgICAgICAgXGhhbmRsZXJfbmFtZQorICAgIC5lbmRtCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgTk1JX0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgSGFyZEZhdWx0X0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU1ZDX0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUGVuZFNWX0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU3lzVGlja19IYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgQk9EX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgSVJDX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUFdSV1VfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTUkFNX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQ0xLRkFJTF9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgUlRDX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVEFNUEVSX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgV0RUX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgV1dEVF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQzX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UNV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQQV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQQl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQQ19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQRF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQRV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQRl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFFTUEkwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU1BJMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEJSQUtFMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVQV00wX1AwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRVBXTTBfUDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFUFdNMF9QMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEJSQUtFMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVQV00xX1AwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRVBXTTFfUDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFUFdNMV9QMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFRNUjBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBUTVIxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVE1SMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFRNUjNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVQVJUMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVBUlQxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgSTJDMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEkyQzFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBQRE1BMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIERBQ19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVBREMwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUFEQzFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBBQ01QMDFfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIEVBREMyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUFEQzNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVQVJUMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVBUlQzX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBTUEkxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU1BJMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVTQkRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVU0JIX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVVNCT1RHX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQ0FOMF9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgU0MwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU0MxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU0MyX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBTUEkzX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBTREgwX0lSUUhhbmRsZXIKKworCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgSTJTMF9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgT1BBMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIENSUFRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBHUEdfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UNl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVBUlQ0X0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVUFSVDVfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVU0NJMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVTQ0kxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQlBXTTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBCUFdNMV9JUlFIYW5kbGVyCisKKworICAgIGRlZl9pcnFfaGFuZGxlciBJMkMyX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBRRUkwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUUVJMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVDQVAwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUNBUDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBHUEhfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UN19JUlFIYW5kbGVyCisKKworCisKKworCisKKworICAgIGRlZl9pcnFfaGFuZGxlciBQRE1BMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFNDVV9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgVFJOR19JUlFIYW5kbGVyCisgICAgICAgIC5lbmQKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2djYy9zdGFydHVwX2Ntc2RrX20yMzUxX25zLlMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9nY2Mvc3RhcnR1cF9jbXNka19tMjM1MV9ucy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNzhkNDkKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9nY2Mvc3RhcnR1cF9jbXNka19tMjM1MV9ucy5TCkBAIC0wLDAgKzEsNDMxIEBACis7LyoKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAyMCBBUk0gTGltaXRlZAorOyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworOyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworOyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKzsgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKzsgKgorOyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKzsgKgorOyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKzsgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorOyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorOyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKzsgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKzsgKgorOyAqCis7ICogVGhpcyBmaWxlIGlzIGRlcml2YXRpdmUgb2YgQ01TSVMgVjUuMy4xIHN0YXJ0dXBfQVJNQ00yMy5TCis7ICovCisKKyAgICAuc3ludGF4ICAgIHVuaWZpZWQKKyAgICAuYXJjaCAgICBhcm12OC1tLmJhc2UKKworICAgIC5zZWN0aW9uIC52ZWN0b3JzCisgICAgLmFsaWduIDIKKyAgICAuZ2xvYmwgICAgX19WZWN0b3JzCitfX1ZlY3RvcnM6CisgICAgLmxvbmcgICAgSW1hZ2UkJEFSTV9MSUJfU1RBQ0tfTVNQJCRaSSQkTGltaXQgICAvKiBUb3Agb2YgU3RhY2sgKi8KKworICAgIC8qIENvcmUgaW50ZXJydXB0cyAqLworICAgIC5sb25nICAgIFJlc2V0X0hhbmRsZXIgICAgICAgICAgICAgICAgICAvKiBSZXNldCBIYW5kbGVyICovCisgICAgLmxvbmcgICAgTk1JX0hhbmRsZXIgICAgICAgICAgICAgICAgICAgIC8qIE5NSSBIYW5kbGVyICovCisgICAgLmxvbmcgICAgSGFyZEZhdWx0X0hhbmRsZXIgICAgICAgICAgICAgIC8qIEhhcmQgRmF1bHQgSGFuZGxlciAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIFNWQ19IYW5kbGVyICAgICAgICAgICAgICAgICAgICAvKiBTVkNhbGwgSGFuZGxlciAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIFBlbmRTVl9IYW5kbGVyICAgICAgICAgICAgICAgICAvKiBQZW5kU1YgSGFuZGxlciAqLworICAgIC5sb25nICAgIFN5c1RpY2tfSGFuZGxlciAgICAgICAgICAgICAgICAvKiBTeXNUaWNrIEhhbmRsZXIgKi8KKworICAgIC8qIEV4dGVybmFsIGludGVycnVwdHMgKi8KKyAgICAubG9uZyAgIEJPRF9JUlFIYW5kbGVyICAgICAgICAvKiAwICAgKi8KKyAgICAubG9uZyAgIElSQ19JUlFIYW5kbGVyICAgICAgICAvKiAxICAgKi8KKyAgICAubG9uZyAgIFBXUldVX0lSUUhhbmRsZXIgICAgICAvKiAyICAgKi8KKyAgICAubG9uZyAgIFNSQU1fSVJRSGFuZGxlciAgICAgICAvKiAzICAgKi8KKyAgICAubG9uZyAgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAvKiA0ICAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA1ICAgKi8KKyAgICAubG9uZyAgIFJUQ19JUlFIYW5kbGVyICAgICAgICAvKiA2ICAgKi8KKyAgICAubG9uZyAgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAvKiA3ICAgKi8KKyAgICAubG9uZyAgIFdEVF9JUlFIYW5kbGVyICAgICAgICAvKiA4ICAgKi8KKyAgICAubG9uZyAgIFdXRFRfSVJRSGFuZGxlciAgICAgICAvKiA5ICAgKi8KKyAgICAubG9uZyAgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAvKiAxMCAgKi8KKyAgICAubG9uZyAgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAvKiAxMSAgKi8KKyAgICAubG9uZyAgIEVJTlQyX0lSUUhhbmRsZXIgICAgICAvKiAxMiAgKi8KKyAgICAubG9uZyAgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAvKiAxMyAgKi8KKyAgICAubG9uZyAgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAvKiAxNCAgKi8KKyAgICAubG9uZyAgIEVJTlQ1X0lSUUhhbmRsZXIgICAgICAvKiAxNSAgKi8KKyAgICAubG9uZyAgIEdQQV9JUlFIYW5kbGVyICAgICAgICAvKiAxNiAgKi8KKyAgICAubG9uZyAgIEdQQl9JUlFIYW5kbGVyICAgICAgICAvKiAxNyAgKi8KKyAgICAubG9uZyAgIEdQQ19JUlFIYW5kbGVyICAgICAgICAvKiAxOCAgKi8KKyAgICAubG9uZyAgIEdQRF9JUlFIYW5kbGVyICAgICAgICAvKiAxOSAgKi8KKyAgICAubG9uZyAgIEdQRV9JUlFIYW5kbGVyICAgICAgICAvKiAyMCAgKi8KKyAgICAubG9uZyAgIEdQRl9JUlFIYW5kbGVyICAgICAgICAvKiAyMSAgKi8KKyAgICAubG9uZyAgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAvKiAyMiAgKi8KKyAgICAubG9uZyAgIFNQSTBfSVJRSGFuZGxlciAgICAgICAvKiAyMyAgKi8KKyAgICAubG9uZyAgIEJSQUtFMF9JUlFIYW5kbGVyICAgICAvKiAyNCAgKi8KKyAgICAubG9uZyAgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAvKiAyNSAgKi8KKyAgICAubG9uZyAgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAvKiAyNiAgKi8KKyAgICAubG9uZyAgIEVQV00wX1AyX0lSUUhhbmRsZXIgICAvKiAyNyAgKi8KKyAgICAubG9uZyAgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAvKiAyOCAgKi8KKyAgICAubG9uZyAgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAvKiAyOSAgKi8KKyAgICAubG9uZyAgIEVQV00xX1AxX0lSUUhhbmRsZXIgICAvKiAzMCAgKi8KKyAgICAubG9uZyAgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAvKiAzMSAgKi8KKyAgICAubG9uZyAgIFRNUjBfSVJRSGFuZGxlciAgICAgICAvKiAzMiAgKi8KKyAgICAubG9uZyAgIFRNUjFfSVJRSGFuZGxlciAgICAgICAvKiAzMyAgKi8KKyAgICAubG9uZyAgIFRJTUVSMV9IYW5kbGVyICAgICAgICAvKiAzNCAgKi8gLyogIlRJTUVSMV9IYW5kbGVyIiBpcyBqdXN0IGhhbmRsZXIsIG5vdCByZWFsIHRpbWVyMSAqLworICAgIC5sb25nICAgVE1SM19JUlFIYW5kbGVyICAgICAgIC8qIDM1ICAqLworICAgIC5sb25nICAgVUFSVDBfSVJRSGFuZGxlciAgICAgIC8qIDM2ICAqLworICAgIC5sb25nICAgVUFSVDFfSVJRSGFuZGxlciAgICAgIC8qIDM3ICAqLworICAgIC5sb25nICAgSTJDMF9JUlFIYW5kbGVyICAgICAgIC8qIDM4ICAqLworICAgIC5sb25nICAgSTJDMV9JUlFIYW5kbGVyICAgICAgIC8qIDM5ICAqLworICAgIC5sb25nICAgUERNQTBfSVJRSGFuZGxlciAgICAgIC8qIDQwICAqLworICAgIC5sb25nICAgREFDX0lSUUhhbmRsZXIgICAgICAgIC8qIDQxICAqLworICAgIC5sb25nICAgRUFEQzBfSVJRSGFuZGxlciAgICAgIC8qIDQyICAqLworICAgIC5sb25nICAgRUFEQzFfSVJRSGFuZGxlciAgICAgIC8qIDQzICAqLworICAgIC5sb25nICAgQUNNUDAxX0lSUUhhbmRsZXIgICAgIC8qIDQ0ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDQ1ICAqLworICAgIC5sb25nICAgRUFEQzJfSVJRSGFuZGxlciAgICAgIC8qIDQ2ICAqLworICAgIC5sb25nICAgRUFEQzNfSVJRSGFuZGxlciAgICAgIC8qIDQ3ICAqLworICAgIC5sb25nICAgVUFSVDJfSVJRSGFuZGxlciAgICAgIC8qIDQ4ICAqLworICAgIC5sb25nICAgVUFSVDNfSVJRSGFuZGxlciAgICAgIC8qIDQ5ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDUwICAqLworICAgIC5sb25nICAgU1BJMV9JUlFIYW5kbGVyICAgICAgIC8qIDUxICAqLworICAgIC5sb25nICAgU1BJMl9JUlFIYW5kbGVyICAgICAgIC8qIDUyICAqLworICAgIC5sb25nICAgVVNCRF9JUlFIYW5kbGVyICAgICAgIC8qIDUzICAqLworICAgIC5sb25nICAgVVNCSF9JUlFIYW5kbGVyICAgICAgIC8qIDU0ICAqLworICAgIC5sb25nICAgVVNCT1RHX0lSUUhhbmRsZXIgICAgIC8qIDU1ICAqLworICAgIC5sb25nICAgQ0FOMF9JUlFIYW5kbGVyICAgICAgIC8qIDU2ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDU3ICAqLworICAgIC5sb25nICAgU0MwX0lSUUhhbmRsZXIgICAgICAgIC8qIDU4ICAqLworICAgIC5sb25nICAgU0MxX0lSUUhhbmRsZXIgICAgICAgIC8qIDU5ICAqLworICAgIC5sb25nICAgU0MyX0lSUUhhbmRsZXIgICAgICAgIC8qIDYwICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDYxICAqLworICAgIC5sb25nICAgU1BJM19JUlFIYW5kbGVyICAgICAgIC8qIDYyICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDYzICAqLworICAgIC5sb25nICAgU0RIMF9JUlFIYW5kbGVyICAgICAgIC8qIDY0ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDY1ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDY2ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDY3ICAqLworICAgIC5sb25nICAgSTJTMF9JUlFIYW5kbGVyICAgICAgIC8qIDY4ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDY5ICAqLworICAgIC5sb25nICAgT1BBMF9JUlFIYW5kbGVyICAgICAgIC8qIDcwICAqLworICAgIC5sb25nICAgQ1JQVF9JUlFIYW5kbGVyICAgICAgIC8qIDcxICAqLworICAgIC5sb25nICAgR1BHX0lSUUhhbmRsZXIgICAgICAgIC8qIDcyICAqLworICAgIC5sb25nICAgRUlOVDZfSVJRSGFuZGxlciAgICAgIC8qIDczICAqLworICAgIC5sb25nICAgVUFSVDRfSVJRSGFuZGxlciAgICAgIC8qIDc0ICAqLworICAgIC5sb25nICAgVUFSVDVfSVJRSGFuZGxlciAgICAgIC8qIDc1ICAqLworICAgIC5sb25nICAgVVNDSTBfSVJRSGFuZGxlciAgICAgIC8qIDc2ICAqLworICAgIC5sb25nICAgVVNDSTFfSVJRSGFuZGxlciAgICAgIC8qIDc3ICAqLworICAgIC5sb25nICAgQlBXTTBfSVJRSGFuZGxlciAgICAgIC8qIDc4ICAqLworICAgIC5sb25nICAgQlBXTTFfSVJRSGFuZGxlciAgICAgIC8qIDc5ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDgwICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDgxICAqLworICAgIC5sb25nICAgSTJDMl9JUlFIYW5kbGVyICAgICAgIC8qIDgyICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDgzICAqLworICAgIC5sb25nICAgUUVJMF9JUlFIYW5kbGVyICAgICAgIC8qIDg0ICAqLworICAgIC5sb25nICAgUUVJMV9JUlFIYW5kbGVyICAgICAgIC8qIDg1ICAqLworICAgIC5sb25nICAgRUNBUDBfSVJRSGFuZGxlciAgICAgIC8qIDg2ICAqLworICAgIC5sb25nICAgRUNBUDFfSVJRSGFuZGxlciAgICAgIC8qIDg3ICAqLworICAgIC5sb25nICAgR1BIX0lSUUhhbmRsZXIgICAgICAgIC8qIDg4ICAqLworICAgIC5sb25nICAgRUlOVDdfSVJRSGFuZGxlciAgICAgIC8qIDg5ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDkwICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDkxICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDkyICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDkzICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDk0ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDk1ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDk2ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDk3ICAqLworICAgIC5sb25nICAgUERNQTFfSVJRSGFuZGxlciAgICAgIC8qIDk4ICAqLworICAgIC5sb25nICAgU0NVX0lSUUhhbmRsZXIgICAgICAgIC8qIDk5ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDEwMCAqLworICAgIC5sb25nICAgVFJOR19JUlFIYW5kbGVyICAgICAgIC8qIDEwMSAqLworCisgICAgLnNpemUgICAgX19WZWN0b3JzLCAuIC0gX19WZWN0b3JzCisKKyAgICAudGV4dAorICAgIC50aHVtYgorICAgIC50aHVtYl9mdW5jCisgICAgLmFsaWduICAgIDIKKyAgICAuZ2xvYmwgICAgUmVzZXRfSGFuZGxlcgorICAgIC50eXBlICAgIFJlc2V0X0hhbmRsZXIsICVmdW5jdGlvbgorUmVzZXRfSGFuZGxlcjoKKy8qICBGaXJzdGx5IGl0IGNvcGllcyBkYXRhIGZyb20gcmVhZCBvbmx5IG1lbW9yeSB0byBSQU0uIFRoZXJlIGFyZSB0d28gc2NoZW1lcworICogIHRvIGNvcHkuIE9uZSBjYW4gY29weSBtb3JlIHRoYW4gb25lIHNlY3Rpb25zLiBBbm90aGVyIGNhbiBvbmx5IGNvcHkKKyAqICBvbmUgc2VjdGlvbi4gIFRoZSBmb3JtZXIgc2NoZW1lIG5lZWRzIG1vcmUgaW5zdHJ1Y3Rpb25zIGFuZCByZWFkLW9ubHkKKyAqICBkYXRhIHRvIGltcGxlbWVudCB0aGFuIHRoZSBsYXR0ZXIuCisgKiAgTWFjcm8gX19TVEFSVFVQX0NPUFlfTVVMVElQTEUgaXMgdXNlZCB0byBjaG9vc2UgYmV0d2VlbiB0d28gc2NoZW1lcy4gICovCisKKyNpZmRlZiBfX1NUQVJUVVBfQ09QWV9NVUxUSVBMRQorLyogIE11bHRpcGxlIHNlY3Rpb25zIHNjaGVtZS4KKyAqCisgKiAgQmV0d2VlbiBzeW1ib2wgYWRkcmVzcyBfX2NvcHlfdGFibGVfc3RhcnRfXyBhbmQgX19jb3B5X3RhYmxlX2VuZF9fLAorICogIHRoZXJlIGFyZSBhcnJheSBvZiB0cmlwbGV0cywgZWFjaCBvZiB3aGljaCBzcGVjaWZ5OgorICogICAgb2Zmc2V0IDA6IExNQSBvZiBzdGFydCBvZiBhIHNlY3Rpb24gdG8gY29weSBmcm9tCisgKiAgICBvZmZzZXQgNDogVk1BIG9mIHN0YXJ0IG9mIGEgc2VjdGlvbiB0byBjb3B5IHRvCisgKiAgICBvZmZzZXQgODogc2l6ZSBvZiB0aGUgc2VjdGlvbiB0byBjb3B5LiBNdXN0IGJlIG11bHRpcGx5IG9mIDQKKyAqCisgKiAgQWxsIGFkZHJlc3NlcyBtdXN0IGJlIGFsaWduZWQgdG8gNCBieXRlcyBib3VuZGFyeS4KKyAqLworICAgIGxkciAgICByNCwgPV9fY29weV90YWJsZV9zdGFydF9fCisgICAgbGRyICAgIHI1LCA9X19jb3B5X3RhYmxlX2VuZF9fCisKKy5MX2xvb3AwOgorICAgIGNtcCAgICByNCwgcjUKKyAgICBiZ2UgICAgLkxfbG9vcDBfZG9uZQorICAgIGxkciAgICByMSwgW3I0XQorICAgIGxkciAgICByMiwgW3I0LCAjNF0KKyAgICBsZHIgICAgcjMsIFtyNCwgIzhdCisKKy5MX2xvb3AwXzA6CisgICAgc3VicyAgICByMywgIzQKKyAgICBibHQgICAgLkxfbG9vcDBfMF9kb25lCisgICAgbGRyICAgIHIwLCBbcjEsIHIzXQorICAgIHN0ciAgICByMCwgW3IyLCByM10KKyAgICBiICAgIC5MX2xvb3AwXzAKKworLkxfbG9vcDBfMF9kb25lOgorICAgIGFkZHMgICAgcjQsICMxMgorICAgIGIgICAgLkxfbG9vcDAKKworLkxfbG9vcDBfZG9uZToKKyNlbHNlCisvKiAgU2luZ2xlIHNlY3Rpb24gc2NoZW1lLgorICoKKyAqICBUaGUgcmFuZ2VzIG9mIGNvcHkgZnJvbS90byBhcmUgc3BlY2lmaWVkIGJ5IGZvbGxvd2luZyBzeW1ib2xzCisgKiAgICBfX2V0ZXh0OiBMTUEgb2Ygc3RhcnQgb2YgdGhlIHNlY3Rpb24gdG8gY29weSBmcm9tLiBVc3VhbGx5IGVuZCBvZiB0ZXh0CisgKiAgICBfX2RhdGFfc3RhcnRfXzogVk1BIG9mIHN0YXJ0IG9mIHRoZSBzZWN0aW9uIHRvIGNvcHkgdG8KKyAqICAgIF9fZGF0YV9lbmRfXzogVk1BIG9mIGVuZCBvZiB0aGUgc2VjdGlvbiB0byBjb3B5IHRvCisgKgorICogIEFsbCBhZGRyZXNzZXMgbXVzdCBiZSBhbGlnbmVkIHRvIDQgYnl0ZXMgYm91bmRhcnkuCisgKi8KKyAgICBsZHIgICAgcjEsID1fX2V0ZXh0CisgICAgbGRyICAgIHIyLCA9X19kYXRhX3N0YXJ0X18KKyAgICBsZHIgICAgcjMsID1fX2RhdGFfZW5kX18KKworICAgIHN1YnMgICAgcjMsIHIyCisgICAgYmxlICAgIC5MX2xvb3AxX2RvbmUKKworLkxfbG9vcDE6CisgICAgc3VicyAgICByMywgIzQKKyAgICBsZHIgICAgcjAsIFtyMSxyM10KKyAgICBzdHIgICAgcjAsIFtyMixyM10KKyAgICBiZ3QgICAgLkxfbG9vcDEKKworLkxfbG9vcDFfZG9uZToKKyNlbmRpZiAvKl9fU1RBUlRVUF9DT1BZX01VTFRJUExFICovCisKKy8qICBUaGlzIHBhcnQgb2Ygd29yayB1c3VhbGx5IGlzIGRvbmUgaW4gQyBsaWJyYXJ5IHN0YXJ0dXAgY29kZS4gT3RoZXJ3aXNlLAorICogIGRlZmluZSB0aGlzIG1hY3JvIHRvIGVuYWJsZSBpdCBpbiB0aGlzIHN0YXJ0dXAuCisgKgorICogIFRoZXJlIGFyZSB0d28gc2NoZW1lcyB0b28uIE9uZSBjYW4gY2xlYXIgbXVsdGlwbGUgQlNTIHNlY3Rpb25zLiBBbm90aGVyCisgKiAgY2FuIG9ubHkgY2xlYXIgb25lIHNlY3Rpb24uIFRoZSBmb3JtZXIgaXMgbW9yZSBzaXplIGV4cGVuc2l2ZSB0aGFuIHRoZQorICogIGxhdHRlci4KKyAqCisgKiAgRGVmaW5lIG1hY3JvIF9fU1RBUlRVUF9DTEVBUl9CU1NfTVVMVElQTEUgdG8gY2hvb3NlIHRoZSBmb3JtZXIuCisgKiAgT3RoZXJ3aXNlIGVmaW5lIG1hY3JvIF9fU1RBUlRVUF9DTEVBUl9CU1MgdG8gY2hvb3NlIHRoZSBsYXRlci4KKyAqLworI2lmZGVmIF9fU1RBUlRVUF9DTEVBUl9CU1NfTVVMVElQTEUKKy8qICBNdWx0aXBsZSBzZWN0aW9ucyBzY2hlbWUuCisgKgorICogIEJldHdlZW4gc3ltYm9sIGFkZHJlc3MgX19jb3B5X3RhYmxlX3N0YXJ0X18gYW5kIF9fY29weV90YWJsZV9lbmRfXywKKyAqICB0aGVyZSBhcmUgYXJyYXkgb2YgdHVwbGVzIHNwZWNpZnlpbmc6CisgKiAgICBvZmZzZXQgMDogU3RhcnQgb2YgYSBCU1Mgc2VjdGlvbgorICogICAgb2Zmc2V0IDQ6IFNpemUgb2YgdGhpcyBCU1Mgc2VjdGlvbi4gTXVzdCBiZSBtdWx0aXBseSBvZiA0CisgKi8KKyAgICBsZHIgICAgcjMsID1fX3plcm9fdGFibGVfc3RhcnRfXworICAgIGxkciAgICByNCwgPV9femVyb190YWJsZV9lbmRfXworCisuTF9sb29wMjoKKyAgICBjbXAgICAgcjMsIHI0CisgICAgYmdlICAgIC5MX2xvb3AyX2RvbmUKKyAgICBsZHIgICAgcjEsIFtyM10KKyAgICBsZHIgICAgcjIsIFtyMywgIzRdCisgICAgbW92cyAgICByMCwgMAorCisuTF9sb29wMl8wOgorICAgIHN1YnMgICAgcjIsICM0CisgICAgYmx0ICAgIC5MX2xvb3AyXzBfZG9uZQorICAgIHN0ciAgICByMCwgW3IxLCByMl0KKyAgICBiICAgIC5MX2xvb3AyXzAKKy5MX2xvb3AyXzBfZG9uZToKKworICAgIGFkZHMgICAgcjMsICM4CisgICAgYiAgICAuTF9sb29wMgorLkxfbG9vcDJfZG9uZToKKyNlbGlmIGRlZmluZWQgKF9fU1RBUlRVUF9DTEVBUl9CU1MpCisvKiAgU2luZ2xlIEJTUyBzZWN0aW9uIHNjaGVtZS4KKyAqCisgKiAgVGhlIEJTUyBzZWN0aW9uIGlzIHNwZWNpZmllZCBieSBmb2xsb3dpbmcgc3ltYm9scworICogICAgX19ic3Nfc3RhcnRfXzogc3RhcnQgb2YgdGhlIEJTUyBzZWN0aW9uLgorICogICAgX19ic3NfZW5kX186IGVuZCBvZiB0aGUgQlNTIHNlY3Rpb24uCisgKgorICogIEJvdGggYWRkcmVzc2VzIG11c3QgYmUgYWxpZ25lZCB0byA0IGJ5dGVzIGJvdW5kYXJ5LgorICovCisgICAgbGRyICAgIHIxLCA9X19ic3Nfc3RhcnRfXworICAgIGxkciAgICByMiwgPV9fYnNzX2VuZF9fCisKKyAgICBtb3ZzICAgIHIwLCAwCisKKyAgICBzdWJzICAgIHIyLCByMQorICAgIGJsZSAgICAuTF9sb29wM19kb25lCisKKy5MX2xvb3AzOgorICAgIHN1YnMgICAgcjIsICM0CisgICAgc3RyICAgIHIwLCBbcjEsIHIyXQorICAgIGJndCAgICAuTF9sb29wMworLkxfbG9vcDNfZG9uZToKKyNlbmRpZiAvKiBfX1NUQVJUVVBfQ0xFQVJfQlNTX01VTFRJUExFIHx8IF9fU1RBUlRVUF9DTEVBUl9CU1MgKi8KKworICAgIG1ycyAgICAgcjAsIGNvbnRyb2wgICAgLyogR2V0IGNvbnRyb2wgdmFsdWUgKi8KKyAgICBtb3ZzICAgIHIxLCAjMgorICAgIG9ycnMgICAgcjAsIHIwLCByMSAgICAgLyogU2VsZWN0IHN3aXRjaCB0byBQU1AgKi8KKyAgICBtc3IgICAgIGNvbnRyb2wsIHIwCisgICAgbGRyICAgICByMCwgPUltYWdlJCRBUk1fTElCX1NUQUNLJCRaSSQkTGltaXQKKyAgICBtc3IgICAgIHBzcCwgcjAKKworI2lmbmRlZiBfX1NUQVJUCisjZGVmaW5lIF9fU1RBUlQgX3N0YXJ0CisjZW5kaWYKKyAgICBibCAgICBfX1NUQVJUCisKKyAgICAucG9vbAorICAgIC5zaXplICAgIFJlc2V0X0hhbmRsZXIsIC4gLSBSZXNldF9IYW5kbGVyCisKKyAgICAuYWxpZ24gIDIKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrICAgRGVmYXVsdF9IYW5kbGVyCisgICAgLnR5cGUgICBEZWZhdWx0X0hhbmRsZXIsICUgZnVuY3Rpb24KKworRGVmYXVsdF9IYW5kbGVyOgorICAgIGIgICAuCisgICAgLnNpemUgICBEZWZhdWx0X0hhbmRsZXIsIC4gLSBEZWZhdWx0X0hhbmRsZXIKKworCisvKiAgTWFjcm8gdG8gZGVmaW5lIGRlZmF1bHQgaGFuZGxlcnMuICovCisgICAgLm1hY3JvICAgIGRlZl9pcnFfaGFuZGxlciAgICBoYW5kbGVyX25hbWUKKyAgICAuYWxpZ24gICAgMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgICAgXGhhbmRsZXJfbmFtZQorICAgIFxoYW5kbGVyX25hbWU6CisgICAgYiAgICAgICAgXGhhbmRsZXJfbmFtZQorICAgIC5lbmRtCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgTk1JX0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgSGFyZEZhdWx0X0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU1ZDX0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUGVuZFNWX0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU3lzVGlja19IYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgQk9EX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgSVJDX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUFdSV1VfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTUkFNX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQ0xLRkFJTF9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgUlRDX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVEFNUEVSX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgV0RUX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgV1dEVF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQzX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UNV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQQV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQQl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQQ19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQRF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQRV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQRl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFFTUEkwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU1BJMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEJSQUtFMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVQV00wX1AwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRVBXTTBfUDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFUFdNMF9QMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEJSQUtFMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVQV00xX1AwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRVBXTTFfUDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFUFdNMV9QMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFRNUjBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBUTVIxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVElNRVIxX0hhbmRsZXIgLypKdXN0IGEgaGFuZGxlciB0byB1c2UgVE1SMiBoYXJkd2FyZSAqLworICAgIGRlZl9pcnFfaGFuZGxlciBUTVIzX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVUFSVDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVQVJUMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEkyQzBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBJMkMxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUERNQTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBEQUNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFQURDMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVBREMxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQUNNUDAxX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBFQURDMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVBREMzX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVUFSVDJfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVQVJUM19JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgU1BJMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFNQSTJfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVU0JEX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVVNCSF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVTQk9UR19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIENBTjBfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIFNDMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFNDMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFNDMl9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgU1BJM19JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgU0RIMF9JUlFIYW5kbGVyCisKKworCisgICAgZGVmX2lycV9oYW5kbGVyIEkyUzBfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIE9QQTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBDUlBUX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BHX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDZfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVQVJUNF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVBUlQ1X0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVVNDSTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVU0NJMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEJQV00wX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQlBXTTFfSVJRSGFuZGxlcgorCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgSTJDMl9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgUUVJMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFFFSTFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFQ0FQMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVDQVAxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BIX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDdfSVJRSGFuZGxlcgorCisKKworCisKKworCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgUERNQTFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTQ1VfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIFRSTkdfSVJRSGFuZGxlcgorCisKKyAgICAuZW5kCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9nY2Mvc3RhcnR1cF9jbXNka19tMjM1MV9zLlMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9nY2Mvc3RhcnR1cF9jbXNka19tMjM1MV9zLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjODBlMAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2djYy9zdGFydHVwX2Ntc2RrX20yMzUxX3MuUwpAQCAtMCwwICsxLDQzMyBAQAorOy8qCis7ICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTggQVJNIExpbWl0ZWQKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKzsgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKzsgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCis7ICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cis7ICoKKzsgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCis7ICoKKzsgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCis7ICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKzsgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKzsgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCis7ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCis7ICoKKzsgKgorOyAqIFRoaXMgZmlsZSBpcyBkZXJpdmF0aXZlIG9mIENNU0lTIFY1LjMuMSBzdGFydHVwX0FSTUNNMjMuUworOyAqLworCisgICAgLnN5bnRheCAgICB1bmlmaWVkCisgICAgLmFyY2ggICAgYXJtdjgtbS5iYXNlCisKKyAgICAuc2VjdGlvbiAudmVjdG9ycworICAgIC5hbGlnbiAyCisgICAgLmdsb2JsICAgIF9fVmVjdG9ycworX19WZWN0b3JzOgorICAgIC5sb25nICAgIEltYWdlJCRBUk1fTElCX1NUQUNLX01TUCQkWkkkJExpbWl0ICAgLyogVG9wIG9mIFN0YWNrICovCisKKyAgICAvKiBDb3JlIGludGVycnVwdHMgKi8KKyAgICAubG9uZyAgICBSZXNldF9IYW5kbGVyICAgICAgICAgICAgICAgICAgLyogUmVzZXQgSGFuZGxlciAqLworICAgIC5sb25nICAgIE5NSV9IYW5kbGVyICAgICAgICAgICAgICAgICAgICAvKiBOTUkgSGFuZGxlciAqLworICAgIC5sb25nICAgIEhhcmRGYXVsdF9IYW5kbGVyICAgICAgICAgICAgICAvKiBIYXJkIEZhdWx0IEhhbmRsZXIgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICBTVkNfSGFuZGxlciAgICAgICAgICAgICAgICAgICAgLyogU1ZDYWxsIEhhbmRsZXIgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICBQZW5kU1ZfSGFuZGxlciAgICAgICAgICAgICAgICAgLyogUGVuZFNWIEhhbmRsZXIgKi8KKyAgICAubG9uZyAgICBTeXNUaWNrX0hhbmRsZXIgICAgICAgICAgICAgICAgLyogU3lzVGljayBIYW5kbGVyICovCisKKyAgICAvKiBFeHRlcm5hbCBpbnRlcnJ1cHRzICovCisgICAgLmxvbmcgICBCT0RfSVJRSGFuZGxlciAgICAgICAgLyogMCAgICovCisgICAgLmxvbmcgICBJUkNfSVJRSGFuZGxlciAgICAgICAgLyogMSAgICovCisgICAgLmxvbmcgICBQV1JXVV9JUlFIYW5kbGVyICAgICAgLyogMiAgICovCisgICAgLmxvbmcgICBTUkFNX0lSUUhhbmRsZXIgICAgICAgLyogMyAgICovCisgICAgLmxvbmcgICBDTEtGQUlMX0lSUUhhbmRsZXIgICAgLyogNCAgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNSAgICovCisgICAgLmxvbmcgICBSVENfSVJRSGFuZGxlciAgICAgICAgLyogNiAgICovCisgICAgLmxvbmcgICBUQU1QRVJfSVJRSGFuZGxlciAgICAgLyogNyAgICovCisgICAgLmxvbmcgICBXRFRfSVJRSGFuZGxlciAgICAgICAgLyogOCAgICovCisgICAgLmxvbmcgICBXV0RUX0lSUUhhbmRsZXIgICAgICAgLyogOSAgICovCisgICAgLmxvbmcgICBFSU5UMF9JUlFIYW5kbGVyICAgICAgLyogMTAgICovCisgICAgLmxvbmcgICBFSU5UMV9JUlFIYW5kbGVyICAgICAgLyogMTEgICovCisgICAgLmxvbmcgICBFSU5UMl9JUlFIYW5kbGVyICAgICAgLyogMTIgICovCisgICAgLmxvbmcgICBFSU5UM19JUlFIYW5kbGVyICAgICAgLyogMTMgICovCisgICAgLmxvbmcgICBFSU5UNF9JUlFIYW5kbGVyICAgICAgLyogMTQgICovCisgICAgLmxvbmcgICBFSU5UNV9JUlFIYW5kbGVyICAgICAgLyogMTUgICovCisgICAgLmxvbmcgICBHUEFfSVJRSGFuZGxlciAgICAgICAgLyogMTYgICovCisgICAgLmxvbmcgICBHUEJfSVJRSGFuZGxlciAgICAgICAgLyogMTcgICovCisgICAgLmxvbmcgICBHUENfSVJRSGFuZGxlciAgICAgICAgLyogMTggICovCisgICAgLmxvbmcgICBHUERfSVJRSGFuZGxlciAgICAgICAgLyogMTkgICovCisgICAgLmxvbmcgICBHUEVfSVJRSGFuZGxlciAgICAgICAgLyogMjAgICovCisgICAgLmxvbmcgICBHUEZfSVJRSGFuZGxlciAgICAgICAgLyogMjEgICovCisgICAgLmxvbmcgICBRU1BJMF9JUlFIYW5kbGVyICAgICAgLyogMjIgICovCisgICAgLmxvbmcgICBTUEkwX0lSUUhhbmRsZXIgICAgICAgLyogMjMgICovCisgICAgLmxvbmcgICBCUkFLRTBfSVJRSGFuZGxlciAgICAgLyogMjQgICovCisgICAgLmxvbmcgICBFUFdNMF9QMF9JUlFIYW5kbGVyICAgLyogMjUgICovCisgICAgLmxvbmcgICBFUFdNMF9QMV9JUlFIYW5kbGVyICAgLyogMjYgICovCisgICAgLmxvbmcgICBFUFdNMF9QMl9JUlFIYW5kbGVyICAgLyogMjcgICovCisgICAgLmxvbmcgICBCUkFLRTFfSVJRSGFuZGxlciAgICAgLyogMjggICovCisgICAgLmxvbmcgICBFUFdNMV9QMF9JUlFIYW5kbGVyICAgLyogMjkgICovCisgICAgLmxvbmcgICBFUFdNMV9QMV9JUlFIYW5kbGVyICAgLyogMzAgICovCisgICAgLmxvbmcgICBFUFdNMV9QMl9JUlFIYW5kbGVyICAgLyogMzEgICovCisgICAgLmxvbmcgICBURk1fVElNRVIwX0lSUV9IYW5kbGVyIC8qIDMyICAqLworICAgIC5sb25nICAgVE1SMV9JUlFIYW5kbGVyICAgICAgIC8qIDMzICAqLworICAgIC5sb25nICAgVElNRVIxX0hhbmRsZXIgICAgICAgIC8qIFRNUjJfSVJRSGFuZGxlciAzNCAgKi8KKyAgICAubG9uZyAgIFRNUjNfSVJRSGFuZGxlciAgICAgICAvKiAzNSAgKi8KKyAgICAubG9uZyAgIFVBUlQwX0lSUUhhbmRsZXIgICAgICAvKiAzNiAgKi8KKyAgICAubG9uZyAgIFVBUlQxX0lSUUhhbmRsZXIgICAgICAvKiAzNyAgKi8KKyAgICAubG9uZyAgIEkyQzBfSVJRSGFuZGxlciAgICAgICAvKiAzOCAgKi8KKyAgICAubG9uZyAgIEkyQzFfSVJRSGFuZGxlciAgICAgICAvKiAzOSAgKi8KKyAgICAubG9uZyAgIFBETUEwX0lSUUhhbmRsZXIgICAgICAvKiA0MCAgKi8KKyAgICAubG9uZyAgIERBQ19JUlFIYW5kbGVyICAgICAgICAvKiA0MSAgKi8KKyAgICAubG9uZyAgIEVBREMwX0lSUUhhbmRsZXIgICAgICAvKiA0MiAgKi8KKyAgICAubG9uZyAgIEVBREMxX0lSUUhhbmRsZXIgICAgICAvKiA0MyAgKi8KKyAgICAubG9uZyAgIEFDTVAwMV9JUlFIYW5kbGVyICAgICAvKiA0NCAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA0NSAgKi8KKyAgICAubG9uZyAgIEVBREMyX0lSUUhhbmRsZXIgICAgICAvKiA0NiAgKi8KKyAgICAubG9uZyAgIEVBREMzX0lSUUhhbmRsZXIgICAgICAvKiA0NyAgKi8KKyAgICAubG9uZyAgIFVBUlQyX0lSUUhhbmRsZXIgICAgICAvKiA0OCAgKi8KKyAgICAubG9uZyAgIFVBUlQzX0lSUUhhbmRsZXIgICAgICAvKiA0OSAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA1MCAgKi8KKyAgICAubG9uZyAgIFNQSTFfSVJRSGFuZGxlciAgICAgICAvKiA1MSAgKi8KKyAgICAubG9uZyAgIFNQSTJfSVJRSGFuZGxlciAgICAgICAvKiA1MiAgKi8KKyAgICAubG9uZyAgIFVTQkRfSVJRSGFuZGxlciAgICAgICAvKiA1MyAgKi8KKyAgICAubG9uZyAgIFVTQkhfSVJRSGFuZGxlciAgICAgICAvKiA1NCAgKi8KKyAgICAubG9uZyAgIFVTQk9UR19JUlFIYW5kbGVyICAgICAvKiA1NSAgKi8KKyAgICAubG9uZyAgIENBTjBfSVJRSGFuZGxlciAgICAgICAvKiA1NiAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA1NyAgKi8KKyAgICAubG9uZyAgIFNDMF9JUlFIYW5kbGVyICAgICAgICAvKiA1OCAgKi8KKyAgICAubG9uZyAgIFNDMV9JUlFIYW5kbGVyICAgICAgICAvKiA1OSAgKi8KKyAgICAubG9uZyAgIFNDMl9JUlFIYW5kbGVyICAgICAgICAvKiA2MCAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA2MSAgKi8KKyAgICAubG9uZyAgIFNQSTNfSVJRSGFuZGxlciAgICAgICAvKiA2MiAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA2MyAgKi8KKyAgICAubG9uZyAgIFNESDBfSVJRSGFuZGxlciAgICAgICAvKiA2NCAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA2NSAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA2NiAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA2NyAgKi8KKyAgICAubG9uZyAgIEkyUzBfSVJRSGFuZGxlciAgICAgICAvKiA2OCAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA2OSAgKi8KKyAgICAubG9uZyAgIE9QQTBfSVJRSGFuZGxlciAgICAgICAvKiA3MCAgKi8KKyAgICAubG9uZyAgIENSUFRfSVJRSGFuZGxlciAgICAgICAvKiA3MSAgKi8KKyAgICAubG9uZyAgIEdQR19JUlFIYW5kbGVyICAgICAgICAvKiA3MiAgKi8KKyAgICAubG9uZyAgIEVJTlQ2X0lSUUhhbmRsZXIgICAgICAvKiA3MyAgKi8KKyAgICAubG9uZyAgIFVBUlQ0X0lSUUhhbmRsZXIgICAgICAvKiA3NCAgKi8KKyAgICAubG9uZyAgIFVBUlQ1X0lSUUhhbmRsZXIgICAgICAvKiA3NSAgKi8KKyAgICAubG9uZyAgIFVTQ0kwX0lSUUhhbmRsZXIgICAgICAvKiA3NiAgKi8KKyAgICAubG9uZyAgIFVTQ0kxX0lSUUhhbmRsZXIgICAgICAvKiA3NyAgKi8KKyAgICAubG9uZyAgIEJQV00wX0lSUUhhbmRsZXIgICAgICAvKiA3OCAgKi8KKyAgICAubG9uZyAgIEJQV00xX0lSUUhhbmRsZXIgICAgICAvKiA3OSAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA4MCAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA4MSAgKi8KKyAgICAubG9uZyAgIEkyQzJfSVJRSGFuZGxlciAgICAgICAvKiA4MiAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA4MyAgKi8KKyAgICAubG9uZyAgIFFFSTBfSVJRSGFuZGxlciAgICAgICAvKiA4NCAgKi8KKyAgICAubG9uZyAgIFFFSTFfSVJRSGFuZGxlciAgICAgICAvKiA4NSAgKi8KKyAgICAubG9uZyAgIEVDQVAwX0lSUUhhbmRsZXIgICAgICAvKiA4NiAgKi8KKyAgICAubG9uZyAgIEVDQVAxX0lSUUhhbmRsZXIgICAgICAvKiA4NyAgKi8KKyAgICAubG9uZyAgIEdQSF9JUlFIYW5kbGVyICAgICAgICAvKiA4OCAgKi8KKyAgICAubG9uZyAgIEVJTlQ3X0lSUUhhbmRsZXIgICAgICAvKiA4OSAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA5MCAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA5MSAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA5MiAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA5MyAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA5NCAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA5NSAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA5NiAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA5NyAgKi8KKyAgICAubG9uZyAgIFBETUExX0lSUUhhbmRsZXIgICAgICAvKiA5OCAgKi8KKyAgICAubG9uZyAgIFNDVV9JUlFIYW5kbGVyICAgICAgICAvKiA5OSAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiAxMDAgKi8KKyAgICAubG9uZyAgIFRSTkdfSVJRSGFuZGxlciAgICAgICAvKiAxMDEgKi8KKworICAgIC5zaXplICAgIF9fVmVjdG9ycywgLiAtIF9fVmVjdG9ycworCisgICAgLnRleHQKKyAgICAudGh1bWIKKyAgICAudGh1bWJfZnVuYworICAgIC5hbGlnbiAgICAyCisgICAgLmdsb2JsICAgIFJlc2V0X0hhbmRsZXIKKyAgICAudHlwZSAgICBSZXNldF9IYW5kbGVyLCAlZnVuY3Rpb24KK1Jlc2V0X0hhbmRsZXI6CisvKiAgRmlyc3RseSBpdCBjb3BpZXMgZGF0YSBmcm9tIHJlYWQgb25seSBtZW1vcnkgdG8gUkFNLiBUaGVyZSBhcmUgdHdvIHNjaGVtZXMKKyAqICB0byBjb3B5LiBPbmUgY2FuIGNvcHkgbW9yZSB0aGFuIG9uZSBzZWN0aW9ucy4gQW5vdGhlciBjYW4gb25seSBjb3B5CisgKiAgb25lIHNlY3Rpb24uICBUaGUgZm9ybWVyIHNjaGVtZSBuZWVkcyBtb3JlIGluc3RydWN0aW9ucyBhbmQgcmVhZC1vbmx5CisgKiAgZGF0YSB0byBpbXBsZW1lbnQgdGhhbiB0aGUgbGF0dGVyLgorICogIE1hY3JvIF9fU1RBUlRVUF9DT1BZX01VTFRJUExFIGlzIHVzZWQgdG8gY2hvb3NlIGJldHdlZW4gdHdvIHNjaGVtZXMuICAqLworCisjaWZkZWYgX19TVEFSVFVQX0NPUFlfTVVMVElQTEUKKy8qICBNdWx0aXBsZSBzZWN0aW9ucyBzY2hlbWUuCisgKgorICogIEJldHdlZW4gc3ltYm9sIGFkZHJlc3MgX19jb3B5X3RhYmxlX3N0YXJ0X18gYW5kIF9fY29weV90YWJsZV9lbmRfXywKKyAqICB0aGVyZSBhcmUgYXJyYXkgb2YgdHJpcGxldHMsIGVhY2ggb2Ygd2hpY2ggc3BlY2lmeToKKyAqICAgIG9mZnNldCAwOiBMTUEgb2Ygc3RhcnQgb2YgYSBzZWN0aW9uIHRvIGNvcHkgZnJvbQorICogICAgb2Zmc2V0IDQ6IFZNQSBvZiBzdGFydCBvZiBhIHNlY3Rpb24gdG8gY29weSB0bworICogICAgb2Zmc2V0IDg6IHNpemUgb2YgdGhlIHNlY3Rpb24gdG8gY29weS4gTXVzdCBiZSBtdWx0aXBseSBvZiA0CisgKgorICogIEFsbCBhZGRyZXNzZXMgbXVzdCBiZSBhbGlnbmVkIHRvIDQgYnl0ZXMgYm91bmRhcnkuCisgKi8KKyAgICBsZHIgICAgcjQsID1fX2NvcHlfdGFibGVfc3RhcnRfXworICAgIGxkciAgICByNSwgPV9fY29weV90YWJsZV9lbmRfXworCisuTF9sb29wMDoKKyAgICBjbXAgICAgcjQsIHI1CisgICAgYmdlICAgIC5MX2xvb3AwX2RvbmUKKyAgICBsZHIgICAgcjEsIFtyNF0KKyAgICBsZHIgICAgcjIsIFtyNCwgIzRdCisgICAgbGRyICAgIHIzLCBbcjQsICM4XQorCisuTF9sb29wMF8wOgorICAgIHN1YnMgICAgcjMsICM0CisgICAgYmx0ICAgIC5MX2xvb3AwXzBfZG9uZQorICAgIGxkciAgICByMCwgW3IxLCByM10KKyAgICBzdHIgICAgcjAsIFtyMiwgcjNdCisgICAgYiAgICAuTF9sb29wMF8wCisKKy5MX2xvb3AwXzBfZG9uZToKKyAgICBhZGRzICAgIHI0LCAjMTIKKyAgICBiICAgIC5MX2xvb3AwCisKKy5MX2xvb3AwX2RvbmU6CisjZWxzZQorLyogIFNpbmdsZSBzZWN0aW9uIHNjaGVtZS4KKyAqCisgKiAgVGhlIHJhbmdlcyBvZiBjb3B5IGZyb20vdG8gYXJlIHNwZWNpZmllZCBieSBmb2xsb3dpbmcgc3ltYm9scworICogICAgX19ldGV4dDogTE1BIG9mIHN0YXJ0IG9mIHRoZSBzZWN0aW9uIHRvIGNvcHkgZnJvbS4gVXN1YWxseSBlbmQgb2YgdGV4dAorICogICAgX19kYXRhX3N0YXJ0X186IFZNQSBvZiBzdGFydCBvZiB0aGUgc2VjdGlvbiB0byBjb3B5IHRvCisgKiAgICBfX2RhdGFfZW5kX186IFZNQSBvZiBlbmQgb2YgdGhlIHNlY3Rpb24gdG8gY29weSB0bworICoKKyAqICBBbGwgYWRkcmVzc2VzIG11c3QgYmUgYWxpZ25lZCB0byA0IGJ5dGVzIGJvdW5kYXJ5LgorICovCisgICAgbGRyICAgIHIxLCA9X19ldGV4dAorICAgIGxkciAgICByMiwgPV9fZGF0YV9zdGFydF9fCisgICAgbGRyICAgIHIzLCA9X19kYXRhX2VuZF9fCisKKyAgICBzdWJzICAgIHIzLCByMgorICAgIGJsZSAgICAuTF9sb29wMV9kb25lCisKKy5MX2xvb3AxOgorICAgIHN1YnMgICAgcjMsICM0CisgICAgbGRyICAgIHIwLCBbcjEscjNdCisgICAgc3RyICAgIHIwLCBbcjIscjNdCisgICAgYmd0ICAgIC5MX2xvb3AxCisKKy5MX2xvb3AxX2RvbmU6CisjZW5kaWYgLypfX1NUQVJUVVBfQ09QWV9NVUxUSVBMRSAqLworCisvKiAgVGhpcyBwYXJ0IG9mIHdvcmsgdXN1YWxseSBpcyBkb25lIGluIEMgbGlicmFyeSBzdGFydHVwIGNvZGUuIE90aGVyd2lzZSwKKyAqICBkZWZpbmUgdGhpcyBtYWNybyB0byBlbmFibGUgaXQgaW4gdGhpcyBzdGFydHVwLgorICoKKyAqICBUaGVyZSBhcmUgdHdvIHNjaGVtZXMgdG9vLiBPbmUgY2FuIGNsZWFyIG11bHRpcGxlIEJTUyBzZWN0aW9ucy4gQW5vdGhlcgorICogIGNhbiBvbmx5IGNsZWFyIG9uZSBzZWN0aW9uLiBUaGUgZm9ybWVyIGlzIG1vcmUgc2l6ZSBleHBlbnNpdmUgdGhhbiB0aGUKKyAqICBsYXR0ZXIuCisgKgorICogIERlZmluZSBtYWNybyBfX1NUQVJUVVBfQ0xFQVJfQlNTX01VTFRJUExFIHRvIGNob29zZSB0aGUgZm9ybWVyLgorICogIE90aGVyd2lzZSBlZmluZSBtYWNybyBfX1NUQVJUVVBfQ0xFQVJfQlNTIHRvIGNob29zZSB0aGUgbGF0ZXIuCisgKi8KKyNpZmRlZiBfX1NUQVJUVVBfQ0xFQVJfQlNTX01VTFRJUExFCisvKiAgTXVsdGlwbGUgc2VjdGlvbnMgc2NoZW1lLgorICoKKyAqICBCZXR3ZWVuIHN5bWJvbCBhZGRyZXNzIF9fY29weV90YWJsZV9zdGFydF9fIGFuZCBfX2NvcHlfdGFibGVfZW5kX18sCisgKiAgdGhlcmUgYXJlIGFycmF5IG9mIHR1cGxlcyBzcGVjaWZ5aW5nOgorICogICAgb2Zmc2V0IDA6IFN0YXJ0IG9mIGEgQlNTIHNlY3Rpb24KKyAqICAgIG9mZnNldCA0OiBTaXplIG9mIHRoaXMgQlNTIHNlY3Rpb24uIE11c3QgYmUgbXVsdGlwbHkgb2YgNAorICovCisgICAgbGRyICAgIHIzLCA9X196ZXJvX3RhYmxlX3N0YXJ0X18KKyAgICBsZHIgICAgcjQsID1fX3plcm9fdGFibGVfZW5kX18KKworLkxfbG9vcDI6CisgICAgY21wICAgIHIzLCByNAorICAgIGJnZSAgICAuTF9sb29wMl9kb25lCisgICAgbGRyICAgIHIxLCBbcjNdCisgICAgbGRyICAgIHIyLCBbcjMsICM0XQorICAgIG1vdnMgICAgcjAsIDAKKworLkxfbG9vcDJfMDoKKyAgICBzdWJzICAgIHIyLCAjNAorICAgIGJsdCAgICAuTF9sb29wMl8wX2RvbmUKKyAgICBzdHIgICAgcjAsIFtyMSwgcjJdCisgICAgYiAgICAuTF9sb29wMl8wCisuTF9sb29wMl8wX2RvbmU6CisKKyAgICBhZGRzICAgIHIzLCAjOAorICAgIGIgICAgLkxfbG9vcDIKKy5MX2xvb3AyX2RvbmU6CisjZWxpZiBkZWZpbmVkIChfX1NUQVJUVVBfQ0xFQVJfQlNTKQorLyogIFNpbmdsZSBCU1Mgc2VjdGlvbiBzY2hlbWUuCisgKgorICogIFRoZSBCU1Mgc2VjdGlvbiBpcyBzcGVjaWZpZWQgYnkgZm9sbG93aW5nIHN5bWJvbHMKKyAqICAgIF9fYnNzX3N0YXJ0X186IHN0YXJ0IG9mIHRoZSBCU1Mgc2VjdGlvbi4KKyAqICAgIF9fYnNzX2VuZF9fOiBlbmQgb2YgdGhlIEJTUyBzZWN0aW9uLgorICoKKyAqICBCb3RoIGFkZHJlc3NlcyBtdXN0IGJlIGFsaWduZWQgdG8gNCBieXRlcyBib3VuZGFyeS4KKyAqLworICAgIGxkciAgICByMSwgPV9fYnNzX3N0YXJ0X18KKyAgICBsZHIgICAgcjIsID1fX2Jzc19lbmRfXworCisgICAgbW92cyAgICByMCwgMAorCisgICAgc3VicyAgICByMiwgcjEKKyAgICBibGUgICAgLkxfbG9vcDNfZG9uZQorCisuTF9sb29wMzoKKyAgICBzdWJzICAgIHIyLCAjNAorICAgIHN0ciAgICByMCwgW3IxLCByMl0KKyAgICBiZ3QgICAgLkxfbG9vcDMKKy5MX2xvb3AzX2RvbmU6CisjZW5kaWYgLyogX19TVEFSVFVQX0NMRUFSX0JTU19NVUxUSVBMRSB8fCBfX1NUQVJUVVBfQ0xFQVJfQlNTICovCisKKyAgICBjcHNpZCAgIGkgICAgICAgICAgICAgIC8qIERpc2FibGUgSVJRcyAqLworICAgIGJsICAgIFN5c3RlbUluaXQKKworICAgIG1ycyAgICAgcjAsIGNvbnRyb2wgICAgLyogR2V0IGNvbnRyb2wgdmFsdWUgKi8KKyAgICBtb3ZzICAgIHIxLCAjMgorICAgIG9ycnMgICAgcjAsIHIwLCByMSAgICAgLyogU2VsZWN0IHN3aXRjaCB0byBQU1AgKi8KKyAgICBtc3IgICAgIGNvbnRyb2wsIHIwCisgICAgbGRyICAgICByMCwgPUltYWdlJCRBUk1fTElCX1NUQUNLJCRaSSQkTGltaXQKKyAgICBtc3IgICAgIHBzcCwgcjAKKworI2lmbmRlZiBfX1NUQVJUCisjZGVmaW5lIF9fU1RBUlQgX3N0YXJ0CisjZW5kaWYKKyAgICBibCAgICBfX1NUQVJUCisKKyAgICAucG9vbAorICAgIC5zaXplICAgIFJlc2V0X0hhbmRsZXIsIC4gLSBSZXNldF9IYW5kbGVyCisKKyAgICAuYWxpZ24gIDIKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrICAgRGVmYXVsdF9IYW5kbGVyCisgICAgLnR5cGUgICBEZWZhdWx0X0hhbmRsZXIsICUgZnVuY3Rpb24KKworRGVmYXVsdF9IYW5kbGVyOgorICAgIGIgICAuCisgICAgLnNpemUgICBEZWZhdWx0X0hhbmRsZXIsIC4gLSBEZWZhdWx0X0hhbmRsZXIKKworCisvKiAgTWFjcm8gdG8gZGVmaW5lIGRlZmF1bHQgaGFuZGxlcnMuICovCisgICAgLm1hY3JvICAgIGRlZl9pcnFfaGFuZGxlciAgICBoYW5kbGVyX25hbWUKKyAgICAuYWxpZ24gICAgMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgICAgXGhhbmRsZXJfbmFtZQorICAgIFxoYW5kbGVyX25hbWU6CisgICAgYiAgICAgICAgXGhhbmRsZXJfbmFtZQorICAgIC5lbmRtCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgTk1JX0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgSGFyZEZhdWx0X0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU1ZDX0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUGVuZFNWX0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU3lzVGlja19IYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgQk9EX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgSVJDX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUFdSV1VfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTUkFNX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQ0xLRkFJTF9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgUlRDX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVEFNUEVSX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgV0RUX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgV1dEVF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQzX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UNV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQQV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQQl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQQ19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQRF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQRV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQRl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFFTUEkwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU1BJMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEJSQUtFMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVQV00wX1AwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRVBXTTBfUDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFUFdNMF9QMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEJSQUtFMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVQV00xX1AwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRVBXTTFfUDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFUFdNMV9QMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFRGTV9USU1FUjBfSVJRX0hhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVE1SMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFRJTUVSMV9IYW5kbGVyIC8qSnVzdCBhIGhhbmRsZXIgdG8gdXNlIFRNUjIgaGFyZHdhcmUgKi8KKyAgICBkZWZfaXJxX2hhbmRsZXIgVE1SM19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVBUlQwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVUFSVDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBJMkMwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgSTJDMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFBETUEwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgREFDX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUFEQzBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFQURDMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEFDTVAwMV9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUFEQzJfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFQURDM19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVBUlQyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVUFSVDNfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIFNQSTFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTUEkyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVVNCRF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVTQkhfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVU0JPVEdfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBDQU4wX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBTQzBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTQzFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTQzJfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIFNQSTNfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIFNESDBfSVJRSGFuZGxlcgorCisKKworICAgIGRlZl9pcnFfaGFuZGxlciBJMlMwX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBPUEEwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQ1JQVF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQR19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQ2X0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVUFSVDRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVQVJUNV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVTQ0kwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVVNDSTFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBCUFdNMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEJQV00xX0lSUUhhbmRsZXIKKworCisgICAgZGVmX2lycV9oYW5kbGVyIEkyQzJfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIFFFSTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBRRUkxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUNBUDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFQ0FQMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQSF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQ3X0lSUUhhbmRsZXIKKworCisKKworCisKKworCisgICAgZGVmX2lycV9oYW5kbGVyIFBETUExX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU0NVX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBUUk5HX0lSUUhhbmRsZXIKKworICAgIC5lbmQKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2lhci9tMjM1MV9ibDIuaWNmIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvaWFyL20yMzUxX2JsMi5pY2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlMTY1NwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2lhci9tMjM1MV9ibDIuaWNmCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgQXJtIExpbWl0ZWQKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKgorICogVGhpcyBmaWxlIGlzIGRlcml2YXRpdmUgb2YgLi4vYXJtY2xhbmcvbXBzMl9hbjUxOV9ibDIuc2N0CisgKi8KKworLyogTGlua2VyIHNjcmlwdCB0byBjb25maWd1cmUgbWVtb3J5IHJlZ2lvbnMuICovCisvKiBUaGlzIGZpbGUgd2lsbCBiZSBydW4gdHJvdWdoIHRoZSBwcmUtcHJvY2Vzc29yLiAqLworCisjaW5jbHVkZSAicmVnaW9uX2RlZnMuaCIKKworZGVmaW5lIG1lbW9yeSBtZW0gd2l0aCBzaXplID0gNEc7CisKK2RlZmluZSByZWdpb24gQkwyX0NPREVfcmVnaW9uICA9ICAgbWVtOltmcm9tIEJMMl9DT0RFX1NUQVJUIHNpemUgQkwyX0NPREVfU0laRV07CisKK2RlZmluZSByZWdpb24gQkwyX1JBTV9yZWdpb24gICA9ICBtZW06W2Zyb20gQkwyX0RBVEFfU1RBUlQgc2l6ZSBCTDJfREFUQV9TSVpFXTsKKworZG8gbm90IGluaXRpYWxpemUgIHsgc2VjdGlvbiAubm9pbml0IH07Citpbml0aWFsaXplIGJ5IGNvcHkgeyByZWFkd3JpdGUgfTsKKworZGVmaW5lIGJsb2NrIEVSX0NPREUgICAgICAgIHdpdGggZml4ZWQgb3JkZXIsIGFsaWdubWVudCA9IDggeworICAgICAgIHNlY3Rpb24gLmludHZlYywKKyAgICAgICByZWFkb25seQorICAgICAgIH07CisKK2RlZmluZSBibG9jayBURk1fU0hBUkVEX0RBVEEgd2l0aCBhbGlnbm1lbnQgPSAzMiwgc2l6ZSA9IEJPT1RfVEZNX1NIQVJFRF9EQVRBX1NJWkUgeyB9Owora2VlcCB7YmxvY2sgVEZNX1NIQVJFRF9EQVRBfTsKKworZGVmaW5lIGJsb2NrIEVSX0RBVEEgICAgICAgIHdpdGggbWF4aW11bSBzaXplID0gQkwyX0RBVEFfU0laRSwgYWxpZ25tZW50ID0gMzIge3JlYWR3cml0ZX07CisgICAgLyogTVNQICovCisKK2RlZmluZSBibG9jayBBUk1fTElCX1NUQUNLICAgICAgd2l0aCBhbGlnbm1lbnQgPSAzMiwgc2l6ZSA9IEJMMl9NU1BfU1RBQ0tfU0laRSB7IH07CitkZWZpbmUgYmxvY2sgSEVBUCAgICAgICAgICAgICAgIHdpdGggYWxpZ25tZW50ID0gOCwgc2l6ZSA9IEJMMl9IRUFQX1NJWkUgeyB9OworZGVmaW5lIGJsb2NrIEFSTV9MSUJfSEVBUCAgICAgICB3aXRoIGFsaWdubWVudCA9IDgsIHNpemUgPSBCTDJfSEVBUF9TSVpFIHsgfTsKK2RlZmluZSBvdmVybGF5IEhFQVBfT1ZMICAgICAgICAge2Jsb2NrIEhFQVB9OworZGVmaW5lIG92ZXJsYXkgSEVBUF9PVkwgICAgICAgICB7YmxvY2sgQVJNX0xJQl9IRUFQfTsKKworaWYgKGlzZGVmaW5lZHN5bWJvbChfX1VTRV9ETElCX1BFUlRIUkVBRCkpCit7CisgIC8vIFJlcXVpcmVkIGluIGEgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24KKyAgaW5pdGlhbGl6ZSBieSBjb3B5IHdpdGggcGFja2luZyA9IG5vbmUgeyBzZWN0aW9uIF9fRExJQl9QRVJUSFJFQUQgfTsKK30KKworZGVmaW5lIGJsb2NrIExSX0NPREUgd2l0aCBmaXhlZCBvcmRlciB7YmxvY2sgRVJfQ09ERX07CitkZWZpbmUgYmxvY2sgREFUQSB3aXRoIGZpeGVkIG9yZGVyIHtibG9jayBURk1fU0hBUkVEX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jayBFUl9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sgQVJNX0xJQl9TVEFDSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXkgSEVBUF9PVkx9OworCitwbGFjZSBpbiBCTDJfQ09ERV9yZWdpb24gICAgICAgICB7IGJsb2NrIExSX0NPREUgfTsKK3BsYWNlIGluIEJMMl9SQU1fcmVnaW9uICAgICAgICAgIHsgYmxvY2sgREFUQX07CmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9pYXIvbTIzNTFfbnMuaWNmIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvaWFyL20yMzUxX25zLmljZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTM4ODg0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvaWFyL20yMzUxX25zLmljZgpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIwIEFybSBMaW1pdGVkCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICoKKyAqIFRoaXMgZmlsZSBpcyBkZXJpdmF0aXZlIG9mIC4uL2FybWNsYW5nL21wczJfYW41MjFfbnMuc2N0CisgKi8KKworLyogTGlua2VyIHNjcmlwdCB0byBjb25maWd1cmUgbWVtb3J5IHJlZ2lvbnMuICovCisvKiBUaGlzIGZpbGUgd2lsbCBiZSBydW4gdHJvdWdoIHRoZSBwcmUtcHJvY2Vzc29yLiAqLworCisjaW5jbHVkZSAicmVnaW9uX2RlZnMuaCIKKworZGVmaW5lIG1lbW9yeSBtZW0gd2l0aCBzaXplID0gNEc7CisKK2RlZmluZSByZWdpb24gTlNfQ09ERV9yZWdpb24gPSAgIG1lbTpbZnJvbSBOU19DT0RFX1NUQVJUIHNpemUgTlNfQ09ERV9TSVpFXTsKKworZGVmaW5lIHJlZ2lvbiBOU19SQU1fcmVnaW9uICA9ICBtZW06W2Zyb20gTlNfREFUQV9TVEFSVCBzaXplIE5TX0RBVEFfU0laRV07CisKK2RlZmluZSBibG9jayBBUk1fTElCX1NUQUNLX01TUCAgd2l0aCBhbGlnbm1lbnQgPSA4LCBzaXplID0gTlNfTVNQX1NUQUNLX1NJWkUgeyB9OworZGVmaW5lIGJsb2NrIEFSTV9MSUJfU1RBQ0sgICAgICB3aXRoIGFsaWdubWVudCA9IDgsIHNpemUgPSBOU19QU1BfU1RBQ0tfU0laRSB7IH07CitkZWZpbmUgYmxvY2sgSEVBUCAgICAgICAgICAgICAgIHdpdGggYWxpZ25tZW50ID0gOCwgc2l6ZSA9IE5TX0hFQVBfU0laRSB7IH07CitkZWZpbmUgYmxvY2sgQVJNX0xJQl9IRUFQICAgICAgIHdpdGggYWxpZ25tZW50ID0gOCwgc2l6ZSA9IE5TX0hFQVBfU0laRSB7IH07CitkZWZpbmUgb3ZlcmxheSBIRUFQX09WTCAgICAgICAgIHtibG9jayBIRUFQfTsKK2RlZmluZSBvdmVybGF5IEhFQVBfT1ZMICAgICAgICAge2Jsb2NrIEFSTV9MSUJfSEVBUH07CisKK2RlZmluZSBibG9jayBFUl9DT0RFICAgICAgICAgICAgd2l0aCBmaXhlZCBvcmRlciwgYWxpZ25tZW50ID0gOCB7CisgICAgICAgc2VjdGlvbiAuaW50dmVjLAorICAgICAgIHJlYWRvbmx5fTsKKworZGVmaW5lIGJsb2NrIEVSX0RBVEEgd2l0aCBhbGlnbm1lbnQgPSA4IHtyZWFkd3JpdGV9OworCitkbyBub3QgaW5pdGlhbGl6ZSAgeyBzZWN0aW9uIC5ub2luaXQgfTsKK2luaXRpYWxpemUgYnkgY29weSB7IHJlYWR3cml0ZSB9OworaWYgKGlzZGVmaW5lZHN5bWJvbChfX1VTRV9ETElCX1BFUlRIUkVBRCkpCit7CisgIC8vIFJlcXVpcmVkIGluIGEgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24KKyAgaW5pdGlhbGl6ZSBieSBjb3B5IHdpdGggcGFja2luZyA9IG5vbmUgeyBzZWN0aW9uIF9fRExJQl9QRVJUSFJFQUQgfTsKK30KKworZGVmaW5lIGJsb2NrIExSX0NPREUgd2l0aCBmaXhlZCBvcmRlciB7YmxvY2sgRVJfQ09ERX07CitkZWZpbmUgYmxvY2sgREFUQSB3aXRoIGZpeGVkIG9yZGVyIHtibG9jayBFUl9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sgQVJNX0xJQl9TVEFDS19NU1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jayBBUk1fTElCX1NUQUNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheSBIRUFQX09WTH07CisKK3BsYWNlIGluIE5TX0NPREVfcmVnaW9uICB7IGJsb2NrIExSX0NPREUgfTsKK3BsYWNlIGluIE5TX1JBTV9yZWdpb24gICB7IGJsb2NrIERBVEEgfTsKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2lhci9zdGFydHVwX2Ntc2RrX20yMzUxX2JsMi5zIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvaWFyL3N0YXJ0dXBfY21zZGtfbTIzNTFfYmwyLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0ZGRhNgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2lhci9zdGFydHVwX2Ntc2RrX20yMzUxX2JsMi5zCkBAIC0wLDAgKzEsNDE0IEBACis7LyoKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBBUk0gTGltaXRlZAorOyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKzsgKgorOyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworOyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKzsgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKzsgKgorOyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKzsgKgorOyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKzsgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorOyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorOyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKzsgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKzsgKi8KKzsKKzsgVGhpcyBmaWxlIGlzIGRlcml2YXRpdmUgb2YgLi4vYXJtY2xhbmcvc3RhcnR1cF9jbXNka19tcHMyX2FuNTE5X2JsMi5zCisKKzsvKgorOy8vLS0tLS0tLS0gPDw8IFVzZSBDb25maWd1cmF0aW9uIFdpemFyZCBpbiBDb250ZXh0IE1lbnUgPj4+IC0tLS0tLS0tLS0tLS0tLS0tLQorOyovCisKKworOyA8aD4gU3RhY2sgQ29uZmlndXJhdGlvbgorOyAgIDxvPiBTdGFjayBTaXplIChpbiBCeXRlcykgPDB4MC0weEZGRkZGRkZGOjg+Cis7IDwvaD4KKworICAgICAgICAgICAgICAgIE1PRFVMRSAgID9jc3RhcnR1cAorCisgICAgICAgICAgICAgICAgOzsgRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBzZWN0aW9ucy4KKyAgICAgICAgICAgICAgICBTRUNUSU9OICBBUk1fTElCX1NUQUNLOkRBVEE6Tk9ST09UKDMpCisKKyAgICAgICAgICAgICAgICBTRUNUSU9OICAuaW50dmVjOkNPREU6Tk9ST09UKDIpCisKKyAgICAgICAgICAgICAgICBFWFRFUk4gICBfX2lhcl9wcm9ncmFtX3N0YXJ0CisgICAgICAgICAgICAgICAgRVhURVJOICAgU3lzdGVtSW5pdAorICAgICAgICAgICAgICAgIEVYVEVSTiAgIFNDVV9JUlFIYW5kbGVyCisgICAgICAgICAgICAgICAgUFVCTElDICAgX192ZWN0b3JfdGFibGUKKyAgICAgICAgICAgICAgICBQVUJMSUMgICBfX1ZlY3RvcnMKKyAgICAgICAgICAgICAgICBQVUJMSUMgICBfX1ZlY3RvcnNfRW5kCisgICAgICAgICAgICAgICAgUFVCTElDICAgX19WZWN0b3JzX1NpemUKKyAgICAgICAgICAgICAgICBEQVRBCisKKworX192ZWN0b3JfdGFibGUgIERDRCAgICAgc2ZlKEFSTV9MSUJfU1RBQ0spICAgICAgICA7IFRvcCBvZiBTdGFjaworICAgICAgICAgICAgICAgIERDRCAgICAgUmVzZXRfSGFuZGxlciAgICAgICAgICAgICA7IFJlc2V0IEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIE5NSV9IYW5kbGVyICAgICAgICAgICAgICAgOyBOTUkgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgSGFyZEZhdWx0X0hhbmRsZXIgICAgICAgICA7IEhhcmQgRmF1bHQgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICBTVkNfSGFuZGxlciAgICAgICAgICAgICAgIDsgU1ZDYWxsIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICBQZW5kU1ZfSGFuZGxlciAgICAgICAgICAgIDsgUGVuZFNWIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFN5c1RpY2tfSGFuZGxlciAgICAgICAgICAgOyBTeXNUaWNrIEhhbmRsZXIKKworICAgIDsgRXh0ZXJuYWwgSW50ZXJydXB0cworICAgIERDRCAgICAgQk9EX0lSUUhhbmRsZXIJCSAgICAgICA7IDAKKyAgICBEQ0QgICAgIElSQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMQorICAgIERDRCAgICAgUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICAgOyAyCisgICAgRENEICAgICBTUkFNX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMKKyAgICBEQ0QgICAgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgIDsgNAorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA1CisgICAgRENEICAgICBSVENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYKKyAgICBEQ0QgICAgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgIDsgNworICAgIERDRCAgICAgV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4CisgICAgRENEICAgICBXV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkKKyAgICBEQ0QgICAgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTAKKyAgICBEQ0QgICAgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTEKKyAgICBEQ0QgICAgIEVJTlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTIKKyAgICBEQ0QgICAgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTMKKyAgICBEQ0QgICAgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTQKKyAgICBEQ0QgICAgIEVJTlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTUKKyAgICBEQ0QgICAgIEdQQV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTYKKyAgICBEQ0QgICAgIEdQQl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTcKKyAgICBEQ0QgICAgIEdQQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTgKKyAgICBEQ0QgICAgIEdQRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTkKKyAgICBEQ0QgICAgIEdQRV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjAKKyAgICBEQ0QgICAgIEdQRl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjEKKyAgICBEQ0QgICAgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMjIKKyAgICBEQ0QgICAgIFNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMjMKKyAgICBEQ0QgICAgIEJSQUtFMF9JUlFIYW5kbGVyICAgICAgICAgIDsgMjQKKyAgICBEQ0QgICAgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjUKKyAgICBEQ0QgICAgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMjYKKyAgICBEQ0QgICAgIEVQV00wX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMjcKKyAgICBEQ0QgICAgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgIDsgMjgKKyAgICBEQ0QgICAgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjkKKyAgICBEQ0QgICAgIEVQV00xX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMzAKKyAgICBEQ0QgICAgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMzEKKyAgICBEQ0QgICAgIFRNUjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzIKKyAgICBEQ0QgICAgIFRNUjFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzMKKyAgICBEQ0QgICAgIFRNUjJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzQKKyAgICBEQ0QgICAgIFRNUjNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzUKKyAgICBEQ0QgICAgIFVBUlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzYKKyAgICBEQ0QgICAgIFVBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzcKKyAgICBEQ0QgICAgIEkyQzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzgKKyAgICBEQ0QgICAgIEkyQzFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzkKKyAgICBEQ0QgICAgIFBETUEwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDAKKyAgICBEQ0QgICAgIERBQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNDEKKyAgICBEQ0QgICAgIEVBREMwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDIKKyAgICBEQ0QgICAgIEVBREMxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDMKKyAgICBEQ0QgICAgIEFDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgIDsgNDQKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNDUKKyAgICBEQ0QgICAgIEVBREMyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDYKKyAgICBEQ0QgICAgIEVBREMzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDcKKyAgICBEQ0QgICAgIFVBUlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDgKKyAgICBEQ0QgICAgIFVBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDkKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNTAKKyAgICBEQ0QgICAgIFNQSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTEKKyAgICBEQ0QgICAgIFNQSTJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTIKKyAgICBEQ0QgICAgIFVTQkRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTMKKyAgICBEQ0QgICAgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTQKKyAgICBEQ0QgICAgIFVTQk9UR19JUlFIYW5kbGVyICAgICAgICAgIDsgNTUKKyAgICBEQ0QgICAgIENBTjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTYKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNTcKKyAgICBEQ0QgICAgIFNDMF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTgKKyAgICBEQ0QgICAgIFNDMV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTkKKyAgICBEQ0QgICAgIFNDMl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNjAKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjEKKyAgICBEQ0QgICAgIFNQSTNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjIKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjMKKyAgICBEQ0QgICAgIFNESDBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjQKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjUKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjYKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjcKKyAgICBEQ0QgICAgIEkyUzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjgKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjkKKyAgICBEQ0QgICAgIE9QQTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzAKKyAgICBEQ0QgICAgIENSUFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzEKKyAgICBEQ0QgICAgIEdQR19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNzIKKyAgICBEQ0QgICAgIEVJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzMKKyAgICBEQ0QgICAgIFVBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzQKKyAgICBEQ0QgICAgIFVBUlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzUKKyAgICBEQ0QgICAgIFVTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzYKKyAgICBEQ0QgICAgIFVTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzcKKyAgICBEQ0QgICAgIEJQV00wX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzgKKyAgICBEQ0QgICAgIEJQV00xX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzkKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODAKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODEKKyAgICBEQ0QgICAgIEkyQzJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODIKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODMKKyAgICBEQ0QgICAgIFFFSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODQKKyAgICBEQ0QgICAgIFFFSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODUKKyAgICBEQ0QgICAgIEVDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODYKKyAgICBEQ0QgICAgIEVDQVAxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODcKKyAgICBEQ0QgICAgIEdQSF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgODgKKyAgICBEQ0QgICAgIEVJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgIDsgODkKKyAgICBEQ0QgICAgIFNESDFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOTAKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTEKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTIKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTMKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTQKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTUKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTYKKyAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTcKKyAgICBEQ0QgICAgIFBETUExX0lSUUhhbmRsZXIgICAgICAgICAgIDsgOTgKKyAgICBEQ0QgICAgIFNDVV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOTkKKyAgICBEQ0QgICAgIExDRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTAwCisgICAgRENEICAgICBUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDEwMQorX19WZWN0b3JzX0VuZAorCitfX1ZlY3RvcnMgICAgICAgRVFVICAgICBfX3ZlY3Rvcl90YWJsZQorX19WZWN0b3JzX1NpemUgIEVRVSAgICAgX19WZWN0b3JzX0VuZCAtIF9fVmVjdG9ycworCis7IFJlc2V0IEhhbmRsZXIKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBSZXNldF9IYW5kbGVyCisgICAgICAgICAgICAgICAgU0VDVElPTiAgLnRleHQ6Q09ERTpSRU9SREVSOk5PUk9PVCgyKQorUmVzZXRfSGFuZGxlcgorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1TeXN0ZW1Jbml0CisgICAgICAgICAgICAgICAgQkxYICAgICBSMAorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1fX2lhcl9wcm9ncmFtX3N0YXJ0CisgICAgICAgICAgICAgICAgQlggICAgICBSMAorCis7IER1bW15IEV4Y2VwdGlvbiBIYW5kbGVycyAoaW5maW5pdGUgbG9vcHMgd2hpY2ggY2FuIGJlIG1vZGlmaWVkKQorRGVmYXVsdF9IYW5kbGVyMiBNQUNSTyBoYW5kbGVyX25hbWUKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBoYW5kbGVyX25hbWUKK2hhbmRsZXJfbmFtZQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORE0KKworICAgICAgICAgICAgICAgIERlZmF1bHRfSGFuZGxlcjIgTk1JX0hhbmRsZXIKKyAgICAgICAgICAgICAgICBEZWZhdWx0X0hhbmRsZXIyIEhhcmRGYXVsdF9IYW5kbGVyCisgICAgICAgICAgICAgICAgRGVmYXVsdF9IYW5kbGVyMiBNZW1NYW5hZ2VfSGFuZGxlcgorICAgICAgICAgICAgICAgIERlZmF1bHRfSGFuZGxlcjIgU1ZDX0hhbmRsZXIKKyAgICAgICAgICAgICAgICBEZWZhdWx0X0hhbmRsZXIyIFBlbmRTVl9IYW5kbGVyCisgICAgICAgICAgICAgICAgRGVmYXVsdF9IYW5kbGVyMiBTeXNUaWNrX0hhbmRsZXIKKworICAgICAgICAgIFBVQldFQUsgIEJPRF9JUlFIYW5kbGVyCSAgICAgIDsgMAorICAgICAgICAgIFBVQldFQUsgIElSQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMQorICAgICAgICAgIFBVQldFQUsgIFBXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorICAgICAgICAgIFBVQldFQUsgIFNSQU1fSVJRSGFuZGxlciAgICAgICAgICAgIDsgMworICAgICAgICAgIFBVQldFQUsgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgIDsgNAorICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNQorICAgICAgICAgIFBVQldFQUsgIFJUQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNgorICAgICAgICAgIFBVQldFQUsgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgIDsgNworICAgICAgICAgIFBVQldFQUsgIFdEVF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOAorICAgICAgICAgIFBVQldFQUsgIFdXRFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOQorICAgICAgICAgIFBVQldFQUsgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTAKKyAgICAgICAgICBQVUJXRUFLICBFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDExCisgICAgICAgICAgUFVCV0VBSyAgRUlOVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMgorICAgICAgICAgIFBVQldFQUsgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTMKKyAgICAgICAgICBQVUJXRUFLICBFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDE0CisgICAgICAgICAgUFVCV0VBSyAgRUlOVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNQorICAgICAgICAgIFBVQldFQUsgIEdQQV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTYKKyAgICAgICAgICBQVUJXRUFLICBHUEJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE3CisgICAgICAgICAgUFVCV0VBSyAgR1BDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOAorICAgICAgICAgIFBVQldFQUsgIEdQRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTkKKyAgICAgICAgICBQVUJXRUFLICBHUEVfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIwCisgICAgICAgICAgUFVCV0VBSyAgR1BGX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMQorICAgICAgICAgIFBVQldFQUsgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMjIKKyAgICAgICAgICBQVUJXRUFLICBTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDIzCisgICAgICAgICAgUFVCV0VBSyAgQlJBS0UwX0lSUUhhbmRsZXIgICAgICAgICAgOyAyNAorICAgICAgICAgIFBVQldFQUsgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjUKKyAgICAgICAgICBQVUJXRUFLICBFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgICA7IDI2CisgICAgICAgICAgUFVCV0VBSyAgRVBXTTBfUDJfSVJRSGFuZGxlciAgICAgICAgOyAyNworICAgICAgICAgIFBVQldFQUsgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgIDsgMjgKKyAgICAgICAgICBQVUJXRUFLICBFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI5CisgICAgICAgICAgUFVCV0VBSyAgRVBXTTFfUDFfSVJRSGFuZGxlciAgICAgICAgOyAzMAorICAgICAgICAgIFBVQldFQUsgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMzEKKyAgICAgICAgICBQVUJXRUFLICBUTVIwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMyCisgICAgICAgICAgUFVCV0VBSyAgVE1SMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzMworICAgICAgICAgIFBVQldFQUsgIFRNUjJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzQKKyAgICAgICAgICBQVUJXRUFLICBUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM1CisgICAgICAgICAgUFVCV0VBSyAgVUFSVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNgorICAgICAgICAgIFBVQldFQUsgIFVBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzcKKyAgICAgICAgICBQVUJXRUFLICBJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM4CisgICAgICAgICAgUFVCV0VBSyAgSTJDMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOQorICAgICAgICAgIFBVQldFQUsgIFBETUEwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDAKKyAgICAgICAgICBQVUJXRUFLICBEQUNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDQxCisgICAgICAgICAgUFVCV0VBSyAgRUFEQzBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MgorICAgICAgICAgIFBVQldFQUsgIEVBREMxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDMKKyAgICAgICAgICBQVUJXRUFLICBBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgICA7IDQ0CisgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA0NQorICAgICAgICAgIFBVQldFQUsgIEVBREMyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDYKKyAgICAgICAgICBQVUJXRUFLICBFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CisgICAgICAgICAgUFVCV0VBSyAgVUFSVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OAorICAgICAgICAgIFBVQldFQUsgIFVBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDkKKyAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDUwCisgICAgICAgICAgUFVCV0VBSyAgU1BJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MQorICAgICAgICAgIFBVQldFQUsgIFNQSTJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTIKKyAgICAgICAgICBQVUJXRUFLICBVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCisgICAgICAgICAgUFVCV0VBSyAgVVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NAorICAgICAgICAgIFBVQldFQUsgIFVTQk9UR19JUlFIYW5kbGVyICAgICAgICAgIDsgNTUKKyAgICAgICAgICBQVUJXRUFLICBDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CisgICAgICAgICAgUFVCV0VBSyAgQ0FOMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NworICAgICAgICAgIFBVQldFQUsgIFNDMF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTgKKyAgICAgICAgICBQVUJXRUFLICBTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CisgICAgICAgICAgUFVCV0VBSyAgU0MyX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MAorICAgICAgICAgIFBVQldFQUsgIFNDM19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNjEKKyAgICAgICAgICBQVUJXRUFLICBTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCisgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2MworICAgICAgICAgIFBVQldFQUsgIFNESDBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjQKKyAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY1CisgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NgorICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjcKKyAgICAgICAgICBQVUJXRUFLICBJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY4CisgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2OQorICAgICAgICAgIFBVQldFQUsgIE9QQTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzAKKyAgICAgICAgICBQVUJXRUFLICBDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCisgICAgICAgICAgUFVCV0VBSyAgR1BHX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA3MgorICAgICAgICAgIFBVQldFQUsgIEVJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzMKKyAgICAgICAgICBQVUJXRUFLICBVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CisgICAgICAgICAgUFVCV0VBSyAgVUFSVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NQorICAgICAgICAgIFBVQldFQUsgIFVTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzYKKyAgICAgICAgICBQVUJXRUFLICBVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CisgICAgICAgICAgUFVCV0VBSyAgQlBXTTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OAorICAgICAgICAgIFBVQldFQUsgIEJQV00xX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzkKKyAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgwCisgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MQorICAgICAgICAgIFBVQldFQUsgIEkyQzJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODIKKyAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgzCisgICAgICAgICAgUFVCV0VBSyAgUUVJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NAorICAgICAgICAgIFBVQldFQUsgIFFFSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODUKKyAgICAgICAgICBQVUJXRUFLICBFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CisgICAgICAgICAgUFVCV0VBSyAgRUNBUDFfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NworICAgICAgICAgIFBVQldFQUsgIEdQSF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgODgKKyAgICAgICAgICBQVUJXRUFLICBFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CisgICAgICAgICAgUFVCV0VBSyAgU0RIMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5MAorICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTEKKyAgICAgICAgIDtQVUJXRUFLICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkyCisgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MworICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTQKKyAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk1CisgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NgorICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTcKKyAgICAgICAgICBQVUJXRUFLICBQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4CisgICAgICAgICA7UFVCV0VBSyAgU0NVX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA5OQorICAgICAgICAgIFBVQldFQUsgIExDRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTAwCisgICAgICAgICAgUFVCV0VBSyAgVFJOR19JUlFIYW5kbGVyICAgICAgICAgICAgOyAxMDEKKworCisKKyAgICAgICAgICBQVUJXRUFLCURFRkFVTFRfSVJRSGFuZGxlcgorCis7IENvcmUgSW9UIEludGVycnVwdHMKK0RlZmF1bHRfSGFuZGxlcgorCitOTUlfSGFuZGxlcgorU1ZDX0hhbmRsZXIKK1BlbmRTVl9IYW5kbGVyCitTeXNUaWNrX0hhbmRsZXIKKworQk9EX0lSUUhhbmRsZXIJCSAgICAgICA7IDAKK0lSQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMQorUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICAgOyAyCitTUkFNX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMKK0NMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgIDsgNAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNQorUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2CitUQU1QRVJfSVJRSGFuZGxlciAgICAgICAgICA7IDcKK1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOAorV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5CitFSU5UMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDEwCitFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDExCitFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDEyCitFSU5UM19JUlFIYW5kbGVyICAgICAgICAgICA7IDEzCitFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDE0CitFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDE1CitHUEFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE2CitHUEJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE3CitHUENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE4CitHUERfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE5CitHUEVfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIwCitHUEZfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIxCitRU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDIyCitTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDIzCitCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgICA7IDI0CitFUFdNMF9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI1CitFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgICA7IDI2CitFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgICA7IDI3CitCUkFLRTFfSVJRSGFuZGxlciAgICAgICAgICA7IDI4CitFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI5CitFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgICA7IDMwCitFUFdNMV9QMl9JUlFIYW5kbGVyICAgICAgICA7IDMxCitUTVIwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMyCitUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMzCitUTVIyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM0CitUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM1CitVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDM2CitVQVJUMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDM3CitJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM4CitJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM5CitQRE1BMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQwCitEQUNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDQxCitFQURDMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQyCitFQURDMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDQzCitBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgICA7IDQ0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA0NQorRUFEQzJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NgorRUFEQzNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NworVUFSVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OAorVUFSVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNTAKK1NQSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTEKK1NQSTJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTIKK1VTQkRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTMKK1VTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTQKK1VTQk9UR19JUlFIYW5kbGVyICAgICAgICAgIDsgNTUKK0NBTjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTYKK0NBTjFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTcKK1NDMF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTgKK1NDMV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTkKK1NDMl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNjAKK1NDM19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNjEKK1NQSTNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjIKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDYzCitTREgwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjYKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY3CitJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY4Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2OQorT1BBMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MAorQ1JQVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MQorR1BHX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA3MgorRUlOVDZfSVJRSGFuZGxlciAgICAgICAgICAgOyA3MworVUFSVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NAorVUFSVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NQorVVNDSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NgorVVNDSTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NworQlBXTTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OAorQlBXTTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODAKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgxCitJMkMyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDgyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MworUUVJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NAorUUVJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NQorRUNBUDBfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NgorRUNBUDFfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NworR1BIX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4OAorRUlOVDdfSVJRSGFuZGxlciAgICAgICAgICAgOyA4OQorU0RIMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5MAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTEKKztVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MworOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTQKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk1Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTcKK1BETUExX0lSUUhhbmRsZXIgICAgICAgICAgIDsgOTgKKztTQ1VfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDk5CitMQ0RfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDEwMAorVFJOR19JUlFIYW5kbGVyICAgICAgICAgICAgOyAxMDEKK0RFRkFVTFRfSVJRSGFuZGxlcgorICAgICAgICAgICAgICAgIEIgICAgICAgLgorCisgICAgICAgICAgICAgICAgRU5ECmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9pYXIvc3RhcnR1cF9jbXNka19tMjM1MV9ucy5zIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvaWFyL3N0YXJ0dXBfY21zZGtfbTIzNTFfbnMucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODkyNTg0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvaWFyL3N0YXJ0dXBfY21zZGtfbTIzNTFfbnMucwpAQCAtMCwwICsxLDQwOCBAQAorOy8qCis7ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgQVJNIExpbWl0ZWQKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCis7ICoKKzsgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKzsgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCis7ICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cis7ICoKKzsgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCis7ICoKKzsgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCis7ICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKzsgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKzsgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCis7ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCis7ICovCisKKzsvKgorOy8vLS0tLS0tLS0gPDw8IFVzZSBDb25maWd1cmF0aW9uIFdpemFyZCBpbiBDb250ZXh0IE1lbnUgPj4+IC0tLS0tLS0tLS0tLS0tLS0tLQorOyovCisKKworOyA8aD4gU3RhY2sgQ29uZmlndXJhdGlvbgorOyAgIDxvPiBTdGFjayBTaXplIChpbiBCeXRlcykgPDB4MC0weEZGRkZGRkZGOjg+Cis7IDwvaD4KKworICAgICAgICAgICAgICAgIE1PRFVMRSAgID9jc3RhcnR1cAorCisgICAgICAgICAgICAgICAgOzsgRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBzZWN0aW9ucy4KKyAgICAgICAgICAgICAgICBTRUNUSU9OICBBUk1fTElCX1NUQUNLX01TUDpEQVRBOk5PUk9PVCgzKQorICAgICAgICAgICAgICAgIFNFQ1RJT04gIEFSTV9MSUJfU1RBQ0s6REFUQTpOT1JPT1QoMykKKworICAgICAgICAgICAgICAgIFNFQ1RJT04gIC5pbnR2ZWM6Q09ERTpOT1JPT1QoMikKKworICAgICAgICAgICAgICAgIEVYVEVSTiAgIF9faWFyX3Byb2dyYW1fc3RhcnQKKyAgICAgICAgICAgICAgICBFWFRFUk4gICBTeXN0ZW1Jbml0CisgICAgICAgICAgICAgICAgRVhURVJOICAgU0NVX0lSUUhhbmRsZXIKKyAgICAgICAgICAgICAgICBQVUJMSUMgICBfX3ZlY3Rvcl90YWJsZQorICAgICAgICAgICAgICAgIFBVQkxJQyAgIF9fVmVjdG9ycworICAgICAgICAgICAgICAgIFBVQkxJQyAgIF9fVmVjdG9yc19FbmQKKyAgICAgICAgICAgICAgICBQVUJMSUMgICBfX1ZlY3RvcnNfU2l6ZQorCisgICAgICAgICAgICAgICAgREFUQQorCitfX3ZlY3Rvcl90YWJsZSAgRENEICAgICBzZmUoQVJNX0xJQl9TVEFDS19NU1ApICAgIDsgVG9wIG9mIFN0YWNrCisgICAgICAgICAgICAgICAgRENEICAgICBSZXNldF9IYW5kbGVyICAgICAgICAgICAgIDsgUmVzZXQgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgTk1JX0hhbmRsZXIgICAgICAgICAgICAgICA7IE5NSSBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBIYXJkRmF1bHRfSGFuZGxlciAgICAgICAgIDsgSGFyZCBGYXVsdCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNWQ19IYW5kbGVyICAgICAgICAgICAgICAgOyBTVkNhbGwgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBlbmRTVl9IYW5kbGVyICAgICAgICAgICAgOyBQZW5kU1YgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgU3lzVGlja19IYW5kbGVyICAgICAgICAgICA7IFN5c1RpY2sgSGFuZGxlcgorCisgICAgICAgICAgICAgICAgOyBJbnRlcnJ1cHRzCisgICAgICAgICAgICAgICAgRENEICAgICBCT0RfSVJRSGFuZGxlcgkJICAgICAgIDsgMAorICAgICAgICAgICAgICAgIERDRCAgICAgSVJDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxCisgICAgICAgICAgICAgICAgRENEICAgICBQV1JXVV9JUlFIYW5kbGVyICAgICAgICAgICA7IDIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNSQU1fSVJRSGFuZGxlciAgICAgICAgICAgIDsgMworICAgICAgICAgICAgICAgIERDRCAgICAgQ0xLRkFJTF9JUlFIYW5kbGVyICAgICAgICAgOyA0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFJUQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNgorICAgICAgICAgICAgICAgIERDRCAgICAgVEFNUEVSX0lSUUhhbmRsZXIgICAgICAgICAgOyA3CisgICAgICAgICAgICAgICAgRENEICAgICBXRFRfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFdXRFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOQorICAgICAgICAgICAgICAgIERDRCAgICAgRUlOVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMAorICAgICAgICAgICAgICAgIERDRCAgICAgRUlOVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMQorICAgICAgICAgICAgICAgIERDRCAgICAgRUlOVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMgorICAgICAgICAgICAgICAgIERDRCAgICAgRUlOVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMworICAgICAgICAgICAgICAgIERDRCAgICAgRUlOVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNAorICAgICAgICAgICAgICAgIERDRCAgICAgRUlOVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNQorICAgICAgICAgICAgICAgIERDRCAgICAgR1BBX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNgorICAgICAgICAgICAgICAgIERDRCAgICAgR1BCX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNworICAgICAgICAgICAgICAgIERDRCAgICAgR1BDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOAorICAgICAgICAgICAgICAgIERDRCAgICAgR1BEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOQorICAgICAgICAgICAgICAgIERDRCAgICAgR1BFX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMAorICAgICAgICAgICAgICAgIERDRCAgICAgR1BGX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMQorICAgICAgICAgICAgICAgIERDRCAgICAgUVNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyAyMgorICAgICAgICAgICAgICAgIERDRCAgICAgU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAyMworICAgICAgICAgICAgICAgIERDRCAgICAgQlJBS0UwX0lSUUhhbmRsZXIgICAgICAgICAgOyAyNAorICAgICAgICAgICAgICAgIERDRCAgICAgRVBXTTBfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyNQorICAgICAgICAgICAgICAgIERDRCAgICAgRVBXTTBfUDFfSVJRSGFuZGxlciAgICAgICAgOyAyNgorICAgICAgICAgICAgICAgIERDRCAgICAgRVBXTTBfUDJfSVJRSGFuZGxlciAgICAgICAgOyAyNworICAgICAgICAgICAgICAgIERDRCAgICAgQlJBS0UxX0lSUUhhbmRsZXIgICAgICAgICAgOyAyOAorICAgICAgICAgICAgICAgIERDRCAgICAgRVBXTTFfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyOQorICAgICAgICAgICAgICAgIERDRCAgICAgRVBXTTFfUDFfSVJRSGFuZGxlciAgICAgICAgOyAzMAorICAgICAgICAgICAgICAgIERDRCAgICAgRVBXTTFfUDJfSVJRSGFuZGxlciAgICAgICAgOyAzMQorICAgICAgICAgICAgICAgIERDRCAgICAgVEZNX1RJTUVSMF9JUlFfSGFuZGxlciAgICAgOyAzMgorICAgICAgICAgICAgICAgIERDRCAgICAgVE1SMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzMworICAgICAgICAgICAgICAgIERDRCAgICAgVE1SMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNAorICAgICAgICAgICAgICAgIERDRCAgICAgVE1SM19JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNQorICAgICAgICAgICAgICAgIERDRCAgICAgVUFSVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNgorICAgICAgICAgICAgICAgIERDRCAgICAgVUFSVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNworICAgICAgICAgICAgICAgIERDRCAgICAgSTJDMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOAorICAgICAgICAgICAgICAgIERDRCAgICAgSTJDMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOQorICAgICAgICAgICAgICAgIERDRCAgICAgUERNQTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MAorICAgICAgICAgICAgICAgIERDRCAgICAgREFDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA0MQorICAgICAgICAgICAgICAgIERDRCAgICAgRUFEQzBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MgorICAgICAgICAgICAgICAgIERDRCAgICAgRUFEQzFfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MworICAgICAgICAgICAgICAgIERDRCAgICAgQUNNUDAxX0lSUUhhbmRsZXIgICAgICAgICAgOyA0NAorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA0NQorICAgICAgICAgICAgICAgIERDRCAgICAgRUFEQzJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NgorICAgICAgICAgICAgICAgIERDRCAgICAgRUFEQzNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NworICAgICAgICAgICAgICAgIERDRCAgICAgVUFSVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OAorICAgICAgICAgICAgICAgIERDRCAgICAgVUFSVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OQorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA1MAorICAgICAgICAgICAgICAgIERDRCAgICAgU1BJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MQorICAgICAgICAgICAgICAgIERDRCAgICAgU1BJMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MgorICAgICAgICAgICAgICAgIERDRCAgICAgVVNCRF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MworICAgICAgICAgICAgICAgIERDRCAgICAgVVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NAorICAgICAgICAgICAgICAgIERDRCAgICAgVVNCT1RHX0lSUUhhbmRsZXIgICAgICAgICAgOyA1NQorICAgICAgICAgICAgICAgIERDRCAgICAgQ0FOMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NgorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA1NworICAgICAgICAgICAgICAgIERDRCAgICAgU0MwX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OAorICAgICAgICAgICAgICAgIERDRCAgICAgU0MxX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OQorICAgICAgICAgICAgICAgIERDRCAgICAgU0MyX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MAorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA2MQorICAgICAgICAgICAgICAgIERDRCAgICAgU1BJM19JUlFIYW5kbGVyICAgICAgICAgICAgOyA2MgorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA2MworICAgICAgICAgICAgICAgIERDRCAgICAgU0RIMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2NAorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA2NQorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA2NgorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA2NworICAgICAgICAgICAgICAgIERDRCAgICAgSTJTMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2OAorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA2OQorICAgICAgICAgICAgICAgIERDRCAgICAgT1BBMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MAorICAgICAgICAgICAgICAgIERDRCAgICAgQ1JQVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MQorICAgICAgICAgICAgICAgIERDRCAgICAgR1BHX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA3MgorICAgICAgICAgICAgICAgIERDRCAgICAgRUlOVDZfSVJRSGFuZGxlciAgICAgICAgICAgOyA3MworICAgICAgICAgICAgICAgIERDRCAgICAgVUFSVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NAorICAgICAgICAgICAgICAgIERDRCAgICAgVUFSVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NQorICAgICAgICAgICAgICAgIERDRCAgICAgVVNDSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NgorICAgICAgICAgICAgICAgIERDRCAgICAgVVNDSTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NworICAgICAgICAgICAgICAgIERDRCAgICAgQlBXTTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OAorICAgICAgICAgICAgICAgIERDRCAgICAgQlBXTTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OQorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA4MAorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA4MQorICAgICAgICAgICAgICAgIERDRCAgICAgSTJDMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4MgorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA4MworICAgICAgICAgICAgICAgIERDRCAgICAgUUVJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NAorICAgICAgICAgICAgICAgIERDRCAgICAgUUVJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NQorICAgICAgICAgICAgICAgIERDRCAgICAgRUNBUDBfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NgorICAgICAgICAgICAgICAgIERDRCAgICAgRUNBUDFfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NworICAgICAgICAgICAgICAgIERDRCAgICAgR1BIX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4OAorICAgICAgICAgICAgICAgIERDRCAgICAgRUlOVDdfSVJRSGFuZGxlciAgICAgICAgICAgOyA4OQorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5MAorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5MQorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5MgorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5MworICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5NAorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5NQorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5NgorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5NworICAgICAgICAgICAgICAgIERDRCAgICAgUERNQTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA5OAorICAgICAgICAgICAgICAgIERDRCAgICAgU0NVX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA5OQorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyAxMDAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRSTkdfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMTAxCitfX1ZlY3RvcnNfRW5kCisKK19fVmVjdG9ycyAgICAgICBFUVUgICAgIF9fdmVjdG9yX3RhYmxlCitfX1ZlY3RvcnNfU2l6ZSAgRVFVICAgICBfX1ZlY3RvcnNfRW5kIC0gX19WZWN0b3JzCisKKzsgUmVzZXQgSGFuZGxlcgorCitSZXNldF9IYW5kbGVyCisgICAgICAgICAgICAgICAgTVJTICAgICBSMCwgY29udHJvbCAgICA7IEdldCBjb250cm9sIHZhbHVlCisgICAgICAgICAgICAgICAgTU9WUyAgICBSMSwgIzEKKyAgICAgICAgICAgICAgICBPUlJTICAgIFIwLCBSMCwgUjEgICAgIDsgU2VsZWN0IHN3aXRjaCB0byB1bnByaXZpbGVnZWQgbW9kZQorICAgICAgICAgICAgICAgIE1PVlMgICAgUjEsICMyCisgICAgICAgICAgICAgICAgT1JSUyAgICBSMCwgUjAsIFIxICAgICA7IFNlbGVjdCBzd2l0Y2ggdG8gUFNQCisgICAgICAgICAgICAgICAgTVNSICAgICBjb250cm9sLCBSMAorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1zZmUoQVJNX0xJQl9TVEFDSykgOyBFbmQgb2YgQVJNX0xJQl9TVEFDSworICAgICAgICAgICAgICAgIE1PViAgICAgU1AsIFIwICAgICAgICAgOyBJbml0aWFsaXNlIFBTUAorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1fX2lhcl9wcm9ncmFtX3N0YXJ0CisgICAgICAgICAgICAgICAgQlggICAgICBSMAorCis7IER1bW15IEV4Y2VwdGlvbiBIYW5kbGVycyAoaW5maW5pdGUgbG9vcHMgd2hpY2ggY2FuIGJlIG1vZGlmaWVkKQorCitEZWZhdWx0X0hhbmRsZXIyIE1BQ1JPIGhhbmRsZXJfbmFtZQorICAgICAgICAgICAgICAgIFBVQldFQUsgIGhhbmRsZXJfbmFtZQoraGFuZGxlcl9uYW1lCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5ETQorCisgICAgICAgICAgICAgICAgRGVmYXVsdF9IYW5kbGVyMiBOTUlfSGFuZGxlcgorICAgICAgICAgICAgICAgIERlZmF1bHRfSGFuZGxlcjIgSGFyZEZhdWx0X0hhbmRsZXIKKyAgICAgICAgICAgICAgICBEZWZhdWx0X0hhbmRsZXIyIFNWQ19IYW5kbGVyCisgICAgICAgICAgICAgICAgRGVmYXVsdF9IYW5kbGVyMiBQZW5kU1ZfSGFuZGxlcgorICAgICAgICAgICAgICAgIERlZmF1bHRfSGFuZGxlcjIgU3lzVGlja19IYW5kbGVyCisKKzsgSW50ZXJydXB0cworICAgICAgICAgICAgICAgIFBVQldFQUsgIEJPRF9JUlFIYW5kbGVyCSAgICAgICAgICAgIDsgMAorICAgICAgICAgICAgICAgIFBVQldFQUsgIElSQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFBXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFNSQU1fSVJRSGFuZGxlciAgICAgICAgICAgIDsgMworICAgICAgICAgICAgICAgIFBVQldFQUsgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgIDsgNAorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFJUQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgIDsgNworICAgICAgICAgICAgICAgIFBVQldFQUsgIFdEVF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFdXRFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTAKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDExCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUlOVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMgorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTMKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDE0CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUlOVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEdQQV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTYKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBHUEJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgR1BDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEdQRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTkKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBHUEVfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIwCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgR1BGX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMjIKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDIzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQlJBS0UwX0lSUUhhbmRsZXIgICAgICAgICAgOyAyNAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjUKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgICA7IDI2CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRVBXTTBfUDJfSVJRSGFuZGxlciAgICAgICAgOyAyNworICAgICAgICAgICAgICAgIFBVQldFQUsgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgIDsgMjgKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRVBXTTFfUDFfSVJRSGFuZGxlciAgICAgICAgOyAzMAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMzEKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBUTVIwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMyCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVE1SMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzMworICAgICAgICAgICAgICAgIFBVQldFQUsgIFRNUjJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzQKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM1CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVUFSVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFVBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzcKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM4CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgSTJDMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFBETUEwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDAKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBEQUNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDQxCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUFEQzBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MgorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVBREMxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDMKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgICA7IDQ0CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA0NQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVBREMyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDYKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVUFSVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFVBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDkKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDUwCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU1BJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFNQSTJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTIKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFVTQk9UR19JUlFIYW5kbGVyICAgICAgICAgIDsgNTUKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQ0FOMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NworICAgICAgICAgICAgICAgIFBVQldFQUsgIFNDMF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTgKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU0MyX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFNDM19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNjEKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2MworICAgICAgICAgICAgICAgIFBVQldFQUsgIFNESDBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjQKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY1CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NgorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjcKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY4CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2OQorICAgICAgICAgICAgICAgIFBVQldFQUsgIE9QQTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzAKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgR1BHX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA3MgorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzMKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVUFSVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFVTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzYKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQlBXTTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEJQV00xX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzkKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgwCisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEkyQzJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODIKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgUUVJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFFFSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODUKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUNBUDFfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NworICAgICAgICAgICAgICAgIFBVQldFQUsgIEdQSF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgODgKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU0RIMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5MAorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTEKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkyCisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MworICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTQKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk1CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NgorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTcKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgU0NVX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA5OQorICAgICAgICAgICAgICAgIFBVQldFQUsgIExDRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTAwCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVFJOR19JUlFIYW5kbGVyICAgICAgICAgICAgOyAxMDEKKworOyBJbnRlcnJ1cHRzCitCT0RfSVJRSGFuZGxlcgkJICAgICAgIDsgMAorSVJDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxCitQV1JXVV9JUlFIYW5kbGVyICAgICAgICAgICA7IDIKK1NSQU1fSVJRSGFuZGxlciAgICAgICAgICAgIDsgMworQ0xLRkFJTF9JUlFIYW5kbGVyICAgICAgICAgOyA0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDUKK1JUQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNgorVEFNUEVSX0lSUUhhbmRsZXIgICAgICAgICAgOyA3CitXRFRfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDgKK1dXRFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOQorRUlOVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMAorRUlOVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMQorRUlOVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMgorRUlOVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMworRUlOVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNAorRUlOVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNQorR1BBX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNgorR1BCX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNworR1BDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOAorR1BEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOQorR1BFX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMAorR1BGX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMQorUVNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyAyMgorU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAyMworQlJBS0UwX0lSUUhhbmRsZXIgICAgICAgICAgOyAyNAorRVBXTTBfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyNQorRVBXTTBfUDFfSVJRSGFuZGxlciAgICAgICAgOyAyNgorRVBXTTBfUDJfSVJRSGFuZGxlciAgICAgICAgOyAyNworQlJBS0UxX0lSUUhhbmRsZXIgICAgICAgICAgOyAyOAorRVBXTTFfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyOQorRVBXTTFfUDFfSVJRSGFuZGxlciAgICAgICAgOyAzMAorRVBXTTFfUDJfSVJRSGFuZGxlciAgICAgICAgOyAzMQorVEZNX1RJTUVSMF9JUlFfSGFuZGxlciAgICAgOyAzMgorVE1SMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzMworVE1SMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNAorVE1SM19JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNQorVUFSVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNgorVUFSVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNworSTJDMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOAorSTJDMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOQorUERNQTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MAorREFDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA0MQorRUFEQzBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MgorRUFEQzFfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MworQUNNUDAxX0lSUUhhbmRsZXIgICAgICAgICAgOyA0NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA0NQorRUFEQzJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NgorRUFEQzNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NworVUFSVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OAorVUFSVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA1MAorU1BJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MQorU1BJMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MgorVVNCRF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MworVVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NAorVVNCT1RHX0lSUUhhbmRsZXIgICAgICAgICAgOyA1NQorQ0FOMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NgorQ0FOMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NworU0MwX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OAorU0MxX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OQorU0MyX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MAorU0MzX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MQorU1BJM19JUlFIYW5kbGVyICAgICAgICAgICAgOyA2MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2MworU0RIMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NworSTJTMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2OAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2OQorT1BBMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MAorQ1JQVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MQorR1BHX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA3MgorRUlOVDZfSVJRSGFuZGxlciAgICAgICAgICAgOyA3MworVUFSVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NAorVUFSVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NQorVVNDSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NgorVVNDSTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NworQlBXTTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OAorQlBXTTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MQorSTJDMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MworUUVJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NAorUUVJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NQorRUNBUDBfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NgorRUNBUDFfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NworR1BIX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4OAorRUlOVDdfSVJRSGFuZGxlciAgICAgICAgICAgOyA4OQorU0RIMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5MAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MQorO1VTQkhfSVJRSGFuZGxlciAgICAgICAgICAgOyA5MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MworOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NworUERNQTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA5OAorO1NDVV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5OQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyAxMDAKK1RSTkdfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMTAxCitERUZBVUxUX0lSUUhhbmRsZXIKKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKworICAgICAgICAgICAgICAgIEVORApkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvaWFyL3N0YXJ0dXBfY21zZGtfbTIzNTFfcy5zIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvaWFyL3N0YXJ0dXBfY21zZGtfbTIzNTFfcy5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NzYxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9pYXIvc3RhcnR1cF9jbXNka19tMjM1MV9zLnMKQEAgLTAsMCArMSw0MTYgQEAKKzsvKgorOyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIEFSTSBMaW1pdGVkCis7ICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorOyAqCis7ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cis7ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorOyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorOyAqCis7ICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorOyAqCis7ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorOyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCis7ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCis7ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorOyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorOyAqLworOworOyBUaGlzIGZpbGUgaXMgZGVyaXZhdGl2ZSBvZiAuLi9hcm1jbGFuZy9zdGFydHVwX2Ntc2RrX21wczJfYW41MjFfcy5zCisKKzsvKgorOy8vLS0tLS0tLS0gPDw8IFVzZSBDb25maWd1cmF0aW9uIFdpemFyZCBpbiBDb250ZXh0IE1lbnUgPj4+IC0tLS0tLS0tLS0tLS0tLS0tLQorOyovCisKKworOyA8aD4gU3RhY2sgQ29uZmlndXJhdGlvbgorOyAgIDxvPiBTdGFjayBTaXplIChpbiBCeXRlcykgPDB4MC0weEZGRkZGRkZGOjg+Cis7IDwvaD4KKworICAgICAgICAgICAgICAgIE1PRFVMRSAgID9jc3RhcnR1cAorCisgICAgICAgICAgICAgICAgOzsgRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBzZWN0aW9ucy4KKyAgICAgICAgICAgICAgICBTRUNUSU9OICBBUk1fTElCX1NUQUNLX01TUDpEQVRBOk5PUk9PVCgzKQorICAgICAgICAgICAgICAgIFNFQ1RJT04gIEFSTV9MSUJfU1RBQ0s6REFUQTpOT1JPT1QoMykKKworICAgICAgICAgICAgICAgIFNFQ1RJT04gIC5pbnR2ZWM6Q09ERTpOT1JPT1QoMikKKworICAgICAgICAgICAgICAgIEVYVEVSTiAgIF9faWFyX3Byb2dyYW1fc3RhcnQKKyAgICAgICAgICAgICAgICBFWFRFUk4gICBTeXN0ZW1Jbml0CisgICAgICAgICAgICAgICAgRVhURVJOICAgU0NVX0lSUUhhbmRsZXIKKyAgICAgICAgICAgICAgICBQVUJMSUMgICBfX3ZlY3Rvcl90YWJsZQorICAgICAgICAgICAgICAgIFBVQkxJQyAgIF9fVmVjdG9ycworICAgICAgICAgICAgICAgIFBVQkxJQyAgIF9fVmVjdG9yc19FbmQKKyAgICAgICAgICAgICAgICBQVUJMSUMgICBfX1ZlY3RvcnNfU2l6ZQorCisgICAgICAgICAgICAgICAgREFUQQorCitfX3ZlY3Rvcl90YWJsZSAgICAgIDtDb3JlIEludGVycnVwdHMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIHNmZShBUk1fTElCX1NUQUNLX01TUCkgICAgOyBUb3Agb2YgU3RhY2sKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFJlc2V0X0hhbmRsZXIgICAgICAgICAgICAgOyBSZXNldCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBOTUlfSGFuZGxlciAgICAgICAgICAgICAgIDsgTk1JIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEhhcmRGYXVsdF9IYW5kbGVyICAgICAgICAgOyBIYXJkIEZhdWx0IEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgU1ZDX0hhbmRsZXIgICAgICAgICAgICAgICA7IFNWQ2FsbCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgUGVuZFNWX0hhbmRsZXIgICAgICAgICAgICA7IFBlbmRTViBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBTeXNUaWNrX0hhbmRsZXIgICAgICAgICAgIDsgU3lzVGljayBIYW5kbGVyCisKKyAgICAgICAgICAgICAgICA7IEludGVycnVwdHMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJPRF9JUlFIYW5kbGVyCQkgICAgICAgOyAwCisgICAgICAgICAgICAgICAgRENEICAgICBJUkNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorICAgICAgICAgICAgICAgIERDRCAgICAgU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCisgICAgICAgICAgICAgICAgRENEICAgICBDTEtGQUlMX0lSUUhhbmRsZXIgICAgICAgICA7IDQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNQorICAgICAgICAgICAgICAgIERDRCAgICAgUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2CisgICAgICAgICAgICAgICAgRENEICAgICBUQU1QRVJfSVJRSGFuZGxlciAgICAgICAgICA7IDcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFdEVF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOAorICAgICAgICAgICAgICAgIERDRCAgICAgV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDEwCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDExCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDEyCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UM19JUlFIYW5kbGVyICAgICAgICAgICA7IDEzCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDE0CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDE1CisgICAgICAgICAgICAgICAgRENEICAgICBHUEFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE2CisgICAgICAgICAgICAgICAgRENEICAgICBHUEJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE3CisgICAgICAgICAgICAgICAgRENEICAgICBHUENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE4CisgICAgICAgICAgICAgICAgRENEICAgICBHUERfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE5CisgICAgICAgICAgICAgICAgRENEICAgICBHUEVfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIwCisgICAgICAgICAgICAgICAgRENEICAgICBHUEZfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIxCisgICAgICAgICAgICAgICAgRENEICAgICBRU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDIyCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDIzCisgICAgICAgICAgICAgICAgRENEICAgICBCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgICA7IDI0CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI1CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgICA7IDI2CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgICA7IDI3CisgICAgICAgICAgICAgICAgRENEICAgICBCUkFLRTFfSVJRSGFuZGxlciAgICAgICAgICA7IDI4CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI5CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgICA7IDMwCisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMl9JUlFIYW5kbGVyICAgICAgICA7IDMxCisgICAgICAgICAgICAgICAgRENEICAgICBURk1fVElNRVIwX0lSUV9IYW5kbGVyICAgICA7IDMyCisgICAgICAgICAgICAgICAgRENEICAgICBUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMzCisgICAgICAgICAgICAgICAgRENEICAgICBUSU1FUjFfSGFuZGxlciAgICAgICAgICAgICA7IDM0CisgICAgICAgICAgICAgICAgRENEICAgICBUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM1CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDM2CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDM3CisgICAgICAgICAgICAgICAgRENEICAgICBJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM4CisgICAgICAgICAgICAgICAgRENEICAgICBJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM5CisgICAgICAgICAgICAgICAgRENEICAgICBQRE1BMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQwCisgICAgICAgICAgICAgICAgRENEICAgICBEQUNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDQxCisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQyCisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDQzCisgICAgICAgICAgICAgICAgRENEICAgICBBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgICA7IDQ0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDQ1CisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ2CisgICAgICAgICAgICAgICAgRENEICAgICBFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDUwCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUyCisgICAgICAgICAgICAgICAgRENEICAgICBVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCisgICAgICAgICAgICAgICAgRENEICAgICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CisgICAgICAgICAgICAgICAgRENEICAgICBVU0JPVEdfSVJRSGFuZGxlciAgICAgICAgICA7IDU1CisgICAgICAgICAgICAgICAgRENEICAgICBDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDU3CisgICAgICAgICAgICAgICAgRENEICAgICBTQzBfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU4CisgICAgICAgICAgICAgICAgRENEICAgICBTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CisgICAgICAgICAgICAgICAgRENEICAgICBTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDYxCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDYzCisgICAgICAgICAgICAgICAgRENEICAgICBTREgwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY1CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY3CisgICAgICAgICAgICAgICAgRENEICAgICBJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY4CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY5CisgICAgICAgICAgICAgICAgRENEICAgICBPUEEwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcwCisgICAgICAgICAgICAgICAgRENEICAgICBDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCisgICAgICAgICAgICAgICAgRENEICAgICBHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNl9JUlFIYW5kbGVyICAgICAgICAgICA7IDczCisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CisgICAgICAgICAgICAgICAgRENEICAgICBVU0NJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc2CisgICAgICAgICAgICAgICAgRENEICAgICBVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CisgICAgICAgICAgICAgICAgRENEICAgICBCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CisgICAgICAgICAgICAgICAgRENEICAgICBCUFdNMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgxCisgICAgICAgICAgICAgICAgRENEICAgICBJMkMyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDgyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgzCisgICAgICAgICAgICAgICAgRENEICAgICBRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CisgICAgICAgICAgICAgICAgRENEICAgICBRRUkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg1CisgICAgICAgICAgICAgICAgRENEICAgICBFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CisgICAgICAgICAgICAgICAgRENEICAgICBFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CisgICAgICAgICAgICAgICAgRENEICAgICBHUEhfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDg4CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkxCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkzCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk1CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk3CisgICAgICAgICAgICAgICAgRENEICAgICBQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4CisgICAgICAgICAgICAgICAgRENEICAgICBTQ1VfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDk5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDEwMAorICAgICAgICAgICAgICAgIERDRCAgICAgVFJOR19JUlFIYW5kbGVyICAgICAgICAgICAgOyAxMDEKK19fVmVjdG9yc19FbmQKKworX19WZWN0b3JzICAgICAgIEVRVSAgICAgX192ZWN0b3JfdGFibGUKK19fVmVjdG9yc19TaXplICBFUVUgICAgIF9fVmVjdG9yc19FbmQgLSBfX1ZlY3RvcnMKKworOyBSZXNldCBIYW5kbGVyCisKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBSZXNldF9IYW5kbGVyCisgICAgICAgICAgICAgICAgU0VDVElPTiAgLnRleHQ6Q09ERTpSRU9SREVSOk5PUk9PVCgyKQorUmVzZXRfSGFuZGxlcgorICAgICAgICAgICAgICAgIENQU0lEICAgaSAgICAgICAgICAgICAgOyBEaXNhYmxlIElSUXMKKyAgICAgICAgICAgICAgICBMRFIgICAgIFIwLCA9U3lzdGVtSW5pdAorICAgICAgICAgICAgICAgIEJMWCAgICAgUjAKKyAgICAgICAgICAgICAgICBNUlMgICAgIFIwLCBjb250cm9sICAgIDsgR2V0IGNvbnRyb2wgdmFsdWUKKyAgICAgICAgICAgICAgICBNT1ZTICAgIFIxLCAjMgorICAgICAgICAgICAgICAgIE9SUlMgICAgUjAsIFIwLCBSMSAgICAgOyBTZWxlY3Qgc3dpdGNoIHRvIFBTUAorICAgICAgICAgICAgICAgIE1TUiAgICAgY29udHJvbCwgUjAKKyAgICAgICAgICAgICAgICBMRFIgICAgIFIwLCA9c2ZlKEFSTV9MSUJfU1RBQ0spICAgICAgOyBFbmQgb2YgUFJPQ19TVEFDSworICAgICAgICAgICAgICAgIE1PVlMgICAgUjEsICM3CisgICAgICAgICAgICAgICAgQklDUyAgICBSMCwgUjEgICAgICAgICA7IE1ha2Ugc3VyZSB0aGF0IHRoZSBTUCBhZGRyZXNzIGlzIGFsaWduZWQgdG8gOAorICAgICAgICAgICAgICAgIE1PViAgICAgU1AsIFIwICAgICAgICAgOyBJbml0aWFsaXNlIFBTUAorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1fX2lhcl9wcm9ncmFtX3N0YXJ0CisgICAgICAgICAgICAgICAgQlggICAgICBSMAorCis7IER1bW15IEV4Y2VwdGlvbiBIYW5kbGVycyAoaW5maW5pdGUgbG9vcHMgd2hpY2ggY2FuIGJlIG1vZGlmaWVkKQorRGVmYXVsdF9IYW5kbGVyMiBNQUNSTyBoYW5kbGVyX25hbWUKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBoYW5kbGVyX25hbWUKK2hhbmRsZXJfbmFtZQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORE0KKworICAgICAgICAgICAgICAgIERlZmF1bHRfSGFuZGxlcjIgTk1JX0hhbmRsZXIKKyAgICAgICAgICAgICAgICBEZWZhdWx0X0hhbmRsZXIyIEhhcmRGYXVsdF9IYW5kbGVyCisgICAgICAgICAgICAgICAgRGVmYXVsdF9IYW5kbGVyMiBTVkNfSGFuZGxlcgorICAgICAgICAgICAgICAgIERlZmF1bHRfSGFuZGxlcjIgUGVuZFNWX0hhbmRsZXIKKyAgICAgICAgICAgICAgICBEZWZhdWx0X0hhbmRsZXIyIFN5c1RpY2tfSGFuZGxlcgorCitEZWZhdWx0X0hhbmRsZXIKKzsgSW50ZXJydXB0cworICAgICAgICAgICAgICAgIFBVQldFQUsgIEJPRF9JUlFIYW5kbGVyCSAgICAgICAgICAgIDsgMAorICAgICAgICAgICAgICAgIFBVQldFQUsgIElSQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFBXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFNSQU1fSVJRSGFuZGxlciAgICAgICAgICAgIDsgMworICAgICAgICAgICAgICAgIFBVQldFQUsgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgIDsgNAorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFJUQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgIDsgNworICAgICAgICAgICAgICAgIFBVQldFQUsgIFdEVF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFdXRFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTAKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDExCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUlOVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMgorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTMKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDE0CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUlOVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEdQQV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTYKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBHUEJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgR1BDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEdQRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTkKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBHUEVfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIwCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgR1BGX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMjIKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDIzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQlJBS0UwX0lSUUhhbmRsZXIgICAgICAgICAgOyAyNAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjUKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgICA7IDI2CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRVBXTTBfUDJfSVJRSGFuZGxlciAgICAgICAgOyAyNworICAgICAgICAgICAgICAgIFBVQldFQUsgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgIDsgMjgKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRVBXTTFfUDFfSVJRSGFuZGxlciAgICAgICAgOyAzMAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMzEKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBURk1fVElNRVIwX0lSUV9IYW5kbGVyICAgICA7IDMyCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVE1SMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzMworICAgICAgICAgICAgICAgIFBVQldFQUsgIFRJTUVSMV9IYW5kbGVyICAgICAgICAgICAgIDsgMzQKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM1CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVUFSVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFVBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzcKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM4CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgSTJDMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFBETUEwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDAKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBEQUNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDQxCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUFEQzBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MgorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVBREMxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDMKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgICA7IDQ0CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA0NQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVBREMyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDYKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVUFSVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFVBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDkKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDUwCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU1BJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFNQSTJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTIKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFVTQk9UR19JUlFIYW5kbGVyICAgICAgICAgIDsgNTUKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQ0FOMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NworICAgICAgICAgICAgICAgIFBVQldFQUsgIFNDMF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTgKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU0MyX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFNDM19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNjEKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2MworICAgICAgICAgICAgICAgIFBVQldFQUsgIFNESDBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjQKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY1CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NgorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjcKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY4CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2OQorICAgICAgICAgICAgICAgIFBVQldFQUsgIE9QQTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzAKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgR1BHX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA3MgorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzMKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVUFSVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFVTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzYKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQlBXTTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEJQV00xX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzkKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgwCisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEkyQzJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODIKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgUUVJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFFFSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODUKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUNBUDFfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NworICAgICAgICAgICAgICAgIFBVQldFQUsgIEdQSF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgODgKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU0RIMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5MAorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTEKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkyCisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MworICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTQKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk1CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NgorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTcKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgU0NVX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA5OQorICAgICAgICAgICAgICAgIFBVQldFQUsgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgMTAwCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVFJOR19JUlFIYW5kbGVyICAgICAgICAgICAgOyAxMDEKKworOyBJbnRlcnJ1cHRzCitCT0RfSVJRSGFuZGxlcgkJICAgICAgIDsgMAorSVJDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxCitQV1JXVV9JUlFIYW5kbGVyICAgICAgICAgICA7IDIKK1NSQU1fSVJRSGFuZGxlciAgICAgICAgICAgIDsgMworQ0xLRkFJTF9JUlFIYW5kbGVyICAgICAgICAgOyA0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDUKK1JUQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNgorVEFNUEVSX0lSUUhhbmRsZXIgICAgICAgICAgOyA3CitXRFRfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDgKK1dXRFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOQorRUlOVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMAorRUlOVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMQorRUlOVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMgorRUlOVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMworRUlOVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNAorRUlOVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNQorR1BBX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNgorR1BCX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNworR1BDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOAorR1BEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOQorR1BFX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMAorR1BGX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMQorUVNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyAyMgorU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAyMworQlJBS0UwX0lSUUhhbmRsZXIgICAgICAgICAgOyAyNAorRVBXTTBfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyNQorRVBXTTBfUDFfSVJRSGFuZGxlciAgICAgICAgOyAyNgorRVBXTTBfUDJfSVJRSGFuZGxlciAgICAgICAgOyAyNworQlJBS0UxX0lSUUhhbmRsZXIgICAgICAgICAgOyAyOAorRVBXTTFfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyOQorRVBXTTFfUDFfSVJRSGFuZGxlciAgICAgICAgOyAzMAorRVBXTTFfUDJfSVJRSGFuZGxlciAgICAgICAgOyAzMQorVEZNX1RJTUVSMF9JUlFfSGFuZGxlciAgICAgOyAzMgorVE1SMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzMworVElNRVIxX0hhbmRsZXIgICAgICAgICAgICAgOyAzNAorVE1SM19JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNQorVUFSVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNgorVUFSVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNworSTJDMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOAorSTJDMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOQorUERNQTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MAorREFDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA0MQorRUFEQzBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MgorRUFEQzFfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MworQUNNUDAxX0lSUUhhbmRsZXIgICAgICAgICAgOyA0NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA0NQorRUFEQzJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NgorRUFEQzNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NworVUFSVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OAorVUFSVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA1MAorU1BJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MQorU1BJMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MgorVVNCRF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MworVVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NAorVVNCT1RHX0lSUUhhbmRsZXIgICAgICAgICAgOyA1NQorQ0FOMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NgorQ0FOMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NworU0MwX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OAorU0MxX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OQorU0MyX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MAorU0MzX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MQorU1BJM19JUlFIYW5kbGVyICAgICAgICAgICAgOyA2MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2MworU0RIMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NworSTJTMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2OAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2OQorT1BBMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MAorQ1JQVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MQorR1BHX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA3MgorRUlOVDZfSVJRSGFuZGxlciAgICAgICAgICAgOyA3MworVUFSVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NAorVUFSVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NQorVVNDSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NgorVVNDSTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NworQlBXTTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OAorQlBXTTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MQorSTJDMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MworUUVJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NAorUUVJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NQorRUNBUDBfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NgorRUNBUDFfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NworR1BIX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4OAorRUlOVDdfSVJRSGFuZGxlciAgICAgICAgICAgOyA4OQorU0RIMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5MAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MQorO1VTQkhfSVJRSGFuZGxlciAgICAgICAgICAgOyA5MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MworOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NworUERNQTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA5OAorO1NDVV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5OQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyAxMDAKK1RSTkdfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMTAxCitERUZBVUxUX0lSUUhhbmRsZXIKKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKworICAgICAgICAgICAgICAgIEVORApkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2Uvc3lzdGVtX2NvcmVfaW5pdC5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2Uvc3lzdGVtX2NvcmVfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExODgxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9zeXN0ZW1fY29yZV9pbml0LmMKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxOSBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZGVyaXZhdGl2ZSBvZiBDTVNJUyBWNS4wMSBcRGV2aWNlXEFSTVxBUk1DTTMzXFNvdXJjZVxzeXN0ZW1fQVJNQ00zMy5jCisgKiBodHRwczovL2dpdGh1Yi5jb20vQVJNLXNvZnR3YXJlL0NNU0lTXzUvdHJlZS81LjAuMQorICogR2l0IFNIQTogOGExZDlkNmVlMThiMTQzYWU1YmVmZWZhMTRkODlmYjViM2Y5OWM3NQorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisjaW5jbHVkZSAic3lzdGVtX2NvcmVfaW5pdC5oIgorI2luY2x1ZGUgInBsYXRmb3JtX2Rlc2NyaXB0aW9uLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWZpbmUgY2xvY2tzCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lICBTWVNURU1fQ0xPQ0sgICAgKDY0MDAwMDAwVUwpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFeHRlcm5hbHMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTeXN0ZW0gQ29yZSBDbG9jayBWYXJpYWJsZQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3VpbnQzMl90IFN5c3RlbUNvcmVDbG9jayA9IFNZU1RFTV9DTE9DSzsKK3VpbnQzMl90IFBlcmlwaGVyYWxDbG9jayA9IFNZU1RFTV9DTE9DSzsKK3VpbnQzMl90IFJlZkNsb2NrICAgICAgICA9IFNZU1RFTV9DTE9DSzsKK3VpbnQzMl90IEN5Y2xlc1BlclVzICAgICA9IFNZU1RFTV9DTE9DSyAvIDEwMDAwMDA7Cit1aW50MzJfdCBQbGxDbG9jayAgICAgICAgPSBTWVNURU1fQ0xPQ0s7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTeXN0ZW0gQ29yZSBDbG9jayB1cGRhdGUgZnVuY3Rpb24KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSAodm9pZCkKK3sKKyAgU3lzdGVtQ29yZUNsb2NrID0gU1lTVEVNX0NMT0NLOworICBQZXJpcGhlcmFsQ2xvY2sgPSBTWVNURU1fQ0xPQ0s7CisgIFJlZkNsb2NrICAgICAgICA9IFNZU1RFTV9DTE9DSzsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN5c3RlbSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgU3lzdGVtSW5pdCAodm9pZCkKK3sKKyNpZiBkZWZpbmVkIChfX1ZUT1JfUFJFU0VOVCkgJiYgKF9fVlRPUl9QUkVTRU5UID09IDFVKQorICBleHRlcm4gdWludDMyX3QgX19WZWN0b3JzOworICBTQ0ItPlZUT1IgPSAodWludDMyX3QpICZfX1ZlY3RvcnM7CisjZW5kaWYKKworLy8jaWYgX19ET01BSU5fTlMgPT0gMAorI2lmIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzTCkKKworICAvKiBJbml0aWFsIHRoZSBzeXN0ZW0gKi8KKyAgU1lTX1VubG9ja1JlZygpOworCisgIC8qIEVuYWJsZSBISVJDIGFuZCB3YWl0aW5nIGZvciBzdGFibGUgKi8KKyAgQ0xLLT5QV1JDVEwgfD0gQ0xLX1BXUkNUTF9ISVJDRU5fTXNrOworICB3aGlsZSgoQ0xLLT5TVEFUVVMgJiBDTEtfU1RBVFVTX0hJUkNTVEJfTXNrKSA9PSAwKTsKKworICAvKiBFbmFibGUgUExMIGFuZCB3YWl0aW5nIGZvciBzdGFibGUgKi8KKyAgQ0xLLT5QTExDVEwgPSBDTEtfUExMQ1RMXzY0TUh6X0hJUkM7CisgIHdoaWxlKChDTEstPlNUQVRVUyAmIENMS19TVEFUVVNfUExMU1RCX01zaykgPT0gMCk7CisKKyAgLyogU2V0IHN5c3RlbSB0byB1c2UgUExMIHdpdGggSENMS19ESVYgPSAxICovCisgIENMSy0+Q0xLU0VMMCA9IENMS19DTEtTRUwwX0hDTEtTRUxfUExMOworICBDTEstPkNMS0RJVjAgPSAwOworCisgIC8qIFN3aXRjaCBIQ0xLIGNsb2NrIHNvdXJjZSB0byBQTEwgKi8KKyAgQ0xLLT5DTEtTRUwwID0gKENMSy0+Q0xLU0VMMCAmICh+Q0xLX0NMS1NFTDBfSENMS1NFTF9Nc2spKSB8IENMS19DTEtTRUwwX0hDTEtTRUxfUExMOworCisgIC8qIEVuYWJsZSBJUCBjbG9jayAqLworICBDTEstPkFQQkNMSzAgfD0gQ0xLX0FQQkNMSzBfVUFSVDBDS0VOX01zayB8IENMS19BUEJDTEswX1RNUjBDS0VOX01zayB8IENMS19BUEJDTEswX1RNUjJDS0VOX01zazsKKworICAvKiBTZWxlY3QgVUFSVCBjbG9jayBzb3VyY2UgKi8KKyAgQ0xLLT5DTEtTRUwxID0gKENMSy0+Q0xLU0VMMSAmICh+Q0xLX0NMS1NFTDFfVUFSVDBTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMV9VQVJUMFNFTF9ISVJDOworCisgIC8qIFRpbWVyIGNsb2NrIHNvdXJjZSAqLworICBDTEstPkNMS1NFTDEgPSAoQ0xLLT5DTEtTRUwxICYgKH5DTEtfQ0xLU0VMMV9UTVIwU0VMX01zaykpIHwgQ0xLX0NMS1NFTDFfVE1SMFNFTF9ISVJDOworICBDTEstPkNMS1NFTDEgPSAoQ0xLLT5DTEtTRUwxICYgKH5DTEtfQ0xLU0VMMV9UTVIyU0VMX01zaykpIHwgQ0xLX0NMS1NFTDFfVE1SMlNFTF9ISVJDOworCisgIC8qIFNldCBtdWx0aS1mdW5jdGlvbiBwaW5zIGZvciBVQVJUMCBSWEQgYW5kIFRYRCAqLworICBTWVMtPkdQQl9NRlBIID0gKFNZUy0+R1BCX01GUEggJiAofihVQVJUMF9SWERfUEIxMl9Nc2sgfCBVQVJUMF9UWERfUEIxM19Nc2spKSkgfCBVQVJUMF9SWERfUEIxMiB8IFVBUlQwX1RYRF9QQjEzOworCisgIC8qIFNldCBVQVJUIDAgdG8gTm9uLXNlY3VyZSAqLworICBTQ1VfU0VUX1BOU1NFVChVQVJUMF9BdHRyKTsKKworICAvKiBTZXQgU0FVICovCisgIFNBVS0+Uk5SID0gMzsKKyAgU0FVLT5SQkFSID0gMHg1MDAwMDAwMDsKKyAgU0FVLT5STEFSID0gKDB4NUZGRkZGRkYgJiBTQVVfUkxBUl9MQUREUl9Nc2spIHwgU0FVX1JMQVJfRU5BQkxFX01zazsKKworICAvKiBJbml0IEVUTSBUcmFjZSAqLworICBTWVMtPkdQRV9NRlBIID0gKFNZUy0+R1BFX01GUEggJiAofihUUkFDRV9DTEtfUEUxMl9Nc2sgfCBUUkFDRV9EQVRBMF9QRTExX01zayB8IFRSQUNFX0RBVEExX1BFMTBfTXNrIHwgVFJBQ0VfREFUQTJfUEU5X01zayB8IFRSQUNFX0RBVEEzX1BFOF9Nc2spKSkgfAorICAgICAgVFJBQ0VfQ0xLX1BFMTIgfCBUUkFDRV9EQVRBMF9QRTExIHwgVFJBQ0VfREFUQTFfUEUxMCB8IFRSQUNFX0RBVEEyX1BFOSB8IFRSQUNFX0RBVEEzX1BFODsKKworCisKKyNlbmRpZgorCisKKyAgU3lzdGVtQ29yZUNsb2NrID0gU1lTVEVNX0NMT0NLOworfQpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL21wdV9hcm12OG1fZHJ2LmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvbXB1X2FybXY4bV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDllZmFiCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL21wdV9hcm12OG1fZHJ2LmMKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOSwgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqLworCisjaW5jbHVkZSAibXB1X2FybXY4bV9kcnYuaCIKKyNpbmNsdWRlICJjbXNpcy5oIgorCisvKgorICogRml4TWU6CisgKiBUaGlzIGlzIGEgYmV0YSBxdWFsaXR5IGRyaXZlciBmb3IgTVBVIGluIHY4TS4gVG8gYmUgZmluYWxpemVkLgorICovCisKK2VudW0gbXB1X2FybXY4bV9lcnJvcl90IG1wdV9hcm12OG1fZW5hYmxlKHN0cnVjdCBtcHVfYXJtdjhtX2Rldl90ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwcml2ZGVmX2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaGZubWlfZW4pCit7CisgICAgLypObyBlcnJvciBjaGVja2luZyovCisKKyAgICBNUFVfVHlwZSAqbXB1ID0gKE1QVV9UeXBlICopZGV2LT5iYXNlOworCisgICAgLyoKKyAgICAgKiBGaXhNZTogU2V0IDMgcHJlLWRlZmluZWQgTUFJUl9BVFRSIGZvciBtZW1vcnkuIFRoZSBhdHRyaWJ1dGVzIGNvbWUKKyAgICAgKiBmcm9tIGRlZmF1bHQgbWVtb3J5IG1hcCwgbmVlZCB0byBjaGVjayBpZiBmaW5lLXR1bmUgaXMgbmVjZXNzYXJ5LgorICAgICAqCisgICAgICogTUFJUjBfMDogUGVyaXBoZXJhbCwgRGV2aWNlLW5HblJFLgorICAgICAqIE1BSVIwXzE6IENvZGUsIFdUIFJBLiBTYW1lIGF0dHIgZm9yIE91dGVyIGFuZCBJbm5lci4KKyAgICAgKiBNQUlSMF8yOiBTUkFNLCBXQldBIFJBLiBTYW1lIGF0dHIgZm9yIE91dGVyIGFuZCBJbm5lci4KKyAgICAgKi8KKyAgICBtcHUtPk1BSVIwID0gKE1QVV9BUk1WOE1fTUFJUl9BVFRSX0RFVklDRV9WQUwgPDwgTVBVX01BSVIwX0F0dHIwX1BvcykgfAorICAgICAgICAgICAgICAgICAoTVBVX0FSTVY4TV9NQUlSX0FUVFJfQ09ERV9WQUwgPDwgTVBVX01BSVIwX0F0dHIxX1BvcykgfAorICAgICAgICAgICAgICAgICAoTVBVX0FSTVY4TV9NQUlSX0FUVFJfREFUQV9WQUwgPDwgTVBVX01BSVIwX0F0dHIyX1Bvcyk7CisKKyAgICBtcHUtPkNUUkwgPQorICAgICAgICAgICAgKHByaXZkZWZfZW4gPyBNUFVfQ1RSTF9QUklWREVGRU5BX01zayA6IDApIHwKKyAgICAgICAgICAgIChoZm5taV9lbiAgID8gTVBVX0NUUkxfSEZOTUlFTkFfTXNrICAgOiAwKTsKKworICAgIC8qRW5zdXJlIGFsbCBjb25maWd1cmF0aW9uIGlzIHdyaXR0ZW4gYmVmb3JlIGVuYWJsZSovCisKKyAgICBtcHUtPkNUUkwgfD0gTVBVX0NUUkxfRU5BQkxFX01zazsKKworICAgIC8qIEVuYWJsZSBNUFUgYmVmb3JlIG5leHQgaW5zdHJ1Y3Rpb24gKi8KKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7CisgICAgcmV0dXJuIE1QVV9BUk1WOE1fT0s7Cit9CisKK2VudW0gbXB1X2FybXY4bV9lcnJvcl90IG1wdV9hcm12OG1fZGlzYWJsZShzdHJ1Y3QgbXB1X2FybXY4bV9kZXZfdCAqZGV2KQoreworICAgIE1QVV9UeXBlICptcHUgPSAoTVBVX1R5cGUgKilkZXYtPmJhc2U7CisKKyAgICAvKiBSZXNldCBhbGwgZmllbGRzIGFzIGVuYWJsZSBkb2VzIGZ1bGwgc2V0dXAgKi8KKyAgICBtcHUtPkNUUkwgPSAwOworCisgICAgcmV0dXJuIE1QVV9BUk1WOE1fT0s7Cit9CisKKworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X2FybXY4bV9yZWdpb25fZW5hYmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXB1X2FybXY4bV9kZXZfdCAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXB1X2FybXY4bV9yZWdpb25fY2ZnX3QgKnJlZ2lvbl9jZmcpCit7CisgICAgTVBVX1R5cGUgKm1wdSA9IChNUFVfVHlwZSAqKWRldi0+YmFzZTsKKworICAgIGVudW0gbXB1X2FybXY4bV9lcnJvcl90IHJldF92YWwgPSBNUFVfQVJNVjhNX09LOworICAgIHVpbnQzMl90IGN0cmxfYmVmb3JlOworICAgIHVpbnQzMl90IGJhc2VfY2ZnOworICAgIHVpbnQzMl90IGxpbWl0X2NmZzsKKworICAgIC8qRklYTUUgOiBBZGQgY29tcGxldGUgZXJyb3IgY2hlY2tpbmcqLworICAgIGlmICgocmVnaW9uX2NmZy0+cmVnaW9uX2Jhc2UgJiB+TVBVX1JCQVJfQkFTRV9Nc2spICE9IDApIHsKKyAgICAgICAgcmV0dXJuIE1QVV9BUk1WOE1fRVJST1I7CisgICAgfQorICAgIC8qIHJlZ2lvbl9saW1pdCBkb2Vzbid0IG5lZWQgdG8gYmUgYWxpZ25lZCBidXQgdGhlIHNjYXR0ZXIKKyAgICAgKiBmaWxlIG5lZWRzIHRvIGJlIHNldHVwIHRvIGVuc3VyZSB0aGF0IHBhcnRpdGlvbnMgZG8gbm90IG92ZXJsYXAuCisgICAgICovCisKKyAgICBjdHJsX2JlZm9yZSA9IG1wdS0+Q1RSTDsKKyAgICBtcHUtPkNUUkwgPSAwOworCisgICAgbXB1LT5STlIgID0gcmVnaW9uX2NmZy0+cmVnaW9uX25yICYgTVBVX1JOUl9SRUdJT05fTXNrOworCisgICAgLyogVGhpcyAwcyB0aGUgbG93ZXIgYml0cyBvZiB0aGUgYmFzZSBhZGRyZXNzICovCisgICAgYmFzZV9jZmcgPSByZWdpb25fY2ZnLT5yZWdpb25fYmFzZSAmIE1QVV9SQkFSX0JBU0VfTXNrOworICAgIGJhc2VfY2ZnIHw9IChyZWdpb25fY2ZnLT5hdHRyX3NoIDw8IE1QVV9SQkFSX1NIX1BvcykgJiBNUFVfUkJBUl9TSF9Nc2s7CisgICAgYmFzZV9jZmcgfD0gKHJlZ2lvbl9jZmctPmF0dHJfYWNjZXNzIDw8IE1QVV9SQkFSX0FQX1BvcykgJiBNUFVfUkJBUl9BUF9Nc2s7CisgICAgYmFzZV9jZmcgfD0gKHJlZ2lvbl9jZmctPmF0dHJfZXhlYyA8PCBNUFVfUkJBUl9YTl9Qb3MpICYgTVBVX1JCQVJfWE5fTXNrOworCisgICAgbXB1LT5SQkFSID0gYmFzZV9jZmc7CisKKyAgICAvKlRoaXMgMHMgdGhlIGxvd2VyIGJpdHMgb2YgYmFzZSBhZGRyZXNzIGJ1dCB0aGV5IGFyZSB0cmVhdGVkIGFzIDEgKi8KKyAgICBsaW1pdF9jZmcgPSAocmVnaW9uX2NmZy0+cmVnaW9uX2xpbWl0LTEpICYgTVBVX1JMQVJfTElNSVRfTXNrOworCisgICAgbGltaXRfY2ZnIHw9IChyZWdpb25fY2ZnLT5yZWdpb25fYXR0cmlkeCA8PCBNUFVfUkxBUl9BdHRySW5keF9Qb3MpICYKKyAgICAgICAgICAgICAgICAgTVBVX1JMQVJfQXR0ckluZHhfTXNrOworCisgICAgbGltaXRfY2ZnIHw9IE1QVV9STEFSX0VOX01zazsKKworICAgIG1wdS0+UkxBUiA9IGxpbWl0X2NmZzsKKworICAgIC8qUmVzdG9yZSBtYWluIE1QVSBjb250cm9sKi8KKyAgICBtcHUtPkNUUkwgPSBjdHJsX2JlZm9yZTsKKworICAgIC8qIEVuYWJsZSBNUFUgYmVmb3JlIHRoZSBuZXh0IGluc3RydWN0aW9uICovCisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworCisgICAgcmV0dXJuIHJldF92YWw7Cit9CisKKworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X2FybXY4bV9yZWdpb25fZGlzYWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1wdV9hcm12OG1fZGV2X3QgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVnaW9uX25yKQoreworCisgICAgTVBVX1R5cGUgKm1wdSA9IChNUFVfVHlwZSAqKWRldi0+YmFzZTsKKworICAgIGVudW0gbXB1X2FybXY4bV9lcnJvcl90IHJldF92YWwgPSBNUFVfQVJNVjhNX09LOworICAgIHVpbnQzMl90IGN0cmxfYmVmb3JlOworCisgICAgLypGSVhNRSA6IEFkZCBjb21wbGV0ZSBlcnJvciBjaGVja2luZyovCisKKyAgICBjdHJsX2JlZm9yZSA9IG1wdS0+Q1RSTDsKKyAgICBtcHUtPkNUUkwgPSAwOworCisgICAgbXB1LT5STlIgID0gcmVnaW9uX25yICYgTVBVX1JOUl9SRUdJT05fTXNrOworCisgICAgbXB1LT5SQkFSID0gMDsKKyAgICBtcHUtPlJMQVIgPSAwOworCisgICAgLypSZXN0b3JlIG1haW4gTVBVIGNvbnRyb2wqLworICAgIG1wdS0+Q1RSTCA9IGN0cmxfYmVmb3JlOworCisgICAgcmV0dXJuIHJldF92YWw7Cit9CisKK2VudW0gbXB1X2FybXY4bV9lcnJvcl90IG1wdV9hcm12OG1fY2xlYW4oc3RydWN0IG1wdV9hcm12OG1fZGV2X3QgKmRldikKK3sKKyAgICBNUFVfVHlwZSAqbXB1ID0gKE1QVV9UeXBlICopZGV2LT5iYXNlOworICAgIHVpbnQzMl90IGkgPSAobXB1LT5UWVBFICYgTVBVX1RZUEVfRFJFR0lPTl9Nc2spID4+IE1QVV9UWVBFX0RSRUdJT05fUG9zOworCisgICAgd2hpbGUgKGkgPiAwKSB7CisgICAgICAgIG1wdV9hcm12OG1fcmVnaW9uX2Rpc2FibGUoZGV2LCBpLTEpOworICAgICAgICBpLS07CisgICAgfQorCisgICAgcmV0dXJuIE1QVV9BUk1WOE1fT0s7CisKK30KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9uYXRpdmVfZHJpdmVycy9tcHVfYXJtdjhtX2Rydi5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL21wdV9hcm12OG1fZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyNzYwNAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9uYXRpdmVfZHJpdmVycy9tcHVfYXJtdjhtX2Rydi5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTksIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKi8KKworI2lmbmRlZiBfX01QVV9BUk1WOE1fRFJWX0hfXworI2RlZmluZSBfX01QVV9BUk1WOE1fRFJWX0hfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBQUklWSUxFR0VEX0RFRkFVTFRfRU5BQkxFIDEKKyNkZWZpbmUgSEFSREZBVUxUX05NSV9FTkFCTEUgICAgICAxCisKKy8qIE1BSVJfQVRUUiAqLworI2RlZmluZSBNUFVfQVJNVjhNX01BSVJfQVRUUl9ERVZJQ0VfVkFMICAgICAgMHgwNAorI2RlZmluZSBNUFVfQVJNVjhNX01BSVJfQVRUUl9ERVZJQ0VfSURYICAgICAgMAorI2RlZmluZSBNUFVfQVJNVjhNX01BSVJfQVRUUl9DT0RFX1ZBTCAgICAgICAgMHhBQQorI2RlZmluZSBNUFVfQVJNVjhNX01BSVJfQVRUUl9DT0RFX0lEWCAgICAgICAgMQorI2RlZmluZSBNUFVfQVJNVjhNX01BSVJfQVRUUl9EQVRBX1ZBTCAgICAgICAgMHhGRgorI2RlZmluZSBNUFVfQVJNVjhNX01BSVJfQVRUUl9EQVRBX0lEWCAgICAgICAgMgorCitzdHJ1Y3QgbXB1X2FybXY4bV9kZXZfdCB7CisgICAgY29uc3QgdWludDMyX3QgYmFzZTsKK307CisKK2VudW0gbXB1X2FybXY4bV9lcnJvcl90IHsKKyAgICBNUFVfQVJNVjhNX09LLAorICAgIE1QVV9BUk1WOE1fRVJST1IKK307CisKK2VudW0gbXB1X2FybXY4bV9hdHRyX2V4ZWNfdCB7CisgICAgTVBVX0FSTVY4TV9YTl9FWEVDX09LLAorICAgIE1QVV9BUk1WOE1fWE5fRVhFQ19ORVZFUgorfTsKKworZW51bSBtcHVfYXJtdjhtX2F0dHJfYWNjZXNzX3QgeworICAgIE1QVV9BUk1WOE1fQVBfUldfUFJJVl9PTkxZLAorICAgIE1QVV9BUk1WOE1fQVBfUldfUFJJVl9VTlBSSVYsCisgICAgTVBVX0FSTVY4TV9BUF9ST19QUklWX09OTFksCisgICAgTVBVX0FSTVY4TV9BUF9ST19QUklWX1VOUFJJVgorfTsKKworZW51bSBtcHVfYXJtdjhtX2F0dHJfc2hhcmVkX3QgeworICAgIE1QVV9BUk1WOE1fU0hfTk9ORSwKKyAgICBNUFVfQVJNVjhNX1NIX1VOVVNFRCwKKyAgICBNUFVfQVJNVjhNX1NIX09VVEVSLAorICAgIE1QVV9BUk1WOE1fU0hfSU5ORVIKK307CisKK3N0cnVjdCBtcHVfYXJtdjhtX3JlZ2lvbl9jZmdfdCB7CisgICAgdWludDMyX3QgcmVnaW9uX25yOworICAgIHVpbnQzMl90IHJlZ2lvbl9iYXNlOworICAgIHVpbnQzMl90IHJlZ2lvbl9saW1pdDsKKyAgICB1aW50MzJfdCByZWdpb25fYXR0cmlkeDsKKyAgICBlbnVtIG1wdV9hcm12OG1fYXR0cl9leGVjX3QgICAgIGF0dHJfZXhlYzsKKyAgICBlbnVtIG1wdV9hcm12OG1fYXR0cl9hY2Nlc3NfdCAgIGF0dHJfYWNjZXNzOworICAgIGVudW0gbXB1X2FybXY4bV9hdHRyX3NoYXJlZF90ICAgYXR0cl9zaDsKK307CisKK3N0cnVjdCBtcHVfYXJtdjhtX3JlZ2lvbl9jZmdfcmF3X3QgeworICAgIHVpbnQzMl90IHJlZ2lvbl9ucjsKKyAgICB1aW50MzJfdCByZWdpb25fYmFzZTsKKyAgICB1aW50MzJfdCByZWdpb25fbGltaXQ7Cit9OworCisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBNUFUKKyAqCisgKiBccGFyYW1baW5dIGRldiAgICAgICAgICAgIE1QVSBkZXZpY2UgXHJlZiBtcHVfYXJtdjhtX2Rldl90CisgKiBccGFyYW1baW5dIHByaXZkZWZfZW4gICAgIHByaXZpbGVnZSBkZWZhdWx0IHJlZ2lvbiAxOmVuYWJsZSAwOmRpc2FibGUKKyAqIFxwYXJhbVtpbl0gaGZubWlfZW4gICAgICAgbXB1IGZvciBoYXJkIGZhdWx0ICYgbm1pICAxOmVuYWJsZSAwOmRpc2FibGUKKyAqCisgKiBccmV0dXJuIEVycm9yIGNvZGUgXHJlZiBtcHVfYXJtdjhtX2Vycm9yX3QKKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaWYgZGV2IGlzIE5VTEwuCisgKi8KKworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X2FybXY4bV9lbmFibGUoc3RydWN0IG1wdV9hcm12OG1fZGV2X3QgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHByaXZkZWZfZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoZm5taV9lbik7CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgTVBVCisgKgorICogXHBhcmFtW2luXSBkZXYgICAgICAgICAgICBNUFUgZGV2aWNlIFxyZWYgbXB1X2FybXY4bV9kZXZfdAorICoKKyAqIFxyZXR1cm4gRXJyb3IgY29kZSBccmVmIGFybV9tcHVfZXJyb3JfdAorICoKKyAqIFxub3RlIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpZiBkZXYgaXMgTlVMTC4KKyAqLworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X2FybXY4bV9kaXNhYmxlKHN0cnVjdCBtcHVfYXJtdjhtX2Rldl90ICpkZXYpOworCisvKioKKyAqIFxicmllZiBEaXNhYmxlIE1QVSBhbmQgY2xlYW4gYWxsIHJlZ2lvbnMKKyAqCisgKiBccGFyYW1baW5dIGRldiAgICAgICAgICAgIE1QVSBkZXZpY2UgXHJlZiBtcHVfYXJtdjhtX2Rldl90CisgKgorICogXHJldHVybiBFcnJvciBjb2RlIFxyZWYgYXJtX21wdV9lcnJvcl90CisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCitlbnVtIG1wdV9hcm12OG1fZXJyb3JfdCBtcHVfYXJtdjhtX2NsZWFuKHN0cnVjdCBtcHVfYXJtdjhtX2Rldl90ICpkZXYpOworCisvKioKKyAqIFxicmllZiBFbmFibGUgTVBVIFJlZ2lvbgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICAgICAgICAgICAgTVBVIGRldmljZSBccmVmIG1wdV9hcm12OG1fZGV2X3QKKyAqIFxwYXJhbVtpbl0gcmVnaW9uX2NmZyAgICAgTVBVIHJlZ2lvbiBjb25maWcgXHJlZiBtcHVfYXJtdjhtX3JlZ2lvbl9jZmdfdAorICoKKyAqIFxyZXR1cm4gRXJyb3IgY29kZSBccmVmIGFybV9tcHVfZXJyb3JfdAorICoKKyAqIFxub3RlIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpZiBkZXYgaXMgTlVMTC4KKyAqLworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X2FybXY4bV9yZWdpb25fZW5hYmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXB1X2FybXY4bV9kZXZfdCAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXB1X2FybXY4bV9yZWdpb25fY2ZnX3QgKnJlZ2lvbl9jZmcpOworCisvKioKKyAqIFxicmllZiBEaXNhYmxlIE1QVSBSZWdpb24KKyAqCisgKiBccGFyYW1baW5dIGRldiAgICAgICAgICAgIE1QVSBkZXZpY2UgXHJlZiBtcHVfYXJtdjhtX2Rldl90CisgKiBccGFyYW1baW5dIHJlZ2lvbl9uciAgICAgICAgICAgIFJlZ2lvbiBudW1iZXIKKyAqCisgKiBccmV0dXJuIEVycm9yIGNvZGUgXHJlZiBhcm1fbXB1X2Vycm9yX3QKKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaWYgZGV2IGlzIE5VTEwuCisgKi8KK2VudW0gbXB1X2FybXY4bV9lcnJvcl90IG1wdV9hcm12OG1fcmVnaW9uX2Rpc2FibGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtcHVfYXJtdjhtX2Rldl90ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlZ2lvbl9ucik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX01QVV9BUk1WOE1fRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL3RpbWVyX2Ntc2RrX2Rydi5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL3RpbWVyX2Ntc2RrX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNTg2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvdGltZXJfY21zZGtfZHJ2LmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOSBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiTnVNaWNyby5oIgorI2luY2x1ZGUgInRpbWVyX2Ntc2RrX2Rydi5oIgorCisKK3ZvaWQgdGltZXJfY21zZGtfaW5pdChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBUSU1FUl9UKiB0bXIgPSAoVElNRVJfVCopZGV2LT5jZmctPmJhc2U7CisKKyAgICBpZiAoZGV2LT5kYXRhLT5pc19pbml0aWFsaXplZCA9PSAwKQorICAgIHsKKworICAgICAgICBOVklDX0VuYWJsZUlSUShUTVIwX0lSUW4pOworICAgICAgICBOVklDX0VuYWJsZUlSUShUTVIyX0lSUW4pOworCisgICAgICAgIFRJTUVSX09wZW4odG1yLCBUSU1FUl9QRVJJT0RJQ19NT0RFLCAxMDAwKTsKKyAgICAgICAgZGV2LT5kYXRhLT5pc19pbml0aWFsaXplZCA9IDE7CisgICAgfQorfQorCitib29sIHRpbWVyX2Ntc2RrX2lzX2luaXRpYWxpemVkKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIHJldHVybiBkZXYtPmRhdGEtPmlzX2luaXRpYWxpemVkOworfQorCit2b2lkIHRpbWVyX2Ntc2RrX2VuYWJsZV9leHRlcm5hbF9pbnB1dChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBUSU1FUl9UKiB0bXIgPSAoVElNRVJfVCopZGV2LT5jZmctPmJhc2U7CisgICAgVElNRVJfRW5hYmxlQ2FwdHVyZSh0bXIsIFRJTUVSX0NBUFRVUkVfQ09VTlRFUl9SRVNFVF9NT0RFLCBUSU1FUl9DQVBUVVJFX0VWRU5UX1JJU0lORyk7Cit9CisKK3ZvaWQgdGltZXJfY21zZGtfZGlzYWJsZV9leHRlcm5hbF9pbnB1dChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBUSU1FUl9UKiB0bXIgPSAoVElNRVJfVCopZGV2LT5jZmctPmJhc2U7CisgICAgVElNRVJfRGlzYWJsZUNhcHR1cmUodG1yKTsKK30KKworYm9vbCB0aW1lcl9jbXNka19pc19leHRlcm5hbF9pbnB1dF9lbmFibGVkKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIHJldHVybiAoKCgoVElNRVJfVCopZGV2LT5jZmctPmJhc2UpLT5FWFRDVEwgJiBUSU1FUl9FWFRDVExfQ0FQRU5fTXNrKSAhPSAwKTsKK30KKwordm9pZCB0aW1lcl9jbXNka19zZXRfY2xvY2tfdG9faW50ZXJuYWwoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgVElNRVJfVCogdG1yID0gKFRJTUVSX1QqKWRldi0+Y2ZnLT5iYXNlOworICAgIFRJTUVSX0Rpc2FibGVFdmVudENvdW50ZXIodG1yKTsKK30KKwordm9pZCB0aW1lcl9jbXNka19zZXRfY2xvY2tfdG9fZXh0ZXJuYWwoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgVElNRVJfVCogdG1yID0gKFRJTUVSX1QqKWRldi0+Y2ZnLT5iYXNlOworICAgIFRJTUVSX0VuYWJsZUV2ZW50Q291bnRlcih0bXIsIFRJTUVSX0NPVU5URVJfRVZFTlRfUklTSU5HKTsKK30KKworYm9vbCB0aW1lcl9jbXNka19pc19jbG9ja19leHRlcm5hbChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICByZXR1cm4gKCgoKFRJTUVSX1QgKilkZXYtPmNmZy0+YmFzZSktPkNUTCAmIFRJTUVSX0NUTF9FWFRDTlRFTl9Nc2spICE9IDApOworfQorCit2b2lkIHRpbWVyX2Ntc2RrX2VuYWJsZShjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBUSU1FUl9UKiB0bXIgPSAoVElNRVJfVCopZGV2LT5jZmctPmJhc2U7CisgICAgVElNRVJfU3RhcnQodG1yKTsKK30KKwordm9pZCB0aW1lcl9jbXNka19kaXNhYmxlKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIFRJTUVSX1QqIHRtciA9IChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZTsKKyAgICBUSU1FUl9TdG9wKHRtcik7Cit9CisKK2Jvb2wgdGltZXJfY21zZGtfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICByZXR1cm4gKCgoKFRJTUVSX1QgKilkZXYtPmNmZy0+YmFzZSktPkNUTCAmIFRJTUVSX0NUTF9DTlRFTl9Nc2spICE9IDApOworfQorCit2b2lkIHRpbWVyX2Ntc2RrX2VuYWJsZV9pbnRlcnJ1cHQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgVElNRVJfVCogdG1yID0gKFRJTUVSX1QqKWRldi0+Y2ZnLT5iYXNlOworICAgIFRJTUVSX0VuYWJsZUludCh0bXIpOworfQorCit2b2lkIHRpbWVyX2Ntc2RrX2Rpc2FibGVfaW50ZXJydXB0KGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIFRJTUVSX1QqIHRtciA9IChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZTsKKyAgICBUSU1FUl9EaXNhYmxlSW50KHRtcik7Cit9CisKK2Jvb2wgdGltZXJfY21zZGtfaXNfaW50ZXJydXB0X2VuYWJsZWQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgcmV0dXJuICgoKChUSU1FUl9UICopZGV2LT5jZmctPmJhc2UpLT5DVEwgJiBUSU1FUl9DVExfSU5URU5fTXNrKSAhPSAwKTsKK30KKworYm9vbCB0aW1lcl9jbXNka19pc19pbnRlcnJ1cHRfYWN0aXZlKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIHJldHVybiAoKCgoVElNRVJfVCAqKWRldi0+Y2ZnLT5iYXNlKS0+SU5UU1RTICYgVElNRVJfSU5UU1RTX1RJRl9Nc2spICE9IDApOworfQorCit2b2lkIHRpbWVyX2Ntc2RrX2NsZWFyX2ludGVycnVwdChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBUSU1FUl9UKiB0bXIgPSAoVElNRVJfVCopZGV2LT5jZmctPmJhc2U7CisgICAgVElNRVJfQ2xlYXJJbnRGbGFnKHRtcik7Cit9CisKK3VpbnQzMl90IHRpbWVyX2Ntc2RrX2dldF9jdXJyZW50X3ZhbHVlKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIFRJTUVSX1QqIHRtciA9IChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZTsKKyAgICByZXR1cm4gVElNRVJfR2V0Q291bnRlcih0bXIpOworfQorCit2b2lkIHRpbWVyX2Ntc2RrX3NldF9yZWxvYWRfdmFsdWUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlbG9hZCkKK3sKKyAgICBUSU1FUl9UKiB0bXIgPSAoVElNRVJfVCopZGV2LT5jZmctPmJhc2U7CisKKyAgICAvKiByZWxvYWQgdmFsdWUgbXVzdCA+IDEgKi8KKyAgICBpZihyZWxvYWQgPCAyKQorICAgIHsKKyAgICAgICAgcmVsb2FkID0gMjsKKyAgICB9CisKKyAgICBUSU1FUl9TRVRfQ01QX1ZBTFVFKHRtciwgcmVsb2FkKTsKK30KKwordm9pZCB0aW1lcl9jbXNka19yZXNldChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBUSU1FUl9UKiB0bXIgPSAoVElNRVJfVCopZGV2LT5jZmctPmJhc2U7CisgICAgVElNRVJfUmVzZXRDb3VudGVyKHRtcik7Cit9CisKK3VpbnQzMl90IHRpbWVyX2Ntc2RrX2dldF9yZWxvYWRfdmFsdWUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgcmV0dXJuICgoVElNRVJfVCopZGV2LT5jZmctPmJhc2UpLT5DTVA7Cit9CisKK3VpbnQzMl90IHRpbWVyX2Ntc2RrX2dldF9lbGFwc2VkX3ZhbHVlKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIFRJTUVSX1QgKnRtcjsKKworICAgIHRtciA9IChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZTsKKyAgICByZXR1cm4gdG1yLT5DTVAgLSB0bXItPkNOVDsKK30KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9uYXRpdmVfZHJpdmVycy90aW1lcl9jbXNka19kcnYuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9uYXRpdmVfZHJpdmVycy90aW1lcl9jbXNka19kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjU5ZjExCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL3RpbWVyX2Ntc2RrX2Rydi5oCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTkgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfX1RJTUVSX0NNU0RLX0RSVl9IX18KKyNkZWZpbmUgX19USU1FUl9DTVNES19EUlZfSF9fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogTWF4aW11bSByZWxvYWQgdmFsdWUgKi8KKyNkZWZpbmUgVElNRVJfQ01TREtfTUFYX1JFTE9BRCAgICAgICAgVUlOVDMyX01BWCAvKiBtYXggb2YgMzItYml0ICovCisjZGVmaW5lIFRJTUVSX0NNU0RLX0RFRkFVTFRfUkVMT0FEICAgIFRJTUVSX0NNU0RLX01BWF9SRUxPQUQKKworLyoqIENNU0RLIHRpbWVyIGRldmljZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLworc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl9jZmdfdCB7CisgICAgY29uc3QgdWludHB0cl90IGJhc2U7ICAvKiE8IFRpbWVyIGJhc2UgYWRkcmVzcyAqLworfTsKKworLyoqIENNU0RLIHRpbWVyIGRldmljZSBkYXRhIHN0cnVjdHVyZSAqLworc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl9kYXRhX3QgeworICAgIGJvb2wgaXNfaW5pdGlhbGl6ZWQ7ICAvKiE8IEluZGljYXRlcyBpZiB0aGUgdGltZXIgaXMgaW5pdGlhbGl6ZWQgKi8KK307CisKKy8qIENNU0RLIHRpbWVyIGRldmljZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCB0aW1lcl9jbXNka19kZXZfdCB7CisgICAgY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl9jZmdfdCogY29uc3QgY2ZnOyAgLyohPCBUaW1lciBjb25maWd1cmF0aW9uICovCisgICAgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl9kYXRhX3QqIGNvbnN0IGRhdGE7ICAgICAgLyohPCBUaW1lciBkYXRhICovCit9OworCisvKioKKyAqIFxicmllZiBJbml0aWFsaXplcyB0aW1lciB0byBhIGtub3duIGRlZmF1bHQgc3RhdGUsIHdoaWNoIGlzOgorICogICAgICAgICAgLSB0aW1lciBkaXNhYmxlZAorICogICAgICAgICAgLSB0aW1lciBpbnRlcnJ1cHQgZGlzYWJsZWQKKyAqICAgICAgICAgIC0gY2xvY2sgc291cmNlIHNldCB0byBpbnRlcm5hbAorICogICAgICAgICAgLSBleHRlcm5hbCBpbnB1dCBkaXNhYmxlZAorICogICAgICAgICAgLSByZWxvYWQgdmFsdWUgbWF4ZWQgb3V0CisgKiAgICAgICAgSW5pdCBzaG91bGQgYmUgY2FsbGVkIHByaW9yIHRvIGFueSBvdGhlciBwcm9jZXNzIGFuZAorICogICAgICAgIGl0J3MgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZvbGxvdyBwcm9wZXIgY2FsbCBvcmRlci4KKyAqCisgKiBccGFyYW1baW5dIGRldiBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqLwordm9pZCB0aW1lcl9jbXNka19pbml0KGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgQ2hlY2tzIGlmIGEgdGltZXIgaXMgaW5pdGlhbGl6ZWQuCisgKgorICogXHBhcmFtW2luXSBkZXYgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKgorICogXHJldHVybiB0cnVlIGlmIGluaXRpYWxpemVkLCBmYWxzZSBvdGhlcndpc2UKKyAqLworYm9vbCB0aW1lcl9jbXNka19pc19pbml0aWFsaXplZChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZXMgZXh0ZXJuYWwgaW5wdXQsIHdoaWNoIGNvdWxkIGJlIHVzZWQgYXMgY2xvY2sgc291cmNlCisgKiAgICAgICAgYnkgY2FsbGluZyBccmVmIHRpbWVyX2Ntc2RrX3NldF9jbG9ja190b19leHRlcm5hbC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKi8KK3ZvaWQgdGltZXJfY21zZGtfZW5hYmxlX2V4dGVybmFsX2lucHV0KGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZXMgZXh0ZXJuYWwgaW5wdXQuCisgKiAgICAgICAgTWFrZSBzdXJlIGlmIHRoZSB0aW1lciBpcyBleHBsaWNpdGx5IHdhbnRlZCB0byBiZSBzdG9wcGVkIG9yIHNldAorICogICAgICAgIHRoZSBjbG9jayBzb3VyY2UgdG8gaW50ZXJuYWwgYnkgXHJlZiB0aW1lcl9jbXNka19zZXRfY2xvY2tfdG9faW50ZXJuYWwuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFRpbWVyIGNvbmZpZ3VyYXRpb24gXHJlZiB0aW1lcl9jbXNka19kZXZfdAorICovCit2b2lkIHRpbWVyX2Ntc2RrX2Rpc2FibGVfZXh0ZXJuYWxfaW5wdXQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBDaGVja3MgaWYgZXh0ZXJuYWwgaW5wdXQgaXMgZW5hYmxlZC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKgorICogXHJldHVybiB0cnVlIGlmIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZQorICovCitib29sIHRpbWVyX2Ntc2RrX2lzX2V4dGVybmFsX2lucHV0X2VuYWJsZWQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBTZXRzIHRoZSBjbG9jayBzb3VyY2UgdG8gaW50ZXJuYWwuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFRpbWVyIGNvbmZpZ3VyYXRpb24gXHJlZiB0aW1lcl9jbXNka19kZXZfdAorICovCit2b2lkIHRpbWVyX2Ntc2RrX3NldF9jbG9ja190b19pbnRlcm5hbChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIFNldHMgdGhlIGNsb2NrIHNvdXJjZSB0byBleHRlcm5hbC4KKyAqICAgICAgICBNYWtlIHN1cmUgZXh0ZXJuYWwgaW5wdXQgaXMgZW5hYmxlZCBjb3JyZXNwb25kaW5nbHkKKyAqICAgICAgICBieSBccmVmIHRpbWVyX2Ntc2RrX2VuYWJsZV9leHRlcm5hbF9pbnB1dC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKi8KK3ZvaWQgdGltZXJfY21zZGtfc2V0X2Nsb2NrX3RvX2V4dGVybmFsKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgQ2hlY2tzIGlmIGNsb2NrIHNvdXJjZSBpcyBleHRlcm5hbCBpbnB1dC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKgorICogXHJldHVybiB0cnVlIGlmIGV4dGVybmFsLCBmYWxzZSBpZiBpbnRlcm5hbAorICovCitib29sIHRpbWVyX2Ntc2RrX2lzX2Nsb2NrX2V4dGVybmFsKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlcyB0aW1lciBvcGVyYXRpb24uCisgKgorICogXHBhcmFtW2luXSBkZXYgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKi8KK3ZvaWQgdGltZXJfY21zZGtfZW5hYmxlKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZXMgdGhlIGdpdmVuIGhhcmR3YXJlIHRpbWVyLgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqLwordm9pZCB0aW1lcl9jbXNka19kaXNhYmxlKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgQ2hlY2tzIGlmIGEgdGltZXIgaXMgZW5hYmxlZC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKgorICogXHJldHVybiB0cnVlIGlmIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZQorICovCitib29sIHRpbWVyX2Ntc2RrX2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBFbmFibGVzIHRpbWVyIGludGVycnVwdC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgICAgICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqLwordm9pZCB0aW1lcl9jbXNka19lbmFibGVfaW50ZXJydXB0KGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZXMgdGltZXIgaW50ZXJydXB0LgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqLwordm9pZCB0aW1lcl9jbXNka19kaXNhYmxlX2ludGVycnVwdChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIENoZWNrcyBpZiBhIHRpbWVyIGludGVycnVwdCBpcyBlbmFibGVkLgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqCisgKiBccmV0dXJuIHRydWUgaWYgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgKi8KK2Jvb2wgdGltZXJfY21zZGtfaXNfaW50ZXJydXB0X2VuYWJsZWQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBHZXRzIHRpbWVyIGludGVycnVwdCBzdGF0dXMKKyAqCisgKiBccGFyYW1baW5dIGRldiAgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKgorICogKiBccmV0dXJuIHRydWUgaWYgYWN0aXZlLCBmYWxzZSBvdGhlcndpc2UKKyAqLworYm9vbCB0aW1lcl9jbXNka19pc19pbnRlcnJ1cHRfYWN0aXZlKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgQ2xlYXJzIHRpbWVyIGludGVycnVwdAorICogICAgICAgIFRoZSBpbnRlcnJ1cHQgcmVxdWVzdCBpcyBoZWxkIHVudGlsIGl0IGlzIGNsZWFyZWQuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFRpbWVyIGNvbmZpZ3VyYXRpb24gXHJlZiB0aW1lcl9jbXNka19kZXZfdAorICovCit2b2lkIHRpbWVyX2Ntc2RrX2NsZWFyX2ludGVycnVwdChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIFJlYWRzIHRpbWVyIGN1cnJlbnQgdmFsdWUuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFRpbWVyIGNvbmZpZ3VyYXRpb24gXHJlZiB0aW1lcl9jbXNka19kZXZfdAorICoKKyAqIFxyZXR1cm4gVGltZXIgdmFsdWUKKyAqLwordWludDMyX3QgdGltZXJfY21zZGtfZ2V0X2N1cnJlbnRfdmFsdWUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBTZXRzIHRoZSByZWxvYWQgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIHRpbWVyLgorICoKKyAqICAgICAgICBOZXcgcmVsb2FkIHZhbHVlIHRha2VzIGVmZmVjdCB3aGVuOgorICogICAgICAgIC0gdGltZXIgaXMgcmVzdGFydGVkCisgKiAgICAgICAgLSBvbiB0aW1lciB1bmRlcmZsb3cKKyAqICAgICAgICAtIHdoZW4gdGltZXJfY21zZGtfcmVzZXQgaXMgY2FsbGVkCisgKgorICogXG5vdGUgIEluIHIxcDAgdGVjaG5pY2FsIHJlZmVyZW5jZSBtYW51YWwgaXQncyBpbmNvcnJlY3RseSBzdGF0ZWQKKyAqICAgICAgICB3cml0aW5nIHRoZSByZWxvYWQgdmFsdWUgYXV0b21hdGljYWxseSBzZXRzIHRoZSBjdXJyZW50IHZhbHVlIGFsc28uCisgKiAgICAgICAgcjFwMSB0ZWNobmljYWwgcmVmZXJlbmNlIG1hbnVhbCBpbmNsdWRlcyB0aGUgZml4LgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqIFxwYXJhbVtpbl0gcmVsb2FkIFRpbWVyIHJlbG9hZCB2YWx1ZSB0byBzZXQuCisgKiAgICAgICAgICAgIFRoaXMgaXMgdGhlIHN0YXJ0IHZhbHVlIG9mIHRoZSAzMi1iaXQgZG93biBjb3VudGVyLAorICogICAgICAgICAgICB3aGljaCBhdXRvbWF0aWNhbGx5IHJlbG9hZGVkIGlmIDAgaXMgcmVhY2hlZC4KKyAqLwordm9pZCB0aW1lcl9jbXNka19zZXRfcmVsb2FkX3ZhbHVlKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlbG9hZCk7CisKKy8qKgorICogXGJyaWVmIFJlc2V0cyB0aGUgdGltZXIgY291bnRlciB0byB0aGUgcmVsb2FkIHZhbHVlIGluc3RhbnRseQorICogICAgICAgIChpLmUuIHdpdGhvdXQgd2FpdGluZyBmb3IgdW5kZXJmbG93KS4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKi8KK3ZvaWQgdGltZXJfY21zZGtfcmVzZXQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBHZXRzIHRoZSByZWxvYWQgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIHRpbWVyLgorICogICAgICAgIFRoaXMgaXMgdGhlIHN0YXJ0IHZhbHVlIG9mIHRoZSAzMi1iaXQgZG93biBjb3VudGVyLAorICogICAgICAgIHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgcmVsb2FkZWQgaWYgMCBpcyByZWFjaGVkIGJ5IHRoZSBjb3VudGVyLgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqCisgKiBccmV0dXJuIFJlbG9hZCB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgdGltZXIuCisgKi8KK3VpbnQzMl90IHRpbWVyX2Ntc2RrX2dldF9yZWxvYWRfdmFsdWUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBSZWFkcyB0aGUgbnVtYmVyIG9mIHRpY2tzIGVsYXBzZWQgaW4gdGhlIGN1cnJlbnQgY3ljbGUuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFRpbWVyIGNvbmZpZ3VyYXRpb24gXHJlZiB0aW1lcl9jbXNka19kZXZfdAorICoKKyAqIFxyZXR1cm4gR2V0IGVsYXBzZWQgbnVtYmVyIG9mIHRpY2tzIHNpbmNlIGxhc3QgcmVsb2FkIHdhcyBzZXQuCisgKiAgICAgICAgIEVsYXBzZWQgPSAoUmVsb2FkIHZhbHVlIC0gQ3VycmVudCB2YWx1ZSkKKyAqLwordWludDMyX3QgdGltZXJfY21zZGtfZ2V0X2VsYXBzZWRfdmFsdWUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qIF9fVElNRVJfQ01TREtfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL3VhcnRfY21zZGtfZHJ2LmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvdWFydF9jbXNka19kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2QxMjMwCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL3VhcnRfY21zZGtfZHJ2LmMKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOSBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAidWFydF9jbXNka19kcnYuaCIKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBVQVJUIHJlZ2lzdGVyIG1hcCBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QgeworICAgIHZvbGF0aWxlIHVpbnQzMl90IGRhdGE7ICAgLyogT2Zmc2V0OiAweDAwMCAoUi9XKSBkYXRhIHJlZ2lzdGVyICAgICovCisgICAgdm9sYXRpbGUgdWludDMyX3Qgc3RhdGU7ICAvKiBPZmZzZXQ6IDB4MDA0IChSL1cpIHN0YXR1cyByZWdpc3RlciAgKi8KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBjdHJsOyAgIC8qIE9mZnNldDogMHgwMDggKFIvVykgY29udHJvbCByZWdpc3RlciAqLworICAgIHVuaW9uIHsKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgaW50cnN0YXR1czsgIC8qIE9mZnNldDogMHgwMGMgKFIvICkgaW50ZXJydXB0IHN0YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IGludHJjbGVhcjsgICAvKiBPZmZzZXQ6IDB4MDBjICggL1cpIGludGVycnVwdCBjbGVhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgfWludHJfcmVnOworICAgIHZvbGF0aWxlIHVpbnQzMl90IGJhdWRkaXY7ICAgICAgICAvKiBPZmZzZXQ6IDB4MDEwIChSL1cpIEJhdWRyYXRlIGRpdmlkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK307CisKKy8qIENUUkwgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9DTVNES19UWF9FTiAgICAgICAoMXVsIDw8IDApCisjZGVmaW5lIFVBUlRfQ01TREtfUlhfRU4gICAgICAgKDF1bCA8PCAxKQorI2RlZmluZSBVQVJUX0NNU0RLX1RYX0lOVFJfRU4gICgxdWwgPDwgMikKKyNkZWZpbmUgVUFSVF9DTVNES19SWF9JTlRSX0VOICAoMXVsIDw8IDMpCisKKy8qIFNUQVRFIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfQ01TREtfVFhfQkYgICgxdWwgPDwgMCkKKyNkZWZpbmUgVUFSVF9DTVNES19SWF9CRiAgKDF1bCA8PCAxKQorCisvKiBJTlRTVEFUVVMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9DTVNES19UWF9JTlRSICAoMXVsIDw8IDApCisjZGVmaW5lIFVBUlRfQ01TREtfUlhfSU5UUiAgKDF1bCA8PCAxKQorCisvKiBVQVJUIHN0YXRlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFVBUlRfQ01TREtfSU5JVElBTElaRUQgICgxdWwgPDwgMCkKKworZW51bSB1YXJ0X2Ntc2RrX2Vycm9yX3QgdWFydF9jbXNka19pbml0KHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzeXN0ZW1fY2xrKQoreworICAgIHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqIHBfdWFydCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCopZGV2LT5jZmctPmJhc2U7CisgICAgaWYoc3lzdGVtX2NsayA9PSAwKSB7CisgICAgICAgIHJldHVybiBVQVJUX0NNU0RLX0VSUl9JTlZBTElEX0FSRzsKKyAgICB9CisKKyAgICAvKiBTZXRzIGJhdWRyYXRlIGFuZCBzeXN0ZW0gY2xvY2sgKi8KKyAgICBkZXYtPmRhdGEtPnN5c3RlbV9jbGsgPSBzeXN0ZW1fY2xrOworICAgIGRldi0+ZGF0YS0+YmF1ZHJhdGUgPSBkZXYtPmNmZy0+ZGVmYXVsdF9iYXVkcmF0ZTsKKworICAgIC8qIFNldHMgYmF1ZHJhdGUgKi8KKyAgICBwX3VhcnQtPmJhdWRkaXYgPSAoZGV2LT5kYXRhLT5zeXN0ZW1fY2xrIC8gZGV2LT5jZmctPmRlZmF1bHRfYmF1ZHJhdGUpOworCisgICAgLyogRW5hYmxlcyByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgKi8KKyAgICBwX3VhcnQtPmN0cmwgPSBVQVJUX0NNU0RLX1JYX0VOIHwgVUFSVF9DTVNES19UWF9FTjsKKworICAgIGRldi0+ZGF0YS0+c3RhdGUgPSBVQVJUX0NNU0RLX0lOSVRJQUxJWkVEOworCisgICAgcmV0dXJuIFVBUlRfQ01TREtfRVJSX05PTkU7Cit9CisKK2VudW0gdWFydF9jbXNka19lcnJvcl90IHVhcnRfY21zZGtfc2V0X2JhdWRyYXRlKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJhdWRyYXRlKQoreworICAgIHVpbnQzMl90IGJhdWRkaXY7CisgICAgc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCogcF91YXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KilkZXYtPmNmZy0+YmFzZTsKKworICAgIGlmKGJhdWRyYXRlID09IDApIHsKKyAgICAgICAgcmV0dXJuIFVBUlRfQ01TREtfRVJSX0lOVkFMSURfQkFVRDsKKyAgICB9CisKKyAgICBpZighKGRldi0+ZGF0YS0+c3RhdGUgJiBVQVJUX0NNU0RLX0lOSVRJQUxJWkVEKSkgeworICAgICAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfTk9UX0lOSVQ7CisgICAgfQorCisgICAgLyogU2V0cyBiYXVkcmF0ZSAqLworICAgIGJhdWRkaXYgPSAoZGV2LT5kYXRhLT5zeXN0ZW1fY2xrIC8gYmF1ZHJhdGUpOworICAgIGRldi0+ZGF0YS0+YmF1ZHJhdGUgPSBiYXVkcmF0ZTsKKworICAgIC8qIE1pbmltdW0gYmF1ZGRpdiB2YWx1ZSAqLworICAgIGlmKGJhdWRkaXYgPCAxNikgeworICAgICAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfSU5WQUxJRF9CQVVEOworICAgIH0KKworICAgIHBfdWFydC0+YmF1ZGRpdiA9IGJhdWRkaXY7CisKKyAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfTk9ORTsKK30KKwordWludDMyX3QgdWFydF9jbXNka19nZXRfYmF1ZHJhdGUoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICByZXR1cm4gZGV2LT5kYXRhLT5iYXVkcmF0ZTsKK30KKworZW51bSB1YXJ0X2Ntc2RrX2Vycm9yX3QgdWFydF9jbXNka19zZXRfY2xvY2soc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3lzdGVtX2NsaykKK3sKKyAgICBzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KiBwX3VhcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqKWRldi0+Y2ZnLT5iYXNlOworCisgICAgaWYoc3lzdGVtX2NsayA9PSAwKSB7CisgICAgICAgIHJldHVybiBVQVJUX0NNU0RLX0VSUl9JTlZBTElEX0FSRzsKKyAgICB9CisKKyAgICBpZighKGRldi0+ZGF0YS0+c3RhdGUgJiBVQVJUX0NNU0RLX0lOSVRJQUxJWkVEKSkgeworICAgICAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfTk9UX0lOSVQ7CisgICAgfQorCisgICAgLyogU2V0cyBzeXN0ZW0gY2xvY2sgKi8KKyAgICBkZXYtPmRhdGEtPnN5c3RlbV9jbGsgPSBzeXN0ZW1fY2xrOworCisgICAgLyogVXBkYXRlcyBiYXVkcmF0ZSBkaXZpZGVyICovCisgICAgcF91YXJ0LT5iYXVkZGl2ID0gKGRldi0+ZGF0YS0+c3lzdGVtX2NsayAvIGRldi0+ZGF0YS0+YmF1ZHJhdGUpOworCisgICAgLyogRW5hYmxlcyByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgKi8KKyAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfTk9ORTsKK30KKworZW51bSB1YXJ0X2Ntc2RrX2Vycm9yX3QgdWFydF9jbXNka19yZWFkKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGJ5dGUpCit7CisgICAgc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCogcF91YXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KilkZXYtPmNmZy0+YmFzZTsKKworICAgIGlmKCEocF91YXJ0LT5zdGF0ZSAmIFVBUlRfQ01TREtfUlhfQkYpKSB7CisgICAgICAgIHJldHVybiBVQVJUX0NNU0RLX0VSUl9OT1RfUkVBRFk7CisgICAgfQorCisgICAgLyogUmVhZHMgZGF0YSAqLworICAgICpieXRlID0gKHVpbnQ4X3QpcF91YXJ0LT5kYXRhOworCisgICAgcmV0dXJuIFVBUlRfQ01TREtfRVJSX05PTkU7Cit9CisKK2VudW0gdWFydF9jbXNka19lcnJvcl90IHVhcnRfY21zZGtfd3JpdGUoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZSkKK3sKKyAgICBzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KiBwX3VhcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqKWRldi0+Y2ZnLT5iYXNlOworCisgICAgaWYocF91YXJ0LT5zdGF0ZSAmIFVBUlRfQ01TREtfVFhfQkYpIHsKKyAgICAgICAgcmV0dXJuIFVBUlRfQ01TREtfRVJSX05PVF9SRUFEWTsKKyAgICB9CisKKyAgICAvKiBTZW5kcyBkYXRhICovCisgICAgcF91YXJ0LT5kYXRhID0gYnl0ZTsKKworICAgIHJldHVybiBVQVJUX0NNU0RLX0VSUl9OT05FOworfQorCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB1YXJ0X2Ntc2RrX2lycV90eF9lbmFibGUoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KiBwX3VhcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqKWRldi0+Y2ZnLT5iYXNlOworCisgICAgaWYoIShkZXYtPmRhdGEtPnN0YXRlICYgVUFSVF9DTVNES19JTklUSUFMSVpFRCkpIHsKKyAgICAgICAgcmV0dXJuIFVBUlRfQ01TREtfRVJSX05PVF9JTklUOworICAgIH0KKworICAgIHBfdWFydC0+Y3RybCB8PSBVQVJUX0NNU0RLX1RYX0lOVFJfRU47CisKKyAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfTk9ORTsKK30KKwordm9pZCB1YXJ0X2Ntc2RrX2lycV90eF9kaXNhYmxlKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCogcF91YXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KilkZXYtPmNmZy0+YmFzZTsKKworICAgIGlmKGRldi0+ZGF0YS0+c3RhdGUgJiBVQVJUX0NNU0RLX0lOSVRJQUxJWkVEICkgeworICAgICAgICBwX3VhcnQtPmN0cmwgJj0gflVBUlRfQ01TREtfVFhfSU5UUl9FTjsKKyAgICB9Cit9CisKK3VpbnQzMl90IHVhcnRfY21zZGtfdHhfcmVhZHkoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KiBwX3VhcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqKWRldi0+Y2ZnLT5iYXNlOworCisgICAgaWYoIShkZXYtPmRhdGEtPnN0YXRlICYgVUFSVF9DTVNES19JTklUSUFMSVpFRCkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuICEocF91YXJ0LT5zdGF0ZSAmIFVBUlRfQ01TREtfVFhfQkYpOworfQorCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB1YXJ0X2Ntc2RrX2lycV9yeF9lbmFibGUoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KiBwX3VhcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqKWRldi0+Y2ZnLT5iYXNlOworCisgICAgaWYoIShkZXYtPmRhdGEtPnN0YXRlICYgVUFSVF9DTVNES19JTklUSUFMSVpFRCkpIHsKKyAgICAgICAgcmV0dXJuIFVBUlRfQ01TREtfRVJSX05PVF9JTklUOworICAgIH0KKworICAgIHBfdWFydC0+Y3RybCB8PSBVQVJUX0NNU0RLX1JYX0lOVFJfRU47CisKKyAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfTk9ORTsKK30KKwordm9pZCB1YXJ0X2Ntc2RrX2lycV9yeF9kaXNhYmxlKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCogcF91YXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KilkZXYtPmNmZy0+YmFzZTsKKworICAgIGlmKGRldi0+ZGF0YS0+c3RhdGUgJiBVQVJUX0NNU0RLX0lOSVRJQUxJWkVEKSB7CisgICAgICAgIHBfdWFydC0+Y3RybCAmPSB+VUFSVF9DTVNES19SWF9JTlRSX0VOOworICAgIH0KK30KKwordWludDMyX3QgdWFydF9jbXNka19yeF9yZWFkeShzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2KQoreworICAgIHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqIHBfdWFydCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqKWRldi0+Y2ZnLT5iYXNlOworCisgICAgaWYoIShkZXYtPmRhdGEtPnN0YXRlICYgVUFSVF9DTVNES19JTklUSUFMSVpFRCkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIChwX3VhcnQtPnN0YXRlICYgVUFSVF9DTVNES19SWF9CRik7Cit9CisKK3ZvaWQgdWFydF9jbXNka19jbGVhcl9pbnRlcnJ1cHQoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdWFydF9jbXNka19pcnFfdCBpcnEpCit7CisgICAgc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCogcF91YXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KilkZXYtPmNmZy0+YmFzZTsKKworICAgIGlmKGRldi0+ZGF0YS0+c3RhdGUgJiBVQVJUX0NNU0RLX0lOSVRJQUxJWkVEKSB7CisgICAgICAgIC8qIENsZWFycyBwZW5kaW5nIGludGVycnVwdHMgKi8KKyAgICAgICAgc3dpdGNoKGlycSkgeworICAgICAgICBjYXNlIFVBUlRfQ01TREtfSVJRX1JYOgorICAgICAgICAgICAgcF91YXJ0LT5pbnRyX3JlZy5pbnRyY2xlYXIgPSBVQVJUX0NNU0RLX1JYX0lOVFI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUX0NNU0RLX0lSUV9UWDoKKyAgICAgICAgICAgIHBfdWFydC0+aW50cl9yZWcuaW50cmNsZWFyID0gVUFSVF9DTVNES19UWF9JTlRSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVF9DTVNES19JUlFfQ09NQklORUQ6CisgICAgICAgICAgICBwX3VhcnQtPmludHJfcmVnLmludHJjbGVhciA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVQVJUX0NNU0RLX1JYX0lOVFIgfCBVQVJUX0NNU0RLX1RYX0lOVFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qIGRlZmF1bHQ6IG5vdCBkZWZpbmVkIHRvIGZvcmNlIGFsbCBjYXNlcyB0byBiZSBoYW5kbGVkICovCisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvdWFydF9jbXNka19kcnYuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9uYXRpdmVfZHJpdmVycy91YXJ0X2Ntc2RrX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMzI3OGUKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvdWFydF9jbXNka19kcnYuaApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE5IEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogXGZpbGUgdWFydF9jbXNka19kcnYuaAorICogXGJyaWVmIEdlbmVyaWMgZHJpdmVyIGZvciBBUk0gVUFSVC4KKyAqLworCisjaWZuZGVmIF9fVUFSVF9DTVNES19EUlZfSF9fCisjZGVmaW5lIF9fVUFSVF9DTVNES19EUlZfSF9fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBBUk0gVUFSVCBkZXZpY2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCB1YXJ0X2Ntc2RrX2Rldl9jZmdfdCB7CisgICAgY29uc3QgdWludDMyX3QgYmFzZTsgICAgICAgICAgICAgIC8qITwgVUFSVCBiYXNlIGFkZHJlc3MgKi8KKyAgICBjb25zdCB1aW50MzJfdCBkZWZhdWx0X2JhdWRyYXRlOyAgLyohPCBEZWZhdWx0IGJhdWRyYXRlICovCit9OworCisvKiBBUk0gVUFSVCBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCB1YXJ0X2Ntc2RrX2Rldl9kYXRhX3QgeworICAgIHVpbnQzMl90IHN0YXRlOyAgICAgICAvKiE8IEluZGljYXRlcyBpZiB0aGUgdWFydCBkcml2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBpcyBpbml0aWFsaXplZCBhbmQgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1aW50MzJfdCBzeXN0ZW1fY2xrOyAgLyohPCBTeXN0ZW0gY2xvY2sgKi8KKyAgICB1aW50MzJfdCBiYXVkcmF0ZTsgICAgLyohPCBCYXVkcmF0ZSAqLworfTsKKworLyogQVJNIFVBUlQgZGV2aWNlIHN0cnVjdHVyZSAqLworc3RydWN0IHVhcnRfY21zZGtfZGV2X3QgeworICAgIGNvbnN0IHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl9jZmdfdCogY29uc3QgY2ZnOyAgLyohPCBVQVJUIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBzdHJ1Y3QgdWFydF9jbXNka19kZXZfZGF0YV90KiBjb25zdCBkYXRhOyAgICAgIC8qITwgVUFSVCBkYXRhICovCit9OworCisvKiBBUk0gVUFSVCBlbnVtZXJhdGlvbiB0eXBlcyAqLworZW51bSB1YXJ0X2Ntc2RrX2Vycm9yX3QgeworICAgIFVBUlRfQ01TREtfRVJSX05PTkUgPSAwLCAgICAgIC8qITwgTm8gZXJyb3IgKi8KKyAgICBVQVJUX0NNU0RLX0VSUl9JTlZBTElEX0FSRywgICAvKiE8IEVycm9yIGludmFsaWQgaW5wdXQgYXJndW1lbnQgKi8KKyAgICBVQVJUX0NNU0RLX0VSUl9JTlZBTElEX0JBVUQsICAvKiE8IEludmFsaWQgYmF1ZHJhdGUgKi8KKyAgICBVQVJUX0NNU0RLX0VSUl9OT1RfSU5JVCwgICAgICAvKiE8IEVycm9yIFVBUlQgbm90IGluaXRpYWxpemVkICovCisgICAgVUFSVF9DTVNES19FUlJfTk9UX1JFQURZLCAgICAgLyohPCBFcnJvciBVQVJUIG5vdCByZWFkeSAqLworfTsKKworZW51bSB1YXJ0X2Ntc2RrX2lycV90IHsKKyAgICBVQVJUX0NNU0RLX0lSUV9SWCwgICAgICAgLyohPCBSWCBpbnRlcnJ1cHQgc291cmNlICovCisgICAgVUFSVF9DTVNES19JUlFfVFgsICAgICAgIC8qITwgVFggaW50ZXJydXB0IHNvdXJjZSAqLworICAgIFVBUlRfQ01TREtfSVJRX0NPTUJJTkVEICAvKiE8IFJYLVRYIGNvbWJpbmVkIGludGVycnVwdCBzb3VyY2UgKi8KK307CisKKy8qKgorICogXGJyaWVmIEluaXRpYWxpemVzIFVBUlQuIEl0IHVzZXMgdGhlIGRlZmF1bHQgYmF1ZHJhdGUgdG8gY29uZmlndXJlCisgKiB0aGUgcGVyaXBoZXJhbCBhdCB0aGlzIHBvaW50LgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICAgICAgICAgVUFSVCBkZXZpY2Ugc3RydWN0IFxyZWYgdWFydF9jbXNka19kZXZfdAorICogXHBhcmFtW2luXSBzeXN0ZW1fY2xrICBTeXN0ZW0gY2xvY2sgdXNlZCBieSB0aGUgZGV2aWNlLgorICoKKyAqIFxyZXR1cm4gUmV0dXJucyBlcnJvciBjb2RlIGFzIHNwZWNpZmllZCBpbiBccmVmIHVhcnRfY21zZGtfZXJyb3JfdAorICoKKyAqIFxub3RlIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpZiBkZXYgaXMgTlVMTC4KKyAqLworZW51bSB1YXJ0X2Ntc2RrX2Vycm9yX3QgdWFydF9jbXNka19pbml0KHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzeXN0ZW1fY2xrKTsKKworLyoqCisgKiBcYnJpZWYgU2V0cyB0aGUgVUFSVCBiYXVkcmF0ZS4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgICAgICBVQVJUIGRldmljZSBzdHJ1Y3QgXHJlZiB1YXJ0X2Ntc2RrX2Rldl90CisgKiBccGFyYW1baW5dIGJhdWRyYXRlICBOZXcgYmF1ZHJhdGUuCisgKgorICogXHJldHVybiBSZXR1cm5zIGVycm9yIGNvZGUgYXMgc3BlY2lmaWVkIGluIFxyZWYgdWFydF9jbXNka19lcnJvcl90CisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB1YXJ0X2Ntc2RrX3NldF9iYXVkcmF0ZShzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiYXVkcmF0ZSk7CisKKy8qKgorICogXGJyaWVmIEdldHMgdGhlIFVBUlQgYmF1ZHJhdGUuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFVBUlQgZGV2aWNlIHN0cnVjdCBccmVmIHVhcnRfY21zZGtfZGV2X3QKKyAqCisgKiBccmV0dXJuIFJldHVybnMgdGhlIFVBUlQgYmF1ZHJhdGUuCisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCit1aW50MzJfdCB1YXJ0X2Ntc2RrX2dldF9iYXVkcmF0ZShzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgU2V0cyBzeXN0ZW0gY2xvY2suCisgKgorICogXHBhcmFtW2luXSBkZXYgICAgICAgICBVQVJUIGRldmljZSBzdHJ1Y3QgXHJlZiB1YXJ0X2Ntc2RrX2Rldl90CisgKiBccGFyYW1baW5dIHN5c3RlbV9jbGsgIFN5c3RlbSBjbG9jayB1c2VkIGJ5IHRoZSBkZXZpY2UuCisgKgorICogXHJldHVybiBSZXR1cm5zIGVycm9yIGNvZGUgYXMgc3BlY2lmaWVkIGluIFxyZWYgdWFydF9jbXNka19lcnJvcl90CisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB1YXJ0X2Ntc2RrX3NldF9jbG9jayhzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzeXN0ZW1fY2xrKTsKKy8qKgorICogXGJyaWVmIFJlYWRzIG9uZSBieXRlIGZyb20gVUFSVCBkZXYuCisgKgorICogXHBhcmFtW2luXSBkZXYgICBVQVJUIGRldmljZSBzdHJ1Y3QgXHJlZiB1YXJ0X2Ntc2RrX2Rldl90CisgKiBccGFyYW1baW5dIGJ5dGUgIFBvaW50ZXIgdG8gYnl0ZS4KKyAqCisgKiBccmV0dXJuIFJldHVybnMgZXJyb3IgY29kZSBhcyBzcGVjaWZpZWQgaW4gXHJlZiB1YXJ0X2Ntc2RrX2Vycm9yX3QKKyAqCisgKiBcbm90ZSBGb3IgYmV0dGVyIHBlcmZvcm1hbmNlLCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaWYgZGV2IGFuZCBieXRlCisgKiBwb2ludGVyIGFyZSBOVUxMLCBhbmQgaWYgdGhlIGRyaXZlciBpcyBpbml0aWFsaXplZC4KKyAqLworZW51bSB1YXJ0X2Ntc2RrX2Vycm9yX3QgdWFydF9jbXNka19yZWFkKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogYnl0ZSk7CisKKy8qKgorICogXGJyaWVmIFdyaXRlcyBhIGJ5dGUgdG8gVUFSVCBkZXYuCisgKgorICogXHBhcmFtW2luXSBkZXYgICBVQVJUIGRldmljZSBzdHJ1Y3QgXHJlZiB1YXJ0X2Ntc2RrX2Rldl90CisgKiBccGFyYW1baW5dIGJ5dGUgIEJ5dGUgdG8gd3JpdGUuCisgKgorICogXHJldHVybiBSZXR1cm5zIGVycm9yIGNvZGUgYXMgc3BlY2lmaWVkIGluIFxyZWYgdWFydF9jbXNka19lcnJvcl90CisgKgorICogXG5vdGUgRm9yIGJldHRlciBwZXJmb3JtYW5jZSwgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMIGFuZAorICogaWYgdGhlIGRyaXZlciBpcyBpbml0aWFsaXplZCB0byBoYXZlIGJldHRlciBwZXJmb3JtYW5jZS4KKyAqLworZW51bSB1YXJ0X2Ntc2RrX2Vycm9yX3QgdWFydF9jbXNka193cml0ZShzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJ5dGUpOworCisvKioKKyAqIFxicmllZiBFbmFibGVzIFRYIGludGVycnVwdC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVUFSVCBkZXZpY2Ugc3RydWN0IFxyZWYgdWFydF9jbXNka19kZXZfdAorICoKKyAqIFxyZXR1cm4gUmV0dXJucyBlcnJvciBjb2RlIGFzIHNwZWNpZmllZCBpbiBccmVmIHVhcnRfY21zZGtfZXJyb3JfdAorICoKKyAqIFxub3RlIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpZiBkZXYgaXMgTlVMTC4KKyAqLworZW51bSB1YXJ0X2Ntc2RrX2Vycm9yX3QgdWFydF9jbXNka19pcnFfdHhfZW5hYmxlKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBEaXNhYmxlcyBUWCBpbnRlcnJ1cHQuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFVBUlQgZGV2aWNlIHN0cnVjdCBccmVmIHVhcnRfY21zZGtfZGV2X3QKKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaWYgZGV2IGlzIE5VTEwuCisgKi8KK3ZvaWQgdWFydF9jbXNka19pcnFfdHhfZGlzYWJsZShzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgIFZlcmlmaWVzIGlmIFR4IGlzIHJlYWR5IHRvIHNlbmQgbW9yZSBkYXRhLgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBVQVJUIGRldmljZSBzdHJ1Y3QgXHJlZiB1YXJ0X2Ntc2RrX2Rldl90CisgKgorICogXHJldHVybiAgMSBpZiBUWCBpcyByZWFkeSwgMCBvdGhlcndpc2UuCisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCit1aW50MzJfdCB1YXJ0X2Ntc2RrX3R4X3JlYWR5KHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBFbmFibGVzIFJYIGludGVycnVwdC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVUFSVCBkZXZpY2Ugc3RydWN0IFxyZWYgdWFydF9jbXNka19kZXZfdAorICoKKyAqIFxyZXR1cm4gUmV0dXJucyBlcnJvciBjb2RlIGFzIHNwZWNpZmllZCBpbiBccmVmIHVhcnRfY21zZGtfZXJyb3JfdAorICoKKyAqIFxub3RlIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpZiBkZXYgaXMgTlVMTC4KKyAqLworZW51bSB1YXJ0X2Ntc2RrX2Vycm9yX3QgdWFydF9jbXNka19pcnFfcnhfZW5hYmxlKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBEaXNhYmxlcyBSWCBpbnRlcnJ1cHQKKyAqCisgKiBccGFyYW1baW5dIGRldiAgVUFSVCBkZXZpY2Ugc3RydWN0IFxyZWYgdWFydF9jbXNka19kZXZfdAorICoKKyAqIFxub3RlIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpZiBkZXYgaXMgTlVMTC4KKyAqLwordm9pZCB1YXJ0X2Ntc2RrX2lycV9yeF9kaXNhYmxlKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBWZXJpZmllcyBpZiBSeCBoYXMgZGF0YS4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVUFSVCBkZXZpY2Ugc3RydWN0IFxyZWYgdWFydF9jbXNka19kZXZfdAorICoKKyAqIFxyZXR1cm4gMSBpZiBSWCBoYXMgZGF0YSwgMCBvdGhlcndpc2UuCisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCit1aW50MzJfdCB1YXJ0X2Ntc2RrX3J4X3JlYWR5KHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBDbGVhcnMgVUFSVCBpbnRlcnJ1cHQuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFVBUlQgZGV2aWNlIHN0cnVjdCBccmVmIHVhcnRfY21zZGtfZGV2X3QKKyAqIFxwYXJhbVtpbl0gaXJxICBJUlEgc291cmNlIHRvIGNsZWFuIFxyZWYgdWFydF9jbXNka19pcnFfdAorICoKKyAqIFxub3RlIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpZiBkZXYgaXMgTlVMTC4KKyAqLwordm9pZCB1YXJ0X2Ntc2RrX2NsZWFyX2ludGVycnVwdChzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB1YXJ0X2Ntc2RrX2lycV90IGlycSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogX19VQVJUX0NNU0RLX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9wYXJ0aXRpb24vZmxhc2hfbGF5b3V0LmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvcGFydGl0aW9uL2ZsYXNoX2xheW91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNmVkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvcGFydGl0aW9uL2ZsYXNoX2xheW91dC5oCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfX0ZMQVNIX0xBWU9VVF9IX18KKyNkZWZpbmUgX19GTEFTSF9MQVlPVVRfSF9fCisKKy8qIEZsYXNoIGxheW91dCBvbiBNMjM1MSB3aXRoIEJMMiAoc2luZ2xlIGltYWdlIGJvb3QpOgorICoKKyAqIDB4MDAwMF8wMDAwIEJMMiAtIE1DVUJvb3QgKDMyS0IpCisgKiAweDAwMDBfODAwMCBQcm90ZWN0ZWQgU3RvcmFnZSBBcmVhICgxNiBLQikKKyAqIDB4MDAwMF9DMDAwIEludGVybmFsIFRydXN0ZWQgU3RvcmFnZSBBcmVhICgxMiBLQikKKyAqIDB4MDAwMF9GMDAwIE5WIGNvdW50ZXJzIGFyZWEgKDQgS0IpCisgKiAweDAwMDFfMDAwMCBQcmltYXJ5IGltYWdlIGFyZWEgKDI1NktCKToKKyAqICAgIDB4MDAwMV8wMDAwIFNlY3VyZSAgICAgaW1hZ2UgcHJpbWFyeQorICogICAgMHgwMDA1XzAwMDAgTm9uLXNlY3VyZSBpbWFnZSBwcmltYXJ5CisgKiAweDAwMTBfMDAwMCBTY3JhdGNoIGFyZWEgKDRLQikKKyAqCisgKi8KKworLyogVGhpcyBoZWFkZXIgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIGxpbmtlciBzY2F0dGVyIGZpbGUgYXMgd2VsbCwgd2hlcmUgb25seSBhCisgKiBsaW1pdGVkIEMgY29uc3RydWN0cyBhcmUgYWxsb3dlZC4gVGhlcmVmb3JlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBpbmNsdWRlCisgKiBoZXJlIHRoZSBwbGF0Zm9ybV9yZXRhcmdldC5oIHRvIGFjY2VzcyBmbGFzaCByZWxhdGVkIGRlZmluZXMuIFRvIHJlc29sdmUgdGhpcworICogc29tZSBvZiB0aGUgdmFsdWVzIGFyZSByZWRlZmluZWQgaGVyZSB3aXRoIGRpZmZlcmVudCBuYW1lcywgdGhlc2UgYXJlIG1hcmtlZAorICogd2l0aCBjb21tZW50LgorICovCisKKy8qIFNpemUgb2YgYSBTZWN1cmUgYW5kIG9mIGEgTm9uLXNlY3VyZSBpbWFnZSAqLworI2RlZmluZSBGTEFTSF9TX1BBUlRJVElPTl9TSVpFICAgICAgICAgICgweDQwMDAwKSAgICAgICAgLyogUyBwYXJ0aXRpb24gOiAxOTIrNjQgS0IgKi8KKyNkZWZpbmUgRkxBU0hfTlNfUEFSVElUSU9OX1NJWkUgICAgICAgICAoMHgzMDAwMCkgICAgICAgIC8qIE5TIHBhcnRpdGlvbjogMjU2LTY0IEtCICovCisjZGVmaW5lIEZMQVNIX01BWF9QQVJUSVRJT05fU0laRSAgICAgICAgKChGTEFTSF9TX1BBUlRJVElPTl9TSVpFID4gICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9OU19QQVJUSVRJT05fU0laRSkgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX1NfUEFSVElUSU9OX1NJWkUgOiAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX05TX1BBUlRJVElPTl9TSVpFKQorCisvKiBTZWN0b3Igc2l6ZSBvZiB0aGUgZmxhc2ggaGFyZHdhcmU7IHNhbWUgYXMgRkxBU0gwX1NFQ1RPUl9TSVpFICovCisjZGVmaW5lIEZMQVNIX0FSRUFfSU1BR0VfU0VDVE9SX1NJWkUgICAgKDB4ODAwKSAgIC8qIDIgS0IgKi8KKy8qIFNhbWUgYXMgRkxBU0gwX1NJWkUgKi8KKyNkZWZpbmUgRkxBU0hfVE9UQUxfU0laRSAgICAgICAgICAgICAgICAoMHgwMDA4MDAwMCkgLyogNTEyIEtCICovCisKKy8qIEZsYXNoIGxheW91dCBpbmZvIGZvciBCTDIgYm9vdGxvYWRlciAqLworLyogU2FtZSBhcyBGTEFTSDBfQkFTRV9TICovCisjZGVmaW5lIEZMQVNIX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisKKy8qIE9mZnNldCBhbmQgc2l6ZSBkZWZpbml0aW9ucyBvZiB0aGUgZmxhc2ggcGFydGl0aW9ucyB0aGF0IGFyZSBoYW5kbGVkIGJ5IHRoZQorICogYm9vdGxvYWRlci4gVGhlIGltYWdlIHN3YXBwaW5nIGlzIGRvbmUgYmV0d2VlbiBJTUFHRV9QUklNQVJZIGFuZAorICogSU1BR0VfU0VDT05EQVJZLCBTQ1JBVENIIGlzIHVzZWQgYXMgYSB0ZW1wb3Jhcnkgc3RvcmFnZSBkdXJpbmcgaW1hZ2UKKyAqIHN3YXBwaW5nLgorICovCisjZGVmaW5lIEZMQVNIX0FSRUFfQkwyX09GRlNFVCAgICAgICgweDApCisjZGVmaW5lIEZMQVNIX0FSRUFfQkwyX1NJWkUgICAgICAgICgweDgwMDApIC8qIDMyIEtCICovCisKKyNpZiAhZGVmaW5lZChNQ1VCT09UX0lNQUdFX05VTUJFUikgfHwgKE1DVUJPT1RfSU1BR0VfTlVNQkVSID09IDEpCisvKiBTZWN1cmUgKyBOb24tc2VjdXJlIGltYWdlIHByaW1hcnkgc2xvdCAqLworI2RlZmluZSBGTEFTSF9BUkVBXzBfSUQgICAgICAgICAgICAoMSkKKyNkZWZpbmUgRkxBU0hfQVJFQV8wX09GRlNFVCAgICAgICAgKEZMQVNIX0FSRUFfQkwyX09GRlNFVCArIEZMQVNIX0FSRUFfQkwyX1NJWkUgKyAweDgwMDApICAgICAgICAvKiAweDEwMDAwICovCisjZGVmaW5lIEZMQVNIX0FSRUFfMF9TSVpFICAgICAgICAgIChGTEFTSF9TX1BBUlRJVElPTl9TSVpFICsgRkxBU0hfTlNfUEFSVElUSU9OX1NJWkUpICAgLyogNDgwIEtCICovCisvKiBTZWN1cmUgKyBOb24tc2VjdXJlIHNlY29uZGFyeSBzbG90ICovCisjZGVmaW5lIEZMQVNIX0FSRUFfMl9JRCAgICAgICAgICAgIChGTEFTSF9BUkVBXzBfSUQgKyAxKQorI2RlZmluZSBGTEFTSF9BUkVBXzJfT0ZGU0VUICAgICAgICAoMHgxMDAwMDApCisjZGVmaW5lIEZMQVNIX0FSRUFfMl9TSVpFICAgICAgICAgICgweDgwMCkKKworLyogU2NyYXRjaCBhcmVhICovCisjZGVmaW5lIEZMQVNIX0FSRUFfU0NSQVRDSF9JRCAgICAgIChGTEFTSF9BUkVBXzJfSUQgKyAxKQorI2RlZmluZSBGTEFTSF9BUkVBX1NDUkFUQ0hfT0ZGU0VUICAoMHgxMDA4MDApCisjZGVmaW5lIEZMQVNIX0FSRUFfU0NSQVRDSF9TSVpFICAgICgweDgwMCkKKworLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHN0YXR1cyBlbnRyaWVzIHN1cHBvcnRlZCBieSB0aGUgYm9vdGxvYWRlci4gKi8KKyNkZWZpbmUgTUNVQk9PVF9TVEFUVVNfTUFYX0VOVFJJRVMgKChGTEFTSF9TX1BBUlRJVElPTl9TSVpFICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX05TX1BBUlRJVElPTl9TSVpFKSAvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0FSRUFfU0NSQVRDSF9TSVpFKQorCisvKiBNYXhpbXVtIG51bWJlciBvZiBpbWFnZSBzZWN0b3JzIHN1cHBvcnRlZCBieSB0aGUgYm9vdGxvYWRlci4gKi8KKyNkZWZpbmUgTUNVQk9PVF9NQVhfSU1HX1NFQ1RPUlMgICAgKChGTEFTSF9TX1BBUlRJVElPTl9TSVpFICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX05TX1BBUlRJVElPTl9TSVpFKSAvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0FSRUFfSU1BR0VfU0VDVE9SX1NJWkUpCisKKyNlbHNlCisjZXJyb3IgIk9ubHkgTUNVQk9PVF9JTUFHRV9OVU1CRVIgMSBhcmUgc3VwcG9ydGVkISIKKyNlbmRpZiAvKiBNQ1VCT09UX0lNQUdFX05VTUJFUiAqLworCisvKiBQcm90ZWN0ZWQgU3RvcmFnZSAoUFMpIFNlcnZpY2UgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRkxBU0hfUFNfQVJFQV9PRkZTRVQgICAgICAgICAgICAoMHg4MDAwKQorI2RlZmluZSBGTEFTSF9QU19BUkVBX1NJWkUgICAgICAgICAgICAgICgweDQwMDApCisKKy8qIEludGVybmFsIFRydXN0ZWQgU3RvcmFnZSAoSVRTKSBTZXJ2aWNlIGRlZmluaXRpb25zICovCisjZGVmaW5lIEZMQVNIX0lUU19BUkVBX09GRlNFVCAgICAgICAgICAgKEZMQVNIX1BTX0FSRUFfT0ZGU0VUICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9QU19BUkVBX1NJWkUpCisjZGVmaW5lIEZMQVNIX0lUU19BUkVBX1NJWkUgICAgICAgICAgICAgKDB4MzAwMCkKKworLyogTlYgQ291bnRlcnMgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRkxBU0hfTlZfQ09VTlRFUlNfQVJFQV9PRkZTRVQgICAoRkxBU0hfSVRTX0FSRUFfT0ZGU0VUICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9JVFNfQVJFQV9TSVpFKQorI2RlZmluZSBGTEFTSF9OVl9DT1VOVEVSU19BUkVBX1NJWkUgICAgIChGTEFTSF9BUkVBX0lNQUdFX1NFQ1RPUl9TSVpFKQorCisvKiBPZmZzZXQgYW5kIHNpemUgZGVmaW5pdGlvbiBpbiBmbGFzaCBhcmVhIHVzZWQgYnkgYXNzZW1ibGUucHkgKi8KKyNkZWZpbmUgU0VDVVJFX0lNQUdFX09GRlNFVCAgICAgICAgICAgICAoMHgwKQorI2RlZmluZSBTRUNVUkVfSU1BR0VfTUFYX1NJWkUgICAgICAgICAgIEZMQVNIX1NfUEFSVElUSU9OX1NJWkUKKworI2RlZmluZSBOT05fU0VDVVJFX0lNQUdFX09GRlNFVCAgICAgICAgIChTRUNVUkVfSU1BR0VfT0ZGU0VUICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUNVUkVfSU1BR0VfTUFYX1NJWkUpCisjZGVmaW5lIE5PTl9TRUNVUkVfSU1BR0VfTUFYX1NJWkUgICAgICAgRkxBU0hfTlNfUEFSVElUSU9OX1NJWkUKKworLyogRmxhc2ggZGV2aWNlIG5hbWUgdXNlZCBieSBCTDIKKyAqIE5hbWUgaXMgZGVmaW5lZCBpbiBmbGFzaCBkcml2ZXIgZmlsZTogRHJpdmVyX0ZsYXNoLmMKKyAqLworI2RlZmluZSBGTEFTSF9ERVZfTkFNRSBEcml2ZXJfRkxBU0gwCisKKy8qIFByb3RlY3RlZCBTdG9yYWdlIChQUykgU2VydmljZSBkZWZpbml0aW9ucworICogTm90ZTogRnVydGhlciBkb2N1bWVudGF0aW9uIG9mIHRoZXNlIGRlZmluaXRpb25zIGNhbiBiZSBmb3VuZCBpbiB0aGUKKyAqIFRGLU0gUFMgSW50ZWdyYXRpb24gR3VpZGUuCisgKi8KKyNkZWZpbmUgUFNfRkxBU0hfREVWX05BTUUgRHJpdmVyX0ZMQVNIMAorCisvKiBJbiB0aGlzIHRhcmdldCB0aGUgQ01TSVMgZHJpdmVyIHJlcXVpcmVzIG9ubHkgdGhlIG9mZnNldCBmcm9tIHRoZSBiYXNlCisgKiBhZGRyZXNzIGluc3RlYWQgb2YgdGhlIGZ1bGwgbWVtb3J5IGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgUFNfRkxBU0hfQVJFQV9BRERSICAgICBGTEFTSF9QU19BUkVBX09GRlNFVAorLyogRGVkaWNhdGVkIGZsYXNoIGFyZWEgZm9yIFBTICovCisjZGVmaW5lIFBTX0ZMQVNIX0FSRUFfU0laRSAgICAgRkxBU0hfUFNfQVJFQV9TSVpFCisjZGVmaW5lIFBTX1NFQ1RPUl9TSVpFICAgICAgICAgRkxBU0hfQVJFQV9JTUFHRV9TRUNUT1JfU0laRQorLyogTnVtYmVyIG9mIFBTX1NFQ1RPUl9TSVpFIHBlciBibG9jayAqLworI2RlZmluZSBQU19TRUNUT1JTX1BFUl9CTE9DSyAgICgweDEpCisvKiBTcGVjaWZpZXMgdGhlIHNtYWxsZXN0IGZsYXNoIHByb2dyYW1tYWJsZSB1bml0IGluIGJ5dGVzICovCisjZGVmaW5lIFBTX0ZMQVNIX1BST0dSQU1fVU5JVCAgKDB4NCkKKy8qIFRoZSBtYXhpbXVtIGFzc2V0IHNpemUgdG8gYmUgc3RvcmVkIGluIHRoZSBQUyBhcmVhICovCisjZGVmaW5lIFBTX01BWF9BU1NFVF9TSVpFICAgICAgKDUxMikKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3NldHMgdG8gYmUgc3RvcmVkIGluIHRoZSBQUyBhcmVhICovCisjZGVmaW5lIFBTX05VTV9BU1NFVFMgICAgICAgICAgKDEyKQorCisvKiBJbnRlcm5hbCBUcnVzdGVkIFN0b3JhZ2UgKElUUykgU2VydmljZSBkZWZpbml0aW9ucworICogTm90ZTogRnVydGhlciBkb2N1bWVudGF0aW9uIG9mIHRoZXNlIGRlZmluaXRpb25zIGNhbiBiZSBmb3VuZCBpbiB0aGUKKyAqIFRGLU0gSVRTIEludGVncmF0aW9uIEd1aWRlLiBUaGUgSVRTIHNob3VsZCBiZSBpbiB0aGUgaW50ZXJuYWwgZmxhc2gsIGJ1dCBpcworICogYWxsb2NhdGVkIGluIHRoZSBleHRlcm5hbCBmbGFzaCBqdXN0IGZvciBkZXZlbG9wbWVudCBwbGF0Zm9ybXMgdGhhdCBkb24ndAorICogaGF2ZSBpbnRlcm5hbCBmbGFzaCBhdmFpbGFibGUuCisgKi8KKyNkZWZpbmUgSVRTX0ZMQVNIX0RFVl9OQU1FIERyaXZlcl9GTEFTSDAKKworLyogSW4gdGhpcyB0YXJnZXQgdGhlIENNU0lTIGRyaXZlciByZXF1aXJlcyBvbmx5IHRoZSBvZmZzZXQgZnJvbSB0aGUgYmFzZQorICogYWRkcmVzcyBpbnN0ZWFkIG9mIHRoZSBmdWxsIG1lbW9yeSBhZGRyZXNzLgorICovCisjZGVmaW5lIElUU19GTEFTSF9BUkVBX0FERFIgICAgIEZMQVNIX0lUU19BUkVBX09GRlNFVAorLyogRGVkaWNhdGVkIGZsYXNoIGFyZWEgZm9yIElUUyAqLworI2RlZmluZSBJVFNfRkxBU0hfQVJFQV9TSVpFICAgICBGTEFTSF9JVFNfQVJFQV9TSVpFCisjZGVmaW5lIElUU19TRUNUT1JfU0laRSAgICAgICAgIEZMQVNIX0FSRUFfSU1BR0VfU0VDVE9SX1NJWkUKKy8qIE51bWJlciBvZiBJVFNfU0VDVE9SX1NJWkUgcGVyIGJsb2NrICovCisjZGVmaW5lIElUU19TRUNUT1JTX1BFUl9CTE9DSyAgICgweDEpCisvKiBTcGVjaWZpZXMgdGhlIHNtYWxsZXN0IGZsYXNoIHByb2dyYW1tYWJsZSB1bml0IGluIGJ5dGVzICovCisjZGVmaW5lIElUU19GTEFTSF9QUk9HUkFNX1VOSVQgICgweDQpCisvKiBUaGUgbWF4aW11bSBhc3NldCBzaXplIHRvIGJlIHN0b3JlZCBpbiB0aGUgSVRTIGFyZWEgKi8KKyNkZWZpbmUgSVRTX01BWF9BU1NFVF9TSVpFICAgICAgKDUxMikKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3NldHMgdG8gYmUgc3RvcmVkIGluIHRoZSBJVFMgYXJlYSAqLworI2RlZmluZSBJVFNfTlVNX0FTU0VUUyAgICAgICAgICAoMTIpCisKKy8qIE5WIENvdW50ZXJzIGRlZmluaXRpb25zICovCisjZGVmaW5lIFRGTV9OVl9DT1VOVEVSU19BUkVBX0FERFIgICAgRkxBU0hfTlZfQ09VTlRFUlNfQVJFQV9PRkZTRVQKKyNkZWZpbmUgVEZNX05WX0NPVU5URVJTX0FSRUFfU0laRSAgICAoMHgxOCkgLyogMjQgQnl0ZXMgKi8KKyNkZWZpbmUgVEZNX05WX0NPVU5URVJTX1NFQ1RPUl9BRERSICBGTEFTSF9OVl9DT1VOVEVSU19BUkVBX09GRlNFVAorI2RlZmluZSBURk1fTlZfQ09VTlRFUlNfU0VDVE9SX1NJWkUgIEZMQVNIX0FSRUFfSU1BR0VfU0VDVE9SX1NJWkUKKworLyogVXNlIFNSQU0xIG1lbW9yeSB0byBzdG9yZSBDb2RlIGRhdGEgKi8KKyNkZWZpbmUgU19ST01fQUxJQVNfQkFTRSAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE5TX1JPTV9BTElBU19CQVNFICgweDEwMDAwMDAwKQorCisvKiBGSVhNRTogVXNlIFNSQU0yIG1lbW9yeSB0byBzdG9yZSBSVyBkYXRhICovCisjZGVmaW5lIFNfUkFNX0FMSUFTX0JBU0UgICgweDIwMDAwMDAwKQorI2RlZmluZSBOU19SQU1fQUxJQVNfQkFTRSAoMHgzMDAwMDAwMCkKKworI2RlZmluZSBUT1RBTF9ST01fU0laRSBGTEFTSF9UT1RBTF9TSVpFCisjZGVmaW5lIFRPVEFMX1JBTV9TSVpFICgweDAwMDE4MDAwKSAgICAgLyogOTYgS0IgKi8KKworI2VuZGlmIC8qIF9fRkxBU0hfTEFZT1VUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3BhcnRpdGlvbi9wYXJ0aXRpb25fTTIzNTEuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9wYXJ0aXRpb24vcGFydGl0aW9uX00yMzUxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY2NGJiZQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9wYXJ0aXRpb24vcGFydGl0aW9uX00yMzUxLmgKQEAgLTAsMCArMSw4MjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBwYXJ0aXRpb25fTTIzNTEuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgU0FVIGNvbmZpZ3VyYXRpb24gZm9yIHNlY3VyZS9ub25zZWN1cmUgcmVnaW9uIHNldHRpbmdzLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBQQVJUSVRJT05fTTIzNTEKKyNkZWZpbmUgUEFSVElUSU9OX00yMzUxCisKKworI2luY2x1ZGUgInJlZ2lvbl9kZWZzLmgiCisKKy8qCisvLy0tLS0tLS0tIDw8PCBVc2UgQ29uZmlndXJhdGlvbiBXaXphcmQgaW4gQ29udGV4dCBNZW51ID4+PiAtLS0tLS0tLS0tLS0tLS0tLQorKi8KKworCisvKgorICAgIFNSQU1OU1NFVAorKi8KKy8qCisvLyBCaXQgMC4uMTYKKy8vIDxvLjAuLjE2PiBTZWN1cmUgU1JBTSBTaXplICAgICAgICAgICAgICA8MD0+IDAgS0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHgyMDAwPT4gOEtCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4NDAwMD0+IDE2S0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHg2MDAwPT4gMjRLQgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwweDgwMDA9PiAzMktCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4YTAwMD0+IDQwS0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHhjMDAwPT4gNDhLQgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwweGUwMDA9PiA1NktCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4MTAwMDA9PiA2NEtCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4MTIwMDA9PiA3MktCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4MTQwMDA9PiA4MEtCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4MTYwMDA9PiA4OEtCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4MTgwMDA9PiA5NktCCisqLworI2RlZmluZSBTQ1VfU0VDVVJFX1NSQU1fU0laRSAgICAgIDB4MTIwMDAKKyNkZWZpbmUgTk9OX1NFQ1VSRV9TUkFNX0JBU0UgICAgKDB4MzAwMDAwMDAgKyBTQ1VfU0VDVVJFX1NSQU1fU0laRSkKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICAgIE5TQkEKKyovCisjZGVmaW5lIEZNQ19JTklUX05TQkEgICAgICAgICAgMQorLyoKKyAgICAgPG8+U2VjdXJlIEZsYXNoIFJPTSBTaXplIDwweDgwMC0weDdGRkZGOjB4ODAwPgorKi8KKworI2RlZmluZSBGTUNfU0VDVVJFX1JPTV9TSVpFICAgICAgKFNFQ1VSRV9JTUFHRV9NQVhfU0laRSsweDEwMDAwKQorCisjZGVmaW5lIEZNQ19OT05fU0VDVVJFX0JBU0UgICAgICgweDEwMDAwMDAwICsgRk1DX1NFQ1VSRV9ST01fU0laRSkKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgRk1DX05TQkFfU2V0dXAodm9pZCkKK3sKKyAgICAvKiBTa2lwIE5TQkEgU2V0dXB0IGFjY29yZGluZyBjb25maWcgKi8KKyAgICBpZihGTUNfSU5JVF9OU0JBID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIC8qIENoZWNrIGlmIE5TQkEgdmFsdWUgd2l0aCBjdXJyZW50IGFjdGl2ZSBOU0JBICovCisgICAgaWYoU0NVLT5GTlNBRERSICE9IEZNQ19TRUNVUkVfUk9NX1NJWkUpCisgICAgeworICAgICAgICAvKiBVbmxvY2sgUHJvdGVjdGVkIFJlZ2lzdGVyICovCisgICAgICAgIFNZU19VbmxvY2tSZWcoKTsKKworICAgICAgICAvKiBFbmFibGUgSVNQIGFuZCBjb25maWcgdXBkYXRlICovCisgICAgICAgIEZNQy0+SVNQQ1RMID0gRk1DX0lTUENUTF9JU1BFTl9Nc2sgfCBGTUNfSVNQQ1RMX0NGR1VFTl9Nc2s7CisKKyAgICAgICAgLyogQ29uZmlnIEJhc2Ugb2YgTlNCQSAqLworICAgICAgICBGTUMtPklTUEFERFIgPSAweDIwMDgwMDsKKworICAgICAgICAvKiBSZWFkIE5vbi1zZWN1cmUgYmFzZSBhZGRyZXNzIGNvbmZpZyAqLworICAgICAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUkVBRDsKKyAgICAgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKyAgICAgICAgd2hpbGUoRk1DLT5JU1BUUkcpOworCisgICAgICAgIC8qIFNldHRpbmcgTlNCQSB3aGVuIGl0IGlzIGVtcHR5ICovCisgICAgICAgIGlmKEZNQy0+SVNQREFUID09IDB4ZmZmZmZmZmZ1bCkKKyAgICAgICAgeworICAgICAgICAgICAgRk1DLT5JU1BEQVQgPSBGTUNfU0VDVVJFX1JPTV9TSVpFOworICAgICAgICAgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1BST0dSQU07CisgICAgICAgICAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworICAgICAgICAgICAgd2hpbGUoRk1DLT5JU1BUUkcpOworCisgICAgICAgICAgICAvKiBGb3JjZSBDaGlwIFJlc2V0IHRvIHZhbGlkIG5ldyBzZXR0aW5nICovCisgICAgICAgICAgICBTWVMtPklQUlNUMCA9IFNZU19JUFJTVDBfQ0hJUFJTVF9Nc2s7CisgICAgICAgIH0KKworICAgICAgICAvKiBGYXRhbCBFcnJvcjoKKyAgICAgICAgICAgRk1DIE5TQkEgc2V0dGluZyBpcyBkaWZmZXJlbnQgdG8gRk1DX0lOSVRfTlNCQV9WQUwuCisgICAgICAgICAgIFVzZXIgbXVzdCBkb3VibGUgY29uZmlybSB3aGljaCBvbmUgaXMgd3JvbmcuCisKKyAgICAgICAgICAgSWYgdXNlciBuZWVkIHRvIGNoYW5nZSBOU0JBIGNvbmZpZyBvZiBGTUMsIHVzZXIgbXVzdCBkbyBNYXNzLWVyYXNlIGJ5CisgICAgICAgICAgIElTUCBvciBJQ1AuCisgICAgICAgICovCisgICAgICAgIHdoaWxlKDEpOworICAgIH0KKworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKy8qCisvLyA8aD4gUGVyaXBoZXJhbCBTZWN1cmUgQXR0cmlidXRpb24gQ29uZmlndXJhdGlvbgorKi8KKworLyoKKyAgICBQTlNTRVQwCisqLworLyoKKy8vIE1vZHVsZSAwLi4zMQorLy8gICA8by45PiAgVVNCSCAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTM+ICBTRDAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTY+ICBFQkkgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI0PiAgUERNQTEgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKyovCisjZGVmaW5lIFNDVV9JTklUX1BOU1NFVDBfVkFMICAgICAgMHgwCisvKgorICAgIFBOU1NFVDEKKyovCisvKgorLy8gTW9kdWxlIDAuLjMxCisvLyAgIDxvLjE3PiAgQ1JDICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xOD4gIENSUFQgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKyovCisjZGVmaW5lIFNDVV9JTklUX1BOU1NFVDFfVkFMICAgICAgMHgwCisvKgorICAgIFBOU1NFVDIKKyovCisvKgorLy8gTW9kdWxlIDAuLjMxCisvLyAgIDxvLjE+ICBSVEMgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjM+ICBFQURDICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjU+ICBBQ01QMDEgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8KKy8vICAgPG8uNz4gIERBQyAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by44PiAgSTJTMCAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xMz4gIE9URyAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xNz4gIFRNUjIzICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxoPiBFUFdNCisvLyAgIDxvLjI0PiAgRVBXTTAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjU+ICBFUFdNMSAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yNj4gIEJQV00wICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI3PiAgQlBXTTEgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorKi8KKyNkZWZpbmUgU0NVX0lOSVRfUE5TU0VUMl9WQUwgICAgICAweDAKKy8qCisgICAgUE5TU0VUMworKi8KKy8qCisvLyBNb2R1bGUgMC4uMzEKKy8vICAgPGg+ICBTUEkKKy8vICAgPG8uMD4gIFFTUEkwICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE+ICBTUEkwICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yPiAgU1BJMSAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMz4gIFNQSTIgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjQ+ICBTUEkzICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisvLyAgIDxoPiBVQVJUCisvLyAgIDxvLjE2PiAgVUFSVDAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTc+ICBVQVJUMSAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xOD4gIFVBUlQyICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE5PiAgVUFSVDMgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjA+ICBVQVJUNCAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMT4gIFVBUlQ1ICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKyovCisjZGVmaW5lIFNDVV9JTklUX1BOU1NFVDNfVkFMICAgICAgMHgxMDAwNAorLyoKKyAgICBQTlNTRVQ0CisqLworLyoKKy8vIE1vZHVsZSAwLi4zMQorLy8gICA8aD4gSTJDCisvLyAgIDxvLjA+ICBJMkMwICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xPiAgSTJDMSAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yPiAgSTJDMiAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisvLyAgIDxoPiBTbWFydCBDYXJkCisvLyAgIDxvLjE2PiAgU0MwICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE3PiAgU0MxICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE4PiAgU0MyICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKyovCisjZGVmaW5lIFNDVV9JTklUX1BOU1NFVDRfVkFMICAgICAgMHgwCisvKgorICAgIFBOU1NFVDUKKyovCisvKgorLy8gTW9kdWxlIDAuLjMxCisvLyAgIDxvLjA+ICBDQU4wICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8aD4gUUVJCisvLyAgIDxvLjE2PiAgUUVJMCAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xNz4gIFFFSTEgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorLy8gICA8aD4gRUNBUAorLy8gICA8by4yMD4gIEVDQVAwICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMT4gIEVDQVAxICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKy8vICAgPG8uMjU+ICBUUk5HICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorKi8KKyNkZWZpbmUgU0NVX0lOSVRfUE5TU0VUNV9WQUwgICAgICAweDAKKy8qCisgICAgUE5TU0VUNgorKi8KKy8qCisvLyBNb2R1bGUgMC4uMzEKKy8vICAgPG8uMD4gIFVTQkQgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxoPiBVU0NJCisvLyAgIDxvLjE2PiAgVVNDSTAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTc+ICBVU0NJMSAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisqLworI2RlZmluZSBTQ1VfSU5JVF9QTlNTRVQ2X1ZBTCAgICAgIDB4MAorLyoKKy8vIDwvaD4KKyovCisKKworCisvKgorLy8gPGg+IEdQSU8gU2VjdXJlIEF0dHJpYnV0aW9uIENvbmZpZ3VyYXRpb24KKyovCisKKy8qCisgICAgSU9OU1NFVAorKi8KKy8qCisvLyBCaXQgMC4uMzEKKy8vICAgPG8uMD4gIFBBICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xPiAgUEIgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMj4gIFBDICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjM+ICBQRCAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uND4gIFBFICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjU+ICBQRiAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by42PiAgUEcgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uNz4gIFBIICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisqLworI2RlZmluZSBTQ1VfSU5JVF9JT05TU0VUX1ZBTCAgICAgIDB4MQorLyoKKy8vIDwvaD4KKyovCisKKworCisvKioKKyAgXGJyaWVmICAgU2V0dXAgU0NVIENvbmZpZ3VyYXRpb24gVW5pdAorICBcZGV0YWlscworCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNDVV9TZXR1cCh2b2lkKQoreworICAgIGludDMyX3QgaTsKKworICAgIFNDVS0+UE5TU0VUWzBdID0gU0NVX0lOSVRfUE5TU0VUMF9WQUw7CisgICAgU0NVLT5QTlNTRVRbMV0gPSBTQ1VfSU5JVF9QTlNTRVQxX1ZBTDsKKyAgICBTQ1UtPlBOU1NFVFsyXSA9IFNDVV9JTklUX1BOU1NFVDJfVkFMOworICAgIFNDVS0+UE5TU0VUWzNdID0gU0NVX0lOSVRfUE5TU0VUM19WQUw7CisgICAgU0NVLT5QTlNTRVRbNF0gPSBTQ1VfSU5JVF9QTlNTRVQ0X1ZBTDsKKyAgICBTQ1UtPlBOU1NFVFs1XSA9IFNDVV9JTklUX1BOU1NFVDVfVkFMOworICAgIFNDVS0+UE5TU0VUWzZdID0gU0NVX0lOSVRfUE5TU0VUNl9WQUw7CisKKyAgICBTQ1UtPklPTlNTRVQgPSBTQ1VfSU5JVF9JT05TU0VUX1ZBTDsKKworICAgIC8qIFNldCBOb24tc2VjdXJlIFNSQU0gKi8KKyAgICBmb3IoaSA9IDExOyBpID49IFNfREFUQV9TSVpFIC8gODE5MjsgaS0tKQorICAgIHsKKyAgICAgICAgU0NVLT5TUkFNTlNTRVQgfD0gKDFVIDw8IGkpOworICAgIH0KKworCit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorLy8gPGU+U2VjdXJlIEF0dHJpYnV0ZSBVbml0IChTQVUpIENvbnRyb2wKKyovCisjZGVmaW5lIFNBVV9JTklUX0NUUkwgMQorCisvKgorLy8gICA8cT4gRW5hYmxlIFNBVQorLy8gICA8aT4gVG8gZW5hYmxlIFNlY3VyZSBBdHRyaWJ1dGUgVW5pdCAoU0FVKS4KKyovCisjZGVmaW5lIFNBVV9JTklUX0NUUkxfRU5BQkxFIDEKKworLyoKKy8vICAgPG8+IEFsbCBNZW1vcnkgQXR0cmlidXRlIFdoZW4gU0FVIGlzIGRpc2FibGVkCisvLyAgICAgPDA9PiBBbGwgTWVtb3J5IGlzIFNlY3VyZQorLy8gICAgIDwxPT4gQWxsIE1lbW9yeSBpcyBOb24tU2VjdXJlCisvLyAgIDxpPiBUbyBzZXQgdGhlIEFMTE5TIGJpdCBpbiBTQVUgQ1RSTC4KKy8vICAgPGk+IFdoZW4gYWxsIE1lbW9yeSBpcyBOb24tU2VjdXJlIChBTExOUyBpcyAxKSwgSURBVSBjYW4gb3ZlcnJpZGUgbWVtb3J5IG1hcCBjb25maWd1cmF0aW9uLgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfQ1RSTF9BTExOUyAgMAorCisvKgorLy8gPC9lPgorKi8KKworCisvKgorLy8gPGg+RW5hYmxlIGFuZCBTZXQgU2VjdXJlL05vbi1TZWN1cmUgcmVnaW9uCisqLworI2RlZmluZSBTQVVfUkVHSU9OU19NQVggICA4ICAgICAgICAgICAgICAgICAvKiBNYXguIG51bWJlciBvZiBTQVUgcmVnaW9ucyAqLworCisvKgorLy8gICA8ZT5TQVUgUmVnaW9uIDAKKy8vICAgPGk+IFNldHVwIFNBVSBSZWdpb24gMAorKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9OMCAgICAwCisvKgorLy8gICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUMCAgICAgMHgwMDAzRjAwMCAgICAgIC8qIHN0YXJ0IGFkZHJlc3Mgb2YgU0FVIHJlZ2lvbiAwICovCisvKgorLy8gICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQwICAgICAgIDB4MDAwM0ZGRkYgICAgICAvKiBlbmQgYWRkcmVzcyBvZiBTQVUgcmVnaW9uIDAgKi8KKy8qCisvLyAgICAgPG8+UmVnaW9uIGlzCisvLyAgICAgICAgIDwwPT5Ob24tU2VjdXJlCisvLyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzAgICAgICAgMQorLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+U0FVIFJlZ2lvbiAxCisvLyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDEKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjEgICAgMAorLyoKKy8vICAgICA8bz5TdGFydCBBZGRyZXNzIDwwLTB4RkZGRkZGRTA+CisqLworI2RlZmluZSBTQVVfSU5JVF9TVEFSVDEgICAgIDB4MTAwNjAwMDAKKy8qCisvLyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDEgICAgICAgMHgxMDA3RkZGRgorLyoKKy8vICAgICA8bz5SZWdpb24gaXMKKy8vICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKy8vICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDMSAgICAgICAwCisvKgorLy8gICA8L2U+CisqLworCisvKgorLy8gICA8ZT5TQVUgUmVnaW9uIDIKKy8vICAgPGk+IFNldHVwIFNBVSBSZWdpb24gMgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9OMiAgICAwCisvKgorLy8gICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUMiAgICAgMHgyMDAwRjAwMAorLyoKKy8vICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5EMiAgICAgICAweDIwMDBGRkZGCisvKgorLy8gICAgIDxvPlJlZ2lvbiBpcworLy8gICAgICAgICA8MD0+Tm9uLVNlY3VyZQorLy8gICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0MyICAgICAgIDEKKy8qCisvLyAgIDwvZT4KKyovCisKKy8qCisvLyAgIDxlPlNBVSBSZWdpb24gMworLy8gICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiAzCisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT04zICAgIDAKKy8qCisvLyAgICAgPG8+U3RhcnQgQWRkcmVzcyA8MC0weEZGRkZGRkUwPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfU1RBUlQzICAgICAweDAwMDNGMDAwCisvKgorLy8gICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQzICAgICAgIDB4MDAwM0Y3RkYKKy8qCisvLyAgICAgPG8+UmVnaW9uIGlzCisvLyAgICAgICAgIDwwPT5Ob24tU2VjdXJlCisvLyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzMgICAgICAgMQorLyoKKy8vICAgPC9lPgorKi8KKworLyoKKyAgIDxlPlNBVSBSZWdpb24gNAorICAgPGk+IFNldHVwIFNBVSBSZWdpb24gNAorKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9ONCAgICAwCisvKgorICAgICA8bz5TdGFydCBBZGRyZXNzIDwwLTB4RkZGRkZGRTA+CisqLworI2RlZmluZSBTQVVfSU5JVF9TVEFSVDQgICAgIEZNQ19OT05fU0VDVVJFX0JBU0UgICAgICAvKiBzdGFydCBhZGRyZXNzIG9mIFNBVSByZWdpb24gNCAqLworCisvKgorICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5ENCAgICAgICAweDEwMDdGRkZGICAgICAgLyogZW5kIGFkZHJlc3Mgb2YgU0FVIHJlZ2lvbiA0ICovCisKKy8qCisgICAgIDxvPlJlZ2lvbiBpcworICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzQgICAgICAgMAorLyoKKyAgIDwvZT4KKyovCisKKy8qCisgICA8ZT5TQVUgUmVnaW9uIDUKKyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDUKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjUgICAgMQorCisvKgorICAgICA8bz5TdGFydCBBZGRyZXNzIDwwLTB4RkZGRkZGRTA+CisqLworI2RlZmluZSBTQVVfSU5JVF9TVEFSVDUgICAgIDB4MDA4MDdFMDAKKworLyoKKyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDUgICAgICAgMHgwMDgwN0ZGRgorCisvKgorICAgICA8bz5SZWdpb24gaXMKKyAgICAgICAgIDwwPT5Ob24tU2VjdXJlCisgICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0M1ICAgICAgIDEKKy8qCisgICA8L2U+CisqLworCisvKgorICAgPGU+U0FVIFJlZ2lvbiA2CisgICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiA2CisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT042ICAgIDAKKworLyoKKyAgICAgPG8+U3RhcnQgQWRkcmVzcyA8MC0weEZGRkZGRkUwPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfU1RBUlQ2ICAgICBOT05fU0VDVVJFX1NSQU1fQkFTRQorCisvKgorICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5ENiAgICAgICAweDMwMDE3RkZGCisKKy8qCisgICAgIDxvPlJlZ2lvbiBpcworICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzYgICAgICAgMAorLyoKKyAgIDwvZT4KKyovCisKKy8qCisgICA8ZT5TQVUgUmVnaW9uIDcKKyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDcKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjcgICAgMAorCisvKgorICAgICA8bz5TdGFydCBBZGRyZXNzIDwwLTB4RkZGRkZGRTA+CisqLworI2RlZmluZSBTQVVfSU5JVF9TVEFSVDcgICAgIDB4NTAwMDAwMDAKKworLyoKKyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDcgICAgICAgMHg1RkZGRkZGRgorCisvKgorICAgICA8bz5SZWdpb24gaXMKKyAgICAgICAgIDwwPT5Ob24tU2VjdXJlCisgICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0M3ICAgICAgIDAKKy8qCisgICA8L2U+CisqLworCisvKgorLy8gPC9oPgorKi8KKworLyoKKy8vIDxlPlNldHVwIGJlaGF2aW9yIG9mIFNsZWVwIGFuZCBFeGNlcHRpb24gSGFuZGxpbmcKKyovCisjZGVmaW5lIFNDQl9DU1JfQUlSQ1JfSU5JVCAgMQorCisvKgorLy8gICA8bz4gRGVlcCBTbGVlcCBjYW4gYmUgZW5hYmxlZCBieQorLy8gICAgIDwwPT5TZWN1cmUgYW5kIE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgICA8MT0+U2VjdXJlIHN0YXRlIG9ubHkKKy8vICAgPGk+IFZhbHVlIGZvciBTQ0ItPkNTUiByZWdpc3RlciBiaXQgREVFUFNMRUVQUworKi8KKyNkZWZpbmUgU0NCX0NTUl9ERUVQU0xFRVBTX1ZBTCAgMAorCisvKgorLy8gICA8bz5TeXN0ZW0gcmVzZXQgcmVxdWVzdCBhY2Nlc3NpYmxlIGZyb20KKy8vICAgICA8MD0+IFNlY3VyZSBhbmQgTm9uLVNlY3VyZSBzdGF0ZQorLy8gICAgIDwxPT4gU2VjdXJlIHN0YXRlIG9ubHkKKy8vICAgPGk+IFZhbHVlIGZvciBTQ0ItPkFJUkNSIHJlZ2lzdGVyIGJpdCBTWVNSRVNFVFJFUVMKKyovCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUVNfVkFMICAwCisKKy8qCisvLyAgIDxvPlByaW9yaXR5IG9mIE5vbi1TZWN1cmUgZXhjZXB0aW9ucyBpcworLy8gICAgIDwwPT4gTm90IGFsdGVyZWQKKy8vICAgICA8MT0+IExvd2VyZWQgdG8gMHg4MC0weEZGCisvLyAgIDxpPiBWYWx1ZSBmb3IgU0NCLT5BSVJDUiByZWdpc3RlciBiaXQgUFJJUworKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1BSSVNfVkFMICAgICAgMAorCisvKiBBc3NpZ24gSGFyZEZhdWx0IHRvIGJlIGFsd2F5cyBzZWN1cmUgZm9yIHNhZmUgKi8KKyNkZWZpbmUgU0NCX0FJUkNSX0JGSEZOTUlOU19WQUwgMAorCisvKgorLy8gPC9lPgorKi8KKworCisvKgorLy8gPGg+QXNzaWduIEludGVycnVwdCB0byBTZWN1cmUgb3IgTm9uLXNlY3VyZSBWZWN0b3IKKyovCisKKworLyoKKyAgICBJbml0aWFsaXplIElUTlMgMCAoSW50ZXJydXB0cyAwLi4zMSkKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TMCAgICAxCisvKgorLy8gQk9ET1VUICAgICAgIEFsd2F5cyBzZWN1cmUKKy8vIElSQyAgICAgICAgICBBbHdheXMgc2VjdXJlCisvLyBQV1JXVV8gICAgICAgQWx3YXlzIHNlY3VyZQorLy8gU1JBTV9QRVJSICAgIEFsd2F5cyBzZWN1cmUKKy8vIENMS0ZBSUwgICAgICBBbHdheXMgc2VjdXJlCisKKy8vICAgPG8uNj4gIFJUQyAgICAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uNz4gIFRBTVBFUiAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vIFdEVCAgQWx3YXlzIHNlY3VyZQorLy8gV1dEVCBBbHdheXMgc2VjdXJlCisvLyAgIDxoPiBFSU5UCisvLyAgIDxvLjEwPiBFSU5UMCAgICAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjExPiBFSU5UMSAgICAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjEyPiBFSU5UMiAgICAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjEzPiBFSU5UMyAgICAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE0PiBFSU5UNCAgICAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE1PiBFSU5UNSAgICAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKy8vICAgPGg+IEdQSU8KKy8vICAgPG8uMTY+IEdQQSAgICAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTc+IEdQQiAgICAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTg+IEdQQyAgICAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTk+IEdQRCAgICAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjA+IEdQRSAgICAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjE+IEdQRiAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisvLyAgIDxvLjIyPiBRU1BJMCAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjM+IFNQSTAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8aD4gRVBXTQorLy8gICA8by4yND4gQlJBS0UwICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI1PiBFUFdNMF9QMCAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjY+IEVQV00wX1AxICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yNz4gRVBXTTBfUDIgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI4PiBCUkFLRTEgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjk+IEVQV00xX1AwICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4zMD4gRVBXTTFfUDEgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjMxPiBFUFdNMV9QMiAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorLy8KKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TMF9WQUwgICAgICAweDQwMDAwCisKKy8qCisgICAgSW5pdGlhbGl6ZSBJVE5TIDEgKEludGVycnVwdHMgMC4uMzEpCisqLworI2RlZmluZSBOVklDX0lOSVRfSVROUzEgICAgMQorLyoKKy8vICAgPGg+IFRJTUVSCisvLyBUTVIwIEFsd2F5cyBzZWN1cmUKKy8vIFRNUjEgQWx3YXlzIHNlY3VyZQorLy8gICA8by4yPiAgVE1SMiAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjM+ICBUTVIzICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorLy8gICA8by40PiAgVUFSVDAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjU+ICBVQVJUMSAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uNj4gIEkyQzAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by43PiAgSTJDMSAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyBQRE1BMCBpcyBzZWN1cmUgb25seQorLy8gICA8by45PiAgREFDICAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjEwPiBFQURDMCAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTE+IEVBREMxICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xMj4gQUNNUDAxICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisKKy8vICAgPG8uMTQ+IEVBREMyICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xNT4gRUFEQzMgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE2PiBVQVJUMiAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTc+IFVBUlQzICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorCisvLyAgIDxvLjE5PiBTUEkxICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjA+IFNQSTIgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMT4gVVNCRCAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjIyPiBVU0JIICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjM+IFVTQk9URyAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yND4gQ0FOMCAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisKKy8vICAgPGg+IFNtYXJ0IENhcmQKKy8vICAgPG8uMjY+IFNDMCAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yNz4gU0MxICAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI4PiBTQzIgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorCisvLyAgIDxvLjMwPiBTUEkzICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKworLy8KKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TMV9WQUwgICAgICAweDEwCisKKy8qCisgICAgSW5pdGlhbGl6ZSBJVE5TIDIgKEludGVycnVwdHMgMC4uMzEpCisqLworI2RlZmluZSBOVklDX0lOSVRfSVROUzIgICAgMQorLyoKKy8vICAgPG8uMD4gIFNESDAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorCisKKworLy8gICA8by40PiAgSTJTMCAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisKKy8vCisvLyAgIDxvLjc+ICBDUllQVE8gICAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjg+ICBHUEcgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uOT4gIEVJTlQ2ICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xMD4gVUFSVDQgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjExPiBVQVJUNSAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTI+IFVTQ0kwICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xMz4gVVNDSTEgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE0PiBCUFdNMCAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTU+IEJQV00xICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorCisKKy8vICAgPG8uMTg+IEkyQzIgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorCisvLyAgIDxvLjIwPiBRRUkwICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjE+IFFFSTEgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMj4gRUNBUDAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjIzPiBFQ0FQMSAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjQ+IEdQSCAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yNT4gRUlOVDcgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisKKworLy8gICA8by4yOD4gVVNCSCAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisKKworCisvLworKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMyX1ZBTCAgICAgIDB4MAorCisKKy8qCisgICAgSW5pdGlhbGl6ZSBJVE5TIDMgKEludGVycnVwdHMgMC4uMzEpCisqLworI2RlZmluZSBOVklDX0lOSVRfSVROUzMgICAgMQorLyoKKy8vICAgPG8uMj4gIFBETUExICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gU0NVICBBbHdheXMgc2VjdXJlCisvLworLy8gICA8by41PiAgVFJORyAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisqLworI2RlZmluZSBOVklDX0lOSVRfSVROUzNfVkFMICAgICAgMHgwCisKKworCisvKgorLy8gPC9oPgorKi8KKworCisKKy8qCisgICAgbWF4IDEyOCBTQVUgcmVnaW9ucy4KKyAgICBTQVUgcmVnaW9ucyBhcmUgZGVmaW5lZCBpbiBwYXJ0aXRpb24uaAorICovCisKKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9OKG4pIFwKKyAgICBTQVUtPlJOUiAgPSAgKG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBTQVVfUk5SX1JFR0lPTl9Nc2spOyBcCisgICAgU0FVLT5SQkFSID0gIChTQVVfSU5JVF9TVEFSVCMjbiAgICAgICAgICAgICAgICAgICAgICYgU0FVX1JCQVJfQkFERFJfTXNrKTsgXAorICAgIFNBVS0+UkxBUiA9ICAoU0FVX0lOSVRfRU5EIyNuICAgICAgICAgICAgICAgICAgICAgICAmIFNBVV9STEFSX0xBRERSX01zaykgfCBcCisgICAgICAgICAgICAgICAgKChTQVVfSU5JVF9OU0MjI24gPDwgU0FVX1JMQVJfTlNDX1BvcykgICYgU0FVX1JMQVJfTlNDX01zaykgICB8IDFVCisKKy8qKgorICBcYnJpZWYgICBTZXR1cCBhIFNBVSBSZWdpb24KKyAgXGRldGFpbHMgV3JpdGVzIHRoZSByZWdpb24gaW5mb3JtYXRpb24gY29udGFpbmVkIGluIFNBVV9SZWdpb24gdG8gdGhlCisgICAgICAgICAgIHJlZ2lzdGVycyBTQVVfUk5SLCBTQVVfUkJBUiwgYW5kIFNBVV9STEFSCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRaX1NBVV9TZXR1cCh2b2lkKQoreworCisjaWYgZGVmaW5lZCAoX19TQVVfUFJFU0VOVCkgJiYgKF9fU0FVX1BSRVNFTlQgPT0gMVUpCisKKyNpZiBkZWZpbmVkIChTQVVfSU5JVF9SRUdJT04wKSAmJiAoU0FVX0lOSVRfUkVHSU9OMCA9PSAxVSkKKyAgICBTQVVfSU5JVF9SRUdJT04oMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNBVV9JTklUX1JFR0lPTjEpICYmIChTQVVfSU5JVF9SRUdJT04xID09IDFVKQorICAgIFNBVV9JTklUX1JFR0lPTigxKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9OMikgJiYgKFNBVV9JTklUX1JFR0lPTjIgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDIpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQVVfSU5JVF9SRUdJT04zKSAmJiAoU0FVX0lOSVRfUkVHSU9OMyA9PSAxVSkKKyAgICBTQVVfSU5JVF9SRUdJT04oMyk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNBVV9JTklUX1JFR0lPTjQpICYmIChTQVVfSU5JVF9SRUdJT040ID09IDFVKQorICAgIFNBVV9JTklUX1JFR0lPTig0KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9ONSkgJiYgKFNBVV9JTklUX1JFR0lPTjUgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDUpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQVVfSU5JVF9SRUdJT042KSAmJiAoU0FVX0lOSVRfUkVHSU9ONiA9PSAxVSkKKyAgICBTQVVfSU5JVF9SRUdJT04oNik7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNBVV9JTklUX1JFR0lPTjcpICYmIChTQVVfSU5JVF9SRUdJT043ID09IDFVKQorICAgIFNBVV9JTklUX1JFR0lPTig3KTsKKyNlbmRpZgorCisgICAgLyogcmVwZWF0IHRoaXMgZm9yIGFsbCBwb3NzaWJsZSBTQVUgcmVnaW9ucyAqLworCisKKyNpZiBkZWZpbmVkIChTQVVfSU5JVF9DVFJMKSAmJiAoU0FVX0lOSVRfQ1RSTCA9PSAxVSkKKyAgICBTQVUtPkNUUkwgPSAoKFNBVV9JTklUX0NUUkxfRU5BQkxFIDw8IFNBVV9DVFJMX0VOQUJMRV9Qb3MpICYgU0FVX0NUUkxfRU5BQkxFX01zaykgfAorICAgICAgICAgICAgICAgICgoU0FVX0lOSVRfQ1RSTF9BTExOUyAgPDwgU0FVX0NUUkxfQUxMTlNfUG9zKSAgJiBTQVVfQ1RSTF9BTExOU19Nc2spICAgOworI2VuZGlmCisKKyNlbmRpZiAvKiBkZWZpbmVkIChfX1NBVV9QUkVTRU5UKSAmJiAoX19TQVVfUFJFU0VOVCA9PSAxVSkgKi8KKworI2lmIGRlZmluZWQgKFNDQl9DU1JfQUlSQ1JfSU5JVCkgJiYgKFNDQl9DU1JfQUlSQ1JfSU5JVCA9PSAxVSkKKyAgICBTQ0ItPlNDUiAgID0gKFNDQi0+U0NSICAgJiB+KFNDQl9TQ1JfU0xFRVBERUVQU19Nc2spKSB8CisgICAgICAgICAgICAgICAgICgoU0NCX0NTUl9ERUVQU0xFRVBTX1ZBTCAgICAgPDwgU0NCX1NDUl9TTEVFUERFRVBTX1BvcykgICAgICYgU0NCX1NDUl9TTEVFUERFRVBTX01zayk7CisKKy8vICAgIFNDQi0+QUlSQ1IgPSAoU0NCLT5BSVJDUiAmIH4oU0NCX0FJUkNSX1NZU1JFU0VUUkVRU19Nc2sgfCBTQ0JfQUlSQ1JfQkZIRk5NSU5TX01zayB8ICBTQ0JfQUlSQ1JfUFJJU19Nc2spKSB8CisvLyAgICAgICAgICAgICAgICAgKChTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFTX1ZBTCA8PCBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFTX1BvcykgJiBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFTX01zaykgfAorLy8gICAgICAgICAgICAgICAgICgoU0NCX0FJUkNSX0JGSEZOTUlOU19WQUwgICAgPDwgU0NCX0FJUkNSX0JGSEZOTUlOU19Qb3MpICAgICYgU0NCX0FJUkNSX0JGSEZOTUlOU19Nc2spICAgIHwKKy8vICAgICAgICAgICAgICAgICAoKFNDQl9BSVJDUl9QUklTX1ZBTCAgICAgICAgIDw8IFNDQl9BSVJDUl9QUklTX1BvcykgICAgICAgICAmIFNDQl9BSVJDUl9QUklTX01zayk7CisKKyAgICBTQ0ItPkFJUkNSID0gKDB4MDVGQSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAoKFNDQl9BSVJDUl9TWVNSRVNFVFJFUVNfVkFMIDw8IFNDQl9BSVJDUl9TWVNSRVNFVFJFUVNfUG9zKSAmIFNDQl9BSVJDUl9TWVNSRVNFVFJFUVNfTXNrKSB8CisgICAgICAgICAgICAgICAgICgoU0NCX0FJUkNSX0JGSEZOTUlOU19WQUwgICAgPDwgU0NCX0FJUkNSX0JGSEZOTUlOU19Qb3MpICAgICYgU0NCX0FJUkNSX0JGSEZOTUlOU19Nc2spICAgIHwKKyAgICAgICAgICAgICAgICAgKChTQ0JfQUlSQ1JfUFJJU19WQUwgICAgICAgICA8PCBTQ0JfQUlSQ1JfUFJJU19Qb3MpICAgICAgICAgJiBTQ0JfQUlSQ1JfUFJJU19Nc2spOworCisKKworI2VuZGlmIC8qIGRlZmluZWQgKFNDQl9DU1JfQUlSQ1JfSU5JVCkgJiYgKFNDQl9DU1JfQUlSQ1JfSU5JVCA9PSAxVSkgKi8KKworI2lmIGRlZmluZWQgKFNDQl9JQ1NSX0lOSVQpICYmIChTQ0JfSUNTUl9JTklUID09IDFVKQorICAgIFNDQi0+SUNTUiAgPSAoU0NCLT5JQ1NSICAmIH4oU0NCX0lDU1JfU1RUTlNfTXNrKSkgfAorICAgICAgICAgICAgICAgICAoKFNDQl9JQ1NSX1NUVE5TX1ZBTCAgICAgICAgIDw8IFNDQl9JQ1NSX1NUVE5TX1BvcykgICAgICAgICAmIFNDQl9JQ1NSX1NUVE5TX01zayk7CisjZW5kaWYgLyogZGVmaW5lZCAoU0NCX0lDU1JfSU5JVCkgJiYgKFNDQl9JQ1NSX0lOSVQgPT0gMVUpICovCisKKyNpZiBkZWZpbmVkIChOVklDX0lOSVRfSVROUzApICYmIChOVklDX0lOSVRfSVROUzAgPT0gMVUpCisgICAgTlZJQy0+SVROU1swXSA9IE5WSUNfSU5JVF9JVE5TMF9WQUw7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE5WSUNfSU5JVF9JVE5TMSkgJiYgKE5WSUNfSU5JVF9JVE5TMSA9PSAxVSkKKyAgICBOVklDLT5JVE5TWzFdID0gTlZJQ19JTklUX0lUTlMxX1ZBTDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlMyKSAmJiAoTlZJQ19JTklUX0lUTlMyID09IDFVKQorICAgIE5WSUMtPklUTlNbMl0gPSBOVklDX0lOSVRfSVROUzJfVkFMOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChOVklDX0lOSVRfSVROUzMpICYmIChOVklDX0lOSVRfSVROUzMgPT0gMVUpCisgICAgTlZJQy0+SVROU1szXSA9IE5WSUNfSU5JVF9JVE5TM19WQUw7CisjZW5kaWYKKworCisgICAgLyogcmVwZWF0IHRoaXMgZm9yIGFsbCBwb3NzaWJsZSBJVE5TIGVsZW1lbnRzICovCisKK30KKworCisjZW5kaWYgIC8qIFBBUlRJVElPTl9NMjM1MSAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvcGFydGl0aW9uL3JlZ2lvbl9kZWZzLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvcGFydGl0aW9uL3JlZ2lvbl9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2Y2JiYQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9wYXJ0aXRpb24vcmVnaW9uX2RlZnMuaApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX19SRUdJT05fREVGU19IX18KKyNkZWZpbmUgX19SRUdJT05fREVGU19IX18KKworI2luY2x1ZGUgImZsYXNoX2xheW91dC5oIgorCisjZGVmaW5lIEJMMl9IRUFQX1NJWkUgICAgICAgICAgICgweDAwMDEwMDApCisjZGVmaW5lIEJMMl9NU1BfU1RBQ0tfU0laRSAgICAgICgweDAwMDE4MDApCisKKyNkZWZpbmUgU19IRUFQX1NJWkUgICAgICAgICAgICAgKDB4MDAwMTAwMCkKKyNkZWZpbmUgU19NU1BfU1RBQ0tfU0laRV9JTklUICAgKDB4MDAwMDQwMCkKKyNkZWZpbmUgU19NU1BfU1RBQ0tfU0laRSAgICAgICAgKDB4MDAwMDgwMCkKKyNkZWZpbmUgU19QU1BfU1RBQ0tfU0laRSAgICAgICAgKDB4MDAwMDgwMCkKKworI2RlZmluZSBOU19IRUFQX1NJWkUgICAgICAgICAgICAoMHgwMDAxMDAwKQorI2RlZmluZSBOU19NU1BfU1RBQ0tfU0laRSAgICAgICAoMHgwMDAwODAwKQorI2RlZmluZSBOU19QU1BfU1RBQ0tfU0laRSAgICAgICAoMHgwMDAwODAwKQorCisvKiBUaGlzIHNpemUgb2YgYnVmZmVyIGlzIGJpZyBlbm91Z2ggdG8gc3RvcmUgYW4gYXR0ZXN0YXRpb24KKyAqIHRva2VuIHByb2R1Y2VkIGJ5IGluaXRpYWwgYXR0ZXN0YXRpb24gc2VydmljZQorICovCisjZGVmaW5lIFBTQV9JTklUSUFMX0FUVEVTVF9UT0tFTl9NQVhfU0laRSAgICgweDI1MCkKKworLyogTVBDIGdyYW51bGFyaXR5IGlzIDEyOCBLQiBvbiBBTjUxOSBNUFMyIEZQR0EgaW1hZ2UuIEFsaWdubWVudAorICogb2YgcGFydGl0aW9ucyBpcyBkZWZpbmVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIGNvbnN0cmFpbnQuCisgKi8KKworI2lmZGVmIEJMMgorI2lmbmRlZiBMSU5LX1RPX1NFQ09OREFSWV9QQVJUSVRJT04KKyNkZWZpbmUgU19JTUFHRV9QUklNQVJZX1BBUlRJVElPTl9PRkZTRVQgICAoRkxBU0hfQVJFQV8wX09GRlNFVCkKKyNkZWZpbmUgU19JTUFHRV9TRUNPTkRBUllfUEFSVElUSU9OX09GRlNFVCAoRkxBU0hfQVJFQV8wX09GRlNFVCkKKyNlbHNlCisjZXJyb3IgIk5vIHNlY29uZGFyeSBwYXJ0aXRpb24gc3VwcG9ydGVkISIKKyNlbmRpZiAvKiAhTElOS19UT19TRUNPTkRBUllfUEFSVElUSU9OICovCisjZWxzZQorI2RlZmluZSBTX0lNQUdFX1BSSU1BUllfUEFSVElUSU9OX09GRlNFVCAoMHgwKQorI2VuZGlmIC8qIEJMMiAqLworCisjaWZuZGVmIExJTktfVE9fU0VDT05EQVJZX1BBUlRJVElPTgorI2RlZmluZSBOU19JTUFHRV9QUklNQVJZX1BBUlRJVElPTl9PRkZTRVQgKEZMQVNIX0FSRUFfMF9PRkZTRVQgKyBGTEFTSF9TX1BBUlRJVElPTl9TSVpFKQorI2Vsc2UKKyNlcnJvciAiTm8gc2Vjb25kYXJ5IHBhcnRpdGlvbiBzdXBwb3J0ZWQhIgorI2VuZGlmIC8qICFMSU5LX1RPX1NFQ09OREFSWV9QQVJUSVRJT04gKi8KKworLyogQm9vdCBwYXJ0aXRpb24gc3RydWN0dXJlIGlmIE1DVUJvb3QgaXMgdXNlZDoKKyAqIDB4MF8wMDAwIEJvb3Rsb2FkZXIgaGVhZGVyCisgKiAweDBfMDQwMCBJbWFnZSBhcmVhCisgKiAweDdfMDAwMCBUcmFpbGVyCisgKi8KKy8qIElNQUdFX0NPREVfU0laRSBpcyB0aGUgc3BhY2UgYXZhaWxhYmxlIGZvciB0aGUgc29mdHdhcmUgYmluYXJ5IGltYWdlLgorICogSXQgaXMgbGVzcyB0aGFuIHRoZSBGTEFTSF9TX1BBUlRJVElPTl9TSVpFICsgRkxBU0hfTlNfUEFSVElUSU9OX1NJWkUKKyAqIGJlY2F1c2Ugd2UgcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGltYWdlIGhlYWRlciBhbmQgdHJhaWxlciBpbnRyb2R1Y2VkCisgKiBieSB0aGUgYm9vdGxvYWRlci4KKyAqLworI2lmZGVmIEJMMgorI2RlZmluZSBCTDJfSEVBREVSX1NJWkUgICAgICAoMHg0MDApICAgICAgIC8qIDEgS0IgKi8KKyNkZWZpbmUgQkwyX1RSQUlMRVJfU0laRSAgICAgKDB4ODAwKSAgICAgICAvKiAyIEtCICovCisjZWxzZQorLyogTm8gaGVhZGVyIGlmIG5vIGJvb3Rsb2FkZXIsIGJ1dCBrZWVwIElNQUdFX0NPREVfU0laRSB0aGUgc2FtZSAqLworI2RlZmluZSBCTDJfSEVBREVSX1NJWkUgICAgICAoMHgwKQorI2RlZmluZSBCTDJfVFJBSUxFUl9TSVpFICAgICAoMHg4MDApCisjZW5kaWYgLyogQkwyICovCisKKyNkZWZpbmUgSU1BR0VfU19DT0RFX1NJWkUgICAgKEZMQVNIX1NfUEFSVElUSU9OX1NJWkUgLSBCTDJfSEVBREVSX1NJWkUgLSBCTDJfVFJBSUxFUl9TSVpFKQorI2RlZmluZSBJTUFHRV9OU19DT0RFX1NJWkUgICAoRkxBU0hfTlNfUEFSVElUSU9OX1NJWkUgLSBCTDJfSEVBREVSX1NJWkUgLSBCTDJfVFJBSUxFUl9TSVpFKQorCisjZGVmaW5lIENNU0VfVkVORUVSX1JFR0lPTl9TSVpFICAgICAoMHgzNDApCisKKy8qIEFsaWFzIGRlZmluaXRpb25zIGZvciBzZWN1cmUgYW5kIG5vbi1zZWN1cmUgYXJlYXMqLworI2RlZmluZSBTX1JPTV9BTElBUyh4KSAgKFNfUk9NX0FMSUFTX0JBU0UgKyAoeCkpCisjZGVmaW5lIE5TX1JPTV9BTElBUyh4KSAoTlNfUk9NX0FMSUFTX0JBU0UgKyAoeCkpCisKKyNkZWZpbmUgU19SQU1fQUxJQVMoeCkgIChTX1JBTV9BTElBU19CQVNFICsgKHgpKQorI2RlZmluZSBOU19SQU1fQUxJQVMoeCkgKE5TX1JBTV9BTElBU19CQVNFICsgKHgpKQorCisvKiBTZWN1cmUgcmVnaW9ucyAqLworI2RlZmluZSBTX0lNQUdFX1BSSU1BUllfQVJFQV9PRkZTRVQgXAorICAgICAgICAgICAgICAgICAgICAgICAgKFNfSU1BR0VfUFJJTUFSWV9QQVJUSVRJT05fT0ZGU0VUICsgQkwyX0hFQURFUl9TSVpFKSAgICAgICAvKiAweDg0MDAgKi8KKyNkZWZpbmUgU19DT0RFX1NUQVJUICAgIChTX1JPTV9BTElBUyhTX0lNQUdFX1BSSU1BUllfQVJFQV9PRkZTRVQpKSAgICAgICAgICAgICAgICAgLyogMHg4NDAwICovCisjZGVmaW5lIFNfQ09ERV9TSVpFICAgICAoSU1BR0VfU19DT0RFX1NJWkUgLSBDTVNFX1ZFTkVFUl9SRUdJT05fU0laRSkKKyNkZWZpbmUgU19DT0RFX0xJTUlUICAgIChTX0NPREVfU1RBUlQgKyBTX0NPREVfU0laRSAtIDEpCisKKyNkZWZpbmUgU19EQVRBX1NUQVJUICAgIChTX1JBTV9BTElBUygweDApKQorI2RlZmluZSBTX0RBVEFfU0laRSAgICAgKDY0ICogMTAyNCkKKyNkZWZpbmUgU19EQVRBX0xJTUlUICAgIChTX0RBVEFfU1RBUlQgKyBTX0RBVEFfU0laRSAtIDEpCisKKy8qIENNU0UgVmVuZWVycyByZWdpb24gKi8KKyNkZWZpbmUgQ01TRV9WRU5FRVJfUkVHSU9OX1NUQVJUICAoU19DT0RFX0xJTUlUICsgMSkKKworLyogTm9uLXNlY3VyZSByZWdpb25zICovCisjZGVmaW5lIE5TX0lNQUdFX1BSSU1BUllfQVJFQV9PRkZTRVQgXAorICAgICAgICAgICAgICAgICAgICAgICAgKE5TX0lNQUdFX1BSSU1BUllfUEFSVElUSU9OX09GRlNFVCArIEJMMl9IRUFERVJfU0laRSkKKyNkZWZpbmUgTlNfQ09ERV9TVEFSVCAgIChOU19ST01fQUxJQVMoTlNfSU1BR0VfUFJJTUFSWV9BUkVBX09GRlNFVCkpCisjZGVmaW5lIE5TX0NPREVfU0laRSAgICAoSU1BR0VfTlNfQ09ERV9TSVpFKQorI2RlZmluZSBOU19DT0RFX0xJTUlUICAgKE5TX0NPREVfU1RBUlQgKyBOU19DT0RFX1NJWkUgLSAxKQorCisjZGVmaW5lIE5TX0RBVEFfU1RBUlQgICAoTlNfUkFNX0FMSUFTKFNfREFUQV9TSVpFKSkKKyNkZWZpbmUgTlNfREFUQV9TSVpFICAgIChUT1RBTF9SQU1fU0laRSAtIFNfREFUQV9TSVpFKQorI2RlZmluZSBOU19EQVRBX0xJTUlUICAgKE5TX0RBVEFfU1RBUlQgKyBOU19EQVRBX1NJWkUgLSAxKQorCisvKiBOUyBwYXJ0aXRpb24gaW5mb3JtYXRpb24gaXMgdXNlZCBmb3IgTVBDIGFuZCBTQVUgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBOU19QQVJUSVRJT05fU1RBUlQgXAorICAgICAgICAgICAgKE5TX1JPTV9BTElBUyhOU19JTUFHRV9QUklNQVJZX1BBUlRJVElPTl9PRkZTRVQpKQorI2RlZmluZSBOU19QQVJUSVRJT05fU0laRSAoRkxBU0hfTlNfUEFSVElUSU9OX1NJWkUpCisKKy8qIFNlY29uZGFyeSBwYXJ0aXRpb24gZm9yIG5ldyBpbWFnZXMgaW4gY2FzZSBvZiBmaXJtd2FyZSB1cGdyYWRlICovCisjZGVmaW5lIFNFQ09OREFSWV9QQVJUSVRJT05fU1RBUlQgXAorICAgICAgICAgICAgKE5TX1JPTV9BTElBUyhTX0lNQUdFX1NFQ09OREFSWV9QQVJUSVRJT05fT0ZGU0VUKSkKKyNkZWZpbmUgU0VDT05EQVJZX1BBUlRJVElPTl9TSVpFIChGTEFTSF9TX1BBUlRJVElPTl9TSVpFICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX05TX1BBUlRJVElPTl9TSVpFKQorCisjaWZkZWYgQkwyCisvKiBCb290bG9hZGVyIHJlZ2lvbnMgKi8KKyNkZWZpbmUgQkwyX0NPREVfU1RBUlQgICAgKFNfUk9NX0FMSUFTKEZMQVNIX0FSRUFfQkwyX09GRlNFVCkpCisjZGVmaW5lIEJMMl9DT0RFX1NJWkUgICAgIChGTEFTSF9BUkVBX0JMMl9TSVpFKQorI2RlZmluZSBCTDJfQ09ERV9MSU1JVCAgICAoQkwyX0NPREVfU1RBUlQgKyBCTDJfQ09ERV9TSVpFIC0gMSkKKworI2RlZmluZSBCTDJfREFUQV9TVEFSVCAgICAoU19SQU1fQUxJQVMoMHgwKSkKKyNkZWZpbmUgQkwyX0RBVEFfU0laRSAgICAgKFRPVEFMX1JBTV9TSVpFKQorI2RlZmluZSBCTDJfREFUQV9MSU1JVCAgICAoQkwyX0RBVEFfU1RBUlQgKyBCTDJfREFUQV9TSVpFIC0gMSkKKyNlbmRpZiAvKiBCTDIgKi8KKworLyogU2hhcmVkIGRhdGEgYXJlYSBiZXR3ZWVuIGJvb3Rsb2FkZXIgYW5kIHJ1bnRpbWUgZmlybXdhcmUuCisgKiBTaGFyZWQgZGF0YSBhcmVhIGlzIGFsbG9jYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBSQU0sIGl0IGlzIG92ZXJsYXBwaW5nCisgKiB3aXRoIFRGLU0gU2VjdXJlIGNvZGUncyBNU1Agc3RhY2sKKyAqLworI2RlZmluZSBCT09UX1RGTV9TSEFSRURfREFUQV9CQVNFIFNfUkFNX0FMSUFTX0JBU0UKKyNkZWZpbmUgQk9PVF9URk1fU0hBUkVEX0RBVEFfU0laRSAoMHg0MDApCisjZGVmaW5lIEJPT1RfVEZNX1NIQVJFRF9EQVRBX0xJTUlUIChCT09UX1RGTV9TSEFSRURfREFUQV9CQVNFICsgQk9PVF9URk1fU0hBUkVEX0RBVEFfU0laRSAtIDEpCisKKyNlbmRpZiAvKiBfX1JFR0lPTl9ERUZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3BsYXRfdGVzdC5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3BsYXRfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNjU3MmEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvcGxhdF90ZXN0LmMKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOS0yMDIwLCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICovCisKKyNpbmNsdWRlICJ0aW1lcl9jbXNka19kcnYuaCIKKyNpbmNsdWRlICJ0Zm1fcGxhdF9kZWZzLmgiCisjaW5jbHVkZSAidGZtX3BsYXRfdGVzdC5oIgorI2luY2x1ZGUgImRldmljZV9kZWZpbml0aW9uLmgiCisKKyNkZWZpbmUgVVNFUkxFRF9NQVNLICAgICAgICAgICAgICAgICgweDMpCisjZGVmaW5lIEJUTl9XQUlUX0lOSVRfQ09VTlRFUl9WQUxVRSAoMTAwMDB1KQorI2RlZmluZSBUSU1FUl9SRUxPQURfVkFMVUUgICAgICAgICAgKDEyMDAwMDAwKQorCisvKioKKyAqIFxicmllZiBTdG9yZSB0aGUgc3RhdGUgb2YgdGhlIG1vY2tlZCBMRUQKKyAqCisgKiBUaGlzIHZhcmlhYmxlIGhhdmUgdG8gYmUgbGlua2VkIHRvIHRoZSBkYXRhIHNlY3Rpb24gb2YgdGhlIHBhcnRpdGlvbgorICogVEZNX1NQX0NPUkVfVEVTVCBzbyB0aGF0IGluIGNhc2Ugb2YgaW4gY2FzZSBvZiBpc29sYXRpb24gd2l0aGluIHRoZSBzZWN1cmUKKyAqIGRvbWFpbiB0aGUgQ29yZSBUZXN0IHNlcnZpY2UgY2FuIGFjY2VzcyBpdC4KKyAqLwordWludDMyX3QgbGVkX3N0YXR1cworICAgIFRGTV9MSU5LX1NFVF9SV19JTl9QQVJUSVRJT05fU0VDVElPTigiVEZNX1NQX0NPUkVfVEVTVCIpCisgICAgPSAweDAydTsKKworLyoqCisgKiBcYnJpZWYgU2ltdWxhdGUgdXNlciByZWFjdGlvbiB0aW1lCisgKi8KK3N0YXRpYyB2b2lkIGJ1c3lfd2FpdF90b19zaW11bGF0ZV91c2VyKHZvaWQpCit7CisgICAgdm9sYXRpbGUgdWludDMyX3QgY291bnRlciA9IEJUTl9XQUlUX0lOSVRfQ09VTlRFUl9WQUxVRTsKKyAgICB3aGlsZSAoY291bnRlcikKKyAgICB7CisgICAgICAgIC0tY291bnRlcjsKKyAgICB9Cit9CisKK3ZvaWQgdGZtX3BsYXRfdGVzdF93YWl0X3VzZXJfYnV0dG9uX3ByZXNzZWQodm9pZCkKK3sKKyAgICBidXN5X3dhaXRfdG9fc2ltdWxhdGVfdXNlcigpOworfQorCit2b2lkIHRmbV9wbGF0X3Rlc3Rfd2FpdF91c2VyX2J1dHRvbl9yZWxlYXNlZCh2b2lkKQoreworICAgIGJ1c3lfd2FpdF90b19zaW11bGF0ZV91c2VyKCk7Cit9CisKK3VpbnQzMl90IHRmbV9wbGF0X3Rlc3RfZ2V0X2xlZF9zdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gbGVkX3N0YXR1czsKK30KKwordm9pZCB0Zm1fcGxhdF90ZXN0X3NldF9sZWRfc3RhdHVzKHVpbnQzMl90IHN0YXR1cykKK3sKKyAgICBsZWRfc3RhdHVzID0gc3RhdHVzICYgVVNFUkxFRF9NQVNLOworfQorCit1aW50MzJfdCB0Zm1fcGxhdF90ZXN0X2dldF91c2VybGVkX21hc2sodm9pZCkKK3sKKyAgICByZXR1cm4gVVNFUkxFRF9NQVNLOworfQorCit2b2lkIHRmbV9wbGF0X3Rlc3Rfbm9uX3NlY3VyZV90aW1lcl9zdGFydCh2b2lkKQoreworICAgIGlmKCF0aW1lcl9jbXNka19pc19pbml0aWFsaXplZCgmQ01TREtfVElNRVIyX0RFVl9OUykpIHsKKyAgICAgICAgdGltZXJfY21zZGtfaW5pdCgmQ01TREtfVElNRVIyX0RFVl9OUyk7CisgICAgfQorCisgICAgdGltZXJfY21zZGtfc2V0X3JlbG9hZF92YWx1ZSgmQ01TREtfVElNRVIyX0RFVl9OUywgVElNRVJfUkVMT0FEX1ZBTFVFKTsKKyAgICB0aW1lcl9jbXNka19lbmFibGUoJkNNU0RLX1RJTUVSMl9ERVZfTlMpOworICAgIHRpbWVyX2Ntc2RrX2VuYWJsZV9pbnRlcnJ1cHQoJkNNU0RLX1RJTUVSMl9ERVZfTlMpOworfQorCit2b2lkIHRmbV9wbGF0X3Rlc3Rfbm9uX3NlY3VyZV90aW1lcl9zdG9wKHZvaWQpCit7CisgICAgdGltZXJfY21zZGtfZGlzYWJsZSgmQ01TREtfVElNRVIyX0RFVl9OUyk7CisgICAgdGltZXJfY21zZGtfZGlzYWJsZV9pbnRlcnJ1cHQoJkNNU0RLX1RJTUVSMl9ERVZfTlMpOworICAgIHRpbWVyX2Ntc2RrX2NsZWFyX2ludGVycnVwdCgmQ01TREtfVElNRVIyX0RFVl9OUyk7Cit9CisKK3ZvaWQgdGZtX3BsYXRfdGVzdF9zZWN1cmVfdGltZXJfc3RhcnQodm9pZCkKK3sKKyAgICBpZiAoIXRpbWVyX2Ntc2RrX2lzX2luaXRpYWxpemVkKCZDTVNES19USU1FUjBfREVWX1MpKSB7CisgICAgICAgIHRpbWVyX2Ntc2RrX2luaXQoJkNNU0RLX1RJTUVSMF9ERVZfUyk7CisgICAgfQorICAgIHRpbWVyX2Ntc2RrX3NldF9yZWxvYWRfdmFsdWUoJkNNU0RLX1RJTUVSMF9ERVZfUywgVElNRVJfUkVMT0FEX1ZBTFVFKTsKKyAgICB0aW1lcl9jbXNka19lbmFibGUoJkNNU0RLX1RJTUVSMF9ERVZfUyk7CisgICAgdGltZXJfY21zZGtfZW5hYmxlX2ludGVycnVwdCgmQ01TREtfVElNRVIwX0RFVl9TKTsKK30KKwordm9pZCB0Zm1fcGxhdF90ZXN0X3NlY3VyZV90aW1lcl9zdG9wKHZvaWQpCit7CisgICAgdGltZXJfY21zZGtfZGlzYWJsZSgmQ01TREtfVElNRVIwX0RFVl9TKTsKKyAgICB0aW1lcl9jbXNka19kaXNhYmxlX2ludGVycnVwdCgmQ01TREtfVElNRVIwX0RFVl9TKTsKKyAgICB0aW1lcl9jbXNka19jbGVhcl9pbnRlcnJ1cHQoJkNNU0RLX1RJTUVSMF9ERVZfUyk7Cit9CmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvcHJlbG9hZC5jbWFrZSBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9wcmVsb2FkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMGE4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvcHJlbG9hZC5jbWFrZQpAQCAtMCwwICsxLDIwIEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDIwMjAsIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIHByZWxvYWQuY21ha2UgaXMgdXNlZCB0byBzZXQgdGhpbmdzIHRoYXQgcmVsYXRlZCB0byB0aGUgcGxhdGZvcm0gdGhhdCBhcmUgYm90aAorIyBpbW11dGFibGUgYW5kIGdsb2JhbCwgd2hpY2ggaXMgdG8gc2F5IHRoZXkgc2hvdWxkIGFwcGx5IHRvIGFueSBraW5kIG9mIHByb2plY3QKKyMgdGhhdCB1c2VzIHRoaXMgcGxhdGZvcm0uIEluIHByYWN0aXNlIHRoaXMgaXMgbm9ybWFsbHkgY29tcGlsZXIgZGVmaW5pdGlvbnMgYW5kCisjIHZhcmlhYmxlcyByZWxhdGVkIHRvIGhhcmR3YXJlLgorCisjIFNldCBhcmNoaXRlY3R1cmUgYW5kIENQVQorc2V0KFRGTV9TWVNURU1fUFJPQ0VTU09SIGNvcnRleC1tMjMpCitzZXQoVEZNX1NZU1RFTV9BUkNISVRFQ1RVUkUgYXJtdjgtbS5iYXNlKQorCitzZXQoTUNVQk9PVF9JTUFHRV9OVU1CRVIgMSkKKworIyBSZWxvYWQgY29tcGlsZXIgdG8gZ2VuZXJhdGUgb3B0aW9ucyBmcm9tIHRoZSBDUFUgYW5kIGFyY2hpdGVjdHVyZQorX2NvbXBpbGVyX3JlbG9hZCgpCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvc2VydmljZXMvc3JjL3RmbV9wbGF0Zm9ybV9zeXN0ZW0uYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9zZXJ2aWNlcy9zcmMvdGZtX3BsYXRmb3JtX3N5c3RlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZmFmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvc2VydmljZXMvc3JjL3RmbV9wbGF0Zm9ybV9zeXN0ZW0uYwpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjAsIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKi8KKworI2luY2x1ZGUgInRmbV9wbGF0Zm9ybV9zeXN0ZW0uaCIKKyNpbmNsdWRlICJjbXNpcy5oIgorCit2b2lkIHRmbV9wbGF0Zm9ybV9oYWxfc3lzdGVtX3Jlc2V0KHZvaWQpCit7CisgICAgLyogUmVzZXQgdGhlIHN5c3RlbSAqLworICAgIE5WSUNfU3lzdGVtUmVzZXQoKTsKK30KKworZW51bSB0Zm1fcGxhdGZvcm1fZXJyX3QgdGZtX3BsYXRmb3JtX2hhbF9pb2N0bCh0Zm1fcGxhdGZvcm1faW9jdGxfcmVxX3QgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2ludmVjICAqaW5fdmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffb3V0dmVjICpvdXRfdmVjKQoreworICAgICh2b2lkKXJlcXVlc3Q7CisgICAgKHZvaWQpaW5fdmVjOworICAgICh2b2lkKW91dF92ZWM7CisKKyAgICAvKiBOb3QgbmVlZGVkIGZvciB0aGlzIHBsYXRmb3JtICovCisgICAgcmV0dXJuIFRGTV9QTEFURk9STV9FUlJfTk9UX1NVUFBPUlRFRDsKK30KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3NwbV9oYWwuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9zcG1faGFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk4Zjk4YgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9zcG1faGFsLmMKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCwgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJjbXNpcy5oIgorI2luY2x1ZGUgInRmbV9zcG1faGFsLmgiCisjaW5jbHVkZSAidGZtX3BsYXRmb3JtX2NvcmVfYXBpLmgiCisjaW5jbHVkZSAidGFyZ2V0X2NmZy5oIgorI2luY2x1ZGUgIkRyaXZlcl9NUEMuaCIKKyNpbmNsdWRlICJtcHVfYXJtdjhtX2Rydi5oIgorI2luY2x1ZGUgInJlZ2lvbl9kZWZzLmgiCisjaW5jbHVkZSAidXRpbGl0aWVzLmgiCisjaW5jbHVkZSAicmVnaW9uLmgiCisKKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKS9zaXplb2YoYXJyWzBdKSkKKworLyogSW1wb3J0IE1QQyBkcml2ZXIgKi8KK2V4dGVybiBBUk1fRFJJVkVSX01QQyBEcml2ZXJfU1JBTTFfTVBDOworCisvKiBHZXQgYWRkcmVzcyBvZiBtZW1vcnkgcmVnaW9ucyB0byBjb25maWd1cmUgTVBVICovCitleHRlcm4gY29uc3Qgc3RydWN0IG1lbW9yeV9yZWdpb25fbGltaXRzIG1lbW9yeV9yZWdpb25zOworCitzdHJ1Y3QgbXB1X2FybXY4bV9kZXZfdCBkZXZfbXB1X3MgPSB7IE1QVV9CQVNFIH07CisKK2VudW0gdGZtX3BsYXRfZXJyX3QgdGZtX3NwbV9oYWxfaW5pdF9pc29sYXRpb25faHcodm9pZCkKK3sKKyAgICBpbnQzMl90IHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgLyogQ29uZmlndXJlcyBub24tc2VjdXJlIG1lbW9yeSBzcGFjZXMgaW4gdGhlIHRhcmdldCAqLworICAgIHNhdV9hbmRfaWRhdV9jZmcoKTsKKyAgICByZXQgPSBtcGNfaW5pdF9jZmcoKTsKKyAgICBpZiAocmV0ICE9IEFSTV9EUklWRVJfT0spIHsKKyAgICAgICAgcmV0dXJuIFRGTV9QTEFUX0VSUl9TWVNURU1fRVJSOworICAgIH0KKyAgICBwcGNfaW5pdF9jZmcoKTsKKyAgICByZXR1cm4gVEZNX1BMQVRfRVJSX1NVQ0NFU1M7Cit9CisKK2VudW0gdGZtX3BsYXRfZXJyX3QgdGZtX3NwbV9oYWxfY29uZmlndXJlX2RlZmF1bHRfaXNvbGF0aW9uKAorICAgICAgICAgICAgICAgICAgdWludDMyX3QgcGFydGl0aW9uX2lkeCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0Zm1fc3BtX3BhcnRpdGlvbl9wbGF0Zm9ybV9kYXRhX3QgKnBsYXRmb3JtX2RhdGEpCit7CisgICAgYm9vbCBwcml2aWxlZ2VkID0gdGZtX2lzX3BhcnRpdGlvbl9wcml2aWxlZ2VkKHBhcnRpdGlvbl9pZHgpOworCisgICAgaWYgKCFwbGF0Zm9ybV9kYXRhKSB7CisgICAgICAgIHJldHVybiBURk1fUExBVF9FUlJfSU5WQUxJRF9JTlBVVDsKKyAgICB9CisKKyAgICBpZiAocGxhdGZvcm1fZGF0YS0+cGVyaXBoX3BwY19iYW5rICE9IFBQQ19TUF9ET19OT1RfQ09ORklHVVJFKSB7CisgICAgICAgIHBwY19jb25maWd1cmVfdG9fc2VjdXJlKHBsYXRmb3JtX2RhdGEtPnBlcmlwaF9wcGNfYmFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1fZGF0YS0+cGVyaXBoX3BwY19sb2MpOworICAgICAgICBpZiAocHJpdmlsZWdlZCkgeworICAgICAgICAgICAgcHBjX2Nscl9zZWN1cmVfdW5wcml2KHBsYXRmb3JtX2RhdGEtPnBlcmlwaF9wcGNfYmFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9kYXRhLT5wZXJpcGhfcHBjX2xvYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcGNfZW5fc2VjdXJlX3VucHJpdihwbGF0Zm9ybV9kYXRhLT5wZXJpcGhfcHBjX2JhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9kYXRhLT5wZXJpcGhfcHBjX2xvYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRGTV9QTEFUX0VSUl9TVUNDRVNTOworfQorCisjaWZkZWYgQ09ORklHX1RGTV9FTkFCTEVfTUVNT1JZX1BST1RFQ1QKKworI2RlZmluZSBNUFVfUkVHSU9OX1ZFTkVFUlMgICAgICAgICAgIDAKKyNkZWZpbmUgTVBVX1JFR0lPTl9URk1fVU5QUklWX0NPREUgICAxCisjZGVmaW5lIE1QVV9SRUdJT05fVEZNX1VOUFJJVl9EQVRBICAgMgorI2RlZmluZSBNUFVfUkVHSU9OX05TX1NUQUNLICAgICAgICAgIDMKKyNkZWZpbmUgUEFSVElUSU9OX1JFR0lPTl9STyAgICAgICAgICA0CisjZGVmaW5lIFBBUlRJVElPTl9SRUdJT05fUldfU1RBQ0sgICAgNQorI2RlZmluZSBQQVJUSVRJT05fUkVHSU9OX1BFUklQSCAgICAgIDYKKworUkVHSU9OX0RFQ0xBUkUoTG9hZCQkTFIkJCwgTFJfVkVORUVSLCAkJEJhc2UpOworUkVHSU9OX0RFQ0xBUkUoTG9hZCQkTFIkJCwgTFJfVkVORUVSLCAkJExpbWl0KTsKK1JFR0lPTl9ERUNMQVJFKEltYWdlJCQsIFRGTV9VTlBSSVZfQ09ERSwgJCRSTyQkQmFzZSk7CitSRUdJT05fREVDTEFSRShJbWFnZSQkLCBURk1fVU5QUklWX0NPREUsICQkUk8kJExpbWl0KTsKK1JFR0lPTl9ERUNMQVJFKEltYWdlJCQsIFRGTV9VTlBSSVZfREFUQSwgJCRSVyQkQmFzZSk7CitSRUdJT05fREVDTEFSRShJbWFnZSQkLCBURk1fVU5QUklWX0RBVEEsICQkWkkkJExpbWl0KTsKK1JFR0lPTl9ERUNMQVJFKEltYWdlJCQsIFRGTV9BUFBfQ09ERV9TVEFSVCwgJCRCYXNlKTsKK1JFR0lPTl9ERUNMQVJFKEltYWdlJCQsIFRGTV9BUFBfQ09ERV9FTkQsICQkQmFzZSk7CitSRUdJT05fREVDTEFSRShJbWFnZSQkLCBURk1fQVBQX1JXX1NUQUNLX1NUQVJULCAkJEJhc2UpOworUkVHSU9OX0RFQ0xBUkUoSW1hZ2UkJCwgVEZNX0FQUF9SV19TVEFDS19FTkQsICQkQmFzZSk7CitSRUdJT05fREVDTEFSRShJbWFnZSQkLCBBUk1fTElCX1NUQUNLLCAkJFpJJCRCYXNlKTsKK1JFR0lPTl9ERUNMQVJFKEltYWdlJCQsIEFSTV9MSUJfU1RBQ0ssICQkWkkkJExpbWl0KTsKKworY29uc3Qgc3RydWN0IG1wdV9hcm12OG1fcmVnaW9uX2NmZ190IHJlZ2lvbl9jZmdbXSA9IHsKKyAgICAgICAgICAgLyogVmVuZWVyIHJlZ2lvbiAqLworICAgICAgICAgICB7CisgICAgICAgICAgICAgICBNUFVfUkVHSU9OX1ZFTkVFUlMsCisgICAgICAgICAgICAgICAodWludDMyX3QpJlJFR0lPTl9OQU1FKExvYWQkJExSJCQsIExSX1ZFTkVFUiwgJCRCYXNlKSwKKyAgICAgICAgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoTG9hZCQkTFIkJCwgTFJfVkVORUVSLCAkJExpbWl0KSwKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fTUFJUl9BVFRSX0NPREVfSURYLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9YTl9FWEVDX09LLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9BUF9ST19QUklWX1VOUFJJViwKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fU0hfTk9ORQorICAgICAgICAgICB9LAorICAgICAgICAgICAvKiBURk0gQ29yZSB1bnByaXZpbGVnZWQgY29kZSByZWdpb24gKi8KKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgTVBVX1JFR0lPTl9URk1fVU5QUklWX0NPREUsCisgICAgICAgICAgICAgICAodWludDMyX3QpJlJFR0lPTl9OQU1FKEltYWdlJCQsIFRGTV9VTlBSSVZfQ09ERSwgJCRSTyQkQmFzZSksCisgICAgICAgICAgICAgICAodWludDMyX3QpJlJFR0lPTl9OQU1FKEltYWdlJCQsIFRGTV9VTlBSSVZfQ09ERSwgJCRSTyQkTGltaXQpLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9NQUlSX0FUVFJfQ09ERV9JRFgsCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX1hOX0VYRUNfT0ssCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX0FQX1JPX1BSSVZfVU5QUklWLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9TSF9OT05FCisgICAgICAgICAgIH0sCisgICAgICAgICAgIC8qIFRGTSBDb3JlIHVucHJpdmlsZWdlZCBkYXRhIHJlZ2lvbiAqLworICAgICAgICAgICB7CisgICAgICAgICAgICAgICBNUFVfUkVHSU9OX1RGTV9VTlBSSVZfREFUQSwKKyAgICAgICAgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoSW1hZ2UkJCwgVEZNX1VOUFJJVl9EQVRBLCAkJFJXJCRCYXNlKSwKKyAgICAgICAgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoSW1hZ2UkJCwgVEZNX1VOUFJJVl9EQVRBLCAkJFpJJCRMaW1pdCksCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX01BSVJfQVRUUl9EQVRBX0lEWCwKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fWE5fRVhFQ19ORVZFUiwKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fQVBfUldfUFJJVl9VTlBSSVYsCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX1NIX05PTkUKKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgLyogTlNQTSBQU1AgKi8KKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgTVBVX1JFR0lPTl9OU19TVEFDSywKKyAgICAgICAgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoSW1hZ2UkJCwgQVJNX0xJQl9TVEFDSywgJCRaSSQkQmFzZSksCisgICAgICAgICAgICAgICAodWludDMyX3QpJlJFR0lPTl9OQU1FKEltYWdlJCQsIEFSTV9MSUJfU1RBQ0ssICQkWkkkJExpbWl0KSwKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fTUFJUl9BVFRSX0RBVEFfSURYLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9YTl9FWEVDX05FVkVSLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9BUF9SV19QUklWX1VOUFJJViwKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fU0hfTk9ORQorICAgICAgICAgICB9LAorICAgICAgICAgICAvKiBSTyByZWdpb24gKi8KKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgUEFSVElUSU9OX1JFR0lPTl9STywKKyAgICAgICAgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoSW1hZ2UkJCwgVEZNX0FQUF9DT0RFX1NUQVJULCAkJEJhc2UpLAorICAgICAgICAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShJbWFnZSQkLCBURk1fQVBQX0NPREVfRU5ELCAkJEJhc2UpLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9NQUlSX0FUVFJfQ09ERV9JRFgsCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX1hOX0VYRUNfT0ssCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX0FQX1JPX1BSSVZfVU5QUklWLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9TSF9OT05FCisgICAgICAgICAgIH0sCisgICAgICAgICAgIC8qIFJXLCBaSSBhbmQgc3RhY2sgYXMgb25lIHJlZ2lvbiAqLworICAgICAgICAgICB7CisgICAgICAgICAgICAgICBQQVJUSVRJT05fUkVHSU9OX1JXX1NUQUNLLAorICAgICAgICAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShJbWFnZSQkLCBURk1fQVBQX1JXX1NUQUNLX1NUQVJULCAkJEJhc2UpLAorICAgICAgICAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShJbWFnZSQkLCBURk1fQVBQX1JXX1NUQUNLX0VORCwgJCRCYXNlKSwKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fTUFJUl9BVFRSX0RBVEFfSURYLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9YTl9FWEVDX05FVkVSLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9BUF9SV19QUklWX1VOUFJJViwKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fU0hfTk9ORQorICAgICAgICAgICB9CisgICAgICAgfTsKKworc3RhdGljIGVudW0gdGZtX3BsYXRfZXJyX3QgdGZtX3NwbV9tcHVfaW5pdCh2b2lkKQoreworICAgIGludDMyX3QgaTsKKworICAgIG1wdV9hcm12OG1fY2xlYW4oJmRldl9tcHVfcyk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdpb25fY2ZnKTsgaSsrKSB7CisgICAgICAgIGlmIChtcHVfYXJtdjhtX3JlZ2lvbl9lbmFibGUoJmRldl9tcHVfcywKKyAgICAgICAgICAgIChzdHJ1Y3QgbXB1X2FybXY4bV9yZWdpb25fY2ZnX3QgKikmcmVnaW9uX2NmZ1tpXSkKKyAgICAgICAgICAgICE9IE1QVV9BUk1WOE1fT0spIHsKKyAgICAgICAgICAgIHJldHVybiBURk1fUExBVF9FUlJfU1lTVEVNX0VSUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1wdV9hcm12OG1fZW5hYmxlKCZkZXZfbXB1X3MsIFBSSVZJTEVHRURfREVGQVVMVF9FTkFCTEUsCisgICAgICAgICAgICAgICAgICAgICAgSEFSREZBVUxUX05NSV9FTkFCTEUpOworCisgICAgcmV0dXJuIFRGTV9QTEFUX0VSUl9TVUNDRVNTOworfQorCitlbnVtIHRmbV9wbGF0X2Vycl90IHRmbV9zcG1faGFsX3NldHVwX2lzb2xhdGlvbl9odyh2b2lkKQoreworICAgIGlmICh0Zm1fc3BtX21wdV9pbml0KCkgIT0gVEZNX1BMQVRfRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgRVJST1JfTVNHKCJGYWlsZWQgdG8gc2V0IHVwIGluaXRpYWwgTVBVIGNvbmZpZ3VyYXRpb24hIEhhbHRpbmcuIik7CisgICAgICAgIHJldHVybiBURk1fUExBVF9FUlJfU1lTVEVNX0VSUjsKKyAgICB9CisgICAgcmV0dXJuIFRGTV9QTEFUX0VSUl9TVUNDRVNTOworfQorI2VuZGlmIC8qIENPTkZJR19URk1fRU5BQkxFX01FTU9SWV9QUk9URUNUICovCisKK3ZvaWQgU0NVX0lSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFUlJPUl9NU0coIk9vcHMuLi4gc2VjdXJlIHZpb2xhdGlvbiBmYXVsdCEhISIpOworCisgICAgLyogSW5mb3JtIFRGLU0gY29yZSB0aGF0IGlzb2xhdGlvbiBib3VuZGFyeSBoYXMgYmVlbiB2aW9sYXRlZCAqLworICAgIHRmbV9hY2Nlc3NfdmlvbGF0aW9uX2hhbmRsZXIoKTsKK30KKwordm9pZCBNUENfSGFuZGxlcih2b2lkKQoreworICAgIC8qIFByaW50IGZhdWx0IG1lc3NhZ2UgYW5kIGJsb2NrIGV4ZWN1dGlvbiAqLworICAgIEVSUk9SX01TRygiT29wcy4uLiBVbmV4cGVjdGVkIGZhdWx0ISEhIik7CisKKyAgICAvKiBJbmZvcm0gVEYtTSBjb3JlIHRoYXQgaXNvbGF0aW9uIGJvdW5kYXJ5IGhhcyBiZWVuIHZpb2xhdGVkICovCisgICAgdGZtX2FjY2Vzc192aW9sYXRpb25faGFuZGxlcigpOworfQorCit2b2lkIFBQQ19IYW5kbGVyKHZvaWQpCit7CisgICAgLyogUHJpbnQgZmF1bHQgbWVzc2FnZSBhbmQgYmxvY2sgZXhlY3V0aW9uICovCisgICAgRVJST1JfTVNHKCJPb3BzLi4uIFVuZXhwZWN0ZWQgZmF1bHQhISEiKTsKKworICAgIC8qIEluZm9ybSBURi1NIGNvcmUgdGhhdCBpc29sYXRpb24gYm91bmRhcnkgaGFzIGJlZW4gdmlvbGF0ZWQgKi8KKyAgICB0Zm1fYWNjZXNzX3Zpb2xhdGlvbl9oYW5kbGVyKCk7Cit9CisKK3VpbnQzMl90IHRmbV9zcG1faGFsX2dldF9uc19WVE9SKHZvaWQpCit7CisgICAgcmV0dXJuIG1lbW9yeV9yZWdpb25zLm5vbl9zZWN1cmVfY29kZV9zdGFydDsKK30KKwordWludDMyX3QgdGZtX3NwbV9oYWxfZ2V0X25zX01TUCh2b2lkKQoreworICAgIHJldHVybiAqKCh1aW50MzJfdCAqKW1lbW9yeV9yZWdpb25zLm5vbl9zZWN1cmVfY29kZV9zdGFydCk7Cit9CisKK3VpbnQzMl90IHRmbV9zcG1faGFsX2dldF9uc19lbnRyeV9wb2ludCh2b2lkKQoreworICAgIHJldHVybiAqKCh1aW50MzJfdCAqKShtZW1vcnlfcmVnaW9ucy5ub25fc2VjdXJlX2NvZGVfc3RhcnQrIDQpKTsKK30KKworZW51bSB0Zm1fcGxhdF9lcnJfdCB0Zm1fc3BtX2hhbF9zZXRfc2VjdXJlX2lycV9wcmlvcml0eShJUlFuX1R5cGUgaXJxX2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHByaW9yaXR5KQoreworICAgIHVpbnQzMl90IHF1YW50aXplZF9wcmlvcml0eSA9IHByaW9yaXR5ID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpOworICAgIE5WSUNfU2V0UHJpb3JpdHkoaXJxX2xpbmUsIHF1YW50aXplZF9wcmlvcml0eSk7CisgICAgcmV0dXJuIFRGTV9QTEFUX0VSUl9TVUNDRVNTOworfQorCit2b2lkIHRmbV9zcG1faGFsX2NsZWFyX3BlbmRpbmdfaXJxKElSUW5fVHlwZSBpcnFfbGluZSkKK3sKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShpcnFfbGluZSk7Cit9CisKK3ZvaWQgdGZtX3NwbV9oYWxfZW5hYmxlX2lycShJUlFuX1R5cGUgaXJxX2xpbmUpCit7CisgICAgTlZJQ19FbmFibGVJUlEoaXJxX2xpbmUpOworfQorCit2b2lkIHRmbV9zcG1faGFsX2Rpc2FibGVfaXJxKElSUW5fVHlwZSBpcnFfbGluZSkKK3sKKyAgICBOVklDX0Rpc2FibGVJUlEoaXJxX2xpbmUpOworfQorCitlbnVtIGlycV90YXJnZXRfc3RhdGVfdCB0Zm1fc3BtX2hhbF9zZXRfaXJxX3RhcmdldF9zdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlFuX1R5cGUgaXJxX2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBpcnFfdGFyZ2V0X3N0YXRlX3QgdGFyZ2V0X3N0YXRlKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgIGlmICh0YXJnZXRfc3RhdGUgPT0gVEZNX0lSUV9UQVJHRVRfU1RBVEVfU0VDVVJFKSB7CisgICAgICAgIHJlc3VsdCA9IE5WSUNfQ2xlYXJUYXJnZXRTdGF0ZShpcnFfbGluZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gTlZJQ19TZXRUYXJnZXRTdGF0ZShpcnFfbGluZSk7CisgICAgfQorCisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICByZXR1cm4gVEZNX0lSUV9UQVJHRVRfU1RBVEVfTk9OX1NFQ1VSRTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gVEZNX0lSUV9UQVJHRVRfU1RBVEVfU0VDVVJFOworICAgIH0KK30KKworZW51bSB0Zm1fcGxhdF9lcnJfdCB0Zm1fc3BtX2hhbF9lbmFibGVfZmF1bHRfaGFuZGxlcnModm9pZCkKK3sKKyAgICByZXR1cm4gZW5hYmxlX2ZhdWx0X2hhbmRsZXJzKCk7Cit9CisKK2VudW0gdGZtX3BsYXRfZXJyX3QgdGZtX3NwbV9oYWxfc3lzdGVtX3Jlc2V0X2NmZyh2b2lkKQoreworICAgIHJldHVybiBzeXN0ZW1fcmVzZXRfY2ZnKCk7Cit9CisKK2VudW0gdGZtX3BsYXRfZXJyX3QgdGZtX3NwbV9oYWxfaW5pdF9kZWJ1Zyh2b2lkKQoreworICAgIHJldHVybiBpbml0X2RlYnVnKCk7Cit9CisKK2VudW0gdGZtX3BsYXRfZXJyX3QgdGZtX3NwbV9oYWxfbnZpY19pbnRlcnJ1cHRfdGFyZ2V0X3N0YXRlX2NmZyh2b2lkKQoreworICAgIHJldHVybiBudmljX2ludGVycnVwdF90YXJnZXRfc3RhdGVfY2ZnKCk7Cit9CisKK2VudW0gdGZtX3BsYXRfZXJyX3QgdGZtX3NwbV9oYWxfbnZpY19pbnRlcnJ1cHRfZW5hYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIG52aWNfaW50ZXJydXB0X2VuYWJsZSgpOworfQpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3RhcmdldF9jZmcuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS90YXJnZXRfY2ZnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjYWI0OAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS90YXJnZXRfY2ZnLmMKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCBBcm0gTGltaXRlZAorICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJjbXNpcy5oIgorI2luY2x1ZGUgInRhcmdldF9jZmcuaCIKKyNpbmNsdWRlICJEcml2ZXJfTVBDLmgiCisjaW5jbHVkZSAicGxhdGZvcm1fZGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJkZXZpY2VfZGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgInJlZ2lvbl9kZWZzLmgiCisjaW5jbHVkZSAidGZtX3BsYXRfZGVmcy5oIgorI2luY2x1ZGUgInJlZ2lvbi5oIgorI2luY2x1ZGUgInRmbV9zZWN1cmVfYXBpLmgiCisKKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKS9zaXplb2YoYXJyWzBdKSkKKworLyogVGhlIHNlY3Rpb24gbmFtZXMgY29tZSBmcm9tIHRoZSBzY2F0dGVyIGZpbGUgKi8KK1JFR0lPTl9ERUNMQVJFKExvYWQkJExSJCQsIExSX05TX1BBUlRJVElPTiwgJCRCYXNlKTsKK1JFR0lPTl9ERUNMQVJFKExvYWQkJExSJCQsIExSX1ZFTkVFUiwgJCRCYXNlKTsKK1JFR0lPTl9ERUNMQVJFKExvYWQkJExSJCQsIExSX1ZFTkVFUiwgJCRMaW1pdCk7CisjaWZkZWYgQkwyCitSRUdJT05fREVDTEFSRShMb2FkJCRMUiQkLCBMUl9TRUNPTkRBUllfUEFSVElUSU9OLCAkJEJhc2UpOworI2VuZGlmIC8qIEJMMiAqLworCitjb25zdCBzdHJ1Y3QgbWVtb3J5X3JlZ2lvbl9saW1pdHMgbWVtb3J5X3JlZ2lvbnMgPSB7CisgICAgLm5vbl9zZWN1cmVfY29kZV9zdGFydCA9CisgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoTG9hZCQkTFIkJCwgTFJfTlNfUEFSVElUSU9OLCAkJEJhc2UpICsKKyAgICAgICAgQkwyX0hFQURFUl9TSVpFLAorCisgICAgLm5vbl9zZWN1cmVfcGFydGl0aW9uX2Jhc2UgPQorICAgICAgICAodWludDMyX3QpJlJFR0lPTl9OQU1FKExvYWQkJExSJCQsIExSX05TX1BBUlRJVElPTiwgJCRCYXNlKSwKKworICAgIC5ub25fc2VjdXJlX3BhcnRpdGlvbl9saW1pdCA9CisgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoTG9hZCQkTFIkJCwgTFJfTlNfUEFSVElUSU9OLCAkJEJhc2UpICsKKyAgICAgICAgTlNfUEFSVElUSU9OX1NJWkUgLSAxLAorCisgICAgLnZlbmVlcl9iYXNlID0KKyAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShMb2FkJCRMUiQkLCBMUl9WRU5FRVIsICQkQmFzZSksCisKKyAgICAudmVuZWVyX2xpbWl0ID0KKyAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShMb2FkJCRMUiQkLCBMUl9WRU5FRVIsICQkTGltaXQpLAorCisjaWZkZWYgQkwyCisgICAgLnNlY29uZGFyeV9wYXJ0aXRpb25fYmFzZSA9CisgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoTG9hZCQkTFIkJCwgTFJfU0VDT05EQVJZX1BBUlRJVElPTiwgJCRCYXNlKSwKKworICAgIC5zZWNvbmRhcnlfcGFydGl0aW9uX2xpbWl0ID0KKyAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShMb2FkJCRMUiQkLCBMUl9TRUNPTkRBUllfUEFSVElUSU9OLCAkJEJhc2UpICsKKyAgICAgICAgU0VDT05EQVJZX1BBUlRJVElPTl9TSVpFIC0gMSwKKyNlbmRpZiAvKiBCTDIgKi8KK307CisKKy8qIEFsbG93cyBzb2Z0d2FyZSwgdmlhIFNBVSwgdG8gZGVmaW5lIHRoZSBjb2RlIHJlZ2lvbiBhcyBhIE5TQyAqLworI2RlZmluZSBOU0NDRkdfQ09ERU5TQyAgMQorCisvKiBJbXBvcnQgTVBDIGRyaXZlciAqLworZXh0ZXJuIEFSTV9EUklWRVJfTVBDIERyaXZlcl9TUkFNMV9NUEMsIERyaXZlcl9TUkFNMl9NUEM7CisKKy8qIERlZmluZSBQZXJpcGhlcmFscyBOUyBhZGRyZXNzIHJhbmdlIGZvciB0aGUgcGxhdGZvcm0gKi8KKyNkZWZpbmUgUEVSSVBIRVJBTFNfQkFTRV9OU19TVEFSVCAoMHg0MDAwMDAwMCkKKyNkZWZpbmUgUEVSSVBIRVJBTFNfQkFTRV9OU19FTkQgICAoMHg0RkZGRkZGRikKKworLyogRW5hYmxlIHN5c3RlbSByZXNldCByZXF1ZXN0IGZvciBDUFUgMCAqLworI2RlZmluZSBFTkFCTEVfQ1BVMF9TWVNURU1fUkVTRVRfUkVRVUVTVCAoMVUgPDwgNFUpCisKKy8qIFRvIHdyaXRlIGludG8gQUlSQ1IgcmVnaXN0ZXIsIDB4NUZBIHZhbHVlIG11c3QgYmUgd3JpdGUgdG8gdGhlIFZFQ1RLRVkgZmllbGQsCisgKiBvdGhlcndpc2UgdGhlIHByb2Nlc3NvciBpZ25vcmVzIHRoZSB3cml0ZS4KKyAqLworI2RlZmluZSBTQ0JfQUlSQ1JfV1JJVEVfTUFTSyAoKDB4NUZBVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSkKKworLyogRGVidWcgY29uZmlndXJhdGlvbiBmbGFncyAqLworI2RlZmluZSBTUE5JREVOX1NFTF9TVEFUVVMgKDB4MDF1IDw8IDcpCisjZGVmaW5lIFNQTklERU5fU1RBVFVTICAgICAoMHgwMXUgPDwgNikKKyNkZWZpbmUgU1BJREVOX1NFTF9TVEFUVVMgICgweDAxdSA8PCA1KQorI2RlZmluZSBTUElERU5fU1RBVFVTICAgICAgKDB4MDF1IDw8IDQpCisjZGVmaW5lIE5JREVOX1NFTF9TVEFUVVMgICAoMHgwMXUgPDwgMykKKyNkZWZpbmUgTklERU5fU1RBVFVTICAgICAgICgweDAxdSA8PCAyKQorI2RlZmluZSBEQkdFTl9TRUxfU1RBVFVTICAgKDB4MDF1IDw8IDEpCisjZGVmaW5lIERCR0VOX1NUQVRVUyAgICAgICAoMHgwMXUgPDwgMCkKKworI2RlZmluZSBBbGxfU0VMX1NUQVRVUyAoU1BOSURFTl9TRUxfU1RBVFVTIHwgU1BJREVOX1NFTF9TVEFUVVMgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICBOSURFTl9TRUxfU1RBVFVTIHwgREJHRU5fU0VMX1NUQVRVUykKKworc3RydWN0IHRmbV9zcG1fcGFydGl0aW9uX3BsYXRmb3JtX2RhdGFfdCB0Zm1fcGVyaXBoZXJhbF9zdGRfdWFydCA9IHsKKyAgICAgICAgVUFSVDBfQkFTRSArIE5TX09GRlNFVCwKKyAgICAgICAgVUFSVDBfQkFTRSArIE5TX09GRlNFVCArIDB4RkZGLAorICAgICAgICBQUENfU1BfRE9fTk9UX0NPTkZJR1VSRSwKKyAgICAgICAgLTEKK307CisKK3N0cnVjdCB0Zm1fc3BtX3BhcnRpdGlvbl9wbGF0Zm9ybV9kYXRhX3QgdGZtX3BlcmlwaGVyYWxfdWFydDEgPSB7CisgICAgICAgIFVBUlQxX0JBU0UsCisgICAgICAgIFVBUlQxX0JBU0UgKyAweEZGRiwKKyAgICAgICAgUFBDX1NQX0RPX05PVF9DT05GSUdVUkUsCisgICAgICAgIC0xCit9OworCitzdHJ1Y3QgdGZtX3NwbV9wYXJ0aXRpb25fcGxhdGZvcm1fZGF0YV90IHRmbV9wZXJpcGhlcmFsX3RpbWVyMCA9IHsKKyAgICAgICAgVE1SMDFfQkFTRSwKKyAgICAgICAgVE1SMDFfQkFTRSArIDB4RkZGLAorICAgICAgICBQUENfU1BfRE9fTk9UX0NPTkZJR1VSRSwKKyAgICAgICAgLTEKK307CisKK2VudW0gdGZtX3BsYXRfZXJyX3QgZW5hYmxlX2ZhdWx0X2hhbmRsZXJzKHZvaWQpCit7CisgICAgLyogU2VjdXJlIGZhdWx0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBCYXNlbGluZSBpbXBsZW1lbnRhdGlvbi4gKi8KKyAgICAvKiBGYXVsdCBoYW5kbGVyIGVuYWJsZSByZWdpc3RlcnMgYXJlIG5vdCBwcmVzZW50IGluIGEgQmFzZWxpbmUKKyAgICAgKiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgKi8KKyAgICByZXR1cm4gVEZNX1BMQVRfRVJSX1NVQ0NFU1M7Cit9CisKK2VudW0gdGZtX3BsYXRfZXJyX3Qgc3lzdGVtX3Jlc2V0X2NmZyh2b2lkKQoreworICAgIHVpbnQzMl90IHJlZ192YWx1ZSA9IFNDQi0+QUlSQ1I7CisKKyAgICAvKiBDbGVhciBTQ0JfQUlSQ1JfVkVDVEtFWSB2YWx1ZSAqLworICAgIHJlZ192YWx1ZSAmPSB+KHVpbnQzMl90KShTQ0JfQUlSQ1JfVkVDVEtFWV9Nc2spOworCisgICAgLyogRW5hYmxlIHN5c3RlbSByZXNldCByZXF1ZXN0IGZvciB0aGUgc2VjdXJlIHdvcmxkIG9ubHkgKi8KKyAgICByZWdfdmFsdWUgfD0gKHVpbnQzMl90KShTQ0JfQUlSQ1JfV1JJVEVfTUFTSyB8IFNDQl9BSVJDUl9TWVNSRVNFVFJFUVNfTXNrKTsKKworICAgIFNDQi0+QUlSQ1IgPSByZWdfdmFsdWU7CisKKyAgICByZXR1cm4gVEZNX1BMQVRfRVJSX1NVQ0NFU1M7Cit9CisKK2VudW0gdGZtX3BsYXRfZXJyX3QgaW5pdF9kZWJ1Zyh2b2lkKQoreworICAgIC8qIFNldCBVQVJUMCB0byBOUyBmb3IgZGVidWcgbWVzc2FnZSAqLworICAgIFNDVV9TRVRfUE5TU0VUKFVBUlQwX0F0dHIpOworCisgICAgcmV0dXJuIFRGTV9QTEFUX0VSUl9TVUNDRVNTOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0gTlZJQyBpbnRlcnJ1cHQgdGFyZ2V0IHN0YXRlIHRvIE5TIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLSovCitlbnVtIHRmbV9wbGF0X2Vycl90IG52aWNfaW50ZXJydXB0X3RhcmdldF9zdGF0ZV9jZmcodm9pZCkKK3sKKyAgICAvKiBUYXJnZXQgZXZlcnkgaW50ZXJydXB0IHRvIE5TOyB1bmltcGxlbWVudGVkIGludGVycnVwdHMgd2lsbCBiZSBXSSAqLworICAgIGZvciAodWludDhfdCBpPTA7IGk8c2l6ZW9mKE5WSUMtPklUTlMpL3NpemVvZihOVklDLT5JVE5TWzBdKTsgaSsrKSB7CisgICAgICAgIE5WSUMtPklUTlNbaV0gPSAweEZGRkZGRkZGOworICAgIH0KKworI2lmZGVmIFNFQ1VSRV9VQVJUMQorICAgIC8qIFVBUlQxIGlzIGEgc2VjdXJlIHBlcmlwaGVyYWwsIHNvIGl0cyBJUlFzIGhhdmUgdG8gdGFyZ2V0IFMgc3RhdGUgKi8KKyAgICBOVklDX0NsZWFyVGFyZ2V0U3RhdGUoVUFSVFJYMV9JUlFuKTsKKyAgICBOVklDX0NsZWFyVGFyZ2V0U3RhdGUoVUFSVFRYMV9JUlFuKTsKKyAgICBOVklDX0NsZWFyVGFyZ2V0U3RhdGUoVUFSVDFfSVJRbik7CisjZW5kaWYKKworICAgIHJldHVybiBURk1fUExBVF9FUlJfU1VDQ0VTUzsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLSBOVklDIGludGVycnVwdCBlbmFibGluZyBmb3IgUyBwZXJpcGhlcmFscyAtLS0tLS0tLS0tLS0tLS0tKi8KK2VudW0gdGZtX3BsYXRfZXJyX3QgbnZpY19pbnRlcnJ1cHRfZW5hYmxlKHZvaWQpCit7CisKKyAgICByZXR1cm4gVEZNX1BMQVRfRVJSX1NVQ0NFU1M7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLSBTQVUvSURBVSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3Qgc2F1X2NmZ190IHsKKyAgICB1aW50MzJfdCBSQkFSOworICAgIHVpbnQzMl90IFJMQVI7CisgICAgYm9vbCBuc2M7Cit9OworCitjb25zdCBzdHJ1Y3Qgc2F1X2NmZ190IHNhdV9jZmdbXSA9IHsKKyAgICB7CisgICAgICAgICgodWludDMyX3QpJlJFR0lPTl9OQU1FKExvYWQkJExSJCQsIExSX05TX1BBUlRJVElPTiwgJCRCYXNlKSksCisgICAgICAgICgodWludDMyX3QpJlJFR0lPTl9OQU1FKExvYWQkJExSJCQsIExSX05TX1BBUlRJVElPTiwgJCRCYXNlKSArCisgICAgICAgIE5TX1BBUlRJVElPTl9TSVpFIC0gMSksCisgICAgICAgIGZhbHNlLAorICAgIH0sCisgICAgeworICAgICAgICBOU19EQVRBX1NUQVJULAorICAgICAgICBOU19EQVRBX0xJTUlULAorICAgICAgICBmYWxzZSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShMb2FkJCRMUiQkLCBMUl9WRU5FRVIsICQkQmFzZSksCisgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoTG9hZCQkTFIkJCwgTFJfVkVORUVSLCAkJExpbWl0KSwKKyAgICAgICAgdHJ1ZSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgKFBFUklQSF9CQVNFICsgTlNfT0ZGU0VUKSwKKyAgICAgICAgKFBFUklQSF9CQVNFICsgTlNfT0ZGU0VUICsgMHgxMDAwMDAwMCAtIDEpLAorICAgICAgICBmYWxzZSwKKyAgICB9Cit9OworCit2b2lkIHNhdV9hbmRfaWRhdV9jZmcodm9pZCkKK3sKKyAgICB1aW50MzJfdCBpOworCisgICAgLyogRW5hYmxlcyBTQVUgKi8KKyAgICBUWl9TQVVfRW5hYmxlKCk7CisKKyAgICBmb3IoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdV9jZmcpOyBpKyspIHsKKyAgICAgICAgU0FVLT5STlIgPSBpOworICAgICAgICBTQVUtPlJCQVIgPSBzYXVfY2ZnW2ldLlJCQVIgJiBTQVVfUkJBUl9CQUREUl9Nc2s7CisgICAgICAgIFNBVS0+UkxBUiA9IChzYXVfY2ZnW2ldLlJMQVIgJiBTQVVfUkxBUl9MQUREUl9Nc2spIHwKKyAgICAgICAgICAgIChzYXVfY2ZnW2ldLm5zYyA/IFNBVV9STEFSX05TQ19Nc2sgOiAwVSkgfAorICAgICAgICAgICAgU0FVX1JMQVJfRU5BQkxFX01zazsKKyAgICB9CisKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tIE1lbW9yeSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZW51bSB0Zm1fcGxhdF9lcnJfdCBtcGNfaW5pdF9jZmcodm9pZCkKK3sKKyAgICAvKiBTZWN1cmUgQ09uZmlndXJhdGlvbiBTZXR1cCAqLworICAgIFNDVV9TZXR1cCgpOworCisgICAgLyogU2V0IFVBUlQwIGZvciBOb24tc2VjdXJlICovCisgICAgU0NVX1NFVF9QTlNTRVQoVUFSVDBfQXR0cik7CisKKyAgICAvKiBTZXQgVElNRVIyIGZvciBOb24tc2VjdXJlICovCisgICAgU0NVX1NFVF9QTlNTRVQoVE1SMjNfQXR0cik7CisKKyAgICByZXR1cm4gVEZNX1BMQVRfRVJSX1NVQ0NFU1M7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFBDIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitlbnVtIHRmbV9wbGF0X2Vycl90IHBwY19pbml0X2NmZyh2b2lkKQoreworICAgIHJldHVybiBURk1fUExBVF9FUlJfU1VDQ0VTUzsKK30KKwordm9pZCBwcGNfY29uZmlndXJlX3RvX3NlY3VyZShlbnVtIHBwY19iYW5rX2UgYmFuaywgdWludDMyX3QgcG9zKQoreworfQorCit2b2lkIHBwY19jb25maWd1cmVfdG9fbm9uX3NlY3VyZShlbnVtIHBwY19iYW5rX2UgYmFuaywgdWludDMyX3QgcG9zKQoreworfQorCit2b2lkIHBwY19lbl9zZWN1cmVfdW5wcml2KGVudW0gcHBjX2JhbmtfZSBiYW5rLCB1aW50MTZfdCBwb3MpCit7Cit9CisKK3ZvaWQgcHBjX2Nscl9zZWN1cmVfdW5wcml2KGVudW0gcHBjX2JhbmtfZSBiYW5rLCB1aW50MTZfdCBwb3MpCit7Cit9CisKK3ZvaWQgcHBjX2NsZWFyX2lycSh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3RhcmdldF9jZmcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS90YXJnZXRfY2ZnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1NDljNAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS90YXJnZXRfY2ZnLmgKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTktMjAyMCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fVEFSR0VUX0NGR19IX18KKyNkZWZpbmUgX19UQVJHRVRfQ0ZHX0hfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNkZWZpbmUgVEZNX0RSSVZFUl9TVERJTyAgICBEcml2ZXJfVVNBUlQwCisjZGVmaW5lIE5TX0RSSVZFUl9TVERJTyAgICAgRHJpdmVyX1VTQVJUMAorCitlbnVtIHBwY19iYW5rX2UgeworICAgIFBQQ19TUF9ET19OT1RfQ09ORklHVVJFID0gLTEsCisgICAgUFBDX1NQX0FIQl9QUENfRVhQMCA9IDAsCisgICAgUFBDX1NQX0FQQl9QUEMgICAgICA9IDEsCisgICAgUFBDX1NQX0FQQl9QUENfRVhQMCA9IDIsCisgICAgUFBDX1NQX0FQQl9QUENfRVhQMSA9IDMsCisgICAgUFBDX1NQX0FQQl9QUENfRVhQMiA9IDQsCisgICAgUFBDX1NQX0FQQl9QUENfRVhQMyA9IDUsCit9OworCisvKioKKyAqIFxicmllZiBNUFUgY29uZmlncworICovCisjZGVmaW5lIFBSSVZJTEVHRURfREVGQVVMVF9FTkFCTEUgICAxCisjZGVmaW5lIEhBUkRGQVVMVF9OTUlfRU5BQkxFICAgICAgICAxCisKKy8qKgorICogXGJyaWVmIFN0b3JlIHRoZSBhZGRyZXNzZXMgb2YgbWVtb3J5IHJlZ2lvbnMKKyAqLworc3RydWN0IG1lbW9yeV9yZWdpb25fbGltaXRzIHsKKyAgICB1aW50MzJfdCBub25fc2VjdXJlX2NvZGVfc3RhcnQ7CisgICAgdWludDMyX3Qgbm9uX3NlY3VyZV9wYXJ0aXRpb25fYmFzZTsKKyAgICB1aW50MzJfdCBub25fc2VjdXJlX3BhcnRpdGlvbl9saW1pdDsKKyAgICB1aW50MzJfdCB2ZW5lZXJfYmFzZTsKKyAgICB1aW50MzJfdCB2ZW5lZXJfbGltaXQ7CisjaWZkZWYgQkwyCisgICAgdWludDMyX3Qgc2Vjb25kYXJ5X3BhcnRpdGlvbl9iYXNlOworICAgIHVpbnQzMl90IHNlY29uZGFyeV9wYXJ0aXRpb25fbGltaXQ7CisjZW5kaWYgLyogQkwyICovCit9OworCisvKioKKyAqIFxicmllZiBIb2xkcyB0aGUgZGF0YSBuZWNlc3NhcnkgdG8gZG8gaXNvbGF0aW9uIGZvciBhIHNwZWNpZmljIHBlcmlwaGVyYWwuCisgKi8KK3N0cnVjdCB0Zm1fc3BtX3BhcnRpdGlvbl9wbGF0Zm9ybV9kYXRhX3QgeworICAgIHVpbnQzMl90IHBlcmlwaF9zdGFydDsKKyAgICB1aW50MzJfdCBwZXJpcGhfbGltaXQ7CisgICAgZW51bSBwcGNfYmFua19lIHBlcmlwaF9wcGNfYmFuazsKKyAgICBpbnQxNl90IHBlcmlwaF9wcGNfbG9jOworfTsKKworLyoqCisgKiBcYnJpZWYgRm9yd2FyZCBkZWNsYXJhdGlvbgorICovCitzdHJ1Y3QgbXB1X2FybXY4bV9yZWdpb25fY2ZnX3Q7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZXMgdGhlIGZhdWx0IGhhbmRsZXJzIEJ1c0ZhdWx0LCBVc2FnZUZhdWx0LAorICogICAgICAgIE1lbU1hbmFnZUZhdWx0IGFuZCBTZWN1cmVGYXVsdC4KKyAqLworZW51bSB0Zm1fcGxhdF9lcnJfdCBlbmFibGVfZmF1bHRfaGFuZGxlcnModm9pZCk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgdGhlIHN5c3RlbSByZXNldCByZXF1ZXN0IHByb3BlcnRpZXMKKyAqCisgKiBccmV0dXJuIFJldHVybnMgdmFsdWVzIGFzIHNwZWNpZmllZCBieSB0aGUgXHJlZiB0Zm1fcGxhdF9lcnJfdAorICovCitlbnVtIHRmbV9wbGF0X2Vycl90IHN5c3RlbV9yZXNldF9jZmcodm9pZCk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgdGhlIHN5c3RlbSBkZWJ1ZyBwcm9wZXJ0aWVzLgorICoKKyAqIFxyZXR1cm4gUmV0dXJucyB2YWx1ZXMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBccmVmIHRmbV9wbGF0X2Vycl90CisgKi8KK2VudW0gdGZtX3BsYXRfZXJyX3QgaW5pdF9kZWJ1Zyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlcyBhbGwgZXh0ZXJuYWwgaW50ZXJydXB0cyB0byB0YXJnZXQgdGhlCisgKiAgICAgICAgTlMgc3RhdGUsIGFwYXJ0IGZvciB0aGUgb25lcyBhc3NvY2lhdGVkIHRvIHNlY3VyZQorICogICAgICAgIHBlcmlwaGVyYWxzIChwbHVzIE1QQyBhbmQgUFBDKQorICovCitlbnVtIHRmbV9wbGF0X2Vycl90IG52aWNfaW50ZXJydXB0X3RhcmdldF9zdGF0ZV9jZmcodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFRoaXMgZnVuY3Rpb24gZW5hYmxlIHRoZSBpbnRlcnJ1cHRzIGFzc29jaWF0ZWQKKyAqICAgICAgICB0byB0aGUgc2VjdXJlIHBlcmlwaGVyYWxzIChwbHVzIE1QQyBhbmQgUFBDKQorICovCitlbnVtIHRmbV9wbGF0X2Vycl90IG52aWNfaW50ZXJydXB0X2VuYWJsZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBNUFUKKyAqLworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X2VuYWJsZSh1aW50MzJfdCBwcml2ZGVmX2VuLCB1aW50MzJfdCBoZm5taV9lbik7CisKKy8qKgorICogXGJyaWVmIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIE1QVQorICovCitlbnVtIG1wdV9hcm12OG1fZXJyb3JfdCBtcHVfZGlzYWJsZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBnaXZlbiBNUFUgcmVnaW9uCisgKi8KK2VudW0gbXB1X2FybXY4bV9lcnJvcl90IG1wdV9yZWdpb25fZW5hYmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1wdV9hcm12OG1fcmVnaW9uX2NmZ190ICpyZWdpb25fY2ZnKTsKKworLyoqCisgKiBcYnJpZWYgVGhpcyBmdW5jdGlvbiBkc2FibGVzIHRoZSBnaXZlbiBNUFUgcmVnaW9uCisgKi8KK2VudW0gbXB1X2FybXY4bV9lcnJvcl90IG1wdV9yZWdpb25fZGlzYWJsZSh1aW50MzJfdCByZWdpb25fbnIpOworCisvKioKKyAqIFxicmllZiBUaGlzIGZ1bmN0aW9uIGNsZWFucyBhbGwgdGhlIE1QVSByZWdpb25zIGNvbmZpZ3MKKyAqLworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X2NsZWFuKHZvaWQpOworCisvKioKKyAqIFxicmllZiBDb25maWd1cmVzIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBDb250cm9sbGVyLgorICovCitlbnVtIHRmbV9wbGF0X2Vycl90IG1wY19pbml0X2NmZyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQ2xlYXIgTVBDIGludGVycnVwdC4KKyAqLwordm9pZCBtcGNfY2xlYXJfaXJxKHZvaWQpOworCisvKioKKyAqIFxicmllZiBDb25maWd1cmVzIHRoZSBQZXJpcGhlcmFsIFByb3RlY3Rpb24gQ29udHJvbGxlci4KKyAqLworZW51bSB0Zm1fcGxhdF9lcnJfdCBwcGNfaW5pdF9jZmcodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFJlc3RpY3QgcGVyaXBoZXJhbCBhY2Nlc3MgdG8gc2VjdXJlIGFjY2VzcyBvbmx5CisgKgorICogXG5vdGUgVGhlIGZ1bmN0aW9uIGRvZXMgbm90IGNvbmZpZ3VyZSBwcml2aWxlZ2UKKyAqLwordm9pZCBwcGNfY29uZmlndXJlX3RvX3NlY3VyZShlbnVtIHBwY19iYW5rX2UgYmFuaywgdWludDMyX3QgcG9zKTsKKworLyoqCisgKiBcYnJpZWYgQWxsb3cgbm9uLXNlY3VyZSBhY2Nlc3MgdG8gcGVyaXBoZXJhbAorICoKKyAqIFxub3RlIFRoZSBmdW5jdGlvbiBkb2VzIG5vdCBjb25maWd1cmUgcHJpdmlsZWdlCisgKi8KK3ZvaWQgcHBjX2NvbmZpZ3VyZV90b19ub25fc2VjdXJlKGVudW0gcHBjX2JhbmtfZSBiYW5rLCB1aW50MzJfdCBwb3MpOworCisvKioKKyAqIFxicmllZiBFbmFibGUgc2VjdXJlIHVucHJpdmlsZWdlZCBhY2Nlc3MgdG8gcGVyaXBoZXJhbAorICovCit2b2lkIHBwY19lbl9zZWN1cmVfdW5wcml2KGVudW0gcHBjX2JhbmtfZSBiYW5rLCB1aW50MTZfdCBwb3MpOworCisvKioKKyAqIFxicmllZiBDbGVhciBzZWN1cmUgdW5wcml2aWxlZ2VkIGFjY2VzcyB0byBwZXJpcGhlcmFsCisgKi8KK3ZvaWQgcHBjX2Nscl9zZWN1cmVfdW5wcml2KGVudW0gcHBjX2JhbmtfZSBiYW5rLCB1aW50MTZfdCBwb3MpOworCisvKioKKyAqIFxicmllZiBDbGVhcnMgUFBDIGludGVycnVwdC4KKyAqLwordm9pZCBwcGNfY2xlYXJfaXJxKHZvaWQpOworCisvKioKKyAqIFxicmllZiBDb25maWd1cmVzIFNBVSBhbmQgSURBVS4KKyAqLwordm9pZCBzYXVfYW5kX2lkYXVfY2ZnKHZvaWQpOworCisjZW5kaWYgLyogX19UQVJHRVRfQ0ZHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3RmbV9wZXJpcGhlcmFsc19kZWYuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS90Zm1fcGVyaXBoZXJhbHNfZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2N2E2NwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS90Zm1fcGVyaXBoZXJhbHNfZGVmLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCwgQ3lwcmVzcyBTZW1pY29uZHVjdG9yIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKi8KKworI2lmbmRlZiBfX1RGTV9QRVJJUEhFUkFMU19ERUZfSF9fCisjZGVmaW5lIF9fVEZNX1BFUklQSEVSQUxTX0RFRl9IX18KKworI2luY2x1ZGUgIk51TWljcm8uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIFRGTV9USU1FUjBfSVJRICAgIChUTVIwX0lSUW4pCisjZGVmaW5lIFRGTV9USU1FUjFfSVJRICAgIChUTVIxX0lSUW4pCisKK3N0cnVjdCB0Zm1fc3BtX3BhcnRpdGlvbl9wbGF0Zm9ybV9kYXRhX3Q7CisKK2V4dGVybiBzdHJ1Y3QgdGZtX3NwbV9wYXJ0aXRpb25fcGxhdGZvcm1fZGF0YV90IHRmbV9wZXJpcGhlcmFsX3N0ZF91YXJ0OworZXh0ZXJuIHN0cnVjdCB0Zm1fc3BtX3BhcnRpdGlvbl9wbGF0Zm9ybV9kYXRhX3QgdGZtX3BlcmlwaGVyYWxfdWFydDE7CitleHRlcm4gc3RydWN0IHRmbV9zcG1fcGFydGl0aW9uX3BsYXRmb3JtX2RhdGFfdCB0Zm1fcGVyaXBoZXJhbF90aW1lcjA7CisKKyNkZWZpbmUgVEZNX1BFUklQSEVSQUxfU1REX1VBUlQgICgmdGZtX3BlcmlwaGVyYWxfc3RkX3VhcnQpCisjZGVmaW5lIFRGTV9QRVJJUEhFUkFMX1VBUlQxICAgICAoJnRmbV9wZXJpcGhlcmFsX3VhcnQxKQorI2RlZmluZSBURk1fUEVSSVBIRVJBTF9USU1FUjAgICAgKCZ0Zm1fcGVyaXBoZXJhbF90aW1lcjApCisjZGVmaW5lIFRGTV9QRVJJUEhFUkFMX0ZQR0FfSU8gICAoMCkKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fVEZNX1BFUklQSEVSQUxTX0RFRl9IX18gKi8K