ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZyBiL2RyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZwppbmRleCBhOTM3MWIzLi5jNGVkYzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcKKysrIGIvZHJpdmVycy9maXJld2lyZS9LY29uZmlnCkBAIC02Niw0ICs2NiwyNyBAQAogCiBzb3VyY2UgImRyaXZlcnMvaWVlZTEzOTQvS2NvbmZpZyIKIAorY29uZmlnIEZJUkVXSVJFX05PU1kKKwl0cmlzdGF0ZSAiTm9zeSAtIGEgRmlyZVdpcmUgdHJhZmZpYyBzbmlmZmVyIGZvciBQQ0lMeW54IGNhcmRzIgorCWRlcGVuZHMgb24gUENJCisJaGVscAorCSAgTm9zeSBpcyBhbiBJRUVFIDEzOTQgcGFja2V0IHNuaWZmZXIgdGhhdCBpcyB1c2VkIGZvciBwcm90b2NvbAorCSAgYW5hbHlzaXMgYW5kIGluIGRldmVsb3BtZW50IG9mIElFRUUgMTM5NCBkcml2ZXJzLCBhcHBsaWNhdGlvbnMsCisJICBvciBmaXJtd2FyZXMuCisKKwkgIFRoaXMgZHJpdmVyIGxldHMgeW91IHVzZSBhIFRleGFzIEluc3RydW1lbnRzIFBDSUx5bnggMTM5NCB0byBQQ0kKKwkgIGxpbmsgbGF5ZXIgY29udHJvbGxlciBUU0IxMkxWMjEvQS9CIGFzIGEgbG93LWJ1ZGdldCBidXMgYW5hbHl6ZXIuCisJICBQQ0lMeW54IGlzIGEgbm93YWRheXMgdmVyeSByYXJlIElFRUUgMTM5NCBjb250cm9sbGVyIHdoaWNoIGlzCisJICBub3QgT0hDSSAxMzk0IGNvbXBsaWFudC4KKworCSAgVGhlIGZvbGxvd2luZyBjYXJkcyBhcmUga25vd24gdG8gYmUgYmFzZWQgb24gUENJTHlueCBvciBQQ0lMeW54LTI6CisJICBJT0kgSU9JLTEzOTRUVCAoUENJIGNhcmQpLCBVbmlicmFpbiBGaXJlYm9hcmQgNDAwIFBDSSBMeW54LTIKKwkgIChQQ0kgY2FyZCksIE5ld2VyIFRlY2hub2xvZ3kgRmlyZVdpcmUgMiBHbyAoQ2FyZEJ1cyBjYXJkKSwKKwkgIEFwcGxlIFBvd2VyIE1hYyBHMyBibHVlICYgd2hpdGUgKG9uYm9hcmQgY29udHJvbGxlcikuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmU6ICBUaGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBub3N5LgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL01ha2VmaWxlIGIvZHJpdmVycy9maXJld2lyZS9NYWtlZmlsZQppbmRleCBhOGY5YmI2Li4zYzZhN2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvTWFrZWZpbGUKQEAgLTEyLDMgKzEyLDQgQEAKIG9iai0kKENPTkZJR19GSVJFV0lSRV9PSENJKSArPSBmaXJld2lyZS1vaGNpLm8KIG9iai0kKENPTkZJR19GSVJFV0lSRV9TQlAyKSArPSBmaXJld2lyZS1zYnAyLm8KIG9iai0kKENPTkZJR19GSVJFV0lSRV9ORVQpICArPSBmaXJld2lyZS1uZXQubworb2JqLSQoQ09ORklHX0ZJUkVXSVJFX05PU1kpICs9IG5vc3kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9ub3N5LXVzZXIuaCBiL2RyaXZlcnMvZmlyZXdpcmUvbm9zeS11c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlhMTY4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvbm9zeS11c2VyLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX25vc3lfdXNlcl9oCisjZGVmaW5lIF9fbm9zeV91c2VyX2gKKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjZGVmaW5lIE5PU1lfSU9DX0dFVF9TVEFUUyBfSU9SKCcmJywgMCwgc3RydWN0IG5vc3lfc3RhdHMpCisjZGVmaW5lIE5PU1lfSU9DX1NUQVJUICAgICBfSU8oJyYnLCAxKQorI2RlZmluZSBOT1NZX0lPQ19TVE9QICAgICAgX0lPKCcmJywgMikKKyNkZWZpbmUgTk9TWV9JT0NfRklMVEVSICAgIF9JT1coJyYnLCAyLCBfX3UzMikKKworc3RydWN0IG5vc3lfc3RhdHMgeworICBfX3UzMiB0b3RhbF9wYWNrZXRfY291bnQ7CisgIF9fdTMyIGxvc3RfcGFja2V0X2NvdW50OworfTsKKworLyogCisgKiBGb3JtYXQgb2YgcGFja2V0cyByZXR1cm5lZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyOgorICoKKyAqICAgcXVhZGxldCB3aXRoIHRpbWVzdGFtcCAobWljcm9zZWNvbmRzKQorICogICBxdWFkbGV0IHBhZGRlZCBwYWNrZXQgZGF0YS4uLgorICogICBxdWFkbGV0IHdpdGggYWNrCisgKi8KKworI2VuZGlmIC8qIF9fbm9zeV91c2VyX2ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvbm9zeS5jIGIvZHJpdmVycy9maXJld2lyZS9ub3N5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc5NzEwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvbm9zeS5jCkBAIC0wLDAgKzEsNjk1IEBACisvKiAtKi0gYy1maWxlLXN0eWxlOiAibGludXgiIC0qLQorICoKKyAqIG5vc3kuYyAtIFNub29wIG1vZGUgZHJpdmVyIGZvciBUSSBwY2lseW54IDEzOTQgY29udHJvbGxlcnMKKyAqIENvcHlyaWdodCAoQykgMjAwMiBLcmlzdGlhbiBI+GdzYmVyZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPiAvKiByZXF1aXJlZCBmb3IgbGludXgvd2FpdC5oICovCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CisKKyNpbmNsdWRlICJub3N5LmgiCisjaW5jbHVkZSAibm9zeS11c2VyLmgiCisKKyNkZWZpbmUgVENPREVfUEhZX1BBQ0tFVAkJMHgxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1BDSUxZTlgJMHg4MDAwCisKKyNkZWZpbmUgbm90aWZ5KHMsIGFyZ3MuLi4pIHByaW50ayhLRVJOX05PVElDRSBzLCAjIyBhcmdzKQorI2RlZmluZSBlcnJvcihzLCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgcywgIyMgYXJncykKKyNkZWZpbmUgZGVidWcocywgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgcywgIyMgYXJncykKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJub3N5IjsKKworc3RydWN0IHBjbF9zdGF0dXMgeworCXVuc2lnbmVkIGludCB0cmFuc2Zlcl9jb3VudCA6IDEzOworCXVuc2lnbmVkIGludCByZXNlcnZlZDAgOiAxOworCXVuc2lnbmVkIGludCBhY2tfdHlwZSA6IDE7CisJdW5zaWduZWQgaW50IGFjayA6IDQ7CisJdW5zaWduZWQgaW50IHJjdl9zcGVlZCA6IDI7CisJdW5zaWduZWQgaW50IHJjdl9kbWFfY2hhbm5lbCA6IDY7CisJdW5zaWduZWQgaW50IHBhY2tldF9jb21wbGV0ZSA6IDE7CisJdW5zaWduZWQgaW50IHBhY2tldF9lcnJvciA6IDE7CisJdW5zaWduZWQgaW50IG1hc3Rlcl9lcnJvciA6IDE7CisJdW5zaWduZWQgaW50IGlzb19tb2RlIDogMTsKKwl1bnNpZ25lZCBpbnQgc2VsZl9pZCA6IDE7Cit9OworCisvKiB0aGlzIGlzIHRoZSBwaHlzaWNhbCBsYXlvdXQgb2YgYSBQQ0wsIGl0cyBzaXplIGlzIDEyOCBieXRlcyAqLworc3RydWN0IHBjbCB7CisgICAgICAgIHUzMiBuZXh0OworICAgICAgICB1MzIgYXN5bmNfZXJyb3JfbmV4dDsKKyAgICAgICAgdTMyIHVzZXJfZGF0YTsKKyAgICAgICAgc3RydWN0IHBjbF9zdGF0dXMgcGNsX3N0YXR1czsKKyAgICAgICAgdTMyIHJlbWFpbmluZ190cmFuc2Zlcl9jb3VudDsKKyAgICAgICAgdTMyIG5leHRfZGF0YV9idWZmZXI7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgdTMyIGNvbnRyb2w7CisgICAgICAgICAgICAgICAgdTMyIHBvaW50ZXI7CisgICAgICAgIH0gYnVmZmVyWzEzXSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHBhY2tldCB7CisJdW5zaWduZWQgaW50IGxlbmd0aCA6IDE2OworCXVuc2lnbmVkIGludCBjb2RlIDogMTY7CisJY2hhciBkYXRhWzBdOworfTsKKworc3RydWN0IHBhY2tldF9idWZmZXIgeworCWNoYXIgKmRhdGE7CisJc2l6ZV90IGNhcGFjaXR5OworCWxvbmcgdG90YWxfcGFja2V0X2NvdW50LCBsb3N0X3BhY2tldF9jb3VudDsKKwlhdG9taWNfdCBzaXplOworCXN0cnVjdCBwYWNrZXQgKmhlYWQsICp0YWlsOwkKKyAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsJCit9OworCitzdHJ1Y3QgcGNpbHlueCB7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CisJdW5zaWduZWQgY2hhciAqcmVnaXN0ZXJzOworCisJc3RydWN0IHBjbCAqcmN2X3N0YXJ0X3BjbCwgKnJjdl9wY2w7CisJdTMyICpyY3ZfYnVmZmVyOworCisJZG1hX2FkZHJfdCByY3Zfc3RhcnRfcGNsX2J1cywgcmN2X3BjbF9idXMsIHJjdl9idWZmZXJfYnVzOworCisJc3BpbmxvY2tfdCBjbGllbnRfbGlzdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7CisKKwlzdHJ1Y3QgbWlzY2RldmljZSBtaXNjOworfTsKKworCitzdHJ1Y3QgY2xpZW50IHsKKwlzdHJ1Y3QgcGNpbHlueCAqbHlueDsKKwl1bnNpZ25lZCBsb25nIHRjb2RlX21hc2s7CisJc3RydWN0IHBhY2tldF9idWZmZXIgYnVmZmVyOworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKK307CisKKyNkZWZpbmUgTUFYX01JTk9SUyA2NAorc3RydWN0IHBjaWx5bnggKm1pbm9yc1tNQVhfTUlOT1JTXTsKKworc3RhdGljIGludAorcGFja2V0X2J1ZmZlcl9pbml0KHN0cnVjdCBwYWNrZXRfYnVmZmVyICpidWZmZXIsIHNpemVfdCBjYXBhY2l0eSkKK3sKKwlidWZmZXItPmRhdGEgPSBrbWFsbG9jKGNhcGFjaXR5LCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmZmVyLT5kYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWJ1ZmZlci0+aGVhZCA9IChzdHJ1Y3QgcGFja2V0ICopIGJ1ZmZlci0+ZGF0YTsKKwlidWZmZXItPnRhaWwgPSAoc3RydWN0IHBhY2tldCAqKSBidWZmZXItPmRhdGE7CisJYnVmZmVyLT5jYXBhY2l0eSA9IGNhcGFjaXR5OworCWJ1ZmZlci0+bG9zdF9wYWNrZXRfY291bnQgPSAwOworCWF0b21pY19zZXQoJmJ1ZmZlci0+c2l6ZSwgMCk7CisgICAgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJmJ1ZmZlci0+d2FpdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3BhY2tldF9idWZmZXJfZGVzdHJveShzdHJ1Y3QgcGFja2V0X2J1ZmZlciAqYnVmZmVyKQoreworCWtmcmVlKGJ1ZmZlci0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK3BhY2tldF9idWZmZXJfZ2V0KHN0cnVjdCBwYWNrZXRfYnVmZmVyICpidWZmZXIsIHZvaWQgKmRhdGEsIHNpemVfdCB1c2VyX2xlbmd0aCkKK3sKKwlzaXplX3QgbGVuZ3RoOworCWNoYXIgKmVuZDsKKworCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYnVmZmVyLT53YWl0LAorCQkJCSAgICAgYXRvbWljX3JlYWQoJmJ1ZmZlci0+c2l6ZSkgPiAwKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIEZJWE1FOiBDaGVjayBsZW5ndGggPD0gdXNlcl9sZW5ndGguICovCisKKwllbmQgPSBidWZmZXItPmRhdGEgKyBidWZmZXItPmNhcGFjaXR5OworCWxlbmd0aCA9IGJ1ZmZlci0+aGVhZC0+bGVuZ3RoOworCisJaWYgKCZidWZmZXItPmhlYWQtPmRhdGFbbGVuZ3RoXSA8IGVuZCkgeworCQlpZiAoY29weV90b191c2VyKGRhdGEsIGJ1ZmZlci0+aGVhZC0+ZGF0YSwgbGVuZ3RoKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlidWZmZXItPmhlYWQgPSAoc3RydWN0IHBhY2tldCAqKSAmYnVmZmVyLT5oZWFkLT5kYXRhW2xlbmd0aF07CisJfQorCWVsc2UgeworCQlzaXplX3Qgc3BsaXQgPSBlbmQgLSBidWZmZXItPmhlYWQtPmRhdGE7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihkYXRhLCBidWZmZXItPmhlYWQtPmRhdGEsIHNwbGl0KSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoY29weV90b191c2VyKGRhdGEgKyBzcGxpdCwgYnVmZmVyLT5kYXRhLCBsZW5ndGggLSBzcGxpdCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnVmZmVyLT5oZWFkID0gKHN0cnVjdCBwYWNrZXQgKikgJmJ1ZmZlci0+ZGF0YVtsZW5ndGggLSBzcGxpdF07CisJfQorCisJLyogRGVjcmVhc2UgYnVmZmVyLT5zaXplIGFzIHRoZSBsYXN0IHRoaW5nLCBzaW5jZSB0aGlzIGlzIHdoYXQKKwkgKiBrZWVwcyB0aGUgaW50ZXJydXB0IGZyb20gb3ZlcndyaXRpbmcgdGhlIHBhY2tldCB3ZSBhcmUKKwkgKiByZXRyaWV2aW5nIGZyb20gdGhlIGJ1ZmZlci4gICovCisKKwlhdG9taWNfc3ViKHNpemVvZiAoc3RydWN0IHBhY2tldCkgKyBsZW5ndGgsICZidWZmZXItPnNpemUpOworCisJcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIHZvaWQKK3BhY2tldF9idWZmZXJfcHV0KHN0cnVjdCBwYWNrZXRfYnVmZmVyICpidWZmZXIsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisJY2hhciAqZW5kOworCisJYnVmZmVyLT50b3RhbF9wYWNrZXRfY291bnQrKzsKKworCWlmIChidWZmZXItPmNhcGFjaXR5IDwgCisJICAgIGF0b21pY19yZWFkKCZidWZmZXItPnNpemUpICsgc2l6ZW9mIChzdHJ1Y3QgcGFja2V0KSArIGxlbmd0aCkgeworCQlidWZmZXItPmxvc3RfcGFja2V0X2NvdW50Kys7CisJCXJldHVybjsKKwl9CisKKwllbmQgPSBidWZmZXItPmRhdGEgKyBidWZmZXItPmNhcGFjaXR5OworCWJ1ZmZlci0+dGFpbC0+bGVuZ3RoID0gbGVuZ3RoOworCisJaWYgKCZidWZmZXItPnRhaWwtPmRhdGFbbGVuZ3RoXSA8IGVuZCkgeworCQltZW1jcHkoYnVmZmVyLT50YWlsLT5kYXRhLCBkYXRhLCBsZW5ndGgpOworCQlidWZmZXItPnRhaWwgPSAoc3RydWN0IHBhY2tldCAqKSAmYnVmZmVyLT50YWlsLT5kYXRhW2xlbmd0aF07CisJfQorCWVsc2UgeworCQlzaXplX3Qgc3BsaXQgPSBlbmQgLSBidWZmZXItPnRhaWwtPmRhdGE7CisKKwkJbWVtY3B5KGJ1ZmZlci0+dGFpbC0+ZGF0YSwgZGF0YSwgc3BsaXQpOworCQltZW1jcHkoYnVmZmVyLT5kYXRhLCBkYXRhICsgc3BsaXQsIGxlbmd0aCAtIHNwbGl0KTsKKwkJYnVmZmVyLT50YWlsID0gKHN0cnVjdCBwYWNrZXQgKikgJmJ1ZmZlci0+ZGF0YVtsZW5ndGggLSBzcGxpdF07CisJfQorCQorCS8qIEZpbmFsbHksIGFkanVzdCBidWZmZXIgc2l6ZSBhbmQgd2FrZSB1cCB1c2Vyc3BhY2UgcmVhZGVyLiAqLworCisJYXRvbWljX2FkZChzaXplb2YgKHN0cnVjdCBwYWNrZXQpICsgbGVuZ3RoLCAmYnVmZmVyLT5zaXplKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmJ1ZmZlci0+d2FpdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmVnX3dyaXRlKHN0cnVjdCBwY2lseW54ICpseW54LCBpbnQgb2Zmc2V0LCB1MzIgZGF0YSkKK3sKKyAgICAgICAgd3JpdGVsKGRhdGEsIGx5bngtPnJlZ2lzdGVycyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCityZWdfcmVhZChzdHJ1Y3QgcGNpbHlueCAqbHlueCwgaW50IG9mZnNldCkKK3sKKyAgICAgICAgcmV0dXJuIHJlYWRsKGx5bngtPnJlZ2lzdGVycyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmVnX3NldF9iaXRzKHN0cnVjdCBwY2lseW54ICpseW54LCBpbnQgb2Zmc2V0LCB1MzIgbWFzaykKK3sKKyAgICAgICAgcmVnX3dyaXRlKGx5bngsIG9mZnNldCwgKHJlZ19yZWFkKGx5bngsIG9mZnNldCkgfCBtYXNrKSk7Cit9CisKKy8qIE1heWJlIHRoZSBwY2wgcHJvZ3JhbXMgY291bGQgYmUgc2V0dXAgdG8ganVzdCBhcHBlbmQgZGF0YSBpbnN0ZWFkCisgKiBvZiB1c2luZyBhIHdob2xlIHBhY2tldC4gKi8KKworc3RhdGljIGlubGluZSB2b2lkIAorcnVuX3BjbChzdHJ1Y3QgcGNpbHlueCAqbHlueCwgZG1hX2FkZHJfdCBwY2xfYnVzLCBpbnQgZG1hY2hhbikKK3sKKyAgICAgICAgcmVnX3dyaXRlKGx5bngsIERNQTBfQ1VSUkVOVF9QQ0wgKyBkbWFjaGFuICogMHgyMCwgcGNsX2J1cyk7CisgICAgICAgIHJlZ193cml0ZShseW54LCBETUEwX0NIQU5fQ1RSTCArIGRtYWNoYW4gKiAweDIwLAorICAgICAgICAgICAgICAgICAgRE1BX0NIQU5fQ1RSTF9FTkFCTEUgfCBETUFfQ0hBTl9DVFJMX0xJTkspOworfQorCitzdGF0aWMgaW50CitzZXRfcGh5X3JlZyhzdHJ1Y3QgcGNpbHlueCAqbHlueCwgaW50IGFkZHIsIGludCB2YWwpCit7CisgICAgICAgIGlmIChhZGRyID4gMTUpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IFBIWSByZWdpc3RlciBhZGRyZXNzICVkIG91dCBvZiByYW5nZSIsCisJCSAgICAgIF9fRlVOQ1RJT05fXywgYWRkcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZhbCA+IDB4ZmYpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IFBIWSByZWdpc3RlciB2YWx1ZSAlZCBvdXQgb2YgcmFuZ2UiLAorCQkgICAgICBfX0ZVTkNUSU9OX18sIHZhbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgcmVnX3dyaXRlKGx5bngsIExJTktfUEhZLCBMSU5LX1BIWV9XUklURSB8CisJCSAgTElOS19QSFlfQUREUihhZGRyKSB8IExJTktfUEhZX1dEQVRBKHZhbCkpOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbm9zeV9zdGFydF9zbm9vcChzdHJ1Y3QgY2xpZW50ICpjbGllbnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmx5bngtPmNsaWVudF9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmxpbmssICZjbGllbnQtPmx5bngtPmNsaWVudF9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGllbnQtPmx5bngtPmNsaWVudF9saXN0X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK25vc3lfc3RvcF9zbm9vcChzdHJ1Y3QgY2xpZW50ICpjbGllbnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmx5bngtPmNsaWVudF9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmY2xpZW50LT5saW5rKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGllbnQtPmx5bngtPmNsaWVudF9saXN0X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGllbnQgKgorbm9zeV9hZGRfY2xpZW50KHN0cnVjdCBwY2lseW54ICpseW54KQoreworCXN0cnVjdCBjbGllbnQgKmNsaWVudDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mICpjbGllbnQsIEdGUF9LRVJORUwpOworCWNsaWVudC0+dGNvZGVfbWFzayA9IH4wOworCWNsaWVudC0+bHlueCA9IGx5bng7CisJSU5JVF9MSVNUX0hFQUQoJmNsaWVudC0+bGluayk7CisKKwlpZiAocGFja2V0X2J1ZmZlcl9pbml0KCZjbGllbnQtPmJ1ZmZlciwgMTI4ICogMTAyNCkgPCAwKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCWRlYnVnKCJGYWlsZWQgdG8gYWxsb2NhdGUgcGFja2V0IGJ1ZmZlclxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBjbGllbnQ7Cit9CisKK3N0YXRpYyB2b2lkCitub3N5X3JlbW92ZV9jbGllbnQoc3RydWN0IGNsaWVudCAqY2xpZW50KQoreworCW5vc3lfc3RvcF9zbm9vcChjbGllbnQpOworCXBhY2tldF9idWZmZXJfZGVzdHJveSgmY2xpZW50LT5idWZmZXIpOworCWtmcmVlKGNsaWVudCk7Cit9CisKK3N0YXRpYyBpbnQKK25vc3lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCisJaWYgKG1pbm9yID4gTUFYX01JTk9SUyB8fCBtaW5vcnNbbWlub3JdID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisgICAgICAgIGZpbGUtPnByaXZhdGVfZGF0YSA9IG5vc3lfYWRkX2NsaWVudChtaW5vcnNbbWlub3JdKTsKKwlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25vc3lfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlub3N5X3JlbW92ZV9jbGllbnQoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorbm9zeV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICpwdCkKK3sKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmNsaWVudC0+YnVmZmVyLndhaXQsIHB0KTsKKworCWlmIChhdG9taWNfcmVhZCgmY2xpZW50LT5idWZmZXIuc2l6ZSkgPiAwKQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdAorbm9zeV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCit7CisJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHBhY2tldF9idWZmZXJfZ2V0KCZjbGllbnQtPmJ1ZmZlciwgYnVmZmVyLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQKK25vc3lfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE5PU1lfSU9DX0dFVF9TVEFUUzogeworCQlzdHJ1Y3Qgbm9zeV9zdGF0cyBzdGF0czsKKworCQlzdGF0cy50b3RhbF9wYWNrZXRfY291bnQgPSBjbGllbnQtPmJ1ZmZlci50b3RhbF9wYWNrZXRfY291bnQ7CisJCXN0YXRzLmxvc3RfcGFja2V0X2NvdW50ID0gY2xpZW50LT5idWZmZXIubG9zdF9wYWNrZXRfY291bnQ7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKikgYXJnLCAmc3RhdHMsIHNpemVvZiBzdGF0cykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCQorCWNhc2UgTk9TWV9JT0NfU1RBUlQ6CisJCW5vc3lfc3RhcnRfc25vb3AoY2xpZW50KTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIE5PU1lfSU9DX1NUT1A6CisJCW5vc3lfc3RvcF9zbm9vcChjbGllbnQpOworCQlyZXR1cm4gMDsKKworCWNhc2UgTk9TWV9JT0NfRklMVEVSOgorCQljbGllbnQtPnRjb2RlX21hc2sgPSBhcmc7CisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIEZsdXNoIGJ1ZmZlciwgY29uZmlndXJlIGZpbHRlci4gKi8KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5vc3lfb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorICAgICAgICAucmVhZCA9ICAgICAgICAgbm9zeV9yZWFkLAorCS5pb2N0bCA9CW5vc3lfaW9jdGwsCisgICAgICAgIC5wb2xsID0gICAgICAgICBub3N5X3BvbGwsCisgICAgICAgIC5vcGVuID0gICAgICAgICBub3N5X29wZW4sCisgICAgICAgIC5yZWxlYXNlID0gICAgICBub3N5X3JlbGVhc2UsCit9OworCisjZGVmaW5lIFBIWV9QQUNLRVRfU0laRSAxMiAvKiAxIHBheWxvYWQsIDEgaW52ZXJzZSwgMSBhY2sgPSAzIHF1YWRsZXRzICovCisKK3N0cnVjdCBsaW5rX3BhY2tldCB7CisJdW5zaWduZWQgaW50IHByaW9yaXR5IDogNDsKKwl1bnNpZ25lZCBpbnQgdGNvZGUgOiA0OworCXVuc2lnbmVkIGludCBydCA6IDI7CisJdW5zaWduZWQgaW50IHRsYWJlbCA6IDY7CisJdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uIDogMTY7Cit9OworCitzdGF0aWMgdm9pZAorcGFja2V0X2hhbmRsZXIoc3RydWN0IHBjaWx5bnggKmx5bngpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IGNsaWVudCAqY2xpZW50OworCXVuc2lnbmVkIGxvbmcgdGNvZGVfbWFzazsKKwlzaXplX3QgbGVuZ3RoOworCXN0cnVjdCBsaW5rX3BhY2tldCAqcGFja2V0OworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJLyogRklYTUU6IEFsc28gcmVwb3J0IHJjdl9zcGVlZC4gKi8KKworCWxlbmd0aCA9IGx5bngtPnJjdl9wY2wtPnBjbF9zdGF0dXMudHJhbnNmZXJfY291bnQ7CisJcGFja2V0ID0gKHN0cnVjdCBsaW5rX3BhY2tldCAqKSAmbHlueC0+cmN2X2J1ZmZlclsxXTsKKworCWRvX2dldHRpbWVvZmRheSgmdHYpOworCWx5bngtPnJjdl9idWZmZXJbMF0gPSB0di50dl91c2VjOworCisJaWYgKGxlbmd0aCA9PSBQSFlfUEFDS0VUX1NJWkUpCisJCXRjb2RlX21hc2sgPSAxIDw8IFRDT0RFX1BIWV9QQUNLRVQ7CisJZWxzZQorCQl0Y29kZV9tYXNrID0gMSA8PCBwYWNrZXQtPnRjb2RlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmx5bngtPmNsaWVudF9saXN0X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmbHlueC0+Y2xpZW50X2xpc3QpIHsKKwkJY2xpZW50ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBjbGllbnQsIGxpbmspOworCQlpZiAoY2xpZW50LT50Y29kZV9tYXNrICYgdGNvZGVfbWFzaykKKwkJCXBhY2tldF9idWZmZXJfcHV0KCZjbGllbnQtPmJ1ZmZlciwgCisJCQkJCSAgbHlueC0+cmN2X2J1ZmZlciwgbGVuZ3RoICsgNCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHlueC0+Y2xpZW50X2xpc3RfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZAorYnVzX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHBjaWx5bnggKmx5bngpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IGNsaWVudCAqY2xpZW50OworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHlueC0+Y2xpZW50X2xpc3RfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaChwb3MsICZseW54LT5jbGllbnRfbGlzdCkgeworCQljbGllbnQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGNsaWVudCwgbGluayk7CisJCXBhY2tldF9idWZmZXJfcHV0KCZjbGllbnQtPmJ1ZmZlciwgJnR2LnR2X3VzZWMsIDQpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmx5bngtPmNsaWVudF9saXN0X2xvY2ssIGZsYWdzKTsKK30KKworCisKK3N0YXRpYyBpcnFyZXR1cm5fdAoraXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2aWNlKQoreworCXN0cnVjdCBwY2lseW54ICpseW54ID0gKHN0cnVjdCBwY2lseW54ICopIGRldmljZTsKKwl1MzIgcGNpX2ludF9zdGF0dXM7CisJCisgICAgICAgIHBjaV9pbnRfc3RhdHVzID0gcmVnX3JlYWQobHlueCwgUENJX0lOVF9TVEFUVVMpOworCisJaWYgKChwY2lfaW50X3N0YXR1cyAmIFBDSV9JTlRfSU5UX1BFTkQpID09IDApCisJCS8qIE5vdCBvdXIgaW50ZXJydXB0LCBiYWlsIG91dCBxdWlja2x5LiAqLworCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAoKHBjaV9pbnRfc3RhdHVzICYgUENJX0lOVF9QMTM5NF9JTlQpICE9IDApIHsKKwkJdTMyIGxpbmtfaW50X3N0YXR1czsKKworCQlsaW5rX2ludF9zdGF0dXMgPSByZWdfcmVhZChseW54LCBMSU5LX0lOVF9TVEFUVVMpOworCQlyZWdfd3JpdGUobHlueCwgTElOS19JTlRfU1RBVFVTLCBsaW5rX2ludF9zdGF0dXMpOworCisJCWlmICgobGlua19pbnRfc3RhdHVzICYgTElOS19JTlRfUEhZX0JVU1JFU0VUKSA+IDApCisJCQlidXNfcmVzZXRfaGFuZGxlcihseW54KTsKKwl9CisKKwkvKiBDbGVhciB0aGUgUENJX0lOVF9TVEFUVVMgcmVnaXN0ZXIgb25seSBhZnRlciBjbGVhcmluZyB0aGUKKwkgKiBMSU5LX0lOVF9TVEFUVVMgcmVnaXN0ZXI7IG90aGVyd2lzZSB0aGUgUENJX0lOVF9QMTM5NCB3aWxsCisJICogYmUgc2V0IGFnYWluIGltbWVkaWF0ZWx5LiAqLworCisJcmVnX3dyaXRlKGx5bngsIFBDSV9JTlRfU1RBVFVTLCBwY2lfaW50X3N0YXR1cyk7CisKKwlpZiAoKHBjaV9pbnRfc3RhdHVzICYgUENJX0lOVF9ETUEwX0hMVCkgPiAwKSB7CisJCXBhY2tldF9oYW5kbGVyKGx5bngpOworCQlydW5fcGNsKGx5bngsIGx5bngtPnJjdl9zdGFydF9wY2xfYnVzLCAwKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkCityZW1vdmVfY2FyZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworICAgICAgICBzdHJ1Y3QgcGNpbHlueCAqbHlueDsKKworICAgICAgICBseW54ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisgICAgICAgIGlmICghbHlueCkKKwkJcmV0dXJuOworICAgICAgICBwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCXJlZ193cml0ZShseW54LCBQQ0lfSU5UX0VOQUJMRSwgMCk7CisJZnJlZV9pcnEobHlueC0+cGNpX2RldmljZS0+aXJxLCBseW54KTsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQobHlueC0+cGNpX2RldmljZSwgc2l6ZW9mIChzdHJ1Y3QgcGNsKSwgCisJCQkgICAgbHlueC0+cmN2X3N0YXJ0X3BjbCwgbHlueC0+cmN2X3N0YXJ0X3BjbF9idXMpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQobHlueC0+cGNpX2RldmljZSwgc2l6ZW9mIChzdHJ1Y3QgcGNsKSwgCisJCQkgICAgbHlueC0+cmN2X3BjbCwgbHlueC0+cmN2X3BjbF9idXMpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQobHlueC0+cGNpX2RldmljZSwgUEFHRV9TSVpFLAorCQkJICAgIGx5bngtPnJjdl9idWZmZXIsIGx5bngtPnJjdl9idWZmZXJfYnVzKTsKKworCWlvdW5tYXAobHlueC0+cmVnaXN0ZXJzKTsKKworCW1pbm9yc1tseW54LT5taXNjLm1pbm9yXSA9IE5VTEw7CisJbWlzY19kZXJlZ2lzdGVyKCZseW54LT5taXNjKTsKKworCWtmcmVlKGx5bngpOworfQorCisjZGVmaW5lIFJDVl9CVUZGRVJfU0laRSAoMTYgKiAxMDI0KQorCisjZGVmaW5lIEZBSUwocywgYXJncy4uLikJCQlcCisJZG8gewkJCQkJXAorCQllcnJvcihzLCAjIyBhcmdzKTsJCVwKKwkJcmV0dXJuIGVycjsJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBfX2RldmluaXQKK2FkZF9jYXJkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICp1bnVzZWQpCit7CisgICAgICAgIHN0cnVjdCBwY2lseW54ICpseW54OworCXUzMiBwLCBlbmQ7CisJaW50IGVyciwgaTsKKworICAgICAgICBlcnIgPSAtRU5YSU87CisKKyAgICAgICAgaWYgKHBjaV9zZXRfZG1hX21hc2soZGV2LCAweGZmZmZmZmZmKSkKKyAgICAgICAgICAgICAgICBGQUlMKCJETUEgYWRkcmVzcyBsaW1pdHMgbm90IHN1cHBvcnRlZCAiCisJCSAgICAgImZvciBQQ0lMeW54IGhhcmR3YXJlLlxuIik7CisgICAgICAgIGlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKQorICAgICAgICAgICAgICAgIEZBSUwoIkZhaWxlZCB0byBlbmFibGUgUENJTHlueCBoYXJkd2FyZS5cbiIpOworICAgICAgICBwY2lfc2V0X21hc3RlcihkZXYpOworCisgICAgICAgIGVyciA9IC1FTk9NRU07CisKKwlseW54ID0ga3phbGxvYyhzaXplb2YgKmx5bngsIEdGUF9LRVJORUwpOworICAgICAgICBpZiAobHlueCA9PSBOVUxMKQorCQlGQUlMKCJGYWlsZWQgdG8gYWxsb2NhdGUgY29udHJvbCBzdHJ1Y3R1cmUgbWVtb3J5LlxuIik7CisKKyAgICAgICAgbHlueC0+cGNpX2RldmljZSA9IGRldjsKKyAgICAgICAgcGNpX3NldF9kcnZkYXRhKGRldiwgbHlueCk7CisKKwlzcGluX2xvY2tfaW5pdCgmbHlueC0+Y2xpZW50X2xpc3RfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmx5bngtPmNsaWVudF9saXN0KTsKKworICAgICAgICBseW54LT5yZWdpc3RlcnMgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lMWU5YX01BWF9SRUdJU1RFUik7CisKKyAgICAgICAgbHlueC0+cmN2X3N0YXJ0X3BjbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGx5bngtPnBjaV9kZXZpY2UsCisJCQkJCQkgICBzaXplb2Yoc3RydWN0IHBjbCksCisJCQkJCQkgICAmbHlueC0+cmN2X3N0YXJ0X3BjbF9idXMpOworICAgICAgICBseW54LT5yY3ZfcGNsID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobHlueC0+cGNpX2RldmljZSwKKwkJCQkJICAgICBzaXplb2Yoc3RydWN0IHBjbCksCisJCQkJCSAgICAgJmx5bngtPnJjdl9wY2xfYnVzKTsKKyAgICAgICAgbHlueC0+cmN2X2J1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGx5bngtPnBjaV9kZXZpY2UsIFJDVl9CVUZGRVJfU0laRSwKKwkJCQkJCSZseW54LT5yY3ZfYnVmZmVyX2J1cyk7CisgICAgICAgIGlmIChseW54LT5yY3Zfc3RhcnRfcGNsID09IE5VTEwgfHwKKwkgICAgbHlueC0+cmN2X3BjbCA9PSBOVUxMIHx8CisJICAgIGx5bngtPnJjdl9idWZmZXIgPT0gTlVMTCkKKwkJLyogRklYTUU6IGRvIHByb3BlciBlcnJvciBoYW5kbGluZy4gKi8KKyAgICAgICAgICAgICAgICBGQUlMKCJGYWlsZWQgdG8gYWxsb2NhdGUgcmVjZWl2ZSBidWZmZXIuXG4iKTsKKworCWx5bngtPnJjdl9zdGFydF9wY2wtPm5leHQgPSBseW54LT5yY3ZfcGNsX2J1czsKKyAgICAgICAgbHlueC0+cmN2X3BjbC0+bmV4dCA9IFBDTF9ORVhUX0lOVkFMSUQ7CisgICAgICAgIGx5bngtPnJjdl9wY2wtPmFzeW5jX2Vycm9yX25leHQgPSBQQ0xfTkVYVF9JTlZBTElEOworCisgICAgICAgIGx5bngtPnJjdl9wY2wtPmJ1ZmZlclswXS5jb250cm9sID0KKwkJUENMX0NNRF9SQ1YgfCBQQ0xfQklHRU5ESUFOIHwgMjA0NDsKKyAgICAgICAgbHlueC0+cmN2X3BjbC0+YnVmZmVyWzBdLnBvaW50ZXIgPSBseW54LT5yY3ZfYnVmZmVyX2J1cyArIDQ7CisJcCA9IGx5bngtPnJjdl9idWZmZXJfYnVzICsgMjA0ODsKKwllbmQgPSBseW54LT5yY3ZfYnVmZmVyX2J1cyArIFJDVl9CVUZGRVJfU0laRTsKKwlmb3IgKGkgPSAxOyBwIDwgZW5kOyBpKyssIHAgKz0gMjA0OCkgeworCQlseW54LT5yY3ZfcGNsLT5idWZmZXJbaV0uY29udHJvbCA9CisJCQlQQ0xfQ01EX1JDViB8IFBDTF9CSUdFTkRJQU4gfCAyMDQ4OworCQlseW54LT5yY3ZfcGNsLT5idWZmZXJbaV0ucG9pbnRlciA9IHA7CisJfQorCWx5bngtPnJjdl9wY2wtPmJ1ZmZlcltpIC0gMV0uY29udHJvbCB8PSBQQ0xfTEFTVF9CVUZGOworCisgICAgICAgIHJlZ19zZXRfYml0cyhseW54LCBNSVNDX0NPTlRST0wsIE1JU0NfQ09OVFJPTF9TV1JFU0VUKTsKKyAgICAgICAgLyogRml4IGJ1Z2d5IGNhcmRzIHdpdGggYXV0b2Jvb3QgcGluIG5vdCB0aWVkIGxvdzogKi8KKyAgICAgICAgcmVnX3dyaXRlKGx5bngsIERNQTBfQ0hBTl9DVFJMLCAwKTsKKyAgICAgICAgcmVnX3dyaXRlKGx5bngsIERNQV9HTE9CQUxfUkVHSVNURVIsIDB4MDAgPDwgMjQpOworCisjaWYgMAorICAgICAgICAvKiBub3csIGxvb2tpbmcgZm9yIFBIWSByZWdpc3RlciBzZXQgKi8KKyAgICAgICAgaWYgKChnZXRfcGh5X3JlZyhseW54LCAyKSAmIDB4ZTApID09IDB4ZTApIHsKKyAgICAgICAgICAgICAgICBseW54LT5waHlpYy5yZWdfMTM5NGEgPSAxOworICAgICAgICAgICAgICAgIFBSSU5UKEtFUk5fSU5GTywgbHlueC0+aWQsCisgICAgICAgICAgICAgICAgICAgICAgImZvdW5kIDEzOTRhIGNvbmZvcm0gUEhZICh1c2luZyBleHRlbmRlZCByZWdpc3RlciBzZXQpIik7CisgICAgICAgICAgICAgICAgbHlueC0+cGh5aWMudmVuZG9yID0gZ2V0X3BoeV92ZW5kb3JpZChseW54KTsKKyAgICAgICAgICAgICAgICBseW54LT5waHlpYy5wcm9kdWN0ID0gZ2V0X3BoeV9wcm9kdWN0aWQobHlueCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbHlueC0+cGh5aWMucmVnXzEzOTRhID0gMDsKKyAgICAgICAgICAgICAgICBQUklOVChLRVJOX0lORk8sIGx5bngtPmlkLCAiZm91bmQgb2xkIDEzOTQgUEhZIik7CisgICAgICAgIH0KKyNlbmRpZgorCisJLyogU2V0dXAgdGhlIGdlbmVyYWwgcmVjZWl2ZSBGSUZPIG1heCBzaXplLiAqLworCXJlZ193cml0ZShseW54LCBGSUZPX1NJWkVTLCAyNTUpOworCisgICAgICAgIHJlZ19zZXRfYml0cyhseW54LCBQQ0lfSU5UX0VOQUJMRSwgUENJX0lOVF9ETUFfQUxMKTsKKworICAgICAgICByZWdfd3JpdGUobHlueCwgTElOS19JTlRfRU5BQkxFLAorCQkgIExJTktfSU5UX1BIWV9USU1FX09VVCB8IExJTktfSU5UX1BIWV9SRUdfUkNWRCB8CisJCSAgTElOS19JTlRfUEhZX0JVU1JFU0VUIHwgTElOS19JTlRfSVRfU1RVQ0sgfAorCQkgIExJTktfSU5UX0FUX1NUVUNLIHwgTElOS19JTlRfU05UUkogfAorCQkgIExJTktfSU5UX1RDX0VSUiB8IExJTktfSU5UX0dSRl9PVkVSX0ZMT1cgfAorCQkgIExJTktfSU5UX0lURl9VTkRFUl9GTE9XIHwgTElOS19JTlRfQVRGX1VOREVSX0ZMT1cpOworCisJLyogRGlzYWJsZSB0aGUgTCBmbGFnIGluIHNlbGYgSUQgcGFja2V0cy4gKi8KKwlzZXRfcGh5X3JlZyhseW54LCA0LCAwKTsKKworCS8qIFB1dCB0aGlzIGJhYnkgaW50byBzbm9vcCBtb2RlICovCisJcmVnX3NldF9iaXRzKGx5bngsIExJTktfQ09OVFJPTCwgTElOS19DT05UUk9MX1NOT09QX0VOQUJMRSk7CisKKwlydW5fcGNsKGx5bngsIGx5bngtPnJjdl9zdGFydF9wY2xfYnVzLCAwKTsKKworICAgICAgICBpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGlycV9oYW5kbGVyLCBJUlFGX1NIQVJFRCwgZHJpdmVyX25hbWUsIGx5bngpKQorCQlGQUlMKCJGYWlsZWQgdG8gYWxsb2NhdGUgc2hhcmVkIGludGVycnVwdCAlZC4iLCBkZXYtPmlycSk7CisKKwlseW54LT5taXNjLnBhcmVudCA9ICZkZXYtPmRldjsKKwlseW54LT5taXNjLm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SOworCWx5bngtPm1pc2MubmFtZSA9ICJub3N5IjsKKwlseW54LT5taXNjLmZvcHMgPSAmbm9zeV9vcHM7CisJaWYgKG1pc2NfcmVnaXN0ZXIoJmx5bngtPm1pc2MpKQorICAgICAgICAgICAgICAgIEZBSUwoIkZhaWxlZCB0byByZWdpc3RlciBtaXNjIGNoYXIgZGV2aWNlLiIpOworCW1pbm9yc1tseW54LT5taXNjLm1pbm9yXSA9IGx5bng7CisKKwlub3RpZnkoIkluaXRpYWxpemVkIFBDSUx5bnggSUVFRTEzOTQgY2FyZCwgaXJxPSVkXG4iLCBkZXYtPmlycSk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworCXsKKyAgICAgICAgICAgICAgICAudmVuZG9yID0gICAgUENJX1ZFTkRPUl9JRF9USSwKKyAgICAgICAgICAgICAgICAuZGV2aWNlID0gICAgUENJX0RFVklDRV9JRF9USV9QQ0lMWU5YLAorICAgICAgICAgICAgICAgIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorICAgICAgICAgICAgICAgIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCX0sCisJeyB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbHlueF9wY2lfZHJpdmVyID0geworCS5uYW1lID0JCShjaGFyICopIGRyaXZlcl9uYW1lLAorCS5pZF90YWJsZSA9CXBjaV90YWJsZSwKKwkucHJvYmUgPQlhZGRfY2FyZCwKKwkucmVtb3ZlID0JX19kZXZleGl0X3AocmVtb3ZlX2NhcmQpLAorfTsKKworTU9EVUxFX0FVVEhPUigiS3Jpc3RpYW4gSPhnc2JlcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiU25vb3AgbW9kZSBkcml2ZXIgZm9yIFRJIHBjaWx5bnggMTM5NCBjb250cm9sbGVycyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaV90YWJsZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IG5vc3lfaW5pdCh2b2lkKQoreworIAkvKiBub3RpZnkoIkxvYWRlZCAlcyB2ZXJzaW9uICVzLlxuIiwgZHJpdmVyX25hbWUsIFZFUlNJT04pOyAqLworCisgICAgICAgIHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZseW54X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbm9zeV9jbGVhbnVwKHZvaWQpCit7CisgICAgICAgIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbHlueF9wY2lfZHJpdmVyKTsKKworCW5vdGlmeSgiVW5sb2FkZWQgJXMuXG4iLCBkcml2ZXJfbmFtZSk7Cit9CisKKworbW9kdWxlX2luaXQobm9zeV9pbml0KTsKK21vZHVsZV9leGl0KG5vc3lfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL25vc3kuaCBiL2RyaXZlcnMvZmlyZXdpcmUvbm9zeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NDAwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2ZpcmV3aXJlL25vc3kuaApAQCAtMCwwICsxLDIzOCBAQAorLyogQ2hpcCByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgUENJTHlueCBjaGlwc2V0LiAgQmFzZWQgb24gcGNpbHlueC5oCisgKiBmcm9tIHRoZSBMaW51eCAxMzk0IGRyaXZlcnMsIGJ1dCBtb2RpZmllZCBhIGJpdCBzbyB0aGUgbmFtZXMgaGVyZQorICogbWF0Y2ggdGhlIHNwZWNpZmljYXRpb24gZXhhY3RseSAoZXZlbiB0aG91Z2ggdGhleSBoYXZlIHdlaXJkIG5hbWVzLAorICogbGlrZSB4eHhfT1ZFUl9GTE9XLCBvciBhcmJpdHJhcnkgYWJicmV2aWF0aW9ucyBsaWtlIFNOVFJKIGZvciAic2VudAorICogcmVqZWN0IiBldGMuKQorICovCisKKyNkZWZpbmUgUENJTFlOWF9NQVhfUkVHSVNURVIgICAgIDB4ZmZmCisjZGVmaW5lIFBDSUxZTlhfTUFYX01FTU9SWSAgICAgICAweGZmZmYKKworI2RlZmluZSBQQ0lfTEFURU5DWV9DQUNIRUxJTkUgICAgICAgICAgICAgMHgwYworCisjZGVmaW5lIE1JU0NfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIE1JU0NfQ09OVFJPTF9TV1JFU0VUICAgICAgICAgICAgICAoMTw8MCkKKworI2RlZmluZSBTRVJJQUxfRUVQUk9NX0NPTlRST0wgICAgICAgICAgICAgMHg0NAorCisjZGVmaW5lIFBDSV9JTlRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAweDQ4CisjZGVmaW5lIFBDSV9JTlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAweDRjICAgICAgICAgICAgICAgCisvKiBzdGF0dXMgYW5kIGVuYWJsZSBoYXZlIGlkZW50aWNhbCBiaXQgbnVtYmVycyAqLworI2RlZmluZSBQQ0lfSU5UX0lOVF9QRU5EICAgICAgICAgICAgICAgICAgKDE8PDMxKQorI2RlZmluZSBQQ0lfSU5UX0ZSQ19JTlQgICAgICAgICAgICAgICAgICAgKDE8PDMwKQorI2RlZmluZSBQQ0lfSU5UX1NMVl9BRFJfUEVSUiAgICAgICAgICAgICAgKDE8PDI4KQorI2RlZmluZSBQQ0lfSU5UX1NMVl9EQVRfUEVSUiAgICAgICAgICAgICAgKDE8PDI3KQorI2RlZmluZSBQQ0lfSU5UX01TVF9EQVRfUEVSUiAgICAgICAgICAgICAgKDE8PDI2KQorI2RlZmluZSBQQ0lfSU5UX01TVF9ERVZfVE8gICAgICAgICAgICAgICAgKDE8PDI1KQorI2RlZmluZSBQQ0lfSU5UX0lOVF9TTFZfVE8gICAgICAgICAgICAgICAgKDE8PDIzKQorI2RlZmluZSBQQ0lfSU5UX0FVWF9UTyAgICAgICAgICAgICAgICAgICAgKDE8PDE4KQorI2RlZmluZSBQQ0lfSU5UX0FVWF9JTlQgICAgICAgICAgICAgICAgICAgKDE8PDE3KQorI2RlZmluZSBQQ0lfSU5UX1AxMzk0X0lOVCAgICAgICAgICAgICAgICAgKDE8PDE2KQorI2RlZmluZSBQQ0lfSU5UX0RNQTRfUENMICAgICAgICAgICAgICAgICAgKDE8PDkpCisjZGVmaW5lIFBDSV9JTlRfRE1BNF9ITFQgICAgICAgICAgICAgICAgICAoMTw8OCkKKyNkZWZpbmUgUENJX0lOVF9ETUEzX1BDTCAgICAgICAgICAgICAgICAgICgxPDw3KQorI2RlZmluZSBQQ0lfSU5UX0RNQTNfSExUICAgICAgICAgICAgICAgICAgKDE8PDYpCisjZGVmaW5lIFBDSV9JTlRfRE1BMl9QQ0wgICAgICAgICAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgUENJX0lOVF9ETUEyX0hMVCAgICAgICAgICAgICAgICAgICgxPDw0KQorI2RlZmluZSBQQ0lfSU5UX0RNQTFfUENMICAgICAgICAgICAgICAgICAgKDE8PDMpCisjZGVmaW5lIFBDSV9JTlRfRE1BMV9ITFQgICAgICAgICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgUENJX0lOVF9ETUEwX1BDTCAgICAgICAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBQQ0lfSU5UX0RNQTBfSExUICAgICAgICAgICAgICAgICAgKDE8PDApCisvKiBhbGwgRE1BIGludGVycnVwdHMgY29tYmluZWQ6ICovCisjZGVmaW5lIFBDSV9JTlRfRE1BX0FMTCAgICAgICAgICAgICAgICAgICAweDNmZgorCisjZGVmaW5lIFBDSV9JTlRfRE1BX0hMVChjaGFuKSAgICAgICAgICAgICAoMSA8PCAoY2hhbiAqIDIpKQorI2RlZmluZSBQQ0lfSU5UX0RNQV9QQ0woY2hhbikgICAgICAgICAgICAgKDEgPDwgKGNoYW4gKiAyICsgMSkpCisKKyNkZWZpbmUgTEJVU19BRERSICAgICAgICAgICAgICAgICAgICAgICAgIDB4YjQKKyNkZWZpbmUgTEJVU19BRERSX1NFTF9SQU0gICAgICAgICAgICAgICAgICgweDA8PDE2KQorI2RlZmluZSBMQlVTX0FERFJfU0VMX1JPTSAgICAgICAgICAgICAgICAgKDB4MTw8MTYpCisjZGVmaW5lIExCVVNfQUREUl9TRUxfQVVYICAgICAgICAgICAgICAgICAoMHgyPDwxNikKKyNkZWZpbmUgTEJVU19BRERSX1NFTF9aViAgICAgICAgICAgICAgICAgICgweDM8PDE2KSAgICAgICAKKworI2RlZmluZSBHUElPX0NUUkxfQSAgICAgICAgICAgICAgICAgICAgICAgMHhiOAorI2RlZmluZSBHUElPX0NUUkxfQiAgICAgICAgICAgICAgICAgICAgICAgMHhiYworI2RlZmluZSBHUElPX0RBVEFfQkFTRSAgICAgICAgICAgICAgICAgICAgMHhjMAorCisjZGVmaW5lIERNQV9CUkVHKGJhc2UsIGNoYW4pICAgICAgICAgICAgICAoYmFzZSArIGNoYW4gKiAweDIwKQorI2RlZmluZSBETUFfU1JFRyhiYXNlLCBjaGFuKSAgICAgICAgICAgICAgKGJhc2UgKyBjaGFuICogMHgxMCkKKworI2RlZmluZSBQQ0xfTkVYVF9JTlZBTElEICgxPDwwKQorCisvKiB0cmFuc2ZlciBjb21tYW5kcyAqLworI2RlZmluZSBQQ0xfQ01EX1JDViAgICAgICAgICAgICgweDE8PDI0KQorI2RlZmluZSBQQ0xfQ01EX1JDVl9BTkRfVVBEQVRFICgweGE8PDI0KQorI2RlZmluZSBQQ0xfQ01EX1hNVCAgICAgICAgICAgICgweDI8PDI0KQorI2RlZmluZSBQQ0xfQ01EX1VORlhNVCAgICAgICAgICgweGM8PDI0KQorI2RlZmluZSBQQ0xfQ01EX1BDSV9UT19MQlVTICAgICgweDg8PDI0KQorI2RlZmluZSBQQ0xfQ01EX0xCVVNfVE9fUENJICAgICgweDk8PDI0KQorCisvKiBhdXggY29tbWFuZHMgKi8KKyNkZWZpbmUgUENMX0NNRF9OT1AgICAgICAgICAgICAoMHgwPDwyNCkKKyNkZWZpbmUgUENMX0NNRF9MT0FEICAgICAgICAgICAoMHgzPDwyNCkKKyNkZWZpbmUgUENMX0NNRF9TVE9SRVEgICAgICAgICAoMHg0PDwyNCkKKyNkZWZpbmUgUENMX0NNRF9TVE9SRUQgICAgICAgICAoMHhiPDwyNCkKKyNkZWZpbmUgUENMX0NNRF9TVE9SRTAgICAgICAgICAoMHg1PDwyNCkKKyNkZWZpbmUgUENMX0NNRF9TVE9SRTEgICAgICAgICAoMHg2PDwyNCkKKyNkZWZpbmUgUENMX0NNRF9DT01QQVJFICAgICAgICAoMHhlPDwyNCkKKyNkZWZpbmUgUENMX0NNRF9TV0FQX0NPTVBBUkUgICAoMHhmPDwyNCkKKyNkZWZpbmUgUENMX0NNRF9BREQgICAgICAgICAgICAoMHhkPDwyNCkKKyNkZWZpbmUgUENMX0NNRF9CUkFOQ0ggICAgICAgICAoMHg3PDwyNCkKKworLyogQlJBTkNIIGNvbmRpdGlvbiBjb2RlcyAqLworI2RlZmluZSBQQ0xfQ09ORF9ETUFSRFlfU0VUICAgICgweDE8PDIwKQorI2RlZmluZSBQQ0xfQ09ORF9ETUFSRFlfQ0xFQVIgICgweDI8PDIwKQorCisjZGVmaW5lIFBDTF9HRU5fSU5UUiAgICAgICAgICAgKDE8PDE5KQorI2RlZmluZSBQQ0xfTEFTVF9CVUZGICAgICAgICAgICgxPDwxOCkKKyNkZWZpbmUgUENMX0xBU1RfQ01EICAgICAgICAgICAoUENMX0xBU1RfQlVGRikKKyNkZWZpbmUgUENMX1dBSVRTVEFUICAgICAgICAgICAoMTw8MTcpCisjZGVmaW5lIFBDTF9CSUdFTkRJQU4gICAgICAgICAgKDE8PDE2KQorI2RlZmluZSBQQ0xfSVNPTU9ERSAgICAgICAgICAgICgxPDwxMikKKworI2RlZmluZSBETUEwX1BSRVZfUENMICAgICAgICAgICAgICAgICAgICAgMHgxMDAgICAgICAgICAgICAgICAKKyNkZWZpbmUgRE1BMV9QUkVWX1BDTCAgICAgICAgICAgICAgICAgICAgIDB4MTIwCisjZGVmaW5lIERNQTJfUFJFVl9QQ0wgICAgICAgICAgICAgICAgICAgICAweDE0MAorI2RlZmluZSBETUEzX1BSRVZfUENMICAgICAgICAgICAgICAgICAgICAgMHgxNjAKKyNkZWZpbmUgRE1BNF9QUkVWX1BDTCAgICAgICAgICAgICAgICAgICAgIDB4MTgwCisjZGVmaW5lIERNQV9QUkVWX1BDTChjaGFuKSAgICAgICAgICAgICAgICAoRE1BX0JSRUcoRE1BMF9QUkVWX1BDTCwgY2hhbikpCisKKyNkZWZpbmUgRE1BMF9DVVJSRU5UX1BDTCAgICAgICAgICAgICAgICAgIDB4MTA0ICAgICAgICAgICAgCisjZGVmaW5lIERNQTFfQ1VSUkVOVF9QQ0wgICAgICAgICAgICAgICAgICAweDEyNAorI2RlZmluZSBETUEyX0NVUlJFTlRfUENMICAgICAgICAgICAgICAgICAgMHgxNDQKKyNkZWZpbmUgRE1BM19DVVJSRU5UX1BDTCAgICAgICAgICAgICAgICAgIDB4MTY0CisjZGVmaW5lIERNQTRfQ1VSUkVOVF9QQ0wgICAgICAgICAgICAgICAgICAweDE4NAorI2RlZmluZSBETUFfQ1VSUkVOVF9QQ0woY2hhbikgICAgICAgICAgICAgKERNQV9CUkVHKERNQTBfQ1VSUkVOVF9QQ0wsIGNoYW4pKQorCisjZGVmaW5lIERNQTBfQ0hBTl9TVEFUICAgICAgICAgICAgICAgICAgICAweDEwYworI2RlZmluZSBETUExX0NIQU5fU1RBVCAgICAgICAgICAgICAgICAgICAgMHgxMmMKKyNkZWZpbmUgRE1BMl9DSEFOX1NUQVQgICAgICAgICAgICAgICAgICAgIDB4MTRjCisjZGVmaW5lIERNQTNfQ0hBTl9TVEFUICAgICAgICAgICAgICAgICAgICAweDE2YworI2RlZmluZSBETUE0X0NIQU5fU1RBVCAgICAgICAgICAgICAgICAgICAgMHgxOGMKKyNkZWZpbmUgRE1BX0NIQU5fU1RBVChjaGFuKSAgICAgICAgICAgICAgIChETUFfQlJFRyhETUEwX0NIQU5fU1RBVCwgY2hhbikpCisvKiBDSEFOX1NUQVRVUyByZWdpc3RlcnMgc2hhcmUgYml0cyAqLworI2RlZmluZSBETUFfQ0hBTl9TVEFUX1NFTEZJRCAgICAgICAgICAgICAgKDE8PDMxKQorI2RlZmluZSBETUFfQ0hBTl9TVEFUX0lTT1BLVCAgICAgICAgICAgICAgKDE8PDMwKQorI2RlZmluZSBETUFfQ0hBTl9TVEFUX1BDSUVSUiAgICAgICAgICAgICAgKDE8PDI5KQorI2RlZmluZSBETUFfQ0hBTl9TVEFUX1BLVEVSUiAgICAgICAgICAgICAgKDE8PDI4KQorI2RlZmluZSBETUFfQ0hBTl9TVEFUX1BLVENNUEwgICAgICAgICAgICAgKDE8PDI3KQorI2RlZmluZSBETUFfQ0hBTl9TVEFUX1NQRUNJQUxBQ0sgICAgICAgICAgKDE8PDE0KQorCisKKyNkZWZpbmUgRE1BMF9DSEFOX0NUUkwgICAgICAgICAgICAgICAgICAgIDB4MTEwICAgICAgICAgICAgICAKKyNkZWZpbmUgRE1BMV9DSEFOX0NUUkwgICAgICAgICAgICAgICAgICAgIDB4MTMwCisjZGVmaW5lIERNQTJfQ0hBTl9DVFJMICAgICAgICAgICAgICAgICAgICAweDE1MAorI2RlZmluZSBETUEzX0NIQU5fQ1RSTCAgICAgICAgICAgICAgICAgICAgMHgxNzAKKyNkZWZpbmUgRE1BNF9DSEFOX0NUUkwgICAgICAgICAgICAgICAgICAgIDB4MTkwCisjZGVmaW5lIERNQV9DSEFOX0NUUkwoY2hhbikgICAgICAgICAgICAgICAoRE1BX0JSRUcoRE1BMF9DSEFOX0NUUkwsIGNoYW4pKQorLyogQ0hBTl9DVFJMIHJlZ2lzdGVycyBzaGFyZSBiaXRzICovCisjZGVmaW5lIERNQV9DSEFOX0NUUkxfRU5BQkxFICAgICAgICAgICAgICAoMTw8MzEpICAgICAgCisjZGVmaW5lIERNQV9DSEFOX0NUUkxfQlVTWSAgICAgICAgICAgICAgICAoMTw8MzApCisjZGVmaW5lIERNQV9DSEFOX0NUUkxfTElOSyAgICAgICAgICAgICAgICAoMTw8MjkpCisKKyNkZWZpbmUgRE1BMF9SRUFEWSAgICAgICAgICAgICAgICAgICAgICAgIDB4MTE0CisjZGVmaW5lIERNQTFfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgICAweDEzNAorI2RlZmluZSBETUEyX1JFQURZICAgICAgICAgICAgICAgICAgICAgICAgMHgxNTQKKyNkZWZpbmUgRE1BM19SRUFEWSAgICAgICAgICAgICAgICAgICAgICAgIDB4MTc0CisjZGVmaW5lIERNQTRfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgICAweDE5NAorI2RlZmluZSBETUFfUkVBRFkoY2hhbikgICAgICAgICAgICAgICAgICAgKERNQV9CUkVHKERNQTBfUkVBRFksIGNoYW4pKQorCisjZGVmaW5lIERNQV9HTE9CQUxfUkVHSVNURVIgICAgICAgICAgICAgICAweDkwOAorCisjZGVmaW5lIEZJRk9fU0laRVMgICAgICAgICAgICAgICAgICAgICAgICAweGEwMAorCisjZGVmaW5lIEZJRk9fQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAweGExMAorI2RlZmluZSBGSUZPX0NPTlRST0xfR1JGX0ZMVVNIICAgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIEZJRk9fQ09OVFJPTF9JVEZfRkxVU0ggICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgRklGT19DT05UUk9MX0FURl9GTFVTSCAgICAgICAgICAgICgxPDwyKQorCisjZGVmaW5lIEZJRk9fWE1JVF9USFJFU0hPTEQgICAgICAgICAgICAgICAweGExNAorCisjZGVmaW5lIERNQTBfV09SRDBfQ01QX1ZBTFVFICAgICAgICAgICAgICAweGIwMAorI2RlZmluZSBETUExX1dPUkQwX0NNUF9WQUxVRSAgICAgICAgICAgICAgMHhiMTAKKyNkZWZpbmUgRE1BMl9XT1JEMF9DTVBfVkFMVUUgICAgICAgICAgICAgIDB4YjIwCisjZGVmaW5lIERNQTNfV09SRDBfQ01QX1ZBTFVFICAgICAgICAgICAgICAweGIzMAorI2RlZmluZSBETUE0X1dPUkQwX0NNUF9WQUxVRSAgICAgICAgICAgICAgMHhiNDAKKyNkZWZpbmUgRE1BX1dPUkQwX0NNUF9WQUxVRShjaGFuKSAgICAgICAgIChETUFfU1JFRyhETUEwX1dPUkQwX0NNUF9WQUxVRSwgY2hhbikpCisKKyNkZWZpbmUgRE1BMF9XT1JEMF9DTVBfRU5BQkxFICAgICAgICAgICAgIDB4YjA0CisjZGVmaW5lIERNQTFfV09SRDBfQ01QX0VOQUJMRSAgICAgICAgICAgICAweGIxNAorI2RlZmluZSBETUEyX1dPUkQwX0NNUF9FTkFCTEUgICAgICAgICAgICAgMHhiMjQKKyNkZWZpbmUgRE1BM19XT1JEMF9DTVBfRU5BQkxFICAgICAgICAgICAgIDB4YjM0CisjZGVmaW5lIERNQTRfV09SRDBfQ01QX0VOQUJMRSAgICAgICAgICAgICAweGI0NAorI2RlZmluZSBETUFfV09SRDBfQ01QX0VOQUJMRShjaGFuKSAgICAgICAgKERNQV9TUkVHKERNQTBfV09SRDBfQ01QX0VOQUJMRSxjaGFuKSkKKworI2RlZmluZSBETUEwX1dPUkQxX0NNUF9WQUxVRSAgICAgICAgICAgICAgMHhiMDgKKyNkZWZpbmUgRE1BMV9XT1JEMV9DTVBfVkFMVUUgICAgICAgICAgICAgIDB4YjE4CisjZGVmaW5lIERNQTJfV09SRDFfQ01QX1ZBTFVFICAgICAgICAgICAgICAweGIyOAorI2RlZmluZSBETUEzX1dPUkQxX0NNUF9WQUxVRSAgICAgICAgICAgICAgMHhiMzgKKyNkZWZpbmUgRE1BNF9XT1JEMV9DTVBfVkFMVUUgICAgICAgICAgICAgIDB4YjQ4CisjZGVmaW5lIERNQV9XT1JEMV9DTVBfVkFMVUUoY2hhbikgICAgICAgICAoRE1BX1NSRUcoRE1BMF9XT1JEMV9DTVBfVkFMVUUsIGNoYW4pKQorCisjZGVmaW5lIERNQTBfV09SRDFfQ01QX0VOQUJMRSAgICAgICAgICAgICAweGIwYworI2RlZmluZSBETUExX1dPUkQxX0NNUF9FTkFCTEUgICAgICAgICAgICAgMHhiMWMKKyNkZWZpbmUgRE1BMl9XT1JEMV9DTVBfRU5BQkxFICAgICAgICAgICAgIDB4YjJjCisjZGVmaW5lIERNQTNfV09SRDFfQ01QX0VOQUJMRSAgICAgICAgICAgICAweGIzYworI2RlZmluZSBETUE0X1dPUkQxX0NNUF9FTkFCTEUgICAgICAgICAgICAgMHhiNGMKKyNkZWZpbmUgRE1BX1dPUkQxX0NNUF9FTkFCTEUoY2hhbikgICAgICAgIChETUFfU1JFRyhETUEwX1dPUkQxX0NNUF9FTkFCTEUsY2hhbikpCisvKiB3b3JkIDEgY29tcGFyZSBlbmFibGUgZmxhZ3MgKi8KKyNkZWZpbmUgRE1BX1dPUkQxX0NNUF9NQVRDSF9PVEhFUkJVUyAgICAgICgxPDwxNSkKKyNkZWZpbmUgRE1BX1dPUkQxX0NNUF9NQVRDSF9CUk9BRENBU1QgICAgICgxPDwxNCkKKyNkZWZpbmUgRE1BX1dPUkQxX0NNUF9NQVRDSF9CVVNfQkNBU1QgICAgICgxPDwxMykKKyNkZWZpbmUgRE1BX1dPUkQxX0NNUF9NQVRDSF9MT0NBTF9OT0RFICAgICgxPDwxMikKKyNkZWZpbmUgRE1BX1dPUkQxX0NNUF9NQVRDSF9FWEFDVCAgICAgICAgICgxPDwxMSkKKyNkZWZpbmUgRE1BX1dPUkQxX0NNUF9FTkFCTEVfU0VMRl9JRCAgICAgICgxPDwxMCkKKyNkZWZpbmUgRE1BX1dPUkQxX0NNUF9FTkFCTEVfTUFTVEVSICAgICAgICgxPDw4KQorCisjZGVmaW5lIExJTktfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYwMAorI2RlZmluZSBMSU5LX0lEX0JVUyhpZCkgICAgICAgICAgICAgICAgICAgKGlkPDwyMikKKyNkZWZpbmUgTElOS19JRF9OT0RFKGlkKSAgICAgICAgICAgICAgICAgIChpZDw8MTYpCisKKyNkZWZpbmUgTElOS19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgIDB4ZjA0CisjZGVmaW5lIExJTktfQ09OVFJPTF9CVVNZICAgICAgICAgICAgICAgICAoMTw8MjkpCisjZGVmaW5lIExJTktfQ09OVFJPTF9UWF9JU09fRU4gICAgICAgICAgICAoMTw8MjYpCisjZGVmaW5lIExJTktfQ09OVFJPTF9SWF9JU09fRU4gICAgICAgICAgICAoMTw8MjUpCisjZGVmaW5lIExJTktfQ09OVFJPTF9UWF9BU1lOQ19FTiAgICAgICAgICAoMTw8MjQpCisjZGVmaW5lIExJTktfQ09OVFJPTF9SWF9BU1lOQ19FTiAgICAgICAgICAoMTw8MjMpCisjZGVmaW5lIExJTktfQ09OVFJPTF9SRVNFVF9UWCAgICAgICAgICAgICAoMTw8MjEpCisjZGVmaW5lIExJTktfQ09OVFJPTF9SRVNFVF9SWCAgICAgICAgICAgICAoMTw8MjApCisjZGVmaW5lIExJTktfQ09OVFJPTF9DWUNNQVNURVIgICAgICAgICAgICAoMTw8MTEpCisjZGVmaW5lIExJTktfQ09OVFJPTF9DWUNTT1VSQ0UgICAgICAgICAgICAoMTw8MTApCisjZGVmaW5lIExJTktfQ09OVFJPTF9DWUNUSU1FUkVOICAgICAgICAgICAoMTw8OSkKKyNkZWZpbmUgTElOS19DT05UUk9MX1JDVl9DTVBfVkFMSUQgICAgICAgICgxPDw3KQorI2RlZmluZSBMSU5LX0NPTlRST0xfU05PT1BfRU5BQkxFICAgICAgICAgKDE8PDYpCisKKyNkZWZpbmUgQ1lDTEVfVElNRVIgICAgICAgICAgICAgICAgICAgICAgIDB4ZjA4CisKKyNkZWZpbmUgTElOS19QSFkgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjBjCisjZGVmaW5lIExJTktfUEhZX1JFQUQgICAgICAgICAgICAgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIExJTktfUEhZX1dSSVRFICAgICAgICAgICAgICAgICAgICAoMTw8MzApCisjZGVmaW5lIExJTktfUEhZX0FERFIoYWRkcikgICAgICAgICAgICAgICAoYWRkcjw8MjQpCisjZGVmaW5lIExJTktfUEhZX1dEQVRBKGRhdGEpICAgICAgICAgICAgICAoZGF0YTw8MTYpCisjZGVmaW5lIExJTktfUEhZX1JBRERSKGFkZHIpICAgICAgICAgICAgICAoYWRkcjw8OCkKKworCisjZGVmaW5lIExJTktfSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweGYxNAorI2RlZmluZSBMSU5LX0lOVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMHhmMTgKKy8qIHN0YXR1cyBhbmQgZW5hYmxlIGhhdmUgaWRlbnRpY2FsIGJpdCBudW1iZXJzICovCisjZGVmaW5lIExJTktfSU5UX0xJTktfSU5UICAgICAgICAgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIExJTktfSU5UX1BIWV9USU1FX09VVCAgICAgICAgICAgICAoMTw8MzApCisjZGVmaW5lIExJTktfSU5UX1BIWV9SRUdfUkNWRCAgICAgICAgICAgICAoMTw8MjkpCisjZGVmaW5lIExJTktfSU5UX1BIWV9CVVNSRVNFVCAgICAgICAgICAgICAoMTw8MjgpCisjZGVmaW5lIExJTktfSU5UX1RYX1JEWSAgICAgICAgICAgICAgICAgICAoMTw8MjYpCisjZGVmaW5lIExJTktfSU5UX1JYX0RBVEFfUkRZICAgICAgICAgICAgICAoMTw8MjUpCisjZGVmaW5lIExJTktfSU5UX0lUX1NUVUNLICAgICAgICAgICAgICAgICAoMTw8MjApCisjZGVmaW5lIExJTktfSU5UX0FUX1NUVUNLICAgICAgICAgICAgICAgICAoMTw8MTkpCisjZGVmaW5lIExJTktfSU5UX1NOVFJKICAgICAgICAgICAgICAgICAgICAoMTw8MTcpCisjZGVmaW5lIExJTktfSU5UX0hEUl9FUlIgICAgICAgICAgICAgICAgICAoMTw8MTYpCisjZGVmaW5lIExJTktfSU5UX1RDX0VSUiAgICAgICAgICAgICAgICAgICAoMTw8MTUpCisjZGVmaW5lIExJTktfSU5UX0NZQ19TRUMgICAgICAgICAgICAgICAgICAoMTw8MTEpCisjZGVmaW5lIExJTktfSU5UX0NZQ19TVFJUICAgICAgICAgICAgICAgICAoMTw8MTApCisjZGVmaW5lIExJTktfSU5UX0NZQ19ET05FICAgICAgICAgICAgICAgICAoMTw8OSkKKyNkZWZpbmUgTElOS19JTlRfQ1lDX1BFTkQgICAgICAgICAgICAgICAgICgxPDw4KQorI2RlZmluZSBMSU5LX0lOVF9DWUNfTE9TVCAgICAgICAgICAgICAgICAgKDE8PDcpCisjZGVmaW5lIExJTktfSU5UX0NZQ19BUkJfRkFJTEVEICAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgTElOS19JTlRfR1JGX09WRVJfRkxPVyAgICAgICAgICAgICgxPDw1KQorI2RlZmluZSBMSU5LX0lOVF9JVEZfVU5ERVJfRkxPVyAgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIExJTktfSU5UX0FURl9VTkRFUl9GTE9XICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgTElOS19JTlRfSUFSQl9GQUlMRUQgICAgICAgICAgICAgICgxPDwwKSAK