ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDhmYWE2YzAuLjVkNTZhM2YgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMjgsNiArMjgsNyBAQAogKi5negogKi5iejIKICoubHptYQorKi54egogKi5sem8KICoucGF0Y2gKICouZ2NubwpkaWZmIC0tZ2l0IGEvLm1haWxtYXAgYi8ubWFpbG1hcAppbmRleCA1ODFmZDM5Li4xZWJhMjhhIDEwMDY0NAotLS0gYS8ubWFpbG1hcAorKysgYi8ubWFpbG1hcApAQCAtMjMsNiArMjMsNyBAQAogQXJuYXVkIFBhdGFyZCA8YXJuYXVkLnBhdGFyZEBydHAtbmV0Lm9yZz4KIEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIuZGU+CiBBeGVsIER5a3MgPHhsQHhsc2lnbmVkLm5ldD4KK0F4ZWwgTGluIDxheGVsLmxpbkBnbWFpbC5jb20+CiBCZW4gR2FyZG5lciA8YmdhcmRuZXJAd2FidGVjLmNvbT4KIEJlbiBNIENhaGlsbCA8YmVuLm0uY2FoaWxsQGludGVsLmNvbT4KIEJqw7ZybiBTdGVpbmJyaW5rIDxCLlN0ZWluYnJpbmtAZ214LmRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hdDkxIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hdDkxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzZhODYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWF0OTEKQEAgLTAsMCArMSwyNSBAQAorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hdDkxX2Nhbi9uZXQvPGlmYWNlPi9tYjBfaWQKK0RhdGU6CQlKYW51YXJ5IDIwMTEKK0tlcm5lbFZlcnNpb246CTIuNi4zOAorQ29udGFjdDoJTWFyYyBLbGVpbmUtQnVkZGUgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KK0Rlc2NyaXB0aW9uOgorCQlWYWx1ZSByZXByZXNlbnRpbmcgdGhlIGNhbl9pZCBvZiBtYWlsYm94IDAuCisKKwkJRGVmYXVsdDogMHg3ZmYgKHN0YW5kYXJkIGZyYW1lKQorCisJCUR1ZSB0byBhIGNoaXAgYnVnIChlcnJhdGEgNTAuMi42LjMgJiA1MC4zLjUuMyBpbgorCQkiQVQ5MVNBTTkyNjMgUHJlbGltaW5hcnkgNjI0OUgtQVRBUk0tMjctSnVsLTA5IikgdGhlCisJCWNvbnRlbnRzIG9mIG1haWxib3ggMCBtYXkgYmUgc2VuZCB1bmRlciBjZXJ0YWluCisJCWNvbmRpdGlvbnMgKGV2ZW4gaWYgZGlzYWJsZWQgb3IgaW4gcnggbW9kZSkuCisKKwkJVGhlIHdvcmthcm91bmQgaW4gdGhlIGVycmF0YSBzdWdnZXN0cyBub3QgdG8gdXNlIHRoZQorCQltYWlsYm94IGFuZCBsb2FkIGl0IHdpdGggYW4gdW51c2VkIGlkZW50aWZpZXIuCisKKwkJSW4gb3JkZXIgdG8gdXNlIGFuIGV4dGVuZGVkIGNhbl9pZCBhZGQgdGhlCisJCUNBTl9FRkZfRkxBRyAoMHg4MDAwMDAwMFUpIHRvIHRoZSBjYW5faWQuIEV4YW1wbGU6CisKKwkJLSBzdGFuZGFyZCBpZCAweDdmZjoKKwkJZWNobyAweDdmZiAgICAgID4gL3N5cy9jbGFzcy9uZXQvY2FuMC9tYjBfaWQKKworCQktIGV4dGVuZGVkIGlkIDB4MWZmZmZmZmY6CisJCWVjaG8gMHg5ZmZmZmZmZiA+IC9zeXMvY2xhc3MvbmV0L2NhbjAvbWIwX2lkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCmluZGV4IDM1NDQ3ZTAuLjM2ZjYzZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCkBAIC0yMTcsOCArMjE3LDggQEAKICAgPGNoYXB0ZXIgaWQ9InVhcnQxNng1MCI+CiAgICAgIDx0aXRsZT4xNng1MCBVQVJUIERyaXZlcjwvdGl0bGU+CiAhSWluY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAotIUVkcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCi0hRWRyaXZlcnMvc2VyaWFsLzgyNTAuYworIUVkcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NvcmUuYworIUVkcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jCiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlciBpZD0iZmJkZXYiPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsCmluZGV4IDI4NjEwNTUuLmMyNzkxNTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kcm0udG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwKQEAgLTczLDggKzczLDggQEAKICAgICAgIHNlcnZpY2VzLgogICAgIDwvcGFyYT4KICAgICA8cGFyYT4KLSAgICAgIFRoZSBjb3JlIG9mIGV2ZXJ5IERSTSBkcml2ZXIgaXMgc3RydWN0IGRybV9kZXZpY2UuICBEcml2ZXJzCi0gICAgICB3aWxsIHR5cGljYWxseSBzdGF0aWNhbGx5IGluaXRpYWxpemUgYSBkcm1fZGV2aWNlIHN0cnVjdHVyZSwKKyAgICAgIFRoZSBjb3JlIG9mIGV2ZXJ5IERSTSBkcml2ZXIgaXMgc3RydWN0IGRybV9kcml2ZXIuICBEcml2ZXJzCisgICAgICB3aWxsIHR5cGljYWxseSBzdGF0aWNhbGx5IGluaXRpYWxpemUgYSBkcm1fZHJpdmVyIHN0cnVjdHVyZSwKICAgICAgIHRoZW4gcGFzcyBpdCB0byBkcm1faW5pdCgpIGF0IGxvYWQgdGltZS4KICAgICA8L3BhcmE+CiAKQEAgLTg0LDcgKzg0LDcgQEAKICAgICA8dGl0bGU+RHJpdmVyIGluaXRpYWxpemF0aW9uPC90aXRsZT4KICAgICA8cGFyYT4KICAgICAgIEJlZm9yZSBjYWxsaW5nIHRoZSBEUk0gaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIHRoZSBkcml2ZXIgbXVzdAotICAgICAgZmlyc3QgY3JlYXRlIGFuZCBmaWxsIG91dCBhIHN0cnVjdCBkcm1fZGV2aWNlIHN0cnVjdHVyZS4KKyAgICAgIGZpcnN0IGNyZWF0ZSBhbmQgZmlsbCBvdXQgYSBzdHJ1Y3QgZHJtX2RyaXZlciBzdHJ1Y3R1cmUuCiAgICAgPC9wYXJhPgogICAgIDxwcm9ncmFtbGlzdGluZz4KICAgICAgIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZmlsZXN5c3RlbXMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9maWxlc3lzdGVtcy50bXBsCmluZGV4IDVlODdhZDUuLmY1MWYyODUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9maWxlc3lzdGVtcy50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9maWxlc3lzdGVtcy50bXBsCkBAIC04Miw2ICs4MiwxMSBAQAogICAgICA8L3NlY3QxPgogICA8L2NoYXB0ZXI+CiAKKyAgPGNoYXB0ZXIgaWQ9ImZzX2V2ZW50cyI+CisgICAgIDx0aXRsZT5FdmVudHMgYmFzZWQgb24gZmlsZSBkZXNjcmlwdG9yczwvdGl0bGU+CishRWZzL2V2ZW50ZmQuYworICA8L2NoYXB0ZXI+CisKICAgPGNoYXB0ZXIgaWQ9InN5c2ZzIj4KICAgICAgPHRpdGxlPlRoZSBGaWxlc3lzdGVtIGZvciBFeHBvcnRpbmcgS2VybmVsIE9iamVjdHM8L3RpdGxlPgogIUVmcy9zeXNmcy9maWxlLmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NILU1vYmlsZS9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vYXJtL1NILU1vYmlsZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzcxZDgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0gtTW9iaWxlL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorQklOIDo9IHZybDQKKworLlBIT05ZOiBhbGwKK2FsbDogJChCSU4pCisKKy5QSE9OWTogY2xlYW4KK2NsZWFuOgorCXJtIC1mICoubyAkKEJJTikKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NILU1vYmlsZS92cmw0LmMgYi9Eb2N1bWVudGF0aW9uL2FybS9TSC1Nb2JpbGUvdnJsNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YTE5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TSC1Nb2JpbGUvdnJsNC5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogdnJsNCBmb3JtYXQgZ2VuZXJhdG9yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNpbW9uIEhvcm1hbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiB1c2FnZTogdnJsNCA8IHpJbWFnZSA+IG91dAorICoJICBkZCBpZj1vdXQgb2Y9L2Rldi9zZHggYnM9NTEyIHNlZWs9MSAjIFdyaXRlIHRoZSBpbWFnZSB0byBzZWN0b3IgMQorICoKKyAqIFJlYWRzIGEgekltYWdlIGZyb20gc3RkaW4gYW5kIHdyaXRlcyBhIHZybDQgaW1hZ2UgdG8gc3Rkb3V0LgorICogSW4gcHJhY3RpY2UgdGhpcyBtZWFucyB3cml0aW5nIGEgcGFkZGVkIHZybDQgaGVhZGVyIHRvIHN0ZG91dCBmb2xsb3dlZAorICogYnkgdGhlIHpJbWFnZS4KKyAqCisgKiBUaGUgcGFkZGluZyBwbGFjZXMgdGhlIHpJbWFnZSBhdCBBTElHTiBieXRlcyBpbnRvIHRoZSBvdXRwdXQuCisgKiBUaGUgdnJsNCB1c2VzIEFMSUdOICsgU1RBUlRfQkFTRSBhcyB0aGUgc3RhcnRfYWRkcmVzcy4KKyAqIFRoaXMgaXMgd2hlcmUgdGhlIG1hc2sgUk9NIHdpbGwganVtcCB0byBhZnRlciB2ZXJpZnlpbmcgdGhlIGhlYWRlci4KKyAqCisgKiBUaGUgaGVhZGVyIHNldHMgY29weV9zaXplIHRvIG1pbihzaXplb2YoekltYWdlKSwgTUFYX0JPT1RfUFJPR19MRU4pICsgQUxJR04uCisgKiBUaGF0IGlzLCB0aGUgbWFzayBST00gd2lsbCBsb2FkIHRoZSBwYWRkZWQgaGVhZGVyIChBTElHTiBieXRlcykKKyAqIEFuZCB0aGVuIE1BWF9CT09UX1BST0dfTEVOIGJ5dGVzIG9mIHRoZSBpbWFnZSwgb3IgdGhlIGVudGlyZSBpbWFnZSwKKyAqIHdoaWNoZXZlciBpcyBzbWFsbGVyLgorICoKKyAqIFRoZSB6SW1hZ2UgaXMgbm90IG1vZGlmaWVkIGluIGFueSB3YXkuCisgKi8KKworI2RlZmluZSBfQlNEX1NPVVJDRQorI2luY2x1ZGUgPGVuZGlhbi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworc3RydWN0IGhkciB7CisJdWludDMyX3QgbWFnaWMxOworCXVpbnQzMl90IHJlc2VydmVkMTsKKwl1aW50MzJfdCBtYWdpYzI7CisJdWludDMyX3QgcmVzZXJ2ZWQyOworCXVpbnQxNl90IGNvcHlfc2l6ZTsKKwl1aW50MTZfdCBib290X29wdGlvbnM7CisJdWludDMyX3QgcmVzZXJ2ZWQzOworCXVpbnQzMl90IHN0YXJ0X2FkZHJlc3M7CisJdWludDMyX3QgcmVzZXJ2ZWQ0OworCXVpbnQzMl90IHJlc2VydmVkNTsKKwljaGFyICAgICByZXNlcnZlZDZbMzA4XTsKK307CisKKyNkZWZpbmUgREVDTEFSRV9IRFIoaCkJCQkJCVwKKwlzdHJ1Y3QgaGRyIChoKSA9IHsJCQkJXAorCQkubWFnaWMxID0JaHRvbGUzMigweGVhMDAwMDAwKSwJXAorCQkucmVzZXJ2ZWQxID0JaHRvbGUzMigweDU2KSwJCVwKKwkJLm1hZ2ljMiA9CWh0b2xlMzIoMHhlNTlmZjAwOCksCVwKKwkJLnJlc2VydmVkMyA9CWh0b2xlMTYoMHgxKSB9CisKKy8qIEFsaWduIHRvIDUxMiBieXRlcywgdGhlIE1NQ0lGIHNlY3RvciBzaXplICovCisjZGVmaW5lIEFMSUdOX0JJVFMJOQorI2RlZmluZSBBTElHTgkJKDEgPDwgQUxJR05fQklUUykKKworI2RlZmluZSBTVEFSVF9CQVNFCTB4ZTU1YjAwMDAKKworLyoKKyAqIFdpdGggYW4gYWxpZ25tZW50IG9mIDUxMiB0aGUgaGVhZGVyIHVzZXMgdGhlIGZpcnN0IHNlY3Rvci4KKyAqIFRoZXJlIGlzIGEgMTI4IHNlY3RvciAoNjRrYnl0ZSkgbGltaXQgb24gdGhlIGRhdGEgbG9hZGVkIGJ5IHRoZSBtYXNrIFJPTS4KKyAqIFNvIHRoZXJlIGFyZSAxMjcgc2VjdG9ycyBsZWZ0IGZvciB0aGUgYm9vdCBwcm9ncmFtbWUuIEJ1dCBpbiBwcmFjdGljZQorICogT25seSBhIHNtYWxsIHBvcnRpb24gb2YgYSB6SW1hZ2UgaXMgbmVlZGVkLCAxNiBzZWN0b3JzIHNob3VsZCBiZSBtb3JlCisgKiB0aGFuIGVub3VnaC4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBzZXRzIGhvdyBtdWNoIG9mIHRoZSB6SW1hZ2UgaXMgY29waWVkIGJ5IHRoZSBtYXNrIFJPTS4KKyAqIFRoZSBlbnRpcmUgekltYWdlIGlzIHByZXNlbnQgYWZ0ZXIgdGhlIGhlYWRlciBhbmQgaXMgbG9hZGVkCisgKiBieSB0aGUgY29kZSBpbiB0aGUgYm9vdCBwcm9ncmFtICh3aGljaCBpcyB0aGUgZmlyc3QgcG9ydGlvbiBvZiB0aGUgekltYWdlKS4KKyAqLworI2RlZmluZQlNQVhfQk9PVF9QUk9HX0xFTiAoMTYgKiA1MTIpCisKKyNkZWZpbmUgUk9VTkRfVVAoeCkJKCh4ICsgQUxJR04gLSAxKSAmIH4oQUxJR04gLSAxKSkKKworc3NpemVfdCBkb19yZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc2l6ZV90IG9mZnNldCA9IDA7CisJc3NpemVfdCBsOworCisJd2hpbGUgKG9mZnNldCA8IGNvdW50KSB7CisJCWwgPSByZWFkKGZkLCBidWYgKyBvZmZzZXQsIGNvdW50IC0gb2Zmc2V0KTsKKwkJaWYgKCFsKQorCQkJYnJlYWs7CisJCWlmIChsIDwgMCkgeworCQkJaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9DSykKKwkJCQljb250aW51ZTsKKwkJCXBlcnJvcigicmVhZCIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCW9mZnNldCArPSBsOworCX0KKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3NzaXplX3QgZG9fd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzaXplX3Qgb2Zmc2V0ID0gMDsKKwlzc2l6ZV90IGw7CisKKwl3aGlsZSAob2Zmc2V0IDwgY291bnQpIHsKKwkJbCA9IHdyaXRlKGZkLCBidWYgKyBvZmZzZXQsIGNvdW50IC0gb2Zmc2V0KTsKKwkJaWYgKGwgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLKQorCQkJCWNvbnRpbnVlOworCQkJcGVycm9yKCJ3cml0ZSIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCW9mZnNldCArPSBsOworCX0KKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3NzaXplX3Qgd3JpdGVfemVybyhpbnQgZmQsIHNpemVfdCBsZW4pCit7CisJc2l6ZV90IGkgPSBsZW47CisKKwl3aGlsZSAoaS0tKSB7CisJCWNvbnN0IGNoYXIgeCA9IDA7CisJCWlmIChkb193cml0ZShmZCwgJngsIDEpIDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitpbnQgbWFpbih2b2lkKQoreworCURFQ0xBUkVfSERSKGhkcik7CisJY2hhciBib290X3Byb2dyYW1bTUFYX0JPT1RfUFJPR19MRU5dOworCXNpemVfdCBhbGlnbmVkX2hkcl9sZW4sIGFsbGlnbmVkX3Byb2dfbGVuOworCXNzaXplX3QgcHJvZ19sZW47CisKKwlwcm9nX2xlbiA9IGRvX3JlYWQoMCwgYm9vdF9wcm9ncmFtLCBzaXplb2YoYm9vdF9wcm9ncmFtKSk7CisJaWYgKHByb2dfbGVuIDw9IDApCisJCXJldHVybiAtMTsKKworCWFsaWduZWRfaGRyX2xlbiA9IFJPVU5EX1VQKHNpemVvZihoZHIpKTsKKwloZHIuc3RhcnRfYWRkcmVzcyA9IGh0b2xlMzIoU1RBUlRfQkFTRSArIGFsaWduZWRfaGRyX2xlbik7CisJYWxsaWduZWRfcHJvZ19sZW4gPSBST1VORF9VUChwcm9nX2xlbik7CisJaGRyLmNvcHlfc2l6ZSA9IGh0b2xlMTYoYWxpZ25lZF9oZHJfbGVuICsgYWxsaWduZWRfcHJvZ19sZW4pOworCisJaWYgKGRvX3dyaXRlKDEsICZoZHIsIHNpemVvZihoZHIpKSA8IDApCisJCXJldHVybiAtMTsKKwlpZiAod3JpdGVfemVybygxLCBhbGlnbmVkX2hkcl9sZW4gLSBzaXplb2YoaGRyKSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZG9fd3JpdGUoMSwgYm9vdF9wcm9ncmFtLCBwcm9nX2xlbikgPCAwKQorCQlyZXR1cm4gMTsKKworCS8qIFdyaXRlIG91dCB0aGUgcmVzdCBvZiB0aGUga2VybmVsICovCisJd2hpbGUgKDEpIHsKKwkJcHJvZ19sZW4gPSBkb19yZWFkKDAsIGJvb3RfcHJvZ3JhbSwgc2l6ZW9mKGJvb3RfcHJvZ3JhbSkpOworCQlpZiAocHJvZ19sZW4gPCAwKQorCQkJcmV0dXJuIDE7CisJCWlmIChwcm9nX2xlbiA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChkb193cml0ZSgxLCBib290X3Byb2dyYW0sIHByb2dfbGVuKSA8IDApCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NILU1vYmlsZS96Ym9vdC1yb20tbW1jaWYudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU0gtTW9iaWxlL3pib290LXJvbS1tbWNpZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmZjhhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NILU1vYmlsZS96Ym9vdC1yb20tbW1jaWYudHh0CkBAIC0wLDAgKzEsMjkgQEAKK1JPTS1hYmxlIHpJbWFnZSBib290IGZyb20gTU1DCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBST00tYWJsZSB6SW1hZ2UgY29tcGlsZWQgd2l0aCBaQk9PVF9ST01fTU1DSUYgbWF5IGJlIHdyaXR0ZW4gdG8gTU1DIGFuZAorU3VwZXJIIE1vYmlsZSBBUk0gd2lsbCB0byBib290IGRpcmVjdGx5IGZyb20gdGhlIE1NQ0lGIGhhcmR3YXJlIGJsb2NrLgorCitUaGlzIGlzIGFjaGlldmVkIGJ5IHRoZSBtYXNrIFJPTSBsb2FkaW5nIHRoZSBmaXJzdCBwb3J0aW9uIG9mIHRoZSBpbWFnZSBpbnRvCitNRVJBTSBhbmQgdGhlbiBqdW1waW5nIHRvIGl0LiBUaGlzIHBvcnRpb24gY29udGFpbnMgbG9hZGVyIGNvZGUgd2hpY2gKK2NvcGllcyB0aGUgZW50aXJlIGltYWdlIHRvIFNEUkFNIGFuZCBqdW1wcyB0byBpdC4gRnJvbSB0aGVyZSB0aGUgekltYWdlCitib290IGNvZGUgcHJvY2VlZHMgYXMgbm9ybWFsLCB1bmNvbXByZXNzaW5nIHRoZSBpbWFnZSBpbnRvIGl0cyBmaW5hbAorbG9jYXRpb24gYW5kIHRoZW4ganVtcGluZyB0byBpdC4KKworVGhpcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCBvbiBhbiBBUDRFQiBib2FyZCB1c2luZyB0aGUgZGV2ZWxvcGVyIDFBIGVNTUMKK2Jvb3QgbW9kZSB3aGljaCBpcyBjb25maWd1cmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcganVtcGVyIHNldHRpbmdzLgorVGhlIGJvYXJkIHVzZWQgZm9yIHRlc3RpbmcgcmVxdWlyZWQgYSBwYXRjaGVkIG1hc2sgUk9NIGluIG9yZGVyIGZvcgordGhpcyBtb2RlIHRvIGZ1bmN0aW9uLgorCisgICA4IDcgNiA1IDQgMyAyIDEKKyAgIHh8eHx4fHh8eHwgfHh8CitTNCAtKy0rLSstKy0rLSstKy0KKyAgICB8IHwgfCB8IHx4fCB8eCBvbgorCitUaGUgekltYWdlIG11c3QgYmUgd3JpdHRlbiB0byB0aGUgTU1DIGNhcmQgYXQgc2VjdG9yIDEgKDUxMiBieXRlcykgaW4KK3ZybDQgZm9ybWF0LiBBIHV0aWxpdHkgdnJsNCBpcyBzdXBwbGllZCB0byBhY2NvbXBsaXNoIHRoaXMuCisKK2UuZy4KKwl2cmw0IDwgekltYWdlIHwgZGQgb2Y9L2Rldi9zZFggYnM9NTEyIHNlZWs9MQorCitBIGR1YWwtdm9sdGFnZSBNTUMgNC4wIGNhcmQgd2FzIHVzZWQgZm9yIHRlc3RpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zYXRhLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hdGEvZnNsLXNhdGEudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zYXRhLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2F0YS9mc2wtc2F0YS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZWVwcm9tLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9lZXByb20udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2VlcHJvbS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9lZXByb20udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC84eHh4X2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vOHh4eF9ncGlvLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvOHh4eF9ncGlvLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vOHh4eF9ncGlvLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9ncGlvL2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vZ3Bpby50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZ3Bpby9ncGlvLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vZ3Bpby50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZ3Bpby9sZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vbGVkLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9ncGlvL2xlZC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2xlZC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2kyYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2ZzbC1pMmMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9pMmMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2ZzbC1pMmMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL21hcnZlbGwudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21hcnZlbGwudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL21hcnZlbGwudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWFydmVsbC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2VzZGhjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvZnNsLWVzZGhjLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZXNkaGMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2ZzbC1lc2RoYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbW1jLXNwaS1zbG90LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLXNwaS1zbG90LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tbWMtc3BpLXNsb3QudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1zcGktc2xvdC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3VwbS1uYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZnNsLXVwbS1uYW5kLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdXBtLW5hbmQudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2ZzbC11cG0tbmFuZC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbXRkLXBoeXNtYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9tdGQtcGh5c21hcC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbXRkLXBoeXNtYXAudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL210ZC1waHlzbWFwLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY2FuLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvY2FuL21wYzV4eHgtbXNjYW4udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jYW4udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nhbi9tcGM1eHh4LW1zY2FuLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9jYW4vc2phMTAwMC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nhbi9zamExMDAwLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9jYW4vc2phMTAwMC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvY2FuL3NqYTEwMDAudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC90c2VjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZnNsLXRzZWMtcGh5LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZnNsLXRzZWMtcGh5LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9ncGlvL21kaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2dwaW8vbWRpby50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9waHkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9waHkudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL3BoeS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGh5LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvODN4eC01MTJ4LXBjaS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpLzgzeHgtNTEyeC1wY2kudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC84M3h4LTUxMngtcGNpLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS84M3h4LTUxMngtcGNpLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvY3BtLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9jcG0udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9jcG0udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvY3BtLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvZW1hYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvZW1hYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L2VtYWMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvZW1hYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L25kZmMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L25kZmMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9uZGZjLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L25kZmMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9wcGM0NDBzcGUtYWRtYS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvcHBjNDQwc3BlLWFkbWEudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9wcGM0NDBzcGUtYWRtYS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9wcGM0NDBzcGUtYWRtYS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L3JlYm9vdC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvcmVib290LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvcmVib290LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L3JlYm9vdC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2JvYXJkLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9ib2FyZC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2JvYXJkLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2JvYXJkLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0vYnJnLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtL2JyZy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0vYnJnLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0vYnJnLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS9pMmMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0vaTJjLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS9pMmMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS9pMmMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvY3BtL3BpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS9waWMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvY3BtL3BpYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtL3BpYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0vdXNiLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtL3VzYi50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0vdXNiLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0vdXNiLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9ncGlvLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2dwaW8udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2dwaW8udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvbmV0d29yay50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL25ldHdvcmsudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvbmV0d29yay50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvbmV0d29yay50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS9maXJtd2FyZS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL2Zpcm13YXJlLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL2Zpcm13YXJlLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS9maXJtd2FyZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS9wYXJfaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS9wYXJfaW8udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvcGFyX2lvLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS9wYXJfaW8udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvcGluY2ZnLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUvcGluY2ZnLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3BpbmNmZy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUvcGluY2ZnLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3VjYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL3VjYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS91Y2MudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL3VjYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS91c2IudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS91c2IudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvdXNiLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS91c2IudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvc2VyaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvc2VyaWFsLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3NlcmlhbC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvc2VyaWFsLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZGl1LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9kaXUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kaXUudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZGl1LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9kbWEudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZG1hLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9lY20udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2VjbS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZWNtLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2VjbS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2d0bS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZ3RtLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZ3RtLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2d0bS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2d1dHMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2d1dHMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9ndXRzLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2d1dHMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9sYmMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2xiYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2xiYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9sYmMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tY20udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21jbS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21jbS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tY20udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tY3UtbXBjODM0OWVtaXR4LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tY3UtbXBjODM0OWVtaXR4LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbWN1LW1wYzgzNDllbWl0eC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tY3UtbXBjODM0OWVtaXR4LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTEyMS1wc2MudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21wYzUxMjEtcHNjLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTEyMS1wc2MudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBjNTEyMS1wc2MudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MjAwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGM1MjAwLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTIwMC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGM1MjAwLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21waWMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21zaS1waWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21zaS1waWMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tc2ktcGljLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21zaS1waWMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9wbWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL3BtYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3BtYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9wbWMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zZWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL3NlYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NlYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9zZWMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zc2kudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL3NzaS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9zc2kudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL25pbnRlbmRvL2dhbWVjdWJlLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL25pbnRlbmRvL2dhbWVjdWJlLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9uaW50ZW5kby9nYW1lY3ViZS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL25pbnRlbmRvL2dhbWVjdWJlLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9uaW50ZW5kby93aWkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvbmludGVuZG8vd2lpLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9uaW50ZW5kby93aWkudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9uaW50ZW5kby93aWkudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9mc2wtc3BpLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3BpLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9mc2wtc3BpLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9zcGktYnVzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc3BpLWJ1cy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3Mvc3BpLWJ1cy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc3BpLWJ1cy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3VzYi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL2ZzbC11c2IudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC91c2IudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL2ZzbC11c2IudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL3VzYi1laGNpLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvdXNiLWVoY2kudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL3VzYi1laGNpLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi91c2ItZWhjaS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MveGlsaW54LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy94aWxpbngudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL3hpbGlueC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy94aWxpbngudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9ib290aW5nLXdpdGhvdXQtb2YudHh0CnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYm9vdGluZy13aXRob3V0LW9mLnR4dAppbmRleCA3NDAwZDc1Li4yOGIxYzlkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYm9vdGluZy13aXRob3V0LW9mLnR4dApAQCAtMTMsNyArMTMsNiBAQAogCiAgIEkgLSBJbnRyb2R1Y3Rpb24KICAgICAxKSBFbnRyeSBwb2ludCBmb3IgYXJjaC9wb3dlcnBjCi0gICAgMikgQm9hcmQgc3VwcG9ydAogCiAgIElJIC0gVGhlIERUIGJsb2NrIGZvcm1hdAogICAgIDEpIEhlYWRlcgpAQCAtNDEsMTMgKzQwLDYgQEAKICAgVkkgLSBTeXN0ZW0tb24tYS1jaGlwIGRldmljZXMgYW5kIG5vZGVzCiAgICAgMSkgRGVmaW5pbmcgY2hpbGQgbm9kZXMgb2YgYW4gU09DCiAgICAgMikgUmVwcmVzZW50aW5nIGRldmljZXMgd2l0aG91dCBhIGN1cnJlbnQgT0Ygc3BlY2lmaWNhdGlvbgotICAgICAgYSkgUEhZIG5vZGVzCi0gICAgICBiKSBJbnRlcnJ1cHQgY29udHJvbGxlcnMKLSAgICAgIGMpIDR4eC9BeG9uIEVNQUMgZXRoZXJuZXQgbm9kZXMKLSAgICAgIGQpIFhpbGlueCBJUCBjb3JlcwotICAgICAgZSkgVVNCIEVIQ0kgY29udHJvbGxlcnMKLSAgICAgIGYpIE1ESU8gb24gR1BJT3MKLSAgICAgIGcpIFNQSSBidXNzZXMKIAogICBWSUkgLSBTcGVjaWZ5aW5nIGludGVycnVwdCBpbmZvcm1hdGlvbiBmb3IgZGV2aWNlcwogICAgIDEpIGludGVycnVwdHMgcHJvcGVydHkKQEAgLTEyMyw3ICsxMTUsNyBAQAogSSAtIEludHJvZHVjdGlvbgogPT09PT09PT09PT09PT09PQogCi1EdXJpbmcgdGhlIHJlY2VudCBkZXZlbG9wbWVudCBvZiB0aGUgTGludXgvcHBjNjQga2VybmVsLCBhbmQgbW9yZQorRHVyaW5nIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgTGludXgvcHBjNjQga2VybmVsLCBhbmQgbW9yZQogc3BlY2lmaWNhbGx5LCB0aGUgYWRkaXRpb24gb2YgbmV3IHBsYXRmb3JtIHR5cGVzIG91dHNpZGUgb2YgdGhlIG9sZAogSUJNIHBTZXJpZXMvaVNlcmllcyBwYWlyLCBpdCB3YXMgZGVjaWRlZCB0byBlbmZvcmNlIHNvbWUgc3RyaWN0IHJ1bGVzCiByZWdhcmRpbmcgdGhlIGtlcm5lbCBlbnRyeSBhbmQgYm9vdGxvYWRlciA8LT4ga2VybmVsIGludGVyZmFjZXMsIGluCkBAIC0xNDYsNyArMTM4LDcgQEAKIGNyZWF0ZSBhIG5vZGUgZm9yIGV2ZXJ5IFBDSSBkZXZpY2UgaW4gdGhlIHN5c3RlbS4gSXQgaXMgYSByZXF1aXJlbWVudAogdG8gaGF2ZSBhIG5vZGUgZm9yIFBDSSBob3N0IGJyaWRnZXMgaW4gb3JkZXIgdG8gcHJvdmlkZSBpbnRlcnJ1cHQKIHJvdXRpbmcgaW5mb3JtYXRpb25zIGFuZCBtZW1vcnkvSU8gcmFuZ2VzLCBhbW9uZyBvdGhlcnMuIEl0IGlzIGFsc28KLXJlY29tbWVuZGVkIHRvIGRlZmluZSBub2RlcyBmb3Igb24gY2hpcCBkZXZpY2VzIGFuZCBvdGhlciBidXNzZXMgdGhhdAorcmVjb21tZW5kZWQgdG8gZGVmaW5lIG5vZGVzIGZvciBvbiBjaGlwIGRldmljZXMgYW5kIG90aGVyIGJ1c2VzIHRoYXQKIGRvbid0IHNwZWNpZmljYWxseSBmaXQgaW4gYW4gZXhpc3RpbmcgT0Ygc3BlY2lmaWNhdGlvbi4gVGhpcyBjcmVhdGVzIGEKIGdyZWF0IGZsZXhpYmlsaXR5IGluIHRoZSB3YXkgdGhlIGtlcm5lbCBjYW4gdGhlbiBwcm9iZSB0aG9zZSBhbmQgbWF0Y2gKIGRyaXZlcnMgdG8gZGV2aWNlLCB3aXRob3V0IGhhdmluZyB0byBoYXJkIGNvZGUgYWxsIHNvcnRzIG9mIHRhYmxlcy4gSXQKQEAgLTE1OCw3ICsxNTAsNyBAQAogMSkgRW50cnkgcG9pbnQgZm9yIGFyY2gvcG93ZXJwYwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICBUaGVyZSBpcyBvbmUgYW5kIG9uZSBzaW5nbGUgZW50cnkgcG9pbnQgdG8gdGhlIGtlcm5lbCwgYXQgdGhlIHN0YXJ0CisgICBUaGVyZSBpcyBvbmUgc2luZ2xlIGVudHJ5IHBvaW50IHRvIHRoZSBrZXJuZWwsIGF0IHRoZSBzdGFydAogICAgb2YgdGhlIGtlcm5lbCBpbWFnZS4gVGhhdCBlbnRyeSBwb2ludCBzdXBwb3J0cyB0d28gY2FsbGluZwogICAgY29udmVudGlvbnM6CiAKQEAgLTIxMCwxMiArMjAyLDYgQEAKICAgICAgICAgd2l0aCBhbGwgQ1BVcy4gVGhlIHdheSB0byBkbyB0aGF0IHdpdGggbWV0aG9kIGIpIHdpbGwgYmUKICAgICAgICAgZGVzY3JpYmVkIGluIGEgbGF0ZXIgcmV2aXNpb24gb2YgdGhpcyBkb2N1bWVudC4KIAotCi0yKSBCb2FyZCBzdXBwb3J0Ci0tLS0tLS0tLS0tLS0tLS0tCi0KLTY0LWJpdCBrZXJuZWxzOgotCiAgICBCb2FyZCBzdXBwb3J0cyAocGxhdGZvcm1zKSBhcmUgbm90IGV4Y2x1c2l2ZSBjb25maWcgb3B0aW9ucy4gQW4KICAgIGFyYml0cmFyeSBzZXQgb2YgYm9hcmQgc3VwcG9ydHMgY2FuIGJlIGJ1aWx0IGluIGEgc2luZ2xlIGtlcm5lbAogICAgaW1hZ2UuIFRoZSBrZXJuZWwgd2lsbCAia25vdyIgd2hhdCBzZXQgb2YgZnVuY3Rpb25zIHRvIHVzZSBmb3IgYQpAQCAtMjM0LDQ4ICsyMjAsMTEgQEAKICAgICAgICAgY29udGFpbmluZyB0aGUgdmFyaW91cyBjYWxsYmFja3MgdGhhdCB0aGUgZ2VuZXJpYyBjb2RlIHdpbGwKICAgICAgICAgdXNlIHRvIGdldCB0byB5b3VyIHBsYXRmb3JtIHNwZWNpZmljIGNvZGUKIAotICAgICAgICBjKSBBZGQgYSByZWZlcmVuY2UgdG8geW91ciAicHBjX21kIiBzdHJ1Y3R1cmUgaW4gdGhlCi0gICAgICAgICJtYWNoaW5lcyIgdGFibGUgaW4gYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGlmIHlvdSBhcmUKLSAgICAgICAgYSA2NC1iaXQgcGxhdGZvcm0uCi0KLSAgICAgICAgZCkgcmVxdWVzdCBhbmQgZ2V0IGFzc2lnbmVkIGEgcGxhdGZvcm0gbnVtYmVyIChzZWUgUExBVEZPUk1fKgotICAgICAgICBjb25zdGFudHMgaW4gYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCi0KLTMyLWJpdCBlbWJlZGRlZCBrZXJuZWxzOgotCi0gIEN1cnJlbnRseSwgYm9hcmQgc3VwcG9ydCBpcyBlc3NlbnRpYWxseSBhbiBleGNsdXNpdmUgY29uZmlnIG9wdGlvbi4KLSAgVGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGZvciBhIHNpbmdsZSBwbGF0Zm9ybS4gIFBhcnQgb2YgdGhlIHJlYXNvbgotICBmb3IgdGhpcyBpcyB0byBrZWVwIGtlcm5lbHMgb24gZW1iZWRkZWQgc3lzdGVtcyBzbWFsbCBhbmQgZWZmaWNpZW50OwotICBwYXJ0IG9mIHRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoZSBjb2RlIGlzIGFscmVhZHkgdGhhdCB3YXkuIEluIHRoZQotICBmdXR1cmUsIGEga2VybmVsIG1heSBzdXBwb3J0IG11bHRpcGxlIHBsYXRmb3JtcywgYnV0IG9ubHkgaWYgdGhlCisgIEEga2VybmVsIGltYWdlIG1heSBzdXBwb3J0IG11bHRpcGxlIHBsYXRmb3JtcywgYnV0IG9ubHkgaWYgdGhlCiAgIHBsYXRmb3JtcyBmZWF0dXJlIHRoZSBzYW1lIGNvcmUgYXJjaGl0ZWN0dXJlLiAgQSBzaW5nbGUga2VybmVsIGJ1aWxkCiAgIGNhbm5vdCBzdXBwb3J0IGJvdGggY29uZmlndXJhdGlvbnMgd2l0aCBCb29rIEUgYW5kIGNvbmZpZ3VyYXRpb25zCiAgIHdpdGggY2xhc3NpYyBQb3dlcnBjIGFyY2hpdGVjdHVyZXMuCiAKLSAgMzItYml0IGVtYmVkZGVkIHBsYXRmb3JtcyB0aGF0IGFyZSBtb3ZlZCBpbnRvIGFyY2gvcG93ZXJwYyB1c2luZyBhCi0gIGZsYXR0ZW5lZCBkZXZpY2UgdHJlZSBzaG91bGQgYWRvcHQgdGhlIG1lcmdlZCB0cmVlIHByYWN0aWNlIG9mCi0gIHNldHRpbmcgcHBjX21kIHVwIGR5bmFtaWNhbGx5LCBldmVuIHRob3VnaCB0aGUga2VybmVsIGlzIGN1cnJlbnRseQotICBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIG9ubHkgYSBzaW5nbGUgcGxhdGZvcm0gYXQgYSB0aW1lLiAgVGhpcyBhbGxvd3MKLSAgdW5pZmljYXRpb24gb2YgdGhlIHNldHVwIGNvZGUsIGFuZCB3aWxsIG1ha2UgaXQgZWFzaWVyIHRvIGdvIHRvIGEKLSAgbXVsdGlwbGUtcGxhdGZvcm0tc3VwcG9ydCBtb2RlbCBpbiB0aGUgZnV0dXJlLgotCi1OT1RFOiBJIGJlbGlldmUgdGhlIGFib3ZlIHdpbGwgYmUgdHJ1ZSBvbmNlIEJlbidzIGRvbmUgd2l0aCB0aGUgbWVyZ2UKLW9mIHRoZSBib290IHNlcXVlbmNlcy4uLi4gc29tZW9uZSBzcGVhayB1cCBpZiB0aGlzIGlzIHdyb25nIQotCi0gIFRvIGFkZCBhIDMyLWJpdCBlbWJlZGRlZCBwbGF0Zm9ybSBzdXBwb3J0LCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucwotICBmb3IgNjQtYml0IHBsYXRmb3JtcyBhYm92ZSwgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIEtjb25maWcKLSAgb3B0aW9uIHNob3VsZCBiZSBzZXQgdXAgc3VjaCB0aGF0IHRoZSBrZXJuZWwgYnVpbGRzIGV4Y2x1c2l2ZWx5IGZvcgotICB0aGUgcGxhdGZvcm0gc2VsZWN0ZWQuICBUaGUgcHJvY2Vzc29yIHR5cGUgZm9yIHRoZSBwbGF0Zm9ybSBzaG91bGQKLSAgZW5hYmxlIGFub3RoZXIgY29uZmlnIG9wdGlvbiB0byBzZWxlY3QgdGhlIHNwZWNpZmljIGJvYXJkCi0gIHN1cHBvcnRlZC4KLQotTk9URTogSWYgQmVuIGRvZXNuJ3QgbWVyZ2UgdGhlIHNldHVwIGZpbGVzLCBtYXkgbmVlZCB0byBjaGFuZ2UgdGhpcyB0bwotcG9pbnQgdG8gc2V0dXBfMzIuYwotCi0KLSAgIEkgd2lsbCBkZXNjcmliZSBsYXRlciB0aGUgYm9vdCBwcm9jZXNzIGFuZCB2YXJpb3VzIGNhbGxiYWNrcyB0aGF0Ci0gICB5b3VyIHBsYXRmb3JtIHNob3VsZCBpbXBsZW1lbnQuCi0KIAogSUkgLSBUaGUgRFQgYmxvY2sgZm9ybWF0CiA9PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTMwMCw4ICsyNDksOCBAQAogMSkgSGVhZGVyCiAtLS0tLS0tLS0KIAotICAgVGhlIGtlcm5lbCBpcyBlbnRlcmVkIHdpdGggcjMgcG9pbnRpbmcgdG8gYW4gYXJlYSBvZiBtZW1vcnkgdGhhdCBpcwotICAgcm91Z2hseSBkZXNjcmliZWQgaW4gYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb20uaCBieSB0aGUgc3RydWN0dXJlCisgICBUaGUga2VybmVsIGlzIHBhc3NlZCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBwb2ludGluZyB0byBhbiBhcmVhIG9mIG1lbW9yeQorICAgdGhhdCBpcyByb3VnaGx5IGRlc2NyaWJlZCBpbiBpbmNsdWRlL2xpbnV4L29mX2ZkdC5oIGJ5IHRoZSBzdHJ1Y3R1cmUKICAgIGJvb3RfcGFyYW1faGVhZGVyOgogCiBzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgewpAQCAtMzM5LDcgKzI4OCw3IEBACiAgICBBbGwgdmFsdWVzIGluIHRoaXMgaGVhZGVyIGFyZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCwgdGhlIHZhcmlvdXMKICAgIGZpZWxkcyBpbiB0aGlzIGhlYWRlciBhcmUgZGVmaW5lZCBtb3JlIHByZWNpc2VseSBiZWxvdy4gQWxsCiAgICAib2Zmc2V0IiB2YWx1ZXMgYXJlIGluIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXI7IHRoYXQgaXMKLSAgIGZyb20gdGhlIHZhbHVlIG9mIHIzLgorICAgZnJvbSB0aGUgcGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgdHJlZSBibG9jay4KIAogICAgLSBtYWdpYwogCkBAIC00MzcsNyArMzg2LDcgQEAKIAogCiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgcjMgLT4gfCAgc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICB8CisgICAgIGJhc2UgLT4gfCAgc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICB8CiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgfCAgICAgIChhbGlnbm1lbnQgZ2FwKSAoKikgICB8CiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NTcsNyArNDA2LDcgQEAKICAgICAgIC0tLS0tPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgIHwKICAgICAgIHwKLSAgICAgIC0tLSAocjMgKyB0b3RhbHNpemUpCisgICAgICAtLS0gKGJhc2UgKyB0b3RhbHNpemUpCiAKICAgKCopIFRoZSBhbGlnbm1lbnQgZ2FwcyBhcmUgbm90IG5lY2Vzc2FyaWx5IHByZXNlbnQ7IHRoZWlyIHByZXNlbmNlCiAgICAgICBhbmQgc2l6ZSBhcmUgZGVwZW5kZW50IG9uIHRoZSB2YXJpb3VzIGFsaWdubWVudCByZXF1aXJlbWVudHMgb2YKQEAgLTUwMCw3ICs0NDksNyBAQAogdGhlIGRldmljZS10cmVlLiBNb3JlIGRldGFpbHMgYWJvdXQgdGhlIGFjdHVhbCBmb3JtYXQgb2YgdGhlc2Ugd2lsbCBiZQogYmVsb3cuCiAKLVRoZSBrZXJuZWwgcG93ZXJwYyBnZW5lcmljIGNvZGUgZG9lcyBub3QgbWFrZSBhbnkgZm9ybWFsIHVzZSBvZiB0aGUKK1RoZSBrZXJuZWwgZ2VuZXJpYyBjb2RlIGRvZXMgbm90IG1ha2UgYW55IGZvcm1hbCB1c2Ugb2YgdGhlCiB1bml0IGFkZHJlc3MgKHRob3VnaCBzb21lIGJvYXJkIHN1cHBvcnQgY29kZSBtYXkgZG8pIHNvIHRoZSBvbmx5IHJlYWwKIHJlcXVpcmVtZW50IGhlcmUgZm9yIHRoZSB1bml0IGFkZHJlc3MgaXMgdG8gZW5zdXJlIHVuaXF1ZW5lc3Mgb2YKIHRoZSBub2RlIHVuaXQgbmFtZSBhdCBhIGdpdmVuIGxldmVsIG9mIHRoZSB0cmVlLiBOb2RlcyB3aXRoIG5vIG5vdGlvbgpAQCAtNTE4LDIwICs0NjcsMjEgQEAKIAogRXZlcnkgbm9kZSB3aGljaCBhY3R1YWxseSByZXByZXNlbnRzIGFuIGFjdHVhbCBkZXZpY2UgKHRoYXQgaXMsIGEgbm9kZQogd2hpY2ggaXNuJ3Qgb25seSBhIHZpcnR1YWwgImNvbnRhaW5lciIgZm9yIG1vcmUgbm9kZXMsIGxpa2UgIi9jcHVzIgotaXMpIGlzIGFsc28gcmVxdWlyZWQgdG8gaGF2ZSBhICJkZXZpY2VfdHlwZSIgcHJvcGVydHkgaW5kaWNhdGluZyB0aGUKLXR5cGUgb2Ygbm9kZSAuCitpcykgaXMgYWxzbyByZXF1aXJlZCB0byBoYXZlIGEgImNvbXBhdGlibGUiIHByb3BlcnR5IGluZGljYXRpbmcgdGhlCitzcGVjaWZpYyBoYXJkd2FyZSBhbmQgYW4gb3B0aW9uYWwgbGlzdCBvZiBkZXZpY2VzIGl0IGlzIGZ1bGx5CitiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoLgogCiBGaW5hbGx5LCBldmVyeSBub2RlIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZnJvbSBhIHByb3BlcnR5IGluIGFub3RoZXIKLW5vZGUgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhICJsaW51eCxwaGFuZGxlIiBwcm9wZXJ0eS4gUmVhbCBvcGVuCi1maXJtd2FyZSBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZSBhIHVuaXF1ZSAicGhhbmRsZSIgdmFsdWUgZm9yIGV2ZXJ5Ci1ub2RlIHRoYXQgdGhlICJwcm9tX2luaXQoKSIgdHJhbXBvbGluZSBjb2RlIHR1cm5zIGludG8KLSJsaW51eCxwaGFuZGxlIiBwcm9wZXJ0aWVzLiBIb3dldmVyLCB0aGlzIGlzIG1hZGUgb3B0aW9uYWwgaWYgdGhlCi1mbGF0dGVuZWQgZGV2aWNlIHRyZWUgaXMgdXNlZCBkaXJlY3RseS4gQW4gZXhhbXBsZSBvZiBhIG5vZGUKK25vZGUgaXMgcmVxdWlyZWQgdG8gaGF2ZSBlaXRoZXIgYSAicGhhbmRsZSIgb3IgYSAibGludXgscGhhbmRsZSIKK3Byb3BlcnR5LiBSZWFsIE9wZW4gRmlybXdhcmUgaW1wbGVtZW50YXRpb25zIHByb3ZpZGUgYSB1bmlxdWUKKyJwaGFuZGxlIiB2YWx1ZSBmb3IgZXZlcnkgbm9kZSB0aGF0IHRoZSAicHJvbV9pbml0KCkiIHRyYW1wb2xpbmUgY29kZQordHVybnMgaW50byAibGludXgscGhhbmRsZSIgcHJvcGVydGllcy4gSG93ZXZlciwgdGhpcyBpcyBtYWRlIG9wdGlvbmFsCitpZiB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlIGlzIHVzZWQgZGlyZWN0bHkuIEFuIGV4YW1wbGUgb2YgYSBub2RlCiByZWZlcmVuY2luZyBhbm90aGVyIG5vZGUgdmlhICJwaGFuZGxlIiBpcyB3aGVuIGxheWluZyBvdXQgdGhlCiBpbnRlcnJ1cHQgdHJlZSB3aGljaCB3aWxsIGJlIGRlc2NyaWJlZCBpbiBhIGZ1cnRoZXIgdmVyc2lvbiBvZiB0aGlzCiBkb2N1bWVudC4KIAotVGhpcyAibGludXgsIHBoYW5kbGUiIHByb3BlcnR5IGlzIGEgMzItYml0IHZhbHVlIHRoYXQgdW5pcXVlbHkKK1RoZSAicGhhbmRsZSIgcHJvcGVydHkgaXMgYSAzMi1iaXQgdmFsdWUgdGhhdCB1bmlxdWVseQogaWRlbnRpZmllcyBhIG5vZGUuIFlvdSBhcmUgZnJlZSB0byB1c2Ugd2hhdGV2ZXIgdmFsdWVzIG9yIHN5c3RlbSBvZgogdmFsdWVzLCBpbnRlcm5hbCBwb2ludGVycywgb3Igd2hhdGV2ZXIgdG8gZ2VuZXJhdGUgdGhlc2UsIHRoZSBvbmx5CiByZXF1aXJlbWVudCBpcyB0aGF0IGV2ZXJ5IG5vZGUgZm9yIHdoaWNoIHlvdSBwcm92aWRlIHRoYXQgcHJvcGVydHkgaGFzCkBAIC02OTQsNyArNjQ0LDcgQEAKIHdoaWxlIHRoZSB0b3AgY2VsbCBjb250YWlucyBhZGRyZXNzIHNwYWNlIGluZGljYXRpb24sIGZsYWdzLCBhbmQgcGNpCiBidXMgJiBkZXZpY2UgbnVtYmVycy4KIAotRm9yIGJ1c3NlcyB0aGF0IHN1cHBvcnQgZHluYW1pYyBhbGxvY2F0aW9uLCBpdCdzIHRoZSBhY2NlcHRlZCBwcmFjdGljZQorRm9yIGJ1c2VzIHRoYXQgc3VwcG9ydCBkeW5hbWljIGFsbG9jYXRpb24sIGl0J3MgdGhlIGFjY2VwdGVkIHByYWN0aWNlCiB0byB0aGVuIG5vdCBwcm92aWRlIHRoZSBhZGRyZXNzIGluICJyZWciIChrZWVwIGl0IDApIHRob3VnaCB3aGlsZQogcHJvdmlkaW5nIGEgZmxhZyBpbmRpY2F0aW5nIHRoZSBhZGRyZXNzIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgYW5kCiB0aGVuLCB0byBwcm92aWRlIGEgc2VwYXJhdGUgImFzc2lnbmVkLWFkZHJlc3NlcyIgcHJvcGVydHkgdGhhdApAQCAtNzExLDcgKzY2MSw3IEBACiBUaGUgInJlZyIgcHJvcGVydHkgb25seSBkZWZpbmVzIGFkZHJlc3NlcyBhbmQgc2l6ZXMgKGlmICNzaXplLWNlbGxzIGlzCiBub24tMCkgd2l0aGluIGEgZ2l2ZW4gYnVzLiBJbiBvcmRlciB0byB0cmFuc2xhdGUgYWRkcmVzc2VzIHVwd2FyZAogKHRoYXQgaXMgaW50byBwYXJlbnQgYnVzIGFkZHJlc3NlcywgYW5kIHBvc3NpYmx5IGludG8gQ1BVIHBoeXNpY2FsCi1hZGRyZXNzZXMpLCBhbGwgYnVzc2VzIG11c3QgY29udGFpbiBhICJyYW5nZXMiIHByb3BlcnR5LiBJZiB0aGUKK2FkZHJlc3NlcyksIGFsbCBidXNlcyBtdXN0IGNvbnRhaW4gYSAicmFuZ2VzIiBwcm9wZXJ0eS4gSWYgdGhlCiAicmFuZ2VzIiBwcm9wZXJ0eSBpcyBtaXNzaW5nIGF0IGEgZ2l2ZW4gbGV2ZWwsIGl0J3MgYXNzdW1lZCB0aGF0CiB0cmFuc2xhdGlvbiBpc24ndCBwb3NzaWJsZSwgaS5lLiwgdGhlIHJlZ2lzdGVycyBhcmUgbm90IHZpc2libGUgb24gdGhlCiBwYXJlbnQgYnVzLiAgVGhlIGZvcm1hdCBvZiB0aGUgInJhbmdlcyIgcHJvcGVydHkgZm9yIGEgYnVzIGlzIGEgbGlzdApAQCAtNzI3LDkgKzY3Nyw5IEBACiBQQ0k8LT5JU0EgYnJpZGdlLCB0aGF0IHdvdWxkIGJlIGEgUENJIGFkZHJlc3MuIEl0IGRlZmluZXMgdGhlIGJhc2UKIGFkZHJlc3MgaW4gdGhlIHBhcmVudCBidXMgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGF0IHJhbmdlIGlzIG1hcHBlZC4KIAotRm9yIGEgbmV3IDY0LWJpdCBwb3dlcnBjIGJvYXJkLCBJIHJlY29tbWVuZCBlaXRoZXIgdGhlIDIvMiBmb3JtYXQgb3IKK0ZvciBuZXcgNjQtYml0IGJvYXJkIHN1cHBvcnQsIEkgcmVjb21tZW5kIGVpdGhlciB0aGUgMi8yIGZvcm1hdCBvcgogQXBwbGUncyAyLzEgZm9ybWF0IHdoaWNoIGlzIHNsaWdodGx5IG1vcmUgY29tcGFjdCBzaW5jZSBzaXplcyB1c3VhbGx5Ci1maXQgaW4gYSBzaW5nbGUgMzItYml0IHdvcmQuICAgTmV3IDMyLWJpdCBwb3dlcnBjIGJvYXJkcyBzaG91bGQgdXNlIGEKK2ZpdCBpbiBhIHNpbmdsZSAzMi1iaXQgd29yZC4gICBOZXcgMzItYml0IGJvYXJkIHN1cHBvcnQgc2hvdWxkIHVzZSBhCiAxLzEgZm9ybWF0LCB1bmxlc3MgdGhlIHByb2Nlc3NvciBzdXBwb3J0cyBwaHlzaWNhbCBhZGRyZXNzZXMgZ3JlYXRlcgogdGhhbiAzMi1iaXRzLCBpbiB3aGljaCBjYXNlIGEgMi8xIGZvcm1hdCBpcyByZWNvbW1lbmRlZC4KIApAQCAtNzU0LDcgKzcwNCw3IEBACiBXaGlsZSBlYXJsaWVyIHVzZXJzIG9mIE9wZW4gRmlybXdhcmUgbGlrZSBPbGRXb3JsZCBtYWNpbnRvc2hlcyB0ZW5kZWQKIHRvIHVzZSB0aGUgYWN0dWFsIGRldmljZSBuYW1lIGZvciB0aGUgIm5hbWUiIHByb3BlcnR5LCBpdCdzIG5vd2FkYXlzCiBjb25zaWRlcmVkIGEgZ29vZCBwcmFjdGljZSB0byB1c2UgYSBuYW1lIHRoYXQgaXMgY2xvc2VyIHRvIHRoZSBkZXZpY2UKLWNsYXNzIChvZnRlbiBlcXVhbCB0byBkZXZpY2VfdHlwZSkuIEZvciBleGFtcGxlLCBub3dhZGF5cywgZXRoZXJuZXQKK2NsYXNzIChvZnRlbiBlcXVhbCB0byBkZXZpY2VfdHlwZSkuIEZvciBleGFtcGxlLCBub3dhZGF5cywgRXRoZXJuZXQKIGNvbnRyb2xsZXJzIGFyZSBuYW1lZCAiZXRoZXJuZXQiLCBhbiBhZGRpdGlvbmFsICJtb2RlbCIgcHJvcGVydHkKIGRlZmluaW5nIHByZWNpc2VseSB0aGUgY2hpcCB0eXBlL21vZGVsLCBhbmQgImNvbXBhdGlibGUiIHByb3BlcnR5CiBkZWZpbmluZyB0aGUgZmFtaWx5IGluIGNhc2UgYSBzaW5nbGUgZHJpdmVyIGNhbiBkcml2ZXIgbW9yZSB0aGFuIG9uZQpAQCAtNzcyLDcgKzcyMiw3IEBACiA0KSBOb3RlIGFib3V0IG5vZGUgYW5kIHByb3BlcnR5IG5hbWVzIGFuZCBjaGFyYWN0ZXIgc2V0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoaWxlIG9wZW4gZmlybXdhcmUgcHJvdmlkZXMgbW9yZSBmbGV4aWJsZSB1c2FnZSBvZiA4ODU5LTEsIHRoaXMKK1doaWxlIE9wZW4gRmlybXdhcmUgcHJvdmlkZXMgbW9yZSBmbGV4aWJsZSB1c2FnZSBvZiA4ODU5LTEsIHRoaXMKIHNwZWNpZmljYXRpb24gZW5mb3JjZXMgbW9yZSBzdHJpY3QgcnVsZXMuIE5vZGVzIGFuZCBwcm9wZXJ0aWVzIHNob3VsZAogYmUgY29tcHJpc2VkIG9ubHkgb2YgQVNDSUkgY2hhcmFjdGVycyAnYScgdG8gJ3onLCAnMCcgdG8KICc5JywgJywnLCAnLicsICdfJywgJysnLCAnIycsICc/JywgYW5kICctJy4gTm9kZSBuYW1lcyBhZGRpdGlvbmFsbHkKQEAgLTc5Miw3ICs3NDIsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVGhlc2UgYXJlIGFsbCB0aGF0IGFyZSBjdXJyZW50bHkgcmVxdWlyZWQuIEhvd2V2ZXIsIGl0IGlzIHN0cm9uZ2x5CiAgIHJlY29tbWVuZGVkIHRoYXQgeW91IGV4cG9zZSBQQ0kgaG9zdCBicmlkZ2VzIGFzIGRvY3VtZW50ZWQgaW4gdGhlCi0gIFBDSSBiaW5kaW5nIHRvIG9wZW4gZmlybXdhcmUsIGFuZCB5b3VyIGludGVycnVwdCB0cmVlIGFzIGRvY3VtZW50ZWQKKyAgUENJIGJpbmRpbmcgdG8gT3BlbiBGaXJtd2FyZSwgYW5kIHlvdXIgaW50ZXJydXB0IHRyZWUgYXMgZG9jdW1lbnRlZAogICBpbiBPRiBpbnRlcnJ1cHQgdHJlZSBzcGVjaWZpY2F0aW9uLgogCiAgIGEpIFRoZSByb290IG5vZGUKQEAgLTgwMiwyMCArNzUyLDEyIEBACiAgICAgLSBtb2RlbCA6IHRoaXMgaXMgeW91ciBib2FyZCBuYW1lL21vZGVsCiAgICAgLSAjYWRkcmVzcy1jZWxscyA6IGFkZHJlc3MgcmVwcmVzZW50YXRpb24gZm9yICJyb290IiBkZXZpY2VzCiAgICAgLSAjc2l6ZS1jZWxsczogdGhlIHNpemUgcmVwcmVzZW50YXRpb24gZm9yICJyb290IiBkZXZpY2VzCi0gICAgLSBkZXZpY2VfdHlwZSA6IFRoaXMgcHJvcGVydHkgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeS4gSG93ZXZlciwgaWYKLSAgICAgIHlvdSBkZWNpZGUgdG8gY3JlYXRlIGEgZGV2aWNlX3R5cGUgZm9yIHlvdXIgcm9vdCBub2RlLCBtYWtlIHN1cmUgaXQKLSAgICAgIGlzIF9ub3RfICJjaHJwIiB1bmxlc3MgeW91ciBwbGF0Zm9ybSBpcyBhIHBTZXJpZXMgb3IgUEFQUiBjb21wbGlhbnQKLSAgICAgIG9uZSBmb3IgNjQtYml0LCBvciBhIENIUlAtdHlwZSBtYWNoaW5lIGZvciAzMi1iaXQgYXMgdGhpcyB3aWxsCi0gICAgICBtYXRjaGVkIGJ5IHRoZSBrZXJuZWwgdGhpcyB3YXkuCi0KLSAgQWRkaXRpb25hbGx5LCBzb21lIHJlY29tbWVuZGVkIHByb3BlcnRpZXMgYXJlOgotCiAgICAgLSBjb21wYXRpYmxlIDogdGhlIGJvYXJkICJmYW1pbHkiIGdlbmVyYWxseSBmaW5kcyBpdHMgd2F5IGhlcmUsCiAgICAgICBmb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgMiBib2FyZCBtb2RlbHMgd2l0aCBhIHNpbWlsYXIgbGF5b3V0LAogICAgICAgdGhhdCB0eXBpY2FsbHkgZ2V0IGRyaXZlbiBieSB0aGUgc2FtZSBwbGF0Zm9ybSBjb2RlIGluIHRoZQotICAgICAga2VybmVsLCB5b3Ugd291bGQgdXNlIGEgZGlmZmVyZW50ICJtb2RlbCIgcHJvcGVydHkgYnV0IHB1dCBhCi0gICAgICB2YWx1ZSBpbiAiY29tcGF0aWJsZSIuIFRoZSBrZXJuZWwgZG9lc24ndCBkaXJlY3RseSB1c2UgdGhhdAotICAgICAgdmFsdWUgYnV0IGl0IGlzIGdlbmVyYWxseSB1c2VmdWwuCisgICAgICBrZXJuZWwsIHlvdSB3b3VsZCBzcGVjaWZ5IHRoZSBleGFjdCBib2FyZCBtb2RlbCBpbiB0aGUKKyAgICAgIGNvbXBhdGlibGUgcHJvcGVydHkgZm9sbG93ZWQgYnkgYW4gZW50cnkgdGhhdCByZXByZXNlbnRzIHRoZSBTb0MKKyAgICAgIG1vZGVsLgogCiAgIFRoZSByb290IG5vZGUgaXMgYWxzbyBnZW5lcmFsbHkgd2hlcmUgeW91IGFkZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMKICAgc3BlY2lmaWMgdG8geW91ciBib2FyZCBsaWtlIHRoZSBzZXJpYWwgbnVtYmVyIGlmIGFueSwgdGhhdCBzb3J0IG9mCkBAIC04NDEsOCArNzgzLDExIEBACiAKICAgU28gdW5kZXIgL2NwdXMsIHlvdSBhcmUgc3VwcG9zZWQgdG8gY3JlYXRlIGEgbm9kZSBmb3IgZXZlcnkgQ1BVIG9uCiAgIHRoZSBtYWNoaW5lLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByZXN0cmljdGlvbiBvbiB0aGUgbmFtZSBvZiB0aGUKLSAgQ1BVLCB0aG91Z2ggSXQncyBjb21tb24gcHJhY3RpY2UgdG8gY2FsbCBpdCBQb3dlclBDLDxuYW1lPi4gRm9yCisgIENQVSwgdGhvdWdoIGl0J3MgY29tbW9uIHRvIGNhbGwgaXQgPGFyY2hpdGVjdHVyZT4sPGNvcmU+LiBGb3IKICAgZXhhbXBsZSwgQXBwbGUgdXNlcyBQb3dlclBDLEc1IHdoaWxlIElCTSB1c2VzIFBvd2VyUEMsOTcwRlguCisgIEhvd2V2ZXIsIHRoZSBHZW5lcmljIE5hbWVzIGNvbnZlbnRpb24gc3VnZ2VzdHMgdGhhdCBpdCB3b3VsZCBiZQorICBiZXR0ZXIgdG8gc2ltcGx5IHVzZSAnY3B1JyBmb3IgZWFjaCBjcHUgbm9kZSBhbmQgdXNlIHRoZSBjb21wYXRpYmxlCisgIHByb3BlcnR5IHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBjcHUgY29yZS4KIAogICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgogCkBAIC05MjMsNyArODY4LDcgQEAKIAogICBlKSBUaGUgL2Nob3NlbiBub2RlCiAKLSAgVGhpcyBub2RlIGlzIGEgYml0ICJzcGVjaWFsIi4gTm9ybWFsbHksIHRoYXQncyB3aGVyZSBvcGVuIGZpcm13YXJlCisgIFRoaXMgbm9kZSBpcyBhIGJpdCAic3BlY2lhbCIuIE5vcm1hbGx5LCB0aGF0J3Mgd2hlcmUgT3BlbiBGaXJtd2FyZQogICBwdXRzIHNvbWUgdmFyaWFibGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24sIGxpa2UgdGhlIGFyZ3VtZW50cywgb3IKICAgdGhlIGRlZmF1bHQgaW5wdXQvb3V0cHV0IGRldmljZXMuCiAKQEAgLTk0MCwxMSArODg1LDcgQEAKICAgICAgIGNvbnNvbGUgZGV2aWNlIGlmIGFueS4gVHlwaWNhbGx5LCBpZiB5b3UgaGF2ZSBzZXJpYWwgZGV2aWNlcyBvbgogICAgICAgeW91ciBib2FyZCwgeW91IG1heSB3YW50IHRvIHB1dCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBvbmUgc2V0IGFzCiAgICAgICB0aGUgZGVmYXVsdCBjb25zb2xlIGluIHRoZSBmaXJtd2FyZSBoZXJlLCBmb3IgdGhlIGtlcm5lbCB0byBwaWNrCi0gICAgICBpdCB1cCBhcyBpdHMgb3duIGRlZmF1bHQgY29uc29sZS4gSWYgeW91IGxvb2sgYXQgdGhlIGZ1bmN0aW9uCi0gICAgICBzZXRfcHJlZmVycmVkX2NvbnNvbGUoKSBpbiBhcmNoL3BwYzY0L2tlcm5lbC9zZXR1cC5jLCB5b3UnbGwgc2VlCi0gICAgICB0aGF0IHRoZSBrZXJuZWwgdHJpZXMgdG8gZmluZCBvdXQgdGhlIGRlZmF1bHQgY29uc29sZSBhbmQgaGFzCi0gICAgICBrbm93bGVkZ2Ugb2YgdmFyaW91cyB0eXBlcyBsaWtlIDgyNTAgc2VyaWFsIHBvcnRzLiBZb3UgbWF5IHdhbnQKLSAgICAgIHRvIGV4dGVuZCB0aGlzIGZ1bmN0aW9uIHRvIGFkZCB5b3VyIG93bi4KKyAgICAgIGl0IHVwIGFzIGl0cyBvd24gZGVmYXVsdCBjb25zb2xlLgogCiAgIE5vdGUgdGhhdCB1LWJvb3QgY3JlYXRlcyBhbmQgZmlsbHMgaW4gdGhlIGNob3NlbiBub2RlIGZvciBwbGF0Zm9ybXMKICAgdGhhdCB1c2UgaXQuCkBAIC05NTUsMjMgKzg5NiwyMyBAQAogCiAgIGYpIHRoZSAvc29jPFNPQ25hbWU+IG5vZGUKIAotICBUaGlzIG5vZGUgaXMgdXNlZCB0byByZXByZXNlbnQgYSBzeXN0ZW0tb24tYS1jaGlwIChTT0MpIGFuZCBtdXN0IGJlCi0gIHByZXNlbnQgaWYgdGhlIHByb2Nlc3NvciBpcyBhIFNPQy4gVGhlIHRvcC1sZXZlbCBzb2Mgbm9kZSBjb250YWlucwotICBpbmZvcm1hdGlvbiB0aGF0IGlzIGdsb2JhbCB0byBhbGwgZGV2aWNlcyBvbiB0aGUgU09DLiBUaGUgbm9kZSBuYW1lCi0gIHNob3VsZCBjb250YWluIGEgdW5pdCBhZGRyZXNzIGZvciB0aGUgU09DLCB3aGljaCBpcyB0aGUgYmFzZSBhZGRyZXNzCi0gIG9mIHRoZSBtZW1vcnktbWFwcGVkIHJlZ2lzdGVyIHNldCBmb3IgdGhlIFNPQy4gVGhlIG5hbWUgb2YgYW4gc29jCisgIFRoaXMgbm9kZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhIHN5c3RlbS1vbi1hLWNoaXAgKFNvQykgYW5kIG11c3QgYmUKKyAgcHJlc2VudCBpZiB0aGUgcHJvY2Vzc29yIGlzIGEgU29DLiBUaGUgdG9wLWxldmVsIHNvYyBub2RlIGNvbnRhaW5zCisgIGluZm9ybWF0aW9uIHRoYXQgaXMgZ2xvYmFsIHRvIGFsbCBkZXZpY2VzIG9uIHRoZSBTb0MuIFRoZSBub2RlIG5hbWUKKyAgc2hvdWxkIGNvbnRhaW4gYSB1bml0IGFkZHJlc3MgZm9yIHRoZSBTb0MsIHdoaWNoIGlzIHRoZSBiYXNlIGFkZHJlc3MKKyAgb2YgdGhlIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXIgc2V0IGZvciB0aGUgU29DLiBUaGUgbmFtZSBvZiBhbiBTb0MKICAgbm9kZSBzaG91bGQgc3RhcnQgd2l0aCAic29jIiwgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIG5hbWUgc2hvdWxkCiAgIHJlcHJlc2VudCB0aGUgcGFydCBudW1iZXIgZm9yIHRoZSBzb2MuICBGb3IgZXhhbXBsZSwgdGhlIE1QQzg1NDAncwogICBzb2Mgbm9kZSB3b3VsZCBiZSBjYWxsZWQgInNvYzg1NDAiLgogCiAgIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAKLSAgICAtIGRldmljZV90eXBlIDogU2hvdWxkIGJlICJzb2MiCiAgICAgLSByYW5nZXMgOiBTaG91bGQgYmUgZGVmaW5lZCBhcyBzcGVjaWZpZWQgaW4gMSkgdG8gZGVzY3JpYmUgdGhlCi0gICAgICB0cmFuc2xhdGlvbiBvZiBTT0MgYWRkcmVzc2VzIGZvciBtZW1vcnkgbWFwcGVkIFNPQyByZWdpc3RlcnMuCi0gICAgLSBidXMtZnJlcXVlbmN5OiBDb250YWlucyB0aGUgYnVzIGZyZXF1ZW5jeSBmb3IgdGhlIFNPQyBub2RlLgorICAgICAgdHJhbnNsYXRpb24gb2YgU29DIGFkZHJlc3NlcyBmb3IgbWVtb3J5IG1hcHBlZCBTb0MgcmVnaXN0ZXJzLgorICAgIC0gYnVzLWZyZXF1ZW5jeTogQ29udGFpbnMgdGhlIGJ1cyBmcmVxdWVuY3kgZm9yIHRoZSBTb0Mgbm9kZS4KICAgICAgIFR5cGljYWxseSwgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgaXMgZmlsbGVkIGluIGJ5IHRoZSBib290CiAgICAgICBsb2FkZXIuCisgICAgLSBjb21wYXRpYmxlIDogRXhhY3QgbW9kZWwgb2YgdGhlIFNvQwogCiAKICAgUmVjb21tZW5kZWQgcHJvcGVydGllczoKQEAgLTExNTUsMTIgKzEwOTYsMTMgQEAKIAogICAtIEFuIGV4YW1wbGUgb2YgY29kZSBmb3IgaXRlcmF0aW5nIG5vZGVzICYgcmV0cmlldmluZyBwcm9wZXJ0aWVzCiAgICAgZGlyZWN0bHkgZnJvbSB0aGUgZmxhdHRlbmVkIHRyZWUgZm9ybWF0IGNhbiBiZSBmb3VuZCBpbiB0aGUga2VybmVsCi0gICAgZmlsZSBhcmNoL3BwYzY0L2tlcm5lbC9wcm9tLmMsIGxvb2sgYXQgc2Nhbl9mbGF0X2R0KCkgZnVuY3Rpb24sCisgICAgZmlsZSBkcml2ZXJzL29mL2ZkdC5jLiAgTG9vayBhdCB0aGUgb2Zfc2Nhbl9mbGF0X2R0KCkgZnVuY3Rpb24sCiAgICAgaXRzIHVzYWdlIGluIGVhcmx5X2luaXRfZGV2dHJlZSgpLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdmFyaW91cwogICAgIGVhcmx5X2luaXRfZHRfc2Nhbl8qKCkgY2FsbGJhY2tzLiBUaGF0IGNvZGUgY2FuIGJlIHJlLXVzZWQgaW4gYQogICAgIEdQTCBib290bG9hZGVyLCBhbmQgYXMgdGhlIGF1dGhvciBvZiB0aGF0IGNvZGUsIEkgd291bGQgYmUgaGFwcHkKICAgICB0byBkaXNjdXNzIHBvc3NpYmxlIGZyZWUgbGljZW5zaW5nIHRvIGFueSB2ZW5kb3Igd2hvIHdpc2hlcyB0bwogICAgIGludGVncmF0ZSBhbGwgb3IgcGFydCBvZiB0aGlzIGNvZGUgaW50byBhIG5vbi1HUEwgYm9vdGxvYWRlci4KKyAgICAocmVmZXJlbmNlIG5lZWRlZDsgd2hvIGlzICdJJyBoZXJlPyAtLS1nY2wgSmFuIDMxLCAyMDExKQogCiAKIApAQCAtMTIwMywxOCArMTE0NSwxOSBAQAogMikgUmVwcmVzZW50aW5nIGRldmljZXMgd2l0aG91dCBhIGN1cnJlbnQgT0Ygc3BlY2lmaWNhdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1DdXJyZW50bHksIHRoZXJlIGFyZSBtYW55IGRldmljZXMgb24gU09DcyB0aGF0IGRvIG5vdCBoYXZlIGEgc3RhbmRhcmQKLXJlcHJlc2VudGF0aW9uIHByZS1kZWZpbmVkIGFzIHBhcnQgb2YgdGhlIG9wZW4gZmlybXdhcmUKLXNwZWNpZmljYXRpb25zLCBtYWlubHkgYmVjYXVzZSB0aGUgYm9hcmRzIHRoYXQgY29udGFpbiB0aGVzZSBTT0NzIGFyZQotbm90IGN1cnJlbnRseSBib290ZWQgdXNpbmcgb3BlbiBmaXJtd2FyZS4gICBUaGlzIHNlY3Rpb24gY29udGFpbnMKLWRlc2NyaXB0aW9ucyBmb3IgdGhlIFNPQyBkZXZpY2VzIGZvciB3aGljaCBuZXcgbm9kZXMgaGF2ZSBiZWVuCi1kZWZpbmVkOyB0aGlzIGxpc3Qgd2lsbCBleHBhbmQgYXMgbW9yZSBhbmQgbW9yZSBTT0MtY29udGFpbmluZwotcGxhdGZvcm1zIGFyZSBtb3ZlZCBvdmVyIHRvIHVzZSB0aGUgZmxhdHRlbmVkLWRldmljZS10cmVlIG1vZGVsLgorQ3VycmVudGx5LCB0aGVyZSBhcmUgbWFueSBkZXZpY2VzIG9uIFNvQ3MgdGhhdCBkbyBub3QgaGF2ZSBhIHN0YW5kYXJkCityZXByZXNlbnRhdGlvbiBkZWZpbmVkIGFzIHBhcnQgb2YgdGhlIE9wZW4gRmlybXdhcmUgc3BlY2lmaWNhdGlvbnMsCittYWlubHkgYmVjYXVzZSB0aGUgYm9hcmRzIHRoYXQgY29udGFpbiB0aGVzZSBTb0NzIGFyZSBub3QgY3VycmVudGx5Citib290ZWQgdXNpbmcgT3BlbiBGaXJtd2FyZS4gIEJpbmRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgbmV3IGRldmljZXMKK3Nob3VsZCBiZSBhZGRlZCB0byB0aGUgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzIGRpcmVjdG9yeS4KK1RoYXQgZGlyZWN0b3J5IHdpbGwgZXhwYW5kIGFzIGRldmljZSB0cmVlIHN1cHBvcnQgaXMgYWRkZWQgdG8gbW9yZSBhbmQKK21vcmUgU29Dcy4KKwogCiBWSUkgLSBTcGVjaWZ5aW5nIGludGVycnVwdCBpbmZvcm1hdGlvbiBmb3IgZGV2aWNlcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBkZXZpY2UgdHJlZSByZXByZXNlbnRzIHRoZSBidXNzZXMgYW5kIGRldmljZXMgb2YgYSBoYXJkd2FyZQorVGhlIGRldmljZSB0cmVlIHJlcHJlc2VudHMgdGhlIGJ1c2VzIGFuZCBkZXZpY2VzIG9mIGEgaGFyZHdhcmUKIHN5c3RlbSBpbiBhIGZvcm0gc2ltaWxhciB0byB0aGUgcGh5c2ljYWwgYnVzIHRvcG9sb2d5IG9mIHRoZQogaGFyZHdhcmUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCBiOTU5NjU5Li5iM2YzNWU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC02MDMsMyArNjAzLDE5IEBACiBXaG86CUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CW5vc3dhcGFjY291bnQga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIKK1doZW46CTIuNi40MAorV2h5OglUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gb2YgbWVtc3cgZmVhdHVyZSBlbmFibGVkIGJ5CisJQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUCBjb3VsZCBiZSBkaXNhYmxlZCBieSB0aGUgbm9zd2FwYWNjb3VudAorCWtlcm5lbCBwYXJhbWV0ZXIgKGludHJvZHVjZWQgaW4gMi42LjI5LXJjMSkuIExhdGVyIG9uLCB0aGlzIGRlY2lzaW9uCisJdHVybmVkIG91dCB0byBiZSBub3QgaWRlYWwgYmVjYXVzZSB3ZSBjYW5ub3QgaGF2ZSB0aGUgZmVhdHVyZSBjb21waWxlZAorCWluIGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBsZXQgb25seSBpbnRlcmVzdGVkIHRvIGVuYWJsZSBpdAorCShlLmcuIGdlbmVyYWwgZGlzdHJpYnV0aW9uIGtlcm5lbHMgbWlnaHQgbmVlZCBpdCkuIFRoZXJlZm9yZSB3ZSBoYXZlCisJYWRkZWQgc3dhcGFjY291bnRbPTB8MV0gcGFyYW1ldGVyIChpbnRyb2R1Y2VkIGluIDIuNi4zNykgd2hpY2ggcHJvdmlkZXMKKwl0aGUgYm90aCBwb3NzaWJpbGl0aWVzLiBJZiB3ZSByZW1vdmUgbm9zd2FwYWNjb3VudCB3ZSB3aWxsIGhhdmUKKwlsZXNzIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhbmQgd2UKKwljYW4gYWxzbyBjbGVhbnVwIHRoZSBwYXJhbWV0ZXIgaGFuZGxpbmcgYSBiaXQgKCkuCitXaG86CU1pY2hhbCBIb2NrbyA8bWhvY2tvQHN1c2UuY3o+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CmluZGV4IDZlZjhjZjMuLjkzM2JjNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dApAQCAtNDYwLDYgKzQ2MCw4IEBACiAyLjEuMzA6CiAJLSBGaXggd3JpdGV2KCkgKGl0IGtlcHQgd3JpdGluZyB0aGUgZmlyc3Qgc2VnbWVudCBvdmVyIGFuZCBvdmVyIGFnYWluCiAJICBpbnN0ZWFkIG9mIG1vdmluZyBvbnRvIHN1YnNlcXVlbnQgc2VnbWVudHMpLgorCS0gRml4IGNyYXNoIGluIG50ZnNfbWZ0X3JlY29yZF9hbGxvYygpIHdoZW4gbWFwcGluZyB0aGUgbmV3IGV4dGVudCBtZnQKKwkgIHJlY29yZCBmYWlsZWQuCiAyLjEuMjk6CiAJLSBGaXggYSBkZWFkbG9jayB3aGVuIG1vdW50aW5nIHJlYWQtd3JpdGUuCiAyLjEuMjg6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2pjNDIgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2pjNDIKaW5kZXggMGU3NmVmMS4uYTIyZWNmNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9qYzQyCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vamM0MgpAQCAtNTEsNyArNTEsOCBAQAogICAqIEpFREVDIEpDIDQyLjQgY29tcGxpYW50IHRlbXBlcmF0dXJlIHNlbnNvciBjaGlwcwogICAgIFByZWZpeDogJ2pjNDInCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4IC0gMHgxZgotICAgIERhdGFzaGVldDogLQorICAgIERhdGFzaGVldDoKKwlodHRwOi8vd3d3LmplZGVjLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL2RvY3MvNF8wMV8wNFIxOS5wZGYKIAogQXV0aG9yOgogCUd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgpAQCAtNjAsNyArNjEsMTEgQEAKIERlc2NyaXB0aW9uCiAtLS0tLS0tLS0tLQogCi1UaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEpFREVDIEpDIDQyLjQgY29tcGxpYW50IHRlbXBlcmF0dXJlIHNlbnNvcnMuCitUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEpFREVDIEpDIDQyLjQgY29tcGxpYW50IHRlbXBlcmF0dXJlIHNlbnNvcnMsCit3aGljaCBhcmUgdXNlZCBvbiBtYW55IEREUjMgbWVtb3J5IG1vZHVsZXMgZm9yIG1vYmlsZSBkZXZpY2VzIGFuZCBzZXJ2ZXJzLiBTb21lCitzeXN0ZW1zIHVzZSB0aGUgc2Vuc29yIHRvIHByZXZlbnQgbWVtb3J5IG92ZXJoZWF0aW5nIGJ5IGF1dG9tYXRpY2FsbHkgdGhyb3R0bGluZwordGhlIG1lbW9yeSBjb250cm9sbGVyLgorCiBUaGUgZHJpdmVyIGF1dG8tZGV0ZWN0cyB0aGUgY2hpcHMgbGlzdGVkIGFib3ZlLCBidXQgY2FuIGJlIG1hbnVhbGx5IGluc3RhbnRpYXRlZAogdG8gc3VwcG9ydCBvdGhlciBKQyA0Mi40IGNvbXBsaWFudCBjaGlwcy4KIApAQCAtODEsMTUgKzg2LDE5IEBACiB3aGljaCBhcHBsaWVzIHRvIGFsbCBsaW1pdHMuIFRoaXMgcmVnaXN0ZXIgY2FuIGJlIHdyaXR0ZW4gYnkgd3JpdGluZyBpbnRvCiB0ZW1wMV9jcml0X2h5c3QuIE90aGVyIGh5c3RlcmVzaXMgYXR0cmlidXRlcyBhcmUgcmVhZC1vbmx5LgogCitJZiB0aGUgQklPUyBoYXMgY29uZmlndXJlZCB0aGUgc2Vuc29yIGZvciBhdXRvbWF0aWMgdGVtcGVyYXR1cmUgbWFuYWdlbWVudCwgaXQKK2lzIGxpa2VseSB0aGF0IGl0IGhhcyBsb2NrZWQgdGhlIHJlZ2lzdGVycywgaS5lLiwgdGhhdCB0aGUgdGVtcGVyYXR1cmUgbGltaXRzCitjYW5ub3QgYmUgY2hhbmdlZC4KKwogU3lzZnMgZW50cmllcwogLS0tLS0tLS0tLS0tLQogCiB0ZW1wMV9pbnB1dAkJVGVtcGVyYXR1cmUgKFJPKQotdGVtcDFfbWluCQlNaW5pbXVtIHRlbXBlcmF0dXJlIChSVykKLXRlbXAxX21heAkJTWF4aW11bSB0ZW1wZXJhdHVyZSAoUlcpCi10ZW1wMV9jcml0CQlDcml0aWNhbCBoaWdoIHRlbXBlcmF0dXJlIChSVykKK3RlbXAxX21pbgkJTWluaW11bSB0ZW1wZXJhdHVyZSAoUk8gb3IgUlcpCit0ZW1wMV9tYXgJCU1heGltdW0gdGVtcGVyYXR1cmUgKFJPIG9yIFJXKQordGVtcDFfY3JpdAkJQ3JpdGljYWwgaGlnaCB0ZW1wZXJhdHVyZSAoUk8gb3IgUlcpCiAKLXRlbXAxX2NyaXRfaHlzdAkJQ3JpdGljYWwgaHlzdGVyZXNpcyB0ZW1wZXJhdHVyZSAoUlcpCit0ZW1wMV9jcml0X2h5c3QJCUNyaXRpY2FsIGh5c3RlcmVzaXMgdGVtcGVyYXR1cmUgKFJPIG9yIFJXKQogdGVtcDFfbWF4X2h5c3QJCU1heGltdW0gaHlzdGVyZXNpcyB0ZW1wZXJhdHVyZSAoUk8pCiAKIHRlbXAxX21pbl9hbGFybQkJVGVtcGVyYXR1cmUgbG93IGFsYXJtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2sxMHRlbXAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2sxMHRlbXAKaW5kZXggNjUyNmVlZS4uZDJiNTZhNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9rMTB0ZW1wCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vazEwdGVtcApAQCAtOSw2ICs5LDggQEAKICAgU29ja2V0IFMxRzM6IEF0aGxvbiBJSSwgU2VtcHJvbiwgVHVyaW9uIElJCiAqIEFNRCBGYW1pbHkgMTFoIHByb2Nlc3NvcnM6CiAgIFNvY2tldCBTMUcyOiBBdGhsb24gKFgyKSwgU2VtcHJvbiAoWDIpLCBUdXJpb24gWDIgKFVsdHJhKQorKiBBTUQgRmFtaWx5IDEyaCBwcm9jZXNzb3JzOiAiTGxhbm8iCisqIEFNRCBGYW1pbHkgMTRoIHByb2Nlc3NvcnM6ICJCcmF6b3MiIChDL0UvRy1TZXJpZXMpCiAKICAgUHJlZml4OiAnazEwdGVtcCcKICAgQWRkcmVzc2VzIHNjYW5uZWQ6IFBDSSBzcGFjZQpAQCAtMTcsMTAgKzE5LDE0IEBACiAgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvMzExMTYucGRmCiAgIEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSAoQktERykgZm9yIEFNRCBGYW1pbHkgMTFoIFByb2Nlc3NvcnM6CiAgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDEyNTYucGRmCisgIEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSAoQktERykgZm9yIEFNRCBGYW1pbHkgMTRoIE1vZGVscyAwMGgtMEZoIFByb2Nlc3NvcnM6CisgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDMxNzAucGRmCiAgIFJldmlzaW9uIEd1aWRlIGZvciBBTUQgRmFtaWx5IDEwaCBQcm9jZXNzb3JzOgogICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQxMzIyLnBkZgogICBSZXZpc2lvbiBHdWlkZSBmb3IgQU1EIEZhbWlseSAxMWggUHJvY2Vzc29yczoKICAgICBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy80MTc4OC5wZGYKKyAgUmV2aXNpb24gR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTRoIE1vZGVscyAwMGgtMEZoIFByb2Nlc3NvcnM6CisgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDc1MzQucGRmCiAgIEFNRCBGYW1pbHkgMTFoIFByb2Nlc3NvciBQb3dlciBhbmQgVGhlcm1hbCBEYXRhIFNoZWV0IGZvciBOb3RlYm9va3M6CiAgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDMzNzMucGRmCiAgIEFNRCBGYW1pbHkgMTBoIFNlcnZlciBhbmQgV29ya3N0YXRpb24gUHJvY2Vzc29yIFBvd2VyIGFuZCBUaGVybWFsIERhdGEgU2hlZXQ6CkBAIC0zNCw3ICs0MCw3IEBACiAtLS0tLS0tLS0tLQogCiBUaGlzIGRyaXZlciBwZXJtaXRzIHJlYWRpbmcgb2YgdGhlIGludGVybmFsIHRlbXBlcmF0dXJlIHNlbnNvciBvZiBBTUQKLUZhbWlseSAxMGggYW5kIDExaCBwcm9jZXNzb3JzLgorRmFtaWx5IDEwaC8xMWgvMTJoLzE0aCBwcm9jZXNzb3JzLgogCiBBbGwgdGhlc2UgcHJvY2Vzc29ycyBoYXZlIGEgc2Vuc29yLCBidXQgb24gdGhvc2UgZm9yIFNvY2tldCBGIG9yIEFNMissCiB0aGUgc2Vuc29yIG1heSByZXR1cm4gaW5jb25zaXN0ZW50IHZhbHVlcyAoZXJyYXR1bSAzMTkpLiAgVGhlIGRyaXZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBiNzJlMDcxLi5mNGEwNGMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNDMsMTEgKzQzLDExIEBACiAJQVZSMzIJQVZSMzIgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCiAJQVgyNQlBcHByb3ByaWF0ZSBBWC4yNSBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJQkxBQ0tGSU4gQmxhY2tmaW4gYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCisJRFJNCURpcmVjdCBSZW5kZXJpbmcgTWFuYWdlbWVudCBzdXBwb3J0IGlzIGVuYWJsZWQuCisJRFlOQU1JQ19ERUJVRyBCdWlsZCBpbiBkZWJ1ZyBtZXNzYWdlcyBhbmQgZW5hYmxlIHRoZW0gYXQgcnVudGltZQogCUVERAlCSU9TIEVuaGFuY2VkIERpc2sgRHJpdmUgU2VydmljZXMgKEVERCkgaXMgZW5hYmxlZAogCUVGSQlFRkkgUGFydGl0aW9uaW5nIChHUFQpIGlzIGVuYWJsZWQKIAlFSURFCUVJREUvQVRBUEkgc3VwcG9ydCBpcyBlbmFibGVkLgotCURSTQlEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZW1lbnQgc3VwcG9ydCBpcyBlbmFibGVkLgotCURZTkFNSUNfREVCVUcgQnVpbGQgaW4gZGVidWcgbWVzc2FnZXMgYW5kIGVuYWJsZSB0aGVtIGF0IHJ1bnRpbWUKIAlGQglUaGUgZnJhbWUgYnVmZmVyIGRldmljZSBpcyBlbmFibGVkLgogCUdDT1YJR0NPViBwcm9maWxpbmcgaXMgZW5hYmxlZC4KIAlIVwlBcHByb3ByaWF0ZSBoYXJkd2FyZSBpcyBlbmFibGVkLgpAQCAtMTQ0LDYgKzE0NCwxMSBAQAogYW5kIGlzIGJldHdlZW4gMjU2IGFuZCA0MDk2IGNoYXJhY3RlcnMuIEl0IGlzIGRlZmluZWQgaW4gdGhlIGZpbGUKIC4vaW5jbHVkZS9hc20vc2V0dXAuaCBhcyBDT01NQU5EX0xJTkVfU0laRS4KIAorRmluYWxseSwgdGhlIFtLTUddIHN1ZmZpeCBpcyBjb21tb25seSBkZXNjcmliZWQgYWZ0ZXIgYSBudW1iZXIgb2Yga2VybmVsCitwYXJhbWV0ZXIgdmFsdWVzLiBUaGVzZSAnSycsICdNJywgYW5kICdHJyBsZXR0ZXJzIHJlcHJlc2VudCB0aGUgX2JpbmFyeV8KK211bHRpcGxpZXJzICdLaWxvJywgJ01lZ2EnLCBhbmQgJ0dpZ2EnLCBlcXVhbGxpbmcgMl4xMCwgMl4yMCwgYW5kIDJeMzAKK2J5dGVzIHJlc3BlY3RpdmVseS4gU3VjaCBsZXR0ZXIgc3VmZml4ZXMgY2FuIGFsc28gYmUgZW50aXJlbHkgb21pdHRlZC4KKwogCiAJYWNwaT0JCVtIVyxBQ1BJLFg4Nl0KIAkJCUFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZQpAQCAtNTQ1LDE2ICs1NTAsMjAgQEAKIAkJCUZvcm1hdDoKIAkJCTxmaXJzdF9zbG90Piw8bGFzdF9zbG90Piw8cG9ydD4sPGVudW1fYml0PlssPGRlYnVnPl0KIAotCWNyYXNoa2VybmVsPW5uW0tNR11Ac3NbS01HXQotCQkJW0tOTF0gUmVzZXJ2ZSBhIGNodW5rIG9mIHBoeXNpY2FsIG1lbW9yeSB0bwotCQkJaG9sZCBhIGtlcm5lbCB0byBzd2l0Y2ggdG8gd2l0aCBrZXhlYyBvbiBwYW5pYy4KKwljcmFzaGtlcm5lbD1zaXplW0tNR11bQG9mZnNldFtLTUddXQorCQkJW0tOTF0gVXNpbmcga2V4ZWMsIExpbnV4IGNhbiBzd2l0Y2ggdG8gYSAnY3Jhc2gga2VybmVsJworCQkJdXBvbiBwYW5pYy4gVGhpcyBwYXJhbWV0ZXIgcmVzZXJ2ZXMgdGhlIHBoeXNpY2FsCisJCQltZW1vcnkgcmVnaW9uIFtvZmZzZXQsIG9mZnNldCArIHNpemVdIGZvciB0aGF0IGtlcm5lbAorCQkJaW1hZ2UuIElmICdAb2Zmc2V0JyBpcyBvbWl0dGVkLCB0aGVuIGEgc3VpdGFibGUgb2Zmc2V0CisJCQlpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LiBDaGVjaworCQkJRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQgZm9yIGZ1cnRoZXIgZGV0YWlscy4KIAogCWNyYXNoa2VybmVsPXJhbmdlMTpzaXplMVsscmFuZ2UyOnNpemUyLC4uLl1bQG9mZnNldF0KIAkJCVtLTkxdIFNhbWUgYXMgYWJvdmUsIGJ1dCBkZXBlbmRzIG9uIHRoZSBtZW1vcnkKIAkJCWluIHRoZSBydW5uaW5nIHN5c3RlbS4gVGhlIHN5bnRheCBvZiByYW5nZSBpcwogCQkJc3RhcnQtW2VuZF0gd2hlcmUgc3RhcnQgYW5kIGVuZCBhcmUgYm90aAogCQkJYSBtZW1vcnkgdW5pdCAoYW1vdW50W0tNR10pLiBTZWUgYWxzbwotCQkJRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQgZm9yIGEgZXhhbXBsZS4KKwkJCURvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0IGZvciBhbiBleGFtcGxlLgogCiAJY3M4OXgwX2RtYT0JW0hXLE5FVF0KIAkJCUZvcm1hdDogPGRtYT4KQEAgLTEyNjIsMTAgKzEyNzEsOSBAQAogCQkJNiAoS0VSTl9JTkZPKQkJaW5mb3JtYXRpb25hbAogCQkJNyAoS0VSTl9ERUJVRykJCWRlYnVnLWxldmVsIG1lc3NhZ2VzCiAKLQlsb2dfYnVmX2xlbj1uCVNldHMgdGhlIHNpemUgb2YgdGhlIHByaW50ayByaW5nIGJ1ZmZlciwgaW4gYnl0ZXMuCi0JCQlGb3JtYXQ6IHsgbiB8IG5rIHwgbk0gfQotCQkJbiBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiAgVGhlIGRlZmF1bHQgc2l6ZQotCQkJaXMgc2V0IGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGUuCisJbG9nX2J1Zl9sZW49bltLTUddCVNldHMgdGhlIHNpemUgb2YgdGhlIHByaW50ayByaW5nIGJ1ZmZlciwKKwkJCWluIGJ5dGVzLiAgbiBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiAgVGhlIGRlZmF1bHQKKwkJCXNpemUgaXMgc2V0IGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGUuCiAKIAlsb2dvLm5vbG9nbwlbRkJdIERpc2FibGVzIGRpc3BsYXkgb2YgdGhlIGJ1aWx0LWluIExpbnV4IGxvZ28uCiAJCQlUaGlzIG1heSBiZSB1c2VkIHRvIHByb3ZpZGUgbW9yZSBzY3JlZW4gc3BhY2UgZm9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVgKaW5kZXggZmU1YzA5OS4uNGVkZDc4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWApAQCAtNDAsOCArNDAsNiBAQAogCS0gaW5mbyBvbiB1c2luZyB0aGUgREVDbmV0IG5ldHdvcmtpbmcgbGF5ZXIgaW4gTGludXguCiBkZXBjYS50eHQKIAktIHRoZSBEaWdpdGFsIERFUENBL0V0aGVyV09SS1MgREUxPz8gYW5kIERFMj8/IExBTkNFIEV0aGVybmV0IGRyaXZlcgotZGdycy50eHQKLQktIHRoZSBEaWdpIEludGVybmF0aW9uYWwgUmlnaHRTd2l0Y2ggU0UtWCBFdGhlcm5ldCBkcml2ZXIKIGRtZmUudHh0CiAJLSBpbmZvIG9uIHRoZSBEYXZpY29tIERNOTEwMihBKS9ETTkxMzIvRE05ODAxIGZhc3QgZXRoZXJuZXQgZHJpdmVyLgogZTEwMC50eHQKQEAgLTUwLDggKzQ4LDYgQEAKIAktIGluZm8gb24gSW50ZWwncyBFMTAwMCBsaW5lIG9mIGdpZ2FiaXQgZXRoZXJuZXQgYm9hcmRzCiBlcWwudHh0CiAJLSBzZXJpYWwgSVAgbG9hZCBiYWxhbmNpbmcKLWV0aGVydGFwLnR4dAotCS0gdGhlIEV0aGVydGFwIHVzZXIgc3BhY2UgcGFja2V0IHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uIGRyaXZlcgogZXdyazMudHh0CiAJLSB0aGUgRGlnaXRhbCBFdGhlcldPUktTIDMgREUyMDMvNC81IEV0aGVybmV0IGRyaXZlcgogZmlsdGVyLnR4dApAQCAtMTA0LDggKzEwMCw2IEBACiAJLSBUVU4vVEFQIGRldmljZSBkcml2ZXIsIGFsbG93aW5nIHVzZXIgc3BhY2UgUngvVHggb2YgcGFja2V0cy4KIHZvcnRleC50eHQKIAktIGluZm8gb24gdXNpbmcgM0NvbSBWb3J0ZXggKDNjNTkwLCAzYzU5MiwgM2M1OTUsIDNjNTk3KSBFdGhlcm5ldCBjYXJkcy4KLXdhdmVsYW4udHh0Ci0JLSBBVCZUIEdJUyAobmVlIE5DUikgV2F2ZUxBTiBjYXJkOiBBbiBFdGhlcm5ldC1saWtlIHJhZGlvIHRyYW5zY2VpdmVyCiB4MjUudHh0CiAJLSBnZW5lcmFsIGluZm8gb24gWC4yNSBkZXZlbG9wbWVudC4KIHgyNS1pZmFjZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9NYWtlZmlsZQppbmRleCA1YWJhN2EzLi4yNGMzMDhkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL01ha2VmaWxlCkBAIC00LDYgKzQsOCBAQAogIyBMaXN0IG9mIHByb2dyYW1zIHRvIGJ1aWxkCiBob3N0cHJvZ3MteSA6PSBpZmVuc2xhdmUKIAorSE9TVENGTEFHU19pZmVuc2xhdmUubyArPSAtSSQob2JqdHJlZSkvdXNyL2luY2x1ZGUKKwogIyBUZWxsIGtidWlsZCB0byBhbHdheXMgYnVpbGQgdGhlIHByb2dyYW1zCiBhbHdheXMgOj0gJChob3N0cHJvZ3MteSkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CmluZGV4IDVkYzYzODcuLjI1ZDJmNDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKQEAgLTQ5LDcgKzQ5LDggQEAKIDMuMwlDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5IHdpdGggSWZlbnNsYXZlCiAzLjMuMQkJQ29uZmlndXJpbmcgTXVsdGlwbGUgQm9uZHMgTWFudWFsbHkKIDMuNAlDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5IHZpYSBTeXNmcwotMy41CU92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcworMy41CUNvbmZpZ3VyYXRpb24gd2l0aCBJbnRlcmZhY2VzIFN1cHBvcnQKKzMuNglPdmVycmlkaW5nIENvbmZpZ3VyYXRpb24gZm9yIFNwZWNpYWwgQ2FzZXMKIAogNC4gUXVlcnlpbmcgQm9uZGluZyBDb25maWd1cmF0aW9uCiA0LjEJQm9uZGluZyBDb25maWd1cmF0aW9uCkBAIC0xNjEsOCArMTYyLDggQEAKIGRlZmF1bHQga2VybmVsIHNvdXJjZSBpbmNsdWRlIGRpcmVjdG9yeS4KIAogU0VDT05EIElNUE9SVEFOVCBOT1RFOgotCUlmIHlvdSBwbGFuIHRvIGNvbmZpZ3VyZSBib25kaW5nIHVzaW5nIHN5c2ZzLCB5b3UgZG8gbm90IG5lZWQKLXRvIHVzZSBpZmVuc2xhdmUuCisJSWYgeW91IHBsYW4gdG8gY29uZmlndXJlIGJvbmRpbmcgdXNpbmcgc3lzZnMgb3IgdXNpbmcgdGhlCisvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyBmaWxlLCB5b3UgZG8gbm90IG5lZWQgdG8gdXNlIGlmZW5zbGF2ZS4KIAogMi4gQm9uZGluZyBEcml2ZXIgT3B0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzc5LDIyICs3ODAsMjYgQEAKIAogCVlvdSBjYW4gY29uZmlndXJlIGJvbmRpbmcgdXNpbmcgZWl0aGVyIHlvdXIgZGlzdHJvJ3MgbmV0d29yawogaW5pdGlhbGl6YXRpb24gc2NyaXB0cywgb3IgbWFudWFsbHkgdXNpbmcgZWl0aGVyIGlmZW5zbGF2ZSBvciB0aGUKLXN5c2ZzIGludGVyZmFjZS4gIERpc3Ryb3MgZ2VuZXJhbGx5IHVzZSBvbmUgb2YgdHdvIHBhY2thZ2VzIGZvciB0aGUKLW5ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0czogaW5pdHNjcmlwdHMgb3Igc3lzY29uZmlnLiAgUmVjZW50Ci12ZXJzaW9ucyBvZiB0aGVzZSBwYWNrYWdlcyBoYXZlIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHdoaWxlIG9sZGVyCitzeXNmcyBpbnRlcmZhY2UuICBEaXN0cm9zIGdlbmVyYWxseSB1c2Ugb25lIG9mIHRocmVlIHBhY2thZ2VzIGZvciB0aGUKK25ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0czogaW5pdHNjcmlwdHMsIHN5c2NvbmZpZyBvciBpbnRlcmZhY2VzLgorUmVjZW50IHZlcnNpb25zIG9mIHRoZXNlIHBhY2thZ2VzIGhhdmUgc3VwcG9ydCBmb3IgYm9uZGluZywgd2hpbGUgb2xkZXIKIHZlcnNpb25zIGRvIG5vdC4KIAogCVdlIHdpbGwgZmlyc3QgZGVzY3JpYmUgdGhlIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGJvbmRpbmcgZm9yCi1kaXN0cm9zIHVzaW5nIHZlcnNpb25zIG9mIGluaXRzY3JpcHRzIGFuZCBzeXNjb25maWcgd2l0aCBmdWxsIG9yCi1wYXJ0aWFsIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHRoZW4gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBlbmFibGluZworZGlzdHJvcyB1c2luZyB2ZXJzaW9ucyBvZiBpbml0c2NyaXB0cywgc3lzY29uZmlnIGFuZCBpbnRlcmZhY2VzIHdpdGggZnVsbAorb3IgcGFydGlhbCBzdXBwb3J0IGZvciBib25kaW5nLCB0aGVuIHByb3ZpZGUgaW5mb3JtYXRpb24gb24gZW5hYmxpbmcKIGJvbmRpbmcgd2l0aG91dCBzdXBwb3J0IGZyb20gdGhlIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0cyAoaS5lLiwKIG9sZGVyIHZlcnNpb25zIG9mIGluaXRzY3JpcHRzIG9yIHN5c2NvbmZpZykuCiAKLQlJZiB5b3UncmUgdW5zdXJlIHdoZXRoZXIgeW91ciBkaXN0cm8gdXNlcyBzeXNjb25maWcgb3IKLWluaXRzY3JpcHRzLCBvciBkb24ndCBrbm93IGlmIGl0J3MgbmV3IGVub3VnaCwgaGF2ZSBubyBmZWFyLgorCUlmIHlvdSdyZSB1bnN1cmUgd2hldGhlciB5b3VyIGRpc3RybyB1c2VzIHN5c2NvbmZpZywKK2luaXRzY3JpcHRzIG9yIGludGVyZmFjZXMsIG9yIGRvbid0IGtub3cgaWYgaXQncyBuZXcgZW5vdWdoLCBoYXZlIG5vIGZlYXIuCiBEZXRlcm1pbmluZyB0aGlzIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmQuCiAKLQlGaXJzdCwgaXNzdWUgdGhlIGNvbW1hbmQ6CisJRmlyc3QsIGxvb2sgZm9yIGEgZmlsZSBjYWxsZWQgaW50ZXJmYWNlcyBpbiAvZXRjL25ldHdvcmsgZGlyZWN0b3J5LgorSWYgdGhpcyBmaWxlIGlzIHByZXNlbnQgaW4geW91ciBzeXN0ZW0sIHRoZW4geW91ciBzeXN0ZW0gdXNlIGludGVyZmFjZXMuIFNlZQorQ29uZmlndXJhdGlvbiB3aXRoIEludGVyZmFjZXMgU3VwcG9ydC4KKworCUVsc2UsIGlzc3VlIHRoZSBjb21tYW5kOgogCiAkIHJwbSAtcWYgL3NiaW4vaWZ1cAogCkBAIC0xMzI3LDggKzEzMzIsNjIgQEAKIGVjaG8gK2V0aDIgPiAvc3lzL2NsYXNzL25ldC9ib25kMS9ib25kaW5nL3NsYXZlcwogZWNobyArZXRoMyA+IC9zeXMvY2xhc3MvbmV0L2JvbmQxL2JvbmRpbmcvc2xhdmVzCiAKLTMuNSBPdmVycmlkaW5nIENvbmZpZ3VyYXRpb24gZm9yIFNwZWNpYWwgQ2FzZXMKKzMuNSBDb25maWd1cmF0aW9uIHdpdGggSW50ZXJmYWNlcyBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFRoaXMgc2VjdGlvbiBhcHBsaWVzIHRvIGRpc3Ryb3Mgd2hpY2ggdXNlIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIGZpbGUKK3RvIGRlc2NyaWJlIG5ldHdvcmsgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24sIG1vc3Qgbm90YWJseSBEZWJpYW4gYW5kIGl0J3MKK2Rlcml2YXRpdmVzLgorCisJVGhlIGlmdXAgYW5kIGlmZG93biBjb21tYW5kcyBvbiBEZWJpYW4gZG9uJ3Qgc3VwcG9ydCBib25kaW5nIG91dCBvZgordGhlIGJveC4gVGhlIGlmZW5zbGF2ZS0yLjYgcGFja2FnZSBzaG91bGQgYmUgaW5zdGFsbGVkIHRvIHByb3ZpZGUgYm9uZGluZworc3VwcG9ydC4gIE9uY2UgaW5zdGFsbGVkLCB0aGlzIHBhY2thZ2Ugd2lsbCBwcm92aWRlIGJvbmQtKiBvcHRpb25zIHRvIGJlIHVzZWQKK2ludG8gL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMuCisKKwlOb3RlIHRoYXQgaWZlbnNsYXZlLTIuNiBwYWNrYWdlIHdpbGwgbG9hZCB0aGUgYm9uZGluZyBtb2R1bGUgYW5kIHVzZQordGhlIGlmZW5zbGF2ZSBjb21tYW5kIHdoZW4gYXBwcm9wcmlhdGUuCisKK0V4YW1wbGUgQ29uZmlndXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMsIHRoZSBmb2xsb3dpbmcgc3RhbnphIHdpbGwgY29uZmlndXJlIGJvbmQwLCBpbgorYWN0aXZlLWJhY2t1cCBtb2RlLCB3aXRoIGV0aDAgYW5kIGV0aDEgYXMgc2xhdmVzLgorCithdXRvIGJvbmQwCitpZmFjZSBib25kMCBpbmV0IGRoY3AKKwlib25kLXNsYXZlcyBldGgwIGV0aDEKKwlib25kLW1vZGUgYWN0aXZlLWJhY2t1cAorCWJvbmQtbWlpbW9uIDEwMAorCWJvbmQtcHJpbWFyeSBldGgwIGV0aDEKKworSWYgdGhlIGFib3ZlIGNvbmZpZ3VyYXRpb24gZG9lc24ndCB3b3JrLCB5b3UgbWlnaHQgaGF2ZSBhIHN5c3RlbSB1c2luZwordXBzdGFydCBmb3Igc3lzdGVtIHN0YXJ0dXAuIFRoaXMgaXMgbW9zdCBub3RhYmx5IHRydWUgZm9yIHJlY2VudAorVWJ1bnR1IHZlcnNpb25zLiBUaGUgZm9sbG93aW5nIHN0YW56YSBpbiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyB3aWxsCitwcm9kdWNlIHRoZSBzYW1lIHJlc3VsdCBvbiB0aG9zZSBzeXN0ZW1zLgorCithdXRvIGJvbmQwCitpZmFjZSBib25kMCBpbmV0IGRoY3AKKwlib25kLXNsYXZlcyBub25lCisJYm9uZC1tb2RlIGFjdGl2ZS1iYWNrdXAKKwlib25kLW1paW1vbiAxMDAKKworYXV0byBldGgwCitpZmFjZSBldGgwIGluZXQgbWFudWFsCisJYm9uZC1tYXN0ZXIgYm9uZDAKKwlib25kLXByaW1hcnkgZXRoMCBldGgxCisKK2F1dG8gZXRoMQoraWZhY2UgZXRoMSBpbmV0IG1hbnVhbAorCWJvbmQtbWFzdGVyIGJvbmQwCisJYm9uZC1wcmltYXJ5IGV0aDAgZXRoMQorCitGb3IgYSBmdWxsIGxpc3Qgb2YgYm9uZC0qIHN1cHBvcnRlZCBvcHRpb25zIGluIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIGFuZCBzb21lCittb3JlIGFkdmFuY2VkIGV4YW1wbGVzIHRhaWxvcmVkIHRvIHlvdSBwYXJ0aWN1bGFyIGRpc3Ryb3MsIHNlZSB0aGUgZmlsZXMgaW4KKy91c3Ivc2hhcmUvZG9jL2lmZW5zbGF2ZS0yLjYuCisKKzMuNiBPdmVycmlkaW5nIENvbmZpZ3VyYXRpb24gZm9yIFNwZWNpYWwgQ2FzZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hlbiB1c2luZyB0aGUgYm9uZGluZyBkcml2ZXIsIHRoZSBwaHlzaWNhbCBwb3J0IHdoaWNoIHRyYW5zbWl0cyBhIGZyYW1lIGlzCiB0eXBpY2FsbHkgc2VsZWN0ZWQgYnkgdGhlIGJvbmRpbmcgZHJpdmVyLCBhbmQgaXMgbm90IHJlbGV2YW50IHRvIHRoZSB1c2VyIG9yCiBzeXN0ZW0gYWRtaW5pc3RyYXRvci4gIFRoZSBvdXRwdXQgcG9ydCBpcyBzaW1wbHkgc2VsZWN0ZWQgdXNpbmcgdGhlIHBvbGljaWVzIG9mCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZG5zX3Jlc29sdmVyLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbnNfcmVzb2x2ZXIudHh0CmluZGV4IGFlZmQxZTYuLjA0Y2EwNjMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZG5zX3Jlc29sdmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZG5zX3Jlc29sdmVyLnR4dApAQCAtNjEsNyArNjEsNiBAQAogCWNyZWF0ZQlkbnNfcmVzb2x2ZXIgIAlmb286KgkqCS91c3Ivc2Jpbi9kbnMuZm9vICVrCiAKIAotCiA9PT09PQogVVNBR0UKID09PT09CkBAIC0xMDQsNiArMTAzLDE0IEBACiAgICAgIHJldHVybmVkIGFsc28uCiAKIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUkVBRElORyBETlMgS0VZUyBGUk9NIFVTRVJTUEFDRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitLZXlzIG9mIGRuc19yZXNvbHZlciB0eXBlIGNhbiBiZSByZWFkIGZyb20gdXNlcnNwYWNlIHVzaW5nIGtleWN0bF9yZWFkKCkgb3IKKyJrZXljdGwgcmVhZC9wcmludC9waXBlIi4KKworCiA9PT09PT09PT0KIE1FQ0hBTklTTQogPT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IGQ5OTk0MGQuLmFjM2I0YTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC0xODcsNyArMTg3LDcgQEAKIHRjcF9kc2FjayAtIEJPT0xFQU4KIAlBbGxvd3MgVENQIHRvIHNlbmQgImR1cGxpY2F0ZSIgU0FDS3MuCiAKLXRjcF9lY24gLSBCT09MRUFOCit0Y3BfZWNuIC0gSU5URUdFUgogCUVuYWJsZSBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbiAoRUNOKSBpbiBUQ1AuIEVDTiBpcyBvbmx5CiAJdXNlZCB3aGVuIGJvdGggZW5kcyBvZiB0aGUgVENQIGZsb3cgc3VwcG9ydCBpdC4gSXQgaXMgdXNlZnVsIHRvCiAJYXZvaWQgbG9zc2VzIGR1ZSB0byBjb25nZXN0aW9uICh3aGVuIHRoZSBib3R0bGVuZWNrIHJvdXRlciBzdXBwb3J0cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtc3RhdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtc3RhdHMudHh0CmluZGV4IDAxZTY5NDAuLjFjZDVkNTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXN0YXRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1zdGF0cy50eHQKQEAgLTEsMyArMSw3IEBACitWZXJzaW9uIDE1IG9mIHNjaGVkc3RhdHMgZHJvcHBlZCBjb3VudGVycyBmb3Igc29tZSBzY2hlZF95aWVsZDoKK3lsZF9leHBfZW1wdHksIHlsZF9hY3RfZW1wdHkgYW5kIHlsZF9ib3RoX2VtcHR5LiBPdGhlcndpc2UsIGl0IGlzCitpZGVudGljYWwgdG8gdmVyc2lvbiAxNC4KKwogVmVyc2lvbiAxNCBvZiBzY2hlZHN0YXRzIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHNjaGVkX2RvbWFpbnMsIHdoaWNoIGhpdCB0aGUKIG1haW5saW5lIGtlcm5lbCBpbiAyLjYuMjAgYWx0aG91Z2ggaXQgaXMgaWRlbnRpY2FsIHRvIHRoZSBzdGF0cyBmcm9tIHZlcnNpb24KIDEyIHdoaWNoIHdhcyBpbiB0aGUga2VybmVsIGZyb20gMi42LjEzLTIuNi4xOSAodmVyc2lvbiAxMyBuZXZlciBzYXcgYSBrZXJuZWwKQEAgLTI4LDMyICszMiwyNSBAQAogCiBDUFUgc3RhdGlzdGljcwogLS0tLS0tLS0tLS0tLS0KLWNwdTxOPiAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMgorY3B1PE4+IDEgMiAzIDQgNSA2IDcgOCA5CiAKLU5PVEU6IEluIHRoZSBzY2hlZF95aWVsZCgpIHN0YXRpc3RpY3MsIHRoZSBhY3RpdmUgcXVldWUgaXMgY29uc2lkZXJlZCBlbXB0eQotICAgIGlmIGl0IGhhcyBvbmx5IG9uZSBwcm9jZXNzIGluIGl0LCBzaW5jZSBvYnZpb3VzbHkgdGhlIHByb2Nlc3MgY2FsbGluZwotICAgIHNjaGVkX3lpZWxkKCkgaXMgdGhhdCBwcm9jZXNzLgotCi1GaXJzdCBmb3VyIGZpZWxkcyBhcmUgc2NoZWRfeWllbGQoKSBzdGF0aXN0aWNzOgotICAgICAxKSAjIG9mIHRpbWVzIGJvdGggdGhlIGFjdGl2ZSBhbmQgdGhlIGV4cGlyZWQgcXVldWUgd2VyZSBlbXB0eQotICAgICAyKSAjIG9mIHRpbWVzIGp1c3QgdGhlIGFjdGl2ZSBxdWV1ZSB3YXMgZW1wdHkKLSAgICAgMykgIyBvZiB0aW1lcyBqdXN0IHRoZSBleHBpcmVkIHF1ZXVlIHdhcyBlbXB0eQotICAgICA0KSAjIG9mIHRpbWVzIHNjaGVkX3lpZWxkKCkgd2FzIGNhbGxlZAorRmlyc3QgZmllbGQgaXMgYSBzY2hlZF95aWVsZCgpIHN0YXRpc3RpYzoKKyAgICAgMSkgIyBvZiB0aW1lcyBzY2hlZF95aWVsZCgpIHdhcyBjYWxsZWQKIAogTmV4dCB0aHJlZSBhcmUgc2NoZWR1bGUoKSBzdGF0aXN0aWNzOgotICAgICA1KSAjIG9mIHRpbWVzIHdlIHN3aXRjaGVkIHRvIHRoZSBleHBpcmVkIHF1ZXVlIGFuZCByZXVzZWQgaXQKLSAgICAgNikgIyBvZiB0aW1lcyBzY2hlZHVsZSgpIHdhcyBjYWxsZWQKLSAgICAgNykgIyBvZiB0aW1lcyBzY2hlZHVsZSgpIGxlZnQgdGhlIHByb2Nlc3NvciBpZGxlCisgICAgIDIpICMgb2YgdGltZXMgd2Ugc3dpdGNoZWQgdG8gdGhlIGV4cGlyZWQgcXVldWUgYW5kIHJldXNlZCBpdAorICAgICAzKSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgd2FzIGNhbGxlZAorICAgICA0KSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgbGVmdCB0aGUgcHJvY2Vzc29yIGlkbGUKIAogTmV4dCB0d28gYXJlIHRyeV90b193YWtlX3VwKCkgc3RhdGlzdGljczoKLSAgICAgOCkgIyBvZiB0aW1lcyB0cnlfdG9fd2FrZV91cCgpIHdhcyBjYWxsZWQKLSAgICAgOSkgIyBvZiB0aW1lcyB0cnlfdG9fd2FrZV91cCgpIHdhcyBjYWxsZWQgdG8gd2FrZSB1cCB0aGUgbG9jYWwgY3B1CisgICAgIDUpICMgb2YgdGltZXMgdHJ5X3RvX3dha2VfdXAoKSB3YXMgY2FsbGVkCisgICAgIDYpICMgb2YgdGltZXMgdHJ5X3RvX3dha2VfdXAoKSB3YXMgY2FsbGVkIHRvIHdha2UgdXAgdGhlIGxvY2FsIGNwdQogCiBOZXh0IHRocmVlIGFyZSBzdGF0aXN0aWNzIGRlc2NyaWJpbmcgc2NoZWR1bGluZyBsYXRlbmN5OgotICAgIDEwKSBzdW0gb2YgYWxsIHRpbWUgc3BlbnQgcnVubmluZyBieSB0YXNrcyBvbiB0aGlzIHByb2Nlc3NvciAoaW4gamlmZmllcykKLSAgICAxMSkgc3VtIG9mIGFsbCB0aW1lIHNwZW50IHdhaXRpbmcgdG8gcnVuIGJ5IHRhc2tzIG9uIHRoaXMgcHJvY2Vzc29yIChpbgorICAgICA3KSBzdW0gb2YgYWxsIHRpbWUgc3BlbnQgcnVubmluZyBieSB0YXNrcyBvbiB0aGlzIHByb2Nlc3NvciAoaW4gamlmZmllcykKKyAgICAgOCkgc3VtIG9mIGFsbCB0aW1lIHNwZW50IHdhaXRpbmcgdG8gcnVuIGJ5IHRhc2tzIG9uIHRoaXMgcHJvY2Vzc29yIChpbgogICAgICAgICBqaWZmaWVzKQotICAgIDEyKSAjIG9mIHRpbWVzbGljZXMgcnVuIG9uIHRoaXMgY3B1CisgICAgIDkpICMgb2YgdGltZXNsaWNlcyBydW4gb24gdGhpcyBjcHUKIAogCiBEb21haW4gc3RhdGlzdGljcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAppbmRleCAxNmFlNDMwLi4wY2FmNzdlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dApAQCAtMjk2LDYgKzI5Niw3IEBACiA9PT09PT09PT09PT09CiAgIGxhcHRvcAlCYXNpYyBMYXB0b3AgY29uZmlnIChkZWZhdWx0KQogICBocC1sYXB0b3AJSFAgbGFwdG9wcywgZSBnIEc2MAorICBhc3VzCQlBc3VzIEs1MkpVLCBMZW5vdm8gRzU2MAogICBkZWxsLWxhcHRvcAlEZWxsIGxhcHRvcHMKICAgZGVsbC12b3N0cm8JRGVsbCBWb3N0cm8KICAgb2xwYy14by0xXzUJT0xQQyBYTyAxLjUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd29ya3F1ZXVlLnR4dCBiL0RvY3VtZW50YXRpb24vd29ya3F1ZXVlLnR4dAppbmRleCA5OTZhMjdkLi4wMWM1MTNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3dvcmtxdWV1ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi93b3JrcXVldWUudHh0CkBAIC0xOTAsOSArMTkwLDkgQEAKIAkqIExvbmcgcnVubmluZyBDUFUgaW50ZW5zaXZlIHdvcmtsb2FkcyB3aGljaCBjYW4gYmUgYmV0dGVyCiAJICBtYW5hZ2VkIGJ5IHRoZSBzeXN0ZW0gc2NoZWR1bGVyLgogCi0gIFdRX0ZSRUVaRUFCTEUKKyAgV1FfRlJFRVpBQkxFCiAKLQlBIGZyZWV6ZWFibGUgd3EgcGFydGljaXBhdGVzIGluIHRoZSBmcmVlemUgcGhhc2Ugb2YgdGhlIHN5c3RlbQorCUEgZnJlZXphYmxlIHdxIHBhcnRpY2lwYXRlcyBpbiB0aGUgZnJlZXplIHBoYXNlIG9mIHRoZSBzeXN0ZW0KIAlzdXNwZW5kIG9wZXJhdGlvbnMuICBXb3JrIGl0ZW1zIG9uIHRoZSB3cSBhcmUgZHJhaW5lZCBhbmQgbm8KIAluZXcgd29yayBpdGVtIHN0YXJ0cyBleGVjdXRpb24gdW50aWwgdGhhd2VkLgogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDU1NTkyZjguLjU2MGVjY2UgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC04ODUsNyArODg1LDcgQEAKIAogQVJNL1FVQUxDT01NIE1TTSBNQUNISU5FIFNVUFBPUlQKIE06CURhdmlkIEJyb3duIDxkYXZpZGJAY29kZWF1cm9yYS5vcmc+Ci1NOglEYW5pZWwgV2Fsa2VyIDxkd2Fsa2VyQGNvZGVhdXJvcmEub3JnPgorTToJRGFuaWVsIFdhbGtlciA8ZHdhbGtlckBmaWZvOTkuY29tPgogTToJQnJ5YW4gSHVudHNtYW4gPGJyeWFuaEBjb2RlYXVyb3JhLm9yZz4KIEw6CWxpbnV4LWFybS1tc21Admdlci5rZXJuZWwub3JnCiBGOglhcmNoL2FybS9tYWNoLW1zbS8KQEAgLTk3OCw2ICs5NzgsOCBAQAogRjoJYXJjaC9hcm0vcGxhdC1zYW1zdW5nLwogRjoJYXJjaC9hcm0vcGxhdC1zM2MyNHh4LwogRjoJYXJjaC9hcm0vcGxhdC1zNXAvCitGOglkcml2ZXJzLyovKnMzYzI0MTAqCitGOglkcml2ZXJzLyovKi8qczNjMjQxMCoKIAogQVJNL1MzQzI0MTAgQVJNIEFSQ0hJVEVDVFVSRQogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgpAQCAtMTAwOCw2ICsxMDEwLDE1IEBACiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLXM1cCovCiAKK0FSTS9TQU1TVU5HIE1PQklMRSBNQUNISU5FIFNVUFBPUlQKK006CUt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtYXF1aWxhLmMKK0Y6CWFyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWdvbmkuYworRjoJYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtdW5pdmVyc2FsX2MyMTAuYworRjoJYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtbnVyaS5jCisKIEFSTS9TQU1TVU5HIFM1UCBTRVJJRVMgRklNQyBTVVBQT1JUCiBNOglLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgogTToJU3lsd2VzdGVyIE5hd3JvY2tpIDxzLm5hd3JvY2tpQHNhbXN1bmcuY29tPgpAQCAtMTQ2NSw2ICsxNDc2LDcgQEAKIAogQk9ORElORyBEUklWRVIKIE06CUpheSBWb3NidXJnaCA8ZnViYXJAdXMuaWJtLmNvbT4KK006CUFuZHkgR29zcG9kYXJlayA8YW5keUBncmV5aG91c2UubmV0PgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ib25kaW5nLwogUzoJU3VwcG9ydGVkCkBAIC0xNjkwLDYgKzE3MDIsMTMgQEAKIFM6CVN1cHBvcnRlZAogRjoJc2NyaXB0cy9jaGVja3BhdGNoLnBsCiAKK0NISU5FU0UgRE9DVU1FTlRBVElPTgorTToJSGFycnkgV2VpIDxoYXJyeXhpeW91QGdtYWlsLmNvbT4KK0w6CXhpeW91bGludXhrZXJuZWxncm91cEBnb29nbGVncm91cHMuY29tCitMOglsaW51eC1rZXJuZWxAemgta2VybmVsLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL3poX0NOLworCiBDSVNDTyBWSUMgRVRIRVJORVQgTklDIERSSVZFUgogTToJVmFzYW50aHkgS29sbHVyaSA8dmtvbGx1cmlAY2lzY28uY29tPgogTToJUm9vcGEgUHJhYmh1IDxyb3ByYWJodUBjaXNjby5jb20+CkBAIC0yMDI0LDcgKzIwNDMsNyBAQAogRjoJZHJpdmVycy9zY3NpL2RjMzk1eC4qCiAKIERDQ1AgUFJPVE9DT0wKLU06CUFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBnaG9zdHByb3RvY29scy5uZXQ+CitNOglHZXJyaXQgUmVua2VyIDxnZXJyaXRAZXJnLmFiZG4uYWMudWs+CiBMOglkY2NwQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9kY2NwCiBTOglNYWludGFpbmVkCkBAIC0yMTI0LDYgKzIxNDMsNyBAQAogRjoJZnMvZGxtLwogCiBETUEgR0VORVJJQyBPRkZMT0FEIEVOR0lORSBTVUJTWVNURU0KK006CVZpbm9kIEtvdWwgPHZpbm9kLmtvdWxAaW50ZWwuY29tPgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvZG1hLwpAQCAtMjc3Miw2ICsyNzkyLDE1IEBACiBGOglkcml2ZXJzL2lzZG4vZ2lnYXNldC8KIEY6CWluY2x1ZGUvbGludXgvZ2lnYXNldF9kZXYuaAogCitHUElPIFNVQlNZU1RFTQorTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgorTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorVDoJZ2l0IGdpdDovL2dpdC5zZWNyZXRsYWIuY2EvZ2l0L2xpbnV4LTIuNi5naXQKK0Y6CURvY3VtZW50YXRpb24vZ3Bpby9ncGlvLnR4dAorRjoJZHJpdmVycy9ncGlvLworRjoJaW5jbHVkZS9saW51eC9ncGlvKgorCiBHUkVUSCAxMC8xMDAvMUcgRXRoZXJuZXQgTUFDIGRldmljZSBkcml2ZXIKIE06CUtyaXN0b2ZmZXIgR2xlbWJvIDxrcmlzdG9mZmVyQGdhaXNsZXIuY29tPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpAQCAtMjg2MSw3ICsyODkwLDYgQEAKIEw6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKIFc6CWh0dHA6Ly93d3cubG0tc2Vuc29ycy5vcmcvCiBUOglxdWlsdCBrZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2pkZWx2YXJlL2xpbnV4LTIuNi9qZGVsdmFyZS1od21vbi8KLVQ6CXF1aWx0IGtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvZ3JvZWNrL2xpbnV4LXN0YWdpbmcvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2dyb2Vjay9saW51eC1zdGFnaW5nLmdpdAogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9od21vbi8KQEAgLTMxMzksNiArMzE2NywxMiBAQAogRjoJbmV0L2llZWU4MDIxNTQvCiBGOglkcml2ZXJzL2llZWU4MDIxNTQvCiAKK0lLQU5PUy9BREkgRUFHTEUgQURTTCBVU0IgRFJJVkVSCitNOglNYXR0aGlldSBDYXN0ZXQgPGNhc3RldC5tYXR0aGlldUBmcmVlLmZyPgorTToJU3RhbmlzbGF3IEdydXN6a2EgPHN0Zl94bEB3cC5wbD4KK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKKwogSU5URUdSSVRZIE1FQVNVUkVNRU5UIEFSQ0hJVEVDVFVSRSAoSU1BKQogTToJTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KIFM6CVN1cHBvcnRlZApAQCAtMzMyNyw3ICszMzYxLDYgQEAKIEY6CWluY2x1ZGUvbGludXgvd2ltYXgvaTI0MDBtLmgKIAogSU5URUwgV0lSRUxFU1MgV0lGSSBMSU5LIChpd2x3aWZpKQotTToJUmVpbmV0dGUgQ2hhdHJlIDxyZWluZXR0ZS5jaGF0cmVAaW50ZWwuY29tPgogTToJV2V5LVlpIEd1eSA8d2V5LXlpLncuZ3V5QGludGVsLmNvbT4KIE06CUludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCkBAIC0zNDk2LDcgKzM1MjksNyBAQAogRjoJRG9jdW1lbnRhdGlvbi9od21vbi9qYzQyCiAKIEpGUyBGSUxFU1lTVEVNCi1NOglEYXZlIEtsZWlrYW1wIDxzaGFnZ3lAbGludXgudm5ldC5pYm0uY29tPgorTToJRGF2ZSBLbGVpa2FtcCA8c2hhZ2d5QGtlcm5lbC5vcmc+CiBMOglqZnMtZGlzY3Vzc2lvbkBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFc6CWh0dHA6Ly9qZnMuc291cmNlZm9yZ2UubmV0LwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9zaGFnZ3kvamZzLTIuNi5naXQKQEAgLTM2NzQsNiArMzcwNywyOCBAQAogRjoJaW5jbHVkZS9rZXlzLwogRjoJc2VjdXJpdHkva2V5cy8KIAorS0VZUy1UUlVTVEVECitNOglEYXZpZCBTYWZmb3JkIDxzYWZmb3JkQHdhdHNvbi5pYm0uY29tPgorTToJTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KK0w6CWxpbnV4LXNlY3VyaXR5LW1vZHVsZUB2Z2VyLmtlcm5lbC5vcmcKK0w6CWtleXJpbmdzQGxpbnV4LW5mcy5vcmcKK1M6CVN1cHBvcnRlZAorRjoJRG9jdW1lbnRhdGlvbi9rZXlzLXRydXN0ZWQtZW5jcnlwdGVkLnR4dAorRjoJaW5jbHVkZS9rZXlzL3RydXN0ZWQtdHlwZS5oCitGOglzZWN1cml0eS9rZXlzL3RydXN0ZWQuYworRjoJc2VjdXJpdHkva2V5cy90cnVzdGVkLmgKKworS0VZUy1FTkNSWVBURUQKK006CU1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CitNOglEYXZpZCBTYWZmb3JkIDxzYWZmb3JkQHdhdHNvbi5pYm0uY29tPgorTDoJbGludXgtc2VjdXJpdHktbW9kdWxlQHZnZXIua2VybmVsLm9yZworTDoJa2V5cmluZ3NAbGludXgtbmZzLm9yZworUzoJU3VwcG9ydGVkCitGOglEb2N1bWVudGF0aW9uL2tleXMtdHJ1c3RlZC1lbmNyeXB0ZWQudHh0CitGOglpbmNsdWRlL2tleXMvZW5jcnlwdGVkLXR5cGUuaAorRjoJc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuYworRjoJc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuaAorCiBLR0RCIC8gS0RCIC9kZWJ1Z19jb3JlCiBNOglKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgogVzoJaHR0cDovL2tnZGIud2lraS5rZXJuZWwub3JnLwpAQCAtNDU2Miw3ICs0NjE3LDcgQEAKIAogT1BFTiBGSVJNV0FSRSBBTkQgRkxBVFRFTkVEIERFVklDRSBUUkVFCiBNOglHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+Ci1MOglkZXZpY2V0cmVlLWRpc2N1c3NAbGlzdHMub3psYWJzLm9yZworTDoJZGV2aWNldHJlZS1kaXNjdXNzQGxpc3RzLm96bGFicy5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL2ZkdC5zZWNyZXRsYWIuY2EKIFQ6CWdpdCBnaXQ6Ly9naXQuc2VjcmV0bGFiLmNhL2dpdC9saW51eC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCkBAIC01MTI2LDYgKzUxODEsNyBAQAogCiBSQVBJRElPIFNVQlNZU1RFTQogTToJTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KK006CUFsZXhhbmRyZSBCb3VuaW5lIDxhbGV4YW5kcmUuYm91bmluZUBpZHQuY29tPgogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9yYXBpZGlvLwogCkBAIC01MjI4LDcgKzUyODQsNyBAQAogRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLwogCiBSVEw4MTg3IFdJUkVMRVNTIERSSVZFUgotTToJSGVydG9uIFJvbmFsZG8gS3J6ZXNpbnNraSA8aGVydG9uQG1hbmRyaXZhLmNvbS5icj4KK006CUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBjYW5vbmljYWwuY29tPgogTToJSGluLVRhayBMZXVuZyA8aHRsMTBAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTToJTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCkBAIC01NTIyLDEyICs1NTc4LDExIEBACiBGOglkcml2ZXJzL3Njc2kvYmUyaXNjc2kvCiAKIFNFUlZFUiBFTkdJTkVTIDEwR2JwcyBOSUMgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgotTToJU2F0aHlhIFBlcmxhIDxzYXRoeWFwQHNlcnZlcmVuZ2luZXMuY29tPgotTToJU3ViYnUgU2VldGhhcmFtYW4gPHN1YmJ1c0BzZXJ2ZXJlbmdpbmVzLmNvbT4KLU06CVNhcnZlc2h3YXIgQmFuZGkgPHNhcnZlc2h3YXJiQHNlcnZlcmVuZ2luZXMuY29tPgotTToJQWppdCBLaGFwYXJkZSA8YWppdGtAc2VydmVyZW5naW5lcy5jb20+CitNOglTYXRoeWEgUGVybGEgPHNhdGh5YS5wZXJsYUBlbXVsZXguY29tPgorTToJU3ViYnUgU2VldGhhcmFtYW4gPHN1YmJ1LnNlZXRoYXJhbWFuQGVtdWxleC5jb20+CitNOglBaml0IEtoYXBhcmRlIDxhaml0LmtoYXBhcmRlQGVtdWxleC5jb20+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCitXOglodHRwOi8vd3d3LmVtdWxleC5jb20KIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9uZXQvYmVuZXQvCiAKQEAgLTU1ODcsMTggKzU2NDIsMjAgQEAKIAogU0lNVEVDIEVCMTEwQVRYIChDaGFsaWNlIENBVFMpCiBQOglCZW4gRG9va3MKLU06CVZpbmNlbnQgU2FuZGVycyA8c3VwcG9ydEBzaW10ZWMuY28udWs+CitQOglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQHNpbXRlYy5jby51az4KK006CVNpbXRlYyBMaW51eCBUZWFtIDxsaW51eEBzaW10ZWMuY28udWs+CiBXOglodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9FQjExMEFUWC8KIFM6CVN1cHBvcnRlZAogCiBTSU1URUMgRUIyNDEwSVRYIChCQVNUKQogUDoJQmVuIERvb2tzCi1NOglWaW5jZW50IFNhbmRlcnMgPHN1cHBvcnRAc2ltdGVjLmNvLnVrPgorUDoJVmluY2VudCBTYW5kZXJzIDx2aW5jZUBzaW10ZWMuY28udWs+CitNOglTaW10ZWMgTGludXggVGVhbSA8bGludXhAc2ltdGVjLmNvLnVrPgogVzoJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLwogUzoJU3VwcG9ydGVkCi1GOglhcmNoL2FybS9tYWNoLXMzYzI0MTAvCi1GOglkcml2ZXJzLyovKnMzYzI0MTAqCi1GOglkcml2ZXJzLyovKi8qczNjMjQxMCoKK0Y6CWFyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworRjoJYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaWRlLmMKK0Y6CWFyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jCiAKIFRJIERBVklOQ0kgTUFDSElORSBTVVBQT1JUCiBNOglLZXZpbiBIaWxtYW4gPGtoaWxtYW5AZGVlcHJvb3RzeXN0ZW1zLmNvbT4KQEAgLTYwNjUsNyArNjEyMiw3IEBACiBGOglzZWN1cml0eS90b21veW8vCiAKIFRPUFNUQVIgTEFQVE9QIEVYVFJBUyBEUklWRVIKLU06CUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CitNOglIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIDxoZXJ0b25AY2Fub25pY2FsLmNvbT4KIEw6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3BzdGFyLWxhcHRvcC5jCkBAIC02NTczLDYgKzY2MzAsMTYgQEAKIEY6CWRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCiBGOglpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKIAorVklSVElPIENPUkUsIE5FVCBBTkQgQkxPQ0sgRFJJVkVSUworTToJUnVzdHkgUnVzc2VsbCA8cnVzdHlAcnVzdGNvcnAuY29tLmF1PgorTToJIk1pY2hhZWwgUy4gVHNpcmtpbiIgPG1zdEByZWRoYXQuY29tPgorTDoJdmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvdmlydGlvLworRjoJZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCitGOglkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYworRjoJaW5jbHVkZS9saW51eC92aXJ0aW9fKi5oCisKIFZJUlRJTyBIT1NUIChWSE9TVCkKIE06CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KIEw6CWt2bUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTY3NDYsMTIgKzY4MTMsMTIgQEAKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS8qCiAKIFdMMTI3MSBXSVJFTEVTUyBEUklWRVIKLU06CUx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CitNOglMdWNpYW5vIENvZWxobyA8Y29lbGhvQHRpLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvd2wxMnh4CiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2x1Y2Evd2wxMnh4LmdpdAogUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MSoKK0Y6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC8KIEY6CWluY2x1ZGUvbGludXgvd2wxMnh4LmgKIAogV0wzNTAxIFdJUkVMRVNTIFBDTUNJQSBDQVJEIERSSVZFUgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAxZjQ3NDk1Li41MDRmNzg4IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgogU1VCTEVWRUwgPSAzOAotRVhUUkFWRVJTSU9OID0gLXJjMgorRVhUUkFWRVJTSU9OID0gLXJjOAogTkFNRSA9IEZsZXNoLUVhdGluZyBCYXRzIHdpdGggRmFuZ3MKIAogIyAqRE9DVU1FTlRBVElPTioKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCA0N2Y2M2Q0Li5jYzMxYmVjIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC0xMSw2ICsxMSw3IEBACiAJc2VsZWN0IEhBVkVfR0VORVJJQ19IQVJESVJRUwogCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQogCXNlbGVjdCBBVVRPX0lSUV9BRkZJTklUWSBpZiBTTVAKKwlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19ERVBSRUNBVEVECiAJaGVscAogCSAgVGhlIEFscGhhIGlzIGEgNjQtYml0IGdlbmVyYWwtcHVycG9zZSBwcm9jZXNzb3IgZGVzaWduZWQgYW5kCiAJICBtYXJrZXRlZCBieSB0aGUgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gb2YgYmxlc3NlZCBtZW1vcnksCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCmluZGV4IDlhYjIzNGYuLmExOWQ2MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCkBAIC00NCwxMSArNDQsMTYgQEAKIAogaW50IGlycV9zZWxlY3RfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzY1tpcnFdOworCXN0cnVjdCBpcnFfZGF0YSAqZGF0YSA9IGlycV9nZXRfaXJxX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7CiAJc3RhdGljIGludCBsYXN0X2NwdTsKIAlpbnQgY3B1ID0gbGFzdF9jcHUgKyAxOwogCi0JaWYgKCFkZXNjIHx8ICFnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKS0+c2V0X2FmZmluaXR5IHx8IGlycV91c2VyX2FmZmluaXR5W2lycV0pCisJaWYgKCFkYXRhKQorCQlyZXR1cm4gMTsKKwljaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwKGRhdGEpOworCisJaWYgKCFjaGlwLT5pcnFfc2V0X2FmZmluaXR5IHx8IGlycV91c2VyX2FmZmluaXR5W2lycV0pCiAJCXJldHVybiAxOwogCiAJd2hpbGUgKCFjcHVfcG9zc2libGUoY3B1KSB8fApAQCAtNTYsOCArNjEsOCBAQAogCQljcHUgPSAoY3B1IDwgKE5SX0NQVVMtMSkgPyBjcHUgKyAxIDogMCk7CiAJbGFzdF9jcHUgPSBjcHU7CiAKLQljcHVtYXNrX2NvcHkoZGVzYy0+YWZmaW5pdHksIGNwdW1hc2tfb2YoY3B1KSk7Ci0JZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyktPnNldF9hZmZpbml0eShpcnEsIGNwdW1hc2tfb2YoY3B1KSk7CisJY3B1bWFza19jb3B5KGRhdGEtPmFmZmluaXR5LCBjcHVtYXNrX29mKGNwdSkpOworCWNoaXAtPmlycV9zZXRfYWZmaW5pdHkoZGF0YSwgY3B1bWFza19vZihjcHUpLCBmYWxzZSk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwppbmRleCAyZDA2NzliLi40MTFjYTExIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwpAQCAtMjI4LDE0ICsyMjgsOSBAQAogdm9pZCBfX2luaXQKIGluaXRfcnRjX2lycSh2b2lkKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKFJUQ19JUlEpOwotCi0JaWYgKGRlc2MpIHsKLQkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoUlRDX0lSUSwgJm5vX2lycV9jaGlwLAotCQkJaGFuZGxlX3NpbXBsZV9pcnEsICJSVEMiKTsKLQkJc2V0dXBfaXJxKFJUQ19JUlEsICZ0aW1lcl9pcnFhY3Rpb24pOwotCX0KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShSVENfSVJRLCAmbm9faXJxX2NoaXAsCisJCQkJICAgICAgaGFuZGxlX3NpbXBsZV9pcnEsICJSVEMiKTsKKwlzZXR1cF9pcnEoUlRDX0lSUSwgJnRpbWVyX2lycWFjdGlvbik7CiB9CiAKIC8qIER1bW15IGlycWFjdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2k4MjU5LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYwppbmRleCA5NTZlYTBlLi5jN2NjOTgxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYwpAQCAtMzMsMTAgKzMzLDEwIEBACiB9CiAKIGlubGluZSB2b2lkCi1pODI1OWFfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoraTgyNTlhX2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXNwaW5fbG9jaygmaTgyNTlfaXJxX2xvY2spOwotCWk4MjU5X3VwZGF0ZV9pcnFfaHcoaXJxLCBjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IGlycSkpOworCWk4MjU5X3VwZGF0ZV9pcnFfaHcoZC0+aXJxLCBjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IGQtPmlycSkpOwogCXNwaW5fdW5sb2NrKCZpODI1OV9pcnFfbG9jayk7CiB9CiAKQEAgLTQ3LDE2ICs0NywxOCBAQAogfQogCiB2b2lkCi1pODI1OWFfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK2k4MjU5YV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3Bpbl9sb2NrKCZpODI1OV9pcnFfbG9jayk7Ci0JX19pODI1OWFfZGlzYWJsZV9pcnEoaXJxKTsKKwlfX2k4MjU5YV9kaXNhYmxlX2lycShkLT5pcnEpOwogCXNwaW5fdW5sb2NrKCZpODI1OV9pcnFfbG9jayk7CiB9CiAKIHZvaWQKLWk4MjU5YV9tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitpODI1OWFfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKKwogCXNwaW5fbG9jaygmaTgyNTlfaXJxX2xvY2spOwogCV9faTgyNTlhX2Rpc2FibGVfaXJxKGlycSk7CiAKQEAgLTcxLDkgKzczLDkgQEAKIAogc3RydWN0IGlycV9jaGlwIGk4MjU5YV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiWFQtUElDIiwKLQkudW5tYXNrCQk9IGk4MjU5YV9lbmFibGVfaXJxLAotCS5tYXNrCQk9IGk4MjU5YV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBpODI1OWFfbWFza19hbmRfYWNrX2lycSwKKwkuaXJxX3VubWFzawk9IGk4MjU5YV9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IGk4MjU5YV9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gaTgyNTlhX21hc2tfYW5kX2Fja19pcnEsCiB9OwogCiB2b2lkIF9faW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2ltcGwuaCBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9pbXBsLmgKaW5kZXggYjYzY2NkNy4uZDUwN2EyMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2ltcGwuaAorKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaW1wbC5oCkBAIC0zMSwxMSArMzEsOSBAQAogCiBleHRlcm4gdm9pZCBjb21tb25faW5pdF9pc2FfZG1hKHZvaWQpOwogCi1leHRlcm4gdm9pZCBpODI1OWFfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgaTgyNTlhX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBpODI1OWFfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBpODI1OWFfc3RhcnR1cF9pcnEodW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGk4MjU5YV9lbmRfaXJxKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBpODI1OWFfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpOworZXh0ZXJuIHZvaWQgaTgyNTlhX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCk7CitleHRlcm4gdm9pZCBpODI1OWFfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpOwogZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCBpODI1OWFfaXJxX3R5cGU7CiBleHRlcm4gdm9pZCBpbml0X2k4MjU5YV9pcnFzKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfcHl4aXMuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9weXhpcy5jCmluZGV4IDI4NjM0NTguLmIzMDIyN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9weXhpcy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9weXhpcy5jCkBAIC0yOSwyMSArMjksMjEgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1weXhpc19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitweXhpc19lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlweXhpc191cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayB8PSAxVUwgPDwgKGlycSAtIDE2KSk7CisJcHl4aXNfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMVVMIDw8IChkLT5pcnEgLSAxNikpOwogfQogCiBzdGF0aWMgdm9pZAotcHl4aXNfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3B5eGlzX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlweXhpc191cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayAmPSB+KDFVTCA8PCAoaXJxIC0gMTYpKSk7CisJcHl4aXNfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGQtPmlycSAtIDE2KSkpOwogfQogCiBzdGF0aWMgdm9pZAotcHl4aXNfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorcHl4aXNfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgKGlycSAtIDE2KTsKKwl1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoZC0+aXJxIC0gMTYpOwogCXVuc2lnbmVkIGxvbmcgbWFzayA9IGNhY2hlZF9pcnFfbWFzayAmPSB+Yml0OwogCiAJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0LiAgKi8KQEAgLTU4LDkgKzU4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweXhpc19pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiUFlYSVMiLAotCS5tYXNrX2Fjawk9IHB5eGlzX21hc2tfYW5kX2Fja19pcnEsCi0JLm1hc2sJCT0gcHl4aXNfZGlzYWJsZV9pcnEsCi0JLnVubWFzawkJPSBweXhpc19lbmFibGVfaXJxLAorCS5pcnFfbWFza19hY2sJPSBweXhpc19tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfbWFzawk9IHB5eGlzX2Rpc2FibGVfaXJxLAorCS5pcnFfdW5tYXNrCT0gcHl4aXNfZW5hYmxlX2lycSwKIH07CiAKIHZvaWQgCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJaWYgKChpZ25vcmVfbWFzayA+PiBpKSAmIDEpCiAJCQljb250aW51ZTsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZweXhpc19pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCWlycV90b19kZXNjKGkpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCX0KIAogCXNldHVwX2lycSgxNis3LCAmaXNhX2Nhc2NhZGVfaXJxYWN0aW9uKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9zcm0uYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9zcm0uYwppbmRleCAwZTU3ZTgyLi44MmE0N2JiIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfc3JtLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX3NybS5jCkBAIC0xOCwyNyArMTgsMjcgQEAKIERFRklORV9TUElOTE9DSyhzcm1faXJxX2xvY2spOwogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXNybV9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzcm1fZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3Bpbl9sb2NrKCZzcm1faXJxX2xvY2spOwotCWNzZXJ2ZV9lbmEoaXJxIC0gMTYpOworCWNzZXJ2ZV9lbmEoZC0+aXJxIC0gMTYpOwogCXNwaW5fdW5sb2NrKCZzcm1faXJxX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZAotc3JtX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzcm1fZGlzYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXNwaW5fbG9jaygmc3JtX2lycV9sb2NrKTsKLQljc2VydmVfZGlzKGlycSAtIDE2KTsKKwljc2VydmVfZGlzKGQtPmlycSAtIDE2KTsKIAlzcGluX3VubG9jaygmc3JtX2lycV9sb2NrKTsKIH0KIAogLyogSGFuZGxlIGludGVycnVwdHMgZnJvbSB0aGUgU1JNLCBhc3N1bWluZyBubyBhZGRpdGlvbmFsIHdlaXJkbmVzcy4gICovCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNybV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiU1JNIiwKLQkudW5tYXNrCQk9IHNybV9lbmFibGVfaXJxLAotCS5tYXNrCQk9IHNybV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBzcm1fZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSBzcm1fZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSBzcm1fZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHNybV9kaXNhYmxlX2lycSwKIH07CiAKIHZvaWQgX19pbml0CkBAIC01Miw3ICs1Miw3IEBACiAJCWlmIChpIDwgNjQgJiYgKChpZ25vcmVfbWFzayA+PiBpKSAmIDEpKQogCQkJY29udGludWU7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc3JtX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJaXJxX3RvX2Rlc2MoaSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfYWxjb3IuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCmluZGV4IDdiZWY2MTcuLjg4ZDk1ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCkBAIC00NCwzMSArNDQsMzEgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1hbGNvcl9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCithbGNvcl9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlhbGNvcl91cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayB8PSAxVUwgPDwgKGlycSAtIDE2KSk7CisJYWxjb3JfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMVVMIDw8IChkLT5pcnEgLSAxNikpOwogfQogCiBzdGF0aWMgdm9pZAotYWxjb3JfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK2FsY29yX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlhbGNvcl91cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayAmPSB+KDFVTCA8PCAoaXJxIC0gMTYpKSk7CisJYWxjb3JfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGQtPmlycSAtIDE2KSkpOwogfQogCiBzdGF0aWMgdm9pZAotYWxjb3JfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorYWxjb3JfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JYWxjb3JfZGlzYWJsZV9pcnEoaXJxKTsKKwlhbGNvcl9kaXNhYmxlX2lycShkKTsKIAogCS8qIE9uIEFMQ09SL1hMVCwgbmVlZCB0byBkaXNtaXNzIGludGVycnVwdCB2aWEgR1JVLiAqLwotCSoodnVpcClHUlVfSU5UX0NMRUFSID0gMSA8PCAoaXJxIC0gMTYpOyBtYigpOworCSoodnVpcClHUlVfSU5UX0NMRUFSID0gMSA8PCAoZC0+aXJxIC0gMTYpOyBtYigpOwogCSoodnVpcClHUlVfSU5UX0NMRUFSID0gMDsgbWIoKTsKIH0KIAogc3RhdGljIHZvaWQKLWFsY29yX2lzYV9tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCithbGNvcl9pc2FfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaTgyNTlhX21hc2tfYW5kX2Fja19pcnEoaXJxKTsKKwlpODI1OWFfbWFza19hbmRfYWNrX2lycShkKTsKIAogCS8qIE9uIEFMQ09SL1hMVCwgbmVlZCB0byBkaXNtaXNzIGludGVycnVwdCB2aWEgR1JVLiAqLwogCSoodnVpcClHUlVfSU5UX0NMRUFSID0gMHg4MDAwMDAwMDsgbWIoKTsKQEAgLTc3LDkgKzc3LDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhbGNvcl9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiQUxDT1IiLAotCS51bm1hc2sJCT0gYWxjb3JfZW5hYmxlX2lycSwKLQkubWFzawkJPSBhbGNvcl9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBhbGNvcl9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gYWxjb3JfZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSBhbGNvcl9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gYWxjb3JfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0xMjYsOSArMTI2LDkgQEAKIAkJaWYgKGkgPj0gMTYrMjAgJiYgaSA8PSAxNiszMCkKIAkJCWNvbnRpbnVlOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmFsY29yX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJaXJxX3RvX2Rlc2MoaSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQotCWk4MjU5YV9pcnFfdHlwZS5hY2sgPSBhbGNvcl9pc2FfbWFza19hbmRfYWNrX2lycTsKKwlpODI1OWFfaXJxX3R5cGUuaXJxX2FjayA9IGFsY29yX2lzYV9tYXNrX2FuZF9hY2tfaXJxOwogCiAJaW5pdF9pODI1OWFfaXJxcygpOwogCWNvbW1vbl9pbml0X2lzYV9kbWEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19jYWJyaW9sZXQuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19jYWJyaW9sZXQuYwppbmRleCBiMGM5MTY0Li41N2ViNjMwIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfY2FicmlvbGV0LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2NhYnJpb2xldC5jCkBAIC00NiwyMiArNDYsMjIgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1jYWJyaW9sZXRfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorY2FicmlvbGV0X2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCWNhYnJpb2xldF91cGRhdGVfaXJxX2h3KGlycSwgY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IGlycSkpOworCWNhYnJpb2xldF91cGRhdGVfaXJxX2h3KGQtPmlycSwgY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IGQtPmlycSkpOwogfQogCiBzdGF0aWMgdm9pZAotY2FicmlvbGV0X2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitjYWJyaW9sZXRfZGlzYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCWNhYnJpb2xldF91cGRhdGVfaXJxX2h3KGlycSwgY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCBpcnEpOworCWNhYnJpb2xldF91cGRhdGVfaXJxX2h3KGQtPmlycSwgY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCBkLT5pcnEpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNhYnJpb2xldF9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiQ0FCUklPTEVUIiwKLQkudW5tYXNrCQk9IGNhYnJpb2xldF9lbmFibGVfaXJxLAotCS5tYXNrCQk9IGNhYnJpb2xldF9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBjYWJyaW9sZXRfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSBjYWJyaW9sZXRfZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSBjYWJyaW9sZXRfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IGNhYnJpb2xldF9kaXNhYmxlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIApAQCAtMTA3LDcgKzEwNyw3IEBACiAJCWZvciAoaSA9IDE2OyBpIDwgMzU7ICsraSkgewogCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZjYWJyaW9sZXRfaXJxX3R5cGUsCiAJCQkJaGFuZGxlX2xldmVsX2lycSk7Ci0JCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwkJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19kcDI2NC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2RwMjY0LmMKaW5kZXggZWRhZDVmNy4uNDgxZGY0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2RwMjY0LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2RwMjY0LmMKQEAgLTk4LDM3ICs5OCwzNyBAQAogfQogCiBzdGF0aWMgdm9pZAotZHAyNjRfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorZHAyNjRfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3Bpbl9sb2NrKCZkcDI2NF9pcnFfbG9jayk7Ci0JY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCBpcnE7CisJY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCBkLT5pcnE7CiAJdHN1bmFtaV91cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayk7CiAJc3Bpbl91bmxvY2soJmRwMjY0X2lycV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQKLWRwMjY0X2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitkcDI2NF9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3Bpbl9sb2NrKCZkcDI2NF9pcnFfbG9jayk7Ci0JY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IGlycSk7CisJY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IGQtPmlycSk7CiAJdHN1bmFtaV91cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayk7CiAJc3Bpbl91bmxvY2soJmRwMjY0X2lycV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQKLWNsaXBwZXJfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorY2xpcHBlcl9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzcGluX2xvY2soJmRwMjY0X2lycV9sb2NrKTsKLQljYWNoZWRfaXJxX21hc2sgfD0gMVVMIDw8IChpcnEgLSAxNik7CisJY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCAoZC0+aXJxIC0gMTYpOwogCXRzdW5hbWlfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2spOwogCXNwaW5fdW5sb2NrKCZkcDI2NF9pcnFfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkCi1jbGlwcGVyX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitjbGlwcGVyX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzcGluX2xvY2soJmRwMjY0X2lycV9sb2NrKTsKLQljYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGlycSAtIDE2KSk7CisJY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IChkLT5pcnEgLSAxNikpOwogCXRzdW5hbWlfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2spOwogCXNwaW5fdW5sb2NrKCZkcDI2NF9pcnFfbG9jayk7CiB9CkBAIC0xNDksMTAgKzE0OSwxMSBAQAogfQogCiBzdGF0aWMgaW50Ci1kcDI2NF9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KQoteyAKK2RwMjY0X3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSwKKwkJICAgYm9vbCBmb3JjZSkKK3sKIAlzcGluX2xvY2soJmRwMjY0X2lycV9sb2NrKTsKLQljcHVfc2V0X2lycV9hZmZpbml0eShpcnEsICphZmZpbml0eSk7CisJY3B1X3NldF9pcnFfYWZmaW5pdHkoZC0+aXJxLCAqYWZmaW5pdHkpOwogCXRzdW5hbWlfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2spOwogCXNwaW5fdW5sb2NrKCZkcDI2NF9pcnFfbG9jayk7CiAKQEAgLTE2MCwxMCArMTYxLDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLWNsaXBwZXJfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSkKLXsgCitjbGlwcGVyX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSwKKwkJICAgICBib29sIGZvcmNlKQorewogCXNwaW5fbG9jaygmZHAyNjRfaXJxX2xvY2spOwotCWNwdV9zZXRfaXJxX2FmZmluaXR5KGlycSAtIDE2LCAqYWZmaW5pdHkpOworCWNwdV9zZXRfaXJxX2FmZmluaXR5KGQtPmlycSAtIDE2LCAqYWZmaW5pdHkpOwogCXRzdW5hbWlfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2spOwogCXNwaW5fdW5sb2NrKCZkcDI2NF9pcnFfbG9jayk7CiAKQEAgLTE3MSwxOSArMTczLDE5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZHAyNjRfaXJxX3R5cGUgPSB7Ci0JLm5hbWUJCT0gIkRQMjY0IiwKLQkudW5tYXNrCQk9IGRwMjY0X2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gZHAyNjRfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gZHAyNjRfZGlzYWJsZV9pcnEsCi0JLnNldF9hZmZpbml0eQk9IGRwMjY0X3NldF9hZmZpbml0eSwKKwkubmFtZQkJCT0gIkRQMjY0IiwKKwkuaXJxX3VubWFzawkJPSBkcDI2NF9lbmFibGVfaXJxLAorCS5pcnFfbWFzawkJPSBkcDI2NF9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCQk9IGRwMjY0X2Rpc2FibGVfaXJxLAorCS5pcnFfc2V0X2FmZmluaXR5CT0gZHAyNjRfc2V0X2FmZmluaXR5LAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjbGlwcGVyX2lycV90eXBlID0gewotCS5uYW1lCQk9ICJDTElQUEVSIiwKLQkudW5tYXNrCQk9IGNsaXBwZXJfZW5hYmxlX2lycSwKLQkubWFzawkJPSBjbGlwcGVyX2Rpc2FibGVfaXJxLAotCS5tYXNrX2Fjawk9IGNsaXBwZXJfZGlzYWJsZV9pcnEsCi0JLnNldF9hZmZpbml0eQk9IGNsaXBwZXJfc2V0X2FmZmluaXR5LAorCS5uYW1lCQkJPSAiQ0xJUFBFUiIsCisJLmlycV91bm1hc2sJCT0gY2xpcHBlcl9lbmFibGVfaXJxLAorCS5pcnFfbWFzawkJPSBjbGlwcGVyX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sJCT0gY2xpcHBlcl9kaXNhYmxlX2lycSwKKwkuaXJxX3NldF9hZmZpbml0eQk9IGNsaXBwZXJfc2V0X2FmZmluaXR5LAogfTsKIAogc3RhdGljIHZvaWQKQEAgLTI2OCw4ICsyNzAsOCBAQAogewogCWxvbmcgaTsKIAlmb3IgKGkgPSBpbWluOyBpIDw9IGltYXg7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksIG9wcywgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWI2NHAuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19lYjY0cC5jCmluZGV4IGFlNWYyOWQuLjQwMmU5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19lYjY0cC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19lYjY0cC5jCkBAIC00NCwyMiArNDQsMjIgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1lYjY0cF9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitlYjY0cF9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQllYjY0cF91cGRhdGVfaXJxX2h3KGlycSwgY2FjaGVkX2lycV9tYXNrICY9IH4oMSA8PCBpcnEpKTsKKwllYjY0cF91cGRhdGVfaXJxX2h3KGQtPmlycSwgY2FjaGVkX2lycV9tYXNrICY9IH4oMSA8PCBkLT5pcnEpKTsKIH0KIAogc3RhdGljIHZvaWQKLWViNjRwX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitlYjY0cF9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JZWI2NHBfdXBkYXRlX2lycV9odyhpcnEsIGNhY2hlZF9pcnFfbWFzayB8PSAxIDw8IGlycSk7CisJZWI2NHBfdXBkYXRlX2lycV9odyhkLT5pcnEsIGNhY2hlZF9pcnFfbWFzayB8PSAxIDw8IGQtPmlycSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZWI2NHBfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIkVCNjRQIiwKLQkudW5tYXNrCQk9IGViNjRwX2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gZWI2NHBfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gZWI2NHBfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSBlYjY0cF9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IGViNjRwX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sJPSBlYjY0cF9kaXNhYmxlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIApAQCAtMTE4LDkgKzExOCw5IEBACiAJaW5pdF9pODI1OWFfaXJxcygpOwogCiAJZm9yIChpID0gMTY7IGkgPCAzMjsgKytpKSB7Ci0JCWlycV90b19kZXNjKGkpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmViNjRwX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQl9CQkKKwkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKKwl9CiAKIAljb21tb25faW5pdF9pc2FfZG1hKCk7CiAJc2V0dXBfaXJxKDE2KzUsICZpc2FfY2FzY2FkZV9pcnFhY3Rpb24pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2VpZ2VyLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWlnZXIuYwppbmRleCAxMTIxYmM1Li4wYjQ0YTU0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWlnZXIuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWlnZXIuYwpAQCAtNTEsMTYgKzUxLDE4IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotZWlnZXJfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorZWlnZXJfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAJbWFzayA9IChjYWNoZWRfaXJxX21hc2tbaXJxID49IDY0XSAmPSB+KDFVTCA8PCAoaXJxICYgNjMpKSk7CiAJZWlnZXJfdXBkYXRlX2lycV9odyhpcnEsIG1hc2spOwogfQogCiBzdGF0aWMgdm9pZAotZWlnZXJfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK2VpZ2VyX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAltYXNrID0gKGNhY2hlZF9pcnFfbWFza1tpcnEgPj0gNjRdIHw9IDFVTCA8PCAoaXJxICYgNjMpKTsKIAllaWdlcl91cGRhdGVfaXJxX2h3KGlycSwgbWFzayk7CkBAIC02OCw5ICs3MCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZWlnZXJfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIkVJR0VSIiwKLQkudW5tYXNrCQk9IGVpZ2VyX2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gZWlnZXJfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gZWlnZXJfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSBlaWdlcl9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IGVpZ2VyX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sJPSBlaWdlcl9kaXNhYmxlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0xMzYsOCArMTM4LDggQEAKIAlpbml0X2k4MjU5YV9pcnFzKCk7CiAKIAlmb3IgKGkgPSAxNjsgaSA8IDEyODsgKytpKSB7Ci0JCWlycV90b19kZXNjKGkpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmVpZ2VyX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19qZW5zZW4uYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19qZW5zZW4uYwppbmRleCAzNGY1NWUwLi4wMDM0MWI3IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfamVuc2VuLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2plbnNlbi5jCkBAIC02MywzNCArNjMsMzQgQEAKICAqLwogCiBzdGF0aWMgdm9pZAotamVuc2VuX2xvY2FsX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoramVuc2VuX2xvY2FsX2VuYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJLyogdGhlIHBhcnBvcnQgaXMgcmVhbGx5IGh3IElSUSAxLCBzaWxseSBKZW5zZW4uICAqLwotCWlmIChpcnEgPT0gNykKLQkJaTgyNTlhX2VuYWJsZV9pcnEoMSk7CisJaWYgKGQtPmlycSA9PSA3KQorCQlpODI1OWFfZW5hYmxlX2lycShkKTsKIH0KIAogc3RhdGljIHZvaWQKLWplbnNlbl9sb2NhbF9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCitqZW5zZW5fbG9jYWxfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJLyogdGhlIHBhcnBvcnQgaXMgcmVhbGx5IGh3IElSUSAxLCBzaWxseSBKZW5zZW4uICAqLwotCWlmIChpcnEgPT0gNykKLQkJaTgyNTlhX2Rpc2FibGVfaXJxKDEpOworCWlmIChkLT5pcnEgPT0gNykKKwkJaTgyNTlhX2Rpc2FibGVfaXJxKGQpOwogfQogCiBzdGF0aWMgdm9pZAotamVuc2VuX2xvY2FsX21hc2tfYWNrKHVuc2lnbmVkIGludCBpcnEpCitqZW5zZW5fbG9jYWxfbWFza19hY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCS8qIHRoZSBwYXJwb3J0IGlzIHJlYWxseSBodyBJUlEgMSwgc2lsbHkgSmVuc2VuLiAgKi8KLQlpZiAoaXJxID09IDcpCi0JCWk4MjU5YV9tYXNrX2FuZF9hY2tfaXJxKDEpOworCWlmIChkLT5pcnEgPT0gNykKKwkJaTgyNTlhX21hc2tfYW5kX2Fja19pcnEoZCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgamVuc2VuX2xvY2FsX2lycV90eXBlID0gewogCS5uYW1lCQk9ICJMT0NBTCIsCi0JLnVubWFzawkJPSBqZW5zZW5fbG9jYWxfZW5hYmxlLAotCS5tYXNrCQk9IGplbnNlbl9sb2NhbF9kaXNhYmxlLAotCS5tYXNrX2Fjawk9IGplbnNlbl9sb2NhbF9tYXNrX2FjaywKKwkuaXJxX3VubWFzawk9IGplbnNlbl9sb2NhbF9lbmFibGUsCisJLmlycV9tYXNrCT0gamVuc2VuX2xvY2FsX2Rpc2FibGUsCisJLmlycV9tYXNrX2Fjawk9IGplbnNlbl9sb2NhbF9tYXNrX2FjaywKIH07CiAKIHN0YXRpYyB2b2lkIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21hcnZlbC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21hcnZlbC5jCmluZGV4IDJiZmM5ZjEuLmU2MTkxMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19tYXJ2ZWwuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWFydmVsLmMKQEAgLTEwNCw5ICsxMDQsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWlvN19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitpbzdfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqY3RsOworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJc3RydWN0IGlvNyAqaW83OwogCiAJY3RsID0gaW83X2dldF9pcnFfY3RsKGlycSwgJmlvNyk7CkBAIC0xMTUsNyArMTE2LDcgQEAKIAkJICAgICAgIF9fZnVuY19fLCBpcnEpOwogCQlyZXR1cm47CiAJfQotCQkKKwogCXNwaW5fbG9jaygmaW83LT5pcnFfbG9jayk7CiAJKmN0bCB8PSAxVUwgPDwgMjQ7CiAJbWIoKTsKQEAgLTEyNCw5ICsxMjUsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWlvN19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoraW83X2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpjdGw7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAlzdHJ1Y3QgaW83ICppbzc7CiAKIAljdGwgPSBpbzdfZ2V0X2lycV9jdGwoaXJxLCAmaW83KTsKQEAgLTEzNSw3ICsxMzcsNyBAQAogCQkgICAgICAgX19mdW5jX18sIGlycSk7CiAJCXJldHVybjsKIAl9Ci0JCQorCiAJc3Bpbl9sb2NrKCZpbzctPmlycV9sb2NrKTsKIAkqY3RsICY9IH4oMVVMIDw8IDI0KTsKIAltYigpOwpAQCAtMTQ0LDM1ICsxNDYsMjkgQEAKIH0KIAogc3RhdGljIHZvaWQKLW1hcnZlbF9pcnFfbm9vcCh1bnNpZ25lZCBpbnQgaXJxKSAKLXsgCi0JcmV0dXJuOyAKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotbWFydmVsX2lycV9ub29wX3JldHVybih1bnNpZ25lZCBpbnQgaXJxKSAKLXsgCi0JcmV0dXJuIDA7IAorbWFydmVsX2lycV9ub29wKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbWFydmVsX2xlZ2FjeV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiTEVHQUNZIiwKLQkubWFzawkJPSBtYXJ2ZWxfaXJxX25vb3AsCi0JLnVubWFzawkJPSBtYXJ2ZWxfaXJxX25vb3AsCisJLmlycV9tYXNrCT0gbWFydmVsX2lycV9ub29wLAorCS5pcnFfdW5tYXNrCT0gbWFydmVsX2lycV9ub29wLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpbzdfbHNpX2lycV90eXBlID0gewogCS5uYW1lCQk9ICJMU0kiLAotCS51bm1hc2sJCT0gaW83X2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gaW83X2Rpc2FibGVfaXJxLAotCS5tYXNrX2Fjawk9IGlvN19kaXNhYmxlX2lycSwKKwkuaXJxX3VubWFzawk9IGlvN19lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IGlvN19kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gaW83X2Rpc2FibGVfaXJxLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpbzdfbXNpX2lycV90eXBlID0gewogCS5uYW1lCQk9ICJNU0kiLAotCS51bm1hc2sJCT0gaW83X2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gaW83X2Rpc2FibGVfaXJxLAotCS5hY2sJCT0gbWFydmVsX2lycV9ub29wLAorCS5pcnFfdW5tYXNrCT0gaW83X2VuYWJsZV9pcnEsCisJLmlycV9tYXNrCT0gaW83X2Rpc2FibGVfaXJxLAorCS5pcnFfYWNrCT0gbWFydmVsX2lycV9ub29wLAogfTsKIAogc3RhdGljIHZvaWQKQEAgLTI4MCw4ICsyNzYsOCBAQAogCiAJLyogU2V0IHVwIHRoZSBsc2kgaXJxcy4gICovCiAJZm9yIChpID0gMDsgaSA8IDEyODsgKytpKSB7Ci0JCWlycV90b19kZXNjKGJhc2UgKyBpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGJhc2UgKyBpLCBsc2lfb3BzLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKIAl9CiAKIAkvKiBEaXNhYmxlIHRoZSBpbXBsZW1lbnRlZCBpcnFzIGluIGhhcmR3YXJlLiAgKi8KQEAgLTI5NCw4ICsyOTAsOCBAQAogCiAJLyogU2V0IHVwIHRoZSBtc2kgaXJxcy4gICovCiAJZm9yIChpID0gMTI4OyBpIDwgKDEyOCArIDUxMik7ICsraSkgewotCQlpcnFfdG9fZGVzYyhiYXNlICsgaSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihiYXNlICsgaSwgbXNpX29wcywgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IDE2OyArK2kpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlrYXNhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlrYXNhLmMKaW5kZXggYmNjMTYzOS4uY2Y3ZjQzZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21pa2FzYS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19taWthc2EuYwpAQCAtNDMsMjIgKzQzLDIyIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotbWlrYXNhX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK21pa2FzYV9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQltaWthc2FfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMSA8PCAoaXJxIC0gMTYpKTsKKwltaWthc2FfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMSA8PCAoZC0+aXJxIC0gMTYpKTsKIH0KIAogc3RhdGljIHZvaWQKLW1pa2FzYV9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorbWlrYXNhX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQltaWthc2FfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IChpcnEgLSAxNikpKTsKKwltaWthc2FfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IChkLT5pcnEgLSAxNikpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtaWthc2FfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIk1JS0FTQSIsCi0JLnVubWFzawkJPSBtaWthc2FfZW5hYmxlX2lycSwKLQkubWFzawkJPSBtaWthc2FfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gbWlrYXNhX2Rpc2FibGVfaXJxLAorCS5pcnFfdW5tYXNrCT0gbWlrYXNhX2VuYWJsZV9pcnEsCisJLmlycV9tYXNrCT0gbWlrYXNhX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sJPSBtaWthc2FfZGlzYWJsZV9pcnEsCiB9OwogCiBzdGF0aWMgdm9pZCAKQEAgLTk4LDggKzk4LDggQEAKIAltaWthc2FfdXBkYXRlX2lycV9odygwKTsKIAogCWZvciAoaSA9IDE2OyBpIDwgMzI7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZtaWthc2FfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCX0KIAogCWluaXRfaTgyNTlhX2lycXMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19ub3JpdGFrZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMKaW5kZXggZTg4ZjRhZS4uOTJiYzE4OCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMKQEAgLTQ4LDIyICs0OCwyMiBAQAogfQogCiBzdGF0aWMgdm9pZAotbm9yaXRha2VfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorbm9yaXRha2VfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jbm9yaXRha2VfdXBkYXRlX2lycV9odyhpcnEsIGNhY2hlZF9pcnFfbWFzayB8PSAxIDw8IChpcnEgLSAxNikpOworCW5vcml0YWtlX3VwZGF0ZV9pcnFfaHcoZC0+aXJxLCBjYWNoZWRfaXJxX21hc2sgfD0gMSA8PCAoZC0+aXJxIC0gMTYpKTsKIH0KIAogc3RhdGljIHZvaWQKLW5vcml0YWtlX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitub3JpdGFrZV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jbm9yaXRha2VfdXBkYXRlX2lycV9odyhpcnEsIGNhY2hlZF9pcnFfbWFzayAmPSB+KDEgPDwgKGlycSAtIDE2KSkpOworCW5vcml0YWtlX3VwZGF0ZV9pcnFfaHcoZC0+aXJxLCBjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IChkLT5pcnEgLSAxNikpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBub3JpdGFrZV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiTk9SSVRBS0UiLAotCS51bm1hc2sJCT0gbm9yaXRha2VfZW5hYmxlX2lycSwKLQkubWFzawkJPSBub3JpdGFrZV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBub3JpdGFrZV9kaXNhYmxlX2lycSwKKwkuaXJxX3VubWFzawk9IG5vcml0YWtlX2VuYWJsZV9pcnEsCisJLmlycV9tYXNrCT0gbm9yaXRha2VfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IG5vcml0YWtlX2Rpc2FibGVfaXJxLAogfTsKIAogc3RhdGljIHZvaWQgCkBAIC0xMjcsOCArMTI3LDggQEAKIAlvdXR3KDAsIDB4NTRjKTsKIAogCWZvciAoaSA9IDE2OyBpIDwgNDg7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZub3JpdGFrZV9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogCiAJaW5pdF9pODI1OWFfaXJxcygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Jhd2hpZGUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19yYXdoaWRlLmMKaW5kZXggNmE1MTM2NC4uOTM2ZDQxNCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Jhd2hpZGUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcmF3aGlkZS5jCkBAIC01Niw5ICs1NiwxMCBAQAogICAoKChoKSA8IE1DUENJQV9NQVhfSE9TRVMpICYmIChjYWNoZWRfaXJxX21hc2tzWyhoKV0gIT0gMCkpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAKLXJhd2hpZGVfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorcmF3aGlkZV9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBpbnQgbWFzaywgaG9zZTsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCiAJaXJxIC09IDE2OwogCWhvc2UgPSBpcnEgLyAyNDsKQEAgLTc2LDkgKzc3LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIAotcmF3aGlkZV9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorcmF3aGlkZV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgaW50IG1hc2ssIGhvc2U7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAogCWlycSAtPSAxNjsKIAlob3NlID0gaXJxIC8gMjQ7CkBAIC05Niw5ICs5OCwxMCBAQAogfQogCiBzdGF0aWMgdm9pZAotcmF3aGlkZV9tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCityYXdoaWRlX21hc2tfYW5kX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGludCBtYXNrLCBtYXNrMSwgaG9zZTsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCiAJaXJxIC09IDE2OwogCWhvc2UgPSBpcnEgLyAyNDsKQEAgLTEyMyw5ICsxMjYsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHJhd2hpZGVfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIlJBV0hJREUiLAotCS51bm1hc2sJCT0gcmF3aGlkZV9lbmFibGVfaXJxLAotCS5tYXNrCQk9IHJhd2hpZGVfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gcmF3aGlkZV9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gcmF3aGlkZV9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IHJhd2hpZGVfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHJhd2hpZGVfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIApAQCAtMTc3LDggKzE4MCw4IEBACiAJfQogCiAJZm9yIChpID0gMTY7IGkgPCAxMjg7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZyYXdoaWRlX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKIAl9CiAKIAlpbml0X2k4MjU5YV9pcnFzKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcngxNjQuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19yeDE2NC5jCmluZGV4IDg5ZTdlMzdlLi5jZWEyMmE2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcngxNjQuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcngxNjQuYwpAQCAtNDcsMjIgKzQ3LDIyIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotcngxNjRfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorcngxNjRfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JcngxNjRfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMVVMIDw8IChpcnEgLSAxNikpOworCXJ4MTY0X3VwZGF0ZV9pcnFfaHcoY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCAoZC0+aXJxIC0gMTYpKTsKIH0KIAogc3RhdGljIHZvaWQKLXJ4MTY0X2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCityeDE2NF9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JcngxNjRfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGlycSAtIDE2KSkpOworCXJ4MTY0X3VwZGF0ZV9pcnFfaHcoY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IChkLT5pcnEgLSAxNikpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCByeDE2NF9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiUlgxNjQiLAotCS51bm1hc2sJCT0gcngxNjRfZW5hYmxlX2lycSwKLQkubWFzawkJPSByeDE2NF9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSByeDE2NF9kaXNhYmxlX2lycSwKKwkuaXJxX3VubWFzawk9IHJ4MTY0X2VuYWJsZV9pcnEsCisJLmlycV9tYXNrCT0gcngxNjRfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHJ4MTY0X2Rpc2FibGVfaXJxLAogfTsKIAogc3RhdGljIHZvaWQgCkBAIC05OSw4ICs5OSw4IEBACiAKIAlyeDE2NF91cGRhdGVfaXJxX2h3KDApOwogCWZvciAoaSA9IDE2OyBpIDwgNDA7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZyeDE2NF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogCiAJaW5pdF9pODI1OWFfaXJxcygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3NhYmxlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYwppbmRleCA1YzQ0MjNkLi5hMzQ5NTM4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYwpAQCAtNDQzLDExICs0NDMsMTEgQEAKIC8qIEdFTkVSSUMgaXJxIHJvdXRpbmVzICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotc2FibGVfbHlueF9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzYWJsZV9seW54X2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgYml0LCBtYXNrOwogCi0JYml0ID0gc2FibGVfbHlueF9pcnFfc3dpenpsZS0+aXJxX3RvX21hc2tbaXJxXTsKKwliaXQgPSBzYWJsZV9seW54X2lycV9zd2l6emxlLT5pcnFfdG9fbWFza1tkLT5pcnFdOwogCXNwaW5fbG9jaygmc2FibGVfbHlueF9pcnFfbG9jayk7CiAJbWFzayA9IHNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPnNoYWRvd19tYXNrICY9IH4oMVVMIDw8IGJpdCk7CiAJc2FibGVfbHlueF9pcnFfc3dpenpsZS0+dXBkYXRlX2lycV9odyhiaXQsIG1hc2spOwpAQCAtNDU5LDExICs0NTksMTEgQEAKIH0KIAogc3RhdGljIHZvaWQKLXNhYmxlX2x5bnhfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3NhYmxlX2x5bnhfZGlzYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgYml0LCBtYXNrOwogCi0JYml0ID0gc2FibGVfbHlueF9pcnFfc3dpenpsZS0+aXJxX3RvX21hc2tbaXJxXTsKKwliaXQgPSBzYWJsZV9seW54X2lycV9zd2l6emxlLT5pcnFfdG9fbWFza1tkLT5pcnFdOwogCXNwaW5fbG9jaygmc2FibGVfbHlueF9pcnFfbG9jayk7CiAJbWFzayA9IHNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPnNoYWRvd19tYXNrIHw9IDFVTCA8PCBiaXQ7CiAJc2FibGVfbHlueF9pcnFfc3dpenpsZS0+dXBkYXRlX2lycV9odyhiaXQsIG1hc2spOwpAQCAtNDc1LDExICs0NzUsMTEgQEAKIH0KIAogc3RhdGljIHZvaWQKLXNhYmxlX2x5bnhfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc2FibGVfbHlueF9tYXNrX2FuZF9hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGJpdCwgbWFzazsKIAotCWJpdCA9IHNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPmlycV90b19tYXNrW2lycV07CisJYml0ID0gc2FibGVfbHlueF9pcnFfc3dpenpsZS0+aXJxX3RvX21hc2tbZC0+aXJxXTsKIAlzcGluX2xvY2soJnNhYmxlX2x5bnhfaXJxX2xvY2spOwogCW1hc2sgPSBzYWJsZV9seW54X2lycV9zd2l6emxlLT5zaGFkb3dfbWFzayB8PSAxVUwgPDwgYml0OwogCXNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPnVwZGF0ZV9pcnFfaHcoYml0LCBtYXNrKTsKQEAgLTQ4OSw5ICs0ODksOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNhYmxlX2x5bnhfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIlNBQkxFL0xZTlgiLAotCS51bm1hc2sJCT0gc2FibGVfbHlueF9lbmFibGVfaXJxLAotCS5tYXNrCQk9IHNhYmxlX2x5bnhfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gc2FibGVfbHlueF9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gc2FibGVfbHlueF9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IHNhYmxlX2x5bnhfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHNhYmxlX2x5bnhfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIApAQCAtNTE4LDkgKzUxOCw5IEBACiAJbG9uZyBpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX29mX2lycXM7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZzYWJsZV9seW54X2lycV90eXBlLAogCQkJaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogCiAJY29tbW9uX2luaXRfaXNhX2RtYSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Rha2FyYS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Rha2FyYS5jCmluZGV4IGY4YTFlOGEuLjQyYTUzMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c190YWthcmEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGFrYXJhLmMKQEAgLTQ1LDE2ICs0NSwxOCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXRha2FyYV9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit0YWthcmFfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAJbWFzayA9IChjYWNoZWRfaXJxX21hc2tbaXJxID49IDY0XSAmPSB+KDFVTCA8PCAoaXJxICYgNjMpKSk7CiAJdGFrYXJhX3VwZGF0ZV9pcnFfaHcoaXJxLCBtYXNrKTsKIH0KIAogc3RhdGljIHZvaWQKLXRha2FyYV9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQordGFrYXJhX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAltYXNrID0gKGNhY2hlZF9pcnFfbWFza1tpcnEgPj0gNjRdIHw9IDFVTCA8PCAoaXJxICYgNjMpKTsKIAl0YWthcmFfdXBkYXRlX2lycV9odyhpcnEsIG1hc2spOwpAQCAtNjIsOSArNjQsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHRha2FyYV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiVEFLQVJBIiwKLQkudW5tYXNrCQk9IHRha2FyYV9lbmFibGVfaXJxLAotCS5tYXNrCQk9IHRha2FyYV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSB0YWthcmFfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSB0YWthcmFfZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSB0YWthcmFfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHRha2FyYV9kaXNhYmxlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0xMzYsOCArMTM4LDggQEAKIAkJdGFrYXJhX3VwZGF0ZV9pcnFfaHcoaSwgLTEpOwogCiAJZm9yIChpID0gMTY7IGkgPCAxMjg7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZ0YWthcmFfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCX0KIAogCWNvbW1vbl9pbml0X2lzYV9kbWEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c190aXRhbi5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKaW5kZXggZTAyNDk0Yi4uZjZjMTA4YSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKQEAgLTExMiw4ICsxMTIsOSBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXRpdGFuX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3RpdGFuX2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJc3Bpbl9sb2NrKCZ0aXRhbl9pcnFfbG9jayk7CiAJdGl0YW5fY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCAoaXJxIC0gMTYpOwogCXRpdGFuX3VwZGF0ZV9pcnFfaHcodGl0YW5fY2FjaGVkX2lycV9tYXNrKTsKQEAgLTEyMSw4ICsxMjIsOSBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXRpdGFuX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit0aXRhbl9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAlzcGluX2xvY2soJnRpdGFuX2lycV9sb2NrKTsKIAl0aXRhbl9jYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGlycSAtIDE2KSk7CiAJdGl0YW5fdXBkYXRlX2lycV9odyh0aXRhbl9jYWNoZWRfaXJxX21hc2spOwpAQCAtMTQ0LDcgKzE0Niw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLXRpdGFuX3NldF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KQordGl0YW5fc2V0X2lycV9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSwKKwkJICAgICAgIGJvb2wgZm9yY2UpCiB7IAogCXNwaW5fbG9jaygmdGl0YW5faXJxX2xvY2spOwogCXRpdGFuX2NwdV9zZXRfaXJxX2FmZmluaXR5KGlycSAtIDE2LCAqYWZmaW5pdHkpOwpAQCAtMTc1LDE3ICsxNzgsMTcgQEAKIHsKIAlsb25nIGk7CiAJZm9yIChpID0gaW1pbjsgaSA8PSBpbWF4OyArK2kpIHsKLQkJaXJxX3RvX2Rlc2MoaSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCBvcHMsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCX0KIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB0aXRhbl9pcnFfdHlwZSA9IHsKLSAgICAgICAubmFtZQkJPSAiVElUQU4iLAotICAgICAgIC51bm1hc2sJCT0gdGl0YW5fZW5hYmxlX2lycSwKLSAgICAgICAubWFzawkJPSB0aXRhbl9kaXNhYmxlX2lycSwKLSAgICAgICAubWFza19hY2sJPSB0aXRhbl9kaXNhYmxlX2lycSwKLSAgICAgICAuc2V0X2FmZmluaXR5CT0gdGl0YW5fc2V0X2lycV9hZmZpbml0eSwKKyAgICAgICAubmFtZQkJCT0gIlRJVEFOIiwKKyAgICAgICAuaXJxX3VubWFzawkJPSB0aXRhbl9lbmFibGVfaXJxLAorICAgICAgIC5pcnFfbWFzawkJPSB0aXRhbl9kaXNhYmxlX2lycSwKKyAgICAgICAuaXJxX21hc2tfYWNrCQk9IHRpdGFuX2Rpc2FibGVfaXJxLAorICAgICAgIC5pcnFfc2V0X2FmZmluaXR5CT0gdGl0YW5fc2V0X2lycV9hZmZpbml0eSwKIH07CiAKIHN0YXRpYyBpcnFyZXR1cm5fdApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3dpbGRmaXJlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYwppbmRleCBlZWM1MjU5Li5jYTYwYTM4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYwpAQCAtMTA0LDEwICsxMDQsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXdpbGRmaXJlX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3dpbGRmaXJlX2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CisKIAlpZiAoaXJxIDwgMTYpCi0JCWk4MjU5YV9lbmFibGVfaXJxKGlycSk7CisJCWk4MjU5YV9lbmFibGVfaXJxKGQpOwogCiAJc3Bpbl9sb2NrKCZ3aWxkZmlyZV9pcnFfbG9jayk7CiAJc2V0X2JpdChpcnEsICZjYWNoZWRfaXJxX21hc2spOwpAQCAtMTE2LDEwICsxMTgsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXdpbGRmaXJlX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit3aWxkZmlyZV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKKwogCWlmIChpcnEgPCAxNikKLQkJaTgyNTlhX2Rpc2FibGVfaXJxKGlycSk7CisJCWk4MjU5YV9kaXNhYmxlX2lycShkKTsKIAogCXNwaW5fbG9jaygmd2lsZGZpcmVfaXJxX2xvY2spOwogCWNsZWFyX2JpdChpcnEsICZjYWNoZWRfaXJxX21hc2spOwpAQCAtMTI4LDEwICsxMzIsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXdpbGRmaXJlX21hc2tfYW5kX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3dpbGRmaXJlX21hc2tfYW5kX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CisKIAlpZiAoaXJxIDwgMTYpCi0JCWk4MjU5YV9tYXNrX2FuZF9hY2tfaXJxKGlycSk7CisJCWk4MjU5YV9tYXNrX2FuZF9hY2tfaXJxKGQpOwogCiAJc3Bpbl9sb2NrKCZ3aWxkZmlyZV9pcnFfbG9jayk7CiAJY2xlYXJfYml0KGlycSwgJmNhY2hlZF9pcnFfbWFzayk7CkBAIC0xNDEsOSArMTQ3LDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB3aWxkZmlyZV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiV0lMREZJUkUiLAotCS51bm1hc2sJCT0gd2lsZGZpcmVfZW5hYmxlX2lycSwKLQkubWFzawkJPSB3aWxkZmlyZV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSB3aWxkZmlyZV9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gd2lsZGZpcmVfZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSB3aWxkZmlyZV9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gd2lsZGZpcmVfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdApAQCAtMTc3LDIxICsxODMsMjEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkgewogCQlpZiAoaSA9PSAyKQogCQkJY29udGludWU7Ci0JCWlycV90b19kZXNjKGkraXJxX2JpYXMpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaStpcnFfYmlhcywgJndpbGRmaXJlX2lycV90eXBlLAogCQkJaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGkgKyBpcnFfYmlhcywgSVJRX0xFVkVMKTsKIAl9CiAKLQlpcnFfdG9fZGVzYygzNitpcnFfYmlhcyktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKDM2K2lycV9iaWFzLCAmd2lsZGZpcmVfaXJxX3R5cGUsCiAJCWhhbmRsZV9sZXZlbF9pcnEpOworCWlycV9zZXRfc3RhdHVzX2ZsYWdzKDM2ICsgaXJxX2JpYXMsIElSUV9MRVZFTCk7CiAJZm9yIChpID0gNDA7IGkgPCA2NDsgKytpKSB7Ci0JCWlycV90b19kZXNjKGkraXJxX2JpYXMpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaStpcnFfYmlhcywgJndpbGRmaXJlX2lycV90eXBlLAogCQkJaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGkgKyBpcnFfYmlhcywgSVJRX0xFVkVMKTsKIAl9CiAKLQlzZXR1cF9pcnEoMzIraXJxX2JpYXMsICZpc2FfZW5hYmxlKTsJCisJc2V0dXBfaXJxKDMyK2lycV9iaWFzLCAmaXNhX2VuYWJsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggNWNmZjE2NS4uMzhiZjY4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAlib29sICJGb290QnJpZGdlIgogCXNlbGVjdCBDUFVfU0ExMTAKIAlzZWxlY3QgRk9PVEJSSURHRQotCXNlbGVjdCBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJaGVscAogCSAgU3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgREMyMTI4NSBjb21wYW5pb24gY2hpcAogCSAgKCJGb290QnJpZGdlIiksIHN1Y2ggYXMgdGhlIFNpbXRlYyBDQVRTIGFuZCB0aGUgUmViZWwgTmV0V2luZGVyLgpAQCAtODc1LDYgKzg3NSwxNiBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFNUJ3MgU1BFQXIgcGxhdGZvcm0gKFNQRUFyM3h4LCBTUEVBcjZ4eCBhbmQgU1BFQXIxM3h4KS4KIAorY29uZmlnIEFSQ0hfVlQ4NTAwCisJYm9vbCAiVklBL1dvbmRlck1lZGlhIDg1eHgiCisJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgSEFWRV9QV00KKwloZWxwCisJICBTdXBwb3J0IGZvciBWSUEvV29uZGVyTWVkaWEgVlQ4NTAwL1dNODV4eCBTeXN0ZW0tb24tQ2hpcC4KIGVuZGNob2ljZQogCiAjCkBAIC0xMDA3LDYgKzEwMTcsOCBAQAogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtdmV4cHJlc3MvS2NvbmZpZyIKIAorc291cmNlICJhcmNoL2FybS9tYWNoLXZ0ODUwMC9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtdzkweDkwMC9LY29uZmlnIgogCiAjIERlZmluaXRpb25zIHRvIG1ha2UgbGlmZSBlYXNpZXIKQEAgLTExNzcsNiArMTE4OSw1MyBAQAogCSAgdmlzaWJsZSBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb3IgcG93ZXIgY29uc3VtcHRpb24gb2YgdGhlCiAJICBwcm9jZXNzb3IuCiAKK2NvbmZpZyBBUk1fRVJSQVRBXzc1MTQ3MgorCWJvb2wgIkFSTSBlcnJhdGE6IEludGVycnVwdGVkIElDSUFMTFVJUyBtYXkgcHJldmVudCBjb21wbGV0aW9uIG9mIGJyb2FkY2FzdGVkIG9wZXJhdGlvbiIKKwlkZXBlbmRzIG9uIENQVV9WNyAmJiBTTVAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSB3b3JrYXJvdW5kIGZvciB0aGUgNzUxNDcyIENvcnRleC1BOSAocHJpb3IKKwkgIHRvIHIzcDApIGVycmF0dW0uIEFuIGludGVycnVwdGVkIElDSUFMTFVJUyBvcGVyYXRpb24gbWF5IHByZXZlbnQgdGhlCisJICBjb21wbGV0aW9uIG9mIGEgZm9sbG93aW5nIGJyb2FkY2FzdGVkIG9wZXJhdGlvbiBpZiB0aGUgc2Vjb25kCisJICBvcGVyYXRpb24gaXMgcmVjZWl2ZWQgYnkgYSBDUFUgYmVmb3JlIHRoZSBJQ0lBTExVSVMgaGFzIGNvbXBsZXRlZCwKKwkgIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gY29ycnVwdGVkIGVudHJpZXMgaW4gdGhlIGNhY2hlIG9yIFRMQi4KKworY29uZmlnIEFSTV9FUlJBVEFfNzUzOTcwCisJYm9vbCAiQVJNIGVycmF0YTogY2FjaGUgc3luYyBvcGVyYXRpb24gbWF5IGJlIGZhdWx0eSIKKwlkZXBlbmRzIG9uIENBQ0hFX1BMMzEwCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgd29ya2Fyb3VuZCBmb3IgdGhlIDc1Mzk3MCBQTDMxMCAocjNwMCkgZXJyYXR1bS4KKworCSAgVW5kZXIgc29tZSBjb25kaXRpb24gdGhlIGVmZmVjdCBvZiBjYWNoZSBzeW5jIG9wZXJhdGlvbiBvbgorCSAgdGhlIHN0b3JlIGJ1ZmZlciBzdGlsbCByZW1haW5zIHdoZW4gdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMuCisJICBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0b3JlIGJ1ZmZlciBpcyBhbHdheXMgYXNrZWQgdG8gZHJhaW4gYW5kCisJICB0aGlzIHByZXZlbnRzIGl0IGZyb20gbWVyZ2luZyBhbnkgZnVydGhlciB3cml0ZXMuIFRoZSB3b3JrYXJvdW5kCisJICBpcyB0byByZXBsYWNlIHRoZSBub3JtYWwgb2Zmc2V0IG9mIGNhY2hlIHN5bmMgb3BlcmF0aW9uICgweDczMCkKKwkgIGJ5IGFub3RoZXIgb2Zmc2V0IHRhcmdldGluZyBhbiB1bm1hcHBlZCBQTDMxMCByZWdpc3RlciAweDc0MC4KKwkgIFRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgY2FjaGUgc3luYyBvcGVyYXRpb246IHN0b3JlIGJ1ZmZlcgorCSAgZHJhaW4gYW5kIHdhaXRpbmcgZm9yIGFsbCBidWZmZXJzIGVtcHR5LgorCitjb25maWcgQVJNX0VSUkFUQV83NTQzMjIKKwlib29sICJBUk0gZXJyYXRhOiBwb3NzaWJsZSBmYXVsdHkgTU1VIHRyYW5zbGF0aW9ucyBmb2xsb3dpbmcgYW4gQVNJRCBzd2l0Y2giCisJZGVwZW5kcyBvbiBDUFVfVjcKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSB3b3JrYXJvdW5kIGZvciB0aGUgNzU0MzIyIENvcnRleC1BOSAocjJwKiwKKwkgIHIzcCopIGVycmF0dW0uIEEgc3BlY3VsYXRpdmUgbWVtb3J5IGFjY2VzcyBtYXkgY2F1c2UgYSBwYWdlIHRhYmxlIHdhbGsKKwkgIHdoaWNoIHN0YXJ0cyBwcmlvciB0byBhbiBBU0lEIHN3aXRjaCBidXQgY29tcGxldGVzIGFmdGVyd2FyZHMuIFRoaXMKKwkgIGNhbiBwb3B1bGF0ZSB0aGUgbWljcm8tVExCIHdpdGggYSBzdGFsZSBlbnRyeSB3aGljaCBtYXkgYmUgaGl0IHdpdGgKKwkgIHRoZSBuZXcgQVNJRC4gVGhpcyB3b3JrYXJvdW5kIHBsYWNlcyB0d28gZHNiIGluc3RydWN0aW9ucyBpbiB0aGUgbW0KKwkgIHN3aXRjaGluZyBjb2RlIHNvIHRoYXQgbm8gcGFnZSB0YWJsZSB3YWxrcyBjYW4gY3Jvc3MgdGhlIEFTSUQgc3dpdGNoLgorCitjb25maWcgQVJNX0VSUkFUQV83NTQzMjcKKwlib29sICJBUk0gZXJyYXRhOiBubyBhdXRvbWF0aWMgU3RvcmUgQnVmZmVyIGRyYWluIgorCWRlcGVuZHMgb24gQ1BVX1Y3ICYmIFNNUAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHdvcmthcm91bmQgZm9yIHRoZSA3NTQzMjcgQ29ydGV4LUE5IChwcmlvciB0bworCSAgcjJwMCkgZXJyYXR1bS4gVGhlIFN0b3JlIEJ1ZmZlciBkb2VzIG5vdCBoYXZlIGFueSBhdXRvbWF0aWMgZHJhaW5pbmcKKwkgIG1lY2hhbmlzbSBhbmQgdGhlcmVmb3JlIGEgbGl2ZWxvY2sgbWF5IG9jY3VyIGlmIGFuIGV4dGVybmFsIGFnZW50CisJICBjb250aW51b3VzbHkgcG9sbHMgYSBtZW1vcnkgbG9jYXRpb24gd2FpdGluZyB0byBvYnNlcnZlIGFuIHVwZGF0ZS4KKwkgIFRoaXMgd29ya2Fyb3VuZCBkZWZpbmVzIGNwdV9yZWxheCgpIGFzIHNtcF9tYigpLCBwcmV2ZW50aW5nIGNvcnJlY3RseQorCSAgd3JpdHRlbiBwb2xsaW5nIGxvb3BzIGZyb20gZGVueWluZyB2aXNpYmlsaXR5IG9mIHVwZGF0ZXMgdG8gbWVtb3J5LgorCiBlbmRtZW51CiAKIHNvdXJjZSAiYXJjaC9hcm0vY29tbW9uL0tjb25maWciCkBAIC0xMzkxLDcgKzE0NTAsNyBAQAogCiBjb25maWcgT0FCSV9DT01QQVQKIAlib29sICJBbGxvdyBvbGQgQUJJIGJpbmFyaWVzIHRvIHJ1biB3aXRoIHRoaXMga2VybmVsIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gQUVBQkkgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBBRUFCSSAmJiBFWFBFUklNRU5UQUwgJiYgIVRIVU1CMl9LRVJORUwKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBwcmVzZXJ2ZXMgdGhlIG9sZCBzeXNjYWxsIGludGVyZmFjZSBhbG9uZyB3aXRoIHRoZQpAQCAtMTYxOSw2ICsxNjc4LDE4IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gZXhlY3V0ZSB5b3VyIGNvbXByZXNzZWQga2VybmVsIGltYWdlCiAJICAoekltYWdlKSBkaXJlY3RseSBmcm9tIFJPTSBvciBmbGFzaC4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBaQk9PVF9ST01fTU1DSUYKKwlib29sICJJbmNsdWRlIE1NQ0lGIGxvYWRlciBpbiB6SW1hZ2UgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBaQk9PVF9ST00gJiYgQVJDSF9TSDczNzIgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGV4cGVyaW1lbnRhbCBNTUNJRiBsb2FkaW5nIGNvZGUgaW4gdGhlCisJICBST00tYWJsZSB6SW1hZ2UuIFdpdGggdGhpcyBlbmFibGVkIGl0IGlzIHBvc3NpYmxlIHRvIHdyaXRlIHRoZQorCSAgdGhlIFJPTS1hYmxlIHpJbWFnZSBrZXJuZWwgaW1hZ2UgdG8gYW4gTU1DIGNhcmQgYW5kIGJvb3QgdGhlCisJICBrZXJuZWwgc3RyYWlnaHQgZnJvbSB0aGUgcmVzZXQgdmVjdG9yLiBBdCByZXNldCB0aGUgcHJvY2Vzc29yCisJICBNYXNrIFJPTSB3aWxsIGxvYWQgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHRoZSBST00tYWJsZSB6SW1hZ2UKKwkgIHdoaWNoIGluIHR1cm4gbG9hZHMgdGhlIHJlc3QgdGhlIGtlcm5lbCBpbWFnZSB0byBSQU0gdXNpbmcgdGhlCisJICBNTUNJRiBoYXJkd2FyZSBibG9jay4KKwogY29uZmlnIENNRExJTkUKIAlzdHJpbmcgIkRlZmF1bHQga2VybmVsIGNvbW1hbmQgc3RyaW5nIgogCWRlZmF1bHQgIiIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggYzIyYzFhZC4uY2Q1NmM5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTE1LDcgKzE1LDcgQEAKIExERkxBR1Nfdm1saW51eAkrPSAtLWJlOAogZW5kaWYKIAotT0JKQ09QWUZMQUdTCTo9LU8gYmluYXJ5IC1SIC5ub3RlIC1SIC5ub3RlLmdudS5idWlsZC1pZCAtUiAuY29tbWVudCAtUworT0JKQ09QWUZMQUdTCTo9LU8gYmluYXJ5IC1SIC5jb21tZW50IC1TCiBHWkZMQUdTCQk6PS05CiAjS0JVSUxEX0NGTEFHUwkrPS1waXBlCiAjIEV4cGxpY2l0bHkgc3BlY2lmaXkgMzItYml0IEFSTSBJU0Egc2luY2UgdG9vbGNoYWluIGRlZmF1bHQgY2FuIGJlIC1tdGh1bWI6CkBAIC0xOTAsNiArMTkwLDcgQEAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9VODUwMCkJCTo9IHV4NTAwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVkVSU0FUSUxFKQk6PSB2ZXJzYXRpbGUKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9WRVhQUkVTUykJCTo9IHZleHByZXNzCittYWNoaW5lLSQoQ09ORklHX0FSQ0hfVlQ4NTAwKQkJOj0gdnQ4NTAwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVzkwWDkwMCkJCTo9IHc5MHg5MDAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9OVUM5M1gpCQk6PSBudWM5M3gKIG1hY2hpbmUtJChDT05GSUdfRk9PVEJSSURHRSkJCTo9IGZvb3RicmlkZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC8uZ2l0aWdub3JlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkLy5naXRpZ25vcmUKaW5kZXggYWIyMDRkYi4uYzYwMjg5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkLy5naXRpZ25vcmUKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkLy5naXRpZ25vcmUKQEAgLTEsMyArMSw3IEBACiBmb250LmMKLXBpZ2d5Lmd6CitsaWIxZnVuY3MuUworcGlnZ3kuZ3ppcAorcGlnZ3kubHpvCitwaWdneS5sem1hCit2bWxpbnV4CiB2bWxpbnV4LmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDBhOGY3NDguLjVmM2ExNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTQsOSArNCwyMCBAQAogIyBjcmVhdGUgYSBjb21wcmVzc2VkIHZtbGludXogaW1hZ2UgZnJvbSB0aGUgb3JpZ2luYWwgdm1saW51eAogIwogCitPQkpTCQk9CisKKyMgRW5zdXJlIHRoYXQgbW1jaWYgbG9hZGVyIGNvZGUgYXBwZWFycyBlYXJseSBpbiB0aGUgaW1hZ2UKKyMgdG8gbWluaW1pc2UgdGhhdCBudW1iZXIgb2YgYm9ja3MgdGhhdCBoYXZlIHRvIGJlIHJlYWQgaW4KKyMgb3JkZXIgdG8gbG9hZCBpdC4KK2lmZXEgKCQoQ09ORklHX1pCT09UX1JPTV9NTUNJRikseSkKK2lmZXEgKCQoQ09ORklHX0FSQ0hfU0g3MzcyKSx5KQorT0JKUwkJKz0gbW1jaWYtc2g3MzcyLm8KK2VuZGlmCitlbmRpZgorCiBBRkxBR1NfaGVhZC5vICs9IC1EVEVYVF9PRkZTRVQ9JChURVhUX09GRlNFVCkKIEhFQUQJPSBoZWFkLm8KLU9CSlMJPSBtaXNjLm8gZGVjb21wcmVzcy5vCitPQkpTCSs9IG1pc2MubyBkZWNvbXByZXNzLm8KIEZPTlRDCT0gJChzcmN0cmVlKS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9hY29ybl84eDguYwogCiAjCkBAIC0yOSw2ICs0MCwxMCBAQAogT0JKUwkJKz0gaGVhZC1zYTExMDAubwogZW5kaWYKIAoraWZlcSAoJChDT05GSUdfQVJDSF9WVDg1MDApLHkpCitPQkpTCQkrPSBoZWFkLXZ0ODUwMC5vCitlbmRpZgorCiBpZmVxICgkKENPTkZJR19DUFVfWFNDQUxFKSx5KQogT0JKUwkJKz0gaGVhZC14c2NhbGUubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNobW9iaWxlLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1zaG1vYmlsZS5TCmluZGV4IDMwOTczYjcuLmM5NDNkMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNobW9iaWxlLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2htb2JpbGUuUwpAQCAtMjUsNiArMjUsMzYgQEAKIAkvKiBsb2FkIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGNvZGUgKi8KICNpbmNsdWRlIDxtYWNoL3pib290Lmg+CiAKKyNpZmRlZiBDT05GSUdfWkJPT1RfUk9NX01NQ0lGCisJLyogTG9hZCBpbWFnZSBmcm9tIE1NQyAqLworCWFkcglzcCwgX190bXBfc3RhY2sgKyAxMjgKKwlsZHIJcjAsIF9faW1hZ2Vfc3RhcnQKKwlsZHIJcjEsIF9faW1hZ2VfZW5kCisJc3VicwlyMSwgcjEsIHIwCisJbGRyCXIwLCBfX2xvYWRfYmFzZQorCWJsCW1tY2lmX2xvYWRlcgorCisJLyogSnVtcCB0byBsb2FkZWQgY29kZSAqLworCWxkcglyMCwgX19sb2FkZWQKKwlsZHIJcjEsIF9faW1hZ2Vfc3RhcnQKKwlzdWIJcjAsIHIwLCByMQorCWxkcglyMSwgX19sb2FkX2Jhc2UKKwlhZGQJcGMsIHIwLCByMQorCitfX2ltYWdlX3N0YXJ0OgorCS5sb25nCV9zdGFydAorX19pbWFnZV9lbmQ6CisJLmxvbmcJX2dvdF9lbmQKK19fbG9hZF9iYXNlOgorCS5sb25nCUNPTkZJR19NRU1PUllfU1RBUlQgKyAweDAyMDAwMDAwIEAgTG9hZCBhdCAzMk1iIGludG8gU0RSQU0KK19fbG9hZGVkOgorCS5sb25nCV9fY29udGludWUKKwkuYWxpZ24KK19fdG1wX3N0YWNrOgorCS5zcGFjZQkxMjgKK19fY29udGludWU6CisjZW5kaWYgLyogQ09ORklHX1pCT09UX1JPTV9NTUNJRiAqLworCiAJYgkxZgogX19hdGFnczpAIHRhZyAjMQogCS5sb25nCTEyCQkJQCB0YWctPmhkci5zaXplID0gdGFnX3NpemUodGFnX2NvcmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtdnQ4NTAwLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC12dDg1MDAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGMxZTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtdnQ4NTAwLlMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXZ0ODUwMC5TCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBWSUEgVlQ4NTAwIHNwZWNpZmljIHR3ZWFrcy4gVGhpcyBpcyBtZXJnZWQgaW50byBoZWFkLlMgYnkgdGhlIGxpbmtlci4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisJCS5zZWN0aW9uICAgICAgICAiLnN0YXJ0IiwgImF4IgorCitfX1ZUODUwMF9zdGFydDoKKwlAIENvbXBhcmUgdGhlIFNDQyBJRCByZWdpc3RlciBhZ2FpbnN0IGEgbGlzdCBvZiBrbm93biB2YWx1ZXMKKwlsZHIJcjEsIC5TQ0NJRAorCWxkcglyMywgW3IxXQorCisJQCBWVDg1MDAgb3ZlcnJpZGUKKwlsZHIJcjQsIC5WVDg1MDBTQ0MKKwljbXAJcjMsIHI0CisJbGRyZXEJcjcsIC5JRF9CVjA3CisJYmVxCS5MZW5kdnQ4NTAwCisKKwlAIFdNODUwNSBvdmVycmlkZQorCWxkcglyNCwgLldNODUwNVNDQworCWNtcAlyMywgcjQKKwlsZHJlcQlyNywgLklEXzg1MDUKKwliZXEJLkxlbmR2dDg1MDAKKworCUAgT3RoZXJ3aXNlLCBsZWF2ZSB0aGUgYm9vdGxvYWRlcidzIG1hY2hpbmUgaWQgdW50b3VjaGVkCisKKy5TQ0NJRDoKKwkud29yZAkweGQ4MTIwMDAwCisuVlQ4NTAwU0NDOgorCS53b3JkCTB4MzQwMDAxMDIKKy5XTTg1MDVTQ0M6CisJLndvcmQJMHgzNDI2MDEwMworCisuSURfQlYwNzoKKwkud29yZAlNQUNIX1RZUEVfQlYwNworLklEXzg1MDU6CisJLndvcmQJTUFDSF9UWVBFX1dNODUwNV83SU5fTkVUQk9PSworCisuTGVuZHZ0ODUwMDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9tbWNpZi1zaDczNzIuYyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9tbWNpZi1zaDczNzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjE4MGFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21tY2lmLXNoNzM3Mi5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBzaDczNzIgTU1DSUYgbG9hZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1hZ251cyBEYW1tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ltb24gSG9ybWFuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tYy9zaF9tbWNpZi5oPgorI2luY2x1ZGUgPG1hY2gvbW1jaWYuaD4KKworI2RlZmluZSBNTUNJRl9CQVNFICAgICAgKHZvaWQgX19pb21lbSAqKTB4ZTZiZDAwMDAKKworI2RlZmluZSBQT1JUODRDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1NAorI2RlZmluZSBQT1JUODVDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1NQorI2RlZmluZSBQT1JUODZDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1NgorI2RlZmluZSBQT1JUODdDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1NworI2RlZmluZSBQT1JUODhDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1OAorI2RlZmluZSBQT1JUODlDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1OQorI2RlZmluZSBQT1JUOTBDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1YQorI2RlZmluZSBQT1JUOTFDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1YgorI2RlZmluZSBQT1JUOTJDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1YworI2RlZmluZSBQT1JUOTlDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA2MworCisjZGVmaW5lIFNNU1RQQ1IzCSh2b2lkIF9faW9tZW0gKikweGU2MTUwMTNjCisKKy8qIFNINzM3MiBzcGVjaWZpYyBNTUNJRiBsb2FkZXIKKyAqCisgKiBsb2FkcyB0aGUgekltYWdlIGZyb20gYW4gTU1DIGNhcmQgc3RhcnRpbmcgZnJvbSBibG9jayAxLgorICoKKyAqIFRoZSBpbWFnZSBtdXN0IGJlIHN0YXJ0IHdpdGggYSB2cmw0IGhlYWRlciBhbmQKKyAqIHRoZSB6SW1hZ2UgbXVzdCBzdGFydCBhdCBvZmZzZXQgNTEyIG9mIHRoZSBpbWFnZS4gVGhhdCBpcywKKyAqIGF0IGJsb2NrIDIgKD1ieXRlIDEwMjQpIG9uIHRoZSBtZWRpYQorICoKKyAqIFVzZSB0aGUgZm9sbG93aW5nIGxpbmUgdG8gd3JpdGUgdGhlIHZybDQgZm9ybWF0ZWQgekltYWdlCisgKiB0byBhbiBNTUMgY2FyZAorICogIyBkZCBpZj12cmw0Lm91dCBvZj0vZGV2L3NkeCBicz01MTIgc2Vlaz0xCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBtbWNpZl9sb2FkZXIodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwltbWNpZl9pbml0X3Byb2dyZXNzKCk7CisJbW1jaWZfdXBkYXRlX3Byb2dyZXNzKE1NQ0lGX1BST0dSRVNTX0VOVEVSKTsKKworCS8qIEluaXRpYWxpc2UgTU1DCisJICogcmVnaXN0ZXJzOiBQT1JUODRDUi1QT1JUOTJDUgorCSAqICAgICAgICAgICAgKE1NQ0QwXzAtTU1DRDBfNyxNTUNDTUQwIENvbnRyb2wpCisJICogdmFsdWU6IDB4MDQgLSBzZWxlY3QgZnVuY3Rpb24gNAorCSAqLworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg0Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg1Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg2Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg3Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg4Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg5Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDkwQ1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDkxQ1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDkyQ1IpOworCisJLyogSW5pdGlhbGlzZSBNTUMKKwkgKiByZWdpc3RlcnM6IFBPUlQ5OUNSIChNTUNDTEswIENvbnRyb2wpCisJICogdmFsdWU6IDB4MTAgfCAweDA0IC0gZW5hYmxlIG91dHB1dCB8IHNlbGVjdCBmdW5jdGlvbiA0CisJICovCisJX19yYXdfd3JpdGViKDB4MTQsIFBPUlQ5OUNSKTsKKworCS8qIEVuYWJsZSBjbG9jayB0byBNTUMgaGFyZHdhcmUgYmxvY2sgKi8KKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoU01TVFBDUjMpICYgfigxIDw8IDEyKSwgU01TVFBDUjMpOworCisJbW1jaWZfdXBkYXRlX3Byb2dyZXNzKE1NQ0lGX1BST0dSRVNTX0lOSVQpOworCisJLyogc2V0dXAgTU1DSUYgaGFyZHdhcmUgKi8KKwlzaF9tbWNpZl9ib290X2luaXQoTU1DSUZfQkFTRSk7CisKKwltbWNpZl91cGRhdGVfcHJvZ3Jlc3MoTU1DSUZfUFJPR1JFU1NfTE9BRCk7CisKKwkvKiBsb2FkIGtlcm5lbCB2aWEgTU1DSUYgaW50ZXJmYWNlICovCisJc2hfbW1jaWZfYm9vdF9kb19yZWFkKE1NQ0lGX0JBU0UsIDIsIC8qIEtlcm5lbCBpcyBhdCBibG9jayAyICovCisJCQkgICAgICAobGVuICsgU0hfTU1DSUZfQkJTIC0gMSkgLyBTSF9NTUNJRl9CQlMsIGJ1Zik7CisKKworCS8qIERpc2FibGUgY2xvY2sgdG8gTU1DIGhhcmR3YXJlIGJsb2NrICovCisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNNU1RQQ1IzKSAmICgxIDw8IDEyKSwgU01TVFBDUjMpOworCisJbW1jaWZfdXBkYXRlX3Byb2dyZXNzKE1NQ0lGX1BST0dSRVNTX0RPTkUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL0tjb25maWcgYi9hcmNoL2FybS9jb21tb24vS2NvbmZpZwppbmRleCA3Nzg2NTVmLi5lYTVlZTRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vS2NvbmZpZworKysgYi9hcmNoL2FybS9jb21tb24vS2NvbmZpZwpAQCAtNiw2ICs2LDggQEAKIAogY29uZmlnIEFSTV9WSUNfTlIKIAlpbnQKKwlkZWZhdWx0IDQgaWYgQVJDSF9TNVBWMjEwCisJZGVmYXVsdCAzIGlmIEFSQ0hfUzVQNjQ0MiB8fCBBUkNIX1M1UEMxMDAKIAlkZWZhdWx0IDIKIAlkZXBlbmRzIG9uIEFSTV9WSUMKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggM2FjZDhmYS4uMThhNTY2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMTIsNyArMTIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisjaW5jbHVkZSA8YXNtL2dsdWUtY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vc2htcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vY2FjaGV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL291dGVyY2FjaGUuaD4KQEAgLTIwLDEyMyArMjAsNiBAQAogI2RlZmluZSBDQUNIRV9DT0xPVVIodmFkZHIpCSgodmFkZHIgJiAoU0hNTEJBIC0gMSkpID4+IFBBR0VfU0hJRlQpCiAKIC8qCi0gKglDYWNoZSBNb2RlbAotICoJPT09PT09PT09PT0KLSAqLwotI3VuZGVmIF9DQUNIRQotI3VuZGVmIE1VTFRJX0NBQ0hFCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVjMpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB2MwotIyBlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVjQpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB2NAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTIwVCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyMlQpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTI1VCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTEwMjApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfQVJNMTAyNikKLSMgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZBNTI2KQotIyBpZmRlZiBfQ0FDSEUKLSMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCi0jIGVsc2UKLSMgIGRlZmluZSBfQ0FDSEUgZmEKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyNlQpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSBhcm05MjYKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTk0MFQpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSBhcm05NDAKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTk0NkUpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSBhcm05NDYKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0NBQ0hFX1Y0V0IpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB2NHdiCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9YU0NBTEUpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB4c2NhbGUKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQzMpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB4c2MzCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NT0hBV0spCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSBtb2hhd2sKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZFUk9DRU9OKQotIyBkZWZpbmUgTVVMVElfQ0FDSEUgMQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfVjYpCi0vLyMgaWZkZWYgX0NBQ0hFCi0jICBkZWZpbmUgTVVMVElfQ0FDSEUgMQotLy8jIGVsc2UKLS8vIyAgZGVmaW5lIF9DQUNIRSB2NgotLy8jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9WNykKLS8vIyBpZmRlZiBfQ0FDSEUKLSMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCi0vLyMgZWxzZQotLy8jICBkZWZpbmUgX0NBQ0hFIHY3Ci0vLyMgZW5kaWYKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX0NBQ0hFKSAmJiAhZGVmaW5lZChNVUxUSV9DQUNIRSkKLSNlcnJvciBVbmtub3duIGNhY2hlIG1haW50YWluZW5jZSBtb2RlbAotI2VuZGlmCi0KLS8qCiAgKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwYWdlIHBvaW50ZWQgdG8gYnkgYSBwdGUgaXMgY2xlYW4KICAqIGFuZCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuaW5nIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gdGhlIHVzZXIuCiAgKi8KQEAgLTI0OSwxOSArMTMyLDExIEBACiAgKiB2aXNpYmxlIHRvIHRoZSBDUFUuCiAgKi8KICNkZWZpbmUgZG1hY19tYXBfYXJlYQkJCWNwdV9jYWNoZS5kbWFfbWFwX2FyZWEKLSNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQljcHVfY2FjaGUuZG1hX3VubWFwX2FyZWEKKyNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQkJY3B1X2NhY2hlLmRtYV91bm1hcF9hcmVhCiAjZGVmaW5lIGRtYWNfZmx1c2hfcmFuZ2UJCWNwdV9jYWNoZS5kbWFfZmx1c2hfcmFuZ2UKIAogI2Vsc2UKIAotI2RlZmluZSBfX2NwdWNfZmx1c2hfaWNhY2hlX2FsbAkJX19nbHVlKF9DQUNIRSxfZmx1c2hfaWNhY2hlX2FsbCkKLSNkZWZpbmUgX19jcHVjX2ZsdXNoX2tlcm5fYWxsCQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF9rZXJuX2NhY2hlX2FsbCkKLSNkZWZpbmUgX19jcHVjX2ZsdXNoX3VzZXJfYWxsCQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF91c2VyX2NhY2hlX2FsbCkKLSNkZWZpbmUgX19jcHVjX2ZsdXNoX3VzZXJfcmFuZ2UJCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCi0jZGVmaW5lIF9fY3B1Y19jb2hlcmVudF9rZXJuX3JhbmdlCV9fZ2x1ZShfQ0FDSEUsX2NvaGVyZW50X2tlcm5fcmFuZ2UpCi0jZGVmaW5lIF9fY3B1Y19jb2hlcmVudF91c2VyX3JhbmdlCV9fZ2x1ZShfQ0FDSEUsX2NvaGVyZW50X3VzZXJfcmFuZ2UpCi0jZGVmaW5lIF9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQotCiBleHRlcm4gdm9pZCBfX2NwdWNfZmx1c2hfaWNhY2hlX2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF9rZXJuX2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF91c2VyX2FsbCh2b2lkKTsKQEAgLTI3NiwxMCArMTUxLDYgQEAKICAqIGlzIHZpc2libGUgdG8gRE1BLCBvciBkYXRhIHdyaXR0ZW4gYnkgRE1BIHRvIHN5c3RlbSBtZW1vcnkgaXMKICAqIHZpc2libGUgdG8gdGhlIENQVS4KICAqLwotI2RlZmluZSBkbWFjX21hcF9hcmVhCQkJX19nbHVlKF9DQUNIRSxfZG1hX21hcF9hcmVhKQotI2RlZmluZSBkbWFjX3VubWFwX2FyZWEJCV9fZ2x1ZShfQ0FDSEUsX2RtYV91bm1hcF9hcmVhKQotI2RlZmluZSBkbWFjX2ZsdXNoX3JhbmdlCQlfX2dsdWUoX0NBQ0hFLF9kbWFfZmx1c2hfcmFuZ2UpCi0KIGV4dGVybiB2b2lkIGRtYWNfbWFwX2FyZWEoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CiBleHRlcm4gdm9pZCBkbWFjX3VubWFwX2FyZWEoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CiBleHRlcm4gdm9pZCBkbWFjX2ZsdXNoX3JhbmdlKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdS1tdWx0aTMyLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUtbXVsdGkzMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmI1YjBiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdS1tdWx0aTMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdS1tdWx0aTMyLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIFJ1c3NlbGwgS2luZwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi1zdHJ1Y3QgbW1fc3RydWN0OwotCi0vKgotICogRG9uJ3QgY2hhbmdlIHRoaXMgc3RydWN0dXJlIC0gQVNNIGNvZGUKLSAqIHJlbGllcyBvbiBpdC4KLSAqLwotZXh0ZXJuIHN0cnVjdCBwcm9jZXNzb3IgewotCS8qIE1JU0MKLQkgKiBnZXQgZGF0YSBhYm9ydCBhZGRyZXNzL2ZsYWdzCi0JICovCi0Jdm9pZCAoKl9kYXRhX2Fib3J0KSh1bnNpZ25lZCBsb25nIHBjKTsKLQkvKgotCSAqIFJldHJpZXZlIHByZWZldGNoIGZhdWx0IGFkZHJlc3MKLQkgKi8KLQl1bnNpZ25lZCBsb25nICgqX3ByZWZldGNoX2Fib3J0KSh1bnNpZ25lZCBsb25nIGxyKTsKLQkvKgotCSAqIFNldCB1cCBhbnkgcHJvY2Vzc29yIHNwZWNpZmljcwotCSAqLwotCXZvaWQgKCpfcHJvY19pbml0KSh2b2lkKTsKLQkvKgotCSAqIERpc2FibGUgYW55IHByb2Nlc3NvciBzcGVjaWZpY3MKLQkgKi8KLQl2b2lkICgqX3Byb2NfZmluKSh2b2lkKTsKLQkvKgotCSAqIFNwZWNpYWwgc3R1ZmYgZm9yIGEgcmVzZXQKLQkgKi8KLQl2b2lkICgqcmVzZXQpKHVuc2lnbmVkIGxvbmcgYWRkcikgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKLQkvKgotCSAqIElkbGUgdGhlIHByb2Nlc3NvcgotCSAqLwotCWludCAoKl9kb19pZGxlKSh2b2lkKTsKLQkvKgotCSAqIFByb2Nlc3NvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWMKLQkgKi8KLQkvKgotCSAqIGNsZWFuIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlIGZyb20gdGhlCi0JICogRC1jYWNoZSB3aXRob3V0IGZsdXNoaW5nIHRoZSBjYWNoZS4KLQkgKi8KLQl2b2lkICgqZGNhY2hlX2NsZWFuX2FyZWEpKHZvaWQgKmFkZHIsIGludCBzaXplKTsKLQotCS8qCi0JICogU2V0IHRoZSBwYWdlIHRhYmxlCi0JICovCi0Jdm9pZCAoKnN3aXRjaF9tbSkodW5zaWduZWQgbG9uZyBwZ2RfcGh5cywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotCS8qCi0JICogU2V0IGEgcG9zc2libHkgZXh0ZW5kZWQgUFRFLiAgTm9uLWV4dGVuZGVkIFBURXMgc2hvdWxkCi0JICogaWdub3JlICdleHQnLgotCSAqLwotCXZvaWQgKCpzZXRfcHRlX2V4dCkocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgdW5zaWduZWQgaW50IGV4dCk7Ci19IHByb2Nlc3NvcjsKLQotI2RlZmluZSBjcHVfcHJvY19pbml0KCkJCQlwcm9jZXNzb3IuX3Byb2NfaW5pdCgpCi0jZGVmaW5lIGNwdV9wcm9jX2ZpbigpCQkJcHJvY2Vzc29yLl9wcm9jX2ZpbigpCi0jZGVmaW5lIGNwdV9yZXNldChhZGRyKQkJCXByb2Nlc3Nvci5yZXNldChhZGRyKQotI2RlZmluZSBjcHVfZG9faWRsZSgpCQkJcHJvY2Vzc29yLl9kb19pZGxlKCkKLSNkZWZpbmUgY3B1X2RjYWNoZV9jbGVhbl9hcmVhKGFkZHIsc3opCXByb2Nlc3Nvci5kY2FjaGVfY2xlYW5fYXJlYShhZGRyLHN6KQotI2RlZmluZSBjcHVfc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KQlwcm9jZXNzb3Iuc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KQotI2RlZmluZSBjcHVfZG9fc3dpdGNoX21tKHBnZCxtbSkJcHJvY2Vzc29yLnN3aXRjaF9tbShwZ2QsbW0pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUtc2luZ2xlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUtc2luZ2xlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNzNhNmQyYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUtc2luZ2xlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdS1zaW5nbGUuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgUnVzc2VsbCBLaW5nCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotLyoKLSAqIFNpbmdsZSBDUFUKLSAqLwotI2lmZGVmIF9fU1REQ19fCi0jZGVmaW5lIF9fY2F0aWZ5X2ZuKG5hbWUseCkJbmFtZSMjeAotI2Vsc2UKLSNkZWZpbmUgX19jYXRpZnlfZm4obmFtZSx4KQluYW1lLyoqL3gKLSNlbmRpZgotI2RlZmluZSBfX2NwdV9mbihuYW1lLHgpCV9fY2F0aWZ5X2ZuKG5hbWUseCkKLQotLyoKLSAqIElmIHdlIGFyZSBzdXBwb3J0aW5nIG11bHRpcGxlIENQVXMsIHRoZW4gd2UgbXVzdCB1c2UgYSB0YWJsZSBvZgotICogZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRoaXMgbG90LiAgT3RoZXJ3aXNlLCB3ZSBjYW4gb3B0aW1pc2UgdGhlCi0gKiB0YWJsZSBhd2F5LgotICovCi0jZGVmaW5lIGNwdV9wcm9jX2luaXQJCQlfX2NwdV9mbihDUFVfTkFNRSxfcHJvY19pbml0KQotI2RlZmluZSBjcHVfcHJvY19maW4JCQlfX2NwdV9mbihDUFVfTkFNRSxfcHJvY19maW4pCi0jZGVmaW5lIGNwdV9yZXNldAkJCV9fY3B1X2ZuKENQVV9OQU1FLF9yZXNldCkKLSNkZWZpbmUgY3B1X2RvX2lkbGUJCQlfX2NwdV9mbihDUFVfTkFNRSxfZG9faWRsZSkKLSNkZWZpbmUgY3B1X2RjYWNoZV9jbGVhbl9hcmVhCQlfX2NwdV9mbihDUFVfTkFNRSxfZGNhY2hlX2NsZWFuX2FyZWEpCi0jZGVmaW5lIGNwdV9kb19zd2l0Y2hfbW0JCV9fY3B1X2ZuKENQVV9OQU1FLF9zd2l0Y2hfbW0pCi0jZGVmaW5lIGNwdV9zZXRfcHRlX2V4dAkJCV9fY3B1X2ZuKENQVV9OQU1FLF9zZXRfcHRlX2V4dCkKLQotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0KLXN0cnVjdCBtbV9zdHJ1Y3Q7Ci0KLS8qIGRlY2xhcmUgYWxsIHRoZSBmdW5jdGlvbnMgYXMgZXh0ZXJuICovCi1leHRlcm4gdm9pZCBjcHVfcHJvY19pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgY3B1X3Byb2NfZmluKHZvaWQpOwotZXh0ZXJuIGludCBjcHVfZG9faWRsZSh2b2lkKTsKLWV4dGVybiB2b2lkIGNwdV9kY2FjaGVfY2xlYW5fYXJlYSh2b2lkICosIGludCk7Ci1leHRlcm4gdm9pZCBjcHVfZG9fc3dpdGNoX21tKHVuc2lnbmVkIGxvbmcgcGdkX3BoeXMsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLWV4dGVybiB2b2lkIGNwdV9zZXRfcHRlX2V4dChwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgZXh0KTsKLWV4dGVybiB2b2lkIGNwdV9yZXNldCh1bnNpZ25lZCBsb25nIGFkZHIpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9mbmNweS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZm5jcHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTUzNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZm5jcHkuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogYXJjaC9hcm0vaW5jbHVkZS9hc20vZm5jcHkuaCAtIGhlbHBlciBtYWNyb3MgZm9yIGZ1bmN0aW9uIGJvZHkgY29weWluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBMaW5hcm8gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIFRoZXNlIG1hY3JvcyBhcmUgaW50ZW5kZWQgZm9yIHVzZSB3aGVuIHRoZXJlIGlzIGEgbmVlZCB0byBjb3B5IGEgbG93LWxldmVsCisgKiBmdW5jdGlvbiBib2R5IGludG8gc3BlY2lhbCBtZW1vcnkuCisgKgorICogRm9yIGV4YW1wbGUsIHdoZW4gcmVjb25maWd1cmluZyB0aGUgU0RSQU0gY29udHJvbGxlciwgdGhlIGNvZGUgZG9pbmcgdGhlCisgKiByZWNvbmZpZ3VyYXRpb24gbWF5IG5lZWQgdG8gcnVuIGZyb20gU1JBTS4KKyAqCisgKiBOT1RFOiB0aGF0IHRoZSBjb3BpZWQgZnVuY3Rpb24gYm9keSBtdXN0IGJlIGVudGlyZWx5IHNlbGYtY29udGFpbmVkIGFuZAorICogcG9zaXRpb24taW5kZXBlbmRlbnQgaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yayBwcm9wZXJseS4KKyAqCisgKiBOT1RFOiBpbiBvcmRlciBmb3IgZW1iZWRkZWQgbGl0ZXJhbHMgYW5kIGRhdGEgdG8gZ2V0IHJlZmVyZW5jZWQgY29ycmVjdGx5LAorICogdGhlIGFsaWdubWVudCBvZiBmdW5jdGlvbnMgbXVzdCBiZSBwcmVzZXJ2ZWQgd2hlbiBjb3B5aW5nLiAgVG8gZW5zdXJlIHRoaXMsCisgKiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgZm9yIGZuY3B5KCkgbXVzdCBiZSBhbGlnbmVkIHRvIGEKKyAqIG11bHRpcGxlIG9mIDggYnl0ZXM6IHlvdSB3aWxsIGJlIGdldCBhIEJVRygpIGlmIHRoaXMgY29uZGl0aW9uIGlzIG5vdCBtZXQuCisgKiBZb3Ugd2lsbCB0eXBpY2FsbHkgbmVlZCBhICIuYWxpZ24gMyIgZGlyZWN0aXZlIGluIHRoZSBhc3NlbWJsZXIgd2hlcmUgdGhlCisgKiBmdW5jdGlvbiB0byBiZSBjb3BpZWQgaXMgZGVmaW5lZCwgYW5kIGVuc3VyZSB0aGF0IHlvdXIgYWxsb2NhdG9yIGZvciB0aGUKKyAqIGRlc3RpbmF0aW9uIGJ1ZmZlciByZXR1cm5zIDgtYnl0ZS1hbGlnbmVkIHBvaW50ZXJzLgorICoKKyAqIFR5cGljYWwgdXNhZ2UgZXhhbXBsZToKKyAqCisgKiBleHRlcm4gaW50IGYoYXJncyk7CisgKiBleHRlcm4gdWludDMyX3Qgc2l6ZV9vZl9mOworICogaW50ICgqY29waWVkX2YpKGFyZ3MpOworICogdm9pZCAqc3JhbV9idWZmZXI7CisgKgorICogY29waWVkX2YgPSBmbmNweShzcmFtX2J1ZmZlciwgJmYsIHNpemVfb2ZfZik7CisgKgorICogLi4uIGxhdGVyLCBjYWxsIHRoZSBmdW5jdGlvbjogLi4uCisgKgorICogY29waWVkX2YoYXJncyk7CisgKgorICogVGhlIHNpemUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNvcGllZCBjYW4ndCBiZSBkZXRlcm1pbmVkIGZyb20gQzoKKyAqIHRoaXMgbXVzdCBiZSBkZXRlcm1pbmVkIGJ5IG90aGVyIG1lYW5zLCBzdWNoIGFzIGFkZGluZyBhc3NtYmxlciBkaXJlY3RpdmVzCisgKiBpbiB0aGUgZmlsZSB3aGVyZSBmIGlzIGRlZmluZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9GTkNQWV9ICisjZGVmaW5lIF9fQVNNX0ZOQ1BZX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vYnVnLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworLyoKKyAqIE1pbmltdW0gYWxpZ25tZW50IHJlcXVpcmVtZW50IGZvciB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMKKyAqIGZvciBmdW5jdGlvbiBjb3B5aW5nLgorICovCisjZGVmaW5lIEZOQ1BZX0FMSUdOIDgKKworI2RlZmluZSBmbmNweShkZXN0X2J1ZiwgZnVuY3AsIHNpemUpICh7CQkJCQlcCisJdWludHB0cl90IF9fZnVuY3BfYWRkcmVzczsJCQkJCVwKKwl0eXBlb2YoZnVuY3ApIF9fcmVzdWx0OwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlhc20oIiIgOiAiPXIiIChfX2Z1bmNwX2FkZHJlc3MpIDogIjAiIChmdW5jcCkpOwkJCVwKKwkJCQkJCQkJCVwKKwkvKgkJCQkJCQkJXAorCSAqIEVuc3VyZSBhbGlnbm1lbnQgb2Ygc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMsCVwKKwkgKiBkaXNyZWdhcmRpbmcgdGhlIGZ1bmN0aW9uJ3MgVGh1bWIgYml0OgkJCVwKKwkgKi8JCQkJCQkJCVwKKwlCVUdfT04oKHVpbnRwdHJfdCkoZGVzdF9idWYpICYgKEZOQ1BZX0FMSUdOIC0gMSkgfHwJCVwKKwkJKF9fZnVuY3BfYWRkcmVzcyAmIH4odWludHB0cl90KTEgJiAoRk5DUFlfQUxJR04gLSAxKSkpOwlcCisJCQkJCQkJCQlcCisJbWVtY3B5KGRlc3RfYnVmLCAodm9pZCBjb25zdCAqKShfX2Z1bmNwX2FkZHJlc3MgJiB+MSksIHNpemUpOwlcCisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKShkZXN0X2J1ZiksCQkJXAorCQkodW5zaWduZWQgbG9uZykoZGVzdF9idWYpICsgKHNpemUpKTsJCQlcCisJCQkJCQkJCQlcCisJYXNtKCIiIDogIj1yIiAoX19yZXN1bHQpCQkJCQlcCisJCTogIjAiICgodWludHB0cl90KShkZXN0X2J1ZikgfCAoX19mdW5jcF9hZGRyZXNzICYgMSkpKTsJXAorCQkJCQkJCQkJXAorCV9fcmVzdWx0OwkJCQkJCQlcCit9KQorCisjZW5kaWYgLyogIV9fQVNNX0ZOQ1BZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtY2FjaGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTkxZDM1MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtY2FjaGUuaApAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqICBhcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLWNhY2hlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBBU01fR0xVRV9DQUNIRV9ICisjZGVmaW5lIEFTTV9HTFVFX0NBQ0hFX0gKKworI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisKKy8qCisgKglDYWNoZSBNb2RlbAorICoJPT09PT09PT09PT0KKyAqLworI3VuZGVmIF9DQUNIRQorI3VuZGVmIE1VTFRJX0NBQ0hFCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVjMpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSB2MworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVjQpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSB2NAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTIwVCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyMlQpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTI1VCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTEwMjApIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfQVJNMTAyNikKKyMgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZBNTI2KQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgZmEKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyNlQpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSBhcm05MjYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTk0MFQpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSBhcm05NDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTk0NkUpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSBhcm05NDYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0NBQ0hFX1Y0V0IpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSB2NHdiCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9YU0NBTEUpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSB4c2NhbGUKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQzMpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSB4c2MzCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NT0hBV0spCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSBtb2hhd2sKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZFUk9DRU9OKQorIyBkZWZpbmUgTVVMVElfQ0FDSEUgMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfVjYpCisvLyMgaWZkZWYgX0NBQ0hFCisjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQorLy8jIGVsc2UKKy8vIyAgZGVmaW5lIF9DQUNIRSB2NgorLy8jIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9WNykKKy8vIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisvLyMgZWxzZQorLy8jICBkZWZpbmUgX0NBQ0hFIHY3CisvLyMgZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX0NBQ0hFKSAmJiAhZGVmaW5lZChNVUxUSV9DQUNIRSkKKyNlcnJvciBVbmtub3duIGNhY2hlIG1haW50YWluZW5jZSBtb2RlbAorI2VuZGlmCisKKyNpZm5kZWYgTVVMVElfQ0FDSEUKKyNkZWZpbmUgX19jcHVjX2ZsdXNoX2ljYWNoZV9hbGwJCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX2ljYWNoZV9hbGwpCisjZGVmaW5lIF9fY3B1Y19mbHVzaF9rZXJuX2FsbAkJX19nbHVlKF9DQUNIRSxfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisjZGVmaW5lIF9fY3B1Y19mbHVzaF91c2VyX2FsbAkJX19nbHVlKF9DQUNIRSxfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisjZGVmaW5lIF9fY3B1Y19mbHVzaF91c2VyX3JhbmdlCQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF91c2VyX2NhY2hlX3JhbmdlKQorI2RlZmluZSBfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZQlfX2dsdWUoX0NBQ0hFLF9jb2hlcmVudF9rZXJuX3JhbmdlKQorI2RlZmluZSBfX2NwdWNfY29oZXJlbnRfdXNlcl9yYW5nZQlfX2dsdWUoX0NBQ0hFLF9jb2hlcmVudF91c2VyX3JhbmdlKQorI2RlZmluZSBfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEJX19nbHVlKF9DQUNIRSxfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKworI2RlZmluZSBkbWFjX21hcF9hcmVhCQkJX19nbHVlKF9DQUNIRSxfZG1hX21hcF9hcmVhKQorI2RlZmluZSBkbWFjX3VubWFwX2FyZWEJCQlfX2dsdWUoX0NBQ0hFLF9kbWFfdW5tYXBfYXJlYSkKKyNkZWZpbmUgZG1hY19mbHVzaF9yYW5nZQkJX19nbHVlKF9DQUNIRSxfZG1hX2ZsdXNoX3JhbmdlKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1kZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1kZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NGQ1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLWRmLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiAgYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1kZi5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ny0xOTk5IFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgQVNNX0dMVUVfREZfSAorI2RlZmluZSBBU01fR0xVRV9ERl9ICisKKyNpbmNsdWRlIDxhc20vZ2x1ZS5oPgorCisvKgorICoJRGF0YSBBYm9ydCBNb2RlbAorICoJPT09PT09PT09PT09PT09PQorICoKKyAqCVdlIGhhdmUgdGhlIGZvbGxvd2luZyB0byBjaG9vc2UgZnJvbToKKyAqCSAgYXJtNiAgICAgICAgICAtIEFSTTYgc3R5bGUKKyAqCSAgYXJtNwkJLSBBUk03IHN0eWxlCisgKgkgIHY0X2Vhcmx5CS0gQVJNdjQgd2l0aG91dCBUaHVtYiBlYXJseSBhYm9ydCBoYW5kbGVyCisgKgkgIHY0dF9sYXRlCS0gQVJNdjQgd2l0aCBUaHVtYiBsYXRlIGFib3J0IGhhbmRsZXIKKyAqCSAgdjR0X2Vhcmx5CS0gQVJNdjQgd2l0aCBUaHVtYiBlYXJseSBhYm9ydCBoYW5kbGVyCisgKgkgIHY1dGVqX2Vhcmx5CS0gQVJNdjUgd2l0aCBUaHVtYiBhbmQgSmF2YSBlYXJseSBhYm9ydCBoYW5kbGVyCisgKgkgIHhzY2FsZQktIEFSTXY1IHdpdGggVGh1bWIgd2l0aCBYc2NhbGUgZXh0ZW5zaW9ucworICoJICB2Nl9lYXJseQktIEFSTXY2IGdlbmVyaWMgZWFybHkgYWJvcnQgaGFuZGxlcgorICoJICB2N19lYXJseQktIEFSTXY3IGdlbmVyaWMgZWFybHkgYWJvcnQgaGFuZGxlcgorICovCisjdW5kZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjdW5kZWYgTVVMVElfREFCT1JUCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNNjEwKQorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIGNwdV9hcm02X2RhdGFfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTcxMCkKKyMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfREFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiBjcHVfYXJtN19kYXRhX2Fib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQUJSVF9MVjRUCisjIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjR0X2xhdGVfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNAorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY0X2Vhcmx5X2Fib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjRUCisjIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjR0X2Vhcmx5X2Fib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjVUSgorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY1dGpfZWFybHlfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNVQKKyMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfREFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2NXRfZWFybHlfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNgorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY2X2Vhcmx5X2Fib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjcKKyMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfREFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2N19lYXJseV9hYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjZXJyb3IgVW5rbm93biBkYXRhIGFib3J0IGhhbmRsZXIgdHlwZQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1wZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1wZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODVmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXBmLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqICBhcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXBmLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBBU01fR0xVRV9QRl9ICisjZGVmaW5lIEFTTV9HTFVFX1BGX0gKKworI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisKKy8qCisgKglQcmVmZXRjaCBBYm9ydCBNb2RlbAorICoJPT09PT09PT09PT09PT09PQorICoKKyAqCVdlIGhhdmUgdGhlIGZvbGxvd2luZyB0byBjaG9vc2UgZnJvbToKKyAqCSAgbGVnYWN5CS0gbm8gSUZTUiwgbm8gSUZBUgorICoJICB2NgkJLSBBUk12NjogSUZTUiwgbm8gSUZBUgorICoJICB2NwkJLSBBUk12NzogSUZTUiBhbmQgSUZBUgorICovCisKKyN1bmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKKyN1bmRlZiBNVUxUSV9QQUJPUlQKKworI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfTEVHQUNZCisjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgbGVnYWN5X3BhYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX1Y2CisjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgdjZfcGFib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfVjcKKyMgaWZkZWYgQ1BVX1BBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfUEFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9QQUJPUlRfSEFORExFUiB2N19wYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIENQVV9QQUJPUlRfSEFORExFUgorI2Vycm9yIFVua25vd24gcHJlZmV0Y2ggYWJvcnQgaGFuZGxlciB0eXBlCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXByb2MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtcHJvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0Njk1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXByb2MuaApAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqICBhcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXByb2MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIEFTTV9HTFVFX1BST0NfSAorI2RlZmluZSBBU01fR0xVRV9QUk9DX0gKKworI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisKKy8qCisgKiBXb3JrIG91dCBpZiB3ZSBuZWVkIG11bHRpcGxlIENQVSBzdXBwb3J0CisgKi8KKyN1bmRlZiBNVUxUSV9DUFUKKyN1bmRlZiBDUFVfTkFNRQorCisvKgorICogQ1BVX05BTUUgLSB0aGUgcHJlZml4IGZvciBDUFUgcmVsYXRlZCBmdW5jdGlvbnMKKyAqLworCisjaWZkZWYgQ09ORklHX0NQVV9BUk02MTAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm02CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNN1RETUkKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03dGRtaQorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTcxMAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTcKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk03MjBUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNzIwCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNNzQwVAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTc0MAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTlURE1JCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOXRkbWkKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05MjBUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTIwCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOTIyVAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyMgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZBNTI2CisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfZmE1MjYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05MjVUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTI1CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOTI2VAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyNgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTk0MFQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05NDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05NDZFCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTQ2CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfU0ExMTAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9zYTExMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1NBMTEwMAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3NhMTEwMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIwCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNMTAyMEUKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIwZQorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjIKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIyCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNMTAyNgorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTEwMjYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9YU0NBTEUKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV94c2NhbGUKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9YU0MzCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfeHNjMworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX01PSEFXSworIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X21vaGF3aworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZFUk9DRU9OCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfZmVyb2Nlb24KKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9WNgorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3Y2CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfVjcKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV92NworIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgTVVMVElfQ1BVCisjZGVmaW5lIGNwdV9wcm9jX2luaXQJCQlfX2dsdWUoQ1BVX05BTUUsX3Byb2NfaW5pdCkKKyNkZWZpbmUgY3B1X3Byb2NfZmluCQkJX19nbHVlKENQVV9OQU1FLF9wcm9jX2ZpbikKKyNkZWZpbmUgY3B1X3Jlc2V0CQkJX19nbHVlKENQVV9OQU1FLF9yZXNldCkKKyNkZWZpbmUgY3B1X2RvX2lkbGUJCQlfX2dsdWUoQ1BVX05BTUUsX2RvX2lkbGUpCisjZGVmaW5lIGNwdV9kY2FjaGVfY2xlYW5fYXJlYQkJX19nbHVlKENQVV9OQU1FLF9kY2FjaGVfY2xlYW5fYXJlYSkKKyNkZWZpbmUgY3B1X2RvX3N3aXRjaF9tbQkJX19nbHVlKENQVV9OQU1FLF9zd2l0Y2hfbW0pCisjZGVmaW5lIGNwdV9zZXRfcHRlX2V4dAkJCV9fZ2x1ZShDUFVfTkFNRSxfc2V0X3B0ZV9leHQpCisjZGVmaW5lIGNwdV9zdXNwZW5kX3NpemUJCV9fZ2x1ZShDUFVfTkFNRSxfc3VzcGVuZF9zaXplKQorI2RlZmluZSBjcHVfZG9fc3VzcGVuZAkJCV9fZ2x1ZShDUFVfTkFNRSxfZG9fc3VzcGVuZCkKKyNkZWZpbmUgY3B1X2RvX3Jlc3VtZQkJCV9fZ2x1ZShDUFVfTkFNRSxfZG9fcmVzdW1lKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oCmluZGV4IDIzNGEzZmMuLjBlYzM1ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmgKQEAgLTE1LDcgKzE1LDYgQEAKICAqLwogI2lmZGVmIF9fS0VSTkVMX18KIAotCiAjaWZkZWYgX19TVERDX18KICNkZWZpbmUgX19fX2dsdWUobmFtZSxmbikJbmFtZSMjZm4KICNlbHNlCkBAIC0yMywxNDEgKzIyLDQgQEAKICNlbmRpZgogI2RlZmluZSBfX2dsdWUobmFtZSxmbikJCV9fX19nbHVlKG5hbWUsZm4pCiAKLQotCi0vKgotICoJRGF0YSBBYm9ydCBNb2RlbAotICoJPT09PT09PT09PT09PT09PQotICoKLSAqCVdlIGhhdmUgdGhlIGZvbGxvd2luZyB0byBjaG9vc2UgZnJvbToKLSAqCSAgYXJtNiAgICAgICAgICAtIEFSTTYgc3R5bGUKLSAqCSAgYXJtNwkJLSBBUk03IHN0eWxlCi0gKgkgIHY0X2Vhcmx5CS0gQVJNdjQgd2l0aG91dCBUaHVtYiBlYXJseSBhYm9ydCBoYW5kbGVyCi0gKgkgIHY0dF9sYXRlCS0gQVJNdjQgd2l0aCBUaHVtYiBsYXRlIGFib3J0IGhhbmRsZXIKLSAqCSAgdjR0X2Vhcmx5CS0gQVJNdjQgd2l0aCBUaHVtYiBlYXJseSBhYm9ydCBoYW5kbGVyCi0gKgkgIHY1dGVqX2Vhcmx5CS0gQVJNdjUgd2l0aCBUaHVtYiBhbmQgSmF2YSBlYXJseSBhYm9ydCBoYW5kbGVyCi0gKgkgIHhzY2FsZQktIEFSTXY1IHdpdGggVGh1bWIgd2l0aCBYc2NhbGUgZXh0ZW5zaW9ucwotICoJICB2Nl9lYXJseQktIEFSTXY2IGdlbmVyaWMgZWFybHkgYWJvcnQgaGFuZGxlcgotICoJICB2N19lYXJseQktIEFSTXY3IGdlbmVyaWMgZWFybHkgYWJvcnQgaGFuZGxlcgotICovCi0jdW5kZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jdW5kZWYgTVVMVElfREFCT1JUCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNNjEwKQotIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIGNwdV9hcm02X2RhdGFfYWJvcnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTcxMCkKLSMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfREFCT1JUIDEKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiBjcHVfYXJtN19kYXRhX2Fib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQUJSVF9MVjRUCi0jIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjR0X2xhdGVfYWJvcnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNAotIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY0X2Vhcmx5X2Fib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjRUCi0jIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjR0X2Vhcmx5X2Fib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjVUSgotIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY1dGpfZWFybHlfYWJvcnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNVQKLSMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfREFCT1JUIDEKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2NXRfZWFybHlfYWJvcnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNgotIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY2X2Vhcmx5X2Fib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjcKLSMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfREFCT1JUIDEKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2N19lYXJseV9hYm9ydAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jZXJyb3IgVW5rbm93biBkYXRhIGFib3J0IGhhbmRsZXIgdHlwZQotI2VuZGlmCi0KLS8qCi0gKglQcmVmZXRjaCBBYm9ydCBNb2RlbAotICoJPT09PT09PT09PT09PT09PQotICoKLSAqCVdlIGhhdmUgdGhlIGZvbGxvd2luZyB0byBjaG9vc2UgZnJvbToKLSAqCSAgbGVnYWN5CS0gbm8gSUZTUiwgbm8gSUZBUgotICoJICB2NgkJLSBBUk12NjogSUZTUiwgbm8gSUZBUgotICoJICB2NwkJLSBBUk12NzogSUZTUiBhbmQgSUZBUgotICovCi0KLSN1bmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKLSN1bmRlZiBNVUxUSV9QQUJPUlQKLQotI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfTEVHQUNZCi0jIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgbGVnYWN5X3BhYm9ydAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX1Y2Ci0jIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgdjZfcGFib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfVjcKLSMgaWZkZWYgQ1BVX1BBQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfUEFCT1JUIDEKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9QQUJPUlRfSEFORExFUiB2N19wYWJvcnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIENQVV9QQUJPUlRfSEFORExFUgotI2Vycm9yIFVua25vd24gcHJlZmV0Y2ggYWJvcnQgaGFuZGxlciB0eXBlCi0jZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmgKaW5kZXggNWFlZWMxZS4uMTZiZDQ4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaApAQCAtMzYsNiArMzYsNyBAQAogI2RlZmluZSBMMlgwX1JBV19JTlRSX1NUQVQJCTB4MjFDCiAjZGVmaW5lIEwyWDBfSU5UUl9DTEVBUgkJCTB4MjIwCiAjZGVmaW5lIEwyWDBfQ0FDSEVfU1lOQwkJCTB4NzMwCisjZGVmaW5lIEwyWDBfRFVNTVlfUkVHCQkJMHg3NDAKICNkZWZpbmUgTDJYMF9JTlZfTElORV9QQQkJMHg3NzAKICNkZWZpbmUgTDJYMF9JTlZfV0FZCQkJMHg3N0MKICNkZWZpbmUgTDJYMF9DTEVBTl9MSU5FX1BBCQkweDdCMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc3A4MTAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3NwODEwLmgKaW5kZXggYTEwMWYxMC4uZTBkMWMwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc3A4MTAuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zcDgxMC5oCkBAIC01MCw4ICs1MCwxNyBAQAogI2RlZmluZSBTQ1BDRUxMSUQyCQkweEZGOAogI2RlZmluZSBTQ1BDRUxMSUQzCQkweEZGQwogCisjZGVmaW5lIFNDQ1RSTF9USU1FUkVOMFNFTF9SRUZDTEsJKDAgPDwgMTUpCisjZGVmaW5lIFNDQ1RSTF9USU1FUkVOMFNFTF9USU1DTEsJKDEgPDwgMTUpCisKKyNkZWZpbmUgU0NDVFJMX1RJTUVSRU4xU0VMX1JFRkNMSwkoMCA8PCAxNykKKyNkZWZpbmUgU0NDVFJMX1RJTUVSRU4xU0VMX1RJTUNMSwkoMSA8PCAxNykKKwogc3RhdGljIGlubGluZSB2b2lkIHN5c2N0bF9zb2Z0X3Jlc2V0KHZvaWQgX19pb21lbSAqYmFzZSkKIHsKKwkvKiBzd2l0Y2ggdG8gc2xvdyBtb2RlICovCisJd3JpdGVsKDB4MiwgYmFzZSArIFNDQ1RSTCk7CisKIAkvKiB3cml0aW5nIGFueSB2YWx1ZSB0byBTQ1NZU1NUQVQgcmVnIHdpbGwgcmVzZXQgc3lzdGVtICovCiAJd3JpdGVsKDAsIGJhc2UgKyBTQ1NZU1NUQVQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMjBlMGY3Yy4uZDY2NjA1ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaApAQCAtOTUsNiArOTUsMTUgQEAKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKWFkZHI7CiB9CiAKKy8qIElPIGJhcnJpZXJzICovCisjaWZkZWYgQ09ORklHX0FSTV9ETUFfTUVNX0JVRkZFUkFCTEUKKyNkZWZpbmUgX19pb3JtYigpCQlybWIoKQorI2RlZmluZSBfX2lvd21iKCkJCXdtYigpCisjZWxzZQorI2RlZmluZSBfX2lvcm1iKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19pb3dtYigpCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwogLyoKICAqIE5vdywgcGljayB1cCB0aGUgbWFjaGluZS1kZWZpbmVkIElPIGRlZmluaXRpb25zCiAgKi8KQEAgLTEyNSwxNyArMTM0LDE3IEBACiAgKiBUaGUge2luLG91dH1bYndsXSBtYWNyb3MgYXJlIGZvciBlbXVsYXRpbmcgeDg2LXN0eWxlIFBDSS9JU0EgSU8gc3BhY2UuCiAgKi8KICNpZmRlZiBfX2lvCi0jZGVmaW5lIG91dGIodixwKQkJX19yYXdfd3JpdGViKHYsX19pbyhwKSkKLSNkZWZpbmUgb3V0dyh2LHApCQlfX3Jhd193cml0ZXcoKF9fZm9yY2UgX191MTYpIFwKLQkJCQkJY3B1X3RvX2xlMTYodiksX19pbyhwKSkKLSNkZWZpbmUgb3V0bCh2LHApCQlfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpIFwKLQkJCQkJY3B1X3RvX2xlMzIodiksX19pbyhwKSkKKyNkZWZpbmUgb3V0Yih2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGViKHYsX19pbyhwKSk7IH0pCisjZGVmaW5lIG91dHcodixwKQkoeyBfX2lvd21iKCk7IF9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNikgXAorCQkJCQljcHVfdG9fbGUxNih2KSxfX2lvKHApKTsgfSkKKyNkZWZpbmUgb3V0bCh2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGVsKChfX2ZvcmNlIF9fdTMyKSBcCisJCQkJCWNwdV90b19sZTMyKHYpLF9faW8ocCkpOyB9KQogCi0jZGVmaW5lIGluYihwKQkoeyBfX3U4IF9fdiA9IF9fcmF3X3JlYWRiKF9faW8ocCkpOyBfX3Y7IH0pCisjZGVmaW5lIGluYihwKQkoeyBfX3U4IF9fdiA9IF9fcmF3X3JlYWRiKF9faW8ocCkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKICNkZWZpbmUgaW53KHApCSh7IF9fdTE2IF9fdiA9IGxlMTZfdG9fY3B1KChfX2ZvcmNlIF9fbGUxNikgXAotCQkJX19yYXdfcmVhZHcoX19pbyhwKSkpOyBfX3Y7IH0pCisJCQlfX3Jhd19yZWFkdyhfX2lvKHApKSk7IF9faW9ybWIoKTsgX192OyB9KQogI2RlZmluZSBpbmwocCkJKHsgX191MzIgX192ID0gbGUzMl90b19jcHUoKF9fZm9yY2UgX19sZTMyKSBcCi0JCQlfX3Jhd19yZWFkbChfX2lvKHApKSk7IF9fdjsgfSkKKwkJCV9fcmF3X3JlYWRsKF9faW8ocCkpKTsgX19pb3JtYigpOyBfX3Y7IH0pCiAKICNkZWZpbmUgb3V0c2IocCxkLGwpCQlfX3Jhd193cml0ZXNiKF9faW8ocCksZCxsKQogI2RlZmluZSBvdXRzdyhwLGQsbCkJCV9fcmF3X3dyaXRlc3coX19pbyhwKSxkLGwpCkBAIC0xOTIsMTQgKzIwMSw2IEBACiAjZGVmaW5lIHdyaXRlbF9yZWxheGVkKHYsYykJKCh2b2lkKV9fcmF3X3dyaXRlbCgoX19mb3JjZSB1MzIpIFwKIAkJCQkJY3B1X3RvX2xlMzIodiksX19tZW1fcGNpKGMpKSkKIAotI2lmZGVmIENPTkZJR19BUk1fRE1BX01FTV9CVUZGRVJBQkxFCi0jZGVmaW5lIF9faW9ybWIoKQkJcm1iKCkKLSNkZWZpbmUgX19pb3dtYigpCQl3bWIoKQotI2Vsc2UKLSNkZWZpbmUgX19pb3JtYigpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIF9faW93bWIoKQkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KICNkZWZpbmUgcmVhZGIoYykJCSh7IHU4ICBfX3YgPSByZWFkYl9yZWxheGVkKGMpOyBfX2lvcm1iKCk7IF9fdjsgfSkKICNkZWZpbmUgcmVhZHcoYykJCSh7IHUxNiBfX3YgPSByZWFkd19yZWxheGVkKGMpOyBfX2lvcm1iKCk7IF9fdjsgfSkKICNkZWZpbmUgcmVhZGwoYykJCSh7IHUzMiBfX3YgPSByZWFkbF9yZWxheGVkKGMpOyBfX2lvcm1iKCk7IF9fdjsgfSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvYXJjaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmgKaW5kZXggM2EwODkzYS4uYmYxM2I4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmgKQEAgLTE1LDEwICsxNSw2IEBACiBzdHJ1Y3Qgc3lzX3RpbWVyOwogCiBzdHJ1Y3QgbWFjaGluZV9kZXNjIHsKLQkvKgotCSAqIE5vdGUhIFRoZSBmaXJzdCB0d28gZWxlbWVudHMgYXJlIHVzZWQKLQkgKiBieSBhc3NlbWJsZXIgY29kZSBpbiBoZWFkLlMsIGhlYWQtY29tbW9uLlMKLQkgKi8KIAl1bnNpZ25lZCBpbnQJCW5yOwkJLyogYXJjaGl0ZWN0dXJlIG51bWJlcgkqLwogCWNvbnN0IGNoYXIJCSpuYW1lOwkJLyogYXJjaGl0ZWN0dXJlIG5hbWUJKi8KIAl1bnNpZ25lZCBsb25nCQlib290X3BhcmFtczsJLyogdGFnZ2VkIGxpc3QJCSovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCmluZGV4IDIzYzJlOGUuLmQwZWU3NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCkBAIC0xODgsNyArMTg4LDcgQEAKICAqIHRyYW5zbGF0aW9uIGZvciB0cmFuc2xhdGluZyBETUEgYWRkcmVzc2VzLiAgVXNlIHRoZSBkcml2ZXIKICAqIERNQSBzdXBwb3J0IC0gc2VlIGRtYS1tYXBwaW5nLmguCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9pZCAqeCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXMoY29uc3Qgdm9sYXRpbGUgdm9pZCAqeCkKIHsKIAlyZXR1cm4gX192aXJ0X3RvX3BoeXMoKHVuc2lnbmVkIGxvbmcpKHgpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCA5NzYzYmUwLi4yMmRlMDA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0xMCw2ICsxMCw4IEBACiAjaWZuZGVmIF9BU01BUk1fUEdBTExPQ19ICiAjZGVmaW5lIF9BU01BUk1fUEdBTExPQ19ICiAKKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisKICNpbmNsdWRlIDxhc20vZG9tYWluLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYy1mbnMuaAppbmRleCA4ZmRhZTliLi44ZWM1MzVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmgKQEAgLTEzLDI1MCArMTMsODYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotCi0vKgotICogV29yayBvdXQgaWYgd2UgbmVlZCBtdWx0aXBsZSBDUFUgc3VwcG9ydAotICovCi0jdW5kZWYgTVVMVElfQ1BVCi0jdW5kZWYgQ1BVX05BTUUKLQotLyoKLSAqIENQVV9OQU1FIC0gdGhlIHByZWZpeCBmb3IgQ1BVIHJlbGF0ZWQgZnVuY3Rpb25zCi0gKi8KLQotI2lmZGVmIENPTkZJR19DUFVfQVJNNjEwCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTdURE1JCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtN3RkbWkKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk03MTAKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQVJNNzIwVAotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTcyMAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTc0MFQKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03NDAKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk05VERNSQotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTl0ZG1pCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQVJNOTIwVAotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyMAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyMlQKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjIKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9GQTUyNgotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2ZhNTI2Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQVJNOTI1VAotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyNQotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyNlQKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjYKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk05NDBUCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTQwCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQVJNOTQ2RQotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTk0NgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1NBMTEwCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfc2ExMTAKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9TQTExMDAKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9zYTExMDAKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIwCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjBFCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMGUKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIyCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjYKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDI2Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfWFNDQUxFCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfeHNjYWxlCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfWFNDMwotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzYzMKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9NT0hBV0sKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9tb2hhd2sKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9GRVJPQ0VPTgotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2Zlcm9jZW9uCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfVjYKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV92NgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1Y3Ci0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfdjcKLSMgZW5kaWYKLSNlbmRpZgorI2luY2x1ZGUgPGFzbS9nbHVlLXByb2MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCitzdHJ1Y3QgbW1fc3RydWN0OworCisvKgorICogRG9uJ3QgY2hhbmdlIHRoaXMgc3RydWN0dXJlIC0gQVNNIGNvZGUgcmVsaWVzIG9uIGl0LgorICovCitleHRlcm4gc3RydWN0IHByb2Nlc3NvciB7CisJLyogTUlTQworCSAqIGdldCBkYXRhIGFib3J0IGFkZHJlc3MvZmxhZ3MKKwkgKi8KKwl2b2lkICgqX2RhdGFfYWJvcnQpKHVuc2lnbmVkIGxvbmcgcGMpOworCS8qCisJICogUmV0cmlldmUgcHJlZmV0Y2ggZmF1bHQgYWRkcmVzcworCSAqLworCXVuc2lnbmVkIGxvbmcgKCpfcHJlZmV0Y2hfYWJvcnQpKHVuc2lnbmVkIGxvbmcgbHIpOworCS8qCisJICogU2V0IHVwIGFueSBwcm9jZXNzb3Igc3BlY2lmaWNzCisJICovCisJdm9pZCAoKl9wcm9jX2luaXQpKHZvaWQpOworCS8qCisJICogRGlzYWJsZSBhbnkgcHJvY2Vzc29yIHNwZWNpZmljcworCSAqLworCXZvaWQgKCpfcHJvY19maW4pKHZvaWQpOworCS8qCisJICogU3BlY2lhbCBzdHVmZiBmb3IgYSByZXNldAorCSAqLworCXZvaWQgKCpyZXNldCkodW5zaWduZWQgbG9uZyBhZGRyKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworCS8qCisJICogSWRsZSB0aGUgcHJvY2Vzc29yCisJICovCisJaW50ICgqX2RvX2lkbGUpKHZvaWQpOworCS8qCisJICogUHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBzcGVjaWZpYworCSAqLworCS8qCisJICogY2xlYW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgZnJvbSB0aGUKKwkgKiBELWNhY2hlIHdpdGhvdXQgZmx1c2hpbmcgdGhlIGNhY2hlLgorCSAqLworCXZvaWQgKCpkY2FjaGVfY2xlYW5fYXJlYSkodm9pZCAqYWRkciwgaW50IHNpemUpOworCisJLyoKKwkgKiBTZXQgdGhlIHBhZ2UgdGFibGUKKwkgKi8KKwl2b2lkICgqc3dpdGNoX21tKSh1bnNpZ25lZCBsb25nIHBnZF9waHlzLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisJLyoKKwkgKiBTZXQgYSBwb3NzaWJseSBleHRlbmRlZCBQVEUuICBOb24tZXh0ZW5kZWQgUFRFcyBzaG91bGQKKwkgKiBpZ25vcmUgJ2V4dCcuCisJICovCisJdm9pZCAoKnNldF9wdGVfZXh0KShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgZXh0KTsKKworCS8qIFN1c3BlbmQvcmVzdW1lICovCisJdW5zaWduZWQgaW50IHN1c3BlbmRfc2l6ZTsKKwl2b2lkICgqZG9fc3VzcGVuZCkodm9pZCAqKTsKKwl2b2lkICgqZG9fcmVzdW1lKSh2b2lkICopOworfSBwcm9jZXNzb3I7CisKICNpZm5kZWYgTVVMVElfQ1BVCi0jaW5jbHVkZSA8YXNtL2NwdS1zaW5nbGUuaD4KK2V4dGVybiB2b2lkIGNwdV9wcm9jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBjcHVfcHJvY19maW4odm9pZCk7CitleHRlcm4gaW50IGNwdV9kb19pZGxlKHZvaWQpOworZXh0ZXJuIHZvaWQgY3B1X2RjYWNoZV9jbGVhbl9hcmVhKHZvaWQgKiwgaW50KTsKK2V4dGVybiB2b2lkIGNwdV9kb19zd2l0Y2hfbW0odW5zaWduZWQgbG9uZyBwZ2RfcGh5cywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgY3B1X3NldF9wdGVfZXh0KHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsIHVuc2lnbmVkIGludCBleHQpOworZXh0ZXJuIHZvaWQgY3B1X3Jlc2V0KHVuc2lnbmVkIGxvbmcgYWRkcikgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKICNlbHNlCi0jaW5jbHVkZSA8YXNtL2NwdS1tdWx0aTMyLmg+CisjZGVmaW5lIGNwdV9wcm9jX2luaXQoKQkJCXByb2Nlc3Nvci5fcHJvY19pbml0KCkKKyNkZWZpbmUgY3B1X3Byb2NfZmluKCkJCQlwcm9jZXNzb3IuX3Byb2NfZmluKCkKKyNkZWZpbmUgY3B1X3Jlc2V0KGFkZHIpCQkJcHJvY2Vzc29yLnJlc2V0KGFkZHIpCisjZGVmaW5lIGNwdV9kb19pZGxlKCkJCQlwcm9jZXNzb3IuX2RvX2lkbGUoKQorI2RlZmluZSBjcHVfZGNhY2hlX2NsZWFuX2FyZWEoYWRkcixzeikJcHJvY2Vzc29yLmRjYWNoZV9jbGVhbl9hcmVhKGFkZHIsc3opCisjZGVmaW5lIGNwdV9zZXRfcHRlX2V4dChwdGVwLHB0ZSxleHQpCXByb2Nlc3Nvci5zZXRfcHRlX2V4dChwdGVwLHB0ZSxleHQpCisjZGVmaW5lIGNwdV9kb19zd2l0Y2hfbW0ocGdkLG1tKQlwcm9jZXNzb3Iuc3dpdGNoX21tKHBnZCxtbSkKICNlbmRpZgogCitleHRlcm4gdm9pZCBjcHVfcmVzdW1lKHZvaWQpOworCiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogCiAjaWZkZWYgQ09ORklHX01NVQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCA2NzM1N2JhLi43YTFmMDNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtOTUsNyArOTUsNyBAQAogCiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCi0jaWYgX19MSU5VWF9BUk1fQVJDSF9fID09IDYKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPT0gNiB8fCBkZWZpbmVkKENPTkZJR19BUk1fRVJSQVRBXzc1NDMyNykKICNkZWZpbmUgY3B1X3JlbGF4KCkJCQlzbXBfbWIoKQogI2Vsc2UKICNkZWZpbmUgY3B1X3JlbGF4KCkJCQliYXJyaWVyKCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9zY3UuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9zY3UuaAppbmRleCAyMzc2ODM1Li40ZWI2ZDAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfc2N1LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3NjdS5oCkBAIC0xLDcgKzEsMTQgQEAKICNpZm5kZWYgX19BU01BUk1fQVJDSF9TQ1VfSAogI2RlZmluZSBfX0FTTUFSTV9BUkNIX1NDVV9ICiAKKyNkZWZpbmUgU0NVX1BNX05PUk1BTAkwCisjZGVmaW5lIFNDVV9QTV9ET1JNQU5UCTIKKyNkZWZpbmUgU0NVX1BNX1BPV0VST0ZGCTMKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiB1bnNpZ25lZCBpbnQgc2N1X2dldF9jb3JlX2NvdW50KHZvaWQgX19pb21lbSAqKTsKIHZvaWQgc2N1X2VuYWJsZSh2b2lkIF9faW9tZW0gKik7CitpbnQgc2N1X3Bvd2VyX21vZGUodm9pZCBfX2lvbWVtICosIHVuc2lnbmVkIGludCk7CisjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IGY0MWE2ZjUuLjgyZGZlNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0xOCwxNiArMTgsMzQgQEAKICNkZWZpbmUgX19BU01BUk1fVExCX0gKIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKICNpZm5kZWYgQ09ORklHX01NVQogCiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorCisjZGVmaW5lIHRsYl9mbHVzaCh0bGIpCSgodm9pZCkgdGxiKQorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CiAKICNlbHNlIC8qICFDT05GSUdfTU1VICovCiAKKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworLyoKKyAqIFdlIG5lZWQgdG8gZGVsYXkgcGFnZSBmcmVlaW5nIGZvciBTTVAgYXMgb3RoZXIgQ1BVcyBjYW4gYWNjZXNzIHBhZ2VzCisgKiB3aGljaCBoYXZlIGJlZW4gcmVtb3ZlZCBidXQgbm90IHlldCBoYWQgdGhlaXIgVExCIGVudHJpZXMgaW52YWxpZGF0ZWQuCisgKiBBbHNvLCBhcyBBUk12NyBzcGVjdWxhdGl2ZSBwcmVmZXRjaCBjYW4gZHJhZyBuZXcgZW50cmllcyBpbnRvIHRoZSBUTEIsCisgKiB3ZSBuZWVkIHRvIGFwcGx5IHRoaXMgc2FtZSBkZWxheWluZyB0YWN0aWMgdG8gZW5zdXJlIGNvcnJlY3Qgb3BlcmF0aW9uLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfMzJ2NykKKyNkZWZpbmUgdGxiX2Zhc3RfbW9kZSh0bGIpCTAKKyNkZWZpbmUgRlJFRV9QVEVfTlIJCTUwMAorI2Vsc2UKKyNkZWZpbmUgdGxiX2Zhc3RfbW9kZSh0bGIpCTEKKyNkZWZpbmUgRlJFRV9QVEVfTlIJCTAKKyNlbmRpZgogCiAvKgogICogVExCIGhhbmRsaW5nLiAgVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHBhZ2VzIGZyb20gdGhlIHBhZ2UKQEAgLTM2LDEyICs1NCw1OCBAQAogc3RydWN0IG1tdV9nYXRoZXIgewogCXN0cnVjdCBtbV9zdHJ1Y3QJKm1tOwogCXVuc2lnbmVkIGludAkJZnVsbG1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdAkqdm1hOwogCXVuc2lnbmVkIGxvbmcJCXJhbmdlX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCXJhbmdlX2VuZDsKKwl1bnNpZ25lZCBpbnQJCW5yOworCXN0cnVjdCBwYWdlCQkqcGFnZXNbRlJFRV9QVEVfTlJdOwogfTsKIAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiAKKy8qCisgKiBUaGlzIGlzIHVubmVjZXNzYXJpbHkgY29tcGxleC4gIFRoZXJlJ3MgdGhyZWUgd2F5cyB0aGUgVExCIHNob290ZG93bgorICogY29kZSBpcyB1c2VkOgorICogIDEuIFVubWFwcGluZyBhIHJhbmdlIG9mIHZtYXMuICBTZWUgemFwX3BhZ2VfcmFuZ2UoKSwgdW5tYXBfcmVnaW9uKCkuCisgKiAgICAgdGxiLT5mdWxsbW0gPSAwLCBhbmQgdGxiX3N0YXJ0X3ZtYS90bGJfZW5kX3ZtYSB3aWxsIGJlIGNhbGxlZC4KKyAqICAgICB0bGItPnZtYSB3aWxsIGJlIG5vbi1OVUxMLgorICogIDIuIFVubWFwcGluZyBhbGwgdm1hcy4gIFNlZSBleGl0X21tYXAoKS4KKyAqICAgICB0bGItPmZ1bGxtbSA9IDEsIGFuZCB0bGJfc3RhcnRfdm1hL3RsYl9lbmRfdm1hIHdpbGwgYmUgY2FsbGVkLgorICogICAgIHRsYi0+dm1hIHdpbGwgYmUgbm9uLU5VTEwuICBBZGRpdGlvbmFsbHksIHBhZ2UgdGFibGVzIHdpbGwgYmUgZnJlZWQuCisgKiAgMy4gVW5tYXBwaW5nIGFyZ3VtZW50IHBhZ2VzLiAgU2VlIHNoaWZ0X2FyZ19wYWdlcygpLgorICogICAgIHRsYi0+ZnVsbG1tID0gMCwgYnV0IHRsYl9zdGFydF92bWEvdGxiX2VuZF92bWEgd2lsbCBub3QgYmUgY2FsbGVkLgorICogICAgIHRsYi0+dm1hIHdpbGwgYmUgTlVMTC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQoreworCWlmICh0bGItPmZ1bGxtbSB8fCAhdGxiLT52bWEpCisJCWZsdXNoX3RsYl9tbSh0bGItPm1tKTsKKwllbHNlIGlmICh0bGItPnJhbmdlX2VuZCA+IDApIHsKKwkJZmx1c2hfdGxiX3JhbmdlKHRsYi0+dm1hLCB0bGItPnJhbmdlX3N0YXJ0LCB0bGItPnJhbmdlX2VuZCk7CisJCXRsYi0+cmFuZ2Vfc3RhcnQgPSBUQVNLX1NJWkU7CisJCXRsYi0+cmFuZ2VfZW5kID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJfYWRkX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAoIXRsYi0+ZnVsbG1tKSB7CisJCWlmIChhZGRyIDwgdGxiLT5yYW5nZV9zdGFydCkKKwkJCXRsYi0+cmFuZ2Vfc3RhcnQgPSBhZGRyOworCQlpZiAoYWRkciArIFBBR0VfU0laRSA+IHRsYi0+cmFuZ2VfZW5kKQorCQkJdGxiLT5yYW5nZV9lbmQgPSBhZGRyICsgUEFHRV9TSVpFOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKK3sKKwl0bGJfZmx1c2godGxiKTsKKwlpZiAoIXRsYl9mYXN0X21vZGUodGxiKSkgeworCQlmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKHRsYi0+cGFnZXMsIHRsYi0+bnIpOworCQl0bGItPm5yID0gMDsKKwl9Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1tdV9nYXRoZXIgKgogdGxiX2dhdGhlcl9tbXUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBmdWxsX21tX2ZsdXNoKQogewpAQCAtNDksNiArMTEzLDggQEAKIAogCXRsYi0+bW0gPSBtbTsKIAl0bGItPmZ1bGxtbSA9IGZ1bGxfbW1fZmx1c2g7CisJdGxiLT52bWEgPSBOVUxMOworCXRsYi0+bnIgPSAwOwogCiAJcmV0dXJuIHRsYjsKIH0KQEAgLTU2LDggKzEyMiw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHRsYl9maW5pc2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCWlmICh0bGItPmZ1bGxtbSkKLQkJZmx1c2hfdGxiX21tKHRsYi0+bW0pOworCXRsYl9mbHVzaF9tbXUodGxiKTsKIAogCS8qIGtlZXAgdGhlIHBhZ2UgdGFibGUgY2FjaGUgd2l0aGluIGJvdW5kcyAqLwogCWNoZWNrX3BndF9jYWNoZSgpOwpAQCAtNzEsMTIgKzEzNiw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHRsYl9yZW1vdmVfdGxiX2VudHJ5KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JaWYgKCF0bGItPmZ1bGxtbSkgewotCQlpZiAoYWRkciA8IHRsYi0+cmFuZ2Vfc3RhcnQpCi0JCQl0bGItPnJhbmdlX3N0YXJ0ID0gYWRkcjsKLQkJaWYgKGFkZHIgKyBQQUdFX1NJWkUgPiB0bGItPnJhbmdlX2VuZCkKLQkJCXRsYi0+cmFuZ2VfZW5kID0gYWRkciArIFBBR0VfU0laRTsKLQl9CisJdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOwogfQogCiAvKgpAQCAtODksNiArMTQ5LDcgQEAKIHsKIAlpZiAoIXRsYi0+ZnVsbG1tKSB7CiAJCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOworCQl0bGItPnZtYSA9IHZtYTsKIAkJdGxiLT5yYW5nZV9zdGFydCA9IFRBU0tfU0laRTsKIAkJdGxiLT5yYW5nZV9lbmQgPSAwOwogCX0KQEAgLTk3LDEyICsxNTgsMzAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogdGxiX2VuZF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0JaWYgKCF0bGItPmZ1bGxtbSAmJiB0bGItPnJhbmdlX2VuZCA+IDApCi0JCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHRsYi0+cmFuZ2Vfc3RhcnQsIHRsYi0+cmFuZ2VfZW5kKTsKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQl0bGJfZmx1c2godGxiKTsKIH0KIAotI2RlZmluZSB0bGJfcmVtb3ZlX3BhZ2UodGxiLHBhZ2UpCWZyZWVfcGFnZV9hbmRfc3dhcF9jYWNoZShwYWdlKQotI2RlZmluZSBwdGVfZnJlZV90bGIodGxiLCBwdGVwLCBhZGRyKQlwdGVfZnJlZSgodGxiKS0+bW0sIHB0ZXApCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmICh0bGJfZmFzdF9tb2RlKHRsYikpIHsKKwkJZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHBhZ2UpOworCX0gZWxzZSB7CisJCXRsYi0+cGFnZXNbdGxiLT5ucisrXSA9IHBhZ2U7CisJCWlmICh0bGItPm5yID49IEZSRUVfUFRFX05SKQorCQkJdGxiX2ZsdXNoX21tdSh0bGIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwdGUsCisJdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBndGFibGVfcGFnZV9kdG9yKHB0ZSk7CisJdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOworCXRsYl9yZW1vdmVfcGFnZSh0bGIsIHB0ZSk7Cit9CisKKyNkZWZpbmUgcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcCwgYWRkcikJX19wdGVfZnJlZV90bGIodGxiLCBwdGVwLCBhZGRyKQogI2RlZmluZSBwbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKQlwbWRfZnJlZSgodGxiKS0+bW0sIHBtZHApCiAKICNkZWZpbmUgdGxiX21pZ3JhdGVfZmluaXNoKG1tKQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggY2U3Mzc4ZWEuLmQyMDA1ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMTAsMTIgKzEwLDcgQEAKICNpZm5kZWYgX0FTTUFSTV9UTEJGTFVTSF9ICiAjZGVmaW5lIF9BU01BUk1fVExCRkxVU0hfSAogCi0KLSNpZm5kZWYgQ09ORklHX01NVQotCi0jZGVmaW5lIHRsYl9mbHVzaCh0bGIpCSgodm9pZCkgdGxiKQotCi0jZWxzZSAvKiBDT05GSUdfTU1VICovCisjaWZkZWYgQ09ORklHX01NVQogCiAjaW5jbHVkZSA8YXNtL2dsdWUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCmluZGV4IDE4NWVlODIuLjc0NTU0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKQEAgLTI5LDYgKzI5LDcgQEAKIG9iai0kKENPTkZJR19BUlRIVVIpCQkrPSBhcnRodXIubwogb2JqLSQoQ09ORklHX0lTQV9ETUEpCQkrPSBkbWEtaXNhLm8KIG9iai0kKENPTkZJR19QQ0kpCQkrPSBiaW9zMzIubyBpc2Eubworb2JqLSQoQ09ORklHX1BNKQkJKz0gc2xlZXAubwogb2JqLSQoQ09ORklHX0hBVkVfU0NIRURfQ0xPQ0spCSs9IHNjaGVkX2Nsb2NrLm8KIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubyBzbXBfdGxiLm8KIG9iai0kKENPTkZJR19IQVZFX0FSTV9TQ1UpCSs9IHNtcF9zY3UubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA4MmRhNjYxLi45Mjc1MjJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMTMsNiArMTMsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2dsdWUtZGYuaD4KKyNpbmNsdWRlIDxhc20vZ2x1ZS1wZi5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CkBAIC0xMTQsNiArMTE3LDE0IEBACiAjaWZkZWYgTVVMVElfUEFCT1JUCiAgIERFRklORShQUk9DRVNTT1JfUEFCVF9GVU5DLAlvZmZzZXRvZihzdHJ1Y3QgcHJvY2Vzc29yLCBfcHJlZmV0Y2hfYWJvcnQpKTsKICNlbmRpZgorI2lmZGVmIE1VTFRJX0NQVQorICBERUZJTkUoQ1BVX1NMRUVQX1NJWkUsCW9mZnNldG9mKHN0cnVjdCBwcm9jZXNzb3IsIHN1c3BlbmRfc2l6ZSkpOworICBERUZJTkUoQ1BVX0RPX1NVU1BFTkQsCW9mZnNldG9mKHN0cnVjdCBwcm9jZXNzb3IsIGRvX3N1c3BlbmQpKTsKKyAgREVGSU5FKENQVV9ET19SRVNVTUUsCQlvZmZzZXRvZihzdHJ1Y3QgcHJvY2Vzc29yLCBkb19yZXN1bWUpKTsKKyNlbmRpZgorI2lmZGVmIE1VTFRJX0NBQ0hFCisgIERFRklORShDQUNIRV9GTFVTSF9LRVJOX0FMTCwJb2Zmc2V0b2Yoc3RydWN0IGNwdV9jYWNoZV9mbnMsIGZsdXNoX2tlcm5fYWxsKSk7CisjZW5kaWYKICAgQkxBTksoKTsKICAgREVGSU5FKERNQV9CSURJUkVDVElPTkFMLAlETUFfQklESVJFQ1RJT05BTCk7CiAgIERFRklORShETUFfVE9fREVWSUNFLAkJRE1BX1RPX0RFVklDRSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwppbmRleCAyYjQ2ZmVhLi5lOGQ4ODU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKQEAgLTE2LDcgKzE2LDggQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgotI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisjaW5jbHVkZSA8YXNtL2dsdWUtZGYuaD4KKyNpbmNsdWRlIDxhc20vZ2x1ZS1wZi5oPgogI2luY2x1ZGUgPGFzbS92ZnBtYWNyb3MuaD4KICNpbmNsdWRlIDxtYWNoL2VudHJ5LW1hY3JvLlM+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9ub3RpZnkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCmluZGV4IGYxN2Q5YTAuLmYwNmZmOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwpAQCAtMzkxLDI1ICszOTEsMjQgQEAKIAogCiAjaWZkZWYgQ09ORklHX1NNUF9PTl9VUAorCV9fSU5JVAogX19maXh1cF9zbXA6Ci0JbW92CXI0LCAjMHgwMDA3MDAwMAotCW9ycglyMywgcjQsICMweGZmMDAwMDAwCUAgbWFzayAweGZmMDcwMDAwCi0Jb3JyCXI0LCByNCwgIzB4NDEwMDAwMDAJQCB2YWwgMHg0MTA3MDAwMAotCWFuZAlyMCwgcjksIHIzCi0JdGVxCXIwLCByNAkJCUAgQVJNIENQVSBhbmQgQVJNdjYvdjc/CisJYW5kCXIzLCByOSwgIzB4MDAwZjAwMDAJQCBhcmNoaXRlY3R1cmUgdmVyc2lvbgorCXRlcQlyMywgIzB4MDAwZjAwMDAJCUAgQ1BVIElEIHN1cHBvcnRlZD8KIAlibmUJX19maXh1cF9zbXBfb25fdXAJQCBubywgYXNzdW1lIFVQCiAKLQlvcnIJcjMsIHIzLCAjMHgwMDAwZmYwMAotCW9ycglyMywgcjMsICMweDAwMDAwMGYwCUAgbWFzayAweGZmMDdmZmYwCisJYmljCXIzLCByOSwgIzB4MDBmZjAwMDAKKwliaWMJcjMsIHIzLCAjMHgwMDAwMDAwZglAIG1hc2sgMHhmZjAwZmZmMAorCW1vdglyNCwgIzB4NDEwMDAwMDAKIAlvcnIJcjQsIHI0LCAjMHgwMDAwYjAwMAotCW9ycglyNCwgcjQsICMweDAwMDAwMDIwCUAgdmFsIDB4NDEwN2IwMjAKLQlhbmQJcjAsIHI5LCByMwotCXRlcQlyMCwgcjQJCQlAIEFSTSAxMU1QQ29yZT8KKwlvcnIJcjQsIHI0LCAjMHgwMDAwMDAyMAlAIHZhbCAweDQxMDBiMDIwCisJdGVxCXIzLCByNAkJCUAgQVJNIDExTVBDb3JlPwogCW1vdmVxCXBjLCBscgkJCUAgeWVzLCBhc3N1bWUgU01QCiAKIAltcmMJcDE1LCAwLCByMCwgYzAsIGMwLCA1CUAgcmVhZCBNUElEUgotCXRzdAlyMCwgIzEgPDwgMzEKLQltb3ZuZQlwYywgbHIJCQlAIGJpdCAzMSA9PiBTTVAKKwlhbmQJcjAsIHIwLCAjMHhjMDAwMDAwMAlAIG11bHRpcHJvY2Vzc2luZyBleHRlbnNpb25zIGFuZAorCXRlcQlyMCwgIzB4ODAwMDAwMDAJCUAgbm90IHBhcnQgb2YgYSB1bmlwcm9jZXNzb3Igc3lzdGVtPworCW1vdmVxCXBjLCBscgkJCUAgeWVzLCBhc3N1bWUgU01QCiAKIF9fZml4dXBfc21wX29uX3VwOgogCWFkcglyMCwgMWYKQEAgLTQxNywxOCArNDE2LDcgQEAKIAlzdWIJcjMsIHIwLCByMwogCWFkZAlyNCwgcjQsIHIzCiAJYWRkCXI1LCByNSwgcjMKLTI6CWNtcAlyNCwgcjUKLQltb3ZocwlwYywgbHIKLQlsZG1pYQlyNCEsIHtyMCwgcjZ9Ci0gQVJNKAlzdHIJcjYsIFtyMCwgcjNdCSkKLSBUSFVNQigJYWRkCXIwLCByMCwgcjMJKQotI2lmZGVmIF9fQVJNRUJfXwotIFRIVU1CKAltb3YJcjYsIHI2LCByb3IgIzE2CSkJQCBDb252ZXJ0IHdvcmQgb3JkZXIgZm9yIGJpZy1lbmRpYW4uCi0jZW5kaWYKLSBUSFVNQigJc3RyaAlyNiwgW3IwXSwgIzIJKQlAIEZvciBUaHVtYi0yLCBzdG9yZSBhcyB0d28gaGFsZndvcmRzCi0gVEhVTUIoCW1vdglyNiwgcjYsIGxzciAjMTYJKQlAIHRvIGJlIHJvYnVzdCBhZ2FpbnN0IG1pc2FsaWduZWQgcjMuCi0gVEhVTUIoCXN0cmgJcjYsIFtyMF0JKQotCWIJMmIKKwliCV9fZG9fZml4dXBfc21wX29uX3VwCiBFTkRQUk9DKF9fZml4dXBfc21wKQogCiAJLmFsaWduCkBAIC00NDIsNyArNDMwLDMxIEBACiAJQUxUX1NNUCgubG9uZwkxKQogCUFMVF9VUCgubG9uZwkwKQogCS5wb3BzZWN0aW9uCi0KICNlbmRpZgogCisJLnRleHQKK19fZG9fZml4dXBfc21wX29uX3VwOgorCWNtcAlyNCwgcjUKKwltb3ZocwlwYywgbHIKKwlsZG1pYQlyNCEsIHtyMCwgcjZ9CisgQVJNKAlzdHIJcjYsIFtyMCwgcjNdCSkKKyBUSFVNQigJYWRkCXIwLCByMCwgcjMJKQorI2lmZGVmIF9fQVJNRUJfXworIFRIVU1CKAltb3YJcjYsIHI2LCByb3IgIzE2CSkJQCBDb252ZXJ0IHdvcmQgb3JkZXIgZm9yIGJpZy1lbmRpYW4uCisjZW5kaWYKKyBUSFVNQigJc3RyaAlyNiwgW3IwXSwgIzIJKQlAIEZvciBUaHVtYi0yLCBzdG9yZSBhcyB0d28gaGFsZndvcmRzCisgVEhVTUIoCW1vdglyNiwgcjYsIGxzciAjMTYJKQlAIHRvIGJlIHJvYnVzdCBhZ2FpbnN0IG1pc2FsaWduZWQgcjMuCisgVEhVTUIoCXN0cmgJcjYsIFtyMF0JKQorCWIJX19kb19maXh1cF9zbXBfb25fdXAKK0VORFBST0MoX19kb19maXh1cF9zbXBfb25fdXApCisKK0VOVFJZKGZpeHVwX3NtcCkKKwlzdG1mZAlzcCEsIHtyNCAtIHI2LCBscn0KKwltb3YJcjQsIHIwCisJYWRkCXI1LCByMCwgcjEKKwltb3YJcjMsICMwCisJYmwJX19kb19maXh1cF9zbXBfb25fdXAKKwlsZG1mZAlzcCEsIHtyNCAtIHI2LCBwY30KK0VORFBST0MoZml4dXBfc21wKQorCiAjaW5jbHVkZSAiaGVhZC1jb21tb24uUyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9od19icmVha3BvaW50LmMgYi9hcmNoL2FybS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCmluZGV4IGM5ZjNmMDQuLjQ0Yjg0ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9od19icmVha3BvaW50LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtMTM3LDExICsxMzcsMTAgQEAKIAl1MzIgZGlkcjsKIAogCS8qIERvIHdlIGltcGxlbWVudCB0aGUgZXh0ZW5kZWQgQ1BVSUQgaW50ZXJmYWNlPyAqLwotCWlmICgoKHJlYWRfY3B1aWRfaWQoKSA+PiAxNikgJiAweGYpICE9IDB4ZikgewotCQlwcl93YXJuaW5nKCJDUFVJRCBmZWF0dXJlIHJlZ2lzdGVycyBub3Qgc3VwcG9ydGVkLiAiCi0JCQkJIkFzc3VtaW5nIHY2IGRlYnVnIGlzIHByZXNlbnQuXG4iKTsKKwlpZiAoV0FSTl9PTkNFKCgoKHJlYWRfY3B1aWRfaWQoKSA+PiAxNikgJiAweGYpICE9IDB4ZiksCisJICAgICJDUFVJRCBmZWF0dXJlIHJlZ2lzdGVycyBub3Qgc3VwcG9ydGVkLiAiCisJICAgICJBc3N1bWluZyB2NiBkZWJ1ZyBpcyBwcmVzZW50LlxuIikpCiAJCXJldHVybiBBUk1fREVCVUdfQVJDSF9WNjsKLQl9CiAKIAlBUk1fREJHX1JFQUQoYzAsIDAsIGRpZHIpOwogCXJldHVybiAoZGlkciA+PiAxNikgJiAweGY7CkBAIC0xNTIsNiArMTUxLDEyIEBACiAJcmV0dXJuIGRlYnVnX2FyY2g7CiB9CiAKK3N0YXRpYyBpbnQgZGVidWdfYXJjaF9zdXBwb3J0ZWQodm9pZCkKK3sKKwl1OCBhcmNoID0gZ2V0X2RlYnVnX2FyY2goKTsKKwlyZXR1cm4gYXJjaCA+PSBBUk1fREVCVUdfQVJDSF9WNiAmJiBhcmNoIDw9IEFSTV9ERUJVR19BUkNIX1Y3X0VDUDE0OworfQorCiAvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIEJSUCByZWdpc3RlciBhdmFpbGFibGUuICovCiBzdGF0aWMgaW50IGdldF9udW1fYnJwX3Jlc291cmNlcyh2b2lkKQogewpAQCAtMjY4LDYgKzI3Myw5IEBACiAKIGludCBod19icmVha3BvaW50X3Nsb3RzKGludCB0eXBlKQogeworCWlmICghZGVidWdfYXJjaF9zdXBwb3J0ZWQoKSkKKwkJcmV0dXJuIDA7CisKIAkvKgogCSAqIFdlIGNhbiBiZSBjYWxsZWQgZWFybHksIHNvIGRvbid0IHJlbHkgb24KIAkgKiBvdXIgc3RhdGljIHZhcmlhYmxlcyBiZWluZyBpbml0aWFsaXNlZC4KQEAgLTgyOCwyMCArODM2LDMzIEBACiAvKgogICogT25lLXRpbWUgaW5pdGlhbGlzYXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcmVncyh2b2lkICp1bnVzZWQpCitzdGF0aWMgdm9pZCByZXNldF9jdHJsX3JlZ3Modm9pZCAqaW5mbykKIHsKLQlpbnQgaTsKKwlpbnQgaSwgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXUzMiBkYmdfcG93ZXI7CisJY3B1bWFza190ICpjcHVtYXNrID0gaW5mbzsKIAogCS8qCiAJICogdjcgZGVidWcgY29udGFpbnMgc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlcnMgc28gdGhhdCBkZWJ1ZyBzdGF0ZQotCSAqIGNhbiBiZSBtYWludGFpbmVkIGFjcm9zcyBsb3ctcG93ZXIgbW9kZXMgd2l0aG91dCBsZWF2aW5nCi0JICogdGhlIGRlYnVnIGxvZ2ljIHBvd2VyZWQgdXAuIEl0IGlzIElNUExFTUVOVEFUSU9OIERFRklORUQgd2hldGhlcgotCSAqIHdlIGNhbiB3cml0ZSB0byB0aGUgZGVidWcgcmVnaXN0ZXJzIG91dCBvZiByZXNldCwgc28gd2UgbXVzdAotCSAqIHVubG9jayB0aGUgT1MgTG9jayBBY2Nlc3MgUmVnaXN0ZXIgdG8gYXZvaWQgdGFraW5nIHVuZGVmaW5lZAotCSAqIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMgbGF0ZXIgb24uCisJICogY2FuIGJlIG1haW50YWluZWQgYWNyb3NzIGxvdy1wb3dlciBtb2RlcyB3aXRob3V0IGxlYXZpbmcgdGhlIGRlYnVnCisJICogbG9naWMgcG93ZXJlZCB1cC4gSXQgaXMgSU1QTEVNRU5UQVRJT04gREVGSU5FRCB3aGV0aGVyIHdlIGNhbiBhY2Nlc3MKKwkgKiB0aGUgZGVidWcgcmVnaXN0ZXJzIG91dCBvZiByZXNldCwgc28gd2UgbXVzdCB1bmxvY2sgdGhlIE9TIExvY2sKKwkgKiBBY2Nlc3MgUmVnaXN0ZXIgdG8gYXZvaWQgdGFraW5nIHVuZGVmaW5lZCBpbnN0cnVjdGlvbiBleGNlcHRpb25zCisJICogbGF0ZXIgb24uCiAJICovCiAJaWYgKGRlYnVnX2FyY2ggPj0gQVJNX0RFQlVHX0FSQ0hfVjdfRUNQMTQpIHsKIAkJLyoKKwkJICogRW5zdXJlIHN0aWNreSBwb3dlci1kb3duIGlzIGNsZWFyIChpLmUuIGRlYnVnIGxvZ2ljIGlzCisJCSAqIHBvd2VyZWQgdXApLgorCQkgKi8KKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE0LCAwLCAlMCwgYzEsIGM1LCA0IiA6ICI9ciIgKGRiZ19wb3dlcikpOworCQlpZiAoKGRiZ19wb3dlciAmIDB4MSkgPT0gMCkgeworCQkJcHJfd2FybmluZygiQ1BVICVkIGRlYnVnIGlzIHBvd2VyZWQgZG93biFcbiIsIGNwdSk7CisJCQljcHVtYXNrX29yKGNwdW1hc2ssIGNwdW1hc2ssIGNwdW1hc2tfb2YoY3B1KSk7CisJCQlyZXR1cm47CisJCX0KKworCQkvKgogCQkgKiBVbmNvbmRpdGlvbmFsbHkgY2xlYXIgdGhlIGxvY2sgYnkgd3JpdGluZyBhIHZhbHVlCiAJCSAqIG90aGVyIHRoYW4gMHhDNUFDQ0U1NSB0byB0aGUgYWNjZXNzIHJlZ2lzdGVyLgogCQkgKi8KQEAgLTg3OSwxMCArOTAwLDExIEBACiBzdGF0aWMgaW50IF9faW5pdCBhcmNoX2h3X2JyZWFrcG9pbnRfaW5pdCh2b2lkKQogewogCXUzMiBkc2NyOworCWNwdW1hc2tfdCBjcHVtYXNrID0geyBDUFVfQklUU19OT05FIH07CiAKIAlkZWJ1Z19hcmNoID0gZ2V0X2RlYnVnX2FyY2goKTsKIAotCWlmIChkZWJ1Z19hcmNoID4gQVJNX0RFQlVHX0FSQ0hfVjdfRUNQMTQpIHsKKwlpZiAoIWRlYnVnX2FyY2hfc3VwcG9ydGVkKCkpIHsKIAkJcHJfaW5mbygiZGVidWcgYXJjaGl0ZWN0dXJlIDB4JXggdW5zdXBwb3J0ZWQuXG4iLCBkZWJ1Z19hcmNoKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODk5LDE4ICs5MjEsMjQgQEAKIAkJcHJfaW5mbygiJWQgYnJlYWtwb2ludChzKSByZXNlcnZlZCBmb3Igd2F0Y2hwb2ludCAiCiAJCQkJInNpbmdsZS1zdGVwLlxuIiwgY29yZV9udW1fcmVzZXJ2ZWRfYnJwcyk7CiAKKwkvKgorCSAqIFJlc2V0IHRoZSBicmVha3BvaW50IHJlc291cmNlcy4gV2UgYXNzdW1lIHRoYXQgYSBoYWx0aW5nCisJICogZGVidWdnZXIgd2lsbCBsZWF2ZSB0aGUgd29ybGQgaW4gYSBuaWNlIHN0YXRlIGZvciB1cy4KKwkgKi8KKwlvbl9lYWNoX2NwdShyZXNldF9jdHJsX3JlZ3MsICZjcHVtYXNrLCAxKTsKKwlpZiAoIWNwdW1hc2tfZW1wdHkoJmNwdW1hc2spKSB7CisJCWNvcmVfbnVtX2JycHMgPSAwOworCQljb3JlX251bV9yZXNlcnZlZF9icnBzID0gMDsKKwkJY29yZV9udW1fd3JwcyA9IDA7CisJCXJldHVybiAwOworCX0KKwogCUFSTV9EQkdfUkVBRChjMSwgMCwgZHNjcik7CiAJaWYgKGRzY3IgJiBBUk1fRFNDUl9IREJHRU4pIHsKKwkJbWF4X3dhdGNocG9pbnRfbGVuID0gNDsKIAkJcHJfd2FybmluZygiaGFsdGluZyBkZWJ1ZyBtb2RlIGVuYWJsZWQuIEFzc3VtaW5nIG1heGltdW0gIgotCQkJCSJ3YXRjaHBvaW50IHNpemUgb2YgNCBieXRlcy4iKTsKKwkJCSAgICJ3YXRjaHBvaW50IHNpemUgb2YgJXUgYnl0ZXMuIiwgbWF4X3dhdGNocG9pbnRfbGVuKTsKIAl9IGVsc2UgewotCQkvKgotCQkgKiBSZXNldCB0aGUgYnJlYWtwb2ludCByZXNvdXJjZXMuIFdlIGFzc3VtZSB0aGF0IGEgaGFsdGluZwotCQkgKiBkZWJ1Z2dlciB3aWxsIGxlYXZlIHRoZSB3b3JsZCBpbiBhIG5pY2Ugc3RhdGUgZm9yIHVzLgotCQkgKi8KLQkJc21wX2NhbGxfZnVuY3Rpb24ocmVzZXRfY3RybF9yZWdzLCBOVUxMLCAxKTsKLQkJcmVzZXRfY3RybF9yZWdzKE5VTEwpOwotCiAJCS8qIFdvcmsgb3V0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCB3YXRjaHBvaW50IGxlbmd0aC4gKi8KIAkJbWF4X3dhdGNocG9pbnRfbGVuID0gZ2V0X21heF93cF9sZW4oKTsKIAkJcHJfaW5mbygibWF4aW11bSB3YXRjaHBvaW50IHNpemUgaXMgJXUgYnl0ZXMuXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtZGVjb2RlLmMgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYwppbmRleCAyYzFmMDA1Li44ZjZlZDQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYwpAQCAtMTQzNyw3ICsxNDM3LDcgQEAKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18xMTAwXzAxMHgoaW5zbiwgYXNpKTsKIAotCX0gZWxzZSBpZiAoKGluc24gJiAweDBlMDAwMDAwKSA9PSAweDBjNDAwMDAwKSB7CisJfSBlbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MGMwMDAwMDApIHsKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18xMTB4KGluc24sIGFzaSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYwppbmRleCAyY2ZlODE2Li42ZDQxMDVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCkBAIC0yNjgsMTIgKzI2OSwyOCBAQAogCWNvbnN0IEVsZl9TaGRyICp0eHRfc2VjOwogfTsKIAorc3RhdGljIGNvbnN0IEVsZl9TaGRyICpmaW5kX21vZF9zZWN0aW9uKGNvbnN0IEVsZjMyX0VoZHIgKmhkciwKKwljb25zdCBFbGZfU2hkciAqc2VjaGRycywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBFbGZfU2hkciAqcywgKnNlOworCWNvbnN0IGNoYXIgKnNlY3N0cnMgPSAodm9pZCAqKWhkciArIHNlY2hkcnNbaGRyLT5lX3Noc3RybmR4XS5zaF9vZmZzZXQ7CisKKwlmb3IgKHMgPSBzZWNoZHJzLCBzZSA9IHNlY2hkcnMgKyBoZHItPmVfc2hudW07IHMgPCBzZTsgcysrKQorCQlpZiAoc3RyY21wKG5hbWUsIHNlY3N0cnMgKyBzLT5zaF9uYW1lKSA9PSAwKQorCQkJcmV0dXJuIHM7CisKKwlyZXR1cm4gTlVMTDsKK30KKworZXh0ZXJuIHZvaWQgZml4dXBfc21wKGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CisKIGludCBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmMzJfRWhkciAqaGRyLCBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKIAkJICAgIHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKKwljb25zdCBFbGZfU2hkciAqIF9fbWF5YmVfdW51c2VkIHMgPSBOVUxMOwogI2lmZGVmIENPTkZJR19BUk1fVU5XSU5ECiAJY29uc3QgY2hhciAqc2Vjc3RycyA9ICh2b2lkICopaGRyICsgc2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKLQljb25zdCBFbGZfU2hkciAqcywgKnNlY2hkcnNfZW5kID0gc2VjaGRycyArIGhkci0+ZV9zaG51bTsKKwljb25zdCBFbGZfU2hkciAqc2VjaGRyc19lbmQgPSBzZWNoZHJzICsgaGRyLT5lX3NobnVtOwogCXN0cnVjdCBtb2RfdW53aW5kX21hcCBtYXBzW0FSTV9TRUNfTUFYXTsKIAlpbnQgaTsKIApAQCAtMzE1LDYgKzMzMiw5IEBACiAJCQkJCSAgICAgICAgIG1hcHNbaV0udHh0X3NlYy0+c2hfYWRkciwKIAkJCQkJICAgICAgICAgbWFwc1tpXS50eHRfc2VjLT5zaF9zaXplKTsKICNlbmRpZgorCXMgPSBmaW5kX21vZF9zZWN0aW9uKGhkciwgc2VjaGRycywgIi5hbHQuc21wLmluaXQiKTsKKwlpZiAocyAmJiAhaXNfc21wKCkpCisJCWZpeHVwX3NtcCgodm9pZCAqKXMtPnNoX2FkZHIsIHMtPnNoX3NpemUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCA1ZWZhMjY0Li5kMTUwYWQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTcwMCw3ICs3MDAsNyBAQAogCSAqIEZyYW1lIHBvaW50ZXJzIHNob3VsZCBzdHJpY3RseSBwcm9ncmVzcyBiYWNrIHVwIHRoZSBzdGFjawogCSAqICh0b3dhcmRzIGhpZ2hlciBhZGRyZXNzZXMpLgogCSAqLwotCWlmICh0YWlsID49IGJ1ZnRhaWwuZnApCisJaWYgKHRhaWwgKyAxID49IGJ1ZnRhaWwuZnApCiAJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIGJ1ZnRhaWwuZnAgLSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BtdS5jIGIvYXJjaC9hcm0va2VybmVsL3BtdS5jCmluZGV4IGI4YWY5NmUuLjJjNzllZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wbXUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcG11LmMKQEAgLTk3LDI4ICs5NywzNCBAQAogCQkJICAgaXJxLCBjcHUpOwogCXJldHVybiBlcnI7CiAjZWxzZQotCXJldHVybiAwOworCXJldHVybiAtRUlOVkFMOwogI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQKIGluaXRfY3B1X3BtdSh2b2lkKQogewotCWludCBpLCBlcnIgPSAwOworCWludCBpLCBpcnFzLCBlcnIgPSAwOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwbXVfZGV2aWNlc1tBUk1fUE1VX0RFVklDRV9DUFVdOwogCi0JaWYgKCFwZGV2KSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoIXBkZXYpCisJCXJldHVybiAtRU5PREVWOwogCi0JZm9yIChpID0gMDsgaSA8IHBkZXYtPm51bV9yZXNvdXJjZXM7ICsraSkgeworCWlycXMgPSBwZGV2LT5udW1fcmVzb3VyY2VzOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGEgc2luZ2xlIFBNVSBpbnRlcnJ1cHQgdGhhdCB3ZSBjYW4ndCBzaGlmdCwgYXNzdW1lIHRoYXQKKwkgKiB3ZSdyZSBydW5uaW5nIG9uIGEgdW5pcHJvY2Vzc29yIG1hY2hpbmUgYW5kIGNvbnRpbnVlLgorCSAqLworCWlmIChpcnFzID09IDEgJiYgIWlycV9jYW5fc2V0X2FmZmluaXR5KHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCkpKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBpcnFzOyArK2kpIHsKIAkJZXJyID0gc2V0X2lycV9hZmZpbml0eShwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkpLCBpKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0KIAotb3V0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwppbmRleCAxOWM2ODE2Li5iMTNlNzBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCkBAIC05OTYsMTAgKzk5NiwxMCBAQAogCQl3aGlsZSAoIShhcmNoX2N0cmwubGVuICYgMHgxKSkKIAkJCWFyY2hfY3RybC5sZW4gPj49IDE7CiAKLQkJaWYgKGlkeCAmIDB4MSkKLQkJCXJlZyA9IGVuY29kZV9jdHJsX3JlZyhhcmNoX2N0cmwpOwotCQllbHNlCisJCWlmIChudW0gJiAweDEpCiAJCQlyZWcgPSBicC0+YXR0ci5icF9hZGRyOworCQllbHNlCisJCQlyZWcgPSBlbmNvZGVfY3RybF9yZWcoYXJjaF9jdHJsKTsKIAl9CiAKIHB1dDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggNDIwYjhkNi4uNWVhNGZiNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC0yMjYsOCArMjI2LDggQEAKIAkJICogUmVnaXN0ZXIgMCBhbmQgY2hlY2sgZm9yIFZNU0F2NyBvciBQTVNBdjcgKi8KIAkJYXNtKCJtcmMJcDE1LCAwLCAlMCwgYzAsIGMxLCA0IgogCQkgICAgOiAiPXIiIChtbWZyMCkpOwotCQlpZiAoKG1tZnIwICYgMHgwMDAwMDAwZikgPT0gMHgwMDAwMDAwMyB8fAotCQkgICAgKG1tZnIwICYgMHgwMDAwMDBmMCkgPT0gMHgwMDAwMDAzMCkKKwkJaWYgKChtbWZyMCAmIDB4MDAwMDAwMGYpID49IDB4MDAwMDAwMDMgfHwKKwkJICAgIChtbWZyMCAmIDB4MDAwMDAwZjApID49IDB4MDAwMDAwMzApCiAJCQljcHVfYXJjaCA9IENQVV9BUkNIX0FSTXY3OwogCQllbHNlIGlmICgobW1mcjAgJiAweDAwMDAwMDBmKSA9PSAweDAwMDAwMDAyIHx8CiAJCQkgKG1tZnIwICYgMHgwMDAwMDBmMCkgPT0gMHgwMDAwMDAyMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwppbmRleCA5MDdkNWE2Li5hYmFmODQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCkBAIC00NzQsNyArNDc0LDkgQEAKIAl1bnNpZ25lZCBsb25nIGhhbmRsZXIgPSAodW5zaWduZWQgbG9uZylrYS0+c2Euc2FfaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nIHJldGNvZGU7CiAJaW50IHRodW1iID0gMDsKLQl1bnNpZ25lZCBsb25nIGNwc3IgPSByZWdzLT5BUk1fY3BzciAmIH5QU1JfZjsKKwl1bnNpZ25lZCBsb25nIGNwc3IgPSByZWdzLT5BUk1fY3BzciAmIH4oUFNSX2YgfCBQU1JfRV9CSVQpOworCisJY3BzciB8PSBQU1JfRU5EU1RBVEU7CiAKIAkvKgogCSAqIE1heWJlIHdlIG5lZWQgdG8gZGVsaXZlciBhIDMyLWJpdCBzaWduYWwgdG8gYSAyNi1iaXQgdGFzay4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbGVlcC5TIGIvYXJjaC9hcm0va2VybmVsL3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhZDY5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbGVlcC5TCkBAIC0wLDAgKzEsMTM0IEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2dsdWUtY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vZ2x1ZS1wcm9jLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCS50ZXh0CisKKy8qCisgKiBTYXZlIENQVSBzdGF0ZSBmb3IgYSBzdXNwZW5kCisgKiAgcjEgPSB2OnAgb2Zmc2V0CisgKiAgcjMgPSB2aXJ0dWFsIHJldHVybiBmdW5jdGlvbgorICogTm90ZTogc3AgaXMgZGVjcmVtZW50ZWQgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIENQVSBzdGF0ZSBvbiBzdGFjaworICogcjAtcjMscjkscjEwLGxyIGNvcnJ1cHRlZAorICovCitFTlRSWShjcHVfc3VzcGVuZCkKKwltb3YJcjksIGxyCisjaWZkZWYgTVVMVElfQ1BVCisJbGRyCXIxMCwgPXByb2Nlc3NvcgorCW1vdglyMiwgc3AJCQlAIGN1cnJlbnQgdmlydHVhbCBTUAorCWxkcglyMCwgW3IxMCwgI0NQVV9TTEVFUF9TSVpFXSBAIHNpemUgb2YgQ1BVIHNsZWVwIHN0YXRlCisJbGRyCWlwLCBbcjEwLCAjQ1BVX0RPX1JFU1VNRV0gQCB2aXJ0dWFsIHJlc3VtZSBmdW5jdGlvbgorCXN1YglzcCwgc3AsIHIwCQlAIGFsbG9jYXRlIENQVSBzdGF0ZSBvbiBzdGFjaworCW1vdglyMCwgc3AJCQlAIHNhdmUgcG9pbnRlcgorCWFkZAlpcCwgaXAsIHIxCQlAIGNvbnZlcnQgcmVzdW1lIGZuIHRvIHBoeXMKKwlzdG1mZAlzcCEsIHtyMSwgcjIsIHIzLCBpcH0JQCBzYXZlIHY6cCwgdmlydCBTUCwgcmV0Zm4sIHBoeXMgcmVzdW1lIGZuCisJbGRyCXIzLCA9c2xlZXBfc2F2ZV9zcAorCWFkZAlyMiwgc3AsIHIxCQlAIGNvbnZlcnQgU1AgdG8gcGh5cworI2lmZGVmIENPTkZJR19TTVAKKwlBTFRfU01QKG1yYyBwMTUsIDAsIGxyLCBjMCwgYzAsIDUpCisJQUxUX1VQKG1vdiBsciwgIzApCisJYW5kCWxyLCBsciwgIzE1CisJc3RyCXIyLCBbcjMsIGxyLCBsc2wgIzJdCUAgc2F2ZSBwaHlzIFNQCisjZWxzZQorCXN0cglyMiwgW3IzXQkJQCBzYXZlIHBoeXMgU1AKKyNlbmRpZgorCW1vdglsciwgcGMKKwlsZHIJcGMsIFtyMTAsICNDUFVfRE9fU1VTUEVORF0gQCBzYXZlIENQVSBzdGF0ZQorI2Vsc2UKKwltb3YJcjIsIHNwCQkJQCBjdXJyZW50IHZpcnR1YWwgU1AKKwlsZHIJcjAsID1jcHVfc3VzcGVuZF9zaXplCisJc3ViCXNwLCBzcCwgcjAJCUAgYWxsb2NhdGUgQ1BVIHN0YXRlIG9uIHN0YWNrCisJbW92CXIwLCBzcAkJCUAgc2F2ZSBwb2ludGVyCisJc3RtZmQJc3AhLCB7cjEsIHIyLCByM30JQCBzYXZlIHY6cCwgdmlydCBTUCwgcmV0dXJuIGZuCisJbGRyCXIzLCA9c2xlZXBfc2F2ZV9zcAorCWFkZAlyMiwgc3AsIHIxCQlAIGNvbnZlcnQgU1AgdG8gcGh5cworI2lmZGVmIENPTkZJR19TTVAKKwlBTFRfU01QKG1yYyBwMTUsIDAsIGxyLCBjMCwgYzAsIDUpCisJQUxUX1VQKG1vdiBsciwgIzApCisJYW5kCWxyLCBsciwgIzE1CisJc3RyCXIyLCBbcjMsIGxyLCBsc2wgIzJdCUAgc2F2ZSBwaHlzIFNQCisjZWxzZQorCXN0cglyMiwgW3IzXQkJQCBzYXZlIHBoeXMgU1AKKyNlbmRpZgorCWJsCWNwdV9kb19zdXNwZW5kCisjZW5kaWYKKworCUAgZmx1c2ggZGF0YSBjYWNoZQorI2lmZGVmIE1VTFRJX0NBQ0hFCisJbGRyCXIxMCwgPWNwdV9jYWNoZQorCW1vdglsciwgcjkKKwlsZHIJcGMsIFtyMTAsICNDQUNIRV9GTFVTSF9LRVJOX0FMTF0KKyNlbHNlCisJbW92CWxyLCByOQorCWIJX19jcHVjX2ZsdXNoX2tlcm5fYWxsCisjZW5kaWYKK0VORFBST0MoY3B1X3N1c3BlbmQpCisJLmx0b3JnCisKKy8qCisgKiByMCA9IGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWUKKyAqIHIxID0gdjpwIG9mZnNldCAocHJlc2VydmVkIGJ5IGNwdV9kb19yZXN1bWUpCisgKiByMiA9IHBoeXMgcGFnZSB0YWJsZSBiYXNlCisgKiByMyA9IEwxIHNlY3Rpb24gZmxhZ3MKKyAqLworRU5UUlkoY3B1X3Jlc3VtZV9tbXUpCisJYWRyCXI0LCBjcHVfcmVzdW1lX3R1cm5fbW11X29uCisJbW92CXI0LCByNCwgbHNyICMyMAorCW9ycglyMywgcjMsIHI0LCBsc2wgIzIwCisJbGRyCXI1LCBbcjIsIHI0LCBsc2wgIzJdCUAgc2F2ZSBvbGQgbWFwcGluZworCXN0cglyMywgW3IyLCByNCwgbHNsICMyXQlAIHNldHVwIDE6MSBtYXBwaW5nIGZvciBtbXUgY29kZQorCXN1YglyMiwgcjIsIHIxCisJbGRyCXIzLCA9Y3B1X3Jlc3VtZV9hZnRlcl9tbXUKKwliaWMJcjEsIHIwLCAjQ1JfQwkJQCBlbnN1cmUgRC1jYWNoZSBpcyBkaXNhYmxlZAorCWIJY3B1X3Jlc3VtZV90dXJuX21tdV9vbgorRU5EUFJPQyhjcHVfcmVzdW1lX21tdSkKKwkubHRvcmcKKwkuYWxpZ24JNQorY3B1X3Jlc3VtZV90dXJuX21tdV9vbjoKKwltY3IJcDE1LCAwLCByMSwgYzEsIGMwLCAwCUAgdHVybiBvbiBNTVUsIEktY2FjaGUsIGV0YworCW1yYwlwMTUsIDAsIHIxLCBjMCwgYzAsIDAJQCByZWFkIGlkIHJlZworCW1vdglyMSwgcjEKKwltb3YJcjEsIHIxCisJbW92CXBjLCByMwkJCUAganVtcCB0byB2aXJ0dWFsIGFkZHJlc3MKK0VORFBST0MoY3B1X3Jlc3VtZV90dXJuX21tdV9vbikKK2NwdV9yZXN1bWVfYWZ0ZXJfbW11OgorCXN0cglyNSwgW3IyLCByNCwgbHNsICMyXQlAIHJlc3RvcmUgb2xkIG1hcHBpbmcKKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgdHVybiBvbiBELWNhY2hlCisJbW92CXBjLCBscgorRU5EUFJPQyhjcHVfcmVzdW1lX2FmdGVyX21tdSkKKworLyoKKyAqIE5vdGU6IFllcywgcGFydCBvZiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgbG9jYXRlZCBpbnRvIHRoZSAuZGF0YSBzZWN0aW9uLgorICogICAgICAgVGhpcyBpcyB0byBhbGxvdyBzbGVlcF9zYXZlX3NwIHRvIGJlIGFjY2Vzc2VkIHdpdGggYSByZWxhdGl2ZSBsb2FkCisgKiAgICAgICB3aGlsZSB3ZSBjYW4ndCByZWx5IG9uIGFueSBNTVUgdHJhbnNsYXRpb24uICBXZSBjb3VsZCBoYXZlIHB1dAorICogICAgICAgc2xlZXBfc2F2ZV9zcCBpbiB0aGUgLnRleHQgc2VjdGlvbiBhcyB3ZWxsLCBidXQgc29tZSBzZXR1cHMgbWlnaHQKKyAqICAgICAgIGluc2lzdCBvbiBpdCB0byBiZSB0cnVseSByZWFkLW9ubHkuCisgKi8KKwkuZGF0YQorCS5hbGlnbgorRU5UUlkoY3B1X3Jlc3VtZSkKKyNpZmRlZiBDT05GSUdfU01QCisJYWRyCXIwLCBzbGVlcF9zYXZlX3NwCisJQUxUX1NNUChtcmMgcDE1LCAwLCByMSwgYzAsIGMwLCA1KQorCUFMVF9VUChtb3YgcjEsICMwKQorCWFuZAlyMSwgcjEsICMxNQorCWxkcglyMCwgW3IwLCByMSwgbHNsICMyXQlAIHN0YWNrIHBoeXMgYWRkcgorI2Vsc2UKKwlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJQCBzdGFjayBwaHlzIGFkZHIKKyNlbmRpZgorCW1zcgljcHNyX2MsICNQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBTVkNfTU9ERSBAIHNldCBTVkMsIGlycXMgb2ZmCisjaWZkZWYgTVVMVElfQ1BVCisJbGRtaWEJcjAhLCB7cjEsIHNwLCBsciwgcGN9CUAgbG9hZCB2OnAsIHN0YWNrLCByZXR1cm4gZm4sIHJlc3VtZSBmbgorI2Vsc2UKKwlsZG1pYQlyMCEsIHtyMSwgc3AsIGxyfQlAIGxvYWQgdjpwLCBzdGFjaywgcmV0dXJuIGZuCisJYgljcHVfZG9fcmVzdW1lCisjZW5kaWYKK0VORFBST0MoY3B1X3Jlc3VtZSkKKworc2xlZXBfc2F2ZV9zcDoKKwkucmVwdAlDT05GSUdfTlJfQ1BVUworCS5sb25nCTAJCQkJQCBwcmVzZXJ2ZSBzdGFjayBwaHlzIHB0ciBoZXJlCisJLmVuZHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3NjdS5jCmluZGV4IDlhYjQxNDkuLmExZTc1N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF9zY3UuYwpAQCAtNTAsMyArNTAsMjYgQEAKIAkgKi8KIAlmbHVzaF9jYWNoZV9hbGwoKTsKIH0KKworLyoKKyAqIFNldCB0aGUgZXhlY3V0aW5nIENQVXMgcG93ZXIgbW9kZSBhcyBkZWZpbmVkLiAgVGhpcyB3aWxsIGJlIGluCisgKiBwcmVwYXJhdGlvbiBmb3IgaXQgZXhlY3V0aW5nIGEgV0ZJIGluc3RydWN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLCBhbmQgYXMgaXQKKyAqIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgZGlzYWJsaW5nIGNvaGVyZW5jeSwgY2FjaGVzIG11c3QgaGF2ZSBiZWVuCisgKiBmbHVzaGVkLiAgSW50ZXJydXB0cyBtdXN0IGFsc28gaGF2ZSBiZWVuIGRpc2FibGVkLgorICovCitpbnQgc2N1X3Bvd2VyX21vZGUodm9pZCBfX2lvbWVtICpzY3VfYmFzZSwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKG1vZGUgPiAzIHx8IG1vZGUgPT0gMSB8fCBjcHUgPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IF9fcmF3X3JlYWRiKHNjdV9iYXNlICsgU0NVX0NQVV9TVEFUVVMgKyBjcHUpICYgfjB4MDM7CisJdmFsIHw9IG1vZGU7CisJX19yYXdfd3JpdGViKHZhbCwgc2N1X2Jhc2UgKyBTQ1VfQ1BVX1NUQVRVUyArIGNwdSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCmluZGV4IGZkOTE1NjYuLjYwNjM2ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYwpAQCAtMzYsNiArMzYsNyBAQAogCQkvKiB0aW1lciBsb2FkIGFscmVhZHkgc2V0IHVwICovCiAJCWN0cmwgPSBUV0RfVElNRVJfQ09OVFJPTF9FTkFCTEUgfCBUV0RfVElNRVJfQ09OVFJPTF9JVF9FTkFCTEUKIAkJCXwgVFdEX1RJTUVSX0NPTlRST0xfUEVSSU9ESUM7CisJCV9fcmF3X3dyaXRlbCh0d2RfdGltZXJfcmF0ZSAvIEhaLCB0d2RfYmFzZSArIFRXRF9USU1FUl9MT0FEKTsKIAkJYnJlYWs7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgogCQkvKiBwZXJpb2Qgc2V0LCBhbmQgdGltZXIgZW5hYmxlZCBpbiAnbmV4dF9ldmVudCcgaG9vayAqLwpAQCAtODEsNyArODIsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgdHdkX2NhbGlicmF0ZV9yYXRlKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb2FkLCBjb3VudDsKKwl1bnNpZ25lZCBsb25nIGNvdW50OwogCXU2NCB3YWl0amlmZmllczsKIAogCS8qCkBAIC0xMTYsMTAgKzExNyw2IEBACiAJCXByaW50aygiJWx1LiUwMmx1TUh6LlxuIiwgdHdkX3RpbWVyX3JhdGUgLyAxMDAwMDAwLAogCQkJKHR3ZF90aW1lcl9yYXRlIC8gMTAwMDAwMCkgJSAxMDApOwogCX0KLQotCWxvYWQgPSB0d2RfdGltZXJfcmF0ZSAvIEhaOwotCi0JX19yYXdfd3JpdGVsKGxvYWQsIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0xPQUQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA4NmI2NmYzLi42MTQ2Mjc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMjEsNiArMjEsMTIgQEAKICNkZWZpbmUgQVJNX0NQVV9LRUVQKHgpCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1NNUF9PTl9VUCkgJiYgIWRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQorI2RlZmluZSBBUk1fRVhJVF9LRUVQKHgpCXgKKyNlbHNlCisjZGVmaW5lIEFSTV9FWElUX0tFRVAoeCkKKyNlbmRpZgorCiBPVVRQVVRfQVJDSChhcm0pCiBFTlRSWShzdGV4dCkKIApAQCAtNDMsNiArNDksNyBAQAogCQlfc2luaXR0ZXh0ID0gLjsKIAkJCUhFQURfVEVYVAogCQkJSU5JVF9URVhUCisJCQlBUk1fRVhJVF9LRUVQKEVYSVRfVEVYVCkKIAkJX2Vpbml0dGV4dCA9IC47CiAJCUFSTV9DUFVfRElTQ0FSRChQUk9DX0lORk8pCiAJCV9fYXJjaF9pbmZvX2JlZ2luID0gLjsKQEAgLTY3LDYgKzc0LDcgQEAKICNpZm5kZWYgQ09ORklHX1hJUF9LRVJORUwKIAkJX19pbml0X2JlZ2luID0gX3N0ZXh0OwogCQlJTklUX0RBVEEKKwkJQVJNX0VYSVRfS0VFUChFWElUX0RBVEEpCiAjZW5kaWYKIAl9CiAKQEAgLTE2Miw2ICsxNzAsNyBAQAogCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkJX19pbml0X2JlZ2luID0gLjsKIAkJSU5JVF9EQVRBCisJCUFSTV9FWElUX0tFRVAoRVhJVF9EQVRBKQogCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkJX19pbml0X2VuZCA9IC47CiAjZW5kaWYKQEAgLTI0Nyw2ICsyNTYsOCBAQAogCX0KICNlbmRpZgogCisJTk9URVMKKwogCUJTU19TRUNUSU9OKDAsIDAsIDApCiAJX2VuZCA9IC47CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMKaW5kZXggMGE5OWIzYy4uMTdmN2Q5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogCXsKIAkJLyogUlRDICovCiAJCUkyQ19CT0FSRF9JTkZPKCJpc2wxMjA4IiwgMHg2ZiksCisJCS5pcnEgPSBncGlvX3RvX2lycShBVDkxX1BJTl9QQTMxKSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBiZmRkOGFiLi5kZGViNjQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMjIwLDE1ICsyMjAsOCBAQAogI2RlZmluZSBncGlvX3NldF92YWx1ZQlfX2dwaW9fc2V0X3ZhbHVlCiAjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJX19ncGlvX2NhbnNsZWVwCiAKLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIGdwaW87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlyZXR1cm4gaXJxOwotfQorI2RlZmluZSBncGlvX3RvX2lycShncGlvKSAoZ3BpbykKKyNkZWZpbmUgaXJxX3RvX2dwaW8oaXJxKSAgKGlycSkKIAogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1ZnJlcS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwdWZyZXEuYwppbmRleCAzNDNkZTczLi40YTY4YzJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1ZnJlcS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcHVmcmVxLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGRhdmluY2lfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IGRhdmluY2lfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGRhdmluY2lfY3B1ZnJlcV9jb25maWcgKnBkYXRhID0gY3B1ZnJlcS5kZXYtPnBsYXRmb3JtX2RhdGE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYwppbmRleCA5ZWVjNjMwLi5iZWRhOGE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKQEAgLTQ4MCw4ICs0ODAsMTUgQEAKIAkucmVzb3VyY2UJPSBkYTg1MF9tY2FzcF9yZXNvdXJjZXMsCiB9OwogCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRhdmluY2lfcGNtX2RldmljZSA9IHsKKwkubmFtZQk9ICJkYXZpbmNpLXBjbS1hdWRpbyIsCisJLmlkCT0gLTEsCit9OworCiB2b2lkIF9faW5pdCBkYTh4eF9yZWdpc3Rlcl9tY2FzcChpbnQgaWQsIHN0cnVjdCBzbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYXZpbmNpX3BjbV9kZXZpY2UpOworCiAJLyogREE4MzAvT01BUC1MMTM3IGhhcyAzIGluc3RhbmNlcyBvZiBNY0FTUCAqLwogCWlmIChjcHVfaXNfZGF2aW5jaV9kYTgzMCgpICYmIGlkID09IDEpIHsKIAkJZGE4MzBfbWNhc3AxX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IHBkYXRhOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2dwaW8tdG5ldHYxMDd4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZ3Bpby10bmV0djEwN3guYwppbmRleCBkMTAyOTg2Li4zZmEzZTI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZ3Bpby10bmV0djEwN3guYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZ3Bpby10bmV0djEwN3guYwpAQCAtNTgsNyArNTgsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKIAotCWdwaW9fcmVnX3NldF9iaXQoJnJlZ3MtPmVuYWJsZSwgZ3Bpbyk7CisJZ3Bpb19yZWdfc2V0X2JpdChyZWdzLT5lbmFibGUsIGdwaW8pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Rsci0+bG9jaywgZmxhZ3MpOwogCkBAIC03NCw3ICs3NCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3Rsci0+bG9jaywgZmxhZ3MpOwogCi0JZ3Bpb19yZWdfY2xlYXJfYml0KCZyZWdzLT5lbmFibGUsIGdwaW8pOworCWdwaW9fcmVnX2NsZWFyX2JpdChyZWdzLT5lbmFibGUsIGdwaW8pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Rsci0+bG9jaywgZmxhZ3MpOwogfQpAQCAtODgsNyArODgsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKIAotCWdwaW9fcmVnX3NldF9iaXQoJnJlZ3MtPmRpcmVjdGlvbiwgZ3Bpbyk7CisJZ3Bpb19yZWdfc2V0X2JpdChyZWdzLT5kaXJlY3Rpb24sIGdwaW8pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Rsci0+bG9jaywgZmxhZ3MpOwogCkBAIC0xMDYsMTEgKzEwNiwxMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjdGxyLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAodmFsdWUpCi0JCWdwaW9fcmVnX3NldF9iaXQoJnJlZ3MtPmRhdGFfb3V0LCBncGlvKTsKKwkJZ3Bpb19yZWdfc2V0X2JpdChyZWdzLT5kYXRhX291dCwgZ3Bpbyk7CiAJZWxzZQotCQlncGlvX3JlZ19jbGVhcl9iaXQoJnJlZ3MtPmRhdGFfb3V0LCBncGlvKTsKKwkJZ3Bpb19yZWdfY2xlYXJfYml0KHJlZ3MtPmRhdGFfb3V0LCBncGlvKTsKIAotCWdwaW9fcmVnX2NsZWFyX2JpdCgmcmVncy0+ZGlyZWN0aW9uLCBncGlvKTsKKwlncGlvX3JlZ19jbGVhcl9iaXQocmVncy0+ZGlyZWN0aW9uLCBncGlvKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKIApAQCAtMTI0LDcgKzEyNCw3IEBACiAJdW5zaWduZWQgZ3BpbyA9IGNoaXAtPmJhc2UgKyBvZmZzZXQ7CiAJaW50IHJldDsKIAotCXJldCA9IGdwaW9fcmVnX2dldF9iaXQoJnJlZ3MtPmRhdGFfaW4sIGdwaW8pOworCXJldCA9IGdwaW9fcmVnX2dldF9iaXQocmVncy0+ZGF0YV9pbiwgZ3Bpbyk7CiAKIAlyZXR1cm4gcmV0ID8gMSA6IDA7CiB9CkBAIC0xNDAsOSArMTQwLDkgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3Rsci0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHZhbHVlKQotCQlncGlvX3JlZ19zZXRfYml0KCZyZWdzLT5kYXRhX291dCwgZ3Bpbyk7CisJCWdwaW9fcmVnX3NldF9iaXQocmVncy0+ZGF0YV9vdXQsIGdwaW8pOwogCWVsc2UKLQkJZ3Bpb19yZWdfY2xlYXJfYml0KCZyZWdzLT5kYXRhX291dCwgZ3Bpbyk7CisJCWdwaW9fcmVnX2NsZWFyX2JpdChyZWdzLT5kYXRhX291dCwgZ3Bpbyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGxyLT5sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jbGtkZXYuaAppbmRleCA3MzBjNDlkLi4xNGE1MDQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvY2xrZGV2LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fTUFDSF9DTEtERVZfSAogI2RlZmluZSBfX01BQ0hfQ0xLREVWX0gKIAorc3RydWN0IGNsazsKKwogc3RhdGljIGlubGluZSBpbnQgX19jbGtfZ2V0KHN0cnVjdCBjbGsgKmNsaykKIHsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCBmZmRmODdiLi44MjA3OTU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC04MzgsNyArODM4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXA5M3h4X2FjOTdfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQJPSBFUDkzWFhfQUFDX1BIWVNfQkFTRSwKLQkJLmVuZAk9IEVQOTNYWF9BQUNfUEhZU19CQVNFICsgMHhiMCAtIDEsCisJCS5lbmQJPSBFUDkzWFhfQUFDX1BIWVNfQkFTRSArIDB4YWMgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCXsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwppbmRleCA0YjA0MzE2Li45OTY5YmIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCkBAIC0zMCw4ICszMCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NzNDI3MS5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZmIuaD4KKyNpbmNsdWRlIDxtYWNoL2VwOTN4eF9zcGkuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtOTMsNiArOTgsODMgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRURCOTN4eCBTUEkgcGVyaXBoZXJhbCBoYW5kbGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGNzNDI3MV9wbGF0Zm9ybV9kYXRhIGVkYjkzeHhfY3M0MjcxX2RhdGEgPSB7CisJLmdwaW9fbnJlc2V0CT0gLUVJTlZBTCwJLyogZmlsbGVkIGluIGxhdGVyICovCit9OworCitzdGF0aWMgaW50IGVkYjkzeHhfY3M0MjcxX2h3X3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJcmV0dXJuIGdwaW9fcmVxdWVzdF9vbmUoRVA5M1hYX0dQSU9fTElORV9FR1BJTzYsCisJCQkJR1BJT0ZfT1VUX0lOSVRfSElHSCwgc3BpLT5tb2RhbGlhcyk7Cit9CisKK3N0YXRpYyB2b2lkIGVkYjkzeHhfY3M0MjcxX2h3X2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlncGlvX2ZyZWUoRVA5M1hYX0dQSU9fTElORV9FR1BJTzYpOworfQorCitzdGF0aWMgdm9pZCBlZGI5M3h4X2NzNDI3MV9od19jc19jb250cm9sKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCB2YWx1ZSkKK3sKKwlncGlvX3NldF92YWx1ZShFUDkzWFhfR1BJT19MSU5FX0VHUElPNiwgdmFsdWUpOworfQorCitzdGF0aWMgc3RydWN0IGVwOTN4eF9zcGlfY2hpcF9vcHMgZWRiOTN4eF9jczQyNzFfaHcgPSB7CisJLnNldHVwCQk9IGVkYjkzeHhfY3M0MjcxX2h3X3NldHVwLAorCS5jbGVhbnVwCT0gZWRiOTN4eF9jczQyNzFfaHdfY2xlYW51cCwKKwkuY3NfY29udHJvbAk9IGVkYjkzeHhfY3M0MjcxX2h3X2NzX2NvbnRyb2wsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVkYjkzeHhfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzCQk9ICJjczQyNzEiLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZWRiOTN4eF9jczQyNzFfZGF0YSwKKwkJLmNvbnRyb2xsZXJfZGF0YQk9ICZlZGI5M3h4X2NzNDI3MV9odywKKwkJLm1heF9zcGVlZF9oegkJPSA2MDAwMDAwLAorCQkuYnVzX251bQkJPSAwLAorCQkuY2hpcF9zZWxlY3QJCT0gMCwKKwkJLm1vZGUJCQk9IFNQSV9NT0RFXzMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXA5M3h4X3NwaV9pbmZvIGVkYjkzeHhfc3BpX2luZm8gX19pbml0ZGF0YSA9IHsKKwkubnVtX2NoaXBzZWxlY3QJPSBBUlJBWV9TSVpFKGVkYjkzeHhfc3BpX2JvYXJkX2luZm8pLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVkYjkzeHhfcmVnaXN0ZXJfc3BpKHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfZWRiOTMwMSgpIHx8IG1hY2hpbmVfaXNfZWRiOTMwMigpKQorCQllZGI5M3h4X2NzNDI3MV9kYXRhLmdwaW9fbnJlc2V0ID0gRVA5M1hYX0dQSU9fTElORV9FR1BJTzE7CisJZWxzZSBpZiAobWFjaGluZV9pc19lZGI5MzAyYSgpIHx8IG1hY2hpbmVfaXNfZWRiOTMwN2EoKSkKKwkJZWRiOTN4eF9jczQyNzFfZGF0YS5ncGlvX25yZXNldCA9IEVQOTNYWF9HUElPX0xJTkVfSCgyKTsKKwllbHNlIGlmIChtYWNoaW5lX2lzX2VkYjkzMTVhKCkpCisJCWVkYjkzeHhfY3M0MjcxX2RhdGEuZ3Bpb19ucmVzZXQgPSBFUDkzWFhfR1BJT19MSU5FX0VHUElPMTQ7CisKKwllcDkzeHhfcmVnaXN0ZXJfc3BpKCZlZGI5M3h4X3NwaV9pbmZvLCBlZGI5M3h4X3NwaV9ib2FyZF9pbmZvLAorCQkJICAgIEFSUkFZX1NJWkUoZWRiOTN4eF9zcGlfYm9hcmRfaW5mbykpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFREI5M3h4IEkyUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IF9faW5pdCBlZGI5M3h4X2hhc19hdWRpbyh2b2lkKQoreworCXJldHVybiAobWFjaGluZV9pc19lZGI5MzAxKCkgfHwgbWFjaGluZV9pc19lZGI5MzAyKCkgfHwKKwkJbWFjaGluZV9pc19lZGI5MzAyYSgpIHx8IG1hY2hpbmVfaXNfZWRiOTMwN2EoKSB8fAorCQltYWNoaW5lX2lzX2VkYjkzMTVhKCkpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTN4eF9yZWdpc3Rlcl9pMnModm9pZCkKK3sKKwlpZiAoZWRiOTN4eF9oYXNfYXVkaW8oKSkgeworCQllcDkzeHhfcmVnaXN0ZXJfaTJzKCk7CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBFREI5M3h4IHB3bQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTN4eF9yZWdpc3Rlcl9wd20odm9pZCkKQEAgLTExMSwxMyArMTkzLDQ3IEBACiB9CiAKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVEQjkzeHggZnJhbWVidWZmZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBlcDkzeHhmYl9tYWNoX2luZm8gX19pbml0ZGF0YSBlZGI5M3h4ZmJfaW5mbyA9IHsKKwkubnVtX21vZGVzCT0gRVA5M1hYRkJfVVNFX01PREVEQiwKKwkuYnBwCQk9IDE2LAorCS5mbGFncwkJPSAwLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZWRiOTN4eF9oYXNfZmIodm9pZCkKK3sKKwkvKiBUaGVzZSBwbGF0Zm9ybXMgaGF2ZSBhbiBlcDkzeHggd2l0aCB2aWRlbyBjYXBhYmlsaXR5ICovCisJcmV0dXJuIG1hY2hpbmVfaXNfZWRiOTMwNygpIHx8IG1hY2hpbmVfaXNfZWRiOTMwN2EoKSB8fAorCSAgICAgICBtYWNoaW5lX2lzX2VkYjkzMTIoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMTUoKSB8fAorCSAgICAgICBtYWNoaW5lX2lzX2VkYjkzMTVhKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlZGI5M3h4X3JlZ2lzdGVyX2ZiKHZvaWQpCit7CisJaWYgKCFlZGI5M3h4X2hhc19mYigpKQorCQlyZXR1cm47CisKKwlpZiAobWFjaGluZV9pc19lZGI5MzA3YSgpIHx8IG1hY2hpbmVfaXNfZWRiOTMxNWEoKSkKKwkJZWRiOTN4eGZiX2luZm8uZmxhZ3MgfD0gRVA5M1hYRkJfVVNFX1NEQ1NOMDsKKwllbHNlCisJCWVkYjkzeHhmYl9pbmZvLmZsYWdzIHw9IEVQOTNYWEZCX1VTRV9TRENTTjM7CisKKwllcDkzeHhfcmVnaXN0ZXJfZmIoJmVkYjkzeHhmYl9pbmZvKTsKK30KKworCiBzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTN4eF9pbml0X21hY2hpbmUodm9pZCkKIHsKIAllcDkzeHhfaW5pdF9kZXZpY2VzKCk7CiAJZWRiOTN4eF9yZWdpc3Rlcl9mbGFzaCgpOwogCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJmVkYjkzeHhfZXRoX2RhdGEsIDEpOwogCWVkYjkzeHhfcmVnaXN0ZXJfaTJjKCk7CisJZWRiOTN4eF9yZWdpc3Rlcl9zcGkoKTsKKwllZGI5M3h4X3JlZ2lzdGVyX2kycygpOwogCWVkYjkzeHhfcmVnaXN0ZXJfcHdtKCk7CisJZWRiOTN4eF9yZWdpc3Rlcl9mYigpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwppbmRleCBmM2RjNzZmLi5hODg5ZmE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCkBAIC02MSw3ICs2MSw3IEBACiAJZ3Bpb19pbnRfdW5tYXNrZWRbbGluZSA+PiAzXSAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7CiB9CiAKLXZvaWQgZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBlbmFibGUpCitzdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19pbnRfZGVib3VuY2UodW5zaWduZWQgaW50IGlycSwgYm9vbCBlbmFibGUpCiB7CiAJaW50IGxpbmUgPSBpcnFfdG9fZ3BpbyhpcnEpOwogCWludCBwb3J0ID0gbGluZSA+PiAzOwpAQCAtNzUsNyArNzUsNiBAQAogCV9fcmF3X3dyaXRlYihncGlvX2ludF9kZWJvdW5jZVtwb3J0XSwKIAkJRVA5M1hYX0dQSU9fUkVHKGludF9kZWJvdW5jZV9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKIH0KLUVYUE9SVF9TWU1CT0woZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKTsKIAogc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9fYWJfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewpAQCAtMzM1LDYgKzMzNCwyMCBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAorc3RhdGljIGludCBlcDkzeHhfZ3Bpb19zZXRfZGVib3VuY2Uoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBkZWJvdW5jZSkKK3sKKwlpbnQgZ3BpbyA9IGNoaXAtPmJhc2UgKyBvZmZzZXQ7CisJaW50IGlycSA9IGdwaW9fdG9faXJxKGdwaW8pOworCisJaWYgKGlycSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKGlycSwgZGVib3VuY2UgPyB0cnVlIDogZmFsc2UpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2RiZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKIHsKIAlzdHJ1Y3QgZXA5M3h4X2dwaW9fY2hpcCAqZXA5M3h4X2NoaXAgPSB0b19lcDkzeHhfZ3Bpb19jaGlwKGNoaXApOwpAQCAtNDI3LDYgKzQ0MCwyNSBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXA5M3h4X2dwaW9fYmFua3MpOyBpKyspCi0JCWdwaW9jaGlwX2FkZCgmZXA5M3h4X2dwaW9fYmFua3NbaV0uY2hpcCk7CisJLyogU2V0IFBvcnRzIEMsIEQsIEUsIEcsIGFuZCBIIGZvciBHUElPIHVzZSAqLworCWVwOTN4eF9kZXZjZmdfc2V0X2JpdHMoRVA5M1hYX1NZU0NPTl9ERVZDRkdfS0VZUyB8CisJCQkJIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0dPTksgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19FT05JREUgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19HT05JREUgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19IT05JREUpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXA5M3h4X2dwaW9fYmFua3MpOyBpKyspIHsKKwkJc3RydWN0IGdwaW9fY2hpcCAqY2hpcCA9ICZlcDkzeHhfZ3Bpb19iYW5rc1tpXS5jaGlwOworCisJCS8qCisJCSAqIFBvcnRzIEEsIEIsIGFuZCBGIHN1cHBvcnQgaW5wdXQgZGVib3VuY2luZyB3aGVuCisJCSAqIHVzZWQgYXMgaW50ZXJydXB0cy4KKwkJICovCisJCWlmICghc3RyY21wKGNoaXAtPmxhYmVsLCAiQSIpIHx8CisJCSAgICAhc3RyY21wKGNoaXAtPmxhYmVsLCAiQiIpIHx8CisJCSAgICAhc3RyY21wKGNoaXAtPmxhYmVsLCAiRiIpKQorCQkJY2hpcC0+c2V0X2RlYm91bmNlID0gZXA5M3h4X2dwaW9fc2V0X2RlYm91bmNlOworCisJCWdwaW9jaGlwX2FkZChjaGlwKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBjOTkxYjE0Li5jNTcxNTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTk5LDggKzk5LDYgQEAKIC8qIG1heGltdW0gdmFsdWUgZm9yIGlycSBjYXBhYmxlIGxpbmUgaWRlbnRpZmllcnMgKi8KICNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRCUVQOTNYWF9HUElPX0xJTkVfRig3KQogCi1leHRlcm4gdm9pZCBlcDkzeHhfZ3Bpb19pbnRfZGVib3VuY2UodW5zaWduZWQgaW50IGlycSwgaW50IGVuYWJsZSk7Ci0KIC8qIG5ldyBnZW5lcmljIEdQSU8gQVBJIC0gc2VlIERvY3VtZW50YXRpb24vZ3Bpby50eHQgKi8KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jCmluZGV4IGJjNWU4M2YuLmE5MjFmZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYwpAQCAtNCwxMCArNCwxMSBAQAogICogIENvcHlyaWdodCAoQykgMTk5OCBSdXNzZWxsIEtpbmcuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFBoaWwgQmx1bmRlbGwKICAqLworI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC0xNiwzMiArMTcsNzYgQEAKIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCi0vKgotICogRm9vdGJyaWRnZSB0aW1lciAxIHN1cHBvcnQuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyMV9sYXRjaDsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXIxX2dldHRpbWVvZmZzZXQgKHZvaWQpCitzdGF0aWMgY3ljbGVfdCBja3NyY19kYzIxMjg1X3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKLQl1bnNpZ25lZCBsb25nIHZhbHVlID0gdGltZXIxX2xhdGNoIC0gKkNTUl9USU1FUjFfVkFMVUU7Ci0KLQlyZXR1cm4gKCh0aWNrX25zZWMgLyAxMDAwKSAqIHZhbHVlKSAvIHRpbWVyMV9sYXRjaDsKKwlyZXR1cm4gY3MtPm1hc2sgLSAqQ1NSX1RJTUVSMl9WQUxVRTsKIH0KIAotc3RhdGljIGlycXJldHVybl90Ci10aW1lcjFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgY2tzcmNfZGMyMTI4NV9lbmFibGUoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKKwkqQ1NSX1RJTUVSMl9MT0FEID0gY3MtPm1hc2s7CisJKkNTUl9USU1FUjJfQ0xSID0gMDsKKwkqQ1NSX1RJTUVSMl9DTlRMID0gVElNRVJfQ05UTF9FTkFCTEUgfCBUSU1FUl9DTlRMX0RJVjE2OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNrc3JjX2RjMjEyODVfZGlzYWJsZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCSpDU1JfVElNRVIyX0NOVEwgPSAwOworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNrc3JjX2RjMjEyODUgPSB7CisJLm5hbWUJCT0gImRjMjEyODVfdGltZXIyIiwKKwkucmF0aW5nCQk9IDIwMCwKKwkucmVhZAkJPSBja3NyY19kYzIxMjg1X3JlYWQsCisJLmVuYWJsZQkJPSBja3NyY19kYzIxMjg1X2VuYWJsZSwKKwkuZGlzYWJsZQk9IGNrc3JjX2RjMjEyODVfZGlzYWJsZSwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDI0KSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCitzdGF0aWMgdm9pZCBja2V2dF9kYzIxMjg1X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmMpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJKkNTUl9USU1FUjFfQ0xSID0gMDsKKwkJKkNTUl9USU1FUjFfTE9BRCA9IChtZW1fZmNsa18yMTI4NSArIDggKiBIWikgLyAoMTYgKiBIWik7CisJCSpDU1JfVElNRVIxX0NOVEwgPSBUSU1FUl9DTlRMX0VOQUJMRSB8IFRJTUVSX0NOVExfQVVUT1JFTE9BRCB8CisJCQkJICAgVElNRVJfQ05UTF9ESVYxNjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkqQ1NSX1RJTUVSMV9DTlRMID0gMDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBja2V2dF9kYzIxMjg1ID0geworCS5uYW1lCQk9ICJkYzIxMjg1X3RpbWVyMSIsCisJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMsCisJLnJhdGluZwkJPSAyMDAsCisJLmlycQkJPSBJUlFfVElNRVIxLAorCS5zZXRfbW9kZQk9IGNrZXZ0X2RjMjEyODVfc2V0X21vZGUsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXIxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2UgPSBkZXZfaWQ7CisKIAkqQ1NSX1RJTUVSMV9DTFIgPSAwOwogCi0JdGltZXJfdGljaygpOworCWNlLT5ldmVudF9oYW5kbGVyKGNlKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gZm9vdGJyaWRnZV90aW1lcl9pcnEgPSB7Ci0JLm5hbWUJCT0gIlRpbWVyMSB0aW1lciB0aWNrIiwKKwkubmFtZQkJPSAiZGMyMTI4NV90aW1lcjEiLAogCS5oYW5kbGVyCT0gdGltZXIxX2ludGVycnVwdCwKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCisJLmRldl9pZAkJPSAmY2tldnRfZGMyMTI4NSwKIH07CiAKIC8qCkBAIC00OSwxNiArOTQsMTkgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IGZvb3RicmlkZ2VfdGltZXJfaW5pdCh2b2lkKQogewotCXRpbWVyMV9sYXRjaCA9IChtZW1fZmNsa18yMTI4NSArIDggKiBIWikgLyAoMTYgKiBIWik7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2UgPSAmY2tldnRfZGMyMTI4NTsKIAotCSpDU1JfVElNRVIxX0NMUiAgPSAwOwotCSpDU1JfVElNRVIxX0xPQUQgPSB0aW1lcjFfbGF0Y2g7Ci0JKkNTUl9USU1FUjFfQ05UTCA9IFRJTUVSX0NOVExfRU5BQkxFIHwgVElNRVJfQ05UTF9BVVRPUkVMT0FEIHwgVElNRVJfQ05UTF9ESVYxNjsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2tzcmNfZGMyMTI4NSwgKG1lbV9mY2xrXzIxMjg1ICsgOCkgLyAxNik7CiAKLQlzZXR1cF9pcnEoSVJRX1RJTUVSMSwgJmZvb3RicmlkZ2VfdGltZXJfaXJxKTsKKwlzZXR1cF9pcnEoY2UtPmlycSwgJmZvb3RicmlkZ2VfdGltZXJfaXJxKTsKKworCWNsb2NrZXZlbnRzX2NhbGNfbXVsdF9zaGlmdChjZSwgbWVtX2ZjbGtfMjEyODUsIDUpOworCWNlLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmLCBjZSk7CisJY2UtPm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHgwMDAwMDQsIGNlKTsKKworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZSk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIgZm9vdGJyaWRnZV90aW1lciA9IHsKIAkuaW5pdAkJPSBmb290YnJpZGdlX3RpbWVyX2luaXQsCi0JLm9mZnNldAkJPSB0aW1lcjFfZ2V0dGltZW9mZnNldCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggM2M5ZTBjNC4uMzBiOTcxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTcsOCArMTcsOCBAQAogCS8qIEZvciBOZXRXaW5kZXIgZGVidWdnaW5nICovCiAJCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2CiAJCW1vdglccnAsICMweDAwMDAwM2Y4Ci0JCW9ycglccnYsIFxycCwgIzB4N2MwMDAwMDAJQCBwaHlzaWNhbAotCQlvcnIJXHJwLCBccnAsICMweGZmMDAwMDAwCUAgdmlydHVhbAorCQlvcnIJXHJ2LCBccnAsICMweGZmMDAwMDAwCUAgdmlydHVhbAorCQlvcnIJXHJwLCBccnAsICMweDdjMDAwMDAwCUAgcGh5c2ljYWwKIAkJLmVuZG0KIAogI2RlZmluZSBVQVJUX1NISUZUCTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYwppbmRleCBmNDg4ZmEyLi40NDFjNmNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jCkBAIC00LDEwICs0LDEzIEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFJ1c3NlbGwgS2luZy4KICAqICBDb3B5cmlnaHQgKEMpIDE5OTggUGhpbCBCbHVuZGVsbAogICovCisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIApAQCAtMTUsNzcgKzE4LDExNSBAQAogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLS8qCi0gKiBJU0EgdGltZXIgdGljayBzdXBwb3J0Ci0gKi8KLSNkZWZpbmUgbVNFQ18xMF9mcm9tXzE0ICgoMTQzMTgxODAgKyAxMDApIC8gMjAwKQorI2RlZmluZSBQSVRfTU9ERQkweDQzCisjZGVmaW5lIFBJVF9DSDAJCTB4NDAKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNhX2dldHRpbWVvZmZzZXQodm9pZCkKKyNkZWZpbmUgUElUX0xBVENICSgoUElUX1RJQ0tfUkFURSArIEhaIC8gMikgLyBIWikKKworc3RhdGljIGN5Y2xlX3QgcGl0X3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0YXRpYyBpbnQgb2xkX2NvdW50OworCXN0YXRpYyB1MzIgb2xkX2ppZnM7CiAJaW50IGNvdW50OworCXUzMiBqaWZzOwogCi0Jc3RhdGljIGludCBjb3VudF9wID0gKG1TRUNfMTBfZnJvbV8xNC82KTsgICAgLyogZm9yIHRoZSBmaXJzdCBjYWxsIGFmdGVyIGJvb3QgKi8KLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3AgPSAwOworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQkvKgotCSAqIGNhY2hlIHZvbGF0aWxlIGppZmZpZXMgdGVtcG9yYXJpbHk7IHdlIGhhdmUgSVJRcyB0dXJuZWQgb2ZmLiAKLQkgKi8KLQl1bnNpZ25lZCBsb25nIGppZmZpZXNfdDsKKwlqaWZzID0gamlmZmllczsKKwlvdXRiX3AoMHgwMCwgUElUX01PREUpOwkJLyogbGF0Y2ggdGhlIGNvdW50ICovCisJY291bnQgPSBpbmJfcChQSVRfQ0gwKTsJCS8qIHJlYWQgdGhlIGxhdGNoZWQgY291bnQgKi8KKwljb3VudCB8PSBpbmJfcChQSVRfQ0gwKSA8PCA4OwogCi0JLyogdGltZXIgY291bnQgbWF5IHVuZGVyZmxvdyByaWdodCBoZXJlICovCi0Jb3V0Yl9wKDB4MDAsIDB4NDMpOwkvKiBsYXRjaCB0aGUgY291bnQgQVNBUCAqLworCWlmIChjb3VudCA+IG9sZF9jb3VudCAmJiBqaWZzID09IG9sZF9qaWZzKQorCQljb3VudCA9IG9sZF9jb3VudDsKIAotCWNvdW50ID0gaW5iX3AoMHg0MCk7CS8qIHJlYWQgdGhlIGxhdGNoZWQgY291bnQgKi8KKwlvbGRfY291bnQgPSBjb3VudDsKKwlvbGRfamlmcyA9IGppZnM7CiAKLQkvKgotCSAqIFdlIGRvIHRoaXMgZ3VhcmFudGVlZCBkb3VibGUgbWVtb3J5IGFjY2VzcyBpbnN0ZWFkIG9mIGEgX3AgCi0JICogcG9zdGZpeCBpbiB0aGUgcHJldmlvdXMgcG9ydCBhY2Nlc3MuIFdoZWVlLCBoYWNrYWR5IGhhY2sKLQkgKi8KLSAJamlmZmllc190ID0gamlmZmllczsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JY291bnQgfD0gaW5iX3AoMHg0MCkgPDwgODsKKwljb3VudCA9IChQSVRfTEFUQ0ggLSAxKSAtIGNvdW50OwogCi0JLyogRGV0ZWN0IHRpbWVyIHVuZGVyZmxvd3MuICBJZiB3ZSBoYXZlbid0IGhhZCBhIHRpbWVyIHRpY2sgc2luY2UgCi0JICAgdGhlIGxhc3QgdGltZSB3ZSB3ZXJlIGNhbGxlZCwgYW5kIHRpbWUgaXMgYXBwYXJlbnRseSBnb2luZwotCSAgIGJhY2t3YXJkcywgdGhlIGNvdW50ZXIgbXVzdCBoYXZlIHdyYXBwZWQgZHVyaW5nIHRoaXMgcm91dGluZS4gKi8KLQlpZiAoKGppZmZpZXNfdCA9PSBqaWZmaWVzX3ApICYmIChjb3VudCA+IGNvdW50X3ApKQotCQljb3VudCAtPSAobVNFQ18xMF9mcm9tXzE0LzYpOwotCWVsc2UKLQkJamlmZmllc19wID0gamlmZmllc190OwotCi0JY291bnRfcCA9IGNvdW50OwotCi0JY291bnQgPSAoKChtU0VDXzEwX2Zyb21fMTQvNiktMSkgLSBjb3VudCkgKiAodGlja19uc2VjIC8gMTAwMCk7Ci0JY291bnQgPSAoY291bnQgKyAobVNFQ18xMF9mcm9tXzE0LzYpLzIpIC8gKG1TRUNfMTBfZnJvbV8xNC82KTsKLQotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gKGN5Y2xlX3QpKGppZnMgKiBQSVRfTEFUQ0gpICsgY291bnQ7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdAotaXNhX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIHBpdF9jcyA9IHsKKwkubmFtZQkJPSAicGl0IiwKKwkucmF0aW5nCQk9IDExMCwKKwkucmVhZAkJPSBwaXRfcmVhZCwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKK307CisKK3N0YXRpYyB2b2lkIHBpdF9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7Ci0JdGltZXJfdGljaygpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJb3V0Yl9wKDB4MzQsIFBJVF9NT0RFKTsKKwkJb3V0Yl9wKFBJVF9MQVRDSCAmIDB4ZmYsIFBJVF9DSDApOworCQlvdXRiX3AoUElUX0xBVENIID4+IDgsIFBJVF9DSDApOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJCW91dGJfcCgweDMwLCBQSVRfTU9ERSk7CisJCW91dGJfcCgwLCBQSVRfQ0gwKTsKKwkJb3V0Yl9wKDAsIFBJVF9DSDApOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJYnJlYWs7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGludCBwaXRfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHBpdF9jZSA9IHsKKwkubmFtZQkJPSAicGl0IiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQywKKwkuc2V0X21vZGUJPSBwaXRfc2V0X21vZGUsCisJLnNldF9uZXh0X2V2ZW50CT0gcGl0X3NldF9uZXh0X2V2ZW50LAorCS5zaGlmdAkJPSAzMiwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBwaXRfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZSA9IGRldl9pZDsKKwljZS0+ZXZlbnRfaGFuZGxlcihjZSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpc2FfdGltZXJfaXJxID0gewotCS5uYW1lCQk9ICJJU0EgdGltZXIgdGljayIsCi0JLmhhbmRsZXIJPSBpc2FfdGltZXJfaW50ZXJydXB0LAorc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcGl0X3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAicGl0IiwKKwkuaGFuZGxlcgk9IHBpdF90aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAorCS5kZXZfaWQJCT0gJnBpdF9jZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpc2FfdGltZXJfaW5pdCh2b2lkKQogewotCS8qIGVuYWJsZSBQSVQgdGltZXIgKi8KLQkvKiBzZXQgZm9yIHBlcmlvZGljICg0KSBhbmQgTFNCL01TQiB3cml0ZSAoMHgzMCkgKi8KLQlvdXRiKDB4MzQsIDB4NDMpOwotCW91dGIoKG1TRUNfMTBfZnJvbV8xNC82KSAmIDB4RkYsIDB4NDApOwotCW91dGIoKG1TRUNfMTBfZnJvbV8xNC82KSA+PiA4LCAweDQwKTsKKwlwaXRfY2UuY3B1bWFzayA9IGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlwaXRfY2UubXVsdCA9IGRpdl9zYyhQSVRfVElDS19SQVRFLCBOU0VDX1BFUl9TRUMsIHBpdF9jZS5zaGlmdCk7CisJcGl0X2NlLm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHg3ZmZmLCAmcGl0X2NlKTsKKwlwaXRfY2UubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweDAwMGYsICZwaXRfY2UpOwogCi0Jc2V0dXBfaXJxKElSUV9JU0FfVElNRVIsICZpc2FfdGltZXJfaXJxKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmcGl0X2NzLCBQSVRfVElDS19SQVRFKTsKKworCXNldHVwX2lycShwaXRfY2UuaXJxLCAmcGl0X3RpbWVyX2lycSk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZwaXRfY2UpOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIGlzYV90aW1lciA9IHsKIAkuaW5pdAkJPSBpc2FfdGltZXJfaW5pdCwKLQkub2Zmc2V0CQk9IGlzYV9nZXR0aW1lb2Zmc2V0LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYwppbmRleCBhYTc2Y2ZkLi44MzgyZTc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjVfM2RzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI1XzNkcy5jCkBAIC0xODAsNyArMTgwLDcgQEAKIAlLRVkoMywgMywgS0VZX1BPV0VSKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG14MjVwZGtfa2V5bWFwX2RhdGEgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG14MjVwZGtfa2V5bWFwX2RhdGEgX19pbml0Y29uc3QgPSB7CiAJLmtleW1hcAkJPSBteDI1cGRrX2tleW1hcCwKIAkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKG14MjVwZGtfa2V5bWFwKSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCmluZGV4IDRkYzY4ZDYuLjlmZDg5NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCkBAIC00MzIsNyArNDMyLDcgQEAKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi11bnNpZ25lZCBsb25nIGl4cDR4eF90aW1lcl9mcmVxID0gRlJFUTsKK3Vuc2lnbmVkIGxvbmcgaXhwNHh4X3RpbWVyX2ZyZXEgPSBJWFA0WFhfVElNRVJfRlJFUTsKIEVYUE9SVF9TWU1CT0woaXhwNHh4X3RpbWVyX2ZyZXEpOwogc3RhdGljIHZvaWQgX19pbml0IGl4cDR4eF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCiB7CkBAIC00OTYsNyArNDk2LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGl4cDR4eF9jbG9ja2V2ZW50X2luaXQodm9pZCkKIHsKLQljbG9ja2V2ZW50X2l4cDR4eC5tdWx0ID0gZGl2X3NjKEZSRVEsIE5TRUNfUEVSX1NFQywKKwljbG9ja2V2ZW50X2l4cDR4eC5tdWx0ID0gZGl2X3NjKElYUDRYWF9USU1FUl9GUkVRLCBOU0VDX1BFUl9TRUMsCiAJCQkJCWNsb2NrZXZlbnRfaXhwNHh4LnNoaWZ0KTsKIAljbG9ja2V2ZW50X2l4cDR4eC5tYXhfZGVsdGFfbnMgPQogCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmUsICZjbG9ja2V2ZW50X2l4cDR4eCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCmluZGV4IDJjM2Y5M2MuLmM5ZTkzMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0xMCw2ICsxMCw3IEBACiAgKiA2Ni42Ni4uLiBNSHouIFdlIGRvIGEgY29udnVsdGVkIGNhbGN1bGF0aW9uIG9mIENMT0NLX1RJQ0tfUkFURSBiL2MgdGhlCiAgKiB0aW1lciByZWdpc3RlciBpZ25vcmVzIHRoZSBib3R0b20gMiBiaXRzIG9mIHRoZSBMQVRDSCB2YWx1ZS4KICAqLwotI2RlZmluZSBGUkVRIDY2NjY2MDAwCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAoKChGUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQorI2RlZmluZSBJWFA0WFhfVElNRVJfRlJFUSA2NjY2NjAwMAorI2RlZmluZSBDTE9DS19USUNLX1JBVEUgXAorCSgoKElYUDRYWF9USU1FUl9GUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfcW1nci5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhwNHh4X3FtZ3IuYwppbmRleCBiZmRiZTRiLi44NTJmN2M5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfcW1nci5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4cDR4eF9xbWdyLmMKQEAgLTI2NSw2ICsyNjUsMTEgQEAKIAkgICAgICAgcW1ncl9xdWV1ZV9kZXNjc1txdWV1ZV0sIHF1ZXVlKTsKIAlxbWdyX3F1ZXVlX2Rlc2NzW3F1ZXVlXVswXSA9ICdceDAnOwogI2VuZGlmCisKKwl3aGlsZSAoKGFkZHIgPSBxbWdyX2dldF9lbnRyeShxdWV1ZSkpKQorCQlwcmludGsoS0VSTl9FUlIgInFtZ3I6IHJlbGVhc2VkIHF1ZXVlICVpIG5vdCBlbXB0eTogMHglMDhYXG4iLAorCQkgICAgICAgcXVldWUsIGFkZHIpOworCiAJX19yYXdfd3JpdGVsKDAsICZxbWdyX3JlZ3MtPnNyYW1bcXVldWVdKTsKIAogCXVzZWRfc3JhbV9iaXRtYXBbMF0gJj0gfm1hc2tbMF07CkBAIC0yNzUsMTAgKzI4MCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZxbWdyX2xvY2spOwogCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0KLQl3aGlsZSAoKGFkZHIgPSBxbWdyX2dldF9lbnRyeShxdWV1ZSkpKQotCQlwcmludGsoS0VSTl9FUlIgInFtZ3I6IHJlbGVhc2VkIHF1ZXVlICVpIG5vdCBlbXB0eTogMHglMDhYXG4iLAotCQkgICAgICAgcXVldWUsIGFkZHIpOwogfQogCiBzdGF0aWMgaW50IHFtZ3JfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jCmluZGV4IGIxYTM2MmUuLmNhNzJhMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjMuYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDIzLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI2RyKTsJCVwKIAlyZWcgJj0gfkJNX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJCVwKIAlyZWcgfD0gZGl2IDw8IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJXAotCWlmIChyZWcgfCAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQkJXAorCWlmIChyZWcgJiAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQkJXAogCQlwcl9lcnIoIiVzOiBjbG9jayBpcyBnYXRlZFxuIiwgX19mdW5jX18pOwkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCiAJfQkJCQkJCQkJXApAQCAtMzQ3LDcgKzM0Nyw3IEBACiB7CQkJCQkJCQkJXAogCWlmIChwYXJlbnQgIT0gY2xrLT5wYXJlbnQpIHsJCQkJCVwKIAkJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU18jI2JpdCwJCVwKLQkJCSBIV19DTEtDVFJMX0NMS1NFUV9UT0cpOwkJCVwKKwkJCSBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfQ0xLU0VRX1RPRyk7CVwKIAkJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CQkJCQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jCmluZGV4IDU2MzEyYzAuLmZkMWM0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDI4LmMKQEAgLTM1NSwxMiArMzU1LDEyIEBACiAJfSBlbHNlIHsJCQkJCQkJXAogCQlyZWcgJj0gfkJNX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJXAogCQlyZWcgfD0gZGl2IDw8IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJCQlcCi0JCWlmIChyZWcgfCAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQlcCisJCWlmIChyZWcgJiAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQlcCiAJCQlwcl9lcnIoIiVzOiBjbG9jayBpcyBnYXRlZFxuIiwgX19mdW5jX18pOwlcCiAJCQlyZXR1cm4gLUVJTlZBTDsJCQkJCVwKIAkJfQkJCQkJCQlcCiAJfQkJCQkJCQkJXAotCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9DUFUpOwkJXAorCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI2RyKTsJCVwKIAkJCQkJCQkJCVwKIAlmb3IgKGkgPSAxMDAwMDsgaTsgaS0tKQkJCQkJCVwKIAkJaWYgKCEoX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKwkJCVwKQEAgLTQ4Myw3ICs0ODMsNyBAQAogewkJCQkJCQkJCVwKIAlpZiAocGFyZW50ICE9IGNsay0+cGFyZW50KSB7CQkJCQlcCiAJCV9fcmF3X3dyaXRlbChCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfIyNiaXQsCQlcCi0JCQkgSFdfQ0xLQ1RSTF9DTEtTRVFfVE9HKTsJCQlcCisJCQkgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0NMS1NFUV9UT0cpOwlcCiAJCWNsay0+cGFyZW50ID0gcGFyZW50OwkJCQkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTYwOSw3ICs2MDksNiBAQAogCV9SRUdJU1RFUl9DTE9DSygiZHVhcnQiLCBOVUxMLCB1YXJ0X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteDI4LWZlYy4wIiwgTlVMTCwgZmVjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteDI4LWZlYy4xIiwgTlVMTCwgZmVjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImZlYy4wIiwgTlVMTCwgZmVjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soInJ0YyIsIE5VTEwsIHJ0Y19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJwbGwyIiwgTlVMTCwgcGxsMl9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJoY2xrIiwgaGJ1c19jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2suYwppbmRleCBlN2QyMjY5Li5hNzA5M2M4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLmMKQEAgLTU3LDcgKzU3LDYgQEAKIAkJaWYgKGNsay0+ZGlzYWJsZSkKIAkJCWNsay0+ZGlzYWJsZShjbGspOwogCQlfX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLQkJX19jbGtfZGlzYWJsZShjbGstPnNlY29uZGFyeSk7CiAJfQogfQogCkBAIC02OCw3ICs2Nyw2IEBACiAKIAlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKIAkJX19jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKLQkJX19jbGtfZW5hYmxlKGNsay0+c2Vjb25kYXJ5KTsKIAogCQlpZiAoY2xrLT5lbmFibGUpCiAJCQljbGstPmVuYWJsZShjbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jCmluZGV4IGQ3YWQ3YTYuLjYxOTkxZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9ncGlvLmMKQEAgLTY4LDI5ICs2OCwyOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbXhzX2dwaW9fYWNrX2lycSh1MzIgaXJxKQorc3RhdGljIHZvaWQgbXhzX2dwaW9fYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdTMyIGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oZC0+aXJxKTsKIAljbGVhcl9ncGlvX2lycXN0YXR1cygmbXhzX2dwaW9fcG9ydHNbZ3BpbyAvIDMyXSwgZ3BpbyAmIDB4MWYpOwogfQogCi1zdGF0aWMgdm9pZCBteHNfZ3Bpb19tYXNrX2lycSh1MzIgaXJxKQorc3RhdGljIHZvaWQgbXhzX2dwaW9fbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1MzIgZ3BpbyA9IGlycV90b19ncGlvKGQtPmlycSk7CiAJc2V0X2dwaW9faXJxZW5hYmxlKCZteHNfZ3Bpb19wb3J0c1tncGlvIC8gMzJdLCBncGlvICYgMHgxZiwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIG14c19ncGlvX3VubWFza19pcnEodTMyIGlycSkKK3N0YXRpYyB2b2lkIG14c19ncGlvX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1MzIgZ3BpbyA9IGlycV90b19ncGlvKGQtPmlycSk7CiAJc2V0X2dwaW9faXJxZW5hYmxlKCZteHNfZ3Bpb19wb3J0c1tncGlvIC8gMzJdLCBncGlvICYgMHgxZiwgMSk7CiB9CiAKIHN0YXRpYyBpbnQgbXhzX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCk7CiAKLXN0YXRpYyBpbnQgbXhzX2dwaW9fc2V0X2lycV90eXBlKHUzMiBpcnEsIHUzMiB0eXBlKQorc3RhdGljIGludCBteHNfZ3Bpb19zZXRfaXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKLQl1MzIgZ3BpbyA9IGlycV90b19ncGlvKGlycSk7CisJdTMyIGdwaW8gPSBpcnFfdG9fZ3BpbyhkLT5pcnEpOwogCXUzMiBwaW5fbWFzayA9IDEgPDwgKGdwaW8gJiAzMSk7CiAJc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQgPSAmbXhzX2dwaW9fcG9ydHNbZ3BpbyAvIDMyXTsKIAl2b2lkIF9faW9tZW0gKnBpbl9hZGRyOwpAQCAtMTM5LDYgKzEzOSw4IEBACiAJc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQgPSAoc3RydWN0IG14c19ncGlvX3BvcnQgKilnZXRfaXJxX2RhdGEoaXJxKTsKIAl1MzIgZ3Bpb19pcnFfbm9fYmFzZSA9IHBvcnQtPnZpcnR1YWxfaXJxX3N0YXJ0OwogCisJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX2FjaygmZGVzYy0+aXJxX2RhdGEpOworCiAJaXJxX3N0YXQgPSBfX3Jhd19yZWFkbChwb3J0LT5iYXNlICsgUElOQ1RSTF9JUlFTVEFUKHBvcnQtPmlkKSkgJgogCQkJX19yYXdfcmVhZGwocG9ydC0+YmFzZSArIFBJTkNUUkxfSVJRRU4ocG9ydC0+aWQpKTsKIApAQCAtMTU4LDkgKzE2MCw5IEBACiAgKiBAcGFyYW0gIGVuYWJsZSAgICAgICBlbmFibGUgYXMgd2FrZS11cCBpZiBlcXVhbCB0byBub24temVybwogICogQHJldHVybiAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCi1zdGF0aWMgaW50IG14c19ncGlvX3NldF93YWtlX2lycSh1MzIgaXJxLCB1MzIgZW5hYmxlKQorc3RhdGljIGludCBteHNfZ3Bpb19zZXRfd2FrZV9pcnEoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZW5hYmxlKQogewotCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1MzIgZ3BpbyA9IGlycV90b19ncGlvKGQtPmlycSk7CiAJdTMyIGdwaW9faWR4ID0gZ3BpbyAmIDB4MWY7CiAJc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQgPSAmbXhzX2dwaW9fcG9ydHNbZ3BpbyAvIDMyXTsKIApAQCAtMTgwLDExICsxODIsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncGlvX2lycV9jaGlwID0gewotCS5hY2sgPSBteHNfZ3Bpb19hY2tfaXJxLAotCS5tYXNrID0gbXhzX2dwaW9fbWFza19pcnEsCi0JLnVubWFzayA9IG14c19ncGlvX3VubWFza19pcnEsCi0JLnNldF90eXBlID0gbXhzX2dwaW9fc2V0X2lycV90eXBlLAotCS5zZXRfd2FrZSA9IG14c19ncGlvX3NldF93YWtlX2lycSwKKwkuaXJxX2FjayA9IG14c19ncGlvX2Fja19pcnEsCisJLmlycV9tYXNrID0gbXhzX2dwaW9fbWFza19pcnEsCisJLmlycV91bm1hc2sgPSBteHNfZ3Bpb191bm1hc2tfaXJxLAorCS5pcnFfc2V0X3R5cGUgPSBteHNfZ3Bpb19zZXRfaXJxX3R5cGUsCisJLmlycV9zZXRfd2FrZSA9IG14c19ncGlvX3NldF93YWtlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIG14c19zZXRfZ3Bpb19kaXJlY3Rpb24oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaWNvbGwuYyBiL2FyY2gvYXJtL21hY2gtbXhzL2ljb2xsLmMKaW5kZXggNWRkNDNiYS4uMGY0YzEyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvaWNvbGwuYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9pY29sbC5jCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmljb2xsX2Jhc2UgPSBNWFNfSU9fQUREUkVTUyhNWFNfSUNPTExfQkFTRV9BRERSKTsKIAotc3RhdGljIHZvaWQgaWNvbGxfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgaWNvbGxfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJLyoKIAkgKiBUaGUgSW50ZXJydXB0IENvbGxlY3RvciBpcyBhYmxlIHRvIHByaW9yaXRpemUgaXJxcy4KQEAgLTQ1LDIyICs0NSwyMiBAQAogCQkJaWNvbGxfYmFzZSArIEhXX0lDT0xMX0xFVkVMQUNLKTsKIH0KIAotc3RhdGljIHZvaWQgaWNvbGxfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGljb2xsX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlfX3Jhd193cml0ZWwoQk1fSUNPTExfSU5URVJSVVBUbl9FTkFCTEUsCi0JCQlpY29sbF9iYXNlICsgSFdfSUNPTExfSU5URVJSVVBUbl9DTFIoaXJxKSk7CisJCQlpY29sbF9iYXNlICsgSFdfSUNPTExfSU5URVJSVVBUbl9DTFIoZC0+aXJxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGljb2xsX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGljb2xsX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCV9fcmF3X3dyaXRlbChCTV9JQ09MTF9JTlRFUlJVUFRuX0VOQUJMRSwKLQkJCWljb2xsX2Jhc2UgKyBIV19JQ09MTF9JTlRFUlJVUFRuX1NFVChpcnEpKTsKKwkJCWljb2xsX2Jhc2UgKyBIV19JQ09MTF9JTlRFUlJVUFRuX1NFVChkLT5pcnEpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBteHNfaWNvbGxfY2hpcCA9IHsKLQkuYWNrID0gaWNvbGxfYWNrX2lycSwKLQkubWFzayA9IGljb2xsX21hc2tfaXJxLAotCS51bm1hc2sgPSBpY29sbF91bm1hc2tfaXJxLAorCS5pcnFfYWNrID0gaWNvbGxfYWNrX2lycSwKKwkuaXJxX21hc2sgPSBpY29sbF9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IGljb2xsX3VubWFza19pcnEsCiB9OwogCiB2b2lkIF9faW5pdCBpY29sbF9pbml0X2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY2xvY2suaAppbmRleCAwNDFlMjc2Li41OTJjOWFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY2xvY2suaApAQCAtMjksOCArMjksNiBAQAogCWludCBpZDsKIAkvKiBTb3VyY2UgY2xvY2sgdGhpcyBjbGsgZGVwZW5kcyBvbiAqLwogCXN0cnVjdCBjbGsgKnBhcmVudDsKLQkvKiBTZWNvbmRhcnkgY2xvY2sgdG8gZW5hYmxlL2Rpc2FibGUgd2l0aCB0aGlzIGNsb2NrICovCi0Jc3RydWN0IGNsayAqc2Vjb25kYXJ5OwogCS8qIFJlZmVyZW5jZSBjb3VudCBvZiBjbG9jayBlbmFibGUvZGlzYWJsZSAqLwogCV9fczggdXNlY291bnQ7CiAJLyogUmVnaXN0ZXIgYml0IHBvc2l0aW9uIGZvciBjbG9jaydzIGVuYWJsZS9kaXNhYmxlIGNvbnRyb2wuICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKaW5kZXggOGQyZjJkYS4uZTBhMDI4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwpAQCAtOSw2ICs5LDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKIAlib29sICJPTUFQNzMwIEJhc2VkIFN5c3RlbSIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKKwlzZWxlY3QgT01BUF9NUFVfVElNRVIKIAlzZWxlY3QgQVJDSF9PTUFQX09URwogCiBjb25maWcgQVJDSF9PTUFQODUwCkBAIC0yMiw2ICsyMyw3IEBACiAJZGVmYXVsdCB5CiAJYm9vbCAiT01BUDE1eHggQmFzZWQgU3lzdGVtIgogCXNlbGVjdCBDUFVfQVJNOTI1VAorCXNlbGVjdCBPTUFQX01QVV9USU1FUgogCiBjb25maWcgQVJDSF9PTUFQMTZYWAogCWRlcGVuZHMgb24gQVJDSF9PTUFQMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKaW5kZXggNmVlMTk1MC4uYmE2MDA5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCkBAIC0zLDEyICszLDExIEBACiAjCiAKICMgQ29tbW9uIHN1cHBvcnQKLW9iai15IDo9IGlvLm8gaWQubyBzcmFtLm8gaXJxLm8gbXV4Lm8gZmxhc2gubyBzZXJpYWwubyBkZXZpY2VzLm8gZG1hLm8KK29iai15IDo9IGlvLm8gaWQubyBzcmFtLm8gdGltZS5vIGlycS5vIG11eC5vIGZsYXNoLm8gc2VyaWFsLm8gZGV2aWNlcy5vIGRtYS5vCiBvYmoteSArPSBjbG9jay5vIGNsb2NrX2RhdGEubyBvcHBfZGF0YS5vCiAKIG9iai0kKENPTkZJR19PTUFQX01DQlNQKSArPSBtY2JzcC5vCiAKLW9iai0kKENPTkZJR19PTUFQX01QVV9USU1FUikJKz0gdGltZS5vCiBvYmotJChDT05GSUdfT01BUF8zMktfVElNRVIpCSs9IHRpbWVyMzJrLm8KIAogIyBQb3dlciBNYW5hZ2VtZW50CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCBjOWJlNmQ0Li5iZmI0ZmIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTE0LDE5ICsxNCw2IEBACiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgogCi0vKgotICogV2UgdXNlIF9fZ2x1ZSB0byBhdm9pZCBlcnJvcnMgd2l0aCBtdWx0aXBsZSBkZWZpbml0aW9ucyBvZgotICogLmdsb2JsIG9tYXBfaXJxX2ZsYWdzIGFzIGl0J3MgaW5jbHVkZWQgZnJvbSBlbnRyeS1hcm12LlMgYnV0IG5vdAotICogZnJvbSBlbnRyeS1jb21tb24uUy4KLSAqLwotI2lmZGVmIF9fZ2x1ZQotCQkucHVzaHNlY3Rpb24gLmRhdGEKLQkJLmdsb2JsCW9tYXBfaXJxX2ZsYWdzCi1vbWFwX2lycV9mbGFnczoKLQkJLndvcmQJMAotCQkucG9wc2VjdGlvbgotI2VuZGlmCi0KICAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwppbmRleCA0NzcwMTU4Li43MzFkZDMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKQEAgLTU3LDYgKzU3LDcgQEAKIAl1bnNpZ25lZCBsb25nIHdha2VfZW5hYmxlOwogfTsKIAordTMyIG9tYXBfaXJxX2ZsYWdzOwogc3RhdGljIHVuc2lnbmVkIGludCBpcnFfYmFua19jb3VudDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqaXJxX2JhbmtzOwogCkBAIC0xNzYsNyArMTc3LDYgQEAKIAogdm9pZCBfX2luaXQgb21hcF9pbml0X2lycSh2b2lkKQogewotCWV4dGVybiB1bnNpZ25lZCBpbnQgb21hcF9pcnFfZmxhZ3M7CiAJaW50IGksIGo7CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sY2RfZG1hLmMKaW5kZXggYzkwODhkOC4uNDUzODA5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9sY2RfZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sY2RfZG1hLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkgKiBPbiBPTUFQMTUxMCwgaW50ZXJuYWwgTENEIGNvbnRyb2xsZXIgd2lsbCBzdGFydCB0aGUgdHJhbnNmZXIKIAkgKiB3aGVuIGl0IGdldHMgZW5hYmxlZCwgc28gYXNzdW1lIERNQSBydW5uaW5nIGlmIExDRCBlbmFibGVkLgogCSAqLwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCiAJCWlmIChvbWFwX3JlYWR3KE9NQVBfTENEQ19DT05UUk9MKSAmIE9NQVBfTENEQ19DVFJMX0xDRF9FTikKIAkJCXJldHVybiAxOwogCkBAIC05NSw3ICs5NSw3IEBACiAKIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9yb3RhdGlvbihpbnQgcm90YXRlKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRNQSByb3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIDE1MTAgbW9kZVxuIik7CiAJCUJVRygpOwogCQlyZXR1cm47CkBAIC0xMDYsNyArMTA2LDcgQEAKIAogdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX21pcnJvcihpbnQgbWlycm9yKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRNQSBtaXJyb3IgaXMgbm90IHN1cHBvcnRlZCBpbiAxNTEwIG1vZGVcbiIpOwogCQlCVUcoKTsKIAl9CkBAIC0xMTYsNyArMTE2LDcgQEAKIAogdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3Z4cmVzKHVuc2lnbmVkIGxvbmcgdnhyZXMpCiB7Ci0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRE1BIHZpcnR1YWwgcmVzdWxvdGlvbiBpcyBub3Qgc3VwcG9ydGVkICIKIAkJCQkiaW4gMTUxMCBtb2RlXG4iKTsKIAkJQlVHKCk7CkBAIC0xMjcsNyArMTI3LDcgQEAKIAogdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3NjYWxlKHVuc2lnbmVkIGludCB4c2NhbGUsIHVuc2lnbmVkIGludCB5c2NhbGUpCiB7Ci0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRE1BIHNjYWxlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMTUxMCBtb2RlXG4iKTsKIAkJQlVHKCk7CiAJfQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCQlib3R0b20gPSBQSVhBRERSKGxjZF9kbWEueHJlcyAtIDEsIGxjZF9kbWEueXJlcyAtIDEpOwogCQkJLyogMTUxMCBETUEgcmVxdWlyZXMgdGhlIGJvdHRvbSBhZGRyZXNzIHRvIGJlIDIgbW9yZQogCQkJICogdGhhbiB0aGUgYWN0dWFsIGxhc3QgbWVtb3J5IGFjY2VzcyBsb2NhdGlvbi4gKi8KLQkJCWlmIChjcHVfaXNfb21hcDE1MTAoKSAmJgorCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpICYmCiAJCQkJbGNkX2RtYS5kYXRhX3R5cGUgPT0gT01BUF9ETUFfREFUQV9UWVBFX1MzMikKIAkJCQkJYm90dG9tICs9IDI7CiAJCQllaSA9IFBJWFNURVAoMCwgMCwgMSwgMCk7CkBAIC0yNDEsNyArMjQxLDcgQEAKIAkJcmV0dXJuOwkvKiBTdXBwcmVzcyB3YXJuaW5nIGFib3V0IHVuaW5pdGlhbGl6ZWQgdmFycyAqLwogCX0KIAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlvbWFwX3dyaXRldyh0b3AgPj4gMTYsIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX1UpOwogCQlvbWFwX3dyaXRldyh0b3AsIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX0wpOwogCQlvbWFwX3dyaXRldyhib3R0b20gPj4gMTYsIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX1UpOwpAQCAtMzQzLDcgKzM0Myw3IEBACiAJCUJVRygpOwogCQlyZXR1cm47CiAJfQotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKIAkJb21hcF93cml0ZXcob21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUikgJiB+MSwKIAkJCSAgICBPTUFQMTYxMF9ETUFfTENEX0NDUik7CiAJbGNkX2RtYS5yZXNlcnZlZCA9IDA7CkBAIC0zNjAsNyArMzYwLDcgQEAKIAkgKiBjb25uZWN0ZWQuIE90aGVyd2lzZSB0aGUgT01BUCBpbnRlcm5hbCBjb250cm9sbGVyIHdpbGwKIAkgKiBzdGFydCB0aGUgdHJhbnNmZXIgd2hlbiBpdCBnZXRzIGVuYWJsZWQuCiAJICovCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpIHx8ICFsY2RfZG1hLmV4dF9jdHJsKQorCWlmIChjcHVfaXNfb21hcDE1eHgoKSB8fCAhbGNkX2RtYS5leHRfY3RybCkKIAkJcmV0dXJuOwogCiAJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKQEAgLTM3OCwxNCArMzc4LDE0IEBACiB2b2lkIG9tYXBfc2V0dXBfbGNkX2RtYSh2b2lkKQogewogCUJVR19PTihsY2RfZG1hLmFjdGl2ZSk7Ci0JaWYgKCFjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmICghY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJLyogU2V0IHNvbWUgcmVhc29uYWJsZSBkZWZhdWx0cyAqLwogCQlvbWFwX3dyaXRldygweDU0NDAsIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKIAkJb21hcF93cml0ZXcoMHg5MTAyLCBPTUFQMTYxMF9ETUFfTENEX0NTRFApOwogCQlvbWFwX3dyaXRldygweDAwMDQsIE9NQVAxNjEwX0RNQV9MQ0RfTENIX0NUUkwpOwogCX0KIAlzZXRfYjFfcmVncygpOwotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCXUxNiB3OwogCiAJCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKQEAgLTQwNyw3ICs0MDcsNyBAQAogCXUxNiB3OwogCiAJbGNkX2RtYS5hY3RpdmUgPSAwOwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCAhbGNkX2RtYS5leHRfY3RybCkKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkgfHwgIWxjZF9kbWEuZXh0X2N0cmwpCiAJCXJldHVybjsKIAogCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uaAppbmRleCA1NmE2NDc5Li5jZDkyNmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5oCkBAIC0xMjMsOSArMTIzLDkgQEAKIGV4dGVybiB2b2lkIG9tYXAxX3BtX2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMV9wbV9zdXNwZW5kKHZvaWQpOwogCi1leHRlcm4gdm9pZCBvbWFwN3h4X2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7Ci1leHRlcm4gdm9pZCBvbWFwMTUxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwotZXh0ZXJuIHZvaWQgb21hcDE2MTBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIG9tYXA3eHhfY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBvbWFwMTUxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIG9tYXAxNjEwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHZvaWQgb21hcDd4eF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NsZWVwLlMKaW5kZXggZWY3NzFjZTguLmM4NzViZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NsZWVwLlMKQEAgLTU4LDYgKzU4LDcgQEAKICAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisJLmFsaWduCTMKIEVOVFJZKG9tYXA3eHhfY3B1X3N1c3BlbmQpCiAKIAlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCkBAIC0xMzcsNiArMTM4LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQNzMwIHx8IENPTkZJR19BUkNIX09NQVA4NTAgKi8KIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCisJLmFsaWduCTMKIEVOVFJZKG9tYXAxNTEwX2NwdV9zdXNwZW5kKQogCiAJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawpAQCAtMjExLDYgKzIxMyw3IEBACiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisJLmFsaWduCTMKIEVOVFJZKG9tYXAxNjEwX2NwdV9zdXNwZW5kKQogCiAJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0uUwppbmRleCA3NzI0ZTUyLi42OTI1ODdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0uUwpAQCAtMTgsNiArMTgsNyBAQAogLyoKICAqIFJlcHJvZ3JhbXMgVUxQRCBhbmQgQ0tDVEwuCiAgKi8KKwkuYWxpZ24JMwogRU5UUlkob21hcDFfc3JhbV9yZXByb2dyYW1fY2xvY2spCiAJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCmluZGV4IGVkN2E2MWYuLjY4ODVkMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCkBAIC00OSwxMSArNDksMTUgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NjaGVkX2Nsb2NrLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogCisjaWZkZWYgQ09ORklHX09NQVBfTVBVX1RJTUVSCisKICNkZWZpbmUgT01BUF9NUFVfVElNRVJfQkFTRQkJT01BUF9NUFVfVElNRVIxX0JBU0UKICNkZWZpbmUgT01BUF9NUFVfVElNRVJfT0ZGU0VUCQkweDEwMAogCkBAIC02Nyw3ICs3MSw3IEBACiAoKHZvbGF0aWxlIG9tYXBfbXB1X3RpbWVyX3JlZ3NfdCopT01BUDFfSU9fQUREUkVTUyhPTUFQX01QVV9USU1FUl9CQVNFICsJXAogCQkJCSAobikqT01BUF9NUFVfVElNRVJfT0ZGU0VUKSkKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9tYXBfbXB1X3RpbWVyX3JlYWQoaW50IG5yKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vdHJhY2Ugb21hcF9tcHVfdGltZXJfcmVhZChpbnQgbnIpCiB7CiAJdm9sYXRpbGUgb21hcF9tcHVfdGltZXJfcmVnc190KiB0aW1lciA9IG9tYXBfbXB1X3RpbWVyX2Jhc2UobnIpOwogCXJldHVybiB0aW1lci0+cmVhZF90aW07CkBAIC0yMTIsNiArMjE2LDMyIEBACiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAorc3RhdGljIERFRklORV9DTE9DS19EQVRBKGNkKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBfb21hcF9tcHVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1MzIgY3ljID0gbXB1X3JlYWQoJmNsb2Nrc291cmNlX21wdSk7CisJcmV0dXJuIGN5Y190b19zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CisKKyNpZm5kZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQoreworCXJldHVybiBfb21hcF9tcHVfc2NoZWRfY2xvY2soKTsKK30KKyNlbHNlCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugb21hcF9tcHVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gX29tYXBfbXB1X3NjaGVkX2Nsb2NrKCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbm90cmFjZSBtcHVfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJdTMyIGN5YyA9IG1wdV9yZWFkKCZjbG9ja3NvdXJjZV9tcHUpOworCXVwZGF0ZV9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2luaXRfY2xvY2tzb3VyY2UodW5zaWduZWQgbG9uZyByYXRlKQogewogCXN0YXRpYyBjaGFyIGVycltdIF9faW5pdGRhdGEgPSBLRVJOX0VSUgpAQCAtMjE5LDE3ICsyNDksMTMgQEAKIAogCXNldHVwX2lycShJTlRfVElNRVIyLCAmb21hcF9tcHVfdGltZXIyX2lycSk7CiAJb21hcF9tcHVfdGltZXJfc3RhcnQoMSwgfjAsIDEpOworCWluaXRfc2NoZWRfY2xvY2soJmNkLCBtcHVfdXBkYXRlX3NjaGVkX2Nsb2NrLCAzMiwgcmF0ZSk7CiAKIAlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX21wdSwgcmF0ZSkpCiAJCXByaW50ayhlcnIsIGNsb2Nrc291cmNlX21wdS5uYW1lKTsKIH0KIAotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVGltZXIgaW5pdGlhbGl6YXRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF90aW1lcl9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9tcHVfdGltZXJfaW5pdCh2b2lkKQogewogCXN0cnVjdCBjbGsJKmNrX3JlZiA9IGNsa19nZXQoTlVMTCwgImNrX3JlZiIpOwogCXVuc2lnbmVkIGxvbmcJcmF0ZTsKQEAgLTI0Niw2ICsyNzIsNjYgQEAKIAlvbWFwX2luaXRfY2xvY2tzb3VyY2UocmF0ZSk7CiB9CiAKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9tcHVfdGltZXJfaW5pdCh2b2lkKQoreworCXByX2VycigiQm9ndXMgdGltZXIsIHNob3VsZCBub3QgaGFwcGVuXG4iKTsKK30KKyNlbmRpZgkvKiBDT05GSUdfT01BUF9NUFVfVElNRVIgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVBVX1RJTUVSKSAmJiBkZWZpbmVkKENPTkZJR19PTUFQXzMyS19USU1FUikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKCpwcmVmZXJyZWRfc2NoZWRfY2xvY2spKHZvaWQpOworCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQoreworCWlmICghcHJlZmVycmVkX3NjaGVkX2Nsb2NrKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBwcmVmZXJyZWRfc2NoZWRfY2xvY2soKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHByZWZlcnJlZF9zY2hlZF9jbG9ja19pbml0KGJvb2wgdXNlXzMya19zY2hlZF9jbG9jaykKK3sKKwlpZiAodXNlXzMya19zY2hlZF9jbG9jaykKKwkJcHJlZmVycmVkX3NjaGVkX2Nsb2NrID0gb21hcF8zMmtfc2NoZWRfY2xvY2s7CisJZWxzZQorCQlwcmVmZXJyZWRfc2NoZWRfY2xvY2sgPSBvbWFwX21wdV9zY2hlZF9jbG9jazsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmVycmVkX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCB1c2VfMzJrX3NjaGVkX2NsY29rKQoreworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfMzJrX3RpbWVyX3VzYWJsZSh2b2lkKQoreworCWludCByZXMgPSBmYWxzZTsKKworCWlmIChjcHVfaXNfb21hcDczMCgpIHx8IGNwdV9pc19vbWFwMTV4eCgpKQorCQlyZXR1cm4gcmVzOworCisjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCisJcmVzID0gb21hcF8zMmtfdGltZXJfaW5pdCgpOworI2VuZGlmCisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaW1lciBpbml0aWFsaXphdGlvbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlpZiAob21hcF8zMmtfdGltZXJfdXNhYmxlKCkpIHsKKwkJcHJlZmVycmVkX3NjaGVkX2Nsb2NrX2luaXQoMSk7CisJfSBlbHNlIHsKKwkJb21hcF9tcHVfdGltZXJfaW5pdCgpOworCQlwcmVmZXJyZWRfc2NoZWRfY2xvY2tfaW5pdCgwKTsKKwl9Cit9CisKIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lciA9IHsKIAkuaW5pdAkJPSBvbWFwX3RpbWVyX2luaXQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lcjMyay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lcjMyay5jCmluZGV4IDIwY2ZiY2MuLjEzZDdiOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZXIzMmsuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyMzJrLmMKQEAgLTUyLDEwICs1Miw5IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvZG10aW1lci5oPgogCi1zdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXI7Ci0KIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDMyS0h6IE9TIHRpbWVyCkBAIC0xODEsMTQgKzE4MCwxNCBAQAogICogVGltZXIgaW5pdGlhbGl6YXRpb24KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF90aW1lcl9pbml0KHZvaWQpCitib29sIF9faW5pdCBvbWFwXzMya190aW1lcl9pbml0KHZvaWQpCiB7CisJb21hcF9pbml0X2Nsb2Nrc291cmNlXzMyaygpOworCiAjaWZkZWYgQ09ORklHX09NQVBfRE1fVElNRVIKIAlvbWFwX2RtX3RpbWVyX2luaXQoKTsKICNlbmRpZgogCW9tYXBfaW5pdF8zMmtfdGltZXIoKTsKLX0KIAotc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyID0gewotCS5pbml0CQk9IG9tYXBfdGltZXJfaW5pdCwKLX07CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKaW5kZXggNWIwYzc3Ny4uOGY5YTY0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYwpAQCAtMTI0LDggKzEyNCw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9WMzAyMCkgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9WMzAyMF9NT0RVTEUpCiAjZGVmaW5lIFJUQ19JT19HUElPCQkoMTUzKQogI2RlZmluZSBSVENfV1JfR1BJTwkJKDE1NCkKLSNkZWZpbmUgUlRDX1JEX0dQSU8JCSgxNjApCisjZGVmaW5lIFJUQ19SRF9HUElPCQkoNTMpCiAjZGVmaW5lIFJUQ19DU19HUElPCQkoMTYzKQorI2RlZmluZSBSVENfQ1NfRU5fR1BJTwkJKDE2MCkKIAogc3RydWN0IHYzMDIwX3BsYXRmb3JtX2RhdGEgY21fdDM1MTdfdjMwMjBfcGRhdGEgPSB7CiAJLnVzZV9ncGlvCT0gMSwKQEAgLTE0NSw2ICsxNDYsMTYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGNtX3QzNTE3X2luaXRfcnRjKHZvaWQpCiB7CisJaW50IGVycjsKKworCWVyciA9IGdwaW9fcmVxdWVzdChSVENfQ1NfRU5fR1BJTywgInJ0YyBjcyBlbiIpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJDTS1UMzUxNzogcnRjIGNzIGVuIGdwaW8gcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlyZXR1cm47CisJfQorCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFJUQ19DU19FTl9HUElPLCAxKTsKKwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY21fdDM1MTdfcnRjX2RldmljZSk7CiB9CiAjZWxzZQpAQCAtMjE0LDEyICsyMjUsMTIgQEAKIAl9LAogCXsKIAkJLm5hbWUgICAgICAgICAgID0gImxpbnV4IiwKLQkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDI4MDAwMCAqLworCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MkEwMDAwICovCiAJCS5zaXplICAgICAgICAgICA9IDMyICogTkFORF9CTE9DS19TSVpFLAogCX0sCiAJewogCQkubmFtZSAgICAgICAgICAgPSAicm9vdGZzIiwKLQkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDY4MDAwMCAqLworCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4NkEwMDAwICovCiAJCS5zaXplICAgICAgICAgICA9IE1URFBBUlRfU0laX0ZVTEwsCiAJfSwKIH07CkBAIC0yNTYsMTEgKzI2NywxOSBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewogCS8qIEdQSU8xODYgLSBHcmVlbiBMRUQgKi8KIAlPTUFQM19NVVgoU1lTX0NMS09VVDIsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKLQkvKiBSVEMgR1BJT3M6IElPLCBXUiMsIFJEIywgQ1MjICovCisKKwkvKiBSVEMgR1BJT3M6ICovCisJLyogSU8gLSBHUElPMTUzICovCiAJT01BUDNfTVVYKE1DQlNQNF9EUiwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVCksCisJLyogV1IjIC0gR1BJTzE1NCAqLwogCU9NQVAzX01VWChNQ0JTUDRfRFgsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fSU5QVVQpLAotCU9NQVAzX01VWChNQ0JTUF9DTEtTLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKwkvKiBSRCMgLSBHUElPNTMgKi8KKwlPTUFQM19NVVgoR1BNQ19OQ1MyLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKwkvKiBDUyMgLSBHUElPMTYzICovCiAJT01BUDNfTVVYKFVBUlQzX0NUU19SQ1RYLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKwkvKiBDUyBFTiAtIEdQSU8xNjAgKi8KKwlPTUFQM19NVVgoTUNCU1BfQ0xLUywgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVCksCisKIAkvKiBIU1VTQjEgUkVTRVQgKi8KIAlPTUFQM19NVVgoVUFSVDJfVFgsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKIAkvKiBIU1VTQjIgUkVTRVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKaW5kZXggMDBiYjFmYy4uOWEyYTMxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKQEAgLTExNSw5ICsxMTUsNiBAQAogCiBzdGF0aWMgaW50IGRldmtpdDgwMDBfcGFuZWxfZW5hYmxlX2xjZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9HUElPLCAweDgwLCBSRUdfR1BJT0RBVEFESVIxKTsKLQl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0xFRCwgMHgwLCAweDApOwotCiAJaWYgKGdwaW9faXNfdmFsaWQoZHNzZGV2LT5yZXNldF9ncGlvKSkKIAkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoZHNzZGV2LT5yZXNldF9ncGlvLCAxKTsKIAlyZXR1cm4gMDsKQEAgLTI0Nyw2ICsyNDQsOCBAQAogc3RhdGljIGludCBkZXZraXQ4MDAwX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCiB7CisJaW50IHJldDsKKwogCW9tYXBfbXV4X2luaXRfZ3BpbygyOSwgT01BUF9QSU5fSU5QVVQpOwogCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSAqLwogCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CkBAIC0yNTUsMTcgKzI1NCwyMyBAQAogCS8qIFRXTDQwMzBfR1BJT19NQVggKyAxID09IGxlZEIsIFBNVV9TVEFUIChvdXQsIGFjdGl2ZSBsb3cgTEVEKSAqLwogCWdwaW9fbGVkc1syXS5ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAxOwogCi0gICAgICAgIC8qIGdwaW8gKyAxIGlzICJMQ0RfUFdSRU4iIChvdXQsIGFjdGl2ZSBoaWdoKSAqLwotCWRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvID0gZ3BpbyArIDE7Ci0JZ3Bpb19yZXF1ZXN0KGRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvLCAiTENEX1BXUkVOIik7Ci0JLyogRGlzYWJsZSB1bnRpbCBuZWVkZWQgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGV2a2l0ODAwMF9sY2RfZGV2aWNlLnJlc2V0X2dwaW8sIDApOworCS8qIFRXTDQwMzBfR1BJT19NQVggKyAwIGlzICJMQ0RfUFdSRU4iIChvdXQsIGFjdGl2ZSBoaWdoKSAqLworCWRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAwOworCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoZGV2a2l0ODAwMF9sY2RfZGV2aWNlLnJlc2V0X2dwaW8sCisJCQlHUElPRl9ESVJfT1VUIHwgR1BJT0ZfSU5JVF9MT1csICJMQ0RfUFdSRU4iKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZraXQ4MDAwX2xjZF9kZXZpY2UucmVzZXRfZ3BpbyA9IC1FSU5WQUw7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyBmb3IgTENEX1BXUk5cbiIpOworCX0KIAogCS8qIGdwaW8gKyA3IGlzICJEVklfUEQiIChvdXQsIGFjdGl2ZSBsb3cpICovCiAJZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8gPSBncGlvICsgNzsKLQlncGlvX3JlcXVlc3QoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sICJEVkkgUG93ZXJEb3duIik7Ci0JLyogRGlzYWJsZSB1bnRpbCBuZWVkZWQgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sIDApOworCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sCisJCQlHUElPRl9ESVJfT1VUIHwgR1BJT0ZfSU5JVF9MT1csICJEVkkgUG93ZXJEb3duIik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8gPSAtRUlOVkFMOworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8gZm9yIERWSSBQb3dlckRvd25cbiIpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjc1LDggKzI4MCw3IEBACiAJLmlycV9iYXNlCT0gVFdMNDAzMF9HUElPX0lSUV9CQVNFLAogCS5pcnFfZW5kCT0gVFdMNDAzMF9HUElPX0lSUV9FTkQsCiAJLnVzZV9sZWRzCT0gdHJ1ZSwKLQkucHVsbHVwcwk9IEJJVCgxKSwKLQkucHVsbGRvd25zCT0gQklUKDIpIHwgQklUKDYpIHwgQklUKDcpIHwgQklUKDgpIHwgQklUKDEzKQorCS5wdWxsZG93bnMJPSBCSVQoMSkgfCBCSVQoMikgfCBCSVQoNikgfCBCSVQoOCkgfCBCSVQoMTMpCiAJCQkJfCBCSVQoMTUpIHwgQklUKDE2KSB8IEJJVCgxNyksCiAJLnNldHVwCQk9IGRldmtpdDgwMDBfdHdsX2dwaW9fc2V0dXAsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwppbmRleCBlMDAxYTA0Li5lOTQ0MDI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwpAQCAtNDA5LDggKzQwOSw2IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGFuZGFfZGV2aWNlcywgQVJSQVlfU0laRShwYW5kYV9kZXZpY2VzKSk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXA0X3R3bDYwMzBfaHNtbWNfaW5pdChtbWMpOwotCS8qIE9NQVA0IFBhbmRhIHVzZXMgaW50ZXJuYWwgdHJhbnNjZWl2ZXIgc28gcmVnaXN0ZXIgbm9wIHRyYW5zY2VpdmVyICovCi0JdXNiX25vcF94Y2Vpdl9yZWdpc3RlcigpOwogCW9tYXA0X2VoY2lfaW5pdCgpOwogCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMKaW5kZXggY2I3N2JlNy4uMzlhNzFiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1ybTY4MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcm02ODAuYwpAQCAtNDAsOSArNDAsNiBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJtNjgwX3ZlbW1jID0gewogCS5jb25zdHJhaW50cyA9CXsKIAkJLm5hbWUJCQk9ICJybTY4MF92ZW1tYyIsCi0JCS5taW5fdVYJCQk9IDI5MDAwMDAsCi0JCS5tYXhfdVYJCQk9IDI5MDAwMDAsCi0JCS5hcHBseV91VgkJPSAxLAogCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAogCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCiAJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2RwbGwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdF9kcGxsLmMKaW5kZXggMzM3MzkyYy4uYWNiN2FlNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2RwbGwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJZGQgPSBjbGstPmRwbGxfZGF0YTsKIAogCS8qIERQTEwgZGl2aWRlciBtdXN0IHJlc3VsdCBpbiBhIHZhbGlkIGppdHRlciBjb3JyZWN0aW9uIHZhbCAqLwotCWZpbnQgPSBjbGstPnBhcmVudC0+cmF0ZSAvIChuICsgMSk7CisJZmludCA9IGNsay0+cGFyZW50LT5yYXRlIC8gbjsKIAlpZiAoZmludCA8IERQTExfRklOVF9CQU5EMV9NSU4pIHsKIAogCQlwcl9kZWJ1ZygicmVqZWN0aW5nIG49JWQgZHVlIHRvIEZpbnQgZmFpbHVyZSwgIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCmluZGV4IGU4Y2IzMmYuLmRlOWVjOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJjbTJfNDR4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtNDR4eC5oIgogI2luY2x1ZGUgInBybTQ0eHguaCIKLSNpbmNsdWRlICJwcm00NHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtNDR4eC5oIgogI2luY2x1ZGUgImNvbnRyb2wuaCIKICNpbmNsdWRlICJzY3JtNDR4eC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCmluZGV4IGUyMGI5ODYuLjU4ZTQyZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKQEAgLTQyMyw2ICs0MjMsMTIgQEAKIHsKIAlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKIAorCWlmICghY3B1X2lzX29tYXAyNHh4KCkgJiYgIWNwdV9pc19vbWFwMzR4eCgpKSB7CisJCXByX2VycigiY2xvY2tkb21haW46ICVzLyVzOiAlczogbm90IHlldCBpbXBsZW1lbnRlZFxuIiwKKwkJICAgICAgIGNsa2RtMS0+bmFtZSwgY2xrZG0yLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmICghY2xrZG0xIHx8ICFjbGtkbTIpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC00NTgsNiArNDY0LDEyIEBACiB7CiAJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CiAKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgeworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlcy8lczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCisJCSAgICAgICBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNTAwLDYgKzUxMiwxMiBAQAogCWlmICghY2xrZG0xIHx8ICFjbGtkbTIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSAmJiAhY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJcHJfZXJyKCJjbG9ja2RvbWFpbjogJXMvJXM6ICVzOiBub3QgeWV0IGltcGxlbWVudGVkXG4iLAorCQkgICAgICAgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJY2QgPSBfY2xrZG1fZGVwc19sb29rdXAoY2xrZG0yLCBjbGtkbTEtPndrZGVwX3NyY3MpOwogCWlmIChJU19FUlIoY2QpKSB7CiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciB3YWtlIHVwIG9mICIKQEAgLTUyNyw2ICs1NDUsMTIgQEAKIAlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKIAl1MzIgbWFzayA9IDA7CiAKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgeworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCisJCSAgICAgICBjbGtkbS0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoIWNsa2RtKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODMwLDggKzg1NCw3IEBACiAJICogZGVwZW5kZW5jeSBjb2RlIGFuZCBkYXRhIGZvciBPTUFQNC4KIAkgKi8KIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJV0FSTl9PTkNFKDEsICJjbG9ja2RvbWFpbjogT01BUDQgd2FrZXVwL3NsZWVwIGRlcGVuZGVuY3kgIgotCQkJICAic3VwcG9ydCBpcyBub3QgeWV0IGltcGxlbWVudGVkXG4iKTsKKwkJcHJfZXJyKCJjbG9ja2RvbWFpbjogJXM6IE9NQVA0IHdha2V1cC9zbGVlcCBkZXBlbmRlbmN5IHN1cHBvcnQ6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIGNsa2RtLT5uYW1lKTsKIAl9IGVsc2UgewogCQlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQogCQkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7CkBAIC04NzIsOCArODk1LDcgQEAKIAkgKiBkZXBlbmRlbmN5IGNvZGUgYW5kIGRhdGEgZm9yIE9NQVA0LgogCSAqLwogCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQlXQVJOX09OQ0UoMSwgImNsb2NrZG9tYWluOiBPTUFQNCB3YWtldXAvc2xlZXAgZGVwZW5kZW5jeSAiCi0JCQkgICJzdXBwb3J0IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIpOworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlczogT01BUDQgd2FrZXVwL3NsZWVwIGRlcGVuZGVuY3kgc3VwcG9ydDogbm90IHlldCBpbXBsZW1lbnRlZFxuIiwgY2xrZG0tPm5hbWUpOwogCX0gZWxzZSB7CiAJCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCiAJCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczQ0eHhfZGF0YS5jCmluZGV4IDUxOTIwZmMuLjEwNjIyYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnM0NHh4X2RhdGEuYwpAQCAtMzAsOCArMzAsNiBAQAogI2luY2x1ZGUgImNtMV80NHh4LmgiCiAjaW5jbHVkZSAiY20yXzQ0eHguaCIKIAotI2luY2x1ZGUgImNtMV80NHh4LmgiCi0jaW5jbHVkZSAiY20yXzQ0eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTQ0eHguaCIKICNpbmNsdWRlICJwcm00NHh4LmgiCiAjaW5jbHVkZSAicHJjbTQ0eHguaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCmluZGV4IGQyZjE1ZjUuLjM0OTIyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kbWEuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJaWYgKElTX0VSUihvZCkpIHsKIAkJcHJfZXJyKCIlczogQ2FudCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAogCQkJX19mdW5jX18sIG5hbWUsIG9oLT5uYW1lKTsKLQkJcmV0dXJuIElTX0VSUihvZCk7CisJCXJldHVybiBQVFJfRVJSKG9kKTsKIAl9CiAKIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoJm9kLT5wZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCBiZWZhMzIxLi44MTk4NWE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTM4LDIwICszOCw2IEBACiAgKi8KIAogI2lmZGVmIE1VTFRJX09NQVAyCi0KLS8qCi0gKiBXZSB1c2UgX19nbHVlIHRvIGF2b2lkIGVycm9ycyB3aXRoIG11bHRpcGxlIGRlZmluaXRpb25zIG9mCi0gKiAuZ2xvYmwgb21hcF9pcnFfYmFzZSBhcyBpdCdzIGluY2x1ZGVkIGZyb20gZW50cnktYXJtdi5TIGJ1dCBub3QKLSAqIGZyb20gZW50cnktY29tbW9uLlMuCi0gKi8KLSNpZmRlZiBfX2dsdWUKLQkJLnB1c2hzZWN0aW9uIC5kYXRhCi0JCS5nbG9ibAlvbWFwX2lycV9iYXNlCi1vbWFwX2lycV9iYXNlOgotCQkud29yZAkwCi0JCS5wb3BzZWN0aW9uCi0jZW5kaWYKLQogCQkvKgogCQkgKiBDb25maWd1cmUgdGhlIGludGVycnVwdCBiYXNlIG9uIHRoZSBmaXJzdCBpbnRlcnJ1cHQuCiAJCSAqIFNlZSBhbHNvIG9tYXBfaXJxX2Jhc2VfaW5pdCBmb3Igc2V0dGluZyBvbWFwX2lycV9iYXNlLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IGU2NjY4N2IuLmMyMDMyMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTMxNCwxNCArMzE0LDEzIEBACiAJcmV0dXJuIG9tYXBfaHdtb2Rfc2V0X3Bvc3RzZXR1cF9zdGF0ZShvaCwgKih1OCAqKWRhdGEpOwogfQogCit2b2lkIF9faW9tZW0gKm9tYXBfaXJxX2Jhc2U7CisKIC8qCiAgKiBJbml0aWFsaXplIGFzbV9pcnFfYmFzZSBmb3IgZW50cnktbWFjcm8uUwogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pcnFfYmFzZV9pbml0KHZvaWQpCiB7Ci0JZXh0ZXJuIHZvaWQgX19pb21lbSAqb21hcF9pcnFfYmFzZTsKLQotI2lmZGVmIE1VTFRJX09NQVAyCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQogCQlvbWFwX2lycV9iYXNlID0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjRYWF9JQ19CQVNFKTsKIAllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKQEAgLTMzMCw3ICszMjksNiBAQAogCQlvbWFwX2lycV9iYXNlID0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDRYWF9HSUNfQ1BVX0JBU0UpOwogCWVsc2UKIAkJcHJfZXJyKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSBvbWFwX2lycV9iYXNlXG4iKTsKLSNlbmRpZgogfQogCiB2b2lkIF9faW5pdCBvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwppbmRleCAzOTQ0MTNkLi4yNGI4ODUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwpAQCAtMTkzLDEwICsxOTMsMTIgQEAKIAkJb21hcF9tYm94X3R5cGVfdCBpcnEpCiB7CiAJc3RydWN0IG9tYXBfbWJveDJfcHJpdiAqcCA9IG1ib3gtPnByaXY7Ci0JdTMyIGwsIGJpdCA9IChpcnEgPT0gSVJRX1RYKSA/IHAtPm5vdGZ1bGxfYml0IDogcC0+bmV3bXNnX2JpdDsKLQlsID0gbWJveF9yZWFkX3JlZyhwLT5pcnFkaXNhYmxlKTsKLQlsICY9IH5iaXQ7Ci0JbWJveF93cml0ZV9yZWcobCwgcC0+aXJxZGlzYWJsZSk7CisJdTMyIGJpdCA9IChpcnEgPT0gSVJRX1RYKSA/IHAtPm5vdGZ1bGxfYml0IDogcC0+bmV3bXNnX2JpdDsKKworCWlmICghY3B1X2lzX29tYXA0NHh4KCkpCisJCWJpdCA9IG1ib3hfcmVhZF9yZWcocC0+aXJxZGlzYWJsZSkgJiB+Yml0OworCisJbWJveF93cml0ZV9yZWcoYml0LCBwLT5pcnFkaXNhYmxlKTsKIH0KIAogc3RhdGljIHZvaWQgb21hcDJfbWJveF9hY2tfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsCkBAIC0zMzQsNyArMzM2LDcgQEAKIAkucHJpdgk9ICZvbWFwMl9tYm94X2l2YV9wcml2LAogfTsKIAotc3RydWN0IG9tYXBfbWJveCAqb21hcDJfbWJveGVzW10gPSB7ICZtYm94X2l2YV9pbmZvLCAmbWJveF9kc3BfaW5mbywgTlVMTCB9Oworc3RydWN0IG9tYXBfbWJveCAqb21hcDJfbWJveGVzW10gPSB7ICZtYm94X2RzcF9pbmZvLCAmbWJveF9pdmFfaW5mbywgTlVMTCB9OwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggZGY4ZDJmMi4uNmM4NDY1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAlzdHJ1Y3Qgb21hcF9tdXggKm11eCA9IE5VTEw7CiAJc3RydWN0IG9tYXBfbXV4X2VudHJ5ICplOwogCWNvbnN0IGNoYXIgKm1vZGVfbmFtZTsKLQlpbnQgZm91bmQgPSAwLCBmb3VuZF9tb2RlLCBtb2RlMF9sZW4gPSAwOworCWludCBmb3VuZCA9IDAsIGZvdW5kX21vZGUgPSAwLCBtb2RlMF9sZW4gPSAwOwogCXN0cnVjdCBsaXN0X2hlYWQgKm11eG1vZGVzID0gJnBhcnRpdGlvbi0+bXV4bW9kZXM7CiAKIAltb2RlX25hbWUgPSBzdHJjaHIobXV4bmFtZSwgJy4nKTsKQEAgLTYwNSw3ICs2MDUsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnBhcnRpdGlvbi0+bXV4bW9kZXMsIG5vZGUpIHsKIAkJc3RydWN0IG9tYXBfbXV4ICptID0gJmUtPm11eDsKIAotCQkodm9pZClkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG0tPm11eG5hbWVzWzBdLCBTX0lXVUdPLCBtdXhfZGJnX2RpciwKKwkJKHZvaWQpZGVidWdmc19jcmVhdGVfZmlsZShtLT5tdXhuYW1lc1swXSwgU19JV1VTUiwgbXV4X2RiZ19kaXIsCiAJCQkJCSAgbSwgJm9tYXBfbXV4X2RiZ19zaWduYWxfZm9wcyk7CiAJfQogfQpAQCAtMTAwMCw2ICsxMDAwLDcgQEAKIAlpZiAoIXBhcnRpdGlvbi0+YmFzZSkgewogCQlwcl9lcnIoIiVzOiBDb3VsZCBub3QgaW9yZW1hcCBtdXggcGFydGl0aW9uIGF0IDB4JTA4eFxuIiwKIAkJCV9fZnVuY19fLCBwYXJ0aXRpb24tPnBoeXMpOworCQlrZnJlZShwYXJ0aXRpb24pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwppbmRleCAxMjVmNTY1Li5hNWE4M2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCkBAIC02MzcsMTQgKzYzNywxNCBAQAogCiAJCX0KIAotCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJlbmFibGVfb2ZmX21vZGUiLCBTX0lSVUdPIHwgU19JV1VHTywgZCwKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgiZW5hYmxlX29mZl9tb2RlIiwgU19JUlVHTyB8IFNfSVdVU1IsIGQsCiAJCQkJICAgJmVuYWJsZV9vZmZfbW9kZSwgJnBtX2RiZ19vcHRpb25fZm9wcyk7Ci0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoInNsZWVwX3doaWxlX2lkbGUiLCBTX0lSVUdPIHwgU19JV1VHTywgZCwKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgic2xlZXBfd2hpbGVfaWRsZSIsIFNfSVJVR08gfCBTX0lXVVNSLCBkLAogCQkJCSAgICZzbGVlcF93aGlsZV9pZGxlLCAmcG1fZGJnX29wdGlvbl9mb3BzKTsKLQkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgid2FrZXVwX3RpbWVyX3NlY29uZHMiLCBTX0lSVUdPIHwgU19JV1VHTywgZCwKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgid2FrZXVwX3RpbWVyX3NlY29uZHMiLCBTX0lSVUdPIHwgU19JV1VTUiwgZCwKIAkJCQkgICAmd2FrZXVwX3RpbWVyX3NlY29uZHMsICZwbV9kYmdfb3B0aW9uX2ZvcHMpOwogCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ3YWtldXBfdGltZXJfbWlsbGlzZWNvbmRzIiwKLQkJCVNfSVJVR08gfCBTX0lXVUdPLCBkLCAmd2FrZXVwX3RpbWVyX21pbGxpc2Vjb25kcywKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBkLCAmd2FrZXVwX3RpbWVyX21pbGxpc2Vjb25kcywKIAkJCSZwbV9kYmdfb3B0aW9uX2ZvcHMpOwogCXBtX2RiZ19pbml0X2RvbmUgPSAxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmgKaW5kZXggMWMxYjBhYi4uMzk1ODBlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uaApAQCAtOTIsNyArOTIsNyBAQAogZXh0ZXJuIHZvaWQgb21hcDI0eHhfY3B1X3N1c3BlbmQodTMyIGRsbF9jdHJsLCB2b2lkIF9faW9tZW0gKnNkcmNfZGxsYV9jdHJsLAogCQkJCQl2b2lkIF9faW9tZW0gKnNkcmNfcG93ZXIpOwogZXh0ZXJuIHZvaWQgb21hcDM0eHhfY3B1X3N1c3BlbmQodTMyICphZGRyLCBpbnQgc2F2ZV9zdGF0ZSk7Ci1leHRlcm4gdm9pZCBzYXZlX3NlY3VyZV9yYW1fY29udGV4dCh1MzIgKmFkZHIpOworZXh0ZXJuIGludCBzYXZlX3NlY3VyZV9yYW1fY29udGV4dCh1MzIgKmFkZHIpOwogZXh0ZXJuIHZvaWQgb21hcDNfc2F2ZV9zY3JhdGNocGFkX2NvbnRlbnRzKHZvaWQpOwogCiBleHRlcm4gdW5zaWduZWQgaW50IG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kX3N6OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMKaW5kZXggOWU1ZGM4ZS4uOTdmZWIzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAogCS8qIEJsb2NrIGNvbnNvbGUgb3V0cHV0IGluIGNhc2UgaXQgaXMgb24gb25lIG9mIHRoZSBPTUFQIFVBUlRzICovCiAJaWYgKCFpc19zdXNwZW5kaW5nKCkpCi0JCWlmICh0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSgpKQorCQlpZiAoIWNvbnNvbGVfdHJ5bG9jaygpKQogCQkJZ290byBub19zbGVlcDsKIAogCW9tYXBfdWFydF9wcmVwYXJlX2lkbGUoMCk7CkBAIC0xNTEsNyArMTUxLDcgQEAKIAlvbWFwX3VhcnRfcmVzdW1lX2lkbGUoMCk7CiAKIAlpZiAoIWlzX3N1c3BlbmRpbmcoKSkKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCiBub19zbGVlcDoKIAlpZiAob21hcDJfcG1fZGVidWcpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCmluZGV4IDhjYmJlYWQuLjJmODY0ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtMTY4LDkgKzE2OCwxMCBAQAogICogb25jZSBkdXJpbmcgYm9vdCBzZXF1ZW5jZSwgYnV0IHRoaXMgd29ya3MgYXMgd2UgYXJlIG5vdCB1c2luZyBzZWN1cmUKICAqIHNlcnZpY2VzLgogICovCi1zdGF0aWMgdm9pZCBvbWFwM19zYXZlX3NlY3VyZV9yYW1fY29udGV4dCh1MzIgdGFyZ2V0X21wdV9zdGF0ZSkKK3N0YXRpYyB2b2lkIG9tYXAzX3NhdmVfc2VjdXJlX3JhbV9jb250ZXh0KHZvaWQpCiB7CiAJdTMyIHJldDsKKwlpbnQgbXB1X25leHRfc3RhdGUgPSBwd3JkbV9yZWFkX25leHRfcHdyc3QobXB1X3B3cmRtKTsKIAogCWlmIChvbWFwX3R5cGUoKSAhPSBPTUFQMl9ERVZJQ0VfVFlQRV9HUCkgewogCQkvKgpAQCAtMTgxLDcgKzE4Miw3IEBACiAJCXB3cmRtX3NldF9uZXh0X3B3cnN0KG1wdV9wd3JkbSwgUFdSRE1fUE9XRVJfT04pOwogCQlyZXQgPSBfb21hcF9zYXZlX3NlY3VyZV9zcmFtKCh1MzIgKikKIAkJCQlfX3BhKG9tYXAzX3NlY3VyZV9yYW1fc3RvcmFnZSkpOwotCQlwd3JkbV9zZXRfbmV4dF9wd3JzdChtcHVfcHdyZG0sIHRhcmdldF9tcHVfc3RhdGUpOworCQlwd3JkbV9zZXRfbmV4dF9wd3JzdChtcHVfcHdyZG0sIG1wdV9uZXh0X3N0YXRlKTsKIAkJLyogRm9sbG93aW5nIGlzIGZvciBlcnJvciB0cmFja2luZywgaXQgc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAkJaWYgKHJldCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJzYXZlX3NlY3VyZV9zcmFtKCkgcmV0dXJucyAlMDh4XG4iLApAQCAtMzk4LDcgKzM5OSw3IEBACiAJaWYgKCFpc19zdXNwZW5kaW5nKCkpCiAJCWlmIChwZXJfbmV4dF9zdGF0ZSA8IFBXUkRNX1BPV0VSX09OIHx8CiAJCSAgICBjb3JlX25leHRfc3RhdGUgPCBQV1JETV9QT1dFUl9PTikKLQkJCWlmICh0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSgpKQorCQkJaWYgKCFjb25zb2xlX3RyeWxvY2soKSkKIAkJCQlnb3RvIGNvbnNvbGVfc3RpbGxfYWN0aXZlOwogCiAJLyogUEVSICovCkBAIC00ODEsNyArNDgyLDcgQEAKIAl9CiAKIAlpZiAoIWlzX3N1c3BlbmRpbmcoKSkKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCiBjb25zb2xlX3N0aWxsX2FjdGl2ZToKIAkvKiBEaXNhYmxlIElPLVBBRCBhbmQgSU8tQ0hBSU4gd2FrZXVwICovCkBAIC0xMDk0LDcgKzEwOTUsNyBAQAogCQlsb2NhbF9maXFfZGlzYWJsZSgpOwogCiAJCW9tYXBfZG1hX2dsb2JhbF9jb250ZXh0X3NhdmUoKTsKLQkJb21hcDNfc2F2ZV9zZWN1cmVfcmFtX2NvbnRleHQoUFdSRE1fUE9XRVJfT04pOworCQlvbWFwM19zYXZlX3NlY3VyZV9yYW1fY29udGV4dCgpOwogCQlvbWFwX2RtYV9nbG9iYWxfY29udGV4dF9yZXN0b3JlKCk7CiAKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbjJ4eHhfM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbjJ4eHhfM3h4eC5jCmluZGV4IGQ1MjMzODkuLmNmNjAwZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4yeHh4XzN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluMnh4eF8zeHh4LmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxwbGF0L3ByY20uaD4KIAogI2luY2x1ZGUgInBvd2VyZG9tYWluLmgiCi0jaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgogI2luY2x1ZGUgInBybS5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY21fbXB1NDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtX21wdTQ0eHguaAppbmRleCA3MjlhNjQ0Li4zMzAwZmY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY21fbXB1NDR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbV9tcHU0NHh4LmgKQEAgLTM4LDggKzM4LDggQEAKICNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMV9JTlNUCQkweDA4MDAKIAogLyogUFJDTV9NUFUgY2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0cyAoZnJvbSBpbnN0YW5jZSBzdGFydCkgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9NUFVfQ0RPRkZTCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9QUkNNX01QVV9DUFUxX01QVV9DRE9GRlMJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSQ01fTVBVX0NQVTBfTVBVX0NET0ZGUwkweDAwMTgKKyNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMV9NUFVfQ0RPRkZTCTB4MDAxOAogCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwppbmRleCAzMDJkYTc0Li4zMmU5MWE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKQEAgLTgxMiw3ICs4MTIsNyBAQAogCiAJb2gtPmRldl9hdHRyID0gdWFydDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsgLyogaW4gY2FzZSB0aGUgZWFybHljb24gaXMgb24gdGhlIFVBUlQgKi8KKwljb25zb2xlX2xvY2soKTsgLyogaW4gY2FzZSB0aGUgZWFybHljb24gaXMgb24gdGhlIFVBUlQgKi8KIAogCS8qCiAJICogQmVjYXVzZSBvZiBlYXJseSBVQVJUIHByb2JpbmcsIFVBUlQgZGlkIG5vdCBnZXQgaWRsZWQKQEAgLTgzOCw3ICs4MzgsNyBAQAogCW9tYXBfdWFydF9ibG9ja19zbGVlcCh1YXJ0KTsKIAl1YXJ0LT50aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHVhcnQtPnBhZGNvbmYpIHx8CiAJICAgICh1YXJ0LT53a19lbiAmJiB1YXJ0LT53a19tYXNrKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDI0eHguUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAyNHh4LlMKaW5kZXggYzc3ODBjYy4uYjUwNzFhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDI0eHguUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMjR4eC5TCkBAIC00Nyw2ICs0Nyw3IEBACiAgKiBOb3RlOiBUaGlzIGNvZGUgZ2V0J3MgY29waWVkIHRvIGludGVybmFsIFNSQU0gYXQgYm9vdC4gV2hlbiB0aGUgT01BUAogICoJIHdha2VzIHVwIGl0IGNvbnRpbnVlcyBleGVjdXRpb24gYXQgdGhlIHBvaW50IGl0IHdlbnQgdG8gc2xlZXAuCiAgKi8KKwkuYWxpZ24JMwogRU5UUlkob21hcDI0eHhfaWRsZV9sb29wX3N1c3BlbmQpCiAJc3RtZmQJc3AhLCB7cjAsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCW1vdglyMCwgIzAJCQlAIGNsZWFyIGZvciBtY3Igc2V0dXAKQEAgLTgyLDYgKzgzLDcgQEAKICAqIFRoZSBETEwgbG9hZCB2YWx1ZSBpcyBub3Qga2VwdCBpbiBSRVRFTlRJT04gb3IgT0ZGLglJdCBuZWVkcyB0byBiZSByZXN0b3JlZAogICogYXQgd2FrZQogICovCisJLmFsaWduCTMKIEVOVFJZKG9tYXAyNHh4X2NwdV9zdXNwZW5kKQogCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCW1vdglyMywgIzB4MAkJQCBjbGVhciBmb3IgbWNyIGNhbGwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAzNHh4LlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMzR4eC5TCmluZGV4IDk4ZDgyMzIuLjk1MWEwYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAzNHh4LlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDM0eHguUwpAQCAtMTE4LDYgKzExOCw3IEBACiAKIAkudGV4dAogLyogRnVuY3Rpb24gdG8gY2FsbCByb20gY29kZSB0byBzYXZlIHNlY3VyZSByYW0gY29udGV4dCAqLworCS5hbGlnbgkzCiBFTlRSWShzYXZlX3NlY3VyZV9yYW1fY29udGV4dCkKIAlzdG1mZAlzcCEsIHtyMS1yMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCiAJYWRyCXIzLCBhcGlfcGFyYW1zCQlAIHIzIHBvaW50cyB0byBwYXJhbWV0ZXJzCkBAIC0xNjksNiArMTcwLDcgQEAKICAqICAgZGVwZW5kaW5nIG9uIHRoZSBsb3cgcG93ZXIgbW9kZSAobm9uLU9GRiB2cyBPRkYgbW9kZXMpLAogICogICBjZi4gJ1Jlc3VtZSBwYXRoIGZvciB4eHggbW9kZScgY29tbWVudHMuCiAgKi8KKwkuYWxpZ24JMwogRU5UUlkob21hcDM0eHhfY3B1X3N1c3BlbmQpCiAJc3RtZmQJc3AhLCB7cjAtcjEyLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMKaW5kZXggNzdlY2ViZi4uMWE3NzdlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXguYwpAQCAtMjgyLDYgKzI4Miw3IEBACiAJCWRldl9lcnIoJnNyX2luZm8tPnBkZXYtPmRldiwgIiVzOiBFUlJPUiBpbiByZWdpc3RlcmluZyIKIAkJCSJpbnRlcnJ1cHQgaGFuZGxlci4gU21hcnRyZWZsZXggd2lsbCIKIAkJCSJub3QgZnVuY3Rpb24gYXMgZGVzaXJlZFxuIiwgX19mdW5jX18pOworCQlrZnJlZShuYW1lKTsKIAkJa2ZyZWUoc3JfaW5mbyk7CiAJCXJldHVybiByZXQ7CiB9CkBAIC03ODAsOCArNzgxLDcgQEAKIAlzdHJ1Y3Qgb21hcF9zciAqc3JfaW5mbyA9IChzdHJ1Y3Qgb21hcF9zciAqKSBkYXRhOwogCiAJaWYgKCFzcl9pbmZvKSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBvbWFwX3NyIHN0cnVjdCBmb3Igc3JfJXMgbm90IGZvdW5kXG4iLAotCQkJX19mdW5jX18sIHNyX2luZm8tPnZvbHRkbS0+bmFtZSk7CisJCXByX3dhcm5pbmcoIiVzOiBvbWFwX3NyIHN0cnVjdCBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC03OTUsOCArNzk1LDcgQEAKIAlzdHJ1Y3Qgb21hcF9zciAqc3JfaW5mbyA9IChzdHJ1Y3Qgb21hcF9zciAqKSBkYXRhOwogCiAJaWYgKCFzcl9pbmZvKSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBvbWFwX3NyIHN0cnVjdCBmb3Igc3JfJXMgbm90IGZvdW5kXG4iLAotCQkJX19mdW5jX18sIHNyX2luZm8tPnZvbHRkbS0+bmFtZSk7CisJCXByX3dhcm5pbmcoIiVzOiBvbWFwX3NyIHN0cnVjdCBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04MzQsNyArODMzLDggQEAKIAogCWlmICghcGRhdGEpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IHBsYXRmb3JtIGRhdGEgbWlzc2luZ1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZnJlZV9kZXZpbmZvOwogCX0KIAogCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CkBAIC04ODAsNyArODgwLDcgQEAKIAkJcmV0ID0gc3JfbGF0ZV9pbml0KHNyX2luZm8pOwogCQlpZiAocmV0KSB7CiAJCQlwcl93YXJuaW5nKCIlczogRXJyb3IgaW4gU1IgbGF0ZSBpbml0XG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gcmV0OworCQkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJCX0KIAl9CiAKQEAgLTg5MSwxNyArODkxLDIwIEBACiAJICogbm90IHRyeSB0byBjcmVhdGUgcmVzdCBvZiB0aGUgZGVidWdmcyBlbnRyaWVzLgogCSAqLwogCXZkZF9kYmdfZGlyID0gb21hcF92b2x0YWdlX2dldF9kYmdkaXIoc3JfaW5mby0+dm9sdGRtKTsKLQlpZiAoIXZkZF9kYmdfZGlyKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXZkZF9kYmdfZGlyKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KIAogCWRiZ19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInNtYXJ0cmVmbGV4IiwgdmRkX2RiZ19kaXIpOwogCWlmIChJU19FUlIoZGJnX2RpcikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBkaXJlY3RvcnlcbiIsCiAJCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiBQVFJfRVJSKGRiZ19kaXIpOworCQlyZXQgPSBQVFJfRVJSKGRiZ19kaXIpOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKLQkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgiYXV0b2NvbXAiLCBTX0lSVUdPIHwgU19JV1VHTywgZGJnX2RpciwKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgiYXV0b2NvbXAiLCBTX0lSVUdPIHwgU19JV1VTUiwgZGJnX2RpciwKIAkJCQkodm9pZCAqKXNyX2luZm8sICZwbV9zcl9mb3BzKTsKIAkodm9pZCkgZGVidWdmc19jcmVhdGVfeDMyKCJlcnJ3ZWlnaHQiLCBTX0lSVUdPLCBkYmdfZGlyLAogCQkJJnNyX2luZm8tPmVycl93ZWlnaHQpOwpAQCAtOTE0LDcgKzkxNyw4IEBACiAJaWYgKElTX0VSUihudmFsdWVfZGlyKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeSIKIAkJCSJmb3Igbi12YWx1ZXNcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIFBUUl9FUlIobnZhbHVlX2Rpcik7CisJCXJldCA9IFBUUl9FUlIobnZhbHVlX2Rpcik7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCX0KIAogCW9tYXBfdm9sdGFnZV9nZXRfdm9sdHRhYmxlKHNyX2luZm8tPnZvbHRkbSwgJnZvbHRfZGF0YSk7CkBAIC05MjMsMjQgKzkyNywxNiBAQAogCQkJIiBjb3JyZXNwb25kaW5nIHZkZCB2ZGRfJXMuIENhbm5vdCBjcmVhdGUgZGVidWdmcyIKIAkJCSJlbnRyaWVzIGZvciBuLXZhbHVlc1xuIiwKIAkJCV9fZnVuY19fLCBzcl9pbmZvLT52b2x0ZG0tPm5hbWUpOwotCQlyZXR1cm4gLUVOT0RBVEE7CisJCXJldCA9IC1FTk9EQVRBOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3JfaW5mby0+bnZhbHVlX2NvdW50OyBpKyspIHsKLQkJY2hhciAqbmFtZTsKLQkJY2hhciB2b2x0X25hbWVbMzJdOworCQljaGFyIG5hbWVbTlZBTFVFX05BTUVfTEVOICsgMV07CiAKLQkJbmFtZSA9IGt6YWxsb2MoTlZBTFVFX05BTUVfTEVOICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmFtZSkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkiCi0JCQkJIiBmb3Igbi12YWx1ZSBkaXJlY3RvcnkgbmFtZVxuIiwgIF9fZnVuY19fKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJc3RyY3B5KG5hbWUsICJ2b2x0XyIpOwotCQlzcHJpbnRmKHZvbHRfbmFtZSwgIiVkIiwgdm9sdF9kYXRhW2ldLnZvbHRfbm9taW5hbCk7Ci0JCXN0cmNhdChuYW1lLCB2b2x0X25hbWUpOwotCQkodm9pZCkgZGVidWdmc19jcmVhdGVfeDMyKG5hbWUsIFNfSVJVR08gfCBTX0lXVUdPLCBudmFsdWVfZGlyLAorCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJ2b2x0XyVkIiwKKwkJCSB2b2x0X2RhdGFbaV0udm9sdF9ub21pbmFsKTsKKwkJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX3gzMihuYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwgbnZhbHVlX2RpciwKIAkJCQkmKHNyX2luZm8tPm52YWx1ZV90YWJsZVtpXS5udmFsdWUpKTsKIAl9CiAKQEAgLTk2Niw3ICs5NjIsNyBAQAogCX0KIAogCXNyX2luZm8gPSBfc3JfbG9va3VwKHBkYXRhLT52b2x0ZG0pOwotCWlmICghc3JfaW5mbykgeworCWlmIChJU19FUlIoc3JfaW5mbykpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIiVzOiBvbWFwX3NyIHN0cnVjdCBub3QgZm91bmRcbiIsCiAJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQyeC5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQyeC5TCmluZGV4IDA1NTMxMGMuLmZmOWI5ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTI0MnguUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0yNDJ4LlMKQEAgLTM5LDYgKzM5LDcgQEAKIAogCS50ZXh0CiAKKwkuYWxpZ24JMwogRU5UUlkob21hcDI0Mnhfc3JhbV9kZHJfaW5pdCkKIAlzdG1mZAlzcCEsIHtyMCAtIHIxMiwgbHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKIApAQCAtMTQzLDYgKzE0NCw3IEBACiAgKiByMCA9IFtQUkNNX0ZVTEwgfCBQUkNNX0hBTEZdIHIxID0gU0RSQ19ETExBX0NUUkwgdmFsdWUgcjIgPSBbRERSIHwgU0RSXQogICogUFJDTV9GVUxMID0gMiwgUFJDTV9IQUxGID0gMSwgRERSID0gMSwgU0RSID0gMAogICovCisJLmFsaWduCTMKIEVOVFJZKG9tYXAyNDJ4X3NyYW1fcmVwcm9ncmFtX3NkcmMpCiAJc3RtZmQJc3AhLCB7cjAgLSByMTAsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCiAJbW92CXIzLCAjMHgwCQlAIGNsZWFyIGZvciBtcmMgY2FsbApAQCAtMjM4LDYgKzI0MCw3IEBACiAvKgogICogU2V0IGRpdmlkZXJzIGFuZCBwbGwuIEFsc28gcmVjYWxjdWxhdGUgRExMIHZhbHVlIGZvciBERFIgYW5kIHVubG9jayBtb2RlLgogICovCisJLmFsaWduCTMKIEVOVFJZKG9tYXAyNDJ4X3NyYW1fc2V0X3ByY20pCiAJc3RtZmQJc3AhLCB7cjAtcjEyLCBscn0JQCByZWdzIHRvIHN0YWNrCiAJYWRyCXI0LCBwYmVnaW4JCUAgYWRkciBvZiBwcmVsb2FkIHN0YXJ0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0yNDN4LlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0yNDN4LlMKaW5kZXggZjkwMDc1OC4uNzY3MzAyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQzeC5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTI0M3guUwpAQCAtMzksNiArMzksNyBAQAogCiAJLnRleHQKIAorCS5hbGlnbgkzCiBFTlRSWShvbWFwMjQzeF9zcmFtX2Rkcl9pbml0KQogCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCkBAIC0xNDMsNiArMTQ0LDcgQEAKICAqIHIwID0gW1BSQ01fRlVMTCB8IFBSQ01fSEFMRl0gcjEgPSBTRFJDX0RMTEFfQ1RSTCB2YWx1ZSByMiA9IFtERFIgfCBTRFJdCiAgKiBQUkNNX0ZVTEwgPSAyLCBQUkNNX0hBTEYgPSAxLCBERFIgPSAxLCBTRFIgPSAwCiAgKi8KKwkuYWxpZ24JMwogRU5UUlkob21hcDI0M3hfc3JhbV9yZXByb2dyYW1fc2RyYykKIAlzdG1mZAlzcCEsIHtyMCAtIHIxMCwgbHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKIAltb3YJcjMsICMweDAJCUAgY2xlYXIgZm9yIG1yYyBjYWxsCkBAIC0yMzgsNiArMjQwLDcgQEAKIC8qCiAgKiBTZXQgZGl2aWRlcnMgYW5kIHBsbC4gQWxzbyByZWNhbGN1bGF0ZSBETEwgdmFsdWUgZm9yIEREUiBhbmQgdW5sb2NrIG1vZGUuCiAgKi8KKwkuYWxpZ24JMwogRU5UUlkob21hcDI0M3hfc3JhbV9zZXRfcHJjbSkKIAlzdG1mZAlzcCEsIHtyMC1yMTIsIGxyfQlAIHJlZ3MgdG8gc3RhY2sKIAlhZHIJcjQsIHBiZWdpbgkJQCBhZGRyIG9mIHByZWxvYWQgc3RhcnQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTM0eHguUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTM0eHguUwppbmRleCA3Zjg5M2EyLi4yNTAxMWNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0zNHh4LlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMzR4eC5TCkBAIC0xMTEsNiArMTExLDcgQEAKICAqIHNpbmNlIGl0IHdpbGwgY2F1c2UgdGhlIEFSTSBNTVUgdG8gYXR0ZW1wdCB0byB3YWxrIHRoZSBwYWdlIHRhYmxlcy4KICAqIFRoZXNlIGNyYXNoZXMgbWF5IGJlIGludGVybWl0dGVudC4KICAqLworCS5hbGlnbgkzCiBFTlRSWShvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwpCiAJc3RtZmQJc3AhLCB7cjEtcjEyLCBscn0JQCBzdG9yZSByZWdzIHRvIHN0YWNrCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwppbmRleCA0ZTQ4ZTc4Li4wZmM1NTBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCkBAIC0zOSw5ICszOSwxMiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxwbGF0L2RtdGltZXIuaD4KICNpbmNsdWRlIDxhc20vbG9jYWx0aW1lci5oPgorI2luY2x1ZGUgPGFzbS9zY2hlZF9jbG9jay5oPgogCiAjaW5jbHVkZSAidGltZXItZ3AuaCIKIAorI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisKIC8qIE1BWF9HUFRJTUVSX0lEOiBudW1iZXIgb2YgR1BUSU1FUnMgb24gdGhlIGNoaXAgKi8KICNkZWZpbmUgTUFYX0dQVElNRVJfSUQJCTEyCiAKQEAgLTE3NiwxNCArMTc5LDE5IEBACiAvKiAKICAqIFdoZW4gMzJrLXRpbWVyIGlzIGVuYWJsZWQsIGRvbid0IHVzZSBHUFRpbWVyIGZvciBjbG9ja3NvdXJjZQogICogaW5zdGVhZCwganVzdCBsZWF2ZSBkZWZhdWx0IGNsb2Nrc291cmNlIHdoaWNoIHVzZXMgdGhlIDMyawotICogc3luYyBjb3VudGVyLiAgU2VlIGNsb2Nrc291cmNlIHNldHVwIGluIHNlZSBwbGF0LW9tYXAvY29tbW9uLmMuIAorICogc3luYyBjb3VudGVyLiAgU2VlIGNsb2Nrc291cmNlIHNldHVwIGluIHBsYXQtb21hcC9jb3VudGVyXzMyay5jCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBvbWFwMl9ncF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpIHt9CitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDJfZ3BfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQoreworCW9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmsoKTsKK30KKwogI2Vsc2UKIC8qCiAgKiBjbG9ja3NvdXJjZQogICovCitzdGF0aWMgREVGSU5FX0NMT0NLX0RBVEEoY2QpOwogc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyICpncHRfY2xvY2tzb3VyY2U7CiBzdGF0aWMgY3ljbGVfdCBjbG9ja3NvdXJjZV9yZWFkX2N5Y2xlcyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewpAQCAtMTk4LDYgKzIwNiwxNSBAQAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKK3N0YXRpYyB2b2lkIG5vdHJhY2UgZG10aW1lcl91cGRhdGVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1MzIgY3ljOworCisJY3ljID0gb21hcF9kbV90aW1lcl9yZWFkX2NvdW50ZXIoZ3B0X2Nsb2Nrc291cmNlKTsKKworCXVwZGF0ZV9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CisKIC8qIFNldHVwIGZyZWUtcnVubmluZyBjb3VudGVyIGZvciBjbG9ja3NvdXJjZSAqLwogc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dwX2Nsb2Nrc291cmNlX2luaXQodm9pZCkKIHsKQEAgLTIxOCw2ICsyMzUsOCBAQAogCiAJb21hcF9kbV90aW1lcl9zZXRfbG9hZF9zdGFydChncHQsIDEsIDApOwogCisJaW5pdF9zY2hlZF9jbG9jaygmY2QsIGRtdGltZXJfdXBkYXRlX3NjaGVkX2Nsb2NrLCAzMiwgdGlja19yYXRlKTsKKwogCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfZ3B0LCB0aWNrX3JhdGUpKQogCQlwcmludGsoZXJyMiwgY2xvY2tzb3VyY2VfZ3B0Lm5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYwppbmRleCBlZDYwNzljOS4uMTJiZTUyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKQEAgLTQ3MSw2ICs0NzEsNyBAQAogCXN0cmNhdChuYW1lLCB2ZGQtPnZvbHRkbS5uYW1lKTsKIAogCXZkZC0+ZGVidWdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIHZvbHRhZ2VfZGlyKTsKKwlrZnJlZShuYW1lKTsKIAlpZiAoSVNfRVJSKHZkZC0+ZGVidWdfZGlyKSkgewogCQlwcl93YXJuaW5nKCIlczogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeSBmb3IiCiAJCQkiIHZkZF8lc1xuIiwgX19mdW5jX18sIHZkZC0+dm9sdGRtLm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1ldmFsYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktZXZhbGJvYXJkLmMKaW5kZXggNmIyYzgwMC4uMjhmNjY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1ldmFsYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLWV2YWxib2FyZC5jCkBAIC01MCw3ICs1MCw3IEBACiAJCQlHUElPMF9DT0xJQlJJX1BYQTI3MF9TRF9ERVRFQ1Q7CiAJaWYgKG1hY2hpbmVfaXNfY29saWJyaTMwMCgpKQkvKiBQWEEzMDAgQ29saWJyaSAqLwogCQljb2xpYnJpX21jaV9wbGF0Zm9ybV9kYXRhLmdwaW9fY2FyZF9kZXRlY3QgPQotCQkJR1BJTzM5X0NPTElCUklfUFhBMzAwX1NEX0RFVEVDVDsKKwkJCUdQSU8xM19DT0xJQlJJX1BYQTMwMF9TRF9ERVRFQ1Q7CiAJZWxzZQkJCQkvKiBQWEEzMjAgQ29saWJyaSAqLwogCQljb2xpYnJpX21jaV9wbGF0Zm9ybV9kYXRhLmdwaW9fY2FyZF9kZXRlY3QgPQogCQkJR1BJTzI4X0NPTElCUklfUFhBMzIwX1NEX0RFVEVDVDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCmluZGV4IGZkZGIxNmQuLjY2ZGQ4MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYwpAQCAtNDEsNyArNDEsNyBAQAogCUdQSU80X01NQzFfREFUMSwKIAlHUElPNV9NTUMxX0RBVDIsCiAJR1BJTzZfTU1DMV9EQVQzLAotCUdQSU8zOV9HUElPLAkvKiBTRCBkZXRlY3QgKi8KKwlHUElPMTNfR1BJTywJLyogR1BJTzEzX0NPTElCUklfUFhBMzAwX1NEX0RFVEVDVCAqLwogCiAJLyogVUhDICovCiAJR1BJTzBfMl9VU0JIX1BFTiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCmluZGV4IDM4OGE5NmYuLmNiNDIzNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaApAQCAtNjAsNyArNjAsNyBAQAogI2RlZmluZSBHUElPMTEzX0NPTElCUklfUFhBMjcwX1RTX0lSUQkxMTMKIAogLyogR1BJTyBkZWZpbml0aW9ucyBmb3IgQ29saWJyaSBQWEEzMDAvMzEwICovCi0jZGVmaW5lIEdQSU8zOV9DT0xJQlJJX1BYQTMwMF9TRF9ERVRFQ1QJMzkKKyNkZWZpbmUgR1BJTzEzX0NPTElCUklfUFhBMzAwX1NEX0RFVEVDVAkxMwogCiAvKiBHUElPIGRlZmluaXRpb25zIGZvciBDb2xpYnJpIFBYQTMyMCAqLwogI2RlZmluZSBHUElPMjhfQ09MSUJSSV9QWEEzMjBfU0RfREVURUNUCTI4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcG0uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wbS5oCmluZGV4IGZkODM2MGMuLmYxNWFmZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wbS5oCkBAIC0yMiw5ICsyMiw4IEBACiBleHRlcm4gc3RydWN0IHB4YV9jcHVfcG1fZm5zICpweGFfY3B1X3BtX2ZuczsKIAogLyogc2xlZXAuUyAqLwotZXh0ZXJuIHZvaWQgcHhhMjV4X2NwdV9zdXNwZW5kKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBweGEyN3hfY3B1X3N1c3BlbmQodW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIHB4YV9jcHVfcmVzdW1lKHZvaWQpOworZXh0ZXJuIHZvaWQgcHhhMjV4X2NwdV9zdXNwZW5kKHVuc2lnbmVkIGludCwgbG9uZyk7CitleHRlcm4gdm9pZCBweGEyN3hfY3B1X3N1c3BlbmQodW5zaWduZWQgaW50LCBsb25nKTsKIAogZXh0ZXJuIGludCBweGFfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKIGV4dGVybiBpbnQgcHhhX3BtX3ByZXBhcmUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMKaW5kZXggNDA1YjkyYS4uMzU1NzJjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbTI3eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG0yN3guYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJLnB3bV9pZAkJPSAwLAogCS5tYXhfYnJpZ2h0bmVzcwk9IDB4ZmUsCiAJLmRmdF9icmlnaHRuZXNzCT0gMHg3ZSwKLQkucHdtX3BlcmlvZF9ucwk9IDM1MDAsCisJLnB3bV9wZXJpb2RfbnMJPSAzNTAwICogMTAyNCwKIAkuaW5pdAkJPSBwYWxtMjd4X2JhY2tsaWdodF9pbml0LAogCS5ub3RpZnkJCT0gcGFsbTI3eF9iYWNrbGlnaHRfbm90aWZ5LAogCS5leGl0CQk9IHBhbG0yN3hfYmFja2xpZ2h0X2V4aXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKaW5kZXggN2JmNDAxNy4uMzAxMDE5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiBzdGF0aWMgaW50IHBhbG16NzJfcG1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQogewogCS8qIHNldHVwIHRoZSByZXN1bWVfaW5mbyBzdHJ1Y3QgZm9yIHRoZSBvcmlnaW5hbCBib290bG9hZGVyICovCi0JcGFsbXo3Ml9yZXN1bWVfaW5mby5yZXN1bWVfYWRkciA9ICh1MzIpIHB4YV9jcHVfcmVzdW1lOworCXBhbG16NzJfcmVzdW1lX2luZm8ucmVzdW1lX2FkZHIgPSAodTMyKSBjcHVfcmVzdW1lOwogCiAJLyogU3RvcmluZyBtZW1vcnkgdG91Y2hlZCBieSBST00gKi8KIAlzdG9yZV9wdHIgPSAqUEFMTVo3Ml9TQVZFX0RXT1JEOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMKaW5kZXggOTc4ZTFiMi4uNTFlMTU4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wbS5jCkBAIC0zMyw3ICszMyw3IEBACiAjZW5kaWYKIAogCS8qIHNraXAgcmVnaXN0ZXJzIHNhdmluZyBmb3Igc3RhbmRieSAqLwotCWlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX1NUQU5EQlkpIHsKKwlpZiAoc3RhdGUgIT0gUE1fU1VTUEVORF9TVEFOREJZICYmIHB4YV9jcHVfcG1fZm5zLT5zYXZlKSB7CiAJCXB4YV9jcHVfcG1fZm5zLT5zYXZlKHNsZWVwX3NhdmUpOwogCQkvKiBiZWZvcmUgc2xlZXBpbmcsIGNhbGN1bGF0ZSBhbmQgc2F2ZSBhIGNoZWNrc3VtICovCiAJCWZvciAoaSA9IDA7IGkgPCBweGFfY3B1X3BtX2Zucy0+c2F2ZV9jb3VudCAtIDE7IGkrKykKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlweGFfY3B1X3BtX2Zucy0+ZW50ZXIoc3RhdGUpOwogCWNwdV9pbml0KCk7CiAKLQlpZiAoc3RhdGUgIT0gUE1fU1VTUEVORF9TVEFOREJZKSB7CisJaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfU1RBTkRCWSAmJiBweGFfY3B1X3BtX2Zucy0+cmVzdG9yZSkgewogCQkvKiBhZnRlciBzbGVlcGluZywgdmFsaWRhdGUgdGhlIGNoZWNrc3VtICovCiAJCWZvciAoaSA9IDA7IGkgPCBweGFfY3B1X3BtX2Zucy0+c2F2ZV9jb3VudCAtIDE7IGkrKykKIAkJCWNoZWNrc3VtICs9IHNsZWVwX3NhdmVbaV07CkBAIC02NywxMSArNjcsNiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChweGFfcG1fZW50ZXIpOwogCi11bnNpZ25lZCBsb25nIHNsZWVwX3BoeXNfc3Aodm9pZCAqc3ApCi17Ci0JcmV0dXJuIHZpcnRfdG9fcGh5cyhzcCk7Ci19Ci0KIHN0YXRpYyBpbnQgcHhhX3BtX3ZhbGlkKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKIAlpZiAocHhhX2NwdV9wbV9mbnMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCmluZGV4IGZiYzViNzcuLjZiZGU1OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAogCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIFBNX1NVU1BFTkRfTUVNOgotCQlweGEyNXhfY3B1X3N1c3BlbmQoUFdSTU9ERV9TTEVFUCk7CisJCXB4YTI1eF9jcHVfc3VzcGVuZChQV1JNT0RFX1NMRUVQLCBQTEFUX1BIWVNfT0ZGU0VUIC0gUEFHRV9PRkZTRVQpOwogCQlicmVhazsKIAl9CiB9CkBAIC0yNTIsNyArMjUyLDcgQEAKIHN0YXRpYyBpbnQgcHhhMjV4X2NwdV9wbV9wcmVwYXJlKHZvaWQpCiB7CiAJLyogc2V0IHJlc3VtZSByZXR1cm4gYWRkcmVzcyAqLwotCVBTUFIgPSB2aXJ0X3RvX3BoeXMocHhhX2NwdV9yZXN1bWUpOworCVBTUFIgPSB2aXJ0X3RvX3BoeXMoY3B1X3Jlc3VtZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM0Nyw2ICszNDcsNyBAQAogCSZweGEyNXhfZGV2aWNlX2Fzc3AsCiAJJnB4YTI1eF9kZXZpY2VfcHdtMCwKIAkmcHhhMjV4X2RldmljZV9wd20xLAorCSZweGFfZGV2aWNlX2Fzb2NfcGxhdGZvcm0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgcHhhMjV4X3N5c2RldltdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwppbmRleCA5ODczMDFmLi4yOGIxMWJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAJCXB4YV9jcHVfc3RhbmRieSgpOwogCQlicmVhazsKIAljYXNlIFBNX1NVU1BFTkRfTUVNOgotCQlweGEyN3hfY3B1X3N1c3BlbmQocHdybW9kZSk7CisJCXB4YTI3eF9jcHVfc3VzcGVuZChwd3Jtb2RlLCBQTEFUX1BIWVNfT0ZGU0VUIC0gUEFHRV9PRkZTRVQpOwogCQlicmVhazsKIAl9CiB9CkBAIC0zMTMsNyArMzEzLDcgQEAKIHN0YXRpYyBpbnQgcHhhMjd4X2NwdV9wbV9wcmVwYXJlKHZvaWQpCiB7CiAJLyogc2V0IHJlc3VtZSByZXR1cm4gYWRkcmVzcyAqLwotCVBTUFIgPSB2aXJ0X3RvX3BoeXMocHhhX2NwdV9yZXN1bWUpOworCVBTUFIgPSB2aXJ0X3RvX3BoeXMoY3B1X3Jlc3VtZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKaW5kZXggYTdhMTllMS4uMTIzMDM0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKQEAgLTE0Miw4ICsxNDIsNyBAQAogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnAgPSAodm9sYXRpbGUgdm9pZCAqKTB4YzAwMDAwMDA7CiAJdW5zaWduZWQgbG9uZyBzYXZlZF9kYXRhID0gKnA7CiAKLQlleHRlcm4gdm9pZCBweGEzeHhfY3B1X3N1c3BlbmQodm9pZCk7Ci0JZXh0ZXJuIHZvaWQgcHhhM3h4X2NwdV9yZXN1bWUodm9pZCk7CisJZXh0ZXJuIHZvaWQgcHhhM3h4X2NwdV9zdXNwZW5kKGxvbmcpOwogCiAJLyogcmVzdW1pbmcgZnJvbSBEMiByZXF1aXJlcyB0aGUgSFNJTzIvQk9PVC9UUE0gY2xvY2tzIGVuYWJsZWQgKi8KIAlDS0VOQSB8PSAoMSA8PCBDS0VOX0JPT1QpIHwgKDEgPDwgQ0tFTl9UUE0pOwpAQCAtMTYxLDkgKzE2MCw5IEBACiAJUFNQUiA9IDB4NWMwMTQwMDA7CiAKIAkvKiBvdmVyd3JpdGUgd2l0aCB0aGUgcmVzdW1lIGFkZHJlc3MgKi8KLQkqcCA9IHZpcnRfdG9fcGh5cyhweGEzeHhfY3B1X3Jlc3VtZSk7CisJKnAgPSB2aXJ0X3RvX3BoeXMoY3B1X3Jlc3VtZSk7CiAKLQlweGEzeHhfY3B1X3N1c3BlbmQoKTsKKwlweGEzeHhfY3B1X3N1c3BlbmQoUExBVF9QSFlTX09GRlNFVCAtIFBBR0VfT0ZGU0VUKTsKIAogCSpwID0gc2F2ZWRfZGF0YTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtcHhhL3NsZWVwLlMKaW5kZXggYzU1MWRhOC4uNmY1MzY4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zbGVlcC5TCkBAIC0yMiwxMzMgKzIyLDI2IEBACiAKIAkJLnRleHQKIAotcHhhX2NwdV9zYXZlX2NwOgotCUAgZ2V0IGNvcHJvY2Vzc29yIHJlZ2lzdGVycwotCW1yYwlwMTQsIDAsIHIzLCBjNiwgYzAsIDAJCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgZm9yIHR1cmJvIG1vZGUKLQltcmMJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAkJQCBDUCBhY2Nlc3MgcmVnCi0JbXJjCXAxNSwgMCwgcjUsIGMxMywgYzAsIDAJCUAgUElECi0JbXJjIAlwMTUsIDAsIHI2LCBjMywgYzAsIDAJCUAgZG9tYWluIElECi0JbXJjIAlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbXJjCXAxNSwgMCwgcjgsIGMxLCBjMSwgMCAgICAgICAgICAgQCBhdXhpbGlhcnkgY29udHJvbCByZWcKLQltcmMgCXAxNSwgMCwgcjksIGMxLCBjMCwgMAkJQCBjb250cm9sIHJlZwotCi0JYmljCXIzLCByMywgIzIJCQlAIGNsZWFyIGZyZXF1ZW5jeSBjaGFuZ2UgYml0Ci0KLQlAIHN0b3JlIHRoZW0gcGx1cyBjdXJyZW50IHZpcnR1YWwgc3RhY2sgcHRyIG9uIHN0YWNrCi0JbW92CXIxMCwgc3AKLQlzdG1mZAlzcCEsIHtyMyAtIHIxMH0KLQotCW1vdglwYywgbHIKLQotcHhhX2NwdV9zYXZlX3NwOgotCUAgcHJlc2VydmUgcGh5cyBhZGRyZXNzIG9mIHN0YWNrCi0JbW92CXIwLCBzcAotCXN0cglsciwgW3NwLCAjLTRdIQotCWJsCXNsZWVwX3BoeXNfc3AKLQlsZHIJcjEsID1zbGVlcF9zYXZlX3NwCi0Jc3RyCXIwLCBbcjFdCi0JbGRyCXBjLCBbc3BdLCAjNAotCiAjaWZkZWYgQ09ORklHX1BYQTN4eAogLyoKICAqIHB4YTN4eF9jcHVfc3VzcGVuZCgpIC0gZm9yY2VzIENQVSBpbnRvIHNsZWVwIHN0YXRlIChTMkQzQzQpCiAgKgotICogTk9URTogIHVuZm9ydHVuYXRlbHksIHB4YV9jcHVfc2F2ZV9jcCBjYW4gbm90IGJlIHJldXNlZCBoZXJlIHNpbmNlCi0gKiB0aGUgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBpcyBkaWZmZXJlbnQgYmV0d2VlbiBweGEzeHgKLSAqIGFuZCBweGF7MjV4LDI3eH0KKyAqIHIwID0gdjpwIG9mZnNldAogICovCi0KIEVOVFJZKHB4YTN4eF9jcHVfc3VzcGVuZCkKIAogI2lmbmRlZiBDT05GSUdfSVdNTVhUCiAJbXJhCXIyLCByMywgYWNjMAogI2VuZGlmCiAJc3RtZmQJc3AhLCB7cjIgLSByMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi0KLQltcmMJcDE0LCAwLCByMywgYzYsIGMwLCAwCQlAIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGZvciB0dXJibyBtb2RlCi0JbXJjCXAxNSwgMCwgcjQsIGMxNSwgYzEsIDAJCUAgQ1AgYWNjZXNzIHJlZwotCW1yYwlwMTUsIDAsIHI1LCBjMTMsIGMwLCAwCQlAIFBJRAotCW1yYyAJcDE1LCAwLCByNiwgYzMsIGMwLCAwCQlAIGRvbWFpbiBJRAotCW1yYyAJcDE1LCAwLCByNywgYzIsIGMwLCAwCQlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcgotCW1yYwlwMTUsIDAsIHI4LCBjMSwgYzAsIDEgICAgICAgICAgIEAgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnCi0JbXJjIAlwMTUsIDAsIHI5LCBjMSwgYzAsIDAJCUAgY29udHJvbCByZWcKLQotCWJpYwlyMywgcjMsICMyCQkJQCBjbGVhciBmcmVxdWVuY3kgY2hhbmdlIGJpdAotCi0JQCBzdG9yZSB0aGVtIHBsdXMgY3VycmVudCB2aXJ0dWFsIHN0YWNrIHB0ciBvbiBzdGFjawotCW1vdglyMTAsIHNwCi0Jc3RtZmQJc3AhLCB7cjMgLSByMTB9Ci0KLQlAIHN0b3JlIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhY2sgcG9pbnRlcgotCW1vdglyMCwgc3AKLQlibAlzbGVlcF9waHlzX3NwCi0JbGRyCXIxLCA9c2xlZXBfc2F2ZV9zcAotCXN0cglyMCwgW3IxXQotCi0JQCBjbGVhbiBkYXRhIGNhY2hlCi0JYmwJeHNjM19mbHVzaF9rZXJuX2NhY2hlX2FsbAorCW1vdglyMSwgcjAKKwlsZHIJcjMsID1weGFfY3B1X3Jlc3VtZQlAIHJlc3VtZSBmdW5jdGlvbgorCWJsCWNwdV9zdXNwZW5kCiAKIAltb3YJcjAsICMweDA2CQlAIFMyRDNDNCBtb2RlCiAJbWNyCXAxNCwgMCwgcjAsIGM3LCBjMCwgMAlAIGVudGVyIHNsZWVwCiAKIDIwOgliCTIwYgkJCUAgd2FpdGluZyBmb3Igc2xlZXAKLQotCS5kYXRhCi0JLmFsaWduIDUKLS8qCi0gKiBweGEzeHhfY3B1X3Jlc3VtZQotICovCi0KLUVOVFJZKHB4YTN4eF9jcHVfcmVzdW1lKQotCi0JbW92CXIwLCAjUFNSX0lfQklUIHwgUFNSX0ZfQklUIHwgU1ZDX01PREUJQCBzZXQgU1ZDLCBpcnFzIG9mZgotCW1zcgljcHNyX2MsIHIwCi0KLQlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJCUAgc3RhY2sgcGh5cyBhZGRyCi0JbGRtZmQJcjAsIHtyMyAtIHI5LCBzcH0JCUAgQ1AgcmVncyArIHZpcnQgc3RhY2sgcHRyCi0KLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIGNhY2hlcywgQlRCCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgKCZmaWxsKSBidWZmZXIKLQltY3IJcDE1LCAwLCByMSwgYzcsIGM1LCA0CQlAIGZsdXNoIHByZWZldGNoIGJ1ZmZlcgotCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAgICAJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKLQotCW1jcglwMTQsIDAsIHIzLCBjNiwgYzAsIDAJCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgdHVyYm8gbW9kZS4KLQltY3IJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAkJQCBDUCBhY2Nlc3MgcmVnCi0JbWNyCXAxNSwgMCwgcjUsIGMxMywgYzAsIDAJCUAgUElECi0JbWNyIAlwMTUsIDAsIHI2LCBjMywgYzAsIDAJCUAgZG9tYWluIElECi0JbWNyIAlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbWNyCXAxNSwgMCwgcjgsIGMxLCBjMCwgMSAgICAgICAgICAgQCBhdXhpbGlhcnkgY29udHJvbCByZWcKLQotCUAgdGVtcG9yYXJpbHkgbWFwIHJlc3VtZV90dXJuX29uX21tdSBpbnRvIHRoZSBwYWdlIHRhYmxlLAotCUAgb3RoZXJ3aXNlIHByZWZldGNoIGFib3J0IG9jY3VycyBhZnRlciBNTVUgaXMgdHVybmVkIG9uCi0JbW92CXIxLCByNwotCWJpYwlyMSwgcjEsICMweDAwZmYKLQliaWMJcjEsIHIxLCAjMHgzZjAwCi0JbGRyCXIyLCA9MHg1NDJlCi0KLQlhZHIJcjMsIHJlc3VtZV90dXJuX29uX21tdQotCW1vdglyMywgcjMsIGxzciAjMjAKLQlvcnIJcjQsIHIyLCByMywgbHNsICMyMAotCWxkcglyNSwgW3IxLCByMywgbHNsICMyXQotCXN0ciAgICAgcjQsIFtyMSwgcjMsIGxzbCAjMl0KLQotCUAgTWFwcGluZyBwYWdlIHRhYmxlIGFkZHJlc3MgaW4gdGhlIHBhZ2UgdGFibGUKLQltb3YJcjYsIHIxLCBsc3IgIzIwCi0Jb3JyCXI3LCByMiwgcjYsIGxzbCAjMjAKLQlsZHIJcjgsIFtyMSwgcjYsIGxzbCAjMl0KLQlzdHIJcjcsIFtyMSwgcjYsIGxzbCAjMl0KLQotCWxkcglyMiwgPXB4YTN4eF9yZXN1bWVfYWZ0ZXJfbW11CUAgYWJzb2x1dGUgdmlydHVhbCBhZGRyZXNzCi0JYglyZXN1bWVfdHVybl9vbl9tbXUJCUAgY2FjaGUgYWxpZ24gZXhlY3V0aW9uCi0KLQkudGV4dAotcHhhM3h4X3Jlc3VtZV9hZnRlcl9tbXU6Ci0JLyogcmVzdG9yZSB0aGUgdGVtcG9yYXJ5IG1hcHBpbmcgKi8KLQlzdHIJcjUsIFtyMSwgcjMsIGxzbCAjMl0KLQlzdHIJcjgsIFtyMSwgcjYsIGxzbCAjMl0KLQliCXJlc3VtZV9hZnRlcl9tbXUKLQogI2VuZGlmIC8qIENPTkZJR19QWEEzeHggKi8KIAogI2lmZGVmIENPTkZJR19QWEEyN3gKQEAgLTE1OCwyOCArNTEsMjMgQEAKICAqIEZvcmNlcyBDUFUgaW50byBzbGVlcCBzdGF0ZS4KICAqCiAgKiByMCA9IHZhbHVlIGZvciBQV1JNT0RFIE0gZmllbGQgZm9yIGRlc2lyZWQgc2xlZXAgc3RhdGUKKyAqIHIxID0gdjpwIG9mZnNldAogICovCi0KIEVOVFJZKHB4YTI3eF9jcHVfc3VzcGVuZCkKIAogI2lmbmRlZiBDT05GSUdfSVdNTVhUCiAJbXJhCXIyLCByMywgYWNjMAogI2VuZGlmCiAJc3RtZmQJc3AhLCB7cjIgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawotCi0JYmwJcHhhX2NwdV9zYXZlX2NwCi0KLQltb3YJcjUsIHIwCQkJCUAgc2F2ZSBzbGVlcCBtb2RlCi0JYmwJcHhhX2NwdV9zYXZlX3NwCi0KLQlAIGNsZWFuIGRhdGEgY2FjaGUKLQlibAl4c2NhbGVfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKwltb3YJcjQsIHIwCQkJCUAgc2F2ZSBzbGVlcCBtb2RlCisJbGRyCXIzLCA9cHhhX2NwdV9yZXN1bWUJCUAgcmVzdW1lIGZ1bmN0aW9uCisJYmwJY3B1X3N1c3BlbmQKIAogCUAgUHV0IHRoZSBwcm9jZXNzb3IgdG8gc2xlZXAKIAlAIChhbHNvIHdvcmthcm91bmQgZm9yIHNpZ2h0aW5nIDI4MDcxKQogCiAJQCBwcmVwYXJlIHZhbHVlIGZvciBzbGVlcCBtb2RlCi0JbW92CXIxLCByNQkJCQlAIHNsZWVwIG1vZGUKKwltb3YJcjEsIHI0CQkJCUAgc2xlZXAgbW9kZQogCiAJQCBwcmVwYXJlIHBvaW50ZXIgdG8gcGh5c2ljYWwgYWRkcmVzcyAwICh2aXJ0dWFsIG1hcHBpbmcgaW4gZ2VuZXJpYy5jKQogCW1vdglyMiwgI1VOQ0FDSEVEX1BIWVNfMApAQCAtMjE2LDIxICsxMDQsMTYgQEAKICAqIEZvcmNlcyBDUFUgaW50byBzbGVlcCBzdGF0ZS4KICAqCiAgKiByMCA9IHZhbHVlIGZvciBQV1JNT0RFIE0gZmllbGQgZm9yIGRlc2lyZWQgc2xlZXAgc3RhdGUKKyAqIHIxID0gdjpwIG9mZnNldAogICovCiAKIEVOVFJZKHB4YTI1eF9jcHVfc3VzcGVuZCkKIAlzdG1mZAlzcCEsIHtyMiAtIHIxMiwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi0KLQlibAlweGFfY3B1X3NhdmVfY3AKLQotCW1vdglyNSwgcjAJCQkJQCBzYXZlIHNsZWVwIG1vZGUKLQlibAlweGFfY3B1X3NhdmVfc3AKLQotCUAgY2xlYW4gZGF0YSBjYWNoZQotCWJsCXhzY2FsZV9mbHVzaF9rZXJuX2NhY2hlX2FsbAotCisJbW92CXI0LCByMAkJCQlAIHNhdmUgc2xlZXAgbW9kZQorCWxkcglyMywgPXB4YV9jcHVfcmVzdW1lCQlAIHJlc3VtZSBmdW5jdGlvbgorCWJsCWNwdV9zdXNwZW5kCiAJQCBwcmVwYXJlIHZhbHVlIGZvciBzbGVlcCBtb2RlCi0JbW92CXIxLCByNQkJCQlAIHNsZWVwIG1vZGUKKwltb3YJcjEsIHI0CQkJCUAgc2xlZXAgbW9kZQogCiAJQCBwcmVwYXJlIHBvaW50ZXIgdG8gcGh5c2ljYWwgYWRkcmVzcyAwICh2aXJ0dWFsIG1hcHBpbmcgaW4gZ2VuZXJpYy5jKQogCW1vdglyMiwgI1VOQ0FDSEVEX1BIWVNfMApAQCAtMzE3LDUzICsyMDAsOSBAQAogICogcHhhX2NwdV9yZXN1bWUoKQogICoKICAqIGVudHJ5IHBvaW50IGZyb20gYm9vdGxvYWRlciBpbnRvIGtlcm5lbCBkdXJpbmcgcmVzdW1lCi0gKgotICogTm90ZTogWWVzLCBwYXJ0IG9mIHRoZSBmb2xsb3dpbmcgY29kZSBpcyBsb2NhdGVkIGludG8gdGhlIC5kYXRhIHNlY3Rpb24uCi0gKiAgICAgICBUaGlzIGlzIHRvIGFsbG93IHNsZWVwX3NhdmVfc3AgdG8gYmUgYWNjZXNzZWQgd2l0aCBhIHJlbGF0aXZlIGxvYWQKLSAqICAgICAgIHdoaWxlIHdlIGNhbid0IHJlbHkgb24gYW55IE1NVSB0cmFuc2xhdGlvbi4gIFdlIGNvdWxkIGhhdmUgcHV0Ci0gKiAgICAgICBzbGVlcF9zYXZlX3NwIGluIHRoZSAudGV4dCBzZWN0aW9uIGFzIHdlbGwsIGJ1dCBzb21lIHNldHVwcyBtaWdodAotICogICAgICAgaW5zaXN0IG9uIGl0IHRvIGJlIHRydWx5IHJlYWQtb25seS4KICAqLwotCi0JLmRhdGEKIAkuYWxpZ24gNQotRU5UUlkocHhhX2NwdV9yZXN1bWUpCi0JbW92CXIwLCAjUFNSX0lfQklUIHwgUFNSX0ZfQklUIHwgU1ZDX01PREUJQCBzZXQgU1ZDLCBpcnFzIG9mZgotCW1zcgljcHNyX2MsIHIwCi0KLQlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJCUAgc3RhY2sgcGh5cyBhZGRyCi0JbGRyCXIyLCA9cmVzdW1lX2FmdGVyX21tdQkJQCBpdHMgYWJzb2x1dGUgdmlydHVhbCBhZGRyZXNzCi0JbGRtZmQJcjAsIHtyMyAtIHI5LCBzcH0JCUAgQ1AgcmVncyArIHZpcnQgc3RhY2sgcHRyCi0KLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMCAgIAlAIGludmFsaWRhdGUgSSAmIEQgVExCcwotCW1jcglwMTUsIDAsIHIxLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBjYWNoZXMsIEJUQgotCi0JbWNyCXAxNCwgMCwgcjMsIGM2LCBjMCwgMAkJQCBjbG9jayBjb25maWd1cmF0aW9uLCB0dXJibyBtb2RlLgotCW1jcglwMTUsIDAsIHI0LCBjMTUsIGMxLCAwCQlAIENQIGFjY2VzcyByZWcKLQltY3IJcDE1LCAwLCByNSwgYzEzLCBjMCwgMAkJQCBQSUQKLQltY3IgCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAkJQCBkb21haW4gSUQKLQltY3IgCXAxNSwgMCwgcjcsIGMyLCBjMCwgMAkJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIGFkZHIKLQltY3IJcDE1LCAwLCByOCwgYzEsIGMxLCAwICAgICAgICAgICBAIGF1eGlsaWFyeSBjb250cm9sIHJlZwotCWIJcmVzdW1lX3R1cm5fb25fbW11CQlAIGNhY2hlIGFsaWduIGV4ZWN1dGlvbgotCi0JLmFsaWduIDUKLXJlc3VtZV90dXJuX29uX21tdToKLQltY3IgCXAxNSwgMCwgcjksIGMxLCBjMCwgMAkJQCB0dXJuIG9uIE1NVSwgY2FjaGVzLCBldGMuCi0KLQlAIExldCB1cyBlbnN1cmUgd2UganVtcCB0byByZXN1bWVfYWZ0ZXJfbW11IG9ubHkgd2hlbiB0aGUgbWNyIGFib3ZlCi0JQCBhY3R1YWxseSB0b29rIGVmZmVjdC4gIFRoZXkgY2FsbCBpdCB0aGUgImNwd2FpdCIgb3BlcmF0aW9uLgotCW1yYwlwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgcXVldWUgYSBkZXBlbmRlbmN5IG9uIENQMTUKLQlzdWIJcGMsIHIyLCByMCwgbHNyICMzMgkJQCBqdW1wIHRvIHZpcnR1YWwgYWRkcgotCW5vcAotCW5vcAotCW5vcAotCi1zbGVlcF9zYXZlX3NwOgotCS53b3JkCTAJCQkJQCBwcmVzZXJ2ZSBzdGFjayBwaHlzIHB0ciBoZXJlCi0KLQkudGV4dAotcmVzdW1lX2FmdGVyX21tdToKK3B4YV9jcHVfcmVzdW1lOgogCWxkbWZkCXNwISwge3IyLCByM30KICNpZm5kZWYgQ09ORklHX0lXTU1YVAogCW1hcglhY2MwLCByMiwgcjMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EtYnQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EtYnQuYwppbmRleCBjMzFlNjAxLi5iOWIxZTVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLWJ0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS1idC5jCkBAIC04MSw4ICs4MSw2IEBACiAJCWdvdG8gZXJyX3Jma19hbGxvYzsKIAl9CiAKLQlyZmtpbGxfc2V0X2xlZF90cmlnZ2VyX25hbWUocmZrLCAidG9zYS1idCIpOwotCiAJcmMgPSByZmtpbGxfcmVnaXN0ZXIocmZrKTsKIAlpZiAocmMpCiAJCWdvdG8gZXJyX3Jma2lsbDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCBhZjE1MmU3Li5mMjU4MmVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC04NzUsNiArODc1LDExIEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhID0gJnNoYXJwc2xfcm9tX2RhdGEsCiB9OwogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB3bTk3MTJfZGV2aWNlID0geworCS5uYW1lCT0gIndtOTcxMi1jb2RlYyIsCisJLmlkCT0gLTEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnRvc2FzY29vcF9kZXZpY2UsCiAJJnRvc2FzY29vcF9qY19kZXZpY2UsCkBAIC04ODUsNiArODkwLDcgQEAKIAkmdG9zYWxlZF9kZXZpY2UsCiAJJnRvc2FfYnRfZGV2aWNlLAogCSZzaGFycHNsX3JvbV9kZXZpY2UsCisJJndtOTcxMl9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCB0b3NhX3Bvd2Vyb2ZmKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMKaW5kZXggZjRiMDUzYi4uYjkyYWEzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3pldXMuYwpAQCAtNjc2LDcgKzY3Niw3IEBACiBzdGF0aWMgdm9pZCB6ZXVzX3Bvd2VyX29mZih2b2lkKQogewogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JcHhhMjd4X2NwdV9zdXNwZW5kKFBXUk1PREVfREVFUFNMRUVQKTsKKwlweGEyN3hfY3B1X3N1c3BlbmQoUFdSTU9ERV9ERUVQU0xFRVAsIFBMQVRfUEhZU19PRkZTRVQgLSBQQUdFX09GRlNFVCk7CiB9CiAjZWxzZQogI2RlZmluZSB6ZXVzX3Bvd2VyX29mZiAgIE5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwppbmRleCBiNDU3NWFlLi43Y2ExMzhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCkBAIC0yLDUyICsyLDU2IEBACiAJZGVwZW5kcyBvbiBBUkNIX1JFQUxWSUVXCiAKIGNvbmZpZyBNQUNIX1JFQUxWSUVXX0VCCi0JYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9FQiBwbGF0Zm9ybSIKKwlib29sICJTdXBwb3J0IFJlYWxWaWV3KFIpIEVtdWxhdGlvbiBCYXNlYm9hcmQiCiAJc2VsZWN0IEFSTV9HSUMKIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgRW11bGF0aW9uIEJhc2Vib2FyZCBwbGF0Zm9ybS4KKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyhSKSBFbXVsYXRpb24gQmFzZWJvYXJkCisJICBwbGF0Zm9ybS4KIAogY29uZmlnIFJFQUxWSUVXX0VCX0E5TVAKLQlib29sICJTdXBwb3J0IE11bHRpY29yZSBDb3J0ZXgtQTkiCisJYm9vbCAiU3VwcG9ydCBNdWx0aWNvcmUgQ29ydGV4LUE5IFRpbGUiCiAJZGVwZW5kcyBvbiBNQUNIX1JFQUxWSUVXX0VCCiAJc2VsZWN0IENQVV9WNwogCWhlbHAKLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQ29ydGV4LUE5TVBDb3JlIHRpbGUgb24gdGhlIFJlYWx2aWV3IHBsYXRmb3JtLgorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBDb3J0ZXgtQTlNUENvcmUgdGlsZSBmaXR0ZWQgdG8gdGhlCisJICBSZWFsdmlldyhSKSBFbXVsYXRpb24gQmFzZWJvYXJkIHBsYXRmb3JtLgogCiBjb25maWcgUkVBTFZJRVdfRUJfQVJNMTFNUAotCWJvb2wgIlN1cHBvcnQgQVJNMTFNUENvcmUgdGlsZSIKKwlib29sICJTdXBwb3J0IEFSTTExTVBDb3JlIFRpbGUiCiAJZGVwZW5kcyBvbiBNQUNIX1JFQUxWSUVXX0VCCiAJc2VsZWN0IENQVV9WNgogCXNlbGVjdCBBUkNIX0hBU19CQVJSSUVSUyBpZiBTTVAKIAloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEFSTTExTVBDb3JlIHRpbGUgb24gdGhlIFJlYWx2aWV3IHBsYXRmb3JtLgorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBBUk0xMU1QQ29yZSB0aWxlIGZpdHRlZCB0byB0aGUgUmVhbHZpZXcoUikKKwkgIEVtdWxhdGlvbiBCYXNlYm9hcmQgcGxhdGZvcm0uCiAKIGNvbmZpZyBSRUFMVklFV19FQl9BUk0xMU1QX1JFVkIKLQlib29sICJTdXBwb3J0IEFSTTExTVBDb3JlIFJldkIgdGlsZSIKKwlib29sICJTdXBwb3J0IEFSTTExTVBDb3JlIFJldkIgVGlsZSIKIAlkZXBlbmRzIG9uIFJFQUxWSUVXX0VCX0FSTTExTVAKIAloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEFSTTExTVBDb3JlIFJldkIgdGlsZSBvbiB0aGUgUmVhbHZpZXcKLQkgIHBsYXRmb3JtLiBTaW5jZSB0aGVyZSBhcmUgZGV2aWNlIGFkZHJlc3MgZGlmZmVyZW5jZXMsIGEKLQkgIGtlcm5lbCBidWlsdCB3aXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQgaXMgbm90IGNvbXBhdGlibGUgd2l0aAotCSAgb3RoZXIgcmV2aXNpb25zIG9mIHRoZSBBUk0xMU1QQ29yZSB0aWxlLgorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBBUk0xMU1QQ29yZSBSZXZpc2lvbiBCIHRpbGUgb24gdGhlCisJICBSZWFsdmlldyhSKSBFbXVsYXRpb24gQmFzZWJvYXJkIHBsYXRmb3JtLiBTaW5jZSB0aGVyZSBhcmUgZGV2aWNlCisJICBhZGRyZXNzIGRpZmZlcmVuY2VzLCBhIGtlcm5lbCBidWlsdCB3aXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQgaXMKKwkgIG5vdCBjb21wYXRpYmxlIHdpdGggb3RoZXIgcmV2aXNpb25zIG9mIHRoZSBBUk0xMU1QQ29yZSB0aWxlLgogCiBjb25maWcgTUFDSF9SRUFMVklFV19QQjExTVAKLQlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCMTFNUENvcmUgcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yIEFSTTExTVBDb3JlIgogCXNlbGVjdCBDUFVfVjYKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KIAlzZWxlY3QgQVJDSF9IQVNfQkFSUklFUlMgaWYgU01QCiAJaGVscAotCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3IE1QQ29yZSBQbGF0Zm9ybSBCYXNlYm9hcmQuCi0JICBQQjExTVBDb3JlIGlzIGEgcGxhdGZvcm0gd2l0aCBhbiBvbi1ib2FyZCBBUk0xMU1QQ29yZSBhbmQgaGFzCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkIGZvcgorCSAgdGhlIEFSTTExTVBDb3JlLiAgVGhpcyBwbGF0Zm9ybSBoYXMgYW4gb24tYm9hcmQgQVJNMTFNUENvcmUgYW5kIGhhcwogCSAgc3VwcG9ydCBmb3IgUENJLUUgYW5kIENvbXBhY3QgRmxhc2guCiAKIGNvbmZpZyBNQUNIX1JFQUxWSUVXX1BCMTE3NgotCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcvUEIxMTc2IHBsYXRmb3JtIgorCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkIGZvciBBUk0xMTc2SlpGLVMiCiAJc2VsZWN0IENQVV9WNgogCXNlbGVjdCBBUk1fR0lDCiAJaGVscAotCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3IEFSTTExNzYgUGxhdGZvcm0gQmFzZWJvYXJkLgorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3KFIpIFBsYXRmb3JtIEJhc2Vib2FyZCBmb3IKKwkgIEFSTTExNzZKWkYtUy4KIAogY29uZmlnIFJFQUxWSUVXX1BCMTE3Nl9TRUNVUkVfRkxBU0gKIAlib29sICJBbGxvdyBhY2Nlc3MgdG8gdGhlIHNlY3VyZSBmbGFzaCBtZW1vcnkgYmxvY2siCkBAIC01OSwyMyArNjMsMjQgQEAKIAkgIGJsb2NrICg2NE1CIEAgMHgzYzAwMDAwMCkgaXMgcmVxdWlyZWQuCiAKIGNvbmZpZyBNQUNIX1JFQUxWSUVXX1BCQTgKLQlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCLUE4IHBsYXRmb3JtIgorCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkIGZvciBDb3J0ZXgodG0pLUE4IHBsYXRmb3JtIgogCXNlbGVjdCBDUFVfVjcKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgQ29ydGV4LUE4IFBsYXRmb3JtIEJhc2Vib2FyZC4KLQkgIFBCLUE4IGlzIGEgcGxhdGZvcm0gd2l0aCBhbiBvbi1ib2FyZCBDb3J0ZXgtQTggYW5kIGhhcyBzdXBwb3J0IGZvcgotCSAgUENJLUUgYW5kIENvbXBhY3QgRmxhc2guCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgUGxhdGZvcm0gQmFzZWJvYXJkIGZvcgorCSAgQ29ydGV4KHRtKS1BOC4gIFRoaXMgcGxhdGZvcm0gaGFzIGFuIG9uLWJvYXJkIENvcnRleC1BOCBhbmQgaGFzCisJICBzdXBwb3J0IGZvciBQQ0ktRSBhbmQgQ29tcGFjdCBGbGFzaC4KIAogY29uZmlnIE1BQ0hfUkVBTFZJRVdfUEJYCi0JYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9QQlggcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgRXhwbG9yZSIKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFIGlmIENQVV9WNyAmJiAhUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAogCXNlbGVjdCBaT05FX0RNQSBpZiBTUEFSU0VNRU0KIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgUEJYIHBsYXRmb3JtLgorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3KFIpIFBsYXRmb3JtIEJhc2Vib2FyZAorCSAgRXhwbG9yZS4KIAogY29uZmlnIFJFQUxWSUVXX0hJR0hfUEhZU19PRkZTRVQKIAlib29sICJIaWdoIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBmb3IgdGhlIFJlYWxWaWV3IHBsYXRmb3JtIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwppbmRleCBhMjJiZjY3Li42OTU5ZDEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwpAQCAtNDEsNyArNDEsNyBAQAogICogb2JzZXJ2ZXJzLCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciB0aGV5J3JlIHRha2luZyBwYXJ0IGluIGNvaGVyZW5jeQogICogb3Igbm90LiAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBob3RwbHVnIGNvZGUgdG8gd29yayByZWxpYWJseS4KICAqLwotc3RhdGljIHZvaWQgd3JpdGVfcGVuX3JlbGVhc2UoaW50IHZhbCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCB3cml0ZV9wZW5fcmVsZWFzZShpbnQgdmFsKQogewogCXBlbl9yZWxlYXNlID0gdmFsOwogCXNtcF93bWIoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKaW5kZXggYTBjYjI1OC4uNTA4MjVhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKQEAgLTk5LDYgKzk5LDcgQEAKIAlzZWxlY3QgUE9XRVJfU1VQUExZCiAJc2VsZWN0IE1BQ0hfTkVPMTk3MwogCXNlbGVjdCBTM0MyNDEwX1BXTQorCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCiAJaGVscAogCSAgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgT3Blbm1va28gR1RBMDIgLyBGcmVlcnVubmVyIEdTTSBQaG9uZQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvaW5jbHVkZS9tYWNoL2d0YTAyLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvaW5jbHVkZS9tYWNoL2d0YTAyLmgKaW5kZXggOTUzMzMxZC4uM2E1NmEyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2luY2x1ZGUvbWFjaC9ndGEwMi5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pbmNsdWRlL21hY2gvZ3RhMDIuaApAQCAtNDQsMTkgKzQ0LDE5IEBACiAjZGVmaW5lIEdUQTAydjNfR1BJT19uVVNCX0ZMVAlTM0MyNDEwX0dQRygxMCkJLyogdjMgKyB2NCBvbmx5ICovCiAjZGVmaW5lIEdUQTAydjNfR1BJT19uR1NNX09DCVMzQzI0MTBfR1BHKDExKQkvKiB2MyArIHY0IG9ubHkgKi8KIAotI2RlZmluZSBHVEEwMl9HUElPX0FNUF9TSFVUCVMzQzI0NDBfR1BKMQkvKiB2MiArIHYzICsgdjQgb25seSAqLwotI2RlZmluZSBHVEEwMnYxX0dQSU9fV0xBTl9HUElPMTAJUzNDMjQ0MF9HUEoyCi0jZGVmaW5lIEdUQTAyX0dQSU9fSFBfSU4JUzNDMjQ0MF9HUEoyCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCi0jZGVmaW5lIEdUQTAyX0dQSU9fSU5UMAkJUzNDMjQ0MF9HUEozCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCi0jZGVmaW5lIEdUQTAyX0dQSU9fbkdTTV9FTglTM0MyNDQwX0dQSjQKLSNkZWZpbmUgR1RBMDJfR1BJT18zRF9SRVNFVAlTM0MyNDQwX0dQSjUKLSNkZWZpbmUgR1RBMDJfR1BJT19uRExfR1NNCVMzQzI0NDBfR1BKNgkvKiB2NCArIHY1IG9ubHkgKi8KLSNkZWZpbmUgR1RBMDJfR1BJT19XTEFOX0dQSU8wCVMzQzI0NDBfR1BKNwotI2RlZmluZSBHVEEwMnYxX0dQSU9fQkFUX0lECVMzQzI0NDBfR1BKOAotI2RlZmluZSBHVEEwMl9HUElPX0tFRVBBQ1QJUzNDMjQ0MF9HUEo4Ci0jZGVmaW5lIEdUQTAydjFfR1BJT19IUF9JTglTM0MyNDQwX0dQSjEwCi0jZGVmaW5lIEdUQTAyX0NISVBfUFdECQlTM0MyNDQwX0dQSjExCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCi0jZGVmaW5lIEdUQTAyX0dQSU9fbldMQU5fUkVTRVQJUzNDMjQ0MF9HUEoxMgkvKiB2MiArIHYzICsgdjQgb25seSAqLworI2RlZmluZSBHVEEwMl9HUElPX0FNUF9TSFVUCVMzQzI0MTBfR1BKKDEpCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCisjZGVmaW5lIEdUQTAydjFfR1BJT19XTEFOX0dQSU8xMAlTM0MyNDEwX0dQSigyKQorI2RlZmluZSBHVEEwMl9HUElPX0hQX0lOCVMzQzI0MTBfR1BKKDIpCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCisjZGVmaW5lIEdUQTAyX0dQSU9fSU5UMAkJUzNDMjQxMF9HUEooMykJLyogdjIgKyB2MyArIHY0IG9ubHkgKi8KKyNkZWZpbmUgR1RBMDJfR1BJT19uR1NNX0VOCVMzQzI0MTBfR1BKKDQpCisjZGVmaW5lIEdUQTAyX0dQSU9fM0RfUkVTRVQJUzNDMjQxMF9HUEooNSkKKyNkZWZpbmUgR1RBMDJfR1BJT19uRExfR1NNCVMzQzI0MTBfR1BKKDYpCS8qIHY0ICsgdjUgb25seSAqLworI2RlZmluZSBHVEEwMl9HUElPX1dMQU5fR1BJTzAJUzNDMjQxMF9HUEooNykKKyNkZWZpbmUgR1RBMDJ2MV9HUElPX0JBVF9JRAlTM0MyNDEwX0dQSig4KQorI2RlZmluZSBHVEEwMl9HUElPX0tFRVBBQ1QJUzNDMjQxMF9HUEooOCkKKyNkZWZpbmUgR1RBMDJ2MV9HUElPX0hQX0lOCVMzQzI0MTBfR1BKKDEwKQorI2RlZmluZSBHVEEwMl9DSElQX1BXRAkJUzNDMjQxMF9HUEooMTEpCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCisjZGVmaW5lIEdUQTAyX0dQSU9fbldMQU5fUkVTRVQJUzNDMjQxMF9HUEooMTIpCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCiAKICNkZWZpbmUgR1RBMDJfSVJRX0dTRU5TT1JfMQlJUlFfRUlOVDAKICNkZWZpbmUgR1RBMDJfSVJRX01PREVNCQlJUlFfRUlOVDEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKaW5kZXggZGQzNzgyMC4uZmRmYzRkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKQEAgLTE1MSw2ICsxNTEsMTIgQEAKIAkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKIAkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfSUlDLAogCX0sIHsKKwkJLm5hbWUJCT0gImkyYyIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0M2NDEwX0NMS0NPTl9QQ0xLX0kyQzEsCisJfSwgewogCQkubmFtZQkJPSAiaWlzIiwKIAkJLmlkCQk9IDAsCiAJCS5wYXJlbnQJCT0gJmNsa19wLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2RtYS5jCmluZGV4IDEzNWRiMWIuLmMzNTU4NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZG1hLmMKQEAgLTY5MCwxMiArNjkwLDEyIEBACiAKIAlyZWdwdHIgPSByZWdzICsgUEwwODBfQ3hfQkFTRSgwKTsKIAotCWZvciAoY2ggPSAwOyBjaCA8IDg7IGNoKyssIGNobm8rKywgY2hwdHIrKykgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJpbmcgRE1BICVkICglcClcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgY2hubywgcmVncHRyKTsKKwlmb3IgKGNoID0gMDsgY2ggPCA4OyBjaCsrLCBjaHB0cisrKSB7CisJCXByX2RlYnVnKCIlczogcmVnaXN0ZXJpbmcgRE1BICVkICglcClcbiIsCisJCQkgX19mdW5jX18sIGNobm8gKyBjaCwgcmVncHRyKTsKIAogCQljaHB0ci0+Yml0ID0gMSA8PCBjaDsKLQkJY2hwdHItPm51bWJlciA9IGNobm87CisJCWNocHRyLT5udW1iZXIgPSBjaG5vICsgY2g7CiAJCWNocHRyLT5kbWFjID0gZG1hYzsKIAkJY2hwdHItPnJlZ3MgPSByZWdwdHI7CiAJCXJlZ3B0ciArPSBQTDA4MF9DeF9TVFJJREU7CkBAIC03MDQsNyArNzA0LDggQEAKIAkvKiBmb3IgdGhlIG1vbWVudCwgcGVybWFuZW50bHkgZW5hYmxlIHRoZSBjb250cm9sbGVyICovCiAJd3JpdGVsKFBMMDgwX0NPTkZJR19FTkFCTEUsIHJlZ3MgKyBQTDA4MF9DT05GSUcpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUEwwODA6IElSUSAlZCwgYXQgJXBcbiIsIGlycSwgcmVncyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiUEwwODA6IElSUSAlZCwgYXQgJXAsIGNoYW5uZWxzICVkLi4lZFxuIiwKKwkgICAgICAgaXJxLCByZWdzLCBjaG5vLCBjaG5vKzgpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9ncGlvbGliLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZ3Bpb2xpYi5jCmluZGV4IGZkOTlhODIuLjkyYjA5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9ncGlvbGliLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2dwaW9saWIuYwpAQCAtNzIsNyArNzIsNyBAQAogCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfdXBkb3duLAogfTsKIAotaW50IHMzYzY0eHhfZ3BpbzJpbnRfZ3BtKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbikKK3N0YXRpYyBpbnQgczNjNjR4eF9ncGlvMmludF9ncG0oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluKQogewogCXJldHVybiBwaW4gPCA1ID8gSVJRX0VJTlQoMjMpICsgcGluIDogLUVOWElPOwogfQpAQCAtMTM4LDcgKzEzOCw3IEBACiAJfSwKIH07CiAKLWludCBzM2M2NHh4X2dwaW8yaW50X2dwbChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBwaW4pCitzdGF0aWMgaW50IHMzYzY0eHhfZ3BpbzJpbnRfZ3BsKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbikKIHsKIAlyZXR1cm4gcGluID49IDggPyBJUlFfRUlOVCgxNikgKyBwaW4gLSA4IDogLUVOWElPOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLXNtZGs2NDEwLmMKaW5kZXggZTg1MTkyYS4uYTgwYTMxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWRrNjQxMC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9maXhlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAKICNpZmRlZiBDT05GSUdfU01ESzY0MTBfV00xMTkwX0VWMQogI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvY29yZS5oPgpAQCAtMzUxLDcgKzM1Miw3IEBACiAvKiBWRERfVUhfTU1DLCBMRE81IG9uIEo1ICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc21kazY0MTBfdmRkdWhfbW1jID0gewogCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9VSC9QVkREX01NQyIsCisJCS5uYW1lID0gIlBWRERfVUgrUFZERF9NTUMiLAogCQkuYWx3YXlzX29uID0gMSwKIAl9LAogfTsKQEAgLTQxNyw3ICs0MTgsNyBAQAogLyogUzNDNjR4eCBpbnRlcm5hbCBsb2dpYyAmIFBMTCAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtODM1MF9kY2RjMV9kYXRhID0gewogCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9JTlQvUFZERF9QTEwiLAorCQkubmFtZSA9ICJQVkREX0lOVCtQVkREX1BMTCIsCiAJCS5taW5fdVYgPSAxMjAwMDAwLAogCQkubWF4X3VWID0gMTIwMDAwMCwKIAkJLmFsd2F5c19vbiA9IDEsCkBAIC00NTIsNyArNDUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtODM1MF9kY2RjNF9kYXRhID0gewogCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9ISS9QVkREX0VYVC9QVkREX1NZUy9QVkNDTTJNVFYiLAorCQkubmFtZSA9ICJQVkREX0hJK1BWRERfRVhUK1BWRERfU1lTK1BWQ0NNMk1UViIsCiAJCS5taW5fdVYgPSAzMDAwMDAwLAogCQkubWF4X3VWID0gMzAwMDAwMCwKIAkJLmFsd2F5c19vbiA9IDEsCkBAIC00NjQsNyArNDY1LDcgQEAKIC8qIE9UR2kvMTE5MC1FVjEgSFBWREQgJiBBVkREICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgd204MzUwX2xkbzRfZGF0YSA9IHsKIAkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlBWRERfT1RHSS9IUFZERC9BVkREIiwKKwkJLm5hbWUgPSAiUFZERF9PVEdJK0hQVkREK0FWREQiLAogCQkubWluX3VWID0gMTIwMDAwMCwKIAkJLm1heF91ViA9IDEyMDAwMDAsCiAJCS5hcHBseV91ViA9IDEsCkBAIC01NTIsNyArNTUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtMTE5Ml9kY2RjMyA9IHsKIAkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlBWRERfTUVNL1BWRERfR1BTIiwKKwkJLm5hbWUgPSAiUFZERF9NRU0rUFZERF9HUFMiLAogCQkuYWx3YXlzX29uID0gMSwKIAl9LAogfTsKQEAgLTU2Myw3ICs1NjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgd20xMTkyX2xkbzEgPSB7CiAJLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJQVkREX0xDRC9QVkREX0VYVCIsCisJCS5uYW1lID0gIlBWRERfTENEK1BWRERfRVhUIiwKIAkJLmFsd2F5c19vbiA9IDEsCiAJfSwKIAkuY29uc3VtZXJfc3VwcGxpZXMgPSB3bTExOTJfbGRvMV9jb25zdW1lcnMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAta2V5cGFkLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAta2V5cGFkLmMKaW5kZXggZjhlZDBkMi4uMWQ0ZDBlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWtleXBhZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1rZXlwYWQuYwpAQCAtMTcsNyArMTcsNyBAQAogdm9pZCBzYW1zdW5nX2tleXBhZF9jZmdfZ3Bpbyh1bnNpZ25lZCBpbnQgcm93cywgdW5zaWduZWQgaW50IGNvbHMpCiB7CiAJLyogU2V0IGFsbCB0aGUgbmVjZXNzYXJ5IEdQSyBwaW5zIHRvIHNwZWNpYWwtZnVuY3Rpb24gMzogS1BfUk9XW3hdICovCi0JczNjX2dwaW9fY2ZncmFuZ2Vfbm9wdWxsKFMzQzY0WFhfR1BLKDgpLCA4ICsgcm93cywgUzNDX0dQSU9fU0ZOKDMpKTsKKwlzM2NfZ3Bpb19jZmdyYW5nZV9ub3B1bGwoUzNDNjRYWF9HUEsoOCksIHJvd3MsIFMzQ19HUElPX1NGTigzKSk7CiAKIAkvKiBTZXQgYWxsIHRoZSBuZWNlc3NhcnkgR1BMIHBpbnMgdG8gc3BlY2lhbC1mdW5jdGlvbiAzOiBLUF9DT0xbeF0gKi8KIAlzM2NfZ3Bpb19jZmdyYW5nZV9ub3B1bGwoUzNDNjRYWF9HUEwoMCksIGNvbHMsIFMzQ19HUElPX1NGTigzKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtc2RoY2kuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1zZGhjaS5jCmluZGV4IDFhOTQyMDMuLmYzNDRhMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1zZGhjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1zZGhjaS5jCkBAIC01Niw3ICs1Niw3IEBACiAJZWxzZQogCQljdHJsMyA9IChTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwxIHwgUzNDX1NESENJX0NUUkwzX0ZDU0VMMCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogQ1RSTCAyPSUwOHgsIDM9JTA4eFxuIiwgX19mdW5jX18sIGN0cmwyLCBjdHJsMyk7CisJcHJfZGVidWcoIiVzOiBDVFJMIDI9JTA4eCwgMz0lMDh4XG4iLCBfX2Z1bmNfXywgY3RybDIsIGN0cmwzKTsKIAl3cml0ZWwoY3RybDIsIHIgKyBTM0NfU0RIQ0lfQ09OVFJPTDIpOwogCXdyaXRlbChjdHJsMywgciArIFMzQ19TREhDSV9DT05UUk9MMyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zbGVlcC5TCmluZGV4IGIyZWY0NDMuLmFmZTVhNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zbGVlcC5TCkBAIC0zMiwyNSArMzIsMTMgQEAKIAkgKiBjb2RlIGFmdGVyIHJlc3VtZS4KIAkgKgogCSAqIGVudHJ5OgotCSAqCXIwID0gcG9pbnRlciB0byB0aGUgc2F2ZSBibG9jaworCSAqCXIxID0gdjpwIG9mZnNldAogCSovCiAKIEVOVFJZKHMzY19jcHVfc2F2ZSkKIAlzdG1mZAlzcCEsIHsgcjQgLSByMTIsIGxyIH0KLQotCW1yYwlwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgRkNTRS9QSUQKLQltcmMJcDE1LCAwLCByNSwgYzMsIGMwLCAwCUAgRG9tYWluIElECi0JbXJjCXAxNSwgMCwgcjYsIGMyLCBjMCwgMAlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UwCi0JbXJjCXAxNSwgMCwgcjcsIGMyLCBjMCwgMQlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UxCi0JbXJjCXAxNSwgMCwgcjgsIGMyLCBjMCwgMglAIFRyYW5zbGF0aW9uIFRhYmxlIENvbnRyb2wKLQltcmMJcDE1LCAwLCByOSwgYzEsIGMwLCAwCUAgQ29udHJvbCByZWdpc3RlcgotCW1yYwlwMTUsIDAsIHIxMCwgYzEsIGMwLCAxCUAgQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKLQltcmMJcDE1LCAwLCByMTEsIGMxLCBjMCwgMglAIENvLXByb2Nlc3NvciBhY2Nlc3MgY29udHJvbHMKLQotCXN0bWlhCXIwLCB7IHI0IC0gcjEzIH0JQCBTYXZlIENQIHJlZ2lzdGVycyBhbmQgU1AKLQotCUBAIHNhdmUgb3VyIHN0YXRlIHRvIHJhbQotCWJsCXMzY19wbV9jYl9mbHVzaGNhY2hlCisJbGRyCXIzLCA9cmVzdW1lX3dpdGhfbW11CisJYmwJY3B1X3N1c3BlbmQKIAogCUBAIGNhbGwgZmluYWwgc3VzcGVuZCBjb2RlCiAJbGRyCXIwLCA9cG1fY3B1X3NsZWVwCkBAIC02MSwxOCArNDksNiBAQAogcmVzdW1lX3dpdGhfbW11OgogCWxkbWZkCXNwISwgeyByNCAtIHIxMiwgcGMgfQlAIHJldHVybiwgZnJvbSBzcCBmcm9tIHMzY19jcHVfc2F2ZQogCi0JLmRhdGEKLQotCS8qIHRoZSBuZXh0IGJpdCBpcyBjb2RlLCBidXQgaXQgcmVxdWlyZXMgZWFzeSBhY2Nlc3MgdG8gdGhlCi0JICogczNjX3NsZWVwX3NhdmVfcGh5cyBkYXRhIGJlZm9yZSB0aGUgTU1VIGlzIHN3aXRjaGVkIG9uLCBzbwotCSAqIHdlIHN0b3JlIHRoZSBjb2RlIHRoYXQgbmVlZHMgdGhpcyB2YXJpYWJsZSBpbiB0aGUgLmRhdGEgd2hlcmUKLQkgKiB0aGUgdmFsdWUgY2FuIGJlIHdyaXR0ZW4gdG8gKHRoZSAudGV4dCBzZWdtZW50IGlzIFJPKS4KLQkqLwotCi0JLmdsb2JhbAlzM2Nfc2xlZXBfc2F2ZV9waHlzCi1zM2Nfc2xlZXBfc2F2ZV9waHlzOgotCS53b3JkCTAKLQogCS8qIFNsZWVwIG1hZ2ljLCB0aGUgd29yZCBiZWZvcmUgdGhlIHJlc3VtZSBlbnRyeSBwb2ludCBzbyB0aGF0IHRoZQogCSAqIGJvb3Rsb2FkZXIgY2FuIGNoZWNrIGZvciBhIHJlc3VtZWFibGUgaW1hZ2UuICovCiAKQEAgLTExMCwzNSArODYsNCBAQAogCW9ycglyMCwgcjAsICMxIDw8IDE1CQkJQCBHUE4xNQogCXN0cglyMCwgWyByMywgI1MzQzY0WFhfR1BOREFUIF0KICNlbmRpZgotCi0JLyogX192Nl9zZXR1cCBmcm9tIGFyY2gvYXJtL21tL3Byb2MtdjYuUywgZW5zdXJlIHRoYXQgdGhlIGNhY2hlcwotCSAqIGFyZSB0aG9yb3VnaGx5IGNsZWFuZWQganVzdCBpbiBjYXNlIHRoZSBib290bG9hZGVyIGRpZG4ndCBkbyBpdAotCSAqIGZvciB1cy4gKi8KLQltb3YJcjAsICMwCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDAJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGNhY2hlCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKLQltY3IJcDE1LCAwLCByMCwgYzcsIGMxNSwgMAkJQCBjbGVhbitpbnZhbGlkYXRlIGNhY2hlCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCi0JQEBtY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSArIEQgVExCcwotCUBAbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkJQCBJbnZhbGlkYXRlIEkgKyBEIGNhY2hlcwotCi0JbGRyCXIwLCBzM2Nfc2xlZXBfc2F2ZV9waHlzCi0JbGRtaWEJcjAsIHsgcjQgLSByMTMgfQotCi0JbWNyCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBGQ1NFL1BJRAotCW1jcglwMTUsIDAsIHI1LCBjMywgYzAsIDAJQCBEb21haW4gSUQKLQltY3IJcDE1LCAwLCByNiwgYzIsIGMwLCAwCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTAKLQltY3IJcDE1LCAwLCByNywgYzIsIGMwLCAxCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTEKLQltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAyCUAgVHJhbnNsYXRpb24gVGFibGUgQ29udHJvbAotCW1jcglwMTUsIDAsIHIxMCwgYzEsIGMwLCAxCUAgQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKLQotCW1vdglyMCwgIzAJCQlAIHJlc3RvcmUgY29wcm8gYWNjZXNzIGNvbnRyb2xzCi0JbWNyCXAxNSwgMCwgcjExLCBjMSwgYzAsIDIJQCBDby1wcm9jZXNzb3IgYWNjZXNzIGNvbnRyb2xzCi0JbWNyIAlwMTUsIDAsIHIwLCBjNywgYzUsIDQKLQotCWxkcglyMiwgPXJlc3VtZV93aXRoX21tdQotCW1jcglwMTUsIDAsIHI5LCBjMSwgYzAsIDAJCS8qIHR1cm4gbW11IGJhY2sgb24gKi8KLQlub3AKLQltb3YJcGMsIHIyCQkJCS8qIGp1bXAgYmFjayAqLwotCi0JLmVuZAorCWIJY3B1X3Jlc3VtZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggMjAzZGQ1YS4uMDU4ZGFiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0xLDYgKzEsNiBAQAogLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaAogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLwogICoKICAqIFM1UDY0NDIgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCkBAIC0xNiw1NiArMTYsNjEgQEAKICNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+CiAjaW5jbHVkZSA8cGxhdC9tYXAtczVwLmg+CiAKLSNkZWZpbmUgUzVQNjQ0Ml9QQV9DSElQSUQJKDB4RTAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9DSElQSUQJCVM1UDY0NDJfUEFfQ0hJUElECisjZGVmaW5lIFM1UDY0NDJfUEFfU0RSQU0JMHgyMDAwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfU1lTQ09OCSgweEUwMTAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVA2NDQyX1BBX1NZU0NPTgorI2RlZmluZSBTNVA2NDQyX1BBX0kyUzAJCTB4QzBCMDAwMDAKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9JMlMxCQkweEYyMjAwMDAwCiAKLSNkZWZpbmUgUzVQNjQ0Ml9QQV9HUElPCQkoMHhFMDIwMDAwMCkKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9DSElQSUQJMHhFMDAwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfVklDMAkJKDB4RTQwMDAwMDApCi0jZGVmaW5lIFM1UDY0NDJfUEFfVklDMQkJKDB4RTQxMDAwMDApCi0jZGVmaW5lIFM1UDY0NDJfUEFfVklDMgkJKDB4RTQyMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfU1lTQ09OCTB4RTAxMDAwMDAKIAotI2RlZmluZSBTNVA2NDQyX1BBX1NST01DCSgweEU3MDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1JPTUMJCVM1UDY0NDJfUEFfU1JPTUMKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9HUElPCQkweEUwMjAwMDAwCisKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9WSUMwCQkweEU0MDAwMDAwCisjZGVmaW5lIFM1UDY0NDJfUEFfVklDMQkJMHhFNDEwMDAwMAorI2RlZmluZSBTNVA2NDQyX1BBX1ZJQzIJCTB4RTQyMDAwMDAKKworI2RlZmluZSBTNVA2NDQyX1BBX1NST01DCTB4RTcwMDAwMDAKIAogI2RlZmluZSBTNVA2NDQyX1BBX01ETUEJCTB4RTgwMDAwMDAKICNkZWZpbmUgUzVQNjQ0Ml9QQV9QRE1BCQkweEU5MDAwMDAwCiAKLSNkZWZpbmUgUzVQNjQ0Ml9QQV9USU1FUgkoMHhFQTAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1RJTUVSCQlTNVA2NDQyX1BBX1RJTUVSCisjZGVmaW5lIFM1UDY0NDJfUEFfVElNRVIJMHhFQTAwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfU1lTVElNRVIgICAJKDB4RUExMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfU1lTVElNRVIJMHhFQTEwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfV0FUQ0hET0cJKDB4RUEyMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfV0FUQ0hET0cJMHhFQTIwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfVUFSVAkJKDB4RUMwMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfVUFSVAkJMHhFQzAwMDAwMAogCi0jZGVmaW5lIFM1UF9QQV9VQVJUMAkJKFM1UDY0NDJfUEFfVUFSVCArIDB4MCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQxCQkoUzVQNjQ0Ml9QQV9VQVJUICsgMHg0MDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMgkJKFM1UDY0NDJfUEFfVUFSVCArIDB4ODAwKQotI2RlZmluZSBTNVBfU1pfVUFSVAkJU1pfMjU2Ci0KLSNkZWZpbmUgUzVQNjQ0Ml9QQV9JSUMwCQkoMHhFQzEwMDAwMCkKLQotI2RlZmluZSBTNVA2NDQyX1BBX1NEUkFNCSgweDIwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU0RSQU0JCVM1UDY0NDJfUEFfU0RSQU0KKyNkZWZpbmUgUzVQNjQ0Ml9QQV9JSUMwCQkweEVDMTAwMDAwCiAKICNkZWZpbmUgUzVQNjQ0Ml9QQV9TUEkJCTB4RUMzMDAwMDAKIAotLyogSTJTICovCi0jZGVmaW5lIFM1UDY0NDJfUEFfSTJTMAkJMHhDMEIwMDAwMAotI2RlZmluZSBTNVA2NDQyX1BBX0kyUzEJCTB4RjIyMDAwMDAKLQotLyogUENNICovCiAjZGVmaW5lIFM1UDY0NDJfUEFfUENNMAkJMHhGMjQwMDAwMAogI2RlZmluZSBTNVA2NDQyX1BBX1BDTTEJCTB4RjI1MDAwMDAKIAotLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLwotI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NDQyX1BBX1dBVENIRE9HCi0jZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVA2NDQyX1BBX1VBUlQKKy8qIENvbXBhdGliaWx0aXkgRGVmaW5lcyAqLworCiAjZGVmaW5lIFMzQ19QQV9JSUMJCVM1UDY0NDJfUEFfSUlDMAorI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NDQyX1BBX1dBVENIRE9HCisKKyNkZWZpbmUgUzVQX1BBX0NISVBJRAkJUzVQNjQ0Ml9QQV9DSElQSUQKKyNkZWZpbmUgUzVQX1BBX1NEUkFNCQlTNVA2NDQyX1BBX1NEUkFNCisjZGVmaW5lIFM1UF9QQV9TUk9NQwkJUzVQNjQ0Ml9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVA2NDQyX1BBX1NZU0NPTgorI2RlZmluZSBTNVBfUEFfVElNRVIJCVM1UDY0NDJfUEFfVElNRVIKKworLyogVUFSVCAqLworCisjZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVA2NDQyX1BBX1VBUlQKKworI2RlZmluZSBTNVBfUEFfVUFSVCh4KQkJKFMzQ19QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UF9QQV9VQVJUMAkJUzVQX1BBX1VBUlQoMCkKKyNkZWZpbmUgUzVQX1BBX1VBUlQxCQlTNVBfUEFfVUFSVCgxKQorI2RlZmluZSBTNVBfUEFfVUFSVDIJCVM1UF9QQV9VQVJUKDIpCisKKyNkZWZpbmUgUzVQX1NaX1VBUlQJCVNaXzI1NgogCiAjZW5kaWYgLyogX19BU01fQVJDSF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCA1NDg2YzhmLi5hZGI1ZjI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBTNVA2NDQwX0dQSU9fQV9OUgkoNikKICNkZWZpbmUgUzVQNjQ0MF9HUElPX0JfTlIJKDcpCiAjZGVmaW5lIFM1UDY0NDBfR1BJT19DX05SCSg4KQotI2RlZmluZSBTNVA2NDQwX0dQSU9fRl9OUgkoMikKKyNkZWZpbmUgUzVQNjQ0MF9HUElPX0ZfTlIJKDE2KQogI2RlZmluZSBTNVA2NDQwX0dQSU9fR19OUgkoNykKICNkZWZpbmUgUzVQNjQ0MF9HUElPX0hfTlIJKDEwKQogI2RlZmluZSBTNVA2NDQwX0dQSU9fSV9OUgkoMTYpCkBAIC0zNiw3ICszNiw3IEBACiAjZGVmaW5lIFM1UDY0NTBfR1BJT19CX05SCSg3KQogI2RlZmluZSBTNVA2NDUwX0dQSU9fQ19OUgkoOCkKICNkZWZpbmUgUzVQNjQ1MF9HUElPX0RfTlIJKDgpCi0jZGVmaW5lIFM1UDY0NTBfR1BJT19GX05SCSgyKQorI2RlZmluZSBTNVA2NDUwX0dQSU9fRl9OUgkoMTYpCiAjZGVmaW5lIFM1UDY0NTBfR1BJT19HX05SCSgxNCkKICNkZWZpbmUgUzVQNjQ1MF9HUElPX0hfTlIJKDEwKQogI2RlZmluZSBTNVA2NDUwX0dQSU9fSV9OUgkoMTYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2luY2x1ZGUvbWFjaC9tYXAuaAppbmRleCBhOTM2NWU1Li45NWM5MTI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjR4MC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTEsNiArMSw2IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL21hcC5oCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQogICoKICAqIFM1UDY0WDAgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCkBAIC0xNiwzMCArMTYsNjMgQEAKICNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+CiAjaW5jbHVkZSA8cGxhdC9tYXAtczVwLmg+CiAKLSNkZWZpbmUgUzVQNjRYMF9QQV9TRFJBTQkoMHgyMDAwMDAwMCkKKyNkZWZpbmUgUzVQNjRYMF9QQV9TRFJBTQkweDIwMDAwMDAwCiAKLSNkZWZpbmUgUzVQNjRYMF9QQV9DSElQSUQJKDB4RTAwMDAwMDApCisjZGVmaW5lIFM1UDY0WDBfUEFfQ0hJUElECTB4RTAwMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX1NZU0NPTgkweEUwMTAwMDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9HUElPCQkweEUwMzA4MDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9WSUMwCQkweEU0MDAwMDAwCisjZGVmaW5lIFM1UDY0WDBfUEFfVklDMQkJMHhFNDEwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfU1JPTUMJMHhFNzAwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfUERNQQkJMHhFOTAwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfVElNRVIJMHhFQTAwMDAwMAorI2RlZmluZSBTNVA2NFgwX1BBX1JUQwkJMHhFQTEwMDAwMAorI2RlZmluZSBTNVA2NFgwX1BBX1dEVAkJMHhFQTIwMDAwMAorCisjZGVmaW5lIFM1UDY0NDBfUEFfSUlDMAkJMHhFQzEwNDAwMAorI2RlZmluZSBTNVA2NDQwX1BBX0lJQzEJCTB4RUMyMEYwMDAKKyNkZWZpbmUgUzVQNjQ1MF9QQV9JSUMwCQkweEVDMTAwMDAwCisjZGVmaW5lIFM1UDY0NTBfUEFfSUlDMQkJMHhFQzIwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfU1BJMAkJMHhFQzQwMDAwMAorI2RlZmluZSBTNVA2NFgwX1BBX1NQSTEJCTB4RUM1MDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX0hTT1RHCTB4RUQxMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX0hTTU1DKHgpCSgweEVEODAwMDAwICsgKCh4KSAqIDB4MTAwMDAwKSkKKworI2RlZmluZSBTNVA2NFgwX1BBX0kyUwkJMHhGMjAwMDAwMAorI2RlZmluZSBTNVA2NDUwX1BBX0kyUzEJCTB4RjI4MDAwMDAKKyNkZWZpbmUgUzVQNjQ1MF9QQV9JMlMyCQkweEYyOTAwMDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9QQ00JCTB4RjIxMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX0FEQwkJMHhGMzAwMDAwMAorCisvKiBDb21wYXRpYmlsdGl5IERlZmluZXMgKi8KKworI2RlZmluZSBTM0NfUEFfSFNNTUMwCQlTNVA2NFgwX1BBX0hTTU1DKDApCisjZGVmaW5lIFMzQ19QQV9IU01NQzEJCVM1UDY0WDBfUEFfSFNNTUMoMSkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJUzVQNjRYMF9QQV9IU01NQygyKQorI2RlZmluZSBTM0NfUEFfSUlDCQlTNVA2NDQwX1BBX0lJQzAKKyNkZWZpbmUgUzNDX1BBX0lJQzEJCVM1UDY0NDBfUEFfSUlDMQorI2RlZmluZSBTM0NfUEFfUlRDCQlTNVA2NFgwX1BBX1JUQworI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NFgwX1BBX1dEVAorCiAjZGVmaW5lIFM1UF9QQV9DSElQSUQJCVM1UDY0WDBfUEFfQ0hJUElECi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9TWVNDT04JKDB4RTAxMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9TWVNDT04JCVM1UDY0WDBfUEFfU1lTQ09OCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9HUElPCQkoMHhFMDMwODAwMCkKLQotI2RlZmluZSBTNVA2NFgwX1BBX1ZJQzAJCSgweEU0MDAwMDAwKQotI2RlZmluZSBTNVA2NFgwX1BBX1ZJQzEJCSgweEU0MTAwMDAwKQotCi0jZGVmaW5lIFM1UDY0WDBfUEFfU1JPTUMJKDB4RTcwMDAwMDApCiAjZGVmaW5lIFM1UF9QQV9TUk9NQwkJUzVQNjRYMF9QQV9TUk9NQwotCi0jZGVmaW5lIFM1UDY0WDBfUEFfUERNQQkJKDB4RTkwMDAwMDApCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9USU1FUgkoMHhFQTAwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX1NZU0NPTgkJUzVQNjRYMF9QQV9TWVNDT04KICNkZWZpbmUgUzVQX1BBX1RJTUVSCQlTNVA2NFgwX1BBX1RJTUVSCiAKLSNkZWZpbmUgUzVQNjRYMF9QQV9SVEMJCSgweEVBMTAwMDAwKQorI2RlZmluZSBTQU1TVU5HX1BBX0FEQwkJUzVQNjRYMF9QQV9BREMKIAotI2RlZmluZSBTNVA2NFgwX1BBX1dEVAkJKDB4RUEyMDAwMDApCisvKiBVQVJUICovCiAKICNkZWZpbmUgUzVQNjQ0MF9QQV9VQVJUKHgpCSgweEVDMDAwMDAwICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCiAjZGVmaW5lIFM1UDY0NTBfUEFfVUFSVCh4KQkoKHggPCA1KSA/ICgweEVDODAwMDAwICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpIDogKDB4RUMwMDAwMDApKQpAQCAtNTMsMzYgKzg2LDQgQEAKIAogI2RlZmluZSBTNVBfU1pfVUFSVAkJU1pfMjU2CiAKLSNkZWZpbmUgUzVQNjQ0MF9QQV9JSUMwCQkoMHhFQzEwNDAwMCkKLSNkZWZpbmUgUzVQNjQ0MF9QQV9JSUMxCQkoMHhFQzIwRjAwMCkKLSNkZWZpbmUgUzVQNjQ1MF9QQV9JSUMwCQkoMHhFQzEwMDAwMCkKLSNkZWZpbmUgUzVQNjQ1MF9QQV9JSUMxCQkoMHhFQzIwMDAwMCkKLQotI2RlZmluZSBTNVA2NFgwX1BBX1NQSTAJCSgweEVDNDAwMDAwKQotI2RlZmluZSBTNVA2NFgwX1BBX1NQSTEJCSgweEVDNTAwMDAwKQotCi0jZGVmaW5lIFM1UDY0WDBfUEFfSFNPVEcJKDB4RUQxMDAwMDApCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9IU01NQyh4KQkoMHhFRDgwMDAwMCArICgoeCkgKiAweDEwMDAwMCkpCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9JMlMJCSgweEYyMDAwMDAwKQotI2RlZmluZSBTNVA2NDUwX1BBX0kyUzEJCTB4RjI4MDAwMDAKLSNkZWZpbmUgUzVQNjQ1MF9QQV9JMlMyCQkweEYyOTAwMDAwCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9QQ00JCSgweEYyMTAwMDAwKQotCi0jZGVmaW5lIFM1UDY0WDBfUEFfQURDCQkoMHhGMzAwMDAwMCkKLQotLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLwotCi0jZGVmaW5lIFMzQ19QQV9IU01NQzAJCVM1UDY0WDBfUEFfSFNNTUMoMCkKLSNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJUzVQNjRYMF9QQV9IU01NQygxKQotI2RlZmluZSBTM0NfUEFfSFNNTUMyCQlTNVA2NFgwX1BBX0hTTU1DKDIpCi0jZGVmaW5lIFMzQ19QQV9JSUMJCVM1UDY0NDBfUEFfSUlDMAotI2RlZmluZSBTM0NfUEFfSUlDMQkJUzVQNjQ0MF9QQV9JSUMxCi0jZGVmaW5lIFMzQ19QQV9SVEMJCVM1UDY0WDBfUEFfUlRDCi0jZGVmaW5lIFMzQ19QQV9XRFQJCVM1UDY0WDBfUEFfV0RUCi0KLSNkZWZpbmUgU0FNU1VOR19QQV9BREMJCVM1UDY0WDBfUEFfQURDCi0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9tYXAuaAppbmRleCAzMjg0NjdiLi5jY2JlNmI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTEsNSArMSw4IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oCiAgKgorICogQ29weXJpZ2h0IChjKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCiAgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgogICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgogICoKQEAgLTE2LDE0NSArMTksMTE1IEBACiAjaW5jbHVkZSA8cGxhdC9tYXAtYmFzZS5oPgogI2luY2x1ZGUgPHBsYXQvbWFwLXM1cC5oPgogCi0vKgotICogbWFwLWJhc2UuaCBoYXMgYWxyZWFkeSBkZWZpbmVkIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKLSAqIFMzQ19WQV9JUlEJCVMzQ19BRERSKDB4MDAwMDAwMDApCWlycSBjb250cm9sbGVyKHMpCi0gKiBTM0NfVkFfU1lTCQlTM0NfQUREUigweDAwMTAwMDAwKQlzeXN0ZW0gY29udHJvbAotICogUzNDX1ZBX01FTQkJUzNDX0FERFIoMHgwMDIwMDAwMCkJc3lzdGVtIGNvbnRyb2wgKG5vdCB1c2VkKQotICogUzNDX1ZBX1RJTUVSCQlTM0NfQUREUigweDAwMzAwMDAwKQl0aW1lciBibG9jawotICogUzNDX1ZBX1dBVENIRE9HCVMzQ19BRERSKDB4MDA0MDAwMDApCXdhdGNoZG9nCi0gKiBTM0NfVkFfVUFSVAkJUzNDX0FERFIoMHgwMTAwMDAwMCkJVUFSVAotICoKLSAqIFM1UEMxMDAgc3BlY2lmaWMgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBjYW4gYmUgZGVmaW5lZCBoZXJlCi0gKiBTNVBDMVhYX1ZBX0dQSU8JUzNDX0FERFIoMHgwMDUwMDAwMCkJR1BJTwotICoKLSAqLworI2RlZmluZSBTNVBDMTAwX1BBX1NEUkFNCQkweDIwMDAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9PTkVOQU5EX0JVRgkoMHhCMDAwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9TWl9PTkVOQU5EX0JVRgkoU1pfMjU2TSAtIFNaXzMyTSkKKyNkZWZpbmUgUzVQQzEwMF9QQV9PTkVOQU5ECQkweEU3MTAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfT05FTkFORF9CVUYJCTB4QjAwMDAwMDAKIAotLyogQ2hpcCBJRCAqLworI2RlZmluZSBTNVBDMTAwX1BBX0NISVBJRAkJMHhFMDAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfQ0hJUElECSgweEUwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfQ0hJUElECQlTNVBDMTAwX1BBX0NISVBJRAorI2RlZmluZSBTNVBDMTAwX1BBX1NZU0NPTgkJMHhFMDEwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfU1lTQ09OCSgweEUwMTAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVBDMTAwX1BBX1NZU0NPTgorI2RlZmluZSBTNVBDMTAwX1BBX09USEVSUwkJMHhFMDIwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfT1RIRVJTCSgweEUwMjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1ZBX09USEVSUwkoUzNDX1ZBX1NZUyArIDB4MTAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfR1BJTwkJCTB4RTAzMDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX0dQSU8JCSgweEUwMzAwMDAwKQotI2RlZmluZSBTNVBDMVhYX1ZBX0dQSU8JCVMzQ19BRERSKDB4MDA1MDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfVklDMAkJCTB4RTQwMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9WSUMxCQkJMHhFNDEwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzIJCQkweEU0MjAwMDAwCiAKLS8qIEludGVycnVwdCAqLwotI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzAJCSgweEU0MDAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzEJCSgweEU0MTAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzIJCSgweEU0MjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1ZBX1ZJQwkJUzNDX1ZBX0lSUQotI2RlZmluZSBTNVBDMTAwX1ZBX1ZJQ19PRkZTRVQJMHgxMDAwMAotI2RlZmluZSBTNVBDMVhYX1ZBX1ZJQyh4KQkoUzVQQzEwMF9WQV9WSUMgKyAoKHgpICogUzVQQzEwMF9WQV9WSUNfT0ZGU0VUKSkKKyNkZWZpbmUgUzVQQzEwMF9QQV9TUk9NQwkJMHhFNzAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfU1JPTUMJKDB4RTcwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9TUk9NQwkJUzVQQzEwMF9QQV9TUk9NQworI2RlZmluZSBTNVBDMTAwX1BBX0NGQ09OCQkweEU3ODAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9PTkVOQU5ECSgweEU3MTAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX01ETUEJCQkweEU4MTAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfUERNQTAJCTB4RTkwMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9QRE1BMQkJMHhFOTIwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfQ0ZDT04JKDB4RTc4MDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfVElNRVIJCTB4RUEwMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9TWVNUSU1FUgkJMHhFQTEwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1dBVENIRE9HCQkweEVBMjAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfUlRDCQkJMHhFQTMwMDAwMAogCi0vKiBETUEgKi8KLSNkZWZpbmUgUzVQQzEwMF9QQV9NRE1BCQkoMHhFODEwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9QRE1BMAkoMHhFOTAwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9QRE1BMQkoMHhFOTIwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9VQVJUCQkJMHhFQzAwMDAwMAogCi0vKiBUaW1lciAqLwotI2RlZmluZSBTNVBDMTAwX1BBX1RJTUVSCSgweEVBMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfVElNRVIJCVM1UEMxMDBfUEFfVElNRVIKKyNkZWZpbmUgUzVQQzEwMF9QQV9JSUMwCQkJMHhFQzEwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0lJQzEJCQkweEVDMjAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9TWVNUSU1FUgkoMHhFQTEwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9TUEkwCQkJMHhFQzMwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1NQSTEJCQkweEVDNDAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfU1BJMgkJCTB4RUM1MDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX1dBVENIRE9HCSgweEVBMjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX1JUQwkJKDB4RUEzMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfVVNCX0hTT1RHCQkweEVEMjAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfVVNCX0hTUEhZCQkweEVEMzAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9VQVJUCQkoMHhFQzAwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9IU01NQyh4KQkJKDB4RUQ4MDAwMDAgKyAoKHgpICogMHgxMDAwMDApKQogCi0jZGVmaW5lIFM1UF9QQV9VQVJUMAkJKFM1UEMxMDBfUEFfVUFSVCArIDB4MCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQxCQkoUzVQQzEwMF9QQV9VQVJUICsgMHg0MDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMgkJKFM1UEMxMDBfUEFfVUFSVCArIDB4ODAwKQotI2RlZmluZSBTNVBfUEFfVUFSVDMJCShTNVBDMTAwX1BBX1VBUlQgKyAweEMwMCkKLSNkZWZpbmUgUzVQX1NaX1VBUlQJCVNaXzI1NgorI2RlZmluZSBTNVBDMTAwX1BBX0ZCCQkJMHhFRTAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfSUlDMAkJKDB4RUMxMDAwMDApCi0jZGVmaW5lIFM1UEMxMDBfUEFfSUlDMQkJKDB4RUMyMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfRklNQzAJCTB4RUUyMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9GSU1DMQkJMHhFRTMwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMyCQkweEVFNDAwMDAwCiAKLS8qIFNQSSAqLwotI2RlZmluZSBTNVBDMTAwX1BBX1NQSTAJCTB4RUMzMDAwMDAKLSNkZWZpbmUgUzVQQzEwMF9QQV9TUEkxCQkweEVDNDAwMDAwCi0jZGVmaW5lIFM1UEMxMDBfUEFfU1BJMgkJMHhFQzUwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0kyUzAJCQkweEYyMDAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfSTJTMQkJCTB4RjIxMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9JMlMyCQkJMHhGMjIwMDAwMAogCi0vKiBVU0IgSFMgT1RHICovCi0jZGVmaW5lIFM1UEMxMDBfUEFfVVNCX0hTT1RHCSgweEVEMjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX1VTQl9IU1BIWQkoMHhFRDMwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9BQzk3CQkJMHhGMjMwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfRkIJCSgweEVFMDAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX1BDTTAJCQkweEYyNDAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfUENNMQkJCTB4RjI1MDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMwCSgweEVFMjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMxCSgweEVFMzAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMyCSgweEVFNDAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX1NQRElGCQkweEYyNjAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9JMlMwCQkoMHhGMjAwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9JMlMxCQkoMHhGMjEwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9JMlMyCQkoMHhGMjIwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9UU0FEQwkJMHhGMzAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfQUM5NwkJMHhGMjMwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0tFWVBBRAkJMHhGMzEwMDAwMAogCi0vKiBQQ00gKi8KLSNkZWZpbmUgUzVQQzEwMF9QQV9QQ00wCQkweEYyNDAwMDAwCi0jZGVmaW5lIFM1UEMxMDBfUEFfUENNMQkJMHhGMjUwMDAwMAorLyogQ29tcGF0aWJpbHRpeSBEZWZpbmVzICovCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9TUERJRgkweEYyNjAwMDAwCisjZGVmaW5lIFMzQ19QQV9GQgkJCVM1UEMxMDBfUEFfRkIKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMAkJCVM1UEMxMDBfUEFfSFNNTUMoMCkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJCVM1UEMxMDBfUEFfSFNNTUMoMSkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJCVM1UEMxMDBfUEFfSFNNTUMoMikKKyNkZWZpbmUgUzNDX1BBX0lJQwkJCVM1UEMxMDBfUEFfSUlDMAorI2RlZmluZSBTM0NfUEFfSUlDMQkJCVM1UEMxMDBfUEFfSUlDMQorI2RlZmluZSBTM0NfUEFfS0VZUEFECQkJUzVQQzEwMF9QQV9LRVlQQUQKKyNkZWZpbmUgUzNDX1BBX09ORU5BTkQJCQlTNVBDMTAwX1BBX09ORU5BTkQKKyNkZWZpbmUgUzNDX1BBX09ORU5BTkRfQlVGCQlTNVBDMTAwX1BBX09ORU5BTkRfQlVGCisjZGVmaW5lIFMzQ19QQV9SVEMJCQlTNVBDMTAwX1BBX1JUQworI2RlZmluZSBTM0NfUEFfVFNBREMJCQlTNVBDMTAwX1BBX1RTQURDCisjZGVmaW5lIFMzQ19QQV9VU0JfSFNPVEcJCVM1UEMxMDBfUEFfVVNCX0hTT1RHCisjZGVmaW5lIFMzQ19QQV9VU0JfSFNQSFkJCVM1UEMxMDBfUEFfVVNCX0hTUEhZCisjZGVmaW5lIFMzQ19QQV9XRFQJCQlTNVBDMTAwX1BBX1dBVENIRE9HCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9UU0FEQwkoMHhGMzAwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX0NISVBJRAkJCVM1UEMxMDBfUEFfQ0hJUElECisjZGVmaW5lIFM1UF9QQV9GSU1DMAkJCVM1UEMxMDBfUEFfRklNQzAKKyNkZWZpbmUgUzVQX1BBX0ZJTUMxCQkJUzVQQzEwMF9QQV9GSU1DMQorI2RlZmluZSBTNVBfUEFfRklNQzIJCQlTNVBDMTAwX1BBX0ZJTUMyCisjZGVmaW5lIFM1UF9QQV9TRFJBTQkJCVM1UEMxMDBfUEFfU0RSQU0KKyNkZWZpbmUgUzVQX1BBX1NST01DCQkJUzVQQzEwMF9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQQzEwMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQX1BBX1RJTUVSCQkJUzVQQzEwMF9QQV9USU1FUgogCi0vKiBLRVlQQUQgKi8KLSNkZWZpbmUgUzVQQzEwMF9QQV9LRVlQQUQJKDB4RjMxMDAwMDApCisjZGVmaW5lIFNBTVNVTkdfUEFfQURDCQkJUzVQQzEwMF9QQV9UU0FEQworI2RlZmluZSBTQU1TVU5HX1BBX0NGQ09OCQlTNVBDMTAwX1BBX0NGQ09OCisjZGVmaW5lIFNBTVNVTkdfUEFfS0VZUEFECQlTNVBDMTAwX1BBX0tFWVBBRAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfSFNNTUMoeCkJKDB4RUQ4MDAwMDAgKyAoKHgpICogMHgxMDAwMDApKQorI2RlZmluZSBTNVBDMTAwX1ZBX09USEVSUwkJKFMzQ19WQV9TWVMgKyAweDEwMDAwKQogCi0jZGVmaW5lIFM1UEMxMDBfUEFfU0RSQU0JKDB4MjAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9TRFJBTQkJUzVQQzEwMF9QQV9TRFJBTQorI2RlZmluZSBTM0NfU1pfT05FTkFORF9CVUYJCShTWl8yNTZNIC0gU1pfMzJNKQogCi0vKiBjb21wYXRpYmlsdGl5IGRlZmluZXMuICovCi0jZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVBDMTAwX1BBX1VBUlQKLSNkZWZpbmUgUzNDX1BBX0lJQwkJUzVQQzEwMF9QQV9JSUMwCi0jZGVmaW5lIFMzQ19QQV9JSUMxCQlTNVBDMTAwX1BBX0lJQzEKLSNkZWZpbmUgUzNDX1BBX0ZCCQlTNVBDMTAwX1BBX0ZCCi0jZGVmaW5lIFMzQ19QQV9HMkQJCVM1UEMxMDBfUEFfRzJECi0jZGVmaW5lIFMzQ19QQV9HM0QJCVM1UEMxMDBfUEFfRzNECi0jZGVmaW5lIFMzQ19QQV9KUEVHCQlTNVBDMTAwX1BBX0pQRUcKLSNkZWZpbmUgUzNDX1BBX1JPVEFUT1IJCVM1UEMxMDBfUEFfUk9UQVRPUgotI2RlZmluZSBTNVBfVkFfVklDMAkJUzVQQzFYWF9WQV9WSUMoMCkKLSNkZWZpbmUgUzVQX1ZBX1ZJQzEJCVM1UEMxWFhfVkFfVklDKDEpCi0jZGVmaW5lIFM1UF9WQV9WSUMyCQlTNVBDMVhYX1ZBX1ZJQygyKQotI2RlZmluZSBTM0NfUEFfVVNCX0hTT1RHCVM1UEMxMDBfUEFfVVNCX0hTT1RHCi0jZGVmaW5lIFMzQ19QQV9VU0JfSFNQSFkJUzVQQzEwMF9QQV9VU0JfSFNQSFkKLSNkZWZpbmUgUzNDX1BBX0hTTU1DMAkJUzVQQzEwMF9QQV9IU01NQygwKQotI2RlZmluZSBTM0NfUEFfSFNNTUMxCQlTNVBDMTAwX1BBX0hTTU1DKDEpCi0jZGVmaW5lIFMzQ19QQV9IU01NQzIJCVM1UEMxMDBfUEFfSFNNTUMoMikKLSNkZWZpbmUgUzNDX1BBX0tFWVBBRAkJUzVQQzEwMF9QQV9LRVlQQUQKLSNkZWZpbmUgUzNDX1BBX1dEVAkJUzVQQzEwMF9QQV9XQVRDSERPRwotI2RlZmluZSBTM0NfUEFfVFNBREMJCVM1UEMxMDBfUEFfVFNBREMKLSNkZWZpbmUgUzNDX1BBX09ORU5BTkQJCVM1UEMxMDBfUEFfT05FTkFORAotI2RlZmluZSBTM0NfUEFfT05FTkFORF9CVUYJUzVQQzEwMF9QQV9PTkVOQU5EX0JVRgotI2RlZmluZSBTM0NfU1pfT05FTkFORF9CVUYJUzVQQzEwMF9TWl9PTkVOQU5EX0JVRgotI2RlZmluZSBTM0NfUEFfUlRDCQlTNVBDMTAwX1BBX1JUQworLyogVUFSVCAqLwogCi0jZGVmaW5lIFNBTVNVTkdfUEFfQURDCQlTNVBDMTAwX1BBX1RTQURDCi0jZGVmaW5lIFNBTVNVTkdfUEFfQ0ZDT04JUzVQQzEwMF9QQV9DRkNPTgotI2RlZmluZSBTQU1TVU5HX1BBX0tFWVBBRAlTNVBDMTAwX1BBX0tFWVBBRAorI2RlZmluZSBTM0NfUEFfVUFSVAkJCVM1UEMxMDBfUEFfVUFSVAogCi0jZGVmaW5lIFM1UF9QQV9GSU1DMAkJUzVQQzEwMF9QQV9GSU1DMAotI2RlZmluZSBTNVBfUEFfRklNQzEJCVM1UEMxMDBfUEFfRklNQzEKLSNkZWZpbmUgUzVQX1BBX0ZJTUMyCQlTNVBDMTAwX1BBX0ZJTUMyCisjZGVmaW5lIFM1UF9QQV9VQVJUKHgpCQkJKFMzQ19QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UF9QQV9VQVJUMAkJCVM1UF9QQV9VQVJUKDApCisjZGVmaW5lIFM1UF9QQV9VQVJUMQkJCVM1UF9QQV9VQVJUKDEpCisjZGVmaW5lIFM1UF9QQV9VQVJUMgkJCVM1UF9QQV9VQVJUKDIpCisjZGVmaW5lIFM1UF9QQV9VQVJUMwkJCVM1UF9QQV9VQVJUKDMpCiAKLSNlbmRpZiAvKiBfX0FTTV9BUkNIX0MxMDBfTUFQX0ggKi8KKyNkZWZpbmUgUzVQX1NaX1VBUlQJCQlTWl8yNTYKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDM2MTE0OTIuLjFkZDU4ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KICAqCiAgKiBTNVBWMjEwIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucwpAQCAtMTYsMTIyICsxNiwxMjAgQEAKICNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+CiAjaW5jbHVkZSA8cGxhdC9tYXAtczVwLmg+CiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9TUk9NX0JBTks1CSgweEE4MDAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX1NEUkFNCQkweDIwMDAwMDAwCiAKLSNkZWZpbmUgUzVQQzExMF9QQV9PTkVOQU5ECSgweEIwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfT05FTkFORAkJUzVQQzExMF9QQV9PTkVOQU5ECisjZGVmaW5lIFM1UFYyMTBfUEFfU1JPTV9CQU5LNQkJMHhBODAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMTBfUEFfT05FTkFORF9ETUEJKDB4QjA2MDAwMDApCi0jZGVmaW5lIFM1UF9QQV9PTkVOQU5EX0RNQQlTNVBDMTEwX1BBX09ORU5BTkRfRE1BCisjZGVmaW5lIFM1UEMxMTBfUEFfT05FTkFORAkJMHhCMDAwMDAwMAorI2RlZmluZSBTNVBDMTEwX1BBX09ORU5BTkRfRE1BCQkweEIwNjAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9DSElQSUQJKDB4RTAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9DSElQSUQJCVM1UFYyMTBfUEFfQ0hJUElECisjZGVmaW5lIFM1UFYyMTBfUEFfQ0hJUElECQkweEUwMDAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9TWVNDT04JKDB4RTAxMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9TWVNDT04JCVM1UFYyMTBfUEFfU1lTQ09OCisjZGVmaW5lIFM1UFYyMTBfUEFfU1lTQ09OCQkweEUwMTAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9HUElPCQkoMHhFMDIwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9HUElPCQkJMHhFMDIwMDAwMAogCi0vKiBTUEkgKi8KLSNkZWZpbmUgUzVQVjIxMF9QQV9TUEkwCQkweEUxMzAwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfU1BJMQkJMHhFMTQwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1NQRElGCQkweEUxMTAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9LRVlQQUQJKDB4RTE2MDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfU1BJMAkJCTB4RTEzMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9TUEkxCQkJMHhFMTQwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlDMAkJKDB4RTE4MDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlDMQkJKDB4RkFCMDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlDMgkJKDB4RTFBMDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfS0VZUEFECQkweEUxNjAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9USU1FUgkoMHhFMjUwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1RJTUVSCQlTNVBWMjEwX1BBX1RJTUVSCisjZGVmaW5lIFM1UFYyMTBfUEFfQURDCQkJMHhFMTcwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfU1lTVElNRVIJKDB4RTI2MDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfSUlDMAkJCTB4RTE4MDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9JSUMxCQkJMHhGQUIwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0lJQzIJCQkweEUxQTAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9XQVRDSERPRwkoMHhFMjcwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9BQzk3CQkJMHhFMjIwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfUlRDCQkoMHhFMjgwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9VQVJUCQkoMHhFMjkwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9QQ00wCQkJMHhFMjMwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1BDTTEJCQkweEUxMjAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfUENNMgkJCTB4RTJCMDAwMDAKIAotI2RlZmluZSBTNVBfUEFfVUFSVDAJCShTNVBWMjEwX1BBX1VBUlQgKyAweDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMQkJKFM1UFYyMTBfUEFfVUFSVCArIDB4NDAwKQotI2RlZmluZSBTNVBfUEFfVUFSVDIJCShTNVBWMjEwX1BBX1VBUlQgKyAweDgwMCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQzCQkoUzVQVjIxMF9QQV9VQVJUICsgMHhDMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfVElNRVIJCTB4RTI1MDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9TWVNUSU1FUgkJMHhFMjYwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1dBVENIRE9HCQkweEUyNzAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfUlRDCQkJMHhFMjgwMDAwMAogCi0jZGVmaW5lIFM1UF9TWl9VQVJUCQlTWl8yNTYKKyNkZWZpbmUgUzVQVjIxMF9QQV9VQVJUCQkJMHhFMjkwMDAwMAogCi0jZGVmaW5lIFMzQ19WQV9VQVJUeCh4KQkJKFMzQ19WQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UFYyMTBfUEFfU1JPTUMJCTB4RTgwMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX1NST01DCSgweEU4MDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1JPTUMJCVM1UFYyMTBfUEFfU1JPTUMKKyNkZWZpbmUgUzVQVjIxMF9QQV9DRkNPTgkJMHhFODIwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfQ0ZDT04JKDB4RTgyMDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfSFNNTUMoeCkJCSgweEVCMDAwMDAwICsgKCh4KSAqIDB4MTAwMDAwKSkKIAotI2RlZmluZSBTNVBWMjEwX1BBX01ETUEJCTB4RkEyMDAwMDAKLSNkZWZpbmUgUzVQVjIxMF9QQV9QRE1BMAkweEUwOTAwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfUERNQTEJMHhFMEEwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0hTT1RHCQkweEVDMDAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfSFNQSFkJCTB4RUMxMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX0ZCCQkoMHhGODAwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9JSVMwCQkJMHhFRUUzMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0lJUzEJCQkweEUyMTAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfSUlTMgkJCTB4RTJBMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMwCSgweEZCMjAwMDAwKQotI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMxCSgweEZCMzAwMDAwKQotI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMyCSgweEZCNDAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX0RNQzAJCQkweEYwMDAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfRE1DMQkJCTB4RjE0MDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX0hTTU1DKHgpCSgweEVCMDAwMDAwICsgKCh4KSAqIDB4MTAwMDAwKSkKKyNkZWZpbmUgUzVQVjIxMF9QQV9WSUMwCQkJMHhGMjAwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1ZJQzEJCQkweEYyMTAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfVklDMgkJCTB4RjIyMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9WSUMzCQkJMHhGMjMwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfSFNPVEcJKDB4RUMwMDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfSFNQSFkJKDB4RUMxMDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfRkIJCQkweEY4MDAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9WSUMwCQkoMHhGMjAwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9WSUMxCQkoMHhGMjEwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9WSUMyCQkoMHhGMjIwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9WSUMzCQkoMHhGMjMwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9NRE1BCQkJMHhGQTIwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1BETUEwCQkweEUwOTAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfUERNQTEJCTB4RTBBMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX1NEUkFNCSgweDIwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU0RSQU0JCVM1UFYyMTBfUEFfU0RSQU0KKyNkZWZpbmUgUzVQVjIxMF9QQV9NSVBJX0NTSVMJCTB4RkE2MDAwMDAKIAotLyogUy9QRElGICovCi0jZGVmaW5lIFM1UFYyMTBfUEFfU1BESUYJMHhFMTEwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMwCQkweEZCMjAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfRklNQzEJCTB4RkIzMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9GSU1DMgkJMHhGQjQwMDAwMAogCi0vKiBJMlMgKi8KLSNkZWZpbmUgUzVQVjIxMF9QQV9JSVMwCQkweEVFRTMwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlTMQkJMHhFMjEwMDAwMAotI2RlZmluZSBTNVBWMjEwX1BBX0lJUzIJCTB4RTJBMDAwMDAKKy8qIENvbXBhdGliaWx0aXkgRGVmaW5lcyAqLwogCi0vKiBQQ00gKi8KLSNkZWZpbmUgUzVQVjIxMF9QQV9QQ00wCQkweEUyMzAwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfUENNMQkJMHhFMTIwMDAwMAotI2RlZmluZSBTNVBWMjEwX1BBX1BDTTIJCTB4RTJCMDAwMDAKKyNkZWZpbmUgUzNDX1BBX0ZCCQkJUzVQVjIxMF9QQV9GQgorI2RlZmluZSBTM0NfUEFfSFNNTUMwCQkJUzVQVjIxMF9QQV9IU01NQygwKQorI2RlZmluZSBTM0NfUEFfSFNNTUMxCQkJUzVQVjIxMF9QQV9IU01NQygxKQorI2RlZmluZSBTM0NfUEFfSFNNTUMyCQkJUzVQVjIxMF9QQV9IU01NQygyKQorI2RlZmluZSBTM0NfUEFfSFNNTUMzCQkJUzVQVjIxMF9QQV9IU01NQygzKQorI2RlZmluZSBTM0NfUEFfSUlDCQkJUzVQVjIxMF9QQV9JSUMwCisjZGVmaW5lIFMzQ19QQV9JSUMxCQkJUzVQVjIxMF9QQV9JSUMxCisjZGVmaW5lIFMzQ19QQV9JSUMyCQkJUzVQVjIxMF9QQV9JSUMyCisjZGVmaW5lIFMzQ19QQV9SVEMJCQlTNVBWMjEwX1BBX1JUQworI2RlZmluZSBTM0NfUEFfVVNCX0hTT1RHCQlTNVBWMjEwX1BBX0hTT1RHCisjZGVmaW5lIFMzQ19QQV9XRFQJCQlTNVBWMjEwX1BBX1dBVENIRE9HCiAKLS8qIEFDOTcgKi8KLSNkZWZpbmUgUzVQVjIxMF9QQV9BQzk3CQkweEUyMjAwMDAwCisjZGVmaW5lIFM1UF9QQV9DSElQSUQJCQlTNVBWMjEwX1BBX0NISVBJRAorI2RlZmluZSBTNVBfUEFfRklNQzAJCQlTNVBWMjEwX1BBX0ZJTUMwCisjZGVmaW5lIFM1UF9QQV9GSU1DMQkJCVM1UFYyMTBfUEFfRklNQzEKKyNkZWZpbmUgUzVQX1BBX0ZJTUMyCQkJUzVQVjIxMF9QQV9GSU1DMgorI2RlZmluZSBTNVBfUEFfTUlQSV9DU0lTMAkJUzVQVjIxMF9QQV9NSVBJX0NTSVMKKyNkZWZpbmUgUzVQX1BBX09ORU5BTkQJCQlTNVBDMTEwX1BBX09ORU5BTkQKKyNkZWZpbmUgUzVQX1BBX09ORU5BTkRfRE1BCQlTNVBDMTEwX1BBX09ORU5BTkRfRE1BCisjZGVmaW5lIFM1UF9QQV9TRFJBTQkJCVM1UFYyMTBfUEFfU0RSQU0KKyNkZWZpbmUgUzVQX1BBX1NST01DCQkJUzVQVjIxMF9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQVjIxMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQX1BBX1RJTUVSCQkJUzVQVjIxMF9QQV9USU1FUgogCi0jZGVmaW5lIFM1UFYyMTBfUEFfQURDCQkoMHhFMTcwMDAwMCkKKyNkZWZpbmUgU0FNU1VOR19QQV9BREMJCQlTNVBWMjEwX1BBX0FEQworI2RlZmluZSBTQU1TVU5HX1BBX0NGQ09OCQlTNVBWMjEwX1BBX0NGQ09OCisjZGVmaW5lIFNBTVNVTkdfUEFfS0VZUEFECQlTNVBWMjEwX1BBX0tFWVBBRAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfRE1DMAkJKDB4RjAwMDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfRE1DMQkJKDB4RjE0MDAwMDApCisvKiBVQVJUICovCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9NSVBJX0NTSVMJMHhGQTYwMDAwMAorI2RlZmluZSBTM0NfVkFfVUFSVHgoeCkJCQkoUzNDX1ZBX1VBUlQgKyAoKHgpICogUzNDX1VBUlRfT0ZGU0VUKSkKIAotLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLwotI2RlZmluZSBTM0NfUEFfVUFSVAkJUzVQVjIxMF9QQV9VQVJUCi0jZGVmaW5lIFMzQ19QQV9IU01NQzAJCVM1UFYyMTBfUEFfSFNNTUMoMCkKLSNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJUzVQVjIxMF9QQV9IU01NQygxKQotI2RlZmluZSBTM0NfUEFfSFNNTUMyCQlTNVBWMjEwX1BBX0hTTU1DKDIpCi0jZGVmaW5lIFMzQ19QQV9IU01NQzMJCVM1UFYyMTBfUEFfSFNNTUMoMykKLSNkZWZpbmUgUzNDX1BBX0lJQwkJUzVQVjIxMF9QQV9JSUMwCi0jZGVmaW5lIFMzQ19QQV9JSUMxCQlTNVBWMjEwX1BBX0lJQzEKLSNkZWZpbmUgUzNDX1BBX0lJQzIJCVM1UFYyMTBfUEFfSUlDMgotI2RlZmluZSBTM0NfUEFfRkIJCVM1UFYyMTBfUEFfRkIKLSNkZWZpbmUgUzNDX1BBX1JUQwkJUzVQVjIxMF9QQV9SVEMKLSNkZWZpbmUgUzNDX1BBX1dEVAkJUzVQVjIxMF9QQV9XQVRDSERPRwotI2RlZmluZSBTM0NfUEFfVVNCX0hTT1RHCVM1UFYyMTBfUEFfSFNPVEcKLSNkZWZpbmUgUzVQX1BBX0ZJTUMwCQlTNVBWMjEwX1BBX0ZJTUMwCi0jZGVmaW5lIFM1UF9QQV9GSU1DMQkJUzVQVjIxMF9QQV9GSU1DMQotI2RlZmluZSBTNVBfUEFfRklNQzIJCVM1UFYyMTBfUEFfRklNQzIKLSNkZWZpbmUgUzVQX1BBX01JUElfQ1NJUzAJUzVQVjIxMF9QQV9NSVBJX0NTSVMKKyNkZWZpbmUgUzNDX1BBX1VBUlQJCQlTNVBWMjEwX1BBX1VBUlQKIAotI2RlZmluZSBTQU1TVU5HX1BBX0FEQwkJUzVQVjIxMF9QQV9BREMKLSNkZWZpbmUgU0FNU1VOR19QQV9DRkNPTglTNVBWMjEwX1BBX0NGQ09OCi0jZGVmaW5lIFNBTVNVTkdfUEFfS0VZUEFECVM1UFYyMTBfUEFfS0VZUEFECisjZGVmaW5lIFM1UF9QQV9VQVJUKHgpCQkJKFMzQ19QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UF9QQV9VQVJUMAkJCVM1UF9QQV9VQVJUKDApCisjZGVmaW5lIFM1UF9QQV9VQVJUMQkJCVM1UF9QQV9VQVJUKDEpCisjZGVmaW5lIFM1UF9QQV9VQVJUMgkJCVM1UF9QQV9VQVJUKDIpCisjZGVmaW5lIFM1UF9QQV9VQVJUMwkJCVM1UF9QQV9VQVJUKDMpCisKKyNkZWZpbmUgUzVQX1NaX1VBUlQJCQlTWl8yNTYKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWFxdWlsYS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtYXF1aWxhLmMKaW5kZXggNDYxYWEwMzUuLjU1N2FkZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWFxdWlsYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWFxdWlsYS5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFxdWlsYV9sZG8zX2RhdGEgPSB7CiAJLmNvbnN0cmFpbnRzCT0gewotCQkubmFtZQkJPSAiVlVTQi9NSVBJXzEuMVYiLAorCQkubmFtZQkJPSAiVlVTQitNSVBJXzEuMVYiLAogCQkubWluX3VWCQk9IDExMDAwMDAsCiAJCS5tYXhfdVYJCT0gMTEwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2xkbzhfZGF0YSA9IHsKIAkuY29uc3RyYWludHMJPSB7Ci0JCS5uYW1lCQk9ICJWVVNCL1ZBRENfMy4zViIsCisJCS5uYW1lCQk9ICJWVVNCK1ZBRENfMy4zViIsCiAJCS5taW5fdVYJCT0gMzMwMDAwMCwKIAkJLm1heF91VgkJPSAzMzAwMDAwLAogCQkuYXBwbHlfdVYJPSAxLApAQCAtMjA3LDcgKzIwNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhcXVpbGFfbGRvOV9kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZDQy9WQ0FNXzIuOFYiLAorCQkubmFtZQkJPSAiVkNDK1ZDQU1fMi44ViIsCiAJCS5taW5fdVYJCT0gMjgwMDAwMCwKIAkJLm1heF91VgkJPSAyODAwMDAwLAogCQkuYXBwbHlfdVYJPSAxLApAQCAtMzgxLDkgKzM4MSwxMiBAQAogCS5idWNrMV9zZXQxCT0gUzVQVjIxMF9HUEgwKDMpLAogCS5idWNrMV9zZXQyCT0gUzVQVjIxMF9HUEgwKDQpLAogCS5idWNrMl9zZXQzCT0gUzVQVjIxMF9HUEgwKDUpLAotCS5idWNrMV9tYXhfdm9sdGFnZTEgPSAxMjAwMDAwLAotCS5idWNrMV9tYXhfdm9sdGFnZTIgPSAxMjAwMDAwLAotCS5idWNrMl9tYXhfdm9sdGFnZSA9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2UxCT0gMTIwMDAwMCwKKwkuYnVjazFfdm9sdGFnZTIJPSAxMjAwMDAwLAorCS5idWNrMV92b2x0YWdlMwk9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2U0CT0gMTIwMDAwMCwKKwkuYnVjazJfdm9sdGFnZTEJPSAxMjAwMDAwLAorCS5idWNrMl92b2x0YWdlMgk9IDEyMDAwMDAsCiB9OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWdvbmkuYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWdvbmkuYwppbmRleCBlMjJkNTExLi4wNTZmNWM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1nb25pLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtZ29uaS5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvM19kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZVU0IvTUlQSV8xLjFWIiwKKwkJLm5hbWUJCT0gIlZVU0IrTUlQSV8xLjFWIiwKIAkJLm1pbl91VgkJPSAxMTAwMDAwLAogCQkubWF4X3VWCQk9IDExMDAwMDAsCiAJCS5hcHBseV91Vgk9IDEsCkBAIC0zMzcsNyArMzM3LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvOF9kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZVU0IvVkFEQ18zLjNWIiwKKwkJLm5hbWUJCT0gIlZVU0IrVkFEQ18zLjNWIiwKIAkJLm1pbl91VgkJPSAzMzAwMDAwLAogCQkubWF4X3VWCQk9IDMzMDAwMDAsCiAJCS5hcHBseV91Vgk9IDEsCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvOV9kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZDQy9WQ0FNXzIuOFYiLAorCQkubmFtZQkJPSAiVkNDK1ZDQU1fMi44ViIsCiAJCS5taW5fdVYJCT0gMjgwMDAwMCwKIAkJLm1heF91VgkJPSAyODAwMDAwLAogCQkuYXBwbHlfdVYJPSAxLApAQCAtNTIxLDkgKzUyMSwxMiBAQAogCS5idWNrMV9zZXQxCT0gUzVQVjIxMF9HUEgwKDMpLAogCS5idWNrMV9zZXQyCT0gUzVQVjIxMF9HUEgwKDQpLAogCS5idWNrMl9zZXQzCT0gUzVQVjIxMF9HUEgwKDUpLAotCS5idWNrMV9tYXhfdm9sdGFnZTEgPSAxMjAwMDAwLAotCS5idWNrMV9tYXhfdm9sdGFnZTIgPSAxMjAwMDAwLAotCS5idWNrMl9tYXhfdm9sdGFnZSA9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2UxCT0gMTIwMDAwMCwKKwkuYnVjazFfdm9sdGFnZTIJPSAxMjAwMDAwLAorCS5idWNrMV92b2x0YWdlMwk9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2U0CT0gMTIwMDAwMCwKKwkuYnVjazJfdm9sdGFnZTEJPSAxMjAwMDAwLAorCS5idWNrMl92b2x0YWdlMgk9IDEyMDAwMDAsCiB9OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NsZWVwLlMKaW5kZXggZDRkMjIyYi4uYTNkNjQ5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NsZWVwLlMKQEAgLTM1LDUwICszNSwyNCBAQAogCS8qIHMzY19jcHVfc2F2ZQogCSAqCiAJICogZW50cnk6Ci0JICoJcjAgPSBzYXZlIGFkZHJlc3MgKHZpcnR1YWwgYWRkciBvZiBzM2Nfc2xlZXBfc2F2ZV9waHlzKQorCSAqCXIxID0gdjpwIG9mZnNldAogCSovCiAKIEVOVFJZKHMzY19jcHVfc2F2ZSkKIAogCXN0bWZkCXNwISwgeyByMyAtIHIxMiwgbHIgfQotCi0JbXJjCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBGQ1NFL1BJRAotCW1yYwlwMTUsIDAsIHI1LCBjMywgYzAsIDAJQCBEb21haW4gSUQKLQltcmMJcDE1LCAwLCByNiwgYzIsIGMwLCAwCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTAKLQltcmMJcDE1LCAwLCByNywgYzIsIGMwLCAxCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTEKLQltcmMJcDE1LCAwLCByOCwgYzIsIGMwLCAyCUAgVHJhbnNsYXRpb24gVGFibGUgQ29udHJvbAotCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDAJQCBDb250cm9sIHJlZ2lzdGVyCi0JbXJjCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDEJQCBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgotCW1yYwlwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCUAgQ28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9scwotCW1yYwlwMTUsIDAsIHIxMiwgYzEwLCBjMiwgMAlAIFJlYWQgUFJSUgotCW1yYwlwMTUsIDAsIHIzLCBjMTAsIGMyLCAxCUAgUkVBRCBOTVJSCi0KLQlzdG1pYQlyMCwgeyByMyAtIHIxMyB9Ci0KLQlibAlzM2NfcG1fY2JfZmx1c2hjYWNoZQorCWxkcglyMywgPXJlc3VtZV93aXRoX21tdQorCWJsCWNwdV9zdXNwZW5kCiAKIAlsZHIJcjAsID1wbV9jcHVfc2xlZXAKIAlsZHIJcjAsIFsgcjAgXQogCW1vdglwYywgcjAKIAogcmVzdW1lX3dpdGhfbW11OgotCS8qCi0JICogQWZ0ZXIgTU1VIGlzIHR1cm5lZCBvbiwgcmVzdG9yZSB0aGUgcHJldmlvdXMgTU1VIHRhYmxlLgotCSAqLwotCWxkcglyOSAsID0oUEFHRV9PRkZTRVQgLSBQSFlTX09GRlNFVCkKLQlhZGQJcjQsIHI0LCByOQotCXN0cglyMTIsIFtyNF0KLQogCWxkbWZkCXNwISwgeyByMyAtIHIxMiwgcGMgfQogCiAJLmx0b3JnCiAKLQkuZGF0YQotCi0JLmdsb2JhbAlzM2Nfc2xlZXBfc2F2ZV9waHlzCi1zM2Nfc2xlZXBfc2F2ZV9waHlzOgotCS53b3JkCTAKLQogCS8qIHNsZWVwIG1hZ2ljLCB0byBhbGxvdyB0aGUgYm9vdGxvYWRlciB0byBjaGVjayBmb3IgYW4gdmFsaWQKIAkgKiBpbWFnZSB0byByZXN1bWUgdG8uIE11c3QgYmUgdGhlIGZpcnN0IHdvcmQgYmVmb3JlIHRoZQogCSAqIHMzY19jcHVfcmVzdW1lIGVudHJ5LgpAQCAtOTYsNzUgKzcwLDQgQEAKIAkqLwogCiBFTlRSWShzM2NfY3B1X3Jlc3VtZSkKLQltb3YJcjAsICNQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBTVkNfTU9ERQotCW1zcgljcHNyX2MsIHIwCi0KLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIFRMQnMKLQltY3IJcDE1LCAwLCByMSwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBDYWNoZQotCi0JbGRyCXIwLCBzM2Nfc2xlZXBfc2F2ZV9waHlzCQlAIGFkZHJlc3Mgb2YgcmVzdG9yZSBibG9jawotCWxkbWlhCXIwLCB7IHIzIC0gcjEzIH0KLQotCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCQlAIEZDU0UvUElECi0JbWNyCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAkJQCBEb21haW4gSUQKLQotCW1jcglwMTUsIDAsIHI4LCBjMiwgYzAsIDIJCUAgVHJhbnNsYXRpb24gVGFibGUgQ29udHJvbAotCW1jcglwMTUsIDAsIHI3LCBjMiwgYzAsIDEJCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTEKLQltY3IJcDE1LCAwLCByNiwgYzIsIGMwLCAwCQlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UwCi0KLQltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQkJQCBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgotCi0JbW92CXIwLCAjMAotCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJCUAgSW52YWxpZGF0ZSBJICYgRCBUTEIKLQotCW1vdglyMCwgIzAJCQkJQCByZXN0b3JlIGNvcHJvIGFjY2VzcwotCW1jcglwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCQlAIENvLXByb2Nlc3NvciBhY2Nlc3MKLQltY3IgCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAotCi0JbWNyCXAxNSwgMCwgcjEyLCBjMTAsIGMyLCAwCQlAIHdyaXRlIFBSUlIKLQltY3IJcDE1LCAwLCByMywgYzEwLCBjMiwgMQkJQCB3cml0ZSBOTVJSCi0KLQkvKgotCSAqIEluIENvcnRleC1BOCwgd2hlbiBNTVUgaXMgdHVybmVkIG9uLCB0aGUgcGlwZWxpbmUgaXMgZmx1c2hlZC4KLQkgKiBBbmQgdGhlcmUgYXJlIG5vIHZhbGlkIGVudHJpZXMgaW4gdGhlIE1NVSB0YWJsZSBhdCB0aGlzIHBvaW50LgotCSAqIFNvIGJlZm9yZSB0dXJuaW5nIG9uIHRoZSBNTVUsIHRoZSBNTVUgZW50cnkgZm9yIHRoZSBEUkFNIGFkZHJlc3MKLQkgKiByYW5nZSBpcyBhZGRlZC4gQWZ0ZXIgdGhlIE1NVSBpcyB0dXJuZWQgb24sIHRoZSBvdGhlciBlbnRyaWVzCi0JICogaW4gdGhlIE1NVSB0YWJsZSB3aWxsIGJlIHJlc3RvcmVkLgotCSovCi0KLQkvKiByNiA9IFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UwICovCi0JbW92CXI0LCByNgotCW1vdglyNCwgcjQsIExTUiAjMTQKLQltb3YJcjQsIHI0LCBMU0wgIzE0Ci0KLQkvKiBMb2FkIGFkZHJlc3MgZm9yIGFkZGluZyB0byBNTVUgdGFibGUgbGlzdCAqLwotCWxkcglyMTEsID0weEUwMTBGMDAwCQlAIElORk9STTAgcmVnLgotCWxkcglyMTAsIFtyMTEsICMwXQotCW1vdglyMTAsIHIxMCwgTFNSICMxOAotCWJpYwlyMTAsIHIxMCwgIzB4MwotCW9ycglyNCwgcjQsIHIxMAotCi0JLyogQ2FsY3VsYXRlIE1NVSB0YWJsZSBlbnRyeSAqLwotCW1vdiAJcjEwLCByMTAsIExTTCAjMTgKLQlsZHIJcjUsID0weDQwRQotCW9ycglyMTAsIHIxMCwgcjUKLQotCS8qIEJhY2sgdXAgb3JpZ2luYWxseSBkYXRhICovCi0JbGRyCXIxMiwgW3I0XQotCi0JLyogQWRkIGNhbGN1bGF0ZWQgTU1VIHRhYmxlIGVudHJ5IGludG8gTU1VIHRhYmxlIGxpc3QgKi8KLQlzdHIJcjEwLCBbcjRdCi0KLQlsZHIJcjIsID1yZXN1bWVfd2l0aF9tbXUKLQltY3IJcDE1LCAwLCByOSwgYzEsIGMwLCAwCQlAIHR1cm4gb24gTU1VLCBldGMKLQotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAkJCQkJQCBzZWNvbmQtdG8tbGFzdCBiZWZvcmUgbW11Ci0KLQltb3YJcGMsIHIyCQkJCUAgZ28gYmFjayB0byB2aXJ0dWFsIGFkZHJlc3MKLQotCS5sdG9yZworCWIJY3B1X3Jlc3VtZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZwppbmRleCAwOWM0YzIxLi5iMmE5YWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZwpAQCAtMTIyLDYgKzEyMiw3IEBACiAJc2VsZWN0IFMzQ19ERVZfSFNNTUMyCiAJc2VsZWN0IFMzQ19ERVZfSFNNTUMzCiAJc2VsZWN0IFM1UFYzMTBfREVWX1BECisJc2VsZWN0IFM1UFYzMTBfREVWX1NZU01NVQogCXNlbGVjdCBTNVBWMzEwX1NFVFVQX0kyQzEKIAlzZWxlY3QgUzVQVjMxMF9TRVRVUF9TREhDSQogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDc0ZDQwMDYuLjkwMTY1N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KICAqCiAgKiBTNVBWMzEwIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucwpAQCAtMjMsOTAgKzIzLDQzIEBACiAKICNpbmNsdWRlIDxwbGF0L21hcC1zNXAuaD4KIAotI2RlZmluZSBTNVBWMzEwX1BBX1NZU1JBTQkJKDB4MDIwMjUwMDApCisjZGVmaW5lIFM1UFYzMTBfUEFfU1lTUkFNCQkweDAyMDI1MDAwCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9JMlMwCQkJMHgwMzgzMDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX0kyUzEJCQkweEUzMTAwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfSTJTMgkJCTB4RTJBMDAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX1BDTTAJCQkweDAzODQwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfUENNMQkJCTB4MTM5ODAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9QQ00yCQkJMHgxMzk5MDAwMAogCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1JPTV9CQU5LKHgpCQkoMHgwNDAwMDAwMCArICgoeCkgKiAweDAxMDAwMDAwKSkKIAotI2RlZmluZSBTNVBDMjEwX1BBX09ORU5BTkQJCSgweDBDMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfT05FTkFORAkJCVM1UEMyMTBfUEFfT05FTkFORAorI2RlZmluZSBTNVBDMjEwX1BBX09ORU5BTkQJCTB4MEMwMDAwMDAKKyNkZWZpbmUgUzVQQzIxMF9QQV9PTkVOQU5EX0RNQQkJMHgwQzYwMDAwMAogCi0jZGVmaW5lIFM1UEMyMTBfUEFfT05FTkFORF9ETUEJCSgweDBDNjAwMDAwKQotI2RlZmluZSBTNVBfUEFfT05FTkFORF9ETUEJCVM1UEMyMTBfUEFfT05FTkFORF9ETUEKKyNkZWZpbmUgUzVQVjMxMF9QQV9DSElQSUQJCTB4MTAwMDAwMDAKIAotI2RlZmluZSBTNVBWMzEwX1BBX0NISVBJRAkJKDB4MTAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9DSElQSUQJCQlTNVBWMzEwX1BBX0NISVBJRAorI2RlZmluZSBTNVBWMzEwX1BBX1NZU0NPTgkJMHgxMDAxMDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX1BNVQkJCTB4MTAwMjAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9DTVUJCQkweDEwMDMwMDAwCiAKLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNDT04JCSgweDEwMDEwMDAwKQotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQVjMxMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQVjMxMF9QQV9XQVRDSERPRwkJMHgxMDA2MDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX1JUQwkJCTB4MTAwNzAwMDAKIAotI2RlZmluZSBTNVBWMzEwX1BBX1BNVQkJCSgweDEwMDIwMDAwKQorI2RlZmluZSBTNVBWMzEwX1BBX0RNQzAJCQkweDEwNDAwMDAwCiAKLSNkZWZpbmUgUzVQVjMxMF9QQV9DTVUJCQkoMHgxMDAzMDAwMCkKKyNkZWZpbmUgUzVQVjMxMF9QQV9DT01CSU5FUgkJMHgxMDQ0ODAwMAogCi0jZGVmaW5lIFM1UFYzMTBfUEFfV0FUQ0hET0cJCSgweDEwMDYwMDAwKQotI2RlZmluZSBTNVBWMzEwX1BBX1JUQwkJCSgweDEwMDcwMDAwKQorI2RlZmluZSBTNVBWMzEwX1BBX0NPUkVQRVJJCQkweDEwNTAwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfR0lDX0NQVQkJMHgxMDUwMDEwMAorI2RlZmluZSBTNVBWMzEwX1BBX1RXRAkJCTB4MTA1MDA2MDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9HSUNfRElTVAkJMHgxMDUwMTAwMAorI2RlZmluZSBTNVBWMzEwX1BBX0wyQ0MJCQkweDEwNTAyMDAwCiAKLSNkZWZpbmUgUzVQVjMxMF9QQV9ETUMwCQkJKDB4MTA0MDAwMDApCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9DT01CSU5FUgkJKDB4MTA0NDgwMDApCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9DT1JFUEVSSQkJKDB4MTA1MDAwMDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfR0lDX0NQVQkJKDB4MTA1MDAxMDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfVFdECQkJKDB4MTA1MDA2MDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfR0lDX0RJU1QJCSgweDEwNTAxMDAwKQotI2RlZmluZSBTNVBWMzEwX1BBX0wyQ0MJCQkoMHgxMDUwMjAwMCkKLQotLyogRE1BICovCi0jZGVmaW5lIFM1UFYzMTBfUEFfTURNQQkJMHgxMDgxMDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1BETUEwCTB4MTI2ODAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9QRE1BMQkweDEyNjkwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9HUElPMQkJKDB4MTE0MDAwMDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfR1BJTzIJCSgweDExMDAwMDAwKQotI2RlZmluZSBTNVBWMzEwX1BBX0dQSU8zCQkoMHgwMzg2MDAwMCkKLQotI2RlZmluZSBTNVBWMzEwX1BBX01JUElfQ1NJUzAJCTB4MTE4ODAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9NSVBJX0NTSVMxCQkweDExODkwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9IU01NQyh4KQkJKDB4MTI1MTAwMDAgKyAoKHgpICogMHgxMDAwMCkpCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9TUk9NQwkJKDB4MTI1NzAwMDApCi0jZGVmaW5lIFM1UF9QQV9TUk9NQwkJCVM1UFYzMTBfUEFfU1JPTUMKLQotLyogUy9QRElGICovCi0jZGVmaW5lIFM1UFYzMTBfUEFfU1BESUYJMHhFMTEwMDAwMAotCi0vKiBJMlMgKi8KLSNkZWZpbmUgUzVQVjMxMF9QQV9JMlMwCQkweDAzODMwMDAwCi0jZGVmaW5lIFM1UFYzMTBfUEFfSTJTMQkJMHhFMzEwMDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX0kyUzIJCTB4RTJBMDAwMDAKLQotLyogUENNICovCi0jZGVmaW5lIFM1UFYzMTBfUEFfUENNMAkJMHgwMzg0MDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1BDTTEJCTB4MTM5ODAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9QQ00yCQkweDEzOTkwMDAwCi0KLS8qIEFDOTcgKi8KLSNkZWZpbmUgUzVQVjMxMF9QQV9BQzk3CQkweDEzOUEwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9VQVJUCQkJKDB4MTM4MDAwMDApCi0KLSNkZWZpbmUgUzVQX1BBX1VBUlQoeCkJCQkoUzVQVjMxMF9QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCi0jZGVmaW5lIFM1UF9QQV9VQVJUMAkJCVM1UF9QQV9VQVJUKDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMQkJCVM1UF9QQV9VQVJUKDEpCi0jZGVmaW5lIFM1UF9QQV9VQVJUMgkJCVM1UF9QQV9VQVJUKDIpCi0jZGVmaW5lIFM1UF9QQV9VQVJUMwkJCVM1UF9QQV9VQVJUKDMpCi0jZGVmaW5lIFM1UF9QQV9VQVJUNAkJCVM1UF9QQV9VQVJUKDQpCi0KLSNkZWZpbmUgUzVQX1NaX1VBUlQJCQlTWl8yNTYKLQotI2RlZmluZSBTNVBWMzEwX1BBX0lJQyh4KQkJKDB4MTM4NjAwMDAgKyAoKHgpICogMHgxMDAwMCkpCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9USU1FUgkJKDB4MTM5RDAwMDApCi0jZGVmaW5lIFM1UF9QQV9USU1FUgkJCVM1UFYzMTBfUEFfVElNRVIKLQotI2RlZmluZSBTNVBWMzEwX1BBX1NEUkFNCQkoMHg0MDAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1NEUkFNCQkJUzVQVjMxMF9QQV9TRFJBTQorI2RlZmluZSBTNVBWMzEwX1BBX01ETUEJCQkweDEwODEwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfUERNQTAJCTB4MTI2ODAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9QRE1BMQkJMHgxMjY5MDAwMAogCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX01ETUEJCTB4MTBBNDAwMDAKICNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfU1NTCQkweDEwQTUwMDAwCkBAIC0xMjQsMTEgKzc3LDMyIEBACiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX1RWCQkweDEyRTIwMDAwCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX01GQ19MCQkweDEzNjIwMDAwCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX01GQ19SCQkweDEzNjMwMDAwCi0jZGVmaW5lIFM1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNCTE2Ci0jZGVmaW5lIFM1UF9TWVNNTVVfVE9UQUxfSVBOVU0JCVM1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNCiAKLS8qIGNvbXBhdGliaWx0aXkgZGVmaW5lcy4gKi8KLSNkZWZpbmUgUzNDX1BBX1VBUlQJCQlTNVBWMzEwX1BBX1VBUlQKKyNkZWZpbmUgUzVQVjMxMF9QQV9HUElPMQkJMHgxMTQwMDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX0dQSU8yCQkweDExMDAwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfR1BJTzMJCTB4MDM4NjAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX01JUElfQ1NJUzAJCTB4MTE4ODAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9NSVBJX0NTSVMxCQkweDExODkwMDAwCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9IU01NQyh4KQkJKDB4MTI1MTAwMDAgKyAoKHgpICogMHgxMDAwMCkpCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9TUk9NQwkJMHgxMjU3MDAwMAorCisjZGVmaW5lIFM1UFYzMTBfUEFfVUFSVAkJCTB4MTM4MDAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX0lJQyh4KQkJKDB4MTM4NjAwMDAgKyAoKHgpICogMHgxMDAwMCkpCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9BQzk3CQkJMHgxMzlBMDAwMAorCisjZGVmaW5lIFM1UFYzMTBfUEFfVElNRVIJCTB4MTM5RDAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX1NEUkFNCQkweDQwMDAwMDAwCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9TUERJRgkJMHhFMTEwMDAwMAorCisvKiBDb21wYXRpYmlsdGl5IERlZmluZXMgKi8KKwogI2RlZmluZSBTM0NfUEFfSFNNTUMwCQkJUzVQVjMxMF9QQV9IU01NQygwKQogI2RlZmluZSBTM0NfUEFfSFNNTUMxCQkJUzVQVjMxMF9QQV9IU01NQygxKQogI2RlZmluZSBTM0NfUEFfSFNNTUMyCQkJUzVQVjMxMF9QQV9IU01NQygyKQpAQCAtMTQzLDcgKzExNywyOCBAQAogI2RlZmluZSBTM0NfUEFfSUlDNwkJCVM1UFYzMTBfUEFfSUlDKDcpCiAjZGVmaW5lIFMzQ19QQV9SVEMJCQlTNVBWMzEwX1BBX1JUQwogI2RlZmluZSBTM0NfUEFfV0RUCQkJUzVQVjMxMF9QQV9XQVRDSERPRworCisjZGVmaW5lIFM1UF9QQV9DSElQSUQJCQlTNVBWMzEwX1BBX0NISVBJRAogI2RlZmluZSBTNVBfUEFfTUlQSV9DU0lTMAkJUzVQVjMxMF9QQV9NSVBJX0NTSVMwCiAjZGVmaW5lIFM1UF9QQV9NSVBJX0NTSVMxCQlTNVBWMzEwX1BBX01JUElfQ1NJUzEKKyNkZWZpbmUgUzVQX1BBX09ORU5BTkQJCQlTNVBDMjEwX1BBX09ORU5BTkQKKyNkZWZpbmUgUzVQX1BBX09ORU5BTkRfRE1BCQlTNVBDMjEwX1BBX09ORU5BTkRfRE1BCisjZGVmaW5lIFM1UF9QQV9TRFJBTQkJCVM1UFYzMTBfUEFfU0RSQU0KKyNkZWZpbmUgUzVQX1BBX1NST01DCQkJUzVQVjMxMF9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQVjMxMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQX1BBX1RJTUVSCQkJUzVQVjMxMF9QQV9USU1FUgorCisvKiBVQVJUICovCisKKyNkZWZpbmUgUzNDX1BBX1VBUlQJCQlTNVBWMzEwX1BBX1VBUlQKKworI2RlZmluZSBTNVBfUEFfVUFSVCh4KQkJCShTM0NfUEFfVUFSVCArICgoeCkgKiBTM0NfVUFSVF9PRkZTRVQpKQorI2RlZmluZSBTNVBfUEFfVUFSVDAJCQlTNVBfUEFfVUFSVCgwKQorI2RlZmluZSBTNVBfUEFfVUFSVDEJCQlTNVBfUEFfVUFSVCgxKQorI2RlZmluZSBTNVBfUEFfVUFSVDIJCQlTNVBfUEFfVUFSVCgyKQorI2RlZmluZSBTNVBfUEFfVUFSVDMJCQlTNVBfUEFfVUFSVCgzKQorI2RlZmluZSBTNVBfUEFfVUFSVDQJCQlTNVBfUEFfVUFSVCg0KQorCisjZGVmaW5lIFM1UF9TWl9VQVJUCQkJU1pfMjU2CiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3N5c21tdS5oIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXNtbXUuaAppbmRleCA2NjJmZTg1Zi4uNTk4ZmM1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXNtbXUuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3N5c21tdS5oCkBAIC0xMyw2ICsxMyw5IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX1NZU01NVV9ICiAjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX1NZU01NVV9IIF9fRklMRV9fCiAKKyNkZWZpbmUgUzVQVjMxMF9TWVNNTVVfVE9UQUxfSVBOVU0JMTYKKyNkZWZpbmUgUzVQX1NZU01NVV9UT1RBTF9JUE5VTQkJUzVQVjMxMF9TWVNNTVVfVE9UQUxfSVBOVU0KKwogZW51bSBzNXB2MzEwX3N5c21tdV9pcHMgewogCVNZU01NVV9NRE1BLAogCVNZU01NVV9TU1MsCkBAIC0zMiw3ICszNSw3IEBACiAJU1lTTU1VX01GQ19SLAogfTsKIAotc3RhdGljIGNoYXIgKnN5c21tdV9pcHNfbmFtZVtTNVBfU1lTTU1VX1RPVEFMX0lQTlVNXSA9IHsKK3N0YXRpYyBjaGFyICpzeXNtbXVfaXBzX25hbWVbUzVQVjMxMF9TWVNNTVVfVE9UQUxfSVBOVU1dID0gewogCSJTWVNNTVVfTURNQSIJLAogCSJTWVNNTVVfU1NTIgksCiAJIlNZU01NVV9GSU1DMCIJLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY29sbGllLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwppbmRleCBkNDNjNWVmLi5iZDNlMWJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwpAQCAtMjQxLDYgKzI0MSw5IEBACiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvbGxpZV9sb2NvbW9fZGV2aWNlID0gewogCS5uYW1lCQk9ICJsb2NvbW8iLAogCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZsb2NvbW9faW5mbywKKwl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsb2NvbW9fcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBsb2NvbW9fcmVzb3VyY2VzLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BtLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbS5jCmluZGV4IGFiOWZjNDQuLmM0NjYxYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcG0uYwpAQCAtMzIsOCArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKLWV4dGVybiB2b2lkIHNhMTEwMF9jcHVfc3VzcGVuZCh2b2lkKTsKLWV4dGVybiB2b2lkIHNhMTEwMF9jcHVfcmVzdW1lKHZvaWQpOworZXh0ZXJuIHZvaWQgc2ExMTAwX2NwdV9zdXNwZW5kKGxvbmcpOwogCiAjZGVmaW5lIFNBVkUoeCkJCXNsZWVwX3NhdmVbU0xFRVBfU0FWRV8jI3hdID0geAogI2RlZmluZSBSRVNUT1JFKHgpCXggPSBzbGVlcF9zYXZlW1NMRUVQX1NBVkVfIyN4XQpAQCAtNzMsMTAgKzcyLDEwIEBACiAJUkNTUiA9IFJDU1JfSFdSIHwgUkNTUl9TV1IgfCBSQ1NSX1dEUiB8IFJDU1JfU01SOwogCiAJLyogc2V0IHJlc3VtZSByZXR1cm4gYWRkcmVzcyAqLwotCVBTUFIgPSB2aXJ0X3RvX3BoeXMoc2ExMTAwX2NwdV9yZXN1bWUpOworCVBTUFIgPSB2aXJ0X3RvX3BoeXMoY3B1X3Jlc3VtZSk7CiAKIAkvKiBnbyB6enogKi8KLQlzYTExMDBfY3B1X3N1c3BlbmQoKTsKKwlzYTExMDBfY3B1X3N1c3BlbmQoUExBVF9QSFlTX09GRlNFVCAtIFBBR0VfT0ZGU0VUKTsKIAogCWNwdV9pbml0KCk7CiAKQEAgLTExNSwxMSArMTE0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgbG9uZyBzbGVlcF9waHlzX3NwKHZvaWQgKnNwKQotewotCXJldHVybiB2aXJ0X3RvX3BoeXMoc3ApOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHNhMTF4MF9wbV9vcHMgPSB7CiAJLmVudGVyCQk9IHNhMTF4MF9wbV9lbnRlciwKIAkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9zbGVlcC5TCmluZGV4IDgwZjMxYmEuLjA0ZjJhNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2xlZXAuUwpAQCAtMjAsMTIgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0KLQogCQkudGV4dAotCi0KLQogLyoKICAqIHNhMTEwMF9jcHVfc3VzcGVuZCgpCiAgKgpAQCAtMzQsMjcgKzI5LDEwIEBACiAgKi8KIAogRU5UUlkoc2ExMTAwX2NwdV9zdXNwZW5kKQotCiAJc3RtZmQJc3AhLCB7cjQgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawotCi0JQCBnZXQgY29wcm9jZXNzb3IgcmVnaXN0ZXJzCi0JbXJjIAlwMTUsIDAsIHI0LCBjMywgYzAsIDAJCUAgZG9tYWluIElECi0JbXJjIAlwMTUsIDAsIHI1LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbXJjCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJCUAgUElECi0JbXJjIAlwMTUsIDAsIHI3LCBjMSwgYzAsIDAJCUAgY29udHJvbCByZWcKLQotCUAgc3RvcmUgdGhlbSBwbHVzIGN1cnJlbnQgdmlydHVhbCBzdGFjayBwdHIgb24gc3RhY2sKLQltb3YJcjgsIHNwCi0Jc3RtZmQJc3AhLCB7cjQgLSByOH0KLQotCUAgcHJlc2VydmUgcGh5cyBhZGRyZXNzIG9mIHN0YWNrCi0JbW92CXIwLCBzcAotCWJsCXNsZWVwX3BoeXNfc3AKLQlsZHIJcjEsID1zbGVlcF9zYXZlX3NwCi0Jc3RyCXIwLCBbcjFdCi0KLQlAIGNsZWFuIGRhdGEgY2FjaGUgYW5kIGludmFsaWRhdGUgV0IKLQlibAl2NHdiX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJbW92CXIxLCByMAorCWxkcglyMywgPXNhMTEwMF9jcHVfcmVzdW1lCQlAIHJldHVybiBmdW5jdGlvbgorCWJsCWNwdV9zdXNwZW5kCiAKIAlAIGRpc2FibGUgY2xvY2sgc3dpdGNoaW5nCiAJbWNyCXAxNSwgMCwgcjEsIGMxNSwgYzIsIDIKQEAgLTE2Niw1MCArMTQ0LDggQEAKICAqIGNwdV9zYTExMDBfcmVzdW1lKCkKICAqCiAgKiBlbnRyeSBwb2ludCBmcm9tIGJvb3Rsb2FkZXIgaW50byBrZXJuZWwgZHVyaW5nIHJlc3VtZQotICoKLSAqIE5vdGU6IFllcywgcGFydCBvZiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgbG9jYXRlZCBpbnRvIHRoZSAuZGF0YSBzZWN0aW9uLgotICogICAgICAgVGhpcyBpcyB0byBhbGxvdyBzbGVlcF9zYXZlX3NwIHRvIGJlIGFjY2Vzc2VkIHdpdGggYSByZWxhdGl2ZSBsb2FkCi0gKiAgICAgICB3aGlsZSB3ZSBjYW4ndCByZWx5IG9uIGFueSBNTVUgdHJhbnNsYXRpb24uICBXZSBjb3VsZCBoYXZlIHB1dAotICogICAgICAgc2xlZXBfc2F2ZV9zcCBpbiB0aGUgLnRleHQgc2VjdGlvbiBhcyB3ZWxsLCBidXQgc29tZSBzZXR1cHMgbWlnaHQKLSAqICAgICAgIGluc2lzdCBvbiBpdCB0byBiZSB0cnVseSByZWFkLW9ubHkuCiAgKi8KLQotCS5kYXRhCiAJLmFsaWduIDUKLUVOVFJZKHNhMTEwMF9jcHVfcmVzdW1lKQotCW1vdglyMCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCi0JbXNyCWNwc3JfYywgcjAJCQlAIHNldCBTVkMsIGlycXMgb2ZmCi0KLQlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJCUAgc3RhY2sgcGh5cyBhZGRyCi0JbGRyCXIyLCA9cmVzdW1lX2FmdGVyX21tdQkJQCBpdHMgYWJzb2x1dGUgdmlydHVhbCBhZGRyZXNzCi0JbGRtZmQJcjAsIHtyNCAtIHI3LCBzcH0JCUAgQ1AgcmVncyArIHZpcnQgc3RhY2sgcHRyCi0KLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMCAgIAlAIGZsdXNoIEkrRCBUTEJzCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQCBmbHVzaCBJJkQgY2FjaGUKLQltY3IJcDE1LCAwLCByMSwgYzksIGMwLCAwCQlAIGludmFsaWRhdGUgUkIKLQltY3IJcDE1LCAwLCByMSwgYzksIGMwLCA1CQlAIGFsbG93IHVzZXIgc3BhY2UgdG8gdXNlIFJCCi0KLQltY3IJcDE1LCAwLCByNCwgYzMsIGMwLCAwCQlAIGRvbWFpbiBJRAotCW1jcglwMTUsIDAsIHI1LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbWNyCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJCUAgUElECi0JYglyZXN1bWVfdHVybl9vbl9tbXUJCUAgY2FjaGUgYWxpZ24gZXhlY3V0aW9uCi0KLQkuYWxpZ24gNQotcmVzdW1lX3R1cm5fb25fbW11OgotCW1jciAJcDE1LCAwLCByNywgYzEsIGMwLCAwCQlAIHR1cm4gb24gTU1VLCBjYWNoZXMsIGV0Yy4KLQlub3AKLQltb3YJcGMsIHIyCQkJCUAganVtcCB0byB2aXJ0dWFsIGFkZHIKLQlub3AKLQlub3AKLQlub3AKLQotc2xlZXBfc2F2ZV9zcDoKLQkud29yZAkwCQkJCUAgcHJlc2VydmUgc3RhY2sgcGh5cyBwdHIgaGVyZQotCi0JLnRleHQKLXJlc3VtZV9hZnRlcl9tbXU6CitzYTExMDBfY3B1X3Jlc3VtZToKIAltY3IJcDE1LCAwLCByMSwgYzE1LCBjMSwgMgkJQCBlbmFibGUgY2xvY2sgc3dpdGNoaW5nCiAJbGRtZmQJc3AhLCB7cjQgLSByMTIsIHBjfQkJQCByZXR1cm4gdG8gY2FsbGVyCi0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnCmluZGV4IDRkMWI0YzUuLjBjOGY2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKQEAgLTYwLDYgKzYwLDggQEAKIAogY29uZmlnIE1BQ0hfQUc1RVZNCiAJYm9vbCAiQUc1RVZNIGJvYXJkIgorCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBTSF9MQ0RfTUlQSV9EU0kKIAlkZXBlbmRzIG9uIEFSQ0hfU0g3M0EwCiAKIGNvbmZpZyBNQUNIX01BQ0tFUkVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYwppbmRleCBjMThhNzQwLi40MzAzYTg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMKQEAgLTM0LDkgKzM0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQvc2hfa2V5c2MuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zaF9tbWNpZi5oPgotCisjaW5jbHVkZSA8bGludXgvc2hfY2xrLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9taXBpX2RzaS5oPgogI2luY2x1ZGUgPHNvdW5kL3NoX2ZzaS5oPgotCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc2g3M2EwLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KQEAgLTE4MywxMSArMTg0LDE2NSBAQAogCS5yZXNvdXJjZQk9IHNoX21tY2lmX3Jlc291cmNlcywKIH07CiAKKy8qIElyREEgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJkYV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4RTZEMDAwMDAsCisJCS5lbmQJPSAweEU2RDAxRkQ0IC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBnaWNfc3BpKDk1KSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpcmRhX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic2hfaXJkYSIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlICAgICAgID0gaXJkYV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpcmRhX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBsY2RfYmFja2xpZ2h0X3NlcVszXVsyXSA9IHsKKwl7IDB4MDQsIDB4MDcgfSwKKwl7IDB4MjMsIDB4ODAgfSwKKwl7IDB4MDMsIDB4MDEgfSwKK307CisKK3N0YXRpYyB2b2lkIGxjZF9iYWNrbGlnaHRfb24odm9pZCkKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmE7CisJc3RydWN0IGkyY19tc2cgbXNnOworCWludCBrOworCisJYSA9IGkyY19nZXRfYWRhcHRlcigxKTsKKwlmb3IgKGsgPSAwOyBhICYmIGsgPCAzOyBrKyspIHsKKwkJbXNnLmFkZHIgPSAweDZkOworCQltc2cuYnVmID0gJmxjZF9iYWNrbGlnaHRfc2VxW2tdWzBdOworCQltc2cubGVuID0gMjsKKwkJbXNnLmZsYWdzID0gMDsKKwkJaWYgKGkyY190cmFuc2ZlcihhLCAmbXNnLCAxKSAhPSAxKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBsY2RfYmFja2xpZ2h0X3Jlc2V0KHZvaWQpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1JUMjM1LCAwKTsKKwltZGVsYXkoMjQpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9SVDIzNSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9vbih2b2lkICpib2FyZF9kYXRhLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlsY2RfYmFja2xpZ2h0X29uKCk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9vZmYodm9pZCAqYm9hcmRfZGF0YSkKK3sKKwlsY2RfYmFja2xpZ2h0X3Jlc2V0KCk7Cit9CisKKy8qIExDREMwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBsY2RjMF9tb2Rlc1tdID0geworCXsKKwkJLm5hbWUJCT0gIlI2MzMwMihRSEQpIiwKKwkJLnhyZXMJCT0gNTQ0LAorCQkueXJlcwkJPSA5NjEsCisJCS5sZWZ0X21hcmdpbgk9IDcyLAorCQkucmlnaHRfbWFyZ2luCT0gNjAwLAorCQkuaHN5bmNfbGVuCT0gMTYsCisJCS51cHBlcl9tYXJnaW4JPSA4LAorCQkubG93ZXJfbWFyZ2luCT0gOCwKKwkJLnZzeW5jX2xlbgk9IDIsCisJCS5zeW5jCQk9IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCB8IEZCX1NZTkNfSE9SX0hJR0hfQUNULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkYzBfaW5mbyA9IHsKKwkuY2xvY2tfc291cmNlID0gTENEQ19DTEtfUEVSSVBIRVJBTCwKKwkuY2hbMF0gPSB7CisJCS5jaGFuID0gTENEQ19DSEFOX01BSU5MQ0QsCisJCS5pbnRlcmZhY2VfdHlwZSA9IFJHQjI0LAorCQkuY2xvY2tfZGl2aWRlciA9IDEsCisJCS5mbGFncyA9IExDRENfRkxBR1NfRFdQT0wsCisJCS5sY2Rfc2l6ZV9jZmcud2lkdGggPSA0NCwKKwkJLmxjZF9zaXplX2NmZy5oZWlnaHQgPSA3OSwKKwkJLmJwcCA9IDE2LAorCQkubGNkX2NmZyA9IGxjZGMwX21vZGVzLAorCQkubnVtX2NmZyA9IEFSUkFZX1NJWkUobGNkYzBfbW9kZXMpLAorCQkuYm9hcmRfY2ZnID0geworCQkJLmRpc3BsYXlfb24gPSBsY2Rfb24sCisJCQkuZGlzcGxheV9vZmYgPSBsY2Rfb2ZmLAorCQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkYzBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJMQ0RDMCIsCisJCS5zdGFydAk9IDB4ZmU5NDAwMDAsIC8qIFA0LW9ubHkgc3BhY2UgKi8KKwkJLmVuZAk9IDB4ZmU5NDNmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBpbnRjc19ldnQyaXJxKDB4NTgwKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxjZGMwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfbW9iaWxlX2xjZGNfZmIiLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsY2RjMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGxjZGMwX3Jlc291cmNlcywKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmxjZGMwX2luZm8sCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IH4wLAorCX0sCit9OworCisvKiBNSVBJLURTSSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtaXBpZHNpMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgPSAweGZlYWIwMDAwLAorCQkuZW5kICAgID0gMHhmZWFiM2ZmZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMHhmZWFiNDAwMCwKKwkJLmVuZCAgICA9IDB4ZmVhYjdmZmYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9taXBpX2RzaV9pbmZvIG1pcGlkc2kwX2luZm8gPSB7CisJLmRhdGFfZm9ybWF0CT0gTUlQSV9SR0I4ODgsCisJLmxjZF9jaGFuCT0gJmxjZGMwX2luZm8uY2hbMF0sCisJLnZzeW53X29mZnNldAk9IDIwLAorCS5jbGtzcmMJCT0gMSwKKwkuZmxhZ3MJCT0gU0hfTUlQSV9EU0lfSFNBQk0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaXBpZHNpMF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoLW1pcGktZHNpIiwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG1pcGlkc2kwX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gbWlwaWRzaTBfcmVzb3VyY2VzLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbWlwaWRzaTBfaW5mbywKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFnNWV2bV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmZXRoX2RldmljZSwKIAkma2V5c2NfZGV2aWNlLAogCSZmc2lfZGV2aWNlLAogCSZtbWNfZGV2aWNlLAorCSZpcmRhX2RldmljZSwKKwkmbGNkYzBfZGV2aWNlLAorCSZtaXBpZHNpMF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFnNWV2bV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTIyNCw2ICszNzksOCBAQAogCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQSU5UQ1IwQSkgfCAoMjw8MTApLCBQSU5UQ1IwQSk7CiB9CiAKKyNkZWZpbmUgRFNJMFBIWUNSCTB4ZTYxNTAwNmMKKwogc3RhdGljIHZvaWQgX19pbml0IGFnNWV2bV9pbml0KHZvaWQpCiB7CiAJc2g3M2EwX3Bpbm11eF9pbml0KCk7CkBAIC0yODcsNiArNDQ0LDI2IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJQUlTTEQsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUFPU0xELCBOVUxMKTsKIAorCS8qIElyREEgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUMjQxX0lSREFfT1VULCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUMjQyX0lSREFfSU4sICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUMjQzX0lSREFfRklSU0VMLCBOVUxMKTsKKworCS8qIExDRCBwYW5lbCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQyMTcsIE5VTEwpOyAvKiBSRVNFVCAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPUlQyMTcsIDApOworCW1kZWxheSgxKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BPUlQyMTcsIDEpOworCW1kZWxheSgxMDApOworCisJLyogTENEIGJhY2tsaWdodCBjb250cm9sbGVyICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDIzNSwgTlVMTCk7IC8qIFJFU0VUICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9SVDIzNSwgMCk7CisJbGNkX2JhY2tsaWdodF9yZXNldCgpOworCisJLyogTUlQSS1EU0kgY2xvY2sgc2V0dXAgKi8KKwlfX3Jhd193cml0ZWwoMHgyYTgwOTAxMCwgRFNJMFBIWUNSKTsKKwogI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCiAJLyogU2hhcmVkIGF0dHJpYnV0ZSBvdmVycmlkZSBlbmFibGUsIDY0Syo4d2F5ICovCiAJbDJ4MF9pbml0KF9faW8oMHhmMDEwMDAwMCksIDB4MDA0NjAwMDAsIDB4YzIwMDBmZmYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMKaW5kZXggM2NmMDk1MS4uODFkNjUzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jCkBAIC0xMzAzLDcgKzEzMDMsNyBAQAogCiAJbGNkY19pbmZvLmNsb2NrX3NvdXJjZQkJCT0gTENEQ19DTEtfQlVTOwogCWxjZGNfaW5mby5jaFswXS5pbnRlcmZhY2VfdHlwZQkJPSBSR0IxODsKLQlsY2RjX2luZm8uY2hbMF0uY2xvY2tfZGl2aWRlcgkJPSAyOworCWxjZGNfaW5mby5jaFswXS5jbG9ja19kaXZpZGVyCQk9IDM7CiAJbGNkY19pbmZvLmNoWzBdLmZsYWdzCQkJPSAwOwogCWxjZGNfaW5mby5jaFswXS5sY2Rfc2l6ZV9jZmcud2lkdGgJPSAxNTI7CiAJbGNkY19pbmZvLmNoWzBdLmxjZF9zaXplX2NmZy5oZWlnaHQJPSA5MTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzNldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzNldm0uYwppbmRleCA2ODZiMzA0Li5lZjQ2MTNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWczZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nM2V2bS5jCkBAIC0zNDcsNyArMzQ3LDYgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX09VVCwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9JTiwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9GSVJTRUwsIE5VTEwpOwotCXNldF9pcnFfdHlwZShldnQyaXJxKDB4NDgwKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKIAogCXNoNzM2N19hZGRfc3RhbmRhcmRfZGV2aWNlcygpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKaW5kZXggN2IxNWQyMS4uMTY1N2VhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYwpAQCAtMTY5LDkgKzE2OSw4IEBACiAgKglTVzEJfAlTVzMzCiAgKgkJfCBiaXQxIHwgYml0MiB8IGJpdDMgfCBiaXQ0CiAgKiAtLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLS0KLSAqIE1NQzAJICBPRkYJfCAgT0ZGIHwgIE9OICB8ICBPTiAgfCAgWAotICogTU1DMQkgIE9OCXwgIE9GRiB8ICBPTiAgfCAgWCAgIHwgT04KLSAqIFNESEkxICBPRkYJfCAgT04gIHwgICBYICB8ICBPRkYgfCBPTgorICogTU1DMCAgIE9GRgl8ICBPRkYgfCAgIFggIHwgIE9OICB8ICBYICAgICAgIChVc2UgTU1DSUYpCisgKiBTREhJMSAgT0ZGCXwgIE9OICB8ICAgWCAgfCAgT0ZGIHwgIFggICAgICAgKFVzZSBNRkRfU0hfTU9CSUxFX1NESEkpCiAgKgogICovCiAKQEAgLTMwNCw3ICszMDMsNyBAQAogCQkubGNkX2NmZyA9IG1hY2tlcmVsX2xjZGNfbW9kZXMsCiAJCS5udW1fY2ZnID0gQVJSQVlfU0laRShtYWNrZXJlbF9sY2RjX21vZGVzKSwKIAkJLmludGVyZmFjZV90eXBlCQk9IFJHQjI0LAotCQkuY2xvY2tfZGl2aWRlcgkJPSAyLAorCQkuY2xvY2tfZGl2aWRlcgkJPSAzLAogCQkuZmxhZ3MJCQk9IDAsCiAJCS5sY2Rfc2l6ZV9jZmcud2lkdGgJPSAxNTIsCiAJCS5sY2Rfc2l6ZV9jZmcuaGVpZ2h0CT0gOTEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYwppbmRleCA5YWE4ZDY4Li5lOTczMWI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKQEAgLTIzNCw3ICsyMzQsOSBAQAogCiAJdmFsdWUgPSBfX3Jhd19yZWFkbChQTExDMkNSKSAmIH4oMHgzZiA8PCAyNCk7CiAKLQlfX3Jhd193cml0ZWwoKHZhbHVlICYgfjB4ODAwMDAwMDApIHwgKChpZHggKyAxOSkgPDwgMjQpLCBQTExDMkNSKTsKKwlfX3Jhd193cml0ZWwodmFsdWUgfCAoKGlkeCArIDE5KSA8PCAyNCksIFBMTEMyQ1IpOworCisJY2xrLT5yYXRlID0gY2xrLT5mcmVxX3RhYmxlW2lkeF0uZnJlcXVlbmN5OwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYwppbmRleCA3MjBhNzE0Li43ZTU4OTA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3M2EwLmMKQEAgLTExOCw4ICsxMTgsMTYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG11bHQgPSAxOwogCi0JaWYgKF9fcmF3X3JlYWRsKFBMTEVDUikgJiAoMSA8PCBjbGstPmVuYWJsZV9iaXQpKQorCWlmIChfX3Jhd19yZWFkbChQTExFQ1IpICYgKDEgPDwgY2xrLT5lbmFibGVfYml0KSkgewogCQltdWx0ID0gKCgoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSA+PiAyNCkgJiAweDNmKSArIDEpOworCQkvKiBoYW5kbGUgQ0ZHIGJpdCBmb3IgUExMMSBhbmQgUExMMiAqLworCQlzd2l0Y2ggKGNsay0+ZW5hYmxlX2JpdCkgeworCQljYXNlIDE6CisJCWNhc2UgMjoKKwkJCWlmIChfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpICYgKDEgPDwgMjApKQorCQkJCW11bHQgKj0gMjsKKwkJfQorCX0KIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAqIG11bHQ7CiB9CkBAIC0yMTIsNyArMjIwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRpdjRfY2xrc1tESVY0X05SXSA9IHsKIAlbRElWNF9JXSA9IERJVjQoRlJRQ1JBLCAyMCwgMHhmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfWkddID0gRElWNChGUlFDUkEsIDE2LCAweGJmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKLQlbRElWNF9NM10gPSBESVY0KEZSUUNSQSwgOCwgMHhmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfTTNdID0gRElWNChGUlFDUkEsIDEyLCAweGZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9CXSA9IERJVjQoRlJRQ1JBLCA4LCAweGZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9NMV0gPSBESVY0KEZSUUNSQSwgNCwgMHhmZmYsIDApLAogCVtESVY0X00yXSA9IERJVjQoRlJRQ1JBLCAwLCAweGZmZiwgMCksCkBAIC0yNTUsMTAgKzI2MywxMCBAQAogfTsKIAogZW51bSB7IE1TVFAwMDEsCi0JTVNUUDEyNSwgTVNUUDExNiwKKwlNU1RQMTI5LCBNU1RQMTI4LCBNU1RQMTI3LCBNU1RQMTI2LCBNU1RQMTI1LCBNU1RQMTE4LCBNU1RQMTE2LCBNU1RQMTAwLAogCU1TVFAyMTksCiAJTVNUUDIwNywgTVNUUDIwNiwgTVNUUDIwNCwgTVNUUDIwMywgTVNUUDIwMiwgTVNUUDIwMSwgTVNUUDIwMCwKLQlNU1RQMzMxLCBNU1RQMzI5LCBNU1RQMzIzLCBNU1RQMzEyLAorCU1TVFAzMzEsIE1TVFAzMjksIE1TVFAzMjUsIE1TVFAzMjMsIE1TVFAzMTIsCiAJTVNUUDQxMSwgTVNUUDQxMCwgTVNUUDQwMywKIAlNU1RQX05SIH07CiAKQEAgLTI2Nyw4ICsyNzUsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbXN0cF9jbGtzW01TVFBfTlJdID0gewogCVtNU1RQMDAxXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjAsIDEsIDApLCAvKiBJSUMyICovCisJW01TVFAxMjldID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1IxLCAyOSwgMCksIC8qIENFVTEgKi8KKwlbTVNUUDEyOF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDI4LCAwKSwgLyogQ1NJMi1SWDEgKi8KKwlbTVNUUDEyN10gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDI3LCAwKSwgLyogQ0VVMCAqLworCVtNU1RQMTI2XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBTTVNUUENSMSwgMjYsIDApLCAvKiBDU0kyLVJYMCAqLwogCVtNU1RQMTI1XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IxLCAyNSwgMCksIC8qIFRNVTAgKi8KKwlbTVNUUDExOF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDE4LCAwKSwgLyogRFNJVFgwICovCiAJW01TVFAxMTZdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSMSwgMTYsIDApLCAvKiBJSUMwICovCisJW01TVFAxMDBdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1IxLCAwLCAwKSwgLyogTENEQzAgKi8KIAlbTVNUUDIxOV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgMTksIDApLCAvKiBTQ0lGQTcgKi8KIAlbTVNUUDIwN10gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgNywgMCksIC8qIFNDSUZBNSAqLwogCVtNU1RQMjA2XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCA2LCAwKSwgLyogU0NJRkIgKi8KQEAgLTI3OSw2ICsyOTMsNyBAQAogCVtNU1RQMjAwXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCAwLCAwKSwgLyogU0NJRkE0ICovCiAJW01TVFAzMzFdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjMsIDMxLCAwKSwgLyogU0NJRkE2ICovCiAJW01TVFAzMjldID0gTVNUUCgmcl9jbGssIFNNU1RQQ1IzLCAyOSwgMCksIC8qIENNVDEwICovCisJW01TVFAzMjVdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjMsIDI1LCAwKSwgLyogSXJEQSAqLwogCVtNU1RQMzIzXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjMsIDIzLCAwKSwgLyogSUlDMSAqLwogCVtNU1RQMzEyXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjMsIDEyLCAwKSwgLyogTU1DSUYwICovCiAJW01TVFA0MTFdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSNCwgMTEsIDApLCAvKiBJSUMzICovCkBAIC0yODgsMTYgKzMwMywzMiBAQAogCiAjZGVmaW5lIENMS0RFVl9DT05fSUQoX2lkLCBfY2xrKSB7IC5jb25faWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KICNkZWZpbmUgQ0xLREVWX0RFVl9JRChfaWQsIF9jbGspIHsgLmRldl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQorI2RlZmluZSBDTEtERVZfSUNLX0lEKF9jaWQsIF9kaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9jaWQsIC5kZXZfaWQgPSBfZGlkLCAuY2xrID0gX2NsayB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CiAJLyogbWFpbiBjbG9ja3MgKi8KIAlDTEtERVZfQ09OX0lEKCJyX2NsayIsICZyX2NsayksCiAKKwkvKiBESVY2IGNsb2NrcyAqLworCUNMS0RFVl9DT05fSUQoInZjazFfY2xrIiwgJmRpdjZfY2xrc1tESVY2X1ZDSzFdKSwKKwlDTEtERVZfQ09OX0lEKCJ2Y2syX2NsayIsICZkaXY2X2Nsa3NbRElWNl9WQ0syXSksCisJQ0xLREVWX0NPTl9JRCgidmNrM19jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfVkNLM10pLAorCUNMS0RFVl9JQ0tfSUQoImRzaXRfY2xrIiwgInNoLW1pcGktZHNpLjAiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJVF0pLAorCUNMS0RFVl9JQ0tfSUQoImRzaXRfY2xrIiwgInNoLW1pcGktZHNpLjEiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJVF0pLAorCUNMS0RFVl9JQ0tfSUQoImRzaTBwX2NsayIsICJzaC1taXBpLWRzaS4wIiwgJmRpdjZfY2xrc1tESVY2X0RTSTBQXSksCisJQ0xLREVWX0lDS19JRCgiZHNpMXBfY2xrIiwgInNoLW1pcGktZHNpLjEiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJMVBdKSwKKwogCS8qIE1TVFAzMiBjbG9ja3MgKi8KIAlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjIiLCAmbXN0cF9jbGtzW01TVFAwMDFdKSwgLyogSTJDMiAqLworCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9jZXUuMSIsICZtc3RwX2Nsa3NbTVNUUDEyOV0pLCAvKiBDRVUxICovCisJQ0xLREVWX0RFVl9JRCgic2gtbW9iaWxlLWNzaTIuMSIsICZtc3RwX2Nsa3NbTVNUUDEyOF0pLCAvKiBDU0kyLVJYMSAqLworCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9jZXUuMCIsICZtc3RwX2Nsa3NbTVNUUDEyN10pLCAvKiBDRVUwICovCisJQ0xLREVWX0RFVl9JRCgic2gtbW9iaWxlLWNzaTIuMCIsICZtc3RwX2Nsa3NbTVNUUDEyNl0pLCAvKiBDU0kyLVJYMCAqLwogCUNMS0RFVl9ERVZfSUQoInNoX3RtdS4wIiwgJm1zdHBfY2xrc1tNU1RQMTI1XSksIC8qIFRNVTAwICovCiAJQ0xLREVWX0RFVl9JRCgic2hfdG11LjEiLCAmbXN0cF9jbGtzW01TVFAxMjVdKSwgLyogVE1VMDEgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1taXBpLWRzaS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE4XSksIC8qIERTSVRYICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE2XSksIC8qIEkyQzAgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfbGNkY19mYi4wIiwgJm1zdHBfY2xrc1tNU1RQMTAwXSksIC8qIExDREMwICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjciLCAmbXN0cF9jbGtzW01TVFAyMTldKSwgLyogU0NJRkE3ICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjUiLCAmbXN0cF9jbGtzW01TVFAyMDddKSwgLyogU0NJRkE1ICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjgiLCAmbXN0cF9jbGtzW01TVFAyMDZdKSwgLyogU0NJRkIgKi8KQEAgLTMwOCw2ICszMzksNyBAQAogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS40IiwgJm1zdHBfY2xrc1tNU1RQMjAwXSksIC8qIFNDSUZBNCAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS42IiwgJm1zdHBfY2xrc1tNU1RQMzMxXSksIC8qIFNDSUZBNiAqLwogCUNMS0RFVl9ERVZfSUQoInNoX2NtdC4xMCIsICZtc3RwX2Nsa3NbTVNUUDMyOV0pLCAvKiBDTVQxMCAqLworCUNMS0RFVl9ERVZfSUQoInNoX2lyZGEuMCIsICZtc3RwX2Nsa3NbTVNUUDMyNV0pLCAvKiBJckRBICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4xIiwgJm1zdHBfY2xrc1tNU1RQMzIzXSksIC8qIEkyQzEgKi8KIAlDTEtERVZfREVWX0lEKCJzaF9tbWNpZi4wIiwgJm1zdHBfY2xrc1tNU1RQMzEyXSksIC8qIE1NQ0lGMCAqLwogCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMyIsICZtc3RwX2Nsa3NbTVNUUDQxMV0pLCAvKiBJMkMzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9oZWFkLWFwNGV2Yi50eHQgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9oZWFkLWFwNGV2Yi50eHQKaW5kZXggZWZkMzY4Ny4uMzAyOWFiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGVhZC1hcDRldmIudHh0CisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2hlYWQtYXA0ZXZiLnR4dApAQCAtNiwxMyArNiwxMCBAQAogRVcgMHhFNjAyMDAwNCwgMHhBNTAwCiBFVyAweEU2MDMwMDA0LCAweEE1MDAKIAotREQgMHgwMTAwMTAwMCwgMHgwMTAwMTAwMAotCiBMSVNUICJHUElPIFNldHRpbmciCiBFQiAweEU2MDUxMDEzLCAweEEyCiAKIExJU1QgIkNQRyIKLUVEIDB4RTYxNTAwODAsIDB4MDAwMDAxODAKIEVEIDB4RTYxNTAwQzAsIDB4MDAwMDAwMDIKIAogV0FJVCAxLCAweEZFNDAwMDlDCkBAIC0zNyw2ICszNCw5IEBACiAKIFdBSVQgMSwgMHhGRTQwMDA5QwogCitMSVNUICJTVUIvVVNCQ2xrIgorRUQgMHhFNjE1MDA4MCwgMHgwMDAwMDE4MAorCiBMSVNUICJCU0MiCiBFRCAweEZFQzEwMDAwLCAweDAwRTAwMDFCCiAKQEAgLTUzLDcgKzUzLDcgQEAKIEVEIDB4RkU0MDAwNEMsIDB4MDAxMTAyMDkKIEVEIDB4RkU0MDAwMTAsIDB4MDAwMDAwODcKIAotV0FJVCAxMCwgMHhGRTQwMDA5QworV0FJVCAzMCwgMHhGRTQwMDA5QwogCiBFRCAweEZFNDAwMDg0LCAweDAwMDAwMDNGCiBFQiAweEZFNTAwMDAwLCAweDAwCkBAIC04NCw3ICs4NCw3IEBACiAKIFdBSVQgMSwgMHhGRTQwMDA5QwogCi1FRCAweEU2MTUwMzU0LCAweDAwMDAwMDAyCitFRCAweEZFNDAwMzU0LCAweDAxQUQ4MDAyCiAKIExJU1QgIlNDSUYwIC0gU2VyaWFsIHBvcnQgZm9yIGVhcmx5cHJpbnRrIgogRUIgMHhFNjA1MzA5OCwgMHgxMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGVhZC1tYWNrZXJlbC50eHQgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9oZWFkLW1hY2tlcmVsLnR4dAppbmRleCBlZmQzNjg3Li4zMDI5YWJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9oZWFkLW1hY2tlcmVsLnR4dAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9oZWFkLW1hY2tlcmVsLnR4dApAQCAtNiwxMyArNiwxMCBAQAogRVcgMHhFNjAyMDAwNCwgMHhBNTAwCiBFVyAweEU2MDMwMDA0LCAweEE1MDAKIAotREQgMHgwMTAwMTAwMCwgMHgwMTAwMTAwMAotCiBMSVNUICJHUElPIFNldHRpbmciCiBFQiAweEU2MDUxMDEzLCAweEEyCiAKIExJU1QgIkNQRyIKLUVEIDB4RTYxNTAwODAsIDB4MDAwMDAxODAKIEVEIDB4RTYxNTAwQzAsIDB4MDAwMDAwMDIKIAogV0FJVCAxLCAweEZFNDAwMDlDCkBAIC0zNyw2ICszNCw5IEBACiAKIFdBSVQgMSwgMHhGRTQwMDA5QwogCitMSVNUICJTVUIvVVNCQ2xrIgorRUQgMHhFNjE1MDA4MCwgMHgwMDAwMDE4MAorCiBMSVNUICJCU0MiCiBFRCAweEZFQzEwMDAwLCAweDAwRTAwMDFCCiAKQEAgLTUzLDcgKzUzLDcgQEAKIEVEIDB4RkU0MDAwNEMsIDB4MDAxMTAyMDkKIEVEIDB4RkU0MDAwMTAsIDB4MDAwMDAwODcKIAotV0FJVCAxMCwgMHhGRTQwMDA5QworV0FJVCAzMCwgMHhGRTQwMDA5QwogCiBFRCAweEZFNDAwMDg0LCAweDAwMDAwMDNGCiBFQiAweEZFNTAwMDAwLCAweDAwCkBAIC04NCw3ICs4NCw3IEBACiAKIFdBSVQgMSwgMHhGRTQwMDA5QwogCi1FRCAweEU2MTUwMzU0LCAweDAwMDAwMDAyCitFRCAweEZFNDAwMzU0LCAweDAxQUQ4MDAyCiAKIExJU1QgIlNDSUYwIC0gU2VyaWFsIHBvcnQgZm9yIGVhcmx5cHJpbnRrIgogRUIgMHhFNjA1MzA5OCwgMHgxMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbW1jaWYtYXA0ZWIuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tY2lmLWFwNGViLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThkMDJiZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tY2lmLWFwNGViLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBNTUNJRl9BUDRFQl9ICisjZGVmaW5lIE1NQ0lGX0FQNEVCX0gKKworI2RlZmluZSBQT1JUMTg1Q1IgICAgICAodm9pZCBfX2lvbWVtICopMHhlNjA1MjBiOQorI2RlZmluZSBQT1JUMTg2Q1IgICAgICAodm9pZCBfX2lvbWVtICopMHhlNjA1MjBiYQorI2RlZmluZSBQT1JUMTg3Q1IgICAgICAodm9pZCBfX2lvbWVtICopMHhlNjA1MjBiYgorI2RlZmluZSBQT1JUMTg4Q1IgICAgICAodm9pZCBfX2lvbWVtICopMHhlNjA1MjBiYworCisjZGVmaW5lIFBPUlRSMTkxXzE2MERSICh2b2lkIF9faW9tZW0gKikweGU2MDU2MDE0CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNpZl9pbml0X3Byb2dyZXNzKHZvaWQpCit7CisgICAgICAgLyogSW5pdGlhbGlzZSBMRURTMS00CisgICAgICAgICogcmVnaXN0ZXJzOiBQT1JUMTg1Q1ItUE9SVDE4OENSIChMRUQxLUxFRDQgQ29udHJvbCkKKyAgICAgICAgKiB2YWx1ZTogICAgIDB4MTAgLSBlbmFibGUgb3V0cHV0CisgICAgICAgICovCisgICAgICAgX19yYXdfd3JpdGViKDB4MTAsIFBPUlQxODVDUik7CisgICAgICAgX19yYXdfd3JpdGViKDB4MTAsIFBPUlQxODZDUik7CisgICAgICAgX19yYXdfd3JpdGViKDB4MTAsIFBPUlQxODdDUik7CisgICAgICAgX19yYXdfd3JpdGViKDB4MTAsIFBPUlQxODhDUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNpZl91cGRhdGVfcHJvZ3Jlc3MoaW50IG4pCit7CisJX19yYXdfd3JpdGVsKChfX3Jhd19yZWFkbChQT1JUUjE5MV8xNjBEUikgJiB+KDB4ZiA8PCAyNSkpIHwKKwkJICAgICAoMSA8PCAoMjUgKyBuKSksIFBPUlRSMTkxXzE2MERSKTsKK30KKworI2VuZGlmIC8qIE1NQ0lGX0FQNEVCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tY2lmLW1hY2tlcmVsLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tbWNpZi1tYWNrZXJlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNGY2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tbWNpZi1tYWNrZXJlbC5oCkBAIC0wLDAgKzEsMzkgQEAKKyNpZm5kZWYgTU1DSUZfTUFDS0VSRUxfSAorI2RlZmluZSBNTUNJRl9NQUNLRVJFTF9ICisKKyNkZWZpbmUgUE9SVDBDUiAgICAgICh2b2lkIF9faW9tZW0gKikweGU2MDUxMDAwCisjZGVmaW5lIFBPUlQxQ1IgICAgICAodm9pZCBfX2lvbWVtICopMHhlNjA1MTAwMQorI2RlZmluZSBQT1JUMkNSICAgICAgKHZvaWQgX19pb21lbSAqKTB4ZTYwNTEwMDIKKyNkZWZpbmUgUE9SVDE1OUNSICAgICh2b2lkIF9faW9tZW0gKikweGU2MDUwMDlmCisKKyNkZWZpbmUgUE9SVFIwMzFfMDAwRFIgKHZvaWQgX19pb21lbSAqKTB4ZTYwNTUwMDAKKyNkZWZpbmUgUE9SVEwxNTlfMTI4RFIgKHZvaWQgX19pb21lbSAqKTB4ZTYwNTQwMTAKKworc3RhdGljIGlubGluZSB2b2lkIG1tY2lmX2luaXRfcHJvZ3Jlc3Modm9pZCkKK3sKKyAgICAgICAvKiBJbml0aWFsaXNlIExFRFMwLTMKKyAgICAgICAgKiByZWdpc3RlcnM6IFBPUlQwQ1ItUE9SVDJDUixQT1JUMTU5Q1IgKExFRDAtTEVEMyBDb250cm9sKQorICAgICAgICAqIHZhbHVlOiAgICAgMHgxMCAtIGVuYWJsZSBvdXRwdXQKKyAgICAgICAgKi8KKyAgICAgICBfX3Jhd193cml0ZWIoMHgxMCwgUE9SVDBDUik7CisgICAgICAgX19yYXdfd3JpdGViKDB4MTAsIFBPUlQxQ1IpOworICAgICAgIF9fcmF3X3dyaXRlYigweDEwLCBQT1JUMkNSKTsKKyAgICAgICBfX3Jhd193cml0ZWIoMHgxMCwgUE9SVDE1OUNSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1tY2lmX3VwZGF0ZV9wcm9ncmVzcyhpbnQgbikKK3sKKwl1bnNpZ25lZCBhID0gMCwgYiA9IDA7CisKKwlpZiAobiA8IDMpCisJCWEgPSAxIDw8IG47CisJZWxzZQorCQliID0gMSA8PCAzMTsKKworCV9fcmF3X3dyaXRlbCgoX19yYXdfcmVhZGwoUE9SVFIwMzFfMDAwRFIpICYgfjB4NykgfCBhLAorCQkgICAgIFBPUlRSMDMxXzAwMERSKTsKKwlfX3Jhd193cml0ZWwoKF9fcmF3X3JlYWRsKFBPUlRMMTU5XzEyOERSKSAmIH4oMSA8PCAzMSkpIHwgYiwKKwkJICAgICBQT1JUTDE1OV8xMjhEUik7Cit9CisKKyNlbmRpZiAvKiBNTUNJRl9NQUNLRVJFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tbWNpZi5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbW1jaWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGRjMzI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbW1jaWYuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIE1NQ0lGX0gKKyNkZWZpbmUgTU1DSUZfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgkJYm9hcmQgc3BlY2lmaWMgc2V0dGluZ3MKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBDT05GSUdfTUFDSF9BUDRFVkIKKyNpbmNsdWRlICJtYWNoL21tY2lmLWFwNGViLmgiCisjZWxpZiBDT05GSUdfTUFDSF9NQUNLRVJFTAorI2luY2x1ZGUgIm1hY2gvbW1jaWYtbWFja2VyZWwuaCIKKyNlbHNlCisjZXJyb3IgInVuc3VwcG9ydGVkIGJvYXJkLiIKKyNlbmRpZgorCisjZW5kaWYgLyogTU1DSUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jCmluZGV4IGY3OGExZWEuLmNhNWY5ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMKQEAgLTM2NSw2ICszNjUsNyBAQAogCiBlbnVtIHsKIAlVTlVTRURfSU5UQ1MgPSAwLAorCUVOQUJMRURfSU5UQ1MsCiAKIAlJTlRDUywKIApAQCAtNDEzLDcgKzQxNCw3IEBACiAJQ01UNCwKIAlEU0lUWDFfRFNJVFgxXzAsCiAJRFNJVFgxX0RTSVRYMV8xLAotCS8qIE1GSVMyICovCisJTUZJUzJfSU5UQ1MsIC8qIFByaW9yaXR5IGFsd2F5cyBlbmFibGVkIHVzaW5nIEVOQUJMRURfSU5UQ1MgKi8KIAlDUE9SVFMyUiwKIAkvKiBDRUMgKi8KIAlKUFU2RSwKQEAgLTQ3Nyw3ICs0NzgsNyBAQAogCUlOVENTX1ZFQ1QoQ01UNCwgMHgxOTgwKSwKIAlJTlRDU19WRUNUKERTSVRYMV9EU0lUWDFfMCwgMHgxOWEwKSwKIAlJTlRDU19WRUNUKERTSVRYMV9EU0lUWDFfMSwgMHgxOWMwKSwKLQkvKiBNRklTMiAqLworCUlOVENTX1ZFQ1QoTUZJUzJfSU5UQ1MsIDB4MWEwMCksCiAJSU5UQ1NfVkVDVChDUE9SVFMyUiwgMHgxYTIwKSwKIAkvKiBDRUMgKi8KIAlJTlRDU19WRUNUKEpQVTZFLCAweDFhODApLApAQCAtNTQzLDcgKzU0NCw3IEBACiAJICB7IDAsIFRNVTFfVFVOSTIsIFRNVTFfVFVOSTEsIFRNVTFfVFVOSTAsCiAJICAgIENNVDQsIERTSVRYMV9EU0lUWDFfMCwgRFNJVFgxX0RTSVRYMV8xLCAwIH0gfSwKIAl7IDB4ZmZkNTAxOWMsIDB4ZmZkNTAxZGMsIDgsIC8qIElNUjdTQTMgLyBJTUNSN1NBMyAqLwotCSAgeyAwLCBDUE9SVFMyUiwgMCwgMCwKKwkgIHsgTUZJUzJfSU5UQ1MsIENQT1JUUzJSLCAwLCAwLAogCSAgICBKUFU2RSwgMCwgMCwgMCB9IH0sCiAJeyAweGZmZDIwMTA0LCAwLCAxNiwgLyogSU5UQU1BU0sgKi8KIAkgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKQEAgLTU3MSw3ICs1NzIsOCBAQAogCXsgMHhmZmQ1MDAzMCwgMCwgMTYsIDQsIC8qIElQUk1TMyAqLyB7IFRNVTEsIDAsIDAsIDAgfSB9LAogCXsgMHhmZmQ1MDAzNCwgMCwgMTYsIDQsIC8qIElQUk5TMyAqLyB7IENNVDQsIERTSVRYMV9EU0lUWDFfMCwKIAkJCQkJICAgICAgIERTSVRYMV9EU0lUWDFfMSwgMCB9IH0sCi0JeyAweGZmZDUwMDM4LCAwLCAxNiwgNCwgLyogSVBST1MzICovIHsgMCwgQ1BPUlRTMlIsIDAsIDAgfSB9LAorCXsgMHhmZmQ1MDAzOCwgMCwgMTYsIDQsIC8qIElQUk9TMyAqLyB7IEVOQUJMRURfSU5UQ1MsIENQT1JUUzJSLAorCQkJCQkgICAgICAgMCwgMCB9IH0sCiAJeyAweGZmZDUwMDNjLCAwLCAxNiwgNCwgLyogSVBSUFMzICovIHsgSlBVNkUsIDAsIDAsIDAgfSB9LAogfTsKIApAQCAtNTkwLDYgKzU5Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19kZXNjIGludGNzX2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkubmFtZSA9ICJzaDczNzItaW50Y3MiLAorCS5mb3JjZV9lbmFibGUgPSBFTkFCTEVEX0lOVENTLAogCS5yZXNvdXJjZSA9IGludGNzX3Jlc291cmNlcywKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW50Y3NfcmVzb3VyY2VzKSwKIAkuaHcgPSBJTlRDX0hXX0RFU0MoaW50Y3NfdmVjdG9ycywgaW50Y3NfZ3JvdXBzLCBpbnRjc19tYXNrX3JlZ2lzdGVycywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYwppbmRleCAzMjJkOGQ1Li41ZDBlMTUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jCkBAIC0yNTIsMTAgKzI1MiwxMSBAQAogCiB2b2lkIF9faW5pdCBzaDczYTBfaW5pdF9pcnEodm9pZCkKIHsKLQl2b2lkIF9faW9tZW0gKmdpY19iYXNlID0gX19pbygweGYwMDAxMDAwKTsKKwl2b2lkIF9faW9tZW0gKmdpY19kaXN0X2Jhc2UgPSBfX2lvKDB4ZjAwMDEwMDApOworCXZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlID0gX19pbygweGYwMDAwMTAwKTsKIAl2b2lkIF9faW9tZW0gKmludGV2dHNhID0gaW9yZW1hcF9ub2NhY2hlKDB4ZmZkMjAxMDAsIFBBR0VfU0laRSk7CiAKLQlnaWNfaW5pdCgwLCAyOSwgZ2ljX2Jhc2UsIGdpY19iYXNlKTsKKwlnaWNfaW5pdCgwLCAyOSwgZ2ljX2Rpc3RfYmFzZSwgZ2ljX2NwdV9iYXNlKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y3NfZGVzYyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvY2xvY2suYwppbmRleCAxOGZlYmY5Li45OGJjN2VkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9jbG9jay5jCkBAIC0xMyw4ICsxMyw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bWFjaC9taXNjX3JlZ3MuaD4KICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9taXNjX3JlZ3MuaD4KIAogLyogcm9vdCBjbGtzICovCiAvKiAzMiBLSHogb3NjaWxsYXRvciBjbG9jayAqLwpAQCAtMzksMTggKzM5LDQzIEBACiB9OwogCiAvKiBjbG9jayBkZXJpdmVkIGZyb20gMjQgTUh6IG9zYyBjbGsgKi8KKy8qIHBsbCBtYXNrcyBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxsX2Nsa19tYXNrcyBwbGwxX21hc2tzID0geworCS5tb2RlX21hc2sgPSBQTExfTU9ERV9NQVNLLAorCS5tb2RlX3NoaWZ0ID0gUExMX01PREVfU0hJRlQsCisJLm5vcm1fZmRia19tX21hc2sgPSBQTExfTk9STV9GREJLX01fTUFTSywKKwkubm9ybV9mZGJrX21fc2hpZnQgPSBQTExfTk9STV9GREJLX01fU0hJRlQsCisJLmRpdGhfZmRia19tX21hc2sgPSBQTExfRElUSF9GREJLX01fTUFTSywKKwkuZGl0aF9mZGJrX21fc2hpZnQgPSBQTExfRElUSF9GREJLX01fU0hJRlQsCisJLmRpdl9wX21hc2sgPSBQTExfRElWX1BfTUFTSywKKwkuZGl2X3Bfc2hpZnQgPSBQTExfRElWX1BfU0hJRlQsCisJLmRpdl9uX21hc2sgPSBQTExfRElWX05fTUFTSywKKwkuZGl2X25fc2hpZnQgPSBQTExfRElWX05fU0hJRlQsCit9OworCiAvKiBwbGwxIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCiBzdGF0aWMgc3RydWN0IHBsbF9jbGtfY29uZmlnIHBsbDFfY29uZmlnID0gewogCS5tb2RlX3JlZyA9IFBMTDFfQ1RSLAogCS5jZmdfcmVnID0gUExMMV9GUlEsCisJLm1hc2tzID0gJnBsbDFfbWFza3MsCit9OworCisvKiBwbGwgcmF0ZSBjb25maWd1cmF0aW9uIHRhYmxlLCBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgcmF0ZXMgKi8KK3N0cnVjdCBwbGxfcmF0ZV90YmwgcGxsX3J0YmxbXSA9IHsKKwl7Lm1vZGUgPSAwLCAubSA9IDB4ODUsIC5uID0gMHgwQywgLnAgPSAweDF9LCAvKiAyNjYgTUh6ICovCisJey5tb2RlID0gMCwgLm0gPSAweEE2LCAubiA9IDB4MEMsIC5wID0gMHgxfSwgLyogMzMyIE1IeiAqLwogfTsKIAogLyogUExMMSBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgcGxsMV9jbGsgPSB7CisJLmZsYWdzID0gRU5BQkxFRF9PTl9JTklULAogCS5wY2xrID0gJm9zY18yNG1fY2xrLAogCS5lbl9yZWcgPSBQTEwxX0NUUiwKIAkuZW5fcmVnX2JpdCA9IFBMTF9FTkFCTEUsCi0JLnJlY2FsYyA9ICZwbGwxX2Nsa19yZWNhbGMsCisJLmNhbGNfcmF0ZSA9ICZwbGxfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmcGxsX2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJnBsbF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge3BsbF9ydGJsLCBBUlJBWV9TSVpFKHBsbF9ydGJsKSwgMX0sCiAJLnByaXZhdGVfZGF0YSA9ICZwbGwxX2NvbmZpZywKIH07CiAKQEAgLTc2LDM2ICsxMDEsODMgQEAKIAkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCisvKiBhaGIgbWFza3Mgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IGJ1c19jbGtfbWFza3MgYWhiX21hc2tzID0geworCS5tYXNrID0gUExMX0hDTEtfUkFUSU9fTUFTSywKKwkuc2hpZnQgPSBQTExfSENMS19SQVRJT19TSElGVCwKK307CisKIC8qIGFoYiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwogc3RhdGljIHN0cnVjdCBidXNfY2xrX2NvbmZpZyBhaGJfY29uZmlnID0gewogCS5yZWcgPSBDT1JFX0NMS19DRkcsCi0JLm1hc2sgPSBQTExfSENMS19SQVRJT19NQVNLLAotCS5zaGlmdCA9IFBMTF9IQ0xLX1JBVElPX1NISUZULAorCS5tYXNrcyA9ICZhaGJfbWFza3MsCit9OworCisvKiBhaGIgcmF0ZSBjb25maWd1cmF0aW9uIHRhYmxlLCBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgcmF0ZXMgKi8KK3N0cnVjdCBidXNfcmF0ZV90YmwgYnVzX3J0YmxbXSA9IHsKKwl7LmRpdiA9IDN9LCAvKiA9PSBwYXJlbnQgZGl2aWRlZCBieSA0ICovCisJey5kaXYgPSAyfSwgLyogPT0gcGFyZW50IGRpdmlkZWQgYnkgMyAqLworCXsuZGl2ID0gMX0sIC8qID09IHBhcmVudCBkaXZpZGVkIGJ5IDIgKi8KKwl7LmRpdiA9IDB9LCAvKiA9PSBwYXJlbnQgZGl2aWRlZCBieSAxICovCiB9OwogCiAvKiBhaGIgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGFoYl9jbGsgPSB7CiAJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCiAJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZidXNfY2FsY19yYXRlLAogCS5yZWNhbGMgPSAmYnVzX2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmJ1c19jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2J1c19ydGJsLCBBUlJBWV9TSVpFKGJ1c19ydGJsKSwgMn0sCiAJLnByaXZhdGVfZGF0YSA9ICZhaGJfY29uZmlnLAogfTsKIAotLyogdWFydCBjb25maWd1cmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyB1YXJ0X2NvbmZpZyA9IHsKKy8qIGF1eGlsaWFyeSBzeW50aGVzaXplcnMgbWFza3MgKi8KK3N0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19tYXNrcyBhdXhfbWFza3MgPSB7CisJLmVxX3NlbF9tYXNrID0gQVVYX0VRX1NFTF9NQVNLLAorCS5lcV9zZWxfc2hpZnQgPSBBVVhfRVFfU0VMX1NISUZULAorCS5lcTFfbWFzayA9IEFVWF9FUTFfU0VMLAorCS5lcTJfbWFzayA9IEFVWF9FUTJfU0VMLAorCS54c2NhbGVfc2VsX21hc2sgPSBBVVhfWFNDQUxFX01BU0ssCisJLnhzY2FsZV9zZWxfc2hpZnQgPSBBVVhfWFNDQUxFX1NISUZULAorCS55c2NhbGVfc2VsX21hc2sgPSBBVVhfWVNDQUxFX01BU0ssCisJLnlzY2FsZV9zZWxfc2hpZnQgPSBBVVhfWVNDQUxFX1NISUZULAorfTsKKworLyogdWFydCBzeW50aCBjb25maWd1cmF0aW9ucyAqLworc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyB1YXJ0X3N5bnRoX2NvbmZpZyA9IHsKIAkuc3ludGhfcmVnID0gVUFSVF9DTEtfU1lOVCwKKwkubWFza3MgPSAmYXV4X21hc2tzLAorfTsKKworLyogYXV4IHJhdGUgY29uZmlndXJhdGlvbiB0YWJsZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzICovCitzdHJ1Y3QgYXV4X3JhdGVfdGJsIGF1eF9ydGJsW10gPSB7CisJLyogRm9yIFBMTDEgPSAzMzIgTUh6ICovCisJey54c2NhbGUgPSAxLCAueXNjYWxlID0gOCwgLmVxID0gMX0sIC8qIDQxLjUgTUh6ICovCisJey54c2NhbGUgPSAxLCAueXNjYWxlID0gNCwgLmVxID0gMX0sIC8qIDgzIE1IeiAqLworCXsueHNjYWxlID0gMSwgLnlzY2FsZSA9IDIsIC5lcSA9IDF9LCAvKiAxNjYgTUh6ICovCit9OworCisvKiB1YXJ0IHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0X3N5bnRoX2NsayA9IHsKKwkuZW5fcmVnID0gVUFSVF9DTEtfU1lOVCwKKwkuZW5fcmVnX2JpdCA9IEFVWF9TWU5UX0VOQiwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmF1eF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmYXV4X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7YXV4X3J0YmwsIEFSUkFZX1NJWkUoYXV4X3J0YmwpLCAxfSwKKwkucHJpdmF0ZV9kYXRhID0gJnVhcnRfc3ludGhfY29uZmlnLAogfTsKIAogLyogdWFydCBwYXJlbnRzICovCiBzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyB1YXJ0X3BjbGtfaW5mb1tdID0gewogCXsKLQkJLnBjbGsgPSAmcGxsMV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDFfTUFTSywKLQkJLnNjYWxhYmxlID0gMSwKKwkJLnBjbGsgPSAmdWFydF9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCiAJfSwgewogCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDNfTUFTSywKLQkJLnNjYWxhYmxlID0gMCwKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwzX1ZBTCwKIAl9LAogfTsKIApAQCAtMTIzLDI1ICsxOTUsMzUgQEAKIAkuZW5fcmVnX2JpdCA9IFVBUlRfQ0xLX0VOQiwKIAkucGNsa19zZWwgPSAmdWFydF9wY2xrX3NlbCwKIAkucGNsa19zZWxfc2hpZnQgPSBVQVJUX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmF1eF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmdWFydF9jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAogLyogZmlyZGEgY29uZmlndXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgZmlyZGFfY29uZmlnID0geworc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyBmaXJkYV9zeW50aF9jb25maWcgPSB7CiAJLnN5bnRoX3JlZyA9IEZJUkRBX0NMS19TWU5ULAorCS5tYXNrcyA9ICZhdXhfbWFza3MsCit9OworCisvKiBmaXJkYSBzeW50aCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZmlyZGFfc3ludGhfY2xrID0geworCS5lbl9yZWcgPSBGSVJEQV9DTEtfU1lOVCwKKwkuZW5fcmVnX2JpdCA9IEFVWF9TWU5UX0VOQiwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmF1eF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmYXV4X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7YXV4X3J0YmwsIEFSUkFZX1NJWkUoYXV4X3J0YmwpLCAxfSwKKwkucHJpdmF0ZV9kYXRhID0gJmZpcmRhX3N5bnRoX2NvbmZpZywKIH07CiAKIC8qIGZpcmRhIHBhcmVudHMgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNsa19pbmZvIGZpcmRhX3BjbGtfaW5mb1tdID0gewogCXsKLQkJLnBjbGsgPSAmcGxsMV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDFfTUFTSywKLQkJLnNjYWxhYmxlID0gMSwKKwkJLnBjbGsgPSAmZmlyZGFfc3ludGhfY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDFfVkFMLAogCX0sIHsKIAkJLnBjbGsgPSAmcGxsM180OG1fY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwzX01BU0ssCi0JCS5zY2FsYWJsZSA9IDAsCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCiAJfSwKIH07CiAKQEAgLTE1OSw3MyArMjQxLDE1NSBAQAogCS5lbl9yZWdfYml0ID0gRklSREFfQ0xLX0VOQiwKIAkucGNsa19zZWwgPSAmZmlyZGFfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gRklSREFfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZmaXJkYV9jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKworLyogZ3B0IHN5bnRoZXNpemVyIG1hc2tzICovCitzdGF0aWMgc3RydWN0IGdwdF9jbGtfbWFza3MgZ3B0X21hc2tzID0geworCS5tc2NhbGVfc2VsX21hc2sgPSBHUFRfTVNDQUxFX01BU0ssCisJLm1zY2FsZV9zZWxfc2hpZnQgPSBHUFRfTVNDQUxFX1NISUZULAorCS5uc2NhbGVfc2VsX21hc2sgPSBHUFRfTlNDQUxFX01BU0ssCisJLm5zY2FsZV9zZWxfc2hpZnQgPSBHUFRfTlNDQUxFX1NISUZULAorfTsKKworLyogZ3B0IHJhdGUgY29uZmlndXJhdGlvbiB0YWJsZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzICovCitzdHJ1Y3QgZ3B0X3JhdGVfdGJsIGdwdF9ydGJsW10gPSB7CisJLyogRm9yIHBsbDEgPSAzMzIgTUh6ICovCisJey5tc2NhbGUgPSA0LCAubnNjYWxlID0gMH0sIC8qIDQxLjUgTUh6ICovCisJey5tc2NhbGUgPSAyLCAubnNjYWxlID0gMH0sIC8qIDU1LjMgTUh6ICovCisJey5tc2NhbGUgPSAxLCAubnNjYWxlID0gMH0sIC8qIDgzIE1IeiAqLworfTsKKworLyogZ3B0MCBzeW50aCBjbGsgY29uZmlnKi8KK3N0YXRpYyBzdHJ1Y3QgZ3B0X2Nsa19jb25maWcgZ3B0MF9zeW50aF9jb25maWcgPSB7CisJLnN5bnRoX3JlZyA9IFBSU0MxX0NMS19DRkcsCisJLm1hc2tzID0gJmdwdF9tYXNrcywKK307CisKKy8qIGdwdCBzeW50aCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MF9zeW50aF9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZncHRfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmZ3B0X2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmdwdF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2dwdF9ydGJsLCBBUlJBWV9TSVpFKGdwdF9ydGJsKSwgMn0sCisJLnByaXZhdGVfZGF0YSA9ICZncHQwX3N5bnRoX2NvbmZpZywKIH07CiAKIC8qIGdwdCBwYXJlbnRzICovCi1zdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBncHRfcGNsa19pbmZvW10gPSB7CitzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBncHQwX3BjbGtfaW5mb1tdID0gewogCXsKLQkJLnBjbGsgPSAmcGxsMV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDFfTUFTSywKLQkJLnNjYWxhYmxlID0gMSwKKwkJLnBjbGsgPSAmZ3B0MF9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCiAJfSwgewogCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDNfTUFTSywKLQkJLnNjYWxhYmxlID0gMCwKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwzX1ZBTCwKIAl9LAogfTsKIAogLyogZ3B0IHBhcmVudCBzZWxlY3Qgc3RydWN0dXJlICovCi1zdGF0aWMgc3RydWN0IHBjbGtfc2VsIGdwdF9wY2xrX3NlbCA9IHsKLQkucGNsa19pbmZvID0gZ3B0X3BjbGtfaW5mbywKLQkucGNsa19jb3VudCA9IEFSUkFZX1NJWkUoZ3B0X3BjbGtfaW5mbyksCitzdGF0aWMgc3RydWN0IHBjbGtfc2VsIGdwdDBfcGNsa19zZWwgPSB7CisJLnBjbGtfaW5mbyA9IGdwdDBfcGNsa19pbmZvLAorCS5wY2xrX2NvdW50ID0gQVJSQVlfU0laRShncHQwX3BjbGtfaW5mbyksCiAJLnBjbGtfc2VsX3JlZyA9IFBFUklQX0NMS19DRkcsCiAJLnBjbGtfc2VsX21hc2sgPSBHUFRfQ0xLX01BU0ssCiB9OwogCi0vKiBncHQwIGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGdwdDBfY29uZmlnID0gewotCS5zeW50aF9yZWcgPSBQUlNDMV9DTEtfQ0ZHLAotfTsKLQogLyogZ3B0MCB0aW1lciBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MF9jbGsgPSB7CiAJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCi0JLnBjbGtfc2VsID0gJmdwdF9wY2xrX3NlbCwKKwkucGNsa19zZWwgPSAmZ3B0MF9wY2xrX3NlbCwKIAkucGNsa19zZWxfc2hpZnQgPSBHUFQwX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmZ3B0MF9jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAotLyogZ3B0MSBjb25maWd1cmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyBncHQxX2NvbmZpZyA9IHsKKy8qIGdwdDEgc3ludGggY2xrIGNvbmZpZ3VyYXRpb25zICovCitzdGF0aWMgc3RydWN0IGdwdF9jbGtfY29uZmlnIGdwdDFfc3ludGhfY29uZmlnID0gewogCS5zeW50aF9yZWcgPSBQUlNDMl9DTEtfQ0ZHLAorCS5tYXNrcyA9ICZncHRfbWFza3MsCit9OworCisvKiBncHQxIHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBncHQxX3N5bnRoX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmdwdF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmZ3B0X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7Z3B0X3J0YmwsIEFSUkFZX1NJWkUoZ3B0X3J0YmwpLCAyfSwKKwkucHJpdmF0ZV9kYXRhID0gJmdwdDFfc3ludGhfY29uZmlnLAorfTsKKworc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gZ3B0MV9wY2xrX2luZm9bXSA9IHsKKwl7CisJCS5wY2xrID0gJmdwdDFfc3ludGhfY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDFfVkFMLAorCX0sIHsKKwkJLnBjbGsgPSAmcGxsM180OG1fY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDNfVkFMLAorCX0sCit9OworCisvKiBncHQgcGFyZW50IHNlbGVjdCBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNsa19zZWwgZ3B0MV9wY2xrX3NlbCA9IHsKKwkucGNsa19pbmZvID0gZ3B0MV9wY2xrX2luZm8sCisJLnBjbGtfY291bnQgPSBBUlJBWV9TSVpFKGdwdDFfcGNsa19pbmZvKSwKKwkucGNsa19zZWxfcmVnID0gUEVSSVBfQ0xLX0NGRywKKwkucGNsa19zZWxfbWFzayA9IEdQVF9DTEtfTUFTSywKIH07CiAKIC8qIGdwdDEgdGltZXIgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfY2xrID0gewogCS5lbl9yZWcgPSBQRVJJUDFfQ0xLX0VOQiwKIAkuZW5fcmVnX2JpdCA9IEdQVDFfQ0xLX0VOQiwKLQkucGNsa19zZWwgPSAmZ3B0X3BjbGtfc2VsLAorCS5wY2xrX3NlbCA9ICZncHQxX3BjbGtfc2VsLAogCS5wY2xrX3NlbF9zaGlmdCA9IEdQVDFfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmZ3B0X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZncHQxX2NvbmZpZywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCi0vKiBncHQyIGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGdwdDJfY29uZmlnID0geworLyogZ3B0MiBzeW50aCBjbGsgY29uZmlndXJhdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3B0X2Nsa19jb25maWcgZ3B0Ml9zeW50aF9jb25maWcgPSB7CiAJLnN5bnRoX3JlZyA9IFBSU0MzX0NMS19DRkcsCisJLm1hc2tzID0gJmdwdF9tYXNrcywKK307CisKKy8qIGdwdDEgc3ludGggY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfc3ludGhfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJnBsbDFfY2xrLAorCS5jYWxjX3JhdGUgPSAmZ3B0X2NhbGNfcmF0ZSwKKwkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZncHRfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtncHRfcnRibCwgQVJSQVlfU0laRShncHRfcnRibCksIDJ9LAorCS5wcml2YXRlX2RhdGEgPSAmZ3B0Ml9zeW50aF9jb25maWcsCit9OworCitzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBncHQyX3BjbGtfaW5mb1tdID0geworCXsKKwkJLnBjbGsgPSAmZ3B0Ml9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCisJfSwgeworCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCisJfSwKK307CisKKy8qIGdwdCBwYXJlbnQgc2VsZWN0IHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHQyX3BjbGtfc2VsID0geworCS5wY2xrX2luZm8gPSBncHQyX3BjbGtfaW5mbywKKwkucGNsa19jb3VudCA9IEFSUkFZX1NJWkUoZ3B0Ml9wY2xrX2luZm8pLAorCS5wY2xrX3NlbF9yZWcgPSBQRVJJUF9DTEtfQ0ZHLAorCS5wY2xrX3NlbF9tYXNrID0gR1BUX0NMS19NQVNLLAogfTsKIAogLyogZ3B0MiB0aW1lciBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9jbGsgPSB7CiAJLmVuX3JlZyA9IFBFUklQMV9DTEtfRU5CLAogCS5lbl9yZWdfYml0ID0gR1BUMl9DTEtfRU5CLAotCS5wY2xrX3NlbCA9ICZncHRfcGNsa19zZWwsCisJLnBjbGtfc2VsID0gJmdwdDJfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gR1BUMl9DTEtfU0hJRlQsCi0JLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKLQkucHJpdmF0ZV9kYXRhID0gJmdwdDJfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKIC8qIGNsb2NrIGRlcml2ZWQgZnJvbSBwbGwzIGNsayAqLwpAQCAtMjQ1LDI2ICs0MDksMjcgQEAKIAkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCi0vKiBjbGNkIGNsb2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBjbGNkX2NsayA9IHsKLQkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKLQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCi0JLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorLyogY2xvY2sgZGVyaXZlZCBmcm9tIGFoYiBjbGsgKi8KKy8qIGFwYiBtYXNrcyBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgYnVzX2Nsa19tYXNrcyBhcGJfbWFza3MgPSB7CisJLm1hc2sgPSBIQ0xLX1BDTEtfUkFUSU9fTUFTSywKKwkuc2hpZnQgPSBIQ0xLX1BDTEtfUkFUSU9fU0hJRlQsCiB9OwogCi0vKiBjbG9jayBkZXJpdmVkIGZyb20gYWhiIGNsayAqLwogLyogYXBiIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCiBzdGF0aWMgc3RydWN0IGJ1c19jbGtfY29uZmlnIGFwYl9jb25maWcgPSB7CiAJLnJlZyA9IENPUkVfQ0xLX0NGRywKLQkubWFzayA9IEhDTEtfUENMS19SQVRJT19NQVNLLAotCS5zaGlmdCA9IEhDTEtfUENMS19SQVRJT19TSElGVCwKKwkubWFza3MgPSAmYXBiX21hc2tzLAogfTsKIAogLyogYXBiIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBhcGJfY2xrID0gewogCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAogCS5wY2xrID0gJmFoYl9jbGssCisJLmNhbGNfcmF0ZSA9ICZidXNfY2FsY19yYXRlLAogCS5yZWNhbGMgPSAmYnVzX2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmJ1c19jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2J1c19ydGJsLCBBUlJBWV9TSVpFKGJ1c19ydGJsKSwgMn0sCiAJLnByaXZhdGVfZGF0YSA9ICZhcGJfY29uZmlnLAogfTsKIApAQCAtMzI1LDggKzQ5MCwxNyBAQAogCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzEwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzIwKQorLyogZW1pIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBlbWlfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFoYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKyNlbmRpZgorCiAvKiBzc3AgY2xvY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzcF9jbGsgPSB7CitzdGF0aWMgc3RydWN0IGNsayBzc3AwX2NsayA9IHsKIAkucGNsayA9ICZhcGJfY2xrLAogCS5lbl9yZWcgPSBQRVJJUDFfQ0xLX0VOQiwKIAkuZW5fcmVnX2JpdCA9IFNTUF9DTEtfRU5CLApAQCAtMzQzLDE0ICs1MTcsMTQ1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGR1bW15X2FwYl9wY2xrOwogCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMwMCkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMxMCkgfHwgXAorCWRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMjApCisvKiBmc21jIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBmc21jX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhaGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisjZW5kaWYKKworLyogY29tbW9uIGNsb2NrcyB0byBzcGVhcjMxMCBhbmQgc3BlYXIzMjAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzEwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzIwKQorLyogdWFydDEgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIHVhcnQyIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmYXBiX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworI2VuZGlmIC8qIENPTkZJR19NQUNIX1NQRUFSMzEwIHx8IENPTkZJR19NQUNIX1NQRUFSMzIwICovCisKKy8qIGNvbW1vbiBjbG9ja3MgdG8gc3BlYXIzMDAgYW5kIHNwZWFyMzIwICovCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMwMCkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMyMCkKKy8qIGNsY2QgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsY2RfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJnBsbDNfNDhtX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworCisvKiBzZGhjaSBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgc2RoY2lfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFoYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDSF9TUEVBUjMwMCB8fCBDT05GSUdfTUFDSF9TUEVBUjMyMCAqLworCisvKiBzcGVhcjMwMCBtYWNoaW5lIHNwZWNpZmljIGNsb2NrIHN0cnVjdHVyZXMgKi8KKyNpZmRlZiBDT05GSUdfTUFDSF9TUEVBUjMwMAorLyogZ3BpbzEgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8xX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIGtleWJvYXJkIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBrYmRfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFwYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKworI2VuZGlmCisKKy8qIHNwZWFyMzEwIG1hY2hpbmUgc3BlY2lmaWMgY2xvY2sgc3RydWN0dXJlcyAqLworI2lmZGVmIENPTkZJR19NQUNIX1NQRUFSMzEwCisvKiB1YXJ0MyBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFwYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKworLyogdWFydDQgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQ0X2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIHVhcnQ1IGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0NV9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmYXBiX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworI2VuZGlmCisKKy8qIHNwZWFyMzIwIG1hY2hpbmUgc3BlY2lmaWMgY2xvY2sgc3RydWN0dXJlcyAqLworI2lmZGVmIENPTkZJR19NQUNIX1NQRUFSMzIwCisvKiBjYW4wIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBjYW4wX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIGNhbjEgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbjFfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFwYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKworLyogaTJjMSBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmYWhiX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworCisvKiBzc3AxIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBzc3AxX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIHNzcDIgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzcDJfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFwYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKworLyogcHdtIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBwd21fY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFwYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKyNlbmRpZgorCiAvKiBhcnJheSBvZiBhbGwgc3BlYXIgM3h4IGNsb2NrIGxvb2t1cHMgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBzcGVhcl9jbGtfbG9va3Vwc1tdID0gewotCXsgLmNvbl9pZCA9ICJhcGJfcGNsayIsCS5jbGsgPSAmZHVtbXlfYXBiX3BjbGt9LAorCXsgLmNvbl9pZCA9ICJhcGJfcGNsayIsCQkuY2xrID0gJmR1bW15X2FwYl9wY2xrfSwKIAkvKiByb290IGNsa3MgKi8KIAl7IC5jb25faWQgPSAib3NjXzMya19jbGsiLAkuY2xrID0gJm9zY18zMmtfY2xrfSwKIAl7IC5jb25faWQgPSAib3NjXzI0bV9jbGsiLAkuY2xrID0gJm9zY18yNG1fY2xrfSwKIAkvKiBjbG9jayBkZXJpdmVkIGZyb20gMzIgS0h6IG9zYyBjbGsgKi8KLQl7IC5kZXZfaWQgPSAicnRjIiwJCS5jbGsgPSAmcnRjX2Nsa30sCisJeyAuZGV2X2lkID0gInJ0Yy1zcGVhciIsCS5jbGsgPSAmcnRjX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIDI0IE1IeiBvc2MgY2xrICovCiAJeyAuY29uX2lkID0gInBsbDFfY2xrIiwJCS5jbGsgPSAmcGxsMV9jbGt9LAogCXsgLmNvbl9pZCA9ICJwbGwzXzQ4bV9jbGsiLAkuY2xrID0gJnBsbDNfNDhtX2Nsa30sCkBAIC0zNTgsMTggKzY2MywyMiBAQAogCS8qIGNsb2NrIGRlcml2ZWQgZnJvbSBwbGwxIGNsayAqLwogCXsgLmNvbl9pZCA9ICJjcHVfY2xrIiwJCS5jbGsgPSAmY3B1X2Nsa30sCiAJeyAuY29uX2lkID0gImFoYl9jbGsiLAkJLmNsayA9ICZhaGJfY2xrfSwKKwl7IC5jb25faWQgPSAidWFydF9zeW50aF9jbGsiLAkuY2xrID0gJnVhcnRfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiZmlyZGFfc3ludGhfY2xrIiwJLmNsayA9ICZmaXJkYV9zeW50aF9jbGt9LAorCXsgLmNvbl9pZCA9ICJncHQwX3N5bnRoX2NsayIsCS5jbGsgPSAmZ3B0MF9zeW50aF9jbGt9LAorCXsgLmNvbl9pZCA9ICJncHQxX3N5bnRoX2NsayIsCS5jbGsgPSAmZ3B0MV9zeW50aF9jbGt9LAorCXsgLmNvbl9pZCA9ICJncHQyX3N5bnRoX2NsayIsCS5jbGsgPSAmZ3B0Ml9zeW50aF9jbGt9LAogCXsgLmRldl9pZCA9ICJ1YXJ0IiwJCS5jbGsgPSAmdWFydF9jbGt9LAogCXsgLmRldl9pZCA9ICJmaXJkYSIsCQkuY2xrID0gJmZpcmRhX2Nsa30sCiAJeyAuZGV2X2lkID0gImdwdDAiLAkJLmNsayA9ICZncHQwX2Nsa30sCiAJeyAuZGV2X2lkID0gImdwdDEiLAkJLmNsayA9ICZncHQxX2Nsa30sCiAJeyAuZGV2X2lkID0gImdwdDIiLAkJLmNsayA9ICZncHQyX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIHBsbDMgY2xrICovCi0JeyAuZGV2X2lkID0gInVzYmgiLAkJLmNsayA9ICZ1c2JoX2Nsa30sCi0JeyAuZGV2X2lkID0gInVzYmQiLAkJLmNsayA9ICZ1c2JkX2Nsa30sCi0JeyAuZGV2X2lkID0gImNsY2QiLAkJLmNsayA9ICZjbGNkX2Nsa30sCisJeyAuZGV2X2lkID0gImRlc2lnbndhcmVfdWRjIiwgICAuY2xrID0gJnVzYmRfY2xrfSwKKwl7IC5jb25faWQgPSAidXNiaF9jbGsiLAkJLmNsayA9ICZ1c2JoX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIGFoYiBjbGsgKi8KIAl7IC5jb25faWQgPSAiYXBiX2NsayIsCQkuY2xrID0gJmFwYl9jbGt9LAotCXsgLmRldl9pZCA9ICJpMmMiLAkJLmNsayA9ICZpMmNfY2xrfSwKKwl7IC5kZXZfaWQgPSAiaTJjX2Rlc2lnbndhcmUuMCIsCS5jbGsgPSAmaTJjX2Nsa30sCiAJeyAuZGV2X2lkID0gImRtYSIsCQkuY2xrID0gJmRtYV9jbGt9LAogCXsgLmRldl9pZCA9ICJqcGVnIiwJCS5jbGsgPSAmanBlZ19jbGt9LAogCXsgLmRldl9pZCA9ICJnbWFjIiwJCS5jbGsgPSAmZ21hY19jbGt9LApAQCAtMzc3LDggKzY4Niw1MCBAQAogCXsgLmRldl9pZCA9ICJjMyIsCQkuY2xrID0gJmMzX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIGFwYiBjbGsgKi8KIAl7IC5kZXZfaWQgPSAiYWRjIiwJCS5jbGsgPSAmYWRjX2Nsa30sCi0JeyAuZGV2X2lkID0gInNzcCIsCQkuY2xrID0gJnNzcF9jbGt9LAorCXsgLmRldl9pZCA9ICJzc3AtcGwwMjIuMCIsCS5jbGsgPSAmc3NwMF9jbGt9LAogCXsgLmRldl9pZCA9ICJncGlvIiwJCS5jbGsgPSAmZ3Bpb19jbGt9LAorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMTApIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMjApCisJeyAuZGV2X2lkID0gInBoeXNtYXAtZmxhc2giLAkuY2xrID0gJmVtaV9jbGt9LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMwMCkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMxMCkgfHwgXAorCWRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMjApCisJeyAuY29uX2lkID0gImZzbWMiLAkJLmNsayA9ICZmc21jX2Nsa30sCisjZW5kaWYKKworLyogY29tbW9uIGNsb2NrcyB0byBzcGVhcjMxMCBhbmQgc3BlYXIzMjAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzEwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzIwKQorCXsgLmRldl9pZCA9ICJ1YXJ0MSIsCQkuY2xrID0gJnVhcnQxX2Nsa30sCisJeyAuZGV2X2lkID0gInVhcnQyIiwJCS5jbGsgPSAmdWFydDJfY2xrfSwKKyNlbmRpZgorCisJLyogY29tbW9uIGNsb2NrIHRvIHNwZWFyMzAwIGFuZCBzcGVhcjMyMCAqLworI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMDApIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMjApCisJeyAuZGV2X2lkID0gImNsY2QiLAkJLmNsayA9ICZjbGNkX2Nsa30sCisJeyAuZGV2X2lkID0gInNkaGNpIiwJCS5jbGsgPSAmc2RoY2lfY2xrfSwKKyNlbmRpZiAvKiBDT05GSUdfTUFDSF9TUEVBUjMwMCB8fCBDT05GSUdfTUFDSF9TUEVBUjMyMCAqLworCisJLyogc3BlYXIzMDAgbWFjaGluZSBzcGVjaWZpYyBjbG9jayBzdHJ1Y3R1cmVzICovCisjaWZkZWYgQ09ORklHX01BQ0hfU1BFQVIzMDAKKwl7IC5kZXZfaWQgPSAiZ3BpbzEiLAkJLmNsayA9ICZncGlvMV9jbGt9LAorCXsgLmRldl9pZCA9ICJrZXlib2FyZCIsCQkuY2xrID0gJmtiZF9jbGt9LAorI2VuZGlmCisKKwkvKiBzcGVhcjMxMCBtYWNoaW5lIHNwZWNpZmljIGNsb2NrIHN0cnVjdHVyZXMgKi8KKyNpZmRlZiBDT05GSUdfTUFDSF9TUEVBUjMxMAorCXsgLmRldl9pZCA9ICJ1YXJ0MyIsCQkuY2xrID0gJnVhcnQzX2Nsa30sCisJeyAuZGV2X2lkID0gInVhcnQ0IiwJCS5jbGsgPSAmdWFydDRfY2xrfSwKKwl7IC5kZXZfaWQgPSAidWFydDUiLAkJLmNsayA9ICZ1YXJ0NV9jbGt9LAorCisjZW5kaWYKKwkvKiBzcGVhcjMyMCBtYWNoaW5lIHNwZWNpZmljIGNsb2NrIHN0cnVjdHVyZXMgKi8KKyNpZmRlZiBDT05GSUdfTUFDSF9TUEVBUjMyMAorCXsgLmRldl9pZCA9ICJjX2Nhbl9wbGF0Zm9ybS4wIiwJLmNsayA9ICZjYW4wX2Nsa30sCisJeyAuZGV2X2lkID0gImNfY2FuX3BsYXRmb3JtLjEiLAkuY2xrID0gJmNhbjFfY2xrfSwKKwl7IC5kZXZfaWQgPSAiaTJjX2Rlc2lnbndhcmUuMSIsCS5jbGsgPSAmaTJjMV9jbGt9LAorCXsgLmRldl9pZCA9ICJzc3AtcGwwMjIuMSIsCS5jbGsgPSAmc3NwMV9jbGt9LAorCXsgLmRldl9pZCA9ICJzc3AtcGwwMjIuMiIsCS5jbGsgPSAmc3NwMl9jbGt9LAorCXsgLmRldl9pZCA9ICJwd20iLAkJLmNsayA9ICZwd21fY2xrfSwKKyNlbmRpZgogfTsKIAogdm9pZCBfX2luaXQgY2xrX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IDk0NzYyNWQuLjUzZGE0MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMTEsOSArMTEsOCBAQAogICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS92aWMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9nZW5lcmljLmgKaW5kZXggYWY3ZTAyYy4uOGUzMDYzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvZ2VuZXJpYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2dlbmVyaWMuaApAQCAtMTQsMTEgKzE0LDExIEBACiAjaWZuZGVmIF9fTUFDSF9HRU5FUklDX0gKICNkZWZpbmUgX19NQUNIX0dFTkVSSUNfSAogCi0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxwbGF0L3BhZG11eC5oPgogCiAvKiBzcGVhcjN4eCBkZWNsYXJhdGlvbnMgKi8KQEAgLTMzLDE0ICszMywxNCBAQAogLyogQWRkIHNwZWFyM3h4IGZhbWlseSBkZXZpY2Ugc3RydWN0dXJlIGRlY2xhcmF0aW9ucyBoZXJlICovCiBleHRlcm4gc3RydWN0IGFtYmFfZGV2aWNlIGdwaW9fZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBhbWJhX2RldmljZSB1YXJ0X2RldmljZTsKLWV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHNwZWFyX3N5c190aW1lcjsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHNwZWFyM3h4X3RpbWVyOwogCiAvKiBBZGQgc3BlYXIzeHggZmFtaWx5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBoZXJlICovCiB2b2lkIF9faW5pdCBjbGtfaW5pdCh2b2lkKTsKK3ZvaWQgX19pbml0IHNwZWFyX3NldHVwX3RpbWVyKHZvaWQpOwogdm9pZCBfX2luaXQgc3BlYXIzeHhfbWFwX2lvKHZvaWQpOwogdm9pZCBfX2luaXQgc3BlYXIzeHhfaW5pdF9pcnEodm9pZCk7CiB2b2lkIF9faW5pdCBzcGVhcjN4eF9pbml0KHZvaWQpOwotdm9pZCBzcGVhcl9wbXhfaW5pdChzdHJ1Y3QgcG14X2RyaXZlciAqcG14X2RyaXZlciwgdWludCBiYXNlLCB1aW50IHNpemUpOwogCiAvKiBwYWQgbXV4IGRlY2xhcmF0aW9ucyAqLwogI2RlZmluZSBQTVhfRklSREFfTUFTSwkJKDEgPDwgMTQpCkBAIC0xMjksMTIgKzEyOSwxMCBAQAogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF90ZWxlY29tX2RhYzsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdGVsZWNvbV9pMnM7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3RlbGVjb21fYm9vdF9waW5zOwotZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF90ZWxlY29tX3NkaW9fNGJpdDsKLWV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdGVsZWNvbV9zZGlvXzhiaXQ7CitleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3RlbGVjb21fc2RoY2lfNGJpdDsKK2V4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdGVsZWNvbV9zZGhjaV84Yml0OwogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9ncGlvMTsKIAotdm9pZCBzcGVhcjMwMF9wbXhfaW5pdCh2b2lkKTsKLQogLyogQWRkIHNwZWFyMzAwIG1hY2hpbmUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGhlcmUgKi8KIHZvaWQgX19pbml0IHNwZWFyMzAwX2luaXQodm9pZCk7CiAKQEAgLTE1NCw4ICsxNTIsNiBAQAogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9yczQ4NV8wXzE7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3RkbTA7CiAKLXZvaWQgc3BlYXIzMTBfcG14X2luaXQodm9pZCk7Ci0KIC8qIEFkZCBzcGVhcjMxMCBtYWNoaW5lIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBoZXJlICovCiB2b2lkIF9faW5pdCBzcGVhcjMxMF9pbml0KHZvaWQpOwogCkBAIC0xNzYsMTQgKzE3MiwxNCBAQAogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9lbWk7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X2ZzbWM7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3NwcDsKLWV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfc2RpbzsKK2V4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfc2RoY2k7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X2kyczsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdWFydDE7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3VhcnQxX21vZGVtOwogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF91YXJ0MjsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdG91Y2hzY3JlZW47CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X2NhbjsKLWV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfc2Rpb19sZWQ7CitleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3NkaGNpX2xlZDsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfcHdtMDsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfcHdtMTsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfcHdtMjsKQEAgLTE5NSw4ICsxOTEsNiBAQAogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9zbWlpMTsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfaTJjMTsKIAotdm9pZCBzcGVhcjMyMF9wbXhfaW5pdCh2b2lkKTsKLQogLyogQWRkIHNwZWFyMzIwIG1hY2hpbmUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGhlcmUgKi8KIHZvaWQgX19pbml0IHNwZWFyMzIwX2luaXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDRhODZlNmEuLjQ2NjBjMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMTQsNiArMTQsOSBAQAogI2lmbmRlZiBfX01BQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX01BQ0hfSEFSRFdBUkVfSAogCisjaW5jbHVkZSA8cGxhdC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKwogLyogVml0dWFsIHRvIHBoeXNpY2FsIHRyYW5zbGF0aW9uIG9mIHN0YXRpY2FsbHkgbWFwcGVkIHNwYWNlICovCiAjZGVmaW5lIElPX0FERFJFU1MoeCkJCSh4IHwgMHhGMDAwMDAwMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDdmOTQwYjguLmExYTdmNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTY5LDcgKzY5LDcgQEAKICNkZWZpbmUgSVJRX0NMQ0QJCQkJSVJRX0dFTl9SQVNfMwogCiAvKiBJUlFzIHNoYXJpbmcgSVJRX0lOVFJDT01NX1JBU19BUk0gKi8KLSNkZWZpbmUgSVJRX1NESU8JCQkJSVJRX0lOVFJDT01NX1JBU19BUk0KKyNkZWZpbmUgSVJRX1NESENJCQkJCUlSUV9JTlRSQ09NTV9SQVNfQVJNCiAKIC8qIEdQSU8gcGlucyB2aXJ0dWFsIGlycXMgKi8KICNkZWZpbmUgU1BFQVJfR1BJT19JTlRfQkFTRQkJCShWSVJRX1NUQVJUICsgOSkKQEAgLTExNSw3ICsxMTUsNyBAQAogI2RlZmluZSBWSVJRX1NQUAkJCQkoVklSUV9TVEFSVCArIDIpCiAKIC8qIElSUXMgc2hhcmluZyBJUlFfR0VOX1JBU18yICovCi0jZGVmaW5lIElSUV9TRElPCQkJCUlSUV9HRU5fUkFTXzIKKyNkZWZpbmUgSVJRX1NESENJCQkJCUlSUV9HRU5fUkFTXzIKIAogLyogSVJRcyBzaGFyaW5nIElSUV9HRU5fUkFTXzMgKi8KICNkZWZpbmUgVklSUV9QTEdQSU8JCQkJKFZJUlFfU1RBUlQgKyAzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvbWlzY19yZWdzLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9taXNjX3JlZ3MuaAppbmRleCAzOGQ3NjdhLi41YmQ4Y2Q4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9taXNjX3JlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9taXNjX3JlZ3MuaApAQCAtMTQsMTYgKzE0LDE2IEBACiAjaWZuZGVmIF9fTUFDSF9NSVNDX1JFR1NfSAogI2RlZmluZSBfX01BQ0hfTUlTQ19SRUdTX0gKIAotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNkZWZpbmUgTUlTQ19CQVNFCQlWQV9TUEVBUjNYWF9JQ00zX01JU0NfUkVHX0JBU0UKKyNkZWZpbmUgTUlTQ19CQVNFCQlJT01FTShWQV9TUEVBUjNYWF9JQ00zX01JU0NfUkVHX0JBU0UpCiAKLSNkZWZpbmUgU09DX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDAwKSkKLSNkZWZpbmUgRElBR19DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAwNCkpCi0jZGVmaW5lIFBMTDFfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAwOCkpCi0jZGVmaW5lIFBMTDFfRlJRCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAwQykpCi0jZGVmaW5lIFBMTDFfTU9ECQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAxMCkpCi0jZGVmaW5lIFBMTDJfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAxNCkpCisjZGVmaW5lIFNPQ19DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwMDApCisjZGVmaW5lIERJQUdfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MDA0KQorI2RlZmluZSBQTEwxX0NUUgkJKE1JU0NfQkFTRSArIDB4MDA4KQorI2RlZmluZSBQTEwxX0ZSUQkJKE1JU0NfQkFTRSArIDB4MDBDKQorI2RlZmluZSBQTEwxX01PRAkJKE1JU0NfQkFTRSArIDB4MDEwKQorI2RlZmluZSBQTEwyX0NUUgkJKE1JU0NfQkFTRSArIDB4MDE0KQogLyogUExMX0NUUiByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBQTExfRU5BQkxFCQkyCiAjZGVmaW5lIFBMTF9NT0RFX1NISUZUCQk0CkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIFBMTF9NT0RFX0RJVEhfRFNCCTIKICNkZWZpbmUgUExMX01PREVfRElUSF9TU0IJMwogCi0jZGVmaW5lIFBMTDJfRlJRCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAxOCkpCisjZGVmaW5lIFBMTDJfRlJRCQkoTUlTQ19CQVNFICsgMHgwMTgpCiAvKiBQTEwgRlJRIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIFBMTF9ESVZfTl9TSElGVAkJMAogI2RlZmluZSBQTExfRElWX05fTUFTSwkJMHhGRgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAjZGVmaW5lIFBMTF9ESVRIX0ZEQktfTV9TSElGVAkxNgogI2RlZmluZSBQTExfRElUSF9GREJLX01fTUFTSwkweEZGRkYKIAotI2RlZmluZSBQTEwyX01PRAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMUMpKQotI2RlZmluZSBQTExfQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMjApKQotI2RlZmluZSBDT1JFX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDI0KSkKKyNkZWZpbmUgUExMMl9NT0QJCShNSVNDX0JBU0UgKyAweDAxQykKKyNkZWZpbmUgUExMX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDAyMCkKKyNkZWZpbmUgQ09SRV9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwMjQpCiAvKiBDT1JFIENMSyBDRkcgcmVnaXN0ZXIgbWFza3MgKi8KICNkZWZpbmUgUExMX0hDTEtfUkFUSU9fU0hJRlQJMTAKICNkZWZpbmUgUExMX0hDTEtfUkFUSU9fTUFTSwkweDMKICNkZWZpbmUgSENMS19QQ0xLX1JBVElPX1NISUZUCTgKICNkZWZpbmUgSENMS19QQ0xLX1JBVElPX01BU0sJMHgzCiAKLSNkZWZpbmUgUEVSSVBfQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMjgpKQorI2RlZmluZSBQRVJJUF9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwMjgpCiAvKiBQRVJJUF9DTEtfQ0ZHIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIFVBUlRfQ0xLX1NISUZUCQk0CiAjZGVmaW5lIFVBUlRfQ0xLX01BU0sJCTB4MQpAQCAtNjMsMTAgKzYzLDEwIEBACiAjZGVmaW5lIEdQVDFfQ0xLX1NISUZUCQkxMQogI2RlZmluZSBHUFQyX0NMS19TSElGVAkJMTIKICNkZWZpbmUgR1BUX0NMS19NQVNLCQkweDEKLSNkZWZpbmUgQVVYX0NMS19QTEwzX01BU0sJMAotI2RlZmluZSBBVVhfQ0xLX1BMTDFfTUFTSwkxCisjZGVmaW5lIEFVWF9DTEtfUExMM19WQUwJMAorI2RlZmluZSBBVVhfQ0xLX1BMTDFfVkFMCTEKIAotI2RlZmluZSBQRVJJUDFfQ0xLX0VOQgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMkMpKQorI2RlZmluZSBQRVJJUDFfQ0xLX0VOQgkJKE1JU0NfQkFTRSArIDB4MDJDKQogLyogUEVSSVAxX0NMS19FTkIgcmVnaXN0ZXIgbWFza3MgKi8KICNkZWZpbmUgVUFSVF9DTEtfRU5CCQkzCiAjZGVmaW5lIFNTUF9DTEtfRU5CCQk1CkBAIC04NSwzNCArODUsMzUgQEAKICNkZWZpbmUgVVNCSF9DTEtfRU5CCQkyNQogI2RlZmluZSBDM19DTEtfRU5CCQkzMQogCi0jZGVmaW5lIFNPQ19DT1JFX0lECQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAzMCkpCi0jZGVmaW5lIFJBU19DTEtfRU5CCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAzNCkpCi0jZGVmaW5lIFBFUklQMV9TT0ZfUlNUCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAzOCkpCisjZGVmaW5lIFNPQ19DT1JFX0lECQkoTUlTQ19CQVNFICsgMHgwMzApCisjZGVmaW5lIFJBU19DTEtfRU5CCQkoTUlTQ19CQVNFICsgMHgwMzQpCisjZGVmaW5lIFBFUklQMV9TT0ZfUlNUCQkoTUlTQ19CQVNFICsgMHgwMzgpCiAvKiBQRVJJUDFfU09GX1JTVCByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBKUEVHX1NPRl9SU1QJCTgKIAotI2RlZmluZSBTT0NfVVNFUl9JRAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwM0MpKQotI2RlZmluZSBSQVNfU09GX1JTVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNDApKQotI2RlZmluZSBQUlNDMV9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA0NCkpCi0jZGVmaW5lIFBSU0MyX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDQ4KSkKLSNkZWZpbmUgUFJTQzNfQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNEMpKQorI2RlZmluZSBTT0NfVVNFUl9JRAkJKE1JU0NfQkFTRSArIDB4MDNDKQorI2RlZmluZSBSQVNfU09GX1JTVAkJKE1JU0NfQkFTRSArIDB4MDQwKQorI2RlZmluZSBQUlNDMV9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwNDQpCisjZGVmaW5lIFBSU0MyX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDA0OCkKKyNkZWZpbmUgUFJTQzNfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDRDKQogLyogZ3B0IHN5bnRoZXNpemVyIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIEdQVF9NU0NBTEVfU0hJRlQJMAogI2RlZmluZSBHUFRfTVNDQUxFX01BU0sJCTB4RkZGCiAjZGVmaW5lIEdQVF9OU0NBTEVfU0hJRlQJMTIKICNkZWZpbmUgR1BUX05TQ0FMRV9NQVNLCQkweEYKIAotI2RlZmluZSBBTUVNX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDUwKSkKLSNkZWZpbmUgRVhQSV9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA1NCkpCi0jZGVmaW5lIENMQ0RfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDVDKSkKLSNkZWZpbmUgRklSREFfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDYwKSkKLSNkZWZpbmUgVUFSVF9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNjQpKQotI2RlZmluZSBHTUFDX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA2OCkpCi0jZGVmaW5lIFJBUzFfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDZDKSkKLSNkZWZpbmUgUkFTMl9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNzApKQotI2RlZmluZSBSQVMzX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA3NCkpCi0jZGVmaW5lIFJBUzRfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDc4KSkKKyNkZWZpbmUgQU1FTV9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwNTApCisjZGVmaW5lIEVYUElfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDU0KQorI2RlZmluZSBDTENEX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNUMpCisjZGVmaW5lIEZJUkRBX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNjApCisjZGVmaW5lIFVBUlRfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA2NCkKKyNkZWZpbmUgR01BQ19DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDY4KQorI2RlZmluZSBSQVMxX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNkMpCisjZGVmaW5lIFJBUzJfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA3MCkKKyNkZWZpbmUgUkFTM19DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDc0KQorI2RlZmluZSBSQVM0X0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNzgpCiAvKiBhdXggY2xrIHN5bnRoZXNpc2VyIHJlZ2lzdGVyIG1hc2tzIGZvciBpcmRhIHRvIHJhczQgKi8KKyNkZWZpbmUgQVVYX1NZTlRfRU5CCQkzMQogI2RlZmluZSBBVVhfRVFfU0VMX1NISUZUCTMwCiAjZGVmaW5lIEFVWF9FUV9TRUxfTUFTSwkJMQogI2RlZmluZSBBVVhfRVExX1NFTAkJMApAQCAtMTIyLDQyICsxMjMsNDIgQEAKICNkZWZpbmUgQVVYX1lTQ0FMRV9TSElGVAkwCiAjZGVmaW5lIEFVWF9ZU0NBTEVfTUFTSwkJMHhGRkYKIAotI2RlZmluZSBJQ00xX0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDdDKSkKLSNkZWZpbmUgSUNNMl9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA4MCkpCi0jZGVmaW5lIElDTTNfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwODQpKQotI2RlZmluZSBJQ000X0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDg4KSkKLSNkZWZpbmUgSUNNNV9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA4QykpCi0jZGVmaW5lIElDTTZfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwOTApKQotI2RlZmluZSBJQ003X0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDk0KSkKLSNkZWZpbmUgSUNNOF9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA5OCkpCi0jZGVmaW5lIElDTTlfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwOUMpKQotI2RlZmluZSBETUFfQ0hOX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQTApKQotI2RlZmluZSBVU0IyX1BIWV9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEE0KSkKLSNkZWZpbmUgR01BQ19DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBBOCkpCi0jZGVmaW5lIEVYUElfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQUMpKQotI2RlZmluZSBQUkMxX0xPQ0tfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBDMCkpCi0jZGVmaW5lIFBSQzJfTE9DS19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEM0KSkKLSNkZWZpbmUgUFJDM19MT0NLX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQzgpKQotI2RlZmluZSBQUkM0X0xPQ0tfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBDQykpCi0jZGVmaW5lIFBSQzFfSVJRX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRDApKQotI2RlZmluZSBQUkMyX0lSUV9DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEQ0KSkKLSNkZWZpbmUgUFJDM19JUlFfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBEOCkpCi0jZGVmaW5lIFBSQzRfSVJRX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwREMpKQotI2RlZmluZSBQV1JET1dOX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEUwKSkKLSNkZWZpbmUgQ09NUFNTVExfMVY4X0NGRwkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBFNCkpCi0jZGVmaW5lIENPTVBTU1RMXzJWNV9DRkcJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRTgpKQotI2RlZmluZSBDT01QQ09SXzNWM19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEVDKSkKLSNkZWZpbmUgU1NUTFBBRF9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBGMCkpCi0jZGVmaW5lIEJJU1QxX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEY0KSkKLSNkZWZpbmUgQklTVDJfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRjgpKQotI2RlZmluZSBCSVNUM19DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBGQykpCi0jZGVmaW5lIEJJU1Q0X0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTAwKSkKLSNkZWZpbmUgQklTVDVfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMDQpKQotI2RlZmluZSBCSVNUMV9TVFNfUkVTCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDEwOCkpCi0jZGVmaW5lIEJJU1QyX1NUU19SRVMJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTBDKSkKLSNkZWZpbmUgQklTVDNfU1RTX1JFUwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMTApKQotI2RlZmluZSBCSVNUNF9TVFNfUkVTCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDExNCkpCi0jZGVmaW5lIEJJU1Q1X1NUU19SRVMJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTE4KSkKLSNkZWZpbmUgU1lTRVJSX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTFDKSkKKyNkZWZpbmUgSUNNMV9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwN0MpCisjZGVmaW5lIElDTTJfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDgwKQorI2RlZmluZSBJQ00zX0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA4NCkKKyNkZWZpbmUgSUNNNF9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwODgpCisjZGVmaW5lIElDTTVfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDhDKQorI2RlZmluZSBJQ002X0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA5MCkKKyNkZWZpbmUgSUNNN19BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwOTQpCisjZGVmaW5lIElDTThfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDk4KQorI2RlZmluZSBJQ005X0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA5QykKKyNkZWZpbmUgRE1BX0NITl9DRkcJCShNSVNDX0JBU0UgKyAweDBBMCkKKyNkZWZpbmUgVVNCMl9QSFlfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwQTQpCisjZGVmaW5lIEdNQUNfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEE4KQorI2RlZmluZSBFWFBJX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBBQykKKyNkZWZpbmUgUFJDMV9MT0NLX0NUUgkJKE1JU0NfQkFTRSArIDB4MEMwKQorI2RlZmluZSBQUkMyX0xPQ0tfQ1RSCQkoTUlTQ19CQVNFICsgMHgwQzQpCisjZGVmaW5lIFBSQzNfTE9DS19DVFIJCShNSVNDX0JBU0UgKyAweDBDOCkKKyNkZWZpbmUgUFJDNF9MT0NLX0NUUgkJKE1JU0NfQkFTRSArIDB4MENDKQorI2RlZmluZSBQUkMxX0lSUV9DVFIJCShNSVNDX0JBU0UgKyAweDBEMCkKKyNkZWZpbmUgUFJDMl9JUlFfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRDQpCisjZGVmaW5lIFBSQzNfSVJRX0NUUgkJKE1JU0NfQkFTRSArIDB4MEQ4KQorI2RlZmluZSBQUkM0X0lSUV9DVFIJCShNSVNDX0JBU0UgKyAweDBEQykKKyNkZWZpbmUgUFdSRE9XTl9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRTApCisjZGVmaW5lIENPTVBTU1RMXzFWOF9DRkcJKE1JU0NfQkFTRSArIDB4MEU0KQorI2RlZmluZSBDT01QU1NUTF8yVjVfQ0ZHCShNSVNDX0JBU0UgKyAweDBFOCkKKyNkZWZpbmUgQ09NUENPUl8zVjNfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwRUMpCisjZGVmaW5lIFNTVExQQURfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEYwKQorI2RlZmluZSBCSVNUMV9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRjQpCisjZGVmaW5lIEJJU1QyX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBGOCkKKyNkZWZpbmUgQklTVDNfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEZDKQorI2RlZmluZSBCSVNUNF9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgxMDApCisjZGVmaW5lIEJJU1Q1X0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDEwNCkKKyNkZWZpbmUgQklTVDFfU1RTX1JFUwkJKE1JU0NfQkFTRSArIDB4MTA4KQorI2RlZmluZSBCSVNUMl9TVFNfUkVTCQkoTUlTQ19CQVNFICsgMHgxMEMpCisjZGVmaW5lIEJJU1QzX1NUU19SRVMJCShNSVNDX0JBU0UgKyAweDExMCkKKyNkZWZpbmUgQklTVDRfU1RTX1JFUwkJKE1JU0NfQkFTRSArIDB4MTE0KQorI2RlZmluZSBCSVNUNV9TVFNfUkVTCQkoTUlTQ19CQVNFICsgMHgxMTgpCisjZGVmaW5lIFNZU0VSUl9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgxMUMpCiAKICNlbmRpZiAvKiBfX01BQ0hfTUlTQ19SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhci5oCmluZGV4IGRjY2E4NTYuLjYzZmQ5ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIuaApAQCAtMTQsMTI0ICsxNCw2MSBAQAogI2lmbmRlZiBfX01BQ0hfU1BFQVIzWFhfSAogI2RlZmluZSBfX01BQ0hfU1BFQVIzWFhfSAogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxtYWNoL3NwZWFyMzAwLmg+CiAjaW5jbHVkZSA8bWFjaC9zcGVhcjMxMC5oPgogI2luY2x1ZGUgPG1hY2gvc3BlYXIzMjAuaD4KIAotI2RlZmluZSBTUEVBUjNYWF9NTF9TRFJBTV9CQVNFCQkweDAwMDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX01MX1NEUkFNX1NJWkUJCTB4NDAwMDAwMDAKKyNkZWZpbmUgU1BFQVIzWFhfTUxfU0RSQU1fQkFTRQkJVUwoMHgwMDAwMDAwMCkKIAotI2RlZmluZSBTUEVBUjNYWF9JQ005X0JBU0UJCTB4QzAwMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNOV9TSVpFCQkweDEwMDAwMDAwCisjZGVmaW5lIFNQRUFSM1hYX0lDTTlfQkFTRQkJVUwoMHhDMDAwMDAwMCkKIAogLyogSUNNMSAtIExvdyBzcGVlZCBjb25uZWN0aW9uICovCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfMl9CQVNFCQkweEQwMDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfMl9TSVpFCQkweDEwMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9VQVJUX0JBU0UJCTB4RDAwMDAwMDAKKyNkZWZpbmUgU1BFQVIzWFhfSUNNMV8yX0JBU0UJCVVMKDB4RDAwMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTFfVUFSVF9CQVNFCQlVTCgweEQwMDAwMDAwKQogI2RlZmluZSBWQV9TUEVBUjNYWF9JQ00xX1VBUlRfQkFTRQlJT19BRERSRVNTKFNQRUFSM1hYX0lDTTFfVUFSVF9CQVNFKQotI2RlZmluZSBTUEVBUjNYWF9JQ00xX1VBUlRfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfQURDX0JBU0UJCTB4RDAwODAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9BRENfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfU1NQX0JBU0UJCTB4RDAxMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9TU1BfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfSTJDX0JBU0UJCTB4RDAxODAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9JMkNfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfSlBFR19CQVNFCQkweEQwODAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfSlBFR19TSVpFCQkweDAwODAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9JUkRBX0JBU0UJCTB4RDEwMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9JUkRBX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00xX1NSQU1fQkFTRQkJMHhEMjgwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00xX1NSQU1fU0laRQkJMHgwNTgwMDAwMAorI2RlZmluZSBTUEVBUjNYWF9JQ00xX0FEQ19CQVNFCQlVTCgweEQwMDgwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00xX1NTUF9CQVNFCQlVTCgweEQwMTAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00xX0kyQ19CQVNFCQlVTCgweEQwMTgwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00xX0pQRUdfQkFTRQkJVUwoMHhEMDgwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNMV9JUkRBX0JBU0UJCVVMKDB4RDEwMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTFfU1JBTV9CQVNFCQlVTCgweEQyODAwMDAwKQogCiAvKiBJQ00yIC0gQXBwbGljYXRpb24gU3Vic3lzdGVtICovCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTJfSFdBQ0NFTDBfQkFTRQkweEQ4ODAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTJfSFdBQ0NFTDBfU0laRQkweDAwODAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNMl9IV0FDQ0VMMV9CQVNFCTB4RDkwMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNMl9IV0FDQ0VMMV9TSVpFCTB4MDA4MDAwMDAKKyNkZWZpbmUgU1BFQVIzWFhfSUNNMl9IV0FDQ0VMMF9CQVNFCVVMKDB4RDg4MDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTJfSFdBQ0NFTDFfQkFTRQlVTCgweEQ5MDAwMDAwKQogCiAvKiBJQ000IC0gSGlnaCBTcGVlZCBDb25uZWN0aW9uICovCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfQkFTRQkJMHhFMDAwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ000X1NJWkUJCTB4MDgwMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ000X01JSV9CQVNFCQkweEUwODAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfTUlJX1NJWkUJCTB4MDA4MDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQkRfRklGT19CQVNFCTB4RTEwMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JEX0ZJRk9fU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JEX0NTUl9CQVNFCTB4RTExMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JEX0NTUl9TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQkRfUExEVF9CQVNFCTB4RTEyMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JEX1BMRFRfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfRUhDSTBfMV9CQVNFCTB4RTE4MDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfRUhDSTBfMV9TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQl9PSENJMF9CQVNFCTB4RTE5MDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfT0hDSTBfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfT0hDSTFfQkFTRQkweEUyMTAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX09IQ0kxX1NJWkUJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX0FSQl9CQVNFCTB4RTI4MDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfQVJCX1NJWkUJMHgwMDAxMDAwMAorI2RlZmluZSBTUEVBUjNYWF9JQ000X0JBU0UJCVVMKDB4RTAwMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTRfTUlJX0JBU0UJCVVMKDB4RTA4MDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCRF9GSUZPX0JBU0UJVUwoMHhFMTAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JEX0NTUl9CQVNFCVVMKDB4RTExMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCRF9QTERUX0JBU0UJVUwoMHhFMTIwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfRUhDSTBfMV9CQVNFCVVMKDB4RTE4MDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX09IQ0kwX0JBU0UJVUwoMHhFMTkwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfT0hDSTFfQkFTRQlVTCgweEUyMTAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQl9BUkJfQkFTRQlVTCgweEUyODAwMDAwKQogCiAvKiBNTDEgLSBNdWx0aSBMYXllciBDUFUgU3Vic3lzdGVtICovCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfTUwxXzJfQkFTRQkweEYwMDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfTUwxXzJfU0laRQkweDBGMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfTUwxX1RNUl9CQVNFCQkweEYwMDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX01MMV9UTVJfU0laRQkJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX01MMV9WSUNfQkFTRQkJMHhGMTEwMDAwMAorI2RlZmluZSBTUEVBUjNYWF9JQ00zX01MMV8yX0JBU0UJVUwoMHhGMDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfTUwxX1RNUl9CQVNFCQlVTCgweEYwMDAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9NTDFfVklDX0JBU0UJCVVMKDB4RjExMDAwMDApCiAjZGVmaW5lIFZBX1NQRUFSM1hYX01MMV9WSUNfQkFTRQlJT19BRERSRVNTKFNQRUFSM1hYX01MMV9WSUNfQkFTRSkKLSNkZWZpbmUgU1BFQVIzWFhfTUwxX1ZJQ19TSVpFCQkweDAwMTAwMDAwCiAKIC8qIElDTTMgLSBCYXNpYyBTdWJzeXN0ZW0gKi8KLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19TTUVNX0JBU0UJCTB4RjgwMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19TTUVNX1NJWkUJCTB4MDQwMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1NNSV9DVFJMX0JBU0UJMHhGQzAwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1NNSV9DVFJMX1NJWkUJMHgwMDIwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfRE1BX0JBU0UJCTB4RkM0MDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19ETUFfU0laRQkJMHgwMDIwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfU0RSQU1fQ1RSTF9CQVNFCTB4RkM2MDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19TRFJBTV9DVFJMX1NJWkUJMHgwMDIwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfVE1SMF9CQVNFCQkweEZDODAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfVE1SMF9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19XRFRfQkFTRQkJMHhGQzg4MDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1dEVF9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19SVENfQkFTRQkJMHhGQzkwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1JUQ19TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19HUElPX0JBU0UJCTB4RkM5ODAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19HUElPX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1NZU19DVFJMX0JBU0UJMHhGQ0EwMDAwMAorI2RlZmluZSBTUEVBUjNYWF9JQ00zX1NNRU1fQkFTRQkJVUwoMHhGODAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNM19TTUlfQ1RSTF9CQVNFCVVMKDB4RkMwMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTNfRE1BX0JBU0UJCVVMKDB4RkM0MDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTNfU0RSQU1fQ1RSTF9CQVNFCVVMKDB4RkM2MDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTNfVE1SMF9CQVNFCQlVTCgweEZDODAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00zX1dEVF9CQVNFCQlVTCgweEZDODgwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00zX1JUQ19CQVNFCQlVTCgweEZDOTAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00zX0dQSU9fQkFTRQkJVUwoMHhGQzk4MDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNM19TWVNfQ1RSTF9CQVNFCVVMKDB4RkNBMDAwMDApCiAjZGVmaW5lIFZBX1NQRUFSM1hYX0lDTTNfU1lTX0NUUkxfQkFTRQlJT19BRERSRVNTKFNQRUFSM1hYX0lDTTNfU1lTX0NUUkxfQkFTRSkKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19TWVNfQ1RSTF9TSVpFCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00zX01JU0NfUkVHX0JBU0UJMHhGQ0E4MDAwMAorI2RlZmluZSBTUEVBUjNYWF9JQ00zX01JU0NfUkVHX0JBU0UJVUwoMHhGQ0E4MDAwMCkKICNkZWZpbmUgVkFfU1BFQVIzWFhfSUNNM19NSVNDX1JFR19CQVNFCUlPX0FERFJFU1MoU1BFQVIzWFhfSUNNM19NSVNDX1JFR19CQVNFKQotI2RlZmluZSBTUEVBUjNYWF9JQ00zX01JU0NfUkVHX1NJWkUJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfVE1SMV9CQVNFCQkweEZDQjAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfVE1SMV9TSVpFCQkweDAwMDgwMDAwCisjZGVmaW5lIFNQRUFSM1hYX0lDTTNfVE1SMV9CQVNFCQlVTCgweEZDQjAwMDAwKQogCiAvKiBEZWJ1ZyB1YXJ0IGZvciBsaW51eCwgd2lsbCBiZSB1c2VkIGZvciBkZWJ1ZyBhbmQgdW5jb21wcmVzcyBtZXNzYWdlcyAqLwogI2RlZmluZSBTUEVBUl9EQkdfVUFSVF9CQVNFCQlTUEVBUjNYWF9JQ00xX1VBUlRfQkFTRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMDAuaCBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzAwLmgKaW5kZXggY2NhYTc2NS4uYzcyMzUxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMDAuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhcjMwMC5oCkBAIC0xNywxMSArMTcsOSBAQAogI2RlZmluZSBfX01BQ0hfU1BFQVIzMDBfSAogCiAvKiBCYXNlIGFkZHJlc3Mgb2YgdmFyaW91cyBJUHMgKi8KLSNkZWZpbmUgU1BFQVIzMDBfVEVMRUNPTV9CQVNFCQkweDUwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX1RFTEVDT01fU0laRQkJMHgxMDAwMDAwMAorI2RlZmluZSBTUEVBUjMwMF9URUxFQ09NX0JBU0UJCVVMKDB4NTAwMDAwMDApCiAKIC8qIEludGVycnVwdCByZWdpc3RlcnMgb2Zmc2V0cyBhbmQgbWFza3MgKi8KLSNkZWZpbmUgU1BFQVIzMDBfVEVMRUNPTV9SRUdfU0laRQkweDAwMDEwMDAwCiAjZGVmaW5lIElOVF9FTkJfTUFTS19SRUcJCTB4NTQKICNkZWZpbmUgSU5UX1NUU19NQVNLX1JFRwkJMHg1OAogI2RlZmluZSBJVF9QRVJTX1NfSVJRX01BU0sJCSgxIDw8IDApCkBAIC0zNiw0NyArMzQsMjAgQEAKIAogI2RlZmluZSBTSElSUV9SQVMxX01BU0sJCQkweDFGRgogCi0jZGVmaW5lIFNQRUFSMzAwX0NMQ0RfQkFTRQkJMHg2MDAwMDAwMAotI2RlZmluZSBTUEVBUjMwMF9DTENEX1NJWkUJCTB4MTAwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9TRElPX0JBU0UJCTB4NzAwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfU0RJT19TSVpFCQkweDEwMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfTkFORF8wX0JBU0UJCTB4ODAwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfTkFORF8wX1NJWkUJCTB4MDQwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9OQU5EXzFfQkFTRQkJMHg4NDAwMDAwMAotI2RlZmluZSBTUEVBUjMwMF9OQU5EXzFfU0laRQkJMHgwNDAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzAwX05BTkRfMl9CQVNFCQkweDg4MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX05BTkRfMl9TSVpFCQkweDA0MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfTkFORF8zX0JBU0UJCTB4OGMwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfTkFORF8zX1NJWkUJCTB4MDQwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9OT1JfMF9CQVNFCQkweDkwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX05PUl8wX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9OT1JfMV9CQVNFCQkweDkxMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX05PUl8xX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9OT1JfMl9CQVNFCQkweDkyMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX05PUl8yX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9OT1JfM19CQVNFCQkweDkzMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX05PUl8zX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9GU01DX0JBU0UJCTB4OTQwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfRlNNQ19TSVpFCQkweDA1MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfU09DX0NPTkZJR19CQVNFCTB4OTkwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfU09DX0NPTkZJR19TSVpFCTB4MDAwMDAwMDgKLQotI2RlZmluZSBTUEVBUjMwMF9LRVlCT0FSRF9CQVNFCQkweEEwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX0tFWUJPQVJEX1NJWkUJCTB4MDkwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9HUElPX0JBU0UJCTB4QTkwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfR1BJT19TSVpFCQkweDA3MDAwMDAwCisjZGVmaW5lIFNQRUFSMzAwX0NMQ0RfQkFTRQkJVUwoMHg2MDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMDBfU0RIQ0lfQkFTRQkJVUwoMHg3MDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMDBfTkFORF8wX0JBU0UJCVVMKDB4ODAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX05BTkRfMV9CQVNFCQlVTCgweDg0MDAwMDAwKQorI2RlZmluZSBTUEVBUjMwMF9OQU5EXzJfQkFTRQkJVUwoMHg4ODAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMDBfTkFORF8zX0JBU0UJCVVMKDB4OGMwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX05PUl8wX0JBU0UJCVVMKDB4OTAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX05PUl8xX0JBU0UJCVVMKDB4OTEwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX05PUl8yX0JBU0UJCVVMKDB4OTIwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX05PUl8zX0JBU0UJCVVMKDB4OTMwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX0ZTTUNfQkFTRQkJVUwoMHg5NDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMDBfU09DX0NPTkZJR19CQVNFCVVMKDB4OTkwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX0tFWUJPQVJEX0JBU0UJCVVMKDB4QTAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX0dQSU9fQkFTRQkJVUwoMHhBOTAwMDAwMCkKIAogI2VuZGlmIC8qIF9fTUFDSF9TUEVBUjMwMF9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzEwLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhcjMxMC5oCmluZGV4IGIyN2JiOGEuLjFlODUzNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzEwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMTAuaApAQCAtMTYsMzAgKzE2LDE4IEBACiAjaWZuZGVmIF9fTUFDSF9TUEVBUjMxMF9ICiAjZGVmaW5lIF9fTUFDSF9TUEVBUjMxMF9ICiAKLSNkZWZpbmUgU1BFQVIzMTBfTkFORF9CQVNFCQkweDQwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzEwX05BTkRfU0laRQkJMHgwNDAwMDAwMAorI2RlZmluZSBTUEVBUjMxMF9OQU5EX0JBU0UJCVVMKDB4NDAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzEwX0ZTTUNfQkFTRQkJVUwoMHg0NDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfVUFSVDFfQkFTRQkJVUwoMHhCMjAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfVUFSVDJfQkFTRQkJVUwoMHhCMjA4MDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfVUFSVDNfQkFTRQkJVUwoMHhCMjEwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfVUFSVDRfQkFTRQkJVUwoMHhCMjE4MDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfVUFSVDVfQkFTRQkJVUwoMHhCMjIwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfSERMQ19CQVNFCQlVTCgweEIyODAwMDAwKQorI2RlZmluZSBTUEVBUjMxMF9SUzQ4NV8wX0JBU0UJCVVMKDB4QjMwMDAwMDApCisjZGVmaW5lIFNQRUFSMzEwX1JTNDg1XzFfQkFTRQkJVUwoMHhCMzgwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfU09DX0NPTkZJR19CQVNFCVVMKDB4QjQwMDAwMDApCiAKLSNkZWZpbmUgU1BFQVIzMTBfRlNNQ19CQVNFCQkweDQ0MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzEwX0ZTTUNfU0laRQkJMHgwMTAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzEwX1VBUlQxX0JBU0UJCTB4QjIwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMTBfVUFSVDJfQkFTRQkJMHhCMjA4MDAwMAotI2RlZmluZSBTUEVBUjMxMF9VQVJUM19CQVNFCQkweEIyMTAwMDAwCi0jZGVmaW5lIFNQRUFSMzEwX1VBUlQ0X0JBU0UJCTB4QjIxODAwMDAKLSNkZWZpbmUgU1BFQVIzMTBfVUFSVDVfQkFTRQkJMHhCMjIwMDAwMAotI2RlZmluZSBTUEVBUjMxMF9VQVJUX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjMxMF9IRExDX0JBU0UJCTB4QjI4MDAwMDAKLSNkZWZpbmUgU1BFQVIzMTBfSERMQ19TSVpFCQkweDAwODAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMTBfUlM0ODVfMF9CQVNFCQkweEIzMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzEwX1JTNDg1XzBfU0laRQkJMHgwMDgwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzEwX1JTNDg1XzFfQkFTRQkJMHhCMzgwMDAwMAotI2RlZmluZSBTUEVBUjMxMF9SUzQ4NV8xX1NJWkUJCTB4MDA4MDAwMDAKLQotI2RlZmluZSBTUEVBUjMxMF9TT0NfQ09ORklHX0JBU0UJMHhCNDAwMDAwMAotI2RlZmluZSBTUEVBUjMxMF9TT0NfQ09ORklHX1NJWkUJMHgwMDAwMDA3MAogLyogSW50ZXJydXB0IHJlZ2lzdGVycyBvZmZzZXRzIGFuZCBtYXNrcyAqLwogI2RlZmluZSBJTlRfU1RTX01BU0tfUkVHCQkweDA0CiAjZGVmaW5lIFNNSUkwX0lSUV9NQVNLCQkJKDEgPDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzIwLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhcjMyMC5oCmluZGV4IGNhY2YxN2EuLjk0MGYwZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzIwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMjAuaApAQCAtMTYsNTQgKzE2LDI1IEBACiAjaWZuZGVmIF9fTUFDSF9TUEVBUjMyMF9ICiAjZGVmaW5lIF9fTUFDSF9TUEVBUjMyMF9ICiAKLSNkZWZpbmUgU1BFQVIzMjBfRU1JX0NUUkxfQkFTRQkJMHg0MDAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9FTUlfQ1RSTF9TSVpFCQkweDA4MDAwMDAwCisjZGVmaW5lIFNQRUFSMzIwX0VNSV9DVFJMX0JBU0UJCVVMKDB4NDAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX0ZTTUNfQkFTRQkJVUwoMHg0QzAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfTkFORF9CQVNFCQlVTCgweDUwMDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9JMlNfQkFTRQkJVUwoMHg2MDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfU0RIQ0lfQkFTRQkJVUwoMHg3MDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfQ0xDRF9CQVNFCQlVTCgweDkwMDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9QQVJfUE9SVF9CQVNFCQlVTCgweEEwMDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9DQU4wX0JBU0UJCVVMKDB4QTEwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX0NBTjFfQkFTRQkJVUwoMHhBMjAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfVUFSVDFfQkFTRQkJVUwoMHhBMzAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfVUFSVDJfQkFTRQkJVUwoMHhBNDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfU1NQMF9CQVNFCQlVTCgweEE1MDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9TU1AxX0JBU0UJCVVMKDB4QTYwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX0kyQ19CQVNFCQlVTCgweEE3MDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9QV01fQkFTRQkJVUwoMHhBODAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfU01JSTBfQkFTRQkJVUwoMHhBQTAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfU01JSTFfQkFTRQkJVUwoMHhBQjAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfU09DX0NPTkZJR19CQVNFCVVMKDB4QjMwMDAwMDApCiAKLSNkZWZpbmUgU1BFQVIzMjBfRlNNQ19CQVNFCQkweDRDMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX0ZTTUNfU0laRQkJMHgwMTAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzIwX0kyU19CQVNFCQkweDYwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX0kyU19TSVpFCQkweDEwMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfU0RJT19CQVNFCQkweDcwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1NESU9fU0laRQkJMHgxMDAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzIwX0NMQ0RfQkFTRQkJMHg5MDAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9DTENEX1NJWkUJCTB4MTAwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9QQVJfUE9SVF9CQVNFCQkweEEwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1BBUl9QT1JUX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9DQU4wX0JBU0UJCTB4QTEwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMjBfQ0FOMF9TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfQ0FOMV9CQVNFCQkweEEyMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX0NBTjFfU0laRQkJMHgwMTAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzIwX1VBUlQxX0JBU0UJCTB4QTMwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMjBfVUFSVDJfQkFTRQkJMHhBNDAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9VQVJUX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9TU1AwX0JBU0UJCTB4QTUwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMjBfU1NQMF9TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfU1NQMV9CQVNFCQkweEE2MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1NTUDFfU0laRQkJMHgwMTAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzIwX0kyQ19CQVNFCQkweEE3MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX0kyQ19TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfUFdNX0JBU0UJCTB4QTgwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMjBfUFdNX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9TTUlJMF9CQVNFCQkweEFBMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1NNSUkwX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9TTUlJMV9CQVNFCQkweEFCMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1NNSUkxX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9TT0NfQ09ORklHX0JBU0UJMHhCNDAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9TT0NfQ09ORklHX1NJWkUJMHgwMDAwMDA3MAogLyogSW50ZXJydXB0IHJlZ2lzdGVycyBvZmZzZXRzIGFuZCBtYXNrcyAqLwogI2RlZmluZSBJTlRfU1RTX01BU0tfUkVHCQkweDA0CiAjZGVmaW5lIElOVF9DTFJfTUFTS19SRUcJCTB4MDQKQEAgLTc0LDcgKzQ1LDcgQEAKICNkZWZpbmUgRU1JX0lSUV9NQVNLCQkJKDEgPDwgNykKICNkZWZpbmUgQ0xDRF9JUlFfTUFTSwkJCSgxIDw8IDgpCiAjZGVmaW5lIFNQUF9JUlFfTUFTSwkJCSgxIDw8IDkpCi0jZGVmaW5lIFNESU9fSVJRX01BU0sJCQkoMSA8PCAxMCkKKyNkZWZpbmUgU0RIQ0lfSVJRX01BU0sJCQkoMSA8PCAxMCkKICNkZWZpbmUgQ0FOX1VfSVJRX01BU0sJCQkoMSA8PCAxMSkKICNkZWZpbmUgQ0FOX0xfSVJRX01BU0sJCQkoMSA8PCAxMikKICNkZWZpbmUgVUFSVDFfSVJRX01BU0sJCQkoMSA8PCAxMykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMDAuYyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMDAuYwppbmRleCA1YWEyZDU0Li4yNjk3ZTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMwMC5jCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CiAjaW5jbHVkZSA8cGxhdC9zaGlycS5oPgorI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogLyogcGFkIG11bHRpcGxleGluZyBzdXBwb3J0ICovCiAvKiBtdXhpbmcgcmVnaXN0ZXJzICovCkBAIC0zMTAsNyArMzEwLDcgQEAKIAkuZW5iX29uX3Jlc2V0ID0gMSwKIH07CiAKLXN0cnVjdCBwbXhfZGV2X21vZGUgcG14X3RlbGVjb21fc2Rpb180Yml0X21vZGVzW10gPSB7CitzdHJ1Y3QgcG14X2Rldl9tb2RlIHBteF90ZWxlY29tX3NkaGNpXzRiaXRfbW9kZXNbXSA9IHsKIAl7CiAJCS5pZHMgPSBQSE9UT19GUkFNRV9NT0RFIHwgTEVORF9JUF9QSE9ORV9NT0RFIHwKIAkJCUhFTkRfSVBfUEhPTkVfTU9ERSB8IExFTkRfV0lGSV9QSE9ORV9NT0RFIHwKQEAgLTMyMywxNCArMzIzLDE0IEBACiAJfSwKIH07CiAKLXN0cnVjdCBwbXhfZGV2IHBteF90ZWxlY29tX3NkaW9fNGJpdCA9IHsKLQkubmFtZSA9ICJ0ZWxlY29tX3NkaW9fNGJpdCIsCi0JLm1vZGVzID0gcG14X3RlbGVjb21fc2Rpb180Yml0X21vZGVzLAotCS5tb2RlX2NvdW50ID0gQVJSQVlfU0laRShwbXhfdGVsZWNvbV9zZGlvXzRiaXRfbW9kZXMpLAorc3RydWN0IHBteF9kZXYgcG14X3RlbGVjb21fc2RoY2lfNGJpdCA9IHsKKwkubmFtZSA9ICJ0ZWxlY29tX3NkaGNpXzRiaXQiLAorCS5tb2RlcyA9IHBteF90ZWxlY29tX3NkaGNpXzRiaXRfbW9kZXMsCisJLm1vZGVfY291bnQgPSBBUlJBWV9TSVpFKHBteF90ZWxlY29tX3NkaGNpXzRiaXRfbW9kZXMpLAogCS5lbmJfb25fcmVzZXQgPSAxLAogfTsKIAotc3RydWN0IHBteF9kZXZfbW9kZSBwbXhfdGVsZWNvbV9zZGlvXzhiaXRfbW9kZXNbXSA9IHsKK3N0cnVjdCBwbXhfZGV2X21vZGUgcG14X3RlbGVjb21fc2RoY2lfOGJpdF9tb2Rlc1tdID0gewogCXsKIAkJLmlkcyA9IFBIT1RPX0ZSQU1FX01PREUgfCBMRU5EX0lQX1BIT05FX01PREUgfAogCQkJSEVORF9JUF9QSE9ORV9NT0RFIHwgTEVORF9XSUZJX1BIT05FX01PREUgfApAQCAtMzQyLDEwICszNDIsMTAgQEAKIAl9LAogfTsKIAotc3RydWN0IHBteF9kZXYgcG14X3RlbGVjb21fc2Rpb184Yml0ID0gewotCS5uYW1lID0gInRlbGVjb21fc2Rpb184Yml0IiwKLQkubW9kZXMgPSBwbXhfdGVsZWNvbV9zZGlvXzhiaXRfbW9kZXMsCi0JLm1vZGVfY291bnQgPSBBUlJBWV9TSVpFKHBteF90ZWxlY29tX3NkaW9fOGJpdF9tb2RlcyksCitzdHJ1Y3QgcG14X2RldiBwbXhfdGVsZWNvbV9zZGhjaV84Yml0ID0geworCS5uYW1lID0gInRlbGVjb21fc2RoY2lfOGJpdCIsCisJLm1vZGVzID0gcG14X3RlbGVjb21fc2RoY2lfOGJpdF9tb2RlcywKKwkubW9kZV9jb3VudCA9IEFSUkFZX1NJWkUocG14X3RlbGVjb21fc2RoY2lfOGJpdF9tb2RlcyksCiAJLmVuYl9vbl9yZXNldCA9IDEsCiB9OwogCkBAIC0zNzAsMjYgKzM3MCw2IEBACiAJLm11eF9yZWcgPSB7Lm9mZnNldCA9IFBBRF9NVVhfQ09ORklHX1JFRywgLm1hc2sgPSAweDAwMDA3ZmZmfSwKIH07CiAKLS8qIEFkZCBzcGVhcjMwMCBzcGVjaWZpYyBkZXZpY2VzIGhlcmUgKi8KLS8qIGFybSBncGlvMSBkZXZpY2UgcmVnaXN0cmF0aW9uICovCi1zdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzFfcGxhdF9kYXRhID0gewotCS5ncGlvX2Jhc2UJPSA4LAotCS5pcnFfYmFzZQk9IFNQRUFSX0dQSU8xX0lOVF9CQVNFLAotfTsKLQotc3RydWN0IGFtYmFfZGV2aWNlIGdwaW8xX2RldmljZSA9IHsKLQkuZGV2ID0gewotCQkuaW5pdF9uYW1lID0gImdwaW8xIiwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZ3BpbzFfcGxhdF9kYXRhLAotCX0sCi0JLnJlcyA9IHsKLQkJLnN0YXJ0ID0gU1BFQVIzMDBfR1BJT19CQVNFLAotCQkuZW5kID0gU1BFQVIzMDBfR1BJT19CQVNFICsgU1BFQVIzMDBfR1BJT19TSVpFIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQkuaXJxID0ge1ZJUlFfR1BJTzEsIE5PX0lSUX0sCi19OwotCiAvKiBzcGVhcjN4eCBzaGFyZWQgaXJxICovCiBzdHJ1Y3Qgc2hpcnFfZGV2X2NvbmZpZyBzaGlycV9yYXMxX2NvbmZpZ1tdID0gewogCXsKQEAgLTQ0Myw2ICs0MjMsMjYgQEAKIAl9LAogfTsKIAorLyogQWRkIHNwZWFyMzAwIHNwZWNpZmljIGRldmljZXMgaGVyZSAqLworLyogYXJtIGdwaW8xIGRldmljZSByZWdpc3RyYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMV9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDgsCisJLmlycV9iYXNlCT0gU1BFQVJfR1BJTzFfSU5UX0JBU0UsCit9OworCitzdHJ1Y3QgYW1iYV9kZXZpY2UgZ3BpbzFfZGV2aWNlID0geworCS5kZXYgPSB7CisJCS5pbml0X25hbWUgPSAiZ3BpbzEiLAorCQkucGxhdGZvcm1fZGF0YSA9ICZncGlvMV9wbGF0X2RhdGEsCisJfSwKKwkucmVzID0geworCQkuc3RhcnQgPSBTUEVBUjMwMF9HUElPX0JBU0UsCisJCS5lbmQgPSBTUEVBUjMwMF9HUElPX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLmlycSA9IHtWSVJRX0dQSU8xLCBOT19JUlF9LAorfTsKKwogLyogc3BlYXIzMDAgcm91dGluZXMgKi8KIHZvaWQgX19pbml0IHNwZWFyMzAwX2luaXQodm9pZCkKIHsKQEAgLTQ1MiwxNyArNDUyLDIxIEBACiAJc3BlYXIzeHhfaW5pdCgpOwogCiAJLyogc2hhcmVkIGlycSByZWdpc3RyYXRpb24gKi8KLQlzaGlycV9yYXMxLnJlZ3MuYmFzZSA9Ci0JCWlvcmVtYXAoU1BFQVIzMDBfVEVMRUNPTV9CQVNFLCBTUEVBUjMwMF9URUxFQ09NX1JFR19TSVpFKTsKKwlzaGlycV9yYXMxLnJlZ3MuYmFzZSA9IGlvcmVtYXAoU1BFQVIzMDBfVEVMRUNPTV9CQVNFLCBTWl80Syk7CiAJaWYgKHNoaXJxX3JhczEucmVncy5iYXNlKSB7CiAJCXJldCA9IHNwZWFyX3NoaXJxX3JlZ2lzdGVyKCZzaGlycV9yYXMxKTsKIAkJaWYgKHJldCkKIAkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVnaXN0ZXJpbmcgU2hhcmVkIElSUVxuIik7CiAJfQotfQogCi12b2lkIHNwZWFyMzAwX3BteF9pbml0KHZvaWQpCi17Ci0Jc3BlYXJfcG14X2luaXQoJnBteF9kcml2ZXIsIFNQRUFSMzAwX1NPQ19DT05GSUdfQkFTRSwKLQkJCVNQRUFSMzAwX1NPQ19DT05GSUdfU0laRSk7CisJLyogcG14IGluaXRpYWxpemF0aW9uICovCisJcG14X2RyaXZlci5iYXNlID0gaW9yZW1hcChTUEVBUjMwMF9TT0NfQ09ORklHX0JBU0UsIFNaXzRLKTsKKwlpZiAocG14X2RyaXZlci5iYXNlKSB7CisJCXJldCA9IHBteF9yZWdpc3RlcigmcG14X2RyaXZlcik7CisJCWlmIChyZXQpCisJCQlwcmludGsoS0VSTl9FUlIgInBhZG11eDogcmVnaXN0ZXJhdGlvbiBmYWlsZWQuIGVyciBubyIKKwkJCQkJIjogJWRcbiIsIHJldCk7CisJCS8qIEZyZWUgTWFwcGluZywgZGV2aWNlIHNlbGVjdGlvbiBhbHJlYWR5IGRvbmUgKi8KKwkJaW91bm1hcChwbXhfZHJpdmVyLmJhc2UpOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMDBfZXZiLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzAwX2V2Yi5jCmluZGV4IGJiMjFkYjEuLjQyZDIyNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMDBfZXZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMwMF9ldmIuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIC8qIHBhZG11eCBkZXZpY2VzIHRvIGVuYWJsZSAqLwogc3RhdGljIHN0cnVjdCBwbXhfZGV2ICpwbXhfZGV2c1tdID0gewpAQCAtMjgsNyArMjgsNyBAQAogCS8qIHNwZWFyMzAwIHNwZWNpZmljIGRldmljZXMgKi8KIAkmcG14X2ZzbWNfMl9jaGlwcywKIAkmcG14X2NsY2QsCi0JJnBteF90ZWxlY29tX3NkaW9fNGJpdCwKKwkmcG14X3RlbGVjb21fc2RoY2lfNGJpdCwKIAkmcG14X2dwaW8xLAogfTsKIApAQCAtNTEsMTQgKzUxLDEzIEBACiB7CiAJdW5zaWduZWQgaW50IGk7CiAKLQkvKiBjYWxsIHNwZWFyMzAwIG1hY2hpbmUgaW5pdCBmdW5jdGlvbiAqLwotCXNwZWFyMzAwX2luaXQoKTsKLQotCS8qIHBhZG11eCBpbml0aWFsaXphdGlvbiAqLworCS8qIHBhZG11eCBpbml0aWFsaXphdGlvbiwgbXVzdCBiZSBkb25lIGJlZm9yZSBzcGVhcjMwMF9pbml0ICovCiAJcG14X2RyaXZlci5tb2RlID0gJnBob3RvX2ZyYW1lX21vZGU7CiAJcG14X2RyaXZlci5kZXZzID0gcG14X2RldnM7CiAJcG14X2RyaXZlci5kZXZzX2NvdW50ID0gQVJSQVlfU0laRShwbXhfZGV2cyk7Ci0Jc3BlYXIzMDBfcG14X2luaXQoKTsKKworCS8qIGNhbGwgc3BlYXIzMDAgbWFjaGluZSBpbml0IGZ1bmN0aW9uICovCisJc3BlYXIzMDBfaW5pdCgpOwogCiAJLyogQWRkIFBsYXRmb3JtIERldmljZXMgKi8KIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0X2RldnMsIEFSUkFZX1NJWkUocGxhdF9kZXZzKSk7CkBAIC03Miw2ICs3MSw2IEBACiAJLmJvb3RfcGFyYW1zCT0JMHgwMDAwMDEwMCwKIAkubWFwX2lvCQk9CXNwZWFyM3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPQlzcGVhcjN4eF9pbml0X2lycSwKLQkudGltZXIJCT0JJnNwZWFyX3N5c190aW1lciwKKwkudGltZXIJCT0JJnNwZWFyM3h4X3RpbWVyLAogCS5pbml0X21hY2hpbmUJPQlzcGVhcjMwMF9ldmJfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzEwLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzEwLmMKaW5kZXggNTNiNDFiNS4uNWMwYTY3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMTAuYwpAQCAtMTMsOSArMTMsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KICNpbmNsdWRlIDxwbGF0L3NoaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9nZW5lcmljLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKiBwYWQgbXVsdGlwbGV4aW5nIHN1cHBvcnQgKi8KIC8qIG11eGluZyByZWdpc3RlcnMgKi8KQEAgLTEzOSw4ICsxMzksNiBAQAogCS5tdXhfcmVnID0gey5vZmZzZXQgPSBQQURfTVVYX0NPTkZJR19SRUcsIC5tYXNrID0gMHgwMDAwN2ZmZn0sCiB9OwogCi0vKiBBZGQgc3BlYXIzMTAgc3BlY2lmaWMgZGV2aWNlcyBoZXJlICovCi0KIC8qIHNwZWFyM3h4IHNoYXJlZCBpcnEgKi8KIHN0cnVjdCBzaGlycV9kZXZfY29uZmlnIHNoaXJxX3JhczFfY29uZmlnW10gPSB7CiAJewpAQCAtMjU3LDYgKzI1NSw4IEBACiAJfSwKIH07CiAKKy8qIEFkZCBzcGVhcjMxMCBzcGVjaWZpYyBkZXZpY2VzIGhlcmUgKi8KKwogLyogc3BlYXIzMTAgcm91dGluZXMgKi8KIHZvaWQgX19pbml0IHNwZWFyMzEwX2luaXQodm9pZCkKIHsKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCXNwZWFyM3h4X2luaXQoKTsKIAogCS8qIHNoYXJlZCBpcnEgcmVnaXN0cmF0aW9uICovCi0JYmFzZSA9IGlvcmVtYXAoU1BFQVIzMTBfU09DX0NPTkZJR19CQVNFLCBTUEVBUjMxMF9TT0NfQ09ORklHX1NJWkUpOworCWJhc2UgPSBpb3JlbWFwKFNQRUFSMzEwX1NPQ19DT05GSUdfQkFTRSwgU1pfNEspOwogCWlmIChiYXNlKSB7CiAJCS8qIHNoaXJxIDEgKi8KIAkJc2hpcnFfcmFzMS5yZWdzLmJhc2UgPSBiYXNlOwpAQCAtMjkzLDEwICsyOTMsMTEgQEAKIAkJaWYgKHJldCkKIAkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVnaXN0ZXJpbmcgU2hhcmVkIElSUSA0XG4iKTsKIAl9Ci19CiAKLXZvaWQgc3BlYXIzMTBfcG14X2luaXQodm9pZCkKLXsKLQlzcGVhcl9wbXhfaW5pdCgmcG14X2RyaXZlciwgU1BFQVIzMTBfU09DX0NPTkZJR19CQVNFLAotCQkJU1BFQVIzMTBfU09DX0NPTkZJR19TSVpFKTsKKwkvKiBwbXggaW5pdGlhbGl6YXRpb24gKi8KKwlwbXhfZHJpdmVyLmJhc2UgPSBiYXNlOworCXJldCA9IHBteF9yZWdpc3RlcigmcG14X2RyaXZlcik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJwYWRtdXg6IHJlZ2lzdGVyYXRpb24gZmFpbGVkLiBlcnIgbm86ICVkXG4iLAorCQkJCXJldCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzEwX2V2Yi5jIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMxMF9ldmIuYwppbmRleCA3ZmFjZjY2Li4yZDdmMzMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzEwX2V2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMTBfZXZiLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKiBwYWRtdXggZGV2aWNlcyB0byBlbmFibGUgKi8KIHN0YXRpYyBzdHJ1Y3QgcG14X2RldiAqcG14X2RldnNbXSA9IHsKQEAgLTU4LDE0ICs1OCwxMyBAQAogewogCXVuc2lnbmVkIGludCBpOwogCi0JLyogY2FsbCBzcGVhcjMxMCBtYWNoaW5lIGluaXQgZnVuY3Rpb24gKi8KLQlzcGVhcjMxMF9pbml0KCk7Ci0KLQkvKiBwYWRtdXggaW5pdGlhbGl6YXRpb24gKi8KKwkvKiBwYWRtdXggaW5pdGlhbGl6YXRpb24sIG11c3QgYmUgZG9uZSBiZWZvcmUgc3BlYXIzMTBfaW5pdCAqLwogCXBteF9kcml2ZXIubW9kZSA9IE5VTEw7CiAJcG14X2RyaXZlci5kZXZzID0gcG14X2RldnM7CiAJcG14X2RyaXZlci5kZXZzX2NvdW50ID0gQVJSQVlfU0laRShwbXhfZGV2cyk7Ci0Jc3BlYXIzMTBfcG14X2luaXQoKTsKKworCS8qIGNhbGwgc3BlYXIzMTAgbWFjaGluZSBpbml0IGZ1bmN0aW9uICovCisJc3BlYXIzMTBfaW5pdCgpOwogCiAJLyogQWRkIFBsYXRmb3JtIERldmljZXMgKi8KIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0X2RldnMsIEFSUkFZX1NJWkUocGxhdF9kZXZzKSk7CkBAIC03OSw2ICs3OCw2IEBACiAJLmJvb3RfcGFyYW1zCT0JMHgwMDAwMDEwMCwKIAkubWFwX2lvCQk9CXNwZWFyM3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPQlzcGVhcjN4eF9pbml0X2lycSwKLQkudGltZXIJCT0JJnNwZWFyX3N5c190aW1lciwKKwkudGltZXIJCT0JJnNwZWFyM3h4X3RpbWVyLAogCS5pbml0X21hY2hpbmUJPQlzcGVhcjMxMF9ldmJfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzIwLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzIwLmMKaW5kZXggODhiNDY1Mi4uNzQxYzFmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMjAuYwpAQCAtMTMsOSArMTMsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KICNpbmNsdWRlIDxwbGF0L3NoaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9nZW5lcmljLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKiBwYWQgbXVsdGlwbGV4aW5nIHN1cHBvcnQgKi8KIC8qIG11eGluZyByZWdpc3RlcnMgKi8KQEAgLTExMCw3ICsxMTAsNyBAQAogCS5lbmJfb25fcmVzZXQgPSAxLAogfTsKIAotc3RydWN0IHBteF9kZXZfbW9kZSBwbXhfc2Rpb19tb2Rlc1tdID0geworc3RydWN0IHBteF9kZXZfbW9kZSBwbXhfc2RoY2lfbW9kZXNbXSA9IHsKIAl7CiAJCS5pZHMgPSBBVVRPX05FVF9TTUlJX01PREUgfCBBVVRPX05FVF9NSUlfTU9ERSB8CiAJCQlTTUFMTF9QUklOVEVSU19NT0RFLApAQCAtMTE4LDEwICsxMTgsMTAgQEAKIAl9LAogfTsKIAotc3RydWN0IHBteF9kZXYgcG14X3NkaW8gPSB7Ci0JLm5hbWUgPSAic2RpbyIsCi0JLm1vZGVzID0gcG14X3NkaW9fbW9kZXMsCi0JLm1vZGVfY291bnQgPSBBUlJBWV9TSVpFKHBteF9zZGlvX21vZGVzKSwKK3N0cnVjdCBwbXhfZGV2IHBteF9zZGhjaSA9IHsKKwkubmFtZSA9ICJzZGhjaSIsCisJLm1vZGVzID0gcG14X3NkaGNpX21vZGVzLAorCS5tb2RlX2NvdW50ID0gQVJSQVlfU0laRShwbXhfc2RoY2lfbW9kZXMpLAogCS5lbmJfb25fcmVzZXQgPSAxLAogfTsKIApAQCAtMjE1LDE3ICsyMTUsMTcgQEAKIAkuZW5iX29uX3Jlc2V0ID0gMSwKIH07CiAKLXN0cnVjdCBwbXhfZGV2X21vZGUgcG14X3NkaW9fbGVkX21vZGVzW10gPSB7CitzdHJ1Y3QgcG14X2Rldl9tb2RlIHBteF9zZGhjaV9sZWRfbW9kZXNbXSA9IHsKIAl7CiAJCS5pZHMgPSBBVVRPX05FVF9TTUlJX01PREUgfCBBVVRPX05FVF9NSUlfTU9ERSwKIAkJLm1hc2sgPSBQTVhfU1NQX0NTX01BU0ssCiAJfSwKIH07CiAKLXN0cnVjdCBwbXhfZGV2IHBteF9zZGlvX2xlZCA9IHsKLQkubmFtZSA9ICJzZGlvX2xlZCIsCi0JLm1vZGVzID0gcG14X3NkaW9fbGVkX21vZGVzLAotCS5tb2RlX2NvdW50ID0gQVJSQVlfU0laRShwbXhfc2Rpb19sZWRfbW9kZXMpLAorc3RydWN0IHBteF9kZXYgcG14X3NkaGNpX2xlZCA9IHsKKwkubmFtZSA9ICJzZGhjaV9sZWQiLAorCS5tb2RlcyA9IHBteF9zZGhjaV9sZWRfbW9kZXMsCisJLm1vZGVfY291bnQgPSBBUlJBWV9TSVpFKHBteF9zZGhjaV9sZWRfbW9kZXMpLAogCS5lbmJfb25fcmVzZXQgPSAxLAogfTsKIApAQCAtMzg0LDggKzM4NCw2IEBACiAJLm11eF9yZWcgPSB7Lm9mZnNldCA9IFBBRF9NVVhfQ09ORklHX1JFRywgLm1hc2sgPSAweDAwMDA3ZmZmfSwKIH07CiAKLS8qIEFkZCBzcGVhcjMyMCBzcGVjaWZpYyBkZXZpY2VzIGhlcmUgKi8KLQogLyogc3BlYXIzeHggc2hhcmVkIGlycSAqLwogc3RydWN0IHNoaXJxX2Rldl9jb25maWcgc2hpcnFfcmFzMV9jb25maWdbXSA9IHsKIAl7CkBAIC01MTAsNiArNTA4LDggQEAKIAl9LAogfTsKIAorLyogQWRkIHNwZWFyMzIwIHNwZWNpZmljIGRldmljZXMgaGVyZSAqLworCiAvKiBzcGVhcjMyMCByb3V0aW5lcyAqLwogdm9pZCBfX2luaXQgc3BlYXIzMjBfaW5pdCh2b2lkKQogewpAQCAtNTIwLDcgKzUyMCw3IEBACiAJc3BlYXIzeHhfaW5pdCgpOwogCiAJLyogc2hhcmVkIGlycSByZWdpc3RyYXRpb24gKi8KLQliYXNlID0gaW9yZW1hcChTUEVBUjMyMF9TT0NfQ09ORklHX0JBU0UsIFNQRUFSMzIwX1NPQ19DT05GSUdfU0laRSk7CisJYmFzZSA9IGlvcmVtYXAoU1BFQVIzMjBfU09DX0NPTkZJR19CQVNFLCBTWl80Syk7CiAJaWYgKGJhc2UpIHsKIAkJLyogc2hpcnEgMSAqLwogCQlzaGlycV9yYXMxLnJlZ3MuYmFzZSA9IGJhc2U7CkBAIC01NDAsMTAgKzU0MCwxMSBAQAogCQlpZiAocmV0KQogCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWdpc3RlcmluZyBTaGFyZWQgSVJRIDRcbiIpOwogCX0KLX0KIAotdm9pZCBzcGVhcjMyMF9wbXhfaW5pdCh2b2lkKQotewotCXNwZWFyX3BteF9pbml0KCZwbXhfZHJpdmVyLCBTUEVBUjMyMF9TT0NfQ09ORklHX0JBU0UsCi0JCQlTUEVBUjMyMF9TT0NfQ09ORklHX1NJWkUpOworCS8qIHBteCBpbml0aWFsaXphdGlvbiAqLworCXBteF9kcml2ZXIuYmFzZSA9IGJhc2U7CisJcmV0ID0gcG14X3JlZ2lzdGVyKCZwbXhfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgInBhZG11eDogcmVnaXN0ZXJhdGlvbiBmYWlsZWQuIGVyciBubzogJWRcbiIsCisJCQkJcmV0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMjBfZXZiLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzIwX2V2Yi5jCmluZGV4IDYyYWM2ODUuLjgyMTNlNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMjBfZXZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMyMF9ldmIuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIC8qIHBhZG11eCBkZXZpY2VzIHRvIGVuYWJsZSAqLwogc3RhdGljIHN0cnVjdCBwbXhfZGV2ICpwbXhfZGV2c1tdID0gewpAQCAtMjYsNyArMjYsNyBAQAogCiAJLyogc3BlYXIzMjAgc3BlY2lmaWMgZGV2aWNlcyAqLwogCSZwbXhfZnNtYywKLQkmcG14X3NkaW8sCisJJnBteF9zZGhjaSwKIAkmcG14X2kycywKIAkmcG14X3VhcnQxLAogCSZwbXhfdWFydDIsCkBAIC01NSwxNCArNTUsMTMgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCS8qIGNhbGwgc3BlYXIzMjAgbWFjaGluZSBpbml0IGZ1bmN0aW9uICovCi0Jc3BlYXIzMjBfaW5pdCgpOwotCi0JLyogcGFkbXV4IGluaXRpYWxpemF0aW9uICovCisJLyogcGFkbXV4IGluaXRpYWxpemF0aW9uLCBtdXN0IGJlIGRvbmUgYmVmb3JlIHNwZWFyMzIwX2luaXQgKi8KIAlwbXhfZHJpdmVyLm1vZGUgPSAmYXV0b19uZXRfbWlpX21vZGU7CiAJcG14X2RyaXZlci5kZXZzID0gcG14X2RldnM7CiAJcG14X2RyaXZlci5kZXZzX2NvdW50ID0gQVJSQVlfU0laRShwbXhfZGV2cyk7Ci0Jc3BlYXIzMjBfcG14X2luaXQoKTsKKworCS8qIGNhbGwgc3BlYXIzMjAgbWFjaGluZSBpbml0IGZ1bmN0aW9uICovCisJc3BlYXIzMjBfaW5pdCgpOwogCiAJLyogQWRkIFBsYXRmb3JtIERldmljZXMgKi8KIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0X2RldnMsIEFSUkFZX1NJWkUocGxhdF9kZXZzKSk7CkBAIC03Niw2ICs3NSw2IEBACiAJLmJvb3RfcGFyYW1zCT0JMHgwMDAwMDEwMCwKIAkubWFwX2lvCQk9CXNwZWFyM3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPQlzcGVhcjN4eF9pbml0X2lycSwKLQkudGltZXIJCT0JJnNwZWFyX3N5c190aW1lciwKKwkudGltZXIJCT0JJnNwZWFyM3h4X3RpbWVyLAogCS5pbml0X21hY2hpbmUJPQlzcGVhcjMyMF9ldmJfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyM3h4LmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyM3h4LmMKaW5kZXggNTJmNTUzYy4uZDNiYThjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzeHguYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8bWFjaC9nZW5lcmljLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogLyogQWRkIHNwZWFyM3h4IG1hY2hpbmVzIGNvbW1vbiBkZXZpY2VzIGhlcmUgKi8KIC8qIGdwaW8gZGV2aWNlIHJlZ2lzdHJhdGlvbiAqLwpAQCAtMzUsNyArMzUsNyBAQAogCX0sCiAJLnJlcyA9IHsKIAkJLnN0YXJ0ID0gU1BFQVIzWFhfSUNNM19HUElPX0JBU0UsCi0JCS5lbmQgPSBTUEVBUjNYWF9JQ00zX0dQSU9fQkFTRSArIFNQRUFSM1hYX0lDTTNfR1BJT19TSVpFIC0gMSwKKwkJLmVuZCA9IFNQRUFSM1hYX0lDTTNfR1BJT19CQVNFICsgU1pfNEsgLSAxLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCS5pcnEgPSB7SVJRX0JBU0lDX0dQSU8sIE5PX0lSUX0sCkBAIC00OCw3ICs0OCw3IEBACiAJfSwKIAkucmVzID0gewogCQkuc3RhcnQgPSBTUEVBUjNYWF9JQ00xX1VBUlRfQkFTRSwKLQkJLmVuZCA9IFNQRUFSM1hYX0lDTTFfVUFSVF9CQVNFICsgU1BFQVIzWFhfSUNNMV9VQVJUX1NJWkUgLSAxLAorCQkuZW5kID0gU1BFQVIzWFhfSUNNMV9VQVJUX0JBU0UgKyBTWl80SyAtIDEsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJLmlycSA9IHtJUlFfVUFSVCwgTk9fSVJRfSwKQEAgLTcxLDIyICs3MSwyMiBAQAogCXsKIAkJLnZpcnR1YWwJPSBWQV9TUEVBUjNYWF9JQ00xX1VBUlRfQkFTRSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFNQRUFSM1hYX0lDTTFfVUFSVF9CQVNFKSwKLQkJLmxlbmd0aAkJPSBTUEVBUjNYWF9JQ00xX1VBUlRfU0laRSwKKwkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewogCQkudmlydHVhbAk9IFZBX1NQRUFSM1hYX01MMV9WSUNfQkFTRSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFNQRUFSM1hYX01MMV9WSUNfQkFTRSksCi0JCS5sZW5ndGgJCT0gU1BFQVIzWFhfTUwxX1ZJQ19TSVpFLAorCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LCB7CiAJCS52aXJ0dWFsCT0gVkFfU1BFQVIzWFhfSUNNM19TWVNfQ1RSTF9CQVNFLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oU1BFQVIzWFhfSUNNM19TWVNfQ1RSTF9CQVNFKSwKLQkJLmxlbmd0aAkJPSBTUEVBUjNYWF9JQ00zX1NZU19DVFJMX1NJWkUsCisJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sIHsKIAkJLnZpcnR1YWwJPSBWQV9TUEVBUjNYWF9JQ00zX01JU0NfUkVHX0JBU0UsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEVBUjNYWF9JQ00zX01JU0NfUkVHX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNQRUFSM1hYX0lDTTNfTUlTQ19SRUdfU0laRSwKKwkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwKIH07CkBAIC01MjMsMjYgKzUyMywzNSBAQAogCS5tb2RlX2NvdW50ID0gQVJSQVlfU0laRShwbXhfcGxncGlvXzQ1XzQ2XzQ5XzUwX21vZGVzKSwKIAkuZW5iX29uX3Jlc2V0ID0gMSwKIH07CisjZW5kaWYgLyogQ09ORklHX01BQ0hfU1BFQVIzMTAgfHwgQ09ORklHX01BQ0hfU1BFQVIzMjAgKi8KIAotI2VuZGlmCi0KLS8qIHNwZWFyIHBhZG11eCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAqLwotdm9pZCBzcGVhcl9wbXhfaW5pdChzdHJ1Y3QgcG14X2RyaXZlciAqcG14X2RyaXZlciwgdWludCBiYXNlLCB1aW50IHNpemUpCitzdGF0aWMgdm9pZCBfX2luaXQgc3BlYXIzeHhfdGltZXJfaW5pdCh2b2lkKQogewotCWludCByZXQgPSAwOworCWNoYXIgcGNsa19uYW1lW10gPSAicGxsM180OG1fY2xrIjsKKwlzdHJ1Y3QgY2xrICpncHRfY2xrLCAqcGNsazsKIAotCS8qIHBhZCBtdXggaW5pdGlhbGl6YXRpb24gKi8KLQlwbXhfZHJpdmVyLT5iYXNlID0gaW9yZW1hcChiYXNlLCBzaXplKTsKLQlpZiAoIXBteF9kcml2ZXItPmJhc2UpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBwbXhfZmFpbDsKKwkvKiBnZXQgdGhlIHN5c3RlbSB0aW1lciBjbG9jayAqLworCWdwdF9jbGsgPSBjbGtfZ2V0X3N5cygiZ3B0MCIsIE5VTEwpOworCWlmIChJU19FUlIoZ3B0X2NsaykpIHsKKwkJcHJfZXJyKCIlczpjb3VsZG4ndCBnZXQgY2xrIGZvciBncHRcbiIsIF9fZnVuY19fKTsKKwkJQlVHKCk7CiAJfQogCi0JcmV0ID0gcG14X3JlZ2lzdGVyKHBteF9kcml2ZXIpOwotCWlvdW5tYXAocG14X2RyaXZlci0+YmFzZSk7CisJLyogZ2V0IHRoZSBzdWl0YWJsZSBwYXJlbnQgY2xvY2sgZm9yIHRpbWVyKi8KKwlwY2xrID0gY2xrX2dldChOVUxMLCBwY2xrX25hbWUpOworCWlmIChJU19FUlIocGNsaykpIHsKKwkJcHJfZXJyKCIlczpjb3VsZG4ndCBnZXQgJXMgYXMgcGFyZW50IGZvciBncHRcbiIsCisJCQkJX19mdW5jX18sIHBjbGtfbmFtZSk7CisJCUJVRygpOworCX0KIAotcG14X2ZhaWw6Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICJwYWRtdXg6IHJlZ2lzdHJhdGlvbiBmYWlsZWQuIGVyciBubzogJWRcbiIsCi0JCQkJcmV0KTsKKwljbGtfc2V0X3BhcmVudChncHRfY2xrLCBwY2xrKTsKKwljbGtfcHV0KGdwdF9jbGspOworCWNsa19wdXQocGNsayk7CisKKwlzcGVhcl9zZXR1cF90aW1lcigpOwogfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIHNwZWFyM3h4X3RpbWVyID0geworCS5pbml0ID0gc3BlYXIzeHhfdGltZXJfaW5pdCwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2Nsb2NrLmMKaW5kZXggMzZmZjA1Ni4uODhiNzQ4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvY2xvY2suYwpAQCAtMTMsOCArMTMsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPG1hY2gvbWlzY19yZWdzLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvbWlzY19yZWdzLmg+CiAKIC8qIHJvb3QgY2xrcyAqLwogLyogMzIgS0h6IG9zY2lsbGF0b3IgY2xvY2sgKi8KQEAgLTM5LDE4ICszOSw0MyBAQAogfTsKIAogLyogY2xvY2sgZGVyaXZlZCBmcm9tIDMwIE1IeiBvc2MgY2xrICovCisvKiBwbGwgbWFza3Mgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IHBsbF9jbGtfbWFza3MgcGxsMV9tYXNrcyA9IHsKKwkubW9kZV9tYXNrID0gUExMX01PREVfTUFTSywKKwkubW9kZV9zaGlmdCA9IFBMTF9NT0RFX1NISUZULAorCS5ub3JtX2ZkYmtfbV9tYXNrID0gUExMX05PUk1fRkRCS19NX01BU0ssCisJLm5vcm1fZmRia19tX3NoaWZ0ID0gUExMX05PUk1fRkRCS19NX1NISUZULAorCS5kaXRoX2ZkYmtfbV9tYXNrID0gUExMX0RJVEhfRkRCS19NX01BU0ssCisJLmRpdGhfZmRia19tX3NoaWZ0ID0gUExMX0RJVEhfRkRCS19NX1NISUZULAorCS5kaXZfcF9tYXNrID0gUExMX0RJVl9QX01BU0ssCisJLmRpdl9wX3NoaWZ0ID0gUExMX0RJVl9QX1NISUZULAorCS5kaXZfbl9tYXNrID0gUExMX0RJVl9OX01BU0ssCisJLmRpdl9uX3NoaWZ0ID0gUExMX0RJVl9OX1NISUZULAorfTsKKwogLyogcGxsMSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwogc3RhdGljIHN0cnVjdCBwbGxfY2xrX2NvbmZpZyBwbGwxX2NvbmZpZyA9IHsKIAkubW9kZV9yZWcgPSBQTEwxX0NUUiwKIAkuY2ZnX3JlZyA9IFBMTDFfRlJRLAorCS5tYXNrcyA9ICZwbGwxX21hc2tzLAorfTsKKworLyogcGxsIHJhdGUgY29uZmlndXJhdGlvbiB0YWJsZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzICovCitzdHJ1Y3QgcGxsX3JhdGVfdGJsIHBsbF9ydGJsW10gPSB7CisJey5tb2RlID0gMCwgLm0gPSAweDg1LCAubiA9IDB4MEMsIC5wID0gMHgxfSwgLyogMjY2IE1IeiAqLworCXsubW9kZSA9IDAsIC5tID0gMHhBNiwgLm4gPSAweDBDLCAucCA9IDB4MX0sIC8qIDMzMiBNSHogKi8KIH07CiAKIC8qIFBMTDEgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHBsbDFfY2xrID0geworCS5mbGFncyA9IEVOQUJMRURfT05fSU5JVCwKIAkucGNsayA9ICZvc2NfMzBtX2NsaywKIAkuZW5fcmVnID0gUExMMV9DVFIsCiAJLmVuX3JlZ19iaXQgPSBQTExfRU5BQkxFLAotCS5yZWNhbGMgPSAmcGxsMV9jbGtfcmVjYWxjLAorCS5jYWxjX3JhdGUgPSAmcGxsX2NhbGNfcmF0ZSwKKwkucmVjYWxjID0gJnBsbF9jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZwbGxfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtwbGxfcnRibCwgQVJSQVlfU0laRShwbGxfcnRibCksIDF9LAogCS5wcml2YXRlX2RhdGEgPSAmcGxsMV9jb25maWcsCiB9OwogCkBAIC03NiwzMSArMTAxLDgzIEBACiAJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAorLyogYWhiIG1hc2tzIHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBidXNfY2xrX21hc2tzIGFoYl9tYXNrcyA9IHsKKwkubWFzayA9IFBMTF9IQ0xLX1JBVElPX01BU0ssCisJLnNoaWZ0ID0gUExMX0hDTEtfUkFUSU9fU0hJRlQsCit9OworCiAvKiBhaGIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBzdHJ1Y3QgYnVzX2Nsa19jb25maWcgYWhiX2NvbmZpZyA9IHsKIAkucmVnID0gQ09SRV9DTEtfQ0ZHLAotCS5tYXNrID0gUExMX0hDTEtfUkFUSU9fTUFTSywKLQkuc2hpZnQgPSBQTExfSENMS19SQVRJT19TSElGVCwKKwkubWFza3MgPSAmYWhiX21hc2tzLAorfTsKKworLyogYWhiIHJhdGUgY29uZmlndXJhdGlvbiB0YWJsZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzICovCitzdHJ1Y3QgYnVzX3JhdGVfdGJsIGJ1c19ydGJsW10gPSB7CisJey5kaXYgPSAzfSwgLyogPT0gcGFyZW50IGRpdmlkZWQgYnkgNCAqLworCXsuZGl2ID0gMn0sIC8qID09IHBhcmVudCBkaXZpZGVkIGJ5IDMgKi8KKwl7LmRpdiA9IDF9LCAvKiA9PSBwYXJlbnQgZGl2aWRlZCBieSAyICovCisJey5kaXYgPSAwfSwgLyogPT0gcGFyZW50IGRpdmlkZWQgYnkgMSAqLwogfTsKIAogLyogYWhiIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBhaGJfY2xrID0gewogCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAogCS5wY2xrID0gJnBsbDFfY2xrLAorCS5jYWxjX3JhdGUgPSAmYnVzX2NhbGNfcmF0ZSwKIAkucmVjYWxjID0gJmJ1c19jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZidXNfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtidXNfcnRibCwgQVJSQVlfU0laRShidXNfcnRibCksIDJ9LAogCS5wcml2YXRlX2RhdGEgPSAmYWhiX2NvbmZpZywKIH07CiAKKy8qIGF1eGlsaWFyeSBzeW50aGVzaXplcnMgbWFza3MgKi8KK3N0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19tYXNrcyBhdXhfbWFza3MgPSB7CisJLmVxX3NlbF9tYXNrID0gQVVYX0VRX1NFTF9NQVNLLAorCS5lcV9zZWxfc2hpZnQgPSBBVVhfRVFfU0VMX1NISUZULAorCS5lcTFfbWFzayA9IEFVWF9FUTFfU0VMLAorCS5lcTJfbWFzayA9IEFVWF9FUTJfU0VMLAorCS54c2NhbGVfc2VsX21hc2sgPSBBVVhfWFNDQUxFX01BU0ssCisJLnhzY2FsZV9zZWxfc2hpZnQgPSBBVVhfWFNDQUxFX1NISUZULAorCS55c2NhbGVfc2VsX21hc2sgPSBBVVhfWVNDQUxFX01BU0ssCisJLnlzY2FsZV9zZWxfc2hpZnQgPSBBVVhfWVNDQUxFX1NISUZULAorfTsKKworLyogdWFydCBjb25maWd1cmF0aW9ucyAqLworc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyB1YXJ0X3N5bnRoX2NvbmZpZyA9IHsKKwkuc3ludGhfcmVnID0gVUFSVF9DTEtfU1lOVCwKKwkubWFza3MgPSAmYXV4X21hc2tzLAorfTsKKworLyogYXV4IHJhdGUgY29uZmlndXJhdGlvbiB0YWJsZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzICovCitzdHJ1Y3QgYXV4X3JhdGVfdGJsIGF1eF9ydGJsW10gPSB7CisJLyogRm9yIFBMTDEgPSAzMzIgTUh6ICovCisJey54c2NhbGUgPSAxLCAueXNjYWxlID0gOCwgLmVxID0gMX0sIC8qIDQxLjUgTUh6ICovCisJey54c2NhbGUgPSAxLCAueXNjYWxlID0gNCwgLmVxID0gMX0sIC8qIDgzIE1IeiAqLworCXsueHNjYWxlID0gMSwgLnlzY2FsZSA9IDIsIC5lcSA9IDF9LCAvKiAxNjYgTUh6ICovCit9OworCisvKiB1YXJ0IHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0X3N5bnRoX2NsayA9IHsKKwkuZW5fcmVnID0gVUFSVF9DTEtfU1lOVCwKKwkuZW5fcmVnX2JpdCA9IEFVWF9TWU5UX0VOQiwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmF1eF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmYXV4X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7YXV4X3J0YmwsIEFSUkFZX1NJWkUoYXV4X3J0YmwpLCAyfSwKKwkucHJpdmF0ZV9kYXRhID0gJnVhcnRfc3ludGhfY29uZmlnLAorfTsKKwogLyogdWFydCBwYXJlbnRzICovCiBzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyB1YXJ0X3BjbGtfaW5mb1tdID0gewogCXsKLQkJLnBjbGsgPSAmcGxsMV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDFfTUFTSywKLQkJLnNjYWxhYmxlID0gMSwKKwkJLnBjbGsgPSAmdWFydF9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCiAJfSwgewogCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDNfTUFTSywKLQkJLnNjYWxhYmxlID0gMCwKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwzX1ZBTCwKIAl9LAogfTsKIApAQCAtMTEyLDE5ICsxODksMTMgQEAKIAkucGNsa19zZWxfbWFzayA9IFVBUlRfQ0xLX01BU0ssCiB9OwogCi0vKiB1YXJ0IGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIHVhcnRfY29uZmlnID0gewotCS5zeW50aF9yZWcgPSBVQVJUX0NMS19TWU5ULAotfTsKLQogLyogdWFydDAgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQwX2NsayA9IHsKIAkuZW5fcmVnID0gUEVSSVAxX0NMS19FTkIsCiAJLmVuX3JlZ19iaXQgPSBVQVJUMF9DTEtfRU5CLAogCS5wY2xrX3NlbCA9ICZ1YXJ0X3BjbGtfc2VsLAogCS5wY2xrX3NlbF9zaGlmdCA9IFVBUlRfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZ1YXJ0X2NvbmZpZywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCiAvKiB1YXJ0MSBjbG9jayAqLwpAQCAtMTMzLDI1ICsyMDQsMzUgQEAKIAkuZW5fcmVnX2JpdCA9IFVBUlQxX0NMS19FTkIsCiAJLnBjbGtfc2VsID0gJnVhcnRfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gVUFSVF9DTEtfU0hJRlQsCi0JLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKLQkucHJpdmF0ZV9kYXRhID0gJnVhcnRfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKIC8qIGZpcmRhIGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGZpcmRhX2NvbmZpZyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgZmlyZGFfc3ludGhfY29uZmlnID0gewogCS5zeW50aF9yZWcgPSBGSVJEQV9DTEtfU1lOVCwKKwkubWFza3MgPSAmYXV4X21hc2tzLAorfTsKKworLyogZmlyZGEgc3ludGggY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGZpcmRhX3N5bnRoX2NsayA9IHsKKwkuZW5fcmVnID0gRklSREFfQ0xLX1NZTlQsCisJLmVuX3JlZ19iaXQgPSBBVVhfU1lOVF9FTkIsCisJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZhdXhfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmF1eF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2F1eF9ydGJsLCBBUlJBWV9TSVpFKGF1eF9ydGJsKSwgMn0sCisJLnByaXZhdGVfZGF0YSA9ICZmaXJkYV9zeW50aF9jb25maWcsCiB9OwogCiAvKiBmaXJkYSBwYXJlbnRzICovCiBzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBmaXJkYV9wY2xrX2luZm9bXSA9IHsKIAl7Ci0JCS5wY2xrID0gJnBsbDFfY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwxX01BU0ssCi0JCS5zY2FsYWJsZSA9IDEsCisJCS5wY2xrID0gJmZpcmRhX3N5bnRoX2NsaywKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwxX1ZBTCwKIAl9LCB7CiAJCS5wY2xrID0gJnBsbDNfNDhtX2NsaywKLQkJLnBjbGtfbWFzayA9IEFVWF9DTEtfUExMM19NQVNLLAotCQkuc2NhbGFibGUgPSAwLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDNfVkFMLAogCX0sCiB9OwogCkBAIC0xNjksMjUgKzI1MCwzNSBAQAogCS5lbl9yZWdfYml0ID0gRklSREFfQ0xLX0VOQiwKIAkucGNsa19zZWwgPSAmZmlyZGFfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gRklSREFfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZmaXJkYV9jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAogLyogY2xjZCBjb25maWd1cmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyBjbGNkX2NvbmZpZyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgY2xjZF9zeW50aF9jb25maWcgPSB7CiAJLnN5bnRoX3JlZyA9IENMQ0RfQ0xLX1NZTlQsCisJLm1hc2tzID0gJmF1eF9tYXNrcywKK307CisKKy8qIGZpcmRhIHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBjbGNkX3N5bnRoX2NsayA9IHsKKwkuZW5fcmVnID0gQ0xDRF9DTEtfU1lOVCwKKwkuZW5fcmVnX2JpdCA9IEFVWF9TWU5UX0VOQiwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmF1eF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmYXV4X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7YXV4X3J0YmwsIEFSUkFZX1NJWkUoYXV4X3J0YmwpLCAyfSwKKwkucHJpdmF0ZV9kYXRhID0gJmNsY2Rfc3ludGhfY29uZmlnLAogfTsKIAogLyogY2xjZCBwYXJlbnRzICovCiBzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBjbGNkX3BjbGtfaW5mb1tdID0gewogCXsKLQkJLnBjbGsgPSAmcGxsMV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDFfTUFTSywKLQkJLnNjYWxhYmxlID0gMSwKKwkJLnBjbGsgPSAmY2xjZF9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCiAJfSwgewogCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDNfTUFTSywKLQkJLnNjYWxhYmxlID0gMCwKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwzX1ZBTCwKIAl9LAogfTsKIApAQCAtMjA1LDgyICsyOTYsMTczIEBACiAJLmVuX3JlZ19iaXQgPSBDTENEX0NMS19FTkIsCiAJLnBjbGtfc2VsID0gJmNsY2RfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gQ0xDRF9DTEtfU0hJRlQsCi0JLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKLQkucHJpdmF0ZV9kYXRhID0gJmNsY2RfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIGdwdCBzeW50aGVzaXplciBtYXNrcyAqLworc3RhdGljIHN0cnVjdCBncHRfY2xrX21hc2tzIGdwdF9tYXNrcyA9IHsKKwkubXNjYWxlX3NlbF9tYXNrID0gR1BUX01TQ0FMRV9NQVNLLAorCS5tc2NhbGVfc2VsX3NoaWZ0ID0gR1BUX01TQ0FMRV9TSElGVCwKKwkubnNjYWxlX3NlbF9tYXNrID0gR1BUX05TQ0FMRV9NQVNLLAorCS5uc2NhbGVfc2VsX3NoaWZ0ID0gR1BUX05TQ0FMRV9TSElGVCwKK307CisKKy8qIGdwdCByYXRlIGNvbmZpZ3VyYXRpb24gdGFibGUsIGluIGFzY2VuZGluZyBvcmRlciBvZiByYXRlcyAqLworc3RydWN0IGdwdF9yYXRlX3RibCBncHRfcnRibFtdID0geworCS8qIEZvciBwbGwxID0gMzMyIE1IeiAqLworCXsubXNjYWxlID0gNCwgLm5zY2FsZSA9IDB9LCAvKiA0MS41IE1IeiAqLworCXsubXNjYWxlID0gMiwgLm5zY2FsZSA9IDB9LCAvKiA1NS4zIE1IeiAqLworCXsubXNjYWxlID0gMSwgLm5zY2FsZSA9IDB9LCAvKiA4MyBNSHogKi8KK307CisKKy8qIGdwdDAgc3ludGggY2xrIGNvbmZpZyovCitzdGF0aWMgc3RydWN0IGdwdF9jbGtfY29uZmlnIGdwdDBfc3ludGhfY29uZmlnID0geworCS5zeW50aF9yZWcgPSBQUlNDMV9DTEtfQ0ZHLAorCS5tYXNrcyA9ICZncHRfbWFza3MsCit9OworCisvKiBncHQgc3ludGggY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDBfc3ludGhfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJnBsbDFfY2xrLAorCS5jYWxjX3JhdGUgPSAmZ3B0X2NhbGNfcmF0ZSwKKwkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZncHRfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtncHRfcnRibCwgQVJSQVlfU0laRShncHRfcnRibCksIDJ9LAorCS5wcml2YXRlX2RhdGEgPSAmZ3B0MF9zeW50aF9jb25maWcsCiB9OwogCiAvKiBncHQgcGFyZW50cyAqLwotc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gZ3B0X3BjbGtfaW5mb1tdID0geworc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gZ3B0MF9wY2xrX2luZm9bXSA9IHsKIAl7Ci0JCS5wY2xrID0gJnBsbDFfY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwxX01BU0ssCi0JCS5zY2FsYWJsZSA9IDEsCisJCS5wY2xrID0gJmdwdDBfc3ludGhfY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDFfVkFMLAogCX0sIHsKIAkJLnBjbGsgPSAmcGxsM180OG1fY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwzX01BU0ssCi0JCS5zY2FsYWJsZSA9IDAsCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCiAJfSwKIH07CiAKIC8qIGdwdCBwYXJlbnQgc2VsZWN0IHN0cnVjdHVyZSAqLwotc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHRfcGNsa19zZWwgPSB7Ci0JLnBjbGtfaW5mbyA9IGdwdF9wY2xrX2luZm8sCi0JLnBjbGtfY291bnQgPSBBUlJBWV9TSVpFKGdwdF9wY2xrX2luZm8pLAorc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHQwX3BjbGtfc2VsID0geworCS5wY2xrX2luZm8gPSBncHQwX3BjbGtfaW5mbywKKwkucGNsa19jb3VudCA9IEFSUkFZX1NJWkUoZ3B0MF9wY2xrX2luZm8pLAogCS5wY2xrX3NlbF9yZWcgPSBQRVJJUF9DTEtfQ0ZHLAogCS5wY2xrX3NlbF9tYXNrID0gR1BUX0NMS19NQVNLLAogfTsKIAotLyogZ3B0MF8xIGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGdwdDBfMV9jb25maWcgPSB7Ci0JLnN5bnRoX3JlZyA9IFBSU0MxX0NMS19DRkcsCi19OwotCiAvKiBncHQwIEFSTTEgc3Vic3lzdGVtIHRpbWVyIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBncHQwX2NsayA9IHsKIAkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKLQkucGNsa19zZWwgPSAmZ3B0X3BjbGtfc2VsLAorCS5wY2xrX3NlbCA9ICZncHQwX3BjbGtfc2VsLAogCS5wY2xrX3NlbF9zaGlmdCA9IEdQVDBfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmZ3B0X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZncHQwXzFfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKworLyogTm90ZTogZ3B0MCBhbmQgZ3B0MSBzaGFyZSBzYW1lIHBhcmVudCBjbG9ja3MgKi8KKy8qIGdwdCBwYXJlbnQgc2VsZWN0IHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHQxX3BjbGtfc2VsID0geworCS5wY2xrX2luZm8gPSBncHQwX3BjbGtfaW5mbywKKwkucGNsa19jb3VudCA9IEFSUkFZX1NJWkUoZ3B0MF9wY2xrX2luZm8pLAorCS5wY2xrX3NlbF9yZWcgPSBQRVJJUF9DTEtfQ0ZHLAorCS5wY2xrX3NlbF9tYXNrID0gR1BUX0NMS19NQVNLLAogfTsKIAogLyogZ3B0MSB0aW1lciBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9jbGsgPSB7CiAJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCi0JLnBjbGtfc2VsID0gJmdwdF9wY2xrX3NlbCwKKwkucGNsa19zZWwgPSAmZ3B0MV9wY2xrX3NlbCwKIAkucGNsa19zZWxfc2hpZnQgPSBHUFQxX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmZ3B0MF8xX2NvbmZpZywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCi0vKiBncHQyIGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGdwdDJfY29uZmlnID0geworLyogZ3B0MiBzeW50aCBjbGsgY29uZmlnKi8KK3N0YXRpYyBzdHJ1Y3QgZ3B0X2Nsa19jb25maWcgZ3B0Ml9zeW50aF9jb25maWcgPSB7CiAJLnN5bnRoX3JlZyA9IFBSU0MyX0NMS19DRkcsCisJLm1hc2tzID0gJmdwdF9tYXNrcywKK307CisKKy8qIGdwdCBzeW50aCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9zeW50aF9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZncHRfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmZ3B0X2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmdwdF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2dwdF9ydGJsLCBBUlJBWV9TSVpFKGdwdF9ydGJsKSwgMn0sCisJLnByaXZhdGVfZGF0YSA9ICZncHQyX3N5bnRoX2NvbmZpZywKK307CisKKy8qIGdwdCBwYXJlbnRzICovCitzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBncHQyX3BjbGtfaW5mb1tdID0geworCXsKKwkJLnBjbGsgPSAmZ3B0Ml9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCisJfSwgeworCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCisJfSwKK307CisKKy8qIGdwdCBwYXJlbnQgc2VsZWN0IHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHQyX3BjbGtfc2VsID0geworCS5wY2xrX2luZm8gPSBncHQyX3BjbGtfaW5mbywKKwkucGNsa19jb3VudCA9IEFSUkFZX1NJWkUoZ3B0Ml9wY2xrX2luZm8pLAorCS5wY2xrX3NlbF9yZWcgPSBQRVJJUF9DTEtfQ0ZHLAorCS5wY2xrX3NlbF9tYXNrID0gR1BUX0NMS19NQVNLLAogfTsKIAogLyogZ3B0MiB0aW1lciBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9jbGsgPSB7Ci0JLmVuX3JlZyA9IFBFUklQMV9DTEtfRU5CLAotCS5lbl9yZWdfYml0ID0gR1BUMl9DTEtfRU5CLAotCS5wY2xrX3NlbCA9ICZncHRfcGNsa19zZWwsCisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGtfc2VsID0gJmdwdDJfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gR1BUMl9DTEtfU0hJRlQsCi0JLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKLQkucHJpdmF0ZV9kYXRhID0gJmdwdDJfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKLS8qIGdwdDMgY29uZmlndXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgZ3B0M19jb25maWcgPSB7CisvKiBncHQzIHN5bnRoIGNsayBjb25maWcqLworc3RhdGljIHN0cnVjdCBncHRfY2xrX2NvbmZpZyBncHQzX3N5bnRoX2NvbmZpZyA9IHsKIAkuc3ludGhfcmVnID0gUFJTQzNfQ0xLX0NGRywKKwkubWFza3MgPSAmZ3B0X21hc2tzLAorfTsKKworLyogZ3B0IHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBncHQzX3N5bnRoX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmdwdF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmZ3B0X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7Z3B0X3J0YmwsIEFSUkFZX1NJWkUoZ3B0X3J0YmwpLCAyfSwKKwkucHJpdmF0ZV9kYXRhID0gJmdwdDNfc3ludGhfY29uZmlnLAorfTsKKworLyogZ3B0IHBhcmVudHMgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNsa19pbmZvIGdwdDNfcGNsa19pbmZvW10gPSB7CisJeworCQkucGNsayA9ICZncHQzX3N5bnRoX2NsaywKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwxX1ZBTCwKKwl9LCB7CisJCS5wY2xrID0gJnBsbDNfNDhtX2NsaywKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwzX1ZBTCwKKwl9LAorfTsKKworLyogZ3B0IHBhcmVudCBzZWxlY3Qgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IHBjbGtfc2VsIGdwdDNfcGNsa19zZWwgPSB7CisJLnBjbGtfaW5mbyA9IGdwdDNfcGNsa19pbmZvLAorCS5wY2xrX2NvdW50ID0gQVJSQVlfU0laRShncHQzX3BjbGtfaW5mbyksCisJLnBjbGtfc2VsX3JlZyA9IFBFUklQX0NMS19DRkcsCisJLnBjbGtfc2VsX21hc2sgPSBHUFRfQ0xLX01BU0ssCiB9OwogCiAvKiBncHQzIHRpbWVyIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBncHQzX2NsayA9IHsKLQkuZW5fcmVnID0gUEVSSVAxX0NMS19FTkIsCi0JLmVuX3JlZ19iaXQgPSBHUFQzX0NMS19FTkIsCi0JLnBjbGtfc2VsID0gJmdwdF9wY2xrX3NlbCwKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsa19zZWwgPSAmZ3B0M19wY2xrX3NlbCwKIAkucGNsa19zZWxfc2hpZnQgPSBHUFQzX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmZ3B0M19jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAogLyogY2xvY2sgZGVyaXZlZCBmcm9tIHBsbDMgY2xrICovCkBAIC0zMDksMTggKzQ5MSwyNiBAQAogfTsKIAogLyogY2xvY2sgZGVyaXZlZCBmcm9tIGFoYiBjbGsgKi8KKy8qIGFwYiBtYXNrcyBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgYnVzX2Nsa19tYXNrcyBhcGJfbWFza3MgPSB7CisJLm1hc2sgPSBIQ0xLX1BDTEtfUkFUSU9fTUFTSywKKwkuc2hpZnQgPSBIQ0xLX1BDTEtfUkFUSU9fU0hJRlQsCit9OworCiAvKiBhcGIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBzdHJ1Y3QgYnVzX2Nsa19jb25maWcgYXBiX2NvbmZpZyA9IHsKIAkucmVnID0gQ09SRV9DTEtfQ0ZHLAotCS5tYXNrID0gSENMS19QQ0xLX1JBVElPX01BU0ssCi0JLnNoaWZ0ID0gSENMS19QQ0xLX1JBVElPX1NISUZULAorCS5tYXNrcyA9ICZhcGJfbWFza3MsCiB9OwogCiAvKiBhcGIgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGFwYl9jbGsgPSB7CiAJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCiAJLnBjbGsgPSAmYWhiX2NsaywKKwkuY2FsY19yYXRlID0gJmJ1c19jYWxjX3JhdGUsCiAJLnJlY2FsYyA9ICZidXNfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmYnVzX2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7YnVzX3J0YmwsIEFSUkFZX1NJWkUoYnVzX3J0YmwpLCAyfSwKIAkucHJpdmF0ZV9kYXRhID0gJmFwYl9jb25maWcsCiB9OwogCkBAIC00MzIsMTIgKzYyMiwxMiBAQAogCiAvKiBhcnJheSBvZiBhbGwgc3BlYXIgNnh4IGNsb2NrIGxvb2t1cHMgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBzcGVhcl9jbGtfbG9va3Vwc1tdID0gewotCXsgLmNvbl9pZCA9ICJhcGJfcGNsayIsCS5jbGsgPSAmZHVtbXlfYXBiX3BjbGt9LAorCXsgLmNvbl9pZCA9ICJhcGJfcGNsayIsCQkuY2xrID0gJmR1bW15X2FwYl9wY2xrfSwKIAkvKiByb290IGNsa3MgKi8KIAl7IC5jb25faWQgPSAib3NjXzMya19jbGsiLAkuY2xrID0gJm9zY18zMmtfY2xrfSwKIAl7IC5jb25faWQgPSAib3NjXzMwbV9jbGsiLAkuY2xrID0gJm9zY18zMG1fY2xrfSwKIAkvKiBjbG9jayBkZXJpdmVkIGZyb20gMzIgS0h6IG9zCQkgY2xrICovCi0JeyAuZGV2X2lkID0gInJ0YyIsCQkuY2xrID0gJnJ0Y19jbGt9LAorCXsgLmRldl9pZCA9ICJydGMtc3BlYXIiLAkuY2xrID0gJnJ0Y19jbGt9LAogCS8qIGNsb2NrIGRlcml2ZWQgZnJvbSAzMCBNSHogb3MJCSBjbGsgKi8KIAl7IC5jb25faWQgPSAicGxsMV9jbGsiLAkJLmNsayA9ICZwbGwxX2Nsa30sCiAJeyAuY29uX2lkID0gInBsbDNfNDhtX2NsayIsCS5jbGsgPSAmcGxsM180OG1fY2xrfSwKQEAgLTQ0NSw2ICs2MzUsMTIgQEAKIAkvKiBjbG9jayBkZXJpdmVkIGZyb20gcGxsMSBjbGsgKi8KIAl7IC5jb25faWQgPSAiY3B1X2NsayIsCQkuY2xrID0gJmNwdV9jbGt9LAogCXsgLmNvbl9pZCA9ICJhaGJfY2xrIiwJCS5jbGsgPSAmYWhiX2Nsa30sCisJeyAuY29uX2lkID0gInVhcnRfc3ludGhfY2xrIiwJLmNsayA9ICZ1YXJ0X3N5bnRoX2Nsa30sCisJeyAuY29uX2lkID0gImZpcmRhX3N5bnRoX2NsayIsCS5jbGsgPSAmZmlyZGFfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiY2xjZF9zeW50aF9jbGsiLAkuY2xrID0gJmNsY2Rfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiZ3B0MF9zeW50aF9jbGsiLAkuY2xrID0gJmdwdDBfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiZ3B0Ml9zeW50aF9jbGsiLAkuY2xrID0gJmdwdDJfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiZ3B0M19zeW50aF9jbGsiLAkuY2xrID0gJmdwdDNfc3ludGhfY2xrfSwKIAl7IC5kZXZfaWQgPSAidWFydDAiLAkJLmNsayA9ICZ1YXJ0MF9jbGt9LAogCXsgLmRldl9pZCA9ICJ1YXJ0MSIsCQkuY2xrID0gJnVhcnQxX2Nsa30sCiAJeyAuZGV2X2lkID0gImZpcmRhIiwJCS5jbGsgPSAmZmlyZGFfY2xrfSwKQEAgLTQ1NCwyMiArNjUwLDIyIEBACiAJeyAuZGV2X2lkID0gImdwdDIiLAkJLmNsayA9ICZncHQyX2Nsa30sCiAJeyAuZGV2X2lkID0gImdwdDMiLAkJLmNsayA9ICZncHQzX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIHBsbDMgY2xrICovCi0JeyAuZGV2X2lkID0gInVzYmgwIiwJCS5jbGsgPSAmdXNiaDBfY2xrfSwKLQl7IC5kZXZfaWQgPSAidXNiaDEiLAkJLmNsayA9ICZ1c2JoMV9jbGt9LAotCXsgLmRldl9pZCA9ICJ1c2JkIiwJCS5jbGsgPSAmdXNiZF9jbGt9LAorCXsgLmRldl9pZCA9ICJkZXNpZ253YXJlX3VkYyIsCS5jbGsgPSAmdXNiZF9jbGt9LAorCXsgLmNvbl9pZCA9ICJ1c2JoLjBfY2xrIiwJLmNsayA9ICZ1c2JoMF9jbGt9LAorCXsgLmNvbl9pZCA9ICJ1c2JoLjFfY2xrIiwJLmNsayA9ICZ1c2JoMV9jbGt9LAogCS8qIGNsb2NrIGRlcml2ZWQgZnJvbSBhaGIgY2xrICovCiAJeyAuY29uX2lkID0gImFwYl9jbGsiLAkJLmNsayA9ICZhcGJfY2xrfSwKLQl7IC5kZXZfaWQgPSAiaTJjIiwJCS5jbGsgPSAmaTJjX2Nsa30sCisJeyAuZGV2X2lkID0gImkyY19kZXNpZ253YXJlLjAiLAkuY2xrID0gJmkyY19jbGt9LAogCXsgLmRldl9pZCA9ICJkbWEiLAkJLmNsayA9ICZkbWFfY2xrfSwKIAl7IC5kZXZfaWQgPSAianBlZyIsCQkuY2xrID0gJmpwZWdfY2xrfSwKIAl7IC5kZXZfaWQgPSAiZ21hYyIsCQkuY2xrID0gJmdtYWNfY2xrfSwKIAl7IC5kZXZfaWQgPSAic21pIiwJCS5jbGsgPSAmc21pX2Nsa30sCi0JeyAuZGV2X2lkID0gImZzbWMiLAkJLmNsayA9ICZmc21jX2Nsa30sCisJeyAuY29uX2lkID0gImZzbWMiLAkJLmNsayA9ICZmc21jX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIGFwYiBjbGsgKi8KIAl7IC5kZXZfaWQgPSAiYWRjIiwJCS5jbGsgPSAmYWRjX2Nsa30sCi0JeyAuZGV2X2lkID0gInNzcDAiLAkJLmNsayA9ICZzc3AwX2Nsa30sCi0JeyAuZGV2X2lkID0gInNzcDEiLAkJLmNsayA9ICZzc3AxX2Nsa30sCi0JeyAuZGV2X2lkID0gInNzcDIiLAkJLmNsayA9ICZzc3AyX2Nsa30sCisJeyAuZGV2X2lkID0gInNzcC1wbDAyMi4wIiwJLmNsayA9ICZzc3AwX2Nsa30sCisJeyAuZGV2X2lkID0gInNzcC1wbDAyMi4xIiwJLmNsayA9ICZzc3AxX2Nsa30sCisJeyAuZGV2X2lkID0gInNzcC1wbDAyMi4yIiwJLmNsayA9ICZzc3AyX2Nsa30sCiAJeyAuZGV2X2lkID0gImdwaW8wIiwJCS5jbGsgPSAmZ3BpbzBfY2xrfSwKIAl7IC5kZXZfaWQgPSAiZ3BpbzEiLAkJLmNsayA9ICZncGlvMV9jbGt9LAogCXsgLmRldl9pZCA9ICJncGlvMiIsCQkuY2xrID0gJmdwaW8yX2Nsa30sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCA5ZWFlY2FlLi44YTBiMGVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTExLDkgKzExLDggQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvZ2VuZXJpYy5oIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvZ2VuZXJpYy5oCmluZGV4IDE2MjA1YTUuLjk0Y2Y0YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9nZW5lcmljLmgKQEAgLTE0LDExICsxNCwxMSBAQAogI2lmbmRlZiBfX01BQ0hfR0VORVJJQ19ICiAjZGVmaW5lIF9fTUFDSF9HRU5FUklDX0gKIAotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKIC8qCiAgKiBFYWNoIEdQVCBoYXMgMiB0aW1lciBjaGFubmVscwpAQCAtMzEsOSArMzEsMTAgQEAKIC8qIEFkZCBzcGVhcjZ4eCBmYW1pbHkgZGV2aWNlIHN0cnVjdHVyZSBkZWNsYXJhdGlvbnMgaGVyZSAqLwogZXh0ZXJuIHN0cnVjdCBhbWJhX2RldmljZSBncGlvX2RldmljZVtdOwogZXh0ZXJuIHN0cnVjdCBhbWJhX2RldmljZSB1YXJ0X2RldmljZVtdOwotZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgc3BlYXJfc3lzX3RpbWVyOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgc3BlYXI2eHhfdGltZXI7CiAKIC8qIEFkZCBzcGVhcjZ4eCBmYW1pbHkgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGhlcmUgKi8KK3ZvaWQgX19pbml0IHNwZWFyX3NldHVwX3RpbWVyKHZvaWQpOwogdm9pZCBfX2luaXQgc3BlYXI2eHhfbWFwX2lvKHZvaWQpOwogdm9pZCBfX2luaXQgc3BlYXI2eHhfaW5pdF9pcnEodm9pZCk7CiB2b2lkIF9faW5pdCBzcGVhcjZ4eF9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggNzU0NTExNi4uMGIzZjk2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0xNCw4ICsxNCwxMCBAQAogI2lmbmRlZiBfX01BQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX01BQ0hfSEFSRFdBUkVfSAogCisjaW5jbHVkZSA8cGxhdC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKwogLyogVml0dWFsIHRvIHBoeXNpY2FsIHRyYW5zbGF0aW9uIG9mIHN0YXRpY2FsbHkgbWFwcGVkIHNwYWNlICovCiAjZGVmaW5lIElPX0FERFJFU1MoeCkJCSh4IHwgMHhGMDAwMDAwMCkKIAogI2VuZGlmIC8qIF9fTUFDSF9IQVJEV0FSRV9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL21pc2NfcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvbWlzY19yZWdzLmgKaW5kZXggMDM5MDgwMy4uNjhjMjBhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvbWlzY19yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvbWlzY19yZWdzLmgKQEAgLTE0LDE2ICsxNCwxNiBAQAogI2lmbmRlZiBfX01BQ0hfTUlTQ19SRUdTX0gKICNkZWZpbmUgX19NQUNIX01JU0NfUkVHU19ICiAKLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jZGVmaW5lIE1JU0NfQkFTRQkJVkFfU1BFQVI2WFhfSUNNM19NSVNDX1JFR19CQVNFCisjZGVmaW5lIE1JU0NfQkFTRQkJSU9NRU0oVkFfU1BFQVI2WFhfSUNNM19NSVNDX1JFR19CQVNFKQogCi0jZGVmaW5lIFNPQ19DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAwMCkpCi0jZGVmaW5lIERJQUdfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMDQpKQotI2RlZmluZSBQTEwxX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMDgpKQotI2RlZmluZSBQTEwxX0ZSUQkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMEMpKQotI2RlZmluZSBQTEwxX01PRAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMTApKQotI2RlZmluZSBQTEwyX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMTQpKQorI2RlZmluZSBTT0NfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MDAwKQorI2RlZmluZSBESUFHX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDAwNCkKKyNkZWZpbmUgUExMMV9DVFIJCShNSVNDX0JBU0UgKyAweDAwOCkKKyNkZWZpbmUgUExMMV9GUlEJCShNSVNDX0JBU0UgKyAweDAwQykKKyNkZWZpbmUgUExMMV9NT0QJCShNSVNDX0JBU0UgKyAweDAxMCkKKyNkZWZpbmUgUExMMl9DVFIJCShNSVNDX0JBU0UgKyAweDAxNCkKIC8qIFBMTF9DVFIgcmVnaXN0ZXIgbWFza3MgKi8KICNkZWZpbmUgUExMX0VOQUJMRQkJMgogI2RlZmluZSBQTExfTU9ERV9TSElGVAkJNApAQCAtMzMsNyArMzMsNyBAQAogI2RlZmluZSBQTExfTU9ERV9ESVRIX0RTQgkyCiAjZGVmaW5lIFBMTF9NT0RFX0RJVEhfU1NCCTMKIAotI2RlZmluZSBQTEwyX0ZSUQkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMTgpKQorI2RlZmluZSBQTEwyX0ZSUQkJKE1JU0NfQkFTRSArIDB4MDE4KQogLyogUExMIEZSUSByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBQTExfRElWX05fU0hJRlQJCTAKICNkZWZpbmUgUExMX0RJVl9OX01BU0sJCTB4RkYKQEAgLTQ0LDE2ICs0NCwxNiBAQAogI2RlZmluZSBQTExfRElUSF9GREJLX01fU0hJRlQJMTYKICNkZWZpbmUgUExMX0RJVEhfRkRCS19NX01BU0sJMHhGRkZGCiAKLSNkZWZpbmUgUExMMl9NT0QJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDFDKSkKLSNkZWZpbmUgUExMX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDIwKSkKLSNkZWZpbmUgQ09SRV9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAyNCkpCisjZGVmaW5lIFBMTDJfTU9ECQkoTUlTQ19CQVNFICsgMHgwMUMpCisjZGVmaW5lIFBMTF9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwMjApCisjZGVmaW5lIENPUkVfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDI0KQogLyogQ09SRSBDTEsgQ0ZHIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIFBMTF9IQ0xLX1JBVElPX1NISUZUCTEwCiAjZGVmaW5lIFBMTF9IQ0xLX1JBVElPX01BU0sJMHgzCiAjZGVmaW5lIEhDTEtfUENMS19SQVRJT19TSElGVAk4CiAjZGVmaW5lIEhDTEtfUENMS19SQVRJT19NQVNLCTB4MwogCi0jZGVmaW5lIFBFUklQX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDI4KSkKKyNkZWZpbmUgUEVSSVBfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDI4KQogLyogUEVSSVBfQ0xLX0NGRyByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBDTENEX0NMS19TSElGVAkJMgogI2RlZmluZSBDTENEX0NMS19NQVNLCQkweDMKQEAgLTY2LDEwICs2NiwxMCBAQAogI2RlZmluZSBHUFQyX0NMS19TSElGVAkJMTEKICNkZWZpbmUgR1BUM19DTEtfU0hJRlQJCTEyCiAjZGVmaW5lIEdQVF9DTEtfTUFTSwkJMHgxCi0jZGVmaW5lIEFVWF9DTEtfUExMM19NQVNLCTAKLSNkZWZpbmUgQVVYX0NMS19QTEwxX01BU0sJMQorI2RlZmluZSBBVVhfQ0xLX1BMTDNfVkFMCTAKKyNkZWZpbmUgQVVYX0NMS19QTEwxX1ZBTAkxCiAKLSNkZWZpbmUgUEVSSVAxX0NMS19FTkIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDJDKSkKKyNkZWZpbmUgUEVSSVAxX0NMS19FTkIJCShNSVNDX0JBU0UgKyAweDAyQykKIC8qIFBFUklQMV9DTEtfRU5CIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIFVBUlQwX0NMS19FTkIJCTMKICNkZWZpbmUgVUFSVDFfQ0xLX0VOQgkJNApAQCAtOTUsMzQgKzk1LDM1IEBACiAjZGVmaW5lIFVTQkgwX0NMS19FTkIJCTI1CiAjZGVmaW5lIFVTQkgxX0NMS19FTkIJCTI2CiAKLSNkZWZpbmUgU09DX0NPUkVfSUQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDMwKSkKLSNkZWZpbmUgUkFTX0NMS19FTkIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDM0KSkKLSNkZWZpbmUgUEVSSVAxX1NPRl9SU1QJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDM4KSkKKyNkZWZpbmUgU09DX0NPUkVfSUQJCShNSVNDX0JBU0UgKyAweDAzMCkKKyNkZWZpbmUgUkFTX0NMS19FTkIJCShNSVNDX0JBU0UgKyAweDAzNCkKKyNkZWZpbmUgUEVSSVAxX1NPRl9SU1QJCShNSVNDX0JBU0UgKyAweDAzOCkKIC8qIFBFUklQMV9TT0ZfUlNUIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIEpQRUdfU09GX1JTVAkJOAogCi0jZGVmaW5lIFNPQ19VU0VSX0lECQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAzQykpCi0jZGVmaW5lIFJBU19TT0ZfUlNUCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA0MCkpCi0jZGVmaW5lIFBSU0MxX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDQ0KSkKLSNkZWZpbmUgUFJTQzJfQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNDgpKQotI2RlZmluZSBQUlNDM19DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA0QykpCisjZGVmaW5lIFNPQ19VU0VSX0lECQkoTUlTQ19CQVNFICsgMHgwM0MpCisjZGVmaW5lIFJBU19TT0ZfUlNUCQkoTUlTQ19CQVNFICsgMHgwNDApCisjZGVmaW5lIFBSU0MxX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDA0NCkKKyNkZWZpbmUgUFJTQzJfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDQ4KQorI2RlZmluZSBQUlNDM19DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwNEMpCiAvKiBncHQgc3ludGhlc2l6ZXIgcmVnaXN0ZXIgbWFza3MgKi8KICNkZWZpbmUgR1BUX01TQ0FMRV9TSElGVAkwCiAjZGVmaW5lIEdQVF9NU0NBTEVfTUFTSwkJMHhGRkYKICNkZWZpbmUgR1BUX05TQ0FMRV9TSElGVAkxMgogI2RlZmluZSBHUFRfTlNDQUxFX01BU0sJCTB4RgogCi0jZGVmaW5lIEFNRU1fQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNTApKQotI2RlZmluZSBFWFBJX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDU0KSkKLSNkZWZpbmUgQ0xDRF9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNUMpKQotI2RlZmluZSBGSVJEQV9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNjApKQotI2RlZmluZSBVQVJUX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA2NCkpCi0jZGVmaW5lIEdNQUNfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDY4KSkKLSNkZWZpbmUgUkFTMV9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNkMpKQotI2RlZmluZSBSQVMyX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA3MCkpCi0jZGVmaW5lIFJBUzNfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDc0KSkKLSNkZWZpbmUgUkFTNF9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNzgpKQorI2RlZmluZSBBTUVNX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDA1MCkKKyNkZWZpbmUgRVhQSV9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwNTQpCisjZGVmaW5lIENMQ0RfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA1QykKKyNkZWZpbmUgRklSREFfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA2MCkKKyNkZWZpbmUgVUFSVF9DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDY0KQorI2RlZmluZSBHTUFDX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNjgpCisjZGVmaW5lIFJBUzFfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA2QykKKyNkZWZpbmUgUkFTMl9DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDcwKQorI2RlZmluZSBSQVMzX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNzQpCisjZGVmaW5lIFJBUzRfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA3OCkKIC8qIGF1eCBjbGsgc3ludGhlc2lzZXIgcmVnaXN0ZXIgbWFza3MgZm9yIGlyZGEgdG8gcmFzNCAqLworI2RlZmluZSBBVVhfU1lOVF9FTkIJCTMxCiAjZGVmaW5lIEFVWF9FUV9TRUxfU0hJRlQJMzAKICNkZWZpbmUgQVVYX0VRX1NFTF9NQVNLCQkxCiAjZGVmaW5lIEFVWF9FUTFfU0VMCQkwCkBAIC0xMzIsNDIgKzEzMyw0MiBAQAogI2RlZmluZSBBVVhfWVNDQUxFX1NISUZUCTAKICNkZWZpbmUgQVVYX1lTQ0FMRV9NQVNLCQkweEZGRgogCi0jZGVmaW5lIElDTTFfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwN0MpKQotI2RlZmluZSBJQ00yX0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDgwKSkKLSNkZWZpbmUgSUNNM19BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA4NCkpCi0jZGVmaW5lIElDTTRfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwODgpKQotI2RlZmluZSBJQ001X0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDhDKSkKLSNkZWZpbmUgSUNNNl9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA5MCkpCi0jZGVmaW5lIElDTTdfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwOTQpKQotI2RlZmluZSBJQ004X0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDk4KSkKLSNkZWZpbmUgSUNNOV9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA5QykpCi0jZGVmaW5lIERNQV9DSE5fQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBBMCkpCi0jZGVmaW5lIFVTQjJfUEhZX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQTQpKQotI2RlZmluZSBHTUFDX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEE4KSkKLSNkZWZpbmUgRVhQSV9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBBQykpCi0jZGVmaW5lIFBSQzFfTE9DS19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEMwKSkKLSNkZWZpbmUgUFJDMl9MT0NLX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQzQpKQotI2RlZmluZSBQUkMzX0xPQ0tfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBDOCkpCi0jZGVmaW5lIFBSQzRfTE9DS19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MENDKSkKLSNkZWZpbmUgUFJDMV9JUlFfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBEMCkpCi0jZGVmaW5lIFBSQzJfSVJRX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRDQpKQotI2RlZmluZSBQUkMzX0lSUV9DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEQ4KSkKLSNkZWZpbmUgUFJDNF9JUlFfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBEQykpCi0jZGVmaW5lIFBXUkRPV05fQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRTApKQotI2RlZmluZSBDT01QU1NUTF8xVjhfQ0ZHCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEU0KSkKLSNkZWZpbmUgQ09NUFNTVExfMlY1X0NGRwkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBFOCkpCi0jZGVmaW5lIENPTVBDT1JfM1YzX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRUMpKQotI2RlZmluZSBTU1RMUEFEX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEYwKSkKLSNkZWZpbmUgQklTVDFfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRjQpKQotI2RlZmluZSBCSVNUMl9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBGOCkpCi0jZGVmaW5lIEJJU1QzX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEZDKSkKLSNkZWZpbmUgQklTVDRfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMDApKQotI2RlZmluZSBCSVNUNV9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDEwNCkpCi0jZGVmaW5lIEJJU1QxX1NUU19SRVMJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTA4KSkKLSNkZWZpbmUgQklTVDJfU1RTX1JFUwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMEMpKQotI2RlZmluZSBCSVNUM19TVFNfUkVTCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDExMCkpCi0jZGVmaW5lIEJJU1Q0X1NUU19SRVMJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTE0KSkKLSNkZWZpbmUgQklTVDVfU1RTX1JFUwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMTgpKQotI2RlZmluZSBTWVNFUlJfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMUMpKQorI2RlZmluZSBJQ00xX0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA3QykKKyNkZWZpbmUgSUNNMl9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwODApCisjZGVmaW5lIElDTTNfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDg0KQorI2RlZmluZSBJQ000X0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA4OCkKKyNkZWZpbmUgSUNNNV9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwOEMpCisjZGVmaW5lIElDTTZfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDkwKQorI2RlZmluZSBJQ003X0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA5NCkKKyNkZWZpbmUgSUNNOF9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwOTgpCisjZGVmaW5lIElDTTlfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDlDKQorI2RlZmluZSBETUFfQ0hOX0NGRwkJKE1JU0NfQkFTRSArIDB4MEEwKQorI2RlZmluZSBVU0IyX1BIWV9DRkcJCShNSVNDX0JBU0UgKyAweDBBNCkKKyNkZWZpbmUgR01BQ19DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwQTgpCisjZGVmaW5lIEVYUElfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEFDKQorI2RlZmluZSBQUkMxX0xPQ0tfQ1RSCQkoTUlTQ19CQVNFICsgMHgwQzApCisjZGVmaW5lIFBSQzJfTE9DS19DVFIJCShNSVNDX0JBU0UgKyAweDBDNCkKKyNkZWZpbmUgUFJDM19MT0NLX0NUUgkJKE1JU0NfQkFTRSArIDB4MEM4KQorI2RlZmluZSBQUkM0X0xPQ0tfQ1RSCQkoTUlTQ19CQVNFICsgMHgwQ0MpCisjZGVmaW5lIFBSQzFfSVJRX0NUUgkJKE1JU0NfQkFTRSArIDB4MEQwKQorI2RlZmluZSBQUkMyX0lSUV9DVFIJCShNSVNDX0JBU0UgKyAweDBENCkKKyNkZWZpbmUgUFJDM19JUlFfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRDgpCisjZGVmaW5lIFBSQzRfSVJRX0NUUgkJKE1JU0NfQkFTRSArIDB4MERDKQorI2RlZmluZSBQV1JET1dOX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBFMCkKKyNkZWZpbmUgQ09NUFNTVExfMVY4X0NGRwkoTUlTQ19CQVNFICsgMHgwRTQpCisjZGVmaW5lIENPTVBTU1RMXzJWNV9DRkcJKE1JU0NfQkFTRSArIDB4MEU4KQorI2RlZmluZSBDT01QQ09SXzNWM19DRkcJCShNSVNDX0JBU0UgKyAweDBFQykKKyNkZWZpbmUgU1NUTFBBRF9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRjApCisjZGVmaW5lIEJJU1QxX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBGNCkKKyNkZWZpbmUgQklTVDJfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEY4KQorI2RlZmluZSBCSVNUM19DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRkMpCisjZGVmaW5lIEJJU1Q0X0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDEwMCkKKyNkZWZpbmUgQklTVDVfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MTA0KQorI2RlZmluZSBCSVNUMV9TVFNfUkVTCQkoTUlTQ19CQVNFICsgMHgxMDgpCisjZGVmaW5lIEJJU1QyX1NUU19SRVMJCShNSVNDX0JBU0UgKyAweDEwQykKKyNkZWZpbmUgQklTVDNfU1RTX1JFUwkJKE1JU0NfQkFTRSArIDB4MTEwKQorI2RlZmluZSBCSVNUNF9TVFNfUkVTCQkoTUlTQ19CQVNFICsgMHgxMTQpCisjZGVmaW5lIEJJU1Q1X1NUU19SRVMJCShNSVNDX0JBU0UgKyAweDExOCkKKyNkZWZpbmUgU1lTRVJSX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDExQykKIAogI2VuZGlmIC8qIF9fTUFDSF9NSVNDX1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvc3BlYXIuaCBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL3NwZWFyLmgKaW5kZXggYTgzNWY1Yi4uN2ZkNjIxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvc3BlYXIuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9zcGVhci5oCkBAIC0xNCwxNTMgKzE0LDcwIEBACiAjaWZuZGVmIF9fTUFDSF9TUEVBUjZYWF9ICiAjZGVmaW5lIF9fTUFDSF9TUEVBUjZYWF9ICiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPG1hY2gvc3BlYXI2MDAuaD4KIAotI2RlZmluZSBTUEVBUjZYWF9NTF9TRFJBTV9CQVNFCQkweDAwMDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX01MX1NEUkFNX1NJWkUJCTB4NDAwMDAwMDAKLQorI2RlZmluZSBTUEVBUjZYWF9NTF9TRFJBTV9CQVNFCQlVTCgweDAwMDAwMDAwKQogLyogSUNNMSAtIExvdyBzcGVlZCBjb25uZWN0aW9uICovCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfQkFTRQkJMHhEMDAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NJWkUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMV9CQVNFCQlVTCgweEQwMDAwMDAwKQogCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfVUFSVDBfQkFTRQkweEQwMDAwMDAwCisjZGVmaW5lIFNQRUFSNlhYX0lDTTFfVUFSVDBfQkFTRQlVTCgweEQwMDAwMDAwKQogI2RlZmluZSBWQV9TUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UJSU9fQUREUkVTUyhTUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UpCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfVUFSVDBfU0laRQkweDAwMDgwMDAwCiAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9VQVJUMV9CQVNFCTB4RDAwODAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9VQVJUMV9TSVpFCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NTUDBfQkFTRQkJMHhEMDEwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NTUDBfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfU1NQMV9CQVNFCQkweEQwMTgwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfU1NQMV9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9JMkNfQkFTRQkJMHhEMDIwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX0kyQ19TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9KUEVHX0JBU0UJCTB4RDA4MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9KUEVHX1NJWkUJCTB4MDA4MDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00xX0lSREFfQkFTRQkJMHhEMTAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX0lSREFfU0laRQkJMHgwMDgwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfRlNNQ19CQVNFCQkweEQxODAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfRlNNQ19TSVpFCQkweDAwODAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9OQU5EX0JBU0UJCTB4RDIwMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9OQU5EX1NJWkUJCTB4MDA4MDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NSQU1fQkFTRQkJMHhEMjgwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NSQU1fU0laRQkJMHgwMDgwMDAwMAorI2RlZmluZSBTUEVBUjZYWF9JQ00xX1VBUlQxX0JBU0UJVUwoMHhEMDA4MDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMV9TU1AwX0JBU0UJCVVMKDB4RDAxMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTFfU1NQMV9CQVNFCQlVTCgweEQwMTgwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00xX0kyQ19CQVNFCQlVTCgweEQwMjAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00xX0pQRUdfQkFTRQkJVUwoMHhEMDgwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMV9JUkRBX0JBU0UJCVVMKDB4RDEwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTFfRlNNQ19CQVNFCQlVTCgweEQxODAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00xX05BTkRfQkFTRQkJVUwoMHhEMjAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMV9TUkFNX0JBU0UJCVVMKDB4RDI4MDAwMDApCiAKIC8qIElDTTIgLSBBcHBsaWNhdGlvbiBTdWJzeXN0ZW0gKi8KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMl9CQVNFCQkweEQ4MDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfU0laRQkJMHgwODAwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfVE1SMF9CQVNFCQkweEQ4MDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfVE1SMF9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMl9UTVIxX0JBU0UJCTB4RDgwODAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMl9UTVIxX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00yX0dQSU9fQkFTRQkJMHhEODEwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00yX0dQSU9fU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfU1BJMl9CQVNFCQkweEQ4MTgwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfU1BJMl9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMl9BRENfQkFTRQkJMHhEODIwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00yX0FEQ19TSVpFCQkweDAwMDgwMDAwCisjZGVmaW5lIFNQRUFSNlhYX0lDTTJfQkFTRQkJVUwoMHhEODAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMl9UTVIwX0JBU0UJCVVMKDB4RDgwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTJfVE1SMV9CQVNFCQlVTCgweEQ4MDgwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00yX0dQSU9fQkFTRQkJVUwoMHhEODEwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMl9TU1AyX0JBU0UJCVVMKDB4RDgxODAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTJfQURDX0JBU0UJCVVMKDB4RDgyMDAwMDApCiAKIC8qIE1MLTEsIDIgLSBNdWx0aSBMYXllciBDUFUgU3Vic3lzdGVtICovCi0jZGVmaW5lIFNQRUFSNlhYX01MX0NQVV9CQVNFCQkweEYwMDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX01MX0NQVV9TSVpFCQkweDA4MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfQ1BVX1RNUl9CQVNFCQkweEYwMDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0NQVV9UTVJfU0laRQkJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0NQVV9HUElPX0JBU0UJCTB4RjAxMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfQ1BVX0dQSU9fU0laRQkJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0NQVV9WSUNfU0VDX0JBU0UJMHhGMTAwMDAwMAorI2RlZmluZSBTUEVBUjZYWF9NTF9DUFVfQkFTRQkJVUwoMHhGMDAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfQ1BVX1RNUl9CQVNFCQlVTCgweEYwMDAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9DUFVfR1BJT19CQVNFCQlVTCgweEYwMTAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9DUFVfVklDX1NFQ19CQVNFCVVMKDB4RjEwMDAwMDApCiAjZGVmaW5lIFZBX1NQRUFSNlhYX0NQVV9WSUNfU0VDX0JBU0UJSU9fQUREUkVTUyhTUEVBUjZYWF9DUFVfVklDX1NFQ19CQVNFKQotI2RlZmluZSBTUEVBUjZYWF9DUFVfVklDX1NFQ19TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9DUFVfVklDX1BSSV9CQVNFCTB4RjExMDAwMDAKKyNkZWZpbmUgU1BFQVI2WFhfQ1BVX1ZJQ19QUklfQkFTRQlVTCgweEYxMTAwMDAwKQogI2RlZmluZSBWQV9TUEVBUjZYWF9DUFVfVklDX1BSSV9CQVNFCUlPX0FERFJFU1MoU1BFQVI2WFhfQ1BVX1ZJQ19QUklfQkFTRSkKLSNkZWZpbmUgU1BFQVI2WFhfQ1BVX1ZJQ19QUklfU0laRQkweDAwMTAwMDAwCiAKIC8qIElDTTMgLSBCYXNpYyBTdWJzeXN0ZW0gKi8KLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19CQVNFCQkweEY4MDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU0laRQkJMHgwODAwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU01FTV9CQVNFCQkweEY4MDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU01FTV9TSVpFCQkweDA0MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19TTUlfQ1RSTF9CQVNFCTB4RkMwMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19TTUlfQ1RSTF9TSVpFCTB4MDAyMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX0NMQ0RfQkFTRQkJMHhGQzIwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00zX0NMQ0RfU0laRQkJMHgwMDIwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfRE1BX0JBU0UJCTB4RkM0MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19ETUFfU0laRQkJMHgwMDIwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU0RSQU1fQ1RSTF9CQVNFCTB4RkM2MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19TRFJBTV9DVFJMX1NJWkUJMHgwMDIwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfVE1SX0JBU0UJCTB4RkM4MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19UTVJfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfV0RUX0JBU0UJCTB4RkM4ODAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19XRFRfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfUlRDX0JBU0UJCTB4RkM5MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19SVENfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfR1BJT19CQVNFCQkweEZDOTgwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfR1BJT19TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19TWVNfQ1RSTF9CQVNFCTB4RkNBMDAwMDAKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19CQVNFCQlVTCgweEY4MDAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX1NNRU1fQkFTRQkJVUwoMHhGODAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19TTUlfQ1RSTF9CQVNFCVVMKDB4RkMwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTNfQ0xDRF9CQVNFCQlVTCgweEZDMjAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX0RNQV9CQVNFCQlVTCgweEZDNDAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX1NEUkFNX0NUUkxfQkFTRQlVTCgweEZDNjAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX1RNUl9CQVNFCQlVTCgweEZDODAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX1dEVF9CQVNFCQlVTCgweEZDODgwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX1JUQ19CQVNFCQlVTCgweEZDOTAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX0dQSU9fQkFTRQkJVUwoMHhGQzk4MDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19TWVNfQ1RSTF9CQVNFCVVMKDB4RkNBMDAwMDApCiAjZGVmaW5lIFZBX1NQRUFSNlhYX0lDTTNfU1lTX0NUUkxfQkFTRQlJT19BRERSRVNTKFNQRUFSNlhYX0lDTTNfU1lTX0NUUkxfQkFTRSkKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19TWVNfQ1RSTF9TSVpFCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX01JU0NfUkVHX0JBU0UJMHhGQ0E4MDAwMAorI2RlZmluZSBTUEVBUjZYWF9JQ00zX01JU0NfUkVHX0JBU0UJVUwoMHhGQ0E4MDAwMCkKICNkZWZpbmUgVkFfU1BFQVI2WFhfSUNNM19NSVNDX1JFR19CQVNFCUlPX0FERFJFU1MoU1BFQVI2WFhfSUNNM19NSVNDX1JFR19CQVNFKQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX01JU0NfUkVHX1NJWkUJMHgwMDA4MDAwMAogCiAvKiBJQ000IC0gSGlnaCBTcGVlZCBDb25uZWN0aW9uICovCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfQkFTRQkJMHhFMDAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1NJWkUJCTB4MDgwMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ000X0dNQUNfQkFTRQkJMHhFMDgwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X0dNQUNfU0laRQkJMHgwMDgwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCRF9GSUZPX0JBU0UJMHhFMTAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQkRfRklGT19TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQkRfQ1NSX0JBU0UJMHhFMTEwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQkRfQ1NSX1NJWkUJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCRF9QTERUX0JBU0UJMHhFMTIwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQkRfUExEVF9TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9FSENJMF9CQVNFCTB4RTE4MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfRUhDSTBfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfT0hDSTBfQkFTRQkweEUxOTAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCX09IQ0kwX1NJWkUJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCX0VIQ0kxX0JBU0UJMHhFMjAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9FSENJMV9TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9PSENJMV9CQVNFCTB4RTIxMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfT0hDSTFfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfQVJCX0JBU0UJMHhFMjgwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9BUkJfU0laRQkweDAwMDEwMDAwCisjZGVmaW5lIFNQRUFSNlhYX0lDTTRfQkFTRQkJVUwoMHhFMDAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNNF9HTUFDX0JBU0UJCVVMKDB4RTA4MDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCRF9GSUZPX0JBU0UJVUwoMHhFMTAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JEX0NTUl9CQVNFCVVMKDB4RTExMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCRF9QTERUX0JBU0UJVUwoMHhFMTIwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfRUhDSTBfQkFTRQlVTCgweEUxODAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9PSENJMF9CQVNFCVVMKDB4RTE5MDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCX0VIQ0kxX0JBU0UJVUwoMHhFMjAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfT0hDSTFfQkFTRQlVTCgweEUyMTAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9BUkJfQkFTRQlVTCgweEUyODAwMDAwKQogCiAvKiBEZWJ1ZyB1YXJ0IGZvciBsaW51eCwgd2lsbCBiZSB1c2VkIGZvciBkZWJ1ZyBhbmQgdW5jb21wcmVzcyBtZXNzYWdlcyAqLwogI2RlZmluZSBTUEVBUl9EQkdfVUFSVF9CQVNFCQlTUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2MDAuYyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2MDAuYwppbmRleCA1YzQ4NGM0Li5kMGU2ZWVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNjAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjYwMC5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIC8qIEFkZCBzcGVhcjYwMCBzcGVjaWZpYyBkZXZpY2VzIGhlcmUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjYwMF9ldmIuYyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2MDBfZXZiLmMKaW5kZXggZGFmZjhkMC4uZjE5Y2VmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjYwMF9ldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNjAwX2V2Yi5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9nZW5lcmljLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmZ3Bpb19kZXZpY2VbMF0sCkBAIC00Niw2ICs0Niw2IEBACiAJLmJvb3RfcGFyYW1zCT0JMHgwMDAwMDEwMCwKIAkubWFwX2lvCQk9CXNwZWFyNnh4X21hcF9pbywKIAkuaW5pdF9pcnEJPQlzcGVhcjZ4eF9pbml0X2lycSwKLQkudGltZXIJCT0JJnNwZWFyX3N5c190aW1lciwKKwkudGltZXIJCT0JJnNwZWFyNnh4X3RpbWVyLAogCS5pbml0X21hY2hpbmUJPQlzcGVhcjYwMF9ldmJfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNnh4LmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNnh4LmMKaW5kZXggZjJmZTE0ZS4uOTgxODEyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjZ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2eHguYwpAQCAtMTgsOSArMTgsOSBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS92aWMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAKIC8qIEFkZCBzcGVhcjZ4eCBtYWNoaW5lcyBjb21tb24gZGV2aWNlcyBoZXJlICovCiAvKiB1YXJ0IGRldmljZSByZWdpc3RyYXRpb24gKi8KQEAgLTMxLDggKzMxLDcgQEAKIAkJfSwKIAkJLnJlcyA9IHsKIAkJCS5zdGFydCA9IFNQRUFSNlhYX0lDTTFfVUFSVDBfQkFTRSwKLQkJCS5lbmQgPSBTUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UgKwotCQkJCVNQRUFSNlhYX0lDTTFfVUFSVDBfU0laRSAtIDEsCisJCQkuZW5kID0gU1BFQVI2WFhfSUNNMV9VQVJUMF9CQVNFICsgU1pfNEsgLSAxLAogCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJCX0sCiAJCS5pcnEgPSB7SVJRX1VBUlRfMCwgTk9fSVJRfSwKQEAgLTQyLDggKzQxLDcgQEAKIAkJfSwKIAkJLnJlcyA9IHsKIAkJCS5zdGFydCA9IFNQRUFSNlhYX0lDTTFfVUFSVDFfQkFTRSwKLQkJCS5lbmQgPSBTUEVBUjZYWF9JQ00xX1VBUlQxX0JBU0UgKwotCQkJCVNQRUFSNlhYX0lDTTFfVUFSVDFfU0laRSAtIDEsCisJCQkuZW5kID0gU1BFQVI2WFhfSUNNMV9VQVJUMV9CQVNFICsgU1pfNEsgLSAxLAogCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJCX0sCiAJCS5pcnEgPSB7SVJRX1VBUlRfMSwgTk9fSVJRfSwKQEAgLTcyLDggKzcwLDcgQEAKIAkJfSwKIAkJLnJlcyA9IHsKIAkJCS5zdGFydCA9IFNQRUFSNlhYX0NQVV9HUElPX0JBU0UsCi0JCQkuZW5kID0gU1BFQVI2WFhfQ1BVX0dQSU9fQkFTRSArCi0JCQkJU1BFQVI2WFhfQ1BVX0dQSU9fU0laRSAtIDEsCisJCQkuZW5kID0gU1BFQVI2WFhfQ1BVX0dQSU9fQkFTRSArIFNaXzRLIC0gMSwKIAkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCQl9LAogCQkuaXJxID0ge0lSUV9MT0NBTF9HUElPLCBOT19JUlF9LApAQCAtODQsOCArODEsNyBAQAogCQl9LAogCQkucmVzID0gewogCQkJLnN0YXJ0ID0gU1BFQVI2WFhfSUNNM19HUElPX0JBU0UsCi0JCQkuZW5kID0gU1BFQVI2WFhfSUNNM19HUElPX0JBU0UgKwotCQkJCVNQRUFSNlhYX0lDTTNfR1BJT19TSVpFIC0gMSwKKwkJCS5lbmQgPSBTUEVBUjZYWF9JQ00zX0dQSU9fQkFTRSArIFNaXzRLIC0gMSwKIAkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCQl9LAogCQkuaXJxID0ge0lSUV9CQVNJQ19HUElPLCBOT19JUlF9LApAQCAtOTYsOCArOTIsNyBAQAogCQl9LAogCQkucmVzID0gewogCQkJLnN0YXJ0ID0gU1BFQVI2WFhfSUNNMl9HUElPX0JBU0UsCi0JCQkuZW5kID0gU1BFQVI2WFhfSUNNMl9HUElPX0JBU0UgKwotCQkJCVNQRUFSNlhYX0lDTTJfR1BJT19TSVpFIC0gMSwKKwkJCS5lbmQgPSBTUEVBUjZYWF9JQ00yX0dQSU9fQkFTRSArIFNaXzRLIC0gMSwKIAkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCQl9LAogCQkuaXJxID0ge0lSUV9BUFBMX0dQSU8sIE5PX0lSUX0sCkBAIC0xMjIsMjcgKzExNywyNyBAQAogCXsKIAkJLnZpcnR1YWwJPSBWQV9TUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNQRUFSNlhYX0lDTTFfVUFSVDBfU0laRSwKKwkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewogCQkudmlydHVhbAk9IFZBX1NQRUFSNlhYX0NQVV9WSUNfUFJJX0JBU0UsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEVBUjZYWF9DUFVfVklDX1BSSV9CQVNFKSwKLQkJLmxlbmd0aAkJPSBTUEVBUjZYWF9DUFVfVklDX1BSSV9TSVpFLAorCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LCB7CiAJCS52aXJ0dWFsCT0gVkFfU1BFQVI2WFhfQ1BVX1ZJQ19TRUNfQkFTRSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFNQRUFSNlhYX0NQVV9WSUNfU0VDX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNQRUFSNlhYX0NQVV9WSUNfU0VDX1NJWkUsCisJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sIHsKIAkJLnZpcnR1YWwJPSBWQV9TUEVBUjZYWF9JQ00zX1NZU19DVFJMX0JBU0UsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEVBUjZYWF9JQ00zX1NZU19DVFJMX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNQRUFSNlhYX0lDTTNfTUlTQ19SRUdfQkFTRSwKKwkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewogCQkudmlydHVhbAk9IFZBX1NQRUFSNlhYX0lDTTNfTUlTQ19SRUdfQkFTRSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFNQRUFSNlhYX0lDTTNfTUlTQ19SRUdfQkFTRSksCi0JCS5sZW5ndGgJCT0gU1BFQVI2WFhfSUNNM19NSVNDX1JFR19TSVpFLAorCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LAogfTsKQEAgLTE1NSwzICsxNTAsMzQgQEAKIAkvKiBUaGlzIHdpbGwgaW5pdGlhbGl6ZSBjbG9jayBmcmFtZXdvcmsgKi8KIAljbGtfaW5pdCgpOwogfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc3BlYXI2eHhfdGltZXJfaW5pdCh2b2lkKQoreworCWNoYXIgcGNsa19uYW1lW10gPSAicGxsM180OG1fY2xrIjsKKwlzdHJ1Y3QgY2xrICpncHRfY2xrLCAqcGNsazsKKworCS8qIGdldCB0aGUgc3lzdGVtIHRpbWVyIGNsb2NrICovCisJZ3B0X2NsayA9IGNsa19nZXRfc3lzKCJncHQwIiwgTlVMTCk7CisJaWYgKElTX0VSUihncHRfY2xrKSkgeworCQlwcl9lcnIoIiVzOmNvdWxkbid0IGdldCBjbGsgZm9yIGdwdFxuIiwgX19mdW5jX18pOworCQlCVUcoKTsKKwl9CisKKwkvKiBnZXQgdGhlIHN1aXRhYmxlIHBhcmVudCBjbG9jayBmb3IgdGltZXIqLworCXBjbGsgPSBjbGtfZ2V0KE5VTEwsIHBjbGtfbmFtZSk7CisJaWYgKElTX0VSUihwY2xrKSkgeworCQlwcl9lcnIoIiVzOmNvdWxkbid0IGdldCAlcyBhcyBwYXJlbnQgZm9yIGdwdFxuIiwKKwkJCQlfX2Z1bmNfXywgcGNsa19uYW1lKTsKKwkJQlVHKCk7CisJfQorCisJY2xrX3NldF9wYXJlbnQoZ3B0X2NsaywgcGNsayk7CisJY2xrX3B1dChncHRfY2xrKTsKKwljbGtfcHV0KHBjbGspOworCisJc3BlYXJfc2V0dXBfdGltZXIoKTsKK30KKworc3RydWN0IHN5c190aW1lciBzcGVhcjZ4eF90aW1lciA9IHsKKwkuaW5pdCA9IHNwZWFyNnh4X3RpbWVyX2luaXQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2dwaW8uYwppbmRleCBiZDA2NjIwLi5hZDgwNDg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2dwaW8uYwpAQCAtMjA3LDkgKzIwNyw5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bHZsX2xvY2tbcG9ydF0sIGZsYWdzKTsKIAogCWlmICh0eXBlICYgKElSUV9UWVBFX0xFVkVMX0xPVyB8IElSUV9UWVBFX0xFVkVMX0hJR0gpKQotCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChkLT5pcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwogCWVsc2UgaWYgKHR5cGUgJiAoSVJRX1RZUEVfRURHRV9GQUxMSU5HIHwgSVJRX1RZUEVfRURHRV9SSVNJTkcpKQotCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJCV9fc2V0X2lycV9oYW5kbGVyX3VubG9ja2VkKGQtPmlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGsuaAppbmRleCBkNzcyMzk1Li5hMjE3ZjY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGsuaAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGsuaApAQCAtMjAsNiArMjAsOCBAQAogI2lmbmRlZiBfX01BQ0hfQ0xLX0gKICNkZWZpbmUgX19NQUNIX0NMS19ICiAKK3N0cnVjdCBjbGs7CisKIHZvaWQgdGVncmFfcGVyaXBoX3Jlc2V0X2RlYXNzZXJ0KHN0cnVjdCBjbGsgKmMpOwogdm9pZCB0ZWdyYV9wZXJpcGhfcmVzZXRfYXNzZXJ0KHN0cnVjdCBjbGsgKmMpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCmluZGV4IDQxMmY1YzYuLjY2Y2QzZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0yMCw2ICsyMCw4IEBACiAjaWZuZGVmIF9fTUFDSF9DTEtERVZfSAogI2RlZmluZSBfX01BQ0hfQ0xLREVWX0gKIAorc3RydWN0IGNsazsKKwogc3RhdGljIGlubGluZSBpbnQgX19jbGtfZ2V0KHN0cnVjdCBjbGsgKmNsaykKIHsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2tiYy5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gva2JjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjNzc5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2tiYy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBQbGF0Zm9ybSBkZWZpbml0aW9ucyBmb3IgdGVncmEta2JjIGtleWJvYXJkIGlucHV0IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExLCBOVklESUEgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQVNNQVJNX0FSQ0hfVEVHUkFfS0JDX0gKKyNkZWZpbmUgQVNNQVJNX0FSQ0hfVEVHUkFfS0JDX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorCisjaWZkZWYgQ09ORklHX0FSQ0hfVEVHUkFfMnhfU09DCisjZGVmaW5lIEtCQ19NQVhfR1BJTwkyNAorI2RlZmluZSBLQkNfTUFYX0tQRU5UCTgKKyNlbHNlCisjZGVmaW5lIEtCQ19NQVhfR1BJTwkyMAorI2RlZmluZSBLQkNfTUFYX0tQRU5UCTcKKyNlbmRpZgorCisjZGVmaW5lIEtCQ19NQVhfUk9XCTE2CisjZGVmaW5lIEtCQ19NQVhfQ09MCTgKKyNkZWZpbmUgS0JDX01BWF9LRVkJKEtCQ19NQVhfUk9XICogS0JDX01BWF9DT0wpCisKK3N0cnVjdCB0ZWdyYV9rYmNfcGluX2NmZyB7CisJYm9vbCBpc19yb3c7CisJdW5zaWduZWQgY2hhciBudW07Cit9OworCitzdHJ1Y3QgdGVncmFfa2JjX3dha2Vfa2V5IHsKKwl1OCByb3c6NDsKKwl1OCBjb2w6NDsKK307CisKK3N0cnVjdCB0ZWdyYV9rYmNfcGxhdGZvcm1fZGF0YSB7CisJdW5zaWduZWQgaW50IGRlYm91bmNlX2NudDsKKwl1bnNpZ25lZCBpbnQgcmVwZWF0X2NudDsKKworCXVuc2lnbmVkIGludCB3YWtlX2NudDsgLyogMDp3YWtlIG9uIGFueSBrZXkgPjE6d2FrZSBvbiB3YWtlX2NmZyAqLworCWNvbnN0IHN0cnVjdCB0ZWdyYV9rYmNfd2FrZV9rZXkgKndha2VfY2ZnOworCisJc3RydWN0IHRlZ3JhX2tiY19waW5fY2ZnIHBpbl9jZmdbS0JDX01BWF9HUElPXTsKKwljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXBfZGF0YTsKKworCWJvb2wgd2FrZXVwOworCWJvb2wgdXNlX2ZuX21hcDsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2lycS5jCmluZGV4IGRlN2RmYWQuLjE3Yzc0ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pcnEuYwpAQCAtNDYsMjQgKzQ2LDI0IEBACiAjZGVmaW5lIElDVExSX0NPUF9JRVJfQ0xSCTB4MzgKICNkZWZpbmUgSUNUTFJfQ09QX0lFUF9DTEFTUwkweDNjCiAKLXN0YXRpYyB2b2lkICgqZ2ljX21hc2tfaXJxKShzdHJ1Y3QgaXJxX2RhdGEgKmQpOwotc3RhdGljIHZvaWQgKCpnaWNfdW5tYXNrX2lycSkoc3RydWN0IGlycV9kYXRhICpkKTsKK3N0YXRpYyB2b2lkICgqdGVncmFfZ2ljX21hc2tfaXJxKShzdHJ1Y3QgaXJxX2RhdGEgKmQpOworc3RhdGljIHZvaWQgKCp0ZWdyYV9naWNfdW5tYXNrX2lycSkoc3RydWN0IGlycV9kYXRhICpkKTsKIAotI2RlZmluZSBpcnFfdG9faWN0bHIoaXJxKSAoKChpcnEpLTMyKSA+PiA1KQorI2RlZmluZSBpcnFfdG9faWN0bHIoaXJxKSAoKChpcnEpIC0gMzIpID4+IDUpCiBzdGF0aWMgdm9pZCBfX2lvbWVtICp0ZWdyYV9pY3Rscl9iYXNlID0gSU9fQUREUkVTUyhURUdSQV9QUklNQVJZX0lDVExSX0JBU0UpOwotI2RlZmluZSBpY3Rscl90b192aXJ0KGljdGxyKSAodGVncmFfaWN0bHJfYmFzZSArIChpY3RscikqMHgxMDApCisjZGVmaW5lIGljdGxyX3RvX3ZpcnQoaWN0bHIpICh0ZWdyYV9pY3Rscl9iYXNlICsgKGljdGxyKSAqIDB4MTAwKQogCiBzdGF0aWMgdm9pZCB0ZWdyYV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHIgPSBpY3Rscl90b192aXJ0KGlycV90b19pY3RscihkLT5pcnEpKTsKLQlnaWNfbWFza19pcnEoZCk7Ci0Jd3JpdGVsKDE8PChkLT5pcnEmMzEpLCBhZGRyK0lDVExSX0NQVV9JRVJfQ0xSKTsKKwl0ZWdyYV9naWNfbWFza19pcnEoZCk7CisJd3JpdGVsKDEgPDwgKGQtPmlycSAmIDMxKSwgYWRkcitJQ1RMUl9DUFVfSUVSX0NMUik7CiB9CiAKIHN0YXRpYyB2b2lkIHRlZ3JhX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyID0gaWN0bHJfdG9fdmlydChpcnFfdG9faWN0bHIoZC0+aXJxKSk7Ci0JZ2ljX3VubWFza19pcnEoZCk7CisJdGVncmFfZ2ljX3VubWFza19pcnEoZCk7CiAJd3JpdGVsKDE8PChkLT5pcnEmMzEpLCBhZGRyK0lDVExSX0NQVV9JRVJfU0VUKTsKIH0KIApAQCAtOTgsOCArOTgsOCBAQAogCQkgSU9fQUREUkVTUyhURUdSQV9BUk1fUEVSSUZfQkFTRSArIDB4MTAwKSk7CiAKIAlnaWMgPSBnZXRfaXJxX2NoaXAoMjkpOwotCWdpY191bm1hc2tfaXJxID0gZ2ljLT5pcnFfdW5tYXNrOwotCWdpY19tYXNrX2lycSA9IGdpYy0+aXJxX21hc2s7CisJdGVncmFfZ2ljX3VubWFza19pcnEgPSBnaWMtPmlycV91bm1hc2s7CisJdGVncmFfZ2ljX21hc2tfaXJxID0gZ2ljLT5pcnFfbWFzazsKIAl0ZWdyYV9pcnEuaXJxX2FjayA9IGdpYy0+aXJxX2FjazsKICNpZmRlZiBDT05GSUdfU01QCiAJdGVncmFfaXJxLmlycV9zZXRfYWZmaW5pdHkgPSBnaWMtPmlycV9zZXRfYWZmaW5pdHk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXV4NTAwL0tjb25maWcKaW5kZXggMjQ3Y2FhMy4uMjAzYjk4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvS2NvbmZpZwpAQCAtNiw2ICs2LDcgQEAKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBIQVNfTVRVCiAJc2VsZWN0IE5PTUFESUtfR1BJTworCXNlbGVjdCBBUk1fRVJSQVRBXzc1Mzk3MAogCiBtZW51ICJVeDUwMCBTb0MiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9LY29uZmlnCmluZGV4IDNmN2I1ZTkuLjljZGVjNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2NvbmZpZwpAQCAtMiwxNyArMiwxOSBAQAogCWRlcGVuZHMgb24gQVJDSF9WRVJTQVRJTEUKIAogY29uZmlnIEFSQ0hfVkVSU0FUSUxFX1BCCi0JYm9vbCAiU3VwcG9ydCBWZXJzYXRpbGUvUEIgcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBWZXJzYXRpbGUgUGxhdGZvcm0gQmFzZWJvYXJkIGZvciBBUk05MjZFSi1TIgogCXNlbGVjdCBDUFVfQVJNOTI2VAogCXNlbGVjdCBNSUdIVF9IQVZFX1BDSQogCWRlZmF1bHQgeQogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBWZXJzYXRpbGUvUEIgcGxhdGZvcm0uCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgVmVyc2F0aWxlIFBsYXRmb3JtIEJhc2Vib2FyZAorCSAgZm9yIHRoZSBBUk05MjZFSi1TLgogCiBjb25maWcgTUFDSF9WRVJTQVRJTEVfQUIKLQlib29sICJTdXBwb3J0IFZlcnNhdGlsZS9BQiBwbGF0Zm9ybSIKKwlib29sICJTdXBwb3J0IFZlcnNhdGlsZSBBcHBsaWNhdGlvbiBCYXNlYm9hcmQgZm9yIEFSTTkyNkVKLVMiCiAJc2VsZWN0IENQVV9BUk05MjZUCiAJaGVscAotCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFZlcnNhdGlsZS9BUCBwbGF0Zm9ybS4KKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBWZXJzYXRpbGUgQXBwbGljYXRpb24gQmFzZWJvYXJkCisJICBmb3IgdGhlIEFSTTkyNkVKLVMuCiAKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMKaW5kZXggYjE2ODdiNi4uNjM0YmYxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMKQEAgLTM5LDcgKzM5LDcgQEAKICAqIG9ic2VydmVycywgaXJyZXNwZWN0aXZlIG9mIHdoZXRoZXIgdGhleSdyZSB0YWtpbmcgcGFydCBpbiBjb2hlcmVuY3kKICAqIG9yIG5vdC4gIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgaG90cGx1ZyBjb2RlIHRvIHdvcmsgcmVsaWFibHkuCiAgKi8KLXN0YXRpYyB2b2lkIHdyaXRlX3Blbl9yZWxlYXNlKGludCB2YWwpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgd3JpdGVfcGVuX3JlbGVhc2UoaW50IHZhbCkKIHsKIAlwZW5fcmVsZWFzZSA9IHZhbDsKIAlzbXBfd21iKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYwppbmRleCBhOWVkMzQyLi4xZWRhZTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS90aW1lci1zcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zcDgxMC5oPgogCiAjaW5jbHVkZSA8bWFjaC9tb3RoZXJib2FyZC5oPgogCkBAIC01MCw4ICs1MSwxNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgdjJtX3RpbWVyX2luaXQodm9pZCkKIHsKKwl1MzIgc2NjdHJsOworCiAJdmVyc2F0aWxlX3NjaGVkX2Nsb2NrX2luaXQoTU1JT19QMlYoVjJNX1NZU18yNE1IWiksIDI0MDAwMDAwKTsKIAorCS8qIFNlbGVjdCAxTUh6IFRJTUNMSyBhcyB0aGUgcmVmZXJlbmNlIGNsb2NrIGZvciBTUDgwNCB0aW1lcnMgKi8KKwlzY2N0cmwgPSByZWFkbChNTUlPX1AyVihWMk1fU1lTQ1RMICsgU0NDVFJMKSk7CisJc2NjdHJsIHw9IFNDQ1RSTF9USU1FUkVOMFNFTF9USU1DTEs7CisJc2NjdHJsIHw9IFNDQ1RSTF9USU1FUkVOMVNFTF9USU1DTEs7CisJd3JpdGVsKHNjY3RybCwgTU1JT19QMlYoVjJNX1NZU0NUTCArIFNDQ1RSTCkpOworCiAJd3JpdGVsKDAsIE1NSU9fUDJWKFYyTV9USU1FUjApICsgVElNRVJfQ1RSTCk7CiAJd3JpdGVsKDAsIE1NSU9fUDJWKFYyTV9USU1FUjEpICsgVElNRVJfQ1RSTCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjBhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9LY29uZmlnCkBAIC0wLDAgKzEsNzMgQEAKK2lmIEFSQ0hfVlQ4NTAwCisKK2NvbmZpZyBWVFdNX1ZFUlNJT05fVlQ4NTAwCisJYm9vbAorCitjb25maWcgVlRXTV9WRVJTSU9OX1dNODUwNQorCWJvb2wKKworY29uZmlnIE1BQ0hfQlYwNworCWJvb2wgIkJlbmlnbiBCVjA3LTg1MDAgTWluaSBOZXRib29rIgorCWRlcGVuZHMgb24gQVJDSF9WVDg1MDAKKwlzZWxlY3QgVlRXTV9WRVJTSU9OX1ZUODUwMAorCWhlbHAKKwkgIEFkZCBzdXBwb3J0IGZvciB0aGUgaW5leHBlbnNpdmUgNy1pbmNoIG5ldGJvb2tzIHNvbGQgYnkgbWFueQorCSAgQ2hpbmVzZSBkaXN0cmlidXRvcnMgdW5kZXIgdmFyaW91cyBuYW1lcy4gTm90ZSB0aGF0IHRoZXJlIGFyZQorCSAgbWFueSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMgaW4gaWRlbnRpY2FsIGV4dGVyaW9yLCBtYWtlIHN1cmUKKwkgIHRoYXQgeW91cnMgaXMgaW5kZWVkIGJhc2VkIG9uIGEgVklBIFZUODUwMCBjaGlwLgorCitjb25maWcgTUFDSF9XTTg1MDVfN0lOX05FVEJPT0sKKwlib29sICJXTTg1MDUgNy1pbmNoIGdlbmVyaWMgbmV0Ym9vayIKKwlkZXBlbmRzIG9uIEFSQ0hfVlQ4NTAwCisJc2VsZWN0IFZUV01fVkVSU0lPTl9XTTg1MDUKKwloZWxwCisJICBBZGQgc3VwcG9ydCBmb3IgdGhlIGluZXhwZW5zaXZlIDctaW5jaCBuZXRib29rcyBzb2xkIGJ5IG1hbnkKKwkgIENoaW5lc2UgZGlzdHJpYnV0b3JzIHVuZGVyIHZhcmlvdXMgbmFtZXMuIE5vdGUgdGhhdCB0aGVyZSBhcmUKKwkgIG1hbnkgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zIGluIGlkZW50aWNhbCBleHRlcmlvciwgbWFrZSBzdXJlCisJICB0aGF0IHlvdXJzIGlzIGluZGVlZCBiYXNlZCBvbiBhIFdvbmRlck1lZGlhIFdNODUwNSBjaGlwLgorCitjb21tZW50ICJMQ0QgcGFuZWwgc2l6ZSIKKworY29uZmlnIFdNVF9QQU5FTF84MDBYNDgwCisJYm9vbCAiNy1pbmNoIHdpdGggODAweDQ4MCByZXNvbHV0aW9uIgorCWRlcGVuZHMgb24gKEZCX1ZUODUwMCB8fCBGQl9XTTg1MDUpCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhlc2UgYXJlIGZvdW5kIGluIG1vc3Qgb2YgdGhlIG5ldGJvb2tzIGluIGdlbmVyaWMgY2FzZXMsIGFzCisJICB3ZWxsIGFzIGluIEVrZW4gTTAwMSB0YWJsZXRzIGFuZCBwb3NzaWJseSBlbHNld2hlcmUuCisKKwkgIFRvIHNlbGVjdCB0aGlzIHBhbmVsIGF0IHJ1bnRpbWUsIHNheSB5IGhlcmUgYW5kIGFwcGVuZAorCSAgJ3BhbmVsPTgwMHg0ODAnIHRvIHlvdXIga2VybmVsIGNvbW1hbmQgbGluZS4gT3RoZXJ3aXNlLCB0aGUKKwkgIGxhcmdlc3Qgb25lIGF2YWlsYWJsZSB3aWxsIGJlIHVzZWQuCisKK2NvbmZpZyBXTVRfUEFORUxfODAwWDYwMAorCWJvb2wgIjgtaW5jaCB3aXRoIDgwMHg2MDAgcmVzb2x1dGlvbiIKKwlkZXBlbmRzIG9uIChGQl9WVDg1MDAgfHwgRkJfV004NTA1KQorCWhlbHAKKwkgIFRoZXNlIGFyZSBmb3VuZCBpbiBFa2VuIE0wMDMgdGFibGV0cyBhbmQgcG9zc2libHkgZWxzZXdoZXJlLgorCisJICBUbyBzZWxlY3QgdGhpcyBwYW5lbCBhdCBydW50aW1lLCBzYXkgeSBoZXJlIGFuZCBhcHBlbmQKKwkgICdwYW5lbD04MDB4NjAwJyB0byB5b3VyIGtlcm5lbCBjb21tYW5kIGxpbmUuIE90aGVyd2lzZSwgdGhlCisJICBsYXJnZXN0IG9uZSBhdmFpbGFibGUgd2lsbCBiZSB1c2VkLgorCitjb25maWcgV01UX1BBTkVMXzEwMjRYNTc2CisJYm9vbCAiMTAtaW5jaCB3aXRoIDEwMjR4NTc2IHJlc29sdXRpb24iCisJZGVwZW5kcyBvbiAoRkJfVlQ4NTAwIHx8IEZCX1dNODUwNSkKKwloZWxwCisJICBUaGVzZSBhcmUgZm91bmQgaW4gQ2hlcnJ5UGFsIG5ldGJvb2tzIGFuZCBwb3NzaWJseSBlbHNld2hlcmUuCisKKwkgIFRvIHNlbGVjdCB0aGlzIHBhbmVsIGF0IHJ1bnRpbWUsIHNheSB5IGhlcmUgYW5kIGFwcGVuZAorCSAgJ3BhbmVsPTEwMjR4NTc2JyB0byB5b3VyIGtlcm5lbCBjb21tYW5kIGxpbmUuIE90aGVyd2lzZSwgdGhlCisJICBsYXJnZXN0IG9uZSBhdmFpbGFibGUgd2lsbCBiZSB1c2VkLgorCitjb25maWcgV01UX1BBTkVMXzEwMjRYNjAwCisJYm9vbCAiMTAtaW5jaCB3aXRoIDEwMjR4NjAwIHJlc29sdXRpb24iCisJZGVwZW5kcyBvbiAoRkJfVlQ4NTAwIHx8IEZCX1dNODUwNSkKKwloZWxwCisJICBUaGVzZSBhcmUgZm91bmQgaW4gRWtlbiBNMDA2IHRhYmxldHMgYW5kIHBvc3NpYmx5IGVsc2V3aGVyZS4KKworCSAgVG8gc2VsZWN0IHRoaXMgcGFuZWwgYXQgcnVudGltZSwgc2F5IHkgaGVyZSBhbmQgYXBwZW5kCisJICAncGFuZWw9MTAyNHg2MDAnIHRvIHlvdXIga2VybmVsIGNvbW1hbmQgbGluZS4gT3RoZXJ3aXNlLCB0aGUKKwkgIGxhcmdlc3Qgb25lIGF2YWlsYWJsZSB3aWxsIGJlIHVzZWQuCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYWVkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKK29iai15ICs9IGRldmljZXMubyBncGlvLm8gaXJxLm8gdGltZXIubworCitvYmotJChDT05GSUdfVlRXTV9WRVJTSU9OX1ZUODUwMCkgKz0gZGV2aWNlcy12dDg1MDAubworb2JqLSQoQ09ORklHX1ZUV01fVkVSU0lPTl9XTTg1MDUpICs9IGRldmljZXMtd204NTA1Lm8KKworb2JqLSQoQ09ORklHX01BQ0hfQlYwNykgKz0gYnYwNy5vCitvYmotJChDT05GSUdfTUFDSF9XTTg1MDVfN0lOX05FVEJPT0spICs9IHdtODUwNV83aW4ubworCitvYmotJChDT05GSUdfSEFWRV9QV00pICs9IHB3bS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGFjYzRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDMgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHgwMDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDAwMDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4MDEwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2J2MDcuYyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2J2MDcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGEyNjFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvYnYwNy5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC12dDg1MDAvYnYwNy5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworc3RhdGljIHZvaWQgX19pb21lbSAqcG1jX2hpYmVyOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnZ0ODUwMF9kZXZpY2VfdWFydDAsCisJJnZ0ODUwMF9kZXZpY2VfbGNkYywKKwkmdnQ4NTAwX2RldmljZV9laGNpLAorCSZ2dDg1MDBfZGV2aWNlX2dlX3JvcHMsCisJJnZ0ODUwMF9kZXZpY2VfcHdtLAorCSZ2dDg1MDBfZGV2aWNlX3B3bWJsLAorCSZ2dDg1MDBfZGV2aWNlX3J0YywKK307CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF9wb3dlcl9vZmYodm9pZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXdyaXRldyg1LCBwbWNfaGliZXIpOworCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzcsIGMwLCA0IiA6IDogInIiICgwKSk7Cit9CisKK3ZvaWQgX19pbml0IGJ2MDdfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19GQl9WVDg1MDAKKwl2b2lkIF9faW9tZW0gKmdwaW9fbXV4X3JlZyA9IGlvcmVtYXAod210X2dwaW9fYmFzZSArIDB4MjAwLCA0KTsKKwlpZiAoZ3Bpb19tdXhfcmVnKSB7CisJCXdyaXRlbChyZWFkbChncGlvX211eF9yZWcpIHwgMSwgZ3Bpb19tdXhfcmVnKTsKKwkJaW91bm1hcChncGlvX211eF9yZWcpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHJlbWFwIHRoZSBHUElPIG11eCByZWdpc3RlciwgZGlzcGxheSBtYXkgbm90IHdvcmsgcHJvcGVybHkhXG4iKTsKKwl9CisjZW5kaWYKKwlwbWNfaGliZXIgPSBpb3JlbWFwKHdtdF9wbWNfYmFzZSArIDB4MTIsIDIpOworCWlmIChwbWNfaGliZXIpCisJCXBtX3Bvd2VyX29mZiA9ICZ2dDg1MDBfcG93ZXJfb2ZmOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJQTUMgSGliZXJuYXRpb24gcmVnaXN0ZXIgY291bGQgbm90IGJlIHJlbWFwcGVkLCBub3QgZW5hYmxpbmcgcG93ZXIgb2ZmIVxuIik7CisKKwl2dDg1MDBfc2V0X3Jlc291cmNlcygpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCXZ0ODUwMF9ncGlvX2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChCVjA3LCAiQmVuaWduIEJWMDcgTWluaSBOZXRib29rIikKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5yZXNlcnZlCT0gdnQ4NTAwX3Jlc2VydmVfbWVtLAorCS5tYXBfaW8JCT0gdnQ4NTAwX21hcF9pbywKKwkuaW5pdF9pcnEJPSB2dDg1MDBfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZ2dDg1MDBfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGJ2MDdfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLXZ0ODUwMC5jIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy12dDg1MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTUxOWFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy12dDg1MDAuYwpAQCAtMCwwICsxLDkxIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLXZ0ODUwMC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL3Z0ODUwMF9yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC92dDg1MDBfaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvaTgwNDIuaD4KKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3ZvaWQgX19pbml0IHZ0ODUwMF9zZXRfcmVzb3VyY2VzKHZvaWQpCit7CisJc3RydWN0IHJlc291cmNlIHRtcFszXTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhWVDg1MDBfTENEQ19CQVNFLCBTWl8xSyk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX0xDREMpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX2xjZGMsIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoVlQ4NTAwX1VBUlQwX0JBU0UsIDB4MTA0MCk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX1VBUlQwKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV91YXJ0MCwgdG1wLCAyKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhWVDg1MDBfVUFSVDFfQkFTRSwgMHgxMDQwKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfVUFSVDEpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3VhcnQxLCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFZUODUwMF9VQVJUMl9CQVNFLCAweDEwNDApOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9VQVJUMik7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfdWFydDIsIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoVlQ4NTAwX1VBUlQzX0JBU0UsIDB4MTA0MCk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX1VBUlQzKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV91YXJ0MywgdG1wLCAyKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhWVDg1MDBfRUhDSV9CQVNFLCBTWl81MTIpOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9FSENJKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV9laGNpLCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFZUODUwMF9HRUdFQV9CQVNFLCBTWl8yNTYpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX2dlX3JvcHMsIHRtcCwgMSk7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoVlQ4NTAwX1BXTV9CQVNFLCAweDQ0KTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV9wd20sIHRtcCwgMSk7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoVlQ4NTAwX1JUQ19CQVNFLCAweDJjKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfUlRDKTsKKwl0bXBbMl0gPSB3bXRfaXJxX3JlcyhJUlFfUlRDU00pOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3J0YywgdG1wLCAzKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHZ0ODUwMF9zZXRfZXh0ZXJucyh2b2lkKQoreworCS8qIE5vbi1yZXNvdXJjZS1hd2FyZSBzdHVmZiAqLworCXdtdF9pY19iYXNlID0gVlQ4NTAwX0lDX0JBU0U7CisJd210X2dwaW9fYmFzZSA9IFZUODUwMF9HUElPX0JBU0U7CisJd210X3BtY19iYXNlID0gVlQ4NTAwX1BNQ19CQVNFOworCXdtdF9pODA0Ml9iYXNlID0gVlQ4NTAwX1BTMl9CQVNFOworCisJd210X25yX2lycXMgPSBWVDg1MDBfTlJfSVJRUzsKKwl3bXRfdGltZXJfaXJxID0gSVJRX1BNQ09TMDsKKwl3bXRfZ3Bpb19leHRfaXJxWzBdID0gSVJRX0VYVDA7CisJd210X2dwaW9fZXh0X2lycVsxXSA9IElSUV9FWFQxOworCXdtdF9ncGlvX2V4dF9pcnFbMl0gPSBJUlFfRVhUMjsKKwl3bXRfZ3Bpb19leHRfaXJxWzNdID0gSVJRX0VYVDM7CisJd210X2dwaW9fZXh0X2lycVs0XSA9IElSUV9FWFQ0OworCXdtdF9ncGlvX2V4dF9pcnFbNV0gPSBJUlFfRVhUNTsKKwl3bXRfZ3Bpb19leHRfaXJxWzZdID0gSVJRX0VYVDY7CisJd210X2dwaW9fZXh0X2lycVs3XSA9IElSUV9FWFQ3OworCXdtdF9pODA0Ml9rYmRfaXJxID0gSVJRX1BTMktCRDsKKwl3bXRfaTgwNDJfYXV4X2lycSA9IElSUV9QUzJNT1VTRTsKK30KKwordm9pZCBfX2luaXQgdnQ4NTAwX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdCh3bXRfaW9fZGVzYywgQVJSQVlfU0laRSh3bXRfaW9fZGVzYykpOworCisJLyogU2hvdWxkIGJlIGRvbmUgYmVmb3JlIGludGVycnVwdHMgYW5kIHRpbWVycyBhcmUgaW5pdGlhbGl6ZWQgKi8KKwl2dDg1MDBfc2V0X2V4dGVybnMoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMtd204NTA1LmMgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLXdtODUwNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNDU5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLXdtODUwNS5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMtd204NTA1LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPG1hY2gvd204NTA1X3JlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3dtODUwNV9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9pODA0Mi5oPgorI2luY2x1ZGUgImRldmljZXMuaCIKKwordm9pZCBfX2luaXQgd204NTA1X3NldF9yZXNvdXJjZXModm9pZCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgdG1wWzNdOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFdNODUwNV9HT1ZSX0JBU0UsIFNaXzUxMik7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2Vfd204NTA1X2ZiLCB0bXAsIDEpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFdNODUwNV9VQVJUMF9CQVNFLCAweDEwNDApOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9VQVJUMCk7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfdWFydDAsIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoV004NTA1X1VBUlQxX0JBU0UsIDB4MTA0MCk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX1VBUlQxKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV91YXJ0MSwgdG1wLCAyKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhXTTg1MDVfVUFSVDJfQkFTRSwgMHgxMDQwKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfVUFSVDIpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3VhcnQyLCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFdNODUwNV9VQVJUM19CQVNFLCAweDEwNDApOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9VQVJUMyk7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfdWFydDMsIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoV004NTA1X1VBUlQ0X0JBU0UsIDB4MTA0MCk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX1VBUlQ0KTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV91YXJ0NCwgdG1wLCAyKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhXTTg1MDVfVUFSVDVfQkFTRSwgMHgxMDQwKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfVUFSVDUpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3VhcnQ1LCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFdNODUwNV9FSENJX0JBU0UsIFNaXzUxMik7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX0VIQ0kpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX2VoY2ksIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoV004NTA1X0dFR0VBX0JBU0UsIFNaXzI1Nik7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfZ2Vfcm9wcywgdG1wLCAxKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhXTTg1MDVfUFdNX0JBU0UsIDB4NDQpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3B3bSwgdG1wLCAxKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhXTTg1MDVfUlRDX0JBU0UsIDB4MmMpOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9SVEMpOworCXRtcFsyXSA9IHdtdF9pcnFfcmVzKElSUV9SVENTTSk7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfcnRjLCB0bXAsIDMpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgd204NTA1X3NldF9leHRlcm5zKHZvaWQpCit7CisJLyogTm9uLXJlc291cmNlLWF3YXJlIHN0dWZmICovCisJd210X2ljX2Jhc2UgPSBXTTg1MDVfSUNfQkFTRTsKKwl3bXRfc2ljX2Jhc2UgPSBXTTg1MDVfU0lDX0JBU0U7CisJd210X2dwaW9fYmFzZSA9IFdNODUwNV9HUElPX0JBU0U7CisJd210X3BtY19iYXNlID0gV004NTA1X1BNQ19CQVNFOworCXdtdF9pODA0Ml9iYXNlID0gV004NTA1X1BTMl9CQVNFOworCisJd210X25yX2lycXMgPSBXTTg1MDVfTlJfSVJRUzsKKwl3bXRfdGltZXJfaXJxID0gSVJRX1BNQ09TMDsKKwl3bXRfZ3Bpb19leHRfaXJxWzBdID0gSVJRX0VYVDA7CisJd210X2dwaW9fZXh0X2lycVsxXSA9IElSUV9FWFQxOworCXdtdF9ncGlvX2V4dF9pcnFbMl0gPSBJUlFfRVhUMjsKKwl3bXRfZ3Bpb19leHRfaXJxWzNdID0gSVJRX0VYVDM7CisJd210X2dwaW9fZXh0X2lycVs0XSA9IElSUV9FWFQ0OworCXdtdF9ncGlvX2V4dF9pcnFbNV0gPSBJUlFfRVhUNTsKKwl3bXRfZ3Bpb19leHRfaXJxWzZdID0gSVJRX0VYVDY7CisJd210X2dwaW9fZXh0X2lycVs3XSA9IElSUV9FWFQ3OworCXdtdF9pODA0Ml9rYmRfaXJxID0gSVJRX1BTMktCRDsKKwl3bXRfaTgwNDJfYXV4X2lycSA9IElSUV9QUzJNT1VTRTsKK30KKwordm9pZCBfX2luaXQgd204NTA1X21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdCh3bXRfaW9fZGVzYywgQVJSQVlfU0laRSh3bXRfaW9fZGVzYykpOworCisJLyogU2hvdWxkIGJlIGRvbmUgYmVmb3JlIGludGVycnVwdHMgYW5kIHRpbWVycyBhcmUgaW5pdGlhbGl6ZWQgKi8KKwl3bTg1MDVfc2V0X2V4dGVybnMoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmNkYzM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy5jCkBAIC0wLDAgKzEsMjcwIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL3Z0ODUwMGZiLmg+CisjaW5jbHVkZSA8bWFjaC9pODA0Mi5oPgorI2luY2x1ZGUgImRldmljZXMuaCIKKworLyogVGhlc2UgY2FuJ3QgdXNlIHJlc291cmNlcyBjdXJyZW50bHkgKi8KK3Vuc2lnbmVkIGxvbmcgd210X2ljX2Jhc2UgX19pbml0ZGF0YTsKK3Vuc2lnbmVkIGxvbmcgd210X3NpY19iYXNlIF9faW5pdGRhdGE7Cit1bnNpZ25lZCBsb25nIHdtdF9ncGlvX2Jhc2UgX19pbml0ZGF0YTsKK3Vuc2lnbmVkIGxvbmcgd210X3BtY19iYXNlIF9faW5pdGRhdGE7Cit1bnNpZ25lZCBsb25nIHdtdF9pODA0Ml9iYXNlIF9faW5pdGRhdGE7CisKK2ludCB3bXRfbnJfaXJxcyBfX2luaXRkYXRhOworaW50IHdtdF90aW1lcl9pcnEgX19pbml0ZGF0YTsKK2ludCB3bXRfZ3Bpb19leHRfaXJxWzhdIF9faW5pdGRhdGE7CisKKy8qIFNob3VsZCByZW1haW4gYWNjZXNzaWJsZSBhZnRlciBpbml0LgorICogaTgwNDIgZHJpdmVyIGRlc3BlcmF0ZWx5IGNhbGxzIGZvciBhdHRlbnRpb24uLi4KKyAqLworaW50IHdtdF9pODA0Ml9rYmRfaXJxOworaW50IHdtdF9pODA0Ml9hdXhfaXJxOworCitzdGF0aWMgdTY0IGZiX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX2xjZGMgPSB7CisJLm5hbWUgICAgICAgICAgID0gInZ0ODUwMC1sY2QiLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzawk9ICZmYl9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3dtODUwNV9mYiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAid204NTA1LWZiIiwKKwkuaWQgICAgICAgICAgICAgPSAwLAorfTsKKworLyogU21hbGxlc3QgdG8gbGFyZ2VzdCAqLworc3RhdGljIHN0cnVjdCB2dDg1MDBmYl9wbGF0Zm9ybV9kYXRhIHBhbmVsc1tdID0geworI2lmZGVmIENPTkZJR19XTVRfUEFORUxfODAwWDQ4MAoreworCS54cmVzX3ZpcnR1YWwJPSA4MDAsCisJLnlyZXNfdmlydHVhbAk9IDQ4MCAqIDIsCisJLm1vZGUJCT0geworCQkubmFtZQkJPSAiODAweDQ4MCIsCisJCS54cmVzCQk9IDgwMCwKKwkJLnlyZXMJCT0gNDgwLAorCQkubGVmdF9tYXJnaW4JPSA4OCwKKwkJLnJpZ2h0X21hcmdpbgk9IDQwLAorCQkudXBwZXJfbWFyZ2luCT0gMzIsCisJCS5sb3dlcl9tYXJnaW4JPSAxMSwKKwkJLmhzeW5jX2xlbgk9IDAsCisJCS52c3luY19sZW4JPSAxLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19XTVRfUEFORUxfODAwWDYwMAoreworCS54cmVzX3ZpcnR1YWwJPSA4MDAsCisJLnlyZXNfdmlydHVhbAk9IDYwMCAqIDIsCisJLm1vZGUJCT0geworCQkubmFtZQkJPSAiODAweDYwMCIsCisJCS54cmVzCQk9IDgwMCwKKwkJLnlyZXMJCT0gNjAwLAorCQkubGVmdF9tYXJnaW4JPSA4OCwKKwkJLnJpZ2h0X21hcmdpbgk9IDQwLAorCQkudXBwZXJfbWFyZ2luCT0gMzIsCisJCS5sb3dlcl9tYXJnaW4JPSAxMSwKKwkJLmhzeW5jX2xlbgk9IDAsCisJCS52c3luY19sZW4JPSAxLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19XTVRfUEFORUxfMTAyNFg1NzYKK3sKKwkueHJlc192aXJ0dWFsCT0gMTAyNCwKKwkueXJlc192aXJ0dWFsCT0gNTc2ICogMiwKKwkubW9kZQkJPSB7CisJCS5uYW1lCQk9ICIxMDI0eDU3NiIsCisJCS54cmVzCQk9IDEwMjQsCisJCS55cmVzCQk9IDU3NiwKKwkJLmxlZnRfbWFyZ2luCT0gNDAsCisJCS5yaWdodF9tYXJnaW4JPSAyNCwKKwkJLnVwcGVyX21hcmdpbgk9IDMyLAorCQkubG93ZXJfbWFyZ2luCT0gMTEsCisJCS5oc3luY19sZW4JPSA5NiwKKwkJLnZzeW5jX2xlbgk9IDIsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCit9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1dNVF9QQU5FTF8xMDI0WDYwMAoreworCS54cmVzX3ZpcnR1YWwJPSAxMDI0LAorCS55cmVzX3ZpcnR1YWwJPSA2MDAgKiAyLAorCS5tb2RlCQk9IHsKKwkJLm5hbWUJCT0gIjEwMjR4NjAwIiwKKwkJLnhyZXMJCT0gMTAyNCwKKwkJLnlyZXMJCT0gNjAwLAorCQkubGVmdF9tYXJnaW4JPSA2NiwKKwkJLnJpZ2h0X21hcmdpbgk9IDIsCisJCS51cHBlcl9tYXJnaW4JPSAxOSwKKwkJLmxvd2VyX21hcmdpbgk9IDEsCisJCS5oc3luY19sZW4JPSAyMywKKwkJLnZzeW5jX2xlbgk9IDgsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCit9LAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IGN1cnJlbnRfcGFuZWxfaWR4IF9faW5pdGRhdGEgPSBBUlJBWV9TSVpFKHBhbmVscykgLSAxOworCitzdGF0aWMgaW50IF9faW5pdCBwYW5lbF9zZXR1cChjaGFyICpzdHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYW5lbHMpOyBpKyspIHsKKwkJaWYgKHN0cmNtcChwYW5lbHNbaV0ubW9kZS5uYW1lLCBzdHIpID09IDApIHsKKwkJCWN1cnJlbnRfcGFuZWxfaWR4ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAwOworfQorCitlYXJseV9wYXJhbSgicGFuZWwiLCBwYW5lbF9zZXR1cCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVhbGxvY2F0ZV9mYihzdHJ1Y3QgdnQ4NTAwZmJfcGxhdGZvcm1fZGF0YSAqcCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYWxpZ24pIHsKKwlwLT52aWRlb19tZW1fbGVuID0gKHAtPnhyZXNfdmlydHVhbCAqIHAtPnlyZXNfdmlydHVhbCAqIDQpID4+CisJCQkocC0+YnBwID4gMTYgPyAwIDogKHAtPmJwcCA+IDggPyAxIDoKKwkJCQkJKDggLyBwLT5icHApICsgMSkpOworCXAtPnZpZGVvX21lbV9waHlzID0gKHVuc2lnbmVkIGxvbmcpbWVtYmxvY2tfYWxsb2MocC0+dmlkZW9fbWVtX2xlbiwKKwkJCQkJCQkgIGFsaWduKTsKKwlwLT52aWRlb19tZW1fdmlydCA9IHBoeXNfdG9fdmlydChwLT52aWRlb19tZW1fcGh5cyk7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV91YXJ0MCA9IHsKKwkubmFtZQkJPSAidnQ4NTAwX3NlcmlhbCIsCisJLmlkCQk9IDAsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfdWFydDEgPSB7CisJLm5hbWUJCT0gInZ0ODUwMF9zZXJpYWwiLAorCS5pZAkJPSAxLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3VhcnQyID0geworCS5uYW1lCQk9ICJ2dDg1MDBfc2VyaWFsIiwKKwkuaWQJCT0gMiwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV91YXJ0MyA9IHsKKwkubmFtZQkJPSAidnQ4NTAwX3NlcmlhbCIsCisJLmlkCQk9IDMsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfdWFydDQgPSB7CisJLm5hbWUJCT0gInZ0ODUwMF9zZXJpYWwiLAorCS5pZAkJPSA0LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3VhcnQ1ID0geworCS5uYW1lCQk9ICJ2dDg1MDBfc2VyaWFsIiwKKwkuaWQJCT0gNSwKK307CisKK3N0YXRpYyB1NjQgZWhjaV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9laGNpID0geworCS5uYW1lCQk9ICJ2dDg1MDAtZWhjaSIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzawk9ICZlaGNpX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfZ2Vfcm9wcyA9IHsKKwkubmFtZQkJPSAid210X2dlX3JvcHMiLAorCS5pZAkJPSAtMSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9wd20gPSB7CisJLm5hbWUJCT0gInZ0ODUwMC1wd20iLAorCS5pZAkJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgdnQ4NTAwX3B3bWJsX2RhdGEgPSB7CisJLnB3bV9pZAkJPSAwLAorCS5tYXhfYnJpZ2h0bmVzcwk9IDEyOCwKKwkuZGZ0X2JyaWdodG5lc3MgPSA3MCwKKwkucHdtX3BlcmlvZF9ucwk9IDI1MDAwMCwgLyogcmV2aXNpdCB3aGVuIGNsb2NrcyBhcmUgaW1wbGVtZW50ZWQgKi8KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9wd21ibCA9IHsKKwkubmFtZQkJPSAicHdtLWJhY2tsaWdodCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnZ0ODUwMF9wd21ibF9kYXRhLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfcnRjID0geworCS5uYW1lCQk9ICJ2dDg1MDAtcnRjIiwKKwkuaWQJCT0gMCwKK307CisKK3N0cnVjdCBtYXBfZGVzYyB3bXRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJLyogU29DIE1NSU8gcmVnaXN0ZXJzICovCisJWzBdID0geworCQkudmlydHVhbAk9IDB4ZjgwMDAwMDAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbigweGQ4MDAwMDAwKSwKKwkJLmxlbmd0aAkJPSAweDAwMzkwMDAwLCAvKiBtYXggb2YgYWxsIGNoaXAgdmFyaWFudHMgKi8KKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwkvKiBQQ0kgSS9PIHNwYWNlLCBudW1iZXJzIHRpZWQgdG8gdGhvc2UgaW4gPG1hY2gvaW8uaD4gKi8KKwlbMV0gPSB7CisJCS52aXJ0dWFsCT0gMHhmMDAwMDAwMCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4YzAwMDAwMDApLAorCQkubGVuZ3RoCQk9IFNaXzY0SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKK307CisKK3ZvaWQgX19pbml0IHZ0ODUwMF9yZXNlcnZlX21lbSh2b2lkKQoreworI2lmZGVmIENPTkZJR19GQl9WVDg1MDAKKwlwYW5lbHNbY3VycmVudF9wYW5lbF9pZHhdLmJwcCA9IDE2OyAvKiBBbHdheXMgdXNlIFJHQjU2NSAqLworCXByZWFsbG9jYXRlX2ZiKCZwYW5lbHNbY3VycmVudF9wYW5lbF9pZHhdLCBTWl80TSk7CisJdnQ4NTAwX2RldmljZV9sY2RjLmRldi5wbGF0Zm9ybV9kYXRhID0gJnBhbmVsc1tjdXJyZW50X3BhbmVsX2lkeF07CisjZW5kaWYKK30KKwordm9pZCBfX2luaXQgd204NTA1X3Jlc2VydmVfbWVtKHZvaWQpCit7CisjaWYgZGVmaW5lZCBDT05GSUdfRkJfV004NTA1CisJcGFuZWxzW2N1cnJlbnRfcGFuZWxfaWR4XS5icHAgPSAzMjsgLyogQWx3YXlzIHVzZSBSR0I4ODggKi8KKwlwcmVhbGxvY2F0ZV9mYigmcGFuZWxzW2N1cnJlbnRfcGFuZWxfaWR4XSwgMzIpOworCXZ0ODUwMF9kZXZpY2Vfd204NTA1X2ZiLmRldi5wbGF0Zm9ybV9kYXRhID0gJnBhbmVsc1tjdXJyZW50X3BhbmVsX2lkeF07CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODhkNGUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy5oCkBAIC0wLDAgKzEsODggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfVlQ4NTAwX0RFVklDRVNfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfVlQ4NTAwX0RFVklDRVNfSAorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKK3ZvaWQgX19pbml0IHZ0ODUwMF9pbml0X2lycSh2b2lkKTsKK3ZvaWQgX19pbml0IHdtODUwNV9pbml0X2lycSh2b2lkKTsKK3ZvaWQgX19pbml0IHZ0ODUwMF9tYXBfaW8odm9pZCk7Cit2b2lkIF9faW5pdCB3bTg1MDVfbWFwX2lvKHZvaWQpOwordm9pZCBfX2luaXQgdnQ4NTAwX3Jlc2VydmVfbWVtKHZvaWQpOwordm9pZCBfX2luaXQgd204NTA1X3Jlc2VydmVfbWVtKHZvaWQpOwordm9pZCBfX2luaXQgdnQ4NTAwX2dwaW9faW5pdCh2b2lkKTsKK3ZvaWQgX19pbml0IHZ0ODUwMF9zZXRfcmVzb3VyY2VzKHZvaWQpOwordm9pZCBfX2luaXQgd204NTA1X3NldF9yZXNvdXJjZXModm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHdtdF9pY19iYXNlIF9faW5pdGRhdGE7CitleHRlcm4gdW5zaWduZWQgbG9uZyB3bXRfc2ljX2Jhc2UgX19pbml0ZGF0YTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHdtdF9ncGlvX2Jhc2UgX19pbml0ZGF0YTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHdtdF9wbWNfYmFzZSBfX2luaXRkYXRhOworCitleHRlcm4gaW50IHdtdF9ucl9pcnFzIF9faW5pdGRhdGE7CitleHRlcm4gaW50IHdtdF90aW1lcl9pcnEgX19pbml0ZGF0YTsKK2V4dGVybiBpbnQgd210X2dwaW9fZXh0X2lycVs4XSBfX2luaXRkYXRhOworCitleHRlcm4gc3RydWN0IG1hcF9kZXNjIHdtdF9pb19kZXNjWzJdIF9faW5pdGRhdGE7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlc291cmNlIHdtdF9tbWlvX3Jlcyh1MzIgc3RhcnQsIHUzMiBzaXplKQoreworCXN0cnVjdCByZXNvdXJjZSB0bXAgPSB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSBzdGFydCwKKwkJLmVuZCA9IHN0YXJ0ICsgc2l6ZSAtIDEsCisJfTsKKworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlc291cmNlIHdtdF9pcnFfcmVzKGludCBpcnEpCit7CisJc3RydWN0IHJlc291cmNlIHRtcCA9IHsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydCA9IGlycSwKKwkJLmVuZCA9IGlycSwKKwl9OworCisJcmV0dXJuIHRtcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdtdF9yZXNfYWRkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGludCBudW0pCit7CisJaWYgKHVubGlrZWx5KHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywgbnVtKSkpCisJCXByX2VycigiRmFpbGVkIHRvIGFzc2lnbiByZXNvdXJjZXNcbiIpOworfQorCitleHRlcm4gc3RydWN0IHN5c190aW1lciB2dDg1MDBfdGltZXI7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfdWFydDA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3VhcnQxOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV91YXJ0MjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfdWFydDM7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3VhcnQ0OworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV91YXJ0NTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9sY2RjOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV93bTg1MDVfZmI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX2VoY2k7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX2dlX3JvcHM7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3B3bTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfcHdtYmw7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3J0YzsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiY2MwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9ncGlvLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtdnQ4NTAwL2dwaW8uYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworI2RlZmluZSB0b192dDg1MDAoX19jaGlwKSBjb250YWluZXJfb2YoX19jaGlwLCBzdHJ1Y3QgdnQ4NTAwX2dwaW9fY2hpcCwgY2hpcCkKKworI2RlZmluZSBFTkFCTEVfUkVHUwkweDAKKyNkZWZpbmUgRElSRUNUSU9OX1JFR1MJMHgyMAorI2RlZmluZSBPVVRWQUxVRV9SRUdTCTB4NDAKKyNkZWZpbmUgSU5WQUxVRV9SRUdTCTB4NjAKKworI2RlZmluZSBFWFRfUkVHT0ZGCTB4MWMKKworc3RhdGljIHZvaWQgX19pb21lbSAqcmVnYmFzZTsKKworc3RydWN0IHZ0ODUwMF9ncGlvX2NoaXAgeworCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKKwl1bnNpZ25lZCBpbnQJCXNoaWZ0OworCXVuc2lnbmVkIGludAkJcmVnb2ZmOworfTsKKworc3RhdGljIGludCBncGlvX3RvX2lycV9tYXBbOF07CisKK3N0YXRpYyBpbnQgdnQ4NTAwX211eGVkX2dwaW9fcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB2dDg1MDBfZ3Bpb19jaGlwICp2dDg1MDBfY2hpcCA9IHRvX3Z0ODUwMChjaGlwKTsKKwl1bnNpZ25lZCB2YWwgPSByZWFkbChyZWdiYXNlICsgRU5BQkxFX1JFR1MgKyB2dDg1MDBfY2hpcC0+cmVnb2ZmKTsKKworCXZhbCB8PSAoMSA8PCB2dDg1MDBfY2hpcC0+c2hpZnQgPDwgb2Zmc2V0KTsKKwl3cml0ZWwodmFsLCByZWdiYXNlICsgRU5BQkxFX1JFR1MgKyB2dDg1MDBfY2hpcC0+cmVnb2ZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2dDg1MDBfbXV4ZWRfZ3Bpb19mcmVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB2dDg1MDBfZ3Bpb19jaGlwICp2dDg1MDBfY2hpcCA9IHRvX3Z0ODUwMChjaGlwKTsKKwl1bnNpZ25lZCB2YWwgPSByZWFkbChyZWdiYXNlICsgRU5BQkxFX1JFR1MgKyB2dDg1MDBfY2hpcC0+cmVnb2ZmKTsKKworCXZhbCAmPSB+KDEgPDwgdnQ4NTAwX2NoaXAtPnNoaWZ0IDw8IG9mZnNldCk7CisJd3JpdGVsKHZhbCwgcmVnYmFzZSArIEVOQUJMRV9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7Cit9CisKK3N0YXRpYyBpbnQgdnQ4NTAwX211eGVkX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgICAgIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgdnQ4NTAwX2dwaW9fY2hpcCAqdnQ4NTAwX2NoaXAgPSB0b192dDg1MDAoY2hpcCk7CisJdW5zaWduZWQgdmFsID0gcmVhZGwocmVnYmFzZSArIERJUkVDVElPTl9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7CisKKwl2YWwgJj0gfigxIDw8IHZ0ODUwMF9jaGlwLT5zaGlmdCA8PCBvZmZzZXQpOworCXdyaXRlbCh2YWwsIHJlZ2Jhc2UgKyBESVJFQ1RJT05fUkVHUyArIHZ0ODUwMF9jaGlwLT5yZWdvZmYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnQ4NTAwX211eGVkX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgdnQ4NTAwX2dwaW9fY2hpcCAqdnQ4NTAwX2NoaXAgPSB0b192dDg1MDAoY2hpcCk7CisJdW5zaWduZWQgdmFsID0gcmVhZGwocmVnYmFzZSArIERJUkVDVElPTl9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7CisKKwl2YWwgfD0gKDEgPDwgdnQ4NTAwX2NoaXAtPnNoaWZ0IDw8IG9mZnNldCk7CisJd3JpdGVsKHZhbCwgcmVnYmFzZSArIERJUkVDVElPTl9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7CisKKwlpZiAodmFsdWUpIHsKKwkJdmFsID0gcmVhZGwocmVnYmFzZSArIE9VVFZBTFVFX1JFR1MgKyB2dDg1MDBfY2hpcC0+cmVnb2ZmKTsKKwkJdmFsIHw9ICgxIDw8IHZ0ODUwMF9jaGlwLT5zaGlmdCA8PCBvZmZzZXQpOworCQl3cml0ZWwodmFsLCByZWdiYXNlICsgT1VUVkFMVUVfUkVHUyArIHZ0ODUwMF9jaGlwLT5yZWdvZmYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dDg1MDBfbXV4ZWRfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgICAgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB2dDg1MDBfZ3Bpb19jaGlwICp2dDg1MDBfY2hpcCA9IHRvX3Z0ODUwMChjaGlwKTsKKworCXJldHVybiAocmVhZGwocmVnYmFzZSArIElOVkFMVUVfUkVHUyArIHZ0ODUwMF9jaGlwLT5yZWdvZmYpCisJCT4+IHZ0ODUwMF9jaGlwLT5zaGlmdCA+PiBvZmZzZXQpICYgMTsKK30KKworc3RhdGljIHZvaWQgdnQ4NTAwX211eGVkX2dwaW9fc2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB2dDg1MDBfZ3Bpb19jaGlwICp2dDg1MDBfY2hpcCA9IHRvX3Z0ODUwMChjaGlwKTsKKwl1bnNpZ25lZCB2YWwgPSByZWFkbChyZWdiYXNlICsgSU5WQUxVRV9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7CisKKwlpZiAodmFsdWUpCisJCXZhbCB8PSAoMSA8PCB2dDg1MDBfY2hpcC0+c2hpZnQgPDwgb2Zmc2V0KTsKKwllbHNlCisJCXZhbCAmPSB+KDEgPDwgdnQ4NTAwX2NoaXAtPnNoaWZ0IDw8IG9mZnNldCk7CisKKwl3cml0ZWwodmFsLCByZWdiYXNlICsgSU5WQUxVRV9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7Cit9CisKKyNkZWZpbmUgVlQ4NTAwX0dQSU9fQkFOSyhfX25hbWUsIF9fc2hpZnQsIF9fb2ZmLCBfX2Jhc2UsIF9fbnVtKQkJXAorewkJCQkJCQkJCVwKKwkuY2hpcCA9IHsJCQkJCQkJXAorCQkubGFiZWwJCQk9IF9fbmFtZSwJCQlcCisJCS5yZXF1ZXN0CQk9IHZ0ODUwMF9tdXhlZF9ncGlvX3JlcXVlc3QsCVwKKwkJLmZyZWUJCQk9IHZ0ODUwMF9tdXhlZF9ncGlvX2ZyZWUsCVwKKwkJLmRpcmVjdGlvbl9pbnB1dCAgPSB2dDg1MDBfbXV4ZWRfZ3Bpb19kaXJlY3Rpb25faW5wdXQsCVwKKwkJLmRpcmVjdGlvbl9vdXRwdXQgPSB2dDg1MDBfbXV4ZWRfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAlcCisJCS5nZXQJCQk9IHZ0ODUwMF9tdXhlZF9ncGlvX2dldF92YWx1ZSwJXAorCQkuc2V0CQkJPSB2dDg1MDBfbXV4ZWRfZ3Bpb19zZXRfdmFsdWUsCVwKKwkJLmNhbl9zbGVlcAkJPSAwLAkJCQlcCisJCS5iYXNlCQkJPSBfX2Jhc2UsCQkJXAorCQkubmdwaW8JCQk9IF9fbnVtLAkJCVwKKwl9LAkJCQkJCQkJXAorCS5zaGlmdAkJPSBfX3NoaWZ0LAkJCQkJXAorCS5yZWdvZmYJCT0gX19vZmYsCQkJCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdnQ4NTAwX2dwaW9fY2hpcCB2dDg1MDBfbXV4ZWRfZ3Bpb3NbXSA9IHsKKwlWVDg1MDBfR1BJT19CQU5LKCJ1YXJ0MCIsCTAsCTB4MCwJOCwJNCksCisJVlQ4NTAwX0dQSU9fQkFOSygidWFydDEiLAk0LAkweDAsCTEyLAk0KSwKKwlWVDg1MDBfR1BJT19CQU5LKCJzcGkwIiwJOCwJMHgwLAkxNiwJNCksCisJVlQ4NTAwX0dQSU9fQkFOSygic3BpMSIsCTEyLAkweDAsCTIwLAk0KSwKKwlWVDg1MDBfR1BJT19CQU5LKCJzcGkyIiwJMTYsCTB4MCwJMjQsCTQpLAorCVZUODUwMF9HUElPX0JBTksoInB3bW91dCIsCTI0LAkweDAsCTI4LAkyKSwKKworCVZUODUwMF9HUElPX0JBTksoInNkbW1jIiwJMCwJMHg0LAkzMCwJMTEpLAorCVZUODUwMF9HUElPX0JBTksoIm1zIiwJCTE2LAkweDQsCTQxLAk3KSwKKwlWVDg1MDBfR1BJT19CQU5LKCJpMmMwIiwJMjQsCTB4NCwJNDgsCTIpLAorCVZUODUwMF9HUElPX0JBTksoImkyYzEiLAkyNiwJMHg0LAk1MCwJMiksCisKKwlWVDg1MDBfR1BJT19CQU5LKCJtaWkiLAkJMCwJMHg4LAk1MiwJMjApLAorCVZUODUwMF9HUElPX0JBTksoInNlZSIsCQkyMCwJMHg4LAk3MiwJNCksCisJVlQ4NTAwX0dQSU9fQkFOSygiaWRlIiwJCTI0LAkweDgsCTc2LAk3KSwKKworCVZUODUwMF9HUElPX0JBTksoImNjaXIiLAkwLAkweGMsCTgzLAkxOSksCisKKwlWVDg1MDBfR1BJT19CQU5LKCJ0cyIsCQk4LAkweDEwLAkxMDIsCTExKSwKKworCVZUODUwMF9HUElPX0JBTksoImxjZCIsCQkwLAkweDE0LAkxMTMsCTIzKSwKK307CisKK3N0YXRpYyBpbnQgdnQ4NTAwX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgICAgIHVuc2lnbmVkIG9mZnNldCkKK3sKKwl1bnNpZ25lZCB2YWwgPSByZWFkbChyZWdiYXNlICsgRElSRUNUSU9OX1JFR1MgKyBFWFRfUkVHT0ZGKTsKKworCXZhbCAmPSB+KDEgPDwgb2Zmc2V0KTsKKwl3cml0ZWwodmFsLCByZWdiYXNlICsgRElSRUNUSU9OX1JFR1MgKyBFWFRfUkVHT0ZGKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dDg1MDBfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIHZhbCA9IHJlYWRsKHJlZ2Jhc2UgKyBESVJFQ1RJT05fUkVHUyArIEVYVF9SRUdPRkYpOworCisJdmFsIHw9ICgxIDw8IG9mZnNldCk7CisJd3JpdGVsKHZhbCwgcmVnYmFzZSArIERJUkVDVElPTl9SRUdTICsgRVhUX1JFR09GRik7CisKKwlpZiAodmFsdWUpIHsKKwkJdmFsID0gcmVhZGwocmVnYmFzZSArIE9VVFZBTFVFX1JFR1MgKyBFWFRfUkVHT0ZGKTsKKwkJdmFsIHw9ICgxIDw8IG9mZnNldCk7CisJCXdyaXRlbCh2YWwsIHJlZ2Jhc2UgKyBPVVRWQUxVRV9SRUdTICsgRVhUX1JFR09GRik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ0ODUwMF9ncGlvX2dldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgICB1bnNpZ25lZCBvZmZzZXQpCit7CisJcmV0dXJuIChyZWFkbChyZWdiYXNlICsgSU5WQUxVRV9SRUdTICsgRVhUX1JFR09GRikgPj4gb2Zmc2V0KSAmIDE7Cit9CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF9ncGlvX3NldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCB2YWwgPSByZWFkbChyZWdiYXNlICsgT1VUVkFMVUVfUkVHUyArIEVYVF9SRUdPRkYpOworCisJaWYgKHZhbHVlKQorCQl2YWwgfD0gKDEgPDwgb2Zmc2V0KTsKKwllbHNlCisJCXZhbCAmPSB+KDEgPDwgb2Zmc2V0KTsKKworCXdyaXRlbCh2YWwsIHJlZ2Jhc2UgKyBPVVRWQUxVRV9SRUdTICsgRVhUX1JFR09GRik7Cit9CisKK3N0YXRpYyBpbnQgdnQ4NTAwX2dwaW9fdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlpZiAob2Zmc2V0ID4gNykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gZ3Bpb190b19pcnFfbWFwW29mZnNldF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHZ0ODUwMF9leHRlcm5hbF9ncGlvcyA9IHsKKwkubGFiZWwJCQk9ICJleHRncGlvIiwKKwkuZGlyZWN0aW9uX2lucHV0CT0gdnQ4NTAwX2dwaW9fZGlyZWN0aW9uX2lucHV0LAorCS5kaXJlY3Rpb25fb3V0cHV0CT0gdnQ4NTAwX2dwaW9fZGlyZWN0aW9uX291dHB1dCwKKwkuZ2V0CQkJPSB2dDg1MDBfZ3Bpb19nZXRfdmFsdWUsCisJLnNldAkJCT0gdnQ4NTAwX2dwaW9fc2V0X3ZhbHVlLAorCS50b19pcnEJCQk9IHZ0ODUwMF9ncGlvX3RvX2lycSwKKwkuY2FuX3NsZWVwCQk9IDAsCisJLmJhc2UJCQk9IDAsCisJLm5ncGlvCQkJPSA4LAorfTsKKwordm9pZCBfX2luaXQgdnQ4NTAwX2dwaW9faW5pdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZ3Bpb190b19pcnFfbWFwW2ldID0gd210X2dwaW9fZXh0X2lycVtpXTsKKworCXJlZ2Jhc2UgPSBpb3JlbWFwKHdtdF9ncGlvX2Jhc2UsIFNaXzY0Syk7CisJaWYgKCFyZWdiYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG1hcCBNTUlPIHJlZ2lzdGVycyBmb3IgR1BJT1xuIik7CisJCXJldHVybjsKKwl9CisKKwlncGlvY2hpcF9hZGQoJnZ0ODUwMF9leHRlcm5hbF9ncGlvcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2dDg1MDBfbXV4ZWRfZ3Bpb3MpOyBpKyspCisJCWdwaW9jaGlwX2FkZCgmdnQ4NTAwX211eGVkX2dwaW9zW2ldLmNoaXApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTE5MTYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisJLm1hY3JvCWFkZHJ1YXJ0LCBycCwgcnYKKwltb3YJXHJwLCAgICAgICMweDAwMjAwMDAwCisJb3JyCVxydiwgXHJwLCAjMHhmODAwMDAwMAorCW9ycglccnAsIFxycCwgIzB4ZDgwMDAwMDAKKwkuZW5kbQorCisJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CisJc3RyYglccmQsIFtccngsICMwXQorCS5lbmRtCisKKwkubWFjcm8JYnVzeXVhcnQscmQscngKKzEwMDE6CWxkcglccmQsIFtccngsICMweDFjXQorCWFuZHMJXHJkLCBccmQsICMweDIKKwlibmUJMTAwMWIKKwkuZW5kbQorCisJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4CisJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2ODRjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgVklBIFZUODUwMAorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKwkubWFjcm8JZGlzYWJsZV9maXEKKwkuZW5kbQorCisJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCUAgcGh5c2ljYWwgMHhkODE0MDAwMCBpcyB2aXJ0dWFsIDB4ZjgxNDAwMDAKKwltb3YJXGJhc2UsICMweGY4MDAwMDAwCisJb3JyCVxiYXNlLCBcYmFzZSwgIzB4MDAxNDAwMDAKKwkuZW5kbQorCisJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwlsZHIJXGlycW5yLCBbXGJhc2VdCisJY21wCVxpcnFuciwgIzYzIEAgbWF5IGJlIGZhbHNlIHBvc2l0aXZlLCBjaGVjayBpbnRlcnJ1cHQgc3RhdHVzCisJYm5lCTEwMDFmCisJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMweDg0XQorCWFuZHMJXGlycXN0YXQsICMweDgwMDAwMDAwCisJbW92ZXEJXGlycW5yLCAjMAorMTAwMToKKwkuZW5kbQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGZmMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUJX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZQlfX2dwaW9fc2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJX19ncGlvX2NhbnNsZWVwCisjZGVmaW5lIGdwaW9fdG9faXJxCV9fZ3Bpb190b19pcnEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0MTYzZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pODA0Mi5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2k4MDQyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3MTQzYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pODA0Mi5oCkBAIC0wLDAgKzEsMTggQEAKKy8qIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pODA0Mi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyB3bXRfaTgwNDJfYmFzZSBfX2luaXRkYXRhOworZXh0ZXJuIGludCB3bXRfaTgwNDJfa2JkX2lycTsKK2V4dGVybiBpbnQgd210X2k4MDQyX2F1eF9pcnE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNzcyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMCwwICsxLDI4IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pby5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKKworI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKChhKSArIDB4ZjAwMDAwMDApCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTI5ZmQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyogVGhpcyB2YWx1ZSBpcyBqdXN0IHRvIG1ha2UgdGhlIGNvcmUgaGFwcHksIG5ldmVyIHVzZWQgb3RoZXJ3aXNlICovCisjZGVmaW5lIE5SX0lSUVMgMTI4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1ZjkxNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKy8qCisgKiBQaHlzaWNhbCBEUkFNIG9mZnNldC4KKyAqLworI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmM3NTdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqCisgKi8KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyogUE0gU29mdHdhcmUgUmVzZXQgcmVxdWVzdCByZWdpc3RlciAqLworI2RlZmluZSBWVDg1MDBfUE1TUl9WSVJUCTB4ZjgxMzAwNjAKKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCWNwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCXdyaXRlbCgxLCBWVDg1MDBfUE1TUl9WSVJUKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4N2U0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBNQUNIX1RJTUVYX0gKKyNkZWZpbmUgTUFDSF9USU1FWF9ICisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoMzAwMDAwMCkKKworI2VuZGlmIC8qIE1BQ0hfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5ZTJkMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSwzNyBAQAorLyogYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjZGVmaW5lIFVBUlQwX1BIWVMgMHhkODIwMDAwMAorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgdm9pZCBwdXRjKGNvbnN0IGNoYXIgYykKK3sKKwl3aGlsZSAocmVhZGIoVUFSVDBfUEhZUyArIDB4MWMpICYgMHgyKQorCQkvKiBUeCBidXN5LCB3YWl0IGFuZCBwb2xsICovOworCisJd3JpdGViKGMsIFVBUlQwX1BIWVMpOworfQorCitzdGF0aWMgdm9pZCBmbHVzaCh2b2lkKQoreworfQorCisvKgorICogbm90aGluZyB0byBkbworICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjQyMjkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhkMDAwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdnQ4NTAwX2lycXMuaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92dDg1MDBfaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZmVlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdnQ4NTAwX2lycXMuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92dDg1MDBfaXJxcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qIFZUODUwMCBJbnRlcnJ1cHQgU291cmNlcyAqLworCisjZGVmaW5lIElSUV9KUEVHRU5DCTAJLyogSlBFRyBFbmNvZGVyICovCisjZGVmaW5lIElSUV9KUEVHREVDCTEJLyogSlBFRyBEZWNvZGVyICovCisJCQkJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgSVJRX1BBVEEJMwkvKiBQQVRBIENvbnRyb2xsZXIgKi8KKwkJCQkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBJUlFfRE1BCQk1CS8qIERNQSBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9FWFQwCTYJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDAgKi8KKyNkZWZpbmUgSVJRX0VYVDEJNwkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMSAqLworI2RlZmluZSBJUlFfR0UJCTgJLyogR3JhcGhpYyBFbmdpbmUgKi8KKyNkZWZpbmUgSVJRX0dPVgkJOQkvKiBHcmFwaGljIE92ZXJsYXkgRW5naW5lICovCisjZGVmaW5lIElSUV9FVEhFUgkxMAkvKiBFdGhlcm5ldCBNQUMgKi8KKyNkZWZpbmUgSVJRX01QRUdUUwkxMQkvKiBUcmFuc3BvcnQgU3RyZWFtIEludGVyZmFjZSAqLworI2RlZmluZSBJUlFfTENEQwkxMgkvKiBMQ0QgQ29udHJvbGxlciAqLworI2RlZmluZSBJUlFfRVhUMgkxMwkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMiAqLworI2RlZmluZSBJUlFfRVhUMwkxNAkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMyAqLworI2RlZmluZSBJUlFfRVhUNAkxNQkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgNCAqLworI2RlZmluZSBJUlFfQ0lQSEVSCTE2CS8qIENpcGhlciAqLworI2RlZmluZSBJUlFfVlBQCQkxNwkvKiBWaWRlbyBQb3N0LVByb2Nlc3NvciAqLworI2RlZmluZSBJUlFfSTJDMQkxOAkvKiBJMkMgMSAqLworI2RlZmluZSBJUlFfSTJDMAkxOQkvKiBJMkMgMCAqLworI2RlZmluZSBJUlFfU0RNTUMJMjAJLyogU0QvTU1DIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX1NETU1DX0RNQQkyMQkvKiBTRC9NTUMgQ29udHJvbGxlciBETUEgKi8KKyNkZWZpbmUgSVJRX1BNQ19XVQkyMgkvKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xsZXIgV2FrZXVwICovCisJCQkJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgSVJRX1NQSTAJMjQJLyogU1BJIDAgKi8KKyNkZWZpbmUgSVJRX1NQSTEJMjUJLyogU1BJIDEgKi8KKyNkZWZpbmUgSVJRX1NQSTIJMjYJLyogU1BJIDIgKi8KKyNkZWZpbmUgSVJRX0xDRERGCTI3CS8qIExDRCBEYXRhIEZvcm1hdHRlciAqLworI2RlZmluZSBJUlFfTkFORAkyOAkvKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX05BTkRfRE1BCTI5CS8qIE5BTkQgRmxhc2ggQ29udHJvbGxlciBETUEgKi8KKyNkZWZpbmUgSVJRX01TCQkzMAkvKiBNZW1vcnlTdGljayBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9NU19ETUEJMzEJLyogTWVtb3J5U3RpY2sgQ29udHJvbGxlciBETUEgKi8KKyNkZWZpbmUgSVJRX1VBUlQwCTMyCS8qIFVBUlQgMCAqLworI2RlZmluZSBJUlFfVUFSVDEJMzMJLyogVUFSVCAxICovCisjZGVmaW5lIElSUV9JMlMJCTM0CS8qIEkyUyAqLworI2RlZmluZSBJUlFfUENNCQkzNQkvKiBQQ00gKi8KKyNkZWZpbmUgSVJRX1BNQ09TMAkzNgkvKiBQTUMgT1MgVGltZXIgMCAqLworI2RlZmluZSBJUlFfUE1DT1MxCTM3CS8qIFBNQyBPUyBUaW1lciAxICovCisjZGVmaW5lIElSUV9QTUNPUzIJMzgJLyogUE1DIE9TIFRpbWVyIDIgKi8KKyNkZWZpbmUgSVJRX1BNQ09TMwkzOQkvKiBQTUMgT1MgVGltZXIgMyAqLworI2RlZmluZSBJUlFfVlBVCQk0MAkvKiBWaWRlbyBQcm9jZXNzaW5nIFVuaXQgKi8KKyNkZWZpbmUgSVJRX1ZJRAkJNDEJLyogVmlkZW8gRGlnaXRhbCBJbnB1dCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSVJRX0FDOTcJNDIJLyogQUM5NyBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSVJRX0VIQ0kJNDMJLyogVVNCICovCisjZGVmaW5lIElSUV9OT1IJCTQ0CS8qIE5PUiBGbGFzaCBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9QUzJNT1VTRQk0NQkvKiBQUy8yIE1vdXNlICovCisjZGVmaW5lIElSUV9QUzJLQkQJNDYJLyogUFMvMiBLZXlib2FyZCAqLworI2RlZmluZSBJUlFfVUFSVDIJNDcJLyogVUFSVCAyICovCisjZGVmaW5lIElSUV9SVEMJCTQ4CS8qIFJUQyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1JUQ1NNCTQ5CS8qIFJUQyBTZWNvbmQvTWludXRlIFVwZGF0ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1VBUlQzCTUwCS8qIFVBUlQgMyAqLworI2RlZmluZSBJUlFfQURDCQk1MQkvKiBBREMgKi8KKyNkZWZpbmUgSVJRX0VYVDUJNTIJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDUgKi8KKyNkZWZpbmUgSVJRX0VYVDYJNTMJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDYgKi8KKyNkZWZpbmUgSVJRX0VYVDcJNTQJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDcgKi8KKyNkZWZpbmUgSVJRX0NJUgkJNTUJLyogQ0lSICovCisjZGVmaW5lIElSUV9ETUEwCTU2CS8qIERNQSBDaGFubmVsIDAgKi8KKyNkZWZpbmUgSVJRX0RNQTEJNTcJLyogRE1BIENoYW5uZWwgMSAqLworI2RlZmluZSBJUlFfRE1BMgk1OAkvKiBETUEgQ2hhbm5lbCAyICovCisjZGVmaW5lIElSUV9ETUEzCTU5CS8qIERNQSBDaGFubmVsIDMgKi8KKyNkZWZpbmUgSVJRX0RNQTQJNjAJLyogRE1BIENoYW5uZWwgNCAqLworI2RlZmluZSBJUlFfRE1BNQk2MQkvKiBETUEgQ2hhbm5lbCA1ICovCisjZGVmaW5lIElSUV9ETUE2CTYyCS8qIERNQSBDaGFubmVsIDYgKi8KKyNkZWZpbmUgSVJRX0RNQTcJNjMJLyogRE1BIENoYW5uZWwgNyAqLworCisjZGVmaW5lIFZUODUwMF9OUl9JUlFTCQk2NApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3Z0ODUwMF9yZWdzLmggYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdnQ4NTAwX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWM2M2VjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3Z0ODUwMF9yZWdzLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdnQ4NTAwX3JlZ3MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9WVDg1MDBfUkVHU19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX1ZUODUwMF9SRUdTX0gKKworLyogVlQ4NTAwIFJlZ2lzdGVycyBNYXAgKi8KKworI2RlZmluZSBWVDg1MDBfUkVHU19TVEFSVF9QSFlTCTB4ZDgwMDAwMDAJLyogU3RhcnQgb2YgTU1JTyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVlQ4NTAwX1JFR1NfU1RBUlRfVklSVAkweGY4MDAwMDAwCS8qIFZpcnR1YWwgbWFwcGluZyBzdGFydCAqLworCisjZGVmaW5lIFZUODUwMF9ERFJfQkFTRQkJMHhkODAwMDAwMAkvKiAxawlERFIvRERSMiBNZW1vcnkKKwkJCQkJCQlDb250cm9sbGVyICovCisjZGVmaW5lIFZUODUwMF9ETUFfQkFTRQkJMHhkODAwMTAwMAkvKiAxawlETUEgQ29udHJvbGxlciAqLworI2RlZmluZSBWVDg1MDBfU0ZMQVNIX0JBU0UJMHhkODAwMjAwMAkvKiAxawlTZXJpYWwgRmxhc2ggTWVtb3J5CisJCQkJCQkJQ29udHJvbGxlciAqLworI2RlZmluZSBWVDg1MDBfRVRIRVJfQkFTRQkweGQ4MDA0MDAwCS8qIDFrCUV0aGVybmV0IE1BQyAwICovCisjZGVmaW5lIFZUODUwMF9DSVBIRVJfQkFTRQkweGQ4MDA2MDAwCS8qIDRrCUNpcGhlciAqLworI2RlZmluZSBWVDg1MDBfVVNCX0JBU0UJCTB4ZDgwMDc4MDAJLyogMmsJVVNCIE9URyAqLworIyBkZWZpbmUgVlQ4NTAwX0VIQ0lfQkFTRQkweGQ4MDA3OTAwCS8qCUVIQ0kgKi8KKyMgZGVmaW5lIFZUODUwMF9VSENJX0JBU0UJMHhkODAwN2IwMQkvKglVSENJICovCisjZGVmaW5lIFZUODUwMF9QQVRBX0JBU0UJMHhkODAwODAwMAkvKiA1MTIJUEFUQSAqLworI2RlZmluZSBWVDg1MDBfUFMyX0JBU0UJCTB4ZDgwMDg4MDAJLyogMWsJUFMvMiAqLworI2RlZmluZSBWVDg1MDBfTkFORF9CQVNFCTB4ZDgwMDkwMDAJLyogMWsJTkFORCBDb250cm9sbGVyICovCisjZGVmaW5lIFZUODUwMF9OT1JfQkFTRQkJMHhkODAwOTQwMAkvKiAxawlOT1IgQ29udHJvbGxlciAqLworI2RlZmluZSBWVDg1MDBfU0RNTUNfQkFTRQkweGQ4MDBhMDAwCS8qIDFrCVNEL01NQyBDb250cm9sbGVyICovCisjZGVmaW5lIFZUODUwMF9NU19CQVNFCQkweGQ4MDBiMDAwCS8qIDFrCU1TL01TUFJPIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgVlQ4NTAwX0xDRENfQkFTRQkweGQ4MDBlNDAwCS8qIDFrCUxDRCBDb250cm9sbGVyICovCisjZGVmaW5lIFZUODUwMF9WUFVfQkFTRQkJMHhkODA1MDAwMAkvKiAyNTYJVlBVICovCisjZGVmaW5lIFZUODUwMF9HT1ZfQkFTRQkJMHhkODA1MDMwMAkvKiAyNTYJR09WICovCisjZGVmaW5lIFZUODUwMF9HRUdFQV9CQVNFCTB4ZDgwNTA0MDAJLyogNzY4CUdFL0dFIEFscGhhIE1peGluZyAqLworI2RlZmluZSBWVDg1MDBfTENERl9CQVNFCTB4ZDgwNTA5MDAJLyogMjU2CUxDRCBGb3JtYXR0ZXIgKi8KKyNkZWZpbmUgVlQ4NTAwX1ZJRF9CQVNFCQkweGQ4MDUwYTAwCS8qIDI1NglWSUQgKi8KKyNkZWZpbmUgVlQ4NTAwX1ZQUF9CQVNFCQkweGQ4MDUwYjAwCS8qIDI1NglWUFAgKi8KKyNkZWZpbmUgVlQ4NTAwX1RTQktfQkFTRQkweGQ4MGY0MDAwCS8qIDRrCVRTQksgKi8KKyNkZWZpbmUgVlQ4NTAwX0pQRUdERUNfQkFTRQkweGQ4MGZlMDAwCS8qIDRrCUpQRUcgRGVjb2RlciAqLworI2RlZmluZSBWVDg1MDBfSlBFR0VOQ19CQVNFCTB4ZDgwZmYwMDAJLyogNGsJSlBFRyBFbmNvZGVyICovCisjZGVmaW5lIFZUODUwMF9SVENfQkFTRQkJMHhkODEwMDAwMAkvKiA2NGsJUlRDICovCisjZGVmaW5lIFZUODUwMF9HUElPX0JBU0UJMHhkODExMDAwMAkvKiA2NGsJR1BJTyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIFZUODUwMF9TQ0NfQkFTRQkJMHhkODEyMDAwMAkvKiA2NGsJU3lzdGVtIENvbmZpZ3VyYXRpb24qLworI2RlZmluZSBWVDg1MDBfUE1DX0JBU0UJCTB4ZDgxMzAwMDAJLyogNjRrCVBNQyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIFZUODUwMF9JQ19CQVNFCQkweGQ4MTQwMDAwCS8qIDY0awlJbnRlcnJ1cHQgQ29udHJvbGxlciovCisjZGVmaW5lIFZUODUwMF9VQVJUMF9CQVNFCTB4ZDgyMDAwMDAJLyogNjRrCVVBUlQgMCAqLworI2RlZmluZSBWVDg1MDBfVUFSVDJfQkFTRQkweGQ4MjEwMDAwCS8qIDY0awlVQVJUIDIgKi8KKyNkZWZpbmUgVlQ4NTAwX1BXTV9CQVNFCQkweGQ4MjIwMDAwCS8qIDY0awlQV00gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBWVDg1MDBfU1BJMF9CQVNFCTB4ZDgyNDAwMDAJLyogNjRrCVNQSSAwICovCisjZGVmaW5lIFZUODUwMF9TUEkxX0JBU0UJMHhkODI1MDAwMAkvKiA2NGsJU1BJIDEgKi8KKyNkZWZpbmUgVlQ4NTAwX0NJUl9CQVNFCQkweGQ4MjcwMDAwCS8qIDY0awlDSVIgKi8KKyNkZWZpbmUgVlQ4NTAwX0kyQzBfQkFTRQkweGQ4MjgwMDAwCS8qIDY0awlJMkMgMCAqLworI2RlZmluZSBWVDg1MDBfQUM5N19CQVNFCTB4ZDgyOTAwMDAJLyogNjRrCUFDOTcgKi8KKyNkZWZpbmUgVlQ4NTAwX1NQSTJfQkFTRQkweGQ4MmEwMDAwCS8qIDY0awlTUEkgMiAqLworI2RlZmluZSBWVDg1MDBfVUFSVDFfQkFTRQkweGQ4MmIwMDAwCS8qIDY0awlVQVJUIDEgKi8KKyNkZWZpbmUgVlQ4NTAwX1VBUlQzX0JBU0UJMHhkODJjMDAwMAkvKiA2NGsJVUFSVCAzICovCisjZGVmaW5lIFZUODUwMF9QQ01fQkFTRQkJMHhkODJkMDAwMAkvKiA2NGsJUENNICovCisjZGVmaW5lIFZUODUwMF9JMkMxX0JBU0UJMHhkODMyMDAwMAkvKiA2NGsJSTJDIDEgKi8KKyNkZWZpbmUgVlQ4NTAwX0kyU19CQVNFCQkweGQ4MzMwMDAwCS8qIDY0awlJMlMgKi8KKyNkZWZpbmUgVlQ4NTAwX0FEQ19CQVNFCQkweGQ4MzQwMDAwCS8qIDY0awlBREMgKi8KKworI2RlZmluZSBWVDg1MDBfUkVHU19FTkRfUEhZUwkweGQ4MzRmZmZmCS8qIEVuZCBvZiBNTUlPIHJlZ2lzdGVycyAqLworI2RlZmluZSBWVDg1MDBfUkVHU19MRU5HVEgJKFZUODUwMF9SRUdTX0VORF9QSFlTIFwKKwkJCQktIFZUODUwMF9SRUdTX1NUQVJUX1BIWVMgKyAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92dDg1MDBmYi5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3Z0ODUwMGZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YzOTljMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92dDg1MDBmYi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiAgVlQ4NTAwL1dNODUwNSBGcmFtZSBCdWZmZXIgcGxhdGZvcm0gZGF0YSBkZWZpbml0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgRWQgU3Bpcmlkb25vdiA8ZWRvLnJ1c0BnbWFpbC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9WVDg1MDBGQl9ICisjZGVmaW5lIF9WVDg1MDBGQl9ICisKKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCitzdHJ1Y3QgdnQ4NTAwZmJfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IGZiX3ZpZGVvbW9kZQltb2RlOworCXUzMgkJCXhyZXNfdmlydHVhbDsKKwl1MzIJCQl5cmVzX3ZpcnR1YWw7CisJdTMyCQkJYnBwOworCXVuc2lnbmVkIGxvbmcJCXZpZGVvX21lbV9waHlzOworCXZvaWQJCQkqdmlkZW9fbWVtX3ZpcnQ7CisJdW5zaWduZWQgbG9uZwkJdmlkZW9fbWVtX2xlbjsKK307CisKKyNlbmRpZiAvKiBfVlQ4NTAwRkJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3dtODUwNV9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvd204NTA1X2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTI4NjI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3dtODUwNV9pcnFzLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3dtODUwNV9pcnFzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyogV004NTA1IEludGVycnVwdCBTb3VyY2VzICovCisKKyNkZWZpbmUgSVJRX1VIQ0kJMAkvKiBVSEMgRlMgKFVIQ0k/KSAqLworI2RlZmluZSBJUlFfRUhDSQkxCS8qIFVIQyBIUyAqLworI2RlZmluZSBJUlFfVURDRE1BCTIJLyogVURDIERNQSAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9QUzJNT1VTRQk0CS8qIFBTLzIgTW91c2UgKi8KKyNkZWZpbmUgSVJRX1VEQwkJNQkvKiBVREMgKi8KKyNkZWZpbmUgSVJRX0VYVDAJNgkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMCAqLworI2RlZmluZSBJUlFfRVhUMQk3CS8qIEV4dGVybmFsIEludGVycnVwdCAxICovCisjZGVmaW5lIElSUV9LRVlQQUQJOAkvKiBLZXlwYWQgKi8KKyNkZWZpbmUgSVJRX0RNQQkJOQkvKiBETUEgQ29udHJvbGxlciAqLworI2RlZmluZSBJUlFfRVRIRVIJMTAJLyogRXRoZXJuZXQgTUFDICovCisJCQkJLyogUmVzZXJ2ZWQgKi8KKwkJCQkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBJUlFfRVhUMgkxMwkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMiAqLworI2RlZmluZSBJUlFfRVhUMwkxNAkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMyAqLworI2RlZmluZSBJUlFfRVhUNAkxNQkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgNCAqLworI2RlZmluZSBJUlFfQVBCCQkxNgkvKiBBUEIgQnJpZGdlICovCisjZGVmaW5lIElSUV9ETUEwCTE3CS8qIERNQSBDaGFubmVsIDAgKi8KKyNkZWZpbmUgSVJRX0kyQzEJMTgJLyogSTJDIDEgKi8KKyNkZWZpbmUgSVJRX0kyQzAJMTkJLyogSTJDIDAgKi8KKyNkZWZpbmUgSVJRX1NETU1DCTIwCS8qIFNEL01NQyBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9TRE1NQ19ETUEJMjEJLyogU0QvTU1DIENvbnRyb2xsZXIgRE1BICovCisjZGVmaW5lIElSUV9QTUNfV1UJMjIJLyogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sbGVyIFdha2V1cCAqLworI2RlZmluZSBJUlFfUFMyS0JECTIzCS8qIFBTLzIgS2V5Ym9hcmQgKi8KKyNkZWZpbmUgSVJRX1NQSTAJMjQJLyogU1BJIDAgKi8KKyNkZWZpbmUgSVJRX1NQSTEJMjUJLyogU1BJIDEgKi8KKyNkZWZpbmUgSVJRX1NQSTIJMjYJLyogU1BJIDIgKi8KKyNkZWZpbmUgSVJRX0RNQTEJMjcJLyogRE1BIENoYW5uZWwgMSAqLworI2RlZmluZSBJUlFfTkFORAkyOAkvKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX05BTkRfRE1BCTI5CS8qIE5BTkQgRmxhc2ggQ29udHJvbGxlciBETUEgKi8KKyNkZWZpbmUgSVJRX1VBUlQ1CTMwCS8qIFVBUlQgNSAqLworI2RlZmluZSBJUlFfVUFSVDQJMzEJLyogVUFSVCA0ICovCisjZGVmaW5lIElSUV9VQVJUMAkzMgkvKiBVQVJUIDAgKi8KKyNkZWZpbmUgSVJRX1VBUlQxCTMzCS8qIFVBUlQgMSAqLworI2RlZmluZSBJUlFfRE1BMgkzNAkvKiBETUEgQ2hhbm5lbCAyICovCisjZGVmaW5lIElSUV9JMlMJCTM1CS8qIEkyUyAqLworI2RlZmluZSBJUlFfUE1DT1MwCTM2CS8qIFBNQyBPUyBUaW1lciAwICovCisjZGVmaW5lIElSUV9QTUNPUzEJMzcJLyogUE1DIE9TIFRpbWVyIDEgKi8KKyNkZWZpbmUgSVJRX1BNQ09TMgkzOAkvKiBQTUMgT1MgVGltZXIgMiAqLworI2RlZmluZSBJUlFfUE1DT1MzCTM5CS8qIFBNQyBPUyBUaW1lciAzICovCisjZGVmaW5lIElSUV9ETUEzCTQwCS8qIERNQSBDaGFubmVsIDMgKi8KKyNkZWZpbmUgSVJRX0RNQTQJNDEJLyogRE1BIENoYW5uZWwgNCAqLworI2RlZmluZSBJUlFfQUM5Nwk0MgkvKiBBQzk3IEludGVyZmFjZSAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9OT1IJCTQ0CS8qIE5PUiBGbGFzaCBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9ETUE1CTQ1CS8qIERNQSBDaGFubmVsIDUgKi8KKyNkZWZpbmUgSVJRX0RNQTYJNDYJLyogRE1BIENoYW5uZWwgNiAqLworI2RlZmluZSBJUlFfVUFSVDIJNDcJLyogVUFSVCAyICovCisjZGVmaW5lIElSUV9SVEMJCTQ4CS8qIFJUQyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1JUQ1NNCTQ5CS8qIFJUQyBTZWNvbmQvTWludXRlIFVwZGF0ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1VBUlQzCTUwCS8qIFVBUlQgMyAqLworI2RlZmluZSBJUlFfRE1BNwk1MQkvKiBETUEgQ2hhbm5lbCA3ICovCisjZGVmaW5lIElSUV9FWFQ1CTUyCS8qIEV4dGVybmFsIEludGVycnVwdCA1ICovCisjZGVmaW5lIElSUV9FWFQ2CTUzCS8qIEV4dGVybmFsIEludGVycnVwdCA2ICovCisjZGVmaW5lIElSUV9FWFQ3CTU0CS8qIEV4dGVybmFsIEludGVycnVwdCA3ICovCisjZGVmaW5lIElSUV9DSVIJCTU1CS8qIENJUiAqLworI2RlZmluZSBJUlFfU0lDMAk1NgkvKiBTSUMgSVJRMCAqLworI2RlZmluZSBJUlFfU0lDMQk1NwkvKiBTSUMgSVJRMSAqLworI2RlZmluZSBJUlFfU0lDMgk1OAkvKiBTSUMgSVJRMiAqLworI2RlZmluZSBJUlFfU0lDMwk1OQkvKiBTSUMgSVJRMyAqLworI2RlZmluZSBJUlFfU0lDNAk2MAkvKiBTSUMgSVJRNCAqLworI2RlZmluZSBJUlFfU0lDNQk2MQkvKiBTSUMgSVJRNSAqLworI2RlZmluZSBJUlFfU0lDNgk2MgkvKiBTSUMgSVJRNiAqLworI2RlZmluZSBJUlFfU0lDNwk2MwkvKiBTSUMgSVJRNyAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9KUEVHREVDCTY1CS8qIEpQRUcgRGVjb2RlciAqLworI2RlZmluZSBJUlFfU0FFCQk2NgkvKiBTQUUgKD8pICovCisJCQkJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgSVJRX1ZQVQkJNzkJLyogVmlkZW8gUHJvY2Vzc2luZyBVbml0ICovCisjZGVmaW5lIElSUV9WUFAJCTgwCS8qIFZpZGVvIFBvc3QtUHJvY2Vzc29yICovCisjZGVmaW5lIElSUV9WSUQJCTgxCS8qIFZpZGVvIERpZ2l0YWwgSW5wdXQgSW50ZXJmYWNlICovCisjZGVmaW5lIElSUV9TUFUJCTgyCS8qIFNQVSAoPykgKi8KKyNkZWZpbmUgSVJRX1BJUAkJODMJLyogUElQIEVycm9yICovCisjZGVmaW5lIElSUV9HRQkJODQJLyogR3JhcGhpYyBFbmdpbmUgKi8KKyNkZWZpbmUgSVJRX0dPVgkJODUJLyogR3JhcGhpYyBPdmVybGF5IEVuZ2luZSAqLworI2RlZmluZSBJUlFfRFZPCQk4NgkvKiBEaWdpdGFsIFZpZGVvIE91dHB1dCAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9ETUE4CTkyCS8qIERNQSBDaGFubmVsIDggKi8KKyNkZWZpbmUgSVJRX0RNQTkJOTMJLyogRE1BIENoYW5uZWwgOSAqLworI2RlZmluZSBJUlFfRE1BMTAJOTQJLyogRE1BIENoYW5uZWwgMTAgKi8KKyNkZWZpbmUgSVJRX0RNQTExCTk1CS8qIERNQSBDaGFubmVsIDExICovCisjZGVmaW5lIElSUV9ETUExMgk5NgkvKiBETUEgQ2hhbm5lbCAxMiAqLworI2RlZmluZSBJUlFfRE1BMTMJOTcJLyogRE1BIENoYW5uZWwgMTMgKi8KKyNkZWZpbmUgSVJRX0RNQTE0CTk4CS8qIERNQSBDaGFubmVsIDE0ICovCisjZGVmaW5lIElSUV9ETUExNQk5OQkvKiBETUEgQ2hhbm5lbCAxNSAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9HT1ZXCTExMQkvKiBHT1ZXICg/KSAqLworI2RlZmluZSBJUlFfR09WUlNEU0NECTExMgkvKiBHT1ZSIFNEU0NEICg/KSAqLworI2RlZmluZSBJUlFfR09WUlNETUlGCTExMwkvKiBHT1ZSIFNETUlGICg/KSAqLworI2RlZmluZSBJUlFfR09WUkhEU0NECTExNAkvKiBHT1ZSIEhEU0NEICg/KSAqLworI2RlZmluZSBJUlFfR09WUkhETUlGCTExNQkvKiBHT1ZSIEhETUlGICg/KSAqLworCisjZGVmaW5lIFdNODUwNV9OUl9JUlFTCQkxMTYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC93bTg1MDVfcmVncy5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3dtODUwNV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxNTUwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC93bTg1MDVfcmVncy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3dtODUwNV9yZWdzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfV004NTA1X1JFR1NfSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9XTTg1MDVfUkVHU19ICisKKy8qIFdNODUwNSBSZWdpc3RlcnMgTWFwICovCisKKyNkZWZpbmUgV004NTA1X1JFR1NfU1RBUlRfUEhZUwkweGQ4MDAwMDAwCS8qIFN0YXJ0IG9mIE1NSU8gcmVnaXN0ZXJzICovCisjZGVmaW5lIFdNODUwNV9SRUdTX1NUQVJUX1ZJUlQJMHhmODAwMDAwMAkvKiBWaXJ0dWFsIG1hcHBpbmcgc3RhcnQgKi8KKworI2RlZmluZSBXTTg1MDVfRERSX0JBU0UJCTB4ZDgwMDA0MDAJLyogMWsJRERSL0REUjIgTWVtb3J5CisJCQkJCQkJQ29udHJvbGxlciAqLworI2RlZmluZSBXTTg1MDVfRE1BX0JBU0UJCTB4ZDgwMDE4MDAJLyogMWsJRE1BIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgV004NTA1X1ZETUFfQkFTRQkweGQ4MDAxYzAwCS8qIDFrCVZETUEgKi8KKyNkZWZpbmUgV004NTA1X1NGTEFTSF9CQVNFCTB4ZDgwMDIwMDAJLyogMWsJU2VyaWFsIEZsYXNoIE1lbW9yeQorCQkJCQkJCUNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgV004NTA1X0VUSEVSX0JBU0UJMHhkODAwNDAwMAkvKiAxawlFdGhlcm5ldCBNQUMgMCAqLworI2RlZmluZSBXTTg1MDVfQ0lQSEVSX0JBU0UJMHhkODAwNjAwMAkvKiA0awlDaXBoZXIgKi8KKyNkZWZpbmUgV004NTA1X1VTQl9CQVNFCQkweGQ4MDA3MDAwCS8qIDJrCVVTQiAyLjAgSG9zdCAqLworIyBkZWZpbmUgV004NTA1X0VIQ0lfQkFTRQkweGQ4MDA3MTAwCS8qCUVIQ0kgKi8KKyMgZGVmaW5lIFdNODUwNV9VSENJX0JBU0UJMHhkODAwNzMwMQkvKglVSENJICovCisjZGVmaW5lIFdNODUwNV9QUzJfQkFTRQkJMHhkODAwODgwMAkvKiAxawlQUy8yICovCisjZGVmaW5lIFdNODUwNV9OQU5EX0JBU0UJMHhkODAwOTAwMAkvKiAxawlOQU5EIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgV004NTA1X05PUl9CQVNFCQkweGQ4MDA5NDAwCS8qIDFrCU5PUiBDb250cm9sbGVyICovCisjZGVmaW5lIFdNODUwNV9TRE1NQ19CQVNFCTB4ZDgwMGEwMDAJLyogMWsJU0QvTU1DIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgV004NTA1X1ZQVV9CQVNFCQkweGQ4MDUwMDAwCS8qIDI1NglWUFUgKi8KKyNkZWZpbmUgV004NTA1X0dPVl9CQVNFCQkweGQ4MDUwMzAwCS8qIDI1NglHT1YgKi8KKyNkZWZpbmUgV004NTA1X0dFR0VBX0JBU0UJMHhkODA1MDQwMAkvKiA3NjgJR0UvR0UgQWxwaGEgTWl4aW5nICovCisjZGVmaW5lIFdNODUwNV9HT1ZSX0JBU0UJMHhkODA1MDgwMAkvKiA1MTIJR09WUiAoZnJhbWJ1ZmZlcikgKi8KKyNkZWZpbmUgV004NTA1X1ZJRF9CQVNFCQkweGQ4MDUwYTAwCS8qIDI1NglWSUQgKi8KKyNkZWZpbmUgV004NTA1X1NDTF9CQVNFCQkweGQ4MDUwZDAwCS8qIDI1NglTQ0wgKi8KKyNkZWZpbmUgV004NTA1X1ZQUF9CQVNFCQkweGQ4MDUwZjAwCS8qIDI1NglWUFAgKi8KKyNkZWZpbmUgV004NTA1X0pQRUdERUNfQkFTRQkweGQ4MGZlMDAwCS8qIDRrCUpQRUcgRGVjb2RlciAqLworI2RlZmluZSBXTTg1MDVfUlRDX0JBU0UJCTB4ZDgxMDAwMDAJLyogNjRrCVJUQyAqLworI2RlZmluZSBXTTg1MDVfR1BJT19CQVNFCTB4ZDgxMTAwMDAJLyogNjRrCUdQSU8gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBXTTg1MDVfU0NDX0JBU0UJCTB4ZDgxMjAwMDAJLyogNjRrCVN5c3RlbSBDb25maWd1cmF0aW9uKi8KKyNkZWZpbmUgV004NTA1X1BNQ19CQVNFCQkweGQ4MTMwMDAwCS8qIDY0awlQTUMgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBXTTg1MDVfSUNfQkFTRQkJMHhkODE0MDAwMAkvKiA2NGsJSW50ZXJydXB0IENvbnRyb2xsZXIqLworI2RlZmluZSBXTTg1MDVfU0lDX0JBU0UJCTB4ZDgxNTAwMDAJLyogNjRrCVNlY29uZGFyeSBJQyAqLworI2RlZmluZSBXTTg1MDVfVUFSVDBfQkFTRQkweGQ4MjAwMDAwCS8qIDY0awlVQVJUIDAgKi8KKyNkZWZpbmUgV004NTA1X1VBUlQyX0JBU0UJMHhkODIxMDAwMAkvKiA2NGsJVUFSVCAyICovCisjZGVmaW5lIFdNODUwNV9QV01fQkFTRQkJMHhkODIyMDAwMAkvKiA2NGsJUFdNIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgV004NTA1X1NQSTBfQkFTRQkweGQ4MjQwMDAwCS8qIDY0awlTUEkgMCAqLworI2RlZmluZSBXTTg1MDVfU1BJMV9CQVNFCTB4ZDgyNTAwMDAJLyogNjRrCVNQSSAxICovCisjZGVmaW5lIFdNODUwNV9LRVlQQURfQkFTRQkweGQ4MjYwMDAwCS8qIDY0awlLZXlwYWQgY29udHJvbCAqLworI2RlZmluZSBXTTg1MDVfQ0lSX0JBU0UJCTB4ZDgyNzAwMDAJLyogNjRrCUNJUiAqLworI2RlZmluZSBXTTg1MDVfSTJDMF9CQVNFCTB4ZDgyODAwMDAJLyogNjRrCUkyQyAwICovCisjZGVmaW5lIFdNODUwNV9BQzk3X0JBU0UJMHhkODI5MDAwMAkvKiA2NGsJQUM5NyAqLworI2RlZmluZSBXTTg1MDVfU1BJMl9CQVNFCTB4ZDgyYTAwMDAJLyogNjRrCVNQSSAyICovCisjZGVmaW5lIFdNODUwNV9VQVJUMV9CQVNFCTB4ZDgyYjAwMDAJLyogNjRrCVVBUlQgMSAqLworI2RlZmluZSBXTTg1MDVfVUFSVDNfQkFTRQkweGQ4MmMwMDAwCS8qIDY0awlVQVJUIDMgKi8KKyNkZWZpbmUgV004NTA1X0kyQzFfQkFTRQkweGQ4MzIwMDAwCS8qIDY0awlJMkMgMSAqLworI2RlZmluZSBXTTg1MDVfSTJTX0JBU0UJCTB4ZDgzMzAwMDAJLyogNjRrCUkyUyAqLworI2RlZmluZSBXTTg1MDVfVUFSVDRfQkFTRQkweGQ4MzcwMDAwCS8qIDY0awlVQVJUIDQgKi8KKyNkZWZpbmUgV004NTA1X1VBUlQ1X0JBU0UJMHhkODM4MDAwMAkvKiA2NGsJVUFSVCA1ICovCisKKyNkZWZpbmUgV004NTA1X1JFR1NfRU5EX1BIWVMJMHhkODM4ZmZmZgkvKiBFbmQgb2YgTU1JTyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgV004NTA1X1JFR1NfTEVOR1RICShXTTg1MDVfUkVHU19FTkRfUEhZUyBcCisJCQkJLSBXTTg1MDVfUkVHU19TVEFSVF9QSFlTICsgMSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNGRkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pcnEuYwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pcnEuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworI2RlZmluZSBWVDg1MDBfSUNfRENUUgkJMHg0MAkJLyogRGVzdGluYXRpb24gY29udHJvbAorCQkJCQkJcmVnaXN0ZXIsIDY0KnU4ICovCisjZGVmaW5lIFZUODUwMF9JTlRfRU5BQkxFCSgxIDw8IDMpCisjZGVmaW5lIFZUODUwMF9UUklHR0VSX0hJR0gJKDAgPDwgNCkKKyNkZWZpbmUgVlQ4NTAwX1RSSUdHRVJfUklTSU5HCSgxIDw8IDQpCisjZGVmaW5lIFZUODUwMF9UUklHR0VSX0ZBTExJTkcJKDIgPDwgNCkKKyNkZWZpbmUgVlQ4NTAwX0VER0UJCSggVlQ4NTAwX1RSSUdHRVJfUklTSU5HIFwKKwkJCQl8IFZUODUwMF9UUklHR0VSX0ZBTExJTkcpCisjZGVmaW5lIFZUODUwMF9JQ19TVEFUVVMJMHg4MAkJLyogSW50ZXJydXB0IHN0YXR1cywgMip1MzIgKi8KKworc3RhdGljIHZvaWQgX19pb21lbSAqaWNfcmVnYmFzZTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnNpY19yZWdiYXNlOworCitzdGF0aWMgdm9pZCB2dDg1MDBfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBpY19yZWdiYXNlOworCXU4IGVkZ2U7CisKKwlpZiAoaXJxID49IDY0KSB7CisJCWJhc2UgPSBzaWNfcmVnYmFzZTsKKwkJaXJxIC09IDY0OworCX0KKwllZGdlID0gcmVhZGIoYmFzZSArIFZUODUwMF9JQ19EQ1RSICsgaXJxKSAmIFZUODUwMF9FREdFOworCWlmIChlZGdlKSB7CisJCXZvaWQgX19pb21lbSAqc3RhdF9yZWcgPSBiYXNlICsgVlQ4NTAwX0lDX1NUQVRVUworCQkJCQkJKyAoaXJxIDwgMzIgPyAwIDogNCk7CisJCXVuc2lnbmVkIHN0YXR1cyA9IHJlYWRsKHN0YXRfcmVnKTsKKworCQlzdGF0dXMgfD0gKDEgPDwgKGlycSAmIDB4MWYpKTsKKwkJd3JpdGVsKHN0YXR1cywgc3RhdF9yZWcpOworCX0gZWxzZSB7CisJCXU4IGRjdHIgPSByZWFkYihiYXNlICsgVlQ4NTAwX0lDX0RDVFIgKyBpcnEpOworCisJCWRjdHIgJj0gflZUODUwMF9JTlRfRU5BQkxFOworCQl3cml0ZWIoZGN0ciwgYmFzZSArIFZUODUwMF9JQ19EQ1RSICsgaXJxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaWNfcmVnYmFzZTsKKwl1OCBkY3RyOworCisJaWYgKGlycSA+PSA2NCkgeworCQliYXNlID0gc2ljX3JlZ2Jhc2U7CisJCWlycSAtPSA2NDsKKwl9CisJZGN0ciA9IHJlYWRiKGJhc2UgKyBWVDg1MDBfSUNfRENUUiArIGlycSk7CisJZGN0ciB8PSBWVDg1MDBfSU5UX0VOQUJMRTsKKwl3cml0ZWIoZGN0ciwgYmFzZSArIFZUODUwMF9JQ19EQ1RSICsgaXJxKTsKK30KKworc3RhdGljIGludCB2dDg1MDBfaXJxX3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaWNfcmVnYmFzZTsKKwl1bnNpZ25lZCBpbnQgb3JpZ19pcnEgPSBpcnE7CisJdTggZGN0cjsKKworCWlmIChpcnEgPj0gNjQpIHsKKwkJYmFzZSA9IHNpY19yZWdiYXNlOworCQlpcnEgLT0gNjQ7CisJfQorCisJZGN0ciA9IHJlYWRiKGJhc2UgKyBWVDg1MDBfSUNfRENUUiArIGlycSk7CisJZGN0ciAmPSB+VlQ4NTAwX0VER0U7CisKKwlzd2l0Y2ggKGZsb3dfdHlwZSkgeworCWNhc2UgSVJRRl9UUklHR0VSX0xPVzoKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBJUlFGX1RSSUdHRVJfSElHSDoKKwkJZGN0ciB8PSBWVDg1MDBfVFJJR0dFUl9ISUdIOworCQlpcnFfZGVzY1tvcmlnX2lycV0uaGFuZGxlX2lycSA9IGhhbmRsZV9sZXZlbF9pcnE7CisJCWJyZWFrOworCWNhc2UgSVJRRl9UUklHR0VSX0ZBTExJTkc6CisJCWRjdHIgfD0gVlQ4NTAwX1RSSUdHRVJfRkFMTElORzsKKwkJaXJxX2Rlc2Nbb3JpZ19pcnFdLmhhbmRsZV9pcnEgPSBoYW5kbGVfZWRnZV9pcnE7CisJCWJyZWFrOworCWNhc2UgSVJRRl9UUklHR0VSX1JJU0lORzoKKwkJZGN0ciB8PSBWVDg1MDBfVFJJR0dFUl9SSVNJTkc7CisJCWlycV9kZXNjW29yaWdfaXJxXS5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOworCQlicmVhazsKKwl9CisJd3JpdGViKGRjdHIsIGJhc2UgKyBWVDg1MDBfSUNfRENUUiArIGlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB2dDg1MDBfaXJxX2NoaXAgPSB7CisJLm5hbWUgICAgICA9ICJ2dDg1MDAiLAorCS5hY2sgICAgICAgPSB2dDg1MDBfaXJxX21hc2ssCisJLm1hc2sgICAgICA9IHZ0ODUwMF9pcnFfbWFzaywKKwkudW5tYXNrICAgID0gdnQ4NTAwX2lycV91bm1hc2ssCisJLnNldF90eXBlICA9IHZ0ODUwMF9pcnFfc2V0X3R5cGUsCit9OworCit2b2lkIF9faW5pdCB2dDg1MDBfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWljX3JlZ2Jhc2UgPSBpb3JlbWFwKHdtdF9pY19iYXNlLCBTWl82NEspOworCisJaWYgKGljX3JlZ2Jhc2UpIHsKKwkJLyogRW5hYmxlIHJvdGF0aW5nIHByaW9yaXR5IGZvciBJUlEgKi8KKwkJd3JpdGVsKCgxIDw8IDYpLCBpY19yZWdiYXNlICsgMHgyMCk7CisJCXdyaXRlbCgwLCBpY19yZWdiYXNlICsgMHgyNCk7CisKKwkJZm9yIChpID0gMDsgaSA8IHdtdF9ucl9pcnFzOyBpKyspIHsKKwkJCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgYW5kIHJvdXRlIHRoZW0gdG8gSVJRICovCisJCQl3cml0ZWIoMHgwMCwgaWNfcmVnYmFzZSArIFZUODUwMF9JQ19EQ1RSICsgaSk7CisKKwkJCXNldF9pcnFfY2hpcChpLCAmdnQ4NTAwX2lycV9jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZW1hcCB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIgcmVnaXN0ZXJzLCBub3QgZW5hYmxpbmcgSVJRcyFcbiIpOworCX0KK30KKwordm9pZCBfX2luaXQgd204NTA1X2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlpY19yZWdiYXNlID0gaW9yZW1hcCh3bXRfaWNfYmFzZSwgU1pfNjRLKTsKKwlzaWNfcmVnYmFzZSA9IGlvcmVtYXAod210X3NpY19iYXNlLCBTWl82NEspOworCisJaWYgKGljX3JlZ2Jhc2UgJiYgc2ljX3JlZ2Jhc2UpIHsKKwkJLyogRW5hYmxlIHJvdGF0aW5nIHByaW9yaXR5IGZvciBJUlEgKi8KKwkJd3JpdGVsKCgxIDw8IDYpLCBpY19yZWdiYXNlICsgMHgyMCk7CisJCXdyaXRlbCgwLCBpY19yZWdiYXNlICsgMHgyNCk7CisJCXdyaXRlbCgoMSA8PCA2KSwgc2ljX3JlZ2Jhc2UgKyAweDIwKTsKKwkJd3JpdGVsKDAsIHNpY19yZWdiYXNlICsgMHgyNCk7CisKKwkJZm9yIChpID0gMDsgaSA8IHdtdF9ucl9pcnFzOyBpKyspIHsKKwkJCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgYW5kIHJvdXRlIHRoZW0gdG8gSVJRICovCisJCQlpZiAoaSA8IDY0KQorCQkJCXdyaXRlYigweDAwLCBpY19yZWdiYXNlICsgVlQ4NTAwX0lDX0RDVFIgKyBpKTsKKwkJCWVsc2UKKwkJCQl3cml0ZWIoMHgwMCwgc2ljX3JlZ2Jhc2UgKyBWVDg1MDBfSUNfRENUUgorCQkJCQkJCQkrIGkgLSA2NCk7CisKKwkJCXNldF9pcnFfY2hpcChpLCAmdnQ4NTAwX2lycV9jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZW1hcCB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIgcmVnaXN0ZXJzLCBub3QgZW5hYmxpbmcgSVJRcyFcbiIpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL3B3bS5jIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvcHdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkODI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL3B3bS5jCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogYXJjaC9hcm0vbWFjaC12dDg1MDAvcHdtLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wd20uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNkZWZpbmUgVlQ4NTAwX05SX1BXTVMgNAorCitzdGF0aWMgREVGSU5FX01VVEVYKHB3bV9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQocHdtX2xpc3QpOworCitzdHJ1Y3QgcHdtX2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CisKKwljb25zdCBjaGFyCSpsYWJlbDsKKworCXZvaWQgX19pb21lbQkqcmVnYmFzZTsKKworCXVuc2lnbmVkIGludAl1c2VfY291bnQ7CisJdW5zaWduZWQgaW50CXB3bV9pZDsKK307CisKKyNkZWZpbmUgbXNlY3NfdG9fbG9vcHModCkgKGxvb3BzX3Blcl9qaWZmeSAvIDEwMDAgKiBIWiAqIHQpCitzdGF0aWMgaW5saW5lIHZvaWQgcHdtX2J1c3lfd2FpdCh2b2lkIF9faW9tZW0gKnJlZywgdTggYml0bWFzaykKK3sKKwlpbnQgbG9vcHMgPSBtc2Vjc190b19sb29wcygxMCk7CisJd2hpbGUgKChyZWFkYihyZWcpICYgYml0bWFzaykgJiYgLS1sb29wcykKKwkJY3B1X3JlbGF4KCk7CisKKwlpZiAodW5saWtlbHkoIWxvb3BzKSkKKwkJcHJfd2FybmluZygiV2FpdGluZyBmb3Igc3RhdHVzIGJpdHMgMHgleCB0byBjbGVhciB0aW1lZCBvdXRcbiIsCisJCQkgICBiaXRtYXNrKTsKK30KKworaW50IHB3bV9jb25maWcoc3RydWN0IHB3bV9kZXZpY2UgKnB3bSwgaW50IGR1dHlfbnMsIGludCBwZXJpb2RfbnMpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGM7CisJdW5zaWduZWQgbG9uZyBwZXJpb2RfY3ljbGVzLCBwcmVzY2FsZSwgcHYsIGRjOworCisJaWYgKHB3bSA9PSBOVUxMIHx8IHBlcmlvZF9ucyA9PSAwIHx8IGR1dHlfbnMgPiBwZXJpb2RfbnMpCisJCXJldHVybiAtRUlOVkFMOworCisJYyA9IDI1MDAwMDAwLzI7IC8qIHdpbGQgZ3Vlc3MgLS0tIG5lZWQgdG8gaW1wbGVtZW50IGNsb2NrcyAqLworCWMgPSBjICogcGVyaW9kX25zOworCWRvX2RpdihjLCAxMDAwMDAwMDAwKTsKKwlwZXJpb2RfY3ljbGVzID0gYzsKKworCWlmIChwZXJpb2RfY3ljbGVzIDwgMSkKKwkJcGVyaW9kX2N5Y2xlcyA9IDE7CisJcHJlc2NhbGUgPSAocGVyaW9kX2N5Y2xlcyAtIDEpIC8gNDA5NjsKKwlwdiA9IHBlcmlvZF9jeWNsZXMgLyAocHJlc2NhbGUgKyAxKSAtIDE7CisJaWYgKHB2ID4gNDA5NSkKKwkJcHYgPSA0MDk1OworCisJaWYgKHByZXNjYWxlID4gMTAyMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljID0gKHVuc2lnbmVkIGxvbmcgbG9uZylwdiAqIGR1dHlfbnM7CisJZG9fZGl2KGMsIHBlcmlvZF9ucyk7CisJZGMgPSBjOworCisJcHdtX2J1c3lfd2FpdChwd20tPnJlZ2Jhc2UgKyAweDQwICsgcHdtLT5wd21faWQsICgxIDw8IDEpKTsKKwl3cml0ZWwocHJlc2NhbGUsIHB3bS0+cmVnYmFzZSArIDB4NCArIChwd20tPnB3bV9pZCA8PCA0KSk7CisKKwlwd21fYnVzeV93YWl0KHB3bS0+cmVnYmFzZSArIDB4NDAgKyBwd20tPnB3bV9pZCwgKDEgPDwgMikpOworCXdyaXRlbChwdiwgcHdtLT5yZWdiYXNlICsgMHg4ICsgKHB3bS0+cHdtX2lkIDw8IDQpKTsKKworCXB3bV9idXN5X3dhaXQocHdtLT5yZWdiYXNlICsgMHg0MCArIHB3bS0+cHdtX2lkLCAoMSA8PCAzKSk7CisJd3JpdGVsKGRjLCBwd20tPnJlZ2Jhc2UgKyAweGMgKyAocHdtLT5wd21faWQgPDwgNCkpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9jb25maWcpOworCitpbnQgcHdtX2VuYWJsZShzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQoreworCXB3bV9idXN5X3dhaXQocHdtLT5yZWdiYXNlICsgMHg0MCArIHB3bS0+cHdtX2lkLCAoMSA8PCAwKSk7CisJd3JpdGVsKDUsIHB3bS0+cmVnYmFzZSArIChwd20tPnB3bV9pZCA8PCA0KSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9lbmFibGUpOworCit2b2lkIHB3bV9kaXNhYmxlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCit7CisJcHdtX2J1c3lfd2FpdChwd20tPnJlZ2Jhc2UgKyAweDQwICsgcHdtLT5wd21faWQsICgxIDw8IDApKTsKKwl3cml0ZWwoMCwgcHdtLT5yZWdiYXNlICsgKHB3bS0+cHdtX2lkIDw8IDQpKTsKK30KK0VYUE9SVF9TWU1CT0wocHdtX2Rpc2FibGUpOworCitzdHJ1Y3QgcHdtX2RldmljZSAqcHdtX3JlcXVlc3QoaW50IHB3bV9pZCwgY29uc3QgY2hhciAqbGFiZWwpCit7CisJc3RydWN0IHB3bV9kZXZpY2UgKnB3bTsKKwlpbnQgZm91bmQgPSAwOworCisJbXV0ZXhfbG9jaygmcHdtX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwd20sICZwd21fbGlzdCwgbm9kZSkgeworCQlpZiAocHdtLT5wd21faWQgPT0gcHdtX2lkKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmb3VuZCkgeworCQlpZiAocHdtLT51c2VfY291bnQgPT0gMCkgeworCQkJcHdtLT51c2VfY291bnQrKzsKKwkJCXB3bS0+bGFiZWwgPSBsYWJlbDsKKwkJfSBlbHNlIHsKKwkJCXB3bSA9IEVSUl9QVFIoLUVCVVNZKTsKKwkJfQorCX0gZWxzZSB7CisJCXB3bSA9IEVSUl9QVFIoLUVOT0VOVCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7CisJcmV0dXJuIHB3bTsKK30KK0VYUE9SVF9TWU1CT0wocHdtX3JlcXVlc3QpOworCit2b2lkIHB3bV9mcmVlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCit7CisJbXV0ZXhfbG9jaygmcHdtX2xvY2spOworCisJaWYgKHB3bS0+dXNlX2NvdW50KSB7CisJCXB3bS0+dXNlX2NvdW50LS07CisJCXB3bS0+bGFiZWwgPSBOVUxMOworCX0gZWxzZSB7CisJCXByX3dhcm5pbmcoIlBXTSBkZXZpY2UgYWxyZWFkeSBmcmVlZFxuIik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9mcmVlKTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fYWRkX3B3bShzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQoreworCW11dGV4X2xvY2soJnB3bV9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZwd20tPm5vZGUsICZwd21fbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHB3bV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwd21fZGV2aWNlICpwd21zOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCXB3bXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHdtX2RldmljZSkgKiBWVDg1MDBfTlJfUFdNUywgR0ZQX0tFUk5FTCk7CisJaWYgKHB3bXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpID0gMDsgaSA8IFZUODUwMF9OUl9QV01TOyBpKyspIHsKKwkJcHdtc1tpXS51c2VfY291bnQgPSAwOworCQlwd21zW2ldLnB3bV9pZCA9IGk7CisJCXB3bXNbaV0ucGRldiA9IHBkZXY7CisJfQorCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2UgZGVmaW5lZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSwgcGRldi0+bmFtZSk7CisJaWYgKHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcHdtc1swXS5yZWdiYXNlID0gaW9yZW1hcChyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CisJaWYgKHB3bXNbMF0ucmVnYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpb3JlbWFwKCkgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJZm9yIChpID0gMTsgaSA8IFZUODUwMF9OUl9QV01TOyBpKyspCisJCXB3bXNbaV0ucmVnYmFzZSA9IHB3bXNbMF0ucmVnYmFzZTsKKworCWZvciAoaSA9IDA7IGkgPCBWVDg1MDBfTlJfUFdNUzsgaSsrKQorCQlfX2FkZF9wd20oJnB3bXNbaV0pOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHdtcyk7CisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX21lbToKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworZXJyX2ZyZWU6CisJa2ZyZWUocHdtcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcHdtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwd21fZGV2aWNlICpwd21zOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlpbnQgaTsKKworCXB3bXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAocHdtcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJnB3bV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBWVDg1MDBfTlJfUFdNUzsgaSsrKQorCQlsaXN0X2RlbCgmcHdtc1tpXS5ub2RlKTsKKwltdXRleF91bmxvY2soJnB3bV9sb2NrKTsKKworCWlvdW5tYXAocHdtc1swXS5yZWdiYXNlKTsKKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CisKKwlrZnJlZShwd21zKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHdtX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAidnQ4NTAwLXB3bSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHB3bV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHB3bV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHdtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwd21fZHJpdmVyKTsKK30KK2FyY2hfaW5pdGNhbGwocHdtX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgcHdtX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcHdtX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChwd21fZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Mzc2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC90aW1lci5jCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL3RpbWVyLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworI2RlZmluZSBWVDg1MDBfVElNRVJfT0ZGU0VUCTB4MDEwMAorI2RlZmluZSBUSU1FUl9NQVRDSF9WQUwJCTB4MDAwMAorI2RlZmluZSBUSU1FUl9DT1VOVF9WQUwJCTB4MDAxMAorI2RlZmluZSBUSU1FUl9TVEFUVVNfVkFMCTB4MDAxNAorI2RlZmluZSBUSU1FUl9JRVJfVkFMCQkweDAwMWMJCS8qIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgVElNRVJfQ1RSTF9WQUwJCTB4MDAyMAorI2RlZmluZSBUSU1FUl9BU19WQUwJCTB4MDAyNAkJLyogYWNjZXNzIHN0YXR1cyAqLworI2RlZmluZSBUSU1FUl9DT1VOVF9SX0FDVElWRQkoMSA8PCA1KQkvKiBub3QgcmVhZHkgZm9yIHJlYWQgKi8KKyNkZWZpbmUgVElNRVJfQ09VTlRfV19BQ1RJVkUJKDEgPDwgNCkJLyogbm90IHJlYWR5IGZvciB3cml0ZSAqLworI2RlZmluZSBUSU1FUl9NQVRDSF9XX0FDVElWRQkoMSA8PCAwKQkvKiBub3QgcmVhZHkgZm9yIHdyaXRlICovCisjZGVmaW5lIFZUODUwMF9USU1FUl9IWgkJMzAwMDAwMAorCisjZGVmaW5lIG1zZWNzX3RvX2xvb3BzKHQpIChsb29wc19wZXJfamlmZnkgLyAxMDAwICogSFogKiB0KQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpyZWdiYXNlOworCitzdGF0aWMgY3ljbGVfdCB2dDg1MDBfdGltZXJfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCWludCBsb29wcyA9IG1zZWNzX3RvX2xvb3BzKDEwKTsKKwl3cml0ZWwoMywgcmVnYmFzZSArIFRJTUVSX0NUUkxfVkFMKTsKKwl3aGlsZSAoKHJlYWRsKChyZWdiYXNlICsgVElNRVJfQVNfVkFMKSkgJiBUSU1FUl9DT1VOVF9SX0FDVElWRSkKKwkJCQkJCSYmIC0tbG9vcHMpCisJCWNwdV9yZWxheCgpOworCXJldHVybiByZWFkbChyZWdiYXNlICsgVElNRVJfQ09VTlRfVkFMKTsKK30KKworc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlID0geworCS5uYW1lICAgICAgICAgICA9ICJ2dDg1MDBfdGltZXIiLAorCS5yYXRpbmcgICAgICAgICA9IDIwMCwKKwkucmVhZCAgICAgICAgICAgPSB2dDg1MDBfdGltZXJfcmVhZCwKKwkubWFzayAgICAgICAgICAgPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuZmxhZ3MgICAgICAgICAgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKK3N0YXRpYyBpbnQgdnQ4NTAwX3RpbWVyX3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgY3ljbGVzLAorCQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJaW50IGxvb3BzID0gbXNlY3NfdG9fbG9vcHMoMTApOworCWN5Y2xlX3QgYWxhcm0gPSBjbG9ja3NvdXJjZS5yZWFkKCZjbG9ja3NvdXJjZSkgKyBjeWNsZXM7CisJd2hpbGUgKChyZWFkbChyZWdiYXNlICsgVElNRVJfQVNfVkFMKSAmIFRJTUVSX01BVENIX1dfQUNUSVZFKQorCQkJCQkJJiYgLS1sb29wcykKKwkJY3B1X3JlbGF4KCk7CisJd3JpdGVsKCh1bnNpZ25lZCBsb25nKWFsYXJtLCByZWdiYXNlICsgVElNRVJfTUFUQ0hfVkFMKTsKKworCWlmICgoc2lnbmVkKShhbGFybSAtIGNsb2Nrc291cmNlLnJlYWQoJmNsb2Nrc291cmNlKSkgPD0gMTYpCisJCXJldHVybiAtRVRJTUU7CisKKwl3cml0ZWwoMSwgcmVnYmFzZSArIFRJTUVSX0lFUl9WQUwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF90aW1lcl9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCSAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwkJd3JpdGVsKHJlYWRsKHJlZ2Jhc2UgKyBUSU1FUl9DVFJMX1ZBTCkgfCAxLAorCQkJcmVnYmFzZSArIFRJTUVSX0NUUkxfVkFMKTsKKwkJd3JpdGVsKDAsIHJlZ2Jhc2UgKyBUSU1FUl9JRVJfVkFMKTsKKwkJYnJlYWs7CisJfQorfQorCitzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNsb2NrZXZlbnQgPSB7CisJLm5hbWUgICAgICAgICAgID0gInZ0ODUwMF90aW1lciIsCisJLmZlYXR1cmVzICAgICAgID0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkucmF0aW5nICAgICAgICAgPSAyMDAsCisJLnNldF9uZXh0X2V2ZW50ID0gdnQ4NTAwX3RpbWVyX3NldF9uZXh0X2V2ZW50LAorCS5zZXRfbW9kZSAgICAgICA9IHZ0ODUwMF90aW1lcl9zZXRfbW9kZSwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB2dDg1MDBfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSBkZXZfaWQ7CisJd3JpdGVsKDB4ZiwgcmVnYmFzZSArIFRJTUVSX1NUQVRVU19WQUwpOworCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdHJ1Y3QgaXJxYWN0aW9uIGlycSA9IHsKKwkubmFtZSAgICA9ICJ2dDg1MDBfdGltZXIiLAorCS5mbGFncyAgID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCisJLmhhbmRsZXIgPSB2dDg1MDBfdGltZXJfaW50ZXJydXB0LAorCS5kZXZfaWQgID0gJmNsb2NrZXZlbnQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgdnQ4NTAwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlyZWdiYXNlID0gaW9yZW1hcCh3bXRfcG1jX2Jhc2UgKyBWVDg1MDBfVElNRVJfT0ZGU0VULCAweDI4KTsKKwlpZiAoIXJlZ2Jhc2UpCisJCXByaW50ayhLRVJOX0VSUiAidnQ4NTAwX3RpbWVyX2luaXQ6IGZhaWxlZCB0byBtYXAgTU1JTyByZWdpc3RlcnNcbiIpOworCisJd3JpdGVsKDEsIHJlZ2Jhc2UgKyBUSU1FUl9DVFJMX1ZBTCk7CisJd3JpdGVsKDB4ZiwgcmVnYmFzZSArIFRJTUVSX1NUQVRVU19WQUwpOworCXdyaXRlbCh+MCwgcmVnYmFzZSArIFRJTUVSX01BVENIX1ZBTCk7CisKKwlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlLCBWVDg1MDBfVElNRVJfSFopKQorCQlwcmludGsoS0VSTl9FUlIgInZ0ODUwMF90aW1lcl9pbml0OiBjbG9ja3NvdXJjZV9yZWdpc3RlciBmYWlsZWQgZm9yICVzXG4iLAorCQkJCQljbG9ja3NvdXJjZS5uYW1lKTsKKworCWNsb2NrZXZlbnRzX2NhbGNfbXVsdF9zaGlmdCgmY2xvY2tldmVudCwgVlQ4NTAwX1RJTUVSX0haLCA0KTsKKworCS8qIGNvcHktcGFzdGVkIGZyb20gbWFjaC1tc207IG5vIGlkZWEgKi8KKwljbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9CisJCWNsb2NrZXZlbnRfZGVsdGEybnMoMHhmMDAwMDAwMCwgJmNsb2NrZXZlbnQpOworCWNsb2NrZXZlbnQubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyg0LCAmY2xvY2tldmVudCk7CisJY2xvY2tldmVudC5jcHVtYXNrID0gY3B1bWFza19vZigwKTsKKworCWlmIChzZXR1cF9pcnEod210X3RpbWVyX2lycSwgJmlycSkpCisJCXByaW50ayhLRVJOX0VSUiAidnQ4NTAwX3RpbWVyX2luaXQ6IHNldHVwX2lycSBmYWlsZWQgZm9yICVzXG4iLAorCQkJCQljbG9ja2V2ZW50Lm5hbWUpOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmY2xvY2tldmVudCk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgdnQ4NTAwX3RpbWVyID0geworCS5pbml0ID0gdnQ4NTAwX3RpbWVyX2luaXQKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC93bTg1MDVfN2luLmMgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC93bTg1MDVfN2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczYWFkYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL3dtODUwNV83aW4uYwpAQCAtMCwwICsxLDc3IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL3dtODUwNV83aW4uYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnBtY19oaWJlcjsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZ2dDg1MDBfZGV2aWNlX3VhcnQwLAorCSZ2dDg1MDBfZGV2aWNlX2VoY2ksCisJJnZ0ODUwMF9kZXZpY2Vfd204NTA1X2ZiLAorCSZ2dDg1MDBfZGV2aWNlX2dlX3JvcHMsCisJJnZ0ODUwMF9kZXZpY2VfcHdtLAorCSZ2dDg1MDBfZGV2aWNlX3B3bWJsLAorCSZ2dDg1MDBfZGV2aWNlX3J0YywKK307CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF9wb3dlcl9vZmYodm9pZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXdyaXRldyg1LCBwbWNfaGliZXIpOworCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzcsIGMwLCA0IiA6IDogInIiICgwKSk7Cit9CisKK3ZvaWQgX19pbml0IHdtODUwNV83aW5faW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19GQl9XTTg1MDUKKwl2b2lkIF9faW9tZW0gKmdwaW9fbXV4X3JlZyA9IGlvcmVtYXAod210X2dwaW9fYmFzZSArIDB4MjAwLCA0KTsKKwlpZiAoZ3Bpb19tdXhfcmVnKSB7CisJCXdyaXRlbChyZWFkbChncGlvX211eF9yZWcpIHwgMHg4MDAwMDAwMCwgZ3Bpb19tdXhfcmVnKTsKKwkJaW91bm1hcChncGlvX211eF9yZWcpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHJlbWFwIHRoZSBHUElPIG11eCByZWdpc3RlciwgZGlzcGxheSBtYXkgbm90IHdvcmsgcHJvcGVybHkhXG4iKTsKKwl9CisjZW5kaWYKKwlwbWNfaGliZXIgPSBpb3JlbWFwKHdtdF9wbWNfYmFzZSArIDB4MTIsIDIpOworCWlmIChwbWNfaGliZXIpCisJCXBtX3Bvd2VyX29mZiA9ICZ2dDg1MDBfcG93ZXJfb2ZmOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJQTUMgSGliZXJuYXRpb24gcmVnaXN0ZXIgY291bGQgbm90IGJlIHJlbWFwcGVkLCBub3QgZW5hYmxpbmcgcG93ZXIgb2ZmIVxuIik7CisKKwl3bTg1MDVfc2V0X3Jlc291cmNlcygpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCXZ0ODUwMF9ncGlvX2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChXTTg1MDVfN0lOX05FVEJPT0ssICJXTTg1MDUgNy1pbmNoIGdlbmVyaWMgbmV0Ym9vayIpCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkucmVzZXJ2ZQk9IHdtODUwNV9yZXNlcnZlX21lbSwKKwkubWFwX2lvCQk9IHdtODUwNV9tYXBfaW8sCisJLmluaXRfaXJxCT0gd204NTA1X2luaXRfaXJxLAorCS50aW1lcgkJPSAmdnQ4NTAwX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSB3bTg1MDVfN2luX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggOWQzMGM2Zi4uZTQ1MDliYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC00MDUsNyArNDA1LDcgQEAKIGNvbmZpZyBDUFVfMzJ2NksKIAlib29sICJTdXBwb3J0IEFSTSBWNksgcHJvY2Vzc29yIGV4dGVuc2lvbnMiIGlmICFTTVAKIAlkZXBlbmRzIG9uIENQVV9WNiB8fCBDUFVfVjcKLQlkZWZhdWx0IHkgaWYgU01QICYmICEoQVJDSF9NWDMgfHwgQVJDSF9PTUFQMikKKwlkZWZhdWx0IHkgaWYgU01QCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3VyIEFSTXY2IHByb2Nlc3NvciBzdXBwb3J0cyB0aGUgJ0snIGV4dGVuc2lvbi4KIAkgIFRoaXMgZW5hYmxlcyB0aGUga2VybmVsIHRvIHVzZSBzb21lIGluc3RydWN0aW9ucyBub3QgcHJlc2VudApAQCAtNDE2LDcgKzQxNiw3IEBACiAjIEFSTXY3CiBjb25maWcgQ1BVX1Y3CiAJYm9vbCAiU3VwcG9ydCBBUk0gVjcgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBNQUNIX1JFQUxWSUVXX1BCWAotCXNlbGVjdCBDUFVfMzJ2NksgaWYgIUFSQ0hfT01BUDIKKwlzZWxlY3QgQ1BVXzMydjZLCiAJc2VsZWN0IENQVV8zMnY3CiAJc2VsZWN0IENQVV9BQlJUX0VWNwogCXNlbGVjdCBDUFVfUEFCUlRfVjcKQEAgLTY0NCw3ICs2NDQsNyBAQAogCiBjb25maWcgU1dQX0VNVUxBVEUKIAlib29sICJFbXVsYXRlIFNXUC9TV1BCIGluc3RydWN0aW9ucyIKLQlkZXBlbmRzIG9uIENQVV9WNyAmJiAhQ1BVX1Y2CisJZGVwZW5kcyBvbiAhQ1BVX1VTRV9ET01BSU5TICYmIENQVV9WNyAmJiAhQ1BVX1Y2CiAJc2VsZWN0IEhBVkVfUFJPQ19DUFUgaWYgUFJPQ19GUwogCWRlZmF1bHQgeSBpZiBTTVAKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMgYi9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKaW5kZXggMTcwYzliYi4uZjJjZTM4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYwpAQCAtNDksNyArNDksMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV9zeW5jKHZvaWQpCiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gbDJ4MF9iYXNlOworCisjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNzUzOTcwCisJLyogd3JpdGUgdG8gYW4gdW5tbWFwcGVkIHJlZ2lzdGVyICovCisJd3JpdGVsX3JlbGF4ZWQoMCwgYmFzZSArIEwyWDBfRFVNTVlfUkVHKTsKKyNlbHNlCiAJd3JpdGVsX3JlbGF4ZWQoMCwgYmFzZSArIEwyWDBfQ0FDSEVfU1lOQyk7CisjZW5kaWYKIAljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NBQ0hFX1NZTkMsIDEpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggNTE2NDA2OS4uY2RkZDY4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMjk3LDYgKzI5NywxMiBAQAogCW1lbWJsb2NrX3Jlc2VydmUoX19wYShfc3RleHQpLCBfZW5kIC0gX3N0ZXh0KTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCWlmIChwaHlzX2luaXRyZF9zaXplICYmCisJICAgIG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChwaHlzX2luaXRyZF9zdGFydCwgcGh5c19pbml0cmRfc2l6ZSkpIHsKKwkJcHJfZXJyKCJJTklUUkQ6IDB4JTA4bHgrMHglMDhseCBvdmVybGFwcyBpbi11c2UgbWVtb3J5IHJlZ2lvbiAtIGRpc2FibGluZyBpbml0cmRcbiIsCisJCSAgICAgICBwaHlzX2luaXRyZF9zdGFydCwgcGh5c19pbml0cmRfc2l6ZSk7CisJCXBoeXNfaW5pdHJkX3N0YXJ0ID0gcGh5c19pbml0cmRfc2l6ZSA9IDA7CisJfQogCWlmIChwaHlzX2luaXRyZF9zaXplKSB7CiAJCW1lbWJsb2NrX3Jlc2VydmUocGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCmluZGV4IGJjZjc0OGQuLjIyNmUzZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCkBAIC00OTMsNiArNDkzLDkgQEAKIAkud29yZAljcHVfYXJtMTAyMF9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm0xMDIwX3N3aXRjaF9tbQogCS53b3JkCWNwdV9hcm0xMDIwX3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJYXJtMTAyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtMTAyMF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwppbmRleCBhYjdlYzI2Li44NmQ5YzJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCkBAIC00NzQsNiArNDc0LDkgQEAKIAkud29yZAljcHVfYXJtMTAyMGVfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtMTAyMGVfc3dpdGNoX21tCiAJLndvcmQJY3B1X2FybTEwMjBlX3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJYXJtMTAyMGVfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTEwMjBlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwppbmRleCA4MzFjNWU1Li44M2QzZGQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwpAQCAtNDU3LDYgKzQ1Nyw5IEBACiAJLndvcmQJY3B1X2FybTEwMjJfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtMTAyMl9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtMTAyMl9zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWFybTEwMjJfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTEwMjJfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCmluZGV4IGUzZjdlOWEuLjY4NjA0M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCkBAIC00NTIsNiArNDUyLDkgQEAKIAkud29yZAljcHVfYXJtMTAyNl9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm0xMDI2X3N3aXRjaF9tbQogCS53b3JkCWNwdV9hcm0xMDI2X3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJYXJtMTAyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtMTAyNl9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAucm9kYXRhCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwppbmRleCA2YTdiZTE4Li41Zjc5ZGM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKQEAgLTI4NCw2ICsyODQsOSBAQAogCQkud29yZAljcHVfYXJtNl9kY2FjaGVfY2xlYW5fYXJlYQogCQkud29yZAljcHVfYXJtNl9zd2l0Y2hfbW0KIAkJLndvcmQJY3B1X2FybTZfc2V0X3B0ZV9leHQKKwkJLndvcmQJMAorCQkud29yZAkwCisJCS53b3JkCTAKIAkJLnNpemUJYXJtNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtNl9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIC8qCkBAIC0zMDEsNiArMzA0LDkgQEAKIAkJLndvcmQJY3B1X2FybTdfZGNhY2hlX2NsZWFuX2FyZWEKIAkJLndvcmQJY3B1X2FybTdfc3dpdGNoX21tCiAJCS53b3JkCWNwdV9hcm03X3NldF9wdGVfZXh0CisJCS53b3JkCTAKKwkJLndvcmQJMAorCQkud29yZAkwCiAJCS5zaXplCWFybTdfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTdfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKaW5kZXggYzI4NTM5NS4uNjY1MjY2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCkBAIC0xODUsNiArMTg1LDkgQEAKIAkJLndvcmQJY3B1X2FybTcyMF9kY2FjaGVfY2xlYW5fYXJlYQogCQkud29yZAljcHVfYXJtNzIwX3N3aXRjaF9tbQogCQkud29yZAljcHVfYXJtNzIwX3NldF9wdGVfZXh0CisJCS53b3JkCTAKKwkJLndvcmQJMAorCQkud29yZAkwCiAJCS5zaXplCWFybTcyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtNzIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCQkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTc0MC5TCmluZGV4IDM4YjI3ZGMuLjZmOWQxMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03NDAuUwpAQCAtMTMwLDYgKzEzMCw5IEBACiAJLndvcmQJY3B1X2FybTc0MF9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm03NDBfc3dpdGNoX21tCiAJLndvcmQJMAkJCUAgY3B1Xypfc2V0X3B0ZQorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWFybTc0MF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtNzQwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TCmluZGV4IDBjOTc4NmQuLmU0YzE2NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMKQEAgLTcwLDYgKzcwLDkgQEAKIAkJLndvcmQJY3B1X2FybTd0ZG1pX2RjYWNoZV9jbGVhbl9hcmVhCiAJCS53b3JkCWNwdV9hcm03dGRtaV9zd2l0Y2hfbW0KIAkJLndvcmQJMAkJQCBjcHVfKl9zZXRfcHRlCisJCS53b3JkCTAKKwkJLndvcmQJMAorCQkud29yZAkwCiAJCS5zaXplCWFybTd0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm03dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwppbmRleCA2MTA5ZjI3Li4yMTk5ODBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKQEAgLTM4Nyw2ICszODcsNDAgQEAKICNlbmRpZgogCW1vdglwYywgbHIKIAorLyogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydDogdGFrZW4gZnJvbSBhcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUyAqLworLmdsb2JsCWNwdV9hcm05MjBfc3VzcGVuZF9zaXplCisuZXF1CWNwdV9hcm05MjBfc3VzcGVuZF9zaXplLCA0ICogMworI2lmZGVmIENPTkZJR19QTQorRU5UUlkoY3B1X2FybTkyMF9kb19zdXNwZW5kKQorCXN0bWZkCXNwISwge3I0IC0gcjcsIGxyfQorCW1yYwlwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgUElECisJbXJjCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI2LCBjMiwgYzAsIDAJQCBUVEIgYWRkcmVzcworCW1yYwlwMTUsIDAsIHI3LCBjMSwgYzAsIDAJQCBDb250cm9sIHJlZ2lzdGVyCisJc3RtaWEJcjAsIHtyNCAtIHI3fQorCWxkbWZkCXNwISwge3I0IC0gcjcsIHBjfQorRU5EUFJPQyhjcHVfYXJtOTIwX2RvX3N1c3BlbmQpCisKK0VOVFJZKGNwdV9hcm05MjBfZG9fcmVzdW1lKQorCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCUAgaW52YWxpZGF0ZSBJK0QgVExCcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJQCBpbnZhbGlkYXRlIEkrRCBjYWNoZXMKKwlsZG1pYQlyMCwge3I0IC0gcjd9CisJbWNyCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBQSUQKKwltY3IJcDE1LCAwLCByNSwgYzMsIGMwLCAwCUAgRG9tYWluIElECisJbWNyCXAxNSwgMCwgcjYsIGMyLCBjMCwgMAlAIFRUQiBhZGRyZXNzCisJbW92CXIwLCByNwkJCUAgY29udHJvbCByZWdpc3RlcgorCW1vdglyMiwgcjYsIGxzciAjMTQJCUAgZ2V0IFRUQjAgYmFzZQorCW1vdglyMiwgcjIsIGxzbCAjMTQKKwlsZHIJcjMsID1QTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJICAgICBQTURfU0VDVF9DQUNIRUFCTEUgfCBQTURfQklUNCB8IFBNRF9TRUNUX0FQX1dSSVRFCisJYgljcHVfcmVzdW1lX21tdQorRU5EUFJPQyhjcHVfYXJtOTIwX2RvX3Jlc3VtZSkKKyNlbHNlCisjZGVmaW5lIGNwdV9hcm05MjBfZG9fc3VzcGVuZAkwCisjZGVmaW5lIGNwdV9hcm05MjBfZG9fcmVzdW1lCTAKKyNlbmRpZgorCiAJX19DUFVJTklUCiAKIAkudHlwZQlfX2FybTkyMF9zZXR1cCwgI2Z1bmN0aW9uCkBAIC00MzIsNiArNDY2LDkgQEAKIAkud29yZAljcHVfYXJtOTIwX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyMF9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtOTIwX3NldF9wdGVfZXh0CisJLndvcmQJY3B1X2FybTkyMF9zdXNwZW5kX3NpemUKKwkud29yZAljcHVfYXJtOTIwX2RvX3N1c3BlbmQKKwkud29yZAljcHVfYXJtOTIwX2RvX3Jlc3VtZQogCS5zaXplCWFybTkyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKaW5kZXggYmIyZjBmNC4uMzYxNTRiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCkBAIC00MzYsNiArNDM2LDkgQEAKIAkud29yZAljcHVfYXJtOTIyX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyMl9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtOTIyX3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJYXJtOTIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm05MjJfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwppbmRleCBjMTNlMDFhLi44OWM1ZTAwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCkBAIC01MDMsNiArNTAzLDkgQEAKIAkud29yZAljcHVfYXJtOTI1X2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyNV9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtOTI1X3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJYXJtOTI1X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm05MjVfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwppbmRleCA0MmViNDMxLi42YTRiZGIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKQEAgLTQwMSw2ICs0MDEsNDAgQEAKICNlbmRpZgogCW1vdglwYywgbHIKIAorLyogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydDogdGFrZW4gZnJvbSBhcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUyAqLworLmdsb2JsCWNwdV9hcm05MjZfc3VzcGVuZF9zaXplCisuZXF1CWNwdV9hcm05MjZfc3VzcGVuZF9zaXplLCA0ICogMworI2lmZGVmIENPTkZJR19QTQorRU5UUlkoY3B1X2FybTkyNl9kb19zdXNwZW5kKQorCXN0bWZkCXNwISwge3I0IC0gcjcsIGxyfQorCW1yYwlwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgUElECisJbXJjCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI2LCBjMiwgYzAsIDAJQCBUVEIgYWRkcmVzcworCW1yYwlwMTUsIDAsIHI3LCBjMSwgYzAsIDAJQCBDb250cm9sIHJlZ2lzdGVyCisJc3RtaWEJcjAsIHtyNCAtIHI3fQorCWxkbWZkCXNwISwge3I0IC0gcjcsIHBjfQorRU5EUFJPQyhjcHVfYXJtOTI2X2RvX3N1c3BlbmQpCisKK0VOVFJZKGNwdV9hcm05MjZfZG9fcmVzdW1lKQorCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCUAgaW52YWxpZGF0ZSBJK0QgVExCcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJQCBpbnZhbGlkYXRlIEkrRCBjYWNoZXMKKwlsZG1pYQlyMCwge3I0IC0gcjd9CisJbWNyCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBQSUQKKwltY3IJcDE1LCAwLCByNSwgYzMsIGMwLCAwCUAgRG9tYWluIElECisJbWNyCXAxNSwgMCwgcjYsIGMyLCBjMCwgMAlAIFRUQiBhZGRyZXNzCisJbW92CXIwLCByNwkJCUAgY29udHJvbCByZWdpc3RlcgorCW1vdglyMiwgcjYsIGxzciAjMTQJCUAgZ2V0IFRUQjAgYmFzZQorCW1vdglyMiwgcjIsIGxzbCAjMTQKKwlsZHIJcjMsID1QTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJICAgICBQTURfU0VDVF9DQUNIRUFCTEUgfCBQTURfQklUNCB8IFBNRF9TRUNUX0FQX1dSSVRFCisJYgljcHVfcmVzdW1lX21tdQorRU5EUFJPQyhjcHVfYXJtOTI2X2RvX3Jlc3VtZSkKKyNlbHNlCisjZGVmaW5lIGNwdV9hcm05MjZfZG9fc3VzcGVuZAkwCisjZGVmaW5lIGNwdV9hcm05MjZfZG9fcmVzdW1lCTAKKyNlbmRpZgorCiAJX19DUFVJTklUCiAKIAkudHlwZQlfX2FybTkyNl9zZXR1cCwgI2Z1bmN0aW9uCkBAIC00NTYsNiArNDkwLDkgQEAKIAkud29yZAljcHVfYXJtOTI2X2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyNl9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtOTI2X3NldF9wdGVfZXh0CisJLndvcmQJY3B1X2FybTkyNl9zdXNwZW5kX3NpemUKKwkud29yZAljcHVfYXJtOTI2X2RvX3N1c3BlbmQKKwkud29yZAljcHVfYXJtOTI2X2RvX3Jlc3VtZQogCS5zaXplCWFybTkyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKaW5kZXggN2IxMWNkYi4uMjZhZWEzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCkBAIC0zNjMsNiArMzYzLDkgQEAKIAkud29yZAljcHVfYXJtOTQwX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTk0MF9zd2l0Y2hfbW0KIAkud29yZAkwCQlAIGNwdV8qX3NldF9wdGUKKwkud29yZAkwCisJLndvcmQJMAorCS53b3JkCTAKIAkuc2l6ZQlhcm05NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTk0MF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCmluZGV4IDFhNWJiZjA4Li44MDYzMzQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKQEAgLTQxOSw2ICs0MTksOSBAQAogCS53b3JkCWNwdV9hcm05NDZfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtOTQ2X3N3aXRjaF9tbQogCS53b3JkCTAJCUAgY3B1Xypfc2V0X3B0ZQorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWFybTk0Nl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTQ2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TCmluZGV4IGRiNjdlMzEuLjdiN2ViZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMKQEAgLTcwLDYgKzcwLDkgQEAKIAkJLndvcmQJY3B1X2FybTl0ZG1pX2RjYWNoZV9jbGVhbl9hcmVhCiAJCS53b3JkCWNwdV9hcm05dGRtaV9zd2l0Y2hfbW0KIAkJLndvcmQJMAkJQCBjcHVfKl9zZXRfcHRlCisJCS53b3JkCTAKKwkJLndvcmQJMAorCQkud29yZAkwCiAJCS5zaXplCWFybTl0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm05dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMKaW5kZXggN2M5YWQ2Mi4uZmMyYTRhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUwpAQCAtMTk1LDYgKzE5NSw5IEBACiAJLndvcmQJY3B1X2ZhNTI2X2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2ZhNTI2X3N3aXRjaF9tbQogCS53b3JkCWNwdV9mYTUyNl9zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBmYTUyNl9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUyBiL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUwppbmRleCBiNDU5N2VkLi5kMzg4M2VlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCkBAIC01NTQsNiArNTU0LDkgQEAKIAkud29yZAljcHVfZmVyb2Nlb25fZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfZmVyb2Nlb25fc3dpdGNoX21tCiAJLndvcmQJY3B1X2Zlcm9jZW9uX3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJZmVyb2Nlb25fcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGZlcm9jZW9uX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKaW5kZXggNDQ1OGVlNi4uOWQ0ZjJhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUworKysgYi9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCkBAIC0zODgsNiArMzg4LDkgQEAKIAkud29yZAljcHVfbW9oYXdrX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X21vaGF3a19zd2l0Y2hfbW0KIAkud29yZAljcHVfbW9oYXdrX3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJbW9oYXdrX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBtb2hhd2tfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKaW5kZXggNWFhOGQ1OS4uNDZmMDllZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUwpAQCAtMjAzLDYgKzIwMyw5IEBACiAJLndvcmQJY3B1X3NhMTEwX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X3NhMTEwX3N3aXRjaF9tbQogCS53b3JkCWNwdV9zYTExMF9zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCXNhMTEwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBzYTExMF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCmluZGV4IDJhYzRlNmYuLjc0NDgzZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUwpAQCAtMTY5LDYgKzE2OSw0MiBAQAogI2VuZGlmCiAJbW92CXBjLCBscgogCisuZ2xvYmwJY3B1X3NhMTEwMF9zdXNwZW5kX3NpemUKKy5lcXUJY3B1X3NhMTEwMF9zdXNwZW5kX3NpemUsIDQqNAorI2lmZGVmIENPTkZJR19QTQorRU5UUlkoY3B1X3NhMTEwMF9kb19zdXNwZW5kKQorCXN0bWZkCXNwISwge3I0IC0gcjcsIGxyfQorCW1yYwlwMTUsIDAsIHI0LCBjMywgYzAsIDAJCUAgZG9tYWluIElECisJbXJjCXAxNSwgMCwgcjUsIGMyLCBjMCwgMAkJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIGFkZHIKKwltcmMJcDE1LCAwLCByNiwgYzEzLCBjMCwgMAkJQCBQSUQKKwltcmMJcDE1LCAwLCByNywgYzEsIGMwLCAwCQlAIGNvbnRyb2wgcmVnCisJc3RtaWEJcjAsIHtyNCAtIHI3fQkJCUAgc3RvcmUgY3AgcmVncworCWxkbWZkCXNwISwge3I0IC0gcjcsIHBjfQorRU5EUFJPQyhjcHVfc2ExMTAwX2RvX3N1c3BlbmQpCisKK0VOVFJZKGNwdV9zYTExMDBfZG9fcmVzdW1lKQorCWxkbWlhCXIwLCB7cjQgLSByN30JCQlAIGxvYWQgY3AgcmVncworCW1vdglyMSwgIzAKKwltY3IJcDE1LCAwLCByMSwgYzgsIGM3LCAwCQlAIGZsdXNoIEkrRCBUTEJzCisJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQCBmbHVzaCBJJkQgY2FjaGUKKwltY3IJcDE1LCAwLCByMSwgYzksIGMwLCAwCQlAIGludmFsaWRhdGUgUkIKKwltY3IJcDE1LCAwLCByMSwgYzksIGMwLCA1CQlAIGFsbG93IHVzZXIgc3BhY2UgdG8gdXNlIFJCCisKKwltY3IJcDE1LCAwLCByNCwgYzMsIGMwLCAwCQlAIGRvbWFpbiBJRAorCW1jcglwMTUsIDAsIHI1LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCisJbWNyCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJCUAgUElECisJbW92CXIwLCByNwkJCQlAIGNvbnRyb2wgcmVnaXN0ZXIKKwltb3YJcjIsIHI1LCBsc3IgIzE0CQkJQCBnZXQgVFRCMCBiYXNlCisJbW92CXIyLCByMiwgbHNsICMxNAorCWxkcglyMywgPVBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQkgICAgIFBNRF9TRUNUX0NBQ0hFQUJMRSB8IFBNRF9TRUNUX0FQX1dSSVRFCisJYgljcHVfcmVzdW1lX21tdQorRU5EUFJPQyhjcHVfc2ExMTAwX2RvX3Jlc3VtZSkKKyNlbHNlCisjZGVmaW5lIGNwdV9zYTExMDBfZG9fc3VzcGVuZAkwCisjZGVmaW5lIGNwdV9zYTExMDBfZG9fcmVzdW1lCTAKKyNlbmRpZgorCiAJX19DUFVJTklUCiAKIAkudHlwZQlfX3NhMTEwMF9zZXR1cCwgI2Z1bmN0aW9uCkBAIC0yMTgsNiArMjU0LDkgQEAKIAkud29yZAljcHVfc2ExMTAwX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X3NhMTEwMF9zd2l0Y2hfbW0KIAkud29yZAljcHVfc2ExMTAwX3NldF9wdGVfZXh0CisJLndvcmQJY3B1X3NhMTEwMF9zdXNwZW5kX3NpemUKKwkud29yZAljcHVfc2ExMTAwX2RvX3N1c3BlbmQKKwkud29yZAljcHVfc2ExMTAwX2RvX3Jlc3VtZQogCS5zaXplCXNhMTEwMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gc2ExMTAwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCmluZGV4IDU5YTdlMWYuLjgzMmI2YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKQEAgLTEyMSw2ICsxMjEsNTMgQEAKICNlbmRpZgogCW1vdglwYywgbHIKIAorLyogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydDogdGFrZW4gZnJvbSBhcmNoL2FybS9tYWNoLXMzYzY0eHgvc2xlZXAuUyAqLworLmdsb2JsCWNwdV92Nl9zdXNwZW5kX3NpemUKKy5lcXUJY3B1X3Y2X3N1c3BlbmRfc2l6ZSwgNCAqIDgKKyNpZmRlZiBDT05GSUdfUE0KK0VOVFJZKGNwdV92Nl9kb19zdXNwZW5kKQorCXN0bWZkCXNwISwge3I0IC0gcjExLCBscn0KKwltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIEZDU0UvUElECisJbXJjCXAxNSwgMCwgcjUsIGMxMywgYzAsIDEJQCBDb250ZXh0IElECisJbXJjCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJQCBUcmFuc2xhdGlvbiB0YWJsZSBiYXNlIDAKKwltcmMJcDE1LCAwLCByOCwgYzIsIGMwLCAxCUAgVHJhbnNsYXRpb24gdGFibGUgYmFzZSAxCisJbXJjCXAxNSwgMCwgcjksIGMxLCBjMCwgMQlAIGF1eGlsbGFyeSBjb250cm9sIHJlZ2lzdGVyCisJbXJjCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDIJQCBjby1wcm9jZXNzb3IgYWNjZXNzIGNvbnRyb2wKKwltcmMJcDE1LCAwLCByMTEsIGMxLCBjMCwgMAlAIGNvbnRyb2wgcmVnaXN0ZXIKKwlzdG1pYQlyMCwge3I0IC0gcjExfQorCWxkbWZkCXNwISwge3I0LSByMTEsIHBjfQorRU5EUFJPQyhjcHVfdjZfZG9fc3VzcGVuZCkKKworRU5UUlkoY3B1X3Y2X2RvX3Jlc3VtZSkKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTQsIDAJQCBjbGVhbitpbnZhbGlkYXRlIEQgY2FjaGUKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTUsIDAJQCBjbGVhbitpbnZhbGlkYXRlIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwlsZG1pYQlyMCwge3I0IC0gcjExfQorCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgRkNTRS9QSUQKKwltY3IJcDE1LCAwLCByNSwgYzEzLCBjMCwgMQlAIENvbnRleHQgSUQKKwltY3IJcDE1LCAwLCByNiwgYzMsIGMwLCAwCUAgRG9tYWluIElECisJbWNyCXAxNSwgMCwgcjcsIGMyLCBjMCwgMAlAIFRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgMAorCW1jcglwMTUsIDAsIHI4LCBjMiwgYzAsIDEJQCBUcmFuc2xhdGlvbiB0YWJsZSBiYXNlIDEKKwltY3IJcDE1LCAwLCByOSwgYzEsIGMwLCAxCUAgYXV4aWxsYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKKwltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMglAIGNvLXByb2Nlc3NvciBhY2Nlc3MgY29udHJvbAorCW1jcglwMTUsIDAsIGlwLCBjMiwgYzAsIDIJQCBUVEIgY29udHJvbCByZWdpc3RlcgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDQJQCBJU0IKKwltb3YJcjAsIHIxMQkJCUAgY29udHJvbCByZWdpc3RlcgorCW1vdglyMiwgcjcsIGxzciAjMTQJCUAgZ2V0IFRUQjAgYmFzZQorCW1vdglyMiwgcjIsIGxzbCAjMTQKKwlsZHIJcjMsIGNwdV9yZXN1bWVfbDFfZmxhZ3MKKwliCWNwdV9yZXN1bWVfbW11CitFTkRQUk9DKGNwdV92Nl9kb19yZXN1bWUpCitjcHVfcmVzdW1lX2wxX2ZsYWdzOgorCUFMVF9TTVAoLmxvbmcgUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX0FQX1dSSVRFIHwgUE1EX0ZMQUdTX1NNUCkKKwlBTFRfVVAoLmxvbmcgIFBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9BUF9XUklURSB8IFBNRF9GTEFHU19VUCkKKyNlbHNlCisjZGVmaW5lIGNwdV92Nl9kb19zdXNwZW5kIDAKKyNkZWZpbmUgY3B1X3Y2X2RvX3Jlc3VtZSAwCisjZW5kaWYKIAogCiAJLnR5cGUJY3B1X3Y2X25hbWUsICNvYmplY3QKQEAgLTIwNiw2ICsyNTMsOSBAQAogCS53b3JkCWNwdV92Nl9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV92Nl9zd2l0Y2hfbW0KIAkud29yZAljcHVfdjZfc2V0X3B0ZV9leHQKKwkud29yZAljcHVfdjZfc3VzcGVuZF9zaXplCisJLndvcmQJY3B1X3Y2X2RvX3N1c3BlbmQKKwkud29yZAljcHVfdjZfZG9fcmVzdW1lCiAJLnNpemUJdjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHY2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCmluZGV4IDBjMTE3MmIuLjI2MmZhODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKQEAgLTEwOCwxMCArMTA4LDE2IEBACiAjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczCiAJbWNyCXAxNSwgMCwgcjIsIGM3LCBjNSwgNgkJQCBmbHVzaCBCVEFDL0JUQgogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNzU0MzIyCisJZHNiCisjZW5kaWYKIAltY3IJcDE1LCAwLCByMiwgYzEzLCBjMCwgMQkJQCBzZXQgcmVzZXJ2ZWQgY29udGV4dCBJRAogCWlzYgogMToJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBzZXQgVFRCIDAKIAlpc2IKKyNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV83NTQzMjIKKwlkc2IKKyNlbmRpZgogCW1jcglwMTUsIDAsIHIxLCBjMTMsIGMwLCAxCQlAIHNldCBjb250ZXh0IElECiAJaXNiCiAjZW5kaWYKQEAgLTE3MSw2ICsxNzcsODcgQEAKIAkuYXNjaWkJIkFSTXY3IFByb2Nlc3NvciIKIAkuYWxpZ24KIAorCS8qCisJICogTWVtb3J5IHJlZ2lvbiBhdHRyaWJ1dGVzIHdpdGggU0NUTFIuVFJFPTEKKwkgKgorCSAqICAgbiA9IFRFWFswXSxDLEIKKwkgKiAgIFRSID0gUFJSUlsybisxOjJuXQkJLSBtZW1vcnkgdHlwZQorCSAqICAgSVIgPSBOTVJSWzJuKzE6Mm5dCQktIGlubmVyIGNhY2hlYWJsZSBwcm9wZXJ0eQorCSAqICAgT1IgPSBOTVJSWzJuKzE3OjJuKzE2XQktIG91dGVyIGNhY2hlYWJsZSBwcm9wZXJ0eQorCSAqCisJICoJCQluCVRSCUlSCU9SCisJICogICBVTkNBQ0hFRAkJMDAwCTAwCisJICogICBCVUZGRVJBQkxFCQkwMDEJMTAJMDAJMDAKKwkgKiAgIFdSSVRFVEhST1VHSAkwMTAJMTAJMTAJMTAKKwkgKiAgIFdSSVRFQkFDSwkJMDExCTEwCTExCTExCisJICogICByZXNlcnZlZAkJMTEwCisJICogICBXUklURUFMTE9DCQkxMTEJMTAJMDEJMDEKKwkgKiAgIERFVl9TSEFSRUQJCTEwMAkwMQorCSAqICAgREVWX05PTlNIQVJFRAkxMDAJMDEKKwkgKiAgIERFVl9XQwkJMDAxCTEwCisJICogICBERVZfQ0FDSEVECQkwMTEJMTAKKwkgKgorCSAqIE90aGVyIGF0dHJpYnV0ZXM6CisJICoKKwkgKiAgIERTMCA9IFBSUlJbMTZdID0gMAkJLSBkZXZpY2Ugc2hhcmVhYmxlIHByb3BlcnR5CisJICogICBEUzEgPSBQUlJSWzE3XSA9IDEJCS0gZGV2aWNlIHNoYXJlYWJsZSBwcm9wZXJ0eQorCSAqICAgTlMwID0gUFJSUlsxOF0gPSAwCQktIG5vcm1hbCBzaGFyZWFibGUgcHJvcGVydHkKKwkgKiAgIE5TMSA9IFBSUlJbMTldID0gMQkJLSBub3JtYWwgc2hhcmVhYmxlIHByb3BlcnR5CisJICogICBOT1MgPSBQUlJSWzI0K25dID0gMQktIG5vdCBvdXRlciBzaGFyZWFibGUKKwkgKi8KKy5lcXUJUFJSUiwJMHhmZjBhODFhOAorLmVxdQlOTVJSLAkweDQwZTA0MGUwCisKKy8qIFN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ6IGRlcml2ZWQgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYyMTAvc2xlZXAuUyAqLworLmdsb2JsCWNwdV92N19zdXNwZW5kX3NpemUKKy5lcXUJY3B1X3Y3X3N1c3BlbmRfc2l6ZSwgNCAqIDgKKyNpZmRlZiBDT05GSUdfUE0KK0VOVFJZKGNwdV92N19kb19zdXNwZW5kKQorCXN0bWZkCXNwISwge3I0IC0gcjExLCBscn0KKwltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIEZDU0UvUElECisJbXJjCXAxNSwgMCwgcjUsIGMxMywgYzAsIDEJQCBDb250ZXh0IElECisJbXJjCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJQCBUVEIgMAorCW1yYwlwMTUsIDAsIHI4LCBjMiwgYzAsIDEJQCBUVEIgMQorCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDAJQCBDb250cm9sIHJlZ2lzdGVyCisJbXJjCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDEJQCBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgorCW1yYwlwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCUAgQ28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9sCisJc3RtaWEJcjAsIHtyNCAtIHIxMX0KKwlsZG1mZAlzcCEsIHtyNCAtIHIxMSwgcGN9CitFTkRQUk9DKGNwdV92N19kb19zdXNwZW5kKQorCitFTlRSWShjcHVfdjdfZG9fcmVzdW1lKQorCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCUAgaW52YWxpZGF0ZSBUTEJzCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSSBjYWNoZQorCWxkbWlhCXIwLCB7cjQgLSByMTF9CisJbWNyCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBGQ1NFL1BJRAorCW1jcglwMTUsIDAsIHI1LCBjMTMsIGMwLCAxCUAgQ29udGV4dCBJRAorCW1jcglwMTUsIDAsIHI2LCBjMywgYzAsIDAJQCBEb21haW4gSUQKKwltY3IJcDE1LCAwLCByNywgYzIsIGMwLCAwCUAgVFRCIDAKKwltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAxCUAgVFRCIDEKKwltY3IJcDE1LCAwLCBpcCwgYzIsIGMwLCAyCUAgVFRCIGNvbnRyb2wgcmVnaXN0ZXIKKwltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQlAIEF1eGlsbGFyeSBjb250cm9sIHJlZ2lzdGVyCisJbWNyCXAxNSwgMCwgcjExLCBjMSwgYzAsIDIJQCBDby1wcm9jZXNzb3IgYWNjZXNzIGNvbnRyb2wKKwlsZHIJcjQsID1QUlJSCQlAIFBSUlIKKwlsZHIJcjUsID1OTVJSCQlAIE5NUlIKKwltY3IJcDE1LCAwLCByNCwgYzEwLCBjMiwgMAlAIHdyaXRlIFBSUlIKKwltY3IJcDE1LCAwLCByNSwgYzEwLCBjMiwgMQlAIHdyaXRlIE5NUlIKKwlpc2IKKwltb3YJcjAsIHI5CQkJQCBjb250cm9sIHJlZ2lzdGVyCisJbW92CXIyLCByNywgbHNyICMxNAkJQCBnZXQgVFRCMCBiYXNlCisJbW92CXIyLCByMiwgbHNsICMxNAorCWxkcglyMywgY3B1X3Jlc3VtZV9sMV9mbGFncworCWIJY3B1X3Jlc3VtZV9tbXUKK0VORFBST0MoY3B1X3Y3X2RvX3Jlc3VtZSkKK2NwdV9yZXN1bWVfbDFfZmxhZ3M6CisJQUxUX1NNUCgubG9uZyBQTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQVBfV1JJVEUgfCBQTURfRkxBR1NfU01QKQorCUFMVF9VUCgubG9uZyAgUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX0FQX1dSSVRFIHwgUE1EX0ZMQUdTX1VQKQorI2Vsc2UKKyNkZWZpbmUgY3B1X3Y3X2RvX3N1c3BlbmQJMAorI2RlZmluZSBjcHVfdjdfZG9fcmVzdW1lCTAKKyNlbmRpZgorCiAJX19DUFVJTklUCiAKIC8qCkBAIC0yNjQsNiArMzUxLDEyIEBACiAJb3JyZXEJcjEwLCByMTAsICMxIDw8IDYJCUAgc2V0IGJpdCAjNgogCW1jcmVxCXAxNSwgMCwgcjEwLCBjMTUsIGMwLCAxCQlAIHdyaXRlIGRpYWdub3N0aWMgcmVnaXN0ZXIKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzc1MTQ3MgorCWNtcAlyNiwgIzB4MzAJCQlAIHByZXNlbnQgcHJpb3IgdG8gcjNwMAorCW1yY2x0CXAxNSwgMCwgcjEwLCBjMTUsIGMwLCAxCQlAIHJlYWQgZGlhZ25vc3RpYyByZWdpc3RlcgorCW9ycmx0CXIxMCwgcjEwLCAjMSA8PCAxMQkJQCBzZXQgYml0ICMxMQorCW1jcmx0CXAxNSwgMCwgcjEwLCBjMTUsIGMwLCAxCQlAIHdyaXRlIGRpYWdub3N0aWMgcmVnaXN0ZXIKKyNlbmRpZgogCiAzOgltb3YJcjEwLCAjMAogI2lmZGVmIEhBUlZBUkRfQ0FDSEUKQEAgLTI3NiwzNiArMzY5LDggQEAKIAlBTFRfU01QKG9ycglyNCwgcjQsICNUVEJfRkxBR1NfU01QKQogCUFMVF9VUChvcnIJcjQsIHI0LCAjVFRCX0ZMQUdTX1VQKQogCW1jcglwMTUsIDAsIHI0LCBjMiwgYzAsIDEJCUAgbG9hZCBUVEIxCi0JLyoKLQkgKiBNZW1vcnkgcmVnaW9uIGF0dHJpYnV0ZXMgd2l0aCBTQ1RMUi5UUkU9MQotCSAqCi0JICogICBuID0gVEVYWzBdLEMsQgotCSAqICAgVFIgPSBQUlJSWzJuKzE6Mm5dCQktIG1lbW9yeSB0eXBlCi0JICogICBJUiA9IE5NUlJbMm4rMToybl0JCS0gaW5uZXIgY2FjaGVhYmxlIHByb3BlcnR5Ci0JICogICBPUiA9IE5NUlJbMm4rMTc6Mm4rMTZdCS0gb3V0ZXIgY2FjaGVhYmxlIHByb3BlcnR5Ci0JICoKLQkgKgkJCW4JVFIJSVIJT1IKLQkgKiAgIFVOQ0FDSEVECQkwMDAJMDAKLQkgKiAgIEJVRkZFUkFCTEUJCTAwMQkxMAkwMAkwMAotCSAqICAgV1JJVEVUSFJPVUdICTAxMAkxMAkxMAkxMAotCSAqICAgV1JJVEVCQUNLCQkwMTEJMTAJMTEJMTEKLQkgKiAgIHJlc2VydmVkCQkxMTAKLQkgKiAgIFdSSVRFQUxMT0MJCTExMQkxMAkwMQkwMQotCSAqICAgREVWX1NIQVJFRAkJMTAwCTAxCi0JICogICBERVZfTk9OU0hBUkVECTEwMAkwMQotCSAqICAgREVWX1dDCQkwMDEJMTAKLQkgKiAgIERFVl9DQUNIRUQJCTAxMQkxMAotCSAqCi0JICogT3RoZXIgYXR0cmlidXRlczoKLQkgKgotCSAqICAgRFMwID0gUFJSUlsxNl0gPSAwCQktIGRldmljZSBzaGFyZWFibGUgcHJvcGVydHkKLQkgKiAgIERTMSA9IFBSUlJbMTddID0gMQkJLSBkZXZpY2Ugc2hhcmVhYmxlIHByb3BlcnR5Ci0JICogICBOUzAgPSBQUlJSWzE4XSA9IDAJCS0gbm9ybWFsIHNoYXJlYWJsZSBwcm9wZXJ0eQotCSAqICAgTlMxID0gUFJSUlsxOV0gPSAxCQktIG5vcm1hbCBzaGFyZWFibGUgcHJvcGVydHkKLQkgKiAgIE5PUyA9IFBSUlJbMjQrbl0gPSAxCS0gbm90IG91dGVyIHNoYXJlYWJsZQotCSAqLwotCWxkcglyNSwgPTB4ZmYwYTgxYTgJCQlAIFBSUlIKLQlsZHIJcjYsID0weDQwZTA0MGUwCQkJQCBOTVJSCisJbGRyCXI1LCA9UFJSUgkJCUAgUFJSUgorCWxkcglyNiwgPU5NUlIJCQlAIE5NUlIKIAltY3IJcDE1LCAwLCByNSwgYzEwLCBjMiwgMAkJQCB3cml0ZSBQUlJSCiAJbWNyCXAxNSwgMCwgcjYsIGMxMCwgYzIsIDEJCUAgd3JpdGUgTk1SUgogI2VuZGlmCkBAIC0zNTEsNiArNDE2LDkgQEAKIAkud29yZAljcHVfdjdfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfdjdfc3dpdGNoX21tCiAJLndvcmQJY3B1X3Y3X3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJdjdfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHY3X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwppbmRleCBlYzI2MzU1Li42M2Q4YjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwpAQCAtNDEzLDkgKzQxMyw1MiBAQAogCW1vdglwYywgbHIKIAogCS5sdG9yZwotCiAJLmFsaWduCiAKKy5nbG9ibAljcHVfeHNjM19zdXNwZW5kX3NpemUKKy5lcXUJY3B1X3hzYzNfc3VzcGVuZF9zaXplLCA0ICogOAorI2lmZGVmIENPTkZJR19QTQorRU5UUlkoY3B1X3hzYzNfZG9fc3VzcGVuZCkKKwlzdG1mZAlzcCEsIHtyNCAtIHIxMCwgbHJ9CisJbXJjCXAxNCwgMCwgcjQsIGM2LCBjMCwgMAlAIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGZvciB0dXJibyBtb2RlCisJbXJjCXAxNSwgMCwgcjUsIGMxNSwgYzEsIDAJQCBDUCBhY2Nlc3MgcmVnCisJbXJjCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJQCBQSUQKKwltcmMgCXAxNSwgMCwgcjcsIGMzLCBjMCwgMAlAIGRvbWFpbiBJRAorCW1yYyAJcDE1LCAwLCByOCwgYzIsIGMwLCAwCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCisJbXJjCXAxNSwgMCwgcjksIGMxLCBjMCwgMQlAIGF1eGlsaWFyeSBjb250cm9sIHJlZworCW1yYyAJcDE1LCAwLCByMTAsIGMxLCBjMCwgMAlAIGNvbnRyb2wgcmVnCisJYmljCXI0LCByNCwgIzIJCUAgY2xlYXIgZnJlcXVlbmN5IGNoYW5nZSBiaXQKKwlzdG1pYQlyMCwge3IxLCByNCAtIHIxMH0JQCBzdG9yZSB2OnAgb2Zmc2V0ICsgY3AgcmVncworCWxkbWlhCXNwISwge3I0IC0gcjEwLCBwY30KK0VORFBST0MoY3B1X3hzYzNfZG9fc3VzcGVuZCkKKworRU5UUlkoY3B1X3hzYzNfZG9fcmVzdW1lKQorCWxkbWlhCXIwLCB7cjEsIHI0IC0gcjEwfQlAIGxvYWQgdjpwIG9mZnNldCArIGNwIHJlZ3MKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAlAIGludmFsaWRhdGUgSSAmIEQgY2FjaGVzLCBCVEIKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAlAIGRyYWluIHdyaXRlICgmZmlsbCkgYnVmZmVyCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgNAlAIGZsdXNoIHByZWZldGNoIGJ1ZmZlcgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltY3IJcDE0LCAwLCByNCwgYzYsIGMwLCAwCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgdHVyYm8gbW9kZS4KKwltY3IJcDE1LCAwLCByNSwgYzE1LCBjMSwgMAlAIENQIGFjY2VzcyByZWcKKwltY3IJcDE1LCAwLCByNiwgYzEzLCBjMCwgMAlAIFBJRAorCW1jcglwMTUsIDAsIHI3LCBjMywgYzAsIDAJQCBkb21haW4gSUQKKwltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAwCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCisJbWNyCXAxNSwgMCwgcjksIGMxLCBjMCwgMQlAIGF1eGlsaWFyeSBjb250cm9sIHJlZworCisJQCB0ZW1wb3JhcmlseSBtYXAgcmVzdW1lX3R1cm5fb25fbW11IGludG8gdGhlIHBhZ2UgdGFibGUsCisJQCBvdGhlcndpc2UgcHJlZmV0Y2ggYWJvcnQgb2NjdXJzIGFmdGVyIE1NVSBpcyB0dXJuZWQgb24KKwltb3YJcjAsIHIxMAkJCUAgY29udHJvbCByZWdpc3RlcgorCW1vdglyMiwgcjgsIGxzciAjMTQJCUAgZ2V0IFRUQjAgYmFzZQorCW1vdglyMiwgcjIsIGxzbCAjMTQKKwlsZHIJcjMsID0weDU0MmUJCUAgc2VjdGlvbiBmbGFncworCWIJY3B1X3Jlc3VtZV9tbXUKK0VORFBST0MoY3B1X3hzYzNfZG9fcmVzdW1lKQorI2Vsc2UKKyNkZWZpbmUgY3B1X3hzYzNfZG9fc3VzcGVuZAkwCisjZGVmaW5lIGNwdV94c2MzX2RvX3Jlc3VtZQkwCisjZW5kaWYKKwogCV9fQ1BVSU5JVAogCiAJLnR5cGUJX194c2MzX3NldHVwLCAjZnVuY3Rpb24KQEAgLTQ3Niw2ICs1MTksOSBAQAogCS53b3JkCWNwdV94c2MzX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X3hzYzNfc3dpdGNoX21tCiAJLndvcmQJY3B1X3hzYzNfc2V0X3B0ZV9leHQKKwkud29yZAljcHVfeHNjM19zdXNwZW5kX3NpemUKKwkud29yZAljcHVfeHNjM19kb19zdXNwZW5kCisJLndvcmQJY3B1X3hzYzNfZG9fcmVzdW1lCiAJLnNpemUJeHNjM19wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0geHNjM19wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IDVhMzdjNWUuLjA4NjAzOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpAQCAtNTEzLDExICs1MTMsNDkgQEAKIAl4c2NhbGVfc2V0X3B0ZV9leHRfZXBpbG9ndWUKIAltb3YJcGMsIGxyCiAKLQogCS5sdG9yZwotCiAJLmFsaWduCiAKKy5nbG9ibAljcHVfeHNjYWxlX3N1c3BlbmRfc2l6ZQorLmVxdQljcHVfeHNjYWxlX3N1c3BlbmRfc2l6ZSwgNCAqIDcKKyNpZmRlZiBDT05GSUdfUE0KK0VOVFJZKGNwdV94c2NhbGVfZG9fc3VzcGVuZCkKKwlzdG1mZAlzcCEsIHtyNCAtIHIxMCwgbHJ9CisJbXJjCXAxNCwgMCwgcjQsIGM2LCBjMCwgMAlAIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGZvciB0dXJibyBtb2RlCisJbXJjCXAxNSwgMCwgcjUsIGMxNSwgYzEsIDAJQCBDUCBhY2Nlc3MgcmVnCisJbXJjCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJQCBQSUQKKwltcmMJcDE1LCAwLCByNywgYzMsIGMwLCAwCUAgZG9tYWluIElECisJbXJjCXAxNSwgMCwgcjgsIGMyLCBjMCwgMAlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcgorCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzEsIDAJQCBhdXhpbGlhcnkgY29udHJvbCByZWcKKwltcmMJcDE1LCAwLCByMTAsIGMxLCBjMCwgMAlAIGNvbnRyb2wgcmVnCisJYmljCXI0LCByNCwgIzIJCUAgY2xlYXIgZnJlcXVlbmN5IGNoYW5nZSBiaXQKKwlzdG1pYQlyMCwge3I0IC0gcjEwfQkJQCBzdG9yZSBjcCByZWdzCisJbGRtZmQJc3AhLCB7cjQgLSByMTAsIHBjfQorRU5EUFJPQyhjcHVfeHNjYWxlX2RvX3N1c3BlbmQpCisKK0VOVFJZKGNwdV94c2NhbGVfZG9fcmVzdW1lKQorCWxkbWlhCXIwLCB7cjQgLSByMTB9CQlAIGxvYWQgY3AgcmVncworCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAlAIGludmFsaWRhdGUgSSAmIEQgY2FjaGVzLCBCVEIKKwltY3IJcDE0LCAwLCByNCwgYzYsIGMwLCAwCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgdHVyYm8gbW9kZS4KKwltY3IJcDE1LCAwLCByNSwgYzE1LCBjMSwgMAlAIENQIGFjY2VzcyByZWcKKwltY3IJcDE1LCAwLCByNiwgYzEzLCBjMCwgMAlAIFBJRAorCW1jcglwMTUsIDAsIHI3LCBjMywgYzAsIDAJQCBkb21haW4gSUQKKwltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAwCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCisJbWNyCXAxNSwgMCwgcjksIGMxLCBjMSwgMAlAIGF1eGlsaWFyeSBjb250cm9sIHJlZworCW1vdglyMCwgcjEwCQkJQCBjb250cm9sIHJlZ2lzdGVyCisJbW92CXIyLCByOCwgbHNyICMxNAkJQCBnZXQgVFRCMCBiYXNlCisJbW92CXIyLCByMiwgbHNsICMxNAorCWxkcglyMywgPVBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQkgICAgIFBNRF9TRUNUX0NBQ0hFQUJMRSB8IFBNRF9TRUNUX0FQX1dSSVRFCisJYgljcHVfcmVzdW1lX21tdQorRU5EUFJPQyhjcHVfeHNjYWxlX2RvX3Jlc3VtZSkKKyNlbHNlCisjZGVmaW5lIGNwdV94c2NhbGVfZG9fc3VzcGVuZAkwCisjZGVmaW5lIGNwdV94c2NhbGVfZG9fcmVzdW1lCTAKKyNlbmRpZgorCiAJX19DUFVJTklUCiAKIAkudHlwZQlfX3hzY2FsZV9zZXR1cCwgI2Z1bmN0aW9uCkBAIC01NjUsNiArNjAzLDkgQEAKIAkud29yZAljcHVfeHNjYWxlX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X3hzY2FsZV9zd2l0Y2hfbW0KIAkud29yZAljcHVfeHNjYWxlX3NldF9wdGVfZXh0CisJLndvcmQJY3B1X3hzY2FsZV9zdXNwZW5kX3NpemUKKwkud29yZAljcHVfeHNjYWxlX2RvX3N1c3BlbmQKKwkud29yZAljcHVfeHNjYWxlX2RvX3Jlc3VtZQogCS5zaXplCXhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0geHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvY29tbW9uLmMgYi9hcmNoL2FybS9vcHJvZmlsZS9jb21tb24uYwppbmRleCA4YWE5NzQ0Li5jMDc0ZTY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9jb21tb24uYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9jb21tb24uYwpAQCAtMTAsOCArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgpAQCAtNDYsNiArNDQsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiB9CisjZW5kaWYKIAogc3RhdGljIGludCByZXBvcnRfdHJhY2Uoc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lLCB2b2lkICpkKQogewpAQCAtODUsNyArODQsNyBAQAogCiAJLyogZnJhbWUgcG9pbnRlcnMgc2hvdWxkIHN0cmljdGx5IHByb2dyZXNzIGJhY2sgdXAgdGhlIHN0YWNrCiAJICogKHRvd2FyZHMgaGlnaGVyIGFkZHJlc3NlcykgKi8KLQlpZiAodGFpbCA+PSBidWZ0YWlsWzBdLmZwKQorCWlmICh0YWlsICsgMSA+PSBidWZ0YWlsWzBdLmZwKQogCQlyZXR1cm4gTlVMTDsKIAogCXJldHVybiBidWZ0YWlsWzBdLmZwLTE7CkBAIC0xMTEsNiArMTEwLDcgQEAKIAogaW50IF9faW5pdCBvcHJvZmlsZV9hcmNoX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKIHsKKwkvKiBwcm92aWRlIGJhY2t0cmFjZSBzdXBwb3J0IGFsc28gaW4gdGltZXIgbW9kZTogKi8KIAlvcHMtPmJhY2t0cmFjZQkJPSBhcm1fYmFja3RyYWNlOwogCiAJcmV0dXJuIG9wcm9maWxlX3BlcmZfaW5pdChvcHMpOwpAQCAtMTIwLDExICsxMjAsMyBAQAogewogCW9wcm9maWxlX3BlcmZfZXhpdCgpOwogfQotI2Vsc2UKLWludCBfX2luaXQgb3Byb2ZpbGVfYXJjaF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCi17Ci0JcHJfaW5mbygib3Byb2ZpbGU6IGhhcmR3YXJlIGNvdW50ZXJzIG5vdCBhdmFpbGFibGVcbiIpOwotCXJldHVybiAtRU5PREVWOwotfQotdm9pZCBfX2V4aXQgb3Byb2ZpbGVfYXJjaF9leGl0KHZvaWQpIHt9Ci0jZW5kaWYgLyogQ09ORklHX0hXX1BFUkZfRVZFTlRTICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCAzYTcwZWJmLi5mZjQ2OWM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTk1LDYgKzk1LDcgQEAKIAljYXNlIE1BQ0hfVFlQRV9NWDM1XzNEUzoKIAljYXNlIE1BQ0hfVFlQRV9QQ00wNDM6CiAJY2FzZSBNQUNIX1RZUEVfTElMTFkxMTMxOgorCWNhc2UgTUFDSF9UWVBFX1ZQUjIwMDoKIAkJdWFydF9iYXNlID0gTVgzWF9VQVJUMV9CQVNFX0FERFI7CiAJCWJyZWFrOwogCWNhc2UgTUFDSF9UWVBFX01BR1hfWk41OgpAQCAtMTAyLDYgKzEwMyw3IEBACiAJCWJyZWFrOwogCWNhc2UgTUFDSF9UWVBFX01YNTFfQkFCQkFHRToKIAljYXNlIE1BQ0hfVFlQRV9FVUtSRUFfQ1BVSU1YNTFTRDoKKwljYXNlIE1BQ0hfVFlQRV9NWDUxXzNEUzoKIAkJdWFydF9iYXNlID0gTVg1MV9VQVJUMV9CQVNFX0FERFI7CiAJCWJyZWFrOwogCWNhc2UgTUFDSF9UWVBFX01YNTBfUkRQOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwppbmRleCAxOGZlM2NiLi5iNjMzM2FlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwpAQCAtMTQ0LDEyICsxNDQsOSBAQAogY29uZmlnIE9NQVBfSU9NTVVfSVZBMgogCWJvb2wKIAotY2hvaWNlCi0JcHJvbXB0ICJTeXN0ZW0gdGltZXIiCi0JZGVmYXVsdCBPTUFQXzMyS19USU1FUiBpZiAhQVJDSF9PTUFQMTVYWAotCiBjb25maWcgT01BUF9NUFVfVElNRVIKIAlib29sICJVc2UgbXB1IHRpbWVyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMQogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIE9NQVAgbXB1IHRpbWVyLiBUaGlzCiAJICB0aW1lciBwcm92aWRlcyBtb3JlIGludHJhLXRpY2sgcmVzb2x1dGlvbiB0aGFuIHRoZSAzMktIeiB0aW1lciwKQEAgLTE1OCw2ICsxNTUsNyBAQAogY29uZmlnIE9NQVBfMzJLX1RJTUVSCiAJYm9vbCAiVXNlIDMyS0h6IHRpbWVyIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyUExVUworCWRlZmF1bHQgeSBpZiAoQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyUExVUykKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBPTUFQIDMyS0h6IHRpbWVyLgogCSAgVGhpcyB0aW1lciBzYXZlcyBwb3dlciBjb21wYXJlZCB0byB0aGUgT01BUF9NUFVfVElNRVIsIGFuZCBoYXMKQEAgLTE2NSw4ICsxNjMsNiBAQAogCSAgaW50cmEtdGljayByZXNvbHV0aW9uIHRoYW4gT01BUF9NUFVfVElNRVIuIFRoZSAzMktIeiB0aW1lciBpcwogCSAgY3VycmVudGx5IG9ubHkgYXZhaWxhYmxlIGZvciBPTUFQMTZYWCwgMjRYWCwgMzRYWCBhbmQgT01BUDQuCiAKLWVuZGNob2ljZQotCiBjb25maWcgT01BUDNfTDJfQVVYX1NFQ1VSRV9TQVZFX1JFU1RPUkUKIAlib29sICJPTUFQMyBIUy9FTVUgc2F2ZSBhbmQgcmVzdG9yZSBmb3IgTDIgQVVYIGNvbnRyb2wgcmVnaXN0ZXIiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIFBNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY291bnRlcl8zMmsuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCmluZGV4IGVhNDY0NDAuLjg2MmRkYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCkBAIC0zNiw4ICszNiw2IEBACiAKICNkZWZpbmUgT01BUDE2WFhfVElNRVJfMzJLX1NZTkNIUk9OSVpFRAkJMHhmZmZiYzQxMAogCi0jaWYgIShkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpKQotCiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KIAogLyoKQEAgLTEyMiwxMiArMTIwLDI0IEBACiAjZGVmaW5lIFNDX01VTFQJCTQwMDAwMDAwMDB1CiAjZGVmaW5lIFNDX1NISUZUCTE3CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIF9vbWFwXzMya19zY2hlZF9jbG9jayh2b2lkKQogewogCXUzMiBjeWMgPSBjbG9ja3NvdXJjZV8zMmsucmVhZCgmY2xvY2tzb3VyY2VfMzJrKTsKIAlyZXR1cm4gY3ljX3RvX2ZpeGVkX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wLCBTQ19NVUxULCBTQ19TSElGVCk7CiB9CiAKKyNpZm5kZWYgQ09ORklHX09NQVBfTVBVX1RJTUVSCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQoreworCXJldHVybiBfb21hcF8zMmtfc2NoZWRfY2xvY2soKTsKK30KKyNlbHNlCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBvbWFwXzMya19zY2hlZF9jbG9jayh2b2lkKQoreworCXJldHVybiBfb21hcF8zMmtfc2NoZWRfY2xvY2soKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBub3RyYWNlIG9tYXBfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCiB7CiAJdTMyIGN5YyA9IGNsb2Nrc291cmNlXzMyay5yZWFkKCZjbG9ja3NvdXJjZV8zMmspOwpAQCAtMTYwLDcgKzE3MCw3IEBACiAJKnRzID0gKnRzcDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgb21hcF9pbml0X2Nsb2Nrc291cmNlXzMyayh2b2lkKQoraW50IF9faW5pdCBvbWFwX2luaXRfY2xvY2tzb3VyY2VfMzJrKHZvaWQpCiB7CiAJc3RhdGljIGNoYXIgZXJyW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSCiAJCQkiJXM6IGNhbid0IHJlZ2lzdGVyIGNsb2Nrc291cmNlIVxuIjsKQEAgLTE5NSw3ICsyMDUsMyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLWFyY2hfaW5pdGNhbGwob21hcF9pbml0X2Nsb2Nrc291cmNlXzMyayk7Ci0KLSNlbmRpZgkvKiAhKGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkpICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCBjNGIyYjQ3Li44NTM2MzA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC01Myw3ICs1Myw3IEBACiAjZW5kaWYKIAogI2RlZmluZSBPTUFQX0RNQV9BQ1RJVkUJCQkweDAxCi0jZGVmaW5lIE9NQVAyX0RNQV9DU1JfQ0xFQVJfTUFTSwkweGZmZQorI2RlZmluZSBPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0sJMHhmZmZmZmZmZgogCiAjZGVmaW5lIE9NQVBfRlVOQ19NVVhfQVJNX0JBU0UJCSgweGZmZmUxMDAwICsgMHhlYykKIApAQCAtMTg3Myw3ICsxODczLDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIG1pc2FsaWduZWQgZXJyb3Igd2l0aCBkZXZpY2UgJWRcbiIsCiAJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKIAotCXAtPmRtYV93cml0ZShPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0ssIENTUiwgY2gpOworCXAtPmRtYV93cml0ZShzdGF0dXMsIENTUiwgY2gpOwogCXAtPmRtYV93cml0ZSgxIDw8IGNoLCBJUlFTVEFUVVNfTDAsIGNoKTsKIAkvKiByZWFkIGJhY2sgdGhlIHJlZ2lzdGVyIHRvIGZsdXNoIHRoZSB3cml0ZSAqLwogCXAtPmRtYV9yZWFkKElSUVNUQVRVU19MMCwgY2gpOwpAQCAtMTg5MywxMCArMTg5Myw5IEBACiAJCQlPTUFQX0RNQV9DSEFJTl9JTkNRSEVBRChjaGFpbl9pZCk7CiAKIAkJc3RhdHVzID0gcC0+ZG1hX3JlYWQoQ1NSLCBjaCk7CisJCXAtPmRtYV93cml0ZShzdGF0dXMsIENTUiwgY2gpOwogCX0KIAotCXAtPmRtYV93cml0ZShzdGF0dXMsIENTUiwgY2gpOwotCiAJaWYgKGxpa2VseShkbWFfY2hhbltjaF0uY2FsbGJhY2sgIT0gTlVMTCkpCiAJCWRtYV9jaGFuW2NoXS5jYWxsYmFjayhjaCwgc3RhdHVzLCBkbWFfY2hhbltjaF0uZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oCmluZGV4IDZiODA4OGUuLjI5YjJhZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaApAQCAtMzUsNiArMzUsOSBAQAogCiBleHRlcm4gdm9pZCBvbWFwX21hcF9jb21tb25faW8odm9pZCk7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyOworZXh0ZXJuIGJvb2wgb21hcF8zMmtfdGltZXJfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgX19pbml0IG9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmsodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugb21hcF8zMmtfc2NoZWRfY2xvY2sodm9pZCk7CiAKIGV4dGVybiB2b2lkIG9tYXBfcmVzZXJ2ZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zcmFtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NyYW0uaAppbmRleCA5OTY3ZDVlLi5mNTAwZmMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NyYW0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NyYW0uaApAQCAtMTIsNyArMTIsMTkgQEAKICNkZWZpbmUgX19BUkNIX0FSTV9PTUFQX1NSQU1fSAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHZvaWQgKiBvbWFwX3NyYW1fcHVzaCh2b2lkICogc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisjaW5jbHVkZSA8YXNtL2ZuY3B5Lmg+CisKK2V4dGVybiB2b2lkICpvbWFwX3NyYW1fcHVzaF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKy8qIE1hY3JvIHRvIHB1c2ggYSBmdW5jdGlvbiB0byB0aGUgaW50ZXJuYWwgU1JBTSwgdXNpbmcgdGhlIGZuY3B5IEFQSSAqLworI2RlZmluZSBvbWFwX3NyYW1fcHVzaChmdW5jcCwgc2l6ZSkgKHsJCQkJXAorCXR5cGVvZigmKGZ1bmNwKSkgX3JlcyA9IE5VTEw7CQkJCVwKKwl2b2lkICpfc3JhbV9hZGRyZXNzID0gb21hcF9zcmFtX3B1c2hfYWRkcmVzcyhzaXplKTsJXAorCWlmIChfc3JhbV9hZGRyZXNzKQkJCQkJXAorCQlfcmVzID0gZm5jcHkoX3NyYW1fYWRkcmVzcywgJihmdW5jcCksIHNpemUpOwlcCisJX3JlczsJCQkJCQkJXAorfSkKKwogZXh0ZXJuIHZvaWQgb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKTsKIAogZXh0ZXJuIHZvaWQgb21hcDJfc3JhbV9kZHJfaW5pdCh1MzIgKnNsb3dfZGxsX2N0cmwsIHUzMiBmYXN0X2RsbF9jdHJsLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMKaW5kZXggNDU5YjMxOS4uNDlkMzIwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jCkBAIC0zMjIsMTUgKzMyMiwxOCBAQAogCiBzdHJ1Y3Qgb21hcF9tYm94ICpvbWFwX21ib3hfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiB7Ci0Jc3RydWN0IG9tYXBfbWJveCAqbWJveDsKLQlpbnQgcmV0OworCXN0cnVjdCBvbWFwX21ib3ggKl9tYm94LCAqbWJveCA9IE5VTEw7CisJaW50IGksIHJldDsKIAogCWlmICghbWJveGVzKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCWZvciAobWJveCA9ICptYm94ZXM7IG1ib3g7IG1ib3grKykKLQkJaWYgKCFzdHJjbXAobWJveC0+bmFtZSwgbmFtZSkpCisJZm9yIChpID0gMDsgKF9tYm94ID0gbWJveGVzW2ldKTsgaSsrKSB7CisJCWlmICghc3RyY21wKF9tYm94LT5uYW1lLCBuYW1lKSkgeworCQkJbWJveCA9IF9tYm94OwogCQkJYnJlYWs7CisJCX0KKwl9CiAKIAlpZiAoIW1ib3gpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKaW5kZXggZTI2ZTUwNC4uNjhmY2M3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCkBAIC0yNDIsNyArMjQyLDE0IEBACiAJICAgICAgIG9tYXBfc3JhbV9zaXplIC0gU1JBTV9CT09UTE9BREVSX1NaKTsKIH0KIAotdm9pZCAqIG9tYXBfc3JhbV9wdXNoKHZvaWQgKiBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQorLyoKKyAqIE1lbW9yeSBhbGxvY2F0b3IgZm9yIFNSQU06IGNhbGN1bGF0ZXMgdGhlIG5ldyBjZWlsaW5nIGFkZHJlc3MKKyAqIGZvciBwdXNoaW5nIGEgZnVuY3Rpb24gdXNpbmcgdGhlIGZuY3B5IEFQSS4KKyAqCisgKiBOb3RlIHRoYXQgZm5jcHkgcmVxdWlyZXMgdGhlIHJldHVybmVkIGFkZHJlc3MgdG8gYmUgYWxpZ25lZAorICogdG8gYW4gOC1ieXRlIGJvdW5kYXJ5LgorICovCit2b2lkICpvbWFwX3NyYW1fcHVzaF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpZiAoc2l6ZSA+IChvbWFwX3NyYW1fY2VpbCAtIChvbWFwX3NyYW1fYmFzZSArIFNSQU1fQk9PVExPQURFUl9TWikpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTm90IGVub3VnaCBzcGFjZSBpbiBTUkFNXG4iKTsKQEAgLTI1MCwxMCArMjU3LDcgQEAKIAl9CiAKIAlvbWFwX3NyYW1fY2VpbCAtPSBzaXplOwotCW9tYXBfc3JhbV9jZWlsID0gUk9VTkRfRE9XTihvbWFwX3NyYW1fY2VpbCwgc2l6ZW9mKHZvaWQgKikpOwotCW1lbWNweSgodm9pZCAqKW9tYXBfc3JhbV9jZWlsLCBzdGFydCwgc2l6ZSk7Ci0JZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKW9tYXBfc3JhbV9jZWlsLAotCQkodW5zaWduZWQgbG9uZykob21hcF9zcmFtX2NlaWwgKyBzaXplKSk7CisJb21hcF9zcmFtX2NlaWwgPSBST1VORF9ET1dOKG9tYXBfc3JhbV9jZWlsLCBGTkNQWV9BTElHTik7CiAKIAlyZXR1cm4gKHZvaWQgKilvbWFwX3NyYW1fY2VpbDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jIGIvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMKaW5kZXggYjc3ZTAxOC4uYTlhYTVhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMKQEAgLTEzOSwxMCArMTM5LDExIEBACiAjZGVmaW5lIG1mcF9jb25maWd1cmVkKHApCSgocCktPmNvbmZpZyAhPSAtMSkKIAogLyoKLSAqIHBlcmZvcm0gYSByZWFkLWJhY2sgb2YgYW55IE1GUFIgcmVnaXN0ZXIgdG8gbWFrZSBzdXJlIHRoZQorICogcGVyZm9ybSBhIHJlYWQtYmFjayBvZiBhbnkgdmFsaWQgTUZQUiByZWdpc3RlciB0byBtYWtlIHN1cmUgdGhlCiAgKiBwcmV2aW91cyB3cml0aW5ncyBhcmUgZmluaXNoZWQKICAqLwotI2RlZmluZSBtZnByX3N5bmMoKQkodm9pZClfX3Jhd19yZWFkbChtZnByX21taW9fYmFzZSArIDApCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtZnByX29mZl9yZWFkYmFjazsKKyNkZWZpbmUgbWZwcl9zeW5jKCkJKHZvaWQpX19yYXdfcmVhZGwobWZwcl9tbWlvX2Jhc2UgKyBtZnByX29mZl9yZWFkYmFjaykKIAogc3RhdGljIGlubGluZSB2b2lkIF9fbWZwX2NvbmZpZ19ydW4oc3RydWN0IG1mcF9waW4gKnApCiB7CkBAIC0yNDgsNiArMjQ5LDkgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7CiAKKwkvKiBtZnAgb2Zmc2V0IGZvciByZWFkYmFjayAqLworCW1mcHJfb2ZmX3JlYWRiYWNrID0gbWFwWzBdLm9mZnNldDsKKwogCWZvciAocCA9IG1hcDsgcC0+c3RhcnQgIT0gTUZQX1BJTl9JTlZBTElEOyBwKyspIHsKIAkJb2Zmc2V0ID0gcC0+b2Zmc2V0OwogCQlpID0gcC0+c3RhcnQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TCmluZGV4IGU3M2UzYjZlLi5mZDcwMzJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUwpAQCAtNDQsMjMgKzQ0LDEzIEBACiAJLyogczNjX2NwdV9zYXZlCiAJICoKIAkgKiBlbnRyeToKLQkgKglyMCA9IHNhdmUgYWRkcmVzcyAodmlydHVhbCBhZGRyIG9mIHMzY19zbGVlcF9zYXZlX3BoeXMpCisJICoJcjEgPSB2OnAgb2Zmc2V0CiAJKi8KIAogRU5UUlkoczNjX2NwdV9zYXZlKQogCXN0bWZkCXNwISwgeyByNCAtIHIxMiwgbHIgfQotCi0JQEAgc3RvcmUgY28tcHJvY2Vzc29yIHJlZ2lzdGVycwotCi0JbXJjCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBQSUQKLQltcmMJcDE1LCAwLCByNSwgYzMsIGMwLCAwCUAgRG9tYWluIElECi0JbXJjCXAxNSwgMCwgcjYsIGMyLCBjMCwgMAlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcmVzcwotCW1yYwlwMTUsIDAsIHI3LCBjMSwgYzAsIDAJQCBjb250cm9sIHJlZ2lzdGVyCi0KLQlzdG1pYQlyMCwgeyByNCAtIHIxMyB9Ci0KLQlAQCB3cml0ZSBvdXIgc3RhdGUgYmFjayB0byBSQU0KLQlibAlzM2NfcG1fY2JfZmx1c2hjYWNoZQorCWxkcglyMywgPXJlc3VtZV93aXRoX21tdQorCWJsCWNwdV9zdXNwZW5kCiAKIAlAQCBqdW1wIHRvIGZpbmFsIGNvZGUgdG8gc2VuZCBzeXN0ZW0gdG8gc2xlZXAKIAlsZHIJcjAsID1wbV9jcHVfc2xlZXAKQEAgLTc2LDIwICs2Niw2IEBACiAKIAkubHRvcmcKIAotCUBAIHRoZSBuZXh0IGJpdHMgc2l0IGluIHRoZSAuZGF0YSBzZWdtZW50LCBldmVuIHRob3VnaCB0aGV5Ci0JQEAgaGFwcGVuIHRvIGJlIGNvZGUuLi4gdGhlIHMzY19zbGVlcF9zYXZlX3BoeXMgbmVlZHMgdG8gYmUKLQlAQCBhY2Nlc3NlZCBieSB0aGUgcmVzdW1lIGNvZGUgYmVmb3JlIGl0IGNhbiByZXN0b3JlIHRoZSBNTVUuCi0JQEAgVGhpcyBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBoYXMgdG8gYmUgY2xvc2UgZW5vdWdoIGZvciB0aGUKLQlAQCBjb2RlIHRvIHJlYWQgaXQuLi4gc2luY2UgdGhlIC50ZXh0IHNlZ21lbnQgbmVlZHMgdG8gYmUgUk8sCi0JQEAgdGhlIGRhdGEgc2VnbWVudCBjYW4gYmUgdGhlIG9ubHkgcGxhY2UgdG8gcHV0IHRoaXMgY29kZS4KLQotCS5kYXRhCi0KLQkuZ2xvYmFsCXMzY19zbGVlcF9zYXZlX3BoeXMKLXMzY19zbGVlcF9zYXZlX3BoeXM6Ci0JLndvcmQJMAotCi0KIAkvKiBzbGVlcCBtYWdpYywgdG8gYWxsb3cgdGhlIGJvb3Rsb2FkZXIgdG8gY2hlY2sgZm9yIGFuIHZhbGlkCiAJICogaW1hZ2UgdG8gcmVzdW1lIHRvLiBNdXN0IGJlIHRoZSBmaXJzdCB3b3JkIGJlZm9yZSB0aGUKIAkgKiBzM2NfY3B1X3Jlc3VtZSBlbnRyeS4KQEAgLTEwMCwxMCArNzYsNiBAQAogCS8qIHMzY19jcHVfcmVzdW1lCiAJICoKIAkgKiByZXN1bWUgY29kZSBlbnRyeSBmb3IgYm9vdGxvYWRlciB0byBjYWxsCi0JICoKLQkgKiB3ZSBtdXN0IHB1dCB0aGlzIGNvZGUgaGVyZSBpbiB0aGUgZGF0YSBzZWdtZW50IGFzIHdlIGhhdmUgbm8KLQkgKiBvdGhlciB3YXkgb2YgcmVzdG9yaW5nIHRoZSBzdGFjayBwb2ludGVyIGFmdGVyIHNsZWVwLCBhbmQgd2UKLQkgKiBtdXN0IG5vdCB3cml0ZSB0byB0aGUgY29kZSBzZWdtZW50IChjb2RlIGlzIHJlYWQtb25seSkKIAkqLwogCiBFTlRSWShzM2NfY3B1X3Jlc3VtZSkKQEAgLTEzNCwyNSArMTA2LDQgQEAKIAliZXEJMTAwMWIKICNlbmRpZiAvKiBDT05GSUdfREVCVUdfUkVTVU1FICovCiAKLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkJQEAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQEAgaW52YWxpZGF0ZSBJICYgRCBjYWNoZXMKLQotCWxkcglyMCwgczNjX3NsZWVwX3NhdmVfcGh5cwkJQCBhZGRyZXNzIG9mIHJlc3RvcmUgYmxvY2sKLQlsZG1pYQlyMCwgeyByNCAtIHIxMyB9Ci0KLQltY3IJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAkJQCBQSUQKLQltY3IJcDE1LCAwLCByNSwgYzMsIGMwLCAwCQlAIERvbWFpbiBJRAotCW1jcglwMTUsIDAsIHI2LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZQotCi0jaWZkZWYgQ09ORklHX0RFQlVHX1JFU1VNRQotCW1vdglyMywgIydSJwotCXN0cmIJcjMsIFsgcjIsICNTM0MyNDEwX1VUWEggXQotI2VuZGlmCi0KLQlsZHIJcjIsID1yZXN1bWVfd2l0aF9tbXUKLQltY3IJcDE1LCAwLCByNywgYzEsIGMwLCAwCQlAIHR1cm4gb24gTU1VLCBldGMKLQlub3AJCQkJCUAgc2Vjb25kLXRvLWxhc3QgYmVmb3JlIG1tdQotCW1vdglwYywgcjIJCQkJQCBnbyBiYWNrIHRvIHZpcnR1YWwgYWRkcmVzcwotCi0JLmx0b3JnCisJYgljcHVfcmVzdW1lCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZwppbmRleCBkZWIzOTk1Li41NTdmOGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL0tjb25maWcKQEAgLTM3LDYgKzM3LDE0IEBACiAJaGVscAogCSAgQ29tbW9uIGNvZGUgZm9yIHRoZSBHUElPIGludGVycnVwdHMgKG90aGVyIHRoYW4gZXh0ZXJuYWwgaW50ZXJydXB0cy4pCiAKK2NvbW1lbnQgIlN5c3RlbSBNTVUiCisKK2NvbmZpZyBTNVBfU1lTVEVNX01NVQorCWJvb2wgIlM1UCBTWVNURU0gTU1VIgorCWRlcGVuZHMgb24gQVJDSF9TNVBWMzEwCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgU3lzdGVtIE1NVQorCiBjb25maWcgUzVQX0RFVl9GSU1DMAogCWJvb2wKIAloZWxwCkBAIC02NiwxOSArNzQsMyBAQAogCWJvb2wKIAloZWxwCiAJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucyBmb3IgTUlQSS1DU0lTIGNoYW5uZWwgMQotCi1tZW51Y29uZmlnIFM1UF9TWVNNTVUKLQlib29sICJTWVNNTVUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfUzVQVjMxMAotCWhlbHAKLQkgIFRoaXMgaXMgYSBTeXN0ZW0gTU1VIGRyaXZlciBmb3IgU2Ftc3VuZyBBUk0gYmFzZWQgU29jLgotCi1pZiBTNVBfU1lTTU1VCi0KLWNvbmZpZyBTNVBfU1lTTU1VX0RFQlVHCi0JYm9vbCAiRW5hYmxlcyBkZWJ1ZyBtZXNzYWdlcyIKLQlkZXBlbmRzIG9uIFM1UF9TWVNNTVUKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgU1lTTU1VIGRyaXZlciBkZWJ1ZyBtYXNzYWdlcy4KLQotZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zNXAvTWFrZWZpbGUKaW5kZXggOTJlZmUxYS4uNGJkNWNmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvTWFrZWZpbGUKQEAgLTE5LDYgKzE5LDcgQEAKIG9iai15CQkJCSs9IGlycS5vCiBvYmotJChDT05GSUdfUzVQX0VYVF9JTlQpCSs9IGlycS1laW50Lm8KIG9iai0kKENPTkZJR19TNVBfR1BJT19JTlQpCSs9IGlycS1ncGlvaW50Lm8KK29iai0kKENPTkZJR19TNVBfU1lTVEVNX01NVSkJKz0gc3lzbW11Lm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KIG9iai0kKENPTkZJR19QTSkJCSs9IGlycS1wbS5vCiAKQEAgLTMwLDQgKzMxLDMgQEAKIG9iai0kKENPTkZJR19TNVBfREVWX09ORU5BTkQpCSs9IGRldi1vbmVuYW5kLm8KIG9iai0kKENPTkZJR19TNVBfREVWX0NTSVMwKQkrPSBkZXYtY3NpczAubwogb2JqLSQoQ09ORklHX1M1UF9ERVZfQ1NJUzEpCSs9IGRldi1jc2lzMS5vCi1vYmotJChDT05GSUdfUzVQX1NZU01NVSkJKz0gc3lzbW11Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2Rldi11YXJ0LmMgYi9hcmNoL2FybS9wbGF0LXM1cC9kZXYtdWFydC5jCmluZGV4IDZhNzM0MjguLmFmYWY4N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2Rldi11YXJ0LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LXVhcnQuYwpAQCAtMjgsNyArMjgsNyBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXBfdWFydDBfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IFM1UF9QQV9VQVJUMCwKLQkJLmVuZAk9IFM1UF9QQV9VQVJUMCArIFM1UF9TWl9VQVJULAorCQkuZW5kCT0gUzVQX1BBX1VBUlQwICsgUzVQX1NaX1VBUlQgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTUxLDcgKzUxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwX3VhcnQxX3Jlc291cmNlW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBTNVBfUEFfVUFSVDEsCi0JCS5lbmQJPSBTNVBfUEFfVUFSVDEgKyBTNVBfU1pfVUFSVCwKKwkJLmVuZAk9IFM1UF9QQV9VQVJUMSArIFM1UF9TWl9VQVJUIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC03NCw3ICs3NCw3IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cF91YXJ0Ml9yZXNvdXJjZVtdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CT0gUzVQX1BBX1VBUlQyLAotCQkuZW5kCT0gUzVQX1BBX1VBUlQyICsgUzVQX1NaX1VBUlQsCisJCS5lbmQJPSBTNVBfUEFfVUFSVDIgKyBTNVBfU1pfVUFSVCAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtOTgsNyArOTgsNyBAQAogI2lmIENPTkZJR19TRVJJQUxfU0FNU1VOR19VQVJUUyA+IDMKIAlbMF0gPSB7CiAJCS5zdGFydAk9IFM1UF9QQV9VQVJUMywKLQkJLmVuZAk9IFM1UF9QQV9VQVJUMyArIFM1UF9TWl9VQVJULAorCQkuZW5kCT0gUzVQX1BBX1VBUlQzICsgUzVQX1NaX1VBUlQgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTEyMyw3ICsxMjMsNyBAQAogI2lmIENPTkZJR19TRVJJQUxfU0FNU1VOR19VQVJUUyA+IDQKIAlbMF0gPSB7CiAJCS5zdGFydAk9IFM1UF9QQV9VQVJUNCwKLQkJLmVuZAk9IFM1UF9QQV9VQVJUNCArIFM1UF9TWl9VQVJULAorCQkuZW5kCT0gUzVQX1BBX1VBUlQ0ICsgUzVQX1NaX1VBUlQgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTE0OCw3ICsxNDgsNyBAQAogI2lmIENPTkZJR19TRVJJQUxfU0FNU1VOR19VQVJUUyA+IDUKIAlbMF0gPSB7CiAJCS5zdGFydAk9IFM1UF9QQV9VQVJUNSwKLQkJLmVuZAk9IFM1UF9QQV9VQVJUNSArIFM1UF9TWl9VQVJULAorCQkuZW5kCT0gUzVQX1BBX1VBUlQ1ICsgUzVQX1NaX1VBUlQgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zeXNtbXUuaCBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zeXNtbXUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIyOThmYy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvc3lzbW11LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvc3lzbW11LmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLwotICoKLSAqIFNhbXN1bmcgc3lzbW11IGRyaXZlcgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWZuZGVmIF9fQVNNX1BMQVRfUzVQX1NZU01NVV9ICi0jZGVmaW5lIF9fQVNNX1BMQVRfUzVQX1NZU01NVV9IIF9fRklMRV9fCi0KLS8qIGRlYnVnIG1hY3JvICovCi0jaWZkZWYgQ09ORklHX1M1UF9TWVNNTVVfREVCVUcKLSNkZWZpbmUgc3lzbW11X2RlYnVnKGZtdCwgYXJnLi4uKQlwcmludGsoS0VSTl9JTkZPICJbJXNdICIgZm10LCBfX2Z1bmNfXywgIyMgYXJnKQotI2Vsc2UKLSNkZWZpbmUgc3lzbW11X2RlYnVnKGZtdCwgYXJnLi4uKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fQVNNX1BMQVRfUzVQX1NZU01NVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYyBiL2FyY2gvYXJtL3BsYXQtczVwL3N5c21tdS5jCmluZGV4IGQ4MDQ5MTQuLmZmZThhNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL3N5c21tdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL3N5c21tdS5jCkBAIC0xNiw4ICsxNiw2IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLXN5c21tdS5oPgogI2luY2x1ZGUgPG1hY2gvc3lzbW11Lmg+CiAKLSNpbmNsdWRlIDxwbGF0L3N5c21tdS5oPgotCiBzdHJ1Y3Qgc3lzbW11X2NvbnRyb2xsZXIgczVwX3N5c21tdV9jbnRscnNbUzVQX1NZU01NVV9UT1RBTF9JUE5VTV07CiAKIHZvaWQgczVwX3N5c21tdV9yZWdpc3RlcihzdHJ1Y3Qgc3lzbW11X2NvbnRyb2xsZXIgKnN5c21tdWNvbnApCkBAIC0xMjMsNyArMTIxLDcgQEAKIAkJOiAiPXIiIChwZykgOiA6ICJjYyIpOwkJXAogCQlwZyAmPSB+MHgzZmZmOwogCi0Jc3lzbW11X2RlYnVnKCJDUDE1IFRUQlIwIDogMHgleFxuIiwgcGcpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBDUDE1IFRUQlIwIDogMHgleFxuIiwgX19mdW5jX18sIHBnKTsKIAogCS8qIFNldCBzeXNtbXUgcGFnZSB0YWJsZSBiYXNlIGFkZHJlc3MgKi8KIAlfX3Jhd193cml0ZWwocGcsIHN5c21tdWNvbnAtPnJlZ3MgKyBTNVBfUFRfQkFTRV9BRERSKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdHMuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdHMuYwppbmRleCAyMzZlZjg0Li4zZTRiZDgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXRzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi10cy5jCkBAIC01OCw0ICs1OCwzIEBACiAKIAlzM2NfZGV2aWNlX3RzLmRldi5wbGF0Zm9ybV9kYXRhID0gbnBkOwogfQotRVhQT1JUX1NZTUJPTChzM2MyNHh4X3RzX3NldF9wbGF0ZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXVhcnQuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdWFydC5jCmluZGV4IDM3NzZjZDkuLjU5MjgxMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdWFydC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdWFydC5jCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKwogLyogdWFydCBkZXZpY2VzICovCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfdWFydF9kZXZpY2UwID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9wbS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9wbS5oCmluZGV4IGQ5MDI1ZTMuLjkzN2NjMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcG0uaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BtLmgKQEAgLTE3LDYgKzE3LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCitzdHJ1Y3Qgc3lzX2RldmljZTsKKwogI2lmZGVmIENPTkZJR19QTQogCiBleHRlcm4gX19pbml0IGludCBzM2NfcG1faW5pdCh2b2lkKTsKQEAgLTUwLDEzICs1MiwxMSBAQAogCiAvKiBmcm9tIHNsZWVwLlMgKi8KIAotZXh0ZXJuIGludCAgczNjX2NwdV9zYXZlKHVuc2lnbmVkIGxvbmcgKnNhdmVibGspOworZXh0ZXJuIGludCAgczNjX2NwdV9zYXZlKHVuc2lnbmVkIGxvbmcgKnNhdmVibGssIGxvbmcpOwogZXh0ZXJuIHZvaWQgczNjX2NwdV9yZXN1bWUodm9pZCk7CiAKIGV4dGVybiB2b2lkIHMzYzI0MTBfY3B1X3N1c3BlbmQodm9pZCk7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIHMzY19zbGVlcF9zYXZlX3BoeXM7Ci0KIC8qIHNsZWVwIHNhdmUgaW5mbyAqLwogCiAvKioKQEAgLTE3OSwxMyArMTc5LDUgQEAKICAqLwogZXh0ZXJuIHZvaWQgczNjX3BtX3NhdmVfZ3Bpb3Modm9pZCk7CiAKLS8qKgotICogczNjX3BtX2NiX2ZsdXNoY2FjaGUgLSBjYWxsYmFjayBmb3IgYXNzZW1ibHkgY29kZQotICoKLSAqIENhbGxiYWNrIHRvIGlzc3VlIGZsdXNoX2NhY2hlX2FsbCgpIGFzIHRoaXMgY2FsbCBpcwotICogbm90IGEgZGlyZWN0bHkgY2FsbGFibGUgb2JqZWN0LgotICovCi1leHRlcm4gdm9pZCBzM2NfcG1fY2JfZmx1c2hjYWNoZSh2b2lkKTsKLQogZXh0ZXJuIHZvaWQgczNjX3BtX3NhdmVfY29yZSh2b2lkKTsKIGV4dGVybiB2b2lkIHMzY19wbV9yZXN0b3JlX2NvcmUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0uYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS5jCmluZGV4IDAyZDUzMWYuLmQ1YjU4ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS5jCkBAIC0yNDEsOCArMjQxLDYgQEAKIAogc3RhdGljIGludCBzM2NfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogewotCXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlZ3Nfc2F2ZVsxNl07Ci0KIAkvKiBlbnN1cmUgdGhlIGRlYnVnIGlzIGluaXRpYWxpc2VkIChpZiBlbmFibGVkKSAqLwogCiAJczNjX3BtX2RlYnVnX2luaXQoKTsKQEAgLTI2NiwxMiArMjY0LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogc3RvcmUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHJlY292ZXJ5IGJsb2NrICovCi0KLQlzM2Nfc2xlZXBfc2F2ZV9waHlzID0gdmlydF90b19waHlzKHJlZ3Nfc2F2ZSk7Ci0KLQlTM0NfUE1EQkcoInMzY19zbGVlcF9zYXZlX3BoeXM9MHglMDhseFxuIiwgczNjX3NsZWVwX3NhdmVfcGh5cyk7Ci0KIAkvKiBzYXZlIGFsbCBuZWNlc3NhcnkgY29yZSByZWdpc3RlcnMgbm90IGNvdmVyZWQgYnkgdGhlIGRyaXZlcnMgKi8KIAogCXMzY19wbV9zYXZlX2dwaW9zKCk7CkBAIC0zMDUsNyArMjk3LDcgQEAKIAkgKiB3ZSByZXN1bWUgYXMgaXQgc2F2ZXMgaXRzIG93biByZWdpc3RlciBzdGF0ZSBhbmQgcmVzdG9yZXMgaXQKIAkgKiBkdXJpbmcgdGhlIHJlc3VtZS4gICovCiAKLQlzM2NfY3B1X3NhdmUocmVnc19zYXZlKTsKKwlzM2NfY3B1X3NhdmUoMCwgUExBVF9QSFlTX09GRlNFVCAtIFBBR0VfT0ZGU0VUKTsKIAogCS8qIHJlc3RvcmUgdGhlIGNwdSBzdGF0ZSB1c2luZyB0aGUga2VybmVsJ3MgY3B1IGluaXQgY29kZS4gKi8KIApAQCAtMzM2LDEyICszMjgsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBjYWxsYmFjayBmcm9tIGFzc2VtYmx5IGNvZGUgKi8KLXZvaWQgczNjX3BtX2NiX2ZsdXNoY2FjaGUodm9pZCkKLXsKLQlmbHVzaF9jYWNoZV9hbGwoKTsKLX0KLQogc3RhdGljIGludCBzM2NfcG1fcHJlcGFyZSh2b2lkKQogewogCS8qIHByZXBhcmUgY2hlY2sgYXJlYSBpZiBjb25maWd1cmVkICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNwZWFyL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9NYWtlZmlsZQppbmRleCBlYjg5NTQwYS4uYjRmMzQwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL01ha2VmaWxlCkBAIC0zLDYgKzMsNiBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteQk6PSBjbG9jay5vIHBhZG11eC5vIHRpbWUubworb2JqLXkJOj0gY2xvY2subyB0aW1lLm8KIAotb2JqLSQoQ09ORklHX0FSQ0hfU1BFQVIzWFgpCSs9IHNoaXJxLm8KK29iai0kKENPTkZJR19BUkNIX1NQRUFSM1hYKQkrPSBzaGlycS5vIHBhZG11eC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNwZWFyL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2Nsb2NrLmMKaW5kZXggZWU0ZjkwZS4uYmRiZDdlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci9jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvY2xvY2suYwpAQCAtMTIsMTggKzEyLDI1IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPG1hY2gvbWlzY19yZWdzLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsb2Nrc19sb2NrKTsKIHN0YXRpYyBMSVNUX0hFQUQocm9vdF9jbGtzKTsKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKKyNlbmRpZgogCi1zdGF0aWMgdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgbGlzdF9oZWFkICopOworc3RhdGljIHZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqLCBpbnQgb25faW5pdCk7CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitzdGF0aWMgaW50IGNsa19kZWJ1Z2ZzX3JlcGFyZW50KHN0cnVjdCBjbGsgKik7CisjZW5kaWYKIAogc3RhdGljIGludCBnZW5lcmljX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewpAQCAtNjUsNiArNzIsMTA0IEBACiAJLmRpc2FibGUgPSBnZW5lcmljX2Nsa19kaXNhYmxlLAogfTsKIAorLyogcmV0dXJucyBjdXJyZW50IHByb2dyYW1tZWQgY2xvY2tzIGNsb2NrIGluZm8gc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyAqcGNsa19pbmZvX2dldChzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgaW50IHZhbCwgaTsKKwlzdHJ1Y3QgcGNsa19pbmZvICppbmZvID0gTlVMTDsKKworCXZhbCA9IChyZWFkbChjbGstPnBjbGtfc2VsLT5wY2xrX3NlbF9yZWcpID4+IGNsay0+cGNsa19zZWxfc2hpZnQpCisJCSYgY2xrLT5wY2xrX3NlbC0+cGNsa19zZWxfbWFzazsKKworCWZvciAoaSA9IDA7IGkgPCBjbGstPnBjbGtfc2VsLT5wY2xrX2NvdW50OyBpKyspIHsKKwkJaWYgKGNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1tpXS5wY2xrX3ZhbCA9PSB2YWwpCisJCQlpbmZvID0gJmNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1tpXTsKKwl9CisKKwlyZXR1cm4gaW5mbzsKK30KKworLyoKKyAqIFNldCBVcGRhdGUgcGNsaywgYW5kIHBjbGtfaW5mbyBvZiBjbGsgYW5kIGFkZCBjbG9jayBzaWJsaW5nIG5vZGUgdG8gY3VycmVudAorICogcGFyZW50cyBjaGlsZHJlbiBsaXN0CisgKi8KK3N0YXRpYyB2b2lkIGNsa19yZXBhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBwY2xrX2luZm8gKnBjbGtfaW5mbykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmNsay0+c2libGluZyk7CisJbGlzdF9hZGQoJmNsay0+c2libGluZywgJnBjbGtfaW5mby0+cGNsay0+Y2hpbGRyZW4pOworCisJY2xrLT5wY2xrID0gcGNsa19pbmZvLT5wY2xrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwljbGtfZGVidWdmc19yZXBhcmVudChjbGspOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGRvX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsaykKKwkJcmV0dXJuOworCisJaWYgKCFjbGstPnVzYWdlX2NvdW50KSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKKwljbGstPnVzYWdlX2NvdW50LS07CisKKwlpZiAoY2xrLT51c2FnZV9jb3VudCA9PSAwKSB7CisJCS8qCisJCSAqIFN1cmVseSwgdGhlcmUgYXJlIG5vIGFjdGl2ZSBjaGlsZHJlbnMgb3IgZGlyZWN0IHVzZXJzCisJCSAqIG9mIHRoaXMgY2xvY2sKKwkJICovCisJCWlmIChjbGstPnBjbGspCisJCQlkb19jbGtfZGlzYWJsZShjbGstPnBjbGspOworCisJCWlmIChjbGstPm9wcyAmJiBjbGstPm9wcy0+ZGlzYWJsZSkKKwkJCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7CisJfQorfQorCitzdGF0aWMgaW50IGRvX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCisJaWYgKCFjbGspCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGNsay0+dXNhZ2VfY291bnQgPT0gMCkgeworCQlpZiAoY2xrLT5wY2xrKSB7CisJCQlyZXQgPSBkb19jbGtfZW5hYmxlKGNsay0+cGNsayk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCQl9CisJCWlmIChjbGstPm9wcyAmJiBjbGstPm9wcy0+ZW5hYmxlKSB7CisJCQlyZXQgPSBjbGstPm9wcy0+ZW5hYmxlKGNsayk7CisJCQlpZiAocmV0KSB7CisJCQkJaWYgKGNsay0+cGNsaykKKwkJCQkJZG9fY2xrX2Rpc2FibGUoY2xrLT5wY2xrKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCQkvKgorCQkgKiBTaW5jZSB0aGUgY2xvY2sgaXMgZ29pbmcgdG8gYmUgdXNlZCBmb3IgdGhlIGZpcnN0CisJCSAqIHRpbWUgcGxlYXNlIHJlY2xhYworCQkgKi8KKwkJaWYgKGNsay0+cmVjYWxjKSB7CisJCQlyZXQgPSBjbGstPnJlY2FsYyhjbGspOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycjsKKwkJfQorCX0KKwljbGstPnVzYWdlX2NvdW50Kys7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIGNsa19lbmFibGUgLSBpbmZvcm0gdGhlIHN5c3RlbSB3aGVuIHRoZSBjbG9jayBzb3VyY2Ugc2hvdWxkIGJlIHJ1bm5pbmcuCiAgKiBAY2xrOiBjbG9jayBzb3VyY2UKQEAgLTc4LDE3ICsxODMsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQlpZiAoY2xrLT51c2FnZV9jb3VudCA9PSAwKSB7Ci0JCWlmIChjbGstPm9wcyAmJiBjbGstPm9wcy0+ZW5hYmxlKQotCQkJcmV0ID0gY2xrLT5vcHMtPmVuYWJsZShjbGspOwotCX0KLQljbGstPnVzYWdlX2NvdW50Kys7CisJcmV0ID0gZG9fY2xrX2VuYWJsZShjbGspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKQEAgLTEwOSwxNyArMjA2LDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFjbGsgfHwgSVNfRVJSKGNsaykpCi0JCXJldHVybjsKLQotCVdBUk5fT04oY2xrLT51c2FnZV9jb3VudCA9PSAwKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCWNsay0+dXNhZ2VfY291bnQtLTsKLQlpZiAoY2xrLT51c2FnZV9jb3VudCA9PSAwKSB7Ci0JCWlmIChjbGstPm9wcyAmJiBjbGstPm9wcy0+ZGlzYWJsZSkKLQkJCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7Ci0JfQorCWRvX2Nsa19kaXNhYmxlKGNsayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOwpAQCAtMTUzLDE1ICsyNDEsMTQgQEAKIAlpbnQgaSwgZm91bmQgPSAwLCB2YWwgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSB8fCAhcGFyZW50IHx8IElTX0VSUihwYXJlbnQpKQorCWlmICghY2xrIHx8ICFwYXJlbnQpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmIChjbGstPnVzYWdlX2NvdW50KQotCQlyZXR1cm4gLUVCVVNZOwotCWlmICghY2xrLT5wY2xrX3NlbCkKLQkJcmV0dXJuIC1FUEVSTTsKIAlpZiAoY2xrLT5wY2xrID09IHBhcmVudCkKIAkJcmV0dXJuIDA7CisJaWYgKCFjbGstPnBjbGtfc2VsKQorCQlyZXR1cm4gLUVQRVJNOwogCisJLyogY2hlY2sgaWYgcmVxdWVzdGVkIHBhcmVudCBpcyBpbiBjbGsgcGFyZW50IGxpc3QgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY2xrLT5wY2xrX3NlbC0+cGNsa19jb3VudDsgaSsrKSB7CiAJCWlmIChjbGstPnBjbGtfc2VsLT5wY2xrX2luZm9baV0ucGNsayA9PSBwYXJlbnQpIHsKIAkJCWZvdW5kID0gMTsKQEAgLTE3NiwyNSArMjYzLDU4IEBACiAJLyogcmVmbGVjdCBwYXJlbnQgY2hhbmdlIGluIGhhcmR3YXJlICovCiAJdmFsID0gcmVhZGwoY2xrLT5wY2xrX3NlbC0+cGNsa19zZWxfcmVnKTsKIAl2YWwgJj0gfihjbGstPnBjbGtfc2VsLT5wY2xrX3NlbF9tYXNrIDw8IGNsay0+cGNsa19zZWxfc2hpZnQpOwotCXZhbCB8PSBjbGstPnBjbGtfc2VsLT5wY2xrX2luZm9baV0ucGNsa19tYXNrIDw8IGNsay0+cGNsa19zZWxfc2hpZnQ7CisJdmFsIHw9IGNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1tpXS5wY2xrX3ZhbCA8PCBjbGstPnBjbGtfc2VsX3NoaWZ0OwogCXdyaXRlbCh2YWwsIGNsay0+cGNsa19zZWwtPnBjbGtfc2VsX3JlZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKIAogCS8qIHJlZmxlY3QgcGFyZW50IGNoYW5nZSBpbiBzb2Z0d2FyZSAqLwotCWNsay0+cmVjYWxjKGNsayk7Ci0JcHJvcGFnYXRlX3JhdGUoJmNsay0+Y2hpbGRyZW4pOworCWNsa19yZXBhcmVudChjbGssICZjbGstPnBjbGtfc2VsLT5wY2xrX2luZm9baV0pOworCisJcHJvcGFnYXRlX3JhdGUoY2xrLCAwKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX3NldF9wYXJlbnQpOwogCisvKioKKyAqIGNsa19zZXRfcmF0ZSAtIHNldCB0aGUgY2xvY2sgcmF0ZSBmb3IgYSBjbG9jayBzb3VyY2UKKyAqIEBjbGs6IGNsb2NrIHNvdXJjZQorICogQHJhdGU6IGRlc2lyZWQgY2xvY2sgcmF0ZSBpbiBIegorICoKKyAqIFJldHVybnMgc3VjY2VzcyAoMCkgb3IgbmVnYXRpdmUgZXJybm8uCisgKi8KK2ludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmICghY2xrIHx8ICFyYXRlKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChjbGstPnNldF9yYXRlKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7CisJCWlmICghcmV0KQorCQkJLyogaWYgc3VjY2Vzc2Z1bCAtPiBwcm9wYWdhdGUgKi8KKwkJCXByb3BhZ2F0ZV9yYXRlKGNsaywgMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChjbGstPnBjbGspIHsKKwkJdTMyIG11bHQgPSBjbGstPmRpdl9mYWN0b3IgPyBjbGstPmRpdl9mYWN0b3IgOiAxOworCQlyZXQgPSBjbGtfc2V0X3JhdGUoY2xrLT5wY2xrLCBtdWx0ICogcmF0ZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKKwogLyogcmVnaXN0ZXJzIGNsb2NrIGluIHBsYXRmb3JtIGNsb2NrIGZyYW1ld29yayAqLwogdm9pZCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsa19sb29rdXAgKmNsKQogewotCXN0cnVjdCBjbGsgKmNsayA9IGNsLT5jbGs7CisJc3RydWN0IGNsayAqY2xrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSkKKwlpZiAoIWNsIHx8ICFjbC0+Y2xrKQogCQlyZXR1cm47CisJY2xrID0gY2wtPmNsazsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwogCkBAIC0yMDcsNzEgKzMyNywxNzMgQEAKIAkvKiByb290IGNsb2NrIGRvbid0IGhhdmUgYW55IHBhcmVudHMgKi8KIAlpZiAoIWNsay0+cGNsayAmJiAhY2xrLT5wY2xrX3NlbCkgewogCQlsaXN0X2FkZCgmY2xrLT5zaWJsaW5nLCAmcm9vdF9jbGtzKTsKLQkJLyogYWRkIGNsb2NrcyB3aXRoIG9ubHkgb25lIHBhcmVudCB0byBwYXJlbnQncyBjaGlsZHJlbiBsaXN0ICovCiAJfSBlbHNlIGlmIChjbGstPnBjbGsgJiYgIWNsay0+cGNsa19zZWwpIHsKKwkJLyogYWRkIGNsb2NrcyB3aXRoIG9ubHkgb25lIHBhcmVudCB0byBwYXJlbnQncyBjaGlsZHJlbiBsaXN0ICovCiAJCWxpc3RfYWRkKCZjbGstPnNpYmxpbmcsICZjbGstPnBjbGstPmNoaWxkcmVuKTsKIAl9IGVsc2UgewotCQkvKiBhZGQgY2xvY2tzIHdpdGggPiAxIHBhcmVudCB0byAxc3QgcGFyZW50J3MgY2hpbGRyZW4gbGlzdCAqLwotCQlsaXN0X2FkZCgmY2xrLT5zaWJsaW5nLAotCQkJICZjbGstPnBjbGtfc2VsLT5wY2xrX2luZm9bMF0ucGNsay0+Y2hpbGRyZW4pOworCQkvKiBjbG9ja3Mgd2l0aCBtb3JlIHRoYW4gb25lIHBhcmVudCAqLworCQlzdHJ1Y3QgcGNsa19pbmZvICpwY2xrX2luZm87CisKKwkJcGNsa19pbmZvID0gcGNsa19pbmZvX2dldChjbGspOworCQlpZiAoIXBjbGtfaW5mbykgeworCQkJcHJfZXJyKCJDTEtERVY6IGludmFsaWQgcGNsayBpbmZvIG9mIGNsayB3aXRoIgorCQkJCQkiICVzIGRldl9pZCBhbmQgJXMgY29uX2lkXG4iLAorCQkJCQljbC0+ZGV2X2lkLCBjbC0+Y29uX2lkKTsKKwkJfSBlbHNlIHsKKwkJCWNsay0+cGNsayA9IHBjbGtfaW5mby0+cGNsazsKKwkJCWxpc3RfYWRkKCZjbGstPnNpYmxpbmcsICZwY2xrX2luZm8tPnBjbGstPmNoaWxkcmVuKTsKKwkJfQogCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CiAKKwkvKiBkZWJ1Z2ZzIHNwZWNpZmljICovCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJbGlzdF9hZGQoJmNsay0+bm9kZSwgJmNsb2Nrcyk7CisJY2xrLT5jbCA9IGNsOworI2VuZGlmCisKIAkvKiBhZGQgY2xvY2sgdG8gYXJtIGNsb2NrZGV2IGZyYW1ld29yayAqLwogCWNsa2Rldl9hZGQoY2wpOwogfQogCiAvKioKLSAqIHByb3BhZ2F0ZV9yYXRlIC0gcmVjYWxjdWxhdGUgYW5kIHByb3BhZ2F0ZSBhbGwgY2xvY2tzIGluIGxpc3QgaGVhZAorICogcHJvcGFnYXRlX3JhdGUgLSByZWNhbGN1bGF0ZSBhbmQgcHJvcGFnYXRlIGFsbCBjbG9ja3MgdG8gY2hpbGRyZW4KKyAqIEBwY2xrOiBwYXJlbnQgY2xvY2sgcmVxdWlyZWQgdG8gYmUgcHJvcG9nYXRlZAorICogQG9uX2luaXQ6IGZsYWcgZm9yIGVuYWJsaW5nIGNsb2NrcyB3aGljaCBhcmUgRU5BQkxFRF9PTl9JTklULgogICoKLSAqIFJlY2FsY3VsYXRlcyBhbGwgcm9vdCBjbG9ja3MgaW4gbGlzdCBoZWFkLCB3aGljaCBpZiB0aGUgY2xvY2sncyAucmVjYWxjIGlzCi0gKiBzZXQgY29ycmVjdGx5LCBzaG91bGQgYWxzbyBwcm9wYWdhdGUgdGhlaXIgcmF0ZXMuCisgKiBSZWNhbGN1bGF0ZXMgYWxsIGNoaWxkcmVuIGNsb2NrcwogICovCi1zdGF0aWMgdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgbGlzdF9oZWFkICpsaGVhZCkKK3ZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqcGNsaywgaW50IG9uX2luaXQpCiB7Ci0Jc3RydWN0IGNsayAqY2xrcCwgKl90ZW1wOworCXN0cnVjdCBjbGsgKmNsaywgKl90ZW1wOworCWludCByZXQgPSAwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNsa3AsIF90ZW1wLCBsaGVhZCwgc2libGluZykgewotCQlpZiAoY2xrcC0+cmVjYWxjKQotCQkJY2xrcC0+cmVjYWxjKGNsa3ApOwotCQlwcm9wYWdhdGVfcmF0ZSgmY2xrcC0+Y2hpbGRyZW4pOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbGssIF90ZW1wLCAmcGNsay0+Y2hpbGRyZW4sIHNpYmxpbmcpIHsKKwkJaWYgKGNsay0+cmVjYWxjKSB7CisJCQlyZXQgPSBjbGstPnJlY2FsYyhjbGspOworCQkJLyoKKwkJCSAqIHJlY2FsYyB3aWxsIHJldHVybiBlcnJvciBpZiBjbGsgb3V0IGlzIG5vdCBwcm9ncmFtbWVkCisJCQkgKiBJbiB0aGlzIGNhc2UgY29uZmlndXJlIGRlZmF1bHQgcmF0ZS4KKwkJCSAqLworCQkJaWYgKHJldCAmJiBjbGstPnNldF9yYXRlKQorCQkJCWNsay0+c2V0X3JhdGUoY2xrLCAwKTsKKwkJfQorCQlwcm9wYWdhdGVfcmF0ZShjbGssIG9uX2luaXQpOworCisJCWlmICghb25faW5pdCkKKwkJCWNvbnRpbnVlOworCisJCS8qIEVuYWJsZSBjbGtzIGVuYWJsZWQgb24gaW5pdCwgaW4gc29mdHdhcmUgdmlldyAqLworCQlpZiAoY2xrLT5mbGFncyAmIEVOQUJMRURfT05fSU5JVCkKKwkJCWRvX2Nsa19lbmFibGUoY2xrKTsKIAl9CiB9CiAKLS8qIHJldHVybnMgY3VycmVudCBwcm9ncmFtbWVkIGNsb2NrcyBjbG9jayBpbmZvIHN0cnVjdHVyZSAqLwotc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gKnBjbGtfaW5mb19nZXQoc3RydWN0IGNsayAqY2xrKQorLyoqCisgKiByb3VuZF9yYXRlX2luZGV4IC0gcmV0dXJuIGNsb3Nlc3QgcHJvZ3JhbW1hYmxlIHJhdGUgaW5kZXggaW4gcmF0ZV9jb25maWcgdGJsCisgKiBAY2xrOiBwdHIgdG8gY2xvY2sgc3RydWN0dXJlCisgKiBAZHJhdGU6IGRlc2lyZWQgcmF0ZQorICogQHJhdGU6IGZpbmFsIHJhdGUgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGlzIHZhcmlhYmxlIG9ubHkuCisgKgorICogRmluZHMgaW5kZXggaW4gcmF0ZV9jb25maWcgZm9yIGhpZ2hlc3QgY2xrIHJhdGUgd2hpY2ggaXMgbGVzcyB0aGFuCisgKiByZXF1ZXN0ZWQgcmF0ZS4gSWYgdGhlcmUgaXMgbm8gY2xrIHJhdGUgbGVzc2VyIHRoYW4gcmVxdWVzdGVkIHJhdGUgdGhlbgorICogLUVJTlZBTCBpcyByZXR1cm5lZC4gVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhhdCByYXRlX2NvbmZpZyBpcyB3cml0dGVuCisgKiBpbiBpbmNyZW1lbnRpbmcgb3JkZXIgb2YgY2xrIHJhdGVzLgorICogSWYgZHJhdGUgcGFzc2VkIGlzIHplcm8gdGhlbiBkZWZhdWx0IHJhdGUgaXMgcHJvZ3JhbW1lZC4KKyAqLworc3RhdGljIGludAorcm91bmRfcmF0ZV9pbmRleChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZHJhdGUsIHVuc2lnbmVkIGxvbmcgKnJhdGUpCiB7Ci0JdW5zaWduZWQgaW50IG1hc2ssIGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcGNsa19pbmZvICppbmZvID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHRtcCA9IDAsIHByZXZfcmF0ZSA9IDA7CisJaW50IGluZGV4OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Ci0JbWFzayA9IChyZWFkbChjbGstPnBjbGtfc2VsLT5wY2xrX3NlbF9yZWcpID4+IGNsay0+cGNsa19zZWxfc2hpZnQpCi0JCQkmIGNsay0+cGNsa19zZWwtPnBjbGtfc2VsX21hc2s7CisJaWYgKCFjbGstPmNhbGNfcmF0ZSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2xrLT5wY2xrX3NlbC0+cGNsa19jb3VudDsgaSsrKSB7Ci0JCWlmIChjbGstPnBjbGtfc2VsLT5wY2xrX2luZm9baV0ucGNsa19tYXNrID09IG1hc2spCi0JCQlpbmZvID0gJmNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1tpXTsKKwlpZiAoIWRyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogVGhpcyBsb29wcyBlbmRzIG9uIHR3byBjb25kaXRpb25zOgorCSAqIC0gYXMgc29vbiBhcyBjbGsgaXMgZm91bmQgd2l0aCByYXRlIGdyZWF0ZXIgdGhhbiByZXF1ZXN0ZWQgcmF0ZS4KKwkgKiAtIGlmIGFsbCBjbGtzIGluIHJhdGVfY29uZmlnIGFyZSBzbWFsbGVyIHRoYW4gcmVxdWVzdGVkIHJhdGUuCisJICovCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY2xrLT5yYXRlX2NvbmZpZy5jb3VudDsgaW5kZXgrKykgeworCQlwcmV2X3JhdGUgPSB0bXA7CisJCXRtcCA9IGNsay0+Y2FsY19yYXRlKGNsaywgaW5kZXgpOworCQlpZiAoZHJhdGUgPCB0bXApIHsKKwkJCWluZGV4LS07CisJCQlicmVhazsKKwkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCS8qIHJldHVybiBpZiBjYW4ndCBmaW5kIHN1aXRhYmxlIGNsb2NrICovCisJaWYgKGluZGV4IDwgMCkgeworCQlpbmRleCA9IC1FSU5WQUw7CisJCSpyYXRlID0gMDsKKwl9IGVsc2UgaWYgKGluZGV4ID09IGNsay0+cmF0ZV9jb25maWcuY291bnQpIHsKKwkJLyogcHJvZ3JhbSB3aXRoIGhpZ2hlc3QgY2xrIHJhdGUgcG9zc2libGUgKi8KKwkJaW5kZXggPSBjbGstPnJhdGVfY29uZmlnLmNvdW50IC0gMTsKKwkJKnJhdGUgPSB0bXA7CisJfSBlbHNlCisJCSpyYXRlID0gcHJldl9yYXRlOwogCi0JcmV0dXJuIGluZm87CisJcmV0dXJuIGluZGV4OwogfQogCisvKioKKyAqIGNsa19yb3VuZF9yYXRlIC0gYWRqdXN0IGEgcmF0ZSB0byB0aGUgZXhhY3QgcmF0ZSBhIGNsb2NrIGNhbiBwcm92aWRlCisgKiBAY2xrOiBjbG9jayBzb3VyY2UKKyAqIEByYXRlOiBkZXNpcmVkIGNsb2NrIHJhdGUgaW4gSHoKKyAqCisgKiBSZXR1cm5zIHJvdW5kZWQgY2xvY2sgcmF0ZSBpbiBIeiwgb3IgbmVnYXRpdmUgZXJybm8uCisgKi8KK2xvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIGRyYXRlKQoreworCWxvbmcgcmF0ZSA9IDA7CisJaW50IGluZGV4OworCisJLyoKKwkgKiBwcm9wYWdhdGUgY2FsbCB0byBwYXJlbnQgd2hvIHN1cHBvcnRzIGNhbGNfcmF0ZS4gU2ltaWxhciBhcHByb2FjaCBpcworCSAqIHVzZWQgaW4gY2xrX3NldF9yYXRlLgorCSAqLworCWlmICghY2xrLT5jYWxjX3JhdGUpIHsKKwkJdTMyIG11bHQ7CisJCWlmICghY2xrLT5wY2xrKQorCQkJcmV0dXJuIGNsay0+cmF0ZTsKKworCQltdWx0ID0gY2xrLT5kaXZfZmFjdG9yID8gY2xrLT5kaXZfZmFjdG9yIDogMTsKKwkJcmV0dXJuIGNsa19yb3VuZF9yYXRlKGNsay0+cGNsaywgbXVsdCAqIGRyYXRlKSAvIG11bHQ7CisJfQorCisJaW5kZXggPSByb3VuZF9yYXRlX2luZGV4KGNsaywgZHJhdGUsICZyYXRlKTsKKwlpZiAoaW5kZXggPj0gMCkKKwkJcmV0dXJuIHJhdGU7CisJZWxzZQorCQlyZXR1cm4gaW5kZXg7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19yb3VuZF9yYXRlKTsKKworLypBbGwgYmVsb3cgZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQgKi8KKwogLyoKLSAqIFNldCBwY2xrIGFzIGNjbGsncyBwYXJlbnQgYW5kIGFkZCBjbG9jayBzaWJsaW5nIG5vZGUgdG8gY3VycmVudCBwYXJlbnRzCi0gKiBjaGlsZHJlbiBsaXN0CisgKiBDYWxjdWxhdGVzIHBsbCBjbGsgcmF0ZSBmb3Igc3BlY2lmaWMgdmFsdWUgb2YgbW9kZSwgbSwgbiBhbmQgcAorICoKKyAqIEluIG5vcm1hbCBtb2RlCisgKiByYXRlID0gKDIgKiBNWzE1OjhdICogRmluKS8oTiAqIDJeUCkKKyAqCisgKiBJbiBEaXRoZXJlZCBtb2RlCisgKiByYXRlID0gKDIgKiBNWzE1OjBdICogRmluKS8oMjU2ICogTiAqIDJeUCkKICAqLwotc3RhdGljIHZvaWQgY2hhbmdlX3BhcmVudChzdHJ1Y3QgY2xrICpjY2xrLCBzdHJ1Y3QgY2xrICpwY2xrKQordW5zaWduZWQgbG9uZyBwbGxfY2FsY19yYXRlKHN0cnVjdCBjbGsgKmNsaywgaW50IGluZGV4KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrLT5wY2xrLT5yYXRlOworCXN0cnVjdCBwbGxfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisJdW5zaWduZWQgaW50IG1vZGU7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmY2Nsay0+c2libGluZyk7Ci0JbGlzdF9hZGQoJmNjbGstPnNpYmxpbmcsICZwY2xrLT5jaGlsZHJlbik7Ci0KLQljY2xrLT5wY2xrID0gcGNsazsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCW1vZGUgPSB0YmxzW2luZGV4XS5tb2RlID8gMjU2IDogMTsKKwlyZXR1cm4gKCgoMiAqIHJhdGUgLyAxMDAwMCkgKiB0YmxzW2luZGV4XS5tKSAvCisJCQkobW9kZSAqIHRibHNbaW5kZXhdLm4gKiAoMSA8PCB0YmxzW2luZGV4XS5wKSkpICogMTAwMDA7CiB9CiAKIC8qCkBAIC0yODMsNDcgKzUwNSwxNDYgQEAKICAqIEluIERpdGhlcmVkIG1vZGUKICAqIHJhdGUgPSAoMiAqIE1bMTU6MF0gKiBGaW4pLygyNTYgKiBOICogMl5QKQogICovCi12b2lkIHBsbDFfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitpbnQgcGxsX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewogCXN0cnVjdCBwbGxfY2xrX2NvbmZpZyAqY29uZmlnID0gY2xrLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IG51bSA9IDIsIGRlbiA9IDAsIHZhbCwgbW9kZSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCW1vZGUgPSAocmVhZGwoY29uZmlnLT5tb2RlX3JlZykgPj4gUExMX01PREVfU0hJRlQpICYKLQkJUExMX01PREVfTUFTSzsKKwltb2RlID0gKHJlYWRsKGNvbmZpZy0+bW9kZV9yZWcpID4+IGNvbmZpZy0+bWFza3MtPm1vZGVfc2hpZnQpICYKKwkJY29uZmlnLT5tYXNrcy0+bW9kZV9tYXNrOwogCiAJdmFsID0gcmVhZGwoY29uZmlnLT5jZmdfcmVnKTsKIAkvKiBjYWxjdWxhdGUgZGVub21pbmF0b3IgKi8KLQlkZW4gPSAodmFsID4+IFBMTF9ESVZfUF9TSElGVCkgJiBQTExfRElWX1BfTUFTSzsKKwlkZW4gPSAodmFsID4+IGNvbmZpZy0+bWFza3MtPmRpdl9wX3NoaWZ0KSAmIGNvbmZpZy0+bWFza3MtPmRpdl9wX21hc2s7CiAJZGVuID0gMSA8PCBkZW47Ci0JZGVuICo9ICh2YWwgPj4gUExMX0RJVl9OX1NISUZUKSAmIFBMTF9ESVZfTl9NQVNLOworCWRlbiAqPSAodmFsID4+IGNvbmZpZy0+bWFza3MtPmRpdl9uX3NoaWZ0KSAmIGNvbmZpZy0+bWFza3MtPmRpdl9uX21hc2s7CiAKIAkvKiBjYWxjdWxhdGUgbnVtZXJhdG9yICYgZGVub21pbmF0b3IgKi8KIAlpZiAoIW1vZGUpIHsKIAkJLyogTm9ybWFsIG1vZGUgKi8KLQkJbnVtICo9ICh2YWwgPj4gUExMX05PUk1fRkRCS19NX1NISUZUKSAmIFBMTF9OT1JNX0ZEQktfTV9NQVNLOworCQludW0gKj0gKHZhbCA+PiBjb25maWctPm1hc2tzLT5ub3JtX2ZkYmtfbV9zaGlmdCkgJgorCQkJY29uZmlnLT5tYXNrcy0+bm9ybV9mZGJrX21fbWFzazsKIAl9IGVsc2UgewogCQkvKiBEaXRoZXJlZCBtb2RlICovCi0JCW51bSAqPSAodmFsID4+IFBMTF9ESVRIX0ZEQktfTV9TSElGVCkgJiBQTExfRElUSF9GREJLX01fTUFTSzsKKwkJbnVtICo9ICh2YWwgPj4gY29uZmlnLT5tYXNrcy0+ZGl0aF9mZGJrX21fc2hpZnQpICYKKwkJCWNvbmZpZy0+bWFza3MtPmRpdGhfZmRia19tX21hc2s7CiAJCWRlbiAqPSAyNTY7CiAJfQogCisJaWYgKCFkZW4pCisJCXJldHVybiAtRUlOVkFMOworCiAJY2xrLT5yYXRlID0gKCgoY2xrLT5wY2xrLT5yYXRlLzEwMDAwKSAqIG51bSkgLyBkZW4pICogMTAwMDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbmZpZ3VyZXMgbmV3IGNsb2NrIHJhdGUgb2YgcGxsCisgKi8KK2ludCBwbGxfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkZXNpcmVkX3JhdGUpCit7CisJc3RydWN0IHBsbF9yYXRlX3RibCAqdGJscyA9IGNsay0+cmF0ZV9jb25maWcudGJsczsKKwlzdHJ1Y3QgcGxsX2Nsa19jb25maWcgKmNvbmZpZyA9IGNsay0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsLCByYXRlOworCWludCBpOworCisJaSA9IHJvdW5kX3JhdGVfaW5kZXgoY2xrLCBkZXNpcmVkX3JhdGUsICZyYXRlKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiBpOworCisJdmFsID0gcmVhZGwoY29uZmlnLT5tb2RlX3JlZykgJgorCQl+KGNvbmZpZy0+bWFza3MtPm1vZGVfbWFzayA8PCBjb25maWctPm1hc2tzLT5tb2RlX3NoaWZ0KTsKKwl2YWwgfD0gKHRibHNbaV0ubW9kZSAmIGNvbmZpZy0+bWFza3MtPm1vZGVfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+bW9kZV9zaGlmdDsKKwl3cml0ZWwodmFsLCBjb25maWctPm1vZGVfcmVnKTsKKworCXZhbCA9IHJlYWRsKGNvbmZpZy0+Y2ZnX3JlZykgJgorCQl+KGNvbmZpZy0+bWFza3MtPmRpdl9wX21hc2sgPDwgY29uZmlnLT5tYXNrcy0+ZGl2X3Bfc2hpZnQpOworCXZhbCB8PSAodGJsc1tpXS5wICYgY29uZmlnLT5tYXNrcy0+ZGl2X3BfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+ZGl2X3Bfc2hpZnQ7CisJdmFsICY9IH4oY29uZmlnLT5tYXNrcy0+ZGl2X25fbWFzayA8PCBjb25maWctPm1hc2tzLT5kaXZfbl9zaGlmdCk7CisJdmFsIHw9ICh0YmxzW2ldLm4gJiBjb25maWctPm1hc2tzLT5kaXZfbl9tYXNrKSA8PAorCQljb25maWctPm1hc2tzLT5kaXZfbl9zaGlmdDsKKwl2YWwgJj0gfihjb25maWctPm1hc2tzLT5kaXRoX2ZkYmtfbV9tYXNrIDw8CisJCQljb25maWctPm1hc2tzLT5kaXRoX2ZkYmtfbV9zaGlmdCk7CisJaWYgKHRibHNbaV0ubW9kZSkKKwkJdmFsIHw9ICh0YmxzW2ldLm0gJiBjb25maWctPm1hc2tzLT5kaXRoX2ZkYmtfbV9tYXNrKSA8PAorCQkJY29uZmlnLT5tYXNrcy0+ZGl0aF9mZGJrX21fc2hpZnQ7CisJZWxzZQorCQl2YWwgfD0gKHRibHNbaV0ubSAmIGNvbmZpZy0+bWFza3MtPm5vcm1fZmRia19tX21hc2spIDw8CisJCQljb25maWctPm1hc2tzLT5ub3JtX2ZkYmtfbV9zaGlmdDsKKworCXdyaXRlbCh2YWwsIGNvbmZpZy0+Y2ZnX3JlZyk7CisKKwljbGstPnJhdGUgPSByYXRlOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxjdWxhdGVzIGFoYiwgYXBiIGNsayByYXRlIGZvciBzcGVjaWZpYyB2YWx1ZSBvZiBkaXYKKyAqLwordW5zaWduZWQgbG9uZyBidXNfY2FsY19yYXRlKHN0cnVjdCBjbGsgKmNsaywgaW50IGluZGV4KQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsay0+cGNsay0+cmF0ZTsKKwlzdHJ1Y3QgYnVzX3JhdGVfdGJsICp0YmxzID0gY2xrLT5yYXRlX2NvbmZpZy50YmxzOworCisJcmV0dXJuIHJhdGUgLyAodGJsc1tpbmRleF0uZGl2ICsgMSk7CiB9CiAKIC8qIGNhbGN1bGF0ZXMgY3VycmVudCBwcm9ncmFtbWVkIHJhdGUgb2YgYWhiIG9yIGFwYiBidXMgKi8KLXZvaWQgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoraW50IGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlzdHJ1Y3QgYnVzX2Nsa19jb25maWcgKmNvbmZpZyA9IGNsay0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBkaXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCWRpdiA9ICgocmVhZGwoY29uZmlnLT5yZWcpID4+IGNvbmZpZy0+c2hpZnQpICYgY29uZmlnLT5tYXNrKSArIDE7CisJZGl2ID0gKChyZWFkbChjb25maWctPnJlZykgPj4gY29uZmlnLT5tYXNrcy0+c2hpZnQpICYKKwkJCWNvbmZpZy0+bWFza3MtPm1hc2spICsgMTsKKworCWlmICghZGl2KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWNsay0+cmF0ZSA9ICh1bnNpZ25lZCBsb25nKWNsay0+cGNsay0+cmF0ZSAvIGRpdjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKiBDb25maWd1cmVzIG5ldyBjbG9jayByYXRlIG9mIEFIQiBPUiBBUEIgYnVzICovCitpbnQgYnVzX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZGVzaXJlZF9yYXRlKQoreworCXN0cnVjdCBidXNfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisJc3RydWN0IGJ1c19jbGtfY29uZmlnICpjb25maWcgPSBjbGstPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbCwgcmF0ZTsKKwlpbnQgaTsKKworCWkgPSByb3VuZF9yYXRlX2luZGV4KGNsaywgZGVzaXJlZF9yYXRlLCAmcmF0ZSk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gaTsKKworCXZhbCA9IHJlYWRsKGNvbmZpZy0+cmVnKSAmCisJCX4oY29uZmlnLT5tYXNrcy0+bWFzayA8PCBjb25maWctPm1hc2tzLT5zaGlmdCk7CisJdmFsIHw9ICh0YmxzW2ldLmRpdiAmIGNvbmZpZy0+bWFza3MtPm1hc2spIDw8IGNvbmZpZy0+bWFza3MtPnNoaWZ0OworCXdyaXRlbCh2YWwsIGNvbmZpZy0+cmVnKTsKKworCWNsay0+cmF0ZSA9IHJhdGU7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGdpdmVzIHJhdGUgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgZXEsIHggYW5kIHkKKyAqCisgKiBGb3V0IGZyb20gc3ludGhlc2l6ZXIgY2FuIGJlIGdpdmVuIGZyb20gdHdvIGVxdWF0aW9uczoKKyAqIEZvdXQxID0gKEZpbiAqIFgvWSkvMgkJRVExCisgKiBGb3V0MiA9IEZpbiAqIFgvWQkJCUVRMgorICovCit1bnNpZ25lZCBsb25nIGF1eF9jYWxjX3JhdGUoc3RydWN0IGNsayAqY2xrLCBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrLT5wY2xrLT5yYXRlOworCXN0cnVjdCBhdXhfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisJdTggZXEgPSB0YmxzW2luZGV4XS5lcSA/IDEgOiAyOworCisJcmV0dXJuICgoKHJhdGUvMTAwMDApICogdGJsc1tpbmRleF0ueHNjYWxlKSAvCisJCQkodGJsc1tpbmRleF0ueXNjYWxlICogZXEpKSAqIDEwMDAwOwogfQogCiAvKgpAQCAtMzM2LDQ0ICs2NTcsNzYgQEAKICAqCiAgKiBTZWxlY3Rpb24gb2YgZXFuIDEgb3IgMiBpcyBwcm9ncmFtbWVkIGluIHJlZ2lzdGVyCiAgKi8KLXZvaWQgYXV4X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoraW50IGF1eF9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlzdHJ1Y3QgYXV4X2Nsa19jb25maWcgKmNvbmZpZyA9IGNsay0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBwY2xrX2luZm8gKnBjbGtfaW5mbyA9IE5VTEw7CiAJdW5zaWduZWQgaW50IG51bSA9IDEsIGRlbiA9IDEsIHZhbCwgZXFuOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBnZXQgY3VycmVudCBwcm9ncmFtbWVkIHBhcmVudCAqLwotCXBjbGtfaW5mbyA9IHBjbGtfaW5mb19nZXQoY2xrKTsKLQlpZiAoIXBjbGtfaW5mbykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQkJY2xrLT5wY2xrID0gTlVMTDsKLQkJY2xrLT5yYXRlID0gMDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KKwl2YWwgPSByZWFkbChjb25maWctPnN5bnRoX3JlZyk7CiAKLQljaGFuZ2VfcGFyZW50KGNsaywgcGNsa19pbmZvLT5wY2xrKTsKKwllcW4gPSAodmFsID4+IGNvbmZpZy0+bWFza3MtPmVxX3NlbF9zaGlmdCkgJgorCQljb25maWctPm1hc2tzLT5lcV9zZWxfbWFzazsKKwlpZiAoZXFuID09IGNvbmZpZy0+bWFza3MtPmVxMV9tYXNrKQorCQlkZW4gKj0gMjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCWlmIChwY2xrX2luZm8tPnNjYWxhYmxlKSB7Ci0JCXZhbCA9IHJlYWRsKGNvbmZpZy0+c3ludGhfcmVnKTsKKwkvKiBjYWxjdWxhdGUgbnVtZXJhdG9yICovCisJbnVtID0gKHZhbCA+PiBjb25maWctPm1hc2tzLT54c2NhbGVfc2VsX3NoaWZ0KSAmCisJCWNvbmZpZy0+bWFza3MtPnhzY2FsZV9zZWxfbWFzazsKIAotCQllcW4gPSAodmFsID4+IEFVWF9FUV9TRUxfU0hJRlQpICYgQVVYX0VRX1NFTF9NQVNLOwotCQlpZiAoZXFuID09IEFVWF9FUTFfU0VMKQotCQkJZGVuICo9IDI7CisJLyogY2FsY3VsYXRlIGRlbm9taW5hdG9yICovCisJZGVuICo9ICh2YWwgPj4gY29uZmlnLT5tYXNrcy0+eXNjYWxlX3NlbF9zaGlmdCkgJgorCQljb25maWctPm1hc2tzLT55c2NhbGVfc2VsX21hc2s7CiAKLQkJLyogY2FsY3VsYXRlIG51bWVyYXRvciAqLwotCQludW0gPSAodmFsID4+IEFVWF9YU0NBTEVfU0hJRlQpICYgQVVYX1hTQ0FMRV9NQVNLOworCWlmICghZGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBjYWxjdWxhdGUgZGVub21pbmF0b3IgKi8KLQkJZGVuICo9ICh2YWwgPj4gQVVYX1lTQ0FMRV9TSElGVCkgJiBBVVhfWVNDQUxFX01BU0s7Ci0JCXZhbCA9ICgoKGNsay0+cGNsay0+cmF0ZS8xMDAwMCkgKiBudW0pIC8gZGVuKSAqIDEwMDAwOwotCX0gZWxzZQotCQl2YWwgPSBjbGstPnBjbGstPnJhdGU7CisJY2xrLT5yYXRlID0gKCgoY2xrLT5wY2xrLT5yYXRlLzEwMDAwKSAqIG51bSkgLyBkZW4pICogMTAwMDA7CisJcmV0dXJuIDA7Cit9CiAKLQljbGstPnJhdGUgPSB2YWw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKy8qIENvbmZpZ3VyZXMgbmV3IGNsb2NrIHJhdGUgb2YgYXV4aWxpYXJ5IHN5bnRoZXNpemVycyB1c2VkIGJ5OiBVQVJULCBGSVJEQSovCitpbnQgYXV4X2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZGVzaXJlZF9yYXRlKQoreworCXN0cnVjdCBhdXhfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisJc3RydWN0IGF1eF9jbGtfY29uZmlnICpjb25maWcgPSBjbGstPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbCwgcmF0ZTsKKwlpbnQgaTsKKworCWkgPSByb3VuZF9yYXRlX2luZGV4KGNsaywgZGVzaXJlZF9yYXRlLCAmcmF0ZSk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gaTsKKworCXZhbCA9IHJlYWRsKGNvbmZpZy0+c3ludGhfcmVnKSAmCisJCX4oY29uZmlnLT5tYXNrcy0+ZXFfc2VsX21hc2sgPDwgY29uZmlnLT5tYXNrcy0+ZXFfc2VsX3NoaWZ0KTsKKwl2YWwgfD0gKHRibHNbaV0uZXEgJiBjb25maWctPm1hc2tzLT5lcV9zZWxfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+ZXFfc2VsX3NoaWZ0OworCXZhbCAmPSB+KGNvbmZpZy0+bWFza3MtPnhzY2FsZV9zZWxfbWFzayA8PAorCQkJY29uZmlnLT5tYXNrcy0+eHNjYWxlX3NlbF9zaGlmdCk7CisJdmFsIHw9ICh0YmxzW2ldLnhzY2FsZSAmIGNvbmZpZy0+bWFza3MtPnhzY2FsZV9zZWxfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+eHNjYWxlX3NlbF9zaGlmdDsKKwl2YWwgJj0gfihjb25maWctPm1hc2tzLT55c2NhbGVfc2VsX21hc2sgPDwKKwkJCWNvbmZpZy0+bWFza3MtPnlzY2FsZV9zZWxfc2hpZnQpOworCXZhbCB8PSAodGJsc1tpXS55c2NhbGUgJiBjb25maWctPm1hc2tzLT55c2NhbGVfc2VsX21hc2spIDw8CisJCWNvbmZpZy0+bWFza3MtPnlzY2FsZV9zZWxfc2hpZnQ7CisJd3JpdGVsKHZhbCwgY29uZmlnLT5zeW50aF9yZWcpOworCisJY2xrLT5yYXRlID0gcmF0ZTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ2FsY3VsYXRlcyBncHQgY2xrIHJhdGUgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgbXNjYWxlIGFuZCBuc2NhbGUKKyAqCisgKiBGb3V0PSBGaW4vKCgyIF4gKE4rMSkpICogKE0rMSkpCisgKi8KK3Vuc2lnbmVkIGxvbmcgZ3B0X2NhbGNfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIGludCBpbmRleCkKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGstPnBjbGstPnJhdGU7CisJc3RydWN0IGdwdF9yYXRlX3RibCAqdGJscyA9IGNsay0+cmF0ZV9jb25maWcudGJsczsKKworCXJldHVybiByYXRlIC8gKCgxIDw8ICh0YmxzW2luZGV4XS5uc2NhbGUgKyAxKSkgKgorCQkJKHRibHNbaW5kZXhdLm1zY2FsZSArIDEpKTsKIH0KIAogLyoKQEAgLTM4MSw0NiArNzM0LDE0MiBAQAogICogRm91dCBmcm9tIHN5bnRoZXNpemVyIGNhbiBiZSBnaXZlbiBmcm9tIGJlbG93IGVxdWF0aW9uczoKICAqIEZvdXQ9IEZpbi8oKDIgXiAoTisxKSkgKiAoTSsxKSkKICAqLwotdm9pZCBncHRfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitpbnQgZ3B0X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCXN0cnVjdCBhdXhfY2xrX2NvbmZpZyAqY29uZmlnID0gY2xrLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHBjbGtfaW5mbyAqcGNsa19pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgZ3B0X2Nsa19jb25maWcgKmNvbmZpZyA9IGNsay0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBkaXYgPSAxLCB2YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXBjbGtfaW5mbyA9IHBjbGtfaW5mb19nZXQoY2xrKTsKLQlpZiAoIXBjbGtfaW5mbykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQkJY2xrLT5wY2xrID0gTlVMTDsKLQkJY2xrLT5yYXRlID0gMDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KKwl2YWwgPSByZWFkbChjb25maWctPnN5bnRoX3JlZyk7CisJZGl2ICs9ICh2YWwgPj4gY29uZmlnLT5tYXNrcy0+bXNjYWxlX3NlbF9zaGlmdCkgJgorCQljb25maWctPm1hc2tzLT5tc2NhbGVfc2VsX21hc2s7CisJZGl2ICo9IDEgPDwgKCgodmFsID4+IGNvbmZpZy0+bWFza3MtPm5zY2FsZV9zZWxfc2hpZnQpICYKKwkJCQljb25maWctPm1hc2tzLT5uc2NhbGVfc2VsX21hc2spICsgMSk7CiAKLQljaGFuZ2VfcGFyZW50KGNsaywgcGNsa19pbmZvLT5wY2xrKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCWlmIChwY2xrX2luZm8tPnNjYWxhYmxlKSB7Ci0JCXZhbCA9IHJlYWRsKGNvbmZpZy0+c3ludGhfcmVnKTsKLQkJZGl2ICs9ICh2YWwgPj4gR1BUX01TQ0FMRV9TSElGVCkgJiBHUFRfTVNDQUxFX01BU0s7Ci0JCWRpdiAqPSAxIDw8ICgoKHZhbCA+PiBHUFRfTlNDQUxFX1NISUZUKSAmIEdQVF9OU0NBTEVfTUFTSykgKyAxKTsKLQl9CisJaWYgKCFkaXYpCisJCXJldHVybiAtRUlOVkFMOwogCiAJY2xrLT5yYXRlID0gKHVuc2lnbmVkIGxvbmcpY2xrLT5wY2xrLT5yYXRlIC8gZGl2OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIENvbmZpZ3VyZXMgbmV3IGNsb2NrIHJhdGUgb2YgZ3B0aWxpYXJ5IHN5bnRoZXNpemVycyB1c2VkIGJ5OiBVQVJULCBGSVJEQSovCitpbnQgZ3B0X2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZGVzaXJlZF9yYXRlKQoreworCXN0cnVjdCBncHRfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisJc3RydWN0IGdwdF9jbGtfY29uZmlnICpjb25maWcgPSBjbGstPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbCwgcmF0ZTsKKwlpbnQgaTsKKworCWkgPSByb3VuZF9yYXRlX2luZGV4KGNsaywgZGVzaXJlZF9yYXRlLCAmcmF0ZSk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gaTsKKworCXZhbCA9IHJlYWRsKGNvbmZpZy0+c3ludGhfcmVnKSAmIH4oY29uZmlnLT5tYXNrcy0+bXNjYWxlX3NlbF9tYXNrIDw8CisJCQljb25maWctPm1hc2tzLT5tc2NhbGVfc2VsX3NoaWZ0KTsKKwl2YWwgfD0gKHRibHNbaV0ubXNjYWxlICYgY29uZmlnLT5tYXNrcy0+bXNjYWxlX3NlbF9tYXNrKSA8PAorCQljb25maWctPm1hc2tzLT5tc2NhbGVfc2VsX3NoaWZ0OworCXZhbCAmPSB+KGNvbmZpZy0+bWFza3MtPm5zY2FsZV9zZWxfbWFzayA8PAorCQkJY29uZmlnLT5tYXNrcy0+bnNjYWxlX3NlbF9zaGlmdCk7CisJdmFsIHw9ICh0YmxzW2ldLm5zY2FsZSAmIGNvbmZpZy0+bWFza3MtPm5zY2FsZV9zZWxfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+bnNjYWxlX3NlbF9zaGlmdDsKKwl3cml0ZWwodmFsLCBjb25maWctPnN5bnRoX3JlZyk7CisKKwljbGstPnJhdGUgPSByYXRlOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhbHdheXMgaGF2ZSBzYW1lIHZhbHVlIGFzIHRoZSBwYXJlbnQgY2xvY2sgZGl2aWRlZCBieSBhCisgKiBDYWxjdWxhdGVzIGNsY2QgY2xrIHJhdGUgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgZGl2CisgKgorICogRm91dCBmcm9tIHN5bnRoZXNpemVyIGNhbiBiZSBnaXZlbiBmcm9tIGJlbG93IGVxdWF0aW9uOgorICogRm91dD0gRmluLzIqZGl2IChkaXZpc2lvbiBmYWN0b3IpCisgKiBkaXYgaXMgMTcgYml0czotCisgKgkwLTEzIChmcmFjdGlvbmFsIHBhcnQpCisgKgkxNC0xNiAoaW50ZWdlciBwYXJ0KQorICogVG8gY2FsY3VsYXRlIEZvdXQgd2UgbGVmdCBzaGlmdCB2YWwgYnkgMTQgYml0cyBhbmQgZGl2aWRlIEZpbiBieQorICogY29tcGxldGUgZGl2IChpbmNsdWRpbmcgZnJhY3Rpb25hbCBwYXJ0KSBhbmQgdGhlbiByaWdodCBzaGlmdCB0aGUKKyAqIHJlc3VsdCBieSAxNCBwbGFjZXMuCisgKi8KK3Vuc2lnbmVkIGxvbmcgY2xjZF9jYWxjX3JhdGUoc3RydWN0IGNsayAqY2xrLCBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrLT5wY2xrLT5yYXRlOworCXN0cnVjdCBjbGNkX3JhdGVfdGJsICp0YmxzID0gY2xrLT5yYXRlX2NvbmZpZy50YmxzOworCisJcmF0ZSAvPSAxMDAwOworCXJhdGUgPDw9IDEyOworCXJhdGUgLz0gKDIgKiB0YmxzW2luZGV4XS5kaXYpOworCXJhdGUgPj49IDEyOworCXJhdGUgKj0gMTAwMDsKKworCXJldHVybiByYXRlOworfQorCisvKgorICogY2FsY3VsYXRlcyBjdXJyZW50IHByb2dyYW1tZWQgcmF0ZSBvZiBjbGNkIHN5bnRoZXNpemVyCisgKiBGb3V0IGZyb20gc3ludGhlc2l6ZXIgY2FuIGJlIGdpdmVuIGZyb20gYmVsb3cgZXF1YXRpb246CisgKiBGb3V0PSBGaW4vMipkaXYgKGRpdmlzaW9uIGZhY3RvcikKKyAqIGRpdiBpcyAxNyBiaXRzOi0KKyAqCTAtMTMgKGZyYWN0aW9uYWwgcGFydCkKKyAqCTE0LTE2IChpbnRlZ2VyIHBhcnQpCisgKiBUbyBjYWxjdWxhdGUgRm91dCB3ZSBsZWZ0IHNoaWZ0IHZhbCBieSAxNCBiaXRzIGFuZCBkaXZpZGUgRmluIGJ5CisgKiBjb21wbGV0ZSBkaXYgKGluY2x1ZGluZyBmcmFjdGlvbmFsIHBhcnQpIGFuZCB0aGVuIHJpZ2h0IHNoaWZ0IHRoZQorICogcmVzdWx0IGJ5IDE0IHBsYWNlcy4KKyAqLworaW50IGNsY2RfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IGNsY2RfY2xrX2NvbmZpZyAqY29uZmlnID0gY2xrLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGRpdiA9IDE7CisJdW5zaWduZWQgbG9uZyBwcmF0ZTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gcmVhZGwoY29uZmlnLT5zeW50aF9yZWcpOworCWRpdiA9ICh2YWwgPj4gY29uZmlnLT5tYXNrcy0+ZGl2X2ZhY3Rvcl9zaGlmdCkgJgorCQljb25maWctPm1hc2tzLT5kaXZfZmFjdG9yX21hc2s7CisKKwlpZiAoIWRpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcmF0ZSA9IGNsay0+cGNsay0+cmF0ZSAvIDEwMDA7IC8qIGZpcnN0IGxldmVsIGRpdmlzaW9uLCBtYWtlIGl0IEtIeiAqLworCisJY2xrLT5yYXRlID0gKCgodW5zaWduZWQgbG9uZylwcmF0ZSA8PCAxMikgLyAoMiAqIGRpdikpID4+IDEyOworCWNsay0+cmF0ZSAqPSAxMDAwOworCXJldHVybiAwOworfQorCisvKiBDb25maWd1cmVzIG5ldyBjbG9jayByYXRlIG9mIGF1eGlsaWFyeSBzeW50aGVzaXplcnMgdXNlZCBieTogVUFSVCwgRklSREEqLworaW50IGNsY2RfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkZXNpcmVkX3JhdGUpCit7CisJc3RydWN0IGNsY2RfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisJc3RydWN0IGNsY2RfY2xrX2NvbmZpZyAqY29uZmlnID0gY2xrLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWwsIHJhdGU7CisJaW50IGk7CisKKwlpID0gcm91bmRfcmF0ZV9pbmRleChjbGssIGRlc2lyZWRfcmF0ZSwgJnJhdGUpOworCWlmIChpIDwgMCkKKwkJcmV0dXJuIGk7CisKKwl2YWwgPSByZWFkbChjb25maWctPnN5bnRoX3JlZykgJiB+KGNvbmZpZy0+bWFza3MtPmRpdl9mYWN0b3JfbWFzayA8PAorCQkJY29uZmlnLT5tYXNrcy0+ZGl2X2ZhY3Rvcl9zaGlmdCk7CisJdmFsIHw9ICh0YmxzW2ldLmRpdiAmIGNvbmZpZy0+bWFza3MtPmRpdl9mYWN0b3JfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+ZGl2X2ZhY3Rvcl9zaGlmdDsKKwl3cml0ZWwodmFsLCBjb25maWctPnN5bnRoX3JlZyk7CisKKwljbGstPnJhdGUgPSByYXRlOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhbHdheXMgaGF2ZSB2YWx1ZSBhcyB0aGUgcGFyZW50IGNsb2NrIGRpdmlkZWQgYnkgYQogICogZml4ZWQgZGl2aXNvcgogICovCi12b2lkIGZvbGxvd19wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoraW50IGZvbGxvd19wYXJlbnQoc3RydWN0IGNsayAqY2xrKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGRpdl9mYWN0b3IgPSAoY2xrLT5kaXZfZmFjdG9yIDwgMSkgPyAxIDogY2xrLT5kaXZfZmFjdG9yOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Ci0JY2xrLT5yYXRlID0gY2xrLT5wY2xrLT5yYXRlOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJY2xrLT5yYXRlID0gY2xrLT5wY2xrLT5yYXRlL2Rpdl9mYWN0b3I7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNDMxLDUgKzg4MCwxMjQgQEAKICAqLwogdm9pZCByZWNhbGNfcm9vdF9jbG9ja3Modm9pZCkKIHsKLQlwcm9wYWdhdGVfcmF0ZSgmcm9vdF9jbGtzKTsKKwlzdHJ1Y3QgY2xrICpwY2xrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjbGssICZyb290X2Nsa3MsIHNpYmxpbmcpIHsKKwkJaWYgKHBjbGstPnJlY2FsYykgeworCQkJcmV0ID0gcGNsay0+cmVjYWxjKHBjbGspOworCQkJLyoKKwkJCSAqIHJlY2FsYyB3aWxsIHJldHVybiBlcnJvciBpZiBjbGsgb3V0IGlzIG5vdCBwcm9ncmFtbWVkCisJCQkgKiBJbiB0aGlzIGNhc2UgY29uZmlndXJlIGRlZmF1bHQgY2xvY2suCisJCQkgKi8KKwkJCWlmIChyZXQgJiYgcGNsay0+c2V0X3JhdGUpCisJCQkJcGNsay0+c2V0X3JhdGUocGNsaywgMCk7CisJCX0KKwkJcHJvcGFnYXRlX3JhdGUocGNsaywgMSk7CisJCS8qIEVuYWJsZSBjbGtzIGVuYWJsZWQgb24gaW5pdCwgaW4gc29mdHdhcmUgdmlldyAqLworCQlpZiAocGNsay0+ZmxhZ3MgJiBFTkFCTEVEX09OX0lOSVQpCisJCQlkb19jbGtfZW5hYmxlKHBjbGspOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwogfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisvKgorICoJZGVidWdmcyBzdXBwb3J0IHRvIHRyYWNlIGNsb2NrIHRyZWUgaGllcmFyY2h5IGFuZCBhdHRyaWJ1dGVzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjbGtfZGVidWdmc19yb290Oworc3RhdGljIGludCBjbGtfZGVidWdmc19yZWdpc3Rlcl9vbmUoc3RydWN0IGNsayAqYykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBkZW50cnkgKmQsICpjaGlsZDsKKwlzdHJ1Y3QgY2xrICpwYSA9IGMtPnBjbGs7CisJY2hhciBzWzI1NV07CisJY2hhciAqcCA9IHM7CisKKwlpZiAoYykgeworCQlpZiAoYy0+Y2wtPmNvbl9pZCkKKwkJCXAgKz0gc3ByaW50ZihwLCAiJXMiLCBjLT5jbC0+Y29uX2lkKTsKKwkJaWYgKGMtPmNsLT5kZXZfaWQpCisJCQlwICs9IHNwcmludGYocCwgIiVzIiwgYy0+Y2wtPmRldl9pZCk7CisJfQorCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocywgcGEgPyBwYS0+ZGVudCA6IGNsa19kZWJ1Z2ZzX3Jvb3QpOworCWlmICghZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJYy0+ZGVudCA9IGQ7CisKKwlkID0gZGVidWdmc19jcmVhdGVfdTMyKCJ1c2FnZV9jb3VudCIsIFNfSVJVR08sIGMtPmRlbnQsCisJCQkodTMyICopJmMtPnVzYWdlX2NvdW50KTsKKwlpZiAoIWQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlkID0gZGVidWdmc19jcmVhdGVfdTMyKCJyYXRlIiwgU19JUlVHTywgYy0+ZGVudCwgKHUzMiAqKSZjLT5yYXRlKTsKKwlpZiAoIWQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlkID0gZGVidWdmc19jcmVhdGVfeDMyKCJmbGFncyIsIFNfSVJVR08sIGMtPmRlbnQsICh1MzIgKikmYy0+ZmxhZ3MpOworCWlmICghZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCXJldHVybiAwOworCitlcnJfb3V0OgorCWQgPSBjLT5kZW50OworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZkLT5kX3N1YmRpcnMsIGRfdS5kX2NoaWxkKQorCQlkZWJ1Z2ZzX3JlbW92ZShjaGlsZCk7CisJZGVidWdmc19yZW1vdmUoYy0+ZGVudCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjbGtfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjKQoreworCWludCBlcnI7CisJc3RydWN0IGNsayAqcGEgPSBjLT5wY2xrOworCisJaWYgKHBhICYmICFwYS0+ZGVudCkgeworCQllcnIgPSBjbGtfZGVidWdmc19yZWdpc3RlcihwYSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghYy0+ZGVudCkgeworCQllcnIgPSBjbGtfZGVidWdmc19yZWdpc3Rlcl9vbmUoYyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgY2xrX2RlYnVnZnNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGsgKmM7CisJc3RydWN0IGRlbnRyeSAqZDsKKwlpbnQgZXJyOworCisJZCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiY2xvY2siLCBOVUxMKTsKKwlpZiAoIWQpCisJCXJldHVybiAtRU5PTUVNOworCWNsa19kZWJ1Z2ZzX3Jvb3QgPSBkOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2xvY2tzLCBub2RlKSB7CisJCWVyciA9IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyKGMpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0OworCX0KKwlyZXR1cm4gMDsKK2Vycl9vdXQ6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGNsa19kZWJ1Z2ZzX3Jvb3QpOworCXJldHVybiBlcnI7Cit9CitsYXRlX2luaXRjYWxsKGNsa19kZWJ1Z2ZzX2luaXQpOworCitzdGF0aWMgaW50IGNsa19kZWJ1Z2ZzX3JlcGFyZW50KHN0cnVjdCBjbGsgKmMpCit7CisJZGVidWdmc19yZW1vdmUoYy0+ZGVudCk7CisJcmV0dXJuIGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyX29uZShjKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2Nsb2NrLmggYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9jbG9jay5oCmluZGV4IDI1NzIyNjAuLjJhZTY2MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvY2xvY2suaApAQCAtMjEsNiArMjEsNyBAQAogLyogY2xrIHN0cnVjdHVyZSBmbGFncyAqLwogI2RlZmluZQlBTFdBWVNfRU5BQkxFRAkJKDEgPDwgMCkgLyogY2xvY2sgYWx3YXlzIGVuYWJsZWQgKi8KICNkZWZpbmUJUkVTRVRfVE9fRU5BQkxFCQkoMSA8PCAxKSAvKiByZXNldCByZWdpc3RlciBiaXQgdG8gZW5hYmxlIGNsayAqLworI2RlZmluZQlFTkFCTEVEX09OX0lOSVQJCSgxIDw8IDIpIC8qIGNsb2NrcyBlbmFibGVkIGF0IGluaXQgKi8KIAogLyoqCiAgKiBzdHJ1Y3QgY2xrb3BzIC0gY2xvY2sgb3BlcmF0aW9ucwpAQCAtMzUsMTMgKzM2LDExIEBACiAvKioKICAqIHN0cnVjdCBwY2xrX2luZm8gLSBwYXJlbnRzIGluZm8KICAqIEBwY2xrOiBwb2ludGVyIHRvIHBhcmVudCBjbGsKLSAqIEBwY2xrX21hc2s6IHZhbHVlIHRvIGJlIHdyaXR0ZW4gZm9yIHNlbGVjdGluZyB0aGlzIHBhcmVudAotICogQHNjYWxhYmxlOiBJcyBwYXJlbnQgc2NhbGFibGUgKDEgLSBZRVMsIDAgLSBOTykKKyAqIEBwY2xrX3ZhbDogdmFsdWUgdG8gYmUgd3JpdHRlbiBmb3Igc2VsZWN0aW5nIHRoaXMgcGFyZW50CiAgKi8KIHN0cnVjdCBwY2xrX2luZm8gewogCXN0cnVjdCBjbGsgKnBjbGs7Ci0JdTggcGNsa19tYXNrOwotCXU4IHNjYWxhYmxlOworCXU4IHBjbGtfdmFsOwogfTsKIAogLyoqCkBAIC01NCwxMSArNTMsMjMgQEAKIHN0cnVjdCBwY2xrX3NlbCB7CiAJc3RydWN0IHBjbGtfaW5mbyAqcGNsa19pbmZvOwogCXU4IHBjbGtfY291bnQ7Ci0JdW5zaWduZWQgaW50ICpwY2xrX3NlbF9yZWc7CisJdm9pZCBfX2lvbWVtICpwY2xrX3NlbF9yZWc7CiAJdW5zaWduZWQgaW50IHBjbGtfc2VsX21hc2s7CiB9OwogCiAvKioKKyAqIHN0cnVjdCByYXRlX2NvbmZpZyAtIGNsayByYXRlIGNvbmZpZ3VyYXRpb25zCisgKiBAdGJsczogYXJyYXkgb2YgZGV2aWNlIHNwZWNpZmljIGNsayByYXRlIHRhYmxlcywgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzCisgKiBAY291bnQ6IHNpemUgb2YgdGJscyBhcnJheQorICogQGRlZmF1bHRfaW5kZXg6IGRlZmF1bHQgc2V0dGluZyB3aGVuIG9yaWdpbmFsbHkgZGlzYWJsZWQKKyAqLworc3RydWN0IHJhdGVfY29uZmlnIHsKKwl2b2lkICp0YmxzOworCXU4IGNvdW50OworCXU4IGRlZmF1bHRfaW5kZXg7Cit9OworCisvKioKICAqIHN0cnVjdCBjbGsgLSBjbG9jayBzdHJ1Y3R1cmUKICAqIEB1c2FnZV9jb3VudDogbnVtIG9mIHVzZXJzIHdobyBlbmFibGVkIHRoaXMgY2xvY2sKICAqIEBmbGFnczogZmxhZ3MgZm9yIGNsb2NrIHByb3BlcnRpZXMKQEAgLTY3LDIxICs3OCwzMiBAQAogICogQGVuX3JlZ19iaXQ6IGNsayBlbmFibGUvZGlzYWJsZSBiaXQKICAqIEBvcHM6IGNsayBlbmFibGUvZGlzYWJsZSBvcHMgLSBnZW5lcmljX2Nsa29wcyBzZWxlY3RlZCBpZiBOVUxMCiAgKiBAcmVjYWxjOiBwb2ludGVyIHRvIGNsb2NrIHJhdGUgcmVjYWxjdWxhdGUgZnVuY3Rpb24KKyAqIEBzZXRfcmF0ZTogcG9pbnRlciB0byBjbG9jayBzZXQgcmF0ZSBmdW5jdGlvbgorICogQGNhbGNfcmF0ZTogcG9pbnRlciB0byBjbG9jayBnZXQgcmF0ZSBmdW5jdGlvbiBmb3IgaW5kZXgKKyAqIEByYXRlX2NvbmZpZzogcmF0ZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCB1c2VkIGJ5IHNldF9yYXRlCisgKiBAZGl2X2ZhY3RvcjogZGl2aXNpb24gZmFjdG9yIHRvIHBhcmVudCBjbG9jay4KICAqIEBwY2xrOiBjdXJyZW50IHBhcmVudCBjbGsKICAqIEBwY2xrX3NlbDogcG9pbnRlciB0byBwYXJlbnQgc2VsZWN0aW9uIHN0cnVjdHVyZQogICogQHBjbGtfc2VsX3NoaWZ0OiByZWdpc3RlciBzaGlmdCBmb3Igc2VsZWN0aW5nIHBhcmVudCBvZiB0aGlzIGNsb2NrCiAgKiBAY2hpbGRyZW46IGxpc3QgZm9yIGNoaWxkcmVucyBvciB0aGlzIGNsb2NrCiAgKiBAc2libGluZzogbm9kZSBmb3IgbGlzdCBvZiBjbG9ja3MgaGF2aW5nIHNhbWUgcGFyZW50cwogICogQHByaXZhdGVfZGF0YTogY2xvY2sgc3BlY2lmaWMgcHJpdmF0ZSBkYXRhCisgKiBAbm9kZTogbGlzdCB0byBtYWludGFpbiBjbG9ja3MgbGluZWFybHkKKyAqIEBjbDogY2xvY2tsb29rIHVwIGFzc29pY2F0ZWQgd2l0aCB0aGlzIGNsb2NrCisgKiBAZGVudDogb2JqZWN0IGZvciBkZWJ1Z2ZzCiAgKi8KIHN0cnVjdCBjbGsgewogCXVuc2lnbmVkIGludCB1c2FnZV9jb3VudDsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyByYXRlOwotCXVuc2lnbmVkIGludCAqZW5fcmVnOworCXZvaWQgX19pb21lbSAqZW5fcmVnOwogCXU4IGVuX3JlZ19iaXQ7CiAJY29uc3Qgc3RydWN0IGNsa29wcyAqb3BzOwotCXZvaWQgKCpyZWNhbGMpIChzdHJ1Y3QgY2xrICopOworCWludCAoKnJlY2FsYykgKHN0cnVjdCBjbGsgKik7CisJaW50ICgqc2V0X3JhdGUpIChzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CisJdW5zaWduZWQgbG9uZyAoKmNhbGNfcmF0ZSkoc3RydWN0IGNsayAqLCBpbnQgaW5kZXgpOworCXN0cnVjdCByYXRlX2NvbmZpZyByYXRlX2NvbmZpZzsKKwl1bnNpZ25lZCBpbnQgZGl2X2ZhY3RvcjsKIAogCXN0cnVjdCBjbGsgKnBjbGs7CiAJc3RydWN0IHBjbGtfc2VsICpwY2xrX3NlbDsKQEAgLTkwLDM3ICsxMTIsMTM3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNpYmxpbmc7CiAJdm9pZCAqcHJpdmF0ZV9kYXRhOworI2lmZGVmIENPTkZJR19ERUJVR19GUworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3QgY2xrX2xvb2t1cCAqY2w7CisJc3RydWN0IGRlbnRyeSAqZGVudDsKKyNlbmRpZgogfTsKIAogLyogcGxsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCitzdHJ1Y3QgcGxsX2Nsa19tYXNrcyB7CisJdTMyIG1vZGVfbWFzazsKKwl1MzIgbW9kZV9zaGlmdDsKKworCXUzMiBub3JtX2ZkYmtfbV9tYXNrOworCXUzMiBub3JtX2ZkYmtfbV9zaGlmdDsKKwl1MzIgZGl0aF9mZGJrX21fbWFzazsKKwl1MzIgZGl0aF9mZGJrX21fc2hpZnQ7CisJdTMyIGRpdl9wX21hc2s7CisJdTMyIGRpdl9wX3NoaWZ0OworCXUzMiBkaXZfbl9tYXNrOworCXUzMiBkaXZfbl9zaGlmdDsKK307CisKIHN0cnVjdCBwbGxfY2xrX2NvbmZpZyB7Ci0JdW5zaWduZWQgaW50ICptb2RlX3JlZzsKLQl1bnNpZ25lZCBpbnQgKmNmZ19yZWc7CisJdm9pZCBfX2lvbWVtICptb2RlX3JlZzsKKwl2b2lkIF9faW9tZW0gKmNmZ19yZWc7CisJc3RydWN0IHBsbF9jbGtfbWFza3MgKm1hc2tzOworfTsKKworLyogcGxsIGNsayByYXRlIGNvbmZpZyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBwbGxfcmF0ZV90YmwgeworCXU4IG1vZGU7CisJdTE2IG07CisJdTggbjsKKwl1OCBwOwogfTsKIAogLyogYWhiIGFuZCBhcGIgYnVzIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCi1zdHJ1Y3QgYnVzX2Nsa19jb25maWcgewotCXVuc2lnbmVkIGludCAqcmVnOwotCXVuc2lnbmVkIGludCBtYXNrOwotCXVuc2lnbmVkIGludCBzaGlmdDsKK3N0cnVjdCBidXNfY2xrX21hc2tzIHsKKwl1MzIgbWFzazsKKwl1MzIgc2hpZnQ7CiB9OwogCi0vKgotICogQXV4IGNsayBjb25maWd1cmF0aW9uIHN0cnVjdHVyZTogYXBwbGljYWJsZSB0byBHUFQsIFVBUlQgYW5kIEZJUkRBCi0gKi8KK3N0cnVjdCBidXNfY2xrX2NvbmZpZyB7CisJdm9pZCBfX2lvbWVtICpyZWc7CisJc3RydWN0IGJ1c19jbGtfbWFza3MgKm1hc2tzOworfTsKKworLyogYWhiIGFuZCBhcGIgY2xrIGJ1cyByYXRlIGNvbmZpZyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBidXNfcmF0ZV90YmwgeworCXU4IGRpdjsKK307CisKKy8qIEF1eCBjbGsgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmU6IGFwcGxpY2FibGUgdG8gVUFSVCBhbmQgRklSREEgKi8KK3N0cnVjdCBhdXhfY2xrX21hc2tzIHsKKwl1MzIgZXFfc2VsX21hc2s7CisJdTMyIGVxX3NlbF9zaGlmdDsKKwl1MzIgZXExX21hc2s7CisJdTMyIGVxMl9tYXNrOworCXUzMiB4c2NhbGVfc2VsX21hc2s7CisJdTMyIHhzY2FsZV9zZWxfc2hpZnQ7CisJdTMyIHlzY2FsZV9zZWxfbWFzazsKKwl1MzIgeXNjYWxlX3NlbF9zaGlmdDsKK307CisKIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyB7Ci0JdW5zaWduZWQgaW50ICpzeW50aF9yZWc7CisJdm9pZCBfX2lvbWVtICpzeW50aF9yZWc7CisJc3RydWN0IGF1eF9jbGtfbWFza3MgKm1hc2tzOworfTsKKworLyogYXV4IGNsayByYXRlIGNvbmZpZyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBhdXhfcmF0ZV90YmwgeworCXUxNiB4c2NhbGU7CisJdTE2IHlzY2FsZTsKKwl1OCBlcTsKK307CisKKy8qIEdQVCBjbGsgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBncHRfY2xrX21hc2tzIHsKKwl1MzIgbXNjYWxlX3NlbF9tYXNrOworCXUzMiBtc2NhbGVfc2VsX3NoaWZ0OworCXUzMiBuc2NhbGVfc2VsX21hc2s7CisJdTMyIG5zY2FsZV9zZWxfc2hpZnQ7Cit9OworCitzdHJ1Y3QgZ3B0X2Nsa19jb25maWcgeworCXZvaWQgX19pb21lbSAqc3ludGhfcmVnOworCXN0cnVjdCBncHRfY2xrX21hc2tzICptYXNrczsKK307CisKKy8qIGdwdCBjbGsgcmF0ZSBjb25maWcgc3RydWN0dXJlICovCitzdHJ1Y3QgZ3B0X3JhdGVfdGJsIHsKKwl1MTYgbXNjYWxlOworCXUxNiBuc2NhbGU7Cit9OworCisvKiBjbGNkIGNsayBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLworc3RydWN0IGNsY2Rfc3ludGhfbWFza3MgeworCXUzMiBkaXZfZmFjdG9yX21hc2s7CisJdTMyIGRpdl9mYWN0b3Jfc2hpZnQ7Cit9OworCitzdHJ1Y3QgY2xjZF9jbGtfY29uZmlnIHsKKwl2b2lkIF9faW9tZW0gKnN5bnRoX3JlZzsKKwlzdHJ1Y3QgY2xjZF9zeW50aF9tYXNrcyAqbWFza3M7Cit9OworCisvKiBjbGNkIGNsayByYXRlIGNvbmZpZyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBjbGNkX3JhdGVfdGJsIHsKKwl1MTYgZGl2OwogfTsKIAogLyogcGxhdGZvcm0gc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zICovCiB2b2lkIGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2wpOwogdm9pZCByZWNhbGNfcm9vdF9jbG9ja3Modm9pZCk7CiAKLS8qIGNsb2NrIHJlY2FsYyBmdW5jdGlvbnMgKi8KLXZvaWQgZm9sbG93X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspOwotdm9pZCBwbGwxX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXZvaWQgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXZvaWQgZ3B0X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXZvaWQgYXV4X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKKy8qIGNsb2NrIHJlY2FsYyAmIHNldCByYXRlIGZ1bmN0aW9ucyAqLworaW50IGZvbGxvd19wYXJlbnQoc3RydWN0IGNsayAqY2xrKTsKK3Vuc2lnbmVkIGxvbmcgcGxsX2NhbGNfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIGludCBpbmRleCk7CitpbnQgcGxsX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK2ludCBwbGxfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkZXNpcmVkX3JhdGUpOwordW5zaWduZWQgbG9uZyBidXNfY2FsY19yYXRlKHN0cnVjdCBjbGsgKmNsaywgaW50IGluZGV4KTsKK2ludCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworaW50IGJ1c19jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIGRlc2lyZWRfcmF0ZSk7Cit1bnNpZ25lZCBsb25nIGdwdF9jYWxjX3JhdGUoc3RydWN0IGNsayAqY2xrLCBpbnQgaW5kZXgpOworaW50IGdwdF9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitpbnQgZ3B0X2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZGVzaXJlZF9yYXRlKTsKK3Vuc2lnbmVkIGxvbmcgYXV4X2NhbGNfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIGludCBpbmRleCk7CitpbnQgYXV4X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK2ludCBhdXhfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkZXNpcmVkX3JhdGUpOwordW5zaWduZWQgbG9uZyBjbGNkX2NhbGNfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIGludCBpbmRleCk7CitpbnQgY2xjZF9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitpbnQgY2xjZF9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIGRlc2lyZWRfcmF0ZSk7CiAKICNlbmRpZiAvKiBfX1BMQVRfQ0xPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMKaW5kZXggZTkxMjcwZS4uODUwMWJiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9kZWJ1Zy1tYWNyby5TCkBAIC0xMiw3ICsxMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogCQkubWFjcm8JYWRkcnVhcnQsIHJwLCBydgogCQltb3YJXHJwLCAjU1BFQVJfREJHX1VBUlRfQkFTRQkJQCBQaHlzaWNhbCBiYXNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmQ2NzcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvaGFyZHdhcmUuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvaGFyZHdhcmUuaAorICoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBTUEVBcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTVCBNaWNyb2VsZWN0cm9uaWNzCisgKiBWaXJlc2ggS3VtYXI8dmlyZXNoLmt1bWFyQHN0LmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19QTEFUX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19QTEFUX0hBUkRXQVJFX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgSU9NRU0oeCkJKCh2b2lkIF9faW9tZW0gX19mb3JjZSAqKSh4KSkKKyNlbHNlCisjZGVmaW5lIElPTUVNKHgpCSh4KQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1BMQVRfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvc3lzdGVtLmggYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9zeXN0ZW0uaAppbmRleCA1NWE0ZTQwLi5hMjM1ZmEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9zeXN0ZW0uaApAQCAtMTQsOSArMTQsOSBAQAogI2lmbmRlZiBfX1BMQVRfU1lTVEVNX0gKICNkZWZpbmUgX19QTEFUX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc3A4MTAuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc3A4MTAuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAppbmRleCA5OWJhNjc4Li4xYmY4NDUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogI2lmbmRlZiBfX1BMQVRfVU5DT01QUkVTU19ICiAjZGVmaW5lIF9fUExBVF9VTkNPTVBSRVNTX0gKQEAgLTI0LDEwICsyNCwxMCBAQAogewogCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilTUEVBUl9EQkdfVUFSVF9CQVNFOwogCi0Jd2hpbGUgKHJlYWRsKGJhc2UgKyBVQVJUMDF4X0ZSKSAmIFVBUlQwMXhfRlJfVFhGRikKKwl3aGlsZSAocmVhZGxfcmVsYXhlZChiYXNlICsgVUFSVDAxeF9GUikgJiBVQVJUMDF4X0ZSX1RYRkYpCiAJCWJhcnJpZXIoKTsKIAotCXdyaXRlbChjLCBiYXNlICsgVUFSVDAxeF9EUik7CisJd3JpdGVsX3JlbGF4ZWQoYywgYmFzZSArIFVBUlQwMXhfRFIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3ZtYWxsb2MuaCBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3ZtYWxsb2MuaAppbmRleCAwOWU5MzcyLi44YzhiMjRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvdm1hbGxvYy5oCkBAIC0xNCw2ICsxNCw2IEBACiAjaWZuZGVmIF9fUExBVF9WTUFMTE9DX0gKICNkZWZpbmUgX19QTEFUX1ZNQUxMT0NfSAogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECQkweEYwMDAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECQkweEYwMDAwMDAwVUwKIAogI2VuZGlmIC8qIF9fUExBVF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMKaW5kZXggODM5Yzg4ZC4uZGJiNmU0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QgTWljcm9lbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEwIFNUIE1pY3JvZWxlY3Ryb25pY3MKICAqIFNoaXJheiBIYXNoaW08c2hpcmF6Lmhhc2hpbUBzdC5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC0yMCwxMCArMjAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KICNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAKIC8qCiAgKiBXZSB3b3VsZCB1c2UgVElNRVIwIGFuZCBUSU1FUjEgYXMgY2xvY2tldmVudCBhbmQgY2xvY2tzb3VyY2UuCkBAIC0yMTEsNyArMjEwLDcgQEAKIAogdm9pZCBfX2luaXQgc3BlYXJfc2V0dXBfdGltZXIodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICpwbGwzX2NsazsKKwlpbnQgcmV0OwogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oU1BFQVJfR1BUMF9CQVNFLCBTWl8xSywgImdwdDAiKSkgewogCQlwcl9lcnIoIiVzOmNhbm5vdCBnZXQgSU8gYWRkclxuIiwgX19mdW5jX18pOwpAQCAtMjMwLDI2ICsyMjksMjEgQEAKIAkJZ290byBlcnJfaW9tYXA7CiAJfQogCi0JcGxsM19jbGsgPSBjbGtfZ2V0KE5VTEwsICJwbGwzXzQ4bV9jbGsiKTsKLQlpZiAoIXBsbDNfY2xrKSB7Ci0JCXByX2VycigiJXM6Y291bGRuJ3QgZ2V0IFBMTDMgYXMgcGFyZW50IGZvciBncHRcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnJfaW9tYXA7CisJcmV0ID0gY2xrX2VuYWJsZShncHRfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcl9lcnIoIiVzOmNvdWxkbid0IGVuYWJsZSBncHQgY2xvY2tcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfY2xrOwogCX0KIAotCWNsa19zZXRfcGFyZW50KGdwdF9jbGssIHBsbDNfY2xrKTsKLQogCXNwZWFyX2Nsb2NrZXZlbnRfaW5pdCgpOwogCXNwZWFyX2Nsb2Nrc291cmNlX2luaXQoKTsKIAogCXJldHVybjsKIAorZXJyX2NsazoKKwljbGtfcHV0KGdwdF9jbGspOwogZXJyX2lvbWFwOgogCWlvdW5tYXAoZ3B0X2Jhc2UpOwotCiBlcnJfbWVtOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihTUEVBUl9HUFQwX0JBU0UsIFNaXzFLKTsKIH0KLQotc3RydWN0IHN5c190aW1lciBzcGVhcl9zeXNfdGltZXIgPSB7Ci0JLmluaXQgPSBzcGVhcl9zZXR1cF90aW1lciwKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCAyZmVhODk3Li45ZDZmZWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBTdW4gRGVjIDEyIDIzOjI0OjI3IDIwMTAKKyMgTGFzdCB1cGRhdGU6IE1vbiBGZWIgNyAwODo1OToyNyAyMDExCiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTIyNDAsNyArMjI0MCw3IEBACiB2c192MjEwCQkJTUFDSF9WU19WMjEwCQlWU19WMjEwCQkJMjI1MgogdnNfdjIxMgkJCU1BQ0hfVlNfVjIxMgkJVlNfVjIxMgkJCTIyNTMKIGhtdAkJCU1BQ0hfSE1UCQlITVQJCQkyMjU0Ci1zdWVuMwkJCU1BQ0hfU1VFTjMJCVNVRU4zCQkJMjI1NQora21fa2lya3dvb2QJCU1BQ0hfS01fS0lSS1dPT0QJS01fS0lSS1dPT0QJCTIyNTUKIHZlc3BlcgkJCU1BQ0hfVkVTUEVSCQlWRVNQRVIJCQkyMjU2CiBzdHI5CQkJTUFDSF9TVFI5CQlTVFI5CQkJMjI1Nwogb21hcDNfd2xfZmYJCU1BQ0hfT01BUDNfV0xfRkYJT01BUDNfV0xfRkYJCTIyNTgKQEAgLTI5ODcsNyArMjk4Nyw3IEBACiBlYTIwCQkJTUFDSF9FQTIwCQlFQTIwCQkJMzAwMgogYXdtMgkJCU1BQ0hfQVdNMgkJQVdNMgkJCTMwMDMKIHRpODE0OGV2bQkJTUFDSF9USTgxNDhFVk0JCVRJODE0OEVWTQkJMzAwNAotdGVncmFfc2VhYm9hcmQJCU1BQ0hfVEVHUkFfU0VBQk9BUkQJVEVHUkFfU0VBQk9BUkQJCTMwMDUKK3NlYWJvYXJkCQlNQUNIX1NFQUJPQVJECQlTRUFCT0FSRAkJMzAwNQogbGlua3N0YXRpb25fY2hsdjIJTUFDSF9MSU5LU1RBVElPTl9DSExWMglMSU5LU1RBVElPTl9DSExWMgkzMDA2CiB0ZXJhX3BybzJfcmFjawkJTUFDSF9URVJBX1BSTzJfUkFDSwlURVJBX1BSTzJfUkFDSwkJMzAwNwogcnVieXMJCQlNQUNIX1JVQllTCQlSVUJZUwkJCTMwMDgKQEAgLTMxOTAsNyArMzE5MCw3IEBACiBpY3NfaWZfdm9pcAkJTUFDSF9JQ1NfSUZfVk9JUAlJQ1NfSUZfVk9JUAkJMzIwNgogd2xmX2NyYWdnXzY0MTAJCU1BQ0hfV0xGX0NSQUdHXzY0MTAJV0xGX0NSQUdHXzY0MTAJCTMyMDcKIHB1bmljYQkJCU1BQ0hfUFVOSUNBCQlQVU5JQ0EJCQkzMjA4Ci1zYmNfbnQyNTAJCU1BQ0hfU0JDX05UMjUwCQlTQkNfTlQyNTAJCTMyMDkKK3RyaW1zbGljZQkJTUFDSF9UUklNU0xJQ0UJCVRSSU1TTElDRQkJMzIwOQogbXgyN193bXVsdHJhCQlNQUNIX01YMjdfV01VTFRSQQlNWDI3X1dNVUxUUkEJCTMyMTAKIG1hY2tlcmVsCQlNQUNIX01BQ0tFUkVMCQlNQUNLRVJFTAkJMzIxMQogZmE5eDI3CQkJTUFDSF9GQTlYMjcJCUZBOVgyNwkJCTMyMTMKQEAgLTMyMTksMyArMzIxOSwxMDAgQEAKIHBjbTA0OAkJCU1BQ0hfUENNMDQ4CQlQQ00wNDgJCQkzMjM2CiBkZHMJCQlNQUNIX0REUwkJRERTCQkJMzIzNwogY2hhbHRlbl94YTEJCU1BQ0hfQ0hBTFRFTl9YQTEJQ0hBTFRFTl9YQTEJCTMyMzgKK3RzNDh4eAkJCU1BQ0hfVFM0OFhYCQlUUzQ4WFgJCQkzMjM5Cit0b25nYTJfdGZ0dGltZXIJCU1BQ0hfVE9OR0EyX1RGVFRJTUVSCVRPTkdBMl9URlRUSU1FUgkJMzI0MAord2hpc3RsZXIJCU1BQ0hfV0hJU1RMRVIJCVdISVNUTEVSCQkzMjQxCithc2xfcGhvZW5peAkJTUFDSF9BU0xfUEhPRU5JWAlBU0xfUEhPRU5JWAkJMzI0MgorYXQ5MXNhbTkyNjNvdGxpdGUJTUFDSF9BVDkxU0FNOTI2M09UTElURQlBVDkxU0FNOTI2M09UTElURQkzMjQzCitkZHBsdWcJCQlNQUNIX0REUExVRwkJRERQTFVHCQkJMzI0NAorZDJwbHVnCQkJTUFDSF9EMlBMVUcJCUQyUExVRwkJCTMyNDUKK2t6bTlkCQkJTUFDSF9LWk05RAkJS1pNOUQJCQkzMjQ2Cit2ZXJkaV9sdGUJCU1BQ0hfVkVSRElfTFRFCQlWRVJESV9MVEUJCTMyNDcKK25hbm96b29tCQlNQUNIX05BTk9aT09NCQlOQU5PWk9PTQkJMzI0OAorZG0zNzMwX3NvbV9sdgkJTUFDSF9ETTM3MzBfU09NX0xWCURNMzczMF9TT01fTFYJCTMyNDkKK2RtMzczMF90b3JwZWRvCQlNQUNIX0RNMzczMF9UT1JQRURPCURNMzczMF9UT1JQRURPCQkzMjUwCithbmNob3Z5CQkJTUFDSF9BTkNIT1ZZCQlBTkNIT1ZZCQkJMzI1MQorcmUycmV2MjAJCU1BQ0hfUkUyUkVWMjAJCVJFMlJFVjIwCQkzMjUzCityZTJyZXYyMQkJTUFDSF9SRTJSRVYyMQkJUkUyUkVWMjEJCTMyNTQKK2NuczIxeHgJCQlNQUNIX0NOUzIxWFgJCUNOUzIxWFgJCQkzMjU1CityaWRlcgkJCU1BQ0hfUklERVIJCVJJREVSCQkJMzI1NworbnNrMzMwCQkJTUFDSF9OU0szMzAJCU5TSzMzMAkJCTMyNTgKK2NuczIxMzNldmIJCU1BQ0hfQ05TMjEzM0VWQgkJQ05TMjEzM0VWQgkJMzI1OQorejNfODE2eF9tb2QJCU1BQ0hfWjNfODE2WF9NT0QJWjNfODE2WF9NT0QJCTMyNjAKK3ozXzgxNHhfbW9kCQlNQUNIX1ozXzgxNFhfTU9ECVozXzgxNFhfTU9ECQkzMjYxCitiZWVjdAkJCU1BQ0hfQkVFQ1QJCUJFRUNUCQkJMzI2MgorZG1hX3RodW5kZXJidWcJCU1BQ0hfRE1BX1RIVU5ERVJCVUcJRE1BX1RIVU5ERVJCVUcJCTMyNjMKK29tbl9hdDkxc2FtOWcyMAkJTUFDSF9PTU5fQVQ5MVNBTTlHMjAJT01OX0FUOTFTQU05RzIwCQkzMjY0CitteDI1X2Uyc191YwkJTUFDSF9NWDI1X0UyU19VQwlNWDI1X0UyU19VQwkJMzI2NQorbWlvbmUJCQlNQUNIX01JT05FCQlNSU9ORQkJCTMyNjYKK3RvcDkwMDBfdGN1CQlNQUNIX1RPUDkwMDBfVENVCVRPUDkwMDBfVENVCQkzMjY3Cit0b3A5MDAwX2JzbAkJTUFDSF9UT1A5MDAwX0JTTAlUT1A5MDAwX0JTTAkJMzI2OAora2luZ2RvbQkJCU1BQ0hfS0lOR0RPTQkJS0lOR0RPTQkJCTMyNjkKK2FybWFkaWxsbzQ2MAkJTUFDSF9BUk1BRElMTE80NjAJQVJNQURJTExPNDYwCQkzMjcwCitscTIJCQlNQUNIX0xRMgkJTFEyCQkJMzI3MQorc3dlZGFfdG1zMgkJTUFDSF9TV0VEQV9UTVMyCQlTV0VEQV9UTVMyCQkzMjcyCitteDUzX2xvY28JCU1BQ0hfTVg1M19MT0NPCQlNWDUzX0xPQ08JCTMyNzMKK2FjZXJfYTgJCQlNQUNIX0FDRVJfQTgJCUFDRVJfQTgJCQkzMjc1CithY2VyX2dhdWd1aW4JCU1BQ0hfQUNFUl9HQVVHVUlOCUFDRVJfR0FVR1VJTgkJMzI3NgorZ3VwcHkJCQlNQUNIX0dVUFBZCQlHVVBQWQkJCTMyNzcKK214NjFfYXJkCQlNQUNIX01YNjFfQVJECQlNWDYxX0FSRAkJMzI3OAordHg1MwkJCU1BQ0hfVFg1MwkJVFg1MwkJCTMyNzkKK29tYXBsMTM4X2Nhc2VfYTMJTUFDSF9PTUFQTDEzOF9DQVNFX0EzCU9NQVBMMTM4X0NBU0VfQTMJMzI4MAordWVtZAkJCU1BQ0hfVUVNRAkJVUVNRAkJCTMyODEKK2Njd214NTFtdXQJCU1BQ0hfQ0NXTVg1MU1VVAkJQ0NXTVg1MU1VVAkJMzI4Mgorcm9ja2hvcHBlcgkJTUFDSF9ST0NLSE9QUEVSCQlST0NLSE9QUEVSCQkzMjgzCitub29rY29sb3IJCU1BQ0hfTk9PS0NPTE9SCQlOT09LQ09MT1IJCTMyODQKK2hrZGtjMTAwCQlNQUNIX0hLREtDMTAwCQlIS0RLQzEwMAkJMzI4NQordHM0Mnh4CQkJTUFDSF9UUzQyWFgJCVRTNDJYWAkJCTMyODYKK2FlYmwJCQlNQUNIX0FFQkwJCUFFQkwJCQkzMjg3Cit3YXJpbwkJCU1BQ0hfV0FSSU8JCVdBUklPCQkJMzI4OAorZ2ZzX3NwbQkJCU1BQ0hfR0ZTX1NQTQkJR0ZTX1NQTQkJCTMyODkKK2NtX3QzNzMwCQlNQUNIX0NNX1QzNzMwCQlDTV9UMzczMAkJMzI5MAoraXNjMwkJCU1BQ0hfSVNDMwkJSVNDMwkJCTMyOTEKK3Jhc2NhbAkJCU1BQ0hfUkFTQ0FMCQlSQVNDQUwJCQkzMjkyCitocmVmdjYwCQkJTUFDSF9IUkVGVjYwCQlIUkVGVjYwCQkJMzI5MwordHB0XzJfMAkJCU1BQ0hfVFBUXzJfMAkJVFBUXzJfMAkJCTMyOTQKK3B5cmFtaWRfdGQJCU1BQ0hfUFlSQU1JRF9URAkJUFlSQU1JRF9URAkJMzI5NQorc3BsZW5kb3IJCU1BQ0hfU1BMRU5ET1IJCVNQTEVORE9SCQkzMjk2CitndWZfcGxhbmV0CQlNQUNIX0dVRl9QTEFORVQJCUdVRl9QTEFORVQJCTMyOTcKK21zbTh4NjBfcXQJCU1BQ0hfTVNNOFg2MF9RVAkJTVNNOFg2MF9RVAkJMzI5OAoraHRjX2hkX21pbmkJCU1BQ0hfSFRDX0hEX01JTkkJSFRDX0hEX01JTkkJCTMyOTkKK2F0aGVuZQkJCU1BQ0hfQVRIRU5FCQlBVEhFTkUJCQkzMzAwCitkZWVwX3JfZWtfMQkJTUFDSF9ERUVQX1JfRUtfMQlERUVQX1JfRUtfMQkJMzMwMQordml2b3dfY3QJCU1BQ0hfVklWT1dfQ1QJCVZJVk9XX0NUCQkzMzAyCituZXJ5XzEwMDAJCU1BQ0hfTkVSWV8xMDAwCQlORVJZXzEwMDAJCTMzMDMKK3JmbDEwOTE0NV9zc3J2CQlNQUNIX1JGTDEwOTE0NV9TU1JWCVJGTDEwOTE0NV9TU1JWCQkzMzA0CitubWgJCQlNQUNIX05NSAkJTk1ICQkJMzMwNQord244MDJ0CQkJTUFDSF9XTjgwMlQJCVdOODAyVAkJCTMzMDYKK2RyYWdvbmV0CQlNQUNIX0RSQUdPTkVUCQlEUkFHT05FVAkJMzMwNworZ2VuZXZhX2IJCU1BQ0hfR0VORVZBX0IJCUdFTkVWQV9CCQkzMzA4CithdDkxc2FtOTI2M2Rlc2sxNmwJTUFDSF9BVDkxU0FNOTI2M0RFU0sxNkwJQVQ5MVNBTTkyNjNERVNLMTZMCTMzMDkKK2JjbWhhbmFfc3YJCU1BQ0hfQkNNSEFOQV9TVgkJQkNNSEFOQV9TVgkJMzMxMAorYmNtaGFuYV90YWJsZXQJCU1BQ0hfQkNNSEFOQV9UQUJMRVQJQkNNSEFOQV9UQUJMRVQJCTMzMTEKK2tvaQkJCU1BQ0hfS09JCQlLT0kJCQkzMzEyCit0czQ4MDAJCQlNQUNIX1RTNDgwMAkJVFM0ODAwCQkJMzMxMwordHFtYTkyNjMJCU1BQ0hfVFFNQTkyNjMJCVRRTUE5MjYzCQkzMzE0Citob2xpZGF5CQkJTUFDSF9IT0xJREFZCQlIT0xJREFZCQkJMzMxNQorZG1hXzY0MTAJCU1BQ0hfRE1BNjQxMAkJRE1BNjQxMAkJCTMzMTYKK3BjYXRzX292ZXJsYXkJCU1BQ0hfUENBVFNfT1ZFUkxBWQlQQ0FUU19PVkVSTEFZCQkzMzE3Citod2d3NjQxMAkJTUFDSF9IV0dXNjQxMAkJSFdHVzY0MTAJCTMzMTgKK3NoZW56aG91CQlNQUNIX1NIRU5aSE9VCQlTSEVOWkhPVQkJMzMxOQorY3dtZTkyMTAJCU1BQ0hfQ1dNRTkyMTAJCUNXTUU5MjEwCQkzMzIwCitjd21lOTIxMGpzCQlNQUNIX0NXTUU5MjEwSlMJCUNXTUU5MjEwSlMJCTMzMjEKK3Bnc192MQkJCU1BQ0hfUEdTX1NJVEFSQQkJUEdTX1NJVEFSQQkJMzMyMgorY29saWJyaV90ZWdyYTIJCU1BQ0hfQ09MSUJSSV9URUdSQTIJQ09MSUJSSV9URUdSQTIJCTMzMjMKK3cyMQkJCU1BQ0hfVzIxCQlXMjEJCQkzMzI0Citwb2x5c2F0MQkJTUFDSF9QT0xZU0FUMQkJUE9MWVNBVDEJCTMzMjUKK2RhdGF3YXkJCQlNQUNIX0RBVEFXQVkJCURBVEFXQVkJCQkzMzI2Citjb2JyYWwxMzgJCU1BQ0hfQ09CUkFMMTM4CQlDT0JSQUwxMzgJCTMzMjcKK3JvdmVycGNzOAkJTUFDSF9ST1ZFUlBDUzgJCVJPVkVSUENTOAkJMzMyOAorbWFydmVsYwkJCU1BQ0hfTUFSVkVMQwkJTUFSVkVMQwkJCTMzMjkKK25hdmVmaWhpZAkJTUFDSF9OQVZFRklISUQJCU5BVkVGSUhJRAkJMzMzMAorZG0zNjVfY3YxMDAJCU1BQ0hfRE0zNjVfQ1YxMDAJRE0zNjVfQ1YxMDAJCTMzMzEKK2FibGUJCQlNQUNIX0FCTEUJCUFCTEUJCQkzMzMyCitsZWdhY3kJCQlNQUNIX0xFR0FDWQkJTEVHQUNZCQkJMzMzMworaWNvbmcJCQlNQUNIX0lDT05HCQlJQ09ORwkJCTMzMzQKK3JvdmVyX2c4CQlNQUNIX1JPVkVSX0c4CQlST1ZFUl9HOAkJMzMzNQordDUzODhwCQkJTUFDSF9UNTM4OFAJCVQ1Mzg4UAkJCTMzMzYKK2RpbmdvCQkJTUFDSF9ESU5HTwkJRElOR08JCQkzMzM3Citnb2ZsZXhob21lCQlNQUNIX0dPRkxFWEhPTUUJCUdPRkxFWEhPTUUJCTMzMzgKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggOTJlY2Q4NC4uYmM3ZThhZSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTgsNiArOCw3IEBACiAjaWZuZGVmIF9fQVNNX0FWUjMyX1BHQUxMT0NfSAogI2RlZmluZSBfX0FTTV9BVlIzMl9QR0FMTE9DX0gKIAorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcXVpY2tsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NlcmlhbC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NlcmlhbC5oCmluZGV4IDFmZjlmMTQuLjdkYmM2NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zZXJpYWwuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2VyaWFsLmgKQEAgLTEwLDYgKzEwLDcgQEAKICNkZWZpbmUgX19CRklOX0FTTV9TRVJJQUxfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9hbm9tYWx5Lmg+CiAjaW5jbHVkZSA8bWFjaC9iZmluX3NlcmlhbC5oPgogCkBAIC00MSw2ICs0Miw3IEBACiAJc3RydWN0IGNpcmNfYnVmIHJ4X2RtYV9idWY7CiAJc3RydWN0IHRpbWVyX2xpc3QgcnhfZG1hX3RpbWVyOwogCWludCByeF9kbWFfbnJvd3M7CisJc3BpbmxvY2tfdCByeF9sb2NrOwogCXVuc2lnbmVkIGludCB0eF9kbWFfY2hhbm5lbDsKIAl1bnNpZ25lZCBpbnQgcnhfZG1hX2NoYW5uZWw7CiAJc3RydWN0IHdvcmtfc3RydWN0IHR4X2RtYV93b3JrcXVldWU7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMKaW5kZXggMjUwZjRkNC4uMDZhNWU2NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvb3V0cy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL291dHMuUwpAQCAtMTMsNiArMTMsOCBAQAogLmFsaWduIDIKIAogRU5UUlkoX291dHNsKQorCUNDID0gUjIgPT0gMDsKKwlJRiBDQyBKVU1QIDFmOwogCVAwID0gUjA7CS8qIFAwID0gcG9ydCAqLwogCVAxID0gUjE7CS8qIFAxID0gYWRkcmVzcyAqLwogCVAyID0gUjI7CS8qIFAyID0gY291bnQgKi8KQEAgLTIwLDEwICsyMiwxMiBAQAogCUxTRVRVUCggLkxsb25nX2xvb3BfcywgLkxsb25nX2xvb3BfZSkgTEMwID0gUDI7CiAuTGxvbmdfbG9vcF9zOiBSMCA9IFtQMSsrXTsKIC5MbG9uZ19sb29wX2U6IFtQMF0gPSBSMDsKLQlSVFM7CisxOglSVFM7CiBFTkRQUk9DKF9vdXRzbCkKIAogRU5UUlkoX291dHN3KQorCUNDID0gUjIgPT0gMDsKKwlJRiBDQyBKVU1QIDFmOwogCVAwID0gUjA7CS8qIFAwID0gcG9ydCAqLwogCVAxID0gUjE7CS8qIFAxID0gYWRkcmVzcyAqLwogCVAyID0gUjI7CS8qIFAyID0gY291bnQgKi8KQEAgLTMxLDEwICszNSwxMiBAQAogCUxTRVRVUCggLkx3b3JkX2xvb3BfcywgLkx3b3JkX2xvb3BfZSkgTEMwID0gUDI7CiAuTHdvcmRfbG9vcF9zOiBSMCA9IFdbUDErK107CiAuTHdvcmRfbG9vcF9lOiBXW1AwXSA9IFIwOwotCVJUUzsKKzE6CVJUUzsKIEVORFBST0MoX291dHN3KQogCiBFTlRSWShfb3V0c2IpCisJQ0MgPSBSMiA9PSAwOworCUlGIENDIEpVTVAgMWY7CiAJUDAgPSBSMDsJLyogUDAgPSBwb3J0ICovCiAJUDEgPSBSMTsJLyogUDEgPSBhZGRyZXNzICovCiAJUDIgPSBSMjsJLyogUDIgPSBjb3VudCAqLwpAQCAtNDIsMTAgKzQ4LDEyIEBACiAJTFNFVFVQKCAuTGJ5dGVfbG9vcF9zLCAuTGJ5dGVfbG9vcF9lKSBMQzAgPSBQMjsKIC5MYnl0ZV9sb29wX3M6IFIwID0gQltQMSsrXTsKIC5MYnl0ZV9sb29wX2U6IEJbUDBdID0gUjA7Ci0JUlRTOworMToJUlRTOwogRU5EUFJPQyhfb3V0c2IpCiAKIEVOVFJZKF9vdXRzd184KQorCUNDID0gUjIgPT0gMDsKKwlJRiBDQyBKVU1QIDFmOwogCVAwID0gUjA7CS8qIFAwID0gcG9ydCAqLwogCVAxID0gUjE7CS8qIFAxID0gYWRkcmVzcyAqLwogCVAyID0gUjI7CS8qIFAyID0gY291bnQgKi8KQEAgLTU2LDUgKzY0LDUgQEAKIAkJUjAgPSBSMCA8PCA4OwogCQlSMCA9IFIwICsgUjE7CiAuTHdvcmQ4X2xvb3BfZTogV1tQMF0gPSBSMDsKLQlSVFM7CisxOglSVFM7CiBFTkRQUk9DKF9vdXRzd184KQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCmluZGV4IDc5MGM3NjcuLmFiNGE5MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKQEAgLTU4LDYgKzU4LDggQEAKIDE6CiAuaWZlcXMgIlxmbHVzaGlucyIsIEJST0tfRkxVU0hfSU5TVAogCVxmbHVzaGlucyBbUDArK107CisJbm9wOworCW5vcDsKIDI6CW5vcDsKIC5lbHNlCiAyOglcZmx1c2hpbnMgW1AwKytdOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDQ0MjIxODkuLmM0OWJlODQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTcyLDExICs3Miw2IEBACiAJSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQogCS5pbml0LmRhdGEgOiB7IElOSVRfREFUQSB9CiAJLmluaXQuc2V0dXAgOiB7IElOSVRfU0VUVVAoMTYpIH0KLSNpZmRlZiBDT05GSUdfRVRSQVhfQVJDSF9WMzIKLQlfX3N0YXJ0X19fcGFyYW0gPSAuOwotCV9fcGFyYW0gOiB7ICooX19wYXJhbSkgfQotCV9fc3RvcF9fX3BhcmFtID0gLjsKLSNlbmRpZgogCS5pbml0Y2FsbC5pbml0IDogewogCQlJTklUX0NBTExTCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKaW5kZXggZjc0NWMxMi4uNzZlYWYzOCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lycS5jCkBAIC04MCw3ICs4MCw3IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cKIAkvKiBGSVhNRSBNMzJSICovCiAjZW5kaWYKLQlfX2RvX0lSUShpcnEpOworCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwogCWlycV9leGl0KCk7CiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCmluZGV4IGIxNTc3ZjcuLjgyYTRiYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYworKysgYi9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKQEAgLTYxMCwxNyArNjEwLDE3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFtaWdhX3NhdmVrbXNnX3NldHVwKGNoYXIgKmFyZykKIHsKLQlzdGF0aWMgc3RydWN0IHJlc291cmNlIGRlYnVnX3JlcyA9IHsgLm5hbWUgPSAiRGVidWciIH07Ci0KIAlpZiAoIU1BQ0hfSVNfQU1JR0EgfHwgc3RyY21wKGFyZywgIm1lbSIpKQotCQlnb3RvIGRvbmU7CisJCXJldHVybiAwOwogCi0JaWYgKCFBTUlHQUhXX1BSRVNFTlQoQ0hJUF9SQU0pKSB7Ci0JCXByaW50aygiV2FybmluZzogbm8gY2hpcHJhbSBwcmVzZW50IGZvciBkZWJ1Z2dpbmdcbiIpOwotCQlnb3RvIGRvbmU7CisJaWYgKGFtaWdhX2NoaXBfc2l6ZSA8IFNBVkVLTVNHX01BWE1FTSkgeworCQlwcl9lcnIoIk5vdCBlbm91Z2ggY2hpcHJhbSBmb3IgZGVidWdnaW5nXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc2F2ZWttc2cgPSBhbWlnYV9jaGlwX2FsbG9jX3JlcyhTQVZFS01TR19NQVhNRU0sICZkZWJ1Z19yZXMpOworCS8qIEp1c3Qgc3RlYWwgdGhlIGJsb2NrLCB0aGUgY2hpcHJhbSBhbGxvY2F0b3IgaXNuJ3QgZnVuY3Rpb25hbCB5ZXQgKi8KKwlhbWlnYV9jaGlwX3NpemUgLT0gU0FWRUtNU0dfTUFYTUVNOworCXNhdmVrbXNnID0gKHZvaWQgKilaVFdPX1ZBRERSKENISVBfUEhZU0FERFIgKyBhbWlnYV9jaGlwX3NpemUpOwogCXNhdmVrbXNnLT5tYWdpYzEgPSBTQVZFS01TR19NQUdJQzE7CiAJc2F2ZWttc2ctPm1hZ2ljMiA9IFNBVkVLTVNHX01BR0lDMjsKIAlzYXZla21zZy0+bWFnaWNwdHIgPSBaVFdPX1BBRERSKHNhdmVrbXNnKTsKQEAgLTYyOCw4ICs2MjgsNiBAQAogCiAJYW1pZ2FfY29uc29sZV9kcml2ZXIud3JpdGUgPSBhbWlnYV9tZW1fY29uc29sZV93cml0ZTsKIAlyZWdpc3Rlcl9jb25zb2xlKCZhbWlnYV9jb25zb2xlX2RyaXZlcik7Ci0KLWRvbmU6CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMgYi9hcmNoL202OGsvYXRhcmkvYXRhaW50cy5jCmluZGV4IDM5NDc4ZGQuLjI2YTgwNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWludHMuYwpAQCAtMzg4LDkgKzM4OCw5IEBACiAJfQogCiAJaWYgKEFUQVJJSFdfUFJFU0VOVChTQ0MpICYmICFhdGFyaV9TQ0NfcmVzZXRfZG9uZSkgewotCQlzY2MuY2hhX2FfY3RybCA9IDk7CisJCWF0YXJpX3NjYy5jaGFfYV9jdHJsID0gOTsKIAkJTUZQREVMQVkoKTsKLQkJc2NjLmNoYV9hX2N0cmwgPSAoY2hhcikgMHhjMDsgLyogaGFyZHdhcmUgcmVzZXQgKi8KKwkJYXRhcmlfc2NjLmNoYV9hX2N0cmwgPSAoY2hhcikgMHhjMDsgLyogaGFyZHdhcmUgcmVzZXQgKi8KIAl9CiAKIAlpZiAoQVRBUklIV19QUkVTRU5UKFNDVSkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYwppbmRleCBhZTJkOTZlLi40MjAzZDEwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAkJQVRBUklIV19TRVQoU0NDX0RNQSk7CiAJCXByaW50aygiU0NDX0RNQSAiKTsKIAl9Ci0JaWYgKHNjY190ZXN0KCZzY2MuY2hhX2FfY3RybCkpIHsKKwlpZiAoc2NjX3Rlc3QoJmF0YXJpX3NjYy5jaGFfYV9jdHJsKSkgewogCQlBVEFSSUhXX1NFVChTQ0MpOwogCQlwcmludGsoIlNDQyAiKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvZGVidWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCmluZGV4IDI4ZWZkYzMuLjVhNDg0MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCkBAIC01Myw5ICs1Myw5IEBACiB7CiAJZG8gewogCQlNRlBERUxBWSgpOwotCX0gd2hpbGUgKCEoc2NjLmNoYV9iX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLworCX0gd2hpbGUgKCEoYXRhcmlfc2NjLmNoYV9iX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLwogCU1GUERFTEFZKCk7Ci0Jc2NjLmNoYV9iX2RhdGEgPSBjOworCWF0YXJpX3NjYy5jaGFfYl9kYXRhID0gYzsKIH0KIAogc3RhdGljIHZvaWQgYXRhcmlfc2NjX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCkBAIC0xNDAsOSArMTQwLDkgQEAKIHsKIAlkbyB7CiAJCU1GUERFTEFZKCk7Ci0JfSB3aGlsZSAoIShzY2MuY2hhX2JfY3RybCAmIDB4MDEpKTsgLyogd2FpdCBmb3IgcnggYnVmIGZpbGxlZCAqLworCX0gd2hpbGUgKCEoYXRhcmlfc2NjLmNoYV9iX2N0cmwgJiAweDAxKSk7IC8qIHdhaXQgZm9yIHJ4IGJ1ZiBmaWxsZWQgKi8KIAlNRlBERUxBWSgpOwotCXJldHVybiBzY2MuY2hhX2JfZGF0YTsKKwlyZXR1cm4gYXRhcmlfc2NjLmNoYV9iX2RhdGE7CiB9CiAKIGludCBhdGFyaV9taWRpX2NvbnNvbGVfd2FpdF9rZXkoc3RydWN0IGNvbnNvbGUgKmNvKQpAQCAtMTg1LDkgKzE4NSw5IEBACiAKICNkZWZpbmUgU0NDX1dSSVRFKHJlZywgdmFsKQkJCQlcCiAJZG8gewkJCQkJCVwKLQkJc2NjLmNoYV9iX2N0cmwgPSAocmVnKTsJCQlcCisJCWF0YXJpX3NjYy5jaGFfYl9jdHJsID0gKHJlZyk7CQlcCiAJCU1GUERFTEFZKCk7CQkJCVwKLQkJc2NjLmNoYV9iX2N0cmwgPSAodmFsKTsJCQlcCisJCWF0YXJpX3NjYy5jaGFfYl9jdHJsID0gKHZhbCk7CQlcCiAJCU1GUERFTEFZKCk7CQkJCVwKIAl9IHdoaWxlICgwKQogCkBAIC0yNDAsNyArMjQwLDcgQEAKIAlyZWczID0gKGNmbGFnICYgQ1NJWkUpID09IENTOCA/IDB4YzAgOiAweDQwOwogCXJlZzUgPSAoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4ID8gMHg2MCA6IDB4MjAgfCAweDgyIC8qIGFzc2VydCBEVFIvUlRTICovOwogCi0JKHZvaWQpc2NjLmNoYV9iX2N0cmw7CQkvKiByZXNldCByZWcgcG9pbnRlciAqLworCSh2b2lkKWF0YXJpX3NjYy5jaGFfYl9jdHJsOwkvKiByZXNldCByZWcgcG9pbnRlciAqLwogCVNDQ19XUklURSg5LCAweGMwKTsJCS8qIHJlc2V0ICovCiAJTE9OR19ERUxBWSgpOwkJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KIAlTQ0NfV1JJVEUoNCwgKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwMSA6IDB4MDMpCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlody5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaHcuaAppbmRleCBhNzE0ZTFhLi5mNTFmNzA5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlody5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWh3LmgKQEAgLTQ0OSw3ICs0NDksNyBAQAogICB1X2NoYXIgY2hhcl9kdW1teTM7CiAgIHVfY2hhciBjaGFfYl9kYXRhOwogIH07Ci0jIGRlZmluZSBzY2MgKCgqKHZvbGF0aWxlIHN0cnVjdCBTQ0MqKVNDQ19CQVMpKQorIyBkZWZpbmUgYXRhcmlfc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKilTQ0NfQkFTKSkKIAogLyogVGhlIEVTQ0MgKFo4NTIzMCkgaW4gYW4gQXRhcmkgU1QuIFRoZSBjaGFubmVscyBhcmUgcmV2ZXJzZWQhICovCiAjIGRlZmluZSBzdF9lc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKikweGZmZmZmYTMxKSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zdHJpbmcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zdHJpbmcuaAppbmRleCAyOTM2ZGRhLi4zMjE5ODQ1IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3RyaW5nLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N0cmluZy5oCkBAIC04MSwxOCArODEsNiBAQAogCXN0cmNweShfX2QgKyBzdHJsZW4oX19kKSwgKHMpKTsJCVwKIH0pCiAKLSNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0hSCi1zdGF0aWMgaW5saW5lIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICpzLCBpbnQgYykKLXsKLQljaGFyIHNjLCBjaCA9IGM7Ci0KLQlmb3IgKDsgKHNjID0gKnMrKykgIT0gY2g7ICkgewotCQlpZiAoIXNjKQotCQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiAoY2hhciAqKXMgLSAxOwotfQotCiAjaWZuZGVmIENPTkZJR19DT0xERklSRQogI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDTVAKIHN0YXRpYyBpbmxpbmUgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpCkBAIC0xMTEsMTQgKzk5LDEyIEBACiAJCTogIithIiAoY3MpLCAiK2EiIChjdCksICI9ZCIgKHJlcykpOwogCXJldHVybiByZXM7CiB9CisjZW5kaWYgLyogQ09ORklHX0NPTERGSVJFICovCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQogZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CiAKLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ01QCi1leHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgX19rZXJuZWxfc2l6ZV90KTsKICNkZWZpbmUgbWVtY21wKGQsIHMsIG4pIF9fYnVpbHRpbl9tZW1jbXAoZCwgcywgbikKLSNlbmRpZiAvKiBDT05GSUdfQ09MREZJUkUgKi8KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKIGV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIF9fa2VybmVsX3NpemVfdCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL3N0cmluZy5jIGIvYXJjaC9tNjhrL2xpYi9zdHJpbmcuYwppbmRleCA0MjUzZjg3Li5kMzk5YzVmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbGliL3N0cmluZy5jCisrKyBiL2FyY2gvbTY4ay9saWIvc3RyaW5nLmMKQEAgLTI0MywxNCArMjQzLDMgQEAKIAlyZXR1cm4geGRlc3Q7CiB9CiBFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwotCi1pbnQgbWVtY21wKGNvbnN0IHZvaWQgKmNzLCBjb25zdCB2b2lkICpjdCwgc2l6ZV90IGNvdW50KQotewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN1MSwgKnN1MjsKLQotCWZvciAoc3UxID0gY3MsIHN1MiA9IGN0OyBjb3VudCA+IDA7ICsrc3UxLCArK3N1MiwgY291bnQtLSkKLQkJaWYgKCpzdTEgIT0gKnN1MikKLQkJCXJldHVybiAqc3UxIDwgKnN1MiA/IC0xIDogKzE7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKG1lbWNtcCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGVmMzMyMTMuLjQ3ZTE1ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xNDEsNiArMTQxLDEyIEBACiAJCSooX19wYXJhbSkKIAkJX19zdG9wX19fcGFyYW0gPSAuOwogCisJCS8qIEJ1aWx0LWluIG1vZHVsZSB2ZXJzaW9ucyAqLworCQkuID0gQUxJR04oNCkgOworCQlfX3N0YXJ0X19fbW9kdmVyID0gLjsKKwkJKihfX21vZHZlcikKKwkJX19zdG9wX19fbW9kdmVyID0gLjsKKwogCQkuID0gQUxJR04oNCkgOwogCQlfZXRleHQgPSAuIDsKIAl9ID4gVEVYVApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvbGliL01ha2VmaWxlIGIvYXJjaC9tNjhrbm9tbXUvbGliL01ha2VmaWxlCmluZGV4IGQ5NGQ3MDkuLjMyZDg1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL202OGtub21tdS9saWIvTWFrZWZpbGUKQEAgLTQsNCArNCw0IEBACiAKIGxpYi15CTo9IGFzaGxkaTMubyBhc2hyZGkzLm8gbHNocmRpMy5vIFwKIAkgICBtdWxkaTMubyBtdWxzaTMubyBkaXZzaTMubyB1ZGl2c2kzLm8gbW9kc2kzLm8gdW1vZHNpMy5vIFwKLQkgICBjaGVja3N1bS5vIG1lbWNweS5vIG1lbXNldC5vIGRlbGF5Lm8KKwkgICBjaGVja3N1bS5vIG1lbWNweS5vIG1lbW1vdmUubyBtZW1zZXQubyBkZWxheS5vCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9saWIvbWVtbW92ZS5jIGIvYXJjaC9tNjhrbm9tbXUvbGliL21lbW1vdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2RjZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrbm9tbXUvbGliL21lbW1vdmUuYwpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIF9fSU5fU1RSSU5HX0MKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCit2b2lkICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisJdm9pZCAqeGRlc3QgPSBkZXN0OworCXNpemVfdCB0ZW1wOworCisJaWYgKCFuKQorCQlyZXR1cm4geGRlc3Q7CisKKwlpZiAoZGVzdCA8IHNyYykgeworCQlpZiAoKGxvbmcpZGVzdCAmIDEpIHsKKwkJCWNoYXIgKmNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IGNoYXIgKmNzcmMgPSBzcmM7CisJCQkqY2Rlc3QrKyA9ICpjc3JjKys7CisJCQlkZXN0ID0gY2Rlc3Q7CisJCQlzcmMgPSBjc3JjOworCQkJbi0tOworCQl9CisJCWlmIChuID4gMiAmJiAobG9uZylkZXN0ICYgMikgeworCQkJc2hvcnQgKnNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IHNob3J0ICpzc3JjID0gc3JjOworCQkJKnNkZXN0KysgPSAqc3NyYysrOworCQkJZGVzdCA9IHNkZXN0OworCQkJc3JjID0gc3NyYzsKKwkJCW4gLT0gMjsKKwkJfQorCQl0ZW1wID0gbiA+PiAyOworCQlpZiAodGVtcCkgeworCQkJbG9uZyAqbGRlc3QgPSBkZXN0OworCQkJY29uc3QgbG9uZyAqbHNyYyA9IHNyYzsKKwkJCXRlbXAtLTsKKwkJCWRvCisJCQkJKmxkZXN0KysgPSAqbHNyYysrOworCQkJd2hpbGUgKHRlbXAtLSk7CisJCQlkZXN0ID0gbGRlc3Q7CisJCQlzcmMgPSBsc3JjOworCQl9CisJCWlmIChuICYgMikgeworCQkJc2hvcnQgKnNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IHNob3J0ICpzc3JjID0gc3JjOworCQkJKnNkZXN0KysgPSAqc3NyYysrOworCQkJZGVzdCA9IHNkZXN0OworCQkJc3JjID0gc3NyYzsKKwkJfQorCQlpZiAobiAmIDEpIHsKKwkJCWNoYXIgKmNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IGNoYXIgKmNzcmMgPSBzcmM7CisJCQkqY2Rlc3QgPSAqY3NyYzsKKwkJfQorCX0gZWxzZSB7CisJCWRlc3QgPSAoY2hhciAqKWRlc3QgKyBuOworCQlzcmMgPSAoY29uc3QgY2hhciAqKXNyYyArIG47CisJCWlmICgobG9uZylkZXN0ICYgMSkgeworCQkJY2hhciAqY2Rlc3QgPSBkZXN0OworCQkJY29uc3QgY2hhciAqY3NyYyA9IHNyYzsKKwkJCSotLWNkZXN0ID0gKi0tY3NyYzsKKwkJCWRlc3QgPSBjZGVzdDsKKwkJCXNyYyA9IGNzcmM7CisJCQluLS07CisJCX0KKwkJaWYgKG4gPiAyICYmIChsb25nKWRlc3QgJiAyKSB7CisJCQlzaG9ydCAqc2Rlc3QgPSBkZXN0OworCQkJY29uc3Qgc2hvcnQgKnNzcmMgPSBzcmM7CisJCQkqLS1zZGVzdCA9ICotLXNzcmM7CisJCQlkZXN0ID0gc2Rlc3Q7CisJCQlzcmMgPSBzc3JjOworCQkJbiAtPSAyOworCQl9CisJCXRlbXAgPSBuID4+IDI7CisJCWlmICh0ZW1wKSB7CisJCQlsb25nICpsZGVzdCA9IGRlc3Q7CisJCQljb25zdCBsb25nICpsc3JjID0gc3JjOworCQkJdGVtcC0tOworCQkJZG8KKwkJCQkqLS1sZGVzdCA9ICotLWxzcmM7CisJCQl3aGlsZSAodGVtcC0tKTsKKwkJCWRlc3QgPSBsZGVzdDsKKwkJCXNyYyA9IGxzcmM7CisJCX0KKwkJaWYgKG4gJiAyKSB7CisJCQlzaG9ydCAqc2Rlc3QgPSBkZXN0OworCQkJY29uc3Qgc2hvcnQgKnNzcmMgPSBzcmM7CisJCQkqLS1zZGVzdCA9ICotLXNzcmM7CisJCQlkZXN0ID0gc2Rlc3Q7CisJCQlzcmMgPSBzc3JjOworCQl9CisJCWlmIChuICYgMSkgeworCQkJY2hhciAqY2Rlc3QgPSBkZXN0OworCQkJY29uc3QgY2hhciAqY3NyYyA9IHNyYzsKKwkJCSotLWNkZXN0ID0gKi0tY3NyYzsKKwkJfQorCX0KKwlyZXR1cm4geGRlc3Q7Cit9CitFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9pbnRjMi5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9pbnRjMi5jCmluZGV4IGQwOWQ5ZGEuLmM1MTUxZjggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNDkvaW50YzIuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjQ5L2ludGMyLmMKQEAgLTUwLDggKzUwLDEwIEBACiAJaW50IGlycTsKIAogCS8qIEdQSU8gaW50ZXJydXB0IHNvdXJjZXMgKi8KLQlmb3IgKGlycSA9IE1DRklOVEMyX0dQSU9JUlEwOyAoaXJxIDw9IE1DRklOVEMyX0dQSU9JUlE3KTsgaXJxKyspCisJZm9yIChpcnEgPSBNQ0ZJTlRDMl9HUElPSVJRMDsgKGlycSA8PSBNQ0ZJTlRDMl9HUElPSVJRNyk7IGlycSsrKSB7CiAJCWlycV9kZXNjW2lycV0uY2hpcCA9ICZpbnRjMl9pcnFfZ3Bpb19jaGlwOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfZWRnZV9pcnEpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMKaW5kZXggMjQwYTdhNi4uNjc2OTYwYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9lbnRyeS5TCkBAIC0xMDgsNyArMTA4LDYgQEAKIAltb3ZlbAklZDEsJWEyCiAxOgogCW1vdmUJJWEyQChUSV9GTEFHUyksJWQxCS8qIHRocmVhZF9pbmZvLT5mbGFncyAqLwotCWFuZGwJI19USUZfV09SS19NQVNLLCVkMQogCWpuZQlMd29ya190b19kbwogCVJFU1RPUkVfQUxMCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2NvbW1wcm9jLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9jb21tcHJvYy5jCmluZGV4IGYyN2U2ODguLjhlNGUxMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2NvbW1wcm9jLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29tbXByb2MuYwpAQCAtMjEwLDcgKzIxMCw3IEBACiBjcG1faW5zdGFsbF9oYW5kbGVyKGludCB2ZWMsIHZvaWQgKCpoYW5kbGVyKSgpLCB2b2lkICpkZXZfaWQpCiB7CiAKLQlyZXF1ZXN0X2lycSh2ZWMsIGhhbmRsZXIsIElSUV9GTEdfTE9DSywgInRpbWVyIiwgZGV2X2lkKTsKKwlyZXF1ZXN0X2lycSh2ZWMsIGhhbmRsZXIsIDAsICJ0aW1lciIsIGRldl9pZCk7CiAKIC8qIAlpZiAoY3BtX3ZlY3NbdmVjXS5oYW5kbGVyICE9IDApICovCiAvKiAJCXByaW50ayhLRVJOX0lORk8gIkNQTSBpbnRlcnJ1cHQgJXggcmVwbGFjaW5nICV4XG4iLCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9jb25maWcuYwppbmRleCBhYzYyOWZhMy4uOWRkNWJjYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29uZmlnLmMKQEAgLTc1LDcgKzc1LDcgQEAKICAgLyogU2V0IGNvbXBhcmUgcmVnaXN0ZXIgIDMyS2h6IC8gMzIgLyAxMCA9IDEwMCAqLwogICBUQ01QID0gMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIAotICByZXF1ZXN0X2lycShJUlFfTUFDSFNQRUMgfCAxLCB0aW1lcl9yb3V0aW5lLCBJUlFfRkxHX0xPQ0ssICJ0aW1lciIsIE5VTEwpOworICByZXF1ZXN0X2lycShJUlFfTUFDSFNQRUMgfCAxLCB0aW1lcl9yb3V0aW5lLCAwLCAidGltZXIiLCBOVUxMKTsKICNlbmRpZgogCiAgIC8qIEdlbmVyYWwgcHVycG9zZSBxdWljYyB0aW1lcnM6IE1DNjgzNjBVTSBwNy0yMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2VudHJ5LlMKaW5kZXggOGEyODc4OC4uNDZjMWIxOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9lbnRyeS5TCkBAIC0xMDQsNyArMTA0LDYgQEAKIAltb3ZlbAklZDEsJWEyCiAxOgogCW1vdmUJJWEyQChUSV9GTEFHUyksJWQxCS8qIHRocmVhZF9pbmZvLT5mbGFncyAqLwotCWFuZGwJI19USUZfV09SS19NQVNLLCVkMQogCWpuZQlMd29ya190b19kbwogCVJFU1RPUkVfQUxMCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2ludHMuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2ludHMuYwppbmRleCBhZDk2YWIxLi5hMjkwNDFjIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9pbnRzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvaW50cy5jCkBAIC0xMzIsOCArMTMyLDggQEAKIAlwcXVpY2MtPmludHJfY2ltciA9IDB4MDAwMDAwMDA7CiAKIAlmb3IgKGkgPSAwOyAoaSA8IE5SX0lSUVMpOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKGlycSwgJmludGNfaXJxX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9jaGlwKGksICZpbnRjX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKaW5kZXggNGRkZmMzZGEuLjU4MzdjZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUwpAQCAtMTM4LDcgKzEzOCw2IEBACiAJYW5kbAkjLVRIUkVBRF9TSVpFLCVkMQkvKiBhdCBiYXNlIG9mIGtlcm5lbCBzdGFjayAqLwogCW1vdmVsCSVkMSwlYTAKIAltb3ZlbAklYTBAKFRJX0ZMQUdTKSwlZDEJLyogZ2V0IHRocmVhZF9pbmZvLT5mbGFncyAqLwotCWFuZGwJIzB4ZWZmZiwlZDEKIAlqbmUJTHdvcmtfdG9fZG8JCS8qIHN0aWxsIHdvcmsgdG8gZG8gKi8KIAogTHJldHVybjoKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKaW5kZXggNWZkMzE5MC4uYzQ1MzJmMCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9yZWdpc3RlcnMuaD4KIAotI2lmZGVmIENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX01TUl9JTlNUUgorI2lmIENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX01TUl9JTlNUUgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF9sb2NhbF9pcnFfc2F2ZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYjIzZjY4MC4uODg1NTc0YSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC00MTEsMjAgKzQxMSwxOSBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV91cGRhdGUocHRlX3QgKnAsIHVuc2lnbmVkIGxvbmcgY2xyLAogCQkJCXVuc2lnbmVkIGxvbmcgc2V0KQogewotCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXAsIG1zcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBvbGQsIHRtcDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJcCi0JbXNyY2xyCSUyLCAweDJcblwKLQlub3BcblwKLQlsdwklMCwgJTQsIHIwXG5cCi0JYW5kbgklMSwgJTAsICU1XG5cCi0Jb3IJJTEsICUxLCAlNlxuXAotCXN3CSUxLCAlNCwgcjBcblwKLQltdHMgICAgIHJtc3IsICUyXG5cCi0Jbm9wIgotCTogIj0mciIgKG9sZCksICI9JnIiICh0bXApLCAiPSZyIiAobXNyKSwgIj1tIiAoKnApCi0JOiAiciIgKCh1bnNpZ25lZCBsb25nKShwICsgMSkgLSA0KSwgInIiIChjbHIpLCAiciIgKHNldCksICJtIiAoKnApCi0JOiAiY2MiKTsKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCSJsdwklMCwgJTIsIHIwCVxuIgorCQkJCSJhbmRuCSUxLCAlMCwgJTMJXG4iCisJCQkJIm9yCSUxLCAlMSwgJTQJXG4iCisJCQkJInN3CSUxLCAlMiwgcjAJXG4iCisJCQk6ICI9JnIiIChvbGQpLCAiPSZyIiAodG1wKQorCQkJOiAiciIgKCh1bnNpZ25lZCBsb25nKShwICsgMSkgLSA0KSwgInIiIChjbHIpLCAiciIgKHNldCkKKwkJCTogImNjIik7CisKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIG9sZDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L3B2ci5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvcHZyLmMKaW5kZXggZTAxYWZhNi4uNDg4YzFlZCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvcHZyLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvcHZyLmMKQEAgLTI3LDcgKzI3LDcgQEAKIAlyZWdpc3RlciB1bnNpZ25lZCB0bXAgX19hc21fXygicjMiKTsJCQlcCiAJdG1wID0gMHgwOwkvKiBQcmV2ZW50IHdhcm5pbmcgYWJvdXQgdW51c2VkICovCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQlcCi0JCQkibWZzCSUwLCBycHZyIiAjcHZyaWQgIjsiCVwKKwkJCSJtZnMJJTAsIHJwdnIiICNwdnJpZCAiOyIJCVwKIAkJCTogIj1yIiAodG1wKSA6IDogIm1lbW9yeSIpOyAJCVwKIAl2YWwgPSB0bXA7CQkJCQkJXAogfQpAQCAtNTQsNyArNTQsNyBAQAogCWlmICghKGZsYWdzICYgUFZSX01TUl9CSVQpKQogCQlyZXR1cm4gMDsKIAotCWdldF9zaW5nbGVfcHZyKDB4MDAsIHB2cjApOworCWdldF9zaW5nbGVfcHZyKDAsIHB2cjApOwogCXByX2RlYnVnKCIlczogcHZyMCBpcyAweCUwOHhcbiIsIF9fZnVuY19fLCBwdnIwKTsKIAogCWlmIChwdnIwICYgUFZSMF9QVlJfRlVMTF9NQVNLKQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9oZWFkLlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUwppbmRleCA0MjQzNDAwLi43NzhhNWNlIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUwpAQCAtNjIsMjMgKzYyLDMyIEBACiAJYW5kaQlyMSwgcjEsIH4yCiAJbXRzCXJtc3IsIHIxCiAvKgotICogSGVyZSBpcyBjaGVja2luZyBtZWNoYW5pc20gd2hpY2ggY2hlY2sgaWYgTWljcm9ibGF6ZSBoYXMgbXNyIGluc3RydWN0aW9ucwotICogV2UgbG9hZCBtc3IgYW5kIGNvbXBhcmUgaXQgd2l0aCBwcmV2aW91cyByMSB2YWx1ZSAtIGlmIGlzIHRoZSBzYW1lLAotICogbXNyIGluc3RydWN0aW9ucyB3b3JrcyBpZiBub3QgLSBjcHUgZG9uJ3QgaGF2ZSB0aGVtLgorICogQWNjb3JkaW5nIHRvIFhpbGlueCwgbXNyY2xyIGluc3RydWN0aW9uIGJlaGF2ZXMgbGlrZSAnbWZzIHJYLHJwYycKKyAqIGlmIHRoZSBtc3JjbHIgaW5zdHJ1Y3Rpb24gaXMgbm90IGVuYWJsZWQuIFdlIHVzZSB0aGlzIHRvIGRldGVjdAorICogaWYgdGhlIG9wY29kZSBpcyBhdmFpbGFibGUsIGJ5IGlzc3VpbmcgbXNyY2xyIGFuZCB0aGVuIHRlc3RpbmcgdGhlIHJlc3VsdC4KKyAqIHI4ID09IDAgLSBtc3IgaW5zdHJ1Y3Rpb25zIGFyZSBpbXBsZW1lbnRlZAorICogcjggIT0gMCAtIG1zciBpbnN0cnVjdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZAogICovCi0JLyogcjg9MCAtIEkgaGF2ZSBtc3IgaW5zdHIsIDEgLSBJIGRvbid0IGhhdmUgdGhlbSAqLwotCXJzdWJpCXIwLCByMCwgMQkvKiBzZXQgdGhlIGNhcnJ5IGJpdCAqLwotCW1zcmNscglyMCwgMHg0CQkvKiB0cnkgdG8gY2xlYXIgaXQgKi8KLQkvKiByZWFkIHRoZSBjYXJyeSBiaXQsIHI4IHdpbGwgYmUgJzAnIGlmIG1zcmNsciBleGlzdHMgKi8KLQlhZGRpawlyOCwgcjAsIDAKKwltc3JjbHIJcjgsIDAgLyogY2xlYXIgbm90aGluZyAtIGp1c3QgcmVhZCBtc3IgZm9yIHRlc3QgKi8KKwljbXB1CXI4LCByOCwgcjEgLyogcjEgbXVzdCBjb250YWluIG1zciByZWcgY29udGVudCAqLwogCiAvKiByNyBtYXkgcG9pbnQgdG8gYW4gRkRULCBvciB0aGVyZSBtYXkgYmUgb25lIGxpbmtlZCBpbi4KICAgIGlmIGl0J3MgaW4gcjcsIHdlJ3ZlIGdvdCB0byBzYXZlIGl0IGF3YXkgQVNBUC4KICAgIFdlIGVuc3VyZSByNyBwb2ludHMgdG8gYSB2YWxpZCBGRFQsIGp1c3QgaW4gY2FzZSB0aGUgYm9vdGxvYWRlcgogICAgaXMgYnJva2VuIG9yIG5vbi1leGlzdGVudCAqLwogCWJlcWkJcjcsIG5vX2ZkdF9hcmcJCQkvKiBOVUxMIHBvaW50ZXI/ICBkb24ndCBjb3B5ICovCi0JbHcJcjExLCByMCwgcjcJCQkvKiBEb2VzIHI3IHBvaW50IHRvIGEgKi8KLQlyc3ViaQlyMTEsIHIxMSwgT0ZfRFRfSEVBREVSCQkvKiB2YWxpZCBGRFQ/ICovCisvKiBEb2VzIHI3IHBvaW50IHRvIGEgdmFsaWQgRkRUPyBMb2FkIEhFQURFUiBtYWdpYyBudW1iZXIgKi8KKwkvKiBSdW4gdGltZSBCaWcvTGl0dGxlIGVuZGlhbiBwbGF0Zm9ybSAqLworCS8qIFNhdmUgMSBhcyB3b3JkIGFuZCBsb2FkIGJ5dGUgLSAwIC0gQklHLCAxIC0gTElUVExFICovCisJYWRkaWsJcjExLCByMCwgMHgxIC8qIEJJRy9MSVRUTEUgY2hlY2tpbmcgdmFsdWUgKi8KKwkvKiBfX2Jzc19zdGFydCB3aWxsIGJlIHplcm9lZCBsYXRlciAtIGl0IGlzIGp1c3QgdGVtcCBsb2NhdGlvbiAqLworCXN3aQlyMTEsIHIwLCBUT1BIWVMoX19ic3Nfc3RhcnQpCisJbGJ1aQlyMTEsIHIwLCBUT1BIWVMoX19ic3Nfc3RhcnQpCisJYmVxaWQJcjExLCBiaWdfZW5kaWFuIC8qIERPIE5PVCBicmVhayBkZWxheSBzdG9wIGRlcGVuZGVuY3kgKi8KKwlsdwlyMTEsIHIwLCByNyAvKiBCaWcgZW5kaWFuIGxvYWQgaW4gZGVsYXkgc2xvdCAqLworCWx3cglyMTEsIHIwLCByNyAvKiBMaXR0bGUgZW5kaWFuIGxvYWQgKi8KK2JpZ19lbmRpYW46CisJcnN1YmkJcjExLCByMTEsIE9GX0RUX0hFQURFUgkvKiBDaGVjayBGRFQgaGVhZGVyICovCiAJYmVxaQlyMTEsIF9wcmVwYXJlX2NvcHlfZmR0CiAJb3IJcjcsIHIwLCByMAkJLyogY2xlYXIgUjcgd2hlbiBub3QgdmFsaWQgRFRCICovCiAJYm5laQlyMTEsIG5vX2ZkdF9hcmcJCQkvKiBObyAtIGdldCBvdXQgb2YgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCmluZGV4IDI1ZjZlMDcuLjc4MjY4MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKQEAgLTE0NywxMCArMTQ3LDYgQEAKIAkjaWYgQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9VU0VfQkFSUkVMID4gMAogCSNkZWZpbmUgQlNSTEkockQsIHJBLCBpbW0pCVwKIAkJYnNybGkgckQsIHJBLCBpbW0KLQkjZWxpZiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9ESVYgPiAwCi0JI2RlZmluZSBCU1JMSShyRCwgckEsIGltbSkJXAotCQlvcmkgckQsIHIwLCAoMSA8PCBpbW0pOwlcCi0JCWlkaXZ1IHJELCByRCwgckEKIAkjZWxzZQogCSNkZWZpbmUgQlNSTEkockQsIHJBLCBpbW0pIEJTUkxJICMjIGltbSAockQsIHJBKQogCS8qIE9ubHkgdGhlIHVzZWQgc2hpZnQgY29uc3RhbnRzIGRlZmluZWQgaGVyZSAtIGFkZCBtb3JlIGlmIG5lZWRlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zZXR1cC5jCmluZGV4IGJiMTU1OGUuLjkzMTJmYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3NldHVwLmMKQEAgLTE2MSwxMSArMTYxLDExIEBACiAjaWYgQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9VU0VfTVNSX0lOU1RSCiAJaWYgKG1zcikKIAkJZXByaW50aygiISEhWW91ciBrZXJuZWwgaGFzIHNldHVwIE1TUiBpbnN0cnVjdGlvbiBidXQgIgotCQkJCSJDUFUgZG9uJ3QgaGF2ZSBpdCAlZFxuIiwgbXNyKTsKKwkJCQkiQ1BVIGRvbid0IGhhdmUgaXQgJXhcbiIsIG1zcik7CiAjZWxzZQogCWlmICghbXNyKQogCQllcHJpbnRrKCIhISFZb3VyIGtlcm5lbCBub3Qgc2V0dXAgTVNSIGluc3RydWN0aW9uIGJ1dCAiCi0JCQkJIkNQVSBoYXZlIGl0ICVkXG4iLCBtc3IpOworCQkJCSJDUFUgaGF2ZSBpdCAleFxuIiwgbXNyKTsKICNlbmRpZgogCiAJZm9yIChzcmMgPSBfX2l2dF9zdGFydDsgc3JjIDwgX19pdnRfZW5kOyBzcmMrKywgZHN0KyspCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvbGliL2Zhc3Rjb3B5LlMgYi9hcmNoL21pY3JvYmxhemUvbGliL2Zhc3Rjb3B5LlMKaW5kZXggZmRjNDhiYi4uNjIwMjFkNyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2xpYi9mYXN0Y29weS5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9saWIvZmFzdGNvcHkuUwpAQCAtMjksNiArMjksMTAgQEAKICAqCWJldHdlZW4gbWVtIGxvY2F0aW9ucyB3aXRoIHNpemUgb2YgeGZlciBzcGVjJ2QgaW4gYnl0ZXMKICAqLwogCisjaWZkZWYgX19NSUNST0JMQVpFRUxfXworI2Vycm9yIE1pY3JvYmxhemUgTEUgbm90IHN1cHBvcnQgQVNNIG9wdGltaXplZCBsaWIgZnVuYy4gRGlzYWJsZSBPUFRfTElCX0FTTS4KKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCS50ZXh0CiAJLmdsb2JsCW1lbWNweQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYwppbmRleCAxMWJkZDY4Li5mYzc3MGJlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYwpAQCAtMTY5LDExICsxNjksMTEgQEAKIAogCXN0cnVjdCBjb25zb2xlICp0bXA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZm9yX2VhY2hfY29uc29sZSh0bXApCiAJCWlmICh0bXAgPT0gJnBkY19jb25zKQogCQkJYnJlYWs7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlpZiAoIXRtcCkgewogCQlwcmludGsoS0VSTl9JTkZPICJQREMgY29uc29sZSBkcml2ZXIgbm90IHJlZ2lzdGVyZWQgYW55bW9yZSwgbm90IGNyZWF0aW5nICVzXG4iLCBwZGNfY29ucy5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCmluZGV4IDk5MWQ1OTkuLmZlNTZhMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaApAQCAtMjQwLDYgKzI0MCwxMiBAQAogCSAqIGNsYWltcyB0byBzdXBwb3J0IGtleGVjLgogCSAqLwogCWludCAoKm1hY2hpbmVfa2V4ZWNfcHJlcGFyZSkoc3RydWN0IGtpbWFnZSAqaW1hZ2UpOworCisJLyogQ2FsbGVkIHRvIHBlcmZvcm0gdGhlIF9yZWFsXyBrZXhlYy4KKwkgKiBEbyBOT1QgYWxsb2NhdGUgbWVtb3J5IG9yIGZhaWwgaGVyZS4gV2UgYXJlIHBhc3QgdGhlIHBvaW50IG9mCisJICogbm8gcmV0dXJuLgorCSAqLworCXZvaWQgKCptYWNoaW5lX2tleGVjKShzdHJ1Y3Qga2ltYWdlICppbWFnZSk7CiAjZW5kaWYgLyogQ09ORklHX0tFWEVDICovCiAKICNpZmRlZiBDT05GSUdfU1VTUEVORApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKaW5kZXggOGVhZWQ4MS4uMTcxOTRmYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oCkBAIC00MCw4ICs0MCw4IEBACiAKIC8qIE1BUyByZWdpc3RlcnMgYml0IGRlZmluaXRpb25zICovCiAKLSNkZWZpbmUgTUFTMF9UTEJTRUwoeCkJCSgoeCA8PCAyOCkgJiAweDMwMDAwMDAwKQotI2RlZmluZSBNQVMwX0VTRUwoeCkJCSgoeCA8PCAxNikgJiAweDBGRkYwMDAwKQorI2RlZmluZSBNQVMwX1RMQlNFTCh4KQkJKCgoeCkgPDwgMjgpICYgMHgzMDAwMDAwMCkKKyNkZWZpbmUgTUFTMF9FU0VMKHgpCQkoKCh4KSA8PCAxNikgJiAweDBGRkYwMDAwKQogI2RlZmluZSBNQVMwX05WKHgpCQkoKHgpICYgMHgwMDAwMEZGRikKICNkZWZpbmUgTUFTMF9IRVMJCTB4MDAwMDQwMDAKICNkZWZpbmUgTUFTMF9XUV9BTExXQVlTCQkweDAwMDAwMDAwCkBAIC01MCwxMiArNTAsMTIgQEAKIAogI2RlZmluZSBNQVMxX1ZBTElECQkweDgwMDAwMDAwCiAjZGVmaW5lIE1BUzFfSVBST1QJCTB4NDAwMDAwMDAKLSNkZWZpbmUgTUFTMV9USUQoeCkJCSgoeCA8PCAxNikgJiAweDNGRkYwMDAwKQorI2RlZmluZSBNQVMxX1RJRCh4KQkJKCgoeCkgPDwgMTYpICYgMHgzRkZGMDAwMCkKICNkZWZpbmUgTUFTMV9JTkQJCTB4MDAwMDIwMDAKICNkZWZpbmUgTUFTMV9UUwkJCTB4MDAwMDEwMDAKICNkZWZpbmUgTUFTMV9UU0laRV9NQVNLCQkweDAwMDAwZjgwCiAjZGVmaW5lIE1BUzFfVFNJWkVfU0hJRlQJNwotI2RlZmluZSBNQVMxX1RTSVpFKHgpCQkoKHggPDwgTUFTMV9UU0laRV9TSElGVCkgJiBNQVMxX1RTSVpFX01BU0spCisjZGVmaW5lIE1BUzFfVFNJWkUoeCkJCSgoKHgpIDw8IE1BUzFfVFNJWkVfU0hJRlQpICYgTUFTMV9UU0laRV9NQVNLKQogCiAjZGVmaW5lIE1BUzJfRVBOCQkweEZGRkZGMDAwCiAjZGVmaW5lIE1BUzJfWDAJCQkweDAwMDAwMDQwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCA1M2I2NGJlLi5kYTRiMjAwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAjaWZkZWYgQ09ORklHX0ZMQVRNRU0KICNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCQkoTUVNT1JZX1NUQVJUID4+IFBBR0VfU0hJRlQpCi0jZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPj0gQVJDSF9QRk5fT0ZGU0VUICYmIChwZm4pIDwgKEFSQ0hfUEZOX09GRlNFVCArIG1heF9tYXBucikpCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPj0gQVJDSF9QRk5fT0ZGU0VUICYmIChwZm4pIDwgbWF4X21hcG5yKQogI2VuZGlmCiAKICNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUwppbmRleCA1NWNiYTRhLi5mOGNkOWZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAogX0dMT0JBTChfX3NldHVwX2NwdV82MDMpCi0JbWZscglyNAorCW1mbHIJcjUKIEJFR0lOX01NVV9GVFJfU0VDVElPTgogCWxpCXIxMCwwCiAJbXRzcHIJU1BSTl9TUFJHXzYwM19MUlUscjEwCQkvKiBpbml0IFNXIExSVSB0cmFja2luZyAqLwpAQCAtMjcsNjAgKzI3LDYwIEBACiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX0ZQVV9VTkFWQUlMQUJMRSkKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCi0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNjA0KQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzYwNF9oaWQwCi0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzUwKQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc1MGN4KQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAogCWJsCXNldHVwXzc1MGN4Ci0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzUwZngpCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCiAJYmwJc2V0dXBfNzUwZngKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NDAwKQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF83NDAwX3dvcmthcm91bmRzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NDEwKQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF83NDEwX3dvcmthcm91bmRzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKIAlsaQlyMywwCiAJbXRzcHIJU1BSTl9MMkNSMixyMwotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc0NXgpCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzQ1eF9zcGVjaWZpY3MKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogCiAvKiBFbmFibGUgY2FjaGVzIGZvciA2MDMncywgNjA0LCA3NTAgJiA3NDAwICovCkBAIC0xOTQsMTAgKzE5NCwxMCBAQAogCWNyb3IJNCpjcjArZXEsNCpjcjArZXEsNCpjcjErZXEKIAljcm9yCTQqY3IwK2VxLDQqY3IwK2VxLDQqY3IyK2VxCiAJYm5lbHIKLQlsd3oJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjUpCisJbHd6CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQogCWxpCXI3LENQVV9GVFJfQ0FOX05BUAogCWFuZGMJcjYscjYscjcKLQlzdHcJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjUpCisJc3R3CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQogCWJscgogCiAvKiA3NTBmeCBzcGVjaWZpYwpAQCAtMjI1LDEyICsyMjUsMTIgQEAKIAlhbmRpcy4JcjExLHIxMSxMM0NSX0wzRUBoCiAJYmVxCTFmCiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9MM0NSKQotCWx3eglyNixDUFVfU1BFQ19GRUFUVVJFUyhyNSkKKwlsd3oJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjQpCiAJYW5kaS4JcjAscjYsQ1BVX0ZUUl9MM19ESVNBQkxFX05BUAogCWJlcQkxZgogCWxpCXI3LENQVV9GVFJfQ0FOX05BUAogCWFuZGMJcjYscjYscjcKLQlzdHcJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjUpCisJc3R3CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQogMToKIAltZnNwcglyMTEsU1BSTl9ISUQwCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCA4ZDc0YTI0Li5lOGU5MTVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0yMDc2LDggKzIwNzYsOCBAQAogCSAqIHBvaW50ZXIgb24gcHBjNjQgYW5kIGJvb2tlIGFzIHdlIGFyZSBydW5uaW5nIGF0IDAgaW4gcmVhbCBtb2RlCiAJICogb24gcHBjNjQgYW5kIHJlbG9jX29mZnNldCBpcyBhbHdheXMgMCBvbiBib29rZS4KIAkgKi8KLQlpZiAocy0+Y3B1X3NldHVwKSB7Ci0JCXMtPmNwdV9zZXR1cChvZmZzZXQsIHMpOworCWlmICh0LT5jcHVfc2V0dXApIHsKKwkJdC0+Y3B1X3NldHVwKG9mZnNldCwgdCk7CiAJfQogI2VuZGlmIC8qIENPTkZJR19QUEM2NCB8fCBDT05GSUdfQk9PS0UgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggNDlhMTcwYS4uYTVmODY3MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKQEAgLTg3LDcgKzg3LDEwIEBACiAKIAlzYXZlX2Z0cmFjZV9lbmFibGVkID0gX19mdHJhY2VfZW5hYmxlZF9zYXZlKCk7CiAKLQlkZWZhdWx0X21hY2hpbmVfa2V4ZWMoaW1hZ2UpOworCWlmIChwcGNfbWQubWFjaGluZV9rZXhlYykKKwkJcHBjX21kLm1hY2hpbmVfa2V4ZWMoaW1hZ2UpOworCWVsc2UKKwkJZGVmYXVsdF9tYWNoaW5lX2tleGVjKGltYWdlKTsKIAogCV9fZnRyYWNlX2VuYWJsZWRfcmVzdG9yZShzYXZlX2Z0cmFjZV9lbmFibGVkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50X2ZzbF9lbWIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudF9mc2xfZW1iLmMKaW5kZXggNGRjZjVmOC4uYjBkYzhmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50X2ZzbF9lbWIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jCkBAIC01OTYsNiArNTk2LDcgQEAKIAkJCWlmIChsZWZ0IDw9IDApCiAJCQkJbGVmdCA9IHBlcmlvZDsKIAkJCXJlY29yZCA9IDE7CisJCQlldmVudC0+aHcubGFzdF9wZXJpb2QgPSBldmVudC0+aHcuc2FtcGxlX3BlcmlvZDsKIAkJfQogCQlpZiAobGVmdCA8IDB4ODAwMDAwMDBMTCkKIAkJCXZhbCA9IDB4ODAwMDAwMDBMTCAtIGxlZnQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDdhMWQ1Y2IuLjgzMDNhNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zNTMsNiArMzUzLDcgQEAKIAkJCXByaW1lX2RlYnVnX3JlZ3MobmV3X3RocmVhZCk7CiB9CiAjZWxzZQkvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLworI2lmbmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCiBzdGF0aWMgdm9pZCBzZXRfZGVidWdfcmVnX2RlZmF1bHRzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCiB7CiAJaWYgKHRocmVhZC0+ZGFicikgewpAQCAtMzYwLDYgKzM2MSw3IEBACiAJCXNldF9kYWJyKDApOwogCX0KIH0KKyNlbmRpZiAvKiAhQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCAqLwogI2VuZGlmCS8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KIAogaW50IHNldF9kYWJyKHVuc2lnbmVkIGxvbmcgZGFicikKQEAgLTY3MCwxMSArNjcyLDExIEBACiB7CiAJZGlzY2FyZF9sYXp5X2NwdV9zdGF0ZSgpOwogCi0jaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVFMKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCiAJZmx1c2hfcHRyYWNlX2h3X2JyZWFrcG9pbnQoY3VycmVudCk7Ci0jZWxzZSAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UUyAqLworI2Vsc2UgLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCAqLwogCXNldF9kZWJ1Z19yZWdfZGVmYXVsdHMoJmN1cnJlbnQtPnRocmVhZCk7Ci0jZW5kaWYgLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVFMgKi8KKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UICovCiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCmluZGV4IGJmNWNiOTEuLmZkNDgxMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJZGJnKCJyZW1vdmluZyBjcHUgJWx1IGZyb20gbm9kZSAlZFxuIiwgY3B1LCBub2RlKTsKIAogCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSkpIHsKLQkJY3B1bWFza19zZXRfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBjcHUgJWx1IG5vdCBmb3VuZCBpbiBub2RlICVkXG4iLAogCQkgICAgICAgY3B1LCBub2RlKTsKQEAgLTEyODksMTAgKzEyODksOSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwogCi0vKiBWcnR1YWwgUHJvY2Vzc29yIEhvbWUgTm9kZSAoVlBITikgc3VwcG9ydCAqLworLyogVmlydHVhbCBQcm9jZXNzb3IgSG9tZSBOb2RlIChWUEhOKSBzdXBwb3J0ICovCiAjaWZkZWYgQ09ORklHX1BQQ19TUExQQVIKLSNkZWZpbmUgVlBITl9OUl9DSEFOR0VfQ1RSUyAoOCkKLXN0YXRpYyB1OCB2cGhuX2NwdV9jaGFuZ2VfY291bnRzW05SX0NQVVNdW1ZQSE5fTlJfQ0hBTkdFX0NUUlNdOworc3RhdGljIHU4IHZwaG5fY3B1X2NoYW5nZV9jb3VudHNbTlJfQ1BVU11bTUFYX0RJU1RBTkNFX1JFRl9QT0lOVFNdOwogc3RhdGljIGNwdW1hc2tfdCBjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2s7CiBzdGF0aWMgaW50IHZwaG5fZW5hYmxlZDsKIHN0YXRpYyB2b2lkIHNldF90b3BvbG9neV90aW1lcih2b2lkKTsKQEAgLTEzMDMsMTYgKzEzMDIsMTggQEAKICAqLwogc3RhdGljIHZvaWQgc2V0dXBfY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlX2NvdW50ZXJzKHZvaWQpCiB7Ci0JaW50IGNwdSA9IDA7CisJaW50IGNwdTsKKworCS8qIFRoZSBWUEhOIGZlYXR1cmUgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDggcmVmZXJlbmNlIHBvaW50cyAqLworCUJVSUxEX0JVR19PTihNQVhfRElTVEFOQ0VfUkVGX1BPSU5UUyA+IDgpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlpbnQgaSA9IDA7CisJCWludCBpOwogCQl1OCAqY291bnRzID0gdnBobl9jcHVfY2hhbmdlX2NvdW50c1tjcHVdOwogCQl2b2xhdGlsZSB1OCAqaHlwZXJ2aXNvcl9jb3VudHMgPSBscHBhY2FbY3B1XS52cGhuX2Fzc29jX2NvdW50czsKIAotCQlmb3IgKGkgPSAwOyBpIDwgVlBITl9OUl9DSEFOR0VfQ1RSUzsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoOyBpKyspCiAJCQljb3VudHNbaV0gPSBoeXBlcnZpc29yX2NvdW50c1tpXTsKLQkJfQogCX0KIH0KIApAQCAtMTMyOSw3ICsxMzMwLDcgQEAKICAqLwogc3RhdGljIGludCB1cGRhdGVfY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlc19tYXNrKHZvaWQpCiB7Ci0JaW50IGNwdSA9IDAsIG5yX2NwdXMgPSAwOworCWludCBjcHUsIG5yX2NwdXMgPSAwOwogCWNwdW1hc2tfdCAqY2hhbmdlcyA9ICZjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2s7CiAKIAljcHVtYXNrX2NsZWFyKGNoYW5nZXMpOwpAQCAtMTMzOSw4ICsxMzQwLDggQEAKIAkJdTggKmNvdW50cyA9IHZwaG5fY3B1X2NoYW5nZV9jb3VudHNbY3B1XTsKIAkJdm9sYXRpbGUgdTggKmh5cGVydmlzb3JfY291bnRzID0gbHBwYWNhW2NwdV0udnBobl9hc3NvY19jb3VudHM7CiAKLQkJZm9yIChpID0gMDsgaSA8IFZQSE5fTlJfQ0hBTkdFX0NUUlM7IGkrKykgewotCQkJaWYgKGh5cGVydmlzb3JfY291bnRzW2ldID4gY291bnRzW2ldKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoOyBpKyspIHsKKwkJCWlmIChoeXBlcnZpc29yX2NvdW50c1tpXSAhPSBjb3VudHNbaV0pIHsKIAkJCQljb3VudHNbaV0gPSBoeXBlcnZpc29yX2NvdW50c1tpXTsKIAkJCQljaGFuZ2VkID0gMTsKIAkJCX0KQEAgLTEzNTQsOCArMTM1NSwxMSBAQAogCXJldHVybiBucl9jcHVzOwogfQogCi0vKiA2IDY0LWJpdCByZWdpc3RlcnMgdW5wYWNrZWQgaW50byAxMiAzMi1iaXQgYXNzb2NpYXRpdml0eSB2YWx1ZXMgKi8KLSNkZWZpbmUgVlBITl9BU1NPQ19CVUZTSVpFICg2KnNpemVvZih1NjQpL3NpemVvZih1MzIpKQorLyoKKyAqIDYgNjQtYml0IHJlZ2lzdGVycyB1bnBhY2tlZCBpbnRvIDEyIDMyLWJpdCBhc3NvY2lhdGl2aXR5IHZhbHVlcy4gVG8gZm9ybQorICogdGhlIGNvbXBsZXRlIHByb3BlcnR5IHdlIGhhdmUgdG8gYWRkIHRoZSBsZW5ndGggaW4gdGhlIGZpcnN0IGNlbGwuCisgKi8KKyNkZWZpbmUgVlBITl9BU1NPQ19CVUZTSVpFICg2KnNpemVvZih1NjQpL3NpemVvZih1MzIpICsgMSkKIAogLyoKICAqIENvbnZlcnQgdGhlIGFzc29jaWF0aXZpdHkgZG9tYWluIG51bWJlcnMgcmV0dXJuZWQgZnJvbSB0aGUgaHlwZXJ2aXNvcgpAQCAtMTM2MywxNSArMTM2NywxNCBAQAogICovCiBzdGF0aWMgaW50IHZwaG5fdW5wYWNrX2Fzc29jaWF0aXZpdHkoY29uc3QgbG9uZyAqcGFja2VkLCB1bnNpZ25lZCBpbnQgKnVucGFja2VkKQogewotCWludCBpID0gMDsKLQlpbnQgbnJfYXNzb2NfZG9tcyA9IDA7CisJaW50IGksIG5yX2Fzc29jX2RvbXMgPSAwOwogCWNvbnN0IHUxNiAqZmllbGQgPSAoY29uc3QgdTE2KikgcGFja2VkOwogCiAjZGVmaW5lIFZQSE5fRklFTERfVU5VU0VECSgweGZmZmYpCiAjZGVmaW5lIFZQSE5fRklFTERfTVNCCQkoMHg4MDAwKQogI2RlZmluZSBWUEhOX0ZJRUxEX01BU0sJCSh+VlBITl9GSUVMRF9NU0IpCiAKLQlmb3IgKGkgPSAwOyBpIDwgVlBITl9BU1NPQ19CVUZTSVpFOyBpKyspIHsKKwlmb3IgKGkgPSAxOyBpIDwgVlBITl9BU1NPQ19CVUZTSVpFOyBpKyspIHsKIAkJaWYgKCpmaWVsZCA9PSBWUEhOX0ZJRUxEX1VOVVNFRCkgewogCQkJLyogQWxsIHNpZ25pZmljYW50IGZpZWxkcyBwcm9jZXNzZWQsIGFuZCByZW1haW5pbmcKIAkJCSAqIGZpZWxkcyBjb250YWluIHRoZSByZXNlcnZlZCB2YWx1ZSBvZiBhbGwgMSdzLgpAQCAtMTM3OSwxNCArMTM4MiwxMiBAQAogCQkJICovCiAJCQl1bnBhY2tlZFtpXSA9ICooKHUzMiopZmllbGQpOwogCQkJZmllbGQgKz0gMjsKLQkJfQotCQllbHNlIGlmICgqZmllbGQgJiBWUEhOX0ZJRUxEX01TQikgeworCQl9IGVsc2UgaWYgKCpmaWVsZCAmIFZQSE5fRklFTERfTVNCKSB7CiAJCQkvKiBEYXRhIGlzIGluIHRoZSBsb3dlciAxNSBiaXRzIG9mIHRoaXMgZmllbGQgKi8KIAkJCXVucGFja2VkW2ldID0gKmZpZWxkICYgVlBITl9GSUVMRF9NQVNLOwogCQkJZmllbGQrKzsKIAkJCW5yX2Fzc29jX2RvbXMrKzsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCS8qIERhdGEgaXMgaW4gdGhlIGxvd2VyIDE1IGJpdHMgb2YgdGhpcyBmaWVsZAogCQkJICogY29uY2F0ZW5hdGVkIHdpdGggdGhlIG5leHQgMTYgYml0IGZpZWxkCiAJCQkgKi8KQEAgLTEzOTYsNiArMTM5Nyw5IEBACiAJCX0KIAl9CiAKKwkvKiBUaGUgZmlyc3QgY2VsbCBjb250YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSAqLworCXVucGFja2VkWzBdID0gbnJfYXNzb2NfZG9tczsKKwogCXJldHVybiBucl9hc3NvY19kb21zOwogfQogCkBAIC0xNDA1LDcgKzE0MDksNyBAQAogICovCiBzdGF0aWMgbG9uZyBoY2FsbF92cGhuKHVuc2lnbmVkIGxvbmcgY3B1LCB1bnNpZ25lZCBpbnQgKmFzc29jaWF0aXZpdHkpCiB7Ci0JbG9uZyByYyA9IDA7CisJbG9uZyByYzsKIAlsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTDlfQlVGU0laRV0gPSB7MH07CiAJdTY0IGZsYWdzID0gMTsKIAlpbnQgaHdjcHUgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7CkBAIC0xNDE5LDcgKzE0MjMsNyBAQAogc3RhdGljIGxvbmcgdnBobl9nZXRfYXNzb2NpYXRpdml0eSh1bnNpZ25lZCBsb25nIGNwdSwKIAkJCQkJdW5zaWduZWQgaW50ICphc3NvY2lhdGl2aXR5KQogewotCWxvbmcgcmMgPSAwOworCWxvbmcgcmM7CiAKIAlyYyA9IGhjYWxsX3ZwaG4oY3B1LCBhc3NvY2lhdGl2aXR5KTsKIApAQCAtMTQ0NSw5ICsxNDQ5LDkgQEAKICAqLwogaW50IGFyY2hfdXBkYXRlX2NwdV90b3BvbG9neSh2b2lkKQogewotCWludCBjcHUgPSAwLCBuaWQgPSAwLCBvbGRfbmlkID0gMDsKKwlpbnQgY3B1LCBuaWQsIG9sZF9uaWQ7CiAJdW5zaWduZWQgaW50IGFzc29jaWF0aXZpdHlbVlBITl9BU1NPQ19CVUZTSVpFXSA9IHswfTsKLQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2ID0gTlVMTDsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwogCiAJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2spIHsKIAkJdnBobl9nZXRfYXNzb2NpYXRpdml0eShjcHUsIGFzc29jaWF0aXZpdHkpOwpAQCAtMTUxMiw3ICsxNTE2LDggQEAKIHsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfVlBITikpIHsKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9WUEhOKSAmJgorCSAgICBnZXRfbHBwYWNhKCktPnNoYXJlZF9wcm9jKSB7CiAJCXZwaG5fZW5hYmxlZCA9IDE7CiAJCXNldHVwX2NwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZV9jb3VudGVycygpOwogCQlpbml0X3RpbWVyX2RlZmVycmFibGUoJnRvcG9sb2d5X3RpbWVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2g2NC5jCmluZGV4IDFlYzA2NTcuLmMxNGQwOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYwpAQCAtMzgsMTMgKzM4LDExIEBACiAgKiBuZWVzZCB0byBiZSBmbHVzaGVkLiBUaGlzIGZ1bmN0aW9uIHdpbGwgZWl0aGVyIHBlcmZvcm0gdGhlIGZsdXNoCiAgKiBpbW1lZGlhdGVseSBvciB3aWxsIGJhdGNoIGl0IHVwIGlmIHRoZSBjdXJyZW50IENQVSBoYXMgYW4gYWN0aXZlCiAgKiBiYXRjaCBvbiBpdC4KLSAqCi0gKiBNdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBzb21lIGtpbmQgb2Ygc3BpbmxvY2svbm9uLXByZWVtcHQgcmVnaW9uLi4uCiAgKi8KIHZvaWQgaHB0ZV9uZWVkX2ZsdXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCSAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgcHRlLCBpbnQgaHVnZSkKIHsKLQlzdHJ1Y3QgcHBjNjRfdGxiX2JhdGNoICpiYXRjaCA9ICZfX2dldF9jcHVfdmFyKHBwYzY0X3RsYl9iYXRjaCk7CisJc3RydWN0IHBwYzY0X3RsYl9iYXRjaCAqYmF0Y2ggPSAmZ2V0X2NwdV92YXIocHBjNjRfdGxiX2JhdGNoKTsKIAl1bnNpZ25lZCBsb25nIHZzaWQsIHZhZGRyOwogCXVuc2lnbmVkIGludCBwc2l6ZTsKIAlpbnQgc3NpemU7CkBAIC05OSw2ICs5Nyw3IEBACiAJICovCiAJaWYgKCFiYXRjaC0+YWN0aXZlKSB7CiAJCWZsdXNoX2hhc2hfcGFnZSh2YWRkciwgcnB0ZSwgcHNpemUsIHNzaXplLCAwKTsKKwkJcHV0X2NwdV92YXIocHBjNjRfdGxiX2JhdGNoKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI3LDYgKzEyNiw3IEBACiAJYmF0Y2gtPmluZGV4ID0gKytpOwogCWlmIChpID49IFBQQzY0X1RMQl9CQVRDSF9OUikKIAkJX19mbHVzaF90bGJfcGVuZGluZyhiYXRjaCk7CisJcHV0X2NwdV92YXIocHBjNjRfdGxiX2JhdGNoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCmluZGV4IDVkM2VhOWYuLmNhNWQ1ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwpAQCAtNzEzLDYgKzcxMywxMyBAQAogLyogTkI6IHJlZy91bnJlZyBhcmUgY2FsbGVkIHdoaWxlIGd1YXJkZWQgd2l0aCB0aGUgdHJhY2Vwb2ludHNfbXV0ZXggKi8KIGV4dGVybiBsb25nIGhjYWxsX3RyYWNlcG9pbnRfcmVmY291bnQ7CiAKKy8qIAorICogU2luY2UgdGhlIHRyYWNpbmcgY29kZSBtaWdodCBleGVjdXRlIGhjYWxscyB3ZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QKKyAqIHJlY3Vyc2lvbi4gT25lIGV4YW1wbGUgb2YgdGhpcyBhcmUgc3BpbmxvY2tzIGNhbGxpbmcgSF9ZSUVMRCBvbgorICogc2hhcmVkIHByb2Nlc3NvciBwYXJ0aXRpb25zLgorICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBoY2FsbF90cmFjZV9kZXB0aCk7CisKIHZvaWQgaGNhbGxfdHJhY2Vwb2ludF9yZWdmdW5jKHZvaWQpCiB7CiAJaGNhbGxfdHJhY2Vwb2ludF9yZWZjb3VudCsrOwpAQCAtNzI1LDEyICs3MzIsNDIgQEAKIAogdm9pZCBfX3RyYWNlX2hjYWxsX2VudHJ5KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nICphcmdzKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50ICpkZXB0aDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRlcHRoID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfdHJhY2VfZGVwdGgpOworCisJaWYgKCpkZXB0aCkKKwkJZ290byBvdXQ7CisKKwkoKmRlcHRoKSsrOwogCXRyYWNlX2hjYWxsX2VudHJ5KG9wY29kZSwgYXJncyk7CisJKCpkZXB0aCktLTsKKworb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogdm9pZCBfX3RyYWNlX2hjYWxsX2V4aXQobG9uZyBvcGNvZGUsIHVuc2lnbmVkIGxvbmcgcmV0dmFsLAogCQkJdW5zaWduZWQgbG9uZyAqcmV0YnVmKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50ICpkZXB0aDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRlcHRoID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfdHJhY2VfZGVwdGgpOworCisJaWYgKCpkZXB0aCkKKwkJZ290byBvdXQ7CisKKwkoKmRlcHRoKSsrOwogCXRyYWNlX2hjYWxsX2V4aXQob3Bjb2RlLCByZXR2YWwsIHJldGJ1Zik7CisJKCpkZXB0aCktLTsKKworb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCBmZjE5ZWZkLi42MzZiY2I4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgQ0hTQ19TQ0gKLQlkZWZfdHJpc3RhdGUgeQorCWRlZl90cmlzdGF0ZSBtCiAJcHJvbXB0ICJTdXBwb3J0IGZvciBDSFNDIHN1YmNoYW5uZWxzIgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGFsbG93cyB1c2FnZSBvZiBDSFNDIHN1YmNoYW5uZWxzLiBBIENIU0Mgc3ViY2hhbm5lbApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAwODUxZWIxLi4yNzUxYjNhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMTMzLDExICsxMzMsMTIgQEAKIAl1bnNpZ25lZCBsb25nIG91dHB1dF9hZGRyOwogCXVuc2lnbmVkIGNoYXIgKm91dHB1dDsKIAotCWNoZWNrX2lwbF9wYXJtYmxvY2soKHZvaWQgKikgMCwgKHVuc2lnbmVkIGxvbmcpIG91dHB1dCArIFNaX19ic3Nfc3RhcnQpOworCW91dHB1dF9hZGRyID0gKCh1bnNpZ25lZCBsb25nKSAmX2VuZCArIEhFQVBfU0laRSArIDQwOTVVTCkgJiAtNDA5NlVMOworCWNoZWNrX2lwbF9wYXJtYmxvY2soKHZvaWQgKikgMCwgb3V0cHV0X2FkZHIgKyBTWl9fYnNzX3N0YXJ0KTsKIAltZW1zZXQoJl9ic3MsIDAsICZfZWJzcyAtICZfYnNzKTsKIAlmcmVlX21lbV9wdHIgPSAodW5zaWduZWQgbG9uZykmX2VuZDsKIAlmcmVlX21lbV9lbmRfcHRyID0gZnJlZV9tZW1fcHRyICsgSEVBUF9TSVpFOwotCW91dHB1dCA9ICh1bnNpZ25lZCBjaGFyICopICgoZnJlZV9tZW1fZW5kX3B0ciArIDQwOTVVTCkgJiAtNDA5NlVMKTsKKwlvdXRwdXQgPSAodW5zaWduZWQgY2hhciAqKSBvdXRwdXRfYWRkcjsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCmluZGV4IGY0MmRiYWIuLjQ4ODg0ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCkBAIC0zOCw2ICszOCw3IEBACiAJCUJVR19PTihyZXQgIT0gYnNpemUpOwogCQlkYXRhICs9IGJzaXplIC0gaW5kZXg7CiAJCWxlbiAtPSBic2l6ZSAtIGluZGV4OworCQlpbmRleCA9IDA7CiAJfQogCiAJLyogcHJvY2VzcyBhcyBtYW55IGJsb2NrcyBhcyBwb3NzaWJsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDc2ZGFlYTEuLjVjNWJhMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTM2LDE0ICszNiwxOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfcmVhZChjb25zdCBhdG9taWNfdCAqdikKIHsKLQliYXJyaWVyKCk7Ci0JcmV0dXJuIHYtPmNvdW50ZXI7CisJaW50IGM7CisKKwlhc20gdm9sYXRpbGUoCisJCSIJbAklMCwlMVxuIgorCQk6ICI9ZCIgKGMpIDogIlEiICh2LT5jb3VudGVyKSk7CisJcmV0dXJuIGM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICp2LCBpbnQgaSkKIHsKLQl2LT5jb3VudGVyID0gaTsKLQliYXJyaWVyKCk7CisJYXNtIHZvbGF0aWxlKAorCQkiCXN0CSUxLCUwXG4iCisJCTogIj1RIiAodi0+Y291bnRlcikgOiAiZCIgKGkpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQpAQCAtMTI4LDE0ICsxMzMsMTkgQEAKIAogc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfcmVhZChjb25zdCBhdG9taWM2NF90ICp2KQogewotCWJhcnJpZXIoKTsKLQlyZXR1cm4gdi0+Y291bnRlcjsKKwlsb25nIGxvbmcgYzsKKworCWFzbSB2b2xhdGlsZSgKKwkJIglsZwklMCwlMVxuIgorCQk6ICI9ZCIgKGMpIDogIlEiICh2LT5jb3VudGVyKSk7CisJcmV0dXJuIGM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zZXQoYXRvbWljNjRfdCAqdiwgbG9uZyBsb25nIGkpCiB7Ci0Jdi0+Y291bnRlciA9IGk7Ci0JYmFycmllcigpOworCWFzbSB2b2xhdGlsZSgKKwkJIglzdGcJJTEsJTBcbiIKKwkJOiAiPVEiICh2LT5jb3VudGVyKSA6ICJkIiAoaSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGxvbmcgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgbG9uZyBpLCBhdG9taWM2NF90ICp2KQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCAyNGFhZmE2Li4yYTMwZDVhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMTMsNiArMTMsNyBAQAogCiAjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTICAgICAyNTYKICNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQgICAgIDgKKyNkZWZpbmUgTkVUX1NLQl9QQUQJICAgMzIKIAogI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS4ucmVhZF9tb3N0bHkiKSkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDQwNWNjOTcuLjdlMWY3NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMSwyOSArMSw4IEBACiAjaWZuZGVmIF9TMzkwX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfUzM5MF9DQUNIRUZMVVNIX0gKIAotLyogS2VlcCBpbmNsdWRlcyB0aGUgc2FtZSBhY3Jvc3MgYXJjaGVzLiAgKi8KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCiAvKiBDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIHMzOTAuICovCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFIDAKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pCi0jZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAotCW1lbWNweShkc3QsIHNyYywgbGVuKQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NhY2hlZmx1c2guaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKIHZvaWQga2VybmVsX21hcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBiZjNkZTA0Li4yYzc5YjY0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xNDgsMTEgKzE0OCw2IEBACiAgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpOwogCi0vKgotICogUHJpbnQgcmVnaXN0ZXIgb2YgdGFzayBpbnRvIGJ1ZmZlci4gVXNlZCBpbiBmcy9wcm9jL2FycmF5LmMuCi0gKi8KLWV4dGVybiB2b2lkIHRhc2tfc2hvd19yZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKLQogZXh0ZXJuIHZvaWQgc2hvd19jb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaAppbmRleCBmMWY2NDRmLi45MDc0YTU0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0yMiw2ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCA1ZWI3OGRkLi5iNWE0YTczIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC0yMzcsNDMgKzIzNyw2IEBACiAJc2hvd19sYXN0X2JyZWFraW5nX2V2ZW50KHJlZ3MpOwogfQogCi0vKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGZzL3Byb2MvYXJyYXkuYyAqLwotdm9pZCB0YXNrX3Nob3dfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKLQotCXJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7Ci0Jc2VxX3ByaW50ZihtLCAidGFzazogJXAsIGtzcDogJXBcbiIsCi0JCSAgICAgICB0YXNrLCAodm9pZCAqKXRhc2stPnRocmVhZC5rc3ApOwotCXNlcV9wcmludGYobSwgIlVzZXIgUFNXIDogJXAgJXBcbiIsCi0JCSAgICAgICAodm9pZCAqKSByZWdzLT5wc3cubWFzaywgKHZvaWQgKilyZWdzLT5wc3cuYWRkcik7Ci0KLQlzZXFfcHJpbnRmKG0sICJVc2VyIEdQUlM6ICIgRk9VUkxPTkcsCi0JCQkgIHJlZ3MtPmdwcnNbMF0sIHJlZ3MtPmdwcnNbMV0sCi0JCQkgIHJlZ3MtPmdwcnNbMl0sIHJlZ3MtPmdwcnNbM10pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgIiBGT1VSTE9ORywKLQkJCSAgcmVncy0+Z3Byc1s0XSwgcmVncy0+Z3Byc1s1XSwKLQkJCSAgcmVncy0+Z3Byc1s2XSwgcmVncy0+Z3Byc1s3XSk7Ci0Jc2VxX3ByaW50ZihtLCAiICAgICAgICAgICAiIEZPVVJMT05HLAotCQkJICByZWdzLT5ncHJzWzhdLCByZWdzLT5ncHJzWzldLAotCQkJICByZWdzLT5ncHJzWzEwXSwgcmVncy0+Z3Byc1sxMV0pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgIiBGT1VSTE9ORywKLQkJCSAgcmVncy0+Z3Byc1sxMl0sIHJlZ3MtPmdwcnNbMTNdLAotCQkJICByZWdzLT5ncHJzWzE0XSwgcmVncy0+Z3Byc1sxNV0pOwotCXNlcV9wcmludGYobSwgIlVzZXIgQUNSUzogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbMF0sIHRhc2stPnRocmVhZC5hY3JzWzFdLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1syXSwgdGFzay0+dGhyZWFkLmFjcnNbM10pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbNF0sIHRhc2stPnRocmVhZC5hY3JzWzVdLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1s2XSwgdGFzay0+dGhyZWFkLmFjcnNbN10pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbOF0sIHRhc2stPnRocmVhZC5hY3JzWzldLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1sxMF0sIHRhc2stPnRocmVhZC5hY3JzWzExXSk7Ci0Jc2VxX3ByaW50ZihtLCAiICAgICAgICAgICAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1sxMl0sIHRhc2stPnRocmVhZC5hY3JzWzEzXSwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbMTRdLCB0YXNrLT50aHJlYWQuYWNyc1sxNV0pOwotfQotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRpZV9sb2NrKTsKIAogdm9pZCBkaWUoY29uc3QgY2hhciAqIHN0ciwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYwppbmRleCAwN2RlYWVlLi5hNmM0ZjdlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKKysrIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCkBAIC0xMjUsOSArMTI1LDkgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDE7CiAKIAlhc20gdm9sYXRpbGUoCisJCSIgICBzYWNmICAyNTZcbiIKIAkJIiAgIkFISSIgICUwLC0xXG4iCiAJCSIgICBqbyAgICA1ZlxuIgotCQkiICAgc2FjZiAgMjU2XG4iCiAJCSIgICBicmFzICAlMywzZlxuIgogCQkiMDoiQUhJIiAgJTAsMjU3XG4iCiAJCSIxOiBtdmMgICAwKDEsJTEpLDAoJTIpXG4iCkBAIC0xNDIsOSArMTQyLDggQEAKIAkJIjM6IkFISSIgICUwLC0yNTZcbiIKIAkJIiAgIGpubSAgIDJiXG4iCiAJCSI0OiBleCAgICAlMCwxYi0wYiglMylcbiIKLQkJIiAgIHNhY2YgIDBcbiIKIAkJIjU6ICJTTFIiICAlMCwlMFxuIgotCQkiNjpcbiIKKwkJIjY6IHNhY2YgIDBcbiIKIAkJRVhfVEFCTEUoMWIsNmIpIEVYX1RBQkxFKDJiLDBiKSBFWF9UQUJMRSg0YiwwYikKIAkJOiAiK2EiIChzaXplKSwgIithIiAodG8pLCAiK2EiIChmcm9tKSwgIj1hIiAodG1wMSkKIAkJOiA6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTE1Niw5ICsxNTUsOSBAQAogCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKIAogCWFzbSB2b2xhdGlsZSgKKwkJIiAgIHNhY2YgIDI1NlxuIgogCQkiICAiQUhJIiAgJTAsLTFcbiIKIAkJIiAgIGpvICAgIDVmXG4iCi0JCSIgICBzYWNmICAyNTZcbiIKIAkJIiAgIGJyYXMgICUzLDNmXG4iCiAJCSIgICB4YyAgICAwKDEsJTEpLDAoJTEpXG4iCiAJCSIwOiJBSEkiICAlMCwyNTdcbiIKQEAgLTE3OCw5ICsxNzcsOCBAQAogCQkiMzoiQUhJIiAgJTAsLTI1NlxuIgogCQkiICAgam5tICAgMmJcbiIKIAkJIjQ6IGV4ICAgICUwLDAoJTMpXG4iCi0JCSIgICBzYWNmICAwXG4iCiAJCSI1OiAiU0xSIiAgJTAsJTBcbiIKLQkJIjY6XG4iCisJCSI2OiBzYWNmICAwXG4iCiAJCUVYX1RBQkxFKDFiLDZiKSBFWF9UQUJMRSgyYiwwYikgRVhfVEFCTEUoNGIsMGIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHRvKSwgIj1hIiAodG1wMSksICI9YSIgKHRtcDIpCiAJCTogOiAiY2MiLCAibWVtb3J5Iik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCAwYzcxOWM2Li5lMTg1MGMyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKQEAgLTMzNiw3ICszMzYsOCBAQAogCXBhZ2UtPmZsYWdzIF49IGJpdHM7CiAJaWYgKHBhZ2UtPmZsYWdzICYgRlJBR19NQVNLKSB7CiAJCS8qIFBhZ2Ugbm93IGhhcyBzb21lIGZyZWUgcGd0YWJsZSBmcmFnbWVudHMuICovCi0JCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmbW0tPmNvbnRleHQucGd0YWJsZV9saXN0KTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZwYWdlLT5scnUpKQorCQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOwogCQlwYWdlID0gTlVMTDsKIAl9IGVsc2UKIAkJLyogQWxsIGZyYWdtZW50cyBvZiB0aGUgNEsgcGFnZSBoYXZlIGJlZW4gZnJlZWQuICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggYWU1NTU1Ni4uOGE5MDExZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTUsNiArMTUsNyBAQAogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKKwlzZWxlY3QgSEFWRV9LRVJORUxfWFoKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpPCiAJc2VsZWN0IEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUwogCXNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IDljOGM2ZTEuLmUzZDgxNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMjAwLDcgKzIwMCw3IEBACiBsaWJzLSQoQ09ORklHX1NVUEVSSDMyKQkJOj0gYXJjaC9zaC9saWIvCSQobGlicy15KQogbGlicy0kKENPTkZJR19TVVBFUkg2NCkJCTo9IGFyY2gvc2gvbGliNjQvICQobGlicy15KQogCi1CT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLmx6byBcCitCT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLnh6IHVJbWFnZS5sem8gXAogCSAgICAgICB1SW1hZ2Uuc3JlYyB1SW1hZ2UuYmluIHpJbWFnZSB2bWxpbnV4LmJpbiB2bWxpbnV4LnNyZWMgXAogCSAgICAgICByb21JbWFnZQogUEhPTlkgKz0gJChCT09UX1RBUkdFVFMpCkBAIC0yMzAsNSArMjMwLDYgQEAKIAlAZWNobyAnKiB1SW1hZ2UuZ3oJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGd6aXApJwogCUBlY2hvICcgIHVJbWFnZS5iejIJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGJ6aXAyKScKIAlAZWNobyAnICB1SW1hZ2UubHptYQkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAobHptYSknCisJQGVjaG8gJyAgdUltYWdlLnh6CSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290ICh4eiknCiAJQGVjaG8gJyAgdUltYWdlLmx6bwkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAobHpvKScKIGVuZGVmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggMzNiNjYyOS4uNzAxNjY3YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtMTI5NCw2ICsxMjk0LDcgQEAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBpMmMxX2RldmljZXMsCiAJCQkJQVJSQVlfU0laRShpMmMxX2RldmljZXMpKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1NIX1ZPVSkgfHwgZGVmaW5lZChDT05GSUdfVklERU9fU0hfVk9VX01PRFVMRSkKIAkvKiBWT1UgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9EVl9EMTUsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0RWX0QxNCwgTlVMTCk7CkBAIC0xMzI1LDYgKzEzMjYsNyBAQAogCiAJLyogUmVtb3ZlIHJlc2V0ICovCiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVEc0LCAxKTsKKyNlbmRpZgogCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGVjb3ZlY19kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKGVjb3ZlY19kZXZpY2VzKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggMWNlNjM2Mi4uYmE1MTVkOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMjQsMTIgKzI0LDEzIEBACiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0daSVApCTo9IGd6CiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKQk6PSBiejIKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkJOj0gbHptYQorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9YWikJOj0geHoKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpPKQk6PSBsem8KIAogdGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogXAotCSAgIHVJbWFnZS5iejIgdUltYWdlLmx6bWEgdUltYWdlLmx6byB1SW1hZ2UuYmluCisJICAgdUltYWdlLmJ6MiB1SW1hZ2UubHptYSB1SW1hZ2UueHogdUltYWdlLmx6byB1SW1hZ2UuYmluCiBleHRyYS15ICs9IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hIFwKLQkgICB2bWxpbnV4LmJpbi5sem8KKwkgICB2bWxpbnV4LmJpbi54eiB2bWxpbnV4LmJpbi5sem8KIHN1YmRpci0gOj0gY29tcHJlc3NlZCByb21pbWFnZQogCiAkKG9iaikvekltYWdlOiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4IEZPUkNFCkBAIC03Niw2ICs3Nyw5IEBACiAkKG9iaikvdm1saW51eC5iaW4ubHptYTogJChvYmopL3ZtbGludXguYmluIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbHptYSkKIAorJChvYmopL3ZtbGludXguYmluLnh6OiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCx4emtlcm4pCisKICQob2JqKS92bWxpbnV4LmJpbi5sem86ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bykKIApAQCAtODgsNiArOTIsOSBAQAogJChvYmopL3VJbWFnZS5sem1hOiAkKG9iaikvdm1saW51eC5iaW4ubHptYQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem1hKQogCiskKG9iaikvdUltYWdlLnh6OiAkKG9iaikvdm1saW51eC5iaW4ueHoKKwkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UseHopCisKICQob2JqKS91SW1hZ2UubHpvOiAkKG9iaikvdm1saW51eC5iaW4ubHpvCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGx6bykKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCBjZmE1YTA4Li5lMGIwMjkzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAogdGFyZ2V0cwkJOj0gdm1saW51eCB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiBcCiAJCSAgIHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hIFwKLQkJICAgdm1saW51eC5iaW4ubHpvIFwKKwkJICAgdm1saW51eC5iaW4ueHogdm1saW51eC5iaW4ubHpvIFwKIAkJICAgaGVhZF8kKEJJVFMpLm8gbWlzYy5vIHBpZ2d5Lm8KIAogT0JKRUNUUyA9ICQob2JqKS9oZWFkXyQoQklUUykubyAkKG9iaikvbWlzYy5vICQob2JqKS9jYWNoZS5vCkBAIC01MCw2ICs1MCw4IEBACiAJJChjYWxsIGlmX2NoYW5nZWQsYnppcDIpCiAkKG9iaikvdm1saW51eC5iaW4ubHptYTogJCh2bWxpbnV4LmJpbi5hbGwteSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQorJChvYmopL3ZtbGludXguYmluLnh6OiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLHh6a2VybikKICQob2JqKS92bWxpbnV4LmJpbi5sem86ICQodm1saW51eC5iaW4uYWxsLXkpIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbHpvKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggMjcxNDBhNi4uOTU0NzBhNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtNjEsNiArNjEsMTAgQEAKICNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6bWEuYyIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0tFUk5FTF9YWgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VueHouYyIKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0tFUk5FTF9MWk8KICNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6by5jIgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDA4M2VhMDYuLmRiODU5MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMzQsNiArMTM0LDcgQEAKIGV4dGVybiB2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKIAogc3RydWN0IHZtX2FyZWFfc3RydWN0Oworc3RydWN0IG1tX3N0cnVjdDsKIAogZXh0ZXJuIHZvaWQgX191cGRhdGVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKaW5kZXggYTc4NzAxZC4uNGE1MzUwMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2VjdGlvbnMuaApAQCAtMyw3ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CiAKLWV4dGVybiB2b2lkIF9fbm9zYXZlX2JlZ2luLCBfX25vc2F2ZV9lbmQ7CitleHRlcm4gbG9uZyBfX25vc2F2ZV9iZWdpbiwgX19ub3NhdmVfZW5kOwogZXh0ZXJuIGxvbmcgX19tYWNodmVjX3N0YXJ0LCBfX21hY2h2ZWNfZW5kOwogZXh0ZXJuIGNoYXIgX191bmNhY2hlZF9zdGFydCwgX191bmNhY2hlZF9lbmQ7CiBleHRlcm4gY2hhciBfZWJzc1tdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKaW5kZXggYzJiMGFhYS4uZTUzYjRiMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KLSNpbmNsdWRlIDxhc20vbWFjaHR5cGVzLmg+CisjaW5jbHVkZSA8Z2VuZXJhdGVkL21hY2h0eXBlcy5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC0yMzAsMTAgKzIzMCwxMCBAQAogc3RhdGljIGludCBfX2luaXQgc2g3NzUwX2RldmljZXNfc2V0dXAodm9pZCkKIHsKIAlpZiAobWFjaF9pc19ydHM3NzUxcjJkKCkpIHsKLQkJcGxhdGZvcm1fcmVnaXN0ZXJfZGV2aWNlKCZzY2lmX2RldmljZSk7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2NpZl9kZXZpY2UpOwogCX0gZWxzZSB7Ci0JCXBsYXRmb3JtX3JlZ2lzdGVyX2RldmljZSgmc2NpX2RldmljZSk7Ci0JCXBsYXRmb3JtX3JlZ2lzdGVyX2RldmljZSgmc2NpZl9kZXZpY2UpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNjaV9kZXZpY2UpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNjaWZfZGV2aWNlKTsKIAl9CiAKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3NzUwX2RldmljZXMsCkBAIC0yNTUsMTIgKzI1NSwxNyBAQAogCiB2b2lkIF9faW5pdCBwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCh2b2lkKQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldlsxXTsKKwogCWlmIChtYWNoX2lzX3J0czc3NTFyMmQoKSkgewogCQlzY2lmX3BsYXRmb3JtX2RhdGEuc2NzY3IgfD0gU0NTQ1JfQ0tFMTsKLQkJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoJnNjaWZfZGV2aWNlLCAxKTsKKwkJZGV2WzBdID0gJnNjaWZfZGV2aWNlOworCQllYXJseV9wbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXYsIDEpOwogCX0gZWxzZSB7Ci0JCWVhcmx5X3BsYXRmb3JtX2FkZF9kZXZpY2VzKCZzY2lfZGV2aWNlLCAxKTsKLQkJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoJnNjaWZfZGV2aWNlLCAxKTsKKwkJZGV2WzBdID0gJnNjaV9kZXZpY2U7CisJCWVhcmx5X3BsYXRmb3JtX2FkZF9kZXZpY2VzKGRldiwgMSk7CisJCWRldlswXSA9ICZzY2lmX2RldmljZTsKKwkJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2LCAxKTsKIAl9CiAKIAllYXJseV9wbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDc3NTBfZWFybHlfZGV2aWNlcywKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL3NoL2tlcm5lbC90b3BvbG9neS5jCmluZGV4IDk0OGZkYjYuLjM4ZTg2MjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtMTcsNiArMTcsNyBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHUsIGNwdV9kZXZpY2VzKTsKIAogY3B1bWFza190IGNwdV9jb3JlX21hcFtOUl9DUFVTXTsKK0VYUE9SVF9TWU1CT0woY3B1X2NvcmVfbWFwKTsKIAogc3RhdGljIGNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9saWIvZGVsYXkuYyBiL2FyY2gvc2gvbGliL2RlbGF5LmMKaW5kZXggZmFhOGY4Ni4uMDkwMWIyZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9saWIvZGVsYXkuYworKysgYi9hcmNoL3NoL2xpYi9kZWxheS5jCkBAIC0xMCw2ICsxMCwxNiBAQAogdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCS8qCisJCSAqIFNUNDAtMzAwIGFwcGVhcnMgdG8gaGF2ZSBhbiBpc3N1ZSB3aXRoIHRoaXMgY29kZSwKKwkJICogbm9ybWFsbHkgdGFraW5nIHR3byBjeWNsZXMgZWFjaCBsb29wLCBhcyB3aXRoIGFsbAorCQkgKiBvdGhlciBTSCB2YXJpYW50cy4gSWYgaG93ZXZlciB0aGUgYnJhbmNoIGFuZCB0aGUKKwkJICogZGVsYXkgc2xvdCBzdHJhZGRsZSBhbiA4IGJ5dGUgYm91bmRhcnksIHRoaXMgaW5jcmVhc2VzCisJCSAqIHRvIDMgY3ljbGVzLgorCQkgKiBUaGlzIGFsaWduIGRpcmVjdGl2ZSBlbnN1cmVzIHRoaXMgZG9lc24ndCBvY2N1ci4KKwkJICovCisJCSIuYmFsaWduIDhcblx0IgorCiAJCSJ0c3QJJTAsICUwXG5cdCIKIAkJIjE6XHQiCiAJCSJiZi9zCTFiXG5cdCIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUuYyBiL2FyY2gvc2gvbW0vY2FjaGUuYwppbmRleCA4OGQzZGMzLi41YTU4MGVhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS5jCkBAIC0xMDgsNyArMTA4LDggQEAKIAkJa3VubWFwX2F0b21pYyh2ZnJvbSwgS01fVVNFUjApOwogCX0KIAotCWlmIChwYWdlc19kb19hbGlhcygodW5zaWduZWQgbG9uZyl2dG8sIHZhZGRyICYgUEFHRV9NQVNLKSkKKwlpZiAocGFnZXNfZG9fYWxpYXMoKHVuc2lnbmVkIGxvbmcpdnRvLCB2YWRkciAmIFBBR0VfTUFTSykgfHwKKwkgICAgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSkKIAkJX19mbHVzaF9wdXJnZV9yZWdpb24odnRvLCBQQUdFX1NJWkUpOwogCiAJa3VubWFwX2F0b21pYyh2dG8sIEtNX1VTRVIxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Bjci5oCmluZGV4IGEyZjVjNjEuLjg0M2U0ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY3IuaApAQCAtNDMsNCArNDMsNiBAQAogCiBleHRlcm4gdTY0IHBjcl9lbmFibGU7CiAKK2V4dGVybiBpbnQgcGNyX2FyY2hfaW5pdCh2b2lkKTsKKwogI2VuZGlmIC8qIF9fUENSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lvbW11LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jCmluZGV4IDQ3OTc3YTcuLjcyNTA5ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lvbW11LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9tbXUuYwpAQCAtMjU1LDEwICsyNTUsOSBAQAogc3RhdGljIGludCBpb21tdV9hbGxvY19jdHgoc3RydWN0IGlvbW11ICppb21tdSkKIHsKIAlpbnQgbG93ZXN0ID0gaW9tbXUtPmN0eF9sb3dlc3RfZnJlZTsKLQlpbnQgc3ogPSBJT01NVV9OVU1fQ1RYUyAtIGxvd2VzdDsKLQlpbnQgbiA9IGZpbmRfbmV4dF96ZXJvX2JpdChpb21tdS0+Y3R4X2JpdG1hcCwgc3osIGxvd2VzdCk7CisJaW50IG4gPSBmaW5kX25leHRfemVyb19iaXQoaW9tbXUtPmN0eF9iaXRtYXAsIElPTU1VX05VTV9DVFhTLCBsb3dlc3QpOwogCi0JaWYgKHVubGlrZWx5KG4gPT0gc3opKSB7CisJaWYgKHVubGlrZWx5KG4gPT0gSU9NTVVfTlVNX0NUWFMpKSB7CiAJCW4gPSBmaW5kX25leHRfemVyb19iaXQoaW9tbXUtPmN0eF9iaXRtYXAsIGxvd2VzdCwgMSk7CiAJCWlmICh1bmxpa2VseShuID09IGxvd2VzdCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIklPTU1VOiBSYW4gb3V0IG9mIGNvbnRleHRzLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY3IuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jCmluZGV4IGFlOTZjZjUuLjdjMmNlZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jCkBAIC0xNjcsNSArMTY3LDMgQEAKIAl1bnJlZ2lzdGVyX3BlcmZfaHN2YygpOwogCXJldHVybiBlcnI7CiB9Ci0KLWVhcmx5X2luaXRjYWxsKHBjcl9hcmNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwppbmRleCBiNmEyYjhmLi41NTVhNzZkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9tZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9sZGMuaD4KICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPGFzbS9wY3IuaD4KIAogI2luY2x1ZGUgImNwdW1hcC5oIgogCkBAIC0xMzU4LDYgKzEzNTksNyBAQAogCiB2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKKwlwY3JfYXJjaF9pbml0KCk7CiB9CiAKIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdW5hX2FzbV8zMi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvdW5hX2FzbV8zMi5TCmluZGV4IDhjYzAzNDUuLjhmMDk2ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3VuYV9hc21fMzIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFfYXNtXzMyLlMKQEAgLTI0LDkgKzI0LDkgQEAKIAkuZ2xvYmwJX19kb19pbnRfc3RvcmUKIF9fZG9faW50X3N0b3JlOgogCWxkCVslbzJdLCAlZzEKLQljbXAJJTEsIDIKKwljbXAJJW8xLCAyCiAJYmUJMmYKLQkgY21wCSUxLCA0CisJIGNtcAklbzEsIDQKIAliZQkxZgogCSBzcmwJJWcxLCAyNCwgJWcyCiAJc3JsCSVnMSwgMTYsICVnNwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmMgYi9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYwppbmRleCA3NjRiM2ViLi40OGQwMGU3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYworKysgYi9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9iaXRleHQuaD4KIApAQCAtODAsOCArODAsNyBAQAogCQl3aGlsZSAodGVzdF9iaXQob2Zmc2V0ICsgaSwgdC0+bWFwKSA9PSAwKSB7CiAJCQlpKys7CiAJCQlpZiAoaSA9PSBsZW4pIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQkJCV9fc2V0X2JpdChvZmZzZXQgKyBpLCB0LT5tYXApOworCQkJCWJpdG1hcF9zZXQodC0+bWFwLCBvZmZzZXQsIGxlbik7CiAJCQkJaWYgKG9mZnNldCA9PSB0LT5maXJzdF9mcmVlKQogCQkJCQl0LT5maXJzdF9mcmVlID0gZmluZF9uZXh0X3plcm9fYml0CiAJCQkJCQkJKHQtPm1hcCwgdC0+c2l6ZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAppbmRleCAyMTFjYTNmLi40ZWExNWNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCkBAIC04OCw2ICs4OCw3IEBACiBleHRlcm4gaW50IGFjcGlfcGNpX2Rpc2FibGVkOwogZXh0ZXJuIGludCBhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGU7CiBleHRlcm4gaW50IGFjcGlfdXNlX3RpbWVyX292ZXJyaWRlOworZXh0ZXJuIGludCBhY3BpX2ZpeF9waW4yX3BvbGFyaXR5OwogCiBleHRlcm4gdTggYWNwaV9zY2lfZmxhZ3M7CiBleHRlcm4gaW50IGFjcGlfc2NpX292ZXJyaWRlX2dzaTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaAppbmRleCA1ZTM5NjljLi4zYzg5Njk0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCkBAIC0yMzMsNiArMjMzLDcgQEAKIGV4dGVybiB2b2lkIGluaXRfYnNwX0FQSUModm9pZCk7CiBleHRlcm4gdm9pZCBzZXR1cF9sb2NhbF9BUElDKHZvaWQpOwogZXh0ZXJuIHZvaWQgZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCk7CitleHRlcm4gdm9pZCBic3BfZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCk7CiBleHRlcm4gdm9pZCBpbml0X2FwaWNfbWFwcGluZ3Modm9pZCk7CiB2b2lkIHJlZ2lzdGVyX2xhcGljX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIGV4dGVybiB2b2lkIHNldHVwX2Jvb3RfQVBJQ19jbG9jayh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA2M2UzNWVjLi42MmYwODQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0xLDQ4ICsxLDggQEAKICNpZm5kZWYgX0FTTV9YODZfQ0FDSEVGTFVTSF9ICiAjZGVmaW5lIF9BU01fWDg2X0NBQ0hFRkxVU0hfSAogCi0vKiBLZWVwIGluY2x1ZGVzIHRoZSBzYW1lIGFjcm9zcyBhcmNoZXMuICAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KIC8qIENhY2hlcyBhcmVuJ3QgYnJhaW4tZGVhZCBvbiB0aGUgaW50ZWwuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfYWxsKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9kdXBfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgdm1hZGRyLCB1bnNpZ25lZCBsb25nIHBmbikgeyB9Ci0jZGVmaW5lIEFSQ0hfSU1QTEVNRU5UU19GTFVTSF9EQ0FDSEVfUEFHRSAwCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCQkgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGxlbikgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfdm1hcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfdnVubWFwKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpIHsgfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwKLQkJCQkgICAgIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsZW4pCi17Ci0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV9mcm9tX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCi0JCQkJICAgICAgIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxlbikKLXsKLQltZW1jcHkoZHN0LCBzcmMsIGxlbik7Ci19CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY2FjaGVmbHVzaC5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQVQKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oCmluZGV4IDRmYWIyNGQuLjQ1NjRjOGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oCkBAIC0zMiw1ICszMiw2IEBACiAKIERFQ0xBUkVfUEVSX0NQVShpbnQsIGNwdV9zdGF0ZSk7CiAKK2ludCBtd2FpdF91c2FibGUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICopOwogCiAjZW5kaWYgLyogX0FTTV9YODZfQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaAppbmRleCBmNTJkNDJlLi41NzRkYmMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJZG8gewkJCQkJCQlcCiAJCWFzbSBnb3RvKCIxOiIJCQkJCVwKIAkJCUpVTVBfTEFCRUxfSU5JVElBTF9OT1AJCQlcCi0JCQkiLnB1c2hzZWN0aW9uIF9fanVtcF90YWJsZSwgIFwiYVwiIFxuXHQiXAorCQkJIi5wdXNoc2VjdGlvbiBfX2p1bXBfdGFibGUsICBcImF3XCIgXG5cdCJcCiAJCQlfQVNNX1BUUiAiMWIsICVsWyIgI2xhYmVsICJdLCAlYzAgXG5cdCIgXAogCQkJIi5wb3BzZWN0aW9uIFxuXHQiCQkJXAogCQkJOiA6ICAiaSIgKGtleSkgOiAgOiBsYWJlbCk7CQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCA0YTJkNGUwLi44YjUzOTNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTM2LDggKzM2LDYgQEAKIAl1bnNpZ25lZCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlpZiAobGlrZWx5KHByZXYgIT0gbmV4dCkpIHsKLQkJLyogc3RvcCBmbHVzaCBpcGlzIGZvciB0aGUgcHJldmlvdXMgbW0gKi8KLQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtbV9jcHVtYXNrKHByZXYpKTsKICNpZmRlZiBDT05GSUdfU01QCiAJCXBlcmNwdV93cml0ZShjcHVfdGxic3RhdGUuc3RhdGUsIFRMQlNUQVRFX09LKTsKIAkJcGVyY3B1X3dyaXRlKGNwdV90bGJzdGF0ZS5hY3RpdmVfbW0sIG5leHQpOwpAQCAtNDcsNiArNDUsOSBAQAogCQkvKiBSZS1sb2FkIHBhZ2UgdGFibGVzICovCiAJCWxvYWRfY3IzKG5leHQtPnBnZCk7CiAKKwkJLyogc3RvcCBmbHVzaCBpcGlzIGZvciB0aGUgcHJldmlvdXMgbW0gKi8KKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtbV9jcHVtYXNrKHByZXYpKTsKKwogCQkvKgogCQkgKiBsb2FkIHRoZSBMRFQsIGlmIHRoZSBMRFQgaXMgZGlmZmVyZW50OgogCQkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKaW5kZXggNGQwZGZhMC4uNDNhMThjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTM2LDYgKzM2LDExIEBACiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZDVFIxCQkweDAwMDAwMGMyCiAjZGVmaW5lIE1TUl9GU0JfRlJFUQkJCTB4MDAwMDAwY2QKIAorI2RlZmluZSBNU1JfTkhNX1NOQl9QS0dfQ1NUX0NGR19DVEwJMHgwMDAwMDBlMgorI2RlZmluZSBOSE1fQzNfQVVUT19ERU1PVEUJCSgxVUwgPDwgMjUpCisjZGVmaW5lIE5ITV9DMV9BVVRPX0RFTU9URQkJKDFVTCA8PCAyNikKKyNkZWZpbmUgQVRNX0xOQ19DNl9BVVRPX0RFTU9URQkJKDFVTCA8PCAyNSkKKwogI2RlZmluZSBNU1JfTVRSUmNhcAkJCTB4MDAwMDAwZmUKICNkZWZpbmUgTVNSX0lBMzJfQkJMX0NSX0NUTAkJMHgwMDAwMDExOQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAppbmRleCAyMDcxYThiLi5lYmJjNGQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKQEAgLTU1OCwxMyArNTU4LDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtZF9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgcG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKIHsKLSNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKIAlpZiAoc2l6ZW9mKHBtZHZhbF90KSA+IHNpemVvZihsb25nKSkKIAkJLyogNSBhcmcgd29yZHMgKi8KIAkJcHZfbW11X29wcy5zZXRfcG1kX2F0KG1tLCBhZGRyLCBwbWRwLCBwbWQpOwogCWVsc2UKLQkJUFZPUF9WQ0FMTDQocHZfbW11X29wcy5zZXRfcG1kX2F0LCBtbSwgYWRkciwgcG1kcCwgcG1kLnBtZCk7Ci0jZW5kaWYKKwkJUFZPUF9WQ0FMTDQocHZfbW11X29wcy5zZXRfcG1kX2F0LCBtbSwgYWRkciwgcG1kcCwKKwkJCSAgICBuYXRpdmVfcG1kX3ZhbChwbWQpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IDM3ODhmNDYuLjdlMTcyOTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCkBAIC0yNzMsMzQgKzI3MywzNCBAQAogCXR5cGVvZih2YXIpIHB4b19uZXdfXyA9IChudmFsKTsJCQkJCVwKIAlzd2l0Y2ggKHNpemVvZih2YXIpKSB7CQkJCQkJXAogCWNhc2UgMToJCQkJCQkJCVwKLQkJYXNtKCJcbjE6bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlYWwiCQkJXAotCQkgICAgIlxuXHRjbXB4Y2hnYiAlMiwgIl9fcGVyY3B1X2FyZygxKQkJCVwKKwkJYXNtKCJcblx0bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlYWwiCQkJXAorCQkgICAgIlxuMTpcdGNtcHhjaGdiICUyLCAiX19wZXJjcHVfYXJnKDEpCQlcCiAJCSAgICAiXG5cdGpueiAxYiIJCQkJCVwKLQkJCSAgICA6ICI9YSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6ICI9JmEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCiAJCQkgICAgOiAicSIgKHB4b19uZXdfXykJCQkJXAogCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJY2FzZSAyOgkJCQkJCQkJXAotCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVheCIJCQlcCi0JCSAgICAiXG5cdGNtcHhjaGd3ICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQlhc20oIlxuXHRtb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVheCIJCQlcCisJCSAgICAiXG4xOlx0Y21weGNoZ3cgJTIsICJfX3BlcmNwdV9hcmcoMSkJCVwKIAkJICAgICJcblx0am56IDFiIgkJCQkJXAotCQkJICAgIDogIj1hIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAorCQkJICAgIDogIj0mYSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKIAkJCSAgICA6ICJyIiAocHhvX25ld19fKQkJCQlcCiAJCQkgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKIAljYXNlIDQ6CQkJCQkJCQlcCi0JCWFzbSgiXG4xOm1vdiAiX19wZXJjcHVfYXJnKDEpIiwlJWVheCIJCQlcCi0JCSAgICAiXG5cdGNtcHhjaGdsICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQlhc20oIlxuXHRtb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVlYXgiCQkJXAorCQkgICAgIlxuMTpcdGNtcHhjaGdsICUyLCAiX19wZXJjcHVfYXJnKDEpCQlcCiAJCSAgICAiXG5cdGpueiAxYiIJCQkJCVwKLQkJCSAgICA6ICI9YSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6ICI9JmEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCiAJCQkgICAgOiAiciIgKHB4b19uZXdfXykJCQkJXAogCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJY2FzZSA4OgkJCQkJCQkJXAotCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVyYXgiCQkJXAotCQkgICAgIlxuXHRjbXB4Y2hncSAlMiwgIl9fcGVyY3B1X2FyZygxKQkJCVwKKwkJYXNtKCJcblx0bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlcmF4IgkJCVwKKwkJICAgICJcbjE6XHRjbXB4Y2hncSAlMiwgIl9fcGVyY3B1X2FyZygxKQkJXAogCQkgICAgIlxuXHRqbnogMWIiCQkJCQlcCi0JCQkgICAgOiAiPWEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCisJCQkgICAgOiAiPSZhIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAogCQkJICAgIDogInIiIChweG9fbmV3X18pCQkJCVwKIAkJCSAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oCmluZGV4IGUyZjZhOTkuLmNjMjkwODYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnRfcDQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X3A0LmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2RlZmluZSBBUkNIX1A0X0NOVFJWQUxfQklUUwkoNDApCiAjZGVmaW5lIEFSQ0hfUDRfQ05UUlZBTF9NQVNLCSgoMVVMTCA8PCBBUkNIX1A0X0NOVFJWQUxfQklUUykgLSAxKQorI2RlZmluZSBBUkNIX1A0X1VORkxBR0dFRF9CSVQJKCgxVUxMKSA8PCAoQVJDSF9QNF9DTlRSVkFMX0JJVFMgLSAxKSkKIAogI2RlZmluZSBQNF9FU0NSX0VWRU5UX01BU0sJMHg3ZTAwMDAwMFUKICNkZWZpbmUgUDRfRVNDUl9FVkVOVF9TSElGVAkyNQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA0YzJmNjNjLi4xZjQ2OTUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaApAQCAtNDAsMTAgKzQwLDcgQEAKIERFQ0xBUkVfRUFSTFlfUEVSX0NQVSh1MTYsIHg4Nl9iaW9zX2NwdV9hcGljaWQpOwogCiAvKiBTdGF0aWMgc3RhdGUgaW4gaGVhZC5TIHVzZWQgdG8gc2V0IHVwIGEgQ1BVICovCi1leHRlcm4gc3RydWN0IHsKLQl2b2lkICpzcDsKLQl1bnNpZ25lZCBzaG9ydCBzczsKLX0gc3RhY2tfc3RhcnQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdGFja19zdGFydDsgLyogSW5pdGlhbCBzdGFjayBwb2ludGVyIGFkZHJlc3MgKi8KIAogc3RydWN0IHNtcF9vcHMgewogCXZvaWQgKCpzbXBfcHJlcGFyZV9ib290X2NwdSkodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXBib290X2hvb2tzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXBib290X2hvb2tzLmgKaW5kZXggNmMyMmJmMy4uNzI1Yjc3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wYm9vdF9ob29rcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcGJvb3RfaG9va3MuaApAQCAtMzQsNyArMzQsNyBAQAogCSAqLwogCUNNT1NfV1JJVEUoMCwgMHhmKTsKIAotCSooKHZvbGF0aWxlIGxvbmcgKilwaHlzX3RvX3ZpcnQoYXBpYy0+dHJhbXBvbGluZV9waHlzX2xvdykpID0gMDsKKwkqKCh2b2xhdGlsZSB1MzIgKilwaHlzX3RvX3ZpcnQoYXBpYy0+dHJhbXBvbGluZV9waHlzX2xvdykpID0gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbXBib290X3NldHVwX2lvX2FwaWModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNTllMDkxLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9TWVNURU1fNjRfSAotI2RlZmluZSBfQVNNX1g4Nl9TWVNURU1fNjRfSAotCi0jaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vY21weGNoZy5oPgotCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2NyOCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY3I4OwotCWFzbSB2b2xhdGlsZSgibW92cSAlJWNyOCwlMCIgOiAiPXIiIChjcjgpKTsKLQlyZXR1cm4gY3I4OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfY3I4KHVuc2lnbmVkIGxvbmcgdmFsKQotewotCWFzbSB2b2xhdGlsZSgibW92cSAlMCwlJWNyOCIgOjogInIiICh2YWwpIDogIm1lbW9yeSIpOwotfQotCi0jaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KLQotI2VuZGlmIC8qIF9BU01fWDg2X1NZU1RFTV82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKaW5kZXggYjNhNzExMy4uM2U2ZTJkNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtNzIsNiArNzIsNyBAQAogaW50IGFjcGlfc2NpX292ZXJyaWRlX2dzaSBfX2luaXRkYXRhOwogaW50IGFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSBfX2luaXRkYXRhOwogaW50IGFjcGlfdXNlX3RpbWVyX292ZXJyaWRlIF9faW5pdGRhdGE7CitpbnQgYWNwaV9maXhfcGluMl9wb2xhcml0eSBfX2luaXRkYXRhOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiBzdGF0aWMgdTY0IGFjcGlfbGFwaWNfYWRkciBfX2luaXRkYXRhID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKQEAgLTQxNSwxMCArNDE2LDE1IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGUgJiYKLQkgICAgaW50c3JjLT5zb3VyY2VfaXJxID09IDAgJiYgaW50c3JjLT5nbG9iYWxfaXJxID09IDIpIHsKLQkJcHJpbnRrKFBSRUZJWCAiQklPUyBJUlEwIHBpbjIgb3ZlcnJpZGUgaWdub3JlZC5cbiIpOwotCQlyZXR1cm4gMDsKKwlpZiAoaW50c3JjLT5zb3VyY2VfaXJxID09IDAgJiYgaW50c3JjLT5nbG9iYWxfaXJxID09IDIpIHsKKwkJaWYgKGFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSkgeworCQkJcHJpbnRrKFBSRUZJWCAiQklPUyBJUlEwIHBpbjIgb3ZlcnJpZGUgaWdub3JlZC5cbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGFjcGlfZml4X3BpbjJfcG9sYXJpdHkgJiYgKGludHNyYy0+aW50aV9mbGFncyAmIEFDUElfTUFEVF9QT0xBUklUWV9NQVNLKSkgeworCQkJaW50c3JjLT5pbnRpX2ZsYWdzICY9IH5BQ1BJX01BRFRfUE9MQVJJVFlfTUFTSzsKKwkJCXByaW50ayhQUkVGSVggIkJJT1MgSVJRMCBwaW4yIG92ZXJyaWRlOiBmb3JjaW5nIHBvbGFyaXR5IHRvIGhpZ2ggYWN0aXZlLlxuIik7CisJCX0KIAl9CiAKIAltcF9vdmVycmlkZV9sZWdhY3lfaXJxKGludHNyYy0+c291cmNlX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCmluZGV4IDY5ZmQ3MmEuLjY4ZDE1MzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwpAQCAtMTIsMTAgKzEyLDggQEAKICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaW5jbHVkZSAicmVhbG1vZGUvd2FrZXVwLmgiCiAjaW5jbHVkZSAic2xlZXAuaCIKQEAgLTEwMCw3ICs5OCw3IEBACiAjZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KIAloZWFkZXItPnRyYW1wb2xpbmVfc2VnbWVudCA9IHNldHVwX3RyYW1wb2xpbmUoKSA+PiA0OwogI2lmZGVmIENPTkZJR19TTVAKLQlzdGFja19zdGFydC5zcCA9IHRlbXBfc3RhY2sgKyBzaXplb2YodGVtcF9zdGFjayk7CisJc3RhY2tfc3RhcnQgPSAodW5zaWduZWQgbG9uZyl0ZW1wX3N0YWNrICsgc2l6ZW9mKHRlbXBfc3RhY2spOwogCWVhcmx5X2dkdF9kZXNjci5hZGRyZXNzID0KIAkJCSh1bnNpZ25lZCBsb25nKWdldF9jcHVfZ2R0X3RhYmxlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJaW5pdGlhbF9ncyA9IHBlcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7CkBAIC0xNDksNiArMTQ3LDE1IEBACiAJbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2UobWVtLCBtZW0gKyBXQUtFVVBfU0laRSwgIkFDUEkgV0FLRVVQIik7CiB9CiAKK2ludCBfX2luaXQgYWNwaV9jb25maWd1cmVfd2FrZXVwX21lbW9yeSh2b2lkKQoreworCWlmIChhY3BpX3JlYWxtb2RlKQorCQlzZXRfbWVtb3J5X3goYWNwaV9yZWFsbW9kZSwgV0FLRVVQX1NJWkUgPj4gUEFHRV9TSElGVCk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoYWNwaV9jb25maWd1cmVfd2FrZXVwX21lbW9yeSk7CisKIAogc3RhdGljIGludCBfX2luaXQgYWNwaV9zbGVlcF9zZXR1cChjaGFyICpzdHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IDEyMzYwODUuLjcwMzhiOTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC02NzEsNyArNjcxLDcgQEAKIAogCWF0b21pY19zZXQoJnN0b3BfbWFjaGluZV9maXJzdCwgMSk7CiAJd3JvdGVfdGV4dCA9IDA7Ci0Jc3RvcF9tYWNoaW5lKHN0b3BfbWFjaGluZV90ZXh0X3Bva2UsICh2b2lkICopJnRwcCwgTlVMTCk7CisJX19zdG9wX21hY2hpbmUoc3RvcF9tYWNoaW5lX3RleHRfcG9rZSwgKHZvaWQgKikmdHBwLCBOVUxMKTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSB8fCBkZWZpbmVkKEhBVkVfSlVNUF9MQUJFTCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGJfdGltZXIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGJfdGltZXIuYwppbmRleCA1MWVmMzFhLi41MWQ0ZTE2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAltZW1jcHkoJmFkZXYtPmV2dCwgJmFwYnRfY2xvY2tldmVudCwgc2l6ZW9mKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UpKTsKIAogCWlmIChtcnN0X3RpbWVyX29wdGlvbnMgPT0gTVJTVF9USU1FUl9MQVBJQ19BUEJUKSB7Ci0JCWFwYnRfY2xvY2tldmVudC5yYXRpbmcgPSBBUEJUX0NMT0NLRVZFTlRfUkFUSU5HIC0gMTAwOworCQlhZGV2LT5ldnQucmF0aW5nID0gQVBCVF9DTE9DS0VWRU5UX1JBVElORyAtIDEwMDsKIAkJZ2xvYmFsX2Nsb2NrX2V2ZW50ID0gJmFkZXYtPmV2dDsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIGNsb2NrZXZlbnQgcmVnaXN0ZXJlZCBhcyBnbG9iYWxcbiIsCiAJCSAgICAgICBnbG9iYWxfY2xvY2tfZXZlbnQtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCmluZGV4IDA2YzE5NmQuLjc2Yjk2ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKQEAgLTEzODEsMTIgKzEzODEsMTcgQEAKICNlbmRpZgogCiAJYXBpY19wbV9hY3RpdmF0ZSgpOworfQorCit2b2lkIF9faW5pdCBic3BfZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCkKK3sKKwllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwogCiAJLyoKIAkgKiBOb3cgdGhhdCBsb2NhbCBBUElDIHNldHVwIGlzIGNvbXBsZXRlZCBmb3IgQlAsIGNvbmZpZ3VyZSB0aGUgZmF1bHQKIAkgKiBoYW5kbGluZyBmb3IgaW50ZXJydXB0IHJlbWFwcGluZy4KIAkgKi8KLQlpZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSAmJiBpbnRyX3JlbWFwcGluZ19lbmFibGVkKQorCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKQogCQllbmFibGVfZHJoZF9mYXVsdF9oYW5kbGluZygpOwogCiB9CkBAIC0xNzU2LDcgKzE3NjEsNyBAQAogCQllbmFibGVfSU9fQVBJQygpOwogI2VuZGlmCiAKLQllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOworCWJzcF9lbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJaWYgKHNtcF9mb3VuZF9jb25maWcgJiYgIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggNjk3ZGMzNC4uY2E5ZTJhMzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKQEAgLTQwMDIsNiArNDAwMiw5IEBACiB7CiAJaW50IGkgPSAwOwogCisJaWYgKG5yX2lvYXBpY3MgPT0gMCkKKwkJcmV0dXJuIC0xOworCiAJLyogRmluZCB0aGUgSU9BUElDIHRoYXQgbWFuYWdlcyB0aGlzIEdTSS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CiAJCWlmICgoZ3NpID49IG1wX2dzaV9yb3V0aW5nW2ldLmdzaV9iYXNlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYwppbmRleCBiZDFjYWM3Li41MmM5MzY0OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKQEAgLTE1OCw5ICsxNTgsOSBAQAogewogCWlmIChjLT54ODYgPT0gMHgwNikgewogCQlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9FU1QpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldhcm5pbmc6IEVTVC1jYXBhYmxlIENQVSAiCi0JCQkgICAgICAgImRldGVjdGVkLiBUaGUgYWNwaS1jcHVmcmVxIG1vZHVsZSBvZmZlcnMgIgotCQkJICAgICAgICJ2b2x0YWdlIHNjYWxpbmcgaW4gYWRkaXRpb24gb2YgZnJlcXVlbmN5ICIKKwkJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyBQRlggIldhcm5pbmc6IEVTVC1jYXBhYmxlICIKKwkJCSAgICAgICAiQ1BVIGRldGVjdGVkLiBUaGUgYWNwaS1jcHVmcmVxIG1vZHVsZSBvZmZlcnMgIgorCQkJICAgICAgICJ2b2x0YWdlIHNjYWxpbmcgaW4gYWRkaXRpb24gdG8gZnJlcXVlbmN5ICIKIAkJCSAgICAgICAic2NhbGluZy4gWW91IHNob3VsZCB1c2UgdGhhdCBpbnN0ZWFkIG9mICIKIAkJCSAgICAgICAicDQtY2xvY2ttb2QsIGlmIHBvc3NpYmxlLlxuIik7CiAJCXN3aXRjaCAoYy0+eDg2X21vZGVsKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IDM1YzdlNjUuLmM1NjdkZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC0xNTM3LDYgKzE1MzcsNyBAQAogc3RhdGljIGludCBfX2NwdWluaXQgcG93ZXJub3drOF9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGksIHN1cHBvcnRlZF9jcHVzID0gMCwgY3B1OworCWludCBydjsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQlpbnQgcmM7CkBAIC0xNTU1LDE0ICsxNTU2LDE0IEBACiAKIAkJY3BiX2NhcGFibGUgPSB0cnVlOwogCi0JCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3BiX25iKTsKLQogCQltc3JzID0gbXNyc19hbGxvYygpOwogCQlpZiAoIW1zcnMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGFsbG9jYXRpbmcgbXNycyFcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKKwkJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcGJfbmIpOworCiAJCXJkbXNyX29uX2NwdXMoY3B1X29ubGluZV9tYXNrLCBNU1JfSzdfSFdDUiwgbXNycyk7CiAKIAkJZm9yX2VhY2hfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSB7CkBAIC0xNTc0LDcgKzE1NzUsMTMgQEAKIAkJCShjcGJfZW5hYmxlZCA/ICJvbiIgOiAib2ZmIikpOwogCX0KIAotCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmY3B1ZnJlcV9hbWQ2NF9kcml2ZXIpOworCXJ2ID0gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmNwdWZyZXFfYW1kNjRfZHJpdmVyKTsKKwlpZiAocnYgPCAwICYmIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DUEIpKSB7CisJCXVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcGJfbmIpOworCQltc3JzX2ZyZWUobXNycyk7CisJCW1zcnMgPSBOVUxMOworCX0KKwlyZXR1cm4gcnY7CiB9CiAKIC8qIGRyaXZlciBlbnRyeSBwb2ludCBmb3IgdGVybSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggNzI4M2U5OC4uZWMyYzE5YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC00NSw2ICs0NSw3IEBACiAJeyAweDBhLCBMVkxfMV9EQVRBLCA4IH0sCS8qIDIgd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MGMsIExWTF8xX0RBVEEsIDE2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MGQsIExWTF8xX0RBVEEsIDE2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4MGUsIExWTF8xX0RBVEEsIDI0IH0sCS8qIDYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MjEsIExWTF8yLCAgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDIyLCBMVkxfMywgICAgICA1MTIgfSwJLyogNC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MjMsIExWTF8zLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCkBAIC02Niw2ICs2Nyw3IEBACiAJeyAweDQ1LCBMVkxfMiwgICAgICBNQigyKSB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDQ2LCBMVkxfMywgICAgICBNQig0KSB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDQ3LCBMVkxfMywgICAgICBNQig4KSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDQ4LCBMVkxfMiwgICAgICBNQigzKSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0OSwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NGEsIExWTF8zLCAgICAgIE1CKDYpIH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDRiLCBMVkxfMywgICAgICBNQig4KSB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwpAQCAtODcsNiArODksNyBAQAogCXsgMHg3YywgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4N2QsIExWTF8yLCAgICAgIE1CKDIpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4N2YsIExWTF8yLCAgICAgIDUxMiB9LAkvKiAyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDgwLCBMVkxfMiwgICAgICA1MTIgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg4MiwgTFZMXzIsICAgICAgMjU2IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4ODMsIExWTF8yLCAgICAgIDUxMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDg0LCBMVkxfMiwgICAgICBNQigxKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwppbmRleCBlMTIyNDZmLi42ZjhjNWU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKQEAgLTU5LDYgKzU5LDcgQEAKIAogLyogQ2FsbGJhY2sgdG8gaGFuZGxlIGNvcmUgdGhyZXNob2xkIGludGVycnVwdHMgKi8KIGludCAoKnBsYXRmb3JtX3RoZXJtYWxfbm90aWZ5KShfX3U2NCBtc3JfdmFsKTsKK0VYUE9SVF9TWU1CT0wocGxhdGZvcm1fdGhlcm1hbF9ub3RpZnkpOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRoZXJtYWxfc3RhdGUsIHRoZXJtYWxfc3RhdGUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwppbmRleCAwMWMwZjNlLi5iZWJhYmVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKQEAgLTc5MywxMyArNzkzLDIxIEBACiB9CiAKIC8qCi0gKiBNVFJSIGluaXRpYWxpemF0aW9uIGZvciBhbGwgQVAncworICogRGVsYXllZCBNVFJSIGluaXRpYWxpemF0aW9uIGZvciBhbGwgQVAncwogICovCiB2b2lkIG10cnJfYXBzX2luaXQodm9pZCkKIHsKIAlpZiAoIXVzZV9pbnRlbCgpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIENoZWNrIGlmIHNvbWVvbmUgaGFzIHJlcXVlc3RlZCB0aGUgZGVsYXkgb2YgQVAgTVRSUiBpbml0aWFsaXphdGlvbiwKKwkgKiBieSBkb2luZyBzZXRfbXRycl9hcHNfZGVsYXllZF9pbml0KCksIHByaW9yIHRvIHRoaXMgcG9pbnQuIElmIG5vdCwKKwkgKiB0aGVuIHdlIGFyZSBkb25lLgorCSAqLworCWlmICghbXRycl9hcHNfZGVsYXllZF9pbml0KQorCQlyZXR1cm47CisKIAlzZXRfbXRycih+MFUsIDAsIDAsIDApOwogCW10cnJfYXBzX2RlbGF5ZWRfaW5pdCA9IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYwppbmRleCBlNTZiOWJmLi5mZjc1MWE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYwpAQCAtNjgyLDcgKzY4Miw3IEBACiAJICogaWYgYW4gZXZlbnQgaXMgc2hhcmVkIGFjY3Jvc3MgdGhlIGxvZ2ljYWwgdGhyZWFkcwogCSAqIHRoZSB1c2VyIG5lZWRzIHNwZWNpYWwgcGVybWlzc2lvbnMgdG8gYmUgYWJsZSB0byB1c2UgaXQKIAkgKi8KLQlpZiAocDRfZXZlbnRfYmluZF9tYXBbdl0uc2hhcmVkKSB7CisJaWYgKHA0X2h0X2FjdGl2ZSgpICYmIHA0X2V2ZW50X2JpbmRfbWFwW3ZdLnNoYXJlZCkgewogCQlpZiAocGVyZl9wYXJhbm9pZF9jcHUoKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRUFDQ0VTOwogCX0KQEAgLTcyNyw3ICs3MjcsOCBAQAogCQlldmVudC0+aHcuY29uZmlnID0gcDRfc2V0X2h0X2JpdChldmVudC0+aHcuY29uZmlnKTsKIAogCWlmIChldmVudC0+YXR0ci50eXBlID09IFBFUkZfVFlQRV9SQVcpIHsKLQorCQlzdHJ1Y3QgcDRfZXZlbnRfYmluZCAqYmluZDsKKwkJdW5zaWduZWQgaW50IGVzZWw7CiAJCS8qCiAJCSAqIENsZWFyIGJpdHMgd2UgcmVzZXJ2ZSB0byBiZSBtYW5hZ2VkIGJ5IGtlcm5lbCBpdHNlbGYKIAkJICogYW5kIG5ldmVyIGFsbG93ZWQgZnJvbSBhIHVzZXIgc3BhY2UKQEAgLTc0Myw2ICs3NDQsMTMgQEAKIAkJICogYml0cyBzaW5jZSB3ZSBrZWVwIGFkZGl0aW9uYWwgaW5mbyBoZXJlIChmb3IgY2FjaGUgZXZlbnRzIGFuZCBldGMpCiAJCSAqLwogCQlldmVudC0+aHcuY29uZmlnIHw9IGV2ZW50LT5hdHRyLmNvbmZpZzsKKwkJYmluZCA9IHA0X2NvbmZpZ19nZXRfYmluZChldmVudC0+YXR0ci5jb25maWcpOworCQlpZiAoIWJpbmQpIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWVzZWwgPSBQNF9PUENPREVfRVNFTChiaW5kLT5vcGNvZGUpOworCQlldmVudC0+aHcuY29uZmlnIHw9IHA0X2NvbmZpZ19wYWNrX2NjY3IoUDRfQ0NDUl9FU0VMKGVzZWwpKTsKIAl9CiAKIAlyYyA9IHg4Nl9zZXR1cF9wZXJmY3RyKGV2ZW50KTsKQEAgLTc2Miw5ICs3NzAsMTQgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JLyogaXQgbWlnaHQgYmUgdW5mbGFnZ2VkIG92ZXJmbG93ICovCi0JcmRtc3JsKGh3Yy0+ZXZlbnRfYmFzZSArIGh3Yy0+aWR4LCB2KTsKLQlpZiAoISh2ICYgQVJDSF9QNF9DTlRSVkFMX01BU0spKQorCS8qCisJICogSW4gc29tZSBjaXJjdW1zdGFuY2VzIHRoZSBvdmVyZmxvdyBtaWdodCBpc3N1ZSBhbiBOTUkgYnV0IGRpZAorCSAqIG5vdCBzZXQgUDRfQ0NDUl9PVkYgYml0LiBCZWNhdXNlIGEgY291bnRlciBob2xkcyBhIG5lZ2F0aXZlIHZhbHVlCisJICogd2Ugc2ltcGx5IGNoZWNrIGZvciBoaWdoIGJpdCBiZWluZyBzZXQsIGlmIGl0J3MgY2xlYXJlZCBpdCBtZWFucworCSAqIHRoZSBjb3VudGVyIGhhcyByZWFjaGVkIHplcm8gdmFsdWUgYW5kIGNvbnRpbnVlZCBjb3VudGluZyBiZWZvcmUKKwkgKiByZWFsIE5NSSBzaWduYWwgd2FzIHJlY2VpdmVkOgorCSAqLworCWlmICghKHYgJiBBUkNIX1A0X1VORkxBR0dFRF9CSVQpKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCmluZGV4IDY0MTAxMzMuLmE2YjZmY2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKQEAgLTE0OSwxMyArMTQ5LDEzIEBACiAJdW5zaWduZWQgdXNlZCA9IDA7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbzsKIAlpbnQgZ3JhcGggPSAwOworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAJdW5zaWduZWQgbG9uZyBicDsKIAogCWlmICghdGFzaykKIAkJdGFzayA9IGN1cnJlbnQ7CiAKIAlpZiAoIXN0YWNrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAJCXN0YWNrID0gJmR1bW15OwogCQlpZiAodGFzayAmJiB0YXNrICE9IGN1cnJlbnQpCiAJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopdGFzay0+dGhyZWFkLnNwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrcy5jCmluZGV4IDc2YjhjZDkuLjllZmJkY2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzLmMKQEAgLTE0MywxNSArMTQzLDEwIEBACiAKIHN0YXRpYyB1MzIgX19pbml0IGF0aV9zYngwMF9yZXYoaW50IG51bSwgaW50IHNsb3QsIGludCBmdW5jKQogewotCXUzMiBvbGQsIGQ7CisJdTMyIGQ7CiAKLQlkID0gcmVhZF9wY2lfY29uZmlnKG51bSwgc2xvdCwgZnVuYywgMHg3MCk7Ci0Jb2xkID0gZDsKLQlkICY9IH4oMTw8OCk7Ci0Jd3JpdGVfcGNpX2NvbmZpZyhudW0sIHNsb3QsIGZ1bmMsIDB4NzAsIGQpOwogCWQgPSByZWFkX3BjaV9jb25maWcobnVtLCBzbG90LCBmdW5jLCAweDgpOwogCWQgJj0gMHhmZjsKLQl3cml0ZV9wY2lfY29uZmlnKG51bSwgc2xvdCwgZnVuYywgMHg3MCwgb2xkKTsKIAogCXJldHVybiBkOwogfQpAQCAtMTYwLDExICsxNTUsMTQgQEAKIHsKIAl1MzIgZCwgcmV2OwogCi0JaWYgKGFjcGlfdXNlX3RpbWVyX292ZXJyaWRlKQorCXJldiA9IGF0aV9zYngwMF9yZXYobnVtLCBzbG90LCBmdW5jKTsKKwlpZiAocmV2ID49IDB4NDApCisJCWFjcGlfZml4X3BpbjJfcG9sYXJpdHkgPSAxOworCisJaWYgKHJldiA+IDB4MTMpCiAJCXJldHVybjsKIAotCXJldiA9IGF0aV9zYngwMF9yZXYobnVtLCBzbG90LCBmdW5jKTsKLQlpZiAocmV2ID4gMHgxMykKKwlpZiAoYWNwaV91c2VfdGltZXJfb3ZlcnJpZGUpCiAJCXJldHVybjsKIAogCS8qIGNoZWNrIGZvciBJUlEwIGludGVycnVwdCBzd2FwICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwppbmRleCBmYzI5M2RjLi43NjdkNmM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKQEAgLTg1LDYgKzg1LDggQEAKICAqLwogX19IRUFECiBFTlRSWShzdGFydHVwXzMyKQorCW1vdmwgcGEoc3RhY2tfc3RhcnQpLCVlY3gKKwkKIAkvKiB0ZXN0IEtFRVBfU0VHTUVOVFMgZmxhZyB0byBzZWUgaWYgdGhlIGJvb3Rsb2FkZXIgaXMgYXNraW5nCiAJCXVzIHRvIG5vdCByZWxvYWQgc2VnbWVudHMgKi8KIAl0ZXN0YiAkKDE8PDYpLCBCUF9sb2FkZmxhZ3MoJWVzaSkKQEAgLTk5LDcgKzEwMSw5IEBACiAJbW92bCAlZWF4LCVlcwogCW1vdmwgJWVheCwlZnMKIAltb3ZsICVlYXgsJWdzCisJbW92bCAlZWF4LCVzcwogMjoKKwlsZWFsIC1fX1BBR0VfT0ZGU0VUKCVlY3gpLCVlc3AKIAogLyoKICAqIENsZWFyIEJTUyBmaXJzdCBzbyB0aGF0IHRoZXJlIGFyZSBubyBzdXJwcmlzZXMuLi4KQEAgLTE0NSw4ICsxNDksNiBAQAogICogX2Jya19lbmQgaXMgc2V0IHVwIHRvIHBvaW50IHRvIHRoZSBmaXJzdCAic2FmZSIgbG9jYXRpb24uCiAgKiBNYXBwaW5ncyBhcmUgY3JlYXRlZCBib3RoIGF0IHZpcnR1YWwgYWRkcmVzcyAwIChpZGVudGl0eSBtYXBwaW5nKQogICogYW5kIFBBR0VfT0ZGU0VUIGZvciB1cCB0byBfZW5kLgotICoKLSAqIE5vdGUgdGhhdCB0aGUgc3RhY2sgaXMgbm90IHlldCBzZXQgdXAhCiAgKi8KICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCkBAIC0yODIsNiArMjg0LDkgQEAKIAltb3ZsICVlYXgsJWVzCiAJbW92bCAlZWF4LCVmcwogCW1vdmwgJWVheCwlZ3MKKwltb3ZsIHBhKHN0YWNrX3N0YXJ0KSwlZWN4CisJbW92bCAlZWF4LCVzcworCWxlYWwgLV9fUEFHRV9PRkZTRVQoJWVjeCksJWVzcAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIGRlZmF1bHRfZW50cnk6CiAKQEAgLTM0Nyw4ICszNTIsOCBAQAogCW1vdmwgJWVheCwlY3IwCQkvKiAuLmFuZCBzZXQgcGFnaW5nIChQRykgYml0ICovCiAJbGptcCAkX19CT09UX0NTLCQxZgkvKiBDbGVhciBwcmVmZXRjaCBhbmQgbm9ybWFsaXplICVlaXAgKi8KIDE6Ci0JLyogU2V0IHVwIHRoZSBzdGFjayBwb2ludGVyICovCi0JbHNzIHN0YWNrX3N0YXJ0LCVlc3AKKwkvKiBTaGlmdCB0aGUgc3RhY2sgcG9pbnRlciB0byBhIHZpcnR1YWwgYWRkcmVzcyAqLworCWFkZGwgJF9fUEFHRV9PRkZTRVQsICVlc3AKIAogLyoKICAqIEluaXRpYWxpemUgZWZsYWdzLiAgU29tZSBCSU9TJ3MgbGVhdmUgYml0cyBsaWtlIE5UIHNldC4gIFRoaXMgd291bGQKQEAgLTM2MCw5ICszNjUsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCWNtcGIgJDAsIHJlYWR5Ci0JanogIDFmCQkJCS8qIEluaXRpYWwgQ1BVIGNsZWFucyBCU1MgKi8KLQlqbXAgY2hlY2tDUFV0eXBlCi0xOgorCWpueiBjaGVja0NQVXR5cGUKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIC8qCkBAIC00NzAsMTQgKzQ3Myw3IEBACiAKIAljbGQJCQkjIGdjYzIgd2FudHMgdGhlIGRpcmVjdGlvbiBmbGFnIGNsZWFyZWQgYXQgYWxsIHRpbWVzCiAJcHVzaGwgJDAJCSMgZmFrZSByZXR1cm4gYWRkcmVzcyBmb3IgdW53aW5kZXIKLSNpZmRlZiBDT05GSUdfU01QCi0JbW92YiByZWFkeSwgJWNsCiAJbW92YiAkMSwgcmVhZHkKLQljbXBiICQwLCVjbAkJIyB0aGUgZmlyc3QgQ1BVIGNhbGxzIHN0YXJ0X2tlcm5lbAotCWplICAgMWYKLQltb3ZsIChzdGFja19zdGFydCksICVlc3AKLTE6Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCWptcCAqKGluaXRpYWxfY29kZSkKIAogLyoKQEAgLTY3MCwxNSArNjY2LDE1IEBACiAjZW5kaWYKIAogLmRhdGEKKy5iYWxpZ24gNAogRU5UUlkoc3RhY2tfc3RhcnQpCiAJLmxvbmcgaW5pdF90aHJlYWRfdW5pb24rVEhSRUFEX1NJWkUKLQkubG9uZyBfX0JPT1RfRFMKLQotcmVhZHk6CS5ieXRlIDAKIAogZWFybHlfcmVjdXJzaW9uX2ZsYWc6CiAJLmxvbmcgMAogCityZWFkeToJLmJ5dGUgMAorCiBpbnRfbXNnOgogCS5hc2NpeiAiVW5rbm93biBpbnRlcnJ1cHQgb3IgZmF1bHQgYXQ6ICVwICVwICVwXG4iCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCA1Mjk0NWRhLi4zODdiNmEwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC0zNjcsNyArMzY3LDggQEAKIAkJaWYgKGlyciAgJiAoMSA8PCAodmVjdG9yICUgMzIpKSkgewogCQkJaXJxID0gX190aGlzX2NwdV9yZWFkKHZlY3Rvcl9pcnFbdmVjdG9yXSk7CiAKLQkJCWRhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKGlycSk7CisJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJCWRhdGEgPSAmZGVzYy0+aXJxX2RhdGE7CiAJCQlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAkJCWlmIChkYXRhLT5jaGlwLT5pcnFfcmV0cmlnZ2VyKQogCQkJCWRhdGEtPmNoaXAtPmlycV9yZXRyaWdnZXIoZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCBkODI4NmVkLi5mZjQ1NTQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3Bvd2VyLmg+CiAjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KQEAgLTkxLDIxICs5MiwzMSBAQAogCiB2b2lkIHNob3dfcmVnc19jb21tb24odm9pZCkKIHsKLQljb25zdCBjaGFyICpib2FyZCwgKnByb2R1Y3Q7CisJY29uc3QgY2hhciAqdmVuZG9yLCAqcHJvZHVjdCwgKmJvYXJkOwogCi0JYm9hcmQgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9OQU1FKTsKLQlpZiAoIWJvYXJkKQotCQlib2FyZCA9ICIiOworCXZlbmRvciA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1NZU19WRU5ET1IpOworCWlmICghdmVuZG9yKQorCQl2ZW5kb3IgPSAiIjsKIAlwcm9kdWN0ID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9OQU1FKTsKIAlpZiAoIXByb2R1Y3QpCiAJCXByb2R1Y3QgPSAiIjsKIAorCS8qIEJvYXJkIE5hbWUgaXMgb3B0aW9uYWwgKi8KKwlib2FyZCA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JPQVJEX05BTUUpOworCiAJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQlwcmludGsoS0VSTl9ERUZBVUxUICJQaWQ6ICVkLCBjb21tOiAlLjIwcyAlcyAlcyAlLipzICVzLyVzXG4iLAorCXByaW50ayhLRVJOX0RFRkFVTFQgIlBpZDogJWQsIGNvbW06ICUuMjBzICVzICVzICUuKnMiLAogCQljdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIHByaW50X3RhaW50ZWQoKSwKIAkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCiAJCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKLQkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24sIGJvYXJkLCBwcm9kdWN0KTsKKwkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24pOworCXByaW50ayhLRVJOX0NPTlQgIiAiKTsKKwlwcmludGsoS0VSTl9DT05UICIlcyAlcyIsIHZlbmRvciwgcHJvZHVjdCk7CisJaWYgKGJvYXJkKSB7CisJCXByaW50ayhLRVJOX0NPTlQgIi8iKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCBib2FyZCk7CisJfQorCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiB9CiAKIHZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpCkBAIC01MDUsNyArNTE2LDcgQEAKICNkZWZpbmUgTVdBSVRfRUNYX0VYVEVOREVEX0lORk8JCTB4MDEKICNkZWZpbmUgTVdBSVRfRURYX0MxCQkJMHhmMAogCi1zdGF0aWMgaW50IF9fY3B1aW5pdCBtd2FpdF91c2FibGUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKQoraW50IG13YWl0X3VzYWJsZShjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJdTMyIGVheCwgZWJ4LCBlY3gsIGVkeDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCmluZGV4IGZjN2FhZTEuLjcxNTAzN2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKQEAgLTI4NSw2ICsyODUsMTQgQEAKIAkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlA0UzgwMCIpLAogCQl9LAogCX0sCisJewkvKiBIYW5kbGUgcHJvYmxlbXMgd2l0aCByZWJvb3Rpbmcgb24gVmVyc2FMb2dpYyBNZW5sb3cgYm9hcmRzICovCisJCS5jYWxsYmFjayA9IHNldF9iaW9zX3JlYm9vdCwKKwkJLmlkZW50ID0gIlZlcnNhTG9naWMgTWVubG93IGJhc2VkIGJvYXJkIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIlZlcnNhTG9naWMgQ29ycG9yYXRpb24iKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlZlcnNhTG9naWMgTWVubG93IGJvYXJkIiksCisJCX0sCisJfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDc2M2RmNzcuLjA4Nzc2YTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtNjM4LDcgKzYzOCw3IEBACiAJICogdGFyZ2V0IHByb2Nlc3NvciBzdGF0ZS4KIAkgKi8KIAlzdGFydHVwX2lwaV9ob29rKHBoeXNfYXBpY2lkLCAodW5zaWduZWQgbG9uZykgc3RhcnRfc2Vjb25kYXJ5LAotCQkJICh1bnNpZ25lZCBsb25nKXN0YWNrX3N0YXJ0LnNwKTsKKwkJCSBzdGFja19zdGFydCk7CiAKIAkvKgogCSAqIFJ1biBTVEFSVFVQIElQSSBsb29wLgpAQCAtNzg1LDcgKzc4NSw3IEBACiAjZW5kaWYKIAllYXJseV9nZHRfZGVzY3IuYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7CiAJaW5pdGlhbF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpc3RhcnRfc2Vjb25kYXJ5OwotCXN0YWNrX3N0YXJ0LnNwID0gKHZvaWQgKikgY19pZGxlLmlkbGUtPnRocmVhZC5zcDsKKwlzdGFja19zdGFydCAgPSBjX2lkbGUuaWRsZS0+dGhyZWFkLnNwOwogCiAJLyogc3RhcnRfaXAgaGFkIGJldHRlciBiZSBwYWdlLWFsaWduZWQhICovCiAJc3RhcnRfaXAgPSBzZXR1cF90cmFtcG9saW5lKCk7CkBAIC0xMDYwLDcgKzEwNjAsNyBAQAogCiAJCWNvbm5lY3RfYnNwX0FQSUMoKTsKIAkJc2V0dXBfbG9jYWxfQVBJQygpOwotCQllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOworCQlic3BfZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTEzNyw3ICsxMTM3LDcgQEAKIAlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCiAJCWVuYWJsZV9JT19BUElDKCk7CiAKLQllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOworCWJzcF9lbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwogCiAJbWFwX2NwdV90b19sb2dpY2FsX2FwaWNpZCgpOwogCkBAIC0xNDAyLDggKzE0MDIsOSBAQAogCXVuc2lnbmVkIGludCBoaWdoZXN0X3N1YmNzdGF0ZSA9IDA7CiAJaW50IGk7CiAJdm9pZCAqbXdhaXRfcHRyOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbyk7CiAKLQlpZiAoIWNwdV9oYXMoX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKSwgWDg2X0ZFQVRVUkVfTVdBSVQpKQorCWlmICghKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfTVdBSVQpICYmIG13YWl0X3VzYWJsZShjKSkpCiAJCXJldHVybjsKIAlpZiAoIWNwdV9oYXMoX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKSwgWDg2X0ZFQVRVUkVfQ0xGTFNIKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS5jCmluZGV4IDI1YmQxYmMuLjYzZmVjMTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTExNTAsOCArMTE1MCw4IEBACiAJa3ZtX2xvYWRfbGR0KHN2bS0+aG9zdC5sZHQpOwogI2lmZGVmIENPTkZJR19YODZfNjQKIAlsb2Fkc2VnbWVudChmcywgc3ZtLT5ob3N0LmZzKTsKLQlsb2FkX2dzX2luZGV4KHN2bS0+aG9zdC5ncyk7CiAJd3Jtc3JsKE1TUl9LRVJORUxfR1NfQkFTRSwgY3VycmVudC0+dGhyZWFkLmdzKTsKKwlsb2FkX2dzX2luZGV4KHN2bS0+aG9zdC5ncyk7CiAjZWxzZQogCWxvYWRzZWdtZW50KGdzLCBzdm0tPmhvc3QuZ3MpOwogI2VuZGlmCkBAIC0yNzc3LDYgKzI3NzcsOCBAQAogCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIHJlZywgdmFsKTsKIAl9CiAKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOworCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IDhiODMwY2EuLmQzNDNiM2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwpAQCAtMjU2LDcgKzI1Niw2IEBACiAJCQkJICAgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJcGdwcm90X3QgZm9yYmlkZGVuID0gX19wZ3Byb3QoMCk7Ci0JcGdwcm90X3QgcmVxdWlyZWQgPSBfX3BncHJvdCgwKTsKIAogCS8qCiAJICogVGhlIEJJT1MgYXJlYSBiZXR3ZWVuIDY0MGsgYW5kIDFNYiBuZWVkcyB0byBiZSBleGVjdXRhYmxlIGZvcgpAQCAtMjgyLDEyICsyODEsNiBAQAogCWlmICh3aXRoaW4ocGZuLCBfX3BhKCh1bnNpZ25lZCBsb25nKV9fc3RhcnRfcm9kYXRhKSA+PiBQQUdFX1NISUZULAogCQkgICBfX3BhKCh1bnNpZ25lZCBsb25nKV9fZW5kX3JvZGF0YSkgPj4gUEFHRV9TSElGVCkpCiAJCXBncHJvdF92YWwoZm9yYmlkZGVuKSB8PSBfUEFHRV9SVzsKLQkvKgotCSAqIC5kYXRhIGFuZCAuYnNzIHNob3VsZCBhbHdheXMgYmUgd3JpdGFibGUuCi0JICovCi0JaWYgKHdpdGhpbihhZGRyZXNzLCAodW5zaWduZWQgbG9uZylfc2RhdGEsICh1bnNpZ25lZCBsb25nKV9lZGF0YSkgfHwKLQkgICAgd2l0aGluKGFkZHJlc3MsICh1bnNpZ25lZCBsb25nKV9fYnNzX3N0YXJ0LCAodW5zaWduZWQgbG9uZylfX2Jzc19zdG9wKSkKLQkJcGdwcm90X3ZhbChyZXF1aXJlZCkgfD0gX1BBR0VfUlc7CiAKICNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX1JPREFUQSkKIAkvKgpAQCAtMzI3LDcgKzMyMCw2IEBACiAjZW5kaWYKIAogCXByb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpICYgfnBncHJvdF92YWwoZm9yYmlkZGVuKSk7Ci0JcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBwZ3Byb3RfdmFsKHJlcXVpcmVkKSk7CiAKIAlyZXR1cm4gcHJvdDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jIGIvYXJjaC94ODYvcGxhdGZvcm0vb2xwYy9vbHBjX2R0LmMKaW5kZXggZGFiODc0Ni4uMDQ0YmRhNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vb2xwYy9vbHBjX2R0LmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vb2xwYy9vbHBjX2R0LmMKQEAgLTE0MCw4ICsxNDAsNyBAQAogCQkgKiB3YXN0ZWQgYm9vdG1lbSkgYW5kIGhhbmQgb2ZmIGNodW5rcyBvZiBpdCB0byBjYWxsZXJzLgogCQkgKi8KIAkJcmVzID0gYWxsb2NfYm9vdG1lbShjaHVua19zaXplKTsKLQkJaWYgKCFyZXMpCi0JCQlyZXR1cm4gTlVMTDsKKwkJQlVHX09OKCFyZXMpOwogCQlwcm9tX2Vhcmx5X2FsbG9jYXRlZCArPSBjaHVua19zaXplOwogCQltZW1zZXQocmVzLCAwLCBjaHVua19zaXplKTsKIAkJZnJlZV9tZW0gPSBjaHVua19zaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3AybS5jIGIvYXJjaC94ODYveGVuL3AybS5jCmluZGV4IGRkYzgxYTAuLmZkMTJkN2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9wMm0uYworKysgYi9hcmNoL3g4Ni94ZW4vcDJtLmMKQEAgLTI0MSwyMSArMjQxLDE1IEBACiAJCSAqIEFzIGxvbmcgYXMgdGhlIG1mbl9saXN0IGhhcyBlbm91Z2ggZW50cmllcyB0byBjb21wbGV0ZWx5CiAJCSAqIGZpbGwgYSBwMm0gcGFnZSwgcG9pbnRpbmcgaW50byB0aGUgYXJyYXkgaXMgb2suIEJ1dCBpZgogCQkgKiBub3QgdGhlIGVudHJpZXMgYmV5b25kIHRoZSBsYXN0IHBmbiB3aWxsIGJlIHVuZGVmaW5lZC4KLQkJICogQW5kIGd1ZXNzaW5nIHRoYXQgdGhlICd3aGF0LWV2ZXItdGhlcmUtaXMnIGRvZXMgbm90IHRha2UgaXQKLQkJICogdG9vIGtpbmRseSB3aGVuIGNoYW5naW5nIGl0IHRvIGludmFsaWQgbWFya2VycywgYSBuZXcgcGFnZQotCQkgKiBpcyBhbGxvY2F0ZWQsIGluaXRpYWxpemVkIGFuZCBmaWxsZWQgd2l0aCB0aGUgdmFsaWQgcGFydC4KIAkJICovCiAJCWlmICh1bmxpa2VseShwZm4gKyBQMk1fUEVSX1BBR0UgPiBtYXhfcGZuKSkgewogCQkJdW5zaWduZWQgbG9uZyBwMm1pZHg7Ci0JCQl1bnNpZ25lZCBsb25nICpwMm0gPSBleHRlbmRfYnJrKFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKLQkJCXAybV9pbml0KHAybSk7CiAKLQkJCWZvciAocDJtaWR4ID0gMDsgcGZuICsgcDJtaWR4IDwgbWF4X3BmbjsgcDJtaWR4KyspIHsKLQkJCQlwMm1bcDJtaWR4XSA9IG1mbl9saXN0W3BmbiArIHAybWlkeF07Ci0JCQl9Ci0JCQlwMm1fdG9wW3RvcGlkeF1bbWlkaWR4XSA9IHAybTsKLQkJfSBlbHNlCi0JCQlwMm1fdG9wW3RvcGlkeF1bbWlkaWR4XSA9ICZtZm5fbGlzdFtwZm5dOworCQkJcDJtaWR4ID0gbWF4X3BmbiAlIFAyTV9QRVJfUEFHRTsKKwkJCWZvciAoIDsgcDJtaWR4IDwgUDJNX1BFUl9QQUdFOyBwMm1pZHgrKykKKwkJCQltZm5fbGlzdFtwZm4gKyBwMm1pZHhdID0gSU5WQUxJRF9QMk1fRU5UUlk7CisJCX0KKwkJcDJtX3RvcFt0b3BpZHhdW21pZGlkeF0gPSAmbWZuX2xpc3RbcGZuXTsKIAl9CiAKIAltMnBfb3ZlcnJpZGVfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NldHVwLmMgYi9hcmNoL3g4Ni94ZW4vc2V0dXAuYwppbmRleCBiNWE3ZjkyLi5hOGE2NmE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc2V0dXAuYworKysgYi9hcmNoL3g4Ni94ZW4vc2V0dXAuYwpAQCAtMTc5LDggKzE3OSwxMyBAQAogCWU4MjAubnJfbWFwID0gMDsKIAl4ZW5fZXh0cmFfbWVtX3N0YXJ0ID0gbWVtX2VuZDsKIAlmb3IgKGkgPSAwOyBpIDwgbWVtbWFwLm5yX2VudHJpZXM7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGxvbmcgZW5kID0gbWFwW2ldLmFkZHIgKyBtYXBbaV0uc2l6ZTsKKwkJdW5zaWduZWQgbG9uZyBsb25nIGVuZDsKIAorCQkvKiBHdWFyZCBhZ2FpbnN0IG5vbi1wYWdlIGFsaWduZWQgRTgyMCBlbnRyaWVzLiAqLworCQlpZiAobWFwW2ldLnR5cGUgPT0gRTgyMF9SQU0pCisJCQltYXBbaV0uc2l6ZSAtPSAobWFwW2ldLnNpemUgKyBtYXBbaV0uYWRkcikgJSBQQUdFX1NJWkU7CisKKwkJZW5kID0gbWFwW2ldLmFkZHIgKyBtYXBbaV0uc2l6ZTsKIAkJaWYgKG1hcFtpXS50eXBlID09IEU4MjBfUkFNICYmIGVuZCA+IG1lbV9lbmQpIHsKIAkJCS8qIFJBTSBvZmYgdGhlIGVuZCAtIG1heSBiZSBwYXJ0aWFsbHkgaW5jbHVkZWQgKi8KIAkJCXU2NCBkZWx0YSA9IG1pbihtYXBbaV0uc2l6ZSwgZW5kIC0gbWVtX2VuZCk7CkBAIC0zNTAsNiArMzU1LDcgQEAKIAlib290X2NwdV9kYXRhLmhsdF93b3Jrc19vayA9IDE7CiAjZW5kaWYKIAlwbV9pZGxlID0gZGVmYXVsdF9pZGxlOworCWJvb3Rfb3B0aW9uX2lkbGVfb3ZlcnJpZGUgPSBJRExFX0hBTFQ7CiAKIAlmaWRkbGVfdmRzbygpOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggMmY0MDAyZi4uNTE4ZGQ0MiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC0zNTIsNyArMzUyLDcgQEAKIAlXQVJOX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCiAJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX1NUT1BQRUQsIHEpOwotCV9fYmxrX3J1bl9xdWV1ZShxKTsKKwlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOwogfQogRVhQT1JUX1NZTUJPTChibGtfc3RhcnRfcXVldWUpOwogCkBAIC00MDMsMTMgKzQwMywxNCBAQAogLyoqCiAgKiBfX2Jsa19ydW5fcXVldWUgLSBydW4gYSBzaW5nbGUgZGV2aWNlIHF1ZXVlCiAgKiBAcToJVGhlIHF1ZXVlIHRvIHJ1bgorICogQGZvcmNlX2tibG9ja2Q6IERvbid0IHJ1biBAcS0+cmVxdWVzdF9mbiBkaXJlY3RseS4gIFVzZSBrYmxvY2tkLgogICoKICAqIERlc2NyaXB0aW9uOgogICogICAgU2VlIEBibGtfcnVuX3F1ZXVlLiBUaGlzIHZhcmlhbnQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgcXVldWUgbG9jawogICogICAgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC4KICAqCiAgKi8KLXZvaWQgX19ibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQordm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJvb2wgZm9yY2Vfa2Jsb2NrZCkKIHsKIAlibGtfcmVtb3ZlX3BsdWcocSk7CiAKQEAgLTQyMyw3ICs0MjQsNyBAQAogCSAqIE9ubHkgcmVjdXJzZSBvbmNlIHRvIGF2b2lkIG92ZXJydW5uaW5nIHRoZSBzdGFjaywgbGV0IHRoZSB1bnBsdWcKIAkgKiBoYW5kbGluZyByZWludm9rZSB0aGUgaGFuZGxlciBzaG9ydGx5IGlmIHdlIGFscmVhZHkgZ290IHRoZXJlLgogCSAqLwotCWlmICghcXVldWVfZmxhZ190ZXN0X2FuZF9zZXQoUVVFVUVfRkxBR19SRUVOVEVSLCBxKSkgeworCWlmICghZm9yY2Vfa2Jsb2NrZCAmJiAhcXVldWVfZmxhZ190ZXN0X2FuZF9zZXQoUVVFVUVfRkxBR19SRUVOVEVSLCBxKSkgewogCQlxLT5yZXF1ZXN0X2ZuKHEpOwogCQlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfUkVFTlRFUiwgcSk7CiAJfSBlbHNlIHsKQEAgLTQ0Niw3ICs0NDcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JX19ibGtfcnVuX3F1ZXVlKHEpOworCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19ydW5fcXVldWUpOwpAQCAtMTA1Myw3ICsxMDU0LDcgQEAKIAogCWRyaXZlX3N0YXRfYWNjdChycSwgMSk7CiAJX19lbHZfYWRkX3JlcXVlc3QocSwgcnEsIHdoZXJlLCAwKTsKLQlfX2Jsa19ydW5fcXVldWUocSk7CisJX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX2luc2VydF9yZXF1ZXN0KTsKQEAgLTI2MTAsMTMgKzI2MTEsNiBAQAogfQogRVhQT1JUX1NZTUJPTChrYmxvY2tkX3NjaGVkdWxlX3dvcmspOwogCi1pbnQga2Jsb2NrZF9zY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yaywgdW5zaWduZWQgbG9uZyBkZWxheSkKLXsKLQlyZXR1cm4gcXVldWVfZGVsYXllZF93b3JrKGtibG9ja2Rfd29ya3F1ZXVlLCBkd29yaywgZGVsYXkpOwotfQotRVhQT1JUX1NZTUJPTChrYmxvY2tkX3NjaGVkdWxlX2RlbGF5ZWRfd29yayk7Ci0KIGludCBfX2luaXQgYmxrX2Rldl9pbml0KHZvaWQpCiB7CiAJQlVJTERfQlVHX09OKF9fUkVRX05SX0JJVFMgPiA4ICoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1mbHVzaC5jIGIvYmxvY2svYmxrLWZsdXNoLmMKaW5kZXggNTRiMTIzZC4uYjI3ZDAyMCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWZsdXNoLmMKKysrIGIvYmxvY2svYmxrLWZsdXNoLmMKQEAgLTY2LDEwICs2NiwxMiBAQAogCiAJLyoKIAkgKiBNb3ZpbmcgYSByZXF1ZXN0IHNpbGVudGx5IHRvIGVtcHR5IHF1ZXVlX2hlYWQgbWF5IHN0YWxsIHRoZQotCSAqIHF1ZXVlLiAgS2ljayB0aGUgcXVldWUgaW4gdGhvc2UgY2FzZXMuCisJICogcXVldWUuICBLaWNrIHRoZSBxdWV1ZSBpbiB0aG9zZSBjYXNlcy4gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkCisJICogZnJvbSByZXF1ZXN0IGNvbXBsZXRpb24gcGF0aCBhbmQgY2FsbGluZyBkaXJlY3RseSBpbnRvCisJICogcmVxdWVzdF9mbiBtYXkgY29uZnVzZSB0aGUgZHJpdmVyLiAgQWx3YXlzIHVzZSBrYmxvY2tkLgogCSAqLwogCWlmICh3YXNfZW1wdHkgJiYgbmV4dF9ycSkKLQkJX19ibGtfcnVuX3F1ZXVlKHEpOworCQlfX2Jsa19ydW5fcXVldWUocSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHByZV9mbHVzaF9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IpCkBAIC0xMzAsNyArMTMyLDcgQEAKIAkJQlVHKCk7CiAJfQogCi0JZWx2X2luc2VydChxLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05UKTsKKwllbHZfaW5zZXJ0KHEsIHJxLCBFTEVWQVRPUl9JTlNFUlRfUkVRVUVVRSk7CiAJcmV0dXJuIHJxOwogfQogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstbGliLmMgYi9ibG9jay9ibGstbGliLmMKaW5kZXggMWEzMjBkMi4uZWVjNzhiZSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWxpYi5jCisrKyBiL2Jsb2NrL2Jsay1saWIuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiB9CiAKIC8qKgotICogYmxrZGV2X2lzc3VlX3plcm9vdXQgZ2VuZXJhdGUgbnVtYmVyIG9mIHplcm8gZmlsZWQgd3JpdGUgYmlvcworICogYmxrZGV2X2lzc3VlX3plcm9vdXQgLSBnZW5lcmF0ZSBudW1iZXIgb2YgemVybyBmaWxlZCB3cml0ZSBiaW9zCiAgKiBAYmRldjoJYmxvY2tkZXYgdG8gaXNzdWUKICAqIEBzZWN0b3I6CXN0YXJ0IHNlY3RvcgogICogQG5yX3NlY3RzOgludW1iZXIgb2Ygc2VjdG9ycyB0byB3cml0ZQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXRocm90dGxlLmMgYi9ibG9jay9ibGstdGhyb3R0bGUuYwppbmRleCAzODFiMDliLi5lMzZjYzEwIDEwMDY0NAotLS0gYS9ibG9jay9ibGstdGhyb3R0bGUuYworKysgYi9ibG9jay9ibGstdGhyb3R0bGUuYwpAQCAtMjAsNiArMjAsMTEgQEAKIC8qIFRocm90dGxpbmcgaXMgcGVyZm9ybWVkIG92ZXIgMTAwbXMgc2xpY2UgYW5kIGFmdGVyIHRoYXQgc2xpY2UgaXMgcmVuZXdlZCAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGhyb3RsX3NsaWNlID0gSFovMTA7CS8qIDEwMCBtcyAqLwogCisvKiBBIHdvcmtxdWV1ZSB0byBxdWV1ZSB0aHJvdHRsZSByZWxhdGVkIHdvcmsgKi8KK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa3Rocm90bGRfd29ya3F1ZXVlOworc3RhdGljIHZvaWQgdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayhzdHJ1Y3QgdGhyb3RsX2RhdGEgKnRkLAorCQkJCXVuc2lnbmVkIGxvbmcgZGVsYXkpOworCiBzdHJ1Y3QgdGhyb3RsX3JiX3Jvb3QgewogCXN0cnVjdCByYl9yb290IHJiOwogCXN0cnVjdCByYl9ub2RlICpsZWZ0OwpAQCAtMTY4LDcgKzE3MywxNSBAQAogCSAqIHRyZWUgb2YgYmxrZyAoaW5zdGVhZCBvZiB0cmF2ZXJzaW5nIHRocm91Z2ggaGFzaCBsaXN0IGFsbAogCSAqIHRoZSB0aW1lLgogCSAqLwotCXRnID0gdGdfb2ZfYmxrZyhibGtpb2NnX2xvb2t1cF9ncm91cChibGtjZywga2V5KSk7CisKKwkvKgorCSAqIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlIHdoZW4gdGhlcmUgYXJlIG5vIGJsa2lvIGNncm91cHMuCisgCSAqIEF2b2lkIGxvb2t1cCBpbiB0aGlzIGNhc2UKKyAJICovCisJaWYgKGJsa2NnID09ICZibGtpb19yb290X2Nncm91cCkKKwkJdGcgPSAmdGQtPnJvb3RfdGc7CisJZWxzZQorCQl0ZyA9IHRnX29mX2Jsa2coYmxraW9jZ19sb29rdXBfZ3JvdXAoYmxrY2csIGtleSkpOwogCiAJLyogRmlsbCBpbiBkZXZpY2UgZGV0YWlscyBmb3Igcm9vdCBncm91cCAqLwogCWlmICh0ZyAmJiAhdGctPmJsa2cuZGV2ICYmIGJkaS0+ZGV2ICYmIGRldl9uYW1lKGJkaS0+ZGV2KSkgewpAQCAtMzM3LDEwICszNTAsOSBAQAogCXVwZGF0ZV9taW5fZGlzcGF0Y2hfdGltZShzdCk7CiAKIAlpZiAodGltZV9iZWZvcmVfZXEoc3QtPm1pbl9kaXNwdGltZSwgamlmZmllcykpCi0JCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQtPnF1ZXVlLCAwKTsKKwkJdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayh0ZCwgMCk7CiAJZWxzZQotCQl0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHRkLT5xdWV1ZSwKLQkJCQkoc3QtPm1pbl9kaXNwdGltZSAtIGppZmZpZXMpKTsKKwkJdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayh0ZCwgKHN0LT5taW5fZGlzcHRpbWUgLSBqaWZmaWVzKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtODA3LDEwICs4MTksMTAgQEAKIH0KIAogLyogQ2FsbCB3aXRoIHF1ZXVlIGxvY2sgaGVsZCAqLwotdm9pZCB0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBsb25nIGRlbGF5KQorc3RhdGljIHZvaWQKK3Rocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IHRocm90bF9kYXRhICp0ZCwgdW5zaWduZWQgbG9uZyBkZWxheSkKIHsKIAotCXN0cnVjdCB0aHJvdGxfZGF0YSAqdGQgPSBxLT50ZDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9ICZ0ZC0+dGhyb3RsX3dvcms7CiAKIAlpZiAodG90YWxfbnJfcXVldWVkKHRkKSA+IDApIHsKQEAgLTgxOSwxMiArODMxLDExIEBACiAJCSAqIENhbmNlbCB0aGF0IGFuZCBzY2hlZHVsZSBhIG5ldyBvbmUuCiAJCSAqLwogCQlfX2NhbmNlbF9kZWxheWVkX3dvcmsoZHdvcmspOwotCQlrYmxvY2tkX3NjaGVkdWxlX2RlbGF5ZWRfd29yayhxLCBkd29yaywgZGVsYXkpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsoa3Rocm90bGRfd29ya3F1ZXVlLCBkd29yaywgZGVsYXkpOwogCQl0aHJvdGxfbG9nKHRkLCAic2NoZWR1bGUgd29yay4gZGVsYXk9JWx1IGppZmZpZXM9JWx1IiwKIAkJCQlkZWxheSwgamlmZmllcyk7CiAJfQogfQotRVhQT1JUX1NZTUJPTCh0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKTsKIAogc3RhdGljIHZvaWQKIHRocm90bF9kZXN0cm95X3RnKHN0cnVjdCB0aHJvdGxfZGF0YSAqdGQsIHN0cnVjdCB0aHJvdGxfZ3JwICp0ZykKQEAgLTkxMiw3ICs5MjMsNyBAQAogCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwogCiAJLyogU2NoZWR1bGUgYSB3b3JrIG5vdyB0byBwcm9jZXNzIHRoZSBsaW1pdCBjaGFuZ2UgKi8KLQl0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHRkLT5xdWV1ZSwgMCk7CisJdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayh0ZCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRocm90bF91cGRhdGVfYmxraW9fZ3JvdXBfd3JpdGVfYnBzKHZvaWQgKmtleSwKQEAgLTkyNiw3ICs5MzcsNyBAQAogCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKIAlhdG9taWNfaW5jKCZ0ZC0+bGltaXRzX2NoYW5nZWQpOwogCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwotCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQtPnF1ZXVlLCAwKTsKKwl0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHRkLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgdGhyb3RsX3VwZGF0ZV9ibGtpb19ncm91cF9yZWFkX2lvcHModm9pZCAqa2V5LApAQCAtOTQwLDcgKzk1MSw3IEBACiAJc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpOwogCWF0b21pY19pbmMoJnRkLT5saW1pdHNfY2hhbmdlZCk7CiAJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7Ci0JdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayh0ZC0+cXVldWUsIDApOworCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQsIDApOwogfQogCiBzdGF0aWMgdm9pZCB0aHJvdGxfdXBkYXRlX2Jsa2lvX2dyb3VwX3dyaXRlX2lvcHModm9pZCAqa2V5LApAQCAtOTU0LDcgKzk2NSw3IEBACiAJc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpOwogCWF0b21pY19pbmMoJnRkLT5saW1pdHNfY2hhbmdlZCk7CiAJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7Ci0JdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayh0ZC0+cXVldWUsIDApOworCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQsIDApOwogfQogCiB2b2lkIHRocm90bF9zaHV0ZG93bl90aW1lcl93cShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKQEAgLTExMjcsNiArMTEzOCwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB0aHJvdGxfaW5pdCh2b2lkKQogeworCWt0aHJvdGxkX3dvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgia3Rocm90bGQiLCBXUV9NRU1fUkVDTEFJTSwgMCk7CisJaWYgKCFrdGhyb3RsZF93b3JrcXVldWUpCisJCXBhbmljKCJGYWlsZWQgdG8gY3JlYXRlIGt0aHJvdGxkXG4iKTsKKwogCWJsa2lvX3BvbGljeV9yZWdpc3RlcigmYmxraW9fcG9saWN5X3Rocm90bCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCA1MDFmZmRmLi5lYTgzYTRmIDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTU5OSw3ICs1OTksNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkCi1jZnFfc2NhbGVkX2dyb3VwX3NsaWNlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKK2NmcV9zY2FsZWRfY2ZxcV9zbGljZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCiB7CiAJdW5zaWduZWQgc2xpY2UgPSBjZnFfcHJpb190b19zbGljZShjZnFkLCBjZnFxKTsKIAlpZiAoY2ZxZC0+Y2ZxX2xhdGVuY3kpIHsKQEAgLTYzMSw3ICs2MzEsNyBAQAogc3RhdGljIGlubGluZSB2b2lkCiBjZnFfc2V0X3ByaW9fc2xpY2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewotCXVuc2lnbmVkIHNsaWNlID0gY2ZxX3NjYWxlZF9ncm91cF9zbGljZShjZnFkLCBjZnFxKTsKKwl1bnNpZ25lZCBzbGljZSA9IGNmcV9zY2FsZWRfY2ZxcV9zbGljZShjZnFkLCBjZnFxKTsKIAogCWNmcXEtPnNsaWNlX3N0YXJ0ID0gamlmZmllczsKIAljZnFxLT5zbGljZV9lbmQgPSBqaWZmaWVzICsgc2xpY2U7CkBAIC0xNjcxLDcgKzE2NzEsNyBAQAogCSAqLwogCWlmICh0aW1lZF9vdXQpIHsKIAkJaWYgKGNmcV9jZnFxX3NsaWNlX25ldyhjZnFxKSkKLQkJCWNmcXEtPnNsaWNlX3Jlc2lkID0gY2ZxX3NjYWxlZF9ncm91cF9zbGljZShjZnFkLCBjZnFxKTsKKwkJCWNmcXEtPnNsaWNlX3Jlc2lkID0gY2ZxX3NjYWxlZF9jZnFxX3NsaWNlKGNmcWQsIGNmcXEpOwogCQllbHNlCiAJCQljZnFxLT5zbGljZV9yZXNpZCA9IGNmcXEtPnNsaWNlX2VuZCAtIGppZmZpZXM7CiAJCWNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCAicmVzaWQ9JWxkIiwgY2ZxcS0+c2xpY2VfcmVzaWQpOwpAQCAtMzM1NSw3ICszMzU1LDcgQEAKIAkJCSAgICBjZnFkLT5idXN5X3F1ZXVlcyA+IDEpIHsKIAkJCQljZnFfZGVsX3RpbWVyKGNmcWQsIGNmcXEpOwogCQkJCWNmcV9jbGVhcl9jZnFxX3dhaXRfcmVxdWVzdChjZnFxKTsKLQkJCQlfX2Jsa19ydW5fcXVldWUoY2ZxZC0+cXVldWUpOworCQkJCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSwgZmFsc2UpOwogCQkJfSBlbHNlIHsKIAkJCQljZnFfYmxraW9jZ191cGRhdGVfaWRsZV90aW1lX3N0YXRzKAogCQkJCQkJJmNmcXEtPmNmcWctPmJsa2cpOwpAQCAtMzM3MCw3ICszMzcwLDcgQEAKIAkJICogdGhpcyBuZXcgcXVldWUgaXMgUlQgYW5kIHRoZSBjdXJyZW50IG9uZSBpcyBCRQogCQkgKi8KIAkJY2ZxX3ByZWVtcHRfcXVldWUoY2ZxZCwgY2ZxcSk7Ci0JCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSk7CisJCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSwgZmFsc2UpOwogCX0KIH0KIApAQCAtMzQzMiw2ICszNDMyLDEwIEBACiB7CiAJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMgPSBjZnFkLT5hY3RpdmVfY2ljOwogCisJLyogSWYgdGhlIHF1ZXVlIGFscmVhZHkgaGFzIHJlcXVlc3RzLCBkb24ndCB3YWl0ICovCisJaWYgKCFSQl9FTVBUWV9ST09UKCZjZnFxLT5zb3J0X2xpc3QpKQorCQlyZXR1cm4gZmFsc2U7CisKIAkvKiBJZiB0aGVyZSBhcmUgb3RoZXIgcXVldWVzIGluIHRoZSBncm91cCwgZG9uJ3Qgd2FpdCAqLwogCWlmIChjZnFxLT5jZnFnLT5ucl9jZnFxID4gMSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMzcyNyw3ICszNzMxLDcgQEAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGNmcWQtPnF1ZXVlOwogCiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKLQlfX2Jsa19ydW5fcXVldWUoY2ZxZC0+cXVldWUpOworCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSwgZmFsc2UpOwogCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvYmxvY2svZWxldmF0b3IuYyBiL2Jsb2NrL2VsZXZhdG9yLmMKaW5kZXggMjU2OTUxMi4uMjM2ZTkzYyAxMDA2NDQKLS0tIGEvYmxvY2svZWxldmF0b3IuYworKysgYi9ibG9jay9lbGV2YXRvci5jCkBAIC02MDIsNyArNjAyLDcgQEAKIAkgKi8KIAllbHZfZHJhaW5fZWxldmF0b3IocSk7CiAJd2hpbGUgKHEtPnJxLmVsdnByaXYpIHsKLQkJX19ibGtfcnVuX3F1ZXVlKHEpOworCQlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOwogCQlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAJCW1zbGVlcCgxMCk7CiAJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CkBAIC02NTEsNyArNjUxLDcgQEAKIAkJICogICB3aXRoIGFueXRoaW5nLiAgVGhlcmUncyBubyBwb2ludCBpbiBkZWxheWluZyBxdWV1ZQogCQkgKiAgIHByb2Nlc3NpbmcuCiAJCSAqLwotCQlfX2Jsa19ydW5fcXVldWUocSk7CisJCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBFTEVWQVRPUl9JTlNFUlRfU09SVDoKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IDZhNWI3NzIuLmNiZjExMTIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKKysrIGIvYmxvY2svZ2VuaGQuYwpAQCAtMTM1NSw3ICsxMzU1LDcgQEAKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gYmRnZXRfZGlzayhkaXNrLCBwYXJ0bm8pOwogCWlmIChiZGV2KSB7CiAJCWZzeW5jX2JkZXYoYmRldik7Ci0JCXJlcyA9IF9faW52YWxpZGF0ZV9kZXZpY2UoYmRldik7CisJCXJlcyA9IF9faW52YWxpZGF0ZV9kZXZpY2UoYmRldiwgdHJ1ZSk7CiAJCWJkcHV0KGJkZXYpOwogCX0KIAlyZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmMKaW5kZXggOTA0OWQ0Ni4uMTEyNGNkMiAxMDA2NDQKLS0tIGEvYmxvY2svaW9jdGwuYworKysgYi9ibG9jay9pb2N0bC5jCkBAIC0yOTQsOSArMjk0LDExIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGdldF91c2VyKG4sIChpbnQgX191c2VyICopIGFyZykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKCEobW9kZSAmIEZNT0RFX0VYQ0wpICYmCi0JCSAgICBibGtkZXZfZ2V0KGJkZXYsIG1vZGUgfCBGTU9ERV9FWENMLCAmYmRldikgPCAwKQotCQkJcmV0dXJuIC1FQlVTWTsKKwkJaWYgKCEobW9kZSAmIEZNT0RFX0VYQ0wpKSB7CisJCQliZGdyYWIoYmRldik7CisJCQlpZiAoYmxrZGV2X2dldChiZGV2LCBtb2RlIHwgRk1PREVfRVhDTCwgJmJkZXYpIDwgMCkKKwkJCQlyZXR1cm4gLUVCVVNZOworCQl9CiAJCXJldCA9IHNldF9ibG9ja3NpemUoYmRldiwgbik7CiAJCWlmICghKG1vZGUgJiBGTU9ERV9FWENMKSkKIAkJCWJsa2Rldl9wdXQoYmRldiwgbW9kZSB8IEZNT0RFX0VYQ0wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAppbmRleCA1NDc4NGJiLi5lZGMyNTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaApAQCAtNDE2LDEwICs0MTYsMTUgQEAKIAl1OCBvcmlnaW5hbGx5X2VuYWJsZWQ7ICAvKiBUcnVlIGlmIEdQRSB3YXMgb3JpZ2luYWxseSBlbmFibGVkICovCiB9OwogCitzdHJ1Y3QgYWNwaV9ncGVfbm90aWZ5X29iamVjdCB7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CisJc3RydWN0IGFjcGlfZ3BlX25vdGlmeV9vYmplY3QgKm5leHQ7Cit9OworCiB1bmlvbiBhY3BpX2dwZV9kaXNwYXRjaF9pbmZvIHsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbWV0aG9kX25vZGU7CS8qIE1ldGhvZCBub2RlIGZvciB0aGlzIEdQRSBsZXZlbCAqLwogCXN0cnVjdCBhY3BpX2dwZV9oYW5kbGVyX2luZm8gKmhhbmRsZXI7ICAvKiBJbnN0YWxsZWQgR1BFIGhhbmRsZXIgKi8KLQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGU7ICAgICAgICAvKiBQYXJlbnQgX1BSVyBkZXZpY2UgZm9yIGltcGxpY2l0IG5vdGlmeSAqLworCXN0cnVjdCBhY3BpX2dwZV9ub3RpZnlfb2JqZWN0IGRldmljZTsgICAvKiBMaXN0IG9mIF9QUlcgZGV2aWNlcyBmb3IgaW1wbGljaXQgbm90aWZ5ICovCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCmluZGV4IDE0OTg4YTguLmY0NzI1MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKQEAgLTQ1Nyw2ICs0NTcsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqbG9jYWxfZ3BlX2V2ZW50X2luZm87CiAJc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgYWNwaV9ncGVfbm90aWZ5X29iamVjdCAqbm90aWZ5X29iamVjdDsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfYXN5bmNoX2V4ZWN1dGVfZ3BlX21ldGhvZCk7CiAKQEAgLTUwOCwxMCArNTA5LDE4IEBACiAJCSAqIGZyb20gdGhpcyB0aHJlYWQgLS0gYmVjYXVzZSBoYW5kbGVycyBtYXkgaW4gdHVybiBydW4gb3RoZXIKIAkJICogY29udHJvbCBtZXRob2RzLgogCQkgKi8KLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfZXZfcXVldWVfbm90aWZ5X3JlcXVlc3QobG9jYWxfZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLgotCQkJCQkJIGRldmljZV9ub2RlLAotCQkJCQkJIEFDUElfTk9USUZZX0RFVklDRV9XQUtFKTsKKwkJc3RhdHVzID0gYWNwaV9ldl9xdWV1ZV9ub3RpZnlfcmVxdWVzdCgKKwkJCQlsb2NhbF9ncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guZGV2aWNlLm5vZGUsCisJCQkJQUNQSV9OT1RJRllfREVWSUNFX1dBS0UpOworCisJCW5vdGlmeV9vYmplY3QgPSBsb2NhbF9ncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guZGV2aWNlLm5leHQ7CisJCXdoaWxlIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJiBub3RpZnlfb2JqZWN0KSB7CisJCQlzdGF0dXMgPSBhY3BpX2V2X3F1ZXVlX25vdGlmeV9yZXF1ZXN0KAorCQkJCQlub3RpZnlfb2JqZWN0LT5ub2RlLAorCQkJCQlBQ1BJX05PVElGWV9ERVZJQ0VfV0FLRSk7CisJCQlub3RpZnlfb2JqZWN0ID0gbm90aWZ5X29iamVjdC0+bmV4dDsKKwkJfQorCiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0Q6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZncGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmdwZS5jCmluZGV4IGU5NTYyYTcuLjUyYWFmZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmdwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmdwZS5jCkBAIC0xOTgsNyArMTk4LDkgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOwogCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbzsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGU7CisJc3RydWN0IGFjcGlfZ3BlX25vdGlmeV9vYmplY3QgKm5vdGlmeV9vYmplY3Q7CiAJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CisJdTggZ3BlX2Rpc3BhdGNoX21hc2s7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfc2V0dXBfZ3BlX2Zvcl93YWtlKTsKIApAQCAtMjEyLDM3ICsyMTQsNjIgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAotCS8qIFZhbGlkYXRlIHdha2VfZGV2aWNlIGlzIG9mIHR5cGUgRGV2aWNlICovCi0KLQlkZXZpY2Vfbm9kZSA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUsIHdha2VfZGV2aWNlKTsKLQlpZiAoZGV2aWNlX25vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX0RFVklDRSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQotCiAJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CiAKIAkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgR1BFIG51bWJlciAqLwogCiAJZ3BlX2V2ZW50X2luZm8gPSBhY3BpX2V2X2dldF9ncGVfZXZlbnRfaW5mbyhncGVfZGV2aWNlLCBncGVfbnVtYmVyKTsKLQlpZiAoZ3BlX2V2ZW50X2luZm8pIHsKLQkJLyoKLQkJICogSWYgdGhlcmUgaXMgbm8gbWV0aG9kIG9yIGhhbmRsZXIgZm9yIHRoaXMgR1BFLCB0aGVuIHRoZQotCQkgKiB3YWtlX2RldmljZSB3aWxsIGJlIG5vdGlmaWVkIHdoZW5ldmVyIHRoaXMgR1BFIGZpcmVzIChha2EKLQkJICogImltcGxpY2l0IG5vdGlmeSIpIE5vdGU6IFRoZSBHUEUgaXMgYXNzdW1lZCB0byBiZQotCQkgKiBsZXZlbC10cmlnZ2VyZWQgKGZvciB3aW5kb3dzIGNvbXBhdGliaWxpdHkpLgotCQkgKi8KLQkJaWYgKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSA9PQotCQkgICAgQUNQSV9HUEVfRElTUEFUQ0hfTk9ORSkgewotCQkJZ3BlX2V2ZW50X2luZm8tPmZsYWdzID0KLQkJCSAgICAoQUNQSV9HUEVfRElTUEFUQ0hfTk9USUZZIHwKLQkJCSAgICAgQUNQSV9HUEVfTEVWRUxfVFJJR0dFUkVEKTsKLQkJCWdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5kZXZpY2Vfbm9kZSA9IGRldmljZV9ub2RlOwotCQl9Ci0KLQkJZ3BlX2V2ZW50X2luZm8tPmZsYWdzIHw9IEFDUElfR1BFX0NBTl9XQUtFOwotCQlzdGF0dXMgPSBBRV9PSzsKKwlpZiAoIWdwZV9ldmVudF9pbmZvKSB7CisJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCX0KIAorCWlmICh3YWtlX2RldmljZSA9PSBBQ1BJX1JPT1RfT0JKRUNUKSB7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogSWYgdGhlcmUgaXMgbm8gbWV0aG9kIG9yIGhhbmRsZXIgZm9yIHRoaXMgR1BFLCB0aGVuIHRoZQorCSAqIHdha2VfZGV2aWNlIHdpbGwgYmUgbm90aWZpZWQgd2hlbmV2ZXIgdGhpcyBHUEUgZmlyZXMgKGFrYQorCSAqICJpbXBsaWNpdCBub3RpZnkiKSBOb3RlOiBUaGUgR1BFIGlzIGFzc3VtZWQgdG8gYmUKKwkgKiBsZXZlbC10cmlnZ2VyZWQgKGZvciB3aW5kb3dzIGNvbXBhdGliaWxpdHkpLgorCSAqLworCWdwZV9kaXNwYXRjaF9tYXNrID0gZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSzsKKwlpZiAoZ3BlX2Rpc3BhdGNoX21hc2sgIT0gQUNQSV9HUEVfRElTUEFUQ0hfTk9ORQorCSAgICAmJiBncGVfZGlzcGF0Y2hfbWFzayAhPSBBQ1BJX0dQRV9ESVNQQVRDSF9OT1RJRlkpIHsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVmFsaWRhdGUgd2FrZV9kZXZpY2UgaXMgb2YgdHlwZSBEZXZpY2UgKi8KKworCWRldmljZV9ub2RlID0gQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSwgd2FrZV9kZXZpY2UpOworCWlmIChkZXZpY2Vfbm9kZS0+dHlwZSAhPSBBQ1BJX1RZUEVfREVWSUNFKSB7CisJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCX0KKworCWlmIChncGVfZGlzcGF0Y2hfbWFzayA9PSBBQ1BJX0dQRV9ESVNQQVRDSF9OT05FKSB7CisJCWdwZV9ldmVudF9pbmZvLT5mbGFncyA9IChBQ1BJX0dQRV9ESVNQQVRDSF9OT1RJRlkgfAorCQkJCQkgQUNQSV9HUEVfTEVWRUxfVFJJR0dFUkVEKTsKKwkJZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLmRldmljZS5ub2RlID0gZGV2aWNlX25vZGU7CisJCWdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5kZXZpY2UubmV4dCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJLyogVGhlcmUgYXJlIG11bHRpcGxlIGRldmljZXMgdG8gbm90aWZ5IGltcGxpY2l0bHkuICovCisKKwkJbm90aWZ5X29iamVjdCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZigqbm90aWZ5X29iamVjdCkpOworCQlpZiAoIW5vdGlmeV9vYmplY3QpIHsKKwkJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKKwkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQl9CisKKwkJbm90aWZ5X29iamVjdC0+bm9kZSA9IGRldmljZV9ub2RlOworCQlub3RpZnlfb2JqZWN0LT5uZXh0ID0gZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLmRldmljZS5uZXh0OworCQlncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guZGV2aWNlLm5leHQgPSBub3RpZnlfb2JqZWN0OworCX0KKworIG91dDoKKwlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgfD0gQUNQSV9HUEVfQ0FOX1dBS0U7CisJc3RhdHVzID0gQUVfT0s7CisKKyB1bmxvY2tfYW5kX2V4aXQ6CiAJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2FjcGkvZGVidWdmcy5jCmluZGV4IDVkZjY3ZjEuLjM4NGY3YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9hY3BpL2RlYnVnZnMuYwpAQCAtMjYsNyArMjYsOSBAQAogCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RhdGljIGNoYXIgKmJ1ZjsKLQlzdGF0aWMgaW50IHVuY29waWVkX2J5dGVzOworCXN0YXRpYyB1MzIgbWF4X3NpemU7CisJc3RhdGljIHUzMiB1bmNvcGllZF9ieXRlczsKKwogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciB0YWJsZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKQEAgLTM3LDE5ICszOSwyNCBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJnRhYmxlLCB1c2VyX2J1ZiwKIAkJCQkgICBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJdW5jb3BpZWRfYnl0ZXMgPSB0YWJsZS5sZW5ndGg7Ci0JCWJ1ZiA9IGt6YWxsb2ModW5jb3BpZWRfYnl0ZXMsIEdGUF9LRVJORUwpOworCQl1bmNvcGllZF9ieXRlcyA9IG1heF9zaXplID0gdGFibGUubGVuZ3RoOworCQlidWYgPSBremFsbG9jKG1heF9zaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFidWYpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAodW5jb3BpZWRfYnl0ZXMgPCBjb3VudCkgewotCQlrZnJlZShidWYpOworCWlmIChidWYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCisJaWYgKCgqcHBvcyA+IG1heF9zaXplKSB8fAorCSAgICAoKnBwb3MgKyBjb3VudCA+IG1heF9zaXplKSB8fAorCSAgICAoKnBwb3MgKyBjb3VudCA8IGNvdW50KSB8fAorCSAgICAoY291bnQgPiB1bmNvcGllZF9ieXRlcykpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiArICgqcHBvcyksIHVzZXJfYnVmLCBjb3VudCkpIHsKIAkJa2ZyZWUoYnVmKTsKKwkJYnVmID0gTlVMTDsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC01OSw2ICs2Niw3IEBACiAJaWYgKCF1bmNvcGllZF9ieXRlcykgewogCQlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbWV0aG9kKGJ1Zik7CiAJCWtmcmVlKGJ1Zik7CisJCWJ1ZiA9IE5VTEw7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlhZGRfdGFpbnQoVEFJTlRfT1ZFUlJJRERFTl9BQ1BJX1RBQkxFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9vc2wuYyBiL2RyaXZlcnMvYWNwaS9vc2wuYwppbmRleCBiMDkzMTgxLi5jOTBjNzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvb3NsLmMKKysrIGIvZHJpdmVycy9hY3BpL29zbC5jCkBAIC02MzYsMTcgKzYzNiwyMSBAQAogYWNwaV9zdGF0dXMKIGFjcGlfb3NfcmVhZF9tZW1vcnkoYWNwaV9waHlzaWNhbF9hZGRyZXNzIHBoeXNfYWRkciwgdTMyICogdmFsdWUsIHUzMiB3aWR0aCkKIHsKLQl1MzIgZHVtbXk7CiAJdm9pZCBfX2lvbWVtICp2aXJ0X2FkZHI7Ci0JaW50IHNpemUgPSB3aWR0aCAvIDgsIHVubWFwID0gMDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IHdpZHRoIC8gODsKKwlib29sIHVubWFwID0gZmFsc2U7CisJdTMyIGR1bW15OwogCiAJcmN1X3JlYWRfbG9jaygpOwogCXZpcnRfYWRkciA9IGFjcGlfbWFwX3ZhZGRyX2xvb2t1cChwaHlzX2FkZHIsIHNpemUpOwotCXJjdV9yZWFkX3VubG9jaygpOwogCWlmICghdmlydF9hZGRyKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQl2aXJ0X2FkZHIgPSBhY3BpX29zX2lvcmVtYXAocGh5c19hZGRyLCBzaXplKTsKLQkJdW5tYXAgPSAxOworCQlpZiAoIXZpcnRfYWRkcikKKwkJCXJldHVybiBBRV9CQURfQUREUkVTUzsKKwkJdW5tYXAgPSB0cnVlOwogCX0KKwogCWlmICghdmFsdWUpCiAJCXZhbHVlID0gJmR1bW15OwogCkBAIC02NjYsNiArNjcwLDggQEAKIAogCWlmICh1bm1hcCkKIAkJaW91bm1hcCh2aXJ0X2FkZHIpOworCWVsc2UKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gQUVfT0s7CiB9CkBAIC02NzQsMTQgKzY4MCwxNyBAQAogYWNwaV9vc193cml0ZV9tZW1vcnkoYWNwaV9waHlzaWNhbF9hZGRyZXNzIHBoeXNfYWRkciwgdTMyIHZhbHVlLCB1MzIgd2lkdGgpCiB7CiAJdm9pZCBfX2lvbWVtICp2aXJ0X2FkZHI7Ci0JaW50IHNpemUgPSB3aWR0aCAvIDgsIHVubWFwID0gMDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IHdpZHRoIC8gODsKKwlib29sIHVubWFwID0gZmFsc2U7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdmlydF9hZGRyID0gYWNwaV9tYXBfdmFkZHJfbG9va3VwKHBoeXNfYWRkciwgc2l6ZSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKCF2aXJ0X2FkZHIpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXZpcnRfYWRkciA9IGFjcGlfb3NfaW9yZW1hcChwaHlzX2FkZHIsIHNpemUpOwotCQl1bm1hcCA9IDE7CisJCWlmICghdmlydF9hZGRyKQorCQkJcmV0dXJuIEFFX0JBRF9BRERSRVNTOworCQl1bm1hcCA9IHRydWU7CiAJfQogCiAJc3dpdGNoICh3aWR0aCkgewpAQCAtNzAwLDYgKzcwOSw4IEBACiAKIAlpZiAodW5tYXApCiAJCWlvdW5tYXAodmlydF9hZGRyKTsKKwllbHNlCisJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIEFFX09LOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCmluZGV4IDQyZDNkNzIuLjVhZjM0NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKQEAgLTgyLDYgKzgyLDExIEBACiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAwOwogCisJLyogSXMgdGhpcyBkZXZpY2UgYWJsZSB0byBzdXBwb3J0IHZpZGVvIHN3aXRjaGluZyA/ICovCisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRE9EIiwgJmhfZHVtbXkpKSB8fAorCSAgICBBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPUyIsICZoX2R1bW15KSkpCisJCXZpZGVvX2NhcHMgfD0gQUNQSV9WSURFT19PVVRQVVRfU1dJVENISU5HOworCiAJLyogSXMgdGhpcyBkZXZpY2UgYWJsZSB0byByZXRyaWV2ZSBhIHZpZGVvIFJPTSA/ICovCiAJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfUk9NIiwgJmhfZHVtbXkpKSkKIAkJdmlkZW9fY2FwcyB8PSBBQ1BJX1ZJREVPX1JPTV9BVkFJTEFCTEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvd2FrZXVwLmMgYi9kcml2ZXJzL2FjcGkvd2FrZXVwLmMKaW5kZXggZWQ2NTAxNC4uN2JmYmU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3dha2V1cC5jCisrKyBiL2RyaXZlcnMvYWNwaS93YWtldXAuYwpAQCAtODYsOCArODYsMTIgQEAKIAkJc3RydWN0IGFjcGlfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobm9kZSwKIAkJCQkJCSAgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UsCiAJCQkJCQkgICAgICAgd2FrZXVwX2xpc3QpOwotCQlpZiAoZGV2aWNlX2Nhbl93YWtldXAoJmRldi0+ZGV2KSkKKwkJaWYgKGRldmljZV9jYW5fd2FrZXVwKCZkZXYtPmRldikpIHsKKwkJCS8qIEJ1dHRvbiBHUEVzIGFyZSBzdXBwb3NlZCB0byBiZSBhbHdheXMgZW5hYmxlZC4gKi8KKwkJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKIAkJCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmZGV2LT5kZXYsIHRydWUpOworCQl9CiAJfQogCW11dGV4X3VubG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggMzI4ODI2My4uYjhkOTZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtMjYwLDYgKzI2MCw3IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZDAyKSwgYm9hcmRfYWhjaSB9LCAvKiBQQkcgQUhDSSAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWQwNCksIGJvYXJkX2FoY2kgfSwgLyogUEJHIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFkMDYpLCBib2FyZF9haGNpIH0sIC8qIFBCRyBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyMzIzKSwgYm9hcmRfYWhjaSB9LCAvKiBESDg5eHhDQyBBSENJICovCiAKIAkvKiBKTWljcm9uIDM2MC8xLzMvNS82LCBtYXRjaCBjbGFzcyB0byBhdm9pZCBJREUgZnVuY3Rpb24gKi8KIAl7IFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKQEAgLTM3OSw2ICszODAsOCBAQAogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHg2MTQ1KSwgYm9hcmRfYWhjaV9tdiB9LAkvKiA2MTQ1ICovCiAJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDYxMjEpLCBib2FyZF9haGNpX212IH0sCS8qIDYxMjEgKi8KIAl7IFBDSV9ERVZJQ0UoMHgxYjRiLCAweDkxMjMpLAorCSAgLmNsYXNzID0gUENJX0NMQVNTX1NUT1JBR0VfU0FUQV9BSENJLAorCSAgLmNsYXNzX21hc2sgPSAweGZmZmZmZiwKIAkgIC5kcml2ZXJfZGF0YSA9IGJvYXJkX2FoY2lfeWVzX2ZicyB9LAkJCS8qIDg4c2U5MTI4ICovCiAKIAkvKiBQcm9taXNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCBhMzFmZTk2Li5kNGU1MmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTQxMzgsNiArNDEzOCw3IEBACiAJICogZGV2aWNlIGFuZCBjb250cm9sbGVyIGFyZSBTQVRBLgogCSAqLwogCXsgIlBJT05FRVIgRFZELVJXICBEVlJURDA4IiwJIjEuMDAiLAlBVEFfSE9SS0FHRV9OT1NFVFhGRVIgfSwKKwl7ICJQSU9ORUVSIERWRC1SVyAgRFZSLTIxMkQiLAkiMS4yOCIsIEFUQV9IT1JLQUdFX05PU0VUWEZFUiB9LAogCiAJLyogRW5kIE1hcmtlciAqLwogCXsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKaW5kZXggNWRlZmM3NC4uNjAwZjYzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCkBAIC0xMDk5LDkgKzEwOTksOSBAQAogCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHNkZXYtPnJlcXVlc3RfcXVldWU7CiAJCXZvaWQgKmJ1ZjsKIAotCQkvKiBzZXQgdGhlIG1pbiBhbGlnbm1lbnQgYW5kIHBhZGRpbmcgKi8KLQkJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsCi0JCQkJCSAgICAgICBBVEFfRE1BX1BBRF9TWiAtIDEpOworCQlzZGV2LT5zZWN0b3Jfc2l6ZSA9IEFUQV9TRUNUX1NJWkU7CisKKwkJLyogc2V0IERNQSBwYWRkaW5nICovCiAJCWJsa19xdWV1ZV91cGRhdGVfZG1hX3BhZChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAogCQkJCQkgQVRBX0RNQV9QQURfU1ogLSAxKTsKIApAQCAtMTExNSwxMyArMTExNSwyNSBAQAogCiAJCWJsa19xdWV1ZV9kbWFfZHJhaW4ocSwgYXRhcGlfZHJhaW5fbmVlZGVkLCBidWYsIEFUQVBJX01BWF9EUkFJTik7CiAJfSBlbHNlIHsKLQkJLyogQVRBIGRldmljZXMgbXVzdCBiZSBzZWN0b3IgYWxpZ25lZCAqLwogCQlzZGV2LT5zZWN0b3Jfc2l6ZSA9IGF0YV9pZF9sb2dpY2FsX3NlY3Rvcl9zaXplKGRldi0+aWQpOwotCQlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKLQkJCQkJICAgICAgIHNkZXYtPnNlY3Rvcl9zaXplIC0gMSk7CiAJCXNkZXYtPm1hbmFnZV9zdGFydF9zdG9wID0gMTsKIAl9CiAKKwkvKgorCSAqIGF0YV9waW9fc2VjdG9ycygpIGV4cGVjdHMgYnVmZmVyIGZvciBlYWNoIHNlY3RvciB0byBub3QgY3Jvc3MKKwkgKiBwYWdlIGJvdW5kYXJ5LiAgRW5mb3JjZSBpdCBieSByZXF1aXJpbmcgYnVmZmVycyB0byBiZSBzZWN0b3IKKwkgKiBhbGlnbmVkLCB3aGljaCB3b3JrcyBpZmYgc2VjdG9yX3NpemUgaXMgbm90IGxhcmdlciB0aGFuCisJICogUEFHRV9TSVpFLiAgQVRBUEkgZGV2aWNlcyBhbHNvIG5lZWQgdGhlIGFsaWdubWVudCBhcworCSAqIElERU5USUZZX1BBQ0tFVCBpcyBleGVjdXRlZCBhcyBBVEFfUFJPVF9QSU8uCisJICovCisJaWYgKHNkZXYtPnNlY3Rvcl9zaXplID4gUEFHRV9TSVpFKQorCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fV0FSTklORywKKwkJCSJzZWN0b3Jfc2l6ZT0ldSA+IFBBR0VfU0laRSwgUElPIG1heSBtYWxmdW5jdGlvblxuIiwKKwkJCXNkZXYtPnNlY3Rvcl9zaXplKTsKKworCWJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAorCQkJCSAgICAgICBzZGV2LT5zZWN0b3Jfc2l6ZSAtIDEpOworCiAJaWYgKGRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfQU4pCiAJCXNldF9iaXQoU0RFVl9FVlRfTUVESUFfQ0hBTkdFLCBzZGV2LT5zdXBwb3J0ZWRfZXZlbnRzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKaW5kZXggZDdlNTdkYi4uNTM4ZWMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaHB0MzY2IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjkiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYuMTAiCiAKIHN0cnVjdCBocHRfY2xvY2sgewogCXU4CXhmZXJfbW9kZTsKQEAgLTE2MCw4ICsxNjAsOCBAQAogCiAJd2hpbGUgKGxpc3RbaV0gIT0gTlVMTCkgewogCQlpZiAoIXN0cmNtcChsaXN0W2ldLCBtb2RlbF9udW0pKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzLlxuIiwKLQkJCQltb2Rlc3RyLCBsaXN0W2ldKTsKKwkJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogJXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMuXG4iLAorCQkJCSAgIG1vZGVzdHIsIGxpc3RbaV0pOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJaSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKaW5kZXggZWZkZDE4Yi4uNGM1YjUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaHB0Mzd4IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjE4IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjIyIgogCiBzdHJ1Y3QgaHB0X2Nsb2NrIHsKIAl1OAl4ZmVyX3NwZWVkOwpAQCAtMjI5LDggKzIyOSw4IEBACiAKIAl3aGlsZSAobGlzdFtpXSAhPSBOVUxMKSB7CiAJCWlmICghc3RyY21wKGxpc3RbaV0sIG1vZGVsX251bSkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMuXG4iLAotCQkJCW1vZGVzdHIsIGxpc3RbaV0pOworCQkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiAlcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcy5cbiIsCisJCQkJICAgbW9kZXN0ciwgbGlzdFtpXSk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlpKys7CkBAIC02NDIsNyArNjQyLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBocHQzNzRfZm4xX3BvcnRfb3BzID0gewogCS5pbmhlcml0cwk9ICZocHQzNzJfcG9ydF9vcHMsCiAJLmNhYmxlX2RldGVjdAk9IGhwdDM3NF9mbjFfY2FibGVfZGV0ZWN0LAotCS5wcmVyZXNldAk9IGhwdDM3eF9wcmVfcmVzZXQsCiB9OwogCiAvKioKQEAgLTgwMyw3ICs4MDIsNyBAQAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmaHB0MzAyX3BvcnRfb3BzCiAJfTsKLQkvKiBIUFQzNzQgLSBVRE1BMTAwLCBmdW5jdGlvbiAxIHVzZXMgZGlmZmVyZW50IHByZXJlc2V0IG1ldGhvZCAqLworCS8qIEhQVDM3NCAtIFVETUExMDAsIGZ1bmN0aW9uIDEgdXNlcyBkaWZmZXJlbnQgY2FibGVfZGV0ZWN0IG1ldGhvZCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3NF9mbjAgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzayA9IEFUQV9QSU80LApAQCAtODM4LDcgKzgzNyw4IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9UVElfSFBUMzY2KSB7CisJc3dpdGNoIChkZXYtPmRldmljZSkgeworCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzY2OgogCQkvKiBNYXkgYmUgYSBsYXRlciBjaGlwIGluIGRpc2d1aXNlLiBDaGVjayAqLwogCQkvKiBPbGRlciBjaGlwcyBhcmUgaW4gdGhlIEhQVDM2NiBkcml2ZXIuIElnbm9yZSB0aGVtICovCiAJCWlmIChyZXYgPCAzKQpAQCAtODYzLDU0ICs4NjMsNTAgQEAKIAkJCWNoaXBfdGFibGUgPSAmaHB0MzcyOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgInBhdGFfaHB0Mzd4OiBVbmtub3duIEhQVDM2NiBzdWJ0eXBlLCAiCisJCQlwcl9lcnIoRFJWX05BTUUgIjogVW5rbm93biBIUFQzNjYgc3VidHlwZSwgIgogCQkJICAgICAgICJwbGVhc2UgcmVwb3J0ICglZCkuXG4iLCByZXYpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQl9IGVsc2UgewotCQlzd2l0Y2ggKGRldi0+ZGV2aWNlKSB7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzcyOgotCQkJLyogMzcyTiBpZiByZXYgPj0gMiAqLwotCQkJaWYgKHJldiA+PSAyKQotCQkJCXJldHVybiAtRU5PREVWOwotCQkJcHBpWzBdID0gJmluZm9faHB0MzcyOwotCQkJY2hpcF90YWJsZSA9ICZocHQzNzJhOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzAyOgotCQkJLyogMzAyTiBpZiByZXYgPiAxICovCi0JCQlpZiAocmV2ID4gMSkKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCXBwaVswXSA9ICZpbmZvX2hwdDMwMjsKLQkJCS8qIENoZWNrIHRoaXMgKi8KLQkJCWNoaXBfdGFibGUgPSAmaHB0MzAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzcxOgotCQkJaWYgKHJldiA+IDEpCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQlwcGlbMF0gPSAmaW5mb19ocHQzMDI7Ci0JCQljaGlwX3RhYmxlID0gJmhwdDM3MTsKLQkJCS8qCi0JCQkgKiBTaW5nbGUgY2hhbm5lbCBkZXZpY2UsIG1hc3RlciBpcyBub3QgcHJlc2VudAotCQkJICogYnV0IHRoZSBCSU9TIChvciB1cyBmb3Igbm9uIHg4NikgbXVzdCBtYXJrIGl0Ci0JCQkgKiBhYnNlbnQKLQkJCSAqLwotCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAmbWNyMSk7Ci0JCQltY3IxICY9IH4weDA0OwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgbWNyMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzQ6Ci0JCQljaGlwX3RhYmxlID0gJmhwdDM3NDsKLQkJCWlmICghKFBDSV9GVU5DKGRldi0+ZGV2Zm4pICYgMSkpCi0JCQkJKnBwaSA9ICZpbmZvX2hwdDM3NF9mbjA7Ci0JCQllbHNlCi0JCQkJKnBwaSA9ICZpbmZvX2hwdDM3NF9mbjE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJwYXRhX2hwdDM3eDogUENJIHRhYmxlIGlzIGJvZ3VzLCBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAotCQkJICAgICAgIGRldi0+ZGV2aWNlKTsKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQorCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MjoKKwkJLyogMzcyTiBpZiByZXYgPj0gMiAqLworCQlpZiAocmV2ID49IDIpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJcHBpWzBdID0gJmluZm9faHB0MzcyOworCQljaGlwX3RhYmxlID0gJmhwdDM3MmE7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzAyOgorCQkvKiAzMDJOIGlmIHJldiA+IDEgKi8KKwkJaWYgKHJldiA+IDEpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJcHBpWzBdID0gJmluZm9faHB0MzAyOworCQkvKiBDaGVjayB0aGlzICovCisJCWNoaXBfdGFibGUgPSAmaHB0MzAyOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MToKKwkJaWYgKHJldiA+IDEpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJcHBpWzBdID0gJmluZm9faHB0MzAyOworCQljaGlwX3RhYmxlID0gJmhwdDM3MTsKKwkJLyoKKwkJICogU2luZ2xlIGNoYW5uZWwgZGV2aWNlLCBtYXN0ZXIgaXMgbm90IHByZXNlbnQgYnV0IHRoZSBCSU9TCisJCSAqIChvciB1cyBmb3Igbm9uIHg4NikgbXVzdCBtYXJrIGl0IGFic2VudAorCQkgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAmbWNyMSk7CisJCW1jcjEgJj0gfjB4MDQ7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTAsIG1jcjEpOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3NDoKKwkJY2hpcF90YWJsZSA9ICZocHQzNzQ7CisJCWlmICghKFBDSV9GVU5DKGRldi0+ZGV2Zm4pICYgMSkpCisJCQkqcHBpID0gJmluZm9faHB0Mzc0X2ZuMDsKKwkJZWxzZQorCQkJKnBwaSA9ICZpbmZvX2hwdDM3NF9mbjE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2VycihEUlZfTkFNRSAiOiBQQ0kgdGFibGUgaXMgYm9ndXMsIHBsZWFzZSByZXBvcnQgKCVkKS5cbiIsCisJCSAgICAgICBkZXYtPmRldmljZSk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAkvKiBPayBzbyB0aGlzIGlzIGEgY2hpcCB3ZSBzdXBwb3J0ICovCiAKQEAgLTk1Nyw4ICs5NTMsNyBAQAogCQl1OCBzcjsKIAkJdTMyIHRvdGFsID0gMDsKIAotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAicGF0YV9ocHQzN3g6IEJJT1MgaGFzIG5vdCBzZXQgdGltaW5nIGNsb2Nrcy5cbiIpOworCQlwcl93YXJuaW5nKERSVl9OQU1FICI6IEJJT1MgaGFzIG5vdCBzZXQgdGltaW5nIGNsb2Nrcy5cbiIpOwogCiAJCS8qIFRoaXMgaXMgdGhlIHByb2Nlc3MgdGhlIEhQVDM3MSBCSU9TIGlzIHJlcG9ydGVkIHRvIHVzZSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKQEAgLTEwMTQsNyArMTAwOSw3IEBACiAJCQkJCSAgICAgICAoZl9oaWdoIDw8IDE2KSB8IGZfbG93IHwgMHgxMDApOwogCQl9CiAJCWlmIChhZGp1c3QgPT0gOCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJwYXRhX2hwdDM3eDogRFBMTCBkaWQgbm90IHN0YWJpbGl6ZSFcbiIpOworCQkJcHJfZXJyKERSVl9OQU1FICI6IERQTEwgZGlkIG5vdCBzdGFiaWxpemUhXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWlmIChkcGxsID09IDMpCkBAIC0xMDIyLDggKzEwMTcsOCBAQAogCQllbHNlCiAJCQlwcml2YXRlX2RhdGEgPSAodm9pZCAqKWhwdDM3eF90aW1pbmdzXzUwOwogCi0JCXByaW50ayhLRVJOX0lORk8gInBhdGFfaHB0Mzd4OiBidXMgY2xvY2sgJWRNSHosIHVzaW5nICVkTUh6IERQTEwuXG4iLAotCQkgICAgICAgTUh6W2Nsb2NrX3Nsb3RdLCBNSHpbZHBsbF0pOworCQlwcl9pbmZvKERSVl9OQU1FICI6IGJ1cyBjbG9jayAlZE1IeiwgdXNpbmcgJWRNSHogRFBMTC5cbiIsCisJCQlNSHpbY2xvY2tfc2xvdF0sIE1IeltkcGxsXSk7CiAJfSBlbHNlIHsKIAkJcHJpdmF0ZV9kYXRhID0gKHZvaWQgKiljaGlwX3RhYmxlLT5jbG9ja3NbY2xvY2tfc2xvdF07CiAJCS8qCkBAIC0xMDM2LDggKzEwMzEsOSBAQAogCQkJcHBpWzBdID0gJmluZm9faHB0MzcwXzMzOwogCQlpZiAoY2xvY2tfc2xvdCA8IDIgJiYgcHBpWzBdID09ICZpbmZvX2hwdDM3MGEpCiAJCQlwcGlbMF0gPSAmaW5mb19ocHQzNzBhXzMzOwotCQlwcmludGsoS0VSTl9JTkZPICJwYXRhX2hwdDM3eDogJXMgdXNpbmcgJWRNSHogYnVzIGNsb2NrLlxuIiwKLQkJICAgICAgIGNoaXBfdGFibGUtPm5hbWUsIE1IeltjbG9ja19zbG90XSk7CisKKwkJcHJfaW5mbyhEUlZfTkFNRSAiOiAlcyB1c2luZyAlZE1IeiBidXMgY2xvY2suXG4iLAorCQkJY2hpcF90YWJsZS0+bmFtZSwgTUh6W2Nsb2NrX3Nsb3RdKTsKIAl9CiAKIAkvKiBOb3cga2ljayBvZmYgQVRBIHNldCB1cCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYwppbmRleCBkMjIzOWJiLi5lY2E2OGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDN4Mm4iCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjMuMTMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjMuMTQiCiAKIGVudW0gewogCUhQVF9QQ0lfRkFTVAk9CSgxIDw8IDMxKSwKQEAgLTQxOCw3ICs0MTgsNyBAQAogCQl1MTYgc3I7CiAJCXUzMiB0b3RhbCA9IDA7CiAKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicGF0YV9ocHQzeDJuOiBCSU9TIGNsb2NrIGRhdGEgbm90IHNldC5cbiIpOworCQlwcl93YXJuaW5nKERSVl9OQU1FICI6IEJJT1MgY2xvY2sgZGF0YSBub3Qgc2V0LlxuIik7CiAKIAkJLyogVGhpcyBpcyB0aGUgcHJvY2VzcyB0aGUgSFBUMzcxIEJJT1MgaXMgcmVwb3J0ZWQgdG8gdXNlICovCiAJCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgewpAQCAtNTI4LDggKzUyOCw3IEBACiAJCXBwaVswXSA9ICZpbmZvX2hwdDM3Mm47CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgInBhdGFfaHB0M3gybjogUENJIHRhYmxlIGlzIGJvZ3VzIHBsZWFzZSByZXBvcnQgKCVkKS5cbiIsCisJCXByX2VycihEUlZfTkFNRSAiOiBQQ0kgdGFibGUgaXMgYm9ndXMsIHBsZWFzZSByZXBvcnQgKCVkKS5cbiIsCiAJCSAgICAgICBkZXYtPmRldmljZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTU3OSwxMiArNTc4LDExIEBACiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDVDLCAoZl9oaWdoIDw8IDE2KSB8IGZfbG93KTsKIAl9CiAJaWYgKGFkanVzdCA9PSA4KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGF0YV9ocHQzeDJuOiBEUExMIGRpZCBub3Qgc3RhYmlsaXplIVxuIik7CisJCXByX2VycihEUlZfTkFNRSAiOiBEUExMIGRpZCBub3Qgc3RhYmlsaXplIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gInBhdGFfaHB0Mzd4OiBidXMgY2xvY2sgJWRNSHosIHVzaW5nIDY2TUh6IERQTEwuXG4iLAotCSAgICAgICBwY2lfbWh6KTsKKwlwcl9pbmZvKERSVl9OQU1FICI6IGJ1cyBjbG9jayAlZE1IeiwgdXNpbmcgNjZNSHogRFBMTC5cbiIsIHBjaV9taHopOwogCiAJLyoKIAkgKiBTZXQgb3VyIHByaXZhdGUgZGF0YSB1cC4gV2Ugb25seSBuZWVkIGEgZmV3IGZsYWdzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCmluZGV4IDhjYzUzNmUuLmQ3ZDgwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCkBAIC02MTAsNyArNjEwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBtcGM1Mnh4X2F0YV9wb3J0X29wcyA9IHsKLQkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisJLmluaGVyaXRzCQk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAJLnNmZl9kZXZfc2VsZWN0CQk9IG1wYzUyeHhfYXRhX2Rldl9zZWxlY3QsCiAJLnNldF9waW9tb2RlCQk9IG1wYzUyeHhfYXRhX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQkJPSBtcGM1Mnh4X2F0YV9zZXRfZG1hbW9kZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2lkdDc3MTA1LmMgYi9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jCmluZGV4IGJjYTljYjguLjQ4N2E1NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lkdDc3MTA1LmMKKysrIGIvZHJpdmVycy9hdG0vaWR0NzcxMDUuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWR0NzcxMDVfcHJpdl9sb2NrLCBmbGFncyk7CiAJaWYgKGFyZyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY29weV90b191c2VyKGFyZywgJlBSSVYoZGV2KS0+c3RhdHMsCisJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsICZzdGF0cywKIAkJICAgIHNpemVvZihzdHJ1Y3QgaWR0NzcxMDVfc3RhdHMpKSA/IC1FRkFVTFQgOiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCmluZGV4IDczZmIxYzQuLjI1ZWYxYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCisrKyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCkBAIC04NjYsOCArODY2LDkgQEAKIAl9CiAKIAlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZWFkZXIpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXNrYiAmJiBuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgaW4gcG9wZW4oKVxuIik7CisJaWYgKCFza2IpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIHBvcGVuKClcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaGVhZGVyID0gKHZvaWQgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZWFkZXIpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IDY1NjQ5M2EuLjQyNjE1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwpAQCAtNDA3LDEyICs0MDcsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJLyogTWF5YmUgdGhlIHBhcmVudCBpcyBub3cgYWJsZSB0byBzdXNwZW5kLiAqLwogCWlmIChwYXJlbnQgJiYgIXBhcmVudC0+cG93ZXIuaWdub3JlX2NoaWxkcmVuICYmICFkZXYtPnBvd2VyLmlycV9zYWZlKSB7Ci0JCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+cG93ZXIubG9jayk7CiAKLQkJcG1fcmVxdWVzdF9pZGxlKHBhcmVudCk7CisJCXNwaW5fbG9jaygmcGFyZW50LT5wb3dlci5sb2NrKTsKKwkJcnBtX2lkbGUocGFyZW50LCBSUE1fQVNZTkMpOworCQlzcGluX3VubG9jaygmcGFyZW50LT5wb3dlci5sb2NrKTsKIAotCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlzcGluX2xvY2soJmRldi0+cG93ZXIubG9jayk7CiAJfQogCiAgb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9NYWtlZmlsZSBiL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKaW5kZXggZDdmNDYzZC4uNDA1MjhiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCkBAIC0zOSw0ICszOSw0IEBACiBvYmotJChDT05GSUdfQkxLX0RFVl9EUkJEKSAgICAgKz0gZHJiZC8KIG9iai0kKENPTkZJR19CTEtfREVWX1JCRCkgICAgICs9IHJiZC5vCiAKLXN3aW1fbW9kLW9ianMJOj0gc3dpbS5vIHN3aW1fYXNtLm8KK3N3aW1fbW9kLXkJOj0gc3dpbS5vIHN3aW1fYXNtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL01ha2VmaWxlIGIvZHJpdmVycy9ibG9jay9hb2UvTWFrZWZpbGUKaW5kZXggZTc2ZDk5Ny4uMDZlYTgyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvTWFrZWZpbGUKQEAgLTMsNCArMyw0IEBACiAjCiAKIG9iai0kKENPTkZJR19BVEFfT1ZFUl9FVEgpCSs9IGFvZS5vCi1hb2Utb2JqcyA6PSBhb2VibGsubyBhb2VjaHIubyBhb2VjbWQubyBhb2VkZXYubyBhb2VtYWluLm8gYW9lbmV0Lm8KK2FvZS15IDo9IGFvZWJsay5vIGFvZWNoci5vIGFvZWNtZC5vIGFvZWRldi5vIGFvZW1haW4ubyBhb2VuZXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDUxNmQ1YmIuLjkyNzkyNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTI4MzMsNyArMjgzMyw3IEBACiAJc2VjdG9yX3QgdG90YWxfc2l6ZTsKIAlJbnF1aXJ5RGF0YV9zdHJ1Y3QgKmlucV9idWZmID0gTlVMTDsKIAotCWZvciAobG9ndm9sID0gMDsgbG9ndm9sIDwgQ0lTU19NQVhfTFVOOyBsb2d2b2wrKykgeworCWZvciAobG9ndm9sID0gMDsgbG9ndm9sIDw9IGgtPmhpZ2hlc3RfbHVuOyBsb2d2b2wrKykgewogCQlpZiAoIWgtPmRydltsb2d2b2xdKQogCQkJY29udGludWU7CiAJCWlmIChtZW1jbXAoaC0+ZHJ2W2xvZ3ZvbF0tPkx1bklELCBkcnYtPkx1bklELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggYjliYTA0Zi4uNzdmYzc2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC0zMjgxLDcgKzMyODEsNyBAQAogCQkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IG9wZW5lZF9iZGV2W2NudF07CiAJCQlpZiAoIWJkZXYgfHwgSVRZUEUoZHJpdmVfc3RhdGVbY250XS5mZF9kZXZpY2UpICE9IHR5cGUpCiAJCQkJY29udGludWU7Ci0JCQlfX2ludmFsaWRhdGVfZGV2aWNlKGJkZXYpOworCQkJX19pbnZhbGlkYXRlX2RldmljZShiZGV2LCB0cnVlKTsKIAkJfQogCQltdXRleF91bmxvY2soJm9wZW5fbG9jayk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggNDRlMThjMC4uZGJmMzFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTc4LDcgKzc4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLXN0YXRpYyBERUZJTkVfTVVURVgobG9vcF9tdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKGxvb3BfZGV2aWNlcyk7CiBzdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfZGV2aWNlc19tdXRleCk7CiAKQEAgLTE1MDEsMTEgKzE1MDAsOSBAQAogewogCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAKLQltdXRleF9sb2NrKCZsb29wX211dGV4KTsKIAltdXRleF9sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKIAlsby0+bG9fcmVmY250Kys7CiAJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKLQltdXRleF91bmxvY2soJmxvb3BfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTE1LDcgKzE1MTIsNiBAQAogCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IGVycjsKIAotCW11dGV4X2xvY2soJmxvb3BfbXV0ZXgpOwogCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwogCiAJaWYgKC0tbG8tPmxvX3JlZmNudCkKQEAgLTE1NDAsNyArMTUzNiw2IEBACiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKIG91dF91bmxvY2tlZDoKLQltdXRleF91bmxvY2soJmxvb3BfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xNjQxLDYgKzE2MzYsOSBAQAogCiBzdGF0aWMgdm9pZCBsb29wX2ZyZWUoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIHsKKwlpZiAoIWxvLT5sb19xdWV1ZS0+cXVldWVfbG9jaykKKwkJbG8tPmxvX3F1ZXVlLT5xdWV1ZV9sb2NrID0gJmxvLT5sb19xdWV1ZS0+X19xdWV1ZV9sb2NrOworCiAJYmxrX2NsZWFudXBfcXVldWUobG8tPmxvX3F1ZXVlKTsKIAlwdXRfZGlzayhsby0+bG9fZGlzayk7CiAJbGlzdF9kZWwoJmxvLT5sb19saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IGEzMmZiNDEuLmU2ZmM3MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9uYmQuYwpAQCAtNTMsNyArNTMsNiBAQAogI2RlZmluZSBEQkdfQkxLREVWICAgICAgMHgwMTAwCiAjZGVmaW5lIERCR19SWCAgICAgICAgICAweDAyMDAKICNkZWZpbmUgREJHX1RYICAgICAgICAgIDB4MDQwMAotc3RhdGljIERFRklORV9NVVRFWChuYmRfbXV0ZXgpOwogc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1Z2ZsYWdzOwogI2VuZGlmIC8qIE5ERUJVRyAqLwogCkBAIC03MTgsMTEgKzcxNyw5IEBACiAJZHByaW50ayhEQkdfSU9DVEwsICIlczogbmJkX2lvY3RsIGNtZD0lcygweCV4KSBhcmc9JWx1XG4iLAogCQkJbG8tPmRpc2stPmRpc2tfbmFtZSwgaW9jdGxfY21kX3RvX2FzY2lpKGNtZCksIGNtZCwgYXJnKTsKIAotCW11dGV4X2xvY2soJm5iZF9tdXRleCk7CiAJbXV0ZXhfbG9jaygmbG8tPnR4X2xvY2spOwogCWVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbG8sIGNtZCwgYXJnKTsKIAltdXRleF91bmxvY2soJmxvLT50eF9sb2NrKTsKLQltdXRleF91bmxvY2soJm5iZF9tdXRleCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jIGIvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYwppbmRleCA5NDllZDA5Li42ZGNkNTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKQEAgLTM5LDYgKzM5LDExIEBACiAJLyogQXRoZXJvcyBBUjMwMTEgd2l0aCBzZmxhc2ggZmlybXdhcmUqLwogCXsgVVNCX0RFVklDRSgweDBDRjMsIDB4MzAwMikgfSwKIAorCS8qIEF0aGVyb3MgQVI5Mjg1IE1hbGJlYyB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLworCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MzExRCkgfSwKKworCS8qIEF0aGVyb3MgQVI1QkJVMTIgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAweEUwMkMpIH0sCiAJeyB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCkBAIC00NywzMyArNTIsMTYgQEAKICNkZWZpbmUgVVNCX1JFUV9ERlVfRE5MT0FECTEKICNkZWZpbmUgQlVMS19TSVpFCQk0MDk2CiAKLXN0cnVjdCBhdGgza19kYXRhIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQl1OCAqZndfZGF0YTsKLQl1MzIgZndfc2l6ZTsKLQl1MzIgZndfc2VudDsKLX07Ci0KLXN0YXRpYyBpbnQgYXRoM2tfbG9hZF9maXJtd2FyZShzdHJ1Y3QgYXRoM2tfZGF0YSAqZGF0YSwKLQkJCQl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZSwKLQkJCQlpbnQgY291bnQpCitzdGF0aWMgaW50IGF0aDNrX2xvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSkKIHsKIAl1OCAqc2VuZF9idWY7CiAJaW50IGVyciwgcGlwZSwgbGVuLCBzaXplLCBzZW50ID0gMDsKKwlpbnQgY291bnQgPSBmaXJtd2FyZS0+c2l6ZTsKIAotCUJUX0RCRygiYXRoM2sgJXAgdWRldiAlcCIsIGRhdGEsIGRhdGEtPnVkZXYpOworCUJUX0RCRygidWRldiAlcCIsIHVkZXYpOwogCi0JcGlwZSA9IHVzYl9zbmRjdHJscGlwZShkYXRhLT51ZGV2LCAwKTsKLQotCWlmICgodXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVkZXYsIHBpcGUsCi0JCQkJVVNCX1JFUV9ERlVfRE5MT0FELAotCQkJCVVTQl9UWVBFX1ZFTkRPUiwgMCwgMCwKLQkJCQlmaXJtd2FyZSwgMjAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKSkgPCAwKSB7Ci0JCUJUX0VSUigiQ2FuJ3QgY2hhbmdlIHRvIGxvYWRpbmcgY29uZmlndXJhdGlvbiBlcnIiKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0Jc2VudCArPSAyMDsKLQljb3VudCAtPSAyMDsKKwlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApOwogCiAJc2VuZF9idWYgPSBrbWFsbG9jKEJVTEtfU0laRSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFzZW5kX2J1ZikgewpAQCAtODEsMTIgKzY5LDIzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCW1lbWNweShzZW5kX2J1ZiwgZmlybXdhcmUtPmRhdGEsIDIwKTsKKwlpZiAoKGVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCBwaXBlLAorCQkJCVVTQl9SRVFfREZVX0ROTE9BRCwKKwkJCQlVU0JfVFlQRV9WRU5ET1IsIDAsIDAsCisJCQkJc2VuZF9idWYsIDIwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCkpIDwgMCkgeworCQlCVF9FUlIoIkNhbid0IGNoYW5nZSB0byBsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZXJyIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXNlbnQgKz0gMjA7CisJY291bnQgLT0gMjA7CisKIAl3aGlsZSAoY291bnQpIHsKIAkJc2l6ZSA9IG1pbl90KHVpbnQsIGNvdW50LCBCVUxLX1NJWkUpOwotCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRhdGEtPnVkZXYsIDB4MDIpOwotCQltZW1jcHkoc2VuZF9idWYsIGZpcm13YXJlICsgc2VudCwgc2l6ZSk7CisJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodWRldiwgMHgwMik7CisJCW1lbWNweShzZW5kX2J1ZiwgZmlybXdhcmUtPmRhdGEgKyBzZW50LCBzaXplKTsKIAotCQllcnIgPSB1c2JfYnVsa19tc2coZGF0YS0+dWRldiwgcGlwZSwgc2VuZF9idWYsIHNpemUsCisJCWVyciA9IHVzYl9idWxrX21zZyh1ZGV2LCBwaXBlLCBzZW5kX2J1Ziwgc2l6ZSwKIAkJCQkJJmxlbiwgMzAwMCk7CiAKIAkJaWYgKGVyciB8fCAobGVuICE9IHNpemUpKSB7CkBAIC0xMTIsNTcgKzExMSwyOCBAQAogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCBhdGgza19kYXRhICpkYXRhOwotCWludCBzaXplOwogCiAJQlRfREJHKCJpbnRmICVwIGlkICVwIiwgaW50ZiwgaWQpOwogCiAJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGF0YS0+dWRldiA9IHVkZXY7Ci0KIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsICJhdGgzay0xLmZ3IiwgJnVkZXYtPmRldikgPCAwKSB7Ci0JCWtmcmVlKGRhdGEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlzaXplID0gbWF4X3QodWludCwgZmlybXdhcmUtPnNpemUsIDQwOTYpOwotCWRhdGEtPmZ3X2RhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YS0+ZndfZGF0YSkgeworCWlmIChhdGgza19sb2FkX2Zpcm13YXJlKHVkZXYsIGZpcm13YXJlKSkgewogCQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKLQkJa2ZyZWUoZGF0YSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbWNweShkYXRhLT5md19kYXRhLCBmaXJtd2FyZS0+ZGF0YSwgZmlybXdhcmUtPnNpemUpOwotCWRhdGEtPmZ3X3NpemUgPSBmaXJtd2FyZS0+c2l6ZTsKLQlkYXRhLT5md19zZW50ID0gMDsKLQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGF0YSk7Ci0JaWYgKGF0aDNrX2xvYWRfZmlybXdhcmUoZGF0YSwgZGF0YS0+ZndfZGF0YSwgZGF0YS0+Zndfc2l6ZSkpIHsKLQkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKLQkJa2ZyZWUoZGF0YS0+ZndfZGF0YSk7Ci0JCWtmcmVlKGRhdGEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYXRoM2tfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKLQlzdHJ1Y3QgYXRoM2tfZGF0YSAqZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0KIAlCVF9EQkcoImF0aDNrX2Rpc2Nvbm5lY3QgaW50ZiAlcCIsIGludGYpOwotCi0Ja2ZyZWUoZGF0YS0+ZndfZGF0YSk7Ci0Ja2ZyZWUoZGF0YSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGgza19kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwppbmRleCAxZGE3NzNmOC4uNzAwYTM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC0xMDIsNiArMTAyLDEyIEBACiAJLyogQXRoZXJvcyAzMDExIHdpdGggc2ZsYXNoIGZpcm13YXJlICovCiAJeyBVU0JfREVWSUNFKDB4MGNmMywgMHgzMDAyKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSUdOT1JFIH0sCiAKKwkvKiBBdGhlcm9zIEFSOTI4NSBNYWxiZWMgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2YwLCAweDMxMWQpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwKKworCS8qIEF0aGVyb3MgQVI1QkJVMTIgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAweGUwMmMpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwKKwogCS8qIEJyb2FkY29tIEJDTTIwMzUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMzUpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9XUk9OR19TQ09fTVRVIH0sCiAJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMDBhKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JPTkdfU0NPX01UVSB9LApAQCAtODI2LDcgKzgzMiw3IEBACiAKIAlpZiAoaGRldi0+Y29ubl9oYXNoLnNjb19udW0gPiAwKSB7CiAJCWlmICghdGVzdF9iaXQoQlRVU0JfRElEX0lTT19SRVNVTUUsICZkYXRhLT5mbGFncykpIHsKLQkJCWVyciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkYXRhLT5pc29jKTsKKwkJCWVyciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkYXRhLT5pc29jID8gZGF0YS0+aXNvYyA6IGRhdGEtPmludGYpOwogCQkJaWYgKGVyciA8IDApIHsKIAkJCQljbGVhcl9iaXQoQlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwogCQkJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmlzb2NfYW5jaG9yKTsKQEAgLTg1NSw3ICs4NjEsNyBAQAogCiAJCV9fc2V0X2lzb2NfaW50ZXJmYWNlKGhkZXYsIDApOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJUVVNCX0RJRF9JU09fUkVTVU1FLCAmZGF0YS0+ZmxhZ3MpKQotCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRhdGEtPmlzb2MpOworCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRhdGEtPmlzb2MgPyBkYXRhLT5pc29jIDogZGF0YS0+aW50Zik7CiAJfQogfQogCkBAIC0xMDM4LDggKzEwNDQsNiBAQAogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkYXRhKTsKIAotCXVzYl9lbmFibGVfYXV0b3N1c3BlbmQoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCmluZGV4IDE0MDMzYTM2Li5lMmM0OGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKKysrIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCkBAIC00MDksNyArNDA5LDggQEAKIAl9CiAKIAlFTlNVUkUoZHJpdmVfc3RhdHVzLCBDRENfRFJJVkVfU1RBVFVTICk7Ci0JRU5TVVJFKG1lZGlhX2NoYW5nZWQsIENEQ19NRURJQV9DSEFOR0VEKTsKKwlpZiAoY2RvLT5jaGVja19ldmVudHMgPT0gTlVMTCAmJiBjZG8tPm1lZGlhX2NoYW5nZWQgPT0gTlVMTCkKKwkJKmNoYW5nZV9jYXBhYmlsaXR5ID0gfihDRENfTUVESUFfQ0hBTkdFRCB8IENEQ19TRUxFQ1RfRElTQyk7CiAJRU5TVVJFKHRyYXlfbW92ZSwgQ0RDX0NMT1NFX1RSQVkgfCBDRENfT1BFTl9UUkFZKTsKIAlFTlNVUkUobG9ja19kb29yLCBDRENfTE9DSyk7CiAJRU5TVVJFKHNlbGVjdF9zcGVlZCwgQ0RDX1NFTEVDVF9TUEVFRCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggNWJjNzY1ZC4uODIzOGY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtMzAsNiArMzAsNyBAQAogb2JqLSQoQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMKSArPSBhbWlzZXJpYWwubwogb2JqLSQoQ09ORklHX1NYKQkJKz0gc3gubyBnZW5lcmljX3NlcmlhbC5vCiBvYmotJChDT05GSUdfUklPKQkJKz0gcmlvLyBnZW5lcmljX3NlcmlhbC5vCitvYmotJChDT05GSUdfVklSVElPX0NPTlNPTEUpCSs9IHZpcnRpb19jb25zb2xlLm8KIG9iai0kKENPTkZJR19SQVdfRFJJVkVSKQkrPSByYXcubwogb2JqLSQoQ09ORklHX1NHSV9TTlNDKQkJKz0gc25zYy5vIHNuc2NfZXZlbnQubwogb2JqLSQoQ09ORklHX01TUEVDKQkJKz0gbXNwZWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCmluZGV4IGZjZDg2N2QuLmQ4YjFiNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKQEAgLTUwLDcgKzUwLDcgQEAKIAogY29uZmlnIEFHUF9BTUQKIAl0cmlzdGF0ZSAiQU1EIElyb25nYXRlLCA3NjEsIGFuZCA3NjIgY2hpcHNldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gQUdQICYmIChYODZfMzIgfHwgQUxQSEEpCisJZGVwZW5kcyBvbiBBR1AgJiYgWDg2XzMyCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZgogCSAgWCBvbiBBTUQgSXJvbmdhdGUsIDc2MSwgYW5kIDc2MiBjaGlwc2V0cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKaW5kZXggYjFiNDM2Mi4uNDU2ODFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKQEAgLTQxLDIyICs0MSw4IEBACiAJaWYgKHBhZ2VfbWFwLT5yZWFsID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0jaWZuZGVmIENPTkZJR19YODYKLQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2VfbWFwLT5yZWFsKSk7Ci0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7Ci0JcGFnZV9tYXAtPnJlbWFwcGVkID0gaW9yZW1hcF9ub2NhY2hlKHZpcnRfdG9fcGh5cyhwYWdlX21hcC0+cmVhbCksCi0JCQkJCSAgICBQQUdFX1NJWkUpOwotCWlmIChwYWdlX21hcC0+cmVtYXBwZWQgPT0gTlVMTCkgewotCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocGFnZV9tYXAtPnJlYWwpKTsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlX21hcC0+cmVhbCk7Ci0JCXBhZ2VfbWFwLT5yZWFsID0gTlVMTDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWdsb2JhbF9jYWNoZV9mbHVzaCgpOwotI2Vsc2UKIAlzZXRfbWVtb3J5X3VjKCh1bnNpZ25lZCBsb25nKXBhZ2VfbWFwLT5yZWFsLCAxKTsKIAlwYWdlX21hcC0+cmVtYXBwZWQgPSBwYWdlX21hcC0+cmVhbDsKLSNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKSB7CiAJCXdyaXRlbChhZ3BfYnJpZGdlLT5zY3JhdGNoX3BhZ2UsIHBhZ2VfbWFwLT5yZW1hcHBlZCtpKTsKQEAgLTY4LDEyICs1NCw3IEBACiAKIHN0YXRpYyB2b2lkIGFtZF9mcmVlX3BhZ2VfbWFwKHN0cnVjdCBhbWRfcGFnZV9tYXAgKnBhZ2VfbWFwKQogewotI2lmbmRlZiBDT05GSUdfWDg2Ci0JaW91bm1hcChwYWdlX21hcC0+cmVtYXBwZWQpOwotCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShwYWdlX21hcC0+cmVhbCkpOwotI2Vsc2UKIAlzZXRfbWVtb3J5X3diKCh1bnNpZ25lZCBsb25nKXBhZ2VfbWFwLT5yZWFsLCAxKTsKLSNlbmRpZgogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZV9tYXAtPnJlYWwpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCA5MjUyZTg1Li43ODA0OThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTc3MywxOCArNzczLDIzIEBACiAjZWxzZQogCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIllvdSBjYW4gYm9vdCB3aXRoIGFncD10cnlfdW5zdXBwb3J0ZWRcbiIpOwogI2VuZGlmCisJCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFncF9hbWQ2NF9wY2lfZHJpdmVyKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKIAkJLyogRmlyc3QgY2hlY2sgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBBTUQ2NCBOQiAqLwotCQlpZiAoIXBjaV9kZXZfcHJlc2VudChhbWRfbmJfbWlzY19pZHMpKQorCQlpZiAoIXBjaV9kZXZfcHJlc2VudChhbWRfbmJfbWlzY19pZHMpKSB7CisJCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFncF9hbWQ2NF9wY2lfZHJpdmVyKTsKIAkJCXJldHVybiAtRU5PREVWOworCQl9CiAKIAkJLyogTG9vayBmb3IgYW55IEFHUCBicmlkZ2UgKi8KIAkJYWdwX2FtZDY0X3BjaV9kcml2ZXIuaWRfdGFibGUgPSBhZ3BfYW1kNjRfcGNpX3Byb21pc2NfdGFibGU7CiAJCWVyciA9IGRyaXZlcl9hdHRhY2goJmFncF9hbWQ2NF9wY2lfZHJpdmVyLmRyaXZlcik7Ci0JCWlmIChlcnIgPT0gMCAmJiBhZ3BfYnJpZGdlc19mb3VuZCA9PSAwKQorCQlpZiAoZXJyID09IDAgJiYgYWdwX2JyaWRnZXNfZm91bmQgPT0gMCkgeworCQkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZ3BfYW1kNjRfcGNpX2RyaXZlcik7CiAJCQllcnIgPSAtRU5PREVWOworCQl9CiAJfQogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCA4NTdkZjEwLi5iMGEwZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTc3NCwyMCArNzc0LDE0IEBACiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkludGVsICVzIENoaXBzZXRcbiIsIGludGVsX2FncF9jaGlwc2V0c1tpXS5uYW1lKTsKIAogCS8qCi0JKiBJZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBwcm9wZXJseSBzZXR1cCwgdGhlIGZvbGxvd2luZyB3aWxsIGNhdGNoCi0JKiB0aGUgcHJvYmxlbSBhbmQgc2hvdWxkIHN0b3AgdGhlIHN5c3RlbSBmcm9tIGNyYXNoaW5nLgotCSogMjAwMzA2MTAgLSBoYW1pc2hAem90Lm9yZwotCSovCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKLQkJYWdwX3B1dF9icmlkZ2UoYnJpZGdlKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyoKIAkqIFRoZSBmb2xsb3dpbmcgZml4ZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIEJJT1MgaGFzICJmb3Jnb3R0ZW4iIHRvCiAJKiBwcm92aWRlIGFuIGFkZHJlc3MgcmFuZ2UgZm9yIHRoZSBHQVJULgogCSogMjAwMzA2MTAgLSBoYW1pc2hAem90Lm9yZworCSogVGhpcyBoYXBwZW5zIGJlZm9yZSBwY2lfZW5hYmxlX2RldmljZSgpIGludGVudGlvbmFsbHk7CisJKiBjYWxsaW5nIHBjaV9lbmFibGVfZGV2aWNlKCkgYmVmb3JlIGFzc2lnbmluZyB0aGUgcmVzb3VyY2UKKwkqIHdpbGwgcmVzdWx0IGluIHRoZSBHQVJUIGJlaW5nIGRpc2FibGVkIG9uIG1hY2hpbmVzIHdpdGggc3VjaAorCSogQklPU3MgKHRoZSBHQVJUIGVuZHMgdXAgd2l0aCBhIEJBUiBzdGFydGluZyBhdCAwLCB3aGljaAorCSogY29uZmxpY3RzIGEgbG90IG9mIG90aGVyIGRldmljZXMpLgogCSovCiAJciA9ICZwZGV2LT5yZXNvdXJjZVswXTsKIAlpZiAoIXItPnN0YXJ0ICYmIHItPmVuZCkgewpAQCAtNzk4LDYgKzc5MiwxNyBAQAogCQl9CiAJfQogCisJLyoKKwkqIElmIHRoZSBkZXZpY2UgaGFzIG5vdCBiZWVuIHByb3Blcmx5IHNldHVwLCB0aGUgZm9sbG93aW5nIHdpbGwgY2F0Y2gKKwkqIHRoZSBwcm9ibGVtIGFuZCBzaG91bGQgc3RvcCB0aGUgc3lzdGVtIGZyb20gY3Jhc2hpbmcuCisJKiAyMDAzMDYxMCAtIGhhbWlzaEB6b3Qub3JnCisJKi8KKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlhZ3BfcHV0X2JyaWRnZShicmlkZ2UpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAkvKiBGaWxsIGluIHRoZSBtb2RlIHJlZ2lzdGVyICovCiAJaWYgKGNhcF9wdHIpIHsKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5oIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuaAppbmRleCBjMTk1YmZlLi41ZmVlYmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5oCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmgKQEAgLTEzMCw2ICsxMzAsNyBAQAogI2RlZmluZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fMzUyTQkoMHhkIDw8IDQpCiAKICNkZWZpbmUgSTkxNV9JRlBBRERSICAgIDB4NjAKKyNkZWZpbmUgSTgzMF9ISUMgICAgICAgIDB4NzAKIAogLyogSW50ZWwgOTY1RyByZWdpc3RlcnMgKi8KICNkZWZpbmUgSTk2NV9NU0FDIDB4NjIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jCmluZGV4IDgyNmFiMDkuLjBkMDliNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1ndHQuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgImFncC5oIgogI2luY2x1ZGUgImludGVsLWFncC5oIgpAQCAtNjgsMTMgKzY5LDEwIEBACiAJcGh5c19hZGRyX3QgZ21hX2J1c19hZGRyOwogCXUzMiBQR0VUQkxfc2F2ZTsKIAl1MzIgX19pb21lbSAqZ3R0OwkJLyogSTkxNUcgKi8KKwlib29sIGNsZWFyX2Zha2VfYWdwOyAvKiBvbiBmaXJzdCBhY2Nlc3MgdmlhIGFncCwgZmlsbCB3aXRoIHNjcmF0Y2ggKi8KIAlpbnQgbnVtX2RjYWNoZV9lbnRyaWVzOwotCXVuaW9uIHsKLQkJdm9pZCBfX2lvbWVtICppOXh4X2ZsdXNoX3BhZ2U7Ci0JCXZvaWQgKmk4eHhfZmx1c2hfcGFnZTsKLQl9OworCXZvaWQgX19pb21lbSAqaTl4eF9mbHVzaF9wYWdlOwogCWNoYXIgKmk4MXhfZ3R0X3RhYmxlOwotCXN0cnVjdCBwYWdlICppOHh4X3BhZ2U7CiAJc3RydWN0IHJlc291cmNlIGlmcF9yZXNvdXJjZTsKIAlpbnQgcmVzb3VyY2VfdmFsaWQ7CiAJc3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTsKQEAgLTcyMSwyOCArNzE5LDYgQEAKIAogc3RhdGljIHZvaWQgaTgzMF9jbGVhbnVwKHZvaWQpCiB7Ci0JaWYgKGludGVsX3ByaXZhdGUuaTh4eF9mbHVzaF9wYWdlKSB7Ci0JCWt1bm1hcChpbnRlbF9wcml2YXRlLmk4eHhfZmx1c2hfcGFnZSk7Ci0JCWludGVsX3ByaXZhdGUuaTh4eF9mbHVzaF9wYWdlID0gTlVMTDsKLQl9Ci0KLQlfX2ZyZWVfcGFnZShpbnRlbF9wcml2YXRlLmk4eHhfcGFnZSk7Ci0JaW50ZWxfcHJpdmF0ZS5pOHh4X3BhZ2UgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9pODMwX3NldHVwX2ZsdXNoKHZvaWQpCi17Ci0JLyogcmV0dXJuIGlmIHdlJ3ZlIGFscmVhZHkgc2V0IHRoZSBmbHVzaCBtZWNoYW5pc20gdXAgKi8KLQlpZiAoaW50ZWxfcHJpdmF0ZS5pOHh4X3BhZ2UpCi0JCXJldHVybjsKLQotCWludGVsX3ByaXZhdGUuaTh4eF9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIWludGVsX3ByaXZhdGUuaTh4eF9wYWdlKQotCQlyZXR1cm47Ci0KLQlpbnRlbF9wcml2YXRlLmk4eHhfZmx1c2hfcGFnZSA9IGttYXAoaW50ZWxfcHJpdmF0ZS5pOHh4X3BhZ2UpOwotCWlmICghaW50ZWxfcHJpdmF0ZS5pOHh4X2ZsdXNoX3BhZ2UpCi0JCWk4MzBfY2xlYW51cCgpOwogfQogCiAvKiBUaGUgY2hpcHNldF9mbHVzaCBpbnRlcmZhY2UgbmVlZHMgdG8gZ2V0IGRhdGEgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCkBAIC03NTcsMTQgKzczMywyNyBAQAogICovCiBzdGF0aWMgdm9pZCBpODMwX2NoaXBzZXRfZmx1c2godm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgKnBnID0gaW50ZWxfcHJpdmF0ZS5pOHh4X2ZsdXNoX3BhZ2U7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CiAKLQltZW1zZXQocGcsIDAsIDEwMjQpOworCS8qIEZvcmNpYmx5IGV2aWN0IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgQ1BVIHdyaXRlIGJ1ZmZlcnMuCisJICogY2xmbHVzaCBhcHBlYXJzIHRvIGJlIGluc3VmZmljaWVudC4KKwkgKi8KKwl3YmludmRfb25fYWxsX2NwdXMoKTsKIAotCWlmIChjcHVfaGFzX2NsZmx1c2gpCi0JCWNsZmx1c2hfY2FjaGVfcmFuZ2UocGcsIDEwMjQpOwotCWVsc2UgaWYgKHdiaW52ZF9vbl9hbGxfY3B1cygpICE9IDApCi0JCXByaW50ayhLRVJOX0VSUiAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGNhY2hlIGZsdXNoLlxuIik7CisJLyogTm93IHdlJ3ZlIG9ubHkgc2VlbiBkb2N1bWVudHMgZm9yIHRoaXMgbWFnaWMgYml0IG9uIDg1NUdNLAorCSAqIHdlIGhvcGUgaXQgZXhpc3RzIGZvciB0aGUgb3RoZXIgZ2VuMiBjaGlwc2V0cy4uLgorCSAqCisJICogQWxzbyB3b3JrcyBhcyBhZHZlcnRpc2VkIG9uIG15IDg0NUcuCisJICovCisJd3JpdGVsKHJlYWRsKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MzBfSElDKSB8ICgxPDwzMSksCisJICAgICAgIGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MzBfSElDKTsKKworCXdoaWxlIChyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODMwX0hJQykgJiAoMTw8MzEpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJYnJlYWs7CisKKwkJdWRlbGF5KDUwKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGk4MzBfd3JpdGVfZW50cnkoZG1hX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBpbnQgZW50cnksCkBAIC04NDgsOCArODM3LDYgQEAKIAogCWludGVsX3ByaXZhdGUuZ3R0X2J1c19hZGRyID0gcmVnX2FkZHIgKyBJODEwX1BURV9CQVNFOwogCi0JaW50ZWxfaTgzMF9zZXR1cF9mbHVzaCgpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg2OSwyMSArODU2LDEyIEBACiAKIHN0YXRpYyBpbnQgaW50ZWxfZmFrZV9hZ3BfY29uZmlndXJlKHZvaWQpCiB7Ci0JaW50IGk7Ci0KIAlpZiAoIWludGVsX2VuYWJsZV9ndHQoKSkKIAkgICAgcmV0dXJuIC1FSU87CiAKKwlpbnRlbF9wcml2YXRlLmNsZWFyX2Zha2VfYWdwID0gdHJ1ZTsKIAlhZ3BfYnJpZGdlLT5nYXJ0X2J1c19hZGRyID0gaW50ZWxfcHJpdmF0ZS5nbWFfYnVzX2FkZHI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfcHJpdmF0ZS5iYXNlLmd0dF90b3RhbF9lbnRyaWVzOyBpKyspIHsKLQkJaW50ZWxfcHJpdmF0ZS5kcml2ZXItPndyaXRlX2VudHJ5KGludGVsX3ByaXZhdGUuc2NyYXRjaF9wYWdlX2RtYSwKLQkJCQkJCSAgaSwgMCk7Ci0JfQotCXJlYWRsKGludGVsX3ByaXZhdGUuZ3R0K2ktMSk7CS8qIFBDSSBQb3N0aW5nLiAqLwotCi0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtOTQ1LDYgKzkyMywxMyBAQAogewogCWludCByZXQgPSAtRUlOVkFMOwogCisJaWYgKGludGVsX3ByaXZhdGUuY2xlYXJfZmFrZV9hZ3ApIHsKKwkJaW50IHN0YXJ0ID0gaW50ZWxfcHJpdmF0ZS5iYXNlLnN0b2xlbl9zaXplIC8gUEFHRV9TSVpFOworCQlpbnQgZW5kID0gaW50ZWxfcHJpdmF0ZS5iYXNlLmd0dF9tYXBwYWJsZV9lbnRyaWVzOworCQlpbnRlbF9ndHRfY2xlYXJfcmFuZ2Uoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKwkJaW50ZWxfcHJpdmF0ZS5jbGVhcl9mYWtlX2FncCA9IGZhbHNlOworCX0KKwogCWlmIChJTlRFTF9HVFRfR0VOID09IDEgJiYgdHlwZSA9PSBBR1BfRENBQ0hFX01FTU9SWSkKIAkJcmV0dXJuIGk4MTBfaW5zZXJ0X2RjYWNoZV9lbnRyaWVzKG1lbSwgcGdfc3RhcnQsIHR5cGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYmZpbl9qdGFnX2NvbW0uYyBiL2RyaXZlcnMvY2hhci9iZmluX2p0YWdfY29tbS5jCmluZGV4IGUzOTdkZjMuLjE2NDAyNDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYmZpbl9qdGFnX2NvbW0uYworKysgYi9kcml2ZXJzL2NoYXIvYmZpbl9qdGFnX2NvbW0uYwpAQCAtMTgzLDE2ICsxODMsMTYgQEAKIH0KIAogI2lmbmRlZiBDT05GSUdfQkZJTl9KVEFHX0NPTU1fQ09OU09MRQotIyBkZWZpbmUgYWNxdWlyZV9jb25zb2xlX3NlbSgpCi0jIGRlZmluZSByZWxlYXNlX2NvbnNvbGVfc2VtKCkKKyMgZGVmaW5lIGNvbnNvbGVfbG9jaygpCisjIGRlZmluZSBjb25zb2xlX3VubG9jaygpCiAjZW5kaWYKIHN0YXRpYyBpbnQKIGJmaW5famNfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJaW50IGk7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWkgPSBiZmluX2pjX2NpcmNfd3JpdGUoYnVmLCBjb3VudCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJd2FrZV91cF9wcm9jZXNzKGJmaW5famNfa3RocmVhZCk7CiAJcmV0dXJuIGk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IGI2YWU2ZTkuLjc4NTVmOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0zMjAsNiArMzIwLDcgQEAKIHN0YXRpYyBpbnQgYWRkX3NtaShzdHJ1Y3Qgc21pX2luZm8gKnNtaSk7CiBzdGF0aWMgaW50IHRyeV9zbWlfaW5pdChzdHJ1Y3Qgc21pX2luZm8gKnNtaSk7CiBzdGF0aWMgdm9pZCBjbGVhbnVwX29uZV9zaShzdHJ1Y3Qgc21pX2luZm8gKnRvX2NsZWFuKTsKK3N0YXRpYyB2b2lkIGNsZWFudXBfaXBtaV9zaSh2b2lkKTsKIAogc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKHhhY3Rpb25fbm90aWZpZXJfbGlzdCk7CiBzdGF0aWMgaW50IHJlZ2lzdGVyX3hhY3Rpb25fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKQEAgLTM0NTAsMTYgKzM0NTEsNyBAQAogCW11dGV4X2xvY2soJnNtaV9pbmZvc19sb2NrKTsKIAlpZiAodW5sb2FkX3doZW5fZW1wdHkgJiYgbGlzdF9lbXB0eSgmc21pX2luZm9zKSkgewogCQltdXRleF91bmxvY2soJnNtaV9pbmZvc19sb2NrKTsKLSNpZmRlZiBDT05GSUdfUENJCi0JCWlmIChwY2lfcmVnaXN0ZXJlZCkKLQkJCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXBtaV9wY2lfZHJpdmVyKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BQQ19PRgotCQlpZiAob2ZfcmVnaXN0ZXJlZCkKLQkJCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZpcG1pX29mX3BsYXRmb3JtX2RyaXZlcik7Ci0jZW5kaWYKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJmlwbWlfZHJpdmVyLmRyaXZlcik7CisJCWNsZWFudXBfaXBtaV9zaSgpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAogCQkgICAgICAgIlVuYWJsZSB0byBmaW5kIGFueSBTeXN0ZW0gSW50ZXJmYWNlKHMpXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwppbmRleCA3NzcxODFhLi5iY2JiYzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKQEAgLTgzMCw4ICs4MzAsNyBAQAogCQkJICAgIHRlc3RfYml0KElTX0FOWV9UMSwgJmRldi0+ZmxhZ3MpKSkgewogCQkJCURFQlVHUCg0LCBkZXYsICJQZXJmb3JtIEFVVE9QUFNcbiIpOwogCQkJCXNldF9iaXQoSVNfQVVUT1BQU19BQ1QsICZkZXYtPmZsYWdzKTsKLQkJCQlwdHNyZXEucHJvdG9jb2wgPSBwdHNyZXEucHJvdG9jb2wgPQotCQkJCSAgICAoMHgwMSA8PCBkZXYtPnByb3RvKTsKKwkJCQlwdHNyZXEucHJvdG9jb2wgPSAoMHgwMSA8PCBkZXYtPnByb3RvKTsKIAkJCQlwdHNyZXEuZmxhZ3MgPSAweDAxOwogCQkJCXB0c3JlcS5wdHMxID0gMHgwMDsKIAkJCQlwdHNyZXEucHRzMiA9IDB4MDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uYwppbmRleCA5NGI4ZWI0Li40NDQxNTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmMKQEAgLTc4LDcgKzc4LDYgQEAKIHN0YXRpYyBpbnQgaXB3aXJlbGVzc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHZvaWQgKnByaXZfZGF0YSkKIHsKIAlzdHJ1Y3QgaXB3X2RldiAqaXB3ID0gcHJpdl9kYXRhOwotCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzb3VyY2U7CiAJaW50IHJldDsKIAogCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKQEAgLTkyLDkgKzkxLDEyIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlvX3Jlc291cmNlID0gcmVxdWVzdF9yZWdpb24ocF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCwKLQkJCQlyZXNvdXJjZV9zaXplKHBfZGV2LT5yZXNvdXJjZVswXSksCi0JCQkJSVBXSVJFTEVTU19QQ0NBUkRfTkFNRSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkJICAgIHJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzBdKSwKKwkJCSAgICBJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDsKKwl9CiAKIAlwX2Rldi0+cmVzb3VyY2VbMl0tPmZsYWdzIHw9CiAJCVdJTl9EQVRBX1dJRFRIXzE2IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRTsKQEAgLTEwNSwyMiArMTA3LDI1IEBACiAKIAlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LCBwX2Rldi0+cmVzb3VyY2VbMl0sIHBfZGV2LT5jYXJkX2FkZHIpOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBleGl0MjsKKwkJZ290byBleGl0MTsKIAogCWlwdy0+aXNfdjJfY2FyZCA9IHJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzJdKSA9PSAweDEwMDsKIAotCWlwdy0+YXR0cl9tZW1vcnkgPSBpb3JlbWFwKHBfZGV2LT5yZXNvdXJjZVsyXS0+c3RhcnQsCisJaXB3LT5jb21tb25fbWVtb3J5ID0gaW9yZW1hcChwX2Rldi0+cmVzb3VyY2VbMl0tPnN0YXJ0LAogCQkJCXJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzJdKSk7Ci0JcmVxdWVzdF9tZW1fcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVsyXS0+c3RhcnQsCi0JCQlyZXNvdXJjZV9zaXplKHBfZGV2LT5yZXNvdXJjZVsyXSksCi0JCQlJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMl0tPnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzJdKSwKKwkJCQlJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDI7CisJfQogCiAJcF9kZXYtPnJlc291cmNlWzNdLT5mbGFncyB8PSBXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9BTSB8CiAJCQkJCVdJTl9FTkFCTEU7CiAJcF9kZXYtPnJlc291cmNlWzNdLT5lbmQgPSAwOyAvKiB0aGlzIHVzZWQgdG8gYmUgMHgxMDAwICovCiAJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KHBfZGV2LCBwX2Rldi0+cmVzb3VyY2VbM10sIDApOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBleGl0MjsKKwkJZ290byBleGl0MzsKIAogCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIHBfZGV2LT5yZXNvdXJjZVszXSwgMCk7CiAJaWYgKHJldCAhPSAwKQpAQCAtMTI4LDIzICsxMzMsMjggQEAKIAogCWlwdy0+YXR0cl9tZW1vcnkgPSBpb3JlbWFwKHBfZGV2LT5yZXNvdXJjZVszXS0+c3RhcnQsCiAJCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbM10pKTsKLQlyZXF1ZXN0X21lbV9yZWdpb24ocF9kZXYtPnJlc291cmNlWzNdLT5zdGFydCwKLQkJCXJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzNdKSwKLQkJCUlQV0lSRUxFU1NfUENDQVJEX05BTUUpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVszXS0+c3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbM10pLAorCQkJCUlQV0lSRUxFU1NfUENDQVJEX05BTUUpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBleGl0NDsKKwl9CiAKIAlyZXR1cm4gMDsKIAorZXhpdDQ6CisJaW91bm1hcChpcHctPmF0dHJfbWVtb3J5KTsKIGV4aXQzOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMl0tPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMl0pKTsKIGV4aXQyOgotCWlmIChpcHctPmNvbW1vbl9tZW1vcnkpIHsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVsyXS0+c3RhcnQsCi0JCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMl0pKTsKLQkJaW91bm1hcChpcHctPmNvbW1vbl9tZW1vcnkpOwotCX0KKwlpb3VubWFwKGlwdy0+Y29tbW9uX21lbW9yeSk7CiBleGl0MToKLQlyZWxlYXNlX3Jlc291cmNlKGlvX3Jlc291cmNlKTsKKwlyZWxlYXNlX3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkgICAgICAgcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMF0pKTsKK2V4aXQ6CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHBfZGV2KTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBjb25maWdfaXB3aXJlbGVzcyhzdHJ1Y3QgaXB3X2RldiAqaXB3KQpAQCAtMjE5LDYgKzIyOSw4IEBACiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfaXB3aXJlbGVzcyhzdHJ1Y3QgaXB3X2RldiAqaXB3KQogeworCXJlbGVhc2VfcmVnaW9uKGlwdy0+bGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkgICAgICAgcmVzb3VyY2Vfc2l6ZShpcHctPmxpbmstPnJlc291cmNlWzBdKSk7CiAJaWYgKGlwdy0+Y29tbW9uX21lbW9yeSkgewogCQlyZWxlYXNlX21lbV9yZWdpb24oaXB3LT5saW5rLT5yZXNvdXJjZVsyXS0+c3RhcnQsCiAJCQkJcmVzb3VyY2Vfc2l6ZShpcHctPmxpbmstPnJlc291cmNlWzJdKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCmluZGV4IGMxN2EzMDUuLmRkMjFkZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCkBAIC00OTMsOSArNDkzLDYgQEAKIAkJICIxLjIgVFBNIChkZXZpY2UtaWQgMHglWCwgcmV2LWlkICVkKVxuIiwKIAkJIHZlbmRvciA+PiAxNiwgaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgVFBNX1JJRCgwKSkpOwogCi0JaWYgKGlzX2l0cG0odG9fcG5wX2RldihkZXYpKSkKLQkJaXRwbSA9IDE7Ci0KIAlpZiAoaXRwbSkKIAkJZGV2X2luZm8oZGV2LCAiSW50ZWwgaVRQTSB3b3JrYXJvdW5kIGVuYWJsZWRcbiIpOwogCkBAIC02MzcsNiArNjM0LDkgQEAKIAllbHNlCiAJCWludGVycnVwdHMgPSAwOwogCisJaWYgKGlzX2l0cG0ocG5wX2RldikpCisJCWl0cG0gPSAxOworCiAJcmV0dXJuIHRwbV90aXNfaW5pdCgmcG5wX2Rldi0+ZGV2LCBzdGFydCwgbGVuLCBpcnEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9odmMvdmlydGlvX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGRyaXZlcnMvdHR5L2h2Yy92aXJ0aW9fY29uc29sZS5jCnJlbmFtZSB0byBkcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwppbmRleCA4OTZhMmNlLi44NGIxNjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9odmMvdmlydGlvX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgUnVzdHkgUnVzc2VsbCwgSUJNIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBBbWl0IFNoYWggPGFtaXQuc2hhaEByZWRoYXQuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzEsNyArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgImh2Y19jb25zb2xlLmgiCisjaW5jbHVkZSAiLi4vdHR5L2h2Yy9odmNfY29uc29sZS5oIgogCiAvKgogICogVGhpcyBpcyBhIGdsb2JhbCBzdHJ1Y3QgZm9yIHN0b3JpbmcgY29tbW9uIGRhdGEgZm9yIGFsbCB0aGUgZGV2aWNlcwpAQCAtMzg3LDYgKzM4OCwxMCBAQAogCXVuc2lnbmVkIGludCBsZW47CiAJaW50IHJldDsKIAorCWlmICghcG9ydC0+cG9ydGRldikgeworCQkvKiBEZXZpY2UgaGFzIGJlZW4gdW5wbHVnZ2VkLiAgdnFzIGFyZSBhbHJlYWR5IGdvbmUuICovCisJCXJldHVybjsKKwl9CiAJdnEgPSBwb3J0LT5pbl92cTsKIAlpZiAocG9ydC0+aW5idWYpCiAJCWJ1ZiA9IHBvcnQtPmluYnVmOwpAQCAtNDY5LDYgKzQ3NCwxMCBAQAogCXZvaWQgKmJ1ZjsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCisJaWYgKCFwb3J0LT5wb3J0ZGV2KSB7CisJCS8qIERldmljZSBoYXMgYmVlbiB1bnBsdWdnZWQuICB2cXMgYXJlIGFscmVhZHkgZ29uZS4gKi8KKwkJcmV0dXJuOworCX0KIAl3aGlsZSAoKGJ1ZiA9IHZpcnRxdWV1ZV9nZXRfYnVmKHBvcnQtPm91dF92cSwgJmxlbikpKSB7CiAJCWtmcmVlKGJ1Zik7CiAJCXBvcnQtPm91dHZxX2Z1bGwgPSBmYWxzZTsKQEAgLTE0NjIsNiArMTQ3MSwxNyBAQAogCXNwaW5fdW5sb2NrKCZwb3J0ZGV2LT5jdnFfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIG91dF9pbnRyKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92cSh2cS0+dmRldi0+cHJpdiwgdnEpOworCWlmICghcG9ydCkKKwkJcmV0dXJuOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT53YWl0cXVldWUpOworfQorCiBzdGF0aWMgdm9pZCBpbl9pbnRyKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQogewogCXN0cnVjdCBwb3J0ICpwb3J0OwpAQCAtMTU2Niw3ICsxNTg2LDcgQEAKIAkgKi8KIAlqID0gMDsKIAlpb19jYWxsYmFja3Nbal0gPSBpbl9pbnRyOwotCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBOVUxMOworCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBvdXRfaW50cjsKIAlpb19uYW1lc1tqXSA9ICJpbnB1dCI7CiAJaW9fbmFtZXNbaiArIDFdID0gIm91dHB1dCI7CiAJaiArPSAyOwpAQCAtMTU4MCw3ICsxNjAwLDcgQEAKIAkJZm9yIChpID0gMTsgaSA8IG5yX3BvcnRzOyBpKyspIHsKIAkJCWogKz0gMjsKIAkJCWlvX2NhbGxiYWNrc1tqXSA9IGluX2ludHI7Ci0JCQlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwkJCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBvdXRfaW50cjsKIAkJCWlvX25hbWVzW2pdID0gImlucHV0IjsKIAkJCWlvX25hbWVzW2ogKyAxXSA9ICJvdXRwdXQiOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCmluZGV4IGNmYjBmNTIuLmVmZmU3OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCkBAIC0yMDIsMTcgKzIwMiwyMSBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiUE0tVGltZXIgaGFkIGluY29uc2lzdGVudCByZXN1bHRzOiIKIAkJCSAgICAgICAiIDB4JSNsbHgsIDB4JSNsbHggLSBhYm9ydGluZy5cbiIsCiAJCQkgICAgICAgdmFsdWUxLCB2YWx1ZTIpOworCQkJcG10bXJfaW9wb3J0ID0gMDsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChpID09IEFDUElfUE1fUkVBRF9DSEVDS1MpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIlBNLVRpbWVyIGZhaWxlZCBjb25zaXN0ZW5jeSBjaGVjayAiCiAJCQkgICAgICAgIiAoMHglI2xseCkgLSBhYm9ydGluZy5cbiIsIHZhbHVlMSk7CisJCQlwbXRtcl9pb3BvcnQgPSAwOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKLQlpZiAodmVyaWZ5X3BtdG1yX3JhdGUoKSAhPSAwKQorCWlmICh2ZXJpZnlfcG10bXJfcmF0ZSgpICE9IDApeworCQlwbXRtcl9pb3BvcnQgPSAwOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX2FjcGlfcG0sCiAJCQkJCQlQTVRNUl9USUNLU19QRVJfU0VDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGNiX2Nsa3NyYy5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKaW5kZXggMDFiODg2ZS4uNzljNDdlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKQEAgLTE5Niw5ICsxOTYsOSBAQAogCWNsa2V2dC5jbGtldnQubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygxLCAmY2xrZXZ0LmNsa2V2dCkgKyAxOwogCWNsa2V2dC5jbGtldnQuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CiAKLQlzZXR1cF9pcnEoaXJxLCAmdGNfaXJxYWN0aW9uKTsKLQogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmY2xrZXZ0LmNsa2V2dCk7CisKKwlzZXR1cF9pcnEoaXJxLCAmdGNfaXJxYWN0aW9uKTsKIH0KIAogI2Vsc2UgLyogIUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwppbmRleCAxMTA5ZjY4Li41Y2I0ZDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKQEAgLTE5MTksOCArMTkxOSwxMCBAQAogCiAJcmV0ID0gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywKIAkJCQkJJmNwdWZyZXFfc3lzZGV2X2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfbnVsbF9kcml2ZXI7CiAKLQlpZiAoKCFyZXQpICYmICEoY3B1ZnJlcV9kcml2ZXItPmZsYWdzICYgQ1BVRlJFUV9TVElDS1kpKSB7CisJaWYgKCEoY3B1ZnJlcV9kcml2ZXItPmZsYWdzICYgQ1BVRlJFUV9TVElDS1kpKSB7CiAJCWludCBpOwogCQlyZXQgPSAtRU5PREVWOwogCkBAIC0xOTM1LDIxICsxOTM3LDIyIEBACiAJCWlmIChyZXQpIHsKIAkJCWRwcmludGsoIm5vIENQVSBpbml0aWFsaXplZCBmb3IgZHJpdmVyICVzXG4iLAogCQkJCQkJCWRyaXZlcl9kYXRhLT5uYW1lKTsKLQkJCXN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywKLQkJCQkJCSZjcHVmcmVxX3N5c2Rldl9kcml2ZXIpOwotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOwotCQkJY3B1ZnJlcV9kcml2ZXIgPSBOVUxMOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOworCQkJZ290byBlcnJfc3lzZGV2X3VucmVnOwogCQl9CiAJfQogCi0JaWYgKCFyZXQpIHsKLQkJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZjcHVmcmVxX2NwdV9ub3RpZmllcik7Ci0JCWRwcmludGsoImRyaXZlciAlcyB1cCBhbmQgcnVubmluZ1xuIiwgZHJpdmVyX2RhdGEtPm5hbWUpOwotCQljcHVmcmVxX2RlYnVnX2VuYWJsZV9yYXRlbGltaXQoKTsKLQl9CisJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZjcHVmcmVxX2NwdV9ub3RpZmllcik7CisJZHByaW50aygiZHJpdmVyICVzIHVwIGFuZCBydW5uaW5nXG4iLCBkcml2ZXJfZGF0YS0+bmFtZSk7CisJY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KCk7CiAKKwlyZXR1cm4gMDsKK2Vycl9zeXNkZXZfdW5yZWc6CisJc3lzZGV2X2RyaXZlcl91bnJlZ2lzdGVyKCZjcHVfc3lzZGV2X2NsYXNzLAorCQkJJmNwdWZyZXFfc3lzZGV2X2RyaXZlcik7CitlcnJfbnVsbF9kcml2ZXI6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwljcHVmcmVxX2RyaXZlciA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9hbWJhLXBsMDh4LmMgYi9kcml2ZXJzL2RtYS9hbWJhLXBsMDh4LmMKaW5kZXggMjk3ZjQ4Yi4uMDdiY2E0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvYW1iYS1wbDA4eC5jCisrKyBiL2RyaXZlcnMvZG1hL2FtYmEtcGwwOHguYwpAQCAtNzksNiArNzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgpAQCAtMjM1LDE2ICsyMzYsMTkgQEAKIH0KIAogLyoKLSAqIE92ZXJhbGwgRE1BQyByZW1haW5zIGVuYWJsZWQgYWx3YXlzLgorICogUGF1c2UgdGhlIGNoYW5uZWwgYnkgc2V0dGluZyB0aGUgSEFMVCBiaXQuCiAgKgotICogRGlzYWJsaW5nIGluZGl2aWR1YWwgY2hhbm5lbHMgY291bGQgbG9zZSBkYXRhLgorICogRm9yIE0tPlAgdHJhbnNmZXJzLCBwYXVzZSB0aGUgRE1BQyBmaXJzdCBhbmQgdGhlbiBzdG9wIHRoZSBwZXJpcGhlcmFsIC0KKyAqIHRoZSBGSUZPIGNhbiBvbmx5IGRyYWluIGlmIHRoZSBwZXJpcGhlcmFsIGlzIHN0aWxsIHJlcXVlc3RpbmcgZGF0YS4KKyAqIChub3RlOiB0aGlzIGNhbiBzdGlsbCB0aW1lb3V0IGlmIHRoZSBETUFDIEZJRk8gbmV2ZXIgZHJhaW5zIG9mIGRhdGEuKQogICoKLSAqIERpc2FibGUgdGhlIHBlcmlwaGVyYWwgRE1BIGFmdGVyIGRpc2FibGluZyB0aGUgRE1BQyBpbiBvcmRlciB0byBhbGxvdwotICogdGhlIERNQUMgRklGTyB0byBkcmFpbiwgYW5kIGhlbmNlIGFsbG93IHRoZSBjaGFubmVsIHRvIHNob3cgaW5hY3RpdmUKKyAqIEZvciBQLT5NIHRyYW5zZmVycywgZGlzYWJsZSB0aGUgcGVyaXBoZXJhbCBmaXJzdCB0byBzdG9wIGl0IGZpbGxpbmcKKyAqIHRoZSBETUFDIEZJRk8sIGFuZCB0aGVuIHBhdXNlIHRoZSBETUFDLgogICovCiBzdGF0aWMgdm9pZCBwbDA4eF9wYXVzZV9waHlfY2hhbihzdHJ1Y3QgcGwwOHhfcGh5X2NoYW4gKmNoKQogewogCXUzMiB2YWw7CisJaW50IHRpbWVvdXQ7CiAKIAkvKiBTZXQgdGhlIEhBTFQgYml0IGFuZCB3YWl0IGZvciB0aGUgRklGTyB0byBkcmFpbiAqLwogCXZhbCA9IHJlYWRsKGNoLT5iYXNlICsgUEwwODBfQ0hfQ09ORklHKTsKQEAgLTI1Miw4ICsyNTYsMTMgQEAKIAl3cml0ZWwodmFsLCBjaC0+YmFzZSArIFBMMDgwX0NIX0NPTkZJRyk7CiAKIAkvKiBXYWl0IGZvciBjaGFubmVsIGluYWN0aXZlICovCi0Jd2hpbGUgKHBsMDh4X3BoeV9jaGFubmVsX2J1c3koY2gpKQotCQljcHVfcmVsYXgoKTsKKwlmb3IgKHRpbWVvdXQgPSAxMDAwOyB0aW1lb3V0OyB0aW1lb3V0LS0pIHsKKwkJaWYgKCFwbDA4eF9waHlfY2hhbm5lbF9idXN5KGNoKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCWlmIChwbDA4eF9waHlfY2hhbm5lbF9idXN5KGNoKSkKKwkJcHJfZXJyKCJwbDA4eDogY2hhbm5lbCV1IHRpbWVvdXQgd2FpdGluZyBmb3IgcGF1c2VcbiIsIGNoLT5pZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBsMDh4X3Jlc3VtZV9waHlfY2hhbihzdHJ1Y3QgcGwwOHhfcGh5X2NoYW4gKmNoKQpAQCAtMjY3LDE5ICsyNzYsMjQgQEAKIH0KIAogCi0vKiBTdG9wcyB0aGUgY2hhbm5lbCAqLwotc3RhdGljIHZvaWQgcGwwOHhfc3RvcF9waHlfY2hhbihzdHJ1Y3QgcGwwOHhfcGh5X2NoYW4gKmNoKQorLyoKKyAqIHBsMDh4X3Rlcm1pbmF0ZV9waHlfY2hhbigpIHN0b3BzIHRoZSBjaGFubmVsLCBjbGVhcnMgdGhlIEZJRk8gYW5kCisgKiBjbGVhcnMgYW55IHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cy4gIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGZvcgorICogYW4gb24tZ29pbmcgdHJhbnNmZXIsIGJ1dCBhcyBhIG1ldGhvZCBvZiBzaHV0dGluZyBkb3duIGEgY2hhbm5lbAorICogKGVnLCB3aGVuIGl0J3Mgbm8gbG9uZ2VyIHVzZWQpIG9yIHRlcm1pbmF0aW5nIGEgdHJhbnNmZXIuCisgKi8KK3N0YXRpYyB2b2lkIHBsMDh4X3Rlcm1pbmF0ZV9waHlfY2hhbihzdHJ1Y3QgcGwwOHhfZHJpdmVyX2RhdGEgKnBsMDh4LAorCXN0cnVjdCBwbDA4eF9waHlfY2hhbiAqY2gpCiB7Ci0JdTMyIHZhbDsKKwl1MzIgdmFsID0gcmVhZGwoY2gtPmJhc2UgKyBQTDA4MF9DSF9DT05GSUcpOwogCi0JcGwwOHhfcGF1c2VfcGh5X2NoYW4oY2gpOworCXZhbCAmPSB+KFBMMDgwX0NPTkZJR19FTkFCTEUgfCBQTDA4MF9DT05GSUdfRVJSX0lSUV9NQVNLIHwKKwkgICAgICAgICBQTDA4MF9DT05GSUdfVENfSVJRX01BU0spOwogCi0JLyogRGlzYWJsZSBjaGFubmVsICovCi0JdmFsID0gcmVhZGwoY2gtPmJhc2UgKyBQTDA4MF9DSF9DT05GSUcpOwotCXZhbCAmPSB+UEwwODBfQ09ORklHX0VOQUJMRTsKLQl2YWwgJj0gflBMMDgwX0NPTkZJR19FUlJfSVJRX01BU0s7Ci0JdmFsICY9IH5QTDA4MF9DT05GSUdfVENfSVJRX01BU0s7CiAJd3JpdGVsKHZhbCwgY2gtPmJhc2UgKyBQTDA4MF9DSF9DT05GSUcpOworCisJd3JpdGVsKDEgPDwgY2gtPmlkLCBwbDA4eC0+YmFzZSArIFBMMDgwX0VSUl9DTEVBUik7CisJd3JpdGVsKDEgPDwgY2gtPmlkLCBwbDA4eC0+YmFzZSArIFBMMDgwX1RDX0NMRUFSKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgZ2V0X2J5dGVzX2luX2NjdGwodTMyIGNjdGwpCkBAIC00MDQsMTMgKzQxOCwxMiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKKwogCS8qIFN0b3AgdGhlIGNoYW5uZWwgYW5kIGNsZWFyIGl0cyBpbnRlcnJ1cHRzICovCi0JcGwwOHhfc3RvcF9waHlfY2hhbihjaCk7Ci0Jd3JpdGVsKCgxIDw8IGNoLT5pZCksIHBsMDh4LT5iYXNlICsgUEwwODBfRVJSX0NMRUFSKTsKLQl3cml0ZWwoKDEgPDwgY2gtPmlkKSwgcGwwOHgtPmJhc2UgKyBQTDA4MF9UQ19DTEVBUik7CisJcGwwOHhfdGVybWluYXRlX3BoeV9jaGFuKHBsMDh4LCBjaCk7CiAKIAkvKiBNYXJrIGl0IGFzIGZyZWUgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKIAljaC0+c2VydmluZyA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTE0NDksNyArMTQ2Miw3IEBACiAJCXBsY2hhbi0+c3RhdGUgPSBQTDA4WF9DSEFOX0lETEU7CiAKIAkJaWYgKHBsY2hhbi0+cGh5Y2hhbikgewotCQkJcGwwOHhfc3RvcF9waHlfY2hhbihwbGNoYW4tPnBoeWNoYW4pOworCQkJcGwwOHhfdGVybWluYXRlX3BoeV9jaGFuKHBsMDh4LCBwbGNoYW4tPnBoeWNoYW4pOwogCiAJCQkvKgogCQkJICogTWFyayBwaHlzaWNhbCBjaGFubmVsIGFzIGZyZWUgYW5kIGZyZWUgYW55IHNsYXZlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pbXgtZG1hLmMgYi9kcml2ZXJzL2RtYS9pbXgtZG1hLmMKaW5kZXggZTUzZDQzOC4uZTE4ZWFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW14LWRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lteC1kbWEuYwpAQCAtNDksNiArNDksNyBAQAogCiBzdHJ1Y3QgaW14ZG1hX2VuZ2luZSB7CiAJc3RydWN0IGRldmljZQkJCSpkZXY7CisJc3RydWN0IGRldmljZV9kbWFfcGFyYW1ldGVycwlkbWFfcGFybXM7CiAJc3RydWN0IGRtYV9kZXZpY2UJCWRtYV9kZXZpY2U7CiAJc3RydWN0IGlteGRtYV9jaGFubmVsCQljaGFubmVsW01BWF9ETUFfQ0hBTk5FTFNdOwogfTsKQEAgLTI0Miw2ICsyNDMsMjEgQEAKIAllbHNlCiAJCWRtYW1vZGUgPSBETUFfTU9ERV9XUklURTsKIAorCXN3aXRjaCAoaW14ZG1hYy0+d29yZF9zaXplKSB7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzoKKwkJaWYgKHNnbC0+bGVuZ3RoICYgMyB8fCBzZ2wtPmRtYV9hZGRyZXNzICYgMykKKwkJCXJldHVybiBOVUxMOworCQlicmVhazsKKwljYXNlIERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTOgorCQlpZiAoc2dsLT5sZW5ndGggJiAxIHx8IHNnbC0+ZG1hX2FkZHJlc3MgJiAxKQorCQkJcmV0dXJuIE5VTEw7CisJCWJyZWFrOworCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJcmV0ID0gaW14X2RtYV9zZXR1cF9zZyhpbXhkbWFjLT5pbXhkbWFfY2hhbm5lbCwgc2dsLCBzZ19sZW4sCiAJCSBkbWFfbGVuZ3RoLCBpbXhkbWFjLT5wZXJfYWRkcmVzcywgZG1hbW9kZSk7CiAJaWYgKHJldCkKQEAgLTMyOSw2ICszNDUsOSBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmlteGRtYS0+ZG1hX2RldmljZS5jaGFubmVscyk7CiAKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIGlteGRtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX0NZQ0xJQywgaW14ZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKKwogCS8qIEluaXRpYWxpemUgY2hhbm5lbCBwYXJhbWV0ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9ETUFfQ0hBTk5FTFM7IGkrKykgewogCQlzdHJ1Y3QgaW14ZG1hX2NoYW5uZWwgKmlteGRtYWMgPSAmaW14ZG1hLT5jaGFubmVsW2ldOwpAQCAtMzQ2LDExICszNjUsNyBAQAogCQlpbXhkbWFjLT5pbXhkbWEgPSBpbXhkbWE7CiAJCXNwaW5fbG9ja19pbml0KCZpbXhkbWFjLT5sb2NrKTsKIAotCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIGlteGRtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7Ci0JCWRtYV9jYXBfc2V0KERNQV9DWUNMSUMsIGlteGRtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7Ci0KIAkJaW14ZG1hYy0+Y2hhbi5kZXZpY2UgPSAmaW14ZG1hLT5kbWFfZGV2aWNlOwotCQlpbXhkbWFjLT5jaGFuLmNoYW5faWQgPSBpOwogCQlpbXhkbWFjLT5jaGFubmVsID0gaTsKIAogCQkvKiBBZGQgdGhlIGNoYW5uZWwgdG8gdGhlIERNQUMgbGlzdCAqLwpAQCAtMzcwLDYgKzM4NSw5IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbXhkbWEpOwogCisJaW14ZG1hLT5kbWFfZGV2aWNlLmRldi0+ZG1hX3Bhcm1zID0gJmlteGRtYS0+ZG1hX3Bhcm1zOworCWRtYV9zZXRfbWF4X3NlZ19zaXplKGlteGRtYS0+ZG1hX2RldmljZS5kZXYsIDB4ZmZmZmZmKTsKKwogCXJldCA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJmlteGRtYS0+ZG1hX2RldmljZSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXJcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW14LXNkbWEuYyBiL2RyaXZlcnMvZG1hL2lteC1zZG1hLmMKaW5kZXggZDVhNWQ0ZC4uYjZkMTQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW14LXNkbWEuYworKysgYi9kcml2ZXJzL2RtYS9pbXgtc2RtYS5jCkBAIC0yMzAsNyArMjMwLDcgQEAKICAqIHN0cnVjdCBzZG1hX2NoYW5uZWwgLSBob3VzZWtlZXBpbmcgZm9yIGEgU0RNQSBjaGFubmVsCiAgKgogICogQHNkbWEJCXBvaW50ZXIgdG8gdGhlIFNETUEgZW5naW5lIGZvciB0aGlzIGNoYW5uZWwKLSAqIEBjaGFubmVsCQl0aGUgY2hhbm5lbCBudW1iZXIsIG1hdGNoZXMgZG1hZW5naW5lIGNoYW5faWQKKyAqIEBjaGFubmVsCQl0aGUgY2hhbm5lbCBudW1iZXIsIG1hdGNoZXMgZG1hZW5naW5lIGNoYW5faWQgKyAxCiAgKiBAZGlyZWN0aW9uCQl0cmFuc2ZlciB0eXBlLiBOZWVkZWQgZm9yIHNldHRpbmcgU0RNQSBzY3JpcHQKICAqIEBwZXJpcGhlcmFsX3R5cGUJUGVyaXBoZXJhbCB0eXBlLiBOZWVkZWQgZm9yIHNldHRpbmcgU0RNQSBzY3JpcHQKICAqIEBldmVudF9pZDAJCWFrYSBkbWEgcmVxdWVzdCBsaW5lCkBAIC0zMDEsNiArMzAxLDcgQEAKIAogc3RydWN0IHNkbWFfZW5naW5lIHsKIAlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKKwlzdHJ1Y3QgZGV2aWNlX2RtYV9wYXJhbWV0ZXJzCWRtYV9wYXJtczsKIAlzdHJ1Y3Qgc2RtYV9jaGFubmVsCQljaGFubmVsW01BWF9ETUFfQ0hBTk5FTFNdOwogCXN0cnVjdCBzZG1hX2NoYW5uZWxfY29udHJvbAkqY2hhbm5lbF9jb250cm9sOwogCXZvaWQgX19pb21lbQkJCSpyZWdzOwpAQCAtNDQ5LDcgKzQ1MCw3IEBACiAJCWlmIChiZC0+bW9kZS5zdGF0dXMgJiBCRF9SUk9SKQogCQkJc2RtYWMtPnN0YXR1cyA9IERNQV9FUlJPUjsKIAkJZWxzZQotCQkJc2RtYWMtPnN0YXR1cyA9IERNQV9TVUNDRVNTOworCQkJc2RtYWMtPnN0YXR1cyA9IERNQV9JTl9QUk9HUkVTUzsKIAogCQliZC0+bW9kZS5zdGF0dXMgfD0gQkRfRE9ORTsKIAkJc2RtYWMtPmJ1Zl90YWlsKys7CkBAIC03NzAsMTUgKzc3MSwxNSBAQAogCV9fcmF3X3dyaXRlbCgxIDw8IGNoYW5uZWwsIHNkbWEtPnJlZ3MgKyBTRE1BX0hfU1RBUlQpOwogfQogCi1zdGF0aWMgZG1hX2Nvb2tpZV90IHNkbWFfYXNzaWduX2Nvb2tpZShzdHJ1Y3Qgc2RtYV9jaGFubmVsICpzZG1hKQorc3RhdGljIGRtYV9jb29raWVfdCBzZG1hX2Fzc2lnbl9jb29raWUoc3RydWN0IHNkbWFfY2hhbm5lbCAqc2RtYWMpCiB7Ci0JZG1hX2Nvb2tpZV90IGNvb2tpZSA9IHNkbWEtPmNoYW4uY29va2llOworCWRtYV9jb29raWVfdCBjb29raWUgPSBzZG1hYy0+Y2hhbi5jb29raWU7CiAKIAlpZiAoKytjb29raWUgPCAwKQogCQljb29raWUgPSAxOwogCi0Jc2RtYS0+Y2hhbi5jb29raWUgPSBjb29raWU7Ci0Jc2RtYS0+ZGVzYy5jb29raWUgPSBjb29raWU7CisJc2RtYWMtPmNoYW4uY29va2llID0gY29va2llOworCXNkbWFjLT5kZXNjLmNvb2tpZSA9IGNvb2tpZTsKIAogCXJldHVybiBjb29raWU7CiB9CkBAIC03OTgsNyArNzk5LDcgQEAKIAogCWNvb2tpZSA9IHNkbWFfYXNzaWduX2Nvb2tpZShzZG1hYyk7CiAKLQlzZG1hX2VuYWJsZV9jaGFubmVsKHNkbWEsIHR4LT5jaGFuLT5jaGFuX2lkKTsKKwlzZG1hX2VuYWJsZV9jaGFubmVsKHNkbWEsIHNkbWFjLT5jaGFubmVsKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmc2RtYWMtPmxvY2spOwogCkBAIC04MTEsMTAgKzgxMiw2IEBACiAJc3RydWN0IGlteF9kbWFfZGF0YSAqZGF0YSA9IGNoYW4tPnByaXZhdGU7CiAJaW50IHByaW8sIHJldDsKIAotCS8qIE5vIG5lZWQgdG8gZXhlY3V0ZSB0aGlzIGZvciBpbnRlcm5hbCBjaGFubmVsIDAgKi8KLQlpZiAoY2hhbi0+Y2hhbl9pZCA9PSAwKQotCQlyZXR1cm4gMDsKLQogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTg3OSw3ICs4NzYsNyBAQAogCXN0cnVjdCBzZG1hX2NoYW5uZWwgKnNkbWFjID0gdG9fc2RtYV9jaGFuKGNoYW4pOwogCXN0cnVjdCBzZG1hX2VuZ2luZSAqc2RtYSA9IHNkbWFjLT5zZG1hOwogCWludCByZXQsIGksIGNvdW50OwotCWludCBjaGFubmVsID0gY2hhbi0+Y2hhbl9pZDsKKwlpbnQgY2hhbm5lbCA9IHNkbWFjLT5jaGFubmVsOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAKIAlpZiAoc2RtYWMtPnN0YXR1cyA9PSBETUFfSU5fUFJPR1JFU1MpCkBAIC05MjQsMjIgKzkyMSwzMyBAQAogCQkJcmV0ID0gIC1FSU5WQUw7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KLQkJaWYgKHNkbWFjLT53b3JkX3NpemUgPT0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVMpCisKKwkJc3dpdGNoIChzZG1hYy0+d29yZF9zaXplKSB7CisJCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM6CiAJCQliZC0+bW9kZS5jb21tYW5kID0gMDsKLQkJZWxzZQotCQkJYmQtPm1vZGUuY29tbWFuZCA9IHNkbWFjLT53b3JkX3NpemU7CisJCQlpZiAoY291bnQgJiAzIHx8IHNnLT5kbWFfYWRkcmVzcyAmIDMpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlicmVhazsKKwkJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUzoKKwkJCWJkLT5tb2RlLmNvbW1hbmQgPSAyOworCQkJaWYgKGNvdW50ICYgMSB8fCBzZy0+ZG1hX2FkZHJlc3MgJiAxKQorCQkJCXJldHVybiBOVUxMOworCQkJYnJlYWs7CisJCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURToKKwkJCWJkLT5tb2RlLmNvbW1hbmQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTlVMTDsKKwkJfQogCiAJCXBhcmFtID0gQkRfRE9ORSB8IEJEX0VYVEQgfCBCRF9DT05UOwogCi0JCWlmIChzZG1hYy0+ZmxhZ3MgJiBJTVhfRE1BX1NHX0xPT1ApIHsKKwkJaWYgKGkgKyAxID09IHNnX2xlbikgewogCQkJcGFyYW0gfD0gQkRfSU5UUjsKLQkJCWlmIChpICsgMSA9PSBzZ19sZW4pCi0JCQkJcGFyYW0gfD0gQkRfV1JBUDsKKwkJCXBhcmFtIHw9IEJEX0xBU1Q7CisJCQlwYXJhbSAmPSB+QkRfQ09OVDsKIAkJfQogCi0JCWlmIChpICsgMSA9PSBzZ19sZW4pCi0JCQlwYXJhbSB8PSBCRF9JTlRSOwotCiAJCWRldl9kYmcoc2RtYS0+ZGV2LCAiZW50cnkgJWQ6IGNvdW50OiAlZCBkbWE6IDB4JTA4eCAlcyVzXG4iLAogCQkJCWksIGNvdW50LCBzZy0+ZG1hX2FkZHJlc3MsCiAJCQkJcGFyYW0gJiBCRF9XUkFQID8gIndyYXAiIDogIiIsCkBAIC05NTMsNiArOTYxLDcgQEAKIAogCXJldHVybiAmc2RtYWMtPmRlc2M7CiBlcnJfb3V0OgorCXNkbWFjLT5zdGF0dXMgPSBETUFfRVJST1I7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTk2Myw3ICs5NzIsNyBAQAogCXN0cnVjdCBzZG1hX2NoYW5uZWwgKnNkbWFjID0gdG9fc2RtYV9jaGFuKGNoYW4pOwogCXN0cnVjdCBzZG1hX2VuZ2luZSAqc2RtYSA9IHNkbWFjLT5zZG1hOwogCWludCBudW1fcGVyaW9kcyA9IGJ1Zl9sZW4gLyBwZXJpb2RfbGVuOwotCWludCBjaGFubmVsID0gY2hhbi0+Y2hhbl9pZDsKKwlpbnQgY2hhbm5lbCA9IHNkbWFjLT5jaGFubmVsOwogCWludCByZXQsIGkgPSAwLCBidWYgPSAwOwogCiAJZGV2X2RiZyhzZG1hLT5kZXYsICIlcyBjaGFubmVsOiAlZFxuIiwgX19mdW5jX18sIGNoYW5uZWwpOwpAQCAtMTA2NiwxNCArMTA3NSwxMiBAQAogewogCXN0cnVjdCBzZG1hX2NoYW5uZWwgKnNkbWFjID0gdG9fc2RtYV9jaGFuKGNoYW4pOwogCWRtYV9jb29raWVfdCBsYXN0X3VzZWQ7Ci0JZW51bSBkbWFfc3RhdHVzIHJldDsKIAogCWxhc3RfdXNlZCA9IGNoYW4tPmNvb2tpZTsKIAotCXJldCA9IGRtYV9hc3luY19pc19jb21wbGV0ZShjb29raWUsIHNkbWFjLT5sYXN0X2NvbXBsZXRlZCwgbGFzdF91c2VkKTsKIAlkbWFfc2V0X3R4X3N0YXRlKHR4c3RhdGUsIHNkbWFjLT5sYXN0X2NvbXBsZXRlZCwgbGFzdF91c2VkLCAwKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIHNkbWFjLT5zdGF0dXM7CiB9CiAKIHN0YXRpYyB2b2lkIHNkbWFfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCkBAIC0xMTM1LDcgKzExNDIsNyBAQAogCS8qIGRvd25sb2FkIHRoZSBSQU0gaW1hZ2UgZm9yIFNETUEgKi8KIAlzZG1hX2xvYWRfc2NyaXB0KHNkbWEsIHJhbV9jb2RlLAogCQkJaGVhZGVyLT5yYW1fY29kZV9zaXplLAotCQkJc2RtYS0+c2NyaXB0X2FkZHJzLT5yYW1fY29kZV9zdGFydF9hZGRyKTsKKwkJCWFkZHItPnJhbV9jb2RlX3N0YXJ0X2FkZHIpOwogCWNsa19kaXNhYmxlKHNkbWEtPmNsayk7CiAKIAlzZG1hX2FkZF9zY3JpcHRzKHNkbWEsIGFkZHIpOwpAQCAtMTIzNyw3ICsxMjQ0LDYgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvcmVzOwogCXN0cnVjdCBzZG1hX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IGk7Ci0JZG1hX2NhcF9tYXNrX3QgbWFzazsKIAlzdHJ1Y3Qgc2RtYV9lbmdpbmUgKnNkbWE7CiAKIAlzZG1hID0ga3phbGxvYyhzaXplb2YoKnNkbWEpLCBHRlBfS0VSTkVMKTsKQEAgLTEyODAsNiArMTI4Niw5IEBACiAKIAlzZG1hLT52ZXJzaW9uID0gcGRhdGEtPnNkbWFfdmVyc2lvbjsKIAorCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgc2RtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX0NZQ0xJQywgc2RtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7CisKIAlJTklUX0xJU1RfSEVBRCgmc2RtYS0+ZG1hX2RldmljZS5jaGFubmVscyk7CiAJLyogSW5pdGlhbGl6ZSBjaGFubmVsIHBhcmFtZXRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0RNQV9DSEFOTkVMUzsgaSsrKSB7CkBAIC0xMjg4LDE1ICsxMjk3LDE3IEBACiAJCXNkbWFjLT5zZG1hID0gc2RtYTsKIAkJc3Bpbl9sb2NrX2luaXQoJnNkbWFjLT5sb2NrKTsKIAotCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIHNkbWEtPmRtYV9kZXZpY2UuY2FwX21hc2spOwotCQlkbWFfY2FwX3NldChETUFfQ1lDTElDLCBzZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKLQogCQlzZG1hYy0+Y2hhbi5kZXZpY2UgPSAmc2RtYS0+ZG1hX2RldmljZTsKLQkJc2RtYWMtPmNoYW4uY2hhbl9pZCA9IGk7CiAJCXNkbWFjLT5jaGFubmVsID0gaTsKIAotCQkvKiBBZGQgdGhlIGNoYW5uZWwgdG8gdGhlIERNQUMgbGlzdCAqLwotCQlsaXN0X2FkZF90YWlsKCZzZG1hYy0+Y2hhbi5kZXZpY2Vfbm9kZSwgJnNkbWEtPmRtYV9kZXZpY2UuY2hhbm5lbHMpOworCQkvKgorCQkgKiBBZGQgdGhlIGNoYW5uZWwgdG8gdGhlIERNQUMgbGlzdC4gRG8gbm90IGFkZCBjaGFubmVsIDAgdGhvdWdoCisJCSAqIGJlY2F1c2Ugd2UgbmVlZCBpdCBpbnRlcm5hbGx5IGluIHRoZSBTRE1BIGRyaXZlci4gVGhpcyBhbHNvIG1lYW5zCisJCSAqIHRoYXQgY2hhbm5lbCAwIGluIGRtYWVuZ2luZSBjb3VudGluZyBtYXRjaGVzIHNkbWEgY2hhbm5lbCAxLgorCQkgKi8KKwkJaWYgKGkpCisJCQlsaXN0X2FkZF90YWlsKCZzZG1hYy0+Y2hhbi5kZXZpY2Vfbm9kZSwKKwkJCQkJJnNkbWEtPmRtYV9kZXZpY2UuY2hhbm5lbHMpOwogCX0KIAogCXJldCA9IHNkbWFfaW5pdChzZG1hKTsKQEAgLTEzMTcsNiArMTMyOCw4IEBACiAJc2RtYS0+ZG1hX2RldmljZS5kZXZpY2VfcHJlcF9kbWFfY3ljbGljID0gc2RtYV9wcmVwX2RtYV9jeWNsaWM7CiAJc2RtYS0+ZG1hX2RldmljZS5kZXZpY2VfY29udHJvbCA9IHNkbWFfY29udHJvbDsKIAlzZG1hLT5kbWFfZGV2aWNlLmRldmljZV9pc3N1ZV9wZW5kaW5nID0gc2RtYV9pc3N1ZV9wZW5kaW5nOworCXNkbWEtPmRtYV9kZXZpY2UuZGV2LT5kbWFfcGFybXMgPSAmc2RtYS0+ZG1hX3Bhcm1zOworCWRtYV9zZXRfbWF4X3NlZ19zaXplKHNkbWEtPmRtYV9kZXZpY2UuZGV2LCA2NTUzNSk7CiAKIAlyZXQgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZzZG1hLT5kbWFfZGV2aWNlKTsKIAlpZiAocmV0KSB7CkBAIC0xMzI0LDEzICsxMzM3LDYgQEAKIAkJZ290byBlcnJfaW5pdDsKIAl9CiAKLQkvKiByZXF1ZXN0IGNoYW5uZWwgMC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBjb250cm9sIGNoYW5uZWwKLQkgKiB0byB0aGUgU0RNQSBlbmdpbmUgYW5kIG5vdCBhdmFpbGFibGUgdG8gY2xpZW50cy4KLQkgKi8KLQlkbWFfY2FwX3plcm8obWFzayk7Ci0JZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKLQlkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIE5VTEwsIE5VTEwpOwotCiAJZGV2X2luZm8oc2RtYS0+ZGV2LCAiaW5pdGlhbGl6ZWRcbiIpOwogCiAJcmV0dXJuIDA7CkBAIC0xMzQ4LDcgKzEzNTQsNyBAQAogZXJyX3JlcXVlc3RfcmVnaW9uOgogZXJyX2lycToKIAlrZnJlZShzZG1hKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZXhpdCBzZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCmluZGV4IGNiMjZlZTkuLmMxYTEyNWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCkBAIC0xMTQ1LDI5ICsxMTQ1LDYgQEAKIAlyZWcgPSBpZG1hY19yZWFkX2ljcmVnKGlwdSwgSURNQUNfQ0hBX0VOKTsKIAlpZG1hY193cml0ZV9pY3JlZyhpcHUsIHJlZyAmIH5jaGFuX21hc2ssIElETUFDX0NIQV9FTik7CiAKLQkvKgotCSAqIFByb2JsZW0gKG9ic2VydmVkIHdpdGggY2hhbm5lbCBETUFJQ183KTogYWZ0ZXIgZW5hYmxpbmcgdGhlIGNoYW5uZWwKLQkgKiBhbmQgaW5pdGlhbGlzaW5nIGJ1ZmZlcnMsIHRoZXJlIGNvbWVzIGFuIGludGVycnVwdCB3aXRoIGN1cnJlbnQgc3RpbGwKLQkgKiBwb2ludGluZyBhdCBidWZmZXIgMCwgd2hlcmVhcyBpdCBzaG91bGQgdXNlIGJ1ZmZlciAwIGZpcnN0IGFuZCBvbmx5Ci0JICogZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHdoZW4gaXQgaXMgZG9uZSwgdGhlbiBjdXJyZW50IHNob3VsZCBhbHJlYWR5Ci0JICogcG9pbnQgdG8gYnVmZmVyIDEuIFRoaXMgc3B1cmlvdXMgaW50ZXJydXB0IGFsc28gY29tZXMgb24gY2hhbm5lbAotCSAqIERNQVNEQ18wLiBXaXRoIERNQUlDXzcgbm9ybWFsbHksIGlzIHdlIGp1c3QgbGVhdmUgdGhlIElTUiBhZnRlciB0aGUKLQkgKiBmaXJzdCBpbnRlcnJ1cHQsIHRoZXJlIGNvbWVzIHRoZSBzZWNvbmQgd2l0aCBjdXJyZW50IGNvcnJlY3RseQotCSAqIHBvaW50aW5nIHRvIGJ1ZmZlciAxIHRoaXMgdGltZS4gQnV0IHNvbWV0aW1lcyB0aGlzIHNlY29uZCBpbnRlcnJ1cHQKLQkgKiBkb2Vzbid0IGNvbWUgYW5kIHRoZSBjaGFubmVsIGhhbmdzLiBDbGVhcmluZyBCVUZ4X1JEWSB3aGVuIGRpc2FibGluZwotCSAqIHRoZSBjaGFubmVsIHNlZW1zIHRvIHByZXZlbnQgdGhlIGNoYW5uZWwgZnJvbSBoYW5naW5nLCBidXQgaXQgZG9lc24ndAotCSAqIHByZXZlbnQgdGhlIHNwdXJpb3VzIGludGVycnVwdC4gVGhpcyBtaWdodCBhbHNvIGJlIHVuc2FmZS4gVGhpbmsKLQkgKiBhYm91dCB0aGUgSURNQUMgY29udHJvbGxlciB0cnlpbmcgdG8gc3dpdGNoIHRvIGEgYnVmZmVyLCB3aGVuIHdlCi0JICogY2xlYXIgdGhlIHJlYWR5IGJpdCwgYW5kIHJlLWVuYWJsZSBpdCBhIG1vbWVudCBsYXRlci4KLQkgKi8KLQlyZWcgPSBpZG1hY19yZWFkX2lwdXJlZyhpcHUsIElQVV9DSEFfQlVGMF9SRFkpOwotCWlkbWFjX3dyaXRlX2lwdXJlZyhpcHUsIDAsIElQVV9DSEFfQlVGMF9SRFkpOwotCWlkbWFjX3dyaXRlX2lwdXJlZyhpcHUsIHJlZyAmIH4oMVVMIDw8IGNoYW5uZWwpLCBJUFVfQ0hBX0JVRjBfUkRZKTsKLQotCXJlZyA9IGlkbWFjX3JlYWRfaXB1cmVnKGlwdSwgSVBVX0NIQV9CVUYxX1JEWSk7Ci0JaWRtYWNfd3JpdGVfaXB1cmVnKGlwdSwgMCwgSVBVX0NIQV9CVUYxX1JEWSk7Ci0JaWRtYWNfd3JpdGVfaXB1cmVnKGlwdSwgcmVnICYgfigxVUwgPDwgY2hhbm5lbCksIElQVV9DSEFfQlVGMV9SRFkpOwotCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXB1LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTEyNDYsMzMgKzEyMjMsNiBAQAogCiAJLyogT3RoZXIgaW50ZXJydXB0cyBkbyBub3QgaW50ZXJmZXJlIHdpdGggdGhpcyBjaGFubmVsICovCiAJc3Bpbl9sb2NrKCZpY2hhbi0+bG9jayk7Ci0JaWYgKHVubGlrZWx5KGNoYW5faWQgIT0gSURNQUNfU0RDXzAgJiYgY2hhbl9pZCAhPSBJRE1BQ19TRENfMSAmJgotCQkgICAgICgoY3VyYnVmID4+IGNoYW5faWQpICYgMSkgPT0gaWNoYW4tPmFjdGl2ZV9idWZmZXIgJiYKLQkJICAgICAhbGlzdF9pc19sYXN0KGljaGFuLT5xdWV1ZS5uZXh0LCAmaWNoYW4tPnF1ZXVlKSkpIHsKLQkJaW50IGkgPSAxMDA7Ci0KLQkJLyogVGhpcyBkb2Vzbid0IGhlbHAuIFNlZSBjb21tZW50IGluIGlwdV9kaXNhYmxlX2NoYW5uZWwoKSAqLwotCQl3aGlsZSAoLS1pKSB7Ci0JCQljdXJidWYgPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQ1VSX0JVRik7Ci0JCQlpZiAoKChjdXJidWYgPj4gY2hhbl9pZCkgJiAxKSAhPSBpY2hhbi0+YWN0aXZlX2J1ZmZlcikKLQkJCQlicmVhazsKLQkJCWNwdV9yZWxheCgpOwotCQl9Ci0KLQkJaWYgKCFpKSB7Ci0JCQlzcGluX3VubG9jaygmaWNoYW4tPmxvY2spOwotCQkJZGV2X2RiZyhkZXYsCi0JCQkJIklSUSBvbiBhY3RpdmUgYnVmZmVyIG9uIGNoYW5uZWwgJXgsIGFjdGl2ZSAiCi0JCQkJIiVkLCByZWFkeSAleCwgJXgsIGN1cnJlbnQgJXghXG4iLCBjaGFuX2lkLAotCQkJCWljaGFuLT5hY3RpdmVfYnVmZmVyLCByZWFkeTAsIHJlYWR5MSwgY3VyYnVmKTsKLQkJCXJldHVybiBJUlFfTk9ORTsKLQkJfSBlbHNlCi0JCQlkZXZfZGJnKGRldiwKLQkJCQkiQnVmZmVyIGRlYWN0aXZhdGVkIG9uIGNoYW5uZWwgJXgsIGFjdGl2ZSAiCi0JCQkJIiVkLCByZWFkeSAleCwgJXgsIGN1cnJlbnQgJXgsIHJlc3QgJWQhXG4iLCBjaGFuX2lkLAotCQkJCWljaGFuLT5hY3RpdmVfYnVmZmVyLCByZWFkeTAsIHJlYWR5MSwgY3VyYnVmLCBpKTsKLQl9Ci0KIAlpZiAodW5saWtlbHkoKGljaGFuLT5hY3RpdmVfYnVmZmVyICYmIChyZWFkeTEgPj4gY2hhbl9pZCkgJiAxKSB8fAogCQkgICAgICghaWNoYW4tPmFjdGl2ZV9idWZmZXIgJiYgKHJlYWR5MCA+PiBjaGFuX2lkKSAmIDEpCiAJCSAgICAgKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggNGE1ZWNjNS4uMjNlMDM1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC04MjYsOCArODI2LDYgQEAKIC8qIERpc3BsYXkgYW5kIGRlY29kZSB2YXJpb3VzIE5CIHJlZ2lzdGVycyBmb3IgZGVidWcgcHVycG9zZXMuICovCiBzdGF0aWMgdm9pZCBhbWQ2NF9kdW1wX21pc2NfcmVncyhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7Ci0JaW50IGdhbmdlZDsKLQogCWRlYnVnZjEoIkYzeEU4IChOQiBDYXApOiAweCUwOHhcbiIsIHB2dC0+bmJjYXApOwogCiAJZGVidWdmMSgiICBOQiB0d28gY2hhbm5lbCBEUkFNIGNhcGFibGU6ICVzXG4iLApAQCAtODUxLDI4ICs4NDksMTkgQEAKIAlkZWJ1Z2YxKCIgIERyYW1Ib2xlVmFsaWQ6ICVzXG4iLAogCQkocHZ0LT5kaGFyICYgREhBUl9WQUxJRCkgPyAieWVzIiA6ICJubyIpOwogCisJYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKDAsIHB2dCk7CisKIAkvKiBldmVyeXRoaW5nIGJlbG93IHRoaXMgcG9pbnQgaXMgRmFtMTBoIGFuZCBhYm92ZSAqLwotCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweGYpIHsKLQkJYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKDAsIHB2dCk7CisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZikKIAkJcmV0dXJuOwotCX0KKworCWFtZDY0X2RlYnVnX2Rpc3BsYXlfZGltbV9zaXplcygxLCBwdnQpOwogCiAJYW1kNjRfaW5mbygidXNpbmcgJXMgc3luZHJvbWVzLlxuIiwgKChwdnQtPnN5bl90eXBlID09IDgpID8gIng4IiA6ICJ4NCIpKTsKIAogCS8qIE9ubHkgaWYgTk9UIGdhbmdlZCBkb2VzIGRjbHIxIGhhdmUgdmFsaWQgaW5mbyAqLwogCWlmICghZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpKQogCQlhbWQ2NF9kdW1wX2RyYW1jZmdfbG93KHB2dC0+ZGNscjEsIDEpOwotCi0JLyoKLQkgKiBEZXRlcm1pbmUgaWYgZ2FuZ2VkIGFuZCB0aGVuIGR1bXAgbWVtb3J5IHNpemVzIGZvciBmaXJzdCBjb250cm9sbGVyLAotCSAqIGFuZCBpZiBOT1QgZ2FuZ2VkIGR1bXAgaW5mbyBmb3IgMm5kIGNvbnRyb2xsZXIuCi0JICovCi0JZ2FuZ2VkID0gZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpOwotCi0JYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKDAsIHB2dCk7Ci0KLQlpZiAoIWdhbmdlZCkKLQkJYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKDEsIHB2dCk7CiB9CiAKIC8qIFJlYWQgaW4gYm90aCBvZiBEQkFNIHJlZ2lzdGVycyAqLwpAQCAtMTY0NCwxMSArMTYzMywxMCBAQAogCQkgICAgICAgV0FSTl9PTihjdHJsICE9IDApOwogCX0KIAotCWRlYnVnZjEoIkYyeCVkODAgKERSQU0gQmFuayBBZGRyZXNzIE1hcHBpbmcpOiAweCUwOHhcbiIsCi0JCWN0cmwsIGN0cmwgPyBwdnQtPmRiYW0xIDogcHZ0LT5kYmFtMCk7CisJZGJhbSA9IChjdHJsICYmICFkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkpID8gcHZ0LT5kYmFtMSA6IHB2dC0+ZGJhbTA7CisJZGNzYiA9IChjdHJsICYmICFkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkpID8gcHZ0LT5kY3NiMSA6IHB2dC0+ZGNzYjA7CiAKLQlkYmFtID0gY3RybCA/IHB2dC0+ZGJhbTEgOiBwdnQtPmRiYW0wOwotCWRjc2IgPSBjdHJsID8gcHZ0LT5kY3NiMSA6IHB2dC0+ZGNzYjA7CisJZGVidWdmMSgiRjJ4JWQ4MCAoRFJBTSBCYW5rIEFkZHJlc3MgTWFwcGluZyk6IDB4JTA4eFxuIiwgY3RybCwgZGJhbSk7CiAKIAllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLCAiRENUJWQgY2hpcCBzZWxlY3RzOlxuIiwgY3RybCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwppbmRleCBlMjhlNDE2NjguLmJjYjExMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKQEAgLTM3OCwxMCArMzc4LDE3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkbWlfZHVtcF9pZHModm9pZCkKIHsKKwljb25zdCBjaGFyICpib2FyZDsJLyogQm9hcmQgTmFtZSBpcyBvcHRpb25hbCAqLworCiAJcHJpbnRrKEtFUk5fREVCVUcgIkRNSTogIik7Ci0JcHJpbnRfZmlsdGVyZWQoZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfTkFNRSkpOwotCXByaW50ayhLRVJOX0NPTlQgIi8iKTsKKwlwcmludF9maWx0ZXJlZChkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9TWVNfVkVORE9SKSk7CisJcHJpbnRrKEtFUk5fQ09OVCAiICIpOwogCXByaW50X2ZpbHRlcmVkKGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfTkFNRSkpOworCWJvYXJkID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfTkFNRSk7CisJaWYgKGJvYXJkKSB7CisJCXByaW50ayhLRVJOX0NPTlQgIi8iKTsKKwkJcHJpbnRfZmlsdGVyZWQoYm9hcmQpOworCX0KIAlwcmludGsoS0VSTl9DT05UICIsIEJJT1MgIik7CiAJcHJpbnRfZmlsdGVyZWQoZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKSk7CiAJcHJpbnRrKEtFUk5fQ09OVCAiICIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMKaW5kZXggZDgxY2M3NC4uNTRkNzBhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAogc3RhdGljIHZvaWQgbG53X2lycV9oYW5kbGVyKHVuc2lnbmVkIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gKHN0cnVjdCBsbndfZ3BpbyAqKWdldF9pcnFfZGF0YShpcnEpOworCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gZ2V0X2lycV9kYXRhKGlycSk7CiAJdTMyIGJhc2UsIGdwaW87CiAJdm9pZCBfX2lvbWVtICpnZWRyOwogCXUzMiBnZWRyX3Y7CkBAIC0yMDYsNyArMjA2LDEyIEBACiAJCS8qIGNsZWFyIHRoZSBlZGdlIGRldGVjdCBzdGF0dXMgYml0ICovCiAJCXdyaXRlbChnZWRyX3YsIGdlZHIpOwogCX0KLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworCWlmIChkZXNjLT5jaGlwLT5pcnFfZW9pKQorCQlkZXNjLT5jaGlwLT5pcnFfZW9pKGlycV9nZXRfaXJxX2RhdGEoaXJxKSk7CisJZWxzZQorCQlkZXZfd2FybihsbnctPmNoaXAuZGV2LCAibWlzc2luZyBFT0kgaGFuZGxlciBmb3IgaXJxICVkXG4iLCBpcnEpOworCiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGxud19ncGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYyBiL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKaW5kZXggYTI2MTk3Mi4uYjQ3MzQyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwpAQCAtNjAsNiArNjAsNyBAQAogCXVuc2lnbmVkIGdwaW9fc3RhcnQ7CiAJdWludDE2X3QgcmVnX291dHB1dDsKIAl1aW50MTZfdCByZWdfZGlyZWN0aW9uOworCXN0cnVjdCBtdXRleCBpMmNfbG9jazsKIAogI2lmZGVmIENPTkZJR19HUElPX1BDQTk1M1hfSVJRCiAJc3RydWN0IG11dGV4IGlycV9sb2NrOwpAQCAtMTE5LDEzICsxMjAsMTcgQEAKIAogCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBwY2E5NTN4X2NoaXAsIGdwaW9fY2hpcCk7CiAKKwltdXRleF9sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiAJcmVnX3ZhbCA9IGNoaXAtPnJlZ19kaXJlY3Rpb24gfCAoMXUgPDwgb2ZmKTsKIAlyZXQgPSBwY2E5NTN4X3dyaXRlX3JlZyhjaGlwLCBQQ0E5NTNYX0RJUkVDVElPTiwgcmVnX3ZhbCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBleGl0OwogCiAJY2hpcC0+cmVnX2RpcmVjdGlvbiA9IHJlZ192YWw7Ci0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pMmNfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwY2E5NTN4X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKQEAgLTEzNyw2ICsxNDIsNyBAQAogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBjYTk1M3hfY2hpcCwgZ3Bpb19jaGlwKTsKIAorCW11dGV4X2xvY2soJmNoaXAtPmkyY19sb2NrKTsKIAkvKiBzZXQgb3V0cHV0IGxldmVsICovCiAJaWYgKHZhbCkKIAkJcmVnX3ZhbCA9IGNoaXAtPnJlZ19vdXRwdXQgfCAoMXUgPDwgb2ZmKTsKQEAgLTE0NSw3ICsxNTEsNyBAQAogCiAJcmV0ID0gcGNhOTUzeF93cml0ZV9yZWcoY2hpcCwgUENBOTUzWF9PVVRQVVQsIHJlZ192YWwpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXhpdDsKIAogCWNoaXAtPnJlZ19vdXRwdXQgPSByZWdfdmFsOwogCkBAIC0xNTMsMTAgKzE1OSwxMyBAQAogCXJlZ192YWwgPSBjaGlwLT5yZWdfZGlyZWN0aW9uICYgfigxdSA8PCBvZmYpOwogCXJldCA9IHBjYTk1M3hfd3JpdGVfcmVnKGNoaXAsIFBDQTk1M1hfRElSRUNUSU9OLCByZWdfdmFsKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGV4aXQ7CiAKIAljaGlwLT5yZWdfZGlyZWN0aW9uID0gcmVnX3ZhbDsKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworZXhpdDoKKwltdXRleF91bmxvY2soJmNoaXAtPmkyY19sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBjYTk1M3hfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZikKQEAgLTE2Nyw3ICsxNzYsOSBAQAogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBjYTk1M3hfY2hpcCwgZ3Bpb19jaGlwKTsKIAorCW11dGV4X2xvY2soJmNoaXAtPmkyY19sb2NrKTsKIAlyZXQgPSBwY2E5NTN4X3JlYWRfcmVnKGNoaXAsIFBDQTk1M1hfSU5QVVQsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmNoaXAtPmkyY19sb2NrKTsKIAlpZiAocmV0IDwgMCkgewogCQkvKiBOT1RFOiAgZGlhZ25vc3RpYyBhbHJlYWR5IGVtaXR0ZWQ7IHRoYXQncyBhbGwgd2Ugc2hvdWxkCiAJCSAqIGRvIHVubGVzcyBncGlvXypfdmFsdWVfY2Fuc2xlZXAoKSBjYWxscyBiZWNvbWUgZGlmZmVyZW50CkBAIC0xODcsNiArMTk4LDcgQEAKIAogCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBwY2E5NTN4X2NoaXAsIGdwaW9fY2hpcCk7CiAKKwltdXRleF9sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiAJaWYgKHZhbCkKIAkJcmVnX3ZhbCA9IGNoaXAtPnJlZ19vdXRwdXQgfCAoMXUgPDwgb2ZmKTsKIAllbHNlCkBAIC0xOTQsOSArMjA2LDExIEBACiAKIAlyZXQgPSBwY2E5NTN4X3dyaXRlX3JlZyhjaGlwLCBQQ0E5NTNYX09VVFBVVCwgcmVnX3ZhbCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuOworCQlnb3RvIGV4aXQ7CiAKIAljaGlwLT5yZWdfb3V0cHV0ID0gcmVnX3ZhbDsKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHBjYTk1M3hfc2V0dXBfZ3BpbyhzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwLCBpbnQgZ3Bpb3MpCkBAIC01MTcsNiArNTMxLDggQEAKIAogCWNoaXAtPm5hbWVzID0gcGRhdGEtPm5hbWVzOwogCisJbXV0ZXhfaW5pdCgmY2hpcC0+aTJjX2xvY2spOworCiAJLyogaW5pdGlhbGl6ZSBjYWNoZWQgcmVnaXN0ZXJzIGZyb20gdGhlaXIgb3JpZ2luYWwgdmFsdWVzLgogCSAqIHdlIGNhbid0IHNoYXJlIHRoaXMgY2hpcCB3aXRoIGFub3RoZXIgaTJjIG1hc3Rlci4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggYmVhOTY2Zi4uMDkwMmQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTEwMCw3ICsxMDAsMTAgQEAKIGNvbmZpZyBEUk1fSTkxNQogCXRyaXN0YXRlICJpOTE1IGRyaXZlciIKIAlkZXBlbmRzIG9uIEFHUF9JTlRFTAorCSMgd2UgbmVlZCBzaG1mcyBmb3IgdGhlIHN3YXBwYWJsZSBiYWNraW5nIHN0b3JlLCBhbmQgaW4gcGFydGljdWxhcgorCSMgdGhlIHNobWVtX3JlYWRwYWdlKCkgd2hpY2ggZGVwZW5kcyB1cG9uIHRtcGZzCiAJc2VsZWN0IFNITUVNCisJc2VsZWN0IFRNUEZTCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVSCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKaW5kZXggMmJhYTY3MC4uNjU0ZmFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKQEAgLTI2NzQsMyArMjY3NCwyMyBAQAogCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KKwordm9pZCBkcm1fbW9kZV9jb25maWdfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkKKwkJaWYgKGNydGMtPmZ1bmNzLT5yZXNldCkKKwkJCWNydGMtPmZ1bmNzLT5yZXNldChjcnRjKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKQorCQlpZiAoZW5jb2Rlci0+ZnVuY3MtPnJlc2V0KQorCQkJZW5jb2Rlci0+ZnVuY3MtPnJlc2V0KGVuY29kZXIpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKQorCQlpZiAoY29ubmVjdG9yLT5mdW5jcy0+cmVzZXQpCisJCQljb25uZWN0b3ItPmZ1bmNzLT5yZXNldChjb25uZWN0b3IpOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jb25maWdfcmVzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCmluZGV4IDk1MmIzZDQuLjkyMzY5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKQEAgLTM0MywxMyArMzQzLDEyIEBACiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCWJvb2wgcmV0ID0gdHJ1ZTsKIAotCWFkanVzdGVkX21vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCBtb2RlKTsKLQogCWNydGMtPmVuYWJsZWQgPSBkcm1faGVscGVyX2NydGNfaW5fdXNlKGNydGMpOwotCiAJaWYgKCFjcnRjLT5lbmFibGVkKQogCQlyZXR1cm4gdHJ1ZTsKIAorCWFkanVzdGVkX21vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCBtb2RlKTsKKwogCXNhdmVkX2h3bW9kZSA9IGNydGMtPmh3bW9kZTsKIAlzYXZlZF9tb2RlID0gY3J0Yy0+bW9kZTsKIAlzYXZlZF94ID0gY3J0Yy0+eDsKQEAgLTQzNywxMCArNDM2LDkgQEAKIAkgKi8KIAlkcm1fY2FsY190aW1lc3RhbXBpbmdfY29uc3RhbnRzKGNydGMpOwogCi0JLyogWFhYIGZyZWUgYWRqdXN0ZWRtb2RlICovCi0JZHJtX21vZGVfZGVzdHJveShkZXYsIGFkanVzdGVkX21vZGUpOwogCS8qIEZJWE1FOiBhZGQgc3VicGl4ZWwgb3JkZXIgKi8KIGRvbmU6CisJZHJtX21vZGVfZGVzdHJveShkZXYsIGFkanVzdGVkX21vZGUpOwogCWlmICghcmV0KSB7CiAJCWNydGMtPmh3bW9kZSA9IHNhdmVkX2h3bW9kZTsKIAkJY3J0Yy0+bW9kZSA9IHNhdmVkX21vZGU7CkBAIC00OTcsMTQgKzQ5NSwxNyBAQAogCiAJY3J0Y19mdW5jcyA9IHNldC0+Y3J0Yy0+aGVscGVyX3ByaXZhdGU7CiAKKwlpZiAoIXNldC0+bW9kZSkKKwkJc2V0LT5mYiA9IE5VTEw7CisKIAlpZiAoc2V0LT5mYikgewogCQlEUk1fREVCVUdfS01TKCJbQ1JUQzolZF0gW0ZCOiVkXSAjY29ubmVjdG9ycz0lZCAoeCB5KSAoJWkgJWkpXG4iLAogCQkJCXNldC0+Y3J0Yy0+YmFzZS5pZCwgc2V0LT5mYi0+YmFzZS5pZCwKIAkJCQkoaW50KXNldC0+bnVtX2Nvbm5lY3RvcnMsIHNldC0+eCwgc2V0LT55KTsKIAl9IGVsc2UgewotCQlEUk1fREVCVUdfS01TKCJbQ1JUQzolZF0gW05PRkJdICNjb25uZWN0b3JzPSVkICh4IHkpICglaSAlaSlcbiIsCi0JCQkJc2V0LT5jcnRjLT5iYXNlLmlkLCAoaW50KXNldC0+bnVtX2Nvbm5lY3RvcnMsCi0JCQkJc2V0LT54LCBzZXQtPnkpOworCQlEUk1fREVCVUdfS01TKCJbQ1JUQzolZF0gW05PRkJdXG4iLCBzZXQtPmNydGMtPmJhc2UuaWQpOworCQlzZXQtPm1vZGUgPSBOVUxMOworCQlzZXQtPm51bV9jb25uZWN0b3JzID0gMDsKIAl9CiAKIAlkZXYgPSBzZXQtPmNydGMtPmRldjsKQEAgLTY0OSw4ICs2NTAsOCBAQAogCQltb2RlX2NoYW5nZWQgPSB0cnVlOwogCiAJaWYgKG1vZGVfY2hhbmdlZCkgewotCQlzZXQtPmNydGMtPmVuYWJsZWQgPSAoc2V0LT5tb2RlICE9IE5VTEwpOwotCQlpZiAoc2V0LT5tb2RlICE9IE5VTEwpIHsKKwkJc2V0LT5jcnRjLT5lbmFibGVkID0gZHJtX2hlbHBlcl9jcnRjX2luX3VzZShzZXQtPmNydGMpOworCQlpZiAoc2V0LT5jcnRjLT5lbmFibGVkKSB7CiAJCQlEUk1fREVCVUdfS01TKCJhdHRlbXB0aW5nIHRvIHNldCBtb2RlIGZyb20iCiAJCQkJCSIgdXNlcnNwYWNlXG4iKTsKIAkJCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoc2V0LT5tb2RlKTsKQEAgLTY2NSw2ICs2NjYsMTIgQEAKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCWdvdG8gZmFpbDsKIAkJCX0KKwkJCURSTV9ERUJVR19LTVMoIlNldHRpbmcgY29ubmVjdG9yIERQTVMgc3RhdGUgdG8gb25cbiIpOworCQkJZm9yIChpID0gMDsgaSA8IHNldC0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgeworCQkJCURSTV9ERUJVR19LTVMoIlx0W0NPTk5FQ1RPUjolZDolc10gc2V0IERQTVMgb25cbiIsIHNldC0+Y29ubmVjdG9yc1tpXS0+YmFzZS5pZCwKKwkJCQkJICAgICAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShzZXQtPmNvbm5lY3RvcnNbaV0pKTsKKwkJCQlzZXQtPmNvbm5lY3RvcnNbaV0tPmRwbXMgPSBEUk1fTU9ERV9EUE1TX09OOworCQkJfQogCQl9CiAJCWRybV9oZWxwZXJfZGlzYWJsZV91bnVzZWRfZnVuY3Rpb25zKGRldik7CiAJfSBlbHNlIGlmIChmYl9jaGFuZ2VkKSB7CkBAIC02ODEsMTIgKzY4OCw2IEBACiAJCQlnb3RvIGZhaWw7CiAJCX0KIAl9Ci0JRFJNX0RFQlVHX0tNUygiU2V0dGluZyBjb25uZWN0b3IgRFBNUyBzdGF0ZSB0byBvblxuIik7Ci0JZm9yIChpID0gMDsgaSA8IHNldC0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgewotCQlEUk1fREVCVUdfS01TKCJcdFtDT05ORUNUT1I6JWQ6JXNdIHNldCBEUE1TIG9uXG4iLCBzZXQtPmNvbm5lY3RvcnNbaV0tPmJhc2UuaWQsCi0JCQkgICAgICBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKHNldC0+Y29ubmVjdG9yc1tpXSkpOwotCQlzZXQtPmNvbm5lY3RvcnNbaV0tPmRwbXMgPSBEUk1fTU9ERV9EUE1TX09OOwotCX0KIAogCWtmcmVlKHNhdmVfY29ubmVjdG9ycyk7CiAJa2ZyZWUoc2F2ZV9lbmNvZGVycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCA2OTc3YTFjLi5mNzNlZjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTY3Miw3ICs2NzIsNyBAQAogCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3M7CiAJdTE2ICpyZWQsICpncmVlbiwgKmJsdWUsICp0cmFuc3A7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwotCWludCBpLCByYyA9IDA7CisJaW50IGksIGosIHJjID0gMDsKIAlpbnQgc3RhcnQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKQEAgLTY4NSw3ICs2ODUsNyBAQAogCQl0cmFuc3AgPSBjbWFwLT50cmFuc3A7CiAJCXN0YXJ0ID0gY21hcC0+c3RhcnQ7CiAKLQkJZm9yIChpID0gMDsgaSA8IGNtYXAtPmxlbjsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBjbWFwLT5sZW47IGorKykgewogCQkJdTE2IGhyZWQsIGhncmVlbiwgaGJsdWUsIGh0cmFuc3AgPSAweGZmZmY7CiAKIAkJCWhyZWQgPSAqcmVkKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2luZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jCmluZGV4IDNjZGJhZjMuLmJlOWE5YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jCkBAIC0yODMsMTcgKzI4MywxOCBAQAogI2VuZGlmCiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0Jc2VxX3ByaW50ZihtLCAidm1hIHVzZSBjb3VudDogJWQsIGhpZ2hfbWVtb3J5ID0gJXAsIDB4JTA4bGx4XG4iLAorCXNlcV9wcmludGYobSwgInZtYSB1c2UgY291bnQ6ICVkLCBoaWdoX21lbW9yeSA9ICVwSywgMHglcEtcbiIsCiAJCSAgIGF0b21pY19yZWFkKCZkZXYtPnZtYV9jb3VudCksCi0JCSAgIGhpZ2hfbWVtb3J5LCAodTY0KXZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpOworCQkgICBoaWdoX21lbW9yeSwgKHZvaWQgKil2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocHQsICZkZXYtPnZtYWxpc3QsIGhlYWQpIHsKIAkJdm1hID0gcHQtPnZtYTsKIAkJaWYgKCF2bWEpCiAJCQljb250aW51ZTsKIAkJc2VxX3ByaW50ZihtLAotCQkJICAgIlxuJTVkIDB4JTA4bHgtMHglMDhseCAlYyVjJWMlYyVjJWMgMHglMDhseDAwMCIsCi0JCQkgICBwdC0+cGlkLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKKwkJCSAgICJcbiU1ZCAweCVwSy0weCVwSyAlYyVjJWMlYyVjJWMgMHglMDhseDAwMCIsCisJCQkgICBwdC0+cGlkLAorCQkJICAgKHZvaWQgKil2bWEtPnZtX3N0YXJ0LCAodm9pZCAqKXZtYS0+dm1fZW5kLAogCQkJICAgdm1hLT52bV9mbGFncyAmIFZNX1JFQUQgPyAncicgOiAnLScsCiAJCQkgICB2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUgPyAndycgOiAnLScsCiAJCQkgICB2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQyA/ICd4JyA6ICctJywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCmluZGV4IDAwNTRlOTUuLjI4ZDFkM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwpAQCAtMTY0LDggKzE2NCwxMCBAQAogCSAqIGF2YWlsYWJsZS4gSW4gdGhhdCBjYXNlIHdlIGNhbid0IGFjY291bnQgZm9yIHRoaXMgYW5kIGp1c3QKIAkgKiBob3BlIGZvciB0aGUgYmVzdC4KIAkgKi8KLQlpZiAoKHZibHJjID4gMCkgJiYgKGFicyhkaWZmX25zKSA+IDEwMDAwMDApKQorCWlmICgodmJscmMgPiAwKSAmJiAoYWJzNjQoZGlmZl9ucykgPiAxMDAwMDAwKSkgewogCQlhdG9taWNfaW5jKCZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwl9CiAKIAkvKiBJbnZhbGlkYXRlIGFsbCB0aW1lc3RhbXBzIHdoaWxlIHZibGFuayBpcnEncyBhcmUgb2ZmLiAqLwogCWNsZWFyX3ZibGFua190aW1lc3RhbXBzKGRldiwgY3J0Yyk7CkBAIC00OTEsNiArNDkzLDEyIEBACiAJLyogRG90IGNsb2NrIGluIEh6OiAqLwogCWRvdGNsb2NrID0gKHU2NCkgY3J0Yy0+aHdtb2RlLmNsb2NrICogMTAwMDsKIAorCS8qIEZpZWxkcyBvZiBpbnRlcmxhY2VkIHNjYW5vdXQgbW9kZXMgYXJlIG9ubHkgaGFsdmUgYSBmcmFtZSBkdXJhdGlvbi4KKwkgKiBEb3VibGUgdGhlIGRvdGNsb2NrIHRvIGdldCBoYWx2ZSB0aGUgZnJhbWUtL2xpbmUtL3BpeGVsZHVyYXRpb24uCisJICovCisJaWYgKGNydGMtPmh3bW9kZS5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQorCQlkb3RjbG9jayAqPSAyOworCiAJLyogVmFsaWQgZG90Y2xvY2s/ICovCiAJaWYgKGRvdGNsb2NrID4gMCkgewogCQkvKiBDb252ZXJ0IHNjYW5saW5lIGxlbmd0aCBpbiBwaXhlbHMgYW5kIHZpZGVvIGRvdCBjbG9jayB0bwpAQCAtNjAzLDE0ICs2MTEsNiBAQAogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKLQkvKiBEb24ndCBrbm93IHlldCBob3cgdG8gaGFuZGxlIGludGVybGFjZWQgb3IKLQkgKiBkb3VibGUgc2NhbiBtb2Rlcy4gSnVzdCBuby1vcCBmb3Igbm93LgotCSAqLwotCWlmIChtb2RlLT5mbGFncyAmIChEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSB8IERSTV9NT0RFX0ZMQUdfREJMU0NBTikpIHsKLQkJRFJNX0RFQlVHKCJjcnRjICVkOiBOb29wIGR1ZSB0byB1bnN1cHBvcnRlZCBtb2RlLlxuIiwgY3J0Yyk7Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQotCiAJLyogR2V0IGN1cnJlbnQgc2Nhbm91dCBwb3NpdGlvbiB3aXRoIHN5c3RlbSB0aW1lc3RhbXAuCiAJICogUmVwZWF0IHF1ZXJ5IHVwIHRvIERSTV9USU1FU1RBTVBfTUFYUkVUUklFUyB0aW1lcwogCSAqIGlmIHNpbmdsZSBxdWVyeSB0YWtlcyBsb25nZXIgdGhhbiBtYXhfZXJyb3IgbmFub3NlY29uZHMuCkBAIC04NTgsMTAgKzg1OCwxMSBAQAogCWlmIChyYykgewogCQl0c2xvdCA9IGF0b21pY19yZWFkKCZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pICsgZGlmZjsKIAkJdmJsYW5rdGltZXN0YW1wKGRldiwgY3J0YywgdHNsb3QpID0gdF92Ymxhbms7Ci0JCXNtcF93bWIoKTsKIAl9CiAKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCk7CiAJYXRvbWljX2FkZChkaWZmLCAmZGV2LT5fdmJsYW5rX2NvdW50W2NydGNdKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKIH0KIAogLyoqCkBAIC0xMDExLDcgKzEwMTIsOCBAQAogCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJc3RydWN0IGRybV9tb2Rlc2V0X2N0bCAqbW9kZXNldCA9IGRhdGE7Ci0JaW50IGNydGMsIHJldCA9IDA7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IGNydGM7CiAKIAkvKiBJZiBkcm1fdmJsYW5rX2luaXQoKSBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0LCBqdXN0IG5vLW9wICovCiAJaWYgKCFkZXYtPm51bV9jcnRjcykKQEAgLTEyNTAsNyArMTI1Miw3IEBACiAgKiBEcml2ZXJzIHNob3VsZCBjYWxsIHRoaXMgcm91dGluZSBpbiB0aGVpciB2YmxhbmsgaW50ZXJydXB0IGhhbmRsZXJzIHRvCiAgKiB1cGRhdGUgdGhlIHZibGFuayBjb3VudGVyIGFuZCBzZW5kIGFueSBzaWduYWxzIHRoYXQgbWF5IGJlIHBlbmRpbmcuCiAgKi8KLXZvaWQgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCitib29sIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewogCXUzMiB2Ymxjb3VudDsKIAlzNjQgZGlmZl9uczsKQEAgLTEyNTgsNyArMTI2MCw3IEBACiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAogCWlmICghZGV2LT5udW1fY3J0Y3MpCi0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogTmVlZCB0aW1lc3RhbXAgbG9jayB0byBwcmV2ZW50IGNvbmN1cnJlbnQgZXhlY3V0aW9uIHdpdGgKIAkgKiB2YmxhbmsgZW5hYmxlL2Rpc2FibGUsIGFzIHRoaXMgd291bGQgY2F1c2UgaW5jb25zaXN0ZW50CkBAIC0xMjY5LDcgKzEyNzEsNyBAQAogCS8qIFZibGFuayBpcnEgaGFuZGxpbmcgZGlzYWJsZWQuIE5vdGhpbmcgdG8gZG8uICovCiAJaWYgKCFkZXYtPnZibGFua19lbmFibGVkW2NydGNdKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsYW5rX3RpbWVfbG9jaywgaXJxZmxhZ3MpOwotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBGZXRjaCBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcCBmb3IgdGhpcyB2YmxhbmsgaW50ZXJ2YWwgZnJvbQpAQCAtMTI5MywxNSArMTI5NSwxNiBAQAogCSAqIGUuZy4sIGR1ZSB0byBzcHVyaW91cyB2YmxhbmsgaW50ZXJydXB0cy4gV2UgbmVlZCB0bwogCSAqIGlnbm9yZSB0aG9zZSBmb3IgYWNjb3VudGluZy4KIAkgKi8KLQlpZiAoYWJzKGRpZmZfbnMpID4gRFJNX1JFRFVOREFOVF9WQkxJUlFfVEhSRVNIX05TKSB7CisJaWYgKGFiczY0KGRpZmZfbnMpID4gRFJNX1JFRFVOREFOVF9WQkxJUlFfVEhSRVNIX05TKSB7CiAJCS8qIFN0b3JlIG5ldyB0aW1lc3RhbXAgaW4gcmluZ2J1ZmZlci4gKi8KIAkJdmJsYW5rdGltZXN0YW1wKGRldiwgY3J0YywgdmJsY291bnQgKyAxKSA9IHR2Ymxhbms7Ci0JCXNtcF93bWIoKTsKIAogCQkvKiBJbmNyZW1lbnQgY29va2VkIHZibGFuayBjb3VudC4gVGhpcyBhbHNvIGF0b21pY2FsbHkgY29tbWl0cwogCQkgKiB0aGUgdGltZXN0YW1wIGNvbXB1dGVkIGFib3ZlLgogCQkgKi8KKwkJc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpOwogCQlhdG9taWNfaW5jKCZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKIAl9IGVsc2UgewogCQlEUk1fREVCVUcoImNydGMgJWQ6IFJlZHVuZGFudCB2YmxpcnEgaWdub3JlZC4gZGlmZl9ucyA9ICVkXG4iLAogCQkJICBjcnRjLCAoaW50KSBkaWZmX25zKTsKQEAgLTEzMTEsNSArMTMxNCw2IEBACiAJZHJtX2hhbmRsZV92YmxhbmtfZXZlbnRzKGRldiwgY3J0Yyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibGFua190aW1lX2xvY2ssIGlycWZsYWdzKTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2hhbmRsZV92YmxhbmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRleCAzNjAxNDY2Li40ZmY5YjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwpAQCAtODY1LDcgKzg2NSw3IEBACiAJCWludCBtYXhfZnJlcTsKIAogCQkvKiBSUFNUQVQxIGlzIGluIHRoZSBHVCBwb3dlciB3ZWxsICovCi0JCV9fZ2VuNl9mb3JjZV93YWtlX2dldChkZXZfcHJpdik7CisJCV9fZ2VuNl9ndF9mb3JjZV93YWtlX2dldChkZXZfcHJpdik7CiAKIAkJc2VxX3ByaW50ZihtLCAiR1RfUEVSRl9TVEFUVVM6IDB4JTA4eFxuIiwgZ3RfcGVyZl9zdGF0dXMpOwogCQlzZXFfcHJpbnRmKG0sICJSUFNUQVQxOiAweCUwOHhcbiIsIEk5MTVfUkVBRChHRU42X1JQU1RBVDEpKTsKQEAgLTg4OCw3ICs4ODgsNyBAQAogCQlzZXFfcHJpbnRmKG0sICJNYXggbm9uLW92ZXJjbG9ja2VkIChSUDApIGZyZXF1ZW5jeTogJWRNSHpcbiIsCiAJCQkgICBtYXhfZnJlcSAqIDEwMCk7CiAKLQkJX19nZW42X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2KTsKKwkJX19nZW42X2d0X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2KTsKIAl9IGVsc2UgewogCQlzZXFfcHJpbnRmKG0sICJubyBQLXN0YXRlIGluZm8gYXZhaWxhYmxlXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCA4NDRmM2M5Li5lMzNkOWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBkZXYtPnByaW1hcnktPm1hc3Rlci0+ZHJpdmVyX3ByaXY7Ci0Jc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gTFBfUklORyhkZXZfcHJpdik7CisJaW50IHJldDsKIAogCW1hc3Rlcl9wcml2LT5zYXJlYSA9IGRybV9nZXRzYXJlYShkZXYpOwogCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWEpIHsKQEAgLTE2MywzMyArMTYzLDIyIEBACiAJfQogCiAJaWYgKGluaXQtPnJpbmdfc2l6ZSAhPSAwKSB7Ci0JCWlmIChyaW5nLT5vYmogIT0gTlVMTCkgeworCQlpZiAoTFBfUklORyhkZXZfcHJpdiktPm9iaiAhPSBOVUxMKSB7CiAJCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7CiAJCQlEUk1fRVJST1IoIkNsaWVudCB0cmllZCB0byBpbml0aWFsaXplIHJpbmdidWZmZXIgaW4gIgogCQkJCSAgIkdFTSBtb2RlXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJcmluZy0+c2l6ZSA9IGluaXQtPnJpbmdfc2l6ZTsKLQotCQlyaW5nLT5tYXAub2Zmc2V0ID0gaW5pdC0+cmluZ19zdGFydDsKLQkJcmluZy0+bWFwLnNpemUgPSBpbml0LT5yaW5nX3NpemU7Ci0JCXJpbmctPm1hcC50eXBlID0gMDsKLQkJcmluZy0+bWFwLmZsYWdzID0gMDsKLQkJcmluZy0+bWFwLm10cnIgPSAwOwotCi0JCWRybV9jb3JlX2lvcmVtYXBfd2MoJnJpbmctPm1hcCwgZGV2KTsKLQotCQlpZiAocmluZy0+bWFwLmhhbmRsZSA9PSBOVUxMKSB7CisJCXJldCA9IGludGVsX3JlbmRlcl9yaW5nX2luaXRfZHJpKGRldiwKKwkJCQkJCSBpbml0LT5yaW5nX3N0YXJ0LAorCQkJCQkJIGluaXQtPnJpbmdfc2l6ZSk7CisJCWlmIChyZXQpIHsKIAkJCWk5MTVfZG1hX2NsZWFudXAoZGV2KTsKLQkJCURSTV9FUlJPUigiY2FuIG5vdCBpb3JlbWFwIHZpcnR1YWwgYWRkcmVzcyBmb3IiCi0JCQkJICAiIHJpbmcgYnVmZmVyXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIAotCXJpbmctPnZpcnR1YWxfc3RhcnQgPSByaW5nLT5tYXAuaGFuZGxlOwotCiAJZGV2X3ByaXYtPmNwcCA9IGluaXQtPmNwcDsKIAlkZXZfcHJpdi0+YmFja19vZmZzZXQgPSBpbml0LT5iYWNrX29mZnNldDsKIAlkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ID0gaW5pdC0+ZnJvbnRfb2Zmc2V0OwpAQCAtMTIyNiw5ICsxMjE1LDE1IEBACiAJaWYgKHJldCkKIAkJRFJNX0lORk8oImZhaWxlZCB0byBmaW5kIFZCSU9TIHRhYmxlc1xuIik7CiAKLQkvKiBpZiB3ZSBoYXZlID4gMSBWR0EgY2FyZHMsIHRoZW4gZGlzYWJsZSB0aGUgcmFkZW9uIFZHQSByZXNvdXJjZXMgKi8KKwkvKiBJZiB3ZSBoYXZlID4gMSBWR0EgY2FyZHMsIHRoZW4gd2UgbmVlZCB0byBhcmJpdHJhdGUgYWNjZXNzCisJICogdG8gdGhlIGNvbW1vbiBWR0EgcmVzb3VyY2VzLgorCSAqCisJICogSWYgd2UgYXJlIGEgc2Vjb25kYXJ5IGRpc3BsYXkgY29udHJvbGxlciAoIVBDSV9ESVNQTEFZX0NMQVNTX1ZHQSksCisJICogdGhlbiB3ZSBkbyBub3QgdGFrZSBwYXJ0IGluIFZHQSBhcmJpdHJhdGlvbiBhbmQgdGhlCisJICogdmdhX2NsaWVudF9yZWdpc3RlcigpIGZhaWxzIHdpdGggLUVOT0RFVi4KKwkgKi8KIAlyZXQgPSB2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgZGV2LCBOVUxMLCBpOTE1X3ZnYV9zZXRfZGVjb2RlKTsKLQlpZiAocmV0KQorCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9ERVYpCiAJCWdvdG8gY2xlYW51cF9yaW5nYnVmZmVyOwogCiAJaW50ZWxfcmVnaXN0ZXJfZHNtX2hhbmRsZXIoKTsKQEAgLTE5MDAsNiArMTg5NSwxNyBAQAogCWlmIChJU19HRU4yKGRldikpCiAJCWRtYV9zZXRfY29oZXJlbnRfbWFzaygmZGV2LT5wZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMCkpOwogCisJLyogOTY1R00gc29tZXRpbWVzIGluY29ycmVjdGx5IHdyaXRlcyB0byBoYXJkd2FyZSBzdGF0dXMgcGFnZSAoSFdTKQorCSAqIHVzaW5nIDMyYml0IGFkZHJlc3NpbmcsIG92ZXJ3cml0aW5nIG1lbW9yeSBpZiBIV1MgaXMgbG9jYXRlZAorCSAqIGFib3ZlIDRHQi4KKwkgKgorCSAqIFRoZSBkb2N1bWVudGF0aW9uIGFsc28gbWVudGlvbnMgYW4gaXNzdWUgd2l0aCB1bmRlZmluZWQKKwkgKiBiZWhhdmlvdXIgaWYgYW55IGdlbmVyYWwgc3RhdGUgaXMgYWNjZXNzZWQgd2l0aGluIGEgcGFnZSBhYm92ZSA0R0IsCisJICogd2hpY2ggYWxzbyBuZWVkcyB0byBiZSBoYW5kbGVkIGNhcmVmdWxseS4KKwkgKi8KKwlpZiAoSVNfQlJPQURXQVRFUihkZXYpIHx8IElTX0NSRVNUTElORShkZXYpKQorCQlkbWFfc2V0X2NvaGVyZW50X21hc2soJmRldi0+cGRldi0+ZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwogCW1taW9fYmFyID0gSVNfR0VOMihkZXYpID8gMSA6IDA7CiAJZGV2X3ByaXYtPnJlZ3MgPSBwY2lfaW9tYXAoZGV2LT5wZGV2LCBtbWlvX2JhciwgMCk7CiAJaWYgKCFkZXZfcHJpdi0+cmVncykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggNzJmZWEyYi4uMjJlYzA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC00Niw2ICs0NiwxMiBAQAogdW5zaWduZWQgaW50IGk5MTVfcG93ZXJzYXZlID0gMTsKIG1vZHVsZV9wYXJhbV9uYW1lZChwb3dlcnNhdmUsIGk5MTVfcG93ZXJzYXZlLCBpbnQsIDA2MDApOwogCit1bnNpZ25lZCBpbnQgaTkxNV9zZW1hcGhvcmVzID0gMDsKK21vZHVsZV9wYXJhbV9uYW1lZChzZW1hcGhvcmVzLCBpOTE1X3NlbWFwaG9yZXMsIGludCwgMDYwMCk7CisKK3Vuc2lnbmVkIGludCBpOTE1X2VuYWJsZV9yYzYgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKGk5MTVfZW5hYmxlX3JjNiwgaTkxNV9lbmFibGVfcmM2LCBpbnQsIDA2MDApOworCiB1bnNpZ25lZCBpbnQgaTkxNV9sdmRzX2Rvd25jbG9jayA9IDA7CiBtb2R1bGVfcGFyYW1fbmFtZWQobHZkc19kb3duY2xvY2ssIGk5MTVfbHZkc19kb3duY2xvY2ssIGludCwgMDQwMCk7CiAKQEAgLTYwLDcgKzY2LDcgQEAKIAogI2RlZmluZSBJTlRFTF9WR0FfREVWSUNFKGlkLCBpbmZvKSB7CQlcCiAJLmNsYXNzID0gUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsCVwKLQkuY2xhc3NfbWFzayA9IDB4ZmZmZjAwLAkJCVwKKwkuY2xhc3NfbWFzayA9IDB4ZmYwMDAwLAkJCVwKIAkudmVuZG9yID0gMHg4MDg2LAkJCVwKIAkuZGV2aWNlID0gaWQsCQkJCVwKIAkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwJCVwKQEAgLTI1MSw3ICsyNTcsNyBAQAogCX0KIH0KIAotdm9pZCBfX2dlbjZfZm9yY2Vfd2FrZV9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQordm9pZCBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCWludCBjb3VudDsKIApAQCAtMjY3LDEyICsyNzMsMjIgQEAKIAkJdWRlbGF5KDEwKTsKIH0KIAotdm9pZCBfX2dlbjZfZm9yY2Vfd2FrZV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQordm9pZCBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCUk5MTVfV1JJVEVfTk9UUkFDRShGT1JDRVdBS0UsIDApOwogCVBPU1RJTkdfUkVBRChGT1JDRVdBS0UpOwogfQogCit2b2lkIF9fZ2VuNl9ndF93YWl0X2Zvcl9maWZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpbnQgbG9vcCA9IDUwMDsKKwl1MzIgZmlmbyA9IEk5MTVfUkVBRF9OT1RSQUNFKEdUX0ZJRk9fRlJFRV9FTlRSSUVTKTsKKwl3aGlsZSAoZmlmbyA8IDIwICYmIGxvb3AtLSkgeworCQl1ZGVsYXkoMTApOworCQlmaWZvID0gSTkxNV9SRUFEX05PVFJBQ0UoR1RfRklGT19GUkVFX0VOVFJJRVMpOworCX0KK30KKwogc3RhdGljIGludCBpOTE1X2RybV9mcmVlemUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMzU0LDEyICszNzAsMTMgQEAKIAkJZXJyb3IgPSBpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKKwkJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7CiAJCWRybV9pcnFfaW5zdGFsbChkZXYpOwogCiAJCS8qIFJlc3VtZSB0aGUgbW9kZXNldCBmb3IgZXZlcnkgYWN0aXZhdGVkIENSVEMgKi8KIAkJZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShkZXYpOwogCi0JCWlmIChkZXZfcHJpdi0+cmVuZGVyY3R4ICYmIGRldl9wcml2LT5wd3JjdHgpCisJCWlmIChJU19JUk9OTEFLRV9NKGRldikpCiAJCQlpcm9ubGFrZV9lbmFibGVfcmM2KGRldik7CiAJfQogCkBAIC01NDIsNiArNTU5LDcgQEAKIAogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKKwkJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7CiAJCWRybV9pcnFfaW5zdGFsbChkZXYpOwogCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJfQpAQCAtNTY2LDYgKzU4NCwxNCBAQAogc3RhdGljIGludCBfX2RldmluaXQKIGk5MTVfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogeworCS8qIE9ubHkgYmluZCB0byBmdW5jdGlvbiAwIG9mIHRoZSBkZXZpY2UuIEVhcmx5IGdlbmVyYXRpb25zCisJICogdXNlZCBmdW5jdGlvbiAxIGFzIGEgcGxhY2Vob2xkZXIgZm9yIG11bHRpLWhlYWQuIFRoaXMgY2F1c2VzCisJICogdXMgY29uZnVzaW9uIGluc3RlYWQsIGVzcGVjaWFsbHkgb24gdGhlIHN5c3RlbXMgd2hlcmUgYm90aAorCSAqIGZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lIFBDSS1JRCEKKwkgKi8KKwlpZiAoUENJX0ZVTkMocGRldi0+ZGV2Zm4pKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJldHVybiBkcm1fZ2V0X3BjaV9kZXYocGRldiwgZW50LCAmZHJpdmVyKTsKIH0KIApAQCAtNzUyLDYgKzc3OCw5IEBACiAJCWRyaXZlci5kcml2ZXJfZmVhdHVyZXMgJj0gfkRSSVZFUl9NT0RFU0VUOwogI2VuZGlmCiAKKwlpZiAoIShkcml2ZXIuZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX01PREVTRVQpKQorCQlkcml2ZXIuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBOVUxMOworCiAJcmV0dXJuIGRybV9pbml0KCZkcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCA1OTY5ZjQ2Li40NTZmNDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTU0Myw4ICs1NDMsMTEgQEAKIAkJLyoqIExpc3Qgb2YgYWxsIG9iamVjdHMgaW4gZ3R0X3NwYWNlLiBVc2VkIHRvIHJlc3RvcmUgZ3R0CiAJCSAqIG1hcHBpbmdzIG9uIHJlc3VtZSAqLwogCQlzdHJ1Y3QgbGlzdF9oZWFkIGd0dF9saXN0OwotCQkvKiogRW5kIG9mIG1hcHBhYmxlIHBhcnQgb2YgR1RUICovCisKKwkJLyoqIFVzYWJsZSBwb3J0aW9uIG9mIHRoZSBHVFQgZm9yIEdFTSAqLworCQl1bnNpZ25lZCBsb25nIGd0dF9zdGFydDsKIAkJdW5zaWduZWQgbG9uZyBndHRfbWFwcGFibGVfZW5kOworCQl1bnNpZ25lZCBsb25nIGd0dF9lbmQ7CiAKIAkJc3RydWN0IGlvX21hcHBpbmcgKmd0dF9tYXBwaW5nOwogCQlpbnQgZ3R0X210cnI7CkBAIC05NTMsOCArOTU2LDEwIEBACiBleHRlcm4gaW50IGk5MTVfbWF4X2lvY3RsOwogZXh0ZXJuIHVuc2lnbmVkIGludCBpOTE1X2ZicGVyY3J0YzsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaTkxNV9wb3dlcnNhdmU7CitleHRlcm4gdW5zaWduZWQgaW50IGk5MTVfc2VtYXBob3JlczsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaTkxNV9sdmRzX2Rvd25jbG9jazsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaTkxNV9wYW5lbF91c2Vfc3NjOworZXh0ZXJuIHVuc2lnbmVkIGludCBpOTE1X2VuYWJsZV9yYzY7CiAKIGV4dGVybiBpbnQgaTkxNV9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiBleHRlcm4gaW50IGk5MTVfcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpAQCAtMTE3Myw2ICsxMTc4LDkgQEAKIHZvaWQgaTkxNV9nZW1fZnJlZV9hbGxfcGh5c19vYmplY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGk5MTVfZ2VtX3JlbGVhc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKTsKIAordWludDMyX3QKK2k5MTVfZ2VtX2dldF91bmZlbmNlZF9ndHRfYWxpZ25tZW50KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOworCiAvKiBpOTE1X2dlbV9ndHQuYyAqLwogdm9pZCBpOTE1X2dlbV9yZXN0b3JlX2d0dF9tYXBwaW5ncyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fZ3R0X2JpbmRfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwpAQCAtMTM0OSwyMiArMTM1NywzMiBAQAogICogbXVzdCBiZSBzZXQgdG8gcHJldmVudCBHVCBjb3JlIGZyb20gcG93ZXIgZG93biBhbmQgc3RhbGUgdmFsdWVzIGJlaW5nCiAgKiByZXR1cm5lZC4KICAqLwotdm9pZCBfX2dlbjZfZm9yY2Vfd2FrZV9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgX19nZW42X2ZvcmNlX3dha2VfcHV0IChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotc3RhdGljIGlubGluZSB1MzIgaTkxNV9zYWZlX3JlYWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcmVnKQordm9pZCBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK3ZvaWQgX19nZW42X2d0X2ZvcmNlX3dha2VfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lkIF9fZ2VuNl9ndF93YWl0X2Zvcl9maWZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CisKK3N0YXRpYyBpbmxpbmUgdTMyIGk5MTVfZ3RfcmVhZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiByZWcpCiB7CiAJdTMyIHZhbDsKIAogCWlmIChkZXZfcHJpdi0+aW5mby0+Z2VuID49IDYpIHsKLQkJX19nZW42X2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2KTsKKwkJX19nZW42X2d0X2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2KTsKIAkJdmFsID0gSTkxNV9SRUFEKHJlZyk7Ci0JCV9fZ2VuNl9mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7CisJCV9fZ2VuNl9ndF9mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7CiAJfSBlbHNlCiAJCXZhbCA9IEk5MTVfUkVBRChyZWcpOwogCiAJcmV0dXJuIHZhbDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGk5MTVfZ3Rfd3JpdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCXUzMiByZWcsIHUzMiB2YWwpCit7CisJaWYgKGRldl9wcml2LT5pbmZvLT5nZW4gPj0gNikKKwkJX19nZW42X2d0X3dhaXRfZm9yX2ZpZm8oZGV2X3ByaXYpOworCUk5MTVfV1JJVEUocmVnLCB2YWwpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQKIGk5MTVfd3JpdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcmVnLCB1NjQgdmFsLCBpbnQgbGVuKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggM2RmYzg0OC4uMzZlNjZjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0xNDAsMTIgKzE0MCwxNiBAQAogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JZHJtX21tX2luaXQoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsIHN0YXJ0LAotCQkgICAgZW5kIC0gc3RhcnQpOworCWRybV9tbV9pbml0KCZkZXZfcHJpdi0+bW0uZ3R0X3NwYWNlLCBzdGFydCwgZW5kIC0gc3RhcnQpOwogCisJZGV2X3ByaXYtPm1tLmd0dF9zdGFydCA9IHN0YXJ0OworCWRldl9wcml2LT5tbS5ndHRfbWFwcGFibGVfZW5kID0gbWFwcGFibGVfZW5kOworCWRldl9wcml2LT5tbS5ndHRfZW5kID0gZW5kOwogCWRldl9wcml2LT5tbS5ndHRfdG90YWwgPSBlbmQgLSBzdGFydDsKIAlkZXZfcHJpdi0+bW0ubWFwcGFibGVfZ3R0X3RvdGFsID0gbWluKGVuZCwgbWFwcGFibGVfZW5kKSAtIHN0YXJ0OwotCWRldl9wcml2LT5tbS5ndHRfbWFwcGFibGVfZW5kID0gbWFwcGFibGVfZW5kOworCisJLyogVGFrZSBvdmVyIHRoaXMgcG9ydGlvbiBvZiB0aGUgR1RUICovCisJaW50ZWxfZ3R0X2NsZWFyX3JhbmdlKHN0YXJ0IC8gUEFHRV9TSVpFLCAoZW5kLXN0YXJ0KSAvIFBBR0VfU0laRSk7CiB9CiAKIGludApAQCAtMTM5NCw3ICsxMzk4LDcgQEAKICAqIFJldHVybiB0aGUgcmVxdWlyZWQgR1RUIGFsaWdubWVudCBmb3IgYW4gb2JqZWN0LCBvbmx5IHRha2luZyBpbnRvIGFjY291bnQKICAqIHVuZmVuY2VkIHRpbGVkIHN1cmZhY2UgcmVxdWlyZW1lbnRzLgogICovCi1zdGF0aWMgdWludDMyX3QKK3VpbnQzMl90CiBpOTE1X2dlbV9nZXRfdW5mZW5jZWRfZ3R0X2FsaWdubWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OwpAQCAtMTg1Nyw3ICsxODYxLDcgQEAKIAogCXNlcW5vID0gcmluZy0+Z2V0X3NlcW5vKHJpbmcpOwogCi0JZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmluZy0+c3luY19zZXFubyk7IGkrKykKIAkJaWYgKHNlcW5vID49IHJpbmctPnN5bmNfc2Vxbm9baV0pCiAJCQlyaW5nLT5zeW5jX3NlcW5vW2ldID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCmluZGV4IGRjZmRmNDEuLjUwYWIxNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKQEAgLTc3Miw4ICs3NzIsOCBAQAogCWlmIChmcm9tID09IE5VTEwgfHwgdG8gPT0gZnJvbSkKIAkJcmV0dXJuIDA7CiAKLQkvKiBYWFggZ3B1IHNlbWFwaG9yZXMgYXJlIGN1cnJlbnRseSBjYXVzaW5nIGhhcmQgaGFuZ3Mgb24gU05CIG1vYmlsZSAqLwotCWlmIChJTlRFTF9JTkZPKG9iai0+YmFzZS5kZXYpLT5nZW4gPCA2IHx8IElTX01PQklMRShvYmotPmJhc2UuZGV2KSkKKwkvKiBYWFggZ3B1IHNlbWFwaG9yZXMgYXJlIGltcGxpY2F0ZWQgaW4gdmFyaW91cyBoYXJkIGhhbmdzIG9uIFNOQiAqLworCWlmIChJTlRFTF9JTkZPKG9iai0+YmFzZS5kZXYpLT5nZW4gPCA2IHx8ICFpOTE1X3NlbWFwaG9yZXMpCiAJCXJldHVybiBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2JqLCB0cnVlKTsKIAogCWlkeCA9IGludGVsX3Jpbmdfc3luY19pbmRleChmcm9tLCB0byk7CkBAIC0xMTc1LDcgKzExNzUsNyBAQAogCQlnb3RvIGVycjsKIAogCXNlcW5vID0gaTkxNV9nZW1fbmV4dF9yZXF1ZXN0X3NlcW5vKGRldiwgcmluZyk7Ci0JZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTLTE7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJpbmctPnN5bmNfc2Vxbm8pOyBpKyspIHsKIAkJaWYgKHNlcW5vIDwgcmluZy0+c3luY19zZXFub1tpXSkgewogCQkJLyogVGhlIEdQVSBjYW4gbm90IGhhbmRsZSBpdHMgc2VtYXBob3JlIHZhbHVlIHdyYXBwaW5nLAogCQkJICogc28gZXZlcnkgYmlsbGlvbiBvciBzbyBleGVjYnVmZmVycywgd2UgbmVlZCB0byBzdGFsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwppbmRleCA3MDQzM2FlLi5iMGFiZGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwpAQCAtMzQsNiArMzQsMTAgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAKKwkvKiBGaXJzdCBmaWxsIG91ciBwb3J0aW9uIG9mIHRoZSBHVFQgd2l0aCBzY3JhdGNoIHBhZ2VzICovCisJaW50ZWxfZ3R0X2NsZWFyX3JhbmdlKGRldl9wcml2LT5tbS5ndHRfc3RhcnQgLyBQQUdFX1NJWkUsCisJCQkgICAgICAoZGV2X3ByaXYtPm1tLmd0dF9lbmQgLSBkZXZfcHJpdi0+bW0uZ3R0X3N0YXJ0KSAvIFBBR0VfU0laRSk7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgJmRldl9wcml2LT5tbS5ndHRfbGlzdCwgZ3R0X2xpc3QpIHsKIAkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwppbmRleCAyMmEzMmI5Li5kNjQ4NDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpAQCAtMzQ5LDE0ICszNDksMjcgQEAKIAkJCShvYmotPmd0dF9vZmZzZXQgKyBvYmotPmJhc2Uuc2l6ZSA8PSBkZXZfcHJpdi0+bW0uZ3R0X21hcHBhYmxlX2VuZCAmJgogCQkJIGk5MTVfZ2VtX29iamVjdF9mZW5jZV9vayhvYmosIGFyZ3MtPnRpbGluZ19tb2RlKSk7CiAKLQkJb2JqLT50aWxpbmdfY2hhbmdlZCA9IHRydWU7Ci0JCW9iai0+dGlsaW5nX21vZGUgPSBhcmdzLT50aWxpbmdfbW9kZTsKLQkJb2JqLT5zdHJpZGUgPSBhcmdzLT5zdHJpZGU7CisJCS8qIFJlYmluZCBpZiB3ZSBuZWVkIGEgY2hhbmdlIG9mIGFsaWdubWVudCAqLworCQlpZiAoIW9iai0+bWFwX2FuZF9mZW5jZWFibGUpIHsKKwkJCXUzMiB1bmZlbmNlZF9hbGlnbm1lbnQgPQorCQkJCWk5MTVfZ2VtX2dldF91bmZlbmNlZF9ndHRfYWxpZ25tZW50KG9iaik7CisJCQlpZiAob2JqLT5ndHRfb2Zmc2V0ICYgKHVuZmVuY2VkX2FsaWdubWVudCAtIDEpKQorCQkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKKwkJfQorCisJCWlmIChyZXQgPT0gMCkgeworCQkJb2JqLT50aWxpbmdfY2hhbmdlZCA9IHRydWU7CisJCQlvYmotPnRpbGluZ19tb2RlID0gYXJncy0+dGlsaW5nX21vZGU7CisJCQlvYmotPnN0cmlkZSA9IGFyZ3MtPnN0cmlkZTsKKwkJfQogCX0KKwkvKiB3ZSBoYXZlIHRvIG1haW50YWluIHRoaXMgZXhpc3RpbmcgQUJJLi4uICovCisJYXJncy0+c3RyaWRlID0gb2JqLT5zdHJpZGU7CisJYXJncy0+dGlsaW5nX21vZGUgPSBvYmotPnRpbGluZ19tb2RlOwogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCBiOGU1MDlhLi44YTllMDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTI3NCwyNCArMjc0LDM1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGk5MTVfZ2V0X3ZibGFua190aW1lc3RhbXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMsCitpbnQgaTkxNV9nZXRfdmJsYW5rX3RpbWVzdGFtcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSwKIAkJCSAgICAgIGludCAqbWF4X2Vycm9yLAogCQkJICAgICAgc3RydWN0IHRpbWV2YWwgKnZibGFua190aW1lLAogCQkJICAgICAgdW5zaWduZWQgZmxhZ3MpCiB7Ci0Jc3RydWN0IGRybV9jcnRjICpkcm1jcnRjOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCi0JaWYgKGNydGMgPCAwIHx8IGNydGMgPj0gZGV2LT5udW1fY3J0Y3MpIHsKLQkJRFJNX0VSUk9SKCJJbnZhbGlkIGNydGMgJWRcbiIsIGNydGMpOworCWlmIChwaXBlIDwgMCB8fCBwaXBlID49IGRldl9wcml2LT5udW1fcGlwZSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgY3J0YyAlZFxuIiwgcGlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIEdldCBkcm1fY3J0YyB0byB0aW1lc3RhbXA6ICovCi0JZHJtY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldiwgY3J0Yyk7CisJY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldiwgcGlwZSk7CisJaWYgKGNydGMgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkludmFsaWQgY3J0YyAlZFxuIiwgcGlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghY3J0Yy0+ZW5hYmxlZCkgeworCQlEUk1fREVCVUdfS01TKCJjcnRjICVkIGlzIGRpc2FibGVkXG4iLCBwaXBlKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CiAKIAkvKiBIZWxwZXIgcm91dGluZSBpbiBEUk0gY29yZSBkb2VzIGFsbCB0aGUgd29yazogKi8KLQlyZXR1cm4gZHJtX2NhbGNfdmJsdGltZXN0YW1wX2Zyb21fc2Nhbm91dHBvcyhkZXYsIGNydGMsIG1heF9lcnJvciwKLQkJCQkJCSAgICAgdmJsYW5rX3RpbWUsIGZsYWdzLCBkcm1jcnRjKTsKKwlyZXR1cm4gZHJtX2NhbGNfdmJsdGltZXN0YW1wX2Zyb21fc2Nhbm91dHBvcyhkZXYsIHBpcGUsIG1heF9lcnJvciwKKwkJCQkJCSAgICAgdmJsYW5rX3RpbWUsIGZsYWdzLAorCQkJCQkJICAgICBjcnRjKTsKIH0KIAogLyoKQEAgLTMwNSw2ICszMTYsOCBAQAogCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7CiAJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7CiAKKwlEUk1fREVCVUdfS01TKCJydW5uaW5nIGVuY29kZXIgaG90cGx1ZyBmdW5jdGlvbnNcbiIpOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmbW9kZV9jb25maWctPmVuY29kZXJfbGlzdCwgYmFzZS5oZWFkKQogCQlpZiAoZW5jb2Rlci0+aG90X3BsdWcpCiAJCQllbmNvZGVyLT5ob3RfcGx1ZyhlbmNvZGVyKTsKQEAgLTM0OCw4ICszNjEsMTIgQEAKIAkJCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiBzZXFubyA9IHJpbmctPmdldF9zZXFubyhyaW5nKTsKKwl1MzIgc2Vxbm87CiAKKwlpZiAocmluZy0+b2JqID09IE5VTEwpCisJCXJldHVybjsKKworCXNlcW5vID0gcmluZy0+Z2V0X3NlcW5vKHJpbmcpOwogCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGUoZGV2LCBzZXFubyk7CiAKIAlyaW5nLT5pcnFfc2Vxbm8gPSBzZXFubzsKQEAgLTgzMSw2ICs4NDgsOCBAQAogCQlpKys7CiAJZXJyb3ItPnBpbm5lZF9ib19jb3VudCA9IGkgLSBlcnJvci0+YWN0aXZlX2JvX2NvdW50OwogCisJZXJyb3ItPmFjdGl2ZV9ibyA9IE5VTEw7CisJZXJyb3ItPnBpbm5lZF9ibyA9IE5VTEw7CiAJaWYgKGkpIHsKIAkJZXJyb3ItPmFjdGl2ZV9ibyA9IGttYWxsb2Moc2l6ZW9mKCplcnJvci0+YWN0aXZlX2JvKSppLAogCQkJCQkgICBHRlBfQVRPTUlDKTsKQEAgLTExNzksMTggKzExOTgsMTggQEAKIAkJCQlpbnRlbF9maW5pc2hfcGFnZV9mbGlwX3BsYW5lKGRldiwgMSk7CiAJCX0KIAotCQlpZiAocGlwZWFfc3RhdHMgJiB2Ymxhbmtfc3RhdHVzKSB7CisJCWlmIChwaXBlYV9zdGF0cyAmIHZibGFua19zdGF0dXMgJiYKKwkJICAgIGRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCkpIHsKIAkJCXZibGFuaysrOwotCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAkJCWlmICghZGV2X3ByaXYtPmZsaXBfcGVuZGluZ19pc19kb25lKSB7CiAJCQkJaTkxNV9wYWdlZmxpcF9zdGFsbF9jaGVjayhkZXYsIDApOwogCQkJCWludGVsX2ZpbmlzaF9wYWdlX2ZsaXAoZGV2LCAwKTsKIAkJCX0KIAkJfQogCi0JCWlmIChwaXBlYl9zdGF0cyAmIHZibGFua19zdGF0dXMpIHsKKwkJaWYgKHBpcGViX3N0YXRzICYgdmJsYW5rX3N0YXR1cyAmJgorCQkgICAgZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKSkgewogCQkJdmJsYW5rKys7Ci0JCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDEpOwogCQkJaWYgKCFkZXZfcHJpdi0+ZmxpcF9wZW5kaW5nX2lzX2RvbmUpIHsKIAkJCQlpOTE1X3BhZ2VmbGlwX3N0YWxsX2NoZWNrKGRldiwgMSk7CiAJCQkJaW50ZWxfZmluaXNoX3BhZ2VfZmxpcChkZXYsIDEpOwpAQCAtMTI3OCwxMiArMTI5NywxMiBAQAogCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKIAkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgfD0gSTkxNV9CT1hfV0FJVDsKIAotCXJldCA9IC1FTk9ERVY7CiAJaWYgKHJpbmctPmlycV9nZXQocmluZykpIHsKIAkJRFJNX1dBSVRfT04ocmV0LCByaW5nLT5pcnFfcXVldWUsIDMgKiBEUk1fSFosCiAJCQkgICAgUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSA+PSBpcnFfbnIpOwogCQlyaW5nLT5pcnFfcHV0KHJpbmcpOwotCX0KKwl9IGVsc2UgaWYgKHdhaXRfZm9yKFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikgPj0gaXJxX25yLCAzMDAwKSkKKwkJcmV0ID0gLUVCVVNZOwogCiAJaWYgKHJldCA9PSAtRUJVU1kpIHsKIAkJRFJNX0VSUk9SKCJFQlVTWSAtLSByZWM6ICVkIGVtaXR0ZWQ6ICVkXG4iLApAQCAtMTYzMiw5ICsxNjUxLDcgQEAKIAl9IGVsc2UgewogCQlob3RwbHVnX21hc2sgPSBTREVfQ1JUX0hPVFBMVUcgfCBTREVfUE9SVEJfSE9UUExVRyB8CiAJCQkgICAgICAgU0RFX1BPUlRDX0hPVFBMVUcgfCBTREVfUE9SVERfSE9UUExVRzsKLQkJaG90cGx1Z19tYXNrIHw9IFNERV9BVVhfTUFTSyB8IFNERV9GRElfTUFTSyB8IFNERV9UUkFOU19NQVNLOwotCQlJOTE1X1dSSVRFKEZESV9SWEFfSU1SLCAwKTsKLQkJSTkxNV9XUklURShGRElfUlhCX0lNUiwgMCk7CisJCWhvdHBsdWdfbWFzayB8PSBTREVfQVVYX01BU0s7CiAJfQogCiAJZGV2X3ByaXYtPnBjaF9pcnFfbWFzayA9IH5ob3RwbHVnX21hc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA0MGE0MDdmLi4zZTZmNDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTE3NCw3ICsxNzQsOSBAQAogICogICBhZGRyZXNzL3ZhbHVlIHBhaXJzLiBEb24ndCBvdmVyZHVlIGl0LCB0aG91Z2gsIHggPD0gMl40IG11c3QgaG9sZCEKICAqLwogI2RlZmluZSBNSV9MT0FEX1JFR0lTVEVSX0lNTSh4KQlNSV9JTlNUUigweDIyLCAyKngtMSkKLSNkZWZpbmUgTUlfRkxVU0hfRFcJCU1JX0lOU1RSKDB4MjYsIDIpIC8qIGZvciBHRU42ICovCisjZGVmaW5lIE1JX0ZMVVNIX0RXCQlNSV9JTlNUUigweDI2LCAxKSAvKiBmb3IgR0VONiAqLworI2RlZmluZSAgIE1JX0lOVkFMSURBVEVfVExCCSgxPDwxOCkKKyNkZWZpbmUgICBNSV9JTlZBTElEQVRFX0JTRAkoMTw8NykKICNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSCQlNSV9JTlNUUigweDMwLCAxKQogI2RlZmluZSAgIE1JX0JBVENIX05PTl9TRUNVUkUJKDEpCiAjZGVmaW5lICAgTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1ICgxPDw4KQpAQCAtNTEzLDYgKzUxNSwxMCBAQAogI2RlZmluZSAgIEdFTjZfQkxJVFRFUl9TWU5DX1NUQVRVUwkJCSgxIDw8IDI0KQogI2RlZmluZSAgIEdFTjZfQkxJVFRFUl9VU0VSX0lOVEVSUlVQVAkJCSgxIDw8IDIyKQogCisjZGVmaW5lIEdFTjZfQkxJVFRFUl9FQ09TS1BECTB4MjIxZDAKKyNkZWZpbmUgICBHRU42X0JMSVRURVJfTE9DS19TSElGVAkJCTE2CisjZGVmaW5lICAgR0VONl9CTElUVEVSX0ZCQ19OT1RJRlkJCQkoMTw8MykKKwogI2RlZmluZSBHRU42X0JTRF9TTEVFUF9QU01JX0NPTlRST0wJMHgxMjA1MAogI2RlZmluZSAgIEdFTjZfQlNEX1NMRUVQX1BTTUlfQ09OVFJPTF9SQ19JTERMX01FU1NBR0VfTU9ESUZZX01BU0sJKDEgPDwgMTYpCiAjZGVmaW5lICAgR0VONl9CU0RfU0xFRVBfUFNNSV9DT05UUk9MX1JDX0lMRExfTUVTU0FHRV9ESVNBQkxFCQkoMSA8PCAwKQpAQCAtMTU0NywxNyArMTU1Myw3IEBACiAKIC8qIEJhY2tsaWdodCBjb250cm9sICovCiAjZGVmaW5lIEJMQ19QV01fQ1RMCQkweDYxMjU0Ci0jZGVmaW5lICAgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9TSElGVAkJKDE3KQogI2RlZmluZSBCTENfUFdNX0NUTDIJCTB4NjEyNTAgLyogOTY1KyBvbmx5ICovCi0jZGVmaW5lICAgQkxNX0NPTUJJTkFUSU9OX01PREUgKDEgPDwgMzApCi0vKgotICogVGhpcyBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCAxNSBiaXRzIG9mIHRoZSBudW1iZXIgb2YgYmFja2xpZ2h0IGN5Y2xlcyBpbiBhCi0gKiBjb21wbGV0ZSBjeWNsZSBvZiB0aGUgbW9kdWxhdGVkIGJhY2tsaWdodCBjb250cm9sLgotICoKLSAqIFRoZSBhY3R1YWwgdmFsdWUgaXMgdGhpcyBmaWVsZCBtdWx0aXBsaWVkIGJ5IHR3by4KLSAqLwotI2RlZmluZSAgIEJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfTUFTSwkJKDB4N2ZmZiA8PCAxNykKLSNkZWZpbmUgICBCTE1fTEVHQUNZX01PREUJCQkJKDEgPDwgMTYpCiAvKgogICogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGN5Y2xlcyBvdXQgb2YgdGhlIGJhY2tsaWdodCBtb2R1bGF0aW9uIGN5Y2xlIGZvciB3aGljaAogICogdGhlIGJhY2tsaWdodCBpcyBvbi4KQEAgLTI2MjYsNiArMjYyMiw4IEBACiAjZGVmaW5lIERJU1BMQVlfUE9SVF9QTExfQklPU18yICAgICAgICAgMHg0NjAxNAogCiAjZGVmaW5lIFBDSF9EU1BDTEtfR0FURV9ECTB4NDIwMjAKKyMgZGVmaW5lIERQRkNVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgOSkKKyMgZGVmaW5lIERQRkNSVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDgpCiAjIGRlZmluZSBEUEZEVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDcpCiAjIGRlZmluZSBEUEFSQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA1KQogCkBAIC0zMjYzLDYgKzMyNjEsOCBAQAogI2RlZmluZSAgRk9SQ0VXQUtFCQkJCTB4QTE4QwogI2RlZmluZSAgRk9SQ0VXQUtFX0FDSwkJCQkweDEzMDA5MAogCisjZGVmaW5lICBHVF9GSUZPX0ZSRUVfRU5UUklFUwkJCTB4MTIwMDA4CisKICNkZWZpbmUgR0VONl9SUE5TV1JFUQkJCQkweEEwMDgKICNkZWZpbmUgICBHRU42X1RVUkJPX0RJU0FCTEUJCQkoMTw8MzEpCiAjZGVmaW5lICAgR0VONl9GUkVRVUVOQ1koeCkJCQkoKHgpPDwyNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKaW5kZXggMTcwMzViOC4uOGE3N2ZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKQEAgLTUzNSw2ICs1MzUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaW50ZWxfY3J0X3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBpbnRlbF9jcnQgKmNydCA9IGludGVsX2F0dGFjaGVkX2NydChjb25uZWN0b3IpOworCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKKwkJY3J0LT5mb3JjZV9ob3RwbHVnX3JlcXVpcmVkID0gMTsKK30KKwogLyoKICAqIFJvdXRpbmVzIGZvciBjb250cm9sbGluZyBzdHVmZiBvbiB0aGUgYW5hbG9nIHBvcnQKICAqLwpAQCAtNTQ4LDYgKzU1Nyw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgaW50ZWxfY3J0X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkucmVzZXQgPSBpbnRlbF9jcnRfcmVzZXQsCiAJLmRwbXMgPSBkcm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAogCS5kZXRlY3QgPSBpbnRlbF9jcnRfZGV0ZWN0LAogCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDk4OTY3ZjMuLjQ5ZmI1NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTEyMTMsNiArMTIxMywyNiBAQAogCXJldHVybiBJOTE1X1JFQUQoRFBGQ19DT05UUk9MKSAmIERQRkNfQ1RMX0VOOwogfQogCitzdGF0aWMgdm9pZCBzYW5keWJyaWRnZV9ibGl0X2ZiY191cGRhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBibHRfZWNvc2twZDsKKworCS8qIE1ha2Ugc3VyZSBibGl0dGVyIG5vdGlmaWVzIEZCQyBvZiB3cml0ZXMgKi8KKwlfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOworCWJsdF9lY29za3BkID0gSTkxNV9SRUFEKEdFTjZfQkxJVFRFUl9FQ09TS1BEKTsKKwlibHRfZWNvc2twZCB8PSBHRU42X0JMSVRURVJfRkJDX05PVElGWSA8PAorCQlHRU42X0JMSVRURVJfTE9DS19TSElGVDsKKwlJOTE1X1dSSVRFKEdFTjZfQkxJVFRFUl9FQ09TS1BELCBibHRfZWNvc2twZCk7CisJYmx0X2Vjb3NrcGQgfD0gR0VONl9CTElUVEVSX0ZCQ19OT1RJRlk7CisJSTkxNV9XUklURShHRU42X0JMSVRURVJfRUNPU0tQRCwgYmx0X2Vjb3NrcGQpOworCWJsdF9lY29za3BkICY9IH4oR0VONl9CTElUVEVSX0ZCQ19OT1RJRlkgPDwKKwkJCSBHRU42X0JMSVRURVJfTE9DS19TSElGVCk7CisJSTkxNV9XUklURShHRU42X0JMSVRURVJfRUNPU0tQRCwgYmx0X2Vjb3NrcGQpOworCVBPU1RJTkdfUkVBRChHRU42X0JMSVRURVJfRUNPU0tQRCk7CisJX19nZW42X2d0X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2KTsKK30KKwogc3RhdGljIHZvaWQgaXJvbmxha2VfZW5hYmxlX2ZiYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKQEAgLTEyNjYsNiArMTI4Niw3IEBACiAJCUk5MTVfV1JJVEUoU05CX0RQRkNfQ1RMX1NBLAogCQkJICAgU05CX0NQVV9GRU5DRV9FTkFCTEUgfCBkZXZfcHJpdi0+Y2ZiX2ZlbmNlKTsKIAkJSTkxNV9XUklURShEUEZDX0NQVV9GRU5DRV9PRkZTRVQsIGNydGMtPnkpOworCQlzYW5keWJyaWRnZV9ibGl0X2ZiY191cGRhdGUoZGV2KTsKIAl9CiAKIAlEUk1fREVCVUdfS01TKCJlbmFibGVkIGZiYyBvbiBwbGFuZSAlZFxuIiwgaW50ZWxfY3J0Yy0+cGxhbmUpOwpAQCAtMTYwOSwxOSArMTYzMCwxOSBAQAogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdG9faW50ZWxfZnJhbWVidWZmZXIob2xkX2ZiKS0+b2JqOwogCiAJCXdhaXRfZXZlbnQoZGV2X3ByaXYtPnBlbmRpbmdfZmxpcF9xdWV1ZSwKKwkJCSAgIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+bW0ud2VkZ2VkKSB8fAogCQkJICAgYXRvbWljX3JlYWQoJm9iai0+cGVuZGluZ19mbGlwKSA9PSAwKTsKIAogCQkvKiBCaWcgSGFtbWVyLCB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgYW55IHBlbmRpbmcKIAkJICogTUlfV0FJVF9GT1JfRVZFTlQgaW5zaWRlIGEgdXNlciBiYXRjaCBidWZmZXIgb24gdGhlCiAJCSAqIGN1cnJlbnQgc2Nhbm91dCBpcyByZXRpcmVkIGJlZm9yZSB1bnBpbm5pbmcgdGhlIG9sZAogCQkgKiBmcmFtZWJ1ZmZlci4KKwkJICoKKwkJICogVGhpcyBzaG91bGQgb25seSBmYWlsIHVwb24gYSBodW5nIEdQVSwgaW4gd2hpY2ggY2FzZSB3ZQorCQkgKiBjYW4gc2FmZWx5IGNvbnRpbnVlLgogCQkgKi8KIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdShvYmosIGZhbHNlKTsKLQkJaWYgKHJldCkgewotCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKHRvX2ludGVsX2ZyYW1lYnVmZmVyKGNydGMtPmZiKS0+b2JqKTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQkJcmV0dXJuIHJldDsKLQkJfQorCQkodm9pZCkgcmV0OwogCX0KIAogCXJldCA9IGludGVsX3BpcGVfc2V0X2Jhc2VfYXRvbWljKGNydGMsIGNydGMtPmZiLCB4LCB5LApAQCAtMjAyNCw2ICsyMDQ1LDMxIEBACiAJCSAgIGF0b21pY19yZWFkKCZvYmotPnBlbmRpbmdfZmxpcCkgPT0gMCk7CiB9CiAKK3N0YXRpYyBib29sIGludGVsX2NydGNfZHJpdmluZ19wY2goc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqbW9kZV9jb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKKwlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKKworCS8qCisJICogSWYgdGhlcmUncyBhIG5vbi1QQ0ggZURQIG9uIHRoaXMgY3J0YywgaXQgbXVzdCBiZSBEUF9BLCBhbmQgdGhhdAorCSAqIG11c3QgYmUgZHJpdmVuIGJ5IGl0cyBvd24gY3J0Yzsgbm8gc2hhcmluZyBpcyBwb3NzaWJsZS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZtb2RlX2NvbmZpZy0+ZW5jb2Rlcl9saXN0LCBiYXNlLmhlYWQpIHsKKwkJaWYgKGVuY29kZXItPmJhc2UuY3J0YyAhPSBjcnRjKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChlbmNvZGVyLT50eXBlKSB7CisJCWNhc2UgSU5URUxfT1VUUFVUX0VEUDoKKwkJCWlmICghaW50ZWxfZW5jb2Rlcl9pc19wY2hfZWRwKCZlbmNvZGVyLT5iYXNlKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgdm9pZCBpcm9ubGFrZV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKQEAgLTIwMzIsNiArMjA3OCw3IEBACiAJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwogCWludCBwbGFuZSA9IGludGVsX2NydGMtPnBsYW5lOwogCXUzMiByZWcsIHRlbXA7CisJYm9vbCBpc19wY2hfcG9ydCA9IGZhbHNlOwogCiAJaWYgKGludGVsX2NydGMtPmFjdGl2ZSkKIAkJcmV0dXJuOwpAQCAtMjA0NSw3ICsyMDkyLDU2IEBACiAJCQlJOTE1X1dSSVRFKFBDSF9MVkRTLCB0ZW1wIHwgTFZEU19QT1JUX0VOKTsKIAl9CiAKLQlpcm9ubGFrZV9mZGlfZW5hYmxlKGNydGMpOworCWlzX3BjaF9wb3J0ID0gaW50ZWxfY3J0Y19kcml2aW5nX3BjaChjcnRjKTsKKworCWlmIChpc19wY2hfcG9ydCkKKwkJaXJvbmxha2VfZmRpX2VuYWJsZShjcnRjKTsKKwllbHNlIHsKKwkJLyogZGlzYWJsZSBDUFUgRkRJIHR4IGFuZCBQQ0ggRkRJIHJ4ICovCisJCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJCXRlbXAgPSBJOTE1X1JFQUQocmVnKTsKKwkJSTkxNV9XUklURShyZWcsIHRlbXAgJiB+RkRJX1RYX0VOQUJMRSk7CisJCVBPU1RJTkdfUkVBRChyZWcpOworCisJCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7CisJCXRlbXAgPSBJOTE1X1JFQUQocmVnKTsKKwkJdGVtcCAmPSB+KDB4NyA8PCAxNik7CisJCXRlbXAgfD0gKEk5MTVfUkVBRChQSVBFQ09ORihwaXBlKSkgJiBQSVBFX0JQQ19NQVNLKSA8PCAxMTsKKwkJSTkxNV9XUklURShyZWcsIHRlbXAgJiB+RkRJX1JYX0VOQUJMRSk7CisKKwkJUE9TVElOR19SRUFEKHJlZyk7CisJCXVkZWxheSgxMDApOworCisJCS8qIElyb25sYWtlIHdvcmthcm91bmQsIGRpc2FibGUgY2xvY2sgcG9pbnRlciBhZnRlciBkb3duaW5nIEZESSAqLworCQlpZiAoSEFTX1BDSF9JQlgoZGV2KSkKKwkJCUk5MTVfV1JJVEUoRkRJX1JYX0NISUNLRU4ocGlwZSksCisJCQkJICAgSTkxNV9SRUFEKEZESV9SWF9DSElDS0VOKHBpcGUpICYKKwkJCQkJICAgICB+RkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9FTkFCTEUpKTsKKworCQkvKiBzdGlsbCBzZXQgdHJhaW4gcGF0dGVybiAxICovCisJCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJCXRlbXAgPSBJOTE1X1JFQUQocmVnKTsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzE7CisJCUk5MTVfV1JJVEUocmVnLCB0ZW1wKTsKKworCQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOworCQl0ZW1wID0gSTkxNV9SRUFEKHJlZyk7CisJCWlmIChIQVNfUENIX0NQVChkZXYpKSB7CisJCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJOX01BU0tfQ1BUOworCQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzFfQ1BUOworCQl9IGVsc2UgeworCQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKKwkJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOworCQl9CisJCS8qIEJQQyBpbiBGREkgcnggaXMgY29uc2lzdGVudCB3aXRoIHRoYXQgaW4gUElQRUNPTkYgKi8KKwkJdGVtcCAmPSB+KDB4MDcgPDwgMTYpOworCQl0ZW1wIHw9IChJOTE1X1JFQUQoUElQRUNPTkYocGlwZSkpICYgUElQRV9CUENfTUFTSykgPDwgMTE7CisJCUk5MTVfV1JJVEUocmVnLCB0ZW1wKTsKKworCQlQT1NUSU5HX1JFQUQocmVnKTsKKwkJdWRlbGF5KDEwMCk7CisJfQogCiAJLyogRW5hYmxlIHBhbmVsIGZpdHRpbmcgZm9yIExWRFMgKi8KIAlpZiAoZGV2X3ByaXYtPnBjaF9wZl9zaXplICYmCkBAIC0yMDc5LDYgKzIxNzUsMTAgQEAKIAkJaW50ZWxfZmx1c2hfZGlzcGxheV9wbGFuZShkZXYsIHBsYW5lKTsKIAl9CiAKKwkvKiBTa2lwIHRoZSBQQ0ggc3R1ZmYgaWYgcG9zc2libGUgKi8KKwlpZiAoIWlzX3BjaF9wb3J0KQorCQlnb3RvIGRvbmU7CisKIAkvKiBGb3IgUENIIG91dHB1dCwgdHJhaW5pbmcgRkRJIGxpbmsgKi8KIAlpZiAoSVNfR0VONihkZXYpKQogCQlnZW42X2ZkaV9saW5rX3RyYWluKGNydGMpOwpAQCAtMjE2Myw3ICsyMjYzLDcgQEAKIAlJOTE1X1dSSVRFKHJlZywgdGVtcCB8IFRSQU5TX0VOQUJMRSk7CiAJaWYgKHdhaXRfZm9yKEk5MTVfUkVBRChyZWcpICYgVFJBTlNfU1RBVEVfRU5BQkxFLCAxMDApKQogCQlEUk1fRVJST1IoImZhaWxlZCB0byBlbmFibGUgdHJhbnNjb2RlciAlZFxuIiwgcGlwZSk7Ci0KK2RvbmU6CiAJaW50ZWxfY3J0Y19sb2FkX2x1dChjcnRjKTsKIAlpbnRlbF91cGRhdGVfZmJjKGRldik7CiAJaW50ZWxfY3J0Y191cGRhdGVfY3Vyc29yKGNydGMsIHRydWUpOwpAQCAtNTUzMCw2ICs1NjMwLDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCisJLyogUmVzZXQgZmxhZ3MgYmFjayB0byB0aGUgJ3Vua25vd24nIHN0YXR1cyBzbyB0aGF0IHRoZXkKKwkgKiB3aWxsIGJlIGNvcnJlY3RseSBzZXQgb24gdGhlIGluaXRpYWwgbW9kZXNldC4KKwkgKi8KKwlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSAtMTsKK30KKwogc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgaW50ZWxfaGVscGVyX2Z1bmNzID0gewogCS5kcG1zID0gaW50ZWxfY3J0Y19kcG1zLAogCS5tb2RlX2ZpeHVwID0gaW50ZWxfY3J0Y19tb2RlX2ZpeHVwLApAQCAtNTU0MSw2ICs1NjUxLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaW50ZWxfY3J0Y19mdW5jcyA9IHsKKwkucmVzZXQgPSBpbnRlbF9jcnRjX3Jlc2V0LAogCS5jdXJzb3Jfc2V0ID0gaW50ZWxfY3J0Y19jdXJzb3Jfc2V0LAogCS5jdXJzb3JfbW92ZSA9IGludGVsX2NydGNfY3Vyc29yX21vdmUsCiAJLmdhbW1hX3NldCA9IGludGVsX2NydGNfZ2FtbWFfc2V0LApAQCAtNTYzMSw4ICs1NzQyLDcgQEAKIAlkZXZfcHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2ludGVsX2NydGMtPnBsYW5lXSA9ICZpbnRlbF9jcnRjLT5iYXNlOwogCWRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1tpbnRlbF9jcnRjLT5waXBlXSA9ICZpbnRlbF9jcnRjLT5iYXNlOwogCi0JaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHIgPSAwOwotCWludGVsX2NydGMtPmRwbXNfbW9kZSA9IC0xOworCWludGVsX2NydGNfcmVzZXQoJmludGVsX2NydGMtPmJhc2UpOwogCWludGVsX2NydGMtPmFjdGl2ZSA9IHRydWU7IC8qIGZvcmNlIHRoZSBwaXBlIG9mZiBvbiBzZXR1cF9pbml0X2NvbmZpZyAqLwogCiAJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewpAQCAtNjE3Miw3ICs2MjgyLDcgQEAKIAkgKiB1c2Vyc3BhY2UuLi4KIAkgKi8KIAlJOTE1X1dSSVRFKEdFTjZfUkNfU1RBVEUsIDApOwotCV9fZ2VuNl9mb3JjZV93YWtlX2dldChkZXZfcHJpdik7CisJX19nZW42X2d0X2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2KTsKIAogCS8qIGRpc2FibGUgdGhlIGNvdW50ZXJzIGFuZCBzZXQgZGV0ZXJtaW5pc3RpYyB0aHJlc2hvbGRzICovCiAJSTkxNV9XUklURShHRU42X1JDX0NPTlRST0wsIDApOwpAQCAtNjI3MCw3ICs2MzgwLDcgQEAKIAkvKiBlbmFibGUgYWxsIFBNIGludGVycnVwdHMgKi8KIAlJOTE1X1dSSVRFKEdFTjZfUE1JTlRSTVNLLCAwKTsKIAotCV9fZ2VuNl9mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7CisJX19nZW42X2d0X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2KTsKIH0KIAogdm9pZCBpbnRlbF9lbmFibGVfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC02Mjg2LDcgKzYzOTYsOSBAQAogCiAJCWlmIChJU19HRU41KGRldikpIHsKIAkJCS8qIFJlcXVpcmVkIGZvciBGQkMgKi8KLQkJCWRzcGNsa19nYXRlIHw9IERQRkRVTklUX0NMT0NLX0dBVEVfRElTQUJMRTsKKwkJCWRzcGNsa19nYXRlIHw9IERQRkNVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8CisJCQkJRFBGQ1JVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8CisJCQkJRFBGRFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFOwogCQkJLyogUmVxdWlyZWQgZm9yIEN4U1IgKi8KIAkJCWRzcGNsa19nYXRlIHw9IERQQVJCVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7CiAKQEAgLTY0MjksMjkgKzY1NDEsMTkgQEAKIAl9CiB9CiAKLXZvaWQgaW50ZWxfZGlzYWJsZV9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGlyb25sYWtlX3RlYXJkb3duX3JjNihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAlpZiAoZGV2X3ByaXYtPnJlbmRlcmN0eCkgewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gZGV2X3ByaXYtPnJlbmRlcmN0eDsKLQotCQlJOTE1X1dSSVRFKENDSUQsIDApOwotCQlQT1NUSU5HX1JFQUQoQ0NJRCk7Ci0KLQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOworCQlpOTE1X2dlbV9vYmplY3RfdW5waW4oZGV2X3ByaXYtPnJlbmRlcmN0eCk7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZkZXZfcHJpdi0+cmVuZGVyY3R4LT5iYXNlKTsKIAkJZGV2X3ByaXYtPnJlbmRlcmN0eCA9IE5VTEw7CiAJfQogCiAJaWYgKGRldl9wcml2LT5wd3JjdHgpIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGRldl9wcml2LT5wd3JjdHg7Ci0KLQkJSTkxNV9XUklURShQV1JDVFhBLCAwKTsKLQkJUE9TVElOR19SRUFEKFBXUkNUWEEpOwotCi0JCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluKGRldl9wcml2LT5wd3JjdHgpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZGV2X3ByaXYtPnB3cmN0eC0+YmFzZSk7CiAJCWRldl9wcml2LT5wd3JjdHggPSBOVUxMOwogCX0KIH0KQEAgLTY0NjAsMjEgKzY1NjIsMzkgQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JLyogV2FrZSB0aGUgR1BVLCBwcmV2ZW50IFJDNiwgdGhlbiByZXN0b3JlIFJTVERCWUNUTCAqLwotCUk5MTVfV1JJVEUoUlNUREJZQ1RMLCBJOTE1X1JFQUQoUlNUREJZQ1RMKSB8IFJDWF9TV19FWElUKTsKLQl3YWl0X2ZvcigoKEk5MTVfUkVBRChSU1REQllDVEwpICYgUlNYX1NUQVRVU19NQVNLKSA9PSBSU1hfU1RBVFVTX09OKSwKLQkJIDEwKTsKLQlQT1NUSU5HX1JFQUQoQ0NJRCk7Ci0JSTkxNV9XUklURShQV1JDVFhBLCAwKTsKLQlQT1NUSU5HX1JFQUQoUFdSQ1RYQSk7Ci0JSTkxNV9XUklURShSU1REQllDVEwsIEk5MTVfUkVBRChSU1REQllDVEwpICYgflJDWF9TV19FWElUKTsKLQlQT1NUSU5HX1JFQUQoUlNUREJZQ1RMKTsKLQlpOTE1X2dlbV9vYmplY3RfdW5waW4oZGV2X3ByaXYtPnJlbmRlcmN0eCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmRldl9wcml2LT5yZW5kZXJjdHgtPmJhc2UpOwotCWRldl9wcml2LT5yZW5kZXJjdHggPSBOVUxMOwotCWk5MTVfZ2VtX29iamVjdF91bnBpbihkZXZfcHJpdi0+cHdyY3R4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZGV2X3ByaXYtPnB3cmN0eC0+YmFzZSk7Ci0JZGV2X3ByaXYtPnB3cmN0eCA9IE5VTEw7CisJaWYgKEk5MTVfUkVBRChQV1JDVFhBKSkgeworCQkvKiBXYWtlIHRoZSBHUFUsIHByZXZlbnQgUkM2LCB0aGVuIHJlc3RvcmUgUlNUREJZQ1RMICovCisJCUk5MTVfV1JJVEUoUlNUREJZQ1RMLCBJOTE1X1JFQUQoUlNUREJZQ1RMKSB8IFJDWF9TV19FWElUKTsKKwkJd2FpdF9mb3IoKChJOTE1X1JFQUQoUlNUREJZQ1RMKSAmIFJTWF9TVEFUVVNfTUFTSykgPT0gUlNYX1NUQVRVU19PTiksCisJCQkgNTApOworCisJCUk5MTVfV1JJVEUoUFdSQ1RYQSwgMCk7CisJCVBPU1RJTkdfUkVBRChQV1JDVFhBKTsKKworCQlJOTE1X1dSSVRFKFJTVERCWUNUTCwgSTkxNV9SRUFEKFJTVERCWUNUTCkgJiB+UkNYX1NXX0VYSVQpOworCQlQT1NUSU5HX1JFQUQoUlNUREJZQ1RMKTsKKwl9CisKKwlpcm9ubGFrZV90ZWFyZG93bl9yYzYoZGV2KTsKK30KKworc3RhdGljIGludCBpcm9ubGFrZV9zZXR1cF9yYzYoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2LT5yZW5kZXJjdHggPT0gTlVMTCkKKwkJZGV2X3ByaXYtPnJlbmRlcmN0eCA9IGludGVsX2FsbG9jX2NvbnRleHRfcGFnZShkZXYpOworCWlmICghZGV2X3ByaXYtPnJlbmRlcmN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoZGV2X3ByaXYtPnB3cmN0eCA9PSBOVUxMKQorCQlkZXZfcHJpdi0+cHdyY3R4ID0gaW50ZWxfYWxsb2NfY29udGV4dF9wYWdlKGRldik7CisJaWYgKCFkZXZfcHJpdi0+cHdyY3R4KSB7CisJCWlyb25sYWtlX3RlYXJkb3duX3JjNihkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBpcm9ubGFrZV9lbmFibGVfcmM2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC02NDgyLDE1ICs2NjAyLDI2IEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgcmV0OwogCisJLyogcmM2IGRpc2FibGVkIGJ5IGRlZmF1bHQgZHVlIHRvIHJlcGVhdGVkIHJlcG9ydHMgb2YgaGFuZ2luZyBkdXJpbmcKKwkgKiBib290IGFuZCByZXN1bWUuCisJICovCisJaWYgKCFpOTE1X2VuYWJsZV9yYzYpCisJCXJldHVybjsKKworCXJldCA9IGlyb25sYWtlX3NldHVwX3JjNihkZXYpOworCWlmIChyZXQpCisJCXJldHVybjsKKwogCS8qCiAJICogR1BVIGNhbiBhdXRvbWF0aWNhbGx5IHBvd2VyIGRvd24gdGhlIHJlbmRlciB1bml0IGlmIGdpdmVuIGEgcGFnZQogCSAqIHRvIHNhdmUgc3RhdGUuCiAJICovCiAJcmV0ID0gQkVHSU5fTFBfUklORyg2KTsKIAlpZiAocmV0KSB7Ci0JCWlyb25sYWtlX2Rpc2FibGVfcmM2KGRldik7CisJCWlyb25sYWtlX3RlYXJkb3duX3JjNihkZXYpOwogCQlyZXR1cm47CiAJfQorCiAJT1VUX1JJTkcoTUlfU1VTUEVORF9GTFVTSCB8IE1JX1NVU1BFTkRfRkxVU0hfRU4pOwogCU9VVF9SSU5HKE1JX1NFVF9DT05URVhUKTsKIAlPVVRfUklORyhkZXZfcHJpdi0+cmVuZGVyY3R4LT5ndHRfb2Zmc2V0IHwKQEAgLTY1MDcsNiArNjYzOCw3IEBACiAJSTkxNV9XUklURShSU1REQllDVEwsIEk5MTVfUkVBRChSU1REQllDVEwpICYgflJDWF9TV19FWElUKTsKIH0KIAorCiAvKiBTZXQgdXAgY2hpcCBzcGVjaWZpYyBkaXNwbGF5IGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgaW50ZWxfaW5pdF9kaXNwbGF5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC02NzQ5LDIxICs2ODgxLDkgQEAKIAlpZiAoSVNfR0VONihkZXYpKQogCQlnZW42X2VuYWJsZV9ycHMoZGV2X3ByaXYpOwogCi0JaWYgKElTX0lST05MQUtFX00oZGV2KSkgewotCQlkZXZfcHJpdi0+cmVuZGVyY3R4ID0gaW50ZWxfYWxsb2NfY29udGV4dF9wYWdlKGRldik7Ci0JCWlmICghZGV2X3ByaXYtPnJlbmRlcmN0eCkKLQkJCWdvdG8gc2tpcF9yYzY7Ci0JCWRldl9wcml2LT5wd3JjdHggPSBpbnRlbF9hbGxvY19jb250ZXh0X3BhZ2UoZGV2KTsKLQkJaWYgKCFkZXZfcHJpdi0+cHdyY3R4KSB7Ci0JCQlpOTE1X2dlbV9vYmplY3RfdW5waW4oZGV2X3ByaXYtPnJlbmRlcmN0eCk7Ci0JCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZGV2X3ByaXYtPnJlbmRlcmN0eC0+YmFzZSk7Ci0JCQlkZXZfcHJpdi0+cmVuZGVyY3R4ID0gTlVMTDsKLQkJCWdvdG8gc2tpcF9yYzY7Ci0JCX0KKwlpZiAoSVNfSVJPTkxBS0VfTShkZXYpKQogCQlpcm9ubGFrZV9lbmFibGVfcmM2KGRldik7Ci0JfQogCi1za2lwX3JjNjoKIAlJTklUX1dPUksoJmRldl9wcml2LT5pZGxlX3dvcmssIGludGVsX2lkbGVfdXBkYXRlKTsKIAlzZXR1cF90aW1lcigmZGV2X3ByaXYtPmlkbGVfdGltZXIsIGludGVsX2dwdV9pZGxlX3RpbWVyLAogCQkgICAgKHVuc2lnbmVkIGxvbmcpZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IDFmNDI0MmIuLjUxY2I0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtMTYzOSw2ICsxNjM5LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBib29sCitpbnRlbF9kcF9kZXRlY3RfYXVkaW8oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gaW50ZWxfYXR0YWNoZWRfZHAoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwlib29sIGhhc19hdWRpbyA9IGZhbHNlOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsICZpbnRlbF9kcC0+YWRhcHRlcik7CisJaWYgKGVkaWQpIHsKKwkJaGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOworCisJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnJhd19lZGlkID0gTlVMTDsKKwkJa2ZyZWUoZWRpZCk7CisJfQorCisJcmV0dXJuIGhhc19hdWRpbzsKK30KKwogc3RhdGljIGludAogaW50ZWxfZHBfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCSAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LApAQCAtMTY1MiwxNyArMTY3MCwyMyBAQAogCQlyZXR1cm4gcmV0OwogCiAJaWYgKHByb3BlcnR5ID09IGludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewotCQlpZiAodmFsID09IGludGVsX2RwLT5mb3JjZV9hdWRpbykKKwkJaW50IGkgPSB2YWw7CisJCWJvb2wgaGFzX2F1ZGlvOworCisJCWlmIChpID09IGludGVsX2RwLT5mb3JjZV9hdWRpbykKIAkJCXJldHVybiAwOwogCi0JCWludGVsX2RwLT5mb3JjZV9hdWRpbyA9IHZhbDsKKwkJaW50ZWxfZHAtPmZvcmNlX2F1ZGlvID0gaTsKIAotCQlpZiAodmFsID4gMCAmJiBpbnRlbF9kcC0+aGFzX2F1ZGlvKQotCQkJcmV0dXJuIDA7Ci0JCWlmICh2YWwgPCAwICYmICFpbnRlbF9kcC0+aGFzX2F1ZGlvKQorCQlpZiAoaSA9PSAwKQorCQkJaGFzX2F1ZGlvID0gaW50ZWxfZHBfZGV0ZWN0X2F1ZGlvKGNvbm5lY3Rvcik7CisJCWVsc2UKKwkJCWhhc19hdWRpbyA9IGkgPiAwOworCisJCWlmIChoYXNfYXVkaW8gPT0gaW50ZWxfZHAtPmhhc19hdWRpbykKIAkJCXJldHVybiAwOwogCi0JCWludGVsX2RwLT5oYXNfYXVkaW8gPSB2YWwgPiAwOworCQlpbnRlbF9kcC0+aGFzX2F1ZGlvID0gaGFzX2F1ZGlvOwogCQlnb3RvIGRvbmU7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDc0ZGIyNTUuLjJjNDMxMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0yOTgsNyArMjk4LDYgQEAKIGV4dGVybiB2b2lkIGludGVsX2NydGNfZmJfZ2FtbWFfZ2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCiAJCQkJICAgIHUxNiAqYmx1ZSwgaW50IHJlZ25vKTsKIGV4dGVybiB2b2lkIGludGVsX2VuYWJsZV9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBpbnRlbF9kaXNhYmxlX2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGlyb25sYWtlX2VuYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaXJvbmxha2VfZGlzYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZ2VuNl9lbmFibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKaW5kZXggMGQwMjczZS4uYzYzNWM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwpAQCAtMjUxLDYgKzI1MSwyNyBAQAogCQkJCSAgICZkZXZfcHJpdi0+Z21idXNbaW50ZWxfaGRtaS0+ZGRjX2J1c10uYWRhcHRlcik7CiB9CiAKK3N0YXRpYyBib29sCitpbnRlbF9oZG1pX2RldGVjdF9hdWRpbyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBpbnRlbF9oZG1pICppbnRlbF9oZG1pID0gaW50ZWxfYXR0YWNoZWRfaGRtaShjb25uZWN0b3IpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGNvbm5lY3Rvci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwlib29sIGhhc19hdWRpbyA9IGZhbHNlOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsCisJCQkgICAgJmRldl9wcml2LT5nbWJ1c1tpbnRlbF9oZG1pLT5kZGNfYnVzXS5hZGFwdGVyKTsKKwlpZiAoZWRpZCkgeworCQlpZiAoZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKQorCQkJaGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOworCisJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnJhd19lZGlkID0gTlVMTDsKKwkJa2ZyZWUoZWRpZCk7CisJfQorCisJcmV0dXJuIGhhc19hdWRpbzsKK30KKwogc3RhdGljIGludAogaW50ZWxfaGRtaV9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJICAgICAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCkBAIC0yNjQsMTcgKzI4NSwyMyBAQAogCQlyZXR1cm4gcmV0OwogCiAJaWYgKHByb3BlcnR5ID09IGludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7Ci0JCWlmICh2YWwgPT0gaW50ZWxfaGRtaS0+Zm9yY2VfYXVkaW8pCisJCWludCBpID0gdmFsOworCQlib29sIGhhc19hdWRpbzsKKworCQlpZiAoaSA9PSBpbnRlbF9oZG1pLT5mb3JjZV9hdWRpbykKIAkJCXJldHVybiAwOwogCi0JCWludGVsX2hkbWktPmZvcmNlX2F1ZGlvID0gdmFsOworCQlpbnRlbF9oZG1pLT5mb3JjZV9hdWRpbyA9IGk7CiAKLQkJaWYgKHZhbCA+IDAgJiYgaW50ZWxfaGRtaS0+aGFzX2F1ZGlvKQotCQkJcmV0dXJuIDA7Ci0JCWlmICh2YWwgPCAwICYmICFpbnRlbF9oZG1pLT5oYXNfYXVkaW8pCisJCWlmIChpID09IDApCisJCQloYXNfYXVkaW8gPSBpbnRlbF9oZG1pX2RldGVjdF9hdWRpbyhjb25uZWN0b3IpOworCQllbHNlCisJCQloYXNfYXVkaW8gPSBpID4gMDsKKworCQlpZiAoaGFzX2F1ZGlvID09IGludGVsX2hkbWktPmhhc19hdWRpbykKIAkJCXJldHVybiAwOwogCi0JCWludGVsX2hkbWktPmhhc19hdWRpbyA9IHZhbCA+IDA7CisJCWludGVsX2hkbWktPmhhc19hdWRpbyA9IGhhc19hdWRpbzsKIAkJZ290byBkb25lOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IGFjZThkNWQuLmJjZGJhN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTI2MSwxMiArMjYxLDYgQEAKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JLyogTWFrZSBzdXJlIHByZS05NjVzIHNldCBkaXRoZXIgY29ycmVjdGx5ICovCi0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNCkgewotCQlpZiAoZGV2X3ByaXYtPmx2ZHNfZGl0aGVyKQotCQkJcGZpdF9jb250cm9sIHw9IFBBTkVMXzhUTzZfRElUSEVSX0VOQUJMRTsKLQl9Ci0KIAkvKiBOYXRpdmUgbW9kZXMgZG9uJ3QgbmVlZCBmaXR0aW5nICovCiAJaWYgKGFkanVzdGVkX21vZGUtPmhkaXNwbGF5ID09IG1vZGUtPmhkaXNwbGF5ICYmCiAJICAgIGFkanVzdGVkX21vZGUtPnZkaXNwbGF5ID09IG1vZGUtPnZkaXNwbGF5KQpAQCAtMzc0LDEwICszNjgsMTYgQEAKIAl9CiAKIG91dDoKKwkvKiBJZiBub3QgZW5hYmxpbmcgc2NhbGluZywgYmUgY29uc2lzdGVudCBhbmQgYWx3YXlzIHVzZSAwLiAqLwogCWlmICgocGZpdF9jb250cm9sICYgUEZJVF9FTkFCTEUpID09IDApIHsKIAkJcGZpdF9jb250cm9sID0gMDsKIAkJcGZpdF9wZ21fcmF0aW9zID0gMDsKIAl9CisKKwkvKiBNYWtlIHN1cmUgcHJlLTk2NSBzZXQgZGl0aGVyIGNvcnJlY3RseSAqLworCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8IDQgJiYgZGV2X3ByaXYtPmx2ZHNfZGl0aGVyKQorCQlwZml0X2NvbnRyb2wgfD0gUEFORUxfOFRPNl9ESVRIRVJfRU5BQkxFOworCiAJaWYgKHBmaXRfY29udHJvbCAhPSBpbnRlbF9sdmRzLT5wZml0X2NvbnRyb2wgfHwKIAkgICAgcGZpdF9wZ21fcmF0aW9zICE9IGludGVsX2x2ZHMtPnBmaXRfcGdtX3JhdGlvcykgewogCQlpbnRlbF9sdmRzLT5wZml0X2NvbnRyb2wgPSBwZml0X2NvbnRyb2w7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ByZWdpb24uYwppbmRleCBmMjk1YTdhLi42NGZkNjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX29wcmVnaW9uLmMKQEAgLTI2LDYgKzI2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGlfaW8uaD4KICNpbmNsdWRlIDxhY3BpL3ZpZGVvLmg+CiAKICNpbmNsdWRlICJkcm1QLmgiCkBAIC00NzYsNyArNDc3LDcgQEAKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAl9CiAKLQliYXNlID0gaW9yZW1hcChhc2xzLCBPUFJFR0lPTl9TSVpFKTsKKwliYXNlID0gYWNwaV9vc19pb3JlbWFwKGFzbHMsIE9QUkVHSU9OX1NJWkUpOwogCWlmICghYmFzZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCmluZGV4IGM2NTk5MmQuLmQ4NjBhYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYwpAQCAtMzAsOCArMzAsNiBAQAogCiAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCiAKLSNkZWZpbmUgUENJX0xCUEMgMHhmNCAvKiBsZWdhY3kvY29tYmluYXRpb24gYmFja2xpZ2h0IG1vZGVzICovCi0KIHZvaWQKIGludGVsX2ZpeGVkX3BhbmVsX21vZGUoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmZpeGVkX21vZGUsCiAJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKQEAgLTExMiwxOSArMTEwLDYgQEAKIAlkZXZfcHJpdi0+cGNoX3BmX3NpemUgPSAod2lkdGggPDwgMTYpIHwgaGVpZ2h0OwogfQogCi1zdGF0aWMgaW50IGlzX2JhY2tsaWdodF9jb21iaW5hdGlvbl9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KQotCQlyZXR1cm4gSTkxNV9SRUFEKEJMQ19QV01fQ1RMMikgJiBCTE1fQ09NQklOQVRJT05fTU9ERTsKLQotCWlmIChJU19HRU4yKGRldikpCi0JCXJldHVybiBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpICYgQkxNX0xFR0FDWV9NT0RFOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1MzIgaTkxNV9yZWFkX2JsY19wd21fY3RsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKIAl1MzIgdmFsOwpAQCAtMTgxLDkgKzE2Niw2IEBACiAJCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA0KQogCQkJCW1heCAmPSB+MTsKIAkJfQotCi0JCWlmIChpc19iYWNrbGlnaHRfY29tYmluYXRpb25fbW9kZShkZXYpKQotCQkJbWF4ICo9IDB4ZmY7CiAJfQogCiAJRFJNX0RFQlVHX0RSSVZFUigibWF4IGJhY2tsaWdodCBQV00gPSAlZFxuIiwgbWF4KTsKQEAgLTIwMSwxNSArMTgzLDYgQEAKIAkJdmFsID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKSAmIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0s7CiAJCWlmIChJU19QSU5FVklFVyhkZXYpKQogCQkJdmFsID4+PSAxOwotCi0JCWlmIChpc19iYWNrbGlnaHRfY29tYmluYXRpb25fbW9kZShkZXYpKXsKLQkJCXU4IGxicGM7Ci0KLQkJCXZhbCAmPSB+MTsKLQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldi0+cGRldiwgUENJX0xCUEMsICZsYnBjKTsKLQkJCXZhbCAqPSBsYnBjOwotCQkJdmFsID4+PSAxOwotCQl9CiAJfQogCiAJRFJNX0RFQlVHX0RSSVZFUigiZ2V0IGJhY2tsaWdodCBQV00gPSAlZFxuIiwgdmFsKTsKQEAgLTIzMiwxNiArMjA1LDYgQEAKIAogCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCXJldHVybiBpbnRlbF9wY2hfcGFuZWxfc2V0X2JhY2tsaWdodChkZXYsIGxldmVsKTsKLQotCWlmIChpc19iYWNrbGlnaHRfY29tYmluYXRpb25fbW9kZShkZXYpKXsKLQkJdTMyIG1heCA9IGludGVsX3BhbmVsX2dldF9tYXhfYmFja2xpZ2h0KGRldik7Ci0JCXU4IGxwYmM7Ci0KLQkJbHBiYyA9IGxldmVsICogMHhmZSAvIG1heCArIDE7Ci0JCWxldmVsIC89IGxwYmM7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYtPnBkZXYsIFBDSV9MQlBDLCBscGJjKTsKLQl9Ci0KIAl0bXAgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpOwogCWlmIChJU19QSU5FVklFVyhkZXYpKSB7CiAJCXRtcCAmPSB+KEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0sgLSAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwppbmRleCBmNmI5YmFhLi40NDVmMjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCkBAIC0zNCw2ICszNCwxNCBAQAogI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKIAorc3RhdGljIGlubGluZSBpbnQgcmluZ19zcGFjZShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCit7CisJaW50IHNwYWNlID0gKHJpbmctPmhlYWQgJiBIRUFEX0FERFIpIC0gKHJpbmctPnRhaWwgKyA4KTsKKwlpZiAoc3BhY2UgPCAwKQorCQlzcGFjZSArPSByaW5nLT5zaXplOworCXJldHVybiBzcGFjZTsKK30KKwogc3RhdGljIHUzMiBpOTE1X2dlbV9nZXRfc2Vxbm8oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTIwNCwxMSArMjEyLDkgQEAKIAlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUocmluZy0+ZGV2LCBEUklWRVJfTU9ERVNFVCkpCiAJCWk5MTVfa2VybmVsX2xvc3RfY29udGV4dChyaW5nLT5kZXYpOwogCWVsc2UgewotCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZykgJiBIRUFEX0FERFI7CisJCXJpbmctPmhlYWQgPSBJOTE1X1JFQURfSEVBRChyaW5nKTsKIAkJcmluZy0+dGFpbCA9IEk5MTVfUkVBRF9UQUlMKHJpbmcpICYgVEFJTF9BRERSOwotCQlyaW5nLT5zcGFjZSA9IHJpbmctPmhlYWQgLSAocmluZy0+dGFpbCArIDgpOwotCQlpZiAocmluZy0+c3BhY2UgPCAwKQotCQkJcmluZy0+c3BhY2UgKz0gcmluZy0+c2l6ZTsKKwkJcmluZy0+c3BhY2UgPSByaW5nX3NwYWNlKHJpbmcpOwogCX0KIAogCXJldHVybiAwOwpAQCAtOTIxLDMyICs5MjcsMzQgQEAKIAl9CiAKIAlyaW5nLT50YWlsID0gMDsKLQlyaW5nLT5zcGFjZSA9IHJpbmctPmhlYWQgLSA4OworCXJpbmctPnNwYWNlID0gcmluZ19zcGFjZShyaW5nKTsKIAogCXJldHVybiAwOwogfQogCiBpbnQgaW50ZWxfd2FpdF9yaW5nX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsIGludCBuKQogewotCWludCByZXJlYWQgPSAwOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nIGVuZDsKIAl1MzIgaGVhZDsKIAorCS8qIElmIHRoZSByZXBvcnRlZCBoZWFkIHBvc2l0aW9uIGhhcyB3cmFwcGVkIG9yIGhhc24ndCBhZHZhbmNlZCwKKwkgKiBmYWxsYmFjayB0byB0aGUgc2xvdyBhbmQgYWNjdXJhdGUgcGF0aC4KKwkgKi8KKwloZWFkID0gaW50ZWxfcmVhZF9zdGF0dXNfcGFnZShyaW5nLCA0KTsKKwlpZiAoaGVhZCA+IHJpbmctPmhlYWQpIHsKKwkJcmluZy0+aGVhZCA9IGhlYWQ7CisJCXJpbmctPnNwYWNlID0gcmluZ19zcGFjZShyaW5nKTsKKwkJaWYgKHJpbmctPnNwYWNlID49IG4pCisJCQlyZXR1cm4gMDsKKwl9CisKIAl0cmFjZV9pOTE1X3Jpbmdfd2FpdF9iZWdpbiAoZGV2KTsKIAllbmQgPSBqaWZmaWVzICsgMyAqIEhaOwogCWRvIHsKLQkJLyogSWYgdGhlIHJlcG9ydGVkIGhlYWQgcG9zaXRpb24gaGFzIHdyYXBwZWQgb3IgaGFzbid0IGFkdmFuY2VkLAotCQkgKiBmYWxsYmFjayB0byB0aGUgc2xvdyBhbmQgYWNjdXJhdGUgcGF0aC4KLQkJICovCi0JCWhlYWQgPSBpbnRlbF9yZWFkX3N0YXR1c19wYWdlKHJpbmcsIDQpOwotCQlpZiAocmVyZWFkKQotCQkJaGVhZCA9IEk5MTVfUkVBRF9IRUFEKHJpbmcpOwotCQlyaW5nLT5oZWFkID0gaGVhZCAmIEhFQURfQUREUjsKLQkJcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gKHJpbmctPnRhaWwgKyA4KTsKLQkJaWYgKHJpbmctPnNwYWNlIDwgMCkKLQkJCXJpbmctPnNwYWNlICs9IHJpbmctPnNpemU7CisJCXJpbmctPmhlYWQgPSBJOTE1X1JFQURfSEVBRChyaW5nKTsKKwkJcmluZy0+c3BhY2UgPSByaW5nX3NwYWNlKHJpbmcpOwogCQlpZiAocmluZy0+c3BhY2UgPj0gbikgewogCQkJdHJhY2VfaTkxNV9yaW5nX3dhaXRfZW5kKGRldik7CiAJCQlyZXR1cm4gMDsKQEAgLTk2MSw3ICs5NjksNiBAQAogCQltc2xlZXAoMSk7CiAJCWlmIChhdG9taWNfcmVhZCgmZGV2X3ByaXYtPm1tLndlZGdlZCkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKLQkJcmVyZWFkID0gMTsKIAl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCBlbmQpKTsKIAl0cmFjZV9pOTE1X3Jpbmdfd2FpdF9lbmQgKGRldik7CiAJcmV0dXJuIC1FQlVTWTsKQEAgLTEwNTIsMjIgKzEwNTksMjUgQEAKIH0KIAogc3RhdGljIGludCBnZW42X3JpbmdfZmx1c2goc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAotCQkJICAgdTMyIGludmFsaWRhdGVfZG9tYWlucywKLQkJCSAgIHUzMiBmbHVzaF9kb21haW5zKQorCQkJICAgdTMyIGludmFsaWRhdGUsIHUzMiBmbHVzaCkKIHsKKwl1aW50MzJfdCBjbWQ7CiAJaW50IHJldDsKIAotCWlmICgoZmx1c2hfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpID09IDApCisJaWYgKCgoaW52YWxpZGF0ZSB8IGZsdXNoKSAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKSA9PSAwKQogCQlyZXR1cm4gMDsKIAogCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmluZywgNCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9GTFVTSF9EVyk7CisJY21kID0gTUlfRkxVU0hfRFc7CisJaWYgKGludmFsaWRhdGUgJiBJOTE1X0dFTV9HUFVfRE9NQUlOUykKKwkJY21kIHw9IE1JX0lOVkFMSURBVEVfVExCIHwgTUlfSU5WQUxJREFURV9CU0Q7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIGNtZCk7CiAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOwogCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKLQlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOwogCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMjMsMjIgKzEyMzMsMjUgQEAKIH0KIAogc3RhdGljIGludCBibHRfcmluZ19mbHVzaChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCi0JCQkgICB1MzIgaW52YWxpZGF0ZV9kb21haW5zLAotCQkJICAgdTMyIGZsdXNoX2RvbWFpbnMpCisJCQkgIHUzMiBpbnZhbGlkYXRlLCB1MzIgZmx1c2gpCiB7CisJdWludDMyX3QgY21kOwogCWludCByZXQ7CiAKLQlpZiAoKGZsdXNoX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fUkVOREVSKSA9PSAwKQorCWlmICgoKGludmFsaWRhdGUgfCBmbHVzaCkgJiBJOTE1X0dFTV9ET01BSU5fUkVOREVSKSA9PSAwKQogCQlyZXR1cm4gMDsKIAogCXJldCA9IGJsdF9yaW5nX2JlZ2luKHJpbmcsIDQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfRkxVU0hfRFcpOworCWNtZCA9IE1JX0ZMVVNIX0RXOworCWlmIChpbnZhbGlkYXRlICYgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUikKKwkJY21kIHw9IE1JX0lOVkFMSURBVEVfVExCOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBjbWQpOwogCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKIAlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7Ci0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKIAlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjkyLDYgKzEzMDUsNDggQEAKIAlyZXR1cm4gaW50ZWxfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIHJpbmcpOwogfQogCitpbnQgaW50ZWxfcmVuZGVyX3JpbmdfaW5pdF9kcmkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTY0IHN0YXJ0LCB1MzIgc2l6ZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbUkNTXTsKKworCSpyaW5nID0gcmVuZGVyX3Jpbmc7CisJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDYpIHsKKwkJcmluZy0+YWRkX3JlcXVlc3QgPSBnZW42X2FkZF9yZXF1ZXN0OworCQlyaW5nLT5pcnFfZ2V0ID0gZ2VuNl9yZW5kZXJfcmluZ19nZXRfaXJxOworCQlyaW5nLT5pcnFfcHV0ID0gZ2VuNl9yZW5kZXJfcmluZ19wdXRfaXJxOworCX0gZWxzZSBpZiAoSVNfR0VONShkZXYpKSB7CisJCXJpbmctPmFkZF9yZXF1ZXN0ID0gcGNfcmVuZGVyX2FkZF9yZXF1ZXN0OworCQlyaW5nLT5nZXRfc2Vxbm8gPSBwY19yZW5kZXJfZ2V0X3NlcW5vOworCX0KKworCXJpbmctPmRldiA9IGRldjsKKwlJTklUX0xJU1RfSEVBRCgmcmluZy0+YWN0aXZlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5yZXF1ZXN0X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5ncHVfd3JpdGVfbGlzdCk7CisKKwlyaW5nLT5zaXplID0gc2l6ZTsKKwlyaW5nLT5lZmZlY3RpdmVfc2l6ZSA9IHJpbmctPnNpemU7CisJaWYgKElTX0k4MzAocmluZy0+ZGV2KSkKKwkJcmluZy0+ZWZmZWN0aXZlX3NpemUgLT0gMTI4OworCisJcmluZy0+bWFwLm9mZnNldCA9IHN0YXJ0OworCXJpbmctPm1hcC5zaXplID0gc2l6ZTsKKwlyaW5nLT5tYXAudHlwZSA9IDA7CisJcmluZy0+bWFwLmZsYWdzID0gMDsKKwlyaW5nLT5tYXAubXRyciA9IDA7CisKKwlkcm1fY29yZV9pb3JlbWFwX3djKCZyaW5nLT5tYXAsIGRldik7CisJaWYgKHJpbmctPm1hcC5oYW5kbGUgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgorCQkJICAiIHJpbmcgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmluZy0+dmlydHVhbF9zdGFydCA9ICh2b2lkIF9fZm9yY2UgX19pb21lbSAqKXJpbmctPm1hcC5oYW5kbGU7CisJcmV0dXJuIDA7Cit9CisKIGludCBpbnRlbF9pbml0X2JzZF9yaW5nX2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCmluZGV4IDViMGFiZmEuLjM0MzA2ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKQEAgLTE0LDIyICsxNCwyMyBAQAogCXN0cnVjdAkJZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogfTsKIAotI2RlZmluZSBJOTE1X1JJTkdfUkVBRChyZWcpIGk5MTVfc2FmZV9yZWFkKGRldl9wcml2LCByZWcpCisjZGVmaW5lIEk5MTVfUklOR19SRUFEKHJlZykgaTkxNV9ndF9yZWFkKGRldl9wcml2LCByZWcpCisjZGVmaW5lIEk5MTVfUklOR19XUklURShyZWcsIHZhbCkgaTkxNV9ndF93cml0ZShkZXZfcHJpdiwgcmVnLCB2YWwpCiAKICNkZWZpbmUgSTkxNV9SRUFEX1RBSUwocmluZykgSTkxNV9SSU5HX1JFQUQoUklOR19UQUlMKChyaW5nKS0+bW1pb19iYXNlKSkKLSNkZWZpbmUgSTkxNV9XUklURV9UQUlMKHJpbmcsIHZhbCkgSTkxNV9XUklURShSSU5HX1RBSUwoKHJpbmcpLT5tbWlvX2Jhc2UpLCB2YWwpCisjZGVmaW5lIEk5MTVfV1JJVEVfVEFJTChyaW5nLCB2YWwpIEk5MTVfUklOR19XUklURShSSU5HX1RBSUwoKHJpbmcpLT5tbWlvX2Jhc2UpLCB2YWwpCiAKICNkZWZpbmUgSTkxNV9SRUFEX1NUQVJUKHJpbmcpIEk5MTVfUklOR19SRUFEKFJJTkdfU1RBUlQoKHJpbmcpLT5tbWlvX2Jhc2UpKQotI2RlZmluZSBJOTE1X1dSSVRFX1NUQVJUKHJpbmcsIHZhbCkgSTkxNV9XUklURShSSU5HX1NUQVJUKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQorI2RlZmluZSBJOTE1X1dSSVRFX1NUQVJUKHJpbmcsIHZhbCkgSTkxNV9SSU5HX1dSSVRFKFJJTkdfU1RBUlQoKHJpbmcpLT5tbWlvX2Jhc2UpLCB2YWwpCiAKICNkZWZpbmUgSTkxNV9SRUFEX0hFQUQocmluZykgIEk5MTVfUklOR19SRUFEKFJJTkdfSEVBRCgocmluZyktPm1taW9fYmFzZSkpCi0jZGVmaW5lIEk5MTVfV1JJVEVfSEVBRChyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19IRUFEKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQorI2RlZmluZSBJOTE1X1dSSVRFX0hFQUQocmluZywgdmFsKSBJOTE1X1JJTkdfV1JJVEUoUklOR19IRUFEKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQogCiAjZGVmaW5lIEk5MTVfUkVBRF9DVEwocmluZykgSTkxNV9SSU5HX1JFQUQoUklOR19DVEwoKHJpbmcpLT5tbWlvX2Jhc2UpKQotI2RlZmluZSBJOTE1X1dSSVRFX0NUTChyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19DVEwoKHJpbmcpLT5tbWlvX2Jhc2UpLCB2YWwpCisjZGVmaW5lIEk5MTVfV1JJVEVfQ1RMKHJpbmcsIHZhbCkgSTkxNV9SSU5HX1dSSVRFKFJJTkdfQ1RMKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQogCi0jZGVmaW5lIEk5MTVfV1JJVEVfSU1SKHJpbmcsIHZhbCkgSTkxNV9XUklURShSSU5HX0lNUigocmluZyktPm1taW9fYmFzZSksIHZhbCkKICNkZWZpbmUgSTkxNV9SRUFEX0lNUihyaW5nKSBJOTE1X1JJTkdfUkVBRChSSU5HX0lNUigocmluZyktPm1taW9fYmFzZSkpCisjZGVmaW5lIEk5MTVfV1JJVEVfSU1SKHJpbmcsIHZhbCkgSTkxNV9SSU5HX1dSSVRFKFJJTkdfSU1SKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQogCiAjZGVmaW5lIEk5MTVfUkVBRF9OT1BJRChyaW5nKSBJOTE1X1JJTkdfUkVBRChSSU5HX05PUElEKChyaW5nKS0+bW1pb19iYXNlKSkKICNkZWZpbmUgSTkxNV9SRUFEX1NZTkNfMChyaW5nKSBJOTE1X1JJTkdfUkVBRChSSU5HX1NZTkNfMCgocmluZyktPm1taW9fYmFzZSkpCkBAIC0xNjYsNCArMTY3LDcgQEAKIHUzMiBpbnRlbF9yaW5nX2dldF9hY3RpdmVfaGVhZChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwogdm9pZCBpbnRlbF9yaW5nX3NldHVwX3N0YXR1c19wYWdlKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyk7CiAKKy8qIERSSSB3YXJ0cyAqLworaW50IGludGVsX3JlbmRlcl9yaW5nX2luaXRfZHJpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU2NCBzdGFydCwgdTMyIHNpemUpOworCiAjZW5kaWYgLyogX0lOVEVMX1JJTkdCVUZGRVJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwppbmRleCA0NWNkMzc2Li43YzUwY2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCkBAIC00Niw2ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgU0RWT19UVl9NQVNLKQogCiAjZGVmaW5lIElTX1RWKGMpCShjLT5vdXRwdXRfZmxhZyAmIFNEVk9fVFZfTUFTSykKKyNkZWZpbmUgSVNfVE1EUyhjKQkoYy0+b3V0cHV0X2ZsYWcgJiBTRFZPX1RNRFNfTUFTSykKICNkZWZpbmUgSVNfTFZEUyhjKQkoYy0+b3V0cHV0X2ZsYWcgJiBTRFZPX0xWRFNfTUFTSykKICNkZWZpbmUgSVNfVFZfT1JfTFZEUyhjKSAoYy0+b3V0cHV0X2ZsYWcgJiAoU0RWT19UVl9NQVNLIHwgU0RWT19MVkRTX01BU0spKQogCkBAIC00NzMsMjAgKzQ3NCw2IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlpID0gMzsKLQl3aGlsZSAoc3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19QRU5ESU5HICYmIGktLSkgewotCQlpZiAoIWludGVsX3Nkdm9fcmVhZF9ieXRlKGludGVsX3Nkdm8sCi0JCQkJCSAgU0RWT19JMkNfQ01EX1NUQVRVUywKLQkJCQkJICAmc3RhdHVzKSkKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0JaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykgewotCQlEUk1fREVCVUdfS01TKCJjb21tYW5kIHJldHVybnMgcmVzcG9uc2UgJXMgWyVkXVxuIiwKLQkJCSAgICAgIHN0YXR1cyA8PSBTRFZPX0NNRF9TVEFUVVNfU0NBTElOR19OT1RfU1VQUCA/IGNtZF9zdGF0dXNfbmFtZXNbc3RhdHVzXSA6ICI/Pz8iLAotCQkJICAgICAgc3RhdHVzKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQogCXJldHVybiB0cnVlOwogfQogCkBAIC00OTcsNiArNDg0LDggQEAKIAl1OCBzdGF0dXM7CiAJaW50IGk7CiAKKwlEUk1fREVCVUdfS01TKCIlczogUjogIiwgU0RWT19OQU1FKGludGVsX3Nkdm8pKTsKKwogCS8qCiAJICogVGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgYWxsIGNvbW1hbmRzIHdpbGwgYmUKIAkgKiBwcm9jZXNzZWQgd2l0aGluIDE1wrVzLCBhbmQgdGhhdCB3ZSBuZWVkIG9ubHkgcG9sbApAQCAtNTA1LDE0ICs0OTQsMTkgQEAKIAkgKgogCSAqIENoZWNrIDUgdGltZXMgaW4gY2FzZSB0aGUgaGFyZHdhcmUgZmFpbGVkIHRvIHJlYWQgdGhlIGRvY3MuCiAJICovCi0JZG8geworCWlmICghaW50ZWxfc2R2b19yZWFkX2J5dGUoaW50ZWxfc2R2bywKKwkJCQkgIFNEVk9fSTJDX0NNRF9TVEFUVVMsCisJCQkJICAmc3RhdHVzKSkKKwkJZ290byBsb2dfZmFpbDsKKworCXdoaWxlIChzdGF0dXMgPT0gU0RWT19DTURfU1RBVFVTX1BFTkRJTkcgJiYgcmV0cnktLSkgeworCQl1ZGVsYXkoMTUpOwogCQlpZiAoIWludGVsX3Nkdm9fcmVhZF9ieXRlKGludGVsX3Nkdm8sCiAJCQkJCSAgU0RWT19JMkNfQ01EX1NUQVRVUywKIAkJCQkJICAmc3RhdHVzKSkKLQkJCXJldHVybiBmYWxzZTsKLQl9IHdoaWxlIChzdGF0dXMgPT0gU0RWT19DTURfU1RBVFVTX1BFTkRJTkcgJiYgLS1yZXRyeSk7CisJCQlnb3RvIGxvZ19mYWlsOworCX0KIAotCURSTV9ERUJVR19LTVMoIiVzOiBSOiAiLCBTRFZPX05BTUUoaW50ZWxfc2R2bykpOwogCWlmIChzdGF0dXMgPD0gU0RWT19DTURfU1RBVFVTX1NDQUxJTkdfTk9UX1NVUFApCiAJCURSTV9MT0dfS01TKCIoJXMpIiwgY21kX3N0YXR1c19uYW1lc1tzdGF0dXNdKTsKIAllbHNlCkBAIC01MzMsNyArNTI3LDcgQEAKIAlyZXR1cm4gdHJ1ZTsKIAogbG9nX2ZhaWw6Ci0JRFJNX0xPR19LTVMoIlxuIik7CisJRFJNX0xPR19LTVMoIi4uLiBmYWlsZWRcbiIpOwogCXJldHVybiBmYWxzZTsKIH0KIApAQCAtNTUwLDYgKzU0NCw3IEBACiBzdGF0aWMgYm9vbCBpbnRlbF9zZHZvX3NldF9jb250cm9sX2J1c19zd2l0Y2goc3RydWN0IGludGVsX3Nkdm8gKmludGVsX3Nkdm8sCiAJCQkJCSAgICAgIHU4IGRkY19idXMpCiB7CisJLyogVGhpcyBtdXN0IGJlIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgd3JpdGUgYmVmb3JlIHRoZSBpMmMgeGZlciAqLwogCXJldHVybiBpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLAogCQkJCSAgICBTRFZPX0NNRF9TRVRfQ09OVFJPTF9CVVNfU1dJVENILAogCQkJCSAgICAmZGRjX2J1cywgMSk7CkBAIC01NTcsNyArNTUyLDEwIEBACiAKIHN0YXRpYyBib29sIGludGVsX3Nkdm9fc2V0X3ZhbHVlKHN0cnVjdCBpbnRlbF9zZHZvICppbnRlbF9zZHZvLCB1OCBjbWQsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCiB7Ci0JcmV0dXJuIGludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX3Nkdm8sIGNtZCwgZGF0YSwgbGVuKTsKKwlpZiAoIWludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX3Nkdm8sIGNtZCwgZGF0YSwgbGVuKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIGludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShpbnRlbF9zZHZvLCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIGJvb2wKQEAgLTg1OSwxOCArODU3LDIxIEBACiAKIAlpbnRlbF9kaXBfaW5mb2ZyYW1lX2NzdW0oJmF2aV9pZik7CiAKLQlpZiAoIWludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX3Nkdm8sIFNEVk9fQ01EX1NFVF9IQlVGX0lOREVYLAorCWlmICghaW50ZWxfc2R2b19zZXRfdmFsdWUoaW50ZWxfc2R2bywKKwkJCQkgIFNEVk9fQ01EX1NFVF9IQlVGX0lOREVYLAogCQkJCSAgc2V0X2J1Zl9pbmRleCwgMikpCiAJCXJldHVybiBmYWxzZTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYXZpX2lmKTsgaSArPSA4KSB7Ci0JCWlmICghaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywgU0RWT19DTURfU0VUX0hCVUZfREFUQSwKKwkJaWYgKCFpbnRlbF9zZHZvX3NldF92YWx1ZShpbnRlbF9zZHZvLAorCQkJCQkgIFNEVk9fQ01EX1NFVF9IQlVGX0RBVEEsCiAJCQkJCSAgZGF0YSwgOCkpCiAJCQlyZXR1cm4gZmFsc2U7CiAJCWRhdGErKzsKIAl9CiAKLQlyZXR1cm4gaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywgU0RWT19DTURfU0VUX0hCVUZfVFhSQVRFLAorCXJldHVybiBpbnRlbF9zZHZvX3NldF92YWx1ZShpbnRlbF9zZHZvLAorCQkJCSAgICBTRFZPX0NNRF9TRVRfSEJVRl9UWFJBVEUsCiAJCQkJICAgICZ0eF9yYXRlLCAxKTsKIH0KIApAQCAtMTM1OSw3ICsxMzYwLDggQEAKIAkJCQlpbnRlbF9zZHZvLT5oYXNfaGRtaV9tb25pdG9yID0gZHJtX2RldGVjdF9oZG1pX21vbml0b3IoZWRpZCk7CiAJCQkJaW50ZWxfc2R2by0+aGFzX2hkbWlfYXVkaW8gPSBkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8oZWRpZCk7CiAJCQl9Ci0JCX0KKwkJfSBlbHNlCisJCQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAkJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ucmF3X2VkaWQgPSBOVUxMOwogCQlrZnJlZShlZGlkKTsKIAl9CkBAIC0xNDA3LDEwICsxNDA5LDI1IEBACiAKIAlpZiAoKGludGVsX3Nkdm9fY29ubmVjdG9yLT5vdXRwdXRfZmxhZyAmIHJlc3BvbnNlKSA9PSAwKQogCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKLQllbHNlIGlmIChyZXNwb25zZSAmIFNEVk9fVE1EU19NQVNLKQorCWVsc2UgaWYgKElTX1RNRFMoaW50ZWxfc2R2b19jb25uZWN0b3IpKQogCQlyZXQgPSBpbnRlbF9zZHZvX2hkbWlfc2lua19kZXRlY3QoY29ubmVjdG9yKTsKLQllbHNlCi0JCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCWVsc2UgeworCQlzdHJ1Y3QgZWRpZCAqZWRpZDsKKworCQkvKiBpZiB3ZSBoYXZlIGFuIGVkaWQgY2hlY2sgaXQgbWF0Y2hlcyB0aGUgY29ubmVjdGlvbiAqLworCQllZGlkID0gaW50ZWxfc2R2b19nZXRfZWRpZChjb25uZWN0b3IpOworCQlpZiAoZWRpZCA9PSBOVUxMKQorCQkJZWRpZCA9IGludGVsX3Nkdm9fZ2V0X2FuYWxvZ19lZGlkKGNvbm5lY3Rvcik7CisJCWlmIChlZGlkICE9IE5VTEwpIHsKKwkJCWlmIChlZGlkLT5pbnB1dCAmIERSTV9FRElEX0lOUFVUX0RJR0lUQUwpCisJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJCQllbHNlCisJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5yYXdfZWRpZCA9IE5VTEw7CisJCQlrZnJlZShlZGlkKTsKKwkJfSBlbHNlCisJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwl9CiAKIAkvKiBNYXkgdXBkYXRlIGVuY29kZXIgZmxhZyBmb3IgbGlrZSBjbG9jayBmb3IgU0RWTyBUViwgZXRjLiovCiAJaWYgKHJldCA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkgewpAQCAtMTQ0NiwxMCArMTQ2MywxNSBAQAogCQllZGlkID0gaW50ZWxfc2R2b19nZXRfYW5hbG9nX2VkaWQoY29ubmVjdG9yKTsKIAogCWlmIChlZGlkICE9IE5VTEwpIHsKLQkJaWYgKGVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCkgeworCQlzdHJ1Y3QgaW50ZWxfc2R2b19jb25uZWN0b3IgKmludGVsX3Nkdm9fY29ubmVjdG9yID0gdG9faW50ZWxfc2R2b19jb25uZWN0b3IoY29ubmVjdG9yKTsKKwkJYm9vbCBtb25pdG9yX2lzX2RpZ2l0YWwgPSAhIShlZGlkLT5pbnB1dCAmIERSTV9FRElEX0lOUFVUX0RJR0lUQUwpOworCQlib29sIGNvbm5lY3Rvcl9pc19kaWdpdGFsID0gISFJU19UTURTKGludGVsX3Nkdm9fY29ubmVjdG9yKTsKKworCQlpZiAoY29ubmVjdG9yX2lzX2RpZ2l0YWwgPT0gbW9uaXRvcl9pc19kaWdpdGFsKSB7CiAJCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBlZGlkKTsKIAkJCWRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwogCQl9CisKIAkJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ucmF3X2VkaWQgPSBOVUxMOwogCQlrZnJlZShlZGlkKTsKIAl9CkBAIC0xNjY4LDYgKzE2OTAsMjIgQEAKIAlrZnJlZShjb25uZWN0b3IpOwogfQogCitzdGF0aWMgYm9vbCBpbnRlbF9zZHZvX2RldGVjdF9oZG1pX2F1ZGlvKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGludGVsX3Nkdm8gKmludGVsX3Nkdm8gPSBpbnRlbF9hdHRhY2hlZF9zZHZvKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJYm9vbCBoYXNfYXVkaW8gPSBmYWxzZTsKKworCWlmICghaW50ZWxfc2R2by0+aXNfaGRtaSkKKwkJcmV0dXJuIGZhbHNlOworCisJZWRpZCA9IGludGVsX3Nkdm9fZ2V0X2VkaWQoY29ubmVjdG9yKTsKKwlpZiAoZWRpZCAhPSBOVUxMICYmIGVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCkKKwkJaGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOworCisJcmV0dXJuIGhhc19hdWRpbzsKK30KKwogc3RhdGljIGludAogaW50ZWxfc2R2b19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LApAQCAtMTY4NCwxNyArMTcyMiwyMyBAQAogCQlyZXR1cm4gcmV0OwogCiAJaWYgKHByb3BlcnR5ID09IGludGVsX3Nkdm9fY29ubmVjdG9yLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewotCQlpZiAodmFsID09IGludGVsX3Nkdm9fY29ubmVjdG9yLT5mb3JjZV9hdWRpbykKKwkJaW50IGkgPSB2YWw7CisJCWJvb2wgaGFzX2F1ZGlvOworCisJCWlmIChpID09IGludGVsX3Nkdm9fY29ubmVjdG9yLT5mb3JjZV9hdWRpbykKIAkJCXJldHVybiAwOwogCi0JCWludGVsX3Nkdm9fY29ubmVjdG9yLT5mb3JjZV9hdWRpbyA9IHZhbDsKKwkJaW50ZWxfc2R2b19jb25uZWN0b3ItPmZvcmNlX2F1ZGlvID0gaTsKIAotCQlpZiAodmFsID4gMCAmJiBpbnRlbF9zZHZvLT5oYXNfaGRtaV9hdWRpbykKLQkJCXJldHVybiAwOwotCQlpZiAodmFsIDwgMCAmJiAhaW50ZWxfc2R2by0+aGFzX2hkbWlfYXVkaW8pCisJCWlmIChpID09IDApCisJCQloYXNfYXVkaW8gPSBpbnRlbF9zZHZvX2RldGVjdF9oZG1pX2F1ZGlvKGNvbm5lY3Rvcik7CisJCWVsc2UKKwkJCWhhc19hdWRpbyA9IGkgPiAwOworCisJCWlmIChoYXNfYXVkaW8gPT0gaW50ZWxfc2R2by0+aGFzX2hkbWlfYXVkaW8pCiAJCQlyZXR1cm4gMDsKIAotCQlpbnRlbF9zZHZvLT5oYXNfaGRtaV9hdWRpbyA9IHZhbCA+IDA7CisJCWludGVsX3Nkdm8tPmhhc19oZG1pX2F1ZGlvID0gaGFzX2F1ZGlvOwogCQlnb3RvIGRvbmU7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwppbmRleCA5MzIwNmU0Li5mZTRhNTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKQEAgLTEyMzQsNyArMTIzNCw4IEBACiAgKiBccmV0dXJuIGZhbHNlIGlmIFRWIGlzIGRpc2Nvbm5lY3RlZC4KICAqLwogc3RhdGljIGludAotaW50ZWxfdHZfZGV0ZWN0X3R5cGUgKHN0cnVjdCBpbnRlbF90diAqaW50ZWxfdHYpCitpbnRlbF90dl9kZXRlY3RfdHlwZSAoc3RydWN0IGludGVsX3R2ICppbnRlbF90diwKKwkJICAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmaW50ZWxfdHYtPmJhc2UuYmFzZTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwpAQCAtMTI0NSwxMSArMTI0NiwxMyBAQAogCWludCB0eXBlOwogCiAJLyogRGlzYWJsZSBUViBpbnRlcnJ1cHRzIGFyb3VuZCBsb2FkIGRldGVjdCBvciB3ZSdsbCByZWN1cnNlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwotCWk5MTVfZGlzYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgMCwKLQkJCSAgICAgIFBJUEVfSE9UUExVR19JTlRFUlJVUFRfRU5BQkxFIHwKLQkJCSAgICAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfRU5BQkxFKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKKwlpZiAoY29ubmVjdG9yLT5wb2xsZWQgJiBEUk1fQ09OTkVDVE9SX1BPTExfSFBEKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKKwkJaTkxNV9kaXNhYmxlX3BpcGVzdGF0KGRldl9wcml2LCAwLAorCQkJCSAgICAgIFBJUEVfSE9UUExVR19JTlRFUlJVUFRfRU5BQkxFIHwKKwkJCQkgICAgICBQSVBFX0hPVFBMVUdfVFZfSU5URVJSVVBUX0VOQUJMRSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCX0KIAogCXNhdmVfdHZfZGFjID0gdHZfZGFjID0gSTkxNV9SRUFEKFRWX0RBQyk7CiAJc2F2ZV90dl9jdGwgPSB0dl9jdGwgPSBJOTE1X1JFQUQoVFZfQ1RMKTsKQEAgLTEzMDIsMTEgKzEzMDUsMTMgQEAKIAlJOTE1X1dSSVRFKFRWX0NUTCwgc2F2ZV90dl9jdGwpOwogCiAJLyogUmVzdG9yZSBpbnRlcnJ1cHQgY29uZmlnICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwotCWk5MTVfZW5hYmxlX3BpcGVzdGF0KGRldl9wcml2LCAwLAotCQkJICAgICBQSVBFX0hPVFBMVUdfSU5URVJSVVBUX0VOQUJMRSB8Ci0JCQkgICAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfRU5BQkxFKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKKwlpZiAoY29ubmVjdG9yLT5wb2xsZWQgJiBEUk1fQ09OTkVDVE9SX1BPTExfSFBEKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKKwkJaTkxNV9lbmFibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsCisJCQkJICAgICBQSVBFX0hPVFBMVUdfSU5URVJSVVBUX0VOQUJMRSB8CisJCQkJICAgICBQSVBFX0hPVFBMVUdfVFZfSU5URVJSVVBUX0VOQUJMRSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCX0KIAogCXJldHVybiB0eXBlOwogfQpAQCAtMTM1Niw3ICsxMzYxLDcgQEAKIAlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oJm1vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwogCiAJaWYgKGludGVsX3R2LT5iYXNlLmJhc2UuY3J0YyAmJiBpbnRlbF90di0+YmFzZS5iYXNlLmNydGMtPmVuYWJsZWQpIHsKLQkJdHlwZSA9IGludGVsX3R2X2RldGVjdF90eXBlKGludGVsX3R2KTsKKwkJdHlwZSA9IGludGVsX3R2X2RldGVjdF90eXBlKGludGVsX3R2LCBjb25uZWN0b3IpOwogCX0gZWxzZSBpZiAoZm9yY2UpIHsKIAkJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCQlpbnQgZHBtc19tb2RlOwpAQCAtMTM2NCw3ICsxMzY5LDcgQEAKIAkJY3J0YyA9IGludGVsX2dldF9sb2FkX2RldGVjdF9waXBlKCZpbnRlbF90di0+YmFzZSwgY29ubmVjdG9yLAogCQkJCQkJICAmbW9kZSwgJmRwbXNfbW9kZSk7CiAJCWlmIChjcnRjKSB7Ci0JCQl0eXBlID0gaW50ZWxfdHZfZGV0ZWN0X3R5cGUoaW50ZWxfdHYpOworCQkJdHlwZSA9IGludGVsX3R2X2RldGVjdF90eXBlKGludGVsX3R2LCBjb25uZWN0b3IpOwogCQkJaW50ZWxfcmVsZWFzZV9sb2FkX2RldGVjdF9waXBlKCZpbnRlbF90di0+YmFzZSwgY29ubmVjdG9yLAogCQkJCQkJICAgICAgIGRwbXNfbW9kZSk7CiAJCX0gZWxzZQpAQCAtMTY1OCw2ICsxNjYzLDE4IEBACiAJaW50ZWxfZW5jb2RlciA9ICZpbnRlbF90di0+YmFzZTsKIAljb25uZWN0b3IgPSAmaW50ZWxfY29ubmVjdG9yLT5iYXNlOwogCisJLyogVGhlIGRvY3VtZW50YXRpb24sIGZvciB0aGUgb2xkZXIgY2hpcHNldHMgYXQgbGVhc3QsIHJlY29tbWVuZAorCSAqIHVzaW5nIGEgcG9sbGluZyBtZXRob2QgcmF0aGVyIHRoYW4gaG90cGx1ZyBkZXRlY3Rpb24gZm9yIFRWcy4KKwkgKiBUaGlzIGlzIGJlY2F1c2UgaW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgaG90cGx1ZyBkZXRlY3Rpb24sIHRoZSBQTExzCisJICogZm9yIHRoZSBUViBtdXN0IGJlIGtlcHQgYWxpdmUgaW5jcmVhc2luZyBwb3dlciBkcmFpbiBhbmQgc3RhcnZpbmcKKwkgKiBiYW5kd2lkdGggZnJvbSBvdGhlciBlbmNvZGVycy4gTm90YWJseSBmb3IgaW5zdGFuY2UsIGl0IGNhdXNlcworCSAqIHBpcGUgdW5kZXJydW5zIG9uIENyZXN0bGluZSB3aGVuIHRoaXMgZW5jb2RlciBpcyBzdXBwb3NlZGx5IGlkbGUuCisJICoKKwkgKiBNb3JlIHJlY2VudCBjaGlwc2V0cyBmYXZvdXIgSERNSSByYXRoZXIgdGhhbiBpbnRlZ3JhdGVkIFMtVmlkZW8uCisJICovCisJY29ubmVjdG9yLT5wb2xsZWQgPQorCQlEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVCB8IERSTV9DT05ORUNUT1JfUE9MTF9ESVNDT05ORUNUOworCiAJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9yLCAmaW50ZWxfdHZfY29ubmVjdG9yX2Z1bmNzLAogCQkJICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKaW5kZXggMmFlZjVjZC4uNmJkYWI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKQEAgLTYyMjgsNyArNjIyOCw3IEBACiAJCWVudHJ5LT50dmNvbmYuaGFzX2NvbXBvbmVudF9vdXRwdXQgPSBmYWxzZTsKIAkJYnJlYWs7CiAJY2FzZSBPVVRQVVRfTFZEUzoKLQkJaWYgKChjb25uICYgMHgwMDAwM2YwMCkgIT0gMHgxMCkKKwkJaWYgKChjb25uICYgMHgwMDAwM2YwMCkgPj4gOCAhPSAweDEwKQogCQkJZW50cnktPmx2ZHNjb25mLnVzZV9zdHJhcHNfZm9yX21vZGUgPSB0cnVlOwogCQllbnRyeS0+bHZkc2NvbmYudXNlX3Bvd2VyX3NjcmlwdHMgPSB0cnVlOwogCQlicmVhazsKQEAgLTYzMTAsNiArNjMxMCw5IEBACiBzdGF0aWMgYm9vbAogYXBwbHlfZGNiX2VuY29kZXJfcXVpcmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpZHgsIHUzMiAqY29ubiwgdTMyICpjb25mKQogeworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRjYl90YWJsZSAqZGNiID0gJmRldl9wcml2LT52Ymlvcy5kY2I7CisKIAkvKiBEZWxsIFByZWNpc2lvbiBNNjMwMAogCSAqICAgRENCIGVudHJ5IDI6IDAyMDI1MzEyIDAwMDAwMDEwCiAJICogICBEQ0IgZW50cnkgMzogMDIwMjYzMTIgMDAwMDAwMjAKQEAgLTYzMjcsNiArNjMzMCwxOCBAQAogCQkJcmV0dXJuIGZhbHNlOwogCX0KIAorCS8qIEdlRm9yY2UzIFRpIDIwMAorCSAqCisJICogRENCIHJlcG9ydHMgYW4gTFZEUyBvdXRwdXQgdGhhdCBzaG91bGQgYmUgVE1EUzoKKwkgKiAgIERDQiBlbnRyeSAxOiBmMjAwNTAxNCBmZmZmZmZmZgorCSAqLworCWlmIChudl9tYXRjaF9kZXZpY2UoZGV2LCAweDAyMDEsIDB4MTQ2MiwgMHg4ODUxKSkgeworCQlpZiAoKmNvbm4gPT0gMHhmMjAwNTAxNCAmJiAqY29uZiA9PSAweGZmZmZmZmZmKSB7CisJCQlmYWJyaWNhdGVfZGNiX291dHB1dChkY2IsIE9VVFBVVF9UTURTLCAxLCAxLCAxKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKaW5kZXggYTdmYWUyNi4uYTUyMTg0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYwpAQCAtNDksNyArNDksMTAgQEAKIAkJRFJNX0VSUk9SKCJibyAlcCBzdGlsbCBhdHRhY2hlZCB0byBHRU0gb2JqZWN0XG4iLCBibyk7CiAKIAludjEwX21lbV9wdXRfdGlsZV9yZWdpb24oZGV2LCBudmJvLT50aWxlLCBOVUxMKTsKLQlub3V2ZWF1X3ZtX3B1dCgmbnZiby0+dm1hKTsKKwlpZiAobnZiby0+dm1hLm5vZGUpIHsKKwkJbm91dmVhdV92bV91bm1hcCgmbnZiby0+dm1hKTsKKwkJbm91dmVhdV92bV9wdXQoJm52Ym8tPnZtYSk7CisJfQogCWtmcmVlKG52Ym8pOwogfQogCkBAIC0xMjgsNiArMTMxLDcgQEAKIAkJfQogCX0KIAorCW52Ym8tPmJvLm1lbS5udW1fcGFnZXMgPSBzaXplID4+IFBBR0VfU0hJRlQ7CiAJbm91dmVhdV9ib19wbGFjZW1lbnRfc2V0KG52Ym8sIGZsYWdzLCAwKTsKIAogCW52Ym8tPmNoYW5uZWwgPSBjaGFuOwpAQCAtMTY2LDE3ICsxNzAsMTcgQEAKIHNldF9wbGFjZW1lbnRfcmFuZ2Uoc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8sIHVpbnQzMl90IHR5cGUpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gbm91dmVhdV9iZGV2KG52Ym8tPmJvLmJkZXYpOworCWludCB2cmFtX3BhZ2VzID0gZGV2X3ByaXYtPnZyYW1fc2l6ZSA+PiBQQUdFX1NISUZUOwogCiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfMTAgJiYKLQkgICAgbnZiby0+dGlsZV9tb2RlICYmICh0eXBlICYgVFRNX1BMX0ZMQUdfVlJBTSkpIHsKKwkgICAgbnZiby0+dGlsZV9tb2RlICYmICh0eXBlICYgVFRNX1BMX0ZMQUdfVlJBTSkgJiYKKwkgICAgbnZiby0+Ym8ubWVtLm51bV9wYWdlcyA8IHZyYW1fcGFnZXMgLyAyKSB7CiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb2xvciBhbmQgZGVwdGggYnVmZmVycyBhcmUgaGFuZGxlZAogCQkgKiBieSBpbmRlcGVuZGVudCBtZW1vcnkgY29udHJvbGxlciB1bml0cy4gVXAgdG8gYSA5eAogCQkgKiBzcGVlZCB1cCB3aGVuIGFscGhhLWJsZW5kaW5nIGFuZCBkZXB0aC10ZXN0IGFyZSBlbmFibGVkCiAJCSAqIGF0IHRoZSBzYW1lIHRpbWUuCiAJCSAqLwotCQlpbnQgdnJhbV9wYWdlcyA9IGRldl9wcml2LT52cmFtX3NpemUgPj4gUEFHRV9TSElGVDsKLQogCQlpZiAobnZiby0+dGlsZV9mbGFncyAmIE5PVVZFQVVfR0VNX1RJTEVfWkVUQSkgewogCQkJbnZiby0+cGxhY2VtZW50LmZwZm4gPSB2cmFtX3BhZ2VzIC8gMjsKIAkJCW52Ym8tPnBsYWNlbWVudC5scGZuID0gfjA7CkBAIC03ODUsNyArNzg5LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCXJldCA9IHR0bV9ib19tb3ZlX3R0bShibywgZXZpY3QsIG5vX3dhaXRfcmVzZXJ2ZSwgbm9fd2FpdF9ncHUsIG5ld19tZW0pOworCXJldCA9IHR0bV9ib19tb3ZlX3R0bShibywgdHJ1ZSwgbm9fd2FpdF9yZXNlcnZlLCBub193YWl0X2dwdSwgbmV3X21lbSk7CiBvdXQ6CiAJdHRtX2JvX21lbV9wdXQoYm8sICZ0bXBfbWVtKTsKIAlyZXR1cm4gcmV0OwpAQCAtODExLDExICs4MTUsMTEgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gdHRtX2JvX21vdmVfdHRtKGJvLCBldmljdCwgbm9fd2FpdF9yZXNlcnZlLCBub193YWl0X2dwdSwgJnRtcF9tZW0pOworCXJldCA9IHR0bV9ib19tb3ZlX3R0bShibywgdHJ1ZSwgbm9fd2FpdF9yZXNlcnZlLCBub193YWl0X2dwdSwgJnRtcF9tZW0pOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gbm91dmVhdV9ib19tb3ZlX20ybWYoYm8sIGV2aWN0LCBpbnRyLCBub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCBuZXdfbWVtKTsKKwlyZXQgPSBub3V2ZWF1X2JvX21vdmVfbTJtZihibywgdHJ1ZSwgaW50ciwgbm9fd2FpdF9yZXNlcnZlLCBub193YWl0X2dwdSwgbmV3X21lbSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCmluZGV4IGEyMWUwMDAuLjM5MGQ4MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYwpAQCAtNTA3LDYgKzUwNyw3IEBACiAJaW50IGhpZ2hfdyA9IDAsIGhpZ2hfaCA9IDAsIGhpZ2hfdiA9IDA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZudl9jb25uZWN0b3ItPmJhc2UucHJvYmVkX21vZGVzLCBoZWFkKSB7CisJCW1vZGUtPnZyZWZyZXNoID0gZHJtX21vZGVfdnJlZnJlc2gobW9kZSk7CiAJCWlmIChoZWxwZXItPm1vZGVfdmFsaWQoY29ubmVjdG9yLCBtb2RlKSAhPSBNT0RFX09LIHx8CiAJCSAgICAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jCmluZGV4IDY1Njk5YmYuLmIzNjhlZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYwpAQCAtODMsNyArODMsOCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVQgcmVxdWlyZXMgYSBub3RpZmllciBvYmplY3QgKi8KLQlyZXQgPSBub3V2ZWF1X25vdGlmaWVyX2FsbG9jKGNoYW4sIE52Tm90aWZ5MCwgMzIsICZjaGFuLT5tMm1mX250ZnkpOworCXJldCA9IG5vdXZlYXVfbm90aWZpZXJfYWxsb2MoY2hhbiwgTnZOb3RpZnkwLCAzMiwgMHhmZDAsIDB4MTAwMCwKKwkJCQkgICAgICZjaGFuLT5tMm1mX250ZnkpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCmluZGV4IDEzYmI2NzIuLmY2NThhMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYwpAQCAtMjM0LDkgKzIzNCw5IEBACiAJCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIAl9CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJbm91dmVhdV9mYmNvbl9zZXRfc3VzcGVuZChkZXYsIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCW5vdXZlYXVfZmJjb25fcmVzdG9yZV9hY2NlbChkZXYpOwogCXJldHVybiAwOwogCkBAIC0zNTksOSArMzU5LDkgQEAKIAkJbnZfY3J0Yy0+bHV0LmRlcHRoID0gMDsKIAl9CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJbm91dmVhdV9mYmNvbl9zZXRfc3VzcGVuZChkZXYsIDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJbm91dmVhdV9mYmNvbl96ZmlsbF9hbGwoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKaW5kZXggMDFiZmZjNC4uOTgyZDcwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCkBAIC04NDgsMTQgKzg0OCwxMiBAQAogCQkJCSAgICAgc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXJfZnVuYyBub3V2ZWF1X3ZyYW1fbWFuYWdlcjsKIAotLyogbnZjMF92cmFtLmMgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXJfZnVuYyBudmMwX3ZyYW1fbWFuYWdlcjsKLQogLyogbm91dmVhdV9ub3RpZmllci5jICovCiBleHRlcm4gaW50ICBub3V2ZWF1X25vdGlmaWVyX2luaXRfY2hhbm5lbChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIHZvaWQgbm91dmVhdV9ub3RpZmllcl90YWtlZG93bl9jaGFubmVsKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gaW50ICBub3V2ZWF1X25vdGlmaWVyX2FsbG9jKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKiwgdWludDMyX3QgaGFuZGxlLAotCQkJCSAgIGludCBjb3V0LCB1aW50MzJfdCAqb2Zmc2V0KTsKKwkJCQkgICBpbnQgY291dCwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwKKwkJCQkgICB1aW50MzJfdCAqb2Zmc2V0KTsKIGV4dGVybiBpbnQgIG5vdXZlYXVfbm90aWZpZXJfb2Zmc2V0KHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqLCB1aW50MzJfdCAqKTsKIGV4dGVybiBpbnQgIG5vdXZlYXVfaW9jdGxfbm90aWZpZXJfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKiwgdm9pZCAqZGF0YSwKIAkJCQkJIHN0cnVjdCBkcm1fZmlsZSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCmluZGV4IDI2MzQ3YjcuLmIwZmI5YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYwpAQCAtNzI1LDggKzcyNSwxMCBAQAogCXJldCA9IHZyYW0tPmdldChkZXYsIG1lbS0+bnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQsCiAJCQltZW0tPnBhZ2VfYWxpZ25tZW50IDw8IFBBR0VfU0hJRlQsIHNpemVfbmMsCiAJCQkobnZiby0+dGlsZV9mbGFncyA+PiA4KSAmIDB4ZmYsICZub2RlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWlmIChyZXQpIHsKKwkJbWVtLT5tbV9ub2RlID0gTlVMTDsKKwkJcmV0dXJuIChyZXQgPT0gLUVOT1NQQykgPyAwIDogcmV0OworCX0KIAogCW5vZGUtPnBhZ2Vfc2hpZnQgPSAxMjsKIAlpZiAobnZiby0+dm1hLm5vZGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21tLmMKaW5kZXggODg0NGI1MGMuLjc2MDk3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21tLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gLUVOT1NQQzsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMKaW5kZXggZmUyOWQ2MC4uNWVhMTY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYwpAQCAtOTYsNyArOTYsOCBAQAogCiBpbnQKIG5vdXZlYXVfbm90aWZpZXJfYWxsb2Moc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgdWludDMyX3QgaGFuZGxlLAotCQkgICAgICAgaW50IHNpemUsIHVpbnQzMl90ICpiX29mZnNldCkKKwkJICAgICAgIGludCBzaXplLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgZW5kLAorCQkgICAgICAgdWludDMyX3QgKmJfb2Zmc2V0KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpub2JqID0gTlVMTDsKQEAgLTEwNCw5ICsxMDUsMTAgQEAKIAl1aW50MzJfdCBvZmZzZXQ7CiAJaW50IHRhcmdldCwgcmV0OwogCi0JbWVtID0gZHJtX21tX3NlYXJjaF9mcmVlKCZjaGFuLT5ub3RpZmllcl9oZWFwLCBzaXplLCAwLCAwKTsKKwltZW0gPSBkcm1fbW1fc2VhcmNoX2ZyZWVfaW5fcmFuZ2UoJmNoYW4tPm5vdGlmaWVyX2hlYXAsIHNpemUsIDAsCisJCQkJCSAgc3RhcnQsIGVuZCwgMCk7CiAJaWYgKG1lbSkKLQkJbWVtID0gZHJtX21tX2dldF9ibG9jayhtZW0sIHNpemUsIDApOworCQltZW0gPSBkcm1fbW1fZ2V0X2Jsb2NrX3JhbmdlKG1lbSwgc2l6ZSwgMCwgc3RhcnQsIGVuZCk7CiAJaWYgKCFtZW0pIHsKIAkJTlZfRVJST1IoZGV2LCAiQ2hhbm5lbCAlZCBub3RpZmllciBibG9jayBmdWxsXG4iLCBjaGFuLT5pZCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTc3LDcgKzE3OSw4IEBACiAJaWYgKElTX0VSUihjaGFuKSkKIAkJcmV0dXJuIFBUUl9FUlIoY2hhbik7CiAKLQlyZXQgPSBub3V2ZWF1X25vdGlmaWVyX2FsbG9jKGNoYW4sIG5hLT5oYW5kbGUsIG5hLT5zaXplLCAmbmEtPm9mZnNldCk7CisJcmV0ID0gbm91dmVhdV9ub3RpZmllcl9hbGxvYyhjaGFuLCBuYS0+aGFuZGxlLCBuYS0+c2l6ZSwgMCwgMHgxMDAwLAorCQkJCSAgICAgJm5hLT5vZmZzZXQpOwogCW5vdXZlYXVfY2hhbm5lbF9wdXQoJmNoYW4pOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3BtLmMKaW5kZXggZmI4NDZhMy4uNDM5OWUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcG0uYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJc3RydWN0IG5vdXZlYXVfcG1fZW5naW5lICpwbSA9ICZkZXZfcHJpdi0+ZW5naW5lLnBtOwogCiAJaWYgKHBtLT5od21vbikgewotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBtLT5od21vbi0+a29iaiwgJmh3bW9uX2F0dHJncm91cCk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5wZGV2LT5kZXYua29iaiwgJmh3bW9uX2F0dHJncm91cCk7CiAJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKHBtLT5od21vbik7CiAJfQogI2VuZGlmCkBAIC01NDMsNyArNTQzLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9wbV9lbmdpbmUgKnBtID0gJmRldl9wcml2LT5lbmdpbmUucG07CiAJc3RydWN0IG5vdXZlYXVfcG1fbGV2ZWwgKnBlcmZsdmw7CiAKLQlpZiAocG0tPmN1ciA9PSAmcG0tPmJvb3QpCisJaWYgKCFwbS0+Y3VyIHx8IHBtLT5jdXIgPT0gJnBtLT5ib290KQogCQlyZXR1cm47CiAKIAlwZXJmbHZsID0gcG0tPmN1cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdGVtcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKaW5kZXggN2VjYzRhZC4uOGQ5OTY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvW10gPSB7CiAJCXsgSTJDX0JPQVJEX0lORk8oInc4M2w3ODV0cyIsIDB4MmQpIH0sCiAJCXsgSTJDX0JPQVJEX0lORk8oInc4Mzc4MWQiLCAweDJkKSB9LAotCQl7IEkyQ19CT0FSRF9JTkZPKCJmNzUzNzUiLCAweDJlKSB9LAogCQl7IEkyQ19CT0FSRF9JTkZPKCJhZHQ3NDczIiwgMHgyZSkgfSwKKwkJeyBJMkNfQk9BUkRfSU5GTygiZjc1Mzc1IiwgMHgyZSkgfSwKIAkJeyBJMkNfQk9BUkRfSU5GTygibG05OSIsIDB4NGMpIH0sCiAJCXsgfQogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYwppbmRleCBlZjIzNTUwLi5jODJkYjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKQEAgLTM0Miw4ICszNDIsOCBAQAogCWlmIChudl9lbmNvZGVyLT5kY2ItPnR5cGUgPT0gT1VUUFVUX0xWRFMpIHsKIAkJYm9vbCBkdWFsbGluaywgZHVtbXk7CiAKLQkJbm91dmVhdV9iaW9zX3BhcnNlX2x2ZHNfdGFibGUoZGV2LCBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlLT4KLQkJCQkJICAgICAgY2xvY2ssICZkdWFsbGluaywgJmR1bW15KTsKKwkJbm91dmVhdV9iaW9zX3BhcnNlX2x2ZHNfdGFibGUoZGV2LCBvdXRwdXRfbW9kZS0+Y2xvY2ssCisJCQkJCSAgICAgICZkdWFsbGluaywgJmR1bW15KTsKIAkJaWYgKGR1YWxsaW5rKQogCQkJcmVncC0+ZnBfY29udHJvbCB8PSAoOCA8PCAyOCk7CiAJfSBlbHNlCkBAIC01MTgsOCArNTE4LDYgQEAKIAkJcmV0dXJuOwogCiAJaWYgKG52X2VuY29kZXItPmRjYi0+bHZkc2NvbmYudXNlX3Bvd2VyX3NjcmlwdHMpIHsKLQkJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBub3V2ZWF1X2VuY29kZXJfY29ubmVjdG9yX2dldChudl9lbmNvZGVyKTsKLQogCQkvKiB3aGVuIHJlbW92aW5nIGFuIG91dHB1dCwgY3J0YyBtYXkgbm90IGJlIHNldCwgYnV0IFBBTkVMX09GRgogCQkgKiBtdXN0IHN0aWxsIGJlIHJ1bgogCQkgKi8KQEAgLTUyNywxMiArNTI1LDggQEAKIAkJCSAgIG52MDRfZGZwX2dldF9ib3VuZF9oZWFkKGRldiwgbnZfZW5jb2Rlci0+ZGNiKTsKIAogCQlpZiAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSB7Ci0JCQlpZiAoIW52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUpIHsKLQkJCQlOVl9FUlJPUihkZXYsICJOb3QgdHVybmluZyBvbiBMVkRTIHdpdGhvdXQgbmF0aXZlIG1vZGVcbiIpOwotCQkJCXJldHVybjsKLQkJCX0KIAkJCWNhbGxfbHZkc19zY3JpcHQoZGV2LCBudl9lbmNvZGVyLT5kY2IsIGhlYWQsCi0JCQkJCSBMVkRTX1BBTkVMX09OLCBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlLT5jbG9jayk7CisJCQkJCSBMVkRTX1BBTkVMX09OLCBudl9lbmNvZGVyLT5tb2RlLmNsb2NrKTsKIAkJfSBlbHNlCiAJCQkvKiBweGNsayBvZiAwIGlzIGZpbmUgZm9yIFBBTkVMX09GRiwgYW5kIGZvciBhCiAJCQkgKiBkaXNjb25uZWN0ZWQgTFZEUyBlbmNvZGVyIHRoZXJlIGlzIG5vIG5hdGl2ZV9tb2RlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMKaW5kZXggODg3MGQ3Mi4uMThkMzBjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYwpAQCAtMjExLDMwICsyMTEsMzUgQEAKIAlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSA9ICZkZXZfcHJpdi0+dGlsZS5yZWdbaV07CiAKIAlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JY2FzZSAweDQ0OgotCWNhc2UgMHg0YToKKwljYXNlIDB4NDA6CisJY2FzZSAweDQxOiAvKiBndWVzcyAqLworCWNhc2UgMHg0MjoKKwljYXNlIDB4NDM6CisJY2FzZSAweDQ1OiAvKiBndWVzcyAqLwogCWNhc2UgMHg0ZToKIAkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RTSVpFKGkpLCB0aWxlLT5waXRjaCk7CiAJCW52X3dyMzIoZGV2LCBOVjIwX1BHUkFQSF9UTElNSVQoaSksIHRpbGUtPmxpbWl0KTsKIAkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RJTEUoaSksIHRpbGUtPmFkZHIpOwotCQlicmVhazsKLQotCWNhc2UgMHg0NjoKLQljYXNlIDB4NDc6Ci0JY2FzZSAweDQ5OgotCWNhc2UgMHg0YjoKLQkJbnZfd3IzMihkZXYsIE5WNDdfUEdSQVBIX1RTSVpFKGkpLCB0aWxlLT5waXRjaCk7Ci0JCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9UTElNSVQoaSksIHRpbGUtPmxpbWl0KTsKLQkJbnZfd3IzMihkZXYsIE5WNDdfUEdSQVBIX1RJTEUoaSksIHRpbGUtPmFkZHIpOwogCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVFNJWkUxKGkpLCB0aWxlLT5waXRjaCk7CiAJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UTElNSVQxKGkpLCB0aWxlLT5saW1pdCk7CiAJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9USUxFMShpKSwgdGlsZS0+YWRkcik7CiAJCWJyZWFrOwotCi0JZGVmYXVsdDoKKwljYXNlIDB4NDQ6CisJY2FzZSAweDRhOgogCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVFNJWkUoaSksIHRpbGUtPnBpdGNoKTsKIAkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RMSU1JVChpKSwgdGlsZS0+bGltaXQpOwogCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVElMRShpKSwgdGlsZS0+YWRkcik7CisJCWJyZWFrOworCWNhc2UgMHg0NjoKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwljYXNlIDB4NGM6CisJY2FzZSAweDY3OgorCWRlZmF1bHQ6CisJCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9UU0laRShpKSwgdGlsZS0+cGl0Y2gpOworCQludl93cjMyKGRldiwgTlY0N19QR1JBUEhfVExJTUlUKGkpLCB0aWxlLT5saW1pdCk7CisJCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9USUxFKGkpLCB0aWxlLT5hZGRyKTsKIAkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RTSVpFMShpKSwgdGlsZS0+cGl0Y2gpOwogCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVExJTUlUMShpKSwgdGlsZS0+bGltaXQpOwogCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVElMRTEoaSksIHRpbGUtPmFkZHIpOwpAQCAtMzk2LDE3ICs0MDEsMjAgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewotCQljYXNlIDB4NDY6Ci0JCWNhc2UgMHg0NzoKLQkJY2FzZSAweDQ5OgotCQljYXNlIDB4NGI6Ci0JCQludl93cjMyKGRldiwgMHg0MDBERjAsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcwKSk7Ci0JCQludl93cjMyKGRldiwgMHg0MDBERjQsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcxKSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKKwkJY2FzZSAweDQxOgorCQljYXNlIDB4NDI6CisJCWNhc2UgMHg0MzoKKwkJY2FzZSAweDQ1OgorCQljYXNlIDB4NGU6CisJCWNhc2UgMHg0NDoKKwkJY2FzZSAweDRhOgogCQkJbnZfd3IzMihkZXYsIDB4NDAwOUYwLCBudl9yZDMyKGRldiwgTlYwNF9QRkJfQ0ZHMCkpOwogCQkJbnZfd3IzMihkZXYsIDB4NDAwOUY0LCBudl9yZDMyKGRldiwgTlYwNF9QRkJfQ0ZHMSkpOwogCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQludl93cjMyKGRldiwgMHg0MDBERjAsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcwKSk7CisJCQludl93cjMyKGRldiwgMHg0MDBERjQsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcxKSk7CisJCQlicmVhazsKIAkJfQogCQludl93cjMyKGRldiwgMHg0MDY5RjAsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcwKSk7CiAJCW52X3dyMzIoZGV2LCAweDQwNjlGNCwgbnZfcmQzMihkZXYsIE5WMDRfUEZCX0NGRzEpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2V2by5jCmluZGV4IDE0ZTI0ZTkuLjBlYTA5MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uYwpAQCAtMjgzLDggKzI4Myw3IEBACiAJCQludjUwX2V2b19jaGFubmVsX2RlbCgmZGV2X3ByaXYtPmV2byk7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JfSBlbHNlCi0JaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NTApIHsKKwl9IGVsc2UgewogCQlyZXQgPSBudjUwX2V2b19kbWFvYmpfbmV3KGV2bywgMHgzZCwgTnZFdm9GQjE2LCAweDcwLCAweDE5LAogCQkJCQkgIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMTAwMDApOwogCQlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKaW5kZXggMmQ3ZWE3NS4uMzdlMjFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwpAQCAtMjU2LDYgKzI1Niw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXN0cnVjdCBub3V2ZWF1X2ZpZm9fZW5naW5lICpwZmlmbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmZpZm87CiAJaW50IGksIGhkciA9IChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSA/IDB4MjAwIDogMHgyMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yNjUsNiArMjY2LDcgQEAKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisJcGZpZm8tPnJlYXNzaWduKGRldiwgZmFsc2UpOwogCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCBmYWxzZSk7CiAKIAlpZiAocGdyYXBoLT5jaGFubmVsKGRldikgPT0gY2hhbikKQEAgLTI3NSw2ICsyNzcsNyBAQAogCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwogCiAJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOworCXBmaWZvLT5yZWFzc2lnbihkZXYsIHRydWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiAKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPnJhbWluX2dyY3R4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKaW5kZXggZWEwMDQxOC4uZTU3Y2FhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKQEAgLTQwMywxNiArNDAzLDI0IEBACiB2b2lkCiBudjUwX2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CiAJbnZfd3IzMihkZXYsIDB4MDAzMzBjLCAweDAwMDAwMDAxKTsKIAlpZiAoIW52X3dhaXQoZGV2LCAweDAwMzMwYywgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMCkpCiAJCU5WX0VSUk9SKGRldiwgIlBSQU1JTiBmbHVzaCB0aW1lb3V0XG4iKTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOwogfQogCiB2b2lkCiBudjg0X2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CiAJbnZfd3IzMihkZXYsIDB4MDcwMDAwLCAweDAwMDAwMDAxKTsKIAlpZiAoIW52X3dhaXQoZGV2LCAweDA3MDAwMCwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMCkpCiAJCU5WX0VSUk9SKGRldiwgIlBSQU1JTiBmbHVzaCB0aW1lb3V0XG4iKTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMKaW5kZXggMzhlNTIzZS4uNjE0NDE1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfdm0uYwpAQCAtNDUsMTEgKzQ1LDYgQEAKIAl9CiAKIAlpZiAocGh5cyAmIDEpIHsKLQkJaWYgKGRldl9wcml2LT52cmFtX3N5c19iYXNlKSB7Ci0JCQlwaHlzICs9IGRldl9wcml2LT52cmFtX3N5c19iYXNlOwotCQkJcGh5cyB8PSAweDMwOwotCQl9Ci0KIAkJaWYgKGNvdmVyYWdlIDw9IDMyICogMTAyNCAqIDEwMjQpCiAJCQlwaHlzIHw9IDB4NjA7CiAJCWVsc2UgaWYgKGNvdmVyYWdlIDw9IDY0ICogMTAyNCAqIDEwMjQpCkBAIC0xNzQsNyArMTY5LDExIEBACiB2b2lkCiBudjUwX3ZtX2ZsdXNoX2VuZ2luZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZW5naW5lKQogeworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKIAludl93cjMyKGRldiwgMHgxMDBjODAsIChlbmdpbmUgPDwgMTYpIHwgMSk7CiAJaWYgKCFudl93YWl0KGRldiwgMHgxMDBjODAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKQogCQlOVl9FUlJPUihkZXYsICJ2bSBmbHVzaCB0aW1lb3V0OiBlbmdpbmUgJWRcbiIsIGVuZ2luZSk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguYwppbmRleCBlNmVhN2Q4Li5lYjE4YTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmFwaC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAibnZjMF9ncmFwaC5oIgogCiBzdGF0aWMgdm9pZCBudmMwX2dyYXBoX2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIG52YzBfcnVuazE0MF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKik7CiBzdGF0aWMgaW50ICBudmMwX2dyYXBoX3VubG9hZF9jb250ZXh0X3RvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU2NCBjaGFuKTsKIAogdm9pZApAQCAtMjgxLDYgKzI4Miw3IEBACiAJCXJldHVybjsKIAogCW5vdXZlYXVfaXJxX3VucmVnaXN0ZXIoZGV2LCAxMik7CisJbm91dmVhdV9pcnFfdW5yZWdpc3RlcihkZXYsIDI1KTsKIAogCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcHJpdi0+dW5rNDE4OGI4KTsKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJnByaXYtPnVuazQxODhiNCk7CkBAIC0zOTAsNiArMzkyLDcgQEAKIAl9CiAKIAlub3V2ZWF1X2lycV9yZWdpc3RlcihkZXYsIDEyLCBudmMwX2dyYXBoX2lzcik7CisJbm91dmVhdV9pcnFfcmVnaXN0ZXIoZGV2LCAyNSwgbnZjMF9ydW5rMTQwX2lzcik7CiAJTlZPQkpfQ0xBU1MoZGV2LCAweDkwMmQsIEdSKTsgLyogMkQgKi8KIAlOVk9CSl9DTEFTUyhkZXYsIDB4OTAzOSwgR1IpOyAvKiBNMk1GICovCiAJTlZPQkpfQ0xBU1MoZGV2LCAweDkwOTcsIEdSKTsgLyogM0QgKi8KQEAgLTUxMiw4ICs1MTUsOCBAQAogCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHgyMjQpLCAweGMwMDAwMDAwKTsKIAkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4NDhjKSwgMHhjMDAwMDAwMCk7CiAJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDA4NCksIDB4YzAwMDAwMDApOwotCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHhlNDQpLCAweDAwMWZmZmZlKTsKLQkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4ZTRjKSwgMHgwMDAwMDAwZik7CisJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDY0NCksIDB4MDAxZmZmZmUpOworCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHg2NGMpLCAweDAwMDAwMDBmKTsKIAkJfQogCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDJjOTApLCAweGZmZmZmZmZmKTsKIAkJbnZfd3IzMihkZXYsIEdQQ19VTklUKGdwYywgMHgyYzk0KSwgMHhmZmZmZmZmZik7CkBAIC03NzcsMyArNzgwLDE5IEBACiAKIAludl93cjMyKGRldiwgMHg0MDA1MDAsIDB4MDAwMTAwMDEpOwogfQorCitzdGF0aWMgdm9pZAorbnZjMF9ydW5rMTQwX2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXUzMiB1bml0cyA9IG52X3JkMzIoZGV2LCAweDAwMDE3YykgJiAweDFmOworCisJd2hpbGUgKHVuaXRzKSB7CisJCXUzMiB1bml0ID0gZmZzKHVuaXRzKSAtIDE7CisJCXUzMiByZWcgPSAweDE0MDAwMCArIHVuaXQgKiAweDIwMDA7CisJCXUzMiBzdDAgPSBudl9tYXNrKGRldiwgcmVnICsgMHgxMDIwLCAwLCAwKTsKKwkJdTMyIHN0MSA9IG52X21hc2soZGV2LCByZWcgKyAweDE0MjAsIDAsIDApOworCisJCU5WX0lORk8oZGV2LCAiUFJVTksxNDA6ICVkIDB4JTA4eCAweCUwOHhcbiIsIHVuaXQsIHN0MCwgc3QxKTsKKwkJdW5pdHMgJj0gfigxIDw8IHVuaXQpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JjdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JjdHguYwppbmRleCBiOWU2OGIyLi5mODgwZmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyY3R4LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmN0eC5jCkBAIC0xODMwLDcgKzE4MzAsNyBAQAogCiAJZm9yICh0cCA9IDAsIGlkID0gMDsgdHAgPCA0OyB0cCsrKSB7CiAJCWZvciAoZ3BjID0gMDsgZ3BjIDwgcHJpdi0+Z3BjX25yOyBncGMrKykgewotCQkJaWYgKHRwIDw9IHByaXYtPnRwX25yW2dwY10pIHsKKwkJCWlmICh0cCA8IHByaXYtPnRwX25yW2dwY10pIHsKIAkJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDY5OCksIGlkKTsKIAkJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDRlOCksIGlkKTsKIAkJCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDBjMTAgKyB0cCAqIDQpLCBpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IGIwYWIxODUuLmE0ZTVlNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC00OCwyOSArNDgsMjkgQEAKIAogCXN3aXRjaCAocmFkZW9uX2NydGMtPnJteF90eXBlKSB7CiAJY2FzZSBSTVhfQ0VOVEVSOgotCQlhcmdzLnVzT3ZlcnNjYW5Ub3AgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIG1vZGUtPmNydGNfdmRpc3BsYXkpIC8gMjsKLQkJYXJncy51c092ZXJzY2FuQm90dG9tID0gKGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgLSBtb2RlLT5jcnRjX3ZkaXNwbGF5KSAvIDI7Ci0JCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIG1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMjsKLQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIG1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMjsKKwkJYXJncy51c092ZXJzY2FuVG9wID0gY3B1X3RvX2xlMTYoKGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgLSBtb2RlLT5jcnRjX3ZkaXNwbGF5KSAvIDIpOworCQlhcmdzLnVzT3ZlcnNjYW5Cb3R0b20gPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIG1vZGUtPmNydGNfdmRpc3BsYXkpIC8gMik7CisJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIG1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMik7CisJCWFyZ3MudXNPdmVyc2NhblJpZ2h0ID0gY3B1X3RvX2xlMTYoKGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgLSBtb2RlLT5jcnRjX2hkaXNwbGF5KSAvIDIpOwogCQlicmVhazsKIAljYXNlIFJNWF9BU1BFQ1Q6CiAJCWExID0gbW9kZS0+Y3J0Y192ZGlzcGxheSAqIGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7CiAJCWEyID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAqIG1vZGUtPmNydGNfaGRpc3BsYXk7CiAKIAkJaWYgKGExID4gYTIpIHsKLQkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIChhMiAvIG1vZGUtPmNydGNfdmRpc3BsYXkpKSAvIDI7Ci0JCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0gKGEyIC8gbW9kZS0+Y3J0Y192ZGlzcGxheSkpIC8gMjsKKwkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIChhMiAvIG1vZGUtPmNydGNfdmRpc3BsYXkpKSAvIDIpOworCQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIChhMiAvIG1vZGUtPmNydGNfdmRpc3BsYXkpKSAvIDIpOwogCQl9IGVsc2UgaWYgKGEyID4gYTEpIHsKLQkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDI7Ci0JCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5IC0gKGExIC8gbW9kZS0+Y3J0Y19oZGlzcGxheSkpIC8gMjsKKwkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDIpOworCQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDIpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUk1YX0ZVTEw6CiAJZGVmYXVsdDoKLQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSByYWRlb25fY3J0Yy0+aF9ib3JkZXI7Ci0JCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSByYWRlb25fY3J0Yy0+aF9ib3JkZXI7Ci0JCWFyZ3MudXNPdmVyc2NhbkJvdHRvbSA9IHJhZGVvbl9jcnRjLT52X2JvcmRlcjsKLQkJYXJncy51c092ZXJzY2FuVG9wID0gcmFkZW9uX2NydGMtPnZfYm9yZGVyOworCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IGNwdV90b19sZTE2KHJhZGVvbl9jcnRjLT5oX2JvcmRlcik7CisJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNihyYWRlb25fY3J0Yy0+aF9ib3JkZXIpOworCQlhcmdzLnVzT3ZlcnNjYW5Cb3R0b20gPSBjcHVfdG9fbGUxNihyYWRlb25fY3J0Yy0+dl9ib3JkZXIpOworCQlhcmdzLnVzT3ZlcnNjYW5Ub3AgPSBjcHVfdG9fbGUxNihyYWRlb25fY3J0Yy0+dl9ib3JkZXIpOwogCQlicmVhazsKIAl9CiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CkBAIC00MTksMjMgKzQxOSwyMyBAQAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAogCWlmIChBU0lDX0lTX0RDRTUocmRldikpIHsKLQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50RnJhYyA9IDA7CisJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudEZyYWMgPSBjcHVfdG9fbGUxNigwKTsKIAkJYXJncy52My51Y1NwcmVhZFNwZWN0cnVtVHlwZSA9IHNzLT50eXBlOwogCQlzd2l0Y2ggKHBsbF9pZCkgewogCQljYXNlIEFUT01fUFBMTDE6CiAJCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlIHw9IEFUT01fUFBMTF9TU19UWVBFX1YzX1AxUExMOwotCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gc3MtPmFtb3VudDsKLQkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBzcy0+c3RlcDsKKwkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudCA9IGNwdV90b19sZTE2KHNzLT5hbW91bnQpOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IGNwdV90b19sZTE2KHNzLT5zdGVwKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fUFBMTDI6CiAJCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlIHw9IEFUT01fUFBMTF9TU19UWVBFX1YzX1AyUExMOwotCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gc3MtPmFtb3VudDsKLQkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBzcy0+c3RlcDsKKwkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudCA9IGNwdV90b19sZTE2KHNzLT5hbW91bnQpOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IGNwdV90b19sZTE2KHNzLT5zdGVwKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fRENQTEw6CiAJCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlIHw9IEFUT01fUFBMTF9TU19UWVBFX1YzX0RDUExMOwotCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gMDsKLQkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSAwOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gY3B1X3RvX2xlMTYoMCk7CisJCQlhcmdzLnYzLnVzU3ByZWFkU3BlY3RydW1TdGVwID0gY3B1X3RvX2xlMTYoMCk7CiAJCQlicmVhazsKIAkJY2FzZSBBVE9NX1BQTExfSU5WQUxJRDoKIAkJCXJldHVybjsKQEAgLTQ0NywxOCArNDQ3LDE4IEBACiAJCXN3aXRjaCAocGxsX2lkKSB7CiAJCWNhc2UgQVRPTV9QUExMMToKIAkJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjJfUDFQTEw7Ci0JCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBzcy0+YW1vdW50OwotCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IHNzLT5zdGVwOworCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gY3B1X3RvX2xlMTYoc3MtPmFtb3VudCk7CisJCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1TdGVwID0gY3B1X3RvX2xlMTYoc3MtPnN0ZXApOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRPTV9QUExMMjoKIAkJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjJfUDJQTEw7Ci0JCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBzcy0+YW1vdW50OwotCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IHNzLT5zdGVwOworCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gY3B1X3RvX2xlMTYoc3MtPmFtb3VudCk7CisJCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1TdGVwID0gY3B1X3RvX2xlMTYoc3MtPnN0ZXApOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRPTV9EQ1BMTDoKIAkJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjJfRENQTEw7Ci0JCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSAwOwotCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IDA7CisJCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBjcHVfdG9fbGUxNigwKTsKKwkJCWFyZ3MudjIudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBjcHVfdG9fbGUxNigwKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fUFBMTF9JTlZBTElEOgogCQkJcmV0dXJuOwpAQCAtNTM4LDcgKzUzOCw2IEBACiAJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0hJR0hfRkJfRElWOwogCQllbHNlCiAJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0xPV19SRUZfRElWOwotCiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKQEAgLTU1NSwyMyArNTU0LDI4IEBACiAJCQkJCWRwX2Nsb2NrID0gZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2s7CiAJCQkJfQogCQkJfQotI2lmIDAgLyogZG9lc24ndCB3b3JrIHByb3Blcmx5IG9uIHNvbWUgbGFwdG9wcyAqLworCiAJCQkvKiB1c2UgcmVjb21tZW5kZWQgcmVmX2RpdiBmb3Igc3MgKi8KIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKIAkJCQlpZiAoc3NfZW5hYmxlZCkgewogCQkJCQlpZiAoc3MtPnJlZmRpdikgeworCQkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUDsKIAkJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfUkVGX0RJVjsKIAkJCQkJCXBsbC0+cmVmZXJlbmNlX2RpdiA9IHNzLT5yZWZkaXY7CisJCQkJCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX0ZSQUNfRkJfRElWOwogCQkJCQl9CiAJCQkJfQogCQkJfQotI2VuZGlmCisKIAkJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CiAJCQkJLyogRFZPIHdhbnRzIDJ4IHBpeGVsIGNsb2NrIGlmIHRoZSBEVk8gY2hpcCBpcyBpbiAxMiBiaXQgbW9kZSAqLwogCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCA9PSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfRFZPMSkKIAkJCQkJYWRqdXN0ZWRfY2xvY2sgPSBtb2RlLT5jbG9jayAqIDI7CiAJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0NMT1NFU1RfTE9XRVI7CisJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkKKwkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX0lTX0xDRDsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGVuY29kZXItPmVuY29kZXJfdHlwZSAhPSBEUk1fTU9ERV9FTkNPREVSX0RBQykKIAkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX05PX09ERF9QT1NUX0RJVjsKQEAgLTYwNiwxNCArNjEwLDkgQEAKIAkJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KG1vZGUtPmNsb2NrIC8gMTApOwogCQkJCWFyZ3MudjEudWNUcmFuc21pdHRlcklEID0gcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQ7CiAJCQkJYXJncy52MS51Y0VuY29kZU1vZGUgPSBlbmNvZGVyX21vZGU7Ci0JCQkJaWYgKGVuY29kZXJfbW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgewotCQkJCQlpZiAoc3NfZW5hYmxlZCkKLQkJCQkJCWFyZ3MudjEudWNDb25maWcgfD0KLQkJCQkJCQlBREpVU1RfRElTUExBWV9DT05GSUdfU1NfRU5BQkxFOwotCQkJCX0gZWxzZSBpZiAoZW5jb2Rlcl9tb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0xWRFMpIHsKKwkJCQlpZiAoc3NfZW5hYmxlZCkKIAkJCQkJYXJncy52MS51Y0NvbmZpZyB8PQogCQkJCQkJQURKVVNUX0RJU1BMQVlfQ09ORklHX1NTX0VOQUJMRTsKLQkJCQl9CiAKIAkJCQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwKIAkJCQkJCSAgIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CkBAIC02MjQsMTIgKzYyMywxMiBAQAogCQkJCWFyZ3MudjMuc0lucHV0LnVjVHJhbnNtaXR0ZXJJRCA9IHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkOwogCQkJCWFyZ3MudjMuc0lucHV0LnVjRW5jb2RlTW9kZSA9IGVuY29kZXJfbW9kZTsKIAkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgPSAwOworCQkJCWlmIChzc19lbmFibGVkKQorCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KKwkJCQkJCURJU1BQTExfQ09ORklHX1NTX0VOQUJMRTsKIAkJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKSB7CiAJCQkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwogCQkJCQlpZiAoZW5jb2Rlcl9tb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0RQKSB7Ci0JCQkJCQlpZiAoc3NfZW5hYmxlZCkKLQkJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KLQkJCQkJCQkJRElTUFBMTF9DT05GSUdfU1NfRU5BQkxFOwogCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9CiAJCQkJCQkJRElTUFBMTF9DT05GSUdfQ09IRVJFTlRfTU9ERTsKIAkJCQkJCS8qIDE2MjAwIG9yIDI3MDAwICovCkBAIC02NDksMTggKzY0OCwxMSBAQAogCQkJCQl9CiAJCQkJfSBlbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKIAkJCQkJaWYgKGVuY29kZXJfbW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgewotCQkJCQkJaWYgKHNzX2VuYWJsZWQpCi0JCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9Ci0JCQkJCQkJCURJU1BQTExfQ09ORklHX1NTX0VOQUJMRTsKIAkJCQkJCWFyZ3MudjMuc0lucHV0LnVjRGlzcFBsbENvbmZpZyB8PQogCQkJCQkJCURJU1BQTExfQ09ORklHX0NPSEVSRU5UX01PREU7CiAJCQkJCQkvKiAxNjIwMCBvciAyNzAwMCAqLwogCQkJCQkJYXJncy52My5zSW5wdXQudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoZHBfY2xvY2sgLyAxMCk7Ci0JCQkJCX0gZWxzZSBpZiAoZW5jb2Rlcl9tb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0xWRFMpIHsKLQkJCQkJCWlmIChzc19lbmFibGVkKQotCQkJCQkJCWFyZ3MudjMuc0lucHV0LnVjRGlzcFBsbENvbmZpZyB8PQotCQkJCQkJCQlESVNQUExMX0NPTkZJR19TU19FTkFCTEU7Ci0JCQkJCX0gZWxzZSB7CisJCQkJCX0gZWxzZSBpZiAoZW5jb2Rlcl9tb2RlICE9IEFUT01fRU5DT0RFUl9NT0RFX0xWRFMpIHsKIAkJCQkJCWlmIChtb2RlLT5jbG9jayA+IDE2NTAwMCkKIAkJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KIAkJCQkJCQkJRElTUFBMTF9DT05GSUdfRFVBTF9MSU5LOwpAQCAtNjcwLDEwICs2NjIsMTIgQEAKIAkJCQkJCSAgIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiAJCQkJYWRqdXN0ZWRfY2xvY2sgPSBsZTMyX3RvX2NwdShhcmdzLnYzLnNPdXRwdXQudWxEaXNwUGxsRnJlcSkgKiAxMDsKIAkJCQlpZiAoYXJncy52My5zT3V0cHV0LnVjUmVmRGl2KSB7CisJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfRlJBQ19GQl9ESVY7CiAJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfUkVGX0RJVjsKIAkJCQkJcGxsLT5yZWZlcmVuY2VfZGl2ID0gYXJncy52My5zT3V0cHV0LnVjUmVmRGl2OwogCQkJCX0KIAkJCQlpZiAoYXJncy52My5zT3V0cHV0LnVjUG9zdERpdikgeworCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX0ZSQUNfRkJfRElWOwogCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX1BPU1RfRElWOwogCQkJCQlwbGwtPnBvc3RfZGl2ID0gYXJncy52My5zT3V0cHV0LnVjUG9zdERpdjsKIAkJCQl9CkBAIC03MjcsMTQgKzcyMSwxNCBAQAogCQkJICogU2V0UGl4ZWxDbG9jayBwcm92aWRlcyB0aGUgZGl2aWRlcnMKIAkJCSAqLwogCQkJYXJncy52NS51Y0NSVEMgPSBBVE9NX0NSVENfSU5WQUxJRDsKLQkJCWFyZ3MudjUudXNQaXhlbENsb2NrID0gZGlzcGNsazsKKwkJCWFyZ3MudjUudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoZGlzcGNsayk7CiAJCQlhcmdzLnY1LnVjUHBsbCA9IEFUT01fRENQTEw7CiAJCQlicmVhazsKIAkJY2FzZSA2OgogCQkJLyogaWYgdGhlIGRlZmF1bHQgZGNwbGwgY2xvY2sgaXMgc3BlY2lmaWVkLAogCQkJICogU2V0UGl4ZWxDbG9jayBwcm92aWRlcyB0aGUgZGl2aWRlcnMKIAkJCSAqLwotCQkJYXJncy52Ni51bERpc3BFbmdDbGtGcmVxID0gZGlzcGNsazsKKwkJCWFyZ3MudjYudWxEaXNwRW5nQ2xrRnJlcSA9IGNwdV90b19sZTMyKGRpc3BjbGspOwogCQkJYXJncy52Ni51Y1BwbGwgPSBBVE9NX0RDUExMOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC05NjMsOCArOTU3LDEyIEBACiAJLyogYWRqdXN0IHBpeGVsIGNsb2NrIGFzIG5lZWRlZCAqLwogCWFkanVzdGVkX2Nsb2NrID0gYXRvbWJpb3NfYWRqdXN0X3BsbChjcnRjLCBtb2RlLCBwbGwsIHNzX2VuYWJsZWQsICZzcyk7CiAKLQlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAotCQkJICAgJnJlZl9kaXYsICZwb3N0X2Rpdik7CisJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCXJhZGVvbl9jb21wdXRlX3BsbF9hdml2byhwbGwsIGFkanVzdGVkX2Nsb2NrLCAmcGxsX2Nsb2NrLCAmZmJfZGl2LCAmZnJhY19mYl9kaXYsCisJCQkJCSAmcmVmX2RpdiwgJnBvc3RfZGl2KTsKKwllbHNlCisJCXJhZGVvbl9jb21wdXRlX3BsbF9sZWdhY3kocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAorCQkJCQkgICZyZWZfZGl2LCAmcG9zdF9kaXYpOwogCiAJYXRvbWJpb3NfY3J0Y19wcm9ncmFtX3NzKGNydGMsIEFUT01fRElTQUJMRSwgcmFkZW9uX2NydGMtPnBsbF9pZCwgJnNzKTsKIApAQCAtOTkzLDkgKzk5MSw5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGV2ZXJncmVlbl9jcnRjX2RvX3NldF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCQkgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQkgICAgICBpbnQgeCwgaW50IHksIGludCBhdG9taWMpCitzdGF0aWMgaW50IGRjZTRfY3J0Y19kb19zZXRfYmFzZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSBpbnQgeCwgaW50IHksIGludCBhdG9taWMpCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CkBAIC0xMDA2LDYgKzEwMDQsNyBAQAogCXN0cnVjdCByYWRlb25fYm8gKnJibzsKIAl1aW50NjRfdCBmYl9sb2NhdGlvbjsKIAl1aW50MzJfdCBmYl9mb3JtYXQsIGZiX3BpdGNoX3BpeGVscywgdGlsaW5nX2ZsYWdzOworCXUzMiBmYl9zd2FwID0gRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoRVZFUkdSRUVOX0dSUEhfRU5ESUFOX05PTkUpOwogCWludCByOwogCiAJLyogbm8gZmIgYm91bmQgKi8KQEAgLTEwNTcsMTEgKzEwNTYsMTcgQEAKIAljYXNlIDE2OgogCQlmYl9mb3JtYXQgPSAoRVZFUkdSRUVOX0dSUEhfREVQVEgoRVZFUkdSRUVOX0dSUEhfREVQVEhfMTZCUFApIHwKIAkJCSAgICAgRVZFUkdSRUVOX0dSUEhfRk9STUFUKEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9BUkdCNTY1KSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWZiX3N3YXAgPSBFVkVSR1JFRU5fR1JQSF9FTkRJQU5fU1dBUChFVkVSR1JFRU5fR1JQSF9FTkRJQU5fOElOMTYpOworI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgMjQ6CiAJY2FzZSAzMjoKIAkJZmJfZm9ybWF0ID0gKEVWRVJHUkVFTl9HUlBIX0RFUFRIKEVWRVJHUkVFTl9HUlBIX0RFUFRIXzMyQlBQKSB8CiAJCQkgICAgIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVChFVkVSR1JFRU5fR1JQSF9GT1JNQVRfQVJHQjg4ODgpKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJZmJfc3dhcCA9IEVWRVJHUkVFTl9HUlBIX0VORElBTl9TV0FQKEVWRVJHUkVFTl9HUlBIX0VORElBTl84SU4zMik7CisjZW5kaWYKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJVbnN1cHBvcnRlZCBzY3JlZW4gZGVwdGggJWRcbiIsCkBAIC0xMTA2LDYgKzExMTEsNyBAQAogCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAogCSAgICAgICAodTMyKSBmYl9sb2NhdGlvbiAmIEVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfQUREUkVTU19NQVNLKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgZmJfZm9ybWF0KTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU1dBUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9zd2FwKTsKIAogCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX09GRlNFVF9YICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU1VSRkFDRV9PRkZTRVRfWSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CkBAIC0xMTI3LDEyICsxMTMzLDYgQEAKIAlXUkVHMzIoRVZFUkdSRUVOX1ZJRVdQT1JUX1NJWkUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgIChjcnRjLT5tb2RlLmhkaXNwbGF5IDw8IDE2KSB8IGNydGMtPm1vZGUudmRpc3BsYXkpOwogCi0JaWYgKGNydGMtPm1vZGUuZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJV1JFRzMyKEVWRVJHUkVFTl9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKLQkJICAgICAgIEVWRVJHUkVFTl9JTlRFUkxFQVZFX0VOKTsKLQllbHNlCi0JCVdSRUczMihFVkVSR1JFRU5fREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOwotCiAJaWYgKCFhdG9taWMgJiYgZmIgJiYgZmIgIT0gY3J0Yy0+ZmIpIHsKIAkJcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGZiKTsKIAkJcmJvID0gcmFkZW9uX2ZiLT5vYmotPmRyaXZlcl9wcml2YXRlOwpAQCAtMTE2Miw2ICsxMTYyLDcgQEAKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICp0YXJnZXRfZmI7CiAJdWludDY0X3QgZmJfbG9jYXRpb247CiAJdWludDMyX3QgZmJfZm9ybWF0LCBmYl9waXRjaF9waXhlbHMsIHRpbGluZ19mbGFnczsKKwl1MzIgZmJfc3dhcCA9IFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOX05PTkU7CiAJaW50IHI7CiAKIAkvKiBubyBmYiBib3VuZCAqLwpAQCAtMTIxNSwxMiArMTIxNiwxOCBAQAogCQlmYl9mb3JtYXQgPQogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfREVQVEhfMTZCUFAgfAogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfMTZCUFBfUkdCNTY1OworI2lmZGVmIF9fQklHX0VORElBTgorCQlmYl9zd2FwID0gUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fMTZCSVQ7CisjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSAyNDoKIAljYXNlIDMyOgogCQlmYl9mb3JtYXQgPQogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfREVQVEhfMzJCUFAgfAogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfMzJCUFBfQVJHQjg4ODg7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWZiX3N3YXAgPSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl8zMkJJVDsKKyNlbmRpZgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIHNjcmVlbiBkZXB0aCAlZFxuIiwKQEAgLTEyNjAsNiArMTI2Nyw4IEBACiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsKIAkgICAgICAgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAodTMyKSBmYl9sb2NhdGlvbik7CiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9mb3JtYXQpOworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQorCQlXUkVHMzIoUjYwMF9EMUdSUEhfU1dBUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9zd2FwKTsKIAogCVdSRUczMihBVklWT19EMUdSUEhfU1VSRkFDRV9PRkZTRVRfWCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9TVVJGQUNFX09GRlNFVF9ZICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKQEAgLTEyODEsMTIgKzEyOTAsNiBAQAogCVdSRUczMihBVklWT19EMU1PREVfVklFV1BPUlRfU0laRSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKIAkgICAgICAgKGNydGMtPm1vZGUuaGRpc3BsYXkgPDwgMTYpIHwgY3J0Yy0+bW9kZS52ZGlzcGxheSk7CiAKLQlpZiAoY3J0Yy0+bW9kZS5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQotCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCQkgICAgICAgQVZJVk9fRDFNT0RFX0lOVEVSTEVBVkVfRU4pOwotCWVsc2UKLQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7Ci0KIAlpZiAoIWF0b21pYyAmJiBmYiAmJiBmYiAhPSBjcnRjLT5mYikgewogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIoZmIpOwogCQlyYm8gPSByYWRlb25fZmItPm9iai0+ZHJpdmVyX3ByaXZhdGU7CkBAIC0xMzEwLDcgKzEzMTMsNyBAQAogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmIChBU0lDX0lTX0RDRTQocmRldikpCi0JCXJldHVybiBldmVyZ3JlZW5fY3J0Y19kb19zZXRfYmFzZShjcnRjLCBvbGRfZmIsIHgsIHksIDApOworCQlyZXR1cm4gZGNlNF9jcnRjX2RvX3NldF9iYXNlKGNydGMsIG9sZF9mYiwgeCwgeSwgMCk7CiAJZWxzZSBpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKIAkJcmV0dXJuIGF2aXZvX2NydGNfZG9fc2V0X2Jhc2UoY3J0Yywgb2xkX2ZiLCB4LCB5LCAwKTsKIAllbHNlCkBAIC0xMzI1LDcgKzEzMjgsNyBAQAogICAgICAgIHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmIChBU0lDX0lTX0RDRTQocmRldikpCi0JCXJldHVybiBldmVyZ3JlZW5fY3J0Y19kb19zZXRfYmFzZShjcnRjLCBmYiwgeCwgeSwgMSk7CisJCXJldHVybiBkY2U0X2NydGNfZG9fc2V0X2Jhc2UoY3J0YywgZmIsIHgsIHksIDEpOwogCWVsc2UgaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCiAJCXJldHVybiBhdml2b19jcnRjX2RvX3NldF9iYXNlKGNydGMsIGZiLCB4LCB5LCAxKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKaW5kZXggNGU3Nzc4ZC4uNjk1ZGU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwpAQCAtMTg3LDkgKzE4Nyw5IEBACiBpbnQgZHBfbW9kZV92YWxpZCh1OCBkcGNkW0RQX0RQQ0RfU0laRV0sIGludCBtb2RlX2Nsb2NrKQogewogCWludCBsYW5lcyA9IGRwX2xhbmVzX2Zvcl9tb2RlX2Nsb2NrKGRwY2QsIG1vZGVfY2xvY2spOwotCWludCBidyA9IGRwX2xhbmVzX2Zvcl9tb2RlX2Nsb2NrKGRwY2QsIG1vZGVfY2xvY2spOworCWludCBkcF9jbG9jayA9IGRwX2xpbmtfY2xvY2tfZm9yX21vZGVfY2xvY2soZHBjZCwgbW9kZV9jbG9jayk7CiAKLQlpZiAoKGxhbmVzID09IDApIHx8IChidyA9PSAwKSkKKwlpZiAoKGxhbmVzID09IDApIHx8IChkcF9jbG9jayA9PSAwKSkKIAkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKIAogCXJldHVybiBNT0RFX09LOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKaW5kZXggYTg5NzNhYy4uZDI3MGIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCkBAIC05NywyNiArOTcsMjkgQEAKIH0KIAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwotdTMyIGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2ludCBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIHRlbXAgPSAoUlJFRzMyKENHX01VTFRfVEhFUk1BTF9TVEFUVVMpICYgQVNJQ19UX01BU0spID4+CiAJCUFTSUNfVF9TSElGVDsKIAl1MzIgYWN0dWFsX3RlbXAgPSAwOwogCi0JaWYgKCh0ZW1wID4+IDEwKSAmIDEpCi0JCWFjdHVhbF90ZW1wID0gMDsKLQllbHNlIGlmICgodGVtcCA+PiA5KSAmIDEpCisJaWYgKHRlbXAgJiAweDQwMCkKKwkJYWN0dWFsX3RlbXAgPSAtMjU2OworCWVsc2UgaWYgKHRlbXAgJiAweDIwMCkKIAkJYWN0dWFsX3RlbXAgPSAyNTU7Ci0JZWxzZQotCQlhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHgxZmY7CisJCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKKwl9IGVsc2UKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKIAotCXJldHVybiBhY3R1YWxfdGVtcCAqIDEwMDA7CisJcmV0dXJuIChhY3R1YWxfdGVtcCAqIDEwMDApIC8gMjsKIH0KIAotdTMyIHN1bW9fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitpbnQgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgdGVtcCA9IFJSRUczMihDR19USEVSTUFMX1NUQVRVUykgJiAweGZmOwotCXUzMiBhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwlpbnQgYWN0dWFsX3RlbXAgPSB0ZW1wIC0gNDk7CiAKIAlyZXR1cm4gYWN0dWFsX3RlbXAgKiAxMDAwOwogfQpAQCAtMTE4Miw2ICsxMTg1LDIyIEBACiAvKgogICogQ1AuCiAgKi8KK3ZvaWQgZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpCit7CisJLyogc2V0IHRvIERYMTAvMTEgbW9kZSAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19NT0RFX0NPTlRST0wsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxKTsKKwkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lORElSRUNUX0JVRkZFUiwgMikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQkgICgyIDw8IDApIHwKKyNlbmRpZgorCQkJICAoaWItPmdwdV9hZGRyICYgMHhGRkZGRkZGQykpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSAmIDB4RkYpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGliLT5sZW5ndGhfZHcpOworfQorCiAKIHN0YXRpYyBpbnQgZXZlcmdyZWVuX2NwX2xvYWRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewpAQCAtMTE5Miw3ICsxMjExLDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcjcwMF9jcF9zdG9wKHJkZXYpOwotCVdSRUczMihDUF9SQl9DTlRMLCBSQl9OT19VUERBVEUgfCAoMTUgPDwgOCkgfCAoMyA8PCAwKSk7CisJV1JFRzMyKENQX1JCX0NOVEwsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJICAgICAgIEJVRl9TV0FQXzMyQklUIHwKKyNlbmRpZgorCSAgICAgICBSQl9OT19VUERBVEUgfCBSQl9CTEtTWigxNSkgfCBSQl9CVUZTWigzKSk7CiAKIAlmd19kYXRhID0gKGNvbnN0IF9fYmUzMiAqKXJkZXYtPnBmcF9mdy0+ZGF0YTsKIAlXUkVHMzIoQ1BfUEZQX1VDT0RFX0FERFIsIDApOwpAQCAtMTIzMyw3ICsxMjU2LDcgQEAKIAljcF9tZSA9IDB4ZmY7CiAJV1JFRzMyKENQX01FX0NOVEwsIGNwX21lKTsKIAotCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIGV2ZXJncmVlbl9kZWZhdWx0X3NpemUgKyAxNSk7CisJciA9IHJhZGVvbl9yaW5nX2xvY2socmRldiwgZXZlcmdyZWVuX2RlZmF1bHRfc2l6ZSArIDE5KTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoInJhZGVvbjogY3AgZmFpbGVkIHRvIGxvY2sgcmluZyAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwpAQCAtMTI2Niw2ICsxMjg5LDExIEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhmZmZmZmZmZik7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhmZmZmZmZmZik7CiAKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweGMwMDI2OTAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMzE2KTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDBlKTsgLyogVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHgwMDAwMDAxMCk7IC8qICAqLworCiAJcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2KTsKIAogCXJldHVybiAwOwpAQCAtMTMwNiw3ICsxMzM0LDExIEBACiAJV1JFRzMyKENQX1JCX1dQVFIsIDApOwogCiAJLyogc2V0IHRoZSB3YiBhZGRyZXNzIHdldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90ICovCi0JV1JFRzMyKENQX1JCX1JQVFJfQUREUiwgKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX0NQX1JQVFJfT0ZGU0VUKSAmIDB4RkZGRkZGRkMpOworCVdSRUczMihDUF9SQl9SUFRSX0FERFIsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJICAgICAgIFJCX1JQVFJfU1dBUCgyKSB8CisjZW5kaWYKKwkgICAgICAgKChyZGV2LT53Yi5ncHVfYWRkciArIFJBREVPTl9XQl9DUF9SUFRSX09GRlNFVCkgJiAweEZGRkZGRkZDKSk7CiAJV1JFRzMyKENQX1JCX1JQVFJfQUREUl9ISSwgdXBwZXJfMzJfYml0cyhyZGV2LT53Yi5ncHVfYWRkciArIFJBREVPTl9XQl9DUF9SUFRSX09GRlNFVCkgJiAweEZGKTsKIAlXUkVHMzIoU0NSQVRDSF9BRERSLCAoKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX1NDUkFUQ0hfT0ZGU0VUKSA+PiA4KSAmIDB4RkZGRkZGRkYpOwogCkBAIC0yMDcyLDYgKzIxMDQsNyBAQAogCVdSRUczMihWR1RfQ0FDSEVfSU5WQUxJREFUSU9OLCB2Z3RfY2FjaGVfaW52YWxpZGF0aW9uKTsKIAogCVdSRUczMihWR1RfR1NfVkVSVEVYX1JFVVNFLCAxNik7CisJV1JFRzMyKFBBX1NVX0xJTkVfU1RJUFBMRV9WQUxVRSwgMCk7CiAJV1JFRzMyKFBBX1NDX0xJTkVfU1RJUFBMRV9TVEFURSwgMCk7CiAKIAlXUkVHMzIoVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAxNCk7CkBAIC0yMjAxLDYgKzIyMzQsOSBAQAogCXN0cnVjdCBldmVyZ3JlZW5fbWNfc2F2ZSBzYXZlOwogCXUzMiBncmJtX3Jlc2V0ID0gMDsKIAorCWlmICghKFJSRUczMihHUkJNX1NUQVRVUykgJiBHVUlfQUNUSVZFKSkKKwkJcmV0dXJuIDA7CisKIAlkZXZfaW5mbyhyZGV2LT5kZXYsICJHUFUgc29mdHJlc2V0IFxuIik7CiAJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBHUkJNX1NUQVRVUz0weCUwOFhcbiIsCiAJCVJSRUczMihHUkJNX1NUQVRVUykpOwpAQCAtMjYwMyw4ICsyNjM5LDggQEAKIAl3aGlsZSAocnB0ciAhPSB3cHRyKSB7CiAJCS8qIHdwdHIvcnB0ciBhcmUgaW4gYnl0ZXMhICovCiAJCXJpbmdfaW5kZXggPSBycHRyIC8gNDsKLQkJc3JjX2lkID0gIHJkZXYtPmloLnJpbmdbcmluZ19pbmRleF0gJiAweGZmOwotCQlzcmNfZGF0YSA9IHJkZXYtPmloLnJpbmdbcmluZ19pbmRleCArIDFdICYgMHhmZmZmZmZmOworCQlzcmNfaWQgPSAgbGUzMl90b19jcHUocmRldi0+aWgucmluZ1tyaW5nX2luZGV4XSkgJiAweGZmOworCQlzcmNfZGF0YSA9IGxlMzJfdG9fY3B1KHJkZXYtPmloLnJpbmdbcmluZ19pbmRleCArIDFdKSAmIDB4ZmZmZmZmZjsKIAogCQlzd2l0Y2ggKHNyY19pZCkgewogCQljYXNlIDE6IC8qIEQxIHZibGFuay92bGluZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMKaW5kZXggYjc1OGRjNy4uMmFkZmIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jCkBAIC01NSw3ICs1NSw3IEBACiAJaWYgKGggPCA4KQogCQloID0gODsKIAotCWNiX2NvbG9yX2luZm8gPSAoKGZvcm1hdCA8PCAyKSB8ICgxIDw8IDI0KSk7CisJY2JfY29sb3JfaW5mbyA9ICgoZm9ybWF0IDw8IDIpIHwgKDEgPDwgMjQpIHwgKDEgPDwgOCkpOwogCXBpdGNoID0gKHcgLyA4KSAtIDE7CiAJc2xpY2UgPSAoKHcgKiBoKSAvIDY0KSAtIDE7CiAKQEAgLTEzMyw2ICsxMzMsOSBAQAogCiAJLyogaGlnaCBhZGRyLCBzdHJpZGUgKi8KIAlzcV92dHhfY29uc3RhbnRfd29yZDIgPSAoKHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpICYgMHhmZikgfCAoMTYgPDwgOCkpOworI2lmZGVmIF9fQklHX0VORElBTgorCXNxX3Z0eF9jb25zdGFudF93b3JkMiB8PSAoMiA8PCAzMCk7CisjZW5kaWYKIAkvKiB4eXp3IHN3aXp6bGVzICovCiAJc3FfdnR4X2NvbnN0YW50X3dvcmQzID0gKDAgPDwgMykgfCAoMSA8PCA2KSB8ICgyIDw8IDkpIHwgKDMgPDwgMTIpOwogCkBAIC0xNzMsNyArMTc2LDcgQEAKIAlzcV90ZXhfcmVzb3VyY2Vfd29yZDAgPSAoMSA8PCAwKTsgLyogMkQgKi8KIAlzcV90ZXhfcmVzb3VyY2Vfd29yZDAgfD0gKCgoKHBpdGNoID4+IDMpIC0gMSkgPDwgNikgfAogCQkJCSAgKCh3IC0gMSkgPDwgMTgpKTsKLQlzcV90ZXhfcmVzb3VyY2Vfd29yZDEgPSAoKGggLSAxKSA8PCAwKTsKKwlzcV90ZXhfcmVzb3VyY2Vfd29yZDEgPSAoKGggLSAxKSA8PCAwKSB8ICgxIDw8IDI4KTsKIAkvKiB4eXp3IHN3aXp6bGVzICovCiAJc3FfdGV4X3Jlc291cmNlX3dvcmQ0ID0gKDAgPDwgMTYpIHwgKDEgPDwgMTkpIHwgKDIgPDwgMjIpIHwgKDMgPDwgMjUpOwogCkBAIC0yMjEsNyArMjI0LDExIEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgRElfUFRfUkVDVExJU1QpOwogCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lOREVYX1RZUEUsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBESV9JTkRFWF9TSVpFXzE2X0JJVCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCSAgKDIgPDwgMikgfAorI2VuZGlmCisJCQkgIERJX0lOREVYX1NJWkVfMTZfQklUKTsKIAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19OVU1fSU5TVEFOQ0VTLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMSk7CkBAIC0yMzIsNyArMjM5LDcgQEAKIAogfQogCi0vKiBlbWl0cyAzMCAqLworLyogZW1pdHMgMzYgKi8KIHN0YXRpYyB2b2lkCiBzZXRfZGVmYXVsdF9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKQEAgLTI0NSw2ICsyNTIsOCBAQAogCWludCBudW1faHNfdGhyZWFkcywgbnVtX2xzX3RocmVhZHM7CiAJaW50IG51bV9wc19zdGFja19lbnRyaWVzLCBudW1fdnNfc3RhY2tfZW50cmllcywgbnVtX2dzX3N0YWNrX2VudHJpZXMsIG51bV9lc19zdGFja19lbnRyaWVzOwogCWludCBudW1faHNfc3RhY2tfZW50cmllcywgbnVtX2xzX3N0YWNrX2VudHJpZXM7CisJdTY0IGdwdV9hZGRyOworCWludCBkd29yZHM7CiAKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9DRURBUjoKQEAgLTQ5Nyw2ICs1MDYsMTggQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDAwKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDAwKTsKIAorCS8qIHNldCB0byBEWDEwLzExIG1vZGUgKi8KKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfTU9ERV9DT05UUk9MLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMSk7CisKKwkvKiBlbWl0IGFuIElCIHBvaW50aW5nIGF0IGRlZmF1bHQgc3RhdGUgKi8KKwlkd29yZHMgPSBBTElHTihyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuLCAweDEwKTsKKwlncHVfYWRkciA9IHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfZ3B1X2FkZHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0OworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19JTkRJUkVDVF9CVUZGRVIsIDIpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBncHVfYWRkciAmIDB4RkZGRkZGRkMpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpICYgMHhGRik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZHdvcmRzKTsKKwogfQogCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IGkyZih1aW50MzJfdCBpbnB1dCkKQEAgLTUyNyw4ICs1NDgsMTAgQEAKIGludCBldmVyZ3JlZW5fYmxpdF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiBvYmpfc2l6ZTsKLQlpbnQgcjsKKwlpbnQgaSwgciwgZHdvcmRzOwogCXZvaWQgKnB0cjsKKwl1MzIgcGFja2V0MnNbMTZdOworCWludCBudW1fcGFja2V0MnMgPSAwOwogCiAJLyogcGluIGNvcHkgc2hhZGVyIGludG8gdnJhbSBpZiBhbHJlYWR5IGluaXRpYWxpemVkICovCiAJaWYgKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKQpAQCAtNTM2LDggKzU1OSwxNyBAQAogCiAJbXV0ZXhfaW5pdCgmcmRldi0+cjYwMF9ibGl0Lm11dGV4KTsKIAlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ID0gMDsKLQlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gMDsKLQlvYmpfc2l6ZSA9IDA7CisKKwlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gZXZlcmdyZWVuX2RlZmF1bHRfc2l6ZTsKKworCWR3b3JkcyA9IHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW47CisJd2hpbGUgKGR3b3JkcyAmIDB4ZikgeworCQlwYWNrZXQyc1tudW1fcGFja2V0MnMrK10gPSBjcHVfdG9fbGUzMihQQUNLRVQyKDApKTsKKwkJZHdvcmRzKys7CisJfQorCisJb2JqX3NpemUgPSBkd29yZHMgKiA0OworCW9ial9zaXplID0gQUxJR04ob2JqX3NpemUsIDI1Nik7CiAKIAlyZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0ID0gb2JqX3NpemU7CiAJb2JqX3NpemUgKz0gZXZlcmdyZWVuX3ZzX3NpemUgKiA0OwpAQCAtNTY3LDggKzU5OSwxNiBAQAogCQlyZXR1cm4gcjsKIAl9CiAKLQltZW1jcHkocHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCwgZXZlcmdyZWVuX3ZzLCBldmVyZ3JlZW5fdnNfc2l6ZSAqIDQpOwotCW1lbWNweShwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0LCBldmVyZ3JlZW5fcHMsIGV2ZXJncmVlbl9wc19zaXplICogNCk7CisJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCwKKwkJICAgIGV2ZXJncmVlbl9kZWZhdWx0X3N0YXRlLCByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCk7CisKKwlpZiAobnVtX3BhY2tldDJzKQorCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ICsgKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KSwKKwkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7CisJZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl92c19zaXplOyBpKyspCisJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihldmVyZ3JlZW5fdnNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBldmVyZ3JlZW5fcHNfc2l6ZTsgaSsrKQorCQkqKHUzMiAqKSgodW5zaWduZWQgbG9uZylwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0ICsgaSAqIDQpID0gY3B1X3RvX2xlMzIoZXZlcmdyZWVuX3BzW2ldKTsKIAlyYWRlb25fYm9fa3VubWFwKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIApAQCAtNjUyLDcgKzY5Miw3IEBACiAJLyogY2FsY3VsYXRlIG51bWJlciBvZiBsb29wcyBjb3JyZWN0bHkgKi8KIAlyaW5nX3NpemUgPSBudW1fbG9vcHMgKiBkd29yZHNfcGVyX2xvb3A7CiAJLyogc2V0IGRlZmF1bHQgICsgc2hhZGVycyAqLwotCXJpbmdfc2l6ZSArPSA0NjsgLyogc2hhZGVycyArIGRlZiBzdGF0ZSAqLworCXJpbmdfc2l6ZSArPSA1MjsgLyogc2hhZGVycyArIGRlZiBzdGF0ZSAqLwogCXJpbmdfc2l6ZSArPSAxMDsgLyogZmVuY2UgZW1pdCBmb3IgVkIgSUIgKi8KIAlyaW5nX3NpemUgKz0gNTsgLyogZG9uZSBjb3B5ICovCiAJcmluZ19zaXplICs9IDEwOyAvKiBmZW5jZSBlbWl0IGZvciBkb25lIGNvcHkgKi8KQEAgLTY2MCw3ICs3MDAsNyBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCXNldF9kZWZhdWx0X3N0YXRlKHJkZXYpOyAvKiAzMCAqLworCXNldF9kZWZhdWx0X3N0YXRlKHJkZXYpOyAvKiAzNiAqLwogCXNldF9zaGFkZXJzKHJkZXYpOyAvKiAxNiAqLwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9zaGFkZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X3NoYWRlcnMuYwppbmRleCBlZjFkMjhjLi4zYTEwMzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X3NoYWRlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X3NoYWRlcnMuYwpAQCAtMzExLDExICszMTEsMTkgQEAKIAkweDAwMDAwMDAwLAogCTB4M2MwMDAwMDAsCiAJMHg2Nzk2MTAwMSwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkweDAwMGEwMDAwLAorI2Vsc2UKIAkweDAwMDgwMDAwLAorI2VuZGlmCiAJMHgwMDAwMDAwMCwKIAkweDFjMDAwMDAwLAogCTB4Njc5NjEwMDAsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJMHgwMDAyMDAwOCwKKyNlbHNlCiAJMHgwMDAwMDAwOCwKKyNlbmRpZgogCTB4MDAwMDAwMDAsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCmluZGV4IDM2ZDMyZDguLmViNGFjZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCkBAIC05OCw2ICs5OCw3IEBACiAjZGVmaW5lCQlCVUZfU1dBUF8zMkJJVAkJCQkJKDIgPDwgMTYpCiAjZGVmaW5lCUNQX1JCX1JQVFIJCQkJCTB4ODcwMAogI2RlZmluZQlDUF9SQl9SUFRSX0FERFIJCQkJCTB4QzEwQworI2RlZmluZQkJUkJfUlBUUl9TV0FQKHgpCQkJCQkoKHgpIDw8IDApCiAjZGVmaW5lCUNQX1JCX1JQVFJfQUREUl9ISQkJCQkweEMxMTAKICNkZWZpbmUJQ1BfUkJfUlBUUl9XUgkJCQkJMHhDMTA4CiAjZGVmaW5lCUNQX1JCX1dQVFIJCQkJCTB4QzExNApAQCAtMjQwLDYgKzI0MSw3IEBACiAjZGVmaW5lCQlGT1JDRV9FT1ZfTUFYX0NMS19DTlQoeCkJCQkoKHgpIDw8IDApCiAjZGVmaW5lCQlGT1JDRV9FT1ZfTUFYX1JFWl9DTlQoeCkJCQkoKHgpIDw8IDE2KQogI2RlZmluZSBQQV9TQ19MSU5FX1NUSVBQTEUJCQkJMHgyOEEwQworI2RlZmluZQlQQV9TVV9MSU5FX1NUSVBQTEVfVkFMVUUJCQkweDhBNjAKICNkZWZpbmUJUEFfU0NfTElORV9TVElQUExFX1NUQVRFCQkJMHg4QjEwCiAKICNkZWZpbmUJU0NSQVRDSF9SRUcwCQkJCQkweDg1MDAKQEAgLTY1Miw2ICs2NTQsNyBAQAogI2RlZmluZQlQQUNLRVQzX0RJU1BBVENIX0RJUkVDVAkJCQkweDE1CiAjZGVmaW5lCVBBQ0tFVDNfRElTUEFUQ0hfSU5ESVJFQ1QJCQkweDE2CiAjZGVmaW5lCVBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSX0VORAkJCTB4MTcKKyNkZWZpbmUJUEFDS0VUM19NT0RFX0NPTlRST0wJCQkJMHgxOAogI2RlZmluZQlQQUNLRVQzX1NFVF9QUkVESUNBVElPTgkJCQkweDIwCiAjZGVmaW5lCVBBQ0tFVDNfUkVHX1JNVwkJCQkJMHgyMQogI2RlZmluZQlQQUNLRVQzX0NPTkRfRVhFQwkJCQkweDIyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL21rcmVndGFibGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCmluZGV4IDYwNzI0MWMuLjVhODJiNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCkBAIC02NzMsOCArNjczLDEwIEBACiAJbGFzdF9yZWcgPSBzdHJ0b2wobGFzdF9yZWdfcywgTlVMTCwgMTYpOwogCiAJZG8gewotCQlpZiAoZmdldHMoYnVmLCAxMDI0LCBmaWxlKSA9PSBOVUxMKQorCQlpZiAoZmdldHMoYnVmLCAxMDI0LCBmaWxlKSA9PSBOVUxMKSB7CisJCQlmY2xvc2UoZmlsZSk7CiAJCQlyZXR1cm4gLTE7CisJCX0KIAkJbGVuID0gc3RybGVuKGJ1Zik7CiAJCWlmIChmdGVsbChmaWxlKSA9PSBlbmQpCiAJCQlkb25lID0gMTsKQEAgLTY4NSw2ICs2ODcsNyBAQAogCQkJCWZwcmludGYoc3RkZXJyLAogCQkJCQkiRXJyb3IgbWF0Y2hpbmcgcmVndWxhciBleHByZXNzaW9uICVkIGluICVzXG4iLAogCQkJCQlyLCBmaWxlbmFtZSk7CisJCQkJZmNsb3NlKGZpbGUpOwogCQkJCXJldHVybiAtMTsKIAkJCX0gZWxzZSB7CiAJCQkJYnVmW21hdGNoWzBdLnJtX2VvXSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCmluZGV4IDQ2ZGE1MTQyLi45M2ZhNzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwpAQCAtMTAzMSw4ICsxMDMxLDggQEAKIAlXUkVHMzIoUkFERU9OX0NQX0NTUV9NT0RFLAogCSAgICAgICBSRUdfU0VUKFJBREVPTl9JTkRJUkVDVDJfU1RBUlQsIGluZGlyZWN0Ml9zdGFydCkgfAogCSAgICAgICBSRUdfU0VUKFJBREVPTl9JTkRJUkVDVDFfU1RBUlQsIGluZGlyZWN0MV9zdGFydCkpOwotCVdSRUczMigweDcxOCwgMCk7Ci0JV1JFRzMyKDB4NzQ0LCAweDAwMDA0RDREKTsKKwlXUkVHMzIoUkFERU9OX0NQX1JCX1dQVFJfREVMQVksIDApOworCVdSRUczMihSQURFT05fQ1BfQ1NRX01PREUsIDB4MDAwMDRENEQpOwogCVdSRUczMihSQURFT05fQ1BfQ1NRX0NOVEwsIFJBREVPTl9DU1FfUFJJQk1fSU5EQk0pOwogCXJhZGVvbl9yaW5nX3N0YXJ0KHJkZXYpOwogCXIgPSByYWRlb25fcmluZ190ZXN0KHJkZXYpOwpAQCAtMTQyNyw2ICsxNDI3LDcgQEAKIAkJfQogCQl0cmFjay0+emIucm9iaiA9IHJlbG9jLT5yb2JqOwogCQl0cmFjay0+emIub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfQ09MT1JPRkZTRVQ6CkBAIC0xNDM5LDYgKzE0NDAsNyBAQAogCQl9CiAJCXRyYWNrLT5jYlswXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhPRkZTRVRfMDoKQEAgLTE0NTQsNiArMTQ1Niw3IEBACiAJCX0KIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbaV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QwXzA6CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QwXzE6CkBAIC0xNDcxLDYgKzE0NzQsNyBAQAogCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMV8wOgogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMV8xOgpAQCAtMTQ4OCw2ICsxNDkyLDcgQEAKIAkJdHJhY2stPnRleHR1cmVzWzFdLmN1YmVfaW5mb1tpXS5vZmZzZXQgPSBpZHhfdmFsdWU7CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzWzFdLmN1YmVfaW5mb1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMDoKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMToKQEAgLTE1MDUsOSArMTUxMCwxMiBAQAogCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JFX1dJRFRIX0hFSUdIVDoKIAkJdHJhY2stPm1heHkgPSAoKGlkeF92YWx1ZSA+PiAxNikgJiAweDdGRik7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfQ09MT1JQSVRDSDoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTE1MjgsOSArMTUzNiwxMSBAQAogCQlpYltpZHhdID0gdG1wOwogCiAJCXRyYWNrLT5jYlswXS5waXRjaCA9IGlkeF92YWx1ZSAmIFJBREVPTl9DT0xPUlBJVENIX01BU0s7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfREVQVEhQSVRDSDoKIAkJdHJhY2stPnpiLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DTlRMOgogCQlzd2l0Y2ggKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpIHsKQEAgLTE1NTUsNiArMTU2NSw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQl0cmFjay0+el9lbmFibGVkID0gISEoaWR4X3ZhbHVlICYgUkFERU9OX1pfRU5BQkxFKTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9aU1RFTkNJTENOVEw6CiAJCXN3aXRjaCAoaWR4X3ZhbHVlICYgMHhmKSB7CkBAIC0xNTcyLDYgKzE1ODQsNyBAQAogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9aUEFTU19BRERSOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTU4OCw2ICsxNjAxLDcgQEAKIAkJCXVpbnQzMl90IHRlbXAgPSBpZHhfdmFsdWUgPj4gNDsKIAkJCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX3RleHR1cmU7IGkrKykKIAkJCQl0cmFjay0+dGV4dHVyZXNbaV0uZW5hYmxlZCA9ICEhKHRlbXAgJiAoMSA8PCBpKSk7CisJCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJBREVPTl9TRV9WRl9DTlRMOgpAQCAtMTYwMiwxMiArMTYxNiwxNCBAQAogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9URVhfU0laRV8wKSAvIDg7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9URVhfUElUQ0hfMDoKIAljYXNlIFJBREVPTl9QUF9URVhfUElUQ0hfMToKIAljYXNlIFJBREVPTl9QUF9URVhfUElUQ0hfMjoKIAkJaSA9IChyZWcgLSBSQURFT05fUFBfVEVYX1BJVENIXzApIC8gODsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gaWR4X3ZhbHVlICsgMzI7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9UWEZJTFRFUl8wOgogCWNhc2UgUkFERU9OX1BQX1RYRklMVEVSXzE6CkBAIC0xNjIxLDYgKzE2MzcsNyBAQAogCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDI3KSAmIDB4NzsKIAkJaWYgKHRtcCA9PSAyIHx8IHRtcCA9PSA2KQogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfaCA9IGZhbHNlOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhGT1JNQVRfMDoKIAljYXNlIFJBREVPTl9QUF9UWEZPUk1BVF8xOgpAQCAtMTY3Myw2ICsxNjkwLDcgQEAKIAkJfQogCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAxNikgJiAweGYpOwogCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMjApICYgMHhmKTsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzA6CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfRkFDRVNfMToKQEAgLTE2ODMsNiArMTcwMSw3IEBACiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2VdLndpZHRoID0gMSA8PCAoKHRtcCA+PiAoZmFjZSAqIDgpKSAmIDB4Zik7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2VdLmhlaWdodCA9IDEgPDwgKCh0bXAgPj4gKChmYWNlICogOCkgKyA0KSkgJiAweGYpOwogCQl9CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIkZvcmJpZGRlbiByZWdpc3RlciAweCUwNFggaW4gY3MgYXQgJWRcbiIsCkBAIC0yMzQ3LDEwICsyMzY2LDEwIEBACiAKIAl0ZW1wID0gUlJFRzMyKFJBREVPTl9DT05GSUdfQ05UTCk7CiAJaWYgKHN0YXRlID09IGZhbHNlKSB7Ci0JCXRlbXAgJj0gfigxPDw4KTsKLQkJdGVtcCB8PSAoMTw8OSk7CisJCXRlbXAgJj0gflJBREVPTl9DRkdfVkdBX1JBTV9FTjsKKwkJdGVtcCB8PSBSQURFT05fQ0ZHX1ZHQV9JT19ESVM7CiAJfSBlbHNlIHsKLQkJdGVtcCAmPSB+KDE8PDkpOworCQl0ZW1wICY9IH5SQURFT05fQ0ZHX1ZHQV9JT19ESVM7CiAJfQogCVdSRUczMihSQURFT05fQ09ORklHX0NOVEwsIHRlbXApOwogfQpAQCAtMzMxOCw5ICszMzM3LDkgQEAKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdW5zaWduZWQgcHJpbV93YWxrOwogCXVuc2lnbmVkIG52ZXJ0czsKLQl1bnNpZ25lZCBudW1fY2IgPSB0cmFjay0+bnVtX2NiOworCXVuc2lnbmVkIG51bV9jYiA9IHRyYWNrLT5jYl9kaXJ0eSA/IHRyYWNrLT5udW1fY2IgOiAwOwogCi0JaWYgKCF0cmFjay0+emJfY2JfY2xlYXIgJiYgIXRyYWNrLT5jb2xvcl9jaGFubmVsX21hc2sgJiYKKwlpZiAobnVtX2NiICYmICF0cmFjay0+emJfY2JfY2xlYXIgJiYgIXRyYWNrLT5jb2xvcl9jaGFubmVsX21hc2sgJiYKIAkgICAgIXRyYWNrLT5ibGVuZF9yZWFkX2VuYWJsZSkKIAkJbnVtX2NiID0gMDsKIApAQCAtMzM0MSw3ICszMzYwLDkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQotCWlmICh0cmFjay0+el9lbmFibGVkKSB7CisJdHJhY2stPmNiX2RpcnR5ID0gZmFsc2U7CisKKwlpZiAodHJhY2stPnpiX2RpcnR5ICYmIHRyYWNrLT56X2VuYWJsZWQpIHsKIAkJaWYgKHRyYWNrLT56Yi5yb2JqID09IE5VTEwpIHsKIAkJCURSTV9FUlJPUigiW2RybV0gTm8gYnVmZmVyIGZvciB6IGJ1ZmZlciAhXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMzM1OCw2ICszMzc5LDI4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KKwl0cmFjay0+emJfZGlydHkgPSBmYWxzZTsKKworCWlmICh0cmFjay0+YWFfZGlydHkgJiYgdHJhY2stPmFhcmVzb2x2ZSkgeworCQlpZiAodHJhY2stPmFhLnJvYmogPT0gTlVMTCkgeworCQkJRFJNX0VSUk9SKCJbZHJtXSBObyBidWZmZXIgZm9yIEFBIHJlc29sdmUgYnVmZmVyICVkICFcbiIsIGkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyogSSBiZWxpZXZlIHRoZSBmb3JtYXQgY29tZXMgZnJvbSBjb2xvcmJ1ZmZlcjAuICovCisJCXNpemUgPSB0cmFjay0+YWEucGl0Y2ggKiB0cmFjay0+Y2JbMF0uY3BwICogdHJhY2stPm1heHk7CisJCXNpemUgKz0gdHJhY2stPmFhLm9mZnNldDsKKwkJaWYgKHNpemUgPiByYWRlb25fYm9fc2l6ZSh0cmFjay0+YWEucm9iaikpIHsKKwkJCURSTV9FUlJPUigiW2RybV0gQnVmZmVyIHRvbyBzbWFsbCBmb3IgQUEgcmVzb2x2ZSBidWZmZXIgJWQgIgorCQkJCSAgIihuZWVkICVsdSBoYXZlICVsdSkgIVxuIiwgaSwgc2l6ZSwKKwkJCQkgIHJhZGVvbl9ib19zaXplKHRyYWNrLT5hYS5yb2JqKSk7CisJCQlEUk1fRVJST1IoIltkcm1dIEFBIHJlc29sdmUgYnVmZmVyICVkICgldSAldSAldSAldSlcbiIsCisJCQkJICBpLCB0cmFjay0+YWEucGl0Y2gsIHRyYWNrLT5jYlswXS5jcHAsCisJCQkJICB0cmFjay0+YWEub2Zmc2V0LCB0cmFjay0+bWF4eSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwl0cmFjay0+YWFfZGlydHkgPSBmYWxzZTsKKwogCXByaW1fd2FsayA9ICh0cmFjay0+dmFwX3ZmX2NudGwgPj4gNCkgJiAweDM7CiAJaWYgKHRyYWNrLT52YXBfdmZfY250bCAmICgxIDw8IDE0KSkgewogCQludmVydHMgPSB0cmFjay0+dmFwX2FsdF9udmVydHM7CkBAIC0zNDE3LDEzICszNDYwLDIzIEBACiAJCQkgIHByaW1fd2Fsayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZXR1cm4gcjEwMF9jc190cmFja190ZXh0dXJlX2NoZWNrKHJkZXYsIHRyYWNrKTsKKworCWlmICh0cmFjay0+dGV4X2RpcnR5KSB7CisJCXRyYWNrLT50ZXhfZGlydHkgPSBmYWxzZTsKKwkJcmV0dXJuIHIxMDBfY3NfdHJhY2tfdGV4dHVyZV9jaGVjayhyZGV2LCB0cmFjayk7CisJfQorCXJldHVybiAwOwogfQogCiB2b2lkIHIxMDBfY3NfdHJhY2tfY2xlYXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjaykKIHsKIAl1bnNpZ25lZCBpLCBmYWNlOwogCisJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKKwl0cmFjay0+emJfZGlydHkgPSB0cnVlOworCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOworCXRyYWNrLT5hYV9kaXJ0eSA9IHRydWU7CisKIAlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9SMzAwKSB7CiAJCXRyYWNrLT5udW1fY2IgPSAxOwogCQlpZiAocmRldi0+ZmFtaWx5IDw9IENISVBfUlMyMDApCkBAIC0zNDM3LDYgKzM0OTAsOCBAQAogCQl0cmFjay0+bnVtX3RleHR1cmUgPSAxNjsKIAkJdHJhY2stPm1heHkgPSA0MDk2OwogCQl0cmFjay0+c2VwYXJhdGVfY3ViZSA9IDA7CisJCXRyYWNrLT5hYXJlc29sdmUgPSBmYWxzZTsKKwkJdHJhY2stPmFhLnJvYmogPSBOVUxMOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX2NiOyBpKyspIHsKQEAgLTM1MjIsNyArMzU3Nyw3IEBACiAJaWYgKGkgPCByZGV2LT51c2VjX3RpbWVvdXQpIHsKIAkJRFJNX0lORk8oInJpbmcgdGVzdCBzdWNjZWVkZWQgaW4gJWQgdXNlY3NcbiIsIGkpOwogCX0gZWxzZSB7Ci0JCURSTV9FUlJPUigicmFkZW9uOiByaW5nIHRlc3QgZmFpbGVkIChzcmFjdGgoMHglMDRYKT0weCUwOFgpXG4iLAorCQlEUk1fRVJST1IoInJhZGVvbjogcmluZyB0ZXN0IGZhaWxlZCAoc2NyYXRjaCgweCUwNFgpPTB4JTA4WClcbiIsCiAJCQkgIHNjcmF0Y2gsIHRtcCk7CiAJCXIgPSAtRUlOVkFMOwogCX0KQEAgLTM3NDYsOCArMzgwMSw2IEBACiAJcjEwMF9tY19wcm9ncmFtKHJkZXYpOwogCS8qIFJlc3VtZSBjbG9jayAqLwogCXIxMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKLQkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCi0vLwlyMTAwX2dwdV9pbml0KHJkZXYpOwogCS8qIEluaXRpYWxpemUgR0FSVCAoaW5pdGlhbGl6ZSBhZnRlciBUVE0gc28gd2UgY2FuIGFsbG9jYXRlCiAJICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCiAJcjEwMF9lbmFibGVfYm0ocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBfdHJhY2suaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oCmluZGV4IGFmNjU2MDAuLjJmZWY5ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oCkBAIC01MiwxNCArNTIsNyBAQAogCXVuc2lnbmVkICAgICAgICAgICAgICAgIGNvbXByZXNzX2Zvcm1hdDsKIH07CiAKLXN0cnVjdCByMTAwX2NzX3RyYWNrX2xpbWl0cyB7Ci0JdW5zaWduZWQgbnVtX2NiOwotCXVuc2lnbmVkIG51bV90ZXh0dXJlOwotCXVuc2lnbmVkIG1heF9sZXZlbHM7Ci19OwotCiBzdHJ1Y3QgcjEwMF9jc190cmFjayB7Ci0Jc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXY7CiAJdW5zaWduZWQJCQludW1fY2I7CiAJdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICBudW1fdGV4dHVyZTsKIAl1bnNpZ25lZAkJCW1heHk7CkBAIC03MywxMSArNjYsMTcgQEAKIAlzdHJ1Y3QgcjEwMF9jc190cmFja19hcnJheQlhcnJheXNbMTFdOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrX2NiIAljYltSMzAwX01BWF9DQl07CiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfY2IgCXpiOworCXN0cnVjdCByMTAwX2NzX3RyYWNrX2NiIAlhYTsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja190ZXh0dXJlCXRleHR1cmVzW1IzMDBfVFJBQ0tfTUFYX1RFWFRVUkVdOwogCWJvb2wJCQkJel9lbmFibGVkOwogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVfY3ViZTsKIAlib29sCQkJCXpiX2NiX2NsZWFyOwogCWJvb2wJCQkJYmxlbmRfcmVhZF9lbmFibGU7CisJYm9vbAkJCQljYl9kaXJ0eTsKKwlib29sCQkJCXpiX2RpcnR5OworCWJvb2wJCQkJdGV4X2RpcnR5OworCWJvb2wJCQkJYWFfZGlydHk7CisJYm9vbAkJCQlhYXJlc29sdmU7CiB9OwogCiBpbnQgcjEwMF9jc190cmFja19jaGVjayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMjAwLmMKaW5kZXggZDI0MDhjMy4uZjI0MDU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMjAwLmMKQEAgLTE4NCw2ICsxODQsNyBAQAogCQl9CiAJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCXRyYWNrLT56Yi5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUk9GRlNFVDoKQEAgLTE5Niw2ICsxOTcsNyBAQAogCQl9CiAJCXRyYWNrLT5jYlswXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzA6CkBAIC0yMTQsNiArMjE2LDcgQEAKIAkJfQogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzA6CiAJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMl8wOgpAQCAtMjU3LDkgKzI2MCwxMiBAQAogCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2UgLSAxXS5vZmZzZXQgPSBpZHhfdmFsdWU7CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlIC0gMV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkVfV0lEVEhfSEVJR0hUOgogCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4N0ZGKTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMjgwLDkgKzI4NiwxMSBAQAogCQlpYltpZHhdID0gdG1wOwogCiAJCXRyYWNrLT5jYlswXS5waXRjaCA9IGlkeF92YWx1ZSAmIFJBREVPTl9DT0xPUlBJVENIX01BU0s7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfREVQVEhQSVRDSDoKIAkJdHJhY2stPnpiLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DTlRMOgogCQlzd2l0Y2ggKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpIHsKQEAgLTMxMiw2ICszMjAsOCBAQAogCQl9CiAKIAkJdHJhY2stPnpfZW5hYmxlZCA9ICEhKGlkeF92YWx1ZSAmIFJBREVPTl9aX0VOQUJMRSk7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfWlNURU5DSUxDTlRMOgogCQlzd2l0Y2ggKGlkeF92YWx1ZSAmIDB4ZikgewpAQCAtMzI5LDYgKzMzOSw3IEBACiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQorCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX1pQQVNTX0FERFI6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC0zNDUsNiArMzU2LDcgQEAKIAkJCXVpbnQzMl90IHRlbXAgPSBpZHhfdmFsdWUgPj4gNDsKIAkJCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX3RleHR1cmU7IGkrKykKIAkJCQl0cmFjay0+dGV4dHVyZXNbaV0uZW5hYmxlZCA9ICEhKHRlbXAgJiAoMSA8PCBpKSk7CisJCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJBREVPTl9TRV9WRl9DTlRMOgpAQCAtMzY5LDYgKzM4MSw3IEBACiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWFNJWkVfMCkgLyAzMjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gKGlkeF92YWx1ZSAmIFJBREVPTl9URVhfVVNJWkVfTUFTSykgKyAxOwogCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gKChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1ZTSVpFX01BU0spID4+IFJBREVPTl9URVhfVlNJWkVfU0hJRlQpICsgMTsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWFBJVENIXzA6CiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfMToKQEAgLTM3OCw2ICszOTEsNyBAQAogCWNhc2UgUjIwMF9QUF9UWFBJVENIXzU6CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWFBJVENIXzApIC8gMzI7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5waXRjaCA9IGlkeF92YWx1ZSArIDMyOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYRklMVEVSXzA6CiAJY2FzZSBSMjAwX1BQX1RYRklMVEVSXzE6CkBAIC0zOTQsNiArNDA4LDcgQEAKIAkJdG1wID0gKGlkeF92YWx1ZSA+PiAyNykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWE1VTFRJX0NUTF8wOgogCWNhc2UgUjIwMF9QUF9UWE1VTFRJX0NUTF8xOgpAQCAtNDMyLDYgKzQ0Nyw3IEBACiAJCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSAxOwogCQkJYnJlYWs7CiAJCX0KKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF8wOgogCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF8xOgpAQCAtNDg4LDYgKzUwNCw3IEBACiAJCX0KIAkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMTYpICYgMHhmKTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS5oZWlnaHQgPSAxIDw8ICgoaWR4X3ZhbHVlID4+IDIwKSAmIDB4Zik7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMDoKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMToKQEAgLTUwMSw2ICs1MTgsNyBAQAogCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS53aWR0aCA9IDEgPDwgKCh0bXAgPj4gKGZhY2UgKiA4KSkgJiAweGYpOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS5oZWlnaHQgPSAxIDw8ICgodG1wID4+ICgoZmFjZSAqIDgpICsgNCkpICYgMHhmKTsKIAkJfQorCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJGb3JiaWRkZW4gcmVnaXN0ZXIgMHglMDRYIGluIGNzIGF0ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwppbmRleCBjZjg2MmNhLi4wNjllZmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwpAQCAtNjksNiArNjksOSBAQAogCW1iKCk7CiB9CiAKKyNkZWZpbmUgUjMwMF9QVEVfV1JJVEVBQkxFICgxIDw8IDIpCisjZGVmaW5lIFIzMDBfUFRFX1JFQURBQkxFICAoMSA8PCAzKQorCiBpbnQgcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcikKIHsKIAl2b2lkIF9faW9tZW0gKnB0ciA9ICh2b2lkICopcmRldi0+Z2FydC50YWJsZS52cmFtLnB0cjsKQEAgLTc4LDcgKzgxLDcgQEAKIAl9CiAJYWRkciA9IChsb3dlcl8zMl9iaXRzKGFkZHIpID4+IDgpIHwKIAkgICAgICAgKCh1cHBlcl8zMl9iaXRzKGFkZHIpICYgMHhmZikgPDwgMjQpIHwKLQkgICAgICAgMHhjOworCSAgICAgICBSMzAwX1BURV9XUklURUFCTEUgfCBSMzAwX1BURV9SRUFEQUJMRTsKIAkvKiBvbiB4ODYgd2Ugd2FudCB0aGlzIHRvIGJlIENQVSBlbmRpYW4sIG9uIHBvd2VycGMKIAkgKiBvbiBwb3dlcnBjIHdpdGhvdXQgSFcgc3dhcHBlcnMsIGl0J2xsIGdldCBzd2FwcGVkIG9uIHdheQogCSAqIGludG8gVlJBTSAtIHNvIG5vIG5lZWQgZm9yIGNwdV90b19sZTMyIG9uIFZSQU0gdGFibGVzICovCkBAIC0xMzUsNyArMTM4LDcgQEAKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9ESVNDQVJEX1JEX0FERFJfTE8sIHJkZXYtPm1jLnZyYW1fc3RhcnQpOwogCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0RJU0NBUkRfUkRfQUREUl9ISSwgMCk7CiAJLyogQ2xlYXIgZXJyb3IgKi8KLQlXUkVHMzJfUENJRSgweDE4LCAwKTsKKwlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VSUk9SLCAwKTsKIAl0bXAgPSBSUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0NOVEwpOwogCXRtcCB8PSBSQURFT05fUENJRV9UWF9HQVJUX0VOOwogCXRtcCB8PSBSQURFT05fUENJRV9UWF9HQVJUX1VOTUFQUEVEX0FDQ0VTU19ESVNDQVJEOwpAQCAtNjY0LDYgKzY2Nyw3IEBACiAJCX0KIAkJdHJhY2stPmNiW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJdHJhY2stPmNiW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFIzMDBfWkJfREVQVEhPRkZTRVQ6CkBAIC02NzYsNiArNjgwLDcgQEAKIAkJfQogCQl0cmFjay0+emIucm9iaiA9IHJlbG9jLT5yb2JqOwogCQl0cmFjay0+emIub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgUjMwMF9UWF9PRkZTRVRfMDoKQEAgLTcxNCw2ICs3MTksNyBAQAogCQl0bXAgfD0gdGlsZV9mbGFnczsKIAkJaWJbaWR4XSA9IHRtcDsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCS8qIFRyYWNrZWQgcmVnaXN0ZXJzICovCiAJY2FzZSAweDIwODQ6CkBAIC03NDAsNiArNzQ2LDggQEAKIAkJaWYgKHAtPnJkZXYtPmZhbWlseSA8IENISVBfUlY1MTUpIHsKIAkJCXRyYWNrLT5tYXh5IC09IDE0NDA7CiAJCX0KKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDRFMDA6CiAJCS8qIFJCM0RfQ0NUTCAqLwpAQCAtNzQ5LDYgKzc1Nyw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQl0cmFjay0+bnVtX2NiID0gKChpZHhfdmFsdWUgPj4gNSkgJiAweDMpICsgMTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDRFMzg6CiAJY2FzZSAweDRFM0M6CkBAIC04MTEsNiArODIwLDcgQEAKIAkJCQkgICgoaWR4X3ZhbHVlID4+IDIxKSAmIDB4RikpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDRGMDA6CiAJCS8qIFpCX0NOVEwgKi8KQEAgLTgxOSw2ICs4MjksNyBAQAogCQl9IGVsc2UgewogCQkJdHJhY2stPnpfZW5hYmxlZCA9IGZhbHNlOwogCQl9CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0RjEwOgogCQkvKiBaQl9GT1JNQVQgKi8KQEAgLTgzNSw2ICs4NDYsNyBAQAogCQkJCSAgKGlkeF92YWx1ZSAmIDB4RikpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDRGMjQ6CiAJCS8qIFpCX0RFUFRIUElUQ0ggKi8KQEAgLTg1OCwxNCArODcwLDE3IEBACiAJCWliW2lkeF0gPSB0bXA7CiAKIAkJdHJhY2stPnpiLnBpdGNoID0gaWR4X3ZhbHVlICYgMHgzRkZDOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NDEwNDoKKwkJLyogVFhfRU5BQkxFICovCiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCQlib29sIGVuYWJsZWQ7CiAKIAkJCWVuYWJsZWQgPSAhIShpZHhfdmFsdWUgJiAoMSA8PCBpKSk7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uZW5hYmxlZCA9IGVuYWJsZWQ7CiAJCX0KKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0NEMwOgogCWNhc2UgMHg0NEM0OgpAQCAtODk1LDYgKzkxMCw3IEBACiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY29tcHJlc3NfZm9ybWF0ID0gUjEwMF9UUkFDS19DT01QX05PTkU7CiAJCQlicmVhazsKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9YMTY6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRkxfSTE2OgogCQljYXNlIFIzMDBfVFhfRk9STUFUX1k4WDg6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWjVZNlg1OgogCQljYXNlIFIzMDBfVFhfRk9STUFUX1o2WTVYNToKQEAgLTkwNyw2ICs5MjMsNyBAQAogCQkJdHJhY2stPnRleHR1cmVzW2ldLmNvbXByZXNzX2Zvcm1hdCA9IFIxMDBfVFJBQ0tfQ09NUF9OT05FOwogCQkJYnJlYWs7CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWTE2WDE2OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX0ZMX0kxNkExNjoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9aMTFZMTFYMTA6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWjEwWTExWDExOgogCQljYXNlIFIzMDBfVFhfRk9STUFUX1c4WjhZOFg4OgpAQCAtOTQ4LDggKzk2NSw4IEBACiAJCQlEUk1fRVJST1IoIkludmFsaWQgdGV4dHVyZSBmb3JtYXQgJXVcbiIsCiAJCQkJICAoaWR4X3ZhbHVlICYgMHgxRikpOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKIAkJfQorCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDQ0MDA6CiAJY2FzZSAweDQ0MDQ6CkBAIC05NzcsNiArOTk0LDcgQEAKIAkJaWYgKHRtcCA9PSAyIHx8IHRtcCA9PSA0IHx8IHRtcCA9PSA2KSB7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF9oID0gZmFsc2U7CiAJCX0KKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0NTAwOgogCWNhc2UgMHg0NTA0OgpAQCAtMTAxNCw2ICsxMDMyLDcgQEAKIAkJCURSTV9FUlJPUigiRm9yYmlkZGVuIGJpdCBUWEZPUk1BVF9NU0JcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0NDgwOgogCWNhc2UgMHg0NDg0OgpAQCAtMTA0Myw2ICsxMDYyLDcgQEAKIAkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9ICEhdG1wOwogCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDIyKSAmIDB4RjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnR4ZGVwdGggPSB0bXA7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFIzMDBfWkJfWlBBU1NfQUREUjoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTEwNTcsNiArMTA3Nyw3IEBACiAJY2FzZSAweDRlMGM6CiAJCS8qIFJCM0RfQ09MT1JfQ0hBTk5FTF9NQVNLICovCiAJCXRyYWNrLT5jb2xvcl9jaGFubmVsX21hc2sgPSBpZHhfdmFsdWU7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0M2E0OgogCQkvKiBTQ19IWVBFUlpfRU4gKi8KQEAgLTEwNzAsNiArMTA5MSw4IEBACiAJY2FzZSAweDRmMWM6CiAJCS8qIFpCX0JXX0NOVEwgKi8KIAkJdHJhY2stPnpiX2NiX2NsZWFyID0gISEoaWR4X3ZhbHVlICYgKDEgPDwgNSkpOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlpZiAocC0+cmRldi0+aHlwZXJ6X2ZpbHAgIT0gcC0+ZmlscCkgewogCQkJaWYgKGlkeF92YWx1ZSAmIChSMzAwX0hJWl9FTkFCTEUgfAogCQkJCQkgUjMwMF9SRF9DT01QX0VOQUJMRSB8CkBAIC0xMDgxLDggKzExMDQsMjggQEAKIAljYXNlIDB4NGUwNDoKIAkJLyogUkIzRF9CTEVORENOVEwgKi8KIAkJdHJhY2stPmJsZW5kX3JlYWRfZW5hYmxlID0gISEoaWR4X3ZhbHVlICYgKDEgPDwgMikpOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOwogCQlicmVhazsKLQljYXNlIDB4NGYyODogLyogWkJfREVQVEhDTEVBUlZBTFVFICovCisJY2FzZSBSMzAwX1JCM0RfQUFSRVNPTFZFX09GRlNFVDoKKwkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCisJCQkJICBpZHgsIHJlZyk7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQl0cmFjay0+YWEucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+YWEub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQl0cmFjay0+YWFfZGlydHkgPSB0cnVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWJyZWFrOworCWNhc2UgUjMwMF9SQjNEX0FBUkVTT0xWRV9QSVRDSDoKKwkJdHJhY2stPmFhLnBpdGNoID0gaWR4X3ZhbHVlICYgMHgzRkZFOworCQl0cmFjay0+YWFfZGlydHkgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFIzMDBfUkIzRF9BQVJFU09MVkVfQ1RMOgorCQl0cmFjay0+YWFyZXNvbHZlID0gaWR4X3ZhbHVlICYgMHgxOworCQl0cmFjay0+YWFfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NGYzMDogLyogWkJfTUFTS19PRkZTRVQgKi8KIAljYXNlIDB4NGYzNDogLyogWkJfWk1BU0tfUElUQ0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAppbmRleCAxYTBkNTM2Li5mMGJjZTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCkBAIC0xMzcxLDYgKzEzNzEsOCBAQAogI2RlZmluZSBSMzAwX1JCM0RfQ09MT1JQSVRDSDIgICAgICAgICAgICAgICAweDRFNDAgLyogR1VFU1MgKi8KICNkZWZpbmUgUjMwMF9SQjNEX0NPTE9SUElUQ0gzICAgICAgICAgICAgICAgMHg0RTQ0IC8qIEdVRVNTICovCiAKKyNkZWZpbmUgUjMwMF9SQjNEX0FBUkVTT0xWRV9PRkZTRVQgICAgICAgICAgMHg0RTgwCisjZGVmaW5lIFIzMDBfUkIzRF9BQVJFU09MVkVfUElUQ0ggICAgICAgICAgIDB4NEU4NAogI2RlZmluZSBSMzAwX1JCM0RfQUFSRVNPTFZFX0NUTCAgICAgICAgICAgICAweDRFODgKIC8qIGdhcCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCmluZGV4IGMzODczNDYuLjBiNTllZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCkBAIC05Niw3ICs5Niw3IEBACiAJCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7CiAJfQogCS8qIGdldCBtYXggbnVtYmVyIG9mIHBpcGVzICovCi0JZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoMHg0MDJDKTsKKwlnYl9waXBlX3NlbGVjdCA9IFJSRUczMihSNDAwX0dCX1BJUEVfU0VMRUNUKTsKIAludW1fcGlwZXMgPSAoKGdiX3BpcGVfc2VsZWN0ID4+IDEyKSAmIDMpICsgMTsKIAogCS8qIFNFIGNoaXBzIGhhdmUgMSBwaXBlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCmluZGV4IDNjODY3N2YuLjJjZTgwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCkBAIC03OSw4ICs3OSw4IEBACiAJCVdSRUczMigweDQxMjgsIDB4RkYpOwogCX0KIAlyNDIwX3BpcGVzX2luaXQocmRldik7Ci0JZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoMHg0MDJDKTsKLQl0bXAgPSBSUkVHMzIoMHgxNzBDKTsKKwlnYl9waXBlX3NlbGVjdCA9IFJSRUczMihSNDAwX0dCX1BJUEVfU0VMRUNUKTsKKwl0bXAgPSBSUkVHMzIoUjMwMF9EU1RfUElQRV9DT05GSUcpOwogCXBpcGVfc2VsZWN0X2N1cnJlbnQgPSAodG1wID4+IDIpICYgMzsKIAl0bXAgPSAoMSA8PCBwaXBlX3NlbGVjdF9jdXJyZW50KSB8CiAJICAgICAgKCgoZ2JfcGlwZV9zZWxlY3QgPj4gOCkgJiAweEYpIDw8IDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCBhY2EyMjM2Li5kZTg4NjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtOTcsMTIgKzk3LDE2IEBACiBzdGF0aWMgdm9pZCByNjAwX3BjaWVfZ2VuMl9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKiBnZXQgdGVtcGVyYXR1cmUgaW4gbWlsbGlkZWdyZWVzICovCi11MzIgcnY2eHhfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitpbnQgcnY2eHhfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIHRlbXAgPSAoUlJFRzMyKENHX1RIRVJNQUxfU1RBVFVTKSAmIEFTSUNfVF9NQVNLKSA+PgogCQlBU0lDX1RfU0hJRlQ7CisJaW50IGFjdHVhbF90ZW1wID0gdGVtcCAmIDB4ZmY7CiAKLQlyZXR1cm4gdGVtcCAqIDEwMDA7CisJaWYgKHRlbXAgJiAweDEwMCkKKwkJYWN0dWFsX3RlbXAgLT0gMjU2OworCisJcmV0dXJuIGFjdHVhbF90ZW1wICogMTAwMDsKIH0KIAogdm9pZCByNjAwX3BtX2dldF9keW5wbV9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTEyODcsNiArMTI5MSw5IEBACiAJCQlTXzAwODAxNF9DQjJfQlVTWSgxKSB8IFNfMDA4MDE0X0NCM19CVVNZKDEpOwogCXUzMiB0bXA7CiAKKwlpZiAoIShSUkVHMzIoR1JCTV9TVEFUVVMpICYgR1VJX0FDVElWRSkpCisJCXJldHVybiAwOworCiAJZGV2X2luZm8ocmRldi0+ZGV2LCAiR1BVIHNvZnRyZXNldCBcbiIpOwogCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDgwMTBfR1JCTV9TVEFUVVM9MHglMDhYXG4iLAogCQlSUkVHMzIoUl8wMDgwMTBfR1JCTV9TVEFUVVMpKTsKQEAgLTIwOTgsNyArMjEwNSwxMSBAQAogCiAJcjYwMF9jcF9zdG9wKHJkZXYpOwogCi0JV1JFRzMyKENQX1JCX0NOVEwsIFJCX05PX1VQREFURSB8IFJCX0JMS1NaKDE1KSB8IFJCX0JVRlNaKDMpKTsKKwlXUkVHMzIoQ1BfUkJfQ05UTCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkgICAgICAgQlVGX1NXQVBfMzJCSVQgfAorI2VuZGlmCisJICAgICAgIFJCX05PX1VQREFURSB8IFJCX0JMS1NaKDE1KSB8IFJCX0JVRlNaKDMpKTsKIAogCS8qIFJlc2V0IGNwICovCiAJV1JFRzMyKEdSQk1fU09GVF9SRVNFVCwgU09GVF9SRVNFVF9DUCk7CkBAIC0yMTg1LDcgKzIxOTYsMTEgQEAKIAlXUkVHMzIoQ1BfUkJfV1BUUiwgMCk7CiAKIAkvKiBzZXQgdGhlIHdiIGFkZHJlc3Mgd2hldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90ICovCi0JV1JFRzMyKENQX1JCX1JQVFJfQUREUiwgKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX0NQX1JQVFJfT0ZGU0VUKSAmIDB4RkZGRkZGRkMpOworCVdSRUczMihDUF9SQl9SUFRSX0FERFIsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJICAgICAgIFJCX1JQVFJfU1dBUCgyKSB8CisjZW5kaWYKKwkgICAgICAgKChyZGV2LT53Yi5ncHVfYWRkciArIFJBREVPTl9XQl9DUF9SUFRSX09GRlNFVCkgJiAweEZGRkZGRkZDKSk7CiAJV1JFRzMyKENQX1JCX1JQVFJfQUREUl9ISSwgdXBwZXJfMzJfYml0cyhyZGV2LT53Yi5ncHVfYWRkciArIFJBREVPTl9XQl9DUF9SUFRSX09GRlNFVCkgJiAweEZGKTsKIAlXUkVHMzIoU0NSQVRDSF9BRERSLCAoKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX1NDUkFUQ0hfT0ZGU0VUKSA+PiA4KSAmIDB4RkZGRkZGRkYpOwogCkBAIC0yNjIxLDcgKzI2MzYsMTEgQEAKIHsKIAkvKiBGSVhNRTogaW1wbGVtZW50ICovCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lORElSRUNUX0JVRkZFUiwgMikpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGliLT5ncHVfYWRkciAmIDB4RkZGRkZGRkMpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQkgICgyIDw8IDApIHwKKyNlbmRpZgorCQkJICAoaWItPmdwdV9hZGRyICYgMHhGRkZGRkZGQykpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSAmIDB4RkYpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGliLT5sZW5ndGhfZHcpOwogfQpAQCAtMzI5MCw4ICszMzA5LDggQEAKIAl3aGlsZSAocnB0ciAhPSB3cHRyKSB7CiAJCS8qIHdwdHIvcnB0ciBhcmUgaW4gYnl0ZXMhICovCiAJCXJpbmdfaW5kZXggPSBycHRyIC8gNDsKLQkJc3JjX2lkID0gIHJkZXYtPmloLnJpbmdbcmluZ19pbmRleF0gJiAweGZmOwotCQlzcmNfZGF0YSA9IHJkZXYtPmloLnJpbmdbcmluZ19pbmRleCArIDFdICYgMHhmZmZmZmZmOworCQlzcmNfaWQgPSBsZTMyX3RvX2NwdShyZGV2LT5paC5yaW5nW3JpbmdfaW5kZXhdKSAmIDB4ZmY7CisJCXNyY19kYXRhID0gbGUzMl90b19jcHUocmRldi0+aWgucmluZ1tyaW5nX2luZGV4ICsgMV0pICYgMHhmZmZmZmZmOwogCiAJCXN3aXRjaCAoc3JjX2lkKSB7CiAJCWNhc2UgMTogLyogRDEgdmJsYW5rL3ZsaW5lICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYwppbmRleCBjYTVjMjlmLi43ZjEwNDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKQEAgLTEzNyw5ICsxMzcsOSBAQAogCXBzID0gKHUzMiAqKSAoKGNoYXIgKilkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgKyBkZXZfcHJpdi0+YmxpdF92Yi0+b2Zmc2V0ICsgMjU2KTsKIAogCWZvciAoaSA9IDA7IGkgPCByNnh4X3ZzX3NpemU7IGkrKykKLQkJdnNbaV0gPSByNnh4X3ZzW2ldOworCQl2c1tpXSA9IGNwdV90b19sZTMyKHI2eHhfdnNbaV0pOwogCWZvciAoaSA9IDA7IGkgPCByNnh4X3BzX3NpemU7IGkrKykKLQkJcHNbaV0gPSByNnh4X3BzW2ldOworCQlwc1tpXSA9IGNwdV90b19sZTMyKHI2eHhfcHNbaV0pOwogCiAJZGV2X3ByaXYtPmJsaXRfdmItPnVzZWQgPSA1MTI7CiAKQEAgLTE5Miw2ICsxOTIsOSBAQAogCURSTV9ERUJVRygiXG4iKTsKIAogCXNxX3Z0eF9jb25zdGFudF93b3JkMiA9ICgoKGdwdV9hZGRyID4+IDMyKSAmIDB4ZmYpIHwgKDE2IDw8IDgpKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwlzcV92dHhfY29uc3RhbnRfd29yZDIgfD0gKDIgPDwgMzApOworI2VuZGlmCiAKIAlCRUdJTl9SSU5HKDkpOwogCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfUkVTT1VSQ0UsIDcpKTsKQEAgLTI5MSw3ICsyOTQsMTEgQEAKIAlPVVRfUklORyhESV9QVF9SRUNUTElTVCk7CiAKIAlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfSU5ERVhfVFlQRSwgMCkpOworI2lmZGVmIF9fQklHX0VORElBTgorCU9VVF9SSU5HKCgyIDw8IDIpIHwgRElfSU5ERVhfU0laRV8xNl9CSVQpOworI2Vsc2UKIAlPVVRfUklORyhESV9JTkRFWF9TSVpFXzE2X0JJVCk7CisjZW5kaWYKIAogCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9OVU1fSU5TVEFOQ0VTLCAwKSk7CiAJT1VUX1JJTkcoMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jCmluZGV4IDg2ZTVhYTAuLjQxZjdhYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jCkBAIC01NCw3ICs1NCw3IEBACiAJaWYgKGggPCA4KQogCQloID0gODsKIAotCWNiX2NvbG9yX2luZm8gPSAoKGZvcm1hdCA8PCAyKSB8ICgxIDw8IDI3KSk7CisJY2JfY29sb3JfaW5mbyA9ICgoZm9ybWF0IDw8IDIpIHwgKDEgPDwgMjcpIHwgKDEgPDwgOCkpOwogCXBpdGNoID0gKHcgLyA4KSAtIDE7CiAJc2xpY2UgPSAoKHcgKiBoKSAvIDY0KSAtIDE7CiAKQEAgLTE2NSw2ICsxNjUsOSBAQAogCXUzMiBzcV92dHhfY29uc3RhbnRfd29yZDI7CiAKIAlzcV92dHhfY29uc3RhbnRfd29yZDIgPSAoKHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpICYgMHhmZikgfCAoMTYgPDwgOCkpOworI2lmZGVmIF9fQklHX0VORElBTgorCXNxX3Z0eF9jb25zdGFudF93b3JkMiB8PSAoMiA8PCAzMCk7CisjZW5kaWYKIAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfUkVTT1VSQ0UsIDcpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDQ2MCk7CkBAIC0xOTksNyArMjAyLDcgQEAKIAlpZiAoaCA8IDEpCiAJCWggPSAxOwogCi0Jc3FfdGV4X3Jlc291cmNlX3dvcmQwID0gKDEgPDwgMCk7CisJc3FfdGV4X3Jlc291cmNlX3dvcmQwID0gKDEgPDwgMCkgfCAoMSA8PCAzKTsKIAlzcV90ZXhfcmVzb3VyY2Vfd29yZDAgfD0gKCgoKHBpdGNoID4+IDMpIC0gMSkgPDwgOCkgfAogCQkJCSAgKCh3IC0gMSkgPDwgMTkpKTsKIApAQCAtMjUzLDcgKzI1NiwxMSBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIERJX1BUX1JFQ1RMSVNUKTsKIAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19JTkRFWF9UWVBFLCAwKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgRElfSU5ERVhfU0laRV8xNl9CSVQpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQkgICgyIDw8IDIpIHwKKyNlbmRpZgorCQkJICBESV9JTkRFWF9TSVpFXzE2X0JJVCk7CiAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfTlVNX0lOU1RBTkNFUywgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDEpOwpAQCAtNDI0LDcgKzQzMSwxMSBAQAogCWR3b3JkcyA9IEFMSUdOKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4sIDB4MTApOwogCWdwdV9hZGRyID0gcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9ncHVfYWRkciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQ7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lORElSRUNUX0JVRkZFUiwgMikpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGdwdV9hZGRyICYgMHhGRkZGRkZGQyk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCSAgKDIgPDwgMCkgfAorI2VuZGlmCisJCQkgIChncHVfYWRkciAmIDB4RkZGRkZGRkMpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCB1cHBlcl8zMl9iaXRzKGdwdV9hZGRyKSAmIDB4RkYpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGR3b3Jkcyk7CiAKQEAgLTQ2Nyw3ICs0NzgsNyBAQAogaW50IHI2MDBfYmxpdF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiBvYmpfc2l6ZTsKLQlpbnQgciwgZHdvcmRzOworCWludCBpLCByLCBkd29yZHM7CiAJdm9pZCAqcHRyOwogCXUzMiBwYWNrZXQyc1sxNl07CiAJaW50IG51bV9wYWNrZXQycyA9IDA7CkBAIC00ODYsNyArNDk3LDcgQEAKIAogCWR3b3JkcyA9IHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW47CiAJd2hpbGUgKGR3b3JkcyAmIDB4ZikgewotCQlwYWNrZXQyc1tudW1fcGFja2V0MnMrK10gPSBQQUNLRVQyKDApOworCQlwYWNrZXQyc1tudW1fcGFja2V0MnMrK10gPSBjcHVfdG9fbGUzMihQQUNLRVQyKDApKTsKIAkJZHdvcmRzKys7CiAJfQogCkBAIC01MjksOCArNTQwLDEwIEBACiAJaWYgKG51bV9wYWNrZXQycykKIAkJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCArIChyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCksCiAJCQkgICAgcGFja2V0MnMsIG51bV9wYWNrZXQycyAqIDQpOwotCW1lbWNweShwdHIgKyByZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0LCByNnh4X3ZzLCByNnh4X3ZzX3NpemUgKiA0KTsKLQltZW1jcHkocHRyICsgcmRldi0+cjYwMF9ibGl0LnBzX29mZnNldCwgcjZ4eF9wcywgcjZ4eF9wc19zaXplICogNCk7CisJZm9yIChpID0gMDsgaSA8IHI2eHhfdnNfc2l6ZTsgaSsrKQorCQkqKHUzMiAqKSgodW5zaWduZWQgbG9uZylwdHIgKyByZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0ICsgaSAqIDQpID0gY3B1X3RvX2xlMzIocjZ4eF92c1tpXSk7CisJZm9yIChpID0gMDsgaSA8IHI2eHhfcHNfc2l6ZTsgaSsrKQorCQkqKHUzMiAqKSgodW5zaWduZWQgbG9uZylwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0ICsgaSAqIDQpID0gY3B1X3RvX2xlMzIocjZ4eF9wc1tpXSk7CiAJcmFkZW9uX2JvX2t1bm1hcChyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7CiAJcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYwppbmRleCBlODE1MWMxLi4yZDFmNmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9zaGFkZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5jCkBAIC02ODQsNyArNjg0LDExIEBACiAJMHgwMDAwMDAwMCwKIAkweDNjMDAwMDAwLAogCTB4NjhjZDEwMDAsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJMHgwMDBhMDAwMCwKKyNlbHNlCiAJMHgwMDA4MDAwMCwKKyNlbmRpZgogCTB4MDAwMDAwMDAsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jCmluZGV4IDRmNGNkOGIuLmMzYWI5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jCkBAIC0zOTYsNiArMzk2LDkgQEAKIAlyNjAwX2RvX2NwX3N0b3AoZGV2X3ByaXYpOwogCiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJICAgICBSNjAwX0JVRl9TV0FQXzMyQklUIHwKKyNlbmRpZgogCQkgICAgIFI2MDBfUkJfTk9fVVBEQVRFIHwKIAkJICAgICBSNjAwX1JCX0JMS1NaKDE1KSB8CiAJCSAgICAgUjYwMF9SQl9CVUZTWigzKSk7CkBAIC00ODYsOSArNDg5LDEyIEBACiAJcjYwMF9kb19jcF9zdG9wKGRldl9wcml2KTsKIAogCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCSAgICAgUjYwMF9CVUZfU1dBUF8zMkJJVCB8CisjZW5kaWYKIAkJICAgICBSNjAwX1JCX05PX1VQREFURSB8Ci0JCSAgICAgKDE1IDw8IDgpIHwKLQkJICAgICAoMyA8PCAwKSk7CisJCSAgICAgUjYwMF9SQl9CTEtTWigxNSkgfAorCQkgICAgIFI2MDBfUkJfQlVGU1ooMykpOwogCiAJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCBSNjAwX1NPRlRfUkVTRVRfQ1ApOwogCVJBREVPTl9SRUFEKFI2MDBfR1JCTV9TT0ZUX1JFU0VUKTsKQEAgLTU1MCw4ICs1NTYsMTIgQEAKIAogCWlmICghZGV2X3ByaXYtPndyaXRlYmFja193b3JrcykgewogCQkvKiBEaXNhYmxlIHdyaXRlYmFjayB0byBhdm9pZCB1bm5lY2Vzc2FyeSBidXMgbWFzdGVyIHRyYW5zZmVyICovCi0JCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsIFJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfQ05UTCkgfAotCQkJICAgICBSQURFT05fUkJfTk9fVVBEQVRFKTsKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCSAgICAgUjYwMF9CVUZfU1dBUF8zMkJJVCB8CisjZW5kaWYKKwkJCSAgICAgUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9DTlRMKSB8CisJCQkgICAgIFI2MDBfUkJfTk9fVVBEQVRFKTsKIAkJUkFERU9OX1dSSVRFKFI2MDBfU0NSQVRDSF9VTVNLLCAwKTsKIAl9CiB9CkBAIC01NzUsNyArNTg1LDExIEBACiAKIAlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9XUFRSX0RFTEFZLCAwKTsKIAljcF9yYl9jbnRsID0gUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9DTlRMKTsKLQlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLCBSNjAwX1JCX1JQVFJfV1JfRU5BKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLAorI2lmZGVmIF9fQklHX0VORElBTgorCQkgICAgIFI2MDBfQlVGX1NXQVBfMzJCSVQgfAorI2VuZGlmCisJCSAgICAgUjYwMF9SQl9SUFRSX1dSX0VOQSk7CiAKIAlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9SUFRSX1dSLCBjcF9wdHIpOwogCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1dQVFIsIGNwX3B0cik7CkBAIC0xODM4LDcgKzE4NTIsMTAgQEAKIAkJCSsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQ7CiAJfQogCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1JQVFJfQUREUiwKLQkJICAgICBycHRyX2FkZHIgJiAweGZmZmZmZmZmKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJICAgICAoMiA8PCAwKSB8CisjZW5kaWYKKwkJICAgICAocnB0cl9hZGRyICYgMHhmZmZmZmZmYykpOwogCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1JQVFJfQUREUl9ISSwKIAkJICAgICB1cHBlcl8zMl9iaXRzKHJwdHJfYWRkcikpOwogCkBAIC0xODg5LDcgKzE5MDYsNyBAQAogCXsKIAkJdTY0IHNjcmF0Y2hfYWRkcjsKIAotCQlzY3JhdGNoX2FkZHIgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX1JQVFJfQUREUik7CisJCXNjcmF0Y2hfYWRkciA9IFJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfUlBUUl9BRERSKSAmIDB4RkZGRkZGRkM7CiAJCXNjcmF0Y2hfYWRkciB8PSAoKHU2NClSQURFT05fUkVBRChSNjAwX0NQX1JCX1JQVFJfQUREUl9ISSkpIDw8IDMyOwogCQlzY3JhdGNoX2FkZHIgKz0gUjYwMF9TQ1JBVENIX1JFR19PRkZTRVQ7CiAJCXNjcmF0Y2hfYWRkciA+Pj0gODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKaW5kZXggNzgzMWUwOC4uMTUzMDk1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKQEAgLTI5NSwxNyArMjk1LDE4IEBACiAJfQogCiAJaWYgKCFJU19BTElHTkVEKHBpdGNoLCBwaXRjaF9hbGlnbikpIHsKLQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgcGl0Y2ggKCVkKSBpbnZhbGlkXG4iLAotCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gpOworCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBjYiBwaXRjaCAoJWQsIDB4JXgsICVkKSBpbnZhbGlkXG4iLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gsIHBpdGNoX2FsaWduLCBhcnJheV9tb2RlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICghSVNfQUxJR05FRChoZWlnaHQsIGhlaWdodF9hbGlnbikpIHsKLQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgaGVpZ2h0ICglZCkgaW52YWxpZFxuIiwKLQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGhlaWdodCk7CisJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIGhlaWdodCAoJWQsIDB4JXgsICVkKSBpbnZhbGlkXG4iLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgaGVpZ2h0LCBoZWlnaHRfYWxpZ24sIGFycmF5X21vZGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKCFJU19BTElHTkVEKGJhc2Vfb2Zmc2V0LCBiYXNlX2FsaWduKSkgewotCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdIDB4JWxseCBub3QgYWxpZ25lZFxuIiwgX19mdW5jX18sIGksIGJhc2Vfb2Zmc2V0KTsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXMgb2Zmc2V0WyVkXSAweCVsbHggMHglbGx4LCAlZCBub3QgYWxpZ25lZFxuIiwgX19mdW5jX18sIGksCisJCQkgYmFzZV9vZmZzZXQsIGJhc2VfYWxpZ24sIGFycmF5X21vZGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTMyMCw3ICszMjEsMTAgQEAKIAkJCSAqIGJyb2tlbiB1c2Vyc3BhY2UuCiAJCQkgKi8KIAkJfSBlbHNlIHsKLQkJCWRldl93YXJuKHAtPmRldiwgIiVzIG9mZnNldFslZF0gJWQgJWQgJWx1IHRvbyBiaWdcbiIsIF9fZnVuY19fLCBpLCB0cmFjay0+Y2JfY29sb3JfYm9fb2Zmc2V0W2ldLCB0bXAsIHJhZGVvbl9ib19zaXplKHRyYWNrLT5jYl9jb2xvcl9ib1tpXSkpOworCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXMgb2Zmc2V0WyVkXSAlZCAlZCAlZCAlbHUgdG9vIGJpZ1xuIiwgX19mdW5jX18sIGksCisJCQkJIGFycmF5X21vZGUsCisJCQkJIHRyYWNrLT5jYl9jb2xvcl9ib19vZmZzZXRbaV0sIHRtcCwKKwkJCQkgcmFkZW9uX2JvX3NpemUodHJhY2stPmNiX2NvbG9yX2JvW2ldKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTQ1NSwxNyArNDU5LDE4IEBACiAJCQl9CiAKIAkJCWlmICghSVNfQUxJR05FRChwaXRjaCwgcGl0Y2hfYWxpZ24pKSB7Ci0JCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgZGIgcGl0Y2ggKCVkKSBpbnZhbGlkXG4iLAotCQkJCQkgX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCk7CisJCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgZGIgcGl0Y2ggKCVkLCAweCV4LCAlZCkgaW52YWxpZFxuIiwKKwkJCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gsIHBpdGNoX2FsaWduLCBhcnJheV9tb2RlKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWlmICghSVNfQUxJR05FRChoZWlnaHQsIGhlaWdodF9hbGlnbikpIHsKLQkJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBkYiBoZWlnaHQgKCVkKSBpbnZhbGlkXG4iLAotCQkJCQkgX19mdW5jX18sIF9fTElORV9fLCBoZWlnaHQpOworCQkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGRiIGhlaWdodCAoJWQsIDB4JXgsICVkKSBpbnZhbGlkXG4iLAorCQkJCQkgX19mdW5jX18sIF9fTElORV9fLCBoZWlnaHQsIGhlaWdodF9hbGlnbiwgYXJyYXlfbW9kZSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpZiAoIUlTX0FMSUdORUQoYmFzZV9vZmZzZXQsIGJhc2VfYWxpZ24pKSB7Ci0JCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXMgb2Zmc2V0WyVkXSAweCVsbHggbm90IGFsaWduZWRcbiIsIF9fZnVuY19fLCBpLCBiYXNlX29mZnNldCk7CisJCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXMgb2Zmc2V0WyVkXSAweCVsbHgsIDB4JWxseCwgJWQgbm90IGFsaWduZWRcbiIsIF9fZnVuY19fLCBpLAorCQkJCQkgYmFzZV9vZmZzZXQsIGJhc2VfYWxpZ24sIGFycmF5X21vZGUpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCkBAIC00NzMsOSArNDc4LDEwIEBACiAJCQludmlld3MgPSBHXzAyODAwNF9TTElDRV9NQVgodHJhY2stPmRiX2RlcHRoX3ZpZXcpICsgMTsKIAkJCXRtcCA9IG50aWxlcyAqIGJwZSAqIDY0ICogbnZpZXdzOwogCQkJaWYgKCh0bXAgKyB0cmFjay0+ZGJfb2Zmc2V0KSA+IHJhZGVvbl9ib19zaXplKHRyYWNrLT5kYl9ibykpIHsKLQkJCQlkZXZfd2FybihwLT5kZXYsICJ6L3N0ZW5jaWwgYnVmZmVyIHRvbyBzbWFsbCAoMHglMDhYICVkICVkICVkIC0+ICV1IGhhdmUgJWx1KVxuIiwKLQkJCQkJCXRyYWNrLT5kYl9kZXB0aF9zaXplLCBudGlsZXMsIG52aWV3cywgYnBlLCB0bXAgKyB0cmFjay0+ZGJfb2Zmc2V0LAotCQkJCQkJcmFkZW9uX2JvX3NpemUodHJhY2stPmRiX2JvKSk7CisJCQkJZGV2X3dhcm4ocC0+ZGV2LCAiei9zdGVuY2lsIGJ1ZmZlciAoJWQpIHRvbyBzbWFsbCAoMHglMDhYICVkICVkICVkIC0+ICV1IGhhdmUgJWx1KVxuIiwKKwkJCQkJIGFycmF5X21vZGUsCisJCQkJCSB0cmFjay0+ZGJfZGVwdGhfc2l6ZSwgbnRpbGVzLCBudmlld3MsIGJwZSwgdG1wICsgdHJhY2stPmRiX29mZnNldCwKKwkJCQkJIHJhZGVvbl9ib19zaXplKHRyYWNrLT5kYl9ibykpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQl9CkBAIC0xMjI3LDE4ICsxMjMzLDE4IEBACiAJLyogWFhYIGNoZWNrIGhlaWdodCBhcyB3ZWxsLi4uICovCiAKIAlpZiAoIUlTX0FMSUdORUQocGl0Y2gsIHBpdGNoX2FsaWduKSkgewotCQlkZXZfd2FybihwLT5kZXYsICIlczolZCB0ZXggcGl0Y2ggKCVkKSBpbnZhbGlkXG4iLAotCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gpOworCQlkZXZfd2FybihwLT5kZXYsICIlczolZCB0ZXggcGl0Y2ggKCVkLCAweCV4LCAlZCkgaW52YWxpZFxuIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoLCBwaXRjaF9hbGlnbiwgR18wMzgwMDBfVElMRV9NT0RFKHdvcmQwKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoIUlTX0FMSUdORUQoYmFzZV9vZmZzZXQsIGJhc2VfYWxpZ24pKSB7Ci0JCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleCBiYXNlIG9mZnNldCAoMHglbGx4KSBpbnZhbGlkXG4iLAotCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgYmFzZV9vZmZzZXQpOworCQlkZXZfd2FybihwLT5kZXYsICIlczolZCB0ZXggYmFzZSBvZmZzZXQgKDB4JWxseCwgMHglbGx4LCAlZCkgaW52YWxpZFxuIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGJhc2Vfb2Zmc2V0LCBiYXNlX2FsaWduLCBHXzAzODAwMF9USUxFX01PREUod29yZDApKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICghSVNfQUxJR05FRChtaXBfb2Zmc2V0LCBiYXNlX2FsaWduKSkgewotCQlkZXZfd2FybihwLT5kZXYsICIlczolZCB0ZXggbWlwIG9mZnNldCAoMHglbGx4KSBpbnZhbGlkXG4iLAotCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgbWlwX29mZnNldCk7CisJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleCBtaXAgb2Zmc2V0ICgweCVsbHgsIDB4JWxseCwgJWQpIGludmFsaWRcbiIsCisJCQkgX19mdW5jX18sIF9fTElORV9fLCBtaXBfb2Zmc2V0LCBiYXNlX2FsaWduLCBHXzAzODAwMF9USUxFX01PREUod29yZDApKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfcmVnLmgKaW5kZXggMzNjZGEwMS4uZjg2OTg5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9yZWcuaApAQCAtODEsNyArODEsMTEgQEAKICNkZWZpbmUgUjYwMF9NRURJVU1fVklEX0xPV0VSX0dQSU9fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcyMAogI2RlZmluZSBSNjAwX0xPV19WSURfTE9XRVJfR1BJT19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzI0CiAKLQorI2RlZmluZSBSNjAwX0QxR1JQSF9TV0FQX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MTBDCisjICAgICAgIGRlZmluZSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl9OT05FICAgICAgICAgICAgICAgICAgICAoMCA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fMTZCSVQgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOXzMyQklUICAgICAgICAgICAgICAgICAgICgyIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl82NEJJVCAgICAgICAgICAgICAgICAgICAoMyA8PCAwKQogCiAjZGVmaW5lIFI2MDBfSERQX05PTlNVUkZBQ0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyYzA0CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAppbmRleCBhNWQ4OThiLi4wNGJhYzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCkBAIC0xNTQsMTMgKzE1NCwxNCBAQAogI2RlZmluZQkJUk9RX0lCMl9TVEFSVCh4KQkJCQkoKHgpIDw8IDgpCiAjZGVmaW5lCUNQX1JCX0JBU0UJCQkJCTB4QzEwMAogI2RlZmluZQlDUF9SQl9DTlRMCQkJCQkweEMxMDQKLSNkZWZpbmUJCVJCX0JVRlNaKHgpCQkJCQkoKHgpPDwwKQotI2RlZmluZQkJUkJfQkxLU1ooeCkJCQkJCSgoeCk8PDgpCi0jZGVmaW5lCQlSQl9OT19VUERBVEUJCQkJCSgxPDwyNykKLSNkZWZpbmUJCVJCX1JQVFJfV1JfRU5BCQkJCQkoMTw8MzEpCisjZGVmaW5lCQlSQl9CVUZTWih4KQkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJUkJfQkxLU1ooeCkJCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJCVJCX05PX1VQREFURQkJCQkJKDEgPDwgMjcpCisjZGVmaW5lCQlSQl9SUFRSX1dSX0VOQQkJCQkJKDEgPDwgMzEpCiAjZGVmaW5lCQlCVUZfU1dBUF8zMkJJVAkJCQkJKDIgPDwgMTYpCiAjZGVmaW5lCUNQX1JCX1JQVFIJCQkJCTB4ODcwMAogI2RlZmluZQlDUF9SQl9SUFRSX0FERFIJCQkJCTB4QzEwQworI2RlZmluZQkJUkJfUlBUUl9TV0FQKHgpCQkJCQkoKHgpIDw8IDApCiAjZGVmaW5lCUNQX1JCX1JQVFJfQUREUl9ISQkJCQkweEMxMTAKICNkZWZpbmUJQ1BfUkJfUlBUUl9XUgkJCQkJMHhDMTA4CiAjZGVmaW5lCUNQX1JCX1dQVFIJCQkJCTB4QzExNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggNzFkMmE1NS4uNTZjNDhiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC0xNzksMTAgKzE3OSwxMCBAQAogdm9pZCByYWRlb25fYXRvbWJpb3NfZ2V0X3Bvd2VyX21vZGVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUxNiBsZXZlbCk7CiB2b2lkIHJzNjkwX3BtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHUzMiBydjZ4eF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdTMyIHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB1MzIgZXZlcmdyZWVuX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB1MzIgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJ2Nnh4X2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnY3NzBfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBzdW1vX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyoKICAqIEZlbmNlcy4KQEAgLTgxMiw4ICs4MTIsNyBAQAogCWZpeGVkMjBfMTIJCXNjbGs7CiAJZml4ZWQyMF8xMgkJbWNsazsKIAlmaXhlZDIwXzEyCQluZWVkZWRfYmFuZHdpZHRoOwotCS8qIFhYWDogdXNlIGEgZGVmaW5lIGZvciBudW0gcG93ZXIgbW9kZXMgKi8KLQlzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlIHBvd2VyX3N0YXRlWzhdOworCXN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgKnBvd2VyX3N0YXRlOwogCS8qIG51bWJlciBvZiB2YWxpZCBwb3dlciBzdGF0ZXMgKi8KIAlpbnQgICAgICAgICAgICAgICAgICAgICBudW1fcG93ZXJfc3RhdGVzOwogCWludCAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcG93ZXJfc3RhdGVfaW5kZXg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKaW5kZXggM2ExYjE2MS4uZTc1ZDYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYwpAQCAtNzU5LDcgKzc1OSw3IEBACiAJLmdhcnRfdGxiX2ZsdXNoID0gJmV2ZXJncmVlbl9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKLQkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZSwKIAkuaXJxX3NldCA9ICZldmVyZ3JlZW5faXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmZXZlcmdyZWVuX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmZXZlcmdyZWVuX2dldF92YmxhbmtfY291bnRlciwKQEAgLTgwNSw3ICs4MDUsNyBAQAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZldmVyZ3JlZW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCS5yaW5nX3Rlc3QgPSAmcjYwMF9yaW5nX3Rlc3QsCi0JLnJpbmdfaWJfZXhlY3V0ZSA9ICZyNjAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkucmluZ19pYl9leGVjdXRlID0gJmV2ZXJncmVlbl9yaW5nX2liX2V4ZWN1dGUsCiAJLmlycV9zZXQgPSAmZXZlcmdyZWVuX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJmV2ZXJncmVlbl9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJmV2ZXJncmVlbl9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC04NDgsNyArODQ4LDcgQEAKIAkuZ2FydF90bGJfZmx1c2ggPSAmZXZlcmdyZWVuX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAkucmluZ190ZXN0ID0gJnI2MDBfcmluZ190ZXN0LAotCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjYwMF9yaW5nX2liX2V4ZWN1dGUsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZldmVyZ3JlZW5fcmluZ19pYl9leGVjdXRlLAogCS5pcnFfc2V0ID0gJmV2ZXJncmVlbl9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZldmVyZ3JlZW5faXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZldmVyZ3JlZW5fZ2V0X3ZibGFua19jb3VudGVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCmluZGV4IGUwMWYwNzcxLi5jNTliZDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCkBAIC0zNTUsNiArMzU1LDcgQEAKIGJvb2wgZXZlcmdyZWVuX2dwdV9pc19sb2NrdXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IGV2ZXJncmVlbl9hc2ljX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgZXZlcmdyZWVuX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCBldmVyZ3JlZW5fcmluZ19pYl9leGVjdXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYik7CiBpbnQgZXZlcmdyZWVuX2NvcHlfYmxpdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCXVpbnQ2NF90IHNyY19vZmZzZXQsIHVpbnQ2NF90IGRzdF9vZmZzZXQsCiAJCQl1bnNpZ25lZCBudW1fcGFnZXMsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCmluZGV4IDE1NzMyMDIuLjAyZDVjNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwpAQCAtODgsNyArODgsNyBAQAogCQkJLyogc29tZSBldmVyZ3JlZW4gYm9hcmRzIGhhdmUgYmFkIGRhdGEgZm9yIHRoaXMgZW50cnkgKi8KIAkJCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKIAkJCQlpZiAoKGkgPT0gNykgJiYKLQkJCQkgICAgKGdwaW8tPnVzQ2xrTWFza1JlZ2lzdGVySW5kZXggPT0gMHgxOTM2KSAmJgorCQkJCSAgICAobGUxNl90b19jcHUoZ3Bpby0+dXNDbGtNYXNrUmVnaXN0ZXJJbmRleCkgPT0gMHgxOTM2KSAmJgogCQkJCSAgICAoZ3Bpby0+c3VjSTJjSWQudWNBY2Nlc3MgPT0gMCkpIHsKIAkJCQkJZ3Bpby0+c3VjSTJjSWQudWNBY2Nlc3MgPSAweDk3OwogCQkJCQlncGlvLT51Y0RhdGFNYXNrU2hpZnQgPSA4OwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJCQkvKiBzb21lIERDRTMgYm9hcmRzIGhhdmUgYmFkIGRhdGEgZm9yIHRoaXMgZW50cnkgKi8KIAkJCWlmIChBU0lDX0lTX0RDRTMocmRldikpIHsKIAkJCQlpZiAoKGkgPT0gNCkgJiYKLQkJCQkgICAgKGdwaW8tPnVzQ2xrTWFza1JlZ2lzdGVySW5kZXggPT0gMHgxZmRhKSAmJgorCQkJCSAgICAobGUxNl90b19jcHUoZ3Bpby0+dXNDbGtNYXNrUmVnaXN0ZXJJbmRleCkgPT0gMHgxZmRhKSAmJgogCQkJCSAgICAoZ3Bpby0+c3VjSTJjSWQudWNBY2Nlc3MgPT0gMHg5NCkpCiAJCQkJCWdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID0gMHgxNDsKIAkJCX0KQEAgLTE3Miw3ICsxNzIsNyBAQAogCQkJLyogc29tZSBldmVyZ3JlZW4gYm9hcmRzIGhhdmUgYmFkIGRhdGEgZm9yIHRoaXMgZW50cnkgKi8KIAkJCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKIAkJCQlpZiAoKGkgPT0gNykgJiYKLQkJCQkgICAgKGdwaW8tPnVzQ2xrTWFza1JlZ2lzdGVySW5kZXggPT0gMHgxOTM2KSAmJgorCQkJCSAgICAobGUxNl90b19jcHUoZ3Bpby0+dXNDbGtNYXNrUmVnaXN0ZXJJbmRleCkgPT0gMHgxOTM2KSAmJgogCQkJCSAgICAoZ3Bpby0+c3VjSTJjSWQudWNBY2Nlc3MgPT0gMCkpIHsKIAkJCQkJZ3Bpby0+c3VjSTJjSWQudWNBY2Nlc3MgPSAweDk3OwogCQkJCQlncGlvLT51Y0RhdGFNYXNrU2hpZnQgPSA4OwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJCQkvKiBzb21lIERDRTMgYm9hcmRzIGhhdmUgYmFkIGRhdGEgZm9yIHRoaXMgZW50cnkgKi8KIAkJCWlmIChBU0lDX0lTX0RDRTMocmRldikpIHsKIAkJCQlpZiAoKGkgPT0gNCkgJiYKLQkJCQkgICAgKGdwaW8tPnVzQ2xrTWFza1JlZ2lzdGVySW5kZXggPT0gMHgxZmRhKSAmJgorCQkJCSAgICAobGUxNl90b19jcHUoZ3Bpby0+dXNDbGtNYXNrUmVnaXN0ZXJJbmRleCkgPT0gMHgxZmRhKSAmJgogCQkJCSAgICAoZ3Bpby0+c3VjSTJjSWQudWNBY2Nlc3MgPT0gMHg5NCkpCiAJCQkJCWdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID0gMHgxNDsKIAkJCX0KQEAgLTI1Miw3ICsyNTIsNyBAQAogCQkJcGluID0gJmdwaW9faW5mby0+YXNHUElPX1BpbltpXTsKIAkJCWlmIChpZCA9PSBwaW4tPnVjR1BJT19JRCkgewogCQkJCWdwaW8uaWQgPSBwaW4tPnVjR1BJT19JRDsKLQkJCQlncGlvLnJlZyA9IHBpbi0+dXNHcGlvUGluX0FJbmRleCAqIDQ7CisJCQkJZ3Bpby5yZWcgPSBsZTE2X3RvX2NwdShwaW4tPnVzR3Bpb1Bpbl9BSW5kZXgpICogNDsKIAkJCQlncGlvLm1hc2sgPSAoMSA8PCBwaW4tPnVjR3Bpb1BpbkJpdFNoaWZ0KTsKIAkJCQlncGlvLnZhbGlkID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTM4NywxNSArMzg3LDExIEBACiAJCQkqbGluZV9tdXggPSAweDkwOwogCX0KIAotCS8qIG1hYyBydjYzMCAqLwotCWlmICgoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NTg4KSAmJgotCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTA2YikgJiYKLQkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAwYTYpKSB7Ci0JCWlmICgoc3VwcG9ydGVkX2RldmljZSA9PSBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCkgJiYKLQkJICAgICgqY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpKSB7Ci0JCQkqY29ubmVjdG9yX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTjsKLQkJCSpsaW5lX211eCA9IENPTk5FQ1RPUl83UElOX0RJTl9FTlVNX0lEMTsKLQkJfQorCS8qIG1hYyBydjYzMCwgcnY3MzAsIG90aGVycyAqLworCWlmICgoc3VwcG9ydGVkX2RldmljZSA9PSBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCkgJiYKKwkgICAgKCpjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkpIHsKKwkJKmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU47CisJCSpsaW5lX211eCA9IENPTk5FQ1RPUl83UElOX0RJTl9FTlVNX0lEMTsKIAl9CiAKIAkvKiBBU1VTIEhEIDM2MDAgWFQgYm9hcmQgbGlzdHMgdGhlIERWSSBwb3J0IGFzIEhETUkgKi8KQEAgLTExNjcsMTYgKzExNjMsNiBAQAogCQkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDY0ODAwOwogCQkJZWxzZQogCQkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDIwMDAwOwotCQl9IGVsc2UgaWYgKHAxcGxsLT5wbGxfb3V0X21pbiA+IDY0ODAwKSB7Ci0JCQkvKiBMaW1pdGluZyB0aGUgcGxsIG91dHB1dCByYW5nZSBpcyBhIGdvb2QgdGhpbmcgZ2VuZXJhbGx5IGFzCi0JCQkgKiBpdCBsaW1pdHMgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBwbGwgY29tYmluYXRpb25zIGZvciBhIGdpdmVuCi0JCQkgKiBmcmVxdWVuY3kgcHJlc3VtYWJseSB0byB0aGUgb25lcyB0aGF0IHdvcmsgYmVzdCBvbiBlYWNoIGNhcmQuCi0JCQkgKiBIb3dldmVyLCBjZXJ0YWluIGR1YWxsaW5rIERWSSBtb25pdG9ycyBzZWVtIHRvIGxpa2UKLQkJCSAqIHBsbCBjb21iaW5hdGlvbnMgdGhhdCB3b3VsZCBiZSBsaW1pdGVkIGJ5IHRoaXMgYXQgbGVhc3Qgb24KLQkJCSAqIHByZS1EQ0UgMy4wIHI2eHggaGFyZHdhcmUuICBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgYWRqdXN0ZWQgcGVyCi0JCQkgKiBmYW1pbHkuCi0JCQkgKi8KLQkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDY0ODAwOwogCQl9CiAKIAkJcDFwbGwtPnBsbF9pbl9taW4gPQpAQCAtMTI4OCwxMSArMTI3NCwxMSBAQAogCQkJCSAgICAgIGRhdGFfb2Zmc2V0KTsKIAkJc3dpdGNoIChjcmV2KSB7CiAJCWNhc2UgMToKLQkJCWlmIChpZ3BfaW5mby0+aW5mby51bEJvb3RVcE1lbW9yeUNsb2NrKQorCQkJaWYgKGxlMzJfdG9fY3B1KGlncF9pbmZvLT5pbmZvLnVsQm9vdFVwTWVtb3J5Q2xvY2spKQogCQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKLQkJCWlmIChpZ3BfaW5mby0+aW5mb18yLnVsQm9vdFVwU2lkZVBvcnRDbG9jaykKKwkJCWlmIChsZTMyX3RvX2NwdShpZ3BfaW5mby0+aW5mb18yLnVsQm9vdFVwU2lkZVBvcnRDbG9jaykpCiAJCQkJcmV0dXJuIHRydWU7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTE0NTYsNyArMTQ0Miw3IEBACiAKIAkJCWZvciAoaSA9IDA7IGkgPCBudW1faW5kaWNlczsgaSsrKSB7CiAJCQkJaWYgKChzc19pbmZvLT5pbmZvLmFzU3ByZWFkU3BlY3RydW1baV0udWNDbG9ja0luZGljYXRpb24gPT0gaWQpICYmCi0JCQkJICAgIChjbG9jayA8PSBzc19pbmZvLT5pbmZvLmFzU3ByZWFkU3BlY3RydW1baV0udWxUYXJnZXRDbG9ja1JhbmdlKSkgeworCQkJCSAgICAoY2xvY2sgPD0gbGUzMl90b19jcHUoc3NfaW5mby0+aW5mby5hc1NwcmVhZFNwZWN0cnVtW2ldLnVsVGFyZ2V0Q2xvY2tSYW5nZSkpKSB7CiAJCQkJCXNzLT5wZXJjZW50YWdlID0KIAkJCQkJCWxlMTZfdG9fY3B1KHNzX2luZm8tPmluZm8uYXNTcHJlYWRTcGVjdHJ1bVtpXS51c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZSk7CiAJCQkJCXNzLT50eXBlID0gc3NfaW5mby0+aW5mby5hc1NwcmVhZFNwZWN0cnVtW2ldLnVjU3ByZWFkU3BlY3RydW1Nb2RlOwpAQCAtMTQ3MCw3ICsxNDU2LDcgQEAKIAkJCQlzaXplb2YoQVRPTV9BU0lDX1NTX0FTU0lHTk1FTlRfVjIpOwogCQkJZm9yIChpID0gMDsgaSA8IG51bV9pbmRpY2VzOyBpKyspIHsKIAkJCQlpZiAoKHNzX2luZm8tPmluZm9fMi5hc1NwcmVhZFNwZWN0cnVtW2ldLnVjQ2xvY2tJbmRpY2F0aW9uID09IGlkKSAmJgotCQkJCSAgICAoY2xvY2sgPD0gc3NfaW5mby0+aW5mb18yLmFzU3ByZWFkU3BlY3RydW1baV0udWxUYXJnZXRDbG9ja1JhbmdlKSkgeworCQkJCSAgICAoY2xvY2sgPD0gbGUzMl90b19jcHUoc3NfaW5mby0+aW5mb18yLmFzU3ByZWFkU3BlY3RydW1baV0udWxUYXJnZXRDbG9ja1JhbmdlKSkpIHsKIAkJCQkJc3MtPnBlcmNlbnRhZ2UgPQogCQkJCQkJbGUxNl90b19jcHUoc3NfaW5mby0+aW5mb18yLmFzU3ByZWFkU3BlY3RydW1baV0udXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2UpOwogCQkJCQlzcy0+dHlwZSA9IHNzX2luZm8tPmluZm9fMi5hc1NwcmVhZFNwZWN0cnVtW2ldLnVjU3ByZWFkU3BlY3RydW1Nb2RlOwpAQCAtMTQ4NCw3ICsxNDcwLDcgQEAKIAkJCQlzaXplb2YoQVRPTV9BU0lDX1NTX0FTU0lHTk1FTlRfVjMpOwogCQkJZm9yIChpID0gMDsgaSA8IG51bV9pbmRpY2VzOyBpKyspIHsKIAkJCQlpZiAoKHNzX2luZm8tPmluZm9fMy5hc1NwcmVhZFNwZWN0cnVtW2ldLnVjQ2xvY2tJbmRpY2F0aW9uID09IGlkKSAmJgotCQkJCSAgICAoY2xvY2sgPD0gc3NfaW5mby0+aW5mb18zLmFzU3ByZWFkU3BlY3RydW1baV0udWxUYXJnZXRDbG9ja1JhbmdlKSkgeworCQkJCSAgICAoY2xvY2sgPD0gbGUzMl90b19jcHUoc3NfaW5mby0+aW5mb18zLmFzU3ByZWFkU3BlY3RydW1baV0udWxUYXJnZXRDbG9ja1JhbmdlKSkpIHsKIAkJCQkJc3MtPnBlcmNlbnRhZ2UgPQogCQkJCQkJbGUxNl90b19jcHUoc3NfaW5mby0+aW5mb18zLmFzU3ByZWFkU3BlY3RydW1baV0udXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2UpOwogCQkJCQlzcy0+dHlwZSA9IHNzX2luZm8tPmluZm9fMy5hc1NwcmVhZFNwZWN0cnVtW2ldLnVjU3ByZWFkU3BlY3RydW1Nb2RlOwpAQCAtMTU2Nyw4ICsxNTUzLDggQEAKIAkJaWYgKG1pc2MgJiBBVE9NX0RPVUJMRV9DTE9DS19NT0RFKQogCQkJbHZkcy0+bmF0aXZlX21vZGUuZmxhZ3MgfD0gRFJNX01PREVfRkxBR19EQkxTQ0FOOwogCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLndpZHRoX21tID0gbHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNJbWFnZUhTaXplOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5oZWlnaHRfbW0gPSBsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0ltYWdlVlNpemU7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLndpZHRoX21tID0gbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNJbWFnZUhTaXplKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaGVpZ2h0X21tID0gbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNJbWFnZVZTaXplKTsKIAogCQkvKiBzZXQgY3J0YyB2YWx1ZXMgKi8KIAkJZHJtX21vZGVfc2V0X2NydGNpbmZvKCZsdmRzLT5uYXRpdmVfbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7CkBAIC0xNTgzLDEzICsxNTY5LDEzIEBACiAJCQlsdmRzLT5saW5rYiA9IGZhbHNlOwogCiAJCS8qIHBhcnNlIHRoZSBsY2QgcmVjb3JkIHRhYmxlICovCi0JCWlmIChsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCkgeworCQlpZiAobGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnVzTW9kZVBhdGNoVGFibGVPZmZzZXQpKSB7CiAJCQlBVE9NX0ZBS0VfRURJRF9QQVRDSF9SRUNPUkQgKmZha2VfZWRpZF9yZWNvcmQ7CiAJCQlBVE9NX1BBTkVMX1JFU09MVVRJT05fUEFUQ0hfUkVDT1JEICpwYW5lbF9yZXNfcmVjb3JkOwogCQkJYm9vbCBiYWRfcmVjb3JkID0gZmFsc2U7CiAJCQl1OCAqcmVjb3JkID0gKHU4ICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsKIAkJCQkJICAgIGRhdGFfb2Zmc2V0ICsKLQkJCQkJICAgIGx2ZHNfaW5mby0+aW5mby51c01vZGVQYXRjaFRhYmxlT2Zmc2V0KTsKKwkJCQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby51c01vZGVQYXRjaFRhYmxlT2Zmc2V0KSk7CiAJCQl3aGlsZSAoKnJlY29yZCAhPSBBVE9NX1JFQ09SRF9FTkRfVFlQRSkgewogCQkJCXN3aXRjaCAoKnJlY29yZCkgewogCQkJCWNhc2UgTENEX01PREVfUEFUQ0hfUkVDT1JEX01PREVfVFlQRToKQEAgLTE5OTEsNiArMTk3Nyw5IEBACiAJbnVtX21vZGVzID0gcG93ZXJfaW5mby0+aW5mby51Y051bU9mUG93ZXJNb2RlRW50cmllczsKIAlpZiAobnVtX21vZGVzID4gQVRPTV9NQVhfTlVNQkVST0ZfUE9XRVJfQkxPQ0spCiAJCW51bV9tb2RlcyA9IEFUT01fTUFYX05VTUJFUk9GX1BPV0VSX0JMT0NLOworCXJkZXYtPnBtLnBvd2VyX3N0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSkgKiBudW1fbW9kZXMsIEdGUF9LRVJORUwpOworCWlmICghcmRldi0+cG0ucG93ZXJfc3RhdGUpCisJCXJldHVybiBzdGF0ZV9pbmRleDsKIAkvKiBsYXN0IG1vZGUgaXMgdXN1YWxseSBkZWZhdWx0LCBhcnJheSBpcyBsb3cgdG8gaGlnaCAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fbW9kZXM7IGkrKykgewogCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPSBWT0xUQUdFX05PTkU7CkBAIC0yMjAwLDcgKzIxODksNyBAQAogCQlmaXJtd2FyZV9pbmZvID0KIAkJCSh1bmlvbiBmaXJtd2FyZV9pbmZvICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsKIAkJCQkJCWRhdGFfb2Zmc2V0KTsKLQkJdmRkYyA9IGZpcm13YXJlX2luZm8tPmluZm9fMTQudXNCb290VXBWRERDVm9sdGFnZTsKKwkJdmRkYyA9IGxlMTZfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm9fMTQudXNCb290VXBWRERDVm9sdGFnZSk7CiAJfQogCiAJcmV0dXJuIHZkZGM7CkBAIC0yMjk1LDcgKzIyODQsNyBAQAogCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS52b2x0YWdlLnR5cGUgPQogCQkJVk9MVEFHRV9TVzsKIAkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0udm9sdGFnZS52b2x0YWdlID0KLQkJCWNsb2NrX2luZm8tPmV2ZXJncmVlbi51c1ZEREM7CisJCQlsZTE2X3RvX2NwdShjbG9ja19pbmZvLT5ldmVyZ3JlZW4udXNWRERDKTsKIAl9IGVsc2UgewogCQlzY2xrID0gbGUxNl90b19jcHUoY2xvY2tfaW5mby0+cjYwMC51c0VuZ2luZUNsb2NrTG93KTsKIAkJc2NsayB8PSBjbG9ja19pbmZvLT5yNjAwLnVjRW5naW5lQ2xvY2tIaWdoIDw8IDE2OwpAQCAtMjMwNiw3ICsyMjk1LDcgQEAKIAkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0udm9sdGFnZS50eXBlID0KIAkJCVZPTFRBR0VfU1c7CiAJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2Uudm9sdGFnZSA9Ci0JCQljbG9ja19pbmZvLT5yNjAwLnVzVkREQzsKKwkJCWxlMTZfdG9fY3B1KGNsb2NrX2luZm8tPnI2MDAudXNWRERDKTsKIAl9CiAKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CkBAIC0yMzQyLDYgKzIzMzEsMTAgQEAKIAlwb3dlcl9pbmZvID0gKHVuaW9uIHBvd2VyX2luZm8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCk7CiAKIAlyYWRlb25fYXRvbWJpb3NfYWRkX3BwbGliX3RoZXJtYWxfY29udHJvbGxlcihyZGV2LCAmcG93ZXJfaW5mby0+cHBsaWIuc1RoZXJtYWxDb250cm9sbGVyKTsKKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUpICoKKwkJCQkgICAgICAgcG93ZXJfaW5mby0+cHBsaWIudWNOdW1TdGF0ZXMsIEdGUF9LRVJORUwpOworCWlmICghcmRldi0+cG0ucG93ZXJfc3RhdGUpCisJCXJldHVybiBzdGF0ZV9pbmRleDsKIAkvKiBmaXJzdCBtb2RlIGlzIHVzdWFsbHkgZGVmYXVsdCwgZm9sbG93ZWQgYnkgbG93IHRvIGhpZ2ggKi8KIAlmb3IgKGkgPSAwOyBpIDwgcG93ZXJfaW5mby0+cHBsaWIudWNOdW1TdGF0ZXM7IGkrKykgewogCQltb2RlX2luZGV4ID0gMDsKQEAgLTI0MTUsMTMgKzI0MDgsMTcgQEAKIAlyYWRlb25fYXRvbWJpb3NfYWRkX3BwbGliX3RoZXJtYWxfY29udHJvbGxlcihyZGV2LCAmcG93ZXJfaW5mby0+cHBsaWIuc1RoZXJtYWxDb250cm9sbGVyKTsKIAlzdGF0ZV9hcnJheSA9IChzdHJ1Y3QgU3RhdGVBcnJheSAqKQogCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCArCi0JCSBwb3dlcl9pbmZvLT5wcGxpYi51c1N0YXRlQXJyYXlPZmZzZXQpOworCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0+cHBsaWIudXNTdGF0ZUFycmF5T2Zmc2V0KSk7CiAJY2xvY2tfaW5mb19hcnJheSA9IChzdHJ1Y3QgQ2xvY2tJbmZvQXJyYXkgKikKIAkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQgKwotCQkgcG93ZXJfaW5mby0+cHBsaWIudXNDbG9ja0luZm9BcnJheU9mZnNldCk7CisJCSBsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5wcGxpYi51c0Nsb2NrSW5mb0FycmF5T2Zmc2V0KSk7CiAJbm9uX2Nsb2NrX2luZm9fYXJyYXkgPSAoc3RydWN0IE5vbkNsb2NrSW5mb0FycmF5ICopCiAJCShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0ICsKLQkJIHBvd2VyX2luZm8tPnBwbGliLnVzTm9uQ2xvY2tJbmZvQXJyYXlPZmZzZXQpOworCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0+cHBsaWIudXNOb25DbG9ja0luZm9BcnJheU9mZnNldCkpOworCXJkZXYtPnBtLnBvd2VyX3N0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSkgKgorCQkJCSAgICAgICBzdGF0ZV9hcnJheS0+dWNOdW1FbnRyaWVzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkZXYtPnBtLnBvd2VyX3N0YXRlKQorCQlyZXR1cm4gc3RhdGVfaW5kZXg7CiAJZm9yIChpID0gMDsgaSA8IHN0YXRlX2FycmF5LT51Y051bUVudHJpZXM7IGkrKykgewogCQltb2RlX2luZGV4ID0gMDsKIAkJcG93ZXJfc3RhdGUgPSAodW5pb24gcHBsaWJfcG93ZXJfc3RhdGUgKikmc3RhdGVfYXJyYXktPnN0YXRlc1tpXTsKQEAgLTI0OTUsMTkgKzI0OTIsMjIgQEAKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKLQkJLyogYWRkIHRoZSBkZWZhdWx0IG1vZGUgKi8KLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQotCQkJUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxUOwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9IHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsazsKLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9IHJkZXYtPmNsb2NrLmRlZmF1bHRfc2NsazsKLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmRlZmF1bHRfY2xvY2tfbW9kZSA9Ci0JCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF07Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9IFZPTFRBR0VfTk9ORTsKLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnBjaWVfbGFuZXMgPSAxNjsKLQkJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleCA9IHN0YXRlX2luZGV4OwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgPSAwOwotCQlzdGF0ZV9pbmRleCsrOworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJkZXYtPnBtLnBvd2VyX3N0YXRlKSB7CisJCQkvKiBhZGQgdGhlIGRlZmF1bHQgbW9kZSAqLworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCVBPV0VSX1NUQVRFX1RZUEVfREVGQVVMVDsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5udW1fY2xvY2tfbW9kZXMgPSAxOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9IHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsazsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGs7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZGVmYXVsdF9jbG9ja19tb2RlID0KKwkJCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF07CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPSBWT0xUQUdFX05PTkU7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ucGNpZV9sYW5lcyA9IDE2OworCQkJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleCA9IHN0YXRlX2luZGV4OworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmZsYWdzID0gMDsKKwkJCXN0YXRlX2luZGV4Kys7CisJCX0KIAl9CiAKIAlyZGV2LT5wbS5udW1fcG93ZXJfc3RhdGVzID0gc3RhdGVfaW5kZXg7CkBAIC0yNTMzLDcgKzI1MzMsNyBAQAogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEdldEVuZ2luZUNsb2NrKTsKIAogCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwotCXJldHVybiBhcmdzLnVsUmV0dXJuRW5naW5lQ2xvY2s7CisJcmV0dXJuIGxlMzJfdG9fY3B1KGFyZ3MudWxSZXR1cm5FbmdpbmVDbG9jayk7CiB9CiAKIHVpbnQzMl90IHJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCkBAIC0yNTQyLDcgKzI1NDIsNyBAQAogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEdldE1lbW9yeUNsb2NrKTsKIAogCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwotCXJldHVybiBhcmdzLnVsUmV0dXJuTWVtb3J5Q2xvY2s7CisJcmV0dXJuIGxlMzJfdG9fY3B1KGFyZ3MudWxSZXR1cm5NZW1vcnlDbG9jayk7CiB9CiAKIHZvaWQgcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKQEAgLTI1NTEsNyArMjU1MSw3IEBACiAJU0VUX0VOR0lORV9DTE9DS19QU19BTExPQ0FUSU9OIGFyZ3M7CiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgU2V0RW5naW5lQ2xvY2spOwogCi0JYXJncy51bFRhcmdldEVuZ2luZUNsb2NrID0gZW5nX2Nsb2NrOwkvKiAxMCBraHogKi8KKwlhcmdzLnVsVGFyZ2V0RW5naW5lQ2xvY2sgPSBjcHVfdG9fbGUzMihlbmdfY2xvY2spOwkvKiAxMCBraHogKi8KIAogCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwogfQpAQCAtMjU2NSw3ICsyNTY1LDcgQEAKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQogCQlyZXR1cm47CiAKLQlhcmdzLnVsVGFyZ2V0TWVtb3J5Q2xvY2sgPSBtZW1fY2xvY2s7CS8qIDEwIGtoeiAqLworCWFyZ3MudWxUYXJnZXRNZW1vcnlDbG9jayA9IGNwdV90b19sZTMyKG1lbV9jbG9jayk7CS8qIDEwIGtoeiAqLwogCiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiB9CkBAIC0yNjIzLDcgKzI2MjMsNyBAQAogCWJpb3NfMl9zY3JhdGNoICY9IH5BVE9NX1MyX1ZSSV9CUklHSFRfRU5BQkxFOwogCiAJLyogdGVsbCB0aGUgYmlvcyBub3QgdG8gaGFuZGxlIG1vZGUgc3dpdGNoaW5nICovCi0JYmlvc182X3NjcmF0Y2ggfD0gKEFUT01fUzZfQUNDX0JMT0NLX0RJU1BMQVlfU1dJVENIIHwgQVRPTV9TNl9BQ0NfTU9ERSk7CisJYmlvc182X3NjcmF0Y2ggfD0gQVRPTV9TNl9BQ0NfQkxPQ0tfRElTUExBWV9TV0lUQ0g7CiAKIAlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkgewogCQlXUkVHMzIoUjYwMF9CSU9TXzJfU0NSQVRDSCwgYmlvc18yX3NjcmF0Y2gpOwpAQCAtMjY3NCwxMCArMjY3NCwxMyBAQAogCWVsc2UKIAkJYmlvc182X3NjcmF0Y2ggPSBSUkVHMzIoUkFERU9OX0JJT1NfNl9TQ1JBVENIKTsKIAotCWlmIChsb2NrKQorCWlmIChsb2NrKSB7CiAJCWJpb3NfNl9zY3JhdGNoIHw9IEFUT01fUzZfQ1JJVElDQUxfU1RBVEU7Ci0JZWxzZQorCQliaW9zXzZfc2NyYXRjaCAmPSB+QVRPTV9TNl9BQ0NfTU9ERTsKKwl9IGVsc2UgewogCQliaW9zXzZfc2NyYXRjaCAmPSB+QVRPTV9TNl9DUklUSUNBTF9TVEFURTsKKwkJYmlvc182X3NjcmF0Y2ggfD0gQVRPTV9TNl9BQ0NfTU9ERTsKKwl9CiAKIAlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkKIAkJV1JFRzMyKFI2MDBfQklPU182X1NDUkFUQ0gsIGJpb3NfNl9zY3JhdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwppbmRleCA1OTFmY2FlLi5jZjdjOGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCkBAIC0xNTA0LDYgKzE1MDQsMTEgQEAKIAkJCSAgIChyZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4NGE0OCkpIHsKIAkJCS8qIE1hYyBYODAwICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfTUFDX1g4MDA7CisJCX0gZWxzZSBpZiAoKHJkZXYtPnBkZXYtPmRldmljZSA9PSAweDQxNTApICYmCisJCQkgICAocmRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwMDIpICYmCisJCQkgICAocmRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDQxNTApKSB7CisJCQkvKiBNYWMgRzUgOTYwMCAqLworCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX01BQ19HNV85NjAwOwogCQl9IGVsc2UKICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KICNpZmRlZiBDT05GSUdfUFBDNjQKQEAgLTIwMjIsNiArMjAyNyw0OCBAQAogCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0ksCiAJCQkJCSAgICAmaHBkKTsKIAkJYnJlYWs7CisJY2FzZSBDVF9NQUNfRzVfOTYwMDoKKwkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKG1hYyBnNSA5NjAwKVxuIiwKKwkJCSByZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlKTsKKwkJLyogRFZJIC0gdHYgZGFjLCBkdm8gKi8KKwkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhyZGV2LCBERENfRFZJLCAwLCAwKTsKKwkJaHBkLmhwZCA9IFJBREVPTl9IUERfMTsgLyogPz8/ICovCisJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAorCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9lbnVtKGRldiwKKwkJCQkJCQkJICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQsCisJCQkJCQkJCSAgMCksCisJCQkJCSAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUKTsKKwkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCisJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2VudW0oZGV2LAorCQkJCQkJCQkgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKKwkJCQkJCQkJICAyKSwKKwkJCQkJICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQpOworCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLAorCQkJCQkgICAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUIHwKKwkJCQkJICAgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0ksCisJCQkJCSAgICAmaHBkKTsKKwkJLyogQURDIC0gcHJpbWFyeSBkYWMsIGludGVybmFsIHRtZHMgKi8KKwkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhyZGV2LCBERENfVkdBLCAwLCAwKTsKKwkJaHBkLmhwZCA9IFJBREVPTl9IUERfMjsgLyogPz8/ICovCisJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAorCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9lbnVtKGRldiwKKwkJCQkJCQkJICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCisJCQkJCQkJCSAgMCksCisJCQkJCSAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUKTsKKwkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCisJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2VudW0oZGV2LAorCQkJCQkJCQkgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKKwkJCQkJCQkJICAxKSwKKwkJCQkJICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQpOworCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLAorCQkJCQkgICAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUIHwKKwkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0ksCisJCQkJCSAgICAmaHBkKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0lORk8oIkNvbm5lY3RvciB0YWJsZTogJWQgKGludmFsaWQpXG4iLAogCQkJIHJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUpOwpAQCAtMjQ0Miw2ICsyNDg5LDE3IEBACiAKIAlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gLTE7CiAKKwkvKiBhbGxvY2F0ZSAyIHBvd2VyIHN0YXRlcyAqLworCXJkZXYtPnBtLnBvd2VyX3N0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSkgKiAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkZXYtPnBtLnBvd2VyX3N0YXRlKSB7CisJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPSBzdGF0ZV9pbmRleDsKKwkJcmRldi0+cG0ubnVtX3Bvd2VyX3N0YXRlcyA9IDA7CisKKwkJcmRldi0+cG0uY3VycmVudF9wb3dlcl9zdGF0ZV9pbmRleCA9IHJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXg7CisJCXJkZXYtPnBtLmN1cnJlbnRfY2xvY2tfbW9kZV9pbmRleCA9IDA7CisJCXJldHVybjsKKwl9CisKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfTU9CSUxJVFkpIHsKIAkJb2Zmc2V0ID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19QT1dFUlBMQVlfSU5GT19UQUJMRSk7CiAJCWlmIChvZmZzZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggMjYwOTFkNi4uNDk1NGUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTg5MSw5ICs4OTEsOSBAQAogCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2LT5wZGV2KTsKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EM2hvdCk7CiAJfQotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlyYWRlb25fZmJkZXZfc2V0X3N1c3BlbmQocmRldiwgMSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkwNSwxMSArOTA1LDExIEBACiAJaWYgKGRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID09IERSTV9TV0lUQ0hfUE9XRVJfT0ZGKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShkZXYtPnBkZXYpOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYtPnBkZXYpKSB7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlwY2lfc2V0X21hc3RlcihkZXYtPnBkZXYpOwpAQCAtOTIwLDcgKzkyMCw3IEBACiAJcmFkZW9uX3Jlc3RvcmVfYmlvc19zY3JhdGNoX3JlZ3MocmRldik7CiAKIAlyYWRlb25fZmJkZXZfc2V0X3N1c3BlbmQocmRldiwgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAkvKiByZXNldCBocGQgc3RhdGUgKi8KIAlyYWRlb25faHBkX2luaXQocmRldik7CkBAIC05MzYsOCArOTM2LDExIEBACiBpbnQgcmFkZW9uX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKKwlpbnQgcmVzY2hlZDsKIAogCXJhZGVvbl9zYXZlX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYpOworCS8qIGJsb2NrIFRUTSAqLworCXJlc2NoZWQgPSB0dG1fYm9fbG9ja19kZWxheWVkX3dvcmtxdWV1ZSgmcmRldi0+bW1hbi5iZGV2KTsKIAlyYWRlb25fc3VzcGVuZChyZGV2KTsKIAogCXIgPSByYWRlb25fYXNpY19yZXNldChyZGV2KTsKQEAgLTk0Niw2ICs5NDksNyBAQAogCQlyYWRlb25fcmVzdW1lKHJkZXYpOwogCQlyYWRlb25fcmVzdG9yZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2KTsKIAkJZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShyZGV2LT5kZGV2KTsKKwkJdHRtX2JvX3VubG9ja19kZWxheWVkX3dvcmtxdWV1ZSgmcmRldi0+bW1hbi5iZGV2LCByZXNjaGVkKTsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIGJhZCBuZXdzLCBob3cgdG8gdGVsbCBpdCB0byB1c2Vyc3BhY2UgPyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IGQyNmRhYmYuLjNlN2U3ZjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC03ODAsNiArNzgwLDEyNSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIGF2aXZvICovCitzdGF0aWMgdm9pZCBhdml2b19nZXRfZmJfZGl2KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkgICAgIHUzMiB0YXJnZXRfY2xvY2ssCisJCQkgICAgIHUzMiBwb3N0X2RpdiwKKwkJCSAgICAgdTMyIHJlZl9kaXYsCisJCQkgICAgIHUzMiAqZmJfZGl2LAorCQkJICAgICB1MzIgKmZyYWNfZmJfZGl2KQoreworCXUzMiB0bXAgPSBwb3N0X2RpdiAqIHJlZl9kaXY7CisKKwl0bXAgKj0gdGFyZ2V0X2Nsb2NrOworCSpmYl9kaXYgPSB0bXAgLyBwbGwtPnJlZmVyZW5jZV9mcmVxOworCSpmcmFjX2ZiX2RpdiA9IHRtcCAlIHBsbC0+cmVmZXJlbmNlX2ZyZXE7CisKKyAgICAgICAgaWYgKCpmYl9kaXYgPiBwbGwtPm1heF9mZWVkYmFja19kaXYpCisJCSpmYl9kaXYgPSBwbGwtPm1heF9mZWVkYmFja19kaXY7CisgICAgICAgIGVsc2UgaWYgKCpmYl9kaXYgPCBwbGwtPm1pbl9mZWVkYmFja19kaXYpCisgICAgICAgICAgICAgICAgKmZiX2RpdiA9IHBsbC0+bWluX2ZlZWRiYWNrX2RpdjsKK30KKworc3RhdGljIHUzMiBhdml2b19nZXRfcG9zdF9kaXYoc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKKwkJCSAgICAgIHUzMiB0YXJnZXRfY2xvY2spCit7CisJdTMyIHZjbywgcG9zdF9kaXYsIHRtcDsKKworCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9VU0VfUE9TVF9ESVYpCisJCXJldHVybiBwbGwtPnBvc3RfZGl2OworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUCkgeworCQlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfSVNfTENEKQorCQkJdmNvID0gcGxsLT5sY2RfcGxsX291dF9taW47CisJCWVsc2UKKwkJCXZjbyA9IHBsbC0+cGxsX291dF9taW47CisJfSBlbHNlIHsKKwkJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX0lTX0xDRCkKKwkJCXZjbyA9IHBsbC0+bGNkX3BsbF9vdXRfbWF4OworCQllbHNlCisJCQl2Y28gPSBwbGwtPnBsbF9vdXRfbWF4OworCX0KKworCXBvc3RfZGl2ID0gdmNvIC8gdGFyZ2V0X2Nsb2NrOworCXRtcCA9IHZjbyAlIHRhcmdldF9jbG9jazsKKworCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9QUkVGRVJfTUlOTV9PVkVSX01BWFApIHsKKwkJaWYgKHRtcCkKKwkJCXBvc3RfZGl2Kys7CisJfSBlbHNlIHsKKwkJaWYgKCF0bXApCisJCQlwb3N0X2Rpdi0tOworCX0KKworCWlmIChwb3N0X2RpdiA+IHBsbC0+bWF4X3Bvc3RfZGl2KQorCQlwb3N0X2RpdiA9IHBsbC0+bWF4X3Bvc3RfZGl2OworCWVsc2UgaWYgKHBvc3RfZGl2IDwgcGxsLT5taW5fcG9zdF9kaXYpCisJCXBvc3RfZGl2ID0gcGxsLT5taW5fcG9zdF9kaXY7CisKKwlyZXR1cm4gcG9zdF9kaXY7Cit9CisKKyNkZWZpbmUgTUFYX1RPTEVSQU5DRSAxMAorCit2b2lkIHJhZGVvbl9jb21wdXRlX3BsbF9hdml2byhzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJICAgICAgdTMyIGZyZXEsCisJCQkgICAgICB1MzIgKmRvdF9jbG9ja19wLAorCQkJICAgICAgdTMyICpmYl9kaXZfcCwKKwkJCSAgICAgIHUzMiAqZnJhY19mYl9kaXZfcCwKKwkJCSAgICAgIHUzMiAqcmVmX2Rpdl9wLAorCQkJICAgICAgdTMyICpwb3N0X2Rpdl9wKQoreworCXUzMiB0YXJnZXRfY2xvY2sgPSBmcmVxIC8gMTA7CisJdTMyIHBvc3RfZGl2ID0gYXZpdm9fZ2V0X3Bvc3RfZGl2KHBsbCwgdGFyZ2V0X2Nsb2NrKTsKKwl1MzIgcmVmX2RpdiA9IHBsbC0+bWluX3JlZl9kaXY7CisJdTMyIGZiX2RpdiA9IDAsIGZyYWNfZmJfZGl2ID0gMCwgdG1wOworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9SRUZfRElWKQorCQlyZWZfZGl2ID0gcGxsLT5yZWZlcmVuY2VfZGl2OworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9GUkFDX0ZCX0RJVikgeworCQlhdml2b19nZXRfZmJfZGl2KHBsbCwgdGFyZ2V0X2Nsb2NrLCBwb3N0X2RpdiwgcmVmX2RpdiwgJmZiX2RpdiwgJmZyYWNfZmJfZGl2KTsKKwkJZnJhY19mYl9kaXYgPSAoMTAwICogZnJhY19mYl9kaXYpIC8gcGxsLT5yZWZlcmVuY2VfZnJlcTsKKwkJaWYgKGZyYWNfZmJfZGl2ID49IDUpIHsKKwkJCWZyYWNfZmJfZGl2IC09IDU7CisJCQlmcmFjX2ZiX2RpdiA9IGZyYWNfZmJfZGl2IC8gMTA7CisJCQlmcmFjX2ZiX2RpdisrOworCQl9CisJCWlmIChmcmFjX2ZiX2RpdiA+PSAxMCkgeworCQkJZmJfZGl2Kys7CisJCQlmcmFjX2ZiX2RpdiA9IDA7CisJCX0KKwl9IGVsc2UgeworCQl3aGlsZSAocmVmX2RpdiA8PSBwbGwtPm1heF9yZWZfZGl2KSB7CisJCQlhdml2b19nZXRfZmJfZGl2KHBsbCwgdGFyZ2V0X2Nsb2NrLCBwb3N0X2RpdiwgcmVmX2RpdiwKKwkJCQkJICZmYl9kaXYsICZmcmFjX2ZiX2Rpdik7CisJCQlpZiAoZnJhY19mYl9kaXYgPj0gKHBsbC0+cmVmZXJlbmNlX2ZyZXEgLyAyKSkKKwkJCQlmYl9kaXYrKzsKKwkJCWZyYWNfZmJfZGl2ID0gMDsKKwkJCXRtcCA9IChwbGwtPnJlZmVyZW5jZV9mcmVxICogZmJfZGl2KSAvIChwb3N0X2RpdiAqIHJlZl9kaXYpOworCQkJdG1wID0gKHRtcCAqIDEwMDAwKSAvIHRhcmdldF9jbG9jazsKKworCQkJaWYgKHRtcCA+ICgxMDAwMCArIE1BWF9UT0xFUkFOQ0UpKQorCQkJCXJlZl9kaXYrKzsKKwkJCWVsc2UgaWYgKHRtcCA+PSAoMTAwMDAgLSBNQVhfVE9MRVJBTkNFKSkKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQlyZWZfZGl2Kys7CisJCX0KKwl9CisKKwkqZG90X2Nsb2NrX3AgPSAoKHBsbC0+cmVmZXJlbmNlX2ZyZXEgKiBmYl9kaXYgKiAxMCkgKyAocGxsLT5yZWZlcmVuY2VfZnJlcSAqIGZyYWNfZmJfZGl2KSkgLworCQkocmVmX2RpdiAqIHBvc3RfZGl2ICogMTApOworCSpmYl9kaXZfcCA9IGZiX2RpdjsKKwkqZnJhY19mYl9kaXZfcCA9IGZyYWNfZmJfZGl2OworCSpyZWZfZGl2X3AgPSByZWZfZGl2OworCSpwb3N0X2Rpdl9wID0gcG9zdF9kaXY7CisJRFJNX0RFQlVHX0tNUygiJWQsIHBsbCBkaXZpZGVycyAtIGZiOiAlZC4lZCByZWY6ICVkLCBwb3N0ICVkXG4iLAorCQkgICAgICAqZG90X2Nsb2NrX3AsIGZiX2RpdiwgZnJhY19mYl9kaXYsIHJlZl9kaXYsIHBvc3RfZGl2KTsKK30KKworLyogcHJlLWF2aXZvICovCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHJhZGVvbl9kaXYodWludDY0X3QgbiwgdWludDMyX3QgZCkKIHsKIAl1aW50NjRfdCBtb2Q7CkBAIC03OTAsMTMgKzkwOSwxMyBAQAogCXJldHVybiBuOwogfQogCi12b2lkIHJhZGVvbl9jb21wdXRlX3BsbChzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAotCQkJdWludDY0X3QgZnJlcSwKLQkJCXVpbnQzMl90ICpkb3RfY2xvY2tfcCwKLQkJCXVpbnQzMl90ICpmYl9kaXZfcCwKLQkJCXVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAotCQkJdWludDMyX3QgKnJlZl9kaXZfcCwKLQkJCXVpbnQzMl90ICpwb3N0X2Rpdl9wKQordm9pZCByYWRlb25fY29tcHV0ZV9wbGxfbGVnYWN5KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkgICAgICAgdWludDY0X3QgZnJlcSwKKwkJCSAgICAgICB1aW50MzJfdCAqZG90X2Nsb2NrX3AsCisJCQkgICAgICAgdWludDMyX3QgKmZiX2Rpdl9wLAorCQkJICAgICAgIHVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAorCQkJICAgICAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCisJCQkgICAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApCiB7CiAJdWludDMyX3QgbWluX3JlZl9kaXYgPSBwbGwtPm1pbl9yZWZfZGl2OwogCXVpbnQzMl90IG1heF9yZWZfZGl2ID0gcGxsLT5tYXhfcmVmX2RpdjsKQEAgLTgyNiw2ICs5NDUsOSBAQAogCQlwbGxfb3V0X21heCA9IHBsbC0+cGxsX291dF9tYXg7CiAJfQogCisJaWYgKHBsbF9vdXRfbWluID4gNjQ4MDApCisJCXBsbF9vdXRfbWluID0gNjQ4MDA7CisKIAlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfVVNFX1JFRl9ESVYpCiAJCW1pbl9yZWZfZGl2ID0gbWF4X3JlZl9kaXYgPSBwbGwtPnJlZmVyZW5jZV9kaXY7CiAJZWxzZSB7CkBAIC05NjUsNiArMTA4NywxMCBAQAogCSpmcmFjX2ZiX2Rpdl9wID0gYmVzdF9mcmFjX2ZlZWRiYWNrX2RpdjsKIAkqcmVmX2Rpdl9wID0gYmVzdF9yZWZfZGl2OwogCSpwb3N0X2Rpdl9wID0gYmVzdF9wb3N0X2RpdjsKKwlEUk1fREVCVUdfS01TKCIlZCAlZCwgcGxsIGRpdmlkZXJzIC0gZmI6ICVkLiVkIHJlZjogJWQsIHBvc3QgJWRcbiIsCisJCSAgICAgIGZyZXEsIGJlc3RfZnJlcSAvIDEwMDAsIGJlc3RfZmVlZGJhY2tfZGl2LCBiZXN0X2ZyYWNfZmVlZGJhY2tfZGl2LAorCQkgICAgICBiZXN0X3JlZl9kaXYsIGJlc3RfcG9zdF9kaXYpOworCiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCmluZGV4IGQ1NjgwYTAuLjI3NWIyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCkBAIC00OCw3ICs0OCw3IEBACiAgKiAtIDIuNS4wIC0gYWRkIGdldCBhY2NlbCAyIHRvIHdvcmsgYXJvdW5kIGRkeCBicmVha2FnZSBmb3IgZXZlcmdyZWVuCiAgKiAtIDIuNi4wIC0gYWRkIHRpbGluZyBjb25maWcgcXVlcnkgKHI2eHgrKSwgYWRkIGluaXRpYWwgSGlaIHN1cHBvcnQgKHIzMDAtPnI1MDApCiAgKiAgIDIuNy4wIC0gZml4dXBzIGZvciByNjAwIDJEIHRpbGluZyBzdXBwb3J0LiAobm8gZXh0ZXJuYWwgQUJJIGNoYW5nZSksIGFkZCBlZyBkeW4gZ3ByIHJlZ3MKLSAqICAgMi44LjAgLSBwYWdlZmxpcCBzdXBwb3J0LCByNTAwIFVTX0ZPUk1BVCByZWdzLiByNTAwIEFSR0IyMTAxMDEwIGNvbG9yYnVmLCByMzAwLT5yNTAwIENNQVNLCisgKiAgIDIuOC4wIC0gcGFnZWZsaXAgc3VwcG9ydCwgcjUwMCBVU19GT1JNQVQgcmVncy4gcjUwMCBBUkdCMjEwMTAxMCBjb2xvcmJ1ZiwgcjMwMC0+cjUwMCBDTUFTSywgY2xvY2sgY3J5c3RhbCBxdWVyeQogICovCiAjZGVmaW5lIEtNU19EUklWRVJfTUFKT1IJMgogI2RlZmluZSBLTVNfRFJJVkVSX01JTk9SCTgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKaW5kZXggNDQ4ZWJhOC4uNWNiYTQ2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKQEAgLTE1MjQsNiArMTUyNCw3IEBACiAjZGVmaW5lIFI2MDBfQ1BfUkJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxMDQKICMgICAgICAgZGVmaW5lIFI2MDBfUkJfQlVGU1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKICMgICAgICAgZGVmaW5lIFI2MDBfUkJfQkxLU1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMJZGVmaW5lIFI2MDBfQlVGX1NXQVBfMzJCSVQJCSAgICAgICAgICAgICAgICgyIDw8IDE2KQogIyAgICAgICBkZWZpbmUgUjYwMF9SQl9OT19VUERBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjcpCiAjICAgICAgIGRlZmluZSBSNjAwX1JCX1JQVFJfV1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKICNkZWZpbmUgUjYwMF9DUF9SQl9SUFRSX1dSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzEwOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKaW5kZXggOGZkMTg0Mi4uYjQyNzQ4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCkBAIC02NDEsNyArNjQxLDcgQEAKIAlzd2l0Y2ggKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCOiAvKiBIRE1JLUIgaXMgYmFzaWNhbGx5IERMLURWSTsgYW5hbG9nIHdvcmtzIGZpbmUgKi8KLQkJaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkgeworCQlpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpICYmIHJhZGVvbl9hdWRpbykgewogCQkJLyogZml4IG1lICovCiAJCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQogCQkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC02NTUsNyArNjU1LDcgQEAKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBOgogCWRlZmF1bHQ6Ci0JCWlmIChkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8ocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpIHsKKwkJaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSAmJiByYWRlb25fYXVkaW8pIHsKIAkJCS8qIGZpeCBtZSAqLwogCQkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKIAkJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwpAQCAtNjczLDcgKzY3Myw3IEBACiAJCWlmICgoZGlnX2Nvbm5lY3Rvci0+ZHBfc2lua190eXBlID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfRElTUExBWVBPUlQpIHx8CiAJCSAgICAoZGlnX2Nvbm5lY3Rvci0+ZHBfc2lua190eXBlID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfZURQKSkKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EUDsKLQkJZWxzZSBpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKSB7CisJCWVsc2UgaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSAmJiByYWRlb25fYXVkaW8pIHsKIAkJCS8qIGZpeCBtZSAqLwogCQkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKIAkJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwpAQCAtOTEwLDcgKzkxMCw3IEBACiAKIAlhcmdzLnYxLnVjQWN0aW9uID0gYWN0aW9uOwogCWlmIChhY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCkgewotCQlhcmdzLnYxLnVzSW5pdEluZm8gPSBjb25uZWN0b3Jfb2JqZWN0X2lkOworCQlhcmdzLnYxLnVzSW5pdEluZm8gPSBjcHVfdG9fbGUxNihjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAl9IGVsc2UgaWYgKGFjdGlvbiA9PSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9TRVRVUF9WU0VNUEgpIHsKIAkJYXJncy52MS5hc01vZGUudWNMYW5lU2VsID0gbGFuZV9udW07CiAJCWFyZ3MudjEuYXNNb2RlLnVjTGFuZVNldCA9IGxhbmVfc2V0OwpAQCAtMTA2Myw3ICsxMDYzLDcgQEAKIAlpZiAoIUFTSUNfSVNfRENFNChyZGV2KSkKIAkJcmV0dXJuOwogCi0JaWYgKChhY3Rpb24gIT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fUE9XRVJfT04pIHx8CisJaWYgKChhY3Rpb24gIT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fUE9XRVJfT04pICYmCiAJICAgIChhY3Rpb24gIT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fUE9XRVJfT0ZGKSkKIAkJcmV0dXJuOwogCkBAIC0xMTQwLDcgKzExNDAsNyBAQAogCQljYXNlIDM6CiAJCQlhcmdzLnYzLnNFeHRFbmNvZGVyLnVjQWN0aW9uID0gYWN0aW9uOwogCQkJaWYgKGFjdGlvbiA9PSBFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19FTkNPREVSX0lOSVQpCi0JCQkJYXJncy52My5zRXh0RW5jb2Rlci51c0Nvbm5lY3RvcklkID0gY29ubmVjdG9yX29iamVjdF9pZDsKKwkJCQlhcmdzLnYzLnNFeHRFbmNvZGVyLnVzQ29ubmVjdG9ySWQgPSBjcHVfdG9fbGUxNihjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAkJCWVsc2UKIAkJCQlhcmdzLnYzLnNFeHRFbmNvZGVyLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDEwKTsKIAkJCWFyZ3MudjMuc0V4dEVuY29kZXIudWNFbmNvZGVyTW9kZSA9IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CkBAIC0xNTcwLDExICsxNTcwLDIxIEBACiAJfQogCiAJLyogc2V0IHNjYWxlciBjbGVhcnMgdGhpcyBvbiBzb21lIGNoaXBzICovCi0JLyogWFhYIGNoZWNrIERDRTQgKi8KLQlpZiAoIShyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkpIHsKLQkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikgJiYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpKQotCQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKLQkJCSAgICAgICBBVklWT19EMU1PREVfSU5URVJMRUFWRV9FTik7CisJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikgJiYKKwkgICAgKCEocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpKSkgeworCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CisJCQlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJCQlXUkVHMzIoRVZFUkdSRUVOX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCQkJCSAgICAgICBFVkVSR1JFRU5fSU5URVJMRUFWRV9FTik7CisJCQllbHNlCisJCQkJV1JFRzMyKEVWRVJHUkVFTl9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisJCX0gZWxzZSB7CisJCQlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCQkJCSAgICAgICBBVklWT19EMU1PREVfSU5URVJMRUFWRV9FTik7CisJCQllbHNlCisJCQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCmluZGV4IDY2MzI0YjUuLmNjNDRiZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwpAQCAtMTEzLDExICsxMTMsMTQgQEAKIAl1MzIgdGlsaW5nX2ZsYWdzID0gMDsKIAlpbnQgcmV0OwogCWludCBhbGlnbmVkX3NpemUsIHNpemU7CisJaW50IGhlaWdodCA9IG1vZGVfY21kLT5oZWlnaHQ7CiAKIAkvKiBuZWVkIHRvIGFsaWduIHBpdGNoIHdpdGggY3J0YyBsaW1pdHMgKi8KIAltb2RlX2NtZC0+cGl0Y2ggPSByYWRlb25fYWxpZ25fcGl0Y2gocmRldiwgbW9kZV9jbWQtPndpZHRoLCBtb2RlX2NtZC0+YnBwLCBmYl90aWxlZCkgKiAoKG1vZGVfY21kLT5icHAgKyAxKSAvIDgpOwogCi0Jc2l6ZSA9IG1vZGVfY21kLT5waXRjaCAqIG1vZGVfY21kLT5oZWlnaHQ7CisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCisJCWhlaWdodCA9IEFMSUdOKG1vZGVfY21kLT5oZWlnaHQsIDgpOworCXNpemUgPSBtb2RlX2NtZC0+cGl0Y2ggKiBoZWlnaHQ7CiAJYWxpZ25lZF9zaXplID0gQUxJR04oc2l6ZSwgUEFHRV9TSVpFKTsKIAlyZXQgPSByYWRlb25fZ2VtX29iamVjdF9jcmVhdGUocmRldiwgYWxpZ25lZF9zaXplLCAwLAogCQkJCSAgICAgICBSQURFT05fR0VNX0RPTUFJTl9WUkFNLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCmluZGV4IGEyODk2NDYuLjllYzgzMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKQEAgLTExMCwxMSArMTEwLDE0IEBACiAKIGludCByYWRlb25faXJxX2ttc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCWludCBpOwogCWludCByID0gMDsKIAogCUlOSVRfV09SSygmcmRldi0+aG90cGx1Z193b3JrLCByYWRlb25faG90cGx1Z193b3JrX2Z1bmMpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnJkZXYtPmlycS5zd19sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmRldi0+bnVtX2NydGM7IGkrKykKKwkJc3Bpbl9sb2NrX2luaXQoJnJkZXYtPmlycS5wZmxpcF9sb2NrW2ldKTsKIAlyID0gZHJtX3ZibGFua19pbml0KHJkZXYtPmRkZXYsIHJkZXYtPm51bV9jcnRjKTsKIAlpZiAocikgewogCQlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKaW5kZXggMjhhNTNlNGEuLjgzODdkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCkBAIC0yMDEsNiArMjAxLDEwIEBACiAJCX0KIAkJcmFkZW9uX3NldF9maWxwX3JpZ2h0cyhkZXYsICZyZGV2LT5jbWFza19maWxwLCBmaWxwLCAmdmFsdWUpOwogCQlicmVhazsKKwljYXNlIFJBREVPTl9JTkZPX0NMT0NLX0NSWVNUQUxfRlJFUToKKwkJLyogcmV0dXJuIGNsb2NrIHZhbHVlIGluIEtIeiAqLworCQl2YWx1ZSA9IHJkZXYtPmNsb2NrLnNwbGwucmVmZXJlbmNlX2ZyZXEgKiAxMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0RFQlVHX0tNUygiSW52YWxpZCByZXF1ZXN0ICVkXG4iLCBpbmZvLT5yZXF1ZXN0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNDMsNiArMjQ3LDggQEAKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaWYgKHJkZXYtPmh5cGVyel9maWxwID09IGZpbGVfcHJpdikKIAkJcmRldi0+aHlwZXJ6X2ZpbHAgPSBOVUxMOworCWlmIChyZGV2LT5jbWFza19maWxwID09IGZpbGVfcHJpdikKKwkJcmRldi0+Y21hc2tfZmlscCA9IE5VTEw7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwppbmRleCBhY2UyZTYzLi5jZjA2MzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKQEAgLTc3OCw5ICs3NzgsOSBAQAogCURSTV9ERUJVR19LTVMoIlxuIik7CiAKIAlpZiAoIXVzZV9iaW9zX2RpdnMpIHsKLQkJcmFkZW9uX2NvbXB1dGVfcGxsKHBsbCwgbW9kZS0+Y2xvY2ssCi0JCQkJICAgJmZyZXEsICZmZWVkYmFja19kaXYsICZmcmFjX2ZiX2RpdiwKLQkJCQkgICAmcmVmZXJlbmNlX2RpdiwgJnBvc3RfZGl2aWRlcik7CisJCXJhZGVvbl9jb21wdXRlX3BsbF9sZWdhY3kocGxsLCBtb2RlLT5jbG9jaywKKwkJCQkJICAmZnJlcSwgJmZlZWRiYWNrX2RpdiwgJmZyYWNfZmJfZGl2LAorCQkJCQkgICZyZWZlcmVuY2VfZGl2LCAmcG9zdF9kaXZpZGVyKTsKIAogCQlmb3IgKHBvc3RfZGl2ID0gJnBvc3RfZGl2c1swXTsgcG9zdF9kaXYtPmRpdmlkZXI7ICsrcG9zdF9kaXYpIHsKIAkJCWlmIChwb3N0X2Rpdi0+ZGl2aWRlciA9PSBwb3N0X2RpdmlkZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggMTJiZGVhYi4uYTY3MGNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtMTQ5LDYgKzE0OSw3IEBACiAjZGVmaW5lIFJBREVPTl9QTExfUFJFRkVSX0NMT1NFU1RfTE9XRVIgKDEgPDwgMTEpCiAjZGVmaW5lIFJBREVPTl9QTExfVVNFX1BPU1RfRElWICAgICAgICAgKDEgPDwgMTIpCiAjZGVmaW5lIFJBREVPTl9QTExfSVNfTENEICAgICAgICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIFJBREVPTl9QTExfUFJFRkVSX01JTk1fT1ZFUl9NQVhQICgxIDw8IDE0KQogCiBzdHJ1Y3QgcmFkZW9uX3BsbCB7CiAJLyogcmVmZXJlbmNlIGZyZXF1ZW5jeSAqLwpAQCAtMjA4LDYgKzIwOSw3IEBACiAJQ1RfRU1BQywKIAlDVF9STjUwX1BPV0VSLAogCUNUX01BQ19YODAwLAorCUNUX01BQ19HNV85NjAwLAogfTsKIAogZW51bSByYWRlb25fZHZvX2NoaXAgewpAQCAtNTEwLDEzICs1MTIsMjEgQEAKIAkJCQkJICAgICBzdHJ1Y3QgcmFkZW9uX2F0b21fc3MgKnNzLAogCQkJCQkgICAgIGludCBpZCwgdTMyIGNsb2NrKTsKIAotZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCi0JCQkgICAgICAgdWludDY0X3QgZnJlcSwKLQkJCSAgICAgICB1aW50MzJfdCAqZG90X2Nsb2NrX3AsCi0JCQkgICAgICAgdWludDMyX3QgKmZiX2Rpdl9wLAotCQkJICAgICAgIHVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAotCQkJICAgICAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCi0JCQkgICAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApOworZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2xlZ2FjeShzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJCSAgICAgIHVpbnQ2NF90IGZyZXEsCisJCQkJICAgICAgdWludDMyX3QgKmRvdF9jbG9ja19wLAorCQkJCSAgICAgIHVpbnQzMl90ICpmYl9kaXZfcCwKKwkJCQkgICAgICB1aW50MzJfdCAqZnJhY19mYl9kaXZfcCwKKwkJCQkgICAgICB1aW50MzJfdCAqcmVmX2Rpdl9wLAorCQkJCSAgICAgIHVpbnQzMl90ICpwb3N0X2Rpdl9wKTsKKworZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2F2aXZvKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkJICAgICB1MzIgZnJlcSwKKwkJCQkgICAgIHUzMiAqZG90X2Nsb2NrX3AsCisJCQkJICAgICB1MzIgKmZiX2Rpdl9wLAorCQkJCSAgICAgdTMyICpmcmFjX2ZiX2Rpdl9wLAorCQkJCSAgICAgdTMyICpyZWZfZGl2X3AsCisJCQkJICAgICB1MzIgKnBvc3RfZGl2X3ApOwogCiBleHRlcm4gdm9pZCByYWRlb25fc2V0dXBfZW5jb2Rlcl9jbG9uZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCmluZGV4IDNiMWIyYmYuLjJhZWQwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwpAQCAtNDMwLDcgKzQzMCw3IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBwY2lfZ2V0X2RydmRhdGEodG9fcGNpX2RldihkZXYpKTsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRkZXYtPmRldl9wcml2YXRlOwotCXUzMiB0ZW1wOworCWludCB0ZW1wOwogCiAJc3dpdGNoIChyZGV2LT5wbS5pbnRfdGhlcm1hbF90eXBlKSB7CiAJY2FzZSBUSEVSTUFMX1RZUEVfUlY2WFg6CkBAIC02NDYsNiArNjQ2LDkgQEAKICNlbmRpZgogCX0KIAorCWlmIChyZGV2LT5wbS5wb3dlcl9zdGF0ZSkKKwkJa2ZyZWUocmRldi0+cG0ucG93ZXJfc3RhdGUpOworCiAJcmFkZW9uX2h3bW9uX2ZpbmkocmRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKaW5kZXggM2NkNGRhYy4uZWM5M2E3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKQEAgLTM3NSw2ICszNzUsOCBAQAogI2RlZmluZSBSQURFT05fQ09ORklHX0FQRVJfU0laRSAgICAgICAgICAgICAweDAxMDgKICNkZWZpbmUgUkFERU9OX0NPTkZJR19CT05EUyAgICAgICAgICAgICAgICAgMHgwMGU4CiAjZGVmaW5lIFJBREVPTl9DT05GSUdfQ05UTCAgICAgICAgICAgICAgICAgIDB4MDBlMAorIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19WR0FfUkFNX0VOICAgICAgICAoMSA8PCA4KQorIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19WR0FfSU9fRElTICAgICAgICAoMSA8PCA5KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19BVElfUkVWX0ExMSAgICAgICAoMCAgIDw8IDE2KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19BVElfUkVWX0ExMiAgICAgICAoMSAgIDw8IDE2KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19BVElfUkVWX0ExMyAgICAgICAoMiAgIDw8IDE2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwppbmRleCAxMjcyZTRiLi5lNWIyY2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwpAQCAtNzg3LDkgKzc4Nyw5IEBACiAJCXJhZGVvbl9tZW1fdHlwZXNfbGlzdFtpXS5zaG93ID0gJnJhZGVvbl9tbV9kdW1wX3RhYmxlOwogCQlyYWRlb25fbWVtX3R5cGVzX2xpc3RbaV0uZHJpdmVyX2ZlYXR1cmVzID0gMDsKIAkJaWYgKGkgPT0gMCkKLQkJCXJhZGVvbl9tZW1fdHlwZXNfbGlzdFtpXS5kYXRhID0gJnJkZXYtPm1tYW4uYmRldi5tYW5bVFRNX1BMX1ZSQU1dLnByaXY7CisJCQlyYWRlb25fbWVtX3R5cGVzX2xpc3RbaV0uZGF0YSA9IHJkZXYtPm1tYW4uYmRldi5tYW5bVFRNX1BMX1ZSQU1dLnByaXY7CiAJCWVsc2UKLQkJCXJhZGVvbl9tZW1fdHlwZXNfbGlzdFtpXS5kYXRhID0gJnJkZXYtPm1tYW4uYmRldi5tYW5bVFRNX1BMX1RUXS5wcml2OworCQkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLmRhdGEgPSByZGV2LT5tbWFuLmJkZXYubWFuW1RUTV9QTF9UVF0ucHJpdjsKIAogCX0KIAkvKiBBZGQgdHRtIHBhZ2UgcG9vbCB0byBkZWJ1Z2ZzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IzMDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IzMDAKaW5kZXggYjUwNmVjMS4uZThhMTc4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yMzAwCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjMwMApAQCAtNjgzLDkgKzY4Myw3IEBACiAweDRERjQgVVNfQUxVX0NPTlNUX0dfMzEKIDB4NERGOCBVU19BTFVfQ09OU1RfQl8zMQogMHg0REZDIFVTX0FMVV9DT05TVF9BXzMxCi0weDRFMDQgUkIzRF9CTEVORENOVExfUjMKIDB4NEUwOCBSQjNEX0FCTEVORENOVExfUjMKLTB4NEUwQyBSQjNEX0NPTE9SX0NIQU5ORUxfTUFTSwogMHg0RTEwIFJCM0RfQ09OU1RBTlRfQ09MT1IKIDB4NEUxNCBSQjNEX0NPTE9SX0NMRUFSX1ZBTFVFCiAweDRFMTggUkIzRF9ST1BDTlRMX1IzCkBAIC03MDYsMTMgKzcwNCwxMSBAQAogMHg0RTc0IFJCM0RfQ01BU0tfV1JJTkRFWAogMHg0RTc4IFJCM0RfQ01BU0tfRFdPUkQKIDB4NEU3QyBSQjNEX0NNQVNLX1JESU5ERVgKLTB4NEU4MCBSQjNEX0FBUkVTT0xWRV9PRkZTRVQKLTB4NEU4NCBSQjNEX0FBUkVTT0xWRV9QSVRDSAotMHg0RTg4IFJCM0RfQUFSRVNPTFZFX0NUTAogMHg0RUEwIFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfTFRFX1RIUkVTSE9MRAogMHg0RUE0IFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfR1RFX1RIUkVTSE9MRAogMHg0RjA0IFpCX1pTVEVOQ0lMQ05UTAogMHg0RjA4IFpCX1NURU5DSUxSRUZNQVNLCiAweDRGMTQgWkJfWlRPUAogMHg0RjE4IFpCX1pDQUNIRV9DVExTVEFUCisweDRGMjggWkJfREVQVEhDTEVBUlZBTFVFCiAweDRGNTggWkJfWlBBU1NfREFUQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNDIwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNDIwCmluZGV4IDhjMTIxNGMuLjcyMjA3NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjQyMAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I0MjAKQEAgLTEzMCw3ICsxMzAsNiBAQAogMHg0MDFDIEdCX1NFTEVDVAogMHg0MDIwIEdCX0FBX0NPTkZJRwogMHg0MDI0IEdCX0ZJRk9fU0laRQotMHg0MDI4IEdCX1pfUEVRX0NPTkZJRwogMHg0MTAwIFRYX0lOVkFMVEFHUwogMHg0MjAwIEdBX1BPSU5UX1MwCiAweDQyMDQgR0FfUE9JTlRfVDAKQEAgLTc1MCw5ICs3NDksNyBAQAogMHg0REY0IFVTX0FMVV9DT05TVF9HXzMxCiAweDRERjggVVNfQUxVX0NPTlNUX0JfMzEKIDB4NERGQyBVU19BTFVfQ09OU1RfQV8zMQotMHg0RTA0IFJCM0RfQkxFTkRDTlRMX1IzCiAweDRFMDggUkIzRF9BQkxFTkRDTlRMX1IzCi0weDRFMEMgUkIzRF9DT0xPUl9DSEFOTkVMX01BU0sKIDB4NEUxMCBSQjNEX0NPTlNUQU5UX0NPTE9SCiAweDRFMTQgUkIzRF9DT0xPUl9DTEVBUl9WQUxVRQogMHg0RTE4IFJCM0RfUk9QQ05UTF9SMwpAQCAtNzczLDEzICs3NzAsMTEgQEAKIDB4NEU3NCBSQjNEX0NNQVNLX1dSSU5ERVgKIDB4NEU3OCBSQjNEX0NNQVNLX0RXT1JECiAweDRFN0MgUkIzRF9DTUFTS19SRElOREVYCi0weDRFODAgUkIzRF9BQVJFU09MVkVfT0ZGU0VUCi0weDRFODQgUkIzRF9BQVJFU09MVkVfUElUQ0gKLTB4NEU4OCBSQjNEX0FBUkVTT0xWRV9DVEwKIDB4NEVBMCBSQjNEX0RJU0NBUkRfU1JDX1BJWEVMX0xURV9USFJFU0hPTEQKIDB4NEVBNCBSQjNEX0RJU0NBUkRfU1JDX1BJWEVMX0dURV9USFJFU0hPTEQKIDB4NEYwNCBaQl9aU1RFTkNJTENOVEwKIDB4NEYwOCBaQl9TVEVOQ0lMUkVGTUFTSwogMHg0RjE0IFpCX1pUT1AKIDB4NEYxOCBaQl9aQ0FDSEVfQ1RMU1RBVAorMHg0RjI4IFpCX0RFUFRIQ0xFQVJWQUxVRQogMHg0RjU4IFpCX1pQQVNTX0RBVEEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnM2MDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3JzNjAwCmluZGV4IDA4MjhkODAuLmQ5ZjYyODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnM2MDAKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yczYwMApAQCAtNzQ5LDkgKzc0OSw3IEBACiAweDRERjQgVVNfQUxVX0NPTlNUX0dfMzEKIDB4NERGOCBVU19BTFVfQ09OU1RfQl8zMQogMHg0REZDIFVTX0FMVV9DT05TVF9BXzMxCi0weDRFMDQgUkIzRF9CTEVORENOVExfUjMKIDB4NEUwOCBSQjNEX0FCTEVORENOVExfUjMKLTB4NEUwQyBSQjNEX0NPTE9SX0NIQU5ORUxfTUFTSwogMHg0RTEwIFJCM0RfQ09OU1RBTlRfQ09MT1IKIDB4NEUxNCBSQjNEX0NPTE9SX0NMRUFSX1ZBTFVFCiAweDRFMTggUkIzRF9ST1BDTlRMX1IzCkBAIC03NzIsMTMgKzc3MCwxMSBAQAogMHg0RTc0IFJCM0RfQ01BU0tfV1JJTkRFWAogMHg0RTc4IFJCM0RfQ01BU0tfRFdPUkQKIDB4NEU3QyBSQjNEX0NNQVNLX1JESU5ERVgKLTB4NEU4MCBSQjNEX0FBUkVTT0xWRV9PRkZTRVQKLTB4NEU4NCBSQjNEX0FBUkVTT0xWRV9QSVRDSAotMHg0RTg4IFJCM0RfQUFSRVNPTFZFX0NUTAogMHg0RUEwIFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfTFRFX1RIUkVTSE9MRAogMHg0RUE0IFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfR1RFX1RIUkVTSE9MRAogMHg0RjA0IFpCX1pTVEVOQ0lMQ05UTAogMHg0RjA4IFpCX1NURU5DSUxSRUZNQVNLCiAweDRGMTQgWkJfWlRPUAogMHg0RjE4IFpCX1pDQUNIRV9DVExTVEFUCisweDRGMjggWkJfREVQVEhDTEVBUlZBTFVFCiAweDRGNTggWkJfWlBBU1NfREFUQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ydjUxNSBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnY1MTUKaW5kZXggZWY0MjJiYi4uOTExYThmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ydjUxNQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1CkBAIC0xNjQsNyArMTY0LDYgQEAKIDB4NDAxQyBHQl9TRUxFQ1QKIDB4NDAyMCBHQl9BQV9DT05GSUcKIDB4NDAyNCBHQl9GSUZPX1NJWkUKLTB4NDAyOCBHQl9aX1BFUV9DT05GSUcKIDB4NDEwMCBUWF9JTlZBTFRBR1MKIDB4NDExNCBTVV9URVhfV1JBUF9QUzMKIDB4NDExOCBQUzNfRU5BQkxFCkBAIC00NjEsOSArNDYwLDcgQEAKIDB4NERGNCBVU19BTFVfQ09OU1RfR18zMQogMHg0REY4IFVTX0FMVV9DT05TVF9CXzMxCiAweDRERkMgVVNfQUxVX0NPTlNUX0FfMzEKLTB4NEUwNCBSQjNEX0JMRU5EQ05UTF9SMwogMHg0RTA4IFJCM0RfQUJMRU5EQ05UTF9SMwotMHg0RTBDIFJCM0RfQ09MT1JfQ0hBTk5FTF9NQVNLCiAweDRFMTAgUkIzRF9DT05TVEFOVF9DT0xPUgogMHg0RTE0IFJCM0RfQ09MT1JfQ0xFQVJfVkFMVUUKIDB4NEUxOCBSQjNEX1JPUENOVExfUjMKQEAgLTQ4NCw5ICs0ODEsNiBAQAogMHg0RTc0IFJCM0RfQ01BU0tfV1JJTkRFWAogMHg0RTc4IFJCM0RfQ01BU0tfRFdPUkQKIDB4NEU3QyBSQjNEX0NNQVNLX1JESU5ERVgKLTB4NEU4MCBSQjNEX0FBUkVTT0xWRV9PRkZTRVQKLTB4NEU4NCBSQjNEX0FBUkVTT0xWRV9QSVRDSAotMHg0RTg4IFJCM0RfQUFSRVNPTFZFX0NUTAogMHg0RUEwIFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfTFRFX1RIUkVTSE9MRAogMHg0RUE0IFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfR1RFX1RIUkVTSE9MRAogMHg0RUY4IFJCM0RfQ09OU1RBTlRfQ09MT1JfQVIKQEAgLTQ5Niw0ICs0OTAsNSBAQAogMHg0RjE0IFpCX1pUT1AKIDB4NEYxOCBaQl9aQ0FDSEVfQ1RMU1RBVAogMHg0RjU4IFpCX1pQQVNTX0RBVEEKKzB4NEYyOCBaQl9ERVBUSENMRUFSVkFMVUUKIDB4NEZENCBaQl9TVEVOQ0lMUkVGTUFTS19CRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCmluZGV4IDU1MTJlNGUuLmM3NjI4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKQEAgLTIwMyw2ICsyMDMsOSBAQAogCXJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9mcmVlKHJkZXYpOwogfQogCisjZGVmaW5lIFJTNDAwX1BURV9XUklURUFCTEUgKDEgPDwgMikKKyNkZWZpbmUgUlM0MDBfUFRFX1JFQURBQkxFICAoMSA8PCAzKQorCiBpbnQgcnM0MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpCiB7CiAJdWludDMyX3QgZW50cnk7CkBAIC0yMTMsNyArMjE2LDcgQEAKIAogCWVudHJ5ID0gKGxvd2VyXzMyX2JpdHMoYWRkcikgJiBQQUdFX01BU0spIHwKIAkJKCh1cHBlcl8zMl9iaXRzKGFkZHIpICYgMHhmZikgPDwgNCkgfAotCQkweGM7CisJCVJTNDAwX1BURV9XUklURUFCTEUgfCBSUzQwMF9QVEVfUkVBREFCTEU7CiAJZW50cnkgPSBjcHVfdG9fbGUzMihlbnRyeSk7CiAJcmRldi0+Z2FydC50YWJsZS5yYW0ucHRyW2ldID0gZW50cnk7CiAJcmV0dXJuIDA7CkBAIC0yMjYsOCArMjI5LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewogCQkvKiByZWFkIE1DX1NUQVRVUyAqLwotCQl0bXAgPSBSUkVHMzIoMHgwMTUwKTsKLQkJaWYgKHRtcCAmICgxIDw8IDIpKSB7CisJCXRtcCA9IFJSRUczMihSQURFT05fTUNfU1RBVFVTKTsKKwkJaWYgKHRtcCAmIFJBREVPTl9NQ19JRExFKSB7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlEUk1fVURFTEFZKDEpOwpAQCAtMjQxLDcgKzI0NCw3IEBACiAJcjQyMF9waXBlc19pbml0KHJkZXYpOwogCWlmIChyczQwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJzNDAwOiBGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uICUwOHhcbiIsIFJSRUczMigweDE1MCkpOworCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi4gJTA4eFxuIiwgUlJFRzMyKFJBREVPTl9NQ19TVEFUVVMpKTsKIAl9CiB9CiAKQEAgLTMwMCw5ICszMDMsOSBAQAogCQlzZXFfcHJpbnRmKG0sICJNQ0NGR19BR1BfQkFTRV8yIDB4JTA4eFxuIiwgdG1wKTsKIAkJdG1wID0gUlJFRzMyX01DKFJTNjkwX01DQ0ZHX0FHUF9MT0NBVElPTik7CiAJCXNlcV9wcmludGYobSwgIk1DQ0ZHX0FHUF9MT0NBVElPTiAweCUwOHhcbiIsIHRtcCk7Ci0JCXRtcCA9IFJSRUczMl9NQygweDEwMCk7CisJCXRtcCA9IFJSRUczMl9NQyhSUzY5MF9NQ0NGR19GQl9MT0NBVElPTik7CiAJCXNlcV9wcmludGYobSwgIk1DQ0ZHX0ZCX0xPQ0FUSU9OIDB4JTA4eFxuIiwgdG1wKTsKLQkJdG1wID0gUlJFRzMyKDB4MTM0KTsKKwkJdG1wID0gUlJFRzMyKFJTNjkwX0hEUF9GQl9MT0NBVElPTik7CiAJCXNlcV9wcmludGYobSwgIkhEUF9GQl9MT0NBVElPTiAweCUwOHhcbiIsIHRtcCk7CiAJfSBlbHNlIHsKIAkJdG1wID0gUlJFRzMyKFJBREVPTl9BR1BfQkFTRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKaW5kZXggMDEzN2QzZS4uNjYzOGM4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwpAQCAtNzcsOSArNzcsOSBAQAogCQlzd2l0Y2ggKGNyZXYpIHsKIAkJY2FzZSAxOgogCQkJdG1wLmZ1bGwgPSBkZml4ZWRfY29uc3QoMTAwKTsKLQkJCXJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QoaW5mby0+aW5mby51bEJvb3RVcE1lbW9yeUNsb2NrKTsKKwkJCXJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QobGUzMl90b19jcHUoaW5mby0+aW5mby51bEJvb3RVcE1lbW9yeUNsb2NrKSk7CiAJCQlyZGV2LT5wbS5pZ3Bfc2lkZXBvcnRfbWNsay5mdWxsID0gZGZpeGVkX2RpdihyZGV2LT5wbS5pZ3Bfc2lkZXBvcnRfbWNsaywgdG1wKTsKLQkJCWlmIChpbmZvLT5pbmZvLnVzSzhNZW1vcnlDbG9jaykKKwkJCWlmIChsZTE2X3RvX2NwdShpbmZvLT5pbmZvLnVzSzhNZW1vcnlDbG9jaykpCiAJCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QobGUxNl90b19jcHUoaW5mby0+aW5mby51c0s4TWVtb3J5Q2xvY2spKTsKIAkJCWVsc2UgaWYgKHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsaykgewogCQkJCXJkZXYtPnBtLmlncF9zeXN0ZW1fbWNsay5mdWxsID0gZGZpeGVkX2NvbnN0KHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsayk7CkBAIC05MSwxNiArOTEsMTYgQEAKIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQl0bXAuZnVsbCA9IGRmaXhlZF9jb25zdCgxMDApOwotCQkJcmRldi0+cG0uaWdwX3NpZGVwb3J0X21jbGsuZnVsbCA9IGRmaXhlZF9jb25zdChpbmZvLT5pbmZvX3YyLnVsQm9vdFVwU2lkZVBvcnRDbG9jayk7CisJCQlyZGV2LT5wbS5pZ3Bfc2lkZXBvcnRfbWNsay5mdWxsID0gZGZpeGVkX2NvbnN0KGxlMzJfdG9fY3B1KGluZm8tPmluZm9fdjIudWxCb290VXBTaWRlUG9ydENsb2NrKSk7CiAJCQlyZGV2LT5wbS5pZ3Bfc2lkZXBvcnRfbWNsay5mdWxsID0gZGZpeGVkX2RpdihyZGV2LT5wbS5pZ3Bfc2lkZXBvcnRfbWNsaywgdG1wKTsKLQkJCWlmIChpbmZvLT5pbmZvX3YyLnVsQm9vdFVwVU1BQ2xvY2spCi0JCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QoaW5mby0+aW5mb192Mi51bEJvb3RVcFVNQUNsb2NrKTsKKwkJCWlmIChsZTMyX3RvX2NwdShpbmZvLT5pbmZvX3YyLnVsQm9vdFVwVU1BQ2xvY2spKQorCQkJCXJkZXYtPnBtLmlncF9zeXN0ZW1fbWNsay5mdWxsID0gZGZpeGVkX2NvbnN0KGxlMzJfdG9fY3B1KGluZm8tPmluZm9fdjIudWxCb290VXBVTUFDbG9jaykpOwogCQkJZWxzZSBpZiAocmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrKQogCQkJCXJkZXYtPnBtLmlncF9zeXN0ZW1fbWNsay5mdWxsID0gZGZpeGVkX2NvbnN0KHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsayk7CiAJCQllbHNlCiAJCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QoNjY3MDApOwogCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfZGl2KHJkZXYtPnBtLmlncF9zeXN0ZW1fbWNsaywgdG1wKTsKLQkJCXJkZXYtPnBtLmlncF9odF9saW5rX2Nsay5mdWxsID0gZGZpeGVkX2NvbnN0KGluZm8tPmluZm9fdjIudWxIVExpbmtGcmVxKTsKKwkJCXJkZXYtPnBtLmlncF9odF9saW5rX2Nsay5mdWxsID0gZGZpeGVkX2NvbnN0KGxlMzJfdG9fY3B1KGluZm8tPmluZm9fdjIudWxIVExpbmtGcmVxKSk7CiAJCQlyZGV2LT5wbS5pZ3BfaHRfbGlua19jbGsuZnVsbCA9IGRmaXhlZF9kaXYocmRldi0+cG0uaWdwX2h0X2xpbmtfY2xrLCB0bXApOwogCQkJcmRldi0+cG0uaWdwX2h0X2xpbmtfd2lkdGguZnVsbCA9IGRmaXhlZF9jb25zdChsZTE2X3RvX2NwdShpbmZvLT5pbmZvX3YyLnVzTWluSFRMaW5rV2lkdGgpKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCmluZGV4IDVkNTY5ZjQuLjY0YjU3YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKQEAgLTY5LDEzICs2OSwxMyBAQAogCQkJICBJU1lOQ19DUFNDUkFUQ0hfSURMRUdVSSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChXQUlUX1VOVElMLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgV0FJVF8yRF9JRExFQ0xFQU4gfCBXQUlUXzNEX0lETEVDTEVBTik7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMCgweDE3MEMsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxIDw8IDMxKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFIzMDBfRFNUX1BJUEVfQ09ORklHLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUjMwMF9QSVBFX0FVVE9fQ09ORklHKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKEdCX1NFTEVDVCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoR0JfRU5BQkxFLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMCgweDQyQzgsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFI1MDBfU1VfUkVHX0RFU1QsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoMSA8PCByZGV2LT5udW1fZ2JfcGlwZXMpIC0gMSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChWQVBfSU5ERVhfT0ZGU0VULCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CkBAIC0xNTMsOCArMTUzLDggQEAKIAl9CiAJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKLQlnYl9waXBlX3NlbGVjdCA9IFJSRUczMigweDQwMkMpOwotCXRtcCA9IFJSRUczMigweDE3MEMpOworCWdiX3BpcGVfc2VsZWN0ID0gUlJFRzMyKFI0MDBfR0JfUElQRV9TRUxFQ1QpOworCXRtcCA9IFJSRUczMihSMzAwX0RTVF9QSVBFX0NPTkZJRyk7CiAJcGlwZV9zZWxlY3RfY3VycmVudCA9ICh0bXAgPj4gMikgJiAzOwogCXRtcCA9ICgxIDw8IHBpcGVfc2VsZWN0X2N1cnJlbnQpIHwKIAkgICAgICAoKChnYl9waXBlX3NlbGVjdCA+PiA4KSAmIDB4RikgPDwgNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKaW5kZXggNDkxZGM5MC4uZDhiYTY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwpAQCAtNzgsMTggKzc4LDIzIEBACiB9CiAKIC8qIGdldCB0ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMgKi8KLXUzMiBydjc3MF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2ludCBydjc3MF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgdGVtcCA9IChSUkVHMzIoQ0dfTVVMVF9USEVSTUFMX1NUQVRVUykgJiBBU0lDX1RfTUFTSykgPj4KIAkJQVNJQ19UX1NISUZUOwotCXUzMiBhY3R1YWxfdGVtcCA9IDA7CisJaW50IGFjdHVhbF90ZW1wOwogCi0JaWYgKCh0ZW1wID4+IDkpICYgMSkKLQkJYWN0dWFsX3RlbXAgPSAwOwotCWVsc2UKLQkJYWN0dWFsX3RlbXAgPSAodGVtcCA+PiAxKSAmIDB4ZmY7CisJaWYgKHRlbXAgJiAweDQwMCkKKwkJYWN0dWFsX3RlbXAgPSAtMjU2OworCWVsc2UgaWYgKHRlbXAgJiAweDIwMCkKKwkJYWN0dWFsX3RlbXAgPSAyNTU7CisJZWxzZSBpZiAodGVtcCAmIDB4MTAwKSB7CisJCWFjdHVhbF90ZW1wID0gdGVtcCAmIDB4MWZmOworCQlhY3R1YWxfdGVtcCB8PSB+MHgxZmY7CisJfSBlbHNlCisJCWFjdHVhbF90ZW1wID0gdGVtcCAmIDB4ZmY7CiAKLQlyZXR1cm4gYWN0dWFsX3RlbXAgKiAxMDAwOworCXJldHVybiAoYWN0dWFsX3RlbXAgKiAxMDAwKSAvIDI7CiB9CiAKIHZvaWQgcnY3NzBfcG1fbWlzYyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTMxNiw3ICszMjEsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyNzAwX2NwX3N0b3AocmRldik7Ci0JV1JFRzMyKENQX1JCX0NOVEwsIFJCX05PX1VQREFURSB8ICgxNSA8PCA4KSB8ICgzIDw8IDApKTsKKwlXUkVHMzIoQ1BfUkJfQ05UTCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkgICAgICAgQlVGX1NXQVBfMzJCSVQgfAorI2VuZGlmCisJICAgICAgIFJCX05PX1VQREFURSB8IFJCX0JMS1NaKDE1KSB8IFJCX0JVRlNaKDMpKTsKIAogCS8qIFJlc2V0IGNwICovCiAJV1JFRzMyKEdSQk1fU09GVF9SRVNFVCwgU09GVF9SRVNFVF9DUCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaAppbmRleCBhYmM4Y2Y1Li43OWZhNTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKQEAgLTc2LDEwICs3NiwxMCBAQAogI2RlZmluZQkJUk9RX0lCMV9TVEFSVCh4KQkJCQkoKHgpIDw8IDApCiAjZGVmaW5lCQlST1FfSUIyX1NUQVJUKHgpCQkJCSgoeCkgPDwgOCkKICNkZWZpbmUJQ1BfUkJfQ05UTAkJCQkJMHhDMTA0Ci0jZGVmaW5lCQlSQl9CVUZTWih4KQkJCQkJKCh4KTw8MCkKLSNkZWZpbmUJCVJCX0JMS1NaKHgpCQkJCQkoKHgpPDw4KQotI2RlZmluZQkJUkJfTk9fVVBEQVRFCQkJCQkoMTw8MjcpCi0jZGVmaW5lCQlSQl9SUFRSX1dSX0VOQQkJCQkJKDE8PDMxKQorI2RlZmluZQkJUkJfQlVGU1ooeCkJCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCVJCX0JMS1NaKHgpCQkJCQkoKHgpIDw8IDgpCisjZGVmaW5lCQlSQl9OT19VUERBVEUJCQkJCSgxIDw8IDI3KQorI2RlZmluZQkJUkJfUlBUUl9XUl9FTkEJCQkJCSgxIDw8IDMxKQogI2RlZmluZQkJQlVGX1NXQVBfMzJCSVQJCQkJCSgyIDw8IDE2KQogI2RlZmluZQlDUF9SQl9SUFRSCQkJCQkweDg3MDAKICNkZWZpbmUJQ1BfUkJfUlBUUl9BRERSCQkJCQkweEMxMEMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3N0dWIvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L3N0dWIvS2NvbmZpZwppbmRleCAwOWFlYTVmLi43MGU2MGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9zdHViL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnCkBAIC0xLDExICsxLDEzIEBACiBjb25maWcgU1RVQl9QT1VMU0JPCiAJdHJpc3RhdGUgIkludGVsIEdNQTUwMCBTdHViIERyaXZlciIKIAlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gTkVUICMgZm9yIFRIRVJNQUwKIAkjIFBvdWxzYm8gc3R1YiBkZXBlbmRzIG9uIEFDUElfVklERU8gd2hlbiBBQ1BJIGlzIGVuYWJsZWQKIAkjIGJ1dCBmb3Igc2VsZWN0IHRvIHdvcmssIG5lZWQgdG8gc2VsZWN0IEFDUElfVklERU8ncyBkZXBlbmRlbmNpZXMsIGljawogCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlmIEFDUEkKIAlzZWxlY3QgSU5QVVQgaWYgQUNQSQogCXNlbGVjdCBBQ1BJX1ZJREVPIGlmIEFDUEkKKwlzZWxlY3QgVEhFUk1BTCBpZiBBQ1BJCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgc3lzdGVtIHRoYXQgaGFzIEludGVsIEdNQTUwMAogCSAgKFBvdWxzYm8pIGludGVncmF0ZWQgZ3JhcGhpY3MuIElmIE0gaXMgc2VsZWN0ZWQsIHRoZSBtb2R1bGUgd2lsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jIGIvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCmluZGV4IGMzODBjNjUuLmFjZTJiMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYworKysgYi9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKQEAgLTYzNiw3ICs2MzYsNyBAQAogCQkJdm9pZCAoKmlycV9zZXRfc3RhdGUpKHZvaWQgKmNvb2tpZSwgYm9vbCBzdGF0ZSksCiAJCQl1bnNpZ25lZCBpbnQgKCpzZXRfdmdhX2RlY29kZSkodm9pZCAqY29va2llLCBib29sIGRlY29kZSkpCiB7Ci0JaW50IHJldCA9IC0xOworCWludCByZXQgPSAtRU5PREVWOwogCXN0cnVjdCB2Z2FfZGV2aWNlICp2Z2FkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IDc3M2U0ODQuLjI5N2JjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTIzOCwxMyArMjM4LDEzIEBACiAJICB3aWxsIGJlIGNhbGxlZCBrOHRlbXAuCiAKIGNvbmZpZyBTRU5TT1JTX0sxMFRFTVAKLQl0cmlzdGF0ZSAiQU1EIFBoZW5vbS9TZW1wcm9uL1R1cmlvbi9PcHRlcm9uIHRlbXBlcmF0dXJlIHNlbnNvciIKKwl0cmlzdGF0ZSAiQU1EIEZhbWlseSAxMGgvMTFoLzEyaC8xNGggdGVtcGVyYXR1cmUgc2Vuc29yIgogCWRlcGVuZHMgb24gWDg2ICYmIFBDSQogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgdGVtcGVyYXR1cmUKIAkgIHNlbnNvcihzKSBpbnNpZGUgeW91ciBDUFUuIFN1cHBvcnRlZCBhcmUgbGF0ZXIgcmV2aXNpb25zIG9mCi0JICB0aGUgQU1EIEZhbWlseSAxMGggYW5kIGFsbCByZXZpc2lvbnMgb2YgdGhlIEFNRCBGYW1pbHkgMTFoCi0JICBtaWNyb2FyY2hpdGVjdHVyZXMuCisJICB0aGUgQU1EIEZhbWlseSAxMGggYW5kIGFsbCByZXZpc2lvbnMgb2YgdGhlIEFNRCBGYW1pbHkgMTFoLAorCSAgMTJoIChMbGFubyksIGFuZCAxNGggKEJyYXpvcykgbWljcm9hcmNoaXRlY3R1cmVzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBrMTB0ZW1wLgpAQCAtNDU1LDEzICs0NTUsMTQgQEAKIAkgIGNhbGxlZCBqejQ3NDAtaHdtb24uCiAKIGNvbmZpZyBTRU5TT1JTX0pDNDIKLQl0cmlzdGF0ZSAiSkVERUMgSkM0Mi40IGNvbXBsaWFudCB0ZW1wZXJhdHVyZSBzZW5zb3JzIgorCXRyaXN0YXRlICJKRURFQyBKQzQyLjQgY29tcGxpYW50IG1lbW9yeSBtb2R1bGUgdGVtcGVyYXR1cmUgc2Vuc29ycyIKIAlkZXBlbmRzIG9uIEkyQwogCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBKZWRlYyBKQzQyLjQgY29tcGxpYW50Ci0JICB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBTdXBwb3J0IHdpbGwgaW5jbHVkZSwgYnV0IG5vdCBiZSBsaW1pdGVkIHRvLAotCSAgQURUNzQwOCwgQ0FUMzRUUzAyLCwgQ0FUNjA5NSwgTUFYNjYwNCwgTUNQOTgwNSwgTUNQOTgyNDIsIE1DUDk4MjQzLAotCSAgTUNQOTg0MywgU0U5NywgU0U5OCwgU1RUUzQyNCwgVFNFMjAwMkIzLCBhbmQgVFMzMDAwQjMuCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlLCB5b3UgZ2V0IHN1cHBvcnQgZm9yIEpFREVDIEpDNDIuNCBjb21wbGlhbnQKKwkgIHRlbXBlcmF0dXJlIHNlbnNvcnMsIHdoaWNoIGFyZSB1c2VkIG9uIG1hbnkgRERSMyBtZW1vcnkgbW9kdWxlcyBmb3IKKwkgIG1vYmlsZSBkZXZpY2VzIGFuZCBzZXJ2ZXJzLiAgU3VwcG9ydCB3aWxsIGluY2x1ZGUsIGJ1dCBub3QgYmUgbGltaXRlZAorCSAgdG8sIEFEVDc0MDgsIENBVDM0VFMwMiwgQ0FUNjA5NSwgTUFYNjYwNCwgTUNQOTgwNSwgTUNQOTgyNDIsIE1DUDk4MjQzLAorCSAgTUNQOTg0MywgU0U5NywgU0U5OCwgU1RUUzQyNChFKSwgVFNFMjAwMkIzLCBhbmQgVFMzMDAwQjMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGpjNDIuCkBAIC01NzQsNyArNTc1LDcgQEAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTg1CiAJICBzZW5zb3IgY2hpcHMgYW5kIGNsb25lczogQURNMTAyNywgQURUNzQ2MywgQURUNzQ2OCwgRU1DNkQxMDAsCi0JICBFTUM2RDEwMSBhbmQgRU1DNkQxMDIuCisJICBFTUM2RDEwMSwgRU1DNkQxMDIsIGFuZCBFTUM2RDEwMy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgbG04NS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWQ3NDE0LmMgYi9kcml2ZXJzL2h3bW9uL2FkNzQxNC5jCmluZGV4IDg2ZDgyMmEuLmQ0NmMwYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWQ3NDE0LmMKKysrIGIvZHJpdmVycy9od21vbi9hZDc0MTQuYwpAQCAtMjQyLDYgKzI0Miw3IEBACiAJeyAiYWQ3NDE0IiwgMCB9LAogCXt9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkNzQxNF9pZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZDc0MTRfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkdDc0MTEuYyBiL2RyaXZlcnMvaHdtb24vYWR0NzQxMS5jCmluZGV4IGYxM2M4NDMuLjVjYzNlMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWR0NzQxMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWR0NzQxMS5jCkBAIC0zMzQsNiArMzM0LDcgQEAKIAl7ICJhZHQ3NDExIiwgMCB9LAogCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZHQ3NDExX2lkKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkdDc0MTFfZHJpdmVyID0gewogCS5kcml2ZXIJCT0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jIGIvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCmluZGV4IGNlMDM3MmYwLi40YzA3NDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKKysrIGIvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCkBAIC0xMDcyLDYgKzEwNzIsNyBAQAogCQkJbm9kZS0+c2RhLmRldl9hdHRyLnNob3cgPSBncnAtPnNob3c7CiAJCQlub2RlLT5zZGEuZGV2X2F0dHIuc3RvcmUgPSBncnAtPnN0b3JlOwogCQkJYXR0ciA9ICZub2RlLT5zZGEuZGV2X2F0dHIuYXR0cjsKKwkJCXN5c2ZzX2F0dHJfaW5pdChhdHRyKTsKIAkJCWF0dHItPm5hbWUgPSBub2RlLT5uYW1lOwogCQkJYXR0ci0+bW9kZSA9IFNfSVJVR08gfCAoZ3JwLT5zdG9yZSA/IFNfSVdVU1IgOiAwKTsKIAkJCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYua29iaiwgYXR0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jIGIvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYwppbmRleCAyZDY4Y2YzLi5iNWU4OTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCisrKyBiL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpeGYuaD4KQEAgLTIyLDYgKzIzLDIxIEBACiAKICNkZWZpbmUgQVRLX0hJRCAiQVRLMDExMCIKIAorc3RhdGljIGJvb2wgbmV3X2lmOworbW9kdWxlX3BhcmFtKG5ld19pZiwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5ld19pZiwgIk92ZXJyaWRlIGRldGVjdGlvbiBoZXVyaXN0aWMgYW5kIGZvcmNlIHRoZSB1c2Ugb2YgdGhlIG5ldyBBVEswMTEwIGludGVyZmFjZSIpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0Y29uc3QgYXRrX2ZvcmNlX25ld19pZltdID0geworCXsKKwkJLyogT2xkIGludGVyZmFjZSBoYXMgYnJva2VuIE1DSCB0ZW1wIG1vbml0b3JpbmcgKi8KKwkJLmlkZW50ID0gIkFzdXMgU2FiZXJ0b290aCBYNTgiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlNBQkVSVE9PVEggWDU4IikKKwkJfQorCX0sCisJeyB9Cit9OworCiAvKiBNaW5pbXVtIHRpbWUgYmV0d2VlbiByZWFkaW5ncywgZW5mb3JjZWQgaW4gb3JkZXIgdG8gYXZvaWQKICAqIGhvZ2dpbmcgdGhlIENQVS4KICAqLwpAQCAtMTMwMiw3ICsxMzE4LDkgQEAKIAkgKiBhbmFseXNpcyBvZiBtdWx0aXBsZSBEU0RUcyBpbmRpY2F0ZXMgdGhhdCB3aGVuIGJvdGggaW50ZXJmYWNlcwogCSAqIGFyZSBwcmVzZW50IHRoZSBuZXcgb25lIChHR1JQL0dJVE0pIGlzIG5vdCBmdW5jdGlvbmFsLgogCSAqLwotCWlmIChkYXRhLT5ydG1wX2hhbmRsZSAmJiBkYXRhLT5ydmx0X2hhbmRsZSAmJiBkYXRhLT5yZmFuX2hhbmRsZSkKKwlpZiAobmV3X2lmKQorCQlkZXZfaW5mbyhkZXYsICJPdmVycmlkaW5nIGludGVyZmFjZSBkZXRlY3Rpb25cbiIpOworCWlmIChkYXRhLT5ydG1wX2hhbmRsZSAmJiBkYXRhLT5ydmx0X2hhbmRsZSAmJiBkYXRhLT5yZmFuX2hhbmRsZSAmJiAhbmV3X2lmKQogCQlkYXRhLT5vbGRfaW50ZXJmYWNlID0gdHJ1ZTsKIAllbHNlIGlmIChkYXRhLT5lbnVtZXJhdGVfaGFuZGxlICYmIGRhdGEtPnJlYWRfaGFuZGxlICYmCiAJCQlkYXRhLT53cml0ZV9oYW5kbGUpCkBAIC0xNDIwLDYgKzE0MzgsOSBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAorCWlmIChkbWlfY2hlY2tfc3lzdGVtKGF0a19mb3JjZV9uZXdfaWYpKQorCQluZXdfaWYgPSB0cnVlOworCiAJcmV0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhdGtfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlwcl9pbmZvKCJhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIgZmFpbGVkOiAlZFxuIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZW1jMTQwMy5jIGIvZHJpdmVycy9od21vbi9lbWMxNDAzLmMKaW5kZXggNWRlYTlmYS4uY2QyYTZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9lbWMxNDAzLmMKKysrIGIvZHJpdmVycy9od21vbi9lbWMxNDAzLmMKQEAgLTM0NCw3ICszNDQsNyBAQAogfQogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZW1jMTQwM19hZGRyZXNzX2xpc3RbXSA9IHsKLQkweDE4LCAweDJhLCAweDRjLCAweDRkLCBJMkNfQ0xJRU5UX0VORAorCTB4MTgsIDB4MjksIDB4NGMsIDB4NGQsIEkyQ19DTElFTlRfRU5ECiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZW1jMTQwM19pZHRhYmxlW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2pjNDIuYyBiL2RyaXZlcnMvaHdtb24vamM0Mi5jCmluZGV4IDM0MGZjNzguLjkzNDk5MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vamM0Mi5jCisrKyBiL2RyaXZlcnMvaHdtb24vamM0Mi5jCkBAIC01Myw2ICs1Myw4IEBACiAKIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZGVmaW5lcyAqLwogI2RlZmluZSBKQzQyX0NGR19DUklUX09OTFkJKDEgPDwgMikKKyNkZWZpbmUgSkM0Ml9DRkdfVENSSVRfTE9DSwkoMSA8PCA2KQorI2RlZmluZSBKQzQyX0NGR19FVkVOVF9MT0NLCSgxIDw8IDcpCiAjZGVmaW5lIEpDNDJfQ0ZHX1NIVVRET1dOCSgxIDw8IDgpCiAjZGVmaW5lIEpDNDJfQ0ZHX0hZU1RfU0hJRlQJOQogI2RlZmluZSBKQzQyX0NGR19IWVNUX01BU0sJMHgwMwpAQCAtMzMyLDcgKzMzNCw3IEBACiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgamM0Ml9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IGRpZmYsIGh5c3Q7CiAJaW50IGVycjsKIAlpbnQgcmV0ID0gY291bnQ7CkBAIC0zODAsMTQgKzM4MiwxNCBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sCiAJCSAgIHNob3dfdGVtcF9pbnB1dCwgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sCitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JUlVHTywKIAkJICAgc2hvd190ZW1wX2NyaXQsIHNldF90ZW1wX2NyaXQpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX21pbiwgU19JV1VTUiB8IFNfSVJVR08sCitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWluLCBTX0lSVUdPLAogCQkgICBzaG93X3RlbXBfbWluLCBzZXRfdGVtcF9taW4pOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sCitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lSVUdPLAogCQkgICBzaG93X3RlbXBfbWF4LCBzZXRfdGVtcF9tYXgpOwogCi1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfY3JpdF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9jcml0X2h5c3QsIFNfSVJVR08sCiAJCSAgIHNob3dfdGVtcF9jcml0X2h5c3QsIHNldF90ZW1wX2NyaXRfaHlzdCk7CiBzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWF4X2h5c3QsIFNfSVJVR08sCiAJCSAgIHNob3dfdGVtcF9tYXhfaHlzdCwgTlVMTCk7CkBAIC00MTIsOCArNDE0LDMxIEBACiAJTlVMTAogfTsKIAorc3RhdGljIG1vZGVfdCBqYzQyX2F0dHJpYnV0ZV9tb2RlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBqYzQyX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1bnNpZ25lZCBpbnQgY29uZmlnID0gZGF0YS0+Y29uZmlnOworCWJvb2wgcmVhZG9ubHk7CisKKwlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfdGVtcDFfY3JpdC5hdHRyKQorCQlyZWFkb25seSA9IGNvbmZpZyAmIEpDNDJfQ0ZHX1RDUklUX0xPQ0s7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfdGVtcDFfbWluLmF0dHIgfHwKKwkJIGF0dHIgPT0gJmRldl9hdHRyX3RlbXAxX21heC5hdHRyKQorCQlyZWFkb25seSA9IGNvbmZpZyAmIEpDNDJfQ0ZHX0VWRU5UX0xPQ0s7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0LmF0dHIpCisJCXJlYWRvbmx5ID0gY29uZmlnICYgKEpDNDJfQ0ZHX0VWRU5UX0xPQ0sgfCBKQzQyX0NGR19UQ1JJVF9MT0NLKTsKKwllbHNlCisJCXJlYWRvbmx5ID0gdHJ1ZTsKKworCXJldHVybiBTX0lSVUdPIHwgKHJlYWRvbmx5ID8gMCA6IFNfSVdVU1IpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBqYzQyX2dyb3VwID0gewogCS5hdHRycyA9IGpjNDJfYXR0cmlidXRlcywKKwkuaXNfdmlzaWJsZSA9IGpjNDJfYXR0cmlidXRlX21vZGUsCiB9OwogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vazEwdGVtcC5jIGIvZHJpdmVycy9od21vbi9rMTB0ZW1wLmMKaW5kZXggZGE1YTI0MC4uODJiZjY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9rMTB0ZW1wLmMKKysrIGIvZHJpdmVycy9od21vbi9rMTB0ZW1wLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogazEwdGVtcC5jIC0gQU1EIEZhbWlseSAxMGgvMTFoIHByb2Nlc3NvciBoYXJkd2FyZSBtb25pdG9yaW5nCisgKiBrMTB0ZW1wLmMgLSBBTUQgRmFtaWx5IDEwaC8xMWgvMTJoLzE0aCBwcm9jZXNzb3IgaGFyZHdhcmUgbW9uaXRvcmluZwogICoKICAqIENvcHlyaWdodCAoYykgMjAwOSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KICAqCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCi1NT0RVTEVfREVTQ1JJUFRJT04oIkFNRCBGYW1pbHkgMTBoLzExaCBDUFUgY29yZSB0ZW1wZXJhdHVyZSBtb25pdG9yIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFNRCBGYW1pbHkgMTBoLzExaC8xMmgvMTRoIENQVSBjb3JlIHRlbXBlcmF0dXJlIG1vbml0b3IiKTsKIE1PRFVMRV9BVVRIT1IoIkNsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCkBAIC0yMDgsNiArMjA4LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBrMTB0ZW1wX2lkX3RhYmxlW10gPSB7CiAJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzEwSF9OQl9NSVNDKSB9LAogCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xMUhfTkJfTUlTQykgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfQ05CMTdIX0YzKSB9LAogCXt9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGsxMHRlbXBfaWRfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMKaW5kZXggMWI2NzRiNy4uZDgwNWU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYworKysgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCkBAIC05NTcsNyArOTU3LDcgQEAKIAogCS8qIGJhaWwgaWYgd2UgZGlkIG5vdCBnZXQgYW4gSVJRIGZyb20gdGhlIGJ1cyBsYXllciAqLwogCWlmICghZGV2LT5pcnEpIHsKLQkJcHJfZXJyKCJObyBJUlEuIERpc2FibGluZyAvZGV2L2ZyZWVmYWxsXG4iKTsKKwkJcHJfZGVidWcoIk5vIElSUS4gRGlzYWJsaW5nIC9kZXYvZnJlZWZhbGxcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG02My5jIGIvZHJpdmVycy9od21vbi9sbTYzLmMKaW5kZXggNzc2YWViMy4uNTA4Y2IyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTYzLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTYzLmMKQEAgLTk4LDYgKzk4LDkgQEAKICAqIHZhbHVlLCBpdCB1c2VzIHNpZ25lZCA4LWJpdCB2YWx1ZXMgd2l0aCBMU0IgPSAxIGRlZ3JlZSBDZWxzaXVzLgogICogRm9yIHJlbW90ZSB0ZW1wZXJhdHVyZSwgbG93IGFuZCBoaWdoIGxpbWl0cywgaXQgdXNlcyBzaWduZWQgMTEtYml0IHZhbHVlcwogICogd2l0aCBMU0IgPSAwLjEyNSBkZWdyZWUgQ2Vsc2l1cywgbGVmdC1qdXN0aWZpZWQgaW4gMTYtYml0IHJlZ2lzdGVycy4KKyAqIEZvciBMTTY0IHRoZSBhY3R1YWwgcmVtb3RlIGRpb2RlIHRlbXBlcmF0dXJlIGlzIDE2IGRlZ3JlZSBDZWxzaXVzIGhpZ2hlcgorICogdGhhbiB0aGUgcmVnaXN0ZXIgcmVhZGluZy4gUmVtb3RlIHRlbXBlcmF0dXJlIHNldHBvaW50cyBoYXZlIHRvIGJlCisgKiBhZGFwdGVkIGFjY29yZGluZ2x5LgogICovCiAKICNkZWZpbmUgRkFOX0ZST01fUkVHKHJlZykJKChyZWcpID09IDB4RkZGQyB8fCAocmVnKSA9PSAwID8gMCA6IFwKQEAgLTE2NSw2ICsxNjgsOCBAQAogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOyAvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7IC8qIGluIGppZmZpZXMgKi8KKwlpbnQga2luZDsKKwlpbnQgdGVtcDJfb2Zmc2V0OwogCiAJLyogcmVnaXN0ZXJzIHZhbHVlcyAqLwogCXU4IGNvbmZpZywgY29uZmlnX2ZhbjsKQEAgLTI0NywxNiArMjUyLDM0IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPmNvbmZpZ19mYW4gJiAweDIwID8gMSA6IDIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3RlbXA4KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgIGNoYXIgKmJ1ZikKKy8qCisgKiBUaGVyZSBhcmUgOGJpdCByZWdpc3RlcnMgZm9yIGJvdGggbG9jYWwodGVtcDEpIGFuZCByZW1vdGUodGVtcDIpIHNlbnNvci4KKyAqIEZvciByZW1vdGUgc2Vuc29yIHJlZ2lzdGVycyB0ZW1wMl9vZmZzZXQgaGFzIHRvIGJlIGNvbnNpZGVyZWQsCisgKiBmb3IgbG9jYWwgc2Vuc29yIGl0IG11c3Qgbm90LgorICogU28gd2UgbmVlZCBzZXBhcmF0ZSA4Yml0IGFjY2Vzc29ycyBmb3IgbG9jYWwgYW5kIHJlbW90ZSBzZW5zb3IuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfbG9jYWxfdGVtcDgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJCWNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGxtNjNfZGF0YSAqZGF0YSA9IGxtNjNfdXBkYXRlX2RldmljZShkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QOF9GUk9NX1JFRyhkYXRhLT50ZW1wOFthdHRyLT5pbmRleF0pKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2V0X3RlbXA4KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmR1bW15LAotCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3Qgc2hvd19yZW1vdGVfdGVtcDgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgbG02M19kYXRhICpkYXRhID0gbG02M191cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVA4X0ZST01fUkVHKGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSkKKwkJICAgICAgICsgZGF0YS0+dGVtcDJfb2Zmc2V0KTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2xvY2FsX3RlbXA4KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZHVtbXksCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgbG02M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CkBAIC0yNzQsNyArMjk3LDggQEAKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGxtNjNfZGF0YSAqZGF0YSA9IGxtNjNfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QMTFfRlJPTV9SRUcoZGF0YS0+dGVtcDExW2F0dHItPmluZGV4XSkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QMTFfRlJPTV9SRUcoZGF0YS0+dGVtcDExW2F0dHItPmluZGV4XSkKKwkJICAgICAgICsgZGF0YS0+dGVtcDJfb2Zmc2V0KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2V0X3RlbXAxMShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLApAQCAtMjk0LDcgKzMxOCw3IEBACiAJaW50IG5yID0gYXR0ci0+aW5kZXg7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JZGF0YS0+dGVtcDExW25yXSA9IFRFTVAxMV9UT19SRUcodmFsKTsKKwlkYXRhLT50ZW1wMTFbbnJdID0gVEVNUDExX1RPX1JFRyh2YWwgLSBkYXRhLT50ZW1wMl9vZmZzZXQpOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdbKG5yIC0gMSkgKiAyXSwKIAkJCQkgIGRhdGEtPnRlbXAxMVtucl0gPj4gOCk7CiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1sobnIgLSAxKSAqIDIgKyAxXSwKQEAgLTMxMCw2ICszMzQsNyBAQAogewogCXN0cnVjdCBsbTYzX2RhdGEgKmRhdGEgPSBsbTYzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDhfRlJPTV9SRUcoZGF0YS0+dGVtcDhbMl0pCisJCSAgICAgICArIGRhdGEtPnRlbXAyX29mZnNldAogCQkgICAgICAgLSBURU1QOF9GUk9NX1JFRyhkYXRhLT50ZW1wMl9jcml0X2h5c3QpKTsKIH0KIApAQCAtMzI0LDcgKzM0OSw3IEBACiAJbG9uZyBoeXN0OwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCWh5c3QgPSBURU1QOF9GUk9NX1JFRyhkYXRhLT50ZW1wOFsyXSkgLSB2YWw7CisJaHlzdCA9IFRFTVA4X0ZST01fUkVHKGRhdGEtPnRlbXA4WzJdKSArIGRhdGEtPnRlbXAyX29mZnNldCAtIHZhbDsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE02M19SRUdfUkVNT1RFX1RDUklUX0hZU1QsCiAJCQkJICBIWVNUX1RPX1JFRyhoeXN0KSk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CkBAIC0zNTUsMTYgKzM4MCwyMSBAQAogc3RhdGljIERFVklDRV9BVFRSKHB3bTEsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bTEsIHNldF9wd20xKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihwd20xX2VuYWJsZSwgU19JUlVHTywgc2hvd19wd20xX2VuYWJsZSwgTlVMTCk7CiAKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcDgsIE5VTEwsIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXA4LAotCXNldF90ZW1wOCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X2xvY2FsX3RlbXA4LCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19sb2NhbF90ZW1wOCwKKwlzZXRfbG9jYWxfdGVtcDgsIDEpOwogCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAxMSwgTlVMTCwgMCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDExLAogCXNldF90ZW1wMTEsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAxMSwKIAlzZXRfdGVtcDExLCAyKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfY3JpdCwgU19JUlVHTywgc2hvd190ZW1wOCwgTlVMTCwgMik7CisvKgorICogT24gTE02MywgdGVtcDJfY3JpdCBjYW4gYmUgc2V0IG9ubHkgb25jZSwgd2hpY2ggc2hvdWxkIGJlIGpvYgorICogb2YgdGhlIGJvb3Rsb2FkZXIuCisgKi8KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfY3JpdCwgU19JUlVHTywgc2hvd19yZW1vdGVfdGVtcDgsCisJTlVMTCwgMik7CiBzdGF0aWMgREVWSUNFX0FUVFIodGVtcDJfY3JpdF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wMl9jcml0X2h5c3QsCiAJc2V0X3RlbXAyX2NyaXRfaHlzdCk7CiAKQEAgLTQ3OSw3ICs1MDksMTIgQEAKIAlkYXRhLT52YWxpZCA9IDA7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgTE02MyBjaGlwICovCisJLyogU2V0IHRoZSBkZXZpY2UgdHlwZSAqLworCWRhdGEtPmtpbmQgPSBpZC0+ZHJpdmVyX2RhdGE7CisJaWYgKGRhdGEtPmtpbmQgPT0gbG02NCkKKwkJZGF0YS0+dGVtcDJfb2Zmc2V0ID0gMTYwMDA7CisKKwkvKiBJbml0aWFsaXplIGNoaXAgKi8KIAlsbTYzX2luaXRfY2xpZW50KG5ld19jbGllbnQpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04NS5jIGIvZHJpdmVycy9od21vbi9sbTg1LmMKaW5kZXggMWUyMjk4NC4uZDJjYzI4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg1LmMKQEAgLTQxLDcgKzQxLDcgQEAKIGVudW0gY2hpcHMgewogCWFueV9jaGlwLCBsbTg1YiwgbG04NWMsCiAJYWRtMTAyNywgYWR0NzQ2MywgYWR0NzQ2OCwKLQllbWM2ZDEwMCwgZW1jNmQxMDIKKwllbWM2ZDEwMCwgZW1jNmQxMDIsIGVtYzZkMTAzCiB9OwogCiAvKiBUaGUgTE04NSByZWdpc3RlcnMgKi8KQEAgLTkwLDYgKzkwLDkgQEAKICNkZWZpbmUJTE04NV9WRVJTVEVQX0VNQzZEMTAwX0EwICAgICAgICAweDYwCiAjZGVmaW5lCUxNODVfVkVSU1RFUF9FTUM2RDEwMF9BMSAgICAgICAgMHg2MQogI2RlZmluZQlMTTg1X1ZFUlNURVBfRU1DNkQxMDIJCTB4NjUKKyNkZWZpbmUJTE04NV9WRVJTVEVQX0VNQzZEMTAzX0EwCTB4NjgKKyNkZWZpbmUJTE04NV9WRVJTVEVQX0VNQzZEMTAzX0ExCTB4NjkKKyNkZWZpbmUJTE04NV9WRVJTVEVQX0VNQzZEMTAzUwkJMHg2QQkvKiBBbHNvIGtub3duIGFzIEVNQzZEMTAzOkEyICovCiAKICNkZWZpbmUJTE04NV9SRUdfQ09ORklHCQkJMHg0MAogCkBAIC0zNDgsNiArMzUxLDcgQEAKIAl7ICJlbWM2ZDEwMCIsIGVtYzZkMTAwIH0sCiAJeyAiZW1jNmQxMDEiLCBlbWM2ZDEwMCB9LAogCXsgImVtYzZkMTAyIiwgZW1jNmQxMDIgfSwKKwl7ICJlbWM2ZDEwMyIsIGVtYzZkMTAzIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtODVfaWQpOwpAQCAtMTI1MCw2ICsxMjU0LDIwIEBACiAJCWNhc2UgTE04NV9WRVJTVEVQX0VNQzZEMTAyOgogCQkJdHlwZV9uYW1lID0gImVtYzZkMTAyIjsKIAkJCWJyZWFrOworCQljYXNlIExNODVfVkVSU1RFUF9FTUM2RDEwM19BMDoKKwkJY2FzZSBMTTg1X1ZFUlNURVBfRU1DNkQxMDNfQTE6CisJCQl0eXBlX25hbWUgPSAiZW1jNmQxMDMiOworCQkJYnJlYWs7CisJCS8qCisJCSAqIFJlZ2lzdGVycyBhcHBhcmVudGx5IG1pc3NpbmcgaW4gRU1DNkQxMDNTL0VNQzZEMTAzOkEyCisJCSAqIGNvbXBhcmVkIHRvIEVNQzZEMTAzOkEwLCBFTUM2RDEwMzpBMSwgYW5kIEVNQzZEMTAyCisJCSAqIChhY2NvcmRpbmcgdG8gdGhlIGRhdGEgc2hlZXRzKSwgYnV0IHVzZWQgdW5jb25kaXRpb25hbGx5CisJCSAqIGluIHRoZSBkcml2ZXI6IDYyWzU6N10sIDZEWzA6N10sIGFuZCA2RVswOjddLgorCQkgKiBTbyBza2lwIEVNQzZEMTAzUyBmb3Igbm93LgorCQljYXNlIExNODVfVkVSU1RFUF9FTUM2RDEwM1M6CisJCQl0eXBlX25hbWUgPSAiZW1jNmQxMDNzIjsKKwkJCWJyZWFrOworCQkgKi8KIAkJfQogCX0gZWxzZSB7CiAJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwKQEAgLTEyODMsNiArMTMwMSw3IEBACiAJY2FzZSBhZHQ3NDY4OgogCWNhc2UgZW1jNmQxMDA6CiAJY2FzZSBlbWM2ZDEwMjoKKwljYXNlIGVtYzZkMTAzOgogCQlkYXRhLT5mcmVxX21hcCA9IGFkbTEwMjdfZnJlcV9tYXA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNDY4LDcgKzE0ODcsNyBAQAogCQkJLyogTW9yZSBhbGFybSBiaXRzICovCiAJCQlkYXRhLT5hbGFybXMgfD0gbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwKIAkJCQkJCUVNQzZEMTAwX1JFR19BTEFSTTMpIDw8IDE2OwotCQl9IGVsc2UgaWYgKGRhdGEtPnR5cGUgPT0gZW1jNmQxMDIpIHsKKwkJfSBlbHNlIGlmIChkYXRhLT50eXBlID09IGVtYzZkMTAyIHx8IGRhdGEtPnR5cGUgPT0gZW1jNmQxMDMpIHsKIAkJCS8qIEhhdmUgdG8gcmVhZCBMU0IgYml0cyBhZnRlciB0aGUgTVNCIG9uZXMgYmVjYXVzZQogCQkJICAgdGhlIHJlYWRpbmcgb2YgdGhlIE1TQiBiaXRzIGhhcyBmcm96ZW4gdGhlCiAJCQkgICBMU0JzIChiYWNrd2FyZCBmcm9tIHRoZSBBRE0xMDI3KS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKaW5kZXggYjYwNWZmMy4uODI5YTJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKQEAgLTg0NywxMSArODQ3LDE1IEBACiAJCQlkZXZfZXJyKGRldi0+ZGV2LCAiQXJiaXRyYXRpb24gbG9zdFxuIik7CiAJCQllcnIgfD0gT01BUF9JMkNfU1RBVF9BTDsKIAkJfQorCQkvKgorCQkgKiBQcm9EQjAwMTcwNTI6IENsZWFyIEFSRFkgYml0IHR3aWNlCisJCSAqLwogCQlpZiAoc3RhdCAmIChPTUFQX0kyQ19TVEFUX0FSRFkgfCBPTUFQX0kyQ19TVEFUX05BQ0sgfAogCQkJCQlPTUFQX0kyQ19TVEFUX0FMKSkgewogCQkJb21hcF9pMmNfYWNrX3N0YXQoZGV2LCBzdGF0ICYKIAkJCQkoT01BUF9JMkNfU1RBVF9SUkRZIHwgT01BUF9JMkNfU1RBVF9SRFIgfAotCQkJCU9NQVBfSTJDX1NUQVRfWFJEWSB8IE9NQVBfSTJDX1NUQVRfWERSKSk7CisJCQkJT01BUF9JMkNfU1RBVF9YUkRZIHwgT01BUF9JMkNfU1RBVF9YRFIgfAorCQkJCU9NQVBfSTJDX1NUQVRfQVJEWSkpOwogCQkJb21hcF9pMmNfY29tcGxldGVfY21kKGRldiwgZXJyKTsKIAkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJfQpAQCAtMTEzNywxMiArMTE0MSw0MSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1NVU1BFTkQKK3N0YXRpYyBpbnQgb21hcF9pMmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKCFwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQorCQlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnBtICYmIGRldi0+YnVzLT5wbS0+cnVudGltZV9zdXNwZW5kKQorCQkJZGV2LT5idXMtPnBtLT5ydW50aW1lX3N1c3BlbmQoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXBfaTJjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKCFwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQorCQlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnBtICYmIGRldi0+YnVzLT5wbS0+cnVudGltZV9yZXN1bWUpCisJCQlkZXYtPmJ1cy0+cG0tPnJ1bnRpbWVfcmVzdW1lKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIG9tYXBfaTJjX3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IG9tYXBfaTJjX3N1c3BlbmQsCisJLnJlc3VtZSA9IG9tYXBfaTJjX3Jlc3VtZSwKK307CisjZGVmaW5lIE9NQVBfSTJDX1BNX09QUyAoJm9tYXBfaTJjX3BtX29wcykKKyNlbHNlCisjZGVmaW5lIE9NQVBfSTJDX1BNX09QUyBOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvbWFwX2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IG9tYXBfaTJjX3JlbW92ZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAib21hcF9pMmMiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gT01BUF9JMkNfUE1fT1BTLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXN0dTMwMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zdHUzMDAuYwppbmRleCA0OTViZTQ1Li4yNjYxMzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXN0dTMwMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc3R1MzAwLmMKQEAgLTk0Miw3ICs5NDIsNyBAQAogCWFkYXAtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJLyogRERDIGNsYXNzIGJ1dCBhY3R1YWxseSBvZnRlbiB1c2VkIGZvciBtb3JlIGdlbmVyaWMgSTJDICovCiAJYWRhcC0+Y2xhc3MgPSBJMkNfQ0xBU1NfRERDOwotCXN0cm5jcHkoYWRhcC0+bmFtZSwgIlNUIE1pY3JvZWxlY3Ryb25pY3MgRERDIEkyQyBhZGFwdGVyIiwKKwlzdHJsY3B5KGFkYXAtPm5hbWUsICJTVCBNaWNyb2VsZWN0cm9uaWNzIEREQyBJMkMgYWRhcHRlciIsCiAJCXNpemVvZihhZGFwLT5uYW1lKSk7CiAJYWRhcC0+bnIgPSBidXNfbnI7CiAJYWRhcC0+YWxnbyA9ICZzdHUzMDBfYWxnbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMgYi9kcml2ZXJzL2lkbGUvaW50ZWxfaWRsZS5jCmluZGV4IDdhY2IzMmUuLjRhNWM0YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMKKysrIGIvZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYwpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL213YWl0Lmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgogCiAjZGVmaW5lIElOVEVMX0lETEVfVkVSU0lPTiAiMC40IgogI2RlZmluZSBQUkVGSVggImludGVsX2lkbGU6ICIKQEAgLTg1LDYgKzg2LDEyIEBACiBzdGF0aWMgc3RydWN0IGNwdWlkbGVfc3RhdGUgKmNwdWlkbGVfc3RhdGVfdGFibGU7CiAKIC8qCisgKiBIYXJkd2FyZSBDLXN0YXRlIGF1dG8tZGVtb3Rpb24gbWF5IG5vdCBhbHdheXMgYmUgb3B0aW1hbC4KKyAqIEluZGljYXRlIHdoaWNoIGVuYWJsZSBiaXRzIHRvIGNsZWFyIGhlcmUuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgYXV0b19kZW1vdGlvbl9kaXNhYmxlX2ZsYWdzOworCisvKgogICogU2V0IHRoaXMgZmxhZyBmb3Igc3RhdGVzIHdoZXJlIHRoZSBIVyBmbHVzaGVzIHRoZSBUTEIgZm9yIHVzCiAgKiBhbmQgc28gd2UgZG9uJ3QgbmVlZCBjcm9zcy1jYWxscyB0byBrZWVwIGl0IGNvbnNpc3RlbnQuCiAgKiBJZiB0aGlzIGZsYWcgaXMgc2V0LCBTVyBmbHVzaGVzIHRoZSBUTEIsIHNvIGV2ZW4gaWYgdGhlCkBAIC0yNjMsNyArMjcwLDcgQEAKIAljbG9ja2V2ZW50c19ub3RpZnkocmVhc29uLCAmY3B1KTsKIH0KIAotc3RhdGljIGludCBfX2NwdWluaXQgc2V0dXBfYnJvYWRjYXN0X2NwdWhwX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sCitzdGF0aWMgaW50IHNldHVwX2Jyb2FkY2FzdF9jcHVocF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuLAogCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAlpbnQgaG90Y3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKQEAgLTI3MywxOCArMjgwLDIzIEBACiAJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShob3RjcHUsIF9fc2V0dXBfYnJvYWRjYXN0X3RpbWVyLAogCQkJKHZvaWQgKil0cnVlLCAxKTsKIAkJYnJlYWs7Ci0JY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoaG90Y3B1LCBfX3NldHVwX2Jyb2FkY2FzdF90aW1lciwKLQkJCSh2b2lkICopZmFsc2UsIDEpOwotCQlicmVhazsKIAl9CiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIHNldHVwX2Jyb2FkY2FzdF9ub3RpZmllciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc2V0dXBfYnJvYWRjYXN0X25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsID0gc2V0dXBfYnJvYWRjYXN0X2NwdWhwX25vdGlmeSwKIH07CiAKK3N0YXRpYyB2b2lkIGF1dG9fZGVtb3Rpb25fZGlzYWJsZSh2b2lkICpkdW1teSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgbXNyX2JpdHM7CisKKwlyZG1zcmwoTVNSX05ITV9TTkJfUEtHX0NTVF9DRkdfQ1RMLCBtc3JfYml0cyk7CisJbXNyX2JpdHMgJj0gfmF1dG9fZGVtb3Rpb25fZGlzYWJsZV9mbGFnczsKKwl3cm1zcmwoTVNSX05ITV9TTkJfUEtHX0NTVF9DRkdfQ1RMLCBtc3JfYml0cyk7Cit9CisKIC8qCiAgKiBpbnRlbF9pZGxlX3Byb2JlKCkKICAqLwpAQCAtMzI4LDExICszNDAsMTcgQEAKIAljYXNlIDB4MjU6CS8qIFdlc3RtZXJlICovCiAJY2FzZSAweDJDOgkvKiBXZXN0bWVyZSAqLwogCQljcHVpZGxlX3N0YXRlX3RhYmxlID0gbmVoYWxlbV9jc3RhdGVzOworCQlhdXRvX2RlbW90aW9uX2Rpc2FibGVfZmxhZ3MgPQorCQkJKE5ITV9DMV9BVVRPX0RFTU9URSB8IE5ITV9DM19BVVRPX0RFTU9URSk7CiAJCWJyZWFrOwogCiAJY2FzZSAweDFDOgkvKiAyOCAtIEF0b20gUHJvY2Vzc29yICovCisJCWNwdWlkbGVfc3RhdGVfdGFibGUgPSBhdG9tX2NzdGF0ZXM7CisJCWJyZWFrOworCiAJY2FzZSAweDI2OgkvKiAzOCAtIExpbmNyb2Z0IEF0b20gUHJvY2Vzc29yICovCiAJCWNwdWlkbGVfc3RhdGVfdGFibGUgPSBhdG9tX2NzdGF0ZXM7CisJCWF1dG9fZGVtb3Rpb25fZGlzYWJsZV9mbGFncyA9IEFUTV9MTkNfQzZfQVVUT19ERU1PVEU7CiAJCWJyZWFrOwogCiAJY2FzZSAweDJBOgkvKiBTTkIgKi8KQEAgLTQ0MCw2ICs0NTgsOCBAQAogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CisJaWYgKGF1dG9fZGVtb3Rpb25fZGlzYWJsZV9mbGFncykKKwkJc21wX2NhbGxfZnVuY3Rpb24oYXV0b19kZW1vdGlvbl9kaXNhYmxlLCBOVUxMLCAxKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKaW5kZXggZTM4YmUxYmMuLmZiYmZhMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAogCWliX3VucmVnaXN0ZXJfZXZlbnRfaGFuZGxlcigmc2FfZGV2LT5ldmVudF9oYW5kbGVyKTsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya3F1ZXVlKGliX3dxKTsKIAogCWZvciAoaSA9IDA7IGkgPD0gc2FfZGV2LT5lbmRfcG9ydCAtIHNhX2Rldi0+c3RhcnRfcG9ydDsgKytpKSB7CiAJCWlmIChyZG1hX3BvcnRfZ2V0X2xpbmtfbGF5ZXIoZGV2aWNlLCBpICsgMSkgPT0gSUJfTElOS19MQVlFUl9JTkZJTklCQU5EKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKaW5kZXggY2ExMmFjZi4uZWMxZTlkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwpAQCAtNjM2LDYgKzYzNiwxNiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgdWNtYV9jb3B5X2l3X3JvdXRlKHN0cnVjdCByZG1hX3VjbV9xdWVyeV9yb3V0ZV9yZXNwICpyZXNwLAorCQkJICAgICAgIHN0cnVjdCByZG1hX3JvdXRlICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHI7CisKKwlkZXZfYWRkciA9ICZyb3V0ZS0+YWRkci5kZXZfYWRkcjsKKwlyZG1hX2FkZHJfZ2V0X2RnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJnJlc3AtPmliX3JvdXRlWzBdLmRnaWQpOworCXJkbWFfYWRkcl9nZXRfc2dpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmcmVzcC0+aWJfcm91dGVbMF0uc2dpZCk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHVjbWFfcXVlcnlfcm91dGUoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwKIAkJCQljb25zdCBjaGFyIF9fdXNlciAqaW5idWYsCiAJCQkJaW50IGluX2xlbiwgaW50IG91dF9sZW4pCkBAIC02NzAsOCArNjgwLDEwIEBACiAKIAlyZXNwLm5vZGVfZ3VpZCA9IChfX2ZvcmNlIF9fdTY0KSBjdHgtPmNtX2lkLT5kZXZpY2UtPm5vZGVfZ3VpZDsKIAlyZXNwLnBvcnRfbnVtID0gY3R4LT5jbV9pZC0+cG9ydF9udW07Ci0JaWYgKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGN0eC0+Y21faWQtPmRldmljZS0+bm9kZV90eXBlKSA9PSBSRE1BX1RSQU5TUE9SVF9JQikgewotCQlzd2l0Y2ggKHJkbWFfcG9ydF9nZXRfbGlua19sYXllcihjdHgtPmNtX2lkLT5kZXZpY2UsIGN0eC0+Y21faWQtPnBvcnRfbnVtKSkgeworCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoY3R4LT5jbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUpKSB7CisJY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKKwkJc3dpdGNoIChyZG1hX3BvcnRfZ2V0X2xpbmtfbGF5ZXIoY3R4LT5jbV9pZC0+ZGV2aWNlLAorCQkJY3R4LT5jbV9pZC0+cG9ydF9udW0pKSB7CiAJCWNhc2UgSUJfTElOS19MQVlFUl9JTkZJTklCQU5EOgogCQkJdWNtYV9jb3B5X2liX3JvdXRlKCZyZXNwLCAmY3R4LT5jbV9pZC0+cm91dGUpOwogCQkJYnJlYWs7CkBAIC02ODEsNiArNjkzLDEyIEBACiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQorCQlicmVhazsKKwljYXNlIFJETUFfVFJBTlNQT1JUX0lXQVJQOgorCQl1Y21hX2NvcHlfaXdfcm91dGUoJnJlc3AsICZjdHgtPmNtX2lkLT5yb3V0ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3ZxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuYwppbmRleCA5Y2U3ODE5Yi4uMmVjNzE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3ZxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3ZxLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYzJfdnFfcmVxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHIpIHsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmci0+d2FpdF9vYmplY3QpOwotCQlyLT5yZXBseV9tc2cgPSAodTY0KSBOVUxMOworCQlyLT5yZXBseV9tc2cgPSAwOwogCQlyLT5ldmVudCA9IDA7CiAJCXItPmNtX2lkID0gTlVMTDsKIAkJci0+cXAgPSBOVUxMOwpAQCAtMTIzLDcgKzEyMyw3IEBACiAgKi8KIHZvaWQgdnFfcmVxX2ZyZWUoc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl92cV9yZXEgKnIpCiB7Ci0Jci0+cmVwbHlfbXNnID0gKHU2NCkgTlVMTDsKKwlyLT5yZXBseV9tc2cgPSAwOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyLT5yZWZjbnQpKSB7CiAJCWtmcmVlKHIpOwogCX0KQEAgLTE1MSw3ICsxNTEsNyBAQAogdm9pZCB2cV9yZXFfcHV0KHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3QgYzJfdnFfcmVxICpyKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyLT5yZWZjbnQpKSB7Ci0JCWlmIChyLT5yZXBseV9tc2cgIT0gKHU2NCkgTlVMTCkKKwkJaWYgKHItPnJlcGx5X21zZyAhPSAwKQogCQkJdnFfcmVwYnVmX2ZyZWUoYzJkZXYsCiAJCQkJICAgICAgICh2b2lkICopICh1bnNpZ25lZCBsb25nKSByLT5yZXBseV9tc2cpOwogCQlrZnJlZShyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMKaW5kZXggMGRjNjJiMS4uOGIwMGU2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMKQEAgLTM4MCw3ICszODAsNyBAQAogCQkJCQkgIDE2KSkgfCBGV19XUl9GTE9XSUQoZXAtPmh3dGlkKSk7CiAKIAlmbG93Yy0+bW5lbXZhbFswXS5tbmVtb25pYyA9IEZXX0ZMT1dDX01ORU1fUEZOVkZOOwotCWZsb3djLT5tbmVtdmFsWzBdLnZhbCA9IGNwdV90b19iZTMyKDApOworCWZsb3djLT5tbmVtdmFsWzBdLnZhbCA9IGNwdV90b19iZTMyKFBDSV9GVU5DKGVwLT5jb20uZGV2LT5yZGV2LmxsZGkucGRldi0+ZGV2Zm4pIDw8IDgpOwogCWZsb3djLT5tbmVtdmFsWzFdLm1uZW1vbmljID0gRldfRkxPV0NfTU5FTV9DSDsKIAlmbG93Yy0+bW5lbXZhbFsxXS52YWwgPSBjcHVfdG9fYmUzMihlcC0+dHhfY2hhbik7CiAJZmxvd2MtPm1uZW12YWxbMl0ubW5lbW9uaWMgPSBGV19GTE9XQ19NTkVNX1BPUlQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCmluZGV4IDIwODAwOTAuLjRmMGJlMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAkJVl9GV19SSV9SRVNfV1JfRENBRU4oMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9EQ0FDUFUoMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9GQk1JTigyKSB8Ci0JCVZfRldfUklfUkVTX1dSX0ZCTUFYKDMpIHwKKwkJVl9GV19SSV9SRVNfV1JfRkJNQVgoMikgfAogCQlWX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSE8oMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSCgwKSB8CiAJCVZfRldfUklfUkVTX1dSX0VRU0laRShlcXNpemUpKTsKQEAgLTI0Myw3ICsyNDMsNyBAQAogCQlWX0ZXX1JJX1JFU19XUl9EQ0FFTigwKSB8CiAJCVZfRldfUklfUkVTX1dSX0RDQUNQVSgwKSB8CiAJCVZfRldfUklfUkVTX1dSX0ZCTUlOKDIpIHwKLQkJVl9GV19SSV9SRVNfV1JfRkJNQVgoMykgfAorCQlWX0ZXX1JJX1JFU19XUl9GQk1BWCgyKSB8CiAJCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNITygwKSB8CiAJCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfRVFTSVpFKGVxc2l6ZSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKaW5kZXggOGI2MDZmZC4uMDhjMTk0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCkBAIC0yNjEwLDkgKzI2MTAsMTEgQEAKIAkJCQkJbmV0aWZfY2Fycmllcl9vbihuZXN2bmljLT5uZXRkZXYpOwogCiAJCQkJCXNwaW5fbG9jaygmbmVzdm5pYy0+cG9ydF9pYmV2ZW50X2xvY2spOwotCQkJCQlpZiAobmVzZGV2LT5pd19zdGF0dXMgPT0gMCkgewotCQkJCQkJbmVzZGV2LT5pd19zdGF0dXMgPSAxOwotCQkJCQkJbmVzX3BvcnRfaWJldmVudChuZXN2bmljKTsKKwkJCQkJaWYgKG5lc3ZuaWMtPm9mX2RldmljZV9yZWdpc3RlcmVkKSB7CisJCQkJCQlpZiAobmVzZGV2LT5pd19zdGF0dXMgPT0gMCkgeworCQkJCQkJCW5lc2Rldi0+aXdfc3RhdHVzID0gMTsKKwkJCQkJCQluZXNfcG9ydF9pYmV2ZW50KG5lc3ZuaWMpOworCQkJCQkJfQogCQkJCQl9CiAJCQkJCXNwaW5fdW5sb2NrKCZuZXN2bmljLT5wb3J0X2liZXZlbnRfbG9jayk7CiAJCQkJfQpAQCAtMjY0Miw5ICsyNjQ0LDExIEBACiAJCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5lc3ZuaWMtPm5ldGRldik7CiAKIAkJCQkJc3Bpbl9sb2NrKCZuZXN2bmljLT5wb3J0X2liZXZlbnRfbG9jayk7Ci0JCQkJCWlmIChuZXNkZXYtPml3X3N0YXR1cyA9PSAxKSB7Ci0JCQkJCQluZXNkZXYtPml3X3N0YXR1cyA9IDA7Ci0JCQkJCQluZXNfcG9ydF9pYmV2ZW50KG5lc3ZuaWMpOworCQkJCQlpZiAobmVzdm5pYy0+b2ZfZGV2aWNlX3JlZ2lzdGVyZWQpIHsKKwkJCQkJCWlmIChuZXNkZXYtPml3X3N0YXR1cyA9PSAxKSB7CisJCQkJCQkJbmVzZGV2LT5pd19zdGF0dXMgPSAwOworCQkJCQkJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJCQkJCQl9CiAJCQkJCX0KIAkJCQkJc3Bpbl91bmxvY2soJm5lc3ZuaWMtPnBvcnRfaWJldmVudF9sb2NrKTsKIAkJCQl9CkBAIC0yNzAzLDkgKzI3MDcsMTEgQEAKIAkJCQluZXRpZl9jYXJyaWVyX29uKG5lc3ZuaWMtPm5ldGRldik7CiAKIAkJCQlzcGluX2xvY2soJm5lc3ZuaWMtPnBvcnRfaWJldmVudF9sb2NrKTsKLQkJCQlpZiAobmVzZGV2LT5pd19zdGF0dXMgPT0gMCkgewotCQkJCQluZXNkZXYtPml3X3N0YXR1cyA9IDE7Ci0JCQkJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJCQkJaWYgKG5lc3ZuaWMtPm9mX2RldmljZV9yZWdpc3RlcmVkKSB7CisJCQkJCWlmIChuZXNkZXYtPml3X3N0YXR1cyA9PSAwKSB7CisJCQkJCQluZXNkZXYtPml3X3N0YXR1cyA9IDE7CisJCQkJCQluZXNfcG9ydF9pYmV2ZW50KG5lc3ZuaWMpOworCQkJCQl9CiAJCQkJfQogCQkJCXNwaW5fdW5sb2NrKCZuZXN2bmljLT5wb3J0X2liZXZlbnRfbG9jayk7CiAJCQl9CkBAIC0yNzIzLDkgKzI3MjksMTEgQEAKIAkJCQluZXRpZl9jYXJyaWVyX29mZihuZXN2bmljLT5uZXRkZXYpOwogCiAJCQkJc3Bpbl9sb2NrKCZuZXN2bmljLT5wb3J0X2liZXZlbnRfbG9jayk7Ci0JCQkJaWYgKG5lc2Rldi0+aXdfc3RhdHVzID09IDEpIHsKLQkJCQkJbmVzZGV2LT5pd19zdGF0dXMgPSAwOwotCQkJCQluZXNfcG9ydF9pYmV2ZW50KG5lc3ZuaWMpOworCQkJCWlmIChuZXN2bmljLT5vZl9kZXZpY2VfcmVnaXN0ZXJlZCkgeworCQkJCQlpZiAobmVzZGV2LT5pd19zdGF0dXMgPT0gMSkgeworCQkJCQkJbmVzZGV2LT5pd19zdGF0dXMgPSAwOworCQkJCQkJbmVzX3BvcnRfaWJldmVudChuZXN2bmljKTsKKwkJCQkJfQogCQkJCX0KIAkJCQlzcGluX3VubG9jaygmbmVzdm5pYy0+cG9ydF9pYmV2ZW50X2xvY2spOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCmluZGV4IDUwY2NlYjMuLmIwMTgwOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKQEAgLTYyMyw3ICs2MjMsNiBAQAogCXU4IGlibWFsZnVzZXNuYXA7CiAJc3RydWN0IHFpYl9xc2ZwX2RhdGEgcXNmcF9kYXRhOwogCWNoYXIgZXBtc2didWZbMTkyXTsgLyogZm9yIHBvcnQgZXJyb3IgaW50ZXJydXB0IG1zZyBidWZmZXIgKi8KLQl1OCBib3VuY2VkOwogfTsKIAogc3RhdGljIHN0cnVjdCB7CkBAIC0xODgxLDIzICsxODgwLDcgQEAKIAkJICAgIElCX1BIWVNQT1JUU1RBVEVfRElTQUJMRUQpCiAJCQlxaWJfc2V0X2liXzczMjJfbHN0YXRlKHBwZCwgMCwKIAkJCSAgICAgICBRTE9HSUNfSUJfSUJDQ19MSU5LSU5JVENNRF9ESVNBQkxFKTsKLQkJZWxzZSB7Ci0JCQl1MzIgbHN0YXRlOwotCQkJLyoKLQkJCSAqIFdlIG5lZWQgdGhlIGN1cnJlbnQgbG9naWNhbCBsaW5rIHN0YXRlIGJlZm9yZQotCQkJICogbGZsYWdzIGFyZSBzZXQgaW4gaGFuZGxlX2VfaWJzdGF0dXNjaGFuZ2VkLgotCQkJICovCi0JCQlsc3RhdGUgPSBxaWJfNzMyMl9pYmxpbmtfc3RhdGUoaWJjcyk7Ci0KLQkJCWlmIChJU19RTUgoZGQpICYmICFwcGQtPmNwc3BlYy0+Ym91bmNlZCAmJgotCQkJICAgIGx0c3RhdGUgPT0gSUJfUEhZU1BPUlRTVEFURV9MSU5LVVAgJiYKLQkJCSAgICAobHN0YXRlID49IElCX1BPUlRfSU5JVCAmJgotCQkJCWxzdGF0ZSA8PSBJQl9QT1JUX0FDVElWRSkpIHsKLQkJCQlwcGQtPmNwc3BlYy0+Ym91bmNlZCA9IDE7Ci0JCQkJcWliXzczMjJfc2V0X2liX2NmZyhwcGQsIFFJQl9JQl9DRkdfTFNUQVRFLAotCQkJCQlJQl9MSU5LQ01EX0RPV04gfCBJQl9MSU5LSU5JVENNRF9QT0xMKTsKLQkJCX0KLQorCQllbHNlCiAJCQkvKgogCQkJICogU2luY2UgZ29pbmcgaW50byBhIHJlY292ZXJ5IHN0YXRlIGNhdXNlcyB0aGUgbGluawogCQkJICogc3RhdGUgdG8gZ28gZG93biBhbmQgc2luY2UgcmVjb3ZlcnkgaXMgdHJhbnNpdG9yeSwKQEAgLTE5MTEsNyArMTg5NCw2IEBACiAJCQkgICAgbHRzdGF0ZSAhPSBJQl9QSFlTUE9SVFNUQVRFX1JFQ09WRVJZX1dBSVRSTVQgJiYKIAkJCSAgICBsdHN0YXRlICE9IElCX1BIWVNQT1JUU1RBVEVfUkVDT1ZFUllfSURMRSkKIAkJCQlxaWJfaGFuZGxlX2VfaWJzdGF0dXNjaGFuZ2VkKHBwZCwgaWJjcyk7Ci0JCX0KIAl9CiAJaWYgKCptc2cgJiYgaXNlcnIpCiAJCXFpYl9kZXZfcG9ydGVycihkZCwgcHBkLT5wb3J0LCAiJXMgZXJyb3JcbiIsIG1zZyk7CkBAIC0yMzgxLDYgKzIzNjMsMTEgQEAKIAlxaWJfd3JpdGVfa3JlZ19wb3J0KHBwZCwga3JwX3JjdmN0cmwsIHBwZC0+cF9yY3ZjdHJsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+Y3NwZWMtPnJjdm1vZF9sb2NrLCBmbGFncyk7CiAKKwkvKiBIb2xkIHRoZSBsaW5rIHN0YXRlIG1hY2hpbmUgZm9yIG1lenogYm9hcmRzICovCisJaWYgKElTX1FNSChkZCkgfHwgSVNfUU1FKGRkKSkKKwkJcWliX3NldF9pYl83MzIyX2xzdGF0ZShwcGQsIDAsCisJCQkJICAgICAgIFFMT0dJQ19JQl9JQkNDX0xJTktJTklUQ01EX0RJU0FCTEUpOworCiAJLyogQWxzbyBlbmFibGUgSUJTVEFUVVNDSEcgaW50ZXJydXB0LiAgKi8KIAl2YWwgPSBxaWJfcmVhZF9rcmVnX3BvcnQocHBkLCBrcnBfZXJybWFzayk7CiAJcWliX3dyaXRlX2tyZWdfcG9ydChwcGQsIGtycF9lcnJtYXNrLApAQCAtNTcwMiw2ICs1Njg5LDExIEBACiAJCQkJcHBkLT5jcHNwZWMtPmgxX3ZhbCA9IGgxOwogCQkJLyogbm93IGNoYW5nZSB0aGUgSUJDIGFuZCBzZXJkZXMsIG92ZXJyaWRpbmcgZ2VuZXJpYyAqLwogCQkJaW5pdF90eGRkc190YWJsZShwcGQsIDEpOworCQkJLyogUmUtZW5hYmxlIHRoZSBwaHlzaWNhbCBzdGF0ZSBtYWNoaW5lIG9uIG1lenogYm9hcmRzCisJCQkgKiBub3cgdGhhdCB0aGUgY29ycmVjdCBzZXR0aW5ncyBoYXZlIGJlZW4gc2V0LiAqLworCQkJaWYgKElTX1FNSChkZCkgfHwgSVNfUU1FKGRkKSkKKwkJCQlxaWJfc2V0X2liXzczMjJfbHN0YXRlKHBwZCwgMCwKKwkJCQkJICAgIFFMT0dJQ19JQl9JQkNDX0xJTktJTklUQ01EX1NMRUVQKTsKIAkJCWFueSsrOwogCQl9CiAJCWlmICgqbnh0ID09ICdcbicpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9yYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcmMuYwppbmRleCA4MjQ1MjM3Li5lY2EwYzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9yYy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3JjLmMKQEAgLTEwMDUsNyArMTAwNSw4IEBACiAJICogdGhlcmUgYXJlIHN0aWxsIHJlcXVlc3RzIHRoYXQgaGF2ZW4ndCBiZWVuIGFja2VkLgogCSAqLwogCWlmICgocHNuICYgSUJfQlRIX1JFUV9BQ0spICYmIHFwLT5zX2Fja2VkICE9IHFwLT5zX3RhaWwgJiYKLQkgICAgIShxcC0+c19mbGFncyAmIChRSUJfU19USU1FUiB8IFFJQl9TX1dBSVRfUk5SIHwgUUlCX1NfV0FJVF9QU04pKSkKKwkgICAgIShxcC0+c19mbGFncyAmIChRSUJfU19USU1FUiB8IFFJQl9TX1dBSVRfUk5SIHwgUUlCX1NfV0FJVF9QU04pKSAmJgorCSAgICAoaWJfcWliX3N0YXRlX29wc1txcC0+c3RhdGVdICYgUUlCX1BST0NFU1NfUkVDVl9PSykpCiAJCXN0YXJ0X3RpbWVyKHFwKTsKIAogCXdoaWxlIChxcC0+c19sYXN0ICE9IHFwLT5zX2Fja2VkKSB7CkBAIC0xNDM5LDYgKzE0NDAsOCBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CisJaWYgKCEoaWJfcWliX3N0YXRlX29wc1txcC0+c3RhdGVdICYgUUlCX1BST0NFU1NfUkVDVl9PSykpCisJCWdvdG8gYWNrX2RvbmU7CiAKIAkvKiBJZ25vcmUgaW52YWxpZCByZXNwb25zZXMuICovCiAJaWYgKHFpYl9jbXAyNChwc24sIHFwLT5zX25leHRfcHNuKSA+PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCmluZGV4IDIzY2Y4ZmMuLjViOGY1OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYworKysgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKQEAgLTM2MCw3ICszNjAsNyBAQAogCWV2ZW50LT5vd25lciA9IG93bmVyOwogCiAJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPm5vZGUsICZnYW1lcG9ydF9ldmVudF9saXN0KTsKLQlzY2hlZHVsZV93b3JrKCZnYW1lcG9ydF9ldmVudF93b3JrKTsKKwlxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCAmZ2FtZXBvcnRfZXZlbnRfd29yayk7CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYW1lcG9ydF9ldmVudF9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggNzk4NTExNC4uMTE5MDViNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtNzUsNyArNzUsNiBAQAogICogZGV2LT5ldmVudF9sb2NrIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGlucHV0X3Bhc3NfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqc3JjX2hhbmRsZXIsCiAJCQkgICAgIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQogewogCXN0cnVjdCBpbnB1dF9oYW5kbGVyICpoYW5kbGVyOwpAQCAtOTQsMTUgKzkzLDYgQEAKIAkJCQljb250aW51ZTsKIAogCQkJaGFuZGxlciA9IGhhbmRsZS0+aGFuZGxlcjsKLQotCQkJLyoKLQkJCSAqIElmIHRoaXMgaXMgdGhlIGhhbmRsZXIgdGhhdCBpbmplY3RlZCB0aGlzCi0JCQkgKiBwYXJ0aWN1bGFyIGV2ZW50IHdlIHdhbnQgdG8gc2tpcCBpdCB0byBhdm9pZAotCQkJICogZmlsdGVycyBmaXJpbmcgYWdhaW4gYW5kIGFnYWluLgotCQkJICovCi0JCQlpZiAoaGFuZGxlciA9PSBzcmNfaGFuZGxlcikKLQkJCQljb250aW51ZTsKLQogCQkJaWYgKCFoYW5kbGVyLT5maWx0ZXIpIHsKIAkJCQlpZiAoZmlsdGVyZWQpCiAJCQkJCWJyZWFrOwpAQCAtMTMyLDcgKzEyMiw3IEBACiAJaWYgKHRlc3RfYml0KGRldi0+cmVwZWF0X2tleSwgZGV2LT5rZXkpICYmCiAJICAgIGlzX2V2ZW50X3N1cHBvcnRlZChkZXYtPnJlcGVhdF9rZXksIGRldi0+a2V5Yml0LCBLRVlfTUFYKSkgewogCi0JCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBOVUxMLCBFVl9LRVksIGRldi0+cmVwZWF0X2tleSwgMik7CisJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBFVl9LRVksIGRldi0+cmVwZWF0X2tleSwgMik7CiAKIAkJaWYgKGRldi0+c3luYykgewogCQkJLyoKQEAgLTE0MSw3ICsxMzEsNyBAQAogCQkJICogT3RoZXJ3aXNlIGFzc3VtZSB0aGF0IHRoZSBkcml2ZXIgd2lsbCBzZW5kCiAJCQkgKiBTWU5fUkVQT1JUIG9uY2UgaXQncyBkb25lLgogCQkJICovCi0JCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgTlVMTCwgRVZfU1lOLCBTWU5fUkVQT1JULCAxKTsKKwkJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBFVl9TWU4sIFNZTl9SRVBPUlQsIDEpOwogCQl9CiAKIAkJaWYgKGRldi0+cmVwW1JFUF9QRVJJT0RdKQpAQCAtMTc0LDcgKzE2NCw2IEBACiAjZGVmaW5lIElOUFVUX1BBU1NfVE9fQUxMCShJTlBVVF9QQVNTX1RPX0hBTkRMRVJTIHwgSU5QVVRfUEFTU19UT19ERVZJQ0UpCiAKIHN0YXRpYyBpbnQgaW5wdXRfaGFuZGxlX2Fic19ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCi0JCQkJICBzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqc3JjX2hhbmRsZXIsCiAJCQkJICB1bnNpZ25lZCBpbnQgY29kZSwgaW50ICpwdmFsKQogewogCWJvb2wgaXNfbXRfZXZlbnQ7CkBAIC0yMTgsMTUgKzIwNywxMyBAQAogCS8qIEZsdXNoIHBlbmRpbmcgInNsb3QiIGV2ZW50ICovCiAJaWYgKGlzX210X2V2ZW50ICYmIGRldi0+c2xvdCAhPSBpbnB1dF9hYnNfZ2V0X3ZhbChkZXYsIEFCU19NVF9TTE9UKSkgewogCQlpbnB1dF9hYnNfc2V0X3ZhbChkZXYsIEFCU19NVF9TTE9ULCBkZXYtPnNsb3QpOwotCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgc3JjX2hhbmRsZXIsCi0JCQkJIEVWX0FCUywgQUJTX01UX1NMT1QsIGRldi0+c2xvdCk7CisJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBFVl9BQlMsIEFCU19NVF9TTE9ULCBkZXYtPnNsb3QpOwogCX0KIAogCXJldHVybiBJTlBVVF9QQVNTX1RPX0hBTkRMRVJTOwogfQogCiBzdGF0aWMgdm9pZCBpbnB1dF9oYW5kbGVfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpbnB1dF9oYW5kbGVyICpzcmNfaGFuZGxlciwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKIHsKIAlpbnQgZGlzcG9zaXRpb24gPSBJTlBVVF9JR05PUkVfRVZFTlQ7CkBAIC0yNzksOCArMjY2LDcgQEAKIAogCWNhc2UgRVZfQUJTOgogCQlpZiAoaXNfZXZlbnRfc3VwcG9ydGVkKGNvZGUsIGRldi0+YWJzYml0LCBBQlNfTUFYKSkKLQkJCWRpc3Bvc2l0aW9uID0gaW5wdXRfaGFuZGxlX2Fic19ldmVudChkZXYsIHNyY19oYW5kbGVyLAotCQkJCQkJCSAgICAgY29kZSwgJnZhbHVlKTsKKwkJCWRpc3Bvc2l0aW9uID0gaW5wdXRfaGFuZGxlX2Fic19ldmVudChkZXYsIGNvZGUsICZ2YWx1ZSk7CiAKIAkJYnJlYWs7CiAKQEAgLTMzOCw3ICszMjQsNyBAQAogCQlkZXYtPmV2ZW50KGRldiwgdHlwZSwgY29kZSwgdmFsdWUpOwogCiAJaWYgKGRpc3Bvc2l0aW9uICYgSU5QVVRfUEFTU19UT19IQU5ETEVSUykKLQkJaW5wdXRfcGFzc19ldmVudChkZXYsIHNyY19oYW5kbGVyLCB0eXBlLCBjb2RlLCB2YWx1ZSk7CisJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCB0eXBlLCBjb2RlLCB2YWx1ZSk7CiB9CiAKIC8qKgpAQCAtMzY3LDcgKzM1Myw3IEBACiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCQlhZGRfaW5wdXRfcmFuZG9tbmVzcyh0eXBlLCBjb2RlLCB2YWx1ZSk7Ci0JCWlucHV0X2hhbmRsZV9ldmVudChkZXYsIE5VTEwsIHR5cGUsIGNvZGUsIHZhbHVlKTsKKwkJaW5wdXRfaGFuZGxlX2V2ZW50KGRldiwgdHlwZSwgY29kZSwgdmFsdWUpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAl9CiB9CkBAIC0zOTcsOCArMzgzLDcgQEAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlncmFiID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+Z3JhYik7CiAJCWlmICghZ3JhYiB8fCBncmFiID09IGhhbmRsZSkKLQkJCWlucHV0X2hhbmRsZV9ldmVudChkZXYsIGhhbmRsZS0+aGFuZGxlciwKLQkJCQkJICAgdHlwZSwgY29kZSwgdmFsdWUpOworCQkJaW5wdXRfaGFuZGxlX2V2ZW50KGRldiwgdHlwZSwgY29kZSwgdmFsdWUpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKQEAgLTYxMSwxMCArNTk2LDEwIEBACiAJCWZvciAoY29kZSA9IDA7IGNvZGUgPD0gS0VZX01BWDsgY29kZSsrKSB7CiAJCQlpZiAoaXNfZXZlbnRfc3VwcG9ydGVkKGNvZGUsIGRldi0+a2V5Yml0LCBLRVlfTUFYKSAmJgogCQkJICAgIF9fdGVzdF9hbmRfY2xlYXJfYml0KGNvZGUsIGRldi0+a2V5KSkgewotCQkJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBOVUxMLCBFVl9LRVksIGNvZGUsIDApOworCQkJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBFVl9LRVksIGNvZGUsIDApOwogCQkJfQogCQl9Ci0JCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBOVUxMLCBFVl9TWU4sIFNZTl9SRVBPUlQsIDEpOworCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfU1lOLCBTWU5fUkVQT1JULCAxKTsKIAl9CiB9CiAKQEAgLTg4OSw5ICs4NzQsOSBAQAogCSAgICAhaXNfZXZlbnRfc3VwcG9ydGVkKG9sZF9rZXljb2RlLCBkZXYtPmtleWJpdCwgS0VZX01BWCkgJiYKIAkgICAgX190ZXN0X2FuZF9jbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5KSkgewogCi0JCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBOVUxMLCBFVl9LRVksIG9sZF9rZXljb2RlLCAwKTsKKwkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX0tFWSwgb2xkX2tleWNvZGUsIDApOwogCQlpZiAoZGV2LT5zeW5jKQotCQkJaW5wdXRfcGFzc19ldmVudChkZXYsIE5VTEwsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMSk7CisJCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfU1lOLCBTWU5fUkVQT1JULCAxKTsKIAl9CiAKICBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKaW5kZXggNDE3NTA3My4uYzdhOTIwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwpAQCAtMzQzLDYgKzM0MywxNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbm1rLXNrZS1rZXlwYWQuCiAKK2NvbmZpZyBLRVlCT0FSRF9URUdSQQorCXRyaXN0YXRlICJOVklESUEgVGVncmEgaW50ZXJuYWwgbWF0cml4IGtleWJvYXJkIGNvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfVEVHUkEKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIG1hdHJpeCBrZXlib2FyZCBjb25uZWN0ZWQgZGlyZWN0bHkKKwkgIHRvIHRoZSBpbnRlcm5hbCBrZXlib2FyZCBjb250cm9sbGVyIG9uIFRlZ3JhIFNvQ3MuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRlZ3JhLWtiYy4KKwogY29uZmlnIEtFWUJPQVJEX09QRU5DT1JFUwogCXRyaXN0YXRlICJPcGVuQ29yZXMgS2V5Ym9hcmQgQ29udHJvbGxlciIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQppbmRleCA0ZTU1NzFiLi40NjhjNjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKQEAgLTQyLDYgKzQyLDcgQEAKIG9iai0kKENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSkJCSs9IHN0b3dhd2F5Lm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9TVU5LQkQpCQkrPSBzdW5rYmQubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1RDMzU4OVgpCQkrPSB0YzM1ODl4LWtleXBhZC5vCitvYmotJChDT05GSUdfS0VZQk9BUkRfVEVHUkEpCQkrPSB0ZWdyYS1rYmMubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1RORVRWMTA3WCkJKz0gdG5ldHYxMDd4LWtleXBhZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfVFdMNDAzMCkJCSs9IHR3bDQwMzBfa2V5cGFkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9YVEtCRCkJCSs9IHh0a2JkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCmluZGV4IDYwNjlhYmUuLmViMzAwNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbiA9IGJkYXRhLT5idXR0b247CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBiZGF0YS0+aW5wdXQ7CiAJdW5zaWduZWQgaW50IHR5cGUgPSBidXR0b24tPnR5cGUgPzogRVZfS0VZOwotCWludCBzdGF0ZSA9IChncGlvX2dldF92YWx1ZShidXR0b24tPmdwaW8pID8gMSA6IDApIF4gYnV0dG9uLT5hY3RpdmVfbG93OworCWludCBzdGF0ZSA9IChncGlvX2dldF92YWx1ZV9jYW5zbGVlcChidXR0b24tPmdwaW8pID8gMSA6IDApIF4gYnV0dG9uLT5hY3RpdmVfbG93OwogCiAJaW5wdXRfZXZlbnQoaW5wdXQsIHR5cGUsIGJ1dHRvbi0+Y29kZSwgISFzdGF0ZSk7CiAJaW5wdXRfc3luYyhpbnB1dCk7CkBAIC00MTAsOCArNDEwLDggQEAKIAlpZiAoIWJ1dHRvbi0+Y2FuX2Rpc2FibGUpCiAJCWlycWZsYWdzIHw9IElSUUZfU0hBUkVEOwogCi0JZXJyb3IgPSByZXF1ZXN0X2lycShpcnEsIGdwaW9fa2V5c19pc3IsIGlycWZsYWdzLCBkZXNjLCBiZGF0YSk7Ci0JaWYgKGVycm9yKSB7CisJZXJyb3IgPSByZXF1ZXN0X2FueV9jb250ZXh0X2lycShpcnEsIGdwaW9fa2V5c19pc3IsIGlycWZsYWdzLCBkZXNjLCBiZGF0YSk7CisJaWYgKGVycm9yIDwgMCkgewogCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBjbGFpbSBpcnEgJWQ7IGVycm9yICVkXG4iLAogCQkJaXJxLCBlcnJvcik7CiAJCWdvdG8gZmFpbDM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RlZ3JhLWtiYy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90ZWdyYS1rYmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWNlOTAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90ZWdyYS1rYmMuYwpAQCAtMCwwICsxLDc4MyBAQAorLyoKKyAqIEtleWJvYXJkIGNsYXNzIGlucHV0IGRyaXZlciBmb3IgdGhlIE5WSURJQSBUZWdyYSBTb0MgaW50ZXJuYWwgbWF0cml4CisgKiBrZXlib2FyZCBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxtYWNoL2Nsay5oPgorI2luY2x1ZGUgPG1hY2gva2JjLmg+CisKKyNkZWZpbmUgS0JDX01BWF9ERUJPVU5DRV9DTlQJMHgzZmZ1CisKKy8qIEtCQyByb3cgc2NhbiB0aW1lIGFuZCBkZWxheSBmb3IgYmVnaW5uaW5nIHRoZSByb3cgc2Nhbi4gKi8KKyNkZWZpbmUgS0JDX1JPV19TQ0FOX1RJTUUJMTYKKyNkZWZpbmUgS0JDX1JPV19TQ0FOX0RMWQk1CisKKy8qIEtCQyB1c2VzIGEgMzJLSHogY2xvY2sgc28gYSBjeWNsZSA9IDEvMzJLaHogKi8KKyNkZWZpbmUgS0JDX0NZQ0xFX1VTRUMJMzIKKworLyogS0JDIFJlZ2lzdGVycyAqLworCisvKiBLQkMgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBLQkNfQ09OVFJPTF8wCTB4MAorI2RlZmluZSBLQkNfRklGT19USF9DTlRfU0hJRlQoY250KQkoY250IDw8IDE0KQorI2RlZmluZSBLQkNfREVCT1VOQ0VfQ05UX1NISUZUKGNudCkJKGNudCA8PCA0KQorI2RlZmluZSBLQkNfQ09OVFJPTF9GSUZPX0NOVF9JTlRfRU4JKDEgPDwgMykKKyNkZWZpbmUgS0JDX0NPTlRST0xfS0JDX0VOCQkoMSA8PCAwKQorCisvKiBLQkMgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lIEtCQ19JTlRfMAkweDQKKyNkZWZpbmUgS0JDX0lOVF9GSUZPX0NOVF9JTlRfU1RBVFVTCSgxIDw8IDIpCisKKyNkZWZpbmUgS0JDX1JPV19DRkcwXzAJMHg4CisjZGVmaW5lIEtCQ19DT0xfQ0ZHMF8wCTB4MTgKKyNkZWZpbmUgS0JDX0lOSVRfRExZXzAJMHgyOAorI2RlZmluZSBLQkNfUlBUX0RMWV8wCTB4MmMKKyNkZWZpbmUgS0JDX0tQX0VOVDBfMAkweDMwCisjZGVmaW5lIEtCQ19LUF9FTlQxXzAJMHgzNAorI2RlZmluZSBLQkNfUk9XMF9NQVNLXzAJMHgzOAorCisjZGVmaW5lIEtCQ19ST1dfU0hJRlQJMworCitzdHJ1Y3QgdGVncmFfa2JjIHsKKwl2b2lkIF9faW9tZW0gKm1taW87CisJc3RydWN0IGlucHV0X2RldiAqaWRldjsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGludCB3YWtlX2VuYWJsZV9yb3dzOworCXVuc2lnbmVkIGludCB3YWtlX2VuYWJsZV9jb2xzOworCXNwaW5sb2NrX3QgbG9jazsKKwl1bnNpZ25lZCBpbnQgcmVwb2xsX2RseTsKKwl1bnNpZ25lZCBsb25nIGNwX2RseV9qaWZmaWVzOworCWJvb2wgdXNlX2ZuX21hcDsKKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXVuc2lnbmVkIHNob3J0IGtleWNvZGVbS0JDX01BWF9LRVkgKiAyXTsKKwl1bnNpZ25lZCBzaG9ydCBjdXJyZW50X2tleXNbS0JDX01BWF9LUEVOVF07CisJdW5zaWduZWQgaW50IG51bV9wcmVzc2VkX2tleXM7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IGNsayAqY2xrOworfTsKKworc3RhdGljIGNvbnN0IHUzMiB0ZWdyYV9rYmNfZGVmYXVsdF9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMiwgS0VZX1cpLAorCUtFWSgwLCAzLCBLRVlfUyksCisJS0VZKDAsIDQsIEtFWV9BKSwKKwlLRVkoMCwgNSwgS0VZX1opLAorCUtFWSgwLCA3LCBLRVlfRk4pLAorCisJS0VZKDEsIDcsIEtFWV9MRUZUTUVUQSksCisKKwlLRVkoMiwgNiwgS0VZX1JJR0hUQUxUKSwKKwlLRVkoMiwgNywgS0VZX0xFRlRBTFQpLAorCisJS0VZKDMsIDAsIEtFWV81KSwKKwlLRVkoMywgMSwgS0VZXzQpLAorCUtFWSgzLCAyLCBLRVlfUiksCisJS0VZKDMsIDMsIEtFWV9FKSwKKwlLRVkoMywgNCwgS0VZX0YpLAorCUtFWSgzLCA1LCBLRVlfRCksCisJS0VZKDMsIDYsIEtFWV9YKSwKKworCUtFWSg0LCAwLCBLRVlfNyksCisJS0VZKDQsIDEsIEtFWV82KSwKKwlLRVkoNCwgMiwgS0VZX1QpLAorCUtFWSg0LCAzLCBLRVlfSCksCisJS0VZKDQsIDQsIEtFWV9HKSwKKwlLRVkoNCwgNSwgS0VZX1YpLAorCUtFWSg0LCA2LCBLRVlfQyksCisJS0VZKDQsIDcsIEtFWV9TUEFDRSksCisKKwlLRVkoNSwgMCwgS0VZXzkpLAorCUtFWSg1LCAxLCBLRVlfOCksCisJS0VZKDUsIDIsIEtFWV9VKSwKKwlLRVkoNSwgMywgS0VZX1kpLAorCUtFWSg1LCA0LCBLRVlfSiksCisJS0VZKDUsIDUsIEtFWV9OKSwKKwlLRVkoNSwgNiwgS0VZX0IpLAorCUtFWSg1LCA3LCBLRVlfQkFDS1NMQVNIKSwKKworCUtFWSg2LCAwLCBLRVlfTUlOVVMpLAorCUtFWSg2LCAxLCBLRVlfMCksCisJS0VZKDYsIDIsIEtFWV9PKSwKKwlLRVkoNiwgMywgS0VZX0kpLAorCUtFWSg2LCA0LCBLRVlfTCksCisJS0VZKDYsIDUsIEtFWV9LKSwKKwlLRVkoNiwgNiwgS0VZX0NPTU1BKSwKKwlLRVkoNiwgNywgS0VZX00pLAorCisJS0VZKDcsIDEsIEtFWV9FUVVBTCksCisJS0VZKDcsIDIsIEtFWV9SSUdIVEJSQUNFKSwKKwlLRVkoNywgMywgS0VZX0VOVEVSKSwKKwlLRVkoNywgNywgS0VZX01FTlUpLAorCisJS0VZKDgsIDQsIEtFWV9SSUdIVFNISUZUKSwKKwlLRVkoOCwgNSwgS0VZX0xFRlRTSElGVCksCisKKwlLRVkoOSwgNSwgS0VZX1JJR0hUQ1RSTCksCisJS0VZKDksIDcsIEtFWV9MRUZUQ1RSTCksCisKKwlLRVkoMTEsIDAsIEtFWV9MRUZUQlJBQ0UpLAorCUtFWSgxMSwgMSwgS0VZX1ApLAorCUtFWSgxMSwgMiwgS0VZX0FQT1NUUk9QSEUpLAorCUtFWSgxMSwgMywgS0VZX1NFTUlDT0xPTiksCisJS0VZKDExLCA0LCBLRVlfU0xBU0gpLAorCUtFWSgxMSwgNSwgS0VZX0RPVCksCisKKwlLRVkoMTIsIDAsIEtFWV9GMTApLAorCUtFWSgxMiwgMSwgS0VZX0Y5KSwKKwlLRVkoMTIsIDIsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSgxMiwgMywgS0VZXzMpLAorCUtFWSgxMiwgNCwgS0VZXzIpLAorCUtFWSgxMiwgNSwgS0VZX1VQKSwKKwlLRVkoMTIsIDYsIEtFWV9QUklOVCksCisJS0VZKDEyLCA3LCBLRVlfUEFVU0UpLAorCisJS0VZKDEzLCAwLCBLRVlfSU5TRVJUKSwKKwlLRVkoMTMsIDEsIEtFWV9ERUxFVEUpLAorCUtFWSgxMywgMywgS0VZX1BBR0VVUCksCisJS0VZKDEzLCA0LCBLRVlfUEFHRURPV04pLAorCUtFWSgxMywgNSwgS0VZX1JJR0hUKSwKKwlLRVkoMTMsIDYsIEtFWV9ET1dOKSwKKwlLRVkoMTMsIDcsIEtFWV9MRUZUKSwKKworCUtFWSgxNCwgMCwgS0VZX0YxMSksCisJS0VZKDE0LCAxLCBLRVlfRjEyKSwKKwlLRVkoMTQsIDIsIEtFWV9GOCksCisJS0VZKDE0LCAzLCBLRVlfUSksCisJS0VZKDE0LCA0LCBLRVlfRjQpLAorCUtFWSgxNCwgNSwgS0VZX0YzKSwKKwlLRVkoMTQsIDYsIEtFWV8xKSwKKwlLRVkoMTQsIDcsIEtFWV9GNyksCisKKwlLRVkoMTUsIDAsIEtFWV9FU0MpLAorCUtFWSgxNSwgMSwgS0VZX0dSQVZFKSwKKwlLRVkoMTUsIDIsIEtFWV9GNSksCisJS0VZKDE1LCAzLCBLRVlfVEFCKSwKKwlLRVkoMTUsIDQsIEtFWV9GMSksCisJS0VZKDE1LCA1LCBLRVlfRjIpLAorCUtFWSgxNSwgNiwgS0VZX0NBUFNMT0NLKSwKKwlLRVkoMTUsIDcsIEtFWV9GNiksCisKKwkvKiBTb2Z0d2FyZSBIYW5kbGVkIEZ1bmN0aW9uIEtleXMgKi8KKwlLRVkoMjAsIDAsIEtFWV9LUDcpLAorCisJS0VZKDIxLCAwLCBLRVlfS1A5KSwKKwlLRVkoMjEsIDEsIEtFWV9LUDgpLAorCUtFWSgyMSwgMiwgS0VZX0tQNCksCisJS0VZKDIxLCA0LCBLRVlfS1AxKSwKKworCUtFWSgyMiwgMSwgS0VZX0tQU0xBU0gpLAorCUtFWSgyMiwgMiwgS0VZX0tQNiksCisJS0VZKDIyLCAzLCBLRVlfS1A1KSwKKwlLRVkoMjIsIDQsIEtFWV9LUDMpLAorCUtFWSgyMiwgNSwgS0VZX0tQMiksCisJS0VZKDIyLCA3LCBLRVlfS1AwKSwKKworCUtFWSgyNywgMSwgS0VZX0tQQVNURVJJU0spLAorCUtFWSgyNywgMywgS0VZX0tQTUlOVVMpLAorCUtFWSgyNywgNCwgS0VZX0tQUExVUyksCisJS0VZKDI3LCA1LCBLRVlfS1BET1QpLAorCisJS0VZKDI4LCA1LCBLRVlfVk9MVU1FVVApLAorCisJS0VZKDI5LCAzLCBLRVlfSE9NRSksCisJS0VZKDI5LCA0LCBLRVlfRU5EKSwKKwlLRVkoMjksIDUsIEtFWV9CUklHSFRORVNTRE9XTiksCisJS0VZKDI5LCA2LCBLRVlfVk9MVU1FRE9XTiksCisJS0VZKDI5LCA3LCBLRVlfQlJJR0hUTkVTU1VQKSwKKworCUtFWSgzMCwgMCwgS0VZX05VTUxPQ0spLAorCUtFWSgzMCwgMSwgS0VZX1NDUk9MTExPQ0spLAorCUtFWSgzMCwgMiwgS0VZX01VVEUpLAorCisJS0VZKDMxLCA0LCBLRVlfSEVMUCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSB0ZWdyYV9rYmNfZGVmYXVsdF9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IHRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKHRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcCksCit9OworCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfcmVwb3J0X3JlbGVhc2VkX2tleXMoc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQkJCSAgIHVuc2lnbmVkIHNob3J0IG9sZF9rZXljb2Rlc1tdLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgb2xkX251bV9rZXlzLAorCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBuZXdfa2V5Y29kZXNbXSwKKwkJCQkJICAgdW5zaWduZWQgaW50IG5ld19udW1fa2V5cykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBvbGRfbnVtX2tleXM7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgbmV3X251bV9rZXlzOyBqKyspCisJCQlpZiAob2xkX2tleWNvZGVzW2ldID09IG5ld19rZXljb2Rlc1tqXSkKKwkJCQlicmVhazsKKworCQlpZiAoaiA9PSBuZXdfbnVtX2tleXMpCisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBvbGRfa2V5Y29kZXNbaV0sIDApOworCX0KK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX3JlcG9ydF9wcmVzc2VkX2tleXMoc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQkJCSAgdW5zaWduZWQgY2hhciBzY2FuY29kZXNbXSwKKwkJCQkJICB1bnNpZ25lZCBzaG9ydCBrZXljb2Rlc1tdLAorCQkJCQkgIHVuc2lnbmVkIGludCBudW1fcHJlc3NlZF9rZXlzKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wcmVzc2VkX2tleXM7IGkrKykgeworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfTVNDLCBNU0NfU0NBTiwgc2NhbmNvZGVzW2ldKTsKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwga2V5Y29kZXNbaV0sIDEpOworCX0KK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX3JlcG9ydF9rZXlzKHN0cnVjdCB0ZWdyYV9rYmMgKmtiYykKK3sKKwl1bnNpZ25lZCBjaGFyIHNjYW5jb2Rlc1tLQkNfTUFYX0tQRU5UXTsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2Rlc1tLQkNfTUFYX0tQRU5UXTsKKwl1MzIgdmFsID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbnVtX2Rvd24gPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCBmbl9rZXlwcmVzcyA9IGZhbHNlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBLQkNfTUFYX0tQRU5UOyBpKyspIHsKKwkJaWYgKChpICUgNCkgPT0gMCkKKwkJCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19LUF9FTlQwXzAgKyBpKTsKKworCQlpZiAodmFsICYgMHg4MCkgeworCQkJdW5zaWduZWQgaW50IGNvbCA9IHZhbCAmIDB4MDc7CisJCQl1bnNpZ25lZCBpbnQgcm93ID0gKHZhbCA+PiAzKSAmIDB4MGY7CisJCQl1bnNpZ25lZCBjaGFyIHNjYW5jb2RlID0KKwkJCQlNQVRSSVhfU0NBTl9DT0RFKHJvdywgY29sLCBLQkNfUk9XX1NISUZUKTsKKworCQkJc2NhbmNvZGVzW251bV9kb3duXSA9IHNjYW5jb2RlOworCQkJa2V5Y29kZXNbbnVtX2Rvd25dID0ga2JjLT5rZXljb2RlW3NjYW5jb2RlXTsKKwkJCS8qIElmIGRyaXZlciB1c2VzIEZuIG1hcCwgZG8gbm90IHJlcG9ydCB0aGUgRm4ga2V5LiAqLworCQkJaWYgKChrZXljb2Rlc1tudW1fZG93bl0gPT0gS0VZX0ZOKSAmJiBrYmMtPnVzZV9mbl9tYXApCisJCQkJZm5fa2V5cHJlc3MgPSB0cnVlOworCQkJZWxzZQorCQkJCW51bV9kb3duKys7CisJCX0KKworCQl2YWwgPj49IDg7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcGxhdGZvcm0gdXNlcyBGbiBrZXltYXBzLCB0cmFuc2xhdGUga2V5cyBvbiBhIEZuIGtleXByZXNzLgorCSAqIEZ1bmN0aW9uIGtleWNvZGVzIGFyZSBLQkNfTUFYX0tFWSBhcGFydCBmcm9tIHRoZSBwbGFpbiBrZXljb2Rlcy4KKwkgKi8KKwlpZiAoZm5fa2V5cHJlc3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9kb3duOyBpKyspIHsKKwkJCXNjYW5jb2Rlc1tpXSArPSBLQkNfTUFYX0tFWTsKKwkJCWtleWNvZGVzW2ldID0ga2JjLT5rZXljb2RlW3NjYW5jb2Rlc1tpXV07CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrYmMtPmxvY2ssIGZsYWdzKTsKKworCXRlZ3JhX2tiY19yZXBvcnRfcmVsZWFzZWRfa2V5cyhrYmMtPmlkZXYsCisJCQkJICAgICAgIGtiYy0+Y3VycmVudF9rZXlzLCBrYmMtPm51bV9wcmVzc2VkX2tleXMsCisJCQkJICAgICAgIGtleWNvZGVzLCBudW1fZG93bik7CisJdGVncmFfa2JjX3JlcG9ydF9wcmVzc2VkX2tleXMoa2JjLT5pZGV2LCBzY2FuY29kZXMsIGtleWNvZGVzLCBudW1fZG93bik7CisJaW5wdXRfc3luYyhrYmMtPmlkZXYpOworCisJbWVtY3B5KGtiYy0+Y3VycmVudF9rZXlzLCBrZXljb2Rlcywgc2l6ZW9mKGtiYy0+Y3VycmVudF9rZXlzKSk7CisJa2JjLT5udW1fcHJlc3NlZF9rZXlzID0gbnVtX2Rvd247Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2tiY19rZXlwcmVzc190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHRlZ3JhX2tiYyAqa2JjID0gKHN0cnVjdCB0ZWdyYV9rYmMgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXZhbCA9IChyZWFkbChrYmMtPm1taW8gKyBLQkNfSU5UXzApID4+IDQpICYgMHhmOworCWlmICh2YWwpIHsKKwkJdW5zaWduZWQgbG9uZyBkbHk7CisKKwkJdGVncmFfa2JjX3JlcG9ydF9rZXlzKGtiYyk7CisKKwkJLyoKKwkJICogSWYgbW9yZSB0aGFuIG9uZSBrZXlzIGFyZSBwcmVzc2VkIHdlIG5lZWQgbm90IHdhaXQKKwkJICogZm9yIHRoZSByZXBvbGwgZGVsYXkuCisJCSAqLworCQlkbHkgPSAodmFsID09IDEpID8ga2JjLT5yZXBvbGxfZGx5IDogMTsKKwkJbW9kX3RpbWVyKCZrYmMtPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhkbHkpKTsKKwl9IGVsc2UgeworCQkvKiBSZWxlYXNlIGFueSBwcmVzc2VkIGtleXMgYW5kIGV4aXQgdGhlIHBvbGxpbmcgbG9vcCAqLworCQlmb3IgKGkgPSAwOyBpIDwga2JjLT5udW1fcHJlc3NlZF9rZXlzOyBpKyspCisJCQlpbnB1dF9yZXBvcnRfa2V5KGtiYy0+aWRldiwga2JjLT5jdXJyZW50X2tleXNbaV0sIDApOworCQlpbnB1dF9zeW5jKGtiYy0+aWRldik7CisKKwkJa2JjLT5udW1fcHJlc3NlZF9rZXlzID0gMDsKKworCQkvKiBBbGwga2V5cyBhcmUgcmVsZWFzZWQgc28gZW5hYmxlIHRoZSBrZXlwcmVzcyBpbnRlcnJ1cHQgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCQl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfQ09OVFJPTF8wKTsKKwkJdmFsIHw9IEtCQ19DT05UUk9MX0ZJRk9fQ05UX0lOVF9FTjsKKwkJd3JpdGVsKHZhbCwga2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IHRlZ3JhX2tiY19pc3IoaW50IGlycSwgdm9pZCAqYXJncykKK3sKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSBhcmdzOworCXUzMiB2YWwsIGN0bDsKKworCS8qCisJICogVW50aWwgYWxsIGtleXMgYXJlIHJlbGVhc2VkLCBkZWZlciBmdXJ0aGVyIHByb2Nlc3NpbmcgdG8KKwkgKiB0aGUgcG9sbGluZyBsb29wIGluIHRlZ3JhX2tiY19rZXlwcmVzc190aW1lcgorCSAqLworCWN0bCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCWN0bCAmPSB+S0JDX0NPTlRST0xfRklGT19DTlRfSU5UX0VOOworCXdyaXRlbChjdGwsIGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCisJLyoKKwkgKiBRdWlja2x5IGJhaWwgb3V0ICYgcmVlbmFibGUgaW50ZXJydXB0cyBpZiB0aGUgZmlmbyB0aHJlc2hvbGQKKwkgKiBjb3VudCBpbnRlcnJ1cHQgd2Fzbid0IHRoZSBpbnRlcnJ1cHQgc291cmNlCisJICovCisJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0lOVF8wKTsKKwl3cml0ZWwodmFsLCBrYmMtPm1taW8gKyBLQkNfSU5UXzApOworCisJaWYgKHZhbCAmIEtCQ19JTlRfRklGT19DTlRfSU5UX1NUQVRVUykgeworCQkvKgorCQkgKiBTY2hlZHVsZSB0aW1lciB0byBydW4gd2hlbiBoYXJkd2FyZSBpcyBpbiBjb250aW51b3VzCisJCSAqIHBvbGxpbmcgbW9kZS4KKwkJICovCisJCW1vZF90aW1lcigma2JjLT50aW1lciwgamlmZmllcyArIGtiYy0+Y3BfZGx5X2ppZmZpZXMpOworCX0gZWxzZSB7CisJCWN0bCB8PSBLQkNfQ09OVFJPTF9GSUZPX0NOVF9JTlRfRU47CisJCXdyaXRlbChjdGwsIGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX3NldHVwX3dha2VrZXlzKHN0cnVjdCB0ZWdyYV9rYmMgKmtiYywgYm9vbCBmaWx0ZXIpCit7CisJY29uc3Qgc3RydWN0IHRlZ3JhX2tiY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGtiYy0+cGRhdGE7CisJaW50IGk7CisJdW5zaWduZWQgaW50IHJzdF92YWw7CisKKwlCVUdfT04ocGRhdGEtPndha2VfY250ID4gS0JDX01BWF9LRVkpOworCXJzdF92YWwgPSAoZmlsdGVyICYmIHBkYXRhLT53YWtlX2NudCkgPyB+MCA6IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgS0JDX01BWF9ST1c7IGkrKykKKwkJd3JpdGVsKHJzdF92YWwsIGtiYy0+bW1pbyArIEtCQ19ST1cwX01BU0tfMCArIGkgKiA0KTsKKworCWlmIChmaWx0ZXIpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBkYXRhLT53YWtlX2NudDsgaSsrKSB7CisJCQl1MzIgdmFsLCBhZGRyOworCQkJYWRkciA9IHBkYXRhLT53YWtlX2NmZ1tpXS5yb3cgKiA0ICsgS0JDX1JPVzBfTUFTS18wOworCQkJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgYWRkcik7CisJCQl2YWwgJj0gfigxIDw8IHBkYXRhLT53YWtlX2NmZ1tpXS5jb2wpOworCQkJd3JpdGVsKHZhbCwga2JjLT5tbWlvICsgYWRkcik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2tiY19jb25maWdfcGlucyhzdHJ1Y3QgdGVncmFfa2JjICprYmMpCit7CisJY29uc3Qgc3RydWN0IHRlZ3JhX2tiY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGtiYy0+cGRhdGE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgS0JDX01BWF9HUElPOyBpKyspIHsKKwkJdTMyIHJfc2hmdCA9IDUgKiAoaSAlIDYpOworCQl1MzIgY19zaGZ0ID0gNCAqIChpICUgOCk7CisJCXUzMiByX21hc2sgPSAweDFmIDw8IHJfc2hmdDsKKwkJdTMyIGNfbWFzayA9IDB4MGYgPDwgY19zaGZ0OworCQl1MzIgcl9vZmZzID0gKGkgLyA2KSAqIDQgKyBLQkNfUk9XX0NGRzBfMDsKKwkJdTMyIGNfb2ZmcyA9IChpIC8gOCkgKiA0ICsgS0JDX0NPTF9DRkcwXzA7CisJCXUzMiByb3dfY2ZnID0gcmVhZGwoa2JjLT5tbWlvICsgcl9vZmZzKTsKKwkJdTMyIGNvbF9jZmcgPSByZWFkbChrYmMtPm1taW8gKyBjX29mZnMpOworCisJCXJvd19jZmcgJj0gfnJfbWFzazsKKwkJY29sX2NmZyAmPSB+Y19tYXNrOworCisJCWlmIChwZGF0YS0+cGluX2NmZ1tpXS5pc19yb3cpCisJCQlyb3dfY2ZnIHw9ICgocGRhdGEtPnBpbl9jZmdbaV0ubnVtIDw8IDEpIHwgMSkgPDwgcl9zaGZ0OworCQllbHNlCisJCQljb2xfY2ZnIHw9ICgocGRhdGEtPnBpbl9jZmdbaV0ubnVtIDw8IDEpIHwgMSkgPDwgY19zaGZ0OworCisJCXdyaXRlbChyb3dfY2ZnLCBrYmMtPm1taW8gKyByX29mZnMpOworCQl3cml0ZWwoY29sX2NmZywga2JjLT5tbWlvICsgY19vZmZzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfa2JjX3N0YXJ0KHN0cnVjdCB0ZWdyYV9rYmMgKmtiYykKK3sKKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2JjLT5wZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBkZWJvdW5jZV9jbnQ7CisJdTMyIHZhbCA9IDA7CisKKwljbGtfZW5hYmxlKGtiYy0+Y2xrKTsKKworCS8qIFJlc2V0IHRoZSBLQkMgY29udHJvbGxlciB0byBjbGVhciBhbGwgcHJldmlvdXMgc3RhdHVzLiovCisJdGVncmFfcGVyaXBoX3Jlc2V0X2Fzc2VydChrYmMtPmNsayk7CisJdWRlbGF5KDEwMCk7CisJdGVncmFfcGVyaXBoX3Jlc2V0X2RlYXNzZXJ0KGtiYy0+Y2xrKTsKKwl1ZGVsYXkoMTAwKTsKKworCXRlZ3JhX2tiY19jb25maWdfcGlucyhrYmMpOworCXRlZ3JhX2tiY19zZXR1cF93YWtla2V5cyhrYmMsIGZhbHNlKTsKKworCXdyaXRlbChwZGF0YS0+cmVwZWF0X2NudCwga2JjLT5tbWlvICsgS0JDX1JQVF9ETFlfMCk7CisKKwkvKiBLZXlib2FyZCBkZWJvdW5jZSBjb3VudCBpcyBtYXhpbXVtIG9mIDEyIGJpdHMuICovCisJZGVib3VuY2VfY250ID0gbWluKHBkYXRhLT5kZWJvdW5jZV9jbnQsIEtCQ19NQVhfREVCT1VOQ0VfQ05UKTsKKwl2YWwgPSBLQkNfREVCT1VOQ0VfQ05UX1NISUZUKGRlYm91bmNlX2NudCk7CisJdmFsIHw9IEtCQ19GSUZPX1RIX0NOVF9TSElGVCgxKTsgLyogc2V0IGZpZm8gaW50ZXJydXB0IHRocmVzaG9sZCB0byAxICovCisJdmFsIHw9IEtCQ19DT05UUk9MX0ZJRk9fQ05UX0lOVF9FTjsgIC8qIGludGVycnVwdCBvbiBGSUZPIHRocmVzaG9sZCAqLworCXZhbCB8PSBLQkNfQ09OVFJPTF9LQkNfRU47ICAgICAvKiBlbmFibGUgKi8KKwl3cml0ZWwodmFsLCBrYmMtPm1taW8gKyBLQkNfQ09OVFJPTF8wKTsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgZGVsYXkobnMpIGZyb20gaW50ZXJydXB0IG1vZGUgdG8gY29udGludW91cyBwb2xsaW5nCisJICogbW9kZSBzbyB0aGUgdGltZXIgcm91dGluZSBpcyBzY2hlZHVsZWQgYXBwcm9wcmlhdGVseS4KKwkgKi8KKwl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfSU5JVF9ETFlfMCk7CisJa2JjLT5jcF9kbHlfamlmZmllcyA9IHVzZWNzX3RvX2ppZmZpZXMoKHZhbCAmIDB4ZmZmZmYpICogMzIpOworCisJa2JjLT5udW1fcHJlc3NlZF9rZXlzID0gMDsKKworCS8qCisJICogQXRvbWljYWxseSBjbGVhciBvdXQgYW55IHJlbWFpbmluZyBlbnRyaWVzIGluIHRoZSBrZXkgRklGTworCSAqIGFuZCBlbmFibGUga2V5Ym9hcmQgaW50ZXJydXB0cy4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgma2JjLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKDEpIHsKKwkJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0lOVF8wKTsKKwkJdmFsID4+PSA0OworCQlpZiAoIXZhbCkKKwkJCWJyZWFrOworCisJCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19LUF9FTlQwXzApOworCQl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfS1BfRU5UMV8wKTsKKwl9CisJd3JpdGVsKDB4Nywga2JjLT5tbWlvICsgS0JDX0lOVF8wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrYmMtPmxvY2ssIGZsYWdzKTsKKworCWVuYWJsZV9pcnEoa2JjLT5pcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2tiY19zdG9wKHN0cnVjdCB0ZWdyYV9rYmMgKmtiYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgma2JjLT5sb2NrLCBmbGFncyk7CisJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisJdmFsICY9IH4xOworCXdyaXRlbCh2YWwsIGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCisJZGlzYWJsZV9pcnEoa2JjLT5pcnEpOworCWRlbF90aW1lcl9zeW5jKCZrYmMtPnRpbWVyKTsKKworCWNsa19kaXNhYmxlKGtiYy0+Y2xrKTsKK30KKworc3RhdGljIGludCB0ZWdyYV9rYmNfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHRlZ3JhX2tiYyAqa2JjID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiB0ZWdyYV9rYmNfc3RhcnQoa2JjKTsKK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHRlZ3JhX2tiY19zdG9wKGtiYyk7Cit9CisKK3N0YXRpYyBib29sIF9fZGV2aW5pdAordGVncmFfa2JjX2NoZWNrX3Bpbl9jZmcoY29uc3Qgc3RydWN0IHRlZ3JhX2tiY19wbGF0Zm9ybV9kYXRhICpwZGF0YSwKKwkJCXN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpudW1fcm93cykKK3sKKwlpbnQgaTsKKworCSpudW1fcm93cyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgS0JDX01BWF9HUElPOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHRlZ3JhX2tiY19waW5fY2ZnICpwaW5fY2ZnID0gJnBkYXRhLT5waW5fY2ZnW2ldOworCisJCWlmIChwaW5fY2ZnLT5pc19yb3cpIHsKKwkJCWlmIChwaW5fY2ZnLT5udW0gPj0gS0JDX01BWF9ST1cpIHsKKwkJCQlkZXZfZXJyKGRldiwKKwkJCQkJInBpbl9jZmdbJWRdOiBpbnZhbGlkIHJvdyBudW1iZXIgJWRcbiIsCisJCQkJCWksIHBpbl9jZmctPm51bSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJKCpudW1fcm93cykrKzsKKwkJfSBlbHNlIHsKKwkJCWlmIChwaW5fY2ZnLT5udW0gPj0gS0JDX01BWF9DT0wpIHsKKwkJCQlkZXZfZXJyKGRldiwKKwkJCQkJInBpbl9jZmdbJWRdOiBpbnZhbGlkIGNvbHVtbiBudW1iZXIgJWRcbiIsCisJCQkJCWksIHBpbl9jZmctPm51bSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRlZ3JhX2tiY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCB0ZWdyYV9rYmNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXBfZGF0YTsKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmM7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnE7CisJaW50IGVycjsKKwlpbnQgaTsKKwlpbnQgbnVtX3Jvd3MgPSAwOworCXVuc2lnbmVkIGludCBkZWJvdW5jZV9jbnQ7CisJdW5zaWduZWQgaW50IHNjYW5fdGltZV9yb3dzOworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXRlZ3JhX2tiY19jaGVja19waW5fY2ZnKHBkYXRhLCAmcGRldi0+ZGV2LCAmbnVtX3Jvd3MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQga2V5Ym9hcmQgSVJRXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlrYmMgPSBremFsbG9jKHNpemVvZigqa2JjKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFrYmMgfHwgIWlucHV0X2RldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlrYmMtPnBkYXRhID0gcGRhdGE7CisJa2JjLT5pZGV2ID0gaW5wdXRfZGV2OworCWtiYy0+aXJxID0gaXJxOworCXNwaW5fbG9ja19pbml0KCZrYmMtPmxvY2spOworCXNldHVwX3RpbWVyKCZrYmMtPnRpbWVyLCB0ZWdyYV9rYmNfa2V5cHJlc3NfdGltZXIsICh1bnNpZ25lZCBsb25nKWtiYyk7CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBJL08gbWVtb3J5XG4iKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlrYmMtPm1taW8gPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFrYmMtPm1taW8pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX2ZyZWVfbWVtX3JlZ2lvbjsKKwl9CisKKwlrYmMtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihrYmMtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBrZXlib2FyZCBjbG9ja1xuIik7CisJCWVyciA9IFBUUl9FUlIoa2JjLT5jbGspOworCQlnb3RvIGVycl9pb3VubWFwOworCX0KKworCWtiYy0+d2FrZV9lbmFibGVfcm93cyA9IDA7CisJa2JjLT53YWtlX2VuYWJsZV9jb2xzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPndha2VfY250OyBpKyspIHsKKwkJa2JjLT53YWtlX2VuYWJsZV9yb3dzIHw9ICgxIDw8IHBkYXRhLT53YWtlX2NmZ1tpXS5yb3cpOworCQlrYmMtPndha2VfZW5hYmxlX2NvbHMgfD0gKDEgPDwgcGRhdGEtPndha2VfY2ZnW2ldLmNvbCk7CisJfQorCisJLyoKKwkgKiBUaGUgdGltZSBkZWxheSBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZSByZWFkcyBvZiB0aGUgRklGTyBpcworCSAqIHRoZSBzdW0gb2YgdGhlIHJlcGVhdCB0aW1lIGFuZCB0aGUgdGltZSB0YWtlbiBmb3Igc2Nhbm5pbmcKKwkgKiB0aGUgcm93cy4gVGhlcmUgaXMgYW4gYWRkaXRpb25hbCBkZWxheSBiZWZvcmUgdGhlIHJvdyBzY2FubmluZworCSAqIHN0YXJ0cy4gVGhlIHJlcG9sbCBkZWxheSBpcyBjb21wdXRlZCBpbiBtaWxsaXNlY29uZHMuCisJICovCisJZGVib3VuY2VfY250ID0gbWluKHBkYXRhLT5kZWJvdW5jZV9jbnQsIEtCQ19NQVhfREVCT1VOQ0VfQ05UKTsKKwlzY2FuX3RpbWVfcm93cyA9IChLQkNfUk9XX1NDQU5fVElNRSArIGRlYm91bmNlX2NudCkgKiBudW1fcm93czsKKwlrYmMtPnJlcG9sbF9kbHkgPSBLQkNfUk9XX1NDQU5fRExZICsgc2Nhbl90aW1lX3Jvd3MgKyBwZGF0YS0+cmVwZWF0X2NudDsKKwlrYmMtPnJlcG9sbF9kbHkgPSAoKGtiYy0+cmVwb2xsX2RseSAqIEtCQ19DWUNMRV9VU0VDKSArIDk5OSkgLyAxMDAwOworCisJaW5wdXRfZGV2LT5uYW1lID0gcGRldi0+bmFtZTsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWlucHV0X2Rldi0+b3BlbiA9IHRlZ3JhX2tiY19vcGVuOworCWlucHV0X2Rldi0+Y2xvc2UgPSB0ZWdyYV9rYmNfY2xvc2U7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGtiYyk7CisKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKTsKKwlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4pOworCisJaW5wdXRfZGV2LT5rZXljb2RlID0ga2JjLT5rZXljb2RlOworCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2Yoa2JjLT5rZXljb2RlWzBdKTsKKwlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBLQkNfTUFYX0tFWTsKKwlpZiAocGRhdGEtPnVzZV9mbl9tYXApCisJCWlucHV0X2Rldi0+a2V5Y29kZW1heCAqPSAyOworCisJa2JjLT51c2VfZm5fbWFwID0gcGRhdGEtPnVzZV9mbl9tYXA7CisJa2V5bWFwX2RhdGEgPSBwZGF0YS0+a2V5bWFwX2RhdGEgPzogJnRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcF9kYXRhOworCW1hdHJpeF9rZXlwYWRfYnVpbGRfa2V5bWFwKGtleW1hcF9kYXRhLCBLQkNfUk9XX1NISUZULAorCQkJCSAgIGlucHV0X2Rldi0+a2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOworCisJZXJyID0gcmVxdWVzdF9pcnEoa2JjLT5pcnEsIHRlZ3JhX2tiY19pc3IsIElSUUZfVFJJR0dFUl9ISUdILAorCQkJICBwZGV2LT5uYW1lLCBrYmMpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3Qga2V5Ym9hcmQgSVJRXG4iKTsKKwkJZ290byBlcnJfcHV0X2NsazsKKwl9CisKKwlkaXNhYmxlX2lycShrYmMtPmlycSk7CisKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uoa2JjLT5pZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9mcmVlX2lycTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBrYmMpOworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCBwZGF0YS0+d2FrZXVwKTsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoa2JjLT5pcnEsIHBkZXYpOworZXJyX3B1dF9jbGs6CisJY2xrX3B1dChrYmMtPmNsayk7CitlcnJfaW91bm1hcDoKKwlpb3VubWFwKGtiYy0+bW1pbyk7CitlcnJfZnJlZV9tZW1fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZXJyX2ZyZWVfbWVtOgorCWlucHV0X2ZyZWVfZGV2aWNlKGtiYy0+aWRldik7CisJa2ZyZWUoa2JjKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRlZ3JhX2tiY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWZyZWVfaXJxKGtiYy0+aXJxLCBwZGV2KTsKKwljbGtfcHV0KGtiYy0+Y2xrKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGtiYy0+aWRldik7CisJaW91bm1hcChrYmMtPm1taW8pOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlrZnJlZShrYmMpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCB0ZWdyYV9rYmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKSB7CisJCXRlZ3JhX2tiY19zZXR1cF93YWtla2V5cyhrYmMsIHRydWUpOworCQllbmFibGVfaXJxX3dha2Uoa2JjLT5pcnEpOworCQkvKiBGb3JjZWZ1bGx5IGNsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzICovCisJCXdyaXRlbCgweDcsIGtiYy0+bW1pbyArIEtCQ19JTlRfMCk7CisJCW1zbGVlcCgzMCk7CisJfSBlbHNlIHsKKwkJbXV0ZXhfbG9jaygma2JjLT5pZGV2LT5tdXRleCk7CisJCWlmIChrYmMtPmlkZXYtPnVzZXJzKQorCQkJdGVncmFfa2JjX3N0b3Aoa2JjKTsKKwkJbXV0ZXhfdW5sb2NrKCZrYmMtPmlkZXYtPm11dGV4KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9rYmNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHRlZ3JhX2tiYyAqa2JjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGVyciA9IDA7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKKwkJZGlzYWJsZV9pcnFfd2FrZShrYmMtPmlycSk7CisJCXRlZ3JhX2tiY19zZXR1cF93YWtla2V5cyhrYmMsIGZhbHNlKTsKKwl9IGVsc2UgeworCQltdXRleF9sb2NrKCZrYmMtPmlkZXYtPm11dGV4KTsKKwkJaWYgKGtiYy0+aWRldi0+dXNlcnMpCisJCQllcnIgPSB0ZWdyYV9rYmNfc3RhcnQoa2JjKTsKKwkJbXV0ZXhfdW5sb2NrKCZrYmMtPmlkZXYtPm11dGV4KTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyh0ZWdyYV9rYmNfcG1fb3BzLCB0ZWdyYV9rYmNfc3VzcGVuZCwgdGVncmFfa2JjX3Jlc3VtZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRlZ3JhX2tiY19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHRlZ3JhX2tiY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRlZ3JhX2tiY19yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gInRlZ3JhLWtiYyIsCisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJnRlZ3JhX2tiY19wbV9vcHMsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0ZWdyYV9rYmNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0ZWdyYV9rYmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHRlZ3JhX2tiY19leGl0KTsKKworc3RhdGljIGludCBfX2luaXQgdGVncmFfa2JjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0ZWdyYV9rYmNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHRlZ3JhX2tiY19pbml0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiUmFrZXNoIEl5ZXIgPHJpeWVyQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRlZ3JhIG1hdHJpeCBrZXlib2FyZCBjb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0ZWdyYS1rYmMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdG5ldHYxMDd4LWtleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90bmV0djEwN3gta2V5cGFkLmMKaW5kZXggYjRhODFlYi4uYzhmMDk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90bmV0djEwN3gta2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90bmV0djEwN3gta2V5cGFkLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMjE5LDkgKzIyMCw5IEBACiAJfQogCiAJa3AtPmNsayA9IGNsa19nZXQoZGV2LCBOVUxMKTsKLQlpZiAoIWtwLT5jbGspIHsKKwlpZiAoSVNfRVJSKGtwLT5jbGspKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIGRldmljZSBjbG9ja1xuIik7Ci0JCWVycm9yID0gLUVJTlZBTDsKKwkJZXJyb3IgPSBQVFJfRVJSKGtwLT5jbGspOwogCQlnb3RvIGVycm9yX2NsazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCmluZGV4IDlkZmQ2ZTUuLjFmMzgzMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYwpAQCAtNjksMTEgKzY5LDcgQEAKIAl9CiAKIAlpZiAodmFsdWUgPiAyMCAmJiB2YWx1ZSA8IDMyNzY3KQotI2lmbmRlZiBGUkVRCi0JCWNvdW50ID0gKGl4cDR4eF9nZXRfYm9hcmRfdGlja19yYXRlKCkgLyAodmFsdWUgKiA0KSkgLSAxOwotI2Vsc2UKLQkJY291bnQgPSAoRlJFUSAvICh2YWx1ZSAqIDQpKSAtIDE7Ci0jZW5kaWYKKwkJY291bnQgPSAoSVhQNFhYX1RJTUVSX0ZSRVEgLyAodmFsdWUgKiA0KSkgLSAxOwogCiAJaXhwNHh4X3Nwa3JfY29udHJvbChwaW4sIGNvdW50KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3JvdGFyeV9lbmNvZGVyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYwppbmRleCAxZjhlMDEwLi43ZTY0ZDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAKIAkvKiByZXF1ZXN0IHRoZSBJUlFzICovCiAJZXJyID0gcmVxdWVzdF9pcnEoZW5jb2Rlci0+aXJxX2EsICZyb3RhcnlfZW5jb2Rlcl9pcnEsCi0JCQkgIElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFIHwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSwKKwkJCSAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAogCQkJICBEUlZfTkFNRSwgZW5jb2Rlcik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgJWRcbiIsCkBAIC0xODUsNyArMTg1LDcgQEAKIAl9CiAKIAllcnIgPSByZXF1ZXN0X2lycShlbmNvZGVyLT5pcnFfYiwgJnJvdGFyeV9lbmNvZGVyX2lycSwKLQkJCSAgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UgfCBJT1JFU09VUkNFX0lSUV9MT1dFREdFLAorCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkgIERSVl9OQU1FLCBlbmNvZGVyKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IElSUSAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCmluZGV4IGRhMzkyYzIuLmFhMTg2Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwpAQCAtNzU1LDIzICs3NTUsMjYgQEAKIHsKIAlzdHJ1Y3Qgc3luYXB0aWNzX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOwogCXN0cnVjdCBzeW5hcHRpY3NfZGF0YSBvbGRfcHJpdiA9ICpwcml2OworCWludCByZXRyeSA9IDA7CisJaW50IGVycm9yOwogCi0JcHNtb3VzZV9yZXNldChwc21vdXNlKTsKKwlkbyB7CisJCXBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisJCWVycm9yID0gc3luYXB0aWNzX2RldGVjdChwc21vdXNlLCAwKTsKKwl9IHdoaWxlIChlcnJvciAmJiArK3JldHJ5IDwgMyk7CiAKLQlpZiAoc3luYXB0aWNzX2RldGVjdChwc21vdXNlLCAwKSkKKwlpZiAoZXJyb3IpCiAJCXJldHVybiAtMTsKIAorCWlmIChyZXRyeSA+IDEpCisJCXByaW50ayhLRVJOX0RFQlVHICJTeW5hcHRpY3MgcmVjb25uZWN0ZWQgYWZ0ZXIgJWQgdHJpZXNcbiIsCisJCQlyZXRyeSk7CisKIAlpZiAoc3luYXB0aWNzX3F1ZXJ5X2hhcmR3YXJlKHBzbW91c2UpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHF1ZXJ5IFN5bmFwdGljcyBoYXJkd2FyZS5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKG9sZF9wcml2LmlkZW50aXR5ICE9IHByaXYtPmlkZW50aXR5IHx8Ci0JICAgIG9sZF9wcml2Lm1vZGVsX2lkICE9IHByaXYtPm1vZGVsX2lkIHx8Ci0JICAgIG9sZF9wcml2LmNhcGFiaWxpdGllcyAhPSBwcml2LT5jYXBhYmlsaXRpZXMgfHwKLQkgICAgb2xkX3ByaXYuZXh0X2NhcCAhPSBwcml2LT5leHRfY2FwKQotCQlyZXR1cm4gLTE7Ci0KIAlpZiAoc3luYXB0aWNzX3NldF9hYnNvbHV0ZV9tb2RlKHBzbW91c2UpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGluaXRpYWxpemUgU3luYXB0aWNzIGhhcmR3YXJlLlxuIik7CiAJCXJldHVybiAtMTsKQEAgLTc4Miw2ICs3ODUsMTkgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAorCWlmIChvbGRfcHJpdi5pZGVudGl0eSAhPSBwcml2LT5pZGVudGl0eSB8fAorCSAgICBvbGRfcHJpdi5tb2RlbF9pZCAhPSBwcml2LT5tb2RlbF9pZCB8fAorCSAgICBvbGRfcHJpdi5jYXBhYmlsaXRpZXMgIT0gcHJpdi0+Y2FwYWJpbGl0aWVzIHx8CisJICAgIG9sZF9wcml2LmV4dF9jYXAgIT0gcHJpdi0+ZXh0X2NhcCkgeworCQlwcmludGsoS0VSTl9FUlIgIlN5bmFwdGljcyBoYXJkd2FyZSBhcHBlYXJzIHRvIGJlIGRpZmZlcmVudDogIgorCQkJImlkKCVsZC0lbGQpLCBtb2RlbCglbGQtJWxkKSwgY2FwcyglbHgtJWx4KSwgZXh0KCVseC0lbHgpLlxuIiwKKwkJCW9sZF9wcml2LmlkZW50aXR5LCBwcml2LT5pZGVudGl0eSwKKwkJCW9sZF9wcml2Lm1vZGVsX2lkLCBwcml2LT5tb2RlbF9pZCwKKwkJCW9sZF9wcml2LmNhcGFiaWxpdGllcywgcHJpdi0+Y2FwYWJpbGl0aWVzLAorCQkJb2xkX3ByaXYuZXh0X2NhcCwgcHJpdi0+ZXh0X2NhcCk7CisJCXJldHVybiAtMTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuaCBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmgKaW5kZXggMjVlNWQwNC4uNzQ1MzkzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5oCkBAIC01MSw2ICs1MSwyOSBAQAogI2RlZmluZSBTWU5fRVhUX0NBUF9SRVFVRVNUUyhjKQkJKCgoYykgJiAweDcwMDAwMCkgPj4gMjApCiAjZGVmaW5lIFNZTl9DQVBfTVVMVElfQlVUVE9OX05PKGVjKQkoKChlYykgJiAweDAwZjAwMCkgPj4gMTIpCiAjZGVmaW5lIFNZTl9DQVBfUFJPRFVDVF9JRChlYykJCSgoKGVjKSAmIDB4ZmYwMDAwKSA+PiAxNikKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVzY3JpYmVzIHJlc3BvbnNlIGZvciB0aGUgMHgwYyBxdWVyeS4KKyAqCisgKiBieXRlCW1hc2sJbmFtZQkJCW1lYW5pbmcKKyAqIC0tLS0JLS0tLQktLS0tLS0tCQkJLS0tLS0tLS0tLS0tCisgKiAxCTB4MDEJYWRqdXN0YWJsZSB0aHJlc2hvbGQJY2FwYWNpdGl2ZSBidXR0b24gc2Vuc2l0aXZpdHkKKyAqCQkJCQljYW4gYmUgYWRqdXN0ZWQKKyAqIDEJMHgwMglyZXBvcnQgbWF4CQlxdWVyeSAweDBkIGdpdmVzIG1heCBjb29yZCByZXBvcnRlZAorICogMQkweDA0CWNsZWFycGFkCQlzZW5zb3IgaXMgQ2xlYXJQYWQgcHJvZHVjdAorICogMQkweDA4CWFkdmFuY2VkIGdlc3R1cmUJbm90IHBhcnRpY3VsYXJseSBtZWFuaW5nZnVsCisgKiAxCTB4MTAJY2xpY2twYWQgYml0IDAJCTEtYnV0dG9uIENsaWNrUGFkCisgKiAxCTB4NjAJbXVsdGlmaW5nZXIgbW9kZQlpZGVudGlmaWVzIGZpcm13YXJlIGZpbmdlciBjb3VudGluZworICoJCQkJCShub3QgcmVwb3J0aW5nISkgYWxnb3JpdGhtLgorICoJCQkJCU5vdCBwYXJ0aWN1bGFybHkgbWVhbmluZ2Z1bAorICogMQkweDgwICAgIGNvdmVyZWQgcGFkCQlXIGNsaXBwZWQgdG8gMTQsIDE1ID09IHBhZCBtb3N0bHkgY292ZXJlZAorICogMgkweDAxICAgIGNsaWNrcGFkIGJpdCAxCQkyLWJ1dHRvbiBDbGlja1BhZAorICogMgkweDAyICAgIGRlbHV4ZSBMRUQgY29udHJvbHMJdG91Y2hwYWQgc3VwcG9ydCBMRUQgY29tbWFuZHMKKyAqCQkJCQlhbGEgbXVsdGltZWRpYSBjb250cm9sIGJhcgorICogMgkweDA0CXJlZHVjZWQgZmlsdGVyaW5nCWZpcm13YXJlIGRvZXMgbGVzcyBmaWx0ZXJpbmcgb24KKyAqCQkJCQlwb3NpdGlvbiBkYXRhLCBkcml2ZXIgc2hvdWxkIHdhdGNoCisgKgkJCQkJZm9yIG5vaXNlLgorICovCiAjZGVmaW5lIFNZTl9DQVBfQ0xJQ0tQQUQoZXgwYykJCSgoZXgwYykgJiAweDEwMDAwMCkgLyogMS1idXR0b24gQ2xpY2tQYWQgKi8KICNkZWZpbmUgU1lOX0NBUF9DTElDS1BBRDJCVE4oZXgwYykJKChleDBjKSAmIDB4MDAwMTAwKSAvKiAyLWJ1dHRvbiBDbGlja1BhZCAqLwogI2RlZmluZSBTWU5fQ0FQX01BWF9ESU1FTlNJT05TKGV4MGMpCSgoZXgwYykgJiAweDAyMDAwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vY3Q4MmM3MTAuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vY3Q4MmM3MTAuYwppbmRleCA0NDhjNzcyLi44NTI4MTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2N0ODJjNzEwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jCkBAIC0xMTEsOSArMTExLDExIEBACiBzdGF0aWMgaW50IGN0ODJjNzEwX29wZW4oc3RydWN0IHNlcmlvICpzZXJpbykKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwlpbnQgZXJyOwogCi0JaWYgKHJlcXVlc3RfaXJxKENUODJDNzEwX0lSUSwgY3Q4MmM3MTBfaW50ZXJydXB0LCAwLCAiY3Q4MmM3MTAiLCBOVUxMKSkKLQkJcmV0dXJuIC0xOworCWVyciA9IHJlcXVlc3RfaXJxKENUODJDNzEwX0lSUSwgY3Q4MmM3MTBfaW50ZXJydXB0LCAwLCAiY3Q4MmM3MTAiLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJc3RhdHVzID0gaW5iX3AoQ1Q4MkM3MTBfU1RBVFVTKTsKIApAQCAtMTMxLDcgKzEzMyw3IEBACiAJCXN0YXR1cyAmPSB+KENUODJDNzEwX0VOQUJMRSB8IENUODJDNzEwX0lOVFNfT04pOwogCQlvdXRiX3Aoc3RhdHVzLCBDVDgyQzcxMF9TVEFUVVMpOwogCQlmcmVlX2lycShDVDgyQzcxMF9JUlEsIE5VTEwpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKaW5kZXggZGI1YjBiYy4uYmE3MDA1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwpAQCAtMTg4LDcgKzE4OCw4IEBACiAJa2ZyZWUoZXZlbnQpOwogfQogCi1zdGF0aWMgdm9pZCBzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhzdHJ1Y3Qgc2VyaW9fZXZlbnQgKmV2ZW50KQorc3RhdGljIHZvaWQgc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHModm9pZCAqb2JqZWN0LAorCQkJCQkgIGVudW0gc2VyaW9fZXZlbnRfdHlwZSB0eXBlKQogewogCXN0cnVjdCBzZXJpb19ldmVudCAqZSwgKm5leHQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE5NiwxMyArMTk3LDEzIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlcmlvX2V2ZW50X2xvY2ssIGZsYWdzKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuZXh0LCAmc2VyaW9fZXZlbnRfbGlzdCwgbm9kZSkgewotCQlpZiAoZXZlbnQtPm9iamVjdCA9PSBlLT5vYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBlLT5vYmplY3QpIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGlzIGV2ZW50IGlzIG9mIGRpZmZlcmVudCB0eXBlIHdlIHNob3VsZCBub3QKIAkJCSAqIGxvb2sgZnVydGhlciAtIHdlIG9ubHkgc3VwcHJlc3MgZHVwbGljYXRlIGV2ZW50cwogCQkJICogdGhhdCB3ZXJlIHNlbnQgYmFjay10by1iYWNrLgogCQkJICovCi0JCQlpZiAoZXZlbnQtPnR5cGUgIT0gZS0+dHlwZSkKKwkJCWlmICh0eXBlICE9IGUtPnR5cGUpCiAJCQkJYnJlYWs7CiAKIAkJCWxpc3RfZGVsX2luaXQoJmUtPm5vZGUpOwpAQCAtMjQ1LDcgKzI0Niw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXNlcmlvX3JlbW92ZV9kdXBsaWNhdGVfZXZlbnRzKGV2ZW50KTsKKwkJc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoZXZlbnQtPm9iamVjdCwgZXZlbnQtPnR5cGUpOwogCQlzZXJpb19mcmVlX2V2ZW50KGV2ZW50KTsKIAl9CiAKQEAgLTI5OCw3ICsyOTksNyBAQAogCWV2ZW50LT5vd25lciA9IG93bmVyOwogCiAJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPm5vZGUsICZzZXJpb19ldmVudF9saXN0KTsKLQlzY2hlZHVsZV93b3JrKCZzZXJpb19ldmVudF93b3JrKTsKKwlxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCAmc2VyaW9fZXZlbnRfd29yayk7CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXJpb19ldmVudF9sb2NrLCBmbGFncyk7CkBAIC00MzYsMTAgKzQzNywxMiBAQAogCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAicmVzY2FuIiwgY291bnQpKSB7CiAJCXNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChzZXJpbyk7CiAJCXNlcmlvX2ZpbmRfZHJpdmVyKHNlcmlvKTsKKwkJc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoc2VyaW8sIFNFUklPX1JFU0NBTl9QT1JUKTsKIAl9IGVsc2UgaWYgKChkcnYgPSBkcml2ZXJfZmluZChidWYsICZzZXJpb19idXMpKSAhPSBOVUxMKSB7CiAJCXNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChzZXJpbyk7CiAJCWVycm9yID0gc2VyaW9fYmluZF9kcml2ZXIoc2VyaW8sIHRvX3NlcmlvX2RyaXZlcihkcnYpKTsKIAkJcHV0X2RyaXZlcihkcnYpOworCQlzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhzZXJpbywgU0VSSU9fUkVTQ0FOX1BPUlQpOwogCX0gZWxzZSB7CiAJCWVycm9yID0gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCmluZGV4IDZlMzYyZGUuLjg3NTVmNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCkBAIC0xMTYsMTQgKzExNiwxNSBAQAogCiAvKgogICogc2VycG9ydF9sZGlzY19yZWNlaXZlKCkgaXMgY2FsbGVkIGJ5IHRoZSBsb3cgbGV2ZWwgdHR5IGRyaXZlciB3aGVuIGNoYXJhY3RlcnMKLSAqIGFyZSByZWFkeSBmb3IgdXMuIFdlIGZvcndhcmQgdGhlIGNoYXJhY3RlcnMsIG9uZSBieSBvbmUgdG8gdGhlICdpbnRlcnJ1cHQnCi0gKiByb3V0aW5lLgorICogYXJlIHJlYWR5IGZvciB1cy4gV2UgZm9yd2FyZCB0aGUgY2hhcmFjdGVycyBhbmQgZmxhZ3MsIG9uZSBieSBvbmUgdG8gdGhlCisgKiAnaW50ZXJydXB0JyByb3V0aW5lLgogICovCiAKIHN0YXRpYyB2b2lkIHNlcnBvcnRfbGRpc2NfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2VycG9ydCAqc2VycG9ydCA9IChzdHJ1Y3Qgc2VycG9ydCopIHR0eS0+ZGlzY19kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGNoX2ZsYWdzOwogCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlcnBvcnQtPmxvY2ssIGZsYWdzKTsKQEAgLTEzMSw4ICsxMzIsMjMgQEAKIAlpZiAoIXRlc3RfYml0KFNFUlBPUlRfQUNUSVZFLCAmc2VycG9ydC0+ZmxhZ3MpKQogCQlnb3RvIG91dDsKIAotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCQlzZXJpb19pbnRlcnJ1cHQoc2VycG9ydC0+c2VyaW8sIGNwW2ldLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzd2l0Y2ggKGZwW2ldKSB7CisJCWNhc2UgVFRZX0ZSQU1FOgorCQkJY2hfZmxhZ3MgPSBTRVJJT19GUkFNRTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFRZX1BBUklUWToKKwkJCWNoX2ZsYWdzID0gU0VSSU9fUEFSSVRZOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWNoX2ZsYWdzID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJc2VyaW9faW50ZXJydXB0KHNlcnBvcnQtPnNlcmlvLCBjcFtpXSwgY2hfZmxhZ3MpOworCX0KIAogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlcnBvcnQtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc3BhcnNlLWtleW1hcC5jIGIvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMKaW5kZXggYTI5YTc4MTIuLjc3MjllNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc3BhcnNlLWtleW1hcC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc3BhcnNlLWtleW1hcC5jCkBAIC0yMDEsNiArMjAxLDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgS0VfU1c6CisJCWNhc2UgS0VfVlNXOgogCQkJX19zZXRfYml0KEVWX1NXLCBkZXYtPmV2Yml0KTsKIAkJCV9fc2V0X2JpdChlbnRyeS0+c3cuY29kZSwgZGV2LT5zd2JpdCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKaW5kZXggZmMzODE0OS4uY2Y4ZmI5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKQEAgLTUxOSw3ICs1MTksNyBAQAogCS8qIFJldHJpZXZlIHRoZSBwaHlzaWNhbCBhbmQgbG9naWNhbCBzaXplIGZvciBPRU0gZGV2aWNlcyAqLwogCWVycm9yID0gd2Fjb21fcmV0cmlldmVfaGlkX2Rlc2NyaXB0b3IoaW50ZiwgZmVhdHVyZXMpOwogCWlmIChlcnJvcikKLQkJZ290byBmYWlsMjsKKwkJZ290byBmYWlsMzsKIAogCXdhY29tX3NldHVwX2RldmljZV9xdWlya3MoZmVhdHVyZXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCmluZGV4IDUxODc4MjkuLjM2N2ZhODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCkBAIC0xMTAxLDYgKzExMDEsMTMgQEAKIAl9CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd2Fjb21fY2FsY3VsYXRlX3RvdWNoX3Jlcyh1bnNpZ25lZCBpbnQgbG9naWNhbF9tYXgsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCBwaHlzaWNhbF9tYXgpCit7CisgICAgICAgLyogVG91Y2ggcGh5c2ljYWwgZGltZW5zaW9ucyBhcmUgaW4gMTAwdGggb2YgbW0gKi8KKyAgICAgICByZXR1cm4gKGxvZ2ljYWxfbWF4ICogMTAwKSAvIHBoeXNpY2FsX21heDsKK30KKwogdm9pZCB3YWNvbV9zZXR1cF9pbnB1dF9jYXBhYmlsaXRpZXMoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAogCQkJCSAgICBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCiB7CkBAIC0xMjI4LDggKzEyMzUsMTIgQEAKIAljYXNlIFRBQkxFVFBDOgogCQlpZiAoZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX0RPVUJMRVRBUCB8fAogCQkgICAgZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX1RSSVBMRVRBUCkgewotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUlgsIDAsIGZlYXR1cmVzLT54X3BoeSwgMCwgMCk7Ci0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWSwgMCwgZmVhdHVyZXMtPnlfcGh5LCAwLCAwKTsKKwkJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1gsCisJCQkJd2Fjb21fY2FsY3VsYXRlX3RvdWNoX3JlcyhmZWF0dXJlcy0+eF9tYXgsCisJCQkJCQkJZmVhdHVyZXMtPnhfcGh5KSk7CisJCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dF9kZXYsIEFCU19ZLAorCQkJCXdhY29tX2NhbGN1bGF0ZV90b3VjaF9yZXMoZmVhdHVyZXMtPnlfbWF4LAorCQkJCQkJCWZlYXR1cmVzLT55X3BoeSkpOwogCQkJX19zZXRfYml0KEJUTl9UT09MX0RPVUJMRVRBUCwgaW5wdXRfZGV2LT5rZXliaXQpOwogCQl9CiAKQEAgLTEyNzIsNiArMTI4MywxMiBAQAogCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfTVRfUFJFU1NVUkUsCiAJCQkJCSAgICAgMCwgZmVhdHVyZXMtPnByZXNzdXJlX21heCwKIAkJCQkJICAgICBmZWF0dXJlcy0+cHJlc3N1cmVfZnV6eiwgMCk7CisJCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dF9kZXYsIEFCU19YLAorCQkJCXdhY29tX2NhbGN1bGF0ZV90b3VjaF9yZXMoZmVhdHVyZXMtPnhfbWF4LAorCQkJCQkJCWZlYXR1cmVzLT54X3BoeSkpOworCQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWSwKKwkJCQl3YWNvbV9jYWxjdWxhdGVfdG91Y2hfcmVzKGZlYXR1cmVzLT55X21heCwKKwkJCQkJCQlmZWF0dXJlcy0+eV9waHkpKTsKIAkJfSBlbHNlIGlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfUEVOKSB7CiAJCQlfX3NldF9iaXQoQlROX1RPT0xfUlVCQkVSLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAJCQlfX3NldF9iaXQoQlROX1RPT0xfUEVOLCBpbnB1dF9kZXYtPmtleWJpdCk7CkBAIC0xNDI2LDYgKzE0NDMsMTAgQEAKIAl7ICJXYWNvbSBCYW1ib28gMkZHIDZ4OCIsIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDIxNjQ4LCAxMzUzMCwgMTAyMywgNjMsIEJBTUJPT19QVCB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ0ID0KIAl7ICJXYWNvbSBCYW1ib28gUGVuIiwgICAgIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDE0NzIwLCAgOTIwMCwgIDI1NSwgNjMsIEJBTUJPT19QVCB9Oworc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ2ID0KKwl7ICJXYWNvbSBCYW1ib29QVCAyRkcgNHg1IiwgV0FDT01fUEtHTEVOX0JCRlVOLCAgIDE0NzIwLCAgOTIwMCwgMTAyMywgNjMsIEJBTUJPT19QVCB9Oworc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ3ID0KKwl7ICJXYWNvbSBCYW1ib29QVCAyRkcgU21hbGwiLCBXQUNPTV9QS0dMRU5fQkJGVU4sIDE0NzIwLCAgOTIwMCwgMTAyMywgNjMsIEJBTUJPT19QVCB9Owogc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ4ID0KIAl7ICJXYWNvbSBCYW1ib28gQ29taWMgMkZHIiwgV0FDT01fUEtHTEVOX0JCRlVOLCAgIDIxNjQ4LCAxMzUzMCwgMTAyMywgNjMsIEJBTUJPT19QVCB9Owogc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weERBID0KQEAgLTE1MDcsNiArMTUyOCw4IEBACiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4RDIpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4RDMpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4RDQpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4RDYpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4RDcpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4RDgpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4REEpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4REIpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCmluZGV4IDE0ZWE1NGIuLjRiZjIzMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCkBAIC05NDEsMjggKzk0MSwyOSBAQAogCXN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgZXJyOwogCi0JLyogUkVWSVNJVCB3aGVuIHRoZSBpcnEgY2FuIGJlIHRyaWdnZXJlZCBhY3RpdmUtbG93LCBvciBpZiBmb3Igc29tZQorCS8qCisJICogUkVWSVNJVCB3aGVuIHRoZSBpcnEgY2FuIGJlIHRyaWdnZXJlZCBhY3RpdmUtbG93LCBvciBpZiBmb3Igc29tZQogCSAqIHJlYXNvbiB0aGUgdG91Y2hzY3JlZW4gaXNuJ3QgaG9va2VkIHVwLCB3ZSBkb24ndCBuZWVkIHRvIGFjY2VzcwogCSAqIHRoZSBwZW5kb3duIHN0YXRlLgogCSAqLwotCWlmICghcGRhdGEtPmdldF9wZW5kb3duX3N0YXRlICYmICFncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX3BlbmRvd24pKSB7Ci0JCWRldl9lcnIoJnNwaS0+ZGV2LCAibm8gZ2V0X3BlbmRvd25fc3RhdGUgbm9yIGdwaW9fcGVuZG93bj9cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlpZiAocGRhdGEtPmdldF9wZW5kb3duX3N0YXRlKSB7CiAJCXRzLT5nZXRfcGVuZG93bl9zdGF0ZSA9IHBkYXRhLT5nZXRfcGVuZG93bl9zdGF0ZTsKLQkJcmV0dXJuIDA7Ci0JfQorCX0gZWxzZSBpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19wZW5kb3duKSkgewogCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX3BlbmRvd24sICJhZHM3ODQ2X3BlbmRvd24iKTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgcGVuZG93biBHUElPJWRcbiIsCi0JCQlwZGF0YS0+Z3Bpb19wZW5kb3duKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJCWVyciA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb19wZW5kb3duLCAiYWRzNzg0Nl9wZW5kb3duIik7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgcGVuZG93biBHUElPJWRcbiIsCisJCQkJcGRhdGEtPmdwaW9fcGVuZG93bik7CisJCQlyZXR1cm4gZXJyOworCQl9CiAKLQl0cy0+Z3Bpb19wZW5kb3duID0gcGRhdGEtPmdwaW9fcGVuZG93bjsKKwkJdHMtPmdwaW9fcGVuZG93biA9IHBkYXRhLT5ncGlvX3BlbmRvd247CisKKwl9IGVsc2UgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIm5vIGdldF9wZW5kb3duX3N0YXRlIG5vciBncGlvX3BlbmRvd24/XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzUzLDcgKzEzNTQsNyBAQAogIGVycl9wdXRfcmVndWxhdG9yOgogCXJlZ3VsYXRvcl9wdXQodHMtPnJlZyk7CiAgZXJyX2ZyZWVfZ3BpbzoKLQlpZiAodHMtPmdwaW9fcGVuZG93biAhPSAtMSkKKwlpZiAoIXRzLT5nZXRfcGVuZG93bl9zdGF0ZSkKIAkJZ3Bpb19mcmVlKHRzLT5ncGlvX3BlbmRvd24pOwogIGVycl9jbGVhbnVwX2ZpbHRlcjoKIAlpZiAodHMtPmZpbHRlcl9jbGVhbnVwKQpAQCAtMTM4Myw4ICsxMzg0LDEzIEBACiAJcmVndWxhdG9yX2Rpc2FibGUodHMtPnJlZyk7CiAJcmVndWxhdG9yX3B1dCh0cy0+cmVnKTsKIAotCWlmICh0cy0+Z3Bpb19wZW5kb3duICE9IC0xKQorCWlmICghdHMtPmdldF9wZW5kb3duX3N0YXRlKSB7CisJCS8qCisJCSAqIElmIHdlIGFyZSBub3QgdXNpbmcgc3BlY2lhbGl6ZWQgcGVuZG93biBtZXRob2Qgd2UgbXVzdAorCQkgKiBoYXZlIGJlZW4gcmVseWluZyBvbiBncGlvIHdlIHNldCB1cCBvdXJzZWx2ZXMuCisJCSAqLwogCQlncGlvX2ZyZWUodHMtPmdwaW9fcGVuZG93bik7CisJfQogCiAJaWYgKHRzLT5maWx0ZXJfY2xlYW51cCkKIAkJdHMtPmZpbHRlcl9jbGVhbnVwKHRzLT5maWx0ZXJfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2J1MjEwMTNfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYnUyMTAxM190cy5jCmluZGV4IGY3ZmE5ZWYuLjE1MDdjZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYnUyMTAxM190cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYnUyMTAxM190cy5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC9idTIxMDEzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjZGVmaW5lIFBFTl9ET1dOX0lOVFIJMAogI2RlZmluZSBNQVhfRklOR0VSUwkyCkBAIC0xMzksNiArMTQwLDcgQEAKICAqIEBjaGlwOiBwb2ludGVyIHRvIHRoZSB0b3VjaCBwYW5lbCBjb250cm9sbGVyCiAgKiBAaW5fZGV2OiBwb2ludGVyIHRvIHRoZSBpbnB1dCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAaW50cl9waW46IGludGVycnVwdCBwaW4gdmFsdWUKKyAqIEByZWd1bGF0b3I6IHBvaW50ZXIgdG8gdGhlIFJlZ3VsYXRvciB1c2VkIGZvciB0b3VjaCBzY3JlZW4KICAqCiAgKiBUb3VjaCBwYW5lbCBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUKICAqLwpAQCAtMTQ5LDYgKzE1MSw3IEBACiAJY29uc3Qgc3RydWN0IGJ1MjEwMTNfcGxhdGZvcm1fZGV2aWNlICpjaGlwOwogCXN0cnVjdCBpbnB1dF9kZXYgKmluX2RldjsKIAl1bnNpZ25lZCBpbnQgaW50cl9waW47CisJc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yOwogfTsKIAogLyoqCkBAIC00NTYsNiArNDU5LDIwIEBACiAJYnUyMTAxM19kYXRhLT5pbl9kZXYgPSBpbl9kZXY7CiAJYnUyMTAxM19kYXRhLT5jaGlwID0gcGRhdGE7CiAJYnUyMTAxM19kYXRhLT5jbGllbnQgPSBjbGllbnQ7CisKKwlidTIxMDEzX2RhdGEtPnJlZ3VsYXRvciA9IHJlZ3VsYXRvcl9nZXQoJmNsaWVudC0+ZGV2LCAiVi1UT1VDSCIpOworCWlmIChJU19FUlIoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAicmVndWxhdG9yX2dldCBmYWlsZWRcbiIpOworCQllcnJvciA9IFBUUl9FUlIoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwllcnJvciA9IHJlZ3VsYXRvcl9lbmFibGUoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworCWlmIChlcnJvciA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJyZWd1bGF0b3IgZW5hYmxlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX3B1dF9yZWd1bGF0b3I7CisJfQorCiAJYnUyMTAxM19kYXRhLT50b3VjaF9zdG9wcGVkID0gZmFsc2U7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYnUyMTAxM19kYXRhLT53YWl0KTsKIApAQCAtNDY0LDcgKzQ4MSw3IEBACiAJCWVycm9yID0gcGRhdGEtPmNzX2VuKHBkYXRhLT5jc19waW4pOwogCQlpZiAoZXJyb3IgPCAwKSB7CiAJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImNoaXAgaW5pdCBmYWlsZWRcbiIpOwotCQkJZ290byBlcnJfZnJlZV9tZW07CisJCQlnb3RvIGVycl9kaXNhYmxlX3JlZ3VsYXRvcjsKIAkJfQogCX0KIApAQCAtNDg1LDkgKzUwMiw5IEBACiAJX19zZXRfYml0KEVWX0FCUywgaW5fZGV2LT5ldmJpdCk7CiAKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbl9kZXYsIEFCU19NVF9QT1NJVElPTl9YLCAwLAotCQkJCQkJcGRhdGEtPnhfbWF4X3JlcywgMCwgMCk7CisJCQkJCQlwZGF0YS0+dG91Y2hfeF9tYXgsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGluX2RldiwgQUJTX01UX1BPU0lUSU9OX1ksIDAsCi0JCQkJCQlwZGF0YS0+eV9tYXhfcmVzLCAwLCAwKTsKKwkJCQkJCXBkYXRhLT50b3VjaF95X21heCwgMCwgMCk7CiAJaW5wdXRfc2V0X2RydmRhdGEoaW5fZGV2LCBidTIxMDEzX2RhdGEpOwogCiAJZXJyb3IgPSByZXF1ZXN0X3RocmVhZGVkX2lycShwZGF0YS0+aXJxLCBOVUxMLCBidTIxMDEzX2dwaW9faXJxLApAQCAtNTEzLDYgKzUzMCwxMCBAQAogCWJ1MjEwMTNfZnJlZV9pcnEoYnUyMTAxM19kYXRhKTsKIGVycl9jc19kaXNhYmxlOgogCXBkYXRhLT5jc19kaXMocGRhdGEtPmNzX3Bpbik7CitlcnJfZGlzYWJsZV9yZWd1bGF0b3I6CisJcmVndWxhdG9yX2Rpc2FibGUoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworZXJyX3B1dF9yZWd1bGF0b3I6CisJcmVndWxhdG9yX3B1dChidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcik7CiBlcnJfZnJlZV9tZW06CiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5fZGV2KTsKIAlrZnJlZShidTIxMDEzX2RhdGEpOwpAQCAtNTM1LDYgKzU1NiwxMCBAQAogCWJ1MjEwMTNfZGF0YS0+Y2hpcC0+Y3NfZGlzKGJ1MjEwMTNfZGF0YS0+Y2hpcC0+Y3NfcGluKTsKIAogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGJ1MjEwMTNfZGF0YS0+aW5fZGV2KTsKKworCXJlZ3VsYXRvcl9kaXNhYmxlKGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKKwlyZWd1bGF0b3JfcHV0KGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKKwogCWtmcmVlKGJ1MjEwMTNfZGF0YSk7CiAKIAlkZXZpY2VfaW5pdF93YWtldXAoJmNsaWVudC0+ZGV2LCBmYWxzZSk7CkBAIC01NjEsNiArNTg2LDggQEAKIAllbHNlCiAJCWRpc2FibGVfaXJxKGJ1MjEwMTNfZGF0YS0+Y2hpcC0+aXJxKTsKIAorCXJlZ3VsYXRvcl9kaXNhYmxlKGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKKwogCXJldHVybiAwOwogfQogCkBAIC01NzcsNiArNjA0LDEyIEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGJ1MjEwMTNfZGF0YS0+Y2xpZW50OwogCWludCByZXR2YWw7CiAKKwlyZXR2YWwgPSByZWd1bGF0b3JfZW5hYmxlKGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImJ1MjEwMTMgcmVndWxhdG9yIGVuYWJsZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwogCXJldHZhbCA9IGJ1MjEwMTNfaW5pdF9jaGlwKGJ1MjEwMTNfZGF0YSk7CiAJaWYgKHJldHZhbCA8IDApIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJidTIxMDEzIGNvbnRyb2xsZXIgY29uZmlnIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RuZXR2MTA3eC10cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90bmV0djEwN3gtdHMuYwppbmRleCBjZjFkYmEyLi4yMmEzNDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RuZXR2MTA3eC10cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG5ldHYxMDd4LXRzLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMjg5LDkgKzI5MCw5IEBACiAJfQogCiAJdHMtPmNsayA9IGNsa19nZXQoZGV2LCBOVUxMKTsKLQlpZiAoIXRzLT5jbGspIHsKKwlpZiAoSVNfRVJSKHRzLT5jbGspKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIGRldmljZSBjbG9ja1xuIik7Ci0JCWVycm9yID0gLUVJTlZBTDsKKwkJZXJyb3IgPSBQVFJfRVJSKHRzLT5jbGspOwogCQlnb3RvIGVycm9yX2NsazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd2Fjb21fdzgwMDEuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd2Fjb21fdzgwMDEuYwppbmRleCA1Y2I4NDQ5Li5jMTQ0MTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dhY29tX3c4MDAxLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93YWNvbV93ODAwMS5jCkBAIC01MSw2ICs1MSwxMCBAQAogI2RlZmluZSBXODAwMV9QS1RMRU5fVFBDQ1RMCTExCS8qIGNvbnRyb2wgcGFja2V0ICovCiAjZGVmaW5lIFc4MDAxX1BLVExFTl9UT1VDSDJGRwkxMwogCisvKiByZXNvbHV0aW9uIGluIHBvaW50cy9tbSAqLworI2RlZmluZSBXODAwMV9QRU5fUkVTT0xVVElPTiAgICAxMDAKKyNkZWZpbmUgVzgwMDFfVE9VQ0hfUkVTT0xVVElPTiAgMTAKKwogc3RydWN0IHc4MDAxX2Nvb3JkIHsKIAl1OCByZHk7CiAJdTggdHN3OwpAQCAtMTk4LDcgKzIwMiw3IEBACiAJCXF1ZXJ5LT55ID0gMTAyNDsKIAkJaWYgKHF1ZXJ5LT5wYW5lbF9yZXMpCiAJCQlxdWVyeS0+eCA9IHF1ZXJ5LT55ID0gKDEgPDwgcXVlcnktPnBhbmVsX3Jlcyk7Ci0JCXF1ZXJ5LT5wYW5lbF9yZXMgPSAxMDsKKwkJcXVlcnktPnBhbmVsX3JlcyA9IFc4MDAxX1RPVUNIX1JFU09MVVRJT047CiAJfQogfQogCkBAIC0zOTQsNiArMzk4LDggQEAKIAogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19YLCAwLCBjb29yZC54LCAwLCAwKTsKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWSwgMCwgY29vcmQueSwgMCwgMCk7CisJCWlucHV0X2Fic19zZXRfcmVzKGRldiwgQUJTX1gsIFc4MDAxX1BFTl9SRVNPTFVUSU9OKTsKKwkJaW5wdXRfYWJzX3NldF9yZXMoZGV2LCBBQlNfWSwgVzgwMDFfUEVOX1JFU09MVVRJT04pOwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19QUkVTU1VSRSwgMCwgY29vcmQucGVuX3ByZXNzdXJlLCAwLCAwKTsKIAkJaWYgKGNvb3JkLnRpbHRfeCAmJiBjb29yZC50aWx0X3kpIHsKIAkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1RJTFRfWCwgMCwgY29vcmQudGlsdF94LCAwLCAwKTsKQEAgLTQxOCwxNCArNDI0LDE3IEBACiAJCXc4MDAxLT5tYXhfdG91Y2hfeCA9IHRvdWNoLng7CiAJCXc4MDAxLT5tYXhfdG91Y2hfeSA9IHRvdWNoLnk7CiAKLQkJLyogc2NhbGUgdG8gcGVuIG1heGltdW0gKi8KIAkJaWYgKHc4MDAxLT5tYXhfcGVuX3ggJiYgdzgwMDEtPm1heF9wZW5feSkgeworCQkJLyogaWYgcGVuIGlzIHN1cHBvcnRlZCBzY2FsZSB0byBwZW4gbWF4aW11bSAqLwogCQkJdG91Y2gueCA9IHc4MDAxLT5tYXhfcGVuX3g7CiAJCQl0b3VjaC55ID0gdzgwMDEtPm1heF9wZW5feTsKKwkJCXRvdWNoLnBhbmVsX3JlcyA9IFc4MDAxX1BFTl9SRVNPTFVUSU9OOwogCQl9CiAKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWCwgMCwgdG91Y2gueCwgMCwgMCk7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1ksIDAsIHRvdWNoLnksIDAsIDApOworCQlpbnB1dF9hYnNfc2V0X3JlcyhkZXYsIEFCU19YLCB0b3VjaC5wYW5lbF9yZXMpOworCQlpbnB1dF9hYnNfc2V0X3JlcyhkZXYsIEFCU19ZLCB0b3VjaC5wYW5lbF9yZXMpOwogCiAJCXN3aXRjaCAodG91Y2guc2Vuc29yX2lkKSB7CiAJCWNhc2UgMDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9pc3RyZWFtLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vaXN0cmVhbS5jCmluZGV4IDE4Zjg3OTguLjdiZDViYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9pc3RyZWFtLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2lzdHJlYW0uYwpAQCAtNjIsNyArNjIsNyBAQAogICBzdHJlYW0gaW50ZXJmYWNlLgogICBJZiBzeW5jaHJvbm91cyBzZXJ2aWNlIHdhcyByZXF1ZXN0ZWQsIHRoZW4gZnVuY3Rpb24KICAgZG9lcyByZXR1cm4gYW1vdW50IG9mIGRhdGEgd3JpdHRlbiB0byBzdHJlYW0uCi0gICdmaW5hbCcgZG9lcyBpbmRpY2F0ZSB0aGF0IHBpY2Ugb2YgZGF0YSB0byBiZSB3cml0dGVuIGlzCisgICdmaW5hbCcgZG9lcyBpbmRpY2F0ZSB0aGF0IHBpZWNlIG9mIGRhdGEgdG8gYmUgd3JpdHRlbiBpcwogICBmaW5hbCBwYXJ0IG9mIGZyYW1lIChuZWNlc3Nhcnkgb25seSBieSBzdHJ1Y3R1cmVkIGRhdGF0cmFuc2ZlcikKICAgcmV0dXJuICAwIGlmIHplcm8gbGVuZ2ggcGFja2V0IHdhcyB3cml0dGVuCiAgIHJldHVybiAtMSBpZiBzdHJlYW0gaXMgZnVsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jCmluZGV4IDA4NTg3OTEuLmNmZmYwYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwyLmMKQEAgLTEyNDcsMTAgKzEyNDcsMTAgQEAKIGwyX3B1bGxfaXF1ZXVlKHN0cnVjdCBGc21JbnN0ICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7CiAJc3RydWN0IFBTdGFjayAqc3QgPSBmaS0+dXNlcmRhdGE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm9za2I7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgTGF5ZXIyICpsMiA9ICZzdC0+bDI7CiAJdV9jaGFyIGhlYWRlcltNQVhfSEVBREVSX0xFTl07Ci0JaW50IGk7CisJaW50IGksIGhkcl9zcGFjZV9uZWVkZWQ7CiAJaW50IHVuc2lnbmVkIHAxOwogCXVfbG9uZyBmbGFnczsKIApAQCAtMTI2MSw2ICsxMjYxLDE2IEBACiAJaWYgKCFza2IpCiAJCXJldHVybjsKIAorCWhkcl9zcGFjZV9uZWVkZWQgPSBsMmhlYWRlcnNpemUobDIsIDApOworCWlmIChoZHJfc3BhY2VfbmVlZGVkID4gc2tiX2hlYWRyb29tKHNrYikpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiID0gc2tiOworCisJCXNrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgaGRyX3NwYWNlX25lZWRlZCk7CisJCWlmICghc2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiKG9yaWdfc2tiKTsKKwkJCXJldHVybjsKKwkJfQorCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbDItPmxvY2ssIGZsYWdzKTsKIAlpZih0ZXN0X2JpdChGTEdfTU9EMTI4LCAmbDItPmZsYWcpKQogCQlwMSA9IChsMi0+dnMgLSBsMi0+dmEpICUgMTI4OwpAQCAtMTI4NSwxOSArMTI5NSw3IEBACiAJCWwyLT52cyA9IChsMi0+dnMgKyAxKSAlIDg7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwyLT5sb2NrLCBmbGFncyk7Ci0JcDEgPSBza2ItPmRhdGEgLSBza2ItPmhlYWQ7Ci0JaWYgKHAxID49IGkpCi0JCW1lbWNweShza2JfcHVzaChza2IsIGkpLCBoZWFkZXIsIGkpOwotCWVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSJpc2RsMiBwdWxsX2lxdWV1ZSBza2IgaGVhZGVyKCVkLyVkKSB0b28gc2hvcnRcbiIsIGksIHAxKTsKLQkJb3NrYiA9IHNrYjsKLQkJc2tiID0gYWxsb2Nfc2tiKG9za2ItPmxlbiArIGksIEdGUF9BVE9NSUMpOwotCQltZW1jcHkoc2tiX3B1dChza2IsIGkpLCBoZWFkZXIsIGkpOwotCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKG9za2IsCi0JCQkJCSAgc2tiX3B1dChza2IsIG9za2ItPmxlbiksIG9za2ItPmxlbik7Ci0JCWRldl9rZnJlZV9za2Iob3NrYik7Ci0JfQorCW1lbWNweShza2JfcHVzaChza2IsIGkpLCBoZWFkZXIsIGkpOwogCXN0LT5sMi5sMmwxKHN0LCBQSF9QVUxMIHwgSU5ESUNBVElPTiwgc2tiKTsKIAl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0FDS19QRU5ELCAmc3QtPmwyLmZsYWcpOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChGTEdfVDIwMF9SVU4sICZzdC0+bDIuZmxhZykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9kZWZzLmggYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fZGVmcy5oCmluZGV4IDcyOWRmNDAuLjE4YjgwMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9kZWZzLmgKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2RlZnMuaApAQCAtMjI3LDcgKzIyNyw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGltL2V4cG9ydGVkIGZ1bmN0aW9ucyAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi1leHRlcm4gY2hhciAqaHlzZG5fZ2V0cmV2KGNvbnN0IGNoYXIgKik7CiAKIC8qIGh5c2RuX3Byb2Njb25mLmMgKi8KIGV4dGVybiBpbnQgaHlzZG5fcHJvY2NvbmZfaW5pdCh2b2lkKTsJLyogaW5pdCBwcm9jIGNvbmZpZyBmaWxlc3lzICovCkBAIC0yNTksNyArMjU4LDYgQEAKIAogLyogaHlzZG5fbmV0LmMgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgaHluZXRfZW5hYmxlOyAKLWV4dGVybiBjaGFyICpoeXNkbl9uZXRfcmV2aXNpb247CiBleHRlcm4gaW50IGh5c2RuX25ldF9jcmVhdGUoaHlzZG5fY2FyZCAqKTsJLyogY3JlYXRlIGEgbmV3IG5ldCBkZXZpY2UgKi8KIGV4dGVybiBpbnQgaHlzZG5fbmV0X3JlbGVhc2UoaHlzZG5fY2FyZCAqKTsJLyogZGVsZXRlIHRoZSBkZXZpY2UgKi8KIGV4dGVybiBjaGFyICpoeXNkbl9uZXRfZ2V0bmFtZShoeXNkbl9jYXJkICopOwkvKiBnZXQgbmFtZSBvZiBuZXQgaW50ZXJmYWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2luaXQuYwppbmRleCBiN2NjNWMyLi4wYWI0MmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMKQEAgLTM2LDcgKzM2LDYgQEAKIE1PRFVMRV9BVVRIT1IoIldlcm5lciBDb3JuZWxpdXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIGNoYXIgKmh5c2RuX2luaXRfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjYuNi42ICQiOwogc3RhdGljIGludCBjYXJkbWF4OwkJLyogbnVtYmVyIG9mIGZvdW5kIGNhcmRzICovCiBoeXNkbl9jYXJkICpjYXJkX3Jvb3QgPSBOVUxMOwkvKiBwb2ludGVyIHRvIGZpcnN0IGNhcmQgKi8KIHN0YXRpYyBoeXNkbl9jYXJkICpjYXJkX2xhc3QgPSBOVUxMOwkvKiBwb2ludGVyIHRvIGZpcnN0IGNhcmQgKi8KQEAgLTQ5LDI1ICs0OCw2IEBACiAvKiBBZGRpdGlvbmFsbHkgbmV3ZXIgdmVyc2lvbnMgbWF5IGJlIGFjdGl2YXRlZCB3aXRob3V0IHJlYm9vdGluZy4gICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogZXh0cmFjdCByZXZpc2lvbiBudW1iZXIgZnJvbSBzdHJpbmcgZm9yIGxvZyBvdXRwdXQgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1jaGFyICoKLWh5c2RuX2dldHJldihjb25zdCBjaGFyICpyZXZpc2lvbikKLXsKLQljaGFyICpyZXY7Ci0JY2hhciAqcDsKLQotCWlmICgocCA9IHN0cmNocihyZXZpc2lvbiwgJzonKSkpIHsKLQkJcmV2ID0gcCArIDI7Ci0JCXAgPSBzdHJjaHIocmV2LCAnJCcpOwotCQkqLS1wID0gMDsKLQl9IGVsc2UKLQkJcmV2ID0gIj8/PyI7Ci0JcmV0dXJuIHJldjsKLX0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGluaXRfbW9kdWxlIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQgdG8gZG8gYWxsIG5lY2Vzc2FyeSAqLwogLyogdGhpbmdzIGxpa2UgYXV0b2RldGVjdC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNzUsMTMgKzE1NSw5IEBACiBzdGF0aWMgaW50IF9faW5pdAogaHlzZG5faW5pdCh2b2lkKQogewotCWNoYXIgdG1wWzUwXTsKIAlpbnQgcmM7CiAKLQlzdHJjcHkodG1wLCBoeXNkbl9pbml0X3JldmlzaW9uKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIkhZU0ROOiBtb2R1bGUgUmV2OiAlcyBsb2FkZWRcbiIsIGh5c2RuX2dldHJldih0bXApKTsKLQlzdHJjcHkodG1wLCBoeXNkbl9uZXRfcmV2aXNpb24pOwotCXByaW50ayhLRVJOX05PVElDRSAiSFlTRE46IG5ldHdvcmsgaW50ZXJmYWNlIFJldjogJXMgXG4iLCBoeXNkbl9nZXRyZXYodG1wKSk7CisJcHJpbnRrKEtFUk5fTk9USUNFICJIWVNETjogbW9kdWxlIGxvYWRlZFxuIik7CiAKIAlyYyA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmh5c2RuX3BjaV9kcml2ZXIpOwogCWlmIChyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYwppbmRleCBmZWVjOGQ4Li4xMWYyY2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fbmV0LmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jCkBAIC0yNiw5ICsyNiw2IEBACiB1bnNpZ25lZCBpbnQgaHluZXRfZW5hYmxlID0gMHhmZmZmZmZmZjsgCiBtb2R1bGVfcGFyYW0oaHluZXRfZW5hYmxlLCB1aW50LCAwKTsKIAotLyogc3RvcmUgdGhlIGFjdHVhbCB2ZXJzaW9uIGZvciBsb2cgcmVwb3J0aW5nICovCi1jaGFyICpoeXNkbl9uZXRfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjguNi40ICQiOwotCiAjZGVmaW5lIE1BWF9TS0JfQlVGRkVSUyAyMAkvKiBudW1iZXIgb2YgYnVmZmVycyBmb3Iga2VlcGluZyBUWC1kYXRhICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwppbmRleCA5NmIzZTM5Li41ZmU4M2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImh5c2RuX2RlZnMuaCIKIAogc3RhdGljIERFRklORV9NVVRFWChoeXNkbl9jb25mX211dGV4KTsKLXN0YXRpYyBjaGFyICpoeXNkbl9wcm9jY29uZl9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuOC42LjQgJCI7CiAKICNkZWZpbmUgSU5GT19PVVRfTEVOIDgwCQkvKiBsZW5ndGggb2YgaW5mbyBsaW5lIGluY2x1ZGluZyBsZiAqLwogCkBAIC00MDQsNyArNDAzLDcgQEAKIAkJY2FyZCA9IGNhcmQtPm5leHQ7CS8qIG5leHQgZW50cnkgKi8KIAl9CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgIkhZU0ROOiBwcm9jZnMgUmV2LiAlcyBpbml0aWFsaXNlZFxuIiwgaHlzZG5fZ2V0cmV2KGh5c2RuX3Byb2Njb25mX3JldmlzaW9uKSk7CisJcHJpbnRrKEtFUk5fTk9USUNFICJIWVNETjogcHJvY2ZzIGluaXRpYWxpc2VkXG4iKTsKIAlyZXR1cm4gKDApOwogfQkJCQkvKiBoeXNkbl9wcm9jY29uZl9pbml0ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pY24vaWNuLmMgYi9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jCmluZGV4IGYyYjViYWIuLjFmMzU1YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pY24vaWNuLmMKKysrIGIvZHJpdmVycy9pc2RuL2ljbi9pY24uYwpAQCAtMTYyNyw3ICsxNjI3LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGljbl9pbml0KHZvaWQpCiB7CiAJY2hhciAqcDsKLQljaGFyIHJldlsyMF07CisJY2hhciByZXZbMjFdOwogCiAJbWVtc2V0KCZkZXYsIDAsIHNpemVvZihpY25fZGV2KSk7CiAJZGV2Lm1lbWFkZHIgPSAobWVtYmFzZSAmIDB4MGZmYzAwMCk7CkBAIC0xNjM4LDYgKzE2MzgsNyBAQAogCiAJaWYgKChwID0gc3RyY2hyKHJldmlzaW9uLCAnOicpKSkgewogCQlzdHJuY3B5KHJldiwgcCArIDEsIDIwKTsKKwkJcmV2WzIwXSA9ICdcMCc7CiAJCXAgPSBzdHJjaHIocmV2LCAnJCcpOwogCQlpZiAocCkKIAkJCSpwID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXB3bS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMKaW5kZXggZGEzZmE4ZC4uNjY2ZGFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMKQEAgLTY5LDYgKzY5LDcgQEAKIAkJbGVkX2RhdC0+cHdtID0gcHdtX3JlcXVlc3QoY3VyX2xlZC0+cHdtX2lkLAogCQkJCWN1cl9sZWQtPm5hbWUpOwogCQlpZiAoSVNfRVJSKGxlZF9kYXQtPnB3bSkpIHsKKwkJCXJldCA9IFBUUl9FUlIobGVkX2RhdC0+cHdtKTsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IFBXTSAlZFxuIiwKIAkJCQkJY3VyX2xlZC0+cHdtX2lkKTsKIAkJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9saW5lYXIuYyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKaW5kZXggOGEyZjc2Ny4uMGVkN2Y2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2xpbmVhci5jCkBAIC0yMTYsNyArMjE2LDYgQEAKIAogCWlmIChtZF9jaGVja19ub19iaXRtYXAobWRkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmbWRkZXYtPnF1ZXVlLT5fX3F1ZXVlX2xvY2s7CiAJY29uZiA9IGxpbmVhcl9jb25mKG1kZGV2LCBtZGRldi0+cmFpZF9kaXNrcyk7CiAKIAlpZiAoIWNvbmYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggYjc2Y2ZjOC4uODE4MzEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMjg3LDYgKzI4Nyw3IEBACiAJbWRkZXZfdCAqbWRkZXYgPSBxLT5xdWV1ZWRhdGE7CiAJaW50IHJ2OwogCWludCBjcHU7CisJdW5zaWduZWQgaW50IHNlY3RvcnM7CiAKIAlpZiAobWRkZXYgPT0gTlVMTCB8fCBtZGRldi0+cGVycyA9PSBOVUxMCiAJICAgIHx8ICFtZGRldi0+cmVhZHkpIHsKQEAgLTMxMSwxMiArMzEyLDE2IEBACiAJYXRvbWljX2luYygmbWRkZXYtPmFjdGl2ZV9pbyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKKwkvKgorCSAqIHNhdmUgdGhlIHNlY3RvcnMgbm93IHNpbmNlIG91ciBiaW8gY2FuCisJICogZ28gYXdheSBpbnNpZGUgbWFrZV9yZXF1ZXN0CisJICovCisJc2VjdG9ycyA9IGJpb19zZWN0b3JzKGJpbyk7CiAJcnYgPSBtZGRldi0+cGVycy0+bWFrZV9yZXF1ZXN0KG1kZGV2LCBiaW8pOwogCiAJY3B1ID0gcGFydF9zdGF0X2xvY2soKTsKIAlwYXJ0X3N0YXRfaW5jKGNwdSwgJm1kZGV2LT5nZW5kaXNrLT5wYXJ0MCwgaW9zW3J3XSk7Ci0JcGFydF9zdGF0X2FkZChjcHUsICZtZGRldi0+Z2VuZGlzay0+cGFydDAsIHNlY3RvcnNbcnddLAotCQkgICAgICBiaW9fc2VjdG9ycyhiaW8pKTsKKwlwYXJ0X3N0YXRfYWRkKGNwdSwgJm1kZGV2LT5nZW5kaXNrLT5wYXJ0MCwgc2VjdG9yc1tyd10sIHNlY3RvcnMpOwogCXBhcnRfc3RhdF91bmxvY2soKTsKIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtZGRldi0+YWN0aXZlX2lvKSAmJiBtZGRldi0+c3VzcGVuZGVkKQpAQCAtNTQ4LDYgKzU1Myw5IEBACiB7CiAJbWRkZXZfdCAqbWRkZXYsICpuZXcgPSBOVUxMOwogCisJaWYgKHVuaXQgJiYgTUFKT1IodW5pdCkgIT0gTURfTUFKT1IpCisJCXVuaXQgJj0gfigoMTw8TWRwTWlub3JTaGlmdCktMSk7CisKICByZXRyeToKIAlzcGluX2xvY2soJmFsbF9tZGRldnNfbG9jayk7CiAKQEAgLTE5NDcsOCArMTk1NSw2IEBACiAJCQlfX2JkZXZuYW1lKGRldiwgYikpOwogCQlyZXR1cm4gUFRSX0VSUihiZGV2KTsKIAl9Ci0JaWYgKCFzaGFyZWQpCi0JCXNldF9iaXQoQWxsUmVzZXJ2ZWQsICZyZGV2LT5mbGFncyk7CiAJcmRldi0+YmRldiA9IGJkZXY7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTI0NjUsNiArMjQ3MSw5IEBACiAJCWlmIChyZGV2LT5yYWlkX2Rpc2sgIT0gLTEpCiAJCQlyZXR1cm4gLUVCVVNZOwogCisJCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SVU5OSU5HLCAmcmRldi0+bWRkZXYtPnJlY292ZXJ5KSkKKwkJCXJldHVybiAtRUJVU1k7CisKIAkJaWYgKHJkZXYtPm1kZGV2LT5wZXJzLT5ob3RfYWRkX2Rpc2sgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yNjEwLDEyICsyNjE5LDExIEBACiAKIAkJCW1kZGV2X2xvY2sobWRkZXYpOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2MiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCi0JCQkJaWYgKHRlc3RfYml0KEFsbFJlc2VydmVkLCAmcmRldjItPmZsYWdzKSB8fAotCQkJCSAgICAocmRldi0+YmRldiA9PSByZGV2Mi0+YmRldiAmJgotCQkJCSAgICAgcmRldiAhPSByZGV2MiAmJgotCQkJCSAgICAgb3ZlcmxhcHMocmRldi0+ZGF0YV9vZmZzZXQsIHJkZXYtPnNlY3RvcnMsCi0JCQkJCSAgICAgIHJkZXYyLT5kYXRhX29mZnNldCwKLQkJCQkJICAgICAgcmRldjItPnNlY3RvcnMpKSkgeworCQkJCWlmIChyZGV2LT5iZGV2ID09IHJkZXYyLT5iZGV2ICYmCisJCQkJICAgIHJkZXYgIT0gcmRldjIgJiYKKwkJCQkgICAgb3ZlcmxhcHMocmRldi0+ZGF0YV9vZmZzZXQsIHJkZXYtPnNlY3RvcnMsCisJCQkJCSAgICAgcmRldjItPmRhdGFfb2Zmc2V0LAorCQkJCQkgICAgIHJkZXYyLT5zZWN0b3JzKSkgewogCQkJCQlvdmVybGFwID0gMTsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtNDEzMywxMCArNDE0MSwxMCBAQAogCX0KIAogCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gc2VjdG9yczsKLQlzZXRfY2FwYWNpdHkobWRkZXYtPmdlbmRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKLQlpZiAobWRkZXYtPnBlcnMpCisJaWYgKG1kZGV2LT5wZXJzKSB7CisJCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCQlyZXZhbGlkYXRlX2Rpc2sobWRkZXYtPmdlbmRpc2spOwotCisJfQogCXJldHVybiBsZW47CiB9CiAKQEAgLTQ2MTksNiArNDYyNyw3IEBACiAJfQogCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCXJldmFsaWRhdGVfZGlzayhtZGRldi0+Z2VuZGlzayk7CisJbWRkZXYtPmNoYW5nZWQgPSAxOwogCWtvYmplY3RfdWV2ZW50KCZkaXNrX3RvX2RldihtZGRldi0+Z2VuZGlzayktPmtvYmosIEtPQkpfQ0hBTkdFKTsKIG91dDoKIAlyZXR1cm4gZXJyOwpAQCAtNDcwNyw2ICs0NzE2LDcgQEAKIAltZGRldi0+c3luY19zcGVlZF9taW4gPSBtZGRldi0+c3luY19zcGVlZF9tYXggPSAwOwogCW1kZGV2LT5yZWNvdmVyeSA9IDA7CiAJbWRkZXYtPmluX3N5bmMgPSAwOworCW1kZGV2LT5jaGFuZ2VkID0gMDsKIAltZGRldi0+ZGVncmFkZWQgPSAwOwogCW1kZGV2LT5zYWZlbW9kZSA9IDA7CiAJbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCA9IDA7CkBAIC00ODIyLDYgKzQ4MzIsNyBAQAogCiAJCXNldF9jYXBhY2l0eShkaXNrLCAwKTsKIAkJbXV0ZXhfdW5sb2NrKCZtZGRldi0+b3Blbl9tdXRleCk7CisJCW1kZGV2LT5jaGFuZ2VkID0gMTsKIAkJcmV2YWxpZGF0ZV9kaXNrKGRpc2spOwogCiAJCWlmIChtZGRldi0+cm8pCkBAIC01NTc4LDYgKzU1ODksOCBAQAogCW1kZGV2LT5kZWx0YV9kaXNrcyA9IHJhaWRfZGlza3MgLSBtZGRldi0+cmFpZF9kaXNrczsKIAogCXJ2ID0gbWRkZXYtPnBlcnMtPmNoZWNrX3Jlc2hhcGUobWRkZXYpOworCWlmIChydiA8IDApCisJCW1kZGV2LT5kZWx0YV9kaXNrcyA9IDA7CiAJcmV0dXJuIHJ2OwogfQogCkBAIC02MDA0LDcgKzYwMTcsNyBAQAogCWF0b21pY19pbmMoJm1kZGV2LT5vcGVuZXJzKTsKIAltdXRleF91bmxvY2soJm1kZGV2LT5vcGVuX211dGV4KTsKIAotCWNoZWNrX2Rpc2tfc2l6ZV9jaGFuZ2UobWRkZXYtPmdlbmRpc2ssIGJkZXYpOworCWNoZWNrX2Rpc2tfY2hhbmdlKGJkZXYpOwogIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjAxOSw2ICs2MDMyLDIxIEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBtZF9tZWRpYV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCW1kZGV2X3QgKm1kZGV2ID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIG1kZGV2LT5jaGFuZ2VkOworfQorCitzdGF0aWMgaW50IG1kX3JldmFsaWRhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2spCit7CisJbWRkZXZfdCAqbWRkZXYgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisKKwltZGRldi0+Y2hhbmdlZCA9IDA7CisJcmV0dXJuIDA7Cit9CiBzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1kX2ZvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKQEAgLTYwMjksNiArNjA1Nyw4IEBACiAJLmNvbXBhdF9pb2N0bAk9IG1kX2NvbXBhdF9pb2N0bCwKICNlbmRpZgogCS5nZXRnZW8JCT0gbWRfZ2V0Z2VvLAorCS5tZWRpYV9jaGFuZ2VkICA9IG1kX21lZGlhX2NoYW5nZWQsCisJLnJldmFsaWRhdGVfZGlzaz0gbWRfcmV2YWxpZGF0ZSwKIH07CiAKIHN0YXRpYyBpbnQgbWRfdGhyZWFkKHZvaWQgKiBhcmcpCkBAIC02OTg1LDkgKzcwMTUsNiBAQAogCX0gZWxzZSBpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELCAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJbWRkZXYtPnJlc3luY19taW4gPSBtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkOwogCW1kZGV2LT5jdXJyX3Jlc3luYyA9IDA7Ci0JaWYgKCF0ZXN0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KSkKLQkJbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA9IDA7Ci0Jc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwgInN5bmNfY29tcGxldGVkIik7CiAJd2FrZV91cCgmcmVzeW5jX3dhaXQpOwogCXNldF9iaXQoTURfUkVDT1ZFUllfRE9ORSwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKQEAgLTcwMjgsNyArNzA1NSw3IEBACiAJCQl9CiAJCX0KIAotCWlmIChtZGRldi0+ZGVncmFkZWQgJiYgISBtZGRldi0+cm8gJiYgIW1kZGV2LT5yZWNvdmVyeV9kaXNhYmxlZCkgeworCWlmIChtZGRldi0+ZGVncmFkZWQgJiYgIW1kZGV2LT5yZWNvdmVyeV9kaXNhYmxlZCkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKIAkJCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSAmJgpAQCAtNzE1MSw3ICs3MTc4LDIwIEBACiAJCQkvKiBPbmx5IHRoaW5nIHdlIGRvIG9uIGEgcm8gYXJyYXkgaXMgcmVtb3ZlCiAJCQkgKiBmYWlsZWQgZGV2aWNlcy4KIAkJCSAqLwotCQkJcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2KTsKKwkJCW1ka19yZGV2X3QgKnJkZXY7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQorCQkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgorCQkJCSAgICAhdGVzdF9iaXQoQmxvY2tlZCwgJnJkZXYtPmZsYWdzKSAmJgorCQkJCSAgICB0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykgJiYKKwkJCQkgICAgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpPT0wKSB7CisJCQkJCWlmIChtZGRldi0+cGVycy0+aG90X3JlbW92ZV9kaXNrKAorCQkJCQkJICAgIG1kZGV2LCByZGV2LT5yYWlkX2Rpc2spPT0wKSB7CisJCQkJCQljaGFyIG5tWzIwXTsKKwkJCQkJCXNwcmludGYobm0sInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOworCQkJCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJm1kZGV2LT5rb2JqLCBubSk7CisJCQkJCQlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKKwkJCQkJfQorCQkJCX0KIAkJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwogCQkJZ290byB1bmxvY2s7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaAppbmRleCBlZWM1MTdjLi4xMjIxNWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmgKKysrIGIvZHJpdmVycy9tZC9tZC5oCkBAIC05Myw4ICs5Myw2IEBACiAjZGVmaW5lCUZhdWx0eQkJMQkJLyogZGV2aWNlIGlzIGtub3duIHRvIGhhdmUgYSBmYXVsdCAqLwogI2RlZmluZQlJbl9zeW5jCQkyCQkvKiBkZXZpY2UgaXMgaW5fc3luYyB3aXRoIHJlc3Qgb2YgYXJyYXkgKi8KICNkZWZpbmUJV3JpdGVNb3N0bHkJNAkJLyogQXZvaWQgcmVhZGluZyBpZiBhdCBhbGwgcG9zc2libGUgKi8KLSNkZWZpbmUJQWxsUmVzZXJ2ZWQJNgkJLyogSWYgd2hvbGUgZGV2aWNlIGlzIHJlc2VydmVkIGZvcgotCQkJCQkgKiBvbmUgYXJyYXkgKi8KICNkZWZpbmUJQXV0b0RldGVjdGVkCTcJCS8qIGFkZGVkIGJ5IGF1dG8tZGV0ZWN0ICovCiAjZGVmaW5lIEJsb2NrZWQJCTgJCS8qIEFuIGVycm9yIG9jY3VyZWQgb24gYW4gZXh0ZXJuYWxseQogCQkJCQkgKiBtYW5hZ2VkIGFycmF5LCBkb24ndCBhbGxvdyB3cml0ZXMKQEAgLTI3Niw2ICsyNzQsOCBAQAogCWF0b21pY190CQkJYWN0aXZlOwkJLyogZ2VuZXJhbCByZWZjb3VudCAqLwogCWF0b21pY190CQkJb3BlbmVyczsJLyogbnVtYmVyIG9mIGFjdGl2ZSBvcGVucyAqLwogCisJaW50CQkJCWNoYW5nZWQ7CS8qIFRydWUgaWYgd2UgbWlnaHQgbmVlZCB0bworCQkJCQkJCSAqIHJlcmVhZCBwYXJ0aXRpb24gaW5mbyAqLwogCWludAkJCQlkZWdyYWRlZDsJLyogd2hldGhlciBtZCBzaG91bGQgY29uc2lkZXIKIAkJCQkJCQkgKiBhZGRpbmcgYSBzcGFyZQogCQkJCQkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKaW5kZXggNmQ3ZGRmMy4uM2E2MmQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYworKysgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCkBAIC00MzUsNyArNDM1LDYgQEAKIAkgKiBib29ra2VlcGluZyBhcmVhLiBbd2hhdGV2ZXIgd2UgYWxsb2NhdGUgaW4gbXVsdGlwYXRoX3J1bigpLAogCSAqIHNob3VsZCBiZSBmcmVlZCBpbiBtdWx0aXBhdGhfc3RvcCgpXQogCSAqLwotCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZtZGRldi0+cXVldWUtPl9fcXVldWVfbG9jazsKIAogCWNvbmYgPSBremFsbG9jKHNpemVvZihtdWx0aXBhdGhfY29uZl90KSwgR0ZQX0tFUk5FTCk7CiAJbWRkZXYtPnByaXZhdGUgPSBjb25mOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMC5jIGIvZHJpdmVycy9tZC9yYWlkMC5jCmluZGV4IGEzOWY0YzMuLmMwYWM0NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDAuYworKysgYi9kcml2ZXJzL21kL3JhaWQwLmMKQEAgLTE3OSw2ICsxNzksMTQgQEAKIAkJCXJkZXYxLT5uZXdfcmFpZF9kaXNrID0gajsKIAkJfQogCisJCWlmIChtZGRldi0+bGV2ZWwgPT0gMSkgeworCQkJLyogdGFpa2luZyBvdmVyIGEgcmFpZDEgYXJyYXktCisJCQkgKiB3ZSBoYXZlIG9ubHkgb25lIGFjdGl2ZSBkaXNrCisJCQkgKi8KKwkJCWogPSAwOworCQkJcmRldjEtPm5ld19yYWlkX2Rpc2sgPSBqOworCQl9CisKIAkJaWYgKGogPCAwIHx8IGogPj0gbWRkZXYtPnJhaWRfZGlza3MpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAibWQvcmFpZDA6JXM6IGJhZCBkaXNrIG51bWJlciAlZCAtICIKIAkJCSAgICAgICAiYWJvcnRpbmchXG4iLCBtZG5hbWUobWRkZXYpLCBqKTsKQEAgLTM1Myw3ICszNjEsNiBAQAogCWlmIChtZF9jaGVja19ub19iaXRtYXAobWRkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBtZGRldi0+Y2h1bmtfc2VjdG9ycyk7Ci0JbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJm1kZGV2LT5xdWV1ZS0+X19xdWV1ZV9sb2NrOwogCiAJLyogaWYgcHJpdmF0ZSBpcyBub3QgbnVsbCwgd2UgYXJlIGhlcmUgYWZ0ZXIgdGFrZW92ZXIgKi8KIAlpZiAobWRkZXYtPnByaXZhdGUgPT0gTlVMTCkgewpAQCAtNjQ0LDEyICs2NTEsMzkgQEAKIAlyZXR1cm4gcHJpdl9jb25mOwogfQogCitzdGF0aWMgdm9pZCAqcmFpZDBfdGFrZW92ZXJfcmFpZDEobWRkZXZfdCAqbWRkZXYpCit7CisJcmFpZDBfY29uZl90ICpwcml2X2NvbmY7CisKKwkvKiBDaGVjayBsYXlvdXQ6CisJICogIC0gKE4gLSAxKSBtaXJyb3IgZHJpdmVzIG11c3QgYmUgYWxyZWFkeSBmYXVsdHkKKwkgKi8KKwlpZiAoKG1kZGV2LT5yYWlkX2Rpc2tzIC0gMSkgIT0gbWRkZXYtPmRlZ3JhZGVkKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWQvcmFpZDA6JXM6IChOIC0gMSkgbWlycm9ycyBkcml2ZXMgbXVzdCBiZSBhbHJlYWR5IGZhdWx0eSFcbiIsCisJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJLyogU2V0IG5ldyBwYXJhbWV0ZXJzICovCisJbWRkZXYtPm5ld19sZXZlbCA9IDA7CisJbWRkZXYtPm5ld19sYXlvdXQgPSAwOworCW1kZGV2LT5uZXdfY2h1bmtfc2VjdG9ycyA9IDEyODsgLyogYnkgZGVmYXVsdCBzZXQgY2h1bmsgc2l6ZSB0byA2NGsgKi8KKwltZGRldi0+ZGVsdGFfZGlza3MgPSAxIC0gbWRkZXYtPnJhaWRfZGlza3M7CisJbWRkZXYtPnJhaWRfZGlza3MgPSAxOworCS8qIG1ha2Ugc3VyZSBpdCB3aWxsIGJlIG5vdCBtYXJrZWQgYXMgZGlydHkgKi8KKwltZGRldi0+cmVjb3ZlcnlfY3AgPSBNYXhTZWN0b3I7CisKKwljcmVhdGVfc3RyaXBfem9uZXMobWRkZXYsICZwcml2X2NvbmYpOworCXJldHVybiBwcml2X2NvbmY7Cit9CisKIHN0YXRpYyB2b2lkICpyYWlkMF90YWtlb3ZlcihtZGRldl90ICptZGRldikKIHsKIAkvKiByYWlkMCBjYW4gdGFrZSBvdmVyOgogCSAqICByYWlkNCAtIGlmIGFsbCBkYXRhIGRpc2tzIGFyZSBhY3RpdmUuCiAJICogIHJhaWQ1IC0gcHJvdmlkaW5nIGl0IGlzIFJhaWQ0IGxheW91dCBhbmQgb25lIGRpc2sgaXMgZmF1bHR5CiAJICogIHJhaWQxMCAtIGFzc3VtaW5nIHdlIGhhdmUgYWxsIG5lY2Vzc2FyeSBhY3RpdmUgZGlza3MKKwkgKiAgcmFpZDEgLSB3aXRoIChOIC0xKSBtaXJyb3IgZHJpdmVzIGZhdWx0eQogCSAqLwogCWlmIChtZGRldi0+bGV2ZWwgPT0gNCkKIAkJcmV0dXJuIHJhaWQwX3Rha2VvdmVyX3JhaWQ0NShtZGRldik7CkBAIC02NjUsNiArNjk5LDEyIEBACiAJaWYgKG1kZGV2LT5sZXZlbCA9PSAxMCkKIAkJcmV0dXJuIHJhaWQwX3Rha2VvdmVyX3JhaWQxMChtZGRldik7CiAKKwlpZiAobWRkZXYtPmxldmVsID09IDEpCisJCXJldHVybiByYWlkMF90YWtlb3Zlcl9yYWlkMShtZGRldik7CisKKwlwcmludGsoS0VSTl9FUlIgIlRha2VvdmVyIGZyb20gcmFpZCVpIHRvIHJhaWQwIG5vdCBzdXBwb3J0ZWRcbiIsCisJCW1kZGV2LT5sZXZlbCk7CisKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGEyM2ZmYTMuLjA2Y2Q3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTU5Myw3ICs1OTMsMTAgQEAKIAlpZiAoY29uZi0+cGVuZGluZ19iaW9fbGlzdC5oZWFkKSB7CiAJCXN0cnVjdCBiaW8gKmJpbzsKIAkJYmlvID0gYmlvX2xpc3RfZ2V0KCZjb25mLT5wZW5kaW5nX2Jpb19saXN0KTsKKwkJLyogT25seSB0YWtlIHRoZSBzcGlubG9jayB0byBxdWlldCBhIHdhcm5pbmcgKi8KKwkJc3Bpbl9sb2NrKGNvbmYtPm1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayk7CiAJCWJsa19yZW1vdmVfcGx1Zyhjb25mLT5tZGRldi0+cXVldWUpOworCQlzcGluX3VubG9jayhjb25mLT5tZGRldi0+cXVldWUtPnF1ZXVlX2xvY2spOwogCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJLyogZmx1c2ggYW55IHBlbmRpbmcgYml0bWFwIHdyaXRlcyB0bwogCQkgKiBkaXNrIGJlZm9yZSBwcm9jZWVkaW5nIHcvIEkvTyAqLwpAQCAtOTU5LDcgKzk2Miw3IEBACiAJCWF0b21pY19pbmMoJnIxX2Jpby0+cmVtYWluaW5nKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAJCWJpb19saXN0X2FkZCgmY29uZi0+cGVuZGluZ19iaW9fbGlzdCwgbWJpbyk7Ci0JCWJsa19wbHVnX2RldmljZShtZGRldi0+cXVldWUpOworCQlibGtfcGx1Z19kZXZpY2VfdW5sb2NrZWQobWRkZXYtPnF1ZXVlKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAl9CiAJcjFfYmlvX3dyaXRlX2RvbmUocjFfYmlvLCBiaW8tPmJpX3ZjbnQsIGJlaGluZF9wYWdlcywgYmVoaW5kX3BhZ2VzICE9IE5VTEwpOwpAQCAtMjAyMSw3ICsyMDI0LDYgQEAKIAlpZiAoSVNfRVJSKGNvbmYpKQogCQlyZXR1cm4gUFRSX0VSUihjb25mKTsKIAotCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCWRpc2tfc3RhY2tfbGltaXRzKG1kZGV2LT5nZW5kaXNrLCByZGV2LT5iZGV2LAogCQkJCSAgcmRldi0+ZGF0YV9vZmZzZXQgPDwgOSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCA2OWI2NTk1Li43NDdkMDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTY2Miw3ICs2NjIsMTAgQEAKIAlpZiAoY29uZi0+cGVuZGluZ19iaW9fbGlzdC5oZWFkKSB7CiAJCXN0cnVjdCBiaW8gKmJpbzsKIAkJYmlvID0gYmlvX2xpc3RfZ2V0KCZjb25mLT5wZW5kaW5nX2Jpb19saXN0KTsKKwkJLyogU3BpbmxvY2sgb25seSB0YWtlbiB0byBxdWlldCBhIHdhcm5pbmcgKi8KKwkJc3Bpbl9sb2NrKGNvbmYtPm1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayk7CiAJCWJsa19yZW1vdmVfcGx1Zyhjb25mLT5tZGRldi0+cXVldWUpOworCQlzcGluX3VubG9jayhjb25mLT5tZGRldi0+cXVldWUtPnF1ZXVlX2xvY2spOwogCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJLyogZmx1c2ggYW55IHBlbmRpbmcgYml0bWFwIHdyaXRlcyB0byBkaXNrCiAJCSAqIGJlZm9yZSBwcm9jZWVkaW5nIHcvIEkvTyAqLwpAQCAtOTcxLDcgKzk3NCw3IEBACiAJCWF0b21pY19pbmMoJnIxMF9iaW8tPnJlbWFpbmluZyk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwogCQliaW9fbGlzdF9hZGQoJmNvbmYtPnBlbmRpbmdfYmlvX2xpc3QsIG1iaW8pOwotCQlibGtfcGx1Z19kZXZpY2UobWRkZXYtPnF1ZXVlKTsKKwkJYmxrX3BsdWdfZGV2aWNlX3VubG9ja2VkKG1kZGV2LT5xdWV1ZSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAJfQogCkBAIC0yMzA0LDggKzIzMDcsNiBAQAogCWlmICghY29uZikKIAkJZ290byBvdXQ7CiAKLQltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7Ci0KIAltZGRldi0+dGhyZWFkID0gY29uZi0+dGhyZWFkOwogCWNvbmYtPnRocmVhZCA9IE5VTEw7CiAKQEAgLTI0NjMsMTEgKzI0NjQsMTMgQEAKIAltZGRldi0+cmVjb3ZlcnlfY3AgPSBNYXhTZWN0b3I7CiAKIAljb25mID0gc2V0dXBfY29uZihtZGRldik7Ci0JaWYgKCFJU19FUlIoY29uZikpCisJaWYgKCFJU19FUlIoY29uZikpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKIAkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCkKIAkJCQlyZGV2LT5uZXdfcmFpZF9kaXNrID0gcmRldi0+cmFpZF9kaXNrICogMjsKLQkJCisJCWNvbmYtPmJhcnJpZXIgPSAxOworCX0KKwogCXJldHVybiBjb25mOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggNTA0NGJhYi4uNzg1MzZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtNTIwNCw3ICs1MjA0LDYgQEAKIAogCQltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2RhdGEgPSBtZGRldjsKIAkJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IHJhaWQ1X2Nvbmdlc3RlZDsKLQkJbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJmNvbmYtPmRldmljZV9sb2NrOwogCQltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IHJhaWQ1X3VucGx1Z19xdWV1ZTsKIAogCQljaHVua19zaXplID0gbWRkZXYtPmNodW5rX3NlY3RvcnMgPDwgOTsKQEAgLTU1MTcsNyArNTUxNiw2IEBACiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJbWRrX3JkZXZfdCAqcmRldjsKIAlpbnQgc3BhcmVzID0gMDsKLQlpbnQgYWRkZWRfZGV2aWNlcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SVU5OSU5HLCAmbWRkZXYtPnJlY292ZXJ5KSkKQEAgLTU1MjcsOCArNTUyNSw4IEBACiAJCXJldHVybiAtRU5PU1BDOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKLQkJaWYgKChyZGV2LT5yYWlkX2Rpc2sgPCAwIHx8IHJkZXYtPnJhaWRfZGlzayA+PSBjb25mLT5yYWlkX2Rpc2tzKQotCQkgICAgICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCisJCWlmICghdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKQorCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKIAkJCXNwYXJlcysrOwogCiAJaWYgKHNwYXJlcyAtIG1kZGV2LT5kZWdyYWRlZCA8IG1kZGV2LT5kZWx0YV9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZCkKQEAgLTU1NzEsMzQgKzU1NjksMzUgQEAKIAkgKiB0byBjb3JyZWN0bHkgcmVjb3JkIHRoZSAicGFydGlhbGx5IHJlY29uc3RydWN0ZWQiIHN0YXRlIG9mCiAJICogc3VjaCBkZXZpY2VzIGR1cmluZyB0aGUgcmVzaGFwZSBhbmQgY29uZnVzaW9uIGNvdWxkIHJlc3VsdC4KIAkgKi8KLQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID49IDApCi0JICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCi0JCWlmIChyZGV2LT5yYWlkX2Rpc2sgPCAwICYmCi0JCSAgICAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7Ci0JCQlpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHsKLQkJCQljaGFyIG5tWzIwXTsKLQkJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpIHsKLQkJCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwotCQkJCQlhZGRlZF9kZXZpY2VzKys7Ci0JCQkJfSBlbHNlCi0JCQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IDA7Ci0JCQkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOwotCQkJCWlmIChzeXNmc19jcmVhdGVfbGluaygmbWRkZXYtPmtvYmosCi0JCQkJCQkgICAgICAmcmRldi0+a29iaiwgbm0pKQotCQkJCQkvKiBGYWlsdXJlIGhlcmUgaXMgT0sgKi87Ci0JCQl9IGVsc2UKLQkJCQlicmVhazsKLQkJfSBlbHNlIGlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcwotCQkJICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewotCQkJLyogVGhpcyBpcyBhIHNwYXJlIHRoYXQgd2FzIG1hbnVhbGx5IGFkZGVkICovCi0JCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7Ci0JCQlhZGRlZF9kZXZpY2VzKys7Ci0JCX0KKwlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID49IDApIHsKKwkJaW50IGFkZGVkX2RldmljZXMgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQorCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA8IDAgJiYKKwkJCSAgICAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CisJCQkJaWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7CisJCQkJCWNoYXIgbm1bMjBdOworCQkJCQlpZiAocmRldi0+cmFpZF9kaXNrCisJCQkJCSAgICA+PSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKSB7CisJCQkJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CisJCQkJCQlhZGRlZF9kZXZpY2VzKys7CisJCQkJCX0gZWxzZQorCQkJCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gMDsKKwkJCQkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOworCQkJCQlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJm1kZGV2LT5rb2JqLAorCQkJCQkJCSAgICAgICZyZGV2LT5rb2JqLCBubSkpCisJCQkJCQkvKiBGYWlsdXJlIGhlcmUgaXMgT0sgKi87CisJCQkJfQorCQkJfSBlbHNlIGlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcworCQkJCSAgICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKKwkJCQkvKiBUaGlzIGlzIGEgc3BhcmUgdGhhdCB3YXMgbWFudWFsbHkgYWRkZWQgKi8KKwkJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CisJCQkJYWRkZWRfZGV2aWNlcysrOworCQkJfQogCi0JLyogV2hlbiBhIHJlc2hhcGUgY2hhbmdlcyB0aGUgbnVtYmVyIG9mIGRldmljZXMsIC0+ZGVncmFkZWQKLQkgKiBpcyBtZWFzdXJlZCBhZ2FpbnN0IHRoZSBsYXJnZXIgb2YgdGhlIHByZSBhbmQgcG9zdCBudW1iZXIgb2YKLQkgKiBkZXZpY2VzLiovCi0JaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA+IDApIHsKKwkJLyogV2hlbiBhIHJlc2hhcGUgY2hhbmdlcyB0aGUgbnVtYmVyIG9mIGRldmljZXMsCisJCSAqIC0+ZGVncmFkZWQgaXMgbWVhc3VyZWQgYWdhaW5zdCB0aGUgbGFyZ2VyIG9mIHRoZQorCQkgKiBwcmUgYW5kIHBvc3QgbnVtYmVyIG9mIGRldmljZXMuCisJCSAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJbWRkZXYtPmRlZ3JhZGVkICs9IChjb25mLT5yYWlkX2Rpc2tzIC0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKIAkJCS0gYWRkZWRfZGV2aWNlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaXItbGlyYy1jb2RlYy5jIGIvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKaW5kZXggZjAxMWM1ZC4uMWM1Y2M2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKQEAgLTEsNCArMSw0IEBACi0vKiBpci1saXJjLWNvZGVjLmMgLSBpci1jb3JlIHRvIGNsYXNzaWMgbGlyYyBpbnRlcmZhY2UgYnJpZGdlCisvKiBpci1saXJjLWNvZGVjLmMgLSByYy1jb3JlIHRvIGNsYXNzaWMgbGlyYyBpbnRlcmZhY2UgYnJpZGdlCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KICAqCkBAIC00Nyw2ICs0Nyw3IEBACiAJLyogQ2FycmllciByZXBvcnRzICovCiAJaWYgKGV2LmNhcnJpZXJfcmVwb3J0KSB7CiAJCXNhbXBsZSA9IExJUkNfRlJFUVVFTkNZKGV2LmNhcnJpZXIpOworCQlJUl9kcHJpbnRrKDIsICJjYXJyaWVyIHJlcG9ydCAoZnJlcTogJWQpXG4iLCBzYW1wbGUpOwogCiAJLyogUGFja2V0IGVuZCAqLwogCX0gZWxzZSBpZiAoZXYudGltZW91dCkgewpAQCAtNjIsNiArNjMsNyBAQAogCQkJcmV0dXJuIDA7CiAKIAkJc2FtcGxlID0gTElSQ19USU1FT1VUKGV2LmR1cmF0aW9uIC8gMTAwMCk7CisJCUlSX2RwcmludGsoMiwgInRpbWVvdXQgcmVwb3J0IChkdXJhdGlvbjogJWQpXG4iLCBzYW1wbGUpOwogCiAJLyogTm9ybWFsIHNhbXBsZSAqLwogCX0gZWxzZSB7CkBAIC04NSw2ICs4Nyw4IEBACiAKIAkJc2FtcGxlID0gZXYucHVsc2UgPyBMSVJDX1BVTFNFKGV2LmR1cmF0aW9uIC8gMTAwMCkgOgogCQkJCQlMSVJDX1NQQUNFKGV2LmR1cmF0aW9uIC8gMTAwMCk7CisJCUlSX2RwcmludGsoMiwgImRlbGl2ZXJpbmcgJXV1cyAlcyB0byBsaXJjX2RldlxuIiwKKwkJCSAgIFRPX1VTKGV2LmR1cmF0aW9uKSwgVE9fU1RSKGV2LnB1bHNlKSk7CiAJfQogCiAJbGlyY19idWZmZXJfd3JpdGUoZGV2LT5yYXctPmxpcmMuZHJ2LT5yYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXJjNi1tY2UuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yYzYtbWNlLmMKaW5kZXggM2JmMzMzNy4uMmY1ZGMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXJjNi1tY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM2LW1jZS5jCkBAIC0zLDYgKzMsOSBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAxMCBieSBKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+CiAgKgorICogU2VlIGh0dHA6Ly9tZWRpYWNlbnRlcmd1aWRlcy5jb20vYm9vay9leHBvcnQvaHRtbC8zMSBmb3IgZGV0YWlscyBvbgorICoga2V5IG1hcHBpbmdzLgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTYwLDYgKzYzLDkgQEAKIAl7IDB4ODAwZjA0MjYsIEtFWV9FUEcgfSwJCS8qIEd1aWRlICovCiAJeyAweDgwMGYwNDI3LCBLRVlfWk9PTSB9LAkJLyogQXNwZWN0ICovCiAKKwl7IDB4ODAwZjA0MzIsIEtFWV9NT0RFIH0sCQkvKiBWaXN1YWxpemF0aW9uICovCisJeyAweDgwMGYwNDMzLCBLRVlfUFJFU0VOVEFUSU9OIH0sCS8qIFNsaWRlIFNob3cgKi8KKwl7IDB4ODAwZjA0MzQsIEtFWV9FSkVDVENEIH0sCiAJeyAweDgwMGYwNDNhLCBLRVlfQlJJR0hUTkVTU1VQIH0sCiAKIAl7IDB4ODAwZjA0NDYsIEtFWV9UViB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYyBiL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMKaW5kZXggMDc5MzUzZS4uNmRmMGE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jCkBAIC04MTYsNyArODE2LDcgQEAKIAlzd2l0Y2ggKGlyLT5idWZfaW5baW5kZXhdKSB7CiAJLyogMi1ieXRlIHJldHVybiB2YWx1ZSBjb21tYW5kcyAqLwogCWNhc2UgTUNFX0NNRF9TX1RJTUVPVVQ6Ci0JCWlyLT5yYy0+dGltZW91dCA9IE1TX1RPX05TKChoaSA8PCA4IHwgbG8pIC8gMik7CisJCWlyLT5yYy0+dGltZW91dCA9IFVTX1RPX05TKChoaSA8PCA4IHwgbG8pIC8gMik7CiAJCWJyZWFrOwogCiAJLyogMS1ieXRlIHJldHVybiB2YWx1ZSBjb21tYW5kcyAqLwpAQCAtODU1LDkgKzg1NSwxMCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgUEFSU0VfSVJEQVRBOgogCQkJaXItPnJlbS0tOworCQkJaW5pdF9pcl9yYXdfZXZlbnQoJnJhd2lyKTsKIAkJCXJhd2lyLnB1bHNlID0gKChpci0+YnVmX2luW2ldICYgTUNFX1BVTFNFX0JJVCkgIT0gMCk7CiAJCQlyYXdpci5kdXJhdGlvbiA9IChpci0+YnVmX2luW2ldICYgTUNFX1BVTFNFX01BU0spCi0JCQkJCSAqIE1TX1RPX1VTKE1DRV9USU1FX1VOSVQpOworCQkJCQkgKiBVU19UT19OUyhNQ0VfVElNRV9VTklUKTsKIAogCQkJZGV2X2RiZyhpci0+ZGV2LCAiU3RvcmluZyAlcyB3aXRoIGR1cmF0aW9uICVkXG4iLAogCQkJCXJhd2lyLnB1bHNlID8gInB1bHNlIiA6ICJzcGFjZSIsCkBAIC04ODMsNiArODg0LDggQEAKIAkJCQkJICAgICBpLCBpci0+cmVtICsgMSwgZmFsc2UpOwogCQkJaWYgKGlyLT5yZW0pCiAJCQkJaXItPnBhcnNlcl9zdGF0ZSA9IFBBUlNFX0lSREFUQTsKKwkJCWVsc2UKKwkJCQlpcl9yYXdfZXZlbnRfcmVzZXQoaXItPnJjKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEwNjAsNyArMTA2Myw3IEBACiAJcmMtPnByaXYgPSBpcjsKIAlyYy0+ZHJpdmVyX3R5cGUgPSBSQ19EUklWRVJfSVJfUkFXOwogCXJjLT5hbGxvd2VkX3Byb3RvcyA9IFJDX1RZUEVfQUxMOwotCXJjLT50aW1lb3V0ID0gTVNfVE9fTlMoMTAwMCk7CisJcmMtPnRpbWVvdXQgPSBVU19UT19OUygxMDAwKTsKIAlpZiAoIWlyLT5mbGFncy5ub190eCkgewogCQlyYy0+c190eF9tYXNrID0gbWNldXNiX3NldF90eF9tYXNrOwogCQlyYy0+c190eF9jYXJyaWVyID0gbWNldXNiX3NldF90eF9jYXJyaWVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5jIGIvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5jCmluZGV4IGRkNGNhZjguLjI3M2Q5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvbnV2b3Rvbi1jaXIuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQljYXJyaWVyID0gKGNvdW50ICogMTAwMDAwMCkgLyBkdXJhdGlvbjsKKwljYXJyaWVyID0gTVNfVE9fTlMoY291bnQpIC8gZHVyYXRpb247CiAKIAlpZiAoKGNhcnJpZXIgPiBNQVhfQ0FSUklFUikgfHwgKGNhcnJpZXIgPCBNSU5fQ0FSUklFUikpCiAJCW52dF9kYmcoIldURj8gQ2FycmllciBmcmVxdWVuY3kgb3V0IG9mIHJhbmdlISIpOwpAQCAtNjEyLDggKzYxMiw4IEBACiAJCXNhbXBsZSA9IG52dC0+YnVmW2ldOwogCiAJCXJhd2lyLnB1bHNlID0gKChzYW1wbGUgJiBCVUZfUFVMU0VfQklUKSAhPSAwKTsKLQkJcmF3aXIuZHVyYXRpb24gPSAoc2FtcGxlICYgQlVGX0xFTl9NQVNLKQotCQkJCQkqIFNBTVBMRV9QRVJJT0QgKiAxMDAwOworCQlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKChzYW1wbGUgJiBCVUZfTEVOX01BU0spCisJCQkJCSAgKiBTQU1QTEVfUEVSSU9EKTsKIAogCQlpZiAoKHNhbXBsZSAmIEJVRl9MRU5fTUFTSykgPT0gQlVGX0xFTl9NQVNLKSB7CiAJCQlpZiAobnZ0LT5yYXdpci5wdWxzZSA9PSByYXdpci5wdWxzZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKaW5kZXggNzJiZThhMC4uNTEyYTJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKQEAgLTQ1OCwyMSArNDU4LDI3IEBACiAJCWluZGV4ID0gaXJfbG9va3VwX2J5X3NjYW5jb2RlKHJjX21hcCwgc2NhbmNvZGUpOwogCX0KIAotCWlmIChpbmRleCA+PSByY19tYXAtPmxlbikgewotCQlpZiAoIShrZS0+ZmxhZ3MgJiBJTlBVVF9LRVlNQVBfQllfSU5ERVgpKQotCQkJSVJfZHByaW50aygxLCAidW5rbm93biBrZXkgZm9yIHNjYW5jb2RlIDB4JTA0eFxuIiwKLQkJCQkgICBzY2FuY29kZSk7CisJaWYgKGluZGV4IDwgcmNfbWFwLT5sZW4pIHsKKwkJZW50cnkgPSAmcmNfbWFwLT5zY2FuW2luZGV4XTsKKworCQlrZS0+aW5kZXggPSBpbmRleDsKKwkJa2UtPmtleWNvZGUgPSBlbnRyeS0+a2V5Y29kZTsKKwkJa2UtPmxlbiA9IHNpemVvZihlbnRyeS0+c2NhbmNvZGUpOworCQltZW1jcHkoa2UtPnNjYW5jb2RlLCAmZW50cnktPnNjYW5jb2RlLCBzaXplb2YoZW50cnktPnNjYW5jb2RlKSk7CisKKwl9IGVsc2UgaWYgKCEoa2UtPmZsYWdzICYgSU5QVVRfS0VZTUFQX0JZX0lOREVYKSkgeworCQkvKgorCQkgKiBXZSBkbyBub3QgcmVhbGx5IGtub3cgdGhlIHZhbGlkIHJhbmdlIG9mIHNjYW5jb2RlcworCQkgKiBzbyBsZXQncyByZXNwb25kIHdpdGggS0VZX1JFU0VSVkVEIHRvIGFueXRoaW5nIHdlCisJCSAqIGRvIG5vdCBoYXZlIG1hcHBpbmcgZm9yIFt5ZXRdLgorCQkgKi8KKwkJa2UtPmluZGV4ID0gaW5kZXg7CisJCWtlLT5rZXljb2RlID0gS0VZX1JFU0VSVkVEOworCX0gZWxzZSB7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWVudHJ5ID0gJnJjX21hcC0+c2NhbltpbmRleF07Ci0KLQlrZS0+aW5kZXggPSBpbmRleDsKLQlrZS0+a2V5Y29kZSA9IGVudHJ5LT5rZXljb2RlOwotCWtlLT5sZW4gPSBzaXplb2YoZW50cnktPnNjYW5jb2RlKTsKLQltZW1jcHkoa2UtPnNjYW5jb2RlLCAmZW50cnktPnNjYW5jb2RlLCBzaXplb2YoZW50cnktPnNjYW5jb2RlKSk7Ci0KIAlyZXR2YWwgPSAwOwogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL3N0cmVhbXphcC5jIGIvZHJpdmVycy9tZWRpYS9yYy9zdHJlYW16YXAuYwppbmRleCA2ZTI5MTFjLi5lNDM1ZDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3N0cmVhbXphcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvc3RyZWFtemFwLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCQkJCXN6LT5zaWduYWxfc3RhcnQudHZfdXNlYyAtCiAJCQkJc3otPnNpZ25hbF9sYXN0LnR2X3VzZWMpOwogCQkJcmF3aXIuZHVyYXRpb24gLT0gc3otPnN1bTsKLQkJCXJhd2lyLmR1cmF0aW9uICo9IDEwMDA7CisJCQlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKHJhd2lyLmR1cmF0aW9uKTsKIAkJCXJhd2lyLmR1cmF0aW9uICY9IElSX01BWF9EVVJBVElPTjsKIAkJfQogCQlzel9wdXNoKHN6LCByYXdpcik7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAlyYXdpci5kdXJhdGlvbiA9ICgoaW50KSB2YWx1ZSkgKiBTWl9SRVNPTFVUSU9OOwogCXJhd2lyLmR1cmF0aW9uICs9IFNaX1JFU09MVVRJT04gLyAyOwogCXN6LT5zdW0gKz0gcmF3aXIuZHVyYXRpb247Ci0JcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKKwlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKHJhd2lyLmR1cmF0aW9uKTsKIAlyYXdpci5kdXJhdGlvbiAmPSBJUl9NQVhfRFVSQVRJT047CiAJc3pfcHVzaChzeiwgcmF3aXIpOwogfQpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJcmF3aXIuZHVyYXRpb24gPSAoKGludCkgdmFsdWUpICogU1pfUkVTT0xVVElPTjsKIAlyYXdpci5kdXJhdGlvbiArPSBTWl9SRVNPTFVUSU9OIC8gMjsKIAlzei0+c3VtICs9IHJhd2lyLmR1cmF0aW9uOwotCXJhd2lyLmR1cmF0aW9uICo9IDEwMDA7CisJcmF3aXIuZHVyYXRpb24gPSBVU19UT19OUyhyYXdpci5kdXJhdGlvbik7CiAJc3pfcHVzaChzeiwgcmF3aXIpOwogfQogCkBAIC0yNzMsNiArMjczLDcgQEAKIAkJCQlpZiAoc3otPnRpbWVvdXRfZW5hYmxlZCkKIAkJCQkJc3pfcHVzaChzeiwgcmF3aXIpOwogCQkJCWlyX3Jhd19ldmVudF9oYW5kbGUoc3otPnJkZXYpOworCQkJCWlyX3Jhd19ldmVudF9yZXNldChzei0+cmRldik7CiAJCQl9IGVsc2UgewogCQkJCXN6X3B1c2hfZnVsbF9zcGFjZShzeiwgc3otPmJ1Zl9pbltpXSk7CiAJCQl9CkBAIC0yOTAsNiArMjkxLDcgQEAKIAkJfQogCX0KIAorCWlyX3Jhd19ldmVudF9oYW5kbGUoc3otPnJkZXYpOwogCXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAKIAlyZXR1cm47CkBAIC00MzAsMTMgKzQzMiwxMyBAQAogCXN6LT5kZWNvZGVyX3N0YXRlID0gUHVsc2VTcGFjZTsKIAkvKiBGSVhNRTogZG9uJ3QgeWV0IGhhdmUgYSB3YXkgdG8gc2V0IHRoaXMgKi8KIAlzei0+dGltZW91dF9lbmFibGVkID0gdHJ1ZTsKLQlzei0+cmRldi0+dGltZW91dCA9ICgoKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OICogMTAwMCkgJgorCXN6LT5yZGV2LT50aW1lb3V0ID0gKChVU19UT19OUyhTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTikgJgogCQkJCUlSX01BWF9EVVJBVElPTikgfCAweDAzMDAwMDAwKTsKIAkjaWYgMAogCS8qIG5vdCB5ZXQgc3VwcG9ydGVkLCBkZXBlbmRzIG9uIHBhdGNoZXMgZnJvbSBtYXhpbSAqLwogCS8qIHNlZSBhbHNvOiBMSVJDX0dFVF9SRUNfUkVTT0xVVElPTiBhbmQgTElSQ19TRVRfUkVDX1RJTUVPVVQgKi8KLQlzei0+bWluX3RpbWVvdXQgPSBTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTiAqIDEwMDA7Ci0Jc3otPm1heF90aW1lb3V0ID0gU1pfVElNRU9VVCAqIFNaX1JFU09MVVRJT04gKiAxMDAwOworCXN6LT5taW5fdGltZW91dCA9IFVTX1RPX05TKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OKTsKKwlzei0+bWF4X3RpbWVvdXQgPSBVU19UT19OUyhTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTik7CiAJI2VuZGlmCiAKIAlkb19nZXR0aW1lb2ZkYXkoJnN6LT5zaWduYWxfc3RhcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCmluZGV4IDg2NTIxNmUuLjQ3MjM2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKQEAgLTU3OTMsNyArNTc5Myw3IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIC8qCQljYXNlIDB4ZGQ6CSAqIGRlbGF5ICovCi0JCQltc2xlZXAoYWN0aW9uLT52YWwgLyA2NCArIDEwKTsKKwkJCW1zbGVlcChhY3Rpb24tPmlkeCk7CiAJCQlicmVhazsKIAkJfQogCQlhY3Rpb24rKzsKQEAgLTU4MzAsNyArNTgzMCw3IEBACiAJCVtTRU5TT1JfR0MwMzA1XSA9CWdjMDMwNV9tYXRyaXgsCiAJCVtTRU5TT1JfSERDUzIwMjBiXSA9CU5VTEwsCiAJCVtTRU5TT1JfSFY3MTMxQl0gPQlOVUxMLAotCQlbU0VOU09SX0hWNzEzMVJdID0JTlVMTCwKKwkJW1NFTlNPUl9IVjcxMzFSXSA9CXBvMjAzMF9tYXRyaXgsCiAJCVtTRU5TT1JfSUNNMTA1QV0gPQlwbzIwMzBfbWF0cml4LAogCQlbU0VOU09SX01DNTAxQ0JdID0JTlVMTCwKIAkJW1NFTlNPUl9NVDlWMTExXzFdID0JZ2MwMzA1X21hdHJpeCwKQEAgLTU5MzYsNiArNTkzNiw3IEBACiAJY2FzZSBTRU5TT1JfQURDTTI3MDA6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX0hWNzEzMUI6CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAljYXNlIFNFTlNPUl9PVjc2MjA6CiAJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAljYXNlIFNFTlNPUl9QTzIwMzA6CkBAIC02MTA4LDExICs2MTA5LDEzIEBACiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgMHgwMDNiKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDNiKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDBjLCAweDAwM2EpOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MGIsIDB4MDAzOSk7Ci0JCXJlZ193KGdzcGNhX2RldiwgMHgwYiwgMHgwMDM4KTsKKwkJaWYgKHNlbnNvciA9PSBTRU5TT1JfUEFTMjAyQikKKwkJCXJlZ193KGdzcGNhX2RldiwgMHgwYiwgMHgwMDM4KTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtNjcwNCwxMCArNjcwNywxMyBAQAogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIDB4MDAzYik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwMDM4KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAljYXNlIFNFTlNPUl9QQVMyMDJCOgogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDMsIDB4MDAzYik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwYywgMHgwMDNhKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDBiLCAweDAwMzkpOworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfSFY3MTMxUikKKwkJCXJlZ193KGdzcGNhX2RldiwgMHg1MCwgWkMzWFhfUjExRF9HTE9CQUxHQUlOKTsKIAkJYnJlYWs7CiAJfQogCkBAIC02NzIwLDYgKzY3MjYsNyBAQAogCQlicmVhazsKIAljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX0dDMDMwNToKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX1RBUzUxMzBDOgogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwOCk7CiAJCS8qIGZhbGwgdGhydSAqLwpAQCAtNjc2MCw2ICs2NzY3LDEyIEBACiAJCQkJCQkvKiBtcy13aW4gKyAqLwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4NDAsIDB4MDExNyk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX0hWNzEzMVI6CisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MjUsIDB4MDQsIDB4MDApOwkvKiBleHBvc3VyZSAqLworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDI2LCAweDkzLCAweDAwKTsKKwkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgyNywgMHhlMCwgMHgwMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTik7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX0dDMDMwNToKIAljYXNlIFNFTlNPUl9UQVM1MTMwQzoKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwpAQCAtNjgwOCw5ICs2ODIxLDE3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZDgpIHsJLyogc3RhcnQgb2YgZnJhbWUgKi8KKwkvKiBjaGVjayB0aGUgSlBFRyBlbmQgb2YgZnJhbWUgKi8KKwlpZiAobGVuID49IDMKKwkgJiYgZGF0YVtsZW4gLSAzXSA9PSAweGZmICYmIGRhdGFbbGVuIC0gMl0gPT0gMHhkOSkgeworLypmaXhtZTogd2hhdCBkb2VzIHRoZSBsYXN0IGJ5dGUgbWVhbj8qLwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKLQkJCQkJTlVMTCwgMCk7CisJCQkJCWRhdGEsIGxlbiAtIDEpOworCQlyZXR1cm47CisJfQorCisJLyogY2hlY2sgdGhlIEpQRUcgc3RhcnQgb2YgYSBmcmFtZSAqLworCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVsxXSA9PSAweGQ4KSB7CiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCiAJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKaW5kZXggYTY1NzJlNS4uYTI3ZDkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKQEAgLTI4Myw2ICsyODMsNyBAQAogCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzaXplX3QgYnVmZmVyX3NpemU7CiAJaW50IGk7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CkBAIC0zODEsMTMgKzM4MiwyMSBAQAogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKIAlyZXR2YWwgPSBoZHB2cl9yZWdpc3Rlcl9pMmNfYWRhcHRlcihkZXYpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVnaXN0ZXJpbmcgaTJjIGFkYXB0ZXIgZmFpbGVkXG4iKTsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJpMmMgYWRhcHRlciByZWdpc3RlciBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXJldHZhbCA9IGhkcHZyX3JlZ2lzdGVyX2kyY19pcihkZXYpOwotCWlmIChyZXR2YWwgPCAwKQotCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgInJlZ2lzdGVyaW5nIGkyYyBJUiBkZXZpY2VzIGZhaWxlZFxuIik7CisJY2xpZW50ID0gaGRwdnJfcmVnaXN0ZXJfaXJfcnhfaTJjKGRldik7CisJaWYgKCFjbGllbnQpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJpMmMgSVIgUlggZGV2aWNlIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gcmVnX2ZhaWw7CisJfQorCisJY2xpZW50ID0gaGRwdnJfcmVnaXN0ZXJfaXJfdHhfaTJjKGRldik7CisJaWYgKCFjbGllbnQpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJpMmMgSVIgVFggZGV2aWNlIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gcmVnX2ZhaWw7CisJfQogI2VuZGlmCiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCkBAIC0zOTUsNiArNDA0LDEwIEBACiAJCSAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShkZXYtPnZpZGVvX2RldikpOwogCXJldHVybiAwOwogCityZWdfZmFpbDoKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwdGVyKTsKKyNlbmRpZgogZXJyb3I6CiAJaWYgKGRldikgewogCQkvKiBEZXN0cm95IHNpbmdsZSB0aHJlYWQgKi8KQEAgLTQyNCw2ICs0MzcsOSBAQAogCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOwogCWhkcHZyX2NhbmNlbF9xdWV1ZShkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfYWRhcHRlcigmZGV2LT5pMmNfYWRhcHRlcik7CisjZW5kaWYKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZpZGVvX2Rldik7CiAJYXRvbWljX2RlYygmZGV2X25yKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWkyYy5jCmluZGV4IDg5YjcxZmEuLmU1M2ZhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYwpAQCAtMzEsMjYgKzMxLDM0IEBACiAjZGVmaW5lIFo4RjA4MTFfSVJfUlhfSTJDX0FERFIJMHg3MQogCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaGRwdnJfaTJjX2JvYXJkX2luZm8gPSB7Ci0JSTJDX0JPQVJEX0lORk8oImlyX3R4X3o4ZjA4MTFfaGRwdnIiLCBaOEYwODExX0lSX1RYX0kyQ19BRERSKSwKLQlJMkNfQk9BUkRfSU5GTygiaXJfcnhfejhmMDgxMV9oZHB2ciIsIFo4RjA4MTFfSVJfUlhfSTJDX0FERFIpLAotfTsKLQotaW50IGhkcHZyX3JlZ2lzdGVyX2kyY19pcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCitzdHJ1Y3QgaTJjX2NsaWVudCAqaGRwdnJfcmVnaXN0ZXJfaXJfdHhfaTJjKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKIAlzdHJ1Y3QgSVJfaTJjX2luaXRfZGF0YSAqaW5pdF9kYXRhID0gJmRldi0+aXJfaTJjX2luaXRfZGF0YTsKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaGRwdnJfaXJfdHhfaTJjX2JvYXJkX2luZm8gPSB7CisJCUkyQ19CT0FSRF9JTkZPKCJpcl90eF96OGYwODExX2hkcHZyIiwgWjhGMDgxMV9JUl9UWF9JMkNfQUREUiksCisJfTsKKworCWluaXRfZGF0YS0+bmFtZSA9ICJIRC1QVlIiOworCWhkcHZyX2lyX3R4X2kyY19ib2FyZF9pbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CisKKwlyZXR1cm4gaTJjX25ld19kZXZpY2UoJmRldi0+aTJjX2FkYXB0ZXIsICZoZHB2cl9pcl90eF9pMmNfYm9hcmRfaW5mbyk7Cit9CisKK3N0cnVjdCBpMmNfY2xpZW50ICpoZHB2cl9yZWdpc3Rlcl9pcl9yeF9pMmMoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhICppbml0X2RhdGEgPSAmZGV2LT5pcl9pMmNfaW5pdF9kYXRhOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBoZHB2cl9pcl9yeF9pMmNfYm9hcmRfaW5mbyA9IHsKKwkJSTJDX0JPQVJEX0lORk8oImlyX3J4X3o4ZjA4MTFfaGRwdnIiLCBaOEYwODExX0lSX1JYX0kyQ19BRERSKSwKKwl9OwogCiAJLyogT3VyIGRlZmF1bHQgaW5mb3JtYXRpb24gZm9yIGlyLWtiZC1pMmMuYyB0byB1c2UgKi8KIAlpbml0X2RhdGEtPmlyX2NvZGVzID0gUkNfTUFQX0hBVVBQQVVHRV9ORVc7CiAJaW5pdF9kYXRhLT5pbnRlcm5hbF9nZXRfa2V5X2Z1bmMgPSBJUl9LQkRfR0VUX0tFWV9IQVVQX1hWUjsKIAlpbml0X2RhdGEtPnR5cGUgPSBSQ19UWVBFX1JDNTsKLQlpbml0X2RhdGEtPm5hbWUgPSAiSEQgUFZSIjsKLQloZHB2cl9pMmNfYm9hcmRfaW5mby5wbGF0Zm9ybV9kYXRhID0gaW5pdF9kYXRhOworCWluaXRfZGF0YS0+bmFtZSA9ICJIRC1QVlIiOworCWhkcHZyX2lyX3J4X2kyY19ib2FyZF9pbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CiAKLQljID0gaTJjX25ld19kZXZpY2UoJmRldi0+aTJjX2FkYXB0ZXIsICZoZHB2cl9pMmNfYm9hcmRfaW5mbyk7Ci0KLQlyZXR1cm4gKGMgPT0gTlVMTCkgPyAtRU5PREVWIDogMDsKKwlyZXR1cm4gaTJjX25ld19kZXZpY2UoJmRldi0+aTJjX2FkYXB0ZXIsICZoZHB2cl9pcl9yeF9pMmNfYm9hcmRfaW5mbyk7CiB9CiAKIHN0YXRpYyBpbnQgaGRwdnJfaTJjX3JlYWQoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCBpbnQgYnVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCmluZGV4IGVlNzRlM2IuLjA3MmYyM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKQEAgLTMxMyw3ICszMTMsOCBAQAogLyogaTJjIGFkYXB0ZXIgcmVnaXN0cmF0aW9uICovCiBpbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2FkYXB0ZXIoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKIAotaW50IGhkcHZyX3JlZ2lzdGVyX2kyY19pcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworc3RydWN0IGkyY19jbGllbnQgKmhkcHZyX3JlZ2lzdGVyX2lyX3J4X2kyYyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworc3RydWN0IGkyY19jbGllbnQgKmhkcHZyX3JlZ2lzdGVyX2lyX3R4X2kyYyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBidWZmZXIgbWFuYWdlbWVudCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwppbmRleCBkMmIyMGFkLi5hMjIxYWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwpAQCAtMTI4LDYgKzEyOCwxOSBAQAogCiBzdGF0aWMgaW50IGdldF9rZXlfaGF1cF94dnIoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKIHsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmWzFdID0geyAwIH07CisKKwkvKgorCSAqIFRoaXMgaXMgdGhlIHNhbWUgYXBwYXJlbnQgImFyZSB5b3UgcmVhZHk/IiBwb2xsIGNvbW1hbmQgb2JzZXJ2ZWQKKwkgKiB3YXRjaGluZyBXaW5kb3dzIGRyaXZlciB0cmFmZmljIGFuZCBpbXBsZW1lbnRlZCBpbiBsaXJjX3ppbG9nLiBXaXRoCisJICogdGhpcyBhZGRlZCwgd2UgZ2V0IGZhciBzYW5lciByZW1vdGUgYmVoYXZpb3Igd2l0aCB6OCBjaGlwcyBvbiB1c2IKKwkgKiBjb25uZWN0ZWQgZGV2aWNlcywgZXZlbiB3aXRoIHRoZSBkZWZhdWx0IHBvbGxpbmcgaW50ZXJ2YWwgb2YgMTAwbXMuCisJICovCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGlyLT5jLCBidWYsIDEpOworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IC1FSU5WQUw7CisKIAlyZXR1cm4gZ2V0X2tleV9oYXVwX2NvbW1vbiAoaXIsIGlyX2tleSwgaXJfcmF3LCA2LCAzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKaW5kZXggY2NjODg0OS4uNDUxZWNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCkBAIC01OTcsNyArNTk3LDYgQEAKIAkJaW5pdF9kYXRhLT5pbnRlcm5hbF9nZXRfa2V5X2Z1bmMgPSBJUl9LQkRfR0VUX0tFWV9IQVVQX1hWUjsKIAkJaW5pdF9kYXRhLT50eXBlICAgICAgICAgICAgICAgICAgPSBSQ19UWVBFX1JDNTsKIAkJaW5pdF9kYXRhLT5uYW1lICAgICAgICAgICAgICAgICAgPSBoZHctPmhkd19kZXNjLT5kZXNjcmlwdGlvbjsKLQkJaW5pdF9kYXRhLT5wb2xsaW5nX2ludGVydmFsICAgICAgPSAyNjA7IC8qIG1zIEZyb20gbGlyY196aWxvZyAqLwogCQkvKiBJUiBSZWNlaXZlciAqLwogCQlpbmZvLmFkZHIgICAgICAgICAgPSAweDcxOwogCQlpbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCmluZGV4IGYzNTQ1OWQuLjBkYjkwOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCkBAIC0xNTY1LDcgKzE1NjUsNyBAQAogCWNoaXBfaWQgPSBuYW1lWzVdOwogCiAJLyogQ2hlY2sgd2hldGhlciB0aGlzIGNoaXAgaXMgcGFydCBvZiB0aGUgc2FhNzExeCBzZXJpZXMgKi8KLQlpZiAobWVtY21wKG5hbWUsICIxZjcxMSIsIDUpKSB7CisJaWYgKG1lbWNtcChuYW1lICsgMSwgImY3MTEiLCA0KSkgewogCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoSUQgJXMpIGRvZXMgbm90IG1hdGNoIGEga25vd24gc2FhNzExeCBjaGlwLlxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBuYW1lKTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbWVtc3RpY2suYyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jCmluZGV4IGU5YTNlYWIuLjhjMWQ4NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jCkBAIC02MjEsNyArNjIxLDcgQEAKIHsKIAlpbnQgcmM7CiAKLQl3b3JrcXVldWUgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoImttZW1zdGljayIpOworCXdvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKCJrbWVtc3RpY2siKTsKIAlpZiAoIXdvcmtxdWV1ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKaW5kZXggZjcxZjIyOS4uMTczNWM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKQEAgLTc2LDggKzc2LDggQEAKICNkZWZpbmUgQ09QWVJJR0hUCSJDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCAiIE1PRFVMRUFVVEhPUgogI2VuZGlmCiAKLSNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjA0LjE3IgotI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDQuMTciCisjZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wNC4xOCIKKyNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjA0LjE4IgogI2RlZmluZSBXSEFUX01BR0lDX1NUUklORwkJIkAiICIoIiAiIyIgIikiCiAKICNkZWZpbmUgc2hvd19tcHRtb2RfdmVyKHMsdmVyKSAgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKaW5kZXggYTM4NTZlZC4uZThkZWI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCkBAIC01OTcsNiArNTk3LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQKK21wdGN0bF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKK3sKKwlmYXN5bmNfaGVscGVyKC0xLCBmaWxlcCwgMCwgJmFzeW5jX3F1ZXVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAogbXB0Y3RsX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IG1vZGUpCiB7CiAJTVBUX0FEQVBURVIJKmlvYzsKQEAgLTI4MTUsNiArMjgyMiw3IEBACiAJLmxsc2VlayA9CW5vX2xsc2VlaywKIAkuZmFzeW5jID0gCW1wdGN0bF9mYXN5bmMsCiAJLnVubG9ja2VkX2lvY3RsID0gbXB0Y3RsX2lvY3RsLAorCS5yZWxlYXNlID0JbXB0Y3RsX3JlbGVhc2UsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwgPSBjb21wYXRfbXBjdGxfaW9jdGwsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwppbmRleCA1OWI4ZjUzLi4wZDliODJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCkBAIC0xODczLDggKzE4NzMsOSBAQAogCX0KIAogIG91dDoKLQlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAidGFzayBhYm9ydDogJXMgKHNjPSVwKVxuIiwKLQkgICAgaW9jLT5uYW1lLCAoKHJldHZhbCA9PSBTVUNDRVNTKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSwgU0NwbnQpOworCXByaW50ayhNWUlPQ19zX0lORk9fRk1UICJ0YXNrIGFib3J0OiAlcyAocnY9JTA0eCkgKHNjPSVwKSAoc249JWxkKVxuIiwKKwkgICAgaW9jLT5uYW1lLCAoKHJldHZhbCA9PSBTVUNDRVNTKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSwgcmV0dmFsLAorCSAgICBTQ3BudCwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTE5MTEsNyArMTkxMiw3IEBACiAKIAl2ZGV2aWNlID0gU0NwbnQtPmRldmljZS0+aG9zdGRhdGE7CiAJaWYgKCF2ZGV2aWNlIHx8ICF2ZGV2aWNlLT52dGFyZ2V0KSB7Ci0JCXJldHZhbCA9IFNVQ0NFU1M7CisJCXJldHZhbCA9IDA7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYXNpYzMuYyBiL2RyaXZlcnMvbWZkL2FzaWMzLmMKaW5kZXggNmExZjk0MC4uYzQ1ZTYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYXNpYzMuYworKysgYi9kcml2ZXJzL21mZC9hc2ljMy5jCkBAIC0xNDMsOSArMTQzLDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhc2ljMyAqYXNpYzsKIAotCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9hY2soJmRlc2MtPmlycV9kYXRhKTsKIAotCWFzaWMgPSBkZXNjLT5oYW5kbGVyX2RhdGE7CisJYXNpYyA9IGdldF9pcnFfZGF0YShpcnEpOwogCiAJZm9yIChpdGVyID0gMCA7IGl0ZXIgPCBNQVhfQVNJQ19JU1JfTE9PUFM7IGl0ZXIrKykgewogCQl1MzIgc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvZGF2aW5jaV92b2ljZWNvZGVjLmMgYi9kcml2ZXJzL21mZC9kYXZpbmNpX3ZvaWNlY29kZWMuYwppbmRleCAzM2M5MjNkLi5mZGQ4YTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9kYXZpbmNpX3ZvaWNlY29kZWMuYworKysgYi9kcml2ZXJzL21mZC9kYXZpbmNpX3ZvaWNlY29kZWMuYwpAQCAtMTE4LDEyICsxMTgsMTIgQEAKIAogCS8qIFZvaWNlIGNvZGVjIGludGVyZmFjZSBjbGllbnQgKi8KIAljZWxsID0gJmRhdmluY2lfdmMtPmNlbGxzW0RBVklOQ0lfVkNfVkNJRl9DRUxMXTsKLQljZWxsLT5uYW1lID0gImRhdmluY2lfdmNpZiI7CisJY2VsbC0+bmFtZSA9ICJkYXZpbmNpLXZjaWYiOwogCWNlbGwtPmRyaXZlcl9kYXRhID0gZGF2aW5jaV92YzsKIAogCS8qIFZvaWNlIGNvZGVjIENROTNWQyBjbGllbnQgKi8KIAljZWxsID0gJmRhdmluY2lfdmMtPmNlbGxzW0RBVklOQ0lfVkNfQ1E5M1ZDX0NFTExdOwotCWNlbGwtPm5hbWUgPSAiY3E5M3ZjIjsKKwljZWxsLT5uYW1lID0gImNxOTN2Yy1jb2RlYyI7CiAJY2VsbC0+ZHJpdmVyX2RhdGEgPSBkYXZpbmNpX3ZjOwogCiAJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKCZwZGV2LT5kZXYsIHBkZXYtPmlkLCBkYXZpbmNpX3ZjLT5jZWxscywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RwczY1ODZ4LmMgYi9kcml2ZXJzL21mZC90cHM2NTg2eC5jCmluZGV4IDYyN2NmNTcuLmU5MDE4ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RwczY1ODZ4LmMKKysrIGIvZHJpdmVycy9tZmQvdHBzNjU4NnguYwpAQCAtMTUwLDEyICsxNTAsMTIgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9fdHBzNjU4Nnhfd3JpdGVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCByZWcsCiAJCQkJICBpbnQgbGVuLCB1aW50OF90ICp2YWwpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCi0JcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVnLCBsZW4sIHZhbCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgd3JpdGluZ3MgdG8gMHglMDJ4XG4iLCByZWcpOwotCQlyZXR1cm4gcmV0OworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlyZXQgPSBfX3RwczY1ODZ4X3dyaXRlKGNsaWVudCwgcmVnICsgaSwgKih2YWwgKyBpKSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYwppbmRleCAwMDBjYjQxLi45MmI4NWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxeDAwLXRzLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMXgwMC10cy5jCkBAIC0zODUsMTIgKzM4NSwxOCBAQAogCWlkZXYtPmNsb3NlICAgICAgPSB1Y2IxeDAwX3RzX2Nsb3NlOwogCiAJX19zZXRfYml0KEVWX0FCUywgaWRldi0+ZXZiaXQpOwotCV9fc2V0X2JpdChBQlNfWCwgaWRldi0+YWJzYml0KTsKLQlfX3NldF9iaXQoQUJTX1ksIGlkZXYtPmFic2JpdCk7Ci0JX19zZXRfYml0KEFCU19QUkVTU1VSRSwgaWRldi0+YWJzYml0KTsKIAogCWlucHV0X3NldF9kcnZkYXRhKGlkZXYsIHRzKTsKIAorCXVjYjF4MDBfYWRjX2VuYWJsZSh0cy0+dWNiKTsKKwl0cy0+eF9yZXMgPSB1Y2IxeDAwX3RzX3JlYWRfeHJlcyh0cyk7CisJdHMtPnlfcmVzID0gdWNiMXgwMF90c19yZWFkX3lyZXModHMpOworCXVjYjF4MDBfYWRjX2Rpc2FibGUodHMtPnVjYik7CisKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpZGV2LCBBQlNfWCwgMCwgdHMtPnhfcmVzLCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpZGV2LCBBQlNfWSwgMCwgdHMtPnlfcmVzLCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpZGV2LCBBQlNfUFJFU1NVUkUsIDAsIDAsIDAsIDApOworCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODk5NC1jb3JlLmMgYi9kcml2ZXJzL21mZC93bTg5OTQtY29yZS5jCmluZGV4IDQxMjMzYzcuLmY0MDE2YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODk5NC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvd204OTk0LWNvcmUuYwpAQCAtMjQ2LDYgKzI0NiwxNiBAQAogCXN0cnVjdCB3bTg5OTQgKndtODk5NCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQ7CiAKKwkvKiBEb24ndCBhY3R1YWxseSBnbyB0aHJvdWdoIHdpdGggdGhlIHN1c3BlbmQgaWYgdGhlIENPREVDIGlzCisJICogc3RpbGwgYWN0aXZlIChlZywgZm9yIGF1ZGlvIHBhc3N0aHJvdWdoIGZyb20gQ1AuICovCisJcmV0ID0gd204OTk0X3JlZ19yZWFkKHdtODk5NCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBwb3dlciBzdGF0dXM6ICVkXG4iLCByZXQpOworCX0gZWxzZSBpZiAocmV0ICYgV004OTk0X1ZNSURfU0VMX01BU0spIHsKKwkJZGV2X2RiZyhkZXYsICJDT0RFQyBzdGlsbCBhY3RpdmUsIGlnbm9yaW5nIHN1c3BlbmRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKiBHUElPIGNvbmZpZ3VyYXRpb24gc3RhdGUgaXMgc2F2ZWQgaGVyZSBzaW5jZSB3ZSBtYXkgYmUgY29uZmlndXJpbmcKIAkgKiB0aGUgR1BJTyBhbHRlcm5hdGUgZnVuY3Rpb25zIGV2ZW4gaWYgd2UncmUgbm90IHVzaW5nIHRoZSBncGlvbGliCiAJICogZHJpdmVyIGZvciB0aGVtLgpAQCAtMjYxLDYgKzI3MSw4IEBACiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHNhdmUgTERPIHJlZ2lzdGVyczogJWRcbiIsIHJldCk7CiAKKwl3bTg5OTQtPnN1c3BlbmRlZCA9IHRydWU7CisKIAlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKHdtODk5NC0+bnVtX3N1cHBsaWVzLAogCQkJCSAgICAgd204OTk0LT5zdXBwbGllcyk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC0yNzYsNiArMjg4LDEwIEBACiAJc3RydWN0IHdtODk5NCAqd204OTk0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldDsKIAorCS8qIFdlIG1heSBoYXZlIGxpZWQgdG8gdGhlIFBNIGNvcmUgYWJvdXQgc3VzcGVuZGluZyAqLworCWlmICghd204OTk0LT5zdXNwZW5kZWQpCisJCXJldHVybiAwOworCiAJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKHdtODk5NC0+bnVtX3N1cHBsaWVzLAogCQkJCSAgICB3bTg5OTQtPnN1cHBsaWVzKTsKIAlpZiAocmV0ICE9IDApIHsKQEAgLTI5OCw2ICszMTQsOCBAQAogCWlmIChyZXQgPCAwKQogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXN0b3JlIEdQSU8gcmVnaXN0ZXJzOiAlZFxuIiwgcmV0KTsKIAorCXdtODk5NC0+c3VzcGVuZGVkID0gZmFsc2U7CisKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2JtcDA4NS5jIGIvZHJpdmVycy9taXNjL2JtcDA4NS5jCmluZGV4IDYzZWU0YzEuLmI2ZTFjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9ibXAwODUuYworKysgYi9kcml2ZXJzL21pc2MvYm1wMDg1LmMKQEAgLTQ0OSw2ICs0NDksNyBAQAogCXsgImJtcDA4NSIsIDAgfSwKIAl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYm1wMDg1X2lkKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGJtcDA4NV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy90aWZtX2NvcmUuYyBiL2RyaXZlcnMvbWlzYy90aWZtX2NvcmUuYwppbmRleCA1ZjY4NTJkLi40NGQ0NDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvdGlmbV9jb3JlLmMKKysrIGIvZHJpdmVycy9taXNjL3RpZm1fY29yZS5jCkBAIC0zMjksNyArMzI5LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQl3b3JrcXVldWUgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoInRpZm0iKTsKKwl3b3JrcXVldWUgPSBjcmVhdGVfZnJlZXphYmxlX3dvcmtxdWV1ZSgidGlmbSIpOwogCWlmICghd29ya3F1ZXVlKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3Ztd19iYWxsb29uLmMgYi9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYwppbmRleCA0ZDJlYThlLi42ZGY1YTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYworKysgYi9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYwpAQCAtNzg1LDcgKzc4NSw3IEBACiAJaWYgKHg4Nl9oeXBlciAhPSAmeDg2X2h5cGVyX3Ztd2FyZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQl2bWJhbGxvb25fd3EgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoInZtbWVtY3RsIik7CisJdm1iYWxsb29uX3dxID0gY3JlYXRlX2ZyZWV6YWJsZV93b3JrcXVldWUoInZtbWVtY3RsIik7CiAJaWYgKCF2bWJhbGxvb25fd3EpIHsKIAkJcHJfZXJyKCJmYWlsZWQgdG8gY3JlYXRlIHdvcmtxdWV1ZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwppbmRleCA1YzRhNTRkLi5lYmM2MmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwpAQCAtNzkyLDcgKzc5Miw2IEBACiAJICovCiAJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKIAllcnIgPSBtbWNfYWRkX2NhcmQoaG9zdC0+Y2FyZCk7Ci0JbW1jX2NsYWltX2hvc3QoaG9zdCk7CiAJaWYgKGVycikKIAkJZ290byByZW1vdmVfYWRkZWQ7CiAKQEAgLTgwNSwxMiArODA0LDEyIEBACiAJCQlnb3RvIHJlbW92ZV9hZGRlZDsKIAl9CiAKKwltbWNfY2xhaW1faG9zdChob3N0KTsKIAlyZXR1cm4gMDsKIAogCiByZW1vdmVfYWRkZWQ6CiAJLyogUmVtb3ZlIHdpdGhvdXQgbG9jayBpZiB0aGUgZGV2aWNlIGhhcyBiZWVuIGFkZGVkLiAqLwotCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CiAJbW1jX3NkaW9fcmVtb3ZlKGhvc3QpOwogCW1tY19jbGFpbV9ob3N0KGhvc3QpOwogcmVtb3ZlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9iZmluX3NkaC5jIGIvZHJpdmVycy9tbWMvaG9zdC9iZmluX3NkaC5jCmluZGV4IGJhYzdkNjIuLjAzNzFiZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYmZpbl9zZGguYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2YoKm1tYyksICZwZGV2LT5kZXYpOworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3Qgc2RoX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIW1tYykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMKaW5kZXggYjNhMGFiMC4uNzQyMThhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtODI3LDggKzgyOCw4IEBACiAJfQogCiAJaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibW1jIik7Ci0JaWYgKCFob3N0LT5jbGspIHsKLQkJcmV0ID0gLUVOT0VOVDsKKwlpZiAoSVNfRVJSKGhvc3QtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihob3N0LT5jbGspOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IG1tYyBjbG9ja1xuIik7CiAJCWdvdG8gZXJyX2ZyZWVfaG9zdDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IDU2MzAyMjguLjJkNmRlM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CkBAIC00NiwxMCArNDcsNiBAQAogICoJICAgICAgaXMgYXNzZXJ0ZWQgKGxpa2V3aXNlIGZvciBSWCkKICAqIEBmaWZvaGFsZnNpemU6IG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSB3cml0dGVuIHdoZW4gTUNJX1RYRklGT0hBTEZFTVBUWQogICoJCSAgaXMgYXNzZXJ0ZWQgKGxpa2V3aXNlIGZvciBSWCkKLSAqIEBicm9rZW5fYmxvY2tlbmQ6IHRoZSBNQ0lfREFUQUJMT0NLRU5EIGlzIGJyb2tlbiBvbiB0aGUgaGFyZHdhcmUKLSAqCQlhbmQgd2lsbCBub3Qgd29yayBhdCBhbGwuCi0gKiBAYnJva2VuX2Jsb2NrZW5kX2RtYTogdGhlIE1DSV9EQVRBQkxPQ0tFTkQgaXMgYnJva2VuIG9uIHRoZSBoYXJkd2FyZSB3aGVuCi0gKgkJdXNpbmcgRE1BLgogICogQHNkaW86IHZhcmlhbnQgc3VwcG9ydHMgU0RJTwogICogQHN0X2Nsa2RpdjogdHJ1ZSBpZiB1c2luZyBhIFNULXNwZWNpZmljIGNsb2NrIGRpdmlkZXIgYWxnb3JpdGhtCiAgKi8KQEAgLTU5LDggKzU2LDYgQEAKIAl1bnNpZ25lZCBpbnQJCWRhdGFsZW5ndGhfYml0czsKIAl1bnNpZ25lZCBpbnQJCWZpZm9zaXplOwogCXVuc2lnbmVkIGludAkJZmlmb2hhbGZzaXplOwotCWJvb2wJCQlicm9rZW5fYmxvY2tlbmQ7Ci0JYm9vbAkJCWJyb2tlbl9ibG9ja2VuZF9kbWE7CiAJYm9vbAkJCXNkaW87CiAJYm9vbAkJCXN0X2Nsa2RpdjsKIH07CkBAIC03Niw3ICs3MSw2IEBACiAJLmZpZm9oYWxmc2l6ZQkJPSA4ICogNCwKIAkuY2xrcmVnX2VuYWJsZQkJPSAxIDw8IDEzLCAvKiBIV0ZDRU4gKi8KIAkuZGF0YWxlbmd0aF9iaXRzCT0gMTYsCi0JLmJyb2tlbl9ibG9ja2VuZF9kbWEJPSB0cnVlLAogCS5zZGlvCQkJPSB0cnVlLAogfTsKIApAQCAtODYsNyArODAsNiBAQAogCS5jbGtyZWcJCQk9IE1DSV9DTEtfRU5BQkxFLAogCS5jbGtyZWdfZW5hYmxlCQk9IDEgPDwgMTQsIC8qIEhXRkNFTiAqLwogCS5kYXRhbGVuZ3RoX2JpdHMJPSAyNCwKLQkuYnJva2VuX2Jsb2NrZW5kCT0gdHJ1ZSwKIAkuc2RpbwkJCT0gdHJ1ZSwKIAkuc3RfY2xrZGl2CQk9IHRydWUsCiB9OwpAQCAtMjEwLDggKzIwMyw2IEBACiAJaG9zdC0+ZGF0YSA9IGRhdGE7CiAJaG9zdC0+c2l6ZSA9IGRhdGEtPmJsa3N6ICogZGF0YS0+YmxvY2tzOwogCWhvc3QtPmRhdGFfeGZlcmVkID0gMDsKLQlob3N0LT5ibG9ja2VuZCA9IGZhbHNlOwotCWhvc3QtPmRhdGFlbmQgPSBmYWxzZTsKIAogCW1tY2lfaW5pdF9zZyhob3N0LCBkYXRhKTsKIApAQCAtMjg4LDIxICsyNzksMjYgQEAKIG1tY2lfZGF0YV9pcnEoc3RydWN0IG1tY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhLAogCSAgICAgIHVuc2lnbmVkIGludCBzdGF0dXMpCiB7Ci0Jc3RydWN0IHZhcmlhbnRfZGF0YSAqdmFyaWFudCA9IGhvc3QtPnZhcmlhbnQ7Ci0KIAkvKiBGaXJzdCBjaGVjayBmb3IgZXJyb3JzICovCiAJaWYgKHN0YXR1cyAmIChNQ0lfREFUQUNSQ0ZBSUx8TUNJX0RBVEFUSU1FT1VUfE1DSV9UWFVOREVSUlVOfE1DSV9SWE9WRVJSVU4pKSB7Ci0JCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiTUNJIEVSUk9SIElSUSAoc3RhdHVzICUwOHgpXG4iLCBzdGF0dXMpOwotCQlpZiAoc3RhdHVzICYgTUNJX0RBVEFDUkNGQUlMKQotCQkJZGF0YS0+ZXJyb3IgPSAtRUlMU0VROwotCQllbHNlIGlmIChzdGF0dXMgJiBNQ0lfREFUQVRJTUVPVVQpCi0JCQlkYXRhLT5lcnJvciA9IC1FVElNRURPVVQ7Ci0JCWVsc2UgaWYgKHN0YXR1cyAmIChNQ0lfVFhVTkRFUlJVTnxNQ0lfUlhPVkVSUlVOKSkKLQkJCWRhdGEtPmVycm9yID0gLUVJTzsKKwkJdTMyIHJlbWFpbiwgc3VjY2VzczsKIAotCQkvKiBGb3JjZS1jb21wbGV0ZSB0aGUgdHJhbnNhY3Rpb24gKi8KLQkJaG9zdC0+YmxvY2tlbmQgPSB0cnVlOwotCQlob3N0LT5kYXRhZW5kID0gdHJ1ZTsKKwkJLyogQ2FsY3VsYXRlIGhvdyBmYXIgd2UgYXJlIGludG8gdGhlIHRyYW5zZmVyICovCisJCXJlbWFpbiA9IHJlYWRsKGhvc3QtPmJhc2UgKyBNTUNJREFUQUNOVCk7CisJCXN1Y2Nlc3MgPSBkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrcyAtIHJlbWFpbjsKKworCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIk1DSSBFUlJPUiBJUlEgKHN0YXR1cyAlMDh4KVxuIiwgc3RhdHVzKTsKKwkJaWYgKHN0YXR1cyAmIE1DSV9EQVRBQ1JDRkFJTCkgeworCQkJLyogTGFzdCBibG9jayB3YXMgbm90IHN1Y2Nlc3NmdWwgKi8KKwkJCWhvc3QtPmRhdGFfeGZlcmVkID0gcm91bmRfZG93bihzdWNjZXNzIC0gMSwgZGF0YS0+Ymxrc3opOworCQkJZGF0YS0+ZXJyb3IgPSAtRUlMU0VROworCQl9IGVsc2UgaWYgKHN0YXR1cyAmIE1DSV9EQVRBVElNRU9VVCkgeworCQkJaG9zdC0+ZGF0YV94ZmVyZWQgPSByb3VuZF9kb3duKHN1Y2Nlc3MsIGRhdGEtPmJsa3N6KTsKKwkJCWRhdGEtPmVycm9yID0gLUVUSU1FRE9VVDsKKwkJfSBlbHNlIGlmIChzdGF0dXMgJiAoTUNJX1RYVU5ERVJSVU58TUNJX1JYT1ZFUlJVTikpIHsKKwkJCWhvc3QtPmRhdGFfeGZlcmVkID0gcm91bmRfZG93bihzdWNjZXNzLCBkYXRhLT5ibGtzeik7CisJCQlkYXRhLT5lcnJvciA9IC1FSU87CisJCX0KIAogCQkvKgogCQkgKiBXZSBoaXQgYW4gZXJyb3IgY29uZGl0aW9uLiAgRW5zdXJlIHRoYXQgYW55IGRhdGEKQEAgLTMyMSw2MSArMzE3LDE0IEBACiAJCX0KIAl9CiAKLQkvKgotCSAqIE9uIEFSTSB2YXJpYW50cyBpbiBQSU8gbW9kZSwgTUNJX0RBVEFCTE9DS0VORAotCSAqIGlzIGFsd2F5cyBzZW50IGZpcnN0LCBhbmQgd2UgaW5jcmVhc2UgdGhlCi0JICogdHJhbnNmZXJlZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHRoYXQgSVJRLiBUaGVuCi0JICogTUNJX0RBVEFFTkQgZm9sbG93cyBhbmQgd2UgY29uY2x1ZGUgdGhlIHRyYW5zYWN0aW9uLgotCSAqCi0JICogT24gdGhlIFV4NTAwIHNpbmdsZS1JUlEgdmFyaWFudCBNQ0lfREFUQUJMT0NLRU5ECi0JICogZG9lc24ndCBzZWVtIHRvIGltbWVkaWF0ZWx5IGNsZWFyIGZyb20gdGhlIHN0YXR1cywKLQkgKiBzbyB3ZSBjYW4ndCB1c2UgaXQga2VlcCBjb3VudCB3aGVuIG9ubHkgb25lIGlycSBpcwotCSAqIHVzZWQgYmVjYXVzZSB0aGUgaXJxIHdpbGwgaGl0IGZvciBvdGhlciByZWFzb25zLCBhbmQKLQkgKiB0aGVuIHRoZSBmbGFnIGlzIHN0aWxsIHVwLiBTbyB3ZSB1c2UgdGhlIE1DSV9EQVRBRU5ECi0JICogSVJRIGF0IHRoZSBlbmQgb2YgdGhlIGVudGlyZSB0cmFuc2ZlciBiZWNhdXNlCi0JICogTUNJX0RBVEFCTE9DS0VORCBpcyBicm9rZW4uCi0JICoKLQkgKiBJbiB0aGUgVTMwMCwgdGhlIElSUXMgY2FuIGFycml2ZSBvdXQtb2Ytb3JkZXIsCi0JICogZS5nLiBNQ0lfREFUQUJMT0NLRU5EIHNvbWV0aW1lcyBhcnJpdmVzIGFmdGVyIE1DSV9EQVRBRU5ELAotCSAqIHNvIGZvciB0aGlzIGNhc2Ugd2UgdXNlIHRoZSBmbGFncyAiYmxvY2tlbmQiIGFuZAotCSAqICJkYXRhZW5kIiB0byBtYWtlIHN1cmUgYm90aCBJUlFzIGhhdmUgYXJyaXZlZCBiZWZvcmUKLQkgKiBjb25jbHVkaW5nIHRoZSB0cmFuc2FjdGlvbi4gKFRoaXMgZG9lcyBub3QgYXBwbHkKLQkgKiB0byB0aGUgVXg1MDAgd2hpY2ggZG9lc24ndCBmaXJlIE1DSV9EQVRBQkxPQ0tFTkQKLQkgKiBhdCBhbGwuKSBJbiBETUEgbW9kZSBpdCBzdWZmZXJzIGZyb20gdGhlIHNhbWUgcHJvYmxlbQotCSAqIGFzIHRoZSBVeDUwMC4KLQkgKi8KLQlpZiAoc3RhdHVzICYgTUNJX0RBVEFCTE9DS0VORCkgewotCQkvKgotCQkgKiBKdXN0IGJlaW5nIGEgbGl0dGxlIG92ZXItY2F1dGlvdXMsIHdlIGRvIG5vdAotCQkgKiB1c2UgdGhpcyBwcm9ncmVzc2l2ZSB1cGRhdGUgaWYgdGhlIGhhcmR3YXJlIGJsb2NrZW5kCi0JCSAqIGZsYWcgaXMgdW5yZWxpYWJsZTogc2luY2UgaXQgY2FuIHN0YXkgaGlnaCBiZXR3ZWVuCi0JCSAqIElSUXMgaXQgd2lsbCBjb3JydXB0IHRoZSB0cmFuc2ZlciBjb3VudGVyLgotCQkgKi8KLQkJaWYgKCF2YXJpYW50LT5icm9rZW5fYmxvY2tlbmQpCi0JCQlob3N0LT5kYXRhX3hmZXJlZCArPSBkYXRhLT5ibGtzejsKLQkJaG9zdC0+YmxvY2tlbmQgPSB0cnVlOwotCX0KKwlpZiAoc3RhdHVzICYgTUNJX0RBVEFCTE9DS0VORCkKKwkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJzdHJheSBNQ0lfREFUQUJMT0NLRU5EIGludGVycnVwdFxuIik7CiAKLQlpZiAoc3RhdHVzICYgTUNJX0RBVEFFTkQpCi0JCWhvc3QtPmRhdGFlbmQgPSB0cnVlOwotCi0JLyoKLQkgKiBPbiB2YXJpYW50cyB3aXRoIGJyb2tlbiBibG9ja2VuZCB3ZSBzaGFsbCBvbmx5IHdhaXQgZm9yIGRhdGFlbmQsCi0JICogb24gb3RoZXJzIHdlIG11c3Qgc3luYyB3aXRoIHRoZSBibG9ja2VuZCBzaWduYWwgc2luY2UgdGhleSBjYW4KLQkgKiBhcHBlYXIgb3V0LW9mLW9yZGVyLgotCSAqLwotCWlmIChob3N0LT5kYXRhZW5kICYmIChob3N0LT5ibG9ja2VuZCB8fCB2YXJpYW50LT5icm9rZW5fYmxvY2tlbmQpKSB7CisJaWYgKHN0YXR1cyAmIE1DSV9EQVRBRU5EIHx8IGRhdGEtPmVycm9yKSB7CiAJCW1tY2lfc3RvcF9kYXRhKGhvc3QpOwogCi0JCS8qIFJlc2V0IHRoZXNlIGZsYWdzICovCi0JCWhvc3QtPmJsb2NrZW5kID0gZmFsc2U7Ci0JCWhvc3QtPmRhdGFlbmQgPSBmYWxzZTsKLQotCQkvKgotCQkgKiBWYXJpYW50cyB3aXRoIGJyb2tlbiBibG9ja2VuZCBmbGFncyBuZWVkIHRvIGhhbmRsZSB0aGUKLQkJICogZW5kIG9mIHRoZSBlbnRpcmUgdHJhbnNmZXIgaGVyZS4KLQkJICovCi0JCWlmICh2YXJpYW50LT5icm9rZW5fYmxvY2tlbmQgJiYgIWRhdGEtPmVycm9yKQorCQlpZiAoIWRhdGEtPmVycm9yKQorCQkJLyogVGhlIGVycm9yIGNsYXVzZSBpcyBoYW5kbGVkIGFib3ZlLCBzdWNjZXNzISAqLwogCQkJaG9zdC0+ZGF0YV94ZmVyZWQgKz0gZGF0YS0+Ymxrc3ogKiBkYXRhLT5ibG9ja3M7CiAKIAkJaWYgKCFkYXRhLT5zdG9wKSB7CkBAIC0zOTQsMTUgKzM0MywxNSBAQAogCiAJaG9zdC0+Y21kID0gTlVMTDsKIAotCWNtZC0+cmVzcFswXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UwKTsKLQljbWQtPnJlc3BbMV0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMSk7Ci0JY21kLT5yZXNwWzJdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTIpOwotCWNtZC0+cmVzcFszXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UzKTsKLQogCWlmIChzdGF0dXMgJiBNQ0lfQ01EVElNRU9VVCkgewogCQljbWQtPmVycm9yID0gLUVUSU1FRE9VVDsKIAl9IGVsc2UgaWYgKHN0YXR1cyAmIE1DSV9DTURDUkNGQUlMICYmIGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0NSQykgewogCQljbWQtPmVycm9yID0gLUVJTFNFUTsKKwl9IGVsc2UgeworCQljbWQtPnJlc3BbMF0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMCk7CisJCWNtZC0+cmVzcFsxXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UxKTsKKwkJY21kLT5yZXNwWzJdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTIpOworCQljbWQtPnJlc3BbM10gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMyk7CiAJfQogCiAJaWYgKCFjbWQtPmRhdGEgfHwgY21kLT5lcnJvcikgewpAQCAtNzcwLDcgKzcxOSw2IEBACiAJc3RydWN0IHZhcmlhbnRfZGF0YSAqdmFyaWFudCA9IGlkLT5kYXRhOwogCXN0cnVjdCBtbWNpX2hvc3QgKmhvc3Q7CiAJc3RydWN0IG1tY19ob3N0ICptbWM7Ci0JdW5zaWduZWQgaW50IG1hc2s7CiAJaW50IHJldDsKIAogCS8qIG11c3QgaGF2ZSBwbGF0Zm9ybSBkYXRhICovCkBAIC05NTEsMTIgKzg5OSw3IEBACiAJCQlnb3RvIGlycTBfZnJlZTsKIAl9CiAKLQltYXNrID0gTUNJX0lSUUVOQUJMRTsKLQkvKiBEb24ndCB1c2UgdGhlIGRhdGFibG9ja2VuZCBmbGFnIGlmIGl0J3MgYnJva2VuICovCi0JaWYgKHZhcmlhbnQtPmJyb2tlbl9ibG9ja2VuZCkKLQkJbWFzayAmPSB+TUNJX0RBVEFCTE9DS0VORDsKLQotCXdyaXRlbChtYXNrLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKKwl3cml0ZWwoTUNJX0lSUUVOQUJMRSwgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CiAKIAlhbWJhX3NldF9kcnZkYXRhKGRldiwgbW1jKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmggYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuaAppbmRleCBkZjA2ZjAxLi5jMWRmN2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuaApAQCAtMTM3LDcgKzEzNyw3IEBACiAjZGVmaW5lIE1DSV9JUlFFTkFCTEUJXAogCShNQ0lfQ01EQ1JDRkFJTE1BU0t8TUNJX0RBVEFDUkNGQUlMTUFTS3xNQ0lfQ01EVElNRU9VVE1BU0t8CVwKIAlNQ0lfREFUQVRJTUVPVVRNQVNLfE1DSV9UWFVOREVSUlVOTUFTS3xNQ0lfUlhPVkVSUlVOTUFTS3wJXAotCU1DSV9DTURSRVNQRU5ETUFTS3xNQ0lfQ01EU0VOVE1BU0t8TUNJX0RBVEFCTE9DS0VORE1BU0spCisJTUNJX0NNRFJFU1BFTkRNQVNLfE1DSV9DTURTRU5UTUFTSykKIAogLyogVGhlc2UgaW50ZXJydXB0cyBhcmUgZGlyZWN0ZWQgdG8gSVJRMSB3aGVuIHR3byBJUlEgbGluZXMgYXJlIGF2YWlsYWJsZSAqLwogI2RlZmluZSBNQ0lfSVJRMU1BU0sgXApAQCAtMTc3LDkgKzE3Nyw2IEBACiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CiAJdW5zaWduZWQgaW50CQlvbGRzdGF0OwogCi0JYm9vbAkJCWJsb2NrZW5kOwotCWJvb2wJCQlkYXRhZW5kOwotCiAJLyogcGlvIHN0dWZmICovCiAJc3RydWN0IHNnX21hcHBpbmdfaXRlcglzZ19taXRlcjsKIAl1bnNpZ25lZCBpbnQJCXNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKaW5kZXggNWRlY2ZkMC4uMTUzYWI5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYwpAQCAtMzgzLDE0ICszODMsMzAgQEAKIAlob3N0LT5jdXJyLnVzZXJfcGFnZXMgPSAwOwogCiAJYm94ID0gJm5jLT5jbWRbMF07Ci0JZm9yIChpID0gMDsgaSA8IGhvc3QtPmRtYS5udW1fZW50czsgaSsrKSB7CisKKwkvKiBsb2NhdGlvbiBvZiBjb21tYW5kIGJsb2NrIG11c3QgYmUgNjQgYml0IGFsaWduZWQgKi8KKwlCVUdfT04oaG9zdC0+ZG1hLmNtZF9idXNhZGRyICYgMHgwNyk7CisKKwluYy0+Y21kcHRyID0gKGhvc3QtPmRtYS5jbWRfYnVzYWRkciA+PiAzKSB8IENNRF9QVFJfTFA7CisJaG9zdC0+ZG1hLmhkci5jbWRwdHIgPSBETU9WX0NNRF9QVFJfTElTVCB8CisJCQkgICAgICAgRE1PVl9DTURfQUREUihob3N0LT5kbWEuY21kcHRyX2J1c2FkZHIpOworCWhvc3QtPmRtYS5oZHIuY29tcGxldGVfZnVuYyA9IG1zbXNkY2NfZG1hX2NvbXBsZXRlX2Z1bmM7CisKKwluID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGhvc3QtPmRtYS5zZywKKwkJCWhvc3QtPmRtYS5udW1fZW50cywgaG9zdC0+ZG1hLmRpcik7CisJaWYgKG4gPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gbWFwIGluIGFsbCBzZyBlbGVtZW50c1xuIiwKKwkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJaG9zdC0+ZG1hLnNnID0gTlVMTDsKKwkJaG9zdC0+ZG1hLm51bV9lbnRzID0gMDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yX2VhY2hfc2coaG9zdC0+ZG1hLnNnLCBzZywgbiwgaSkgeworCiAJCWJveC0+Y21kID0gQ01EX01PREVfQk9YOwogCi0JLyogSW5pdGlhbGl6ZSBzZyBkbWEgYWRkcmVzcyAqLwotCXNnLT5kbWFfYWRkcmVzcyA9IHBhZ2VfdG9fZG1hKG1tY19kZXYoaG9zdC0+bW1jKSwgc2dfcGFnZShzZykpCi0JCQkJKyBzZy0+b2Zmc2V0OwotCi0JaWYgKGkgPT0gKGhvc3QtPmRtYS5udW1fZW50cyAtIDEpKQorCQlpZiAoaSA9PSBuIC0gMSkKIAkJCWJveC0+Y21kIHw9IENNRF9MQzsKIAkJcm93cyA9IChzZ19kbWFfbGVuKHNnKSAlIE1DSV9GSUZPU0laRSkgPwogCQkJKHNnX2RtYV9sZW4oc2cpIC8gTUNJX0ZJRk9TSVpFKSArIDEgOgpAQCAtNDE4LDI3ICs0MzQsNiBAQAogCQkJYm94LT5jbWQgfD0gQ01EX0RTVF9DUkNJKGNyY2kpOwogCQl9CiAJCWJveCsrOwotCQlzZysrOwotCX0KLQotCS8qIGxvY2F0aW9uIG9mIGNvbW1hbmQgYmxvY2sgbXVzdCBiZSA2NCBiaXQgYWxpZ25lZCAqLwotCUJVR19PTihob3N0LT5kbWEuY21kX2J1c2FkZHIgJiAweDA3KTsKLQotCW5jLT5jbWRwdHIgPSAoaG9zdC0+ZG1hLmNtZF9idXNhZGRyID4+IDMpIHwgQ01EX1BUUl9MUDsKLQlob3N0LT5kbWEuaGRyLmNtZHB0ciA9IERNT1ZfQ01EX1BUUl9MSVNUIHwKLQkJCSAgICAgICBETU9WX0NNRF9BRERSKGhvc3QtPmRtYS5jbWRwdHJfYnVzYWRkcik7Ci0JaG9zdC0+ZG1hLmhkci5jb21wbGV0ZV9mdW5jID0gbXNtc2RjY19kbWFfY29tcGxldGVfZnVuYzsKLQotCW4gPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgaG9zdC0+ZG1hLnNnLAotCQkJaG9zdC0+ZG1hLm51bV9lbnRzLCBob3N0LT5kbWEuZGlyKTsKLS8qIGRzYiBpbnNpZGUgZG1hX21hcF9zZyB3aWxsIHdyaXRlIG5jIG91dCB0byBtZW0gYXMgd2VsbCAqLwotCi0JaWYgKG4gIT0gaG9zdC0+ZG1hLm51bV9lbnRzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuYWJsZSB0byBtYXAgaW4gYWxsIHNnIGVsZW1lbnRzXG4iLAotCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOwotCQlob3N0LT5kbWEuc2cgPSBOVUxMOwotCQlob3N0LT5kbWEubnVtX2VudHMgPSAwOwotCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEzMzEsOSArMTMyNiw2IEBACiAJaWYgKGhvc3QtPnRpbWVyLmZ1bmN0aW9uKQogCQlwcl9pbmZvKCIlczogUG9sbGluZyBzdGF0dXMgbW9kZSBlbmFibGVkXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7CiAKLSNpZiBCVVNDTEtfUFdSU0FWRQotCW1zbXNkY2NfZGlzYWJsZV9jbG9ja3MoaG9zdCwgMSk7Ci0jZW5kaWYKIAlyZXR1cm4gMDsKICBjbWRfaXJxX2ZyZWU6CiAJZnJlZV9pcnEoY21kX2lycXJlcy0+c3RhcnQsIGhvc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKaW5kZXggMTcyMDM1OC4uNTMwOWFiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCkBAIC0yNzcsMTAgKzI3Nyw0MyBAQAogCWhvc3QtPmNsb2NrID0gY2xvY2s7CiB9CiAKKy8qKgorICogc2RoY2lfczNjX3BsYXRmb3JtXzhiaXRfd2lkdGggLSBzdXBwb3J0IDhiaXQgYnVzd2lkdGgKKyAqIEBob3N0OiBUaGUgU0RIQ0kgaG9zdCBiZWluZyBxdWVyaWVkCisgKiBAd2lkdGg6IE1NQ19CVVNfV0lEVEhfIG1hY3JvIGZvciB0aGUgYnVzIHdpZHRoIGJlaW5nIHJlcXVlc3RlZAorICoKKyAqIFdlIGhhdmUgOC1iaXQgd2lkdGggc3VwcG9ydCBidXQgaXMgbm90IGEgdjMgY29udHJvbGxlci4KKyAqIFNvIHdlIGFkZCBwbGF0Zm9ybV84Yml0X3dpZHRoKCkgYW5kIHN1cHBvcnQgOGJpdCB3aWR0aC4KKyAqLworc3RhdGljIGludCBzZGhjaV9zM2NfcGxhdGZvcm1fOGJpdF93aWR0aChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHdpZHRoKQoreworCXU4IGN0cmw7CisKKwljdHJsID0gc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKworCXN3aXRjaCAod2lkdGgpIHsKKwljYXNlIE1NQ19CVVNfV0lEVEhfODoKKwkJY3RybCB8PSBTREhDSV9DVFJMXzhCSVRCVVM7CisJCWN0cmwgJj0gflNESENJX0NUUkxfNEJJVEJVUzsKKwkJYnJlYWs7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzQ6CisJCWN0cmwgfD0gU0RIQ0lfQ1RSTF80QklUQlVTOworCQljdHJsICY9IH5TREhDSV9DVFJMXzhCSVRCVVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXNkaGNpX3dyaXRlYihob3N0LCBjdHJsLCBTREhDSV9IT1NUX0NPTlRST0wpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2RoY2lfb3BzIHNkaGNpX3MzY19vcHMgPSB7CiAJLmdldF9tYXhfY2xvY2sJCT0gc2RoY2lfczNjX2dldF9tYXhfY2xrLAogCS5zZXRfY2xvY2sJCT0gc2RoY2lfczNjX3NldF9jbG9jaywKIAkuZ2V0X21pbl9jbG9jawkJPSBzZGhjaV9zM2NfZ2V0X21pbl9jbG9jaywKKwkucGxhdGZvcm1fOGJpdF93aWR0aAk9IHNkaGNpX3MzY19wbGF0Zm9ybV84Yml0X3dpZHRoLAogfTsKIAogc3RhdGljIHZvaWQgc2RoY2lfczNjX25vdGlmeV9jaGFuZ2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgc3RhdGUpCkBAIC00NzMsNiArNTA2LDkgQEAKIAlpZiAocGRhdGEtPmNkX3R5cGUgPT0gUzNDX1NESENJX0NEX1BFUk1BTkVOVCkKIAkJaG9zdC0+bW1jLT5jYXBzID0gTU1DX0NBUF9OT05SRU1PVkFCTEU7CiAKKwlpZiAocGRhdGEtPmhvc3RfY2FwcykKKwkJaG9zdC0+bW1jLT5jYXBzIHw9IHBkYXRhLT5ob3N0X2NhcHM7CisKIAlob3N0LT5xdWlya3MgfD0gKFNESENJX1FVSVJLXzMyQklUX0RNQV9BRERSIHwKIAkJCSBTREhDSV9RVUlSS18zMkJJVF9ETUFfU0laRSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdXNoYy5jIGIvZHJpdmVycy9tbWMvaG9zdC91c2hjLmMKaW5kZXggZjhmNjVkZi4uZjA4Zjk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC91c2hjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC91c2hjLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yODUyLmMgYi9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYwppbmRleCBkOWQ3ZWZiLi42MzIyZDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYwpAQCAtOTMwLDcgKzkzMCw3IEBACiAKIAlpbml0X2NvbXBsZXRpb24oJmRldi0+ZG1hX2RvbmUpOwogCi0JZGV2LT5jYXJkX3dvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZShEUlZfTkFNRSk7CisJZGV2LT5jYXJkX3dvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKIAogCWlmICghZGV2LT5jYXJkX3dvcmtxdWV1ZSkKIAkJZ290byBlcnJvcjk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9zbV9mdGwuYyBiL2RyaXZlcnMvbXRkL3NtX2Z0bC5jCmluZGV4IDY3ODIyY2YuLmFjMGQ2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3NtX2Z0bC5jCisrKyBiL2RyaXZlcnMvbXRkL3NtX2Z0bC5jCkBAIC0xMjU4LDcgKzEyNTgsNyBAQAogc3RhdGljIF9faW5pdCBpbnQgc21fbW9kdWxlX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwotCWNhY2hlX2ZsdXNoX3dvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgic21mbHVzaCIpOworCWNhY2hlX2ZsdXNoX3dvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKCJzbWZsdXNoIik7CiAKIAlpZiAoSVNfRVJSKGNhY2hlX2ZsdXNoX3dvcmtxdWV1ZSkpCiAJCXJldHVybiBQVFJfRVJSKGNhY2hlX2ZsdXNoX3dvcmtxdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvYnVpbGQuYyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCmluZGV4IGY0OWU0OWQuLjVlYmUyODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCkBAIC02NzIsMzMgKzY3Miw3IEBACiAJCXViaS0+bm9yX2ZsYXNoID0gMTsKIAl9CiAKLQkvKgotCSAqIFNldCBVQkkgbWluLiBJL08gc2l6ZSAoQHViaS0+bWluX2lvX3NpemUpLiBXZSB1c2UgQG10ZC0+d3JpdGVidWZzaXplCi0JICogZm9yIHRoZXNlIHB1cnBvc2VzLCBub3QgQG10ZC0+d3JpdGVzaXplLiBBdCB0aGUgbW9tZW50IHRoaXMgZG9lcyBub3QKLQkgKiBtYXR0ZXIgZm9yIE5BTkQsIGJlY2F1c2UgY3VycmVudGx5IEBtdGQtPndyaXRlYnVmc2l6ZSBpcyBlcXVpdmFsZW50IHRvCi0JICogQG10ZC0+d3JpdGVzaXplIGZvciBhbGwgTkFORHMuIEhvd2V2ZXIsIHNvbWUgQ0ZJIE5PUiBmbGFzaGVzIG1heQotCSAqIGhhdmUgQG10ZC0+d3JpdGVidWZzaXplIHdoaWNoIGlzIG11bHRpcGxlIG9mIEBtdGQtPndyaXRlc2l6ZS4KLQkgKgotCSAqIFRoZSByZWFzb24gd2UgdXNlIEBtdGQtPndyaXRlYnVmc2l6ZSBmb3IgQHViaS0+bWluX2lvX3NpemUgaXMgdGhhdAotCSAqIFVCSSBhbmQgVUJJRlMgcmVjb3ZlcnkgYWxnb3JpdGhtcyByZWx5IG9uIHRoZSBmYWN0IHRoYXQgaWYgdGhlcmUgd2FzCi0JICogYW4gdW5jbGVhbiBwb3dlciBjdXQsIHRoZW4gd2UgY2FuIGZpbmQgb2Zmc2V0IG9mIHRoZSBsYXN0IGNvcnJ1cHRlZAotCSAqIG5vZGUsIGFsaWduIHRoZSBvZmZzZXQgdG8gQHViaS0+bWluX2lvX3NpemUsIHJlYWQgdGhlIHJlc3Qgb2YgdGhlCi0JICogZXJhc2VibG9jayBzdGFydGluZyBmcm9tIHRoaXMgb2Zmc2V0LCBhbmQgY2hlY2sgd2hldGhlciB0aGVyZSBhcmUKLQkgKiBvbmx5IDB4RkYgYnl0ZXMuIElmIHllcywgdGhlbiB3ZSBhcmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGEKLQkgKiBjb3JydXB0aW9uIGNhdXNlZCBieSBhIHBvd2VyIGN1dCwgaWYgbm90LCB0aGVuIHRoaXMgaXMgcHJvYmFibHkgc29tZQotCSAqIHNldmVyZSBjb3JydXB0aW9uLgotCSAqCi0JICogVGh1cywgd2UgaGF2ZSB0byB1c2UgdGhlIG1heGltdW0gd3JpdGUgdW5pdCBzaXplIG9mIHRoZSBmbGFzaCwgd2hpY2gKLQkgKiBpcyBAbXRkLT53cml0ZWJ1ZnNpemUsIGJlY2F1c2UgQG10ZC0+d3JpdGVzaXplIGlzIHRoZSBtaW5pbXVtIHdyaXRlCi0JICogc2l6ZSwgbm90IHRoZSBtYXhpbXVtLgotCSAqLwotCWlmICh1YmktPm10ZC0+dHlwZSA9PSBNVERfTkFOREZMQVNIKQotCQl1YmlfYXNzZXJ0KHViaS0+bXRkLT53cml0ZWJ1ZnNpemUgPT0gdWJpLT5tdGQtPndyaXRlc2l6ZSk7Ci0JZWxzZSBpZiAodWJpLT5tdGQtPnR5cGUgPT0gTVREX05PUkZMQVNIKQotCQl1YmlfYXNzZXJ0KHViaS0+bXRkLT53cml0ZWJ1ZnNpemUgJSB1YmktPm10ZC0+d3JpdGVzaXplID09IDApOwotCi0JdWJpLT5taW5faW9fc2l6ZSA9IHViaS0+bXRkLT53cml0ZWJ1ZnNpemU7Ci0KKwl1YmktPm1pbl9pb19zaXplID0gdWJpLT5tdGQtPndyaXRlc2l6ZTsKIAl1YmktPmhkcnNfbWluX2lvX3NpemUgPSB1YmktPm10ZC0+d3JpdGVzaXplID4+IHViaS0+bXRkLT5zdWJwYWdlX3NmdDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKaW5kZXggNjJkNmY4OC4uYWEwNzY1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwpAQCAtMTY0NCw3ICsxNjQ0LDcgQEAKIG1vZHVsZV9pbml0KGtzODY5NV9pbml0KTsKIG1vZHVsZV9leGl0KGtzODY5NV9jbGVhbnVwKTsKIAotTU9EVUxFX0FVVEhPUigiU2ltdGVjIEVsZWN0cm9uaWNzIikKK01PRFVMRV9BVVRIT1IoIlNpbXRlYyBFbGVjdHJvbmljcyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWNyZWwgS1M4Njk1IChDZW50YXVyKSBFdGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06IiBNT0RVTEVOQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwppbmRleCBhNjk5YmJmLi4zODI0MzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCkBAIC00OCw2ICs0OCw3IEBACiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wyQ19CKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wyQ19CMil9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19MMUQpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDFEXzJfMCl9LAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7IDAgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwppbmRleCAwYzc4MTFmLi5hMTc5Y2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCkBAIC0xNzg2LDYgKzE3ODYsMTAgQEAKIAlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKIAogCXdyYiA9IHdyYl9mcm9tX21jY3EoYWRhcHRlcik7CisJaWYgKCF3cmIpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGVycjsKKwl9CiAJcmVxID0gbm9uZW1iX2NtZC0+dmE7CiAJc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CiAKQEAgLTE4MDEsNiArMTgwNSw3IEBACiAKIAlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQoYWRhcHRlcik7CiAKK2VycjoKIAlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKaW5kZXggZGU0MGQzYi4uMjhhMzJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwpAQCAtMzEyLDExICszMTIsOSBAQAogCWlmIChhZGFwdGVyLT5saW5rX3VwICE9IGxpbmtfdXApIHsKIAkJYWRhcHRlci0+bGlua19zcGVlZCA9IC0xOwogCQlpZiAobGlua191cCkgewotCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMaW5rIHVwXG4iLCBuZXRkZXYtPm5hbWUpOwogCQl9IGVsc2UgewotCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMaW5rIGRvd25cbiIsIG5ldGRldi0+bmFtZSk7CiAJCX0KQEAgLTI2MjgsOCArMjYyNiw2IEBACiAKIAluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZhZGFwdGVyLT50eF9lcS5uYXBpLCBiZV9wb2xsX3R4X21jYywKIAkJQkVfTkFQSV9XRUlHSFQpOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBiZV91bm1hcF9wY2lfYmFycyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCBkZjk5ZWRmLi4wYmE1OWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmMKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5jCkBAIC03NTUzLDYgKzc1NTMsMTAgQEAKIAkgICAgIShkYXRhICYgRVRIX0ZMQUdfUlhWTEFOKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBUU08gd2l0aCBWTEFOIHRhZyB3b24ndCB3b3JrIHdpdGggY3VycmVudCBmaXJtd2FyZSAqLworCWlmICghKGRhdGEgJiBFVEhfRkxBR19UWFZMQU4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJjID0gZXRodG9vbF9vcF9zZXRfZmxhZ3MoZGV2LCBkYXRhLCBFVEhfRkxBR19SWEhBU0ggfCBFVEhfRkxBR19SWFZMQU4gfAogCQkJCSAgRVRIX0ZMQUdfVFhWTEFOKTsKIAlpZiAocmMpCkBAIC03OTYyLDExICs3OTY2LDggQEAKIAogCQkvKiBBRVIgKEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZykgaG9va3MgKi8KIAkJZXJyID0gcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKLQkJaWYgKGVycikgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyAiCi0JCQkJCSAgICAiZmFpbGVkIDB4JXhcbiIsIGVycik7Ci0JCQkvKiBub24tZmF0YWwsIGNvbnRpbnVlICovCi0JCX0KKwkJaWYgKCFlcnIpCisJCQlicC0+ZmxhZ3MgfD0gQk5YMl9GTEFHX0FFUl9FTkFCTEVEOwogCiAJfSBlbHNlIHsKIAkJYnAtPnBjaXhfY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1BDSVgpOwpAQCAtODIyOSw4ICs4MjMwLDEwIEBACiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfdW5tYXA6Ci0JaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19QQ0lFKQorCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfQUVSX0VOQUJMRUQpIHsKIAkJcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CisJCWJwLT5mbGFncyAmPSB+Qk5YMl9GTEFHX0FFUl9FTkFCTEVEOworCX0KIAogCWlmIChicC0+cmVndmlldykgewogCQlpb3VubWFwKGJwLT5yZWd2aWV3KTsKQEAgLTg0MTgsOCArODQyMSwxMCBAQAogCiAJa2ZyZWUoYnAtPnRlbXBfc3RhdHNfYmxrKTsKIAotCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfUENJRSkKKwlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX0FFUl9FTkFCTEVEKSB7CiAJCXBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOworCQlicC0+ZmxhZ3MgJj0gfkJOWDJfRkxBR19BRVJfRU5BQkxFRDsKKwl9CiAKIAlmcmVlX25ldGRldihkZXYpOwogCkBAIC04NTM1LDcgKzg1NDAsNyBAQAogCX0KIAlydG5sX3VubG9jaygpOwogCi0JaWYgKCEoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1BDSUUpKQorCWlmICghKGJwLT5mbGFncyAmIEJOWDJfRkxBR19BRVJfRU5BQkxFRCkpCiAJCXJldHVybiByZXN1bHQ7CiAKIAllcnIgPSBwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyhwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuaCBiL2RyaXZlcnMvbmV0L2JueDIuaAppbmRleCA1NDg4YTJlOC4uZjQ1OWZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuaApAQCAtNjc0MSw2ICs2NzQxLDcgQEAKICNkZWZpbmUgQk5YMl9GTEFHX0pVTUJPX0JST0tFTgkJMHgwMDAwMDgwMAogI2RlZmluZSBCTlgyX0ZMQUdfQ0FOX0tFRVBfVkxBTgkJMHgwMDAwMTAwMAogI2RlZmluZSBCTlgyX0ZMQUdfQlJPS0VOX1NUQVRTCQkweDAwMDAyMDAwCisjZGVmaW5lIEJOWDJfRkxBR19BRVJfRU5BQkxFRAkJMHgwMDAwNDAwMAogCiAJc3RydWN0IGJueDJfbmFwaQlibngyX25hcGlbQk5YMl9NQVhfTVNJWF9WRUNdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnguaAppbmRleCA4ZTQxODM3Li43ODk3ZDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmgKQEAgLTIyLDggKzIyLDggQEAKICAqICh5b3Ugd2lsbCBuZWVkIHRvIHJlYm9vdCBhZnRlcndhcmRzKSAqLwogLyogI2RlZmluZSBCTlgyWF9TVE9QX09OX0VSUk9SICovCiAKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OICAgICAgIjEuNjIuMDAtNCIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFICAgICAgIjIwMTEvMDEvMTgiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAgICAgICIxLjYyLjAwLTYiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURSAgICAgICIyMDExLzAxLzMwIgogI2RlZmluZSBCTlgyWF9CQ19WRVIgICAgICAgICAgICAweDA0MDIwMAogCiAjZGVmaW5lIEJOWDJYX01VTFRJX1FVRVVFCkBAIC0xNjEzLDE5ICsxNjEzLDIzIEBACiAjZGVmaW5lIEJOWDJYX0JUUgkJCTQKICNkZWZpbmUgTUFYX1NQUV9QRU5ESU5HCQkJOAogCi0KLS8qIENNTkcgY29uc3RhbnRzCi0gICBkZXJpdmVkIGZyb20gbGFiIGV4cGVyaW1lbnRzLCBhbmQgbm90IGZyb20gc3lzdGVtIHNwZWMgY2FsY3VsYXRpb25zICEhISAqLwotI2RlZmluZSBERUZfTUlOX1JBVEUJCQkxMDAKKy8qIENNTkcgY29uc3RhbnRzLCBhcyBkZXJpdmVkIGZyb20gc3lzdGVtIHNwZWMgY2FsY3VsYXRpb25zICovCisvKiBkZWZhdWx0IE1JTiByYXRlIGluIGNhc2UgVk5JQyBtaW4gcmF0ZSBpcyBjb25maWd1cmVkIHRvIHplcm8gLSAxMDBNYnBzICovCisjZGVmaW5lIERFRl9NSU5fUkFURQkJCQkJMTAwCiAvKiByZXNvbHV0aW9uIG9mIHRoZSByYXRlIHNoYXBpbmcgdGltZXIgLSAxMDAgdXNlYyAqLwotI2RlZmluZSBSU19QRVJJT0RJQ19USU1FT1VUX1VTRUMJMTAwCi0vKiByZXNvbHV0aW9uIG9mIGZhaXJuZXNzIGFsZ29yaXRobSBpbiB1c2VjcyAtCi0gICBjb2VmZmljaWVudCBmb3IgY2FsY3VsYXRpbmcgdGhlIGFjdHVhbCB0IGZhaXIgKi8KLSNkZWZpbmUgVF9GQUlSX0NPRUYJCQkxMDAwMDAwMAorI2RlZmluZSBSU19QRVJJT0RJQ19USU1FT1VUX1VTRUMJCQkxMDAKIC8qIG51bWJlciBvZiBieXRlcyBpbiBzaW5nbGUgUU0gYXJiaXRyYXRpb24gY3ljbGUgLQotICAgY29lZmZpY2llbnQgZm9yIGNhbGN1bGF0aW5nIHRoZSBmYWlybmVzcyB0aW1lciAqLwotI2RlZmluZSBRTV9BUkJfQllURVMJCQk0MDAwMAotI2RlZmluZSBGQUlSX01FTQkJCTIKKyAqIGNvZWZmaWNpZW50IGZvciBjYWxjdWxhdGluZyB0aGUgZmFpcm5lc3MgdGltZXIgKi8KKyNkZWZpbmUgUU1fQVJCX0JZVEVTCQkJCQkxNjAwMDAKKy8qIHJlc29sdXRpb24gb2YgTWluIGFsZ29yaXRobSAxOjEwMCAqLworI2RlZmluZSBNSU5fUkVTCQkJCQkJMTAwCisvKiBob3cgbWFueSBieXRlcyBhYm92ZSB0aHJlc2hvbGQgZm9yIHRoZSBtaW5pbWFsIGNyZWRpdCBvZiBNaW4gYWxnb3JpdGhtKi8KKyNkZWZpbmUgTUlOX0FCT1ZFX1RIUkVTSAkJCQkzMjc2OAorLyogRmFpcm5lc3MgYWxnb3JpdGhtIGludGVncmF0aW9uIHRpbWUgY29lZmZpY2llbnQgLQorICogZm9yIGNhbGN1bGF0aW5nIHRoZSBhY3R1YWwgVGZhaXIgKi8KKyNkZWZpbmUgVF9GQUlSX0NPRUYJKChNSU5fQUJPVkVfVEhSRVNIICsgIFFNX0FSQl9CWVRFUykgKiA4ICogTUlOX1JFUykKKy8qIE1lbW9yeSBvZiBmYWlybmVzcyBhbGdvcml0aG0gLiAyIGN5Y2xlcyAqLworI2RlZmluZSBGQUlSX01FTQkJCQkJMgogCiAKICNkZWZpbmUgQVRUTl9OSUdfRk9SX0ZVTkMJCSgxTCA8PCA4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uYwppbmRleCA3MTBjZTVkLi45Mzc5ODEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uYwpAQCAtMjU5LDEwICsyNTksNDQgQEAKICNlbmRpZgogfQogCisvKiBUaW1lc3RhbXAgb3B0aW9uIGxlbmd0aCBhbGxvd2VkIGZvciBUUEEgYWdncmVnYXRpb246CisgKgorICoJCW5vcCBub3Aga2luZCBsZW5ndGggZWNobyB2YWwKKyAqLworI2RlZmluZSBUUEFfVFNUQU1QX09QVF9MRU4JMTIKKy8qKgorICogQ2FsY3VsYXRlIHRoZSBhcHByb3hpbWF0ZSB2YWx1ZSBvZiB0aGUgTVNTIGZvciB0aGlzCisgKiBhZ2dyZWdhdGlvbiB1c2luZyB0aGUgZmlyc3QgcGFja2V0IG9mIGl0LgorICoKKyAqIEBwYXJhbSBicAorICogQHBhcmFtIHBhcnNpbmdfZmxhZ3MgUGFyc2luZyBmbGFncyBmcm9tIHRoZSBTVEFSVCBDUUUKKyAqIEBwYXJhbSBsZW5fb25fYmQgVG90YWwgbGVuZ3RoIG9mIHRoZSBmaXJzdCBwYWNrZXQgZm9yIHRoZQorICoJCSAgICAgYWdncmVnYXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdTE2IGJueDJ4X3NldF9scm9fbXNzKHN0cnVjdCBibngyeCAqYnAsIHUxNiBwYXJzaW5nX2ZsYWdzLAorCQkJCSAgICB1MTYgbGVuX29uX2JkKQoreworCS8qIFRQQSBhcnJncmVnYXRpb24gd29uJ3QgaGF2ZSBhbiBJUCBvcHRpb25zIGFuZCBUQ1Agb3B0aW9ucworCSAqIG90aGVyIHRoYW4gdGltZXN0YW1wLgorCSAqLworCXUxNiBoZHJzX2xlbiA9IEVUSF9ITEVOICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7CisKKworCS8qIENoZWNrIGlmIHRoZXJlIHdhcyBhIFRDUCB0aW1lc3RhbXAsIGlmIHRoZXJlIGlzIGl0J3Mgd2lsbAorCSAqIGFsd2F5cyBiZSAxMiBieXRlcyBsZW5ndGg6IG5vcCBub3Aga2luZCBsZW5ndGggZWNobyB2YWwuCisJICoKKwkgKiBPdGhlcndpc2UgRlcgd291bGQgY2xvc2UgdGhlIGFnZ3JlZ2F0aW9uLgorCSAqLworCWlmIChwYXJzaW5nX2ZsYWdzICYgUEFSU0lOR19GTEFHU19USU1FX1NUQU1QX0VYSVNUX0ZMQUcpCisJCWhkcnNfbGVuICs9IFRQQV9UU1RBTVBfT1BUX0xFTjsKKworCXJldHVybiBsZW5fb25fYmQgLSBoZHJzX2xlbjsKK30KKwogc3RhdGljIGludCBibngyeF9maWxsX2ZyYWdfc2tiKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCiAJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBzdHJ1Y3QgZXRoX2Zhc3RfcGF0aF9yeF9jcWUgKmZwX2NxZSwKLQkJCSAgICAgICB1MTYgY3FlX2lkeCkKKwkJCSAgICAgICB1MTYgY3FlX2lkeCwgdTE2IHBhcnNpbmdfZmxhZ3MpCiB7CiAJc3RydWN0IHN3X3J4X3BhZ2UgKnJ4X3BnLCBvbGRfcnhfcGc7CiAJdTE2IGxlbl9vbl9iZCA9IGxlMTZfdG9fY3B1KGZwX2NxZS0+bGVuX29uX2JkKTsKQEAgLTI3NSw4ICszMDksOCBAQAogCiAJLyogVGhpcyBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gZW5hYmxlIGZvcndhcmRpbmcgc3VwcG9ydCAqLwogCWlmIChmcmFnX3NpemUpCi0JCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSBtaW4oKHUzMilTR0VfUEFHRV9TSVpFLAotCQkJCQkgICAgICAgbWF4KGZyYWdfc2l6ZSwgKHUzMilsZW5fb25fYmQpKTsKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IGJueDJ4X3NldF9scm9fbXNzKGJwLCBwYXJzaW5nX2ZsYWdzLAorCQkJCQkJCSAgICAgIGxlbl9vbl9iZCk7CiAKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiAJaWYgKHBhZ2VzID4gbWluX3QodTMyLCA4LCBNQVhfU0tCX0ZSQUdTKSpTR0VfUEFHRV9TSVpFKlBBR0VTX1BFUl9TR0UpIHsKQEAgLTM0NCw2ICszNzgsOCBAQAogCWlmIChsaWtlbHkobmV3X3NrYikpIHsKIAkJLyogZml4IGlwIHhzdW0gYW5kIGdpdmUgaXQgdG8gdGhlIHN0YWNrICovCiAJCS8qIChubyBuZWVkIHRvIG1hcCB0aGUgbmV3IHNrYikgKi8KKwkJdTE2IHBhcnNpbmdfZmxhZ3MgPQorCQkJbGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnBhcnNfZmxhZ3MuZmxhZ3MpOwogCiAJCXByZWZldGNoKHNrYik7CiAJCXByZWZldGNoKCgoY2hhciAqKShza2IpKSArIEwxX0NBQ0hFX0JZVEVTKTsKQEAgLTM3Myw5ICs0MDksOSBAQAogCQl9CiAKIAkJaWYgKCFibngyeF9maWxsX2ZyYWdfc2tiKGJwLCBmcCwgc2tiLAotCQkJCQkgJmNxZS0+ZmFzdF9wYXRoX2NxZSwgY3FlX2lkeCkpIHsKLQkJCWlmICgobGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLgotCQkJICAgIHBhcnNfZmxhZ3MuZmxhZ3MpICYgUEFSU0lOR19GTEFHU19WTEFOKSkKKwkJCQkJICZjcWUtPmZhc3RfcGF0aF9jcWUsIGNxZV9pZHgsCisJCQkJCSBwYXJzaW5nX2ZsYWdzKSkgeworCQkJaWYgKHBhcnNpbmdfZmxhZ3MgJiBQQVJTSU5HX0ZMQUdTX1ZMQU4pCiAJCQkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsCiAJCQkJCQkgbGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLgogCQkJCQkJCSAgICAgdmxhbl90YWcpKTsKQEAgLTcwMywxOSArNzM5LDIwIEBACiB7CiAJdTE2IGxpbmVfc3BlZWQgPSBicC0+bGlua192YXJzLmxpbmVfc3BlZWQ7CiAJaWYgKElTX01GKGJwKSkgewotCQl1MTYgbWF4Q2ZnID0gKGJwLT5tZl9jb25maWdbQlBfVk4oYnApXSAmCi0JCQkJCQlGVU5DX01GX0NGR19NQVhfQldfTUFTSykgPj4KLQkJCQkJCUZVTkNfTUZfQ0ZHX01BWF9CV19TSElGVDsKLQkJLyogQ2FsY3VsYXRlIHRoZSBjdXJyZW50IE1BWCBsaW5lIHNwZWVkIGxpbWl0IGZvciB0aGUgRENDCi0JCSAqIGNhcGFibGUgZGV2aWNlcworCQl1MTYgbWF4Q2ZnID0gYm54MnhfZXh0cmFjdF9tYXhfY2ZnKGJwLAorCQkJCQkJICAgYnAtPm1mX2NvbmZpZ1tCUF9WTihicCldKTsKKworCQkvKiBDYWxjdWxhdGUgdGhlIGN1cnJlbnQgTUFYIGxpbmUgc3BlZWQgbGltaXQgZm9yIHRoZSBNRgorCQkgKiBkZXZpY2VzCiAJCSAqLwotCQlpZiAoSVNfTUZfU0QoYnApKSB7CisJCWlmIChJU19NRl9TSShicCkpCisJCQlsaW5lX3NwZWVkID0gKGxpbmVfc3BlZWQgKiBtYXhDZmcpIC8gMTAwOworCQllbHNlIHsgLyogU0QgbW9kZSAqLwogCQkJdTE2IHZuX21heF9yYXRlID0gbWF4Q2ZnICogMTAwOwogCiAJCQlpZiAodm5fbWF4X3JhdGUgPCBsaW5lX3NwZWVkKQogCQkJCWxpbmVfc3BlZWQgPSB2bl9tYXhfcmF0ZTsKLQkJfSBlbHNlIC8qIElTX01GX1NJKGJwKSkgKi8KLQkJCWxpbmVfc3BlZWQgPSAobGluZV9zcGVlZCAqIG1heENmZykgLyAxMDA7CisJCX0KIAl9CiAKIAlyZXR1cm4gbGluZV9zcGVlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKaW5kZXggMDNlYjRkNi4uMzI2YmE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKQEAgLTEwNDQsNCArMTA0NCwyNCBAQAogdm9pZCBibngyeF9hY3F1aXJlX3BoeV9sb2NrKHN0cnVjdCBibngyeCAqYnApOwogdm9pZCBibngyeF9yZWxlYXNlX3BoeV9sb2NrKHN0cnVjdCBibngyeCAqYnApOwogCisvKioKKyAqIEV4dHJhY3RzIE1BWCBCVyBwYXJ0IGZyb20gTUYgY29uZmlndXJhdGlvbi4KKyAqCisgKiBAcGFyYW0gYnAKKyAqIEBwYXJhbSBtZl9jZmcKKyAqCisgKiBAcmV0dXJuIHUxNgorICovCitzdGF0aWMgaW5saW5lIHUxNiBibngyeF9leHRyYWN0X21heF9jZmcoc3RydWN0IGJueDJ4ICpicCwgdTMyIG1mX2NmZykKK3sKKwl1MTYgbWF4X2NmZyA9IChtZl9jZmcgJiBGVU5DX01GX0NGR19NQVhfQldfTUFTSykgPj4KKwkJCSAgICAgIEZVTkNfTUZfQ0ZHX01BWF9CV19TSElGVDsKKwlpZiAoIW1heF9jZmcpIHsKKwkJQk5YMlhfRVJSKCJJbGxlZ2FsIGNvbmZpZ3VyYXRpb24gZGV0ZWN0ZWQgZm9yIE1heCBCVyAtICIKKwkJCSAgInVzaW5nIDEwMCBpbnN0ZWFkXG4iKTsKKwkJbWF4X2NmZyA9IDEwMDsKKwl9CisJcmV0dXJuIG1heF9jZmc7Cit9CisKICNlbmRpZiAvKiBCTlgyWF9DTU5fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jCmluZGV4IDViNDRhOGIuLmVmMjkxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogCXNwZWVkIHw9IChjbWQtPnNwZWVkX2hpIDw8IDE2KTsKIAogCWlmIChJU19NRl9TSShicCkpIHsKLQkJdTMyIHBhcmFtID0gMDsKKwkJdTMyIHBhcmFtID0gMCwgcGFydDsKIAkJdTMyIGxpbmVfc3BlZWQgPSBicC0+bGlua192YXJzLmxpbmVfc3BlZWQ7CiAKIAkJLyogdXNlIDEwRyBpZiBubyBsaW5rIGRldGVjdGVkICovCkBAIC0yNTEsOSArMjUxLDExIEBACiAJCQkJICAgICAgIFJFUV9CQ19WRVJfNF9TRVRfTUZfQlcpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKGxpbmVfc3BlZWQgPCBzcGVlZCkgewotCQkJQk5YMlhfREVWX0lORk8oIk5ldyBzcGVlZCBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCAiCi0JCQkJICAgICAgICJ0byBhY3R1YWwgbGluZSBzcGVlZFxuIik7CisJCXBhcnQgPSAoc3BlZWQgKiAxMDApIC8gbGluZV9zcGVlZDsKKwkJaWYgKGxpbmVfc3BlZWQgPCBzcGVlZCB8fCAhcGFydCkgeworCQkJQk5YMlhfREVWX0lORk8oIlNwZWVkIHNldHRpbmcgc2hvdWxkIGJlIGluIGEgcmFuZ2UgIgorCQkJCSAgICAgICAiZnJvbSAxJSUgdG8gMTAwJSUgIgorCQkJCSAgICAgICAib2YgYWN0dWFsIGxpbmUgc3BlZWRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLyogbG9hZCBvbGQgdmFsdWVzICovCkBAIC0yNjMsOCArMjY1LDcgQEAKIAkJcGFyYW0gJj0gRlVOQ19NRl9DRkdfTUlOX0JXX01BU0s7CiAKIAkJLyogc2V0IG5ldyBNQVggdmFsdWUgKi8KLQkJcGFyYW0gfD0gKCgoc3BlZWQgKiAxMDApIC8gbGluZV9zcGVlZCkKLQkJCQkgPDwgRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUKQorCQlwYXJhbSB8PSAocGFydCA8PCBGVU5DX01GX0NGR19NQVhfQldfU0hJRlQpCiAJCQkJICAmIEZVTkNfTUZfQ0ZHX01BWF9CV19NQVNLOwogCiAJCWJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9TRVRfTUZfQlcsIHBhcmFtKTsKQEAgLTE3ODEsOSArMTc4Miw3IEBACiAJCXsgMHgxMDAsIDB4MzUwIH0sIC8qIG1hbnVmX2luZm8gKi8KIAkJeyAweDQ1MCwgIDB4ZjAgfSwgLyogZmVhdHVyZV9pbmZvICovCiAJCXsgMHg2NDAsICAweDY0IH0sIC8qIHVwZ3JhZGVfa2V5X2luZm8gKi8KLQkJeyAweDZhNCwgIDB4NjQgfSwKIAkJeyAweDcwOCwgIDB4NzAgfSwgLyogbWFudWZfa2V5X2luZm8gKi8KLQkJeyAweDc3OCwgIDB4NzAgfSwKIAkJeyAgICAgMCwgICAgIDAgfQogCX07CiAJX19iZTMyIGJ1ZlsweDM1MCAvIDRdOwpAQCAtMTkzMywxMSArMTkzMiwxMSBAQAogCQlidWZbNF0gPSAxOwogCQlldGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCX0KLQlpZiAoYnAtPnBvcnQucG1mKQotCQlpZiAoYm54MnhfbGlua190ZXN0KGJwLCBpc19zZXJkZXMpICE9IDApIHsKLQkJCWJ1Zls1XSA9IDE7Ci0JCQlldGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwotCQl9CisKKwlpZiAoYm54MnhfbGlua190ZXN0KGJwLCBpc19zZXJkZXMpICE9IDApIHsKKwkJYnVmWzVdID0gMTsKKwkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKwl9CiAKICNpZmRlZiBCTlgyWF9FWFRSQV9ERUJVRwogCWJueDJ4X3BhbmljX2R1bXAoYnApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdC5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdC5oCmluZGV4IDVhMjY4ZTkuLmZhNmRiZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2luaXQuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9pbml0LmgKQEAgLTI0MSw3ICsyNDEsNyBAQAogCS8qIEJsb2NrIElHVSwgTUlTQywgUFhQIGFuZCBQWFAyIHBhcml0eSBlcnJvcnMgYXMgbG9uZyBhcyB3ZSBkb24ndAogCSAqIHdhbnQgdG8gaGFuZGxlICJzeXN0ZW0ga2lsbCIgZmxvdyBhdCB0aGUgbW9tZW50LgogCSAqLwotCUJMT0NLX1BSVFlfSU5GTyhQWFAsIDB4M2ZmZmZmZiwgMHgzZmZmZmZmLCAweDNmZmZmZmYsIDB4M2ZmZmZmZiksCisJQkxPQ0tfUFJUWV9JTkZPKFBYUCwgMHg3ZmZmZmZmLCAweDNmZmZmZmYsIDB4M2ZmZmZmZiwgMHg3ZmZmZmZmKSwKIAlCTE9DS19QUlRZX0lORk9fMChQWFAyLAkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmKSwKIAlCTE9DS19QUlRZX0lORk9fMShQWFAyLAkweDdmZiwgMHg3ZiwgMHg3ZiwgMHg3ZmYpLAogCUJMT0NLX1BSVFlfSU5GTyhIQywgMHg3LCAweDcsIDB4NywgMCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMKaW5kZXggNzE2MGVjNS4uZGQxMjEwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYwpAQCAtMzk0OCw0OCArMzk0OCw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBibngyeF84MDczX3NldF94YXVpX2xvd19wb3dlcl9tb2RlKHN0cnVjdCBibngyeCAqYnAsCi0JCQkJCSAgICAgICBzdHJ1Y3QgYm54MnhfcGh5ICpwaHkpCi17Ci0JdTE2IHZhbDsKLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwKLQkJCU1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfODA3M19DSElQX1JFViwgJnZhbCk7Ci0KLQlpZiAodmFsID09IDApIHsKLQkJLyogTXVzdG4ndCBzZXQgbG93IHBvd2VyIG1vZGUgaW4gODA3MyBBMCAqLwotCQlyZXR1cm47Ci0JfQotCi0JLyogRGlzYWJsZSBQTEwgc2VxdWVuY2VyICh1c2UgcmVhZC1tb2RpZnktd3JpdGUgdG8gY2xlYXIgYml0IDEzKSAqLwotCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LAotCQkJTURJT19YU19ERVZBRCwgTURJT19YU19QTExfU0VRVUVOQ0VSLCAmdmFsKTsKLQl2YWwgJj0gfigxPDwxMyk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LAotCQkgICAgICAgTURJT19YU19ERVZBRCwgTURJT19YU19QTExfU0VRVUVOQ0VSLCB2YWwpOwotCi0JLyogUExMIGNvbnRyb2xzICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwNUUsIDB4MTA3Nyk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwNUQsIDB4MDAwMCk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwNUMsIDB4MDMwQik7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwNUIsIDB4MTI0MCk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwNUEsIDB4MjQ5MCk7Ci0KLQkvKiBUeCBDb250cm9scyAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MEE3LCAweDBDNzQpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MEE2LCAweDkwNDEpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MEE1LCAweDQ2NDApOwotCi0JLyogUnggQ29udHJvbHMgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODBGRSwgMHgwMUM0KTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODBGRCwgMHg5MjQ5KTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODBGQywgMHgyMDE1KTsKLQotCS8qIEVuYWJsZSBQTEwgc2VxdWVuY2VyICAodXNlIHJlYWQtbW9kaWZ5LXdyaXRlIHRvIHNldCBiaXQgMTMpICovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgJnZhbCk7Ci0JdmFsIHw9ICgxPDwxMyk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCBNRElPX1hTX1BMTF9TRVFVRU5DRVIsIHZhbCk7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgkJCUJDTTgwNzMgUEhZIFNFQ1RJT04JCQkgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDE0OCw4ICs0MTA2LDYgQEAKIAogCWJueDJ4XzgwNzNfc2V0X3BhdXNlX2NsMzcocGFyYW1zLCBwaHksIHZhcnMpOwogCi0JYm54MnhfODA3M19zZXRfeGF1aV9sb3dfcG93ZXJfbW9kZShicCwgcGh5KTsKLQogCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LAogCQkJTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19NODA1MV9NU0dPVVRfUkVHLCAmdG1wMSk7CiAKQEAgLTY1MTksNiArNjQ3NSwxOCBAQAogCQkJCQkgTURJT19QTUFfREVWQUQsCiAJCQkJCSBNRElPX1BNQV9SRUdfODQ4MV9MRUQxX01BU0ssCiAJCQkJCSAweDgwKTsKKworCQkJLyogVGVsbCBMRUQzIHRvIGJsaW5rIG9uIHNvdXJjZSAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksCisJCQkJCU1ESU9fUE1BX0RFVkFELAorCQkJCQlNRElPX1BNQV9SRUdfODQ4MV9MSU5LX1NJR05BTCwKKwkJCQkJJnZhbCk7CisJCQl2YWwgJj0gfig3PDw2KTsKKwkJCXZhbCB8PSAoMTw8Nik7IC8qIEE4M0JbODo2XT0gMSAqLworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGh5LAorCQkJCQkgTURJT19QTUFfREVWQUQsCisJCQkJCSBNRElPX1BNQV9SRUdfODQ4MV9MSU5LX1NJR05BTCwKKwkJCQkJIHZhbCk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtNzcyMCwxMCArNzY4OCwxMyBAQAogCXN0cnVjdCBibngyeF9waHkgcGh5W1BPUlRfTUFYXTsKIAlzdHJ1Y3QgYm54MnhfcGh5ICpwaHlfYmxrW1BPUlRfTUFYXTsKIAl1MTYgdmFsOwotCXM4IHBvcnQ7CisJczggcG9ydCA9IDA7CiAJczggcG9ydF9vZl9wYXRoID0gMDsKLQotCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIDApOworCXUzMiBzd2FwX3ZhbCwgc3dhcF9vdmVycmlkZTsKKwlzd2FwX3ZhbCA9IFJFR19SRChicCwgIE5JR19SRUdfUE9SVF9TV0FQKTsKKwlzd2FwX292ZXJyaWRlID0gUkVHX1JEKGJwLCAgTklHX1JFR19TVFJBUF9PVkVSUklERSk7CisJcG9ydCBePSAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSk7CisJYm54MnhfZXh0X3BoeV9od19yZXNldChicCwgcG9ydCk7CiAJLyogUEFSVDEgLSBSZXNldCBib3RoIHBoeXMgKi8KIAlmb3IgKHBvcnQgPSBQT1JUX01BWCAtIDE7IHBvcnQgPj0gUE9SVF8wOyBwb3J0LS0pIHsKIAkJdTMyIHNobWVtX2Jhc2UsIHNobWVtMl9iYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCmluZGV4IDhjZGNmNWIzLi4wMzJhZTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCkBAIC0xOTc0LDEzICsxOTc0LDIyIEBACiAJCXZuX21heF9yYXRlID0gMDsKIAogCX0gZWxzZSB7CisJCXUzMiBtYXhDZmcgPSBibngyeF9leHRyYWN0X21heF9jZmcoYnAsIHZuX2NmZyk7CisKIAkJdm5fbWluX3JhdGUgPSAoKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX01JTl9CV19NQVNLKSA+PgogCQkJCUZVTkNfTUZfQ0ZHX01JTl9CV19TSElGVCkgKiAxMDA7Ci0JCS8qIElmIG1pbiByYXRlIGlzIHplcm8gLSBzZXQgaXQgdG8gMSAqLworCQkvKiBJZiBmYWlybmVzcyBpcyBlbmFibGVkIChub3QgYWxsIG1pbiByYXRlcyBhcmUgemVyb2VzKSBhbmQKKwkJICAgaWYgY3VycmVudCBtaW4gcmF0ZSBpcyB6ZXJvIC0gc2V0IGl0IHRvIDEuCisJCSAgIFRoaXMgaXMgYSByZXF1aXJlbWVudCBvZiB0aGUgYWxnb3JpdGhtLiAqLwogCQlpZiAoYnAtPnZuX3dlaWdodF9zdW0gJiYgKHZuX21pbl9yYXRlID09IDApKQogCQkJdm5fbWluX3JhdGUgPSBERUZfTUlOX1JBVEU7Ci0JCXZuX21heF9yYXRlID0gKCh2bl9jZmcgJiBGVU5DX01GX0NGR19NQVhfQldfTUFTSykgPj4KLQkJCQlGVU5DX01GX0NGR19NQVhfQldfU0hJRlQpICogMTAwOworCisJCWlmIChJU19NRl9TSShicCkpCisJCQkvKiBtYXhDZmcgaW4gcGVyY2VudHMgb2YgbGlua3NwZWVkICovCisJCQl2bl9tYXhfcmF0ZSA9IChicC0+bGlua192YXJzLmxpbmVfc3BlZWQgKiBtYXhDZmcpIC8gMTAwOworCQllbHNlCisJCQkvKiBtYXhDZmcgaXMgYWJzb2x1dGUgaW4gMTAwTWIgdW5pdHMgKi8KKwkJCXZuX21heF9yYXRlID0gbWF4Q2ZnICogMTAwOwogCX0KIAogCURQKE5FVElGX01TR19JRlVQLApAQCAtMjAwNiw3ICsyMDE1LDggQEAKIAkJbV9mYWlyX3ZuLnZuX2NyZWRpdF9kZWx0YSA9CiAJCQltYXhfdCh1MzIsICh2bl9taW5fcmF0ZSAqIChUX0ZBSVJfQ09FRiAvCiAJCQkJCQkgICAoOCAqIGJwLT52bl93ZWlnaHRfc3VtKSkpLAotCQkJICAgICAgKGJwLT5jbW5nLmZhaXJfdmFycy5mYWlyX3RocmVzaG9sZCAqIDIpKTsKKwkJCSAgICAgIChicC0+Y21uZy5mYWlyX3ZhcnMuZmFpcl90aHJlc2hvbGQgKworCQkJCQkJCU1JTl9BQk9WRV9USFJFU0gpKTsKIAkJRFAoTkVUSUZfTVNHX0lGVVAsICJtX2ZhaXJfdm4udm5fY3JlZGl0X2RlbHRhICVkXG4iLAogCQkgICBtX2ZhaXJfdm4udm5fY3JlZGl0X2RlbHRhKTsKIAl9CkBAIC0yMzAxLDE1ICsyMzExLDEwIEBACiAJCS8qIGFjY2VwdCBtYXRjaGVkIHVjYXN0ICovCiAJCWRyb3BfYWxsX3VjYXN0ID0gMDsKIAl9Ci0JaWYgKGZpbHRlcnMgJiBCTlgyWF9BQ0NFUFRfTVVMVElDQVNUKSB7CisJaWYgKGZpbHRlcnMgJiBCTlgyWF9BQ0NFUFRfTVVMVElDQVNUKQogCQkvKiBhY2NlcHQgbWF0Y2hlZCBtY2FzdCAqLwogCQlkcm9wX2FsbF9tY2FzdCA9IDA7Ci0JCWlmIChJU19NRl9TSShicCkpCi0JCQkvKiBzaW5jZSBtY2FzdCBhZGRyZXNzZXMgd29uJ3QgYXJyaXZlIHdpdGggb3ZsYW4sCi0JCQkgKiBmdyBuZWVkcyB0byBhY2NlcHQgYWxsIG9mIHRoZW0gaW4KLQkJCSAqIHN3aXRjaC1pbmRlcGVuZGVudCBtb2RlICovCi0JCQlhY2NwX2FsbF9tY2FzdCA9IDE7Ci0JfQorCiAJaWYgKGZpbHRlcnMgJiBCTlgyWF9BQ0NFUFRfQUxMX1VOSUNBU1QpIHsKIAkJLyogYWNjZXB0IGFsbCBtY2FzdCAqLwogCQlkcm9wX2FsbF91Y2FzdCA9IDA7CkBAIC00MjgxLDkgKzQyODYsMTIgQEAKIAkJZGVmX3FfZmlsdGVycyB8PSBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8IEJOWDJYX0FDQ0VQVF9CUk9BRENBU1QgfAogCQkJCUJOWDJYX0FDQ0VQVF9NVUxUSUNBU1Q7CiAjaWZkZWYgQkNNX0NOSUMKLQkJY2xfaWQgPSBibngyeF9mY29lKGJwLCBjbF9pZCk7Ci0JCWJueDJ4X3J4cV9zZXRfbWFjX2ZpbHRlcnMoYnAsIGNsX2lkLCBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8Ci0JCQkJCSAgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCk7CisJCWlmICghTk9fRkNPRShicCkpIHsKKwkJCWNsX2lkID0gYm54MnhfZmNvZShicCwgY2xfaWQpOworCQkJYm54MnhfcnhxX3NldF9tYWNfZmlsdGVycyhicCwgY2xfaWQsCisJCQkJCQkgIEJOWDJYX0FDQ0VQVF9VTklDQVNUIHwKKwkJCQkJCSAgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCk7CisJCX0KICNlbmRpZgogCQlicmVhazsKIApAQCAtNDI5MSwxOCArNDI5OSwyOSBAQAogCQlkZWZfcV9maWx0ZXJzIHw9IEJOWDJYX0FDQ0VQVF9VTklDQVNUIHwgQk5YMlhfQUNDRVBUX0JST0FEQ0FTVCB8CiAJCQkJQk5YMlhfQUNDRVBUX0FMTF9NVUxUSUNBU1Q7CiAjaWZkZWYgQkNNX0NOSUMKLQkJY2xfaWQgPSBibngyeF9mY29lKGJwLCBjbF9pZCk7Ci0JCWJueDJ4X3J4cV9zZXRfbWFjX2ZpbHRlcnMoYnAsIGNsX2lkLCBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8Ci0JCQkJCSAgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCk7CisJCS8qCisJCSAqICBQcmV2ZW50IGR1cGxpY2F0aW9uIG9mIG11bHRpY2FzdCBwYWNrZXRzIGJ5IGNvbmZpZ3VyaW5nIEZDb0UKKwkJICogIEwyIENsaWVudCB0byByZWNlaXZlIG9ubHkgbWF0Y2hlZCB1bmljYXN0IGZyYW1lcy4KKwkJICovCisJCWlmICghTk9fRkNPRShicCkpIHsKKwkJCWNsX2lkID0gYm54MnhfZmNvZShicCwgY2xfaWQpOworCQkJYm54MnhfcnhxX3NldF9tYWNfZmlsdGVycyhicCwgY2xfaWQsCisJCQkJCQkgIEJOWDJYX0FDQ0VQVF9VTklDQVNUKTsKKwkJfQogI2VuZGlmCiAJCWJyZWFrOwogCiAJY2FzZSBCTlgyWF9SWF9NT0RFX1BST01JU0M6CiAJCWRlZl9xX2ZpbHRlcnMgfD0gQk5YMlhfUFJPTUlTQ1VPVVNfTU9ERTsKICNpZmRlZiBCQ01fQ05JQwotCQljbF9pZCA9IGJueDJ4X2Zjb2UoYnAsIGNsX2lkKTsKLQkJYm54MnhfcnhxX3NldF9tYWNfZmlsdGVycyhicCwgY2xfaWQsIEJOWDJYX0FDQ0VQVF9VTklDQVNUIHwKLQkJCQkJICBCTlgyWF9BQ0NFUFRfTVVMVElDQVNUKTsKKwkJLyoKKwkJICogIFByZXZlbnQgcGFja2V0cyBkdXBsaWNhdGlvbiBieSBjb25maWd1cmluZyBEUk9QX0FMTCBmb3IgRkNvRQorCQkgKiAgTDIgQ2xpZW50LgorCQkgKi8KKwkJaWYgKCFOT19GQ09FKGJwKSkgeworCQkJY2xfaWQgPSBibngyeF9mY29lKGJwLCBjbF9pZCk7CisJCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwgQk5YMlhfQUNDRVBUX05PTkUpOworCQl9CiAjZW5kaWYKIAkJLyogcGFzcyBtYW5hZ2VtZW50IHVuaWNhc3QgcGFja2V0cyBhcyB3ZWxsICovCiAJCWxsaF9tYXNrIHw9IE5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19VTkNTVDsKQEAgLTUyOTYsMTAgKzUzMTUsNiBAQAogCQl9CiAJfQogCi0JYnAtPnBvcnQubmVlZF9od19sb2NrID0gYm54MnhfaHdfbG9ja19yZXF1aXJlZChicCwKLQkJCQkJCSAgICAgICBicC0+Y29tbW9uLnNobWVtX2Jhc2UsCi0JCQkJCQkgICAgICAgYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSk7Ci0KIAlibngyeF9zZXR1cF9mYW5fZmFpbHVyZV9kZXRlY3Rpb24oYnApOwogCiAJLyogY2xlYXIgUFhQMiBhdHRlbnRpb25zICovCkBAIC01NTAzLDkgKzU1MTgsNiBAQAogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgTUNQX0JMT0NLLCBpbml0X3N0YWdlKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBETUFFX0JMT0NLLCBpbml0X3N0YWdlKTsKLQlicC0+cG9ydC5uZWVkX2h3X2xvY2sgPSBibngyeF9od19sb2NrX3JlcXVpcmVkKGJwLAotCQkJCQkJICAgICAgIGJwLT5jb21tb24uc2htZW1fYmFzZSwKLQkJCQkJCSAgICAgICBicC0+Y29tbW9uLnNobWVtMl9iYXNlKTsKIAlpZiAoYm54MnhfZmFuX2ZhaWx1cmVfZGV0X3JlcShicCwgYnAtPmNvbW1vbi5zaG1lbV9iYXNlLAogCQkJCSAgICAgIGJwLT5jb21tb24uc2htZW0yX2Jhc2UsIHBvcnQpKSB7CiAJCXUzMiByZWdfYWRkciA9IChwb3J0ID8gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wIDoKQEAgLTgzNzksNiArODM5MSwxNyBAQAogCQkgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9OT1RfQ09OTikpCiAJCWJwLT5tZGlvLnBydGFkID0KIAkJCVhHWFNfRVhUX1BIWV9BRERSKGV4dF9waHlfY29uZmlnKTsKKworCS8qCisJICogQ2hlY2sgaWYgaHcgbG9jayBpcyByZXF1aXJlZCB0byBhY2Nlc3MgTURDL01ESU8gYnVzIHRvIHRoZSBQSFkocykKKwkgKiBJbiBNRiBtb2RlLCBpdCBpcyBzZXQgdG8gY292ZXIgc2VsZiB0ZXN0IGNhc2VzCisJICovCisJaWYgKElTX01GKGJwKSkKKwkJYnAtPnBvcnQubmVlZF9od19sb2NrID0gMTsKKwllbHNlCisJCWJwLT5wb3J0Lm5lZWRfaHdfbG9jayA9IGJueDJ4X2h3X2xvY2tfcmVxdWlyZWQoYnAsCisJCQkJCQkJYnAtPmNvbW1vbi5zaG1lbV9iYXNlLAorCQkJCQkJCWJwLT5jb21tb24uc2htZW0yX2Jhc2UpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgYm54MnhfZ2V0X21hY19od2luZm8oc3RydWN0IGJueDJ4ICpicCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jCmluZGV4IGJkYTYwZDUuLjM0NDVkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54Mnhfc3RhdHMuYwpAQCAtMTIzOSwxNCArMTIzOSwxNCBAQAogCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQogCQlyZXR1cm47CiAKKwlibngyeF9zdGF0c19zdG1bYnAtPnN0YXRzX3N0YXRlXVtldmVudF0uYWN0aW9uKGJwKTsKKwogCS8qIFByb3RlY3QgYSBzdGF0ZSBjaGFuZ2UgZmxvdyAqLwogCXNwaW5fbG9ja19iaCgmYnAtPnN0YXRzX2xvY2spOwogCXN0YXRlID0gYnAtPnN0YXRzX3N0YXRlOwogCWJwLT5zdGF0c19zdGF0ZSA9IGJueDJ4X3N0YXRzX3N0bVtzdGF0ZV1bZXZlbnRdLm5leHRfc3RhdGU7CiAJc3Bpbl91bmxvY2tfYmgoJmJwLT5zdGF0c19sb2NrKTsKIAotCWJueDJ4X3N0YXRzX3N0bVtzdGF0ZV1bZXZlbnRdLmFjdGlvbihicCk7Ci0KIAlpZiAoKGV2ZW50ICE9IFNUQVRTX0VWRU5UX1VQREFURSkgfHwgbmV0aWZfbXNnX3RpbWVyKGJwKSkKIAkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdGUgJWQgLT4gZXZlbnQgJWQgLT4gc3RhdGUgJWRcbiIsCiAJCSAgIHN0YXRlLCBldmVudCwgYnAtPnN0YXRzX3N0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwppbmRleCAxNzE3ODJlLi4xMDI0YWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCkBAIC0yNDcwLDYgKzI0NzAsMTAgQEAKIAlpZiAoIShkZXYtPmZsYWdzICYgSUZGX01BU1RFUikpCiAJCWdvdG8gb3V0OwogCisJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCWdvdG8gb3V0OworCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBsYWNwZHUpKSkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCBmNGU2MzhjLi41YzZmYmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC0zMjYsNiArMzI2LDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlnb3RvIG91dDsKKwogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGFycF9oZHJfbGVuKGJvbmRfZGV2KSkpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCBiMTAyNWI4Li4xNjNlMGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTI3MzMsNiArMjczMywxMCBAQAogCWlmICghc2xhdmUgfHwgIXNsYXZlX2RvX2FycF92YWxpZGF0ZShib25kLCBzbGF2ZSkpCiAJCWdvdG8gb3V0X3VubG9jazsKIAorCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlnb3RvIG91dF91bmxvY2s7CisKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBhcnBfaGRyX2xlbihkZXYpKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCmluZGV4IGQ1YTlkYjYuLjVkZWM0NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCkBAIC0yMyw3ICsyMyw3IEBACiAKIAkgIEFzIG9ubHkgdGhlIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBvZiBDQU4gZnJhbWVzIGlzIGltcGxlbWVudGVkLCB0aGlzCiAJICBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCB0aGUgKHNlcmlhbC9VU0IpIENBTiBoYXJkd2FyZSBmcm9tOgotCSAgd3d3LmNhbnVzYi5jb20gLyB3d3cuY2FuMjMyLmNvbSAvIHd3dy5taWN0cm9uaWMuY29tIC8gd3d3LmNhbmhhY2suZGUKKwkgIHd3dy5jYW51c2IuY29tIC8gd3d3LmNhbjIzMi5jb20gLyB3d3cubWljdHJvbmljcy5kZSAvIHd3dy5jYW5oYWNrLmRlCiAKIAkgIFVzZXJzcGFjZSB0b29scyB0byBhdHRhY2ggdGhlIFNMQ0FOIGxpbmUgZGlzY2lwbGluZSAoc2xjYW5fYXR0YWNoLAogCSAgc2xjYW5kKSBjYW4gYmUgZm91bmQgaW4gdGhlIGNhbi11dGlscyBhdCB0aGUgU29ja2V0Q0FOIFNWTiwgc2VlCkBAIC0xMTcsNiArMTE3LDggQEAKIAogc291cmNlICJkcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvS2NvbmZpZyIKKwogY29uZmlnIENBTl9ERUJVR19ERVZJQ0VTCiAJYm9vbCAiQ0FOIGRldmljZXMgZGVidWdnaW5nIG1lc3NhZ2VzIgogCWRlcGVuZHMgb24gQ0FOCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUKaW5kZXggMDdjYTE1OS4uNTNjODJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIGNhbi1kZXYteQkJCTo9IGRldi5vCiAKIG9iai15CQkJCSs9IHVzYi8KK29iai15CQkJCSs9IHNvZnRpbmcvCiAKIG9iai0kKENPTkZJR19DQU5fU0pBMTAwMCkJKz0gc2phMTAwMC8KIG9iai0kKENPTkZJR19DQU5fTVNDQU4pCQkrPSBtc2Nhbi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKaW5kZXggN2VmODNkMC4uNTdkMmZmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKQEAgLTIsNyArMiw3IEBACiAgKiBhdDkxX2Nhbi5jIC0gQ0FOIG5ldHdvcmsgZHJpdmVyIGZvciBBVDkxIFNvQyBDQU4gY29udHJvbGxlcgogICoKICAqIChDKSAyMDA3IGJ5IEhhbnMgSi4gS29jaCA8aGprQGhhbnNqa29jaC5kZT4KLSAqIChDKSAyMDA4LCAyMDA5LCAyMDEwIGJ5IE1hcmMgS2xlaW5lLUJ1ZGRlIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKiAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBieSBNYXJjIEtsZWluZS1CdWRkZSA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgogICoKICAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKICAqIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIGRpc3RyaWJ1dGVkIGluIHRoZSAnQ09QWUlORycKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNDAsMjIgKzQxLDIzIEBACiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAKLSNkZWZpbmUgQVQ5MV9OQVBJX1dFSUdIVAkxMgorI2RlZmluZSBBVDkxX05BUElfV0VJR0hUCTExCiAKIC8qCiAgKiBSWC9UWCBNYWlsYm94IHNwbGl0CiAgKiBkb24ndCBkYXJlIHRvIHRvdWNoCiAgKi8KLSNkZWZpbmUgQVQ5MV9NQl9SWF9OVU0JCTEyCisjZGVmaW5lIEFUOTFfTUJfUlhfTlVNCQkxMQogI2RlZmluZSBBVDkxX01CX1RYX1NISUZUCTIKIAotI2RlZmluZSBBVDkxX01CX1JYX0ZJUlNUCTAKKyNkZWZpbmUgQVQ5MV9NQl9SWF9GSVJTVAkxCiAjZGVmaW5lIEFUOTFfTUJfUlhfTEFTVAkJKEFUOTFfTUJfUlhfRklSU1QgKyBBVDkxX01CX1JYX05VTSAtIDEpCiAKICNkZWZpbmUgQVQ5MV9NQl9SWF9NQVNLKGkpCSgoMSA8PCAoaSkpIC0gMSkKICNkZWZpbmUgQVQ5MV9NQl9SWF9TUExJVAk4CiAjZGVmaW5lIEFUOTFfTUJfUlhfTE9XX0xBU1QJKEFUOTFfTUJfUlhfU1BMSVQgLSAxKQotI2RlZmluZSBBVDkxX01CX1JYX0xPV19NQVNLCShBVDkxX01CX1JYX01BU0soQVQ5MV9NQl9SWF9TUExJVCkpCisjZGVmaW5lIEFUOTFfTUJfUlhfTE9XX01BU0sJKEFUOTFfTUJfUlhfTUFTSyhBVDkxX01CX1JYX1NQTElUKSAmIFwKKwkJCQkgfkFUOTFfTUJfUlhfTUFTSyhBVDkxX01CX1JYX0ZJUlNUKSkKIAogI2RlZmluZSBBVDkxX01CX1RYX05VTQkJKDEgPDwgQVQ5MV9NQl9UWF9TSElGVCkKICNkZWZpbmUgQVQ5MV9NQl9UWF9GSVJTVAkoQVQ5MV9NQl9SWF9MQVNUICsgMSkKQEAgLTE2OCw2ICsxNzAsOCBAQAogCiAJc3RydWN0IGNsawkJKmNsazsKIAlzdHJ1Y3QgYXQ5MV9jYW5fZGF0YQkqcGRhdGE7CisKKwljYW5pZF90CQkJbWIwX2lkOwogfTsKIAogc3RhdGljIHN0cnVjdCBjYW5fYml0dGltaW5nX2NvbnN0IGF0OTFfYml0dGltaW5nX2NvbnN0ID0gewpAQCAtMjIwLDYgKzIyNCwxOCBAQAogCXNldF9tYl9tb2RlX3ByaW8ocHJpdiwgbWIsIG1vZGUsIDApOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBhdDkxX2Nhbl9pZF90b19yZWdfbWlkKGNhbmlkX3QgY2FuX2lkKQoreworCXUzMiByZWdfbWlkOworCisJaWYgKGNhbl9pZCAmIENBTl9FRkZfRkxBRykKKwkJcmVnX21pZCA9IChjYW5faWQgJiBDQU5fRUZGX01BU0spIHwgQVQ5MV9NSURfTUlERTsKKwllbHNlCisJCXJlZ19taWQgPSAoY2FuX2lkICYgQ0FOX1NGRl9NQVNLKSA8PCAxODsKKworCXJldHVybiByZWdfbWlkOworfQorCiAvKgogICogU3d0aWNoIHRyYW5zY2VpdmVyIG9uIG9yIG9mZgogICovCkBAIC0yMzMsMTIgKzI0OSwyMiBAQAogewogCXN0cnVjdCBhdDkxX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBpOworCXUzMiByZWdfbWlkOwogCiAJLyoKLQkgKiBUaGUgZmlyc3QgMTIgbWFpbGJveGVzIGFyZSB1c2VkIGFzIGEgcmVjZXB0aW9uIEZJRk8uIFRoZQotCSAqIGxhc3QgbWFpbGJveCBpcyBjb25maWd1cmVkIHdpdGggb3ZlcndyaXRlIG9wdGlvbi4gVGhlCi0JICogb3ZlcndyaXRlIGZsYWcgaW5kaWNhdGVzIGEgRklGTyBvdmVyZmxvdy4KKwkgKiBEdWUgdG8gYSBjaGlwIGJ1ZyAoZXJyYXRhIDUwLjIuNi4zICYgNTAuMy41LjMpIHRoZSBmaXJzdAorCSAqIG1haWxib3ggaXMgZGlzYWJsZWQuIFRoZSBuZXh0IDExIG1haWxib3hlcyBhcmUgdXNlZCBhcyBhCisJICogcmVjZXB0aW9uIEZJRk8uIFRoZSBsYXN0IG1haWxib3ggaXMgY29uZmlndXJlZCB3aXRoCisJICogb3ZlcndyaXRlIG9wdGlvbi4gVGhlIG92ZXJ3cml0ZSBmbGFnIGluZGljYXRlcyBhIEZJRk8KKwkgKiBvdmVyZmxvdy4KIAkgKi8KKwlyZWdfbWlkID0gYXQ5MV9jYW5faWRfdG9fcmVnX21pZChwcml2LT5tYjBfaWQpOworCWZvciAoaSA9IDA7IGkgPCBBVDkxX01CX1JYX0ZJUlNUOyBpKyspIHsKKwkJc2V0X21iX21vZGUocHJpdiwgaSwgQVQ5MV9NQl9NT0RFX0RJU0FCTEVEKTsKKwkJYXQ5MV93cml0ZShwcml2LCBBVDkxX01JRChpKSwgcmVnX21pZCk7CisJCWF0OTFfd3JpdGUocHJpdiwgQVQ5MV9NQ1IoaSksIDB4MCk7CS8qIGNsZWFyIGRsYyAqLworCX0KKwogCWZvciAoaSA9IEFUOTFfTUJfUlhfRklSU1Q7IGkgPCBBVDkxX01CX1JYX0xBU1Q7IGkrKykKIAkJc2V0X21iX21vZGUocHJpdiwgaSwgQVQ5MV9NQl9NT0RFX1JYKTsKIAlzZXRfbWJfbW9kZShwcml2LCBBVDkxX01CX1JYX0xBU1QsIEFUOTFfTUJfTU9ERV9SWF9PVlJXUik7CkBAIC0yNTQsNyArMjgwLDggQEAKIAkJc2V0X21iX21vZGVfcHJpbyhwcml2LCBpLCBBVDkxX01CX01PREVfVFgsIDApOwogCiAJLyogUmVzZXQgdHggYW5kIHJ4IGhlbHBlciBwb2ludGVycyAqLwotCXByaXYtPnR4X25leHQgPSBwcml2LT50eF9lY2hvID0gcHJpdi0+cnhfbmV4dCA9IDA7CisJcHJpdi0+dHhfbmV4dCA9IHByaXYtPnR4X2VjaG8gPSAwOworCXByaXYtPnJ4X25leHQgPSBBVDkxX01CX1JYX0ZJUlNUOwogfQogCiBzdGF0aWMgaW50IGF0OTFfc2V0X2JpdHRpbWluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMzcyLDEyICszOTksNyBAQAogCQluZXRkZXZfZXJyKGRldiwgIkJVRyEgVFggYnVmZmVyIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQotCi0JaWYgKGNmLT5jYW5faWQgJiBDQU5fRUZGX0ZMQUcpCi0JCXJlZ19taWQgPSAoY2YtPmNhbl9pZCAmIENBTl9FRkZfTUFTSykgfCBBVDkxX01JRF9NSURFOwotCWVsc2UKLQkJcmVnX21pZCA9IChjZi0+Y2FuX2lkICYgQ0FOX1NGRl9NQVNLKSA8PCAxODsKLQorCXJlZ19taWQgPSBhdDkxX2Nhbl9pZF90b19yZWdfbWlkKGNmLT5jYW5faWQpOwogCXJlZ19tY3IgPSAoKGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpID8gQVQ5MV9NQ1JfTVJUUiA6IDApIHwKIAkJKGNmLT5jYW5fZGxjIDw8IDE2KSB8IEFUOTFfTUNSX01UQ1I7CiAKQEAgLTUzOSwyNyArNTYxLDMxIEBACiAgKgogICogVGhlb3J5IG9mIE9wZXJhdGlvbjoKICAqCi0gKiAxMiBvZiB0aGUgMTYgbWFpbGJveGVzIG9uIHRoZSBjaGlwIGFyZSByZXNlcnZlZCBmb3IgUlguIHdlIHNwbGl0Ci0gKiB0aGVtIGludG8gMiBncm91cHMuIFRoZSBsb3dlciBncm91cCBob2xkcyA4IGFuZCB1cHBlciA0IG1haWxib3hlcy4KKyAqIDExIG9mIHRoZSAxNiBtYWlsYm94ZXMgb24gdGhlIGNoaXAgYXJlIHJlc2VydmVkIGZvciBSWC4gd2Ugc3BsaXQKKyAqIHRoZW0gaW50byAyIGdyb3Vwcy4gVGhlIGxvd2VyIGdyb3VwIGhvbGRzIDcgYW5kIHVwcGVyIDQgbWFpbGJveGVzLgogICoKICAqIExpa2UgaXQgb3Igbm90LCBidXQgdGhlIGNoaXAgYWx3YXlzIHNhdmVzIGEgcmVjZWl2ZWQgQ0FOIG1lc3NhZ2UKICAqIGludG8gdGhlIGZpcnN0IGZyZWUgbWFpbGJveCBpdCBmaW5kcyAoc3RhcnRpbmcgd2l0aCB0aGUKICAqIGxvd2VzdCkuIFRoaXMgbWFrZXMgaXQgdmVyeSBkaWZmaWN1bHQgdG8gcmVhZCB0aGUgbWVzc2FnZXMgaW4gdGhlCiAgKiByaWdodCBvcmRlciBmcm9tIHRoZSBjaGlwLiBUaGlzIGlzIGhvdyB3ZSB3b3JrIGFyb3VuZCB0aGF0IHByb2JsZW06CiAgKgotICogVGhlIGZpcnN0IG1lc3NhZ2UgZ29lcyBpbnRvIG1iIG5yLiAwIGFuZCBpc3N1ZXMgYW4gaW50ZXJydXB0LiBBbGwKKyAqIFRoZSBmaXJzdCBtZXNzYWdlIGdvZXMgaW50byBtYiBuci4gMSBhbmQgaXNzdWVzIGFuIGludGVycnVwdC4gQWxsCiAgKiByeCBpbnRzIGFyZSBkaXNhYmxlZCBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYW5kIGEgbmFwaSBwb2xsIGlzCiAgKiBzY2hlZHVsZWQuIFdlIHJlYWQgdGhlIG1haWxib3gsIGJ1dCBkbyBfbm90XyByZWVuYWJsZSB0aGUgbWIgKHRvCiAgKiByZWNlaXZlIGFub3RoZXIgbWVzc2FnZSkuCiAgKgogICogICAgbG93ZXIgbWJ4cyAgICAgIHVwcGVyCi0gKiAgIF9fX19fX15fX19fX18gICAgX19eX18KLSAqICAvICAgICAgICAgICAgIFwgIC8gICAgIFwKKyAqICAgICBfX19fXl9fX19fXyAgICBfX15fXworICogICAgLyAgICAgICAgICAgXCAgLyAgICAgXAogICogKy0rLSstKy0rLSstKy0rLSsrLSstKy0rLSsKLSAqIHx4fHh8eHx4fHh8eHx4fHh8fCB8IHwgfCB8CisgKiB8IHx4fHh8eHx4fHh8eHx4fHwgfCB8IHwgfAogICogKy0rLSstKy0rLSstKy0rLSsrLSstKy0rLSsKICAqICAwIDAgMCAwIDAgMCAgMCAwIDAgMCAxIDEgIFwgbWFpbAogICogIDAgMSAyIDMgNCA1ICA2IDcgOCA5IDAgMSAgLyBib3gKKyAqICBeCisgKiAgfAorICogICBcCisgKiAgICAgdW51c2VkLCBkdWUgdG8gY2hpcCBidWcKICAqCiAgKiBUaGUgdmFyaWFibGUgcHJpdi0+cnhfbmV4dCBwb2ludHMgdG8gdGhlIG5leHQgbWFpbGJveCB0byByZWFkIGEKICAqIG1lc3NhZ2UgZnJvbS4gQXMgbG9uZyB3ZSdyZSBpbiB0aGUgbG93ZXIgbWFpbGJveGVzIHdlIGp1c3QgcmVhZCB0aGUKQEAgLTU5MCwxMCArNjE2LDEwIEBACiAJCQkib3JkZXIgb2YgaW5jb21pbmcgZnJhbWVzIGNhbm5vdCBiZSBndWFyYW50ZWVkXG4iKTsKIAogIGFnYWluOgotCWZvciAobWIgPSBmaW5kX25leHRfYml0KGFkZHIsIEFUOTFfTUJfUlhfTlVNLCBwcml2LT5yeF9uZXh0KTsKLQkgICAgIG1iIDwgQVQ5MV9NQl9SWF9OVU0gJiYgcXVvdGEgPiAwOworCWZvciAobWIgPSBmaW5kX25leHRfYml0KGFkZHIsIEFUOTFfTUJfUlhfTEFTVCArIDEsIHByaXYtPnJ4X25leHQpOworCSAgICAgbWIgPCBBVDkxX01CX1JYX0xBU1QgKyAxICYmIHF1b3RhID4gMDsKIAkgICAgIHJlZ19zciA9IGF0OTFfcmVhZChwcml2LCBBVDkxX1NSKSwKLQkgICAgIG1iID0gZmluZF9uZXh0X2JpdChhZGRyLCBBVDkxX01CX1JYX05VTSwgKytwcml2LT5yeF9uZXh0KSkgeworCSAgICAgbWIgPSBmaW5kX25leHRfYml0KGFkZHIsIEFUOTFfTUJfUlhfTEFTVCArIDEsICsrcHJpdi0+cnhfbmV4dCkpIHsKIAkJYXQ5MV9yZWFkX21zZyhkZXYsIG1iKTsKIAogCQkvKiByZWFjdGl2YXRlIG1haWxib3hlcyAqLwpAQCAtNjEwLDggKzYzNiw4IEBACiAKIAkvKiB1cHBlciBncm91cCBjb21wbGV0ZWQsIGxvb2sgYWdhaW4gaW4gbG93ZXIgKi8KIAlpZiAocHJpdi0+cnhfbmV4dCA+IEFUOTFfTUJfUlhfTE9XX0xBU1QgJiYKLQkgICAgcXVvdGEgPiAwICYmIG1iID49IEFUOTFfTUJfUlhfTlVNKSB7Ci0JCXByaXYtPnJ4X25leHQgPSAwOworCSAgICBxdW90YSA+IDAgJiYgbWIgPiBBVDkxX01CX1JYX0xBU1QpIHsKKwkJcHJpdi0+cnhfbmV4dCA9IEFUOTFfTUJfUlhfRklSU1Q7CiAJCWdvdG8gYWdhaW47CiAJfQogCkBAIC0xMDM3LDYgKzEwNjMsNjQgQEAKIAkubmRvX3N0YXJ0X3htaXQJPSBhdDkxX3N0YXJ0X3htaXQsCiB9OwogCitzdGF0aWMgc3NpemVfdCBhdDkxX3N5c2ZzX3Nob3dfbWIwX2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYXQ5MV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKworCWlmIChwcml2LT5tYjBfaWQgJiBDQU5fRUZGX0ZMQUcpCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA4eFxuIiwgcHJpdi0+bWIwX2lkKTsKKwllbHNlCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTAzeFxuIiwgcHJpdi0+bWIwX2lkKTsKK30KKworc3RhdGljIHNzaXplX3QgYXQ5MV9zeXNmc19zZXRfbWIwX2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBhdDkxX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1bnNpZ25lZCBsb25nIGNhbl9pZDsKKwlzc2l6ZV90IHJldDsKKwlpbnQgZXJyOworCisJcnRubF9sb2NrKCk7CisKKwlpZiAobmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZjYW5faWQpOworCWlmIChlcnIpIHsKKwkJcmV0ID0gZXJyOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY2FuX2lkICYgQ0FOX0VGRl9GTEFHKQorCQljYW5faWQgJj0gQ0FOX0VGRl9NQVNLIHwgQ0FOX0VGRl9GTEFHOworCWVsc2UKKwkJY2FuX2lkICY9IENBTl9TRkZfTUFTSzsKKworCXByaXYtPm1iMF9pZCA9IGNhbl9pZDsKKwlyZXQgPSBjb3VudDsKKworIG91dDoKKwlydG5sX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtYjBfaWQsIFNfSVdVU1IgfCBTX0lSVUdPLAorCWF0OTFfc3lzZnNfc2hvd19tYjBfaWQsIGF0OTFfc3lzZnNfc2V0X21iMF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphdDkxX3N5c2ZzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX21iMF9pZC5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhdDkxX3N5c2ZzX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gYXQ5MV9zeXNmc19hdHRycywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGF0OTFfY2FuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTEwODIsNiArMTE2Niw3IEBACiAJZGV2LT5uZXRkZXZfb3BzCT0gJmF0OTFfbmV0ZGV2X29wczsKIAlkZXYtPmlycSA9IGlycTsKIAlkZXYtPmZsYWdzIHw9IElGRl9FQ0hPOworCWRldi0+c3lzZnNfZ3JvdXBzWzBdID0gJmF0OTFfc3lzZnNfYXR0cl9ncm91cDsKIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXByaXYtPmNhbi5jbG9jay5mcmVxID0gY2xrX2dldF9yYXRlKGNsayk7CkBAIC0xMDkzLDYgKzExNzgsNyBAQAogCXByaXYtPmRldiA9IGRldjsKIAlwcml2LT5jbGsgPSBjbGs7CiAJcHJpdi0+cGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlwcml2LT5tYjBfaWQgPSAweDdmZjsKIAogCW5ldGlmX25hcGlfYWRkKGRldiwgJnByaXYtPm5hcGksIGF0OTFfcG9sbCwgQVQ5MV9OQVBJX1dFSUdIVCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMgYi9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jCmluZGV4IGI5YTZkN2EuLjM2NmY1Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYwpAQCAtMTYxOCw3ICsxNjE4LDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZXJtaW5hdGlvbiwgU19JV1VHTyB8IFNfSVJVR08sIGljYW4zX3N5c2ZzX3Nob3dfdGVybSwKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZXJtaW5hdGlvbiwgU19JV1VTUiB8IFNfSVJVR08sIGljYW4zX3N5c2ZzX3Nob3dfdGVybSwKIAkJCQkJCSAgIGljYW4zX3N5c2ZzX3NldF90ZXJtKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmljYW4zX3N5c2ZzX2F0dHJzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vbWNwMjUxeC5jIGIvZHJpdmVycy9uZXQvY2FuL21jcDI1MXguYwppbmRleCA3YWI1MzRhLi43NTEzYzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vbWNwMjUxeC5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMKQEAgLTk0MCw3ICs5NDAsNyBAQAogCQlnb3RvIG9wZW5fdW5sb2NrOwogCX0KIAotCXByaXYtPndxID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKCJtY3AyNTF4X3dxIik7CisJcHJpdi0+d3EgPSBjcmVhdGVfZnJlZXphYmxlX3dvcmtxdWV1ZSgibWNwMjUxeF93cSIpOwogCUlOSVRfV09SSygmcHJpdi0+dHhfd29yaywgbWNwMjUxeF90eF93b3JrX2hhbmRsZXIpOwogCUlOSVRfV09SSygmcHJpdi0+cmVzdGFydF93b3JrLCBtY3AyNTF4X3Jlc3RhcnRfd29ya19oYW5kbGVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vS2NvbmZpZwppbmRleCAyN2QxZDM5Li5kMzg3MDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBDQU5fTVNDQU4KLQlkZXBlbmRzIG9uIENBTl9ERVYgJiYgKFBQQyB8fCBNNjhLIHx8IE02OEtOT01NVSkKKwlkZXBlbmRzIG9uIENBTl9ERVYgJiYgKFBQQyB8fCBNNjhLKQogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBGcmVlc2NhbGUgTVNDQU4gYmFzZWQgY2hpcHMiCiAJLS0taGVscC0tLQogCSAgVGhlIE1vdG9yb2xhIFNjYWxhYmxlIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIChNU0NBTikgZGVmaW5pdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3BjaF9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9wY2hfY2FuLmMKaW5kZXggYzQyZTk3Mi4uZTU0NzEyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3BjaF9jYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjYW5fYml0dGltaW5nX2NvbnN0IHBjaF9jYW5fYml0dGltaW5nX2NvbnN0ID0gewogCS5uYW1lID0gS0JVSUxEX01PRE5BTUUsCi0JLnRzZWcxX21pbiA9IDEsCisJLnRzZWcxX21pbiA9IDIsCiAJLnRzZWcxX21heCA9IDE2LAogCS50c2VnMl9taW4gPSAxLAogCS50c2VnMl9tYXggPSA4LApAQCAtOTU5LDEzICs5NTksMTMgQEAKIAlzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKIAl1bnJlZ2lzdGVyX2NhbmRldihwcml2LT5uZGV2KTsKLQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5yZWdzKTsKIAlpZiAocHJpdi0+dXNlX21zaSkKIAkJcGNpX2Rpc2FibGVfbXNpKHByaXYtPmRldik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXBjaF9jYW5fcmVzZXQocHJpdik7CisJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+cmVncyk7CiAJZnJlZV9jYW5kZXYocHJpdi0+bmRldik7CiB9CiAKQEAgLTEyMzgsNiArMTIzOCw3IEBACiAJCXByaXYtPnVzZV9tc2kgPSAwOwogCX0gZWxzZSB7CiAJCW5ldGRldl9lcnIobmRldiwgIlBDSCBDQU4gb3BlbmVkIHdpdGggTVNJXG4iKTsKKwkJcGNpX3NldF9tYXN0ZXIocGRldik7CiAJCXByaXYtPnVzZV9tc2kgPSAxOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlNDZhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL0tjb25maWcKQEAgLTAsMCArMSwzMCBAQAorY29uZmlnIENBTl9TT0ZUSU5HCisJdHJpc3RhdGUgIlNvZnRpbmcgR21iaCBDQU4gZ2VuZXJpYyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQ0FOX0RFViAmJiBIQVNfSU9NRU0KKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBDQU4gY2FyZHMgZnJvbSBTb2Z0aW5nIEdtYmggJiBzb21lIGNhcmRzCisJICBmcm9tIFZlY3RvciBHbWJoLgorCSAgU29mdGluZyBHbWJoIENBTiBjYXJkcyBjb21lIHdpdGggMSBvciAyIHBoeXNpY2FsIGJ1c3Nlcy4KKwkgIFRob3NlIGNhcmRzIHR5cGljYWxseSB1c2UgRHVhbCBQb3J0IFJBTSB0byBjb21tdW5pY2F0ZQorCSAgd2l0aCB0aGUgaG9zdCBDUFUuIFRoZSBpbnRlcmZhY2UgaXMgdGhlbiBpZGVudGljYWwgZm9yIFBDSQorCSAgYW5kIFBDTUNJQSBjYXJkcy4gVGhpcyBkcml2ZXIgb3BlcmF0ZXMgb24gYSBwbGF0Zm9ybSBkZXZpY2UsCisJICB3aGljaCBoYXMgYmVlbiBjcmVhdGVkIGJ5IHNvZnRpbmdfY3Mgb3Igc29mdGluZ19wY2kgZHJpdmVyLgorCSAgV2FybmluZzoKKwkgIFRoZSBBUEkgb2YgdGhlIGNhcmQgZG9lcyBub3QgYWxsb3cgZmluZSBjb250cm9sIHBlciBidXMsIGJ1dAorCSAgY29udHJvbHMgdGhlIDIgYnVzc2VzIG9uIHRoZSBjYXJkIHRvZ2V0aGVyLgorCSAgQXMgc3VjaCwgc29tZSBhY3Rpb25zIChzdGFydC9zdG9wL2J1c29mZiByZWNvdmVyeSkgb24gMSBidXMKKwkgIG11c3QgYnJpbmcgZG93biB0aGUgb3RoZXIgYnVzIHRvbyB0ZW1wb3JhcmlseS4KKworY29uZmlnIENBTl9TT0ZUSU5HX0NTCisJdHJpc3RhdGUgIlNvZnRpbmcgR21iaCBDQU4gcGNtY2lhIGNhcmRzIgorCWRlcGVuZHMgb24gUENNQ0lBCisJZGVwZW5kcyBvbiBDQU5fU09GVElORworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIFBDTUNJQSBjYXJkcyBmcm9tIFNvZnRpbmcgR21iaCAmIHNvbWUgY2FyZHMKKwkgIGZyb20gVmVjdG9yIEdtYmguCisJICBZb3UgbmVlZCBmaXJtd2FyZSBmb3IgdGhlc2UsIHdoaWNoIHlvdSBjYW4gZ2V0IGF0CisJICBodHRwOi8vZGV2ZWxvcGVyLmJlcmxpb3MuZGUvcHJvamVjdHMvc29ja2V0Y2FuLworCSAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgaXMgd3JpdHRlbiBhZ2FpbnN0CisJICBmaXJtd2FyZSB2ZXJzaW9uIDQuNiAoc29mdGluZy1mdy00LjYtYmluYXJpZXMudGFyLmd6KQorCSAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjYXJkIGFzIENBTiBkZXZpY2UsIHlvdSBuZWVkIHRoZSBTb2Z0aW5nIGdlbmVyaWMKKwkgIHN1cHBvcnQgdG9vLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWU1MDE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisKK3NvZnRpbmcteSA6PSBzb2Z0aW5nX21haW4ubyBzb2Z0aW5nX2Z3Lm8KK29iai0kKENPTkZJR19DQU5fU09GVElORykgKz0gc29mdGluZy5vCitvYmotJChDT05GSUdfQ0FOX1NPRlRJTkdfQ1MpICs9IHNvZnRpbmdfY3MubworCitjY2ZsYWdzLSQoQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTKSA6PSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nLmggYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjOWY0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmcuaApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIHNvZnRpbmcgY29tbW9uIGludGVyZmFjZXMKKyAqCisgKiBieSBLdXJ0IFZhbiBEaWpjaywgMjAwOC0yMDEwCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi9kZXYuaD4KKworI2luY2x1ZGUgInNvZnRpbmdfcGxhdGZvcm0uaCIKKworc3RydWN0IHNvZnRpbmc7CisKK3N0cnVjdCBzb2Z0aW5nX3ByaXYgeworCXN0cnVjdCBjYW5fcHJpdiBjYW47IC8qIG11c3QgYmUgdGhlIGZpcnN0IG1lbWJlciEgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBzb2Z0aW5nICpjYXJkOworCXN0cnVjdCB7CisJCWludCBwZW5kaW5nOworCQkvKiB2YXJpYWJsZXMgd2ljaCBob2xkIHRoZSBjaXJjdWxhciBidWZmZXIgKi8KKwkJaW50IGVjaG9fcHV0OworCQlpbnQgZWNob19nZXQ7CisJfSB0eDsKKwlzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCBidHJfY29uc3Q7CisJaW50IGluZGV4OworCXVpbnQ4X3Qgb3V0cHV0OworCXVpbnQxNl90IGNoaXA7Cit9OworI2RlZmluZSBuZXRkZXYyc29mdGluZyhuZXRkZXYpCSgoc3RydWN0IHNvZnRpbmdfcHJpdiAqKW5ldGRldl9wcml2KG5ldGRldikpCisKK3N0cnVjdCBzb2Z0aW5nIHsKKwljb25zdCBzdHJ1Y3Qgc29mdGluZ19wbGF0Zm9ybV9kYXRhICpwZGF0OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldFsyXTsKKwlzcGlubG9ja190IHNwaW47IC8qIHByb3RlY3QgdGhpcyBzdHJ1Y3R1cmUgJiBEUFJBTSBhY2Nlc3MgKi8KKwlrdGltZV90IHRzX3JlZjsKKwlrdGltZV90IHRzX292ZXJmbG93OyAvKiB0aW1lc3RhbXAgb3ZlcmZsb3cgdmFsdWUsIGluIGt0aW1lICovCisKKwlzdHJ1Y3QgeworCQkvKiBpbmRpY2F0aW9uIG9mIGZpcm13YXJlIHN0YXR1cyAqLworCQlpbnQgdXA7CisJCS8qIHByb3RlY3Rpb24gb2YgdGhlICd1cCcgdmFyaWFibGUgKi8KKwkJc3RydWN0IG11dGV4IGxvY2s7CisJfSBmdzsKKwlzdHJ1Y3QgeworCQlpbnQgbnI7CisJCWludCByZXF1ZXN0ZWQ7CisJCWludCBzdmNfY291bnQ7CisJCXVuc2lnbmVkIGludCBkcHJhbV9wb3NpdGlvbjsKKwl9IGlycTsKKwlzdHJ1Y3QgeworCQlpbnQgcGVuZGluZzsKKwkJaW50IGxhc3RfYnVzOworCQkvKgorCQkgKiBrZWVwIHRoZSBidXMgdGhhdCBsYXN0IHR4J2QgYSBtZXNzYWdlLAorCQkgKiBpbiBvcmRlciB0byBsZXQgZXZlcnkgbmV0ZGV2IHF1ZXVlIHJlc3VtZQorCQkgKi8KKwl9IHR4OworCV9faW9tZW0gdWludDhfdCAqZHByYW07CisJdW5zaWduZWQgbG9uZyBkcHJhbV9waHlzOworCXVuc2lnbmVkIGxvbmcgZHByYW1fc2l6ZTsKKwlzdHJ1Y3QgeworCQl1aW50MTZfdCBmd192ZXJzaW9uLCBod192ZXJzaW9uLCBsaWNlbnNlLCBzZXJpYWw7CisJCXVpbnQxNl90IGNoaXBbMl07CisJCXVuc2lnbmVkIGludCBmcmVxOyAvKiByZW1vdGUgY3B1J3Mgb3BlcmF0aW5nIGZyZXF1ZW5jeSAqLworCX0gaWQ7Cit9OworCitleHRlcm4gaW50IHNvZnRpbmdfZGVmYXVsdF9vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CisKK2V4dGVybiBrdGltZV90IHNvZnRpbmdfcmF3Mmt0aW1lKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCB1MzIgcmF3KTsKKworZXh0ZXJuIGludCBzb2Z0aW5nX2NoaXBfcG93ZXJvbihzdHJ1Y3Qgc29mdGluZyAqY2FyZCk7CisKK2V4dGVybiBpbnQgc29mdGluZ19ib290bG9hZGVyX2NvbW1hbmQoc3RydWN0IHNvZnRpbmcgKmNhcmQsIGludDE2X3QgY21kLAorCQljb25zdCBjaGFyICptc2cpOworCisvKiBMb2FkIGZpcm13YXJlIGFmdGVyIHJlc2V0ICovCitleHRlcm4gaW50IHNvZnRpbmdfbG9hZF9mdyhjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3Qgc29mdGluZyAqY2FyZCwKKwkJCV9faW9tZW0gdWludDhfdCAqdmlydCwgdW5zaWduZWQgaW50IHNpemUsIGludCBvZmZzZXQpOworCisvKiBMb2FkIGZpbmFsIGFwcGxpY2F0aW9uIGZpcm13YXJlIGFmdGVyIGJvb3Rsb2FkZXIgKi8KK2V4dGVybiBpbnQgc29mdGluZ19sb2FkX2FwcF9mdyhjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3Qgc29mdGluZyAqY2FyZCk7CisKKy8qCisgKiBlbmFibGUgb3IgZGlzYWJsZSBpcnEKKyAqIG9ubHkgY2FsbGVkIHdpdGggZncubG9jayBsb2NrZWQKKyAqLworZXh0ZXJuIGludCBzb2Z0aW5nX2VuYWJsZV9pcnEoc3RydWN0IHNvZnRpbmcgKmNhcmQsIGludCBlbmFibGUpOworCisvKiBzdGFydC9zdG9wIDEgYnVzIG9uIGNhcmQgKi8KK2V4dGVybiBpbnQgc29mdGluZ19zdGFydHN0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHVwKTsKKworLyogbmV0aWZfcngoKSAqLworZXh0ZXJuIGludCBzb2Z0aW5nX25ldGRldl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQljb25zdCBzdHJ1Y3QgY2FuX2ZyYW1lICptc2csIGt0aW1lX3Qga3RpbWUpOworCisvKiBTT0ZUSU5HIERQUkFNIG1hcHBpbmdzICovCisjZGVmaW5lIERQUkFNX1JYCQkweDAwMDAKKwkjZGVmaW5lIERQUkFNX1JYX1NJWkUJMzIKKwkjZGVmaW5lIERQUkFNX1JYX0NOVAkxNgorI2RlZmluZSBEUFJBTV9SWF9SRAkJMHgwMjAxCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fUlhfV1IJCTB4MDIwNQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JYX0xPU1QJCTB4MDIwNwkvKiB1aW50OF90ICovCisKKyNkZWZpbmUgRFBSQU1fRkNUX1BBUkFNCQkweDAzMDAJLyogaW50MTZfdCBbMjBdICovCisjZGVmaW5lIERQUkFNX0ZDVF9SRVNVTFQJMHgwMzI4CS8qIGludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fRkNUX0hPU1QJCTB4MDMyYgkvKiB1aW50MTZfdCAqLworCisjZGVmaW5lIERQUkFNX0lORk9fQlVTU1RBVEUJMHgwMzMxCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX0lORk9fQlVTU1RBVEUyCTB4MDMzNQkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9JTkZPX0VSUlNUQVRFCTB4MDMzOQkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9JTkZPX0VSUlNUQVRFMgkweDAzM2QJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVTRVQJCTB4MDM0MQkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9DTFJfUkVDVl9GSUZPCTB4MDM0NQkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9SRVNFVF9USU1FCTB4MDM0ZAkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9USU1FCQkweDAzNTAJLyogdWludDY0X3QgKi8KKyNkZWZpbmUgRFBSQU1fV1JfU1RBUlQJCTB4MDM1OAkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1dSX0VORAkJMHgwMzU5CS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVTRVRfUlhfRklGTwkweDAzNjEJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVTRVRfVFhfRklGTwkweDAzNjQJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9SRUFEX0ZJRk9fTEVWRUwJMHgwMzY1CS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fUlhfRklGT19MRVZFTAkweDAzNjYJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fVFhfRklGT19MRVZFTAkweDAzNjYJLyogdWludDE2X3QgKi8KKworI2RlZmluZSBEUFJBTV9UWAkJMHgwNDAwCS8qIHVpbnQxNl90ICovCisJI2RlZmluZSBEUFJBTV9UWF9TSVpFCTE2CisJI2RlZmluZSBEUFJBTV9UWF9DTlQJMzIKKyNkZWZpbmUgRFBSQU1fVFhfUkQJCTB4MDYwMQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1RYX1dSCQkweDA2MDUJLyogdWludDhfdCAqLworCisjZGVmaW5lIERQUkFNX0NPTU1BTkQJCTB4MDdlMAkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9SRUNFSVBUCQkweDA3ZjAJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fSVJRX1RPSE9TVAkweDA3ZmUJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9JUlFfVE9DQVJECTB4MDdmZgkvKiB1aW50OF90ICovCisKKyNkZWZpbmUgRFBSQU1fVjJfUkVTRVQJCTB4MGUwMAkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1YyX0lSUV9UT0hPU1QJMHgwZTAyCS8qIHVpbnQ4X3QgKi8KKworI2RlZmluZSBUWE1BWAkoRFBSQU1fVFhfQ05UIC0gMSkKKworLyogRFBSQU0gcmV0dXJuIGNvZGVzICovCisjZGVmaW5lIFJFU19OT05FCTAKKyNkZWZpbmUgUkVTX09LCQkxCisjZGVmaW5lIFJFU19OT0sJCTIKKyNkZWZpbmUgUkVTX1VOS05PV04JMworLyogRFBSQU0gZmxhZ3MgKi8KKyNkZWZpbmUgQ01EX1RYCQkweDAxCisjZGVmaW5lIENNRF9BQ0sJCTB4MDIKKyNkZWZpbmUgQ01EX1hURAkJMHgwNAorI2RlZmluZSBDTURfUlRSCQkweDA4CisjZGVmaW5lIENNRF9FUlIJCTB4MTAKKyNkZWZpbmUgQ01EX0JVUzIJMHg4MAorCisvKiByZXR1cm5lZCBmaWZvIGVudHJ5IGJ1cyBzdGF0ZSBtYXNrcyAqLworI2RlZmluZSBTRl9NQVNLX0JVU09GRgkJMHg4MAorI2RlZmluZSBTRl9NQVNLX0VQQVNTSVZFCTB4NjAKKworLyogYnVzIHN0YXRlcyAqLworI2RlZmluZSBTVEFURV9CVVNPRkYJMgorI2RlZmluZSBTVEFURV9FUEFTU0lWRQkxCisjZGVmaW5lIFNUQVRFX0VBQ1RJVkUJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19jcy5jIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWJiNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX2NzLmMKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMAorICoKKyAqIC0gS3VydCBWYW4gRGlqY2ssIEVJQSBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgorCisjaW5jbHVkZSAic29mdGluZ19wbGF0Zm9ybS5oIgorCitzdGF0aWMgaW50IHNvZnRpbmdjc19pbmRleDsKK3N0YXRpYyBzcGlubG9ja190IHNvZnRpbmdjc19pbmRleF9sb2NrOworCitzdGF0aWMgaW50IHNvZnRpbmdjc19yZXNldChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdik7CitzdGF0aWMgaW50IHNvZnRpbmdjc19lbmFibGVfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB2KTsKKworLyoKKyAqIHBsYXRmb3JtX2RhdGEgZGVzY3JpcHRpb25zCisgKi8KKyNkZWZpbmUgTUhaICgxMDAwKjEwMDApCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSBzb2Z0aW5nY3NfcGxhdGZvcm1fZGF0YVtdID0geworeworCS5uYW1lID0gIkNBTmNhcmQiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDAxLAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAxNiAqIE1IWiwgLm1heF9icnAgPSAzMiwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY2FyZC5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gc29mdGluZ2NzX2VuYWJsZV9pcnEsCit9LCB7CisJLm5hbWUgPSAiQ0FOY2FyZC1ORUMiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDAyLAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAxNiAqIE1IWiwgLm1heF9icnAgPSAzMiwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY2FyZC5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gc29mdGluZ2NzX2VuYWJsZV9pcnEsCit9LCB7CisJLm5hbWUgPSAiQ0FOY2FyZC1TSkEiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDA0LAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAyMCAqIE1IWiwgLm1heF9icnAgPSAzMiwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2Fuc2phLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBzb2Z0aW5nY3NfZW5hYmxlX2lycSwKK30sIHsKKwkubmFtZSA9ICJDQU5jYXJkLTIiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDA1LAorCS5nZW5lcmF0aW9uID0gMiwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAyNCAqIE1IWiwgLm1heF9icnAgPSA2NCwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgxMDAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQyLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZDIuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5jcmQyLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBOVUxMLAorfSwgeworCS5uYW1lID0gIlZlY3Rvci1DQU5jYXJkIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDA4MSwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMTYgKiBNSFosIC5tYXhfYnJwID0gNjQsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNhcmQuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHNvZnRpbmdjc19lbmFibGVfaXJxLAorfSwgeworCS5uYW1lID0gIlZlY3Rvci1DQU5jYXJkLVNKQSIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgwODQsCisJLmdlbmVyYXRpb24gPSAxLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDIwICogTUhaLCAubWF4X2JycCA9IDMyLCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDA4MDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZC5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5zamEuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHNvZnRpbmdjc19lbmFibGVfaXJxLAorfSwgeworCS5uYW1lID0gIlZlY3Rvci1DQU5jYXJkLTIiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDg1LAorCS5nZW5lcmF0aW9uID0gMiwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAyNCAqIE1IWiwgLm1heF9icnAgPSA2NCwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgxMDAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQyLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZDIuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5jcmQyLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBOVUxMLAorfSwgeworCS5uYW1lID0gIkVESUNjYXJkLU5FQyIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgxMDIsCisJLmdlbmVyYXRpb24gPSAxLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDE2ICogTUhaLCAubWF4X2JycCA9IDY0LCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDA4MDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZC5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5jYXJkLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBzb2Z0aW5nY3NfZW5hYmxlX2lycSwKK30sIHsKKwkubmFtZSA9ICJFRElDY2FyZC0yIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDEwNSwKKwkuZ2VuZXJhdGlvbiA9IDIsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMjQgKiBNSFosIC5tYXhfYnJwID0gNjQsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MTAwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkMi5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQyLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY3JkMi5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gTlVMTCwKK30sIHsKKwkwLCAwLAorfSwKK307CisKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImJjYXJkLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKGZ3X2RpciAibGRjYXJkLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKGZ3X2RpciAiY2FuY2FyZC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImNhbnNqYS5iaW4iKTsKKworTU9EVUxFX0ZJUk1XQVJFKGZ3X2RpciAiYmNhcmQyLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKGZ3X2RpciAibGRjYXJkMi5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImNhbmNyZDIuYmluIik7CisKK3N0YXRpYyBfX2RldmluaXQgY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YQorKnNvZnRpbmdjc19maW5kX3BsYXRmb3JtX2RhdGEodW5zaWduZWQgaW50IG1hbmYsIHVuc2lnbmVkIGludCBwcm9kKQoreworCWNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgKmxwOworCisJZm9yIChscCA9IHNvZnRpbmdjc19wbGF0Zm9ybV9kYXRhOyBscC0+bWFuZjsgKytscCkgeworCQlpZiAoKGxwLT5tYW5mID09IG1hbmYpICYmIChscC0+cHJvZCA9PSBwcm9kKSkKKwkJCXJldHVybiBscDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBwbGF0Zm9ybWRhdGEgY2FsbGJhY2tzCisgKi8KK3N0YXRpYyBpbnQgc29mdGluZ2NzX3Jlc2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB2KQoreworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWEgPSB0b19wY21jaWFfZGV2KHBkZXYtPmRldi5wYXJlbnQpOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAicGNtY2lhIGNvbmZpZyBbMl0gJTAyeFxuIiwgdiA/IDAgOiAweDIwKTsKKwlyZXR1cm4gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKHBjbWNpYSwgMiwgdiA/IDAgOiAweDIwKTsKK30KKworc3RhdGljIGludCBzb2Z0aW5nY3NfZW5hYmxlX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdikKK3sKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhID0gdG9fcGNtY2lhX2RldihwZGV2LT5kZXYucGFyZW50KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgInBjbWNpYSBjb25maWcgWzBdICUwMnhcbiIsIHYgPyAweDYwIDogMCk7CisJcmV0dXJuIHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShwY21jaWEsIDAsIHYgPyAweDYwIDogMCk7Cit9CisKKy8qCisgKiBwY21jaWEgY2hlY2sKKyAqLworc3RhdGljIF9fZGV2aW5pdCBpbnQgc29mdGluZ2NzX3Byb2JlX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhLAorCQl2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSAqcGRhdCA9IHByaXZfZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnByZXM7CisJaW50IG1lbXNwZWVkID0gMDsKKworCVdBUk5fT04oIXBkYXQpOworCXByZXMgPSBwY21jaWEtPnJlc291cmNlW1BDTUNJQV9JT01FTV8wXTsKKwlpZiAocmVzb3VyY2Vfc2l6ZShwcmVzKSA8IDB4MTAwMCkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlwcmVzLT5mbGFncyB8PSBXSU5fTUVNT1JZX1RZUEVfQ00gfCBXSU5fRU5BQkxFOworCWlmIChwZGF0LT5nZW5lcmF0aW9uIDwgMikgeworCQlwcmVzLT5mbGFncyB8PSBXSU5fVVNFX1dBSVQgfCBXSU5fREFUQV9XSURUSF84OworCQltZW1zcGVlZCA9IDM7CisJfSBlbHNlIHsKKwkJcHJlcy0+ZmxhZ3MgfD0gV0lOX0RBVEFfV0lEVEhfMTY7CisJfQorCXJldHVybiBwY21jaWFfcmVxdWVzdF93aW5kb3cocGNtY2lhLCBwcmVzLCBtZW1zcGVlZCk7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgdm9pZCBzb2Z0aW5nY3NfcmVtb3ZlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWEpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBjbWNpYS0+cHJpdjsKKworCS8qIGZyZWUgYml0cyAqLworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCS8qIHJlbGVhc2UgcGNtY2lhIHN0dWZmICovCisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHBjbWNpYSk7Cit9CisKKy8qCisgKiBwbGF0Zm9ybV9kZXZpY2Ugd3JhcHBlcgorICogcGRldi0+cmVzb3VyY2UgaGFzIDIgZW50cmllczogaW8gJiBpcnEKKyAqLworc3RhdGljIHZvaWQgc29mdGluZ2NzX3BkZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWtmcmVlKHBkZXYpOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCBzb2Z0aW5nY3NfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSAqcGRhdDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnByZXM7CisJc3RydWN0IGRldiB7CisJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGRldjsKKwkJc3RydWN0IHJlc291cmNlIHJlc1syXTsKKwl9ICpkZXY7CisKKwkvKiBmaW5kIG1hdGNoaW5nIHBsYXRmb3JtX2RhdGEgKi8KKwlwZGF0ID0gc29mdGluZ2NzX2ZpbmRfcGxhdGZvcm1fZGF0YShwY21jaWEtPm1hbmZfaWQsIHBjbWNpYS0+Y2FyZF9pZCk7CisJaWYgKCFwZGF0KQorCQlyZXR1cm4gLUVOT1RUWTsKKworCS8qIHNldHVwIHBjbWNpYSBkZXZpY2UgKi8KKwlwY21jaWEtPmNvbmZpZ19mbGFncyB8PSBDT05GX0VOQUJMRV9JUlEgfCBDT05GX0FVVE9fU0VUX0lPTUVNIHwKKwkJQ09ORl9BVVRPX1NFVF9WUFAgfCBDT05GX0FVVE9fQ0hFQ0tfVkNDOworCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhwY21jaWEsIHNvZnRpbmdjc19wcm9iZV9jb25maWcsICh2b2lkICopcGRhdCk7CisJaWYgKHJldCkKKwkJZ290byBwY21jaWFfZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX2VuYWJsZV9kZXZpY2UocGNtY2lhKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBwY21jaWFfZmFpbGVkOworCisJcHJlcyA9IHBjbWNpYS0+cmVzb3VyY2VbUENNQ0lBX0lPTUVNXzBdOworCWlmICghcHJlcykgeworCQlyZXQgPSAtRUJBREY7CisJCWdvdG8gcGNtY2lhX2JhZDsKKwl9CisKKwkvKiBjcmVhdGUgc29mdGluZyBwbGF0Zm9ybSBkZXZpY2UgKi8KKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBtZW1fZmFpbGVkOworCX0KKwlkZXYtPnBkZXYucmVzb3VyY2UgPSBkZXYtPnJlczsKKwlkZXYtPnBkZXYubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoZGV2LT5yZXMpOworCWRldi0+cGRldi5kZXYucmVsZWFzZSA9IHNvZnRpbmdjc19wZGV2X3JlbGVhc2U7CisKKwlwZGV2ID0gJmRldi0+cGRldjsKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9ICh2b2lkICopcGRhdDsKKwlwZGV2LT5kZXYucGFyZW50ID0gJnBjbWNpYS0+ZGV2OworCXBjbWNpYS0+cHJpdiA9IHBkZXY7CisKKwkvKiBwbGF0Zm9ybSBkZXZpY2UgcmVzb3VyY2VzICovCisJcGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKwlwZGV2LT5yZXNvdXJjZVswXS5zdGFydCA9IHByZXMtPnN0YXJ0OworCXBkZXYtPnJlc291cmNlWzBdLmVuZCA9IHByZXMtPmVuZDsKKworCXBkZXYtPnJlc291cmNlWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7CisJcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQgPSBwY21jaWEtPmlycTsKKwlwZGV2LT5yZXNvdXJjZVsxXS5lbmQgPSBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydDsKKworCS8qIHBsYXRmb3JtIGRldmljZSBzZXR1cCAqLworCXNwaW5fbG9jaygmc29mdGluZ2NzX2luZGV4X2xvY2spOworCXBkZXYtPmlkID0gc29mdGluZ2NzX2luZGV4Kys7CisJc3Bpbl91bmxvY2soJnNvZnRpbmdjc19pbmRleF9sb2NrKTsKKwlwZGV2LT5uYW1lID0gInNvZnRpbmciOworCWRldl9zZXRfbmFtZSgmcGRldi0+ZGV2LCAic29mdGluZ2NzLiVpIiwgcGRldi0+aWQpOworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBwbGF0Zm9ybV9mYWlsZWQ7CisKKwlkZXZfaW5mbygmcGNtY2lhLT5kZXYsICJjcmVhdGVkICVzXG4iLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJcmV0dXJuIDA7CisKK3BsYXRmb3JtX2ZhaWxlZDoKKwlrZnJlZShkZXYpOworbWVtX2ZhaWxlZDoKK3BjbWNpYV9iYWQ6CitwY21jaWFfZmFpbGVkOgorCXBjbWNpYV9kaXNhYmxlX2RldmljZShwY21jaWEpOworCXBjbWNpYS0+cHJpdiA9IE5VTEw7CisJcmV0dXJuIHJldCA/OiAtRU5PREVWOworfQorCitzdGF0aWMgLypjb25zdCovIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIHNvZnRpbmdjc19pZHNbXSA9IHsKKwkvKiBzb2Z0aW5nICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwMDEpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDAyKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDAwNCksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwMDUpLAorCS8qIHZlY3RvciwgbWFudWZhY3R1cmVyPyAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDgxKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDA4NCksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwODUpLAorCS8qIEVESUMgKi8KKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDEwMiksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAxMDUpLAorCVBDTUNJQV9ERVZJQ0VfTlVMTCwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBzb2Z0aW5nY3NfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyIHNvZnRpbmdjc19kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJzb2Z0aW5nY3MiLAorCS5pZF90YWJsZQk9IHNvZnRpbmdjc19pZHMsCisJLnByb2JlCQk9IHNvZnRpbmdjc19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNvZnRpbmdjc19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc29mdGluZ2NzX3N0YXJ0KHZvaWQpCit7CisJc3Bpbl9sb2NrX2luaXQoJnNvZnRpbmdjc19pbmRleF9sb2NrKTsKKwlyZXR1cm4gcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmc29mdGluZ2NzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzb2Z0aW5nY3Nfc3RvcCh2b2lkKQoreworCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmc29mdGluZ2NzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNvZnRpbmdjc19zdGFydCk7Cittb2R1bGVfZXhpdChzb2Z0aW5nY3Nfc3RvcCk7CisKK01PRFVMRV9ERVNDUklQVElPTigic29mdGluZyBDQU5jYXJkIGRyaXZlciIKKwkJIiwgbGlua3MgUENNQ0lBIGNhcmQgdG8gc29mdGluZyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfZncuYyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTIwNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19mdy5jCkBAIC0wLDAgKzEsNjkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAKKyAqCisgKiAtIEt1cnQgVmFuIERpamNrLCBFSUEgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgInNvZnRpbmcuaCIKKworLyoKKyAqIGxvdyBsZXZlbCBEUFJBTSBjb21tYW5kLgorICogTWFrZSBzdXJlIHRoYXQgY2FyZC0+ZHByYW1bRFBSQU1fRkNUX0hPU1RdIGlzIHByZXNldAorICovCitzdGF0aWMgaW50IF9zb2Z0aW5nX2ZjdF9jbWQoc3RydWN0IHNvZnRpbmcgKmNhcmQsIGludDE2X3QgY21kLCB1aW50MTZfdCB2ZWN0b3IsCisJCWNvbnN0IGNoYXIgKm1zZykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgc3RhbXA7CisKKwlpb3dyaXRlMTYoY21kLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNXSk7CisJaW93cml0ZTgodmVjdG9yID4+IDgsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfSE9TVCArIDFdKTsKKwlpb3dyaXRlOCh2ZWN0b3IsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfSE9TVF0pOworCS8qIGJlIHN1cmUgdG8gZmx1c2ggdGhpcyB0byB0aGUgY2FyZCAqLworCXdtYigpOworCXN0YW1wID0gamlmZmllcyArIDEgKiBIWjsKKwkvKiB3YWl0IGZvciBjYXJkICovCisJZG8geworCQkvKiBEUFJBTV9GQ1RfSE9TVCBpcyBfbm90XyBhbGlnbmVkICovCisJCXJldCA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9IT1NUXSkgKworCQkJKGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9IT1NUICsgMV0pIDw8IDgpOworCQkvKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgdmFyaWFibGVzICovCisJCXJtYigpOworCQlpZiAocmV0ID09IFJFU19PSykKKwkJCS8qIHJlYWQgcmV0dXJuLXZhbHVlIG5vdyAqLworCQkJcmV0dXJuIGlvcmVhZDE2KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUkVTVUxUXSk7CisKKwkJaWYgKChyZXQgIT0gdmVjdG9yKSB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIHN0YW1wKSkKKwkJCWJyZWFrOworCQkvKiBwcm9jZXNzIGNvbnRleHQgPT4gcmVsYXggKi8KKwkJdXNsZWVwX3JhbmdlKDUwMCwgMTAwMDApOworCX0gd2hpbGUgKDEpOworCisJcmV0ID0gKHJldCA9PSBSRVNfTk9ORSkgPyAtRVRJTUVET1VUIDogLUVDQU5DRUxFRDsKKwlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgImZpcm13YXJlICVzIGZhaWxlZCAoJWkpXG4iLCBtc2csIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzb2Z0aW5nX2ZjdF9jbWQoc3RydWN0IHNvZnRpbmcgKmNhcmQsIGludDE2X3QgY21kLCBjb25zdCBjaGFyICptc2cpCit7CisJaW50IHJldDsKKworCXJldCA9IF9zb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgY21kLCAwLCBtc2cpOworCWlmIChyZXQgPiAwKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiJXMgcmV0dXJuZWQgJXVcbiIsIG1zZywgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQxNl90IGNtZCwKKwkJY29uc3QgY2hhciAqbXNnKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBzdGFtcDsKKworCWlvd3JpdGUxNihSRVNfTk9ORSwgJmNhcmQtPmRwcmFtW0RQUkFNX1JFQ0VJUFRdKTsKKwlpb3dyaXRlMTYoY21kLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORF0pOworCS8qIGJlIHN1cmUgdG8gZmx1c2ggdGhpcyB0byB0aGUgY2FyZCAqLworCXdtYigpOworCXN0YW1wID0gamlmZmllcyArIDMgKiBIWjsKKwkvKiB3YWl0IGZvciBjYXJkICovCisJZG8geworCQlyZXQgPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fUkVDRUlQVF0pOworCQkvKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgdmFyaWFibGVzICovCisJCXJtYigpOworCQlpZiAocmV0ID09IFJFU19PSykKKwkJCXJldHVybiAwOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGFtcCkpCisJCQlicmVhazsKKwkJLyogcHJvY2VzcyBjb250ZXh0ID0+IHJlbGF4ICovCisJCXVzbGVlcF9yYW5nZSg1MDAsIDEwMDAwKTsKKwl9IHdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOworCisJcmV0ID0gKHJldCA9PSBSRVNfTk9ORSkgPyAtRVRJTUVET1VUIDogLUVDQU5DRUxFRDsKKwlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgImJvb3Rsb2FkZXIgJXMgZmFpbGVkICglaSlcbiIsIG1zZywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZ3X3BhcnNlKGNvbnN0IHVpbnQ4X3QgKipwbWVtLCB1aW50MTZfdCAqcHR5cGUsIHVpbnQzMl90ICpwYWRkciwKKwkJdWludDE2X3QgKnBsZW4sIGNvbnN0IHVpbnQ4X3QgKipwZGF0KQoreworCXVpbnQxNl90IGNoZWNrc3VtWzJdOworCWNvbnN0IHVpbnQ4X3QgKm1lbTsKKwljb25zdCB1aW50OF90ICplbmQ7CisKKwkvKgorCSAqIGZpcm13YXJlIHJlY29yZHMgYXJlIGEgYmluYXJ5LCB1bmFsaWduZWQgc3RyZWFtIGNvbXBvc2VkIG9mOgorCSAqIHVpbnQxNl90IHR5cGU7CisJICogdWludDMyX3QgYWRkcjsKKwkgKiB1aW50MTZfdCBsZW47CisJICogdWludDhfdCBkYXRbbGVuXTsKKwkgKiB1aW50MTZfdCBjaGVja3N1bTsKKwkgKiBhbGwgdmFsdWVzIGluIGxpdHRsZSBlbmRpYW4uCisJICogV2UgY291bGQgZGVmaW5lIGEgc3RydWN0IGZvciB0aGlzLCB3aXRoIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpLAorCSAqIGJ1dCB3b3VsZCB0aGF0IHNvbHZlIHRoZSBhbGlnbm1lbnQgaW4gX2FsbF8gY2FzZXMgKGNmci4gdGhlCisJICogc3RydWN0IGl0c2VsZiBtYXkgYmUgYW4gb2RkIGFkZHJlc3MpPworCSAqCisJICogSSBjaG9zZSB0byB1c2UgbGVYWF90b19jcHVwKCkgc2luY2UgdGhpcyBzb2x2ZXMgYm90aAorCSAqIGVuZGlhbm5lc3MgJiBhbGlnbm1lbnQuCisJICovCisJbWVtID0gKnBtZW07CisJKnB0eXBlID0gbGUxNl90b19jcHVwKCh2b2lkICopJm1lbVswXSk7CisJKnBhZGRyID0gbGUzMl90b19jcHVwKCh2b2lkICopJm1lbVsyXSk7CisJKnBsZW4gPSBsZTE2X3RvX2NwdXAoKHZvaWQgKikmbWVtWzZdKTsKKwkqcGRhdCA9ICZtZW1bOF07CisJLyogdmVyaWZ5IGNoZWNrc3VtICovCisJZW5kID0gJm1lbVs4ICsgKnBsZW5dOworCWNoZWNrc3VtWzBdID0gbGUxNl90b19jcHVwKCh2b2lkICopZW5kKTsKKwlmb3IgKGNoZWNrc3VtWzFdID0gMDsgbWVtIDwgZW5kOyArK21lbSkKKwkJY2hlY2tzdW1bMV0gKz0gKm1lbTsKKwlpZiAoY2hlY2tzdW1bMF0gIT0gY2hlY2tzdW1bMV0pCisJCXJldHVybiAtRUlOVkFMOworCS8qIGluY3JlbWVudCAqLworCSpwbWVtICs9IDEwICsgKnBsZW47CisJcmV0dXJuIDA7Cit9CisKK2ludCBzb2Z0aW5nX2xvYWRfZncoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHNvZnRpbmcgKmNhcmQsCisJCV9faW9tZW0gdWludDhfdCAqZHByYW0sIHVuc2lnbmVkIGludCBzaXplLCBpbnQgb2Zmc2V0KQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IHJldDsKKwljb25zdCB1aW50OF90ICptZW0sICplbmQsICpkYXQ7CisJdWludDE2X3QgdHlwZSwgbGVuOworCXVpbnQzMl90IGFkZHI7CisJdWludDhfdCAqYnVmID0gTlVMTDsKKwlpbnQgYnVmbGVuID0gMDsKKwlpbnQ4X3QgdHlwZV9lbmQgPSAwOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZpbGUsICZjYXJkLT5wZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWRldl9kYmcoJmNhcmQtPnBkZXYtPmRldiwgIiVzLCBmaXJtd2FyZSglcykgZ290ICV1IGJ5dGVzIgorCQkiLCBvZmZzZXQgJWMweCUwNHhcbiIsCisJCWNhcmQtPnBkYXQtPm5hbWUsIGZpbGUsICh1bnNpZ25lZCBpbnQpZnctPnNpemUsCisJCShvZmZzZXQgPj0gMCkgPyAnKycgOiAnLScsICh1bnNpZ25lZCBpbnQpYWJzKG9mZnNldCkpOworCS8qIHBhcnNlIHRoZSBmaXJtd2FyZSAqLworCW1lbSA9IGZ3LT5kYXRhOworCWVuZCA9ICZtZW1bZnctPnNpemVdOworCS8qIGxvb2sgZm9yIGhlYWRlciByZWNvcmQgKi8KKwlyZXQgPSBmd19wYXJzZSgmbWVtLCAmdHlwZSwgJmFkZHIsICZsZW4sICZkYXQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwlpZiAodHlwZSAhPSAweGZmZmYpCisJCWdvdG8gZmFpbGVkOworCWlmIChzdHJuY21wKCJTdHJ1Y3R1cmVkIEJpbmFyeSBGb3JtYXQsIFNvZnRpbmcgR21iSCIgLCBkYXQsIGxlbikpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBmYWlsZWQ7CisJfQorCS8qIG9rLCB3ZSBoYWQgYSBoZWFkZXIgKi8KKwl3aGlsZSAobWVtIDwgZW5kKSB7CisJCXJldCA9IGZ3X3BhcnNlKCZtZW0sICZ0eXBlLCAmYWRkciwgJmxlbiwgJmRhdCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCWlmICh0eXBlID09IDMpIHsKKwkJCS8qIHN0YXJ0IGFkZHJlc3MsIG5vdCB1c2VkIGhlcmUgKi8KKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHR5cGUgPT0gMSkgeworCQkJLyogZW9mICovCisJCQl0eXBlX2VuZCA9IDE7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICh0eXBlICE9IDApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCWlmICgoYWRkciArIGxlbiArIG9mZnNldCkgPiBzaXplKQorCQkJZ290byBmYWlsZWQ7CisJCW1lbWNweV90b2lvKCZkcHJhbVthZGRyICsgb2Zmc2V0XSwgZGF0LCBsZW4pOworCQkvKiBiZSBzdXJlIHRvIGZsdXNoIGNhY2hlcyBmcm9tIElPIHNwYWNlICovCisJCW1iKCk7CisJCWlmIChsZW4gPiBidWZsZW4pIHsKKwkJCS8qIGFsaWduIGJ1ZmxlbiAqLworCQkJYnVmbGVuID0gKGxlbiArICgxMDI0LTEpKSAmIH4oMTAyNC0xKTsKKwkJCWJ1ZiA9IGtyZWFsbG9jKGJ1ZiwgYnVmbGVuLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghYnVmKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKwkJfQorCQkvKiB2ZXJpZnkgcmVjb3JkIGRhdGEgKi8KKwkJbWVtY3B5X2Zyb21pbyhidWYsICZkcHJhbVthZGRyICsgb2Zmc2V0XSwgbGVuKTsKKwkJaWYgKG1lbWNtcChidWYsIGRhdCwgbGVuKSkgeworCQkJLyogaXMgbm90IG9rICovCisJCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgIkRQUkFNIHJlYWRiYWNrIGZhaWxlZFxuIik7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwl9CisJaWYgKCF0eXBlX2VuZCkKKwkJLyogbm8gZW5kIHJlY29yZCBzZWVuICovCisJCWdvdG8gZmFpbGVkOworCXJldCA9IDA7CitmYWlsZWQ6CisJa2ZyZWUoYnVmKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2luZm8oJmNhcmQtPnBkZXYtPmRldiwgImZpcm13YXJlICVzIGZhaWxlZFxuIiwgZmlsZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHNvZnRpbmdfbG9hZF9hcHBfZncoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljb25zdCB1aW50OF90ICptZW0sICplbmQsICpkYXQ7CisJaW50IHJldCwgajsKKwl1aW50MTZfdCB0eXBlLCBsZW47CisJdWludDMyX3QgYWRkciwgc3RhcnRfYWRkciA9IDA7CisJdW5zaWduZWQgaW50IHN1bSwgcnhfc3VtOworCWludDhfdCB0eXBlX2VuZCA9IDAsIHR5cGVfZW50cnlwb2ludCA9IDA7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZSwgJmNhcmQtPnBkZXYtPmRldik7CisJaWYgKHJldCkgeworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgInJlcXVlc3RfZmlybXdhcmUoJXMpIGdvdCAlaVxuIiwKKwkJCWZpbGUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWRldl9kYmcoJmNhcmQtPnBkZXYtPmRldiwgImZpcm13YXJlKCVzKSBnb3QgJWx1IGJ5dGVzXG4iLAorCQlmaWxlLCAodW5zaWduZWQgbG9uZylmdy0+c2l6ZSk7CisJLyogcGFyc2UgdGhlIGZpcm13YXJlICovCisJbWVtID0gZnctPmRhdGE7CisJZW5kID0gJm1lbVtmdy0+c2l6ZV07CisJLyogbG9vayBmb3IgaGVhZGVyIHJlY29yZCAqLworCXJldCA9IGZ3X3BhcnNlKCZtZW0sICZ0eXBlLCAmYWRkciwgJmxlbiwgJmRhdCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisJcmV0ID0gLUVJTlZBTDsKKwlpZiAodHlwZSAhPSAweGZmZmYpIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSBzdGFydHMgd2l0aCB0eXBlIDB4JXhcbiIsCisJCQl0eXBlKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCWlmIChzdHJuY21wKCJTdHJ1Y3R1cmVkIEJpbmFyeSBGb3JtYXQsIFNvZnRpbmcgR21iSCIsIGRhdCwgbGVuKSkgeworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgImZpcm13YXJlIHN0cmluZyAnJS4qcycgZmF1bHRcbiIsCisJCQkJbGVuLCBkYXQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisJLyogb2ssIHdlIGhhZCBhIGhlYWRlciAqLworCXdoaWxlIChtZW0gPCBlbmQpIHsKKwkJcmV0ID0gZndfcGFyc2UoJm1lbSwgJnR5cGUsICZhZGRyLCAmbGVuLCAmZGF0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOworCisJCWlmICh0eXBlID09IDMpIHsKKwkJCS8qIHN0YXJ0IGFkZHJlc3MgKi8KKwkJCXN0YXJ0X2FkZHIgPSBhZGRyOworCQkJdHlwZV9lbnRyeXBvaW50ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHR5cGUgPT0gMSkgeworCQkJLyogZW9mICovCisJCQl0eXBlX2VuZCA9IDE7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICh0eXBlICE9IDApIHsKKwkJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LAorCQkJCQkidW5rbm93biByZWNvcmQgdHlwZSAweCUwNHhcbiIsIHR5cGUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJLyogcmVndWFsYXIgZGF0YSAqLworCQlmb3IgKHN1bSA9IDAsIGogPSAwOyBqIDwgbGVuOyArK2opCisJCQlzdW0gKz0gZGF0W2pdOworCQkvKiB3b3JrIGluIDE2Yml0ICh0YXJnZXQpICovCisJCXN1bSAmPSAweGZmZmY7CisKKwkJbWVtY3B5X3RvaW8oJmNhcmQtPmRwcmFtW2NhcmQtPnBkYXQtPmFwcC5vZmZzXSwgZGF0LCBsZW4pOworCQlpb3dyaXRlMzIoY2FyZC0+cGRhdC0+YXBwLm9mZnMgKyBjYXJkLT5wZGF0LT5hcHAuYWRkciwKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDJdKTsKKwkJaW93cml0ZTMyKGFkZHIsICZjYXJkLT5kcHJhbVtEUFJBTV9DT01NQU5EICsgNl0pOworCQlpb3dyaXRlMTYobGVuLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDEwXSk7CisJCWlvd3JpdGU4KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9DT01NQU5EICsgMTJdKTsKKwkJcmV0ID0gc29mdGluZ19ib290bG9hZGVyX2NvbW1hbmQoY2FyZCwgMSwgImxvYWRpbmcgYXBwLiIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiB2ZXJpZnkgY2hlY2tzdW0gKi8KKwkJcnhfc3VtID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX1JFQ0VJUFQgKyAyXSk7CisJCWlmIChyeF9zdW0gIT0gc3VtKSB7CisJCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgIlNSQU0gc2VlbXMgdG8gYmUgZGFtYWdlZCIKKwkJCQkiLCB3YW50ZWQgMHglMDR4LCBnb3QgMHglMDR4XG4iLCBzdW0sIHJ4X3N1bSk7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwl9CisJaWYgKCF0eXBlX2VuZCB8fCAhdHlwZV9lbnRyeXBvaW50KQorCQlnb3RvIGZhaWxlZDsKKwkvKiBzdGFydCBhcHBsaWNhdGlvbiBpbiBjYXJkICovCisJaW93cml0ZTMyKHN0YXJ0X2FkZHIsICZjYXJkLT5kcHJhbVtEUFJBTV9DT01NQU5EICsgMl0pOworCWlvd3JpdGU4KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9DT01NQU5EICsgNl0pOworCXJldCA9IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKGNhcmQsIDMsICJzdGFydCBhcHAuIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCXJldCA9IDA7CitmYWlsZWQ6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJaWYgKHJldCA8IDApCisJCWRldl9pbmZvKCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSAlcyBmYWlsZWRcbiIsIGZpbGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ19yZXNldF9jaGlwKHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWludCByZXQ7CisKKwlkbyB7CisJCS8qIHJlc2V0IGNoaXAgKi8KKwkJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX1JFU0VUX1JYX0ZJRk9dKTsKKwkJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX1JFU0VUX1JYX0ZJRk8rMV0pOworCQlpb3dyaXRlOCgxLCAmY2FyZC0+ZHByYW1bRFBSQU1fUkVTRVRdKTsKKwkJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX1JFU0VUKzFdKTsKKworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMCwgInJlc2V0X2NhbiIpOworCQlpZiAoIXJldCkKKwkJCWJyZWFrOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkvKiBkb24ndCB3YWl0IGFueSBsb25nZXIgKi8KKwkJCWJyZWFrOworCX0gd2hpbGUgKDEpOworCWNhcmQtPnR4LnBlbmRpbmcgPSAwOworCXJldHVybiByZXQ7Cit9CisKK2ludCBzb2Z0aW5nX2NoaXBfcG93ZXJvbihzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpbnQgcmV0OworCS8qIHN5bmMgKi8KKwlyZXQgPSBfc29mdGluZ19mY3RfY21kKGNhcmQsIDk5LCAweDU1LCAic3luYy1hIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gX3NvZnRpbmdfZmN0X2NtZChjYXJkLCA5OSwgMHhhYSwgInN5bmMtYiIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHNvZnRpbmdfcmVzZXRfY2hpcChjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJLyogZ2V0X3NlcmlhbCAqLworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCA0MywgImdldF9zZXJpYWxfbnVtYmVyIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCWNhcmQtPmlkLnNlcmlhbCA9IGlvcmVhZDMyKCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU1dKTsKKwkvKiBnZXRfdmVyc2lvbiAqLworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAxMiwgImdldF92ZXJzaW9uIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCWNhcmQtPmlkLmZ3X3ZlcnNpb24gPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCWNhcmQtPmlkLmh3X3ZlcnNpb24gPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCWNhcmQtPmlkLmxpY2Vuc2UgPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNl0pOworCWNhcmQtPmlkLmNoaXBbMF0gPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgOF0pOworCWNhcmQtPmlkLmNoaXBbMV0gPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTBdKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzb2Z0aW5nX2luaXRpYWxpemVfdGltZXN0YW1wKHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCXVpbnQ2NF90IG92ZjsKKworCWNhcmQtPnRzX3JlZiA9IGt0aW1lX2dldCgpOworCisJLyogMTZNSHogaXMgdGhlIHJlZmVyZW5jZSAqLworCW92ZiA9IDB4MTAwMDAwMDAwVUxMICogMTY7CisJZG9fZGl2KG92ZiwgY2FyZC0+cGRhdC0+ZnJlcSA/OiAxNik7CisKKwljYXJkLT50c19vdmVyZmxvdyA9IGt0aW1lX2FkZF91cyhrdGltZV9zZXQoMCwgMCksIG92Zik7Cit9CisKK2t0aW1lX3Qgc29mdGluZ19yYXcya3RpbWUoc3RydWN0IHNvZnRpbmcgKmNhcmQsIHUzMiByYXcpCit7CisJdWludDY0X3QgcmF3bDsKKwlrdGltZV90IG5vdywgcmVhbF9vZmZzZXQ7CisJa3RpbWVfdCB0YXJnZXQ7CisJa3RpbWVfdCB0bXA7CisKKwlub3cgPSBrdGltZV9nZXQoKTsKKwlyZWFsX29mZnNldCA9IGt0aW1lX3N1YihrdGltZV9nZXRfcmVhbCgpLCBub3cpOworCisJLyogZmluZCBuc2VjIGZyb20gY2FyZCAqLworCXJhd2wgPSByYXcgKiAxNjsKKwlkb19kaXYocmF3bCwgY2FyZC0+cGRhdC0+ZnJlcSA/OiAxNik7CisJdGFyZ2V0ID0ga3RpbWVfYWRkX3VzKGNhcmQtPnRzX3JlZiwgcmF3bCk7CisJLyogdGVzdCBmb3Igb3ZlcmZsb3dzICovCisJdG1wID0ga3RpbWVfYWRkKHRhcmdldCwgY2FyZC0+dHNfb3ZlcmZsb3cpOworCXdoaWxlICh1bmxpa2VseShrdGltZV90b19ucyh0bXApID4ga3RpbWVfdG9fbnMobm93KSkpIHsKKwkJY2FyZC0+dHNfcmVmID0ga3RpbWVfYWRkKGNhcmQtPnRzX3JlZiwgY2FyZC0+dHNfb3ZlcmZsb3cpOworCQl0YXJnZXQgPSB0bXA7CisJCXRtcCA9IGt0aW1lX2FkZCh0YXJnZXQsIGNhcmQtPnRzX292ZXJmbG93KTsKKwl9CisJcmV0dXJuIGt0aW1lX2FkZCh0YXJnZXQsIHJlYWxfb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc29mdGluZ19lcnJvcl9yZXBvcnRpbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXJldHVybiAocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFX0JFUlJfUkVQT1JUSU5HKQorCQk/IDEgOiAwOworfQorCitpbnQgc29mdGluZ19zdGFydHN0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHVwKQoreworCWludCByZXQ7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQ7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCWludCBidXNfYml0bWFza19zdGFydDsKKwlpbnQgaiwgZXJyb3JfcmVwb3J0aW5nOworCXN0cnVjdCBjYW5fZnJhbWUgbXNnOworCWNvbnN0IHN0cnVjdCBjYW5fYml0dGltaW5nICpidDsKKworCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWNhcmQgPSBwcml2LT5jYXJkOworCisJaWYgKCFjYXJkLT5mdy51cCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhcmQtPmZ3LmxvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlidXNfYml0bWFza19zdGFydCA9IDA7CisJaWYgKGRldiAmJiB1cCkKKwkJLyogcHJlcGFyZSB0byBzdGFydCB0aGlzIGJ1cyBhcyB3ZWxsICovCisJCWJ1c19iaXRtYXNrX3N0YXJ0IHw9ICgxIDw8IHByaXYtPmluZGV4KTsKKwkvKiBicmluZyBuZXRkZXZzIGRvd24gKi8KKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0W2pdOworCQlpZiAoIW5ldGRldikKKwkJCWNvbnRpbnVlOworCQlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCQlpZiAoZGV2ICE9IG5ldGRldikKKwkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCQlpZiAoZGV2ICE9IG5ldGRldikKKwkJCQlidXNfYml0bWFza19zdGFydCB8PSAoMSA8PCBqKTsKKwkJCXByaXYtPnR4LnBlbmRpbmcgPSAwOworCQkJcHJpdi0+dHguZWNob19wdXQgPSAwOworCQkJcHJpdi0+dHguZWNob19nZXQgPSAwOworCQkJLyoKKwkJCSAqIHRoaXMgYnVzJyBtYXkganVzdCBoYXZlIGNhbGxlZCBvcGVuX2NhbmRldigpCisJCQkgKiB3aGljaCBpcyByYXRoZXIgc3R1cGlkIHRvIGNhbGwgY2xvc2VfY2FuZGV2KCkKKwkJCSAqIGFscmVhZHkKKwkJCSAqIGJ1dCB3ZSBtYXkgY29tZSBoZXJlIGZyb20gYnVzb2ZmIHJlY292ZXJ5IHRvbworCQkJICogaW4gd2hpY2ggY2FzZSB0aGUgZWNob19za2IgX25lZWRzXyBmbHVzaGluZyB0b28uCisJCQkgKiBqdXN0IGJlIHN1cmUgdG8gY2FsbCBvcGVuX2NhbmRldigpIGFnYWluCisJCQkgKi8KKwkJCWNsb3NlX2NhbmRldihuZXRkZXYpOworCQl9CisJCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9TVE9QUEVEOworCX0KKwljYXJkLT50eC5wZW5kaW5nID0gMDsKKworCXNvZnRpbmdfZW5hYmxlX2lycShjYXJkLCAwKTsKKwlyZXQgPSBzb2Z0aW5nX3Jlc2V0X2NoaXAoY2FyZCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisJaWYgKCFidXNfYml0bWFza19zdGFydCkKKwkJLyogbm8gYnVzc2VzIHRvIGJlIGJyb3VnaHQgdXAgKi8KKwkJZ290byBjYXJkX2RvbmU7CisKKwlpZiAoKGJ1c19iaXRtYXNrX3N0YXJ0ICYgMSkgJiYgKGJ1c19iaXRtYXNrX3N0YXJ0ICYgMikKKwkJCSYmIChzb2Z0aW5nX2Vycm9yX3JlcG9ydGluZyhjYXJkLT5uZXRbMF0pCisJCQkJIT0gc29mdGluZ19lcnJvcl9yZXBvcnRpbmcoY2FyZC0+bmV0WzFdKSkpIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsCisJCQkJImVycl9yZXBvcnRpbmcgZmxhZyBkaWZmZXJzIGZvciBidXNzZXNcbiIpOworCQlnb3RvIGludmFsaWQ7CisJfQorCWVycm9yX3JlcG9ydGluZyA9IDA7CisJaWYgKGJ1c19iaXRtYXNrX3N0YXJ0ICYgMSkgeworCQluZXRkZXYgPSBjYXJkLT5uZXRbMF07CisJCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQllcnJvcl9yZXBvcnRpbmcgKz0gc29mdGluZ19lcnJvcl9yZXBvcnRpbmcobmV0ZGV2KTsKKwkJLyogaW5pdCBjaGlwIDEgKi8KKwkJYnQgPSAmcHJpdi0+Y2FuLmJpdHRpbWluZzsKKwkJaW93cml0ZTE2KGJ0LT5icnAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJCWlvd3JpdGUxNihidC0+c2p3LCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCQlpb3dyaXRlMTYoYnQtPnBoYXNlX3NlZzEgKyBidC0+cHJvcF9zZWcsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDZdKTsKKwkJaW93cml0ZTE2KGJ0LT5waGFzZV9zZWcyLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgOF0pOworCQlpb3dyaXRlMTYoKHByaXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV8zX1NBTVBMRVMpID8gMSA6IDAsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEwXSk7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAxLCAiaW5pdGlhbGl6ZV9jaGlwWzBdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHNldCBtb2RlICovCisJCWlvd3JpdGUxNigwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDMsICJzZXRfbW9kZVswXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiBzZXQgZmlsdGVyICovCisJCS8qIDExYml0IGlkICYgbWFzayAqLworCQlpb3dyaXRlMTYoMHgwMDAwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoMHgwN2ZmLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCQkvKiAyOWJpdCBpZC5sbyAmIG1hc2subG8gJiBpZC5oaSAmIG1hc2suaGkgKi8KKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDZdKTsKKwkJaW93cml0ZTE2KDB4ZmZmZiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEwXSk7CisJCWlvd3JpdGUxNigweDFmZmYsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMl0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNywgInNldF9maWx0ZXJbMF0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogc2V0IG91dHB1dCBjb250cm9sICovCisJCWlvd3JpdGUxNihwcml2LT5vdXRwdXQsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCA1LCAic2V0X291dHB1dFswXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCX0KKwlpZiAoYnVzX2JpdG1hc2tfc3RhcnQgJiAyKSB7CisJCW5ldGRldiA9IGNhcmQtPm5ldFsxXTsKKwkJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCWVycm9yX3JlcG9ydGluZyArPSBzb2Z0aW5nX2Vycm9yX3JlcG9ydGluZyhuZXRkZXYpOworCQkvKiBpbml0IGNoaXAyICovCisJCWJ0ID0gJnByaXYtPmNhbi5iaXR0aW1pbmc7CisJCWlvd3JpdGUxNihidC0+YnJwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoYnQtPnNqdywgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJaW93cml0ZTE2KGJ0LT5waGFzZV9zZWcxICsgYnQtPnByb3Bfc2VnLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJCWlvd3JpdGUxNihidC0+cGhhc2Vfc2VnMiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwkJaW93cml0ZTE2KChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfM19TQU1QTEVTKSA/IDEgOiAwLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMiwgImluaXRpYWxpemVfY2hpcFsxXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiBzZXQgbW9kZTIgKi8KKwkJaW93cml0ZTE2KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJCWlvd3JpdGUxNigwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNCwgInNldF9tb2RlWzFdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHNldCBmaWx0ZXIyICovCisJCS8qIDExYml0IGlkICYgbWFzayAqLworCQlpb3dyaXRlMTYoMHgwMDAwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoMHgwN2ZmLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCQkvKiAyOWJpdCBpZC5sbyAmIG1hc2subG8gJiBpZC5oaSAmIG1hc2suaGkgKi8KKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDZdKTsKKwkJaW93cml0ZTE2KDB4ZmZmZiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEwXSk7CisJCWlvd3JpdGUxNigweDFmZmYsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMl0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgOCwgInNldF9maWx0ZXJbMV0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogc2V0IG91dHB1dCBjb250cm9sMiAqLworCQlpb3dyaXRlMTYocHJpdi0+b3V0cHV0LCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNiwgInNldF9vdXRwdXRbMV0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwl9CisJLyogZW5hYmxlX2Vycm9yX2ZyYW1lICovCisJLyoKKwkgKiBFcnJvciByZXBvcnRpbmcgaXMgc3dpdGNoZWQgb2ZmIGF0IHRoZSBtb21lbnQgc2luY2UKKwkgKiB0aGUgcmVjZWl2aW5nIG9mIHRoZW0gaXMgbm90IHlldCAxMDAlIHZlcmlmaWVkCisJICogVGhpcyBzaG91bGQgYmUgZW5hYmxlZCBzb29uZXIgb3IgbGF0ZXIKKwkgKgorCWlmIChlcnJvcl9yZXBvcnRpbmcpIHsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDUxLCAiZW5hYmxlX2Vycm9yX2ZyYW1lIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJfQorCSovCisJLyogaW5pdGlhbGl6ZSBpbnRlcmZhY2UgKi8KKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDZdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEwXSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMl0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTRdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDE2XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxOF0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMjBdKTsKKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMTcsICJpbml0aWFsaXplX2ludGVyZmFjZSIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBlbmFibGVfZmlmbyAqLworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAzNiwgImVuYWJsZV9maWZvIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCS8qIGVuYWJsZSBmaWZvIHR4IGFjayAqLworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAxMywgImZpZm9fdHhfYWNrWzBdIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCS8qIGVuYWJsZSBmaWZvIHR4IGFjazIgKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMTQsICJmaWZvX3R4X2Fja1sxXSIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBzdGFydF9jaGlwICovCisJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDExLCAic3RhcnRfY2hpcCIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fSU5GT19CVVNTVEFURV0pOworCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9JTkZPX0JVU1NUQVRFMl0pOworCWlmIChjYXJkLT5wZGF0LT5nZW5lcmF0aW9uIDwgMikgeworCQlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fVjJfSVJRX1RPSE9TVF0pOworCQkvKiBmbHVzaCB0aGUgRFBSQU0gY2FjaGVzICovCisJCXdtYigpOworCX0KKworCXNvZnRpbmdfaW5pdGlhbGl6ZV90aW1lc3RhbXAoY2FyZCk7CisKKwkvKgorCSAqIGRvIHNvY2tldGNhbiBub3RpZmljYXRpb25zL3N0YXR1cyBjaGFuZ2VzCisJICogZnJvbSBoZXJlLCBubyBlcnJvcnMgc2hvdWxkIG9jY3VyLCBvciB0aGUgZmFpbGVkOiBwYXJ0CisJICogbXVzdCBiZSByZXZpZXdlZAorCSAqLworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJbXNnLmNhbl9pZCA9IENBTl9FUlJfRkxBRyB8IENBTl9FUlJfUkVTVEFSVEVEOworCW1zZy5jYW5fZGxjID0gQ0FOX0VSUl9ETEM7CisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCWlmICghKGJ1c19iaXRtYXNrX3N0YXJ0ICYgKDEgPDwgaikpKQorCQkJY29udGludWU7CisJCW5ldGRldiA9IGNhcmQtPm5ldFtqXTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKwkJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisJCW9wZW5fY2FuZGV2KG5ldGRldik7CisJCWlmIChkZXYgIT0gbmV0ZGV2KSB7CisJCQkvKiBub3RpZnkgb3RoZXIgYnVzc2VzIG9uIHRoZSByZXN0YXJ0ICovCisJCQlzb2Z0aW5nX25ldGRldl9yeChuZXRkZXYsICZtc2csIGt0aW1lX3NldCgwLCAwKSk7CisJCQkrK3ByaXYtPmNhbi5jYW5fc3RhdHMucmVzdGFydHM7CisJCX0KKwkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCX0KKworCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJcmV0ID0gc29mdGluZ19lbmFibGVfaXJxKGNhcmQsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworY2FyZF9kb25lOgorCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7CisJcmV0dXJuIDA7CitpbnZhbGlkOgorCXJldCA9IC1FSU5WQUw7CitmYWlsZWQ6CisJc29mdGluZ19lbmFibGVfaXJxKGNhcmQsIDApOworCXNvZnRpbmdfcmVzZXRfY2hpcChjYXJkKTsKKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCS8qIGJyaW5nIGFsbCBvdGhlciBpbnRlcmZhY2VzIGRvd24gKi8KKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0W2pdOworCQlpZiAoIW5ldGRldikKKwkJCWNvbnRpbnVlOworCQlkZXZfY2xvc2UobmV0ZGV2KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHNvZnRpbmdfZGVmYXVsdF9vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHByaXYtPmNhcmQ7CisKKwlzd2l0Y2ggKHByaXYtPmNoaXApIHsKKwljYXNlIDEwMDA6CisJCXJldHVybiAoY2FyZC0+cGRhdC0+Z2VuZXJhdGlvbiA8IDIpID8gMHhmYiA6IDB4ZmE7CisJY2FzZSA1OgorCQlyZXR1cm4gMHg2MDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMHg0MDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX21haW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZWE5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX21haW4uYwpAQCAtMCwwICsxLDg5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwCisgKgorICogLSBLdXJ0IFZhbiBEaWpjaywgRUlBIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSAic29mdGluZy5oIgorCisjZGVmaW5lIFRYX0VDSE9fU0tCX01BWCAoKChUWE1BWCsxKS8yKS0xKQorCisvKgorICogdGVzdCBpcyBhIHNwZWNpZmljIENBTiBuZXRkZXYKKyAqIGlzIG9ubGluZSAoaWUuIHVwICduIHJ1bm5pbmcsIG5vdCBzbGVlcGluZywgbm90IGJ1c29mZgorICovCitzdGF0aWMgaW5saW5lIGludCBjYW5pZl9pc19hY3RpdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgY2FuX3ByaXYgKmNhbiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIChjYW4tPnN0YXRlIDw9IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFKTsKK30KKworLyogcmVzZXQgRFBSQU0gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2Z0aW5nX3NldF9yZXNldF9kcHJhbShzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpZiAoY2FyZC0+cGRhdC0+Z2VuZXJhdGlvbiA+PSAyKSB7CisJCXNwaW5fbG9ja19iaCgmY2FyZC0+c3Bpbik7CisJCWlvd3JpdGU4KGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1YyX1JFU0VUXSkgJiB+MSwKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fVjJfUkVTRVRdKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmNhcmQtPnNwaW4pOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHNvZnRpbmdfY2xyX3Jlc2V0X2RwcmFtKHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWlmIChjYXJkLT5wZGF0LT5nZW5lcmF0aW9uID49IDIpIHsKKwkJc3Bpbl9sb2NrX2JoKCZjYXJkLT5zcGluKTsKKwkJaW93cml0ZTgoaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fVjJfUkVTRVRdKSB8IDEsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX1YyX1JFU0VUXSk7CisJCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT5zcGluKTsKKwl9Cit9CisKKy8qIHRyaWdnZXIgdGhlIHR4IHF1ZXVlLWluZyAqLworc3RhdGljIG5ldGRldl90eF90IHNvZnRpbmdfbmV0ZGV2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHByaXYtPmNhcmQ7CisJaW50IHJldDsKKwl1aW50OF90ICpwdHI7CisJdWludDhfdCBmaWZvX3dyLCBmaWZvX3JkOworCXN0cnVjdCBjYW5fZnJhbWUgKmNmID0gKHN0cnVjdCBjYW5fZnJhbWUgKilza2ItPmRhdGE7CisJdWludDhfdCBidWZbRFBSQU1fVFhfU0laRV07CisKKwlpZiAoY2FuX2Ryb3BwZWRfaW52YWxpZF9za2IoZGV2LCBza2IpKQorCQlyZXR1cm4gTkVUREVWX1RYX09LOworCisJc3Bpbl9sb2NrKCZjYXJkLT5zcGluKTsKKworCXJldCA9IE5FVERFVl9UWF9CVVNZOworCWlmICghY2FyZC0+ZncudXAgfHwKKwkJCShjYXJkLT50eC5wZW5kaW5nID49IFRYTUFYKSB8fAorCQkJKHByaXYtPnR4LnBlbmRpbmcgPj0gVFhfRUNIT19TS0JfTUFYKSkKKwkJZ290byB4bWl0X2RvbmU7CisJZmlmb193ciA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1RYX1dSXSk7CisJZmlmb19yZCA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1RYX1JEXSk7CisJaWYgKGZpZm9fd3IgPT0gZmlmb19yZCkKKwkJLyogZmlmbyBmdWxsICovCisJCWdvdG8geG1pdF9kb25lOworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlwdHIgPSBidWY7CisJKnB0ciA9IENNRF9UWDsKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9SVFJfRkxBRykKKwkJKnB0ciB8PSBDTURfUlRSOworCWlmIChjZi0+Y2FuX2lkICYgQ0FOX0VGRl9GTEFHKQorCQkqcHRyIHw9IENNRF9YVEQ7CisJaWYgKHByaXYtPmluZGV4KQorCQkqcHRyIHw9IENNRF9CVVMyOworCSsrcHRyOworCSpwdHIrKyA9IGNmLT5jYW5fZGxjOworCSpwdHIrKyA9IChjZi0+Y2FuX2lkID4+IDApOworCSpwdHIrKyA9IChjZi0+Y2FuX2lkID4+IDgpOworCWlmIChjZi0+Y2FuX2lkICYgQ0FOX0VGRl9GTEFHKSB7CisJCSpwdHIrKyA9IChjZi0+Y2FuX2lkID4+IDE2KTsKKwkJKnB0cisrID0gKGNmLT5jYW5faWQgPj4gMjQpOworCX0gZWxzZSB7CisJCS8qIGluY3JlbWVudCAxLCBub3QgMiBhcyB5b3UgbWlnaHQgdGhpbmsgKi8KKwkJcHRyICs9IDE7CisJfQorCWlmICghKGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpKQorCQltZW1jcHkocHRyLCAmY2YtPmRhdGFbMF0sIGNmLT5jYW5fZGxjKTsKKwltZW1jcHlfdG9pbygmY2FyZC0+ZHByYW1bRFBSQU1fVFggKyBEUFJBTV9UWF9TSVpFICogZmlmb193cl0sCisJCQlidWYsIERQUkFNX1RYX1NJWkUpOworCWlmICgrK2ZpZm9fd3IgPj0gRFBSQU1fVFhfQ05UKQorCQlmaWZvX3dyID0gMDsKKwlpb3dyaXRlOChmaWZvX3dyLCAmY2FyZC0+ZHByYW1bRFBSQU1fVFhfV1JdKTsKKwljYXJkLT50eC5sYXN0X2J1cyA9IHByaXYtPmluZGV4OworCSsrY2FyZC0+dHgucGVuZGluZzsKKwkrK3ByaXYtPnR4LnBlbmRpbmc7CisJY2FuX3B1dF9lY2hvX3NrYihza2IsIGRldiwgcHJpdi0+dHguZWNob19wdXQpOworCSsrcHJpdi0+dHguZWNob19wdXQ7CisJaWYgKHByaXYtPnR4LmVjaG9fcHV0ID49IFRYX0VDSE9fU0tCX01BWCkKKwkJcHJpdi0+dHguZWNob19wdXQgPSAwOworCS8qIGNhbl9wdXRfZWNob19za2IoKSBzYXZlcyB0aGUgc2tiLCBzYWZlIHRvIHJldHVybiBUWF9PSyAqLworCXJldCA9IE5FVERFVl9UWF9PSzsKK3htaXRfZG9uZToKKwlzcGluX3VubG9jaygmY2FyZC0+c3Bpbik7CisJaWYgKGNhcmQtPnR4LnBlbmRpbmcgPj0gVFhNQVgpIHsKKwkJaW50IGo7CisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQkJaWYgKGNhcmQtPm5ldFtqXSkKKwkJCQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPm5ldFtqXSk7CisJCX0KKwl9CisJaWYgKHJldCAhPSBORVRERVZfVFhfT0spCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBzaG9ydGN1dCBmb3Igc2tiIGRlbGl2ZXJ5CisgKi8KK2ludCBzb2Z0aW5nX25ldGRldl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCBzdHJ1Y3QgY2FuX2ZyYW1lICptc2csCisJCWt0aW1lX3Qga3RpbWUpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgY2FuX2ZyYW1lICpjZjsKKworCXNrYiA9IGFsbG9jX2Nhbl9za2IobmV0ZGV2LCAmY2YpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2YsIG1zZywgc2l6ZW9mKCptc2cpKTsKKwlza2ItPnRzdGFtcCA9IGt0aW1lOworCXJldHVybiBuZXRpZl9yeChza2IpOworfQorCisvKgorICogc29mdGluZ19oYW5kbGVfMQorICogcG9wIDEgZW50cnkgZnJvbSB0aGUgRFBSQU0gcXVldWUsIGFuZCBwcm9jZXNzCisgKi8KK3N0YXRpYyBpbnQgc29mdGluZ19oYW5kbGVfMShzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXY7CisJa3RpbWVfdCBrdGltZTsKKwlzdHJ1Y3QgY2FuX2ZyYW1lIG1zZzsKKwlpbnQgY250ID0gMCwgbG9zdF9tc2c7CisJdWludDhfdCBmaWZvX3JkLCBmaWZvX3dyLCBjbWQ7CisJdWludDhfdCAqcHRyOworCXVpbnQzMl90IHRtcF91MzI7CisJdWludDhfdCBidWZbRFBSQU1fUlhfU0laRV07CisKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCS8qIHRlc3QgZm9yIGxvc3QgbXNncyAqLworCWxvc3RfbXNnID0gaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fUlhfTE9TVF0pOworCWlmIChsb3N0X21zZykgeworCQlpbnQgajsKKwkJLyogcmVzZXQgY29uZGl0aW9uICovCisJCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9SWF9MT1NUXSk7CisJCS8qIHByZXBhcmUgbXNnICovCisJCW1zZy5jYW5faWQgPSBDQU5fRVJSX0ZMQUcgfCBDQU5fRVJSX0NSVEw7CisJCW1zZy5jYW5fZGxjID0gQ0FOX0VSUl9ETEM7CisJCW1zZy5kYXRhWzFdID0gQ0FOX0VSUl9DUlRMX1JYX09WRVJGTE9XOworCQkvKgorCQkgKiBzZXJ2aWNlIHRvIGFsbCBidXNzZXMsIHdlIGRvbid0IGtub3cgd2hpY2ggaXQgd2FzIGFwcGxpY2FibGUKKwkJICogYnV0IG9ubHkgc2VydmljZSBidXNzZXMgdGhhdCBhcmUgb25saW5lCisJCSAqLworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJCW5ldGRldiA9IGNhcmQtPm5ldFtqXTsKKwkJCWlmICghbmV0ZGV2KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFjYW5pZl9pc19hY3RpdmUobmV0ZGV2KSkKKwkJCQkvKiBhIGRlYWQgYnVzIGhhcyBubyBvdmVyZmxvd3MgKi8KKwkJCQljb250aW51ZTsKKwkJCSsrbmV0ZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9yczsKKwkJCXNvZnRpbmdfbmV0ZGV2X3J4KG5ldGRldiwgJm1zZywga3RpbWVfc2V0KDAsIDApKTsKKwkJfQorCQkvKiBwcmVwYXJlIGZvciBvdGhlciB1c2UgKi8KKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkJKytjbnQ7CisJfQorCisJZmlmb19yZCA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1JYX1JEXSk7CisJZmlmb193ciA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1JYX1dSXSk7CisKKwlpZiAoKytmaWZvX3JkID49IERQUkFNX1JYX0NOVCkKKwkJZmlmb19yZCA9IDA7CisJaWYgKGZpZm9fd3IgPT0gZmlmb19yZCkKKwkJcmV0dXJuIGNudDsKKworCW1lbWNweV9mcm9taW8oYnVmLCAmY2FyZC0+ZHByYW1bRFBSQU1fUlggKyBEUFJBTV9SWF9TSVpFKmZpZm9fcmRdLAorCQkJRFBSQU1fUlhfU0laRSk7CisJbWIoKTsKKwkvKiB0cmlnZ2VyIGR1YWwgcG9ydCBSQU0gKi8KKwlpb3dyaXRlOChmaWZvX3JkLCAmY2FyZC0+ZHByYW1bRFBSQU1fUlhfUkRdKTsKKworCXB0ciA9IGJ1ZjsKKwljbWQgPSAqcHRyKys7CisJaWYgKGNtZCA9PSAweGZmKQorCQkvKiBub3QgcXVpdGUgdXNlZnVsbCwgcHJvYmFibHkgdGhlIGNhcmQgaGFzIGdvdCBvdXQgKi8KKwkJcmV0dXJuIDA7CisJbmV0ZGV2ID0gY2FyZC0+bmV0WzBdOworCWlmIChjbWQgJiBDTURfQlVTMikKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0WzFdOworCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKGNtZCAmIENNRF9FUlIpIHsKKwkJdWludDhfdCBjYW5fc3RhdGUsIHN0YXRlOworCisJCXN0YXRlID0gKnB0cisrOworCisJCW1zZy5jYW5faWQgPSBDQU5fRVJSX0ZMQUc7CisJCW1zZy5jYW5fZGxjID0gQ0FOX0VSUl9ETEM7CisKKwkJaWYgKHN0YXRlICYgU0ZfTUFTS19CVVNPRkYpIHsKKwkJCWNhbl9zdGF0ZSA9IENBTl9TVEFURV9CVVNfT0ZGOworCQkJbXNnLmNhbl9pZCB8PSBDQU5fRVJSX0JVU09GRjsKKwkJCXN0YXRlID0gU1RBVEVfQlVTT0ZGOworCQl9IGVsc2UgaWYgKHN0YXRlICYgU0ZfTUFTS19FUEFTU0lWRSkgeworCQkJY2FuX3N0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX1BBU1NJVkU7CisJCQltc2cuY2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKKwkJCW1zZy5kYXRhWzFdID0gQ0FOX0VSUl9DUlRMX1RYX1BBU1NJVkU7CisJCQlzdGF0ZSA9IFNUQVRFX0VQQVNTSVZFOworCQl9IGVsc2UgeworCQkJY2FuX3N0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX0FDVElWRTsKKwkJCW1zZy5jYW5faWQgfD0gQ0FOX0VSUl9DUlRMOworCQkJc3RhdGUgPSBTVEFURV9FQUNUSVZFOworCQl9CisJCS8qIHVwZGF0ZSBEUFJBTSAqLworCQlpb3dyaXRlOChzdGF0ZSwgJmNhcmQtPmRwcmFtW3ByaXYtPmluZGV4ID8KKwkJCQlEUFJBTV9JTkZPX0JVU1NUQVRFMiA6IERQUkFNX0lORk9fQlVTU1RBVEVdKTsKKwkJLyogdGltZXN0YW1wICovCisJCXRtcF91MzIgPSBsZTMyX3RvX2NwdXAoKHZvaWQgKilwdHIpOworCQlwdHIgKz0gNDsKKwkJa3RpbWUgPSBzb2Z0aW5nX3JhdzJrdGltZShjYXJkLCB0bXBfdTMyKTsKKworCQkrK25ldGRldi0+c3RhdHMucnhfZXJyb3JzOworCQkvKiB1cGRhdGUgaW50ZXJuYWwgc3RhdHVzICovCisJCWlmIChjYW5fc3RhdGUgIT0gcHJpdi0+Y2FuLnN0YXRlKSB7CisJCQlwcml2LT5jYW4uc3RhdGUgPSBjYW5fc3RhdGU7CisJCQlpZiAoY2FuX3N0YXRlID09IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFKQorCQkJCSsrcHJpdi0+Y2FuLmNhbl9zdGF0cy5lcnJvcl9wYXNzaXZlOworCQkJZWxzZSBpZiAoY2FuX3N0YXRlID09IENBTl9TVEFURV9CVVNfT0ZGKSB7CisJCQkJLyogdGhpcyBjYWxscyBjYW5fY2xvc2VfY2xlYW51cCgpICovCisJCQkJY2FuX2J1c19vZmYobmV0ZGV2KTsKKwkJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCQl9CisJCQkvKiB0cmlnZ2VyIHNvY2tldGNhbiAqLworCQkJc29mdGluZ19uZXRkZXZfcngobmV0ZGV2LCAmbXNnLCBrdGltZSk7CisJCX0KKworCX0gZWxzZSB7CisJCWlmIChjbWQgJiBDTURfUlRSKQorCQkJbXNnLmNhbl9pZCB8PSBDQU5fUlRSX0ZMQUc7CisJCW1zZy5jYW5fZGxjID0gZ2V0X2Nhbl9kbGMoKnB0cisrKTsKKwkJaWYgKGNtZCAmIENNRF9YVEQpIHsKKwkJCW1zZy5jYW5faWQgfD0gQ0FOX0VGRl9GTEFHOworCQkJbXNnLmNhbl9pZCB8PSBsZTMyX3RvX2NwdXAoKHZvaWQgKilwdHIpOworCQkJcHRyICs9IDQ7CisJCX0gZWxzZSB7CisJCQltc2cuY2FuX2lkIHw9IGxlMTZfdG9fY3B1cCgodm9pZCAqKXB0cik7CisJCQlwdHIgKz0gMjsKKwkJfQorCQkvKiB0aW1lc3RhbXAgKi8KKwkJdG1wX3UzMiA9IGxlMzJfdG9fY3B1cCgodm9pZCAqKXB0cik7CisJCXB0ciArPSA0OworCQlrdGltZSA9IHNvZnRpbmdfcmF3Mmt0aW1lKGNhcmQsIHRtcF91MzIpOworCQlpZiAoIShtc2cuY2FuX2lkICYgQ0FOX1JUUl9GTEFHKSkKKwkJCW1lbWNweSgmbXNnLmRhdGFbMF0sIHB0ciwgOCk7CisJCXB0ciArPSA4OworCQkvKiB1cGRhdGUgc29ja2V0ICovCisJCWlmIChjbWQgJiBDTURfQUNLKSB7CisJCQkvKiBhY2tub3dsZWRnZSwgd2FzIHR4IG1zZyAqLworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJCXNrYiA9IHByaXYtPmNhbi5lY2hvX3NrYltwcml2LT50eC5lY2hvX2dldF07CisJCQlpZiAoc2tiKQorCQkJCXNrYi0+dHN0YW1wID0ga3RpbWU7CisJCQljYW5fZ2V0X2VjaG9fc2tiKG5ldGRldiwgcHJpdi0+dHguZWNob19nZXQpOworCQkJKytwcml2LT50eC5lY2hvX2dldDsKKwkJCWlmIChwcml2LT50eC5lY2hvX2dldCA+PSBUWF9FQ0hPX1NLQl9NQVgpCisJCQkJcHJpdi0+dHguZWNob19nZXQgPSAwOworCQkJaWYgKHByaXYtPnR4LnBlbmRpbmcpCisJCQkJLS1wcml2LT50eC5wZW5kaW5nOworCQkJaWYgKGNhcmQtPnR4LnBlbmRpbmcpCisJCQkJLS1jYXJkLT50eC5wZW5kaW5nOworCQkJKytuZXRkZXYtPnN0YXRzLnR4X3BhY2tldHM7CisJCQlpZiAoIShtc2cuY2FuX2lkICYgQ0FOX1JUUl9GTEFHKSkKKwkJCQluZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IG1zZy5jYW5fZGxjOworCQl9IGVsc2UgeworCQkJaW50IHJldDsKKworCQkJcmV0ID0gc29mdGluZ19uZXRkZXZfcngobmV0ZGV2LCAmbXNnLCBrdGltZSk7CisJCQlpZiAocmV0ID09IE5FVF9SWF9TVUNDRVNTKSB7CisJCQkJKytuZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHM7CisJCQkJaWYgKCEobXNnLmNhbl9pZCAmIENBTl9SVFJfRkxBRykpCisJCQkJCW5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbXNnLmNhbl9kbGM7CisJCQl9IGVsc2UgeworCQkJCSsrbmV0ZGV2LT5zdGF0cy5yeF9kcm9wcGVkOworCQkJfQorCQl9CisJfQorCSsrY250OworCXJldHVybiBjbnQ7Cit9CisKKy8qCisgKiByZWFsIGludGVycnVwdCBoYW5kbGVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzb2Z0aW5nX2lycV90aHJlYWQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gKHN0cnVjdCBzb2Z0aW5nICopZGV2X2lkOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdjsKKwlpbnQgaiwgb2Zmc2V0LCB3b3JrX2RvbmU7CisKKwl3b3JrX2RvbmUgPSAwOworCXNwaW5fbG9ja19iaCgmY2FyZC0+c3Bpbik7CisJd2hpbGUgKHNvZnRpbmdfaGFuZGxlXzEoY2FyZCkgPiAwKSB7CisJCSsrY2FyZC0+aXJxLnN2Y19jb3VudDsKKwkJKyt3b3JrX2RvbmU7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT5zcGluKTsKKwkvKiByZXN1bWUgdHggcXVldWUncyAqLworCW9mZnNldCA9IGNhcmQtPnR4Lmxhc3RfYnVzOworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQlpZiAoY2FyZC0+dHgucGVuZGluZyA+PSBUWE1BWCkKKwkJCWJyZWFrOworCQluZXRkZXYgPSBjYXJkLT5uZXRbKGogKyBvZmZzZXQgKyAxKSAlIGNhcmQtPnBkYXQtPm5idXNdOworCQlpZiAoIW5ldGRldikKKwkJCWNvbnRpbnVlOworCQlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwkJaWYgKCFjYW5pZl9pc19hY3RpdmUobmV0ZGV2KSkKKwkJCS8qIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHdha2UgZGVhZCBidXNzZXMgKi8KKwkJCWNvbnRpbnVlOworCQlpZiAocHJpdi0+dHgucGVuZGluZyA+PSBUWF9FQ0hPX1NLQl9NQVgpCisJCQljb250aW51ZTsKKwkJKyt3b3JrX2RvbmU7CisJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwl9CisJcmV0dXJuIHdvcmtfZG9uZSA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7Cit9CisKKy8qCisgKiBpbnRlcnJ1cHQgcm91dGluZXM6CisgKiBzY2hlZHVsZSB0aGUgJ3JlYWwgaW50ZXJydXB0IGhhbmRsZXInCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzb2Z0aW5nX2lycV92MihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSAoc3RydWN0IHNvZnRpbmcgKilkZXZfaWQ7CisJdWludDhfdCBpcjsKKworCWlyID0gaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fVjJfSVJRX1RPSE9TVF0pOworCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9WMl9JUlFfVE9IT1NUXSk7CisJcmV0dXJuICgxID09IGlyKSA/IElSUV9XQUtFX1RIUkVBRCA6IElSUV9OT05FOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc29mdGluZ19pcnFfdjEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gKHN0cnVjdCBzb2Z0aW5nICopZGV2X2lkOworCXVpbnQ4X3QgaXI7CisKKwlpciA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX0lSUV9UT0hPU1RdKTsKKwlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fSVJRX1RPSE9TVF0pOworCXJldHVybiBpciA/IElSUV9XQUtFX1RIUkVBRCA6IElSUV9OT05FOworfQorCisvKgorICogbmV0ZGV2L2NhbmRldiBpbnRlci1vcGVyYWJpbGl0eQorICovCitzdGF0aWMgaW50IHNvZnRpbmdfbmV0ZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJaW50IHJldDsKKworCS8qIGNoZWNrIG9yIGRldGVybWluZSBhbmQgc2V0IGJpdHRpbWUgKi8KKwlyZXQgPSBvcGVuX2NhbmRldihuZGV2KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gc29mdGluZ19zdGFydHN0b3AobmRldiwgMSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzb2Z0aW5nX25ldGRldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCWludCByZXQ7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOworCisJLyogc29mdGluZyBjeWNsZSBkb2VzIGNsb3NlX2NhbmRldigpICovCisJcmV0ID0gc29mdGluZ19zdGFydHN0b3AobmRldiwgMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzb2Z0aW5nX2NhbmRldl9zZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSBjYW5fbW9kZSBtb2RlKQoreworCWludCByZXQ7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENBTl9NT0RFX1NUQVJUOgorCQkvKiBzb2Z0aW5nX3N0YXJ0c3RvcCBkb2VzIGNsb3NlX2NhbmRldigpICovCisJCXJldCA9IHNvZnRpbmdfc3RhcnRzdG9wKG5kZXYsIDEpOworCQlyZXR1cm4gcmV0OworCWNhc2UgQ0FOX01PREVfU1RPUDoKKwljYXNlIENBTl9NT0RFX1NMRUVQOgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogU29mdGluZyBkZXZpY2UgbWFuYWdlbWVudCBoZWxwZXJzCisgKi8KK2ludCBzb2Z0aW5nX2VuYWJsZV9pcnEoc3RydWN0IHNvZnRpbmcgKmNhcmQsIGludCBlbmFibGUpCit7CisJaW50IHJldDsKKworCWlmICghY2FyZC0+aXJxLm5yKSB7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoY2FyZC0+aXJxLnJlcXVlc3RlZCAmJiAhZW5hYmxlKSB7CisJCWZyZWVfaXJxKGNhcmQtPmlycS5uciwgY2FyZCk7CisJCWNhcmQtPmlycS5yZXF1ZXN0ZWQgPSAwOworCX0gZWxzZSBpZiAoIWNhcmQtPmlycS5yZXF1ZXN0ZWQgJiYgZW5hYmxlKSB7CisJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGNhcmQtPmlycS5uciwKKwkJCQkoY2FyZC0+cGRhdC0+Z2VuZXJhdGlvbiA+PSAyKSA/CisJCQkJCXNvZnRpbmdfaXJxX3YyIDogc29mdGluZ19pcnFfdjEsCisJCQkJc29mdGluZ19pcnFfdGhyZWFkLCBJUlFGX1NIQVJFRCwKKwkJCQlkZXZfbmFtZSgmY2FyZC0+cGRldi0+ZGV2KSwgY2FyZCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LAorCQkJCQkicmVxdWVzdF90aHJlYWRlZF9pcnEoJXUpIGZhaWxlZFxuIiwKKwkJCQkJY2FyZC0+aXJxLm5yKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJY2FyZC0+aXJxLnJlcXVlc3RlZCA9IDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb2Z0aW5nX2NhcmRfc2h1dGRvd24oc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJaW50IGZ3X3VwID0gMDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhcmQtPmZ3LmxvY2spKQorCQkvKiByZXR1cm4gLUVSRVNUQVJUU1lTICovOworCWZ3X3VwID0gY2FyZC0+ZncudXA7CisJY2FyZC0+ZncudXAgPSAwOworCisJaWYgKGNhcmQtPmlycS5yZXF1ZXN0ZWQgJiYgY2FyZC0+aXJxLm5yKSB7CisJCWZyZWVfaXJxKGNhcmQtPmlycS5uciwgY2FyZCk7CisJCWNhcmQtPmlycS5yZXF1ZXN0ZWQgPSAwOworCX0KKwlpZiAoZndfdXApIHsKKwkJaWYgKGNhcmQtPnBkYXQtPmVuYWJsZV9pcnEpCisJCQljYXJkLT5wZGF0LT5lbmFibGVfaXJxKGNhcmQtPnBkZXYsIDApOworCQlzb2Z0aW5nX3NldF9yZXNldF9kcHJhbShjYXJkKTsKKwkJaWYgKGNhcmQtPnBkYXQtPnJlc2V0KQorCQkJY2FyZC0+cGRhdC0+cmVzZXQoY2FyZC0+cGRldiwgMSk7CisJfQorCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHNvZnRpbmdfY2FyZF9ib290KHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWludCByZXQsIGo7CisJc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3RyZWFtW10gPSB7CisJCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIH07CisJdW5zaWduZWQgY2hhciBiYWNrW3NpemVvZihzdHJlYW0pXTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhcmQtPmZ3LmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWlmIChjYXJkLT5mdy51cCkgeworCQltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJLyogcmVzZXQgYm9hcmQgKi8KKwlpZiAoY2FyZC0+cGRhdC0+ZW5hYmxlX2lycSkKKwkJY2FyZC0+cGRhdC0+ZW5hYmxlX2lycShjYXJkLT5wZGV2LCAxKTsKKwkvKiBib290IGNhcmQgKi8KKwlzb2Z0aW5nX3NldF9yZXNldF9kcHJhbShjYXJkKTsKKwlpZiAoY2FyZC0+cGRhdC0+cmVzZXQpCisJCWNhcmQtPnBkYXQtPnJlc2V0KGNhcmQtPnBkZXYsIDEpOworCWZvciAoaiA9IDA7IChqICsgc2l6ZW9mKHN0cmVhbSkpIDwgY2FyZC0+ZHByYW1fc2l6ZTsKKwkJCWogKz0gc2l6ZW9mKHN0cmVhbSkpIHsKKworCQltZW1jcHlfdG9pbygmY2FyZC0+ZHByYW1bal0sIHN0cmVhbSwgc2l6ZW9mKHN0cmVhbSkpOworCQkvKiBmbHVzaCBJTyBjYWNoZSAqLworCQltYigpOworCQltZW1jcHlfZnJvbWlvKGJhY2ssICZjYXJkLT5kcHJhbVtqXSwgc2l6ZW9mKHN0cmVhbSkpOworCisJCWlmICghbWVtY21wKGJhY2ssIHN0cmVhbSwgc2l6ZW9mKHN0cmVhbSkpKQorCQkJY29udGludWU7CisJCS8qIG1lbW9yeSBpcyBub3QgZXF1YWwgKi8KKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJkcHJhbSBmYWlsZWQgYXQgMHglMDR4XG4iLCBqKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCXdtYigpOworCS8qIGxvYWQgYm9vdCBmaXJtd2FyZSAqLworCXJldCA9IHNvZnRpbmdfbG9hZF9mdyhjYXJkLT5wZGF0LT5ib290LmZ3LCBjYXJkLCBjYXJkLT5kcHJhbSwKKwkJCQljYXJkLT5kcHJhbV9zaXplLAorCQkJCWNhcmQtPnBkYXQtPmJvb3Qub2ZmcyAtIGNhcmQtPnBkYXQtPmJvb3QuYWRkcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCS8qIGxvYWQgbG9hZGVyIGZpcm13YXJlICovCisJcmV0ID0gc29mdGluZ19sb2FkX2Z3KGNhcmQtPnBkYXQtPmxvYWQuZncsIGNhcmQsIGNhcmQtPmRwcmFtLAorCQkJCWNhcmQtPmRwcmFtX3NpemUsCisJCQkJY2FyZC0+cGRhdC0+bG9hZC5vZmZzIC0gY2FyZC0+cGRhdC0+bG9hZC5hZGRyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwlpZiAoY2FyZC0+cGRhdC0+cmVzZXQpCisJCWNhcmQtPnBkYXQtPnJlc2V0KGNhcmQtPnBkZXYsIDApOworCXNvZnRpbmdfY2xyX3Jlc2V0X2RwcmFtKGNhcmQpOworCXJldCA9IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKGNhcmQsIDAsICJjYXJkIGJvb3QiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJcmV0ID0gc29mdGluZ19sb2FkX2FwcF9mdyhjYXJkLT5wZGF0LT5hcHAuZncsIGNhcmQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHNvZnRpbmdfY2hpcF9wb3dlcm9uKGNhcmQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCWNhcmQtPmZ3LnVwID0gMTsKKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCXJldHVybiAwOworZmFpbGVkOgorCWNhcmQtPmZ3LnVwID0gMDsKKwlpZiAoY2FyZC0+cGRhdC0+ZW5hYmxlX2lycSkKKwkJY2FyZC0+cGRhdC0+ZW5hYmxlX2lycShjYXJkLT5wZGV2LCAwKTsKKwlzb2Z0aW5nX3NldF9yZXNldF9kcHJhbShjYXJkKTsKKwlpZiAoY2FyZC0+cGRhdC0+cmVzZXQpCisJCWNhcmQtPnBkYXQtPnJlc2V0KGNhcmQtPnBkZXYsIDEpOworCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIG5ldGRldiBzeXNmcworICovCitzdGF0aWMgc3NpemVfdCBzaG93X2NoYW5uZWwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXYyc29mdGluZyhuZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBwcml2LT5pbmRleCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfY2hpcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldjJzb2Z0aW5nKG5kZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIHByaXYtPmNoaXApOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X291dHB1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldjJzb2Z0aW5nKG5kZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDJ4XG4iLCBwcml2LT5vdXRwdXQpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9vdXRwdXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldjJzb2Z0aW5nKG5kZXYpOworCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gcHJpdi0+Y2FyZDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwl2YWwgJj0gMHhGRjsKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FyZC0+ZncubG9jayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgeworCQltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlwcml2LT5vdXRwdXQgPSB2YWw7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBERVZJQ0VfQVRUUihjaGFubmVsLCBTX0lSVUdPLCBzaG93X2NoYW5uZWwsIE5VTEwpOworc3RhdGljIGNvbnN0IERFVklDRV9BVFRSKGNoaXAsIFNfSVJVR08sIHNob3dfY2hpcCwgTlVMTCk7CitzdGF0aWMgY29uc3QgREVWSUNFX0FUVFIob3V0cHV0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19vdXRwdXQsIHN0b3JlX291dHB1dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpjb25zdCBuZXRkZXZfc3lzZnNfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfY2hhbm5lbC5hdHRyLAorCSZkZXZfYXR0cl9jaGlwLmF0dHIsCisJJmRldl9hdHRyX291dHB1dC5hdHRyLAorCU5VTEwsCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbmV0ZGV2X3N5c2ZzX2dyb3VwID0geworCS5uYW1lID0gTlVMTCwKKwkuYXR0cnMgPSAoc3RydWN0IGF0dHJpYnV0ZSAqKiluZXRkZXZfc3lzZnNfYXR0cnMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNvZnRpbmdfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBzb2Z0aW5nX25ldGRldl9vcGVuLAorCS5uZG9fc3RvcCA9IHNvZnRpbmdfbmV0ZGV2X3N0b3AsCisJLm5kb19zdGFydF94bWl0CT0gc29mdGluZ19uZXRkZXZfc3RhcnRfeG1pdCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCBzb2Z0aW5nX2J0cl9jb25zdCA9IHsKKwkubmFtZSA9ICJzb2Z0aW5nIiwKKwkudHNlZzFfbWluID0gMSwKKwkudHNlZzFfbWF4ID0gMTYsCisJLnRzZWcyX21pbiA9IDEsCisJLnRzZWcyX21heCA9IDgsCisJLnNqd19tYXggPSA0LCAvKiBvdmVycnVsZWQgKi8KKwkuYnJwX21pbiA9IDEsCisJLmJycF9tYXggPSAzMiwgLyogb3ZlcnJ1bGVkICovCisJLmJycF9pbmMgPSAxLAorfTsKKworCitzdGF0aWMgX19kZXZpbml0IHN0cnVjdCBuZXRfZGV2aWNlICpzb2Z0aW5nX25ldGRldl9jcmVhdGUoc3RydWN0IHNvZnRpbmcgKmNhcmQsCisJCXVpbnQxNl90IGNoaXBfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2OworCisJbmV0ZGV2ID0gYWxsb2NfY2FuZGV2KHNpemVvZigqcHJpdiksIFRYX0VDSE9fU0tCX01BWCk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJhbGxvY19jYW5kZXYgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXByaXYtPm5ldGRldiA9IG5ldGRldjsKKwlwcml2LT5jYXJkID0gY2FyZDsKKwltZW1jcHkoJnByaXYtPmJ0cl9jb25zdCwgJnNvZnRpbmdfYnRyX2NvbnN0LCBzaXplb2YocHJpdi0+YnRyX2NvbnN0KSk7CisJcHJpdi0+YnRyX2NvbnN0LmJycF9tYXggPSBjYXJkLT5wZGF0LT5tYXhfYnJwOworCXByaXYtPmJ0cl9jb25zdC5zandfbWF4ID0gY2FyZC0+cGRhdC0+bWF4X3NqdzsKKwlwcml2LT5jYW4uYml0dGltaW5nX2NvbnN0ID0gJnByaXYtPmJ0cl9jb25zdDsKKwlwcml2LT5jYW4uY2xvY2suZnJlcSA9IDgwMDAwMDA7CisJcHJpdi0+Y2hpcCA9IGNoaXBfaWQ7CisJcHJpdi0+b3V0cHV0ID0gc29mdGluZ19kZWZhdWx0X291dHB1dChuZXRkZXYpOworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmNhcmQtPnBkZXYtPmRldik7CisKKwluZXRkZXYtPmZsYWdzIHw9IElGRl9FQ0hPOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZzb2Z0aW5nX25ldGRldl9vcHM7CisJcHJpdi0+Y2FuLmRvX3NldF9tb2RlID0gc29mdGluZ19jYW5kZXZfc2V0X21vZGU7CisJcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV8zX1NBTVBMRVM7CisKKwlyZXR1cm4gbmV0ZGV2OworfQorCitzdGF0aWMgX19kZXZpbml0IGludCBzb2Z0aW5nX25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWludCByZXQ7CisKKwluZXRkZXYtPnN5c2ZzX2dyb3Vwc1swXSA9ICZuZXRkZXZfc3lzZnNfZ3JvdXA7CisJcmV0ID0gcmVnaXN0ZXJfY2FuZGV2KG5ldGRldik7CisJaWYgKHJldCkgeworCQlkZXZfYWxlcnQoJm5ldGRldi0+ZGV2LCAicmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvZnRpbmdfbmV0ZGV2X2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwl1bnJlZ2lzdGVyX2NhbmRldihuZXRkZXYpOworCWZyZWVfY2FuZGV2KG5ldGRldik7Cit9CisKKy8qCisgKiBzeXNmcyBmb3IgUGxhdGZvcm0gZGV2aWNlCisgKi8KKyNkZWZpbmUgREVWX0FUVFJfUk8obmFtZSwgbWVtYmVyKSBcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAoreyBcCisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7IFwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgY2FyZC0+bWVtYmVyKTsgXAorfSBcCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgMDQ0NCwgc2hvd18jI25hbWUsIE5VTEwpCisKKyNkZWZpbmUgREVWX0FUVFJfUk9fU1RSKG5hbWUsIG1lbWJlcikgXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBcCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOyBcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNhcmQtPm1lbWJlcik7IFwKK30gXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIDA0NDQsIHNob3dfIyNuYW1lLCBOVUxMKQorCitERVZfQVRUUl9STyhzZXJpYWwsIGlkLnNlcmlhbCk7CitERVZfQVRUUl9ST19TVFIoZmlybXdhcmUsIHBkYXQtPmFwcC5mdyk7CitERVZfQVRUUl9STyhmaXJtd2FyZV92ZXJzaW9uLCBpZC5md192ZXJzaW9uKTsKK0RFVl9BVFRSX1JPX1NUUihoYXJkd2FyZSwgcGRhdC0+bmFtZSk7CitERVZfQVRUUl9STyhoYXJkd2FyZV92ZXJzaW9uLCBpZC5od192ZXJzaW9uKTsKK0RFVl9BVFRSX1JPKGxpY2Vuc2UsIGlkLmxpY2Vuc2UpOworREVWX0FUVFJfUk8oZnJlcXVlbmN5LCBpZC5mcmVxKTsKK0RFVl9BVFRSX1JPKHR4cGVuZGluZywgdHgucGVuZGluZyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzb2Z0aW5nX3BkZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc2VyaWFsLmF0dHIsCisJJmRldl9hdHRyX2Zpcm13YXJlLmF0dHIsCisJJmRldl9hdHRyX2Zpcm13YXJlX3ZlcnNpb24uYXR0ciwKKwkmZGV2X2F0dHJfaGFyZHdhcmUuYXR0ciwKKwkmZGV2X2F0dHJfaGFyZHdhcmVfdmVyc2lvbi5hdHRyLAorCSZkZXZfYXR0cl9saWNlbnNlLmF0dHIsCisJJmRldl9hdHRyX2ZyZXF1ZW5jeS5hdHRyLAorCSZkZXZfYXR0cl90eHBlbmRpbmcuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc29mdGluZ19wZGV2X2dyb3VwID0geworCS5uYW1lID0gTlVMTCwKKwkuYXR0cnMgPSBzb2Z0aW5nX3BkZXZfYXR0cnMsCit9OworCisvKgorICogcGxhdGZvcm0gZHJpdmVyCisgKi8KK3N0YXRpYyBfX2RldmV4aXQgaW50IHNvZnRpbmdfcGRldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBqOworCisJLyogZmlyc3QsIGRpc2FibGUgY2FyZCovCisJc29mdGluZ19jYXJkX3NodXRkb3duKGNhcmQpOworCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCWlmICghY2FyZC0+bmV0W2pdKQorCQkJY29udGludWU7CisJCXNvZnRpbmdfbmV0ZGV2X2NsZWFudXAoY2FyZC0+bmV0W2pdKTsKKwkJY2FyZC0+bmV0W2pdID0gTlVMTDsKKwl9CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNvZnRpbmdfcGRldl9ncm91cCk7CisKKwlpb3VubWFwKGNhcmQtPmRwcmFtKTsKKwlrZnJlZShjYXJkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgc29mdGluZ19wZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSAqcGRhdCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2Z0aW5nICpjYXJkOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnByZXM7CisJaW50IHJldDsKKwlpbnQgajsKKworCWlmICghcGRhdCkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocGRhdC0+bmJ1cyA+IEFSUkFZX1NJWkUoY2FyZC0+bmV0KSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiJXUgbmV0cz8/XG4iLCBwZGF0LT5uYnVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKCpjYXJkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVOT01FTTsKKwljYXJkLT5wZGF0ID0gcGRhdDsKKwljYXJkLT5wZGV2ID0gcGRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKwltdXRleF9pbml0KCZjYXJkLT5mdy5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmY2FyZC0+c3Bpbik7CisKKwlyZXQgPSAtRUlOVkFMOworCXByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcHJlcykKKwkJZ290byBwbGF0Zm9ybV9yZXNvdXJjZV9mYWlsZWQ7OworCWNhcmQtPmRwcmFtX3BoeXMgPSBwcmVzLT5zdGFydDsKKwljYXJkLT5kcHJhbV9zaXplID0gcHJlcy0+ZW5kIC0gcHJlcy0+c3RhcnQgKyAxOworCWNhcmQtPmRwcmFtID0gaW9yZW1hcF9ub2NhY2hlKGNhcmQtPmRwcmFtX3BoeXMsIGNhcmQtPmRwcmFtX3NpemUpOworCWlmICghY2FyZC0+ZHByYW0pIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJkcHJhbSBpb3JlbWFwIGZhaWxlZFxuIik7CisJCWdvdG8gaW9yZW1hcF9mYWlsZWQ7CisJfQorCisJcHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHByZXMpCisJCWNhcmQtPmlycS5uciA9IHByZXMtPnN0YXJ0OworCisJLyogcmVzZXQgY2FyZCAqLworCXJldCA9IHNvZnRpbmdfY2FyZF9ib290KGNhcmQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9hbGVydCgmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGJvb3RcbiIpOworCQlnb3RvIGJvb3RfZmFpbGVkOworCX0KKworCS8qIG9ubHkgbm93LCB0aGUgY2hpcCdzIGFyZSBrbm93biAqLworCWNhcmQtPmlkLmZyZXEgPSBjYXJkLT5wZGF0LT5mcmVxOworCisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNvZnRpbmdfcGRldl9ncm91cCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJzeXNmcyBmYWlsZWRcbiIpOworCQlnb3RvIHN5c2ZzX2ZhaWxlZDsKKwl9CisKKwlyZXQgPSAtRU5PTUVNOworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQljYXJkLT5uZXRbal0gPSBuZXRkZXYgPQorCQkJc29mdGluZ19uZXRkZXZfY3JlYXRlKGNhcmQsIGNhcmQtPmlkLmNoaXBbal0pOworCQlpZiAoIW5ldGRldikgeworCQkJZGV2X2FsZXJ0KCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFrZSBjYW5bJWldIiwgaik7CisJCQlnb3RvIG5ldGRldl9mYWlsZWQ7CisJCX0KKwkJcHJpdiA9IG5ldGRldl9wcml2KGNhcmQtPm5ldFtqXSk7CisJCXByaXYtPmluZGV4ID0gajsKKwkJcmV0ID0gc29mdGluZ19uZXRkZXZfcmVnaXN0ZXIobmV0ZGV2KTsKKwkJaWYgKHJldCkgeworCQkJZnJlZV9jYW5kZXYobmV0ZGV2KTsKKwkJCWNhcmQtPm5ldFtqXSA9IE5VTEw7CisJCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwKKwkJCQkJImZhaWxlZCB0byByZWdpc3RlciBjYW5bJWldXG4iLCBqKTsKKwkJCWdvdG8gbmV0ZGV2X2ZhaWxlZDsKKwkJfQorCX0KKwlkZXZfaW5mbygmY2FyZC0+cGRldi0+ZGV2LCAiJXMgcmVhZHkuXG4iLCBjYXJkLT5wZGF0LT5uYW1lKTsKKwlyZXR1cm4gMDsKKworbmV0ZGV2X2ZhaWxlZDoKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJaWYgKCFjYXJkLT5uZXRbal0pCisJCQljb250aW51ZTsKKwkJc29mdGluZ19uZXRkZXZfY2xlYW51cChjYXJkLT5uZXRbal0pOworCX0KKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmc29mdGluZ19wZGV2X2dyb3VwKTsKK3N5c2ZzX2ZhaWxlZDoKKwlzb2Z0aW5nX2NhcmRfc2h1dGRvd24oY2FyZCk7Citib290X2ZhaWxlZDoKKwlpb3VubWFwKGNhcmQtPmRwcmFtKTsKK2lvcmVtYXBfZmFpbGVkOgorcGxhdGZvcm1fcmVzb3VyY2VfZmFpbGVkOgorCWtmcmVlKGNhcmQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNvZnRpbmdfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInNvZnRpbmciLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHNvZnRpbmdfcGRldl9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc29mdGluZ19wZGV2X3JlbW92ZSksCit9OworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNvZnRpbmciKTsKKworc3RhdGljIGludCBfX2luaXQgc29mdGluZ19zdGFydCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNvZnRpbmdfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNvZnRpbmdfc3RvcCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzb2Z0aW5nX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNvZnRpbmdfc3RhcnQpOworbW9kdWxlX2V4aXQoc29mdGluZ19zdG9wKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2Z0aW5nIERQUkFNIENBTiBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkt1cnQgVmFuIERpamNrIDxrdXJ0LnZhbi5kaWpja0BlaWEuYmU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX3BsYXRmb3JtLmggYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJiZjY5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfcGxhdGZvcm0uaApAQCAtMCwwICsxLDQwIEBACisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2lmbmRlZiBfU09GVElOR19ERVZJQ0VfSF8KKyNkZWZpbmUgX1NPRlRJTkdfREVWSUNFX0hfCisKKy8qIHNvZnRpbmcgZmlybXdhcmUgZGlyZWN0b3J5IHByZWZpeCAqLworI2RlZmluZSBmd19kaXIgInNvZnRpbmctNC42LyIKKworc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSB7CisJdW5zaWduZWQgaW50IG1hbmY7CisJdW5zaWduZWQgaW50IHByb2Q7CisJLyoKKwkgKiBnZW5lcmF0aW9uCisJICogMXN0IHdpdGggTkVDIG9yIFNKQTEwMDAKKwkgKiA4Yml0LCBleGNsdXNpdmUgaW50ZXJydXB0LCAuLi4KKwkgKiAybmQgb25seSBTSkExMDAwCisJICogMTZiaXQsIHNoYXJlZCBpbnRlcnJ1cHQKKwkgKi8KKwlpbnQgZ2VuZXJhdGlvbjsKKwlpbnQgbmJ1czsgLyogIyBidXNzZXMgb24gZGV2aWNlICovCisJdW5zaWduZWQgaW50IGZyZXE7IC8qIG9wZXJhdGluZyBmcmVxdWVuY3kgaW4gSHogKi8KKwl1bnNpZ25lZCBpbnQgbWF4X2JycDsKKwl1bnNpZ25lZCBpbnQgbWF4X3NqdzsKKwl1bnNpZ25lZCBsb25nIGRwcmFtX3NpemU7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIG9mZnM7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwkJY29uc3QgY2hhciAqZnc7CisJfSBib290LCBsb2FkLCBhcHA7CisJLyoKKwkgKiByZXNldCgpIGZ1bmN0aW9uCisJICogYnJpbmcgcGRldiBpbiBvciBvdXQgb2YgcmVzZXQsIGRlcGVuZGluZyBvbiB2YWx1ZQorCSAqLworCWludCAoKnJlc2V0KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpOworCWludCAoKmVuYWJsZV9pcnEpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NuaWMuYyBiL2RyaXZlcnMvbmV0L2NuaWMuYwppbmRleCAyNjNhMjk0Li4zMDJiZTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jbmljLmMKKysrIGIvZHJpdmVycy9uZXQvY25pYy5jCkBAIC02OTksMTMgKzY5OSwxMyBAQAogc3RhdGljIHZvaWQgY25pY19zZXR1cF9wYWdlX3RibChzdHJ1Y3QgY25pY19kZXYgKmRldiwgc3RydWN0IGNuaWNfZG1hICpkbWEpCiB7CiAJaW50IGk7Ci0JdTMyICpwYWdlX3RhYmxlID0gZG1hLT5wZ3RibDsKKwlfX2xlMzIgKnBhZ2VfdGFibGUgPSAoX19sZTMyICopIGRtYS0+cGd0Ymw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZG1hLT5udW1fcGFnZXM7IGkrKykgewogCQkvKiBFYWNoIGVudHJ5IG5lZWRzIHRvIGJlIGluIGJpZyBlbmRpYW4gZm9ybWF0LiAqLwotCQkqcGFnZV90YWJsZSA9ICh1MzIpICgodTY0KSBkbWEtPnBnX21hcF9hcnJbaV0gPj4gMzIpOworCQkqcGFnZV90YWJsZSA9IGNwdV90b19sZTMyKCh1NjQpIGRtYS0+cGdfbWFwX2FycltpXSA+PiAzMik7CiAJCXBhZ2VfdGFibGUrKzsKLQkJKnBhZ2VfdGFibGUgPSAodTMyKSBkbWEtPnBnX21hcF9hcnJbaV07CisJCSpwYWdlX3RhYmxlID0gY3B1X3RvX2xlMzIoZG1hLT5wZ19tYXBfYXJyW2ldICYgMHhmZmZmZmZmZik7CiAJCXBhZ2VfdGFibGUrKzsKIAl9CiB9CkBAIC03MTMsMTMgKzcxMywxMyBAQAogc3RhdGljIHZvaWQgY25pY19zZXR1cF9wYWdlX3RibF9sZShzdHJ1Y3QgY25pY19kZXYgKmRldiwgc3RydWN0IGNuaWNfZG1hICpkbWEpCiB7CiAJaW50IGk7Ci0JdTMyICpwYWdlX3RhYmxlID0gZG1hLT5wZ3RibDsKKwlfX2xlMzIgKnBhZ2VfdGFibGUgPSAoX19sZTMyICopIGRtYS0+cGd0Ymw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZG1hLT5udW1fcGFnZXM7IGkrKykgewogCQkvKiBFYWNoIGVudHJ5IG5lZWRzIHRvIGJlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0LiAqLwotCQkqcGFnZV90YWJsZSA9IGRtYS0+cGdfbWFwX2FycltpXSAmIDB4ZmZmZmZmZmY7CisJCSpwYWdlX3RhYmxlID0gY3B1X3RvX2xlMzIoZG1hLT5wZ19tYXBfYXJyW2ldICYgMHhmZmZmZmZmZik7CiAJCXBhZ2VfdGFibGUrKzsKLQkJKnBhZ2VfdGFibGUgPSAodTMyKSAoKHU2NCkgZG1hLT5wZ19tYXBfYXJyW2ldID4+IDMyKTsKKwkJKnBhZ2VfdGFibGUgPSBjcHVfdG9fbGUzMigodTY0KSBkbWEtPnBnX21hcF9hcnJbaV0gPj4gMzIpOwogCQlwYWdlX3RhYmxlKys7CiAJfQogfQpAQCAtMjc2MCw2ICsyNzYwLDggQEAKIAl1MzIgc3RhdHVzX2lkeCA9ICh1MTYpICpjcC0+a2NxMS5zdGF0dXNfaWR4X3B0cjsKIAlpbnQga2NxZV9jbnQ7CiAKKwkvKiBzdGF0dXMgYmxvY2sgaW5kZXggbXVzdCBiZSByZWFkIGJlZm9yZSByZWFkaW5nIG90aGVyIGZpZWxkcyAqLworCXJtYigpOwogCWNwLT5rd3FfY29uX2lkeCA9ICpjcC0+a3dxX2Nvbl9pZHhfcHRyOwogCiAJd2hpbGUgKChrY3FlX2NudCA9IGNuaWNfZ2V0X2tjcWVzKGRldiwgJmNwLT5rY3ExKSkpIHsKQEAgLTI3NzAsNiArMjc3Miw4IEBACiAJCWJhcnJpZXIoKTsKIAkJaWYgKHN0YXR1c19pZHggIT0gKmNwLT5rY3ExLnN0YXR1c19pZHhfcHRyKSB7CiAJCQlzdGF0dXNfaWR4ID0gKHUxNikgKmNwLT5rY3ExLnN0YXR1c19pZHhfcHRyOworCQkJLyogc3RhdHVzIGJsb2NrIGluZGV4IG11c3QgYmUgcmVhZCBmaXJzdCAqLworCQkJcm1iKCk7CiAJCQljcC0+a3dxX2Nvbl9pZHggPSAqY3AtPmt3cV9jb25faWR4X3B0cjsKIAkJfSBlbHNlCiAJCQlicmVhazsKQEAgLTI4ODgsNiArMjg5Miw4IEBACiAJdTMyIGxhc3Rfc3RhdHVzID0gKmluZm8tPnN0YXR1c19pZHhfcHRyOwogCWludCBrY3FlX2NudDsKIAorCS8qIHN0YXR1cyBibG9jayBpbmRleCBtdXN0IGJlIHJlYWQgYmVmb3JlIHJlYWRpbmcgdGhlIEtDUSAqLworCXJtYigpOwogCXdoaWxlICgoa2NxZV9jbnQgPSBjbmljX2dldF9rY3FlcyhkZXYsIGluZm8pKSkgewogCiAJCXNlcnZpY2Vfa2NxZXMoZGV2LCBrY3FlX2NudCk7CkBAIC0yODk4LDYgKzI5MDQsOCBAQAogCQkJYnJlYWs7CiAKIAkJbGFzdF9zdGF0dXMgPSAqaW5mby0+c3RhdHVzX2lkeF9wdHI7CisJCS8qIHN0YXR1cyBibG9jayBpbmRleCBtdXN0IGJlIHJlYWQgYmVmb3JlIHJlYWRpbmcgdGhlIEtDUSAqLworCQlybWIoKTsKIAl9CiAJcmV0dXJuIGxhc3Rfc3RhdHVzOwogfQpAQCAtMjkwNiwyNiArMjkxNCwzNSBAQAogewogCXN0cnVjdCBjbmljX2RldiAqZGV2ID0gKHN0cnVjdCBjbmljX2RldiAqKSBkYXRhOwogCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OwotCXUzMiBzdGF0dXNfaWR4OworCXUzMiBzdGF0dXNfaWR4LCBuZXdfc3RhdHVzX2lkeDsKIAogCWlmICh1bmxpa2VseSghdGVzdF9iaXQoQ05JQ19GX0NOSUNfVVAsICZkZXYtPmZsYWdzKSkpCiAJCXJldHVybjsKIAotCXN0YXR1c19pZHggPSBjbmljX3NlcnZpY2VfYm54Mnhfa2NxKGRldiwgJmNwLT5rY3ExKTsKKwl3aGlsZSAoMSkgeworCQlzdGF0dXNfaWR4ID0gY25pY19zZXJ2aWNlX2JueDJ4X2tjcShkZXYsICZjcC0+a2NxMSk7CiAKLQlDTklDX1dSMTYoZGV2LCBjcC0+a2NxMS5pb19hZGRyLCBjcC0+a2NxMS5zd19wcm9kX2lkeCArIE1BWF9LQ1FfSURYKTsKKwkJQ05JQ19XUjE2KGRldiwgY3AtPmtjcTEuaW9fYWRkciwKKwkJCSAgY3AtPmtjcTEuc3dfcHJvZF9pZHggKyBNQVhfS0NRX0lEWCk7CiAKLQlpZiAoQk5YMlhfQ0hJUF9JU19FMihjcC0+Y2hpcF9pZCkpIHsKLQkJc3RhdHVzX2lkeCA9IGNuaWNfc2VydmljZV9ibngyeF9rY3EoZGV2LCAmY3AtPmtjcTIpOworCQlpZiAoIUJOWDJYX0NISVBfSVNfRTIoY3AtPmNoaXBfaWQpKSB7CisJCQljbmljX2Fja19ibngyeF9pbnQoZGV2LCBjcC0+Ym54MnhfaWd1X3NiX2lkLCBVU1RPUk1fSUQsCisJCQkJCSAgIHN0YXR1c19pZHgsIElHVV9JTlRfRU5BQkxFLCAxKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbmV3X3N0YXR1c19pZHggPSBjbmljX3NlcnZpY2VfYm54Mnhfa2NxKGRldiwgJmNwLT5rY3EyKTsKKworCQlpZiAobmV3X3N0YXR1c19pZHggIT0gc3RhdHVzX2lkeCkKKwkJCWNvbnRpbnVlOwogCiAJCUNOSUNfV1IxNihkZXYsIGNwLT5rY3EyLmlvX2FkZHIsIGNwLT5rY3EyLnN3X3Byb2RfaWR4ICsKIAkJCSAgTUFYX0tDUV9JRFgpOwogCiAJCWNuaWNfYWNrX2lndV9zYihkZXYsIGNwLT5ibngyeF9pZ3Vfc2JfaWQsIElHVV9TRUdfQUNDRVNTX0RFRiwKIAkJCQlzdGF0dXNfaWR4LCBJR1VfSU5UX0VOQUJMRSwgMSk7Ci0JfSBlbHNlIHsKLQkJY25pY19hY2tfYm54MnhfaW50KGRldiwgY3AtPmJueDJ4X2lndV9zYl9pZCwgVVNUT1JNX0lELAotCQkJCSAgIHN0YXR1c19pZHgsIElHVV9JTlRfRU5BQkxFLCAxKTsKKworCQlicmVhazsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYwppbmRleCAwNTljMWVlLi5lYzM1ZDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jCkBAIC0yNzEwLDYgKzI3MTAsOCBAQAogCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBpLT5hZGFwdGVyOwogCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwogCWlmICghKGFkYXB0ZXItPmZsYWdzICYgRlVMTF9JTklUX0RPTkUpKSB7CiAJCWVyciA9IGN4Z2JfdXAoYWRhcHRlcik7CiAJCWlmIChlcnIgPCAwKQpAQCAtMzY2MSw3ICszNjYzLDYgQEAKIAkJcGktPnhhY3RfYWRkcl9maWx0ID0gLTE7CiAJCXBpLT5yeF9vZmZsb2FkID0gUlhfQ1NPOwogCQlwaS0+cG9ydF9pZCA9IGk7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCW5ldGRldi0+aXJxID0gcGRldi0+aXJxOwogCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IFRTT19GTEFHUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCmluZGV4IDU2MTY2YWUuLjZhYWQ2NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYwpAQCAtMjA0MCw3ICsyMDQwLDcgQEAKIHsKIAlpbnQgaTsKIAotCUJVR19PTihhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QgPT0gTlVMTCk7CisJQlVHX09OKElTX0VSUl9PUl9OVUxMKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkpOwogCiAJLyoKIAkgKiBEZWJ1Z2ZzIHN1cHBvcnQgaXMgYmVzdCBlZmZvcnQuCkBAIC0yMDYxLDcgKzIwNjEsNyBAQAogICovCiBzdGF0aWMgdm9pZCBjbGVhbnVwX2RlYnVnZnMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JQlVHX09OKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCA9PSBOVUxMKTsKKwlCVUdfT04oSVNfRVJSX09SX05VTEwoYWRhcHRlci0+ZGVidWdmc19yb290KSk7CiAKIAkvKgogCSAqIFVubGlrZSBvdXIgc2lzdGVyIHJvdXRpbmUgY2xlYW51cF9wcm9jKCksIHdlIGRvbid0IG5lZWQgdG8gcmVtb3ZlCkBAIC0yNDg5LDE3ICsyNDg5LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCiAJLyoKLQkgKiBWZXQgb3VyIG1vZHVsZSBwYXJhbWV0ZXJzLgotCSAqLwotCWlmIChtc2kgIT0gTVNJX01TSVggJiYgbXNpICE9IE1TSV9NU0kpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiYmFkIG1vZHVsZSBwYXJhbWV0ZXIgbXNpPSVkOyBtdXN0IGJlICVkIgotCQkJIiAoTVNJLVggb3IgTVNJKSBvciAlZCAoTVNJKVxuIiwgbXNpLCBNU0lfTVNJWCwKLQkJCU1TSV9NU0kpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotCi0JLyoKIAkgKiBQcmludCBvdXIgZHJpdmVyIGJhbm5lciB0aGUgZmlyc3QgdGltZSB3ZSdyZSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSBhCiAJICogZGV2aWNlLgogCSAqLwpAQCAtMjcxMSwxMSArMjcwMCwxMSBAQAogCS8qCiAJICogU2V0IHVwIG91ciBkZWJ1Z2ZzIGVudHJpZXMuCiAJICovCi0JaWYgKGN4Z2I0dmZfZGVidWdmc19yb290KSB7CisJaWYgKCFJU19FUlJfT1JfTlVMTChjeGdiNHZmX2RlYnVnZnNfcm9vdCkpIHsKIAkJYWRhcHRlci0+ZGVidWdmc19yb290ID0KIAkJCWRlYnVnZnNfY3JlYXRlX2RpcihwY2lfbmFtZShwZGV2KSwKIAkJCQkJICAgY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpOwotCQlpZiAoYWRhcHRlci0+ZGVidWdmc19yb290ID09IE5VTEwpCisJCWlmIChJU19FUlJfT1JfTlVMTChhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QpKQogCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyIKIAkJCQkgIiBkaXJlY3RvcnkiKTsKIAkJZWxzZQpAQCAtMjc3MCw3ICsyNzU5LDcgQEAKIAkgKi8KIAogZXJyX2ZyZWVfZGVidWdmczoKLQlpZiAoYWRhcHRlci0+ZGVidWdmc19yb290KSB7CisJaWYgKCFJU19FUlJfT1JfTlVMTChhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QpKSB7CiAJCWNsZWFudXBfZGVidWdmcyhhZGFwdGVyKTsKIAkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCk7CiAJfQpAQCAtMjgwMiw3ICsyNzkxLDYgQEAKIGVycl9kaXNhYmxlX2RldmljZToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKLWVycl9vdXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjg0MCw3ICsyODI4LDcgQEAKIAkJLyoKIAkJICogVGVhciBkb3duIG91ciBkZWJ1Z2ZzIGVudHJpZXMuCiAJCSAqLwotCQlpZiAoYWRhcHRlci0+ZGVidWdmc19yb290KSB7CisJCWlmICghSVNfRVJSX09SX05VTEwoYWRhcHRlci0+ZGVidWdmc19yb290KSkgewogCQkJY2xlYW51cF9kZWJ1Z2ZzKGFkYXB0ZXIpOwogCQkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCk7CiAJCX0KQEAgLTI4NzQsNiArMjg2Miw0NiBAQAogfQogCiAvKgorICogIlNodXRkb3duIiBxdWllc2NlIHRoZSBkZXZpY2UsIHN0b3BwaW5nIEluZ3Jlc3MgUGFja2V0IGFuZCBJbnRlcnJ1cHQKKyAqIGRlbGl2ZXJ5LgorICovCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgY3hnYjR2Zl9wY2lfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXI7CisJaW50IHBpZHg7CisKKwlhZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghYWRhcHRlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBEaXNhYmxlIGFsbCBWaXJ0dWFsIEludGVyZmFjZXMuICBUaGlzIHdpbGwgc2h1dCBkb3duIHRoZQorCSAqIGRlbGl2ZXJ5IG9mIGFsbCBpbmdyZXNzIHBhY2tldHMgaW50byB0aGUgY2hpcCBmb3IgdGhlc2UKKwkgKiBWaXJ0dWFsIEludGVyZmFjZXMuCisJICovCisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBwaWR4KSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJCXN0cnVjdCBwb3J0X2luZm8gKnBpOworCisJCWlmICghdGVzdF9iaXQocGlkeCwgJmFkYXB0ZXItPnJlZ2lzdGVyZWRfZGV2aWNlX21hcCkpCisJCQljb250aW51ZTsKKworCQluZXRkZXYgPSBhZGFwdGVyLT5wb3J0W3BpZHhdOworCQlpZiAoIW5ldGRldikKKwkJCWNvbnRpbnVlOworCisJCXBpID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwkJdDR2Zl9lbmFibGVfdmkoYWRhcHRlciwgcGktPnZpaWQsIGZhbHNlLCBmYWxzZSk7CisJfQorCisJLyoKKwkgKiBGcmVlIHVwIGFsbCBRdWV1ZXMgd2hpY2ggd2lsbCBwcmV2ZW50IGZ1cnRoZXIgRE1BIGFuZAorCSAqIEludGVycnVwdHMgYWxsb3dpbmcgdmFyaW91cyBpbnRlcm5hbCBwYXRod2F5cyB0byBkcmFpbi4KKwkgKi8KKwl0NHZmX2ZyZWVfc2dlX3Jlc291cmNlcyhhZGFwdGVyKTsKK30KKworLyoKICAqIFBDSSBEZXZpY2UgcmVnaXN0cmF0aW9uIGRhdGEgc3RydWN0dXJlcy4KICAqLwogI2RlZmluZSBDSF9ERVZJQ0UoZGV2aWQsIGlkeCkgXApAQCAtMjkwNiw2ICsyOTM0LDcgQEAKIAkuaWRfdGFibGUJPSBjeGdiNHZmX3BjaV90YmwsCiAJLnByb2JlCQk9IGN4Z2I0dmZfcGNpX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoY3hnYjR2Zl9wY2lfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBfX2RldmV4aXRfcChjeGdiNHZmX3BjaV9zaHV0ZG93biksCiB9OwogCiAvKgpAQCAtMjkxNSwxNCArMjk0NCwyNSBAQAogewogCWludCByZXQ7CiAKKwkvKgorCSAqIFZldCBvdXIgbW9kdWxlIHBhcmFtZXRlcnMuCisJICovCisJaWYgKG1zaSAhPSBNU0lfTVNJWCAmJiBtc2kgIT0gTVNJX01TSSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiBiYWQgbW9kdWxlIHBhcmFtZXRlciBtc2k9JWQ7IG11c3QgYmUgJWQiCisJCSAgICAgICAiIChNU0ktWCBvciBNU0kpIG9yICVkIChNU0kpXG4iLAorCQkgICAgICAgbXNpLCBNU0lfTVNJWCwgTVNJX01TSSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIERlYnVnZnMgc3VwcG9ydCBpcyBvcHRpb25hbCwganVzdCB3YXJuIGlmIHRoaXMgZmFpbHMgKi8KIAljeGdiNHZmX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwgTlVMTCk7Ci0JaWYgKCFjeGdiNHZmX2RlYnVnZnNfcm9vdCkKKwlpZiAoSVNfRVJSX09SX05VTEwoY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HIEtCVUlMRF9NT0ROQU1FICI6IGNvdWxkIG5vdCBjcmVhdGUiCiAJCSAgICAgICAiIGRlYnVnZnMgZW50cnksIGNvbnRpbnVpbmdcbiIpOwogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY3hnYjR2Zl9kcml2ZXIpOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwICYmICFJU19FUlJfT1JfTlVMTChjeGdiNHZmX2RlYnVnZnNfcm9vdCkpCiAJCWRlYnVnZnNfcmVtb3ZlKGN4Z2I0dmZfZGVidWdmc19yb290KTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMgYi9kcml2ZXJzL25ldC9jeGdiNHZmL3Q0dmZfaHcuYwppbmRleCAwZjUxYzgwLi4xOTJkYjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNHZmL3Q0dmZfaHcuYworKysgYi9kcml2ZXJzL25ldC9jeGdiNHZmL3Q0dmZfaHcuYwpAQCAtMTcxLDcgKzE3MSw3IEBACiAJZGVsYXlfaWR4ID0gMDsKIAltcyA9IGRlbGF5WzBdOwogCi0JZm9yIChpID0gMDsgaSA8IDUwMDsgaSArPSBtcykgeworCWZvciAoaSA9IDA7IGkgPCBGV19DTURfTUFYX1RJTUVPVVQ7IGkgKz0gbXMpIHsKIAkJaWYgKHNsZWVwX29rKSB7CiAJCQltcyA9IGRlbGF5W2RlbGF5X2lkeF07CiAJCQlpZiAoZGVsYXlfaWR4IDwgQVJSQVlfU0laRShkZWxheSkgLSAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwppbmRleCAyYTYyOGQxLi43MDE4YmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYworKysgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwpAQCAtMTAwOCw3ICsxMDA4LDcgQEAKIAlpbnQJCQlyZXQ7CiAKIAkvKiBmcmVlIGFuZCBiYWlsIGlmIHdlIGFyZSBzaHV0dGluZyBkb3duICovCi0JaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKG5kZXYpKSkgeworCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhuZGV2KSB8fCAhbmV0aWZfY2Fycmllcl9vayhuZGV2KSkpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlcGNhLmMgYi9kcml2ZXJzL25ldC9kZXBjYS5jCmluZGV4IDFiNDhiNjguLjhiMDA4NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlcGNhLmMKKysrIGIvZHJpdmVycy9uZXQvZGVwY2EuYwpAQCAtMTA5NCw3ICsxMDk0LDcgQEAKIAkJCQl9CiAJCQl9CiAJCQkvKiBDaGFuZ2UgYnVmZmVyIG93bmVyc2hpcCBmb3IgdGhpcyBsYXN0IGZyYW1lLCBiYWNrIHRvIHRoZSBhZGFwdGVyICovCi0JCQlmb3IgKDsgbHAtPnJ4X29sZCAhPSBlbnRyeTsgbHAtPnJ4X29sZCA9ICgrK2xwLT5yeF9vbGQpICYgbHAtPnJ4UmluZ01hc2spIHsKKwkJCWZvciAoOyBscC0+cnhfb2xkICE9IGVudHJ5OyBscC0+cnhfb2xkID0gKGxwLT5yeF9vbGQgKyAxKSAmIGxwLT5yeFJpbmdNYXNrKSB7CiAJCQkJd3JpdGVsKHJlYWRsKCZscC0+cnhfcmluZ1tscC0+cnhfb2xkXS5iYXNlKSB8IFJfT1dOLCAmbHAtPnJ4X3JpbmdbbHAtPnJ4X29sZF0uYmFzZSk7CiAJCQl9CiAJCQl3cml0ZWwocmVhZGwoJmxwLT5yeF9yaW5nW2VudHJ5XS5iYXNlKSB8IFJfT1dOLCAmbHAtPnJ4X3JpbmdbZW50cnldLmJhc2UpOwpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKIAkJLyoKIAkJICAgKiogVXBkYXRlIGVudHJ5IGluZm9ybWF0aW9uCiAJCSAqLwotCQlscC0+cnhfbmV3ID0gKCsrbHAtPnJ4X25ldykgJiBscC0+cnhSaW5nTWFzazsKKwkJbHAtPnJ4X25ldyA9IChscC0+cnhfbmV3ICsgMSkgJiBscC0+cnhSaW5nTWFzazsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTExNDgsNyArMTE0OCw3IEBACiAJCX0KIAogCQkvKiBVcGRhdGUgYWxsIHRoZSBwb2ludGVycyAqLwotCQlscC0+dHhfb2xkID0gKCsrbHAtPnR4X29sZCkgJiBscC0+dHhSaW5nTWFzazsKKwkJbHAtPnR4X29sZCA9IChscC0+dHhfb2xkICsgMSkgJiBscC0+dHhSaW5nTWFzazsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RsMmsuYyBiL2RyaXZlcnMvbmV0L2RsMmsuYwppbmRleCBlMWE4MjE2Li5jMDVkYjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbDJrLmMKKysrIGIvZHJpdmVycy9uZXQvZGwyay5jCkBAIC0xNzUzLDggKzE3NTMsNiBAQAogCiAJLyogRnJlZSBhbGwgdGhlIHNrYnVmZnMgaW4gdGhlIHF1ZXVlLiAqLwogCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgewotCQlucC0+cnhfcmluZ1tpXS5zdGF0dXMgPSAwOwotCQlucC0+cnhfcmluZ1tpXS5mcmFnaW5mbyA9IDA7CiAJCXNrYiA9IG5wLT5yeF9za2J1ZmZbaV07CiAJCWlmIChza2IpIHsKIAkJCXBjaV91bm1hcF9zaW5nbGUobnAtPnBkZXYsCkBAIC0xNzYzLDYgKzE3NjEsOCBAQAogCQkJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAkJCW5wLT5yeF9za2J1ZmZbaV0gPSBOVUxMOwogCQl9CisJCW5wLT5yeF9yaW5nW2ldLnN0YXR1cyA9IDA7CisJCW5wLT5yeF9yaW5nW2ldLmZyYWdpbmZvID0gMDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsgaSsrKSB7CiAJCXNrYiA9IG5wLT50eF9za2J1ZmZbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbTkwMDAuYyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCmluZGV4IDJkNGM0ZmMuLjQ2MWRkNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCkBAIC04MDIsMTAgKzgwMiw3IEBACiAJLyogQ2hlY2tzdW0gbW9kZSAqLwogCWRtOTAwMF9zZXRfcnhfY3N1bV91bmxvY2tlZChkZXYsIGRiLT5yeF9jc3VtKTsKIAotCS8qIEdQSU8wIG9uIHByZS1hY3RpdmF0ZSBQSFkgKi8KLQlpb3coZGIsIERNOTAwMF9HUFIsIDApOwkvKiBSRUdfMUYgYml0MCBhY3RpdmF0ZSBwaHl4Y2VyICovCiAJaW93KGRiLCBETTkwMDBfR1BDUiwgR1BDUl9HRVBfQ05UTCk7CS8qIExldCBHUElPMCBvdXRwdXQgKi8KLQlpb3coZGIsIERNOTAwMF9HUFIsIDApOwkvKiBFbmFibGUgUEhZICovCiAKIAluY3IgPSAoZGItPmZsYWdzICYgRE05MDAwX1BMQVRGX0VYVF9QSFkpID8gTkNSX0VYVF9QSFkgOiAwOwogCkBAIC04NTIsOCArODQ5LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogU2F2ZSBwcmV2aW91cyByZWdpc3RlciBhZGRyZXNzICovCi0JcmVnX3NhdmUgPSByZWFkYihkYi0+aW9fYWRkcik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CisJcmVnX3NhdmUgPSByZWFkYihkYi0+aW9fYWRkcik7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJZG05MDAwX3Jlc2V0KGRiKTsKQEAgLTExOTQsNiArMTE5MSwxMCBAQAogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgZG05MDAwX2ludGVycnVwdCwgaXJxZmxhZ3MsIGRldi0+bmFtZSwgZGV2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKKwkvKiBHUElPMCBvbiBwcmUtYWN0aXZhdGUgUEhZLCBSZWcgMUYgaXMgbm90IHNldCBieSByZXNldCAqLworCWlvdyhkYiwgRE05MDAwX0dQUiwgMCk7CS8qIFJFR18xRiBiaXQwIGFjdGl2YXRlIHBoeXhjZXIgKi8KKwltZGVsYXkoMSk7IC8qIGRlbGF5IG5lZWRzIGJ5IERNOTAwMEIgKi8KKwogCS8qIEluaXRpYWxpemUgRE05MDAwIGJvYXJkICovCiAJZG05MDAwX3Jlc2V0KGRiKTsKIAlkbTkwMDBfaW5pdF9kbTkwMDAoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RuZXQuYyBiL2RyaXZlcnMvbmV0L2RuZXQuYwppbmRleCA5ZDhhMjBiLi44MzE4ZWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvZG5ldC5jCkBAIC0zMzcsOCArMzM3LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCiAJCWJwLT5taWlfYnVzLT5pcnFbaV0gPSBQSFlfUE9MTDsKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGJwLT5kZXYsIGJwLT5taWlfYnVzKTsKLQogCWlmIChtZGlvYnVzX3JlZ2lzdGVyKGJwLT5taWlfYnVzKSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gZXJyX291dF9mcmVlX21kaW9faXJxOwpAQCAtODYzLDYgKzg2MSw3IEBACiAJYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWJwLT5kZXYgPSBkZXY7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKIAlzcGluX2xvY2tfaW5pdCgmYnAtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKaW5kZXggYWVkMjIzYi4uNzUwMWQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCkBAIC0xMjQsNiArMTI0LDcgQEAKIAljYXNlIE04OEUxMDAwX0lfUEhZX0lEOgogCWNhc2UgTTg4RTEwMTFfSV9QSFlfSUQ6CiAJY2FzZSBNODhFMTExMV9JX1BIWV9JRDoKKwljYXNlIE04OEUxMTE4X0VfUEhZX0lEOgogCQlody0+cGh5X3R5cGUgPSBlMTAwMF9waHlfbTg4OwogCQlicmVhazsKIAljYXNlIElHUDAxRTEwMDBfSV9QSFlfSUQ6CkBAIC0zMjIyLDcgKzMyMjMsOCBAQAogCQlicmVhazsKIAljYXNlIGUxMDAwX2NlNDEwMDoKIAkJaWYgKChody0+cGh5X2lkID09IFJUTDgyMTFCX1BIWV9JRCkgfHwKLQkJICAgIChody0+cGh5X2lkID09IFJUTDgyMDFOX1BIWV9JRCkpCisJCSAgICAoaHctPnBoeV9pZCA9PSBSVEw4MjAxTl9QSFlfSUQpIHx8CisJCSAgICAoaHctPnBoeV9pZCA9PSBNODhFMTExOF9FX1BIWV9JRCkpCiAJCQltYXRjaCA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NDE6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAppbmRleCAxOTZlZWRhLi5jNzBiMjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKQEAgLTI5MTcsNiArMjkxNyw3IEBACiAjZGVmaW5lIE04OEUxMDAwXzE0X1BIWV9JRCBNODhFMTAwMF9FX1BIWV9JRAogI2RlZmluZSBNODhFMTAxMV9JX1JFVl80ICAgMHgwNAogI2RlZmluZSBNODhFMTExMV9JX1BIWV9JRCAgMHgwMTQxMENDMAorI2RlZmluZSBNODhFMTExOF9FX1BIWV9JRCAgMHgwMTQxMEU0MAogI2RlZmluZSBMMUxYVDk3MUFfUEhZX0lEICAgMHgwMDEzNzhFMAogCiAjZGVmaW5lIFJUTDgyMTFCX1BIWV9JRCAgICAweDAwMUNDOTEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9vc2RlcC5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaAppbmRleCA1NWMxNzExLi4zM2U3YzQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9vc2RlcC5oCkBAIC00Miw3ICs0Miw4IEBACiAjZGVmaW5lIEdCRV9DT05GSUdfUkFNX0JBU0UgXAogCSgodW5zaWduZWQgaW50KShDT05GSUdfUkFNX0JBU0UgKyBHQkVfQ09ORklHX09GRlNFVCkpCiAKLSNkZWZpbmUgR0JFX0NPTkZJR19CQVNFX1ZJUlQgICAgcGh5c190b192aXJ0KEdCRV9DT05GSUdfUkFNX0JBU0UpCisjZGVmaW5lIEdCRV9DT05GSUdfQkFTRV9WSVJUIFwKKwkoKHZvaWQgX19pb21lbSAqKXBoeXNfdG9fdmlydChHQkVfQ09ORklHX1JBTV9CQVNFKSkKIAogI2RlZmluZSBHQkVfQ09ORklHX0ZMQVNIX1dSSVRFKGJhc2UsIG9mZnNldCwgY291bnQsIGRhdGEpIFwKIAkoaW93cml0ZTE2X3JlcChiYXNlICsgb2Zmc2V0LCBkYXRhLCBjb3VudCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKaW5kZXggMWMxOGYyNi4uMmU1MDIyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYwpAQCAtOTM3LDYgKzkzNyw5IEBACiAJdTE2IHBoeV9zdGF0dXMsIHBoeV8xMDAwdF9zdGF0dXMsIHBoeV9leHRfc3RhdHVzOwogCXUxNiBwY2lfc3RhdHVzOwogCisJaWYgKHRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuOworCiAJZTFlX3JwaHkoaHcsIFBIWV9TVEFUVVMsICZwaHlfc3RhdHVzKTsKIAllMWVfcnBoeShodywgUEhZXzEwMDBUX1NUQVRVUywgJnBoeV8xMDAwdF9zdGF0dXMpOwogCWUxZV9ycGh5KGh3LCBQSFlfRVhUX1NUQVRVUywgJnBoeV9leHRfc3RhdHVzKTsKQEAgLTE1MDYsNiArMTUwOSw5IEBACiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKIAkJCQkJc3RydWN0IGUxMDAwX2FkYXB0ZXIsIGRvd25zaGlmdF90YXNrKTsKIAorCWlmICh0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKwogCWUxMDAwZV9naWdfZG93bnNoaWZ0X3dvcmthcm91bmRfaWNoOGxhbigmYWRhcHRlci0+aHcpOwogfQogCkBAIC0zMzM4LDYgKzMzNDQsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZTEwMDBlX2ZsdXNoX2Rlc2NyaXB0b3JzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlpZiAoIShhZGFwdGVyLT5mbGFnczIgJiBGTEFHMl9ETUFfQlVSU1QpKQorCQlyZXR1cm47CisKKwkvKiBmbHVzaCBwZW5kaW5nIGRlc2NyaXB0b3Igd3JpdGViYWNrcyB0byBtZW1vcnkgKi8KKwlldzMyKFRJRFYsIGFkYXB0ZXItPnR4X2ludF9kZWxheSB8IEUxMDAwX1RJRFZfRlBEKTsKKwlldzMyKFJEVFIsIGFkYXB0ZXItPnJ4X2ludF9kZWxheSB8IEUxMDAwX1JEVFJfRlBEKTsKKworCS8qIGV4ZWN1dGUgdGhlIHdyaXRlcyBpbW1lZGlhdGVseSAqLworCWUxZV9mbHVzaCgpOworfQorCiB2b2lkIGUxMDAwZV9kb3duKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CkBAIC0zMzc3LDYgKzMzOTgsOSBAQAogCiAJaWYgKCFwY2lfY2hhbm5lbF9vZmZsaW5lKGFkYXB0ZXItPnBkZXYpKQogCQllMTAwMGVfcmVzZXQoYWRhcHRlcik7CisKKwllMTAwMGVfZmx1c2hfZGVzY3JpcHRvcnMoYWRhcHRlcik7CisKIAllMTAwMF9jbGVhbl90eF9yaW5nKGFkYXB0ZXIpOwogCWUxMDAwX2NsZWFuX3J4X3JpbmcoYWRhcHRlcik7CiAKQEAgLTM3NjUsNiArMzc4OSwxMCBAQAogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJCXN0cnVjdCBlMTAwMF9hZGFwdGVyLCB1cGRhdGVfcGh5X3Rhc2spOworCisJaWYgKHRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuOworCiAJZTEwMDBfZ2V0X3BoeV9pbmZvKCZhZGFwdGVyLT5odyk7CiB9CiAKQEAgLTM3NzUsNiArMzgwMywxMCBAQAogc3RhdGljIHZvaWQgZTEwMDBfdXBkYXRlX3BoeV9pbmZvKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqKSBkYXRhOworCisJaWYgKHRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuOworCiAJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+dXBkYXRlX3BoeV90YXNrKTsKIH0KIApAQCAtNDE0OSw2ICs0MTgxLDkgQEAKIAl1MzIgbGluaywgdGN0bDsKIAlpbnQgdHhfcGVuZGluZyA9IDA7CiAKKwlpZiAodGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKIAlsaW5rID0gZTEwMDBlX2hhc19saW5rKGFkYXB0ZXIpOwogCWlmICgobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSAmJiBsaW5rKSB7CiAJCS8qIENhbmNlbCBzY2hlZHVsZWQgc3VzcGVuZCByZXF1ZXN0cy4gKi8KQEAgLTQzMDksNyArNDM0NCw2IEBACiAJCQkgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC4KIAkJCSAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuCiAJCQkgKi8KLQkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfY291bnQrKzsKIAkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwogCQkJLyogcmV0dXJuIGltbWVkaWF0ZWx5IHNpbmNlIHJlc2V0IGlzIGltbWluZW50ICovCiAJCQlyZXR1cm47CkBAIC00MzM4LDE5ICs0MzcyLDEyIEBACiAJZWxzZQogCQlldzMyKElDUywgRTEwMDBfSUNTX1JYRE1UMCk7CiAKKwkvKiBmbHVzaCBwZW5kaW5nIGRlc2NyaXB0b3JzIHRvIG1lbW9yeSBiZWZvcmUgZGV0ZWN0aW5nIFR4IGhhbmcgKi8KKwllMTAwMGVfZmx1c2hfZGVzY3JpcHRvcnMoYWRhcHRlcik7CisKIAkvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyIGV2ZXJ5IHdhdGNoZG9nIHBlcmlvZCAqLwogCWFkYXB0ZXItPmRldGVjdF90eF9odW5nID0gMTsKIAotCS8qIGZsdXNoIHBhcnRpYWwgZGVzY3JpcHRvcnMgdG8gbWVtb3J5IGJlZm9yZSBkZXRlY3RpbmcgVHggaGFuZyAqLwotCWlmIChhZGFwdGVyLT5mbGFnczIgJiBGTEFHMl9ETUFfQlVSU1QpIHsKLQkJZXczMihUSURWLCBhZGFwdGVyLT50eF9pbnRfZGVsYXkgfCBFMTAwMF9USURWX0ZQRCk7Ci0JCWV3MzIoUkRUUiwgYWRhcHRlci0+cnhfaW50X2RlbGF5IHwgRTEwMDBfUkRUUl9GUEQpOwotCQkvKgotCQkgKiBubyBuZWVkIHRvIGZsdXNoIHRoZSB3cml0ZXMgYmVjYXVzZSB0aGUgdGltZW91dCBjb2RlIGRvZXMKLQkJICogYW4gZXIzMiBmaXJzdCB0aGluZwotCQkgKi8KLQl9Ci0KIAkvKgogCSAqIFdpdGggODI1NzEgY29udHJvbGxlcnMsIExBQSBtYXkgYmUgb3ZlcndyaXR0ZW4gZHVlIHRvIGNvbnRyb2xsZXIKIAkgKiByZXNldCBmcm9tIHRoZSBvdGhlciBwb3J0LiBTZXQgdGhlIGFwcHJvcHJpYXRlIExBQSBpbiBSQVJbMF0KQEAgLTQ4ODgsNiArNDkxNSwxMCBAQAogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyOwogCWFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGUxMDAwX2FkYXB0ZXIsIHJlc2V0X3Rhc2spOwogCisJLyogZG9uJ3QgcnVuIHRoZSB0YXNrIGlmIGFscmVhZHkgZG93biAqLworCWlmICh0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKwogCWlmICghKChhZGFwdGVyLT5mbGFncyAmIEZMQUdfUlhfTkVFRFNfUkVTVEFSVCkgJiYKIAkgICAgICAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX1JYX1JFU1RBUlRfTk9XKSkpIHsKIAkJZTEwMDBlX2R1bXAoYWRhcHRlcik7CkBAIC01OTM2LDcgKzU5NjcsOCBAQAogCQkvKiBBUE1FIGJpdCBpbiBFRVBST00gaXMgbWFwcGVkIHRvIFdVQy5BUE1FICovCiAJCWVlcHJvbV9kYXRhID0gZXIzMihXVUMpOwogCQllZXByb21fYXBtZV9tYXNrID0gRTEwMDBfV1VDX0FQTUU7Ci0JCWlmIChlZXByb21fZGF0YSAmIEUxMDAwX1dVQ19QSFlfV0FLRSkKKwkJaWYgKChody0+bWFjLnR5cGUgPiBlMTAwMF9pY2gxMGxhbikgJiYKKwkJICAgIChlZXByb21fZGF0YSAmIEUxMDAwX1dVQ19QSFlfV0FLRSkpCiAJCQlhZGFwdGVyLT5mbGFnczIgfD0gRkxBRzJfSEFTX1BIWV9XQUtFVVA7CiAJfSBlbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfQVBNRV9JTl9DVFJMMykgewogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0FQTUVfQ0hFQ0tfUE9SVF9CICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jIGIvZHJpdmVycy9uZXQvZW5jMjhqNjAuYwppbmRleCAxMTJjNWFhLi45MDdiMDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCisrKyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKQEAgLTgxMiw3ICs4MTIsNyBAQAogCWlmIChuZXRpZl9tc2dfaHcocHJpdikpCiAJCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICI6IHJlYWRpbmcgVFNWIGF0IGFkZHI6MHglMDR4XG4iLAogCQkJIGVuZHB0ciArIDEpOwotCWVuYzI4ajYwX21lbV9yZWFkKHByaXYsIGVuZHB0ciArIDEsIHNpemVvZih0c3YpLCB0c3YpOworCWVuYzI4ajYwX21lbV9yZWFkKHByaXYsIGVuZHB0ciArIDEsIFRTVl9TSVpFLCB0c3YpOwogfQogCiBzdGF0aWMgdm9pZCBlbmMyOGo2MF9kdW1wX3RzdihzdHJ1Y3QgZW5jMjhqNjBfbmV0ICpwcml2LCBjb25zdCBjaGFyICptc2csCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWMuYyBiL2RyaXZlcnMvbmV0L2ZlYy5jCmluZGV4IDJhNzEzNzMuLmNkMDI4MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlYy5jCkBAIC03NCw3ICs3NCw4IEBACiAJfSwgewogCQkubmFtZSA9ICJpbXgyOC1mZWMiLAogCQkuZHJpdmVyX2RhdGEgPSBGRUNfUVVJUktfRU5FVF9NQUMgfCBGRUNfUVVJUktfU1dBUF9GUkFNRSwKLQl9CisJfSwKKwl7IH0KIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1hY2FkZHJbRVRIX0FMRU5dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCBhZjA5Mjk2Li45YzBiMWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtNTY0NSw2ICs1NjQ1LDggQEAKIAkJZ290byBvdXRfZXJyb3I7CiAJfQogCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwogCWRldl9pbmZvKCZwY2lfZGV2LT5kZXYsICJpZm5hbWUgJXMsIFBIWSBPVUkgMHgleCBAICVkLCBhZGRyICVwTVxuIiwKIAkJIGRldi0+bmFtZSwgbnAtPnBoeV9vdWksIG5wLT5waHlhZGRyLCBkZXYtPmRldl9hZGRyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdidmYvdmYuYyBiL2RyaXZlcnMvbmV0L2lnYnZmL3ZmLmMKaW5kZXggNzQ0ODZhOC4uYWYzODIyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvdmYuYworKysgYi9kcml2ZXJzL25ldC9pZ2J2Zi92Zi5jCkBAIC0yMjAsNyArMjIwLDcgQEAKICAqICBUaGUgcGFyYW1ldGVyIHJhcl9jb3VudCB3aWxsIHVzdWFsbHkgYmUgaHctPm1hYy5yYXJfZW50cnlfY291bnQKICAqICB1bmxlc3MgdGhlcmUgYXJlIHdvcmthcm91bmRzIHRoYXQgY2hhbmdlIHRoaXMuCiAgKiovCi12b2lkIGUxMDAwX3VwZGF0ZV9tY19hZGRyX2xpc3RfdmYoc3RydWN0IGUxMDAwX2h3ICpodywKK3N0YXRpYyB2b2lkIGUxMDAwX3VwZGF0ZV9tY19hZGRyX2xpc3RfdmYoc3RydWN0IGUxMDAwX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqbWNfYWRkcl9saXN0LCB1MzIgbWNfYWRkcl9jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcmFyX3VzZWRfY291bnQsIHUzMiByYXJfY291bnQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCmluZGV4IGQ1ZWRlMmQuLmViYmRhN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCkBAIC0xMzcwLDYgKzEzNzAsOSBAQAogCQlod19kYmcoaHcsICIgTmV3IE1BQyBBZGRyID0lcE1cbiIsIGh3LT5tYWMuYWRkcik7CiAKIAkJaHctPm1hYy5vcHMuc2V0X3JhcihodywgMCwgaHctPm1hYy5hZGRyLCAwLCBJWEdCRV9SQUhfQVYpOworCisJCS8qICBjbGVhciBWTURxIHBvb2wvcXVldWUgc2VsZWN0aW9uIGZvciBSQVIgMCAqLworCQlody0+bWFjLm9wcy5jbGVhcl92bWRxKGh3LCAwLCBJWEdCRV9DTEVBUl9WTURRX0FMTCk7CiAJfQogCWh3LT5hZGRyX2N0cmwub3ZlcmZsb3dfcHJvbWlzYyA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYwppbmRleCA2MzQyZDQ4Li5jNTRhODgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCkBAIC0xNTksMTMgKzE1OSwxMyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJdW5zaWduZWQgaW50IGksIGosIGRtYWNvdW50OwogCXVuc2lnbmVkIGludCBsZW47Ci0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBidWZmbGVuID0gNDA5NjsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJ1ZmZsZW4gPSBJWEdCRV9GQ0JVRkZfTUlOOwogCXVuc2lnbmVkIGludCBmaXJzdG9mZiA9IDA7CiAJdW5zaWduZWQgaW50IGxhc3RzaXplOwogCXVuc2lnbmVkIGludCB0aGlzb2ZmID0gMDsKIAl1bnNpZ25lZCBpbnQgdGhpc2xlbiA9IDA7CiAJdTMyIGZjYnVmZiwgZmNkbWFydywgZmNmbHRydzsKLQlkbWFfYWRkcl90IGFkZHI7CisJZG1hX2FkZHJfdCBhZGRyID0gMDsKIAogCWlmICghbmV0ZGV2IHx8ICFzZ2wpCiAJCXJldHVybiAwOwpAQCAtMjU0LDYgKzI1NCwyNCBAQAogCS8qIG9ubHkgdGhlIGxhc3QgYnVmZmVyIG1heSBoYXZlIG5vbi1mdWxsIGJ1ZmZsZW4gKi8KIAlsYXN0c2l6ZSA9IHRoaXNvZmYgKyB0aGlzbGVuOwogCisJLyoKKwkgKiBsYXN0c2l6ZSBjYW4gbm90IGJlIGJ1ZmZlciBsZW4uCisJICogSWYgaXQgaXMgdGhlbiBhZGRpbmcgYW5vdGhlciBidWZmZXIgd2l0aCBsYXN0c2l6ZSA9IDEuCisJICovCisJaWYgKGxhc3RzaXplID09IGJ1ZmZsZW4pIHsKKwkJaWYgKGogPj0gSVhHQkVfQlVGRkNOVF9NQVgpIHsKKwkJCWVfZXJyKGRydiwgInhpZD0leDolZCwlZCwlZDphZGRyPSVsbHggIgorCQkJCSJub3QgZW5vdWdoIHVzZXIgYnVmZmVycy4gV2UgbmVlZCBhbiBleHRyYSAiCisJCQkJImJ1ZmZlciBiZWNhdXNlIGxhc3RzaXplIGlzIGJ1ZmZsZW4uXG4iLAorCQkJCXhpZCwgaSwgaiwgZG1hY291bnQsICh1NjQpYWRkcik7CisJCQlnb3RvIG91dF9ub2RkcF9mcmVlOworCQl9CisKKwkJZGRwLT51ZGxbal0gPSAodTY0KShmY29lLT5leHRyYV9kZHBfYnVmZmVyX2RtYSk7CisJCWorKzsKKwkJbGFzdHNpemUgPSAxOworCX0KKwogCWZjYnVmZiA9IChJWEdCRV9GQ0JVRkZfNEtCIDw8IElYR0JFX0ZDQlVGRl9CVUZGU0laRV9TSElGVCk7CiAJZmNidWZmIHw9ICgoaiAmIDB4ZmYpIDw8IElYR0JFX0ZDQlVGRl9CVUZGQ05UX1NISUZUKTsKIAlmY2J1ZmYgfD0gKGZpcnN0b2ZmIDw8IElYR0JFX0ZDQlVGRl9PRkZTRVRfU0hJRlQpOwpAQCAtNTMyLDYgKzU1MCwyNCBAQAogCQkJZV9lcnIoZHJ2LCAiZmFpbGVkIHRvIGFsbG9jYXRlZCBGQ29FIEREUCBwb29sXG4iKTsKIAogCQlzcGluX2xvY2tfaW5pdCgmZmNvZS0+bG9jayk7CisKKwkJLyogRXh0cmEgYnVmZmVyIHRvIGJlIHNoYXJlZCBieSBhbGwgRERQcyBmb3IgSFcgd29yayBhcm91bmQgKi8KKwkJZmNvZS0+ZXh0cmFfZGRwX2J1ZmZlciA9IGttYWxsb2MoSVhHQkVfRkNCVUZGX01JTiwgR0ZQX0FUT01JQyk7CisJCWlmIChmY29lLT5leHRyYV9kZHBfYnVmZmVyID09IE5VTEwpIHsKKwkJCWVfZXJyKGRydiwgImZhaWxlZCB0byBhbGxvY2F0ZWQgZXh0cmEgRERQIGJ1ZmZlclxuIik7CisJCQlnb3RvIG91dF9leHRyYV9kZHBfYnVmZmVyX2FsbG9jOworCQl9CisKKwkJZmNvZS0+ZXh0cmFfZGRwX2J1ZmZlcl9kbWEgPQorCQkJZG1hX21hcF9zaW5nbGUoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkgICAgICAgZmNvZS0+ZXh0cmFfZGRwX2J1ZmZlciwKKwkJCQkgICAgICAgSVhHQkVfRkNCVUZGX01JTiwKKwkJCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJICAgICAgZmNvZS0+ZXh0cmFfZGRwX2J1ZmZlcl9kbWEpKSB7CisJCQllX2VycihkcnYsICJmYWlsZWQgdG8gbWFwIGV4dHJhIEREUCBidWZmZXJcbiIpOworCQkJZ290byBvdXRfZXh0cmFfZGRwX2J1ZmZlcl9kbWE7CisJCX0KIAl9CiAKIAkvKiBFbmFibGUgTDIgZXRoIHR5cGUgZmlsdGVyIGZvciBGQ29FICovCkBAIC01ODEsNiArNjE3LDE0IEBACiAJCX0KIAl9CiAjZW5kaWYKKworCXJldHVybjsKKworb3V0X2V4dHJhX2RkcF9idWZmZXJfZG1hOgorCWtmcmVlKGZjb2UtPmV4dHJhX2RkcF9idWZmZXIpOworb3V0X2V4dHJhX2RkcF9idWZmZXJfYWxsb2M6CisJcGNpX3Bvb2xfZGVzdHJveShmY29lLT5wb29sKTsKKwlmY29lLT5wb29sID0gTlVMTDsKIH0KIAogLyoqCkBAIC02MDAsNiArNjQ0LDExIEBACiAJaWYgKGZjb2UtPnBvb2wpIHsKIAkJZm9yIChpID0gMDsgaSA8IElYR0JFX0ZDT0VfRERQX01BWDsgaSsrKQogCQkJaXhnYmVfZmNvZV9kZHBfcHV0KGFkYXB0ZXItPm5ldGRldiwgaSk7CisJCWRtYV91bm1hcF9zaW5nbGUoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkgZmNvZS0+ZXh0cmFfZGRwX2J1ZmZlcl9kbWEsCisJCQkJIElYR0JFX0ZDQlVGRl9NSU4sCisJCQkJIERNQV9GUk9NX0RFVklDRSk7CisJCWtmcmVlKGZjb2UtPmV4dHJhX2RkcF9idWZmZXIpOwogCQlwY2lfcG9vbF9kZXN0cm95KGZjb2UtPnBvb2wpOwogCQlmY29lLT5wb29sID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmgKaW5kZXggNGJjMmM1NS4uNjVjYzhmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuaApAQCAtNzAsNiArNzAsOCBAQAogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgcGNpX3Bvb2wgKnBvb2w7CiAJc3RydWN0IGl4Z2JlX2Zjb2VfZGRwIGRkcFtJWEdCRV9GQ09FX0REUF9NQVhdOworCXVuc2lnbmVkIGNoYXIgKmV4dHJhX2RkcF9idWZmZXI7CisJZG1hX2FkZHJfdCBleHRyYV9kZHBfYnVmZmVyX2RtYTsKIH07CiAKICNlbmRpZiAvKiBfSVhHQkVfRkNPRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggNjAyMDc4Yi4uMzBmOWNjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtNTIsNyArNTIsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3N0cmluZ1tdID0KIAkJCSAgICAgICJJbnRlbChSKSAxMCBHaWdhYml0IFBDSSBFeHByZXNzIE5ldHdvcmsgRHJpdmVyIjsKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMy4wLjEyLWsyIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMy4yLjktazIiCiBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKIHN0YXRpYyBjaGFyIGl4Z2JlX2NvcHlyaWdodFtdID0gIkNvcHlyaWdodCAoYykgMTk5OS0yMDEwIEludGVsIENvcnBvcmF0aW9uLiI7CiAKQEAgLTMxNzYsOSArMzE3NiwxNiBAQAogCXUzMiBtaGFkZCwgaGxyZWcwOwogCiAJLyogRGVjaWRlIHdoZXRoZXIgdG8gdXNlIHBhY2tldCBzcGxpdCBtb2RlIG9yIG5vdCAqLworCS8qIE9uIGJ5IGRlZmF1bHQgKi8KKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CisKIAkvKiBEbyBub3QgdXNlIHBhY2tldCBzcGxpdCBpZiB3ZSdyZSBpbiBTUi1JT1YgTW9kZSAqLwotCWlmICghYWRhcHRlci0+bnVtX3ZmcykKLQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEOworCWlmIChhZGFwdGVyLT5udW1fdmZzKQorCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SWF9QU19FTkFCTEVEOworCisJLyogRGlzYWJsZSBwYWNrZXQgc3BsaXQgZHVlIHRvIDgyNTk5IGVycmF0dW0gIzQ1ICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKIAogCS8qIFNldCB0aGUgUlggYnVmZmVyIGxlbmd0aCBhY2NvcmRpbmcgdG8gdGhlIG1vZGUgKi8KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQpIHsKQEAgLTM3MjEsNyArMzcyOCw4IEBACiAJCQkgKiBXZSBuZWVkIHRvIHRyeSBhbmQgZm9yY2UgYW4gYXV0b25lZ290aWF0aW9uCiAJCQkgKiBzZXNzaW9uLCB0aGVuIGJyaW5nIHVwIGxpbmsuCiAJCQkgKi8KLQkJCWh3LT5tYWMub3BzLnNldHVwX3NmcChodyk7CisJCQlpZiAoaHctPm1hYy5vcHMuc2V0dXBfc2ZwKQorCQkJCWh3LT5tYWMub3BzLnNldHVwX3NmcChodyk7CiAJCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSykpCiAJCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKIAkJfSBlbHNlIHsKQEAgLTQ4NjMsMTYgKzQ4NzEsMTMgQEAKIHsKIAlpbnQgcV9pZHgsIG51bV9xX3ZlY3RvcnM7CiAJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvcjsKLQlpbnQgbmFwaV92ZWN0b3JzOwogCWludCAoKnBvbGwpKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKIAkJbnVtX3FfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOwotCQluYXBpX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOwogCQlwb2xsID0gJml4Z2JlX2NsZWFuX3J4dHhfbWFueTsKIAl9IGVsc2UgewogCQludW1fcV92ZWN0b3JzID0gMTsKLQkJbmFwaV92ZWN0b3JzID0gMTsKIAkJcG9sbCA9ICZpeGdiZV9wb2xsOwogCX0KIApAQCAtNTk2NCw3ICs1OTY5LDggQEAKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoYWRhcHRlci0+bmV0ZGV2KTsKIAkJcmV0dXJuOwogCX0KLQlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOworCWlmIChody0+bWFjLm9wcy5zZXR1cF9zZnApCisJCWh3LT5tYWMub3BzLnNldHVwX3NmcChodyk7CiAKIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSykpCiAJCS8qIFRoaXMgd2lsbCBhbHNvIHdvcmsgZm9yIERBIFR3aW5heCBjb25uZWN0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3NyaW92LmMKaW5kZXggNDdiMTU3My4uMTg3YjNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jCkBAIC0xMTAsMTIgKzExMCwxMCBAQAogCXJldHVybiBhZGFwdGVyLT5ody5tYWMub3BzLnNldF92ZnRhKCZhZGFwdGVyLT5odywgdmlkLCB2ZiwgKGJvb2wpYWRkKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfdm1vbHIoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHZmLCBib29sIGF1cGUpCiB7CiAJdTMyIHZtb2xyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZNT0xSKHZmKSk7CiAJdm1vbHIgfD0gKElYR0JFX1ZNT0xSX1JPTVBFIHwKLQkJICBJWEdCRV9WTU9MUl9ST1BFIHwKIAkJICBJWEdCRV9WTU9MUl9CQU0pOwogCWlmIChhdXBlKQogCQl2bW9sciB8PSBJWEdCRV9WTU9MUl9BVVBFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jCmluZGV4IDNhODkyMzkuLmYyNTE4YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMKQEAgLTEzMywxNyArMTMzLDE3IEBACiAJfQogCiAJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NUUkwsIChjdHJsIHwgSVhHQkVfQ1RSTF9SU1QpKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NUUkwsIChjdHJsIHwgcmVzZXRfYml0KSk7CiAJSVhHQkVfV1JJVEVfRkxVU0goaHcpOwogCiAJLyogUG9sbCBmb3IgcmVzZXQgYml0IHRvIHNlbGYtY2xlYXIgaW5kaWNhdGluZyByZXNldCBpcyBjb21wbGV0ZSAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCXVkZWxheSgxKTsKIAkJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKLQkJaWYgKCEoY3RybCAmIElYR0JFX0NUUkxfUlNUKSkKKwkJaWYgKCEoY3RybCAmIHJlc2V0X2JpdCkpCiAJCQlicmVhazsKIAl9Ci0JaWYgKGN0cmwgJiBJWEdCRV9DVFJMX1JTVCkgeworCWlmIChjdHJsICYgcmVzZXRfYml0KSB7CiAJCXN0YXR1cyA9IElYR0JFX0VSUl9SRVNFVF9GQUlMRUQ7CiAJCWh3X2RiZyhodywgIlJlc2V0IHBvbGxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlLlxuIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjYi5jIGIvZHJpdmVycy9uZXQvbWFjYi5jCmluZGV4IGY2OWU3M2UuLjc5Y2NiNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2IuYworKysgYi9kcml2ZXJzL25ldC9tYWNiLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7IGkrKykKIAkJYnAtPm1paV9idXMtPmlycVtpXSA9IFBIWV9QT0xMOwogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEoYnAtPmRldiwgYnAtPm1paV9idXMpOworCWRldl9zZXRfZHJ2ZGF0YSgmYnAtPmRldi0+ZGV2LCBicC0+bWlpX2J1cyk7CiAKIAlpZiAobWRpb2J1c19yZWdpc3RlcihicC0+bWlpX2J1cykpCiAJCWdvdG8gZXJyX291dF9mcmVlX21kaW9faXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwppbmRleCA0ZmZkYzE4Li4yNzY1YTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwpAQCAtMTI4Niw2ICsxMjg2LDIxIEBACiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzY0KSB9LCAvKiBNVDI2NDY4IENvbm5lY3RYIEVOIDEwR2lnRSBQQ0llIGdlbjIqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc0NikgfSwgLyogTVQyNjQzOCBDb25uZWN0WCBFTiA0MEdpZ0UgUENJZSBnZW4yIDVHVC9zICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzZlKSB9LCAvKiBNVDI2NDc4IENvbm5lY3RYMiA0MEdpZ0UgUENJZSBnZW4yICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDAyKSB9LCAvKiBNVDI1NDAwIEZhbWlseSBbQ29ubmVjdFgtMiBWaXJ0dWFsIEZ1bmN0aW9uXSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwMykgfSwgLyogTVQyNzUwMCBGYW1pbHkgW0Nvbm5lY3RYLTNdICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDA0KSB9LCAvKiBNVDI3NTAwIEZhbWlseSBbQ29ubmVjdFgtMyBWaXJ0dWFsIEZ1bmN0aW9uXSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwNSkgfSwgLyogTVQyNzUxMCBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDYpIH0sIC8qIE1UMjc1MTEgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDA3KSB9LCAvKiBNVDI3NTIwIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwOCkgfSwgLyogTVQyNzUyMSBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDkpIH0sIC8qIE1UMjc1MzAgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDBhKSB9LCAvKiBNVDI3NTMxIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwYikgfSwgLyogTVQyNzU0MCBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMGMpIH0sIC8qIE1UMjc1NDEgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDBkKSB9LCAvKiBNVDI3NTUwIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwZSkgfSwgLyogTVQyNzU1MSBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMGYpIH0sIC8qIE1UMjc1NjAgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDEwKSB9LCAvKiBNVDI3NTYxIEZhbWlseSAqLwogCXsgMCwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCAyNTQxMzIxLi45ZmI1OWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtNDQ4OSw2ICs0NDg5LDkgQEAKIHsKIAlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKIAlpbnQgZmlyc3RfcnhfY2hhbm5lbCwgZmlyc3RfdHhfY2hhbm5lbDsKKwlpbnQgbnVtX3J4X3JpbmdzLCBudW1fdHhfcmluZ3M7CisJc3RydWN0IHJ4X3JpbmdfaW5mbyAqcnhfcmluZ3M7CisJc3RydWN0IHR4X3JpbmdfaW5mbyAqdHhfcmluZ3M7CiAJaW50IGksIHBvcnQsIGVycjsKIAogCXBvcnQgPSBucC0+cG9ydDsKQEAgLTQ0OTgsMTggKzQ1MDEsMjEgQEAKIAkJZmlyc3RfdHhfY2hhbm5lbCArPSBwYXJlbnQtPnR4Y2hhbl9wZXJfcG9ydFtpXTsKIAl9CiAKLQlucC0+bnVtX3J4X3JpbmdzID0gcGFyZW50LT5yeGNoYW5fcGVyX3BvcnRbcG9ydF07Ci0JbnAtPm51bV90eF9yaW5ncyA9IHBhcmVudC0+dHhjaGFuX3Blcl9wb3J0W3BvcnRdOworCW51bV9yeF9yaW5ncyA9IHBhcmVudC0+cnhjaGFuX3Blcl9wb3J0W3BvcnRdOworCW51bV90eF9yaW5ncyA9IHBhcmVudC0+dHhjaGFuX3Blcl9wb3J0W3BvcnRdOwogCi0JbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhucC0+ZGV2LCBucC0+bnVtX3J4X3JpbmdzKTsKLQluZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5wLT5kZXYsIG5wLT5udW1fdHhfcmluZ3MpOwotCi0JbnAtPnJ4X3JpbmdzID0ga2NhbGxvYyhucC0+bnVtX3J4X3JpbmdzLCBzaXplb2Yoc3RydWN0IHJ4X3JpbmdfaW5mbyksCi0JCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJcnhfcmluZ3MgPSBrY2FsbG9jKG51bV9yeF9yaW5ncywgc2l6ZW9mKHN0cnVjdCByeF9yaW5nX2luZm8pLAorCQkJICAgR0ZQX0tFUk5FTCk7CiAJZXJyID0gLUVOT01FTTsKLQlpZiAoIW5wLT5yeF9yaW5ncykKKwlpZiAoIXJ4X3JpbmdzKQogCQlnb3RvIG91dF9lcnI7CiAKKwlucC0+bnVtX3J4X3JpbmdzID0gbnVtX3J4X3JpbmdzOworCXNtcF93bWIoKTsKKwlucC0+cnhfcmluZ3MgPSByeF9yaW5nczsKKworCW5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMobnAtPmRldiwgbnVtX3J4X3JpbmdzKTsKKwogCWZvciAoaSA9IDA7IGkgPCBucC0+bnVtX3J4X3JpbmdzOyBpKyspIHsKIAkJc3RydWN0IHJ4X3JpbmdfaW5mbyAqcnAgPSAmbnAtPnJ4X3JpbmdzW2ldOwogCkBAIC00NTM4LDEyICs0NTQ0LDE4IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCW5wLT50eF9yaW5ncyA9IGtjYWxsb2MobnAtPm51bV90eF9yaW5ncywgc2l6ZW9mKHN0cnVjdCB0eF9yaW5nX2luZm8pLAotCQkJICAgICAgIEdGUF9LRVJORUwpOworCXR4X3JpbmdzID0ga2NhbGxvYyhudW1fdHhfcmluZ3MsIHNpemVvZihzdHJ1Y3QgdHhfcmluZ19pbmZvKSwKKwkJCSAgIEdGUF9LRVJORUwpOwogCWVyciA9IC1FTk9NRU07Ci0JaWYgKCFucC0+dHhfcmluZ3MpCisJaWYgKCF0eF9yaW5ncykKIAkJZ290byBvdXRfZXJyOwogCisJbnAtPm51bV90eF9yaW5ncyA9IG51bV90eF9yaW5nczsKKwlzbXBfd21iKCk7CisJbnAtPnR4X3JpbmdzID0gdHhfcmluZ3M7CisKKwluZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5wLT5kZXYsIG51bV90eF9yaW5ncyk7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPm51bV90eF9yaW5nczsgaSsrKSB7CiAJCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJwID0gJm5wLT50eF9yaW5nc1tpXTsKIApAQCAtNjI0NiwxMSArNjI1OCwxNyBAQAogc3RhdGljIHZvaWQgbml1X2dldF9yeF9zdGF0cyhzdHJ1Y3Qgbml1ICpucCkKIHsKIAl1bnNpZ25lZCBsb25nIHBrdHMsIGRyb3BwZWQsIGVycm9ycywgYnl0ZXM7CisJc3RydWN0IHJ4X3JpbmdfaW5mbyAqcnhfcmluZ3M7CiAJaW50IGk7CiAKIAlwa3RzID0gZHJvcHBlZCA9IGVycm9ycyA9IGJ5dGVzID0gMDsKKworCXJ4X3JpbmdzID0gQUNDRVNTX09OQ0UobnAtPnJ4X3JpbmdzKTsKKwlpZiAoIXJ4X3JpbmdzKQorCQlnb3RvIG5vX3JpbmdzOworCiAJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fcnhfcmluZ3M7IGkrKykgewotCQlzdHJ1Y3QgcnhfcmluZ19pbmZvICpycCA9ICZucC0+cnhfcmluZ3NbaV07CisJCXN0cnVjdCByeF9yaW5nX2luZm8gKnJwID0gJnJ4X3JpbmdzW2ldOwogCiAJCW5pdV9zeW5jX3J4X2Rpc2NhcmRfc3RhdHMobnAsIHJwLCAwKTsKIApAQCAtNjI1OSw2ICs2Mjc3LDggQEAKIAkJZHJvcHBlZCArPSBycC0+cnhfZHJvcHBlZDsKIAkJZXJyb3JzICs9IHJwLT5yeF9lcnJvcnM7CiAJfQorCitub19yaW5nczoKIAlucC0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzID0gcGt0czsKIAlucC0+ZGV2LT5zdGF0cy5yeF9ieXRlcyA9IGJ5dGVzOwogCW5wLT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQgPSBkcm9wcGVkOwpAQCAtNjI2OCwxNiArNjI4OCwyNCBAQAogc3RhdGljIHZvaWQgbml1X2dldF90eF9zdGF0cyhzdHJ1Y3Qgbml1ICpucCkKIHsKIAl1bnNpZ25lZCBsb25nIHBrdHMsIGVycm9ycywgYnl0ZXM7CisJc3RydWN0IHR4X3JpbmdfaW5mbyAqdHhfcmluZ3M7CiAJaW50IGk7CiAKIAlwa3RzID0gZXJyb3JzID0gYnl0ZXMgPSAwOworCisJdHhfcmluZ3MgPSBBQ0NFU1NfT05DRShucC0+dHhfcmluZ3MpOworCWlmICghdHhfcmluZ3MpCisJCWdvdG8gbm9fcmluZ3M7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPm51bV90eF9yaW5nczsgaSsrKSB7Ci0JCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJwID0gJm5wLT50eF9yaW5nc1tpXTsKKwkJc3RydWN0IHR4X3JpbmdfaW5mbyAqcnAgPSAmdHhfcmluZ3NbaV07CiAKIAkJcGt0cyArPSBycC0+dHhfcGFja2V0czsKIAkJYnl0ZXMgKz0gcnAtPnR4X2J5dGVzOwogCQllcnJvcnMgKz0gcnAtPnR4X2Vycm9yczsKIAl9CisKK25vX3JpbmdzOgogCW5wLT5kZXYtPnN0YXRzLnR4X3BhY2tldHMgPSBwa3RzOwogCW5wLT5kZXYtPnN0YXRzLnR4X2J5dGVzID0gYnl0ZXM7CiAJbnAtPmRldi0+c3RhdHMudHhfZXJyb3JzID0gZXJyb3JzOwpAQCAtNjI4Nyw5ICs2MzE1LDEwIEBACiB7CiAJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0Jbml1X2dldF9yeF9zdGF0cyhucCk7Ci0Jbml1X2dldF90eF9zdGF0cyhucCk7Ci0KKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5pdV9nZXRfcnhfc3RhdHMobnApOworCQluaXVfZ2V0X3R4X3N0YXRzKG5wKTsKKwl9CiAJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaCBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZS5oCmluZGV4IGEwYzI2YTkuLmUxZTMzYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZS5oCisrKyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZS5oCkBAIC03Myw3ICs3Myw3IEBACiAJc3RydWN0IHBjaF9nYmVfcmVnc19tYWNfYWRyIG1hY19hZHJbMTZdOwogCXUzMiBBRERSX01BU0s7CiAJdTMyIE1JSU07Ci0JdTMyIHJlc2VydmUyOworCXUzMiBNQUNfQUREUl9MT0FEOwogCXUzMiBSR01JSV9TVDsKIAl1MzIgUkdNSUlfQ1RSTDsKIAl1MzIgcmVzZXJ2ZTNbM107CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYwppbmRleCBkNzM1NTMwLi5iOTllOTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgUENIX0dCRV9TSE9SVF9QS1QJCTY0CiAjZGVmaW5lIERTQ19JTklUMTYJCQkweEMwMDAKICNkZWZpbmUgUENIX0dCRV9ETUFfQUxJR04JCTAKKyNkZWZpbmUgUENIX0dCRV9ETUFfUEFERElORwkJMgogI2RlZmluZSBQQ0hfR0JFX1dBVENIRE9HX1BFUklPRAkJKDEgKiBIWikJLyogd2F0Y2hkb2cgdGltZSAqLwogI2RlZmluZSBQQ0hfR0JFX0NPUFlCUkVBS19ERUZBVUxUCTI1NgogI2RlZmluZSBQQ0hfR0JFX1BDSV9CQVIJCQkxCkBAIC04OCw2ICs4OSwxMiBAQAogc3RhdGljIGludCBwY2hfZ2JlX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgYWRkciwgaW50IHJlZyk7CiBzdGF0aWMgdm9pZCBwY2hfZ2JlX21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGFkZHIsIGludCByZWcsCiAJCQkgICAgICAgaW50IGRhdGEpOworCitpbmxpbmUgdm9pZCBwY2hfZ2JlX21hY19sb2FkX21hY19hZGRyKHN0cnVjdCBwY2hfZ2JlX2h3ICpodykKK3sKKwlpb3dyaXRlMzIoMHgwMSwgJmh3LT5yZWctPk1BQ19BRERSX0xPQUQpOworfQorCiAvKioKICAqIHBjaF9nYmVfbWFjX3JlYWRfbWFjX2FkZHIgLSBSZWFkIE1BQyBhZGRyZXNzCiAgKiBAaHc6CSAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQpAQCAtNTE5LDcgKzUyNiw5IEBACiAJc3RydWN0IHBjaF9nYmVfYWRhcHRlciAqYWRhcHRlcjsKIAlhZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIsIHJlc2V0X3Rhc2spOwogCisJcnRubF9sb2NrKCk7CiAJcGNoX2diZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworCXJ0bmxfdW5sb2NrKCk7CiB9CiAKIC8qKgpAQCAtNTI4LDE0ICs1MzcsOCBAQAogICovCiB2b2lkIHBjaF9nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0KLQlydG5sX2xvY2soKTsKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci0JCXBjaF9nYmVfZG93bihhZGFwdGVyKTsKLQkJcGNoX2diZV91cChhZGFwdGVyKTsKLQl9Ci0JcnRubF91bmxvY2soKTsKKwlwY2hfZ2JlX2Rvd24oYWRhcHRlcik7CisJcGNoX2diZV91cChhZGFwdGVyKTsKIH0KIAogLyoqCkBAIC0xMzY5LDE2ICsxMzcyLDEzIEBACiAJc3RydWN0IHBjaF9nYmVfYnVmZmVyICpidWZmZXJfaW5mbzsKIAlzdHJ1Y3QgcGNoX2diZV9yeF9kZXNjICpyeF9kZXNjOwogCXUzMiBsZW5ndGg7Ci0JdW5zaWduZWQgY2hhciB0bXBfcGFja2V0W0VUSF9ITEVOXTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBpbnQgY2xlYW5lZF9jb3VudCA9IDA7CiAJYm9vbCBjbGVhbmVkID0gZmFsc2U7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV3X3NrYjsKIAl1OCBkbWFfc3RhdHVzOwogCXUxNiBnYmVjX3N0YXR1czsKIAl1MzIgdGNwX2lwX3N0YXR1czsKLQl1OCBza2JfY29weV9mbGFnID0gMDsKLQl1OCBza2JfcGFkZGluZ19mbGFnID0gMDsKIAogCWkgPSByeF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCkBAIC0xNDIyLDU1ICsxNDIyLDcwIEBACiAJCQlwcl9lcnIoIlJlY2VpdmUgQ1JDIEVycm9yXG4iKTsKIAkJfSBlbHNlIHsKIAkJCS8qIGdldCByZWNlaXZlIGxlbmd0aCAqLwotCQkJLyogbGVuZ3RoIGNvbnZlcnRbLTNdLCBwYWRkaW5nWy0yXSAqLwotCQkJbGVuZ3RoID0gKHJ4X2Rlc2MtPnJ4X3dvcmRzX2VvYikgLSAzIC0gMjsKKwkJCS8qIGxlbmd0aCBjb252ZXJ0Wy0zXSAqLworCQkJbGVuZ3RoID0gKHJ4X2Rlc2MtPnJ4X3dvcmRzX2VvYikgLSAzOwogCiAJCQkvKiBEZWNpZGUgdGhlIGRhdGEgY29udmVyc2lvbiBtZXRob2QgKi8KIAkJCWlmICghYWRhcHRlci0+cnhfY3N1bSkgewogCQkJCS8qIFtIZWFkZXI6MTRdW3BheWxvYWRdICovCi0JCQkJc2tiX3BhZGRpbmdfZmxhZyA9IDA7Ci0JCQkJc2tiX2NvcHlfZmxhZyA9IDE7Ci0JCQl9IGVsc2UgewotCQkJCS8qIFtIZWFkZXI6MTRdW3BhZGRpbmc6Ml1bcGF5bG9hZF0gKi8KLQkJCQlza2JfcGFkZGluZ19mbGFnID0gMTsKLQkJCQlpZiAobGVuZ3RoIDwgY29weWJyZWFrKQotCQkJCQlza2JfY29weV9mbGFnID0gMTsKLQkJCQllbHNlCi0JCQkJCXNrYl9jb3B5X2ZsYWcgPSAwOwotCQkJfQotCi0JCQkvKiBEYXRhIGNvbnZlcnNpb24gKi8KLQkJCWlmIChza2JfY29weV9mbGFnKSB7CS8qIHJlY3ljbGUgIHNrYiAqLwotCQkJCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwotCQkJCW5ld19za2IgPQotCQkJCSAgICBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwKLQkJCQkJCSAgICAgbGVuZ3RoICsgTkVUX0lQX0FMSUdOKTsKLQkJCQlpZiAobmV3X3NrYikgewotCQkJCQlpZiAoIXNrYl9wYWRkaW5nX2ZsYWcpIHsKLQkJCQkJCXNrYl9yZXNlcnZlKG5ld19za2IsCi0JCQkJCQkJCU5FVF9JUF9BTElHTik7CisJCQkJaWYgKE5FVF9JUF9BTElHTikgeworCQkJCQkvKiBCZWNhdXNlIGFsaWdubWVudCBkaWZmZXJzLAorCQkJCQkgKiB0aGUgbmV3X3NrYiBpcyBuZXdseSBhbGxvY2F0ZWQsCisJCQkJCSAqIGFuZCBkYXRhIGlzIGNvcGllZCB0byBuZXdfc2tiLiovCisJCQkJCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwKKwkJCQkJCQkgbGVuZ3RoICsgTkVUX0lQX0FMSUdOKTsKKwkJCQkJaWYgKCFuZXdfc2tiKSB7CisJCQkJCQkvKiBkb3Jyb3AgZXJyb3IgKi8KKwkJCQkJCXByX2VycigiTmV3IHNrYiBhbGxvY2F0aW9uICIKKwkJCQkJCQkiRXJyb3JcbiIpOworCQkJCQkJZ290byBkb3Jyb3A7CiAJCQkJCX0KKwkJCQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgTkVUX0lQX0FMSUdOKTsKIAkJCQkJbWVtY3B5KG5ld19za2ItPmRhdGEsIHNrYi0+ZGF0YSwKLQkJCQkJCWxlbmd0aCk7Ci0JCQkJCS8qIHNhdmUgdGhlIHNrYgotCQkJCQkgKiBpbiBidWZmZXJfaW5mbyBhcyBnb29kICovCisJCQkJCSAgICAgICBsZW5ndGgpOwogCQkJCQlza2IgPSBuZXdfc2tiOwotCQkJCX0gZWxzZSBpZiAoIXNrYl9wYWRkaW5nX2ZsYWcpIHsKLQkJCQkJLyogZG9ycm9wIGVycm9yICovCi0JCQkJCXByX2VycigiTmV3IHNrYiBhbGxvY2F0aW9uIEVycm9yXG4iKTsKLQkJCQkJZ290byBkb3Jyb3A7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogRE1BIGJ1ZmZlciBpcyB1c2VkIGFzIFNLQiBhcyBpdCBpcy4qLworCQkJCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCQkJCS8qIFtIZWFkZXI6MTRdW3BhZGRpbmc6Ml1bcGF5bG9hZF0gKi8KKwkJCQkvKiBUaGUgbGVuZ3RoIGluY2x1ZGVzIHBhZGRpbmcgbGVuZ3RoICovCisJCQkJbGVuZ3RoID0gbGVuZ3RoIC0gUENIX0dCRV9ETUFfUEFERElORzsKKwkJCQlpZiAoKGxlbmd0aCA8IGNvcHlicmVhaykgfHwKKwkJCQkgICAgKE5FVF9JUF9BTElHTiAhPSBQQ0hfR0JFX0RNQV9QQURESU5HKSkgeworCQkJCQkvKiBCZWNhdXNlIGFsaWdubWVudCBkaWZmZXJzLAorCQkJCQkgKiB0aGUgbmV3X3NrYiBpcyBuZXdseSBhbGxvY2F0ZWQsCisJCQkJCSAqIGFuZCBkYXRhIGlzIGNvcGllZCB0byBuZXdfc2tiLgorCQkJCQkgKiBQYWRkaW5nIGRhdGEgaXMgZGVsZXRlZAorCQkJCQkgKiBhdCB0aGUgdGltZSBvZiBhIGNvcHkuKi8KKwkJCQkJbmV3X3NrYiA9IG5ldGRldl9hbGxvY19za2IobmV0ZGV2LAorCQkJCQkJCSBsZW5ndGggKyBORVRfSVBfQUxJR04pOworCQkJCQlpZiAoIW5ld19za2IpIHsKKwkJCQkJCS8qIGRvcnJvcCBlcnJvciAqLworCQkJCQkJcHJfZXJyKCJOZXcgc2tiIGFsbG9jYXRpb24gIgorCQkJCQkJCSJFcnJvclxuIik7CisJCQkJCQlnb3RvIGRvcnJvcDsKKwkJCQkJfQorCQkJCQlza2JfcmVzZXJ2ZShuZXdfc2tiLCBORVRfSVBfQUxJR04pOworCQkJCQltZW1jcHkobmV3X3NrYi0+ZGF0YSwgc2tiLT5kYXRhLAorCQkJCQkgICAgICAgRVRIX0hMRU4pOworCQkJCQltZW1jcHkoJm5ld19za2ItPmRhdGFbRVRIX0hMRU5dLAorCQkJCQkgICAgICAgJnNrYi0+ZGF0YVtFVEhfSExFTiArCisJCQkJCSAgICAgICBQQ0hfR0JFX0RNQV9QQURESU5HXSwKKwkJCQkJICAgICAgIGxlbmd0aCAtIEVUSF9ITEVOKTsKKwkJCQkJc2tiID0gbmV3X3NrYjsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBQYWRkaW5nIGRhdGEgaXMgZGVsZXRlZAorCQkJCQkgKiBieSBtb3ZpbmcgaGVhZGVyIGRhdGEuKi8KKwkJCQkJbWVtbW92ZSgmc2tiLT5kYXRhW1BDSF9HQkVfRE1BX1BBRERJTkddLAorCQkJCQkJJnNrYi0+ZGF0YVswXSwgRVRIX0hMRU4pOworCQkJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisJCQkJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCQkJCX0KIAkJCX0KLQkJCWlmIChza2JfcGFkZGluZ19mbGFnKSB7Ci0JCQkJbWVtY3B5KCZ0bXBfcGFja2V0WzBdLCAmc2tiLT5kYXRhWzBdLCBFVEhfSExFTik7Ci0JCQkJbWVtY3B5KCZza2ItPmRhdGFbTkVUX0lQX0FMSUdOXSwgJnRtcF9wYWNrZXRbMF0sCi0JCQkJCUVUSF9ITEVOKTsKLQkJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0KLQkJCX0KLQorCQkJLyogVGhlIGxlbmd0aCBpbmNsdWRlcyBGQ1MgbGVuZ3RoICovCisJCQlsZW5ndGggPSBsZW5ndGggLSBFVEhfRkNTX0xFTjsKIAkJCS8qIHVwZGF0ZSBzdGF0dXMgb2YgZHJpdmVyICovCiAJCQlhZGFwdGVyLT5zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGg7CiAJCQlhZGFwdGVyLT5zdGF0cy5yeF9wYWNrZXRzKys7CkBAIC0yMjQ3LDcgKzIyNjIsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHBjaF9nYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKIAlwY2hfZ2JlX2hhbF9waHlfaHdfcmVzZXQoJmFkYXB0ZXItPmh3KTsKQEAgLTIzMjIsNiArMjMzNyw3IEBACiAJbmV0ZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9HUk87CiAJcGNoX2diZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTsKIAorCXBjaF9nYmVfbWFjX2xvYWRfbWFjX2FkZHIoJmFkYXB0ZXItPmh3KTsKIAlwY2hfZ2JlX21hY19yZXNldF9odygmYWRhcHRlci0+aHcpOwogCiAJLyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCmluZGV4IDFmNDJmNmEuLmQzY2I3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCkBAIC0xNDg4LDEyICsxNDg4LDEwIEBACiAgICAgCiAJLyogCiAJICogV2FpdCBhIGZ1bGwgVHggdGltZSAoMS4ybXMpICsgc29tZSBndWFyZCB0aW1lLCBOUyBzYXlzIDEuNm1zIHRvdGFsLgotCSAqIEVhcmx5IGRhdGFzaGVldHMgc2FpZCB0byBwb2xsIHRoZSByZXNldCBiaXQsIGJ1dCBub3cgdGhleSBzYXkgdGhhdAotCSAqIGl0ICJpcyBub3QgYSByZWxpYWJsZSBpbmRpY2F0b3IgYW5kIHN1YnNlcXVlbnRseSBzaG91bGQgYmUgaWdub3JlZC4iCi0JICogV2Ugd2FpdCBhdCBsZWFzdCAxMG1zLgorCSAqIFdlIHdhaXQgYXQgbGVhc3QgMm1zLgogCSAqLwogCi0JbWRlbGF5KDEwKTsKKwltZGVsYXkoMik7CiAKIAkvKgogCSAqIFJlc2V0IFJCQ1JbMDFdIGJhY2sgdG8gemVybyBhcyBwZXIgbWFnaWMgaW5jYW50YXRpb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwppbmRleCA5MjI2Y2RhLi41MzBhYjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKQEAgLTY5MSw2ICs2OTEsNyBAQAogCVBDTUNJQV9QRkNfREVWSUNFX01BTkZfQ0FSRCgwLCAweDAxMDUsIDB4MGUwYSksCiAJUENNQ0lBX1BGQ19ERVZJQ0VfTUFORl9DQVJEKDAsIDB4MDAzMiwgMHgwZTAxKSwKIAlQQ01DSUFfUEZDX0RFVklDRV9NQU5GX0NBUkQoMCwgMHgwMDMyLCAweDBhMDUpLAorCVBDTUNJQV9QRkNfREVWSUNFX01BTkZfQ0FSRCgwLCAweDAwMzIsIDB4MGIwNSksCiAJUENNQ0lBX1BGQ19ERVZJQ0VfTUFORl9DQVJEKDAsIDB4MDAzMiwgMHgxMTAxKSwKIAlQQ01DSUFfREVWSUNFX05VTEwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggYmRlN2Q2MS4uN2ZmZGI4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNjE3LDggKzYxOCw5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY4X29vYl9ub3RpZnkodm9pZCBfX2lvbWVtICppb2FkZHIsIHU4IGNtZCkKK3N0YXRpYyB2b2lkIHJ0bDgxNjhfb29iX25vdGlmeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTggY21kKQogeworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAlpbnQgaTsKIAogCVJUTF9XOChFUklEUiwgY21kKTsKQEAgLTYzMCw3ICs2MzIsNyBAQAogCQkJYnJlYWs7CiAJfQogCi0Jb2NwX3dyaXRlKGlvYWRkciwgMHgxLCAweDMwLCAweDAwMDAwMDAxKTsKKwlvY3Bfd3JpdGUodHAsIDB4MSwgMHgzMCwgMHgwMDAwMDAwMSk7CiB9CiAKICNkZWZpbmUgT09CX0NNRF9SRVNFVAkJMHgwMApAQCAtOTczLDcgKzk3NSw4IEBACiAJCWlmIChwbSkKIAkJCXBtX3JlcXVlc3RfcmVzdW1lKCZ0cC0+cGNpX2Rldi0+ZGV2KTsKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCQluZXRpZl9pbmZvKHRwLCBpZnVwLCBkZXYsICJsaW5rIHVwXG4iKTsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCW5ldGlmX2luZm8odHAsIGlmdXAsIGRldiwgImxpbmsgdXBcbiIpOwogCX0gZWxzZSB7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJCW5ldGlmX2luZm8odHAsIGlmZG93biwgZGV2LCAibGluayBkb3duXG4iKTsKQEAgLTI4NjcsOCArMjg3MCwxMSBAQAogewogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAotCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNykKKwlpZiAoKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNykgfHwKKwkgICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkpICYmCisJICAgIChvY3BfcmVhZCh0cCwgMHgwZiwgMHgwMDEwKSAmIDB4MDAwMDgwMDApKSB7CiAJCXJldHVybjsKKwl9CiAKIAlpZiAoKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yMykgfHwKIAkgICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNCkpICYmCkBAIC0yODkwLDYgKzI4OTYsOCBAQAogCXN3aXRjaCAodHAtPm1hY192ZXJzaW9uKSB7CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI1OgogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgogCQlSVExfVzgoUE1DSCwgUlRMX1I4KFBNQ0gpICYgfjB4ODApOwogCQlicmVhazsKIAl9CkBAIC0yODk5LDEyICsyOTA3LDE3IEBACiB7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCi0JaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI3KQorCWlmICgoKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI3KSB8fAorCSAgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI4KSkgJiYKKwkgICAgKG9jcF9yZWFkKHRwLCAweDBmLCAweDAwMTApICYgMHgwMDAwODAwMCkpIHsKIAkJcmV0dXJuOworCX0KIAogCXN3aXRjaCAodHAtPm1hY192ZXJzaW9uKSB7CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI1OgogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgogCQlSVExfVzgoUE1DSCwgUlRMX1I4KFBNQ0gpIHwgMHg4MCk7CiAJCWJyZWFrOwogCX0KQEAgLTMwMDgsNiArMzAyMSwxMSBAQAogCW1paS0+cmVnX251bV9tYXNrID0gMHgxZjsKIAltaWktPnN1cHBvcnRzX2dtaWkgPSAhIShjZmctPmZlYXR1cmVzICYgUlRMX0ZFQVRVUkVfR01JSSk7CiAKKwkvKiBkaXNhYmxlIEFTUE0gY29tcGxldGVseSBhcyB0aGF0IGNhdXNlIHJhbmRvbSBkZXZpY2Ugc3RvcCB3b3JraW5nCisJICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMgKi8KKwlwY2lfZGlzYWJsZV9saW5rX3N0YXRlKHBkZXYsIFBDSUVfTElOS19TVEFURV9MMFMgfCBQQ0lFX0xJTktfU1RBVEVfTDEgfAorCQkJCSAgICAgUENJRV9MSU5LX1NUQVRFX0NMS1BNKTsKKwogCS8qIGVuYWJsZSBkZXZpY2UgKGluY2wuIFBDSSBQTSB3YWtldXAgYW5kIGhvdHBsdWcgc2V0dXApICovCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMgPCAwKSB7CkBAIC0zMDQxLDcgKzMwNTksNyBAQAogCQlnb3RvIGVycl9vdXRfbXdpXzI7CiAJfQogCi0JdHAtPmNwX2NtZCA9IFBDSU11bFJXIHwgUnhDaGtTdW07CisJdHAtPmNwX2NtZCA9IFJ4Q2hrU3VtOwogCiAJaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJgogCSAgICAhcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSAmJiB1c2VfZGFjKSB7CkBAIC0zMTg5LDYgKzMyMDcsOCBAQAogCWlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKQogCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJnBkZXYtPmRldik7CiAKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCiBvdXQ6CiAJcmV0dXJuIHJjOwogCkBAIC0zMzE1LDcgKzMzMzUsOCBAQAogCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCXJ0bDgxNjlfaXJxX21hc2tfYW5kX2Fjayhpb2FkZHIpOwogCi0JaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI4KSB7CisJaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI3IHx8CisJICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI4KSB7CiAJCXdoaWxlIChSVExfUjgoVHhQb2xsKSAmIE5QUSkKIAkJCXVkZWxheSgyMCk7CiAKQEAgLTM3NTcsNyArMzc3OCw4IEBACiAJUlRMX1cxNihJbnRyTWl0aWdhdGUsIDB4NTE1MSk7CiAKIAkvKiBXb3JrIGFyb3VuZCBmb3IgUnhGSUZPIG92ZXJmbG93LiAqLwotCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xMSkgeworCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xMSB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yMikgewogCQl0cC0+aW50cl9ldmVudCB8PSBSeEZJRk9PdmVyIHwgUENTVGltZW91dDsKIAkJdHAtPmludHJfZXZlbnQgJj0gflJ4T3ZlcmZsb3c7CiAJfQpAQCAtMzg0Myw4ICszODY1LDcgQEAKIAlDeHBsX2RiZ19zZWwgfCBcCiAJQVNGIHwgXAogCVBrdENudHJEaXNhYmxlIHwgXAotCVBDSURBQyB8IFwKLQlQQ0lNdWxSVykKKwlNYWNfZGJnb19zZWwpCiAKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTAyZV8xKHZvaWQgX19pb21lbSAqaW9hZGRyLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTM4NzQsOCArMzg5NSw2IEBACiAJaWYgKChjZmcxICYgTEVEUzApICYmIChjZmcxICYgTEVEUzEpKQogCQlSVExfVzgoQ29uZmlnMSwgY2ZnMSAmIH5MRURTMCk7CiAKLQlSVExfVzE2KENQbHVzQ21kLCBSVExfUjE2KENQbHVzQ21kKSAmIH5SODEwWF9DUENNRF9RVUlSS19NQVNLKTsKLQogCXJ0bF9lcGh5X2luaXQoaW9hZGRyLCBlX2luZm9fODEwMmVfMSwgQVJSQVlfU0laRShlX2luZm9fODEwMmVfMSkpOwogfQogCkBAIC0zODg3LDggKzM5MDYsNiBAQAogCiAJUlRMX1c4KENvbmZpZzEsIE1FTU1BUCB8IElPTUFQIHwgVlBEIHwgUE1FbmFibGUpOwogCVJUTF9XOChDb25maWczLCBSVExfUjgoQ29uZmlnMykgJiB+QmVhY29uX2VuKTsKLQotCVJUTF9XMTYoQ1BsdXNDbWQsIFJUTF9SMTYoQ1BsdXNDbWQpICYgflI4MTBYX0NQQ01EX1FVSVJLX01BU0spOwogfQogCiBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEwMmVfMyh2b2lkIF9faW9tZW0gKmlvYWRkciwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0zOTE0LDYgKzM5MzEsOCBAQAogCQl9CiAJfQogCisJUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwogCXN3aXRjaCAodHAtPm1hY192ZXJzaW9uKSB7CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzA3OgogCQlydGxfaHdfc3RhcnRfODEwMmVfMShpb2FkZHIsIHBkZXYpOwpAQCAtMzkyOCwxNCArMzk0NywxMyBAQAogCQlicmVhazsKIAl9CiAKLQlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOworCVJUTF9XOChDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOwogCiAJUlRMX1c4KE1heFR4UGFja2V0U2l6ZSwgVHhQYWNrZXRNYXgpOwogCiAJcnRsX3NldF9yeF9tYXhfc2l6ZShpb2FkZHIsIHJ4X2J1Zl9zeik7CiAKLQl0cC0+Y3BfY21kIHw9IHJ0bF9yd19jcGx1c2NtZChpb2FkZHIpIHwgUENJTXVsUlc7Ci0KKwl0cC0+Y3BfY21kICY9IH5SODEwWF9DUENNRF9RVUlSS19NQVNLOwogCVJUTF9XMTYoQ1BsdXNDbWQsIHRwLT5jcF9jbWQpOwogCiAJUlRMX1cxNihJbnRyTWl0aWdhdGUsIDB4MDAwMCk7CkBAIC0zOTQ1LDE0ICszOTYzLDEwIEBACiAJUlRMX1c4KENoaXBDbWQsIENtZFR4RW5iIHwgQ21kUnhFbmIpOwogCXJ0bF9zZXRfcnhfdHhfY29uZmlnX3JlZ2lzdGVycyh0cCk7CiAKLQlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKLQogCVJUTF9SOChJbnRyTWFzayk7CiAKIAlydGxfc2V0X3J4X21vZGUoZGV2KTsKIAotCVJUTF9XOChDaGlwQ21kLCBDbWRUeEVuYiB8IENtZFJ4RW5iKTsKLQogCVJUTF9XMTYoTXVsdGlJbnRyLCBSVExfUjE2KE11bHRpSW50cikgJiAweGYwMDApOwogCiAJUlRMX1cxNihJbnRyTWFzaywgdHAtPmludHJfZXZlbnQpOwpAQCAtNDYzOSwxMiArNDY1MywzMyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQkvKiBXb3JrIGFyb3VuZCBmb3IgcnggZmlmbyBvdmVyZmxvdyAqLwotCQlpZiAodW5saWtlbHkoc3RhdHVzICYgUnhGSUZPT3ZlcikgJiYKLQkJKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzExKSkgewotCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQkJcnRsODE2OV90eF90aW1lb3V0KGRldik7Ci0JCQlicmVhazsKKwkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIFJ4RklGT092ZXIpKSB7CisJCQlzd2l0Y2ggKHRwLT5tYWNfdmVyc2lvbikgeworCQkJLyogV29yayBhcm91bmQgZm9yIHJ4IGZpZm8gb3ZlcmZsb3cgKi8KKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xMToKKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMjoKKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNjoKKwkJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCQkJcnRsODE2OV90eF90aW1lb3V0KGRldik7CisJCQkJZ290byBkb25lOworCQkJLyogVGVzdGVycyBuZWVkZWQuICovCisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTc6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTk6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjA6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjE6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjM6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjQ6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjg6CisJCQkvKiBFeHBlcmltZW50YWwgc2NpZW5jZS4gUGt0Z2VuIHByb29mLiAqLworCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzEyOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI1OgorCQkJCWlmIChzdGF0dXMgPT0gUnhGSUZPT3ZlcikKKwkJCQkJZ290byBkb25lOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCiAJCWlmICh1bmxpa2VseShzdGF0dXMgJiBTWVNFcnIpKSB7CkBAIC00NjgwLDcgKzQ3MTUsNyBAQAogCQkJKHN0YXR1cyAmIFJ4RklGT092ZXIpID8gKHN0YXR1cyB8IFJ4T3ZlcmZsb3cpIDogc3RhdHVzKTsKIAkJc3RhdHVzID0gUlRMX1IxNihJbnRyU3RhdHVzKTsKIAl9Ci0KK2RvbmU6CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCmluZGV4IDBlOGJiMTkuLmNhODg2ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwpAQCAtNTY5LDkgKzU2OSwxNCBAQAogCQkJCSAgc3RydWN0IGV0aHRvb2xfdGVzdCAqdGVzdCwgdTY0ICpkYXRhKQogewogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKLQlzdHJ1Y3QgZWZ4X3NlbGZfdGVzdHMgZWZ4X3Rlc3RzOworCXN0cnVjdCBlZnhfc2VsZl90ZXN0cyAqZWZ4X3Rlc3RzOwogCWludCBhbHJlYWR5X3VwOwotCWludCByYzsKKwlpbnQgcmMgPSAtRU5PTUVNOworCisJZWZ4X3Rlc3RzID0ga3phbGxvYyhzaXplb2YoKmVmeF90ZXN0cyksIEdGUF9LRVJORUwpOworCWlmICghZWZ4X3Rlc3RzKQorCQlnb3RvIGZhaWw7CisKIAogCUFTU0VSVF9SVE5MKCk7CiAJaWYgKGVmeC0+c3RhdGUgIT0gU1RBVEVfUlVOTklORykgewpAQCAtNTg5LDEzICs1OTQsMTEgQEAKIAkJaWYgKHJjKSB7CiAJCQluZXRpZl9lcnIoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKIAkJCQkgICJmYWlsZWQgb3BlbmluZyBkZXZpY2UuXG4iKTsKLQkJCWdvdG8gZmFpbDI7CisJCQlnb3RvIGZhaWwxOwogCQl9CiAJfQogCi0JbWVtc2V0KCZlZnhfdGVzdHMsIDAsIHNpemVvZihlZnhfdGVzdHMpKTsKLQotCXJjID0gZWZ4X3NlbGZ0ZXN0KGVmeCwgJmVmeF90ZXN0cywgdGVzdC0+ZmxhZ3MpOworCXJjID0gZWZ4X3NlbGZ0ZXN0KGVmeCwgZWZ4X3Rlc3RzLCB0ZXN0LT5mbGFncyk7CiAKIAlpZiAoIWFscmVhZHlfdXApCiAJCWRldl9jbG9zZShlZngtPm5ldF9kZXYpOwpAQCAtNjA0LDEwICs2MDcsMTEgQEAKIAkJICAgcmMgPT0gMCA/ICJwYXNzZWQiIDogImZhaWxlZCIsCiAJCSAgICh0ZXN0LT5mbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpID8gIm9mZiIgOiAib24iKTsKIAotIGZhaWwyOgotIGZhaWwxOgorZmFpbDE6CiAJLyogRmlsbCBldGh0b29sIHJlc3VsdHMgc3RydWN0dXJlcyAqLwotCWVmeF9ldGh0b29sX2ZpbGxfc2VsZl90ZXN0cyhlZngsICZlZnhfdGVzdHMsIE5VTEwsIGRhdGEpOworCWVmeF9ldGh0b29sX2ZpbGxfc2VsZl90ZXN0cyhlZngsIGVmeF90ZXN0cywgTlVMTCwgZGF0YSk7CisJa2ZyZWUoZWZ4X3Rlc3RzKTsKK2ZhaWw6CiAJaWYgKHJjKQogCQl0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXM5MDAuYyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCmluZGV4IDU5NzZkMWQuLjY0MGUzNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczkwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCkBAIC0xNzc3LDYgKzE3NzcsNyBAQAogCQkJCQkgICAgICAiY3VyX3J4OiU0LjRkLCBkaXJ0eV9yeDolNC40ZFxuIiwKIAkJCQkJICAgICAgbmV0X2Rldi0+bmFtZSwgc2lzX3ByaXYtPmN1cl9yeCwKIAkJCQkJICAgICAgc2lzX3ByaXYtPmRpcnR5X3J4KTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQkJYnJlYWs7CiAJCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCA0MmRhZjk4Li4zNWIyOGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC0zODU2LDkgKzM4NTYsNiBAQAogCW1lbWNweV9mcm9taW8oZGV2LT5kZXZfYWRkciwgaHctPnJlZ3MgKyBCMl9NQUNfMSArIHBvcnQqOCwgRVRIX0FMRU4pOwogCW1lbWNweShkZXYtPnBlcm1fYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CiAKLQkvKiBkZXZpY2UgaXMgb2ZmIHVudGlsIGxpbmsgZGV0ZWN0aW9uICovCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQogCXJldHVybiBkZXY7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggMzRhMGFmMy4uMGU1ZjAzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKQEAgLTE1NjAsOCArMTU2MCwxMCBAQAogCiAJcHJpdi0+aHcgPSBkZXZpY2U7CiAKLQlpZiAoZGV2aWNlX2Nhbl93YWtldXAocHJpdi0+ZGV2aWNlKSkKKwlpZiAoZGV2aWNlX2Nhbl93YWtldXAocHJpdi0+ZGV2aWNlKSkgewogCQlwcml2LT53b2xvcHRzID0gV0FLRV9NQUdJQzsgLyogTWFnaWMgRnJhbWUgYXMgZGVmYXVsdCAqLworCQllbmFibGVfaXJxX3dha2UoZGV2LT5pcnEpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCA3ODQxYThmLi4wNmMwZTUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTYwLDEyICs2MCw2IEBACiAjZGVmaW5lIEJBUl8wCTAKICNkZWZpbmUgQkFSXzIJMgogCi0jaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCi0jZGVmaW5lIFRHM19WTEFOX1RBR19VU0VEIDEKLSNlbHNlCi0jZGVmaW5lIFRHM19WTEFOX1RBR19VU0VEIDAKLSNlbmRpZgotCiAjaW5jbHVkZSAidGczLmgiCiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgpAQCAtMTM0LDkgKzEyOCw2IEBACiAJCQkJIFRHM19UWF9SSU5HX1NJWkUpCiAjZGVmaW5lIE5FWFRfVFgoTikJCSgoKE4pICsgMSkgJiAoVEczX1RYX1JJTkdfU0laRSAtIDEpKQogCi0jZGVmaW5lIFRHM19SWF9ETUFfQUxJR04JCTE2Ci0jZGVmaW5lIFRHM19SWF9IRUFEUk9PTQkJCUFMSUdOKFZMQU5fSExFTiwgVEczX1JYX0RNQV9BTElHTikKLQogI2RlZmluZSBURzNfRE1BX0JZVEVfRU5BQgkJNjQKIAogI2RlZmluZSBURzNfUlhfU1REX0RNQV9TWgkJMTUzNgpAQCAtNDcyMiw4ICs0NzEzLDYgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAkJdTMyIG9wYXF1ZV9rZXksIGRlc2NfaWR4LCAqcG9zdF9wdHI7Ci0JCWJvb2wgaHdfdmxhbiBfX21heWJlX3VudXNlZCA9IGZhbHNlOwotCQl1MTYgdnRhZyBfX21heWJlX3VudXNlZCA9IDA7CiAKIAkJZGVzY19pZHggPSBkZXNjLT5vcGFxdWUgJiBSWERfT1BBUVVFX0lOREVYX01BU0s7CiAJCW9wYXF1ZV9rZXkgPSBkZXNjLT5vcGFxdWUgJiBSWERfT1BBUVVFX1JJTkdfTUFTSzsKQEAgLTQ3ODIsMTIgKzQ3NzEsMTIgQEAKIAkJCXRnM19yZWN5Y2xlX3J4KHRuYXBpLCB0cHIsIG9wYXF1ZV9rZXksCiAJCQkJICAgICAgIGRlc2NfaWR4LCAqcG9zdF9wdHIpOwogCi0JCQljb3B5X3NrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwgbGVuICsgVkxBTl9ITEVOICsKKwkJCWNvcHlfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYih0cC0+ZGV2LCBsZW4gKwogCQkJCQkJICAgIFRHM19SQVdfSVBfQUxJR04pOwogCQkJaWYgKGNvcHlfc2tiID09IE5VTEwpCiAJCQkJZ290byBkcm9wX2l0X25vX3JlY3ljbGU7CiAKLQkJCXNrYl9yZXNlcnZlKGNvcHlfc2tiLCBURzNfUkFXX0lQX0FMSUdOICsgVkxBTl9ITEVOKTsKKwkJCXNrYl9yZXNlcnZlKGNvcHlfc2tiLCBURzNfUkFXX0lQX0FMSUdOKTsKIAkJCXNrYl9wdXQoY29weV9za2IsIGxlbik7CiAJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodHAtPnBkZXYsIGRtYV9hZGRyLCBsZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgY29weV9za2ItPmRhdGEsIGxlbik7CkBAIC00ODE0LDMwICs0ODAzLDExIEBACiAJCX0KIAogCQlpZiAoZGVzYy0+dHlwZV9mbGFncyAmIFJYRF9GTEFHX1ZMQU4gJiYKLQkJICAgICEodHAtPnJ4X21vZGUgJiBSWF9NT0RFX0tFRVBfVkxBTl9UQUcpKSB7Ci0JCQl2dGFnID0gZGVzYy0+ZXJyX3ZsYW4gJiBSWERfVkxBTl9NQVNLOwotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JCQlpZiAodHAtPnZsZ3JwKQotCQkJCWh3X3ZsYW4gPSB0cnVlOwotCQkJZWxzZQotI2VuZGlmCi0JCQl7Ci0JCQkJc3RydWN0IHZsYW5fZXRoaGRyICp2ZSA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKikKLQkJCQkJCSAgICBfX3NrYl9wdXNoKHNrYiwgVkxBTl9ITEVOKTsKKwkJICAgICEodHAtPnJ4X21vZGUgJiBSWF9NT0RFX0tFRVBfVkxBTl9UQUcpKQorCQkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsCisJCQkJCSAgICAgICBkZXNjLT5lcnJfdmxhbiAmIFJYRF9WTEFOX01BU0spOwogCi0JCQkJbWVtbW92ZSh2ZSwgc2tiLT5kYXRhICsgVkxBTl9ITEVOLAotCQkJCQlFVEhfQUxFTiAqIDIpOwotCQkJCXZlLT5oX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7Ci0JCQkJdmUtPmhfdmxhbl9UQ0kgPSBodG9ucyh2dGFnKTsKLQkJCX0KLQkJfQotCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLQkJaWYgKGh3X3ZsYW4pCi0JCQl2bGFuX2dyb19yZWNlaXZlKCZ0bmFwaS0+bmFwaSwgdHAtPnZsZ3JwLCB2dGFnLCBza2IpOwotCQllbHNlCi0jZW5kaWYKLQkJCW5hcGlfZ3JvX3JlY2VpdmUoJnRuYXBpLT5uYXBpLCBza2IpOworCQluYXBpX2dyb19yZWNlaXZlKCZ0bmFwaS0+bmFwaSwgc2tiKTsKIAogCQlyZWNlaXZlZCsrOwogCQlidWRnZXQtLTsKQEAgLTU3NDAsMTEgKzU3MTAsOSBAQAogCQliYXNlX2ZsYWdzIHw9IFRYRF9GTEFHX1RDUFVEUF9DU1VNOwogCX0KIAotI2lmIFRHM19WTEFOX1RBR19VU0VECiAJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKIAkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfVkxBTiB8CiAJCQkgICAgICAgKHZsYW5fdHhfdGFnX2dldChza2IpIDw8IDE2KSk7Ci0jZW5kaWYKIAogCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAKQEAgLTU5ODYsMTEgKzU5NTQsMTAgQEAKIAkJCX0KIAkJfQogCX0KLSNpZiBURzNfVkxBTl9UQUdfVVNFRAorCiAJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKIAkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfVkxBTiB8CiAJCQkgICAgICAgKHZsYW5fdHhfdGFnX2dldChza2IpIDw8IDE2KSk7Ci0jZW5kaWYKIAogCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfSlVNQk9fQkRGTEFHKSAmJgogCSAgICAhbXNzICYmIHNrYi0+bGVuID4gVkxBTl9FVEhfRlJBTUVfTEVOKQpAQCAtOTUzMiwxNyArOTQ5OSwxMCBAQAogCXJ4X21vZGUgPSB0cC0+cnhfbW9kZSAmIH4oUlhfTU9ERV9QUk9NSVNDIHwKIAkJCQkgIFJYX01PREVfS0VFUF9WTEFOX1RBRyk7CiAKKyNpZiAhZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgJiYgIWRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQogCS8qIFdoZW4gQVNGIGlzIGluIHVzZSwgd2UgYWx3YXlzIGtlZXAgdGhlIFJYX01PREVfS0VFUF9WTEFOX1RBRwogCSAqIGZsYWcgY2xlYXIuCiAJICovCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLQlpZiAoIXRwLT52bGdycCAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkKLQkJcnhfbW9kZSB8PSBSWF9NT0RFX0tFRVBfVkxBTl9UQUc7Ci0jZWxzZQotCS8qIEJ5IGRlZmluaXRpb24sIFZMQU4gaXMgZGlzYWJsZWQgYWx3YXlzIGluIHRoaXMKLQkgKiBjYXNlLgotCSAqLwogCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkKIAkJcnhfbW9kZSB8PSBSWF9NT0RFX0tFRVBfVkxBTl9UQUc7CiAjZW5kaWYKQEAgLTExMTk4LDcgKzExMTU4LDkgQEAKIAkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpCiAJCQlicmVhazsJCQkvKiBXZSBoYXZlIG5vIFBIWSAqLwogCi0JCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpCisJCWlmICgodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKSB8fAorCQkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgJiYKKwkJICAgICAhbmV0aWZfcnVubmluZyhkZXYpKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOwpAQCAtMTEyMTQsNyArMTExNzYsOSBAQAogCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykKIAkJCWJyZWFrOwkJCS8qIFdlIGhhdmUgbm8gUEhZICovCiAKLQkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikKKwkJaWYgKCh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpIHx8CisJCSAgICAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSAmJgorCQkgICAgICFuZXRpZl9ydW5uaW5nKGRldikpKQogCQkJcmV0dXJuIC1FQUdBSU47CiAKIAkJc3Bpbl9sb2NrX2JoKCZ0cC0+bG9jayk7CkBAIC0xMTIzMCwzMSArMTExOTQsNiBAQAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAotI2lmIFRHM19WTEFOX1RBR19VU0VECi1zdGF0aWMgdm9pZCB0ZzNfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQotewotCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCXRwLT52bGdycCA9IGdycDsKLQkJcmV0dXJuOwotCX0KLQotCXRnM19uZXRpZl9zdG9wKHRwKTsKLQotCXRnM19mdWxsX2xvY2sodHAsIDApOwotCi0JdHAtPnZsZ3JwID0gZ3JwOwotCi0JLyogVXBkYXRlIFJYX01PREVfS0VFUF9WTEFOX1RBRyBiaXQgaW4gUlhfTU9ERSByZWdpc3Rlci4gKi8KLQlfX3RnM19zZXRfcnhfbW9kZShkZXYpOwotCi0JdGczX25ldGlmX3N0YXJ0KHRwKTsKLQotCXRnM19mdWxsX3VubG9jayh0cCk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGludCB0ZzNfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYykKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMzA2Niw5ICsxMzAwNSw3IEBACiAKIHN0YXRpYyB2b2lkIGlubGluZSB2bGFuX2ZlYXR1cmVzX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotI2lmIFRHM19WTEFOX1RBR19VU0VECiAJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IGZsYWdzOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIHRnM19yeF9yZXRfcmluZ19zaXplKHN0cnVjdCB0ZzMgKnRwKQpAQCAtMTM4NjEsMTEgKzEzNzk4LDExIEBACiAJZWxzZQogCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19QT0xMX1NFUkRFUzsKIAotCXRwLT5yeF9vZmZzZXQgPSBORVRfSVBfQUxJR04gKyBURzNfUlhfSEVBRFJPT007CisJdHAtPnJ4X29mZnNldCA9IE5FVF9JUF9BTElHTjsKIAl0cC0+cnhfY29weV90aHJlc2ggPSBURzNfUlhfQ09QWV9USFJFU0hPTEQ7CiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAxICYmCiAJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSAhPSAwKSB7Ci0JCXRwLT5yeF9vZmZzZXQgLT0gTkVUX0lQX0FMSUdOOworCQl0cC0+cnhfb2Zmc2V0ID0gMDsKICNpZm5kZWYgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKIAkJdHAtPnJ4X2NvcHlfdGhyZXNoID0gfih1MTYpMDsKICNlbmRpZgpAQCAtMTQ2MjksOSArMTQ1NjYsNiBAQAogCS5uZG9fZG9faW9jdGwJCT0gdGczX2lvY3RsLAogCS5uZG9fdHhfdGltZW91dAkJPSB0ZzNfdHhfdGltZW91dCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gdGczX2NoYW5nZV9tdHUsCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLQkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSB0ZzNfdmxhbl9yeF9yZWdpc3RlciwKLSNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB0ZzNfcG9sbF9jb250cm9sbGVyLAogI2VuZGlmCkBAIC0xNDY0OCw5ICsxNDU4Miw2IEBACiAJLm5kb19kb19pb2N0bAkJPSB0ZzNfaW9jdGwsCiAJLm5kb190eF90aW1lb3V0CQk9IHRnM190eF90aW1lb3V0LAogCS5uZG9fY2hhbmdlX210dQkJPSB0ZzNfY2hhbmdlX210dSwKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAotCS5uZG9fdmxhbl9yeF9yZWdpc3Rlcgk9IHRnM192bGFuX3J4X3JlZ2lzdGVyLAotI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlcgk9IHRnM19wb2xsX2NvbnRyb2xsZXIsCiAjZW5kaWYKQEAgLTE0NzAwLDkgKzE0NjMxLDcgQEAKIAogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwotI2VuZGlmCiAKIAl0cCA9IG5ldGRldl9wcml2KGRldik7CiAJdHAtPnBkZXYgPSBwZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmggYi9kcml2ZXJzL25ldC90ZzMuaAppbmRleCBkNjJjOGQ5Li5mNTI4MjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuaAorKysgYi9kcml2ZXJzL25ldC90ZzMuaApAQCAtMjgwOCw5ICsyODA4LDYgQEAKIAl1MzIJCQkJcnhfc3RkX21heF9wb3N0OwogCXUzMgkJCQlyeF9vZmZzZXQ7CiAJdTMyCQkJCXJ4X3BrdF9tYXBfc3o7Ci0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLQlzdHJ1Y3Qgdmxhbl9ncm91cAkJKnZsZ3JwOwotI2VuZGlmCiAKIAogCS8qIGJlZ2luICJldmVyeXRoaW5nIGVsc2UiIGNhY2hlbGluZShzKSBzZWN0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYwppbmRleCAwNGU4Y2UxLi43MTEzMTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogY2RjX25jbS5jCiAgKgotICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiAyMDEwCisgKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIDIwMTAtMjAxMQogICogQ29udGFjdDogQWxleGV5IE9yaXNoa28gPGFsZXhleS5vcmlzaGtvQHN0ZXJpY3Nzb24uY29tPgogICogT3JpZ2luYWwgYXV0aG9yOiBIYW5zIFBldHRlciBTZWxhc2t5IDxoYW5zLnBldHRlci5zZWxhc2t5QHN0ZXJpY3Nzb24uY29tPgogICoKQEAgLTU0LDcgKzU0LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IvdXNibmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2NkYy5oPgogCi0jZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkJCSIxNy1KYW4tMjAxMSIKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCQkJIjctRmViLTIwMTEiCiAKIC8qIENEQyBOQ00gc3ViY2xhc3MgMy4yLjEgKi8KICNkZWZpbmUgVVNCX0NEQ19OQ01fTkRQMTZfTEVOR1RIX01JTgkJMHgxMApAQCAtNzcsNiArNzcsOSBAQAogICovCiAjZGVmaW5lCUNEQ19OQ01fRFBUX0RBVEFHUkFNU19NQVgJCTMyCiAKKy8qIE1heGltdW0gYW1vdW50IG9mIElOIGRhdGFncmFtcyBpbiBOVEIgKi8KKyNkZWZpbmUJQ0RDX05DTV9EUFRfREFUQUdSQU1TX0lOX01BWAkJMCAvKiB1bmxpbWl0ZWQgKi8KKwogLyogUmVzdGFydCB0aGUgdGltZXIsIGlmIGFtb3VudCBvZiBkYXRhZ3JhbXMgaXMgbGVzcyB0aGFuIGdpdmVuIHZhbHVlICovCiAjZGVmaW5lCUNEQ19OQ01fUkVTVEFSVF9USU1FUl9EQVRBR1JBTV9DTlQJMwogCkBAIC04NSwxMSArODgsNiBAQAogCShzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX250aDE2KSArIHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbmRwMTYpICsgXAogCShDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYICsgMSkgKiBzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX2RwZTE2KSkKIAotc3RydWN0IGNvbm5lY3Rpb25fc3BlZWRfY2hhbmdlIHsKLQlfX2xlMzIJVVNCaXRSYXRlOyAvKiBob2xkcyAzR1BQIGRvd25saW5rIHZhbHVlLCBiaXRzIHBlciBzZWNvbmQgKi8KLQlfX2xlMzIJRFNCaXRSYXRlOyAvKiBob2xkcyAzR1BQIHVwbGluayB2YWx1ZSwgYml0cyBwZXIgc2Vjb25kICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogc3RydWN0IGNkY19uY21fZGF0YSB7CiAJc3RydWN0IHVzYl9jZGNfbmNtX250aDE2IG50aDE2OwogCXN0cnVjdCB1c2JfY2RjX25jbV9uZHAxNiBuZHAxNjsKQEAgLTE5OCwxMCArMTk2LDEwIEBACiB7CiAJc3RydWN0IHVzYl9jZGNfbm90aWZpY2F0aW9uIHJlcTsKIAl1MzIgdmFsOwotCV9fbGUxNiBtYXhfZGF0YWdyYW1fc2l6ZTsKIAl1OCBmbGFnczsKIAl1OCBpZmFjZV9ubzsKIAlpbnQgZXJyOworCXUxNiBudGJfZm10X3N1cHBvcnRlZDsKIAogCWlmYWNlX25vID0gY3R4LT5jb250cm9sLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwogCkBAIC0yMjMsNiArMjIxLDkgQEAKIAljdHgtPnR4X3JlbWFpbmRlciA9IGxlMTZfdG9fY3B1KGN0eC0+bmNtX3Bhcm0ud05kcE91dFBheWxvYWRSZW1haW5kZXIpOwogCWN0eC0+dHhfbW9kdWx1cyA9IGxlMTZfdG9fY3B1KGN0eC0+bmNtX3Bhcm0ud05kcE91dERpdmlzb3IpOwogCWN0eC0+dHhfbmRwX21vZHVsdXMgPSBsZTE2X3RvX2NwdShjdHgtPm5jbV9wYXJtLndOZHBPdXRBbGlnbm1lbnQpOworCS8qIGRldmljZXMgcHJpb3IgdG8gTkNNIEVycmF0YSBzaGFsbCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvICovCisJY3R4LT50eF9tYXhfZGF0YWdyYW1zID0gbGUxNl90b19jcHUoY3R4LT5uY21fcGFybS53TnRiT3V0TWF4RGF0YWdyYW1zKTsKKwludGJfZm10X3N1cHBvcnRlZCA9IGxlMTZfdG9fY3B1KGN0eC0+bmNtX3Bhcm0uYm1OdGJGb3JtYXRzU3VwcG9ydGVkKTsKIAogCWlmIChjdHgtPmZ1bmNfZGVzYyAhPSBOVUxMKQogCQlmbGFncyA9IGN0eC0+ZnVuY19kZXNjLT5ibU5ldHdvcmtDYXBhYmlsaXRpZXM7CkBAIC0yMzEsMjIgKzIzMiw1OCBAQAogCiAJcHJfZGVidWcoImR3TnRiSW5NYXhTaXplPSV1IGR3TnRiT3V0TWF4U2l6ZT0ldSAiCiAJCSAid05kcE91dFBheWxvYWRSZW1haW5kZXI9JXUgd05kcE91dERpdmlzb3I9JXUgIgotCQkgIndOZHBPdXRBbGlnbm1lbnQ9JXUgZmxhZ3M9MHgleFxuIiwKKwkJICJ3TmRwT3V0QWxpZ25tZW50PSV1IHdOdGJPdXRNYXhEYXRhZ3JhbXM9JXUgZmxhZ3M9MHgleFxuIiwKIAkJIGN0eC0+cnhfbWF4LCBjdHgtPnR4X21heCwgY3R4LT50eF9yZW1haW5kZXIsIGN0eC0+dHhfbW9kdWx1cywKLQkJIGN0eC0+dHhfbmRwX21vZHVsdXMsIGZsYWdzKTsKKwkJIGN0eC0+dHhfbmRwX21vZHVsdXMsIGN0eC0+dHhfbWF4X2RhdGFncmFtcywgZmxhZ3MpOwogCi0JLyogbWF4IGNvdW50IG9mIHR4IGRhdGFncmFtcyB3aXRob3V0IHRlcm1pbmF0aW5nIE5VTEwgZW50cnkgKi8KLQljdHgtPnR4X21heF9kYXRhZ3JhbXMgPSBDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYOworCS8qIG1heCBjb3VudCBvZiB0eCBkYXRhZ3JhbXMgKi8KKwlpZiAoKGN0eC0+dHhfbWF4X2RhdGFncmFtcyA9PSAwKSB8fAorCQkJKGN0eC0+dHhfbWF4X2RhdGFncmFtcyA+IENEQ19OQ01fRFBUX0RBVEFHUkFNU19NQVgpKQorCQljdHgtPnR4X21heF9kYXRhZ3JhbXMgPSBDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYOwogCiAJLyogdmVyaWZ5IG1heGltdW0gc2l6ZSBvZiByZWNlaXZlZCBOVEIgaW4gYnl0ZXMgKi8KLQlpZiAoKGN0eC0+cnhfbWF4IDwKLQkgICAgKENEQ19OQ01fTUlOX0hEUl9TSVpFICsgQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSkpIHx8Ci0JICAgIChjdHgtPnJ4X21heCA+IENEQ19OQ01fTlRCX01BWF9TSVpFX1JYKSkgeworCWlmIChjdHgtPnJ4X21heCA8IFVTQl9DRENfTkNNX05UQl9NSU5fSU5fU0laRSkgeworCQlwcl9kZWJ1ZygiVXNpbmcgbWluIHJlY2VpdmUgbGVuZ3RoPSVkXG4iLAorCQkJCQkJVVNCX0NEQ19OQ01fTlRCX01JTl9JTl9TSVpFKTsKKwkJY3R4LT5yeF9tYXggPSBVU0JfQ0RDX05DTV9OVEJfTUlOX0lOX1NJWkU7CisJfQorCisJaWYgKGN0eC0+cnhfbWF4ID4gQ0RDX05DTV9OVEJfTUFYX1NJWkVfUlgpIHsKIAkJcHJfZGVidWcoIlVzaW5nIGRlZmF1bHQgbWF4aW11bSByZWNlaXZlIGxlbmd0aD0lZFxuIiwKIAkJCQkJCUNEQ19OQ01fTlRCX01BWF9TSVpFX1JYKTsKIAkJY3R4LT5yeF9tYXggPSBDRENfTkNNX05UQl9NQVhfU0laRV9SWDsKIAl9CiAKKwkvKiBpbmZvcm0gZGV2aWNlIGFib3V0IE5UQiBpbnB1dCBzaXplIGNoYW5nZXMgKi8KKwlpZiAoY3R4LT5yeF9tYXggIT0gbGUzMl90b19jcHUoY3R4LT5uY21fcGFybS5kd050YkluTWF4U2l6ZSkpIHsKKwkJcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwKKwkJCQkJCQlVU0JfUkVDSVBfSU5URVJGQUNFOworCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9OVEJfSU5QVVRfU0laRTsKKwkJcmVxLndWYWx1ZSA9IDA7CisJCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7CisKKwkJaWYgKGZsYWdzICYgVVNCX0NEQ19OQ01fTkNBUF9OVEJfSU5QVVRfU0laRSkgeworCQkJc3RydWN0IHVzYl9jZGNfbmNtX25kcF9pbnB1dF9zaXplIG5kcF9pbl9zejsKKworCQkJcmVxLndMZW5ndGggPSA4OworCQkJbmRwX2luX3N6LmR3TnRiSW5NYXhTaXplID0gY3B1X3RvX2xlMzIoY3R4LT5yeF9tYXgpOworCQkJbmRwX2luX3N6LndOdGJJbk1heERhdGFncmFtcyA9CisJCQkJCWNwdV90b19sZTE2KENEQ19OQ01fRFBUX0RBVEFHUkFNU19NQVgpOworCQkJbmRwX2luX3N6LndSZXNlcnZlZCA9IDA7CisJCQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCAmbmRwX2luX3N6LCAwLCBOVUxMLAorCQkJCQkJCQkJMTAwMCk7CisJCX0gZWxzZSB7CisJCQlfX2xlMzIgZHdOdGJJbk1heFNpemUgPSBjcHVfdG9fbGUzMihjdHgtPnJ4X21heCk7CisKKwkJCXJlcS53TGVuZ3RoID0gNDsKKwkJCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsICZkd050YkluTWF4U2l6ZSwgMCwKKwkJCQkJCQkJTlVMTCwgMTAwMCk7CisJCX0KKworCQlpZiAoZXJyKQorCQkJcHJfZGVidWcoIlNldHRpbmcgTlRCIElucHV0IFNpemUgZmFpbGVkXG4iKTsKKwl9CisKIAkvKiB2ZXJpZnkgbWF4aW11bSBzaXplIG9mIHRyYW5zbWl0dGVkIE5UQiBpbiBieXRlcyAqLwogCWlmICgoY3R4LT50eF9tYXggPAogCSAgICAoQ0RDX05DTV9NSU5fSERSX1NJWkUgKyBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFKSkgfHwKQEAgLTI5Nyw0NyArMzM0LDg0IEBACiAJLyogYWRkaXRpb25hbCBjb25maWd1cmF0aW9uICovCiAKIAkvKiBzZXQgQ1JDIE1vZGUgKi8KLQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfSU5URVJGQUNFOwotCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfU0VUX0NSQ19NT0RFOwotCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNihVU0JfQ0RDX05DTV9DUkNfTk9UX0FQUEVOREVEKTsKLQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOwotCXJlcS53TGVuZ3RoID0gMDsKKwlpZiAoZmxhZ3MgJiBVU0JfQ0RDX05DTV9OQ0FQX0NSQ19NT0RFKSB7CisJCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8CisJCQkJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwkJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19TRVRfQ1JDX01PREU7CisJCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNihVU0JfQ0RDX05DTV9DUkNfTk9UX0FQUEVOREVEKTsKKwkJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKKwkJcmVxLndMZW5ndGggPSAwOwogCi0JZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgTlVMTCwgMCwgTlVMTCwgMTAwMCk7Ci0JaWYgKGVycikKLQkJcHJfZGVidWcoIlNldHRpbmcgQ1JDIG1vZGUgb2ZmIGZhaWxlZFxuIik7CisJCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsIE5VTEwsIDAsIE5VTEwsIDEwMDApOworCQlpZiAoZXJyKQorCQkJcHJfZGVidWcoIlNldHRpbmcgQ1JDIG1vZGUgb2ZmIGZhaWxlZFxuIik7CisJfQogCi0JLyogc2V0IE5UQiBmb3JtYXQgKi8KLQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfSU5URVJGQUNFOwotCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfU0VUX05UQl9GT1JNQVQ7Ci0JcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2KFVTQl9DRENfTkNNX05UQjE2X0ZPUk1BVCk7Ci0JcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKLQlyZXEud0xlbmd0aCA9IDA7CisJLyogc2V0IE5UQiBmb3JtYXQsIGlmIGJvdGggZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovCisJaWYgKG50Yl9mbXRfc3VwcG9ydGVkICYgVVNCX0NEQ19OQ01fTlRIMzJfU0lHTikgeworCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAorCQkJCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfU0VUX05UQl9GT1JNQVQ7CisJCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNihVU0JfQ0RDX05DTV9OVEIxNl9GT1JNQVQpOworCQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOworCQlyZXEud0xlbmd0aCA9IDA7CiAKLQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCBOVUxMLCAwLCBOVUxMLCAxMDAwKTsKLQlpZiAoZXJyKQotCQlwcl9kZWJ1ZygiU2V0dGluZyBOVEIgZm9ybWF0IHRvIDE2LWJpdCBmYWlsZWRcbiIpOworCQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCBOVUxMLCAwLCBOVUxMLCAxMDAwKTsKKwkJaWYgKGVycikKKwkJCXByX2RlYnVnKCJTZXR0aW5nIE5UQiBmb3JtYXQgdG8gMTYtYml0IGZhaWxlZFxuIik7CisJfQorCisJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9IENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkU7CiAKIAkvKiBzZXQgTWF4IERhdGFncmFtIFNpemUgKE1UVSkgKi8KLQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U7Ci0JcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19HRVRfTUFYX0RBVEFHUkFNX1NJWkU7Ci0JcmVxLndWYWx1ZSA9IDA7Ci0JcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKLQlyZXEud0xlbmd0aCA9IGNwdV90b19sZTE2KDIpOworCWlmIChmbGFncyAmIFVTQl9DRENfTkNNX05DQVBfTUFYX0RBVEFHUkFNX1NJWkUpIHsKKwkJX19sZTE2IG1heF9kYXRhZ3JhbV9zaXplOworCQl1MTYgZXRoX21heF9zeiA9IGxlMTZfdG9fY3B1KGN0eC0+ZXRoZXJfZGVzYy0+d01heFNlZ21lbnRTaXplKTsKIAotCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsICZtYXhfZGF0YWdyYW1fc2l6ZSwgMCwgTlVMTCwgMTAwMCk7Ci0JaWYgKGVycikgewotCQlwcl9kZWJ1ZygiIEdFVF9NQVhfREFUQUdSQU1fU0laRSBmYWlsZWQsIHVzaW5nIHNpemU9JXVcbiIsCi0JCQkgQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSk7Ci0JCS8qIHVzZSBkZWZhdWx0ICovCi0JCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFOwotCX0gZWxzZSB7Ci0JCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBsZTE2X3RvX2NwdShtYXhfZGF0YWdyYW1fc2l6ZSk7CisJCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOIHwKKwkJCQkJCQlVU0JfUkVDSVBfSU5URVJGQUNFOworCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX0dFVF9NQVhfREFUQUdSQU1fU0laRTsKKwkJcmVxLndWYWx1ZSA9IDA7CisJCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7CisJCXJlcS53TGVuZ3RoID0gY3B1X3RvX2xlMTYoMik7CiAKLQkJaWYgKGN0eC0+bWF4X2RhdGFncmFtX3NpemUgPCBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFKQotCQkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9IENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkU7Ci0JCWVsc2UgaWYgKGN0eC0+bWF4X2RhdGFncmFtX3NpemUgPiBDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFKQotCQkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9IENEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkU7CisJCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsICZtYXhfZGF0YWdyYW1fc2l6ZSwgMCwgTlVMTCwKKwkJCQkJCQkJCTEwMDApOworCQlpZiAoZXJyKSB7CisJCQlwcl9kZWJ1ZygiR0VUX01BWF9EQVRBR1JBTV9TSVpFIGZhaWxlZCwgdXNlIHNpemU9JXVcbiIsCisJCQkJCQlDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFKTsKKwkJfSBlbHNlIHsKKwkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBsZTE2X3RvX2NwdShtYXhfZGF0YWdyYW1fc2l6ZSk7CisJCQkvKiBDaGVjayBFdGggZGVzY3JpcHRvciB2YWx1ZSAqLworCQkJaWYgKGV0aF9tYXhfc3ogPCBDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFKSB7CisJCQkJaWYgKGN0eC0+bWF4X2RhdGFncmFtX3NpemUgPiBldGhfbWF4X3N6KQorCQkJCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gZXRoX21heF9zejsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGN0eC0+bWF4X2RhdGFncmFtX3NpemUgPgorCQkJCQkJQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSkKKwkJCQkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9CisJCQkJCQlDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFOworCQkJfQorCisJCQlpZiAoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA8IENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpCisJCQkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9CisJCQkJCUNEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkU7CisKKwkJCS8qIGlmIHZhbHVlIGNoYW5nZWQsIHVwZGF0ZSBkZXZpY2UgKi8KKwkJCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8CisJCQkJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwkJCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfU0VUX01BWF9EQVRBR1JBTV9TSVpFOworCQkJcmVxLndWYWx1ZSA9IDA7CisJCQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOworCQkJcmVxLndMZW5ndGggPSAyOworCQkJbWF4X2RhdGFncmFtX3NpemUgPSBjcHVfdG9fbGUxNihjdHgtPm1heF9kYXRhZ3JhbV9zaXplKTsKKworCQkJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgJm1heF9kYXRhZ3JhbV9zaXplLAorCQkJCQkJCQkwLCBOVUxMLCAxMDAwKTsKKwkJCWlmIChlcnIpCisJCQkJcHJfZGVidWcoIlNFVF9NQVhfREFUQUdSQU1fU0laRSBmYWlsZWRcbiIpOworCQl9CisKIAl9CiAKIAlpZiAoY3R4LT5uZXRkZXYtPm10dSAhPSAoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSAtIEVUSF9ITEVOKSkKQEAgLTQ2NiwxOSArNTQwLDEzIEBACiAKIAkJCWN0eC0+ZXRoZXJfZGVzYyA9CiAJCQkJCShjb25zdCBzdHJ1Y3QgdXNiX2NkY19ldGhlcl9kZXNjICopYnVmOwotCiAJCQlkZXYtPmhhcmRfbXR1ID0KIAkJCQlsZTE2X3RvX2NwdShjdHgtPmV0aGVyX2Rlc2MtPndNYXhTZWdtZW50U2l6ZSk7CiAKLQkJCWlmIChkZXYtPmhhcmRfbXR1IDwKLQkJCSAgICAoQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSAtIEVUSF9ITEVOKSkKLQkJCQlkZXYtPmhhcmRfbXR1ID0KLQkJCQkJQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSAtIEVUSF9ITEVOOwotCi0JCQllbHNlIGlmIChkZXYtPmhhcmRfbXR1ID4KLQkJCQkgKENEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkUgLSBFVEhfSExFTikpCi0JCQkJZGV2LT5oYXJkX210dSA9Ci0JCQkJCUNEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkUgLSBFVEhfSExFTjsKKwkJCWlmIChkZXYtPmhhcmRfbXR1IDwgQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSkKKwkJCQlkZXYtPmhhcmRfbXR1ID0JQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRTsKKwkJCWVsc2UgaWYgKGRldi0+aGFyZF9tdHUgPiBDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFKQorCQkJCWRldi0+aGFyZF9tdHUgPQlDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBVU0JfQ0RDX05DTV9UWVBFOgpAQCAtNjI4LDEzICs2OTYsMTMgQEAKIAl1MzIgb2Zmc2V0OwogCXUzMiBsYXN0X29mZnNldDsKIAl1MTYgbiA9IDA7Ci0JdTggdGltZW91dCA9IDA7CisJdTggcmVhZHkyc2VuZCA9IDA7CiAKIAkvKiBpZiB0aGVyZSBpcyBhIHJlbWFpbmluZyBza2IsIGl0IGdldHMgcHJpb3JpdHkgKi8KIAlpZiAoc2tiICE9IE5VTEwpCiAJCXN3YXAoc2tiLCBjdHgtPnR4X3JlbV9za2IpOwogCWVsc2UKLQkJdGltZW91dCA9IDE7CisJCXJlYWR5MnNlbmQgPSAxOwogCiAJLyoKIAkgKiArLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTY4Miw5ICs3NTAsMTAgQEAKIAogCWZvciAoOyBuIDwgY3R4LT50eF9tYXhfZGF0YWdyYW1zOyBuKyspIHsKIAkJLyogY2hlY2sgaWYgZW5kIG9mIHRyYW5zbWl0IGJ1ZmZlciBpcyByZWFjaGVkICovCi0JCWlmIChvZmZzZXQgPj0gY3R4LT50eF9tYXgpCisJCWlmIChvZmZzZXQgPj0gY3R4LT50eF9tYXgpIHsKKwkJCXJlYWR5MnNlbmQgPSAxOwogCQkJYnJlYWs7Ci0KKwkJfQogCQkvKiBjb21wdXRlIG1heGltdW0gYnVmZmVyIHNpemUgKi8KIAkJcmVtID0gY3R4LT50eF9tYXggLSBvZmZzZXQ7CiAKQEAgLTcxMSw5ICs3ODAsNyBAQAogCQkJCX0KIAkJCQljdHgtPnR4X3JlbV9za2IgPSBza2I7CiAJCQkJc2tiID0gTlVMTDsKLQotCQkJCS8qIGxvb3Agb25lIG1vcmUgdGltZSAqLwotCQkJCXRpbWVvdXQgPSAxOworCQkJCXJlYWR5MnNlbmQgPSAxOwogCQkJfQogCQkJYnJlYWs7CiAJCX0KQEAgLTc1Niw3ICs4MjMsNyBAQAogCQljdHgtPnR4X2N1cnJfbGFzdF9vZmZzZXQgPSBsYXN0X29mZnNldDsKIAkJZ290byBleGl0X25vX3NrYjsKIAotCX0gZWxzZSBpZiAoKG4gPCBjdHgtPnR4X21heF9kYXRhZ3JhbXMpICYmICh0aW1lb3V0ID09IDApKSB7CisJfSBlbHNlIGlmICgobiA8IGN0eC0+dHhfbWF4X2RhdGFncmFtcykgJiYgKHJlYWR5MnNlbmQgPT0gMCkpIHsKIAkJLyogd2FpdCBmb3IgbW9yZSBmcmFtZXMgKi8KIAkJLyogcHVzaCB2YXJpYWJsZXMgKi8KIAkJY3R4LT50eF9jdXJyX3NrYiA9IHNrYl9vdXQ7CkBAIC04MTMsNyArODgwLDcgQEAKIAkJCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKGN0eC0+dHhfbmNtLm50aDE2KSk7CiAJY3R4LT50eF9uY20ubnRoMTYud1NlcXVlbmNlID0gY3B1X3RvX2xlMTYoY3R4LT50eF9zZXEpOwogCWN0eC0+dHhfbmNtLm50aDE2LndCbG9ja0xlbmd0aCA9IGNwdV90b19sZTE2KGxhc3Rfb2Zmc2V0KTsKLQljdHgtPnR4X25jbS5udGgxNi53RnBJbmRleCA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMTYpLAorCWN0eC0+dHhfbmNtLm50aDE2LndOZHBJbmRleCA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMTYpLAogCQkJCQkJCWN0eC0+dHhfbmRwX21vZHVsdXMpOwogCiAJbWVtY3B5KHNrYl9vdXQtPmRhdGEsICYoY3R4LT50eF9uY20ubnRoMTYpLCBzaXplb2YoY3R4LT50eF9uY20ubnRoMTYpKTsKQEAgLTgyNSwxMyArODkyLDEzIEBACiAJcmVtID0gc2l6ZW9mKGN0eC0+dHhfbmNtLm5kcDE2KSArICgoY3R4LT50eF9jdXJyX2ZyYW1lX251bSArIDEpICoKIAkJCQkJc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9kcGUxNikpOwogCWN0eC0+dHhfbmNtLm5kcDE2LndMZW5ndGggPSBjcHVfdG9fbGUxNihyZW0pOwotCWN0eC0+dHhfbmNtLm5kcDE2LndOZXh0RnBJbmRleCA9IDA7IC8qIHJlc2VydmVkICovCisJY3R4LT50eF9uY20ubmRwMTYud05leHROZHBJbmRleCA9IDA7IC8qIHJlc2VydmVkICovCiAKLQltZW1jcHkoKCh1OCAqKXNrYl9vdXQtPmRhdGEpICsgY3R4LT50eF9uY20ubnRoMTYud0ZwSW5kZXgsCisJbWVtY3B5KCgodTggKilza2Jfb3V0LT5kYXRhKSArIGN0eC0+dHhfbmNtLm50aDE2LndOZHBJbmRleCwKIAkJCQkJCSYoY3R4LT50eF9uY20ubmRwMTYpLAogCQkJCQkJc2l6ZW9mKGN0eC0+dHhfbmNtLm5kcDE2KSk7CiAKLQltZW1jcHkoKCh1OCAqKXNrYl9vdXQtPmRhdGEpICsgY3R4LT50eF9uY20ubnRoMTYud0ZwSW5kZXggKworCW1lbWNweSgoKHU4ICopc2tiX291dC0+ZGF0YSkgKyBjdHgtPnR4X25jbS5udGgxNi53TmRwSW5kZXggKwogCQkJCQlzaXplb2YoY3R4LT50eF9uY20ubmRwMTYpLAogCQkJCQkmKGN0eC0+dHhfbmNtLmRwZTE2KSwKIAkJCQkJKGN0eC0+dHhfY3Vycl9mcmFtZV9udW0gKyAxKSAqCkBAIC05NjEsNyArMTAyOCw3IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JdGVtcCA9IGxlMTZfdG9fY3B1KGN0eC0+cnhfbmNtLm50aDE2LndGcEluZGV4KTsKKwl0ZW1wID0gbGUxNl90b19jcHUoY3R4LT5yeF9uY20ubnRoMTYud05kcEluZGV4KTsKIAlpZiAoKHRlbXAgKyBzaXplb2YoY3R4LT5yeF9uY20ubmRwMTYpKSA+IGFjdGxlbikgewogCQlwcl9kZWJ1ZygiaW52YWxpZCBEUFQxNiBpbmRleFxuIik7CiAJCWdvdG8gZXJyb3I7CkBAIC0xMDQ4LDEwICsxMTE1LDEwIEBACiAKIHN0YXRpYyB2b2lkCiBjZGNfbmNtX3NwZWVkX2NoYW5nZShzdHJ1Y3QgY2RjX25jbV9jdHggKmN0eCwKLQkJICAgICBzdHJ1Y3QgY29ubmVjdGlvbl9zcGVlZF9jaGFuZ2UgKmRhdGEpCisJCSAgICAgc3RydWN0IHVzYl9jZGNfc3BlZWRfY2hhbmdlICpkYXRhKQogewotCXVpbnQzMl90IHJ4X3NwZWVkID0gbGUzMl90b19jcHUoZGF0YS0+VVNCaXRSYXRlKTsKLQl1aW50MzJfdCB0eF9zcGVlZCA9IGxlMzJfdG9fY3B1KGRhdGEtPkRTQml0UmF0ZSk7CisJdWludDMyX3Qgcnhfc3BlZWQgPSBsZTMyX3RvX2NwdShkYXRhLT5ETEJpdFJSYXRlKTsKKwl1aW50MzJfdCB0eF9zcGVlZCA9IGxlMzJfdG9fY3B1KGRhdGEtPlVMQml0UmF0ZSk7CiAKIAkvKgogCSAqIEN1cnJlbnRseSB0aGUgVVNCLU5FVCBBUEkgZG9lcyBub3Qgc3VwcG9ydCByZXBvcnRpbmcgdGhlIGFjdHVhbApAQCAtMTA5Miw3ICsxMTU5LDcgQEAKIAkvKiB0ZXN0IGZvciBzcGxpdCBkYXRhIGluIDgtYnl0ZSBjaHVua3MgKi8KIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEVWRU5UX1NUU19TUExJVCwgJmRldi0+ZmxhZ3MpKSB7CiAJCWNkY19uY21fc3BlZWRfY2hhbmdlKGN0eCwKLQkJICAgICAgKHN0cnVjdCBjb25uZWN0aW9uX3NwZWVkX2NoYW5nZSAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJICAgICAgKHN0cnVjdCB1c2JfY2RjX3NwZWVkX2NoYW5nZSAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTEyMCwxMiArMTE4NywxMiBAQAogCQlicmVhazsKIAogCWNhc2UgVVNCX0NEQ19OT1RJRllfU1BFRURfQ0hBTkdFOgotCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwKLQkJICAgIChzaXplb2YoKmV2ZW50KSArIHNpemVvZihzdHJ1Y3QgY29ubmVjdGlvbl9zcGVlZF9jaGFuZ2UpKSkKKwkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IChzaXplb2YoKmV2ZW50KSArCisJCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2NkY19zcGVlZF9jaGFuZ2UpKSkKIAkJCXNldF9iaXQoRVZFTlRfU1RTX1NQTElULCAmZGV2LT5mbGFncyk7CiAJCWVsc2UKIAkJCWNkY19uY21fc3BlZWRfY2hhbmdlKGN0eCwKLQkJCQkoc3RydWN0IGNvbm5lY3Rpb25fc3BlZWRfY2hhbmdlICopICZldmVudFsxXSk7CisJCQkJKHN0cnVjdCB1c2JfY2RjX3NwZWVkX2NoYW5nZSAqKSAmZXZlbnRbMV0pOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKaW5kZXggMDJiNjIyZS4uNTAwMmY1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYwpAQCAtNjUxLDYgKzY1MSwxMCBAQAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSZkbTk2MDFfaW5mbywKIAkgfSwKIAl7CisJIFVTQl9ERVZJQ0UoMHgwZmU2LCAweDk3MDApLAkvKiBETTk2MDEgVVNCIHRvIEZhc3QgRXRoZXJuZXQgQWRhcHRlciAqLworCSAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmZG05NjAxX2luZm8sCisJIH0sCisJewogCSBVU0JfREVWSUNFKDB4MGE0NiwgMHg5MDAwKSwJLyogRE05MDAwRSAqLwogCSAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmZG05NjAxX2luZm8sCiAJIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggYmVkOGZjZS4uNmQ4MzgxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtMjYyOCwxNSArMjYyOCwxNSBAQAogCiBzdGF0aWMgdm9pZCBoc29fZnJlZV90aW9tZ2V0KHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpCiB7Ci0Jc3RydWN0IGhzb190aW9jbWdldCAqdGlvY21nZXQgPSBzZXJpYWwtPnRpb2NtZ2V0OworCXN0cnVjdCBoc29fdGlvY21nZXQgKnRpb2NtZ2V0OworCWlmICghc2VyaWFsKQorCQlyZXR1cm47CisJdGlvY21nZXQgPSBzZXJpYWwtPnRpb2NtZ2V0OwogCWlmICh0aW9jbWdldCkgewotCQlpZiAodGlvY21nZXQtPnVyYikgewotCQkJdXNiX2ZyZWVfdXJiKHRpb2NtZ2V0LT51cmIpOwotCQkJdGlvY21nZXQtPnVyYiA9IE5VTEw7Ci0JCX0KKwkJdXNiX2ZyZWVfdXJiKHRpb2NtZ2V0LT51cmIpOworCQl0aW9jbWdldC0+dXJiID0gTlVMTDsKIAkJc2VyaWFsLT50aW9jbWdldCA9IE5VTEw7CiAJCWtmcmVlKHRpb2NtZ2V0KTsKLQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCmluZGV4IDVlOTg2NDMuLjdkYzg0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYworKysgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKQEAgLTQwNiw2ICs0MDYsNyBAQAogCiAJaWYgKGZ3LT5zaXplID4gS0FXRVRIX0ZJUk1XQVJFX0JVRl9TSVpFKSB7CiAJCWVycigiRmlybXdhcmUgdG9vIGJpZzogJXp1IiwgZnctPnNpemUpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCWRhdGFfbGVuID0gZnctPnNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggZWQ5YTQxNi4uOTVjNDFkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtOTMxLDggKzkzMSwxMCBAQAogCQlpZiAodXJiICE9IE5VTEwpIHsKIAkJCWNsZWFyX2JpdCAoRVZFTlRfUlhfTUVNT1JZLCAmZGV2LT5mbGFncyk7CiAJCQlzdGF0dXMgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGV2LT5pbnRmKTsKLQkJCWlmIChzdGF0dXMgPCAwKQorCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQl1c2JfZnJlZV91cmIodXJiKTsKIAkJCQlnb3RvIGZhaWxfbG93bWVtOworCQkJfQogCQkJaWYgKHJ4X3N1Ym1pdCAoZGV2LCB1cmIsIEdGUF9LRVJORUwpID09IC1FTk9MSU5LKQogCQkJCXJlc2NoZWQgPSAwOwogCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKaW5kZXggOTBhMjNlNC4uODJkYmE1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwpAQCAtNDQ2LDYgKzQ0NiwyMCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgdmlydG5ldF9uYXBpX2VuYWJsZShzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSkKK3sKKwluYXBpX2VuYWJsZSgmdmktPm5hcGkpOworCisJLyogSWYgYWxsIGJ1ZmZlcnMgd2VyZSBmaWxsZWQgYnkgb3RoZXIgc2lkZSBiZWZvcmUgd2UgbmFwaV9lbmFibGVkLCB3ZQorCSAqIHdvbid0IGdldCBhbm90aGVyIGludGVycnVwdCwgc28gcHJvY2VzcyBhbnkgb3V0c3RhbmRpbmcgcGFja2V0cworCSAqIG5vdy4gIHZpcnRuZXRfcG9sbCB3YW50cyByZS1lbmFibGUgdGhlIHF1ZXVlLCBzbyB3ZSBkaXNhYmxlIGhlcmUuCisJICogV2Ugc3luY2hyb25pemUgYWdhaW5zdCBpbnRlcnJ1cHRzIHZpYSBOQVBJX1NUQVRFX1NDSEVEICovCisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CisJCXZpcnRxdWV1ZV9kaXNhYmxlX2NiKHZpLT5ydnEpOworCQlfX25hcGlfc2NoZWR1bGUoJnZpLT5uYXBpKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHJlZmlsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aTsKQEAgLTQ1NCw3ICs0NjgsNyBAQAogCXZpID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aXJ0bmV0X2luZm8sIHJlZmlsbC53b3JrKTsKIAluYXBpX2Rpc2FibGUoJnZpLT5uYXBpKTsKIAlzdGlsbF9lbXB0eSA9ICF0cnlfZmlsbF9yZWN2KHZpLCBHRlBfS0VSTkVMKTsKLQluYXBpX2VuYWJsZSgmdmktPm5hcGkpOworCXZpcnRuZXRfbmFwaV9lbmFibGUodmkpOwogCiAJLyogSW4gdGhlb3J5LCB0aGlzIGNhbiBoYXBwZW46IGlmIHdlIGRvbid0IGdldCBhbnkgYnVmZmVycyBpbgogCSAqIHdlIHdpbGwgKm5ldmVyKiB0cnkgdG8gZmlsbCBhZ2Fpbi4gKi8KQEAgLTYzOCwxNiArNjUyLDcgQEAKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CiAKLQluYXBpX2VuYWJsZSgmdmktPm5hcGkpOwotCi0JLyogSWYgYWxsIGJ1ZmZlcnMgd2VyZSBmaWxsZWQgYnkgb3RoZXIgc2lkZSBiZWZvcmUgd2UgbmFwaV9lbmFibGVkLCB3ZQotCSAqIHdvbid0IGdldCBhbm90aGVyIGludGVycnVwdCwgc28gcHJvY2VzcyBhbnkgb3V0c3RhbmRpbmcgcGFja2V0cwotCSAqIG5vdy4gIHZpcnRuZXRfcG9sbCB3YW50cyByZS1lbmFibGUgdGhlIHF1ZXVlLCBzbyB3ZSBkaXNhYmxlIGhlcmUuCi0JICogV2Ugc3luY2hyb25pemUgYWdhaW5zdCBpbnRlcnJ1cHRzIHZpYSBOQVBJX1NUQVRFX1NDSEVEICovCi0JaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7Ci0JCXZpcnRxdWV1ZV9kaXNhYmxlX2NiKHZpLT5ydnEpOwotCQlfX25hcGlfc2NoZWR1bGUoJnZpLT5uYXBpKTsKLQl9CisJdmlydG5ldF9uYXBpX2VuYWJsZSh2aSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwppbmRleCAwMWMwNWY1Li4yMjhkNGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCkBAIC0zNjkwLDcgKzM2OTAsNyBAQAogCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKIAkJZ290byBleGl0OwogCi0JaWYgKChydHNfdGFibGUgIT0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBKSB8fAorCWlmICgocnRzX3RhYmxlICE9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSkgJiYKIAkgICAgKHJ0c190YWJsZSAhPQogCSAgICAgVlhHRV9IV19SVFNfQUNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NVUxUSV9JVCkpCiAJCSpkYXRhMSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZG1hLmMKaW5kZXggMDA2NGJlNy4uMjEwOTFjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kbWEuYwpAQCAtODM4LDkgKzgzOCw5IEBACiAJZm9yIChpID0gMDsgaSA8IHFtYXg7IGkrKykgewogCQllcnIgPSBhdGg1a19od19zdG9wX3R4X2RtYShhaCwgaSk7CiAJCS8qIC1FSU5WQUwgLT4gcXVldWUgaW5hY3RpdmUgKi8KLQkJaWYgKGVyciAhPSAtRUlOVkFMKQorCQlpZiAoZXJyICYmIGVyciAhPSAtRUlOVkFMKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCmluZGV4IGU1ZjJiOTYuLmE3MDI4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKQEAgLTg2LDcgKzg2LDcgQEAKIAlpZiAoIWFoLT5haF9id21vZGUpIHsKIAkJZHVyID0gaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oc2MtPmh3LAogCQkJCQkJTlVMTCwgbGVuLCByYXRlKTsKLQkJcmV0dXJuIGR1cjsKKwkJcmV0dXJuIGxlMTZfdG9fY3B1KGR1cik7CiAJfQogCiAJYml0cmF0ZSA9IHJhdGUtPmJpdHJhdGU7CkBAIC0yNjUsOCArMjY1LDYgQEAKIAkJICogd2hhdCByYXRlIHdlIHNob3VsZCBjaG9vc2UgdG8gVFggQUNLcy4gKi8KIAkJdHhfdGltZSA9IGF0aDVrX2h3X2dldF9mcmFtZV9kdXJhdGlvbihhaCwgMTAsIHJhdGUpOwogCi0JCXR4X3RpbWUgPSBsZTE2X3RvX2NwdSh0eF90aW1lKTsKLQogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHR4X3RpbWUsIHJlZyk7CiAKIAkJaWYgKCEocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMKaW5kZXggNzhjMjZmZC4uNjJjZTJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9waHkuYwpAQCAtMjgyLDYgKzI4MiwzNCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogV2FpdCBmb3Igc3ludGggdG8gc2V0dGxlCisgKi8KK3N0YXRpYyB2b2lkIGF0aDVrX2h3X3dhaXRfZm9yX3N5bnRoKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJLyoKKwkgKiBPbiA1MjExKyByZWFkIGFjdGl2YXRpb24gLT4gcnggZGVsYXkKKwkgKiBhbmQgdXNlIGl0ICgxMDBucyBzdGVwcykuCisJICovCisJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CisJCXUzMiBkZWxheTsKKwkJZGVsYXkgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUlhfREVMQVkpICYKKwkJCUFSNUtfUEhZX1JYX0RFTEFZX007CisJCWRlbGF5ID0gKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9DQ0spID8KKwkJCSgoZGVsYXkgPDwgMikgLyAyMikgOiAoZGVsYXkgLyAxMCk7CisJCWlmIChhaC0+YWhfYndtb2RlID09IEFSNUtfQldNT0RFXzEwTUhaKQorCQkJZGVsYXkgPSBkZWxheSA8PCAxOworCQlpZiAoYWgtPmFoX2J3bW9kZSA9PSBBUjVLX0JXTU9ERV81TUhaKQorCQkJZGVsYXkgPSBkZWxheSA8PCAyOworCQkvKiBYWFg6IC8yIG9uIHR1cmJvID8gTGV0J3MgYmUgc2FmZQorCQkgKiBmb3Igbm93ICovCisJCXVkZWxheSgxMDAgKyBkZWxheSk7CisJfSBlbHNlIHsKKwkJbWRlbGF5KDEpOworCX0KK30KKwogCiAvKioqKioqKioqKioqKioqKioqKioqKlwKICogUkYgR2FpbiBvcHRpbWl6YXRpb24gKgpAQCAtMTI1Myw2ICsxMjgxLDcgQEAKIAljYXNlIEFSNUtfUkY1MTExOgogCQlyZXQgPSBhdGg1a19od19yZjUxMTFfY2hhbm5lbChhaCwgY2hhbm5lbCk7CiAJCWJyZWFrOworCWNhc2UgQVI1S19SRjIzMTc6CiAJY2FzZSBBUjVLX1JGMjQyNToKIAkJcmV0ID0gYXRoNWtfaHdfcmYyNDI1X2NoYW5uZWwoYWgsIGNoYW5uZWwpOwogCQlicmVhazsKQEAgLTMyMzcsNiArMzI2NiwxMyBAQAogCQkvKiBGYWlsZWQgKi8KIAkJaWYgKGkgPj0gMTAwKQogCQkJcmV0dXJuIC1FSU87CisKKwkJLyogU2V0IGNoYW5uZWwgYW5kIHdhaXQgZm9yIHN5bnRoICovCisJCXJldCA9IGF0aDVrX2h3X2NoYW5uZWwoYWgsIGNoYW5uZWwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlhdGg1a19od193YWl0X2Zvcl9zeW50aChhaCwgY2hhbm5lbCk7CiAJfQogCiAJLyoKQEAgLTMyNTEsMTMgKzMyODcsNTMgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJLyogV3JpdGUgT0ZETSB0aW1pbmdzIG9uIDUyMTIqLworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMiAmJgorCQljaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfT0ZETSkgeworCisJCXJldCA9IGF0aDVrX2h3X3dyaXRlX29mZG1fdGltaW5ncyhhaCwgY2hhbm5lbCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qIFNwdXIgaW5mbyBpcyBhdmFpbGFibGUgb25seSBmcm9tIEVFUFJPTSB2ZXJzaW9ucworCQkgKiBncmVhdGVyIHRoYW4gNS4zLCBidXQgdGhlIEVFUFJPTSByb3V0aW5lcyB3aWxsIHVzZQorCQkgKiBzdGF0aWMgdmFsdWVzIGZvciBvbGRlciB2ZXJzaW9ucyAqLworCQlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjU0MjQpCisJCQlhdGg1a19od19zZXRfc3B1cl9taXRpZ2F0aW9uX2ZpbHRlcihhaCwKKwkJCQkJCQkgICAgY2hhbm5lbCk7CisJfQorCisJLyogSWYgd2UgdXNlZCBmYXN0IGNoYW5uZWwgc3dpdGNoaW5nCisJICogd2UgYXJlIGRvbmUsIHJlbGVhc2UgUkYgYnVzIGFuZAorCSAqIGZpcmUgdXAgTkYgY2FsaWJyYXRpb24uCisJICoKKwkgKiBOb3RlOiBPbmx5IE5GIGNhbGlicmF0aW9uIGR1ZSB0bworCSAqIGNoYW5uZWwgY2hhbmdlLCBub3QgQUdDIGNhbGlicmF0aW9uCisJICogc2luY2UgQUdDIGlzIHN0aWxsIHJ1bm5pbmcgIQorCSAqLworCWlmIChmYXN0KSB7CisJCS8qCisJCSAqIFJlbGVhc2UgUkYgQnVzIGdyYW50CisJCSAqLworCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfUEhZX1JGQlVTX1JFUSwKKwkJCQkgICAgQVI1S19QSFlfUkZCVVNfUkVRX1JFUVVFU1QpOworCisJCS8qCisJCSAqIFN0YXJ0IE5GIGNhbGlicmF0aW9uCisJCSAqLworCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19QSFlfQUdDQ1RMLAorCQkJCQlBUjVLX1BIWV9BR0NDVExfTkYpOworCisJCXJldHVybiByZXQ7CisJfQorCiAJLyoKIAkgKiBGb3IgNTIxMCB3ZSBkbyBhbGwgaW5pdGlhbGl6YXRpb24gdXNpbmcKIAkgKiBpbml0dmFscywgc28gd2UgZG9uJ3QgaGF2ZSB0byBtb2RpZnkKIAkgKiBhbnkgc2V0dGluZ3MgKDUyMTAgYWxzbyBvbmx5IHN1cHBvcnRzCiAJICogYS9hdHVyYm8gbW9kZXMpCiAJICovCi0JaWYgKChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgJiYgIWZhc3QpIHsKKwlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKIAogCQkvKgogCQkgKiBXcml0ZSBpbml0aWFsIFJGIGdhaW4gc2V0dGluZ3MKQEAgLTMyNzYsMjIgKzMzNTIsNiBAQAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQkvKiBXcml0ZSBPRkRNIHRpbWluZ3Mgb24gNTIxMiovCi0JCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMiAmJgotCQkJY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKLQotCQkJcmV0ID0gYXRoNWtfaHdfd3JpdGVfb2ZkbV90aW1pbmdzKGFoLCBjaGFubmVsKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQotCQkJLyogU3B1ciBpbmZvIGlzIGF2YWlsYWJsZSBvbmx5IGZyb20gRUVQUk9NIHZlcnNpb25zCi0JCQkgKiBncmVhdGVyIHRoYW4gNS4zLCBidXQgdGhlIEVFUFJPTSByb3V0aW5lcyB3aWxsIHVzZQotCQkJICogc3RhdGljIHZhbHVlcyBmb3Igb2xkZXIgdmVyc2lvbnMgKi8KLQkJCWlmIChhaC0+YWhfbWFjX3NyZXYgPj0gQVI1S19TUkVWX0FSNTQyNCkKLQkJCQlhdGg1a19od19zZXRfc3B1cl9taXRpZ2F0aW9uX2ZpbHRlcihhaCwKLQkJCQkJCQkJICAgIGNoYW5uZWwpOwotCQl9Ci0KIAkJLypFbmFibGUvZGlzYWJsZSA4MDIuMTFiIG1vZGUgb24gNTExMQogCQkoZW5hYmxlIDIxMTEgZnJlcXVlbmN5IGNvbnZlcnRlciArIENDSykqLwogCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSB7CkBAIC0zMzIyLDQ3ICszMzgyLDIwIEBACiAJICovCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9BQ1RfRU5BQkxFLCBBUjVLX1BIWV9BQ1QpOwogCi0JLyoKLQkgKiBPbiA1MjExKyByZWFkIGFjdGl2YXRpb24gLT4gcnggZGVsYXkKLQkgKiBhbmQgdXNlIGl0LgotCSAqLwotCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewotCQl1MzIgZGVsYXk7Ci0JCWRlbGF5ID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1JYX0RFTEFZKSAmCi0JCQlBUjVLX1BIWV9SWF9ERUxBWV9NOwotCQlkZWxheSA9IChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKSA/Ci0JCQkoKGRlbGF5IDw8IDIpIC8gMjIpIDogKGRlbGF5IC8gMTApOwotCQlpZiAoYWgtPmFoX2J3bW9kZSA9PSBBUjVLX0JXTU9ERV8xME1IWikKLQkJCWRlbGF5ID0gZGVsYXkgPDwgMTsKLQkJaWYgKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfNU1IWikKLQkJCWRlbGF5ID0gZGVsYXkgPDwgMjsKLQkJLyogWFhYOiAvMiBvbiB0dXJibyA/IExldCdzIGJlIHNhZmUKLQkJICogZm9yIG5vdyAqLwotCQl1ZGVsYXkoMTAwICsgZGVsYXkpOwotCX0gZWxzZSB7Ci0JCW1kZWxheSgxKTsKLQl9CisJYXRoNWtfaHdfd2FpdF9mb3Jfc3ludGgoYWgsIGNoYW5uZWwpOwogCi0JaWYgKGZhc3QpCi0JCS8qCi0JCSAqIFJlbGVhc2UgUkYgQnVzIGdyYW50Ci0JCSAqLwotCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfUEhZX1JGQlVTX1JFUSwKLQkJCQkgICAgQVI1S19QSFlfUkZCVVNfUkVRX1JFUVVFU1QpOwotCWVsc2UgewotCQkvKgotCQkgKiBQZXJmb3JtIEFEQyB0ZXN0IHRvIHNlZSBpZiBiYXNlYmFuZCBpcyByZWFkeQotCQkgKiBTZXQgdHggaG9sZCBhbmQgY2hlY2sgYWRjIHRlc3QgcmVnaXN0ZXIKLQkJICovCi0JCXBoeV90c3QxID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1RTVDEpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1RTVDFfVFhIT0xELCBBUjVLX1BIWV9UU1QxKTsKLQkJZm9yIChpID0gMDsgaSA8PSAyMDsgaSsrKSB7Ci0JCQlpZiAoIShhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfQURDX1RFU1QpICYgMHgxMCkpCi0JCQkJYnJlYWs7Ci0JCQl1ZGVsYXkoMjAwKTsKLQkJfQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHBoeV90c3QxLCBBUjVLX1BIWV9UU1QxKTsKKwkvKgorCSAqIFBlcmZvcm0gQURDIHRlc3QgdG8gc2VlIGlmIGJhc2ViYW5kIGlzIHJlYWR5CisJICogU2V0IHR4IGhvbGQgYW5kIGNoZWNrIGFkYyB0ZXN0IHJlZ2lzdGVyCisJICovCisJcGh5X3RzdDEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfVFNUMSk7CisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9UU1QxX1RYSE9MRCwgQVI1S19QSFlfVFNUMSk7CisJZm9yIChpID0gMDsgaSA8PSAyMDsgaSsrKSB7CisJCWlmICghKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9BRENfVEVTVCkgJiAweDEwKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMjAwKTsKIAl9CisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBwaHlfdHN0MSwgQVI1S19QSFlfVFNUMSk7CiAKIAkvKgogCSAqIFN0YXJ0IGF1dG9tYXRpYyBnYWluIGNvbnRyb2wgY2FsaWJyYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaHcuYwppbmRleCBmOGE3NzcxLi5mNDRjODRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9ody5jCkBAIC00MjYsOSArNDI2LDggQEAKIAkJfQogCiAJCS8qIFdBUiBmb3IgQVNQTSBzeXN0ZW0gaGFuZyAqLwotCQlpZiAoQVJfU1JFVl85MjgwKGFoKSB8fCBBUl9TUkVWXzkyODUoYWgpIHx8IEFSX1NSRVZfOTI4NyhhaCkpIHsKKwkJaWYgKEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85Mjg3KGFoKSkKIAkJCXZhbCB8PSAoQVJfV0FfQklUNiB8IEFSX1dBX0JJVDcpOwotCQl9CiAKIAkJaWYgKEFSX1NSRVZfOTI4NUVfMjAoYWgpKQogCQkJdmFsIHw9IEFSX1dBX0JJVDIzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXRoOWsuaAppbmRleCAzNjgxY2FmNS4uMWE3ZmE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L3BtX3Fvc19wYXJhbXMuaD4KIAogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCkBAIC01Nyw4ICs1Niw2IEBACiAKICNkZWZpbmUgQV9NQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKIAotI2RlZmluZSBBVEg5S19QTV9RT1NfREVGQVVMVF9WQUxVRQk1NQotCiAjZGVmaW5lIFRTRl9UT19UVShfaCxfbCkgXAogCSgoKCh1MzIpKF9oKSkgPDwgMjIpIHwgKCgodTMyKShfbCkpID4+IDEwKSkKIApAQCAtMjE4LDYgKzIxNSw3IEBACiBzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSB7CiAJdTggYmZfdHlwZTsKIAl1OCBiZnNfcGFwcmQ7CisJdW5zaWduZWQgbG9uZyBiZnNfcGFwcmRfdGltZXN0YW1wOwogCWVudW0gYXRoOWtfaW50ZXJuYWxfZnJhbWVfdHlwZSBiZnNfZnR5cGU7CiB9OwogCkBAIC01OTMsNyArNTkxLDYgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcGFwcmRfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaHdfY2hlY2tfd29yazsKIAlzdHJ1Y3QgY29tcGxldGlvbiBwYXByZF9jb21wbGV0ZTsKLQlib29sIHBhcHJkX3BlbmRpbmc7CiAKIAl1MzIgaW50cnN0YXR1czsKIAl1MzIgc2NfZmxhZ3M7IC8qIFNDX09QXyogKi8KQEAgLTYzMyw4ICs2MzAsNiBAQAogCXN0cnVjdCBhdGhfZGVzY2RtYSB0eHNkbWE7CiAKIAlzdHJ1Y3QgYXRoX2FudF9jb21iIGFudF9jb21iOwotCi0Jc3RydWN0IHBtX3Fvc19yZXF1ZXN0X2xpc3QgcG1fcW9zX3JlcTsKIH07CiAKIHN0cnVjdCBhdGhfd2lwaHkgewpAQCAtNjY2LDcgKzY2MSw2IEBACiBleHRlcm4gc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoOWtfb3BzOwogZXh0ZXJuIGludCBhdGg5a19tb2RwYXJhbV9ub2h3Y3J5cHQ7CiBleHRlcm4gaW50IGxlZF9ibGluazsKLWV4dGVybiBpbnQgYXRoOWtfcG1fcW9zX3ZhbHVlOwogZXh0ZXJuIGJvb2wgaXNfYXRoOWtfdW5sb2FkZWQ7CiAKIGlycXJldHVybl90IGF0aF9pc3IoaW50IGlycSwgdm9pZCAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCmluZGV4IDVhYjMwODQuLjA3YjE2MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYwpAQCAtMjE5LDggKzIxOSw5IEBACiAJc3RydWN0IHR4X2J1ZiAqdHhfYnVmID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IE5VTEw7CiAJaW50IHJldCA9IDAsIGk7Ci0JdTE2ICpoZHIsIHR4X3NrYl9jbnQgPSAwOworCXUxNiB0eF9za2JfY250ID0gMDsKIAl1OCAqYnVmOworCV9fbGUxNiAqaGRyOwogCiAJaWYgKGhpZl9kZXYtPnR4LnR4X3NrYl9jbnQgPT0gMCkKIAkJcmV0dXJuIDA7CkBAIC0yNDUsOSArMjQ2LDkgQEAKIAogCQlidWYgPSB0eF9idWYtPmJ1ZjsKIAkJYnVmICs9IHR4X2J1Zi0+b2Zmc2V0OwotCQloZHIgPSAodTE2ICopYnVmOwotCQkqaGRyKysgPSBuc2tiLT5sZW47Ci0JCSpoZHIrKyA9IEFUSF9VU0JfVFhfU1RSRUFNX01PREVfVEFHOworCQloZHIgPSAoX19sZTE2ICopYnVmOworCQkqaGRyKysgPSBjcHVfdG9fbGUxNihuc2tiLT5sZW4pOworCQkqaGRyKysgPSBjcHVfdG9fbGUxNihBVEhfVVNCX1RYX1NUUkVBTV9NT0RFX1RBRyk7CiAJCWJ1ZiArPSA0OwogCQltZW1jcHkoYnVmLCBuc2tiLT5kYXRhLCBuc2tiLT5sZW4pOwogCQl0eF9idWYtPmxlbiA9IG5za2ItPmxlbiArIDQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMKaW5kZXggMzg0MzNmOS4uMDM1MmYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYwpAQCAtMTQyLDkgKzE0Miw2IEBACiB7CiAJYXRoOWtfaHRjX2V4aXRfZGVidWcocHJpdi0+YWgpOwogCWF0aDlrX2h3X2RlaW5pdChwcml2LT5haCk7Ci0JdGFza2xldF9raWxsKCZwcml2LT5zd2JhX3Rhc2tsZXQpOwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+cnhfdGFza2xldCk7Ci0JdGFza2xldF9raWxsKCZwcml2LT50eF90YXNrbGV0KTsKIAlrZnJlZShwcml2LT5haCk7CiAJcHJpdi0+YWggPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jCmluZGV4IGY0ZDU3NmIuLjZiYjU5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMKQEAgLTEwMjUsMTIgKzEwMjUsNiBAQAogCWludCByZXQgPSAwOwogCXU4IGNtZF9yc3A7CiAKLQkvKiBDYW5jZWwgYWxsIHRoZSBydW5uaW5nIHRpbWVycy93b3JrIC4uICovCi0JY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+ZmF0YWxfd29yayk7Ci0JY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+cHNfd29yayk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5hdGg5a19sZWRfYmxpbmtfd29yayk7Ci0JYXRoOWtfbGVkX3N0b3BfYnJpZ2h0bmVzcyhwcml2KTsKLQogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChwcml2LT5vcF9mbGFncyAmIE9QX0lOVkFMSUQpIHsKQEAgLTEwNDQsOCArMTAzOCwyMyBAQAogCVdNSV9DTUQoV01JX0RJU0FCTEVfSU5UUl9DTURJRCk7CiAJV01JX0NNRChXTUlfRFJBSU5fVFhRX0FMTF9DTURJRCk7CiAJV01JX0NNRChXTUlfU1RPUF9SRUNWX0NNRElEKTsKKworCXRhc2tsZXRfa2lsbCgmcHJpdi0+c3diYV90YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOworCXRhc2tsZXRfa2lsbCgmcHJpdi0+dHhfdGFza2xldCk7CisKIAlza2JfcXVldWVfcHVyZ2UoJnByaXYtPnR4X3F1ZXVlKTsKIAorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJLyogQ2FuY2VsIGFsbCB0aGUgcnVubmluZyB0aW1lcnMvd29yayAuLiAqLworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmZhdGFsX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnBzX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+YXRoOWtfbGVkX2JsaW5rX3dvcmspOworCWF0aDlrX2xlZF9zdG9wX2JyaWdodG5lc3MocHJpdik7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKIAkvKiBSZW1vdmUgbW9uaXRvciBpbnRlcmZhY2UgaGVyZSAqLwogCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKIAkJaWYgKGF0aDlrX2h0Y19yZW1vdmVfbW9uaXRvcl9pbnRlcmZhY2UocHJpdikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCmluZGV4IDFhZmI4YmIuLjlmMDFlNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCkBAIC0zNjksNiArMzY5LDkgQEAKIAllbHNlCiAJCWFoLT5jb25maWcuaHRfZW5hYmxlID0gMDsKIAorCS8qIFBBUFJEIG5lZWRzIHNvbWUgbW9yZSB3b3JrIHRvIGJlIGVuYWJsZWQgKi8KKwlhaC0+Y29uZmlnLnBhcHJkX2Rpc2FibGUgPSAxOworCiAJYWgtPmNvbmZpZy5yeF9pbnRyX21pdGlnYXRpb24gPSB0cnVlOwogCWFoLT5jb25maWcucGNpZVNlckRlc1dyaXRlID0gdHJ1ZTsKIApAQCAtMTkzMyw3ICsxOTM2LDggQEAKIAkJcENhcC0+cnhfc3RhdHVzX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXI5MDAzX3J4cyk7CiAJCXBDYXAtPnR4X2Rlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBhcjkwMDNfdHhjKTsKIAkJcENhcC0+dHhzX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXI5MDAzX3R4cyk7Ci0JCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1BBUFJEKSkKKwkJaWYgKCFhaC0+Y29uZmlnLnBhcHJkX2Rpc2FibGUgJiYKKwkJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUEFQUkQpKQogCQkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfUEFQUkQ7CiAJfSBlbHNlIHsKIAkJcENhcC0+dHhfZGVzY19sZW4gPSBzaXplb2Yoc3RydWN0IGF0aF9kZXNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKaW5kZXggNWEzZGZlYy4uZWE5ZmRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKQEAgLTIyNSw2ICsyMjUsNyBAQAogCXUzMiBwY2llX3dhZW47CiAJdTggYW5hbG9nX3NoaWZ0cmVnOwogCXU4IGh0X2VuYWJsZTsKKwl1OCBwYXByZF9kaXNhYmxlOwogCXUzMiBvZmRtX3RyaWdfbG93OwogCXUzMiBvZmRtX3RyaWdfaGlnaDsKIAl1MzIgY2NrX3RyaWdfaGlnaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCmluZGV4IDc2N2Q4YjguLmEwMzNkMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwpAQCAtNDEsMTAgKzQxLDYgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChidGNvZXhfZW5hYmxlLCBhdGg5a19idGNvZXhfZW5hYmxlLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhidGNvZXhfZW5hYmxlLCAiRW5hYmxlIHdpZmktQlQgY29leGlzdGVuY2UiKTsKIAotaW50IGF0aDlrX3BtX3Fvc192YWx1ZSA9IEFUSDlLX1BNX1FPU19ERUZBVUxUX1ZBTFVFOwotbW9kdWxlX3BhcmFtX25hbWVkKHBtcW9zLCBhdGg5a19wbV9xb3NfdmFsdWUsIGludCwgU19JUlVTUiB8IFNfSVJHUlAgfCBTX0lST1RIKTsKLU1PRFVMRV9QQVJNX0RFU0MocG1xb3MsICJVc2VyIHNwZWNpZmllZCBQTS1RT1MgdmFsdWUiKTsKLQogYm9vbCBpc19hdGg5a191bmxvYWRlZDsKIC8qIFdlIHVzZSB0aGUgaHdfdmFsdWUgYXMgYW4gaW5kZXggaW50byBvdXIgcHJpdmF0ZSBjaGFubmVsIHN0cnVjdHVyZSAqLwogCkBAIC01OTgsOCArNTk0LDYgQEAKIGVycl9xdWV1ZXM6CiAJYXRoOWtfaHdfZGVpbml0KGFoKTsKIGVycl9odzoKLQl0YXNrbGV0X2tpbGwoJnNjLT5pbnRyX3RxKTsKLQl0YXNrbGV0X2tpbGwoJnNjLT5iY29uX3Rhc2tsZXQpOwogCiAJa2ZyZWUoYWgpOwogCXNjLT5zY19haCA9IE5VTEw7CkBAIC03NjQsOSArNzU4LDYgQEAKIAlhdGhfaW5pdF9sZWRzKHNjKTsKIAlhdGhfc3RhcnRfcmZraWxsX3BvbGwoc2MpOwogCi0JcG1fcW9zX2FkZF9yZXF1ZXN0KCZzYy0+cG1fcW9zX3JlcSwgUE1fUU9TX0NQVV9ETUFfTEFURU5DWSwKLQkJCSAgIFBNX1FPU19ERUZBVUxUX1ZBTFVFKTsKLQogCXJldHVybiAwOwogCiBlcnJvcl93b3JsZDoKQEAgLTgwNyw5ICs3OTgsNiBAQAogCiAJYXRoOWtfaHdfZGVpbml0KHNjLT5zY19haCk7CiAKLQl0YXNrbGV0X2tpbGwoJnNjLT5pbnRyX3RxKTsKLQl0YXNrbGV0X2tpbGwoJnNjLT5iY29uX3Rhc2tsZXQpOwotCiAJa2ZyZWUoc2MtPnNjX2FoKTsKIAlzYy0+c2NfYWggPSBOVUxMOwogfQpAQCAtODI0LDYgKzgxMiw4IEBACiAJd2lwaHlfcmZraWxsX3N0b3BfcG9sbGluZyhzYy0+aHctPndpcGh5KTsKIAlhdGhfZGVpbml0X2xlZHMoc2MpOwogCisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CisKIAlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgewogCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKIAkJaWYgKGFwaHkgPT0gTlVMTCkKQEAgLTgzNCw3ICs4MjQsNiBAQAogCX0KIAogCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGh3KTsKLQlwbV9xb3NfcmVtb3ZlX3JlcXVlc3QoJnNjLT5wbV9xb3NfcmVxKTsKIAlhdGhfcnhfY2xlYW51cChzYyk7CiAJYXRoX3R4X2NsZWFudXAoc2MpOwogCWF0aDlrX2RlaW5pdF9zb2Z0YyhzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKaW5kZXggMTgwMTcwZC4uMjkxNWIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYwpAQCAtODg1LDcgKzg4NSw3IEBACiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAKIAlpZiAoIShpbnRzICYgQVRIOUtfSU5UX0dMT0JBTCkpCi0JCWF0aDlrX2h3X2VuYWJsZV9pbnRlcnJ1cHRzKGFoKTsKKwkJYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0lOVEVSUlVQVCwgIjB4JXggPT4gMHgleFxuIiwgb21hc2ssIGludHMpOwogCkBAIC05NjMsNyArOTYzLDggQEAKIAkJCVJFR19DTFJfQklUKGFoLCBBUl9JTVJfUzUsIEFSX0lNUl9TNV9USU1fVElNRVIpOwogCX0KIAotCWF0aDlrX2h3X2VuYWJsZV9pbnRlcnJ1cHRzKGFoKTsKKwlpZiAoaW50cyAmIEFUSDlLX0lOVF9HTE9CQUwpCisJCWF0aDlrX2h3X2VuYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IGY5MGE2Y2EuLmEwOWQxNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtMzI1LDYgKzMyNSw4IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKIAlpbnQgdGltZV9sZWZ0OwogCkBAIC0zNDAsMTQgKzM0MiwxNiBAQAogCXR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMV0uaWR4ID0gLTE7CiAKIAlpbml0X2NvbXBsZXRpb24oJnNjLT5wYXByZF9jb21wbGV0ZSk7Ci0Jc2MtPnBhcHJkX3BlbmRpbmcgPSB0cnVlOwogCXR4Y3RsLnBhcHJkID0gQklUKGNoYWluKTsKLQlpZiAoYXRoX3R4X3N0YXJ0KGh3LCBza2IsICZ0eGN0bCkgIT0gMCkKKworCWlmIChhdGhfdHhfc3RhcnQoaHcsIHNrYiwgJnR4Y3RsKSAhPSAwKSB7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1hNSVQsICJQQVBSRCBUWCBmYWlsZWRcbiIpOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gZmFsc2U7CisJfQogCiAJdGltZV9sZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzYy0+cGFwcmRfY29tcGxldGUsCiAJCQltc2Vjc190b19qaWZmaWVzKEFUSF9QQVBSRF9USU1FT1VUKSk7Ci0Jc2MtPnBhcHJkX3BlbmRpbmcgPSBmYWxzZTsKIAogCWlmICghdGltZV9sZWZ0KQogCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0NBTElCUkFURSwKQEAgLTU5MiwxNCArNTk2LDEyIEBACiAJdTMyIHN0YXR1cyA9IHNjLT5pbnRyc3RhdHVzOwogCXUzMiByeG1hc2s7CiAKLQlhdGg5a19wc193YWtldXAoc2MpOwotCiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9GQVRBTCkgewogCQlhdGhfcmVzZXQoc2MsIHRydWUpOwotCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAkJcmV0dXJuOwogCX0KIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJc3Bpbl9sb2NrKCZzYy0+c2NfcGN1X2xvY2spOwogCiAJaWYgKCFhdGg5a19od19jaGVja19hbGl2ZShhaCkpCkBAIC05NTUsOCArOTU3LDYgQEAKIAogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcGN1X2xvY2spOwogCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwotCi0JYXRoOWtfc2V0cG93ZXIoc2MsIEFUSDlLX1BNX0ZVTExfU0xFRVApOwogfQogCiBpbnQgYXRoX3Jlc2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBib29sIHJldHJ5X3R4KQpAQCAtOTY5LDYgKzk2OSw3IEBACiAJLyogU3RvcCBBTkkgKi8KIAlkZWxfdGltZXJfc3luYygmY29tbW9uLT5hbmkudGltZXIpOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAKIAlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOwpAQCAtMTAxNSw2ICsxMDE2LDcgQEAKIAogCS8qIFN0YXJ0IEFOSSAqLwogCWF0aF9zdGFydF9hbmkoY29tbW9uKTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAogCXJldHVybiByOwogfQpAQCAtMTE3MSwxMiArMTE3Myw2IEBACiAJCQlhdGg5a19idGNvZXhfdGltZXJfcmVzdW1lKHNjKTsKIAl9CiAKLQkvKiBVc2VyIGhhcyB0aGUgb3B0aW9uIHRvIHByb3ZpZGUgcG0tcW9zIHZhbHVlIGFzIGEgbW9kdWxlCi0JICogcGFyYW1ldGVyIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBkZWZhdWx0IHZhbHVlIG9mCi0JICogJ0FUSDlLX1BNX1FPU19ERUZBVUxUX1ZBTFVFJy4KLQkgKi8KLQlwbV9xb3NfdXBkYXRlX3JlcXVlc3QoJnNjLT5wbV9xb3NfcmVxLCBhdGg5a19wbV9xb3NfdmFsdWUpOwotCiAJaWYgKGFoLT5jYXBzLnBjaWVfbGNyX2V4dHN5bmNfZW4gJiYgY29tbW9uLT5idXNfb3BzLT5leHRuX3N5bmNoX2VuKQogCQljb21tb24tPmJ1c19vcHMtPmV4dG5fc3luY2hfZW4oY29tbW9uKTsKIApAQCAtMTMwOSw2ICsxMzA1LDkgQEAKIAogCXNwaW5fbG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAorCS8qIHByZXZlbnQgdGFza2xldHMgdG8gZW5hYmxlIGludGVycnVwdHMgb25jZSB3ZSBkaXNhYmxlIHRoZW0gKi8KKwlhaC0+aW1hc2sgJj0gfkFUSDlLX0lOVF9HTE9CQUw7CisKIAkvKiBtYWtlIHN1cmUgaC93IHdpbGwgbm90IGdlbmVyYXRlIGFueSBpbnRlcnJ1cHQKIAkgKiBiZWZvcmUgc2V0dGluZyB0aGUgaW52YWxpZCBmbGFnLiAqLwogCWF0aDlrX2h3X2Rpc2FibGVfaW50ZXJydXB0cyhhaCk7CkBAIC0xMzI2LDYgKzEzMjUsMTIgQEAKIAogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcGN1X2xvY2spOwogCisJLyogd2UgY2FuIG5vdyBzeW5jIGlycSBhbmQga2lsbCBhbnkgcnVubmluZyB0YXNrbGV0cywgc2luY2Ugd2UgYWxyZWFkeQorCSAqIGRpc2FibGVkIGludGVycnVwdHMgYW5kIG5vdCBob2xkaW5nIGEgc3BpbiBsb2NrICovCisJc3luY2hyb25pemVfaXJxKHNjLT5pcnEpOworCXRhc2tsZXRfa2lsbCgmc2MtPmludHJfdHEpOworCXRhc2tsZXRfa2lsbCgmc2MtPmJjb25fdGFza2xldCk7CisKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAogCXNjLT5wc19pZGxlID0gdHJ1ZTsKQEAgLTEzMzQsOCArMTMzOSw2IEBACiAKIAlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfSU5WQUxJRDsKIAotCXBtX3Fvc191cGRhdGVfcmVxdWVzdCgmc2MtPnBtX3Fvc19yZXEsIFBNX1FPU19ERUZBVUxUX1ZBTFVFKTsKLQogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkRyaXZlciBoYWx0XG4iKTsKQEAgLTE3MDEsNyArMTcwNCw5IEBACiBza2lwX2NoYW5fY2hhbmdlOgogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKSB7CiAJCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IDIgKiBjb25mLT5wb3dlcl9sZXZlbDsKKwkJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAkJYXRoX3VwZGF0ZV90eHBvdyhzYyk7CisJCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCX0KIAogCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKaW5kZXggMzMyZDFmZS4uMDdiNzgwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCkBAIC0xNzI1LDYgKzE3MjUsOSBAQAogCQkJYXI5MDAzX2h3X3NldF9wYXByZF90eGRlc2Moc2MtPnNjX2FoLCBiZi0+YmZfZGVzYywKIAkJCQkJCSAgIGJmLT5iZl9zdGF0ZS5iZnNfcGFwcmQpOwogCisJCWlmICh0eGN0bC0+cGFwcmQpCisJCQliZi0+YmZfc3RhdGUuYmZzX3BhcHJkX3RpbWVzdGFtcCA9IGppZmZpZXM7CisKIAkJYXRoX3R4X3NlbmRfbm9ybWFsKHNjLCB0eGN0bC0+dHhxLCB0aWQsICZiZl9oZWFkKTsKIAl9CiAKQEAgLTE4ODYsNyArMTg4OSw5IEBACiAJYmYtPmJmX2J1Zl9hZGRyID0gMDsKIAogCWlmIChiZi0+YmZfc3RhdGUuYmZzX3BhcHJkKSB7Ci0JCWlmICghc2MtPnBhcHJkX3BlbmRpbmcpCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsCisJCQkJYmYtPmJmX3N0YXRlLmJmc19wYXByZF90aW1lc3RhbXAgKworCQkJCW1zZWNzX3RvX2ppZmZpZXMoQVRIX1BBUFJEX1RJTUVPVVQpKSkKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWVsc2UKIAkJCWNvbXBsZXRlKCZzYy0+cGFwcmRfY29tcGxldGUpOwpAQCAtMjExMyw5ICsyMTE4LDcgQEAKIAlpZiAobmVlZHJlc2V0KSB7CiAJCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfUkVTRVQsCiAJCQkidHggaHVuZywgcmVzZXR0aW5nIHRoZSBjaGlwXG4iKTsKLQkJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAkJYXRoX3Jlc2V0KHNjLCB0cnVlKTsKLQkJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJfQogCiAJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsICZzYy0+dHhfY29tcGxldGVfd29yaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3J4LmMKaW5kZXggOTM5YTBlOS4uODQ4NjZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3J4LmMKQEAgLTU2NCw3ICs1NjQsNyBAQAogCWNhbSA9IGllZWU4MDIxMV9jaGVja190aW0odGltX2llLCB0aW1fbGVuLCBhci0+Y29tbW9uLmN1cmFpZCk7CiAKIAkvKiAyLiBNYXliZSB0aGUgQVAgd2FudHMgdG8gc2VuZCBtdWx0aWNhc3QvYnJvYWRjYXN0IGRhdGE/ICovCi0JY2FtID0gISEodGltX2llLT5iaXRtYXBfY3RybCAmIDB4MDEpOworCWNhbSB8PSAhISh0aW1faWUtPmJpdG1hcF9jdHJsICYgMHgwMSk7CiAKIAlpZiAoIWNhbSkgewogCQkvKiBiYWNrIHRvIGxvdy1wb3dlciBsYW5kLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3VzYi5jCmluZGV4IDUzNzczMmUuLmY4MmM0MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdXNiLmMKQEAgLTExOCw2ICsxMTgsOCBAQAogCXsgVVNCX0RFVklDRSgweDA1N2MsIDB4ODQwMikgfSwKIAkvKiBRd2VzdC9BY3Rpb250ZWMgODAyQUlOIFdpcmVsZXNzIE4gVVNCIE5ldHdvcmsgQWRhcHRlciAqLwogCXsgVVNCX0RFVklDRSgweDE2NjgsIDB4MTIwMCkgfSwKKwkvKiBBaXJsaXZlIFguVVNCIGEvYi9nL24gKi8KKwl7IFVTQl9ERVZJQ0UoMHgxYjc1LCAweDkxNzApIH0sCiAKIAkvKiB0ZXJtaW5hdGUgKi8KIAl7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IGE5Yjg1MmIuLjM5YjZmMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKQEAgLTQwMiw3MiArNDAyLDYgQEAKIH0KICNlbmRpZgogCi0vKioKLSAqIGl3bDM5NDVfZ29vZF9wbGNwX2hlYWx0aCAtIGNoZWNrcyBmb3IgcGxjcCBlcnJvci4KLSAqCi0gKiBXaGVuIHRoZSBwbGNwIGVycm9yIGlzIGV4Y2VlZGluZyB0aGUgdGhyZXNob2xkcywgcmVzZXQgdGhlIHJhZGlvCi0gKiB0byBpbXByb3ZlIHRoZSB0aHJvdWdocHV0LgotICovCi1zdGF0aWMgYm9vbCBpd2wzOTQ1X2dvb2RfcGxjcF9oZWFsdGgoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QpCi17Ci0JYm9vbCByYyA9IHRydWU7Ci0Jc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyBjdXJyZW50X3N0YXQ7Ci0JaW50IGNvbWJpbmVkX3BsY3BfZGVsdGE7Ci0JdW5zaWduZWQgaW50IHBsY3BfbXNlYzsKLQl1bnNpZ25lZCBsb25nIHBsY3BfcmVjZWl2ZWRfamlmZmllczsKLQotCWlmIChwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5wbGNwX2RlbHRhX3RocmVzaG9sZCA9PQotCSAgICBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ESVNBQkxFKSB7Ci0JCUlXTF9ERUJVR19SQURJTyhwcml2LCAicGxjcF9lcnIgY2hlY2sgZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCW1lbWNweSgmY3VycmVudF9zdGF0LCBwa3QtPnUucmF3LCBzaXplb2Yoc3RydWN0Ci0JCQlpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3MpKTsKLQkvKgotCSAqIGNoZWNrIGZvciBwbGNwX2VyciBhbmQgdHJpZ2dlciByYWRpbyByZXNldCBpZiBpdCBleGNlZWRzCi0JICogdGhlIHBsY3AgZXJyb3IgdGhyZXNob2xkIHBsY3BfZGVsdGEuCi0JICovCi0JcGxjcF9yZWNlaXZlZF9qaWZmaWVzID0gamlmZmllczsKLQlwbGNwX21zZWMgPSBqaWZmaWVzX3RvX21zZWNzKChsb25nKSBwbGNwX3JlY2VpdmVkX2ppZmZpZXMgLQotCQkJCQkobG9uZykgcHJpdi0+cGxjcF9qaWZmaWVzKTsKLQlwcml2LT5wbGNwX2ppZmZpZXMgPSBwbGNwX3JlY2VpdmVkX2ppZmZpZXM7Ci0JLyoKLQkgKiBjaGVjayB0byBtYWtlIHN1cmUgcGxjcF9tc2VjIGlzIG5vdCAwIHRvIHByZXZlbnQgZGl2aXNpb24KLQkgKiBieSB6ZXJvLgotCSAqLwotCWlmIChwbGNwX21zZWMpIHsKLQkJY29tYmluZWRfcGxjcF9kZWx0YSA9Ci0JCQkobGUzMl90b19jcHUoY3VycmVudF9zdGF0LnJ4Lm9mZG0ucGxjcF9lcnIpIC0KLQkJCWxlMzJfdG9fY3B1KHByaXYtPl8zOTQ1LnN0YXRpc3RpY3Mucngub2ZkbS5wbGNwX2VycikpOwotCi0JCWlmICgoY29tYmluZWRfcGxjcF9kZWx0YSA+IDApICYmCi0JCQkoKGNvbWJpbmVkX3BsY3BfZGVsdGEgKiAxMDApIC8gcGxjcF9tc2VjKSA+Ci0JCQlwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5wbGNwX2RlbHRhX3RocmVzaG9sZCkgewotCQkJLyoKLQkJCSAqIGlmIHBsY3BfZXJyIGV4Y2VlZCB0aGUgdGhyZXNob2xkLCB0aGUgZm9sbG93aW5nCi0JCQkgKiBkYXRhIGlzIHByaW50ZWQgaW4gY3N2IGZvcm1hdDoKLQkJCSAqICAgIFRleHQ6IHBsY3BfZXJyIGV4Y2VlZGVkICVkLAotCQkJICogICAgUmVjZWl2ZWQgb2ZkbS5wbGNwX2VyciwKLQkJCSAqICAgIEN1cnJlbnQgb2ZkbS5wbGNwX2VyciwKLQkJCSAqICAgIGNvbWJpbmVkX3BsY3BfZGVsdGEsCi0JCQkgKiAgICBwbGNwX21zZWMKLQkJCSAqLwotCQkJSVdMX0RFQlVHX1JBRElPKHByaXYsICJwbGNwX2VyciBleGNlZWRlZCAldSwgIgotCQkJCSIldSwgJWQsICV1IG1TZWNzXG4iLAotCQkJCXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPnBsY3BfZGVsdGFfdGhyZXNob2xkLAotCQkJCWxlMzJfdG9fY3B1KGN1cnJlbnRfc3RhdC5yeC5vZmRtLnBsY3BfZXJyKSwKLQkJCQljb21iaW5lZF9wbGNwX2RlbHRhLCBwbGNwX21zZWMpOwotCQkJLyoKLQkJCSAqIFJlc2V0IHRoZSBSRiByYWRpbyBkdWUgdG8gdGhlIGhpZ2ggcGxjcAotCQkJICogZXJyb3IgcmF0ZQotCQkJICovCi0JCQlyYyA9IGZhbHNlOwotCQl9Ci0JfQotCXJldHVybiByYzsKLX0KLQogdm9pZCBpd2wzOTQ1X2h3X3J4X3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKQEAgLTI3MzQsNyArMjY2OCw2IEBACiAJLmlzcl9vcHMgPSB7CiAJCS5pc3IgPSBpd2xfaXNyX2xlZ2FjeSwKIAl9LAotCS5jaGVja19wbGNwX2hlYWx0aCA9IGl3bDM5NDVfZ29vZF9wbGNwX2hlYWx0aCwKIAogCS5kZWJ1Z2ZzX29wcyA9IHsKIAkJLnJ4X3N0YXRzX3JlYWQgPSBpd2wzOTQ1X3Vjb2RlX3J4X3N0YXRzX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKaW5kZXggM2YxZTVmMS4uOTFhOWY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwpAQCAtMjYyNCw2ICsyNjI0LDcgQEAKIAkuZndfbmFtZV9wcmUgPSBJV0w0OTY1X0ZXX1BSRSwKIAkudWNvZGVfYXBpX21heCA9IElXTDQ5NjVfVUNPREVfQVBJX01BWCwKIAkudWNvZGVfYXBpX21pbiA9IElXTDQ5NjVfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCiAJLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV80OTY1X0VFUFJPTV9WRVJTSU9OLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IDc5YWIwYTYuLjUzN2ZiOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTUxLDcgKzUxLDcgQEAKICNpbmNsdWRlICJpd2wtYWduLWRlYnVnZnMuaCIKIAogLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgSVdMNTAwMF9VQ09ERV9BUElfTUFYIDIKKyNkZWZpbmUgSVdMNTAwMF9VQ09ERV9BUElfTUFYIDUKICNkZWZpbmUgSVdMNTE1MF9VQ09ERV9BUElfTUFYIDIKIAogLyogTG93ZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCmluZGV4IGFmNTA1YmMuLmVmMzZhZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKQEAgLTY4MSw2ICs2ODEsOCBAQAogCS5md19uYW1lX3ByZSA9IElXTDYwNTBfRldfUFJFLAkJCQlcCiAJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDUwX1VDT0RFX0FQSV9NQVgsCQkJXAogCS51Y29kZV9hcGlfbWluID0gSVdMNjA1MF9VQ09ERV9BUElfTUlOLAkJCVwKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCLAkJLyogLmNmZyBvdmVyd3JpdGUgKi8JXAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCQkvKiAuY2ZnIG92ZXJ3cml0ZSAqLwlcCiAJLm9wcyA9ICZpd2w2MDUwX29wcywJCQkJCVwKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDUwX0VFUFJPTV9WRVJTSU9OLAkJXAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwNTBfVFhfUE9XRVJfVkVSU0lPTiwJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWVlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWVlcHJvbS5jCmluZGV4IDE0Y2ViNGQuLjI3YjVhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZWVwcm9tLmMKQEAgLTE1MiwxMSArMTUyLDE0IEBACiAKIAllZXByb21fc2t1ID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9TS1VfQ0FQKTsKIAotCXByaXYtPmNmZy0+c2t1ID0gKChlZXByb21fc2t1ICYgRUVQUk9NX1NLVV9DQVBfQkFORF9TRUxFQ1RJT04pID4+CisJaWYgKCFwcml2LT5jZmctPnNrdSkgeworCQkvKiBub3QgdXNpbmcgc2t1IG92ZXJ3cml0ZSAqLworCQlwcml2LT5jZmctPnNrdSA9CisJCQkoKGVlcHJvbV9za3UgJiBFRVBST01fU0tVX0NBUF9CQU5EX1NFTEVDVElPTikgPj4KIAkJCUVFUFJPTV9TS1VfQ0FQX0JBTkRfUE9TKTsKLQlpZiAoZWVwcm9tX3NrdSAmIEVFUFJPTV9TS1VfQ0FQXzExTl9FTkFCTEUpCi0JCXByaXYtPmNmZy0+c2t1IHw9IElXTF9TS1VfTjsKLQorCQlpZiAoZWVwcm9tX3NrdSAmIEVFUFJPTV9TS1VfQ0FQXzExTl9FTkFCTEUpCisJCQlwcml2LT5jZmctPnNrdSB8PSBJV0xfU0tVX047CisJfQogCWlmICghcHJpdi0+Y2ZnLT5za3UpIHsKIAkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBkZXZpY2Ugc2t1XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDM2MzM1YjEuLmMxY2ZkOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0xMTU3LDYgKzExNTcsOSBAQAogCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpc2FibGVkIGJ5IGlycSAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQogCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisJLyogUmUtZW5hYmxlIFJGX0tJTEwgaWYgaXQgb2NjdXJyZWQgKi8KKwllbHNlIGlmIChoYW5kbGVkICYgQ1NSX0lOVF9CSVRfUkZfS0lMTCkKKwkJaXdsX2VuYWJsZV9yZmtpbGxfaW50KHByaXYpOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIChJV0xfRExfSVNSKSkgewpAQCAtMTM3MSw2ICsxMzc0LDkgQEAKIAkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKIAkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCS8qIFJlLWVuYWJsZSBSRl9LSUxMIGlmIGl0IG9jY3VycmVkICovCisJZWxzZSBpZiAoaGFuZGxlZCAmIENTUl9JTlRfQklUX1JGX0tJTEwpCisJCWl3bF9lbmFibGVfcmZraWxsX2ludChwcml2KTsKIH0KIAogLyogdGhlIHRocmVzaG9sZCByYXRpbyBvZiBhY3R1YWxfYWNrX2NudCB0byBleHBlY3RlZF9hY2tfY250IGluIHBlcmNlbnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwppbmRleCAxZWFjYmE0Li4wNDk0ZDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCkBAIC0xOTksNiArMTk5LDcgQEAKIAl3aGlsZSAoaSAhPSBpZHgpIHsKIAkJdTE2IGxlbjsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAkJZGVzYyA9ICZyaW5nW2ldOwogCQlsZW4gPSBsZTE2X3RvX2NwdShkZXNjLT5sZW4pOwogCQlza2IgPSByeF9idWZbaV07CkBAIC0yMTYsMTcgKzIxNywyMCBAQAogCiAJCQlsZW4gPSBwcml2LT5jb21tb24ucnhfbXR1OwogCQl9CisJCWRtYV9hZGRyID0gbGUzMl90b19jcHUoZGVzYy0+aG9zdF9hZGRyKTsKKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHByaXYtPnBkZXYsIGRtYV9hZGRyLAorCQkJcHJpdi0+Y29tbW9uLnJ4X210dSArIDMyLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQlza2JfcHV0KHNrYiwgbGVuKTsKIAogCQlpZiAocDU0X3J4KGRldiwgc2tiKSkgewotCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LAotCQkJCQkgbGUzMl90b19jcHUoZGVzYy0+aG9zdF9hZGRyKSwKLQkJCQkJIHByaXYtPmNvbW1vbi5yeF9tdHUgKyAzMiwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRtYV9hZGRyLAorCQkJCXByaXYtPmNvbW1vbi5yeF9tdHUgKyAzMiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCXJ4X2J1ZltpXSA9IE5VTEw7Ci0JCQlkZXNjLT5ob3N0X2FkZHIgPSAwOworCQkJZGVzYy0+aG9zdF9hZGRyID0gY3B1X3RvX2xlMzIoMCk7CiAJCX0gZWxzZSB7CiAJCQlza2JfdHJpbShza2IsIDApOworCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHByaXYtPnBkZXYsIGRtYV9hZGRyLAorCQkJCXByaXYtPmNvbW1vbi5yeF9tdHUgKyAzMiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWRlc2MtPmxlbiA9IGNwdV90b19sZTE2KHByaXYtPmNvbW1vbi5yeF9tdHUgKyAzMik7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCmluZGV4IDIxNzEzYTcuLjliMzQ0YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKQEAgLTk4LDYgKzk4LDcgQEAKIAl7VVNCX0RFVklDRSgweDE0MTMsIDB4NTQwMCl9LCAgIC8qIFRlbHNleSA4MDIuMTFnIFVTQjIuMCBBZGFwdGVyICovCiAJe1VTQl9ERVZJQ0UoMHgxNDM1LCAweDA0MjcpfSwJLyogSW52ZW50ZWwgVVIwNTRHICovCiAJe1VTQl9ERVZJQ0UoMHgxNjY4LCAweDEwNTApfSwJLyogQWN0aW9udGVjIDgwMlVJRy0xICovCisJe1VTQl9ERVZJQ0UoMHgxNzQwLCAweDEwMDApfSwJLyogU2VuYW8gTlVCLTM1MCAqLwogCXtVU0JfREVWSUNFKDB4MjAwMSwgMHgzNzA0KX0sCS8qIERMaW5rIERXTC1HMTIyIHJldiBBMiAqLwogCXtVU0JfREVWSUNFKDB4MjAwMSwgMHgzNzA1KX0sCS8qIEQtTGluayBEV0wtRzEyMCByZXYgQzEgKi8KIAl7VVNCX0RFVklDRSgweDQxM2MsIDB4NTUxMyl9LAkvKiBEZWxsIFdMQTMzMTAgVVNCIFdpcmVsZXNzIEFkYXB0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwppbmRleCA4NDhjYzJjLi41MTg1NDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCkBAIC0yNTk3LDYgKzI1OTcsOSBAQAogCV9fbGUzMiBtb2RlOwogCWludCByZXQ7CiAKKwlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgIT0gUk5ESVNfQkNNNDMyMEIpCisJCXJldHVybiAtRU5PVFNVUFA7CisKIAluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogJXMsICVkXG4iLCBfX2Z1bmNfXywKIAkJCQllbmFibGVkID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKIAkJCQl0aW1lb3V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYwppbmRleCBhYTk3OTcxLi4zYjNmMWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jCkBAIC02NTIsNiArNjUyLDEyIEBACiAJCSAqLwogCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfSVZfU1RSSVBQRUQ7CiAKKwkJLyoKKwkJICogVGhlIGhhcmR3YXJlIGhhcyBhbHJlYWR5IGNoZWNrZWQgdGhlIE1pY2hhZWwgTWljIGFuZCBoYXMKKwkJICogc3RyaXBwZWQgaXQgZnJvbSB0aGUgZnJhbWUuIFNpZ25hbCB0aGlzIHRvIG1hYzgwMjExLgorCQkgKi8KKwkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX01NSUNfU1RSSVBQRUQ7CisKIAkJaWYgKHJ4ZGVzYy0+Y2lwaGVyX3N0YXR1cyA9PSBSWF9DUllQVE9fU1VDQ0VTUykKIAkJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19ERUNSWVBURUQ7CiAJCWVsc2UgaWYgKHJ4ZGVzYy0+Y2lwaGVyX3N0YXR1cyA9PSBSWF9DUllQVE9fRkFJTF9NSUMpCkBAIC0xMDY1LDYgKzEwNzEsOCBAQAogCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzM5MCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUlQzNVhYCisJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzExKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAorCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcyMiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwNjApLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDYyKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzU2MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwppbmRleCBiOTdhNGE1Li4xOTdhMzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCkBAIC00ODYsNiArNDg2LDEyIEBACiAJCSAqLwogCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfSVZfU1RSSVBQRUQ7CiAKKwkJLyoKKwkJICogVGhlIGhhcmR3YXJlIGhhcyBhbHJlYWR5IGNoZWNrZWQgdGhlIE1pY2hhZWwgTWljIGFuZCBoYXMKKwkJICogc3RyaXBwZWQgaXQgZnJvbSB0aGUgZnJhbWUuIFNpZ25hbCB0aGlzIHRvIG1hYzgwMjExLgorCQkgKi8KKwkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX01NSUNfU1RSSVBQRUQ7CisKIAkJaWYgKHJ4ZGVzYy0+Y2lwaGVyX3N0YXR1cyA9PSBSWF9DUllQVE9fU1VDQ0VTUykKIAkJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19ERUNSWVBURUQ7CiAJCWVsc2UgaWYgKHJ4ZGVzYy0+Y2lwaGVyX3N0YXR1cyA9PSBSWF9DUllQVE9fRkFJTF9NSUMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwppbmRleCAwYjRlODU5Li4wMjliZTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKQEAgLTI0NDYsNiArMjQ0Niw3IEBACiAJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTNkKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI1NzMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjY3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgxMiwgMHgzMTAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAkvKiBRY29tICovCiAJeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MTk2KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxOGU4LCAweDYyMjkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jCmluZGV4IGI4NDMzZjMuLjYyODc2Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmMKQEAgLTcyNiw5ICs3MjYsOSBAQAogfQogCiBzdGF0aWMgdm9pZCBlZnVzZV93cml0ZV9kYXRhX2Nhc2UxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgKmVmdXNlX2FkZHIsCi0JCQkJdTggZWZ1c2VfZGF0YSwgdTggb2Zmc2V0LCBpbnQgKmJjb250aW51YWwsCi0JCQkJdTggKndyaXRlX3N0YXRlLCBzdHJ1Y3QgcGdwa3Rfc3RydWN0IHRhcmdldF9wa3QsCi0JCQkJaW50ICpyZXBlYXRfdGltZXMsIGludCAqYnJlc3VsdCwgdTggd29yZF9lbikKKwkJCXU4IGVmdXNlX2RhdGEsIHU4IG9mZnNldCwgaW50ICpiY29udGludWFsLAorCQkJdTggKndyaXRlX3N0YXRlLCBzdHJ1Y3QgcGdwa3Rfc3RydWN0ICp0YXJnZXRfcGt0LAorCQkJaW50ICpyZXBlYXRfdGltZXMsIGludCAqYnJlc3VsdCwgdTggd29yZF9lbikKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHBncGt0X3N0cnVjdCB0bXBfcGt0OwpAQCAtNzQ0LDggKzc0NCw4IEBACiAJdG1wX3BrdC53b3JkX2VuID0gdG1wX2hlYWRlciAmIDB4MEY7CiAJdG1wX3dvcmRfY250cyA9IGVmdXNlX2NhbGN1bGF0ZV93b3JkX2NudHModG1wX3BrdC53b3JkX2VuKTsKIAotCWlmICh0bXBfcGt0Lm9mZnNldCAhPSB0YXJnZXRfcGt0Lm9mZnNldCkgewotCQllZnVzZV9hZGRyID0gZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOworCWlmICh0bXBfcGt0Lm9mZnNldCAhPSB0YXJnZXRfcGt0LT5vZmZzZXQpIHsKKwkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOwogCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CiAJfSBlbHNlIHsKIAkJZm9yICh0bXBpbmRleCA9IDA7IHRtcGluZGV4IDwgKHRtcF93b3JkX2NudHMgKiAyKTsgdG1waW5kZXgrKykgewpAQCAtNzU2LDIzICs3NTYsMjMgQEAKIAkJfQogCiAJCWlmIChiZGF0YWVtcHR5ID09IGZhbHNlKSB7Ci0JCQllZnVzZV9hZGRyID0gZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOworCQkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOwogCQkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwogCQl9IGVsc2UgewogCQkJbWF0Y2hfd29yZF9lbiA9IDB4MEY7Ci0JCQlpZiAoISgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDApKSB8CisJCQlpZiAoISgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgwKSkgfAogCQkJICAgICAodG1wX3BrdC53b3JkX2VuICYgQklUKDApKSkpCiAJCQkJbWF0Y2hfd29yZF9lbiAmPSAofkJJVCgwKSk7CiAKLQkJCWlmICghKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMSkpIHwKKwkJCWlmICghKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDEpKSB8CiAJCQkgICAgICh0bXBfcGt0LndvcmRfZW4gJiBCSVQoMSkpKSkKIAkJCQltYXRjaF93b3JkX2VuICY9ICh+QklUKDEpKTsKIAotCQkJaWYgKCEoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgyKSkgfAorCQkJaWYgKCEoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMikpIHwKIAkJCSAgICAgKHRtcF9wa3Qud29yZF9lbiAmIEJJVCgyKSkpKQogCQkJCW1hdGNoX3dvcmRfZW4gJj0gKH5CSVQoMikpOwogCi0JCQlpZiAoISgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDMpKSB8CisJCQlpZiAoISgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgzKSkgfAogCQkJICAgICAodG1wX3BrdC53b3JkX2VuICYgQklUKDMpKSkpCiAJCQkJbWF0Y2hfd29yZF9lbiAmPSAofkJJVCgzKSk7CiAKQEAgLTc4MCw3ICs3ODAsNyBAQAogCQkJCWJhZHdvcmRlbiA9IGVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfd3JpdGUoCiAJCQkJCQkJICAgIGh3LCAqZWZ1c2VfYWRkciArIDEsCiAJCQkJCQkJICAgIHRtcF9wa3Qud29yZF9lbiwKLQkJCQkJCQkgICAgdGFyZ2V0X3BrdC5kYXRhKTsKKwkJCQkJCQkgICAgdGFyZ2V0X3BrdC0+ZGF0YSk7CiAKIAkJCQlpZiAoMHgwRiAhPSAoYmFkd29yZGVuICYgMHgwRikpIHsKIAkJCQkJdTggcmVvcmdfb2Zmc2V0ID0gb2Zmc2V0OwpAQCAtNzkxLDI2ICs3OTEsMjYgQEAKIAkJCQl9CiAKIAkJCQl0bXBfd29yZF9lbiA9IDB4MEY7Ci0JCQkJaWYgKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMCkpIF4KKwkJCQlpZiAoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMCkpIF4KIAkJCQkgICAgKG1hdGNoX3dvcmRfZW4gJiBCSVQoMCkpKQogCQkJCQl0bXBfd29yZF9lbiAmPSAofkJJVCgwKSk7CiAKLQkJCQlpZiAoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgxKSkgXgorCQkJCWlmICgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgxKSkgXgogCQkJCSAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgxKSkpCiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDEpKTsKIAotCQkJCWlmICgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDIpKSBeCisJCQkJaWYgKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDIpKSBeCiAJCQkJCShtYXRjaF93b3JkX2VuICYgQklUKDIpKSkKIAkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMikpOwogCi0JCQkJaWYgKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMykpIF4KKwkJCQlpZiAoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMykpIF4KIAkJCQkgICAgKG1hdGNoX3dvcmRfZW4gJiBCSVQoMykpKQogCQkJCQl0bXBfd29yZF9lbiAmPSAofkJJVCgzKSk7CiAKIAkJCQlpZiAoKHRtcF93b3JkX2VuICYgMHgwRikgIT0gMHgwRikgewogCQkJCQkqZWZ1c2VfYWRkciA9IGVmdXNlX2dldF9jdXJyZW50X3NpemUoaHcpOwotCQkJCQl0YXJnZXRfcGt0Lm9mZnNldCA9IG9mZnNldDsKLQkJCQkJdGFyZ2V0X3BrdC53b3JkX2VuID0gdG1wX3dvcmRfZW47CisJCQkJCXRhcmdldF9wa3QtPm9mZnNldCA9IG9mZnNldDsKKwkJCQkJdGFyZ2V0X3BrdC0+d29yZF9lbiA9IHRtcF93b3JkX2VuOwogCQkJCX0gZWxzZQogCQkJCQkqYmNvbnRpbnVhbCA9IGZhbHNlOwogCQkJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKQEAgLTgyMSw4ICs4MjEsOCBAQAogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJKmVmdXNlX2FkZHIgKz0gKDIgKiB0bXBfd29yZF9jbnRzKSArIDE7Ci0JCQkJdGFyZ2V0X3BrdC5vZmZzZXQgPSBvZmZzZXQ7Ci0JCQkJdGFyZ2V0X3BrdC53b3JkX2VuID0gd29yZF9lbjsKKwkJCQl0YXJnZXRfcGt0LT5vZmZzZXQgPSBvZmZzZXQ7CisJCQkJdGFyZ2V0X3BrdC0+d29yZF9lbiA9IHdvcmRfZW47CiAJCQkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwogCQkJfQogCQl9CkBAIC05MzgsNyArOTM4LDcgQEAKIAkJCQllZnVzZV93cml0ZV9kYXRhX2Nhc2UxKGh3LCAmZWZ1c2VfYWRkciwKIAkJCQkJCSAgICAgICBlZnVzZV9kYXRhLCBvZmZzZXQsCiAJCQkJCQkgICAgICAgJmJjb250aW51YWwsCi0JCQkJCQkgICAgICAgJndyaXRlX3N0YXRlLCB0YXJnZXRfcGt0LAorCQkJCQkJICAgICAgICZ3cml0ZV9zdGF0ZSwgJnRhcmdldF9wa3QsCiAJCQkJCQkgICAgICAgJnJlcGVhdF90aW1lcywgJmJyZXN1bHQsCiAJCQkJCQkgICAgICAgd29yZF9lbik7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYwppbmRleCAwZmEzNmFhLi4xNzU4ZDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKQEAgLTYxOSw2ICs2MTksMTMgQEAKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnVza2IgPSBOVUxMOwogCQkJCQl1OCAqcGRhdGE7CiAJCQkJCXVza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYi0+bGVuICsgMTI4KTsKKwkJCQkJaWYgKCF1c2tiKSB7CisJCQkJCQlSVF9UUkFDRShydGxwcml2LAorCQkJCQkJCShDT01QX0lOVFIgfCBDT01QX1JFQ1YpLAorCQkJCQkJCURCR19FTUVSRywKKwkJCQkJCQkoImNhbid0IGFsbG9jIHJ4IHNrYlxuIikpOworCQkJCQkJZ290byBkb25lOworCQkJCQl9CiAJCQkJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IodXNrYiksCiAJCQkJCQkJJnJ4X3N0YXR1cywKIAkJCQkJCQlzaXplb2Yocnhfc3RhdHVzKSk7CkBAIC02NDEsNyArNjQ4LDcgQEAKIAkJCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKIAkJCWlmICh1bmxpa2VseSghbmV3X3NrYikpIHsKIAkJCQlSVF9UUkFDRShydGxwcml2LCAoQ09NUF9JTlRSIHwgQ09NUF9SRUNWKSwKLQkJCQkJIERCR19ETUVTRywKKwkJCQkJIERCR19FTUVSRywKIAkJCQkJICgiY2FuJ3QgYWxsb2Mgc2tiIGZvciByeFxuIikpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KQEAgLTEwNjYsOSArMTA3Myw5IEBACiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0KIAkJCSAgICBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKIAkJCXUzMiBidWZmZXJhZGRyZXNzOwotCQkJZW50cnkgPSAmcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0uZGVzY1tpXTsKIAkJCWlmICghc2tiKQogCQkJCXJldHVybiAwOworCQkJZW50cnkgPSAmcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0uZGVzY1tpXTsKIAogCQkJLypza2ItPmRldiA9IGRldjsgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9tYWluLmMKaW5kZXggMDEyZTFhNC4uNDAzNzJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvbWFpbi5jCkBAIC0xMDM5LDYgKzEwMzksOSBAQAogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT04pIHsKIAkJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7CisJCWlmICghYmVhY29uKQorCQkJZ290byBvdXRfc2xlZXA7CisKIAkJcmV0ID0gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9CRUFDT04sIGJlYWNvbi0+ZGF0YSwKIAkJCQkJICAgICAgYmVhY29uLT5sZW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMKaW5kZXggNDY3MTQ5MTAuLjcxNDVlYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMKQEAgLTExMCw5ICsxMTAsOCBAQAogCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CiAKIAlzcGlfc3luYyh3bF90b19zcGkod2wpLCAmbSk7Ci0Ja2ZyZWUoY21kKTsKLQogCXdsMTI3MV9kdW1wKERFQlVHX1NQSSwgInNwaSByZXNldCAtPiAiLCBjbWQsIFdTUElfSU5JVF9DTURfTEVOKTsKKwlrZnJlZShjbWQpOwogfQogCiBzdGF0aWMgdm9pZCB3bDEyNzFfc3BpX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCmluZGV4IDU0NmRlNTcuLmRhMWYxMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCisrKyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCkBAIC0xMjAsNiArMTIwLDkgQEAKIAl1bnNpZ25lZCBsb25nIHJ4X3Bmbl9hcnJheVtORVRfUlhfUklOR19TSVpFXTsKIAlzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5IHJ4X21jbFtORVRfUlhfUklOR19TSVpFKzFdOwogCXN0cnVjdCBtbXVfdXBkYXRlIHJ4X21tdVtORVRfUlhfUklOR19TSVpFXTsKKworCS8qIFN0YXRpc3RpY3MgKi8KKwlpbnQgcnhfZ3NvX2NoZWNrc3VtX2ZpeHVwOwogfTsKIAogc3RydWN0IG5ldGZyb250X3J4X2luZm8gewpAQCAtNzcwLDExICs3NzMsMjkgQEAKIAlyZXR1cm4gY29uczsKIH0KIAotc3RhdGljIGludCBza2JfY2hlY2tzdW1fc2V0dXAoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgY2hlY2tzdW1fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAl1bnNpZ25lZCBjaGFyICp0aDsKIAlpbnQgZXJyID0gLUVQUk9UTzsKKwlpbnQgcmVjYWxjdWxhdGVfcGFydGlhbF9jc3VtID0gMDsKKworCS8qCisJICogQSBHU08gU0tCIG11c3QgYmUgQ0hFQ0tTVU1fUEFSVElBTC4gSG93ZXZlciBzb21lIGJ1Z2d5CisJICogcGVlcnMgY2FuIGZhaWwgdG8gc2V0IE5FVFJYRl9jc3VtX2JsYW5rIHdoZW4gc2VuZGluZyBhIEdTTworCSAqIGZyYW1lLiBJbiB0aGlzIGNhc2UgZm9yY2UgdGhlIFNLQiB0byBDSEVDS1NVTV9QQVJUSUFMIGFuZAorCSAqIHJlY2FsY3VsYXRlIHRoZSBwYXJ0aWFsIGNoZWNrc3VtLgorCSAqLworCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMICYmIHNrYl9pc19nc28oc2tiKSkgeworCQlzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCQlucC0+cnhfZ3NvX2NoZWNrc3VtX2ZpeHVwKys7CisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKKwkJcmVjYWxjdWxhdGVfcGFydGlhbF9jc3VtID0gMTsKKwl9CisKKwkvKiBBIG5vbi1DSEVDS1NVTV9QQVJUSUFMIFNLQiBkb2VzIG5vdCByZXF1aXJlIHNldHVwLiAqLworCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKQorCQlyZXR1cm4gMDsKIAogCWlmIChza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQKSkKIAkJZ290byBvdXQ7CkBAIC03ODgsOSArODA5LDIzIEBACiAJc3dpdGNoIChpcGgtPnByb3RvY29sKSB7CiAJY2FzZSBJUFBST1RPX1RDUDoKIAkJc2tiLT5jc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKKworCQlpZiAocmVjYWxjdWxhdGVfcGFydGlhbF9jc3VtKSB7CisJCQlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gKHN0cnVjdCB0Y3BoZHIgKil0aDsKKwkJCXRjcGgtPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCisJCQkJCQkJIHNrYi0+bGVuIC0gaXBoLT5paGwqNCwKKwkJCQkJCQkgSVBQUk9UT19UQ1AsIDApOworCQl9CiAJCWJyZWFrOwogCWNhc2UgSVBQUk9UT19VRFA6CiAJCXNrYi0+Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7CisKKwkJaWYgKHJlY2FsY3VsYXRlX3BhcnRpYWxfY3N1bSkgeworCQkJc3RydWN0IHVkcGhkciAqdWRwaCA9IChzdHJ1Y3QgdWRwaGRyICopdGg7CisJCQl1ZHBoLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJCQkJCSBza2ItPmxlbiAtIGlwaC0+aWhsKjQsCisJCQkJCQkJIElQUFJPVE9fVURQLCAwKTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQpAQCAtODI5LDEzICs4NjQsMTEgQEAKIAkJLyogRXRoZXJuZXQgd29yazogRGVsYXllZCB0byBoZXJlIGFzIGl0IHBlZWtzIHRoZSBoZWFkZXIuICovCiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAKLQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJCWlmIChza2JfY2hlY2tzdW1fc2V0dXAoc2tiKSkgewotCQkJCWtmcmVlX3NrYihza2IpOwotCQkJCXBhY2tldHNfZHJvcHBlZCsrOwotCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJY29udGludWU7Ci0JCQl9CisJCWlmIChjaGVja3N1bV9zZXR1cChkZXYsIHNrYikpIHsKKwkJCWtmcmVlX3NrYihza2IpOworCQkJcGFja2V0c19kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJY29udGludWU7CiAJCX0KIAogCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKQEAgLTE2MzIsMTIgKzE2NjUsNTkgQEAKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGVubmV0X3N0YXQgeworCWNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dOworCXUxNiBvZmZzZXQ7Cit9IHhlbm5ldF9zdGF0c1tdID0geworCXsKKwkJInJ4X2dzb19jaGVja3N1bV9maXh1cCIsCisJCW9mZnNldG9mKHN0cnVjdCBuZXRmcm9udF9pbmZvLCByeF9nc29fY2hlY2tzdW1fZml4dXApCisJfSwKK307CisKK3N0YXRpYyBpbnQgeGVubmV0X2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdHJpbmdfc2V0KQoreworCXN3aXRjaCAoc3RyaW5nX3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlyZXR1cm4gQVJSQVlfU0laRSh4ZW5uZXRfc3RhdHMpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHZvaWQgeGVubmV0X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqIGRhdGEpCit7CisJdm9pZCAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeGVubmV0X3N0YXRzKTsgaSsrKQorCQlkYXRhW2ldID0gKihpbnQgKikobnAgKyB4ZW5uZXRfc3RhdHNbaV0ub2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgeGVubmV0X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICogZGF0YSkKK3sKKwlpbnQgaTsKKworCXN3aXRjaCAoc3RyaW5nc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhlbm5ldF9zdGF0cyk7IGkrKykKKwkJCW1lbWNweShkYXRhICsgaSAqIEVUSF9HU1RSSU5HX0xFTiwKKwkJCSAgICAgICB4ZW5uZXRfc3RhdHNbaV0ubmFtZSwgRVRIX0dTVFJJTkdfTEVOKTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHhlbm5ldF9ldGh0b29sX29wcyA9CiB7CiAJLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKIAkuc2V0X3NnID0geGVubmV0X3NldF9zZywKIAkuc2V0X3RzbyA9IHhlbm5ldF9zZXRfdHNvLAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisKKwkuZ2V0X3NzZXRfY291bnQgPSB4ZW5uZXRfZ2V0X3NzZXRfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzID0geGVubmV0X2dldF9ldGh0b29sX3N0YXRzLAorCS5nZXRfc3RyaW5ncyA9IHhlbm5ldF9nZXRfc3RyaW5ncywKIH07CiAKICNpZmRlZiBDT05GSUdfU1lTRlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL0tjb25maWcgYi9kcml2ZXJzL25mYy9LY29uZmlnCmluZGV4IGZmZWRmZDQuLmVhMTU4MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL0tjb25maWcKKysrIGIvZHJpdmVycy9uZmMvS2NvbmZpZwpAQCAtMyw3ICszLDcgQEAKICMKIAogbWVudWNvbmZpZyBORkNfREVWSUNFUwotCWJvb2wgIk5GQyBkZXZpY2VzIgorCWJvb2wgIk5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKSBkZXZpY2VzIgogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFlvdSdsbCBoYXZlIHRvIHNheSBZIGlmIHlvdXIgY29tcHV0ZXIgY29udGFpbnMgYW4gTkZDIGRldmljZSB0aGF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9wbjU0NC5jIGIvZHJpdmVycy9uZmMvcG41NDQuYwppbmRleCBiYWU2NDcyLi43MjRmNjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9wbjU0NC5jCisrKyBiL2RyaXZlcnMvbmZjL3BuNTQ0LmMKQEAgLTYwLDcgKzYwLDcgQEAKIHN0cnVjdCBwbjU0NF9pbmZvIHsKIAlzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2OwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfZGV2OwotCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHJlZ3NbMl07CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgcmVnc1szXTsKIAogCWVudW0gcG41NDRfc3RhdGUgc3RhdGU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF93YWl0OwpAQCAtNzQsNiArNzQsNyBAQAogCiBzdGF0aWMgY29uc3QgY2hhciByZWdfdmRkX2lvW10JPSAiVmRkX0lPIjsKIHN0YXRpYyBjb25zdCBjaGFyIHJlZ192YmF0W10JPSAiVkJhdCI7CitzdGF0aWMgY29uc3QgY2hhciByZWdfdnNpbVtdCT0gIlZTaW0iOwogCiAvKiBzeXNmcyBpbnRlcmZhY2UgKi8KIHN0YXRpYyBzc2l6ZV90IHBuNTQ0X3Rlc3Qoc3RydWN0IGRldmljZSAqZGV2LApAQCAtNzQwLDYgKzc0MSw3IEBACiAKIAlpbmZvLT5yZWdzWzBdLnN1cHBseSA9IHJlZ192ZGRfaW87CiAJaW5mby0+cmVnc1sxXS5zdXBwbHkgPSByZWdfdmJhdDsKKwlpbmZvLT5yZWdzWzJdLnN1cHBseSA9IHJlZ192c2ltOwogCXIgPSByZWd1bGF0b3JfYnVsa19nZXQoJmNsaWVudC0+ZGV2LCBBUlJBWV9TSVpFKGluZm8tPnJlZ3MpLAogCQkJCSBpbmZvLT5yZWdzKTsKIAlpZiAociA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL3BkdC5jIGIvZHJpdmVycy9vZi9wZHQuYwppbmRleCAyODI5NWQwLi40ZDg3YjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL3BkdC5jCisrKyBiL2RyaXZlcnMvb2YvcGR0LmMKQEAgLTM2LDE5ICszNiw1NSBAQAogCShwKS0+dW5pcXVlX2lkID0gb2ZfcGR0X3VuaXF1ZV9pZCsrOyBcCiB9IHdoaWxlICgwKQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKm9mX3BkdF9ub2RlX25hbWUoc3RydWN0IGRldmljZV9ub2RlICpkcCkKK3N0YXRpYyBjaGFyICogX19pbml0IG9mX3BkdF9idWlsZF9mdWxsX25hbWUoc3RydWN0IGRldmljZV9ub2RlICpkcCkKIHsKLQlyZXR1cm4gZHAtPnBhdGhfY29tcG9uZW50X25hbWU7CisJaW50IGxlbiwgb3VybGVuLCBwbGVuOworCWNoYXIgKm47CisKKwlkcC0+cGF0aF9jb21wb25lbnRfbmFtZSA9IGJ1aWxkX3BhdGhfY29tcG9uZW50KGRwKTsKKworCXBsZW4gPSBzdHJsZW4oZHAtPnBhcmVudC0+ZnVsbF9uYW1lKTsKKwlvdXJsZW4gPSBzdHJsZW4oZHAtPnBhdGhfY29tcG9uZW50X25hbWUpOworCWxlbiA9IG91cmxlbiArIHBsZW4gKyAyOworCisJbiA9IHByb21fZWFybHlfYWxsb2MobGVuKTsKKwlzdHJjcHkobiwgZHAtPnBhcmVudC0+ZnVsbF9uYW1lKTsKKwlpZiAoIW9mX25vZGVfaXNfcm9vdChkcC0+cGFyZW50KSkgeworCQlzdHJjcHkobiArIHBsZW4sICIvIik7CisJCXBsZW4rKzsKKwl9CisJc3RyY3B5KG4gKyBwbGVuLCBkcC0+cGF0aF9jb21wb25lbnRfbmFtZSk7CisKKwlyZXR1cm4gbjsKIH0KIAotI2Vsc2UKKyNlbHNlIC8qIENPTkZJR19TUEFSQyAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgb2ZfcGR0X2luY3JfdW5pcXVlX2lkKHZvaWQgKnApIHsgfQogc3RhdGljIGlubGluZSB2b2lkIGlycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApIHsgfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKm9mX3BkdF9ub2RlX25hbWUoc3RydWN0IGRldmljZV9ub2RlICpkcCkKK3N0YXRpYyBjaGFyICogX19pbml0IG9mX3BkdF9idWlsZF9mdWxsX25hbWUoc3RydWN0IGRldmljZV9ub2RlICpkcCkKIHsKLQlyZXR1cm4gZHAtPm5hbWU7CisJc3RhdGljIGludCBmYWlsc2FmZV9pZCA9IDA7IC8qIGZvciBnZW5lcmF0aW5nIHVuaXF1ZSBuYW1lcyBvbiBmYWlsdXJlICovCisJY2hhciAqYnVmOworCWludCBsZW47CisKKwlpZiAob2ZfcGR0X3Byb21fb3BzLT5wa2cycGF0aChkcC0+cGhhbmRsZSwgTlVMTCwgMCwgJmxlbikpCisJCWdvdG8gZmFpbHNhZmU7CisKKwlidWYgPSBwcm9tX2Vhcmx5X2FsbG9jKGxlbiArIDEpOworCWlmIChvZl9wZHRfcHJvbV9vcHMtPnBrZzJwYXRoKGRwLT5waGFuZGxlLCBidWYsIGxlbiwgJmxlbikpCisJCWdvdG8gZmFpbHNhZmU7CisJcmV0dXJuIGJ1ZjsKKworIGZhaWxzYWZlOgorCWJ1ZiA9IHByb21fZWFybHlfYWxsb2Moc3RybGVuKGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSkgKworCQkJICAgICAgIHN0cmxlbihkcC0+bmFtZSkgKyAxNik7CisJc3ByaW50ZihidWYsICIlcy8lc0B1bmtub3duJWkiLAorCQlvZl9ub2RlX2lzX3Jvb3QoZHAtPnBhcmVudCkgPyAiIiA6IGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSwKKwkJZHAtPm5hbWUsIGZhaWxzYWZlX2lkKyspOworCXByX2VycigiJXM6IHBrZzJwYXRoIGZhaWxlZDsgYXNzaWduaW5nICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKKwlyZXR1cm4gYnVmOwogfQogCiAjZW5kaWYgLyogIUNPTkZJR19TUEFSQyAqLwpAQCAtMTMyLDQ3ICsxNjgsNiBAQAogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyBjaGFyICogX19pbml0IG9mX3BkdF90cnlfcGtnMnBhdGgocGhhbmRsZSBub2RlKQotewotCWNoYXIgKnJlcywgKmJ1ZiA9IE5VTEw7Ci0JaW50IGxlbjsKLQotCWlmICghb2ZfcGR0X3Byb21fb3BzLT5wa2cycGF0aCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAob2ZfcGR0X3Byb21fb3BzLT5wa2cycGF0aChub2RlLCBidWYsIDAsICZsZW4pKQotCQlyZXR1cm4gTlVMTDsKLQlidWYgPSBwcm9tX2Vhcmx5X2FsbG9jKGxlbiArIDEpOwotCWlmIChvZl9wZHRfcHJvbV9vcHMtPnBrZzJwYXRoKG5vZGUsIGJ1ZiwgbGVuLCAmbGVuKSkgewotCQlwcl9lcnIoIiVzOiBwYWNrYWdlLXRvLXBhdGggZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJlcyA9IHN0cnJjaHIoYnVmLCAnLycpOwotCWlmICghcmVzKSB7Ci0JCXByX2VycigiJXM6IGNvdWxkbid0IGZpbmQgLyBpbiAlc1xuIiwgX19mdW5jX18sIGJ1Zik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gcmVzKzE7Ci19Ci0KLS8qCi0gKiBXaGVuIGZldGNoaW5nIHRoZSBub2RlJ3MgbmFtZSwgZmlyc3QgdHJ5IHVzaW5nIHBhY2thZ2UtdG8tcGF0aDsgaWYKLSAqIHRoYXQgZmFpbHMgKGVpdGhlciBiZWNhdXNlIHRoZSBhcmNoIGhhc24ndCBzdXBwbGllZCBhIFBST00gY2FsbGJhY2ssCi0gKiBvciBzb21lIG90aGVyIHJhbmRvbSBmYWlsdXJlKSwgZmFsbCBiYWNrIHRvIGp1c3QgbG9va2luZyBhdCB0aGUgbm9kZSdzCi0gKiAnbmFtZScgcHJvcGVydHkuCi0gKi8KLXN0YXRpYyBjaGFyICogX19pbml0IG9mX3BkdF9idWlsZF9uYW1lKHBoYW5kbGUgbm9kZSkKLXsKLQljaGFyICpidWY7Ci0KLQlidWYgPSBvZl9wZHRfdHJ5X3BrZzJwYXRoKG5vZGUpOwotCWlmICghYnVmKQotCQlidWYgPSBvZl9wZHRfZ2V0X29uZV9wcm9wZXJ0eShub2RlLCAibmFtZSIpOwotCi0JcmV0dXJuIGJ1ZjsKLX0KLQogc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqIF9faW5pdCBvZl9wZHRfY3JlYXRlX25vZGUocGhhbmRsZSBub2RlLAogCQkJCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50KQogewpAQCAtMTg3LDcgKzE4Miw3IEBACiAKIAlrcmVmX2luaXQoJmRwLT5rcmVmKTsKIAotCWRwLT5uYW1lID0gb2ZfcGR0X2J1aWxkX25hbWUobm9kZSk7CisJZHAtPm5hbWUgPSBvZl9wZHRfZ2V0X29uZV9wcm9wZXJ0eShub2RlLCAibmFtZSIpOwogCWRwLT50eXBlID0gb2ZfcGR0X2dldF9vbmVfcHJvcGVydHkobm9kZSwgImRldmljZV90eXBlIik7CiAJZHAtPnBoYW5kbGUgPSBub2RlOwogCkBAIC0xOTgsMjYgKzE5Myw2IEBACiAJcmV0dXJuIGRwOwogfQogCi1zdGF0aWMgY2hhciAqIF9faW5pdCBvZl9wZHRfYnVpbGRfZnVsbF9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCi17Ci0JaW50IGxlbiwgb3VybGVuLCBwbGVuOwotCWNoYXIgKm47Ci0KLQlwbGVuID0gc3RybGVuKGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSk7Ci0Jb3VybGVuID0gc3RybGVuKG9mX3BkdF9ub2RlX25hbWUoZHApKTsKLQlsZW4gPSBvdXJsZW4gKyBwbGVuICsgMjsKLQotCW4gPSBwcm9tX2Vhcmx5X2FsbG9jKGxlbik7Ci0Jc3RyY3B5KG4sIGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSk7Ci0JaWYgKCFvZl9ub2RlX2lzX3Jvb3QoZHAtPnBhcmVudCkpIHsKLQkJc3RyY3B5KG4gKyBwbGVuLCAiLyIpOwotCQlwbGVuKys7Ci0JfQotCXN0cmNweShuICsgcGxlbiwgb2ZfcGR0X25vZGVfbmFtZShkcCkpOwotCi0JcmV0dXJuIG47Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBfX2luaXQgb2ZfcGR0X2J1aWxkX3RyZWUoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsCiAJCQkJCQkgICBwaGFuZGxlIG5vZGUsCiAJCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKioqbmV4dHApCkBAIC0yNDAsOSArMjE1LDYgQEAKIAkJKigqbmV4dHApID0gZHA7CiAJCSpuZXh0cCA9ICZkcC0+YWxsbmV4dDsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQQVJDKQotCQlkcC0+cGF0aF9jb21wb25lbnRfbmFtZSA9IGJ1aWxkX3BhdGhfY29tcG9uZW50KGRwKTsKLSNlbmRpZgogCQlkcC0+ZnVsbF9uYW1lID0gb2ZfcGR0X2J1aWxkX2Z1bGxfbmFtZShkcCk7CiAKIAkJZHAtPmNoaWxkID0gb2ZfcGR0X2J1aWxkX3RyZWUoZHAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYyBiL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCmluZGV4IGEyZDlkMWUuLmE4NDhlMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCkBAIC02NzgsNyArNjc4LDcgQEAKIAogCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlbid0IGxlZnQgYW55IHBvaW50ZXJzIGFyb3VuZCBpbiB0aGUgd2FpdAogCSAqIGxpc3QuICovCi0Jc3Bpbl9sb2NrICgmcG9ydC0+d2FpdGxpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+d2FpdGxpc3RfbG9jayk7CiAJaWYgKGRldi0+d2FpdHByZXYgfHwgZGV2LT53YWl0bmV4dCB8fCBwb3J0LT53YWl0aGVhZCA9PSBkZXYpIHsKIAkJaWYgKGRldi0+d2FpdHByZXYpCiAJCQlkZXYtPndhaXRwcmV2LT53YWl0bmV4dCA9IGRldi0+d2FpdG5leHQ7CkBAIC02ODksNyArNjg5LDcgQEAKIAkJZWxzZQogCQkJcG9ydC0+d2FpdHRhaWwgPSBkZXYtPndhaXRwcmV2OwogCX0KLQlzcGluX3VubG9jayAoJnBvcnQtPndhaXRsaXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+d2FpdGxpc3RfbG9jayk7CiAKIAlrZnJlZShkZXYtPnN0YXRlKTsKIAlrZnJlZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwppbmRleCA4ZWNhYWM5Li5lYTI1ZTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJwY2kuaCIKQEAgLTM2OCw3ICszNjksNyBAQAogCXU4ICpkYXRhID0gKHU4KikgYnVmOwogCiAJLyogU2V2ZXJhbCBjaGlwcyBsb2NrIHVwIHRyeWluZyB0byByZWFkIHVuZGVmaW5lZCBjb25maWcgc3BhY2UgKi8KLQlpZiAoY2FwX3JhaXNlZChmaWxwLT5mX2NyZWQtPmNhcF9lZmZlY3RpdmUsIENBUF9TWVNfQURNSU4pKSB7CisJaWYgKHNlY3VyaXR5X2NhcGFibGUoZmlscC0+Zl9jcmVkLCBDQVBfU1lTX0FETUlOKSA9PSAwKSB7CiAJCXNpemUgPSBkZXYtPmNmZ19zaXplOwogCX0gZWxzZSBpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykgewogCQlzaXplID0gMTI4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwppbmRleCAwYmRkYTViMy4uNDJmYmYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKQEAgLTUxOCw2ICs1MTgsOCBAQAogCQlmbGFncyB8PSBDT05GX0VOQUJMRV9JT0NBUkQ7CiAJaWYgKGZsYWdzICYgQ09ORl9FTkFCTEVfSU9DQVJEKQogCQlzLT5zb2NrZXQuZmxhZ3MgfD0gU1NfSU9DQVJEOworCWlmIChmbGFncyAmIENPTkZfRU5BQkxFX1pWQ0FSRCkKKwkJcy0+c29ja2V0LmZsYWdzIHw9IFNTX1pWQ0FSRCB8IFNTX0lPQ0FSRDsKIAlpZiAoZmxhZ3MgJiBDT05GX0VOQUJMRV9TUEtSKSB7CiAJCXMtPnNvY2tldC5mbGFncyB8PSBTU19TUEtSX0VOQTsKIAkJc3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCAzNzU1ZTdjLi4yYzU0MDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit2b2lkIHB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuaCBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmgKaW5kZXggYmI2MmVhOC4uYjYwOWI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5oCkBAIC0xLDMgKzEsNCBAQAogaW50IHB4YTJ4eF9kcnZfcGNtY2lhX2FkZF9vbmUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpOwogdm9pZCBweGEyeHhfZHJ2X3BjbWNpYV9vcHMoc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcyk7Cit2b2lkIHB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY29saWJyaS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NvbGlicmkuYwppbmRleCBjM2Y3MjE5Li5hNTIwMzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY29saWJyaS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jb2xpYnJpLmMKQEAgLTE4MSw2ICsxODEsOSBAQAogewogCWludCByZXQ7CiAKKwlpZiAoIW1hY2hpbmVfaXNfY29saWJyaSgpICYmICFtYWNoaW5lX2lzX2NvbGlicmkzMjAoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAljb2xpYnJpX3BjbWNpYV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInB4YTJ4eC1wY21jaWEiLCAtMSk7CiAJaWYgKCFjb2xpYnJpX3BjbWNpYV9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMKaW5kZXggYjlmOGM4Zi4uMjVhZmU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbHViYm9jay5jCkBAIC0yMjYsNiArMjI2LDcgQEAKIAkJbHViYm9ja19zZXRfbWlzY193cigoMSA8PCAxNSkgfCAoMSA8PCAxNCksIDApOwogCiAJCXB4YTJ4eF9kcnZfcGNtY2lhX29wcygmbHViYm9ja19wY21jaWFfb3BzKTsKKwkJcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKCZzYWRldi0+ZGV2KTsKIAkJcmV0ID0gc2ExMTExX3BjbWNpYV9hZGQoc2FkZXYsICZsdWJib2NrX3BjbWNpYV9vcHMsCiAJCQkJcHhhMnh4X2Rydl9wY21jaWFfYWRkX29uZSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKaW5kZXggZDE2M2JjMi4uYTU5YWY1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCkBAIC0yMjcsNyArMjI3LDcgQEAKIGNvbmZpZyBJREVBUEFEX0xBUFRPUAogCXRyaXN0YXRlICJMZW5vdm8gSWRlYVBhZCBMYXB0b3AgRXh0cmFzIgogCWRlcGVuZHMgb24gQUNQSQotCWRlcGVuZHMgb24gUkZLSUxMCisJZGVwZW5kcyBvbiBSRktJTEwgJiYgSU5QVVQKIAlzZWxlY3QgSU5QVVRfU1BBUlNFS01BUAogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSByZmtpbGwgc3dpdGNoZXMgb24gTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwppbmRleCBjNWM0YjhjLi4zOGIzNGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKQEAgLTg0LDcgKzg0LDcgQEAKICAqLwogI2RlZmluZSBBTVcwX0dVSUQxCQkiNjdDMzM3MUQtOTVBMy00QzM3LUJCNjEtREQ0N0I0OTFEQUFCIgogI2RlZmluZSBBTVcwX0dVSUQyCQkiNDMxRjE2RUQtMEMyQi00NDRDLUIyNjctMjdERUIxNDBDRjlDIgotI2RlZmluZSBXTUlEX0dVSUQxCQkiNkFGNEYyNTgtQjQwMS00MmZkLUJFOTEtM0Q0QUMyRDdDMEQzIgorI2RlZmluZSBXTUlEX0dVSUQxCQkiNkFGNEYyNTgtQjQwMS00MkZELUJFOTEtM0Q0QUMyRDdDMEQzIgogI2RlZmluZSBXTUlEX0dVSUQyCQkiOTU3NjRFMDktRkI1Ni00ZTgzLUIzMUEtMzc3NjFGNjA5OTRBIgogI2RlZmluZSBXTUlEX0dVSUQzCQkiNjFFRjY5RUEtODY1Qy00QkMzLUE1MDItQTBERUJBMENCNTMxIgogCkBAIC0xMjgwLDcgKzEyODAsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIERFVklDRV9BVFRSKHRocmVlZywgU19JV1VHTyB8IFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2Jvb2xfdGhyZWVnLAorc3RhdGljIERFVklDRV9BVFRSKHRocmVlZywgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYm9vbF90aHJlZWcsCiAJc2V0X2Jvb2xfdGhyZWVnKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKaW5kZXggNDYzM2ZkOC4uZmU0OTU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKQEAgLTEwODEsMTQgKzEwODEsOCBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKIAltb2RlX3QgbW9kZTsKIAotCS8qCi0JICogSWYgcGFyYW1ldGVyIHVpZCBvciBnaWQgaXMgbm90IGNoYW5nZWQsIGtlZXAgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IKLQkgKiBvdXIgcHJvYyBlbnRyaWVzICgtcnctcnctcnctKSBlbHNlLCBpdCBtZWFucyB3ZSBjYXJlIGFib3V0IHNlY3VyaXR5LAotCSAqIGFuZCB0aGVuIHNldCB0byAtcnctcnctLS0tCi0JICovCi0KIAlpZiAoKGFzdXNfdWlkID09IDApICYmIChhc3VzX2dpZCA9PSAwKSkgewotCQltb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVUdPOworCQltb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSIHwgU19JV0dSUDsKIAl9IGVsc2UgewogCQltb2RlID0gU19JRlJFRyB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JV1VTUiB8IFNfSVdHUlA7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgYXN1c191aWQgYW5kIGFzdXNfZ2lkIHBhcmFtZXRlcnMgYXJlICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCmluZGV4IDM0NjU3ZjkuLmFkMjRlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwpAQCAtMjkwLDkgKzI5MCwxMiBAQAogCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKIAogCS8qIElmIHRoZSBoYXJkd2FyZSBzd2l0Y2ggY29udHJvbHMgdGhpcyByYWRpbywgYW5kIHRoZSBoYXJkd2FyZQotCSAgIHN3aXRjaCBpcyBkaXNhYmxlZCwgZG9uJ3QgYWxsb3cgY2hhbmdpbmcgdGhlIHNvZnR3YXJlIHN0YXRlICovCisJICAgc3dpdGNoIGlzIGRpc2FibGVkLCBkb24ndCBhbGxvdyBjaGFuZ2luZyB0aGUgc29mdHdhcmUgc3RhdGUuCisJICAgSWYgdGhlIGhhcmR3YXJlIHN3aXRjaCBpcyByZXBvcnRlZCBhcyBub3Qgc3VwcG9ydGVkLCBhbHdheXMKKwkgICBmaXJlIHRoZSBTTUkgdG8gdG9nZ2xlIHRoZSBraWxsc3dpdGNoLiAqLwogCWlmICgoaHdzd2l0Y2hfc3RhdGUgJiBCSVQoaHdzd2l0Y2hfYml0KSkgJiYKLQkgICAgIShidWZmZXItPm91dHB1dFsxXSAmIEJJVCgxNikpKSB7CisJICAgICEoYnVmZmVyLT5vdXRwdXRbMV0gJiBCSVQoMTYpKSAmJgorCSAgICAoYnVmZmVyLT5vdXRwdXRbMV0gJiBCSVQoMCkpKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTM5OCw2ICs0MDEsMjMgQEAKIAogc3RhdGljIHZvaWQgZGVsbF91cGRhdGVfcmZraWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKIHsKKwlpbnQgc3RhdHVzOworCisJZ2V0X2J1ZmZlcigpOworCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKKwlzdGF0dXMgPSBidWZmZXItPm91dHB1dFsxXTsKKwlyZWxlYXNlX2J1ZmZlcigpOworCisJLyogaWYgaGFyZHdhcmUgcmZraWxsIGlzIG5vdCBzdXBwb3J0ZWQsIHNldCBpdCBleHBsaWNpdGx5ICovCisJaWYgKCEoc3RhdHVzICYgQklUKDApKSkgeworCQlpZiAod2lmaV9yZmtpbGwpCisJCQlkZWxsX3Jma2lsbF9zZXQoKHZvaWQgKikxLCAhKChzdGF0dXMgJiBCSVQoMTcpKSA+PiAxNykpOworCQlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkKKwkJCWRlbGxfcmZraWxsX3NldCgodm9pZCAqKTIsICEoKHN0YXR1cyAmIEJJVCgxOCkpID4+IDE4KSk7CisJCWlmICh3d2FuX3Jma2lsbCkKKwkJCWRlbGxfcmZraWxsX3NldCgodm9pZCAqKTMsICEoKHN0YXR1cyAmIEJJVCgxOSkpID4+IDE5KSk7CisJfQorCiAJaWYgKHdpZmlfcmZraWxsKQogCQlkZWxsX3Jma2lsbF9xdWVyeSh3aWZpX3Jma2lsbCwgKHZvaWQgKikxKTsKIAlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3BtaWNfZ3Bpby5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKaW5kZXggOTMwZTYyNy4uNjE0MzNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKQEAgLTYwLDY5ICs2MCwyMCBAQAogI2RlZmluZSBHUE9TV19ET1UgMHgwOAogI2RlZmluZSBHUE9TV19SRFJWIDB4MzAKIAorI2RlZmluZSBHUElPX1VQREFURV9UWVBFCTB4ODAwMDAwMDAKIAogI2RlZmluZSBOVU1fR1BJTyAyNAogCi1zdHJ1Y3QgcG1pY19ncGlvX2lycSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXUzMiB0cmlnZ2VyW05VTV9HUElPXTsKLQl1MzIgZGlydHk7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci19OwotCi0KIHN0cnVjdCBwbWljX2dwaW8geworCXN0cnVjdCBtdXRleAkJYnVzbG9jazsKIAlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7Ci0Jc3RydWN0IHBtaWNfZ3Bpb19pcnEJaXJxdHlwZXM7CiAJdm9pZAkJCSpncGlvaW50cjsKIAlpbnQJCQlpcnE7CiAJdW5zaWduZWQJCWlycV9iYXNlOworCXVuc2lnbmVkIGludAkJdXBkYXRlX3R5cGU7CisJdTMyCQkJdHJpZ2dlcl90eXBlOwogfTsKIAotc3RhdGljIHZvaWQgcG1pY19wcm9ncmFtX2lycXR5cGUoaW50IGdwaW8sIGludCB0eXBlKQotewotCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCi0JCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgyMCwgMHgyMCk7Ci0JZWxzZQotCQlpbnRlbF9zY3VfaXBjX3VwZGF0ZV9yZWdpc3RlcihHUElPMCArIGdwaW8sIDB4MDAsIDB4MjApOwotCi0JaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCi0JCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgxMCwgMHgxMCk7Ci0JZWxzZQotCQlpbnRlbF9zY3VfaXBjX3VwZGF0ZV9yZWdpc3RlcihHUElPMCArIGdwaW8sIDB4MDAsIDB4MTApOwotfTsKLQotc3RhdGljIHZvaWQgcG1pY19pcnF0eXBlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBwbWljX2dwaW9faXJxICp0ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwbWljX2dwaW9faXJxLCB3b3JrKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCXUxNiB0eXBlOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnQtPmxvY2ssIGZsYWdzKTsKLQkvKiBBcyB3ZSBkcm9wIHRoZSBsb2NrLCB3ZSBtYXkgbmVlZCBtdWx0aXBsZSBzY2FucyBpZiB3ZSByYWNlIHRoZQotCSAgIHBtaWNfaXJxX3R5cGUgZnVuY3Rpb24gKi8KLQl3aGlsZSAodC0+ZGlydHkpIHsKLQkJLyoKLQkJICoJRm9yIGVhY2ggcGluIHRoYXQgaGFzIHRoZSBkaXJ0eSBiaXQgc2V0IHNlbmQgYW4gSVBDCi0JCSAqCW1lc3NhZ2UgdG8gY29uZmlndXJlIHRoZSBoYXJkd2FyZSB2aWEgdGhlIFBNSUMKLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fR1BJTzsgaSsrKSB7Ci0JCQlpZiAoISh0LT5kaXJ0eSAmICgxIDw8IGkpKSkKLQkJCQljb250aW51ZTsKLQkJCXQtPmRpcnR5ICY9IH4oMSA8PCBpKTsKLQkJCS8qIFdlIGNhbid0IHRydXN0IHRoZSBhcnJheSBlbnRyeSBvciBkaXJ0eQotCQkJICAgb25jZSB0aGUgbG9jayBpcyBkcm9wcGVkICovCi0JCQl0eXBlID0gdC0+dHJpZ2dlcltpXTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPmxvY2ssIGZsYWdzKTsKLQkJCXBtaWNfcHJvZ3JhbV9pcnF0eXBlKGksIHR5cGUpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnQtPmxvY2ssIGZsYWdzKTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0LT5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyBpbnQgcG1pY19ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJaWYgKG9mZnNldCA+IDgpIHsKQEAgLTE5MCwyNSArMTQxLDI0IEBACiAJCQkxIDw8IChvZmZzZXQgLSAxNikpOwogfQogCi1zdGF0aWMgaW50IHBtaWNfaXJxX3R5cGUodW5zaWduZWQgaXJxLCB1bnNpZ25lZCB0eXBlKQorLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gZ2VuaXJxIHdpdGggcGctPmJ1c2xvY2sgbG9ja2VkIGFuZAorICogaXJxX2Rlc2MtPmxvY2sgaGVsZC4gV2UgY2FuIG5vdCBhY2Nlc3MgdGhlIHNjdSBidXMgaGVyZSwgc28gd2UKKyAqIHN0b3JlIHRoZSBjaGFuZ2UgYW5kIHVwZGF0ZSBpbiB0aGUgYnVzX3N5bmNfdW5sb2NrKCkgZnVuY3Rpb24gYmVsb3cKKyAqLworc3RhdGljIGludCBwbWljX2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgdW5zaWduZWQgdHlwZSkKIHsKLQlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JdTMyIGdwaW8gPSBpcnEgLSBwZy0+aXJxX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCXUzMiBncGlvID0gZGF0YS0+aXJxIC0gcGctPmlycV9iYXNlOwogCiAJaWYgKGdwaW8gPj0gcGctPmNoaXAubmdwaW8pCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBnLT5pcnF0eXBlcy5sb2NrLCBmbGFncyk7Ci0JcGctPmlycXR5cGVzLnRyaWdnZXJbZ3Bpb10gPSB0eXBlOwotCXBnLT5pcnF0eXBlcy5kaXJ0eSB8PSAgKDEgPDwgZ3Bpbyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGctPmlycXR5cGVzLmxvY2ssIGZsYWdzKTsKLQlzY2hlZHVsZV93b3JrKCZwZy0+aXJxdHlwZXMud29yayk7CisJcGctPnRyaWdnZXJfdHlwZSA9IHR5cGU7CisJcGctPnVwZGF0ZV90eXBlID0gZ3BpbyB8IEdQSU9fVVBEQVRFX1RZUEU7CiAJcmV0dXJuIDA7CiB9CiAKLQotCiBzdGF0aWMgaW50IHBtaWNfZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewogCXN0cnVjdCBwbWljX2dwaW8gKnBnID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbWljX2dwaW8sIGNoaXApOwpAQCAtMjE3LDM4ICsxNjcsMzIgQEAKIH0KIAogLyogdGhlIGdwaW9pbnRyIHJlZ2lzdGVyIGlzIHJlYWQtY2xlYXIsIHNvIGp1c3QgZG8gbm90aGluZy4gKi8KLXN0YXRpYyB2b2lkIHBtaWNfaXJxX3VubWFzayh1bnNpZ25lZCBpcnEpCi17Ci19Oworc3RhdGljIHZvaWQgcG1pY19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkgeyB9CiAKLXN0YXRpYyB2b2lkIHBtaWNfaXJxX21hc2sodW5zaWduZWQgaXJxKQotewotfTsKK3N0YXRpYyB2b2lkIHBtaWNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKSB7IH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwbWljX2lycWNoaXAgPSB7CiAJLm5hbWUJCT0gIlBNSUMtR1BJTyIsCi0JLm1hc2sJCT0gcG1pY19pcnFfbWFzaywKLQkudW5tYXNrCQk9IHBtaWNfaXJxX3VubWFzaywKLQkuc2V0X3R5cGUJPSBwbWljX2lycV90eXBlLAorCS5pcnFfbWFzawk9IHBtaWNfaXJxX21hc2ssCisJLmlycV91bm1hc2sJPSBwbWljX2lycV91bm1hc2ssCisJLmlycV9zZXRfdHlwZQk9IHBtaWNfaXJxX3R5cGUsCiB9OwogCi1zdGF0aWMgdm9pZCBwbWljX2lycV9oYW5kbGVyKHVuc2lnbmVkIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQorc3RhdGljIGlycXJldHVybl90IHBtaWNfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IChzdHJ1Y3QgcG1pY19ncGlvICopZ2V0X2lycV9kYXRhKGlycSk7CisJc3RydWN0IHBtaWNfZ3BpbyAqcGcgPSBkYXRhOwogCXU4IGludHN0cyA9ICooKHU4ICopcGctPmdwaW9pbnRyICsgNCk7CiAJaW50IGdwaW87CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CiAKIAlmb3IgKGdwaW8gPSAwOyBncGlvIDwgODsgZ3BpbysrKSB7CiAJCWlmIChpbnRzdHMgJiAoMSA8PCBncGlvKSkgewogCQkJcHJfZGVidWcoInBtaWMgcGluICVkIHRyaWdnZXJlZFxuIiwgZ3Bpbyk7CiAJCQlnZW5lcmljX2hhbmRsZV9pcnEocGctPmlycV9iYXNlICsgZ3Bpbyk7CisJCQlyZXQgPSBJUlFfSEFORExFRDsKIAkJfQogCX0KLQotCWlmIChkZXNjLT5jaGlwLT5pcnFfZW9pKQotCQlkZXNjLT5jaGlwLT5pcnFfZW9pKGlycV9nZXRfaXJxX2RhdGEoaXJxKSk7Ci0JZWxzZQotCQlkZXZfd2FybihwZy0+Y2hpcC5kZXYsICJtaXNzaW5nIEVPSSBoYW5kbGVyIGZvciBpcnEgJWRcbiIsIGlycSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgcGxhdGZvcm1fcG1pY19ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0yOTcsOCArMjQxLDcgQEAKIAlwZy0+Y2hpcC5jYW5fc2xlZXAgPSAxOwogCXBnLT5jaGlwLmRldiA9IGRldjsKIAotCUlOSVRfV09SSygmcGctPmlycXR5cGVzLndvcmssIHBtaWNfaXJxdHlwZV93b3JrKTsKLQlzcGluX2xvY2tfaW5pdCgmcGctPmlycXR5cGVzLmxvY2spOworCW11dGV4X2luaXQoJnBnLT5idXNsb2NrKTsKIAogCXBnLT5jaGlwLmRldiA9IGRldjsKIAlyZXR2YWwgPSBncGlvY2hpcF9hZGQoJnBnLT5jaGlwKTsKQEAgLTMwNiw4ICsyNDksMTMgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuIG5vdCBhZGQgcG1pYyBncGlvIGNoaXAuXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyOwogCX0KLQlzZXRfaXJxX2RhdGEocGctPmlycSwgcGcpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHBnLT5pcnEsIHBtaWNfaXJxX2hhbmRsZXIpOworCisJcmV0dmFsID0gcmVxdWVzdF9pcnEocGctPmlycSwgcG1pY19pcnFfaGFuZGxlciwgMCwgInBtaWMiLCBwZyk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbWljOiBJbnRlcnJ1cHQgcmVxdWVzdCBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGkgKyBwZy0+aXJxX2Jhc2UsICZwbWljX2lycWNoaXAsCiAJCQkJCWhhbmRsZV9zaW1wbGVfaXJxLCAiZGVtdXgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYwppbmRleCAxNzUyZWYwLi5hOTFkNTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9zY3VfaXBjLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwYy5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2ZpLmg+CiAjaW5jbHVkZSA8YXNtL21yc3QuaD4KICNpbmNsdWRlIDxhc20vaW50ZWxfc2N1X2lwYy5oPgotI2luY2x1ZGUgPGFzbS9tcnN0Lmg+CiAKIC8qIElQQyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSB0eXBlcyAqLwogI2RlZmluZSBJUENNU0dfV0FUQ0hET0dfVElNRVIgMHhGOCAvKiBTZXQgS2VybmVsIFdhdGNoZG9nIFRocmVzaG9sZCAqLwpAQCAtMTYxLDcgKzE2MCw3IEBACiB7CiAJaW50IGksIG5jLCBieXRlcywgZDsKIAl1MzIgb2Zmc2V0ID0gMDsKLQl1MzIgZXJyID0gMDsKKwlpbnQgZXJyOwogCXU4IGNidWZbSVBDX1dXQlVGX1NJWkVdID0geyB9OwogCXUzMiAqd2J1ZiA9ICh1MzIgKikmY2J1ZjsKIApAQCAtNDA0LDcgKzQwMyw3IEBACiAgKi8KIGludCBpbnRlbF9zY3VfaXBjX3NpbXBsZV9jb21tYW5kKGludCBjbWQsIGludCBzdWIpCiB7Ci0JdTMyIGVyciA9IDA7CisJaW50IGVycjsKIAogCW11dGV4X2xvY2soJmlwY2xvY2spOwogCWlmIChpcGNkZXYucGRldiA9PSBOVUxMKSB7CkBAIC00MzQsOCArNDMzLDcgQEAKIGludCBpbnRlbF9zY3VfaXBjX2NvbW1hbmQoaW50IGNtZCwgaW50IHN1YiwgdTMyICppbiwgaW50IGlubGVuLAogCQkJCQkJCXUzMiAqb3V0LCBpbnQgb3V0bGVuKQogewotCXUzMiBlcnIgPSAwOwotCWludCBpID0gMDsKKwlpbnQgaSwgZXJyOwogCiAJbXV0ZXhfbG9jaygmaXBjbG9jayk7CiAJaWYgKGlwY2Rldi5wZGV2ID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGN1dGlsLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9zY3VfaXBjdXRpbC5jCmluZGV4IGJhMzIzMWQuLmI5M2EwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGN1dGlsLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwY3V0aWwuYwpAQCAtMTI4LDYgKzEyOCw2IEBACiBtb2R1bGVfaW5pdChpcGNfbW9kdWxlX2luaXQpOwogbW9kdWxlX2V4aXQoaXBjX21vZHVsZV9leGl0KTsKIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCBWMiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJVdGlsaXR5IGRyaXZlciBmb3IgaW50ZWwgc2N1IGlwYyIpOwogTU9EVUxFX0FVVEhPUigiU3JlZWRoYXJhIDxzcmVlZGhhcmEuZHNAaW50ZWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jCmluZGV4IDFmZTBmMWYuLjg2NWVmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RjMTEwMC13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90YzExMDAtd21pLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7IFwKIAlyZXR1cm4gY291bnQ7IFwKIH0gXAotc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTyB8IFNfSVdVU1IsIFwKK3N0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JUlVHTyB8IFNfSVdVU1IsIFwKIAlzaG93X2Jvb2xfIyN2YWx1ZSwgc2V0X2Jvb2xfIyN2YWx1ZSk7CiAKIHNob3dfc2V0X2Jvb2wod2lyZWxlc3MsIFRDMTEwMF9JTlNUQU5DRV9XSVJFTEVTUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggZGQ1OTk1OC4uZWI5OTIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtMjI3NSwxNiArMjI3NSwxMiBAQAogCWlmIChrZXljb2RlICE9IEtFWV9SRVNFUlZFRCkgewogCQltdXRleF9sb2NrKCZ0cGFjcGlfaW5wdXRkZXZfc2VuZF9tdXRleCk7CiAKKwkJaW5wdXRfZXZlbnQodHBhY3BpX2lucHV0ZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBzY2FuY29kZSk7CiAJCWlucHV0X3JlcG9ydF9rZXkodHBhY3BpX2lucHV0ZGV2LCBrZXljb2RlLCAxKTsKLQkJaWYgKGtleWNvZGUgPT0gS0VZX1VOS05PV04pCi0JCQlpbnB1dF9ldmVudCh0cGFjcGlfaW5wdXRkZXYsIEVWX01TQywgTVNDX1NDQU4sCi0JCQkJICAgIHNjYW5jb2RlKTsKIAkJaW5wdXRfc3luYyh0cGFjcGlfaW5wdXRkZXYpOwogCisJCWlucHV0X2V2ZW50KHRwYWNwaV9pbnB1dGRldiwgRVZfTVNDLCBNU0NfU0NBTiwgc2NhbmNvZGUpOwogCQlpbnB1dF9yZXBvcnRfa2V5KHRwYWNwaV9pbnB1dGRldiwga2V5Y29kZSwgMCk7Ci0JCWlmIChrZXljb2RlID09IEtFWV9VTktOT1dOKQotCQkJaW5wdXRfZXZlbnQodHBhY3BpX2lucHV0ZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLAotCQkJCSAgICBzY2FuY29kZSk7CiAJCWlucHV0X3N5bmModHBhY3BpX2lucHV0ZGV2KTsKIAogCQltdXRleF91bmxvY2soJnRwYWNwaV9pbnB1dGRldl9zZW5kX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzLWt0aW1lci5jIGIvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMta3RpbWVyLmMKaW5kZXggMjcyODQ2OS4uODI1ODNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMta3RpbWVyLmMKKysrIGIvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMta3RpbWVyLmMKQEAgLTQ2LDggKzQ2LDYgQEAKIAkvKiBGaXJzdCBvZiBhbGwgd2UgZ2V0IHRoZSB0aW1lIHN0YW1wLi4uICovCiAJcHBzX2dldF90cygmdHMpOwogCi0JZGV2X2luZm8ocHBzLT5kZXYsICJQUFMgZXZlbnQgYXQgJWx1XG4iLCBqaWZmaWVzKTsKLQogCXBwc19ldmVudChwcHMsICZ0cywgUFBTX0NBUFRVUkVBU1NFUlQsIE5VTEwpOwogCiAJbW9kX3RpbWVyKCZrdGltZXIsIGppZmZpZXMgKyBIWik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwc19wYXJwb3J0LmMgYi9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwc19wYXJwb3J0LmMKaW5kZXggMzIyMjFlZi4uYzU3MWQ2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMvY2xpZW50cy9wcHNfcGFycG9ydC5jCisrKyBiL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzX3BhcnBvcnQuYwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJfQogCiAJZGV2aWNlLT5wYXJkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCBLQlVJTERfTU9ETkFNRSwKLQkJCU5VTEwsIE5VTEwsIHBhcnBvcnRfaXJxLCAwLCBkZXZpY2UpOworCQkJTlVMTCwgTlVMTCwgcGFycG9ydF9pcnEsIFBBUlBPUlRfRkxBR19FWENMLCBkZXZpY2UpOwogCWlmICghZGV2aWNlLT5wYXJkZXYpIHsKIAkJcHJfZXJyKCJjb3VsZG4ndCByZWdpc3RlciB3aXRoICVzXG4iLCBwb3J0LT5uYW1lKTsKIAkJZ290byBlcnJfZnJlZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvS2NvbmZpZyBiL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvS2NvbmZpZwppbmRleCBmM2E3M2RkLi5lNGM0ZjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL0tjb25maWcKKysrIGIvZHJpdmVycy9wcHMvZ2VuZXJhdG9ycy9LY29uZmlnCkBAIC02LDcgKzYsNyBAQAogCiBjb25maWcgUFBTX0dFTkVSQVRPUl9QQVJQT1JUCiAJdHJpc3RhdGUgIlBhcmFsbGVsIHBvcnQgUFBTIHNpZ25hbCBnZW5lcmF0b3IiCi0JZGVwZW5kcyBvbiBQQVJQT1JUCisJZGVwZW5kcyBvbiBQQVJQT1JUICYmIEJST0tFTgogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBhIFBQUyBzaWduYWwgZ2VuZXJhdG9yIHdoaWNoCiAJICB1dGlsaXplcyBTVFJPQkUgcGluIG9mIGEgcGFyYWxsZWwgcG9ydCB0byBzZW5kIFBQUyBzaWduYWxzLiBJdCB1c2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL3Bwc19nZW5fcGFycG9ydC5jIGIvZHJpdmVycy9wcHMvZ2VuZXJhdG9ycy9wcHNfZ2VuX3BhcnBvcnQuYwppbmRleCA1YzMyZjhkLi5iOTNhZjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL3Bwc19nZW5fcGFycG9ydC5jCisrKyBiL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvcHBzX2dlbl9wYXJwb3J0LmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCX0KIAogCWRldmljZS5wYXJkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCBLQlVJTERfTU9ETkFNRSwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsIDAsICZkZXZpY2UpOworCQkJTlVMTCwgTlVMTCwgTlVMTCwgUEFSUE9SVF9GTEFHX0VYQ0wsICZkZXZpY2UpOwogCWlmICghZGV2aWNlLnBhcmRldikgewogCQlwcl9lcnIoImNvdWxkbid0IHJlZ2lzdGVyIHdpdGggJXNcbiIsIHBvcnQtPm5hbWUpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9rYXBpLmMgYi9kcml2ZXJzL3Bwcy9rYXBpLmMKaW5kZXggY2JhMWI0My4uYTRlOGViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMva2FwaS5jCisrKyBiL2RyaXZlcnMvcHBzL2thcGkuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY2FwdHVyZWQgPSAwOwotCXN0cnVjdCBwcHNfa3RpbWUgdHNfcmVhbDsKKwlzdHJ1Y3QgcHBzX2t0aW1lIHRzX3JlYWwgPSB7IC5zZWMgPSAwLCAubnNlYyA9IDAsIC5mbGFncyA9IDAgfTsKIAogCS8qIGNoZWNrIGV2ZW50IHR5cGUgKi8KIAlCVUdfT04oKGV2ZW50ICYgKFBQU19DQVBUVVJFQVNTRVJUIHwgUFBTX0NBUFRVUkVDTEVBUikpID09IDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3Jpby1zY2FuLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYwppbmRleCA0NjdlODJiLi5hNTAzOTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYworKysgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYwpAQCAtOTQzLDYgKzk0Myw4IEBACiAgKiBAcG9ydDogTWFzdGVyIHBvcnQgdG8gc2VuZCB0cmFuc2FjdGlvbnMKICAqIEBkZXN0aWQ6IEN1cnJlbnQgZGVzdGluYXRpb24gSUQgaW4gbmV0d29yawogICogQGhvcGNvdW50OiBOdW1iZXIgb2YgaG9wcyBpbnRvIHRoZSBuZXR3b3JrCisgKiBAcHJldjogcHJldmlvdXMgcmlvX2RldgorICogQHByZXZfcG9ydDogcHJldmlvdXMgcG9ydCBudW1iZXIKICAqCiAgKiBSZWN1cnNpdmVseSBkaXNjb3ZlcnMgYSBSSU8gbmV0d29yay4gIFRyYW5zYWN0aW9ucyBhcmUgc2VudCB2aWEgdGhlCiAgKiBtYXN0ZXIgcG9ydCBwYXNzZWQgaW4gQHBvcnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXN5c2ZzLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXN5c2ZzLmMKaW5kZXggNzZiNDE4NS4uMTI2OWZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3Jpby1zeXNmcy5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc3lzZnMuYwpAQCAtNzcsOSArNzcsOSBAQAogCiAJLyogU2V2ZXJhbCBjaGlwcyBsb2NrIHVwIHRyeWluZyB0byByZWFkIHVuZGVmaW5lZCBjb25maWcgc3BhY2UgKi8KIAlpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJc2l6ZSA9IDB4MjAwMDAwOworCQlzaXplID0gUklPX01BSU5UX1NQQUNFX1NaOwogCi0JaWYgKG9mZiA+IHNpemUpCisJaWYgKG9mZiA+PSBzaXplKQogCQlyZXR1cm4gMDsKIAlpZiAob2ZmICsgY291bnQgPiBzaXplKSB7CiAJCXNpemUgLT0gb2ZmOwpAQCAtMTQ3LDEwICsxNDcsMTAgQEAKIAlsb2ZmX3QgaW5pdF9vZmYgPSBvZmY7CiAJdTggKmRhdGEgPSAodTggKikgYnVmOwogCi0JaWYgKG9mZiA+IDB4MjAwMDAwKQorCWlmIChvZmYgPj0gUklPX01BSU5UX1NQQUNFX1NaKQogCQlyZXR1cm4gMDsKLQlpZiAob2ZmICsgY291bnQgPiAweDIwMDAwMCkgewotCQlzaXplID0gMHgyMDAwMDAgLSBvZmY7CisJaWYgKG9mZiArIGNvdW50ID4gUklPX01BSU5UX1NQQUNFX1NaKSB7CisJCXNpemUgPSBSSU9fTUFJTlRfU1BBQ0VfU1ogLSBvZmY7CiAJCWNvdW50ID0gc2l6ZTsKIAl9CiAKQEAgLTIwMCw3ICsyMDAsNyBAQAogCQkgLm5hbWUgPSAiY29uZmlnIiwKIAkJIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IsCiAJCSB9LAotCS5zaXplID0gMHgyMDAwMDAsCisJLnNpemUgPSBSSU9fTUFJTlRfU1BBQ0VfU1osCiAJLnJlYWQgPSByaW9fcmVhZF9jb25maWcsCiAJLndyaXRlID0gcmlvX3dyaXRlX2NvbmZpZywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzeHh4LXJlZ3VsYXRvci1jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzeHh4LXJlZ3VsYXRvci1jb3JlLmMKaW5kZXggZjUzZDMxYi4uMmJiNWRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWMxM3h4eC1yZWd1bGF0b3ItY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHgtcmVndWxhdG9yLWNvcmUuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAKIAlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZCB2YWw6ICVkXG4iLCBfX2Z1bmNfXywgaWQsIHZhbCk7CiAKLQlCVUdfT04odmFsIDwgMCB8fCB2YWwgPiBtYzEzeHh4X3JlZ3VsYXRvcnNbaWRdLmRlc2Mubl92b2x0YWdlcyk7CisJQlVHX09OKHZhbCA+IG1jMTN4eHhfcmVndWxhdG9yc1tpZF0uZGVzYy5uX3ZvbHRhZ2VzKTsKIAogCXJldHVybiBtYzEzeHh4X3JlZ3VsYXRvcnNbaWRdLnZvbHRhZ2VzW3ZhbF07CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtZGNkYy5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYwppbmRleCA4YjBkMmM0Li4wNmRmODk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtZGNkYy5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1kY2RjLmMKQEAgLTEyMCw2ICsxMjAsNyBAQAogCQlyZXR1cm4gUkVHVUxBVE9SX01PREVfSURMRTsKIAlkZWZhdWx0OgogCQlCVUcoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9jbGFzcy5jIGIvZHJpdmVycy9ydGMvY2xhc3MuYwppbmRleCA5NTgzY2JjLi5jNDA0YjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9jbGFzcy5jCisrKyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKQEAgLTE0Myw2ICsxNDMsNyBAQAogCXJ0Yy0+aWQgPSBpZDsKIAlydGMtPm9wcyA9IG9wczsKIAlydGMtPm93bmVyID0gb3duZXI7CisJcnRjLT5pcnFfZnJlcSA9IDE7CiAJcnRjLT5tYXhfdXNlcl9mcmVxID0gNjQ7CiAJcnRjLT5kZXYucGFyZW50ID0gZGV2OwogCXJ0Yy0+ZGV2LmNsYXNzID0gcnRjX2NsYXNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwppbmRleCA5MDM4NGI5Li5jYjJmMDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwpAQCAtMTYsNiArMTYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAorc3RhdGljIGludCBydGNfdGltZXJfZW5xdWV1ZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyICp0aW1lcik7CitzdGF0aWMgdm9pZCBydGNfdGltZXJfcmVtb3ZlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKTsKKwogc3RhdGljIGludCBfX3J0Y19yZWFkX3RpbWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlpbnQgZXJyOwpAQCAtMTIwLDEyICsxMjMsMTggQEAKIAllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnJ0Yy0+b3BzX2xvY2spOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JYWxhcm0tPmVuYWJsZWQgPSBydGMtPmFpZV90aW1lci5lbmFibGVkOwotCWlmIChhbGFybS0+ZW5hYmxlZCkKKwlpZiAocnRjLT5vcHMgPT0gTlVMTCkKKwkJZXJyID0gLUVOT0RFVjsKKwllbHNlIGlmICghcnRjLT5vcHMtPnJlYWRfYWxhcm0pCisJCWVyciA9IC1FSU5WQUw7CisJZWxzZSB7CisJCW1lbXNldChhbGFybSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfd2thbHJtKSk7CisJCWFsYXJtLT5lbmFibGVkID0gcnRjLT5haWVfdGltZXIuZW5hYmxlZDsKIAkJYWxhcm0tPnRpbWUgPSBydGNfa3RpbWVfdG9fdG0ocnRjLT5haWVfdGltZXIubm9kZS5leHBpcmVzKTsKKwl9CiAJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfcmVhZF9hbGFybSk7CiAKQEAgLTE3NSwxNiArMTg0LDE0IEBACiAJCXJldHVybiBlcnI7CiAJaWYgKHJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQpIHsKIAkJcnRjX3RpbWVyX3JlbW92ZShydGMsICZydGMtPmFpZV90aW1lcik7Ci0JCXJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgPSAwOwogCX0KIAlydGMtPmFpZV90aW1lci5ub2RlLmV4cGlyZXMgPSBydGNfdG1fdG9fa3RpbWUoYWxhcm0tPnRpbWUpOwogCXJ0Yy0+YWllX3RpbWVyLnBlcmlvZCA9IGt0aW1lX3NldCgwLCAwKTsKIAlpZiAoYWxhcm0tPmVuYWJsZWQpIHsKLQkJcnRjLT5haWVfdGltZXIuZW5hYmxlZCA9IDE7Ci0JCXJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgJnJ0Yy0+YWllX3RpbWVyKTsKKwkJZXJyID0gcnRjX3RpbWVyX2VucXVldWUocnRjLCAmcnRjLT5haWVfdGltZXIpOwogCX0KIAltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfc2V0X2FsYXJtKTsKIApAQCAtMTk1LDE2ICsyMDIsMTUgQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmIChydGMtPmFpZV90aW1lci5lbmFibGVkICE9IGVuYWJsZWQpIHsKLQkJaWYgKGVuYWJsZWQpIHsKLQkJCXJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgPSAxOwotCQkJcnRjX3RpbWVyX2VucXVldWUocnRjLCAmcnRjLT5haWVfdGltZXIpOwotCQl9IGVsc2UgeworCQlpZiAoZW5hYmxlZCkKKwkJCWVyciA9IHJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgJnJ0Yy0+YWllX3RpbWVyKTsKKwkJZWxzZQogCQkJcnRjX3RpbWVyX3JlbW92ZShydGMsICZydGMtPmFpZV90aW1lcik7Ci0JCQlydGMtPmFpZV90aW1lci5lbmFibGVkID0gMDsKLQkJfQogCX0KIAotCWlmICghcnRjLT5vcHMpCisJaWYgKGVycikKKwkJLyogbm90aGluZyAqLzsKKwllbHNlIGlmICghcnRjLT5vcHMpCiAJCWVyciA9IC1FTk9ERVY7CiAJZWxzZSBpZiAoIXJ0Yy0+b3BzLT5hbGFybV9pcnFfZW5hYmxlKQogCQllcnIgPSAtRUlOVkFMOwpAQCAtMjIyLDYgKzIyOCwxMiBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKyNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMCisJaWYgKGVuYWJsZWQgPT0gMCAmJiBydGMtPnVpZV9pcnFfYWN0aXZlKSB7CisJCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7CisJCXJldHVybiBydGNfZGV2X3VwZGF0ZV9pcnFfZW5hYmxlX2VtdWwocnRjLCAwKTsKKwl9CisjZW5kaWYKIAkvKiBtYWtlIHN1cmUgd2UncmUgY2hhbmdpbmcgc3RhdGUgKi8KIAlpZiAocnRjLT51aWVfcnRjdGltZXIuZW5hYmxlZCA9PSBlbmFibGVkKQogCQlnb3RvIG91dDsKQEAgLTIzNSwxNSArMjQ3LDIyIEBACiAJCW5vdyA9IHJ0Y190bV90b19rdGltZSh0bSk7CiAJCXJ0Yy0+dWllX3J0Y3RpbWVyLm5vZGUuZXhwaXJlcyA9IGt0aW1lX2FkZChub3csIG9uZXNlYyk7CiAJCXJ0Yy0+dWllX3J0Y3RpbWVyLnBlcmlvZCA9IGt0aW1lX3NldCgxLCAwKTsKLQkJcnRjLT51aWVfcnRjdGltZXIuZW5hYmxlZCA9IDE7Ci0JCXJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgJnJ0Yy0+dWllX3J0Y3RpbWVyKTsKLQl9IGVsc2UgeworCQllcnIgPSBydGNfdGltZXJfZW5xdWV1ZShydGMsICZydGMtPnVpZV9ydGN0aW1lcik7CisJfSBlbHNlCiAJCXJ0Y190aW1lcl9yZW1vdmUocnRjLCAmcnRjLT51aWVfcnRjdGltZXIpOwotCQlydGMtPnVpZV9ydGN0aW1lci5lbmFibGVkID0gMDsKLQl9CiAKIG91dDoKIAltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOworI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwKKwkvKgorCSAqIEVuYWJsZSBlbXVsYXRpb24gaWYgdGhlIGRyaXZlciBkaWQgbm90IHByb3ZpZGUKKwkgKiB0aGUgdXBkYXRlX2lycV9lbmFibGUgZnVuY3Rpb24gcG9pbnRlciBvciBpZiByZXR1cm5lZAorCSAqIC1FSU5WQUwgdG8gc2lnbmFsIHRoYXQgaXQgaGFzIGJlZW4gY29uZmlndXJlZCB3aXRob3V0CisJICogaW50ZXJydXB0cyBvciB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuCisJICovCisJaWYgKGVyciA9PSAtRUlOVkFMKQorCQllcnIgPSBydGNfZGV2X3VwZGF0ZV9pcnFfZW5hYmxlX2VtdWwocnRjLCBlbmFibGVkKTsKKyNlbmRpZgogCXJldHVybiBlcnI7CiAKIH0KQEAgLTI1OSw3ICsyNzgsNyBAQAogICoKICAqIFRyaWdnZXJzIHRoZSByZWdpc3RlcmVkIGlycV90YXNrIGZ1bmN0aW9uIGNhbGxiYWNrLgogICovCi1zdGF0aWMgdm9pZCBydGNfaGFuZGxlX2xlZ2FjeV9pcnEoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywgaW50IG51bSwgaW50IG1vZGUpCit2b2lkIHJ0Y19oYW5kbGVfbGVnYWN5X2lycShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBpbnQgbnVtLCBpbnQgbW9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC00NjAsNiArNDc5LDkgQEAKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKGZyZXEgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjLT5pcnFfdGFza19sb2NrLCBmbGFncyk7CiAJaWYgKHJ0Yy0+aXJxX3Rhc2sgIT0gTlVMTCAmJiB0YXNrID09IE5VTEwpCiAJCWVyciA9IC1FQlVTWTsKQEAgLTQ4OCwxMCArNTEwLDEzIEBACiAgKiBFbnF1ZXVlcyBhIHRpbWVyIG9udG8gdGhlIHJ0YyBkZXZpY2VzIHRpbWVycXVldWUgYW5kIHNldHMKICAqIHRoZSBuZXh0IGFsYXJtIGV2ZW50IGFwcHJvcHJpYXRlbHkuCiAgKgorICogU2V0cyB0aGUgZW5hYmxlZCBiaXQgb24gdGhlIGFkZGVkIHRpbWVyLgorICoKICAqIE11c3QgaG9sZCBvcHNfbG9jayBmb3IgcHJvcGVyIHNlcmlhbGl6YXRpb24gb2YgdGltZXJxdWV1ZQogICovCi12b2lkIHJ0Y190aW1lcl9lbnF1ZXVlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKQorc3RhdGljIGludCBydGNfdGltZXJfZW5xdWV1ZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyICp0aW1lcikKIHsKKwl0aW1lci0+ZW5hYmxlZCA9IDE7CiAJdGltZXJxdWV1ZV9hZGQoJnJ0Yy0+dGltZXJxdWV1ZSwgJnRpbWVyLT5ub2RlKTsKIAlpZiAoJnRpbWVyLT5ub2RlID09IHRpbWVycXVldWVfZ2V0bmV4dCgmcnRjLT50aW1lcnF1ZXVlKSkgewogCQlzdHJ1Y3QgcnRjX3drYWxybSBhbGFybTsKQEAgLTUwMSw3ICs1MjYsMTMgQEAKIAkJZXJyID0gX19ydGNfc2V0X2FsYXJtKHJ0YywgJmFsYXJtKTsKIAkJaWYgKGVyciA9PSAtRVRJTUUpCiAJCQlzY2hlZHVsZV93b3JrKCZydGMtPmlycXdvcmspOworCQllbHNlIGlmIChlcnIpIHsKKwkJCXRpbWVycXVldWVfZGVsKCZydGMtPnRpbWVycXVldWUsICZ0aW1lci0+bm9kZSk7CisJCQl0aW1lci0+ZW5hYmxlZCA9IDA7CisJCQlyZXR1cm4gZXJyOworCQl9CiAJfQorCXJldHVybiAwOwogfQogCiAvKioKQEAgLTUxMiwxMyArNTQzLDE1IEBACiAgKiBSZW1vdmVzIGEgdGltZXIgb250byB0aGUgcnRjIGRldmljZXMgdGltZXJxdWV1ZSBhbmQgc2V0cwogICogdGhlIG5leHQgYWxhcm0gZXZlbnQgYXBwcm9wcmlhdGVseS4KICAqCisgKiBDbGVhcnMgdGhlIGVuYWJsZWQgYml0IG9uIHRoZSByZW1vdmVkIHRpbWVyLgorICoKICAqIE11c3QgaG9sZCBvcHNfbG9jayBmb3IgcHJvcGVyIHNlcmlhbGl6YXRpb24gb2YgdGltZXJxdWV1ZQogICovCi12b2lkIHJ0Y190aW1lcl9yZW1vdmUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lciAqdGltZXIpCitzdGF0aWMgdm9pZCBydGNfdGltZXJfcmVtb3ZlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKQogewogCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5leHQgPSB0aW1lcnF1ZXVlX2dldG5leHQoJnJ0Yy0+dGltZXJxdWV1ZSk7CiAJdGltZXJxdWV1ZV9kZWwoJnJ0Yy0+dGltZXJxdWV1ZSwgJnRpbWVyLT5ub2RlKTsKLQorCXRpbWVyLT5lbmFibGVkID0gMDsKIAlpZiAobmV4dCA9PSAmdGltZXItPm5vZGUpIHsKIAkJc3RydWN0IHJ0Y193a2Fscm0gYWxhcm07CiAJCWludCBlcnI7CkBAIC02MjYsOCArNjU5LDcgQEAKIAl0aW1lci0+bm9kZS5leHBpcmVzID0gZXhwaXJlczsKIAl0aW1lci0+cGVyaW9kID0gcGVyaW9kOwogCi0JdGltZXItPmVuYWJsZWQgPSAxOwotCXJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgdGltZXIpOworCXJldCA9IHJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgdGltZXIpOwogCiAJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKIAlyZXR1cm4gcmV0OwpAQCAtNjQ1LDcgKzY3Nyw2IEBACiAJbXV0ZXhfbG9jaygmcnRjLT5vcHNfbG9jayk7CiAJaWYgKHRpbWVyLT5lbmFibGVkKQogCQlydGNfdGltZXJfcmVtb3ZlKHJ0YywgdGltZXIpOwotCXRpbWVyLT5lbmFibGVkID0gMDsKIAltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQzMmFwNzAweC5jIGIvZHJpdmVycy9ydGMvcnRjLWF0MzJhcDcwMHguYwppbmRleCBiMjc1MmI2Li5lNzI1ZDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQzMmFwNzAweC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDMyYXA3MDB4LmMKQEAgLTEzNCwzNiArMTM0LDI5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhdDMyX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsCi0JCQl1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgYXQzMl9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBydGNfYXQzMmFwNzAweCAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxKCZydGMtPmxvY2spOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT046CisJaWYoZW5hYmxlZCkgewogCQlpZiAocnRjX3JlYWRsKHJ0YywgVkFMKSA+IHJ0Yy0+YWxhcm1fdGltZSkgewogCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWJyZWFrOworCQkJZ290byBvdXQ7CiAJCX0KIAkJcnRjX3dyaXRlbChydGMsIENUUkwsIHJ0Y19yZWFkbChydGMsIENUUkwpCiAJCQkJfCBSVENfQklUKENUUkxfVE9QRU4pKTsKIAkJcnRjX3dyaXRlbChydGMsIElDUiwgUlRDX0JJVChJQ1JfVE9QSSkpOwogCQlydGNfd3JpdGVsKHJ0YywgSUVSLCBSVENfQklUKElFUl9UT1BJKSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PRkY6CisJfSBlbHNlIHsKIAkJcnRjX3dyaXRlbChydGMsIENUUkwsIHJ0Y19yZWFkbChydGMsIENUUkwpCiAJCQkJJiB+UlRDX0JJVChDVFJMX1RPUEVOKSk7CiAJCXJ0Y193cml0ZWwocnRjLCBJRFIsIFJUQ19CSVQoSURSX1RPUEkpKTsKIAkJcnRjX3dyaXRlbChydGMsIElDUiwgUlRDX0JJVChJQ1JfVE9QSSkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRU5PSU9DVExDTUQ7Ci0JCWJyZWFrOwogCX0KLQorb3V0OgogCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC0xOTUsMTEgKzE4OCwxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgYXQzMl9ydGNfb3BzID0gewotCS5pb2N0bAkJPSBhdDMyX3J0Y19pb2N0bCwKIAkucmVhZF90aW1lCT0gYXQzMl9ydGNfcmVhZHRpbWUsCiAJLnNldF90aW1lCT0gYXQzMl9ydGNfc2V0dGltZSwKIAkucmVhZF9hbGFybQk9IGF0MzJfcnRjX3JlYWRhbGFybSwKIAkuc2V0X2FsYXJtCT0gYXQzMl9ydGNfc2V0YWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBhdDMyX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXQzMl9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCmluZGV4IGJjOGJiY2EuLjI2ZDFjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwpAQCAtMTk1LDEzICsxOTUsNiBAQAogCiAJLyogaW1wb3J0YW50OiAgc2NydWIgb2xkIHN0YXR1cyBiZWZvcmUgZW5hYmxpbmcgSVJRcyAqLwogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoJLyogYWxhcm0gb2ZmICovCi0JCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0lEUiwgQVQ5MV9SVENfQUxBUk0pOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CS8qIGFsYXJtIG9uICovCi0JCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX1NDQ1IsIEFUOTFfUlRDX0FMQVJNKTsKLQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSUVSLCBBVDkxX1JUQ19BTEFSTSk7Ci0JCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PRkY6CS8qIHVwZGF0ZSBvZmYgKi8KIAkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19TRUNFVik7CiAJCWJyZWFrOwpAQCAtMjE3LDYgKzIxMCwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXQ5MV9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXByX2RlYnVnKCIlcygpOiBjbWQ9JTA4eFxuIiwgX19mdW5jX18sIGVuYWJsZWQpOworCisJaWYgKGVuYWJsZWQpIHsKKwkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfU0NDUiwgQVQ5MV9SVENfQUxBUk0pOworCQlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19JRVIsIEFUOTFfUlRDX0FMQVJNKTsKKwl9IGVsc2UKKwkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19BTEFSTSk7CisKKwlyZXR1cm4gMDsKK30KIC8qCiAgKiBQcm92aWRlIGFkZGl0aW9uYWwgUlRDIGluZm9ybWF0aW9uIGluIC9wcm9jL2RyaXZlci9ydGMKICAqLwpAQCAtMjcwLDYgKzI3NSw3IEBACiAJLnJlYWRfYWxhcm0JPSBhdDkxX3J0Y19yZWFkYWxhcm0sCiAJLnNldF9hbGFybQk9IGF0OTFfcnRjX3NldGFsYXJtLAogCS5wcm9jCQk9IGF0OTFfcnRjX3Byb2MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBhdDkxX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKaW5kZXggZjY3N2UwNy4uNTQ2OWM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKQEAgLTIyOSwxMiArMjI5LDYgQEAKIAlkZXZfZGJnKGRldiwgImlvY3RsOiBjbWQ9JTA4eCwgYXJnPSUwOGx4LCBtciAlMDh4XG4iLCBjbWQsIGFyZywgbXIpOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgkJLyogYWxhcm0gb2ZmICovCi0JCXJ0dF93cml0ZWwocnRjLCBNUiwgbXIgJiB+QVQ5MV9SVFRfQUxNSUVOKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgkJLyogYWxhcm0gb24gKi8KLQkJcnR0X3dyaXRlbChydGMsIE1SLCBtciB8IEFUOTFfUlRUX0FMTUlFTik7Ci0JCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PRkY6CQkvKiB1cGRhdGUgb2ZmICovCiAJCXJ0dF93cml0ZWwocnRjLCBNUiwgbXIgJiB+QVQ5MV9SVFRfUlRUSU5DSUVOKTsKIAkJYnJlYWs7CkBAIC0yNDksNiArMjQzLDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBhdDkxX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IHNhbTlfcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MzIgbXIgPSBydHRfcmVhZGwocnRjLCBNUik7CisKKwlkZXZfZGJnKGRldiwgImFsYXJtX2lycV9lbmFibGU6IGVuYWJsZWQ9JTA4eCwgbXIgJTA4eFxuIiwgZW5hYmxlZCwgbXIpOworCWlmIChlbmFibGVkKQorCQlydHRfd3JpdGVsKHJ0YywgTVIsIG1yIHwgQVQ5MV9SVFRfQUxNSUVOKTsKKwllbHNlCisJCXJ0dF93cml0ZWwocnRjLCBNUiwgbXIgJiB+QVQ5MV9SVFRfQUxNSUVOKTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFByb3ZpZGUgYWRkaXRpb25hbCBSVEMgaW5mb3JtYXRpb24gaW4gL3Byb2MvZHJpdmVyL3J0YwogICovCkBAIC0zMDIsNiArMzA5LDcgQEAKIAkucmVhZF9hbGFybQk9IGF0OTFfcnRjX3JlYWRhbGFybSwKIAkuc2V0X2FsYXJtCT0gYXQ5MV9ydGNfc2V0YWxhcm0sCiAJLnByb2MJCT0gYXQ5MV9ydGNfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGF0OTFfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWJmaW4uYyBiL2RyaXZlcnMvcnRjL3J0Yy1iZmluLmMKaW5kZXggYjRiNjA4Ny4uMTc5NzFkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWJmaW4uYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jCkBAIC0yNTksMTUgKzI1OSw2IEBACiAJCWJmaW5fcnRjX2ludF9jbGVhcih+UlRDX0lTVEFUX1NFQyk7CiAJCWJyZWFrOwogCi0JY2FzZSBSVENfQUlFX09OOgotCQlkZXZfZGJnX3N0YW1wKGRldik7Ci0JCWJmaW5fcnRjX2ludF9zZXRfYWxhcm0ocnRjKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJZGV2X2RiZ19zdGFtcChkZXYpOwotCQliZmluX3J0Y19pbnRfY2xlYXIofihSVENfSVNUQVRfQUxBUk0gfCBSVENfSVNUQVRfQUxBUk1fREFZKSk7Ci0JCWJyZWFrOwotCiAJZGVmYXVsdDoKIAkJZGV2X2RiZ19zdGFtcChkZXYpOwogCQlyZXQgPSAtRU5PSU9DVExDTUQ7CkBAIC0yNzYsNiArMjY3LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBiZmluX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IGJmaW5fcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9kYmdfc3RhbXAoZGV2KTsKKwlpZiAoZW5hYmxlZCkKKwkJYmZpbl9ydGNfaW50X3NldF9hbGFybShydGMpOworCWVsc2UKKwkJYmZpbl9ydGNfaW50X2NsZWFyKH4oUlRDX0lTVEFUX0FMQVJNIHwgUlRDX0lTVEFUX0FMQVJNX0RBWSkpOworfQorCiBzdGF0aWMgaW50IGJmaW5fcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJc3RydWN0IGJmaW5fcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTM2Miw2ICszNjQsNyBAQAogCS5yZWFkX2FsYXJtICAgID0gYmZpbl9ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtICAgICA9IGJmaW5fcnRjX3NldF9hbGFybSwKIAkucHJvYyAgICAgICAgICA9IGJmaW5fcnRjX3Byb2MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBiZmluX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgYmZpbl9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwppbmRleCAyMTJiMTZlLi5kMGUwNmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCkBAIC00Niw2ICs0NiwxMDUgQEAKIAlyZXR1cm4gZXJyOwogfQogCisjaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTAorLyoKKyAqIFJvdXRpbmUgdG8gcG9sbCBSVEMgc2Vjb25kcyBmaWVsZCBmb3IgY2hhbmdlIGFzIG9mdGVuIGFzIHBvc3NpYmxlLAorICogYWZ0ZXIgZmlyc3QgUlRDX1VJRSB1c2UgdGltZXIgdG8gcmVkdWNlIHBvbGxpbmcKKyAqLworc3RhdGljIHZvaWQgcnRjX3VpZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydGNfZGV2aWNlLCB1aWVfdGFzayk7CisJc3RydWN0IHJ0Y190aW1lIHRtOworCWludCBudW0gPSAwOworCWludCBlcnI7CisKKwllcnIgPSBydGNfcmVhZF90aW1lKHJ0YywgJnRtKTsKKworCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCWlmIChydGMtPnN0b3BfdWllX3BvbGxpbmcgfHwgZXJyKSB7CisJCXJ0Yy0+dWllX3Rhc2tfYWN0aXZlID0gMDsKKwl9IGVsc2UgaWYgKHJ0Yy0+b2xkc2VjcyAhPSB0bS50bV9zZWMpIHsKKwkJbnVtID0gKHRtLnRtX3NlYyArIDYwIC0gcnRjLT5vbGRzZWNzKSAlIDYwOworCQlydGMtPm9sZHNlY3MgPSB0bS50bV9zZWM7CisJCXJ0Yy0+dWllX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogLSAoSFovMTApOworCQlydGMtPnVpZV90aW1lcl9hY3RpdmUgPSAxOworCQlydGMtPnVpZV90YXNrX2FjdGl2ZSA9IDA7CisJCWFkZF90aW1lcigmcnRjLT51aWVfdGltZXIpOworCX0gZWxzZSBpZiAoc2NoZWR1bGVfd29yaygmcnRjLT51aWVfdGFzaykgPT0gMCkgeworCQlydGMtPnVpZV90YXNrX2FjdGl2ZSA9IDA7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJaWYgKG51bSkKKwkJcnRjX2hhbmRsZV9sZWdhY3lfaXJxKHJ0YywgbnVtLCBSVENfVUYpOworfQorc3RhdGljIHZvaWQgcnRjX3VpZV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IChzdHJ1Y3QgcnRjX2RldmljZSAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGMtPmlycV9sb2NrLCBmbGFncyk7CisJcnRjLT51aWVfdGltZXJfYWN0aXZlID0gMDsKKwlydGMtPnVpZV90YXNrX2FjdGl2ZSA9IDE7CisJaWYgKChzY2hlZHVsZV93b3JrKCZydGMtPnVpZV90YXNrKSA9PSAwKSkKKwkJcnRjLT51aWVfdGFza19hY3RpdmUgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Yy0+aXJxX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjbGVhcl91aWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YykKK3sKKwlzcGluX2xvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwlpZiAocnRjLT51aWVfaXJxX2FjdGl2ZSkgeworCQlydGMtPnN0b3BfdWllX3BvbGxpbmcgPSAxOworCQlpZiAocnRjLT51aWVfdGltZXJfYWN0aXZlKSB7CisJCQlzcGluX3VubG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCQkJZGVsX3RpbWVyX3N5bmMoJnJ0Yy0+dWllX3RpbWVyKTsKKwkJCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCQkJcnRjLT51aWVfdGltZXJfYWN0aXZlID0gMDsKKwkJfQorCQlpZiAocnRjLT51aWVfdGFza19hY3RpdmUpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCQkJc3Bpbl9sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJCX0KKwkJcnRjLT51aWVfaXJxX2FjdGl2ZSA9IDA7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3VpZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQoreworCXN0cnVjdCBydGNfdGltZSB0bTsKKwlpbnQgZXJyOworCisJZXJyID0gcnRjX3JlYWRfdGltZShydGMsICZ0bSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlzcGluX2xvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwlpZiAoIXJ0Yy0+dWllX2lycV9hY3RpdmUpIHsKKwkJcnRjLT51aWVfaXJxX2FjdGl2ZSA9IDE7CisJCXJ0Yy0+c3RvcF91aWVfcG9sbGluZyA9IDA7CisJCXJ0Yy0+b2xkc2VjcyA9IHRtLnRtX3NlYzsKKwkJcnRjLT51aWVfdGFza19hY3RpdmUgPSAxOworCQlpZiAoc2NoZWR1bGVfd29yaygmcnRjLT51aWVfdGFzaykgPT0gMCkKKwkJCXJ0Yy0+dWllX3Rhc2tfYWN0aXZlID0gMDsKKwl9CisJcnRjLT5pcnFfZGF0YSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0Y19kZXZfdXBkYXRlX2lycV9lbmFibGVfZW11bChzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlpZiAoZW5hYmxlZCkKKwkJcmV0dXJuIHNldF91aWUocnRjKTsKKwllbHNlCisJCXJldHVybiBjbGVhcl91aWUocnRjKTsKK30KK0VYUE9SVF9TWU1CT0wocnRjX2Rldl91cGRhdGVfaXJxX2VuYWJsZV9lbXVsKTsKKworI2VuZGlmIC8qIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgKi8KIAogc3RhdGljIHNzaXplX3QKIHJ0Y19kZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCkBAIC0xNTQsMTkgKzI1Myw3IEBACiAJaWYgKGVycikKIAkJZ290byBkb25lOwogCi0JLyogdHJ5IHRoZSBkcml2ZXIncyBpb2N0bCBpbnRlcmZhY2UgKi8KLQlpZiAob3BzLT5pb2N0bCkgewotCQllcnIgPSBvcHMtPmlvY3RsKHJ0Yy0+ZGV2LnBhcmVudCwgY21kLCBhcmcpOwotCQlpZiAoZXJyICE9IC1FTk9JT0NUTENNRCkgewotCQkJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQkvKiBpZiB0aGUgZHJpdmVyIGRvZXMgbm90IHByb3ZpZGUgdGhlIGlvY3RsIGludGVyZmFjZQotCSAqIG9yIGlmIHRoYXQgcGFydGljdWxhciBpb2N0bCB3YXMgbm90IGltcGxlbWVudGVkCi0JICogKC1FTk9JT0NUTENNRCksIHdlIHdpbGwgdHJ5IHRvIGVtdWxhdGUgaGVyZS4KLQkgKgorCS8qCiAJICogRHJpdmVycyAqU0hPVUxEIE5PVCogcHJvdmlkZSBpb2N0bCBpbXBsZW1lbnRhdGlvbnMKIAkgKiBmb3IgdGhlc2UgcmVxdWVzdHMuICBJbnN0ZWFkLCBwcm92aWRlIG1ldGhvZHMgdG8KIAkgKiBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgY29kZSwgc28gdGhhdCB0aGUgUlRDJ3MgbWFpbgpAQCAtMzI5LDcgKzQxNiwxMiBAQAogCQlyZXR1cm4gZXJyOwogCiAJZGVmYXVsdDoKLQkJZXJyID0gLUVOT1RUWTsKKwkJLyogRmluYWxseSB0cnkgdGhlIGRyaXZlcidzIGlvY3RsIGludGVyZmFjZSAqLworCQlpZiAob3BzLT5pb2N0bCkgeworCQkJZXJyID0gb3BzLT5pb2N0bChydGMtPmRldi5wYXJlbnQsIGNtZCwgYXJnKTsKKwkJCWlmIChlcnIgPT0gLUVOT0lPQ1RMQ01EKQorCQkJCWVyciA9IC1FTk9UVFk7CisJCX0KIAkJYnJlYWs7CiAJfQogCkBAIC0zOTQsNiArNDg2LDExIEBACiAKIAlydGMtPmRldi5kZXZ0ID0gTUtERVYoTUFKT1IocnRjX2RldnQpLCBydGMtPmlkKTsKIAorI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwKKwlJTklUX1dPUksoJnJ0Yy0+dWllX3Rhc2ssIHJ0Y191aWVfdGFzayk7CisJc2V0dXBfdGltZXIoJnJ0Yy0+dWllX3RpbWVyLCBydGNfdWllX3RpbWVyLCAodW5zaWduZWQgbG9uZylydGMpOworI2VuZGlmCisKIAljZGV2X2luaXQoJnJ0Yy0+Y2hhcl9kZXYsICZydGNfZGV2X2ZvcHMpOwogCXJ0Yy0+Y2hhcl9kZXYub3duZXIgPSBydGMtPm93bmVyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jCmluZGV4IGJmNDMwZjkuLjYwY2U2OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEyODYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMKQEAgLTQwLDYgKzQwLDI2IEBACiAJX19yYXdfd3JpdGVsKGRhdGEsICZwcml2LT5ydGNyZWdzW3JlZ10pOwogfQogCisKK3N0YXRpYyBpbnQgZHMxMjg2X2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdmFsOworCisJLyogQWxsb3cgb3IgbWFzayBhbGFybSBpbnRlcnJ1cHRzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl2YWwgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7CisJaWYgKGVuYWJsZWQpCisJCXZhbCAmPSAgflJUQ19URE07CisJZWxzZQorCQl2YWwgfD0gIFJUQ19URE07CisJZHMxMjg2X3J0Y193cml0ZShwcml2LCB2YWwsIFJUQ19DTUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVgogCiBzdGF0aWMgaW50IGRzMTI4Nl9pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQpAQCAtNDksMjIgKzY5LDYgQEAKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJLyogTWFzayBhbGFybSBpbnQuIGVuYWIuIGJpdAkqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQl2YWwgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7Ci0JCXZhbCB8PSAgUlRDX1RETTsKLQkJZHMxMjg2X3J0Y193cml0ZShwcml2LCB2YWwsIFJUQ19DTUQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoKLQkJLyogQWxsb3cgYWxhcm0gaW50ZXJydXB0cy4JKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJdmFsID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19DTUQpOwotCQl2YWwgJj0gIH5SVENfVERNOwotCQlkczEyODZfcnRjX3dyaXRlKHByaXYsIHZhbCwgUlRDX0NNRCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJYnJlYWs7CiAJY2FzZSBSVENfV0lFX09GRjoKIAkJLyogTWFzayB3YXRjaGRvZyBpbnQuIGVuYWIuIGJpdAkqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMzE2LDEyICszMjAsMTMgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRzMTI4Nl9vcHMgPSB7Ci0JLmlvY3RsICAgCT0gZHMxMjg2X2lvY3RsLAotCS5wcm9jICAgCT0gZHMxMjg2X3Byb2MsCisJLmlvY3RsCQk9IGRzMTI4Nl9pb2N0bCwKKwkucHJvYwkJPSBkczEyODZfcHJvYywKIAkucmVhZF90aW1lCT0gZHMxMjg2X3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBkczEyODZfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBkczEyODZfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gZHMxMjg2X3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGRzMTI4Nl9hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgZHMxMjg2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKaW5kZXggMDc3YWYxZC4uNTdmYmNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYwpAQCAtMTM5LDQ5ICsxMzksMzIgQEAKICAqIEludGVyZmFjZSB0byBSVEMgZnJhbWV3b3JrCiAgKi8KIAotI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVYKLQotLyoKLSAqIENvbnRleHQ6IGNhbGxlciBob2xkcyBydGMtPm9wc19sb2NrICh0byBwcm90ZWN0IGRzMTMwNS0+Y3RybCkKLSAqLwotc3RhdGljIGludCBkczEzMDVfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBkczEzMDVfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBkczEzMDUJKmRzMTMwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXU4CQlidWZbMl07Ci0JaW50CQlzdGF0dXMgPSAtRU5PSU9DVExDTUQ7CisJbG9uZwkJZXJyID0gLUVJTlZBTDsKIAogCWJ1ZlswXSA9IERTMTMwNV9XUklURSB8IERTMTMwNV9DT05UUk9MOwogCWJ1ZlsxXSA9IGRzMTMwNS0+Y3RybFswXTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJc3RhdHVzID0gMDsKLQkJaWYgKCEoYnVmWzFdICYgRFMxMzA1X0FFSTApKQotCQkJZ290byBkb25lOwotCQlidWZbMV0gJj0gfkRTMTMwNV9BRUkwOwotCQlicmVhazsKLQotCWNhc2UgUlRDX0FJRV9PTjoKLQkJc3RhdHVzID0gMDsKKwlpZiAoZW5hYmxlZCkgewogCQlpZiAoZHMxMzA1LT5jdHJsWzBdICYgRFMxMzA1X0FFSTApCiAJCQlnb3RvIGRvbmU7CiAJCWJ1ZlsxXSB8PSBEUzEzMDVfQUVJMDsKLQkJYnJlYWs7CisJfSBlbHNlIHsKKwkJaWYgKCEoYnVmWzFdICYgRFMxMzA1X0FFSTApKQorCQkJZ290byBkb25lOworCQlidWZbMV0gJj0gfkRTMTMwNV9BRUkwOwogCX0KLQlpZiAoc3RhdHVzID09IDApIHsKLQkJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChkczEzMDUtPnNwaSwgYnVmLCBzaXplb2YgYnVmLAotCQkJCU5VTEwsIDApOwotCQlpZiAoc3RhdHVzID49IDApCi0JCQlkczEzMDUtPmN0cmxbMF0gPSBidWZbMV07Ci0JfQotCisJZXJyID0gc3BpX3dyaXRlX3RoZW5fcmVhZChkczEzMDUtPnNwaSwgYnVmLCBzaXplb2YgYnVmLCBOVUxMLCAwKTsKKwlpZiAoZXJyID49IDApCisJCWRzMTMwNS0+Y3RybFswXSA9IGJ1ZlsxXTsKIGRvbmU6Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gZXJyOworCiB9CiAKLSNlbHNlCi0jZGVmaW5lIGRzMTMwNV9pb2N0bAlOVUxMCi0jZW5kaWYKIAogLyoKICAqIEdldC9zZXQgb2YgZGF0ZSBhbmQgdGltZSBpcyBwcmV0dHkgbm9ybWFsLgpAQCAtNDYwLDEyICs0NDMsMTIgQEAKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgZHMxMzA1X29wcyA9IHsKLQkuaW9jdGwJCT0gZHMxMzA1X2lvY3RsLAogCS5yZWFkX3RpbWUJPSBkczEzMDVfZ2V0X3RpbWUsCiAJLnNldF90aW1lCT0gZHMxMzA1X3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gZHMxMzA1X2dldF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gZHMxMzA1X3NldF9hbGFybSwKIAkucHJvYwkJPSBkczEzMDVfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGRzMTMwNV9hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIHZvaWQgZHMxMzA1X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCmluZGV4IDBkNTU5YjYuLjQ3MjRiYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKQEAgLTQ5NSw1MCArNDk1LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHMxMzA3X2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGRzMTMwN19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgZHMxMzA3CQkqZHMxMzA3ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50CQkJcmV0OwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlpZiAoIXRlc3RfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpKQotCQkJcmV0dXJuIC1FTk9UVFk7CisJaWYgKCF0ZXN0X2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkKKwkJcmV0dXJuIC1FTk9UVFk7CiAKLQkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKKwlpZiAoZW5hYmxlZCkKKwkJcmV0IHw9IERTMTMzN19CSVRfQTFJRTsKKwllbHNlCiAJCXJldCAmPSB+RFMxMzM3X0JJVF9BMUlFOwogCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJRFMxMzM3X1JFR19DT05UUk9MLCByZXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFJUQ19BSUVfT046Ci0JCWlmICghdGVzdF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncykpCi0JCQlyZXR1cm4gLUVOT1RUWTsKLQotCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX0NPTlRST0wpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJcmV0IHw9IERTMTMzN19CSVRfQTFJRTsKLQotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCURTMTMzN19SRUdfQ09OVFJPTCwgcmV0KTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9CisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCwgcmV0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAogCXJldHVybiAwOwogfQpAQCAtNTQ4LDcgKzUyNSw3IEBACiAJLnNldF90aW1lCT0gZHMxMzA3X3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gZHMxMzM3X3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IGRzMTMzN19zZXRfYWxhcm0sCi0JLmlvY3RsCQk9IGRzMTMwN19pb2N0bCwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGRzMTMwN19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYwppbmRleCA0N2ZiNjM1Li5kODM0YTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCkBAIC0zMDcsNDIgKzMwNywyNSBAQAogCW11dGV4X3VubG9jaygmZHMxMzc0LT5tdXRleCk7CiB9CiAKLXN0YXRpYyBpbnQgZHMxMzc0X2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGRzMTM3NF9hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgZHMxMzc0ICpkczEzNzQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgcmV0ID0gLUVOT0lPQ1RMQ01EOworCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZkczEzNzQtPm11dGV4KTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc0X1JFR19DUik7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7CisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc0X1JFR19DUik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCi0JCXJldCAmPSB+RFMxMzc0X1JFR19DUl9XQUNFOwotCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzRfUkVHX0NSLCByZXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCWJyZWFrOwotCi0JY2FzZSBSVENfQUlFX09OOgotCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzRfUkVHX0NSKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQorCWlmIChlbmFibGVkKSB7CiAJCXJldCB8PSBEUzEzNzRfUkVHX0NSX1dBQ0UgfCBEUzEzNzRfUkVHX0NSX0FJRTsKIAkJcmV0ICY9IH5EUzEzNzRfUkVHX0NSX1dEQUxNOwotCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzRfUkVHX0NSLCByZXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCWJyZWFrOworCX0gZWxzZSB7CisJCXJldCAmPSB+RFMxMzc0X1JFR19DUl9XQUNFOwogCX0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc0X1JFR19DUiwgcmV0KTsKIAogb3V0OgogCW11dGV4X3VubG9jaygmZHMxMzc0LT5tdXRleCk7CkBAIC0zNTQsNyArMzM3LDcgQEAKIAkuc2V0X3RpbWUgPSBkczEzNzRfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0gPSBkczEzNzRfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtID0gZHMxMzc0X3NldF9hbGFybSwKLQkuaW9jdGwgPSBkczEzNzRfaW9jdGwsCisJLmFsYXJtX2lycV9lbmFibGUgPSBkczEzNzRfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgZHMxMzc0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMzMjMyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMzMjMyLmMKaW5kZXggMjNhOWVlMS4uOTUwNzM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMzIzMi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBSVEMgY2xpZW50L2RyaXZlciBmb3IgdGhlIE1heGltL0RhbGxhcyBEUzMyMzIgUmVhbC1UaW1lIENsb2NrIG92ZXIgSTJDCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KICAqIEF1dGhvcjogSmFjayBMYW4gPGphY2subGFuQGZyZWVzY2FsZS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xNDEsOSArMTQxLDExIEBACiAJCXRpbWUtPnRtX2hvdXIgPSBiY2QyYmluKGhvdXIpOwogCX0KIAotCXRpbWUtPnRtX3dkYXkgPSBiY2QyYmluKHdlZWspOworCS8qIERheSBvZiB0aGUgd2VlayBpbiBsaW51eCByYW5nZSBpcyAwfjYgd2hpbGUgMX43IGluIFJUQyBjaGlwICovCisJdGltZS0+dG1fd2RheSA9IGJjZDJiaW4od2VlaykgLSAxOwogCXRpbWUtPnRtX21kYXkgPSBiY2QyYmluKGRheSk7Ci0JdGltZS0+dG1fbW9uID0gYmNkMmJpbihtb250aCAmIDB4N0YpOworCS8qIGxpbnV4IHRtX21vbiByYW5nZTowfjExLCB3aGlsZSBtb250aCByYW5nZSBpcyAxfjEyIGluIFJUQyBjaGlwICovCisJdGltZS0+dG1fbW9uID0gYmNkMmJpbihtb250aCAmIDB4N0YpIC0gMTsKIAlpZiAoY2VudHVyeSkKIAkJYWRkX2NlbnR1cnkgPSAxMDA7CiAKQEAgLTE2Miw5ICsxNjQsMTEgQEAKIAlidWZbMF0gPSBiaW4yYmNkKHRpbWUtPnRtX3NlYyk7CiAJYnVmWzFdID0gYmluMmJjZCh0aW1lLT50bV9taW4pOwogCWJ1ZlsyXSA9IGJpbjJiY2QodGltZS0+dG1faG91cik7Ci0JYnVmWzNdID0gYmluMmJjZCh0aW1lLT50bV93ZGF5KTsgLyogRGF5IG9mIHRoZSB3ZWVrICovCisJLyogRGF5IG9mIHRoZSB3ZWVrIGluIGxpbnV4IHJhbmdlIGlzIDB+NiB3aGlsZSAxfjcgaW4gUlRDIGNoaXAgKi8KKwlidWZbM10gPSBiaW4yYmNkKHRpbWUtPnRtX3dkYXkgKyAxKTsKIAlidWZbNF0gPSBiaW4yYmNkKHRpbWUtPnRtX21kYXkpOyAvKiBEYXRlICovCi0JYnVmWzVdID0gYmluMmJjZCh0aW1lLT50bV9tb24pOworCS8qIGxpbnV4IHRtX21vbiByYW5nZTowfjExLCB3aGlsZSBtb250aCByYW5nZSBpcyAxfjEyIGluIFJUQyBjaGlwICovCisJYnVmWzVdID0gYmluMmJjZCh0aW1lLT50bV9tb24gKyAxKTsKIAlpZiAodGltZS0+dG1feWVhciA+PSAxMDApIHsKIAkJYnVmWzVdIHw9IDB4ODA7CiAJCWJ1Zls2XSA9IGJpbjJiY2QodGltZS0+dG1feWVhciAtIDEwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKaW5kZXggNWE4ZGFhMy4uNjlmZTY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwpAQCAtMjEzLDQxICsyMTMsMjcgQEAKIAlyZXR1cm4gbTQxdDgwX3NldF9kYXRldGltZSh0b19pMmNfY2xpZW50KGRldiksIHRtKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX0RFVikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfREVWX01PRFVMRSkKLXN0YXRpYyBpbnQKLW00MXQ4MF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgbTQxdDgwX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlpbnQgcmM7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JY2FzZSBSVENfQUlFX09OOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQogCXJjID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19BTEFSTV9NT04pOwogCWlmIChyYyA8IDApCiAJCWdvdG8gZXJyOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJcmMgJj0gfk00MVQ4MF9BTE1PTl9BRkU7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoKKworCWlmIChlbmFibGVkKQogCQlyYyB8PSBNNDFUODBfQUxNT05fQUZFOwotCQlicmVhazsKLQl9CisJZWxzZQorCQlyYyAmPSB+TTQxVDgwX0FMTU9OX0FGRTsKKwogCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19BTEFSTV9NT04sIHJjKSA8IDApCiAJCWdvdG8gZXJyOworCiAJcmV0dXJuIDA7CiBlcnI6CiAJcmV0dXJuIC1FSU87CiB9Ci0jZWxzZQotI2RlZmluZQltNDF0ODBfcnRjX2lvY3RsIE5VTEwKLSNlbmRpZgogCiBzdGF0aWMgaW50IG00MXQ4MF9ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKnQpCiB7CkBAIC0zNzQsNyArMzYwLDcgQEAKIAkucmVhZF9hbGFybSA9IG00MXQ4MF9ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtID0gbTQxdDgwX3J0Y19zZXRfYWxhcm0sCiAJLnByb2MgPSBtNDF0ODBfcnRjX3Byb2MsCi0JLmlvY3RsID0gbTQxdDgwX3J0Y19pb2N0bCwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IG00MXQ4MF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19SVENfSU5URl9TWVNGUykgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfU1lTRlNfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCmluZGV4IGE5OWEwYjUuLjM5NzhmNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKQEAgLTI2MywzMCArMjYzLDIxIEBACiAvKgogICogSGFuZGxlIGNvbW1hbmRzIGZyb20gdXNlci1zcGFjZQogICovCi1zdGF0aWMgaW50IG00OHQ1OV9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLAotCQkJdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IG00OHQ1OV9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbTQ4dDU5X3BsYXRfZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbTQ4dDU5X3ByaXZhdGUgKm00OHQ1OSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbTQ4dDU5LT5sb2NrLCBmbGFncyk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgkvKiBhbGFybSBpbnRlcnJ1cHQgb2ZmICovCi0JCU00OFQ1OV9XUklURSgweDAwLCBNNDhUNTlfSU5UUik7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoJLyogYWxhcm0gaW50ZXJydXB0IG9uICovCisJaWYgKGVuYWJsZWQpCiAJCU00OFQ1OV9XUklURShNNDhUNTlfSU5UUl9BRkUsIE00OFQ1OV9JTlRSKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVOT0lPQ1RMQ01EOwotCQlicmVhazsKLQl9CisJZWxzZQorCQlNNDhUNTlfV1JJVEUoMHgwMCwgTTQ4VDU5X0lOVFIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm00OHQ1OS0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBtNDh0NTlfcnRjX3Byb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKQEAgLTMzMCwxMiArMzIxLDEyIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtNDh0NTlfcnRjX29wcyA9IHsKLQkuaW9jdGwJCT0gbTQ4dDU5X3J0Y19pb2N0bCwKIAkucmVhZF90aW1lCT0gbTQ4dDU5X3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gbTQ4dDU5X3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IG00OHQ1OV9ydGNfcmVhZGFsYXJtLAogCS5zZXRfYWxhcm0JPSBtNDh0NTlfcnRjX3NldGFsYXJtLAogCS5wcm9jCQk9IG00OHQ1OV9ydGNfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZSA9IG00OHQ1OV9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtNDh0MDJfcnRjX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tcnN0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbXJzdC5jCmluZGV4IGJjZDBjZjYuLjFkYjYyZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tcnN0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1yc3QuYwpAQCAtMjU1LDQyICsyNTUsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX0RFVikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfREVWX01PRFVMRSkKLQogLyogQ3VycmVudGx5LCB0aGUgdlJUQyBkb2Vzbid0IHN1cHBvcnQgVUlFIE9OL09GRiAqLwotc3RhdGljIGludAotbXJzdF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgbXJzdF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBtcnN0X3J0YwkqbXJzdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JY2FzZSBSVENfQUlFX09OOgotCQlpZiAoIW1yc3QtPmlycSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBQSUUgT04vT0ZGIGlzIGhhbmRsZWQgYnkgbXJzdF9pcnFfc2V0X3N0YXRlKCkgKi8KLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6CS8qIGFsYXJtIG9mZiAqLwotCQltcnN0X2lycV9kaXNhYmxlKG1yc3QsIFJUQ19BSUUpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CS8qIGFsYXJtIG9uICovCisJaWYgKGVuYWJsZWQpCiAJCW1yc3RfaXJxX2VuYWJsZShtcnN0LCBSVENfQUlFKTsKLQkJYnJlYWs7Ci0JfQorCWVsc2UKKwkJbXJzdF9pcnFfZGlzYWJsZShtcnN0LCBSVENfQUlFKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCi0jZWxzZQotI2RlZmluZQltcnN0X3J0Y19pb2N0bAlOVUxMCi0jZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1BST0MpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1BST0NfTU9EVUxFKQogCkBAIC0zMTcsMTMgKzI5NiwxMyBAQAogI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtcnN0X3J0Y19vcHMgPSB7Ci0JLmlvY3RsCQk9IG1yc3RfcnRjX2lvY3RsLAogCS5yZWFkX3RpbWUJPSBtcnN0X3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBtcnN0X3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gbXJzdF9yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBtcnN0X3NldF9hbGFybSwKIAkucHJvYwkJPSBtcnN0X3Byb2NmcywKIAkuaXJxX3NldF9zdGF0ZQk9IG1yc3RfaXJxX3NldF9zdGF0ZSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IG1yc3RfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1yc3RfcnRjCW1yc3RfcnRjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tc202MjQyLmMKaW5kZXggYjJmZmYwYy4uNjc4MjA2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXNtNjI0Mi5jCkBAIC04Miw3ICs4Miw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbXNtNjI0Ml93cml0ZShzdHJ1Y3QgbXNtNjI0Ml9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgdmFsLAogCQkJCXVuc2lnbmVkIGludCByZWcpCiB7Ci0JcmV0dXJuIF9fcmF3X3dyaXRlbCh2YWwsICZwcml2LT5yZWdzW3JlZ10pOworCV9fcmF3X3dyaXRlbCh2YWwsICZwcml2LT5yZWdzW3JlZ10pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXNtNjI0Ml9zZXQoc3RydWN0IG1zbTYyNDJfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHZhbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tdi5jIGIvZHJpdmVycy9ydGMvcnRjLW12LmMKaW5kZXggYmNjYTQ3Mi4uNjA2MjdhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW12LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW12LmMKQEAgLTE2OSwyNSArMTY5LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXZfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKLQkJCXVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBtdl9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHI7CiAKIAlpZiAocGRhdGEtPmlycSA8IDApCi0JCXJldHVybiAtRU5PSU9DVExDTUQ7IC8qIGZhbGwgYmFjayBpbnRvIHJ0Yy1kZXYncyBlbXVsYXRpb24gKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXdyaXRlbCgwLCBpb2FkZHIgKyBSVENfQUxBUk1fSU5URVJSVVBUX01BU0tfUkVHX09GRlMpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CisJCXJldHVybiAtRUlOVkFMOyAvKiBmYWxsIGJhY2sgaW50byBydGMtZGV2J3MgZW11bGF0aW9uICovCisKKwlpZiAoZW5hYmxlZCkKIAkJd3JpdGVsKDEsIGlvYWRkciArIFJUQ19BTEFSTV9JTlRFUlJVUFRfTUFTS19SRUdfT0ZGUyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQorCWVsc2UKKwkJd3JpdGVsKDAsIGlvYWRkciArIFJUQ19BTEFSTV9JTlRFUlJVUFRfTUFTS19SRUdfT0ZGUyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNiw3ICsyMTAsNyBAQAogCS5zZXRfdGltZQk9IG12X3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IG12X3J0Y19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBtdl9ydGNfc2V0X2FsYXJtLAotCS5pb2N0bAkJPSBtdl9ydGNfaW9jdGwsCisJLmFsYXJtX2lycV9lbmFibGUgPSBtdl9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG12X3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKaW5kZXggZTcyYjUyMy4uYjRkYmYzYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwpAQCAtMTQzLDggKzE0Myw2IEBACiAJdTggcmVnOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCWNhc2UgUlRDX0FJRV9PTjoKIAljYXNlIFJUQ19VSUVfT0ZGOgogCWNhc2UgUlRDX1VJRV9PTjoKIAkJYnJlYWs7CkBAIC0xNTYsMTMgKzE1NCw2IEBACiAJcnRjX3dhaXRfbm90X2J1c3koKTsKIAlyZWcgPSBydGNfcmVhZChPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CiAJc3dpdGNoIChjbWQpIHsKLQkvKiBBSUUgPSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlICovCi0JY2FzZSBSVENfQUlFX09GRjoKLQkJcmVnICY9IH5PTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046Ci0JCXJlZyB8PSBPTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOwotCQlicmVhazsKIAkvKiBVSUUgPSBVcGRhdGUgSW50ZXJydXB0IEVuYWJsZSAoMS9zZWNvbmQpICovCiAJY2FzZSBSVENfVUlFX09GRjoKIAkJcmVnICY9IH5PTUFQX1JUQ19JTlRFUlJVUFRTX0lUX1RJTUVSOwpAQCAtMTgyLDYgKzE3MywyNCBAQAogI2RlZmluZQlvbWFwX3J0Y19pb2N0bAlOVUxMCiAjZW5kaWYKIAorc3RhdGljIGludCBvbWFwX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJdTggcmVnOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlydGNfd2FpdF9ub3RfYnVzeSgpOworCXJlZyA9IHJ0Y19yZWFkKE9NQVBfUlRDX0lOVEVSUlVQVFNfUkVHKTsKKwlpZiAoZW5hYmxlZCkKKwkJcmVnIHw9IE9NQVBfUlRDX0lOVEVSUlVQVFNfSVRfQUxBUk07CisJZWxzZQorCQlyZWcgJj0gfk9NQVBfUlRDX0lOVEVSUlVQVFNfSVRfQUxBUk07CisJcnRjX3dhaXRfbm90X2J1c3koKTsKKwlydGNfd3JpdGUocmVnLCBPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJcmV0dXJuIDA7Cit9CisKIC8qIHRoaXMgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0ICJkb24ndCBjYXJlIiBhbGFybSBmaWVsZHMgKi8KIHN0YXRpYyBpbnQgdG0yYmNkKHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CkBAIC0zMDksNiArMzE4LDcgQEAKIAkuc2V0X3RpbWUJPSBvbWFwX3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IG9tYXBfcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IG9tYXBfcnRjX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IG9tYXBfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgaW50IG9tYXBfcnRjX2FsYXJtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXByb2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKaW5kZXggYzA4NmZjMy4uMjQyYmJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXByb2MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCkBAIC04MSwxMiArODEsMTYgQEAKIAogc3RhdGljIGludCBydGNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogeworCWludCByZXQ7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IFBERShpbm9kZSktPmRhdGE7CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnRjX3Byb2Nfc2hvdywgcnRjKTsKKwlyZXQgPSBzaW5nbGVfb3BlbihmaWxlLCBydGNfcHJvY19zaG93LCBydGMpOworCWlmIChyZXQpCisJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcnRjX3Byb2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYwppbmRleCAzNmViNjYxLi42OTRkYTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJwNWMwMS5jCkBAIC03Niw3ICs3Niw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcnA1YzAxX3dyaXRlKHN0cnVjdCBycDVjMDFfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHZhbCwKIAkJCQl1bnNpZ25lZCBpbnQgcmVnKQogewotCXJldHVybiBfX3Jhd193cml0ZWwodmFsLCAmcHJpdi0+cmVnc1tyZWddKTsKKwlfX3Jhd193cml0ZWwodmFsLCAmcHJpdi0+cmVnc1tyZWddKTsKIH0KIAogc3RhdGljIHZvaWQgcnA1YzAxX2xvY2soc3RydWN0IHJwNWMwMV9wcml2ICpwcml2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKaW5kZXggZGQxNGUyMC4uNmFhYTE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCkBAIC0yOTksMTQgKzI5OSw2IEBACiAJCWlmIChyczVjLT50eXBlID09IHJ0Y19yczVjMzcyYQogCQkJCSYmIChidWYgJiBSUzVDMzcyQV9DVFJMMV9TTDEpKQogCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCWNhc2UgUlRDX0FJRV9PTjoKLQkJLyogdGhlc2UgaXJxIG1hbmFnZW1lbnQgY2FsbHMgb25seSBtYWtlIHNlbnNlIGZvciBjaGlwcwotCQkgKiB3aGljaCBhcmUgd2lyZWQgdXAgdG8gYW4gSVJRLgotCQkgKi8KLQkJaWYgKCFyczVjLT5oYXNfaXJxKQotCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CkBAIC0zMTcsMTIgKzMwOSw2IEBACiAKIAlhZGRyID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6CS8qIGFsYXJtIG9mZiAqLwotCQlidWYgJj0gflJTNUNfQ1RSTDFfQUFMRTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgkvKiBhbGFybSBvbiAqLwotCQlidWYgfD0gUlM1Q19DVFJMMV9BQUxFOwotCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT0ZGOgkvKiB1cGRhdGUgb2ZmICovCiAJCWJ1ZiAmPSB+UlM1Q19DVFJMMV9DVF9NQVNLOwogCQlicmVhazsKQEAgLTM0Nyw2ICszMzMsMzkgQEAKICNlbmRpZgogCiAKK3N0YXRpYyBpbnQgcnM1Y19ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHJzNWMzNzIJCSpyczVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdW5zaWduZWQgY2hhcgkJYnVmOworCWludAkJCXN0YXR1cywgYWRkcjsKKworCWJ1ZiA9IHJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdOworCisJaWYgKCFyczVjLT5oYXNfaXJxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXR1cyA9IHJzNWNfZ2V0X3JlZ3MocnM1Yyk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlhZGRyID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKKwlpZiAoZW5hYmxlZCkKKwkJYnVmIHw9IFJTNUNfQ1RSTDFfQUFMRTsKKwllbHNlCisJCWJ1ZiAmPSB+UlM1Q19DVFJMMV9BQUxFOworCisJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBhZGRyLCBidWYpIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2FuJ3QgdXBkYXRlIGFsYXJtXG4iLAorCQkJcnM1Yy0+cnRjLT5uYW1lKTsKKwkJc3RhdHVzID0gLUVJTzsKKwl9IGVsc2UKKwkJcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gPSBidWY7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKIC8qIE5PVEU6ICBTaW5jZSBSVENfV0tBTE1fe1JELFNFVH0gd2VyZSBvcmlnaW5hbGx5IGRlZmluZWQgZm9yIEVGSSwKICAqIHdoaWNoIG9ubHkgZXhwb3NlcyBhIHBvbGxlZCBwcm9ncmFtbWluZyBpbnRlcmZhY2U7IGFuZCBzaW5jZQogICogdGhlc2UgY2FsbHMgbWFwIGRpcmVjdGx5IHRvIHRob3NlIEVGSSByZXF1ZXN0czsgd2UgZG9uJ3QgZGVtYW5kCkBAIC00NjYsNiArNDg1LDcgQEAKIAkuc2V0X3RpbWUJPSByczVjMzcyX3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IHJzNWNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gcnM1Y19zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSByczVjX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1NZU0ZTKSB8fCBkZWZpbmVkKENPTkZJR19SVENfSU5URl9TWVNGU19NT0RVTEUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKaW5kZXggY2Y5NTNlYy4uYjgwZmEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwpAQCAtNzcsMTggKzc3LDIwIEBACiB9CiAKIC8qIFVwZGF0ZSBjb250cm9sIHJlZ2lzdGVycyAqLwotc3RhdGljIHZvaWQgczNjX3J0Y19zZXRhaWUoaW50IHRvKQorc3RhdGljIGludCBzM2NfcnRjX3NldGFpZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXVuc2lnbmVkIGludCB0bXA7CiAKLQlwcl9kZWJ1ZygiJXM6IGFpZT0lZFxuIiwgX19mdW5jX18sIHRvKTsKKwlwcl9kZWJ1ZygiJXM6IGFpZT0lZFxuIiwgX19mdW5jX18sIGVuYWJsZWQpOwogCiAJdG1wID0gcmVhZGIoczNjX3J0Y19iYXNlICsgUzNDMjQxMF9SVENBTE0pICYgflMzQzI0MTBfUlRDQUxNX0FMTUVOOwogCi0JaWYgKHRvKQorCWlmIChlbmFibGVkKQogCQl0bXAgfD0gUzNDMjQxMF9SVENBTE1fQUxNRU47CiAKIAl3cml0ZWIodG1wLCBzM2NfcnRjX2Jhc2UgKyBTM0MyNDEwX1JUQ0FMTSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzM2NfcnRjX3NldHBpZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBlbmFibGVkKQpAQCAtMzA4LDcgKzMxMCw3IEBACiAKIAl3cml0ZWIoYWxybV9lbiwgYmFzZSArIFMzQzI0MTBfUlRDQUxNKTsKIAotCXMzY19ydGNfc2V0YWllKGFscm0tPmVuYWJsZWQpOworCXMzY19ydGNfc2V0YWllKGRldiwgYWxybS0+ZW5hYmxlZCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0MCw3ICs0NDIsNyBAQAogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogCiAJczNjX3J0Y19zZXRwaWUoJmRldi0+ZGV2LCAwKTsKLQlzM2NfcnRjX3NldGFpZSgwKTsKKwlzM2NfcnRjX3NldGFpZSgmZGV2LT5kZXYsIDApOwogCiAJY2xrX2Rpc2FibGUocnRjX2Nsayk7CiAJY2xrX3B1dChydGNfY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCA4OGVhNTJiLi41ZGZlNWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0zMTQsMTYgKzMxNCw2IEBACiAJCXVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJc3Bpbl9sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKLQkJUlRTUiAmPSB+UlRTUl9BTEU7Ci0JCXNwaW5fdW5sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBSVENfQUlFX09OOgotCQlzcGluX2xvY2tfaXJxKCZzYTExMDBfcnRjX2xvY2spOwotCQlSVFNSIHw9IFJUU1JfQUxFOwotCQlzcGluX3VubG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7Ci0JCXJldHVybiAwOwogCWNhc2UgUlRDX1VJRV9PRkY6CiAJCXNwaW5fbG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7CiAJCVJUU1IgJj0gflJUU1JfSFpFOwpAQCAtMzM4LDYgKzMyOCwxNyBAQAogCXJldHVybiAtRU5PSU9DVExDTUQ7CiB9CiAKK3N0YXRpYyBpbnQgc2ExMTAwX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3Bpbl9sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKKwlpZiAoZW5hYmxlZCkKKwkJUlRTUiB8PSBSVFNSX0FMRTsKKwllbHNlCisJCVJUU1IgJj0gflJUU1JfQUxFOworCXNwaW5fdW5sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzYTExMDBfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJcnRjX3RpbWVfdG9fdG0oUkNOUiwgdG0pOwpAQCAtNDEwLDYgKzQxMSw3IEBACiAJLnByb2MgPSBzYTExMDBfcnRjX3Byb2MsCiAJLmlycV9zZXRfZnJlcSA9IHNhMTEwMF9pcnFfc2V0X2ZyZXEsCiAJLmlycV9zZXRfc3RhdGUgPSBzYTExMDBfaXJxX3NldF9zdGF0ZSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHNhMTEwMF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgc2ExMTAwX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNoLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwppbmRleCAwNmU0MWVkLi45MzMxNGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2guYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwpAQCAtMzUwLDEwICszNTAsNiBAQAogCXVuc2lnbmVkIGludCByZXQgPSAwOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCWNhc2UgUlRDX0FJRV9PTjoKLQkJc2hfcnRjX3NldGFpZShkZXYsIGNtZCA9PSBSVENfQUlFX09OKTsKLQkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09GRjoKIAkJcnRjLT5wZXJpb2RpY19mcmVxICY9IH5QRl9PWFM7CiAJCXNoX3J0Y19zZXRjaWUoZGV2LCAwKTsKQEAgLTM2OSw2ICszNjUsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHNoX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc2hfcnRjX3NldGFpZShkZXYsIGVuYWJsZWQpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNoX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKQEAgLTYwNCw2ICs2MDYsNyBAQAogCS5pcnFfc2V0X3N0YXRlCT0gc2hfcnRjX2lycV9zZXRfc3RhdGUsCiAJLmlycV9zZXRfZnJlcQk9IHNoX3J0Y19pcnFfc2V0X2ZyZXEsCiAJLnByb2MJCT0gc2hfcnRjX3Byb2MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBzaF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXRlc3QuYyBiL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMKaW5kZXggNTE3MjVmNy4uYTgyZDZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXRlc3QuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jCkBAIC01MCwyNCArNTAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRlc3RfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKLQl1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgdGVzdF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGUpCiB7Ci0JLyogV2UgZG8gc3VwcG9ydCBpbnRlcnJ1cHRzLCB0aGV5J3JlIGdlbmVyYXRlZAotCSAqIHVzaW5nIHRoZSBzeXNmcyBpbnRlcmZhY2UuCi0JICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19QSUVfT046Ci0JY2FzZSBSVENfUElFX09GRjoKLQljYXNlIFJUQ19VSUVfT046Ci0JY2FzZSBSVENfVUlFX09GRjoKLQljYXNlIFJUQ19BSUVfT046Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJcmV0dXJuIDA7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHRlc3RfcnRjX29wcyA9IHsKQEAgLTc2LDcgKzYxLDcgQEAKIAkucmVhZF9hbGFybSA9IHRlc3RfcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybSA9IHRlc3RfcnRjX3NldF9hbGFybSwKIAkuc2V0X21tc3MgPSB0ZXN0X3J0Y19zZXRfbW1zcywKLQkuaW9jdGwgPSB0ZXN0X3J0Y19pb2N0bCwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHRlc3RfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgc3NpemVfdCB0ZXN0X2lycV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwppbmRleCBjMzI0NDI0Li43NjkxOTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCkBAIC0yNDAsMjYgKzI0MCw2IEBACiBzdGF0aWMgaW50IHZyNDF4eF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PTjoKLQkJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JCWlmICghYWxhcm1fZW5hYmxlZCkgewotCQkJZW5hYmxlX2lycShhaWVfaXJxKTsKLQkJCWFsYXJtX2VuYWJsZWQgPSAxOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCQlpZiAoYWxhcm1fZW5hYmxlZCkgewotCQkJZGlzYWJsZV9pcnEoYWllX2lycSk7Ci0JCQlhbGFybV9lbmFibGVkID0gMDsKLQkJfQotCi0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCQlicmVhazsKIAljYXNlIFJUQ19FUE9DSF9SRUFEOgogCQlyZXR1cm4gcHV0X3VzZXIoZXBvY2gsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZyk7CiAJY2FzZSBSVENfRVBPQ0hfU0VUOgpAQCAtMjc1LDYgKzI1NSwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZyNDF4eF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKwlpZiAoZW5hYmxlZCkgeworCQlpZiAoIWFsYXJtX2VuYWJsZWQpIHsKKwkJCWVuYWJsZV9pcnEoYWllX2lycSk7CisJCQlhbGFybV9lbmFibGVkID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChhbGFybV9lbmFibGVkKSB7CisJCQlkaXNhYmxlX2lycShhaWVfaXJxKTsKKwkJCWFsYXJtX2VuYWJsZWQgPSAwOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgZWxhcHNlZHRpbWVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKilkZXZfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwppbmRleCA0MTU1ODA1Li4yYjc3MWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKQEAgLTMxOSw2ICszMTksOSBAQAogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWxjdSA9IHByaXZhdGUtPmxjdTsKKwkvKiBub3RoaW5nIHRvIGRvIGlmIGFscmVhZHkgZGlzY29ubmVjdGVkICovCisJaWYgKCFsY3UpCisJCXJldHVybjsKIAlkZXZpY2UtPmRpc2NpcGxpbmUtPmdldF91aWQoZGV2aWNlLCAmdWlkKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGN1LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9kZWxfaW5pdCgmZGV2aWNlLT5hbGlhc19saXN0KTsKQEAgLTY4MCw2ICs2ODMsOSBAQAogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWxjdSA9IHByaXZhdGUtPmxjdTsKKwkvKiBub3RoaW5nIHRvIGRvIGlmIGFscmVhZHkgcmVtb3ZlZCAqLworCWlmICghbGN1KQorCQlyZXR1cm4gMDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGN1LT5sb2NrLCBmbGFncyk7CiAJX3JlbW92ZV9kZXZpY2VfZnJvbV9sY3UobGN1LCBkZXZpY2UpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxjdS0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IDMxODY3MmQuLmE5ZmUyM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTcyLDcgKzcyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2N3X2RldmljZV9pZCBkYXNkX2Vja2RfaWRzW10gPSB7CiAJeyBDQ1dfREVWSUNFX0RFVlRZUEUgKDB4Mzk5MCwgMCwgMHgzMzkwLCAwKSwgLmRyaXZlcl9pbmZvID0gMHgxfSwKIAl7IENDV19ERVZJQ0VfREVWVFlQRSAoMHgyMTA1LCAwLCAweDMzOTAsIDApLCAuZHJpdmVyX2luZm8gPSAweDJ9LAotCXsgQ0NXX0RFVklDRV9ERVZUWVBFICgweDM4ODAsIDAsIDB4MzM5MCwgMCksIC5kcml2ZXJfaW5mbyA9IDB4M30sCisJeyBDQ1dfREVWSUNFX0RFVlRZUEUgKDB4Mzg4MCwgMCwgMHgzMzgwLCAwKSwgLmRyaXZlcl9pbmZvID0gMHgzfSwKIAl7IENDV19ERVZJQ0VfREVWVFlQRSAoMHgzOTkwLCAwLCAweDMzODAsIDApLCAuZHJpdmVyX2luZm8gPSAweDR9LAogCXsgQ0NXX0RFVklDRV9ERVZUWVBFICgweDIxMDUsIDAsIDB4MzM4MCwgMCksIC5kcml2ZXJfaW5mbyA9IDB4NX0sCiAJeyBDQ1dfREVWSUNFX0RFVlRZUEUgKDB4OTM0MywgMCwgMHg5MzQ1LCAwKSwgLmRyaXZlcl9pbmZvID0gMHg2fSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL3hwcmFtLmMKaW5kZXggYzg4MWExNC4uMWY2YTRkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL3hwcmFtLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL3hwcmFtLmMKQEAgLTYyLDggKzYyLDggQEAKIC8qCiAgKiBQYXJhbWV0ZXIgcGFyc2luZyBmdW5jdGlvbnMuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBkZXZzID0gWFBSQU1fREVWUzsKLXN0YXRpYyBjaGFyIF9faW5pdGRhdGEgKnNpemVzW1hQUkFNX01BWF9ERVZTXTsKK3N0YXRpYyBpbnQgZGV2cyA9IFhQUkFNX0RFVlM7CitzdGF0aWMgY2hhciAqc2l6ZXNbWFBSQU1fTUFYX0RFVlNdOwogCiBtb2R1bGVfcGFyYW0oZGV2cywgaW50LCAwKTsKIG1vZHVsZV9wYXJhbV9hcnJheShzaXplcywgY2hhcnAsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMKaW5kZXggOGNkNThlNC4uNWFkNDRkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9rZXlib2FyZC5jCkBAIC00NjAsNyArNDYwLDggQEAKIAkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXZvaWQgX191c2VyICphcmdwOwotCWludCBjdCwgcGVybTsKKwl1bnNpZ25lZCBpbnQgY3Q7CisJaW50IHBlcm07CiAKIAlhcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmggYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmgKaW5kZXggN2EyNDJmMC4uMjY3YjU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaApAQCAtMjgwLDYgKzI4MCwxNCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCit0YXBlX2RvX2lvX2FzeW5jX2ZyZWUoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJcmVxdWVzdC0+Y2FsbGJhY2sgPSAodm9pZCAqKSB0YXBlX2ZyZWVfcmVxdWVzdDsKKwlyZXF1ZXN0LT5jYWxsYmFja19kYXRhID0gTlVMTDsKKwl0YXBlX2RvX2lvX2FzeW5jKGRldmljZSwgcmVxdWVzdCk7Cit9CisKIGV4dGVybiBpbnQgdGFwZV9vcGVyX2hhbmRsZXIoaW50IGlycSwgaW50IHN0YXR1cyk7CiBleHRlcm4gdm9pZCB0YXBlX25vcGVyX2hhbmRsZXIoaW50IGlycSwgaW50IHN0YXR1cyk7CiBleHRlcm4gaW50IHRhcGVfb3BlbihzdHJ1Y3QgdGFwZV9kZXZpY2UgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCmluZGV4IGMxN2YzNWIuLmMyNjUxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCkBAIC01MywyMyArNTMsMTEgQEAKICAqIE1lZGl1bSBzZW5zZSBmb3IgMzR4eCB0YXBlcy4gVGhlcmUgaXMgbm8gJ3JlYWwnIG1lZGl1bSBzZW5zZSBjYWxsLgogICogU28gd2UganVzdCBkbyBhIG5vcm1hbCBzZW5zZS4KICAqLwotc3RhdGljIGludAotdGFwZV8zNHh4X21lZGl1bV9zZW5zZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyB2b2lkIF9fdGFwZV8zNHh4X21lZGl1bV9zZW5zZShzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0KQogewotCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7Ci0JdW5zaWduZWQgY2hhciAgICAgICAqc2Vuc2U7Ci0JaW50ICAgICAgICAgICAgICAgICAgcmM7CisJc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UgPSByZXF1ZXN0LT5kZXZpY2U7CisJdW5zaWduZWQgY2hhciAqc2Vuc2U7CiAKLQlyZXF1ZXN0ID0gdGFwZV9hbGxvY19yZXF1ZXN0KDEsIDMyKTsKLQlpZiAoSVNfRVJSKHJlcXVlc3QpKSB7Ci0JCURCRl9FWENFUFRJT04oNiwgIk1TRU4gZmFpbFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOwotCX0KLQotCXJlcXVlc3QtPm9wID0gVE9fTVNFTjsKLQl0YXBlX2Njd19lbmQocmVxdWVzdC0+Y3BhZGRyLCBTRU5TRSwgMzIsIHJlcXVlc3QtPmNwZGF0YSk7Ci0KLQlyYyA9IHRhcGVfZG9faW9faW50ZXJydXB0aWJsZShkZXZpY2UsIHJlcXVlc3QpOwogCWlmIChyZXF1ZXN0LT5yYyA9PSAwKSB7CiAJCXNlbnNlID0gcmVxdWVzdC0+Y3BkYXRhOwogCkBAIC04OCwxNSArNzYsNDcgQEAKIAkJCWRldmljZS0+dGFwZV9nZW5lcmljX3N0YXR1cyB8PSBHTVRfV1JfUFJPVCh+MCk7CiAJCWVsc2UKIAkJCWRldmljZS0+dGFwZV9nZW5lcmljX3N0YXR1cyAmPSB+R01UX1dSX1BST1QofjApOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCURCRl9FVkVOVCg0LCAidGFwZV8zNHh4OiBtZWRpdW0gc2Vuc2UgZmFpbGVkIHdpdGggcmM9JWRcbiIsCiAJCQlyZXF1ZXN0LT5yYyk7Ci0JfQogCXRhcGVfZnJlZV9yZXF1ZXN0KHJlcXVlc3QpOworfQogCitzdGF0aWMgaW50IHRhcGVfMzR4eF9tZWRpdW1fc2Vuc2Uoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdDsKKwlpbnQgcmM7CisKKwlyZXF1ZXN0ID0gdGFwZV9hbGxvY19yZXF1ZXN0KDEsIDMyKTsKKwlpZiAoSVNfRVJSKHJlcXVlc3QpKSB7CisJCURCRl9FWENFUFRJT04oNiwgIk1TRU4gZmFpbFxuIik7CisJCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOworCX0KKworCXJlcXVlc3QtPm9wID0gVE9fTVNFTjsKKwl0YXBlX2Njd19lbmQocmVxdWVzdC0+Y3BhZGRyLCBTRU5TRSwgMzIsIHJlcXVlc3QtPmNwZGF0YSk7CisJcmMgPSB0YXBlX2RvX2lvX2ludGVycnVwdGlibGUoZGV2aWNlLCByZXF1ZXN0KTsKKwlfX3RhcGVfMzR4eF9tZWRpdW1fc2Vuc2UocmVxdWVzdCk7CiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgdm9pZCB0YXBlXzM0eHhfbWVkaXVtX3NlbnNlX2FzeW5jKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlyZXF1ZXN0ID0gdGFwZV9hbGxvY19yZXF1ZXN0KDEsIDMyKTsKKwlpZiAoSVNfRVJSKHJlcXVlc3QpKSB7CisJCURCRl9FWENFUFRJT04oNiwgIk1TRU4gZmFpbFxuIik7CisJCXJldHVybjsKKwl9CisKKwlyZXF1ZXN0LT5vcCA9IFRPX01TRU47CisJdGFwZV9jY3dfZW5kKHJlcXVlc3QtPmNwYWRkciwgU0VOU0UsIDMyLCByZXF1ZXN0LT5jcGRhdGEpOworCXJlcXVlc3QtPmNhbGxiYWNrID0gKHZvaWQgKikgX190YXBlXzM0eHhfbWVkaXVtX3NlbnNlOworCXJlcXVlc3QtPmNhbGxiYWNrX2RhdGEgPSBOVUxMOworCXRhcGVfZG9faW9fYXN5bmMoZGV2aWNlLCByZXF1ZXN0KTsKK30KKwogc3RydWN0IHRhcGVfMzR4eF93b3JrIHsKIAlzdHJ1Y3QgdGFwZV9kZXZpY2UJKmRldmljZTsKIAllbnVtIHRhcGVfb3AJCSBvcDsKQEAgLTEwOSw2ICsxMjksOSBAQAogICogaXMgaW5zZXJ0ZWQgYnV0IGNhbm5vdCBjYWxsIHRhcGVfZG9faW8qIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQuCiAgKiBNYXliZSB0aGF0J3MgdXNlZnVsIGZvciBvdGhlciBhY3Rpb25zIHdlIHdhbnQgdG8gc3RhcnQgZnJvbSB0aGUKICAqIGludGVycnVwdCBoYW5kbGVyLgorICogTm90ZTogdGhlIHdvcmsgaGFuZGxlciBpcyBjYWxsZWQgYnkgdGhlIHN5c3RlbSB3b3JrIHF1ZXVlLiBUaGUgdGFwZQorICogY29tbWFuZHMgc3RhcnRlZCBieSB0aGUgaGFuZGxlciBuZWVkIHRvIGJlIGFzeW5jaHJvdW5vdXMsIG90aGVyd2lzZQorICogYSBkZWFkbG9jayBjYW4gb2NjdXIgZS5nLiBpbiBjYXNlIG9mIGEgZGVmZXJyZWQgY2M9MSAoc2VlIF9fdGFwZV9kb19pcnEpLgogICovCiBzdGF0aWMgdm9pZAogdGFwZV8zNHh4X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0xMTksNyArMTQyLDcgQEAKIAogCXN3aXRjaChwLT5vcCkgewogCQljYXNlIFRPX01TRU46Ci0JCQl0YXBlXzM0eHhfbWVkaXVtX3NlbnNlKGRldmljZSk7CisJCQl0YXBlXzM0eHhfbWVkaXVtX3NlbnNlX2FzeW5jKGRldmljZSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCURCRl9FVkVOVCgzLCAiVDM0WFg6IGludGVybmFsIGVycm9yOiB1bmtub3duIHdvcmtcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYwppbmRleCBmYmUzNjFmLi5kZTJlOTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYwpAQCAtMzI5LDE3ICszMjksMTcgQEAKIC8qCiAgKiBFbmFibGUgZW5jcnlwdGlvbgogICovCi1zdGF0aWMgaW50IHRhcGVfMzU5Ml9lbmFibGVfY3J5cHQoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgc3RydWN0IHRhcGVfcmVxdWVzdCAqX190YXBlXzM1OTJfZW5hYmxlX2NyeXB0KHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CiAJY2hhciAqZGF0YTsKIAogCURCRl9FVkVOVCg2LCAidGFwZV8zNTkyX2VuYWJsZV9jcnlwdFxuIik7CiAJaWYgKCFjcnlwdF9zdXBwb3J0ZWQoZGV2aWNlKSkKLQkJcmV0dXJuIC1FTk9TWVM7CisJCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwogCXJlcXVlc3QgPSB0YXBlX2FsbG9jX3JlcXVlc3QoMiwgNzIpOwogCWlmIChJU19FUlIocmVxdWVzdCkpCi0JCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOworCQlyZXR1cm4gcmVxdWVzdDsKIAlkYXRhID0gcmVxdWVzdC0+Y3BkYXRhOwogCW1lbXNldChkYXRhLDAsNzIpOwogCkBAIC0zNTQsMjMgKzM1NCw0MiBAQAogCXJlcXVlc3QtPm9wID0gVE9fQ1JZUFRfT047CiAJdGFwZV9jY3dfY2MocmVxdWVzdC0+Y3BhZGRyLCBNT0RFX1NFVF9DQiwgMzYsIGRhdGEpOwogCXRhcGVfY2N3X2VuZChyZXF1ZXN0LT5jcGFkZHIgKyAxLCBNT0RFX1NFVF9DQiwgMzYsIGRhdGEgKyAzNik7CisJcmV0dXJuIHJlcXVlc3Q7Cit9CisKK3N0YXRpYyBpbnQgdGFwZV8zNTkyX2VuYWJsZV9jcnlwdChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJcmVxdWVzdCA9IF9fdGFwZV8zNTkyX2VuYWJsZV9jcnlwdChkZXZpY2UpOworCWlmIChJU19FUlIocmVxdWVzdCkpCisJCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOwogCXJldHVybiB0YXBlX2RvX2lvX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKIH0KIAorc3RhdGljIHZvaWQgdGFwZV8zNTkyX2VuYWJsZV9jcnlwdF9hc3luYyhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJcmVxdWVzdCA9IF9fdGFwZV8zNTkyX2VuYWJsZV9jcnlwdChkZXZpY2UpOworCWlmICghSVNfRVJSKHJlcXVlc3QpKQorCQl0YXBlX2RvX2lvX2FzeW5jX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKK30KKwogLyoKICAqIERpc2FibGUgZW5jcnlwdGlvbgogICovCi1zdGF0aWMgaW50IHRhcGVfMzU5Ml9kaXNhYmxlX2NyeXB0KHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQorc3RhdGljIHN0cnVjdCB0YXBlX3JlcXVlc3QgKl9fdGFwZV8zNTkyX2Rpc2FibGVfY3J5cHQoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdDsKIAljaGFyICpkYXRhOwogCiAJREJGX0VWRU5UKDYsICJ0YXBlXzM1OTJfZGlzYWJsZV9jcnlwdFxuIik7CiAJaWYgKCFjcnlwdF9zdXBwb3J0ZWQoZGV2aWNlKSkKLQkJcmV0dXJuIC1FTk9TWVM7CisJCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwogCXJlcXVlc3QgPSB0YXBlX2FsbG9jX3JlcXVlc3QoMiwgNzIpOwogCWlmIChJU19FUlIocmVxdWVzdCkpCi0JCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOworCQlyZXR1cm4gcmVxdWVzdDsKIAlkYXRhID0gcmVxdWVzdC0+Y3BkYXRhOwogCW1lbXNldChkYXRhLDAsNzIpOwogCkBAIC0zODMsOSArNDAyLDI4IEBACiAJdGFwZV9jY3dfY2MocmVxdWVzdC0+Y3BhZGRyLCBNT0RFX1NFVF9DQiwgMzYsIGRhdGEpOwogCXRhcGVfY2N3X2VuZChyZXF1ZXN0LT5jcGFkZHIgKyAxLCBNT0RFX1NFVF9DQiwgMzYsIGRhdGEgKyAzNik7CiAKKwlyZXR1cm4gcmVxdWVzdDsKK30KKworc3RhdGljIGludCB0YXBlXzM1OTJfZGlzYWJsZV9jcnlwdChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJcmVxdWVzdCA9IF9fdGFwZV8zNTkyX2Rpc2FibGVfY3J5cHQoZGV2aWNlKTsKKwlpZiAoSVNfRVJSKHJlcXVlc3QpKQorCQlyZXR1cm4gUFRSX0VSUihyZXF1ZXN0KTsKIAlyZXR1cm4gdGFwZV9kb19pb19mcmVlKGRldmljZSwgcmVxdWVzdCk7CiB9CiAKK3N0YXRpYyB2b2lkIHRhcGVfMzU5Ml9kaXNhYmxlX2NyeXB0X2FzeW5jKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlyZXF1ZXN0ID0gX190YXBlXzM1OTJfZGlzYWJsZV9jcnlwdChkZXZpY2UpOworCWlmICghSVNfRVJSKHJlcXVlc3QpKQorCQl0YXBlX2RvX2lvX2FzeW5jX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKK30KKwogLyoKICAqIElPQ1RMOiBTZXQgZW5jcnlwdGlvbiBzdGF0dXMKICAqLwpAQCAtNDU3LDggKzQ5NSw3IEBACiAvKgogICogU0VOU0UgTWVkaXVtOiBHZXQgU2Vuc2UgZGF0YSBhYm91dCBtZWRpdW0gc3RhdGUKICAqLwotc3RhdGljIGludAotdGFwZV8zNTkwX3NlbnNlX21lZGl1bShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgdGFwZV8zNTkwX3NlbnNlX21lZGl1bShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OwogCkBAIC00NzAsNiArNTA3LDE4IEBACiAJcmV0dXJuIHRhcGVfZG9faW9fZnJlZShkZXZpY2UsIHJlcXVlc3QpOwogfQogCitzdGF0aWMgdm9pZCB0YXBlXzM1OTBfc2Vuc2VfbWVkaXVtX2FzeW5jKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlyZXF1ZXN0ID0gdGFwZV9hbGxvY19yZXF1ZXN0KDEsIDEyOCk7CisJaWYgKElTX0VSUihyZXF1ZXN0KSkKKwkJcmV0dXJuOworCXJlcXVlc3QtPm9wID0gVE9fTVNFTjsKKwl0YXBlX2Njd19lbmQocmVxdWVzdC0+Y3BhZGRyLCBNRURJVU1fU0VOU0UsIDEyOCwgcmVxdWVzdC0+Y3BkYXRhKTsKKwl0YXBlX2RvX2lvX2FzeW5jX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKK30KKwogLyoKICAqIE1UVEVMTDogVGVsbCBibG9jay4gUmV0dXJuIHRoZSBudW1iZXIgb2YgYmxvY2sgcmVsYXRpdmUgdG8gY3VycmVudCBmaWxlLgogICovCkBAIC01NDYsMTUgKzU5NSwxNCBAQAogICogMi4gVGhlIGF0dGVudGlvbiBtc2cgaXMgd3JpdHRlbiB0byB0aGUgInJlYWQgc3Vic3lzdGVtIGRhdGEiIGJ1ZmZlci4KICAqIEluIHRoaXMgY2FzZSB3ZSBwcm9iYWJseSBzaG91bGQgcHJpbnQgaXQgdG8gdGhlIGNvbnNvbGUuCiAgKi8KLXN0YXRpYyBpbnQKLXRhcGVfMzU5MF9yZWFkX2F0dG1zZyhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyB2b2lkIHRhcGVfMzU5MF9yZWFkX2F0dG1zZ19hc3luYyhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OwogCWNoYXIgKmJ1ZjsKIAogCXJlcXVlc3QgPSB0YXBlX2FsbG9jX3JlcXVlc3QoMywgNDA5Nik7CiAJaWYgKElTX0VSUihyZXF1ZXN0KSkKLQkJcmV0dXJuIFBUUl9FUlIocmVxdWVzdCk7CisJCXJldHVybjsKIAlyZXF1ZXN0LT5vcCA9IFRPX1JFQURfQVRUTVNHOwogCWJ1ZiA9IHJlcXVlc3QtPmNwZGF0YTsKIAlidWZbMF0gPSBQUkVQX1JEX1NTX0RBVEE7CkBAIC01NjIsMTIgKzYxMCwxNSBAQAogCXRhcGVfY2N3X2NjKHJlcXVlc3QtPmNwYWRkciwgUEVSRk9STV9TU19GVU5DLCAxMiwgYnVmKTsKIAl0YXBlX2Njd19jYyhyZXF1ZXN0LT5jcGFkZHIgKyAxLCBSRUFEX1NTX0RBVEEsIDQwOTYgLSAxMiwgYnVmICsgMTIpOwogCXRhcGVfY2N3X2VuZChyZXF1ZXN0LT5jcGFkZHIgKyAyLCBOT1AsIDAsIE5VTEwpOwotCXJldHVybiB0YXBlX2RvX2lvX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKKwl0YXBlX2RvX2lvX2FzeW5jX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKIH0KIAogLyoKICAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBzY2hlZHVsZSBmb2xsb3ctdXAgYWN0aW9ucyBmcm9tIHdpdGhpbiBhbgogICogaW50ZXJydXB0IGNvbnRleHQgKGxpa2UgdW5zb2xpY2l0ZWQgaW50ZXJydXB0cykuCisgKiBOb3RlOiB0aGUgd29yayBoYW5kbGVyIGlzIGNhbGxlZCBieSB0aGUgc3lzdGVtIHdvcmsgcXVldWUuIFRoZSB0YXBlCisgKiBjb21tYW5kcyBzdGFydGVkIGJ5IHRoZSBoYW5kbGVyIG5lZWQgdG8gYmUgYXN5bmNocm91bm91cywgb3RoZXJ3aXNlCisgKiBhIGRlYWRsb2NrIGNhbiBvY2N1ciBlLmcuIGluIGNhc2Ugb2YgYSBkZWZlcnJlZCBjYz0xIChzZWUgX190YXBlX2RvX2lycSkuCiAgKi8KIHN0cnVjdCB3b3JrX2hhbmRsZXJfZGF0YSB7CiAJc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2U7CkBAIC01ODMsMTYgKzYzNCwxNiBAQAogCiAJc3dpdGNoIChwLT5vcCkgewogCWNhc2UgVE9fTVNFTjoKLQkJdGFwZV8zNTkwX3NlbnNlX21lZGl1bShwLT5kZXZpY2UpOworCQl0YXBlXzM1OTBfc2Vuc2VfbWVkaXVtX2FzeW5jKHAtPmRldmljZSk7CiAJCWJyZWFrOwogCWNhc2UgVE9fUkVBRF9BVFRNU0c6Ci0JCXRhcGVfMzU5MF9yZWFkX2F0dG1zZyhwLT5kZXZpY2UpOworCQl0YXBlXzM1OTBfcmVhZF9hdHRtc2dfYXN5bmMocC0+ZGV2aWNlKTsKIAkJYnJlYWs7CiAJY2FzZSBUT19DUllQVF9PTjoKLQkJdGFwZV8zNTkyX2VuYWJsZV9jcnlwdChwLT5kZXZpY2UpOworCQl0YXBlXzM1OTJfZW5hYmxlX2NyeXB0X2FzeW5jKHAtPmRldmljZSk7CiAJCWJyZWFrOwogCWNhc2UgVE9fQ1JZUFRfT0ZGOgotCQl0YXBlXzM1OTJfZGlzYWJsZV9jcnlwdChwLT5kZXZpY2UpOworCQl0YXBlXzM1OTJfZGlzYWJsZV9jcnlwdF9hc3luYyhwLT5kZXZpY2UpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEQkZfRVZFTlQoMywgIlQzNTkwOiB3b3JrIGhhbmRsZXIgdW5kZWZpbmVkIGZvciAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCBlOWZmZjJiLi41NjQwYzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTQ3Niw3ICs0NzYsNyBAQAogc3RhdGljIGludCBnZXRfaW5ib3VuZF9idWZmZXJfZnJvbnRpZXIoc3RydWN0IHFkaW9fcSAqcSkKIHsKIAlpbnQgY291bnQsIHN0b3A7Ci0JdW5zaWduZWQgY2hhciBzdGF0ZTsKKwl1bnNpZ25lZCBjaGFyIHN0YXRlID0gMDsKIAogCS8qCiAJICogRG9uJ3QgY2hlY2sgMTI4IGJ1ZmZlcnMsIGFzIG90aGVyd2lzZSBxZGlvX2luYm91bmRfcV9tb3ZlZApAQCAtNjQzLDcgKzY0Myw3IEBACiBzdGF0aWMgaW50IGdldF9vdXRib3VuZF9idWZmZXJfZnJvbnRpZXIoc3RydWN0IHFkaW9fcSAqcSkKIHsKIAlpbnQgY291bnQsIHN0b3A7Ci0JdW5zaWduZWQgY2hhciBzdGF0ZTsKKwl1bnNpZ25lZCBjaGFyIHN0YXRlID0gMDsKIAogCWlmIChuZWVkX3NpZ2Ffc3luYyhxKSkKIAkJaWYgKCgocXVldWVfdHlwZShxKSAhPSBRRElPX0lRRElPX1FGTVQpICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCmluZGV4IDY1ZWJlZTAuLmI2YTYzNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCkBAIC01NjUsNyArNTY1LDcgQEAKIAlzdHJ1Y3QgaXVjdl9ldmVudCBldjsKIAlpbnQgcmM7CiAKLQlpZiAobWVtY21wKGl1Y3ZNYWdpYywgaXB1c2VyLCBzaXplb2YoaXB1c2VyKSkpCisJaWYgKG1lbWNtcChpdWN2TWFnaWMsIGlwdXNlciwgMTYpKQogCQkvKiBpcHVzZXIgbXVzdCBtYXRjaCBpdWN2TWFnaWMuICovCiAJCXJldHVybiAtRUlOVkFMOwogCXJjID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwppbmRleCAyOWY4NDhiLi4wMTlhZTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCkBAIC05ODgsMTYgKzk4OCwzMCBAQAogCWNocF9kc2MgPSAoc3RydWN0IGNoYW5uZWxQYXRoX2RzYyAqKWNjd19kZXZpY2VfZ2V0X2NocF9kZXNjKGNjd2RldiwgMCk7CiAJaWYgKGNocF9kc2MgIT0gTlVMTCkgewogCQkvKiBDSFBQIGZpZWxkIGJpdCA2ID09IDEgLT4gc2luZ2xlIHF1ZXVlICovCi0JCWlmICgoY2hwX2RzYy0+Y2hwcCAmIDB4MDIpID09IDB4MDIpCisJCWlmICgoY2hwX2RzYy0+Y2hwcCAmIDB4MDIpID09IDB4MDIpIHsKKwkJCWlmICgoYXRvbWljX3JlYWQoJmNhcmQtPnFkaW8uc3RhdGUpICE9CisJCQkJUUVUSF9RRElPX1VOSU5JVElBTElaRUQpICYmCisJCQkgICAgKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9PSA0KSkKKwkJCQkvKiBjaGFuZ2UgZnJvbSA0IHRvIDEgb3V0Ym91bmQgcXVldWVzICovCisJCQkJcWV0aF9mcmVlX3FkaW9fYnVmZmVycyhjYXJkKTsKIAkJCWNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9IDE7CisJCQlpZiAoY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSAhPSAwKQorCQkJCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCisJCQkJCSJQcmlvcml0eSBRdWV1ZWluZyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKChhdG9taWNfcmVhZCgmY2FyZC0+cWRpby5zdGF0ZSkgIT0KKwkJCQlRRVRIX1FESU9fVU5JTklUSUFMSVpFRCkgJiYKKwkJCSAgICAoY2FyZC0+cWRpby5ub19vdXRfcXVldWVzID09IDEpKSB7CisJCQkJLyogY2hhbmdlIGZyb20gMSB0byA0IG91dGJvdW5kIHF1ZXVlcyAqLworCQkJCXFldGhfZnJlZV9xZGlvX2J1ZmZlcnMoY2FyZCk7CisJCQkJY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSA9IDI7CisJCQl9CisJCQljYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPSA0OworCQl9CiAJCWNhcmQtPmluZm8uZnVuY19sZXZlbCA9IDB4NDEwMCArIGNocF9kc2MtPmRlc2M7CiAJCWtmcmVlKGNocF9kc2MpOwogCX0KLQlpZiAoY2FyZC0+cWRpby5ub19vdXRfcXVldWVzID09IDEpIHsKLQkJY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSA9IDA7Ci0JCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkiUHJpb3JpdHkgUXVldWVpbmcgbm90IHN1cHBvcnRlZFxuIik7Ci0JfQogCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAibnI6JXgiLCBjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMpOwogCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAibHZsOiUwMngiLCBjYXJkLT5pbmZvLmZ1bmNfbGV2ZWwpOwogCXJldHVybjsKQEAgLTE4MzIsMzMgKzE4NDYsNiBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSBpbnQgcWV0aF9nZXRfbWF4X210dV9mb3JfY2FyZChpbnQgY2FyZHR5cGUpCi17Ci0Jc3dpdGNoIChjYXJkdHlwZSkgewotCi0JY2FzZSBRRVRIX0NBUkRfVFlQRV9VTktOT1dOOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NEOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NOOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NNOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NYOgotCQlyZXR1cm4gNjE0NDA7Ci0JY2FzZSBRRVRIX0NBUkRfVFlQRV9JUUQ6Ci0JCXJldHVybiA1NzM0NDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMTUwMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHFldGhfZ2V0X210dV9vdXRfb2ZfbXBjKGludCBjYXJkdHlwZSkKLXsKLQlzd2l0Y2ggKGNhcmR0eXBlKSB7Ci0JY2FzZSBRRVRIX0NBUkRfVFlQRV9JUUQ6Ci0JCXJldHVybiAxOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQogc3RhdGljIGlubGluZSBpbnQgcWV0aF9nZXRfbXR1X291dG9mX2ZyYW1lc2l6ZShpbnQgZnJhbWVzaXplKQogewogCXN3aXRjaCAoZnJhbWVzaXplKSB7CkBAIC0xODgxLDEwICsxODY4LDkgQEAKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX09TRDoKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTToKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX09TWDoKLQkJcmV0dXJuICgobXR1ID49IDU3NikgJiYgKG10dSA8PSA2MTQ0MCkpOwogCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgogCQlyZXR1cm4gKChtdHUgPj0gNTc2KSAmJgotCQkJKG10dSA8PSBjYXJkLT5pbmZvLm1heF9tdHUgKyA0MDk2IC0gMzIpKTsKKwkJCShtdHUgPD0gY2FyZC0+aW5mby5tYXhfbXR1KSk7CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU046CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9VTktOT1dOOgogCWRlZmF1bHQ6CkBAIC0xOTA3LDcgKzE4OTMsNyBAQAogCW1lbWNweSgmY2FyZC0+dG9rZW4udWxwX2ZpbHRlcl9yLAogCSAgICAgICBRRVRIX1VMUF9FTkFCTEVfUkVTUF9GSUxURVJfVE9LRU4oaW9iLT5kYXRhKSwKIAkgICAgICAgUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKLQlpZiAocWV0aF9nZXRfbXR1X291dF9vZl9tcGMoY2FyZC0+aW5mby50eXBlKSkgeworCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7CiAJCW1lbWNweSgmZnJhbWVzaXplLCBRRVRIX1VMUF9FTkFCTEVfUkVTUF9NQVhfTVRVKGlvYi0+ZGF0YSksIDIpOwogCQltdHUgPSBxZXRoX2dldF9tdHVfb3V0b2ZfZnJhbWVzaXplKGZyYW1lc2l6ZSk7CiAJCWlmICghbXR1KSB7CkBAIC0xOTE1LDEyICsxOTAxLDIxIEBACiAJCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIiAgcmMlZCIsIGlvYi0+cmMpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FyZC0+aW5mby5tYXhfbXR1ID0gbXR1OworCQlpZiAoY2FyZC0+aW5mby5pbml0aWFsX210dSAmJiAoY2FyZC0+aW5mby5pbml0aWFsX210dSAhPSBtdHUpKSB7CisJCQkvKiBmcmFtZSBzaXplIGhhcyBjaGFuZ2VkICovCisJCQlpZiAoY2FyZC0+ZGV2ICYmCisJCQkgICAgKChjYXJkLT5kZXYtPm10dSA9PSBjYXJkLT5pbmZvLmluaXRpYWxfbXR1KSB8fAorCQkJICAgICAoY2FyZC0+ZGV2LT5tdHUgPiBtdHUpKSkKKwkJCQljYXJkLT5kZXYtPm10dSA9IG10dTsKKwkJCXFldGhfZnJlZV9xZGlvX2J1ZmZlcnMoY2FyZCk7CisJCX0KIAkJY2FyZC0+aW5mby5pbml0aWFsX210dSA9IG10dTsKKwkJY2FyZC0+aW5mby5tYXhfbXR1ID0gbXR1OwogCQljYXJkLT5xZGlvLmluX2J1Zl9zaXplID0gbXR1ICsgMiAqIFBBR0VfU0laRTsKIAl9IGVsc2UgewogCQljYXJkLT5pbmZvLmluaXRpYWxfbXR1ID0gcWV0aF9nZXRfaW5pdGlhbF9tdHVfZm9yX2NhcmQoY2FyZCk7Ci0JCWNhcmQtPmluZm8ubWF4X210dSA9IHFldGhfZ2V0X21heF9tdHVfZm9yX2NhcmQoY2FyZC0+aW5mby50eXBlKTsKKwkJY2FyZC0+aW5mby5tYXhfbXR1ID0gKihfX3UxNiAqKVFFVEhfVUxQX0VOQUJMRV9SRVNQX01BWF9NVFUoCisJCQlpb2ItPmRhdGEpOwogCQljYXJkLT5xZGlvLmluX2J1Zl9zaXplID0gUUVUSF9JTl9CVUZfU0laRV9ERUZBVUxUOwogCX0KIApAQCAtMzc3NSw2ICszNzcwLDQ3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBxZXRoX2RldGVybWluZV9jYXBhYmlsaXRpZXMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmM7CisJaW50IGxlbmd0aDsKKwljaGFyICpwcmNkOworCXN0cnVjdCBjY3dfZGV2aWNlICpkZGV2OworCWludCBkZGV2X29mZmxpbmUgPSAwOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImRldGNhcGFiIik7CisJZGRldiA9IENBUkRfRERFVihjYXJkKTsKKwlpZiAoIWRkZXYtPm9ubGluZSkgeworCQlkZGV2X29mZmxpbmUgPSAxOworCQlyYyA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShkZGV2KTsKKwkJaWYgKHJjKSB7CisJCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjNlcnIlZCIsIHJjKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJcmMgPSBxZXRoX3JlYWRfY29uZl9kYXRhKGNhcmQsICh2b2lkICoqKSAmcHJjZCwgJmxlbmd0aCk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX01FU1NBR0UoMiwgIiVzIHFldGhfcmVhZF9jb25mX2RhdGEgcmV0dXJuZWQgJWlcbiIsCisJCQlkZXZfbmFtZSgmY2FyZC0+Z2Rldi0+ZGV2KSwgcmMpOworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjVlcnIlZCIsIHJjKTsKKwkJZ290byBvdXRfb2ZmbGluZTsKKwl9CisJcWV0aF9jb25maWd1cmVfdW5pdGFkZHIoY2FyZCwgcHJjZCk7CisJcWV0aF9jb25maWd1cmVfYmxrdF9kZWZhdWx0KGNhcmQsIHByY2QpOworCWtmcmVlKHByY2QpOworCisJcmMgPSBxZGlvX2dldF9zc3FkX2Rlc2MoZGRldiwgJmNhcmQtPnNzcWQpOworCWlmIChyYykKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI2ZXJyJWQiLCByYyk7CisKK291dF9vZmZsaW5lOgorCWlmIChkZGV2X29mZmxpbmUgPT0gMSkKKwkJY2N3X2RldmljZV9zZXRfb2ZmbGluZShkZGV2KTsKK291dDoKKwlyZXR1cm47Cit9CisKIHN0YXRpYyBpbnQgcWV0aF9xZGlvX2VzdGFibGlzaChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogewogCXN0cnVjdCBxZGlvX2luaXRpYWxpemUgaW5pdF9kYXRhOwpAQCAtMzkwNSw2ICszOTQxLDcgQEAKIAogCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJocmRzZXR1cCIpOwogCWF0b21pY19zZXQoJmNhcmQtPmZvcmNlX2FsbG9jX3NrYiwgMCk7CisJcWV0aF9nZXRfY2hhbm5lbF9wYXRoX2Rlc2MoY2FyZCk7CiByZXRyeToKIAlpZiAocmV0cmllcykKIAkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiJXMgUmV0cnlpbmcgdG8gZG8gSURYIGFjdGl2YXRlcy5cbiIsCkBAIC0zOTMzLDYgKzM5NzAsNyBAQAogCQllbHNlCiAJCQlnb3RvIHJldHJ5OwogCX0KKwlxZXRoX2RldGVybWluZV9jYXBhYmlsaXRpZXMoY2FyZCk7CiAJcWV0aF9pbml0X3Rva2VucyhjYXJkKTsKIAlxZXRoX2luaXRfZnVuY19sZXZlbChjYXJkKTsKIAlyYyA9IHFldGhfaWR4X2FjdGl2YXRlX2NoYW5uZWwoJmNhcmQtPnJlYWQsIHFldGhfaWR4X3JlYWRfY2IpOwpAQCAtNDIwMiw0MSArNDI0MCw2IEBACiAJY2FyZC0+ZGlzY2lwbGluZS5jY3dnZHJpdmVyID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgcWV0aF9kZXRlcm1pbmVfY2FwYWJpbGl0aWVzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJjOwotCWludCBsZW5ndGg7Ci0JY2hhciAqcHJjZDsKLQotCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJkZXRjYXBhYiIpOwotCXJjID0gY2N3X2RldmljZV9zZXRfb25saW5lKENBUkRfRERFVihjYXJkKSk7Ci0JaWYgKHJjKSB7Ci0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiM2VyciVkIiwgcmMpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQotCXJjID0gcWV0aF9yZWFkX2NvbmZfZGF0YShjYXJkLCAodm9pZCAqKikgJnByY2QsICZsZW5ndGgpOwotCWlmIChyYykgewotCQlRRVRIX0RCRl9NRVNTQUdFKDIsICIlcyBxZXRoX3JlYWRfY29uZl9kYXRhIHJldHVybmVkICVpXG4iLAotCQkJZGV2X25hbWUoJmNhcmQtPmdkZXYtPmRldiksIHJjKTsKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJWQiLCByYyk7Ci0JCWdvdG8gb3V0X29mZmxpbmU7Ci0JfQotCXFldGhfY29uZmlndXJlX3VuaXRhZGRyKGNhcmQsIHByY2QpOwotCXFldGhfY29uZmlndXJlX2Jsa3RfZGVmYXVsdChjYXJkLCBwcmNkKTsKLQlrZnJlZShwcmNkKTsKLQotCXJjID0gcWRpb19nZXRfc3NxZF9kZXNjKENBUkRfRERFVihjYXJkKSwgJmNhcmQtPnNzcWQpOwotCWlmIChyYykKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI2ZXJyJWQiLCByYyk7Ci0KLW91dF9vZmZsaW5lOgotCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9EREVWKGNhcmQpKTsKLW91dDoKLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyBpbnQgcWV0aF9jb3JlX3Byb2JlX2RldmljZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2KQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCAyYWM4ZjZhLi5hZGEwZmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTU3MywxMyArNTczLDEzIEBACiAJCWNhc2UgSVBBX1JDX0wyX0RVUF9MQVlFUjNfTUFDOgogCQkJZGV2X3dhcm4oJmNhcmQtPmdkZXYtPmRldiwKIAkJCQkiTUFDIGFkZHJlc3MgJXBNIGFscmVhZHkgZXhpc3RzXG4iLAotCQkJCWNhcmQtPmRldi0+ZGV2X2FkZHIpOworCQkJCWNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjKTsKIAkJCWJyZWFrOwogCQljYXNlIElQQV9SQ19MMl9NQUNfTk9UX0FVVEhfQllfSFlQOgogCQljYXNlIElQQV9SQ19MMl9NQUNfTk9UX0FVVEhfQllfQURQOgogCQkJZGV2X3dhcm4oJmNhcmQtPmdkZXYtPmRldiwKIAkJCQkiTUFDIGFkZHJlc3MgJXBNIGlzIG5vdCBhdXRob3JpemVkXG4iLAotCQkJCWNhcmQtPmRldi0+ZGV2X2FkZHIpOworCQkJCWNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKaW5kZXggNjVlMWNmMS4uMjA3YjdkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYwpAQCAtNjAsNyArNjAsNyBAQAogc3RhdGljIGludCBzbXNnX3BhdGhfcGVuZGluZyhzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCB1OCBpcHZtaWRbOF0sCiAJCQkgICAgIHU4IGlwdXNlclsxNl0pCiB7Ci0JaWYgKHN0cm5jbXAoaXB2bWlkLCAiKk1TRyAgICAiLCBzaXplb2YoaXB2bWlkKSkgIT0gMCkKKwlpZiAoc3RybmNtcChpcHZtaWQsICIqTVNHICAgICIsIDgpICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCS8qIFBhdGggcGVuZGluZyBmcm9tICpNU0cuICovCiAJcmV0dXJuIGl1Y3ZfcGF0aF9hY2NlcHQocGF0aCwgJnNtc2dfaGFuZGxlciwgIlNNU0dJVUNWICAgICAgICAiLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyLmggYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zci5oCmluZGV4IDQ3NWMzMWEuLjc3YjI2ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyLmgKKysrIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3IuaApAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqICAgICAgICBPLlMgICA6IExpbnV4CiAqKiAgIEZJTEUgTkFNRSAgOiBhcmNtc3IuaAotKiogICAgICAgIEJZICAgIDogRXJpY2ggQ2hlbgorKiogICAgICAgIEJZICAgIDogTmljayBDaGVuZwogKiogICBEZXNjcmlwdGlvbjogU0NTSSBSQUlEIERldmljZSBEcml2ZXIgZm9yCiAqKiAgICAgICAgICAgICAgICBBUkVDQSBSQUlEIEhvc3QgYWRhcHRlcgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDYsOCArNDYsMTIgQEAKIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlOwogLypUaGUgbGltaXQgb2Ygb3V0c3RhbmRpbmcgc2NzaSBjb21tYW5kIHRoYXQgZmlybXdhcmUgY2FuIGhhbmRsZSovCiAjZGVmaW5lIEFSQ01TUl9NQVhfT1VUU1RBTkRJTkdfQ01ECQkJCQkJMjU2Ci0jZGVmaW5lIEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0JCQkJCQkJMzIwCi0jZGVmaW5lIEFSQ01TUl9EUklWRVJfVkVSU0lPTgkJICAgICAiRHJpdmVyIFZlcnNpb24gMS4yMC4wMC4xNSAyMDEwLzAyLzAyIgorI2lmZGVmIENPTkZJR19YRU4KKwkjZGVmaW5lIEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0JMTYwCisjZWxzZQorCSNkZWZpbmUgQVJDTVNSX01BWF9GUkVFQ0NCX05VTQkzMjAKKyNlbmRpZgorI2RlZmluZSBBUkNNU1JfRFJJVkVSX1ZFUlNJT04JCSAgICAgIkRyaXZlciBWZXJzaW9uIDEuMjAuMDAuMTUgMjAxMC8wOC8wNSIKICNkZWZpbmUgQVJDTVNSX1NDU0lfSU5JVElBVE9SX0lECQkJCQkJMjU1CiAjZGVmaW5lIEFSQ01TUl9NQVhfWEZFUl9TRUNUT1JTCQkJCQkJCTUxMgogI2RlZmluZSBBUkNNU1JfTUFYX1hGRVJfU0VDVE9SU19CCQkJCQkJNDA5NgpAQCAtNjAsNyArNjQsNiBAQAogI2RlZmluZSBBUkNNU1JfTUFYX0hCQl9QT1NUUVVFVUUJCQkJCQkyNjQKICNkZWZpbmUgQVJDTVNSX01BWF9YRkVSX0xFTgkJCQkJCQkweDI2MDAwIC8qIDE1MksgKi8KICNkZWZpbmUgQVJDTVNSX0NEQl9TR19QQUdFX0xFTkdUSAkJCQkJCTI1NiAKLSNkZWZpbmUgU0NTSV9DTURfQVJFQ0FfU1BFQ0lGSUMJCQkJCQkweEUxCiAjaWZuZGVmIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTg4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSRUNBXzE4ODAgMHgxODgwCiAgI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKaW5kZXggYTRlMDRjNS4uYWNkYWUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYwpAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqICAgICAgICBPLlMgICA6IExpbnV4CiAqKiAgIEZJTEUgTkFNRSAgOiBhcmNtc3JfYXR0ci5jCi0qKiAgICAgICAgQlkgICAgOiBFcmljaCBDaGVuCisqKiAgICAgICAgQlkgICAgOiBOaWNrIENoZW5nCiAqKiAgIERlc2NyaXB0aW9uOiBhdHRyaWJ1dGVzIGV4cG9ydGVkIHRvIHN5c2ZzIGFuZCBkZXZpY2UgaG9zdAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNSwgQXJlY2EgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBBbGwgcmlnaHRzIHJlc2VydmVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCmluZGV4IDFjYWRjZDYuLjk4NGJkNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCkBAIC0yLDcgKzIsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiogICAgICAgIE8uUyAgIDogTGludXgKICoqICAgRklMRSBOQU1FICA6IGFyY21zcl9oYmEuYwotKiogICAgICAgIEJZICAgIDogRXJpY2ggQ2hlbgorKiogICAgICAgIEJZICAgIDogTmljayBDaGVuZwogKiogICBEZXNjcmlwdGlvbjogU0NTSSBSQUlEIERldmljZSBEcml2ZXIgZm9yCiAqKiAgICAgICAgICAgICAgICBBUkVDQSBSQUlEIEhvc3QgYWRhcHRlcgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzYsNyArNzYsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1ZFUlNJT04oQVJDTVNSX0RSSVZFUl9WRVJTSU9OKTsKIHN0YXRpYyBpbnQgc2xlZXB0aW1lID0gMTA7Ci1zdGF0aWMgaW50IHJldHJ5Y291bnQgPSAzMDsKK3N0YXRpYyBpbnQgcmV0cnljb3VudCA9IDEyOwogd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwogc3RhdGljIGludCBhcmNtc3JfaW9wX21lc3NhZ2VfeGZlcihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiLAogCQkJCQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwpAQCAtMTg3LDcgKzE4Nyw2IEBACiAJCWlmIChpc2xlZXAgPiAwKSB7CiAJCQltc2xlZXAoaXNsZWVwKjEwMDApOwogCQl9Ci0JCXByaW50ayhLRVJOX05PVElDRSAid2FrZS11cFxuIik7CiAJCXJldHVybiAwOwogfQogCkBAIC05MjEsNyArOTIwLDYgQEAKIH0KIAogc3RhdGljIHZvaWQgYXJjbXNyX2RyYWluX2RvbmVxdWV1ZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiLCBzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqcENDQiwgYm9vbCBlcnJvcikKLQogewogCWludCBpZCwgbHVuOwogCWlmICgocENDQi0+YWNiICE9IGFjYikgfHwgKHBDQ0ItPnN0YXJ0ZG9uZSAhPSBBUkNNU1JfQ0NCX1NUQVJUKSkgewpAQCAtOTQ4LDcgKzk0Niw3IEBACiAJCQkJLCBwQ0NCLT5zdGFydGRvbmUKIAkJCQksIGF0b21pY19yZWFkKCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQpKTsKIAkJICByZXR1cm47Ci0JCX0KKwl9CiAJYXJjbXNyX3JlcG9ydF9jY2Jfc3RhdGUoYWNiLCBwQ0NCLCBlcnJvcik7CiB9CiAKQEAgLTk4MSw3ICs5NzksNyBAQAogCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9COiB7CiAJCXN0cnVjdCBNZXNzYWdlVW5pdF9CICpyZWcgPSBhY2ItPnBtdUI7CiAJCS8qY2xlYXIgYWxsIG91dGJvdW5kIHBvc3RlZCBRKi8KLQkJd3JpdGVsKEFSQ01TUl9ET09SQkVMTF9JTlRfQ0xFQVJfUEFUVEVSTiwgJnJlZy0+aW9wMmRydl9kb29yYmVsbCk7IC8qIGNsZWFyIGRvb3JiZWxsIGludGVycnVwdCAqLworCQl3cml0ZWwoQVJDTVNSX0RPT1JCRUxMX0lOVF9DTEVBUl9QQVRURVJOLCByZWctPmlvcDJkcnZfZG9vcmJlbGwpOyAvKiBjbGVhciBkb29yYmVsbCBpbnRlcnJ1cHQgKi8KIAkJZm9yIChpID0gMDsgaSA8IEFSQ01TUl9NQVhfSEJCX1BPU1RRVUVVRTsgaSsrKSB7CiAJCQlpZiAoKGZsYWdfY2NiID0gcmVhZGwoJnJlZy0+ZG9uZV9xYnVmZmVyW2ldKSkgIT0gMCkgewogCQkJCXdyaXRlbCgwLCAmcmVnLT5kb25lX3FidWZmZXJbaV0pOwpAQCAtMTUxMSw3ICsxNTA5LDYgQEAKIAkJYXJjbXNyX2RyYWluX2RvbmVxdWV1ZShhY2IsIHBDQ0IsIGVycm9yKTsKIAl9CiB9Ci0KIHN0YXRpYyB2b2lkIGFyY21zcl9oYmJfcG9zdHF1ZXVlX2lzcihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewogCXVpbnQzMl90IGluZGV4OwpAQCAtMjEwNiwxMCArMjEwMyw2IEBACiAJaWYgKGF0b21pY19yZWFkKCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQpID49CiAJCQlBUkNNU1JfTUFYX09VVFNUQU5ESU5HX0NNRCkKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0JaWYgKChzY3NpY21kID09IFNDU0lfQ01EX0FSRUNBX1NQRUNJRklDKSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJlY2VpdmVpbmcgU0NTSV9DTURfQVJFQ0FfU1BFQ0lGSUMgY29tbWFuZC4uXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQogCWNjYiA9IGFyY21zcl9nZXRfZnJlZWNjYihhY2IpOwogCWlmICghY2NiKQogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKQEAgLTIzOTMsNiArMjM4Niw3IEBACiAJaW50IGluZGV4LCBydG47CiAJYm9vbCBlcnJvcjsKIAlwb2xsaW5nX2hiYl9jY2JfcmV0cnk6CisKIAlwb2xsX2NvdW50Kys7CiAJLyogY2xlYXIgZG9vcmJlbGwgaW50ZXJydXB0ICovCiAJd3JpdGVsKEFSQ01TUl9ET09SQkVMTF9JTlRfQ0xFQVJfUEFUVEVSTiwgcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsKTsKQEAgLTI2NjMsNiArMjY1Nyw3IEBACiB7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0EgX19pb21lbSAqcmVnID0gYWNiLT5wbXVBOwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHx8ICgoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9CVVNfUkVTRVQpICE9IDAgKSB8fCAoKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQUJPUlQpICE9IDAgKSl7CisJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKIAkJcmV0dXJuOwogCX0gZWxzZSB7CiAJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKQEAgLTI2NzAsOCArMjY2NSwxMCBAQAogCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKIAkJfQogCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikpOwotCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYWNiLT5ycV9tYXBfdG9rZW4pKQorCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYWNiLT5ycV9tYXBfdG9rZW4pKSB7CisJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCQlyZXR1cm47CisJCX0KIAkJd3JpdGVsKEFSQ01TUl9JTkJPVU5EX01FU0cwX0dFVF9DT05GSUcsICZyZWctPmluYm91bmRfbXNnYWRkcjApOwogCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJfQpAQCAtMjY4MiwxNSArMjY3OSwxOCBAQAogewogCXN0cnVjdCBNZXNzYWdlVW5pdF9CIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QjsKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSA9PSAwKSB8fCAoKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQlVTX1JFU0VUKSAhPSAwICkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0FCT1JUKSAhPSAwICkpeworCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCXJldHVybjsKIAl9IGVsc2UgewogCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CiAJCWlmIChhdG9taWNfcmVhZCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlKSA9PSBhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pKSB7Ci0JCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwxNik7CisJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwogCQl9CiAJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSk7Ci0JCWlmKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkgeworCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQkJcmV0dXJuOworCQl9CiAJCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9HRVRfQ09ORklHLCByZWctPmRydjJpb3BfZG9vcmJlbGwpOwogCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJfQpAQCAtMjcwMSw2ICsyNzAxLDcgQEAKIHsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQyBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUM7CiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0JVU19SRVNFVCkgIT0gMCkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0FCT1JUKSAhPSAwKSkgeworCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCXJldHVybjsKIAl9IGVsc2UgewogCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CkBAIC0yNzA4LDggKzI3MDksMTAgQEAKIAkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CiAJCX0KIAkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCBhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pKTsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkgeworCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQkJcmV0dXJuOworCQl9CiAJCXdyaXRlbChBUkNNU1JfSU5CT1VORF9NRVNHMF9HRVRfQ09ORklHLCAmcmVnLT5pbmJvdW5kX21zZ2FkZHIwKTsKIAkJd3JpdGVsKEFSQ01TUl9IQkNNVV9EUlYySU9QX01FU1NBR0VfQ01EX0RPTkUsICZyZWctPmluYm91bmRfZG9vcmJlbGwpOwogCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CkBAIC0yODk3LDYgKzI5MDAsOCBAQAogCXVpbnQzMl90IGludG1hc2tfb3JnOwogCXVpbnQ4X3QgcnRudmFsID0gMHgwMDsKIAlpbnQgaSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCWlmIChhdG9taWNfcmVhZCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KSAhPSAwKSB7CiAJCS8qIGRpc2FibGUgYWxsIG91dGJvdW5kIGludGVycnVwdCAqLwogCQlpbnRtYXNrX29yZyA9IGFyY21zcl9kaXNhYmxlX291dGJvdW5kX2ludHMoYWNiKTsKQEAgLTI5MDcsNyArMjkxMiwxMiBAQAogCQlmb3IgKGkgPSAwOyBpIDwgQVJDTVNSX01BWF9GUkVFQ0NCX05VTTsgaSsrKSB7CiAJCQljY2IgPSBhY2ItPnBjY2JfcG9vbFtpXTsKIAkJCWlmIChjY2ItPnN0YXJ0ZG9uZSA9PSBBUkNNU1JfQ0NCX1NUQVJUKSB7Ci0JCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IpOworCQkJCXNjc2lfZG1hX3VubWFwKGNjYi0+cGNtZCk7CisJCQkJY2NiLT5zdGFydGRvbmUgPSBBUkNNU1JfQ0NCX0RPTkU7CisJCQkJY2NiLT5jY2JfZmxhZ3MgPSAwOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZhY2ItPmNjYmxpc3RfbG9jaywgZmxhZ3MpOworCQkJCWxpc3RfYWRkX3RhaWwoJmNjYi0+bGlzdCwgJmFjYi0+Y2NiX2ZyZWVfbGlzdCk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNiLT5jY2JsaXN0X2xvY2ssIGZsYWdzKTsKIAkJCX0KIAkJfQogCQlhdG9taWNfc2V0KCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQsIDApOwpAQCAtMjkyMCw4ICsyOTMwLDcgQEAKIAogc3RhdGljIGludCBhcmNtc3JfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKLQlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiID0KLQkJKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICopY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2I7CiAJdWludDMyX3QgaW50bWFza19vcmcsIG91dGJvdW5kX2Rvb3JiZWxsOwogCWludCByZXRyeV9jb3VudCA9IDA7CiAJaW50IHJ0biA9IEZBSUxFRDsKQEAgLTI5NzEsMzEgKzI5ODAsMTYgQEAKIAkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwogCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOwogCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKLQkJCQlpbml0X3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWik7Ci0JCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5mdW5jdGlvbiA9ICZhcmNtc3JfcmVxdWVzdF9kZXZpY2VfbWFwOwotCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0JVU19SRVNFVDsKIAkJCQlydG4gPSBTVUNDRVNTOwogCQkJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyOiBzY3NpICBidXMgcmVzZXQgZWggcmV0dXJucyB3aXRoIHN1Y2Nlc3NcbiIpOwogCQkJfSBlbHNlIHsKIAkJCQlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfQlVTX1JFU0VUOwotCQkJCWlmIChhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7Ci0JCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKLQkJCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWik7Ci0JCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjYjsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmZ1bmN0aW9uID0gJmFyY21zcl9yZXF1ZXN0X2RldmljZV9tYXA7Ci0JCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwotCQkJCX0KKwkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOworCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOworCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwogCQkJCXJ0biA9IFNVQ0NFU1M7CiAJCQl9CiAJCQlicmVhazsKQEAgLTMwMDcsMjEgKzMwMDEsMTAgQEAKIAkJCQlydG4gPSBGQUlMRUQ7CiAJCQl9IGVsc2UgewogCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQlpbml0X3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKTsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOwotCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZnVuY3Rpb24gPSAmYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcDsKLQkJCQkJYWRkX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOwotCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKSk7Ci0JCQkJfQorCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CisJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7CisJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOworCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKIAkJCQlydG4gPSBTVUNDRVNTOwogCQkJfQogCQkJYnJlYWs7CkBAIC0zMDY3LDMxICszMDUwLDE2IEBACiAJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKIAkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKIAkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWik7Ci0JCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5mdW5jdGlvbiA9ICZhcmNtc3JfcmVxdWVzdF9kZXZpY2VfbWFwOwotCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0JVU19SRVNFVDsKIAkJCQlydG4gPSBTVUNDRVNTOwogCQkJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyOiBzY3NpIGJ1cyByZXNldCBlaCByZXR1cm5zIHdpdGggc3VjY2Vzc1xuIik7CiAJCQl9IGVsc2UgewogCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQlpbml0X3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKTsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOwotCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZnVuY3Rpb24gPSAmYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcDsKLQkJCQkJYWRkX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOwotCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKSk7Ci0JCQkJfQorCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CisJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7CisJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOworCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKSk7CiAJCQkJcnRuID0gU1VDQ0VTUzsKIAkJCX0KIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwppbmRleCA1ODE1Y2JlLi45YTdhYWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwpAQCAtNjQ2LDYgKzY0Niw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9zcGxpY2VfaW5pdCgmc2hvc3QtPmVoX2NtZF9xLCAmZWhfd29ya19xKTsKKwlzaG9zdC0+aG9zdF9laF9zY2hlZHVsZWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJU0FTX0RQUklOVEsoIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCmluZGV4IGIyYTgxNzAuLjllYWQwMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCkBAIC0yMTc2LDkgKzIxNzYsOSBAQAogCQkvKiBhZGp1c3QgaGJhX3F1ZXVlX2RlcHRoLCByZXBseV9mcmVlX3F1ZXVlX2RlcHRoLAogCQkgKiBhbmQgcXVldWVfc2l6ZQogCQkgKi8KLQkJaW9jLT5oYmFfcXVldWVfZGVwdGggLT0gcXVldWVfZGlmZjsKLQkJaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIC09IHF1ZXVlX2RpZmY7Ci0JCXF1ZXVlX3NpemUgLT0gcXVldWVfZGlmZjsKKwkJaW9jLT5oYmFfcXVldWVfZGVwdGggLT0gKHF1ZXVlX2RpZmYgLyAyKTsKKwkJaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIC09IChxdWV1ZV9kaWZmIC8gMik7CisJCXF1ZXVlX3NpemUgPSBmYWN0cy0+TWF4UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGg7CiAJfQogCWlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aCA9IHF1ZXVlX3NpemU7CiAKQEAgLTM5NDEsNiArMzk0MSw4IEBACiBzdGF0aWMgdm9pZAogX2Jhc2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSkKIHsKKwltcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7CisJbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlcihpb2MsIHJlc2V0X3BoYXNlKTsKIAlzd2l0Y2ggKHJlc2V0X3BoYXNlKSB7CiAJY2FzZSBNUFQyX0lPQ19QUkVfUkVTRVQ6CiAJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogIgpAQCAtMzk3MSw4ICszOTczLDYgQEAKIAkJICAgICJNUFQyX0lPQ19ET05FX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CiAJCWJyZWFrOwogCX0KLQltcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7Ci0JbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlcihpb2MsIHJlc2V0X3BoYXNlKTsKIH0KIAogLyoqCkBAIC00MDI2LDYgKzQwMjYsNyBAQAogewogCWludCByOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggcGVfY29tcGxldGUgPSBpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlOwogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwpAQCAtNDA2OCw2ICs0MDY5LDE0IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCV9iYXNlX3Jlc2V0X2hhbmRsZXIoaW9jLCBNUFQyX0lPQ19BRlRFUl9SRVNFVCk7CisKKwkvKiBJZiB0aGlzIGhhcmQgcmVzZXQgaXMgY2FsbGVkIHdoaWxlIHBvcnQgZW5hYmxlIGlzIGFjdGl2ZSwgdGhlbgorCSAqIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBjYWxsIG1ha2VfaW9jX29wZXJhdGlvbmFsCisJICovCisJaWYgKHBlX2NvbXBsZXRlKSB7CisJCXIgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CiAJciA9IF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKGlvYywgc2xlZXBfZmxhZyk7CiAJaWYgKCFyKQogCQlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfRE9ORV9SRVNFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKaW5kZXggZWRhMzQ3Yy4uNWRlZDNkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwpAQCAtODE5LDcgKzgxOSw3IEBACiB9CiAKIC8qKgotICogbXB0c2NzaWhfZ2V0X3Njc2lfbG9va3VwIC0gcmV0dXJucyBzY21kIGVudHJ5CisgKiBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0IC0gcmV0dXJucyBzY21kIGVudHJ5CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CiAgKgpAQCAtODMyLDYgKzgzMiwyOCBAQAogfQogCiAvKioKKyAqIF9zY3NpaF9zY3NpX2xvb2t1cF9nZXRfY2xlYXIgLSByZXR1cm5zIHNjbWQgZW50cnkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm5zIHRoZSBzbWlkIHN0b3JlZCBzY21kIHBvaW50ZXIuCisgKiBUaGVuIHdpbGwgZGVyZWZyZW5jZSB0aGUgc3RvcmVkIHNjbWQgcG9pbnRlci4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NzaV9jbW5kICoKK19zY3NpaF9zY3NpX2xvb2t1cF9nZXRfY2xlYXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJc2NtZCA9IGlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQ7CisJaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc2NtZDsKK30KKworLyoqCiAgKiBfc2NzaWhfc2NzaV9sb29rdXBfZmluZF9ieV9zY21kIC0gc2NtZCBsb29rdXAKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKQEAgLTI5ODEsOSArMzAwMyw2IEBACiAJdTE2IGhhbmRsZTsKIAogCWZvciAoaSA9IDAgOyBpIDwgZXZlbnRfZGF0YS0+TnVtRW50cmllczsgaSsrKSB7Ci0JCWlmIChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKLQkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkKLQkJCWNvbnRpbnVlOwogCQloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5QSFlbaV0uQXR0YWNoZWREZXZIYW5kbGUpOwogCQlpZiAoIWhhbmRsZSkKIAkJCWNvbnRpbnVlOwpAQCAtMzIxMCw3ICszMjI5LDcgQEAKIAl1MTYgY291bnQgPSAwOwogCiAJZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnNjc2lpb19kZXB0aDsgc21pZCsrKSB7Ci0JCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CisJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0X2NsZWFyKGlvYywgc21pZCk7CiAJCWlmICghc2NtZCkKIAkJCWNvbnRpbnVlOwogCQljb3VudCsrOwpAQCAtMzgwNCw3ICszODIzLDcgQEAKIAl1MzIgcmVzcG9uc2VfY29kZSA9IDA7CiAKIAltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKLQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWQpOworCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0X2NsZWFyKGlvYywgc21pZCk7CiAJaWYgKHNjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIDE7CiAKQEAgLTUwMDUsNiArNTAyNCwxMiBAQAogCQkgICAgIGV2ZW50X2RhdGEpOwogI2VuZGlmCiAKKwkvKiBJbiBNUEkgUmV2aXNpb24gSyAoMHhDKSwgdGhlIGludGVybmFsIGRldmljZSByZXNldCBjb21wbGV0ZSB3YXMKKwkgKiBpbXBsZW1lbnRlZCwgc28gYXZvaWQgc2V0dGluZyB0bV9idXN5IGZsYWcgZm9yIG9sZGVyIGZpcm13YXJlLgorCSAqLworCWlmICgoaW9jLT5mYWN0cy5IZWFkZXJWZXJzaW9uID4+IDgpIDwgMHhDKQorCQlyZXR1cm47CisKIAlpZiAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAhPQogCSAgICBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19JTlRFUk5BTF9ERVZJQ0VfUkVTRVQgJiYKIAkgICBldmVudF9kYXRhLT5SZWFzb25Db2RlICE9CkBAIC01MDk5LDYgKzUxMjQsNyBAQAogICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAl1MTYgc21pZCwgaGFuZGxlOwogCXUzMiBsdW47CiAJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKQEAgLTUxMDksMTIgKzUxMzUsMTcgQEAKIAlNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKICNlbmRpZgogCXUxNiBpb2Nfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHI7CisKIAlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImJyb2FkY2FzdCBwcmltYXRpdmU6ICIKIAkgICAgInBoeSBudW1iZXIoJWQpLCB3aWR0aCglZClcbiIsIGlvYy0+bmFtZSwgZXZlbnRfZGF0YS0+UGh5TnVtLAogCSAgICBldmVudF9kYXRhLT5Qb3J0V2lkdGgpKTsKIAlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGVudGVyXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kgPSAwOwogCXRlcm1pbmF0aW9uX2NvdW50ID0gMDsKIAlxdWVyeV9jb3VudCA9IDA7CiAJbXBpX3JlcGx5ID0gaW9jLT50bV9jbWRzLnJlcGx5OwpAQCAtNTEyMiw3ICs1MTUzLDggQEAKIAkJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKIAkJaWYgKCFzY21kKQogCQkJY29udGludWU7Ci0JCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwkJc2RldiA9IHNjbWQtPmRldmljZTsKKwkJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzZGV2LT5ob3N0ZGF0YTsKIAkJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSB8fCAhc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQpCiAJCQljb250aW51ZTsKIAkJIC8qIHNraXAgaGlkZGVuIHJhaWQgY29tcG9uZW50cyAqLwpAQCAtNTEzOCw2ICs1MTcwLDcgQEAKIAkJbHVuID0gc2FzX2RldmljZV9wcml2X2RhdGEtPmx1bjsKIAkJcXVlcnlfY291bnQrKzsKIAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAkJbXB0MnNhc19zY3NpaF9pc3N1ZV90bShpb2MsIGhhbmRsZSwgMCwgMCwgbHVuLAogCQkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVVFUllfVEFTSywgc21pZCwgMzAsIE5VTEwpOwogCQlpb2MtPnRtX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CkBAIC01MTQ3LDE0ICs1MTgwLDIwIEBACiAJCSAgICAobXBpX3JlcGx5LT5SZXNwb25zZUNvZGUgPT0KIAkJICAgICBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fU1VDQ0VFREVEIHx8CiAJCSAgICAgbXBpX3JlcGx5LT5SZXNwb25zZUNvZGUgPT0KLQkJICAgICBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU9fUVVFVUVEX09OX0lPQykpCisJCSAgICAgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lPX1FVRVVFRF9PTl9JT0MpKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJCQljb250aW51ZTsKLQotCQltcHQyc2FzX3Njc2loX2lzc3VlX3RtKGlvYywgaGFuZGxlLCAwLCAwLCBsdW4sCi0JCSAgICBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQlJUX1RBU0tfU0VULCAwLCAzMCwgTlVMTCk7CisJCX0KKwkJciA9IG1wdDJzYXNfc2NzaWhfaXNzdWVfdG0oaW9jLCBoYW5kbGUsIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLAorCQkgICAgc2Rldi0+bHVuLCBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLLCBzbWlkLCAzMCwKKwkJICAgIHNjbWQpOworCQlpZiAociA9PSBGQUlMRUQpCisJCQlzZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNkZXYsICJ0YXNrIGFib3J0OiBGQUlMRUQgIgorCQkJICAgICJzY21kKCVwKVxuIiwgc2NtZCk7CiAJCXRlcm1pbmF0aW9uX2NvdW50ICs9IGxlMzJfdG9fY3B1KG1waV9yZXBseS0+VGVybWluYXRpb25Db3VudCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAl9Ci0JaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKIAkgICAgIiVzIC0gZXhpdCwgcXVlcnlfY291bnQgPSAlZCB0ZXJtaW5hdGlvbl9jb3VudCA9ICVkXG4iLApAQCAtNjYyNiw2ICs2NjY1LDcgQEAKIAkJZGVzdHJveV93b3JrcXVldWUod3EpOwogCiAJLyogcmVsZWFzZSBhbGwgdGhlIHZvbHVtZXMgKi8KKwlfc2NzaWhfaXJfc2h1dGRvd24oaW9jKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmFpZF9kZXZpY2UsIG5leHQsICZpb2MtPnJhaWRfZGV2aWNlX2xpc3QsCiAJICAgIGxpc3QpIHsKIAkJaWYgKHJhaWRfZGV2aWNlLT5zdGFyZ2V0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwppbmRleCA0NDU3OGI1Li5kM2U1OGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKQEAgLTE1NjEsNiArMTU2MSw3IEBACiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKIAlmY19wb3J0X3QgKmZjcG9ydCA9ICooZmNfcG9ydF90ICoqKXJwb3J0LT5kZF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWZjcG9ydCkKIAkJcmV0dXJuOwpAQCAtMTU3MywxMCArMTU3NCwxMCBAQAogCSAqIFRyYW5zcG9ydCBoYXMgZWZmZWN0aXZlbHkgJ2RlbGV0ZWQnIHRoZSBycG9ydCwgY2xlYXIKIAkgKiBhbGwgbG9jYWwgcmVmZXJlbmNlcy4KIAkgKi8KLQlzcGluX2xvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJZmNwb3J0LT5ycG9ydCA9IGZjcG9ydC0+ZHJwb3J0ID0gTlVMTDsKIAkqKChmY19wb3J0X3QgKiopcnBvcnQtPmRkX2RhdGEpID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZmY3BvcnQtPnZoYS0+ZHBjX2ZsYWdzKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKaW5kZXggZjk0OGUxYS4uZDk0NzljMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCkBAIC0yNTA1LDExICsyNTA1LDEyIEBACiB7CiAJZmNfcG9ydF90ICpmY3BvcnQgPSBkYXRhOwogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnEoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXJwb3J0ID0gZmNwb3J0LT5kcnBvcnQgPyBmY3BvcnQtPmRycG9ydDogZmNwb3J0LT5ycG9ydDsKIAlmY3BvcnQtPmRycG9ydCA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCWlmIChycG9ydCkKIAkJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKHJwb3J0KTsKIH0KQEAgLTI4NzksNiArMjg4MCw3IEBACiAJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIHJwb3J0X2lkczsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlxbGEyeDAwX3Jwb3J0X2RlbChmY3BvcnQpOwogCkBAIC0yODkzLDkgKzI4OTUsOSBAQAogCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBmYyByZW1vdGUgcG9ydCFcbiIpOwogCQlyZXR1cm47CiAJfQotCXNwaW5fbG9ja19pcnEoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCSooKGZjX3BvcnRfdCAqKilycG9ydC0+ZGRfZGF0YSkgPSBmY3BvcnQ7Ci0Jc3Bpbl91bmxvY2tfaXJxKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gZmNwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCBjMTk0YzIzLi5mMjc3MjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtNTYyLDcgKzU2Miw2IEBACiAJfQogCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgIT0gRkNTX09OTElORSkgewogCQlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpID09IEZDU19ERVZJQ0VfREVBRCB8fAotCQkJYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpID09IEZDU19ERVZJQ0VfTE9TVCB8fAogCQkJYXRvbWljX3JlYWQoJmJhc2VfdmhhLT5sb29wX3N0YXRlKSA9PSBMT09QX0RFQUQpIHsKIAkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCQlnb3RvIHFjMjRfZmFpbF9jb21tYW5kOwpAQCAtMjUxMyw2ICsyNTEyLDcgQEAKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCXNjc2lfcWxhX2hvc3RfdCAqYmFzZV92aGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghZmNwb3J0LT5ycG9ydCkKIAkJcmV0dXJuOwpAQCAtMjUyMCw5ICsyNTIwLDkgQEAKIAlycG9ydCA9IGZjcG9ydC0+cnBvcnQ7CiAJaWYgKGRlZmVyKSB7CiAJCWJhc2VfdmhhID0gcGNpX2dldF9kcnZkYXRhKHZoYS0+aHctPnBkZXYpOwotCQlzcGluX2xvY2tfaXJxKHZoYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUodmhhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJZmNwb3J0LT5kcnBvcnQgPSBycG9ydDsKLQkJc3Bpbl91bmxvY2tfaXJxKHZoYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh2aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQlzZXRfYml0KEZDUE9SVF9VUERBVEVfTkVFREVELCAmYmFzZV92aGEtPmRwY19mbGFncyk7CiAJCXFsYTJ4eHhfd2FrZV9kcGMoYmFzZV92aGEpOwogCX0gZWxzZQpAQCAtMzI4MiwxMCArMzI4MiwxMCBAQAogCiAJc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOwogCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlERUJVRzMocHJpbnRrKCJxbGEyeDAwOiBEUEMgaGFuZGxlciBzbGVlcGluZ1xuIikpOwogCi0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCXNjaGVkdWxlKCk7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIApAQCAtMzQ1NCw3ICszNDU0LDkgQEAKIAkJcWxhMngwMF9kb19kcGNfYWxsX3ZwcyhiYXNlX3ZoYSk7CiAKIAkJaGEtPmRwY19hY3RpdmUgPSAwOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCX0gLyogRW5kIG9mIHdoaWxlKDEpICovCisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCiAJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IERQQyBoYW5kbGVyIGV4aXRpbmdcbiIsIGJhc2VfdmhhLT5ob3N0X25vKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCmluZGV4IDdiMzEwOTMuLmE2YjJkNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAKIAkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLCB1bnNpZ25lZCBpbnQgbnVtLCBpbnQgd3JpdGUpCiB7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgYmxvY2ssIHJlc3QgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgcmVzdCA9IDA7CiAJaW50ICgqZnVuYykoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CiAKIAlmdW5jID0gd3JpdGUgPyBmZXRjaF90b19kZXZfYnVmZmVyIDogZmlsbF9mcm9tX2Rldl9idWZmZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IDkwNDVjNTIuLmZiMmJiMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC00NDMsNyArNDQzLDcgQEAKIAkJCQkJJnNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2ZsYWdzKTsKIAkJaWYgKGZsYWdzZXQpCiAJCQlxdWV1ZV9mbGFnX3NldChRVUVVRV9GTEFHX1JFRU5URVIsIHNkZXYtPnJlcXVlc3RfcXVldWUpOwotCQlfX2Jsa19ydW5fcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSk7CisJCV9fYmxrX3J1bl9xdWV1ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBmYWxzZSk7CiAJCWlmIChmbGFnc2V0KQogCQkJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX1JFRU5URVIsIHNkZXYtPnJlcXVlc3RfcXVldWUpOwogCQlzcGluX3VubG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKaW5kZXggOTk4YzAxYi4uNWMzY2NmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTM4MjksNyArMzgyOSw3IEBACiAJCSAgIXRlc3RfYml0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgJnJwb3J0LT5ycXN0X3EtPnF1ZXVlX2ZsYWdzKTsKIAlpZiAoZmxhZ3NldCkKIAkJcXVldWVfZmxhZ19zZXQoUVVFVUVfRkxBR19SRUVOVEVSLCBycG9ydC0+cnFzdF9xKTsKLQlfX2Jsa19ydW5fcXVldWUocnBvcnQtPnJxc3RfcSk7CisJX19ibGtfcnVuX3F1ZXVlKHJwb3J0LT5ycXN0X3EsIGZhbHNlKTsKIAlpZiAoZmxhZ3NldCkKIAkJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX1JFRU5URVIsIHJwb3J0LT5ycXN0X3EpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocnBvcnQtPnJxc3RfcS0+cXVldWVfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9pbnRjL2NoaXAuYyBiL2RyaXZlcnMvc2gvaW50Yy9jaGlwLmMKaW5kZXggZGU4ODVhMC4uZjMzZTJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9pbnRjL2NoaXAuYworKysgYi9kcml2ZXJzL3NoL2ludGMvY2hpcC5jCkBAIC0xNzMsNyArMTczLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBWQUxJRCh4KSAoeCB8IDB4ODApCisjZGVmaW5lIFNFTlNFX1ZBTElEX0ZMQUcgMHg4MAorI2RlZmluZSBWQUxJRCh4KSAoeCB8IFNFTlNFX1ZBTElEX0ZMQUcpCiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGludGNfaXJxX3NlbnNlX3RhYmxlW0lSUV9UWVBFX1NFTlNFX01BU0sgKyAxXSA9IHsKIAlbSVJRX1RZUEVfRURHRV9GQUxMSU5HXSA9IFZBTElEKDApLApAQCAtMjAxLDcgKzIwMiw4IEBACiAJaWhwID0gaW50Y19maW5kX2lycShkLT5zZW5zZSwgZC0+bnJfc2Vuc2UsIGlycSk7CiAJaWYgKGlocCkgewogCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9FKGlocC0+aGFuZGxlKSwgMCk7Ci0JCWludGNfcmVnX2Zuc1tfSU5UQ19GTihpaHAtPmhhbmRsZSldKGFkZHIsIGlocC0+aGFuZGxlLCB2YWx1ZSk7CisJCWludGNfcmVnX2Zuc1tfSU5UQ19GTihpaHAtPmhhbmRsZSldKGFkZHIsIGlocC0+aGFuZGxlLAorCQkJCQkJICAgIHZhbHVlICYgflNFTlNFX1ZBTElEX0ZMQUcpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaV9wY2kuYyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGlfcGNpLmMKaW5kZXggMzUxZDhhMzc1Li4xOTc1MmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpX3BjaS5jCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGlfcGNpLmMKQEAgLTcsMTAgKzcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAKLXN0cnVjdCBhd2Vzb21lX3N0cnVjdCB7CitzdHJ1Y3QgY2U0MTAwX2luZm8gewogCXN0cnVjdCBzc3BfZGV2aWNlIHNzcDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaV9wZGV2OwotCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBzcGlfcGRhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc3BpX3BkZXY7CiB9OwogCiBzdGF0aWMgREVGSU5FX01VVEVYKHNzcF9sb2NrKTsKQEAgLTUxLDIzICs1MCwxNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocHhhX3NzcF9mcmVlKTsKIAotc3RhdGljIHZvaWQgcGxhdF9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF3ZXNvbWVfc3RydWN0ICphcyA9IGNvbnRhaW5lcl9vZihkZXYsCi0JCQlzdHJ1Y3QgYXdlc29tZV9zdHJ1Y3QsIHNwaV9wZGV2LmRldik7Ci0KLQlvZl9kZXZpY2Vfbm9kZV9wdXQoJmFzLT5zcGlfcGRldi5kZXYpOwotfQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjZTQxMDBfc3BpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJaW50IHJldDsKIAlyZXNvdXJjZV9zaXplX3QgcGh5c19iZWc7CiAJcmVzb3VyY2Vfc2l6ZV90IHBoeXNfbGVuOwotCXN0cnVjdCBhd2Vzb21lX3N0cnVjdCAqc3BpX2luZm87CisJc3RydWN0IGNlNDEwMF9pbmZvICpzcGlfaW5mbzsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciAqc3BpX3BkYXRhOworCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBzcGlfcGRhdGE7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcDsKIAogCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CkBAIC04NCwzMyArNzUsMzAgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJweGEyeHgtc3BpIiwgZGV2LT5kZXZmbik7CiAJc3BpX2luZm8gPSBremFsbG9jKHNpemVvZigqc3BpX2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNwaV9pbmZvKSB7CisJaWYgKCFwZGV2IHx8ICFzcGlfaW5mbyApIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfa3o7CisJCWdvdG8gZXJyX25vbWVtOwogCX0KLQlzc3AgPSAmc3BpX2luZm8tPnNzcDsKLQlwZGV2ID0gJnNwaV9pbmZvLT5zcGlfcGRldjsKLQlzcGlfcGRhdGEgPSAgJnNwaV9pbmZvLT5zcGlfcGRhdGE7CisJbWVtc2V0KCZzcGlfcGRhdGEsIDAsIHNpemVvZihzcGlfcGRhdGEpKTsKKwlzcGlfcGRhdGEubnVtX2NoaXBzZWxlY3QgPSBkZXYtPmRldmZuOwogCi0JcGRldi0+bmFtZSA9ICJweGEyeHgtc3BpIjsKLQlwZGV2LT5pZCA9IGRldi0+ZGV2Zm47CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsICZzcGlfcGRhdGEsIHNpemVvZihzcGlfcGRhdGEpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9ub21lbTsKKwogCXBkZXYtPmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7Ci0JcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmc3BpX2luZm8tPnNwaV9wZGF0YTsKLQogI2lmZGVmIENPTkZJR19PRgogCXBkZXYtPmRldi5vZl9ub2RlID0gZGV2LT5kZXYub2Zfbm9kZTsKICNlbmRpZgotCXBkZXYtPmRldi5yZWxlYXNlID0gcGxhdF9kZXZfcmVsZWFzZTsKLQotCXNwaV9wZGF0YS0+bnVtX2NoaXBzZWxlY3QgPSBkZXYtPmRldmZuOwotCisJc3NwID0gJnNwaV9pbmZvLT5zc3A7CiAJc3NwLT5waHlzX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKIAlzc3AtPm1taW9fYmFzZSA9IGlvcmVtYXAocGh5c19iZWcsIHBoeXNfbGVuKTsKIAlpZiAoIXNzcC0+bW1pb19iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpb3JlbWFwKCkgcmVnaXN0ZXJzXG4iKTsKIAkJcmV0ID0gLUVJTzsKLQkJZ290byBlcnJfcmVtYXA7CisJCWdvdG8gZXJyX25vbWVtOwogCX0KIAlzc3AtPmlycSA9IGRldi0+aXJxOwogCXNzcC0+cG9ydF9pZCA9IHBkZXYtPmlkOwpAQCAtMTIyLDcgKzExMCw3IEBACiAKIAlwY2lfc2V0X2RydmRhdGEoZGV2LCBzcGlfaW5mbyk7CiAKLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9kZXZfYWRkOwogCkBAIC0xMzUsMjcgKzEyMywyMSBAQAogCW11dGV4X3VubG9jaygmc3NwX2xvY2spOwogCWlvdW5tYXAoc3NwLT5tbWlvX2Jhc2UpOwogCi1lcnJfcmVtYXA6Ci0Ja2ZyZWUoc3BpX2luZm8pOwotCi1lcnJfa3o6CitlcnJfbm9tZW06CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBoeXNfYmVnLCBwaHlzX2xlbik7Ci0KKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCWtmcmVlKHNwaV9pbmZvKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2U0MTAwX3NwaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgYXdlc29tZV9zdHJ1Y3QgKnNwaV9pbmZvOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGNlNDEwMF9pbmZvICpzcGlfaW5mbzsKIAlzdHJ1Y3Qgc3NwX2RldmljZSAqc3NwOwogCiAJc3BpX2luZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQogCXNzcCA9ICZzcGlfaW5mby0+c3NwOwotCXBkZXYgPSAmc3BpX2luZm8tPnNwaV9wZGV2OwotCi0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc3BpX2luZm8tPnNwaV9wZGV2KTsKIAogCWlvdW5tYXAoc3NwLT5tbWlvX2Jhc2UpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSwKQEAgLTE3MSw3ICsxNTMsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2U0MTAwX3NwaV9kZXZpY2VzW10gX19kZXZpbml0ZGF0YSA9IHsKLQogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDJlNmEpIH0sCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zaF9tc2lvZi5jIGIvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKaW5kZXggNTZmNjBjOC4uMmM2NjVmY2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYwpAQCAtNTA5LDkgKzUwOSwxMSBAQAogCWJ5dGVzX2RvbmUgPSAwOwogCiAJd2hpbGUgKGJ5dGVzX2RvbmUgPCB0LT5sZW4pIHsKKwkJdm9pZCAqcnhfYnVmID0gdC0+cnhfYnVmID8gdC0+cnhfYnVmICsgYnl0ZXNfZG9uZSA6IE5VTEw7CisJCWNvbnN0IHZvaWQgKnR4X2J1ZiA9IHQtPnR4X2J1ZiA/IHQtPnR4X2J1ZiArIGJ5dGVzX2RvbmUgOiBOVUxMOwogCQluID0gc2hfbXNpb2Zfc3BpX3R4cnhfb25jZShwLCB0eF9maWZvLCByeF9maWZvLAotCQkJCQkgICB0LT50eF9idWYgKyBieXRlc19kb25lLAotCQkJCQkgICB0LT5yeF9idWYgKyBieXRlc19kb25lLAorCQkJCQkgICB0eF9idWYsCisJCQkJCSAgIHJ4X2J1ZiwKIAkJCQkJICAgd29yZHMsIGJpdHMpOwogCQlpZiAobiA8IDApCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3BjbWNpYS5jIGIvZHJpdmVycy9zc2IvcGNtY2lhLmMKaW5kZXggYzczNDVkYi4uZjg1MzM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvcGNtY2lhLmMKKysrIGIvZHJpdmVycy9zc2IvcGNtY2lhLmMKQEAgLTczMyw3ICs3MzMsNyBAQAogCiAJLyogRmV0Y2ggdGhlIHZlbmRvciBzcGVjaWZpYyB0dXBsZXMuICovCiAJcmVzID0gcGNtY2lhX2xvb3BfdHVwbGUoYnVzLT5ob3N0X3BjbWNpYSwgU1NCX1BDTUNJQV9DSVMsCi0JCQkJc3NiX3BjbWNpYV9kb19nZXRfaW52YXJpYW50cywgc3Byb20pOworCQkJCXNzYl9wY21jaWFfZG9fZ2V0X2ludmFyaWFudHMsIGl2KTsKIAlpZiAoKHJlcyA9PSAwKSB8fCAocmVzID09IC1FTk9TUEMpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNjb25maWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzY29uZmlnLmMKaW5kZXggMGUyOThkYi4uMjliOGFiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNjb25maWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvYXIza3BzL2FyM2twc2NvbmZpZy5jCkBAIC0zNjAsOCArMzYwLDggQEAKICAgICAgICAgCXN0YXR1cyA9IDE7CiAgICAgICAgIAlnb3RvIGNvbXBsZXRlOwogICAgIAl9Ci0gICAgICAgIGxlbiA9IChmaXJtd2FyZS0+c2l6ZSA+IE1BWF9CREFERFJfRk9STUFUX0xFTkdUSCk/IE1BWF9CREFERFJfRk9STUFUX0xFTkdUSDogZmlybXdhcmUtPnNpemU7Ci0JbWVtY3B5KGNvbmZpZ19iZGFkZHIsIGZpcm13YXJlLT5kYXRhLGxlbik7CisJbGVuID0gbWluKGZpcm13YXJlLT5zaXplLCBNQVhfQkRBRERSX0ZPUk1BVF9MRU5HVEggLSAxKTsKKwltZW1jcHkoY29uZmlnX2JkYWRkciwgZmlybXdhcmUtPmRhdGEsIGxlbik7CiAJY29uZmlnX2JkYWRkcltsZW5dID0gJ1wwJzsKIAl3cml0ZV9iZGFkZHIoaGRldixjb25maWdfYmRhZGRyLEJEQUREUl9UWVBFX1NUUklORyk7CiAgICAgICAgCUFfUkVMRUFTRV9GSVJNV0FSRShmaXJtd2FyZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bF9tYWM4MDIxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xfbWFjODAyMTEuYwppbmRleCBiZGQ2MjlkLi5jZDgzOTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bF9tYWM4MDIxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsX21hYzgwMjExLmMKQEAgLTIwOSwxMSArMjA5LDggQEAKIAlzdHJ1Y3Qgd2xfaW5mbyAqd2wgPSBody0+cHJpdjsKIAlBU1NFUlQod2wpOwogCVdMX0xPQ0sod2wpOwotCXdsX2Rvd24od2wpOwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CiAJV0xfVU5MT0NLKHdsKTsKLQotCXJldHVybjsKIH0KIAogc3RhdGljIGludApAQCAtMjQ2LDcgKzI0MywxNCBAQAogc3RhdGljIHZvaWQKIHdsX29wc19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewotCXJldHVybjsKKwlzdHJ1Y3Qgd2xfaW5mbyAqd2w7CisKKwl3bCA9IEhXX1RPX1dMKGh3KTsKKworCS8qIHB1dCBkcml2ZXIgaW4gZG93biBzdGF0ZSAqLworCVdMX0xPQ0sod2wpOworCXdsX2Rvd24od2wpOworCVdMX1VOTE9DSyh3bCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI1OSw5ICsyNjMsNyBAQAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTkw4MDIxMV9DSEFOX0hUMjA6CiAJY2FzZSBOTDgwMjExX0NIQU5fTk9fSFQ6Ci0JCVdMX0xPQ0sod2wpOwogCQllcnIgPSB3bGNfc2V0KHdsLT53bGMsIFdMQ19TRVRfQ0hBTk5FTCwgY2hhbi0+aHdfdmFsdWUpOwotCQlXTF9VTkxPQ0sod2wpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfQ0hBTl9IVDQwTUlOVVM6CiAJY2FzZSBOTDgwMjExX0NIQU5fSFQ0MFBMVVM6CkBAIC0yODEsNiArMjgzLDcgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgbmV3X2ludDsKIAorCVdMX0xPQ0sod2wpOwogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0xJU1RFTl9JTlRFUlZBTCkgewogCQlXTF9OT05FKCIlczogU2V0dGluZyBsaXN0ZW4gaW50ZXJ2YWwgdG8gJWRcbiIsCiAJCQlfX2Z1bmNfXywgY29uZi0+bGlzdGVuX2ludGVydmFsKTsKQEAgLTMzNyw2ICszNDAsNyBAQAogCX0KIAogIGNvbmZpZ19vdXQ6CisJV0xfVU5MT0NLKHdsKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC00NTUsMTMgKzQ1OSwyMSBAQAogCiBzdGF0aWMgdm9pZCB3bF9vcHNfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKKwlzdHJ1Y3Qgd2xfaW5mbyAqd2wgPSBody0+cHJpdjsKIAlXTF9OT05FKCJTY2FuIFN0YXJ0XG4iKTsKKwlXTF9MT0NLKHdsKTsKKwl3bGNfc2Nhbl9zdGFydCh3bC0+d2xjKTsKKwlXTF9VTkxPQ0sod2wpOwogCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgd2xfb3BzX3N3X3NjYW5fY29tcGxldGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CisJc3RydWN0IHdsX2luZm8gKndsID0gaHctPnByaXY7CiAJV0xfTk9ORSgiU2NhbiBDb21wbGV0ZVxuIik7CisJV0xfTE9DSyh3bCk7CisJd2xjX3NjYW5fc3RvcCh3bC0+d2xjKTsKKwlXTF9VTkxPQ0sod2wpOwogCXJldHVybjsKIH0KIApAQCAtNzc5LDcgKzc5MSw3IEBACiAJd2xfZm91bmQrKzsKIAlyZXR1cm4gd2w7CiAKLSBmYWlsOgorZmFpbDoKIAl3bF9mcmVlKHdsKTsKIGZhaWwxOgogCXJldHVybiBOVUxMOwpAQCAtMTA5MCw3ICsxMTAyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIExJTlVYU1RBX1BTCiBzdGF0aWMgaW50IHdsX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgd2xfaW5mbyAqd2w7CkBAIC0xMTA1LDExICsxMTE2LDEyIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCS8qIG9ubHkgbmVlZCB0byBmbGFnIGh3IGlzIGRvd24gZm9yIHByb3BlciByZXN1bWUgKi8KIAlXTF9MT0NLKHdsKTsKLQl3bF9kb3duKHdsKTsKIAl3bC0+cHViLT5od191cCA9IGZhbHNlOwogCVdMX1VOTE9DSyh3bCk7Ci0JcGNpX3NhdmVfc3RhdGUocGRldiwgd2wtPnBjaV9wc3N0YXRlKTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlyZXR1cm4gcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogfQpAQCAtMTEzMyw3ICsxMTQ1LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldiwgd2wtPnBjaV9wc3N0YXRlKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpCkBAIC0xMTQ1LDEzICsxMTU3LDEyIEBACiAJaWYgKCh2YWwgJiAweDAwMDBmZjAwKSAhPSAwKQogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsIHZhbCAmIDB4ZmZmZjAwZmYpOwogCi0JV0xfTE9DSyh3bCk7Ci0JZXJyID0gd2xfdXAod2wpOwotCVdMX1VOTE9DSyh3bCk7Ci0KKwkvKgorCSogIGRvbmUuIGRyaXZlciB3aWxsIGJlIHB1dCBpbiB1cCBzdGF0ZQorCSogIGluIHdsX29wc19hZGRfaW50ZXJmYWNlKCkgY2FsbC4KKwkqLwogCXJldHVybiBlcnI7CiB9Ci0jZW5kaWYJCQkJLyogTElOVVhTVEFfUFMgKi8KIAogc3RhdGljIHZvaWQgd2xfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtMTE4NCwxNCArMTE5NSwxMiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgd2xfcGNpX2RyaXZlciA9IHsKLSAubmFtZSAgPSAiYnJjbTgwMjExIiwKLSAucHJvYmUgPSB3bF9wY2lfcHJvYmUsCi0jaWZkZWYgTElOVVhTVEFfUFMKLSAuc3VzcGVuZCA9IHdsX3N1c3BlbmQsCi0gLnJlc3VtZSAgPSB3bF9yZXN1bWUsCi0jZW5kaWYJCQkJLyogTElOVVhTVEFfUFMgKi8KLSAucmVtb3ZlICAgPSBfX2RldmV4aXRfcCh3bF9yZW1vdmUpLAotIC5pZF90YWJsZSA9IHdsX2lkX3RhYmxlLAorCS5uYW1lID0gImJyY204MDIxMSIsCisJLnByb2JlID0gd2xfcGNpX3Byb2JlLAorCS5zdXNwZW5kID0gd2xfc3VzcGVuZCwKKwkucmVzdW1lID0gd2xfcmVzdW1lLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bF9yZW1vdmUpLAorCS5pZF90YWJsZSA9IHdsX2lkX3RhYmxlLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsY19tYWM4MDIxMS5jCmluZGV4IDFkNWQwMWEuLmUzN2U4MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsY19tYWM4MDIxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsY19tYWM4MDIxMS5jCkBAIC01MTI2LDcgKzUxMjYsNiBAQAogCWZpZm8gPSBwcmlvMmZpZm9bcHJpb107CiAKIAlBU1NFUlQoKHVpbnQpIHNrYl9oZWFkcm9vbShzZHUpID49IFRYT0ZGKTsKLQlBU1NFUlQoIShzZHUtPmNsb25lZCkpOwogCUFTU0VSVCghKHNkdS0+bmV4dCkpOwogCUFTU0VSVCghKHNkdS0+cHJldikpOwogCUFTU0VSVChmaWZvIDwgTkZJRk8pOwpAQCAtODQ2MiwzICs4NDYxLDE2IEBACiAKIAlrZnJlZShxaSk7CiB9CisKKy8qCisgKiBGbGFnICdzY2FuIGluIHByb2dyZXNzJyB0byB3aXRob2xkIGR5bmFtaWMgcGh5IGNhbGlicmF0aW9uCisgKi8KK3ZvaWQgd2xjX3NjYW5fc3RhcnQoc3RydWN0IHdsY19pbmZvICp3bGMpCit7CisJd2xjX3BoeV9ob2xkX3VwZCh3bGMtPmJhbmQtPnBpLCBQSFlfSE9MRF9GT1JfU0NBTiwgdHJ1ZSk7Cit9CisKK3ZvaWQgd2xjX3NjYW5fc3RvcChzdHJ1Y3Qgd2xjX2luZm8gKndsYykKK3sKKwl3bGNfcGh5X2hvbGRfdXBkKHdsYy0+YmFuZC0+cGksIFBIWV9IT0xEX0ZPUl9TQ0FOLCBmYWxzZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfcHViLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfcHViLmgKaW5kZXggMTQ2YTY5MC4uYWZmNDEzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xjX3B1Yi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsY19wdWIuaApAQCAtNTcwLDYgKzU3MCw4IEBACiBleHRlcm4gdTE2IHdsY19yYXRlX3NobV9vZmZzZXQoc3RydWN0IHdsY19pbmZvICp3bGMsIHU4IHJhdGUpOwogZXh0ZXJuIHUzMiB3bGNfZ2V0X3JzcGVjX2hpc3Rvcnkoc3RydWN0IHdsY19ic3NjZmcgKmNmZyk7CiBleHRlcm4gdTMyIHdsY19nZXRfY3VycmVudF9oaWdoZXN0X3JhdGUoc3RydWN0IHdsY19ic3NjZmcgKmNmZyk7CitleHRlcm4gdm9pZCB3bGNfc2Nhbl9zdGFydChzdHJ1Y3Qgd2xjX2luZm8gKndsYyk7CitleHRlcm4gdm9pZCB3bGNfc2Nhbl9zdG9wKHN0cnVjdCB3bGNfaW5mbyAqd2xjKTsKIAogc3RhdGljIGlubGluZSBpbnQgd2xjX2lvdmFyX2dldHVpbnQoc3RydWN0IHdsY19pbmZvICp3bGMsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICAgIHVpbnQgKmFyZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZwppbmRleCBhYWQ0NzMyLi4xNTAyZDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCkBAIC00MzksNiArNDM5LDcgQEAKIGNvbmZpZyBDT01FRElfTklfQVRNSU8KIAl0cmlzdGF0ZSAiTkkgQVQtTUlPIEUgc2VyaWVzIElTQS1QTlAgY2FyZCBzdXBwb3J0IgogCWRlcGVuZHMgb24gSVNBUE5QICYmIENPTUVESV9OSV9USU8gJiYgQ09NRURJX05JX0NPTU1PTgorCXNlbGVjdCBDT01FRElfODI1NQogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBBVC1NSU8gRSBzZXJpZXMgY2FyZHMKQEAgLTEwNDAsNiArMTA0MSw4IEBACiBjb25maWcgQ09NRURJX05JX1BDSU1JTwogCXRyaXN0YXRlICJOSSBQQ0ktTUlPLUUgc2VyaWVzIGFuZCBNIHNlcmllcyBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ09NRURJX05JX1RJTyAmJiBDT01FRElfTklfQ09NTU9OCisJc2VsZWN0IENPTUVESV84MjU1CisJc2VsZWN0IENPTUVESV9GQwogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ0ktTUlPLUUgc2VyaWVzIGFuZCBNIHNlcmllcwpAQCAtMTE2NCw2ICsxMTY3LDcgQEAKIGNvbmZpZyBDT01FRElfTklfTUlPX0NTCiAJdHJpc3RhdGUgIk5JIERBUUNhcmQgRSBzZXJpZXMgUENNQ0lBIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDT01FRElfTklfVElPICYmIENPTUVESV9OSV9DT01NT04KKwlzZWxlY3QgQ09NRURJXzgyNTUKIAlzZWxlY3QgQ09NRURJX0ZDCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQpAQCAtMTI2OCw3ICsxMjcyLDYgQEAKIGNvbmZpZyBDT01FRElfTklfVElPCiAJdHJpc3RhdGUgIk5JIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDT01FRElfTUlURQotCXNlbGVjdCBDT01FRElfODI1NQogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBnZW5lcmFsIHB1cnBvc2UgY291bnRlcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYwppbmRleCBjZDI1YjI0Li5mZDI3NGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMKQEAgLTYxLDggKzYxLDYgQEAKICNkZWZpbmUgUENJX0RBUV9TSVpFCQk0MDk2CiAjZGVmaW5lIFBDSV9EQVFfU0laRV82NjBYICAgICAgIDgxOTIKIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCiBzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGVfZGV2aWNlczsKIEVYUE9SVF9TWU1CT0wobWl0ZV9kZXZpY2VzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMKaW5kZXggMTRlNzE2ZS4uNTQ3NDFjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jCkBAIC01MjcsMyArNTI3LDcgQEAKIAogbW9kdWxlX2luaXQoZHJpdmVyX25pNjUyN19pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChkcml2ZXJfbmk2NTI3X2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKaW5kZXggOGI4ZTJhYS4uNDAzZmMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCkBAIC04NzEsMyArODcxLDcgQEAKIAogbW9kdWxlX2luaXQoZHJpdmVyX25pXzY1eHhfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQoZHJpdmVyX25pXzY1eHhfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYwppbmRleCA2NjEyYjA4Li5jYTJhZWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKQEAgLTE0MjEsMyArMTQyMSw3IEBACiAJfTsKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKaW5kZXggZTlmMDM0ZS4uZDhkOTFmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCkBAIC0zODQsMyArMzg0LDcgQEAKIAltaXRlX2xpc3RfZGV2aWNlcygpOwogCXJldHVybiAtRUlPOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCmluZGV4IDRkMTg2OGQuLjA3MjhjM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCkBAIC01NzUsNyArNTc1LDggQEAKIAkvKiBncmFiIG91ciBJUlEgKi8KIAlpZiAoaXJxKSB7CiAJCWlzcl9mbGFncyA9IDA7Ci0JCWlmICh0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gcGNpX2J1c3R5cGUpCisJCWlmICh0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gcGNpX2J1c3R5cGUKKwkJICAgIHx8IHRoaXNib2FyZC0+YnVzdHlwZSA9PSBwY21jaWFfYnVzdHlwZSkKIAkJCWlzcl9mbGFncyB8PSBJUlFGX1NIQVJFRDsKIAkJaWYgKHJlcXVlc3RfaXJxKGlycSwgbGFicGNfaW50ZXJydXB0LCBpc3JfZmxhZ3MsCiAJCQkJZHJpdmVyX2xhYnBjLmRyaXZlcl9uYW1lLCBkZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKaW5kZXggODRhMTVjMy4uMDA1ZDJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwpAQCAtMTM1NCwzICsxMzU0LDcgQEAKIAogbW9kdWxlX2luaXQoZHJpdmVyX3BjaWRpb19pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChkcml2ZXJfcGNpZGlvX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCmluZGV4IDIzYTM4MTIuLjkxNDhhYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKQEAgLTE4NTMsMyArMTg1Myw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKaW5kZXggYjNkMDVmYy4uNGZiODA5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCkBAIC0zNjgsNiArMzY4LDcgQEAKIAkJYmxrZGV2LT5nZC0+Zmlyc3RfbWlub3IgPSAwOwogCWJsa2Rldi0+Z2QtPmZvcHMgPSAmYmxvY2tfb3BzOwogCWJsa2Rldi0+Z2QtPnByaXZhdGVfZGF0YSA9IGJsa2RldjsKKwlibGtkZXYtPmdkLT5kcml2ZXJmc19kZXYgPSAmKGJsa2Rldi0+ZGV2aWNlX2N0eC0+ZGV2aWNlKTsKIAlzcHJpbnRmKGJsa2Rldi0+Z2QtPmRpc2tfbmFtZSwgImhkJWMiLCAnYScgKyBkZXZudW0pOwogCiAJYmxrdnNjX2RvX2lucXVpcnkoYmxrZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYwppbmRleCBkZjljZDEzLi4wZWRiZTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzYy5jCkBAIC0xMjc5LDcgKzEyNzksNyBAQAogCS8qIEFTU0VSVChkZXZpY2UpOyAqLwogCiAJcGFja2V0ID0ga3phbGxvYyhORVRWU0NfUEFDS0VUX1NJWkUgKiBzaXplb2YodW5zaWduZWQgY2hhciksCi0JCQkgR0ZQX0tFUk5FTCk7CisJCQkgR0ZQX0FUT01JQyk7CiAJaWYgKCFwYWNrZXQpCiAJCXJldHVybjsKIAlidWZmZXIgPSBwYWNrZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYwppbmRleCAwMTQ3YjQwLi5iNDFjOTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKQEAgLTIzNiw2ICsyMzYsNyBAQAogCWlmIChzdGF0dXMgPT0gMSkgewogCQluZXRpZl9jYXJyaWVyX29uKG5ldCk7CiAJCW5ldGlmX3dha2VfcXVldWUobmV0KTsKKwkJbmV0aWZfbm90aWZ5X3BlZXJzKG5ldCk7CiAJfSBlbHNlIHsKIAkJbmV0aWZfY2Fycmllcl9vZmYobmV0KTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwpAQCAtMzU4LDcgKzM1OSw2IEBACiAKIAkvKiBTZXQgaW5pdGlhbCBzdGF0ZSAqLwogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwogCiAJbmV0X2RldmljZV9jdHggPSBuZXRkZXZfcHJpdihuZXQpOwogCW5ldF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4ID0gZGV2aWNlX2N0eDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfY29yZS5jCmluZGV4IGRlYjY4YzguLmI4YjU0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2X2NvcmUuYwpAQCAtNjgsNyArNjgsNyBAQAogCS8qIENvcnJlc3BvbmRzIHRvIFZyZWYgLyAyXihiaXRzKSAqLwogCXVuc2lnbmVkIGludCBzY2FsZV91diA9IChzdC0+aW50X3ZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CiB9CiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGluX3NjYWxlLCBTX0lSVUdPLCBhZDc0NzZfc2hvd19zY2FsZSwgTlVMTCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfY29yZS5jCmluZGV4IDY4NTkwODkuLjVkODVlZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODg3X2NvcmUuYwpAQCAtNjgsNyArNjgsNyBAQAogCS8qIENvcnJlc3BvbmRzIHRvIFZyZWYgLyAyXihiaXRzKSAqLwogCXVuc2lnbmVkIGludCBzY2FsZV91diA9IChzdC0+aW50X3ZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CiB9CiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGluX3NjYWxlLCBTX0lSVUdPLCBhZDc4ODdfc2hvd19zY2FsZSwgTlVMTCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jCmluZGV4IDYzMDlkNTIuLjg5Y2NmMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYwpAQCAtNDMyLDcgKzQzMiw3IEBACiAJLyogQ29ycmVzcG9uZHMgdG8gVnJlZiAvIDJeKGJpdHMpICovCiAJdW5zaWduZWQgaW50IHNjYWxlX3V2ID0gKHN0LT5pbnRfdnJlZl9tdiAqIDEwMDApID4+IHN0LT5jaGlwX2luZm8tPmJpdHM7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwM2RcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKIH0KIAogc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl9zY2FsZSwgU19JUlVHTywgYWQ3OTl4X3Nob3dfc2NhbGUsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NDQ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU0NDYuYwppbmRleCBlMzM4N2NkLi4wZjg3ZWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU0NDYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU0NDYuYwpAQCAtODcsNyArODcsNyBAQAogCS8qIENvcnJlc3BvbmRzIHRvIFZyZWYgLyAyXihiaXRzKSAqLwogCXVuc2lnbmVkIGludCBzY2FsZV91diA9IChzdC0+dnJlZl9tdiAqIDEwMDApID4+IHN0LT5jaGlwX2luZm8tPmJpdHM7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwM2RcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKIH0KIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIob3V0X3NjYWxlLCBTX0lSVUdPLCBhZDU0NDZfc2hvd19zY2FsZSwgTlVMTCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKaW5kZXggZTM4ZTg5ZC4uZTJmNmQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKQEAgLTg3NCw3ICs4NzQsMTAgQEAKIAkJc2NfYWNjZXNzWzNdLnJlZ19hZGRyID0gMHgxMDk7CiAJCXNjX2FjY2Vzc1szXS5tYXNrID0gTUFTSzY7CiAJCXNjX2FjY2Vzc1szXS52YWx1ZSA9IDB4MDA7Ci0JCW51bV92YWwgPSA0OworCQlzY19hY2Nlc3NbNF0ucmVnX2FkZHIgPSAweDEwNDsKKwkJc2NfYWNjZXNzWzRdLnZhbHVlID0gMHgzQzsKKwkJc2NfYWNjZXNzWzRdLm1hc2sgPSAweGZmOworCQludW1fdmFsID0gNTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMKaW5kZXggM2ZlNWY0MS4uMGFhZDBkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY196aWxvZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfemlsb2cuYwpAQCAtNDk1LDcgKzQ5NSw3IEBACiAvKiBzZW5kIGJvb3QgZGF0YSB0byB0aGUgSVIgVFggZGV2aWNlICovCiBzdGF0aWMgaW50IHNlbmRfYm9vdF9kYXRhKHN0cnVjdCBJUl90eCAqdHgpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCXVuc2lnbmVkIGNoYXIgYnVmWzRdOwogCiAJLyogc2VuZCB0aGUgYm9vdCBibG9jayAqLwpAQCAtNTAzLDcgKzUwMyw3IEBACiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JLyoga2ljayBpdCBvZmY/ICovCisJLyogSGl0IHRoZSBnbyBidXR0b24gdG8gYWN0aXZhdGUgdGhlIG5ldyBib290IGRhdGEgKi8KIAlidWZbMF0gPSAweDAwOwogCWJ1ZlsxXSA9IDB4MjA7CiAJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHR4LT5jLCBidWYsIDIpOwpAQCAtNTExLDcgKzUxMSwxOSBAQAogCQl6aWxvZ19lcnJvcigiaTJjX21hc3Rlcl9zZW5kIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IC1FRkFVTFQ7CiAJfQotCXJldCA9IGkyY19tYXN0ZXJfc2VuZCh0eC0+YywgYnVmLCAxKTsKKworCS8qCisJICogV2FpdCBmb3Igemlsb2cgdG8gc2V0dGxlIGFmdGVyIGhpdHRpbmcgZ28gcG9zdCBib290IGJsb2NrIHVwbG9hZC4KKwkgKiBXaXRob3V0IHRoaXMgZGVsYXksIHRoZSBIRC1QVlIgYW5kIEhWUi0xOTUwIGJvdGggcmV0dXJuIGFuIC1FSU8KKwkgKiB1cG9uIGF0dGVtcHRpbmcgdG8gZ2V0IGZpcm13YXJlIHJldmlzaW9uLCBhbmQgdHggcHJvYmUgdGh1cyBmYWlscy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQodHgtPmMsIGJ1ZiwgMSk7CisJCWlmIChyZXQgPT0gMSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAwKTsKKwl9CisKIAlpZiAocmV0ICE9IDEpIHsKIAkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOwpAQCAtNTIzLDggKzUzNSw4IEBACiAJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3JlY3YgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoYnVmWzBdICE9IDB4ODApIHsKLQkJemlsb2dfZXJyb3IoInVuZXhwZWN0ZWQgSVIgVFggcmVzcG9uc2U6ICUwMnhcbiIsIGJ1ZlswXSk7CisJaWYgKChidWZbMF0gIT0gMHg4MCkgJiYgKGJ1ZlswXSAhPSAweGEwKSkgeworCQl6aWxvZ19lcnJvcigidW5leHBlY3RlZCBJUiBUWCBpbml0IHJlc3BvbnNlOiAlMDJ4XG4iLCBidWZbMF0pOwogCQlyZXR1cm4gMDsKIAl9CiAJemlsb2dfbm90aWZ5KCJaaWxvZy9IYXVwcGF1Z2UgSVIgYmxhc3RlciBmaXJtd2FyZSB2ZXJzaW9uICIKQEAgLTgyNyw3ICs4MzksMTUgQEAKIAkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOwogCX0KLQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQodHgtPmMsIGJ1ZiwgMSk7CisKKwkvKiBHaXZlIHRoZSB6OCBhIG1vbWVudCB0byBwcm9jZXNzIGRhdGEgYmxvY2sgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQodHgtPmMsIGJ1ZiwgMSk7CisJCWlmIChyZXQgPT0gMSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAwKTsKKwl9CisKIAlpZiAocmV0ICE9IDEpIHsKIAkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbXNtX2ZiLmMKaW5kZXggMjNmYTA0OS4uYTJmMjlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21zbV9mYi5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAlpZiAoKCFtZmQpIHx8IChtZmQtPmtleSAhPSBNRkRfS0VZKSkKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQobWZkLT5mYmksIDEpOwogCiAJcmV0ID0gbXNtX2ZiX3N1c3BlbmRfc3ViKG1mZCk7CkBAIC0zNTgsNyArMzU4LDcgQEAKIAkJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gc3RhdGU7CiAJfQogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KICNlbHNlCkBAIC00MzEsMTEgKzQzMSwxMSBAQAogCWlmICgoIW1mZCkgfHwgKG1mZC0+a2V5ICE9IE1GRF9LRVkpKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlyZXQgPSBtc21fZmJfcmVzdW1lX3N1YihtZmQpOwogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAJZmJfc2V0X3N1c3BlbmQobWZkLT5mYmksIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbi5jCmluZGV4IDlmMjZkYzkuLjU2YTI4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24uYwpAQCAtMzczLDE3ICszNzMsMTcgQEAKIAkJICoKIAkJICogRm9yIG5vdywgd2UganVzdCBob3BlLi4KIAkJICovCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWlnbm9yZV9mYl9ldmVudHMgPSAxOwogCQlpZiAoZmJfYmxhbmsoZmJpbmZvLCBGQl9CTEFOS19VTkJMQU5LKSkgewogCQkJaWdub3JlX2ZiX2V2ZW50cyA9IDA7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJcHJpbnRrKEtFUk5fRVJSICJvbHBjLWRjb246ICBGYWlsZWQgdG8gZW50ZXIgQ1BVIG1vZGVcbiIpOwogCQkJZGNvbl9wZW5kaW5nID0gRENPTl9TT1VSQ0VfRENPTjsKIAkJCXJldHVybjsKIAkJfQogCQlpZ25vcmVfZmJfZXZlbnRzID0gMDsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCiAJCS8qIEFuZCB0dXJuIG9mZiB0aGUgRENPTiAqLwogCQlwZGF0YS0+c2V0X2Rjb25sb2FkKDEpOwpAQCAtNDM1LDEyICs0MzUsMTIgQEAKIAkJCX0KIAkJfQogCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWlnbm9yZV9mYl9ldmVudHMgPSAxOwogCQlpZiAoZmJfYmxhbmsoZmJpbmZvLCBGQl9CTEFOS19QT1dFUkRPV04pKQogCQkJcHJpbnRrKEtFUk5fRVJSICJvbHBjLWRjb246ICBjb3VsZG4ndCBibGFuayBmYiFcbiIpOwogCQlpZ25vcmVfZmJfZXZlbnRzID0gMDsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCiAJCXByaW50ayhLRVJOX0lORk8gIm9scGMtZGNvbjogVGhlIERDT04gaGFzIGNvbnRyb2xcbiIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYwppbmRleCA3MDE1NjFkLi4yMzZkZDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCkBAIC00ODQsOCArNDg0LDYgQEAKIAluZXRfZGV2LT5tbF9wcml2ID0gKHZvaWQgKilwQWQ7CiAJcEFkLT5uZXRfZGV2ID0gbmV0X2RldjsKIAotCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7Ci0KIAlyZXR1cm4gbmV0X2RldjsKIAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvdXNiX21haW5fZGV2LmMKaW5kZXggZWU2OGQ1MS4uMzIyYmY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3VzYl9tYWluX2Rldi5jCkBAIC0xMDYsNiArMTA2LDcgQEAKIAl7VVNCX0RFVklDRSgweDA0MTEsIDB4MDE2Zil9LAkvKiBNZWxDby4sSW5jLiBXTEktVUMtRzMwMU4gKi8KIAl7VVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MCl9LAkvKiBMaW5rc3lzIFdVU0IxMDAgKi8KIAl7VVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MSl9LAkvKiBMaW5rc3lzIFdVU0I2MDBOICovCisJe1VTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzgpfSwJLyogTGlua3N5cyBXVVNCMTAwdjIgKi8KIAl7VVNCX0RFVklDRSgweDA0MTEsIDB4MDBlOCl9LAkvKiBCdWZmYWxvIFdMSS1VQy1HMzAwTiAqLwogCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg4MTVjKX0sCS8qIEJlbGtpbiBGNUQ4MDUzICovCiAJe1VTQl9ERVZJQ0UoMHgxMDBELCAweDkwMzEpfSwJLyogTW90b3JvbGEgMjc3MCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaGFsX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL2hhbF9pbml0LmMKaW5kZXggMzIwODhhNi4uODRiZTM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaGFsX2luaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9oYWxfaW5pdC5jCkBAIC0xMjgsMTIgKzEyOCwxMyBAQAogCXU4ICpwdG1wY2hhciA9IE5VTEwsICpwcGF5bG9hZCwgKnB0cjsKIAlzdHJ1Y3QgdHhfZGVzYyAqcHR4X2Rlc2M7CiAJdTMyIHR4ZHNjcF9zeiA9IHNpemVvZihzdHJ1Y3QgdHhfZGVzYyk7CisJdTggcmV0ID0gX0ZBSUw7CiAKIAl1bGZpbGVsZW5ndGggPSBydGw4NzF4X29wZW5fZncocGFkYXB0ZXIsICZwaGZ3ZmlsZV9oZGwsICZwbWFwcGVkZncpOwogCWlmIChwbWFwcGVkZncgJiYgKHVsZmlsZWxlbmd0aCA+IDApKSB7CiAJCXVwZGF0ZV9md2hkcigmZndoZHIsIHBtYXBwZWRmdyk7CiAJCWlmIChjaGtfZndoZHIoJmZ3aGRyLCB1bGZpbGVsZW5ndGgpID09IF9GQUlMKQotCQkJZ290byBleGl0X2ZhaWw7CisJCQlnb3RvIGZpcm13YXJlX3JlbDsKIAkJZmlsbF9md3ByaXYocGFkYXB0ZXIsICZmd2hkci5md3ByaXYpOwogCQkvKiBmaXJtd2FyZSBjaGVjayBvayAqLwogCQltYXhsZW4gPSAoZndoZHIuaW1nX0lNRU1fc2l6ZSA+IGZ3aGRyLmltZ19TUkFNX3NpemUpID8KQEAgLTE0MSw3ICsxNDIsNyBAQAogCQltYXhsZW4gKz0gdHhkc2NwX3N6OwogCQlwdG1wY2hhciA9IF9tYWxsb2MobWF4bGVuICsgRldCVUZGX0FMSUdOX1NaKTsKIAkJaWYgKHB0bXBjaGFyID09IE5VTEwpCi0JCQlyZXR1cm4gX0ZBSUw7CisJCQlnb3RvIGZpcm13YXJlX3JlbDsKIAogCQlwdHhfZGVzYyA9IChzdHJ1Y3QgdHhfZGVzYyAqKShwdG1wY2hhciArIEZXQlVGRl9BTElHTl9TWiAtCiAJCQkgICAgKChhZGRyX3QpKHB0bXBjaGFyKSAmIChGV0JVRkZfQUxJR05fU1ogLSAxKSkpOwpAQCAtMjczLDExICsyNzQsMTMgQEAKIAkJCWdvdG8gZXhpdF9mYWlsOwogCX0gZWxzZQogCQlnb3RvIGV4aXRfZmFpbDsKLQlyZXR1cm4gX1NVQ0NFU1M7CisJcmV0ID0gX1NVQ0NFU1M7CiAKIGV4aXRfZmFpbDoKIAlrZnJlZShwdG1wY2hhcik7Ci0JcmV0dXJuIF9GQUlMOworZmlybXdhcmVfcmVsOgorCXJlbGVhc2VfZmlybXdhcmUoKHN0cnVjdCBmaXJtd2FyZSAqKXBoZndmaWxlX2hkbCk7CisJcmV0dXJuIHJldDsKIH0KIAogdWludCBydGw4NzEyX2hhbF9pbml0KHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaW50Zi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvdXNiX2ludGYuYwppbmRleCBhNjkyZWU4Li4yMWNlMmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaW50Zi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3VzYl9pbnRmLmMKQEAgLTQ3LDU0ICs0NywxMjMgQEAKIHN0YXRpYyB2b2lkIHI4NzF4dV9kZXZfcmVtb3ZlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICpwdXNiX2ludGYpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnRsODcxeF91c2JfaWRfdGJsW10gPSB7Ci0JLyo5MlNVCi0JICogUmVhbHRlayAqLwotCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTcxKX0sCi0Je1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxNzIpfSwKKworLyogUlRMODE4OFNVICovCisJLyogUmVhbHRlayAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg4MTcxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxNzMpfSwKLQl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE3NCl9LAogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4NzEyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDg3MTMpfSwKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4QzUxMil9LAotCS8qIEFib2NvbSAgKi8KKwkvKiBBYm9jb20gKi8KIAl7VVNCX0RFVklDRSgweDA3QjgsIDB4ODE4OCl9LAotCS8qIENvcmVnYSAqLwotCXtVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDQ3KX0sCi0JLyogRGxpbmsgKi8KLQl7VVNCX0RFVklDRSgweDA3ZDEsIDB4MzMwMyl9LAotCXtVU0JfREVWSUNFKDB4MDdkMSwgMHgzMzAyKX0sCi0Je1VTQl9ERVZJQ0UoMHgwN2QxLCAweDMzMDApfSwKLQkvKiBEbGluayBmb3IgU2t5d29ydGggKi8KLQl7VVNCX0RFVklDRSgweDE0YjIsIDB4MzMwMCl9LAotCXtVU0JfREVWSUNFKDB4MTRiMiwgMHgzMzAxKX0sCi0Je1VTQl9ERVZJQ0UoMHgxNGIyLCAweDMzMDIpfSwKLQkvKiBFbkdlbml1cyAqLwotCXtVU0JfREVWSUNFKDB4MTc0MCwgMHg5NjAzKX0sCi0Je1VTQl9ERVZJQ0UoMHgxNzQwLCAweDk2MDUpfSwKKwkvKiBBU1VTICovCisJe1VTQl9ERVZJQ0UoMHgwQjA1LCAweDE3ODYpfSwKKwl7VVNCX0RFVklDRSgweDBCMDUsIDB4MTc5MSl9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJLyogQmVsa2luICovCi0Je1VTQl9ERVZJQ0UoMHgwNTBkLCAweDgxNUYpfSwKLQl7VVNCX0RFVklDRSgweDA1MGQsIDB4OTQ1QSl9LAotCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg4NDVBKX0sCi0JLyogR3VpbGxlbW90ICovCi0Je1VTQl9ERVZJQ0UoMHgwNmY4LCAweGUwMzEpfSwKKwl7VVNCX0RFVklDRSgweDA1MEQsIDB4OTQ1QSl9LAorCS8qIENvcmVnYSAqLworCXtVU0JfREVWSUNFKDB4MDdBQSwgMHgwMDQ3KX0sCisJLyogRC1MaW5rICovCisJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweDMzMDYpfSwKKwl7VVNCX0RFVklDRSgweDA3RDEsIDB4MzMwNil9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJLyogRWRpbWF4ICovCiAJe1VTQl9ERVZJQ0UoMHg3MzkyLCAweDc2MTEpfSwKLQl7VVNCX0RFVklDRSgweDczOTIsIDB4NzYxMil9LAotCXtVU0JfREVWSUNFKDB4NzM5MiwgMHg3NjIyKX0sCisJLyogRW5HZW5pdXMgKi8KKwl7VVNCX0RFVklDRSgweDE3NDAsIDB4OTYwMyl9LAorCS8qIEhhd2tpbmcgKi8KKwl7VVNCX0RFVklDRSgweDBFNjYsIDB4MDAxNil9LAorCS8qIEhlcmN1bGVzICovCisJe1VTQl9ERVZJQ0UoMHgwNkY4LCAweEUwMzQpfSwKKwl7VVNCX0RFVklDRSgweDA2RjgsIDB4RTAzMil9LAorCS8qIExvZ2l0ZWMgKi8KKwl7VVNCX0RFVklDRSgweDA3ODksIDB4MDE2Nyl9LAorCS8qIFBDSSAqLworCXtVU0JfREVWSUNFKDB4MjAxOSwgMHhBQjI4KX0sCisJe1VTQl9ERVZJQ0UoMHgyMDE5LCAweEVEMTYpfSwKIAkvKiBTaXRlY29tICovCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNTcpfSwKIAl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0NSl9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDU5KX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0Qil9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDYzKX0sCisJLyogU3dlZXggKi8KKwl7VVNCX0RFVklDRSgweDE3N0YsIDB4MDE1NCl9LAorCS8qIFRoaW5rd2FyZSAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg1MDc3KX0sCisJLyogVG9zaGliYSAqLworCXtVU0JfREVWSUNFKDB4MTY5MCwgMHgwNzUyKX0sCisJLyogLSAqLworCXtVU0JfREVWSUNFKDB4MjBGNCwgMHg2NDZCKX0sCisJe1VTQl9ERVZJQ0UoMHgwODNBLCAweEM1MTIpfSwKKworLyogUlRMODE5MVNVICovCisJLyogUmVhbHRlayAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg4MTcyKX0sCisJLyogQW1pZ28gKi8KKwl7VVNCX0RFVklDRSgweDBFQjAsIDB4OTA2MSl9LAorCS8qIEFTVVMvRUtCICovCisJe1VTQl9ERVZJQ0UoMHgwQkRBLCAweDgxNzIpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMyMyl9LAorCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzExKX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzM0Mil9LAorCS8qIEFTVVMvRUtCTGVub3ZvICovCisJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMzMpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzNCl9LAorCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzM1KX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzNil9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCisJLyogQVNVUy9NZWRpYSBCT1ggKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMwOSl9LAorCS8qIEJlbGtpbiAqLworCXtVU0JfREVWSUNFKDB4MDUwRCwgMHg4MTVGKX0sCisJLyogRC1MaW5rICovCisJe1VTQl9ERVZJQ0UoMHgwN0QxLCAweDMzMDIpfSwKKwl7VVNCX0RFVklDRSgweDA3RDEsIDB4MzMwMCl9LAorCXtVU0JfREVWSUNFKDB4MDdEMSwgMHgzMzAzKX0sCisJLyogRWRpbWF4ICovCisJe1VTQl9ERVZJQ0UoMHg3MzkyLCAweDc2MTIpfSwKKwkvKiBFbkdlbml1cyAqLworCXtVU0JfREVWSUNFKDB4MTc0MCwgMHg5NjA1KX0sCisJLyogR3VpbGxlbW90ICovCisJe1VTQl9ERVZJQ0UoMHgwNkY4LCAweEUwMzEpfSwKIAkvKiBIYXdraW5nICovCiAJe1VTQl9ERVZJQ0UoMHgwRTY2LCAweDAwMTUpfSwKLQl7VVNCX0RFVklDRSgweDBFNjYsIDB4MDAxNil9LAotCXtVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzg2KX0sCi0Je1VTQl9ERVZJQ0UoMHgwYjA1LCAweDE3OTEpfSwgICAgLyogMTFuIG1vZGUgZGlzYWJsZSAqLwotCisJLyogTWVkaWFvICovCiAJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMDYpfSwKLQl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMwOSl9LAorCS8qIFBDSSAqLworCXtVU0JfREVWSUNFKDB4MjAxOSwgMHhFRDE4KX0sCisJe1VTQl9ERVZJQ0UoMHgyMDE5LCAweDQ5MDEpfSwKKwkvKiBTaXRlY29tICovCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNTgpfSwKKwl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0OSl9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDRDKX0sCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNjQpfSwKKwkvKiBTa3l3b3J0aCAqLworCXtVU0JfREVWSUNFKDB4MTRiMiwgMHgzMzAwKX0sCisJe1VTQl9ERVZJQ0UoMHgxNGIyLCAweDMzMDEpfSwKKwl7VVNCX0RFVklDRSgweDE0QjIsIDB4MzMwMil9LAorCS8qIC0gKi8KKwl7VVNCX0RFVklDRSgweDA0RjIsIDB4QUZGMil9LAorCXtVU0JfREVWSUNFKDB4MDRGMiwgMHhBRkY1KX0sCisJe1VTQl9ERVZJQ0UoMHgwNEYyLCAweEFGRjYpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzOSl9LAorCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzQwKX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzM0MSl9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMTApfSwKLQl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMxMSl9LCAgICAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMjUpfSwKLQl7VVNCX0RFVklDRSgweDA4M0EsIDB4QzUxMil9LAorCisvKiBSVEw4MTkyU1UgKi8KKwkvKiBSZWFsdGVrICovCisJe1VTQl9ERVZJQ0UoMHgwQkRBLCAweDgxNzQpfSwKKwl7VVNCX0RFVklDRSgweDBCREEsIDB4ODE3NCl9LAorCS8qIEJlbGtpbiAqLworCXtVU0JfREVWSUNFKDB4MDUwRCwgMHg4NDVBKX0sCisJLyogQ29yZWdhICovCisJe1VTQl9ERVZJQ0UoMHgwN0FBLCAweDAwNTEpfSwKKwkvKiBFZGltYXggKi8KKwl7VVNCX0RFVklDRSgweDczOTIsIDB4NzYyMil9LAorCS8qIE5FQyAqLworCXtVU0JfREVWSUNFKDB4MDQwOSwgMHgwMkI2KX0sCiAJe30KIH07CiAKQEAgLTEwMyw4ICsxNzIsMjAgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3BlY2lmaWNfZGV2aWNlX2lkIHNwZWNpZmljX2RldmljZV9pZF90YmxbXSA9IHsKIAl7LmlkVmVuZG9yID0gMHgwYjA1LCAuaWRQcm9kdWN0ID0gMHgxNzkxLAogCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MGRmNiwgLmlkUHJvZHVjdCA9IDB4MDA1OSwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAorCXsuaWRWZW5kb3IgPSAweDEzZDMsIC5pZFByb2R1Y3QgPSAweDMzMDYsCisJCSAuZmxhZ3MgPSBTUEVDX0RFVl9JRF9ESVNBQkxFX0hUfSwKIAl7LmlkVmVuZG9yID0gMHgxM0QzLCAuaWRQcm9kdWN0ID0gMHgzMzExLAogCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MTNkMywgLmlkUHJvZHVjdCA9IDB4MzMzNSwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAorCXsuaWRWZW5kb3IgPSAweDEzZDMsIC5pZFByb2R1Y3QgPSAweDMzMzYsCisJCSAuZmxhZ3MgPSBTUEVDX0RFVl9JRF9ESVNBQkxFX0hUfSwKKwl7LmlkVmVuZG9yID0gMHgxM2QzLCAuaWRQcm9kdWN0ID0gMHgzMzQwLAorCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MTNkMywgLmlkUHJvZHVjdCA9IDB4MzM0MSwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKaW5kZXggMGJjMTEzYy4uZDAwN2U0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwpAQCAtMTA0NCw5ICsxMDQ0LDkgQEAKIAogCS8qIHdoZW4gZG9pbmcgc3VzcGVuZCwgY2FsbCBmYiBhcGlzIGFuZCBwY2kgYXBpcyAqLwogCWlmIChtc2cuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgewotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlmYl9zZXRfc3VzcGVuZCgmc2ZiLT5mYiwgMSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0diA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJCXJldHYgPSBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIG1zZyk7CkBAIC0xMTA1LDkgKzExMDUsOSBAQAogCiAJc210Y2ZiX3NldG1vZGUoc2ZiKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZCgmc2ZiLT5mYiwgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2tvYmplY3RzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9rb2JqZWN0cy5jCmluZGV4IDQwOGJiOWIuLjA3YTdmNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2tvYmplY3RzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAva29iamVjdHMuYwpAQCAtMzMyLDcgKzMzMiw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxlbiA9IHN0cmxlbihidWYpOwotCWlmIChsZW4gPiAwIHx8IGxlbiA8IDMpIHsKKwlpZiAobGVuID4gMCAmJiBsZW4gPCAzKSB7CiAJCWNoID0gYnVmWzBdOwogCQlpZiAoY2ggPT0gJ1xuJykKIAkJCWNoID0gJzAnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0ZV9ybWk0L3N5bmFwdGljc19pMmNfcm1pNC5jIGIvZHJpdmVycy9zdGFnaW5nL3N0ZV9ybWk0L3N5bmFwdGljc19pMmNfcm1pNC5jCmluZGV4IGU4ZjA0N2UuLjgwMTgzYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGVfcm1pNC9zeW5hcHRpY3NfaTJjX3JtaTQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RlX3JtaTQvc3luYXB0aWNzX2kyY19ybWk0LmMKQEAgLTk4NiwxMiArOTg2LDYgQEAKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhybWk0X2RhdGEtPmlucHV0X2RldiwgQUJTX01UX1RPVUNIX01BSk9SLCAwLAogCQkJCQkJTUFYX1RPVUNIX01BSk9SLCAwLCAwKTsKIAotCXJldHZhbCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShybWk0X2RhdGEtPmlucHV0X2Rldik7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOmlucHV0IHJlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycl9pbnB1dF9yZWdpc3RlcjsKLQl9Ci0KIAkvKiBDbGVhciBpbnRlcnJ1cHRzICovCiAJc3luYXB0aWNzX3JtaTRfaTJjX2Jsb2NrX3JlYWQocm1pNF9kYXRhLAogCQkJcm1pNF9kYXRhLT5mbjAxX2RhdGFfYmFzZV9hZGRyICsgMSwgaW50cl9zdGF0dXMsCkBAIC0xMDAzLDE1ICs5OTcsMjAgQEAKIAlpZiAocmV0dmFsKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6VW5hYmxlIHRvIGdldCBhdHRuIGlycSAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgcGxhdGZvcm1kYXRhLT5pcnFfbnVtYmVyKTsKLQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CisJCWdvdG8gZXJyX3Vuc2V0X2NsaWVudGRhdGE7CisJfQorCisJcmV0dmFsID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHJtaTRfZGF0YS0+aW5wdXRfZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6aW5wdXQgcmVnaXN0ZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCX0KIAogCXJldHVybiByZXR2YWw7CiAKLWVycl9yZXF1ZXN0X2lycToKK2Vycl9mcmVlX2lycToKIAlmcmVlX2lycShwbGF0Zm9ybWRhdGEtPmlycV9udW1iZXIsIHJtaTRfZGF0YSk7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2Uocm1pNF9kYXRhLT5pbnB1dF9kZXYpOwotZXJyX2lucHV0X3JlZ2lzdGVyOgorZXJyX3Vuc2V0X2NsaWVudGRhdGE6CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiBlcnJfcXVlcnlfZGV2OgogCWlmIChwbGF0Zm9ybWRhdGEtPnJlZ3VsYXRvcl9lbikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvaW9fc20uYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2lvX3NtLmMKaW5kZXggNTcxODY0NS4uMjdlMGFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvaW9fc20uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9pb19zbS5jCkBAIC05NDksNyArOTQ5LDcgQEAKICAqICAgICAgQ2FsbHMgdGhlIEJyaWRnZSdzIENITkxfSVNSIHRvIGRldGVybWluZSBpZiB0aGlzIGludGVycnVwdCBpcyBvdXJzLCB0aGVuCiAgKiAgICAgIHNjaGVkdWxlcyBhIERQQyB0byBkaXNwYXRjaCBJL08uCiAgKi8KLXZvaWQgaW9fbWJveF9tc2codTMyIG1zZykKK2ludCBpb19tYm94X21zZyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgbGVuLCB2b2lkICptc2cpCiB7CiAJc3RydWN0IGlvX21nciAqcGlvX21ncjsKIAlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iajsKQEAgLTk1OSw5ICs5NTksOSBAQAogCWRldl9nZXRfaW9fbWdyKGRldl9vYmosICZwaW9fbWdyKTsKIAogCWlmICghcGlvX21ncikKLQkJcmV0dXJuOworCQlyZXR1cm4gTk9USUZZX0JBRDsKIAotCXBpb19tZ3ItPmludHJfdmFsID0gKHUxNiltc2c7CisJcGlvX21nci0+aW50cl92YWwgPSAodTE2KSgodTMyKW1zZyk7CiAJaWYgKHBpb19tZ3ItPmludHJfdmFsICYgTUJYX1BNX0NMQVNTKQogCQlpb19kaXNwYXRjaF9wbShwaW9fbWdyKTsKIApAQCAtOTczLDcgKzk3Myw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpb19tZ3ItPmRwY19sb2NrLCBmbGFncyk7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJnBpb19tZ3ItPmRwY190YXNrbGV0KTsKIAl9Ci0JcmV0dXJuOworCXJldHVybiBOT1RJRllfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwLmMKaW5kZXggYTNiMGExOC4uYTNmNjlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcDM0MzAuYwpAQCAtMjIzLDYgKzIyMywxMCBAQAogCWJyaWRnZV9tc2dfc2V0X3F1ZXVlX2lkLAogfTsKIAorc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkc3BfbWJveF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGlvX21ib3hfbXNnLAorfTsKKwogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2FsbChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCkKIHsKIAlpZiAoZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9PSBCUkRfRFNQX0hJQkVSTkFUSU9OIHx8CkBAIC01NTMsNyArNTU3LDcgQEAKIAkJICogRW5hYmxlIE1haWxib3ggZXZlbnRzIGFuZCBhbHNvIGRyYWluIGFueSBwZW5kaW5nCiAJCSAqIHN0YWxlIG1lc3NhZ2VzLgogCQkgKi8KLQkJZGV2X2NvbnRleHQtPm1ib3ggPSBvbWFwX21ib3hfZ2V0KCJkc3AiKTsKKwkJZGV2X2NvbnRleHQtPm1ib3ggPSBvbWFwX21ib3hfZ2V0KCJkc3AiLCAmZHNwX21ib3hfbm90aWZpZXIpOwogCQlpZiAoSVNfRVJSKGRldl9jb250ZXh0LT5tYm94KSkgewogCQkJZGV2X2NvbnRleHQtPm1ib3ggPSBOVUxMOwogCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGdldCBkc3AgbWFpbGJveCBoYW5kbGVcbiIsCkBAIC01NjMsOCArNTY3LDYgQEAKIAogCX0KIAlpZiAoIXN0YXR1cykgewotCQlkZXZfY29udGV4dC0+bWJveC0+cnhxLT5jYWxsYmFjayA9IChpbnQgKCopKHZvaWQgKikpaW9fbWJveF9tc2c7Ci0KIC8qUE1fSVZBMkdSUFNFTF9QRVIgPSAweEMwOyovCiAJCXRlbXAgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CiAJCXRlbXAgPSAodGVtcCAmIDB4RkZGRkZGMzApIHwgMHhDMDsKQEAgLTY4NSw3ICs2ODcsNyBAQAogCS8qIERpc2FibGUgdGhlIG1haWxib3ggaW50ZXJydXB0cyAqLwogCWlmIChkZXZfY29udGV4dC0+bWJveCkgewogCQlvbWFwX21ib3hfZGlzYWJsZV9pcnEoZGV2X2NvbnRleHQtPm1ib3gsIElSUV9SWCk7Ci0JCW9tYXBfbWJveF9wdXQoZGV2X2NvbnRleHQtPm1ib3gpOworCQlvbWFwX21ib3hfcHV0KGRldl9jb250ZXh0LT5tYm94LCAmZHNwX21ib3hfbm90aWZpZXIpOwogCQlkZXZfY29udGV4dC0+bWJveCA9IE5VTEw7CiAJfQogCS8qIFJlc2V0IElWQTIgY2xvY2tzKi8KQEAgLTc4NiwxMCArNzg4LDcgQEAKIAogCXB0X2F0dHJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBnX3RhYmxlX2F0dHJzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHB0X2F0dHJzICE9IE5VTEwpIHsKLQkJLyogQXNzdW1pbmcgdGhhdCB3ZSB1c2Ugb25seSBEU1AncyBtZW1vcnkgbWFwCi0JCSAqIHVudGlsIDB4NDAwMDowMDAwICwgd2Ugd291bGQgbmVlZCBvbmx5IDEwMjQKLQkJICogTDEgZW50aWVzIGkuZSBMMSBzaXplID0gNEsgKi8KLQkJcHRfYXR0cnMtPmwxX3NpemUgPSAweDEwMDA7CisJCXB0X2F0dHJzLT5sMV9zaXplID0gU1pfMTZLOyAvKiA0MDk2IGVudHJpZXMgb2YgMzIgYml0cyAqLwogCQlhbGlnbl9zaXplID0gcHRfYXR0cnMtPmwxX3NpemU7CiAJCS8qIEFsaWduIHNpemVzIGFyZSBleHBlY3RlZCB0byBiZSBwb3dlciBvZiAyICovCiAJCS8qIHdlIGxpa2UgdG8gZ2V0IGFsaWduZWQgb24gTDEgdGFibGUgc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW9fc20uaAppbmRleCAxOGFlYzU1Li44MjQyYzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW9fc20uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW9fc20uaApAQCAtNzIsMjIgKzcyLDE3IEBACiAvKgogICogID09PT09PT09IGlvX21ib3hfbXNnID09PT09PT09CiAgKiAgUHVycG9zZToKLSAqICAgICAgTWFpbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgQnJpZGdlIGNoYW5uZWwgbWFuYWdlci4KLSAqICAgICAgQ2FsbHMgdGhlIEJyaWRnZSdzIGNobmxzbV9pc3IgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaW50ZXJydXB0IGlzIG91cnMsCi0gKiAgICAgIHRoZW4gc2NoZWR1bGVzIGEgRFBDIHRvIGRpc3BhdGNoIEkvTy4KKyAqCU1haW4gbWVzc2FnZSBoYW5kbGVyIGZvciB0aGUgc2hhcmVkIG1lbW9yeSBCcmlkZ2UgY2hhbm5lbCBtYW5hZ2VyLgorICoJRGV0ZXJtaW5lIGlmIHRoaXMgbWVzc2FnZSBpcyBvdXJzLCB0aGVuIHNjaGVkdWxlcyBhIERQQyB0bworICoJZGlzcGF0Y2ggSS9PLgogICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIHJlZl9kYXRhOiAgIFBvaW50ZXIgdG8gdGhlIGNoYW5uZWwgbWFuYWdlciBvYmplY3QgZm9yIHRoaXMgYm9hcmQuCi0gKiAgICAgICAgICAgICAgICAgIFNldCBpbiBhbiBpbml0aWFsIGNhbGwgdG8gSVNSX0luc3RhbGwoKS4KKyAqCXNlbGY6CVBvaW50ZXIgdG8gaXRzIG93biBub3RpZmllcl9ibG9jayBzdHJ1Y3QuCisgKglsZW46CUxlbmd0aCBvZiBtZXNzYWdlLgorICoJbXNnOglNZXNzYWdlIGNvZGUgcmVjZWl2ZWQuCiAgKiAgUmV0dXJuczoKLSAqICAgICAgVFJVRSBpZiBpbnRlcnJ1cHQgaGFuZGxlZDsgRkFMU0Ugb3RoZXJ3aXNlLgotICogIFJlcXVpcmVzOgotICogICAgICBNdXN0IGJlIGluIGxvY2tlZCBtZW1vcnkgaWYgZXhlY3V0aW5nIGluIGtlcm5lbCBtb2RlLgotICogICAgICBNdXN0IG9ubHkgY2FsbCBmdW5jdGlvbnMgd2hpY2ggYXJlIGluIGxvY2tlZCBtZW1vcnkgaWYgS2VybmVsIG1vZGUuCi0gKiAgICAgIE11c3Qgb25seSBjYWxsIGFzeW5jaHJvbm91cyBzZXJ2aWNlcy4KLSAqICAgICAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgYW5kIEVPSSBmb3IgdGhpcyBpbnRlcnJ1cHQgaGFzIGJlZW4gc2VudC4KLSAqICBFbnN1cmVzOgorICoJTk9USUZZX09LIGlmIGhhbmRsZWQ7IE5PVElGWV9CQUQgb3RoZXJ3aXNlLgogICovCi12b2lkIGlvX21ib3hfbXNnKHUzMiBtc2cpOworaW50IGlvX21ib3hfbXNnKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBsZW4sIHZvaWQgKm1zZyk7CiAKIC8qCiAgKiAgPT09PT09PT0gaW9fcmVxdWVzdF9jaG5sID09PT09PT09CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaAppbmRleCAzMGRiZmI2Li5kNzMyNjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogc3RydWN0IHN0dWJfZGV2aWNlIHsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAogCXN0cnVjdCB1c2JpcF9kZXZpY2UgdWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCmluZGV4IGIxODZiNWYuLmE3Y2U1MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCkBAIC0yNTgsMTAgKzI1OCwxMSBAQAogc3RhdGljIHZvaWQgc3R1Yl9kZXZpY2VfcmVzZXQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCiB7CiAJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3Qgc3R1Yl9kZXZpY2UsIHVkKTsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoc2Rldi0+aW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkZXYtPnVkZXY7CiAJaW50IHJldDsKIAogCXVzYmlwX3VkYmcoImRldmljZSByZXNldCIpOworCiAJcmV0ID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCh1ZGV2LCBzZGV2LT5pbnRlcmZhY2UpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnVkZXYtPmRldiwgImxvY2sgZm9yIHJlc2V0XG4iKTsKQEAgLTMwOSw3ICszMTAsOCBAQAogICoKICAqIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBuZXcgc3R1Yl9kZXZpY2Ugc3RydWN0LgogICovCi1zdGF0aWMgc3RydWN0IHN0dWJfZGV2aWNlICpzdHViX2RldmljZV9hbGxvYyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQorc3RhdGljIHN0cnVjdCBzdHViX2RldmljZSAqc3R1Yl9kZXZpY2VfYWxsb2Moc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJCSAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXY7CiAJaW50IGJ1c251bSA9IGludGVyZmFjZV90b19idXNudW0oaW50ZXJmYWNlKTsKQEAgLTMyNCw3ICszMjYsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlzZGV2LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisJc2Rldi0+aW50ZXJmYWNlID0gdXNiX2dldF9pbnRmKGludGVyZmFjZSk7CisJc2Rldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOwogCiAJLyoKIAkgKiBkZXZpZCBpcyBkZWZpbmVkIHdpdGggZGV2bnVtIHdoZW4gdGhpcyBkcml2ZXIgaXMgZmlyc3QgYWxsb2NhdGVkLgpAQCAtNDUwLDExICs0NTMsMTIgQEAKIAkJCXJldHVybiBlcnI7CiAJCX0KIAorCQl1c2JfZ2V0X2ludGYoaW50ZXJmYWNlKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogb2suIHRoaXMgaXMgbXkgZGV2aWNlLiAqLwotCXNkZXYgPSBzdHViX2RldmljZV9hbGxvYyhpbnRlcmZhY2UpOworCXNkZXYgPSBzdHViX2RldmljZV9hbGxvYyh1ZGV2LCBpbnRlcmZhY2UpOwogCWlmICghc2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTQ3Niw2ICs0ODAsOCBAQAogCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgImNyZWF0ZSBzeXNmcyBmaWxlcyBmb3IgJXNcbiIsCiAJCQl1ZGV2X2J1c2lkKTsKIAkJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCQl1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTsKKwogCQlidXNpZF9wcml2LT5pbnRlcmZfY291bnQgPSAwOwogCiAJCWJ1c2lkX3ByaXYtPnNkZXYgPSBOVUxMOwpAQCAtNTQ1LDYgKzU1MSw3IEBACiAJaWYgKGJ1c2lkX3ByaXYtPmludGVyZl9jb3VudCA+IDEpIHsKIAkJYnVzaWRfcHJpdi0+aW50ZXJmX2NvdW50LS07CiAJCXNodXRkb3duX2J1c2lkKGJ1c2lkX3ByaXYpOworCQl1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTU0LDYgKzU2MSw5IEBACiAJLyogMS4gc2h1dGRvd24gdGhlIGN1cnJlbnQgY29ubmVjdGlvbiAqLwogCXNodXRkb3duX2J1c2lkKGJ1c2lkX3ByaXYpOwogCisJdXNiX3B1dF9kZXYoc2Rldi0+dWRldik7CisJdXNiX3B1dF9pbnRmKGludGVyZmFjZSk7CisKIAkvKiAzLiBmcmVlIHNkZXYgKi8KIAlidXNpZF9wcml2LT5zZGV2ID0gTlVMTDsKIAlzdHViX2RldmljZV9mcmVlKHNkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKaW5kZXggM2RlNmZkMi4uYWU2YWM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCkBAIC0zNjQsNyArMzY0LDcgQEAKIAogc3RhdGljIGludCBnZXRfcGlwZShzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYsIGludCBlcG51bSwgaW50IGRpcikKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoc2Rldi0+aW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkZXYtPnVkZXY7CiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCA9IE5VTEw7CiAKQEAgLTQ4NCw3ICs0ODQsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IHN0dWJfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9ICZzZGV2LT51ZDsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoc2Rldi0+aW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkZXYtPnVkZXY7CiAJaW50IHBpcGUgPSBnZXRfcGlwZShzZGV2LCBwZHUtPmJhc2UuZXAsIHBkdS0+YmFzZS5kaXJlY3Rpb24pOwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpLmggYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaS5oCmluZGV4IDQxYTFmZTUuLmFmYzNiMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaApAQCAtMTAwLDkgKzEwMCw2IEBACiAJICogQnV0LCB0aGUgaW5kZXggb2YgdGhpcyBhcnJheSBiZWdpbnMgZnJvbSAwLgogCSAqLwogCXN0cnVjdCB2aGNpX2RldmljZSB2ZGV2W1ZIQ0lfTlBPUlRTXTsKLQotCS8qIHZoY2lfZGV2aWNlIHdoaWNoIGhhcyBub3QgYmVlbiBhc3NpZ2VkIGl0cyBhZGRyZXNzIHlldCAqLwotCWludCBwZW5kaW5nX3BvcnQ7CiB9OwogCiAKQEAgLTExOSw2ICsxMTYsOSBAQAogdm9pZCB2aGNpX3J4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KTsKIHZvaWQgdmhjaV90eF9sb29wKHN0cnVjdCB1c2JpcF90YXNrICp1dCk7CiAKK3N0cnVjdCB1cmIgKnBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdihzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsCisJCQkJCSAgICBfX3UzMiBzZXFudW0pOworCiAjZGVmaW5lIGhhcmR3YXJlCQkoJnRoZV9jb250cm9sbGVyLT5wZGV2LmRldikKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdmhjaV9kZXZpY2UgKnBvcnRfdG9fdmRldihfX3UzMiBwb3J0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYwppbmRleCAwOGJkMjZhLi5hMzVmZTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYwpAQCAtMTM4LDggKzEzOCw2IEBACiAJICogdGhlX2NvbnRyb2xsZXItPnZkZXZbcmhwb3J0XS51ZC5zdGF0dXMgPSBWREVWX0NPTk5FQ1Q7CiAJICogc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT52ZGV2W3JocG9ydF0udWQubG9jayk7ICovCiAKLQl0aGVfY29udHJvbGxlci0+cGVuZGluZ19wb3J0ID0gcmhwb3J0OwotCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKIAogCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXModmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpKTsKQEAgLTU1OSw2ICs1NTcsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1cmItPmRldi0+ZGV2OwogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2OwogCiAJdXNiaXBfZGJnX3ZoY2lfaGMoImVudGVyLCB1c2JfaGNkICVwIHVyYiAlcCBtZW1fZmxhZ3MgJWRcbiIsCiAJCSAgICBoY2QsIHVyYiwgbWVtX2ZsYWdzKTsKQEAgLTU3NCw2ICs1NzMsMTggQEAKIAkJcmV0dXJuIHVyYi0+c3RhdHVzOwogCX0KIAorCXZkZXYgPSBwb3J0X3RvX3ZkZXYodXJiLT5kZXYtPnBvcnRudW0tMSk7CisKKwkvKiByZWZ1c2UgZW5xdWV1ZSBmb3IgZGVhZCBjb25uZWN0aW9uICovCisJc3Bpbl9sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwlpZiAodmRldi0+dWQuc3RhdHVzID09IFZERVZfU1RfTlVMTCB8fCB2ZGV2LT51ZC5zdGF0dXMgPT0gVkRFVl9TVF9FUlJPUikgeworCQl1c2JpcF91ZXJyKCJlbnF1ZXVlIGZvciBpbmFjdGl2ZSBwb3J0ICVkXG4iLCB2ZGV2LT5yaHBvcnQpOworCQlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisKIAlyZXQgPSB1c2JfaGNkX2xpbmtfdXJiX3RvX2VwKGhjZCwgdXJiKTsKIAlpZiAocmV0KQogCQlnb3RvIG5vX25lZWRfdW5saW5rOwpAQCAtNTkyLDggKzYwMyw2IEBACiAJCV9fdTggdHlwZSA9IHVzYl9waXBldHlwZSh1cmItPnBpcGUpOwogCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJscmVxID0KIAkJCQkoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKLQkJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0KLQkJCQlwb3J0X3RvX3ZkZXYodGhlX2NvbnRyb2xsZXItPnBlbmRpbmdfcG9ydCk7CiAKIAkJaWYgKHR5cGUgIT0gUElQRV9DT05UUk9MIHx8ICFjdHJscmVxKSB7CiAJCQlkZXZfZXJyKGRldiwgImludmFsaWQgcmVxdWVzdCB0byBkZXZudW0gMFxuIik7CkBAIC02MDcsNyArNjE2LDkgQEAKIAkJCWRldl9pbmZvKGRldiwgIlNldEFkZHJlc3MgUmVxdWVzdCAoJWQpIHRvIHBvcnQgJWRcbiIsCiAJCQkJIGN0cmxyZXEtPndWYWx1ZSwgdmRldi0+cmhwb3J0KTsKIAotCQkJdmRldi0+dWRldiA9IHVyYi0+ZGV2OworCQkJaWYgKHZkZXYtPnVkZXYpCisJCQkJdXNiX3B1dF9kZXYodmRldi0+dWRldik7CisJCQl2ZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodXJiLT5kZXYpOwogCiAJCQlzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOwogCQkJdmRldi0+dWQuc3RhdHVzID0gVkRFVl9TVF9VU0VEOwpAQCAtNjI3LDggKzYzOCw5IEBACiAJCQkJCQkiR2V0X0Rlc2NyaXB0b3IgdG8gZGV2aWNlIDAgIgogCQkJCQkJIihnZXQgbWF4IHBpcGUgc2l6ZSlcbiIpOwogCi0JCQkvKiBGSVhNRTogcmVmZXJlbmNlIGNvdW50PyAodXNiX2dldF9kZXYoKSkgKi8KLQkJCXZkZXYtPnVkZXYgPSB1cmItPmRldjsKKwkJCWlmICh2ZGV2LT51ZGV2KQorCQkJCXVzYl9wdXRfZGV2KHZkZXYtPnVkZXYpOworCQkJdmRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVyYi0+ZGV2KTsKIAkJCWdvdG8gb3V0OwogCiAJCWRlZmF1bHQ6CkBAIC04MDUsNyArODE3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgdm9pZCB2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmssICp0bXA7CkBAIC04MTMsMTEgKzgyNCwzNCBAQAogCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgJnZkZXYtPnVubGlua190eCwgbGlzdCkgeworCQl1c2JpcF91aW5mbygidW5saW5rIGNsZWFudXAgdHggJWx1XG4iLCB1bmxpbmstPnVubGlua19zZXFudW0pOwogCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKIAkJa2ZyZWUodW5saW5rKTsKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZ2ZGV2LT51bmxpbmtfcngsIGxpc3QpIHsKKwkJc3RydWN0IHVyYiAqdXJiOworCisJCS8qIGdpdmUgYmFjayBVUkIgb2YgdW5hbnN3ZXJlZCB1bmxpbmsgcmVxdWVzdCAqLworCQl1c2JpcF91aW5mbygidW5saW5rIGNsZWFudXAgcnggJWx1XG4iLCB1bmxpbmstPnVubGlua19zZXFudW0pOworCisJCXVyYiA9IHBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdih2ZGV2LCB1bmxpbmstPnVubGlua19zZXFudW0pOworCQlpZiAoIXVyYikgeworCQkJdXNiaXBfdWluZm8oInRoZSB1cmIgKHNlcW51bSAlbHUpIHdhcyBhbHJlYWR5IGdpdmVuIGJhY2tcbiIsCisJCQkJCQkJdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKKwkJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOworCQkJa2ZyZWUodW5saW5rKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdXJiLT5zdGF0dXMgPSAtRU5PREVWOworCisJCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYik7CisJCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwkJdXNiX2hjZF9naXZlYmFja191cmIodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIsIHVyYi0+c3RhdHVzKTsKKwogCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKIAkJa2ZyZWUodW5saW5rKTsKIAl9CkBAIC04ODcsNiArOTIxLDEwIEBACiAJdmRldi0+c3BlZWQgID0gMDsKIAl2ZGV2LT5kZXZpZCAgPSAwOwogCisJaWYgKHZkZXYtPnVkZXYpCisJCXVzYl9wdXRfZGV2KHZkZXYtPnVkZXYpOworCXZkZXYtPnVkZXYgPSBOVUxMOworCiAJdWQtPnRjcF9zb2NrZXQgPSBOVUxMOwogCiAJdWQtPnN0YXR1cyA9IFZERVZfU1RfTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jCmluZGV4IDgxNDdkNzIuLmJmNjk5MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYwpAQCAtMjMsMTYgKzIzLDE0IEBACiAjaW5jbHVkZSAidmhjaS5oIgogCiAKLS8qIGdldCBVUkIgZnJvbSB0cmFuc21pdHRlZCB1cmIgcXVldWUgKi8KLXN0YXRpYyBzdHJ1Y3QgdXJiICpwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAorLyogZ2V0IFVSQiBmcm9tIHRyYW5zbWl0dGVkIHVyYiBxdWV1ZS4gY2FsbGVyIG11c3QgaG9sZCB2ZGV2LT5wcml2X2xvY2sgKi8KK3N0cnVjdCB1cmIgKnBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdihzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsCiAJCQkJCSAgICBfX3UzMiBzZXFudW0pCiB7CiAJc3RydWN0IHZoY2lfcHJpdiAqcHJpdiwgKnRtcDsKIAlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCAmdmRldi0+cHJpdl9yeCwgbGlzdCkgewogCQlpZiAocHJpdi0+c2VxbnVtID09IHNlcW51bSkgewogCQkJdXJiID0gcHJpdi0+dXJiOwpAQCAtNjMsOCArNjEsNiBAQAogCQl9CiAJfQogCi0Jc3Bpbl91bmxvY2soJnZkZXYtPnByaXZfbG9jayk7Ci0KIAlyZXR1cm4gdXJiOwogfQogCkBAIC03NCw5ICs3MCwxMSBAQAogCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gJnZkZXYtPnVkOwogCXN0cnVjdCB1cmIgKnVyYjsKIAorCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKIAogCXVyYiA9IHBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdih2ZGV2LCBwZHUtPmJhc2Uuc2VxbnVtKTsKIAorCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOwogCiAJaWYgKCF1cmIpIHsKIAkJdXNiaXBfdWVycigiY2Fubm90IGZpbmQgYSB1cmIgb2Ygc2VxbnVtICV1XG4iLApAQCAtMTYxLDcgKzE1OSwxMiBAQAogCQlyZXR1cm47CiAJfQogCisJc3Bpbl9sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCiAJdXJiID0gcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHZkZXYsIHVubGluay0+dW5saW5rX3NlcW51bSk7CisKKwlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKwogCWlmICghdXJiKSB7CiAJCS8qCiAJCSAqIEkgZ2V0IHRoZSByZXN1bHQgb2YgYSB1bmxpbmsgcmVxdWVzdC4gQnV0LCBpdCBzZWVtcyB0aGF0IEkKQEAgLTE5MCw2ICsxOTMsMTkgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyBpbnQgdmhjaV9wcml2X3R4X2VtcHR5KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwlpbnQgZW1wdHkgPSAwOworCisJc3Bpbl9sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCisJZW1wdHkgPSBsaXN0X2VtcHR5KCZ2ZGV2LT5wcml2X3J4KTsKKworCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCisJcmV0dXJuIGVtcHR5OworfQorCiAvKiByZWN2IGEgcGR1ICovCiBzdGF0aWMgdm9pZCB2aGNpX3J4X3BkdShzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKIHsKQEAgLTIwMiwxMSArMjE4LDI5IEBACiAKIAltZW1zZXQoJnBkdSwgMCwgc2l6ZW9mKHBkdSkpOwogCi0KIAkvKiAxLiByZWNlaXZlIGEgcGR1IGhlYWRlciAqLwogCXJldCA9IHVzYmlwX3htaXQoMCwgdWQtPnRjcF9zb2NrZXQsIChjaGFyICopICZwZHUsIHNpemVvZihwZHUpLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0ID09IC1FQ09OTlJFU0VUKQorCQkJdXNiaXBfdWluZm8oImNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlclxuIik7CisJCWVsc2UgaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCQkvKiBpZ25vcmUgaWYgY29ubmVjdGlvbiB3YXMgaWRsZSAqLworCQkJaWYgKHZoY2lfcHJpdl90eF9lbXB0eSh2ZGV2KSkKKwkJCQlyZXR1cm47CisJCQl1c2JpcF91aW5mbygiY29ubmVjdGlvbiB0aW1lZCBvdXQgd2l0aCBwZW5kaW5nIHVyYnNcbiIpOworCQl9IGVsc2UgaWYgKHJldCAhPSAtRVJFU1RBUlRTWVMpCisJCQl1c2JpcF91aW5mbygieG1pdCBmYWlsZWQgJWRcbiIsIHJldCk7CisKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCXJldHVybjsKKwl9CisJaWYgKHJldCA9PSAwKSB7CisJCXVzYmlwX3VpbmZvKCJjb25uZWN0aW9uIGNsb3NlZCIpOworCQl1c2JpcF9ldmVudF9hZGQodWQsIFZERVZfRVZFTlRfRE9XTik7CisJCXJldHVybjsKKwl9CiAJaWYgKHJldCAhPSBzaXplb2YocGR1KSkgewotCQl1c2JpcF91ZXJyKCJyZWNlaXZpbmcgcGR1IGZhaWxlZCEgc2l6ZSBpcyAlZCwgc2hvdWxkIGJlICVkXG4iLAorCQl1c2JpcF91ZXJyKCJyZWNlaXZlZCBwZHUgc2l6ZSBpcyAlZCwgc2hvdWxkIGJlICVkXG4iLAogCQkJCQlyZXQsICh1bnNpZ25lZCBpbnQpc2l6ZW9mKHBkdSkpOwogCQl1c2JpcF9ldmVudF9hZGQodWQsIFZERVZfRVZFTlRfRVJST1JfVENQKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL01vZHVsZS5zeW12ZXJzIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL01vZHVsZS5zeW12ZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy9Nb2R1bGUuc3ltdmVycworKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYwppbmRleCA3MDE2ZmRkLi5lMTliOTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMKQEAgLTM5NTQsOCArMzk1NCw4IEBACiB1bnNpZ25lZCBjaGFyIFhHSV9Jc0xDRER1YWxMaW5rKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAotCWlmICgoKChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9MQ0QpIHwgU2V0Q1JUMlRvTENEQSkpCi0JCQkmJiAocFZCSW5mby0+TENESW5mbyAmIFNldExDRER1YWxMaW5rKSkgLyogc2hhbXBvbzAxMjkgKi8KKwlpZiAoKHBWQkluZm8tPlZCSW5mbyAmIChTZXRDUlQyVG9MQ0QgfCBTZXRDUlQyVG9MQ0RBKSkgJiYKKwkJCShwVkJJbmZvLT5MQ0RJbmZvICYgU2V0TENERHVhbExpbmspKSAvKiBzaGFtcG9vMDEyOSAqLwogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpAQCAtODc3Myw3ICs4NzczLDcgQEAKIAogCWlmIChwVkJJbmZvLT5JRl9ERUZfTFZEUyA9PSAwKSB7CiAJCUNSVDJJbmRleCA9IENSVDJJbmRleCA+PiA2OyAvKiAgZm9yIExDRCAqLwotCQlpZiAoKChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9MQ0QpIHwgU2V0Q1JUMlRvTENEQSkpIHsgLyozMDFiKi8KKwkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIChTZXRDUlQyVG9MQ0QgfCBTZXRDUlQyVG9MQ0RBKSkgeyAvKjMwMWIqLwogCQkJaWYgKHBWQkluZm8tPkxDRFJlc0luZm8gIT0gUGFuZWwxMDI0eDc2OCkKIAkJCQlWQ0xLSW5kZXggPSBMQ0RYbGF0MlZDTEtbQ1JUMkluZGV4XTsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtX2Rydi5jCmluZGV4IDU0MTU3MTIuLjRiZDhjYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1fZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9kcnYuYwpAQCAtMjI3LDYgKzIyNyw3IEBACiAKIAkJaWYgKHpyYW1fdGVzdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1pFUk8pKSB7CiAJCQloYW5kbGVfemVyb19wYWdlKHBhZ2UpOworCQkJaW5kZXgrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTIzNSwxMiArMjM2LDE0IEBACiAJCQlwcl9kZWJ1ZygiUmVhZCBiZWZvcmUgd3JpdGU6IHNlY3Rvcj0lbHUsIHNpemU9JXUiLAogCQkJCSh1bG9uZykoYmlvLT5iaV9zZWN0b3IpLCBiaW8tPmJpX3NpemUpOwogCQkJLyogRG8gbm90aGluZyAqLworCQkJaW5kZXgrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogUGFnZSBpcyBzdG9yZWQgdW5jb21wcmVzc2VkIHNpbmNlIGl0J3MgaW5jb21wcmVzc2libGUgKi8KIAkJaWYgKHVubGlrZWx5KHpyYW1fdGVzdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1VOQ09NUFJFU1NFRCkpKSB7CiAJCQloYW5kbGVfdW5jb21wcmVzc2VkX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpOworCQkJaW5kZXgrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTMyMCw2ICszMjMsNyBAQAogCQkJbXV0ZXhfdW5sb2NrKCZ6cmFtLT5sb2NrKTsKIAkJCXpyYW1fc3RhdF9pbmMoJnpyYW0tPnN0YXRzLnBhZ2VzX3plcm8pOwogCQkJenJhbV9zZXRfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9aRVJPKTsKKwkJCWluZGV4Kys7CiAJCQljb250aW51ZTsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC9NYWtlZmlsZSBiL2RyaXZlcnMvdGFyZ2V0L01ha2VmaWxlCmluZGV4IDVjZmQ3MDguLjk3M2JiMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdGFyZ2V0L01ha2VmaWxlCkBAIC0xMyw4ICsxMyw3IEBACiAJCQkJICAgdGFyZ2V0X2NvcmVfdHJhbnNwb3J0Lm8gXAogCQkJCSAgIHRhcmdldF9jb3JlX2NkYi5vIFwKIAkJCQkgICB0YXJnZXRfY29yZV91YS5vIFwKLQkJCQkgICB0YXJnZXRfY29yZV9yZC5vIFwKLQkJCQkgICB0YXJnZXRfY29yZV9taWIubworCQkJCSAgIHRhcmdldF9jb3JlX3JkLm8KIAogb2JqLSQoQ09ORklHX1RBUkdFVF9DT1JFKQkrPSB0YXJnZXRfY29yZV9tb2QubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9jb25maWdmcy5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYwppbmRleCAyNzY0NTEwLi5jYWY4ZGMxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9jb25maWdmcy5jCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAogI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9iYXNlLmg+CiAjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5oPgpAQCAtMTk3MSwxMyArMTk3MCwzNSBAQAogewogCXN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2ICpzZV9kZXYgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAogCQkJCXN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2LCBzZV9kZXZfZ3JvdXApOwotCXN0cnVjdCBjb25maWdfZ3JvdXAgKmRldl9jZzsKKwlzdHJ1Y3Qgc2VfaGJhICpoYmEgPSBpdGVtX3RvX2hiYSgmc2VfZGV2LT5zZV9kZXZfaGJhLT5oYmFfZ3JvdXAuY2dfaXRlbSk7CisJc3RydWN0IHNlX3N1YnN5c3RlbV9hcGkgKnQgPSBoYmEtPnRyYW5zcG9ydDsKKwlzdHJ1Y3QgY29uZmlnX2dyb3VwICpkZXZfY2cgPSAmc2VfZGV2LT5zZV9kZXZfZ3JvdXA7CiAKLQlpZiAoIShzZV9kZXYpKQotCQlyZXR1cm47Ci0KLQlkZXZfY2cgPSAmc2VfZGV2LT5zZV9kZXZfZ3JvdXA7CiAJa2ZyZWUoZGV2X2NnLT5kZWZhdWx0X2dyb3Vwcyk7CisJLyoKKwkgKiBUaGlzIHBvaW50ZXIgd2lsbCBzZXQgd2hlbiB0aGUgc3RvcmFnZSBpcyBlbmFibGVkIHdpdGg6CisJICpgZWNobyAxID4gJENPTkZJR0ZTL2NvcmUvJEhCQS8kREVWL2Rldl9lbmFibGVgCisJICovCisJaWYgKHNlX2Rldi0+c2VfZGV2X3B0cikgeworCQlwcmludGsoS0VSTl9JTkZPICJUYXJnZXRfQ29yZV9Db25maWdGUzogQ2FsbGluZyBzZV9mcmVlXyIKKwkJCSJ2aXJ0dWFsX2RldmljZSgpIGZvciBzZV9kZXZfcHRyOiAlcFxuIiwKKwkJCXNlX2Rldi0+c2VfZGV2X3B0cik7CisKKwkJc2VfZnJlZV92aXJ0dWFsX2RldmljZShzZV9kZXYtPnNlX2Rldl9wdHIsIGhiYSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUmVsZWFzZSBzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2Rldi0+c2VfZGV2X3N1X3B0ci4uCisJCSAqLworCQlwcmludGsoS0VSTl9JTkZPICJUYXJnZXRfQ29yZV9Db25maWdGUzogQ2FsbGluZyB0LT5mcmVlXyIKKwkJCSJkZXZpY2UoKSBmb3Igc2VfZGV2X3N1X3B0cjogJXBcbiIsCisJCQlzZV9kZXYtPnNlX2Rldl9zdV9wdHIpOworCisJCXQtPmZyZWVfZGV2aWNlKHNlX2Rldi0+c2VfZGV2X3N1X3B0cik7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiVGFyZ2V0X0NvcmVfQ29uZmlnRlM6IERlYWxsb2NhdGluZyBzZV9zdWJzeXN0ZW0iCisJCQkiX2Rldl90OiAlcFxuIiwgc2VfZGV2KTsKKwlrZnJlZShzZV9kZXYpOwogfQogCiBzdGF0aWMgc3NpemVfdCB0YXJnZXRfY29yZV9kZXZfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCkBAIC0yMTQwLDcgKzIxNjEsMTYgQEAKIAlOVUxMLAogfTsKIAorc3RhdGljIHZvaWQgdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKK3sKKwlzdHJ1Y3QgdDEwX2FsdWFfbHVfZ3AgKmx1X2dwID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCXN0cnVjdCB0MTBfYWx1YV9sdV9ncCwgbHVfZ3BfZ3JvdXApOworCisJY29yZV9hbHVhX2ZyZWVfbHVfZ3AobHVfZ3ApOworfQorCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyB0YXJnZXRfY29yZV9hbHVhX2x1X2dwX29wcyA9IHsKKwkucmVsZWFzZQkJPSB0YXJnZXRfY29yZV9hbHVhX2x1X2dwX3JlbGVhc2UsCiAJLnNob3dfYXR0cmlidXRlCQk9IHRhcmdldF9jb3JlX2FsdWFfbHVfZ3BfYXR0cl9zaG93LAogCS5zdG9yZV9hdHRyaWJ1dGUJPSB0YXJnZXRfY29yZV9hbHVhX2x1X2dwX2F0dHJfc3RvcmUsCiB9OwpAQCAtMjE5MSw5ICsyMjIxLDExIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiVGFyZ2V0X0NvcmVfQ29uZmlnRlM6IFJlbGVhc2luZyBBTFVBIExvZ2ljYWwgVW5pdCIKIAkJIiBHcm91cDogY29yZS9hbHVhL2x1X2dwcy8lcywgSUQ6ICVodVxuIiwKIAkJY29uZmlnX2l0ZW1fbmFtZShpdGVtKSwgbHVfZ3AtPmx1X2dwX2lkKTsKLQorCS8qCisJICogY29yZV9hbHVhX2ZyZWVfbHVfZ3AoKSBpcyBjYWxsZWQgZnJvbSB0YXJnZXRfY29yZV9hbHVhX2x1X2dwX29wcy0+cmVsZWFzZSgpCisJICogLT4gdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncF9yZWxlYXNlKCkKKwkgKi8KIAljb25maWdfaXRlbV9wdXQoaXRlbSk7Ci0JY29yZV9hbHVhX2ZyZWVfbHVfZ3AobHVfZ3ApOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncHNfZ3JvdXBfb3BzID0gewpAQCAtMjU0OSw3ICsyNTgxLDE2IEBACiAJTlVMTCwKIH07CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9jb3JlX2FsdWFfdGdfcHRfZ3BfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHQxMF9hbHVhX3RnX3B0X2dwICp0Z19wdF9ncCA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCisJCQlzdHJ1Y3QgdDEwX2FsdWFfdGdfcHRfZ3AsIHRnX3B0X2dwX2dyb3VwKTsKKworCWNvcmVfYWx1YV9mcmVlX3RnX3B0X2dwKHRnX3B0X2dwKTsKK30KKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncF9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncF9yZWxlYXNlLAogCS5zaG93X2F0dHJpYnV0ZQkJPSB0YXJnZXRfY29yZV9hbHVhX3RnX3B0X2dwX2F0dHJfc2hvdywKIAkuc3RvcmVfYXR0cmlidXRlCT0gdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncF9hdHRyX3N0b3JlLAogfTsKQEAgLTI2MDIsOSArMjY0MywxMSBAQAogCXByaW50ayhLRVJOX0lORk8gIlRhcmdldF9Db3JlX0NvbmZpZ0ZTOiBSZWxlYXNpbmcgQUxVQSBUYXJnZXQgUG9ydCIKIAkJIiBHcm91cDogYWx1YS90Z19wdF9ncHMvJXMsIElEOiAlaHVcbiIsCiAJCWNvbmZpZ19pdGVtX25hbWUoaXRlbSksIHRnX3B0X2dwLT50Z19wdF9ncF9pZCk7Ci0KKwkvKgorCSAqIGNvcmVfYWx1YV9mcmVlX3RnX3B0X2dwKCkgaXMgY2FsbGVkIGZyb20gdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncF9vcHMtPnJlbGVhc2UoKQorCSAqIC0+IHRhcmdldF9jb3JlX2FsdWFfdGdfcHRfZ3BfcmVsZWFzZSgpLgorCSAqLwogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKLQljb3JlX2FsdWFfZnJlZV90Z19wdF9ncCh0Z19wdF9ncCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB0YXJnZXRfY29yZV9hbHVhX3RnX3B0X2dwc19ncm91cF9vcHMgPSB7CkBAIC0yNzcxLDEzICsyODE0LDExIEBACiAJc3RydWN0IHNlX3N1YnN5c3RlbV9hcGkgKnQ7CiAJc3RydWN0IGNvbmZpZ19pdGVtICpkZl9pdGVtOwogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmRldl9jZywgKnRnX3B0X2dwX2NnOwotCWludCBpLCByZXQ7CisJaW50IGk7CiAKIAloYmEgPSBpdGVtX3RvX2hiYSgmc2VfZGV2LT5zZV9kZXZfaGJhLT5oYmFfZ3JvdXAuY2dfaXRlbSk7CiAKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZoYmEtPmhiYV9hY2Nlc3NfbXV0ZXgpKQotCQlnb3RvIG91dDsKLQorCW11dGV4X2xvY2soJmhiYS0+aGJhX2FjY2Vzc19tdXRleCk7CiAJdCA9IGhiYS0+dHJhbnNwb3J0OwogCiAJc3Bpbl9sb2NrKCZzZV9nbG9iYWwtPmdfZGV2aWNlX2xvY2spOwpAQCAtMjc5MSw3ICsyODMyLDEwIEBACiAJCWNvbmZpZ19pdGVtX3B1dChkZl9pdGVtKTsKIAl9CiAJa2ZyZWUodGdfcHRfZ3BfY2ctPmRlZmF1bHRfZ3JvdXBzKTsKLQljb3JlX2FsdWFfZnJlZV90Z19wdF9ncChUMTBfQUxVQShzZV9kZXYpLT5kZWZhdWx0X3RnX3B0X2dwKTsKKwkvKgorCSAqIGNvcmVfYWx1YV9mcmVlX3RnX3B0X2dwKCkgaXMgY2FsbGVkIGZyb20gLT5kZWZhdWx0X3RnX3B0X2dwCisJICogZGlyZWN0bHkgZnJvbSB0YXJnZXRfY29yZV9hbHVhX3RnX3B0X2dwX3JlbGVhc2UoKS4KKwkgKi8KIAlUMTBfQUxVQShzZV9kZXYpLT5kZWZhdWx0X3RnX3B0X2dwID0gTlVMTDsKIAogCWRldl9jZyA9ICZzZV9kZXYtPnNlX2Rldl9ncm91cDsKQEAgLTI4MDAsMzggKzI4NDQsMTIgQEAKIAkJZGV2X2NnLT5kZWZhdWx0X2dyb3Vwc1tpXSA9IE5VTEw7CiAJCWNvbmZpZ19pdGVtX3B1dChkZl9pdGVtKTsKIAl9Ci0KLQljb25maWdfaXRlbV9wdXQoaXRlbSk7CiAJLyoKLQkgKiBUaGlzIHBvaW50ZXIgd2lsbCBzZXQgd2hlbiB0aGUgc3RvcmFnZSBpcyBlbmFibGVkIHdpdGg6Ci0JICogYGVjaG8gMSA+ICRDT05GSUdGUy9jb3JlLyRIQkEvJERFVi9kZXZfZW5hYmxlYAorCSAqIFRoZSByZWxlYXNpbmcgb2Ygc2VfZGV2IGFuZCBhc3NvY2lhdGVkIHNlX2Rldi0+c2VfZGV2X3B0ciBpcyBkb25lCisJICogZnJvbSB0YXJnZXRfY29yZV9kZXZfaXRlbV9vcHMtPnJlbGVhc2UoKSAtPnRhcmdldF9jb3JlX2Rldl9yZWxlYXNlKCkuCiAJICovCi0JaWYgKHNlX2Rldi0+c2VfZGV2X3B0cikgewotCQlwcmludGsoS0VSTl9JTkZPICJUYXJnZXRfQ29yZV9Db25maWdGUzogQ2FsbGluZyBzZV9mcmVlXyIKLQkJCSJ2aXJ0dWFsX2RldmljZSgpIGZvciBzZV9kZXZfcHRyOiAlcFxuIiwKLQkJCQlzZV9kZXYtPnNlX2Rldl9wdHIpOwotCi0JCXJldCA9IHNlX2ZyZWVfdmlydHVhbF9kZXZpY2Uoc2VfZGV2LT5zZV9kZXZfcHRyLCBoYmEpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gaGJhX291dDsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBSZWxlYXNlIHN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2LT5zZV9kZXZfc3VfcHRyLi4KLQkJICovCi0JCXByaW50ayhLRVJOX0lORk8gIlRhcmdldF9Db3JlX0NvbmZpZ0ZTOiBDYWxsaW5nIHQtPmZyZWVfIgotCQkJImRldmljZSgpIGZvciBzZV9kZXZfc3VfcHRyOiAlcFxuIiwKLQkJCXNlX2Rldi0+c2VfZGV2X3N1X3B0cik7Ci0KLQkJdC0+ZnJlZV9kZXZpY2Uoc2VfZGV2LT5zZV9kZXZfc3VfcHRyKTsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJUYXJnZXRfQ29yZV9Db25maWdGUzogRGVhbGxvY2F0aW5nIHNlX3N1YnN5c3RlbSIKLQkJIl9kZXZfdDogJXBcbiIsIHNlX2Rldik7Ci0KLWhiYV9vdXQ6CisJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwogCW11dGV4X3VubG9jaygmaGJhLT5oYmFfYWNjZXNzX211dGV4KTsKLW91dDoKLQlrZnJlZShzZV9kZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdGFyZ2V0X2NvcmVfaGJhX2dyb3VwX29wcyA9IHsKQEAgLTI5MTQsNiArMjkzMiwxMyBAQAogCiBDT05GSUdGU19FQVRUUl9PUFModGFyZ2V0X2NvcmVfaGJhLCBzZV9oYmEsIGhiYV9ncm91cCk7CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9jb3JlX2hiYV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKK3sKKwlzdHJ1Y3Qgc2VfaGJhICpoYmEgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAorCQkJCXN0cnVjdCBzZV9oYmEsIGhiYV9ncm91cCk7CisJY29yZV9kZWxldGVfaGJhKGhiYSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp0YXJnZXRfY29yZV9oYmFfYXR0cnNbXSA9IHsKIAkmdGFyZ2V0X2NvcmVfaGJhX2hiYV9pbmZvLmF0dHIsCiAJJnRhcmdldF9jb3JlX2hiYV9oYmFfbW9kZS5hdHRyLApAQCAtMjkyMSw2ICsyOTQ2LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHRhcmdldF9jb3JlX2hiYV9pdGVtX29wcyA9IHsKKwkucmVsZWFzZQkJPSB0YXJnZXRfY29yZV9oYmFfcmVsZWFzZSwKIAkuc2hvd19hdHRyaWJ1dGUJCT0gdGFyZ2V0X2NvcmVfaGJhX2F0dHJfc2hvdywKIAkuc3RvcmVfYXR0cmlidXRlCT0gdGFyZ2V0X2NvcmVfaGJhX2F0dHJfc3RvcmUsCiB9OwpAQCAtMjk5NywxMCArMzAyMywxMSBAQAogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCXN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIHsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmEgPSBpdGVtX3RvX2hiYShpdGVtKTsKLQorCS8qCisJICogY29yZV9kZWxldGVfaGJhKCkgaXMgY2FsbGVkIGZyb20gdGFyZ2V0X2NvcmVfaGJhX2l0ZW1fb3BzLT5yZWxlYXNlKCkKKwkgKiAtPiB0YXJnZXRfY29yZV9oYmFfcmVsZWFzZSgpCisJICovCiAJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwotCWNvcmVfZGVsZXRlX2hiYShoYmEpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdGFyZ2V0X2NvcmVfZ3JvdXBfb3BzID0gewpAQCAtMzAyMiw3ICszMDQ5LDYgQEAKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICp0YXJnZXRfY2csICpoYmFfY2cgPSBOVUxMLCAqYWx1YV9jZyA9IE5VTEw7CiAJc3RydWN0IGNvbmZpZ19ncm91cCAqbHVfZ3BfY2cgPSBOVUxMOwogCXN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5czsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfdGFyZ2V0X3Byb2MgPSBOVUxMOwogCXN0cnVjdCB0MTBfYWx1YV9sdV9ncCAqbHVfZ3A7CiAJaW50IHJldDsKIApAQCAtMzEyOCwyMSArMzE1NCwxMCBAQAogCWlmIChjb3JlX2Rldl9zZXR1cF92aXJ0dWFsX2x1bjAoKSA8IDApCiAJCWdvdG8gb3V0OwogCi0Jc2NzaV90YXJnZXRfcHJvYyA9IHByb2NfbWtkaXIoInNjc2lfdGFyZ2V0IiwgMCk7Ci0JaWYgKCEoc2NzaV90YXJnZXRfcHJvYykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwcm9jX21rZGlyKHNjc2lfdGFyZ2V0LCAwKSBmYWlsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JcmV0ID0gaW5pdF9zY3NpX3RhcmdldF9taWIoKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KIAlyZXR1cm4gMDsKIAogb3V0OgogCWNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN1YnN5cyk7Ci0JaWYgKHNjc2lfdGFyZ2V0X3Byb2MpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldCIsIDApOwogCWNvcmVfZGV2X3JlbGVhc2VfdmlydHVhbF9sdW4wKCk7CiAJcmRfbW9kdWxlX2V4aXQoKTsKIG91dF9nbG9iYWw6CkBAIC0zMTc4LDggKzMxOTMsNyBAQAogCQljb25maWdfaXRlbV9wdXQoaXRlbSk7CiAJfQogCWtmcmVlKGx1X2dwX2NnLT5kZWZhdWx0X2dyb3Vwcyk7Ci0JY29yZV9hbHVhX2ZyZWVfbHVfZ3Aoc2VfZ2xvYmFsLT5kZWZhdWx0X2x1X2dwKTsKLQlzZV9nbG9iYWwtPmRlZmF1bHRfbHVfZ3AgPSBOVUxMOworCWx1X2dwX2NnLT5kZWZhdWx0X2dyb3VwcyA9IE5VTEw7CiAKIAlhbHVhX2NnID0gJnNlX2dsb2JhbC0+YWx1YV9ncm91cDsKIAlmb3IgKGkgPSAwOyBhbHVhX2NnLT5kZWZhdWx0X2dyb3Vwc1tpXTsgaSsrKSB7CkBAIC0zMTg4LDYgKzMyMDIsNyBAQAogCQljb25maWdfaXRlbV9wdXQoaXRlbSk7CiAJfQogCWtmcmVlKGFsdWFfY2ctPmRlZmF1bHRfZ3JvdXBzKTsKKwlhbHVhX2NnLT5kZWZhdWx0X2dyb3VwcyA9IE5VTEw7CiAKIAloYmFfY2cgPSAmc2VfZ2xvYmFsLT50YXJnZXRfY29yZV9oYmFncm91cDsKIAlmb3IgKGkgPSAwOyBoYmFfY2ctPmRlZmF1bHRfZ3JvdXBzW2ldOyBpKyspIHsKQEAgLTMxOTYsMjAgKzMyMTEsMjAgQEAKIAkJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwogCX0KIAlrZnJlZShoYmFfY2ctPmRlZmF1bHRfZ3JvdXBzKTsKLQotCWZvciAoaSA9IDA7IHN1YnN5cy0+c3VfZ3JvdXAuZGVmYXVsdF9ncm91cHNbaV07IGkrKykgewotCQlpdGVtID0gJnN1YnN5cy0+c3VfZ3JvdXAuZGVmYXVsdF9ncm91cHNbaV0tPmNnX2l0ZW07Ci0JCXN1YnN5cy0+c3VfZ3JvdXAuZGVmYXVsdF9ncm91cHNbaV0gPSBOVUxMOwotCQljb25maWdfaXRlbV9wdXQoaXRlbSk7Ci0JfQorCWhiYV9jZy0+ZGVmYXVsdF9ncm91cHMgPSBOVUxMOworCS8qCisJICogV2UgZXhwZWN0IHN1YnN5cy0+c3VfZ3JvdXAuZGVmYXVsdF9ncm91cHMgdG8gYmUgcmVsZWFzZWQKKwkgKiBieSBjb25maWdmcyBzdWJzeXN0ZW0gcHJvdmlkZXIgbG9naWMuLgorCSAqLworCWNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN1YnN5cyk7CiAJa2ZyZWUoc3Vic3lzLT5zdV9ncm91cC5kZWZhdWx0X2dyb3Vwcyk7CiAKLQljb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdWJzeXMpOworCWNvcmVfYWx1YV9mcmVlX2x1X2dwKHNlX2dsb2JhbC0+ZGVmYXVsdF9sdV9ncCk7CisJc2VfZ2xvYmFsLT5kZWZhdWx0X2x1X2dwID0gTlVMTDsKKwogCXByaW50ayhLRVJOX0lORk8gIlRBUkdFVF9DT1JFWzBdOiBSZWxlYXNlZCBDb25maWdGUyBGYWJyaWMiCiAJCQkiIEluZnJhc3RydWN0dXJlXG4iKTsKIAotCXJlbW92ZV9zY3NpX3RhcmdldF9taWIoKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQiLCAwKTsKIAljb3JlX2Rldl9yZWxlYXNlX3ZpcnR1YWxfbHVuMCgpOwogCXJkX21vZHVsZV9leGl0KCk7CiAJcmVsZWFzZV9zZV9nbG9iYWwoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKaW5kZXggMzE3Y2U1OC4uNWRhMDUxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKQEAgLTM3MywxMSArMzczLDExIEBACiAJCS8qCiAJCSAqIGRldmUtPnNlX2x1bl9hY2wgd2lsbCBiZSBOVUxMIGZvciBkZW1vLW1vZGUgY3JlYXRlZCBMVU5zCiAJCSAqIHRoYXQgaGF2ZSBub3QgYmVlbiBleHBsaWN0bHkgY29uY2VydGVkIHRvIE1hcHBlZExVTnMgLT4KLQkJICogc3RydWN0IHNlX2x1bl9hY2wuCisJCSAqIHN0cnVjdCBzZV9sdW5fYWNsLCBidXQgd2UgcmVtb3ZlIGRldmUtPmFsdWFfcG9ydF9saXN0IGZyb20KKwkJICogcG9ydC0+c2VwX2FsdWFfbGlzdC4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgYWN0aXZlIFVBcyBhbmQKKwkJICogTm9kZUFDTCBjb250ZXh0IHNwZWNpZmljIFBSIG1ldGFkYXRhIGZvciBkZW1vLW1vZGUKKwkJICogTWFwcGVkTFVOICpkZXZlIHdpbGwgYmUgcmVsZWFzZWQgYmVsb3cuLgogCQkgKi8KLQkJaWYgKCEoZGV2ZS0+c2VfbHVuX2FjbCkpCi0JCQlyZXR1cm4gMDsKLQogCQlzcGluX2xvY2tfYmgoJnBvcnQtPnNlcF9hbHVhX2xvY2spOwogCQlsaXN0X2RlbCgmZGV2ZS0+YWx1YV9wb3J0X2xpc3QpOwogCQlzcGluX3VubG9ja19iaCgmcG9ydC0+c2VwX2FsdWFfbG9jayk7CkBAIC0zOTUsMTIgKzM5NSwxNCBAQAogCQkJCXByaW50ayhLRVJOX0VSUiAic3RydWN0IHNlX2Rldl9lbnRyeS0+c2VfbHVuX2FjbCIKIAkJCQkJIiBhbHJlYWR5IHNldCBmb3IgZGVtbyBtb2RlIC0+IGV4cGxpY3QiCiAJCQkJCSIgTFVOIEFDTCB0cmFuc2l0aW9uXG4iKTsKKwkJCQlzcGluX3VubG9ja19pcnEoJm5hY2wtPmRldmljZV9saXN0X2xvY2spOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCWlmIChkZXZlLT5zZV9sdW4gIT0gbHVuKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJzdHJ1Y3Qgc2VfZGV2X2VudHJ5LT5zZV9sdW4gZG9lcyIKIAkJCQkJIiBtYXRjaCBwYXNzZWQgc3RydWN0IHNlX2x1biBmb3IgZGVtbyBtb2RlIgogCQkJCQkiIC0+IGV4cGxpY3QgTFVOIEFDTCB0cmFuc2l0aW9uXG4iKTsKKwkJCQlzcGluX3VubG9ja19pcnEoJm5hY2wtPmRldmljZV9saXN0X2xvY2spOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCWRldmUtPnNlX2x1bl9hY2wgPSBsdW5fYWNsOwpAQCAtODY1LDkgKzg2Nyw2IEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJmhiYS0+ZGV2aWNlX2xvY2spOwotCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZoYmEtPmRldl9taWJfYWNjZXNzX2NvdW50KSkKLQkJY3B1X3JlbGF4KCk7CiB9CiAKIGludCBzZV9kZXZfY2hlY2tfb25saW5lKHN0cnVjdCBzZV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19jb25maWdmcy5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX2NvbmZpZ2ZzLmMKaW5kZXggMzJiMTQ4ZC4uYjY1ZDFjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX2NvbmZpZ2ZzLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX2NvbmZpZ2ZzLmMKQEAgLTIxNCwxMiArMjE0LDIyIEBACiAKIENPTkZJR0ZTX0VBVFRSX09QUyh0YXJnZXRfZmFicmljX21hcHBlZGx1biwgc2VfbHVuX2FjbCwgc2VfbHVuX2dyb3VwKTsKIAorc3RhdGljIHZvaWQgdGFyZ2V0X2ZhYnJpY19tYXBwZWRsdW5fcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHNlX2x1bl9hY2wgKmxhY2wgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAorCQkJCXN0cnVjdCBzZV9sdW5fYWNsLCBzZV9sdW5fZ3JvdXApOworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IGxhY2wtPnNlX2x1bl9uYWNsLT5zZV90cGc7CisKKwljb3JlX2Rldl9mcmVlX2luaXRpYXRvcl9ub2RlX2x1bl9hY2woc2VfdHBnLCBsYWNsKTsKK30KKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKnRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX2F0dHJzW10gPSB7CiAJJnRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX3dyaXRlX3Byb3RlY3QuYXR0ciwKIAlOVUxMLAogfTsKIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY19tYXBwZWRsdW5faXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2ZhYnJpY19tYXBwZWRsdW5fcmVsZWFzZSwKIAkuc2hvd19hdHRyaWJ1dGUJCT0gdGFyZ2V0X2ZhYnJpY19tYXBwZWRsdW5fYXR0cl9zaG93LAogCS5zdG9yZV9hdHRyaWJ1dGUJPSB0YXJnZXRfZmFicmljX21hcHBlZGx1bl9hdHRyX3N0b3JlLAogCS5hbGxvd19saW5rCQk9IHRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX2xpbmssCkBAIC0zMzcsMTUgKzM0NywyMSBAQAogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCXN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIHsKLQlzdHJ1Y3Qgc2VfbHVuX2FjbCAqbGFjbCA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCi0JCQlzdHJ1Y3Qgc2VfbHVuX2FjbCwgc2VfbHVuX2dyb3VwKTsKLQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBsYWNsLT5zZV9sdW5fbmFjbC0+c2VfdHBnOwotCiAJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwotCWNvcmVfZGV2X2ZyZWVfaW5pdGlhdG9yX25vZGVfbHVuX2FjbChzZV90cGcsIGxhY2wpOworfQorCitzdGF0aWMgdm9pZCB0YXJnZXRfZmFicmljX25hY2xfYmFzZV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKK3sKKwlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX25hY2wgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAorCQkJc3RydWN0IHNlX25vZGVfYWNsLCBhY2xfZ3JvdXApOworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IHNlX25hY2wtPnNlX3RwZzsKKwlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSBzZV90cGctPnNlX3RwZ193d24tPnd3bl90ZjsKKworCXRmLT50Zl9vcHMuZmFicmljX2Ryb3Bfbm9kZWFjbChzZV9uYWNsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY19uYWNsX2Jhc2VfaXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2ZhYnJpY19uYWNsX2Jhc2VfcmVsZWFzZSwKIAkuc2hvd19hdHRyaWJ1dGUJCT0gdGFyZ2V0X2ZhYnJpY19uYWNsX2Jhc2VfYXR0cl9zaG93LAogCS5zdG9yZV9hdHRyaWJ1dGUJPSB0YXJnZXRfZmFicmljX25hY2xfYmFzZV9hdHRyX3N0b3JlLAogfTsKQEAgLTQwNCw5ICs0MjAsNiBAQAogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCXN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIHsKLQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBjb250YWluZXJfb2YoZ3JvdXAsCi0JCQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwLCB0cGdfYWNsX2dyb3VwKTsKLQlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSBzZV90cGctPnNlX3RwZ193d24tPnd3bl90ZjsKIAlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX25hY2wgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAogCQkJc3RydWN0IHNlX25vZGVfYWNsLCBhY2xfZ3JvdXApOwogCXN0cnVjdCBjb25maWdfaXRlbSAqZGZfaXRlbTsKQEAgLTQxOSw5ICs0MzIsMTAgQEAKIAkJbmFjbF9jZy0+ZGVmYXVsdF9ncm91cHNbaV0gPSBOVUxMOwogCQljb25maWdfaXRlbV9wdXQoZGZfaXRlbSk7CiAJfQotCisJLyoKKwkgKiBzdHJ1Y3Qgc2Vfbm9kZV9hY2wgZnJlZSBpcyBkb25lIGluIHRhcmdldF9mYWJyaWNfbmFjbF9iYXNlX3JlbGVhc2UoKQorCSAqLwogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKLQl0Zi0+dGZfb3BzLmZhYnJpY19kcm9wX25vZGVhY2woc2VfbmFjbCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB0YXJnZXRfZmFicmljX25hY2xfZ3JvdXBfb3BzID0gewpAQCAtNDM3LDcgKzQ1MSwxOCBAQAogCiBDT05GSUdGU19FQVRUUl9PUFModGFyZ2V0X2ZhYnJpY19ucF9iYXNlLCBzZV90cGdfbnAsIHRwZ19ucF9ncm91cCk7CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9mYWJyaWNfbnBfYmFzZV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKK3sKKwlzdHJ1Y3Qgc2VfdHBnX25wICpzZV90cGdfbnAgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAorCQkJCXN0cnVjdCBzZV90cGdfbnAsIHRwZ19ucF9ncm91cCk7CisJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gc2VfdHBnX25wLT50cGdfbnBfcGFyZW50OworCXN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICp0ZiA9IHNlX3RwZy0+c2VfdHBnX3d3bi0+d3duX3RmOworCisJdGYtPnRmX29wcy5mYWJyaWNfZHJvcF9ucChzZV90cGdfbnApOworfQorCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyB0YXJnZXRfZmFicmljX25wX2Jhc2VfaXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2ZhYnJpY19ucF9iYXNlX3JlbGVhc2UsCiAJLnNob3dfYXR0cmlidXRlCQk9IHRhcmdldF9mYWJyaWNfbnBfYmFzZV9hdHRyX3Nob3csCiAJLnN0b3JlX2F0dHJpYnV0ZQk9IHRhcmdldF9mYWJyaWNfbnBfYmFzZV9hdHRyX3N0b3JlLAogfTsKQEAgLTQ2Niw2ICs0OTEsNyBAQAogCWlmICghKHNlX3RwZ19ucCkgfHwgSVNfRVJSKHNlX3RwZ19ucCkpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCisJc2VfdHBnX25wLT50cGdfbnBfcGFyZW50ID0gc2VfdHBnOwogCWNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZSgmc2VfdHBnX25wLT50cGdfbnBfZ3JvdXAsIG5hbWUsCiAJCQkmVEZfQ0lUX1RNUEwodGYpLT50ZmNfdHBnX25wX2Jhc2VfY2l0KTsKIApAQCAtNDc2LDE0ICs1MDIsMTAgQEAKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7Ci0Jc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gY29udGFpbmVyX29mKGdyb3VwLAotCQkJCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAsIHRwZ19ucF9ncm91cCk7Ci0Jc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMgKnRmID0gc2VfdHBnLT5zZV90cGdfd3duLT53d25fdGY7Ci0Jc3RydWN0IHNlX3RwZ19ucCAqc2VfdHBnX25wID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKLQkJCQlzdHJ1Y3Qgc2VfdHBnX25wLCB0cGdfbnBfZ3JvdXApOwotCisJLyoKKwkgKiBzdHJ1Y3Qgc2VfdHBnX25wIGlzIHJlbGVhc2VkIHZpYSB0YXJnZXRfZmFicmljX25wX2Jhc2VfcmVsZWFzZSgpCisJICovCiAJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwotCXRmLT50Zl9vcHMuZmFicmljX2Ryb3BfbnAoc2VfdHBnX25wKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfbnBfZ3JvdXBfb3BzID0gewpAQCAtODE0LDcgKzgzNiwxOCBAQAogICovCiBDT05GSUdGU19FQVRUUl9PUFModGFyZ2V0X2ZhYnJpY190cGcsIHNlX3BvcnRhbF9ncm91cCwgdHBnX2dyb3VwKTsKIAorc3RhdGljIHZvaWQgdGFyZ2V0X2ZhYnJpY190cGdfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAsIHRwZ19ncm91cCk7CisJc3RydWN0IHNlX3d3biAqd3duID0gc2VfdHBnLT5zZV90cGdfd3duOworCXN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICp0ZiA9IHd3bi0+d3duX3RmOworCisJdGYtPnRmX29wcy5mYWJyaWNfZHJvcF90cGcoc2VfdHBnKTsKK30KKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY190cGdfYmFzZV9pdGVtX29wcyA9IHsKKwkucmVsZWFzZQkJPSB0YXJnZXRfZmFicmljX3RwZ19yZWxlYXNlLAogCS5zaG93X2F0dHJpYnV0ZQkJPSB0YXJnZXRfZmFicmljX3RwZ19hdHRyX3Nob3csCiAJLnN0b3JlX2F0dHJpYnV0ZQk9IHRhcmdldF9mYWJyaWNfdHBnX2F0dHJfc3RvcmUsCiB9OwpAQCAtODcyLDggKzkwNSw2IEBACiAJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCiAJc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQogewotCXN0cnVjdCBzZV93d24gKnd3biA9IGNvbnRhaW5lcl9vZihncm91cCwgc3RydWN0IHNlX3d3biwgd3duX2dyb3VwKTsKLQlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSB3d24tPnd3bl90ZjsKIAlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAogCQkJCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAsIHRwZ19ncm91cCk7CiAJc3RydWN0IGNvbmZpZ19ncm91cCAqdHBnX2NnID0gJnNlX3RwZy0+dHBnX2dyb3VwOwpAQCAtODkwLDE1ICs5MjEsMjggQEAKIAl9CiAKIAljb25maWdfaXRlbV9wdXQoaXRlbSk7Ci0JdGYtPnRmX29wcy5mYWJyaWNfZHJvcF90cGcoc2VfdHBnKTsKIH0KIAorc3RhdGljIHZvaWQgdGFyZ2V0X2ZhYnJpY19yZWxlYXNlX3d3bihzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHNlX3d3biAqd3duID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCQlzdHJ1Y3Qgc2Vfd3duLCB3d25fZ3JvdXApOworCXN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICp0ZiA9IHd3bi0+d3duX3RmOworCisJdGYtPnRmX29wcy5mYWJyaWNfZHJvcF93d24od3duKTsKK30KKworc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY190cGdfaXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJPSB0YXJnZXRfZmFicmljX3JlbGVhc2Vfd3duLAorfTsKKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfdHBnX2dyb3VwX29wcyA9IHsKIAkubWFrZV9ncm91cAk9IHRhcmdldF9mYWJyaWNfbWFrZV90cGcsCiAJLmRyb3BfaXRlbQk9IHRhcmdldF9mYWJyaWNfZHJvcF90cGcsCiB9OwogCi1URl9DSVRfU0VUVVAodHBnLCBOVUxMLCAmdGFyZ2V0X2ZhYnJpY190cGdfZ3JvdXBfb3BzLCBOVUxMKTsKK1RGX0NJVF9TRVRVUCh0cGcsICZ0YXJnZXRfZmFicmljX3RwZ19pdGVtX29wcywgJnRhcmdldF9mYWJyaWNfdHBnX2dyb3VwX29wcywKKwkJTlVMTCk7CiAKIC8qIEVuZCBvZiB0ZmNfdHBnX2NpdCAqLwogCkBAIC05MzIsMTMgKzk3Niw3IEBACiAJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCiAJc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQogewotCXN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICp0ZiA9IGNvbnRhaW5lcl9vZihncm91cCwKLQkJCQlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcywgdGZfZ3JvdXApOwotCXN0cnVjdCBzZV93d24gKnd3biA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCi0JCQkJc3RydWN0IHNlX3d3biwgd3duX2dyb3VwKTsKLQogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKLQl0Zi0+dGZfb3BzLmZhYnJpY19kcm9wX3d3bih3d24pOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY193d25fZ3JvdXBfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaWJsb2NrLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9pYmxvY2suYwppbmRleCBjNmUwZDc1Li42N2YwYzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9pYmxvY2suYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9pYmxvY2suYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAKIAliZCA9IGJsa2Rldl9nZXRfYnlfcGF0aChpYl9kZXYtPmliZF91ZGV2X3BhdGgsCiAJCQkJRk1PREVfV1JJVEV8Rk1PREVfUkVBRHxGTU9ERV9FWENMLCBpYl9kZXYpOwotCWlmICghKGJkKSkKKwlpZiAoSVNfRVJSKGJkKSkKIAkJZ290byBmYWlsZWQ7CiAJLyoKIAkgKiBTZXR1cCB0aGUgbG9jYWwgc2NvcGUgcXVldWVfbGltaXRzIGZyb20gc3RydWN0IHJlcXVlc3RfcXVldWUtPmxpbWl0cwpAQCAtMjIwLDggKzIyMCwxMCBAQAogewogCXN0cnVjdCBpYmxvY2tfZGV2ICppYl9kZXYgPSBwOwogCi0JYmxrZGV2X3B1dChpYl9kZXYtPmliZF9iZCwgRk1PREVfV1JJVEV8Rk1PREVfUkVBRHxGTU9ERV9FWENMKTsKLQliaW9zZXRfZnJlZShpYl9kZXYtPmliZF9iaW9fc2V0KTsKKwlpZiAoaWJfZGV2LT5pYmRfYmQgIT0gTlVMTCkKKwkJYmxrZGV2X3B1dChpYl9kZXYtPmliZF9iZCwgRk1PREVfV1JJVEV8Rk1PREVfUkVBRHxGTU9ERV9FWENMKTsKKwlpZiAoaWJfZGV2LT5pYmRfYmlvX3NldCAhPSBOVUxMKQorCQliaW9zZXRfZnJlZShpYl9kZXYtPmliZF9iaW9fc2V0KTsKIAlrZnJlZShpYl9kZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9taWIuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX21pYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWE0OGFhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX21pYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRmlsZW5hbWU6ICB0YXJnZXRfY29yZV9taWIuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IFNCRSwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIFJpc2luZyBUaWRlIFN5c3RlbXMKLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEwIExpbnV4LWlTQ1NJLm9yZwotICoKLSAqIE5pY2hvbGFzIEEuIEJlbGxpbmdlciA8bmFiQGxpbnV4LWlzY3NpLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8Z2VuZXJhdGVkL3V0c3JlbGVhc2UuaD4KLSNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpLmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0KLSNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oPgotI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX29wcy5oPgotI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9jb25maWdmcy5oPgotCi0jaW5jbHVkZSAidGFyZ2V0X2NvcmVfaGJhLmgiCi0jaW5jbHVkZSAidGFyZ2V0X2NvcmVfbWliLmgiCi0KLS8qIFNDU0kgbWliIHRhYmxlIGluZGV4ICovCi1zdGF0aWMgc3RydWN0IHNjc2lfaW5kZXhfdGFibGUgc2NzaV9pbmRleF90YWJsZTsKLQotI2lmbmRlZiBJTklUSUFMX0pJRkZJRVMKLSNkZWZpbmUgSU5JVElBTF9KSUZGSUVTICgodW5zaWduZWQgbG9uZykodW5zaWduZWQgaW50KSAoLTMwMCpIWikpCi0jZW5kaWYKLQotLyogU0NTSSBJbnN0YW5jZSBUYWJsZSAqLwotI2RlZmluZSBTQ1NJX0lOU1RfU1dfSU5ERVgJCTEKLSNkZWZpbmUgU0NTSV9UUkFOU1BPUlRfSU5ERVgJCTEKLQotI2RlZmluZSBOT05FCQkiTm9uZSIKLSNkZWZpbmUgSVNQUklOVChhKSAgICgoYSA+PSAnICcpICYmIChhIDw9ICd+JykpCi0KLXN0YXRpYyBpbmxpbmUgaW50IGxpc3RfaXNfZmlyc3QoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKLQkJCQljb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQotewotCXJldHVybiBsaXN0LT5wcmV2ID09IGhlYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkICpsb2NhdGVfaGJhX3N0YXJ0KAotCXN0cnVjdCBzZXFfZmlsZSAqc2VxLAotCWxvZmZfdCAqcG9zKQotewotCXNwaW5fbG9jaygmc2VfZ2xvYmFsLT5nX2RldmljZV9sb2NrKTsKLQlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCwgKnBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpsb2NhdGVfaGJhX25leHQoCi0Jc3RydWN0IHNlcV9maWxlICpzZXEsCi0Jdm9pZCAqdiwKLQlsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmc2VfZ2xvYmFsLT5nX3NlX2Rldl9saXN0LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBsb2NhdGVfaGJhX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3Bpbl91bmxvY2soJnNlX2dsb2JhbC0+Z19kZXZpY2VfbG9jayk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTQ1NJIE1JQiBUYWJsZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogU0NTSSBJbnN0YW5jZSBUYWJsZQotICovCi1zdGF0aWMgdm9pZCAqc2NzaV9pbnN0X3NlcV9zdGFydCgKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKLQlsb2ZmX3QgKnBvcykKLXsKLQlzcGluX2xvY2soJnNlX2dsb2JhbC0+aGJhX2xvY2spOwotCXJldHVybiBzZXFfbGlzdF9zdGFydCgmc2VfZ2xvYmFsLT5nX2hiYV9saXN0LCAqcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfaW5zdF9zZXFfbmV4dCgKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKLQl2b2lkICp2LAotCWxvZmZfdCAqcG9zKQotewotCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZzZV9nbG9iYWwtPmdfaGJhX2xpc3QsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfaW5zdF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzcGluX3VubG9jaygmc2VfZ2xvYmFsLT5oYmFfbG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgc2NzaV9pbnN0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCBzZV9oYmEgKmhiYSA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX2hiYSwgaGJhX2xpc3QpOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJmhiYS0+aGJhX2xpc3QsICZzZV9nbG9iYWwtPmdfaGJhX2xpc3QpKQotCQlzZXFfcHV0cyhzZXEsICJpbnN0IHN3X2luZHhcbiIpOwotCi0Jc2VxX3ByaW50ZihzZXEsICIldSAldVxuIiwgaGJhLT5oYmFfaW5kZXgsIFNDU0lfSU5TVF9TV19JTkRFWCk7Ci0Jc2VxX3ByaW50ZihzZXEsICJwbHVnaW46ICVzIHZlcnNpb246ICVzXG4iLAotCQkJaGJhLT50cmFuc3BvcnQtPm5hbWUsIFRBUkdFVF9DT1JFX1ZFUlNJT04pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9pbnN0X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0CT0gc2NzaV9pbnN0X3NlcV9zdGFydCwKLQkubmV4dAk9IHNjc2lfaW5zdF9zZXFfbmV4dCwKLQkuc3RvcAk9IHNjc2lfaW5zdF9zZXFfc3RvcCwKLQkuc2hvdwk9IHNjc2lfaW5zdF9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX2luc3Rfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzY3NpX2luc3Rfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjc2lfaW5zdF9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV9pbnN0X3NlcV9vcGVuLAotCS5yZWFkCSA9IHNlcV9yZWFkLAotCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCi19OwotCi0vKgotICogU0NTSSBEZXZpY2UgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfZGV2X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfc3RhcnQoc2VxLCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCAqc2NzaV9kZXZfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX25leHQoc2VxLCB2LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX2Rldl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlsb2NhdGVfaGJhX3N0b3Aoc2VxLCB2KTsKLX0KLQotc3RhdGljIGludCBzY3NpX2Rldl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmE7Ci0Jc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYgKnNlX2RldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYsCi0JCQkJCQlnX3NlX2Rldl9saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBzZV9kZXYtPnNlX2Rldl9wdHI7Ci0JY2hhciBzdHJbMjhdOwotCWludCBrOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX2Rldi0+Z19zZV9kZXZfbGlzdCwgJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCkpCi0JCXNlcV9wdXRzKHNlcSwgImluc3QgaW5keCByb2xlIHBvcnRzXG4iKTsKLQotCWlmICghKGRldikpCi0JCXJldHVybiAwOwotCi0JaGJhID0gZGV2LT5zZV9oYmE7Ci0JaWYgKCEoaGJhKSkgewotCQkvKiBMb2cgZXJyb3IgPyAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzZXFfcHJpbnRmKHNlcSwgIiV1ICV1ICVzICV1XG4iLCBoYmEtPmhiYV9pbmRleCwKLQkJICAgZGV2LT5kZXZfaW5kZXgsICJUYXJnZXQiLCBkZXYtPmRldl9wb3J0X2NvdW50KTsKLQotCW1lbWNweSgmc3RyWzBdLCAodm9pZCAqKURFVl9UMTBfV1dOKGRldiksIDI4KTsKLQotCS8qIHZlbmRvciAqLwotCWZvciAoayA9IDA7IGsgPCA4OyBrKyspCi0JCXN0cltrXSA9IElTUFJJTlQoREVWX1QxMF9XV04oZGV2KS0+dmVuZG9yW2tdKSA/Ci0JCQkJREVWX1QxMF9XV04oZGV2KS0+dmVuZG9yW2tdIDogMHgyMDsKLQlzdHJba10gPSAweDIwOwotCi0JLyogbW9kZWwgKi8KLQlmb3IgKGsgPSAwOyBrIDwgMTY7IGsrKykKLQkJc3RyW2srOV0gPSBJU1BSSU5UKERFVl9UMTBfV1dOKGRldiktPm1vZGVsW2tdKSA/Ci0JCQkJREVWX1QxMF9XV04oZGV2KS0+bW9kZWxba10gOiAweDIwOwotCXN0cltrICsgOV0gPSAwOwotCi0Jc2VxX3ByaW50ZihzZXEsICJkZXZfYWxpYXM6ICVzXG4iLCBzdHIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9kZXZfc2VxX29wcyA9IHsKLQkuc3RhcnQgID0gc2NzaV9kZXZfc2VxX3N0YXJ0LAotCS5uZXh0ICAgPSBzY3NpX2Rldl9zZXFfbmV4dCwKLQkuc3RvcCAgID0gc2NzaV9kZXZfc2VxX3N0b3AsCi0JLnNob3cgICA9IHNjc2lfZGV2X3NlcV9zaG93Ci19OwotCi1zdGF0aWMgaW50IHNjc2lfZGV2X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV9kZXZfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjc2lfZGV2X3NlcV9mb3BzID0gewotCS5vd25lcgkgPSBUSElTX01PRFVMRSwKLQkub3BlbgkgPSBzY3NpX2Rldl9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIFNDU0kgUG9ydCBUYWJsZQotICovCi1zdGF0aWMgdm9pZCAqc2NzaV9wb3J0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfc3RhcnQoc2VxLCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCAqc2NzaV9wb3J0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9uZXh0KHNlcSwgdiwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2NzaV9wb3J0X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCWxvY2F0ZV9oYmFfc3RvcChzZXEsIHYpOwotfQotCi1zdGF0aWMgaW50IHNjc2lfcG9ydF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmE7Ci0Jc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYgKnNlX2RldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYsCi0JCQkJCQlnX3NlX2Rldl9saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBzZV9kZXYtPnNlX2Rldl9wdHI7Ci0Jc3RydWN0IHNlX3BvcnQgKnNlcCwgKnNlcF90bXA7Ci0KLQlpZiAobGlzdF9pc19maXJzdCgmc2VfZGV2LT5nX3NlX2Rldl9saXN0LCAmc2VfZ2xvYmFsLT5nX3NlX2Rldl9saXN0KSkKLQkJc2VxX3B1dHMoc2VxLCAiaW5zdCBkZXZpY2UgaW5keCByb2xlIGJ1c3lfY291bnRcbiIpOwotCi0JaWYgKCEoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQloYmEgPSBkZXYtPnNlX2hiYTsKLQlpZiAoIShoYmEpKSB7Ci0JCS8qIExvZyBlcnJvciA/ICovCi0JCXJldHVybiAwOwotCX0KLQotCS8qIEZJWE1FOiBzY3NpUG9ydEJ1c3lTdGF0dXNlcyBjb3VudCAqLwotCXNwaW5fbG9jaygmZGV2LT5zZV9wb3J0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXAsIHNlcF90bXAsICZkZXYtPmRldl9zZXBfbGlzdCwgc2VwX2xpc3QpIHsKLQkJc2VxX3ByaW50ZihzZXEsICIldSAldSAldSAlcyV1ICV1XG4iLCBoYmEtPmhiYV9pbmRleCwKLQkJCWRldi0+ZGV2X2luZGV4LCBzZXAtPnNlcF9pbmRleCwgIkRldmljZSIsCi0JCQlkZXYtPmRldl9pbmRleCwgMCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZkZXYtPnNlX3BvcnRfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzY3NpX3BvcnRfc2VxX29wcyA9IHsKLQkuc3RhcnQgID0gc2NzaV9wb3J0X3NlcV9zdGFydCwKLQkubmV4dCAgID0gc2NzaV9wb3J0X3NlcV9uZXh0LAotCS5zdG9wICAgPSBzY3NpX3BvcnRfc2VxX3N0b3AsCi0JLnNob3cgICA9IHNjc2lfcG9ydF9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX3BvcnRfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzY3NpX3BvcnRfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjc2lfcG9ydF9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV9wb3J0X3NlcV9vcGVuLAotCS5yZWFkCSA9IHNlcV9yZWFkLAotCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCi19OwotCi0vKgotICogU0NTSSBUcmFuc3BvcnQgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfdHJhbnNwb3J0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfc3RhcnQoc2VxLCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCAqc2NzaV90cmFuc3BvcnRfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX25leHQoc2VxLCB2LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX3RyYW5zcG9ydF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlsb2NhdGVfaGJhX3N0b3Aoc2VxLCB2KTsKLX0KLQotc3RhdGljIGludCBzY3NpX3RyYW5zcG9ydF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmE7Ci0Jc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYgKnNlX2RldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYsCi0JCQkJCQlnX3NlX2Rldl9saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBzZV9kZXYtPnNlX2Rldl9wdHI7Ci0Jc3RydWN0IHNlX3BvcnQgKnNlLCAqc2VfdG1wOwotCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnRwZzsKLQlzdHJ1Y3QgdDEwX3d3biAqd3duOwotCWNoYXIgYnVmWzY0XTsKLQotCWlmIChsaXN0X2lzX2ZpcnN0KCZzZV9kZXYtPmdfc2VfZGV2X2xpc3QsICZzZV9nbG9iYWwtPmdfc2VfZGV2X2xpc3QpKQotCQlzZXFfcHV0cyhzZXEsICJpbnN0IGRldmljZSBpbmR4IGRldl9uYW1lXG4iKTsKLQotCWlmICghKGRldikpCi0JCXJldHVybiAwOwotCi0JaGJhID0gZGV2LT5zZV9oYmE7Ci0JaWYgKCEoaGJhKSkgewotCQkvKiBMb2cgZXJyb3IgPyAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQl3d24gPSBERVZfVDEwX1dXTihkZXYpOwotCi0Jc3Bpbl9sb2NrKCZkZXYtPnNlX3BvcnRfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNlLCBzZV90bXAsICZkZXYtPmRldl9zZXBfbGlzdCwgc2VwX2xpc3QpIHsKLQkJdHBnID0gc2UtPnNlcF90cGc7Ci0JCXNwcmludGYoYnVmLCAic2NzaVRyYW5zcG9ydCVzIiwKLQkJCQlUUEdfVEZPKHRwZyktPmdldF9mYWJyaWNfbmFtZSgpKTsKLQotCQlzZXFfcHJpbnRmKHNlcSwgIiV1ICVzICV1ICVzKyVzXG4iLAotCQkJaGJhLT5oYmFfaW5kZXgsIC8qIHNjc2lUcmFuc3BvcnRJbmRleCAqLwotCQkJYnVmLCAgLyogc2NzaVRyYW5zcG9ydFR5cGUgKi8KLQkJCShUUEdfVEZPKHRwZyktPnRwZ19nZXRfaW5zdF9pbmRleCAhPSBOVUxMKSA/Ci0JCQlUUEdfVEZPKHRwZyktPnRwZ19nZXRfaW5zdF9pbmRleCh0cGcpIDoKLQkJCTAsCi0JCQlUUEdfVEZPKHRwZyktPnRwZ19nZXRfd3duKHRwZyksCi0JCQkoc3RybGVuKHd3bi0+dW5pdF9zZXJpYWwpKSA/Ci0JCQkvKiBzY3NpVHJhbnNwb3J0RGV2TmFtZSAqLwotCQkJd3duLT51bml0X3NlcmlhbCA6IHd3bi0+dmVuZG9yKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRldi0+c2VfcG9ydF9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjc2lfdHJhbnNwb3J0X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IHNjc2lfdHJhbnNwb3J0X3NlcV9zdGFydCwKLQkubmV4dCAgID0gc2NzaV90cmFuc3BvcnRfc2VxX25leHQsCi0JLnN0b3AgICA9IHNjc2lfdHJhbnNwb3J0X3NlcV9zdG9wLAotCS5zaG93ICAgPSBzY3NpX3RyYW5zcG9ydF9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX3RyYW5zcG9ydF9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNjc2lfdHJhbnNwb3J0X3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3NpX3RyYW5zcG9ydF9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV90cmFuc3BvcnRfc2VxX29wZW4sCi0JLnJlYWQJID0gc2VxX3JlYWQsCi0JLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLS8qCi0gKiBTQ1NJIFRhcmdldCBEZXZpY2UgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfdGd0X2Rldl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX3N0YXJ0KHNlcSwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfdGd0X2Rldl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfbmV4dChzZXEsIHYsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfdGd0X2Rldl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlsb2NhdGVfaGJhX3N0b3Aoc2VxLCB2KTsKLX0KLQotCi0jZGVmaW5lIExVX0NPVU5UCTEgIC8qIGZvciBub3cgKi8KLXN0YXRpYyBpbnQgc2NzaV90Z3RfZGV2X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCBzZV9oYmEgKmhiYTsKLQlzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2RldiAqc2VfZGV2ID0gbGlzdF9lbnRyeSh2LCBzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2RldiwKLQkJCQkJCWdfc2VfZGV2X2xpc3QpOwotCXN0cnVjdCBzZV9kZXZpY2UgKmRldiA9IHNlX2Rldi0+c2VfZGV2X3B0cjsKLQlpbnQgbm9uX2FjY2Vzc2libGVfbHVzID0gMDsKLQljaGFyIHN0YXR1c1sxNl07Ci0KLQlpZiAobGlzdF9pc19maXJzdCgmc2VfZGV2LT5nX3NlX2Rldl9saXN0LCAmc2VfZ2xvYmFsLT5nX3NlX2Rldl9saXN0KSkKLQkJc2VxX3B1dHMoc2VxLCAiaW5zdCBpbmR4IG51bV9MVXMgc3RhdHVzIG5vbl9hY2Nlc3NfTFVzIgotCQkJIiByZXNldHNcbiIpOwotCi0JaWYgKCEoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQloYmEgPSBkZXYtPnNlX2hiYTsKLQlpZiAoIShoYmEpKSB7Ci0JCS8qIExvZyBlcnJvciA/ICovCi0JCXJldHVybiAwOwotCX0KLQotCXN3aXRjaCAoZGV2LT5kZXZfc3RhdHVzKSB7Ci0JY2FzZSBUUkFOU1BPUlRfREVWSUNFX0FDVElWQVRFRDoKLQkJc3RyY3B5KHN0YXR1cywgImFjdGl2YXRlZCIpOwotCQlicmVhazsKLQljYXNlIFRSQU5TUE9SVF9ERVZJQ0VfREVBQ1RJVkFURUQ6Ci0JCXN0cmNweShzdGF0dXMsICJkZWFjdGl2YXRlZCIpOwotCQlub25fYWNjZXNzaWJsZV9sdXMgPSAxOwotCQlicmVhazsKLQljYXNlIFRSQU5TUE9SVF9ERVZJQ0VfU0hVVERPV046Ci0JCXN0cmNweShzdGF0dXMsICJzaHV0ZG93biIpOwotCQlub25fYWNjZXNzaWJsZV9sdXMgPSAxOwotCQlicmVhazsKLQljYXNlIFRSQU5TUE9SVF9ERVZJQ0VfT0ZGTElORV9BQ1RJVkFURUQ6Ci0JY2FzZSBUUkFOU1BPUlRfREVWSUNFX09GRkxJTkVfREVBQ1RJVkFURUQ6Ci0JCXN0cmNweShzdGF0dXMsICJvZmZsaW5lIik7Ci0JCW5vbl9hY2Nlc3NpYmxlX2x1cyA9IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNwcmludGYoc3RhdHVzLCAidW5rbm93biglZCkiLCBkZXYtPmRldl9zdGF0dXMpOwotCQlub25fYWNjZXNzaWJsZV9sdXMgPSAxOwotCX0KLQotCXNlcV9wcmludGYoc2VxLCAiJXUgJXUgJXUgJXMgJXUgJXVcbiIsCi0JCSAgIGhiYS0+aGJhX2luZGV4LCBkZXYtPmRldl9pbmRleCwgTFVfQ09VTlQsCi0JCSAgIHN0YXR1cywgbm9uX2FjY2Vzc2libGVfbHVzLCBkZXYtPm51bV9yZXNldHMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV90Z3RfZGV2X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IHNjc2lfdGd0X2Rldl9zZXFfc3RhcnQsCi0JLm5leHQgICA9IHNjc2lfdGd0X2Rldl9zZXFfbmV4dCwKLQkuc3RvcCAgID0gc2NzaV90Z3RfZGV2X3NlcV9zdG9wLAotCS5zaG93ICAgPSBzY3NpX3RndF9kZXZfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2NzaV90Z3RfZGV2X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV90Z3RfZGV2X3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3NpX3RndF9kZXZfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHNjc2lfdGd0X2Rldl9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIFNDU0kgVGFyZ2V0IFBvcnQgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfdGd0X3BvcnRfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9zdGFydChzZXEsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpzY3NpX3RndF9wb3J0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9uZXh0KHNlcSwgdiwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2NzaV90Z3RfcG9ydF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlsb2NhdGVfaGJhX3N0b3Aoc2VxLCB2KTsKLX0KLQotc3RhdGljIGludCBzY3NpX3RndF9wb3J0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCBzZV9oYmEgKmhiYTsKLQlzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2RldiAqc2VfZGV2ID0gbGlzdF9lbnRyeSh2LCBzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2RldiwKLQkJCQkJCWdfc2VfZGV2X2xpc3QpOwotCXN0cnVjdCBzZV9kZXZpY2UgKmRldiA9IHNlX2Rldi0+c2VfZGV2X3B0cjsKLQlzdHJ1Y3Qgc2VfcG9ydCAqc2VwLCAqc2VwX3RtcDsKLQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICp0cGc7Ci0JdTMyIHJ4X21ieXRlcywgdHhfbWJ5dGVzOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBudW1fY21kczsKLQljaGFyIGJ1Zls2NF07Ci0KLQlpZiAobGlzdF9pc19maXJzdCgmc2VfZGV2LT5nX3NlX2Rldl9saXN0LCAmc2VfZ2xvYmFsLT5nX3NlX2Rldl9saXN0KSkKLQkJc2VxX3B1dHMoc2VxLCAiaW5zdCBkZXZpY2UgaW5keCBuYW1lIHBvcnRfaW5kZXggaW5fY21kcyIKLQkJCSIgd3JpdGVfbWJ5dGVzIHJlYWRfbWJ5dGVzIGhzX2luX2NtZHNcbiIpOwotCi0JaWYgKCEoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQloYmEgPSBkZXYtPnNlX2hiYTsKLQlpZiAoIShoYmEpKSB7Ci0JCS8qIExvZyBlcnJvciA/ICovCi0JCXJldHVybiAwOwotCX0KLQotCXNwaW5fbG9jaygmZGV2LT5zZV9wb3J0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXAsIHNlcF90bXAsICZkZXYtPmRldl9zZXBfbGlzdCwgc2VwX2xpc3QpIHsKLQkJdHBnID0gc2VwLT5zZXBfdHBnOwotCQlzcHJpbnRmKGJ1ZiwgIiVzUG9ydCMiLAotCQkJVFBHX1RGTyh0cGcpLT5nZXRfZmFicmljX25hbWUoKSk7Ci0KLQkJc2VxX3ByaW50ZihzZXEsICIldSAldSAldSAlcyVkICVzJXMlZCAiLAotCQkgICAgIGhiYS0+aGJhX2luZGV4LAotCQkgICAgIGRldi0+ZGV2X2luZGV4LAotCQkgICAgIHNlcC0+c2VwX2luZGV4LAotCQkgICAgIGJ1Ziwgc2VwLT5zZXBfaW5kZXgsCi0JCSAgICAgVFBHX1RGTyh0cGcpLT50cGdfZ2V0X3d3bih0cGcpLCAiK3QrIiwKLQkJICAgICBUUEdfVEZPKHRwZyktPnRwZ19nZXRfdGFnKHRwZykpOwotCi0JCXNwaW5fbG9jaygmc2VwLT5zZXBfbHVuLT5sdW5fc2VwX2xvY2spOwotCQludW1fY21kcyA9IHNlcC0+c2VwX3N0YXRzLmNtZF9wZHVzOwotCQlyeF9tYnl0ZXMgPSAoc2VwLT5zZXBfc3RhdHMucnhfZGF0YV9vY3RldHMgPj4gMjApOwotCQl0eF9tYnl0ZXMgPSAoc2VwLT5zZXBfc3RhdHMudHhfZGF0YV9vY3RldHMgPj4gMjApOwotCQlzcGluX3VubG9jaygmc2VwLT5zZXBfbHVuLT5sdW5fc2VwX2xvY2spOwotCi0JCXNlcV9wcmludGYoc2VxLCAiJWxsdSAldSAldSAldVxuIiwgbnVtX2NtZHMsCi0JCQlyeF9tYnl0ZXMsIHR4X21ieXRlcywgMCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZkZXYtPnNlX3BvcnRfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzY3NpX3RndF9wb3J0X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IHNjc2lfdGd0X3BvcnRfc2VxX3N0YXJ0LAotCS5uZXh0ICAgPSBzY3NpX3RndF9wb3J0X3NlcV9uZXh0LAotCS5zdG9wICAgPSBzY3NpX3RndF9wb3J0X3NlcV9zdG9wLAotCS5zaG93ICAgPSBzY3NpX3RndF9wb3J0X3NlcV9zaG93Ci19OwotCi1zdGF0aWMgaW50IHNjc2lfdGd0X3BvcnRfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzY3NpX3RndF9wb3J0X3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3NpX3RndF9wb3J0X3NlcV9mb3BzID0gewotCS5vd25lcgkgPSBUSElTX01PRFVMRSwKLQkub3BlbgkgPSBzY3NpX3RndF9wb3J0X3NlcV9vcGVuLAotCS5yZWFkCSA9IHNlcV9yZWFkLAotCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCi19OwotCi0vKgotICogU0NTSSBBdXRob3JpemVkIEluaXRpYXRvciBUYWJsZToKLSAqIEl0IGNvbnRhaW5zIHRoZSBTQ1NJIEluaXRpYXRvcnMgYXV0aG9yaXplZCB0byBiZSBhdHRhY2hlZCB0byBvbmUgb2YgdGhlCi0gKiBsb2NhbCBUYXJnZXQgcG9ydHMuCi0gKiBJdGVyYXRlcyB0aHJvdWdoIGFsbCBhY3RpdmUgVFBHcyBhbmQgZXh0cmFjdHMgdGhlIGluZm8gZnJvbSB0aGUgQUNMcwotICovCi1zdGF0aWMgdm9pZCAqc2NzaV9hdXRoX2ludHJfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlzcGluX2xvY2tfYmgoJnNlX2dsb2JhbC0+c2VfdHBnX2xvY2spOwotCXJldHVybiBzZXFfbGlzdF9zdGFydCgmc2VfZ2xvYmFsLT5nX3NlX3RwZ19saXN0LCAqcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfYXV0aF9pbnRyX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LAotCQkJCQkgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIHNlcV9saXN0X25leHQodiwgJnNlX2dsb2JhbC0+Z19zZV90cGdfbGlzdCwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2NzaV9hdXRoX2ludHJfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3Bpbl91bmxvY2tfYmgoJnNlX2dsb2JhbC0+c2VfdHBnX2xvY2spOwotfQotCi1zdGF0aWMgaW50IHNjc2lfYXV0aF9pbnRyX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3BvcnRhbF9ncm91cCwKLQkJCQkJCXNlX3RwZ19saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2X2VudHJ5ICpkZXZlOwotCXN0cnVjdCBzZV9sdW4gKmx1bjsKLQlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX25hY2w7Ci0JaW50IGo7Ci0KLQlpZiAobGlzdF9pc19maXJzdCgmc2VfdHBnLT5zZV90cGdfbGlzdCwKLQkJCSAgJnNlX2dsb2JhbC0+Z19zZV90cGdfbGlzdCkpCi0JCXNlcV9wdXRzKHNlcSwgImluc3QgZGV2IHBvcnQgaW5keCBkZXZfb3JfcG9ydCBpbnRyX25hbWUgIgotCQkJICJtYXBfaW5keCBhdHRfY291bnQgbnVtX2NtZHMgcmVhZF9tYnl0ZXMgIgotCQkJICJ3cml0ZV9tYnl0ZXMgaHNfbnVtX2NtZHMgY3JlYXRpb25fdGltZSByb3dfc3RhdHVzXG4iKTsKLQotCWlmICghKHNlX3RwZykpCi0JCXJldHVybiAwOwotCi0Jc3Bpbl9sb2NrKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VfbmFjbCwgJnNlX3RwZy0+YWNsX25vZGVfbGlzdCwgYWNsX2xpc3QpIHsKLQotCQlhdG9taWNfaW5jKCZzZV9uYWNsLT5taWJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7Ci0JCXNwaW5fdW5sb2NrKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOwotCi0JCXNwaW5fbG9ja19pcnEoJnNlX25hY2wtPmRldmljZV9saXN0X2xvY2spOwotCQlmb3IgKGogPSAwOyBqIDwgVFJBTlNQT1JUX01BWF9MVU5TX1BFUl9UUEc7IGorKykgewotCQkJZGV2ZSA9ICZzZV9uYWNsLT5kZXZpY2VfbGlzdFtqXTsKLQkJCWlmICghKGRldmUtPmx1bl9mbGFncyAmCi0JCQkJCVRSQU5TUE9SVF9MVU5GTEFHU19JTklUSUFUT1JfQUNDRVNTKSB8fAotCQkJICAgICghZGV2ZS0+c2VfbHVuKSkKLQkJCQljb250aW51ZTsKLQkJCWx1biA9IGRldmUtPnNlX2x1bjsKLQkJCWlmICghbHVuLT5sdW5fc2VfZGV2KQotCQkJCWNvbnRpbnVlOwotCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiV1ICV1ICV1ICV1ICV1ICVzICV1ICV1ICV1ICV1ICV1ICV1IgotCQkJCQkiICV1ICVzXG4iLAotCQkJCS8qIHNjc2lJbnN0SW5kZXggKi8KLQkJCQkoVFBHX1RGTyhzZV90cGcpLT50cGdfZ2V0X2luc3RfaW5kZXggIT0gTlVMTCkgPwotCQkJCVRQR19URk8oc2VfdHBnKS0+dHBnX2dldF9pbnN0X2luZGV4KHNlX3RwZykgOgotCQkJCTAsCi0JCQkJLyogc2NzaURldmljZUluZGV4ICovCi0JCQkJbHVuLT5sdW5fc2VfZGV2LT5kZXZfaW5kZXgsCi0JCQkJLyogc2NzaUF1dGhJbnRyVGd0UG9ydEluZGV4ICovCi0JCQkJVFBHX1RGTyhzZV90cGcpLT50cGdfZ2V0X3RhZyhzZV90cGcpLAotCQkJCS8qIHNjc2lBdXRoSW50ckluZGV4ICovCi0JCQkJc2VfbmFjbC0+YWNsX2luZGV4LAotCQkJCS8qIHNjc2lBdXRoSW50ckRldk9yUG9ydCAqLwotCQkJCTEsCi0JCQkJLyogc2NzaUF1dGhJbnRyTmFtZSAqLwotCQkJCXNlX25hY2wtPmluaXRpYXRvcm5hbWVbMF0gPwotCQkJCQlzZV9uYWNsLT5pbml0aWF0b3JuYW1lIDogTk9ORSwKLQkJCQkvKiBGSVhNRTogc2NzaUF1dGhJbnRyTHVuTWFwSW5kZXggKi8KLQkJCQkwLAotCQkJCS8qIHNjc2lBdXRoSW50ckF0dGFjaGVkVGltZXMgKi8KLQkJCQlkZXZlLT5hdHRhY2hfY291bnQsCi0JCQkJLyogc2NzaUF1dGhJbnRyT3V0Q29tbWFuZHMgKi8KLQkJCQlkZXZlLT50b3RhbF9jbWRzLAotCQkJCS8qIHNjc2lBdXRoSW50clJlYWRNZWdhQnl0ZXMgKi8KLQkJCQkodTMyKShkZXZlLT5yZWFkX2J5dGVzID4+IDIwKSwKLQkJCQkvKiBzY3NpQXV0aEludHJXcml0dGVuTWVnYUJ5dGVzICovCi0JCQkJKHUzMikoZGV2ZS0+d3JpdGVfYnl0ZXMgPj4gMjApLAotCQkJCS8qIEZJWE1FOiBzY3NpQXV0aEludHJIU091dENvbW1hbmRzICovCi0JCQkJMCwKLQkJCQkvKiBzY3NpQXV0aEludHJMYXN0Q3JlYXRpb24gKi8KLQkJCQkodTMyKSgoKHUzMilkZXZlLT5jcmVhdGlvbl90aW1lIC0KLQkJCQkJICAgIElOSVRJQUxfSklGRklFUykgKiAxMDAgLyBIWiksCi0JCQkJLyogRklYTUU6IHNjc2lBdXRoSW50clJvd1N0YXR1cyAqLwotCQkJCSJSZWFkeSIpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmc2VfbmFjbC0+ZGV2aWNlX2xpc3RfbG9jayk7Ci0KLQkJc3Bpbl9sb2NrKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOwotCQlhdG9taWNfZGVjKCZzZV9uYWNsLT5taWJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9hdXRoX2ludHJfc2VxX29wcyA9IHsKLQkuc3RhcnQJPSBzY3NpX2F1dGhfaW50cl9zZXFfc3RhcnQsCi0JLm5leHQJPSBzY3NpX2F1dGhfaW50cl9zZXFfbmV4dCwKLQkuc3RvcAk9IHNjc2lfYXV0aF9pbnRyX3NlcV9zdG9wLAotCS5zaG93CT0gc2NzaV9hdXRoX2ludHJfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2NzaV9hdXRoX2ludHJfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzY3NpX2F1dGhfaW50cl9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NzaV9hdXRoX2ludHJfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHNjc2lfYXV0aF9pbnRyX3NlcV9vcGVuLAotCS5yZWFkCSA9IHNlcV9yZWFkLAotCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCi19OwotCi0vKgotICogU0NTSSBBdHRhY2hlZCBJbml0aWF0b3IgUG9ydCBUYWJsZToKLSAqIEl0IGxpc3RzIHRoZSBTQ1NJIEluaXRpYXRvcnMgYXR0YWNoZWQgdG8gb25lIG9mIHRoZSBsb2NhbCBUYXJnZXQgcG9ydHMuCi0gKiBJdGVyYXRlcyB0aHJvdWdoIGFsbCBhY3RpdmUgVFBHcyBhbmQgdXNlIGFjdGl2ZSBzZXNzaW9ucyBmcm9tIGVhY2ggVFBHCi0gKiB0byBsaXN0IHRoZSBpbmZvIGZvIHRoaXMgdGFibGUuCi0gKi8KLXN0YXRpYyB2b2lkICpzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlzcGluX2xvY2tfYmgoJnNlX2dsb2JhbC0+c2VfdHBnX2xvY2spOwotCXJldHVybiBzZXFfbGlzdF9zdGFydCgmc2VfZ2xvYmFsLT5nX3NlX3RwZ19saXN0LCAqcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfYXR0X2ludHJfcG9ydF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwKLQkJCQkJIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZzZV9nbG9iYWwtPmdfc2VfdHBnX2xpc3QsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzcGluX3VubG9ja19iaCgmc2VfZ2xvYmFsLT5zZV90cGdfbG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3BvcnRhbF9ncm91cCwKLQkJCQkJCXNlX3RwZ19saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2X2VudHJ5ICpkZXZlOwotCXN0cnVjdCBzZV9sdW4gKmx1bjsKLQlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX25hY2w7Ci0Jc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3M7Ci0JdW5zaWduZWQgY2hhciBidWZbNjRdOwotCWludCBqOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX3RwZy0+c2VfdHBnX2xpc3QsCi0JCQkgICZzZV9nbG9iYWwtPmdfc2VfdHBnX2xpc3QpKQotCQlzZXFfcHV0cyhzZXEsICJpbnN0IGRldiBwb3J0IGluZHggcG9ydF9hdXRoX2luZHggcG9ydF9uYW1lIgotCQkJIiBwb3J0X2lkZW50XG4iKTsKLQotCWlmICghKHNlX3RwZykpCi0JCXJldHVybiAwOwotCi0Jc3Bpbl9sb2NrKCZzZV90cGctPnNlc3Npb25fbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZV9zZXNzLCAmc2VfdHBnLT50cGdfc2Vzc19saXN0LCBzZXNzX2xpc3QpIHsKLQkJaWYgKChUUEdfVEZPKHNlX3RwZyktPnNlc3NfbG9nZ2VkX2luKHNlX3Nlc3MpKSB8fAotCQkgICAgKCFzZV9zZXNzLT5zZV9ub2RlX2FjbCkgfHwKLQkJICAgICghc2Vfc2Vzcy0+c2Vfbm9kZV9hY2wtPmRldmljZV9saXN0KSkKLQkJCWNvbnRpbnVlOwotCi0JCWF0b21pY19pbmMoJnNlX3Nlc3MtPm1pYl9yZWZfY291bnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKLQkJc2VfbmFjbCA9IHNlX3Nlc3MtPnNlX25vZGVfYWNsOwotCQlhdG9taWNfaW5jKCZzZV9uYWNsLT5taWJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7Ci0JCXNwaW5fdW5sb2NrKCZzZV90cGctPnNlc3Npb25fbG9jayk7Ci0KLQkJc3Bpbl9sb2NrX2lycSgmc2VfbmFjbC0+ZGV2aWNlX2xpc3RfbG9jayk7Ci0JCWZvciAoaiA9IDA7IGogPCBUUkFOU1BPUlRfTUFYX0xVTlNfUEVSX1RQRzsgaisrKSB7Ci0JCQlkZXZlID0gJnNlX25hY2wtPmRldmljZV9saXN0W2pdOwotCQkJaWYgKCEoZGV2ZS0+bHVuX2ZsYWdzICYKLQkJCQkJVFJBTlNQT1JUX0xVTkZMQUdTX0lOSVRJQVRPUl9BQ0NFU1MpIHx8Ci0JCQkgICAoIWRldmUtPnNlX2x1bikpCi0JCQkJY29udGludWU7Ci0KLQkJCWx1biA9IGRldmUtPnNlX2x1bjsKLQkJCWlmICghbHVuLT5sdW5fc2VfZGV2KQotCQkJCWNvbnRpbnVlOwotCi0JCQltZW1zZXQoYnVmLCAwLCA2NCk7Ci0JCQlpZiAoVFBHX1RGTyhzZV90cGcpLT5zZXNzX2dldF9pbml0aWF0b3Jfc2lkICE9IE5VTEwpCi0JCQkJVFBHX1RGTyhzZV90cGcpLT5zZXNzX2dldF9pbml0aWF0b3Jfc2lkKAotCQkJCQlzZV9zZXNzLCAodW5zaWduZWQgY2hhciAqKSZidWZbMF0sIDY0KTsKLQotCQkJc2VxX3ByaW50ZihzZXEsICIldSAldSAldSAldSAldSAlcytpKyVzXG4iLAotCQkJCS8qIHNjc2lJbnN0SW5kZXggKi8KLQkJCQkoVFBHX1RGTyhzZV90cGcpLT50cGdfZ2V0X2luc3RfaW5kZXggIT0gTlVMTCkgPwotCQkJCVRQR19URk8oc2VfdHBnKS0+dHBnX2dldF9pbnN0X2luZGV4KHNlX3RwZykgOgotCQkJCTAsCi0JCQkJLyogc2NzaURldmljZUluZGV4ICovCi0JCQkJbHVuLT5sdW5fc2VfZGV2LT5kZXZfaW5kZXgsCi0JCQkJLyogc2NzaVBvcnRJbmRleCAqLwotCQkJCVRQR19URk8oc2VfdHBnKS0+dHBnX2dldF90YWcoc2VfdHBnKSwKLQkJCQkvKiBzY3NpQXR0SW50clBvcnRJbmRleCAqLwotCQkJCShUUEdfVEZPKHNlX3RwZyktPnNlc3NfZ2V0X2luZGV4ICE9IE5VTEwpID8KLQkJCQlUUEdfVEZPKHNlX3RwZyktPnNlc3NfZ2V0X2luZGV4KHNlX3Nlc3MpIDoKLQkJCQkwLAotCQkJCS8qIHNjc2lBdHRJbnRyUG9ydEF1dGhJbnRySWR4ICovCi0JCQkJc2VfbmFjbC0+YWNsX2luZGV4LAotCQkJCS8qIHNjc2lBdHRJbnRyUG9ydE5hbWUgKi8KLQkJCQlzZV9uYWNsLT5pbml0aWF0b3JuYW1lWzBdID8KLQkJCQkJc2VfbmFjbC0+aW5pdGlhdG9ybmFtZSA6IE5PTkUsCi0JCQkJLyogc2NzaUF0dEludHJQb3J0SWRlbnRpZmllciAqLwotCQkJCWJ1Zik7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZzZV9uYWNsLT5kZXZpY2VfbGlzdF9sb2NrKTsKLQotCQlzcGluX2xvY2soJnNlX3RwZy0+c2Vzc2lvbl9sb2NrKTsKLQkJYXRvbWljX2RlYygmc2VfbmFjbC0+bWliX3JlZl9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOwotCQlhdG9taWNfZGVjKCZzZV9zZXNzLT5taWJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZzZV90cGctPnNlc3Npb25fbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX29wcyA9IHsKLQkuc3RhcnQJPSBzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX3N0YXJ0LAotCS5uZXh0CT0gc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9uZXh0LAotCS5zdG9wCT0gc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9zdG9wLAotCS5zaG93CT0gc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9zaG93Ci19OwotCi1zdGF0aWMgaW50IHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNjc2lfYXR0X2ludHJfcG9ydF9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9mb3BzID0gewotCS5vd25lcgkgPSBUSElTX01PRFVMRSwKLQkub3BlbgkgPSBzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX29wZW4sCi0JLnJlYWQJID0gc2VxX3JlYWQsCi0JLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLS8qCi0gKiBTQ1NJIExvZ2ljYWwgVW5pdCBUYWJsZQotICovCi1zdGF0aWMgdm9pZCAqc2NzaV9sdV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX3N0YXJ0KHNlcSwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfbHVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX25leHQoc2VxLCB2LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX2x1X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCWxvY2F0ZV9oYmFfc3RvcChzZXEsIHYpOwotfQotCi0jZGVmaW5lIFNDU0lfTFVfSU5ERVgJCTEKLXN0YXRpYyBpbnQgc2NzaV9sdV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmE7Ci0Jc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYgKnNlX2RldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYsCi0JCQkJCQlnX3NlX2Rldl9saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBzZV9kZXYtPnNlX2Rldl9wdHI7Ci0JaW50IGo7Ci0JY2hhciBzdHJbMjhdOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX2Rldi0+Z19zZV9kZXZfbGlzdCwgJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCkpCi0JCXNlcV9wdXRzKHNlcSwgImluc3QgZGV2IGluZHggTFVOIGx1X25hbWUgdmVuZCBwcm9kIHJldiIKLQkJIiBkZXZfdHlwZSBzdGF0dXMgc3RhdGUtYml0IG51bV9jbWRzIHJlYWRfbWJ5dGVzIgotCQkiIHdyaXRlX21ieXRlcyByZXNldHMgZnVsbF9zdGF0IGhzX251bV9jbWRzIGNyZWF0aW9uX3RpbWVcbiIpOwotCi0JaWYgKCEoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQloYmEgPSBkZXYtPnNlX2hiYTsKLQlpZiAoIShoYmEpKSB7Ci0JCS8qIExvZyBlcnJvciA/ICovCi0JCXJldHVybiAwOwotCX0KLQotCS8qIEZpeCBMVSBzdGF0ZSwgaWYgd2UgY2FuIHJlYWQgaXQgZnJvbSB0aGUgZGV2aWNlICovCi0Jc2VxX3ByaW50ZihzZXEsICIldSAldSAldSAlbGx1ICVzIiwgaGJhLT5oYmFfaW5kZXgsCi0JCQlkZXYtPmRldl9pbmRleCwgU0NTSV9MVV9JTkRFWCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpMCwgLyogRklYTUU6IHNjc2lMdURlZmF1bHRMdW4gKi8KLQkJCShzdHJsZW4oREVWX1QxMF9XV04oZGV2KS0+dW5pdF9zZXJpYWwpKSA/Ci0JCQkvKiBzY3NpTHVXd25OYW1lICovCi0JCQkoY2hhciAqKSZERVZfVDEwX1dXTihkZXYpLT51bml0X3NlcmlhbFswXSA6Ci0JCQkiTm9uZSIpOwotCi0JbWVtY3B5KCZzdHJbMF0sICh2b2lkICopREVWX1QxMF9XV04oZGV2KSwgMjgpOwotCS8qIHNjc2lMdVZlbmRvcklkICovCi0JZm9yIChqID0gMDsgaiA8IDg7IGorKykKLQkJc3RyW2pdID0gSVNQUklOVChERVZfVDEwX1dXTihkZXYpLT52ZW5kb3Jbal0pID8KLQkJCURFVl9UMTBfV1dOKGRldiktPnZlbmRvcltqXSA6IDB4MjA7Ci0Jc3RyWzhdID0gMDsKLQlzZXFfcHJpbnRmKHNlcSwgIiAlcyIsIHN0cik7Ci0KLQkvKiBzY3NpTHVQcm9kdWN0SWQgKi8KLQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykKLQkJc3RyW2pdID0gSVNQUklOVChERVZfVDEwX1dXTihkZXYpLT5tb2RlbFtqXSkgPwotCQkJREVWX1QxMF9XV04oZGV2KS0+bW9kZWxbal0gOiAweDIwOwotCXN0clsxNl0gPSAwOwotCXNlcV9wcmludGYoc2VxLCAiICVzIiwgc3RyKTsKLQotCS8qIHNjc2lMdVJldmlzaW9uSWQgKi8KLQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKQotCQlzdHJbal0gPSBJU1BSSU5UKERFVl9UMTBfV1dOKGRldiktPnJldmlzaW9uW2pdKSA/Ci0JCQlERVZfVDEwX1dXTihkZXYpLT5yZXZpc2lvbltqXSA6IDB4MjA7Ci0Jc3RyWzRdID0gMDsKLQlzZXFfcHJpbnRmKHNlcSwgIiAlcyIsIHN0cik7Ci0KLQlzZXFfcHJpbnRmKHNlcSwgIiAldSAlcyAlcyAlbGx1ICV1ICV1ICV1ICV1ICV1ICV1XG4iLAotCQkvKiBzY3NpTHVQZXJpcGhlcmFsVHlwZSAqLwotCQkgICBUUkFOU1BPUlQoZGV2KS0+Z2V0X2RldmljZV90eXBlKGRldiksCi0JCSAgIChkZXYtPmRldl9zdGF0dXMgPT0gVFJBTlNQT1JUX0RFVklDRV9BQ1RJVkFURUQpID8KLQkJImF2YWlsYWJsZSIgOiAibm90YXZhaWxhYmxlIiwgLyogc2NzaUx1U3RhdHVzICovCi0JCSJleHBvc2VkIiwgCS8qIHNjc2lMdVN0YXRlICovCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5udW1fY21kcywKLQkJLyogc2NzaUx1UmVhZE1lZ2FCeXRlcyAqLwotCQkodTMyKShkZXYtPnJlYWRfYnl0ZXMgPj4gMjApLAotCQkvKiBzY3NpTHVXcml0dGVuTWVnYUJ5dGVzICovCi0JCSh1MzIpKGRldi0+d3JpdGVfYnl0ZXMgPj4gMjApLAotCQlkZXYtPm51bV9yZXNldHMsIC8qIHNjc2lMdUluUmVzZXRzICovCi0JCTAsIC8qIHNjc2lMdU91dFRhc2tTZXRGdWxsU3RhdHVzICovCi0JCTAsIC8qIHNjc2lMdUhTSW5Db21tYW5kcyAqLwotCQkodTMyKSgoKHUzMilkZXYtPmNyZWF0aW9uX3RpbWUgLSBJTklUSUFMX0pJRkZJRVMpICoKLQkJCQkJCQkxMDAgLyBIWikpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9sdV9zZXFfb3BzID0gewotCS5zdGFydCAgPSBzY3NpX2x1X3NlcV9zdGFydCwKLQkubmV4dCAgID0gc2NzaV9sdV9zZXFfbmV4dCwKLQkuc3RvcCAgID0gc2NzaV9sdV9zZXFfc3RvcCwKLQkuc2hvdyAgID0gc2NzaV9sdV9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX2x1X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV9sdV9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NzaV9sdV9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV9sdV9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBSZW1vdmUgcHJvYyBmcyBlbnRyaWVzCi0gKi8KLXZvaWQgcmVtb3ZlX3Njc2lfdGFyZ2V0X21pYih2b2lkKQotewotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9pbnN0IiwgTlVMTCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2RldiIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9wb3J0IiwgTlVMTCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX3RyYW5zcG9ydCIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV90Z3RfZGV2IiwgTlVMTCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX3RndF9wb3J0IiwgTlVMTCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2F1dGhfaW50ciIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9hdHRfaW50cl9wb3J0IiwgTlVMTCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2x1IiwgTlVMTCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYiIsIE5VTEwpOwotfQotCi0vKgotICogQ3JlYXRlIHByb2MgZnMgZW50cmllcyBmb3IgdGhlIG1pYiB0YWJsZXMKLSAqLwotaW50IGluaXRfc2NzaV90YXJnZXRfbWliKHZvaWQpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkaXJfZW50cnk7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzY3NpX2luc3RfZW50cnk7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzY3NpX2Rldl9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfcG9ydF9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfdHJhbnNwb3J0X2VudHJ5OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2NzaV90Z3RfZGV2X2VudHJ5OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2NzaV90Z3RfcG9ydF9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfYXV0aF9pbnRyX2VudHJ5OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2NzaV9hdHRfaW50cl9wb3J0X2VudHJ5OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2NzaV9sdV9lbnRyeTsKLQotCWRpcl9lbnRyeSA9IHByb2NfbWtkaXIoInNjc2lfdGFyZ2V0L21pYiIsIE5VTEwpOwotCWlmICghKGRpcl9lbnRyeSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwcm9jX21rZGlyKCkgZmFpbGVkLlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlzY3NpX2luc3RfZW50cnkgPQotCQljcmVhdGVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfaW5zdCIsIDAsIE5VTEwpOwotCWlmIChzY3NpX2luc3RfZW50cnkpCi0JCXNjc2lfaW5zdF9lbnRyeS0+cHJvY19mb3BzID0gJnNjc2lfaW5zdF9zZXFfZm9wczsKLQllbHNlCi0JCWdvdG8gZXJyb3I7Ci0KLQlzY3NpX2Rldl9lbnRyeSA9Ci0JCWNyZWF0ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9kZXYiLCAwLCBOVUxMKTsKLQlpZiAoc2NzaV9kZXZfZW50cnkpCi0JCXNjc2lfZGV2X2VudHJ5LT5wcm9jX2ZvcHMgPSAmc2NzaV9kZXZfc2VxX2ZvcHM7Ci0JZWxzZQotCQlnb3RvIGVycm9yOwotCi0Jc2NzaV9wb3J0X2VudHJ5ID0KLQkJY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX3BvcnQiLCAwLCBOVUxMKTsKLQlpZiAoc2NzaV9wb3J0X2VudHJ5KQotCQlzY3NpX3BvcnRfZW50cnktPnByb2NfZm9wcyA9ICZzY3NpX3BvcnRfc2VxX2ZvcHM7Ci0JZWxzZQotCQlnb3RvIGVycm9yOwotCi0Jc2NzaV90cmFuc3BvcnRfZW50cnkgPQotCQljcmVhdGVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfdHJhbnNwb3J0IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfdHJhbnNwb3J0X2VudHJ5KQotCQlzY3NpX3RyYW5zcG9ydF9lbnRyeS0+cHJvY19mb3BzID0gJnNjc2lfdHJhbnNwb3J0X3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXNjc2lfdGd0X2Rldl9lbnRyeSA9Ci0JCWNyZWF0ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV90Z3RfZGV2IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfdGd0X2Rldl9lbnRyeSkKLQkJc2NzaV90Z3RfZGV2X2VudHJ5LT5wcm9jX2ZvcHMgPSAmc2NzaV90Z3RfZGV2X3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXNjc2lfdGd0X3BvcnRfZW50cnkgPQotCQljcmVhdGVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfdGd0X3BvcnQiLCAwLCBOVUxMKTsKLQlpZiAoc2NzaV90Z3RfcG9ydF9lbnRyeSkKLQkJc2NzaV90Z3RfcG9ydF9lbnRyeS0+cHJvY19mb3BzID0gJnNjc2lfdGd0X3BvcnRfc2VxX2ZvcHM7Ci0JZWxzZQotCQlnb3RvIGVycm9yOwotCi0Jc2NzaV9hdXRoX2ludHJfZW50cnkgPQotCQljcmVhdGVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfYXV0aF9pbnRyIiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfYXV0aF9pbnRyX2VudHJ5KQotCQlzY3NpX2F1dGhfaW50cl9lbnRyeS0+cHJvY19mb3BzID0gJnNjc2lfYXV0aF9pbnRyX3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXNjc2lfYXR0X2ludHJfcG9ydF9lbnRyeSA9Ci0JICAgICAgY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2F0dF9pbnRyX3BvcnQiLCAwLCBOVUxMKTsKLQlpZiAoc2NzaV9hdHRfaW50cl9wb3J0X2VudHJ5KQotCQlzY3NpX2F0dF9pbnRyX3BvcnRfZW50cnktPnByb2NfZm9wcyA9Ci0JCQkJJnNjc2lfYXR0X2ludHJfcG9ydF9zZXFfZm9wczsKLQllbHNlCi0JCWdvdG8gZXJyb3I7Ci0KLQlzY3NpX2x1X2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2x1IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfbHVfZW50cnkpCi0JCXNjc2lfbHVfZW50cnktPnByb2NfZm9wcyA9ICZzY3NpX2x1X3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXJldHVybiAwOwotCi1lcnJvcjoKLQlwcmludGsoS0VSTl9FUlIgImNyZWF0ZV9wcm9jX2VudHJ5KCkgZmFpbGVkLlxuIik7Ci0JcmVtb3ZlX3Njc2lfdGFyZ2V0X21pYigpOwotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgdGhlIGluZGV4IHRhYmxlIGZvciBhbGxvY2F0aW5nIHVuaXF1ZSByb3cgaW5kZXhlcyB0byB2YXJpb3VzIG1pYgotICogdGFibGVzCi0gKi8KLXZvaWQgaW5pdF9zY3NpX2luZGV4X3RhYmxlKHZvaWQpCi17Ci0JbWVtc2V0KCZzY3NpX2luZGV4X3RhYmxlLCAwLCBzaXplb2Yoc3RydWN0IHNjc2lfaW5kZXhfdGFibGUpKTsKLQlzcGluX2xvY2tfaW5pdCgmc2NzaV9pbmRleF90YWJsZS5sb2NrKTsKLX0KLQotLyoKLSAqIEFsbG9jYXRlIGEgbmV3IHJvdyBpbmRleCBmb3IgdGhlIGVudHJ5IHR5cGUgc3BlY2lmaWVkCi0gKi8KLXUzMiBzY3NpX2dldF9uZXdfaW5kZXgoc2NzaV9pbmRleF90IHR5cGUpCi17Ci0JdTMyIG5ld19pbmRleDsKLQotCWlmICgodHlwZSA8IDApIHx8ICh0eXBlID49IFNDU0lfSU5ERVhfVFlQRV9NQVgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBpbmRleCB0eXBlICVkXG4iLCB0eXBlKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXNwaW5fbG9jaygmc2NzaV9pbmRleF90YWJsZS5sb2NrKTsKLQluZXdfaW5kZXggPSArK3Njc2lfaW5kZXhfdGFibGUuc2NzaV9taWJfaW5kZXhbdHlwZV07Ci0JaWYgKG5ld19pbmRleCA9PSAwKQotCQluZXdfaW5kZXggPSArK3Njc2lfaW5kZXhfdGFibGUuc2NzaV9taWJfaW5kZXhbdHlwZV07Ci0Jc3Bpbl91bmxvY2soJnNjc2lfaW5kZXhfdGFibGUubG9jayk7Ci0KLQlyZXR1cm4gbmV3X2luZGV4OwotfQotRVhQT1JUX1NZTUJPTChzY3NpX2dldF9uZXdfaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfbWliLmggYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9taWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc3MjA0Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9taWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSNpZm5kZWYgVEFSR0VUX0NPUkVfTUlCX0gKLSNkZWZpbmUgVEFSR0VUX0NPUkVfTUlCX0gKLQotdHlwZWRlZiBlbnVtIHsKLQlTQ1NJX0lOU1RfSU5ERVgsCi0JU0NTSV9ERVZJQ0VfSU5ERVgsCi0JU0NTSV9BVVRIX0lOVFJfSU5ERVgsCi0JU0NTSV9JTkRFWF9UWVBFX01BWAotfSBzY3NpX2luZGV4X3Q7Ci0KLXN0cnVjdCBzY3NpX2luZGV4X3RhYmxlIHsKLQlzcGlubG9ja190CWxvY2s7Ci0JdTMyIAkJc2NzaV9taWJfaW5kZXhbU0NTSV9JTkRFWF9UWVBFX01BWF07Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKLQotLyogU0NTSSBQb3J0IHN0YXRzICovCi1zdHJ1Y3Qgc2NzaV9wb3J0X3N0YXRzIHsKLQl1NjQJY21kX3BkdXM7Ci0JdTY0CXR4X2RhdGFfb2N0ZXRzOwotCXU2NAlyeF9kYXRhX29jdGV0czsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwotCi1leHRlcm4gaW50IGluaXRfc2NzaV90YXJnZXRfbWliKHZvaWQpOwotZXh0ZXJuIHZvaWQgcmVtb3ZlX3Njc2lfdGFyZ2V0X21pYih2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfc2NzaV9pbmRleF90YWJsZSh2b2lkKTsKLWV4dGVybiB1MzIgc2NzaV9nZXRfbmV3X2luZGV4KHNjc2lfaW5kZXhfdCk7Ci0KLSNlbmRpZiAgIC8qKiogVEFSR0VUX0NPUkVfTUlCX0ggKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHNjc2kuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3BzY3NpLmMKaW5kZXggNzQyZDI0Ni4uZjJhMDg0NzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wc2NzaS5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3BzY3NpLmMKQEAgLTQ2Miw4ICs0NjIsOCBAQAogCSAqLwogCWJkID0gYmxrZGV2X2dldF9ieV9wYXRoKHNlX2Rldi0+c2VfZGV2X3VkZXZfcGF0aCwKIAkJCQlGTU9ERV9XUklURXxGTU9ERV9SRUFEfEZNT0RFX0VYQ0wsIHBkdik7Ci0JaWYgKCEoYmQpKSB7Ci0JCXByaW50aygicFNDU0k6IGJsa2Rldl9nZXRfYnlfcGF0aCgpIGZhaWxlZFxuIik7CisJaWYgKElTX0VSUihiZCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwU0NTSTogYmxrZGV2X2dldF9ieV9wYXRoKCkgZmFpbGVkXG4iKTsKIAkJc2NzaV9kZXZpY2VfcHV0KHNkKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHBnLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cGcuYwppbmRleCBhYmZhODFhLi5jMjZmNjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cGcuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cGcuYwpAQCAtMjc1LDcgKzI3NSw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJmFjbC0+ZGV2aWNlX2xpc3RfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFjbC0+bmFjbF9zZXNzX2xvY2spOwogCWF0b21pY19zZXQoJmFjbC0+YWNsX3ByX3JlZl9jb3VudCwgMCk7Ci0JYXRvbWljX3NldCgmYWNsLT5taWJfcmVmX2NvdW50LCAwKTsKIAlhY2wtPnF1ZXVlX2RlcHRoID0gVFBHX1RGTyh0cGcpLT50cGdfZ2V0X2RlZmF1bHRfZGVwdGgodHBnKTsKIAlzbnByaW50ZihhY2wtPmluaXRpYXRvcm5hbWUsIFRSQU5TUE9SVF9JUU5fTEVOLCAiJXMiLCBpbml0aWF0b3JuYW1lKTsKIAlhY2wtPnNlX3RwZyA9IHRwZzsKQEAgLTMxOCwxMiArMzE3LDYgQEAKIAkJY3B1X3JlbGF4KCk7CiB9CiAKLXZvaWQgY29yZV90cGdfd2FpdF9mb3JfbWliX3JlZihzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKm5hY2wpCi17Ci0Jd2hpbGUgKGF0b21pY19yZWFkKCZuYWNsLT5taWJfcmVmX2NvdW50KSAhPSAwKQotCQljcHVfcmVsYXgoKTsKLX0KLQogdm9pZCBjb3JlX3RwZ19jbGVhcl9vYmplY3RfbHVucyhzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICp0cGcpCiB7CiAJaW50IGksIHJldDsKQEAgLTQ4MCw3ICs0NzMsNiBAQAogCXNwaW5fdW5sb2NrX2JoKCZ0cGctPnNlc3Npb25fbG9jayk7CiAKIAljb3JlX3RwZ193YWl0X2Zvcl9uYWNsX3ByX3JlZihhY2wpOwotCWNvcmVfdHBnX3dhaXRfZm9yX21pYl9yZWYoYWNsKTsKIAljb3JlX2NsZWFyX2luaXRpYXRvcl9ub2RlX2Zyb21fdHBnKGFjbCwgdHBnKTsKIAljb3JlX2ZyZWVfZGV2aWNlX2xpc3RfZm9yX25vZGUoYWNsLCB0cGcpOwogCkBAIC03MDEsNiArNjkzLDggQEAKIAogaW50IGNvcmVfdHBnX2RlcmVnaXN0ZXIoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKQogeworCXN0cnVjdCBzZV9ub2RlX2FjbCAqbmFjbCwgKm5hY2xfdG1wOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiVEFSR0VUX0NPUkVbJXNdOiBEZWFsbG9jYXRpbmcgJXMgc3RydWN0IHNlX3BvcnRhbF9ncm91cCIKIAkJIiBmb3IgZW5kcG9pbnQ6ICVzIFBvcnRhbCBUYWcgJXVcbiIsCiAJCShzZV90cGctPnNlX3RwZ190eXBlID09IFRSQU5TUE9SVF9UUEdfVFlQRV9OT1JNQUwpID8KQEAgLTcxNCw2ICs3MDgsMjUgQEAKIAogCXdoaWxlIChhdG9taWNfcmVhZCgmc2VfdHBnLT50cGdfcHJfcmVmX2NvdW50KSAhPSAwKQogCQljcHVfcmVsYXgoKTsKKwkvKgorCSAqIFJlbGVhc2UgYW55IHJlbWFpbmluZyBkZW1vLW1vZGUgZ2VuZXJhdGVkIHNlX25vZGVfYWNsIHRoYXQgaGF2ZQorCSAqIG5vdCBiZWVuIHJlbGVhc2VkIGJlY2F1c2Ugb2YgVEZPLT50cGdfY2hlY2tfZGVtb19tb2RlX2NhY2hlKCkgPT0gMQorCSAqIGluIHRyYW5zcG9ydF9kZXJlZ2lzdGVyX3Nlc3Npb24oKS4KKwkgKi8KKwlzcGluX2xvY2tfYmgoJnNlX3RwZy0+YWNsX25vZGVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5hY2wsIG5hY2xfdG1wLCAmc2VfdHBnLT5hY2xfbm9kZV9saXN0LAorCQkJYWNsX2xpc3QpIHsKKwkJbGlzdF9kZWwoJm5hY2wtPmFjbF9saXN0KTsKKwkJc2VfdHBnLT5udW1fbm9kZV9hY2xzLS07CisJCXNwaW5fdW5sb2NrX2JoKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOworCisJCWNvcmVfdHBnX3dhaXRfZm9yX25hY2xfcHJfcmVmKG5hY2wpOworCQljb3JlX2ZyZWVfZGV2aWNlX2xpc3RfZm9yX25vZGUobmFjbCwgc2VfdHBnKTsKKwkJVFBHX1RGTyhzZV90cGcpLT50cGdfcmVsZWFzZV9mYWJyaWNfYWNsKHNlX3RwZywgbmFjbCk7CisKKwkJc3Bpbl9sb2NrX2JoKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOworCX0KKwlzcGluX3VubG9ja19iaCgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAogCWlmIChzZV90cGctPnNlX3RwZ190eXBlID09IFRSQU5TUE9SVF9UUEdfVFlQRV9OT1JNQUwpCiAJCWNvcmVfdHBnX3JlbGVhc2VfdmlydHVhbF9sdW4wKHNlX3RwZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCmluZGV4IDI4YjYyOTJmZi4uMjM2ZTIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMKQEAgLTM3OSw2ICszNzksNDAgQEAKIAlzZV9nbG9iYWwgPSBOVUxMOwogfQogCisvKiBTQ1NJIHN0YXRpc3RpY3MgdGFibGUgaW5kZXggKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9pbmRleF90YWJsZSBzY3NpX2luZGV4X3RhYmxlOworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgaW5kZXggdGFibGUgZm9yIGFsbG9jYXRpbmcgdW5pcXVlIHJvdyBpbmRleGVzIHRvIHZhcmlvdXMgbWliCisgKiB0YWJsZXMuCisgKi8KK3ZvaWQgaW5pdF9zY3NpX2luZGV4X3RhYmxlKHZvaWQpCit7CisJbWVtc2V0KCZzY3NpX2luZGV4X3RhYmxlLCAwLCBzaXplb2Yoc3RydWN0IHNjc2lfaW5kZXhfdGFibGUpKTsKKwlzcGluX2xvY2tfaW5pdCgmc2NzaV9pbmRleF90YWJsZS5sb2NrKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IHJvdyBpbmRleCBmb3IgdGhlIGVudHJ5IHR5cGUgc3BlY2lmaWVkCisgKi8KK3UzMiBzY3NpX2dldF9uZXdfaW5kZXgoc2NzaV9pbmRleF90IHR5cGUpCit7CisJdTMyIG5ld19pbmRleDsKKworCWlmICgodHlwZSA8IDApIHx8ICh0eXBlID49IFNDU0lfSU5ERVhfVFlQRV9NQVgpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBpbmRleCB0eXBlICVkXG4iLCB0eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrKCZzY3NpX2luZGV4X3RhYmxlLmxvY2spOworCW5ld19pbmRleCA9ICsrc2NzaV9pbmRleF90YWJsZS5zY3NpX21pYl9pbmRleFt0eXBlXTsKKwlpZiAobmV3X2luZGV4ID09IDApCisJCW5ld19pbmRleCA9ICsrc2NzaV9pbmRleF90YWJsZS5zY3NpX21pYl9pbmRleFt0eXBlXTsKKwlzcGluX3VubG9jaygmc2NzaV9pbmRleF90YWJsZS5sb2NrKTsKKworCXJldHVybiBuZXdfaW5kZXg7Cit9CisKIHZvaWQgdHJhbnNwb3J0X2luaXRfcXVldWVfb2JqKHN0cnVjdCBzZV9xdWV1ZV9vYmogKnFvYmopCiB7CiAJYXRvbWljX3NldCgmcW9iai0+cXVldWVfY250LCAwKTsKQEAgLTQzNyw3ICs0NzEsNiBAQAogCX0KIAlJTklUX0xJU1RfSEVBRCgmc2Vfc2Vzcy0+c2Vzc19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmc2Vfc2Vzcy0+c2Vzc19hY2xfbGlzdCk7Ci0JYXRvbWljX3NldCgmc2Vfc2Vzcy0+bWliX3JlZl9jb3VudCwgMCk7CiAKIAlyZXR1cm4gc2Vfc2VzczsKIH0KQEAgLTU0NiwxMiArNTc5LDYgQEAKIAkJdHJhbnNwb3J0X2ZyZWVfc2Vzc2lvbihzZV9zZXNzKTsKIAkJcmV0dXJuOwogCX0KLQkvKgotCSAqIFdhaXQgZm9yIHBvc3NpYmxlIHJlZmVyZW5jZSBpbiBkcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9taWIuYzoKLQkgKiBzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX3Nob3coKQotCSAqLwotCXdoaWxlIChhdG9taWNfcmVhZCgmc2Vfc2Vzcy0+bWliX3JlZl9jb3VudCkgIT0gMCkKLQkJY3B1X3JlbGF4KCk7CiAKIAlzcGluX2xvY2tfYmgoJnNlX3RwZy0+c2Vzc2lvbl9sb2NrKTsKIAlsaXN0X2RlbCgmc2Vfc2Vzcy0+c2Vzc19saXN0KTsKQEAgLTU3NCw3ICs2MDEsNiBAQAogCQkJCXNwaW5fdW5sb2NrX2JoKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOwogCiAJCQkJY29yZV90cGdfd2FpdF9mb3JfbmFjbF9wcl9yZWYoc2VfbmFjbCk7Ci0JCQkJY29yZV90cGdfd2FpdF9mb3JfbWliX3JlZihzZV9uYWNsKTsKIAkJCQljb3JlX2ZyZWVfZGV2aWNlX2xpc3RfZm9yX25vZGUoc2VfbmFjbCwgc2VfdHBnKTsKIAkJCQlUUEdfVEZPKHNlX3RwZyktPnRwZ19yZWxlYXNlX2ZhYnJpY19hY2woc2VfdHBnLAogCQkJCQkJc2VfbmFjbCk7CkBAIC00ODI3LDYgKzQ4NTMsOCBAQAogCiAJCXJldHVybiByZXQ7CiAJfQorCisJQlVHX09OKGxpc3RfZW1wdHkoc2VfbWVtX2xpc3QpKTsKIAkvKgogCSAqIFRoaXMgaXMgdGhlIG5vcm1hbCBwYXRoIGZvciBhbGwgbm9ybWFsIG5vbiBCSURJIGFuZCBCSURJLUNPTU1BTkQKIAkgKiBXUklURSBwYXlsb2Fkcy4uICBJZiB3ZSBuZWVkIHRvIGRvIEJJREkgUkVBRCBwYXNzdGhyb3VnaCBmb3IKQEAgLTUwMDgsNyArNTAzNiw5IEBACiAJCXN0cnVjdCBzZV9tZW0gKnNlX21lbSA9IE5VTEwsICpzZV9tZW1fbG91dCA9IE5VTEw7CiAJCXUzMiBzZV9tZW1fY250ID0gMCwgdGFza19vZmZzZXQgPSAwOwogCi0JCUJVR19PTihsaXN0X2VtcHR5KGNtZC0+dF90YXNrLT50X21lbV9saXN0KSk7CisJCWlmICghbGlzdF9lbXB0eShUX1RBU0soY21kKS0+dF9tZW1fbGlzdCkpCisJCQlzZV9tZW0gPSBsaXN0X2VudHJ5KFRfVEFTSyhjbWQpLT50X21lbV9saXN0LT5uZXh0LAorCQkJCQlzdHJ1Y3Qgc2VfbWVtLCBzZV9saXN0KTsKIAogCQlyZXQgPSB0cmFuc3BvcnRfZG9fc2VfbWVtX21hcChkZXYsIHRhc2ssCiAJCQkJY21kLT50X3Rhc2stPnRfbWVtX2xpc3QsIE5VTEwsIHNlX21lbSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnIGIvZHJpdmVycy90aGVybWFsL0tjb25maWcKaW5kZXggZjdhNWRiYS4uYmY3YzY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL0tjb25maWcKKysrIGIvZHJpdmVycy90aGVybWFsL0tjb25maWcKQEAgLTQsNyArNCw2IEBACiAKIG1lbnVjb25maWcgVEhFUk1BTAogCXRyaXN0YXRlICJHZW5lcmljIFRoZXJtYWwgc3lzZnMgZHJpdmVyIgotCWRlcGVuZHMgb24gTkVUCiAJaGVscAogCSAgR2VuZXJpYyBUaGVybWFsIFN5c2ZzIGRyaXZlciBvZmZlcnMgYSBnZW5lcmljIG1lY2hhbmlzbSBmb3IKIAkgIHRoZXJtYWwgbWFuYWdlbWVudC4gVXN1YWxseSBpdCdzIG1hZGUgdXAgb2Ygb25lIG9yIG1vcmUgdGhlcm1hbApkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYwppbmRleCA3ZDBlNjNjLi43MTNiN2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYwpAQCAtNjIsMjAgKzYyLDYgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCB0aGVybWFsX2V2ZW50X3NlcW51bTsKIAotc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSB0aGVybWFsX2V2ZW50X2dlbmxfZmFtaWx5ID0gewotCS5pZCA9IEdFTkxfSURfR0VORVJBVEUsCi0JLm5hbWUgPSBUSEVSTUFMX0dFTkxfRkFNSUxZX05BTUUsCi0JLnZlcnNpb24gPSBUSEVSTUFMX0dFTkxfVkVSU0lPTiwKLQkubWF4YXR0ciA9IFRIRVJNQUxfR0VOTF9BVFRSX01BWCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgdGhlcm1hbF9ldmVudF9tY2dycCA9IHsKLQkubmFtZSA9IFRIRVJNQUxfR0VOTF9NQ0FTVF9HUk9VUF9OQU1FLAotfTsKLQotc3RhdGljIGludCBnZW5ldGxpbmtfaW5pdCh2b2lkKTsKLXN0YXRpYyB2b2lkIGdlbmV0bGlua19leGl0KHZvaWQpOwotCiBzdGF0aWMgaW50IGdldF9pZHIoc3RydWN0IGlkciAqaWRyLCBzdHJ1Y3QgbXV0ZXggKmxvY2ssIGludCAqaWQpCiB7CiAJaW50IGVycjsKQEAgLTEyMjUsNiArMTIxMSwxOCBAQAogCiBFWFBPUlRfU1lNQk9MKHRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3Rlcik7CiAKKyNpZmRlZiBDT05GSUdfTkVUCitzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IHRoZXJtYWxfZXZlbnRfZ2VubF9mYW1pbHkgPSB7CisJLmlkID0gR0VOTF9JRF9HRU5FUkFURSwKKwkubmFtZSA9IFRIRVJNQUxfR0VOTF9GQU1JTFlfTkFNRSwKKwkudmVyc2lvbiA9IFRIRVJNQUxfR0VOTF9WRVJTSU9OLAorCS5tYXhhdHRyID0gVEhFUk1BTF9HRU5MX0FUVFJfTUFYLAorfTsKKworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCB0aGVybWFsX2V2ZW50X21jZ3JwID0geworCS5uYW1lID0gVEhFUk1BTF9HRU5MX01DQVNUX0dST1VQX05BTUUsCit9OworCiBpbnQgZ2VuZXJhdGVfbmV0bGlua19ldmVudCh1MzIgb3JpZywgZW51bSBldmVudHMgZXZlbnQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTEzMDEsNiArMTI5OSwxNSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyB2b2lkIGdlbmV0bGlua19leGl0KHZvaWQpCit7CisJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmdGhlcm1hbF9ldmVudF9nZW5sX2ZhbWlseSk7Cit9CisjZWxzZSAvKiAhQ09ORklHX05FVCAqLworc3RhdGljIGlubGluZSBpbnQgZ2VuZXRsaW5rX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGdlbmV0bGlua19leGl0KHZvaWQpIHt9CisjZW5kaWYgLyogIUNPTkZJR19ORVQgKi8KKwogc3RhdGljIGludCBfX2luaXQgdGhlcm1hbF9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CkBAIC0xMzE2LDExICsxMzIzLDYgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBnZW5ldGxpbmtfZXhpdCh2b2lkKQotewotCWdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoJnRoZXJtYWxfZXZlbnRfZ2VubF9mYW1pbHkpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgdGhlcm1hbF9leGl0KHZvaWQpCiB7CiAJY2xhc3NfdW5yZWdpc3RlcigmdGhlcm1hbF9jbGFzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9odmMvTWFrZWZpbGUgYi9kcml2ZXJzL3R0eS9odmMvTWFrZWZpbGUKaW5kZXggZTZiZWQ1Zi4uZDc5ZTdlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvaHZjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdHR5L2h2Yy9NYWtlZmlsZQpAQCAtMTAsNCArMTAsMyBAQAogb2JqLSQoQ09ORklHX0hWQ19JVUNWKQkJKz0gaHZjX2l1Y3Yubwogb2JqLSQoQ09ORklHX0hWQ19VREJHKQkJKz0gaHZjX3VkYmcubwogb2JqLSQoQ09ORklHX0hWQ1MpCQkrPSBodmNzLm8KLW9iai0kKENPTkZJR19WSVJUSU9fQ09OU09MRSkJKz0gdmlydGlvX2NvbnNvbGUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvbl9nc20uYyBiL2RyaXZlcnMvdHR5L25fZ3NtLmMKaW5kZXggNDRiODQxMi4uYWEyZTVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl9nc20uYworKysgYi9kcml2ZXJzL3R0eS9uX2dzbS5jCkBAIC0yNDE0LDYgKzI0MTQsNyBAQAogCiAJZ3NtLT5pbml0aWF0b3IgPSBjLT5pbml0aWF0b3I7CiAJZ3NtLT5tcnUgPSBjLT5tcnU7CisJZ3NtLT5tdHUgPSBjLT5tdHU7CiAJZ3NtLT5lbmNvZGluZyA9IGMtPmVuY2Fwc3VsYXRpb247CiAJZ3NtLT5hZGFwdGlvbiA9IGMtPmFkYXB0aW9uOwogCWdzbS0+bjIgPSBjLT5uMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25faGRsYy5jIGIvZHJpdmVycy90dHkvbl9oZGxjLmMKaW5kZXggNDdkMzIyOC4uNTJmYzBjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl9oZGxjLmMKKysrIGIvZHJpdmVycy90dHkvbl9oZGxjLmMKQEAgLTU4MSw4ICs1ODEsOSBAQAogCQkJICAgX191OCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5yKQogewogCXN0cnVjdCBuX2hkbGMgKm5faGRsYyA9IHR0eTJuX2hkbGModHR5KTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCXN0cnVjdCBuX2hkbGNfYnVmICpyYnVmOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCiAJaWYgKGRlYnVnbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykJCiAJCXByaW50aygiJXMoJWQpbl9oZGxjX3R0eV9yZWFkKCkgY2FsbGVkXG4iLF9fRklMRV9fLF9fTElORV9fKTsKQEAgLTU5OCw1NyArNTk5LDU1IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXR0eV9sb2NrKCk7CisJYWRkX3dhaXRfcXVldWUoJnR0eS0+cmVhZF93YWl0LCAmd2FpdCk7CiAKIAlmb3IgKDs7KSB7CiAJCWlmICh0ZXN0X2JpdChUVFlfT1RIRVJfQ0xPU0VELCAmdHR5LT5mbGFncykpIHsKLQkJCXR0eV91bmxvY2soKTsKLQkJCXJldHVybiAtRUlPOworCQkJcmV0ID0gLUVJTzsKKwkJCWJyZWFrOwogCQl9CisJCWlmICh0dHlfaHVuZ191cF9wKGZpbGUpKQorCQkJYnJlYWs7CiAKLQkJbl9oZGxjID0gdHR5Mm5faGRsYyAodHR5KTsKLQkJaWYgKCFuX2hkbGMgfHwgbl9oZGxjLT5tYWdpYyAhPSBIRExDX01BR0lDIHx8Ci0JCQkgdHR5ICE9IG5faGRsYy0+dHR5KSB7Ci0JCQl0dHlfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJCXJidWYgPSBuX2hkbGNfYnVmX2dldCgmbl9oZGxjLT5yeF9idWZfbGlzdCk7Ci0JCWlmIChyYnVmKQorCQlpZiAocmJ1ZikgeworCQkJaWYgKHJidWYtPmNvdW50ID4gbnIpIHsKKwkJCQkvKiB0b28gbGFyZ2UgZm9yIGNhbGxlcidzIGJ1ZmZlciAqLworCQkJCXJldCA9IC1FT1ZFUkZMT1c7CisJCQl9IGVsc2UgeworCQkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCByYnVmLT5idWYsIHJidWYtPmNvdW50KSkKKwkJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQllbHNlCisJCQkJCXJldCA9IHJidWYtPmNvdW50OworCQkJfQorCisJCQlpZiAobl9oZGxjLT5yeF9mcmVlX2J1Zl9saXN0LmNvdW50ID4KKwkJCSAgICBERUZBVUxUX1JYX0JVRl9DT1VOVCkKKwkJCQlrZnJlZShyYnVmKTsKKwkJCWVsc2UKKwkJCQluX2hkbGNfYnVmX3B1dCgmbl9oZGxjLT5yeF9mcmVlX2J1Zl9saXN0LCByYnVmKTsKIAkJCWJyZWFrOworCQl9CiAJCQkKIAkJLyogbm8gZGF0YSAqLwogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXR0eV91bmxvY2soKTsKLQkJCXJldHVybiAtRUFHQUlOOworCQkJcmV0ID0gLUVBR0FJTjsKKwkJCWJyZWFrOwogCQl9Ci0JCQkKLQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbiAoJnR0eS0+cmVhZF93YWl0KTsKKworCQlzY2hlZHVsZSgpOworCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJdHR5X3VubG9jaygpOwotCQkJcmV0dXJuIC1FSU5UUjsKKwkJCXJldCA9IC1FSU5UUjsKKwkJCWJyZWFrOwogCQl9CiAJfQotCQkKLQlpZiAocmJ1Zi0+Y291bnQgPiBucikKLQkJLyogZnJhbWUgdG9vIGxhcmdlIGZvciBjYWxsZXIncyBidWZmZXIgKGRpc2NhcmQgZnJhbWUpICovCi0JCXJldCA9IC1FT1ZFUkZMT1c7Ci0JZWxzZSB7Ci0JCS8qIENvcHkgdGhlIGRhdGEgdG8gdGhlIGNhbGxlcidzIGJ1ZmZlciAqLwotCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcmJ1Zi0+YnVmLCByYnVmLT5jb3VudCkpCi0JCQlyZXQgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyZXQgPSByYnVmLT5jb3VudDsKLQl9Ci0JCi0JLyogcmV0dXJuIEhETEMgYnVmZmVyIHRvIGZyZWUgbGlzdCB1bmxlc3MgdGhlIGZyZWUgbGlzdCAqLwotCS8qIGNvdW50IGhhcyBleGNlZWRlZCB0aGUgZGVmYXVsdCB2YWx1ZSwgaW4gd2hpY2ggY2FzZSB0aGUgKi8KLQkvKiBidWZmZXIgaXMgZnJlZWQgYmFjayB0byB0aGUgT1MgdG8gY29uc2VydmUgbWVtb3J5ICovCi0JaWYgKG5faGRsYy0+cnhfZnJlZV9idWZfbGlzdC5jb3VudCA+IERFRkFVTFRfUlhfQlVGX0NPVU5UKQotCQlrZnJlZShyYnVmKTsKLQllbHNlCQotCQluX2hkbGNfYnVmX3B1dCgmbl9oZGxjLT5yeF9mcmVlX2J1Zl9saXN0LHJidWYpOwotCXR0eV91bmxvY2soKTsKKworCXJlbW92ZV93YWl0X3F1ZXVlKCZ0dHktPnJlYWRfd2FpdCwgJndhaXQpOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwogCXJldHVybiByZXQ7CiAJCiB9CS8qIGVuZCBvZiBuX2hkbGNfdHR5X3JlYWQoKSAqLwpAQCAtNjkxLDE0ICs2OTAsMTUgQEAKIAkJY291bnQgPSBtYXhmcmFtZTsKIAl9CiAJCi0JdHR5X2xvY2soKTsKLQogCWFkZF93YWl0X3F1ZXVlKCZ0dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQotCS8qIEFsbG9jYXRlIHRyYW5zbWl0IGJ1ZmZlciAqLwotCS8qIHNsZWVwIHVudGlsIHRyYW5zbWl0IGJ1ZmZlciBhdmFpbGFibGUgKi8JCQotCXdoaWxlICghKHRidWYgPSBuX2hkbGNfYnVmX2dldCgmbl9oZGxjLT50eF9mcmVlX2J1Zl9saXN0KSkpIHsKKwkJdGJ1ZiA9IG5faGRsY19idWZfZ2V0KCZuX2hkbGMtPnR4X2ZyZWVfYnVmX2xpc3QpOworCQlpZiAodGJ1ZikKKwkJCWJyZWFrOworCiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewogCQkJZXJyb3IgPSAtRUFHQUlOOwogCQkJYnJlYWs7CkBAIC03MTksNyArNzE5LDcgQEAKIAkJfQogCX0KIAotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZ0dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKIAogCWlmICghZXJyb3IpIHsJCQpAQCAtNzMxLDcgKzczMSw3IEBACiAJCW5faGRsY19idWZfcHV0KCZuX2hkbGMtPnR4X2J1Zl9saXN0LHRidWYpOwogCQluX2hkbGNfc2VuZF9mcmFtZXMobl9oZGxjLHR0eSk7CiAJfQotCXR0eV91bmxvY2soKTsKKwogCXJldHVybiBlcnJvcjsKIAkKIH0JLyogZW5kIG9mIG5faGRsY190dHlfd3JpdGUoKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzY4MzI4c2VyaWFsLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvNjgzMjhzZXJpYWwuYwppbmRleCBiZTBlYmNlLi5kZTAxNjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvNjgzMjhzZXJpYWwuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvNjgzMjhzZXJpYWwuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAKIHN0YXRpYyB2b2lkIHJlY2VpdmVfY2hhcnMoc3RydWN0IG02OGtfc2VyaWFsICppbmZvLCB1bnNpZ25lZCBzaG9ydCByeCkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKIAltNjgzMjhfdWFydCAqdWFydCA9ICZ1YXJ0X2FkZHJbaW5mby0+bGluZV07CiAJdW5zaWduZWQgY2hhciBjaCwgZmxhZzsKIApAQCAtMzI5LDcgKzMyOSw3IEBACiAJCWdvdG8gY2xlYXJfYW5kX3JldHVybjsKIAl9CiAKLQlpZigoaW5mby0+eG1pdF9jbnQgPD0gMCkgfHwgaW5mby0+cG9ydC50dHktPnN0b3BwZWQpIHsKKwlpZigoaW5mby0+eG1pdF9jbnQgPD0gMCkgfHwgaW5mby0+dHR5LT5zdG9wcGVkKSB7CiAJCS8qIFRoYXQncyBwZWN1bGlhci4uLiBUWCBpbnRzIG9mZiAqLwogCQl1YXJ0LT51c3RjbnQgJj0gflVTVENOVF9UWF9JTlRSX01BU0s7CiAJCWdvdG8gY2xlYXJfYW5kX3JldHVybjsKQEAgLTM4Myw3ICszODMsNyBAQAogCXN0cnVjdCBtNjhrX3NlcmlhbAkqaW5mbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbTY4a19zZXJpYWwsIHRxdWV1ZSk7CiAJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKIAkKLQl0dHkgPSBpbmZvLT5wb3J0LnR0eTsKKwl0dHkgPSBpbmZvLT50dHk7CiAJaWYgKCF0dHkpCiAJCXJldHVybjsKICNpZiAwCkBAIC00MDcsNyArNDA3LDcgQEAKIAlzdHJ1Y3QgbTY4a19zZXJpYWwJKmluZm8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG02OGtfc2VyaWFsLCB0cXVldWVfaGFuZ3VwKTsKIAlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OwogCQotCXR0eSA9IGluZm8tPnBvcnQudHR5OworCXR0eSA9IGluZm8tPnR0eTsKIAlpZiAoIXR0eSkKIAkJcmV0dXJuOwogCkBAIC00NTEsOCArNDUxLDggQEAKIAl1YXJ0LT51c3RjbnQgPSBVU1RDTlRfVUVOIHwgVVNUQ05UX1JYRU4gfCBVU1RDTlRfUlhfSU5UUl9NQVNLOwogI2VuZGlmCiAKLQlpZiAoaW5mby0+cG9ydC50dHkpCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOworCWlmIChpbmZvLT50dHkpCisJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKIAlpbmZvLT54bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7CiAKIAkvKgpAQCAtNDg2LDggKzQ4Niw4IEBACiAJCWluZm8tPnhtaXRfYnVmID0gMDsKIAl9CiAKLQlpZiAoaW5mby0+cG9ydC50dHkpCi0JCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+dHR5KQorCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOwogCQogCWluZm8tPmZsYWdzICY9IH5TX0lOSVRJQUxJWkVEOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTU1Myw5ICs1NTMsOSBAQAogCXVuc2lnbmVkIGNmbGFnOwogCWludAlpOwogCi0JaWYgKCFpbmZvLT5wb3J0LnR0eSB8fCAhaW5mby0+cG9ydC50dHktPnRlcm1pb3MpCisJaWYgKCFpbmZvLT50dHkgfHwgIWluZm8tPnR0eS0+dGVybWlvcykKIAkJcmV0dXJuOwotCWNmbGFnID0gaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJY2ZsYWcgPSBpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAJaWYgKCEocG9ydCA9IGluZm8tPnBvcnQpKQogCQlyZXR1cm47CiAKQEAgLTk3MCw3ICs5NzAsNiBAQAogc3RhdGljIGludCByc19pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlpbnQgZXJyb3I7CiAJc3RydWN0IG02OGtfc2VyaWFsICogaW5mbyA9IChzdHJ1Y3QgbTY4a19zZXJpYWwgKil0dHktPmRyaXZlcl9kYXRhOwogCWludCByZXR2YWw7CiAKQEAgLTExMDQsNyArMTEwMyw3IEBACiAJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAJdHR5LT5jbG9zaW5nID0gMDsKIAlpbmZvLT5ldmVudCA9IDA7Ci0JaW5mby0+cG9ydC50dHkgPSBOVUxMOworCWluZm8tPnR0eSA9IE5VTEw7CiAjd2FybmluZyAiVGhpcyBpcyBub3QgYW5kIGhhcyBuZXZlciBiZWVuIHZhbGlkIHNvIGZpeCBpdCIJCiAjaWYgMAogCWlmICh0dHktPmxkaXNjLm51bSAhPSBsZGlzY3NbTl9UVFldLm51bSkgewpAQCAtMTE0Miw3ICsxMTQxLDcgQEAKIAlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+Y291bnQgPSAwOwogCWluZm8tPmZsYWdzICY9IH5TX05PUk1BTF9BQ1RJVkU7Ci0JaW5mby0+cG9ydC50dHkgPSBOVUxMOworCWluZm8tPnR0eSA9IE5VTEw7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOwogfQogCkBAIC0xMjYxLDcgKzEyNjAsNyBAQAogCiAJaW5mby0+Y291bnQrKzsKIAl0dHktPmRyaXZlcl9kYXRhID0gaW5mbzsKLQlpbmZvLT5wb3J0LnR0eSA9IHR0eTsKKwlpbmZvLT50dHkgPSB0dHk7CiAKIAkvKgogCSAqIFN0YXJ0IHVwIHNlcmlhbCBwb3J0CkBAIC0xMzM4LDcgKzEzMzcsNyBAQAogCSAgICBpbmZvID0gJm02OGtfc29mdFtpXTsKIAkgICAgaW5mby0+bWFnaWMgPSBTRVJJQUxfTUFHSUM7CiAJICAgIGluZm8tPnBvcnQgPSAoaW50KSAmdWFydF9hZGRyW2ldOwotCSAgICBpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CisJICAgIGluZm8tPnR0eSA9IE5VTEw7CiAJICAgIGluZm8tPmlycSA9IHVhcnRfaXJxc1tpXTsKIAkgICAgaW5mby0+Y3VzdG9tX2Rpdmlzb3IgPSAxNjsKIAkgICAgaW5mby0+Y2xvc2VfZGVsYXkgPSA1MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC82ODM2MHNlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzY4MzYwc2VyaWFsLmMKaW5kZXggODhiMTMzNS4uYmMyMWVlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzY4MzYwc2VyaWFsLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzY4MzYwc2VyaWFsLmMKQEAgLTI0MjgsNiArMjQyOCw3IEBACiAJLyogLnJlYWRfcHJvYyA9IHJzXzM2MF9yZWFkX3Byb2MsICovCiAJLnRpb2NtZ2V0ID0gcnNfMzYwX3Rpb2NtZ2V0LAogCS50aW9jbXNldCA9IHJzXzM2MF90aW9jbXNldCwKKwkuZ2V0X2ljb3VudCA9IHJzXzM2MF9nZXRfaWNvdW50LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcnNfMzYwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jCmluZGV4IGIyNWU2ZTQuLjM5NzVkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYwpAQCAtMjM2LDcgKzIzNiw4IEBACiAJCS5maWZvX3NpemUJPSAxMjgsCiAJCS50eF9sb2Fkc3oJPSAxMjgsCiAJCS5mY3IJCT0gVUFSVF9GQ1JfRU5BQkxFX0ZJRk8gfCBVQVJUX0ZDUl9SX1RSSUdfMTAsCi0JCS5mbGFncwkJPSBVQVJUX0NBUF9GSUZPIHwgVUFSVF9DQVBfRUZSIHwgVUFSVF9DQVBfU0xFRVAsCisJCS8qIFVBUlRfQ0FQX0VGUiBicmVha3MgYmlsbGlvbm9uIENGIGJsdWV0b290aCBjYXJkLiAqLworCQkuZmxhZ3MJCT0gVUFSVF9DQVBfRklGTyB8IFVBUlRfQ0FQX1NMRUVQLAogCX0sCiAJW1BPUlRfMTY2NTRdID0gewogCQkubmFtZQkJPSAiU1QxNjY1NCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCmluZGV4IGIxNjgyZDcuLjJiODMzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCkBAIC0xNTE4LDYgKzE1MTgsNyBAQAogY29uZmlnIFNFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQKIAl0cmlzdGF0ZSAiR1JMSUIgQVBCVUFSVCBzZXJpYWwgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IFNFUklBTF9DT1JFCiAJLS0taGVscC0tLQogCUFkZCBzdXBwb3J0IGZvciB0aGUgR1JMSUIgQVBCVUFSVCBzZXJpYWwgcG9ydC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2JmaW5fNXh4LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYmZpbl81eHguYwppbmRleCBlMzgxYjg5Li45YjFmZjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvYmZpbl81eHguYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYmZpbl81eHguYwpAQCAtMzcwLDEwICszNzAsOCBAQAogewogCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gZGV2X2lkOwogCi0Jc3Bpbl9sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOwogCXdoaWxlIChVQVJUX0dFVF9MU1IodWFydCkgJiBEUikKIAkJYmZpbl9zZXJpYWxfcnhfY2hhcnModWFydCk7Ci0Jc3Bpbl91bmxvY2soJnVhcnQtPnBvcnQubG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00OTAsOSArNDg4LDggQEAKIHsKIAlpbnQgeF9wb3MsIHBvczsKIAotCWRtYV9kaXNhYmxlX2lycSh1YXJ0LT50eF9kbWFfY2hhbm5lbCk7Ci0JZG1hX2Rpc2FibGVfaXJxKHVhcnQtPnJ4X2RtYV9jaGFubmVsKTsKLQlzcGluX2xvY2tfYmgoJnVhcnQtPnBvcnQubG9jayk7CisJZG1hX2Rpc2FibGVfaXJxX25vc3luYyh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CisJc3Bpbl9sb2NrX2JoKCZ1YXJ0LT5yeF9sb2NrKTsKIAogCS8qIDJEIERNQSBSWCBidWZmZXIgcmluZyBpcyB1c2VkLiBCZWNhdXNlIGN1cnJfeV9jb3VudCBhbmQKIAkgKiBjdXJyX3hfY291bnQgY2FuJ3QgYmUgcmVhZCBhcyBhbiBhdG9taWMgb3BlcmF0aW9uLApAQCAtNTIzLDggKzUyMCw3IEBACiAJCXVhcnQtPnJ4X2RtYV9idWYudGFpbCA9IHVhcnQtPnJ4X2RtYV9idWYuaGVhZDsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmdWFydC0+cG9ydC5sb2NrKTsKLQlkbWFfZW5hYmxlX2lycSh1YXJ0LT50eF9kbWFfY2hhbm5lbCk7CisJc3Bpbl91bmxvY2tfYmgoJnVhcnQtPnJ4X2xvY2spOwogCWRtYV9lbmFibGVfaXJxKHVhcnQtPnJ4X2RtYV9jaGFubmVsKTsKIAogCW1vZF90aW1lcigmKHVhcnQtPnJ4X2RtYV90aW1lciksIGppZmZpZXMgKyBETUFfUlhfRkxVU0hfSklGRklFUyk7CkBAIC01NzEsNyArNTY3LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBpcnFzdGF0OwogCWludCB4X3BvcywgcG9zOwogCi0Jc3Bpbl9sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOworCXNwaW5fbG9jaygmdWFydC0+cnhfbG9jayk7CiAJaXJxc3RhdCA9IGdldF9kbWFfY3Vycl9pcnFzdGF0KHVhcnQtPnJ4X2RtYV9jaGFubmVsKTsKIAljbGVhcl9kbWFfaXJxc3RhdCh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CiAKQEAgLTU4OSw3ICs1ODUsNyBAQAogCQl1YXJ0LT5yeF9kbWFfYnVmLnRhaWwgPSB1YXJ0LT5yeF9kbWFfYnVmLmhlYWQ7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnVhcnQtPnBvcnQubG9jayk7CisJc3Bpbl91bmxvY2soJnVhcnQtPnJ4X2xvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTMzMiw2ICsxMzI4LDcgQEAKIAkJfQogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQorCQlzcGluX2xvY2tfaW5pdCgmdWFydC0+cnhfbG9jayk7CiAJCXVhcnQtPnR4X2RvbmUJICAgID0gMTsKIAkJdWFydC0+dHhfY291bnQJICAgID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTAwLmMKaW5kZXggYmViMWFmYTIuLjdiOTUxYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTAwLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDAuYwpAQCAtNjAxLDcgKzYwMSw3IEBACiAJcy0+cnRzID0gMDsKIAogCXNwcmludGYoYiwgIm1heDMxMDAtJWQiLCBzLT5taW5vcik7Ci0Jcy0+d29ya3F1ZXVlID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKGIpOworCXMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKGIpOwogCWlmICghcy0+d29ya3F1ZXVlKSB7CiAJCWRldl93YXJuKCZzLT5zcGktPmRldiwgImNhbm5vdCBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTA3LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbWF4MzEwNy5jCmluZGV4IDkxMDg3MGUuLjc1MGI0ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTA3LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDcuYwpAQCAtODMzLDcgKzgzMyw3IEBACiAJc3RydWN0IG1heDMxMDdfcG9ydCAqcyA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgbWF4MzEwN19wb3J0LCBwb3J0KTsKIAogCS8qIEluaXRpYWxpemUgd29yayBxdWV1ZSAqLwotCXMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgibWF4MzEwNyIpOworCXMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKCJtYXgzMTA3Iik7CiAJaWYgKCFzLT53b3JrcXVldWUpIHsKIAkJZGV2X2Vycigmcy0+c3BpLT5kZXYsICJXb3JrcXVldWUgY3JlYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYjEyNTAtZHVhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zYjEyNTAtZHVhcnQuYwppbmRleCBhMmYyYjMyLi42MDJkOTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2IxMjUwLWR1YXJ0LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NiMTI1MC1kdWFydC5jCkBAIC04MjksNyArODI5LDcgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMX1NCMTI1MF9EVUFSVF9DT05TT0xFCiAvKgogICogU2VyaWFsIGNvbnNvbGUgc3R1ZmYuICBWZXJ5IGJhc2ljLCBwb2xsaW5nIGRyaXZlciBmb3IgZG9pbmcgc2VyaWFsCi0gKiBjb25zb2xlIG91dHB1dC4gIFRoZSBjb25zb2xlX3NlbSBpcyBoZWxkIGJ5IHRoZSBjYWxsZXIsIHNvIHdlCisgKiBjb25zb2xlIG91dHB1dC4gIFRoZSBjb25zb2xlX2xvY2sgaXMgaGVsZCBieSB0aGUgY2FsbGVyLCBzbyB3ZQogICogc2hvdWxkbid0IGJlIGludGVycnVwdGVkIGZvciBtb3JlIGNvbnNvbGUgYWN0aXZpdHkuCiAgKi8KIHN0YXRpYyB2b2lkIHNiZF9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQsIGludCBjaCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY3MuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY3MuYwppbmRleCA5Mzc2MGIyLi4xZWY0ZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NzLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jcy5jCkBAIC03MTIsNiArNzEyLDcgQEAKIAlQQ01DSUFfUEZDX0RFVklDRV9QUk9EX0lEMTIoMSwgIlhpcmNvbSIsICJDcmVkaXRDYXJkIEV0aGVybmV0K01vZGVtIElJIiwgMHgyZTNlZTg0NSwgMHhlY2E0MDFiZiksCiAJUENNQ0lBX1BGQ19ERVZJQ0VfTUFORl9DQVJEKDEsIDB4MDAzMiwgMHgwZTAxKSwKIAlQQ01DSUFfUEZDX0RFVklDRV9NQU5GX0NBUkQoMSwgMHgwMDMyLCAweDBhMDUpLAorCVBDTUNJQV9QRkNfREVWSUNFX01BTkZfQ0FSRCgxLCAweDAwMzIsIDB4MGIwNSksCiAJUENNQ0lBX1BGQ19ERVZJQ0VfTUFORl9DQVJEKDEsIDB4MDAzMiwgMHgxMTAxKSwKIAlQQ01DSUFfTUZDX0RFVklDRV9NQU5GX0NBUkQoMCwgMHgwMTA0LCAweDAwNzApLAogCVBDTUNJQV9NRkNfREVWSUNFX01BTkZfQ0FSRCgxLCAweDAxMDEsIDB4MDU2MiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zeXNycS5jIGIvZHJpdmVycy90dHkvc3lzcnEuYwppbmRleCBjNTU2ZWQ5Li44MWYxMzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zeXNycS5jCisrKyBiL2RyaXZlcnMvdHR5L3N5c3JxLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KIAogLyogV2hldGhlciB3ZSByZWFjdCBvbiBzeXNycSBrZXlzIG9yIGp1c3QgaWdub3JlIHRoZW0gKi8KLXN0YXRpYyBpbnQgX19yZWFkX21vc3RseSBzeXNycV9lbmFibGVkID0gMTsKK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSBzeXNycV9lbmFibGVkID0gU1lTUlFfREVGQVVMVF9FTkFCTEU7CiBzdGF0aWMgYm9vbCBfX3JlYWRfbW9zdGx5IHN5c3JxX2Fsd2F5c19lbmFibGVkOwogCiBzdGF0aWMgYm9vbCBzeXNycV9vbih2b2lkKQpAQCAtNTcxLDYgKzU3MSw3IEBACiAJdW5zaWduZWQgaW50IGFsdF91c2U7CiAJYm9vbCBhY3RpdmU7CiAJYm9vbCBuZWVkX3JlaW5qZWN0OworCWJvb2wgcmVpbmplY3Rpbmc7CiB9OwogCiBzdGF0aWMgdm9pZCBzeXNycV9yZWluamVjdF9hbHRfc3lzcnEoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNTgxLDYgKzU4MiwxMCBAQAogCXVuc2lnbmVkIGludCBhbHRfY29kZSA9IHN5c3JxLT5hbHRfdXNlOwogCiAJaWYgKHN5c3JxLT5uZWVkX3JlaW5qZWN0KSB7CisJCS8qIHdlIGRvIG5vdCB3YW50IHRoZSBhc3NpZ25tZW50IHRvIGJlIHJlb3JkZXJlZCAqLworCQlzeXNycS0+cmVpbmplY3RpbmcgPSB0cnVlOworCQltYigpOworCiAJCS8qIFNpbXVsYXRlIHByZXNzIGFuZCByZWxlYXNlIG9mIEFsdCArIFN5c1JxICovCiAJCWlucHV0X2luamVjdF9ldmVudChoYW5kbGUsIEVWX0tFWSwgYWx0X2NvZGUsIDEpOwogCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9LRVksIEtFWV9TWVNSUSwgMSk7CkBAIC01ODksNiArNTk0LDkgQEAKIAkJaW5wdXRfaW5qZWN0X2V2ZW50KGhhbmRsZSwgRVZfS0VZLCBLRVlfU1lTUlEsIDApOwogCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9LRVksIGFsdF9jb2RlLCAwKTsKIAkJaW5wdXRfaW5qZWN0X2V2ZW50KGhhbmRsZSwgRVZfU1lOLCBTWU5fUkVQT1JULCAxKTsKKworCQltYigpOworCQlzeXNycS0+cmVpbmplY3RpbmcgPSBmYWxzZTsKIAl9CiB9CiAKQEAgLTU5OSw2ICs2MDcsMTMgQEAKIAlib29sIHdhc19hY3RpdmUgPSBzeXNycS0+YWN0aXZlOwogCWJvb2wgc3VwcHJlc3M7CiAKKwkvKgorCSAqIERvIG5vdCBmaWx0ZXIgYW55dGhpbmcgaWYgd2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHJlLWluamVjdGluZworCSAqIEFsdCtTeXNScSBjb21iaW5hdGlvbi4KKwkgKi8KKwlpZiAoc3lzcnEtPnJlaW5qZWN0aW5nKQorCQlyZXR1cm4gZmFsc2U7CisKIAlzd2l0Y2ggKHR5cGUpIHsKIAogCWNhc2UgRVZfU1lOOgpAQCAtNjI5LDcgKzY0NCw3IEBACiAJCQkJc3lzcnEtPmFsdF91c2UgPSBzeXNycS0+YWx0OwogCQkJCS8qCiAJCQkJICogSWYgbm90aGluZyBlbHNlIHdpbGwgYmUgcHJlc3NlZCB3ZSdsbCBuZWVkCi0JCQkJICogdG8gKiByZS1pbmplY3QgQWx0LVN5c1JxIGtleXNyb2tlLgorCQkJCSAqIHRvIHJlLWluamVjdCBBbHQtU3lzUnEga2V5c3Jva2UuCiAJCQkJICovCiAJCQkJc3lzcnEtPm5lZWRfcmVpbmplY3QgPSB0cnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2lvLmMgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwppbmRleCA0NjRkMDlkLi4wMDY1ZGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfaW8uYworKysgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwpAQCAtMzI1Niw4ICszMjU2LDggQEAKIAlzdHJ1Y3QgY29uc29sZSAqYzsKIAlzc2l6ZV90IGNvdW50ID0gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKLQlmb3IgKGMgPSBjb25zb2xlX2RyaXZlcnM7IGM7IGMgPSBjLT5uZXh0KSB7CisJY29uc29sZV9sb2NrKCk7CisJZm9yX2VhY2hfY29uc29sZShjKSB7CiAJCWlmICghYy0+ZGV2aWNlKQogCQkJY29udGludWU7CiAJCWlmICghYy0+d3JpdGUpCkBAIC0zMjcxLDcgKzMyNzEsNyBAQAogCXdoaWxlIChpLS0pCiAJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICIlcyVkJWMiLAogCQkJCSBjc1tpXS0+bmFtZSwgY3NbaV0tPmluZGV4LCBpID8gJyAnOidcbicpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMzMwNiw3ICszMzA2LDcgQEAKIAlpZiAoSVNfRVJSKGNvbnNkZXYpKQogCQljb25zZGV2ID0gTlVMTDsKIAllbHNlCi0JCWRldmljZV9jcmVhdGVfZmlsZShjb25zZGV2LCAmZGV2X2F0dHJfYWN0aXZlKTsKKwkJV0FSTl9PTihkZXZpY2VfY3JlYXRlX2ZpbGUoY29uc2RldiwgJmRldl9hdHRyX2FjdGl2ZSkgPCAwKTsKIAogI2lmZGVmIENPTkZJR19WVAogCXZ0eV9pbml0KCZjb25zb2xlX2ZvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMgYi9kcml2ZXJzL3R0eS92dC9zZWxlY3Rpb24uYwppbmRleCBlYmFlMzQ0Li5jOTU2ZWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS92dC9zZWxlY3Rpb24uYworKysgYi9kcml2ZXJzL3R0eS92dC9zZWxlY3Rpb24uYwpAQCAtMzE2LDkgKzMxNiw5IEBACiAJLyogYWx3YXlzIGNhbGxlZCB3aXRoIEJUTSBmcm9tIHZ0X2lvY3RsICovCiAJV0FSTl9PTighdHR5X2xvY2tlZCgpKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlwb2tlX2JsYW5rZWRfY29uc29sZSgpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CiAJaWYgKCFsZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMgYi9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYwppbmRleCBlYWIzYTFmLi5hNjcyZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYworKysgYi9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJLyogU2VsZWN0IHRoZSBwcm9wZXIgY3VycmVudCBjb25zb2xlIGFuZCB2ZXJpZnkKIAkgKiBzYW5pdHkgb2YgdGhlIHNpdHVhdGlvbiB1bmRlciB0aGUgY29uc29sZSBsb2NrLgogCSAqLwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCWF0dHIgPSAoY3VycmNvbnMgJiAxMjgpOwogCWN1cnJjb25zID0gKGN1cnJjb25zICYgMTI3KTsKQEAgLTMzNiw5ICszMzYsOSBAQAogCQkgKiB0aGUgcGFnZWZhdWx0IGhhbmRsaW5nIGNvZGUgbWF5IHdhbnQgdG8gY2FsbCBwcmludGsoKS4KIAkJICovCiAKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXQgPSBjb3B5X3RvX3VzZXIoYnVmLCBjb25fYnVmX3N0YXJ0LCBvcmlnX2NvdW50KTsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAogCQlpZiAocmV0KSB7CiAJCQlyZWFkICs9IChvcmlnX2NvdW50IC0gcmV0KTsKQEAgLTM1NCw3ICszNTQsNyBAQAogCWlmIChyZWFkKQogCQlyZXQgPSByZWFkOwogdW5sb2NrX291dDoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAltdXRleF91bmxvY2soJmNvbl9idWZfbXR4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzc5LDcgKzM3OSw3IEBACiAJLyogU2VsZWN0IHRoZSBwcm9wZXIgY3VycmVudCBjb25zb2xlIGFuZCB2ZXJpZnkKIAkgKiBzYW5pdHkgb2YgdGhlIHNpdHVhdGlvbiB1bmRlciB0aGUgY29uc29sZSBsb2NrLgogCSAqLwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCWF0dHIgPSAoY3VycmNvbnMgJiAxMjgpOwogCWN1cnJjb25zID0gKGN1cnJjb25zICYgMTI3KTsKQEAgLTQxNCw5ICs0MTQsOSBAQAogCQkvKiBUZW1wb3JhcmlseSBkcm9wIHRoZSBjb25zb2xlIGxvY2sgc28gdGhhdCB3ZSBjYW4gcmVhZAogCQkgKiBpbiB0aGUgd3JpdGUgZGF0YSBmcm9tIHVzZXJzcGFjZSBzYWZlbHkuCiAJCSAqLwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldCA9IGNvcHlfZnJvbV91c2VyKGNvbl9idWYsIGJ1ZiwgdGhpc19yb3VuZCk7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAKIAkJaWYgKHJldCkgewogCQkJdGhpc19yb3VuZCAtPSByZXQ7CkBAIC01NDIsNyArNTQyLDcgQEAKIAkJdmNzX3Njcl91cGRhdGVkKHZjKTsKIAogdW5sb2NrX291dDoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCW11dGV4X3VubG9jaygmY29uX2J1Zl9tdHgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS92dC92dC5jIGIvZHJpdmVycy90dHkvdnQvdnQuYwppbmRleCA3NjQwN2VjLi4xNDdlZGUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvdnQuYworKysgYi9kcml2ZXJzL3R0eS92dC92dC5jCkBAIC0xMDAzLDkgKzEwMDMsOSBAQAogCXN0cnVjdCB2Y19kYXRhICp2YyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaW50IHJldDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlyZXQgPSB2Y19kb19yZXNpemUodHR5LCB2Yywgd3MtPndzX2NvbCwgd3MtPndzX3Jvdyk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTI3MSw3ICsxMjcxLDcgQEAKIAl2Yy0+dmNfY29sb3IgPSB2Yy0+dmNfZGVmX2NvbG9yOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgY3NpX20oc3RydWN0IHZjX2RhdGEgKnZjKQogewogCWludCBpOwpAQCAtMTQxNSw3ICsxNDE1LDcgQEAKIAlyZXR1cm4gdmNfY29uc1tmZ19jb25zb2xlXS5kLT52Y19yZXBvcnRfbW91c2U7CiB9CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkICovCiBzdGF0aWMgdm9pZCBzZXRfbW9kZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBvbl9vZmYpCiB7CiAJaW50IGk7CkBAIC0xNDg1LDcgKzE0ODUsNyBAQAogCQl9CiB9CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkICovCiBzdGF0aWMgdm9pZCBzZXR0ZXJtX2NvbW1hbmQoc3RydWN0IHZjX2RhdGEgKnZjKQogewogCXN3aXRjaCh2Yy0+dmNfcGFyWzBdKSB7CkBAIC0xNTQ1LDcgKzE1NDUsNyBAQAogCX0KIH0KIAotLyogY29uc29sZV9zZW0gaXMgaGVsZCAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyB2b2lkIGNzaV9hdChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGludCBucikKIHsKIAlpZiAobnIgPiB2Yy0+dmNfY29scyAtIHZjLT52Y194KQpAQCAtMTU1NSw3ICsxNTU1LDcgQEAKIAlpbnNlcnRfY2hhcih2YywgbnIpOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgY3NpX0woc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgbnIpCiB7CiAJaWYgKG5yID4gdmMtPnZjX3Jvd3MgLSB2Yy0+dmNfeSkKQEAgLTE1NjYsNyArMTU2Niw3IEBACiAJdmMtPnZjX25lZWRfd3JhcCA9IDA7CiB9CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkICovCiBzdGF0aWMgdm9pZCBjc2lfUChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGludCBucikKIHsKIAlpZiAobnIgPiB2Yy0+dmNfY29scyAtIHZjLT52Y194KQpAQCAtMTU3Niw3ICsxNTc2LDcgQEAKIAlkZWxldGVfY2hhcih2YywgbnIpOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgY3NpX00oc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgbnIpCiB7CiAJaWYgKG5yID4gdmMtPnZjX3Jvd3MgLSB2Yy0+dmNfeSkKQEAgLTE1ODcsNyArMTU4Nyw3IEBACiAJdmMtPnZjX25lZWRfd3JhcCA9IDA7CiB9CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKGV4Y2VwdCB2aWEgdmNfaW5pdC0+cmVzZXRfdGVybWluYWwgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkIChleGNlcHQgdmlhIHZjX2luaXQtPnJlc2V0X3Rlcm1pbmFsICovCiBzdGF0aWMgdm9pZCBzYXZlX2N1cihzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7CiAJdmMtPnZjX3NhdmVkX3gJCT0gdmMtPnZjX3g7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQAogCXZjLT52Y19zYXZlZF9HMQkJPSB2Yy0+dmNfRzFfY2hhcnNldDsKIH0KIAotLyogY29uc29sZV9zZW0gaXMgaGVsZCAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyB2b2lkIHJlc3RvcmVfY3VyKHN0cnVjdCB2Y19kYXRhICp2YykKIHsKIAlnb3RveHkodmMsIHZjLT52Y19zYXZlZF94LCB2Yy0+dmNfc2F2ZWRfeSk7CkBAIC0xNjI1LDcgKzE2MjUsNyBAQAogCUVTaGFzaCwgRVNzZXRHMCwgRVNzZXRHMSwgRVNwZXJjZW50LCBFU2lnbm9yZSwgRVNub25zdGQsCiAJRVNwYWxldHRlIH07CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKGV4Y2VwdCB2aWEgdmNfaW5pdCgpKSAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKGV4Y2VwdCB2aWEgdmNfaW5pdCgpKSAqLwogc3RhdGljIHZvaWQgcmVzZXRfdGVybWluYWwoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgZG9fY2xlYXIpCiB7CiAJdmMtPnZjX3RvcAkJPSAwOwpAQCAtMTY4NSw3ICsxNjg1LDcgQEAKIAkgICAgY3NpX0oodmMsIDIpOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgZG9fY29uX3Ryb2woc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgYykKIHsKIAkvKgpAQCAtMjExOSw3ICsyMTE5LDcgQEAKIAlyZXR1cm4gYmlzZWFyY2godWNzLCBkb3VibGVfd2lkdGgsIEFSUkFZX1NJWkUoZG91YmxlX3dpZHRoKSAtIDEpOwogfQogCi0vKiBhY3F1aXJlcyBjb25zb2xlX3NlbSAqLworLyogYWNxdWlyZXMgY29uc29sZV9sb2NrICovCiBzdGF0aWMgaW50IGRvX2Nvbl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKICNpZmRlZiBWVF9CVUZfVlJBTV9PTkxZCkBAIC0yMTQ3LDExICsyMTQ3LDExIEBACiAKIAltaWdodF9zbGVlcCgpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXZjID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAodmMgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgInZ0OiBhcmdoLCBkcml2ZXJfZGF0YSBpcyBOVUxMICFcbiIpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjE1OSw3ICsyMTU5LDcgQEAKIAlpZiAoIXZjX2NvbnNfYWxsb2NhdGVkKGN1cnJjb25zKSkgewogCSAgICAvKiBjb3VsZCB0aGlzIGhhcHBlbj8gKi8KIAkJcHJpbnRrX29uY2UoImNvbl93cml0ZTogdHR5ICVkIG5vdCBhbGxvY2F0ZWRcbiIsIGN1cnJjb25zKzEpOwotCSAgICByZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJICAgIGNvbnNvbGVfdW5sb2NrKCk7CiAJICAgIHJldHVybiAwOwogCX0KIApAQCAtMjM3NSw3ICsyMzc1LDcgQEAKIAl9CiAJRkxVU0gKIAljb25zb2xlX2NvbmRpdGlvbmFsX3NjaGVkdWxlKCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJbm90aWZ5X3VwZGF0ZSh2Yyk7CiAJcmV0dXJuIG47CiAjdW5kZWYgRkxVU0gKQEAgLTIzODgsMTEgKzIzODgsMTEgQEAKICAqIHVzIHRvIGRvIHRoZSBzd2l0Y2hlcyBhc3luY2hyb25vdXNseSAobmVlZGVkIHdoZW4gd2Ugd2FudAogICogdG8gc3dpdGNoIGR1ZSB0byBhIGtleWJvYXJkIGludGVycnVwdCkuICBTeW5jaHJvbml6YXRpb24KICAqIHdpdGggb3RoZXIgY29uc29sZSBjb2RlIGFuZCBwcmV2ZW50aW9uIG9mIHJlLWVudHJhbmN5IGlzCi0gKiBlbnN1cmVkIHdpdGggY29uc29sZV9zZW0uCisgKiBlbnN1cmVkIHdpdGggY29uc29sZV9sb2NrLgogICovCiBzdGF0aWMgdm9pZCBjb25zb2xlX2NhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlpZiAod2FudF9jb25zb2xlID49IDApIHsKIAkJaWYgKHdhbnRfY29uc29sZSAhPSBmZ19jb25zb2xlICYmCkBAIC0yNDIyLDcgKzI0MjIsNyBAQAogCX0KIAlub3RpZnlfdXBkYXRlKHZjX2NvbnNbZmdfY29uc29sZV0uZCk7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogaW50IHNldF9jb25zb2xlKGludCBucikKQEAgLTI2MDMsNyArMjYwMyw3IEBACiAgKi8KIAogLyoKLSAqIEdlbmVyYWxseSBhIGJpdCByYWN5IHdpdGggcmVzcGVjdCB0byBjb25zb2xlX3NlbSgpLgorICogR2VuZXJhbGx5IGEgYml0IHJhY3kgd2l0aCByZXNwZWN0IHRvIGNvbnNvbGVfbG9jaygpOy4KICAqCiAgKiBUaGVyZSBhcmUgc29tZSBmdW5jdGlvbnMgd2hpY2ggZG9uJ3QgbmVlZCBpdC4KICAqCkBAIC0yNjI5LDE3ICsyNjI5LDE3IEBACiAJc3dpdGNoICh0eXBlKQogCXsKIAkJY2FzZSBUSU9DTF9TRVRTRUw6Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCXJldCA9IHNldF9zZWxlY3Rpb24oKHN0cnVjdCB0aW9jbF9zZWxlY3Rpb24gX191c2VyICopKHArMSksIHR0eSk7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJYnJlYWs7CiAJCWNhc2UgVElPQ0xfUEFTVEVTRUw6CiAJCQlyZXQgPSBwYXN0ZV9zZWxlY3Rpb24odHR5KTsKIAkJCWJyZWFrOwogCQljYXNlIFRJT0NMX1VOQkxBTktTQ1JFRU46Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCXVuYmxhbmtfc2NyZWVuKCk7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJYnJlYWs7CiAJCWNhc2UgVElPQ0xfU0VMTE9BRExVVDoKIAkJCXJldCA9IHNlbF9sb2FkbHV0KHApOwpAQCAtMjY4OCwxMCArMjY4OCwxMCBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVElPQ0xfQkxBTktTQ1JFRU46CS8qIHVudGlsIGV4cGxpY2l0bHkgdW5ibGFua2VkLCBub3Qgb25seSBwb2tlZCAqLwotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQlpZ25vcmVfcG9rZSA9IDE7CiAJCQlkb19ibGFua19zY3JlZW4oMCk7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJYnJlYWs7CiAJCWNhc2UgVElPQ0xfQkxBTktFRFNDUkVFTjoKIAkJCXJldCA9IGNvbnNvbGVfYmxhbmtlZDsKQEAgLTI3OTAsMTEgKzI3OTAsMTEgQEAKIAkJcmV0dXJuOwogCiAJLyogaWYgd2UgcmFjZSB3aXRoIGNvbl9jbG9zZSgpLCB2dCBtYXkgYmUgbnVsbCAqLwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAl2YyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHZjKQogCQlzZXRfY3Vyc29yKHZjKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogLyoKQEAgLTI4MDUsNyArMjgwNSw3IEBACiAJdW5zaWduZWQgaW50IGN1cnJjb25zID0gdHR5LT5pbmRleDsKIAlpbnQgcmV0ID0gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAodHR5LT5kcml2ZXJfZGF0YSA9PSBOVUxMKSB7CiAJCXJldCA9IHZjX2FsbG9jYXRlKGN1cnJjb25zKTsKIAkJaWYgKHJldCA9PSAwKSB7CkBAIC0yODEzLDcgKzI4MTMsNyBAQAogCiAJCQkvKiBTdGlsbCBiZWluZyBmcmVlZCAqLwogCQkJaWYgKHZjLT5wb3J0LnR0eSkgewotCQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCQljb25zb2xlX3VubG9jaygpOwogCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCQl9CiAJCQl0dHktPmRyaXZlcl9kYXRhID0gdmM7CkBAIC0yODI3LDExICsyODI3LDExIEBACiAJCQkJdHR5LT50ZXJtaW9zLT5jX2lmbGFnIHw9IElVVEY4OwogCQkJZWxzZQogCQkJCXR0eS0+dGVybWlvcy0+Y19pZmxhZyAmPSB+SVVURjg7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yODQ0LDkgKzI4NDQsOSBAQAogewogCXN0cnVjdCB2Y19kYXRhICp2YyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJQlVHX09OKHZjID09IE5VTEwpOwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAl2Yy0+cG9ydC50dHkgPSBOVUxMOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXR0eV9zaHV0ZG93bih0dHkpOwogfQogCkBAIC0yODkzLDEzICsyODkzLDEzIEBACiAJc3RydWN0IHZjX2RhdGEgKnZjOwogCXVuc2lnbmVkIGludCBjdXJyY29ucyA9IDAsIGk7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlpZiAoY29uc3dpdGNocCkKIAkJZGlzcGxheV9kZXNjID0gY29uc3dpdGNocC0+Y29uX3N0YXJ0dXAoKTsKIAlpZiAoIWRpc3BsYXlfZGVzYykgewogCQlmZ19jb25zb2xlID0gMDsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI5NDYsNyArMjk0Niw3IEBACiAJcHJpbnRhYmxlID0gMTsKIAlwcmludGsoIlxuIik7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogI2lmZGVmIENPTkZJR19WVF9DT05TT0xFCiAJcmVnaXN0ZXJfY29uc29sZSgmdnRfY29uc29sZV9kcml2ZXIpOwpAQCAtMjk5NCw3ICsyOTk0LDcgQEAKIAlpZiAoSVNfRVJSKHR0eTBkZXYpKQogCQl0dHkwZGV2ID0gTlVMTDsKIAllbHNlCi0JCWRldmljZV9jcmVhdGVfZmlsZSh0dHkwZGV2LCAmZGV2X2F0dHJfYWN0aXZlKTsKKwkJV0FSTl9PTihkZXZpY2VfY3JlYXRlX2ZpbGUodHR5MGRldiwgJmRldl9hdHRyX2FjdGl2ZSkgPCAwKTsKIAogCXZjc19pbml0KCk7CiAKQEAgLTMwMzcsNyArMzAzNyw3IEBACiAJaWYgKCF0cnlfbW9kdWxlX2dldChvd25lcikpCiAJCXJldHVybiAtRU5PREVWOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJLyogY2hlY2sgaWYgZHJpdmVyIGlzIHJlZ2lzdGVyZWQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX0NPTl9EUklWRVI7IGkrKykgewpAQCAtMzEyMiw3ICszMTIyLDcgQEAKIAogCXJldHZhbCA9IDA7CiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJbW9kdWxlX3B1dChvd25lcik7CiAJcmV0dXJuIHJldHZhbDsKIH07CkBAIC0zMTcxLDcgKzMxNzEsNyBAQAogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCS8qIGNoZWNrIGlmIGRyaXZlciBpcyByZWdpc3RlcmVkIGFuZCBpZiBpdCBpcyB1bmJpbmRhYmxlICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05fRFJJVkVSOyBpKyspIHsKQEAgLTMxODUsNyArMzE4NSw3IEBACiAJfQogCiAJaWYgKHJldHZhbCkgewotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtMzIwNCwxMiArMzIwNCwxMiBAQAogCX0KIAogCWlmIChyZXR2YWwpIHsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlnb3RvIGVycjsKIAl9CiAKIAlpZiAoIWNvbl9pc19ib3VuZChjc3cpKSB7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC0zMjM4LDcgKzMyMzgsNyBAQAogCWlmICghY29uX2lzX2JvdW5kKGNzdykpCiAJCWNvbl9kcml2ZXItPmZsYWcgJj0gfkNPTl9EUklWRVJfRkxBR19JTklUOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJLyogaWdub3JlIHJldHVybiB2YWx1ZSwgYmluZGluZyBzaG91bGQgbm90IGZhaWwgKi8KIAliaW5kX2Nvbl9kcml2ZXIoZGVmY3N3LCBmaXJzdCwgbGFzdCwgZGVmbHQpOwogZXJyOgpAQCAtMzUzOCwxNCArMzUzOCwxNCBAQAogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ09OX0RSSVZFUjsgaSsrKSB7CiAJCWNvbl9kcml2ZXIgPSAmcmVnaXN0ZXJlZF9jb25fZHJpdmVyW2ldOwogCiAJCS8qIGFscmVhZHkgcmVnaXN0ZXJlZCAqLwogCQlpZiAoY29uX2RyaXZlci0+Y29uID09IGNzdykKLQkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlyZXR2YWwgPSAtRUJVU1k7CiAJfQogCiAJaWYgKHJldHZhbCkKQEAgLTM1OTIsNyArMzU5Miw3IEBACiAJfQogCiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJbW9kdWxlX3B1dChvd25lcik7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTM2MTMsNyArMzYxMyw3IEBACiB7CiAJaW50IGksIHJldHZhbCA9IC1FTk9ERVY7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAkvKiBjYW5ub3QgdW5yZWdpc3RlciBhIGJvdW5kIGRyaXZlciAqLwogCWlmIChjb25faXNfYm91bmQoY3N3KSkKQEAgLTM2MzksNyArMzYzOSw3IEBACiAJCX0KIAl9CiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9jb25fZHJpdmVyKTsKQEAgLTM2NTYsNyArMzY1NiwxMiBAQAogCWludCBlcnI7CiAKIAllcnIgPSByZWdpc3Rlcl9jb25fZHJpdmVyKGNzdywgZmlyc3QsIGxhc3QpOwotCisJLyogaWYgd2UgZ2V0IGFuIGJ1c3kgZXJyb3Igd2Ugc3RpbGwgd2FudCB0byBiaW5kIHRoZSBjb25zb2xlIGRyaXZlcgorCSAqIGFuZCByZXR1cm4gc3VjY2VzcywgYXMgd2UgbWF5IGhhdmUgdW5ib3VuZCB0aGUgY29uc29sZSBkcml2ZXIKKwnCoCogYnV0IG5vdCB1bnJlZ2lzdGVyZWQgaXQuCisJKi8KKwlpZiAoZXJyID09IC1FQlVTWSkKKwkJZXJyID0gMDsKIAlpZiAoIWVycikKIAkJYmluZF9jb25fZHJpdmVyKGNzdywgZmlyc3QsIGxhc3QsIGRlZmx0KTsKIApAQCAtMzkzNCw5ICszOTM5LDkgQEAKIHsKIAlpbnQgcmM7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmMgPSBzZXRfZ2V0X2NtYXAgKGFyZywxKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTM5NDUsOSArMzk1MCw5IEBACiB7CiAJaW50IHJjOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXJjID0gc2V0X2dldF9jbWFwIChhcmcsMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0zOTk0LDEyICszOTk5LDEyIEBACiAJfSBlbHNlCiAJCWZvbnQuZGF0YSA9IE5VTEw7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKHZjLT52Y19zdy0+Y29uX2ZvbnRfZ2V0KQogCQlyYyA9IHZjLT52Y19zdy0+Y29uX2ZvbnRfZ2V0KHZjLCAmZm9udCk7CiAJZWxzZQogCQlyYyA9IC1FTk9TWVM7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwpAQCAtNDA3NiwxMiArNDA4MSwxMiBAQAogCWZvbnQuZGF0YSA9IG1lbWR1cF91c2VyKG9wLT5kYXRhLCBzaXplKTsKIAlpZiAoSVNfRVJSKGZvbnQuZGF0YSkpCiAJCXJldHVybiBQVFJfRVJSKGZvbnQuZGF0YSk7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmICh2Yy0+dmNfc3ctPmNvbl9mb250X3NldCkKIAkJcmMgPSB2Yy0+dmNfc3ctPmNvbl9mb250X3NldCh2YywgJmZvbnQsIG9wLT5mbGFncyk7CiAJZWxzZQogCQlyYyA9IC1FTk9TWVM7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJa2ZyZWUoZm9udC5kYXRhKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC00MTAzLDEyICs0MTA4LDEyIEBACiAJZWxzZQogCQluYW1lW01BWF9GT05UX05BTUUgLSAxXSA9IDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKHZjLT52Y19zdy0+Y29uX2ZvbnRfZGVmYXVsdCkKIAkJcmMgPSB2Yy0+dmNfc3ctPmNvbl9mb250X2RlZmF1bHQodmMsICZmb250LCBzKTsKIAllbHNlCiAJCXJjID0gLUVOT1NZUzsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlpZiAoIXJjKSB7CiAJCW9wLT53aWR0aCA9IGZvbnQud2lkdGg7CiAJCW9wLT5oZWlnaHQgPSBmb250LmhlaWdodDsKQEAgLTQxMjQsNyArNDEyOSw3IEBACiAJaWYgKHZjLT52Y19tb2RlICE9IEtEX1RFWFQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmICghdmMtPnZjX3N3LT5jb25fZm9udF9jb3B5KQogCQlyYyA9IC1FTk9TWVM7CiAJZWxzZSBpZiAoY29uIDwgMCB8fCAhdmNfY29uc19hbGxvY2F0ZWQoY29uKSkKQEAgLTQxMzMsNyArNDEzOCw3IEBACiAJCXJjID0gMDsKIAllbHNlCiAJCXJjID0gdmMtPnZjX3N3LT5jb25fZm9udF9jb3B5KHZjLCBjb24pOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdnQvdnRfaW9jdGwuYyBiL2RyaXZlcnMvdHR5L3Z0L3Z0X2lvY3RsLmMKaW5kZXggNmI2OGEwZi4uMTIzNWViZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvdnRfaW9jdGwuYworKysgYi9kcml2ZXJzL3R0eS92dC92dF9pb2N0bC5jCkBAIC02NDksMTIgKzY0OSwxMiBAQAogCQkvKgogCQkgKiBleHBsaWNpdGx5IGJsYW5rL3VuYmxhbmsgdGhlIHNjcmVlbiBpZiBzd2l0Y2hpbmcgbW9kZXMKIAkJICovCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWlmIChhcmcgPT0gS0RfVEVYVCkKIAkJCWRvX3VuYmxhbmtfc2NyZWVuKDEpOwogCQllbHNlCiAJCQlkb19ibGFua19zY3JlZW4oMSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJYnJlYWs7CiAKIAljYXNlIEtER0VUTU9ERToKQEAgLTg5Myw3ICs4OTMsNyBAQAogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCXZjLT52dF9tb2RlID0gdG1wOwogCQkvKiB0aGUgZnJzaWcgaXMgaWdub3JlZCwgc28gd2Ugc2V0IGl0IHRvIDAgKi8KIAkJdmMtPnZ0X21vZGUuZnJzaWcgPSAwOwpAQCAtOTAxLDcgKzkwMSw3IEBACiAJCXZjLT52dF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKGN1cnJlbnQpKTsKIAkJLyogbm8gc3dpdGNoIGlzIHJlcXVpcmVkIC0tIHNhd0BzaGFkZS5tc3UucnUgKi8KIAkJdmMtPnZ0X25ld3Z0ID0gLTE7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJYnJlYWs7CiAJfQogCkBAIC05MTAsOSArOTEwLDkgQEAKIAkJc3RydWN0IHZ0X21vZGUgdG1wOwogCQlpbnQgcmM7CiAKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJbWVtY3B5KCZ0bXAsICZ2Yy0+dnRfbW9kZSwgc2l6ZW9mKHN0cnVjdCB2dF9tb2RlKSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAogCQlyYyA9IGNvcHlfdG9fdXNlcih1cCwgJnRtcCwgc2l6ZW9mKHN0cnVjdCB2dF9tb2RlKSk7CiAJCWlmIChyYykKQEAgLTk2NSw5ICs5NjUsOSBAQAogCQkJcmV0ID0gIC1FTlhJTzsKIAkJZWxzZSB7CiAJCQlhcmctLTsKLQkJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfbG9jaygpOwogCQkJcmV0ID0gdmNfYWxsb2NhdGUoYXJnKTsKLQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCQkJc2V0X2NvbnNvbGUoYXJnKTsKQEAgLTk5MCw3ICs5OTAsNyBAQAogCQkJcmV0ID0gLUVOWElPOwogCQllbHNlIHsKIAkJCXZzYS5jb25zb2xlLS07Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCXJldCA9IHZjX2FsbG9jYXRlKHZzYS5jb25zb2xlKTsKIAkJCWlmIChyZXQgPT0gMCkgewogCQkJCXN0cnVjdCB2Y19kYXRhICpudmM7CkBAIC0xMDAzLDcgKzEwMDMsNyBAQAogCQkJCXB1dF9waWQobnZjLT52dF9waWQpOwogCQkJCW52Yy0+dnRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChjdXJyZW50KSk7CiAJCQl9Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJCS8qIENvbW1lbmNlIHN3aXRjaCBhbmQgbG9jayAqLwpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAKIAkJLyoKIAkJICogU3dpdGNoaW5nLWZyb20gcmVzcG9uc2UKIAkJICovCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWlmICh2Yy0+dnRfbmV3dnQgPj0gMCkgewogCQkJaWYgKGFyZyA9PSAwKQogCQkJCS8qCkBAIC0xMDYzLDcgKzEwNjMsNyBAQAogCQkJCXZjLT52dF9uZXd2dCA9IC0xOwogCQkJCXJldCA9IHZjX2FsbG9jYXRlKG5ld3Z0KTsKIAkJCQlpZiAocmV0KSB7Ci0JCQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCQkJY29uc29sZV91bmxvY2soKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCS8qCkBAIC0xMDgzLDcgKzEwODMsNyBAQAogCQkJaWYgKGFyZyAhPSBWVF9BQ0tBQ1EpCiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJfQotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWJyZWFrOwogCiAJIC8qCkBAIC0xMDk2LDIwICsxMDk2LDIwIEBACiAJCX0KIAkJaWYgKGFyZyA9PSAwKSB7CiAJCSAgICAvKiBkZWFsbG9jYXRlIGFsbCB1bnVzZWQgY29uc29sZXMsIGJ1dCBsZWF2ZSAwICovCi0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCWZvciAoaT0xOyBpPE1BWF9OUl9DT05TT0xFUzsgaSsrKQogCQkJCWlmICghIFZUX0JVU1koaSkpCiAJCQkJCXZjX2RlYWxsb2NhdGUoaSk7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQl9IGVsc2UgewogCQkJLyogZGVhbGxvY2F0ZSBhIHNpbmdsZSBjb25zb2xlLCBpZiBwb3NzaWJsZSAqLwogCQkJYXJnLS07CiAJCQlpZiAoVlRfQlVTWShhcmcpKQogCQkJCXJldCA9IC1FQlVTWTsKIAkJCWVsc2UgaWYgKGFyZykgewkJCSAgICAgIC8qIGxlYXZlIDAgKi8KLQkJCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQkJY29uc29sZV9sb2NrKCk7CiAJCQkJdmNfZGVhbGxvY2F0ZShhcmcpOwotCQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCQljb25zb2xlX3VubG9jaygpOwogCQkJfQogCQl9CiAJCWJyZWFrOwpAQCAtMTEyNiw3ICsxMTI2LDcgQEAKIAkJICAgIGdldF91c2VyKGNjLCAmdnRzaXplcy0+dl9jb2xzKSkKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCWVsc2UgewotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX0NPTlNPTEVTOyBpKyspIHsKIAkJCQl2YyA9IHZjX2NvbnNbaV0uZDsKIApAQCAtMTEzNSw3ICsxMTM1LDcgQEAKIAkJCQkJdmNfcmVzaXplKHZjX2NvbnNbaV0uZCwgY2MsIGxsKTsKIAkJCQl9CiAJCQl9Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTExODcsMTQgKzExODcsMTQgQEAKIAkJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05TT0xFUzsgaSsrKSB7CiAJCQlpZiAoIXZjX2NvbnNbaV0uZCkKIAkJCQljb250aW51ZTsKLQkJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfbG9jaygpOwogCQkJaWYgKHZsaW4pCiAJCQkJdmNfY29uc1tpXS5kLT52Y19zY2FuX2xpbmVzID0gdmxpbjsKIAkJCWlmIChjbGluKQogCQkJCXZjX2NvbnNbaV0uZC0+dmNfZm9udC5oZWlnaHQgPSBjbGluOwogCQkJdmNfY29uc1tpXS5kLT52Y19yZXNpemVfdXNlciA9IDE7CiAJCQl2Y19yZXNpemUodmNfY29uc1tpXS5kLCBjYywgbGwpOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMzY3LDcgKzEzNjcsNyBAQAogCXN0cnVjdCB2Y19kYXRhICp2YzsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXZjID0gdmNfY29uLT5kOwogCWlmICh2YykgewogCQl0dHkgPSB2Yy0+cG9ydC50dHk7CkBAIC0xMzc5LDcgKzEzNzksNyBAQAogCQkJX19kb19TQUsodHR5KTsKIAkJcmVzZXRfdmModmMpOwogCX0KLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTE3MzcsMTAgKzE3MzcsMTAgQEAKIHsKIAlpbnQgcHJldjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAkvKiBHcmFwaGljcyBtb2RlIC0gdXAgdG8gWCAqLwogCWlmIChkaXNhYmxlX3Z0X3N3aXRjaCkgewotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIAlwcmV2ID0gZmdfY29uc29sZTsKQEAgLTE3NDgsNyArMTc0OCw3IEBACiAJaWYgKGFsbG9jICYmIHZjX2FsbG9jYXRlKHZ0KSkgewogCQkvKiB3ZSBjYW4ndCBoYXZlIGEgZnJlZSBWQyBmb3Igbm93LiBUb28gYmFkLAogCQkgKiB3ZSBkb24ndCB3YW50IHRvIG1lc3MgdGhlIHNjcmVlbiBmb3Igbm93LiAqLwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIApAQCAtMTc1OCwxMCArMTc1OCwxMCBAQAogCQkgKiBMZXQgdGhlIGNhbGxpbmcgZnVuY3Rpb24ga25vdyBzbyBpdCBjYW4gZGVjaWRlCiAJCSAqIHdoYXQgdG8gZG8uCiAJCSAqLwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAtRUlPOwogCX0KLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAl0dHlfbG9jaygpOwogCWlmICh2dF93YWl0YWN0aXZlKHZ0ICsgMSkpIHsKIAkJcHJfZGVidWcoIlN1c3BlbmQ6IENhbid0IHN3aXRjaCBWQ3MuIik7CkBAIC0xNzgxLDggKzE3ODEsOCBAQAogICovCiB2b2lkIHBtX3NldF92dF9zd2l0Y2goaW50IGRvX3N3aXRjaCkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZGlzYWJsZV92dF9zd2l0Y2ggPSAhZG9fc3dpdGNoOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogRVhQT1JUX1NZTUJPTChwbV9zZXRfdnRfc3dpdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCBkNmVkZTk4Li40YWI0OWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC0xNjA3LDYgKzE2MDcsNyBAQAogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDAxNTQpLCB9LCAvKiBOb2tpYSA1ODAwIFhwcmVzc011c2ljICovCiAJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDRjZSksIH0sIC8qIE5va2lhIEU5MCAqLwogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDAxZDQpLCB9LCAvKiBOb2tpYSBFNTUgKi8KKwl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwMzAyKSwgfSwgLyogTm9raWEgTjggKi8KIAl7IFNBTVNVTkdfUENTVUlURV9BQ01fSU5GTygweDY2NTEpLCB9LCAvKiBTYW1zdW5nIEdUaTg1MTAgKElOTk9WOCkgKi8KIAogCS8qIE5PVEU6IG5vbi1Ob2tpYSBDT01NL0FDTS8weGZmIGlzIGxpa2VseSBNU0ZUIFJORElTLi4uIE5PVCBhIG1vZGVtISAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCmluZGV4IDZlZTQ0NTEuLjQ3MDg1ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKQEAgLTM0Miw3ICszNDIsNyBAQAogCQlnb3RvIG91dG5wOwogCX0KIAotCWlmICghZmlsZS0+Zl9mbGFncyAmJiBPX05PTkJMT0NLKQorCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkKIAkJciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXNjLT53YWl0LCAhdGVzdF9iaXQoV0RNX0lOX1VTRSwKIAkJCQkJCQkJJmRlc2MtPmZsYWdzKSk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCmluZGV4IDlkYTI1MDUuLmRmNTAyYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKQEAgLTE5MiwxMiArMTkyLDEyIEBACiAJZXBfZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OwogCWVwX2Rldi0+ZGV2LnJlbGVhc2UgPSBlcF9kZXZpY2VfcmVsZWFzZTsKIAlkZXZfc2V0X25hbWUoJmVwX2Rldi0+ZGV2LCAiZXBfJTAyeCIsIGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOwotCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmZXBfZGV2LT5kZXYpOwogCiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKCZlcF9kZXYtPmRldik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJvcl9yZWdpc3RlcjsKIAorCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmZXBfZGV2LT5kZXYpOwogCWVuZHBvaW50LT5lcF9kZXYgPSBlcF9kZXY7CiAJcmV0dXJuIHJldHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYwppbmRleCBiNTVkNDYwLi5mNzFlOGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYwpAQCAtNDA1LDcgKzQwNSwxMiBAQAogCQkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlzeW5jaHJvbml6ZV9pcnEocGNpX2Rldi0+aXJxKTsKKwkvKiBJZiBNU0ktWCBpcyBlbmFibGVkLCB0aGUgZHJpdmVyIHdpbGwgaGF2ZSBzeW5jaHJvbml6ZWQgYWxsIHZlY3RvcnMKKwkgKiBpbiBwY2lfc3VzcGVuZCgpLiBJZiBNU0kgb3IgbGVnYWN5IFBDSSBpcyBlbmFibGVkLCB0aGF0IHdpbGwgYmUKKwkgKiBzeW5jaHJvbml6ZWQgaGVyZS4KKwkgKi8KKwlpZiAoIWhjZC0+bXNpeF9lbmFibGVkKQorCQlzeW5jaHJvbml6ZV9pcnEocGNpX2Rldi0+aXJxKTsKIAogCS8qIERvd25zdHJlYW0gcG9ydHMgZnJvbSB0aGlzIHJvb3QgaHViIHNob3VsZCBhbHJlYWR5IGJlIHF1aWVzY2VkLCBzbwogCSAqIHRoZXJlIHdpbGwgYmUgbm8gRE1BIGFjdGl2aXR5LiAgTm93IHdlIGNhbiBzaHV0IGRvd24gdGhlIHVwc3RyZWFtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCA2YTk1MDE3Li5lOTM1ZjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTE5NTUsNyArMTk1NSw2IEBACiAKIAlkZXZfZGJnKCZyaGRldi0+ZGV2LCAidXNiICVzJXNcbiIsCiAJCQkobXNnLmV2ZW50ICYgUE1fRVZFTlRfQVVUTyA/ICJhdXRvLSIgOiAiIiksICJyZXN1bWUiKTsKLQljbGVhcl9iaXQoSENEX0ZMQUdfV0FLRVVQX1BFTkRJTkcsICZoY2QtPmZsYWdzKTsKIAlpZiAoIWhjZC0+ZHJpdmVyLT5idXNfcmVzdW1lKQogCQlyZXR1cm4gLUVOT0VOVDsKIAlpZiAoaGNkLT5zdGF0ZSA9PSBIQ19TVEFURV9SVU5OSU5HKQpAQCAtMTk2Myw2ICsxOTYyLDcgQEAKIAogCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SRVNVTUlORzsKIAlzdGF0dXMgPSBoY2QtPmRyaXZlci0+YnVzX3Jlc3VtZShoY2QpOworCWNsZWFyX2JpdChIQ0RfRkxBR19XQUtFVVBfUEVORElORywgJmhjZC0+ZmxhZ3MpOwogCWlmIChzdGF0dXMgPT0gMCkgewogCQkvKiBUUlNNUkNZID0gMTAgbXNlYyAqLwogCQltc2xlZXAoMTApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKaW5kZXggYjk4ZWZhZS4uMGYyOTliNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC02NzYsNiArNjc2LDggQEAKIHN0YXRpYyB2b2lkIGh1Yl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBlbnVtIGh1Yl9hY3RpdmF0aW9uX3R5cGUgdHlwZSkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCWludCByZXQ7CiAJaW50IHBvcnQxOwogCWludCBzdGF0dXM7CiAJYm9vbCBuZWVkX2RlYm91bmNlX2RlbGF5ID0gZmFsc2U7CkBAIC03MTQsNiArNzE2LDI1IEBACiAJCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Vfbm9fcmVzdW1lKAogCQkJCQl0b191c2JfaW50ZXJmYWNlKGh1Yi0+aW50ZmRldikpOwogCQkJcmV0dXJuOwkJLyogQ29udGludWVzIGF0IGluaXQyOiBiZWxvdyAqLworCQl9IGVsc2UgaWYgKHR5cGUgPT0gSFVCX1JFU0VUX1JFU1VNRSkgeworCQkJLyogVGhlIGludGVybmFsIGhvc3QgY29udHJvbGxlciBzdGF0ZSBmb3IgdGhlIGh1YiBkZXZpY2UKKwkJCSAqIG1heSBiZSBnb25lIGFmdGVyIGEgaG9zdCBwb3dlciBsb3NzIG9uIHN5c3RlbSByZXN1bWUuCisJCQkgKiBVcGRhdGUgdGhlIGRldmljZSdzIGluZm8gc28gdGhlIEhXIGtub3dzIGl0J3MgYSBodWIuCisJCQkgKi8KKwkJCWhjZCA9IGJ1c190b19oY2QoaGRldi0+YnVzKTsKKwkJCWlmIChoY2QtPmRyaXZlci0+dXBkYXRlX2h1Yl9kZXZpY2UpIHsKKwkJCQlyZXQgPSBoY2QtPmRyaXZlci0+dXBkYXRlX2h1Yl9kZXZpY2UoaGNkLCBoZGV2LAorCQkJCQkJJmh1Yi0+dHQsIEdGUF9OT0lPKTsKKwkJCQlpZiAocmV0IDwgMCkgeworCQkJCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwgIkhvc3Qgbm90ICIKKwkJCQkJCQkiYWNjZXB0aW5nIGh1YiBpbmZvICIKKwkJCQkJCQkidXBkYXRlLlxuIik7CisJCQkJCWRldl9lcnIoaHViLT5pbnRmZGV2LCAiTFMvRlMgZGV2aWNlcyAiCisJCQkJCQkJImFuZCBodWJzIG1heSBub3Qgd29yayAiCisJCQkJCQkJInVuZGVyIHRoaXMgaHViXG4uIik7CisJCQkJfQorCQkJfQorCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7CiAJCX0gZWxzZSB7CiAJCQlodWJfcG93ZXJfb24oaHViLCB0cnVlKTsKIAkJfQpAQCAtMjY2MCwxNyArMjY4MSwxMyBAQAogCiAJbXV0ZXhfbG9jaygmdXNiX2FkZHJlc3MwX211dGV4KTsKIAotCWlmICghdWRldi0+Y29uZmlnICYmIG9sZHNwZWVkID09IFVTQl9TUEVFRF9TVVBFUikgewotCQkvKiBEb24ndCByZXNldCBVU0IgMy4wIGRldmljZXMgZHVyaW5nIGFuIGluaXRpYWwgc2V0dXAgKi8KLQkJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX0RFRkFVTFQpOwotCX0gZWxzZSB7Ci0JCS8qIFJlc2V0IHRoZSBkZXZpY2U7IGZ1bGwgc3BlZWQgbWF5IG1vcnBoIHRvIGhpZ2ggc3BlZWQgKi8KLQkJLyogRklYTUUgYSBVU0IgMi4wIGRldmljZSBtYXkgbW9ycGggaW50byBTdXBlclNwZWVkIG9uIHJlc2V0LiAqLwotCQlyZXR2YWwgPSBodWJfcG9ydF9yZXNldChodWIsIHBvcnQxLCB1ZGV2LCBkZWxheSk7Ci0JCWlmIChyZXR2YWwgPCAwKQkJLyogZXJyb3Igb3IgZGlzY29ubmVjdCAqLwotCQkJZ290byBmYWlsOwotCQkvKiBzdWNjZXNzLCBzcGVlZCBpcyBrbm93biAqLwotCX0KKwkvKiBSZXNldCB0aGUgZGV2aWNlOyBmdWxsIHNwZWVkIG1heSBtb3JwaCB0byBoaWdoIHNwZWVkICovCisJLyogRklYTUUgYSBVU0IgMi4wIGRldmljZSBtYXkgbW9ycGggaW50byBTdXBlclNwZWVkIG9uIHJlc2V0LiAqLworCXJldHZhbCA9IGh1Yl9wb3J0X3Jlc2V0KGh1YiwgcG9ydDEsIHVkZXYsIGRlbGF5KTsKKwlpZiAocmV0dmFsIDwgMCkJCS8qIGVycm9yIG9yIGRpc2Nvbm5lY3QgKi8KKwkJZ290byBmYWlsOworCS8qIHN1Y2Nlc3MsIHNwZWVkIGlzIGtub3duICovCisKIAlyZXR2YWwgPSAtRU5PREVWOwogCiAJaWYgKG9sZHNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOICYmIG9sZHNwZWVkICE9IHVkZXYtPnNwZWVkKSB7CkBAIC0yNzMyLDYgKzI3NDksMTEgQEAKIAkJdWRldi0+dHRwb3J0ID0gaGRldi0+dHRwb3J0OwogCX0gZWxzZSBpZiAodWRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gKIAkJCSYmIGhkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CisJCWlmICghaHViLT50dC5odWIpIHsKKwkJCWRldl9lcnIoJnVkZXYtPmRldiwgInBhcmVudCBodWIgaGFzIG5vIFRUXG4iKTsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGZhaWw7CisJCX0KIAkJdWRldi0+dHQgPSAmaHViLT50dDsKIAkJdWRldi0+dHRwb3J0ID0gcG9ydDE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKaW5kZXggNDRjNTk1NC4uODFjZTZhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCkBAIC00OCw2ICs0OCwxMCBAQAogCXsgVVNCX0RFVklDRSgweDA0YjQsIDB4MDUyNiksIC5kcml2ZXJfaW5mbyA9CiAJCQlVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUyB9LAogCisJLyogU2Ftc3VuZyBBbmRyb2lkIHBob25lIG1vZGVtIC0gSUQgY29uZmxpY3Qgd2l0aCBTUEgtSTUwMCAqLworCXsgVVNCX0RFVklDRSgweDA0ZTgsIDB4NjYwMSksIC5kcml2ZXJfaW5mbyA9CisJCQlVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUyB9LAorCiAJLyogUm9sYW5kIFNDLTg4MjAgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNTgyLCAweDAwMDcpLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCiAKQEAgLTY4LDYgKzcyLDEwIEBACiAJLyogTS1TeXN0ZW1zIEZsYXNoIERpc2sgUGlvbmVlcnMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwOGVjLCAweDEwMDApLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCiAKKwkvKiBLZXl0b3VjaCBRV0VSVFkgUGFuZWwga2V5Ym9hcmQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTI2LCAweDMzMzMpLCAuZHJpdmVyX2luZm8gPQorCQkJVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MgfSwKKwogCS8qIFgtUml0ZS9HcmV0YWctTWFjYmV0aCBFeWUtT25lIFBybyBkaXNwbGF5IGNvbG9yaW1ldGVyICovCiAJeyBVU0JfREVWSUNFKDB4MDk3MSwgMHgyMDAwKSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX05PX1NFVF9JTlRGIH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggMWRjOTczOS4uZDUwMDk5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTUwOSw3ICs1MDksNyBAQAogCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKIGNvbmZpZyBVU0JfR0FER0VUX0VHMjBUCi0JYm9vbGVhbiAiSW50ZWwgRUcyMFQoVG9wY2xpZmYpIFVTQiBEZXZpY2UgY29udHJvbGxlciIKKwlib29sZWFuICJJbnRlbCBFRzIwVCBQQ0gvT0tJIFNFTUlDT05EVUNUT1IgTUw3MjEzIElPSCBVREMiCiAJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKIAloZWxwCkBAIC01MjUsNiArNTI1LDExIEBACiAJICBUaGlzIGRyaXZlciBkb3NlIG5vdCBzdXBwb3J0IGludGVycnVwdCB0cmFuc2ZlciBvciBpc29jaHJvbm91cwogCSAgdHJhbnNmZXIgbW9kZXMuCiAKKwkgIFRoaXMgZHJpdmVyIGFsc28gY2FuIGJlIHVzZWQgZm9yIE9LSSBTRU1JQ09ORFVDVE9SJ3MgTUw3MjEzIHdoaWNoIGlzCisJICBmb3IgSVZJKEluLVZlaGljbGUgSW5mb3RhaW5tZW50KSB1c2UuCisJICBNTDcyMTMgaXMgY29tcGFuaW9uIGNoaXAgZm9yIEludGVsIEF0b20gRTZ4eCBzZXJpZXMuCisJICBNTDcyMTMgaXMgY29tcGxldGVseSBjb21wYXRpYmxlIGZvciBJbnRlbCBFRzIwVCBQQ0guCisKIGNvbmZpZyBVU0JfRUcyMFQKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gVVNCX0dBREdFVF9FRzIwVApAQCAtNTQxLDYgKzU0Niw4IEBACiAJICBjaTEzeHh4X3VkYyBjb3JlLgogCSAgVGhpcyBkcml2ZXIgZGVwZW5kcyBvbiBPVEcgZHJpdmVyIGZvciBQSFkgaW5pdGlhbGl6YXRpb24sCiAJICBjbG9jayBtYW5hZ2VtZW50LCBwb3dlcmluZyB1cCBWQlVTLCBhbmQgcG93ZXIgbWFuYWdlbWVudC4KKwkgIFRoaXMgZHJpdmVyIGlzIG5vdCBzdXBwb3J0ZWQgb24gYm9hcmRzIGxpa2UgdHJvdXQgd2hpY2gKKwkgIGhhcyBhbiBleHRlcm5hbCBQSFkuCiAKIAkgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCiAJICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiY2kxM3h4eF9tc20iIGFuZCBmb3JjZSBhbGwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKaW5kZXggMzE2NTZhMi4uYTFjNjdhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKQEAgLTc2LDEwICs3NiwyMSBAQAogCiAvKiBjb250cm9sIGVuZHBvaW50IGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCi1jdHJsX2VuZHB0X2Rlc2MgPSB7CitjdHJsX2VuZHB0X291dF9kZXNjID0gewogCS5iTGVuZ3RoICAgICAgICAgPSBVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAogCisJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX09VVCwKKwkuYm1BdHRyaWJ1dGVzICAgID0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCwKKwkud01heFBhY2tldFNpemUgID0gY3B1X3RvX2xlMTYoQ1RSTF9QQVlMT0FEX01BWCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitjdHJsX2VuZHB0X2luX2Rlc2MgPSB7CisJLmJMZW5ndGggICAgICAgICA9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyAgICA9IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wsCiAJLndNYXhQYWNrZXRTaXplICA9IGNwdV90b19sZTE2KENUUkxfUEFZTE9BRF9NQVgpLAogfTsKQEAgLTI2NSwxMCArMjc2LDEwIEBACiAJaHdfYmFuay5zaXplIC89IHNpemVvZih1MzIpOwogCiAJcmVnID0gaHdfYXJlYWQoQUJTX0RDQ1BBUkFNUywgRENDUEFSQU1TX0RFTikgPj4gZmZzX25yKERDQ1BBUkFNU19ERU4pOwotCWlmIChyZWcgPT0gMCB8fCByZWcgPiBFTkRQVF9NQVgpCi0JCXJldHVybiAtRU5PREVWOworCWh3X2VwX21heCA9IHJlZyAqIDI7ICAgLyogY2FjaGUgaHcgRU5EUFRfTUFYICovCiAKLQlod19lcF9tYXggPSByZWc7ICAgLyogY2FjaGUgaHcgRU5EUFRfTUFYICovCisJaWYgKGh3X2VwX21heCA9PSAwIHx8IGh3X2VwX21heCA+IEVORFBUX01BWCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBzZXR1cCBsb2NrIG1vZGUgPyAqLwogCkBAIC0xMTk3LDE2ICsxMjA4LDE3IEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUodWRjLT5sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IGh3X2VwX21heDsgaSsrKSB7Ci0JCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2ldOworCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXgvMjsgaSsrKSB7CisJCXN0cnVjdCBjaTEzeHh4X2VwICptRXBSeCA9ICZ1ZGMtPmNpMTN4eHhfZXBbaV07CisJCXN0cnVjdCBjaTEzeHh4X2VwICptRXBUeCA9ICZ1ZGMtPmNpMTN4eHhfZXBbaSArIGh3X2VwX21heC8yXTsKIAkJbiArPSBzY25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwKIAkJCSAgICAgICAiRVA9JTAyaTogUlg9JTA4WCBUWD0lMDhYXG4iLAotCQkJICAgICAgIGksICh1MzIpbUVwLT5xaFtSWF0uZG1hLCAodTMyKW1FcC0+cWhbVFhdLmRtYSk7CisJCQkgICAgICAgaSwgKHUzMiltRXBSeC0+cWguZG1hLCAodTMyKW1FcFR4LT5xaC5kbWEpOwogCQlmb3IgKGogPSAwOyBqIDwgKHNpemVvZihzdHJ1Y3QgY2kxM3h4eF9xaCkvc2l6ZW9mKHUzMikpOyBqKyspIHsKIAkJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIFBBR0VfU0laRSAtIG4sCiAJCQkJICAgICAgICIgJTA0WDogICAgJTA4WCAgICAlMDhYXG4iLCBqLAotCQkJCSAgICAgICAqKCh1MzIgKiltRXAtPnFoW1JYXS5wdHIgKyBqKSwKLQkJCQkgICAgICAgKigodTMyICopbUVwLT5xaFtUWF0ucHRyICsgaikpOworCQkJCSAgICAgICAqKCh1MzIgKiltRXBSeC0+cWgucHRyICsgaiksCisJCQkJICAgICAgICooKHUzMiAqKW1FcFR4LT5xaC5wdHIgKyBqKSk7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1ZGMtPmxvY2ssIGZsYWdzKTsKQEAgLTEyOTMsNyArMTMwNSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgKnB0ciA9IE5VTEw7CiAJc3RydWN0IGNpMTN4eHhfcmVxICpyZXEgPSBOVUxMOwotCXVuc2lnbmVkIGksIGosIGssIG4gPSAwLCBxU2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2kxM3h4eF90ZCkvc2l6ZW9mKHUzMik7CisJdW5zaWduZWQgaSwgaiwgbiA9IDAsIHFTaXplID0gc2l6ZW9mKHN0cnVjdCBjaTEzeHh4X3RkKS9zaXplb2YodTMyKTsKIAogCWRiZ190cmFjZSgiWyVzXSAlcFxuIiwgX19mdW5jX18sIGJ1Zik7CiAJaWYgKGF0dHIgPT0gTlVMTCB8fCBidWYgPT0gTlVMTCkgewpAQCAtMTMwMywyMiArMTMxNSwyMCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUodWRjLT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IGh3X2VwX21heDsgaSsrKQotCQlmb3IgKGsgPSBSWDsgayA8PSBUWDsgaysrKQotCQkJbGlzdF9mb3JfZWFjaChwdHIsICZ1ZGMtPmNpMTN4eHhfZXBbaV0ucWhba10ucXVldWUpCi0JCQl7Ci0JCQkJcmVxID0gbGlzdF9lbnRyeShwdHIsCi0JCQkJCQkgc3RydWN0IGNpMTN4eHhfcmVxLCBxdWV1ZSk7CisJCWxpc3RfZm9yX2VhY2gocHRyLCAmdWRjLT5jaTEzeHh4X2VwW2ldLnFoLnF1ZXVlKQorCQl7CisJCQlyZXEgPSBsaXN0X2VudHJ5KHB0ciwgc3RydWN0IGNpMTN4eHhfcmVxLCBxdWV1ZSk7CiAKKwkJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIFBBR0VfU0laRSAtIG4sCisJCQkJCSJFUD0lMDJpOiBURD0lMDhYICVzXG4iLAorCQkJCQlpICUgaHdfZXBfbWF4LzIsICh1MzIpcmVxLT5kbWEsCisJCQkJCSgoaSA8IGh3X2VwX21heC8yKSA/ICJSWCIgOiAiVFgiKSk7CisKKwkJCWZvciAoaiA9IDA7IGogPCBxU2l6ZTsgaisrKQogCQkJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIFBBR0VfU0laRSAtIG4sCi0JCQkJCSAgICAgICAiRVA9JTAyaTogVEQ9JTA4WCAlc1xuIiwKLQkJCQkJICAgICAgIGksICh1MzIpcmVxLT5kbWEsCi0JCQkJCSAgICAgICAoKGsgPT0gUlgpID8gIlJYIiA6ICJUWCIpKTsKLQotCQkJCWZvciAoaiA9IDA7IGogPCBxU2l6ZTsgaisrKQotCQkJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAotCQkJCQkJICAgICAgICIgJTA0WDogICAgJTA4WFxuIiwgaiwKLQkJCQkJCSAgICAgICAqKCh1MzIgKilyZXEtPnB0ciArIGopKTsKLQkJCX0KKwkJCQkJCSIgJTA0WDogICAgJTA4WFxuIiwgaiwKKwkJCQkJCSooKHUzMiAqKXJlcS0+cHRyICsgaikpOworCQl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1ZGMtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBuOwpAQCAtMTQ2NywxMiArMTQ3NywxMiBAQAogCSAqICBBdCB0aGlzIHBvaW50IGl0J3MgZ3VhcmFudGVlZCBleGNsdXNpdmUgYWNjZXNzIHRvIHFoZWFkCiAJICogIChlbmRwdCBpcyBub3QgcHJpbWVkKSBzbyBpdCdzIG5vIG5lZWQgdG8gdXNlIHRyaXB3aXJlCiAJICovCi0JbUVwLT5xaFttRXAtPmRpcl0ucHRyLT50ZC5uZXh0ICAgPSBtUmVxLT5kbWE7ICAgIC8qIFRFUk1JTkFURSA9IDAgKi8KLQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPnRkLnRva2VuICY9IH5URF9TVEFUVVM7ICAgLyogY2xlYXIgc3RhdHVzICovCisJbUVwLT5xaC5wdHItPnRkLm5leHQgICA9IG1SZXEtPmRtYTsgICAgLyogVEVSTUlOQVRFID0gMCAqLworCW1FcC0+cWgucHRyLT50ZC50b2tlbiAmPSB+VERfU1RBVFVTOyAgIC8qIGNsZWFyIHN0YXR1cyAqLwogCWlmIChtUmVxLT5yZXEuemVybyA9PSAwKQotCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCB8PSAgUUhfWkxUOworCQltRXAtPnFoLnB0ci0+Y2FwIHw9ICBRSF9aTFQ7CiAJZWxzZQotCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCAmPSB+UUhfWkxUOworCQltRXAtPnFoLnB0ci0+Y2FwICY9IH5RSF9aTFQ7CiAKIAl3bWIoKTsgICAvKiBzeW5jaHJvbml6ZSBiZWZvcmUgZXAgcHJpbWUgKi8KIApAQCAtMTU0MiwxMSArMTU1MiwxMSBAQAogCiAJaHdfZXBfZmx1c2gobUVwLT5udW0sIG1FcC0+ZGlyKTsKIAotCXdoaWxlICghbGlzdF9lbXB0eSgmbUVwLT5xaFttRXAtPmRpcl0ucXVldWUpKSB7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZtRXAtPnFoLnF1ZXVlKSkgewogCiAJCS8qIHBvcCBvbGRlc3QgcmVxdWVzdCAqLwogCQlzdHJ1Y3QgY2kxM3h4eF9yZXEgKm1SZXEgPSBcCi0JCQlsaXN0X2VudHJ5KG1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlLm5leHQsCisJCQlsaXN0X2VudHJ5KG1FcC0+cWgucXVldWUubmV4dCwKIAkJCQkgICBzdHJ1Y3QgY2kxM3h4eF9yZXEsIHF1ZXVlKTsKIAkJbGlzdF9kZWxfaW5pdCgmbVJlcS0+cXVldWUpOwogCQltUmVxLT5yZXEuc3RhdHVzID0gLUVTSFVURE9XTjsKQEAgLTE1NzEsOCArMTU4MSw2IEBACiB7CiAJc3RydWN0IHVzYl9lcCAqZXA7CiAJc3RydWN0IGNpMTN4eHggICAgKnVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBjaTEzeHh4LCBnYWRnZXQpOwotCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSBjb250YWluZXJfb2YoZ2FkZ2V0LT5lcDAsCi0JCQkJCSAgICAgIHN0cnVjdCBjaTEzeHh4X2VwLCBlcCk7CiAKIAl0cmFjZSgiJXAiLCBnYWRnZXQpOwogCkBAIC0xNTgzLDcgKzE1OTEsOCBAQAogCWdhZGdldF9mb3JfZWFjaF9lcChlcCwgZ2FkZ2V0KSB7CiAJCXVzYl9lcF9maWZvX2ZsdXNoKGVwKTsKIAl9Ci0JdXNiX2VwX2ZpZm9fZmx1c2goZ2FkZ2V0LT5lcDApOworCXVzYl9lcF9maWZvX2ZsdXNoKCZ1ZGMtPmVwMG91dC5lcCk7CisJdXNiX2VwX2ZpZm9fZmx1c2goJnVkYy0+ZXAwaW4uZXApOwogCiAJdWRjLT5kcml2ZXItPmRpc2Nvbm5lY3QoZ2FkZ2V0KTsKIApAQCAtMTU5MSwxMSArMTYwMCwxMiBAQAogCWdhZGdldF9mb3JfZWFjaF9lcChlcCwgZ2FkZ2V0KSB7CiAJCXVzYl9lcF9kaXNhYmxlKGVwKTsKIAl9Ci0JdXNiX2VwX2Rpc2FibGUoZ2FkZ2V0LT5lcDApOworCXVzYl9lcF9kaXNhYmxlKCZ1ZGMtPmVwMG91dC5lcCk7CisJdXNiX2VwX2Rpc2FibGUoJnVkYy0+ZXAwaW4uZXApOwogCi0JaWYgKG1FcC0+c3RhdHVzICE9IE5VTEwpIHsKLQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtPmVwMCwgbUVwLT5zdGF0dXMpOwotCQltRXAtPnN0YXR1cyA9IE5VTEw7CisJaWYgKHVkYy0+c3RhdHVzICE9IE5VTEwpIHsKKwkJdXNiX2VwX2ZyZWVfcmVxdWVzdCgmdWRjLT5lcDBpbi5lcCwgdWRjLT5zdGF0dXMpOworCQl1ZGMtPnN0YXR1cyA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNjE0LDcgKzE2MjQsNiBAQAogX19yZWxlYXNlcyh1ZGMtPmxvY2spCiBfX2FjcXVpcmVzKHVkYy0+bG9jaykKIHsKLQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gJnVkYy0+Y2kxM3h4eF9lcFswXTsKIAlpbnQgcmV0dmFsOwogCiAJdHJhY2UoIiVwIiwgdWRjKTsKQEAgLTE2MzUsMTEgKzE2NDQsMTUgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGRvbmU7CiAKLQlyZXR2YWwgPSB1c2JfZXBfZW5hYmxlKCZtRXAtPmVwLCAmY3RybF9lbmRwdF9kZXNjKTsKKwlyZXR2YWwgPSB1c2JfZXBfZW5hYmxlKCZ1ZGMtPmVwMG91dC5lcCwgJmN0cmxfZW5kcHRfb3V0X2Rlc2MpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKworCXJldHZhbCA9IHVzYl9lcF9lbmFibGUoJnVkYy0+ZXAwaW4uZXAsICZjdHJsX2VuZHB0X2luX2Rlc2MpOwogCWlmICghcmV0dmFsKSB7Ci0JCW1FcC0+c3RhdHVzID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoJm1FcC0+ZXAsIEdGUF9BVE9NSUMpOwotCQlpZiAobUVwLT5zdGF0dXMgPT0gTlVMTCkgewotCQkJdXNiX2VwX2Rpc2FibGUoJm1FcC0+ZXApOworCQl1ZGMtPnN0YXR1cyA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KCZ1ZGMtPmVwMGluLmVwLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHVkYy0+c3RhdHVzID09IE5VTEwpIHsKKwkJCXVzYl9lcF9kaXNhYmxlKCZ1ZGMtPmVwMG91dC5lcCk7CiAJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQl9CiAJfQpAQCAtMTY3MiwxNiArMTY4NSwxNyBAQAogCiAvKioKICAqIGlzcl9nZXRfc3RhdHVzX3Jlc3BvbnNlOiBnZXRfc3RhdHVzIHJlcXVlc3QgcmVzcG9uc2UKLSAqIEBlcDogICAgZW5kcG9pbnQKKyAqIEB1ZGM6IHVkYyBzdHJ1Y3QKICAqIEBzZXR1cDogc2V0dXAgcmVxdWVzdCBwYWNrZXQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgY29kZQogICovCi1zdGF0aWMgaW50IGlzcl9nZXRfc3RhdHVzX3Jlc3BvbnNlKHN0cnVjdCBjaTEzeHh4X2VwICptRXAsCitzdGF0aWMgaW50IGlzcl9nZXRfc3RhdHVzX3Jlc3BvbnNlKHN0cnVjdCBjaTEzeHh4ICp1ZGMsCiAJCQkJICAgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0dXApCiBfX3JlbGVhc2VzKG1FcC0+bG9jaykKIF9fYWNxdWlyZXMobUVwLT5sb2NrKQogeworCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5lcDBpbjsKIAlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSA9IE5VTEw7CiAJZ2ZwX3QgZ2ZwX2ZsYWdzID0gR0ZQX0FUT01JQzsKIAlpbnQgZGlyLCBudW0sIHJldHZhbDsKQEAgLTE3MzYsMjcgKzE3NTAsMjMgQEAKIAogLyoqCiAgKiBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlOiBxdWV1ZXMgdGhlIHN0YXR1cyBwaGFzZSBvZiBhIHNldHVwIHRyYW5zYXRpb24KLSAqIEBtRXA6IGVuZHBvaW50CisgKiBAdWRjOiB1ZGMgc3RydWN0CiAgKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUKICAqLwotc3RhdGljIGludCBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHN0cnVjdCBjaTEzeHh4X2VwICptRXApCitzdGF0aWMgaW50IGlzcl9zZXR1cF9zdGF0dXNfcGhhc2Uoc3RydWN0IGNpMTN4eHggKnVkYykKIF9fcmVsZWFzZXMobUVwLT5sb2NrKQogX19hY3F1aXJlcyhtRXAtPmxvY2spCiB7CiAJaW50IHJldHZhbDsKKwlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwOwogCi0JdHJhY2UoIiVwIiwgbUVwKTsKKwl0cmFjZSgiJXAiLCB1ZGMpOwogCi0JLyogbUVwIGlzIGFsd2F5cyB2YWxpZCAmIGNvbmZpZ3VyZWQgKi8KLQotCWlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkKLQkJbUVwLT5kaXIgPSAobUVwLT5kaXIgPT0gVFgpID8gUlggOiBUWDsKLQotCW1FcC0+c3RhdHVzLT5ub19pbnRlcnJ1cHQgPSAxOworCW1FcCA9ICh1ZGMtPmVwMF9kaXIgPT0gVFgpID8gJnVkYy0+ZXAwb3V0IDogJnVkYy0+ZXAwaW47CiAKIAlzcGluX3VubG9jayhtRXAtPmxvY2spOwotCXJldHZhbCA9IHVzYl9lcF9xdWV1ZSgmbUVwLT5lcCwgbUVwLT5zdGF0dXMsIEdGUF9BVE9NSUMpOworCXJldHZhbCA9IHVzYl9lcF9xdWV1ZSgmbUVwLT5lcCwgdWRjLT5zdGF0dXMsIEdGUF9BVE9NSUMpOwogCXNwaW5fbG9jayhtRXAtPmxvY2spOwogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTE3NzgsMTEgKzE3ODgsMTEgQEAKIAogCXRyYWNlKCIlcCIsIG1FcCk7CiAKLQlpZiAobGlzdF9lbXB0eSgmbUVwLT5xaFttRXAtPmRpcl0ucXVldWUpKQorCWlmIChsaXN0X2VtcHR5KCZtRXAtPnFoLnF1ZXVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBwb3Agb2xkZXN0IHJlcXVlc3QgKi8KLQltUmVxID0gbGlzdF9lbnRyeShtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZS5uZXh0LAorCW1SZXEgPSBsaXN0X2VudHJ5KG1FcC0+cWgucXVldWUubmV4dCwKIAkJCSAgc3RydWN0IGNpMTN4eHhfcmVxLCBxdWV1ZSk7CiAJbGlzdF9kZWxfaW5pdCgmbVJlcS0+cXVldWUpOwogCkBAIC0xNzk0LDEwICsxODA0LDEwIEBACiAKIAlkYmdfZG9uZShfdXNiX2FkZHIobUVwKSwgbVJlcS0+cHRyLT50b2tlbiwgcmV0dmFsKTsKIAotCWlmICghbGlzdF9lbXB0eSgmbUVwLT5xaFttRXAtPmRpcl0ucXVldWUpKSB7CisJaWYgKCFsaXN0X2VtcHR5KCZtRXAtPnFoLnF1ZXVlKSkgewogCQlzdHJ1Y3QgY2kxM3h4eF9yZXEqIG1SZXFFbnE7CiAKLQkJbVJlcUVucSA9IGxpc3RfZW50cnkobUVwLT5xaFttRXAtPmRpcl0ucXVldWUubmV4dCwKKwkJbVJlcUVucSA9IGxpc3RfZW50cnkobUVwLT5xaC5xdWV1ZS5uZXh0LAogCQkJCSAgc3RydWN0IGNpMTN4eHhfcmVxLCBxdWV1ZSk7CiAJCV9oYXJkd2FyZV9lbnF1ZXVlKG1FcCwgbVJlcUVucSk7CiAJfQpAQCAtMTgzNiwxNiArMTg0NiwxNCBAQAogCQlpbnQgdHlwZSwgbnVtLCBlcnIgPSAtRUlOVkFMOwogCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHJlcTsKIAotCiAJCWlmIChtRXAtPmRlc2MgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOyAgIC8qIG5vdCBjb25maWd1cmVkICovCiAKLQkJaWYgKChtRXAtPmRpciA9PSBSWCAmJiBod190ZXN0X2FuZF9jbGVhcl9jb21wbGV0ZShpKSkgfHwKLQkJICAgIChtRXAtPmRpciA9PSBUWCAmJiBod190ZXN0X2FuZF9jbGVhcl9jb21wbGV0ZShpICsgMTYpKSkgeworCQlpZiAoaHdfdGVzdF9hbmRfY2xlYXJfY29tcGxldGUoaSkpIHsKIAkJCWVyciA9IGlzcl90cl9jb21wbGV0ZV9sb3cobUVwKTsKIAkJCWlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkgewogCQkJCWlmIChlcnIgPiAwKSAgIC8qIG5lZWRzIHN0YXR1cyBwaGFzZSAqLwotCQkJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKG1FcCk7CisJCQkJCWVyciA9IGlzcl9zZXR1cF9zdGF0dXNfcGhhc2UodWRjKTsKIAkJCQlpZiAoZXJyIDwgMCkgewogCQkJCQlkYmdfZXZlbnQoX3VzYl9hZGRyKG1FcCksCiAJCQkJCQkgICJFUlJPUiIsIGVycik7CkBAIC0xODY2LDE1ICsxODc0LDIyIEBACiAJCQljb250aW51ZTsKIAkJfQogCisJCS8qCisJCSAqIEZsdXNoIGRhdGEgYW5kIGhhbmRzaGFrZSB0cmFuc2FjdGlvbnMgb2YgcHJldmlvdXMKKwkJICogc2V0dXAgcGFja2V0LgorCQkgKi8KKwkJX2VwX251a2UoJnVkYy0+ZXAwb3V0KTsKKwkJX2VwX251a2UoJnVkYy0+ZXAwaW4pOworCiAJCS8qIHJlYWRfc2V0dXBfcGFja2V0ICovCiAJCWRvIHsKIAkJCWh3X3Rlc3RfYW5kX3NldF9zZXR1cF9ndWFyZCgpOwotCQkJbWVtY3B5KCZyZXEsICZtRXAtPnFoW1JYXS5wdHItPnNldHVwLCBzaXplb2YocmVxKSk7CisJCQltZW1jcHkoJnJlcSwgJm1FcC0+cWgucHRyLT5zZXR1cCwgc2l6ZW9mKHJlcSkpOwogCQl9IHdoaWxlICghaHdfdGVzdF9hbmRfY2xlYXJfc2V0dXBfZ3VhcmQoKSk7CiAKIAkJdHlwZSA9IHJlcS5iUmVxdWVzdFR5cGU7CiAKLQkJbUVwLT5kaXIgPSAodHlwZSAmIFVTQl9ESVJfSU4pID8gVFggOiBSWDsKKwkJdWRjLT5lcDBfZGlyID0gKHR5cGUgJiBVU0JfRElSX0lOKSA/IFRYIDogUlg7CiAKIAkJZGJnX3NldHVwKF91c2JfYWRkcihtRXApLCAmcmVxKTsKIApAQCAtMTg5NSw3ICsxOTEwLDcgQEAKIAkJCQlpZiAoZXJyKQogCQkJCQlicmVhazsKIAkJCX0KLQkJCWVyciA9IGlzcl9zZXR1cF9zdGF0dXNfcGhhc2UobUVwKTsKKwkJCWVyciA9IGlzcl9zZXR1cF9zdGF0dXNfcGhhc2UodWRjKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9SRVFfR0VUX1NUQVRVUzoKIAkJCWlmICh0eXBlICE9IChVU0JfRElSX0lOfFVTQl9SRUNJUF9ERVZJQ0UpICAgJiYKQEAgLTE5MDUsNyArMTkyMCw3IEBACiAJCQlpZiAobGUxNl90b19jcHUocmVxLndMZW5ndGgpICE9IDIgfHwKIAkJCSAgICBsZTE2X3RvX2NwdShyZXEud1ZhbHVlKSAgIT0gMCkKIAkJCQlicmVhazsKLQkJCWVyciA9IGlzcl9nZXRfc3RhdHVzX3Jlc3BvbnNlKG1FcCwgJnJlcSk7CisJCQllcnIgPSBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZSh1ZGMsICZyZXEpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKIAkJCWlmICh0eXBlICE9IChVU0JfRElSX09VVHxVU0JfUkVDSVBfREVWSUNFKSkKQEAgLTE5MTYsNyArMTkzMSw3IEBACiAJCQllcnIgPSBod191c2Jfc2V0X2FkZHJlc3MoKHU4KWxlMTZfdG9fY3B1KHJlcS53VmFsdWUpKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7Ci0JCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKG1FcCk7CisJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUkVRX1NFVF9GRUFUVVJFOgogCQkJaWYgKHR5cGUgIT0gKFVTQl9ESVJfT1VUfFVTQl9SRUNJUF9FTkRQT0lOVCkgJiYKQEAgLTE5MzIsMTIgKzE5NDcsMTIgQEAKIAkJCXNwaW5fbG9jayh1ZGMtPmxvY2spOwogCQkJaWYgKGVycikKIAkJCQlicmVhazsKLQkJCWVyciA9IGlzcl9zZXR1cF9zdGF0dXNfcGhhc2UobUVwKTsKKwkJCWVyciA9IGlzcl9zZXR1cF9zdGF0dXNfcGhhc2UodWRjKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogZGVsZWdhdGU6CiAJCQlpZiAocmVxLndMZW5ndGggPT0gMCkgICAvKiBubyBkYXRhIHBoYXNlICovCi0JCQkJbUVwLT5kaXIgPSBUWDsKKwkJCQl1ZGMtPmVwMF9kaXIgPSBUWDsKIAogCQkJc3Bpbl91bmxvY2sodWRjLT5sb2NrKTsKIAkJCWVyciA9IHVkYy0+ZHJpdmVyLT5zZXR1cCgmdWRjLT5nYWRnZXQsICZyZXEpOwpAQCAtMTk2OCw3ICsxOTgzLDcgQEAKIAkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCiB7CiAJc3RydWN0IGNpMTN4eHhfZXAgKm1FcCA9IGNvbnRhaW5lcl9vZihlcCwgc3RydWN0IGNpMTN4eHhfZXAsIGVwKTsKLQlpbnQgZGlyZWN0aW9uLCByZXR2YWwgPSAwOworCWludCByZXR2YWwgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl0cmFjZSgiJXAsICVwIiwgZXAsIGRlc2MpOwpAQCAtMTk4Miw3ICsxOTk3LDcgQEAKIAogCW1FcC0+ZGVzYyA9IGRlc2M7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkKKwlpZiAoIWxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKQogCQl3YXJuKCJlbmFibGluZyBhIG5vbi1lbXB0eSBlbmRwb2ludCEiKTsKIAogCW1FcC0+ZGlyICA9IHVzYl9lbmRwb2ludF9kaXJfaW4oZGVzYykgPyBUWCA6IFJYOwpAQCAtMTk5MSwyOSArMjAwNiwyMiBAQAogCiAJbUVwLT5lcC5tYXhwYWNrZXQgPSBfX2NvbnN0YW50X2xlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKTsKIAotCWRpcmVjdGlvbiA9IG1FcC0+ZGlyOwotCWRvIHsKLQkJZGJnX2V2ZW50KF91c2JfYWRkcihtRXApLCAiRU5BQkxFIiwgMCk7CisJZGJnX2V2ZW50KF91c2JfYWRkcihtRXApLCAiRU5BQkxFIiwgMCk7CiAKLQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgPSAwOworCW1FcC0+cWgucHRyLT5jYXAgPSAwOwogCi0JCWlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkKLQkJCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwIHw9ICBRSF9JT1M7Ci0JCWVsc2UgaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQotCQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgJj0gflFIX01VTFQ7Ci0JCWVsc2UKLQkJCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwICY9IH5RSF9aTFQ7CisJaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKQorCQltRXAtPnFoLnB0ci0+Y2FwIHw9ICBRSF9JT1M7CisJZWxzZSBpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpCisJCW1FcC0+cWgucHRyLT5jYXAgJj0gflFIX01VTFQ7CisJZWxzZQorCQltRXAtPnFoLnB0ci0+Y2FwICY9IH5RSF9aTFQ7CiAKLQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgfD0KLQkJCShtRXAtPmVwLm1heHBhY2tldCA8PCBmZnNfbnIoUUhfTUFYX1BLVCkpICYgUUhfTUFYX1BLVDsKLQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT50ZC5uZXh0IHw9IFREX1RFUk1JTkFURTsgICAvKiBuZWVkZWQ/ICovCisJbUVwLT5xaC5wdHItPmNhcCB8PQorCQkobUVwLT5lcC5tYXhwYWNrZXQgPDwgZmZzX25yKFFIX01BWF9QS1QpKSAmIFFIX01BWF9QS1Q7CisJbUVwLT5xaC5wdHItPnRkLm5leHQgfD0gVERfVEVSTUlOQVRFOyAgIC8qIG5lZWRlZD8gKi8KIAotCQlyZXR2YWwgfD0gaHdfZXBfZW5hYmxlKG1FcC0+bnVtLCBtRXAtPmRpciwgbUVwLT50eXBlKTsKLQotCQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCi0JCQltRXAtPmRpciA9IChtRXAtPmRpciA9PSBUWCkgPyBSWCA6IFRYOwotCi0JfSB3aGlsZSAobUVwLT5kaXIgIT0gZGlyZWN0aW9uKTsKKwlyZXR2YWwgfD0gaHdfZXBfZW5hYmxlKG1FcC0+bnVtLCBtRXAtPmRpciwgbUVwLT50eXBlKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobUVwLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTIxNDYsNyArMjE1NCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUobUVwLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wgJiYKLQkgICAgIWxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkgeworCSAgICAhbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpIHsKIAkJX2VwX251a2UobUVwKTsKIAkJcmV0dmFsID0gLUVPVkVSRkxPVzsKIAkJd2FybigiZW5kcG9pbnQgY3RybCAlWCBudWtlZCIsIF91c2JfYWRkcihtRXApKTsKQEAgLTIxNzAsOSArMjE3OCw5IEBACiAJLyogcHVzaCByZXF1ZXN0ICovCiAJbVJlcS0+cmVxLnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAltUmVxLT5yZXEuYWN0dWFsID0gMDsKLQlsaXN0X2FkZF90YWlsKCZtUmVxLT5xdWV1ZSwgJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKTsKKwlsaXN0X2FkZF90YWlsKCZtUmVxLT5xdWV1ZSwgJm1FcC0+cWgucXVldWUpOwogCi0JaWYgKGxpc3RfaXNfc2luZ3VsYXIoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkKKwlpZiAobGlzdF9pc19zaW5ndWxhcigmbUVwLT5xaC5xdWV1ZSkpCiAJCXJldHZhbCA9IF9oYXJkd2FyZV9lbnF1ZXVlKG1FcCwgbVJlcSk7CiAKIAlpZiAocmV0dmFsID09IC1FQUxSRUFEWSkgewpAQCAtMjE5OSw3ICsyMjA3LDcgQEAKIAl0cmFjZSgiJXAsICVwIiwgZXAsIHJlcSk7CiAKIAlpZiAoZXAgPT0gTlVMTCB8fCByZXEgPT0gTlVMTCB8fCBtRXAtPmRlc2MgPT0gTlVMTCB8fAotCSAgICBsaXN0X2VtcHR5KCZtUmVxLT5xdWV1ZSkgIHx8IGxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkKKwkgICAgbGlzdF9lbXB0eSgmbVJlcS0+cXVldWUpICB8fCBsaXN0X2VtcHR5KCZtRXAtPnFoLnF1ZXVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShtRXAtPmxvY2ssIGZsYWdzKTsKQEAgLTIyNDQsNyArMjI1Miw3IEBACiAjaWZuZGVmIFNUQUxMX0lOCiAJLyogZ19maWxlX3N0b3JhZ2UgTVMgY29tcGxpYW50IGJ1dCBnX3plcm8gZmFpbHMgY2hhcHRlciA5IGNvbXBsaWFuY2UgKi8KIAlpZiAodmFsdWUgJiYgbUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsgJiYgbUVwLT5kaXIgPT0gVFggJiYKLQkgICAgIWxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkgeworCSAgICAhbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShtRXAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQpAQCAtMjM1NSw3ICsyMzYzLDcgQEAKIAkJaWYgKGlzX2FjdGl2ZSkgewogCQkJcG1fcnVudGltZV9nZXRfc3luYygmX2dhZGdldC0+ZGV2KTsKIAkJCWh3X2RldmljZV9yZXNldCh1ZGMpOwotCQkJaHdfZGV2aWNlX3N0YXRlKHVkYy0+Y2kxM3h4eF9lcFswXS5xaFtSWF0uZG1hKTsKKwkJCWh3X2RldmljZV9zdGF0ZSh1ZGMtPmVwMG91dC5xaC5kbWEpOwogCQl9IGVsc2UgewogCQkJaHdfZGV2aWNlX3N0YXRlKDApOwogCQkJaWYgKHVkYy0+dWRjX2RyaXZlci0+bm90aWZ5X2V2ZW50KQpAQCAtMjM5MCw3ICsyMzk4LDggQEAKIAkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpCiB7CiAJc3RydWN0IGNpMTN4eHggKnVkYyA9IF91ZGM7Ci0JdW5zaWduZWQgbG9uZyBpLCBrLCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpLCBqOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCiAJdHJhY2UoIiVwIiwgZHJpdmVyKTsKQEAgLTI0MjcsNDUgKzI0MzYsNDYgQEAKIAogCWluZm8oImh3X2VwX21heCA9ICVkIiwgaHdfZXBfbWF4KTsKIAotCXVkYy0+ZHJpdmVyID0gZHJpdmVyOwogCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCiAJcmV0dmFsID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgaHdfZXBfbWF4OyBpKyspIHsKLQkJc3RydWN0IGNpMTN4eHhfZXAgKm1FcCA9ICZ1ZGMtPmNpMTN4eHhfZXBbaV07CisJZm9yIChpID0gMDsgaSA8IGh3X2VwX21heC8yOyBpKyspIHsKKwkJZm9yIChqID0gUlg7IGogPD0gVFg7IGorKykgeworCQkJaW50IGsgPSBpICsgaiAqIGh3X2VwX21heC8yOworCQkJc3RydWN0IGNpMTN4eHhfZXAgKm1FcCA9ICZ1ZGMtPmNpMTN4eHhfZXBba107CiAKLQkJc2NucHJpbnRmKG1FcC0+bmFtZSwgc2l6ZW9mKG1FcC0+bmFtZSksICJlcCVpIiwgKGludClpKTsKKwkJCXNjbnByaW50ZihtRXAtPm5hbWUsIHNpemVvZihtRXAtPm5hbWUpLCAiZXAlaSVzIiwgaSwKKwkJCQkJKGogPT0gVFgpICA/ICJpbiIgOiAib3V0Iik7CiAKLQkJbUVwLT5sb2NrICAgICAgICAgPSB1ZGMtPmxvY2s7Ci0JCW1FcC0+ZGV2aWNlICAgICAgID0gJnVkYy0+Z2FkZ2V0LmRldjsKLQkJbUVwLT50ZF9wb29sICAgICAgPSB1ZGMtPnRkX3Bvb2w7CisJCQltRXAtPmxvY2sgICAgICAgICA9IHVkYy0+bG9jazsKKwkJCW1FcC0+ZGV2aWNlICAgICAgID0gJnVkYy0+Z2FkZ2V0LmRldjsKKwkJCW1FcC0+dGRfcG9vbCAgICAgID0gdWRjLT50ZF9wb29sOwogCi0JCW1FcC0+ZXAubmFtZSAgICAgID0gbUVwLT5uYW1lOwotCQltRXAtPmVwLm9wcyAgICAgICA9ICZ1c2JfZXBfb3BzOwotCQltRXAtPmVwLm1heHBhY2tldCA9IENUUkxfUEFZTE9BRF9NQVg7CisJCQltRXAtPmVwLm5hbWUgICAgICA9IG1FcC0+bmFtZTsKKwkJCW1FcC0+ZXAub3BzICAgICAgID0gJnVzYl9lcF9vcHM7CisJCQltRXAtPmVwLm1heHBhY2tldCA9IENUUkxfUEFZTE9BRF9NQVg7CiAKLQkJLyogdGhpcyBhbGxvY2F0aW9uIGNhbm5vdCBiZSByYW5kb20gKi8KLQkJZm9yIChrID0gUlg7IGsgPD0gVFg7IGsrKykgewotCQkJSU5JVF9MSVNUX0hFQUQoJm1FcC0+cWhba10ucXVldWUpOworCQkJSU5JVF9MSVNUX0hFQUQoJm1FcC0+cWgucXVldWUpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1ZGMtPmxvY2ssIGZsYWdzKTsKLQkJCW1FcC0+cWhba10ucHRyID0gZG1hX3Bvb2xfYWxsb2ModWRjLT5xaF9wb29sLAotCQkJCQkJCUdGUF9LRVJORUwsCi0JCQkJCQkJJm1FcC0+cWhba10uZG1hKTsKKwkJCW1FcC0+cWgucHRyID0gZG1hX3Bvb2xfYWxsb2ModWRjLT5xaF9wb29sLCBHRlBfS0VSTkVMLAorCQkJCQkmbUVwLT5xaC5kbWEpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUodWRjLT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAobUVwLT5xaFtrXS5wdHIgPT0gTlVMTCkKKwkJCWlmIChtRXAtPnFoLnB0ciA9PSBOVUxMKQogCQkJCXJldHZhbCA9IC1FTk9NRU07CiAJCQllbHNlCi0JCQkJbWVtc2V0KG1FcC0+cWhba10ucHRyLCAwLAotCQkJCSAgICAgICBzaXplb2YoKm1FcC0+cWhba10ucHRyKSk7Ci0JCX0KLQkJaWYgKGkgPT0gMCkKLQkJCXVkYy0+Z2FkZ2V0LmVwMCA9ICZtRXAtPmVwOwotCQllbHNlCisJCQkJbWVtc2V0KG1FcC0+cWgucHRyLCAwLCBzaXplb2YoKm1FcC0+cWgucHRyKSk7CisKKwkJCS8qIHNraXAgZXAwIG91dCBhbmQgaW4gZW5kcG9pbnRzICovCisJCQlpZiAoaSA9PSAwKQorCQkJCWNvbnRpbnVlOworCiAJCQlsaXN0X2FkZF90YWlsKCZtRXAtPmVwLmVwX2xpc3QsICZ1ZGMtPmdhZGdldC5lcF9saXN0KTsKKwkJfQogCX0KIAlpZiAocmV0dmFsKQogCQlnb3RvIGRvbmU7CiAKKwl1ZGMtPmdhZGdldC5lcDAgPSAmdWRjLT5lcDBpbi5lcDsKIAkvKiBiaW5kIGdhZGdldCAqLwogCWRyaXZlci0+ZHJpdmVyLmJ1cyAgICAgPSBOVUxMOwogCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CkBAIC0yNDc5LDYgKzI0ODksNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJdWRjLT5kcml2ZXIgPSBkcml2ZXI7CiAJcG1fcnVudGltZV9nZXRfc3luYygmdWRjLT5nYWRnZXQuZGV2KTsKIAlpZiAodWRjLT51ZGNfZHJpdmVyLT5mbGFncyAmIENJMTNYWFhfUFVMTFVQX09OX1ZCVVMpIHsKIAkJaWYgKHVkYy0+dmJ1c19hY3RpdmUpIHsKQEAgLTI0OTAsMTQgKzI1MDEsMTIgQEAKIAkJfQogCX0KIAotCXJldHZhbCA9IGh3X2RldmljZV9zdGF0ZSh1ZGMtPmNpMTN4eHhfZXBbMF0ucWhbUlhdLmRtYSk7CisJcmV0dmFsID0gaHdfZGV2aWNlX3N0YXRlKHVkYy0+ZXAwb3V0LnFoLmRtYSk7CiAJaWYgKHJldHZhbCkKIAkJcG1fcnVudGltZV9wdXRfc3luYygmdWRjLT5nYWRnZXQuZGV2KTsKIAogIGRvbmU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1ZGMtPmxvY2ssIGZsYWdzKTsKLQlpZiAocmV0dmFsKQotCQl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlcik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9wcm9iZV9kcml2ZXIpOwpAQCAtMjUxMCw3ICsyNTE5LDcgQEAKIGludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQogewogCXN0cnVjdCBjaTEzeHh4ICp1ZGMgPSBfdWRjOwotCXVuc2lnbmVkIGxvbmcgaSwgaywgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBpLCBmbGFnczsKIAogCXRyYWNlKCIlcCIsIGRyaXZlcik7CiAKQEAgLTI1NDYsMTcgKzI1NTUsMTQgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaHdfZXBfbWF4OyBpKyspIHsKIAkJc3RydWN0IGNpMTN4eHhfZXAgKm1FcCA9ICZ1ZGMtPmNpMTN4eHhfZXBbaV07CiAKLQkJaWYgKGkgPT0gMCkKLQkJCXVkYy0+Z2FkZ2V0LmVwMCA9IE5VTEw7Ci0JCWVsc2UgaWYgKCFsaXN0X2VtcHR5KCZtRXAtPmVwLmVwX2xpc3QpKQorCQlpZiAoIWxpc3RfZW1wdHkoJm1FcC0+ZXAuZXBfbGlzdCkpCiAJCQlsaXN0X2RlbF9pbml0KCZtRXAtPmVwLmVwX2xpc3QpOwogCi0JCWZvciAoayA9IFJYOyBrIDw9IFRYOyBrKyspCi0JCQlpZiAobUVwLT5xaFtrXS5wdHIgIT0gTlVMTCkKLQkJCQlkbWFfcG9vbF9mcmVlKHVkYy0+cWhfcG9vbCwKLQkJCQkJICAgICAgbUVwLT5xaFtrXS5wdHIsIG1FcC0+cWhba10uZG1hKTsKKwkJaWYgKG1FcC0+cWgucHRyICE9IE5VTEwpCisJCQlkbWFfcG9vbF9mcmVlKHVkYy0+cWhfcG9vbCwgbUVwLT5xaC5wdHIsIG1FcC0+cWguZG1hKTsKIAl9CiAKKwl1ZGMtPmdhZGdldC5lcDAgPSBOVUxMOwogCXVkYy0+ZHJpdmVyID0gTlVMTDsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5oCmluZGV4IGY2MWZlZDAuLmEyNDkyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBERUZJTkUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgQ0kxM1hYWF9QQUdFX1NJWkUgIDQwOTZ1bCAvKiBwYWdlIHNpemUgZm9yIFREJ3MgKi8KLSNkZWZpbmUgRU5EUFRfTUFYICAgICAgICAgICgxNikKKyNkZWZpbmUgRU5EUFRfTUFYICAgICAgICAgICgzMikKICNkZWZpbmUgQ1RSTF9QQVlMT0FEX01BWCAgICg2NCkKICNkZWZpbmUgUlggICAgICAgICgwKSAgLyogc2ltaWxhciB0byBVU0JfRElSX09VVCBidXQgY2FuIGJlIHVzZWQgYXMgYW4gaW5kZXggKi8KICNkZWZpbmUgVFggICAgICAgICgxKSAgLyogc2ltaWxhciB0byBVU0JfRElSX0lOICBidXQgY2FuIGJlIHVzZWQgYXMgYW4gaW5kZXggKi8KQEAgLTg4LDggKzg4LDcgQEAKIAkJc3RydWN0IGxpc3RfaGVhZCAgIHF1ZXVlOwogCQlzdHJ1Y3QgY2kxM3h4eF9xaCAqcHRyOwogCQlkbWFfYWRkcl90ICAgICAgICAgZG1hOwotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFoWzJdOwotCXN0cnVjdCB1c2JfcmVxdWVzdCAgICAgICAgICAgICAgICAgICAgKnN0YXR1czsKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxaDsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWRnZTsKIAogCS8qIGdsb2JhbCByZXNvdXJjZXMgKi8KQEAgLTExOSw5ICsxMTgsMTMgQEAKIAogCXN0cnVjdCBkbWFfcG9vbCAgICAgICAgICAgKnFoX3Bvb2w7ICAgLyogRE1BIHBvb2wgZm9yIHF1ZXVlIGhlYWRzICovCiAJc3RydWN0IGRtYV9wb29sICAgICAgICAgICAqdGRfcG9vbDsgICAvKiBETUEgcG9vbCBmb3IgdHJhbnNmZXIgZGVzY3MgKi8KKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgICAgICAgICpzdGF0dXM7ICAgIC8qIGVwMCBzdGF0dXMgcmVxdWVzdCAqLwogCiAJc3RydWN0IHVzYl9nYWRnZXQgICAgICAgICAgZ2FkZ2V0OyAgICAgLyogVVNCIHNsYXZlIGRldmljZSAqLwogCXN0cnVjdCBjaTEzeHh4X2VwICAgICAgICAgIGNpMTN4eHhfZXBbRU5EUFRfTUFYXTsgLyogZXh0ZW5kZWQgZW5kcHRzICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgZXAwX2RpcjsgICAgLyogZXAwIGRpcmVjdGlvbiAqLworI2RlZmluZSBlcDBvdXQgY2kxM3h4eF9lcFswXQorI2RlZmluZSBlcDBpbiAgY2kxM3h4eF9lcFsxNl0KIAogCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAgKmRyaXZlcjsgICAgIC8qIDNyZCBwYXJ0eSBnYWRnZXQgZHJpdmVyICovCiAJc3RydWN0IGNpMTN4eHhfdWRjX2RyaXZlciAqdWRjX2RyaXZlcjsgLyogZGV2aWNlIGNvbnRyb2xsZXIgZHJpdmVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKaW5kZXggZjZmZjg0NS4uMWJhNGJlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwpAQCAtOTI4LDggKzkyOCw5IEBACiAJCSAqLwogCQlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0VHlwZSAmIFVTQl9SRUNJUF9NQVNLKSB7CiAJCWNhc2UgVVNCX1JFQ0lQX0lOVEVSRkFDRToKLQkJCWlmIChjZGV2LT5jb25maWcpCi0JCQkJZiA9IGNkZXYtPmNvbmZpZy0+aW50ZXJmYWNlW2ludGZdOworCQkJaWYgKCFjZGV2LT5jb25maWcgfHwgd19pbmRleCA+PSBNQVhfQ09ORklHX0lOVEVSRkFDRVMpCisJCQkJYnJlYWs7CisJCQlmID0gY2Rldi0+Y29uZmlnLT5pbnRlcmZhY2VbaW50Zl07CiAJCQlicmVhazsKIAogCQljYXNlIFVTQl9SRUNJUF9FTkRQT0lOVDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbWFzc19zdG9yYWdlLmMKaW5kZXggYjVkYmIyMy4uNmQ4ZTUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbWFzc19zdG9yYWdlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbWFzc19zdG9yYWdlLmMKQEAgLTI5Myw2ICsyOTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY29tcG9zaXRlLmg+CiAKICNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKIApAQCAtMjc2Myw3ICsyNzY0LDcgQEAKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCQljb21tb24tPmZyZWVfc3RvcmFnZV9vbl9yZWxlYXNlID0gMTsKIAl9IGVsc2UgewotCQltZW1zZXQoY29tbW9uLCAwLCBzaXplb2YgY29tbW9uKTsKKwkJbWVtc2V0KGNvbW1vbiwgMCwgc2l6ZW9mICpjb21tb24pOwogCQljb21tb24tPmZyZWVfc3RvcmFnZV9vbl9yZWxlYXNlID0gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKaW5kZXggM2M2ZTFhMC4uNWUxNDk1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKQEAgLTM0NiwxNCArMzQ2LDE5IEBACiAKIAkJaWYgKHVubGlrZWx5KCFza2IpKQogCQkJYnJlYWs7Ci0JCXNrYl9hZGRfcnhfZnJhZyhza2IsIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MsIHBhZ2UsIDAsCi0JCQkJcmVxLT5hY3R1YWwpOworCisJCWlmIChza2ItPmxlbiA9PSAwKSB7IC8qIEZpcnN0IGZyYWdtZW50ICovCisJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfUEhPTkVUKTsKKwkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJCQkvKiBDYW4ndCB1c2UgcHNrYl9wdWxsKCkgb24gcGFnZSBpbiBJUlEgKi8KKwkJCW1lbWNweShza2JfcHV0KHNrYiwgMSksIHBhZ2VfYWRkcmVzcyhwYWdlKSwgMSk7CisJCX0KKworCQlza2JfYWRkX3J4X2ZyYWcoc2tiLCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzLCBwYWdlLAorCQkJCXNrYi0+bGVuID09IDAsIHJlcS0+YWN0dWFsKTsKIAkJcGFnZSA9IE5VTEw7CiAKIAkJaWYgKHJlcS0+YWN0dWFsIDwgcmVxLT5sZW5ndGgpIHsgLyogTGFzdCBmcmFnbWVudCAqLwotCQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX1BIT05FVCk7Ci0JCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCQkJcHNrYl9wdWxsKHNrYiwgMSk7CiAJCQlza2ItPmRldiA9IGRldjsKIAkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jCmluZGV4IDBjOGRkODEuLmIxMjBkYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3BjaF91ZGMuYwpAQCAtMTk4LDEwICsxOTgsMTAgQEAKICNkZWZpbmUgUENIX1VEQ19CUkxFTgkJMHgwRgkvKiBCdXJzdCBsZW5ndGggKi8KICNkZWZpbmUgUENIX1VEQ19USExFTgkJMHgxRgkvKiBUaHJlc2hvbGQgbGVuZ3RoICovCiAvKiBWYWx1ZSBvZiBFUCBCdWZmZXIgU2l6ZSAqLwotI2RlZmluZSBVRENfRVAwSU5fQlVGRl9TSVpFCTY0Ci0jZGVmaW5lIFVEQ19FUElOX0JVRkZfU0laRQk1MTIKLSNkZWZpbmUgVURDX0VQME9VVF9CVUZGX1NJWkUJNjQKLSNkZWZpbmUgVURDX0VQT1VUX0JVRkZfU0laRQk1MTIKKyNkZWZpbmUgVURDX0VQMElOX0JVRkZfU0laRQkxNgorI2RlZmluZSBVRENfRVBJTl9CVUZGX1NJWkUJMjU2CisjZGVmaW5lIFVEQ19FUDBPVVRfQlVGRl9TSVpFCTE2CisjZGVmaW5lIFVEQ19FUE9VVF9CVUZGX1NJWkUJMjU2CiAvKiBWYWx1ZSBvZiBFUCBtYXhpbXVtIHBhY2tldCBzaXplICovCiAjZGVmaW5lIFVEQ19FUDBJTl9NQVhfUEtUX1NJWkUJNjQKICNkZWZpbmUgVURDX0VQME9VVF9NQVhfUEtUX1NJWkUJNjQKQEAgLTM1MSw3ICszNTEsNyBAQAogCXN0cnVjdCBwY2lfcG9vbAkJKmRhdGFfcmVxdWVzdHM7CiAJc3RydWN0IHBjaV9wb29sCQkqc3RwX3JlcXVlc3RzOwogCWRtYV9hZGRyX3QJCQlkbWFfYWRkcjsKLQl1bnNpZ25lZCBsb25nCQkJZXAwb3V0X2J1Zls2NF07CisJdm9pZAkJCQkqZXAwb3V0X2J1ZjsKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CQlzZXR1cF9kYXRhOwogCXVuc2lnbmVkIGxvbmcJCQlwaHlzX2FkZHI7CiAJdm9pZCBfX2lvbWVtCQkJKmJhc2VfYWRkcjsKQEAgLTM2MSw2ICszNjEsOCBAQAogCiAjZGVmaW5lIFBDSF9VRENfUENJX0JBUgkJCTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FRzIwVF9VREMJMHg4ODA4CisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUk9ITQkJMHgxMERCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUw3MjEzX0lPSF9VREMJMHg4MDFECiAKIHN0YXRpYyBjb25zdCBjaGFyCWVwMF9zdHJpbmdbXSA9ICJlcDBpbiI7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHVkY19zdGFsbF9zcGlubG9jayk7CS8qIHN0YWxsIHNwaW4gbG9jayAqLwpAQCAtMTIxOSwxMSArMTIyMSwxMSBAQAogCWRldiA9IGVwLT5kZXY7CiAJaWYgKHJlcS0+ZG1hX21hcHBlZCkgewogCQlpZiAoZXAtPmluKQotCQkJcGNpX3VubWFwX3NpbmdsZShkZXYtPnBkZXYsIHJlcS0+cmVxLmRtYSwKLQkJCQkJIHJlcS0+cmVxLmxlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKCZkZXYtPnBkZXYtPmRldiwgcmVxLT5yZXEuZG1hLAorCQkJCQkgcmVxLT5yZXEubGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKIAkJZWxzZQotCQkJcGNpX3VubWFwX3NpbmdsZShkZXYtPnBkZXYsIHJlcS0+cmVxLmRtYSwKLQkJCQkJIHJlcS0+cmVxLmxlbmd0aCwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWRtYV91bm1hcF9zaW5nbGUoJmRldi0+cGRldi0+ZGV2LCByZXEtPnJlcS5kbWEsCisJCQkJCSByZXEtPnJlcS5sZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7CiAJCXJlcS0+ZG1hX21hcHBlZCA9IDA7CiAJCXJlcS0+cmVxLmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CiAJfQpAQCAtMTQxNCw3ICsxNDE2LDYgQEAKIAogCXBjaF91ZGNfY2xlYXJfZG1hKGVwLT5kZXYsIERNQV9ESVJfUlgpOwogCXRkX2RhdGEgPSByZXEtPnRkX2RhdGE7Ci0JZXAtPnRkX2RhdGEgPSByZXEtPnRkX2RhdGE7CiAJLyogU2V0IHRoZSBzdGF0dXMgYml0cyBmb3IgYWxsIGRlc2NyaXB0b3JzICovCiAJd2hpbGUgKDEpIHsKIAkJdGRfZGF0YS0+c3RhdHVzID0gKHRkX2RhdGEtPnN0YXR1cyAmIH5QQ0hfVURDX0JVRkZfU1RTKSB8CkBAIC0xNjEzLDE1ICsxNjE0LDE5IEBACiAJaWYgKHVzYnJlcS0+bGVuZ3RoICYmCiAJICAgICgodXNicmVxLT5kbWEgPT0gRE1BX0FERFJfSU5WQUxJRCkgfHwgIXVzYnJlcS0+ZG1hKSkgewogCQlpZiAoZXAtPmluKQotCQkJdXNicmVxLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShkZXYtPnBkZXYsIHVzYnJlcS0+YnVmLAotCQkJCQl1c2JyZXEtPmxlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CisJCQl1c2JyZXEtPmRtYSA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPnBkZXYtPmRldiwKKwkJCQkJCSAgICAgdXNicmVxLT5idWYsCisJCQkJCQkgICAgIHVzYnJlcS0+bGVuZ3RoLAorCQkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKIAkJZWxzZQotCQkJdXNicmVxLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShkZXYtPnBkZXYsIHVzYnJlcS0+YnVmLAotCQkJCQl1c2JyZXEtPmxlbmd0aCwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXVzYnJlcS0+ZG1hID0gZG1hX21hcF9zaW5nbGUoJmRldi0+cGRldi0+ZGV2LAorCQkJCQkJICAgICB1c2JyZXEtPmJ1ZiwKKwkJCQkJCSAgICAgdXNicmVxLT5sZW5ndGgsCisJCQkJCQkgICAgIERNQV9GUk9NX0RFVklDRSk7CiAJCXJlcS0+ZG1hX21hcHBlZCA9IDE7CiAJfQogCWlmICh1c2JyZXEtPmxlbmd0aCA+IDApIHsKLQkJcmV0dmFsID0gcHJlcGFyZV9kbWEoZXAsIHJlcSwgZ2ZwKTsKKwkJcmV0dmFsID0gcHJlcGFyZV9kbWEoZXAsIHJlcSwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXR2YWwpCiAJCQlnb3RvIHByb2JlX2VuZDsKIAl9CkBAIC0xNjQ2LDcgKzE2NTEsNiBAQAogCQkJcGNoX3VkY193YWl0X2VwX3N0YWxsKGVwKTsKIAkJCXBjaF91ZGNfZXBfY2xlYXJfbmFrKGVwKTsKIAkJCXBjaF91ZGNfZW5hYmxlX2VwX2ludGVycnVwdHMoZXAtPmRldiwgKDEgPDwgZXAtPm51bSkpOwotCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9UWCk7CiAJCX0KIAl9CiAJLyogTm93IGFkZCB0aGlzIHJlcXVlc3QgdG8gdGhlIGVwJ3MgcGVuZGluZyByZXF1ZXN0cyAqLwpAQCAtMTkyNiw2ICsxOTMwLDcgQEAKIAkgICAgUENIX1VEQ19CU19ETUFfRE9ORSkKIAkJcmV0dXJuOwogCXBjaF91ZGNfY2xlYXJfZG1hKGVwLT5kZXYsIERNQV9ESVJfUlgpOworCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCAwKTsKIAlpZiAoKHJlcS0+dGRfZGF0YV9sYXN0LT5zdGF0dXMgJiBQQ0hfVURDX1JYVFhfU1RTKSAhPQogCSAgICBQQ0hfVURDX1JUU19TVUNDKSB7CiAJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiSW52YWxpZCBSWFRYIHN0YXR1cyAoMHglMDh4KSAiCkBAIC0xOTYzLDcgKzE5NjgsNyBAQAogCXUzMgllcHN0czsKIAlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CiAKLQllcCA9ICZkZXYtPmVwWzIqZXBfbnVtXTsKKwllcCA9ICZkZXYtPmVwW1VEQ19FUElOX0lEWChlcF9udW0pXTsKIAllcHN0cyA9IGVwLT5lcHN0czsKIAllcC0+ZXBzdHMgPSAwOwogCkBAIC0yMDA4LDcgKzIwMTMsNyBAQAogCXN0cnVjdCBwY2hfdWRjX2VwCQkqZXA7CiAJc3RydWN0IHBjaF91ZGNfcmVxdWVzdAkJKnJlcSA9IE5VTEw7CiAKLQllcCA9ICZkZXYtPmVwWzIqZXBfbnVtICsgMV07CisJZXAgPSAmZGV2LT5lcFtVRENfRVBPVVRfSURYKGVwX251bSldOwogCWVwc3RzID0gZXAtPmVwc3RzOwogCWVwLT5lcHN0cyA9IDA7CiAKQEAgLTIwMjUsMTAgKzIwMzAsMTEgQEAKIAl9CiAJaWYgKGVwc3RzICYgVURDX0VQU1RTX0hFKQogCQlyZXR1cm47Ci0JaWYgKGVwc3RzICYgVURDX0VQU1RTX1JTUykKKwlpZiAoZXBzdHMgJiBVRENfRVBTVFNfUlNTKSB7CiAJCXBjaF91ZGNfZXBfc2V0X3N0YWxsKGVwKTsKIAkJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LAogCQkJCQkgICAgIFBDSF9VRENfRVBJTlQoZXAtPmluLCBlcC0+bnVtKSk7CisJfQogCWlmIChlcHN0cyAmIFVEQ19FUFNUU19SQ1MpIHsKIAkJaWYgKCFkZXYtPnByb3Rfc3RhbGwpIHsKIAkJCXBjaF91ZGNfZXBfY2xlYXJfc3RhbGwoZXApOwpAQCAtMjA2MCw4ICsyMDY2LDEwIEBACiB7CiAJdTMyCWVwc3RzOwogCXN0cnVjdCBwY2hfdWRjX2VwCSplcDsKKwlzdHJ1Y3QgcGNoX3VkY19lcAkqZXBfb3V0OwogCiAJZXAgPSAmZGV2LT5lcFtVRENfRVAwSU5fSURYXTsKKwllcF9vdXQgPSAmZGV2LT5lcFtVRENfRVAwT1VUX0lEWF07CiAJZXBzdHMgPSBlcC0+ZXBzdHM7CiAJZXAtPmVwc3RzID0gMDsKIApAQCAtMjA3Myw4ICsyMDgxLDE2IEBACiAJCXJldHVybjsKIAlpZiAoZXBzdHMgJiBVRENfRVBTVFNfSEUpCiAJCXJldHVybjsKLQlpZiAoKGVwc3RzICYgVURDX0VQU1RTX1REQykgJiYgKCFkZXYtPnN0YWxsKSkKKwlpZiAoKGVwc3RzICYgVURDX0VQU1RTX1REQykgJiYgKCFkZXYtPnN0YWxsKSkgewogCQlwY2hfdWRjX2NvbXBsZXRlX3RyYW5zZmVyKGVwKTsKKwkJcGNoX3VkY19jbGVhcl9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJZXBfb3V0LT50ZF9kYXRhLT5zdGF0dXMgPSAoZXBfb3V0LT50ZF9kYXRhLT5zdGF0dXMgJgorCQkJCQl+UENIX1VEQ19CVUZGX1NUUykgfAorCQkJCQlQQ0hfVURDX0JTX0hTVF9SRFk7CisJCXBjaF91ZGNfZXBfY2xlYXJfbmFrKGVwX291dCk7CisJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOworCQlwY2hfdWRjX2VwX3NldF9ycmR5KGVwX291dCk7CisJfQogCS8qIE9uIElOIGludGVycnVwdCwgcHJvdmlkZSBkYXRhIGlmIHdlIGhhdmUgYW55ICovCiAJaWYgKChlcHN0cyAmIFVEQ19FUFNUU19JTikgJiYgIShlcHN0cyAmIFVEQ19FUFNUU19UREMpICYmCiAJICAgICAhKGVwc3RzICYgVURDX0VQU1RTX1RYRU1QVFkpKQpAQCAtMjEwMiwxMSArMjExOCw5IEBACiAJCWRldi0+c3RhbGwgPSAwOwogCQlkZXYtPmVwW1VEQ19FUDBJTl9JRFhdLmhhbHRlZCA9IDA7CiAJCWRldi0+ZXBbVURDX0VQME9VVF9JRFhdLmhhbHRlZCA9IDA7Ci0JCS8qIEluIGRhdGEgbm90IHJlYWR5ICovCi0JCXBjaF91ZGNfZXBfc2V0X25haygmKGRldi0+ZXBbVURDX0VQMElOX0lEWF0pKTsKIAkJZGV2LT5zZXR1cF9kYXRhID0gZXAtPnRkX3N0cC0+cmVxdWVzdDsKIAkJcGNoX3VkY19pbml0X3NldHVwX2J1ZmYoZXAtPnRkX3N0cCk7Ci0JCXBjaF91ZGNfY2xlYXJfZG1hKGRldiwgRE1BX0RJUl9UWCk7CisJCXBjaF91ZGNfY2xlYXJfZG1hKGRldiwgRE1BX0RJUl9SWCk7CiAJCXBjaF91ZGNfZXBfZmlmb19mbHVzaCgmKGRldi0+ZXBbVURDX0VQMElOX0lEWF0pLAogCQkJCSAgICAgIGRldi0+ZXBbVURDX0VQMElOX0lEWF0uaW4pOwogCQlpZiAoKGRldi0+c2V0dXBfZGF0YS5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSkKQEAgLTIxMjIsMTQgKzIxMzYsMjMgQEAKIAkJc2V0dXBfc3VwcG9ydGVkID0gZGV2LT5kcml2ZXItPnNldHVwKCZkZXYtPmdhZGdldCwKIAkJCQkJCSAgICAgJmRldi0+c2V0dXBfZGF0YSk7CiAJCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKworCQlpZiAoZGV2LT5zZXR1cF9kYXRhLmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pIHsKKwkJCWVwLT50ZF9kYXRhLT5zdGF0dXMgPSAoZXAtPnRkX2RhdGEtPnN0YXR1cyAmCisJCQkJCQl+UENIX1VEQ19CVUZGX1NUUykgfAorCQkJCQkJUENIX1VEQ19CU19IU1RfUkRZOworCQkJcGNoX3VkY19lcF9zZXRfZGRwdHIoZXAsIGVwLT50ZF9kYXRhX3BoeXMpOworCQl9CiAJCS8qIGVwMCBpbiByZXR1cm5zIGRhdGEgb24gSU4gcGhhc2UgKi8KIAkJaWYgKHNldHVwX3N1cHBvcnRlZCA+PSAwICYmIHNldHVwX3N1cHBvcnRlZCA8CiAJCQkJCSAgICBVRENfRVAwSU5fTUFYX1BLVF9TSVpFKSB7CiAJCQlwY2hfdWRjX2VwX2NsZWFyX25haygmKGRldi0+ZXBbVURDX0VQMElOX0lEWF0pKTsKIAkJCS8qIEdhZGdldCB3b3VsZCBoYXZlIHF1ZXVlZCBhIHJlcXVlc3Qgd2hlbgogCQkJICogd2UgY2FsbGVkIHRoZSBzZXR1cCAqLwotCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7Ci0JCQlwY2hfdWRjX2VwX2NsZWFyX25hayhlcCk7CisJCQlpZiAoIShkZXYtPnNldHVwX2RhdGEuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikpIHsKKwkJCQlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJCQlwY2hfdWRjX2VwX2NsZWFyX25hayhlcCk7CisJCQl9CiAJCX0gZWxzZSBpZiAoc2V0dXBfc3VwcG9ydGVkIDwgMCkgewogCQkJLyogaWYgdW5zdXBwb3J0ZWQgcmVxdWVzdCwgdGhlbiBzdGFsbCAqLwogCQkJcGNoX3VkY19lcF9zZXRfc3RhbGwoJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSk7CkBAIC0yMTQyLDIyICsyMTY1LDEzIEBACiAJCX0KIAl9IGVsc2UgaWYgKCgoKHN0YXQgJiBVRENfRVBTVFNfT1VUX01BU0spID4+IFVEQ19FUFNUU19PVVRfU0hJRlQpID09CiAJCSAgICAgVURDX0VQU1RTX09VVF9EQVRBKSAmJiAhZGV2LT5zdGFsbCkgewotCQlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgewotCQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICIlczogTm8gcmVxdWVzdFxuIiwgX19mdW5jX18pOwotCQkJZXAtPnRkX2RhdGEtPnN0YXR1cyA9IChlcC0+dGRfZGF0YS0+c3RhdHVzICYKLQkJCQkJICAgICAgIH5QQ0hfVURDX0JVRkZfU1RTKSB8Ci0JCQkJCSAgICAgICBQQ0hfVURDX0JTX0hTVF9SRFk7Ci0JCQlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1JYKTsKLQkJfSBlbHNlIHsKLQkJCS8qIGNvbnRyb2wgd3JpdGUgKi8KLQkJCS8qIG5leHQgZnVuY3Rpb24gd2lsbCBwaWNrdW8gYW4gY2xlYXIgdGhlIHN0YXR1cyAqLworCQlwY2hfdWRjX2NsZWFyX2RtYShkZXYsIERNQV9ESVJfUlgpOworCQlwY2hfdWRjX2VwX3NldF9kZHB0cihlcCwgMCk7CisJCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgewogCQkJZXAtPmVwc3RzID0gc3RhdDsKLQotCQkJcGNoX3VkY19zdmNfZGF0YV9vdXQoZGV2LCAwKTsKLQkJCS8qIHJlLXByb2dyYW0gZGVzYy4gcG9pbnRlciBmb3IgcG9zc2libGUgWkxQcyAqLwotCQkJcGNoX3VkY19lcF9zZXRfZGRwdHIoZXAsIGVwLT50ZF9kYXRhX3BoeXMpOwotCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7CisJCQlwY2hfdWRjX3N2Y19kYXRhX291dChkZXYsIFBDSF9VRENfRVAwKTsKIAkJfQorCQlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1JYKTsKIAl9CiAJcGNoX3VkY19lcF9zZXRfcnJkeShlcCk7CiB9CkBAIC0yMTc0LDcgKzIxODgsNyBAQAogCXN0cnVjdCBwY2hfdWRjX2VwCSplcDsKIAlzdHJ1Y3QgcGNoX3VkY19yZXF1ZXN0ICpyZXE7CiAKLQllcCA9ICZkZXYtPmVwWzIqZXBfbnVtXTsKKwllcCA9ICZkZXYtPmVwW1VEQ19FUElOX0lEWChlcF9udW0pXTsKIAlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKIAkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHBjaF91ZGNfcmVxdWVzdCwgcXVldWUpOwogCQlwY2hfdWRjX2VuYWJsZV9lcF9pbnRlcnJ1cHRzKGVwLT5kZXYsCkBAIC0yMTk2LDEzICsyMjEwLDEzIEBACiAJZm9yIChpID0gMDsgaSA8IFBDSF9VRENfVVNFRF9FUF9OVU07IGkrKykgewogCQkvKiBJTiAqLwogCQlpZiAoZXBfaW50ciAmICgweDEgPDwgaSkpIHsKLQkJCWVwID0gJmRldi0+ZXBbMippXTsKKwkJCWVwID0gJmRldi0+ZXBbVURDX0VQSU5fSURYKGkpXTsKIAkJCWVwLT5lcHN0cyA9IHBjaF91ZGNfcmVhZF9lcF9zdGF0dXMoZXApOwogCQkJcGNoX3VkY19jbGVhcl9lcF9zdGF0dXMoZXAsIGVwLT5lcHN0cyk7CiAJCX0KIAkJLyogT1VUICovCiAJCWlmIChlcF9pbnRyICYgKDB4MTAwMDAgPDwgaSkpIHsKLQkJCWVwID0gJmRldi0+ZXBbMippKzFdOworCQkJZXAgPSAmZGV2LT5lcFtVRENfRVBPVVRfSURYKGkpXTsKIAkJCWVwLT5lcHN0cyA9IHBjaF91ZGNfcmVhZF9lcF9zdGF0dXMoZXApOwogCQkJcGNoX3VkY19jbGVhcl9lcF9zdGF0dXMoZXAsIGVwLT5lcHN0cyk7CiAJCX0KQEAgLTI1NjMsOSArMjU3Nyw2IEBACiAJZGV2LT5lcFtVRENfRVAwSU5fSURYXS5lcC5tYXhwYWNrZXQgPSBVRENfRVAwSU5fTUFYX1BLVF9TSVpFOwogCWRldi0+ZXBbVURDX0VQME9VVF9JRFhdLmVwLm1heHBhY2tldCA9IFVEQ19FUDBPVVRfTUFYX1BLVF9TSVpFOwogCi0JZGV2LT5kbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGRldi0+cGRldiwgZGV2LT5lcDBvdXRfYnVmLCAyNTYsCi0JCQkJICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCiAJLyogcmVtb3ZlIGVwMCBpbiBhbmQgb3V0IGZyb20gdGhlIGxpc3QuICBUaGV5IGhhdmUgb3duIHBvaW50ZXIgKi8KIAlsaXN0X2RlbF9pbml0KCZkZXYtPmVwW1VEQ19FUDBJTl9JRFhdLmVwLmVwX2xpc3QpOwogCWxpc3RfZGVsX2luaXQoJmRldi0+ZXBbVURDX0VQME9VVF9JRFhdLmVwLmVwX2xpc3QpOwpAQCAtMjYzNyw2ICsyNjQ4LDEzIEBACiAJZGV2LT5lcFtVRENfRVAwSU5fSURYXS50ZF9zdHBfcGh5cyA9IDA7CiAJZGV2LT5lcFtVRENfRVAwSU5fSURYXS50ZF9kYXRhID0gTlVMTDsKIAlkZXYtPmVwW1VEQ19FUDBJTl9JRFhdLnRkX2RhdGFfcGh5cyA9IDA7CisKKwlkZXYtPmVwMG91dF9idWYgPSBremFsbG9jKFVEQ19FUDBPVVRfQlVGRl9TSVpFICogNCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmVwMG91dF9idWYpCisJCXJldHVybiAtRU5PTUVNOworCWRldi0+ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsIGRldi0+ZXAwb3V0X2J1ZiwKKwkJCQkgICAgICAgVURDX0VQME9VVF9CVUZGX1NJWkUgKiA0LAorCQkJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzAwLDcgKzI3MTgsOCBAQAogCiAJcGNoX3VkY19kaXNhYmxlX2ludGVycnVwdHMoZGV2LCBVRENfREVWSU5UX01TSyk7CiAKLQkvKiBBc3N1ZXMgdGhhdCB0aGVyZSBhcmUgbm8gcGVuZGluZyByZXF1ZXRzIHdpdGggdGhpcyBkcml2ZXIgKi8KKwkvKiBBc3N1cmVzIHRoYXQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgcmVxdWVzdHMgd2l0aCB0aGlzIGRyaXZlciAqLworCWRyaXZlci0+ZGlzY29ubmVjdCgmZGV2LT5nYWRnZXQpOwogCWRyaXZlci0+dW5iaW5kKCZkZXYtPmdhZGdldCk7CiAJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CiAJZGV2LT5kcml2ZXIgPSBOVUxMOwpAQCAtMjc1MCw2ICsyNzY5LDExIEBACiAJCXBjaV9wb29sX2Rlc3Ryb3koZGV2LT5zdHBfcmVxdWVzdHMpOwogCX0KIAorCWlmIChkZXYtPmRtYV9hZGRyKQorCQlkbWFfdW5tYXBfc2luZ2xlKCZkZXYtPnBkZXYtPmRldiwgZGV2LT5kbWFfYWRkciwKKwkJCQkgVURDX0VQME9VVF9CVUZGX1NJWkUgKiA0LCBETUFfRlJPTV9ERVZJQ0UpOworCWtmcmVlKGRldi0+ZXAwb3V0X2J1Zik7CisKIAlwY2hfdWRjX2V4aXQoZGV2KTsKIAogCWlmIChkZXYtPmlycV9yZWdpc3RlcmVkKQpAQCAtMjc5MiwxMSArMjgxNiw3IEBACiAJaW50IHJldDsKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQlyZXQgPSBwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBwY2lfcmVzdG9yZV9zdGF0ZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIHJldDsKLQl9CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CkBAIC0yOTE0LDYgKzI5MzQsMTEgQEAKIAkJLmNsYXNzID0gKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHhmZSwKIAkJLmNsYXNzX21hc2sgPSAweGZmZmZmZmZmLAogCX0sCisJeworCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUk9ITSwgUENJX0RFVklDRV9JRF9NTDcyMTNfSU9IX1VEQyksCisJCS5jbGFzcyA9IChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4ZmUsCisJCS5jbGFzc19tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAogCXsgMCB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKaW5kZXggMmZjODYzNi4uMTJmZjZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCkBAIC0xMzEsMzEgKzEzMSwzMSBAQAogICogcGFyYW1ldGVycyBhcmUgaW4gVVRGLTggKHN1cGVyc2V0IG9mIEFTQ0lJJ3MgNyBiaXQgY2hhcmFjdGVycykuCiAgKi8KIAotc3RhdGljIHVzaG9ydCBfX2luaXRkYXRhIGlkVmVuZG9yOworc3RhdGljIHVzaG9ydCBpZFZlbmRvcjsKIG1vZHVsZV9wYXJhbShpZFZlbmRvciwgdXNob3J0LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoaWRWZW5kb3IsICJVU0IgVmVuZG9yIElEIik7CiAKLXN0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBpZFByb2R1Y3Q7CitzdGF0aWMgdXNob3J0IGlkUHJvZHVjdDsKIG1vZHVsZV9wYXJhbShpZFByb2R1Y3QsIHVzaG9ydCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlkUHJvZHVjdCwgIlVTQiBQcm9kdWN0IElEIik7CiAKLXN0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBiY2REZXZpY2U7CitzdGF0aWMgdXNob3J0IGJjZERldmljZTsKIG1vZHVsZV9wYXJhbShiY2REZXZpY2UsIHVzaG9ydCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGJjZERldmljZSwgIlVTQiBEZXZpY2UgdmVyc2lvbiAoQkNEKSIpOwogCi1zdGF0aWMgY2hhciAqX19pbml0ZGF0YSBpTWFudWZhY3R1cmVyOworc3RhdGljIGNoYXIgKmlNYW51ZmFjdHVyZXI7CiBtb2R1bGVfcGFyYW0oaU1hbnVmYWN0dXJlciwgY2hhcnAsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpTWFudWZhY3R1cmVyLCAiVVNCIE1hbnVmYWN0dXJlciBzdHJpbmciKTsKIAotc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgaVByb2R1Y3Q7CitzdGF0aWMgY2hhciAqaVByb2R1Y3Q7CiBtb2R1bGVfcGFyYW0oaVByb2R1Y3QsIGNoYXJwLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoaVByb2R1Y3QsICJVU0IgUHJvZHVjdCBzdHJpbmciKTsKIAotc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgaVNlcmlhbE51bTsKK3N0YXRpYyBjaGFyICppU2VyaWFsTnVtOwogbW9kdWxlX3BhcmFtKGlTZXJpYWxOdW0sIGNoYXJwLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoaVNlcmlhbE51bSwgIjEiKTsKIAotc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgaVBOUHN0cmluZzsKK3N0YXRpYyBjaGFyICppUE5Qc3RyaW5nOwogbW9kdWxlX3BhcmFtKGlQTlBzdHJpbmcsIGNoYXJwLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoaVBOUHN0cmluZywgIk1GRzpsaW51eDtNREw6Z19wcmludGVyO0NMUzpQUklOVEVSO1NOOjE7Iik7CiAKQEAgLTE1OTYsMTMgKzE1OTYsMTIgQEAKIAlpbnQgc3RhdHVzOwogCiAJbXV0ZXhfbG9jaygmdXNiX3ByaW50ZXJfZ2FkZ2V0LmxvY2tfcHJpbnRlcl9pbyk7Ci0JY2xhc3NfZGVzdHJveSh1c2JfZ2FkZ2V0X2NsYXNzKTsKLQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZ19wcmludGVyX2Rldm5vLCAyKTsKLQogCXN0YXR1cyA9IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoJnByaW50ZXJfZHJpdmVyKTsKIAlpZiAoc3RhdHVzKQogCQlFUlJPUihkZXYsICJ1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyICV4XG4iLCBzdGF0dXMpOwogCisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGdfcHJpbnRlcl9kZXZubywgMik7CisJY2xhc3NfZGVzdHJveSh1c2JfZ2FkZ2V0X2NsYXNzKTsKIAltdXRleF91bmxvY2soJnVzYl9wcmludGVyX2dhZGdldC5sb2NrX3ByaW50ZXJfaW8pOwogfQogbW9kdWxlX2V4aXQoY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMKaW5kZXggMjBkNDNkYS4uMDE1MTE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJCWJyZWFrOwogCWNhc2UgUjhBNjY1OTdfQlVMSzoKIAkJLyogaXNvY2hyb25vdXMgcGlwZXMgbWF5IGJlIHVzZWQgYXMgYnVsayBwaXBlcyAqLwotCQlpZiAoaW5mby0+cGlwZSA+IFI4QTY2NTk3X0JBU0VfUElQRU5VTV9CVUxLKQorCQlpZiAoaW5mby0+cGlwZSA+PSBSOEE2NjU5N19CQVNFX1BJUEVOVU1fQlVMSykKIAkJCWJ1Zm51bSA9IGluZm8tPnBpcGUgLSBSOEE2NjU5N19CQVNFX1BJUEVOVU1fQlVMSzsKIAkJZWxzZQogCQkJYnVmbnVtID0gaW5mby0+cGlwZSAtIFI4QTY2NTk3X0JBU0VfUElQRU5VTV9JU09DOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCmluZGV4IDI0MDQ2YzAuLjBlNmFmYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKQEAgLTE1MSw2ICsxNTEsOCBAQAogCSAgUXVhbGNvbW0gY2hpcHNldHMuIFJvb3QgSHViIGhhcyBpbmJ1aWx0IFRULgogCSAgVGhpcyBkcml2ZXIgZGVwZW5kcyBvbiBPVEcgZHJpdmVyIGZvciBQSFkgaW5pdGlhbGl6YXRpb24sCiAJICBjbG9jayBtYW5hZ2VtZW50LCBwb3dlcmluZyB1cCBWQlVTLCBhbmQgcG93ZXIgbWFuYWdlbWVudC4KKwkgIFRoaXMgZHJpdmVyIGlzIG5vdCBzdXBwb3J0ZWQgb24gYm9hcmRzIGxpa2UgdHJvdXQgd2hpY2gKKwkgIGhhcyBhbiBleHRlcm5hbCBQSFkuCiAKIGNvbmZpZyBVU0JfRUhDSV9IQ0RfUFBDX09GCiAJYm9vbCAiRUhDSSBzdXBwb3J0IGZvciBQUEMgVVNCIGNvbnRyb2xsZXIgb24gT0YgcGxhdGZvcm0gYnVzIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCmluZGV4IDJiYWY4YTguLmE4NjllM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKQEAgLTIyNyw4ICsyMjcsOCBAQAogCSAqIG1hcmsgSFcgdW5hY2Nlc3NpYmxlLiAgVGhlIFBNIGFuZCBVU0IgY29yZXMgbWFrZSBzdXJlIHRoYXQKIAkgKiB0aGUgcm9vdCBodWIgaXMgZWl0aGVyIHN1c3BlbmRlZCBvciBzdG9wcGVkLgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJZWhjaV9wcmVwYXJlX3BvcnRzX2Zvcl9jb250cm9sbGVyX3N1c3BlbmQoZWhjaSwgZGV2aWNlX21heV93YWtldXAoZGV2KSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAllaGNpX3dyaXRlbChlaGNpLCAwLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOwogCSh2b2lkKWVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCmluZGV4IDg2ZTQyODkuLjVjNzYxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKQEAgLTUyLDcgKzUyLDYgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgaXJxOwogCWludCByZXR2YWw7Ci0JdW5zaWduZWQgaW50IHRlbXA7CiAKIAlwcl9kZWJ1ZygiaW5pdGlhbGl6aW5nIEZTTC1TT0MgVVNCIENvbnRyb2xsZXJcbiIpOwogCkBAIC0xMjYsMTggKzEyNSw2IEBACiAJCWdvdG8gZXJyMzsKIAl9CiAKLQkvKgotCSAqIENoZWNrIGlmIGl0IGlzIE1QQzUxMjEgU29DLCBvdGhlcndpc2Ugc2V0IHBkYXRhLT5oYXZlX3N5c2lmX3JlZ3MKLQkgKiBmbGFnIGZvciA4M3h4IG9yIDg1MzYgc3lzdGVtIGludGVyZmFjZSByZWdpc3RlcnMuCi0JICovCi0JaWYgKHBkYXRhLT5iaWdfZW5kaWFuX21taW8pCi0JCXRlbXAgPSBpbl9iZTMyKGhjZC0+cmVncyArIEZTTF9TT0NfVVNCX0lEKTsKLQllbHNlCi0JCXRlbXAgPSBpbl9sZTMyKGhjZC0+cmVncyArIEZTTF9TT0NfVVNCX0lEKTsKLQotCWlmICgodGVtcCAmIElEX01TSykgIT0gKH4oKHRlbXAgJiBOSURfTVNLKSA+PiA4KSAmIElEX01TSykpCi0JCXBkYXRhLT5oYXZlX3N5c2lmX3JlZ3MgPSAxOwotCiAJLyogRW5hYmxlIFVTQiBjb250cm9sbGVyLCA4M3h4IG9yIDg1MzYgKi8KIAlpZiAocGRhdGEtPmhhdmVfc3lzaWZfcmVncykKIAkJc2V0Yml0czMyKGhjZC0+cmVncyArIEZTTF9TT0NfVVNCX0NUUkwsIDB4NCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmggYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmgKaW5kZXggMmM4MzUzNy4uM2ZhYmVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuaApAQCAtMTksOSArMTksNiBAQAogI2RlZmluZSBfRUhDSV9GU0xfSAogCiAvKiBvZmZzZXRzIGZvciB0aGUgbm9uLWVoY2kgcmVnaXN0ZXJzIGluIHRoZSBGU0wgU09DIFVTQiBjb250cm9sbGVyICovCi0jZGVmaW5lIEZTTF9TT0NfVVNCX0lECQkweDAKLSNkZWZpbmUgSURfTVNLCQkJMHgzZgotI2RlZmluZSBOSURfTVNLCQkJMHgzZjAwCiAjZGVmaW5lIEZTTF9TT0NfVVNCX1VMUElWUAkweDE3MAogI2RlZmluZSBGU0xfU09DX1VTQl9QT1JUU0MxCTB4MTg0CiAjZGVmaW5lIFBPUlRfUFRTX01TSwkJKDM8PDMwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCmluZGV4IDZmZWUzY2QuLjc0ZGNmNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTU3Miw2ICs1NzIsOCBAQAogCWVoY2ktPmlhYV93YXRjaGRvZy5mdW5jdGlvbiA9IGVoY2lfaWFhX3dhdGNoZG9nOwogCWVoY2ktPmlhYV93YXRjaGRvZy5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGVoY2k7CiAKKwloY2NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNjX3BhcmFtcyk7CisKIAkvKgogCSAqIGh3IGRlZmF1bHQ6IDFLIHBlcmlvZGljIGxpc3QgaGVhZHMsIG9uZSBwZXIgZnJhbWUuCiAJICogcGVyaW9kaWNfc2l6ZSBjYW4gc2hyaW5rIGJ5IFVTQkNNRCB1cGRhdGUgaWYgaGNjX3BhcmFtcyBhbGxvd3MuCkBAIC01NzksMTEgKzU4MSwyMCBAQAogCWVoY2ktPnBlcmlvZGljX3NpemUgPSBERUZBVUxUX0lfVERQUzsKIAlJTklUX0xJU1RfSEVBRCgmZWhjaS0+Y2FjaGVkX2l0ZF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZWhjaS0+Y2FjaGVkX3NpdGRfbGlzdCk7CisKKwlpZiAoSENDX1BHTV9GUkFNRUxJU1RMRU4oaGNjX3BhcmFtcykpIHsKKwkJLyogcGVyaW9kaWMgc2NoZWR1bGUgc2l6ZSBjYW4gYmUgc21hbGxlciB0aGFuIGRlZmF1bHQgKi8KKwkJc3dpdGNoIChFSENJX1RVTkVfRkxTKSB7CisJCWNhc2UgMDogZWhjaS0+cGVyaW9kaWNfc2l6ZSA9IDEwMjQ7IGJyZWFrOworCQljYXNlIDE6IGVoY2ktPnBlcmlvZGljX3NpemUgPSA1MTI7IGJyZWFrOworCQljYXNlIDI6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAyNTY7IGJyZWFrOworCQlkZWZhdWx0OglCVUcoKTsKKwkJfQorCX0KIAlpZiAoKHJldHZhbCA9IGVoY2lfbWVtX2luaXQoZWhjaSwgR0ZQX0tFUk5FTCkpIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAogCS8qIGNvbnRyb2xsZXJzIG1heSBjYWNoZSBzb21lIG9mIHRoZSBwZXJpb2RpYyBzY2hlZHVsZSAuLi4gKi8KLQloY2NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNjX3BhcmFtcyk7CiAJaWYgKEhDQ19JU09DX0NBQ0hFKGhjY19wYXJhbXMpKQkJLy8gZnVsbCBmcmFtZSBjYWNoZQogCQllaGNpLT5pX3RocmVzaCA9IDIgKyA4OwogCWVsc2UJCQkJCS8vIE4gbWljcm9mcmFtZXMgY2FjaGVkCkBAIC02MzcsMTIgKzY0OCw2IEBACiAJCS8qIHBlcmlvZGljIHNjaGVkdWxlIHNpemUgY2FuIGJlIHNtYWxsZXIgdGhhbiBkZWZhdWx0ICovCiAJCXRlbXAgJj0gfigzIDw8IDIpOwogCQl0ZW1wIHw9IChFSENJX1RVTkVfRkxTIDw8IDIpOwotCQlzd2l0Y2ggKEVIQ0lfVFVORV9GTFMpIHsKLQkJY2FzZSAwOiBlaGNpLT5wZXJpb2RpY19zaXplID0gMTAyNDsgYnJlYWs7Ci0JCWNhc2UgMTogZWhjaS0+cGVyaW9kaWNfc2l6ZSA9IDUxMjsgYnJlYWs7Ci0JCWNhc2UgMjogZWhjaS0+cGVyaW9kaWNfc2l6ZSA9IDI1NjsgYnJlYWs7Ci0JCWRlZmF1bHQ6CUJVRygpOwotCQl9CiAJfQogCWlmIChIQ0NfTFBNKGhjY19wYXJhbXMpKSB7CiAJCS8qIHN1cHBvcnQgbGluayBwb3dlciBtYW5hZ2VtZW50IEVIQ0kgMS4xIGFkZGVuZHVtICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKaW5kZXggNzk2ZWEwYy4uOGE1MTVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwpAQCAtMTExLDYgKzExMSw3IEBACiB7CiAJaW50CQlwb3J0OwogCXUzMgkJdGVtcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJLyogSWYgcmVtb3RlIHdha2V1cCBpcyBlbmFibGVkIGZvciB0aGUgcm9vdCBodWIgYnV0IGRpc2FibGVkCiAJICogZm9yIHRoZSBjb250cm9sbGVyLCB3ZSBtdXN0IGFkanVzdCBhbGwgdGhlIHBvcnQgd2FrZXVwIGZsYWdzCkBAIC0xMjAsNiArMTIxLDggQEAKIAlpZiAoIWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLnJvb3RfaHViLT5kb19yZW1vdGVfd2FrZXVwIHx8IGRvX3dha2V1cCkKIAkJcmV0dXJuOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwogCS8qIGNsZWFyIHBoeSBsb3ctcG93ZXIgbW9kZSBiZWZvcmUgY2hhbmdpbmcgd2FrZXVwIGZsYWdzICovCiAJaWYgKGVoY2ktPmhhc19ob3N0cGMpIHsKIAkJcG9ydCA9IEhDU19OX1BPUlRTKGVoY2ktPmhjc19wYXJhbXMpOwpAQCAtMTMxLDcgKzEzNCw5IEBACiAJCQl0ZW1wID0gZWhjaV9yZWFkbChlaGNpLCBob3N0cGNfcmVnKTsKIAkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAgJiB+SE9TVFBDX1BIQ0QsIGhvc3RwY19yZWcpOwogCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAkJbXNsZWVwKDUpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCX0KIAogCXBvcnQgPSBIQ1NfTl9QT1JUUyhlaGNpLT5oY3NfcGFyYW1zKTsKQEAgLTE3MCw2ICsxNzUsOCBAQAogCS8qIERvZXMgdGhlIHJvb3QgaHViIGhhdmUgYSBwb3J0IHdha2V1cCBwZW5kaW5nPyAqLwogCWlmICghc3VzcGVuZGluZyAmJiAoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+c3RhdHVzKSAmIFNUU19QQ0QpKQogCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihlaGNpX3RvX2hjZChlaGNpKSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgZWhjaV9idXNfc3VzcGVuZCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYwppbmRleCBmYTU5YjI2Li5jOGUzNjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jCkBAIC0yMSwxMCArMjEsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdWxwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KIAorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKICNkZWZpbmUgVUxQSV9WSUVXUE9SVF9PRkZTRVQJMHgxNzAKIAogc3RydWN0IGVoY2lfbXhjX3ByaXYgewpAQCAtMTE0LDYgKzExNyw3IEBACiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgaXJxLCByZXQ7CisJdW5zaWduZWQgaW50IGZsYWdzOwogCXN0cnVjdCBlaGNpX214Y19wcml2ICpwcml2OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IGVoY2lfaGNkICplaGNpOwpAQCAtMTc3LDggKzE4MSw4IEBACiAJCWNsa19lbmFibGUocHJpdi0+YWhiY2xrKTsKIAl9CiAKLQkvKiAiZHIiIGRldmljZSBoYXMgaXRzIG93biBjbG9jayAqLwotCWlmIChwZGV2LT5pZCA9PSAwKSB7CisJLyogImRyIiBkZXZpY2UgaGFzIGl0cyBvd24gY2xvY2sgb24gaS5NWDUxICovCisJaWYgKGNwdV9pc19teDUxKCkgJiYgKHBkZXYtPmlkID09IDApKSB7CiAJCXByaXYtPnBoeTFjbGsgPSBjbGtfZ2V0KGRldiwgInVzYl9waHkxIik7CiAJCWlmIChJU19FUlIocHJpdi0+cGh5MWNsaykpIHsKIAkJCXJldCA9IFBUUl9FUlIocHJpdi0+cGh5MWNsayk7CkBAIC0yNDAsNiArMjQ0LDIzIEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfYWRkOwogCisJaWYgKHBkYXRhLT5vdGcpIHsKKwkJLyoKKwkJICogZWZpa2FteCBhbmQgZWZpa2FzYiBoYXZlIHNvbWUgaGFyZHdhcmUgYnVnIHdoaWNoIGlzCisJCSAqIHByZXZlbnRpbmcgdXNiIHRvIHdvcmsgdW5sZXNzIENIUkdWQlVTIGlzIHNldC4KKwkJICogSXQncyBpbiB2aW9sYXRpb24gb2YgVVNCIHNwZWNzCisJCSAqLworCQlpZiAobWFjaGluZV9pc19teDUxX2VmaWthbXgoKSB8fCBtYWNoaW5lX2lzX214NTFfZWZpa2FzYigpKSB7CisJCQlmbGFncyA9IG90Z19pb19yZWFkKHBkYXRhLT5vdGcsIFVMUElfT1RHX0NUUkwpOworCQkJZmxhZ3MgfD0gVUxQSV9PVEdfQ1RSTF9DSFJHVkJVUzsKKwkJCXJldCA9IG90Z19pb193cml0ZShwZGF0YS0+b3RnLCBmbGFncywgVUxQSV9PVEdfQ1RSTCk7CisJCQlpZiAocmV0KSB7CisJCQkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gc2V0IENIUlZCVVNcbiIpOworCQkJCWdvdG8gZXJyX2FkZDsKKwkJCX0KKwkJfQorCX0KKwogCXJldHVybiAwOwogCiBlcnJfYWRkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKaW5kZXggNjgwZjJlZi4uZjc4NGNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCkBAIC03OTYsNyArNzk2LDcgQEAKIAloY2QgPSB1c2JfY3JlYXRlX2hjZCgmZWhjaV9vbWFwX2hjX2RyaXZlciwgJnBkZXYtPmRldiwKIAkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKTsKIAlpZiAoIWhjZCkgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIGhjZCB3aXRoIGVyciAlZFxuIiwgcmV0KTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBoY2Qgd2l0aCBlcnIgJWRcbiIsIHJldCk7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2NyZWF0ZV9oY2Q7CiAJfQpAQCAtODY0LDcgKzg2NCw3IEBACiAKIAlyZXQgPSBvbWFwX3N0YXJ0X2VoYyhvbWFwLCBoY2QpOwogCWlmIChyZXQpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHN0YXJ0IGVoY2lcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc3RhcnQgZWhjaSB3aXRoIGVyciAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnJfc3RhcnQ7CiAJfQogCkBAIC04NzksNyArODc5LDcgQEAKIAogCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQpOwogCWlmIChyZXQpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBoY2Qgd2l0aCBlcnIgJWRcbiIsIHJldCk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgaGNkIHdpdGggZXJyICVkXG4iLCByZXQpOwogCQlnb3RvIGVycl9hZGRfaGNkOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCmluZGV4IDc2MTc5YzMuLjA3YmI5ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKQEAgLTQ0LDI4ICs0NCwzNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVoY2lfcXVpcmtfYW1kX1NCODAwKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKK3N0YXRpYyBpbnQgZWhjaV9xdWlya19hbWRfaHVkc29uKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYW1kX3NtYnVzX2RldjsKIAl1OCByZXYgPSAwOwogCiAJYW1kX3NtYnVzX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQVRJLCAweDQzODUsIE5VTEwpOwotCWlmICghYW1kX3NtYnVzX2RldikKLQkJcmV0dXJuIDA7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShhbWRfc21idXNfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXYpOwotCWlmIChyZXYgPCAweDQwKSB7Ci0JCXBjaV9kZXZfcHV0KGFtZF9zbWJ1c19kZXYpOwotCQlhbWRfc21idXNfZGV2ID0gTlVMTDsKLQkJcmV0dXJuIDA7CisJaWYgKGFtZF9zbWJ1c19kZXYpIHsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoYW1kX3NtYnVzX2RldiwgUENJX1JFVklTSU9OX0lELCAmcmV2KTsKKwkJaWYgKHJldiA8IDB4NDApIHsKKwkJCXBjaV9kZXZfcHV0KGFtZF9zbWJ1c19kZXYpOworCQkJYW1kX3NtYnVzX2RldiA9IE5VTEw7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCWFtZF9zbWJ1c19kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwgMHg3ODBiLCBOVUxMKTsKKwkJaWYgKCFhbWRfc21idXNfZGV2KQorCQkJcmV0dXJuIDA7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGFtZF9zbWJ1c19kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7CisJCWlmIChyZXYgPCAweDExIHx8IHJldiA+IDB4MTgpIHsKKwkJCXBjaV9kZXZfcHV0KGFtZF9zbWJ1c19kZXYpOworCQkJYW1kX3NtYnVzX2RldiA9IE5VTEw7CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAogCWlmICghYW1kX25iX2RldikKIAkJYW1kX25iX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELCAweDE1MTAsIE5VTEwpOwotCWlmICghYW1kX25iX2RldikKLQkJZWhjaV9lcnIoZWhjaSwgIlFVSVJLOiB1bmFibGUgdG8gZ2V0IEFNRCBOQiBkZXZpY2VcbiIpOwogCi0JZWhjaV9pbmZvKGVoY2ksICJRVUlSSzogRW5hYmxlIEFNRCBTQjgwMCBMMSBmaXhcbiIpOworCWVoY2lfaW5mbyhlaGNpLCAiUVVJUks6IEVuYWJsZSBleGNlcHRpb24gZm9yIEFNRCBIdWRzb24gQVNQTVxuIik7CiAKIAlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKIAlhbWRfc21idXNfZGV2ID0gTlVMTDsKQEAgLTEzMSw3ICsxMzgsNyBAQAogCS8qIGNhY2hlIHRoaXMgcmVhZG9ubHkgZGF0YTsgbWluaW1pemUgY2hpcCByZWFkcyAqLwogCWVoY2ktPmhjc19wYXJhbXMgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY3NfcGFyYW1zKTsKIAotCWlmIChlaGNpX3F1aXJrX2FtZF9TQjgwMChlaGNpKSkKKwlpZiAoZWhjaV9xdWlya19hbWRfaHVkc29uKGVoY2kpKQogCQllaGNpLT5hbWRfbDFfZml4ID0gMTsKIAogCXJldHZhbCA9IGVoY2lfaGFsdChlaGNpKTsKQEAgLTM2MCw4ICszNjcsOCBAQAogCSAqIG1hcmsgSFcgdW5hY2Nlc3NpYmxlLiAgVGhlIFBNIGFuZCBVU0IgY29yZXMgbWFrZSBzdXJlIHRoYXQKIAkgKiB0aGUgcm9vdCBodWIgaXMgZWl0aGVyIHN1c3BlbmRlZCBvciBzdG9wcGVkLgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCWVoY2lfcHJlcGFyZV9wb3J0c19mb3JfY29udHJvbGxlcl9zdXNwZW5kKGVoY2ksIGRvX3dha2V1cCk7CisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJZWhjaV93cml0ZWwoZWhjaSwgMCwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKIAkodm9pZCllaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS14aWxpbngtb2YuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS14aWxpbngtb2YuYwppbmRleCBlOGY0ZjM2Li5hNmYyMWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kteGlsaW54LW9mLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXhpbGlueC1vZi5jCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogCiAvKioKICAqIGVoY2lfeGlsaW54X29mX3NldHVwIC0gSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIGZvciBlaGNpX3Jlc2V0KCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jIGIvZHJpdmVycy91c2IvaG9zdC9mc2wtbXBoLWRyLW9mLmMKaW5kZXggNTc0Yjk5ZS4uNzlhNjZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9mc2wtbXBoLWRyLW9mLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9mc2wtbXBoLWRyLW9mLmMKQEAgLTI2MiwxOSArMjYyLDI0IEBACiAJfQogfQogCi1zdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBmc2xfdXNiMl9tcGM1MTIxX3BkID0geworc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIGZzbF91c2IyX21wYzUxMjFfcGQgPSB7CiAJLmJpZ19lbmRpYW5fZGVzYyA9IDEsCiAJLmJpZ19lbmRpYW5fbW1pbyA9IDEsCiAJLmVzID0gMSwKKwkuaGF2ZV9zeXNpZl9yZWdzID0gMCwKIAkubGVfc2V0dXBfYnVmID0gMSwKIAkuaW5pdCA9IGZzbF91c2IyX21wYzUxMjFfaW5pdCwKIAkuZXhpdCA9IGZzbF91c2IyX21wYzUxMjFfZXhpdCwKIH07CiAjZW5kaWYgLyogQ09ORklHX1BQQ19NUEM1MTJ4ICovCiAKK3N0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBmc2xfdXNiMl9tcGM4eHh4X3BkID0geworCS5oYXZlX3N5c2lmX3JlZ3MgPSAxLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZnNsX3VzYjJfbXBoX2RyX29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1tcGgiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLXVzYjItbXBoIiwgLmRhdGEgPSAmZnNsX3VzYjJfbXBjOHh4eF9wZCwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbC11c2IyLWRyIiwgLmRhdGEgPSAmZnNsX3VzYjJfbXBjOHh4eF9wZCwgfSwKICNpZmRlZiBDT05GSUdfUFBDX01QQzUxMngKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiLCAuZGF0YSA9ICZmc2xfdXNiMl9tcGM1MTIxX3BkLCB9LAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwppbmRleCA5OTBmMDZiLi4yZTk2MDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKQEAgLTg2MSw2ICs4NjEsNyBAQAogCQkJREJHKCJkZXYgJWQgZXAlZCBtYXhwYWNrZXQgJWRcbiIsCiAJCQkJdWRldi0+ZGV2bnVtLCBlcG51bSwgZXAtPm1heHBhY2tldCk7CiAJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJa2ZyZWUoZXApOwogCQkJZ290byBmYWlsOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYwppbmRleCBmY2JmNGFiLi4wMjMxODE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCkBAIC0xNjksOSArMTY5LDEwIEBACiAJfQogfQogCi12b2lkIHhoY2lfcHJpbnRfaXJfc2V0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfaW50cl9yZWcgKmlyX3NldCwgaW50IHNldF9udW0pCit2b2lkIHhoY2lfcHJpbnRfaXJfc2V0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgaW50IHNldF9udW0pCiB7Ci0Jdm9pZCAqYWRkcjsKKwlzdHJ1Y3QgeGhjaV9pbnRyX3JlZyBfX2lvbWVtICppcl9zZXQgPSAmeGhjaS0+cnVuX3JlZ3MtPmlyX3NldFtzZXRfbnVtXTsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CiAJdTMyIHRlbXA7CiAJdTY0IHRlbXBfNjQ7CiAKQEAgLTQ0OSw3ICs0NTAsNyBAQAogCX0KIH0KIAotdm9pZCB4aGNpX2RiZ19zbG90X2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmN0eCkKK3N0YXRpYyB2b2lkIHhoY2lfZGJnX3Nsb3RfY3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqY3R4KQogewogCS8qIEZpZWxkcyBhcmUgMzIgYml0cyB3aWRlLCBETUEgYWRkcmVzc2VzIGFyZSBpbiBieXRlcyAqLwogCWludCBmaWVsZF9zaXplID0gMzIgLyA4OwpAQCAtNDg4LDcgKzQ4OSw3IEBACiAJCWRiZ19yc3ZkNjQoeGhjaSwgKHU2NCAqKXNsb3RfY3R4LCBkbWEpOwogfQogCi12b2lkIHhoY2lfZGJnX2VwX2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCitzdGF0aWMgdm9pZCB4aGNpX2RiZ19lcF9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLAogCQkgICAgIHN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmN0eCwKIAkJICAgICB1bnNpZ25lZCBpbnQgbGFzdF9lcCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwppbmRleCAxZDBmNDVmLi5hOTUzNDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCkBAIC0zMDcsNyArMzA3LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqIFN0cmVhbXMgc3RydWN0dXJlcyBtYW5pcHVsYXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCB4aGNpX2ZyZWVfc3RyZWFtX2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCitzdGF0aWMgdm9pZCB4aGNpX2ZyZWVfc3RyZWFtX2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCiAJCXVuc2lnbmVkIGludCBudW1fc3RyZWFtX2N0eHMsCiAJCXN0cnVjdCB4aGNpX3N0cmVhbV9jdHggKnN0cmVhbV9jdHgsIGRtYV9hZGRyX3QgZG1hKQogewpAQCAtMzM1LDcgKzMzNSw3IEBACiAgKiBUaGUgc3RyZWFtIGNvbnRleHQgYXJyYXkgbXVzdCBiZSBhIHBvd2VyIG9mIDIsIGFuZCBjYW4gYmUgYXMgc21hbGwgYXMKICAqIDY0IGJ5dGVzIG9yIGFzIGxhcmdlIGFzIDFNQi4KICAqLwotc3RydWN0IHhoY2lfc3RyZWFtX2N0eCAqeGhjaV9hbGxvY19zdHJlYW1fY3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKK3N0YXRpYyBzdHJ1Y3QgeGhjaV9zdHJlYW1fY3R4ICp4aGNpX2FsbG9jX3N0cmVhbV9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLAogCQl1bnNpZ25lZCBpbnQgbnVtX3N0cmVhbV9jdHhzLCBkbWFfYWRkcl90ICpkbWEsCiAJCWdmcF90IG1lbV9mbGFncykKIHsKQEAgLTE5MDAsMTEgKzE5MDAsMTEgQEAKIAl2YWwgJj0gREJPRkZfTUFTSzsKIAl4aGNpX2RiZyh4aGNpLCAiLy8gRG9vcmJlbGwgYXJyYXkgaXMgbG9jYXRlZCBhdCBvZmZzZXQgMHgleCIKIAkJCSIgZnJvbSBjYXAgcmVncyBiYXNlIGFkZHJcbiIsIHZhbCk7Ci0JeGhjaS0+ZGJhID0gKHZvaWQgKikgeGhjaS0+Y2FwX3JlZ3MgKyB2YWw7CisJeGhjaS0+ZGJhID0gKHZvaWQgX19pb21lbSAqKSB4aGNpLT5jYXBfcmVncyArIHZhbDsKIAl4aGNpX2RiZ19yZWdzKHhoY2kpOwogCXhoY2lfcHJpbnRfcnVuX3JlZ3MoeGhjaSk7CiAJLyogU2V0IGlyX3NldCB0byBpbnRlcnJ1cHQgcmVnaXN0ZXIgc2V0IDAgKi8KLQl4aGNpLT5pcl9zZXQgPSAodm9pZCAqKSB4aGNpLT5ydW5fcmVncy0+aXJfc2V0OworCXhoY2ktPmlyX3NldCA9ICZ4aGNpLT5ydW5fcmVncy0+aXJfc2V0WzBdOwogCiAJLyoKIAkgKiBFdmVudCByaW5nIHNldHVwOiBBbGxvY2F0ZSBhIG5vcm1hbCByaW5nLCBidXQgYWxzbyBzZXR1cApAQCAtMTk2MSw3ICsxOTYxLDcgQEAKIAkvKiBTZXQgdGhlIGV2ZW50IHJpbmcgZGVxdWV1ZSBhZGRyZXNzICovCiAJeGhjaV9zZXRfaGNfZXZlbnRfZGVxKHhoY2kpOwogCXhoY2lfZGJnKHhoY2ksICJXcm90ZSBFUlNUIGFkZHJlc3MgdG8gaXJfc2V0IDAuXG4iKTsKLQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCB4aGNpLT5pcl9zZXQsIDApOworCXhoY2lfcHJpbnRfaXJfc2V0KHhoY2ksIDApOwogCiAJLyoKIAkgKiBYWFg6IE1pZ2h0IG5lZWQgdG8gc2V0IHRoZSBJbnRlcnJ1cHRlciBNb2RlcmF0aW9uIFJlZ2lzdGVyIHRvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwppbmRleCBkZjU1OGY2Li4zMjg5YmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKQEAgLTMwOCwxMSArMzA4LDggQEAKIC8qIFJpbmcgdGhlIGhvc3QgY29udHJvbGxlciBkb29yYmVsbCBhZnRlciBwbGFjaW5nIGEgY29tbWFuZCBvbiB0aGUgcmluZyAqLwogdm9pZCB4aGNpX3JpbmdfY21kX2RiKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKLQl1MzIgdGVtcDsKLQogCXhoY2lfZGJnKHhoY2ksICIvLyBEaW5nIGRvbmchXG4iKTsKLQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+ZGJhLT5kb29yYmVsbFswXSkgJiBEQl9NQVNLOwotCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAgfCBEQl9UQVJHRVRfSE9TVCwgJnhoY2ktPmRiYS0+ZG9vcmJlbGxbMF0pOworCXhoY2lfd3JpdGVsKHhoY2ksIERCX1ZBTFVFX0hPU1QsICZ4aGNpLT5kYmEtPmRvb3JiZWxsWzBdKTsKIAkvKiBGbHVzaCBQQ0kgcG9zdGVkIHdyaXRlcyAqLwogCXhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPmRiYS0+ZG9vcmJlbGxbMF0pOwogfQpAQCAtMzIyLDI2ICszMTksMjQgQEAKIAkJdW5zaWduZWQgaW50IGVwX2luZGV4LAogCQl1bnNpZ25lZCBpbnQgc3RyZWFtX2lkKQogewotCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwOwotCXVuc2lnbmVkIGludCBlcF9zdGF0ZTsKLQl1MzIgZmllbGQ7CiAJX191MzIgX19pb21lbSAqZGJfYWRkciA9ICZ4aGNpLT5kYmEtPmRvb3JiZWxsW3Nsb3RfaWRdOworCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwID0gJnhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF07CisJdW5zaWduZWQgaW50IGVwX3N0YXRlID0gZXAtPmVwX3N0YXRlOwogCi0JZXAgPSAmeGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBzW2VwX2luZGV4XTsKLQllcF9zdGF0ZSA9IGVwLT5lcF9zdGF0ZTsKIAkvKiBEb24ndCByaW5nIHRoZSBkb29yYmVsbCBmb3IgdGhpcyBlbmRwb2ludCBpZiB0aGVyZSBhcmUgcGVuZGluZwotCSAqIGNhbmNlbGxhdGlvbnMgYmVjYXVzZSB0aGUgd2UgZG9uJ3Qgd2FudCB0byBpbnRlcnJ1cHQgcHJvY2Vzc2luZy4KKwkgKiBjYW5jZWxsYXRpb25zIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBpbnRlcnJ1cHQgcHJvY2Vzc2luZy4KIAkgKiBXZSBkb24ndCB3YW50IHRvIHJlc3RhcnQgYW55IHN0cmVhbSByaW5ncyBpZiB0aGVyZSdzIGEgc2V0IGRlcXVldWUKIAkgKiBwb2ludGVyIGNvbW1hbmQgcGVuZGluZyBiZWNhdXNlIHRoZSBkZXZpY2UgY2FuIGNob29zZSB0byBzdGFydCBhbnkKIAkgKiBzdHJlYW0gb25jZSB0aGUgZW5kcG9pbnQgaXMgb24gdGhlIEhXIHNjaGVkdWxlLgogCSAqIEZJWE1FIC0gY2hlY2sgYWxsIHRoZSBzdHJlYW0gcmluZ3MgZm9yIHBlbmRpbmcgY2FuY2VsbGF0aW9ucy4KIAkgKi8KLQlpZiAoIShlcF9zdGF0ZSAmIEVQX0hBTFRfUEVORElORykgJiYgIShlcF9zdGF0ZSAmIFNFVF9ERVFfUEVORElORykKLQkJCSYmICEoZXBfc3RhdGUgJiBFUF9IQUxURUQpKSB7Ci0JCWZpZWxkID0geGhjaV9yZWFkbCh4aGNpLCBkYl9hZGRyKSAmIERCX01BU0s7Ci0JCWZpZWxkIHw9IEVQSV9UT19EQihlcF9pbmRleCkgfCBTVFJFQU1fSURfVE9fREIoc3RyZWFtX2lkKTsKLQkJeGhjaV93cml0ZWwoeGhjaSwgZmllbGQsIGRiX2FkZHIpOwotCX0KKwlpZiAoKGVwX3N0YXRlICYgRVBfSEFMVF9QRU5ESU5HKSB8fCAoZXBfc3RhdGUgJiBTRVRfREVRX1BFTkRJTkcpIHx8CisJICAgIChlcF9zdGF0ZSAmIEVQX0hBTFRFRCkpCisJCXJldHVybjsKKwl4aGNpX3dyaXRlbCh4aGNpLCBEQl9WQUxVRShlcF9pbmRleCwgc3RyZWFtX2lkKSwgZGJfYWRkcik7CisJLyogVGhlIENQVSBoYXMgYmV0dGVyIHRoaW5ncyB0byBkbyBhdCB0aGlzIHBvaW50IHRoYW4gd2FpdCBmb3IgYQorCSAqIHdyaXRlLXBvc3RpbmcgZmx1c2guICBJdCdsbCBnZXQgdGhlcmUgc29vbiBlbm91Z2guCisJICovCiB9CiAKIC8qIFJpbmcgdGhlIGRvb3JiZWxsIGZvciBhbnkgcmluZ3Mgd2l0aCBwZW5kaW5nIFVSQnMgKi8KQEAgLTQ3OSw4ICs0NzQsMTEgQEAKIAlzdGF0ZS0+bmV3X2RlcV9zZWcgPSBmaW5kX3RyYl9zZWcoY3VyX3RkLT5zdGFydF9zZWcsCiAJCQlkZXYtPmVwc1tlcF9pbmRleF0uc3RvcHBlZF90cmIsCiAJCQkmc3RhdGUtPm5ld19jeWNsZV9zdGF0ZSk7Ci0JaWYgKCFzdGF0ZS0+bmV3X2RlcV9zZWcpCi0JCUJVRygpOworCWlmICghc3RhdGUtPm5ld19kZXFfc2VnKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKIAkvKiBEaWcgb3V0IHRoZSBjeWNsZSBzdGF0ZSBzYXZlZCBieSB0aGUgeEhDIGR1cmluZyB0aGUgc3RvcCBlcCBjbWQgKi8KIAl4aGNpX2RiZyh4aGNpLCAiRmluZGluZyBlbmRwb2ludCBjb250ZXh0XG4iKTsKIAllcF9jdHggPSB4aGNpX2dldF9lcF9jdHgoeGhjaSwgZGV2LT5vdXRfY3R4LCBlcF9pbmRleCk7CkBAIC00OTEsOCArNDg5LDEwIEBACiAJc3RhdGUtPm5ld19kZXFfc2VnID0gZmluZF90cmJfc2VnKHN0YXRlLT5uZXdfZGVxX3NlZywKIAkJCXN0YXRlLT5uZXdfZGVxX3B0ciwKIAkJCSZzdGF0ZS0+bmV3X2N5Y2xlX3N0YXRlKTsKLQlpZiAoIXN0YXRlLT5uZXdfZGVxX3NlZykKLQkJQlVHKCk7CisJaWYgKCFzdGF0ZS0+bmV3X2RlcV9zZWcpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KIAogCXRyYiA9ICZzdGF0ZS0+bmV3X2RlcV9wdHItPmdlbmVyaWM7CiAJaWYgKCh0cmItPmZpZWxkWzNdICYgVFJCX1RZUEVfQklUTUFTSykgPT0gVFJCX1RZUEUoVFJCX0xJTkspICYmCkBAIC0xMTg4LDcgKzExODgsNyBAQAogCiAJYWRkciA9ICZ4aGNpLT5vcF9yZWdzLT5wb3J0X3N0YXR1c19iYXNlICsgTlVNX1BPUlRfUkVHUyAqIChwb3J0X2lkIC0gMSk7CiAJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgYWRkcik7Ci0JaWYgKCh0ZW1wICYgUE9SVF9DT05ORUNUKSAmJiAoaGNkLT5zdGF0ZSA9PSBIQ19TVEFURV9TVVNQRU5ERUQpKSB7CisJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfU1VTUEVOREVEKSB7CiAJCXhoY2lfZGJnKHhoY2ksICJyZXN1bWUgcm9vdCBodWJcbiIpOwogCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOwogCX0KQEAgLTE3MTAsOCArMTcxMCw3IEBACiAJCS8qIE90aGVycyBhbHJlYWR5IGhhbmRsZWQgYWJvdmUgKi8KIAkJYnJlYWs7CiAJfQotCWRldl9kYmcoJnRkLT51cmItPmRldi0+ZGV2LAotCQkJImVwICUjeCAtIGFza2VkIGZvciAlZCBieXRlcywgIgorCXhoY2lfZGJnKHhoY2ksICJlcCAlI3ggLSBhc2tlZCBmb3IgJWQgYnl0ZXMsICIKIAkJCSIlZCBieXRlcyB1bnRyYW5zZmVycmVkXG4iLAogCQkJdGQtPnVyYi0+ZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywKIAkJCXRkLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCkBAIC0yMzY5LDEyICsyMzY4LDEzIEBACiAKIAkJLyogU2NhdHRlciBnYXRoZXIgbGlzdCBlbnRyaWVzIG1heSBjcm9zcyA2NEtCIGJvdW5kYXJpZXMgKi8KIAkJcnVubmluZ190b3RhbCA9IFRSQl9NQVhfQlVGRl9TSVpFIC0KLQkJCShzZ19kbWFfYWRkcmVzcyhzZykgJiAoKDEgPDwgVFJCX01BWF9CVUZGX1NISUZUKSAtIDEpKTsKKwkJCShzZ19kbWFfYWRkcmVzcyhzZykgJiAoVFJCX01BWF9CVUZGX1NJWkUgLSAxKSk7CisJCXJ1bm5pbmdfdG90YWwgJj0gVFJCX01BWF9CVUZGX1NJWkUgLSAxOwogCQlpZiAocnVubmluZ190b3RhbCAhPSAwKQogCQkJbnVtX3RyYnMrKzsKIAogCQkvKiBIb3cgbWFueSBtb3JlIDY0S0IgY2h1bmtzIHRvIHRyYW5zZmVyLCBob3cgbWFueSBtb3JlIFRSQnM/ICovCi0JCXdoaWxlIChydW5uaW5nX3RvdGFsIDwgc2dfZG1hX2xlbihzZykpIHsKKwkJd2hpbGUgKHJ1bm5pbmdfdG90YWwgPCBzZ19kbWFfbGVuKHNnKSAmJiBydW5uaW5nX3RvdGFsIDwgdGVtcCkgewogCQkJbnVtX3RyYnMrKzsKIAkJCXJ1bm5pbmdfdG90YWwgKz0gVFJCX01BWF9CVUZGX1NJWkU7CiAJCX0KQEAgLTIzODksNyArMjM4OSw4IEBACiAJfQogCXhoY2lfZGJnKHhoY2ksICJcbiIpOwogCWlmICghaW5faW50ZXJydXB0KCkpCi0JCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICJlcCAlI3ggLSB1cmIgbGVuID0gJWQsIHNnbGlzdCB1c2VkLCBudW1fdHJicyA9ICVkXG4iLAorCQl4aGNpX2RiZyh4aGNpLCAiZXAgJSN4IC0gdXJiIGxlbiA9ICVkLCBzZ2xpc3QgdXNlZCwgIgorCQkJCSJudW1fdHJicyA9ICVkXG4iLAogCQkJCXVyYi0+ZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywKIAkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCiAJCQkJbnVtX3RyYnMpOwpAQCAtMjM5OSwxMSArMjQwMCwxMSBAQAogc3RhdGljIHZvaWQgY2hlY2tfdHJiX21hdGgoc3RydWN0IHVyYiAqdXJiLCBpbnQgbnVtX3RyYnMsIGludCBydW5uaW5nX3RvdGFsKQogewogCWlmIChudW1fdHJicyAhPSAwKQotCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBlcCAlI3ggLSBNaXNjYWxjdWxhdGVkIG51bWJlciBvZiAiCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGVwICUjeCAtIE1pc2NhbGN1bGF0ZWQgbnVtYmVyIG9mICIKIAkJCQkiVFJCcywgJWQgbGVmdFxuIiwgX19mdW5jX18sCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLCBudW1fdHJicyk7CiAJaWYgKHJ1bm5pbmdfdG90YWwgIT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQotCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBlcCAlI3ggLSBNaXNjYWxjdWxhdGVkIHR4IGxlbmd0aCwgIgorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBlcCAlI3ggLSBNaXNjYWxjdWxhdGVkIHR4IGxlbmd0aCwgIgogCQkJCSJxdWV1ZWQgJSN4ICglZCksIGFza2VkIGZvciAlI3ggKCVkKVxuIiwKIAkJCQlfX2Z1bmNfXywKIAkJCQl1cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCkBAIC0yNDE0LDE0ICsyNDE1LDE3IEBACiAKIHN0YXRpYyB2b2lkIGdpdmViYWNrX2ZpcnN0X3RyYihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkLAogCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgsIHVuc2lnbmVkIGludCBzdHJlYW1faWQsIGludCBzdGFydF9jeWNsZSwKLQkJc3RydWN0IHhoY2lfZ2VuZXJpY190cmIgKnN0YXJ0X3RyYiwgc3RydWN0IHhoY2lfdGQgKnRkKQorCQlzdHJ1Y3QgeGhjaV9nZW5lcmljX3RyYiAqc3RhcnRfdHJiKQogewogCS8qCiAJICogUGFzcyBhbGwgdGhlIFRSQnMgdG8gdGhlIGhhcmR3YXJlIGF0IG9uY2UgYW5kIG1ha2Ugc3VyZSB0aGlzIHdyaXRlCiAJICogaXNuJ3QgcmVvcmRlcmVkLgogCSAqLwogCXdtYigpOwotCXN0YXJ0X3RyYi0+ZmllbGRbM10gfD0gc3RhcnRfY3ljbGU7CisJaWYgKHN0YXJ0X2N5Y2xlKQorCQlzdGFydF90cmItPmZpZWxkWzNdIHw9IHN0YXJ0X2N5Y2xlOworCWVsc2UKKwkJc3RhcnRfdHJiLT5maWVsZFszXSAmPSB+MHgxOwogCXhoY2lfcmluZ19lcF9kb29yYmVsbCh4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgc3RyZWFtX2lkKTsKIH0KIApAQCAtMjQ0OSw3ICsyNDUzLDcgQEAKIAkgKiB0byBzZXQgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgKG9uY2UgdGhlIEFQSSBpcyBhZGRlZCkuCiAJICovCiAJaWYgKHhoY2lfaW50ZXJ2YWwgIT0gZXBfaW50ZXJ2YWwpIHsKLQkJaWYgKCFwcmludGtfcmF0ZWxpbWl0KCkpCisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiRHJpdmVyIHVzZXMgZGlmZmVyZW50IGludGVydmFsIgogCQkJCQkiICglZCBtaWNyb2ZyYW1lJXMpIHRoYW4geEhDSSAiCiAJCQkJCSIoJWQgbWljcm9mcmFtZSVzKVxuIiwKQEAgLTI1MzUsOCArMjUzOSw3IEBACiAJc2cgPSB1cmItPnNnOwogCWFkZHIgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJdGhpc19zZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKLQl0cmJfYnVmZl9sZW4gPSBUUkJfTUFYX0JVRkZfU0laRSAtCi0JCShhZGRyICYgKCgxIDw8IFRSQl9NQVhfQlVGRl9TSElGVCkgLSAxKSk7CisJdHJiX2J1ZmZfbGVuID0gVFJCX01BWF9CVUZGX1NJWkUgLSAoYWRkciAmIChUUkJfTUFYX0JVRkZfU0laRSAtIDEpKTsKIAl0cmJfYnVmZl9sZW4gPSBtaW5fdChpbnQsIHRyYl9idWZmX2xlbiwgdGhpc19zZ19sZW4pOwogCWlmICh0cmJfYnVmZl9sZW4gPiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpCiAJCXRyYl9idWZmX2xlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKQEAgLTI1NTEsOSArMjU1NCwxMSBAQAogCQl1MzIgcmVtYWluZGVyID0gMDsKIAogCQkvKiBEb24ndCBjaGFuZ2UgdGhlIGN5Y2xlIGJpdCBvZiB0aGUgZmlyc3QgVFJCIHVudGlsIGxhdGVyICovCi0JCWlmIChmaXJzdF90cmIpCisJCWlmIChmaXJzdF90cmIpIHsKIAkJCWZpcnN0X3RyYiA9IGZhbHNlOwotCQllbHNlCisJCQlpZiAoc3RhcnRfY3ljbGUgPT0gMCkKKwkJCQlmaWVsZCB8PSAweDE7CisJCX0gZWxzZQogCQkJZmllbGQgfD0gZXBfcmluZy0+Y3ljbGVfc3RhdGU7CiAKIAkJLyogQ2hhaW4gYWxsIHRoZSBUUkJzIHRvZ2V0aGVyOyBjbGVhciB0aGUgY2hhaW4gYml0IGluIHRoZSBsYXN0CkBAIC0yNTcyLDcgKzI1NzcsNyBAQAogCQkJCSh1bnNpZ25lZCBpbnQpIChhZGRyICsgVFJCX01BWF9CVUZGX1NJWkUpICYgfihUUkJfTUFYX0JVRkZfU0laRSAtIDEpLAogCQkJCSh1bnNpZ25lZCBpbnQpIGFkZHIgKyB0cmJfYnVmZl9sZW4pOwogCQlpZiAoVFJCX01BWF9CVUZGX1NJWkUgLQotCQkJCShhZGRyICYgKCgxIDw8IFRSQl9NQVhfQlVGRl9TSElGVCkgLSAxKSkgPCB0cmJfYnVmZl9sZW4pIHsKKwkJCQkoYWRkciAmIChUUkJfTUFYX0JVRkZfU0laRSAtIDEpKSA8IHRyYl9idWZmX2xlbikgewogCQkJeGhjaV93YXJuKHhoY2ksICJXQVJOOiBzZyBkbWEgeGZlciBjcm9zc2VzIDY0S0IgYm91bmRhcmllcyFcbiIpOwogCQkJeGhjaV9kYmcoeGhjaSwgIk5leHQgYm91bmRhcnkgYXQgJSN4LCBlbmQgZG1hID0gJSN4XG4iLAogCQkJCQkodW5zaWduZWQgaW50KSAoYWRkciArIFRSQl9NQVhfQlVGRl9TSVpFKSAmIH4oVFJCX01BWF9CVUZGX1NJWkUgLSAxKSwKQEAgLTI2MTYsNyArMjYyMSw3IEBACiAJCX0KIAogCQl0cmJfYnVmZl9sZW4gPSBUUkJfTUFYX0JVRkZfU0laRSAtCi0JCQkoYWRkciAmICgoMSA8PCBUUkJfTUFYX0JVRkZfU0hJRlQpIC0gMSkpOworCQkJKGFkZHIgJiAoVFJCX01BWF9CVUZGX1NJWkUgLSAxKSk7CiAJCXRyYl9idWZmX2xlbiA9IG1pbl90KGludCwgdHJiX2J1ZmZfbGVuLCB0aGlzX3NnX2xlbik7CiAJCWlmIChydW5uaW5nX3RvdGFsICsgdHJiX2J1ZmZfbGVuID4gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQogCQkJdHJiX2J1ZmZfbGVuID0KQEAgLTI2MjUsNyArMjYzMCw3IEBACiAKIAljaGVja190cmJfbWF0aCh1cmIsIG51bV90cmJzLCBydW5uaW5nX3RvdGFsKTsKIAlnaXZlYmFja19maXJzdF90cmIoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIHVyYi0+c3RyZWFtX2lkLAotCQkJc3RhcnRfY3ljbGUsIHN0YXJ0X3RyYiwgdGQpOworCQkJc3RhcnRfY3ljbGUsIHN0YXJ0X3RyYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2NTYsNyArMjY2MSw4IEBACiAJbnVtX3RyYnMgPSAwOwogCS8qIEhvdyBtdWNoIGRhdGEgaXMgKHBvdGVudGlhbGx5KSBsZWZ0IGJlZm9yZSB0aGUgNjRLQiBib3VuZGFyeT8gKi8KIAlydW5uaW5nX3RvdGFsID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkodXJiLT50cmFuc2Zlcl9kbWEgJiAoKDEgPDwgVFJCX01BWF9CVUZGX1NISUZUKSAtIDEpKTsKKwkJKHVyYi0+dHJhbnNmZXJfZG1hICYgKFRSQl9NQVhfQlVGRl9TSVpFIC0gMSkpOworCXJ1bm5pbmdfdG90YWwgJj0gVFJCX01BWF9CVUZGX1NJWkUgLSAxOwogCiAJLyogSWYgdGhlcmUncyBzb21lIGRhdGEgb24gdGhpcyA2NEtCIGNodW5rLCBvciB3ZSBoYXZlIHRvIHNlbmQgYQogCSAqIHplcm8tbGVuZ3RoIHRyYW5zZmVyLCB3ZSBuZWVkIGF0IGxlYXN0IG9uZSBUUkIKQEAgLTI2NzEsNyArMjY3Nyw4IEBACiAJLyogRklYTUU6IHRoaXMgZG9lc24ndCBkZWFsIHdpdGggVVJCX1pFUk9fUEFDS0VUIC0gbmVlZCBvbmUgbW9yZSAqLwogCiAJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKLQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgImVwICUjeCAtIHVyYiBsZW4gPSAlI3ggKCVkKSwgYWRkciA9ICUjbGx4LCBudW1fdHJicyA9ICVkXG4iLAorCQl4aGNpX2RiZyh4aGNpLCAiZXAgJSN4IC0gdXJiIGxlbiA9ICUjeCAoJWQpLCAiCisJCQkJImFkZHIgPSAlI2xseCwgbnVtX3RyYnMgPSAlZFxuIiwKIAkJCQl1cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCiAJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAogCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKQEAgLTI2OTksOCArMjcwNiw4IEBACiAJLyogSG93IG11Y2ggZGF0YSBpcyBpbiB0aGUgZmlyc3QgVFJCPyAqLwogCWFkZHIgPSAodTY0KSB1cmItPnRyYW5zZmVyX2RtYTsKIAl0cmJfYnVmZl9sZW4gPSBUUkJfTUFYX0JVRkZfU0laRSAtCi0JCSh1cmItPnRyYW5zZmVyX2RtYSAmICgoMSA8PCBUUkJfTUFYX0JVRkZfU0hJRlQpIC0gMSkpOwotCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPCB0cmJfYnVmZl9sZW4pCisJCSh1cmItPnRyYW5zZmVyX2RtYSAmIChUUkJfTUFYX0JVRkZfU0laRSAtIDEpKTsKKwlpZiAodHJiX2J1ZmZfbGVuID4gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQogCQl0cmJfYnVmZl9sZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CiAKIAlmaXJzdF90cmIgPSB0cnVlOwpAQCAtMjcxMSw5ICsyNzE4LDExIEBACiAJCWZpZWxkID0gMDsKIAogCQkvKiBEb24ndCBjaGFuZ2UgdGhlIGN5Y2xlIGJpdCBvZiB0aGUgZmlyc3QgVFJCIHVudGlsIGxhdGVyICovCi0JCWlmIChmaXJzdF90cmIpCisJCWlmIChmaXJzdF90cmIpIHsKIAkJCWZpcnN0X3RyYiA9IGZhbHNlOwotCQllbHNlCisJCQlpZiAoc3RhcnRfY3ljbGUgPT0gMCkKKwkJCQlmaWVsZCB8PSAweDE7CisJCX0gZWxzZQogCQkJZmllbGQgfD0gZXBfcmluZy0+Y3ljbGVfc3RhdGU7CiAKIAkJLyogQ2hhaW4gYWxsIHRoZSBUUkJzIHRvZ2V0aGVyOyBjbGVhciB0aGUgY2hhaW4gYml0IGluIHRoZSBsYXN0CkBAIC0yNzU3LDcgKzI3NjYsNyBAQAogCiAJY2hlY2tfdHJiX21hdGgodXJiLCBudW1fdHJicywgcnVubmluZ190b3RhbCk7CiAJZ2l2ZWJhY2tfZmlyc3RfdHJiKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCwKLQkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIsIHRkKTsKKwkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwogfQogCkBAIC0yODE4LDEzICsyODI3LDE3IEBACiAJLyogUXVldWUgc2V0dXAgVFJCIC0gc2VlIHNlY3Rpb24gNi40LjEuMi4xICovCiAJLyogRklYTUUgYmV0dGVyIHdheSB0byB0cmFuc2xhdGUgc2V0dXBfcGFja2V0IGludG8gdHdvIHUzMiBmaWVsZHM/ICovCiAJc2V0dXAgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwlmaWVsZCA9IDA7CisJZmllbGQgfD0gVFJCX0lEVCB8IFRSQl9UWVBFKFRSQl9TRVRVUCk7CisJaWYgKHN0YXJ0X2N5Y2xlID09IDApCisJCWZpZWxkIHw9IDB4MTsKIAlxdWV1ZV90cmIoeGhjaSwgZXBfcmluZywgZmFsc2UsIHRydWUsCiAJCQkvKiBGSVhNRSBlbmRpYW5uZXNzIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJpdGUgbXkgYXNzIGhlcmUuICovCiAJCQlzZXR1cC0+YlJlcXVlc3RUeXBlIHwgc2V0dXAtPmJSZXF1ZXN0IDw8IDggfCBzZXR1cC0+d1ZhbHVlIDw8IDE2LAogCQkJc2V0dXAtPndJbmRleCB8IHNldHVwLT53TGVuZ3RoIDw8IDE2LAogCQkJVFJCX0xFTig4KSB8IFRSQl9JTlRSX1RBUkdFVCgwKSwKIAkJCS8qIEltbWVkaWF0ZSBkYXRhIGluIHBvaW50ZXIgKi8KLQkJCVRSQl9JRFQgfCBUUkJfVFlQRShUUkJfU0VUVVApKTsKKwkJCWZpZWxkKTsKIAogCS8qIElmIHRoZXJlJ3MgZGF0YSwgcXVldWUgZGF0YSBUUkJzICovCiAJZmllbGQgPSAwOwpAQCAtMjg1OSw3ICsyODcyLDcgQEAKIAkJCWZpZWxkIHwgVFJCX0lPQyB8IFRSQl9UWVBFKFRSQl9TVEFUVVMpIHwgZXBfcmluZy0+Y3ljbGVfc3RhdGUpOwogCiAJZ2l2ZWJhY2tfZmlyc3RfdHJiKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCAwLAotCQkJc3RhcnRfY3ljbGUsIHN0YXJ0X3RyYiwgdGQpOworCQkJc3RhcnRfY3ljbGUsIHN0YXJ0X3RyYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NzIsOCArMjg4NSw4IEBACiAJYWRkciA9ICh1NjQpICh1cmItPnRyYW5zZmVyX2RtYSArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0KTsKIAl0ZF9sZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aDsKIAotCXJ1bm5pbmdfdG90YWwgPSBUUkJfTUFYX0JVRkZfU0laRSAtCi0JCQkoYWRkciAmICgoMSA8PCBUUkJfTUFYX0JVRkZfU0hJRlQpIC0gMSkpOworCXJ1bm5pbmdfdG90YWwgPSBUUkJfTUFYX0JVRkZfU0laRSAtIChhZGRyICYgKFRSQl9NQVhfQlVGRl9TSVpFIC0gMSkpOworCXJ1bm5pbmdfdG90YWwgJj0gVFJCX01BWF9CVUZGX1NJWkUgLSAxOwogCWlmIChydW5uaW5nX3RvdGFsICE9IDApCiAJCW51bV90cmJzKys7CiAKQEAgLTI5MDAsNiArMjkxMyw3IEBACiAJaW50IHJ1bm5pbmdfdG90YWwsIHRyYl9idWZmX2xlbiwgdGRfbGVuLCB0ZF9yZW1haW5fbGVuLCByZXQ7CiAJdTY0IHN0YXJ0X2FkZHIsIGFkZHI7CiAJaW50IGksIGo7CisJYm9vbCBtb3JlX3RyYnNfY29taW5nOwogCiAJZXBfcmluZyA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF0ucmluZzsKIApAQCAtMjkxMCw3ICsyOTI0LDcgQEAKIAl9CiAKIAlpZiAoIWluX2ludGVycnVwdCgpKQotCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiZXAgJSN4IC0gdXJiIGxlbiA9ICUjeCAoJWQpLCIKKwkJeGhjaV9kYmcoeGhjaSwgImVwICUjeCAtIHVyYiBsZW4gPSAlI3ggKCVkKSwiCiAJCQkJIiBhZGRyID0gJSNsbHgsIG51bV90ZHMgPSAlZFxuIiwKIAkJCQl1cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCiAJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLApAQCAtMjk1MCw3ICsyOTY0LDEwIEBACiAJCQkJZmllbGQgfD0gVFJCX1RZUEUoVFJCX0lTT0MpOwogCQkJCS8qIEFzc3VtZSBVUkJfSVNPX0FTQVAgaXMgc2V0ICovCiAJCQkJZmllbGQgfD0gVFJCX1NJQTsKLQkJCQlpZiAoaSA+IDApCisJCQkJaWYgKGkgPT0gMCkgeworCQkJCQlpZiAoc3RhcnRfY3ljbGUgPT0gMCkKKwkJCQkJCWZpZWxkIHw9IDB4MTsKKwkJCQl9IGVsc2UKIAkJCQkJZmllbGQgfD0gZXBfcmluZy0+Y3ljbGVfc3RhdGU7CiAJCQkJZmlyc3RfdHJiID0gZmFsc2U7CiAJCQl9IGVsc2UgewpAQCAtMjk2NSw5ICsyOTgyLDExIEBACiAJCQkgKi8KIAkJCWlmIChqIDwgdHJic19wZXJfdGQgLSAxKSB7CiAJCQkJZmllbGQgfD0gVFJCX0NIQUlOOworCQkJCW1vcmVfdHJic19jb21pbmcgPSB0cnVlOwogCQkJfSBlbHNlIHsKIAkJCQl0ZC0+bGFzdF90cmIgPSBlcF9yaW5nLT5lbnF1ZXVlOwogCQkJCWZpZWxkIHw9IFRSQl9JT0M7CisJCQkJbW9yZV90cmJzX2NvbWluZyA9IGZhbHNlOwogCQkJfQogCiAJCQkvKiBDYWxjdWxhdGUgVFJCIGxlbmd0aCAqLwpAQCAtMjk4MCw3ICsyOTk5LDcgQEAKIAkJCWxlbmd0aF9maWVsZCA9IFRSQl9MRU4odHJiX2J1ZmZfbGVuKSB8CiAJCQkJcmVtYWluZGVyIHwKIAkJCQlUUkJfSU5UUl9UQVJHRVQoMCk7Ci0JCQlxdWV1ZV90cmIoeGhjaSwgZXBfcmluZywgZmFsc2UsIGZhbHNlLAorCQkJcXVldWVfdHJiKHhoY2ksIGVwX3JpbmcsIGZhbHNlLCBtb3JlX3RyYnNfY29taW5nLAogCQkJCWxvd2VyXzMyX2JpdHMoYWRkciksCiAJCQkJdXBwZXJfMzJfYml0cyhhZGRyKSwKIAkJCQlsZW5ndGhfZmllbGQsCkBAIC0zMDAzLDEwICszMDIyLDggQEAKIAkJfQogCX0KIAotCXdtYigpOwotCXN0YXJ0X3RyYi0+ZmllbGRbM10gfD0gc3RhcnRfY3ljbGU7Ci0KLQl4aGNpX3JpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIHVyYi0+c3RyZWFtX2lkKTsKKwlnaXZlYmFja19maXJzdF90cmIoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIHVyYi0+c3RyZWFtX2lkLAorCQkJc3RhcnRfY3ljbGUsIHN0YXJ0X3RyYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNjQsNyArMzA4MSw3IEBACiAJICogdG8gc2V0IHRoZSBwb2xsaW5nIGludGVydmFsIChvbmNlIHRoZSBBUEkgaXMgYWRkZWQpLgogCSAqLwogCWlmICh4aGNpX2ludGVydmFsICE9IGVwX2ludGVydmFsKSB7Ci0JCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIkRyaXZlciB1c2VzIGRpZmZlcmVudCBpbnRlcnZhbCIKIAkJCQkJIiAoJWQgbWljcm9mcmFtZSVzKSB0aGFuIHhIQ0kgIgogCQkJCQkiKCVkIG1pY3JvZnJhbWUlcylcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCmluZGV4IDQ1ZTRhMzEuLjIwODNmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCkBAIC0xMDksNyArMTA5LDcgQEAKIC8qCiAgKiBTZXQgdGhlIHJ1biBiaXQgYW5kIHdhaXQgZm9yIHRoZSBob3N0IHRvIGJlIHJ1bm5pbmcuCiAgKi8KLWludCB4aGNpX3N0YXJ0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKK3N0YXRpYyBpbnQgeGhjaV9zdGFydChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCiB7CiAJdTMyIHRlbXA7CiAJaW50IHJldDsKQEAgLTIyNiw3ICsyMjYsOCBAQAogc3RhdGljIGludCB4aGNpX3NldHVwX21zaXgoc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewogCWludCBpLCByZXQgPSAwOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih4aGNpX3RvX2hjZCh4aGNpKS0+c2VsZi5jb250cm9sbGVyKTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0geGhjaV90b19oY2QoeGhjaSk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKIAogCS8qCiAJICogY2FsY3VsYXRlIG51bWJlciBvZiBtc2kteCB2ZWN0b3JzIHN1cHBvcnRlZC4KQEAgLTI2NSw2ICsyNjYsNyBAQAogCQkJZ290byBkaXNhYmxlX21zaXg7CiAJfQogCisJaGNkLT5tc2l4X2VuYWJsZWQgPSAxOwogCXJldHVybiByZXQ7CiAKIGRpc2FibGVfbXNpeDoKQEAgLTI4MCw3ICsyODIsOCBAQAogLyogRnJlZSBhbnkgSVJRcyBhbmQgZGlzYWJsZSBNU0ktWCAqLwogc3RhdGljIHZvaWQgeGhjaV9jbGVhbnVwX21zaXgoc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih4aGNpX3RvX2hjZCh4aGNpKS0+c2VsZi5jb250cm9sbGVyKTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0geGhjaV90b19oY2QoeGhjaSk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKIAogCXhoY2lfZnJlZV9pcnEoeGhjaSk7CiAKQEAgLTI5Miw2ICsyOTUsNyBAQAogCQlwY2lfZGlzYWJsZV9tc2kocGRldik7CiAJfQogCisJaGNkLT5tc2l4X2VuYWJsZWQgPSAwOwogCXJldHVybjsKIH0KIApAQCAtMzI1LDcgKzMyOSw3IEBACiAKIAogI2lmZGVmIENPTkZJR19VU0JfWEhDSV9IQ0RfREVCVUdHSU5HCi12b2lkIHhoY2lfZXZlbnRfcmluZ193b3JrKHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIHZvaWQgeGhjaV9ldmVudF9yaW5nX3dvcmsodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdGVtcDsKQEAgLTQ2OSw3ICs0NzMsNyBAQAogCQkJeGhjaS0+aXJfc2V0LCAodW5zaWduZWQgaW50KSBFUl9JUlFfRU5BQkxFKHRlbXApKTsKIAl4aGNpX3dyaXRlbCh4aGNpLCBFUl9JUlFfRU5BQkxFKHRlbXApLAogCQkJJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOwotCXhoY2lfcHJpbnRfaXJfc2V0KHhoY2ksIHhoY2ktPmlyX3NldCwgMCk7CisJeGhjaV9wcmludF9pcl9zZXQoeGhjaSwgMCk7CiAKIAlpZiAoTlVNX1RFU1RfTk9PUFMgPiAwKQogCQlkb29yYmVsbCA9IHhoY2lfc2V0dXBfb25lX25vb3AoeGhjaSk7CkBAIC01MDgsOSArNTEyLDEwIEBACiAJc3Bpbl9sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAJeGhjaV9oYWx0KHhoY2kpOwogCXhoY2lfcmVzZXQoeGhjaSk7Ci0JeGhjaV9jbGVhbnVwX21zaXgoeGhjaSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAorCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOworCiAjaWZkZWYgQ09ORklHX1VTQl9YSENJX0hDRF9ERUJVR0dJTkcKIAkvKiBUZWxsIHRoZSBldmVudCByaW5nIHBvbGwgZnVuY3Rpb24gbm90IHRvIHJlc2NoZWR1bGUgKi8KIAl4aGNpLT56b21iaWUgPSAxOwpAQCAtNTIzLDcgKzUyOCw3IEBACiAJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOwogCXhoY2lfd3JpdGVsKHhoY2ksIEVSX0lSUV9ESVNBQkxFKHRlbXApLAogCQkJJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOwotCXhoY2lfcHJpbnRfaXJfc2V0KHhoY2ksIHhoY2ktPmlyX3NldCwgMCk7CisJeGhjaV9wcmludF9pcl9zZXQoeGhjaSwgMCk7CiAKIAl4aGNpX2RiZyh4aGNpLCAiY2xlYW5pbmcgdXAgbWVtb3J5XG4iKTsKIAl4aGNpX21lbV9jbGVhbnVwKHhoY2kpOwpAQCAtNTQ0LDkgKzU0OSwxMCBAQAogCiAJc3Bpbl9sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAJeGhjaV9oYWx0KHhoY2kpOwotCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOwogCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAKKwl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKKwogCXhoY2lfZGJnKHhoY2ksICJ4aGNpX3NodXRkb3duIGNvbXBsZXRlZCAtIHN0YXR1cyA9ICV4XG4iLAogCQkgICAgeGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+b3BfcmVncy0+c3RhdHVzKSk7CiB9CkBAIC02NDcsNiArNjUzLDcgQEAKIAlpbnQJCQlyYyA9IDA7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSB4aGNpX3RvX2hjZCh4aGNpKTsKIAl1MzIJCQljb21tYW5kOworCWludAkJCWk7CiAKIAlzcGluX2xvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOwpAQCAtNjc3LDEwICs2ODQsMTUgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQotCS8qIHN0ZXAgNTogcmVtb3ZlIGNvcmUgd2VsbCBwb3dlciAqLwotCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOwogCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAKKwkvKiBzdGVwIDU6IHJlbW92ZSBjb3JlIHdlbGwgcG93ZXIgKi8KKwkvKiBzeW5jaHJvbml6ZSBpcnEgd2hlbiB1c2luZyBNU0ktWCAqLworCWlmICh4aGNpLT5tc2l4X2VudHJpZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IHhoY2ktPm1zaXhfY291bnQ7IGkrKykKKwkJCXN5bmNocm9uaXplX2lycSh4aGNpLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yKTsKKwl9CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTY5NCw3ICs3MDYsNiBAQAogewogCXUzMgkJCWNvbW1hbmQsIHRlbXAgPSAwOwogCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0geGhjaV90b19oY2QoeGhjaSk7Ci0Jc3RydWN0IHBjaV9kZXYJCSpwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CiAJaW50CW9sZF9zdGF0ZSwgcmV0dmFsOwogCiAJb2xkX3N0YXRlID0gaGNkLT5zdGF0ZTsKQEAgLTcyOSw5ICs3NDAsOCBAQAogCQl4aGNpX2RiZyh4aGNpLCAiU3RvcCBIQ0RcbiIpOwogCQl4aGNpX2hhbHQoeGhjaSk7CiAJCXhoY2lfcmVzZXQoeGhjaSk7Ci0JCWlmIChoaWJlcm5hdGVkKQotCQkJeGhjaV9jbGVhbnVwX21zaXgoeGhjaSk7CiAJCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7CisJCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOwogCiAjaWZkZWYgQ09ORklHX1VTQl9YSENJX0hDRF9ERUJVR0dJTkcKIAkJLyogVGVsbCB0aGUgZXZlbnQgcmluZyBwb2xsIGZ1bmN0aW9uIG5vdCB0byByZXNjaGVkdWxlICovCkBAIC03NDUsNyArNzU1LDcgQEAKIAkJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOwogCQl4aGNpX3dyaXRlbCh4aGNpLCBFUl9JUlFfRElTQUJMRSh0ZW1wKSwKIAkJCQkmeGhjaS0+aXJfc2V0LT5pcnFfcGVuZGluZyk7Ci0JCXhoY2lfcHJpbnRfaXJfc2V0KHhoY2ksIHhoY2ktPmlyX3NldCwgMCk7CisJCXhoY2lfcHJpbnRfaXJfc2V0KHhoY2ksIDApOwogCiAJCXhoY2lfZGJnKHhoY2ksICJjbGVhbmluZyB1cCBtZW1vcnlcbiIpOwogCQl4aGNpX21lbV9jbGVhbnVwKHhoY2kpOwpAQCAtNzY1LDMwICs3NzUsNiBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7Ci0JLyogUmUtc2V0dXAgTVNJLVggKi8KLQlpZiAoaGNkLT5pcnEpCi0JCWZyZWVfaXJxKGhjZC0+aXJxLCBoY2QpOwotCWhjZC0+aXJxID0gLTE7Ci0KLQlyZXR2YWwgPSB4aGNpX3NldHVwX21zaXgoeGhjaSk7Ci0JaWYgKHJldHZhbCkKLQkJLyogZmFsbCBiYWNrIHRvIG1zaSovCi0JCXJldHZhbCA9IHhoY2lfc2V0dXBfbXNpKHhoY2kpOwotCi0JaWYgKHJldHZhbCkgewotCQkvKiBmYWxsIGJhY2sgdG8gbGVnYWN5IGludGVycnVwdCovCi0JCXJldHZhbCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgJnVzYl9oY2RfaXJxLCBJUlFGX1NIQVJFRCwKLQkJCQkJaGNkLT5pcnFfZGVzY3IsIGhjZCk7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCXhoY2lfZXJyKHhoY2ksICJyZXF1ZXN0IGludGVycnVwdCAlZCBmYWlsZWRcbiIsCi0JCQkJCXBkZXYtPmlycSk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9Ci0JCWhjZC0+aXJxID0gcGRldi0+aXJxOwotCX0KLQotCXNwaW5fbG9ja19pcnEoJnhoY2ktPmxvY2spOwogCS8qIHN0ZXAgNDogc2V0IFJ1bi9TdG9wIGJpdCAqLwogCWNvbW1hbmQgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5jb21tYW5kKTsKIAljb21tYW5kIHw9IENNRF9SVU47CkBAIC04NzEsNyArODU3LDcgQEAKIC8qIFJldHVybnMgMSBpZiB0aGUgYXJndW1lbnRzIGFyZSBPSzsKICAqIHJldHVybnMgMCB0aGlzIGlzIGEgcm9vdCBodWI7IHJldHVybnMgLUVJTlZBTCBmb3IgTlVMTCBwb2ludGVycy4KICAqLwotaW50IHhoY2lfY2hlY2tfYXJncyhzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKK3N0YXRpYyBpbnQgeGhjaV9jaGVja19hcmdzKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAogCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLCBpbnQgY2hlY2tfZXAsIGJvb2wgY2hlY2tfdmlydF9kZXYsCiAJCWNvbnN0IGNoYXIgKmZ1bmMpIHsKIAlzdHJ1Y3QgeGhjaV9oY2QJKnhoY2k7CkBAIC0xNzA3LDcgKzE2OTMsNyBAQAogCXhoY2lfZGJnX2N0eCh4aGNpLCBpbl9jdHgsIHhoY2lfbGFzdF92YWxpZF9lbmRwb2ludChhZGRfZmxhZ3MpKTsKIH0KIAotdm9pZCB4aGNpX3NldHVwX2lucHV0X2N0eF9mb3JfcXVpcmsoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorc3RhdGljIHZvaWQgeGhjaV9zZXR1cF9pbnB1dF9jdHhfZm9yX3F1aXJrKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJdW5zaWduZWQgaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCwKIAkJc3RydWN0IHhoY2lfZGVxdWV1ZV9zdGF0ZSAqZGVxX3N0YXRlKQogewpAQCAtMjQ0NSw4ICsyNDMxLDEyIEBACiAJCXhoY2lfZXJyKHhoY2ksICJFcnJvciB3aGlsZSBhc3NpZ25pbmcgZGV2aWNlIHNsb3QgSURcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JLyogeGhjaV9hbGxvY192aXJ0X2RldmljZSgpIGRvZXMgbm90IHRvdWNoIHJpbmdzOyBubyBuZWVkIHRvIGxvY2sgKi8KLQlpZiAoIXhoY2lfYWxsb2NfdmlydF9kZXZpY2UoeGhjaSwgeGhjaS0+c2xvdF9pZCwgdWRldiwgR0ZQX0tFUk5FTCkpIHsKKwkvKiB4aGNpX2FsbG9jX3ZpcnRfZGV2aWNlKCkgZG9lcyBub3QgdG91Y2ggcmluZ3M7IG5vIG5lZWQgdG8gbG9jay4KKwkgKiBVc2UgR0ZQX05PSU8sIHNpbmNlIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBmcm9tCisJICogeGhjaV9kaXNjb3Zlcl9vcl9yZXNldF9kZXZpY2UoKSwgd2hpY2ggbWF5IGJlIGNhbGxlZCBhcyBwYXJ0IG9mCisJICogbWFzcyBzdG9yYWdlIGRyaXZlciBlcnJvciBoYW5kbGluZy4KKwkgKi8KKwlpZiAoIXhoY2lfYWxsb2NfdmlydF9kZXZpY2UoeGhjaSwgeGhjaS0+c2xvdF9pZCwgdWRldiwgR0ZQX05PSU8pKSB7CiAJCS8qIERpc2FibGUgc2xvdCwgaWYgd2UgY2FuIGRvIGl0IHdpdGhvdXQgbWVtIGFsbG9jICovCiAJCXhoY2lfd2Fybih4aGNpLCAiQ291bGQgbm90IGFsbG9jYXRlIHhIQ0kgVVNCIGRldmljZSBkYXRhIHN0cnVjdHVyZXNcbiIpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAppbmRleCAxNzBjMzY3Li43ZjEyN2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaApAQCAtNDM2LDIyICs0MzYsMTggQEAKIC8qKgogICogc3RydWN0IGRvb3JiZWxsX2FycmF5CiAgKgorICogQml0cyAgMCAtICA3OiBFbmRwb2ludCB0YXJnZXQKKyAqIEJpdHMgIDggLSAxNTogUnN2ZFoKKyAqIEJpdHMgMTYgLSAzMTogU3RyZWFtIElECisgKgogICogU2VjdGlvbiA1LjYKICAqLwogc3RydWN0IHhoY2lfZG9vcmJlbGxfYXJyYXkgewogCXUzMglkb29yYmVsbFsyNTZdOwogfTsKIAotI2RlZmluZQlEQl9UQVJHRVRfTUFTSwkJMHhGRkZGRkYwMAotI2RlZmluZQlEQl9TVFJFQU1fSURfTUFTSwkweDAwMDBGRkZGCi0jZGVmaW5lCURCX1RBUkdFVF9IT1NUCQkweDAKLSNkZWZpbmUJREJfU1RSRUFNX0lEX0hPU1QJMHgwCi0jZGVmaW5lCURCX01BU0sJCQkoMHhmZiA8PCA4KQotCi0vKiBFbmRwb2ludCBUYXJnZXQgLSBiaXRzIDA6NyAqLwotI2RlZmluZSBFUElfVE9fREIocCkJCSgoKHApICsgMSkgJiAweGZmKQotI2RlZmluZSBTVFJFQU1fSURfVE9fREIocCkJKCgocCkgJiAweGZmZmYpIDw8IDE2KQotCisjZGVmaW5lIERCX1ZBTFVFKGVwLCBzdHJlYW0pCSgoKChlcCkgKyAxKSAmIDB4ZmYpIHwgKChzdHJlYW0pIDw8IDE2KSkKKyNkZWZpbmUgREJfVkFMVUVfSE9TVAkJMHgwMDAwMDAwMAogCiAvKioKICAqIHN0cnVjdCB4aGNpX3Byb3RvY29sX2NhcHMKQEAgLTEzNTIsNyArMTM0OCw3IEBACiB9CiAKIC8qIHhIQ0kgZGVidWdnaW5nICovCi12b2lkIHhoY2lfcHJpbnRfaXJfc2V0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfaW50cl9yZWcgKmlyX3NldCwgaW50IHNldF9udW0pOwordm9pZCB4aGNpX3ByaW50X2lyX3NldChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzZXRfbnVtKTsKIHZvaWQgeGhjaV9wcmludF9yZWdpc3RlcnMoc3RydWN0IHhoY2lfaGNkICp4aGNpKTsKIHZvaWQgeGhjaV9kYmdfcmVncyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpOwogdm9pZCB4aGNpX3ByaW50X3J1bl9yZWdzKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYwppbmRleCAxNzMyZDliLi4xNjE2YWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogc3RhdGljIHZvaWQgY2hhbmdlX2NvbG9yKHN0cnVjdCB1c2JfbGVkICpsZWQpCiB7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsID0gMDsKIAl1bnNpZ25lZCBjaGFyICpidWZmZXI7CiAKIAlidWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKaW5kZXggNGZmMjE1OC4uZjdhMjA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCkBAIC03NzYsNyArNzc2LDYgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNTU3LCAweDIwMDEpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDcyOSwgMHgxMjg0KSB9LAogCXsgVVNCX0RFVklDRSgweDEyOTMsIDB4MDAwMikgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMjkzLCAweDAwMDIpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHgwMDAyKSB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCmluZGV4IGVlYmEyMjguLjlkNDlkMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKQEAgLTQwNCw2ICs0MDQsNyBAQAogCQltdXNiLT54Y2Vpdi0+c2V0X3Bvd2VyID0gYmZpbl9tdXNiX3NldF9wb3dlcjsKIAogCW11c2ItPmlzciA9IGJsYWNrZmluX2ludGVycnVwdDsKKwltdXNiLT5kb3VibGVfYnVmZmVyX25vdF9vayA9IHRydWU7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCmluZGV4IDA3Y2YzOTQuLmMyOTJkNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtMTI4LDEyICsxMjgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtdXNiICpkZXZfdG9fbXVzYihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0jaWZkZWYgQ09ORklHX1VTQl9NVVNCX0hEUkNfSENECi0JLyogdXNiY29yZSBpbnNpc3RzIGRldi0+ZHJpdmVyX2RhdGEgaXMgYSAic3RydWN0IGhjZCAqIiAqLwotCXJldHVybiBoY2RfdG9fbXVzYihkZXZfZ2V0X2RydmRhdGEoZGV2KSk7Ci0jZWxzZQogCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLSNlbmRpZgogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTg2OSw2ICsxODY0LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmbXVzYi0+b3V0X2J1bGspOwogCiAJaGNkLT51c2VzX25ld19wb2xsaW5nID0gMTsKKwloY2QtPmhhc190dCA9IDE7CiAKIAltdXNiLT52YnVzZXJyX3JldHJ5ID0gVkJVU0VSUl9SRVRSWV9DT1VOVDsKIAltdXNiLT5hX3dhaXRfYmNvbiA9IE9UR19USU1FX0FfV0FJVF9CQ09OOwpAQCAtMTg3NiwxMCArMTg3Miw5IEBACiAJbXVzYiA9IGt6YWxsb2Moc2l6ZW9mICptdXNiLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW11c2IpCiAJCXJldHVybiBOVUxMOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG11c2IpOwogCiAjZW5kaWYKLQorCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG11c2IpOwogCW11c2ItPm1yZWdzID0gbWJhc2U7CiAJbXVzYi0+Y3RybF9iYXNlID0gbWJhc2U7CiAJbXVzYi0+bklycSA9IC1FTk9ERVY7CkBAIC0yMTkxLDcgKzIxODYsNyBAQAogCXZvaWQgX19pb21lbQkqYmFzZTsKIAogCWlvbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIWlvbWVtIHx8IGlycSA9PSAwKQorCWlmICghaW9tZW0gfHwgaXJxIDw9IDApCiAJCXJldHVybiAtRU5PREVWOwogCiAJYmFzZSA9IGlvcmVtYXAoaW9tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGlvbWVtKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCBkMGMyMzZmLi5lNjQwMGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKQEAgLTQ5Nyw2ICs0OTcsMTkgQEAKIAlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmdhZGdldF9kcml2ZXI7CS8qIGl0cyBkcml2ZXIgKi8KICNlbmRpZgogCisJLyoKKwkgKiBGSVhNRTogUmVtb3ZlIHRoaXMgZmxhZy4KKwkgKgorCSAqIFRoaXMgaXMgb25seSBhZGRlZCB0byBhbGxvdyBCbGFja2ZpbiB0byB3b3JrCisJICogd2l0aCBjdXJyZW50IGRyaXZlci4gRm9yIHNvbWUgdW5rbm93biByZWFzb24KKwkgKiBCbGFja2ZpbiBkb2Vzbid0IHdvcmsgd2l0aCBkb3VibGUgYnVmZmVyaW5nCisJICogYW5kIHRoYXQncyBlbmFibGVkIGJ5IGRlZmF1bHQuCisJICoKKwkgKiBXZSBhZGRlZCB0aGlzIGZsYWcgdG8gZm9yY2VmdWxseSBkaXNhYmxlIGRvdWJsZQorCSAqIGJ1ZmZlcmluZyB1bnRpbCB3ZSBnZXQgaXQgd29ya2luZy4KKwkgKi8KKwl1bnNpZ25lZCAgICAgICAgICAgICAgICBkb3VibGVfYnVmZmVyX25vdF9vazoxIF9fZGVwcmVjYXRlZDsKKwogCXN0cnVjdCBtdXNiX2hkcmNfY29uZmlnCSpjb25maWc7CiAKICNpZmRlZiBNVVNCX0NPTkZJR19QUk9DX0ZTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmgKaW5kZXggOTE2MDY1Yi4uM2E5N2M0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RtYS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kbWEuaApAQCAtMTY5LDYgKzE2OSw5IEBACiAJCQkJCQkJZG1hX2FkZHJfdCBkbWFfYWRkciwKIAkJCQkJCQl1MzIgbGVuZ3RoKTsKIAlpbnQJCQkoKmNoYW5uZWxfYWJvcnQpKHN0cnVjdCBkbWFfY2hhbm5lbCAqKTsKKwlpbnQJCQkoKmlzX2NvbXBhdGlibGUpKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCQkJCQl1MTYgbWF4cGFja2V0LAorCQkJCQkJCXZvaWQgKmJ1ZiwgdTMyIGxlbmd0aCk7CiB9OwogCiAvKiBjYWxsZWQgYWZ0ZXIgY2hhbm5lbF9wcm9ncmFtKCksIG1heSBpbmRpY2F0ZSBhIGZhdWx0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKaW5kZXggZWQ1OGM2Yy4uMmZlMzA0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwpAQCAtOTIsMTEgKzkyLDMzIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKKyNkZWZpbmUgaXNfYnVmZmVyX21hcHBlZChyZXEpIChpc19kbWFfY2FwYWJsZSgpICYmIFwKKwkJCQkJKHJlcS0+bWFwX3N0YXRlICE9IFVOX01BUFBFRCkpCisKIC8qIE1hcHMgdGhlIGJ1ZmZlciB0byBkbWEgICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBfZG1hX2J1ZmZlcihzdHJ1Y3QgbXVzYl9yZXF1ZXN0ICpyZXF1ZXN0LAotCQkJCXN0cnVjdCBtdXNiICptdXNiKQorCQkJc3RydWN0IG11c2IgKm11c2IsIHN0cnVjdCBtdXNiX2VwICptdXNiX2VwKQogeworCWludCBjb21wYXRpYmxlID0gdHJ1ZTsKKwlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIgKmRtYSA9IG11c2ItPmRtYV9jb250cm9sbGVyOworCisJcmVxdWVzdC0+bWFwX3N0YXRlID0gVU5fTUFQUEVEOworCisJaWYgKCFpc19kbWFfY2FwYWJsZSgpIHx8ICFtdXNiX2VwLT5kbWEpCisJCXJldHVybjsKKworCS8qIENoZWNrIGlmIERNQSBlbmdpbmUgY2FuIGhhbmRsZSB0aGlzIHJlcXVlc3QuCisJICogRE1BIGNvZGUgbXVzdCByZWplY3QgdGhlIFVTQiByZXF1ZXN0IGV4cGxpY2l0bHkuCisJICogRGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gbWFwIHRoZSByZXF1ZXN0LgorCSAqLworCWlmIChkbWEtPmlzX2NvbXBhdGlibGUpCisJCWNvbXBhdGlibGUgPSBkbWEtPmlzX2NvbXBhdGlibGUobXVzYl9lcC0+ZG1hLAorCQkJCW11c2JfZXAtPnBhY2tldF9zeiwgcmVxdWVzdC0+cmVxdWVzdC5idWYsCisJCQkJcmVxdWVzdC0+cmVxdWVzdC5sZW5ndGgpOworCWlmICghY29tcGF0aWJsZSkKKwkJcmV0dXJuOworCiAJaWYgKHJlcXVlc3QtPnJlcXVlc3QuZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHsKIAkJcmVxdWVzdC0+cmVxdWVzdC5kbWEgPSBkbWFfbWFwX3NpbmdsZSgKIAkJCQltdXNiLT5jb250cm9sbGVyLApAQCAtMTA1LDcgKzEyNyw3IEBACiAJCQkJcmVxdWVzdC0+dHgKIAkJCQkJPyBETUFfVE9fREVWSUNFCiAJCQkJCTogRE1BX0ZST01fREVWSUNFKTsKLQkJcmVxdWVzdC0+bWFwcGVkID0gMTsKKwkJcmVxdWVzdC0+bWFwX3N0YXRlID0gTVVTQl9NQVBQRUQ7CiAJfSBlbHNlIHsKIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UobXVzYi0+Y29udHJvbGxlciwKIAkJCXJlcXVlc3QtPnJlcXVlc3QuZG1hLApAQCAtMTEzLDcgKzEzNSw3IEBACiAJCQlyZXF1ZXN0LT50eAogCQkJCT8gRE1BX1RPX0RFVklDRQogCQkJCTogRE1BX0ZST01fREVWSUNFKTsKLQkJcmVxdWVzdC0+bWFwcGVkID0gMDsKKwkJcmVxdWVzdC0+bWFwX3N0YXRlID0gUFJFX01BUFBFRDsKIAl9CiB9CiAKQEAgLTEyMSwxMSArMTQzLDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdW5tYXBfZG1hX2J1ZmZlcihzdHJ1Y3QgbXVzYl9yZXF1ZXN0ICpyZXF1ZXN0LAogCQkJCXN0cnVjdCBtdXNiICptdXNiKQogeworCWlmICghaXNfYnVmZmVyX21hcHBlZChyZXF1ZXN0KSkKKwkJcmV0dXJuOworCiAJaWYgKHJlcXVlc3QtPnJlcXVlc3QuZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHsKIAkJREJHKDIwLCAibm90IHVubWFwcGluZyBhIG5ldmVyIG1hcHBlZCBidWZmZXJcbiIpOwogCQlyZXR1cm47CiAJfQotCWlmIChyZXF1ZXN0LT5tYXBwZWQpIHsKKwlpZiAocmVxdWVzdC0+bWFwX3N0YXRlID09IE1VU0JfTUFQUEVEKSB7CiAJCWRtYV91bm1hcF9zaW5nbGUobXVzYi0+Y29udHJvbGxlciwKIAkJCXJlcXVlc3QtPnJlcXVlc3QuZG1hLAogCQkJcmVxdWVzdC0+cmVxdWVzdC5sZW5ndGgsCkBAIC0xMzMsMTYgKzE1OCwxNSBAQAogCQkJCT8gRE1BX1RPX0RFVklDRQogCQkJCTogRE1BX0ZST01fREVWSUNFKTsKIAkJcmVxdWVzdC0+cmVxdWVzdC5kbWEgPSBETUFfQUREUl9JTlZBTElEOwotCQlyZXF1ZXN0LT5tYXBwZWQgPSAwOwotCX0gZWxzZSB7CisJfSBlbHNlIHsgLyogUFJFX01BUFBFRCAqLwogCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShtdXNiLT5jb250cm9sbGVyLAogCQkJcmVxdWVzdC0+cmVxdWVzdC5kbWEsCiAJCQlyZXF1ZXN0LT5yZXF1ZXN0Lmxlbmd0aCwKIAkJCXJlcXVlc3QtPnR4CiAJCQkJPyBETUFfVE9fREVWSUNFCiAJCQkJOiBETUFfRlJPTV9ERVZJQ0UpOwotCiAJfQorCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IFVOX01BUFBFRDsKIH0KIAogLyoKQEAgLTE3Miw4ICsxOTYsNyBAQAogCiAJZXAtPmJ1c3kgPSAxOwogCXNwaW5fdW5sb2NrKCZtdXNiLT5sb2NrKTsKLQlpZiAoaXNfZG1hX2NhcGFibGUoKSAmJiBlcC0+ZG1hKQotCQl1bm1hcF9kbWFfYnVmZmVyKHJlcSwgbXVzYik7CisJdW5tYXBfZG1hX2J1ZmZlcihyZXEsIG11c2IpOwogCWlmIChyZXF1ZXN0LT5zdGF0dXMgPT0gMCkKIAkJREJHKDUsICIlcyBkb25lIHJlcXVlc3QgJXAsICAlZC8lZFxuIiwKIAkJCQllcC0+ZW5kX3BvaW50Lm5hbWUsIHJlcXVlc3QsCkBAIC0zMzUsNyArMzU4LDcgQEAKIAkJCWNzcik7CiAKICNpZm5kZWYJQ09ORklHX01VU0JfUElPX09OTFkKLQlpZiAoaXNfZG1hX2NhcGFibGUoKSAmJiBtdXNiX2VwLT5kbWEpIHsKKwlpZiAoaXNfYnVmZmVyX21hcHBlZChyZXEpKSB7CiAJCXN0cnVjdCBkbWFfY29udHJvbGxlcgkqYyA9IG11c2ItPmRtYV9jb250cm9sbGVyOwogCQlzaXplX3QgcmVxdWVzdF9zaXplOwogCkBAIC00MzYsOCArNDU5LDcgQEAKIAkJICogVW5tYXAgdGhlIGRtYSBidWZmZXIgYmFjayB0byBjcHUgaWYgZG1hIGNoYW5uZWwKIAkJICogcHJvZ3JhbW1pbmcgZmFpbHMKIAkJICovCi0JCWlmIChpc19kbWFfY2FwYWJsZSgpICYmIG11c2JfZXAtPmRtYSkKLQkJCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKKwkJdW5tYXBfZG1hX2J1ZmZlcihyZXEsIG11c2IpOwogCiAJCW11c2Jfd3JpdGVfZmlmbyhtdXNiX2VwLT5od19lcCwgZmlmb19jb3VudCwKIAkJCQkodTggKikgKHJlcXVlc3QtPmJ1ZiArIHJlcXVlc3QtPmFjdHVhbCkpOwpAQCAtNjI3LDcgKzY0OSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoaXNfY3BwaV9lbmFibGVkKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJaWYgKGlzX2NwcGlfZW5hYmxlZCgpICYmIGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJKmMgPSBtdXNiLT5kbWFfY29udHJvbGxlcjsKIAkJc3RydWN0IGRtYV9jaGFubmVsCSpjaGFubmVsID0gbXVzYl9lcC0+ZG1hOwogCkBAIC02NTgsNyArNjgwLDcgQEAKIAkJbGVuID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ09VTlQpOwogCQlpZiAocmVxdWVzdC0+YWN0dWFsIDwgcmVxdWVzdC0+bGVuZ3RoKSB7CiAjaWZkZWYgQ09ORklHX1VTQl9JTlZFTlRSQV9ETUEKLQkJCWlmIChpc19kbWFfY2FwYWJsZSgpICYmIG11c2JfZXAtPmRtYSkgeworCQkJaWYgKGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQkJCXN0cnVjdCBkbWFfY29udHJvbGxlcgkqYzsKIAkJCQlzdHJ1Y3QgZG1hX2NoYW5uZWwJKmNoYW5uZWw7CiAJCQkJaW50CQkJdXNlX2RtYSA9IDA7CkBAIC03NDIsNyArNzY0LDcgQEAKIAkJCWZpZm9fY291bnQgPSBtaW5fdCh1bnNpZ25lZCwgbGVuLCBmaWZvX2NvdW50KTsKIAogI2lmZGVmCUNPTkZJR19VU0JfVFVTQl9PTUFQX0RNQQotCQkJaWYgKHR1c2JfZG1hX29tYXAoKSAmJiBtdXNiX2VwLT5kbWEpIHsKKwkJCWlmICh0dXNiX2RtYV9vbWFwKCkgJiYgaXNfYnVmZmVyX21hcHBlZChyZXEpKSB7CiAJCQkJc3RydWN0IGRtYV9jb250cm9sbGVyICpjID0gbXVzYi0+ZG1hX2NvbnRyb2xsZXI7CiAJCQkJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gbXVzYl9lcC0+ZG1hOwogCQkJCXUzMiBkbWFfYWRkciA9IHJlcXVlc3QtPmRtYSArIHJlcXVlc3QtPmFjdHVhbDsKQEAgLTc2Miw3ICs3ODQsNyBAQAogCQkJICogcHJvZ3JhbW1pbmcgZmFpbHMuIFRoaXMgYnVmZmVyIGlzIG1hcHBlZCBpZiB0aGUKIAkJCSAqIGNoYW5uZWwgYWxsb2NhdGlvbiBpcyBzdWNjZXNzZnVsCiAJCQkgKi8KLQkJCSBpZiAoaXNfZG1hX2NhcGFibGUoKSAmJiBtdXNiX2VwLT5kbWEpIHsKKwkJCSBpZiAoaXNfYnVmZmVyX21hcHBlZChyZXEpKSB7CiAJCQkJdW5tYXBfZG1hX2J1ZmZlcihyZXEsIG11c2IpOwogCiAJCQkJLyoKQEAgLTk4OSw3ICsxMDExLDExIEBACiAJCS8qIFNldCBUWE1BWFAgd2l0aCB0aGUgRklGTyBzaXplIG9mIHRoZSBlbmRwb2ludAogCQkgKiB0byBkaXNhYmxlIGRvdWJsZSBidWZmZXJpbmcgbW9kZS4KIAkJICovCi0JCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfVFhNQVhQLCBtdXNiX2VwLT5wYWNrZXRfc3ogfCAobXVzYl9lcC0+aGJfbXVsdCA8PCAxMSkpOworCQlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCisJCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1RYTUFYUCwgaHdfZXAtPm1heF9wYWNrZXRfc3pfdHgpOworCQllbHNlCisJCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1RYTUFYUCwgbXVzYl9lcC0+cGFja2V0X3N6CisJCQkJCXwgKG11c2JfZXAtPmhiX211bHQgPDwgMTEpKTsKIAogCQljc3IgPSBNVVNCX1RYQ1NSX01PREUgfCBNVVNCX1RYQ1NSX0NMUkRBVEFUT0c7CiAJCWlmIChtdXNiX3JlYWR3KHJlZ3MsIE1VU0JfVFhDU1IpCkBAIC0xMDI1LDcgKzEwNTEsMTEgQEAKIAkJLyogU2V0IFJYTUFYUCB3aXRoIHRoZSBGSUZPIHNpemUgb2YgdGhlIGVuZHBvaW50CiAJCSAqIHRvIGRpc2FibGUgZG91YmxlIGJ1ZmZlcmluZyBtb2RlLgogCQkgKi8KLQkJbXVzYl93cml0ZXcocmVncywgTVVTQl9SWE1BWFAsIG11c2JfZXAtPnBhY2tldF9zeiB8IChtdXNiX2VwLT5oYl9tdWx0IDw8IDExKSk7CisJCWlmIChtdXNiLT5kb3VibGVfYnVmZmVyX25vdF9vaykKKwkJCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfUlhNQVhQLCBod19lcC0+bWF4X3BhY2tldF9zel90eCk7CisJCWVsc2UKKwkJCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfUlhNQVhQLCBtdXNiX2VwLT5wYWNrZXRfc3oKKwkJCQkJfCAobXVzYl9lcC0+aGJfbXVsdCA8PCAxMSkpOwogCiAJCS8qIGZvcmNlIHNoYXJlZCBmaWZvIHRvIE9VVC1vbmx5IG1vZGUgKi8KIAkJaWYgKGh3X2VwLT5pc19zaGFyZWRfZmlmbykgewpAQCAtMTIxNCwxMCArMTI0NCw3IEBACiAJcmVxdWVzdC0+ZXBudW0gPSBtdXNiX2VwLT5jdXJyZW50X2VwbnVtOwogCXJlcXVlc3QtPnR4ID0gbXVzYl9lcC0+aXNfaW47CiAKLQlpZiAoaXNfZG1hX2NhcGFibGUoKSAmJiBtdXNiX2VwLT5kbWEpCi0JCW1hcF9kbWFfYnVmZmVyKHJlcXVlc3QsIG11c2IpOwotCWVsc2UKLQkJcmVxdWVzdC0+bWFwcGVkID0gMDsKKwltYXBfZG1hX2J1ZmZlcihyZXF1ZXN0LCBtdXNiLCBtdXNiX2VwKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBsb2NrZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmgKaW5kZXggZGVjOGRjMC4uYTU1MzU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuaApAQCAtMzUsMTMgKzM1LDE5IEBACiAjaWZuZGVmIF9fTVVTQl9HQURHRVRfSAogI2RlZmluZSBfX01VU0JfR0FER0VUX0gKIAorZW51bSBidWZmZXJfbWFwX3N0YXRlIHsKKwlVTl9NQVBQRUQgPSAwLAorCVBSRV9NQVBQRUQsCisJTVVTQl9NQVBQRUQKK307CisKIHN0cnVjdCBtdXNiX3JlcXVlc3QgewogCXN0cnVjdCB1c2JfcmVxdWVzdAlyZXF1ZXN0OwogCXN0cnVjdCBtdXNiX2VwCQkqZXA7CiAJc3RydWN0IG11c2IJCSptdXNiOwogCXU4IHR4OwkJCS8qIGVuZHBvaW50IGRpcmVjdGlvbiAqLwogCXU4IGVwbnVtOwotCXU4IG1hcHBlZDsKKwllbnVtIGJ1ZmZlcl9tYXBfc3RhdGUgbWFwX3N0YXRlOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbXVzYl9yZXF1ZXN0ICp0b19tdXNiX3JlcXVlc3Qoc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwppbmRleCA0ZDViY2I0Li4wZjUyM2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKQEAgLTYwOSw3ICs2MDksNyBAQAogCS8qIFNldCBSWE1BWFAgd2l0aCB0aGUgRklGTyBzaXplIG9mIHRoZSBlbmRwb2ludAogCSAqIHRvIGRpc2FibGUgZG91YmxlIGJ1ZmZlciBtb2RlLgogCSAqLwotCWlmIChtdXNiLT5od3ZlcnMgPCBNVVNCX0hXVkVSU18yMDAwKQorCWlmIChtdXNiLT5kb3VibGVfYnVmZmVyX25vdF9vaykKIAkJbXVzYl93cml0ZXcoZXAtPnJlZ3MsIE1VU0JfUlhNQVhQLCBlcC0+bWF4X3BhY2tldF9zel9yeCk7CiAJZWxzZQogCQltdXNiX3dyaXRldyhlcC0+cmVncywgTVVTQl9SWE1BWFAsCkBAIC03ODQsMTQgKzc4NCwxMyBAQAogCQkvKiBwcm90b2NvbC9lbmRwb2ludC9pbnRlcnZhbC9OQUtsaW1pdCAqLwogCQlpZiAoZXBudW0pIHsKIAkJCW11c2Jfd3JpdGViKGVwaW8sIE1VU0JfVFhUWVBFLCBxaC0+dHlwZV9yZWcpOwotCQkJaWYgKGNhbl9idWxrX3NwbGl0KG11c2IsIHFoLT50eXBlKSkKKwkJCWlmIChtdXNiLT5kb3VibGVfYnVmZmVyX25vdF9vaykKIAkJCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1RYTUFYUCwKLQkJCQkJcGFja2V0X3N6Ci0JCQkJCXwgKChod19lcC0+bWF4X3BhY2tldF9zel90eCAvCi0JCQkJCQlwYWNrZXRfc3opIC0gMSkgPDwgMTEpOworCQkJCQkJaHdfZXAtPm1heF9wYWNrZXRfc3pfdHgpOwogCQkJZWxzZQogCQkJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfVFhNQVhQLAotCQkJCQlwYWNrZXRfc3opOworCQkJCQkJcWgtPm1heHBhY2tldCB8CisJCQkJCQkoKHFoLT5oYl9tdWx0IC0gMSkgPDwgMTEpKTsKIAkJCW11c2Jfd3JpdGViKGVwaW8sIE1VU0JfVFhJTlRFUlZBTCwgcWgtPmludHZfcmVnKTsKIAkJfSBlbHNlIHsKIAkJCW11c2Jfd3JpdGViKGVwaW8sIE1VU0JfTkFLTElNSVQwLCBxaC0+aW50dl9yZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmgKaW5kZXggZjc2M2Q2Mi4uMjEwNTZjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5oCkBAIC05NCwyNCArOTQsMzMgQEAKIHsKIAltdXNiX3dyaXRldyhtYmFzZSwKIAkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSX0xPVyksCi0JCSgodTE2KSgodTMyKSBkbWFfYWRkciAmIDB4RkZGRikpKTsKKwkJZG1hX2FkZHIpOwogCW11c2Jfd3JpdGV3KG1iYXNlLAogCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0FERFJfSElHSCksCi0JCSgodTE2KSgoKHUzMikgZG1hX2FkZHIgPj4gMTYpICYgMHhGRkZGKSkpOworCQkoZG1hX2FkZHIgPj4gMTYpKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgbXVzYl9yZWFkX2hzZG1hX2NvdW50KHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGJjaGFubmVsKQogewotCXJldHVybiBtdXNiX3JlYWRsKG1iYXNlLAorCXUzMiBjb3VudCA9IG11c2JfcmVhZHcobWJhc2UsCiAJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQ09VTlRfSElHSCkpOworCisJY291bnQgPSBjb3VudCA8PCAxNjsKKworCWNvdW50IHw9IG11c2JfcmVhZHcobWJhc2UsCisJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQ09VTlRfTE9XKSk7CisKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX3dyaXRlX2hzZG1hX2NvdW50KHZvaWQgX19pb21lbSAqbWJhc2UsCiAJCQkJdTggYmNoYW5uZWwsIHUzMiBsZW4pCiB7Ci0JbXVzYl93cml0ZWwobWJhc2UsCisJbXVzYl93cml0ZXcobWJhc2UsCisJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQ09VTlRfTE9XKSxsZW4pOworCW11c2Jfd3JpdGV3KG1iYXNlLAogCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0hJR0gpLAotCQlsZW4pOworCQkobGVuID4+IDE2KSk7CiB9CiAKICNlbmRpZiAvKiBDT05GSUdfQkxBQ0tGSU4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYyBiL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYwppbmRleCBhM2YxMjMzLi5iYzhiYWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCkBAIC0zNjIsNiArMzYyLDcgQEAKIAogc3RhdGljIGludCBvbWFwMjQzMF9tdXNiX2V4aXQoc3RydWN0IG11c2IgKm11c2IpCiB7CisJZGVsX3RpbWVyX3N5bmMoJm11c2JfaWRsZV90aW1lcik7CiAKIAlvbWFwMjQzMF9sb3dfbGV2ZWxfZXhpdChtdXNiKTsKIAlvdGdfcHV0X3RyYW5zY2VpdmVyKG11c2ItPnhjZWl2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnIGIvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKaW5kZXggOWZiODc1ZC4uOWZmYzgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKQEAgLTEwMyw2ICsxMDMsOCBAQAogCSAgcmVxdWlyZWQgYWZ0ZXIgcmVzZXR0aW5nIHRoZSBoYXJkd2FyZSBhbmQgcG93ZXIgbWFuYWdlbWVudC4KIAkgIFRoaXMgZHJpdmVyIGlzIHJlcXVpcmVkIGV2ZW4gZm9yIHBlcmlwaGVyYWwgb25seSBvciBob3N0IG9ubHkKIAkgIG1vZGUgY29uZmlndXJhdGlvbnMuCisJICBUaGlzIGRyaXZlciBpcyBub3Qgc3VwcG9ydGVkIG9uIGJvYXJkcyBsaWtlIHRyb3V0IHdoaWNoCisJICBoYXMgYW4gZXh0ZXJuYWwgUEhZLgogCiBjb25maWcgQUI4NTAwX1VTQgogICAgICAgICB0cmlzdGF0ZSAiQUI4NTAwIFVTQiBUcmFuc2NlaXZlciBEcml2ZXIiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jIGIvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYwppbmRleCBlNzAwMTRhLi44YWNmMTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMKQEAgLTEzMiw2ICsxMzIsOCBAQAogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbm9wKTsKIAorCUJMT0NLSU5HX0lOSVRfTk9USUZJRVJfSEVBRCgmbm9wLT5vdGcubm90aWZpZXIpOworCiAJcmV0dXJuIDA7CiBleGl0OgogCWtmcmVlKG5vcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvdWxwaS5jIGIvZHJpdmVycy91c2Ivb3RnL3VscGkuYwppbmRleCAwNTlkOWFjLi43NzBkNzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvdWxwaS5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy91bHBpLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIC8qIFVMUEkgaGFyZGNvZGVkIElEcywgdXNlZCBmb3IgcHJvYmluZyAqLwogc3RhdGljIHN0cnVjdCB1bHBpX2luZm8gdWxwaV9pZHNbXSA9IHsKIAlVTFBJX0lORk8oVUxQSV9JRCgweDA0Y2MsIDB4MTUwNCksICJOWFAgSVNQMTUwNCIpLAotCVVMUElfSU5GTyhVTFBJX0lEKDB4MDQyNCwgMHgwMDA2KSwgIlNNU0MgVVNCMzMxOSIpLAorCVVMUElfSU5GTyhVTFBJX0lEKDB4MDQyNCwgMHgwMDA2KSwgIlNNU0MgVVNCMzMxeCIpLAogfTsKIAogc3RhdGljIGludCB1bHBpX3NldF9vdGdfZmxhZ3Moc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYwppbmRleCA2M2Y3Y2M0Li43Yjg4MTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYwpAQCAtNDg2LDEyICs0ODYsMjIgQEAKIAlpZiAoYWN0dWFsX2xlbmd0aCA+PSA0KSB7CiAJCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQl1OCBwcmV2X2xpbmVfc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJcHJpdi0+bGluZV9zdGF0dXMgPSAofihkYXRhWzJdKSkgJiBDSDM0MV9CSVRTX01PREVNX1NUQVQ7CiAJCWlmICgoZGF0YVsxXSAmIENIMzQxX01VTFRfU1RBVCkpCiAJCQlwcml2LT5tdWx0aV9zdGF0dXNfY2hhbmdlID0gMTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJCWlmICgocHJpdi0+bGluZV9zdGF0dXMgXiBwcmV2X2xpbmVfc3RhdHVzKSAmIENIMzQxX0JJVF9EQ0QpIHsKKwkJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKKwkJCWlmICh0dHkpCisJCQkJdXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZShwb3J0LCB0dHksCisJCQkJCSAgICBwcml2LT5saW5lX3N0YXR1cyAmIENIMzQxX0JJVF9EQ0QpOworCQkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCX0KKwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwppbmRleCA4ZDc3MzFkLi43MzVlYTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCkBAIC00OSw3ICs0OSw2IEBACiBzdGF0aWMgdm9pZCBjcDIxMHhfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICosIGludCk7CiBzdGF0aWMgaW50IGNwMjEweF9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICopOwogc3RhdGljIHZvaWQgY3AyMTB4X2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCwgaW50IG9uKTsKLXN0YXRpYyBpbnQgY3AyMTB4X2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnApOwogCiBzdGF0aWMgaW50IGRlYnVnOwogCkBAIC04Nyw3ICs4Niw2IEBACiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTE1KSB9LCAvKiBBcnlnb24gTkZDL01pZmFyZSBSZWFkZXIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxM0QpIH0sIC8qIEJ1cm5zaWRlIFRlbGVjb20gRGVza21vYmlsZSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODEzRikgfSwgLyogVGFtcyBNYXN0ZXIgRWFzeSBDb250cm9sICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTQ5KSB9LCAvKiBXZXN0IE1vdW50YWluIFJhZGlvIENvbXB1dGVyaXplZCBCYXR0ZXJ5IEFuYWx5emVyICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTRBKSB9LCAvKiBXZXN0IE1vdW50YWluIFJhZGlvIFJJR2JsYXN0ZXIgUCZQICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTRCKSB9LCAvKiBXZXN0IE1vdW50YWluIFJhZGlvIFJJR3RhbGsgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxNTYpIH0sIC8qIEImRyBIMzAwMCBsaW5rIGNhYmxlICovCkBAIC0xMTAsNyArMTA4LDkgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzNDEpIH0sIC8qIFNpZW1lbnMgTUMzNVBVIEdQUlMgTW9kZW0gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzODIpIH0sIC8qIEN5Z25hbCBJbnRlZ3JhdGVkIFByb2R1Y3RzLCBJbmMuICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4M0E4KSB9LCAvKiBBbWJlciBXaXJlbGVzcyBBTUIyNTYwICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4M0Q4KSB9LCAvKiBEZWtUZWMgRFRBIFBsdXMgVkhGL1VIRiBCb29zdGVyL0F0dGVudWF0b3IgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0MTEpIH0sIC8qIEt5b2NlcmEgR1BTIE1vZHVsZSAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODQxOCkgfSwgLyogSVJaIEF1dG9tYXRpb24gVGVsZXBvcnQgU0ctMTAgR1NNL0dQUlMgTW9kZW0gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0NkUpIH0sIC8qIEJFSSBVU0IgU2Vuc29yIEludGVyZmFjZSAoVkNQKSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODQ3NykgfSwgLyogQmFsbHVmZiBSRklEICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYwKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCkBAIC0xNjUsOCArMTY1LDcgQEAKIAkudGlvY21nZXQgCQk9IGNwMjEweF90aW9jbWdldCwKIAkudGlvY21zZXQJCT0gY3AyMTB4X3Rpb2Ntc2V0LAogCS5hdHRhY2gJCQk9IGNwMjEweF9zdGFydHVwLAotCS5kdHJfcnRzCQk9IGNwMjEweF9kdHJfcnRzLAotCS5jYXJyaWVyX3JhaXNlZAkJPSBjcDIxMHhfY2Fycmllcl9yYWlzZWQKKwkuZHRyX3J0cwkJPSBjcDIxMHhfZHRyX3J0cwogfTsKIAogLyogQ29uZmlnIHJlcXVlc3QgdHlwZXMgKi8KQEAgLTc2NSwxNSArNzY0LDYgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGNwMjEweF9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwKQotewotCXVuc2lnbmVkIGludCBjb250cm9sOwotCWNwMjEweF9nZXRfY29uZmlnKHAsIENQMjEwWF9HRVRfTURNU1RTLCAmY29udHJvbCwgMSk7Ci0JaWYgKGNvbnRyb2wgJiBDT05UUk9MX0RDRCkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGNwMjEweF9icmVha19jdGwgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwppbmRleCBiOTIwNzBjLi42NjZlNWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCkBAIC00NTUsNyArNDU1LDYgQEAKIHN0YXRpYyBpbnQgZGlnaV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgaW50IGRpZ2lfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGRpZ2lfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgaW50IGRpZ2lfY2Fycmllcl9yYWlzZWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBkaWdpX2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IG9uKTsKIHN0YXRpYyBpbnQgZGlnaV9zdGFydHVwX2RldmljZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyBpbnQgZGlnaV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwpAQCAtNTExLDcgKzUxMCw2IEBACiAJLm9wZW4gPQkJCQlkaWdpX29wZW4sCiAJLmNsb3NlID0JCQlkaWdpX2Nsb3NlLAogCS5kdHJfcnRzID0JCQlkaWdpX2R0cl9ydHMsCi0JLmNhcnJpZXJfcmFpc2VkID0JCWRpZ2lfY2Fycmllcl9yYWlzZWQsCiAJLndyaXRlID0JCQlkaWdpX3dyaXRlLAogCS53cml0ZV9yb29tID0JCQlkaWdpX3dyaXRlX3Jvb20sCiAJLndyaXRlX2J1bGtfY2FsbGJhY2sgPSAJCWRpZ2lfd3JpdGVfYnVsa19jYWxsYmFjaywKQEAgLTEzMzksMTQgKzEzMzcsNiBAQAogCWRpZ2lfc2V0X21vZGVtX3NpZ25hbHMocG9ydCwgb24gKiAoVElPQ01fRFRSfFRJT0NNX1JUUyksIDEpOwogfQogCi1zdGF0aWMgaW50IGRpZ2lfY2Fycmllcl9yYWlzZWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKLXsKLQlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWlmIChwcml2LT5kcF9tb2RlbV9zaWduYWxzICYgVElPQ01fQ0QpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGRpZ2lfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IGEyNjY4ZDAuLmYzNDlhMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC0xMDAsNiArMTAwLDcgQEAKIHN0YXRpYyBpbnQgICBmdGRpX2p0YWdfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICAgZnRkaV9tdHhvcmJfaGFja19zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyBpbnQgICBmdGRpX05ESV9kZXZpY2Vfc2V0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICAgZnRkaV9zdG1jbGl0ZV9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyB2b2lkICBmdGRpX1VTQl9VSVJUX3NldHVwKHN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYpOwogc3RhdGljIHZvaWQgIGZ0ZGlfSEVfVElSQTFfc2V0dXAoc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdik7CiAKQEAgLTEyMyw2ICsxMjQsMTAgQEAKIAkucG9ydF9wcm9iZSA9IGZ0ZGlfSEVfVElSQTFfc2V0dXAsCiB9OwogCitzdGF0aWMgc3RydWN0IGZ0ZGlfc2lvX3F1aXJrIGZ0ZGlfc3RtY2xpdGVfcXVpcmsgPSB7CisJLnByb2JlCT0gZnRkaV9zdG1jbGl0ZV9wcm9iZSwKK307CisKIC8qCiAgKiBUaGUgOFUyMzJBTSBoYXMgdGhlIHNhbWUgQVBJIGFzIHRoZSBzaW8gZXhjZXB0IGZvcjoKICAqIC0gaXQgY2FuIHN1cHBvcnQgTVVDSCBoaWdoZXIgYmF1ZHJhdGVzOyB1cCB0bzoKQEAgLTYxNiw2ICs2MjEsNyBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9PQ0VBTklDX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoVFRJX1ZJRCwgVFRJX1FMMzU1UF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1JNX0NBTlZJRVdfUElEKSB9LAorCXsgVVNCX0RFVklDRShBQ1RPTl9WSUQsIEFDVE9OX1NQRUNUUkFQUk9fUElEKSB9LAogCXsgVVNCX0RFVklDRShDT05URUNfVklELCBDT05URUNfQ09NMVVTQkhfUElEKSB9LAogCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTT1RMNF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEJBTkRCX1ZJRCwgQkFOREJfVVNUTDRfUElEKSB9LApAQCAtNjc2LDcgKzY4MiwxNyBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9QQ0RKX0RBQzJfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9SUkNJUktJVFNfTE9DT0JVRkZFUl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FTS19SRFI0MDBfUElEKSB9LAotCXsgVVNCX0RFVklDRShJQ09NX0lEMV9WSUQsIElDT01fSUQxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX09QQ19VX1VDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyQzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9JRF9SUDJDMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMkRfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9JRF9SUDJWVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMlZSX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlA0S1ZUX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlA0S1ZSX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyS1ZUX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyS1ZSX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQUNHX0hGRFVBTF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1lFSV9TRVJWT0NFTlRFUjMxX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVEhPUkxBQlNfUElEKSB9LApAQCAtODAwLDYgKzgxNiw4IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0RPVEVDX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoUUlIQVJEV0FSRV9WSUQsIE1JTEtZTUlTVE9ORV9KVEFHU0VSSUFMX1BJRCksCiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZnRkaV9qdGFnX3F1aXJrIH0sCisJeyBVU0JfREVWSUNFKFNUX1ZJRCwgU1RfU1RNQ0xUMTAzMF9QSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfc3RtY2xpdGVfcXVpcmsgfSwKIAl7IH0sCQkJCQkvKiBPcHRpb25hbCBwYXJhbWV0ZXIgZW50cnkgKi8KIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtMTY5OSw2ICsxNzE3LDI1IEBACiB9CiAKIC8qCisgKiBGaXJzdCBhbmQgc2Vjb25kIHBvcnQgb24gU1RNQ0xpdGVhZGFwdG9ycyBpcyByZXNlcnZlZCBmb3IgSlRBRyBpbnRlcmZhY2UKKyAqIGFuZCB0aGUgZm9ydGggcG9ydCBmb3IgcGlvCisgKi8KK3N0YXRpYyBpbnQgZnRkaV9zdG1jbGl0ZV9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2VyaWFsLT5kZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHNlcmlhbC0+aW50ZXJmYWNlOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCWlmIChpbnRlcmZhY2UgPT0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMl0pCisJCXJldHVybiAwOworCisJZGV2X2luZm8oJnVkZXYtPmRldiwgIklnbm9yaW5nIHNlcmlhbCBwb3J0IHJlc2VydmVkIGZvciBKVEFHXG4iKTsKKworCXJldHVybiAtRU5PREVWOworfQorCisvKgogICogVGhlIE1hdHJpeCBPcmJpdGFsIFZLMjA0LTI1LVVTQiBoYXMgYW4gaW52YWxpZCBJTiBlbmRwb2ludC4KICAqIFdlIGhhdmUgdG8gY29ycmVjdCBpdCBpZiB3ZSB3YW50IHRvIHJlYWQgZnJvbSBpdC4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCmluZGV4IGJmMDg2NzIuLjExN2U4ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTUxOCw2ICs1MTgsMTIgQEAKICNkZWZpbmUgUkFUT0NfUFJPRFVDVF9JRF9VU0I2MEYJMHhiMDIwCiAKIC8qCisgKiBBY3RvbiBSZXNlYXJjaCBDb3JwLgorICovCisjZGVmaW5lIEFDVE9OX1ZJRAkJMHgwNjQ3CS8qIFZlbmRvciBJRCAqLworI2RlZmluZSBBQ1RPTl9TUEVDVFJBUFJPX1BJRAkweDAxMDAKKworLyoKICAqIENvbnRlYyBwcm9kdWN0cyAoaHR0cDovL3d3dy5jb250ZWMuY29tKQogICogU3VibWl0dGVkIGJ5IERhbmllbCBTYW5nb3JyaW4KICAqLwpAQCAtNTY5LDExICs1NzUsMjMgQEAKICNkZWZpbmUgT0NUX1VTMTAxX1BJRAkJMHgwNDIxCS8qIE9DVCBVUzEwMSBVU0IgdG8gUlMtMjMyICovCiAKIC8qCi0gKiBJY29tIElELTEgZGlnaXRhbCB0cmFuc2NlaXZlcgorICogRGVmaW5pdGlvbnMgZm9yIEljb20gSW5jLiBkZXZpY2VzCiAgKi8KLQotI2RlZmluZSBJQ09NX0lEMV9WSUQgICAgICAgICAgICAweDBDMjYKLSNkZWZpbmUgSUNPTV9JRDFfUElEICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIElDT01fVklECQkweDBDMjYgLyogSWNvbSB2ZW5kb3IgSUQgKi8KKy8qIE5vdGU6IElELTEgaXMgYSBjb21tdW5pY2F0aW9ucyB0cmFuY2VpdmVyIGZvciBIQU0tcmFkaW8gb3BlcmF0b3JzICovCisjZGVmaW5lIElDT01fSURfMV9QSUQJCTB4MDAwNCAvKiBJRC0xIFVTQiB0byBSUy0yMzIgKi8KKy8qIE5vdGU6IE9QQyBpcyBhbiBPcHRpb25hbCBjYWJsZSB0byBjb25uZWN0IGFuIEljb20gVHJhbmNlaXZlciAqLworI2RlZmluZSBJQ09NX09QQ19VX1VDX1BJRAkweDAwMTggLyogT1BDLTQ3OFVDLCBPUEMtMTEyMlUgY2xvbmluZyBjYWJsZSAqLworLyogTm90ZTogSUQtUlAqIGRldmljZXMgYXJlIEljb20gUmVwZWF0ZXIgRGV2aWNlcyBmb3IgSEFNLXJhZGlvICovCisjZGVmaW5lIElDT01fSURfUlAyQzFfUElECTB4MDAwOSAvKiBJRC1SUDJDIEFzc2V0IDEgdG8gUlMtMjMyICovCisjZGVmaW5lIElDT01fSURfUlAyQzJfUElECTB4MDAwQSAvKiBJRC1SUDJDIEFzc2V0IDIgdG8gUlMtMjMyICovCisjZGVmaW5lIElDT01fSURfUlAyRF9QSUQJMHgwMDBCIC8qIElELVJQMkQgY29uZmlndXJhdGlvbiBwb3J0Ki8KKyNkZWZpbmUgSUNPTV9JRF9SUDJWVF9QSUQJMHgwMDBDIC8qIElELVJQMlYgVHJhbnNtaXQgY29uZmlnIHBvcnQgKi8KKyNkZWZpbmUgSUNPTV9JRF9SUDJWUl9QSUQJMHgwMDBEIC8qIElELVJQMlYgUmVjZWl2ZSBjb25maWcgcG9ydCAqLworI2RlZmluZSBJQ09NX0lEX1JQNEtWVF9QSUQJMHgwMDEwIC8qIElELVJQNDAwMFYgVHJhbnNtaXQgY29uZmlnIHBvcnQgKi8KKyNkZWZpbmUgSUNPTV9JRF9SUDRLVlJfUElECTB4MDAxMSAvKiBJRC1SUDQwMDBWIFJlY2VpdmUgY29uZmlnIHBvcnQgKi8KKyNkZWZpbmUgSUNPTV9JRF9SUDJLVlRfUElECTB4MDAxMiAvKiBJRC1SUDIwMDBWIFRyYW5zbWl0IGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlAyS1ZSX1BJRAkweDAwMTMgLyogSUQtUlAyMDAwViBSZWNlaXZlIGNvbmZpZyBwb3J0ICovCiAKIC8qCiAgKiBHTiBPdG9tZXRyaWNzIChodHRwOi8vd3d3Lm90b21ldHJpY3MuY29tKQpAQCAtMTAyMiw2ICsxMDQwLDEyIEBACiAjZGVmaW5lIFdIVF9QSUQJCQkweDAwMDQgLyogV2lyZWxlc3MgSGFuZGhlbGQgVGVybWluYWwgKi8KIAogLyoKKyAqIFNUTWljcm9lbGVjdG9uaWNzCisgKi8KKyNkZWZpbmUgU1RfVklECQkJMHgwNDgzCisjZGVmaW5lIFNUX1NUTUNMVDEwMzBfUElECTB4Mzc0NyAvKiBTVCBNaWNybyBDb25uZWN0IExpdGUgU1RNQ0xUMTAzMCAqLworCisvKgogICogUGFwb3VjaCBwcm9kdWN0cyAoaHR0cDovL3d3dy5wYXBvdWNoLmNvbS8pCiAgKiBTdWJtaXR0ZWQgYnkgRm9sa2VydCB2YW4gSGV1c2RlbgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCBlNjgzM2UyLi5lNGRiNWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTQ3OSw2ICs0NzksMjYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfaGFuZGxlX2JyZWFrKTsKIAorLyoqCisgKgl1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlIC0gaGFuZGxlIGEgY2hhbmdlIG9mIGNhcnJpZXIgZGV0ZWN0IHN0YXRlCisgKglAcG9ydDogdXNiX3NlcmlhbF9wb3J0IHN0cnVjdHVyZSBmb3IgdGhlIG9wZW4gcG9ydAorICoJQHR0eTogdHR5X3N0cnVjdCBzdHJ1Y3R1cmUgZm9yIHRoZSBwb3J0CisgKglAc3RhdHVzOiBuZXcgY2FycmllciBkZXRlY3Qgc3RhdHVzLCBub256ZXJvIGlmIGFjdGl2ZQorICovCit2b2lkIHVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqdXNiX3BvcnQsCisJCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmdXNiX3BvcnQtPnBvcnQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCwgc3RhdHVzICVkIiwgX19mdW5jX18sIHVzYl9wb3J0LT5udW1iZXIsIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CisJZWxzZSBpZiAodHR5ICYmICFDX0NMT0NBTCh0dHkpKQorCQl0dHlfaGFuZ3VwKHR0eSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlKTsKKwogaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19yZXN1bWUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwppbmRleCBjZDc2OWVmLi4zYjI0NmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwpAQCAtMjg4OSw4ICsyODg5LDggQEAKIAogCWRiZygiJXMgJWQuJWQuJWQiLCBmd19pbmZvLCByZWMtPmRhdGFbMF0sIHJlYy0+ZGF0YVsxXSwgYnVpbGQpOwogCi0JZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5GaXJtd2FyZU1ham9yVmVyc2lvbiA9IGZ3LT5kYXRhWzBdOwotCWVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uRmlybXdhcmVNaW5vclZlcnNpb24gPSBmdy0+ZGF0YVsxXTsKKwllZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLkZpcm13YXJlTWFqb3JWZXJzaW9uID0gcmVjLT5kYXRhWzBdOworCWVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uRmlybXdhcmVNaW5vclZlcnNpb24gPSByZWMtPmRhdGFbMV07CiAJZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5GaXJtd2FyZUJ1aWxkTnVtYmVyID0gY3B1X3RvX2xlMTYoYnVpbGQpOwogCiAJZm9yIChyZWMgPSBpaGV4X25leHRfYmlucmVjKHJlYyk7IHJlYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaAppbmRleCA2YWIyYTNmLi4xNzhiMjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oCkBAIC0xOTksNiArMTk5LDcgQEAKIAkJLm5hbWUJCT0gImVwaWMiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJFUGlDIGRldmljZSIsCisJLnVzYl9kcml2ZXIJCT0gJmlvX2RyaXZlciwKIAkuaWRfdGFibGUJCT0gRXBpY19wb3J0X2lkX3RhYmxlLAogCS5udW1fcG9ydHMJCT0gMSwKIAkub3BlbgkJCT0gZWRnZV9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYwppbmRleCAxMmVkNTk0Li45OWI5N2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYwpAQCAtMTI3NSw2ICsxMjc1LDcgQEAKIAkJICAgLm5hbWUgPSAiaXV1X3Bob2VuaXgiLAogCQkgICB9LAogCS5pZF90YWJsZSA9IGlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0gJml1dV9kcml2ZXIsCiAJLm51bV9wb3J0cyA9IDEsCiAJLmJ1bGtfaW5fc2l6ZSA9IDUxMiwKIAkuYnVsa19vdXRfc2l6ZSA9IDUxMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCmluZGV4IDJkOGJhZjYuLmNlMTM0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaApAQCAtNTQ2LDYgKzU0Niw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuX25vX2Zpcm0iLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIC0gKHdpdGhvdXQgZmlybXdhcmUpIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fcHJlX2lkcywKIAkubnVtX3BvcnRzCQk9IDEsCiAJLmF0dGFjaAkJCT0ga2V5c3Bhbl9mYWtlX3N0YXJ0dXAsCkBAIC01NTcsNiArNTU4LDcgQEAKIAkJLm5hbWUJCT0gImtleXNwYW5fMSIsCiAJfSwKIAkuZGVzY3JpcHRpb24JCT0gIktleXNwYW4gMSBwb3J0IGFkYXB0ZXIiLAorCS51c2JfZHJpdmVyCQk9ICZrZXlzcGFuX2RyaXZlciwKIAkuaWRfdGFibGUJCT0ga2V5c3Bhbl8xcG9ydF9pZHMsCiAJLm51bV9wb3J0cwkJPSAxLAogCS5vcGVuCQkJPSBrZXlzcGFuX29wZW4sCkBAIC01NzksNiArNTgxLDcgQEAKIAkJLm5hbWUJCT0gImtleXNwYW5fMiIsCiAJfSwKIAkuZGVzY3JpcHRpb24JCT0gIktleXNwYW4gMiBwb3J0IGFkYXB0ZXIiLAorCS51c2JfZHJpdmVyCQk9ICZrZXlzcGFuX2RyaXZlciwKIAkuaWRfdGFibGUJCT0ga2V5c3Bhbl8ycG9ydF9pZHMsCiAJLm51bV9wb3J0cwkJPSAyLAogCS5vcGVuCQkJPSBrZXlzcGFuX29wZW4sCkBAIC02MDEsNiArNjA0LDcgQEAKIAkJLm5hbWUJCT0gImtleXNwYW5fNCIsCiAJfSwKIAkuZGVzY3JpcHRpb24JCT0gIktleXNwYW4gNCBwb3J0IGFkYXB0ZXIiLAorCS51c2JfZHJpdmVyCQk9ICZrZXlzcGFuX2RyaXZlciwKIAkuaWRfdGFibGUJCT0ga2V5c3Bhbl80cG9ydF9pZHMsCiAJLm51bV9wb3J0cwkJPSA0LAogCS5vcGVuCQkJPSBrZXlzcGFuX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCmluZGV4IGExMGRkNTYuLjU1NGE4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCkBAIC02NzksMjIgKzY3OSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGtleXNwYW5fcGRhX2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCi17Ci0Jc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQl1bnNpZ25lZCBjaGFyIG1vZGVtYml0czsKLQotCS8qIElmIHdlIGNhbiByZWFkIHRoZSBtb2RlbSBzdGF0dXMgYW5kIHRoZSBEQ0QgaXMgbG93IHRoZW4KLQkgICBjYXJyaWVyIGlzIG5vdCByYWlzZWQgeWV0ICovCi0JaWYgKGtleXNwYW5fcGRhX2dldF9tb2RlbV9pbmZvKHNlcmlhbCwgJm1vZGVtYml0cykgPj0gMCkgewotCQlpZiAoIShtb2RlbWJpdHMgJiAoMT4+NikpKQotCQkJcmV0dXJuIDA7Ci0JfQotCS8qIENhcnJpZXIgcmFpc2VkLCBvciB3ZSBmYWlsZWQgKGVnIGRpc2Nvbm5lY3RlZCkgc28KLQkgICBwcm9ncmVzcyBhY2NvcmRpbmdseSAqLwotCXJldHVybiAxOwotfQotCiAKIHN0YXRpYyBpbnQga2V5c3Bhbl9wZGFfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQpAQCAtODgxLDcgKzg2NSw2IEBACiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlX3N0ZCwKIAkubnVtX3BvcnRzID0JCTEsCiAJLmR0cl9ydHMgPQkJa2V5c3Bhbl9wZGFfZHRyX3J0cywKLQkuY2Fycmllcl9yYWlzZWQJPQlrZXlzcGFuX3BkYV9jYXJyaWVyX3JhaXNlZCwKIAkub3BlbiA9CQkJa2V5c3Bhbl9wZGFfb3BlbiwKIAkuY2xvc2UgPQkJa2V5c3Bhbl9wZGFfY2xvc2UsCiAJLndyaXRlID0JCWtleXNwYW5fcGRhX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMKaW5kZXggY2YxNzE4My4uNjUzNDY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jCkBAIC00NCw2ICs0NCw3IEBACiAJCS5uYW1lID0JCSJtb3RvLW1vZGVtIiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmbW90b19kcml2ZXIsCiAJLm51bV9wb3J0cyA9CQkxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDc0ODc3ODIuLjVmNDY4MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTM4Miw3ICszODIsMTYgQEAKICNkZWZpbmUgSEFJRVJfVkVORE9SX0lECQkJCTB4MjAxZQogI2RlZmluZSBIQUlFUl9QUk9EVUNUX0NFMTAwCQkJMHgyMDA5CiAKLSNkZWZpbmUgQ0lOVEVSSU9OX1ZFTkRPUl9JRAkJCTB4MDY4MQorLyogQ2ludGVyaW9uIChmb3JtZXJseSBTaWVtZW5zKSBwcm9kdWN0cyAqLworI2RlZmluZSBTSUVNRU5TX1ZFTkRPUl9JRAkJCQkweDA2ODEKKyNkZWZpbmUgQ0lOVEVSSU9OX1ZFTkRPUl9JRAkJCQkweDFlMmQKKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyNV9NRE0JCTB4MDA0NworI2RlZmluZSBDSU5URVJJT05fUFJPRFVDVF9IQzI1X01ETU5FVAkweDAwNDAKKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE0JCTB4MDA0QworI2RlZmluZSBDSU5URVJJT05fUFJPRFVDVF9IQzI4X01ETU5FVAkweDAwNEEgLyogc2FtZSBmb3IgSEMyOEogKi8KKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfRVUzX0UJCQkweDAwNTEKKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfRVUzX1AJCQkweDAwNTIKKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfUEg4CQkJMHgwMDUzCiAKIC8qIE9saXZldHRpIHByb2R1Y3RzICovCiAjZGVmaW5lIE9MSVZFVFRJX1ZFTkRPUl9JRAkJCTB4MGIzYwpAQCAtOTQ0LDcgKzk1MywxNyBAQAogCXsgVVNCX0RFVklDRShQSVJFTExJX1ZFTkRPUl9JRCwgUElSRUxMSV9QUk9EVUNUXzEwMEYpIH0sCiAJeyBVU0JfREVWSUNFKFBJUkVMTElfVkVORE9SX0lELCBQSVJFTExJX1BST0RVQ1RfMTAxMSl9LAogCXsgVVNCX0RFVklDRShQSVJFTExJX1ZFTkRPUl9JRCwgUElSRUxMSV9QUk9EVUNUXzEwMTIpfSwKLQl7IFVTQl9ERVZJQ0UoQ0lOVEVSSU9OX1ZFTkRPUl9JRCwgMHgwMDQ3KSB9LAorCS8qIENpbnRlcmlvbiAqLworCXsgVVNCX0RFVklDRShDSU5URVJJT05fVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9FVTNfRSkgfSwKKwl7IFVTQl9ERVZJQ0UoQ0lOVEVSSU9OX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfRVUzX1ApIH0sCisJeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX1BIOCkgfSwKKwl7IFVTQl9ERVZJQ0UoQ0lOVEVSSU9OX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE0pIH0sIAorCXsgVVNCX0RFVklDRShDSU5URVJJT05fVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9IQzI4X01ETU5FVCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0lFTUVOU19WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjVfTURNKSB9LAorCXsgVVNCX0RFVklDRShTSUVNRU5TX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyNV9NRE1ORVQpIH0sCisJeyBVU0JfREVWSUNFKFNJRU1FTlNfVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9IQzI4X01ETSkgfSwgLyogSEMyOCBlbnVtZXJhdGVzIHdpdGggU2llbWVucyBvciBDaW50ZXJpb24gVklEIGRlcGVuZGluZyBvbiBGVyByZXZpc2lvbiAqLworCXsgVVNCX0RFVklDRShTSUVNRU5TX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE1ORVQpIH0sCisKIAl7IFVTQl9ERVZJQ0UoT0xJVkVUVElfVkVORE9SX0lELCBPTElWRVRUSV9QUk9EVUNUX09MSUNBUkQxMDApIH0sCiAJeyBVU0JfREVWSUNFKENFTE9UX1ZFTkRPUl9JRCwgQ0VMT1RfUFJPRFVDVF9DVDY4ME0pIH0sIC8qIENULTY1MCBDRE1BIDQ1MCAxeEVWRE8gbW9kZW0gKi8KIAl7IFVTQl9ERVZJQ0UoT05EQV9WRU5ET1JfSUQsIE9OREFfTVQ4MjVVUCkgfSwgLyogT05EQSBNVDgyNVVQIG1vZGVtICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYwppbmRleCA1YmU4NjZiLi43MzYxMzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKQEAgLTE1Nyw2ICsxNTcsNyBAQAogCQkubmFtZSA9CQkib3RpNjg1OCIsCiAJfSwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgPQkJJm90aTY4NThfZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIAkub3BlbiA9CQkJb3RpNjg1OF9vcGVuLAogCS5jbG9zZSA9CQlvdGk2ODU4X2Nsb3NlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCmluZGV4IDhhZTRjNmMuLjA4YzkxODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTUwLDYgKzUwLDcgQEAKIAl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfTU1YKSB9LAogCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRF9HUFJTKSB9LAogCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRF9IQ1IzMzEpIH0sCisJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX01PVE9ST0xBKSB9LAogCXsgVVNCX0RFVklDRShJT0RBVEFfVkVORE9SX0lELCBJT0RBVEFfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoSU9EQVRBX1ZFTkRPUl9JRCwgSU9EQVRBX1BST0RVQ1RfSURfUlNBUTUpIH0sCiAJeyBVU0JfREVWSUNFKEFURU5fVkVORE9SX0lELCBBVEVOX1BST0RVQ1RfSUQpIH0sCkBAIC02NzcsOSArNjc4LDExIEBACiB7CiAKIAlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IHN0YXR1c19pZHggPSBVQVJUX1NUQVRFOwogCXU4IGxlbmd0aCA9IFVBUlRfU1RBVEUgKyAxOworCXU4IHByZXZfbGluZV9zdGF0dXM7CiAJdTE2IGlkdiwgaWRwOwogCiAJaWR2ID0gbGUxNl90b19jcHUocG9ydC0+c2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOwpAQCAtNzAxLDExICs3MDQsMjAgQEAKIAogCS8qIFNhdmUgb2ZmIHRoZSB1YXJ0IHN0YXR1cyBmb3Igb3RoZXJzIHRvIGxvb2sgYXQgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByZXZfbGluZV9zdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKIAlwcml2LT5saW5lX3N0YXR1cyA9IGRhdGFbc3RhdHVzX2lkeF07CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWlmIChwcml2LT5saW5lX3N0YXR1cyAmIFVBUlRfQlJFQUtfRVJST1IpCiAJCXVzYl9zZXJpYWxfaGFuZGxlX2JyZWFrKHBvcnQpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJaWYgKCF0dHkpCisJCXJldHVybjsKKwlpZiAoKHByaXYtPmxpbmVfc3RhdHVzIF4gcHJldl9saW5lX3N0YXR1cykgJiBVQVJUX0RDRCkKKwkJdXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZShwb3J0LCB0dHksCisJCQkJcHJpdi0+bGluZV9zdGF0dXMgJiBVQVJUX0RDRCk7CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBsMjMwM19yZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKaW5kZXggNDNlYjliZC4uMWIwMjVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBQTDIzMDNfUFJPRFVDVF9JRF9NTVgJCTB4MDYxMgogI2RlZmluZSBQTDIzMDNfUFJPRFVDVF9JRF9HUFJTCQkweDA2MDkKICNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfSENSMzMxCTB4MzMxYQorI2RlZmluZSBQTDIzMDNfUFJPRFVDVF9JRF9NT1RPUk9MQQkweDAzMDcKIAogI2RlZmluZSBBVEVOX1ZFTkRPUl9JRAkJMHgwNTU3CiAjZGVmaW5lIEFURU5fVkVORE9SX0lEMgkJMHgwNTQ3CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY2F1eC5jCmluZGV4IDIxNGEzZTUuLjMwYjczZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY2F1eC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY2F1eC5jCkBAIC0zNiw2ICszNiw3IEBACiAjZGVmaW5lIFVUU1RBUkNPTV9QUk9EVUNUX1VNMTc1X1YxCQkweDM3MTIKICNkZWZpbmUgVVRTVEFSQ09NX1BST0RVQ1RfVU0xNzVfVjIJCTB4MzcxNAogI2RlZmluZSBVVFNUQVJDT01fUFJPRFVDVF9VTTE3NV9BTExURUwJCTB4MzcxNQorI2RlZmluZSBQQU5URUNIX1BST0RVQ1RfVU1MMjkwX1ZaVwkJMHgzNzE4CiAKIC8qIENNT1RFQ0ggZGV2aWNlcyAqLwogI2RlZmluZSBDTU9URUNIX1ZFTkRPUl9JRAkJCTB4MTZkOApAQCAtNjYsNiArNjcsNyBAQAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oTEdfVkVORE9SX0lELCBMR19QUk9EVUNUX1ZYNDQwMF82MDAwLCAweGZmLCAweGZmLCAweDAwKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oU0FOWU9fVkVORE9SX0lELCBTQU5ZT19QUk9EVUNUX0tBVEFOQV9MWCwgMHhmZiwgMHhmZiwgMHgwMCkgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFNBTVNVTkdfVkVORE9SX0lELCBTQU1TVU5HX1BST0RVQ1RfVTUyMCwgMHhmZiwgMHgwMCwgMHgwMCkgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFVUU1RBUkNPTV9WRU5ET1JfSUQsIFBBTlRFQ0hfUFJPRFVDVF9VTUwyOTBfVlpXLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwpAQCAtODQsNiArODYsNyBAQAogCQkubmFtZSA9CQkicWNhdXgiLAogCX0sCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0JCSZxY2F1eF9kcml2ZXIsCiAJLm51bV9wb3J0cyA9CQkxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llbWVuc19tcGkuYwppbmRleCBjYjgxOTVjLi43NGNkNGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llbWVuc19tcGkuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llbWVuc19tcGkuYwpAQCAtNDIsNiArNDIsNyBAQAogCQkubmFtZSA9CQkic2llbWVuc19tcGkiLAogCX0sCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0JCSZzaWVtZW5zX3VzYl9tcGlfZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwppbmRleCA3NDgxZmY4Li4wNDU3ODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCkBAIC0zMDEsNiArMzAxLDkgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDY4QTMpLCAJLyogU2llcnJhIFdpcmVsZXNzIERpcmVjdCBJUCBtb2RlbXMgKi8KIAkgIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZGlyZWN0X2lwX2ludGVyZmFjZV9ibGFja2xpc3QKIAl9LAorCXsgVVNCX0RFVklDRSgweDBmM2QsIDB4NjhBMyksIAkvKiBBaXJwcmltZS9TaWVycmEgV2lyZWxlc3MgRGlyZWN0IElQIG1vZGVtcyAqLworCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZkaXJlY3RfaXBfaW50ZXJmYWNlX2JsYWNrbGlzdAorCX0sCiAgICAgICAgeyBVU0JfREVWSUNFKDB4NDEzQywgMHgwODEzMykgfSwgLyogRGVsbCBDb21wdXRlciBDb3JwLiBXaXJlbGVzcyA1NzIwIFZaVyBNb2JpbGUgQnJvYWRiYW5kIChFVkRPIFJldi1BKSBNaW5pY2FyZCBHUFMgUG9ydCAqLwogCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwppbmRleCA3NjVhYTk4Li5jYmZiNzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCiAvKiBob3cgY29tZSA/Pz8gKi8KICNkZWZpbmUgVUFSVF9TVEFURQkJCTB4MDgKLSNkZWZpbmUgVUFSVF9TVEFURV9UUkFOU0lFTlRfTUFTSwkweDc0CisjZGVmaW5lIFVBUlRfU1RBVEVfVFJBTlNJRU5UX01BU0sJMHg3NQogI2RlZmluZSBVQVJUX0RDRAkJCTB4MDEKICNkZWZpbmUgVUFSVF9EU1IJCQkweDAyCiAjZGVmaW5lIFVBUlRfQlJFQUtfRVJST1IJCTB4MDQKQEAgLTUyNSw2ICs1MjUsMTAgQEAKIAkJLyogb3ZlcnJ1biBpcyBzcGVjaWFsLCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgY2hhciAqLwogCQlpZiAoc3RhdHVzICYgVUFSVF9PVkVSUlVOX0VSUk9SKQogCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfT1ZFUlJVTik7CisKKwkJaWYgKHN0YXR1cyAmIFVBUlRfRENEKQorCQkJdXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZShwb3J0LCB0dHksCisJCQkJICAgcHJpdi0+bGluZV9zdGF0dXMgJiBNU1JfU1RBVFVTX0xJTkVfRENEKTsKIAl9CiAKIAl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZpeGVkX2ZsYWcodHR5LCBkYXRhLCB0dHlfZmxhZywKQEAgLTY0NSw2ICs2NDksNyBAQAogCQkubmFtZSA9CQkiU1BDUDh4NSIsCiAJfSwKIAkuaWRfdGFibGUJCT0gaWRfdGFibGUsCisJLnVzYl9kcml2ZXIJCT0gJnNwY3A4eDVfZHJpdmVyLAogCS5udW1fcG9ydHMJCT0gMSwKIAkub3BlbiAJCQk9IHNwY3A4eDVfb3BlbiwKIAkuZHRyX3J0cwkJPSBzcGNwOHg1X2R0cl9ydHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwppbmRleCBiMjkwMmYzLi5hOTEwMDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKQEAgLTM2OSw5ICszNjksOSBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdGlfZXhpdCh2b2lkKQogeworCXVzYl9kZXJlZ2lzdGVyKCZ0aV91c2JfZHJpdmVyKTsKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnRpXzFwb3J0X2RldmljZSk7CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ0aV8ycG9ydF9kZXZpY2UpOwotCXVzYl9kZXJlZ2lzdGVyKCZ0aV91c2JfZHJpdmVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCA2OTU0ZGU1Li41NDZhNTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTEzNDQsMTEgKzEzNDQsMTUgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlmaXh1cF9nZW5lcmljKGRyaXZlcik7Ci0JaWYgKGRyaXZlci0+dXNiX2RyaXZlcikKLQkJZHJpdmVyLT51c2JfZHJpdmVyLT5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDE7CiAKIAlpZiAoIWRyaXZlci0+ZGVzY3JpcHRpb24pCiAJCWRyaXZlci0+ZGVzY3JpcHRpb24gPSBkcml2ZXItPmRyaXZlci5uYW1lOworCWlmICghZHJpdmVyLT51c2JfZHJpdmVyKSB7CisJCVdBUk4oMSwgIlNlcmlhbCBkcml2ZXIgJXMgaGFzIG5vIHVzYl9kcml2ZXJcbiIsCisJCQkJZHJpdmVyLT5kZXNjcmlwdGlvbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkcml2ZXItPnVzYl9kcml2ZXItPnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMTsKIAogCS8qIEFkZCB0aGlzIGRldmljZSB0byBvdXIgbGlzdCBvZiBkZXZpY2VzICovCiAJbXV0ZXhfbG9jaygmdGFibGVfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMKaW5kZXggZjJlZDZhMy4uOTVhODIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2JfZGVidWcuYwpAQCAtNzUsNiArNzUsNyBAQAogCQkubmFtZSA9CQkiZGVidWciLAogCX0sCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0JCSZkZWJ1Z19kcml2ZXIsCiAJLm51bV9wb3J0cyA9CQkxLAogCS5idWxrX291dF9zaXplID0JVVNCX0RFQlVHX01BWF9QQUNLRVRfU0laRSwKIAkuYnJlYWtfY3RsID0JCXVzYl9kZWJ1Z19icmVha19jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX3d3YW4uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Jfd3dhbi5jCmluZGV4IGIwMDRiMmEuLjljMDE0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Jfd3dhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Jfd3dhbi5jCkBAIC0yOTUsMTIgKzI5NSwxNSBAQAogCQkgICAgX19mdW5jX18sIHN0YXR1cywgZW5kcG9pbnQpOwogCX0gZWxzZSB7CiAJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwotCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0JCX0gZWxzZQotCQkJZGJnKCIlczogZW1wdHkgcmVhZCB1cmIgcmVjZWl2ZWQiLCBfX2Z1bmNfXyk7Ci0JCXR0eV9rcmVmX3B1dCh0dHkpOworCQlpZiAodHR5KSB7CisJCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsCisJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9IGVsc2UKKwkJCQlkYmcoIiVzOiBlbXB0eSByZWFkIHVyYiByZWNlaXZlZCIsIF9fZnVuY19fKTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CiAKIAkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCQlpZiAoc3RhdHVzICE9IC1FU0hVVERPV04pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKaW5kZXggMTVhNWQ4OS4uMWMxMTk1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9jZGMuaD4KICNpbmNsdWRlICJ2aXNvci5oIgogCiAvKgpAQCAtNDc5LDYgKzQ4MCwxNyBAQAogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAorCS8qCisJICogc29tZSBTYW1zdW5nIEFuZHJvaWQgcGhvbmVzIGluIG1vZGVtIG1vZGUgaGF2ZSB0aGUgc2FtZSBJRAorCSAqIGFzIFNQSC1JNTAwLCBidXQgdGhleSBhcmUgQUNNIGRldmljZXMsIHNvIGRvbnQgYmluZCB0byB0aGVtCisJICovCisJaWYgKGlkLT5pZFZlbmRvciA9PSBTQU1TVU5HX1ZFTkRPUl9JRCAmJgorCQlpZC0+aWRQcm9kdWN0ID09IFNBTVNVTkdfU1BIX0k1MDBfSUQgJiYKKwkJc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzID09IFVTQl9DTEFTU19DT01NICYmCisJCXNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VTdWJDbGFzcyA9PQorCQkJVVNCX0NEQ19TVUJDTEFTU19BQ00pCisJCXJldHVybiAtRU5PREVWOworCiAJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CiAJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/XG4iLAogCQkJc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9jeXByZXNzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oCmluZGV4IGM4NTRmZGUuLjJjODU1MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9jeXByZXNzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaApAQCAtMzEsNCArMzEsOSBAQAogCQkiQ3lwcmVzcyBJU0QtMzAwTFAiLAogCQlVU0JfU0NfQ1lQX0FUQUNCLCBVU0JfUFJfREVWSUNFLCBOVUxMLCAwKSwKIAorVU5VU1VBTF9ERVYoIDB4MTRjZCwgMHg2MTE2LCAweDAwMDAsIDB4OTk5OSwKKwkJIlN1cGVyIFRvcCIsCisJCSJVU0IgMi4wICBTQVRBIEJSSURHRSIsCisJCVVTQl9TQ19DWVBfQVRBQ0IsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsIDApLAorCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQikgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCBmY2MxZTMyLi5jMTYwMmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTEwNDQsNiArMTA0NCwxNSBAQAogCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9CVUxLMzIpLAogCisvKiBSZXBvcnRlZCBieSA8dHRrc3BhbUBmcmVlLmZyPgorICogVGhlIGRldmljZSByZXBvcnRzIGEgdmVuZG9yLXNwZWNpZmljIGRldmljZSBjbGFzcywgcmVxdWlyaW5nIGFuCisgKiBleHBsaWNpdCB2ZW5kb3IvcHJvZHVjdCBtYXRjaC4KKyAqLworVU5VU1VBTF9ERVYoICAweDA4NTEsIDB4MTU0MiwgMHgwMDAyLCAweDAwMDIsCisJCSJNYWdpY1BpeGVsIiwKKwkJIkZXX09tZWdhMiIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsIDApLAorCiAvKiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CiAgKiBQYW5EaWdpdGFsIERpZ2l0YWwgUGljdHVyZSBGcmFtZS4gRG9lcyBub3QgbGlrZSBBTExPV19NRURJVU1fUkVNT1ZBTAogICogb24gTFVOIDQuCkBAIC0xMzg4LDYgKzEzOTcsMTMgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKIAorLyogU3VibWl0dGVkIGJ5IE5pY2sgSG9sbG93YXkgKi8KK1VOVVNVQUxfREVWKCAweDBmODgsIDB4MDQyZSwgMHgwMTAwLCAweDAxMDAsCisJCSJWVGVjaCIsCisJCSJLaWRpem9vbSIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAorCiAvKiBSZXBvcnRlZCBieSBNaWNoYWVsIFN0YXR0bWFubiA8bWljaGFlbEBzdGF0dG1hbm4uY29tPiAqLwogVU5VU1VBTF9ERVYoICAweDBmY2UsIDB4ZDAwOCwgMHgwMDAwLCAweDAwMDAsCiAJCSJTb255IEVyaWNzc29uIiwKQEAgLTE4NzIsNiArMTg4OCwyMiBAQAogCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9OT19SRUFEX0RJU0NfSU5GTyApLAogCisvKiBQYXRjaCBieSBSaWNoYXJkIFNjaPx0eiA8ci5zY2h0ekB0LW9ubGluZS5kZT4KKyAqIFRoaXMgZXh0ZXJuYWwgaGFyZCBkcml2ZSBlbmNsb3N1cmUgdXNlcyBhIEpNaWNyb24gY2hpcCB3aGljaAorICogbmVlZHMgdGhlIFVTX0ZMX0lHTk9SRV9SRVNJRFVFIGZsYWcgdG8gd29yayBwcm9wZXJseS4gKi8KK1VOVVNVQUxfREVWKCAgMHgxZTY4LCAweDAwMWIsIDB4MDAwMCwgMHgwMDAwLAorCQkiVHJla1N0b3IgR21iSCAmIENvLiBLRyIsCisJCSJEYXRhU3RhdGlvbiBtYXhpIGcudSIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFIHwgVVNfRkxfU0FORV9TRU5TRSApLAorCisvKiBSZXBvcnRlZCBieSBKYXNwZXIgTWFja2VuemllIDxzY2FybGV0cGltcGVybmFsQGhvdG1haWwuY29tPiAqLworVU5VU1VBTF9ERVYoIDB4MWU3NCwgMHg0NjIxLCAweDAwMDAsIDB4MDAwMCwKKwkJIkNvYnkgRWxlY3Ryb25pY3MiLAorCQkiTVAzIFBsYXllciIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0JVTEtfSUdOT1JFX1RBRyB8IFVTX0ZMX01BWF9TRUNUT1JTXzY0ICksCisKIFVOVVNVQUxfREVWKCAweDIxMTYsIDB4MDMyMCwgMHgwMDAxLCAweDAwMDEsCiAJCSJTVCIsCiAJCSIyQSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L25ldC5jIGIvZHJpdmVycy92aG9zdC9uZXQuYwppbmRleCA5YjNjYTEwLi5mNjE2Y2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jCisrKyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKQEAgLTEyOCw4ICsxMjgsNyBAQAogCXNpemVfdCBoZHJfc2l6ZTsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCi0JLyogVE9ETzogY2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyBmcm9tIHZob3N0X3dvcmtlcj8KLQkgKiBOb3Qgc3VyZSBpdCdzIHdvcnRoIGl0LCBpdCdzIHN0cmFpZ2h0LWZvcndhcmQgZW5vdWdoLiAqLworCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXI/ICovCiAJc29jayA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh2cS0+cHJpdmF0ZV9kYXRhLCAxKTsKIAlpZiAoIXNvY2spCiAJCXJldHVybjsKQEAgLTMwNiw3ICszMDUsOCBAQAogCXNpemVfdCBsZW4sIHRvdGFsX2xlbiA9IDA7CiAJaW50IGVycjsKIAlzaXplX3QgaGRyX3NpemU7Ci0Jc3RydWN0IHNvY2tldCAqc29jayA9IHJjdV9kZXJlZmVyZW5jZSh2cS0+cHJpdmF0ZV9kYXRhKTsKKwkvKiBUT0RPOiBjaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIGZyb20gdmhvc3Rfd29ya2VyPyAqLworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2sodnEtPnByaXZhdGVfZGF0YSwgMSk7CiAJaWYgKCFzb2NrIHx8IHNrYl9xdWV1ZV9lbXB0eSgmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpKQogCQlyZXR1cm47CiAKQEAgLTQxNSw3ICs0MTUsOCBAQAogCWludCBlcnIsIGhlYWRjb3VudDsKIAlzaXplX3Qgdmhvc3RfaGxlbiwgc29ja19obGVuOwogCXNpemVfdCB2aG9zdF9sZW4sIHNvY2tfbGVuOwotCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSByY3VfZGVyZWZlcmVuY2UodnEtPnByaXZhdGVfZGF0YSk7CisJLyogVE9ETzogY2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyBmcm9tIHZob3N0X3dvcmtlcj8gKi8KKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHZxLT5wcml2YXRlX2RhdGEsIDEpOwogCWlmICghc29jayB8fCBza2JfcXVldWVfZW1wdHkoJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKaW5kZXggMmFmNDRiNy4uYjMzNjNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5oCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaApAQCAtMTczLDkgKzE3Myw5IEBACiB7CiAJdW5zaWduZWQgYWNrZWRfZmVhdHVyZXM7CiAKLQlhY2tlZF9mZWF0dXJlcyA9Ci0JCXJjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjayhkZXYtPmFja2VkX2ZlYXR1cmVzLAotCQkJCQkgICAgbG9ja2RlcF9pc19oZWxkKCZkZXYtPm11dGV4KSk7CisJLyogVE9ETzogY2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyBmcm9tIHZob3N0X3dvcmtlciBvciBkZXYgbXV0ZXggaXMKKwkgKiBoZWxkPyAqLworCWFja2VkX2ZlYXR1cmVzID0gcmN1X2RlcmVmZXJlbmNlX2luZGV4X2NoZWNrKGRldi0+YWNrZWRfZmVhdHVyZXMsIDEpOwogCXJldHVybiBhY2tlZF9mZWF0dXJlcyAmICgxIDw8IGJpdCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXJrZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXJrZmIuYwppbmRleCBkNTgzYmVhLi4zOTFhYzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Fya2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hcmtmYi5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3ZnYS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+IC8qIFdoeSBzaG91bGQgZmIgZHJpdmVyIGNhbGwgY29uc29sZSBmdW5jdGlvbnM/IGJlY2F1c2UgYWNxdWlyZV9jb25zb2xlX3NlbSgpICovCisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPiAvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGNvbnNvbGVfbG9jaygpICovCiAjaW5jbHVkZSA8dmlkZW8vdmdhLmg+CiAKICNpZmRlZiBDT05GSUdfTVRSUgpAQCAtMTA5MSwxMiArMTA5MSwxMiBAQAogCiAJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAic3VzcGVuZFxuIik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CiAKIAlpZiAoKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkgfHwgKHBhci0+cmVmX2NvdW50ID09IDApKSB7CiAJCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMTA3LDcgKzExMDcsNyBAQAogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBwY2lfY2hvb3NlX3N0YXRlKGRldiwgc3RhdGUpKTsKIAogCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMjIsNyArMTEyMiw3IEBACiAKIAlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsICJyZXN1bWVcbiIpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOwogCiAJaWYgKHBhci0+cmVmX2NvdW50ID09IDApCkBAIC0xMTQxLDcgKzExNDEsNyBAQAogCiBmYWlsOgogCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKaW5kZXggZGQ5ZGUyZS4uNGNiNmE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCkBAIC0xODYwLDExICsxODYwLDExIEBACiB7CiAgICAgICAgIHN0cnVjdCBhdHkxMjhmYl9wYXIgKnBhciA9IGRhdGE7CiAKLQlpZiAodHJ5X2FjcXVpcmVfY29uc29sZV9zZW0oKSkKKwlpZiAoIWNvbnNvbGVfdHJ5bG9jaygpKQogCQlyZXR1cm47CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGFyLT5wZGV2KTsKIAlhdHkxMjhfZG9fcmVzdW1lKHBhci0+cGRldik7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCiAKQEAgLTI0MzgsNyArMjQzOCw3IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiYXR5MTI4ZmI6IHN1c3BlbmRpbmcuLi5cbiIpOwogCQotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOwogCkBAIC0yNDcwLDcgKzI0NzAsNyBAQAogCWlmIChzdGF0ZS5ldmVudCAhPSBQTV9FVkVOVF9PTikKIAkJYXR5MTI4X3NldF9zdXNwZW5kKHBhciwgMSk7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOwogCkBAIC0yNTI3LDkgKzI1MjcsOSBAQAogewogCWludCByYzsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlyYyA9IGF0eTEyOF9kb19yZXN1bWUocGRldik7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKaW5kZXggNzY3YWI0Zi4uOTRlMjkzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwpAQCAtMjA2OSw3ICsyMDY5LDcgQEAKIAlpZiAoc3RhdGUuZXZlbnQgPT0gcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50KQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOwogCkBAIC0yMDk3LDE0ICsyMDk3LDE0IEBACiAJCXBhci0+bG9ja19ibGFuayA9IDA7CiAJCWF0eWZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGluZm8pOwogCQlmYl9zZXRfc3VzcGVuZChpbmZvLCAwKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAjZWxzZQogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwogI2VuZGlmCiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOwogCkBAIC0yMTMzLDcgKzIxMzMsNyBAQAogCWlmIChwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfT04pCiAJCXJldHVybiAwOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJLyoKIAkgKiBQQ0kgc3RhdGUgd2lsbCBoYXZlIGJlZW4gcmVzdG9yZWQgYnkgdGhlIGNvcmUsIHNvCkBAIC0yMTYxLDcgKzIxNjEsNyBAQAogCXBhci0+bG9ja19ibGFuayA9IDA7CiAJYXR5ZmJfYmxhbmsoRkJfQkxBTktfVU5CTEFOSywgaW5mbyk7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKaW5kZXggYzRlMTc2NC4uOTJiZGE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKQEAgLTI2MjYsNyArMjYyNiw3IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKIApAQCAtMjY5MCw3ICsyNjkwLDcgQEAKIAlpZiAocmluZm8tPnBtX21vZGUgJiByYWRlb25fcG1fZDIpCiAJCXJhZGVvbl9zZXRfc3VzcGVuZChyaW5mbywgMSk7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogIGRvbmU6CiAJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gbWVzZzsKQEAgLTI3MTUsMTAgKzI3MTUsMTAgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAocmluZm8tPm5vX3NjaGVkdWxlKSB7Ci0JCWlmICh0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSgpKQorCQlpZiAoIWNvbnNvbGVfdHJ5bG9jaygpKQogCQkJcmV0dXJuIDA7CiAJfSBlbHNlCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAicmFkZW9uZmIgKCVzKTogcmVzdW1pbmcgZnJvbSBzdGF0ZTogJWQuLi5cbiIsCiAJICAgICAgIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQpOwpAQCAtMjc4Myw3ICsyNzgzLDcgQEAKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwogCiAgYmFpbDoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2x0djM1MHF2LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sdHYzNTBxdi5jCmluZGV4IDgwMTBhYWUuLmRkMGU4NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2x0djM1MHF2LmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHR2MzUwcXYuYwpAQCAtMjM5LDExICsyMzksMTUgQEAKIAlsY2QtPnNwaSA9IHNwaTsKIAlsY2QtPnBvd2VyID0gRkJfQkxBTktfUE9XRVJET1dOOwogCWxjZC0+YnVmZmVyID0ga3phbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxjZC0+YnVmZmVyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfbGNkOworCX0KIAogCWxkID0gbGNkX2RldmljZV9yZWdpc3RlcigibHR2MzUwcXYiLCAmc3BpLT5kZXYsIGxjZCwgJmx0dl9vcHMpOwogCWlmIChJU19FUlIobGQpKSB7CiAJCXJldCA9IFBUUl9FUlIobGQpOwotCQlnb3RvIG91dF9mcmVlX2xjZDsKKwkJZ290byBvdXRfZnJlZV9idWZmZXI7CiAJfQogCWxjZC0+bGQgPSBsZDsKIApAQCAtMjU3LDYgKzI2MSw4IEBACiAKIG91dF91bnJlZ2lzdGVyOgogCWxjZF9kZXZpY2VfdW5yZWdpc3RlcihsZCk7CitvdXRfZnJlZV9idWZmZXI6CisJa2ZyZWUobGNkLT5idWZmZXIpOwogb3V0X2ZyZWVfbGNkOgogCWtmcmVlKGxjZCk7CiAJcmV0dXJuIHJldDsKQEAgLTI2OCw2ICsyNzQsNyBAQAogCiAJbHR2MzUwcXZfcG93ZXIobGNkLCBGQl9CTEFOS19QT1dFUkRPV04pOwogCWxjZF9kZXZpY2VfdW5yZWdpc3RlcihsY2QtPmxkKTsKKwlrZnJlZShsY2QtPmJ1ZmZlcik7CiAJa2ZyZWUobGNkKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iZjUzNy1scTAzNS5jIGIvZHJpdmVycy92aWRlby9iZjUzNy1scTAzNS5jCmluZGV4IDE4YzUwNzguLjQ3YzIxZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmY1MzctbHEwMzUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMKQEAgLTY5Niw2ICs2OTYsNyBAQAogewogCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJaW50IHJldDsKIAogCWlmIChyZXF1ZXN0X2RtYShDSF9QUEksIEtCVUlMRF9NT0ROQU1FKSkgewogCQlwcl9lcnIoImNvdWxkbid0IHJlcXVlc3QgUFBJIERNQVxuIik7CkBAIC03MDQsMTcgKzcwNSwxNiBAQAogCiAJaWYgKHJlcXVlc3RfcG9ydHMoKSkgewogCQlwcl9lcnIoImNvdWxkbid0IHJlcXVlc3QgZ3BpbyBwb3J0XG4iKTsKLQkJZnJlZV9kbWEoQ0hfUFBJKTsKLQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0X3BvcnRzOwogCX0KIAogCWZiX2J1ZmZlciA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBUT1RBTF9WSURFT19NRU1fU0laRSwKIAkJCQkgICAgICAgJmRtYV9oYW5kbGUsIEdGUF9LRVJORUwpOwogCWlmIChmYl9idWZmZXIgPT0gTlVMTCkgewogCQlwcl9lcnIoImNvdWxkbid0IGFsbG9jYXRlIGRtYSBidWZmZXJcbiIpOwotCQlmcmVlX2RtYShDSF9QUEkpOwotCQlmcmVlX3BvcnRzKCk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9kbWFfY29oZXJlbnQ7CiAJfQogCiAJaWYgKEwxX0RBVEFfQV9MRU5HVEgpCkBAIC03MjUsMTAgKzcyNSw4IEBACiAKIAlpZiAoZG1hX2Rlc2NfdGFibGUgPT0gTlVMTCkgewogCQlwcl9lcnIoImNvdWxkbid0IGFsbG9jYXRlIGRtYSBkZXNjcmlwdG9yXG4iKTsKLQkJZnJlZV9kbWEoQ0hfUFBJKTsKLQkJZnJlZV9wb3J0cygpOwotCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBUT1RBTF9WSURFT19NRU1fU0laRSwgZmJfYnVmZmVyLCAwKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3RhYmxlOwogCX0KIAogCWJmaW5fbHEwMzVfZmIuc2NyZWVuX2Jhc2UgPSAodm9pZCAqKWZiX2J1ZmZlcjsKQEAgLTc3MSwzMSArNzY5LDIxIEBACiAJYmZpbl9scTAzNV9mYi5wc2V1ZG9fcGFsZXR0ZSA9IGt6YWxsb2Moc2l6ZW9mKHUzMikgKiAxNiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJmaW5fbHEwMzVfZmIucHNldWRvX3BhbGV0dGUgPT0gTlVMTCkgewogCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBwc2V1ZG9fcGFsZXR0ZVxuIik7Ci0JCWZyZWVfZG1hKENIX1BQSSk7Ci0JCWZyZWVfcG9ydHMoKTsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgVE9UQUxfVklERU9fTUVNX1NJWkUsIGZiX2J1ZmZlciwgMCk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9wYWxldHRlOwogCX0KIAogCWlmIChmYl9hbGxvY19jbWFwKCZiZmluX2xxMDM1X2ZiLmNtYXAsIE5CUl9QQUxFVFRFLCAwKSA8IDApIHsKIAkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgY29sb3JtYXAgKCVkIGVudHJpZXMpXG4iLAogCQkJTkJSX1BBTEVUVEUpOwotCQlmcmVlX2RtYShDSF9QUEkpOwotCQlmcmVlX3BvcnRzKCk7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFRPVEFMX1ZJREVPX01FTV9TSVpFLCBmYl9idWZmZXIsIDApOwotCQlrZnJlZShiZmluX2xxMDM1X2ZiLnBzZXVkb19wYWxldHRlKTsKLQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0X2NtYXA7CiAJfQogCiAJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZiZmluX2xxMDM1X2ZiKSA8IDApIHsKIAkJcHJfZXJyKCJ1bmFibGUgdG8gcmVnaXN0ZXIgZnJhbWVidWZmZXJcbiIpOwotCQlmcmVlX2RtYShDSF9QUEkpOwotCQlmcmVlX3BvcnRzKCk7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFRPVEFMX1ZJREVPX01FTV9TSVpFLCBmYl9idWZmZXIsIDApOwotCQlmYl9idWZmZXIgPSBOVUxMOwotCQlrZnJlZShiZmluX2xxMDM1X2ZiLnBzZXVkb19wYWxldHRlKTsKLQkJZmJfZGVhbGxvY19jbWFwKCZiZmluX2xxMDM1X2ZiLmNtYXApOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfcmVnOwogCX0KIAogCWkyY19hZGRfZHJpdmVyKCZhZDUyODBfZHJpdmVyKTsKQEAgLTgwNywxMSArNzk1LDMxIEBACiAKIAlsY2RfZGV2ID0gbGNkX2RldmljZV9yZWdpc3RlcihLQlVJTERfTU9ETkFNRSwgJnBkZXYtPmRldiwgTlVMTCwKIAkJCQkgICAgICAmYmZpbl9sY2Rfb3BzKTsKKwlpZiAoSVNfRVJSKGxjZF9kZXYpKSB7CisJCXByX2VycigidW5hYmxlIHRvIHJlZ2lzdGVyIGxjZFxuIik7CisJCXJldCA9IFBUUl9FUlIobGNkX2Rldik7CisJCWdvdG8gb3V0X2xjZDsKKwl9CiAJbGNkX2Rldi0+cHJvcHMubWF4X2NvbnRyYXN0ID0gMjU1LAogCiAJcHJfaW5mbygiaW5pdGlhbGl6ZWQiKTsKIAogCXJldHVybiAwOworb3V0X2xjZDoKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZiZmluX2xxMDM1X2ZiKTsKK291dF9yZWc6CisJZmJfZGVhbGxvY19jbWFwKCZiZmluX2xxMDM1X2ZiLmNtYXApOworb3V0X2NtYXA6CisJa2ZyZWUoYmZpbl9scTAzNV9mYi5wc2V1ZG9fcGFsZXR0ZSk7CitvdXRfcGFsZXR0ZToKK291dF90YWJsZToKKwlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBUT1RBTF9WSURFT19NRU1fU0laRSwgZmJfYnVmZmVyLCAwKTsKKwlmYl9idWZmZXIgPSBOVUxMOworb3V0X2RtYV9jb2hlcmVudDoKKwlmcmVlX3BvcnRzKCk7CitvdXRfcG9ydHM6CisJZnJlZV9kbWEoQ0hfUFBJKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBiZmluX2xxMDM1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jaGlwc2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2NoaXBzZmIuYwppbmRleCBkNjM3ZTFmLi5jZmY3NDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NoaXBzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NoaXBzZmIuYwpAQCAtNDYwLDEwICs0NjAsMTAgQEAKIAlpZiAoIShzdGF0ZS5ldmVudCAmIFBNX0VWRU5UX1NMRUVQKSkKIAkJZ290byBkb25lOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWNoaXBzZmJfYmxhbmsoMSwgcCk7CiAJZmJfc2V0X3N1c3BlbmQocCwgMSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAgZG9uZToKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKIAlyZXR1cm4gMDsKQEAgLTQ3MywxMCArNDczLDEwIEBACiB7CiAgICAgICAgIHN0cnVjdCBmYl9pbmZvICpwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKHAsIDApOwogCWNoaXBzZmJfYmxhbmsoMCwgcCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCA3Y2NjOTY3Li45YzA5MmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtMzc1LDE0ICszNzUsMTQgQEAKIAlpbnQgYzsKIAlpbnQgbW9kZTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAob3BzICYmIG9wcy0+Y3VycmNvbiAhPSAtMSkKIAkJdmMgPSB2Y19jb25zW29wcy0+Y3VycmNvbl0uZDsKIAogCWlmICghdmMgfHwgIUNPTl9JU19WSVNJQkxFKHZjKSB8fAogIAkgICAgcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW3ZjLT52Y19udW1dXSAhPSBpbmZvIHx8CiAJICAgIHZjLT52Y19kZWNjbSAhPSAxKSB7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzkyLDcgKzM5Miw3IEBACiAJCUNNX0VSQVNFIDogQ01fRFJBVzsKIAlvcHMtPmN1cnNvcih2YywgaW5mbywgbW9kZSwgc29mdGJhY2tfbGluZXMsIGdldF9jb2xvcih2YywgaW5mbywgYywgMSksCiAJCSAgICBnZXRfY29sb3IodmMsIGluZm8sIGMsIDApKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogc3RhdGljIHZvaWQgY3Vyc29yX3RpbWVyX2hhbmRsZXIodW5zaWduZWQgbG9uZyBkZXZfYWRkcikKQEAgLTgzNiw3ICs4MzYsNyBAQAogCiAJZm91bmQgPSBzZWFyY2hfZmJfaW5fbWFwKG5ld2lkeCk7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJY29uMmZiX21hcFt1bml0XSA9IG5ld2lkeDsKIAlpZiAoIWVyciAmJiAhZm91bmQpCiAgCQllcnIgPSBjb24yZmJfYWNxdWlyZV9uZXdpbmZvKHZjLCBpbmZvLCB1bml0LCBvbGRpZHgpOwpAQCAtODYzLDcgKzg2Myw3IEBACiAJaWYgKCFzZWFyY2hfZmJfaW5fbWFwKGluZm9faWR4KSkKIAkJaW5mb19pZHggPSBuZXdpZHg7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKICAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzMyMSw3ICszMzIxLDcgQEAKIAlpZiAoZmJjb25faGFzX2V4aXRlZCkKIAkJcmV0dXJuIGNvdW50OwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlkeCA9IGNvbjJmYl9tYXBbZmdfY29uc29sZV07CiAKIAlpZiAoaWR4ID09IC0xIHx8IHJlZ2lzdGVyZWRfZmJbaWR4XSA9PSBOVUxMKQpAQCAtMzMzMSw3ICszMzMxLDcgQEAKIAlyb3RhdGUgPSBzaW1wbGVfc3RydG91bChidWYsIGxhc3QsIDApOwogCWZiY29uX3JvdGF0ZShpbmZvLCByb3RhdGUpOwogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzM0Niw3ICszMzQ2LDcgQEAKIAlpZiAoZmJjb25faGFzX2V4aXRlZCkKIAkJcmV0dXJuIGNvdW50OwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlkeCA9IGNvbjJmYl9tYXBbZmdfY29uc29sZV07CiAKIAlpZiAoaWR4ID09IC0xIHx8IHJlZ2lzdGVyZWRfZmJbaWR4XSA9PSBOVUxMKQpAQCAtMzM1Niw3ICszMzU2LDcgQEAKIAlyb3RhdGUgPSBzaW1wbGVfc3RydG91bChidWYsIGxhc3QsIDApOwogCWZiY29uX3JvdGF0ZV9hbGwoaW5mbywgcm90YXRlKTsKIGVycjoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTMzNjksNyArMzM2OSw3IEBACiAJaWYgKGZiY29uX2hhc19leGl0ZWQpCiAJCXJldHVybiAwOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlkeCA9IGNvbjJmYl9tYXBbZmdfY29uc29sZV07CiAKIAlpZiAoaWR4ID09IC0xIHx8IHJlZ2lzdGVyZWRfZmJbaWR4XSA9PSBOVUxMKQpAQCAtMzM3OCw3ICszMzc4LDcgQEAKIAlpbmZvID0gcmVnaXN0ZXJlZF9mYltpZHhdOwogCXJvdGF0ZSA9IGZiY29uX2dldF9yb3RhdGUoaW5mbyk7CiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHJvdGF0ZSk7CiB9CiAKQEAgLTMzOTIsNyArMzM5Miw3IEBACiAJaWYgKGZiY29uX2hhc19leGl0ZWQpCiAJCXJldHVybiAwOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlkeCA9IGNvbjJmYl9tYXBbZmdfY29uc29sZV07CiAKIAlpZiAoaWR4ID09IC0xIHx8IHJlZ2lzdGVyZWRfZmJbaWR4XSA9PSBOVUxMKQpAQCAtMzQwNiw3ICszNDA2LDcgQEAKIAogCWJsaW5rID0gKG9wcy0+ZmxhZ3MgJiBGQkNPTl9GTEFHU19DVVJTT1JfVElNRVIpID8gMSA6IDA7CiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGJsaW5rKTsKIH0KIApAQCAtMzQyMSw3ICszNDIxLDcgQEAKIAlpZiAoZmJjb25faGFzX2V4aXRlZCkKIAkJcmV0dXJuIGNvdW50OwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlkeCA9IGNvbjJmYl9tYXBbZmdfY29uc29sZV07CiAKIAlpZiAoaWR4ID09IC0xIHx8IHJlZ2lzdGVyZWRfZmJbaWR4XSA9PSBOVUxMKQpAQCAtMzQ0Myw3ICszNDQzLDcgQEAKIAl9CiAKIGVycjoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTM0ODIsNyArMzQ4Miw3IEBACiAJaWYgKG51bV9yZWdpc3RlcmVkX2ZiKSB7CiAJCWludCBpOwogCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IEZCX01BWDsgaSsrKSB7CiAJCQlpZiAocmVnaXN0ZXJlZF9mYltpXSAhPSBOVUxMKSB7CkBAIC0zNDkxLDcgKzM0OTEsNyBAQAogCQkJfQogCQl9CiAKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlmYmNvbl90YWtlb3ZlcigwKTsKIAl9CiB9CkBAIC0zNTUyLDcgKzM1NTIsNyBAQAogewogCWludCBpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3JlZ2lzdGVyX2NsaWVudCgmZmJjb25fZXZlbnRfbm90aWZpZXIpOwogCWZiY29uX2RldmljZSA9IGRldmljZV9jcmVhdGUoZmJfY2xhc3MsIE5VTEwsIE1LREVWKDAsIDApLCBOVUxMLAogCQkJCSAgICAgImZiY29uIik7CkBAIC0zNTY4LDcgKzM1NjgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ09OU09MRVM7IGkrKykKIAkJY29uMmZiX21hcFtpXSA9IC0xOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJZmJjb25fc3RhcnQoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM1OTEsMTIgKzM1OTEsMTIgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGZiX2NvbnNvbGVfZXhpdCh2b2lkKQogewotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl91bnJlZ2lzdGVyX2NsaWVudCgmZmJjb25fZXZlbnRfbm90aWZpZXIpOwogCWZiY29uX2RlaW5pdF9kZXZpY2UoKTsKIAlkZXZpY2VfZGVzdHJveShmYl9jbGFzcywgTUtERVYoMCwgMCkpOwogCWZiY29uX2V4aXQoKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAl1bnJlZ2lzdGVyX2Nvbl9kcml2ZXIoJmZiX2Nvbik7CiB9CQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKaW5kZXggYzk3NDkxYi4uOTE1ZmQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwpAQCAtMjAyLDExICsyMDIsNyBAQAogCX0KIH0KIAotLyoKLSAqIENhbGxlZCBvbmx5IGR1aW5nIGluaXQgc28gY2FsbCBvZiBhbGxvY19ib290bWVuIGlzIG9rLgotICogTWFya2VkIF9faW5pdF9yZWZvayB0byBzaWxlbmNlIG1vZHBvc3QuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdF9yZWZvayB2Z2Fjb25fc2Nyb2xsYmFja19zdGFydHVwKHZvaWQpCitzdGF0aWMgdm9pZCB2Z2Fjb25fc2Nyb2xsYmFja19zdGFydHVwKHZvaWQpCiB7CiAJdmdhY29uX3Njcm9sbGJhY2sgPSBrY2FsbG9jKENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLX1NJWkUsIDEwMjQsIEdGUF9OT1dBSVQpOwogCXZnYWNvbl9zY3JvbGxiYWNrX2luaXQodmdhX3ZpZGVvX251bV9jb2x1bW5zICogMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKaW5kZXggYzI2NWFlZC4uOGQ2MWVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYwpAQCAtMTA5Miw5ICsxMDkyLDEwIEBACiAKIGlycV9mcmVxOgogI2lmZGVmIENPTkZJR19DUFVfRlJFUQorCWxjZF9kYTh4eF9jcHVmcmVxX2RlcmVnaXN0ZXIocGFyKTsKKyNlbmRpZgogZXJyX2NwdV9mcmVxOgogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoZGE4eHhfZmJfaW5mbyk7Ci0jZW5kaWYKIAogZXJyX2RlYWxsb2NfY21hcDoKIAlmYl9kZWFsbG9jX2NtYXAoJmRhOHh4X2ZiX2luZm8tPmNtYXApOwpAQCAtMTEzMCwxNCArMTEzMSwxNCBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZGE4eHhfZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKHBhci0+cGFuZWxfcG93ZXJfY3RybCkKIAkJcGFyLT5wYW5lbF9wb3dlcl9jdHJsKDApOwogCiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7CiAJbGNkX2Rpc2FibGVfcmFzdGVyKCk7CiAJY2xrX2Rpc2FibGUocGFyLT5sY2RjX2Nsayk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNDYsMTQgKzExNDcsMTQgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmIChwYXItPnBhbmVsX3Bvd2VyX2N0cmwpCiAJCXBhci0+cGFuZWxfcG93ZXJfY3RybCgxKTsKIAogCWNsa19lbmFibGUocGFyLT5sY2RjX2Nsayk7CiAJbGNkX2VuYWJsZV9yYXN0ZXIoKTsKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAwKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYm1lbS5jIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCmluZGV4IDRhYzEyMDEuLmUyYmY5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKQEAgLTEwMzYsMTEgKzEwMzYsMTEgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkKIAkJCXJldHVybiAtRU5PREVWOwotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlpbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19VU0VSRVZFTlQ7CiAJCXJldCA9IGZiX3NldF92YXIoaW5mbywgJnZhcik7CiAJCWluZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19VU0VSRVZFTlQ7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CiAJCWlmICghcmV0ICYmIGNvcHlfdG9fdXNlcihhcmdwLCAmdmFyLCBzaXplb2YodmFyKSkpCiAJCQlyZXQgPSAtRUZBVUxUOwpAQCAtMTA3Miw5ICsxMDcyLDkgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkKIAkJCXJldHVybiAtRU5PREVWOwotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlyZXQgPSBmYl9wYW5fZGlzcGxheShpbmZvLCAmdmFyKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQl1bmxvY2tfZmJfaW5mbyhpbmZvKTsKIAkJaWYgKHJldCA9PSAwICYmIGNvcHlfdG9fdXNlcihhcmdwLCAmdmFyLCBzaXplb2YodmFyKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTExMTksMTEgKzExMTksMTEgQEAKIAljYXNlIEZCSU9CTEFOSzoKIAkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX01JU0NfVVNFUkVWRU5UOwogCQlyZXQgPSBmYl9ibGFuayhpbmZvLCBhcmcpOwogCQlpbmZvLT5mbGFncyAmPSB+RkJJTkZPX01JU0NfVVNFUkVWRU5UOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXVubG9ja19mYl9pbmZvKGluZm8pOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwppbmRleCAwYTA4ZjEzLi5mNGEzMjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwpAQCAtOTAsMTEgKzkwLDExIEBACiAJaW50IGVycjsKIAogCXZhci0+YWN0aXZhdGUgfD0gRkJfQUNUSVZBVEVfRk9SQ0U7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX2luZm8tPmZsYWdzIHw9IEZCSU5GT19NSVNDX1VTRVJFVkVOVDsKIAllcnIgPSBmYl9zZXRfdmFyKGZiX2luZm8sIHZhcik7CiAJZmJfaW5mby0+ZmxhZ3MgJj0gfkZCSU5GT19NSVNDX1VTRVJFVkVOVDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCXJldHVybiAwOwpAQCAtMTc1LDcgKzE3NSw3IEBACiAJaWYgKGkgKiBzaXplb2Yoc3RydWN0IGZiX3ZpZGVvbW9kZSkgIT0gY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWxpc3Rfc3BsaWNlKCZmYl9pbmZvLT5tb2RlbGlzdCwgJm9sZF9saXN0KTsKIAlmYl92aWRlb21vZGVfdG9fbW9kZWxpc3QoKGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKilidWYsIGksCiAJCQkJICZmYl9pbmZvLT5tb2RlbGlzdCk7CkBAIC0xODUsNyArMTg1LDcgQEAKIAl9IGVsc2UKIAkJZmJfZGVzdHJveV9tb2RlbGlzdCgmb2xkX2xpc3QpOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMwMSwxMSArMzAxLDExIEBACiAJY2hhciAqbGFzdCA9IE5VTEw7CiAJaW50IGVycjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9pbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19VU0VSRVZFTlQ7CiAJZXJyID0gZmJfYmxhbmsoZmJfaW5mbywgc2ltcGxlX3N0cnRvdWwoYnVmLCAmbGFzdCwgMCkpOwogCWZiX2luZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19VU0VSRVZFTlQ7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIGNvdW50OwpAQCAtMzY0LDkgKzM2NCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXZhci55b2Zmc2V0ID0gc2ltcGxlX3N0cnRvdWwobGFzdCwgJmxhc3QsIDApOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWVyciA9IGZiX3Bhbl9kaXNwbGF5KGZiX2luZm8sICZ2YXIpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0zOTksOSArMzk5LDkgQEAKIAogCXN0YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmbGFzdCwgMCk7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQoZmJfaW5mbywgKGludClzdGF0ZSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL2d4ZmJfY29yZS5jIGIvZHJpdmVycy92aWRlby9nZW9kZS9neGZiX2NvcmUuYwppbmRleCA3MGIxZDlkLi5iNGYxOWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL2d4ZmJfY29yZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZ3hmYl9jb3JlLmMKQEAgLTM0NCwxMCArMzQ0LDEwIEBACiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgewotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlneF9wb3dlcmRvd24oaW5mbyk7CiAJCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJfQogCiAJLyogdGhlcmUncyBubyBwb2ludCBpbiBzZXR0aW5nIFBDSSBzdGF0ZXM7IHdlIGVtdWxhdGUgUENJLCBzbwpAQCAtMzYxLDcgKzM2MSw3IEBACiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJaW50IHJldDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlyZXQgPSBneF9wb3dlcnVwKGluZm8pOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJneGZiOiAgcG93ZXIgdXAgZmFpbGVkIVxuIik7CkBAIC0zNjksNyArMzY5LDcgQEAKIAl9CiAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAwKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nZW9kZS9seGZiX2NvcmUuYyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvbHhmYl9jb3JlLmMKaW5kZXggMzliZGJlZC4uNDE2ODUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nZW9kZS9seGZiX2NvcmUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2x4ZmJfY29yZS5jCkBAIC00NjUsMTAgKzQ2NSwxMCBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJbHhfcG93ZXJkb3duKGluZm8pOwogCQlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCX0KIAogCS8qIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gc2V0dGluZyBQQ0kgc3RhdGVzOyB3ZSBlbXVsYXRlIFBDSSwgc28KQEAgLTQ4Miw3ICs0ODIsNyBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCByZXQ7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmV0ID0gbHhfcG93ZXJ1cChpbmZvKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAibHhmYjogIHBvd2VyIHVwIGZhaWxlZCFcbiIpOwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAJfQogCiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCmluZGV4IDU3NDNlYTIuLjMxOGY2ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKQEAgLTE1NzQsNyArMTU3NCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKIAogCWlmIChpbmZvLT5mYm9wcy0+ZmJfc3luYykKQEAgLTE1ODcsNyArMTU4Nyw3IEBACiAJcGNpX3NhdmVfc3RhdGUoZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIG1lc2cpKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTYwNSw3ICsxNjA1LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKGRldik7CiAKQEAgLTE2MjEsNyArMTYyMSw3IEBACiAJZmJfc2V0X3N1c3BlbmQgKGluZm8sIDApOwogCWluZm8tPmZib3BzLT5mYl9ibGFuayhWRVNBX05PX0JMQU5LSU5HLCBpbmZvKTsKIGZhaWw6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vano0NzQwX2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2p6NDc0MF9mYi5jCmluZGV4IDY3MGVjYWEuLmRlMzY2OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vano0NzQwX2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9qejQ3NDBfZmIuYwpAQCAtNzc4LDkgKzc3OCw5IEBACiB7CiAJc3RydWN0IGp6ZmIgKmp6ZmIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZChqemZiLT5mYiwgMSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAltdXRleF9sb2NrKCZqemZiLT5sb2NrKTsKIAlpZiAoanpmYi0+aXNfZW5hYmxlZCkKQEAgLTgwMCw5ICs4MDAsOSBAQAogCQlqemZiX2VuYWJsZShqemZiKTsKIAltdXRleF91bmxvY2soJmp6ZmItPmxvY2spOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKGp6ZmItPmZiLCAwKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9teDNmYi5jIGIvZHJpdmVycy92aWRlby9teDNmYi5jCmluZGV4IGNiMDEzOTEuLjdlM2E0OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXgzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL214M2ZiLmMKQEAgLTExNzcsOSArMTE3Nyw5IEBACiAJc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBteDNmYi0+ZmJpLT5wYXI7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQobXgzZmItPmZiaSwgMSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlpZiAobXgzX2ZiaS0+YmxhbmsgPT0gRkJfQkxBTktfVU5CTEFOSykgewogCQlzZGNfZGlzYWJsZV9jaGFubmVsKG14M19mYmkpOwpAQCAtMTIwMiw5ICsxMjAyLDkgQEAKIAkJc2RjX3NldF9icmlnaHRuZXNzKG14M2ZiLCBteDNmYi0+YmFja2xpZ2h0X2xldmVsKTsKIAl9CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQobXgzZmItPmZiaSwgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnVjOTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vbnVjOTAwZmIuYwppbmRleCA2MjQ5OGJkLi5mODM4ZDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL251YzkwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9udWM5MDBmYi5jCkBAIC02OTYsNiArNjk2LDggQEAKIAludWM5MDBmYl9zdG9wX2xjZChmYmluZm8pOwogCW1zbGVlcCgxKTsKIAorCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJpbmZvKTsKKwludWM5MDBmYl9jcHVmcmVxX2RlcmVnaXN0ZXIoZmJpKTsKIAludWM5MDBmYl91bm1hcF92aWRlb19tZW1vcnkoZmJpbmZvKTsKIAogCWlvdW5tYXAoZmJpLT5pbyk7CkBAIC03MjMsNyArNzI1LDcgQEAKIAlzdHJ1Y3QgZmJfaW5mbwkgICAqZmJpbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgbnVjOTAwZmJfaW5mbyAqaW5mbyA9IGZiaW5mby0+cGFyOwogCi0JbnVjOTAwZmJfc3RvcF9sY2QoKTsKKwludWM5MDBmYl9zdG9wX2xjZChmYmluZm8pOwogCW1zbGVlcCgxKTsKIAljbGtfZGlzYWJsZShpbmZvLT5jbGspOwogCXJldHVybiAwOwpAQCAtNzQwLDcgKzc0Miw3IEBACiAJbXNsZWVwKDEpOwogCiAJbnVjOTAwZmJfaW5pdF9yZWdpc3RlcnMoZmJpbmZvKTsKLQludWM5MDBmYl9hY3RpdmF0ZV92YXIoYmZpbmZvKTsKKwludWM5MDBmYl9hY3RpdmF0ZV92YXIoZmJpbmZvKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYwppbmRleCBlZmUxMGZmLi4wODFkYzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYworKysgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYwpAQCAtMTA1Nyw3ICsxMDU3LDcgQEAKIAogCWlmIChtZXNnLmV2ZW50ID09IFBNX0VWRU5UX1BSRVRIQVcpCiAJCW1lc2cuZXZlbnQgPSBQTV9FVkVOVF9GUkVFWkU7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXBhci0+cG1fc3RhdGUgPSBtZXNnLmV2ZW50OwogCiAJaWYgKG1lc2cuZXZlbnQgJiBQTV9FVkVOVF9TTEVFUCkgewpAQCAtMTA3MCw3ICsxMDcwLDcgQEAKIAl9CiAJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBtZXNnOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNzksNyArMTA3OSw3IEBACiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgbnZpZGlhX3BhciAqcGFyID0gaW5mby0+cGFyOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApOwogCiAJaWYgKHBhci0+cG1fc3RhdGUgIT0gUE1fRVZFTlRfRlJFRVpFKSB7CkBAIC0xMDk3LDcgKzEwOTcsNyBAQAogCW52aWRpYWZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGluZm8pOwogCiBmYWlsOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHMzZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHMzZmIuYwppbmRleCA5YzAxNDRlLi42NTU2MGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wczNmYi5jCkBAIC01MTMsOSArNTEzLDkgQEAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcHMzZmIuZl9jb3VudCkpIHsKIAkJaWYgKGF0b21pY19yZWFkKCZwczNmYi5leHRfZmxpcCkpIHsKIAkJCWF0b21pY19zZXQoJnBzM2ZiLmV4dF9mbGlwLCAwKTsKLQkJCWlmICghdHJ5X2FjcXVpcmVfY29uc29sZV9zZW0oKSkgeworCQkJaWYgKGNvbnNvbGVfdHJ5bG9jaygpKSB7CiAJCQkJcHMzZmJfc3luYyhpbmZvLCAwKTsJLyogc2luZ2xlIGJ1ZmZlciAqLwotCQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCQljb25zb2xlX3VubG9jaygpOwogCQkJfQogCQl9CiAJfQpAQCAtODMwLDE0ICs4MzAsMTQgQEAKIAkJCWlmICh2bW9kZSkgewogCQkJCXZhciA9IGluZm8tPnZhcjsKIAkJCQlmYl92aWRlb21vZGVfdG9fdmFyKCZ2YXIsIHZtb2RlKTsKLQkJCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQkJY29uc29sZV9sb2NrKCk7CiAJCQkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX01JU0NfVVNFUkVWRU5UOwogCQkJCS8qIEZvcmNlLCBpbiBjYXNlIG9ubHkgc3BlY2lhbCBiaXRzIGNoYW5nZWQgKi8KIAkJCQl2YXIuYWN0aXZhdGUgfD0gRkJfQUNUSVZBVEVfRk9SQ0U7CiAJCQkJcGFyLT5uZXdfbW9kZV9pZCA9IHZhbDsKIAkJCQlyZXR2YWwgPSBmYl9zZXRfdmFyKGluZm8sICZ2YXIpOwogCQkJCWluZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19VU0VSRVZFTlQ7Ci0JCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCQl9CiAJCQlicmVhazsKIAkJfQpAQCAtODgxLDkgKzg4MSw5IEBACiAJCQlicmVhazsKIAogCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIlBTM0ZCX0lPQ1RMX0ZTRUw6JWRcbiIsIHZhbCk7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCXJldHZhbCA9IHBzM2ZiX3N5bmMoaW5mbywgdmFsKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC05MDMsOSArOTAzLDkgQEAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKHBzM2ZiLmlzX2tpY2tlZCkgewogCQkJcHMzZmIuaXNfa2lja2VkID0gMDsKLQkJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfbG9jaygpOwogCQkJcHMzZmJfc3luYyhpbmZvLCAwKTsJLyogc2luZ2xlIGJ1ZmZlciAqLwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJfQogCQlzY2hlZHVsZSgpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhMTY4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHhhMTY4ZmIuYwppbmRleCBjZWE2NDAzLi4zNWY2MWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9weGExNjhmYi5jCkBAIC03MDEsMTYgKzcwMSwxMiBAQAogCSAqLwogCXB4YTE2OGZiX2luaXRfbW9kZShpbmZvLCBtaSk7CiAKLQlyZXQgPSBweGExNjhmYl9jaGVja192YXIoJmluZm8tPnZhciwgaW5mbyk7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsZWRfZnJlZV9mYm1lbTsKLQogCS8qCiAJICogRmlsbCBpbiBzYW5lIGRlZmF1bHRzLgogCSAqLwogCXJldCA9IHB4YTE2OGZiX2NoZWNrX3ZhcigmaW5mby0+dmFyLCBpbmZvKTsKIAlpZiAocmV0KQotCQlnb3RvIGZhaWxlZDsKKwkJZ290byBmYWlsZWRfZnJlZV9mYm1lbTsKIAogCS8qCiAJICogZW5hYmxlIGNvbnRyb2xsZXIgY2xvY2sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhM3h4LWdjdS5jIGIvZHJpdmVycy92aWRlby9weGEzeHgtZ2N1LmMKaW5kZXggYjgxMTY4ZC4uY2Y0YmViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9weGEzeHgtZ2N1LmMKKysrIGIvZHJpdmVycy92aWRlby9weGEzeHgtZ2N1LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogIHB4YTN4eC1nYy5jIC0gTGludXgga2VybmVsIG1vZHVsZSBmb3IgUFhBM3h4IGdyYXBoaWNzIGNvbnRyb2xsZXJzCisgKiAgcHhhM3h4LWdjdS5jIC0gTGludXgga2VybmVsIG1vZHVsZSBmb3IgUFhBM3h4IGdyYXBoaWNzIGNvbnRyb2xsZXJzCiAgKgogICogIFRoaXMgZHJpdmVyIG5lZWRzIGEgRGlyZWN0RkIgY291bnRlcnBhcnQgaW4gdXNlciBzcGFjZSwgY29tbXVuaWNhdGlvbgogICogIGlzIGhhbmRsZWQgdmlhIG1tYXAoKWVkIG1lbW9yeSBhcmVhcyBhbmQgYW4gaW9jdGwuCkBAIC00MjEsNyArNDIxLDcgQEAKIAkJYnVmZmVyLT5uZXh0ID0gcHJpdi0+ZnJlZTsKIAkJcHJpdi0+ZnJlZSA9IGJ1ZmZlcjsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAJYnVmZmVyLT5sZW5ndGggPSB3b3JkczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczNmYi5jIGIvZHJpdmVycy92aWRlby9zM2ZiLmMKaW5kZXggZGNlOGM5Ny4uNzU3MzhhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zM2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zM2ZiLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdmdhLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4gLyogV2h5IHNob3VsZCBmYiBkcml2ZXIgY2FsbCBjb25zb2xlIGZ1bmN0aW9ucz8gYmVjYXVzZSBhY3F1aXJlX2NvbnNvbGVfc2VtKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+IC8qIFdoeSBzaG91bGQgZmIgZHJpdmVyIGNhbGwgY29uc29sZSBmdW5jdGlvbnM/IGJlY2F1c2UgY29uc29sZV9sb2NrKCkgKi8KICNpbmNsdWRlIDx2aWRlby92Z2EuaD4KIAogI2lmZGVmIENPTkZJR19NVFJSCkBAIC0xMTEzLDEyICsxMTEzLDEyIEBACiAKIAlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsICJzdXNwZW5kXG4iKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAltdXRleF9sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKIAogCWlmICgoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKSB8fCAocGFyLT5yZWZfY291bnQgPT0gMCkpIHsKIAkJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTExMjksNyArMTEyOSw3IEBACiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHBjaV9jaG9vc2Vfc3RhdGUoZGV2LCBzdGF0ZSkpOwogCiAJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE0NSwxMiArMTE0NSwxMiBAQAogCiAJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAicmVzdW1lXG4iKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAltdXRleF9sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKIAogCWlmIChwYXItPnJlZl9jb3VudCA9PSAwKSB7CiAJCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMTU5LDcgKzExNTksNyBAQAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CiAJaWYgKGVycikgewogCQltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWRldl9lcnIoaW5mby0+ZGV2aWNlLCAiZXJyb3IgJWQgZW5hYmxpbmcgZGV2aWNlIGZvciByZXN1bWVcbiIsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTE2OSw3ICsxMTY5LDcgQEAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAwKTsKIAogCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKaW5kZXggODQyZDE1Ny4uNDg3OTExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKQEAgLTIzNzMsNyArMjM3Myw3IEBACiAJaWYgKG1lc2cuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKIAogCWlmIChpbmZvLT5mYm9wcy0+ZmJfc3luYykKQEAgLTIzODUsNyArMjM4NSw3IEBACiAJcGNpX3NhdmVfc3RhdGUoZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIG1lc2cpKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjQwOSw3ICsyNDA5LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKQEAgLTI0MjMsNyArMjQyMyw3IEBACiAJc2F2YWdlZmJfc2V0X3BhcihpbmZvKTsKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAwKTsKIAlzYXZhZ2VmYl9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCBpbmZvKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jCmluZGV4IDc0ZDlmNTQuLjJiOWU1NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2hkbWkuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmMKQEAgLTExNTEsNyArMTE1MSw3IEBACiAKIAkJY2ggPSBpbmZvLT5wYXI7CiAKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAogCQkvKiBIRE1JIHBsdWcgaW4gKi8KIAkJaWYgKCFzaF9oZG1pX211c3RfcmVjb25maWd1cmUoaGRtaSkgJiYKQEAgLTExNzEsNyArMTE3MSw3IEBACiAJCQlmYl9zZXRfc3VzcGVuZChpbmZvLCAwKTsKIAkJfQogCi0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAl9IGVsc2UgewogCQlyZXQgPSAwOwogCQlpZiAoIWhkbWktPmluZm8pCkBAIC0xMTgxLDEyICsxMTgxLDEyIEBACiAJCWZiX2Rlc3Ryb3lfbW9kZWRiKGhkbWktPm1vbnNwZWMubW9kZWRiKTsKIAkJaGRtaS0+bW9uc3BlYy5tb2RlZGIgPSBOVUxMOwogCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAKIAkJLyogSERNSSBkaXNjb25uZWN0ICovCiAJCWZiX3NldF9zdXNwZW5kKGhkbWktPmluZm8sIDEpOwogCi0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcG1fcnVudGltZV9wdXQoaGRtaS0+ZGV2KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggYmQ0ODQwYS4uYmYxMmU1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTkxMiw5ICs5MTIsOSBAQAogCiAJLyogTm90aGluZyB0byByZWNvbmZpZ3VyZSwgd2hlbiBjYWxsZWQgZnJvbSBmYmNvbiAqLwogCWlmICh1c2VyKSB7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCXNoX21vYmlsZV9mYl9yZWNvbmZpZyhpbmZvKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCX0KIAogCW11dGV4X3VubG9jaygmY2gtPm9wZW5fbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYyBiL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jCmluZGV4IGI3ZGMxODAuLmJjYjQ0YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jCkBAIC0yMDEwLDkgKzIwMTAsOSBAQAogCiAJLyogdGVsbCBjb25zb2xlL2ZiIGRyaXZlciB3ZSBhcmUgc3VzcGVuZGluZyAqLwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKGZiaSwgMSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAkvKiBiYWNrdXAgY29waWVzIGluIGNhc2UgY2hpcCBpcyBwb3dlcmVkIGRvd24gb3ZlciBzdXNwZW5kICovCiAKQEAgLTIwNjksOSArMjA2OSw5IEBACiAJCW1lbWNweV90b2lvKHBhci0+Y3Vyc29yLmtfYWRkciwgcGFyLT5zdG9yZV9jdXJzb3IsCiAJCQkgICAgcGFyLT5jdXJzb3Iuc2l6ZSk7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQoZmJpLCAwKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXZmcmVlKHBhci0+c3RvcmVfZmIpOwogCXZmcmVlKHBhci0+c3RvcmVfY3Vyc29yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCmluZGV4IDY5MTNmZTEuLmRmZWY4OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby90bWlvZmIuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLS8qIFdoeSBzaG91bGQgZmIgZHJpdmVyIGNhbGwgY29uc29sZSBmdW5jdGlvbnM/IGJlY2F1c2UgYWNxdWlyZV9jb25zb2xlX3NlbSgpICovCisvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGNvbnNvbGVfbG9jaygpICovCiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KQEAgLTk0NCw3ICs5NDQsNyBAQAogCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKIApAQCAtOTY1LDcgKzk2NSw3IEBACiAJaWYgKGNlbGwtPnN1c3BlbmQpCiAJCXJldHZhbCA9IGNlbGwtPnN1c3BlbmQoZGV2KTsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTk3Niw3ICs5NzYsNyBAQAogCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlpZiAoY2VsbC0+cmVzdW1lKSB7CiAJCXJldHZhbCA9IGNlbGwtPnJlc3VtZShkZXYpOwpAQCAtOTkyLDcgKzk5Miw3IEBACiAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAwKTsKIG91dDoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCmluZGV4IDI4OWVkZDUuLjRlNjYzNDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKQEAgLTE2NzQsMTcgKzE2NzQsMTcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgdmlhZmJfc3VzcGVuZCh2b2lkICp1bnVzZWQpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKHZpYWZiaW5mbywgMSk7CiAJdmlhZmJfc3luYyh2aWFmYmluZm8pOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlhZmJfcmVzdW1lKHZvaWQgKnVudXNlZCkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKHZpYXBhcmluZm8tPnNoYXJlZC0+dmRldi0+ZW5naW5lX21taW8pCiAJCXZpYWZiX3Jlc2V0X2VuZ2luZSh2aWFwYXJpbmZvKTsKIAl2aWFmYl9zZXRfcGFyKHZpYWZiaW5mbyk7CkBAIC0xNjkyLDcgKzE2OTIsNyBAQAogCQl2aWFmYl9zZXRfcGFyKHZpYWZiaW5mbzEpOwogCWZiX3NldF9zdXNwZW5kKHZpYWZiaW5mbywgMCk7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92dDg2MjNmYi5jIGIvZHJpdmVycy92aWRlby92dDg2MjNmYi5jCmluZGV4IDg1ZDc2ZWMuLmEyOTY1YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdnQ4NjIzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3Z0ODYyM2ZiLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdmdhLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4gLyogV2h5IHNob3VsZCBmYiBkcml2ZXIgY2FsbCBjb25zb2xlIGZ1bmN0aW9ucz8gYmVjYXVzZSBhY3F1aXJlX2NvbnNvbGVfc2VtKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+IC8qIFdoeSBzaG91bGQgZmIgZHJpdmVyIGNhbGwgY29uc29sZSBmdW5jdGlvbnM/IGJlY2F1c2UgY29uc29sZV9sb2NrKCkgKi8KICNpbmNsdWRlIDx2aWRlby92Z2EuaD4KIAogI2lmZGVmIENPTkZJR19NVFJSCkBAIC04MTksMTIgKzgxOSwxMiBAQAogCiAJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAic3VzcGVuZFxuIik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CiAKIAlpZiAoKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkgfHwgKHBhci0+cmVmX2NvdW50ID09IDApKSB7CiAJCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC04MzUsNyArODM1LDcgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CiAKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04NTAsNyArODUwLDcgQEAKIAogCWRldl9pbmZvKGluZm8tPmRldmljZSwgInJlc3VtZVxuIik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CiAKIAlpZiAocGFyLT5yZWZfY291bnQgPT0gMCkKQEAgLTg2OSw3ICs4NjksNyBAQAogCiBmYWlsOgogCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYyBiL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYwppbmRleCAzZTY5MzRkLi5hMjAyMThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMKKysrIGIvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCkBAIC00OTEsMTIgKzQ5MSwxMiBAQAogCWlmIChjb25zb2xlX3NldF9vbl9jbWRsaW5lKQogCQlyZXR1cm47CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZm9yX2VhY2hfY29uc29sZShjKSB7CiAJCWlmICghc3RyY21wKGMtPm5hbWUsICJ0dHkiKSAmJiBjLT5pbmRleCA9PSAwKQogCQkJYnJlYWs7CiAJfQotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWlmIChjKSB7CiAJCXVucmVnaXN0ZXJfY29uc29sZShjKTsKIAkJYy0+ZmxhZ3MgfD0gQ09OX0NPTlNERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jCmluZGV4IDNhN2U5ZmYuLjM4ZTk2YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jCkBAIC01OTMsMTkgKzU5MywxNyBAQAogCiAJLyogZ2V0IGludGVyZmFjZSAmIGZ1bmN0aW9uYWwgY2xvY2sgb2JqZWN0cyAqLwogCWhkcV9kYXRhLT5oZHFfaWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWNrIik7Ci0JaGRxX2RhdGEtPmhkcV9mY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKKwlpZiAoSVNfRVJSKGhkcV9kYXRhLT5oZHFfaWNrKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJDYW4ndCBnZXQgSERRIGljayBjbG9jayBvYmplY3RcbiIpOworCQlyZXQgPSBQVFJfRVJSKGhkcV9kYXRhLT5oZHFfaWNrKTsKKwkJZ290byBlcnJfaWNrOworCX0KIAotCWlmIChJU19FUlIoaGRxX2RhdGEtPmhkcV9pY2spIHx8IElTX0VSUihoZHFfZGF0YS0+aGRxX2ZjaykpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IEhEUSBjbG9jayBvYmplY3RzXG4iKTsKLQkJaWYgKElTX0VSUihoZHFfZGF0YS0+aGRxX2ljaykpIHsKLQkJCXJldCA9IFBUUl9FUlIoaGRxX2RhdGEtPmhkcV9pY2spOwotCQkJZ290byBlcnJfY2xrOwotCQl9Ci0JCWlmIChJU19FUlIoaGRxX2RhdGEtPmhkcV9mY2spKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKGhkcV9kYXRhLT5oZHFfZmNrKTsKLQkJCWNsa19wdXQoaGRxX2RhdGEtPmhkcV9pY2spOwotCQkJZ290byBlcnJfY2xrOwotCQl9CisJaGRxX2RhdGEtPmhkcV9mY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKKwlpZiAoSVNfRVJSKGhkcV9kYXRhLT5oZHFfZmNrKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJDYW4ndCBnZXQgSERRIGZjayBjbG9jayBvYmplY3RcbiIpOworCQlyZXQgPSBQVFJfRVJSKGhkcV9kYXRhLT5oZHFfZmNrKTsKKwkJZ290byBlcnJfZmNrOwogCX0KIAogCWhkcV9kYXRhLT5oZHFfdXNlY291bnQgPSAwOwpAQCAtNjY1LDEwICs2NjMsMTIgQEAKIAljbGtfZGlzYWJsZShoZHFfZGF0YS0+aGRxX2ljayk7CiAKIGVycl9pbnRmY2xrOgotCWNsa19wdXQoaGRxX2RhdGEtPmhkcV9pY2spOwogCWNsa19wdXQoaGRxX2RhdGEtPmhkcV9mY2spOwogCi1lcnJfY2xrOgorZXJyX2ZjazoKKwljbGtfcHV0KGhkcV9kYXRhLT5oZHFfaWNrKTsKKworZXJyX2ljazoKIAlpb3VubWFwKGhkcV9kYXRhLT5oZHFfYmFzZSk7CiAKIGVycl9pb3JlbWFwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IDJlMjQwMGUuLjMxNjQ5YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTg2MiwxMiArODYyLDEyIEBACiAKICMgTTY4SyBBcmNoaXRlY3R1cmUKIAotY29uZmlnIE01NDh4X1dBVENIRE9HCi0JdHJpc3RhdGUgIk1DRjU0OHggd2F0Y2hkb2cgc3VwcG9ydCIKK2NvbmZpZyBNNTR4eF9XQVRDSERPRworCXRyaXN0YXRlICJNQ0Y1NHh4IHdhdGNoZG9nIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBNNTQ4eAogCWhlbHAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG01NDh4X3dkdC4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtNTR4eF93ZHQuCiAKICMgTUlQUyBBcmNoaXRlY3R1cmUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZSBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggZGQ3NzY2NS4uMjBlNDRjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCkBAIC0xMDYsNyArMTA2LDcgQEAKICMgTTMyUiBBcmNoaXRlY3R1cmUKIAogIyBNNjhLIEFyY2hpdGVjdHVyZQotb2JqLSQoQ09ORklHX001NDh4X1dBVENIRE9HKSArPSBtNTQ4eF93ZHQubworb2JqLSQoQ09ORklHX001NHh4X1dBVENIRE9HKSArPSBtNTR4eF93ZHQubwogCiAjIE1JUFMgQXJjaGl0ZWN0dXJlCiBvYmotJChDT05GSUdfQVRINzlfV0RUKSArPSBhdGg3OV93ZHQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tNTQ4eF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbTU0eHhfd2R0LmMKc2ltaWxhcml0eSBpbmRleCA4MCUKcmVuYW1lIGZyb20gZHJpdmVycy93YXRjaGRvZy9tNTQ4eF93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9tNTR4eF93ZHQuYwppbmRleCBjYWJiY2ZlLi40ZDQzMjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL201NDh4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbTU0eHhfd2R0LmMKQEAgLTEsNyArMSw3IEBACiAvKgotICogZHJpdmVycy93YXRjaGRvZy9tNTQ4eF93ZHQuYworICogZHJpdmVycy93YXRjaGRvZy9tNTR4eF93ZHQuYwogICoKLSAqIFdhdGNoZG9nIGRyaXZlciBmb3IgQ29sZEZpcmUgTUNGNTQ4eCBwcm9jZXNzb3JzCisgKiBXYXRjaGRvZyBkcml2ZXIgZm9yIENvbGRGaXJlIE1DRjU0N3ggJiBNQ0Y1NDh4IHByb2Nlc3NvcnMKICAqIENvcHlyaWdodCAyMDEwIChjKSBQaGlsaXBwZSBEZSBNdXl0ZXIgPHBoZG1AbWFjcWVsLmJlPgogICoKICAqIEFkYXB0ZWQgZnJvbSB0aGUgSVhQNHh4IHdhdGNoZG9nIGRyaXZlciwgd2hpY2ggY2FycmllcyB0aGVzZSBub3RpY2VzOgpAQCAtMjksOCArMjksOCBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9jb2xkZmlyZS5oPgotI2luY2x1ZGUgPGFzbS9tNTQ4eHNpbS5oPgotI2luY2x1ZGUgPGFzbS9tNTQ4eGdwdC5oPgorI2luY2x1ZGUgPGFzbS9tNTR4eHNpbS5oPgorI2luY2x1ZGUgPGFzbS9tNTR4eGdwdC5oPgogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IGhlYXJ0YmVhdCA9IDMwOwkvKiAoc2VjcykgRGVmYXVsdCBpcyAwLjUgbWludXRlICovCkBAIC03Niw3ICs3Niw3IEBACiAJX19yYXdfd3JpdGVsKGdtczAsIE1DRl9NQkFSICsgTUNGX0dQVF9HTVMwKTsKIH0KIAotc3RhdGljIGludCBtNTQ4eF93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgbTU0eHhfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtODYsNyArODYsNyBAQAogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KIAotc3RhdGljIHNzaXplX3QgbTU0OHhfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpkYXRhLAorc3RhdGljIHNzaXplX3QgbTU0eHhfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpkYXRhLAogCQkJCQkJc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQogewogCWlmIChsZW4pIHsKQEAgLTExMiwxMCArMTEyLDEwIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJLm9wdGlvbnMJPSBXRElPRl9NQUdJQ0NMT1NFIHwgV0RJT0ZfU0VUVElNRU9VVCB8CiAJCQkJV0RJT0ZfS0VFUEFMSVZFUElORywKLQkuaWRlbnRpdHkJPSAiQ29sZGZpcmUgTTU0OHggV2F0Y2hkb2ciLAorCS5pZGVudGl0eQk9ICJDb2xkZmlyZSBNNTR4eCBXYXRjaGRvZyIsCiB9OwogCi1zdGF0aWMgbG9uZyBtNTQ4eF93ZHRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCitzdGF0aWMgbG9uZyBtNTR4eF93ZHRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJCQkJIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWludCByZXQgPSAtRU5PVFRZOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtNTQ4eF93ZHRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgbTU0eHhfd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJaWYgKHRlc3RfYml0KFdEVF9PS19UT19DTE9TRSwgJndkdF9zdGF0dXMpKQogCQl3ZHRfZGlzYWJsZSgpOwpAQCAtMTc3LDQ1ICsxNzcsNDUgQEAKIH0KIAogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtNTQ4eF93ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG01NHh4X3dkdF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKLQkud3JpdGUJCT0gbTU0OHhfd2R0X3dyaXRlLAotCS51bmxvY2tlZF9pb2N0bAk9IG01NDh4X3dkdF9pb2N0bCwKLQkub3BlbgkJPSBtNTQ4eF93ZHRfb3BlbiwKLQkucmVsZWFzZQk9IG01NDh4X3dkdF9yZWxlYXNlLAorCS53cml0ZQkJPSBtNTR4eF93ZHRfd3JpdGUsCisJLnVubG9ja2VkX2lvY3RsCT0gbTU0eHhfd2R0X2lvY3RsLAorCS5vcGVuCQk9IG01NHh4X3dkdF9vcGVuLAorCS5yZWxlYXNlCT0gbTU0eHhfd2R0X3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbTU0OHhfd2R0X21pc2NkZXYgPSB7CitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbTU0eHhfd2R0X21pc2NkZXYgPSB7CiAJLm1pbm9yCQk9IFdBVENIRE9HX01JTk9SLAogCS5uYW1lCQk9ICJ3YXRjaGRvZyIsCi0JLmZvcHMJCT0gJm01NDh4X3dkdF9mb3BzLAorCS5mb3BzCQk9ICZtNTR4eF93ZHRfZm9wcywKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IG01NDh4X3dkdF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtNTR4eF93ZHRfaW5pdCh2b2lkKQogewogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKE1DRl9NQkFSICsgTUNGX0dQVF9HQ0lSMCwgNCwKLQkJCQkJCSJDb2xkZmlyZSBNNTQ4eCBXYXRjaGRvZyIpKSB7CisJCQkJCQkiQ29sZGZpcmUgTTU0eHggV2F0Y2hkb2ciKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJIkNvbGRmaXJlIE01NDh4IFdhdGNoZG9nIDogSS9PIHJlZ2lvbiBidXN5XG4iKTsKKwkJCQkiQ29sZGZpcmUgTTU0eHggV2F0Y2hkb2cgOiBJL08gcmVnaW9uIGJ1c3lcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlwcmludGsoS0VSTl9JTkZPICJDb2xkRmlyZSB3YXRjaGRvZyBkcml2ZXIgaXMgbG9hZGVkLlxuIik7CiAKLQlyZXR1cm4gbWlzY19yZWdpc3RlcigmbTU0OHhfd2R0X21pc2NkZXYpOworCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZtNTR4eF93ZHRfbWlzY2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBtNTQ4eF93ZHRfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IG01NHh4X3dkdF9leGl0KHZvaWQpCiB7Ci0JbWlzY19kZXJlZ2lzdGVyKCZtNTQ4eF93ZHRfbWlzY2Rldik7CisJbWlzY19kZXJlZ2lzdGVyKCZtNTR4eF93ZHRfbWlzY2Rldik7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKE1DRl9NQkFSICsgTUNGX0dQVF9HQ0lSMCwgNCk7CiB9CiAKLW1vZHVsZV9pbml0KG01NDh4X3dkdF9pbml0KTsKLW1vZHVsZV9leGl0KG01NDh4X3dkdF9leGl0KTsKK21vZHVsZV9pbml0KG01NHh4X3dkdF9pbml0KTsKK21vZHVsZV9leGl0KG01NHh4X3dkdF9leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiUGhpbGlwcGUgRGUgTXV5dGVyIDxwaGRtQG1hY3FlbC5iZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQ29sZGZpcmUgTTU0OHggV2F0Y2hkb2ciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29sZGZpcmUgTTU0eHggV2F0Y2hkb2ciKTsKIAogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMgKGRlZmF1bHQgMzBzKSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vbWFuYWdlLmMgYi9kcml2ZXJzL3hlbi9tYW5hZ2UuYwppbmRleCBkYjhjNGM0Li4yNDE3NzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9tYW5hZ2UuYworKysgYi9kcml2ZXJzL3hlbi9tYW5hZ2UuYwpAQCAtMzcsMTEgKzM3LDE5IEBACiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IHhlbl9odm1fc3VzcGVuZCh2b2lkICpkYXRhKQogeworCWludCBlcnI7CiAJc3RydWN0IHNjaGVkX3NodXRkb3duIHIgPSB7IC5yZWFzb24gPSBTSFVURE9XTl9zdXNwZW5kIH07CiAJaW50ICpjYW5jZWxsZWQgPSBkYXRhOwogCiAJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCisJZXJyID0gc3lzZGV2X3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAieGVuX2h2bV9zdXNwZW5kOiBzeXNkZXZfc3VzcGVuZCBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAkqY2FuY2VsbGVkID0gSFlQRVJWSVNPUl9zY2hlZF9vcChTQ0hFRE9QX3NodXRkb3duLCAmcik7CiAKIAl4ZW5faHZtX3Bvc3Rfc3VzcGVuZCgqY2FuY2VsbGVkKTsKQEAgLTUzLDYgKzYxLDggQEAKIAkJeGVuX3RpbWVyX3Jlc3VtZSgpOwogCX0KIAorCXN5c2Rldl9yZXN1bWUoKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9hZnMvd3JpdGUuYyBiL2ZzL2Fmcy93cml0ZS5jCmluZGV4IDE1NjkwYmIuLjc4OWIzYWYgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy93cml0ZS5jCisrKyBiL2ZzL2Fmcy93cml0ZS5jCkBAIC0xNDAsNiArMTQwLDcgQEAKIAljYW5kaWRhdGUtPmZpcnN0ID0gY2FuZGlkYXRlLT5sYXN0ID0gaW5kZXg7CiAJY2FuZGlkYXRlLT5vZmZzZXRfZmlyc3QgPSBmcm9tOwogCWNhbmRpZGF0ZS0+dG9fbGFzdCA9IHRvOworCUlOSVRfTElTVF9IRUFEKCZjYW5kaWRhdGUtPmxpbmspOwogCWNhbmRpZGF0ZS0+dXNhZ2UgPSAxOwogCWNhbmRpZGF0ZS0+c3RhdGUgPSBBRlNfV0JBQ0tfUEVORElORzsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYW5kaWRhdGUtPndhaXRxKTsKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggZmM1NTdhMy4uMjY4NjljZCAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKKysrIGIvZnMvYWlvLmMKQEAgLTIzOSwxNSArMjM5LDIzIEBACiAJY2FsbF9yY3UoJmN0eC0+cmN1X2hlYWQsIGN0eF9yY3VfZnJlZSk7CiB9CiAKLSNkZWZpbmUgZ2V0X2lvY3R4KGtpb2N0eCkgZG8gewkJCQkJCVwKLQlCVUdfT04oYXRvbWljX3JlYWQoJihraW9jdHgpLT51c2VycykgPD0gMCk7CQkJXAotCWF0b21pY19pbmMoJihraW9jdHgpLT51c2Vycyk7CQkJCQlcCi19IHdoaWxlICgwKQotI2RlZmluZSBwdXRfaW9jdHgoa2lvY3R4KSBkbyB7CQkJCQkJXAotCUJVR19PTihhdG9taWNfcmVhZCgmKGtpb2N0eCktPnVzZXJzKSA8PSAwKTsJCQlcCi0JaWYgKHVubGlrZWx5KGF0b21pY19kZWNfYW5kX3Rlc3QoJihraW9jdHgpLT51c2VycykpKSAJCVwKLQkJX19wdXRfaW9jdHgoa2lvY3R4KTsJCQkJCVwKLX0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2lvY3R4KHN0cnVjdCBraW9jdHggKmtpb2N0eCkKK3sKKwlCVUdfT04oYXRvbWljX3JlYWQoJmtpb2N0eC0+dXNlcnMpIDw9IDApOworCWF0b21pY19pbmMoJmtpb2N0eC0+dXNlcnMpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0cnlfZ2V0X2lvY3R4KHN0cnVjdCBraW9jdHggKmtpb2N0eCkKK3sKKwlyZXR1cm4gYXRvbWljX2luY19ub3RfemVybygma2lvY3R4LT51c2Vycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaW9jdHgoc3RydWN0IGtpb2N0eCAqa2lvY3R4KQoreworCUJVR19PTihhdG9taWNfcmVhZCgma2lvY3R4LT51c2VycykgPD0gMCk7CisJaWYgKHVubGlrZWx5KGF0b21pY19kZWNfYW5kX3Rlc3QoJmtpb2N0eC0+dXNlcnMpKSkKKwkJX19wdXRfaW9jdHgoa2lvY3R4KTsKK30KIAogLyogaW9jdHhfYWxsb2MKICAqCUFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYW4gaW9jdHguICBSZXR1cm5zIGFuIEVSUl9QVFIgaWYgaXQgZmFpbGVkLgpAQCAtNjAxLDggKzYwOSwxMyBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdHgsIG4sICZtbS0+aW9jdHhfbGlzdCwgbGlzdCkgewotCQlpZiAoY3R4LT51c2VyX2lkID09IGN0eF9pZCAmJiAhY3R4LT5kZWFkKSB7Ci0JCQlnZXRfaW9jdHgoY3R4KTsKKwkJLyoKKwkJICogUkNVIHByb3RlY3RzIHVzIGFnYWluc3QgYWNjZXNzaW5nIGZyZWVkIG1lbW9yeSBidXQKKwkJICogd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBnZXQgYSByZWZlcmVuY2Ugd2hlbiB0aGUKKwkJICogcmVmZXJlbmNlIGNvdW50IGFscmVhZHkgZHJvcHBlZCB0byAwIChjdHgtPmRlYWQgdGVzdAorCQkgKiBpcyB1bnJlbGlhYmxlIGJlY2F1c2Ugb2YgcmFjZXMpLgorCQkgKi8KKwkJaWYgKGN0eC0+dXNlcl9pZCA9PSBjdHhfaWQgJiYgIWN0eC0+ZGVhZCAmJiB0cnlfZ2V0X2lvY3R4KGN0eCkpewogCQkJcmV0ID0gY3R4OwogCQkJYnJlYWs7CiAJCX0KQEAgLTE2MjksNiArMTY0MiwyMyBAQAogCQlnb3RvIG91dF9wdXRfcmVxOwogCiAJc3Bpbl9sb2NrX2lycSgmY3R4LT5jdHhfbG9jayk7CisJLyoKKwkgKiBXZSBjb3VsZCBoYXZlIHJhY2VkIHdpdGggaW9fZGVzdHJveSgpIGFuZCBhcmUgY3VycmVudGx5IGhvbGRpbmcgYQorCSAqIHJlZmVyZW5jZSB0byBjdHggd2hpY2ggc2hvdWxkIGJlIGRlc3Ryb3llZC4gV2UgY2Fubm90IHN1Ym1pdCBJTworCSAqIHNpbmNlIGN0eCBnZXRzIGZyZWVkIGFzIHNvb24gYXMgaW9fc3VibWl0KCkgcHV0cyBpdHMgcmVmZXJlbmNlLiAgVGhlCisJICogY2hlY2sgaGVyZSBpcyByZWxpYWJsZTogaW9fZGVzdHJveSgpIHNldHMgY3R4LT5kZWFkIGJlZm9yZSB3YWl0aW5nCisJICogZm9yIG91dHN0YW5kaW5nIElPIGFuZCB0aGUgYmFycmllciBiZXR3ZWVuIHRoZXNlIHR3byBpcyByZWFsaXplZCBieQorCSAqIHVubG9jayBvZiBtbS0+aW9jdHhfbG9jayBhbmQgbG9jayBvZiBjdHgtPmN0eF9sb2NrLiAgQW5hbG9nb3VzbHkgd2UKKwkgKiBpbmNyZW1lbnQgY3R4LT5yZXFzX2FjdGl2ZSBiZWZvcmUgY2hlY2tpbmcgZm9yIGN0eC0+ZGVhZCBhbmQgdGhlCisJICogYmFycmllciBpcyByZWFsaXplZCBieSB1bmxvY2sgYW5kIGxvY2sgb2YgY3R4LT5jdHhfbG9jay4gVGh1cyBpZiB3ZQorCSAqIGRvbid0IHNlZSBjdHgtPmRlYWQgc2V0IGhlcmUsIGlvX2Rlc3Ryb3koKSB3YWl0cyBmb3Igb3VyIElPIHRvCisJICogZmluaXNoLgorCSAqLworCWlmIChjdHgtPmRlYWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmN0eF9sb2NrKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfcHV0X3JlcTsKKwl9CiAJYWlvX3J1bl9pb2NiKHJlcSk7CiAJaWYgKCFsaXN0X2VtcHR5KCZjdHgtPnJ1bl9saXN0KSkgewogCQkvKiBkcmFpbiB0aGUgcnVuIGxpc3QgKi8KZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggMzMzYTdiYi4uODg5Mjg3MCAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTg3Myw2ICs4NzMsMTEgQEAKIAlyZXQgPSBhZGRfc3ltbGluayhiZGV2LT5iZF9wYXJ0LT5ob2xkZXJfZGlyLCAmZGlza190b19kZXYoZGlzayktPmtvYmopOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2RlbDsKKwkvKgorCSAqIGJkZXYgY291bGQgYmUgZGVsZXRlZCBiZW5lYXRoIHVzIHdoaWNoIHdvdWxkIGltcGxpY2l0bHkgZGVzdHJveQorCSAqIHRoZSBob2xkZXIgZGlyZWN0b3J5LiAgSG9sZCBvbiB0byBpdC4KKwkgKi8KKwlrb2JqZWN0X2dldChiZGV2LT5iZF9wYXJ0LT5ob2xkZXJfZGlyKTsKIAogCWxpc3RfYWRkKCZob2xkZXItPmxpc3QsICZiZGV2LT5iZF9ob2xkZXJfZGlza3MpOwogCWdvdG8gb3V0X3VubG9jazsKQEAgLTkwOSw2ICs5MTQsNyBAQAogCQlkZWxfc3ltbGluayhkaXNrLT5zbGF2ZV9kaXIsICZwYXJ0X3RvX2RldihiZGV2LT5iZF9wYXJ0KS0+a29iaik7CiAJCWRlbF9zeW1saW5rKGJkZXYtPmJkX3BhcnQtPmhvbGRlcl9kaXIsCiAJCQkgICAgJmRpc2tfdG9fZGV2KGRpc2spLT5rb2JqKTsKKwkJa29iamVjdF9wdXQoYmRldi0+YmRfcGFydC0+aG9sZGVyX2Rpcik7CiAJCWxpc3RfZGVsX2luaXQoJmhvbGRlci0+bGlzdCk7CiAJCWtmcmVlKGhvbGRlcik7CiAJfQpAQCAtOTIyLDE0ICs5MjgsMTUgQEAKICAqIGZsdXNoX2Rpc2sgLSBpbnZhbGlkYXRlcyBhbGwgYnVmZmVyLWNhY2hlIGVudHJpZXMgb24gYSBkaXNrCiAgKgogICogQGJkZXY6ICAgICAgc3RydWN0IGJsb2NrIGRldmljZSB0byBiZSBmbHVzaGVkCisgKiBAa2lsbF9kaXJ0eTogZmxhZyB0byBndWlkZSBoYW5kbGluZyBvZiBkaXJ0eSBpbm9kZXMKICAqCiAgKiBJbnZhbGlkYXRlcyBhbGwgYnVmZmVyLWNhY2hlIGVudHJpZXMgb24gYSBkaXNrLiBJdCBzaG91bGQgYmUgY2FsbGVkCiAgKiB3aGVuIGEgZGlzayBoYXMgYmVlbiBjaGFuZ2VkIC0tIGVpdGhlciBieSBhIG1lZGlhIGNoYW5nZSBvciBvbmxpbmUKICAqIHJlc2l6ZS4KICAqLwotc3RhdGljIHZvaWQgZmx1c2hfZGlzayhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQorc3RhdGljIHZvaWQgZmx1c2hfZGlzayhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBib29sIGtpbGxfZGlydHkpCiB7Ci0JaWYgKF9faW52YWxpZGF0ZV9kZXZpY2UoYmRldikpIHsKKwlpZiAoX19pbnZhbGlkYXRlX2RldmljZShiZGV2LCBraWxsX2RpcnR5KSkgewogCQljaGFyIG5hbWVbQkRFVk5BTUVfU0laRV0gPSAiIjsKIAogCQlpZiAoYmRldi0+YmRfZGlzaykKQEAgLTk2Niw3ICs5NzMsNyBAQAogCQkgICAgICAgIiVzOiBkZXRlY3RlZCBjYXBhY2l0eSBjaGFuZ2UgZnJvbSAlbGxkIHRvICVsbGRcbiIsCiAJCSAgICAgICBuYW1lLCBiZGV2X3NpemUsIGRpc2tfc2l6ZSk7CiAJCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwgZGlza19zaXplKTsKLQkJZmx1c2hfZGlzayhiZGV2KTsKKwkJZmx1c2hfZGlzayhiZGV2LCBmYWxzZSk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChjaGVja19kaXNrX3NpemVfY2hhbmdlKTsKQEAgLTEwMTksNyArMTAyNiw3IEBACiAJaWYgKCEoZXZlbnRzICYgRElTS19FVkVOVF9NRURJQV9DSEFOR0UpKQogCQlyZXR1cm4gMDsKIAotCWZsdXNoX2Rpc2soYmRldik7CisJZmx1c2hfZGlzayhiZGV2LCB0cnVlKTsKIAlpZiAoYmRvcHMtPnJldmFsaWRhdGVfZGlzaykKIAkJYmRvcHMtPnJldmFsaWRhdGVfZGlzayhiZGV2LT5iZF9kaXNrKTsKIAlyZXR1cm4gMTsKQEAgLTEyMTUsMTIgKzEyMjIsNiBAQAogCiAJcmVzID0gX19ibGtkZXZfZ2V0KGJkZXYsIG1vZGUsIDApOwogCi0JLyogX19ibGtkZXZfZ2V0KCkgbWF5IGFsdGVyIHJlYWQgb25seSBzdGF0dXMsIGNoZWNrIGl0IGFmdGVyd2FyZHMgKi8KLQlpZiAoIXJlcyAmJiAobW9kZSAmIEZNT0RFX1dSSVRFKSAmJiBiZGV2X3JlYWRfb25seShiZGV2KSkgewotCQlfX2Jsa2Rldl9wdXQoYmRldiwgbW9kZSwgMCk7Ci0JCXJlcyA9IC1FQUNDRVM7Ci0JfQotCiAJaWYgKHdob2xlKSB7CiAJCS8qIGZpbmlzaCBjbGFpbWluZyAqLwogCQltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7CkBAIC0xMjk4LDYgKzEyOTksMTEgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCisJaWYgKChtb2RlICYgRk1PREVfV1JJVEUpICYmIGJkZXZfcmVhZF9vbmx5KGJkZXYpKSB7CisJCWJsa2Rldl9wdXQoYmRldiwgbW9kZSk7CisJCXJldHVybiBFUlJfUFRSKC1FQUNDRVMpOworCX0KKwogCXJldHVybiBiZGV2OwogfQogRVhQT1JUX1NZTUJPTChibGtkZXZfZ2V0X2J5X3BhdGgpOwpAQCAtMTYwMSw3ICsxNjA3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wobG9va3VwX2JkZXYpOwogCi1pbnQgX19pbnZhbGlkYXRlX2RldmljZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoraW50IF9faW52YWxpZGF0ZV9kZXZpY2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYm9vbCBraWxsX2RpcnR5KQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBnZXRfc3VwZXIoYmRldik7CiAJaW50IHJlcyA9IDA7CkBAIC0xNjE0LDcgKzE2MjAsNyBAQAogCQkgKiBob2xkKS4KIAkJICovCiAJCXNocmlua19kY2FjaGVfc2Ioc2IpOwotCQlyZXMgPSBpbnZhbGlkYXRlX2lub2RlcyhzYik7CisJCXJlcyA9IGludmFsaWRhdGVfaW5vZGVzKHNiLCBraWxsX2RpcnR5KTsKIAkJZHJvcF9zdXBlcihzYik7CiAJfQogCWludmFsaWRhdGVfYmRldihiZGV2KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2FjbC5jIGIvZnMvYnRyZnMvYWNsLmMKaW5kZXggMTViNWNhMi4uOWM5NDkzNCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYWNsLmMKKysrIGIvZnMvYnRyZnMvYWNsLmMKQEAgLTM3LDYgKzM3LDkgQEAKIAljaGFyICp2YWx1ZSA9IE5VTEw7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCisJaWYgKCFJU19QT1NJWEFDTChpbm9kZSkpCisJCXJldHVybiBOVUxMOworCiAJYWNsID0gZ2V0X2NhY2hlZF9hY2woaW5vZGUsIHR5cGUpOwogCWlmIChhY2wgIT0gQUNMX05PVF9DQUNIRUQpCiAJCXJldHVybiBhY2w7CkBAIC04NCw2ICs4Nyw5IEBACiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCByZXQgPSAwOwogCisJaWYgKCFJU19QT1NJWEFDTChkZW50cnktPmRfaW5vZGUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlhY2wgPSBidHJmc19nZXRfYWNsKGRlbnRyeS0+ZF9pbm9kZSwgdHlwZSk7CiAKIAlpZiAoSVNfRVJSKGFjbCkpCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jb21wcmVzc2lvbi5jIGIvZnMvYnRyZnMvY29tcHJlc3Npb24uYwppbmRleCBmNzQ1Mjg3Li40ZDIxMTBlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9jb21wcmVzc2lvbi5jCisrKyBiL2ZzL2J0cmZzL2NvbXByZXNzaW9uLmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogCXU2NCBlbV9sZW47CiAJdTY0IGVtX3N0YXJ0OwogCXN0cnVjdCBleHRlbnRfbWFwICplbTsKLQlpbnQgcmV0OworCWludCByZXQgPSAtRU5PTUVNOwogCXUzMiAqc3VtczsKIAogCXRyZWUgPSAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWU7CkBAIC01NzcsNiArNTc3LDkgQEAKIAogCWNvbXByZXNzZWRfbGVuID0gZW0tPmJsb2NrX2xlbjsKIAljYiA9IGttYWxsb2MoY29tcHJlc3NlZF9iaW9fc2l6ZShyb290LCBjb21wcmVzc2VkX2xlbiksIEdGUF9OT0ZTKTsKKwlpZiAoIWNiKQorCQlnb3RvIG91dDsKKwogCWF0b21pY19zZXQoJmNiLT5wZW5kaW5nX2Jpb3MsIDApOwogCWNiLT5lcnJvcnMgPSAwOwogCWNiLT5pbm9kZSA9IGlub2RlOwpAQCAtNTk3LDEzICs2MDAsMTggQEAKIAogCW5yX3BhZ2VzID0gKGNvbXByZXNzZWRfbGVuICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgLwogCQkJCSBQQUdFX0NBQ0hFX1NJWkU7Ci0JY2ItPmNvbXByZXNzZWRfcGFnZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3BhZ2VzLAorCWNiLT5jb21wcmVzc2VkX3BhZ2VzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9wYWdlcywKIAkJCQkgICAgICAgR0ZQX05PRlMpOworCWlmICghY2ItPmNvbXByZXNzZWRfcGFnZXMpCisJCWdvdG8gZmFpbDE7CisKIAliZGV2ID0gQlRSRlNfSShpbm9kZSktPnJvb3QtPmZzX2luZm8tPmZzX2RldmljZXMtPmxhdGVzdF9iZGV2OwogCiAJZm9yIChwYWdlX2luZGV4ID0gMDsgcGFnZV9pbmRleCA8IG5yX3BhZ2VzOyBwYWdlX2luZGV4KyspIHsKIAkJY2ItPmNvbXByZXNzZWRfcGFnZXNbcGFnZV9pbmRleF0gPSBhbGxvY19wYWdlKEdGUF9OT0ZTIHwKIAkJCQkJCQkgICAgICBfX0dGUF9ISUdITUVNKTsKKwkJaWYgKCFjYi0+Y29tcHJlc3NlZF9wYWdlc1twYWdlX2luZGV4XSkKKwkJCWdvdG8gZmFpbDI7CiAJfQogCWNiLT5ucl9wYWdlcyA9IG5yX3BhZ2VzOwogCkBAIC02MTQsNiArNjIyLDggQEAKIAljYi0+bGVuID0gdW5jb21wcmVzc2VkX2xlbjsKIAogCWNvbXBfYmlvID0gY29tcHJlc3NlZF9iaW9fYWxsb2MoYmRldiwgY3VyX2Rpc2tfYnl0ZSwgR0ZQX05PRlMpOworCWlmICghY29tcF9iaW8pCisJCWdvdG8gZmFpbDI7CiAJY29tcF9iaW8tPmJpX3ByaXZhdGUgPSBjYjsKIAljb21wX2Jpby0+YmlfZW5kX2lvID0gZW5kX2NvbXByZXNzZWRfYmlvX3JlYWQ7CiAJYXRvbWljX2luYygmY2ItPnBlbmRpbmdfYmlvcyk7CkBAIC02ODEsNiArNjkxLDE3IEBACiAKIAliaW9fcHV0KGNvbXBfYmlvKTsKIAlyZXR1cm4gMDsKKworZmFpbDI6CisJZm9yIChwYWdlX2luZGV4ID0gMDsgcGFnZV9pbmRleCA8IG5yX3BhZ2VzOyBwYWdlX2luZGV4KyspCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYi0+Y29tcHJlc3NlZF9wYWdlc1twYWdlX2luZGV4XSk7CisKKwlrZnJlZShjYi0+Y29tcHJlc3NlZF9wYWdlcyk7CitmYWlsMToKKwlrZnJlZShjYik7CitvdXQ6CisJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBjb21wX2lkbGVfd29ya3NwYWNlW0JUUkZTX0NPTVBSRVNTX1RZUEVTXTsKQEAgLTkwMCw3ICs5MjEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgX19leGl0IGJ0cmZzX2V4aXRfY29tcHJlc3Modm9pZCkKK3ZvaWQgYnRyZnNfZXhpdF9jb21wcmVzcyh2b2lkKQogewogCWZyZWVfd29ya3NwYWNlcygpOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuaCBiL2ZzL2J0cmZzL2N0cmVlLmgKaW5kZXggMmM5OGIzYS4uNmY4MjBmYSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY3RyZWUuaAorKysgYi9mcy9idHJmcy9jdHJlZS5oCkBAIC0xMjU0LDYgKzEyNTQsNyBAQAogI2RlZmluZSBCVFJGU19NT1VOVF9TUEFDRV9DQUNIRQkJKDEgPDwgMTIpCiAjZGVmaW5lIEJUUkZTX01PVU5UX0NMRUFSX0NBQ0hFCQkoMSA8PCAxMykKICNkZWZpbmUgQlRSRlNfTU9VTlRfVVNFUl9TVUJWT0xfUk1fQUxMT1dFRCAoMSA8PCAxNCkKKyNkZWZpbmUgQlRSRlNfTU9VTlRfRU5PU1BDX0RFQlVHCSAoMSA8PCAxNSkKIAogI2RlZmluZSBidHJmc19jbGVhcl9vcHQobywgb3B0KQkJKChvKSAmPSB+QlRSRlNfTU9VTlRfIyNvcHQpCiAjZGVmaW5lIGJ0cmZzX3NldF9vcHQobywgb3B0KQkJKChvKSB8PSBCVFJGU19NT1VOVF8jI29wdCkKQEAgLTIyMTgsNiArMjIxOSw4IEBACiAJCQkJICAgdTY0IHN0YXJ0LCB1NjQgZW5kKTsKIGludCBidHJmc19lcnJvcl9kaXNjYXJkX2V4dGVudChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGJ5dGVuciwKIAkJCSAgICAgICB1NjQgbnVtX2J5dGVzKTsKK2ludCBidHJmc19mb3JjZV9jaHVua19hbGxvYyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IHR5cGUpOwogCiAvKiBjdHJlZS5jICovCiBpbnQgYnRyZnNfYmluX3NlYXJjaChzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqZWIsIHN0cnVjdCBidHJmc19rZXkgKmtleSwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2Rpc2staW8uYyBiL2ZzL2J0cmZzL2Rpc2staW8uYwppbmRleCBiNTMxYzM2Li5lMWFhOGQ2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9kaXNrLWlvLmMKKysrIGIvZnMvYnRyZnMvZGlzay1pby5jCkBAIC0zNTksMTAgKzM1OSwxNCBAQAogCiAJdHJlZSA9ICZCVFJGU19JKHBhZ2UtPm1hcHBpbmctPmhvc3QpLT5pb190cmVlOwogCi0JaWYgKHBhZ2UtPnByaXZhdGUgPT0gRVhURU5UX1BBR0VfUFJJVkFURSkKKwlpZiAocGFnZS0+cHJpdmF0ZSA9PSBFWFRFTlRfUEFHRV9QUklWQVRFKSB7CisJCVdBUk5fT04oMSk7CiAJCWdvdG8gb3V0OwotCWlmICghcGFnZS0+cHJpdmF0ZSkKKwl9CisJaWYgKCFwYWdlLT5wcml2YXRlKSB7CisJCVdBUk5fT04oMSk7CiAJCWdvdG8gb3V0OworCX0KIAlsZW4gPSBwYWdlLT5wcml2YXRlID4+IDI7CiAJV0FSTl9PTihsZW4gPT0gMCk7CiAKQEAgLTE1NTAsNiArMTU1NCw3IEBACiAJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CiAKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCWlmICh0cmFuc2lkID09IHRyYW5zLT50cmFuc2lkKSB7CiAJCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQkJQlVHX09OKHJldCk7CkBAIC0yNDUzLDEwICsyNDU4LDE0IEBACiAJdXBfd3JpdGUoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKQorCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlCVUdfT04ocmV0KTsKIAkvKiBydW4gY29tbWl0IGFnYWluIHRvIGRyb3AgdGhlIG9yaWdpbmFsIHNuYXBzaG90ICovCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKQorCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlyZXQgPSBidHJmc193cml0ZV9hbmRfd2FpdF90cmFuc2FjdGlvbihOVUxMLCByb290KTsKIAlCVUdfT04ocmV0KTsKQEAgLTI1NTQsNiArMjU2Myw4IEBACiAJa2ZyZWUoZnNfaW5mby0+Y2h1bmtfcm9vdCk7CiAJa2ZyZWUoZnNfaW5mby0+ZGV2X3Jvb3QpOwogCWtmcmVlKGZzX2luZm8tPmNzdW1fcm9vdCk7CisJa2ZyZWUoZnNfaW5mbyk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXhwb3J0LmMgYi9mcy9idHJmcy9leHBvcnQuYwppbmRleCA5Nzg2OTYzLi5mZjI3ZDdhIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHBvcnQuYworKysgYi9mcy9idHJmcy9leHBvcnQuYwpAQCAtMTcxLDYgKzE3MSw4IEBACiAJaW50IHJldDsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWlmIChkaXItPmlfaW5vID09IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpIHsKIAkJa2V5Lm9iamVjdGlkID0gcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQ7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCBiNTUyNjkzLi41ODhmZjk4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTMyMCwxMSArMzIwLDYgQEAKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZXhjbHVkZV9zdXBlcl9zdHJpcGVzKGV4dGVudF9yb290LCBibG9ja19ncm91cCk7Ci0Jc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+c3BhY2VfaW5mby0+bG9jayk7Ci0JYmxvY2tfZ3JvdXAtPnNwYWNlX2luZm8tPmJ5dGVzX3JlYWRvbmx5ICs9IGJsb2NrX2dyb3VwLT5ieXRlc19zdXBlcjsKLQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnNwYWNlX2luZm8tPmxvY2spOwotCiAJbGFzdCA9IG1heF90KHU2NCwgYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCwgQlRSRlNfU1VQRVJfSU5GT19PRkZTRVQpOwogCiAJLyoKQEAgLTQ2Nyw4ICs0NjIsMTAgQEAKIAkJCWNhY2hlLT5jYWNoZWQgPSBCVFJGU19DQUNIRV9OTzsKIAkJfQogCQlzcGluX3VubG9jaygmY2FjaGUtPmxvY2spOwotCQlpZiAocmV0ID09IDEpCisJCWlmIChyZXQgPT0gMSkgeworCQkJZnJlZV9leGNsdWRlZF9leHRlbnRzKGZzX2luZm8tPmV4dGVudF9yb290LCBjYWNoZSk7CiAJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAogCWlmIChsb2FkX2NhY2hlX29ubHkpCkBAIC0zMzQ0LDggKzMzNDEsMTAgQEAKIAl1NjQgcmVzZXJ2ZWQ7CiAJdTY0IG1heF9yZWNsYWltOwogCXU2NCByZWNsYWltZWQgPSAwOworCWxvbmcgdGltZV9sZWZ0OwogCWludCBwYXVzZSA9IDE7CiAJaW50IG5yX3BhZ2VzID0gKDIgKiAxMDI0ICogMTAyNCkgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlpbnQgbG9vcHMgPSAwOwogCiAJYmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAlzcGFjZV9pbmZvID0gYmxvY2tfcnN2LT5zcGFjZV9pbmZvOwpAQCAtMzM1OCw3ICszMzU3LDcgQEAKIAogCW1heF9yZWNsYWltID0gbWluKHJlc2VydmVkLCB0b19yZWNsYWltKTsKIAotCXdoaWxlICgxKSB7CisJd2hpbGUgKGxvb3BzIDwgMTAyNCkgewogCQkvKiBoYXZlIHRoZSBmbHVzaGVyIHRocmVhZHMganVtcCBpbiBhbmQgZG8gc29tZSBJTyAqLwogCQlzbXBfbWIoKTsKIAkJbnJfcGFnZXMgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBucl9wYWdlcywKQEAgLTMzNjYsOCArMzM2NSwxMiBAQAogCQl3cml0ZWJhY2tfaW5vZGVzX3NiX25yX2lmX2lkbGUocm9vdC0+ZnNfaW5mby0+c2IsIG5yX3BhZ2VzKTsKIAogCQlzcGluX2xvY2soJnNwYWNlX2luZm8tPmxvY2spOwotCQlpZiAocmVzZXJ2ZWQgPiBzcGFjZV9pbmZvLT5ieXRlc19yZXNlcnZlZCkKKwkJaWYgKHJlc2VydmVkID4gc3BhY2VfaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQpIHsKKwkJCWxvb3BzID0gMDsKIAkJCXJlY2xhaW1lZCArPSByZXNlcnZlZCAtIHNwYWNlX2luZm8tPmJ5dGVzX3Jlc2VydmVkOworCQl9IGVsc2UgeworCQkJbG9vcHMrKzsKKwkJfQogCQlyZXNlcnZlZCA9IHNwYWNlX2luZm8tPmJ5dGVzX3Jlc2VydmVkOwogCQlzcGluX3VubG9jaygmc3BhY2VfaW5mby0+bG9jayk7CiAKQEAgLTMzNzgsNyArMzM4MSwxMiBAQAogCQkJcmV0dXJuIC1FQUdBSU47CiAKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KHBhdXNlKTsKKwkJdGltZV9sZWZ0ID0gc2NoZWR1bGVfdGltZW91dChwYXVzZSk7CisKKwkJLyogV2Ugd2VyZSBpbnRlcnJ1cHRlZCwgZXhpdCAqLworCQlpZiAodGltZV9sZWZ0KQorCQkJYnJlYWs7CisKIAkJcGF1c2UgPDw9IDE7CiAJCWlmIChwYXVzZSA+IEhaIC8gMTApCiAJCQlwYXVzZSA9IEhaIC8gMTA7CkBAIC0zNTg4LDggKzM1OTYsMjAgQEAKIAogCWlmIChudW1fYnl0ZXMgPiAwKSB7CiAJCWlmIChkZXN0KSB7Ci0JCQlibG9ja19yc3ZfYWRkX2J5dGVzKGRlc3QsIG51bV9ieXRlcywgMCk7Ci0JCX0gZWxzZSB7CisJCQlzcGluX2xvY2soJmRlc3QtPmxvY2spOworCQkJaWYgKCFkZXN0LT5mdWxsKSB7CisJCQkJdTY0IGJ5dGVzX3RvX2FkZDsKKworCQkJCWJ5dGVzX3RvX2FkZCA9IGRlc3QtPnNpemUgLSBkZXN0LT5yZXNlcnZlZDsKKwkJCQlieXRlc190b19hZGQgPSBtaW4obnVtX2J5dGVzLCBieXRlc190b19hZGQpOworCQkJCWRlc3QtPnJlc2VydmVkICs9IGJ5dGVzX3RvX2FkZDsKKwkJCQlpZiAoZGVzdC0+cmVzZXJ2ZWQgPj0gZGVzdC0+c2l6ZSkKKwkJCQkJZGVzdC0+ZnVsbCA9IDE7CisJCQkJbnVtX2J5dGVzIC09IGJ5dGVzX3RvX2FkZDsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZkZXN0LT5sb2NrKTsKKwkJfQorCQlpZiAobnVtX2J5dGVzKSB7CiAJCQlzcGluX2xvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCQkJc3BhY2VfaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgLT0gbnVtX2J5dGVzOwogCQkJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwpAQCAtNDAxMiw2ICs0MDMyLDcgQEAKIAogCW51bV9ieXRlcyA9IEFMSUdOKG51bV9ieXRlcywgcm9vdC0+c2VjdG9yc2l6ZSk7CiAJYXRvbWljX2RlYygmQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMpOworCVdBUk5fT04oYXRvbWljX3JlYWQoJkJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKSA8IDApOwogCiAJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKIAlucl9leHRlbnRzID0gYXRvbWljX3JlYWQoJkJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKTsKQEAgLTUzNTUsNyArNTM3Niw3IEBACiAJCQkgICAgICAgbnVtX2J5dGVzLCBkYXRhLCAxKTsKIAkJZ290byBhZ2FpbjsKIAl9Ci0JaWYgKHJldCA9PSAtRU5PU1BDKSB7CisJaWYgKHJldCA9PSAtRU5PU1BDICYmIGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIEVOT1NQQ19ERUJVRykpIHsKIAkJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnNpbmZvOwogCiAJCXNpbmZvID0gX19maW5kX3NwYWNlX2luZm8ocm9vdC0+ZnNfaW5mbywgZGF0YSk7CkBAIC01NjMzLDYgKzU2NTQsNyBAQAogCSAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1MzIgYmxvY2tzaXplKQogewogCXN0cnVjdCBidHJmc19ibG9ja19yc3YgKmJsb2NrX3JzdjsKKwlzdHJ1Y3QgYnRyZnNfYmxvY2tfcnN2ICpnbG9iYWxfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmdsb2JhbF9ibG9ja19yc3Y7CiAJaW50IHJldDsKIAogCWJsb2NrX3JzdiA9IGdldF9ibG9ja19yc3YodHJhbnMsIHJvb3QpOwpAQCAtNTY0MCwxNCArNTY2MiwzOSBAQAogCWlmIChibG9ja19yc3YtPnNpemUgPT0gMCkgewogCQlyZXQgPSByZXNlcnZlX21ldGFkYXRhX2J5dGVzKHRyYW5zLCByb290LCBibG9ja19yc3YsCiAJCQkJCSAgICAgYmxvY2tzaXplLCAwKTsKLQkJaWYgKHJldCkKKwkJLyoKKwkJICogSWYgd2UgY291bGRuJ3QgcmVzZXJ2ZSBtZXRhZGF0YSBieXRlcyB0cnkgYW5kIHVzZSBzb21lIGZyb20KKwkJICogdGhlIGdsb2JhbCByZXNlcnZlLgorCQkgKi8KKwkJaWYgKHJldCAmJiBibG9ja19yc3YgIT0gZ2xvYmFsX3JzdikgeworCQkJcmV0ID0gYmxvY2tfcnN2X3VzZV9ieXRlcyhnbG9iYWxfcnN2LCBibG9ja3NpemUpOworCQkJaWYgKCFyZXQpCisJCQkJcmV0dXJuIGdsb2JhbF9yc3Y7CiAJCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCQl9IGVsc2UgaWYgKHJldCkgeworCQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwkJfQogCQlyZXR1cm4gYmxvY2tfcnN2OwogCX0KIAogCXJldCA9IGJsb2NrX3Jzdl91c2VfYnl0ZXMoYmxvY2tfcnN2LCBibG9ja3NpemUpOwogCWlmICghcmV0KQogCQlyZXR1cm4gYmxvY2tfcnN2OworCWlmIChyZXQpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0ID0gcmVzZXJ2ZV9tZXRhZGF0YV9ieXRlcyh0cmFucywgcm9vdCwgYmxvY2tfcnN2LCBibG9ja3NpemUsCisJCQkJCSAgICAgMCk7CisJCWlmICghcmV0KSB7CisJCQlzcGluX2xvY2soJmJsb2NrX3Jzdi0+bG9jayk7CisJCQlibG9ja19yc3YtPnNpemUgKz0gYmxvY2tzaXplOworCQkJc3Bpbl91bmxvY2soJmJsb2NrX3Jzdi0+bG9jayk7CisJCQlyZXR1cm4gYmxvY2tfcnN2OworCQl9IGVsc2UgaWYgKHJldCAmJiBibG9ja19yc3YgIT0gZ2xvYmFsX3JzdikgeworCQkJcmV0ID0gYmxvY2tfcnN2X3VzZV9ieXRlcyhnbG9iYWxfcnN2LCBibG9ja3NpemUpOworCQkJaWYgKCFyZXQpCisJCQkJcmV0dXJuIGdsb2JhbF9yc3Y7CisJCX0KKwl9CiAKIAlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKIH0KQEAgLTYyMjEsNiArNjI2OCw4IEBACiAJQlVHX09OKCF3Yyk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHRyZWVfcm9vdCwgMCk7CisJQlVHX09OKElTX0VSUih0cmFucykpOworCiAJaWYgKGJsb2NrX3JzdikKIAkJdHJhbnMtPmJsb2NrX3JzdiA9IGJsb2NrX3JzdjsKIApAQCAtNjMxOCw2ICs2MzY3LDcgQEAKIAogCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCB0cmVlX3Jvb3QpOwogCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbih0cmVlX3Jvb3QsIDApOworCQkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQkJaWYgKGJsb2NrX3JzdikKIAkJCQl0cmFucy0+YmxvY2tfcnN2ID0gYmxvY2tfcnN2OwogCQl9CkBAIC02NDQ2LDYgKzY0OTYsOCBAQAogCWludCByZXQgPSAwOwogCiAJcmEgPSBremFsbG9jKHNpemVvZigqcmEpLCBHRlBfTk9GUyk7CisJaWYgKCFyYSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJZmlyc3RfaW5kZXggPSBzdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZUOwpAQCAtNjUzMSw3ICs2NTgzLDcgQEAKIAl1NjQgZW5kID0gc3RhcnQgKyBleHRlbnRfa2V5LT5vZmZzZXQgLSAxOwogCiAJZW0gPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKLQlCVUdfT04oIWVtIHx8IElTX0VSUihlbSkpOworCUJVR19PTighZW0pOwogCiAJZW0tPnN0YXJ0ID0gc3RhcnQ7CiAJZW0tPmxlbiA9IGV4dGVudF9rZXktPm9mZnNldDsKQEAgLTc0NzcsNyArNzUyOSw3IEBACiAJCUJVR19PTihyZWxvY19yb290LT5jb21taXRfcm9vdCAhPSBOVUxMKTsKIAkJd2hpbGUgKDEpIHsKIAkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKLQkJCUJVR19PTighdHJhbnMpOworCQkJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT5kcm9wX211dGV4KTsKIAkJCXJldCA9IGJ0cmZzX2Ryb3Bfc25hcHNob3QodHJhbnMsIHJlbG9jX3Jvb3QpOwpAQCAtNzUzNSw3ICs3NTg3LDcgQEAKIAogCWlmIChmb3VuZCkgewogCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCQlCVUdfT04oIXRyYW5zKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQlCVUdfT04ocmV0KTsKIAl9CkBAIC03Nzc5LDcgKzc4MzEsNyBAQAogCiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKGV4dGVudF9yb290LCAxKTsKLQlCVUdfT04oIXRyYW5zKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAlpZiAoZXh0ZW50X2tleS0+b2JqZWN0aWQgPT0gMCkgewogCQlyZXQgPSBkZWxfZXh0ZW50X3plcm8odHJhbnMsIGV4dGVudF9yb290LCBwYXRoLCBleHRlbnRfa2V5KTsKQEAgLTgwMTMsNiArODA2NSwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCBidHJmc19mb3JjZV9jaHVua19hbGxvYyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IHR5cGUpCit7CisJdTY0IGFsbG9jX2ZsYWdzID0gZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgdHlwZSk7CisJcmV0dXJuIGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LCAyICogMTAyNCAqIDEwMjQsIGFsbG9jX2ZsYWdzLCAxKTsKK30KKwogLyoKICAqIGhlbHBlciB0byBhY2NvdW50IHRoZSB1bnVzZWQgc3BhY2Ugb2YgYWxsIHRoZSByZWFkb25seSBibG9jayBncm91cCBpbiB0aGUKICAqIGxpc3QuIHRha2VzIG1pcnJvcnMgaW50byBhY2NvdW50LgpAQCAtODI3MCw2ICs4MzI5LDEzIEBACiAJCWlmIChibG9ja19ncm91cC0+Y2FjaGVkID09IEJUUkZTX0NBQ0hFX1NUQVJURUQpCiAJCQl3YWl0X2Jsb2NrX2dyb3VwX2NhY2hlX2RvbmUoYmxvY2tfZ3JvdXApOwogCisJCS8qCisJCSAqIFdlIGhhdmVuJ3QgY2FjaGVkIHRoaXMgYmxvY2sgZ3JvdXAsIHdoaWNoIG1lYW5zIHdlIGNvdWxkCisJCSAqIHBvc3NpYmx5IGhhdmUgZXhjbHVkZWQgZXh0ZW50cyBvbiB0aGlzIGJsb2NrIGdyb3VwLgorCQkgKi8KKwkJaWYgKGJsb2NrX2dyb3VwLT5jYWNoZWQgPT0gQlRSRlNfQ0FDSEVfTk8pCisJCQlmcmVlX2V4Y2x1ZGVkX2V4dGVudHMoaW5mby0+ZXh0ZW50X3Jvb3QsIGJsb2NrX2dyb3VwKTsKKwogCQlidHJmc19yZW1vdmVfZnJlZV9zcGFjZV9jYWNoZShibG9ja19ncm91cCk7CiAJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAKQEAgLTgzODUsNiArODQ1MSwxMyBAQAogCQljYWNoZS0+c2VjdG9yc2l6ZSA9IHJvb3QtPnNlY3RvcnNpemU7CiAKIAkJLyoKKwkJICogV2UgbmVlZCB0byBleGNsdWRlIHRoZSBzdXBlciBzdHJpcGVzIG5vdyBzbyB0aGF0IHRoZSBzcGFjZQorCQkgKiBpbmZvIGhhcyBzdXBlciBieXRlcyBhY2NvdW50ZWQgZm9yLCBvdGhlcndpc2Ugd2UnbGwgdGhpbmsKKwkJICogd2UgaGF2ZSBtb3JlIHNwYWNlIHRoYW4gd2UgYWN0dWFsbHkgZG8uCisJCSAqLworCQlleGNsdWRlX3N1cGVyX3N0cmlwZXMocm9vdCwgY2FjaGUpOworCisJCS8qCiAJCSAqIGNoZWNrIGZvciB0d28gY2FzZXMsIGVpdGhlciB3ZSBhcmUgZnVsbCwgYW5kIHRoZXJlZm9yZQogCQkgKiBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRoIHRoZSBjYWNoaW5nIHdvcmsgc2luY2Ugd2Ugd29uJ3QKIAkJICogZmluZCBhbnkgc3BhY2UsIG9yIHdlIGFyZSBlbXB0eSwgYW5kIHdlIGNhbiBqdXN0IGFkZCBhbGwKQEAgLTgzOTIsMTIgKzg0NjUsMTAgQEAKIAkJICogdGltZSwgcGFydGljdWxhcmx5IGluIHRoZSBmdWxsIGNhc2UuCiAJCSAqLwogCQlpZiAoZm91bmRfa2V5Lm9mZnNldCA9PSBidHJmc19ibG9ja19ncm91cF91c2VkKCZjYWNoZS0+aXRlbSkpIHsKLQkJCWV4Y2x1ZGVfc3VwZXJfc3RyaXBlcyhyb290LCBjYWNoZSk7CiAJCQljYWNoZS0+bGFzdF9ieXRlX3RvX3VucGluID0gKHU2NCktMTsKIAkJCWNhY2hlLT5jYWNoZWQgPSBCVFJGU19DQUNIRV9GSU5JU0hFRDsKIAkJCWZyZWVfZXhjbHVkZWRfZXh0ZW50cyhyb290LCBjYWNoZSk7CiAJCX0gZWxzZSBpZiAoYnRyZnNfYmxvY2tfZ3JvdXBfdXNlZCgmY2FjaGUtPml0ZW0pID09IDApIHsKLQkJCWV4Y2x1ZGVfc3VwZXJfc3RyaXBlcyhyb290LCBjYWNoZSk7CiAJCQljYWNoZS0+bGFzdF9ieXRlX3RvX3VucGluID0gKHU2NCktMTsKIAkJCWNhY2hlLT5jYWNoZWQgPSBCVFJGU19DQUNIRV9GSU5JU0hFRDsKIAkJCWFkZF9uZXdfZnJlZV9zcGFjZShjYWNoZSwgcm9vdC0+ZnNfaW5mbywKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggMmU5OTNjZi4uZmQzZjE3MiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTE0MzMsMTIgKzE0MzMsMTMgQEAKICAqLwogdTY0IGNvdW50X3JhbmdlX2JpdHMoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkgICAgIHU2NCAqc3RhcnQsIHU2NCBzZWFyY2hfZW5kLCB1NjQgbWF4X2J5dGVzLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgYml0cykKKwkJICAgICB1bnNpZ25lZCBsb25nIGJpdHMsIGludCBjb250aWcpCiB7CiAJc3RydWN0IHJiX25vZGUgKm5vZGU7CiAJc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGU7CiAJdTY0IGN1cl9zdGFydCA9ICpzdGFydDsKIAl1NjQgdG90YWxfYnl0ZXMgPSAwOworCXU2NCBsYXN0ID0gMDsKIAlpbnQgZm91bmQgPSAwOwogCiAJaWYgKHNlYXJjaF9lbmQgPD0gY3VyX3N0YXJ0KSB7CkBAIC0xNDYzLDcgKzE0NjQsOSBAQAogCQlzdGF0ZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBleHRlbnRfc3RhdGUsIHJiX25vZGUpOwogCQlpZiAoc3RhdGUtPnN0YXJ0ID4gc2VhcmNoX2VuZCkKIAkJCWJyZWFrOwotCQlpZiAoc3RhdGUtPmVuZCA+PSBjdXJfc3RhcnQgJiYgKHN0YXRlLT5zdGF0ZSAmIGJpdHMpKSB7CisJCWlmIChjb250aWcgJiYgZm91bmQgJiYgc3RhdGUtPnN0YXJ0ID4gbGFzdCArIDEpCisJCQlicmVhazsKKwkJaWYgKHN0YXRlLT5lbmQgPj0gY3VyX3N0YXJ0ICYmIChzdGF0ZS0+c3RhdGUgJiBiaXRzKSA9PSBiaXRzKSB7CiAJCQl0b3RhbF9ieXRlcyArPSBtaW4oc2VhcmNoX2VuZCwgc3RhdGUtPmVuZCkgKyAxIC0KIAkJCQkgICAgICAgbWF4KGN1cl9zdGFydCwgc3RhdGUtPnN0YXJ0KTsKIAkJCWlmICh0b3RhbF9ieXRlcyA+PSBtYXhfYnl0ZXMpCkBAIC0xNDcyLDYgKzE0NzUsOSBAQAogCQkJCSpzdGFydCA9IHN0YXRlLT5zdGFydDsKIAkJCQlmb3VuZCA9IDE7CiAJCQl9CisJCQlsYXN0ID0gc3RhdGUtPmVuZDsKKwkJfSBlbHNlIGlmIChjb250aWcgJiYgZm91bmQpIHsKKwkJCWJyZWFrOwogCQl9CiAJCW5vZGUgPSByYl9uZXh0KG5vZGUpOwogCQlpZiAoIW5vZGUpCkBAIC0xODY1LDcgKzE4NzEsNyBAQAogCWJpb19nZXQoYmlvKTsKIAogCWlmICh0cmVlLT5vcHMgJiYgdHJlZS0+b3BzLT5zdWJtaXRfYmlvX2hvb2spCi0JCXRyZWUtPm9wcy0+c3VibWl0X2Jpb19ob29rKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHJ3LCBiaW8sCisJCXJldCA9IHRyZWUtPm9wcy0+c3VibWl0X2Jpb19ob29rKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHJ3LCBiaW8sCiAJCQkJCSAgIG1pcnJvcl9udW0sIGJpb19mbGFncywgc3RhcnQpOwogCWVsc2UKIAkJc3VibWl0X2JpbyhydywgYmlvKTsKQEAgLTE5MjAsNiArMTkyNiw4IEBACiAJCW5yID0gYmlvX2dldF9ucl92ZWNzKGJkZXYpOwogCiAJYmlvID0gYnRyZnNfYmlvX2FsbG9jKGJkZXYsIHNlY3RvciwgbnIsIEdGUF9OT0ZTIHwgX19HRlBfSElHSCk7CisJaWYgKCFiaW8pCisJCXJldHVybiAtRU5PTUVNOwogCiAJYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgcGFnZV9zaXplLCBvZmZzZXQpOwogCWJpby0+YmlfZW5kX2lvID0gZW5kX2lvX2Z1bmM7CkBAIC0xOTQ0LDYgKzE5NTIsNyBAQAogCiBzdGF0aWMgdm9pZCBzZXRfcGFnZV9leHRlbnRfaGVhZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBsZW4pCiB7CisJV0FSTl9PTighUGFnZVByaXZhdGUocGFnZSkpOwogCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgRVhURU5UX1BBR0VfUFJJVkFURV9GSVJTVF9QQUdFIHwgbGVuIDw8IDIpOwogfQogCkBAIC0yMTI2LDcgKzIxMzUsNyBAQAogCXJldCA9IF9fZXh0ZW50X3JlYWRfZnVsbF9wYWdlKHRyZWUsIHBhZ2UsIGdldF9leHRlbnQsICZiaW8sIDAsCiAJCQkJICAgICAgJmJpb19mbGFncyk7CiAJaWYgKGJpbykKLQkJc3VibWl0X29uZV9iaW8oUkVBRCwgYmlvLCAwLCBiaW9fZmxhZ3MpOworCQlyZXQgPSBzdWJtaXRfb25lX2JpbyhSRUFELCBiaW8sIDAsIGJpb19mbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjgxOSw5ICsyODI4LDE3IEBACiAJCSAqIGF0IHRoaXMgcG9pbnQgd2UgY2FuIHNhZmVseSBjbGVhciBldmVyeXRoaW5nIGV4Y2VwdCB0aGUKIAkJICogbG9ja2VkIGJpdCBhbmQgdGhlIG5vZGF0YXN1bSBiaXQKIAkJICovCi0JCWNsZWFyX2V4dGVudF9iaXQodHJlZSwgc3RhcnQsIGVuZCwKKwkJcmV0ID0gY2xlYXJfZXh0ZW50X2JpdCh0cmVlLCBzdGFydCwgZW5kLAogCQkJCSB+KEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfTk9EQVRBU1VNKSwKIAkJCQkgMCwgMCwgTlVMTCwgbWFzayk7CisKKwkJLyogaWYgY2xlYXJfZXh0ZW50X2JpdCBmYWlsZWQgZm9yIGVub21lbSByZWFzb25zLAorCQkgKiB3ZSBjYW4ndCBhbGxvdyB0aGUgcmVsZWFzZSB0byBjb250aW51ZS4KKwkJICovCisJCWlmIChyZXQgPCAwKQorCQkJcmV0ID0gMDsKKwkJZWxzZQorCQkJcmV0ID0gMTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI5MDEsNiArMjkxOCw0NiBAQAogCXJldHVybiBzZWN0b3I7CiB9CiAKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gZm9yIGZpZW1hcCwgd2hpY2ggZG9lc24ndCB3YW50IHRvIHNlZSBhbnkgaG9sZXMuCisgKiBUaGlzIG1hcHMgdW50aWwgd2UgZmluZCBzb21ldGhpbmcgcGFzdCAnbGFzdCcKKyAqLworc3RhdGljIHN0cnVjdCBleHRlbnRfbWFwICpnZXRfZXh0ZW50X3NraXBfaG9sZXMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJCXU2NCBvZmZzZXQsCisJCQkJCQl1NjQgbGFzdCwKKwkJCQkJCWdldF9leHRlbnRfdCAqZ2V0X2V4dGVudCkKK3sKKwl1NjQgc2VjdG9yc2l6ZSA9IEJUUkZTX0koaW5vZGUpLT5yb290LT5zZWN0b3JzaXplOworCXN0cnVjdCBleHRlbnRfbWFwICplbTsKKwl1NjQgbGVuOworCisJaWYgKG9mZnNldCA+PSBsYXN0KQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlKDEpIHsKKwkJbGVuID0gbGFzdCAtIG9mZnNldDsKKwkJaWYgKGxlbiA9PSAwKQorCQkJYnJlYWs7CisJCWxlbiA9IChsZW4gKyBzZWN0b3JzaXplIC0gMSkgJiB+KHNlY3RvcnNpemUgLSAxKTsKKwkJZW0gPSBnZXRfZXh0ZW50KGlub2RlLCBOVUxMLCAwLCBvZmZzZXQsIGxlbiwgMCk7CisJCWlmICghZW0gfHwgSVNfRVJSKGVtKSkKKwkJCXJldHVybiBlbTsKKworCQkvKiBpZiB0aGlzIGlzbid0IGEgaG9sZSByZXR1cm4gaXQgKi8KKwkJaWYgKCF0ZXN0X2JpdChFWFRFTlRfRkxBR19WQUNBTkNZLCAmZW0tPmZsYWdzKSAmJgorCQkgICAgZW0tPmJsb2NrX3N0YXJ0ICE9IEVYVEVOVF9NQVBfSE9MRSkgeworCQkJcmV0dXJuIGVtOworCQl9CisKKwkJLyogdGhpcyBpcyBhIGhvbGUsIGFkdmFuY2UgdG8gdGhlIG5leHQgZXh0ZW50ICovCisJCW9mZnNldCA9IGV4dGVudF9tYXBfZW5kKGVtKTsKKwkJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwkJaWYgKG9mZnNldCA+PSBsYXN0KQorCQkJYnJlYWs7CisJfQorCXJldHVybiBOVUxMOworfQorCiBpbnQgZXh0ZW50X2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmllbWFwX2V4dGVudF9pbmZvICpmaWVpbmZvLAogCQlfX3U2NCBzdGFydCwgX191NjQgbGVuLCBnZXRfZXh0ZW50X3QgKmdldF9leHRlbnQpCiB7CkBAIC0yOTEwLDE2ICsyOTY3LDE5IEBACiAJdTMyIGZsYWdzID0gMDsKIAl1MzIgZm91bmRfdHlwZTsKIAl1NjQgbGFzdDsKKwl1NjQgbGFzdF9mb3JfZ2V0X2V4dGVudCA9IDA7CiAJdTY0IGRpc2tvID0gMDsKKwl1NjQgaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CiAJc3RydWN0IGJ0cmZzX2tleSBmb3VuZF9rZXk7CiAJc3RydWN0IGV4dGVudF9tYXAgKmVtID0gTlVMTDsKIAlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpjYWNoZWRfc3RhdGUgPSBOVUxMOwogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCXN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtICppdGVtOwogCWludCBlbmQgPSAwOwotCXU2NCBlbV9zdGFydCA9IDAsIGVtX2xlbiA9IDA7CisJdTY0IGVtX3N0YXJ0ID0gMDsKKwl1NjQgZW1fbGVuID0gMDsKKwl1NjQgZW1fZW5kID0gMDsKIAl1bnNpZ25lZCBsb25nIGVtZmxhZ3M7Ci0JaW50IGhvbGUgPSAwOwogCiAJaWYgKGxlbiA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI5MjksNiArMjk4OSwxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAKKwkvKgorCSAqIGxvb2t1cCB0aGUgbGFzdCBmaWxlIGV4dGVudC4gIFdlJ3JlIG5vdCB1c2luZyBpX3NpemUgaGVyZQorCSAqIGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgcHJlYWxsb2NhdGlvbiBwYXN0IGlfc2l6ZQorCSAqLwogCXJldCA9IGJ0cmZzX2xvb2t1cF9maWxlX2V4dGVudChOVUxMLCBCVFJGU19JKGlub2RlKS0+cm9vdCwKIAkJCQkgICAgICAgcGF0aCwgaW5vZGUtPmlfaW5vLCAtMSwgMCk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTI5NDIsMTggKzMwMDYsMzggQEAKIAlidHJmc19pdGVtX2tleV90b19jcHUocGF0aC0+bm9kZXNbMF0sICZmb3VuZF9rZXksIHBhdGgtPnNsb3RzWzBdKTsKIAlmb3VuZF90eXBlID0gYnRyZnNfa2V5X3R5cGUoJmZvdW5kX2tleSk7CiAKLQkvKiBObyBleHRlbnRzLCBqdXN0IHJldHVybiAqLworCS8qIE5vIGV4dGVudHMsIGJ1dCB0aGVyZSBtaWdodCBiZSBkZWxhbGxvYyBiaXRzICovCiAJaWYgKGZvdW5kX2tleS5vYmplY3RpZCAhPSBpbm9kZS0+aV9pbm8gfHwKIAkgICAgZm91bmRfdHlwZSAhPSBCVFJGU19FWFRFTlRfREFUQV9LRVkpIHsKLQkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCQlyZXR1cm4gMDsKKwkJLyogaGF2ZSB0byB0cnVzdCBpX3NpemUgYXMgdGhlIGVuZCAqLworCQlsYXN0ID0gKHU2NCktMTsKKwkJbGFzdF9mb3JfZ2V0X2V4dGVudCA9IGlzaXplOworCX0gZWxzZSB7CisJCS8qCisJCSAqIHJlbWVtYmVyIHRoZSBzdGFydCBvZiB0aGUgbGFzdCBleHRlbnQuICBUaGVyZSBhcmUgYQorCQkgKiBidW5jaCBvZiBkaWZmZXJlbnQgZmFjdG9ycyB0aGF0IGdvIGludG8gdGhlIGxlbmd0aCBvZiB0aGUKKwkJICogZXh0ZW50LCBzbyBpdHMgbXVjaCBsZXNzIGNvbXBsZXggdG8gcmVtZW1iZXIgd2hlcmUgaXQgc3RhcnRlZAorCQkgKi8KKwkJbGFzdCA9IGZvdW5kX2tleS5vZmZzZXQ7CisJCWxhc3RfZm9yX2dldF9leHRlbnQgPSBsYXN0ICsgMTsKIAl9Ci0JbGFzdCA9IGZvdW5kX2tleS5vZmZzZXQ7CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCisJLyoKKwkgKiB3ZSBtaWdodCBoYXZlIHNvbWUgZXh0ZW50cyBhbGxvY2F0ZWQgYnV0IG1vcmUgZGVsYWxsb2MgcGFzdCB0aG9zZQorCSAqIGV4dGVudHMuICBzbywgd2UgdHJ1c3QgaXNpemUgdW5sZXNzIHRoZSBzdGFydCBvZiB0aGUgbGFzdCBleHRlbnQgaXMKKwkgKiBiZXlvbmQgaXNpemUKKwkgKi8KKwlpZiAobGFzdCA8IGlzaXplKSB7CisJCWxhc3QgPSAodTY0KS0xOworCQlsYXN0X2Zvcl9nZXRfZXh0ZW50ID0gaXNpemU7CisJfQorCiAJbG9ja19leHRlbnRfYml0cygmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIHN0YXJ0LCBzdGFydCArIGxlbiwgMCwKIAkJCSAmY2FjaGVkX3N0YXRlLCBHRlBfTk9GUyk7Ci0JZW0gPSBnZXRfZXh0ZW50KGlub2RlLCBOVUxMLCAwLCBvZmYsIG1heCAtIG9mZiwgMCk7CisKKwllbSA9IGdldF9leHRlbnRfc2tpcF9ob2xlcyhpbm9kZSwgb2ZmLCBsYXN0X2Zvcl9nZXRfZXh0ZW50LAorCQkJCSAgIGdldF9leHRlbnQpOwogCWlmICghZW0pCiAJCWdvdG8gb3V0OwogCWlmIChJU19FUlIoZW0pKSB7CkBAIC0yOTYyLDE5ICszMDQ2LDE0IEBACiAJfQogCiAJd2hpbGUgKCFlbmQpIHsKLQkJaG9sZSA9IDA7Ci0JCW9mZiA9IGVtLT5zdGFydCArIGVtLT5sZW47CisJCW9mZiA9IGV4dGVudF9tYXBfZW5kKGVtKTsKIAkJaWYgKG9mZiA+PSBtYXgpCiAJCQllbmQgPSAxOwogCi0JCWlmIChlbS0+YmxvY2tfc3RhcnQgPT0gRVhURU5UX01BUF9IT0xFKSB7Ci0JCQlob2xlID0gMTsKLQkJCWdvdG8gbmV4dDsKLQkJfQotCiAJCWVtX3N0YXJ0ID0gZW0tPnN0YXJ0OwogCQllbV9sZW4gPSBlbS0+bGVuOwotCisJCWVtX2VuZCA9IGV4dGVudF9tYXBfZW5kKGVtKTsKKwkJZW1mbGFncyA9IGVtLT5mbGFnczsKIAkJZGlza28gPSAwOwogCQlmbGFncyA9IDA7CiAKQEAgLTI5OTMsMzcgKzMwNzIsMjkgQEAKIAkJaWYgKHRlc3RfYml0KEVYVEVOVF9GTEFHX0NPTVBSRVNTRUQsICZlbS0+ZmxhZ3MpKQogCQkJZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9FTkNPREVEOwogCi1uZXh0OgotCQllbWZsYWdzID0gZW0tPmZsYWdzOwogCQlmcmVlX2V4dGVudF9tYXAoZW0pOwogCQllbSA9IE5VTEw7Ci0JCWlmICghZW5kKSB7Ci0JCQllbSA9IGdldF9leHRlbnQoaW5vZGUsIE5VTEwsIDAsIG9mZiwgbWF4IC0gb2ZmLCAwKTsKLQkJCWlmICghZW0pCi0JCQkJZ290byBvdXQ7Ci0JCQlpZiAoSVNfRVJSKGVtKSkgewotCQkJCXJldCA9IFBUUl9FUlIoZW0pOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJZW1mbGFncyA9IGVtLT5mbGFnczsKLQkJfQotCi0JCWlmICh0ZXN0X2JpdChFWFRFTlRfRkxBR19WQUNBTkNZLCAmZW1mbGFncykpIHsKKwkJaWYgKChlbV9zdGFydCA+PSBsYXN0KSB8fCBlbV9sZW4gPT0gKHU2NCktMSB8fAorCQkgICAobGFzdCA9PSAodTY0KS0xICYmIGlzaXplIDw9IGVtX2VuZCkpIHsKIAkJCWZsYWdzIHw9IEZJRU1BUF9FWFRFTlRfTEFTVDsKIAkJCWVuZCA9IDE7CiAJCX0KIAotCQlpZiAoZW1fc3RhcnQgPT0gbGFzdCkgeworCQkvKiBub3cgc2NhbiBmb3J3YXJkIHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSB0aGUgbGFzdCBleHRlbnQuICovCisJCWVtID0gZ2V0X2V4dGVudF9za2lwX2hvbGVzKGlub2RlLCBvZmYsIGxhc3RfZm9yX2dldF9leHRlbnQsCisJCQkJCSAgIGdldF9leHRlbnQpOworCQlpZiAoSVNfRVJSKGVtKSkgeworCQkJcmV0ID0gUFRSX0VSUihlbSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoIWVtKSB7CiAJCQlmbGFncyB8PSBGSUVNQVBfRVhURU5UX0xBU1Q7CiAJCQllbmQgPSAxOwogCQl9Ci0KLQkJaWYgKCFob2xlKSB7Ci0JCQlyZXQgPSBmaWVtYXBfZmlsbF9uZXh0X2V4dGVudChmaWVpbmZvLCBlbV9zdGFydCwgZGlza28sCi0JCQkJCQllbV9sZW4sIGZsYWdzKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBvdXRfZnJlZTsKLQkJfQorCQlyZXQgPSBmaWVtYXBfZmlsbF9uZXh0X2V4dGVudChmaWVpbmZvLCBlbV9zdGFydCwgZGlza28sCisJCQkJCSAgICAgIGVtX2xlbiwgZmxhZ3MpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZnJlZTsKIAl9CiBvdXRfZnJlZToKIAlmcmVlX2V4dGVudF9tYXAoZW0pOwpAQCAtMzE5Miw3ICszMjYzLDEzIEBACiAJCX0KIAkJaWYgKCFQYWdlVXB0b2RhdGUocCkpCiAJCQl1cHRvZGF0ZSA9IDA7Ci0JCXVubG9ja19wYWdlKHApOworCisJCS8qCisJCSAqIHNlZSBiZWxvdyBhYm91dCBob3cgd2UgYXZvaWQgYSBuYXN0eSByYWNlIHdpdGggcmVsZWFzZSBwYWdlCisJCSAqIGFuZCB3aHkgd2UgdW5sb2NrIGxhdGVyCisJCSAqLworCQlpZiAoaSAhPSAwKQorCQkJdW5sb2NrX3BhZ2UocCk7CiAJfQogCWlmICh1cHRvZGF0ZSkKIAkJc2V0X2JpdChFWFRFTlRfQlVGRkVSX1VQVE9EQVRFLCAmZWItPmJmbGFncyk7CkBAIC0zMjE2LDkgKzMyOTMsMjYgQEAKIAlhdG9taWNfaW5jKCZlYi0+cmVmcyk7CiAJc3Bpbl91bmxvY2soJnRyZWUtPmJ1ZmZlcl9sb2NrKTsKIAlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CisKKwkvKgorCSAqIHRoZXJlIGlzIGEgcmFjZSB3aGVyZSByZWxlYXNlIHBhZ2UgbWF5IGhhdmUKKwkgKiB0cmllZCB0byBmaW5kIHRoaXMgZXh0ZW50IGJ1ZmZlciBpbiB0aGUgcmFkaXgKKwkgKiBidXQgZmFpbGVkLiAgSXQgd2lsbCB0ZWxsIHRoZSBWTSBpdCBpcyBzYWZlIHRvCisJICogcmVjbGFpbSB0aGUsIGFuZCBpdCB3aWxsIGNsZWFyIHRoZSBwYWdlIHByaXZhdGUgYml0LgorCSAqIFdlIG11c3QgbWFrZSBzdXJlIHRvIHNldCB0aGUgcGFnZSBwcml2YXRlIGJpdCBwcm9wZXJseQorCSAqIGFmdGVyIHRoZSBleHRlbnQgYnVmZmVyIGlzIGluIHRoZSByYWRpeCB0cmVlIHNvCisJICogaXQgZG9lc24ndCBnZXQgbG9zdAorCSAqLworCXNldF9wYWdlX2V4dGVudF9tYXBwZWQoZWItPmZpcnN0X3BhZ2UpOworCXNldF9wYWdlX2V4dGVudF9oZWFkKGViLT5maXJzdF9wYWdlLCBlYi0+bGVuKTsKKwlpZiAoIXBhZ2UwKQorCQl1bmxvY2tfcGFnZShlYi0+Zmlyc3RfcGFnZSk7CiAJcmV0dXJuIGViOwogCiBmcmVlX2ViOgorCWlmIChlYi0+Zmlyc3RfcGFnZSAmJiAhcGFnZTApCisJCXVubG9ja19wYWdlKGViLT5maXJzdF9wYWdlKTsKKwogCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmZWItPnJlZnMpKQogCQlyZXR1cm4gZXhpc3RzOwogCWJ0cmZzX3JlbGVhc2VfZXh0ZW50X2J1ZmZlcihlYik7CkBAIC0zMjY5LDEwICszMzYzLDExIEBACiAJCQljb250aW51ZTsKIAogCQlsb2NrX3BhZ2UocGFnZSk7CisJCVdBUk5fT04oIVBhZ2VQcml2YXRlKHBhZ2UpKTsKKworCQlzZXRfcGFnZV9leHRlbnRfbWFwcGVkKHBhZ2UpOwogCQlpZiAoaSA9PSAwKQogCQkJc2V0X3BhZ2VfZXh0ZW50X2hlYWQocGFnZSwgZWItPmxlbik7Ci0JCWVsc2UKLQkJCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgRVhURU5UX1BBR0VfUFJJVkFURSk7CiAKIAkJY2xlYXJfcGFnZV9kaXJ0eV9mb3JfaW8ocGFnZSk7CiAJCXNwaW5fbG9ja19pcnEoJnBhZ2UtPm1hcHBpbmctPnRyZWVfbG9jayk7CkBAIC0zNDYyLDYgKzM1NTcsMTMgQEAKIAogCWZvciAoaSA9IHN0YXJ0X2k7IGkgPCBudW1fcGFnZXM7IGkrKykgewogCQlwYWdlID0gZXh0ZW50X2J1ZmZlcl9wYWdlKGViLCBpKTsKKworCQlXQVJOX09OKCFQYWdlUHJpdmF0ZShwYWdlKSk7CisKKwkJc2V0X3BhZ2VfZXh0ZW50X21hcHBlZChwYWdlKTsKKwkJaWYgKGkgPT0gMCkKKwkJCXNldF9wYWdlX2V4dGVudF9oZWFkKHBhZ2UsIGViLT5sZW4pOworCiAJCWlmIChpbmNfYWxsX3BhZ2VzKQogCQkJcGFnZV9jYWNoZV9nZXQocGFnZSk7CiAJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uaCBiL2ZzL2J0cmZzL2V4dGVudF9pby5oCmluZGV4IDcwODNjZmEuLjkzMThkZmUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5oCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5oCkBAIC0xOTEsNyArMTkxLDcgQEAKIAogdTY0IGNvdW50X3JhbmdlX2JpdHMoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkgICAgIHU2NCAqc3RhcnQsIHU2NCBzZWFyY2hfZW5kLAotCQkgICAgIHU2NCBtYXhfYnl0ZXMsIHVuc2lnbmVkIGxvbmcgYml0cyk7CisJCSAgICAgdTY0IG1heF9ieXRlcywgdW5zaWduZWQgbG9uZyBiaXRzLCBpbnQgY29udGlnKTsKIAogdm9pZCBmcmVlX2V4dGVudF9zdGF0ZShzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSk7CiBpbnQgdGVzdF9yYW5nZV9iaXQoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfbWFwLmMgYi9mcy9idHJmcy9leHRlbnRfbWFwLmMKaW5kZXggYjBlMWZjZS4uMmI2YzEyZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X21hcC5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwpAQCAtNTEsOCArNTEsOCBAQAogewogCXN0cnVjdCBleHRlbnRfbWFwICplbTsKIAllbSA9IGttZW1fY2FjaGVfYWxsb2MoZXh0ZW50X21hcF9jYWNoZSwgbWFzayk7Ci0JaWYgKCFlbSB8fCBJU19FUlIoZW0pKQotCQlyZXR1cm4gZW07CisJaWYgKCFlbSkKKwkJcmV0dXJuIE5VTEw7CiAJZW0tPmluX3RyZWUgPSAwOwogCWVtLT5mbGFncyA9IDA7CiAJZW0tPmNvbXByZXNzX3R5cGUgPSBCVFJGU19DT01QUkVTU19OT05FOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS1pdGVtLmMgYi9mcy9idHJmcy9maWxlLWl0ZW0uYwppbmRleCBhNTYyYTI1Li40ZjE5YTNlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9maWxlLWl0ZW0uYworKysgYi9mcy9idHJmcy9maWxlLWl0ZW0uYwpAQCAtNTM2LDYgKzUzNiw4IEBACiAJcm9vdCA9IHJvb3QtPmZzX2luZm8tPmNzdW1fcm9vdDsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXdoaWxlICgxKSB7CiAJCWtleS5vYmplY3RpZCA9IEJUUkZTX0VYVEVOVF9DU1VNX09CSkVDVElEOwpAQCAtNTQ4LDcgKzU1MCwxMCBAQAogCQkJaWYgKHBhdGgtPnNsb3RzWzBdID09IDApCiAJCQkJZ290byBvdXQ7CiAJCQlwYXRoLT5zbG90c1swXS0tOworCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKKwkJCWdvdG8gb3V0OwogCQl9CisKIAkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwogCQlidHJmc19pdGVtX2tleV90b19jcHUobGVhZiwgJmtleSwgcGF0aC0+c2xvdHNbMF0pOwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9maWxlLmMgYi9mcy9idHJmcy9maWxlLmMKaW5kZXggYzgwMGQ1OC4uNzA4NDE0MCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZmlsZS5jCisrKyBiL2ZzL2J0cmZzL2ZpbGUuYwpAQCAtMTg2LDYgKzE4Niw3IEBACiAJCQlzcGxpdCA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOwogCQlpZiAoIXNwbGl0MikKIAkJCXNwbGl0MiA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOworCQlCVUdfT04oIXNwbGl0IHx8ICFzcGxpdDIpOwogCiAJCXdyaXRlX2xvY2soJmVtX3RyZWUtPmxvY2spOwogCQllbSA9IGxvb2t1cF9leHRlbnRfbWFwcGluZyhlbV90cmVlLCBzdGFydCwgbGVuKTsKQEAgLTc5Myw4ICs3OTQsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKIAkJcGFnZXNbaV0gPSBncmFiX2NhY2hlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5kZXggKyBpKTsKIAkJaWYgKCFwYWdlc1tpXSkgewotCQkJZXJyID0gLUVOT01FTTsKLQkJCUJVR19PTigxKTsKKwkJCWludCBjOworCQkJZm9yIChjID0gaSAtIDE7IGMgPj0gMDsgYy0tKSB7CisJCQkJdW5sb2NrX3BhZ2UocGFnZXNbY10pOworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlc1tjXSk7CisJCQl9CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2VzW2ldKTsKIAl9CkBAIC05NDYsNiArOTUxLDEwIEBACiAJCSAgICAgUEFHRV9DQUNIRV9TSVpFLCBQQUdFX0NBQ0hFX1NJWkUgLwogCQkgICAgIChzaXplb2Yoc3RydWN0IHBhZ2UgKikpKTsKIAlwYWdlcyA9IGttYWxsb2MobnJwdHJzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2VzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAogCS8qIGdlbmVyaWNfd3JpdGVfY2hlY2tzIGNhbiBjaGFuZ2Ugb3VyIHBvcyAqLwogCXN0YXJ0X3BvcyA9IHBvczsKQEAgLTk4NCw4ICs5OTMsOCBAQAogCQlzaXplX3Qgd3JpdGVfYnl0ZXMgPSBtaW4oaW92X2l0ZXJfY291bnQoJmkpLAogCQkJCQkgbnJwdHJzICogKHNpemVfdClQQUdFX0NBQ0hFX1NJWkUgLQogCQkJCQkgb2Zmc2V0KTsKLQkJc2l6ZV90IG51bV9wYWdlcyA9ICh3cml0ZV9ieXRlcyArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+Ci0JCQkJCVBBR0VfQ0FDSEVfU0hJRlQ7CisJCXNpemVfdCBudW1fcGFnZXMgPSAod3JpdGVfYnl0ZXMgKyBvZmZzZXQgKworCQkJCSAgICBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCiAJCVdBUk5fT04obnVtX3BhZ2VzID4gbnJwdHJzKTsKIAkJbWVtc2V0KHBhZ2VzLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucnB0cnMpOwpAQCAtMTAxNSw4ICsxMDI0LDggQEAKIAogCQljb3BpZWQgPSBidHJmc19jb3B5X2Zyb21fdXNlcihwb3MsIG51bV9wYWdlcywKIAkJCQkJICAgd3JpdGVfYnl0ZXMsIHBhZ2VzLCAmaSk7Ci0JCWRpcnR5X3BhZ2VzID0gKGNvcGllZCArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+Ci0JCQkJCVBBR0VfQ0FDSEVfU0hJRlQ7CisJCWRpcnR5X3BhZ2VzID0gKGNvcGllZCArIG9mZnNldCArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+CisJCQkJUEFHRV9DQUNIRV9TSElGVDsKIAogCQlpZiAobnVtX3BhZ2VzID4gZGlydHlfcGFnZXMpIHsKIAkJCWlmIChjb3BpZWQgPiAwKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCmluZGV4IDYwZDY4NDIuLmEwMzkwNjUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYworKysgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKQEAgLTk4NywxMSArOTg3LDE4IEBACiAJcmV0dXJuIGVudHJ5OwogfQogCi1zdGF0aWMgdm9pZCB1bmxpbmtfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJICAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm8pCitzdGF0aWMgaW5saW5lIHZvaWQKK19fdW5saW5rX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvKQogewogCXJiX2VyYXNlKCZpbmZvLT5vZmZzZXRfaW5kZXgsICZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQpOwogCWJsb2NrX2dyb3VwLT5mcmVlX2V4dGVudHMtLTsKK30KKworc3RhdGljIHZvaWQgdW5saW5rX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvKQoreworCV9fdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGluZm8pOwogCWJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlIC09IGluZm8tPmJ5dGVzOwogfQogCkBAIC0xMDE2LDE0ICsxMDIzLDE4IEBACiAJdTY0IG1heF9ieXRlczsKIAl1NjQgYml0bWFwX2J5dGVzOwogCXU2NCBleHRlbnRfYnl0ZXM7CisJdTY0IHNpemUgPSBibG9ja19ncm91cC0+a2V5Lm9mZnNldDsKIAogCS8qCiAJICogVGhlIGdvYWwgaXMgdG8ga2VlcCB0aGUgdG90YWwgYW1vdW50IG9mIG1lbW9yeSB1c2VkIHBlciAxZ2Igb2Ygc3BhY2UKIAkgKiBhdCBvciBiZWxvdyAzMmssIHNvIHdlIG5lZWQgdG8gYWRqdXN0IGhvdyBtdWNoIG1lbW9yeSB3ZSBhbGxvdyB0byBiZQogCSAqIHVzZWQgYnkgZXh0ZW50IGJhc2VkIGZyZWUgc3BhY2UgdHJhY2tpbmcKIAkgKi8KLQltYXhfYnl0ZXMgPSBNQVhfQ0FDSEVfQllURVNfUEVSX0dJRyAqCi0JCShkaXY2NF91NjQoYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQsIDEwMjQgKiAxMDI0ICogMTAyNCkpOworCWlmIChzaXplIDwgMTAyNCAqIDEwMjQgKiAxMDI0KQorCQltYXhfYnl0ZXMgPSBNQVhfQ0FDSEVfQllURVNfUEVSX0dJRzsKKwllbHNlCisJCW1heF9ieXRlcyA9IE1BWF9DQUNIRV9CWVRFU19QRVJfR0lHICoKKwkJCWRpdjY0X3U2NChzaXplLCAxMDI0ICogMTAyNCAqIDEwMjQpOwogCiAJLyoKIAkgKiB3ZSB3YW50IHRvIGFjY291bnQgZm9yIDEgbW9yZSBiaXRtYXAgdGhhbiB3aGF0IHdlIGhhdmUgc28gd2UgY2FuIG1ha2UKQEAgLTExNzEsNiArMTE4MiwxNiBAQAogCXJlY2FsY3VsYXRlX3RocmVzaG9sZHMoYmxvY2tfZ3JvdXApOwogfQogCitzdGF0aWMgdm9pZCBmcmVlX2JpdG1hcChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmJpdG1hcF9pbmZvKQoreworCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBiaXRtYXBfaW5mbyk7CisJa2ZyZWUoYml0bWFwX2luZm8tPmJpdG1hcCk7CisJa2ZyZWUoYml0bWFwX2luZm8pOworCWJsb2NrX2dyb3VwLT50b3RhbF9iaXRtYXBzLS07CisJcmVjYWxjdWxhdGVfdGhyZXNob2xkcyhibG9ja19ncm91cCk7Cit9CisKIHN0YXRpYyBub2lubGluZSBpbnQgcmVtb3ZlX2Zyb21fYml0bWFwKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCiAJCQkgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqYml0bWFwX2luZm8sCiAJCQkgICAgICB1NjQgKm9mZnNldCwgdTY0ICpieXRlcykKQEAgLTExOTUsNiArMTIxNiw3IEBACiAJICovCiAJc2VhcmNoX3N0YXJ0ID0gKm9mZnNldDsKIAlzZWFyY2hfYnl0ZXMgPSAqYnl0ZXM7CisJc2VhcmNoX2J5dGVzID0gbWluKHNlYXJjaF9ieXRlcywgZW5kIC0gc2VhcmNoX3N0YXJ0ICsgMSk7CiAJcmV0ID0gc2VhcmNoX2JpdG1hcChibG9ja19ncm91cCwgYml0bWFwX2luZm8sICZzZWFyY2hfc3RhcnQsCiAJCQkgICAgJnNlYXJjaF9ieXRlcyk7CiAJQlVHX09OKHJldCA8IDAgfHwgc2VhcmNoX3N0YXJ0ICE9ICpvZmZzZXQpOwpAQCAtMTIxMSwxMyArMTIzMyw4IEBACiAKIAlpZiAoKmJ5dGVzKSB7CiAJCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfbmV4dCgmYml0bWFwX2luZm8tPm9mZnNldF9pbmRleCk7Ci0JCWlmICghYml0bWFwX2luZm8tPmJ5dGVzKSB7Ci0JCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgYml0bWFwX2luZm8pOwotCQkJa2ZyZWUoYml0bWFwX2luZm8tPmJpdG1hcCk7Ci0JCQlrZnJlZShiaXRtYXBfaW5mbyk7Ci0JCQlibG9ja19ncm91cC0+dG90YWxfYml0bWFwcy0tOwotCQkJcmVjYWxjdWxhdGVfdGhyZXNob2xkcyhibG9ja19ncm91cCk7Ci0JCX0KKwkJaWYgKCFiaXRtYXBfaW5mby0+Ynl0ZXMpCisJCQlmcmVlX2JpdG1hcChibG9ja19ncm91cCwgYml0bWFwX2luZm8pOwogCiAJCS8qCiAJCSAqIG5vIGVudHJ5IGFmdGVyIHRoaXMgYml0bWFwLCBidXQgd2Ugc3RpbGwgaGF2ZSBieXRlcyB0bwpAQCAtMTI1MCwxMyArMTI2Nyw4IEBACiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlnb3RvIGFnYWluOwotCX0gZWxzZSBpZiAoIWJpdG1hcF9pbmZvLT5ieXRlcykgewotCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgYml0bWFwX2luZm8pOwotCQlrZnJlZShiaXRtYXBfaW5mby0+Yml0bWFwKTsKLQkJa2ZyZWUoYml0bWFwX2luZm8pOwotCQlibG9ja19ncm91cC0+dG90YWxfYml0bWFwcy0tOwotCQlyZWNhbGN1bGF0ZV90aHJlc2hvbGRzKGJsb2NrX2dyb3VwKTsKLQl9CisJfSBlbHNlIGlmICghYml0bWFwX2luZm8tPmJ5dGVzKQorCQlmcmVlX2JpdG1hcChibG9ja19ncm91cCwgYml0bWFwX2luZm8pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzU5LDIyICsxMzcxLDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGJ0cmZzX2FkZF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQorYm9vbCB0cnlfbWVyZ2VfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbywgYm9vbCB1cGRhdGVfc3RhdCkKIHsKLQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqcmlnaHRfaW5mbyA9IE5VTEw7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmxlZnRfaW5mbyA9IE5VTEw7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm8gPSBOVUxMOwotCWludCByZXQgPSAwOwotCi0JaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBidHJmc19mcmVlX3NwYWNlKSwgR0ZQX05PRlMpOwotCWlmICghaW5mbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpbmZvLT5vZmZzZXQgPSBvZmZzZXQ7Ci0JaW5mby0+Ynl0ZXMgPSBieXRlczsKLQotCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmxlZnRfaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqcmlnaHRfaW5mbzsKKwlib29sIG1lcmdlZCA9IGZhbHNlOworCXU2NCBvZmZzZXQgPSBpbmZvLT5vZmZzZXQ7CisJdTY0IGJ5dGVzID0gaW5mby0+Ynl0ZXM7CiAKIAkvKgogCSAqIGZpcnN0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGlzIGZyZWUgc3BhY2UgYWRqYWNlbnQgdG8gdGhlIHJhbmdlIHdlCkBAIC0xMzg4LDM3ICsxMzkyLDYyIEBACiAJZWxzZQogCQlsZWZ0X2luZm8gPSB0cmVlX3NlYXJjaF9vZmZzZXQoYmxvY2tfZ3JvdXAsIG9mZnNldCAtIDEsIDAsIDApOwogCi0JLyoKLQkgKiBJZiB0aGVyZSB3YXMgbm8gZXh0ZW50IGRpcmVjdGx5IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IG9mIHRoaXMgbmV3Ci0JICogZXh0ZW50IHRoZW4gd2Uga25vdyB3ZSdyZSBnb2luZyB0byBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3IGV4dGVudCwgc28KLQkgKiBiZWZvcmUgd2UgZG8gdGhhdCBzZWUgaWYgd2UgbmVlZCB0byBkcm9wIHRoaXMgaW50byBhIGJpdG1hcAotCSAqLwotCWlmICgoIWxlZnRfaW5mbyB8fCBsZWZ0X2luZm8tPmJpdG1hcCkgJiYKLQkgICAgKCFyaWdodF9pbmZvIHx8IHJpZ2h0X2luZm8tPmJpdG1hcCkpIHsKLQkJcmV0ID0gaW5zZXJ0X2ludG9fYml0bWFwKGJsb2NrX2dyb3VwLCBpbmZvKTsKLQotCQlpZiAocmV0IDwgMCkgewotCQkJZ290byBvdXQ7Ci0JCX0gZWxzZSBpZiAocmV0KSB7Ci0JCQlyZXQgPSAwOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KIAlpZiAocmlnaHRfaW5mbyAmJiAhcmlnaHRfaW5mby0+Yml0bWFwKSB7Ci0JCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCByaWdodF9pbmZvKTsKKwkJaWYgKHVwZGF0ZV9zdGF0KQorCQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIHJpZ2h0X2luZm8pOworCQllbHNlCisJCQlfX3VubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCByaWdodF9pbmZvKTsKIAkJaW5mby0+Ynl0ZXMgKz0gcmlnaHRfaW5mby0+Ynl0ZXM7CiAJCWtmcmVlKHJpZ2h0X2luZm8pOworCQltZXJnZWQgPSB0cnVlOwogCX0KIAogCWlmIChsZWZ0X2luZm8gJiYgIWxlZnRfaW5mby0+Yml0bWFwICYmCiAJICAgIGxlZnRfaW5mby0+b2Zmc2V0ICsgbGVmdF9pbmZvLT5ieXRlcyA9PSBvZmZzZXQpIHsKLQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGxlZnRfaW5mbyk7CisJCWlmICh1cGRhdGVfc3RhdCkKKwkJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBsZWZ0X2luZm8pOworCQllbHNlCisJCQlfX3VubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBsZWZ0X2luZm8pOwogCQlpbmZvLT5vZmZzZXQgPSBsZWZ0X2luZm8tPm9mZnNldDsKIAkJaW5mby0+Ynl0ZXMgKz0gbGVmdF9pbmZvLT5ieXRlczsKIAkJa2ZyZWUobGVmdF9pbmZvKTsKKwkJbWVyZ2VkID0gdHJ1ZTsKIAl9CiAKKwlyZXR1cm4gbWVyZ2VkOworfQorCitpbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMpCit7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm87CisJaW50IHJldCA9IDA7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UpLCBHRlBfTk9GUyk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluZm8tPm9mZnNldCA9IG9mZnNldDsKKwlpbmZvLT5ieXRlcyA9IGJ5dGVzOworCisJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKworCWlmICh0cnlfbWVyZ2VfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbywgdHJ1ZSkpCisJCWdvdG8gbGluazsKKworCS8qCisJICogVGhlcmUgd2FzIG5vIGV4dGVudCBkaXJlY3RseSB0byB0aGUgbGVmdCBvciByaWdodCBvZiB0aGlzIG5ldworCSAqIGV4dGVudCB0aGVuIHdlIGtub3cgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyBleHRlbnQsIHNvCisJICogYmVmb3JlIHdlIGRvIHRoYXQgc2VlIGlmIHdlIG5lZWQgdG8gZHJvcCB0aGlzIGludG8gYSBiaXRtYXAKKwkgKi8KKwlyZXQgPSBpbnNlcnRfaW50b19iaXRtYXAoYmxvY2tfZ3JvdXAsIGluZm8pOworCWlmIChyZXQgPCAwKSB7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAocmV0KSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KK2xpbms6CiAJcmV0ID0gbGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbmZvKTsKIAlpZiAocmV0KQogCQlrZnJlZShpbmZvKTsKQEAgLTE2MjEsNiArMTY1MCw3IEBACiAJCW5vZGUgPSByYl9uZXh0KCZlbnRyeS0+b2Zmc2V0X2luZGV4KTsKIAkJcmJfZXJhc2UoJmVudHJ5LT5vZmZzZXRfaW5kZXgsICZjbHVzdGVyLT5yb290KTsKIAkJQlVHX09OKGVudHJ5LT5iaXRtYXApOworCQl0cnlfbWVyZ2VfZnJlZV9zcGFjZShibG9ja19ncm91cCwgZW50cnksIGZhbHNlKTsKIAkJdHJlZV9pbnNlcnRfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsCiAJCQkJICAgZW50cnktPm9mZnNldCwgJmVudHJ5LT5vZmZzZXRfaW5kZXgsIDApOwogCX0KQEAgLTE2ODUsMTMgKzE3MTUsOCBAQAogCXJldCA9IG9mZnNldDsKIAlpZiAoZW50cnktPmJpdG1hcCkgewogCQliaXRtYXBfY2xlYXJfYml0cyhibG9ja19ncm91cCwgZW50cnksIG9mZnNldCwgYnl0ZXMpOwotCQlpZiAoIWVudHJ5LT5ieXRlcykgewotCQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKLQkJCWtmcmVlKGVudHJ5LT5iaXRtYXApOwotCQkJa2ZyZWUoZW50cnkpOwotCQkJYmxvY2tfZ3JvdXAtPnRvdGFsX2JpdG1hcHMtLTsKLQkJCXJlY2FsY3VsYXRlX3RocmVzaG9sZHMoYmxvY2tfZ3JvdXApOwotCQl9CisJCWlmICghZW50cnktPmJ5dGVzKQorCQkJZnJlZV9iaXRtYXAoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKIAl9IGVsc2UgewogCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgZW50cnkpOwogCQllbnRyeS0+b2Zmc2V0ICs9IGJ5dGVzOwpAQCAtMTc4OSw2ICsxODE0LDggQEAKIAogCXJldCA9IHNlYXJjaF9zdGFydDsKIAliaXRtYXBfY2xlYXJfYml0cyhibG9ja19ncm91cCwgZW50cnksIHJldCwgYnl0ZXMpOworCWlmIChlbnRyeS0+Ynl0ZXMgPT0gMCkKKwkJZnJlZV9iaXRtYXAoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKIG91dDoKIAlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CiAJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOwpAQCAtMTg0MiwxNSArMTg2OSwyNiBAQAogCQllbnRyeS0+b2Zmc2V0ICs9IGJ5dGVzOwogCQllbnRyeS0+Ynl0ZXMgLT0gYnl0ZXM7CiAKLQkJaWYgKGVudHJ5LT5ieXRlcyA9PSAwKSB7CisJCWlmIChlbnRyeS0+Ynl0ZXMgPT0gMCkKIAkJCXJiX2VyYXNlKCZlbnRyeS0+b2Zmc2V0X2luZGV4LCAmY2x1c3Rlci0+cm9vdCk7Ci0JCQlrZnJlZShlbnRyeSk7Ci0JCX0KIAkJYnJlYWs7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKIAorCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisKKwlibG9ja19ncm91cC0+ZnJlZV9zcGFjZSAtPSBieXRlczsKKwlpZiAoZW50cnktPmJ5dGVzID09IDApIHsKKwkJYmxvY2tfZ3JvdXAtPmZyZWVfZXh0ZW50cy0tOworCQlrZnJlZShlbnRyeSk7CisJfQorCisJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggMTYwYjU1Yi4uMGVmZGI2NSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC00MTYsNyArNDE2LDcgQEAKIAl9CiAJaWYgKHN0YXJ0ID09IDApIHsKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCQlCVUdfT04oIXRyYW5zKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAkJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAKQEAgLTYxMiw2ICs2MTIsNyBAQAogCQkJICAgIEdGUF9OT0ZTKTsKIAogCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9leHRlbnQodHJhbnMsIHJvb3QsCiAJCQkJCSAgIGFzeW5jX2V4dGVudC0+Y29tcHJlc3NlZF9zaXplLAogCQkJCQkgICBhc3luY19leHRlbnQtPmNvbXByZXNzZWRfc2l6ZSwKQEAgLTY0Myw2ICs2NDQsNyBAQAogCQkJCQlhc3luY19leHRlbnQtPnJhbV9zaXplIC0gMSwgMCk7CiAKIAkJZW0gPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKKwkJQlVHX09OKCFlbSk7CiAJCWVtLT5zdGFydCA9IGFzeW5jX2V4dGVudC0+c3RhcnQ7CiAJCWVtLT5sZW4gPSBhc3luY19leHRlbnQtPnJhbV9zaXplOwogCQllbS0+b3JpZ19zdGFydCA9IGVtLT5zdGFydDsKQEAgLTc3MSw3ICs3NzMsNyBAQAogCiAJQlVHX09OKHJvb3QgPT0gcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290KTsKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JQlVHX09OKCF0cmFucyk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCkBAIC04MTksNiArODIxLDcgQEAKIAkJQlVHX09OKHJldCk7CiAKIAkJZW0gPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKKwkJQlVHX09OKCFlbSk7CiAJCWVtLT5zdGFydCA9IHN0YXJ0OwogCQllbS0+b3JpZ19zdGFydCA9IGVtLT5zdGFydDsKIAkJcmFtX3NpemUgPSBpbnMub2Zmc2V0OwpAQCAtMTA0OSw3ICsxMDUyLDcgQEAKIAl9IGVsc2UgewogCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJfQotCUJVR19PTighdHJhbnMpOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCWNvd19zdGFydCA9ICh1NjQpLTE7CiAJY3VyX29mZnNldCA9IHN0YXJ0OwpAQCAtMTE2OCw2ICsxMTcxLDcgQEAKIAkJCXN0cnVjdCBleHRlbnRfbWFwX3RyZWUgKmVtX3RyZWU7CiAJCQllbV90cmVlID0gJkJUUkZTX0koaW5vZGUpLT5leHRlbnRfdHJlZTsKIAkJCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CisJCQlCVUdfT04oIWVtKTsKIAkJCWVtLT5zdGFydCA9IGN1cl9vZmZzZXQ7CiAJCQllbS0+b3JpZ19zdGFydCA9IGVtLT5zdGFydDsKIAkJCWVtLT5sZW4gPSBudW1fYnl0ZXM7CkBAIC0xNTU3LDYgKzE1NjEsNyBAQAogb3V0X3BhZ2U6CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCWtmcmVlKGZpeHVwKTsKIH0KIAogLyoKQEAgLTE3MDMsNyArMTcwOCw3IEBACiAJCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290LCAxKTsKIAkJCWVsc2UKIAkJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JCQlCVUdfT04oIXRyYW5zKTsKKwkJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCQkJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAJCQlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKQEAgLTE3MjAsNiArMTcyNSw3IEBACiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCwgMSk7CiAJZWxzZQogCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCkBAIC0xOTA3LDcgKzE5MTMsNyBAQAogCiAJcHJpdmF0ZSA9IDA7CiAJaWYgKGNvdW50X3JhbmdlX2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb19mYWlsdXJlX3RyZWUsICZwcml2YXRlLAotCQkJICAgICAodTY0KS0xLCAxLCBFWFRFTlRfRElSVFkpKSB7CisJCQkgICAgICh1NjQpLTEsIDEsIEVYVEVOVF9ESVJUWSwgMCkpIHsKIAkJcmV0ID0gZ2V0X3N0YXRlX3ByaXZhdGUoJkJUUkZTX0koaW5vZGUpLT5pb19mYWlsdXJlX3RyZWUsCiAJCQkJCXN0YXJ0LCAmcHJpdmF0ZV9mYWlsdXJlKTsKIAkJaWYgKHJldCA9PSAwKSB7CkBAIC0yMzU0LDYgKzIzNjAsNyBAQAogCQkgKi8KIAkJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpIHsKIAkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCQlidHJmc19vcnBoYW5fZGVsKHRyYW5zLCBpbm9kZSk7CiAJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQkJaXB1dChpbm9kZSk7CkBAIC0yMzgxLDYgKzIzODgsNyBAQAogCiAJaWYgKHJvb3QtPm9ycGhhbl9ibG9ja19yc3YgfHwgcm9vdC0+b3JwaGFuX2l0ZW1faW5zZXJ0ZWQpIHsKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJfQogCkBAIC0yNjQxLDcgKzI2NDksNyBAQAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOworCQlnb3RvIG91dDsKIAl9CiAKIAlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CkBAIC0yNzE0LDkgKzI3MjIsMTAgQEAKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqZWI7CiAJaW50IGxldmVsOwogCXU2NCByZWZzID0gMTsKLQlpbnQgdW5pbml0aWFsaXplZF92YXIocmV0KTsKIAogCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IEJUUkZTX01BWF9MRVZFTDsgbGV2ZWwrKykgeworCQlpbnQgcmV0OworCiAJCWlmICghcGF0aC0+bm9kZXNbbGV2ZWxdKQogCQkJYnJlYWs7CiAJCWViID0gcGF0aC0+bm9kZXNbbGV2ZWxdOwpAQCAtMjcyNyw3ICsyNzM2LDcgQEAKIAkJaWYgKHJlZnMgPiAxKQogCQkJcmV0dXJuIDE7CiAJfQotCXJldHVybiByZXQ7IC8qIFhYWCBjYWxsZXJzPyAqLworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNDEzNCw3ICs0MTQzLDcgQEAKIAl9CiAJc3JjdV9yZWFkX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+c3Vidm9sX3NyY3UsIGluZGV4KTsKIAotCWlmIChyb290ICE9IHN1Yl9yb290KSB7CisJaWYgKCFJU19FUlIoaW5vZGUpICYmIHJvb3QgIT0gc3ViX3Jvb3QpIHsKIAkJZG93bl9yZWFkKCZyb290LT5mc19pbmZvLT5jbGVhbnVwX3dvcmtfc2VtKTsKIAkJaWYgKCEoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQogCQkJYnRyZnNfb3JwaGFuX2NsZWFudXAoc3ViX3Jvb3QpOwpAQCAtNDM0Nyw2ICs0MzU2LDggQEAKIAkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCwgMSk7CiAJCWVsc2UKIAkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJaWYgKElTX0VSUih0cmFucykpCisJCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCQlpZiAobm9sb2NrKQogCQkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uX25vbG9jayh0cmFucywgcm9vdCk7CkBAIC00MzcyLDYgKzQzODMsNyBAQAogCQlyZXR1cm47CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCiAJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CkBAIC01MTc2LDYgKzUxODgsOCBAQAogCQkJCWVtID0gTlVMTDsKIAkJCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CiAJCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQkJCWlmIChJU19FUlIodHJhbnMpKQorCQkJCQlyZXR1cm4gRVJSX0NBU1QodHJhbnMpOwogCQkJCWdvdG8gYWdhaW47CiAJCQl9CiAJCQltYXAgPSBrbWFwKHBhZ2UpOwpAQCAtNTI2Niw2ICs1MjgwLDEyOCBAQAogCXJldHVybiBlbTsKIH0KIAorc3RydWN0IGV4dGVudF9tYXAgKmJ0cmZzX2dldF9leHRlbnRfZmllbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkgICBzaXplX3QgcGdfb2Zmc2V0LCB1NjQgc3RhcnQsIHU2NCBsZW4sCisJCQkJCSAgIGludCBjcmVhdGUpCit7CisJc3RydWN0IGV4dGVudF9tYXAgKmVtOworCXN0cnVjdCBleHRlbnRfbWFwICpob2xlX2VtID0gTlVMTDsKKwl1NjQgcmFuZ2Vfc3RhcnQgPSBzdGFydDsKKwl1NjQgZW5kOworCXU2NCBmb3VuZDsKKwl1NjQgZm91bmRfZW5kOworCWludCBlcnIgPSAwOworCisJZW0gPSBidHJmc19nZXRfZXh0ZW50KGlub2RlLCBwYWdlLCBwZ19vZmZzZXQsIHN0YXJ0LCBsZW4sIGNyZWF0ZSk7CisJaWYgKElTX0VSUihlbSkpCisJCXJldHVybiBlbTsKKwlpZiAoZW0pIHsKKwkJLyoKKwkJICogaWYgb3VyIGVtIG1hcHMgdG8gYSBob2xlLCB0aGVyZSBtaWdodAorCQkgKiBhY3R1YWxseSBiZSBkZWxhbGxvYyBieXRlcyBiZWhpbmQgaXQKKwkJICovCisJCWlmIChlbS0+YmxvY2tfc3RhcnQgIT0gRVhURU5UX01BUF9IT0xFKQorCQkJcmV0dXJuIGVtOworCQllbHNlCisJCQlob2xlX2VtID0gZW07CisJfQorCisJLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIHdyYXBwZWQgKGxlbiA9PSAtMSBvciBzaW1pbGFyKSAqLworCWVuZCA9IHN0YXJ0ICsgbGVuOworCWlmIChlbmQgPCBzdGFydCkKKwkJZW5kID0gKHU2NCktMTsKKwllbHNlCisJCWVuZCAtPSAxOworCisJZW0gPSBOVUxMOworCisJLyogb2ssIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLCBsZXRzIGxvb2sgZm9yIGRlbGFsbG9jICovCisJZm91bmQgPSBjb3VudF9yYW5nZV9iaXRzKCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwgJnJhbmdlX3N0YXJ0LAorCQkJCSBlbmQsIGxlbiwgRVhURU5UX0RFTEFMTE9DLCAxKTsKKwlmb3VuZF9lbmQgPSByYW5nZV9zdGFydCArIGZvdW5kOworCWlmIChmb3VuZF9lbmQgPCByYW5nZV9zdGFydCkKKwkJZm91bmRfZW5kID0gKHU2NCktMTsKKworCS8qCisJICogd2UgZGlkbid0IGZpbmQgYW55dGhpbmcgdXNlZnVsLCByZXR1cm4KKwkgKiB0aGUgb3JpZ2luYWwgcmVzdWx0cyBmcm9tIGdldF9leHRlbnQoKQorCSAqLworCWlmIChyYW5nZV9zdGFydCA+IGVuZCB8fCBmb3VuZF9lbmQgPD0gc3RhcnQpIHsKKwkJZW0gPSBob2xlX2VtOworCQlob2xlX2VtID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogYWRqdXN0IHRoZSByYW5nZV9zdGFydCB0byBtYWtlIHN1cmUgaXQgZG9lc24ndAorCSAqIGdvIGJhY2t3YXJkcyBmcm9tIHRoZSBzdGFydCB0aGV5IHBhc3NlZCBpbgorCSAqLworCXJhbmdlX3N0YXJ0ID0gbWF4KHN0YXJ0LHJhbmdlX3N0YXJ0KTsKKwlmb3VuZCA9IGZvdW5kX2VuZCAtIHJhbmdlX3N0YXJ0OworCisJaWYgKGZvdW5kID4gMCkgeworCQl1NjQgaG9sZV9zdGFydCA9IHN0YXJ0OworCQl1NjQgaG9sZV9sZW4gPSBsZW47CisKKwkJZW0gPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKKwkJaWYgKCFlbSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCS8qCisJCSAqIHdoZW4gYnRyZnNfZ2V0X2V4dGVudCBjYW4ndCBmaW5kIGFueXRoaW5nIGl0CisJCSAqIHJldHVybnMgb25lIGh1Z2UgaG9sZQorCQkgKgorCQkgKiBtYWtlIHN1cmUgd2hhdCBpdCBmb3VuZCByZWFsbHkgZml0cyBvdXIgcmFuZ2UsIGFuZAorCQkgKiBhZGp1c3QgdG8gbWFrZSBzdXJlIGl0IGlzIGJhc2VkIG9uIHRoZSBzdGFydCBmcm9tCisJCSAqIHRoZSBjYWxsZXIKKwkJICovCisJCWlmIChob2xlX2VtKSB7CisJCQl1NjQgY2FsY19lbmQgPSBleHRlbnRfbWFwX2VuZChob2xlX2VtKTsKKworCQkJaWYgKGNhbGNfZW5kIDw9IHN0YXJ0IHx8IChob2xlX2VtLT5zdGFydCA+IGVuZCkpIHsKKwkJCQlmcmVlX2V4dGVudF9tYXAoaG9sZV9lbSk7CisJCQkJaG9sZV9lbSA9IE5VTEw7CisJCQl9IGVsc2UgeworCQkJCWhvbGVfc3RhcnQgPSBtYXgoaG9sZV9lbS0+c3RhcnQsIHN0YXJ0KTsKKwkJCQlob2xlX2xlbiA9IGNhbGNfZW5kIC0gaG9sZV9zdGFydDsKKwkJCX0KKwkJfQorCQllbS0+YmRldiA9IE5VTEw7CisJCWlmIChob2xlX2VtICYmIHJhbmdlX3N0YXJ0ID4gaG9sZV9zdGFydCkgeworCQkJLyogb3VyIGhvbGUgc3RhcnRzIGJlZm9yZSBvdXIgZGVsYWxsb2MsIHNvIHdlCisJCQkgKiBoYXZlIHRvIHJldHVybiBqdXN0IHRoZSBwYXJ0cyBvZiB0aGUgaG9sZQorCQkJICogdGhhdCBnbyB1bnRpbCAgdGhlIGRlbGFsbG9jIHN0YXJ0cworCQkJICovCisJCQllbS0+bGVuID0gbWluKGhvbGVfbGVuLAorCQkJCSAgICAgIHJhbmdlX3N0YXJ0IC0gaG9sZV9zdGFydCk7CisJCQllbS0+c3RhcnQgPSBob2xlX3N0YXJ0OworCQkJZW0tPm9yaWdfc3RhcnQgPSBob2xlX3N0YXJ0OworCQkJLyoKKwkJCSAqIGRvbid0IGFkanVzdCBibG9jayBzdGFydCBhdCBhbGwsCisJCQkgKiBpdCBpcyBmaXhlZCBhdCBFWFRFTlRfTUFQX0hPTEUKKwkJCSAqLworCQkJZW0tPmJsb2NrX3N0YXJ0ID0gaG9sZV9lbS0+YmxvY2tfc3RhcnQ7CisJCQllbS0+YmxvY2tfbGVuID0gaG9sZV9sZW47CisJCX0gZWxzZSB7CisJCQllbS0+c3RhcnQgPSByYW5nZV9zdGFydDsKKwkJCWVtLT5sZW4gPSBmb3VuZDsKKwkJCWVtLT5vcmlnX3N0YXJ0ID0gcmFuZ2Vfc3RhcnQ7CisJCQllbS0+YmxvY2tfc3RhcnQgPSBFWFRFTlRfTUFQX0RFTEFMTE9DOworCQkJZW0tPmJsb2NrX2xlbiA9IGZvdW5kOworCQl9CisJfSBlbHNlIGlmIChob2xlX2VtKSB7CisJCXJldHVybiBob2xlX2VtOworCX0KK291dDoKKworCWZyZWVfZXh0ZW50X21hcChob2xlX2VtKTsKKwlpZiAoZXJyKSB7CisJCWZyZWVfZXh0ZW50X21hcChlbSk7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCXJldHVybiBlbTsKK30KKwogc3RhdGljIHN0cnVjdCBleHRlbnRfbWFwICpidHJmc19uZXdfZXh0ZW50X2RpcmVjdChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkJICB1NjQgc3RhcnQsIHU2NCBsZW4pCiB7CkBAIC01MjgwLDggKzU0MTYsOCBAQAogCWJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKGlub2RlLCBzdGFydCwgc3RhcnQgKyBsZW4gLSAxLCAwKTsKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKLQlpZiAoIXRyYW5zKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJcmV0dXJuIEVSUl9DQVNUKHRyYW5zKTsKIAogCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCkBAIC01NTA1LDcgKzU2NDEsNyBAQAogCQkgKiB3aGlsZSB3ZSBsb29rIGZvciBub2NvdyBjcm9zcyByZWZzCiAJCSAqLwogCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7Ci0JCWlmICghdHJhbnMpCisJCWlmIChJU19FUlIodHJhbnMpKQogCQkJZ290byBtdXN0X2NvdzsKIAogCQlpZiAoY2FuX25vY293X29kaXJlY3QodHJhbnMsIGlub2RlLCBzdGFydCwgbGVuKSA9PSAxKSB7CkBAIC01NjQwLDcgKzU3NzYsNyBAQAogCUJVR19PTighb3JkZXJlZCk7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JaWYgKCF0cmFucykgeworCWlmIChJU19FUlIodHJhbnMpKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTYwODgsNyArNjIyNCw3IEBACiBzdGF0aWMgaW50IGJ0cmZzX2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmllbWFwX2V4dGVudF9pbmZvICpmaWVpbmZvLAogCQlfX3U2NCBzdGFydCwgX191NjQgbGVuKQogewotCXJldHVybiBleHRlbnRfZmllbWFwKGlub2RlLCBmaWVpbmZvLCBzdGFydCwgbGVuLCBidHJmc19nZXRfZXh0ZW50KTsKKwlyZXR1cm4gZXh0ZW50X2ZpZW1hcChpbm9kZSwgZmllaW5mbywgc3RhcnQsIGxlbiwgYnRyZnNfZ2V0X2V4dGVudF9maWVtYXApOwogfQogCiBpbnQgYnRyZnNfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmMKaW5kZXggYTUwNmEyMi4uNWZkYjJhYiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW9jdGwuYworKysgYi9mcy9idHJmcy9pb2N0bC5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCUJVR19PTighdHJhbnMpOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCUJVR19PTihyZXQpOwpAQCAtOTA3LDYgKzkwNywxMCBAQAogCiAJaWYgKG5ld19zaXplID4gb2xkX3NpemUpIHsKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwkJaWYgKElTX0VSUih0cmFucykpIHsKKwkJCXJldCA9IFBUUl9FUlIodHJhbnMpOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CiAJCXJldCA9IGJ0cmZzX2dyb3dfZGV2aWNlKHRyYW5zLCBkZXZpY2UsIG5ld19zaXplKTsKIAkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAl9IGVsc2UgewpAQCAtMTA2NywxMiArMTA3MSwxNSBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmZmxhZ3MsIGFyZywgc2l6ZW9mKGZsYWdzKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKGZsYWdzICYgfkJUUkZTX1NVQlZPTF9DUkVBVEVfQVNZTkMpCisJaWYgKGZsYWdzICYgQlRSRlNfU1VCVk9MX0NSRUFURV9BU1lOQykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZmxhZ3MgJiB+QlRSRlNfU1VCVk9MX1JET05MWSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCisJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQorCQlyZXR1cm4gLUVBQ0NFUzsKKwogCWRvd25fd3JpdGUoJnJvb3QtPmZzX2luZm8tPnN1YnZvbF9zZW0pOwogCiAJLyogbm90aGluZyB0byBkbyAqLwpAQCAtMTA5Myw3ICsxMTAwLDcgQEAKIAkJZ290byBvdXRfcmVzZXQ7CiAJfQogCi0JcmV0ID0gYnRyZnNfdXBkYXRlX3Jvb3QodHJhbnMsIHJvb3QsCisJcmV0ID0gYnRyZnNfdXBkYXRlX3Jvb3QodHJhbnMsIHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCwKIAkJCQkmcm9vdC0+cm9vdF9rZXksICZyb290LT5yb290X2l0ZW0pOwogCiAJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKQEAgLTE4OTgsNyArMTkwNSwxMCBAQAogCiAJCQltZW1jcHkoJm5ld19rZXksICZrZXksIHNpemVvZihuZXdfa2V5KSk7CiAJCQluZXdfa2V5Lm9iamVjdGlkID0gaW5vZGUtPmlfaW5vOwotCQkJbmV3X2tleS5vZmZzZXQgPSBrZXkub2Zmc2V0ICsgZGVzdG9mZiAtIG9mZjsKKwkJCWlmIChvZmYgPD0ga2V5Lm9mZnNldCkKKwkJCQluZXdfa2V5Lm9mZnNldCA9IGtleS5vZmZzZXQgKyBkZXN0b2ZmIC0gb2ZmOworCQkJZWxzZQorCQkJCW5ld19rZXkub2Zmc2V0ID0gZGVzdG9mZjsKIAogCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKIAkJCWlmIChJU19FUlIodHJhbnMpKSB7CkBAIC0yMDgyLDcgKzIwOTIsNyBAQAogCiAJcmV0ID0gLUVOT01FTTsKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X2lvY3RsX3RyYW5zYWN0aW9uKHJvb3QsIDApOwotCWlmICghdHJhbnMpCisJaWYgKElTX0VSUih0cmFucykpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSB0cmFuczsKQEAgLTIxMzgsOSArMjE0OCw5IEBACiAJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKLQlpZiAoIXRyYW5zKSB7CisJaWYgKElTX0VSUih0cmFucykpIHsKIAkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCX0KIAogCWRpcl9pZCA9IGJ0cmZzX3N1cGVyX3Jvb3RfZGlyKCZyb290LT5mc19pbmZvLT5zdXBlcl9jb3B5KTsKQEAgLTIyMDEsNyArMjIxMSw3IEBACiAJaW50IG51bV90eXBlcyA9IDQ7CiAJaW50IGFsbG9jX3NpemU7CiAJaW50IHJldCA9IDA7Ci0JaW50IHNsb3RfY291bnQgPSAwOworCXU2NCBzbG90X2NvdW50ID0gMDsKIAlpbnQgaSwgYzsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmc3BhY2VfYXJncywKQEAgLTIyNDAsNyArMjI1MCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXNsb3RfY291bnQgPSBtaW5fdChpbnQsIHNwYWNlX2FyZ3Muc3BhY2Vfc2xvdHMsIHNsb3RfY291bnQpOworCXNsb3RfY291bnQgPSBtaW5fdCh1NjQsIHNwYWNlX2FyZ3Muc3BhY2Vfc2xvdHMsIHNsb3RfY291bnQpOwogCiAJYWxsb2Nfc2l6ZSA9IHNpemVvZigqZGVzdCkgKiBzbG90X2NvdW50OwogCkBAIC0yMjYwLDYgKzIyNzAsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBudW1fdHlwZXM7IGkrKykgewogCQlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqdG1wOwogCisJCWlmICghc2xvdF9jb3VudCkKKwkJCWJyZWFrOworCiAJCWluZm8gPSBOVUxMOwogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcCwgJnJvb3QtPmZzX2luZm8tPnNwYWNlX2luZm8sCkBAIC0yMjgxLDcgKzIyOTQsMTAgQEAKIAkJCQltZW1jcHkoZGVzdCwgJnNwYWNlLCBzaXplb2Yoc3BhY2UpKTsKIAkJCQlkZXN0Kys7CiAJCQkJc3BhY2VfYXJncy50b3RhbF9zcGFjZXMrKzsKKwkJCQlzbG90X2NvdW50LS07CiAJCQl9CisJCQlpZiAoIXNsb3RfY291bnQpCisJCQkJYnJlYWs7CiAJCX0KIAkJdXBfcmVhZCgmaW5mby0+Z3JvdXBzX3NlbSk7CiAJfQpAQCAtMjMzNCw2ICsyMzUwLDggQEAKIAl1NjQgdHJhbnNpZDsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJaWYgKElTX0VSUih0cmFucykpCisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAl0cmFuc2lkID0gdHJhbnMtPnRyYW5zaWQ7CiAJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uX2FzeW5jKHRyYW5zLCByb290LCAwKTsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvbHpvLmMgYi9mcy9idHJmcy9sem8uYwppbmRleCBjYzliNDUwLi5hMTc4ZjVlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9sem8uYworKysgYi9mcy9idHJmcy9sem8uYwpAQCAtMjgwLDYgKzI4MCw3IEBACiAJdW5zaWduZWQgbG9uZyB0b3Rfb3V0OwogCXVuc2lnbmVkIGxvbmcgdG90X2xlbjsKIAljaGFyICpidWY7CisJYm9vbCBtYXlfbGF0ZV91bm1hcCwgbmVlZF91bm1hcDsKIAogCWRhdGFfaW4gPSBrbWFwKHBhZ2VzX2luWzBdKTsKIAl0b3RfbGVuID0gcmVhZF9jb21wcmVzc19sZW5ndGgoZGF0YV9pbik7CkBAIC0zMDAsMTEgKzMwMSwxMyBAQAogCiAJCXRvdF9pbiArPSBpbl9sZW47CiAJCXdvcmtpbmdfYnl0ZXMgPSBpbl9sZW47CisJCW1heV9sYXRlX3VubWFwID0gbmVlZF91bm1hcCA9IGZhbHNlOwogCiAJCS8qIGZhc3QgcGF0aDogYXZvaWQgdXNpbmcgdGhlIHdvcmtpbmcgYnVmZmVyICovCiAJCWlmIChpbl9wYWdlX2J5dGVzX2xlZnQgPj0gaW5fbGVuKSB7CiAJCQlidWYgPSBkYXRhX2luICsgaW5fb2Zmc2V0OwogCQkJYnl0ZXMgPSBpbl9sZW47CisJCQltYXlfbGF0ZV91bm1hcCA9IHRydWU7CiAJCQlnb3RvIGNvbnQ7CiAJCX0KIApAQCAtMzI5LDE0ICszMzIsMTcgQEAKIAkJCQlpZiAod29ya2luZ19ieXRlcyA9PSAwICYmIHRvdF9pbiA+PSB0b3RfbGVuKQogCQkJCQlicmVhazsKIAotCQkJCWt1bm1hcChwYWdlc19pbltwYWdlX2luX2luZGV4XSk7Ci0JCQkJcGFnZV9pbl9pbmRleCsrOwotCQkJCWlmIChwYWdlX2luX2luZGV4ID49IHRvdGFsX3BhZ2VzX2luKSB7CisJCQkJaWYgKHBhZ2VfaW5faW5kZXggKyAxID49IHRvdGFsX3BhZ2VzX2luKSB7CiAJCQkJCXJldCA9IC0xOwotCQkJCQlkYXRhX2luID0gTlVMTDsKIAkJCQkJZ290byBkb25lOwogCQkJCX0KLQkJCQlkYXRhX2luID0ga21hcChwYWdlc19pbltwYWdlX2luX2luZGV4XSk7CisKKwkJCQlpZiAobWF5X2xhdGVfdW5tYXApCisJCQkJCW5lZWRfdW5tYXAgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJa3VubWFwKHBhZ2VzX2luW3BhZ2VfaW5faW5kZXhdKTsKKworCQkJCWRhdGFfaW4gPSBrbWFwKHBhZ2VzX2luWysrcGFnZV9pbl9pbmRleF0pOwogCiAJCQkJaW5fcGFnZV9ieXRlc19sZWZ0ID0gUEFHRV9DQUNIRV9TSVpFOwogCQkJCWluX29mZnNldCA9IDA7CkBAIC0zNDYsNiArMzUyLDggQEAKIAkJb3V0X2xlbiA9IGx6bzF4X3dvcnN0X2NvbXByZXNzKFBBR0VfQ0FDSEVfU0laRSk7CiAJCXJldCA9IGx6bzF4X2RlY29tcHJlc3Nfc2FmZShidWYsIGluX2xlbiwgd29ya3NwYWNlLT5idWYsCiAJCQkJCSAgICAmb3V0X2xlbik7CisJCWlmIChuZWVkX3VubWFwKQorCQkJa3VubWFwKHBhZ2VzX2luW3BhZ2VfaW5faW5kZXggLSAxXSk7CiAJCWlmIChyZXQgIT0gTFpPX0VfT0spIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0cmZzIGRlY29tcHJlc3MgZmFpbGVkXG4iKTsKIAkJCXJldCA9IC0xOwpAQCAtMzYzLDggKzM3MSw3IEBACiAJCQlicmVhazsKIAl9CiBkb25lOgotCWlmIChkYXRhX2luKQotCQlrdW5tYXAocGFnZXNfaW5bcGFnZV9pbl9pbmRleF0pOworCWt1bm1hcChwYWdlc19pbltwYWdlX2luX2luZGV4XSk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMgYi9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYwppbmRleCAyYjYxZTFkLi4wODNhNTU0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYworKysgYi9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJCQkJCSAgdTY0IGZpbGVfb2Zmc2V0KQogewogCXN0cnVjdCByYl9yb290ICpyb290ID0gJnRyZWUtPnRyZWU7Ci0Jc3RydWN0IHJiX25vZGUgKnByZXY7CisJc3RydWN0IHJiX25vZGUgKnByZXYgPSBOVUxMOwogCXN0cnVjdCByYl9ub2RlICpyZXQ7CiAJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICplbnRyeTsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvcHJpbnQtdHJlZS5jIGIvZnMvYnRyZnMvcHJpbnQtdHJlZS5jCmluZGV4IDBkMTI2YmUuLmZiMjYwNWQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3ByaW50LXRyZWUuYworKysgYi9mcy9idHJmcy9wcmludC10cmVlLmMKQEAgLTI2MCw2ICsyNjAsNyBAQAogI2Vsc2UKIAkJCUJVRygpOwogI2VuZGlmCisJCQlicmVhazsKIAkJY2FzZSBCVFJGU19CTE9DS19HUk9VUF9JVEVNX0tFWToKIAkJCWJpID0gYnRyZnNfaXRlbV9wdHIobCwgaSwKIAkJCQkJICAgIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9pdGVtKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwppbmRleCAwNDVjOWMyLi4zMWFkZTU4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMKKysrIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCkBAIC0xMTU3LDYgKzExNTcsNyBAQAogCW5ld19ub2RlLT5ieXRlbnIgPSBkZXN0LT5ub2RlLT5zdGFydDsKIAluZXdfbm9kZS0+bGV2ZWwgPSBub2RlLT5sZXZlbDsKIAluZXdfbm9kZS0+bG93ZXN0ID0gbm9kZS0+bG93ZXN0OworCW5ld19ub2RlLT5jaGVja2VkID0gMTsKIAluZXdfbm9kZS0+cm9vdCA9IGRlc3Q7CiAKIAlpZiAoIW5vZGUtPmxvd2VzdCkgewpAQCAtMjAyOCw2ICsyMDI5LDcgQEAKIAogCXdoaWxlICgxKSB7CiAJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJdHJhbnMtPmJsb2NrX3JzdiA9IHJjLT5ibG9ja19yc3Y7CiAKIAkJcmV0ID0gYnRyZnNfYmxvY2tfcnN2X2NoZWNrKHRyYW5zLCByb290LCByYy0+YmxvY2tfcnN2LApAQCAtMjE0Nyw2ICsyMTQ5LDEyIEBACiAJfQogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJaWYgKCFlcnIpCisJCQlidHJmc19ibG9ja19yc3ZfcmVsZWFzZShyYy0+ZXh0ZW50X3Jvb3QsCisJCQkJCQlyYy0+YmxvY2tfcnN2LCBudW1fYnl0ZXMpOworCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CisJfQogCiAJaWYgKCFlcnIpIHsKIAkJaWYgKG51bV9ieXRlcyAhPSByYy0+bWVyZ2luZ19yc3Zfc2l6ZSkgewpAQCAtMzIyMiw2ICszMjMwLDcgQEAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7CiAJaWYgKElTX0VSUih0cmFucykpIHsKIAkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOworCQlyZXQgPSBQVFJfRVJSKHRyYW5zKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0zNjI4LDYgKzM2MzcsNyBAQAogCXNldF9yZWxvY19jb250cm9sKHJjKTsKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJjLT5leHRlbnRfcm9vdCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNjQ0LDYgKzM2NTQsNyBAQAogCXUzMiBpdGVtX3NpemU7CiAJaW50IHJldDsKIAlpbnQgZXJyID0gMDsKKwlpbnQgcHJvZ3Jlc3MgPSAwOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCkBAIC0zNjU2LDggKzM2NjcsMTAgQEAKIAl9CiAKIAl3aGlsZSAoMSkgeworCQlwcm9ncmVzcysrOwogCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMCk7Ci0KKwkJQlVHX09OKElTX0VSUih0cmFucykpOworcmVzdGFydDoKIAkJaWYgKHVwZGF0ZV9iYWNrcmVmX2NhY2hlKHRyYW5zLCAmcmMtPmJhY2tyZWZfY2FjaGUpKSB7CiAJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJjLT5leHRlbnRfcm9vdCk7CiAJCQljb250aW51ZTsKQEAgLTM3NzAsNiArMzc4MywxNSBAQAogCQkJfQogCQl9CiAJfQorCWlmICh0cmFucyAmJiBwcm9ncmVzcyAmJiBlcnIgPT0gLUVOT1NQQykgeworCQlyZXQgPSBidHJmc19mb3JjZV9jaHVua19hbGxvYyh0cmFucywgcmMtPmV4dGVudF9yb290LAorCQkJCQkgICAgICByYy0+YmxvY2tfZ3JvdXAtPmZsYWdzKTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQllcnIgPSAwOworCQkJcHJvZ3Jlc3MgPSAwOworCQkJZ290byByZXN0YXJ0OworCQl9CisJfQogCiAJYnRyZnNfcmVsZWFzZV9wYXRoKHJjLT5leHRlbnRfcm9vdCwgcGF0aCk7CiAJY2xlYXJfZXh0ZW50X2JpdHMoJnJjLT5wcm9jZXNzZWRfYmxvY2tzLCAwLCAodTY0KS0xLCBFWFRFTlRfRElSVFksCkBAIC0zODA0LDcgKzM4MjYsMTAgQEAKIAogCS8qIGdldCByaWQgb2YgcGlubmVkIGV4dGVudHMgKi8KIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKLQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJjLT5leHRlbnRfcm9vdCk7CisJaWYgKElTX0VSUih0cmFucykpCisJCWVyciA9IFBUUl9FUlIodHJhbnMpOworCWVsc2UKKwkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOwogb3V0X2ZyZWU6CiAJYnRyZnNfZnJlZV9ibG9ja19yc3YocmMtPmV4dGVudF9yb290LCByYy0+YmxvY2tfcnN2KTsKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CkBAIC00MDIyLDYgKzQwNDcsNyBAQAogCWludCByZXQ7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCwgMCk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJbWVtc2V0KCZyb290LT5yb290X2l0ZW0uZHJvcF9wcm9ncmVzcywgMCwKIAkJc2l6ZW9mKHJvb3QtPnJvb3RfaXRlbS5kcm9wX3Byb2dyZXNzKSk7CkBAIC00MTI1LDYgKzQxNTEsMTEgQEAKIAlzZXRfcmVsb2NfY29udHJvbChyYyk7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQl1bnNldF9yZWxvY19jb250cm9sKHJjKTsKKwkJZXJyID0gUFRSX0VSUih0cmFucyk7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQogCiAJcmMtPm1lcmdlX3JlbG9jX3RyZWUgPSAxOwogCkBAIC00MTU0LDkgKzQxODUsMTMgQEAKIAl1bnNldF9yZWxvY19jb250cm9sKHJjKTsKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOwotCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKLW91dDoKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJZXJyID0gUFRSX0VSUih0cmFucyk7CisJZWxzZQorCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJjLT5leHRlbnRfcm9vdCk7CitvdXRfZnJlZToKIAlrZnJlZShyYyk7CitvdXQ6CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZyZWxvY19yb290cykpIHsKIAkJcmVsb2Nfcm9vdCA9IGxpc3RfZW50cnkocmVsb2Nfcm9vdHMubmV4dCwKIAkJCQkJc3RydWN0IGJ0cmZzX3Jvb3QsIHJvb3RfbGlzdCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9zdXBlci5jIGIvZnMvYnRyZnMvc3VwZXIuYwppbmRleCBiMjEzMGM0Li5kMzlhOTg5IDEwMDY0NAotLS0gYS9mcy9idHJmcy9zdXBlci5jCisrKyBiL2ZzL2J0cmZzL3N1cGVyLmMKQEAgLTE1NSw3ICsxNTUsOCBAQAogCU9wdF9ub3NzZCwgT3B0X3NzZF9zcHJlYWQsIE9wdF90aHJlYWRfcG9vbCwgT3B0X25vYWNsLCBPcHRfY29tcHJlc3MsCiAJT3B0X2NvbXByZXNzX3R5cGUsIE9wdF9jb21wcmVzc19mb3JjZSwgT3B0X2NvbXByZXNzX2ZvcmNlX3R5cGUsCiAJT3B0X25vdHJlZWxvZywgT3B0X3JhdGlvLCBPcHRfZmx1c2hvbmNvbW1pdCwgT3B0X2Rpc2NhcmQsCi0JT3B0X3NwYWNlX2NhY2hlLCBPcHRfY2xlYXJfY2FjaGUsIE9wdF91c2VyX3N1YnZvbF9ybV9hbGxvd2VkLCBPcHRfZXJyLAorCU9wdF9zcGFjZV9jYWNoZSwgT3B0X2NsZWFyX2NhY2hlLCBPcHRfdXNlcl9zdWJ2b2xfcm1fYWxsb3dlZCwKKwlPcHRfZW5vc3BjX2RlYnVnLCBPcHRfZXJyLAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtMTg0LDYgKzE4NSw3IEBACiAJe09wdF9zcGFjZV9jYWNoZSwgInNwYWNlX2NhY2hlIn0sCiAJe09wdF9jbGVhcl9jYWNoZSwgImNsZWFyX2NhY2hlIn0sCiAJe09wdF91c2VyX3N1YnZvbF9ybV9hbGxvd2VkLCAidXNlcl9zdWJ2b2xfcm1fYWxsb3dlZCJ9LAorCXtPcHRfZW5vc3BjX2RlYnVnLCAiZW5vc3BjX2RlYnVnIn0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIApAQCAtMzU4LDYgKzM2MCw5IEBACiAJCWNhc2UgT3B0X3VzZXJfc3Vidm9sX3JtX2FsbG93ZWQ6CiAJCQlidHJmc19zZXRfb3B0KGluZm8tPm1vdW50X29wdCwgVVNFUl9TVUJWT0xfUk1fQUxMT1dFRCk7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZW5vc3BjX2RlYnVnOgorCQkJYnRyZnNfc2V0X29wdChpbmZvLT5tb3VudF9vcHQsIEVOT1NQQ19ERUJVRyk7CisJCQlicmVhazsKIAkJY2FzZSBPcHRfZXJyOgogCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnM6IHVucmVjb2duaXplZCBtb3VudCBvcHRpb24gIgogCQkJICAgICAgICInJXMnXG4iLCBwKTsKQEAgLTM4Myw3ICszODgsNyBAQAogCQlzdHJ1Y3QgYnRyZnNfZnNfZGV2aWNlcyAqKmZzX2RldmljZXMpCiB7CiAJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOwotCWNoYXIgKm9wdHMsICpwOworCWNoYXIgKm9wdHMsICpvcmlnLCAqcDsKIAlpbnQgZXJyb3IgPSAwOwogCWludCBpbnRhcmc7CiAKQEAgLTM5Nyw2ICs0MDIsNyBAQAogCW9wdHMgPSBrc3RyZHVwKG9wdGlvbnMsIEdGUF9LRVJORUwpOwogCWlmICghb3B0cykKIAkJcmV0dXJuIC1FTk9NRU07CisJb3JpZyA9IG9wdHM7CiAKIAl3aGlsZSAoKHAgPSBzdHJzZXAoJm9wdHMsICIsIikpICE9IE5VTEwpIHsKIAkJaW50IHRva2VuOwpAQCAtNDMyLDcgKzQzOCw3IEBACiAJfQogCiAgb3V0X2ZyZWVfb3B0czoKLQlrZnJlZShvcHRzKTsKKwlrZnJlZShvcmlnKTsKICBvdXQ6CiAJLyoKIAkgKiBJZiBubyBzdWJ2b2x1bWUgbmFtZSBpcyBzcGVjaWZpZWQgd2UgdXNlIHRoZSBkZWZhdWx0IG9uZS4gIEFsbG9jYXRlCkBAIC02MjMsNiArNjI5LDggQEAKIAlidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhyb290LCAwLCAwKTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJaWYgKElTX0VSUih0cmFucykpCisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCXJldHVybiByZXQ7CiB9CkBAIC03NjEsNiArNzY5LDggQEAKIAkJfQogCiAJCWJ0cmZzX2Nsb3NlX2RldmljZXMoZnNfZGV2aWNlcyk7CisJCWtmcmVlKGZzX2luZm8pOworCQlrZnJlZSh0cmVlX3Jvb3QpOwogCX0gZWxzZSB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKaW5kZXggYmFlNWM3Yi4uM2Q3M2M4ZCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYworKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCkBAIC0xMTYxLDYgKzExNjEsMTEgQEAKIAlJTklUX0RFTEFZRURfV09SSygmYWMtPndvcmssIGRvX2FzeW5jX2NvbW1pdCk7CiAJYWMtPnJvb3QgPSByb290OwogCWFjLT5uZXd0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJaWYgKElTX0VSUihhYy0+bmV3dHJhbnMpKSB7CisJCWludCBlcnIgPSBQVFJfRVJSKGFjLT5uZXd0cmFucyk7CisJCWtmcmVlKGFjKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAKIAkvKiB0YWtlIHRyYW5zYWN0aW9uIHJlZmVyZW5jZSAqLwogCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMgYi9mcy9idHJmcy90cmVlLWxvZy5jCmluZGV4IDA1NDc0NGEuLmE0YmJiODUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwpAQCAtMzM4LDYgKzMzOCwxMiBAQAogCQl9CiAJCWRzdF9jb3B5ID0ga21hbGxvYyhpdGVtX3NpemUsIEdGUF9OT0ZTKTsKIAkJc3JjX2NvcHkgPSBrbWFsbG9jKGl0ZW1fc2l6ZSwgR0ZQX05PRlMpOworCQlpZiAoIWRzdF9jb3B5IHx8ICFzcmNfY29weSkgeworCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOworCQkJa2ZyZWUoZHN0X2NvcHkpOworCQkJa2ZyZWUoc3JjX2NvcHkpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAogCQlyZWFkX2V4dGVudF9idWZmZXIoZWIsIHNyY19jb3B5LCBzcmNfcHRyLCBpdGVtX3NpemUpOwogCkBAIC02NjUsNiArNjcxLDkgQEAKIAlidHJmc19kaXJfaXRlbV9rZXlfdG9fY3B1KGxlYWYsIGRpLCAmbG9jYXRpb24pOwogCW5hbWVfbGVuID0gYnRyZnNfZGlyX25hbWVfbGVuKGxlYWYsIGRpKTsKIAluYW1lID0ga21hbGxvYyhuYW1lX2xlbiwgR0ZQX05PRlMpOworCWlmICghbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlyZWFkX2V4dGVudF9idWZmZXIobGVhZiwgbmFtZSwgKHVuc2lnbmVkIGxvbmcpKGRpICsgMSksIG5hbWVfbGVuKTsKIAlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CiAKQEAgLTc0NCw2ICs3NTMsOSBAQAogCWludCBtYXRjaCA9IDA7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCBsb2csIGtleSwgcGF0aCwgMCwgMCk7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIG91dDsKQEAgLTk2Nyw2ICs5NzksOCBAQAogCWtleS5vZmZzZXQgPSAodTY0KS0xOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiAtRU5PTUVNOwogCiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgcm9vdCwgJmtleSwgcGF0aCwgMCwgMCk7CkBAIC0xMTc4LDYgKzExOTIsOSBAQAogCiAJbmFtZV9sZW4gPSBidHJmc19kaXJfbmFtZV9sZW4oZWIsIGRpKTsKIAluYW1lID0ga21hbGxvYyhuYW1lX2xlbiwgR0ZQX05PRlMpOworCWlmICghbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlsb2dfdHlwZSA9IGJ0cmZzX2Rpcl90eXBlKGViLCBkaSk7CiAJcmVhZF9leHRlbnRfYnVmZmVyKGViLCBuYW1lLCAodW5zaWduZWQgbG9uZykoZGkgKyAxKSwKIAkJICAgbmFtZV9sZW4pOwpAQCAtMTY5Miw2ICsxNzA5LDggQEAKIAkJcm9vdF9vd25lciA9IGJ0cmZzX2hlYWRlcl9vd25lcihwYXJlbnQpOwogCiAJCW5leHQgPSBidHJmc19maW5kX2NyZWF0ZV90cmVlX2Jsb2NrKHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplKTsKKwkJaWYgKCFuZXh0KQorCQkJcmV0dXJuIC1FTk9NRU07CiAKIAkJaWYgKCpsZXZlbCA9PSAxKSB7CiAJCQl3Yy0+cHJvY2Vzc19mdW5jKHJvb3QsIG5leHQsIHdjLCBwdHJfZ2VuKTsKQEAgLTIwMzIsNiArMjA1MSw3IEBACiAJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgbG9nX3Jvb3RfdHJlZSwKIAkJCQlsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKKwkJcmV0ID0gMDsKIAkJZ290byBvdXQ7CiAJfQogCWF0b21pY19zZXQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbaW5kZXgyXSwgMSk7CkBAIC0yMDk2LDcgKzIxMTYsNyBAQAogCXNtcF9tYigpOwogCWlmICh3YWl0cXVldWVfYWN0aXZlKCZyb290LT5sb2dfY29tbWl0X3dhaXRbaW5kZXgxXSkpCiAJCXdha2VfdXAoJnJvb3QtPmxvZ19jb21taXRfd2FpdFtpbmRleDFdKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2xvZ190cmVlKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLApAQCAtMjE5NCw2ICsyMjE0LDkgQEAKIAogCWxvZyA9IHJvb3QtPmxvZ19yb290OwogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWRpID0gYnRyZnNfbG9va3VwX2Rpcl9pdGVtKHRyYW5zLCBsb2csIHBhdGgsIGRpci0+aV9pbm8sCiAJCQkJICAgbmFtZSwgbmFtZV9sZW4sIC0xKTsKIAlpZiAoSVNfRVJSKGRpKSkgewpAQCAtMjU5NCw2ICsyNjE3LDkgQEAKIAogCWluc19kYXRhID0ga21hbGxvYyhuciAqIHNpemVvZihzdHJ1Y3QgYnRyZnNfa2V5KSArCiAJCQkgICBuciAqIHNpemVvZih1MzIpLCBHRlBfTk9GUyk7CisJaWYgKCFpbnNfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlpbnNfc2l6ZXMgPSAodTMyICopaW5zX2RhdGE7CiAJaW5zX2tleXMgPSAoc3RydWN0IGJ0cmZzX2tleSAqKShpbnNfZGF0YSArIG5yICogc2l6ZW9mKHUzMikpOwogCkBAIC0yNzI1LDcgKzI3NTEsMTMgQEAKIAlsb2cgPSByb290LT5sb2dfcm9vdDsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKIAlkc3RfcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlpZiAoIWRzdF9wYXRoKSB7CisJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJbWluX2tleS5vYmplY3RpZCA9IGlub2RlLT5pX2lubzsKIAltaW5fa2V5LnR5cGUgPSBCVFJGU19JTk9ERV9JVEVNX0tFWTsKQEAgLTMwODAsNiArMzExMiw3IEBACiAJQlVHX09OKCFwYXRoKTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24oZnNfaW5mby0+dHJlZV9yb290LCAwKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAl3Yy50cmFucyA9IHRyYW5zOwogCXdjLnBpbiA9IDE7CmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmMgYi9mcy9idHJmcy92b2x1bWVzLmMKaW5kZXggZDE1ODUzMC4uZGQxM2ViOCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5jCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwpAQCAtMTIxMyw2ICsxMjEzLDEwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQlidHJmc19mcmVlX3BhdGgocGF0aCk7CisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKKwl9CiAJa2V5Lm9iamVjdGlkID0gQlRSRlNfREVWX0lURU1TX09CSkVDVElEOwogCWtleS50eXBlID0gQlRSRlNfREVWX0lURU1fS0VZOwogCWtleS5vZmZzZXQgPSBkZXZpY2UtPmRldmlkOwpAQCAtMTMzNCwxMSArMTMzOCwxMSBAQAogCiAJcmV0ID0gYnRyZnNfc2hyaW5rX2RldmljZShkZXZpY2UsIDApOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfYnJlbHNlOworCQlnb3RvIGVycm9yX3VuZG87CiAKIAlyZXQgPSBidHJmc19ybV9kZXZfaXRlbShyb290LT5mc19pbmZvLT5jaHVua19yb290LCBkZXZpY2UpOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfYnJlbHNlOworCQlnb3RvIGVycm9yX3VuZG87CiAKIAlkZXZpY2UtPmluX2ZzX21ldGFkYXRhID0gMDsKIApAQCAtMTQxMiw2ICsxNDE2LDEzIEBACiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT52b2x1bWVfbXV0ZXgpOwogCW11dGV4X3VubG9jaygmdXVpZF9tdXRleCk7CiAJcmV0dXJuIHJldDsKK2Vycm9yX3VuZG86CisJaWYgKGRldmljZS0+d3JpdGVhYmxlKSB7CisJCWxpc3RfYWRkKCZkZXZpY2UtPmRldl9hbGxvY19saXN0LAorCQkJICZyb290LT5mc19pbmZvLT5mc19kZXZpY2VzLT5hbGxvY19saXN0KTsKKwkJcm9vdC0+ZnNfaW5mby0+ZnNfZGV2aWNlcy0+cndfZGV2aWNlcysrOworCX0KKwlnb3RvIGVycm9yX2JyZWxzZTsKIH0KIAogLyoKQEAgLTE2MDEsMTEgKzE2MTIsMTkgQEAKIAogCXJldCA9IGZpbmRfbmV4dF9kZXZpZChyb290LCAmZGV2aWNlLT5kZXZpZCk7CiAJaWYgKHJldCkgeworCQlrZnJlZShkZXZpY2UtPm5hbWUpOwogCQlrZnJlZShkZXZpY2UpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJa2ZyZWUoZGV2aWNlLT5uYW1lKTsKKwkJa2ZyZWUoZGV2aWNlKTsKKwkJcmV0ID0gUFRSX0VSUih0cmFucyk7CisJCWdvdG8gZXJyb3I7CisJfQorCiAJbG9ja19jaHVua3Mocm9vdCk7CiAKIAlkZXZpY2UtPndyaXRlYWJsZSA9IDE7CkBAIC0xNjIxLDcgKzE2NDAsNyBAQAogCWRldmljZS0+ZGV2X3Jvb3QgPSByb290LT5mc19pbmZvLT5kZXZfcm9vdDsKIAlkZXZpY2UtPmJkZXYgPSBiZGV2OwogCWRldmljZS0+aW5fZnNfbWV0YWRhdGEgPSAxOwotCWRldmljZS0+bW9kZSA9IDA7CisJZGV2aWNlLT5tb2RlID0gRk1PREVfRVhDTDsKIAlzZXRfYmxvY2tzaXplKGRldmljZS0+YmRldiwgNDA5Nik7CiAKIAlpZiAoc2VlZGluZ19kZXYpIHsKQEAgLTE4NzMsNyArMTg5Miw3IEBACiAJCXJldHVybiByZXQ7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOwotCUJVR19PTighdHJhbnMpOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCWxvY2tfY2h1bmtzKHJvb3QpOwogCkBAIC0yMDQ3LDcgKzIwNjYsNyBAQAogCQlCVUdfT04ocmV0KTsKIAogCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKGRldl9yb290LCAwKTsKLQkJQlVHX09OKCF0cmFucyk7CisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCQlyZXQgPSBidHJmc19ncm93X2RldmljZSh0cmFucywgZGV2aWNlLCBvbGRfc2l6ZSk7CiAJCUJVR19PTihyZXQpOwpAQCAtMjIxMyw2ICsyMjMyLDExIEBACiAKIAkvKiBTaHJpbmtpbmcgc3VjY2VlZGVkLCBlbHNlIHdlIHdvdWxkIGJlIGF0ICJkb25lIi4gKi8KIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCXJldCA9IFBUUl9FUlIodHJhbnMpOworCQlnb3RvIGRvbmU7CisJfQorCiAJbG9ja19jaHVua3Mocm9vdCk7CiAKIAlkZXZpY2UtPmRpc2tfdG90YWxfYnl0ZXMgPSBuZXdfc2l6ZTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvY2Fwcy5jIGIvZnMvY2VwaC9jYXBzLmMKaW5kZXggNjBkMjdiYy4uNmI2MWRlZCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9jYXBzLmMKKysrIGIvZnMvY2VwaC9jYXBzLmMKQEAgLTE1NjAsOSArMTU2MCwxMCBAQAogCQkvKiBOT1RFOiBubyBzaWRlLWVmZmVjdHMgYWxsb3dlZCwgdW50aWwgd2UgdGFrZSBzX211dGV4ICovCiAKIAkJcmV2b2tpbmcgPSBjYXAtPmltcGxlbWVudGVkICYgfmNhcC0+aXNzdWVkOwotCQlpZiAocmV2b2tpbmcpCi0JCQlkb3V0KCIgbWRzJWQgcmV2b2tpbmcgJXNcbiIsIGNhcC0+bWRzLAotCQkJICAgICBjZXBoX2NhcF9zdHJpbmcocmV2b2tpbmcpKTsKKwkJZG91dCgiIG1kcyVkIGNhcCAlcCBpc3N1ZWQgJXMgaW1wbGVtZW50ZWQgJXMgcmV2b2tpbmcgJXNcbiIsCisJCSAgICAgY2FwLT5tZHMsIGNhcCwgY2VwaF9jYXBfc3RyaW5nKGNhcC0+aXNzdWVkKSwKKwkJICAgICBjZXBoX2NhcF9zdHJpbmcoY2FwLT5pbXBsZW1lbnRlZCksCisJCSAgICAgY2VwaF9jYXBfc3RyaW5nKHJldm9raW5nKSk7CiAKIAkJaWYgKGNhcCA9PSBjaS0+aV9hdXRoX2NhcCAmJgogCQkgICAgKGNhcC0+aXNzdWVkICYgQ0VQSF9DQVBfRklMRV9XUikpIHsKQEAgLTE2NTgsNiArMTY1OSw4IEBACiAKIAkJaWYgKGNhcCA9PSBjaS0+aV9hdXRoX2NhcCAmJiBjaS0+aV9kaXJ0eV9jYXBzKQogCQkJZmx1c2hpbmcgPSBfX21hcmtfY2Fwc19mbHVzaGluZyhpbm9kZSwgc2Vzc2lvbik7CisJCWVsc2UKKwkJCWZsdXNoaW5nID0gMDsKIAogCQltZHMgPSBjYXAtPm1kczsgIC8qIHJlbWVtYmVyIG1kcywgc28gd2UgZG9uJ3QgcmVwZWF0ICovCiAJCXNlbnQrKzsKQEAgLTE5NDAsNiArMTk0MywzNSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQga2lja19mbHVzaGluZ19pbm9kZV9jYXBzKHN0cnVjdCBjZXBoX21kc19jbGllbnQgKm1kc2MsCisJCQkJICAgICBzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2kgPSBjZXBoX2lub2RlKGlub2RlKTsKKwlzdHJ1Y3QgY2VwaF9jYXAgKmNhcDsKKwlpbnQgZGVsYXllZCA9IDA7CisKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCWNhcCA9IGNpLT5pX2F1dGhfY2FwOworCWRvdXQoImtpY2tfZmx1c2hpbmdfaW5vZGVfY2FwcyAlcCBmbHVzaGluZyAlcyBmbHVzaF9zZXEgJWxsZFxuIiwgaW5vZGUsCisJICAgICBjZXBoX2NhcF9zdHJpbmcoY2ktPmlfZmx1c2hpbmdfY2FwcyksIGNpLT5pX2NhcF9mbHVzaF9zZXEpOworCV9fY2VwaF9mbHVzaF9zbmFwcyhjaSwgJnNlc3Npb24sIDEpOworCWlmIChjaS0+aV9mbHVzaGluZ19jYXBzKSB7CisJCWRlbGF5ZWQgPSBfX3NlbmRfY2FwKG1kc2MsIGNhcCwgQ0VQSF9DQVBfT1BfRkxVU0gsCisJCQkJICAgICBfX2NlcGhfY2Fwc191c2VkKGNpKSwKKwkJCQkgICAgIF9fY2VwaF9jYXBzX3dhbnRlZChjaSksCisJCQkJICAgICBjYXAtPmlzc3VlZCB8IGNhcC0+aW1wbGVtZW50ZWQsCisJCQkJICAgICBjaS0+aV9mbHVzaGluZ19jYXBzLCBOVUxMKTsKKwkJaWYgKGRlbGF5ZWQpIHsKKwkJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJCQlfX2NhcF9kZWxheV9yZXF1ZXVlKG1kc2MsIGNpKTsKKwkJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJfQorCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwl9Cit9CisKIAogLyoKICAqIFRha2UgcmVmZXJlbmNlcyB0byBjYXBhYmlsaXRpZXMgd2UgaG9sZCwgc28gdGhhdCB3ZSBkb24ndCByZWxlYXNlCkBAIC0yNjg3LDcgKzI3MTksNyBAQAogCWNlcGhfYWRkX2NhcChpbm9kZSwgc2Vzc2lvbiwgY2FwX2lkLCAtMSwKIAkJICAgICBpc3N1ZWQsIHdhbnRlZCwgc2VxLCBtc2VxLCByZWFsbWlubywgQ0VQSF9DQVBfRkxBR19BVVRILAogCQkgICAgIE5VTEwgLyogbm8gY2FwcyBjb250ZXh0ICovKTsKLQl0cnlfZmx1c2hfY2Fwcyhpbm9kZSwgc2Vzc2lvbiwgTlVMTCk7CisJa2lja19mbHVzaGluZ19pbm9kZV9jYXBzKG1kc2MsIHNlc3Npb24sIGlub2RlKTsKIAl1cF9yZWFkKCZtZHNjLT5zbmFwX3J3c2VtKTsKIAogCS8qIG1ha2Ugc3VyZSB3ZSByZS1yZXF1ZXN0IG1heF9zaXplLCBpZiBuZWNlc3NhcnkgKi8KQEAgLTI3ODUsOCArMjgxNyw3IEBACiAJY2FzZSBDRVBIX0NBUF9PUF9JTVBPUlQ6CiAJCWhhbmRsZV9jYXBfaW1wb3J0KG1kc2MsIGlub2RlLCBoLCBzZXNzaW9uLAogCQkJCSAgc25hcHRyYWNlLCBzbmFwdHJhY2VfbGVuKTsKLQkJY2VwaF9jaGVja19jYXBzKGNlcGhfaW5vZGUoaW5vZGUpLCBDSEVDS19DQVBTX05PREVMQVksCi0JCQkJc2Vzc2lvbik7CisJCWNlcGhfY2hlY2tfY2FwcyhjZXBoX2lub2RlKGlub2RlKSwgMCwgc2Vzc2lvbik7CiAJCWdvdG8gZG9uZV91bmxvY2tlZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZGlyLmMgYi9mcy9jZXBoL2Rpci5jCmluZGV4IDBiYzY4ZGUuLjA5OWE1ODYgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZGlyLmMKKysrIGIvZnMvY2VwaC9kaXIuYwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlpZiAoY2ktPmlfcmVsZWFzZV9jb3VudCA9PSBmaS0+ZGlyX3JlbGVhc2VfY291bnQpIHsKIAkJZG91dCgiIG1hcmtpbmcgJXAgY29tcGxldGVcbiIsIGlub2RlKTsKLQkJY2ktPmlfY2VwaF9mbGFncyB8PSBDRVBIX0lfQ09NUExFVEU7CisJCS8qIGNpLT5pX2NlcGhfZmxhZ3MgfD0gQ0VQSF9JX0NPTVBMRVRFOyAqLwogCQljaS0+aV9tYXhfb2Zmc2V0ID0gZmlscC0+Zl9wb3M7CiAJfQogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKQEAgLTQ5Niw2ICs0OTYsNyBAQAogCiAJLyogLnNuYXAgZGlyPyAqLwogCWlmIChlcnIgPT0gLUVOT0VOVCAmJgorCSAgICBjZXBoX3NuYXAocGFyZW50KSA9PSBDRVBIX05PU05BUCAmJgogCSAgICBzdHJjbXAoZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJICAgZnNjLT5tb3VudF9vcHRpb25zLT5zbmFwZGlyX25hbWUpID09IDApIHsKIAkJc3RydWN0IGlub2RlICppbm9kZSA9IGNlcGhfZ2V0X3NuYXBkaXIocGFyZW50KTsKQEAgLTEwMjksMjggKzEwMzAsOCBAQAogc3RhdGljIHZvaWQgY2VwaF9kZW50cnlfcmVsZWFzZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJc3RydWN0IGNlcGhfZGVudHJ5X2luZm8gKmRpID0gY2VwaF9kZW50cnkoZGVudHJ5KTsKLQlzdHJ1Y3QgaW5vZGUgKnBhcmVudF9pbm9kZSA9IE5VTEw7Ci0JdTY0IHNuYXBpZCA9IENFUEhfTk9TTkFQOwogCi0JaWYgKCFJU19ST09UKGRlbnRyeSkpIHsKLQkJcGFyZW50X2lub2RlID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKLQkJaWYgKHBhcmVudF9pbm9kZSkKLQkJCXNuYXBpZCA9IGNlcGhfc25hcChwYXJlbnRfaW5vZGUpOwotCX0KLQlkb3V0KCJkZW50cnlfcmVsZWFzZSAlcCBwYXJlbnQgJXBcbiIsIGRlbnRyeSwgcGFyZW50X2lub2RlKTsKLQlpZiAocGFyZW50X2lub2RlICYmIHNuYXBpZCAhPSBDRVBIX1NOQVBESVIpIHsKLQkJc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2kgPSBjZXBoX2lub2RlKHBhcmVudF9pbm9kZSk7Ci0KLQkJc3Bpbl9sb2NrKCZwYXJlbnRfaW5vZGUtPmlfbG9jayk7Ci0JCWlmIChjaS0+aV9zaGFyZWRfZ2VuID09IGRpLT5sZWFzZV9zaGFyZWRfZ2VuIHx8Ci0JCSAgICBzbmFwaWQgPD0gQ0VQSF9NQVhTTkFQKSB7Ci0JCQlkb3V0KCIgY2xlYXJpbmcgJXAgY29tcGxldGUgKGRfcmVsZWFzZSlcbiIsCi0JCQkgICAgIHBhcmVudF9pbm9kZSk7Ci0JCQljaS0+aV9jZXBoX2ZsYWdzICY9IH5DRVBIX0lfQ09NUExFVEU7Ci0JCQljaS0+aV9yZWxlYXNlX2NvdW50Kys7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJnBhcmVudF9pbm9kZS0+aV9sb2NrKTsKLQl9CisJZG91dCgiZGVudHJ5X3JlbGVhc2UgJXBcbiIsIGRlbnRyeSk7CiAJaWYgKGRpKSB7CiAJCWNlcGhfZGVudHJ5X2xydV9kZWwoZGVudHJ5KTsKIAkJaWYgKGRpLT5sZWFzZV9zZXNzaW9uKQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9pbm9kZS5jIGIvZnMvY2VwaC9pbm9kZS5jCmluZGV4IGU4MzVlZmYuLjE5M2JmYTUgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvaW5vZGUuYworKysgYi9mcy9jZXBoL2lub2RlLmMKQEAgLTcwNywxMyArNzA3LDkgQEAKIAkJICAgIChpc3N1ZWQgJiBDRVBIX0NBUF9GSUxFX0VYQ0wpID09IDAgJiYKIAkJICAgIChjaS0+aV9jZXBoX2ZsYWdzICYgQ0VQSF9JX0NPTVBMRVRFKSA9PSAwKSB7CiAJCQlkb3V0KCIgbWFya2luZyAlcCBjb21wbGV0ZSAoZW1wdHkpXG4iLCBpbm9kZSk7Ci0JCQljaS0+aV9jZXBoX2ZsYWdzIHw9IENFUEhfSV9DT01QTEVURTsKKwkJCS8qIGNpLT5pX2NlcGhfZmxhZ3MgfD0gQ0VQSF9JX0NPTVBMRVRFOyAqLwogCQkJY2ktPmlfbWF4X29mZnNldCA9IDI7CiAJCX0KLQotCQkvKiBpdCBtYXkgYmUgYmV0dGVyIHRvIHNldCBzdF9zaXplIGluIGdldGF0dHIgaW5zdGVhZD8gKi8KLQkJaWYgKGNlcGhfdGVzdF9tb3VudF9vcHQoY2VwaF9zYl90b19jbGllbnQoaW5vZGUtPmlfc2IpLCBSQllURVMpKQotCQkJaW5vZGUtPmlfc2l6ZSA9IGNpLT5pX3JieXRlczsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfZXJyKCJmaWxsX2lub2RlICVsbHguJWxseCBCQUQgbW9kZSAwJW9cbiIsCkBAIC0xODE5LDcgKzE4MTUsMTEgQEAKIAkJZWxzZQogCQkJc3RhdC0+ZGV2ID0gMDsKIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCXN0YXQtPnNpemUgPSBjaS0+aV9yYnl0ZXM7CisJCQlpZiAoY2VwaF90ZXN0X21vdW50X29wdChjZXBoX3NiX3RvX2NsaWVudChpbm9kZS0+aV9zYiksCisJCQkJCQlSQllURVMpKQorCQkJCXN0YXQtPnNpemUgPSBjaS0+aV9yYnl0ZXM7CisJCQllbHNlCisJCQkJc3RhdC0+c2l6ZSA9IGNpLT5pX2ZpbGVzICsgY2ktPmlfc3ViZGlyczsKIAkJCXN0YXQtPmJsb2NrcyA9IDA7CiAJCQlzdGF0LT5ibGtzaXplID0gNjU1MzY7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvbWRzX2NsaWVudC5jIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKaW5kZXggMWUzMGQxOS4uYTFlZThmYSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9tZHNfY2xpZW50LmMKKysrIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKQEAgLTY5Myw5ICs2OTMsMTEgQEAKIAkJCQlkb3V0KCJjaG9vc2VfbWRzICVwICVsbHguJWxseCAiCiAJCQkJICAgICAiZnJhZyAldSBtZHMlZCAoJWQvJWQpXG4iLAogCQkJCSAgICAgaW5vZGUsIGNlcGhfdmlub3AoaW5vZGUpLAotCQkJCSAgICAgZnJhZy5mcmFnLCBmcmFnLm1kcywKKwkJCQkgICAgIGZyYWcuZnJhZywgbWRzLAogCQkJCSAgICAgKGludClyLCBmcmFnLm5kaXN0KTsKLQkJCQlyZXR1cm4gbWRzOworCQkJCWlmIChjZXBoX21kc21hcF9nZXRfc3RhdGUobWRzYy0+bWRzbWFwLCBtZHMpID49CisJCQkJICAgIENFUEhfTURTX1NUQVRFX0FDVElWRSkKKwkJCQkJcmV0dXJuIG1kczsKIAkJCX0KIAogCQkJLyogc2luY2UgdGhpcyBmaWxlL2RpciB3YXNuJ3Qga25vd24gdG8gYmUKQEAgLTcwOCw3ICs3MTAsOSBAQAogCQkJCWRvdXQoImNob29zZV9tZHMgJXAgJWxseC4lbGx4ICIKIAkJCQkgICAgICJmcmFnICV1IG1kcyVkIChhdXRoKVxuIiwKIAkJCQkgICAgIGlub2RlLCBjZXBoX3Zpbm9wKGlub2RlKSwgZnJhZy5mcmFnLCBtZHMpOwotCQkJCXJldHVybiBtZHM7CisJCQkJaWYgKGNlcGhfbWRzbWFwX2dldF9zdGF0ZShtZHNjLT5tZHNtYXAsIG1kcykgPj0KKwkJCQkgICAgQ0VQSF9NRFNfU1RBVEVfQUNUSVZFKQorCQkJCQlyZXR1cm4gbWRzOwogCQkJfQogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zbmFwLmMgYi9mcy9jZXBoL3NuYXAuYwppbmRleCAzOWMyNDNhLi5mNDBiOTEzIDEwMDY0NAotLS0gYS9mcy9jZXBoL3NuYXAuYworKysgYi9mcy9jZXBoL3NuYXAuYwpAQCAtNTg0LDEwICs1ODQsMTQgQEAKIAlpZiAobGFzdGlub2RlKQogCQlpcHV0KGxhc3Rpbm9kZSk7CiAKLQlkb3V0KCJxdWV1ZV9yZWFsbV9jYXBfc25hcHMgJXAgJWxseCBjaGlsZHJlblxuIiwgcmVhbG0sIHJlYWxtLT5pbm8pOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZyZWFsbS0+Y2hpbGRyZW4sIGNoaWxkX2l0ZW0pCi0JCXF1ZXVlX3JlYWxtX2NhcF9zbmFwcyhjaGlsZCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJnJlYWxtLT5jaGlsZHJlbiwgY2hpbGRfaXRlbSkgeworCQlkb3V0KCJxdWV1ZV9yZWFsbV9jYXBfc25hcHMgJXAgJWxseCBxdWV1ZSBjaGlsZCAlcCAlbGx4XG4iLAorCQkgICAgIHJlYWxtLCByZWFsbS0+aW5vLCBjaGlsZCwgY2hpbGQtPmlubyk7CisJCWxpc3RfZGVsX2luaXQoJmNoaWxkLT5kaXJ0eV9pdGVtKTsKKwkJbGlzdF9hZGQoJmNoaWxkLT5kaXJ0eV9pdGVtLCAmcmVhbG0tPmRpcnR5X2l0ZW0pOworCX0KIAorCWxpc3RfZGVsX2luaXQoJnJlYWxtLT5kaXJ0eV9pdGVtKTsKIAlkb3V0KCJxdWV1ZV9yZWFsbV9jYXBfc25hcHMgJXAgJWxseCBkb25lXG4iLCByZWFsbSwgcmVhbG0tPmlubyk7CiB9CiAKQEAgLTY4Myw3ICs2ODcsOSBAQAogCSAqIHF1ZXVlIGNhcCBzbmFwcyBfYWZ0ZXJfIHdlJ3ZlIGJ1aWx0IHRoZSBuZXcgc25hcCBjb250ZXh0cywKIAkgKiBzbyB0aGF0IGlfaGVhZF9zbmFwYyBjYW4gYmUgc2V0IGFwcHJvcHJpYXRlbHkuCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZWFsbSwgJmRpcnR5X3JlYWxtcywgZGlydHlfaXRlbSkgeworCXdoaWxlICghbGlzdF9lbXB0eSgmZGlydHlfcmVhbG1zKSkgeworCQlyZWFsbSA9IGxpc3RfZmlyc3RfZW50cnkoJmRpcnR5X3JlYWxtcywgc3RydWN0IGNlcGhfc25hcF9yZWFsbSwKKwkJCQkJIGRpcnR5X2l0ZW0pOwogCQlxdWV1ZV9yZWFsbV9jYXBfc25hcHMocmVhbG0pOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zdXBlci5jIGIvZnMvY2VwaC9zdXBlci5jCmluZGV4IGJmNmYwZjMuLjljNTA4NTQgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvc3VwZXIuYworKysgYi9mcy9jZXBoL3N1cGVyLmMKQEAgLTI5MCw2ICsyOTAsOCBAQAogCiAgICAgICAgIGZzb3B0LT5yc2l6ZSA9IENFUEhfTU9VTlRfUlNJWkVfREVGQVVMVDsKICAgICAgICAgZnNvcHQtPnNuYXBkaXJfbmFtZSA9IGtzdHJkdXAoQ0VQSF9TTkFQRElSTkFNRV9ERUZBVUxULCBHRlBfS0VSTkVMKTsKKwlmc29wdC0+Y2Fwc193YW50ZWRfZGVsYXlfbWluID0gQ0VQSF9DQVBTX1dBTlRFRF9ERUxBWV9NSU5fREVGQVVMVDsKKwlmc29wdC0+Y2Fwc193YW50ZWRfZGVsYXlfbWF4ID0gQ0VQSF9DQVBTX1dBTlRFRF9ERUxBWV9NQVhfREVGQVVMVDsKICAgICAgICAgZnNvcHQtPmNhcF9yZWxlYXNlX3NhZmV0eSA9IENFUEhfQ0FQX1JFTEVBU0VfU0FGRVRZX0RFRkFVTFQ7CiAgICAgICAgIGZzb3B0LT5tYXhfcmVhZGRpciA9IENFUEhfTUFYX1JFQURESVJfREVGQVVMVDsKICAgICAgICAgZnNvcHQtPm1heF9yZWFkZGlyX2J5dGVzID0gQ0VQSF9NQVhfUkVBRERJUl9CWVRFU19ERUZBVUxUOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC94YXR0ci5jIGIvZnMvY2VwaC94YXR0ci5jCmluZGV4IDZlMTJhNmIuLjhjOWViYTYgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgveGF0dHIuYworKysgYi9mcy9jZXBoL3hhdHRyLmMKQEAgLTIxOSw2ICsyMTksNyBAQAogCXN0cnVjdCByYl9ub2RlICoqcDsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKIAlzdHJ1Y3QgY2VwaF9pbm9kZV94YXR0ciAqeGF0dHIgPSBOVUxMOworCWludCBuYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKIAlpbnQgYzsKIAogCXAgPSAmY2ktPmlfeGF0dHJzLmluZGV4LnJiX25vZGU7CkBAIC0yMjYsNiArMjI3LDggQEAKIAkJcGFyZW50ID0gKnA7CiAJCXhhdHRyID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgY2VwaF9pbm9kZV94YXR0ciwgbm9kZSk7CiAJCWMgPSBzdHJuY21wKG5hbWUsIHhhdHRyLT5uYW1lLCB4YXR0ci0+bmFtZV9sZW4pOworCQlpZiAoYyA9PSAwICYmIG5hbWVfbGVuID4geGF0dHItPm5hbWVfbGVuKQorCQkJYyA9IDE7CiAJCWlmIChjIDwgMCkKIAkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKIAkJZWxzZSBpZiAoYyA+IDApCmRpZmYgLS1naXQgYS9mcy9jaWZzL0tjb25maWcgYi9mcy9jaWZzL0tjb25maWcKaW5kZXggZWU0NTY0OC4uN2NiMGY3ZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9LY29uZmlnCisrKyBiL2ZzL2NpZnMvS2NvbmZpZwpAQCAtMyw2ICszLDcgQEAKIAlkZXBlbmRzIG9uIElORVQKIAlzZWxlY3QgTkxTCiAJc2VsZWN0IENSWVBUTworCXNlbGVjdCBDUllQVE9fTUQ0CiAJc2VsZWN0IENSWVBUT19NRDUKIAlzZWxlY3QgQ1JZUFRPX0hNQUMKIAlzZWxlY3QgQ1JZUFRPX0FSQzQKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvTWFrZWZpbGUgYi9mcy9jaWZzL01ha2VmaWxlCmluZGV4IDQzYjE5ZGQuLmQ4NzU1ODQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvTWFrZWZpbGUKKysrIGIvZnMvY2lmcy9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAKIAogY2lmcy15IDo9IGNpZnNmcy5vIGNpZnNzbWIubyBjaWZzX2RlYnVnLm8gY29ubmVjdC5vIGRpci5vIGZpbGUubyBpbm9kZS5vIFwKIAkgIGxpbmsubyBtaXNjLm8gbmV0bWlzYy5vIHNtYmRlcy5vIHNtYmVuY3J5cHQubyB0cmFuc3BvcnQubyBhc24xLm8gXAotCSAgbWQ0Lm8gbWQ1Lm8gY2lmc191bmljb2RlLm8gbnRlcnIubyB4YXR0ci5vIGNpZnNlbmNyeXB0Lm8gXAorCSAgY2lmc191bmljb2RlLm8gbnRlcnIubyB4YXR0ci5vIGNpZnNlbmNyeXB0Lm8gXAogCSAgcmVhZGRpci5vIGlvY3RsLm8gc2Vzcy5vIGV4cG9ydC5vCiAKIGNpZnMtJChDT05GSUdfQ0lGU19BQ0wpICs9IGNpZnNhY2wubwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9SRUFETUUgYi9mcy9jaWZzL1JFQURNRQppbmRleCA0NmFmOTlhLi5mZTE2ODM1IDEwMDY0NAotLS0gYS9mcy9jaWZzL1JFQURNRQorKysgYi9mcy9jaWZzL1JFQURNRQpAQCAtNDUyLDYgKzQ1MiwxMSBAQAogCQlpZiBvcGxvY2sgKGNhY2hpbmcgdG9rZW4pIGlzIGdyYW50ZWQgYW5kIGhlbGQuIE5vdGUgdGhhdAogCQlkaXJlY3QgYWxsb3dzIHdyaXRlIG9wZXJhdGlvbnMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplCiAJCXRvIGJlIHNlbnQgdG8gdGhlIHNlcnZlci4KKyAgc3RyaWN0Y2FjaGUgICBVc2UgZm9yIHN3aXRjaGluZyBvbiBzdHJpY3QgY2FjaGUgbW9kZS4gSW4gdGhpcyBtb2RlIHRoZQorCQljbGllbnQgcmVhZCBmcm9tIHRoZSBjYWNoZSBhbGwgdGhlIHRpbWUgaXQgaGFzIE9wbG9jayBMZXZlbCBJSSwKKwkJb3RoZXJ3aXNlIC0gcmVhZCBmcm9tIHRoZSBzZXJ2ZXIuIEFsbCB3cml0dGVuIGRhdGEgYXJlIHN0b3JlZAorCQlpbiB0aGUgY2FjaGUsIGJ1dCBpZiB0aGUgY2xpZW50IGRvZXNuJ3QgaGF2ZSBFeGNsdXNpdmUgT3Bsb2NrLAorCQlpdCB3cml0ZXMgdGhlIGRhdGEgdG8gdGhlIHNlcnZlci4KICAgYWNsICAgCUFsbG93IHNldGZhY2wgYW5kIGdldGZhY2wgdG8gbWFuYWdlIHBvc2l4IEFDTHMgaWYgc2VydmVyCiAJCXN1cHBvcnRzIHRoZW0uICAoZGVmYXVsdCkKICAgbm9hY2wgCURvIG5vdCBhbGxvdyBzZXRmYWNsIGFuZCBnZXRmYWNsIGNhbGxzIG9uIHRoaXMgbW91bnQKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMgYi9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCmluZGV4IDdlZDM2NTMuLjBhMjY1YWQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKKysrIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwpAQCAtMjgyLDggKzI4Miw2IEBACiAJY0ZZSSgxLCAiaW4gJXMiLCBfX2Z1bmNfXyk7CiAJQlVHX09OKElTX1JPT1QobW50cHQpKTsKIAotCXhpZCA9IEdldFhpZCgpOwotCiAJLyoKIAkgKiBUaGUgTVNERlMgc3BlYyBzdGF0ZXMgdGhhdCBwYXRocyBpbiBERlMgcmVmZXJyYWwgcmVxdWVzdHMgYW5kCiAJICogcmVzcG9uc2VzIG11c3QgYmUgcHJlZml4ZWQgYnkgYSBzaW5nbGUgJ1wnIGNoYXJhY3RlciBpbnN0ZWFkIG9mCkBAIC0yOTMsMjAgKzI5MSwyMSBAQAogCW1udCA9IEVSUl9QVFIoLUVOT01FTSk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShtbnRwdCk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKQotCQlnb3RvIGZyZWVfeGlkOworCQlnb3RvIGNkZGFfZXhpdDsKIAogCWNpZnNfc2IgPSBDSUZTX1NCKG1udHB0LT5kX2lub2RlLT5pX3NiKTsKIAl0bGluayA9IGNpZnNfc2JfdGxpbmsoY2lmc19zYik7Ci0JbW50ID0gRVJSX1BUUigtRUlOVkFMKTsKIAlpZiAoSVNfRVJSKHRsaW5rKSkgewogCQltbnQgPSBFUlJfQ0FTVCh0bGluayk7CiAJCWdvdG8gZnJlZV9mdWxsX3BhdGg7CiAJfQogCXNlcyA9IHRsaW5rX3Rjb24odGxpbmspLT5zZXM7CiAKKwl4aWQgPSBHZXRYaWQoKTsKIAlyYyA9IGdldF9kZnNfcGF0aCh4aWQsIHNlcywgZnVsbF9wYXRoICsgMSwgY2lmc19zYi0+bG9jYWxfbmxzLAogCQkmbnVtX3JlZmVycmFscywgJnJlZmVycmFscywKIAkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisJRnJlZVhpZCh4aWQpOwogCiAJY2lmc19wdXRfdGxpbmsodGxpbmspOwogCkBAIC0zMzksOCArMzM4LDcgQEAKIAlmcmVlX2Rmc19pbmZvX2FycmF5KHJlZmVycmFscywgbnVtX3JlZmVycmFscyk7CiBmcmVlX2Z1bGxfcGF0aDoKIAlrZnJlZShmdWxsX3BhdGgpOwotZnJlZV94aWQ6Ci0JRnJlZVhpZCh4aWQpOworY2RkYV9leGl0OgogCWNGWUkoMSwgImxlYXZpbmcgJXMiICwgX19mdW5jX18pOwogCXJldHVybiBtbnQ7CiB9CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNhY2wuYyBiL2ZzL2NpZnMvY2lmc2FjbC5jCmluZGV4IDFlNzYzNmIuLmJlZWViZjEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2FjbC5jCisrKyBiL2ZzL2NpZnMvY2lmc2FjbC5jCkBAIC0zNzIsNiArMzcyLDEwIEBACiAKIAkJcHBhY2UgPSBrbWFsbG9jKG51bV9hY2VzICogc2l6ZW9mKHN0cnVjdCBjaWZzX2FjZSAqKSwKIAkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcGFjZSkgeworCQkJY0VSUk9SKDEsICJEQUNMIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIik7CisJCQlyZXR1cm47CisJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2FjZXM7ICsraSkgewogCQkJcHBhY2VbaV0gPSAoc3RydWN0IGNpZnNfYWNlICopIChhY2xfYmFzZSArIGFjbF9zaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwppbmRleCA2NmYzZDUwLi5hNTE1ODVmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKKysrIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSAiY2lmc3BkdS5oIgogI2luY2x1ZGUgImNpZnNnbG9iLmgiCiAjaW5jbHVkZSAiY2lmc19kZWJ1Zy5oIgotI2luY2x1ZGUgIm1kNS5oIgogI2luY2x1ZGUgImNpZnNfdW5pY29kZS5oIgogI2luY2x1ZGUgImNpZnNwcm90by5oIgogI2luY2x1ZGUgIm50bG1zc3AuaCIKQEAgLTM3LDExICszNiw2IEBACiAvKiBOb3RlIHRoYXQgdGhlIHNtYiBoZWFkZXIgc2lnbmF0dXJlIGZpZWxkIG9uIGlucHV0IGNvbnRhaW5zIHRoZQogCXNlcXVlbmNlIG51bWJlciBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgKi8KIAotZXh0ZXJuIHZvaWQgbWRmb3VyKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBuKTsKLWV4dGVybiB2b2lkIEVfbWQ0aGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKnAxNik7Ci1leHRlcm4gdm9pZCBTTUJlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCSAgICAgICB1bnNpZ25lZCBjaGFyICpwMjQpOwotCiBzdGF0aWMgaW50IGNpZnNfY2FsY3VsYXRlX3NpZ25hdHVyZShjb25zdCBzdHJ1Y3Qgc21iX2hkciAqY2lmc19wZHUsCiAJCQkJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBjaGFyICpzaWduYXR1cmUpCiB7CkBAIC0yMzQsNiArMjI4LDcgQEAKIC8qIGZpcnN0IGNhbGN1bGF0ZSAyNCBieXRlcyBudGxtIHJlc3BvbnNlIGFuZCB0aGVuIDE2IGJ5dGUgc2Vzc2lvbiBrZXkgKi8KIGludCBzZXR1cF9udGxtX3Jlc3BvbnNlKHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzKQogeworCWludCByYyA9IDA7CiAJdW5zaWduZWQgaW50IHRlbXBfbGVuID0gQ0lGU19TRVNTX0tFWV9TSVpFICsgQ0lGU19BVVRIX1JFU1BfU0laRTsKIAljaGFyIHRlbXBfa2V5W0NJRlNfU0VTU19LRVlfU0laRV07CiAKQEAgLTI0NywxMyArMjQyLDI2IEBACiAJfQogCXNlcy0+YXV0aF9rZXkubGVuID0gdGVtcF9sZW47CiAKLQlTTUJOVGVuY3J5cHQoc2VzLT5wYXNzd29yZCwgc2VzLT5zZXJ2ZXItPmNyeXB0a2V5LAorCXJjID0gU01CTlRlbmNyeXB0KHNlcy0+cGFzc3dvcmQsIHNlcy0+c2VydmVyLT5jcnlwdGtleSwKIAkJCXNlcy0+YXV0aF9rZXkucmVzcG9uc2UgKyBDSUZTX1NFU1NfS0VZX1NJWkUpOworCWlmIChyYykgeworCQljRllJKDEsICIlcyBDYW4ndCBnZW5lcmF0ZSBOVExNIHJlc3BvbnNlLCBlcnJvcjogJWQiLAorCQkJX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAotCUVfbWQ0aGFzaChzZXMtPnBhc3N3b3JkLCB0ZW1wX2tleSk7Ci0JbWRmb3VyKHNlcy0+YXV0aF9rZXkucmVzcG9uc2UsIHRlbXBfa2V5LCBDSUZTX1NFU1NfS0VZX1NJWkUpOworCXJjID0gRV9tZDRoYXNoKHNlcy0+cGFzc3dvcmQsIHRlbXBfa2V5KTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXMgQ2FuJ3QgZ2VuZXJhdGUgTlQgaGFzaCwgZXJyb3I6ICVkIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAotCXJldHVybiAwOworCXJjID0gbWRmb3VyKHNlcy0+YXV0aF9rZXkucmVzcG9uc2UsIHRlbXBfa2V5LCBDSUZTX1NFU1NfS0VZX1NJWkUpOworCWlmIChyYykKKwkJY0ZZSSgxLCAiJXMgQ2FuJ3QgZ2VuZXJhdGUgTlRMTSBzZXNzaW9uIGtleSwgZXJyb3I6ICVkIiwKKwkJCV9fZnVuY19fLCByYyk7CisKKwlyZXR1cm4gcmM7CiB9CiAKICNpZmRlZiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0gKQEAgLTY0OSw5ICs2NTcsMTAgQEAKIAlnZXRfcmFuZG9tX2J5dGVzKHNlY19rZXksIENJRlNfU0VTU19LRVlfU0laRSk7CiAKIAl0Zm1fYXJjNCA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoImVjYihhcmM0KSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOwotCWlmICghdGZtX2FyYzQgfHwgSVNfRVJSKHRmbV9hcmM0KSkgeworCWlmIChJU19FUlIodGZtX2FyYzQpKSB7CisJCXJjID0gUFRSX0VSUih0Zm1fYXJjNCk7CiAJCWNFUlJPUigxLCAiY291bGQgbm90IGFsbG9jYXRlIGNyeXB0byBBUEkgYXJjNFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHRmbV9hcmM0KTsKKwkJcmV0dXJuIHJjOwogCX0KIAogCWRlc2MudGZtID0gdGZtX2FyYzQ7CkBAIC03MDAsMTQgKzcwOSwxMyBAQAogCXVuc2lnbmVkIGludCBzaXplOwogCiAJc2VydmVyLT5zZWNtZWNoLmhtYWNtZDUgPSBjcnlwdG9fYWxsb2Nfc2hhc2goImhtYWMobWQ1KSIsIDAsIDApOwotCWlmICghc2VydmVyLT5zZWNtZWNoLmhtYWNtZDUgfHwKLQkJCUlTX0VSUihzZXJ2ZXItPnNlY21lY2guaG1hY21kNSkpIHsKKwlpZiAoSVNfRVJSKHNlcnZlci0+c2VjbWVjaC5obWFjbWQ1KSkgewogCQljRVJST1IoMSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjcnlwdG8gaG1hY21kNVxuIik7CiAJCXJldHVybiBQVFJfRVJSKHNlcnZlci0+c2VjbWVjaC5obWFjbWQ1KTsKIAl9CiAKIAlzZXJ2ZXItPnNlY21lY2gubWQ1ID0gY3J5cHRvX2FsbG9jX3NoYXNoKCJtZDUiLCAwLCAwKTsKLQlpZiAoIXNlcnZlci0+c2VjbWVjaC5tZDUgfHwgSVNfRVJSKHNlcnZlci0+c2VjbWVjaC5tZDUpKSB7CisJaWYgKElTX0VSUihzZXJ2ZXItPnNlY21lY2gubWQ1KSkgewogCQljRVJST1IoMSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjcnlwdG8gbWQ1XG4iKTsKIAkJcmMgPSBQVFJfRVJSKHNlcnZlci0+c2VjbWVjaC5tZDUpOwogCQlnb3RvIGNyeXB0b19hbGxvY2F0ZV9tZDVfZmFpbDsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuaCBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkMmVjMC4uMDAwMDAwMAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogICBmcy9jaWZzL2NpZnNlbmNyeXB0LmgKLSAqCi0gKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDUKLSAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKLSAqCi0gKiAgIEV4dGVybnMgZm9yIG1pc2MuIHNtYWxsIGVuY3J5cHRpb24gcm91dGluZXMKLSAqICAgc28gd2UgZG8gbm90IGhhdmUgdG8gcHV0IHRoZW0gaW4gY2lmc3Byb3RvLmgKLSAqCi0gKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAotICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCi0gKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qIG1kNC5jICovCi1leHRlcm4gdm9pZCBtZGZvdXIodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IG4pOwotLyogc21iZGVzLmMgKi8KLWV4dGVybiB2b2lkIEVfUDE2KHVuc2lnbmVkIGNoYXIgKnAxNCwgdW5zaWduZWQgY2hhciAqcDE2KTsKLWV4dGVybiB2b2lkIEVfUDI0KHVuc2lnbmVkIGNoYXIgKnAyMSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCSAgdW5zaWduZWQgY2hhciAqcDI0KTsKLQotCi0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IGE4MzIzZjEuLmYyOTcwMTMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtNjAwLDEwICs2MDAsMTcgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzc2l6ZV90IHdyaXR0ZW47CisJaW50IHJjOwogCiAJd3JpdHRlbiA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOwotCWlmICghQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwpCi0JCWZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKKworCWlmIChDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZUFsbCkKKwkJcmV0dXJuIHdyaXR0ZW47CisKKwlyYyA9IGZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKKwlpZiAocmMpCisJCWNGWUkoMSwgImNpZnNfZmlsZV9haW9fd3JpdGU6ICVkIHJjIG9uICVwIGlub2RlIiwgcmMsIGlub2RlKTsKKwogCXJldHVybiB3cml0dGVuOwogfQogCkBAIC03MzcsNyArNzQ0LDcgQEAKIAkucmVhZCA9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUgPSBkb19zeW5jX3dyaXRlLAogCS5haW9fcmVhZCA9IGNpZnNfc3RyaWN0X3JlYWR2LAotCS5haW9fd3JpdGUgPSBjaWZzX2ZpbGVfYWlvX3dyaXRlLAorCS5haW9fd3JpdGUgPSBjaWZzX3N0cmljdF93cml0ZXYsCiAJLm9wZW4gPSBjaWZzX29wZW4sCiAJLnJlbGVhc2UgPSBjaWZzX2Nsb3NlLAogCS5sb2NrID0gY2lmc19sb2NrLApAQCAtNzkzLDcgKzgwMCw3IEBACiAJLnJlYWQgPSBkb19zeW5jX3JlYWQsCiAJLndyaXRlID0gZG9fc3luY193cml0ZSwKIAkuYWlvX3JlYWQgPSBjaWZzX3N0cmljdF9yZWFkdiwKLQkuYWlvX3dyaXRlID0gY2lmc19maWxlX2Fpb193cml0ZSwKKwkuYWlvX3dyaXRlID0gY2lmc19zdHJpY3Rfd3JpdGV2LAogCS5vcGVuID0gY2lmc19vcGVuLAogCS5yZWxlYXNlID0gY2lmc19jbG9zZSwKIAkuZnN5bmMgPSBjaWZzX3N0cmljdF9mc3luYywKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IGYyMzIwNmQuLmE5MzcxYjYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtODUsNyArODUsOSBAQAogZXh0ZXJuIHNzaXplX3QgY2lmc19zdHJpY3RfcmVhZHYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJCQkgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKTsKIGV4dGVybiBzc2l6ZV90IGNpZnNfdXNlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKndyaXRlX2RhdGEsCi0JCQkgc2l6ZV90IHdyaXRlX3NpemUsIGxvZmZfdCAqcG9mZnNldCk7CisJCQkgICAgICAgc2l6ZV90IHdyaXRlX3NpemUsIGxvZmZfdCAqcG9mZnNldCk7CitleHRlcm4gc3NpemVfdCBjaWZzX3N0cmljdF93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcyk7CiBleHRlcm4gaW50IGNpZnNfbG9jayhzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xvY2sgKik7CiBleHRlcm4gaW50IGNpZnNfZnN5bmMoc3RydWN0IGZpbGUgKiwgaW50KTsKIGV4dGVybiBpbnQgY2lmc19zdHJpY3RfZnN5bmMoc3RydWN0IGZpbGUgKiwgaW50KTsKQEAgLTEyNSw1ICsxMjcsNSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBjaWZzX2V4cG9ydF9vcHM7CiAjZW5kaWYgLyogRVhQRVJJTUVOVEFMICovCiAKLSNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNjkiCisjZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjcxIgogI2VuZGlmCQkJCS8qIF9DSUZTRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDViZmI3NTMuLjE3YWZiMGYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTE2Niw2ICsxNjYsOSBAQAogCXN0cnVjdCBzb2NrZXQgKnNzb2NrZXQ7CiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZHN0YWRkcjsKIAlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcmNhZGRyOyAvKiBsb2NhbGx5IGJpbmQgdG8gdGhpcyBJUCAqLworI2lmZGVmIENPTkZJR19ORVRfTlMKKwlzdHJ1Y3QgbmV0ICpuZXQ7CisjZW5kaWYKIAl3YWl0X3F1ZXVlX2hlYWRfdCByZXNwb25zZV9xOwogCXdhaXRfcXVldWVfaGVhZF90IHJlcXVlc3RfcTsgLyogaWYgbW9yZSB0aGFuIG1heG1weCB0byBzcnZyIG11c3QgYmxvY2sqLwogCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19taWRfcTsKQEAgLTE4NSw2ICsxODgsOCBAQAogCS8qIG11bHRpcGxleGVkIHJlYWRzIG9yIHdyaXRlcyAqLwogCXVuc2lnbmVkIGludCBtYXhCdWY7CS8qIG1heEJ1ZiBzcGVjaWZpZXMgdGhlIG1heGltdW0gKi8KIAkvKiBtZXNzYWdlIHNpemUgdGhlIHNlcnZlciBjYW4gc2VuZCBvciByZWNlaXZlIGZvciBub24tcmF3IFNNQnMgKi8KKwkvKiBtYXhCdWYgaXMgcmV0dXJuZWQgYnkgU01CIE5lZ290aWF0ZVByb3RvY29sIHNvIG1heEJ1ZiBpcyBvbmx5IDAgKi8KKwkvKiB3aGVuIHNvY2tldCBpcyBzZXR1cCAoYW5kIGR1cmluZyByZWNvbm5lY3QpIGJlZm9yZSBOZWdQcm90IHNlbnQgKi8KIAl1bnNpZ25lZCBpbnQgbWF4X3J3OwkvKiBtYXhSdyBzcGVjaWZpZXMgdGhlIG1heGltdW0gKi8KIAkvKiBtZXNzYWdlIHNpemUgdGhlIHNlcnZlciBjYW4gc2VuZCBvciByZWNlaXZlIGZvciAqLwogCS8qIFNNQl9DT01fV1JJVEVfUkFXIG9yIFNNQl9DT01fUkVBRF9SQVcuICovCkBAIC0yMTcsNiArMjIyLDM2IEBACiB9OwogCiAvKgorICogTWFjcm9zIHRvIGFsbG93IHRoZSBUQ1BfU2VydmVyX0luZm8tPm5ldCBmaWVsZCBhbmQgcmVsYXRlZCBjb2RlIHRvIGRyb3Agb3V0CisgKiB3aGVuIENPTkZJR19ORVRfTlMgaXNuJ3Qgc2V0LgorICovCisKKyNpZmRlZiBDT05GSUdfTkVUX05TCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqY2lmc19uZXRfbnMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc3J2KQoreworCXJldHVybiBzcnYtPm5ldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNpZnNfc2V0X25ldF9ucyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzcnYsIHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzcnYtPm5ldCA9IG5ldDsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpjaWZzX25ldF9ucyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzcnYpCit7CisJcmV0dXJuICZpbml0X25ldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNpZnNfc2V0X25ldF9ucyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzcnYsIHN0cnVjdCBuZXQgKm5ldCkKK3sKK30KKworI2VuZGlmCisKKy8qCiAgKiBTZXNzaW9uIHN0cnVjdHVyZS4gIE9uZSBvZiB0aGVzZSBmb3IgZWFjaCB1aWQgc2Vzc2lvbiB3aXRoIGEgcGFydGljdWxhciBob3N0CiAgKi8KIHN0cnVjdCBjaWZzU2VzSW5mbyB7CkBAIC02MTksNyArNjU0LDcgQEAKICNkZWZpbmUgICBNSURfUkVRVUVTVF9TVUJNSVRURUQgMgogI2RlZmluZSAgIE1JRF9SRVNQT05TRV9SRUNFSVZFRCA0CiAjZGVmaW5lICAgTUlEX1JFVFJZX05FRURFRCAgICAgIDggLyogc2Vzc2lvbiBjbG9zZWQgd2hpbGUgdGhpcyByZXF1ZXN0IG91dCAqLwotI2RlZmluZSAgIE1JRF9OT19SRVNQX05FRURFRCAweDEwCisjZGVmaW5lICAgTUlEX1JFU1BPTlNFX01BTEZPUk1FRCAweDEwCiAKIC8qIFR5cGVzIG9mIHJlc3BvbnNlIGJ1ZmZlciByZXR1cm5lZCBmcm9tIFNlbmRSZWNlaXZlMiAqLwogI2RlZmluZSAgIENJRlNfTk9fQlVGRkVSICAgICAgICAwICAgIC8qIFJlc3BvbnNlIGJ1ZmZlciBub3QgcmV0dXJuZWQgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3Byb3RvLmggYi9mcy9jaWZzL2NpZnNwcm90by5oCmluZGV4IDk4Mjg5NWYuLjgwOTZmMjcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3Byb3RvLmgKKysrIGIvZnMvY2lmcy9jaWZzcHJvdG8uaApAQCAtODUsNiArODUsOCBAQAogZXh0ZXJuIGJvb2wgaXNfdmFsaWRfb3Bsb2NrX2JyZWFrKHN0cnVjdCBzbWJfaGRyICpzbWIsCiAJCQkJICBzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICopOwogZXh0ZXJuIGJvb2wgaXNfc2l6ZV9zYWZlX3RvX2NoYW5nZShzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqLCBfX3U2NCBlb2YpOworZXh0ZXJuIHZvaWQgY2lmc191cGRhdGVfZW9mKHN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSwgbG9mZl90IG9mZnNldCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgYnl0ZXNfd3JpdHRlbik7CiBleHRlcm4gc3RydWN0IGNpZnNGaWxlSW5mbyAqZmluZF93cml0YWJsZV9maWxlKHN0cnVjdCBjaWZzSW5vZGVJbmZvICosIGJvb2wpOwogZXh0ZXJuIHN0cnVjdCBjaWZzRmlsZUluZm8gKmZpbmRfcmVhZGFibGVfZmlsZShzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqLCBib29sKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc21iQ2FsY1NpemUoc3RydWN0IHNtYl9oZHIgKnB0cik7CkBAIC0zNzMsNyArMzc1LDcgQEAKIGV4dGVybiBpbnQgY2lmc192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBzbWJfaGRyICosCiAJCQkJIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwKIAkJCQlfX3UzMiBleHBlY3RlZF9zZXF1ZW5jZV9udW1iZXIpOwotZXh0ZXJuIHZvaWQgU01CTlRlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIGludCBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CiBleHRlcm4gaW50IHNldHVwX250bG1fcmVzcG9uc2Uoc3RydWN0IGNpZnNTZXNJbmZvICopOwogZXh0ZXJuIGludCBzZXR1cF9udGxtdjJfcnNwKHN0cnVjdCBjaWZzU2VzSW5mbyAqLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICopOwogZXh0ZXJuIGludCBjaWZzX2NyeXB0b19zaGFzaF9hbGxvY2F0ZShzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICopOwpAQCAtNDIzLDQgKzQyNSwxMSBAQAogZXh0ZXJuIGludCBDSUZTQ2hlY2tNRlN5bWxpbmsoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLAogCQljb25zdCB1bnNpZ25lZCBjaGFyICpwYXRoLAogCQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLCBpbnQgeGlkKTsKK2V4dGVybiBpbnQgbWRmb3VyKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBFX21kNGhhc2goY29uc3QgdW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpwMTYpOworZXh0ZXJuIHZvaWQgU01CZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAorCQkJdW5zaWduZWQgY2hhciAqcDI0KTsKK2V4dGVybiB2b2lkIEVfUDE2KHVuc2lnbmVkIGNoYXIgKnAxNCwgdW5zaWduZWQgY2hhciAqcDE2KTsKK2V4dGVybiB2b2lkIEVfUDI0KHVuc2lnbmVkIGNoYXIgKnAyMSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCisJCQl1bnNpZ25lZCBjaGFyICpwMjQpOwogI2VuZGlmCQkJLyogX0NJRlNQUk9UT19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDMxMDZmNWUuLjkwNGFhNDcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC0xMzYsOSArMTM2LDYgQEAKIAkJfQogCX0KIAotCWlmIChzZXMtPnN0YXR1cyA9PSBDaWZzRXhpdGluZykKLQkJcmV0dXJuIC1FSU87Ci0KIAkvKgogCSAqIEdpdmUgZGVtdWx0aXBsZXggdGhyZWFkIHVwIHRvIDEwIHNlY29uZHMgdG8gcmVjb25uZWN0LCBzaG91bGQgYmUKIAkgKiBncmVhdGVyIHRoYW4gY2lmcyBzb2NrZXQgdGltZW91dCB3aGljaCBpcyA3IHNlY29uZHMKQEAgLTE1Niw3ICsxNTMsNyBAQAogCQkgKiByZXRyeWluZyB1bnRpbCBwcm9jZXNzIGlzIGtpbGxlZCBvciBzZXJ2ZXIgY29tZXMKIAkJICogYmFjayBvbi1saW5lCiAJCSAqLwotCQlpZiAoIXRjb24tPnJldHJ5IHx8IHNlcy0+c3RhdHVzID09IENpZnNFeGl0aW5nKSB7CisJCWlmICghdGNvbi0+cmV0cnkpIHsKIAkJCWNGWUkoMSwgImdhdmUgdXAgd2FpdGluZyBvbiByZWNvbm5lY3QgaW4gc21iX2luaXQiKTsKIAkJCXJldHVybiAtRUhPU1RET1dOOwogCQl9CkBAIC00OTE0LDcgKzQ5MTEsNiBAQAogCQkgICBfX3UxNiBmaWQsIF9fdTMyIHBpZF9vZl9vcGVuZXIsIGJvb2wgU2V0QWxsb2NhdGlvbikKIHsKIAlzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JlcSAqcFNNQiAgPSBOVUxMOwotCWNoYXIgKmRhdGFfb2Zmc2V0OwogCXN0cnVjdCBmaWxlX2VuZF9vZl9maWxlX2luZm8gKnBhcm1fZGF0YTsKIAlpbnQgcmMgPSAwOwogCV9fdTE2IHBhcmFtcywgcGFyYW1fb2Zmc2V0LCBvZmZzZXQsIGJ5dGVfY291bnQsIGNvdW50OwpAQCAtNDkzOCw4ICs0OTM0LDYgQEAKIAlwYXJhbV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JlcSwgRmlkKSAtIDQ7CiAJb2Zmc2V0ID0gcGFyYW1fb2Zmc2V0ICsgcGFyYW1zOwogCi0JZGF0YV9vZmZzZXQgPSAoY2hhciAqKSAoJnBTTUItPmhkci5Qcm90b2NvbCkgKyBvZmZzZXQ7Ci0KIAljb3VudCA9IHNpemVvZihzdHJ1Y3QgZmlsZV9lbmRfb2ZfZmlsZV9pbmZvKTsKIAlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDIpOwogCS8qIEJCIGZpbmQgZXhhY3QgbWF4IFNNQiBQRFUgZnJvbSBzZXNzIHN0cnVjdHVyZSBCQiAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCAxOGQzYzc3Li44ZDZjMTdhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtNTUsOSArNTUsNiBAQAogLyogU01CIGVjaG8gInRpbWVvdXQiIC0tIEZJWE1FOiB0dW5hYmxlPyAqLwogI2RlZmluZSBTTUJfRUNIT19JTlRFUlZBTCAoNjAgKiBIWikKIAotZXh0ZXJuIHZvaWQgU01CTlRlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqYzgsCi0JCQkgdW5zaWduZWQgY2hhciAqcDI0KTsKLQogZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19yZXFfcG9vbHA7CiAKIHN0cnVjdCBzbWJfdm9sIHsKQEAgLTg3LDYgKzg0LDcgQEAKIAlib29sIG5vX3hhdHRyOjE7ICAgLyogc2V0IGlmIHhhdHRyIChFQSkgc3VwcG9ydCBzaG91bGQgYmUgZGlzYWJsZWQqLwogCWJvb2wgc2VydmVyX2lubzoxOyAvKiB1c2UgaW5vZGUgbnVtYmVycyBmcm9tIHNlcnZlciBpZSBVbmlxdWVJZCAqLwogCWJvb2wgZGlyZWN0X2lvOjE7CisJYm9vbCBzdHJpY3RfaW86MTsgLyogc3RyaWN0IGNhY2hlIGJlaGF2aW9yICovCiAJYm9vbCByZW1hcDoxOyAgICAgIC8qIHNldCB0byByZW1hcCBzZXZlbiByZXNlcnZlZCBjaGFycyBpbiBmaWxlbmFtZXMgKi8KIAlib29sIHBvc2l4X3BhdGhzOjE7IC8qIHVuc2V0IHRvIG5vdCBhc2sgZm9yIHBvc2l4IHBhdGhuYW1lcy4gKi8KIAlib29sIG5vX2xpbnV4X2V4dDoxOwpAQCAtMzM5LDggKzMzNywxMyBAQAogCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCQlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvLCBlY2hvLndvcmspOwogCi0JLyogbm8gbmVlZCB0byBwaW5nIGlmIHdlIGdvdCBhIHJlc3BvbnNlIHJlY2VudGx5ICovCi0JaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHNlcnZlci0+bHN0cnAgKyBTTUJfRUNIT19JTlRFUlZBTCAtIEhaKSkKKwkvKgorCSAqIFdlIGNhbm5vdCBzZW5kIGFuIGVjaG8gdW50aWwgdGhlIE5FR09USUFURV9QUk9UT0NPTCByZXF1ZXN0IGlzCisJICogZG9uZSwgd2hpY2ggaXMgaW5kaWNhdGVkIGJ5IG1heEJ1ZiAhPSAwLiBBbHNvLCBubyBuZWVkIHRvIHBpbmcgaWYKKwkgKiB3ZSBnb3QgYSByZXNwb25zZSByZWNlbnRseQorCSAqLworCWlmIChzZXJ2ZXItPm1heEJ1ZiA9PSAwIHx8CisJICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHNlcnZlci0+bHN0cnAgKyBTTUJfRUNIT19JTlRFUlZBTCAtIEhaKSkKIAkJZ290byByZXF1ZXVlX2VjaG87CiAKIAlyYyA9IENJRlNTTUJFY2hvKHNlcnZlcik7CkBAIC01ODAsMTQgKzU4MywyMyBAQAogCQllbHNlIGlmIChyZWNvbm5lY3QgPT0gMSkKIAkJCWNvbnRpbnVlOwogCi0JCWxlbmd0aCArPSA0OyAvKiBhY2NvdW50IGZvciByZmMxMDAyIGhkciAqLworCQl0b3RhbF9yZWFkICs9IDQ7IC8qIGFjY291bnQgZm9yIHJmYzEwMDIgaGRyICovCiAKKwkJZHVtcF9zbWIoc21iX2J1ZmZlciwgdG90YWxfcmVhZCk7CiAKLQkJZHVtcF9zbWIoc21iX2J1ZmZlciwgbGVuZ3RoKTsKLQkJaWYgKGNoZWNrU01CKHNtYl9idWZmZXIsIHNtYl9idWZmZXItPk1pZCwgdG90YWxfcmVhZCs0KSkgewotCQkJY2lmc19kdW1wX21lbSgiQmFkIFNNQjogIiwgc21iX2J1ZmZlciwgNDgpOwotCQkJY29udGludWU7Ci0JCX0KKwkJLyoKKwkJICogV2Uga25vdyB0aGF0IHdlIHJlY2VpdmVkIGVub3VnaCB0byBnZXQgdG8gdGhlIE1JRCBhcyB3ZQorCQkgKiBjaGVja2VkIHRoZSBwZHVfbGVuZ3RoIGVhcmxpZXIuIE5vdyBjaGVjayB0byBzZWUKKwkJICogaWYgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlciBpcyBPSy4gV2UgYm9ycm93IHRoZSBsZW5ndGgKKwkJICogdmFyIGZvciB0aGUgcmVzdCBvZiB0aGUgbG9vcCB0byBhdm9pZCBhIG5ldyBzdGFjayB2YXIuCisJCSAqCisJCSAqIDQ4IGJ5dGVzIGlzIGVub3VnaCB0byBkaXNwbGF5IHRoZSBoZWFkZXIgYW5kIGEgbGl0dGxlIGJpdAorCQkgKiBpbnRvIHRoZSBwYXlsb2FkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisJCSAqLworCQlsZW5ndGggPSBjaGVja1NNQihzbWJfYnVmZmVyLCBzbWJfYnVmZmVyLT5NaWQsIHRvdGFsX3JlYWQpOworCQlpZiAobGVuZ3RoICE9IDApCisJCQljaWZzX2R1bXBfbWVtKCJCYWQgU01COiAiLCBzbWJfYnVmZmVyLAorCQkJCQltaW5fdCh1bnNpZ25lZCBpbnQsIHRvdGFsX3JlYWQsIDQ4KSk7CiAKIAkJbWlkX2VudHJ5ID0gTlVMTDsKIAkJc2VydmVyLT5sc3RycCA9IGppZmZpZXM7CkBAIC01OTksNyArNjExLDggQEAKIAkJCWlmICgobWlkX2VudHJ5LT5taWQgPT0gc21iX2J1ZmZlci0+TWlkKSAmJgogCQkJICAgIChtaWRfZW50cnktPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgJiYKIAkJCSAgICAobWlkX2VudHJ5LT5jb21tYW5kID09IHNtYl9idWZmZXItPkNvbW1hbmQpKSB7Ci0JCQkJaWYgKGNoZWNrMm5kVDIoc21iX2J1ZmZlcixzZXJ2ZXItPm1heEJ1ZikgPiAwKSB7CisJCQkJaWYgKGxlbmd0aCA9PSAwICYmCisJCQkJICAgY2hlY2sybmRUMihzbWJfYnVmZmVyLCBzZXJ2ZXItPm1heEJ1ZikgPiAwKSB7CiAJCQkJCS8qIFdlIGhhdmUgYSBtdWx0aXBhcnQgdHJhbnNhY3QyIHJlc3AgKi8KIAkJCQkJaXNNdWx0aVJzcCA9IHRydWU7CiAJCQkJCWlmIChtaWRfZW50cnktPnJlc3BfYnVmKSB7CkBAIC02MzQsMTIgKzY0NywxNyBAQAogCQkJCW1pZF9lbnRyeS0+cmVzcF9idWYgPSBzbWJfYnVmZmVyOwogCQkJCW1pZF9lbnRyeS0+bGFyZ2VCdWYgPSBpc0xhcmdlQnVmOwogbXVsdGlfdDJfZm5kOgotCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPSBNSURfUkVTUE9OU0VfUkVDRUlWRUQ7Ci0JCQkJbGlzdF9kZWxfaW5pdCgmbWlkX2VudHJ5LT5xaGVhZCk7Ci0JCQkJbWlkX2VudHJ5LT5jYWxsYmFjayhtaWRfZW50cnkpOworCQkJCWlmIChsZW5ndGggPT0gMCkKKwkJCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9CisJCQkJCQkJTUlEX1JFU1BPTlNFX1JFQ0VJVkVEOworCQkJCWVsc2UKKwkJCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9CisJCQkJCQkJTUlEX1JFU1BPTlNFX01BTEZPUk1FRDsKICNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKIAkJCQltaWRfZW50cnktPndoZW5fcmVjZWl2ZWQgPSBqaWZmaWVzOwogI2VuZGlmCisJCQkJbGlzdF9kZWxfaW5pdCgmbWlkX2VudHJ5LT5xaGVhZCk7CisJCQkJbWlkX2VudHJ5LT5jYWxsYmFjayhtaWRfZW50cnkpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJbWlkX2VudHJ5ID0gTlVMTDsKQEAgLTY1NSw2ICs2NzMsOSBAQAogCQkJCWVsc2UKIAkJCQkJc21hbGxidWYgPSBOVUxMOwogCQkJfQorCQl9IGVsc2UgaWYgKGxlbmd0aCAhPSAwKSB7CisJCQkvKiByZXNwb25zZSBzYW5pdHkgY2hlY2tzIGZhaWxlZCAqLworCQkJY29udGludWU7CiAJCX0gZWxzZSBpZiAoIWlzX3ZhbGlkX29wbG9ja19icmVhayhzbWJfYnVmZmVyLCBzZXJ2ZXIpICYmCiAJCQkgICAhaXNNdWx0aVJzcCkgewogCQkJY0VSUk9SKDEsICJObyB0YXNrIHRvIHdha2UsIHVua25vd24gZnJhbWUgcmVjZWl2ZWQhICIKQEAgLTEzNDQsNiArMTM2NSw4IEBACiAJCQl2b2wtPmRpcmVjdF9pbyA9IDE7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgImZvcmNlZGlyZWN0aW8iLCAxMykgPT0gMCkgewogCQkJdm9sLT5kaXJlY3RfaW8gPSAxOworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJzdHJpY3RjYWNoZSIsIDExKSA9PSAwKSB7CisJCQl2b2wtPnN0cmljdF9pbyA9IDE7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgIm5vYWMiLCA0KSA9PSAwKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBNb3VudCBvcHRpb24gbm9hYyBub3QgIgogCQkJCSJzdXBwb3J0ZWQuIEluc3RlYWQgc2V0ICIKQEAgLTE1NjgsNiArMTU5MSw5IEBACiAKIAlzcGluX2xvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlcnZlciwgJmNpZnNfdGNwX3Nlc19saXN0LCB0Y3Bfc2VzX2xpc3QpIHsKKwkJaWYgKCFuZXRfZXEoY2lmc19uZXRfbnMoc2VydmVyKSwgY3VycmVudC0+bnNwcm94eS0+bmV0X25zKSkKKwkJCWNvbnRpbnVlOworCiAJCWlmICghbWF0Y2hfYWRkcmVzcyhzZXJ2ZXIsIGFkZHIsCiAJCQkJICAgKHN0cnVjdCBzb2NrYWRkciAqKSZ2b2wtPnNyY2FkZHIpKQogCQkJY29udGludWU7CkBAIC0xNTk4LDYgKzE2MjQsOCBAQAogCQlyZXR1cm47CiAJfQogCisJcHV0X25ldChjaWZzX25ldF9ucyhzZXJ2ZXIpKTsKKwogCWxpc3RfZGVsX2luaXQoJnNlcnZlci0+dGNwX3Nlc19saXN0KTsKIAlzcGluX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwogCkBAIC0xNjcyLDYgKzE3MDAsNyBAQAogCQlnb3RvIG91dF9lcnI7CiAJfQogCisJY2lmc19zZXRfbmV0X25zKHRjcF9zZXMsIGdldF9uZXQoY3VycmVudC0+bnNwcm94eS0+bmV0X25zKSk7CiAJdGNwX3Nlcy0+aG9zdG5hbWUgPSBleHRyYWN0X2hvc3RuYW1lKHZvbHVtZV9pbmZvLT5VTkMpOwogCWlmIChJU19FUlIodGNwX3Nlcy0+aG9zdG5hbWUpKSB7CiAJCXJjID0gUFRSX0VSUih0Y3Bfc2VzLT5ob3N0bmFtZSk7CkBAIC0xNzUyLDYgKzE3ODEsOCBAQAogb3V0X2Vycl9jcnlwdG9fcmVsZWFzZToKIAljaWZzX2NyeXB0b19zaGFzaF9yZWxlYXNlKHRjcF9zZXMpOwogCisJcHV0X25ldChjaWZzX25ldF9ucyh0Y3Bfc2VzKSk7CisKIG91dF9lcnI6CiAJaWYgKHRjcF9zZXMpIHsKIAkJaWYgKCFJU19FUlIodGNwX3Nlcy0+aG9zdG5hbWUpKQpAQCAtMjI2Myw4ICsyMjk0LDggQEAKIAl9CiAKIAlpZiAoc29ja2V0ID09IE5VTEwpIHsKLQkJcmMgPSBzb2NrX2NyZWF0ZV9rZXJuKHNmYW1pbHksIFNPQ0tfU1RSRUFNLAotCQkJCSAgICAgIElQUFJPVE9fVENQLCAmc29ja2V0KTsKKwkJcmMgPSBfX3NvY2tfY3JlYXRlKGNpZnNfbmV0X25zKHNlcnZlciksIHNmYW1pbHksIFNPQ0tfU1RSRUFNLAorCQkJCSAgIElQUFJPVE9fVENQLCAmc29ja2V0LCAxKTsKIAkJaWYgKHJjIDwgMCkgewogCQkJY0VSUk9SKDEsICJFcnJvciAlZCBjcmVhdGluZyBzb2NrZXQiLCByYyk7CiAJCQlzZXJ2ZXItPnNzb2NrZXQgPSBOVUxMOwpAQCAtMjU3Niw2ICsyNjA3LDggQEAKIAlpZiAocHZvbHVtZV9pbmZvLT5tdWx0aXVzZXIpCiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IChDSUZTX01PVU5UX01VTFRJVVNFUiB8CiAJCQkJCSAgICBDSUZTX01PVU5UX05PX1BFUk0pOworCWlmIChwdm9sdW1lX2luZm8tPnN0cmljdF9pbykKKwkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgfD0gQ0lGU19NT1VOVF9TVFJJQ1RfSU87CiAJaWYgKHB2b2x1bWVfaW5mby0+ZGlyZWN0X2lvKSB7CiAJCWNGWUkoMSwgIm1vdW50aW5nIHNoYXJlIHVzaW5nIGRpcmVjdCBpL28iKTsKIAkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgfD0gQ0lGU19NT1VOVF9ESVJFQ1RfSU87CkBAIC0yOTc3LDcgKzMwMTAsOCBAQAogCQkJCQkgYmNjX3B0cik7CiAJCWVsc2UKICNlbmRpZiAvKiBDSUZTX1dFQUtfUFdfSEFTSCAqLwotCQlTTUJOVGVuY3J5cHQodGNvbi0+cGFzc3dvcmQsIHNlcy0+c2VydmVyLT5jcnlwdGtleSwgYmNjX3B0cik7CisJCXJjID0gU01CTlRlbmNyeXB0KHRjb24tPnBhc3N3b3JkLCBzZXMtPnNlcnZlci0+Y3J5cHRrZXksCisJCQkJCWJjY19wdHIpOwogCiAJCWJjY19wdHIgKz0gQ0lGU19BVVRIX1JFU1BfU0laRTsKIAkJaWYgKHNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSUNPREUpIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZmlsZS5jIGIvZnMvY2lmcy9maWxlLmMKaW5kZXggZDdkNjVhNy4uZTk2NGIxYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9maWxlLmMKKysrIGIvZnMvY2lmcy9maWxlLmMKQEAgLTM0Niw3ICszNDYsNiBAQAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IHRjb25fbGluayAqdGxpbms7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlID0gTlVMTDsKLQlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKIAljaGFyICpmdWxsX3BhdGggPSBOVUxMOwogCWJvb2wgcG9zaXhfb3Blbl9vayA9IGZhbHNlOwogCV9fdTE2IG5ldGZpZDsKQEAgLTM2MSw4ICszNjAsNiBAQAogCX0KIAl0Y29uID0gdGxpbmtfdGNvbih0bGluayk7CiAKLQlwQ2lmc0lub2RlID0gQ0lGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAlpZiAoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJcmMgPSAtRU5PTUVNOwpAQCAtODQ4LDcgKzg0NSw3IEBACiB9CiAKIC8qIHVwZGF0ZSB0aGUgZmlsZSBzaXplIChpZiBuZWVkZWQpIGFmdGVyIGEgd3JpdGUgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBjaWZzX3VwZGF0ZV9lb2Yoc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpLCBsb2ZmX3Qgb2Zmc2V0LAogCQkgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXNfd3JpdHRlbikKIHsKQEAgLTExNDYsNyArMTE0Myw2IEBACiAJY2hhciAqd3JpdGVfZGF0YTsKIAlpbnQgcmMgPSAtRUZBVUxUOwogCWludCBieXRlc193cml0dGVuID0gMDsKLQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqb3Blbl9maWxlOwogCkBAIC0xMTU0LDcgKzExNTAsNiBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKLQljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CiAKIAlvZmZzZXQgKz0gKGxvZmZfdClmcm9tOwogCXdyaXRlX2RhdGEgPSBrbWFwKHBhZ2UpOwpAQCAtMTYxOSwxMyArMTYxNCwyMTUgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQKK2NpZnNfd3JpdGVfYWxsb2NhdGVfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMpCit7CisJaW50IHJjID0gMDsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKKwkJcGFnZXNbaV0gPSBhbGxvY19wYWdlKF9fR0ZQX0hJR0hNRU0pOworCQlpZiAoIXBhZ2VzW2ldKSB7CisJCQkvKgorCQkJICogc2F2ZSBudW1iZXIgb2YgcGFnZXMgd2UgaGF2ZSBhbHJlYWR5IGFsbG9jYXRlZCBhbmQKKwkJCSAqIHJldHVybiB3aXRoIEVOT01FTSBlcnJvcgorCQkJICovCisJCQludW1fcGFnZXMgPSBpOworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCXJldHVybiByYzsKKworZXJyb3I6CisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKQorCQlwdXRfcGFnZShwYWdlc1tpXSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW5saW5lCitzaXplX3QgZ2V0X251bXBhZ2VzKGNvbnN0IHNpemVfdCB3c2l6ZSwgY29uc3Qgc2l6ZV90IGxlbiwgc2l6ZV90ICpjdXJfbGVuKQoreworCXNpemVfdCBudW1fcGFnZXM7CisJc2l6ZV90IGNsZW47CisKKwljbGVuID0gbWluX3QoY29uc3Qgc2l6ZV90LCBsZW4sIHdzaXplKTsKKwludW1fcGFnZXMgPSBjbGVuIC8gUEFHRV9DQUNIRV9TSVpFOworCWlmIChjbGVuICUgUEFHRV9DQUNIRV9TSVpFKQorCQludW1fcGFnZXMrKzsKKworCWlmIChjdXJfbGVuKQorCQkqY3VyX2xlbiA9IGNsZW47CisKKwlyZXR1cm4gbnVtX3BhZ2VzOworfQorCitzdGF0aWMgc3NpemVfdAorY2lmc19pb3ZlY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCSB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcG9mZnNldCkKK3sKKwl1bnNpZ25lZCBpbnQgd3JpdHRlbjsKKwl1bnNpZ25lZCBsb25nIG51bV9wYWdlcywgbnBhZ2VzLCBpOworCXNpemVfdCBjb3BpZWQsIGxlbiwgY3VyX2xlbjsKKwlzc2l6ZV90IHRvdGFsX3dyaXR0ZW4gPSAwOworCXN0cnVjdCBrdmVjICp0b19zZW5kOworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJc3RydWN0IGlvdl9pdGVyIGl0OworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqb3Blbl9maWxlOworCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOworCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CisJaW50IHhpZCwgcmM7CisKKwlsZW4gPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJcmMgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhmaWxlLCBwb2Zmc2V0LCAmbGVuLCAwKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOworCW51bV9wYWdlcyA9IGdldF9udW1wYWdlcyhjaWZzX3NiLT53c2l6ZSwgbGVuLCAmY3VyX2xlbik7CisKKwlwYWdlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWdlcyAqKSpudW1fcGFnZXMsIEdGUF9LRVJORUwpOworCWlmICghcGFnZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJdG9fc2VuZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrdmVjKSoobnVtX3BhZ2VzICsgMSksIEdGUF9LRVJORUwpOworCWlmICghdG9fc2VuZCkgeworCQlrZnJlZShwYWdlcyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJjID0gY2lmc193cml0ZV9hbGxvY2F0ZV9wYWdlcyhwYWdlcywgbnVtX3BhZ2VzKTsKKwlpZiAocmMpIHsKKwkJa2ZyZWUocGFnZXMpOworCQlrZnJlZSh0b19zZW5kKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXhpZCA9IEdldFhpZCgpOworCW9wZW5fZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlwVGNvbiA9IHRsaW5rX3Rjb24ob3Blbl9maWxlLT50bGluayk7CisJaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCisJaW92X2l0ZXJfaW5pdCgmaXQsIGlvdiwgbnJfc2VncywgbGVuLCAwKTsKKwlucGFnZXMgPSBudW1fcGFnZXM7CisKKwlkbyB7CisJCXNpemVfdCBzYXZlX2xlbiA9IGN1cl9sZW47CisJCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgeworCQkJY29waWVkID0gbWluX3QoY29uc3Qgc2l6ZV90LCBjdXJfbGVuLCBQQUdFX0NBQ0hFX1NJWkUpOworCQkJY29waWVkID0gaW92X2l0ZXJfY29weV9mcm9tX3VzZXIocGFnZXNbaV0sICZpdCwgMCwKKwkJCQkJCQkgY29waWVkKTsKKwkJCWN1cl9sZW4gLT0gY29waWVkOworCQkJaW92X2l0ZXJfYWR2YW5jZSgmaXQsIGNvcGllZCk7CisJCQl0b19zZW5kW2krMV0uaW92X2Jhc2UgPSBrbWFwKHBhZ2VzW2ldKTsKKwkJCXRvX3NlbmRbaSsxXS5pb3ZfbGVuID0gY29waWVkOworCQl9CisKKwkJY3VyX2xlbiA9IHNhdmVfbGVuIC0gY3VyX2xlbjsKKworCQlkbyB7CisJCQlpZiAob3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlKSB7CisJCQkJcmMgPSBjaWZzX3Jlb3Blbl9maWxlKG9wZW5fZmlsZSwgZmFsc2UpOworCQkJCWlmIChyYyAhPSAwKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCXJjID0gQ0lGU1NNQldyaXRlMih4aWQsIHBUY29uLCBvcGVuX2ZpbGUtPm5ldGZpZCwKKwkJCQkJICAgY3VyX2xlbiwgKnBvZmZzZXQsICZ3cml0dGVuLAorCQkJCQkgICB0b19zZW5kLCBucGFnZXMsIDApOworCQl9IHdoaWxlIChyYyA9PSAtRUFHQUlOKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspCisJCQlrdW5tYXAocGFnZXNbaV0pOworCisJCWlmICh3cml0dGVuKSB7CisJCQlsZW4gLT0gd3JpdHRlbjsKKwkJCXRvdGFsX3dyaXR0ZW4gKz0gd3JpdHRlbjsKKwkJCWNpZnNfdXBkYXRlX2VvZihDSUZTX0koaW5vZGUpLCAqcG9mZnNldCwgd3JpdHRlbik7CisJCQkqcG9mZnNldCArPSB3cml0dGVuOworCQl9IGVsc2UgaWYgKHJjIDwgMCkgeworCQkJaWYgKCF0b3RhbF93cml0dGVuKQorCQkJCXRvdGFsX3dyaXR0ZW4gPSByYzsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogZ2V0IGxlbmd0aCBhbmQgbnVtYmVyIG9mIGt2ZWNzIG9mIHRoZSBuZXh0IHdyaXRlICovCisJCW5wYWdlcyA9IGdldF9udW1wYWdlcyhjaWZzX3NiLT53c2l6ZSwgbGVuLCAmY3VyX2xlbik7CisJfSB3aGlsZSAobGVuID4gMCk7CisKKwlpZiAodG90YWxfd3JpdHRlbiA+IDApIHsKKwkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJaWYgKCpwb2Zmc2V0ID4gaW5vZGUtPmlfc2l6ZSkKKwkJCWlfc2l6ZV93cml0ZShpbm9kZSwgKnBvZmZzZXQpOworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJfQorCisJY2lmc19zdGF0c19ieXRlc193cml0dGVuKHBUY29uLCB0b3RhbF93cml0dGVuKTsKKwltYXJrX2lub2RlX2RpcnR5X3N5bmMoaW5vZGUpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKQorCQlwdXRfcGFnZShwYWdlc1tpXSk7CisJa2ZyZWUodG9fc2VuZCk7CisJa2ZyZWUocGFnZXMpOworCUZyZWVYaWQoeGlkKTsKKwlyZXR1cm4gdG90YWxfd3JpdHRlbjsKK30KKworc3RhdGljIHNzaXplX3QgY2lmc191c2VyX3dyaXRldihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKK3sKKwlzc2l6ZV90IHdyaXR0ZW47CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKworCS8qCisJICogQkIgLSBvcHRpbWl6ZSB0aGUgd2F5IHdoZW4gc2lnbmluZyBpcyBkaXNhYmxlZC4gV2UgY2FuIGRyb3AgdGhpcworCSAqIGV4dHJhIG1lbW9yeS10by1tZW1vcnkgY29weWluZyBhbmQgdXNlIGlvdmVjIGJ1ZmZlcnMgZm9yIGNvbnN0cnVjdGluZworCSAqIHdyaXRlIHJlcXVlc3QuCisJICovCisKKwl3cml0dGVuID0gY2lmc19pb3ZlY193cml0ZShpb2NiLT5raV9maWxwLCBpb3YsIG5yX3NlZ3MsICZwb3MpOworCWlmICh3cml0dGVuID4gMCkgeworCQlDSUZTX0koaW5vZGUpLT5pbnZhbGlkX21hcHBpbmcgPSB0cnVlOworCQlpb2NiLT5raV9wb3MgPSBwb3M7CisJfQorCisJcmV0dXJuIHdyaXR0ZW47Cit9CisKK3NzaXplX3QgY2lmc19zdHJpY3Rfd3JpdGV2KHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKworCWlmIChDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZUFsbCkKKwkJcmV0dXJuIGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOworCisJLyoKKwkgKiBJbiBzdHJpY3QgY2FjaGUgbW9kZSB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIgZXhhY3RseQorCSAqIGZyb20gdGhlIHBvcyB0byBwb3MrbGVuLTEgcmF0aGVyIHRoYW4gZmx1c2ggYWxsIGFmZmVjdGVkIHBhZ2VzCisJICogYmVjYXVzZSBpdCBtYXkgY2F1c2UgYSBlcnJvciB3aXRoIG1hbmRhdG9yeSBsb2NrcyBvbiB0aGVzZSBwYWdlcyBidXQKKwkgKiBub3Qgb24gdGhlIHJlZ2lvbiBmcm9tIHBvcyB0byBwcG9zK2xlbi0xLgorCSAqLworCisJcmV0dXJuIGNpZnNfdXNlcl93cml0ZXYoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOworfQorCiBzdGF0aWMgc3NpemVfdAogY2lmc19pb3ZlY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpwb2Zmc2V0KQogewogCWludCByYzsKIAlpbnQgeGlkOwotCXVuc2lnbmVkIGludCB0b3RhbF9yZWFkLCBieXRlc19yZWFkID0gMDsKKwlzc2l6ZV90IHRvdGFsX3JlYWQ7CisJdW5zaWduZWQgaW50IGJ5dGVzX3JlYWQgPSAwOwogCXNpemVfdCBsZW4sIGN1cl9sZW47CiAJaW50IGlvdl9vZmZzZXQgPSAwOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2xpbmsuYyBiL2ZzL2NpZnMvbGluay5jCmluZGV4IDMwNjc2OWQuLmU4ODA0ZDMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbGluay5jCisrKyBiL2ZzL2NpZnMvbGluay5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiY2lmc3Byb3RvLmgiCiAjaW5jbHVkZSAiY2lmc19kZWJ1Zy5oIgogI2luY2x1ZGUgImNpZnNfZnNfc2IuaCIKLSNpbmNsdWRlICJtZDUuaCIKIAogI2RlZmluZSBDSUZTX01GX1NZTUxJTktfTEVOX09GRlNFVCAoNCsxKQogI2RlZmluZSBDSUZTX01GX1NZTUxJTktfTUQ1X09GRlNFVCAoQ0lGU19NRl9TWU1MSU5LX0xFTl9PRkZTRVQrKDQrMSkpCkBAIC00Nyw2ICs0Niw0NSBAQAogCW1kNV9oYXNoWzEyXSwgbWQ1X2hhc2hbMTNdLCBtZDVfaGFzaFsxNF0sIG1kNV9oYXNoWzE1XQogCiBzdGF0aWMgaW50CitzeW1saW5rX2hhc2godW5zaWduZWQgaW50IGxpbmtfbGVuLCBjb25zdCBjaGFyICpsaW5rX3N0ciwgdTggKm1kNV9oYXNoKQoreworCWludCByYzsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICptZDU7CisJc3RydWN0IHNkZXNjICpzZGVzY21kNTsKKworCW1kNSA9IGNyeXB0b19hbGxvY19zaGFzaCgibWQ1IiwgMCwgMCk7CisJaWYgKElTX0VSUihtZDUpKSB7CisJCXJjID0gUFRSX0VSUihtZDUpOworCQljRVJST1IoMSwgIiVzOiBDcnlwdG8gbWQ1IGFsbG9jYXRpb24gZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByYyk7CisJCXJldHVybiByYzsKKwl9CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hhc2hfZGVzYykgKyBjcnlwdG9fc2hhc2hfZGVzY3NpemUobWQ1KTsKKwlzZGVzY21kNSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZGVzY21kNSkgeworCQlyYyA9IC1FTk9NRU07CisJCWNFUlJPUigxLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIsIF9fZnVuY19fKTsKKwkJZ290byBzeW1saW5rX2hhc2hfZXJyOworCX0KKwlzZGVzY21kNS0+c2hhc2gudGZtID0gbWQ1OworCXNkZXNjbWQ1LT5zaGFzaC5mbGFncyA9IDB4MDsKKworCXJjID0gY3J5cHRvX3NoYXNoX2luaXQoJnNkZXNjbWQ1LT5zaGFzaCk7CisJaWYgKHJjKSB7CisJCWNFUlJPUigxLCAiJXM6IENvdWxkIG5vdCBpbml0IG1kNSBzaGFzaFxuIiwgX19mdW5jX18pOworCQlnb3RvIHN5bWxpbmtfaGFzaF9lcnI7CisJfQorCWNyeXB0b19zaGFzaF91cGRhdGUoJnNkZXNjbWQ1LT5zaGFzaCwgbGlua19zdHIsIGxpbmtfbGVuKTsKKwlyYyA9IGNyeXB0b19zaGFzaF9maW5hbCgmc2Rlc2NtZDUtPnNoYXNoLCBtZDVfaGFzaCk7CisKK3N5bWxpbmtfaGFzaF9lcnI6CisJY3J5cHRvX2ZyZWVfc2hhc2gobWQ1KTsKKwlrZnJlZShzZGVzY21kNSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKIENJRlNQYXJzZU1GU3ltbGluayhjb25zdCB1OCAqYnVmLAogCQkgICB1bnNpZ25lZCBpbnQgYnVmX2xlbiwKIAkJICAgdW5zaWduZWQgaW50ICpfbGlua19sZW4sCkBAIC01Niw3ICs5NCw2IEBACiAJdW5zaWduZWQgaW50IGxpbmtfbGVuOwogCWNvbnN0IGNoYXIgKm1kNV9zdHIxOwogCWNvbnN0IGNoYXIgKmxpbmtfc3RyOwotCXN0cnVjdCBNRDVDb250ZXh0IG1kNV9jdHg7CiAJdTggbWQ1X2hhc2hbMTZdOwogCWNoYXIgbWQ1X3N0cjJbMzRdOwogCkBAIC03MCw5ICsxMDcsMTEgQEAKIAlpZiAocmMgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljaWZzX01ENV9pbml0KCZtZDVfY3R4KTsKLQljaWZzX01ENV91cGRhdGUoJm1kNV9jdHgsIChjb25zdCB1OCAqKWxpbmtfc3RyLCBsaW5rX2xlbik7Ci0JY2lmc19NRDVfZmluYWwobWQ1X2hhc2gsICZtZDVfY3R4KTsKKwlyYyA9IHN5bWxpbmtfaGFzaChsaW5rX2xlbiwgbGlua19zdHIsIG1kNV9oYXNoKTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXM6IE1ENSBoYXNoIGZhaWx1cmU6ICVkXG4iLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQogCiAJc25wcmludGYobWQ1X3N0cjIsIHNpemVvZihtZDVfc3RyMiksCiAJCSBDSUZTX01GX1NZTUxJTktfTUQ1X0ZPUk1BVCwKQEAgLTk0LDkgKzEzMyw5IEBACiBzdGF0aWMgaW50CiBDSUZTRm9ybWF0TUZTeW1saW5rKHU4ICpidWYsIHVuc2lnbmVkIGludCBidWZfbGVuLCBjb25zdCBjaGFyICpsaW5rX3N0cikKIHsKKwlpbnQgcmM7CiAJdW5zaWduZWQgaW50IGxpbmtfbGVuOwogCXVuc2lnbmVkIGludCBvZnM7Ci0Jc3RydWN0IE1ENUNvbnRleHQgbWQ1X2N0eDsKIAl1OCBtZDVfaGFzaFsxNl07CiAKIAlpZiAoYnVmX2xlbiAhPSBDSUZTX01GX1NZTUxJTktfRklMRV9TSVpFKQpAQCAtMTA3LDkgKzE0NiwxMSBAQAogCWlmIChsaW5rX2xlbiA+IENJRlNfTUZfU1lNTElOS19MSU5LX01BWExFTikKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKLQljaWZzX01ENV9pbml0KCZtZDVfY3R4KTsKLQljaWZzX01ENV91cGRhdGUoJm1kNV9jdHgsIChjb25zdCB1OCAqKWxpbmtfc3RyLCBsaW5rX2xlbik7Ci0JY2lmc19NRDVfZmluYWwobWQ1X2hhc2gsICZtZDVfY3R4KTsKKwlyYyA9IHN5bWxpbmtfaGFzaChsaW5rX2xlbiwgbGlua19zdHIsIG1kNV9oYXNoKTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXM6IE1ENSBoYXNoIGZhaWx1cmU6ICVkXG4iLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQogCiAJc25wcmludGYoYnVmLCBidWZfbGVuLAogCQkgQ0lGU19NRl9TWU1MSU5LX0xFTl9GT1JNQVQgQ0lGU19NRl9TWU1MSU5LX01ENV9GT1JNQVQsCmRpZmYgLS1naXQgYS9mcy9jaWZzL21kNC5jIGIvZnMvY2lmcy9tZDQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcyNWMyNi4uMDAwMDAwMAotLS0gYS9mcy9jaWZzL21kNC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qCi0gICBVbml4IFNNQi9OZXRiaW9zIGltcGxlbWVudGF0aW9uLgotICAgVmVyc2lvbiAxLjkuCi0gICBhIGltcGxlbWVudGF0aW9uIG9mIE1ENCBkZXNpZ25lZCBmb3IgdXNlIGluIHRoZSBTTUIgYXV0aGVudGljYXRpb24gcHJvdG9jb2wKLSAgIENvcHlyaWdodCAoQykgQW5kcmV3IFRyaWRnZWxsIDE5OTctMTk5OC4KLSAgIE1vZGlmaWVkIGJ5IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKSAyMDAyLTIwMDMKLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlICJjaWZzZW5jcnlwdC5oIgotCi0vKiBOT1RFOiBUaGlzIGNvZGUgbWFrZXMgbm8gYXR0ZW1wdCB0byBiZSBmYXN0ISAqLwotCi1zdGF0aWMgX191MzIKLUYoX191MzIgWCwgX191MzIgWSwgX191MzIgWikKLXsKLQlyZXR1cm4gKFggJiBZKSB8ICgoflgpICYgWik7Ci19Ci0KLXN0YXRpYyBfX3UzMgotRyhfX3UzMiBYLCBfX3UzMiBZLCBfX3UzMiBaKQotewotCXJldHVybiAoWCAmIFkpIHwgKFggJiBaKSB8IChZICYgWik7Ci19Ci0KLXN0YXRpYyBfX3UzMgotSChfX3UzMiBYLCBfX3UzMiBZLCBfX3UzMiBaKQotewotCXJldHVybiBYIF4gWSBeIFo7Ci19Ci0KLXN0YXRpYyBfX3UzMgotbHNoaWZ0KF9fdTMyIHgsIGludCBzKQotewotCXggJj0gMHhGRkZGRkZGRjsKLQlyZXR1cm4gKCh4IDw8IHMpICYgMHhGRkZGRkZGRikgfCAoeCA+PiAoMzIgLSBzKSk7Ci19Ci0KLSNkZWZpbmUgUk9VTkQxKGEsYixjLGQsayxzKSAoKmEpID0gbHNoaWZ0KCgqYSkgKyBGKCpiLCpjLCpkKSArIFhba10sIHMpCi0jZGVmaW5lIFJPVU5EMihhLGIsYyxkLGsscykgKCphKSA9IGxzaGlmdCgoKmEpICsgRygqYiwqYywqZCkgKyBYW2tdICsgKF9fdTMyKTB4NUE4Mjc5OTkscykKLSNkZWZpbmUgUk9VTkQzKGEsYixjLGQsayxzKSAoKmEpID0gbHNoaWZ0KCgqYSkgKyBIKCpiLCpjLCpkKSArIFhba10gKyAoX191MzIpMHg2RUQ5RUJBMSxzKQotCi0vKiB0aGlzIGFwcGxpZXMgbWQ0IHRvIDY0IGJ5dGUgY2h1bmtzICovCi1zdGF0aWMgdm9pZAotbWRmb3VyNjQoX191MzIgKk0sIF9fdTMyICpBLCBfX3UzMiAqQiwgX191MzIgKkMsIF9fdTMyICpEKQotewotCWludCBqOwotCV9fdTMyIEFBLCBCQiwgQ0MsIEREOwotCV9fdTMyIFhbMTZdOwotCi0KLQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykKLQkJWFtqXSA9IE1bal07Ci0KLQlBQSA9ICpBOwotCUJCID0gKkI7Ci0JQ0MgPSAqQzsKLQlERCA9ICpEOwotCi0JUk9VTkQxKEEsIEIsIEMsIEQsIDAsIDMpOwotCVJPVU5EMShELCBBLCBCLCBDLCAxLCA3KTsKLQlST1VORDEoQywgRCwgQSwgQiwgMiwgMTEpOwotCVJPVU5EMShCLCBDLCBELCBBLCAzLCAxOSk7Ci0JUk9VTkQxKEEsIEIsIEMsIEQsIDQsIDMpOwotCVJPVU5EMShELCBBLCBCLCBDLCA1LCA3KTsKLQlST1VORDEoQywgRCwgQSwgQiwgNiwgMTEpOwotCVJPVU5EMShCLCBDLCBELCBBLCA3LCAxOSk7Ci0JUk9VTkQxKEEsIEIsIEMsIEQsIDgsIDMpOwotCVJPVU5EMShELCBBLCBCLCBDLCA5LCA3KTsKLQlST1VORDEoQywgRCwgQSwgQiwgMTAsIDExKTsKLQlST1VORDEoQiwgQywgRCwgQSwgMTEsIDE5KTsKLQlST1VORDEoQSwgQiwgQywgRCwgMTIsIDMpOwotCVJPVU5EMShELCBBLCBCLCBDLCAxMywgNyk7Ci0JUk9VTkQxKEMsIEQsIEEsIEIsIDE0LCAxMSk7Ci0JUk9VTkQxKEIsIEMsIEQsIEEsIDE1LCAxOSk7Ci0KLQlST1VORDIoQSwgQiwgQywgRCwgMCwgMyk7Ci0JUk9VTkQyKEQsIEEsIEIsIEMsIDQsIDUpOwotCVJPVU5EMihDLCBELCBBLCBCLCA4LCA5KTsKLQlST1VORDIoQiwgQywgRCwgQSwgMTIsIDEzKTsKLQlST1VORDIoQSwgQiwgQywgRCwgMSwgMyk7Ci0JUk9VTkQyKEQsIEEsIEIsIEMsIDUsIDUpOwotCVJPVU5EMihDLCBELCBBLCBCLCA5LCA5KTsKLQlST1VORDIoQiwgQywgRCwgQSwgMTMsIDEzKTsKLQlST1VORDIoQSwgQiwgQywgRCwgMiwgMyk7Ci0JUk9VTkQyKEQsIEEsIEIsIEMsIDYsIDUpOwotCVJPVU5EMihDLCBELCBBLCBCLCAxMCwgOSk7Ci0JUk9VTkQyKEIsIEMsIEQsIEEsIDE0LCAxMyk7Ci0JUk9VTkQyKEEsIEIsIEMsIEQsIDMsIDMpOwotCVJPVU5EMihELCBBLCBCLCBDLCA3LCA1KTsKLQlST1VORDIoQywgRCwgQSwgQiwgMTEsIDkpOwotCVJPVU5EMihCLCBDLCBELCBBLCAxNSwgMTMpOwotCi0JUk9VTkQzKEEsIEIsIEMsIEQsIDAsIDMpOwotCVJPVU5EMyhELCBBLCBCLCBDLCA4LCA5KTsKLQlST1VORDMoQywgRCwgQSwgQiwgNCwgMTEpOwotCVJPVU5EMyhCLCBDLCBELCBBLCAxMiwgMTUpOwotCVJPVU5EMyhBLCBCLCBDLCBELCAyLCAzKTsKLQlST1VORDMoRCwgQSwgQiwgQywgMTAsIDkpOwotCVJPVU5EMyhDLCBELCBBLCBCLCA2LCAxMSk7Ci0JUk9VTkQzKEIsIEMsIEQsIEEsIDE0LCAxNSk7Ci0JUk9VTkQzKEEsIEIsIEMsIEQsIDEsIDMpOwotCVJPVU5EMyhELCBBLCBCLCBDLCA5LCA5KTsKLQlST1VORDMoQywgRCwgQSwgQiwgNSwgMTEpOwotCVJPVU5EMyhCLCBDLCBELCBBLCAxMywgMTUpOwotCVJPVU5EMyhBLCBCLCBDLCBELCAzLCAzKTsKLQlST1VORDMoRCwgQSwgQiwgQywgMTEsIDkpOwotCVJPVU5EMyhDLCBELCBBLCBCLCA3LCAxMSk7Ci0JUk9VTkQzKEIsIEMsIEQsIEEsIDE1LCAxNSk7Ci0KLQkqQSArPSBBQTsKLQkqQiArPSBCQjsKLQkqQyArPSBDQzsKLQkqRCArPSBERDsKLQotCSpBICY9IDB4RkZGRkZGRkY7Ci0JKkIgJj0gMHhGRkZGRkZGRjsKLQkqQyAmPSAweEZGRkZGRkZGOwotCSpEICY9IDB4RkZGRkZGRkY7Ci0KLQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykKLQkJWFtqXSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5NjQoX191MzIgKk0sIHVuc2lnbmVkIGNoYXIgKmluKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCU1baV0gPSAoaW5baSAqIDQgKyAzXSA8PCAyNCkgfCAoaW5baSAqIDQgKyAyXSA8PCAxNikgfAotCQkgICAgKGluW2kgKiA0ICsgMV0gPDwgOCkgfCAoaW5baSAqIDQgKyAwXSA8PCAwKTsKLX0KLQotc3RhdGljIHZvaWQKLWNvcHk0KHVuc2lnbmVkIGNoYXIgKm91dCwgX191MzIgeCkKLXsKLQlvdXRbMF0gPSB4ICYgMHhGRjsKLQlvdXRbMV0gPSAoeCA+PiA4KSAmIDB4RkY7Ci0Jb3V0WzJdID0gKHggPj4gMTYpICYgMHhGRjsKLQlvdXRbM10gPSAoeCA+PiAyNCkgJiAweEZGOwotfQotCi0vKiBwcm9kdWNlIGEgbWQ0IG1lc3NhZ2UgZGlnZXN0IGZyb20gZGF0YSBvZiBsZW5ndGggbiBieXRlcyAqLwotdm9pZAotbWRmb3VyKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBuKQotewotCXVuc2lnbmVkIGNoYXIgYnVmWzEyOF07Ci0JX191MzIgTVsxNl07Ci0JX191MzIgYiA9IG4gKiA4OwotCWludCBpOwotCV9fdTMyIEEgPSAweDY3NDUyMzAxOwotCV9fdTMyIEIgPSAweGVmY2RhYjg5OwotCV9fdTMyIEMgPSAweDk4YmFkY2ZlOwotCV9fdTMyIEQgPSAweDEwMzI1NDc2OwotCi0Jd2hpbGUgKG4gPiA2NCkgewotCQljb3B5NjQoTSwgaW4pOwotCQltZGZvdXI2NChNLCAmQSwgJkIsICZDLCAmRCk7Ci0JCWluICs9IDY0OwotCQluIC09IDY0OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLQkJYnVmW2ldID0gMDsKLQltZW1jcHkoYnVmLCBpbiwgbik7Ci0JYnVmW25dID0gMHg4MDsKLQotCWlmIChuIDw9IDU1KSB7Ci0JCWNvcHk0KGJ1ZiArIDU2LCBiKTsKLQkJY29weTY0KE0sIGJ1Zik7Ci0JCW1kZm91cjY0KE0sICZBLCAmQiwgJkMsICZEKTsKLQl9IGVsc2UgewotCQljb3B5NChidWYgKyAxMjAsIGIpOwotCQljb3B5NjQoTSwgYnVmKTsKLQkJbWRmb3VyNjQoTSwgJkEsICZCLCAmQywgJkQpOwotCQljb3B5NjQoTSwgYnVmICsgNjQpOwotCQltZGZvdXI2NChNLCAmQSwgJkIsICZDLCAmRCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQotCQlidWZbaV0gPSAwOwotCWNvcHk2NChNLCBidWYpOwotCi0JY29weTQob3V0LCBBKTsKLQljb3B5NChvdXQgKyA0LCBCKTsKLQljb3B5NChvdXQgKyA4LCBDKTsKLQljb3B5NChvdXQgKyAxMiwgRCk7Ci0KLQlBID0gQiA9IEMgPSBEID0gMDsKLX0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWQ1LmMgYi9mcy9jaWZzL21kNS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGI2NmE1Li4wMDAwMDAwCi0tLSBhL2ZzL2NpZnMvbWQ1LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjYgKzAsMCBAQAotLyoKLSAqIFRoaXMgY29kZSBpbXBsZW1lbnRzIHRoZSBNRDUgbWVzc2FnZS1kaWdlc3QgYWxnb3JpdGhtLgotICogVGhlIGFsZ29yaXRobSBpcyBkdWUgdG8gUm9uIFJpdmVzdC4gIFRoaXMgY29kZSB3YXMKLSAqIHdyaXR0ZW4gYnkgQ29saW4gUGx1bWIgaW4gMTk5Mywgbm8gY29weXJpZ2h0IGlzIGNsYWltZWQuCi0gKiBUaGlzIGNvZGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW47IGRvIHdpdGggaXQgd2hhdCB5b3Ugd2lzaC4KLSAqCi0gKiBFcXVpdmFsZW50IGNvZGUgaXMgYXZhaWxhYmxlIGZyb20gUlNBIERhdGEgU2VjdXJpdHksIEluYy4KLSAqIFRoaXMgY29kZSBoYXMgYmVlbiB0ZXN0ZWQgYWdhaW5zdCB0aGF0LCBhbmQgaXMgZXF1aXZhbGVudCwKLSAqIGV4Y2VwdCB0aGF0IHlvdSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgdHdvIHBhZ2VzIG9mIGxlZ2FsZXNlCi0gKiB3aXRoIGV2ZXJ5IGNvcHkuCi0gKgotICogVG8gY29tcHV0ZSB0aGUgbWVzc2FnZSBkaWdlc3Qgb2YgYSBjaHVuayBvZiBieXRlcywgZGVjbGFyZSBhbgotICogTUQ1Q29udGV4dCBzdHJ1Y3R1cmUsIHBhc3MgaXQgdG8gY2lmc19NRDVfaW5pdCwgY2FsbCBjaWZzX01ENV91cGRhdGUgYXMKLSAqIG5lZWRlZCBvbiBidWZmZXJzIGZ1bGwgb2YgYnl0ZXMsIGFuZCB0aGVuIGNhbGwgY2lmc19NRDVfZmluYWwsIHdoaWNoCi0gKiB3aWxsIGZpbGwgYSBzdXBwbGllZCAxNi1ieXRlIGFycmF5IHdpdGggdGhlIGRpZ2VzdC4KLSAqLwotCi0vKiBUaGlzIGNvZGUgc2xpZ2h0bHkgbW9kaWZpZWQgdG8gZml0IGludG8gU2FtYmEgYnkKLSAgIGFiYXJ0bGV0QHNhbWJhLm9yZyBKdW4gMjAwMQotICAgYW5kIHRvIGZpdCB0aGUgY2lmcyB2ZnMgYnkKLSAgIFN0ZXZlIEZyZW5jaCBzZnJlbmNoQHVzLmlibS5jb20gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgIm1kNS5oIgotCi1zdGF0aWMgdm9pZCBNRDVUcmFuc2Zvcm0oX191MzIgYnVmWzRdLCBfX3UzMiBjb25zdCBpblsxNl0pOwotCi0vKgotICogTm90ZTogdGhpcyBjb2RlIGlzIGhhcm1sZXNzIG9uIGxpdHRsZS1lbmRpYW4gbWFjaGluZXMuCi0gKi8KLXN0YXRpYyB2b2lkCi1ieXRlUmV2ZXJzZSh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmdzKQotewotCV9fdTMyIHQ7Ci0JZG8gewotCQl0ID0gKF9fdTMyKSAoKHVuc2lnbmVkKSBidWZbM10gPDwgOCB8IGJ1ZlsyXSkgPDwgMTYgfAotCQkgICAgKCh1bnNpZ25lZCkgYnVmWzFdIDw8IDggfCBidWZbMF0pOwotCQkqKF9fdTMyICopIGJ1ZiA9IHQ7Ci0JCWJ1ZiArPSA0OwotCX0gd2hpbGUgKC0tbG9uZ3MpOwotfQotCi0vKgotICogU3RhcnQgTUQ1IGFjY3VtdWxhdGlvbi4gIFNldCBiaXQgY291bnQgdG8gMCBhbmQgYnVmZmVyIHRvIG15c3RlcmlvdXMKLSAqIGluaXRpYWxpemF0aW9uIGNvbnN0YW50cy4KLSAqLwotdm9pZAotY2lmc19NRDVfaW5pdChzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4KQotewotCWN0eC0+YnVmWzBdID0gMHg2NzQ1MjMwMTsKLQljdHgtPmJ1ZlsxXSA9IDB4ZWZjZGFiODk7Ci0JY3R4LT5idWZbMl0gPSAweDk4YmFkY2ZlOwotCWN0eC0+YnVmWzNdID0gMHgxMDMyNTQ3NjsKLQotCWN0eC0+Yml0c1swXSA9IDA7Ci0JY3R4LT5iaXRzWzFdID0gMDsKLX0KLQotLyoKLSAqIFVwZGF0ZSBjb250ZXh0IHRvIHJlZmxlY3QgdGhlIGNvbmNhdGVuYXRpb24gb2YgYW5vdGhlciBidWZmZXIgZnVsbAotICogb2YgYnl0ZXMuCi0gKi8KLXZvaWQKLWNpZnNfTUQ1X3VwZGF0ZShzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpidWYsIHVuc2lnbmVkIGxlbikKLXsKLQlyZWdpc3RlciBfX3UzMiB0OwotCi0JLyogVXBkYXRlIGJpdGNvdW50ICovCi0KLQl0ID0gY3R4LT5iaXRzWzBdOwotCWlmICgoY3R4LT5iaXRzWzBdID0gdCArICgoX191MzIpIGxlbiA8PCAzKSkgPCB0KQotCQljdHgtPmJpdHNbMV0rKzsJLyogQ2FycnkgZnJvbSBsb3cgdG8gaGlnaCAqLwotCWN0eC0+Yml0c1sxXSArPSBsZW4gPj4gMjk7Ci0KLQl0ID0gKHQgPj4gMykgJiAweDNmOwkvKiBCeXRlcyBhbHJlYWR5IGluIHNoc0luZm8tPmRhdGEgKi8KLQotCS8qIEhhbmRsZSBhbnkgbGVhZGluZyBvZGQtc2l6ZWQgY2h1bmtzICovCi0KLQlpZiAodCkgewotCQl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikgY3R4LT5pbiArIHQ7Ci0KLQkJdCA9IDY0IC0gdDsKLQkJaWYgKGxlbiA8IHQpIHsKLQkJCW1lbW1vdmUocCwgYnVmLCBsZW4pOwotCQkJcmV0dXJuOwotCQl9Ci0JCW1lbW1vdmUocCwgYnVmLCB0KTsKLQkJYnl0ZVJldmVyc2UoY3R4LT5pbiwgMTYpOwotCQlNRDVUcmFuc2Zvcm0oY3R4LT5idWYsIChfX3UzMiAqKSBjdHgtPmluKTsKLQkJYnVmICs9IHQ7Ci0JCWxlbiAtPSB0OwotCX0KLQkvKiBQcm9jZXNzIGRhdGEgaW4gNjQtYnl0ZSBjaHVua3MgKi8KLQotCXdoaWxlIChsZW4gPj0gNjQpIHsKLQkJbWVtbW92ZShjdHgtPmluLCBidWYsIDY0KTsKLQkJYnl0ZVJldmVyc2UoY3R4LT5pbiwgMTYpOwotCQlNRDVUcmFuc2Zvcm0oY3R4LT5idWYsIChfX3UzMiAqKSBjdHgtPmluKTsKLQkJYnVmICs9IDY0OwotCQlsZW4gLT0gNjQ7Ci0JfQotCi0JLyogSGFuZGxlIGFueSByZW1haW5pbmcgYnl0ZXMgb2YgZGF0YS4gKi8KLQotCW1lbW1vdmUoY3R4LT5pbiwgYnVmLCBsZW4pOwotfQotCi0vKgotICogRmluYWwgd3JhcHVwIC0gcGFkIHRvIDY0LWJ5dGUgYm91bmRhcnkgd2l0aCB0aGUgYml0IHBhdHRlcm4KLSAqIDEgMCogKDY0LWJpdCBjb3VudCBvZiBiaXRzIHByb2Nlc3NlZCwgTVNCLWZpcnN0KQotICovCi12b2lkCi1jaWZzX01ENV9maW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIHN0cnVjdCBNRDVDb250ZXh0ICpjdHgpCi17Ci0JdW5zaWduZWQgaW50IGNvdW50OwotCXVuc2lnbmVkIGNoYXIgKnA7Ci0KLQkvKiBDb21wdXRlIG51bWJlciBvZiBieXRlcyBtb2QgNjQgKi8KLQljb3VudCA9IChjdHgtPmJpdHNbMF0gPj4gMykgJiAweDNGOwotCi0JLyogU2V0IHRoZSBmaXJzdCBjaGFyIG9mIHBhZGRpbmcgdG8gMHg4MC4gIFRoaXMgaXMgc2FmZSBzaW5jZSB0aGVyZSBpcwotCSAgIGFsd2F5cyBhdCBsZWFzdCBvbmUgYnl0ZSBmcmVlICovCi0JcCA9IGN0eC0+aW4gKyBjb3VudDsKLQkqcCsrID0gMHg4MDsKLQotCS8qIEJ5dGVzIG9mIHBhZGRpbmcgbmVlZGVkIHRvIG1ha2UgNjQgYnl0ZXMgKi8KLQljb3VudCA9IDY0IC0gMSAtIGNvdW50OwotCi0JLyogUGFkIG91dCB0byA1NiBtb2QgNjQgKi8KLQlpZiAoY291bnQgPCA4KSB7Ci0JCS8qIFR3byBsb3RzIG9mIHBhZGRpbmc6ICBQYWQgdGhlIGZpcnN0IGJsb2NrIHRvIDY0IGJ5dGVzICovCi0JCW1lbXNldChwLCAwLCBjb3VudCk7Ci0JCWJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKLQkJTUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAoX191MzIgKikgY3R4LT5pbik7Ci0KLQkJLyogTm93IGZpbGwgdGhlIG5leHQgYmxvY2sgd2l0aCA1NiBieXRlcyAqLwotCQltZW1zZXQoY3R4LT5pbiwgMCwgNTYpOwotCX0gZWxzZSB7Ci0JCS8qIFBhZCBibG9jayB0byA1NiBieXRlcyAqLwotCQltZW1zZXQocCwgMCwgY291bnQgLSA4KTsKLQl9Ci0JYnl0ZVJldmVyc2UoY3R4LT5pbiwgMTQpOwotCi0JLyogQXBwZW5kIGxlbmd0aCBpbiBiaXRzIGFuZCB0cmFuc2Zvcm0gKi8KLQkoKF9fdTMyICopIGN0eC0+aW4pWzE0XSA9IGN0eC0+Yml0c1swXTsKLQkoKF9fdTMyICopIGN0eC0+aW4pWzE1XSA9IGN0eC0+Yml0c1sxXTsKLQotCU1ENVRyYW5zZm9ybShjdHgtPmJ1ZiwgKF9fdTMyICopIGN0eC0+aW4pOwotCWJ5dGVSZXZlcnNlKCh1bnNpZ25lZCBjaGFyICopIGN0eC0+YnVmLCA0KTsKLQltZW1tb3ZlKGRpZ2VzdCwgY3R4LT5idWYsIDE2KTsKLQltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOwkvKiBJbiBjYXNlIGl0J3Mgc2Vuc2l0aXZlICovCi19Ci0KLS8qIFRoZSBmb3VyIGNvcmUgZnVuY3Rpb25zIC0gRjEgaXMgb3B0aW1pemVkIHNvbWV3aGF0ICovCi0KLS8qICNkZWZpbmUgRjEoeCwgeSwgeikgKHggJiB5IHwgfnggJiB6KSAqLwotI2RlZmluZSBGMSh4LCB5LCB6KSAoeiBeICh4ICYgKHkgXiB6KSkpCi0jZGVmaW5lIEYyKHgsIHksIHopIEYxKHosIHgsIHkpCi0jZGVmaW5lIEYzKHgsIHksIHopICh4IF4geSBeIHopCi0jZGVmaW5lIEY0KHgsIHksIHopICh5IF4gKHggfCB+eikpCi0KLS8qIFRoaXMgaXMgdGhlIGNlbnRyYWwgc3RlcCBpbiB0aGUgTUQ1IGFsZ29yaXRobS4gKi8KLSNkZWZpbmUgTUQ1U1RFUChmLCB3LCB4LCB5LCB6LCBkYXRhLCBzKSBcCi0JKHcgKz0gZih4LCB5LCB6KSArIGRhdGEsICB3ID0gdzw8cyB8IHc+PigzMi1zKSwgIHcgKz0geCkKLQotLyoKLSAqIFRoZSBjb3JlIG9mIHRoZSBNRDUgYWxnb3JpdGhtLCB0aGlzIGFsdGVycyBhbiBleGlzdGluZyBNRDUgaGFzaCB0bwotICogcmVmbGVjdCB0aGUgYWRkaXRpb24gb2YgMTYgbG9uZ3dvcmRzIG9mIG5ldyBkYXRhLiAgY2lmc19NRDVfdXBkYXRlIGJsb2NrcwotICogdGhlIGRhdGEgYW5kIGNvbnZlcnRzIGJ5dGVzIGludG8gbG9uZ3dvcmRzIGZvciB0aGlzIHJvdXRpbmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1NRDVUcmFuc2Zvcm0oX191MzIgYnVmWzRdLCBfX3UzMiBjb25zdCBpblsxNl0pCi17Ci0JcmVnaXN0ZXIgX191MzIgYSwgYiwgYywgZDsKLQotCWEgPSBidWZbMF07Ci0JYiA9IGJ1ZlsxXTsKLQljID0gYnVmWzJdOwotCWQgPSBidWZbM107Ci0KLQlNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpblswXSArIDB4ZDc2YWE0NzgsIDcpOwotCU1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzFdICsgMHhlOGM3Yjc1NiwgMTIpOwotCU1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzJdICsgMHgyNDIwNzBkYiwgMTcpOwotCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzNdICsgMHhjMWJkY2VlZSwgMjIpOwotCU1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzRdICsgMHhmNTdjMGZhZiwgNyk7Ci0JTUQ1U1RFUChGMSwgZCwgYSwgYiwgYywgaW5bNV0gKyAweDQ3ODdjNjJhLCAxMik7Ci0JTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bNl0gKyAweGE4MzA0NjEzLCAxNyk7Ci0JTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bN10gKyAweGZkNDY5NTAxLCAyMik7Ci0JTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bOF0gKyAweDY5ODA5OGQ4LCA3KTsKLQlNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpbls5XSArIDB4OGI0NGY3YWYsIDEyKTsKLQlNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsxMF0gKyAweGZmZmY1YmIxLCAxNyk7Ci0JTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bMTFdICsgMHg4OTVjZDdiZSwgMjIpOwotCU1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzEyXSArIDB4NmI5MDExMjIsIDcpOwotCU1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzEzXSArIDB4ZmQ5ODcxOTMsIDEyKTsKLQlNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsxNF0gKyAweGE2Nzk0MzhlLCAxNyk7Ci0JTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bMTVdICsgMHg0OWI0MDgyMSwgMjIpOwotCi0JTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bMV0gKyAweGY2MWUyNTYyLCA1KTsKLQlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpbls2XSArIDB4YzA0MGIzNDAsIDkpOwotCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzExXSArIDB4MjY1ZTVhNTEsIDE0KTsKLQlNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpblswXSArIDB4ZTliNmM3YWEsIDIwKTsKLQlNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpbls1XSArIDB4ZDYyZjEwNWQsIDUpOwotCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzEwXSArIDB4MDI0NDE0NTMsIDkpOwotCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzE1XSArIDB4ZDhhMWU2ODEsIDE0KTsKLQlNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpbls0XSArIDB4ZTdkM2ZiYzgsIDIwKTsKLQlNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpbls5XSArIDB4MjFlMWNkZTYsIDUpOwotCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzE0XSArIDB4YzMzNzA3ZDYsIDkpOwotCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzNdICsgMHhmNGQ1MGQ4NywgMTQpOwotCU1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzhdICsgMHg0NTVhMTRlZCwgMjApOwotCU1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzEzXSArIDB4YTllM2U5MDUsIDUpOwotCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzJdICsgMHhmY2VmYTNmOCwgOSk7Ci0JTUQ1U1RFUChGMiwgYywgZCwgYSwgYiwgaW5bN10gKyAweDY3NmYwMmQ5LCAxNCk7Ci0JTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bMTJdICsgMHg4ZDJhNGM4YSwgMjApOwotCi0JTUQ1U1RFUChGMywgYSwgYiwgYywgZCwgaW5bNV0gKyAweGZmZmEzOTQyLCA0KTsKLQlNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpbls4XSArIDB4ODc3MWY2ODEsIDExKTsKLQlNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblsxMV0gKyAweDZkOWQ2MTIyLCAxNik7Ci0JTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bMTRdICsgMHhmZGU1MzgwYywgMjMpOwotCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzFdICsgMHhhNGJlZWE0NCwgNCk7Ci0JTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bNF0gKyAweDRiZGVjZmE5LCAxMSk7Ci0JTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bN10gKyAweGY2YmI0YjYwLCAxNik7Ci0JTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bMTBdICsgMHhiZWJmYmM3MCwgMjMpOwotCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzEzXSArIDB4Mjg5YjdlYzYsIDQpOwotCU1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzBdICsgMHhlYWExMjdmYSwgMTEpOwotCU1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzNdICsgMHhkNGVmMzA4NSwgMTYpOwotCU1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzZdICsgMHgwNDg4MWQwNSwgMjMpOwotCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzldICsgMHhkOWQ0ZDAzOSwgNCk7Ci0JTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bMTJdICsgMHhlNmRiOTllNSwgMTEpOwotCU1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzE1XSArIDB4MWZhMjdjZjgsIDE2KTsKLQlNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpblsyXSArIDB4YzRhYzU2NjUsIDIzKTsKLQotCU1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzBdICsgMHhmNDI5MjI0NCwgNik7Ci0JTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bN10gKyAweDQzMmFmZjk3LCAxMCk7Ci0JTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bMTRdICsgMHhhYjk0MjNhNywgMTUpOwotCU1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzVdICsgMHhmYzkzYTAzOSwgMjEpOwotCU1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzEyXSArIDB4NjU1YjU5YzMsIDYpOwotCU1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzNdICsgMHg4ZjBjY2M5MiwgMTApOwotCU1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzEwXSArIDB4ZmZlZmY0N2QsIDE1KTsKLQlNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpblsxXSArIDB4ODU4NDVkZDEsIDIxKTsKLQlNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpbls4XSArIDB4NmZhODdlNGYsIDYpOwotCU1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzE1XSArIDB4ZmUyY2U2ZTAsIDEwKTsKLQlNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpbls2XSArIDB4YTMwMTQzMTQsIDE1KTsKLQlNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpblsxM10gKyAweDRlMDgxMWExLCAyMSk7Ci0JTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bNF0gKyAweGY3NTM3ZTgyLCA2KTsKLQlNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblsxMV0gKyAweGJkM2FmMjM1LCAxMCk7Ci0JTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bMl0gKyAweDJhZDdkMmJiLCAxNSk7Ci0JTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bOV0gKyAweGViODZkMzkxLCAyMSk7Ci0KLQlidWZbMF0gKz0gYTsKLQlidWZbMV0gKz0gYjsKLQlidWZbMl0gKz0gYzsKLQlidWZbM10gKz0gZDsKLX0KLQotI2lmIDAgICAvKiBjdXJyZW50bHkgdW51c2VkICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSB0aGUgcmZjIDIxMDQgdmVyc2lvbiBvZiBobWFjX21kNSBpbml0aWFsaXNhdGlvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLWhtYWNfbWQ1X2luaXRfcmZjMjEwNCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlfbGVuLAotCQkgICAgICBzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCkKLXsKLQlpbnQgaTsKLQotCS8qIGlmIGtleSBpcyBsb25nZXIgdGhhbiA2NCBieXRlcyByZXNldCBpdCB0byBrZXk9TUQ1KGtleSkgKi8KLQlpZiAoa2V5X2xlbiA+IDY0KSB7Ci0JCXVuc2lnbmVkIGNoYXIgdGtbMTZdOwotCQlzdHJ1Y3QgTUQ1Q29udGV4dCB0Y3R4OwotCi0JCWNpZnNfTUQ1X2luaXQoJnRjdHgpOwotCQljaWZzX01ENV91cGRhdGUoJnRjdHgsIGtleSwga2V5X2xlbik7Ci0JCWNpZnNfTUQ1X2ZpbmFsKHRrLCAmdGN0eCk7Ci0KLQkJa2V5ID0gdGs7Ci0JCWtleV9sZW4gPSAxNjsKLQl9Ci0KLQkvKiBzdGFydCBvdXQgYnkgc3RvcmluZyBrZXkgaW4gcGFkcyAqLwotCW1lbXNldChjdHgtPmtfaXBhZCwgMCwgc2l6ZW9mKGN0eC0+a19pcGFkKSk7Ci0JbWVtc2V0KGN0eC0+a19vcGFkLCAwLCBzaXplb2YoY3R4LT5rX29wYWQpKTsKLQltZW1jcHkoY3R4LT5rX2lwYWQsIGtleSwga2V5X2xlbik7Ci0JbWVtY3B5KGN0eC0+a19vcGFkLCBrZXksIGtleV9sZW4pOwotCi0JLyogWE9SIGtleSB3aXRoIGlwYWQgYW5kIG9wYWQgdmFsdWVzICovCi0JZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQkJY3R4LT5rX2lwYWRbaV0gXj0gMHgzNjsKLQkJY3R4LT5rX29wYWRbaV0gXj0gMHg1YzsKLQl9Ci0KLQljaWZzX01ENV9pbml0KCZjdHgtPmN0eCk7Ci0JY2lmc19NRDVfdXBkYXRlKCZjdHgtPmN0eCwgY3R4LT5rX2lwYWQsIDY0KTsKLX0KLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSB0aGUgbWljcm9zb2Z0IHZlcnNpb24gb2YgaG1hY19tZDUgaW5pdGlhbGlzYXRpb24uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKLWhtYWNfbWQ1X2luaXRfbGltS190b182NChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlfbGVuLAotCQkJIHN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KQotewotCWludCBpOwotCi0JLyogaWYga2V5IGlzIGxvbmdlciB0aGFuIDY0IGJ5dGVzIHRydW5jYXRlIGl0ICovCi0JaWYgKGtleV9sZW4gPiA2NCkKLQkJa2V5X2xlbiA9IDY0OwotCi0JLyogc3RhcnQgb3V0IGJ5IHN0b3Jpbmcga2V5IGluIHBhZHMgKi8KLQltZW1zZXQoY3R4LT5rX2lwYWQsIDAsIHNpemVvZihjdHgtPmtfaXBhZCkpOwotCW1lbXNldChjdHgtPmtfb3BhZCwgMCwgc2l6ZW9mKGN0eC0+a19vcGFkKSk7Ci0JbWVtY3B5KGN0eC0+a19pcGFkLCBrZXksIGtleV9sZW4pOwotCW1lbWNweShjdHgtPmtfb3BhZCwga2V5LCBrZXlfbGVuKTsKLQotCS8qIFhPUiBrZXkgd2l0aCBpcGFkIGFuZCBvcGFkIHZhbHVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWN0eC0+a19pcGFkW2ldIF49IDB4MzY7Ci0JCWN0eC0+a19vcGFkW2ldIF49IDB4NWM7Ci0JfQotCi0JY2lmc19NRDVfaW5pdCgmY3R4LT5jdHgpOwotCWNpZnNfTUQ1X3VwZGF0ZSgmY3R4LT5jdHgsIGN0eC0+a19pcGFkLCA2NCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIHVwZGF0ZSBobWFjX21kNSAiaW5uZXIiIGJ1ZmZlcgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1obWFjX21kNV91cGRhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IHRleHRfbGVuLAotCQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCkKLXsKLQljaWZzX01ENV91cGRhdGUoJmN0eC0+Y3R4LCB0ZXh0LCB0ZXh0X2xlbik7CS8qIHRoZW4gdGV4dCBvZiBkYXRhZ3JhbSAqLwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSBmaW5pc2ggb2ZmIGhtYWNfbWQ1ICJpbm5lciIgYnVmZmVyIGFuZCBnZW5lcmF0ZSBvdXRlciBvbmUuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKLWhtYWNfbWQ1X2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpCi17Ci0Jc3RydWN0IE1ENUNvbnRleHQgY3R4X287Ci0KLQljaWZzX01ENV9maW5hbChkaWdlc3QsICZjdHgtPmN0eCk7Ci0KLQljaWZzX01ENV9pbml0KCZjdHhfbyk7Ci0JY2lmc19NRDVfdXBkYXRlKCZjdHhfbywgY3R4LT5rX29wYWQsIDY0KTsKLQljaWZzX01ENV91cGRhdGUoJmN0eF9vLCBkaWdlc3QsIDE2KTsKLQljaWZzX01ENV9maW5hbChkaWdlc3QsICZjdHhfbyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIHNpbmdsZSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgYW4gSE1BQyBNRDUgZGlnZXN0IGZyb20gZGF0YS4KLSB1c2UgdGhlIG1pY3Jvc29mdCBobWFjbWQ1IGluaXQgbWV0aG9kIGJlY2F1c2UgdGhlIGtleSBpcyAxNiBieXRlcy4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiAwIC8qIGN1cnJlbnRseSB1bnVzZWQgKi8KLXN0YXRpYyB2b2lkCi1obWFjX21kNSh1bnNpZ25lZCBjaGFyIGtleVsxNl0sIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwKLQkgdW5zaWduZWQgY2hhciAqZGlnZXN0KQotewotCXN0cnVjdCBITUFDTUQ1Q29udGV4dCBjdHg7Ci0JaG1hY19tZDVfaW5pdF9saW1LX3RvXzY0KGtleSwgMTYsICZjdHgpOwotCWlmIChkYXRhX2xlbiAhPSAwKQotCQlobWFjX21kNV91cGRhdGUoZGF0YSwgZGF0YV9sZW4sICZjdHgpOwotCi0JaG1hY19tZDVfZmluYWwoZGlnZXN0LCAmY3R4KTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9tZDUuaCBiL2ZzL2NpZnMvbWQ1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYmE4Y2IuLjAwMDAwMDAKLS0tIGEvZnMvY2lmcy9tZDUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLSNpZm5kZWYgTUQ1X0gKLSNkZWZpbmUgTUQ1X0gKLSNpZm5kZWYgSEVBREVSX01ENV9ICi0vKiBUcnkgdG8gYXZvaWQgY2xhc2hlcyB3aXRoIE9wZW5TU0wgKi8KLSNkZWZpbmUgSEVBREVSX01ENV9ICi0jZW5kaWYKLQotc3RydWN0IE1ENUNvbnRleHQgewotCV9fdTMyIGJ1Zls0XTsKLQlfX3UzMiBiaXRzWzJdOwotCXVuc2lnbmVkIGNoYXIgaW5bNjRdOwotfTsKLSNlbmRpZgkJCQkvKiAhTUQ1X0ggKi8KLQotI2lmbmRlZiBfSE1BQ19NRDVfSAotc3RydWN0IEhNQUNNRDVDb250ZXh0IHsKLQlzdHJ1Y3QgTUQ1Q29udGV4dCBjdHg7Ci0JdW5zaWduZWQgY2hhciBrX2lwYWRbNjVdOwotCXVuc2lnbmVkIGNoYXIga19vcGFkWzY1XTsKLX07Ci0jZW5kaWYJCQkJLyogX0hNQUNfTUQ1X0ggKi8KLQotdm9pZCBjaWZzX01ENV9pbml0KHN0cnVjdCBNRDVDb250ZXh0ICpjb250ZXh0KTsKLXZvaWQgY2lmc19NRDVfdXBkYXRlKHN0cnVjdCBNRDVDb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpidWYsCi0JCQl1bnNpZ25lZCBsZW4pOwotdm9pZCBjaWZzX01ENV9maW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIHN0cnVjdCBNRDVDb250ZXh0ICpjb250ZXh0KTsKLQotLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBjb21lIGZyb20gbGliL2htYWNtZDUuYyAgKi8KLQotLyogdm9pZCBobWFjX21kNV9pbml0X3JmYzIxMDQodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwKLQkJCXN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KTsqLwotdm9pZCBobWFjX21kNV9pbml0X2xpbUtfdG9fNjQoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwKLQkJCXN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KTsKLXZvaWQgaG1hY19tZDVfdXBkYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCB0ZXh0X2xlbiwKLQkJCXN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KTsKLXZvaWQgaG1hY19tZDVfZmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCk7Ci0vKiB2b2lkIGhtYWNfbWQ1KHVuc2lnbmVkIGNoYXIga2V5WzE2XSwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAotCQkJdW5zaWduZWQgY2hhciAqZGlnZXN0KTsqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9taXNjLmMgYi9mcy9jaWZzL21pc2MuYwppbmRleCBhMDllMDc3Li4yYTkzMGE3IDEwMDY0NAotLS0gYS9mcy9jaWZzL21pc2MuYworKysgYi9mcy9jaWZzL21pc2MuYwpAQCAtMjM2LDEwICsyMzYsNyBAQAogewogCV9fdTE2IG1pZCA9IDA7CiAJX191MTYgbGFzdF9taWQ7Ci0JaW50ICAgY29sbGlzaW9uOwotCi0JaWYgKHNlcnZlciA9PSBOVUxMKQotCQlyZXR1cm4gbWlkOworCWJvb2wgY29sbGlzaW9uOwogCiAJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJbGFzdF9taWQgPSBzZXJ2ZXItPkN1cnJlbnRNaWQ7IC8qIHdlIGRvIG5vdCB3YW50IHRvIGxvb3AgZm9yZXZlciAqLwpAQCAtMjUyLDI0ICsyNDksMzggQEAKIAkoYW5kIGl0IHdvdWxkIGFsc28gaGF2ZSB0byBoYXZlIGJlZW4gYSByZXF1ZXN0IHRoYXQKIAkgZGlkIG5vdCB0aW1lIG91dCkgKi8KIAl3aGlsZSAoc2VydmVyLT5DdXJyZW50TWlkICE9IGxhc3RfbWlkKSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAkJc3RydWN0IG1pZF9xX2VudHJ5ICptaWRfZW50cnk7CisJCXVuc2lnbmVkIGludCBudW1fbWlkczsKIAotCQljb2xsaXNpb24gPSAwOworCQljb2xsaXNpb24gPSBmYWxzZTsKIAkJaWYgKHNlcnZlci0+Q3VycmVudE1pZCA9PSAwKQogCQkJc2VydmVyLT5DdXJyZW50TWlkKys7CiAKLQkJbGlzdF9mb3JfZWFjaCh0bXAsICZzZXJ2ZXItPnBlbmRpbmdfbWlkX3EpIHsKLQkJCW1pZF9lbnRyeSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgbWlkX3FfZW50cnksIHFoZWFkKTsKLQotCQkJaWYgKChtaWRfZW50cnktPm1pZCA9PSBzZXJ2ZXItPkN1cnJlbnRNaWQpICYmCi0JCQkgICAgKG1pZF9lbnRyeS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSkgeworCQludW1fbWlkcyA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobWlkX2VudHJ5LCAmc2VydmVyLT5wZW5kaW5nX21pZF9xLCBxaGVhZCkgeworCQkJKytudW1fbWlkczsKKwkJCWlmIChtaWRfZW50cnktPm1pZCA9PSBzZXJ2ZXItPkN1cnJlbnRNaWQgJiYKKwkJCSAgICBtaWRfZW50cnktPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgewogCQkJCS8qIFRoaXMgbWlkIGlzIGluIHVzZSwgdHJ5IGEgZGlmZmVyZW50IG9uZSAqLwotCQkJCWNvbGxpc2lvbiA9IDE7CisJCQkJY29sbGlzaW9uID0gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlpZiAoY29sbGlzaW9uID09IDApIHsKKworCQkvKgorCQkgKiBpZiB3ZSBoYXZlIG1vcmUgdGhhbiAzMmsgbWlkcyBpbiB0aGUgbGlzdCwgdGhlbiBzb21ldGhpbmcKKwkJICogaXMgdmVyeSB3cm9uZy4gUG9zc2libHkgYSBsb2NhbCB1c2VyIGlzIHRyeWluZyB0byBEb1MgdGhlCisJCSAqIGJveCBieSBpc3N1aW5nIGxvbmctcnVubmluZyBjYWxscyBhbmQgU0lHS0lMTCdpbmcgdGhlbS4gSWYKKwkJICogd2UgZ2V0IHRvIDJeMTYgbWlkcyB0aGVuIHdlJ3JlIGluIGJpZyB0cm91YmxlIGFzIHRoaXMKKwkJICogZnVuY3Rpb24gY291bGQgbG9vcCBmb3JldmVyLgorCQkgKgorCQkgKiBHbyBhaGVhZCBhbmQgYXNzaWduIG91dCB0aGUgbWlkIGluIHRoaXMgc2l0dWF0aW9uLCBidXQgZm9yY2UKKwkJICogYW4gZXZlbnR1YWwgcmVjb25uZWN0IHRvIGNsZWFuIG91dCB0aGUgcGVuZGluZ19taWRfcS4KKwkJICovCisJCWlmIChudW1fbWlkcyA+IDMyNzY4KQorCQkJc2VydmVyLT50Y3BTdGF0dXMgPSBDaWZzTmVlZFJlY29ubmVjdDsKKworCQlpZiAoIWNvbGxpc2lvbikgewogCQkJbWlkID0gc2VydmVyLT5DdXJyZW50TWlkOwogCQkJYnJlYWs7CiAJCX0KQEAgLTM4MSwyOSArMzkyLDMxIEBACiB9CiAKIHN0YXRpYyBpbnQKLWNoZWNrU01CaGRyKHN0cnVjdCBzbWJfaGRyICpzbWIsIF9fdTE2IG1pZCkKK2NoZWNrX3NtYl9oZHIoc3RydWN0IHNtYl9oZHIgKnNtYiwgX191MTYgbWlkKQogewotCS8qIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGFuIFNNQiwgdGhhdCBpdCBpcyBhIHJlc3BvbnNlLAotCSAgIGFuZCB0aGF0IHRoZSBtZXNzYWdlIGlkcyBtYXRjaCAqLwotCWlmICgoKihfX2xlMzIgKikgc21iLT5Qcm90b2NvbCA9PSBjcHVfdG9fbGUzMigweDQyNGQ1M2ZmKSkgJiYKLQkJKG1pZCA9PSBzbWItPk1pZCkpIHsKLQkJaWYgKHNtYi0+RmxhZ3MgJiBTTUJGTEdfUkVTUE9OU0UpCi0JCQlyZXR1cm4gMDsKLQkJZWxzZSB7Ci0JCS8qIG9ubHkgb25lIHZhbGlkIGNhc2Ugd2hlcmUgc2VydmVyIHNlbmRzIHVzIHJlcXVlc3QgKi8KLQkJCWlmIChzbWItPkNvbW1hbmQgPT0gU01CX0NPTV9MT0NLSU5HX0FORFgpCi0JCQkJcmV0dXJuIDA7Ci0JCQllbHNlCi0JCQkJY0VSUk9SKDEsICJSZWNlaXZlZCBSZXF1ZXN0IG5vdCByZXNwb25zZSIpOwotCQl9Ci0JfSBlbHNlIHsgLyogYmFkIHNpZ25hdHVyZSBvciBtaWQgKi8KLQkJaWYgKCooX19sZTMyICopIHNtYi0+UHJvdG9jb2wgIT0gY3B1X3RvX2xlMzIoMHg0MjRkNTNmZikpCi0JCQljRVJST1IoMSwgIkJhZCBwcm90b2NvbCBzdHJpbmcgc2lnbmF0dXJlIGhlYWRlciAleCIsCi0JCQkJKih1bnNpZ25lZCBpbnQgKikgc21iLT5Qcm90b2NvbCk7Ci0JCWlmIChtaWQgIT0gc21iLT5NaWQpCi0JCQljRVJST1IoMSwgIk1pZHMgZG8gbm90IG1hdGNoIik7CisJLyogZG9lcyBpdCBoYXZlIHRoZSByaWdodCBTTUIgInNpZ25hdHVyZSIgPyAqLworCWlmICgqKF9fbGUzMiAqKSBzbWItPlByb3RvY29sICE9IGNwdV90b19sZTMyKDB4NDI0ZDUzZmYpKSB7CisJCWNFUlJPUigxLCAiQmFkIHByb3RvY29sIHN0cmluZyBzaWduYXR1cmUgaGVhZGVyIDB4JXgiLAorCQkJKih1bnNpZ25lZCBpbnQgKilzbWItPlByb3RvY29sKTsKKwkJcmV0dXJuIDE7CiAJfQotCWNFUlJPUigxLCAiYmFkIHNtYiBkZXRlY3RlZC4gVGhlIE1pZD0lZCIsIHNtYi0+TWlkKTsKKworCS8qIE1ha2Ugc3VyZSB0aGF0IG1lc3NhZ2UgaWRzIG1hdGNoICovCisJaWYgKG1pZCAhPSBzbWItPk1pZCkgeworCQljRVJST1IoMSwgIk1pZHMgZG8gbm90IG1hdGNoLiByZWNlaXZlZD0ldSBleHBlY3RlZD0ldSIsCisJCQlzbWItPk1pZCwgbWlkKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogaWYgaXQncyBhIHJlc3BvbnNlIHRoZW4gYWNjZXB0ICovCisJaWYgKHNtYi0+RmxhZ3MgJiBTTUJGTEdfUkVTUE9OU0UpCisJCXJldHVybiAwOworCisJLyogb25seSBvbmUgdmFsaWQgY2FzZSB3aGVyZSBzZXJ2ZXIgc2VuZHMgdXMgcmVxdWVzdCAqLworCWlmIChzbWItPkNvbW1hbmQgPT0gU01CX0NPTV9MT0NLSU5HX0FORFgpCisJCXJldHVybiAwOworCisJY0VSUk9SKDEsICJTZXJ2ZXIgc2VudCByZXF1ZXN0LCBub3QgcmVzcG9uc2UuIG1pZD0ldSIsIHNtYi0+TWlkKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNDQ4LDcgKzQ2MSw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCWlmIChjaGVja1NNQmhkcihzbWIsIG1pZCkpCisJaWYgKGNoZWNrX3NtYl9oZHIoc21iLCBtaWQpKQogCQlyZXR1cm4gMTsKIAljbGNfbGVuID0gc21iQ2FsY1NpemVfTEUoc21iKTsKIApAQCAtNDY1LDI1ICs0NzgsMjYgQEAKIAkJCWlmICgoKDQgKyBsZW4pICYgMHhGRkZGKSA9PSAoY2xjX2xlbiAmIDB4RkZGRikpCiAJCQkJcmV0dXJuIDA7IC8qIGJjYyB3cmFwcGVkICovCiAJCX0KLQkJY0ZZSSgxLCAiQ2FsY3VsYXRlZCBzaXplICVkIHZzIGxlbmd0aCAlZCBtaXNtYXRjaCBmb3IgbWlkICVkIiwKKwkJY0ZZSSgxLCAiQ2FsY3VsYXRlZCBzaXplICV1IHZzIGxlbmd0aCAldSBtaXNtYXRjaCBmb3IgbWlkPSV1IiwKIAkJCQljbGNfbGVuLCA0ICsgbGVuLCBzbWItPk1pZCk7Ci0JCS8qIFdpbmRvd3MgWFAgY2FuIHJldHVybiBhIGZldyBieXRlcyB0b28gbXVjaCwgcHJlc3VtYWJseQotCQlhbiBpbGxlZ2FsIHBhZCwgYXQgdGhlIGVuZCBvZiBieXRlIHJhbmdlIGxvY2sgcmVzcG9uc2VzCi0JCXNvIHdlIGFsbG93IGZvciB0aGF0IHRocmVlIGJ5dGUgcGFkLCBhcyBsb25nIGFzIGFjdHVhbAotCQlyZWNlaXZlZCBsZW5ndGggaXMgYXMgbG9uZyBvciBsb25nZXIgdGhhbiBjYWxjdWxhdGVkIGxlbmd0aCAqLwotCQkvKiBXZSBoYXZlIG5vdyBoYWQgdG8gZXh0ZW5kIHRoaXMgbW9yZSwgc2luY2UgdGhlcmUgaXMgYQotCQljYXNlIGluIHdoaWNoIGl0IG5lZWRzIHRvIGJlIGJpZ2dlciBzdGlsbCB0byBoYW5kbGUgYQotCQltYWxmb3JtZWQgcmVzcG9uc2UgdG8gdHJhbnNhY3QyIGZpbmRmaXJzdCBmcm9tIFdpblhQIHdoZW4KLQkJYWNjZXNzIGRlbmllZCBpcyByZXR1cm5lZCBhbmQgdGh1cyBiY2MgYW5kIHdjdCBhcmUgemVybwotCQlidXQgc2VydmVyIHNheXMgbGVuZ3RoIGlzIDB4MjEgYnl0ZXMgdG9vIGxvbmcgYXMgaWYgdGhlIHNlcnZlcgotCQlmb3JnZXQgdG8gcmVzZXQgdGhlIHNtYiByZmMxMDAxIGxlbmd0aCB3aGVuIGl0IHJlc2V0IHRoZQotCQl3Y3QgYW5kIGJjYyB0byBtaW5pbXVtIHNpemUgYW5kIGRyb3AgdGhlIHQyIHBhcm1zIGFuZCBkYXRhICovCi0JCWlmICgoNCtsZW4gPiBjbGNfbGVuKSAmJiAobGVuIDw9IGNsY19sZW4gKyA1MTIpKQotCQkJcmV0dXJuIDA7Ci0JCWVsc2UgewotCQkJY0VSUk9SKDEsICJSRkMxMDAxIHNpemUgJWQgYmlnZ2VyIHRoYW4gU01CIGZvciBNaWQ9JWQiLAorCisJCWlmICg0ICsgbGVuIDwgY2xjX2xlbikgeworCQkJY0VSUk9SKDEsICJSRkMxMDAxIHNpemUgJXUgc21hbGxlciB0aGFuIFNNQiBmb3IgbWlkPSV1IiwKIAkJCQkJbGVuLCBzbWItPk1pZCk7CiAJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChsZW4gPiBjbGNfbGVuICsgNTEyKSB7CisJCQkvKgorCQkJICogU29tZSBzZXJ2ZXJzIChXaW5kb3dzIFhQIGluIHBhcnRpY3VsYXIpIHNlbmQgbW9yZQorCQkJICogZGF0YSB0aGFuIHRoZSBsZW5ndGhzIGluIHRoZSBTTUIgcGFja2V0IHdvdWxkCisJCQkgKiBpbmRpY2F0ZSBvbiBjZXJ0YWluIGNhbGxzIChieXRlIHJhbmdlIGxvY2tzIGFuZAorCQkJICogdHJhbnMyIGZpbmQgZmlyc3QgY2FsbHMgaW4gcGFydGljdWxhcikuIFdoaWxlIHRoZQorCQkJICogY2xpZW50IGNhbiBoYW5kbGUgc3VjaCBhIGZyYW1lIGJ5IGlnbm9yaW5nIHRoZQorCQkJICogdHJhaWxpbmcgZGF0YSwgd2UgY2hvb3NlIGxpbWl0IHRoZSBhbW91bnQgb2YgZXh0cmEKKwkJCSAqIGRhdGEgdG8gNTEyIGJ5dGVzLgorCQkJICovCisJCQljRVJST1IoMSwgIlJGQzEwMDEgc2l6ZSAldSBtb3JlIHRoYW4gNTEyIGJ5dGVzIGxhcmdlciAiCisJCQkJICAidGhhbiBTTUIgZm9yIG1pZD0ldSIsIGxlbiwgc21iLT5NaWQpOworCQkJcmV0dXJuIDE7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9jaWZzL25ldG1pc2MuYyBiL2ZzL2NpZnMvbmV0bWlzYy5jCmluZGV4IDhkOTE4OWYuLjc5ZjY0MWUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbmV0bWlzYy5jCisrKyBiL2ZzL2NpZnMvbmV0bWlzYy5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIHsKIAlpbnQgcmMsIGFsZW4sIHNsZW47CiAJY29uc3QgY2hhciAqcGN0OwotCWNoYXIgKmVuZHAsIHNjb3BlX2lkWzEzXTsKKwljaGFyIHNjb3BlX2lkWzEzXTsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnM0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBkc3Q7CiAJc3RydWN0IHNvY2thZGRyX2luNiAqczYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBkc3Q7CiAKQEAgLTE5Nyw5ICsxOTcsOSBAQAogCQltZW1jcHkoc2NvcGVfaWQsIHBjdCArIDEsIHNsZW4pOwogCQlzY29wZV9pZFtzbGVuXSA9ICdcMCc7CiAKLQkJczYtPnNpbjZfc2NvcGVfaWQgPSAodTMyKSBzaW1wbGVfc3RydG91bChwY3QsICZlbmRwLCAwKTsKLQkJaWYgKGVuZHAgIT0gc2NvcGVfaWQgKyBzbGVuKQotCQkJcmV0dXJuIDA7CisJCXJjID0gc3RyaWN0X3N0cnRvdWwoc2NvcGVfaWQsIDAsCisJCQkJCSh1bnNpZ25lZCBsb25nICopJnM2LT5zaW42X3Njb3BlX2lkKTsKKwkJcmMgPSAocmMgPT0gMCkgPyAxIDogMDsKIAl9CiAKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3JlYWRkaXIuYyBiL2ZzL2NpZnMvcmVhZGRpci5jCmluZGV4IDdmMjVjYzMuLmY4ZTRjZDIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvcmVhZGRpci5jCisrKyBiL2ZzL2NpZnMvcmVhZGRpci5jCkBAIC03NjQsNyArNzY0LDYgQEAKIHsKIAlpbnQgcmMgPSAwOwogCWludCB4aWQsIGk7Ci0Jc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjaWZzRmlsZSA9IE5VTEw7CiAJY2hhciAqY3VycmVudF9lbnRyeTsKQEAgLTc3NSw4ICs3NzQsNiBAQAogCiAJeGlkID0gR2V0WGlkKCk7CiAKLQljaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKLQogCS8qCiAJICogRW5zdXJlIEZpbmRGaXJzdCBkb2Vzbid0IGZhaWwgYmVmb3JlIGRvaW5nIGZpbGxkaXIoKSBmb3IgJy4nIGFuZAogCSAqICcuLicuIE90aGVyd2lzZSB3ZSB3b24ndCBiZSBhYmxlIHRvIG5vdGlmeSBWRlMgaW4gY2FzZSBvZiBmYWlsdXJlLgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zZXNzLmMgYi9mcy9jaWZzL3Nlc3MuYwppbmRleCAxYWRjOTYyLi4xNjc2NTcwIDEwMDY0NAotLS0gYS9mcy9jaWZzL3Nlc3MuYworKysgYi9mcy9jaWZzL3Nlc3MuYwpAQCAtNjU2LDEzICs2NTYsMTMgQEAKIAogCWlmICh0eXBlID09IExBTk1BTikgewogI2lmZGVmIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSAotCQljaGFyIGxubV9zZXNzaW9uX2tleVtDSUZTX1NFU1NfS0VZX1NJWkVdOworCQljaGFyIGxubV9zZXNzaW9uX2tleVtDSUZTX0FVVEhfUkVTUF9TSVpFXTsKIAogCQlwU01CLT5yZXEuaGRyLkZsYWdzMiAmPSB+U01CRkxHMl9VTklDT0RFOwogCiAJCS8qIG5vIGNhcGFiaWxpdGllcyBmbGFncyBpbiBvbGQgbGFubWFuIG5lZ290aWF0aW9uICovCiAKLQkJcFNNQi0+b2xkX3JlcS5QYXNzd29yZExlbmd0aCA9IGNwdV90b19sZTE2KENJRlNfU0VTU19LRVlfU0laRSk7CisJCXBTTUItPm9sZF9yZXEuUGFzc3dvcmRMZW5ndGggPSBjcHVfdG9fbGUxNihDSUZTX0FVVEhfUkVTUF9TSVpFKTsKIAogCQkvKiBDYWxjdWxhdGUgaGFzaCB3aXRoIHBhc3N3b3JkIGFuZCBjb3B5IGludG8gYmNjX3B0ci4KIAkJICogRW5jcnlwdGlvbiBLZXkgKHN0b3JlZCBhcyBpbiBjcnlwdGtleSkgZ2V0cyB1c2VkIGlmIHRoZQpAQCAtNjc1LDggKzY3NSw4IEBACiAJCQkJCXRydWUgOiBmYWxzZSwgbG5tX3Nlc3Npb25fa2V5KTsKIAogCQlzZXMtPmZsYWdzIHw9IENJRlNfU0VTX0xBTk1BTjsKLQkJbWVtY3B5KGJjY19wdHIsIChjaGFyICopbG5tX3Nlc3Npb25fa2V5LCBDSUZTX1NFU1NfS0VZX1NJWkUpOwotCQliY2NfcHRyICs9IENJRlNfU0VTU19LRVlfU0laRTsKKwkJbWVtY3B5KGJjY19wdHIsIChjaGFyICopbG5tX3Nlc3Npb25fa2V5LCBDSUZTX0FVVEhfUkVTUF9TSVpFKTsKKwkJYmNjX3B0ciArPSBDSUZTX0FVVEhfUkVTUF9TSVpFOwogCiAJCS8qIGNhbiBub3Qgc2lnbiBpZiBMQU5NQU4gbmVnb3RpYXRlZCBzbyBubyBuZWVkCiAJCXRvIGNhbGN1bGF0ZSBzaWduaW5nIGtleT8gYnV0IHdoYXQgaWYgc2VydmVyCmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYmRlcy5jIGIvZnMvY2lmcy9zbWJkZXMuYwppbmRleCBiNmI2ZGNiLi4wNDcyMTQ4IDEwMDY0NAotLS0gYS9mcy9jaWZzL3NtYmRlcy5jCisrKyBiL2ZzL2NpZnMvc21iZGVzLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICAgIHVwIHdpdGggYSBkaWZmZXJlbnQgYW5zd2VyIHRvIHRoZSBvbmUgYWJvdmUpCiAqLwogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlICJjaWZzZW5jcnlwdC5oIgogI2RlZmluZSB1Y2hhciB1bnNpZ25lZCBjaGFyCiAKIHN0YXRpYyB1Y2hhciBwZXJtMVs1Nl0gPSB7IDU3LCA0OSwgNDEsIDMzLCAyNSwgMTcsIDksCmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYmVuY3J5cHQuYyBiL2ZzL2NpZnMvc21iZW5jcnlwdC5jCmluZGV4IDE5MmVhNTEuLmI1MDQxYzggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iZW5jcnlwdC5jCisrKyBiL2ZzL2NpZnMvc21iZW5jcnlwdC5jCkBAIC0zMiw5ICszMiw4IEBACiAjaW5jbHVkZSAiY2lmc191bmljb2RlLmgiCiAjaW5jbHVkZSAiY2lmc3BkdS5oIgogI2luY2x1ZGUgImNpZnNnbG9iLmgiCi0jaW5jbHVkZSAibWQ1LmgiCiAjaW5jbHVkZSAiY2lmc19kZWJ1Zy5oIgotI2luY2x1ZGUgImNpZnNlbmNyeXB0LmgiCisjaW5jbHVkZSAiY2lmc3Byb3RvLmgiCiAKICNpZm5kZWYgZmFsc2UKICNkZWZpbmUgZmFsc2UgMApAQCAtNDgsMTQgKzQ3LDU4IEBACiAjZGVmaW5lIFNTVkFMWChidWYscG9zLHZhbCkgKENWQUwoYnVmLHBvcyk9KHZhbCkmMHhGRixDVkFMKGJ1Zixwb3MrMSk9KHZhbCk+PjgpCiAjZGVmaW5lIFNTVkFMKGJ1Zixwb3MsdmFsKSBTU1ZBTFgoKGJ1ZiksKHBvcyksKChfX3UxNikodmFsKSkpCiAKLS8qVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBjb21lIGZyb20gIGxpYnNtYi9zbWJlbmNyeXB0LmMgICovCisvKiBwcm9kdWNlIGEgbWQ0IG1lc3NhZ2UgZGlnZXN0IGZyb20gZGF0YSBvZiBsZW5ndGggbiBieXRlcyAqLworaW50CittZGZvdXIodW5zaWduZWQgY2hhciAqbWQ0X2hhc2gsIHVuc2lnbmVkIGNoYXIgKmxpbmtfc3RyLCBpbnQgbGlua19sZW4pCit7CisJaW50IHJjOworCXVuc2lnbmVkIGludCBzaXplOworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKm1kNDsKKwlzdHJ1Y3Qgc2Rlc2MgKnNkZXNjbWQ0OwogCi12b2lkIFNNQmVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKLQkJdW5zaWduZWQgY2hhciAqcDI0KTsKLXZvaWQgRV9tZDRoYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqcDE2KTsKLXN0YXRpYyB2b2lkIFNNQk9XRmVuY3J5cHQodW5zaWduZWQgY2hhciBwYXNzd2RbMTZdLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKLQkJICAgdW5zaWduZWQgY2hhciBwMjRbMjRdKTsKLXZvaWQgU01CTlRlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqYzgsIHVuc2lnbmVkIGNoYXIgKnAyNCk7CisJbWQ0ID0gY3J5cHRvX2FsbG9jX3NoYXNoKCJtZDQiLCAwLCAwKTsKKwlpZiAoSVNfRVJSKG1kNCkpIHsKKwkJcmMgPSBQVFJfRVJSKG1kNCk7CisJCWNFUlJPUigxLCAiJXM6IENyeXB0byBtZDQgYWxsb2NhdGlvbiBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBzaGFzaF9kZXNjKSArIGNyeXB0b19zaGFzaF9kZXNjc2l6ZShtZDQpOworCXNkZXNjbWQ0ID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNkZXNjbWQ0KSB7CisJCXJjID0gLUVOT01FTTsKKwkJY0VSUk9SKDEsICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIiwgX19mdW5jX18pOworCQlnb3RvIG1kZm91cl9lcnI7CisJfQorCXNkZXNjbWQ0LT5zaGFzaC50Zm0gPSBtZDQ7CisJc2Rlc2NtZDQtPnNoYXNoLmZsYWdzID0gMHgwOworCisJcmMgPSBjcnlwdG9fc2hhc2hfaW5pdCgmc2Rlc2NtZDQtPnNoYXNoKTsKKwlpZiAocmMpIHsKKwkJY0VSUk9SKDEsICIlczogQ291bGQgbm90IGluaXQgbWQ0IHNoYXNoXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gbWRmb3VyX2VycjsKKwl9CisJY3J5cHRvX3NoYXNoX3VwZGF0ZSgmc2Rlc2NtZDQtPnNoYXNoLCBsaW5rX3N0ciwgbGlua19sZW4pOworCXJjID0gY3J5cHRvX3NoYXNoX2ZpbmFsKCZzZGVzY21kNC0+c2hhc2gsIG1kNF9oYXNoKTsKKworbWRmb3VyX2VycjoKKwljcnlwdG9fZnJlZV9zaGFzaChtZDQpOworCWtmcmVlKHNkZXNjbWQ0KTsKKworCXJldHVybiByYzsKK30KKworLyogRG9lcyB0aGUgZGVzIGVuY3J5cHRpb24gZnJvbSB0aGUgTlQgb3IgTE0gTUQ0IGhhc2guICovCitzdGF0aWMgdm9pZAorU01CT1dGZW5jcnlwdCh1bnNpZ25lZCBjaGFyIHBhc3N3ZFsxNl0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAorCSAgICAgIHVuc2lnbmVkIGNoYXIgcDI0WzI0XSkKK3sKKwl1bnNpZ25lZCBjaGFyIHAyMVsyMV07CisKKwltZW1zZXQocDIxLCAnXDAnLCAyMSk7CisKKwltZW1jcHkocDIxLCBwYXNzd2QsIDE2KTsKKwlFX1AyNChwMjEsIGM4LCBwMjQpOworfQogCiAvKgogICAgVGhpcyBpbXBsZW1lbnRzIHRoZSBYL09wZW4gU01CIHBhc3N3b3JkIGVuY3J5cHRpb24KQEAgLTExOCw5ICsxNjEsMTAgQEAKICAqIENyZWF0ZXMgdGhlIE1ENCBIYXNoIG9mIHRoZSB1c2VycyBwYXNzd29yZCBpbiBOVCBVTklDT0RFLgogICovCiAKLXZvaWQKK2ludAogRV9tZDRoYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqcDE2KQogeworCWludCByYzsKIAlpbnQgbGVuOwogCV9fdTE2IHdwd2RbMTI5XTsKIApAQCAtMTM5LDggKzE4MywxMCBAQAogCS8qIENhbGN1bGF0ZSBsZW5ndGggaW4gYnl0ZXMgKi8KIAlsZW4gPSBfbXlfd2NzbGVuKHdwd2QpICogc2l6ZW9mKF9fdTE2KTsKIAotCW1kZm91cihwMTYsICh1bnNpZ25lZCBjaGFyICopIHdwd2QsIGxlbik7CisJcmMgPSBtZGZvdXIocDE2LCAodW5zaWduZWQgY2hhciAqKSB3cHdkLCBsZW4pOwogCW1lbXNldCh3cHdkLCAwLCAxMjkgKiAyKTsKKworCXJldHVybiByYzsKIH0KIAogI2lmIDAgLyogY3VycmVudGx5IHVudXNlZCAqLwpAQCAtMjEyLDE5ICsyNTgsNiBAQAogfQogI2VuZGlmCiAKLS8qIERvZXMgdGhlIGRlcyBlbmNyeXB0aW9uIGZyb20gdGhlIE5UIG9yIExNIE1ENCBoYXNoLiAqLwotc3RhdGljIHZvaWQKLVNNQk9XRmVuY3J5cHQodW5zaWduZWQgY2hhciBwYXNzd2RbMTZdLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKLQkgICAgICB1bnNpZ25lZCBjaGFyIHAyNFsyNF0pCi17Ci0JdW5zaWduZWQgY2hhciBwMjFbMjFdOwotCi0JbWVtc2V0KHAyMSwgJ1wwJywgMjEpOwotCi0JbWVtY3B5KHAyMSwgcGFzc3dkLCAxNik7Ci0JRV9QMjQocDIxLCBjOCwgcDI0KTsKLX0KLQogLyogRG9lcyB0aGUgZGVzIGVuY3J5cHRpb24gZnJvbSB0aGUgRklSU1QgOCBCWVRFUyBvZiB0aGUgTlQgb3IgTE0gTUQ0IGhhc2guICovCiAjaWYgMCAvKiBjdXJyZW50bHkgdW51c2VkICovCiBzdGF0aWMgdm9pZApAQCAtMjQyLDE2ICsyNzUsMjEgQEAKICNlbmRpZgogCiAvKiBEb2VzIHRoZSBOVCBNRDQgaGFzaCB0aGVuIGRlcyBlbmNyeXB0aW9uLiAqLwotCi12b2lkCitpbnQKIFNNQk5UZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKmM4LCB1bnNpZ25lZCBjaGFyICpwMjQpCiB7CisJaW50IHJjOwogCXVuc2lnbmVkIGNoYXIgcDIxWzIxXTsKIAogCW1lbXNldChwMjEsICdcMCcsIDIxKTsKIAotCUVfbWQ0aGFzaChwYXNzd2QsIHAyMSk7CisJcmMgPSBFX21kNGhhc2gocGFzc3dkLCBwMjEpOworCWlmIChyYykgeworCQljRllJKDEsICIlcyBDYW4ndCBnZW5lcmF0ZSBOVCBoYXNoLCBlcnJvcjogJWQiLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQogCVNNQk9XRmVuY3J5cHQocDIxLCBjOCwgcDI0KTsKKwlyZXR1cm4gcmM7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy90cmFuc3BvcnQuYyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKaW5kZXggYzFjY2NhMS4uNDZkODc1NmYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMKKysrIGIvZnMvY2lmcy90cmFuc3BvcnQuYwpAQCAtMjM2LDkgKzIzNiw5IEBACiAJCXNlcnZlci0+dGNwU3RhdHVzID0gQ2lmc05lZWRSZWNvbm5lY3Q7CiAJfQogCi0JaWYgKHJjIDwgMCkgeworCWlmIChyYyA8IDAgJiYgcmMgIT0gLUVJTlRSKQogCQljRVJST1IoMSwgIkVycm9yICVkIHNlbmRpbmcgZGF0YSBvbiBzb2NrZXQgdG8gc2VydmVyIiwgcmMpOwotCX0gZWxzZQorCWVsc2UKIAkJcmMgPSAwOwogCiAJLyogRG9uJ3Qgd2FudCB0byBtb2RpZnkgdGhlIGJ1ZmZlciBhcyBhCkBAIC0zNTksNiArMzU5LDEwIEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKKwkvKiBlbmFibGUgc2lnbmluZyBpZiBzZXJ2ZXIgcmVxdWlyZXMgaXQgKi8KKwlpZiAoc2VydmVyLT5zZWNNb2RlICYgKFNFQ01PREVfU0lHTl9SRVFVSVJFRCB8IFNFQ01PREVfU0lHTl9FTkFCTEVEKSkKKwkJaW5fYnVmLT5GbGFnczIgfD0gU01CRkxHMl9TRUNVUklUWV9TSUdOQVRVUkU7CisKIAltdXRleF9sb2NrKCZzZXJ2ZXItPnNydl9tdXRleCk7CiAJbWlkID0gQWxsb2NNaWRRRW50cnkoaW5fYnVmLCBzZXJ2ZXIpOwogCWlmIChtaWQgPT0gTlVMTCkgewpAQCAtNDUzLDYgKzQ1Nyw5IEBACiAJY2FzZSBNSURfUkVUUllfTkVFREVEOgogCQlyYyA9IC1FQUdBSU47CiAJCWJyZWFrOworCWNhc2UgTUlEX1JFU1BPTlNFX01BTEZPUk1FRDoKKwkJcmMgPSAtRUlPOworCQlicmVhazsKIAlkZWZhdWx0OgogCQljRVJST1IoMSwgIiVzOiBpbnZhbGlkIG1pZCBzdGF0ZSBtaWQ9JWQgc3RhdGU9JWQiLCBfX2Z1bmNfXywKIAkJCW1pZC0+bWlkLCBtaWQtPm1pZFN0YXRlKTsKQEAgLTU3MCwxNyArNTc3LDMzIEBACiAjZW5kaWYKIAogCW11dGV4X3VubG9jaygmc2VzLT5zZXJ2ZXItPnNydl9tdXRleCk7Ci0JY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOwogCi0JaWYgKHJjIDwgMCkKKwlpZiAocmMgPCAwKSB7CisJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKIAkJZ290byBvdXQ7CisJfQogCi0JaWYgKGxvbmdfb3AgPT0gQ0lGU19BU1lOQ19PUCkKKwlpZiAobG9uZ19vcCA9PSBDSUZTX0FTWU5DX09QKSB7CisJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKIAkJZ290byBvdXQ7CisJfQogCiAJcmMgPSB3YWl0X2Zvcl9yZXNwb25zZShzZXMtPnNlcnZlciwgbWlkUSk7Ci0JaWYgKHJjICE9IDApCi0JCWdvdG8gb3V0OworCWlmIChyYyAhPSAwKSB7CisJCXNlbmRfbnRfY2FuY2VsKHNlcy0+c2VydmVyLCBpbl9idWYsIG1pZFEpOworCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJaWYgKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgeworCQkJbWlkUS0+Y2FsbGJhY2sgPSBEZWxldGVNaWRRRW50cnk7CisJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCQkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOworCQkJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KTsKKwkJCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOworCQkJcmV0dXJuIHJjOworCQl9CisJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJfQorCisJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOwogCiAJcmMgPSBzeW5jX21pZF9yZXN1bHQobWlkUSwgc2VzLT5zZXJ2ZXIpOwogCWlmIChyYyAhPSAwKSB7CkBAIC03MjQsOCArNzQ3LDE5IEBACiAJCWdvdG8gb3V0OwogCiAJcmMgPSB3YWl0X2Zvcl9yZXNwb25zZShzZXMtPnNlcnZlciwgbWlkUSk7Ci0JaWYgKHJjICE9IDApCi0JCWdvdG8gb3V0OworCWlmIChyYyAhPSAwKSB7CisJCXNlbmRfbnRfY2FuY2VsKHNlcy0+c2VydmVyLCBpbl9idWYsIG1pZFEpOworCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJaWYgKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgeworCQkJLyogbm8gbG9uZ2VyIGNvbnNpZGVyZWQgdG8gYmUgImluLWZsaWdodCIgKi8KKwkJCW1pZFEtPmNhbGxiYWNrID0gRGVsZXRlTWlkUUVudHJ5OworCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7CisJCQl3YWtlX3VwKCZzZXMtPnNlcnZlci0+cmVxdWVzdF9xKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCX0KIAogCXJjID0gc3luY19taWRfcmVzdWx0KG1pZFEsIHNlcy0+c2VydmVyKTsKIAlpZiAocmMgIT0gMCkgewpAQCAtOTIyLDEwICs5NTYsMjEgQEAKIAkJCX0KIAkJfQogCi0JCWlmICh3YWl0X2Zvcl9yZXNwb25zZShzZXMtPnNlcnZlciwgbWlkUSkgPT0gMCkgewotCQkJLyogV2UgZ290IHRoZSByZXNwb25zZSAtIHJlc3RhcnQgc3lzdGVtIGNhbGwuICovCi0JCQlyc3RhcnQgPSAxOworCQlyYyA9IHdhaXRfZm9yX3Jlc3BvbnNlKHNlcy0+c2VydmVyLCBtaWRRKTsKKwkJaWYgKHJjKSB7CisJCQlzZW5kX250X2NhbmNlbChzZXMtPnNlcnZlciwgaW5fYnVmLCBtaWRRKTsKKwkJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOworCQkJaWYgKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgeworCQkJCS8qIG5vIGxvbmdlciBjb25zaWRlcmVkIHRvIGJlICJpbi1mbGlnaHQiICovCisJCQkJbWlkUS0+Y2FsbGJhY2sgPSBEZWxldGVNaWRRRW50cnk7CisJCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCQlyZXR1cm4gcmM7CisJCQl9CisJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwogCQl9CisKKwkJLyogV2UgZ290IHRoZSByZXNwb25zZSAtIHJlc3RhcnQgc3lzdGVtIGNhbGwuICovCisJCXJzdGFydCA9IDE7CiAJfQogCiAJcmMgPSBzeW5jX21pZF9yZXN1bHQobWlkUSwgc2VzLT5zZXJ2ZXIpOwpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCA5ZjQ5M2VlLi4yYTZiZDlhNCAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTE3Niw2ICsxNzYsNyBAQAogCiAvKioKICAqIGRlbnRyeV9yY3V3YWxrX2JhcnJpZXIgLSBpbnZhbGlkYXRlIGluLXByb2dyZXNzIHJjdS13YWxrIGxvb2t1cHMKKyAqIEBkZW50cnk6IHRoZSB0YXJnZXQgZGVudHJ5CiAgKiBBZnRlciB0aGlzIGNhbGwsIGluLXByb2dyZXNzIHJjdS13YWxrIHBhdGggbG9va3VwIHdpbGwgZmFpbC4gVGhpcwogICogc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB1bmhhc2hpbmcsIGFuZCBhZnRlciBjaGFuZ2luZyBkX2lub2RlIChpZgogICogdGhlIGRlbnRyeSBoYXMgbm90IGFscmVhZHkgYmVlbiB1bmhhc2hlZCkuCkBAIC0yODEsNiArMjgyLDcgQEAKIC8qKgogICogZF9raWxsIC0ga2lsbCBkZW50cnkgYW5kIHJldHVybiBwYXJlbnQKICAqIEBkZW50cnk6IGRlbnRyeSB0byBraWxsCisgKiBAcGFyZW50OiBwYXJlbnQgZGVudHJ5CiAgKgogICogVGhlIGRlbnRyeSBtdXN0IGFscmVhZHkgYmUgdW5oYXNoZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgTFJVLgogICoKQEAgLTE5NzMsNyArMTk3NSw3IEBACiAvKioKICAqIGRfdmFsaWRhdGUgLSB2ZXJpZnkgZGVudHJ5IHByb3ZpZGVkIGZyb20gaW5zZWN1cmUgc291cmNlIChkZXByZWNhdGVkKQogICogQGRlbnRyeTogVGhlIGRlbnRyeSBhbGxlZ2VkIHRvIGJlIHZhbGlkIGNoaWxkIG9mIEBkcGFyZW50Ci0gKiBAcGFyZW50OiBUaGUgcGFyZW50IGRlbnRyeSAoa25vd24gdG8gYmUgdmFsaWQpCisgKiBAZHBhcmVudDogVGhlIHBhcmVudCBkZW50cnkgKGtub3duIHRvIGJlIHZhbGlkKQogICoKICAqIEFuIGluc2VjdXJlIHNvdXJjZSBoYXMgc2VudCB1cyBhIGRlbnRyeSwgaGVyZSB3ZSB2ZXJpZnkgaXQgYW5kIGRnZXQoKSBpdC4KICAqIFRoaXMgaXMgdXNlZCBieSBuY3BmcyBpbiBpdHMgcmVhZGRpciBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggOWM2NGFlOS4uMmQ4Yzg3YiAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTE0NjgsMTUgKzE0NjgsMTMgQEAKIAogc3RhdGljIGludCB3b3JrX3N0YXJ0KHZvaWQpCiB7Ci0JcmVjdl93b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoImRsbV9yZWN2IiwgV1FfTUVNX1JFQ0xBSU0gfAotCQkJCQkgV1FfSElHSFBSSSB8IFdRX0ZSRUVaRUFCTEUsIDApOworCXJlY3Zfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImRsbV9yZWN2Iik7CiAJaWYgKCFyZWN2X3dvcmtxdWV1ZSkgewogCQlsb2dfcHJpbnQoImNhbid0IHN0YXJ0IGRsbV9yZWN2Iik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXNlbmRfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJkbG1fc2VuZCIsIFdRX01FTV9SRUNMQUlNIHwKLQkJCQkJIFdRX0hJR0hQUkkgfCBXUV9GUkVFWkVBQkxFLCAwKTsKKwlzZW5kX3dvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJkbG1fc2VuZCIpOwogCWlmICghc2VuZF93b3JrcXVldWUpIHsKIAkJbG9nX3ByaW50KCJjYW4ndCBzdGFydCBkbG1fc2VuZCIpOwogCQlkZXN0cm95X3dvcmtxdWV1ZShyZWN2X3dvcmtxdWV1ZSk7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9kZW50cnkuYyBiL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCmluZGV4IDZmYzRmMzEuLjUzNGMxZDQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCisrKyBiL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCkBAIC00NiwyNCArNDYsMjggQEAKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnk7CiAJc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5X3NhdmU7Ci0Jc3RydWN0IHZmc21vdW50ICp2ZnNtb3VudF9zYXZlOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeV9zYXZlID0gTlVMTDsKKwlzdHJ1Y3QgdmZzbW91bnQgKnZmc21vdW50X3NhdmUgPSBOVUxMOwogCWludCByYyA9IDE7CiAKLQlpZiAobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkKKwlpZiAobmQgJiYgbmQtPmZsYWdzICYgTE9PS1VQX1JDVSkKIAkJcmV0dXJuIC1FQ0hJTEQ7CiAKIAlsb3dlcl9kZW50cnkgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZGVudHJ5KTsKIAlsb3dlcl9tbnQgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KGRlbnRyeSk7CiAJaWYgKCFsb3dlcl9kZW50cnktPmRfb3AgfHwgIWxvd2VyX2RlbnRyeS0+ZF9vcC0+ZF9yZXZhbGlkYXRlKQogCQlnb3RvIG91dDsKLQlkZW50cnlfc2F2ZSA9IG5kLT5wYXRoLmRlbnRyeTsKLQl2ZnNtb3VudF9zYXZlID0gbmQtPnBhdGgubW50OwotCW5kLT5wYXRoLmRlbnRyeSA9IGxvd2VyX2RlbnRyeTsKLQluZC0+cGF0aC5tbnQgPSBsb3dlcl9tbnQ7CisJaWYgKG5kKSB7CisJCWRlbnRyeV9zYXZlID0gbmQtPnBhdGguZGVudHJ5OworCQl2ZnNtb3VudF9zYXZlID0gbmQtPnBhdGgubW50OworCQluZC0+cGF0aC5kZW50cnkgPSBsb3dlcl9kZW50cnk7CisJCW5kLT5wYXRoLm1udCA9IGxvd2VyX21udDsKKwl9CiAJcmMgPSBsb3dlcl9kZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZShsb3dlcl9kZW50cnksIG5kKTsKLQluZC0+cGF0aC5kZW50cnkgPSBkZW50cnlfc2F2ZTsKLQluZC0+cGF0aC5tbnQgPSB2ZnNtb3VudF9zYXZlOworCWlmIChuZCkgeworCQluZC0+cGF0aC5kZW50cnkgPSBkZW50cnlfc2F2ZTsKKwkJbmQtPnBhdGgubW50ID0gdmZzbW91bnRfc2F2ZTsKKwl9CiAJaWYgKGRlbnRyeS0+ZF9pbm9kZSkgewogCQlzdHJ1Y3QgaW5vZGUgKmxvd2VyX2lub2RlID0KIAkJCWVjcnlwdGZzX2lub2RlX3RvX2xvd2VyKGRlbnRyeS0+ZF9pbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaCBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCmluZGV4IGRiYzg0ZWQuLmUwMDc1MzQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCisrKyBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCkBAIC02MzIsOCArNjMyLDcgQEAKIAkJICAgICAgIHUzMiBmbGFncyk7CiBpbnQgZWNyeXB0ZnNfbG9va3VwX2FuZF9pbnRlcnBvc2VfbG93ZXIoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAogCQkJCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnksCi0JCQkJCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfZGlyX2lub2RlLAotCQkJCQlzdHJ1Y3QgbmFtZWlkYXRhICplY3J5cHRmc19uZCk7CisJCQkJCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfZGlyX2lub2RlKTsKIGludCBlY3J5cHRmc19kZWNvZGVfYW5kX2RlY3J5cHRfZmlsZW5hbWUoY2hhciAqKmRlY3J5cHRlZF9uYW1lLAogCQkJCQkgc2l6ZV90ICpkZWNyeXB0ZWRfbmFtZV9zaXplLAogCQkJCQkgc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZmlsZS5jIGIvZnMvZWNyeXB0ZnMvZmlsZS5jCmluZGV4IDgxZTEwZTYuLjdkMTA1MGUgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2ZpbGUuYworKysgYi9mcy9lY3J5cHRmcy9maWxlLmMKQEAgLTMxNyw2ICszMTcsNyBAQAogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVjcnlwdGZzX2Rpcl9mb3BzID0gewogCS5yZWFkZGlyID0gZWNyeXB0ZnNfcmVhZGRpciwKKwkucmVhZCA9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnVubG9ja2VkX2lvY3RsID0gZWNyeXB0ZnNfdW5sb2NrZWRfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwgPSBlY3J5cHRmc19jb21wYXRfaW9jdGwsCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwppbmRleCBiZDMzZjg3Li5iNTkyOTM4IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9pbm9kZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKQEAgLTc0LDE2ICs3NCwyMCBAQAogCXVuc2lnbmVkIGludCBmbGFnc19zYXZlOwogCWludCByYzsKIAotCWRlbnRyeV9zYXZlID0gbmQtPnBhdGguZGVudHJ5OwotCXZmc21vdW50X3NhdmUgPSBuZC0+cGF0aC5tbnQ7Ci0JZmxhZ3Nfc2F2ZSA9IG5kLT5mbGFnczsKLQluZC0+cGF0aC5kZW50cnkgPSBsb3dlcl9kZW50cnk7Ci0JbmQtPnBhdGgubW50ID0gbG93ZXJfbW50OwotCW5kLT5mbGFncyAmPSB+TE9PS1VQX09QRU47CisJaWYgKG5kKSB7CisJCWRlbnRyeV9zYXZlID0gbmQtPnBhdGguZGVudHJ5OworCQl2ZnNtb3VudF9zYXZlID0gbmQtPnBhdGgubW50OworCQlmbGFnc19zYXZlID0gbmQtPmZsYWdzOworCQluZC0+cGF0aC5kZW50cnkgPSBsb3dlcl9kZW50cnk7CisJCW5kLT5wYXRoLm1udCA9IGxvd2VyX21udDsKKwkJbmQtPmZsYWdzICY9IH5MT09LVVBfT1BFTjsKKwl9CiAJcmMgPSB2ZnNfY3JlYXRlKGxvd2VyX2Rpcl9pbm9kZSwgbG93ZXJfZGVudHJ5LCBtb2RlLCBuZCk7Ci0JbmQtPnBhdGguZGVudHJ5ID0gZGVudHJ5X3NhdmU7Ci0JbmQtPnBhdGgubW50ID0gdmZzbW91bnRfc2F2ZTsKLQluZC0+ZmxhZ3MgPSBmbGFnc19zYXZlOworCWlmIChuZCkgeworCQluZC0+cGF0aC5kZW50cnkgPSBkZW50cnlfc2F2ZTsKKwkJbmQtPnBhdGgubW50ID0gdmZzbW91bnRfc2F2ZTsKKwkJbmQtPmZsYWdzID0gZmxhZ3Nfc2F2ZTsKKwl9CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yNDEsOCArMjQ1LDcgQEAKICAqLwogaW50IGVjcnlwdGZzX2xvb2t1cF9hbmRfaW50ZXJwb3NlX2xvd2VyKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSwKIAkJCQkJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5LAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmVjcnlwdGZzX2Rpcl9pbm9kZSwKLQkJCQkJc3RydWN0IG5hbWVpZGF0YSAqZWNyeXB0ZnNfbmQpCisJCQkJCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfZGlyX2lub2RlKQogewogCXN0cnVjdCBkZW50cnkgKmxvd2VyX2Rpcl9kZW50cnk7CiAJc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQ7CkBAIC0yOTAsOCArMjkzLDYgQEAKIAkJZ290byBvdXQ7CiAJaWYgKHNwZWNpYWxfZmlsZShsb3dlcl9pbm9kZS0+aV9tb2RlKSkKIAkJZ290byBvdXQ7Ci0JaWYgKCFlY3J5cHRmc19uZCkKLQkJZ290byBvdXQ7CiAJLyogUmVsZWFzZWQgaW4gdGhpcyBmdW5jdGlvbiAqLwogCXBhZ2VfdmlydCA9IGttZW1fY2FjaGVfemFsbG9jKGVjcnlwdGZzX2hlYWRlcl9jYWNoZV8yLCBHRlBfVVNFUik7CiAJaWYgKCFwYWdlX3ZpcnQpIHsKQEAgLTM0OSw3NSArMzUwLDYgQEAKIH0KIAogLyoqCi0gKiBlY3J5cHRmc19uZXdfbG93ZXJfZGVudHJ5Ci0gKiBAbmFtZTogVGhlIG5hbWUgb2YgdGhlIG5ldyBkZW50cnkuCi0gKiBAbG93ZXJfZGlyX2RlbnRyeTogUGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgbmV3IGRlbnRyeS4KLSAqIEBuZDogbmFtZWlkYXRhIGZyb20gbGFzdCBsb29rdXAuCi0gKgotICogQ3JlYXRlIGEgbmV3IGRlbnRyeSBvciBnZXQgaXQgZnJvbSBsb3dlciBwYXJlbnQgZGlyLgotICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqCi1lY3J5cHRmc19uZXdfbG93ZXJfZGVudHJ5KHN0cnVjdCBxc3RyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kaXJfZGVudHJ5LAotCQkJICBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5OwotCXN0cnVjdCBkZW50cnkgKnRtcDsKLQlzdHJ1Y3QgaW5vZGUgKmxvd2VyX2Rpcl9pbm9kZTsKLQotCWxvd2VyX2Rpcl9pbm9kZSA9IGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGU7Ci0KLQl0bXAgPSBkX2FsbG9jKGxvd2VyX2Rpcl9kZW50cnksIG5hbWUpOwotCWlmICghdG1wKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCW11dGV4X2xvY2soJmxvd2VyX2Rpcl9pbm9kZS0+aV9tdXRleCk7Ci0JbmV3X2RlbnRyeSA9IGxvd2VyX2Rpcl9pbm9kZS0+aV9vcC0+bG9va3VwKGxvd2VyX2Rpcl9pbm9kZSwgdG1wLCBuZCk7Ci0JbXV0ZXhfdW5sb2NrKCZsb3dlcl9kaXJfaW5vZGUtPmlfbXV0ZXgpOwotCi0JaWYgKCFuZXdfZGVudHJ5KQotCQluZXdfZGVudHJ5ID0gdG1wOwotCWVsc2UKLQkJZHB1dCh0bXApOwotCi0JcmV0dXJuIG5ld19kZW50cnk7Ci19Ci0KLQotLyoqCi0gKiBlY3J5cHRmc19sb29rdXBfb25lX2xvd2VyCi0gKiBAZWNyeXB0ZnNfZGVudHJ5OiBUaGUgZUNyeXB0ZnMgZGVudHJ5IHRoYXQgd2UgYXJlIGxvb2tpbmcgdXAKLSAqIEBsb3dlcl9kaXJfZGVudHJ5OiBsb3dlciBwYXJlbnQgZGlyZWN0b3J5Ci0gKiBAbmFtZTogbG93ZXIgZmlsZSBuYW1lCi0gKgotICogR2V0IHRoZSBsb3dlciBkZW50cnkgZnJvbSB2ZnMuIElmIGxvd2VyIGRlbnRyeSBkb2VzIG5vdCBleGlzdCB5ZXQsCi0gKiBjcmVhdGUgaXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICoKLWVjcnlwdGZzX2xvb2t1cF9vbmVfbG93ZXIoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAotCQkJICBzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kaXJfZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqbmFtZSkKLXsKLQlzdHJ1Y3QgbmFtZWlkYXRhIG5kOwotCXN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50OwotCWludCBlcnI7Ci0KLQlsb3dlcl9tbnQgPSBtbnRnZXQoZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udCgKLQkJCQkgICAgZWNyeXB0ZnNfZGVudHJ5LT5kX3BhcmVudCkpOwotCWVyciA9IHZmc19wYXRoX2xvb2t1cChsb3dlcl9kaXJfZGVudHJ5LCBsb3dlcl9tbnQsIG5hbWUtPm5hbWUgLCAwLCAmbmQpOwotCW1udHB1dChsb3dlcl9tbnQpOwotCi0JaWYgKCFlcnIpIHsKLQkJLyogd2UgZG9udCBuZWVkIHRoZSBtb3VudCAqLwotCQltbnRwdXQobmQucGF0aC5tbnQpOwotCQlyZXR1cm4gbmQucGF0aC5kZW50cnk7Ci0JfQotCWlmIChlcnIgIT0gLUVOT0VOVCkKLQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKLQotCS8qIGNyZWF0ZSBhIG5ldyBsb3dlciBkZW50cnkgKi8KLQlyZXR1cm4gZWNyeXB0ZnNfbmV3X2xvd2VyX2RlbnRyeShuYW1lLCBsb3dlcl9kaXJfZGVudHJ5LCAmbmQpOwotfQotCi0vKioKICAqIGVjcnlwdGZzX2xvb2t1cAogICogQGVjcnlwdGZzX2Rpcl9pbm9kZTogVGhlIGVDcnlwdGZzIGRpcmVjdG9yeSBpbm9kZQogICogQGVjcnlwdGZzX2RlbnRyeTogVGhlIGVDcnlwdGZzIGRlbnRyeSB0aGF0IHdlIGFyZSBsb29raW5nIHVwCkBAIC00MzQsNyArMzY2LDYgQEAKIAlzaXplX3QgZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWVfc2l6ZTsKIAlzdHJ1Y3QgZWNyeXB0ZnNfbW91bnRfY3J5cHRfc3RhdCAqbW91bnRfY3J5cHRfc3RhdCA9IE5VTEw7CiAJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGlyX2RlbnRyeSwgKmxvd2VyX2RlbnRyeTsKLQlzdHJ1Y3QgcXN0ciBsb3dlcl9uYW1lOwogCWludCByYyA9IDA7CiAKIAlpZiAoKGVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLmxlbiA9PSAxCkBAIC00NDQsMjAgKzM3NSwxNCBAQAogCQlnb3RvIG91dF9kX2Ryb3A7CiAJfQogCWxvd2VyX2Rpcl9kZW50cnkgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZWNyeXB0ZnNfZGVudHJ5LT5kX3BhcmVudCk7Ci0JbG93ZXJfbmFtZS5uYW1lID0gZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubmFtZTsKLQlsb3dlcl9uYW1lLmxlbiA9IGVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLmxlbjsKLQlsb3dlcl9uYW1lLmhhc2ggPSBlY3J5cHRmc19kZW50cnktPmRfbmFtZS5oYXNoOwotCWlmIChsb3dlcl9kaXJfZGVudHJ5LT5kX29wICYmIGxvd2VyX2Rpcl9kZW50cnktPmRfb3AtPmRfaGFzaCkgewotCQlyYyA9IGxvd2VyX2Rpcl9kZW50cnktPmRfb3AtPmRfaGFzaChsb3dlcl9kaXJfZGVudHJ5LAotCQkJCWxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUsICZsb3dlcl9uYW1lKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0X2RfZHJvcDsKLQl9Ci0JbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfbG9va3VwX29uZV9sb3dlcihlY3J5cHRmc19kZW50cnksCi0JCQkJCQkgbG93ZXJfZGlyX2RlbnRyeSwgJmxvd2VyX25hbWUpOworCW11dGV4X2xvY2soJmxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCWxvd2VyX2RlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKGVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJICAgICAgbG93ZXJfZGlyX2RlbnRyeSwKKwkJCQkgICAgICBlY3J5cHRmc19kZW50cnktPmRfbmFtZS5sZW4pOworCW11dGV4X3VubG9jaygmbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJaWYgKElTX0VSUihsb3dlcl9kZW50cnkpKSB7CiAJCXJjID0gUFRSX0VSUihsb3dlcl9kZW50cnkpOwotCQllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIiVzOiBsb29rdXBfb25lX2xvd2VyKCkgcmV0dXJuZWQgIgorCQllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIiVzOiBsb29rdXBfb25lX2xlbigpIHJldHVybmVkICIKIAkJCQkiWyVkXSBvbiBsb3dlcl9kZW50cnkgPSBbJXNdXG4iLCBfX2Z1bmNfXywgcmMsCiAJCQkJZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWUpOwogCQlnb3RvIG91dF9kX2Ryb3A7CkBAIC00NzksMjggKzQwNCwyMSBAQAogCQkgICAgICAgImZpbGVuYW1lOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7CiAJCWdvdG8gb3V0X2RfZHJvcDsKIAl9Ci0JbG93ZXJfbmFtZS5uYW1lID0gZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWU7Ci0JbG93ZXJfbmFtZS5sZW4gPSBlbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZV9zaXplOwotCWxvd2VyX25hbWUuaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKGxvd2VyX25hbWUubmFtZSwgbG93ZXJfbmFtZS5sZW4pOwotCWlmIChsb3dlcl9kaXJfZGVudHJ5LT5kX29wICYmIGxvd2VyX2Rpcl9kZW50cnktPmRfb3AtPmRfaGFzaCkgewotCQlyYyA9IGxvd2VyX2Rpcl9kZW50cnktPmRfb3AtPmRfaGFzaChsb3dlcl9kaXJfZGVudHJ5LAotCQkJCWxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUsICZsb3dlcl9uYW1lKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0X2RfZHJvcDsKLQl9Ci0JbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfbG9va3VwX29uZV9sb3dlcihlY3J5cHRmc19kZW50cnksCi0JCQkJCQkgbG93ZXJfZGlyX2RlbnRyeSwgJmxvd2VyX25hbWUpOworCW11dGV4X2xvY2soJmxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCWxvd2VyX2RlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKGVuY3J5cHRlZF9hbmRfZW5jb2RlZF9uYW1lLAorCQkJCSAgICAgIGxvd2VyX2Rpcl9kZW50cnksCisJCQkJICAgICAgZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWVfc2l6ZSk7CisJbXV0ZXhfdW5sb2NrKCZsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlpZiAoSVNfRVJSKGxvd2VyX2RlbnRyeSkpIHsKIAkJcmMgPSBQVFJfRVJSKGxvd2VyX2RlbnRyeSk7Ci0JCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiJXM6IGxvb2t1cF9vbmVfbG93ZXIoKSByZXR1cm5lZCAiCisJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiJXM6IGxvb2t1cF9vbmVfbGVuKCkgcmV0dXJuZWQgIgogCQkJCSJbJWRdIG9uIGxvd2VyX2RlbnRyeSA9IFslc11cbiIsIF9fZnVuY19fLCByYywKIAkJCQllbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZSk7CiAJCWdvdG8gb3V0X2RfZHJvcDsKIAl9CiBsb29rdXBfYW5kX2ludGVycG9zZToKIAlyYyA9IGVjcnlwdGZzX2xvb2t1cF9hbmRfaW50ZXJwb3NlX2xvd2VyKGVjcnlwdGZzX2RlbnRyeSwgbG93ZXJfZGVudHJ5LAotCQkJCQkJIGVjcnlwdGZzX2Rpcl9pbm9kZSwKLQkJCQkJCSBlY3J5cHRmc19uZCk7CisJCQkJCQkgZWNyeXB0ZnNfZGlyX2lub2RlKTsKIAlnb3RvIG91dDsKIG91dF9kX2Ryb3A6CiAJZF9kcm9wKGVjcnlwdGZzX2RlbnRyeSk7CkBAIC0xMDkyLDYgKzEwMTAsOCBAQAogCXJjID0gdmZzX2dldGF0dHIoZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udChkZW50cnkpLAogCQkJIGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihkZW50cnkpLCAmbG93ZXJfc3RhdCk7CiAJaWYgKCFyYykgeworCQlmc3N0YWNrX2NvcHlfYXR0cl9hbGwoZGVudHJ5LT5kX2lub2RlLAorCQkJCSAgICAgIGVjcnlwdGZzX2lub2RlX3RvX2xvd2VyKGRlbnRyeS0+ZF9pbm9kZSkpOwogCQlnZW5lcmljX2ZpbGxhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgc3RhdCk7CiAJCXN0YXQtPmJsb2NrcyA9IGxvd2VyX3N0YXQuYmxvY2tzOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2V2ZW50ZmQuYyBiL2ZzL2V2ZW50ZmQuYwppbmRleCBlMDE5NGIzLi5kOWE1OTE3IDEwMDY0NAotLS0gYS9mcy9ldmVudGZkLmMKKysrIGIvZnMvZXZlbnRmZC5jCkBAIC05OSw3ICs5OSw3IEBACiAgKiBAY3R4OiBbaW5dIFBvaW50ZXIgdG8gZXZlbnRmZCBjb250ZXh0LgogICoKICAqIFRoZSBldmVudGZkIGNvbnRleHQgcmVmZXJlbmNlIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgYWNxdWlyZWQgZWl0aGVyCi0gKiB3aXRoIGV2ZW50ZmRfY3R4X2dldCgpIG9yIGV2ZW50ZmRfY3R4X2ZkZ2V0KCkpLgorICogd2l0aCBldmVudGZkX2N0eF9nZXQoKSBvciBldmVudGZkX2N0eF9mZGdldCgpLgogICovCiB2b2lkIGV2ZW50ZmRfY3R4X3B1dChzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCkKIHsKQEAgLTE0Niw5ICsxNDYsOSBAQAogICogZXZlbnRmZF9jdHhfcmVtb3ZlX3dhaXRfcXVldWUgLSBSZWFkIHRoZSBjdXJyZW50IGNvdW50ZXIgYW5kIHJlbW92ZXMgd2FpdCBxdWV1ZS4KICAqIEBjdHg6IFtpbl0gUG9pbnRlciB0byBldmVudGZkIGNvbnRleHQuCiAgKiBAd2FpdDogW2luXSBXYWl0IHF1ZXVlIHRvIGJlIHJlbW92ZWQuCi0gKiBAY250OiBbb3V0XSBQb2ludGVyIHRvIHRoZSA2NGJpdCBjb250ZXIgdmFsdWUuCisgKiBAY250OiBbb3V0XSBQb2ludGVyIHRvIHRoZSA2NC1iaXQgY291bnRlciB2YWx1ZS4KICAqCi0gKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKKyAqIFJldHVybnMgJTAgaWYgc3VjY2Vzc2Z1bCwgb3IgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKICAqCiAgKiAtRUFHQUlOICAgICAgOiBUaGUgb3BlcmF0aW9uIHdvdWxkIGhhdmUgYmxvY2tlZC4KICAqCkBAIC0xNzUsMTEgKzE3NSwxMSBAQAogICogZXZlbnRmZF9jdHhfcmVhZCAtIFJlYWRzIHRoZSBldmVudGZkIGNvdW50ZXIgb3Igd2FpdCBpZiBpdCBpcyB6ZXJvLgogICogQGN0eDogW2luXSBQb2ludGVyIHRvIGV2ZW50ZmQgY29udGV4dC4KICAqIEBub193YWl0OiBbaW5dIERpZmZlcmVudCBmcm9tIHplcm8gaWYgdGhlIG9wZXJhdGlvbiBzaG91bGQgbm90IGJsb2NrLgotICogQGNudDogW291dF0gUG9pbnRlciB0byB0aGUgNjRiaXQgY29udGVyIHZhbHVlLgorICogQGNudDogW291dF0gUG9pbnRlciB0byB0aGUgNjQtYml0IGNvdW50ZXIgdmFsdWUuCiAgKgotICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6CisgKiBSZXR1cm5zICUwIGlmIHN1Y2Nlc3NmdWwsIG9yIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6CiAgKgotICogLUVBR0FJTiAgICAgIDogVGhlIG9wZXJhdGlvbiB3b3VsZCBoYXZlIGJsb2NrZWQgYnV0IEBub193YWl0IHdhcyBub256ZXJvLgorICogLUVBR0FJTiAgICAgIDogVGhlIG9wZXJhdGlvbiB3b3VsZCBoYXZlIGJsb2NrZWQgYnV0IEBub193YWl0IHdhcyBub24temVyby4KICAqIC1FUkVTVEFSVFNZUyA6IEEgc2lnbmFsIGludGVycnVwdGVkIHRoZSB3YWl0IG9wZXJhdGlvbi4KICAqCiAgKiBJZiBAbm9fd2FpdCBpcyB6ZXJvLCB0aGUgZnVuY3Rpb24gbWlnaHQgc2xlZXAgdW50aWwgdGhlIGV2ZW50ZmQgaW50ZXJuYWwKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggY2M4YTliNy4uNGEwOWFmOSAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTYzLDYgKzYzLDEzIEBACiAgKiBjbGVhbnVwIHBhdGggYW5kIGl0IGlzIGFsc28gYWNxdWlyZWQgYnkgZXZlbnRwb2xsX3JlbGVhc2VfZmlsZSgpCiAgKiBpZiBhIGZpbGUgaGFzIGJlZW4gcHVzaGVkIGluc2lkZSBhbiBlcG9sbCBzZXQgYW5kIGl0IGlzIHRoZW4KICAqIGNsb3NlKClkIHdpdGhvdXQgYSBwcmV2aW91cyBjYWxsIHRvZXBvbGxfY3RsKEVQT0xMX0NUTF9ERUwpLgorICogSXQgaXMgYWxzbyBhY3F1aXJlZCB3aGVuIGluc2VydGluZyBhbiBlcG9sbCBmZCBvbnRvIGFub3RoZXIgZXBvbGwKKyAqIGZkLiBXZSBkbyB0aGlzIHNvIHRoYXQgd2Ugd2FsayB0aGUgZXBvbGwgdHJlZSBhbmQgZW5zdXJlIHRoYXQgdGhpcworICogaW5zZXJ0aW9uIGRvZXMgbm90IGNyZWF0ZSBhIGN5Y2xlIG9mIGVwb2xsIGZpbGUgZGVzY3JpcHRvcnMsIHdoaWNoCisgKiBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrLiBXZSBuZWVkIGEgZ2xvYmFsIG11dGV4IHRvIHByZXZlbnQgdHdvCisgKiBzaW11bHRhbmVvdXMgaW5zZXJ0cyAoQSBpbnRvIEIgYW5kIEIgaW50byBBKSBmcm9tIHJhY2luZyBhbmQKKyAqIGNvbnN0cnVjdGluZyBhIGN5Y2xlIHdpdGhvdXQgZWl0aGVyIGluc2VydCBvYnNlcnZpbmcgdGhhdCBpdCBpcworICogZ29pbmcgdG8uCiAgKiBJdCBpcyBwb3NzaWJsZSB0byBkcm9wIHRoZSAiZXAtPm10eCIgYW5kIHRvIHVzZSB0aGUgZ2xvYmFsCiAgKiBtdXRleCAiZXBtdXRleCIgKHRvZ2V0aGVyIHdpdGggImVwLT5sb2NrIikgdG8gaGF2ZSBpdCB3b3JraW5nLAogICogYnV0IGhhdmluZyAiZXAtPm10eCIgd2lsbCBtYWtlIHRoZSBpbnRlcmZhY2UgbW9yZSBzY2FsYWJsZS4KQEAgLTIyNCw2ICsyMzEsOSBAQAogICovCiBzdGF0aWMgREVGSU5FX01VVEVYKGVwbXV0ZXgpOwogCisvKiBVc2VkIHRvIGNoZWNrIGZvciBlcG9sbCBmaWxlIGRlc2NyaXB0b3IgaW5jbHVzaW9uIGxvb3BzICovCitzdGF0aWMgc3RydWN0IG5lc3RlZF9jYWxscyBwb2xsX2xvb3BfbmNhbGxzOworCiAvKiBVc2VkIGZvciBzYWZlIHdha2UgdXAgaW1wbGVtZW50YXRpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgbmVzdGVkX2NhbGxzIHBvbGxfc2FmZXdha2VfbmNhbGxzOwogCkBAIC0xMTE0LDYgKzExMjQsMTcgQEAKIAlyZXR1cm4gZXBfc2Nhbl9yZWFkeV9saXN0KGVwLCBlcF9zZW5kX2V2ZW50c19wcm9jLCAmZXNlZCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbWVzcGVjIGVwX3NldF9tc3RpbWVvdXQobG9uZyBtcykKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgbm93LCB0cyA9IHsKKwkJLnR2X3NlYyA9IG1zIC8gTVNFQ19QRVJfU0VDLAorCQkudHZfbnNlYyA9IE5TRUNfUEVSX01TRUMgKiAobXMgJSBNU0VDX1BFUl9TRUMpLAorCX07CisKKwlrdGltZV9nZXRfdHMoJm5vdyk7CisJcmV0dXJuIHRpbWVzcGVjX2FkZF9zYWZlKG5vdywgdHMpOworfQorCiBzdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cywKIAkJICAgaW50IG1heGV2ZW50cywgbG9uZyB0aW1lb3V0KQogewpAQCAtMTEyMSwxMiArMTE0MiwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9uZyBzbGFjazsKIAl3YWl0X3F1ZXVlX3Qgd2FpdDsKLQlzdHJ1Y3QgdGltZXNwZWMgZW5kX3RpbWU7CiAJa3RpbWVfdCBleHBpcmVzLCAqdG8gPSBOVUxMOwogCiAJaWYgKHRpbWVvdXQgPiAwKSB7Ci0JCWt0aW1lX2dldF90cygmZW5kX3RpbWUpOwotCQl0aW1lc3BlY19hZGRfbnMoJmVuZF90aW1lLCAodTY0KXRpbWVvdXQgKiBOU0VDX1BFUl9NU0VDKTsKKwkJc3RydWN0IHRpbWVzcGVjIGVuZF90aW1lID0gZXBfc2V0X21zdGltZW91dCh0aW1lb3V0KTsKKwogCQlzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSgmZW5kX3RpbWUpOwogCQl0byA9ICZleHBpcmVzOwogCQkqdG8gPSB0aW1lc3BlY190b19rdGltZShlbmRfdGltZSk7CkBAIC0xMTg4LDYgKzEyMDgsNjIgQEAKIAlyZXR1cm4gcmVzOwogfQogCisvKioKKyAqIGVwX2xvb3BfY2hlY2tfcHJvYyAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIHBhc3NlZCB0byB0aGUgQGVwX2NhbGxfbmVzdGVkKCkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFQSSwgdG8gdmVyaWZ5IHRoYXQgYWRkaW5nIGFuIGVwb2xsIGZpbGUgaW5zaWRlIGFub3RoZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIGVwb2xsIHN0cnVjdHVyZSwgZG9lcyBub3QgdmlvbGF0ZSB0aGUgY29uc3RyYWludHMsIGluCisgKiAgICAgICAgICAgICAgICAgICAgICB0ZXJtcyBvZiBjbG9zZWQgbG9vcHMsIG9yIHRvbyBkZWVwIGNoYWlucyAod2hpY2ggY2FuCisgKiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgaW4gZXhjZXNzaXZlIHN0YWNrIHVzYWdlKS4KKyAqCisgKiBAcHJpdjogUG9pbnRlciB0byB0aGUgZXBvbGwgZmlsZSB0byBiZSBjdXJyZW50bHkgY2hlY2tlZC4KKyAqIEBjb29raWU6IE9yaWdpbmFsIGNvb2tpZSBmb3IgdGhpcyBjYWxsLiBUaGlzIGlzIHRoZSB0b3Atb2YtdGhlLWNoYWluIGVwb2xsCisgKiAgICAgICAgICBkYXRhIHN0cnVjdHVyZSBwb2ludGVyLgorICogQGNhbGxfbmVzdHM6IEN1cnJlbnQgZGVwdCBvZiB0aGUgQGVwX2NhbGxfbmVzdGVkKCkgY2FsbCBzdGFjay4KKyAqCisgKiBSZXR1cm5zOiBSZXR1cm5zIHplcm8gaWYgYWRkaW5nIHRoZSBlcG9sbCBAZmlsZSBpbnNpZGUgY3VycmVudCBlcG9sbAorICogICAgICAgICAgc3RydWN0dXJlIEBlcCBkb2VzIG5vdCB2aW9sYXRlIHRoZSBjb25zdHJhaW50cywgb3IgLTEgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGVwX2xvb3BfY2hlY2tfcHJvYyh2b2lkICpwcml2LCB2b2lkICpjb29raWUsIGludCBjYWxsX25lc3RzKQoreworCWludCBlcnJvciA9IDA7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBwcml2OworCXN0cnVjdCBldmVudHBvbGwgKmVwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCByYl9ub2RlICpyYnA7CisJc3RydWN0IGVwaXRlbSAqZXBpOworCisJbXV0ZXhfbG9jaygmZXAtPm10eCk7CisJZm9yIChyYnAgPSByYl9maXJzdCgmZXAtPnJicik7IHJicDsgcmJwID0gcmJfbmV4dChyYnApKSB7CisJCWVwaSA9IHJiX2VudHJ5KHJicCwgc3RydWN0IGVwaXRlbSwgcmJuKTsKKwkJaWYgKHVubGlrZWx5KGlzX2ZpbGVfZXBvbGwoZXBpLT5mZmQuZmlsZSkpKSB7CisJCQllcnJvciA9IGVwX2NhbGxfbmVzdGVkKCZwb2xsX2xvb3BfbmNhbGxzLCBFUF9NQVhfTkVTVFMsCisJCQkJCSAgICAgICBlcF9sb29wX2NoZWNrX3Byb2MsIGVwaS0+ZmZkLmZpbGUsCisJCQkJCSAgICAgICBlcGktPmZmZC5maWxlLT5wcml2YXRlX2RhdGEsIGN1cnJlbnQpOworCQkJaWYgKGVycm9yICE9IDApCisJCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZlcC0+bXR4KTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBlcF9sb29wX2NoZWNrIC0gUGVyZm9ybXMgYSBjaGVjayB0byB2ZXJpZnkgdGhhdCBhZGRpbmcgYW4gZXBvbGwgZmlsZSAoQGZpbGUpCisgKiAgICAgICAgICAgICAgICAgYW5vdGhlciBlcG9sbCBmaWxlIChyZXByZXNlbnRlZCBieSBAZXApIGRvZXMgbm90IGNyZWF0ZQorICogICAgICAgICAgICAgICAgIGNsb3NlZCBsb29wcyBvciB0b28gZGVlcCBjaGFpbnMuCisgKgorICogQGVwOiBQb2ludGVyIHRvIHRoZSBlcG9sbCBwcml2YXRlIGRhdGEgc3RydWN0dXJlLgorICogQGZpbGU6IFBvaW50ZXIgdG8gdGhlIGVwb2xsIGZpbGUgdG8gYmUgY2hlY2tlZC4KKyAqCisgKiBSZXR1cm5zOiBSZXR1cm5zIHplcm8gaWYgYWRkaW5nIHRoZSBlcG9sbCBAZmlsZSBpbnNpZGUgY3VycmVudCBlcG9sbAorICogICAgICAgICAgc3RydWN0dXJlIEBlcCBkb2VzIG5vdCB2aW9sYXRlIHRoZSBjb25zdHJhaW50cywgb3IgLTEgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGVwX2xvb3BfY2hlY2soc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBlcF9jYWxsX25lc3RlZCgmcG9sbF9sb29wX25jYWxscywgRVBfTUFYX05FU1RTLAorCQkJICAgICAgZXBfbG9vcF9jaGVja19wcm9jLCBmaWxlLCBlcCwgY3VycmVudCk7Cit9CisKIC8qCiAgKiBPcGVuIGFuIGV2ZW50cG9sbCBmaWxlIGRlc2NyaXB0b3IuCiAgKi8KQEAgLTEyMzYsNiArMTMxMiw3IEBACiAJCXN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnQpCiB7CiAJaW50IGVycm9yOworCWludCBkaWRfbG9ja19lcG11dGV4ID0gMDsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSwgKnRmaWxlOwogCXN0cnVjdCBldmVudHBvbGwgKmVwOwogCXN0cnVjdCBlcGl0ZW0gKmVwaTsKQEAgLTEyNzcsNiArMTM1NCwyNSBAQAogCSAqLwogCWVwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCisJLyoKKwkgKiBXaGVuIHdlIGluc2VydCBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IsIGluc2lkZSBhbm90aGVyIGVwb2xsIGZpbGUKKwkgKiBkZXNjcmlwdG9yLCB0aGVyZSBpcyB0aGUgY2hhbmdlIG9mIGNyZWF0aW5nIGNsb3NlZCBsb29wcywgd2hpY2ggYXJlCisJICogYmV0dGVyIGJlIGhhbmRsZWQgaGVyZSwgdGhhbiBpbiBtb3JlIGNyaXRpY2FsIHBhdGhzLgorCSAqCisJICogV2UgaG9sZCBlcG11dGV4IGFjcm9zcyB0aGUgbG9vcCBjaGVjayBhbmQgdGhlIGluc2VydCBpbiB0aGlzIGNhc2UsIGluCisJICogb3JkZXIgdG8gcHJldmVudCB0d28gc2VwYXJhdGUgaW5zZXJ0cyBmcm9tIHJhY2luZyBhbmQgZWFjaCBkb2luZyB0aGUKKwkgKiBpbnNlcnQgImF0IHRoZSBzYW1lIHRpbWUiIHN1Y2ggdGhhdCBlcF9sb29wX2NoZWNrIHBhc3NlcyBvbiBib3RoCisJICogYmVmb3JlIGVpdGhlciBvbmUgZG9lcyB0aGUgaW5zZXJ0LCB0aGVyZWJ5IGNyZWF0aW5nIGEgY3ljbGUuCisJICovCisJaWYgKHVubGlrZWx5KGlzX2ZpbGVfZXBvbGwodGZpbGUpICYmIG9wID09IEVQT0xMX0NUTF9BREQpKSB7CisJCW11dGV4X2xvY2soJmVwbXV0ZXgpOworCQlkaWRfbG9ja19lcG11dGV4ID0gMTsKKwkJZXJyb3IgPSAtRUxPT1A7CisJCWlmIChlcF9sb29wX2NoZWNrKGVwLCB0ZmlsZSkgIT0gMCkKKwkJCWdvdG8gZXJyb3JfdGd0X2ZwdXQ7CisJfQorCisKIAltdXRleF9sb2NrKCZlcC0+bXR4KTsKIAogCS8qCkBAIC0xMzEyLDYgKzE0MDgsOSBAQAogCW11dGV4X3VubG9jaygmZXAtPm10eCk7CiAKIGVycm9yX3RndF9mcHV0OgorCWlmICh1bmxpa2VseShkaWRfbG9ja19lcG11dGV4KSkKKwkJbXV0ZXhfdW5sb2NrKCZlcG11dGV4KTsKKwogCWZwdXQodGZpbGUpOwogZXJyb3JfZnB1dDoKIAlmcHV0KGZpbGUpOwpAQCAtMTQzMSw2ICsxNTMwLDEyIEBACiAJCUVQX0lURU1fQ09TVDsKIAlCVUdfT04obWF4X3VzZXJfd2F0Y2hlcyA8IDApOwogCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmUgdXNlZCB0byBwZXJmb3JtIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgorCSAqIGluY2x1c2lvbiBsb29wcyBjaGVja3MuCisJICovCisJZXBfbmVzdGVkX2NhbGxzX2luaXQoJnBvbGxfbG9vcF9uY2FsbHMpOworCiAJLyogSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlIHVzZWQgdG8gcGVyZm9ybSBzYWZlIHBvbGwgd2FpdCBoZWFkIHdha2UgdXBzICovCiAJZXBfbmVzdGVkX2NhbGxzX2luaXQoJnBvbGxfc2FmZXdha2VfbmNhbGxzKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGM2MmVmY2IuLjUyYTQ0N2QgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCQlnb3RvIG91dDsKIAogCWZpbGUgPSBkb19maWxwX29wZW4oQVRfRkRDV0QsIHRtcCwKLQkJCQlPX0xBUkdFRklMRSB8IE9fUkRPTkxZIHwgRk1PREVfRVhFQywgMCwKKwkJCQlPX0xBUkdFRklMRSB8IE9fUkRPTkxZIHwgX19GTU9ERV9FWEVDLCAwLAogCQkJCU1BWV9SRUFEIHwgTUFZX0VYRUMgfCBNQVlfT1BFTik7CiAJcHV0bmFtZSh0bXApOwogCWVycm9yID0gUFRSX0VSUihmaWxlKTsKQEAgLTcyMyw3ICs3MjMsNyBAQAogCWludCBlcnI7CiAKIAlmaWxlID0gZG9fZmlscF9vcGVuKEFUX0ZEQ1dELCBuYW1lLAotCQkJCU9fTEFSR0VGSUxFIHwgT19SRE9OTFkgfCBGTU9ERV9FWEVDLCAwLAorCQkJCU9fTEFSR0VGSUxFIHwgT19SRE9OTFkgfCBfX0ZNT0RFX0VYRUMsIDAsCiAJCQkJTUFZX0VYRUMgfCBNQVlfT1BFTik7CiAJaWYgKElTX0VSUihmaWxlKSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9leG9mcy9pbm9kZS5jIGIvZnMvZXhvZnMvaW5vZGUuYwppbmRleCA0MjY4NTQyLi5hNzU1NTIzIDEwMDY0NAotLS0gYS9mcy9leG9mcy9pbm9kZS5jCisrKyBiL2ZzL2V4b2ZzL2lub2RlLmMKQEAgLTEwMzAsNyArMTAzMCw2IEBACiAJCW1lbWNweShvaS0+aV9kYXRhLCBmY2IuaV9kYXRhLCBzaXplb2YoZmNiLmlfZGF0YSkpOwogCX0KIAotCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSBzYi0+c19iZGk7CiAJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKIAkJaW5vZGUtPmlfb3AgPSAmZXhvZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZS0+aV9mb3AgPSAmZXhvZnNfZmlsZV9vcGVyYXRpb25zOwpAQCAtMTEzMSw3ICsxMTMwLDYgQEAKIAogCXNiaSA9IHNiLT5zX2ZzX2luZm87CiAKLQlpbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gc2ItPnNfYmRpOwogCXNiLT5zX2RpcnQgPSAxOwogCWlub2RlX2luaXRfb3duZXIoaW5vZGUsIGRpciwgbW9kZSk7CiAJaW5vZGUtPmlfaW5vID0gc2JpLT5zX25leHRpZCsrOwpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvbmFtZWkuYyBiL2ZzL2V4b2ZzL25hbWVpLmMKaW5kZXggMjY0ZTk1ZC4uNGQ3MGRiMSAxMDA2NDQKLS0tIGEvZnMvZXhvZnMvbmFtZWkuYworKysgYi9mcy9leG9mcy9uYW1laS5jCkBAIC0yNzIsNyArMjcyLDYgQEAKIAkJbmV3X2RlID0gZXhvZnNfZmluZF9lbnRyeShuZXdfZGlyLCBuZXdfZGVudHJ5LCAmbmV3X3BhZ2UpOwogCQlpZiAoIW5ld19kZSkKIAkJCWdvdG8gb3V0X2RpcjsKLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJZXJyID0gZXhvZnNfc2V0X2xpbmsobmV3X2RpciwgbmV3X2RlLCBuZXdfcGFnZSwgb2xkX2lub2RlKTsKIAkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCQlpZiAoZGlyX2RlKQpAQCAtMjg2LDEyICsyODUsOSBAQAogCQkJaWYgKG5ld19kaXItPmlfbmxpbmsgPj0gRVhPRlNfTElOS19NQVgpCiAJCQkJZ290byBvdXRfZGlyOwogCQl9Ci0JCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCWVyciA9IGV4b2ZzX2FkZF9saW5rKG5ld19kZW50cnksIG9sZF9pbm9kZSk7Ci0JCWlmIChlcnIpIHsKLQkJCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCX0KIAkJaWYgKGRpcl9kZSkKIAkJCWlub2RlX2luY19saW5rX2NvdW50KG5ld19kaXIpOwogCX0KQEAgLTI5OSw3ICsyOTUsNyBAQAogCW9sZF9pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAogCWV4b2ZzX2RlbGV0ZV9lbnRyeShvbGRfZGUsIG9sZF9wYWdlKTsKLQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOworCW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKIAogCWlmIChkaXJfZGUpIHsKIAkJZXJyID0gZXhvZnNfc2V0X2xpbmsob2xkX2lub2RlLCBkaXJfZGUsIGRpcl9wYWdlLCBuZXdfZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvbmFtZWkuYyBiL2ZzL2V4dDIvbmFtZWkuYwppbmRleCAyZTFkODM0Li5hZGI5MTg1IDEwMDY0NAotLS0gYS9mcy9leHQyL25hbWVpLmMKKysrIGIvZnMvZXh0Mi9uYW1laS5jCkBAIC0zNDQsNyArMzQ0LDYgQEAKIAkJbmV3X2RlID0gZXh0Ml9maW5kX2VudHJ5IChuZXdfZGlyLCAmbmV3X2RlbnRyeS0+ZF9uYW1lLCAmbmV3X3BhZ2UpOwogCQlpZiAoIW5ld19kZSkKIAkJCWdvdG8gb3V0X2RpcjsKLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJZXh0Ml9zZXRfbGluayhuZXdfZGlyLCBuZXdfZGUsIG5ld19wYWdlLCBvbGRfaW5vZGUsIDEpOwogCQluZXdfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCQlpZiAoZGlyX2RlKQpAQCAtMzU2LDEyICszNTUsOSBAQAogCQkJaWYgKG5ld19kaXItPmlfbmxpbmsgPj0gRVhUMl9MSU5LX01BWCkKIAkJCQlnb3RvIG91dF9kaXI7CiAJCX0KLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJZXJyID0gZXh0Ml9hZGRfbGluayhuZXdfZGVudHJ5LCBvbGRfaW5vZGUpOwotCQlpZiAoZXJyKSB7Ci0JCQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOworCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZGlyOwotCQl9CiAJCWlmIChkaXJfZGUpCiAJCQlpbm9kZV9pbmNfbGlua19jb3VudChuZXdfZGlyKTsKIAl9CkBAIC0zNjksMTIgKzM2NSwxMSBAQAogCS8qCiAJICogTGlrZSBtb3N0IG90aGVyIFVuaXggc3lzdGVtcywgc2V0IHRoZSBjdGltZSBmb3IgaW5vZGVzIG9uIGEKICAJICogcmVuYW1lLgotCSAqIGlub2RlX2RlY19saW5rX2NvdW50KCkgd2lsbCBtYXJrIHRoZSBpbm9kZSBkaXJ0eS4KIAkgKi8KIAlvbGRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOworCW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKIAogCWV4dDJfZGVsZXRlX2VudHJ5IChvbGRfZGUsIG9sZF9wYWdlKTsKLQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCiAJaWYgKGRpcl9kZSkgewogCQlpZiAob2xkX2RpciAhPSBuZXdfZGlyKQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCAwYzhkOTdiLi4zYWEwYjcyIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAorKysgYi9mcy9leHQ0L2V4dDQuaApAQCAtODQ4LDYgKzg0OCw3IEBACiAJYXRvbWljX3QgaV9pb2VuZF9jb3VudDsJLyogTnVtYmVyIG9mIG91dHN0YW5kaW5nIGlvX2VuZCBzdHJ1Y3RzICovCiAJLyogY3VycmVudCBpb19lbmQgc3RydWN0dXJlIGZvciBhc3luYyBESU8gd3JpdGUqLwogCWV4dDRfaW9fZW5kX3QgKmN1cl9haW9fZGlvOworCWF0b21pY190IGlfYWlvZGlvX3Vud3JpdHRlbjsgLyogTnIuIG9mIGluZmxpZ2h0IGNvbnZlcnNpb25zIHBlbmRpbmcgKi8KIAogCXNwaW5sb2NrX3QgaV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrOwogCkBAIC0yMTE5LDYgKzIxMjAsMTUgQEAKIAogI2RlZmluZSBpbl9yYW5nZShiLCBmaXJzdCwgbGVuKQkoKGIpID49IChmaXJzdCkgJiYgKGIpIDw9IChmaXJzdCkgKyAobGVuKSAtIDEpCiAKKy8qIEZvciBpb2VuZCAmIGFpbyB1bndyaXR0ZW4gY29udmVyc2lvbiB3YWl0IHF1ZXVlcyAqLworI2RlZmluZSBFWFQ0X1dRX0hBU0hfU1oJCTM3CisjZGVmaW5lIGV4dDRfaW9lbmRfd3EodikgICAoJmV4dDRfX2lvZW5kX3dxWygodW5zaWduZWQgbG9uZykodikpICVcCisJCQkJCSAgICBFWFQ0X1dRX0hBU0hfU1pdKQorI2RlZmluZSBleHQ0X2Fpb19tdXRleCh2KSAgKCZleHQ0X19haW9fbXV0ZXhbKCh1bnNpZ25lZCBsb25nKSh2KSkgJVwKKwkJCQkJICAgICBFWFQ0X1dRX0hBU0hfU1pdKQorZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGV4dDRfX2lvZW5kX3dxW0VYVDRfV1FfSEFTSF9TWl07CitleHRlcm4gc3RydWN0IG11dGV4IGV4dDRfX2Fpb19tdXRleFtFWFQ0X1dRX0hBU0hfU1pdOworCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX0VYVDRfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCA2M2E3NTgxLi5jY2NlOGE3IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYworKysgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtMzE3NCw5ICszMTc0LDEwIEBACiAJCSAqIHRoYXQgdGhpcyBJTyBuZWVkcyB0byBjb252ZXJ0aW9uIHRvIHdyaXR0ZW4gd2hlbiBJTyBpcwogCQkgKiBjb21wbGV0ZWQKIAkJICovCi0JCWlmIChpbykKKwkJaWYgKGlvICYmICEoaW8tPmZsYWcgJiBFWFQ0X0lPX0VORF9VTldSSVRURU4pKSB7CiAJCQlpby0+ZmxhZyA9IEVYVDRfSU9fRU5EX1VOV1JJVFRFTjsKLQkJZWxzZQorCQkJYXRvbWljX2luYygmRVhUNF9JKGlub2RlKS0+aV9haW9kaW9fdW53cml0dGVuKTsKKwkJfSBlbHNlCiAJCQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOKTsKIAkJaWYgKGV4dDRfc2hvdWxkX2Rpb3JlYWRfbm9sb2NrKGlub2RlKSkKIAkJCW1hcC0+bV9mbGFncyB8PSBFWFQ0X01BUF9VTklOSVQ7CkBAIC0zNDYzLDkgKzM0NjQsMTAgQEAKIAkJICogdGhhdCB3ZSBuZWVkIHRvIHBlcmZvcm0gY29udmVydGlvbiB3aGVuIElPIGlzIGRvbmUuCiAJCSAqLwogCQlpZiAoKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX1BSRV9JTykpIHsKLQkJCWlmIChpbykKKwkJCWlmIChpbyAmJiAhKGlvLT5mbGFnICYgRVhUNF9JT19FTkRfVU5XUklUVEVOKSkgewogCQkJCWlvLT5mbGFnID0gRVhUNF9JT19FTkRfVU5XUklUVEVOOwotCQkJZWxzZQorCQkJCWF0b21pY19pbmMoJkVYVDRfSShpbm9kZSktPmlfYWlvZGlvX3Vud3JpdHRlbik7CisJCQl9IGVsc2UKIAkJCQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwKIAkJCQkJCSAgICAgRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuYwppbmRleCAyZTgzMjJjLi43YjgwZDU0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZpbGUuYworKysgYi9mcy9leHQ0L2ZpbGUuYwpAQCAtNTUsMTEgKzU1LDQ3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGV4dDRfYWlvZGlvX3dhaXQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3EgPSBleHQ0X2lvZW5kX3dxKGlub2RlKTsKKworCXdhaXRfZXZlbnQoKndxLCAoYXRvbWljX3JlYWQoJkVYVDRfSShpbm9kZSktPmlfYWlvZGlvX3Vud3JpdHRlbikgPT0gMCkpOworfQorCisvKgorICogVGhpcyB0ZXN0cyB3aGV0aGVyIHRoZSBJTyBpbiBxdWVzdGlvbiBpcyBibG9jay1hbGlnbmVkIG9yIG5vdC4KKyAqIEV4dDQgdXRpbGl6ZXMgdW53cml0dGVuIGV4dGVudHMgd2hlbiBob2xlLWZpbGxpbmcgZHVyaW5nIGRpcmVjdCBJTywgYW5kIHRoZXkKKyAqIGFyZSBjb252ZXJ0ZWQgdG8gd3JpdHRlbiBvbmx5IGFmdGVyIHRoZSBJTyBpcyBjb21wbGV0ZS4gIFVudGlsIHRoZXkgYXJlCisgKiBtYXBwZWQsIHRoZXNlIGJsb2NrcyBhcHBlYXIgYXMgaG9sZXMsIHNvIGRpb196ZXJvX2Jsb2NrKCkgd2lsbCBhc3N1bWUgdGhhdAorICogaXQgbmVlZHMgdG8gemVybyBvdXQgcG9ydGlvbnMgb2YgdGhlIHN0YXJ0IGFuZC9vciBlbmQgYmxvY2suICBJZiAyIEFJTworICogdGhyZWFkcyBhcmUgYXQgd29yayBvbiB0aGUgc2FtZSB1bndyaXR0ZW4gYmxvY2ssIHRoZXkgbXVzdCBiZSBzeW5jaHJvbml6ZWQKKyAqIG9yIG9uZSB0aHJlYWQgd2lsbCB6ZXJvIHRoZSBvdGhlcidzIGRhdGEsIGNhdXNpbmcgY29ycnVwdGlvbi4KKyAqLworc3RhdGljIGludAorZXh0NF91bmFsaWduZWRfYWlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCWludCBibG9ja21hc2sgPSBzYi0+c19ibG9ja3NpemUgLSAxOworCXNpemVfdCBjb3VudCA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKKwlsb2ZmX3QgZmluYWxfc2l6ZSA9IHBvcyArIGNvdW50OworCisJaWYgKHBvcyA+PSBpbm9kZS0+aV9zaXplKQorCQlyZXR1cm4gMDsKKworCWlmICgocG9zICYgYmxvY2ttYXNrKSB8fCAoZmluYWxfc2l6ZSAmIGJsb2NrbWFzaykpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzc2l6ZV90CiBleHQ0X2ZpbGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLT5raV9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCWludCB1bmFsaWduZWRfYWlvID0gMDsKKwlpbnQgcmV0OwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIGVuY291bnRlcmVkIGEgYml0bWFwLWZvcm1hdCBmaWxlLCB0aGUgc2l6ZSBsaW1pdApAQCAtNzgsOSArMTE0LDMxIEBACiAJCQlucl9zZWdzID0gaW92X3Nob3J0ZW4oKHN0cnVjdCBpb3ZlYyAqKWlvdiwgbnJfc2VncywKIAkJCQkJICAgICAgc2JpLT5zX2JpdG1hcF9tYXhieXRlcyAtIHBvcyk7CiAJCX0KKwl9IGVsc2UgaWYgKHVubGlrZWx5KChpb2NiLT5raV9maWxwLT5mX2ZsYWdzICYgT19ESVJFQ1QpICYmCisJCSAgICFpc19zeW5jX2tpb2NiKGlvY2IpKSkgeworCQl1bmFsaWduZWRfYWlvID0gZXh0NF91bmFsaWduZWRfYWlvKGlub2RlLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CiAJfQogCi0JcmV0dXJuIGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOworCS8qIFVuYWxpZ25lZCBkaXJlY3QgQUlPIG11c3QgYmUgc2VyaWFsaXplZDsgc2VlIGNvbW1lbnQgYWJvdmUgKi8KKwlpZiAodW5hbGlnbmVkX2FpbykgeworCQlzdGF0aWMgdW5zaWduZWQgbG9uZyB1bmFsaWduZWRfd2Fybl90aW1lOworCisJCS8qIFdhcm4gYWJvdXQgdGhpcyBvbmNlIHBlciBkYXkgKi8KKwkJaWYgKHByaW50a190aW1lZF9yYXRlbGltaXQoJnVuYWxpZ25lZF93YXJuX3RpbWUsIDYwKjYwKjI0KkhaKSkKKwkJCWV4dDRfbXNnKGlub2RlLT5pX3NiLCBLRVJOX1dBUk5JTkcsCisJCQkJICJVbmFsaWduZWQgQUlPL0RJTyBvbiBpbm9kZSAlbGQgYnkgJXM7ICIKKwkJCQkgInBlcmZvcm1hbmNlIHdpbGwgYmUgcG9vci4iLAorCQkJCSBpbm9kZS0+aV9pbm8sIGN1cnJlbnQtPmNvbW0pOworCQltdXRleF9sb2NrKGV4dDRfYWlvX211dGV4KGlub2RlKSk7CisJCWV4dDRfYWlvZGlvX3dhaXQoaW5vZGUpOworCX0KKworCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOworCisJaWYgKHVuYWxpZ25lZF9haW8pCisJCW11dGV4X3VubG9jayhleHQ0X2Fpb19tdXRleChpbm9kZSkpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBleHQ0X2ZpbGVfdm1fb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCA4NTFmNDliLi5kMWZlMDlhIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYworKysgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtMzQyLDEwICszNDIsMTUgQEAKIC8qIFdlIGNyZWF0ZSBzbGFiIGNhY2hlcyBmb3IgZ3JvdXBpbmZvIGRhdGEgc3RydWN0dXJlcyBiYXNlZCBvbiB0aGUKICAqIHN1cGVyYmxvY2sgYmxvY2sgc2l6ZS4gIFRoZXJlIHdpbGwgYmUgb25lIHBlciBtb3VudGVkIGZpbGVzeXN0ZW0gZm9yCiAgKiBlYWNoIHVuaXF1ZSBzX2Jsb2Nrc2l6ZV9iaXRzICovCi0jZGVmaW5lIE5SX0dSUElORk9fQ0FDSEVTCVwKLQkoRVhUNF9NQVhfQkxPQ0tfTE9HX1NJWkUgLSBFWFQ0X01JTl9CTE9DS19MT0dfU0laRSArIDEpCisjZGVmaW5lIE5SX0dSUElORk9fQ0FDSEVTIDgKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZXh0NF9ncm91cGluZm9fY2FjaGVzW05SX0dSUElORk9fQ0FDSEVTXTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKmV4dDRfZ3JvdXBpbmZvX3NsYWJfbmFtZXNbTlJfR1JQSU5GT19DQUNIRVNdID0geworCSJleHQ0X2dyb3VwaW5mb18xayIsICJleHQ0X2dyb3VwaW5mb18yayIsICJleHQ0X2dyb3VwaW5mb180ayIsCisJImV4dDRfZ3JvdXBpbmZvXzhrIiwgImV4dDRfZ3JvdXBpbmZvXzE2ayIsICJleHQ0X2dyb3VwaW5mb18zMmsiLAorCSJleHQ0X2dyb3VwaW5mb182NGsiLCAiZXh0NF9ncm91cGluZm9fMTI4ayIKK307CisKIHN0YXRpYyB2b2lkIGV4dDRfbWJfZ2VuZXJhdGVfZnJvbV9wYShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpiaXRtYXAsCiAJCQkJCWV4dDRfZ3JvdXBfdCBncm91cCk7CiBzdGF0aWMgdm9pZCBleHQ0X21iX2dlbmVyYXRlX2Zyb21fZnJlZWxpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqYml0bWFwLApAQCAtMjQxNCw2ICsyNDE5LDU1IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK3N0YXRpYyB2b2lkIGV4dDRfZ3JvdXBpbmZvX2Rlc3Ryb3lfc2xhYnModm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9HUlBJTkZPX0NBQ0hFUzsgaSsrKSB7CisJCWlmIChleHQ0X2dyb3VwaW5mb19jYWNoZXNbaV0pCisJCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9ncm91cGluZm9fY2FjaGVzW2ldKTsKKwkJZXh0NF9ncm91cGluZm9fY2FjaGVzW2ldID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZXh0NF9ncm91cGluZm9fY3JlYXRlX3NsYWIoc2l6ZV90IHNpemUpCit7CisJc3RhdGljIERFRklORV9NVVRFWChleHQ0X2dycGluZm9fc2xhYl9jcmVhdGVfbXV0ZXgpOworCWludCBzbGFiX3NpemU7CisJaW50IGJsb2Nrc2l6ZV9iaXRzID0gb3JkZXJfYmFzZV8yKHNpemUpOworCWludCBjYWNoZV9pbmRleCA9IGJsb2Nrc2l6ZV9iaXRzIC0gRVhUNF9NSU5fQkxPQ0tfTE9HX1NJWkU7CisJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcDsKKworCWlmIChjYWNoZV9pbmRleCA+PSBOUl9HUlBJTkZPX0NBQ0hFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodW5saWtlbHkoY2FjaGVfaW5kZXggPCAwKSkKKwkJY2FjaGVfaW5kZXggPSAwOworCisJbXV0ZXhfbG9jaygmZXh0NF9ncnBpbmZvX3NsYWJfY3JlYXRlX211dGV4KTsKKwlpZiAoZXh0NF9ncm91cGluZm9fY2FjaGVzW2NhY2hlX2luZGV4XSkgeworCQltdXRleF91bmxvY2soJmV4dDRfZ3JwaW5mb19zbGFiX2NyZWF0ZV9tdXRleCk7CisJCXJldHVybiAwOwkvKiBBbHJlYWR5IGNyZWF0ZWQgKi8KKwl9CisKKwlzbGFiX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvLAorCQkJCWJiX2NvdW50ZXJzW2Jsb2Nrc2l6ZV9iaXRzICsgMl0pOworCisJY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoZXh0NF9ncm91cGluZm9fc2xhYl9uYW1lc1tjYWNoZV9pbmRleF0sCisJCQkJCXNsYWJfc2l6ZSwgMCwgU0xBQl9SRUNMQUlNX0FDQ09VTlQsCisJCQkJCU5VTEwpOworCisJbXV0ZXhfdW5sb2NrKCZleHQ0X2dycGluZm9fc2xhYl9jcmVhdGVfbXV0ZXgpOworCWlmICghY2FjaGVwKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICJFWFQ0OiBubyBtZW1vcnkgZm9yIGdyb3VwaW5mbyBzbGFiIGNhY2hlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZXh0NF9ncm91cGluZm9fY2FjaGVzW2NhY2hlX2luZGV4XSA9IGNhY2hlcDsKKworCXJldHVybiAwOworfQorCiBpbnQgZXh0NF9tYl9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBuZWVkc19yZWNvdmVyeSkKIHsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKQEAgLTI0MjEsOSArMjQ3NSw2IEBACiAJdW5zaWduZWQgb2Zmc2V0OwogCXVuc2lnbmVkIG1heDsKIAlpbnQgcmV0OwotCWludCBjYWNoZV9pbmRleDsKLQlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOwotCWNoYXIgKm5hbWVwID0gTlVMTDsKIAogCWkgPSAoc2ItPnNfYmxvY2tzaXplX2JpdHMgKyAyKSAqIHNpemVvZigqc2JpLT5zX21iX29mZnNldHMpOwogCkBAIC0yNDQwLDMwICsyNDkxLDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JY2FjaGVfaW5kZXggPSBzYi0+c19ibG9ja3NpemVfYml0cyAtIEVYVDRfTUlOX0JMT0NLX0xPR19TSVpFOwotCWNhY2hlcCA9IGV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tjYWNoZV9pbmRleF07Ci0JaWYgKCFjYWNoZXApIHsKLQkJY2hhciBuYW1lWzMyXTsKLQkJaW50IGxlbiA9IG9mZnNldG9mKHN0cnVjdCBleHQ0X2dyb3VwX2luZm8sCi0JCQkJCWJiX2NvdW50ZXJzW3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzICsgMl0pOwotCi0JCXNwcmludGYobmFtZSwgImV4dDRfZ3JvdXBpbmZvXyVkIiwgc2ItPnNfYmxvY2tzaXplX2JpdHMpOwotCQluYW1lcCA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmFtZXApIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIE5lZWQgdG8gZnJlZSB0aGUga21lbV9jYWNoZV9uYW1lKCkgd2hlbiB3ZQotCQkgKiBkZXN0cm95IHRoZSBzbGFiICovCi0JCWNhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKG5hbWVwLCBsZW4sIDAsCi0JCQkJCSAgICAgU0xBQl9SRUNMQUlNX0FDQ09VTlQsIE5VTEwpOwotCQlpZiAoIWNhY2hlcCkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tjYWNoZV9pbmRleF0gPSBjYWNoZXA7Ci0JfQorCXJldCA9IGV4dDRfZ3JvdXBpbmZvX2NyZWF0ZV9zbGFiKHNiLT5zX2Jsb2Nrc2l6ZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJLyogb3JkZXIgMCBpcyByZWd1bGFyIGJpdG1hcCAqLwogCXNiaS0+c19tYl9tYXhzWzBdID0gc2ItPnNfYmxvY2tzaXplIDw8IDM7CkBAIC0yNTIwLDcgKzI1NTAsNiBAQAogCWlmIChyZXQpIHsKIAkJa2ZyZWUoc2JpLT5zX21iX29mZnNldHMpOwogCQlrZnJlZShzYmktPnNfbWJfbWF4cyk7Ci0JCWtmcmVlKG5hbWVwKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI3MzQsNyArMjc2Myw2IEBACiAKIHZvaWQgZXh0NF9leGl0X21iYWxsb2Modm9pZCkKIHsKLQlpbnQgaTsKIAkvKgogCSAqIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgY2FsbF9yY3UoKSdzIG9uIGV4dDRfcHNwYWNlX2NhY2hlcAogCSAqIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBzbGFiIGNhY2hlLgpAQCAtMjc0MywxNSArMjc3MSw3IEBACiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfcHNwYWNlX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfYWNfY2FjaGVwKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9mcmVlX2V4dF9jYWNoZXApOwotCi0JZm9yIChpID0gMDsgaSA8IE5SX0dSUElORk9fQ0FDSEVTOyBpKyspIHsKLQkJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCA9IGV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tpXTsKLQkJaWYgKGNhY2hlcCkgewotCQkJY2hhciAqbmFtZSA9IChjaGFyICopa21lbV9jYWNoZV9uYW1lKGNhY2hlcCk7Ci0JCQlrbWVtX2NhY2hlX2Rlc3Ryb3koY2FjaGVwKTsKLQkJCWtmcmVlKG5hbWUpOwotCQl9Ci0JfQorCWV4dDRfZ3JvdXBpbmZvX2Rlc3Ryb3lfc2xhYnMoKTsKIAlleHQ0X3JlbW92ZV9kZWJ1Z2ZzX2VudHJ5KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcGFnZS1pby5jIGIvZnMvZXh0NC9wYWdlLWlvLmMKaW5kZXggNzI3MGRjZi4uOTU1Y2MzMCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9wYWdlLWlvLmMKKysrIGIvZnMvZXh0NC9wYWdlLWlvLmMKQEAgLTMyLDE0ICszMiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaW9fcGFnZV9jYWNoZXAsICppb19lbmRfY2FjaGVwOwogCi0jZGVmaW5lIFdRX0hBU0hfU1oJCTM3Ci0jZGVmaW5lIHRvX2lvZW5kX3dxKHYpCSgmaW9lbmRfd3FbKCh1bnNpZ25lZCBsb25nKXYpICUgV1FfSEFTSF9TWl0pCi1zdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgaW9lbmRfd3FbV1FfSEFTSF9TWl07Ci0KIGludCBfX2luaXQgZXh0NF9pbml0X3BhZ2Vpbyh2b2lkKQogewotCWludCBpOwotCiAJaW9fcGFnZV9jYWNoZXAgPSBLTUVNX0NBQ0hFKGV4dDRfaW9fcGFnZSwgU0xBQl9SRUNMQUlNX0FDQ09VTlQpOwogCWlmIChpb19wYWdlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ4LDkgKzQyLDYgQEAKIAkJa21lbV9jYWNoZV9kZXN0cm95KGlvX3BhZ2VfY2FjaGVwKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWZvciAoaSA9IDA7IGkgPCBXUV9IQVNIX1NaOyBpKyspCi0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlvZW5kX3dxW2ldKTsKLQogCXJldHVybiAwOwogfQogCkBAIC02Miw3ICs1Myw3IEBACiAKIHZvaWQgZXh0NF9pb2VuZF93YWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgKndxID0gdG9faW9lbmRfd3EoaW5vZGUpOworCXdhaXRfcXVldWVfaGVhZF90ICp3cSA9IGV4dDRfaW9lbmRfd3EoaW5vZGUpOwogCiAJd2FpdF9ldmVudCgqd3EsIChhdG9taWNfcmVhZCgmRVhUNF9JKGlub2RlKS0+aV9pb2VuZF9jb3VudCkgPT0gMCkpOwogfQpAQCAtODcsNyArNzgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBpby0+bnVtX2lvX3BhZ2VzOyBpKyspCiAJCXB1dF9pb19wYWdlKGlvLT5wYWdlc1tpXSk7CiAJaW8tPm51bV9pb19wYWdlcyA9IDA7Ci0Jd3EgPSB0b19pb2VuZF93cShpby0+aW5vZGUpOworCXdxID0gZXh0NF9pb2VuZF93cShpby0+aW5vZGUpOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZFWFQ0X0koaW8tPmlub2RlKS0+aV9pb2VuZF9jb3VudCkgJiYKIAkgICAgd2FpdHF1ZXVlX2FjdGl2ZSh3cSkpCiAJCXdha2VfdXBfYWxsKHdxKTsKQEAgLTEwMiw2ICs5Myw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGlvLT5pbm9kZTsKIAlsb2ZmX3Qgb2Zmc2V0ID0gaW8tPm9mZnNldDsKIAlzc2l6ZV90IHNpemUgPSBpby0+c2l6ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7CiAJaW50IHJldCA9IDA7CiAKIAlleHQ0X2RlYnVnKCJleHQ0X2VuZF9pb19ub2xvY2s6IGlvIDB4JXAgZnJvbSBpbm9kZSAlbHUsbGlzdC0+bmV4dCAweCVwLCIKQEAgLTEyNiw3ICsxMTgsMTYgQEAKIAlpZiAoaW8tPmlvY2IpCiAJCWFpb19jb21wbGV0ZShpby0+aW9jYiwgaW8tPnJlc3VsdCwgMCk7CiAJLyogY2xlYXIgdGhlIERJTyBBSU8gdW53cml0dGVuIGZsYWcgKi8KLQlpby0+ZmxhZyAmPSB+RVhUNF9JT19FTkRfVU5XUklUVEVOOworCWlmIChpby0+ZmxhZyAmIEVYVDRfSU9fRU5EX1VOV1JJVFRFTikgeworCQlpby0+ZmxhZyAmPSB+RVhUNF9JT19FTkRfVU5XUklUVEVOOworCQkvKiBXYWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHVud3JpdHRlbiBleHRlbnQgY29udmVyc2lvbiAqLworCQl3cSA9IGV4dDRfaW9lbmRfd3EoaW8tPmlub2RlKTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJkVYVDRfSShpbm9kZSktPmlfYWlvZGlvX3Vud3JpdHRlbikgJiYKKwkJICAgIHdhaXRxdWV1ZV9hY3RpdmUod3EpKSB7CisJCQl3YWtlX3VwX2FsbCh3cSk7CisJCX0KKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTAsNiArMTkxLDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CisJc2VjdG9yX3QgYmlfc2VjdG9yID0gYmlvLT5iaV9zZWN0b3I7CiAKIAlCVUdfT04oIWlvX2VuZCk7CiAJYmlvLT5iaV9wcml2YXRlID0gTlVMTDsKQEAgLTIwNyw5ICsyMDksNyBAQAogCQlpZiAoZXJyb3IpCiAJCQlTZXRQYWdlRXJyb3IocGFnZSk7CiAJCUJVR19PTighaGVhZCk7Ci0JCWlmIChoZWFkLT5iX3NpemUgPT0gUEFHRV9DQUNIRV9TSVpFKQotCQkJY2xlYXJfYnVmZmVyX2RpcnR5KGhlYWQpOwotCQllbHNlIHsKKwkJaWYgKGhlYWQtPmJfc2l6ZSAhPSBQQUdFX0NBQ0hFX1NJWkUpIHsKIAkJCWxvZmZfdCBvZmZzZXQ7CiAJCQlsb2ZmX3QgaW9fZW5kX29mZnNldCA9IGlvX2VuZC0+b2Zmc2V0ICsgaW9fZW5kLT5zaXplOwogCkBAIC0yMjEsNyArMjIxLDYgQEAKIAkJCQkJaWYgKGVycm9yKQogCQkJCQkJYnVmZmVyX2lvX2Vycm9yKGJoKTsKIAotCQkJCQljbGVhcl9idWZmZXJfZGlydHkoYmgpOwogCQkJCX0KIAkJCQlpZiAoYnVmZmVyX2RlbGF5KGJoKSkKIAkJCQkJcGFydGlhbF93cml0ZSA9IDE7CkBAIC0yNTcsNyArMjU2LDcgQEAKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW9fZW5kLT5vZmZzZXQsCiAJCQkgICAgIChsb25nKSBpb19lbmQtPnNpemUsCiAJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkgICAgIGJpby0+Ymlfc2VjdG9yID4+IChpbm9kZS0+aV9ibGtiaXRzIC0gOSkpOworCQkJICAgICBiaV9zZWN0b3IgPj4gKGlub2RlLT5pX2Jsa2JpdHMgLSA5KSk7CiAJfQogCiAJLyogQWRkIHRoZSBpb19lbmQgdG8gcGVyLWlub2RlIGNvbXBsZXRlZCBpbyBsaXN0Ki8KQEAgLTM4MCw2ICszNzksNyBAQAogCiAJYmxvY2tzaXplID0gMSA8PCBpbm9kZS0+aV9ibGtiaXRzOwogCisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAlCVUdfT04oUGFnZVdyaXRlYmFjayhwYWdlKSk7CiAJc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCUNsZWFyUGFnZUVycm9yKHBhZ2UpOwpAQCAtMzk3LDEyICszOTcsMTQgQEAKIAlmb3IgKGJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKSwgYmxvY2tfc3RhcnQgPSAwOwogCSAgICAgYmggIT0gaGVhZCB8fCAhYmxvY2tfc3RhcnQ7CiAJICAgICBibG9ja19zdGFydCA9IGJsb2NrX2VuZCwgYmggPSBiaC0+Yl90aGlzX3BhZ2UpIHsKKwogCQlibG9ja19lbmQgPSBibG9ja19zdGFydCArIGJsb2Nrc2l6ZTsKIAkJaWYgKGJsb2NrX3N0YXJ0ID49IGxlbikgewogCQkJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQkJY29udGludWU7CiAJCX0KKwkJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAkJcmV0ID0gaW9fc3VibWl0X2FkZF9iaChpbywgaW9fcGFnZSwgaW5vZGUsIHdiYywgYmgpOwogCQlpZiAocmV0KSB7CiAJCQkvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDQ4Y2U1NjEuLmY2YTMxOGYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTc3LDYgKzc3LDcgQEAKIAkJICAgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKTsKIHN0YXRpYyB2b2lkIGV4dDRfZGVzdHJveV9sYXp5aW5pdF90aHJlYWQodm9pZCk7CiBzdGF0aWMgdm9pZCBleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK3N0YXRpYyB2b2lkIGV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KHZvaWQpOwogCiAjaWYgIWRlZmluZWQoQ09ORklHX0VYVDNfRlMpICYmICFkZWZpbmVkKENPTkZJR19FWFQzX0ZTX01PRFVMRSkgJiYgZGVmaW5lZChDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzKQogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDNfZnNfdHlwZSA9IHsKQEAgLTgzMiw2ICs4MzMsNyBAQAogCWVpLT5pX3N5bmNfdGlkID0gMDsKIAllaS0+aV9kYXRhc3luY190aWQgPSAwOwogCWF0b21pY19zZXQoJmVpLT5pX2lvZW5kX2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZlaS0+aV9haW9kaW9fdW53cml0dGVuLCAwKTsKIAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KQEAgLTI3MTYsNiArMjcxOCw4IEBACiAJbXV0ZXhfdW5sb2NrKCZleHQ0X2xpX2luZm8tPmxpX2xpc3RfbXR4KTsKIH0KIAorc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZXh0NF9sYXp5aW5pdF90YXNrOworCiAvKgogICogVGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgZXh0NGxhenlpbml0IHRocmVhZCBsaXZlcy4gSXQgd2Fsa3MKICAqIHRocm91Z2ggdGhlIHJlcXVlc3QgbGlzdCBzZWFyY2hpbmcgZm9yIG5leHQgc2NoZWR1bGVkIGZpbGVzeXN0ZW0uCkBAIC0yNzg0LDYgKzI3ODgsMTAgQEAKIAkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG5leHRfd2FrZXVwKSkKIAkJCXNjaGVkdWxlKCk7CiAJCWZpbmlzaF93YWl0KCZlbGktPmxpX3dhaXRfZGFlbW9uLCAmd2FpdCk7CisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJCWV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KCk7CisJCQlnb3RvIGV4aXRfdGhyZWFkOworCQl9CiAJfQogCiBleGl0X3RocmVhZDoKQEAgLTI4MDgsNiArMjgxNiw3IEBACiAJd2FrZV91cCgmZWxpLT5saV93YWl0X3Rhc2spOwogCiAJa2ZyZWUoZXh0NF9saV9pbmZvKTsKKwlleHQ0X2xhenlpbml0X3Rhc2sgPSBOVUxMOwogCWV4dDRfbGlfaW5mbyA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZleHQ0X2xpX210eCk7CiAKQEAgLTI4MzAsMTEgKzI4MzksMTAgQEAKIAogc3RhdGljIGludCBleHQ0X3J1bl9sYXp5aW5pdF90aHJlYWQodm9pZCkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7Ci0KLQl0ID0ga3RocmVhZF9ydW4oZXh0NF9sYXp5aW5pdF90aHJlYWQsIGV4dDRfbGlfaW5mbywgImV4dDRsYXp5aW5pdCIpOwotCWlmIChJU19FUlIodCkpIHsKLQkJaW50IGVyciA9IFBUUl9FUlIodCk7CisJZXh0NF9sYXp5aW5pdF90YXNrID0ga3RocmVhZF9ydW4oZXh0NF9sYXp5aW5pdF90aHJlYWQsCisJCQkJCSBleHQ0X2xpX2luZm8sICJleHQ0bGF6eWluaXQiKTsKKwlpZiAoSVNfRVJSKGV4dDRfbGF6eWluaXRfdGFzaykpIHsKKwkJaW50IGVyciA9IFBUUl9FUlIoZXh0NF9sYXp5aW5pdF90YXNrKTsKIAkJZXh0NF9jbGVhcl9yZXF1ZXN0X2xpc3QoKTsKIAkJZGVsX3RpbWVyX3N5bmMoJmV4dDRfbGlfaW5mby0+bGlfdGltZXIpOwogCQlrZnJlZShleHQ0X2xpX2luZm8pOwpAQCAtMjk4NSwxNiArMjk5MywxMCBAQAogCSAqIElmIHRocmVhZCBleGl0ZWQgZWFybGllcgogCSAqIHRoZXJlJ3Mgbm90aGluZyB0byBiZSBkb25lLgogCSAqLwotCWlmICghZXh0NF9saV9pbmZvKQorCWlmICghZXh0NF9saV9pbmZvIHx8ICFleHQ0X2xhenlpbml0X3Rhc2spCiAJCXJldHVybjsKIAotCWV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KCk7Ci0KLQl3aGlsZSAoZXh0NF9saV9pbmZvLT5saV90YXNrKSB7Ci0JCXdha2VfdXAoJmV4dDRfbGlfaW5mby0+bGlfd2FpdF9kYWVtb24pOwotCQl3YWl0X2V2ZW50KGV4dDRfbGlfaW5mby0+bGlfd2FpdF90YXNrLAotCQkJICAgZXh0NF9saV9pbmZvLT5saV90YXNrID09IE5VTEwpOwotCX0KKwlrdGhyZWFkX3N0b3AoZXh0NF9sYXp5aW5pdF90YXNrKTsKIH0KIAogc3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKQEAgLTQ3NjgsNyArNDc3MCw3IEBACiAJLmZzX2ZsYWdzCT0gRlNfUkVRVUlSRVNfREVWLAogfTsKIAotaW50IF9faW5pdCBleHQ0X2luaXRfZmVhdF9hZHZlcnRzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBleHQ0X2luaXRfZmVhdF9hZHZlcnRzKHZvaWQpCiB7CiAJc3RydWN0IGV4dDRfZmVhdHVyZXMgKmVmOwogCWludCByZXQgPSAtRU5PTUVNOwpAQCAtNDc5MiwyMyArNDc5NCw0NCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGV4dDRfZXhpdF9mZWF0X2FkdmVydHModm9pZCkKK3sKKwlrb2JqZWN0X3B1dCgmZXh0NF9mZWF0LT5mX2tvYmopOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmV4dDRfZmVhdC0+Zl9rb2JqX3VucmVnaXN0ZXIpOworCWtmcmVlKGV4dDRfZmVhdCk7Cit9CisKKy8qIFNoYXJlZCBhY3Jvc3MgYWxsIGV4dDQgZmlsZSBzeXN0ZW1zICovCit3YWl0X3F1ZXVlX2hlYWRfdCBleHQ0X19pb2VuZF93cVtFWFQ0X1dRX0hBU0hfU1pdOworc3RydWN0IG11dGV4IGV4dDRfX2Fpb19tdXRleFtFWFQ0X1dRX0hBU0hfU1pdOworCiBzdGF0aWMgaW50IF9faW5pdCBleHQ0X2luaXRfZnModm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBpLCBlcnI7CiAKIAlleHQ0X2NoZWNrX2ZsYWdfdmFsdWVzKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRVhUNF9XUV9IQVNIX1NaOyBpKyspIHsKKwkJbXV0ZXhfaW5pdCgmZXh0NF9fYWlvX211dGV4W2ldKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZXh0NF9faW9lbmRfd3FbaV0pOworCX0KKwogCWVyciA9IGV4dDRfaW5pdF9wYWdlaW8oKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWVyciA9IGV4dDRfaW5pdF9zeXN0ZW1fem9uZSgpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0NTsKKwkJZ290byBvdXQ3OwogCWV4dDRfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoImV4dDQiLCBOVUxMLCBmc19rb2JqKTsKIAlpZiAoIWV4dDRfa3NldCkKLQkJZ290byBvdXQ0OworCQlnb3RvIG91dDY7CiAJZXh0NF9wcm9jX3Jvb3QgPSBwcm9jX21rZGlyKCJmcy9leHQ0IiwgTlVMTCk7CisJaWYgKCFleHQ0X3Byb2Nfcm9vdCkKKwkJZ290byBvdXQ1OwogCiAJZXJyID0gZXh0NF9pbml0X2ZlYXRfYWR2ZXJ0cygpOworCWlmIChlcnIpCisJCWdvdG8gb3V0NDsKIAogCWVyciA9IGV4dDRfaW5pdF9tYmFsbG9jKCk7CiAJaWYgKGVycikKQEAgLTQ4MzgsMTIgKzQ4NjEsMTQgQEAKIG91dDI6CiAJZXh0NF9leGl0X21iYWxsb2MoKTsKIG91dDM6Ci0Ja2ZyZWUoZXh0NF9mZWF0KTsKLQlyZW1vdmVfcHJvY19lbnRyeSgiZnMvZXh0NCIsIE5VTEwpOwotCWtzZXRfdW5yZWdpc3RlcihleHQ0X2tzZXQpOworCWV4dDRfZXhpdF9mZWF0X2FkdmVydHMoKTsKIG91dDQ6Ci0JZXh0NF9leGl0X3N5c3RlbV96b25lKCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2V4dDQiLCBOVUxMKTsKIG91dDU6CisJa3NldF91bnJlZ2lzdGVyKGV4dDRfa3NldCk7CitvdXQ2OgorCWV4dDRfZXhpdF9zeXN0ZW1fem9uZSgpOworb3V0NzoKIAlleHQ0X2V4aXRfcGFnZWlvKCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ4NTcsNiArNDg4Miw3IEBACiAJZGVzdHJveV9pbm9kZWNhY2hlKCk7CiAJZXh0NF9leGl0X3hhdHRyKCk7CiAJZXh0NF9leGl0X21iYWxsb2MoKTsKKwlleHQ0X2V4aXRfZmVhdF9hZHZlcnRzKCk7CiAJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2V4dDQiLCBOVUxMKTsKIAlrc2V0X3VucmVnaXN0ZXIoZXh0NF9rc2V0KTsKIAlleHQ0X2V4aXRfc3lzdGVtX3pvbmUoKTsKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IGVjYzhiMzkuLmNiMTAyNjEgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtODE1LDcgKzgxNSw3IEBACiAJCV9fT19TWU5DCXwgT19EU1lOQwl8IEZBU1lOQwl8CiAJCU9fRElSRUNUCXwgT19MQVJHRUZJTEUJfCBPX0RJUkVDVE9SWQl8CiAJCU9fTk9GT0xMT1cJfCBPX05PQVRJTUUJfCBPX0NMT0VYRUMJfAotCQlGTU9ERV9FWEVDCisJCV9fRk1PREVfRVhFQwogCQkpKTsKIAogCWZhc3luY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJmYXN5bmNfY2FjaGUiLApkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IGMzZTg5YWQuLmViMzZiNmIgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAJCWdvdG8gZmFpbDsKIAogCXBlcmNwdV9jb3VudGVyX2luYygmbnJfZmlsZXMpOworCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOwogCWlmIChzZWN1cml0eV9maWxlX2FsbG9jKGYpKQogCQlnb3RvIGZhaWxfc2VjOwogCiAJSU5JVF9MSVNUX0hFQUQoJmYtPmZfdS5mdV9saXN0KTsKIAlhdG9taWNfbG9uZ19zZXQoJmYtPmZfY291bnQsIDEpOwogCXJ3bG9ja19pbml0KCZmLT5mX293bmVyLmxvY2spOwotCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOwogCXNwaW5fbG9ja19pbml0KCZmLT5mX2xvY2spOwogCWV2ZW50cG9sbF9pbml0X2ZpbGUoZik7CiAJLyogZi0+Zl92ZXJzaW9uOiAwICovCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCBiZmVkODQ0Li44MzU0M2I1IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTEyODMsOCArMTI4MywxMSBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9PUEVOKSAmJiBmYy0+YXRvbWljX29fdHJ1bmMpCi0JCXJldHVybiAwOworCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfT1BFTikgeworCQlpZiAoZmMtPmF0b21pY19vX3RydW5jKQorCQkJcmV0dXJuIDA7CisJCWZpbGUgPSBOVUxMOworCX0KIAogCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkKIAkJaXNfdHJ1bmNhdGUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCA5NWRhMWJjLi45ZTA4MzJkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtODYsMTggKzg2LDUyIEBACiAJcmV0dXJuIGZmOwogfQogCi1zdGF0aWMgdm9pZCBmdXNlX3JlbGVhc2VfZW5kKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKK3N0YXRpYyB2b2lkIGZ1c2VfcmVsZWFzZV9hc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JcGF0aF9wdXQoJnJlcS0+bWlzYy5yZWxlYXNlLnBhdGgpOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxOworCXN0cnVjdCBmdXNlX2Nvbm4gKmZjOworCXN0cnVjdCBwYXRoIHBhdGg7CisKKwlyZXEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ1c2VfcmVxLCBtaXNjLnJlbGVhc2Uud29yayk7CisJcGF0aCA9IHJlcS0+bWlzYy5yZWxlYXNlLnBhdGg7CisJZmMgPSBnZXRfZnVzZV9jb25uKHBhdGguZGVudHJ5LT5kX2lub2RlKTsKKworCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CisJcGF0aF9wdXQoJnBhdGgpOwogfQogCi1zdGF0aWMgdm9pZCBmdXNlX2ZpbGVfcHV0KHN0cnVjdCBmdXNlX2ZpbGUgKmZmKQorc3RhdGljIHZvaWQgZnVzZV9yZWxlYXNlX2VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCit7CisJaWYgKGZjLT5kZXN0cm95X3JlcSkgeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgZnVzZWJsayBtb3VudCwgdGhlbiBpdCdzIHBvc3NpYmxlIHRoYXQKKwkJICogcmVsZWFzaW5nIHRoZSBwYXRoIHdpbGwgcmVzdWx0IGluIHJlbGVhc2luZyB0aGUKKwkJICogc3VwZXIgYmxvY2sgYW5kIHNlbmRpbmcgdGhlIERFU1RST1kgcmVxdWVzdC4gIElmCisJCSAqIHRoZSBzZXJ2ZXIgaXMgc2luZ2xlIHRocmVhZGVkLCB0aGlzIHdvdWxkIGhhbmcuCisJCSAqIEZvciB0aGlzIHJlYXNvbiBkbyB0aGUgcGF0aF9wdXQoKSBpbiBhIHNlcGFyYXRlCisJCSAqIHRocmVhZC4KKwkJICovCisJCWF0b21pY19pbmMoJnJlcS0+Y291bnQpOworCQlJTklUX1dPUksoJnJlcS0+bWlzYy5yZWxlYXNlLndvcmssIGZ1c2VfcmVsZWFzZV9hc3luYyk7CisJCXNjaGVkdWxlX3dvcmsoJnJlcS0+bWlzYy5yZWxlYXNlLndvcmspOworCX0gZWxzZSB7CisJCXBhdGhfcHV0KCZyZXEtPm1pc2MucmVsZWFzZS5wYXRoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZ1c2VfZmlsZV9wdXQoc3RydWN0IGZ1c2VfZmlsZSAqZmYsIGJvb2wgc3luYykKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZmYtPmNvdW50KSkgewogCQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZmLT5yZXNlcnZlZF9yZXE7CiAKLQkJcmVxLT5lbmQgPSBmdXNlX3JlbGVhc2VfZW5kOwotCQlmdXNlX3JlcXVlc3Rfc2VuZF9iYWNrZ3JvdW5kKGZmLT5mYywgcmVxKTsKKwkJaWYgKHN5bmMpIHsKKwkJCWZ1c2VfcmVxdWVzdF9zZW5kKGZmLT5mYywgcmVxKTsKKwkJCXBhdGhfcHV0KCZyZXEtPm1pc2MucmVsZWFzZS5wYXRoKTsKKwkJCWZ1c2VfcHV0X3JlcXVlc3QoZmYtPmZjLCByZXEpOworCQl9IGVsc2UgeworCQkJcmVxLT5lbmQgPSBmdXNlX3JlbGVhc2VfZW5kOworCQkJZnVzZV9yZXF1ZXN0X3NlbmRfYmFja2dyb3VuZChmZi0+ZmMsIHJlcSk7CisJCX0KIAkJa2ZyZWUoZmYpOwogCX0KIH0KQEAgLTIxOSw4ICsyNTMsMTIgQEAKIAkgKiBOb3JtYWxseSB0aGlzIHdpbGwgc2VuZCB0aGUgUkVMRUFTRSByZXF1ZXN0LCBob3dldmVyIGlmCiAJICogc29tZSBhc3luY2hyb25vdXMgUkVBRCBvciBXUklURSByZXF1ZXN0cyBhcmUgb3V0c3RhbmRpbmcsCiAJICogdGhlIHNlbmRpbmcgd2lsbCBiZSBkZWxheWVkLgorCSAqCisJICogTWFrZSB0aGUgcmVsZWFzZSBzeW5jaHJvbm91cyBpZiB0aGlzIGlzIGEgZnVzZWJsayBtb3VudCwKKwkgKiBzeW5jaHJvbm91cyBSRUxFQVNFIGlzIGFsbG93ZWQgKGFuZCBkZXNpcmFibGUpIGluIHRoaXMgY2FzZQorCSAqIGJlY2F1c2UgdGhlIHNlcnZlciBjYW4gYmUgdHJ1c3RlZCBub3QgdG8gc2NyZXcgdXAuCiAJICovCi0JZnVzZV9maWxlX3B1dChmZik7CisJZnVzZV9maWxlX3B1dChmZiwgZmYtPmZjLT5kZXN0cm95X3JlcSAhPSBOVUxMKTsKIH0KIAogc3RhdGljIGludCBmdXNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC01NTgsNyArNTk2LDcgQEAKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCX0KIAlpZiAocmVxLT5mZikKLQkJZnVzZV9maWxlX3B1dChyZXEtPmZmKTsKKwkJZnVzZV9maWxlX3B1dChyZXEtPmZmLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ1c2Vfc2VuZF9yZWFkcGFnZXMoc3RydWN0IGZ1c2VfcmVxICpyZXEsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTEzNyw3ICsxMTc1LDcgQEAKIHN0YXRpYyB2b2lkIGZ1c2Vfd3JpdGVwYWdlX2ZyZWUoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewogCV9fZnJlZV9wYWdlKHJlcS0+cGFnZXNbMF0pOwotCWZ1c2VfZmlsZV9wdXQocmVxLT5mZik7CisJZnVzZV9maWxlX3B1dChyZXEtPmZmLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ1c2Vfd3JpdGVwYWdlX2ZpbmlzaChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaAppbmRleCBhZTU3NDRhLi5kNDI4Njk0IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Z1c2VfaS5oCisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogLyoqIE1heCBudW1iZXIgb2YgcGFnZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIHNpbmdsZSByZWFkIHJlcXVlc3QgKi8KICNkZWZpbmUgRlVTRV9NQVhfUEFHRVNfUEVSX1JFUSAzMgpAQCAtMjYyLDcgKzI2MywxMCBAQAogCS8qKiBEYXRhIGZvciBhc3luY2hyb25vdXMgcmVxdWVzdHMgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgZnVzZV9yZWxlYXNlX2luIGluOworCQkJdW5pb24geworCQkJCXN0cnVjdCBmdXNlX3JlbGVhc2VfaW4gaW47CisJCQkJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJCQl9OwogCQkJc3RydWN0IHBhdGggcGF0aDsKIAkJfSByZWxlYXNlOwogCQlzdHJ1Y3QgZnVzZV9pbml0X2luIGluaXRfaW47CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggMDhhOGJlYi4uN2NkOWE1YSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtMTc3OSwxMSArMTc3OSwxMSBAQAogI2VuZGlmCiAKIAlnbG9ja193b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoImdsb2NrX3dvcmtxdWV1ZSIsIFdRX01FTV9SRUNMQUlNIHwKLQkJCQkJICBXUV9ISUdIUFJJIHwgV1FfRlJFRVpFQUJMRSwgMCk7CisJCQkJCSAgV1FfSElHSFBSSSB8IFdRX0ZSRUVaQUJMRSwgMCk7CiAJaWYgKElTX0VSUihnbG9ja193b3JrcXVldWUpKQogCQlyZXR1cm4gUFRSX0VSUihnbG9ja193b3JrcXVldWUpOwogCWdmczJfZGVsZXRlX3dvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgiZGVsZXRlX3dvcmtxdWV1ZSIsCi0JCQkJCQlXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaRUFCTEUsCisJCQkJCQlXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSwKIAkJCQkJCTApOwogCWlmIChJU19FUlIoZ2ZzMl9kZWxldGVfd29ya3F1ZXVlKSkgewogCQlkZXN0cm95X3dvcmtxdWV1ZShnbG9ja193b3JrcXVldWUpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tYWluLmMgYi9mcy9nZnMyL21haW4uYwppbmRleCBlYmVmN2FiLi43MmMzMWEzIDEwMDY0NAotLS0gYS9mcy9nZnMyL21haW4uYworKysgYi9mcy9nZnMyL21haW4uYwpAQCAtNTksMTQgKzU5LDcgQEAKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKShnbCArIDEpOwogCiAJZ2ZzMl9pbml0X2dsb2NrX29uY2UoZ2wpOwotCW1lbXNldChtYXBwaW5nLCAwLCBzaXplb2YoKm1hcHBpbmcpKTsKLQlJTklUX1JBRElYX1RSRUUoJm1hcHBpbmctPnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmbWFwcGluZy0+cHJpdmF0ZV9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmbWFwcGluZy0+cHJpdmF0ZV9sb2NrKTsKLQlJTklUX1JBV19QUklPX1RSRUVfUk9PVCgmbWFwcGluZy0+aV9tbWFwKTsKLQlJTklUX0xJU1RfSEVBRCgmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhcik7CisJYWRkcmVzc19zcGFjZV9pbml0X29uY2UobWFwcGluZyk7CiB9CiAKIC8qKgpAQCAtMTQ0LDcgKzEzNyw3IEBACiAKIAllcnJvciA9IC1FTk9NRU07CiAJZ2ZzX3JlY292ZXJ5X3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJnZnNfcmVjb3ZlcnkiLAotCQkJCQkgIFdRX01FTV9SRUNMQUlNIHwgV1FfRlJFRVpFQUJMRSwgMCk7CisJCQkJCSAgV1FfTUVNX1JFQ0xBSU0gfCBXUV9GUkVFWkFCTEUsIDApOwogCWlmICghZ2ZzX3JlY292ZXJ5X3dxKQogCQlnb3RvIGZhaWxfd3E7CiAKZGlmZiAtLWdpdCBhL2ZzL2hmcy9kaXIuYyBiL2ZzL2hmcy9kaXIuYwppbmRleCBhZmE2NmFhLi5iNGQ3MGIxIDEwMDY0NAotLS0gYS9mcy9oZnMvZGlyLmMKKysrIGIvZnMvaGZzL2Rpci5jCkBAIC0yMzgsNDYgKzIzOCwyMiBAQAogfQogCiAvKgotICogaGZzX3VubGluaygpCisgKiBoZnNfcmVtb3ZlKCkKICAqCi0gKiBUaGlzIGlzIHRoZSB1bmxpbmsoKSBlbnRyeSBpbiB0aGUgaW5vZGVfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgZm9yCi0gKiByZWd1bGFyIEhGUyBkaXJlY3Rvcmllcy4gIFRoZSBwdXJwb3NlIGlzIHRvIGRlbGV0ZSBhbiBleGlzdGluZwotICogZmlsZSwgZ2l2ZW4gdGhlIGlub2RlIGZvciB0aGUgcGFyZW50IGRpcmVjdG9yeSBhbmQgdGhlIG5hbWUKLSAqIChhbmQgaXRzIGxlbmd0aCkgb2YgdGhlIGV4aXN0aW5nIGZpbGUuCisgKiBUaGlzIHNlcnZlcyBhcyBib3RoIHVubGluaygpIGFuZCBybWRpcigpIGluIHRoZSBpbm9kZV9vcGVyYXRpb25zCisgKiBzdHJ1Y3R1cmUgZm9yIHJlZ3VsYXIgSEZTIGRpcmVjdG9yaWVzLiAgVGhlIHB1cnBvc2UgaXMgdG8gZGVsZXRlCisgKiBhbiBleGlzdGluZyBjaGlsZCwgZ2l2ZW4gdGhlIGlub2RlIGZvciB0aGUgcGFyZW50IGRpcmVjdG9yeSBhbmQKKyAqIHRoZSBuYW1lIChhbmQgaXRzIGxlbmd0aCkgb2YgdGhlIGV4aXN0aW5nIGRpcmVjdG9yeS4KKyAqCisgKiBIRlMgZG9lcyBub3QgaGF2ZSBoYXJkbGlua3MsIHNvIGJvdGggcm1kaXIgYW5kIHVubGluayBzZXQgdGhlCisgKiBsaW5rIGNvdW50IHRvIDAuICBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZSBlbXB0aW5lc3MgY2hlY2suCiAgKi8KLXN0YXRpYyBpbnQgaGZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGludCBoZnNfcmVtb3ZlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWludCByZXM7CiAKLQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlyZXMgPSBoZnNfY2F0X2RlbGV0ZShpbm9kZS0+aV9pbm8sIGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZHJvcF9ubGluayhpbm9kZSk7Ci0JaGZzX2RlbGV0ZV9pbm9kZShpbm9kZSk7Ci0JaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCi0JcmV0dXJuIHJlczsKLX0KLQotLyoKLSAqIGhmc19ybWRpcigpCi0gKgotICogVGhpcyBpcyB0aGUgcm1kaXIoKSBlbnRyeSBpbiB0aGUgaW5vZGVfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgZm9yCi0gKiByZWd1bGFyIEhGUyBkaXJlY3Rvcmllcy4gIFRoZSBwdXJwb3NlIGlzIHRvIGRlbGV0ZSBhbiBleGlzdGluZwotICogZGlyZWN0b3J5LCBnaXZlbiB0aGUgaW5vZGUgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGFuZCB0aGUgbmFtZQotICogKGFuZCBpdHMgbGVuZ3RoKSBvZiB0aGUgZXhpc3RpbmcgZGlyZWN0b3J5LgotICovCi1zdGF0aWMgaW50IGhmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JaW50IHJlczsKLQotCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCWlmIChpbm9kZS0+aV9zaXplICE9IDIpCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYgaW5vZGUtPmlfc2l6ZSAhPSAyKQogCQlyZXR1cm4gLUVOT1RFTVBUWTsKIAlyZXMgPSBoZnNfY2F0X2RlbGV0ZShpbm9kZS0+aV9pbm8sIGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKIAlpZiAocmVzKQpAQCAtMzA3LDcgKzI4Myw3IEBACiAKIAkvKiBVbmxpbmsgZGVzdGluYXRpb24gaWYgaXQgYWxyZWFkeSBleGlzdHMgKi8KIAlpZiAobmV3X2RlbnRyeS0+ZF9pbm9kZSkgewotCQlyZXMgPSBoZnNfdW5saW5rKG5ld19kaXIsIG5ld19kZW50cnkpOworCQlyZXMgPSBoZnNfcmVtb3ZlKG5ld19kaXIsIG5ld19kZW50cnkpOwogCQlpZiAocmVzKQogCQkJcmV0dXJuIHJlczsKIAl9CkBAIC0zMzIsOSArMzA4LDkgQEAKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkuY3JlYXRlCQk9IGhmc19jcmVhdGUsCiAJLmxvb2t1cAkJPSBoZnNfbG9va3VwLAotCS51bmxpbmsJCT0gaGZzX3VubGluaywKKwkudW5saW5rCQk9IGhmc19yZW1vdmUsCiAJLm1rZGlyCQk9IGhmc19ta2RpciwKLQkucm1kaXIJCT0gaGZzX3JtZGlyLAorCS5ybWRpcgkJPSBoZnNfcmVtb3ZlLAogCS5yZW5hbWUJCT0gaGZzX3JlbmFtZSwKIAkuc2V0YXR0cgk9IGhmc19pbm9kZV9zZXRhdHRyLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKaW5kZXggNTJhMGJjYS4uYjE5OTFhMiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9leHRlbnRzLmMKKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKQEAgLTM5Nyw4ICszOTcsOCBAQAogCXUzMiBzdGFydCwgbGVuLCBnb2FsOwogCWludCByZXM7CiAKLQlpZiAoc2JpLT50b3RhbF9ibG9ja3MgLSBzYmktPmZyZWVfYmxvY2tzICsgOCA+Ci0JCQlzYmktPmFsbG9jX2ZpbGUtPmlfc2l6ZSAqIDgpIHsKKwlpZiAoc2JpLT5hbGxvY19maWxlLT5pX3NpemUgKiA4IDwKKwkgICAgc2JpLT50b3RhbF9ibG9ja3MgLSBzYmktPmZyZWVfYmxvY2tzICsgOCkgewogCQkvKiBleHRlbmQgYWxsb2MgZmlsZSAqLwogCQlwcmludGsoS0VSTl9FUlIgImhmczogZXh0ZW5kIGFsbG9jIGZpbGUhICIKIAkJCQkiKCVsbHUsJXUsJXUpXG4iLApkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9wYXJ0X3RibC5jIGIvZnMvaGZzcGx1cy9wYXJ0X3RibC5jCmluZGV4IGQ2NmFkMTEuLjQwYWQ4OGMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvcGFydF90YmwuYworKysgYi9mcy9oZnNwbHVzL3BhcnRfdGJsLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXJlcyA9IGhmc3BsdXNfc3VibWl0X2JpbyhzYi0+c19iZGV2LCAqcGFydF9zdGFydCArIEhGU19QTUFQX0JMSywKIAkJCQkgZGF0YSwgUkVBRCk7CiAJaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKKwkJZ290byBvdXQ7CiAKIAlzd2l0Y2ggKGJlMTZfdG9fY3B1KCooKF9fYmUxNiAqKWRhdGEpKSkgewogCWNhc2UgSEZTX09MRF9QTUFQX01BR0lDOgpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJCXJlcyA9IC1FTk9FTlQ7CiAJCWJyZWFrOwogCX0KLQorb3V0OgogCWtmcmVlKGRhdGEpOwogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3N1cGVyLmMgYi9mcy9oZnNwbHVzL3N1cGVyLmMKaW5kZXggOWEzYjQ3OS4uYjQ5YjU1NSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9zdXBlci5jCisrKyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwpAQCAtMzM4LDIwICszMzgsMjIgQEAKIAlzdHJ1Y3QgaW5vZGUgKnJvb3QsICppbm9kZTsKIAlzdHJ1Y3QgcXN0ciBzdHI7CiAJc3RydWN0IG5sc190YWJsZSAqbmxzID0gTlVMTDsKLQlpbnQgZXJyID0gLUVJTlZBTDsKKwlpbnQgZXJyOwogCisJZXJyID0gLUVJTlZBTDsKIAlzYmkgPSBremFsbG9jKHNpemVvZigqc2JpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYmkpCi0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIG91dDsKIAogCXNiLT5zX2ZzX2luZm8gPSBzYmk7CiAJbXV0ZXhfaW5pdCgmc2JpLT5hbGxvY19tdXRleCk7CiAJbXV0ZXhfaW5pdCgmc2JpLT52aF9tdXRleCk7CiAJaGZzcGx1c19maWxsX2RlZmF1bHRzKHNiaSk7CisKKwllcnIgPSAtRUlOVkFMOwogCWlmICghaGZzcGx1c19wYXJzZV9vcHRpb25zKGRhdGEsIHNiaSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IHVuYWJsZSB0byBwYXJzZSBtb3VudCBvcHRpb25zXG4iKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBjbGVhbnVwOworCQlnb3RvIG91dF91bmxvYWRfbmxzOwogCX0KIAogCS8qIHRlbXBvcmFyaWx5IHVzZSB1dGY4IHRvIGNvcnJlY3RseSBmaW5kIHRoZSBoaWRkZW4gZGlyIGJlbG93ICovCkBAIC0zNTksMTYgKzM2MSwxNCBAQAogCXNiaS0+bmxzID0gbG9hZF9ubHMoInV0ZjgiKTsKIAlpZiAoIXNiaS0+bmxzKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGZzOiB1bmFibGUgdG8gbG9hZCBubHMgZm9yIHV0ZjhcbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X3VubG9hZF9ubHM7CiAJfQogCiAJLyogR3JhYiB0aGUgdm9sdW1lIGhlYWRlciAqLwogCWlmIChoZnNwbHVzX3JlYWRfd3JhcHBlcihzYikpIHsKIAkJaWYgKCFzaWxlbnQpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZnM6IHVuYWJsZSB0byBmaW5kIEhGUysgc3VwZXJibG9ja1xuIik7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfdW5sb2FkX25sczsKIAl9CiAJdmhkciA9IHNiaS0+c192aGRyOwogCkBAIC0zNzcsNyArMzc3LDcgQEAKIAlpZiAoYmUxNl90b19jcHUodmhkci0+dmVyc2lvbikgPCBIRlNQTFVTX01JTl9WRVJTSU9OIHx8CiAJICAgIGJlMTZfdG9fY3B1KHZoZHItPnZlcnNpb24pID4gSEZTUExVU19DVVJSRU5UX1ZFUlNJT04pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IHdyb25nIGZpbGVzeXN0ZW0gdmVyc2lvblxuIik7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfZnJlZV92aGRyOwogCX0KIAlzYmktPnRvdGFsX2Jsb2NrcyA9IGJlMzJfdG9fY3B1KHZoZHItPnRvdGFsX2Jsb2Nrcyk7CiAJc2JpLT5mcmVlX2Jsb2NrcyA9IGJlMzJfdG9fY3B1KHZoZHItPmZyZWVfYmxvY2tzKTsKQEAgLTQyMSwxOSArNDIxLDE5IEBACiAJc2JpLT5leHRfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNQTFVTX0VYVF9DTklEKTsKIAlpZiAoIXNiaS0+ZXh0X3RyZWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGZhaWxlZCB0byBsb2FkIGV4dGVudHMgZmlsZVxuIik7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfZnJlZV92aGRyOwogCX0KIAlzYmktPmNhdF90cmVlID0gaGZzX2J0cmVlX29wZW4oc2IsIEhGU1BMVVNfQ0FUX0NOSUQpOwogCWlmICghc2JpLT5jYXRfdHJlZSkgewogCQlwcmludGsoS0VSTl9FUlIgImhmczogZmFpbGVkIHRvIGxvYWQgY2F0YWxvZyBmaWxlXG4iKTsKLQkJZ290byBjbGVhbnVwOworCQlnb3RvIG91dF9jbG9zZV9leHRfdHJlZTsKIAl9CiAKIAlpbm9kZSA9IGhmc3BsdXNfaWdldChzYiwgSEZTUExVU19BTExPQ19DTklEKTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQlwcmludGsoS0VSTl9FUlIgImhmczogZmFpbGVkIHRvIGxvYWQgYWxsb2NhdGlvbiBmaWxlXG4iKTsKIAkJZXJyID0gUFRSX0VSUihpbm9kZSk7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfY2xvc2VfY2F0X3RyZWU7CiAJfQogCXNiaS0+YWxsb2NfZmlsZSA9IGlub2RlOwogCkBAIC00NDIsMTQgKzQ0Miw3IEBACiAJaWYgKElTX0VSUihyb290KSkgewogCQlwcmludGsoS0VSTl9FUlIgImhmczogZmFpbGVkIHRvIGxvYWQgcm9vdCBkaXJlY3RvcnlcbiIpOwogCQllcnIgPSBQVFJfRVJSKHJvb3QpOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCXNiLT5zX2Rfb3AgPSAmaGZzcGx1c19kZW50cnlfb3BlcmF0aW9uczsKLQlzYi0+c19yb290ID0gZF9hbGxvY19yb290KHJvb3QpOwotCWlmICghc2ItPnNfcm9vdCkgewotCQlpcHV0KHJvb3QpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X3B1dF9hbGxvY19maWxlOwogCX0KIAogCXN0ci5sZW4gPSBzaXplb2YoSEZTUF9ISURERU5ESVJfTkFNRSkgLSAxOwpAQCAtNDU5LDQ2ICs0NTIsNjkgQEAKIAlpZiAoIWhmc19icmVjX3JlYWQoJmZkLCAmZW50cnksIHNpemVvZihlbnRyeSkpKSB7CiAJCWhmc19maW5kX2V4aXQoJmZkKTsKIAkJaWYgKGVudHJ5LnR5cGUgIT0gY3B1X3RvX2JlMTYoSEZTUExVU19GT0xERVIpKQotCQkJZ290byBjbGVhbnVwOworCQkJZ290byBvdXRfcHV0X3Jvb3Q7CiAJCWlub2RlID0gaGZzcGx1c19pZ2V0KHNiLCBiZTMyX3RvX2NwdShlbnRyeS5mb2xkZXIuaWQpKTsKIAkJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwotCQkJZ290byBjbGVhbnVwOworCQkJZ290byBvdXRfcHV0X3Jvb3Q7CiAJCX0KIAkJc2JpLT5oaWRkZW5fZGlyID0gaW5vZGU7CiAJfSBlbHNlCiAJCWhmc19maW5kX2V4aXQoJmZkKTsKIAotCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKLQkJZ290byBvdXQ7CisJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisJCS8qCisJCSAqIEgrTFggPT0gaGZzcGx1c3V0aWxzLCBIK0x4ID09IHRoaXMgZHJpdmVyLCBIK2x4IGlzIHVudXNlZAorCQkgKiBhbGwgdGhyZWUgYXJlIHJlZ2lzdGVyZWQgd2l0aCBBcHBsZSBmb3Igb3VyIHVzZQorCQkgKi8KKwkJdmhkci0+bGFzdF9tb3VudF92ZXJzID0gY3B1X3RvX2JlMzIoSEZTUF9NT1VOVF9WRVJTSU9OKTsKKwkJdmhkci0+bW9kaWZ5X2RhdGUgPSBoZnNwX25vdzJtdCgpOworCQliZTMyX2FkZF9jcHUoJnZoZHItPndyaXRlX2NvdW50LCAxKTsKKwkJdmhkci0+YXR0cmlidXRlcyAmPSBjcHVfdG9fYmUzMih+SEZTUExVU19WT0xfVU5NTlQpOworCQl2aGRyLT5hdHRyaWJ1dGVzIHw9IGNwdV90b19iZTMyKEhGU1BMVVNfVk9MX0lOQ05TVE5UKTsKKwkJaGZzcGx1c19zeW5jX2ZzKHNiLCAxKTsKIAotCS8qIEgrTFggPT0gaGZzcGx1c3V0aWxzLCBIK0x4ID09IHRoaXMgZHJpdmVyLCBIK2x4IGlzIHVudXNlZAotCSAqIGFsbCB0aHJlZSBhcmUgcmVnaXN0ZXJlZCB3aXRoIEFwcGxlIGZvciBvdXIgdXNlCi0JICovCi0Jdmhkci0+bGFzdF9tb3VudF92ZXJzID0gY3B1X3RvX2JlMzIoSEZTUF9NT1VOVF9WRVJTSU9OKTsKLQl2aGRyLT5tb2RpZnlfZGF0ZSA9IGhmc3Bfbm93Mm10KCk7Ci0JYmUzMl9hZGRfY3B1KCZ2aGRyLT53cml0ZV9jb3VudCwgMSk7Ci0Jdmhkci0+YXR0cmlidXRlcyAmPSBjcHVfdG9fYmUzMih+SEZTUExVU19WT0xfVU5NTlQpOwotCXZoZHItPmF0dHJpYnV0ZXMgfD0gY3B1X3RvX2JlMzIoSEZTUExVU19WT0xfSU5DTlNUTlQpOwotCWhmc3BsdXNfc3luY19mcyhzYiwgMSk7CisJCWlmICghc2JpLT5oaWRkZW5fZGlyKSB7CisJCQltdXRleF9sb2NrKCZzYmktPnZoX211dGV4KTsKKwkJCXNiaS0+aGlkZGVuX2RpciA9IGhmc3BsdXNfbmV3X2lub2RlKHNiLCBTX0lGRElSKTsKKwkJCWhmc3BsdXNfY3JlYXRlX2NhdChzYmktPmhpZGRlbl9kaXItPmlfaW5vLCByb290LCAmc3RyLAorCQkJCQkgICBzYmktPmhpZGRlbl9kaXIpOworCQkJbXV0ZXhfdW5sb2NrKCZzYmktPnZoX211dGV4KTsKIAotCWlmICghc2JpLT5oaWRkZW5fZGlyKSB7Ci0JCW11dGV4X2xvY2soJnNiaS0+dmhfbXV0ZXgpOwotCQlzYmktPmhpZGRlbl9kaXIgPSBoZnNwbHVzX25ld19pbm9kZShzYiwgU19JRkRJUik7Ci0JCWhmc3BsdXNfY3JlYXRlX2NhdChzYmktPmhpZGRlbl9kaXItPmlfaW5vLCBzYi0+c19yb290LT5kX2lub2RlLAotCQkJCSAgICZzdHIsIHNiaS0+aGlkZGVuX2Rpcik7Ci0JCW11dGV4X3VubG9jaygmc2JpLT52aF9tdXRleCk7Ci0KLQkJaGZzcGx1c19tYXJrX2lub2RlX2RpcnR5KHNiaS0+aGlkZGVuX2RpciwgSEZTUExVU19JX0NBVF9ESVJUWSk7CisJCQloZnNwbHVzX21hcmtfaW5vZGVfZGlydHkoc2JpLT5oaWRkZW5fZGlyLAorCQkJCQkJIEhGU1BMVVNfSV9DQVRfRElSVFkpOworCQl9CiAJfQotb3V0OgorCisJc2ItPnNfZF9vcCA9ICZoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zOworCXNiLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3Qocm9vdCk7CisJaWYgKCFzYi0+c19yb290KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3B1dF9oaWRkZW5fZGlyOworCX0KKwogCXVubG9hZF9ubHMoc2JpLT5ubHMpOwogCXNiaS0+bmxzID0gbmxzOwogCXJldHVybiAwOwogCi1jbGVhbnVwOgotCWhmc3BsdXNfcHV0X3N1cGVyKHNiKTsKK291dF9wdXRfaGlkZGVuX2RpcjoKKwlpcHV0KHNiaS0+aGlkZGVuX2Rpcik7CitvdXRfcHV0X3Jvb3Q6CisJaXB1dChzYmktPmFsbG9jX2ZpbGUpOworb3V0X3B1dF9hbGxvY19maWxlOgorCWlwdXQoc2JpLT5hbGxvY19maWxlKTsKK291dF9jbG9zZV9jYXRfdHJlZToKKwloZnNfYnRyZWVfY2xvc2Uoc2JpLT5jYXRfdHJlZSk7CitvdXRfY2xvc2VfZXh0X3RyZWU6CisJaGZzX2J0cmVlX2Nsb3NlKHNiaS0+ZXh0X3RyZWUpOworb3V0X2ZyZWVfdmhkcjoKKwlrZnJlZShzYmktPnNfdmhkcik7CisJa2ZyZWUoc2JpLT5zX2JhY2t1cF92aGRyKTsKK291dF91bmxvYWRfbmxzOgorCXVubG9hZF9ubHMoc2JpLT5ubHMpOwogCXVubG9hZF9ubHMobmxzKTsKKwlrZnJlZShzYmkpOworb3V0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKaW5kZXggMTk2MjMxNy4uMzAzMWQ4MSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy93cmFwcGVyLmMKKysrIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQlicmVhazsKIAljYXNlIGNwdV90b19iZTE2KEhGU1BfV1JBUF9NQUdJQyk6CiAJCWlmICghaGZzcGx1c19yZWFkX21kYihzYmktPnNfdmhkciwgJndkKSkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfZnJlZV9iYWNrdXBfdmhkcjsKIAkJd2QuYWJsa19zaXplID4+PSBIRlNQTFVTX1NFQ1RPUl9TSElGVDsKIAkJcGFydF9zdGFydCArPSB3ZC5hYmxrX3N0YXJ0ICsgd2QuZW1iZWRfc3RhcnQgKiB3ZC5hYmxrX3NpemU7CiAJCXBhcnRfc2l6ZSA9IHdkLmVtYmVkX2NvdW50ICogd2QuYWJsa19zaXplOwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJCSAqIChzaG91bGQgZG8gdGhpcyBvbmx5IGZvciBjZHJvbS9sb29wIHRob3VnaCkKIAkJICovCiAJCWlmIChoZnNfcGFydF9maW5kKHNiLCAmcGFydF9zdGFydCwgJnBhcnRfc2l6ZSkpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X2ZyZWVfYmFja3VwX3ZoZHI7CiAJCWdvdG8gcmVyZWFkOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggZGE4NWU1Ni4uMDY0N2Q4MCAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYworKysgYi9mcy9pbm9kZS5jCkBAIC0yOTUsNiArMjk1LDIwIEBACiAJCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGlfY2FsbGJhY2spOwogfQogCit2b2lkIGFkZHJlc3Nfc3BhY2VfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworCW1lbXNldChtYXBwaW5nLCAwLCBzaXplb2YoKm1hcHBpbmcpKTsKKwlJTklUX1JBRElYX1RSRUUoJm1hcHBpbmctPnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7CisJc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnRyZWVfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFwcGluZy0+cHJpdmF0ZV9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmbWFwcGluZy0+cHJpdmF0ZV9sb2NrKTsKKwlJTklUX1JBV19QUklPX1RSRUVfUk9PVCgmbWFwcGluZy0+aV9tbWFwKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhcik7CisJbXV0ZXhfaW5pdCgmbWFwcGluZy0+dW5tYXBfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChhZGRyZXNzX3NwYWNlX2luaXRfb25jZSk7CisKIC8qCiAgKiBUaGVzZSBhcmUgaW5pdGlhbGl6YXRpb25zIHRoYXQgb25seSBuZWVkIHRvIGJlIGRvbmUKICAqIG9uY2UsIGJlY2F1c2UgdGhlIGZpZWxkcyBhcmUgaWRlbXBvdGVudCBhY3Jvc3MgdXNlCkBAIC0zMDgsMTMgKzMyMiw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RldmljZXMpOwogCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV93Yl9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfbHJ1KTsKLQlJTklUX1JBRElYX1RSRUUoJmlub2RlLT5pX2RhdGEucGFnZV90cmVlLCBHRlBfQVRPTUlDKTsKLQlzcGluX2xvY2tfaW5pdCgmaW5vZGUtPmlfZGF0YS50cmVlX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZpbm9kZS0+aV9kYXRhLmlfbW1hcF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGF0YS5wcml2YXRlX2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZpbm9kZS0+aV9kYXRhLnByaXZhdGVfbG9jayk7Ci0JSU5JVF9SQVdfUFJJT19UUkVFX1JPT1QoJmlub2RlLT5pX2RhdGEuaV9tbWFwKTsKLQlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGF0YS5pX21tYXBfbm9ubGluZWFyKTsKKwlhZGRyZXNzX3NwYWNlX2luaXRfb25jZSgmaW5vZGUtPmlfZGF0YSk7CiAJaV9zaXplX29yZGVyZWRfaW5pdChpbm9kZSk7CiAjaWZkZWYgQ09ORklHX0ZTTk9USUZZCiAJSU5JVF9ITElTVF9IRUFEKCZpbm9kZS0+aV9mc25vdGlmeV9tYXJrcyk7CkBAIC01NDAsMTEgKzU0OCwxNCBAQAogLyoqCiAgKiBpbnZhbGlkYXRlX2lub2RlcwktIGF0dGVtcHQgdG8gZnJlZSBhbGwgaW5vZGVzIG9uIGEgc3VwZXJibG9jawogICogQHNiOgkJc3VwZXJibG9jayB0byBvcGVyYXRlIG9uCisgKiBAa2lsbF9kaXJ0eTogZmxhZyB0byBndWlkZSBoYW5kbGluZyBvZiBkaXJ0eSBpbm9kZXMKICAqCiAgKiBBdHRlbXB0cyB0byBmcmVlIGFsbCBpbm9kZXMgZm9yIGEgZ2l2ZW4gc3VwZXJibG9jay4gIElmIHRoZXJlIHdlcmUgYW55CiAgKiBidXN5IGlub2RlcyByZXR1cm4gYSBub24temVybyB2YWx1ZSwgZWxzZSB6ZXJvLgorICogSWYgQGtpbGxfZGlydHkgaXMgc2V0LCBkaXNjYXJkIGRpcnR5IGlub2RlcyB0b28sIG90aGVyd2lzZSB0cmVhdAorICogdGhlbSBhcyBidXN5LgogICovCi1pbnQgaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK2ludCBpbnZhbGlkYXRlX2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBib29sIGtpbGxfZGlydHkpCiB7CiAJaW50IGJ1c3kgPSAwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUsICpuZXh0OwpAQCAtNTU2LDYgKzU2NywxMCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbm9kZSwgbmV4dCwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7CiAJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX05FVyB8IElfRlJFRUlORyB8IElfV0lMTF9GUkVFKSkKIAkJCWNvbnRpbnVlOworCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZICYmICFraWxsX2RpcnR5KSB7CisJCQlidXN5ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CiAJCWlmIChhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpKSB7CiAJCQlidXN5ID0gMTsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmgKaW5kZXggMDY2MzU2OC4uOWI5NzZiNSAxMDA2NDQKLS0tIGEvZnMvaW50ZXJuYWwuaAorKysgYi9mcy9pbnRlcm5hbC5oCkBAIC0xMTIsNCArMTEyLDQgQEAKICAqLwogZXh0ZXJuIGludCBnZXRfbnJfZGlydHlfaW5vZGVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICopOworZXh0ZXJuIGludCBpbnZhbGlkYXRlX2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgYm9vbCk7CmRpZmYgLS1naXQgYS9mcy9pb2N0bC5jIGIvZnMvaW9jdGwuYwppbmRleCBhNTk2MzVlLi4xZWViZWI3IDEwMDY0NAotLS0gYS9mcy9pb2N0bC5jCisrKyBiL2ZzL2lvY3RsLmMKQEAgLTI3Myw2ICsyNzMsMTMgQEAKIAkJbGVuID0gaXNpemU7CiAJfQogCisJLyoKKwkgKiBTb21lIGZpbGVzeXN0ZW1zIGNhbid0IGRlYWwgd2l0aCBiZWluZyBhc2tlZCB0byBtYXAgbGVzcyB0aGFuCisJICogYmxvY2tzaXplLCBzbyBtYWtlIHN1cmUgb3VyIGxlbiBpcyBhdCBsZWFzdCBibG9jayBsZW5ndGguCisJICovCisJaWYgKGxvZ2ljYWxfdG9fYmxrKGlub2RlLCBsZW4pID09IDApCisJCWxlbiA9IGJsa190b19sb2dpY2FsKGlub2RlLCAxKTsKKwogCXN0YXJ0X2JsayA9IGxvZ2ljYWxfdG9fYmxrKGlub2RlLCBzdGFydCk7CiAJbGFzdF9ibGsgPSBsb2dpY2FsX3RvX2Jsayhpbm9kZSwgc3RhcnQgKyBsZW4gLSAxKTsKIApkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCA5ZTQ2ODY5Li45N2U3MzQ2IDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtNDczLDcgKzQ3Myw4IEBACiB9CiAKIC8qCi0gKiBDYWxsZWQgdW5kZXIgal9zdGF0ZV9sb2NrLiAgUmV0dXJucyB0cnVlIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IHdhcyBzdGFydGVkLgorICogQ2FsbGVkIHdpdGggal9zdGF0ZV9sb2NrIGxvY2tlZCBmb3Igd3JpdGluZy4KKyAqIFJldHVybnMgdHJ1ZSBpZiBhIHRyYW5zYWN0aW9uIGNvbW1pdCB3YXMgc3RhcnRlZC4KICAqLwogaW50IF9famJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgdGFyZ2V0KQogewpAQCAtNTIwLDExICs1MjEsMTMgQEAKIHsKIAl0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbiA9IE5VTEw7CiAJdGlkX3QgdGlkOworCWludCBuZWVkX3RvX3N0YXJ0ID0gMDsKIAogCXJlYWRfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlpZiAoam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uICYmICFjdXJyZW50LT5qb3VybmFsX2luZm8pIHsKIAkJdHJhbnNhY3Rpb24gPSBqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb247Ci0JCV9famJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRyYW5zYWN0aW9uLT50X3RpZCk7CisJCWlmICghdGlkX2dlcShqb3VybmFsLT5qX2NvbW1pdF9yZXF1ZXN0LCB0cmFuc2FjdGlvbi0+dF90aWQpKQorCQkJbmVlZF90b19zdGFydCA9IDE7CiAJfSBlbHNlIGlmIChqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pCiAJCXRyYW5zYWN0aW9uID0gam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uOwogCkBAIC01MzUsNiArNTM4LDggQEAKIAogCXRpZCA9IHRyYW5zYWN0aW9uLT50X3RpZDsKIAlyZWFkX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwlpZiAobmVlZF90b19zdGFydCkKKwkJamJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRpZCk7CiAJamJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgdGlkKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwppbmRleCBmYWFkMmJkLi4xZDExOTEwIDEwMDY0NAotLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCkBAIC0xMTcsMTAgKzExNywxMCBAQAogc3RhdGljIGludCBzdGFydF90aGlzX2hhbmRsZShqb3VybmFsX3QgKmpvdXJuYWwsIGhhbmRsZV90ICpoYW5kbGUsCiAJCQkgICAgIGludCBnZnBfbWFzaykKIHsKLQl0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbjsKLQlpbnQgbmVlZGVkOwotCWludCBuYmxvY2tzID0gaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzOwotCXRyYW5zYWN0aW9uX3QgKm5ld190cmFuc2FjdGlvbiA9IE5VTEw7CisJdHJhbnNhY3Rpb25fdAkqdHJhbnNhY3Rpb24sICpuZXdfdHJhbnNhY3Rpb24gPSBOVUxMOworCXRpZF90CQl0aWQ7CisJaW50CQluZWVkZWQsIG5lZWRfdG9fc3RhcnQ7CisJaW50CQluYmxvY2tzID0gaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzOwogCiAJaWYgKG5ibG9ja3MgPiBqb3VybmFsLT5qX21heF90cmFuc2FjdGlvbl9idWZmZXJzKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSkJEOiAlcyB3YW50cyB0b28gbWFueSBjcmVkaXRzICglZCA+ICVkKVxuIiwKQEAgLTIyMiw4ICsyMjIsMTEgQEAKIAkJYXRvbWljX3N1YihuYmxvY2tzLCAmdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cyk7CiAJCXByZXBhcmVfdG9fd2FpdCgmam91cm5hbC0+al93YWl0X3RyYW5zYWN0aW9uX2xvY2tlZCwgJndhaXQsCiAJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQlfX2piZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCB0cmFuc2FjdGlvbi0+dF90aWQpOworCQl0aWQgPSB0cmFuc2FjdGlvbi0+dF90aWQ7CisJCW5lZWRfdG9fc3RhcnQgPSAhdGlkX2dlcShqb3VybmFsLT5qX2NvbW1pdF9yZXF1ZXN0LCB0aWQpOwogCQlyZWFkX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJaWYgKG5lZWRfdG9fc3RhcnQpCisJCQlqYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgdGlkKTsKIAkJc2NoZWR1bGUoKTsKIAkJZmluaXNoX3dhaXQoJmpvdXJuYWwtPmpfd2FpdF90cmFuc2FjdGlvbl9sb2NrZWQsICZ3YWl0KTsKIAkJZ290byByZXBlYXQ7CkBAIC00NDIsNyArNDQ1LDggQEAKIHsKIAl0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbiA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbjsKIAlqb3VybmFsX3QgKmpvdXJuYWwgPSB0cmFuc2FjdGlvbi0+dF9qb3VybmFsOwotCWludCByZXQ7CisJdGlkX3QJCXRpZDsKKwlpbnQJCW5lZWRfdG9fc3RhcnQsIHJldDsKIAogCS8qIElmIHdlJ3ZlIGhhZCBhbiBhYm9ydCBvZiBhbnkgdHlwZSwgZG9uJ3QgZXZlbiB0aGluayBhYm91dAogCSAqIGFjdHVhbGx5IGRvaW5nIHRoZSByZXN0YXJ0ISAqLwpAQCAtNDY1LDggKzQ2OSwxMSBAQAogCXNwaW5fdW5sb2NrKCZ0cmFuc2FjdGlvbi0+dF9oYW5kbGVfbG9jayk7CiAKIAlqYmRfZGVidWcoMiwgInJlc3RhcnRpbmcgaGFuZGxlICVwXG4iLCBoYW5kbGUpOwotCV9famJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRyYW5zYWN0aW9uLT50X3RpZCk7CisJdGlkID0gdHJhbnNhY3Rpb24tPnRfdGlkOworCW5lZWRfdG9fc3RhcnQgPSAhdGlkX2dlcShqb3VybmFsLT5qX2NvbW1pdF9yZXF1ZXN0LCB0aWQpOwogCXJlYWRfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCWlmIChuZWVkX3RvX3N0YXJ0KQorCQlqYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgdGlkKTsKIAogCWxvY2tfbWFwX3JlbGVhc2UoJmhhbmRsZS0+aF9sb2NrZGVwX21hcCk7CiAJaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzID0gbmJsb2NrczsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2hvc3QuYyBiL2ZzL2xvY2tkL2hvc3QuYwppbmRleCA1ZjFiY2IyLi5iN2M5OWJmIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9ob3N0LmMKKysrIGIvZnMvbG9ja2QvaG9zdC5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAkJCQkJc3RydWN0IG5zbV9oYW5kbGUgKm5zbSwKIAkJCQkJY29uc3Qgc3RydWN0IG5sbV9yZWJvb3QgKmluZm8pCiB7Ci0Jc3RydWN0IG5sbV9ob3N0ICpob3N0ID0gTlVMTDsKKwlzdHJ1Y3QgbmxtX2hvc3QgKmhvc3Q7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmNoYWluOwogCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CiAKQEAgLTUzMiwxMiArNTMyLDEzIEBACiAJCQlob3N0LT5oX3N0YXRlKys7CiAKIAkJCW5sbV9nZXRfaG9zdChob3N0KTsKLQkJCWdvdG8gb3V0OworCQkJbXV0ZXhfdW5sb2NrKCZubG1faG9zdF9tdXRleCk7CisJCQlyZXR1cm4gaG9zdDsKIAkJfQogCX0KLW91dDoKKwogCW11dGV4X3VubG9jaygmbmxtX2hvc3RfbXV0ZXgpOwotCXJldHVybiBob3N0OworCXJldHVybiBOVUxMOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jCmluZGV4IGNlNzMzN2QuLjZlNjc3N2YgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L25hbWVpLmMKKysrIGIvZnMvbWluaXgvbmFtZWkuYwpAQCAtMjEzLDcgKzIxMyw2IEBACiAJCW5ld19kZSA9IG1pbml4X2ZpbmRfZW50cnkobmV3X2RlbnRyeSwgJm5ld19wYWdlKTsKIAkJaWYgKCFuZXdfZGUpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCW1pbml4X3NldF9saW5rKG5ld19kZSwgbmV3X3BhZ2UsIG9sZF9pbm9kZSk7CiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJCWlmIChkaXJfZGUpCkBAIC0yMjUsMTggKzIyNCwxNSBAQAogCQkJaWYgKG5ld19kaXItPmlfbmxpbmsgPj0gaW5mby0+c19saW5rX21heCkKIAkJCQlnb3RvIG91dF9kaXI7CiAJCX0KLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJZXJyID0gbWluaXhfYWRkX2xpbmsobmV3X2RlbnRyeSwgb2xkX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2RpcjsKLQkJfQogCQlpZiAoZGlyX2RlKQogCQkJaW5vZGVfaW5jX2xpbmtfY291bnQobmV3X2Rpcik7CiAJfQogCiAJbWluaXhfZGVsZXRlX2VudHJ5KG9sZF9kZSwgb2xkX3BhZ2UpOwotCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisJbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOwogCiAJaWYgKGRpcl9kZSkgewogCQltaW5peF9zZXRfbGluayhkaXJfZGUsIGRpcl9wYWdlLCBuZXdfZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDdkNzdmMjQuLjAwODdjZjkgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtNDU1LDE0ICs0NTUsNiBAQAogCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gY3VycmVudC0+ZnM7CiAJc3RydWN0IGRlbnRyeSAqcGFyZW50ID0gbmQtPnBhdGguZGVudHJ5OwogCi0JLyoKLQkgKiBJdCBjYW4gYmUgcG9zc2libGUgdG8gcmV2YWxpZGF0ZSB0aGUgZGVudHJ5IHRoYXQgd2Ugc3RhcnRlZAotCSAqIHRoZSBwYXRoIHdhbGsgd2l0aC4gZm9yY2VfcmV2YWxfcGF0aCBtYXkgYWxzbyByZXZhbGlkYXRlIHRoZQotCSAqIGRlbnRyeSBhbHJlYWR5IGNvbW1pdHRlZCB0byB0aGUgbmFtZWlkYXRhLgotCSAqLwotCWlmICh1bmxpa2VseShwYXJlbnQgPT0gZGVudHJ5KSkKLQkJcmV0dXJuIG5hbWVpZGF0YV9kcm9wX3JjdShuZCk7Ci0KIAlCVUdfT04oIShuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKSk7CiAJaWYgKG5kLT5yb290Lm1udCkgewogCQlzcGluX2xvY2soJmZzLT5sb2NrKTsKQEAgLTU2MSwzOSArNTUzLDI1IEBACiAgKi8KIHZvaWQgcmVsZWFzZV9vcGVuX2ludGVudChzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlpZiAobmQtPmludGVudC5vcGVuLmZpbGUtPmZfcGF0aC5kZW50cnkgPT0gTlVMTCkKLQkJcHV0X2ZpbHAobmQtPmludGVudC5vcGVuLmZpbGUpOwotCWVsc2UKLQkJZnB1dChuZC0+aW50ZW50Lm9wZW4uZmlsZSk7Ci19CisJc3RydWN0IGZpbGUgKmZpbGUgPSBuZC0+aW50ZW50Lm9wZW4uZmlsZTsKIAotLyoKLSAqIENhbGwgZF9yZXZhbGlkYXRlIGFuZCBoYW5kbGUgZmlsZXN5c3RlbXMgdGhhdCByZXF1ZXN0IHJjdS13YWxrCi0gKiB0byBiZSBkcm9wcGVkLiBUaGlzIG1heSBiZSBjYWxsZWQgYW5kIHJldHVybiBpbiByY3Utd2FsayBtb2RlLAotICogcmVnYXJkbGVzcyBvZiBzdWNjZXNzIG9yIGVycm9yLiBJZiAtRUNISUxEIGlzIHJldHVybmVkLCB0aGUgY2FsbGVyCi0gKiBtdXN0IHJldHVybiAtRUNISUxEIGJhY2sgdXAgdGhlIHBhdGggd2FsayBzdGFjayBzbyBwYXRoIHdhbGsgbWF5Ci0gKiBiZSByZXN0YXJ0ZWQgaW4gcmVmLXdhbGsgbW9kZS4KLSAqLwotc3RhdGljIGludCBkX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7Ci0JaWYgKHN0YXR1cyA9PSAtRUNISUxEKSB7Ci0JCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1KG5kLCBkZW50cnkpKQotCQkJcmV0dXJuIHN0YXR1czsKLQkJc3RhdHVzID0gZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CisJaWYgKGZpbGUgJiYgIUlTX0VSUihmaWxlKSkgeworCQlpZiAoZmlsZS0+Zl9wYXRoLmRlbnRyeSA9PSBOVUxMKQorCQkJcHV0X2ZpbHAoZmlsZSk7CisJCWVsc2UKKwkJCWZwdXQoZmlsZSk7CiAJfQotCi0JcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICoKK3N0YXRpYyBpbmxpbmUgaW50IGRfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXJldHVybiBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKgogZG9fcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCWludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBkX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CisJaW50IHN0YXR1cyA9IGRfcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKIAlpZiAodW5saWtlbHkoc3RhdHVzIDw9IDApKSB7CiAJCS8qCiAJCSAqIFRoZSBkZW50cnkgZmFpbGVkIHZhbGlkYXRpb24uCkBAIC02MDIsMjQgKzU4MCwzOSBAQAogCQkgKiB0byByZXR1cm4gYSBmYWlsIHN0YXR1cy4KIAkJICovCiAJCWlmIChzdGF0dXMgPCAwKSB7Ci0JCQkvKiBJZiB3ZSdyZSBpbiByY3Utd2Fsaywgd2UgZG9uJ3QgaGF2ZSBhIHJlZiAqLwotCQkJaWYgKCEobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkpCi0JCQkJZHB1dChkZW50cnkpOworCQkJZHB1dChkZW50cnkpOwogCQkJZGVudHJ5ID0gRVJSX1BUUihzdGF0dXMpOwotCi0JCX0gZWxzZSB7Ci0JCQkvKiBEb24ndCBkX2ludmFsaWRhdGUgaW4gcmN1LXdhbGsgbW9kZSAqLwotCQkJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3VfbWF5YmUobmQsIGRlbnRyeSkpCi0JCQkJcmV0dXJuIEVSUl9QVFIoLUVDSElMRCk7Ci0JCQlpZiAoIWRfaW52YWxpZGF0ZShkZW50cnkpKSB7Ci0JCQkJZHB1dChkZW50cnkpOwotCQkJCWRlbnRyeSA9IE5VTEw7Ci0JCQl9CisJCX0gZWxzZSBpZiAoIWRfaW52YWxpZGF0ZShkZW50cnkpKSB7CisJCQlkcHV0KGRlbnRyeSk7CisJCQlkZW50cnkgPSBOVUxMOwogCQl9CiAJfQogCXJldHVybiBkZW50cnk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqCitkb19yZXZhbGlkYXRlX3JjdShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCWludCBzdGF0dXMgPSBkX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CisJaWYgKGxpa2VseShzdGF0dXMgPiAwKSkKKwkJcmV0dXJuIGRlbnRyeTsKKwlpZiAoc3RhdHVzID09IC1FQ0hJTEQpIHsKKwkJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3UobmQsIGRlbnRyeSkpCisJCQlyZXR1cm4gRVJSX1BUUigtRUNISUxEKTsKKwkJcmV0dXJuIGRvX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CisJfQorCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gRVJSX1BUUihzdGF0dXMpOworCS8qIERvbid0IGRfaW52YWxpZGF0ZSBpbiByY3Utd2FsayBtb2RlICovCisJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3UobmQsIGRlbnRyeSkpCisJCXJldHVybiBFUlJfUFRSKC1FQ0hJTEQpOworCWlmICghZF9pbnZhbGlkYXRlKGRlbnRyeSkpIHsKKwkJZHB1dChkZW50cnkpOworCQlkZW50cnkgPSBOVUxMOworCX0KKwlyZXR1cm4gZGVudHJ5OworfQorCiBzdGF0aWMgaW5saW5lIGludCBuZWVkX3JldmFsX2RvdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJaWYgKGxpa2VseSghKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9PUF9SRVZBTElEQVRFKSkpCkBAIC02NjQsOSArNjU3LDYgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXN0YXR1cykgewotCQkvKiBEb24ndCBkX2ludmFsaWRhdGUgaW4gcmN1LXdhbGsgbW9kZSAqLwotCQlpZiAobmFtZWlkYXRhX2Ryb3BfcmN1KG5kKSkKLQkJCXJldHVybiAtRUNISUxEOwogCQlkX2ludmFsaWRhdGUoZGVudHJ5KTsKIAkJc3RhdHVzID0gLUVTVEFMRTsKIAl9CkBAIC03NzMsNiArNzYzLDggQEAKIAlpbnQgZXJyb3I7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gbGluay0+ZGVudHJ5OwogCisJQlVHX09OKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpOworCiAJdG91Y2hfYXRpbWUobGluay0+bW50LCBkZW50cnkpOwogCW5kX3NldF9saW5rKG5kLCBOVUxMKTsKIApAQCAtODAzLDEwICs3OTUsMTYgQEAKICAqIFdpdGhvdXQgdGhhdCBraW5kIG9mIHRvdGFsIGxpbWl0LCBuYXN0eSBjaGFpbnMgb2YgY29uc2VjdXRpdmUKICAqIHN5bWxpbmtzIGNhbiBjYXVzZSBhbG1vc3QgYXJiaXRyYXJpbHkgbG9uZyBsb29rdXBzLiAKICAqLwotc3RhdGljIGlubGluZSBpbnQgZG9fZm9sbG93X2xpbmsoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQorc3RhdGljIGlubGluZSBpbnQgZG9fZm9sbG93X2xpbmsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCXZvaWQgKmNvb2tpZTsKIAlpbnQgZXJyID0gLUVMT09QOworCisJLyogV2UgZHJvcCByY3Utd2FsayBoZXJlICovCisJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3VfbWF5YmUobmQsIHBhdGgtPmRlbnRyeSkpCisJCXJldHVybiAtRUNISUxEOworCUJVR19PTihpbm9kZSAhPSBwYXRoLT5kZW50cnktPmRfaW5vZGUpOworCiAJaWYgKGN1cnJlbnQtPmxpbmtfY291bnQgPj0gTUFYX05FU1RFRF9MSU5LUykKIAkJZ290byBsb29wOwogCWlmIChjdXJyZW50LT50b3RhbF9saW5rX2NvdW50ID49IDQwKQpAQCAtMTI1MSw5ICsxMjQ5LDE1IEBACiAJCQlyZXR1cm4gLUVDSElMRDsKIAogCQluZC0+c2VxID0gc2VxOwotCQlpZiAoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX09QX1JFVkFMSURBVEUpCi0JCQlnb3RvIG5lZWRfcmV2YWxpZGF0ZTsKLWRvbmUyOgorCQlpZiAodW5saWtlbHkoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX09QX1JFVkFMSURBVEUpKSB7CisJCQlkZW50cnkgPSBkb19yZXZhbGlkYXRlX3JjdShkZW50cnksIG5kKTsKKwkJCWlmICghZGVudHJ5KQorCQkJCWdvdG8gbmVlZF9sb29rdXA7CisJCQlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCQkJZ290byBmYWlsOworCQkJaWYgKCEobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkpCisJCQkJZ290byBkb25lOworCQl9CiAJCXBhdGgtPm1udCA9IG1udDsKIAkJcGF0aC0+ZGVudHJ5ID0gZGVudHJ5OwogCQlpZiAobGlrZWx5KF9fZm9sbG93X21vdW50X3JjdShuZCwgcGF0aCwgaW5vZGUsIGZhbHNlKSkpCkBAIC0xMjY2LDggKzEyNzAsMTMgQEAKIAlpZiAoIWRlbnRyeSkKIAkJZ290byBuZWVkX2xvb2t1cDsKIGZvdW5kOgotCWlmIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfT1BfUkVWQUxJREFURSkKLQkJZ290byBuZWVkX3JldmFsaWRhdGU7CisJaWYgKHVubGlrZWx5KGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9PUF9SRVZBTElEQVRFKSkgeworCQlkZW50cnkgPSBkb19yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOworCQlpZiAoIWRlbnRyeSkKKwkJCWdvdG8gbmVlZF9sb29rdXA7CisJCWlmIChJU19FUlIoZGVudHJ5KSkKKwkJCWdvdG8gZmFpbDsKKwl9CiBkb25lOgogCXBhdGgtPm1udCA9IG1udDsKIAlwYXRoLT5kZW50cnkgPSBkZW50cnk7CkBAIC0xMzA5LDE2ICsxMzE4LDYgQEAKIAltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CiAJZ290byBmb3VuZDsKIAotbmVlZF9yZXZhbGlkYXRlOgotCWRlbnRyeSA9IGRvX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7Ci0JaWYgKCFkZW50cnkpCi0JCWdvdG8gbmVlZF9sb29rdXA7Ci0JaWYgKElTX0VSUihkZW50cnkpKQotCQlnb3RvIGZhaWw7Ci0JaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCi0JCWdvdG8gZG9uZTI7Ci0JZ290byBkb25lOwotCiBmYWlsOgogCXJldHVybiBQVFJfRVJSKGRlbnRyeSk7CiB9CkBAIC0xNDE1LDExICsxNDE0LDcgQEAKIAkJCWdvdG8gb3V0X2RwdXQ7CiAKIAkJaWYgKGlub2RlLT5pX29wLT5mb2xsb3dfbGluaykgewotCQkJLyogV2UgY29tbW9ubHkgZHJvcCByY3Utd2FsayBoZXJlICovCi0JCQlpZiAobmFtZWlkYXRhX2RlbnRyeV9kcm9wX3JjdV9tYXliZShuZCwgbmV4dC5kZW50cnkpKQotCQkJCXJldHVybiAtRUNISUxEOwotCQkJQlVHX09OKGlub2RlICE9IG5leHQuZGVudHJ5LT5kX2lub2RlKTsKLQkJCWVyciA9IGRvX2ZvbGxvd19saW5rKCZuZXh0LCBuZCk7CisJCQllcnIgPSBkb19mb2xsb3dfbGluayhpbm9kZSwgJm5leHQsIG5kKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byByZXR1cm5fZXJyOwogCQkJbmQtPmlub2RlID0gbmQtPnBhdGguZGVudHJ5LT5kX2lub2RlOwpAQCAtMTQ2MywxMCArMTQ1OCw3IEBACiAJCQlicmVhazsKIAkJaWYgKGlub2RlICYmIHVubGlrZWx5KGlub2RlLT5pX29wLT5mb2xsb3dfbGluaykgJiYKIAkJICAgIChsb29rdXBfZmxhZ3MgJiBMT09LVVBfRk9MTE9XKSkgewotCQkJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3VfbWF5YmUobmQsIG5leHQuZGVudHJ5KSkKLQkJCQlyZXR1cm4gLUVDSElMRDsKLQkJCUJVR19PTihpbm9kZSAhPSBuZXh0LmRlbnRyeS0+ZF9pbm9kZSk7Ci0JCQllcnIgPSBkb19mb2xsb3dfbGluaygmbmV4dCwgbmQpOworCQkJZXJyID0gZG9fZm9sbG93X2xpbmsoaW5vZGUsICZuZXh0LCBuZCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gcmV0dXJuX2VycjsKIAkJCW5kLT5pbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKQEAgLTE1MDAsMTIgKzE0OTIsMTUgQEAKIAkJICogV2UgbWF5IG5lZWQgdG8gY2hlY2sgdGhlIGNhY2hlZCBkZW50cnkgZm9yIHN0YWxlbmVzcy4KIAkJICovCiAJCWlmIChuZWVkX3JldmFsX2RvdChuZC0+cGF0aC5kZW50cnkpKSB7CisJCQlpZiAobmFtZWlkYXRhX2Ryb3BfcmN1X2xhc3RfbWF5YmUobmQpKQorCQkJCXJldHVybiAtRUNISUxEOwogCQkJLyogTm90ZTogd2UgZG8gbm90IGRfaW52YWxpZGF0ZSgpICovCiAJCQllcnIgPSBkX3JldmFsaWRhdGUobmQtPnBhdGguZGVudHJ5LCBuZCk7CiAJCQlpZiAoIWVycikKIAkJCQllcnIgPSAtRVNUQUxFOwogCQkJaWYgKGVyciA8IDApCiAJCQkJYnJlYWs7CisJCQlyZXR1cm4gMDsKIAkJfQogcmV0dXJuX2Jhc2U6CiAJCWlmIChuYW1laWRhdGFfZHJvcF9yY3VfbGFzdF9tYXliZShuZCkpCkBAIC0yMjY1LDggKzIyNjAsNiBAQAogCXJldHVybiBmaWxwOwogCiBleGl0OgotCWlmICghSVNfRVJSKG5kLT5pbnRlbnQub3Blbi5maWxlKSkKLQkJcmVsZWFzZV9vcGVuX2ludGVudChuZCk7CiAJcGF0aF9wdXQoJm5kLT5wYXRoKTsKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CkBAIC0yMzg5LDggKzIzODIsNiBAQAogZXhpdF9kcHV0OgogCXBhdGhfcHV0X2NvbmRpdGlvbmFsKHBhdGgsIG5kKTsKIGV4aXQ6Ci0JaWYgKCFJU19FUlIobmQtPmludGVudC5vcGVuLmZpbGUpKQotCQlyZWxlYXNlX29wZW5faW50ZW50KG5kKTsKIAlwYXRoX3B1dCgmbmQtPnBhdGgpOwogCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KQEAgLTI0NzcsNiArMjQ2OCw3IEBACiAJfQogCWF1ZGl0X2lub2RlKHBhdGhuYW1lLCBuZC5wYXRoLmRlbnRyeSk7CiAJZmlscCA9IGZpbmlzaF9vcGVuKCZuZCwgb3Blbl9mbGFnLCBhY2NfbW9kZSk7CisJcmVsZWFzZV9vcGVuX2ludGVudCgmbmQpOwogCXJldHVybiBmaWxwOwogCiBjcmVhdDoKQEAgLTI1NTMsNiArMjU0NSw3IEBACiAJCXBhdGhfcHV0KCZuZC5yb290KTsKIAlpZiAoZmlscCA9PSBFUlJfUFRSKC1FU1RBTEUpICYmICEoZmxhZ3MgJiBMT09LVVBfUkVWQUwpKQogCQlnb3RvIHJldmFsOworCXJlbGVhc2Vfb3Blbl9pbnRlbnQoJm5kKTsKIAlyZXR1cm4gZmlscDsKIAogZXhpdF9kcHV0OgpAQCAtMjU2MCw4ICsyNTUzLDYgQEAKIG91dF9wYXRoOgogCXBhdGhfcHV0KCZuZC5wYXRoKTsKIG91dF9maWxwOgotCWlmICghSVNfRVJSKG5kLmludGVudC5vcGVuLmZpbGUpKQotCQlyZWxlYXNlX29wZW5faW50ZW50KCZuZCk7CiAJZmlscCA9IEVSUl9QVFIoZXJyb3IpOwogCWdvdG8gb3V0OwogfQpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCA3YjBiOTUzLi5kMWVkZjI2IDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMTI0NCw3ICsxMjQ0LDcgQEAKIAkJICovCiAJCWJyX3dyaXRlX2xvY2sodmZzbW91bnRfbG9jayk7CiAJCWlmIChtbnRfZ2V0X2NvdW50KG1udCkgIT0gMikgewotCQkJYnJfd3JpdGVfbG9jayh2ZnNtb3VudF9sb2NrKTsKKwkJCWJyX3dyaXRlX3VubG9jayh2ZnNtb3VudF9sb2NrKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJYnJfd3JpdGVfdW5sb2NrKHZmc21vdW50X2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmMgYi9mcy9uZnMvY2FsbGJhY2suYwppbmRleCAxOTkwMTY1Li5lM2QyOTQyIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suYworKysgYi9mcy9uZnMvY2FsbGJhY2suYwpAQCAtMTM1LDMzICsxMzUsNiBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCiAvKgotICogICogQ0JfU0VRVUVOQ0Ugb3BlcmF0aW9ucyB3aWxsIGZhaWwgdW50aWwgdGhlIGNhbGxiYWNrIHNlc3Npb25pZCBpcyBzZXQuCi0gKiAgICovCi1pbnQgbmZzNF9zZXRfY2FsbGJhY2tfc2Vzc2lvbmlkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCi17Ci0Jc3RydWN0IHN2Y19zZXJ2ICpzZXJ2ID0gY2xwLT5jbF9ycGNjbGllbnQtPmNsX3hwcnQtPmJjX3NlcnY7Ci0Jc3RydWN0IG5mczRfc2Vzc2lvbmlkICpiY19zaWQ7Ci0KLQlpZiAoIXNlcnYtPnN2X2JjX3hwcnQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogb24gc3VjY2VzcyBmcmVlZCBpbiB4cHJ0X2ZyZWUgKi8KLQliY19zaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJjX3NpZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtY3B5KGJjX3NpZC0+ZGF0YSwgJmNscC0+Y2xfc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLAotCQlORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKLQlzcGluX2xvY2tfYmgoJnNlcnYtPnN2X2NiX2xvY2spOwotCXNlcnYtPnN2X2JjX3hwcnQtPnhwdF9iY19zaWQgPSBiY19zaWQ7Ci0Jc3Bpbl91bmxvY2tfYmgoJnNlcnYtPnN2X2NiX2xvY2spOwotCWRwcmludGsoIiVzIHNldCB4cHRfYmNfc2lkPSV1OiV1OiV1OiV1IGZvciBzdl9iY194cHJ0ICVwXG4iLCBfX2Z1bmNfXywKLQkJKCh1MzIgKiliY19zaWQtPmRhdGEpWzBdLCAoKHUzMiAqKWJjX3NpZC0+ZGF0YSlbMV0sCi0JCSgodTMyICopYmNfc2lkLT5kYXRhKVsyXSwgKCh1MzIgKiliY19zaWQtPmRhdGEpWzNdLAotCQlzZXJ2LT5zdl9iY194cHJ0KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIFRoZSBjYWxsYmFjayBzZXJ2aWNlIGZvciBORlN2NC4xIGNhbGxiYWNrcwogICovCiBzdGF0aWMgaW50CkBAIC0yNjYsMTAgKzIzOSw2IEBACiAJCXN0cnVjdCBuZnNfY2FsbGJhY2tfZGF0YSAqY2JfaW5mbykKIHsKIH0KLWludCBuZnM0X3NldF9jYWxsYmFja19zZXNzaW9uaWQoc3RydWN0IG5mc19jbGllbnQgKmNscCkKLXsKLQlyZXR1cm4gMDsKLX0KICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIAogLyoKQEAgLTM1OSw3OCArMzI4LDU4IEBACiAJbXV0ZXhfdW5sb2NrKCZuZnNfY2FsbGJhY2tfbXV0ZXgpOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX2dzc19jYWxsYmFja19wcmluY2lwYWwoc3RydWN0IG5mc19jbGllbnQgKmNscCwKLQkJCQkJc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKKy8qIEJvb2xlYW4gY2hlY2sgb2YgUlBDX0FVVEhfR1NTIHByaW5jaXBhbCAqLworaW50CitjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7CiAJc3RydWN0IHJwY19jbG50ICpyID0gY2xwLT5jbF9ycGNjbGllbnQ7CiAJY2hhciAqcCA9IHN2Y19nc3NfcHJpbmNpcGFsKHJxc3RwKTsKIAorCWlmIChycXN0cC0+cnFfYXV0aG9wLT5mbGF2b3VyICE9IFJQQ19BVVRIX0dTUykKKwkJcmV0dXJuIDE7CisKIAkvKiBObyBSUENfQVVUSF9HU1Mgb24gTkZTdjQuMSBiYWNrIGNoYW5uZWwgeWV0ICovCiAJaWYgKGNscC0+Y2xfbWlub3J2ZXJzaW9uICE9IDApCi0JCXJldHVybiBTVkNfRFJPUDsKKwkJcmV0dXJuIDA7CiAJLyoKIAkgKiBJdCBtaWdodCBqdXN0IGJlIGEgbm9ybWFsIHVzZXIgcHJpbmNpcGFsLCBpbiB3aGljaCBjYXNlCiAJICogdXNlcnNwYWNlIHdvbid0IGJvdGhlciB0byB0ZWxsIHVzIHRoZSBuYW1lIGF0IGFsbC4KIAkgKi8KIAlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gU1ZDX0RFTklFRDsKKwkJcmV0dXJuIDA7CiAKIAkvKiBFeHBlY3QgYSBHU1NfQ19OVF9IT1NUQkFTRURfTkFNRSBsaWtlICJuZnNAc2VydmVyaG9zdG5hbWUiICovCiAKIAlpZiAobWVtY21wKHAsICJuZnNAIiwgNCkgIT0gMCkKLQkJcmV0dXJuIFNWQ19ERU5JRUQ7CisJCXJldHVybiAwOwogCXAgKz0gNDsKIAlpZiAoc3RyY21wKHAsIHItPmNsX3NlcnZlcikgIT0gMCkKLQkJcmV0dXJuIFNWQ19ERU5JRUQ7Ci0JcmV0dXJuIFNWQ19PSzsKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKLS8qIHBnX2F1dGhlbnRpY2F0ZSBtZXRob2QgaGVscGVyICovCi1zdGF0aWMgc3RydWN0IG5mc19jbGllbnQgKm5mc19jYl9maW5kX2NsaWVudChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQotewotCXN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2Vzc2lvbmlkID0gYmNfeHBydF9zaWQocnFzdHApOwotCWludCBpc19jYl9jb21wb3VuZCA9IHJxc3RwLT5ycV9wcm9jID09IENCX0NPTVBPVU5EID8gMSA6IDA7Ci0KLQlkcHJpbnRrKCItLT4gJXMgcnFfcHJvYyAlZFxuIiwgX19mdW5jX18sIHJxc3RwLT5ycV9wcm9jKTsKLQlpZiAoc3ZjX2lzX2JhY2tjaGFubmVsKHJxc3RwKSkKLQkJLyogU2Vzc2lvbmlkICh1c3VhbGx5KSBzZXQgYWZ0ZXIgQ0JfTlVMTCBwaW5nICovCi0JCXJldHVybiBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChzdmNfYWRkcihycXN0cCksIHNlc3Npb25pZCwKLQkJCQkJCSAgaXNfY2JfY29tcG91bmQpOwotCWVsc2UKLQkJLyogTm8gY2FsbGJhY2sgaWRlbnRpZmllciBpbiBwZ19hdXRoZW50aWNhdGUgKi8KLQkJcmV0dXJuIG5mczRfZmluZF9jbGllbnRfbm9faWRlbnQoc3ZjX2FkZHIocnFzdHApKTsKLX0KLQotLyogcGdfYXV0aGVudGljYXRlIG1ldGhvZCBmb3IgbmZzdjQgY2FsbGJhY2sgdGhyZWFkcy4gKi8KKy8qCisgKiBwZ19hdXRoZW50aWNhdGUgbWV0aG9kIGZvciBuZnN2NCBjYWxsYmFjayB0aHJlYWRzLgorICoKKyAqIFRoZSBhdXRoZmxhdm9yIGhhcyBiZWVuIG5lZ290aWF0ZWQsIHNvIGFuIGluY29ycmVjdCBmbGF2b3IgaXMgYSBzZXJ2ZXIKKyAqIGJ1Zy4gRHJvcCBwYWNrZXRzIHdpdGggaW5jb3JyZWN0IGF1dGhmbGF2b3IuCisgKgorICogQWxsIG90aGVyIGNoZWNraW5nIGRvbmUgYWZ0ZXIgTkZTIGRlY29kaW5nIHdoZXJlIHRoZSBuZnNfY2xpZW50IGNhbiBiZQorICogZm91bmQgaW4gbmZzNF9jYWxsYmFja19jb21wb3VuZAorICovCiBzdGF0aWMgaW50IG5mc19jYWxsYmFja19hdXRoZW50aWNhdGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIHsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOwotCVJQQ19JRkRFQlVHKGNoYXIgYnVmW1JQQ19NQVhfQUREUkJVRkxFTl0pOwotCWludCByZXQgPSBTVkNfT0s7Ci0KLQkvKiBEb24ndCB0YWxrIHRvIHN0cmFuZ2VycyAqLwotCWNscCA9IG5mc19jYl9maW5kX2NsaWVudChycXN0cCk7Ci0JaWYgKGNscCA9PSBOVUxMKQotCQlyZXR1cm4gU1ZDX0RST1A7Ci0KLQlkcHJpbnRrKCIlczogJXMgTkZTdjQgY2FsbGJhY2shXG4iLCBfX2Z1bmNfXywKLQkJCXN2Y19wcmludF9hZGRyKHJxc3RwLCBidWYsIHNpemVvZihidWYpKSk7Ci0KIAlzd2l0Y2ggKHJxc3RwLT5ycV9hdXRob3AtPmZsYXZvdXIpIHsKLQkJY2FzZSBSUENfQVVUSF9OVUxMOgotCQkJaWYgKHJxc3RwLT5ycV9wcm9jICE9IENCX05VTEwpCi0JCQkJcmV0ID0gU1ZDX0RFTklFRDsKLQkJCWJyZWFrOwotCQljYXNlIFJQQ19BVVRIX1VOSVg6Ci0JCQlicmVhazsKLQkJY2FzZSBSUENfQVVUSF9HU1M6Ci0JCQlyZXQgPSBjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKGNscCwgcnFzdHApOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXQgPSBTVkNfREVOSUVEOworCWNhc2UgUlBDX0FVVEhfTlVMTDoKKwkJaWYgKHJxc3RwLT5ycV9wcm9jICE9IENCX05VTEwpCisJCQlyZXR1cm4gU1ZDX0RST1A7CisJCWJyZWFrOworCWNhc2UgUlBDX0FVVEhfR1NTOgorCQkvKiBObyBSUENfQVVUSF9HU1Mgc3VwcG9ydCB5ZXQgaW4gTkZTdjQuMSAqLworCQkgaWYgKHN2Y19pc19iYWNrY2hhbm5lbChycXN0cCkpCisJCQlyZXR1cm4gU1ZDX0RST1A7CiAJfQotCW5mc19wdXRfY2xpZW50KGNscCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gU1ZDX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmggYi9mcy9uZnMvY2FsbGJhY2suaAppbmRleCBkM2I0NGY5Li40NmQ5M2NlIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suaAorKysgYi9mcy9uZnMvY2FsbGJhY2suaApAQCAtNyw2ICs3LDcgQEAKICAqLwogI2lmbmRlZiBfX0xJTlVYX0ZTX05GU19DQUxMQkFDS19ICiAjZGVmaW5lIF9fTElOVVhfRlNfTkZTX0NBTExCQUNLX0gKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+CiAKICNkZWZpbmUgTkZTNF9DQUxMQkFDSyAweDQwMDAwMDAwCiAjZGVmaW5lIE5GUzRfQ0FMTEJBQ0tfWERSU0laRSAyMDQ4CkBAIC0zNyw3ICszOCw2IEBACiBzdHJ1Y3QgY2JfcHJvY2Vzc19zdGF0ZSB7CiAJX19iZTMyCQkJZHJjX3N0YXR1czsKIAlzdHJ1Y3QgbmZzX2NsaWVudAkqY2xwOwotCXN0cnVjdCBuZnM0X3Nlc3Npb25pZAkqc3ZjX3NpZDsgLyogdjQuMSBjYWxsYmFjayBzZXJ2aWNlIHNlc3Npb25pZCAqLwogfTsKIAogc3RydWN0IGNiX2NvbXBvdW5kX2hkcl9hcmcgewpAQCAtMTY4LDcgKzE2OCw3IEBACiBleHRlcm4gdm9pZCBuZnM0X2NoZWNrX2RyYWluX2JjX2NvbXBsZXRlKHN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlcyk7CiBleHRlcm4gdm9pZCBuZnM0X2NiX3Rha2Vfc2xvdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KLQorZXh0ZXJuIGludCBjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKHN0cnVjdCBuZnNfY2xpZW50ICosIHN0cnVjdCBzdmNfcnFzdCAqKTsKIGV4dGVybiBfX2JlMzIgbmZzNF9jYWxsYmFja19nZXRhdHRyKHN0cnVjdCBjYl9nZXRhdHRyYXJncyAqYXJncywKIAkJCQkgICAgc3RydWN0IGNiX2dldGF0dHJyZXMgKnJlcywKIAkJCQkgICAgc3RydWN0IGNiX3Byb2Nlc3Nfc3RhdGUgKmNwcyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jIGIvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYwppbmRleCA0YmI5MWNiLi44OTU4NzU3IDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCisrKyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKQEAgLTM3MywxNyArMzczLDExIEBACiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscDsKIAlpbnQgaTsKLQlfX2JlMzIgc3RhdHVzOworCV9fYmUzMiBzdGF0dXMgPSBodG9ubChORlM0RVJSX0JBRFNFU1NJT04pOwogCiAJY3BzLT5jbHAgPSBOVUxMOwogCi0Jc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9CQURTRVNTSU9OKTsKLQkvKiBJbmNvbWluZyBzZXNzaW9uIG11c3QgbWF0Y2ggdGhlIGNhbGxiYWNrIHNlc3Npb24gKi8KLQlpZiAobWVtY21wKCZhcmdzLT5jc2Ffc2Vzc2lvbmlkLCBjcHMtPnN2Y19zaWQsIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pKQotCQlnb3RvIG91dDsKLQotCWNscCA9IG5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGFyZ3MtPmNzYV9hZGRyLAotCQkJCQkgJmFyZ3MtPmNzYV9zZXNzaW9uaWQsIDEpOworCWNscCA9IG5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGFyZ3MtPmNzYV9hZGRyLCAmYXJncy0+Y3NhX3Nlc3Npb25pZCk7CiAJaWYgKGNscCA9PSBOVUxMKQogCQlnb3RvIG91dDsKIApAQCAtNDE0LDkgKzQwOCw5IEBACiAJcmVzLT5jc3JfaGlnaGVzdHNsb3RpZCA9IE5GUzQxX0JDX01BWF9DQUxMQkFDS1MgLSAxOwogCXJlcy0+Y3NyX3RhcmdldF9oaWdoZXN0c2xvdGlkID0gTkZTNDFfQkNfTUFYX0NBTExCQUNLUyAtIDE7CiAJbmZzNF9jYl90YWtlX3Nsb3QoY2xwKTsKLQljcHMtPmNscCA9IGNscDsgLyogcHV0IGluIG5mczRfY2FsbGJhY2tfY29tcG91bmQgKi8KIAogb3V0OgorCWNwcy0+Y2xwID0gY2xwOyAvKiBwdXQgaW4gbmZzNF9jYWxsYmFja19jb21wb3VuZCAqLwogCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5jc2FfbnJjbGlzdHM7IGkrKykKIAkJa2ZyZWUoYXJncy0+Y3NhX3JjbGlzdHNbaV0ucmNsX3JlZmNhbGxzKTsKIAlrZnJlZShhcmdzLT5jc2FfcmNsaXN0cyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfeGRyLmMgYi9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKaW5kZXggMjMxMTJjMi4uMTRlMGY5MyAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrX3hkci5jCisrKyBiL2ZzL25mcy9jYWxsYmFja194ZHIuYwpAQCAtNzk0LDEwICs3OTQsOSBAQAogCiAJaWYgKGhkcl9hcmcubWlub3J2ZXJzaW9uID09IDApIHsKIAkJY3BzLmNscCA9IG5mczRfZmluZF9jbGllbnRfaWRlbnQoaGRyX2FyZy5jYl9pZGVudCk7Ci0JCWlmICghY3BzLmNscCkKKwkJaWYgKCFjcHMuY2xwIHx8ICFjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKGNwcy5jbHAsIHJxc3RwKSkKIAkJCXJldHVybiBycGNfZHJvcF9yZXBseTsKLQl9IGVsc2UKLQkJY3BzLnN2Y19zaWQgPSBiY194cHJ0X3NpZChycXN0cCk7CisJfQogCiAJaGRyX3Jlcy50YWdsZW4gPSBoZHJfYXJnLnRhZ2xlbjsKIAloZHJfcmVzLnRhZyA9IGhkcl9hcmcudGFnOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NsaWVudC5jIGIvZnMvbmZzL2NsaWVudC5jCmluZGV4IDE5MmYyZjguLmJkM2NhMzIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jbGllbnQuYworKysgYi9mcy9uZnMvY2xpZW50LmMKQEAgLTEyMDYsMTYgKzEyMDYsMTEgQEAKICAqIEZvciBDQl9DT01QT1VORCBjYWxscywgZmluZCBhIGNsaWVudCBieSBJUCBhZGRyZXNzLCBwcm90b2NvbCB2ZXJzaW9uLAogICogbWlub3J2ZXJzaW9uLCBhbmQgc2Vzc2lvbklECiAgKgotICogQ1JFQVRFX1NFU1NJT04gdHJpZ2dlcnMgYSBDQl9OVUxMIHBpbmcgZnJvbSBzZXJ2ZXJzLiBUaGUgY2FsbGJhY2sgc2VydmljZQotICogc2Vzc2lvbmlkIGNhbiBvbmx5IGJlIHNldCBhZnRlciB0aGUgQ1JFQVRFX1NFU1NJT04gcmV0dXJuLCBzbyBhIENCX05VTEwKLSAqIGNhbiBhcnJpdmUgYmVmb3JlIHRoZSBjYWxsYmFjayBzZXNzaW9uaWQgaXMgc2V0LiBGb3IgQ0JfTlVMTCBjYWxscywKLSAqIGZpbmQgYSBjbGllbnQgYnkgSVAgYWRkcmVzcyBwcm90b2NvbCB2ZXJzaW9uLCBhbmQgbWlub3J2ZXJzaW9uLgotICoKICAqIFJldHVybnMgTlVMTCBpZiBubyBzdWNoIGNsaWVudAogICovCiBzdHJ1Y3QgbmZzX2NsaWVudCAqCiBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0JCQkgICBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKnNpZCwgaW50IGlzX2NiX2NvbXBvdW5kKQorCQkJICAgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzaWQpCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscDsKIApAQCAtMTIyNyw5ICsxMjIyLDkgQEAKIAkJaWYgKCFuZnM0X2hhc19zZXNzaW9uKGNscCkpCiAJCQljb250aW51ZTsKIAotCQkvKiBNYXRjaCBzZXNzaW9uaWQgdW5sZXNzIGNiX251bGwgY2FsbCovCi0JCWlmIChpc19jYl9jb21wb3VuZCAmJiAobWVtY21wKGNscC0+Y2xfc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLAotCQkgICAgc2lkLT5kYXRhLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKSAhPSAwKSkKKwkJLyogTWF0Y2ggc2Vzc2lvbmlkKi8KKwkJaWYgKG1lbWNtcChjbHAtPmNsX3Nlc3Npb24tPnNlc3NfaWQuZGF0YSwKKwkJICAgIHNpZC0+ZGF0YSwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTikgIT0gMCkKIAkJCWNvbnRpbnVlOwogCiAJCWF0b21pY19pbmMoJmNscC0+Y2xfY291bnQpOwpAQCAtMTI0NCw3ICsxMjM5LDcgQEAKIAogc3RydWN0IG5mc19jbGllbnQgKgogbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLAotCQkJICAgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzaWQsIGludCBpc19jYl9jb21wb3VuZCkKKwkJCSAgIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2lkKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RlbGVnYXRpb24uYyBiL2ZzL25mcy9kZWxlZ2F0aW9uLmMKaW5kZXggMzY0ZTQzMi4uYmJiYzZiZiAxMDA2NDQKLS0tIGEvZnMvbmZzL2RlbGVnYXRpb24uYworKysgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCkBAIC0yMyw4ICsyMyw2IEBACiAKIHN0YXRpYyB2b2lkIG5mc19kb19mcmVlX2RlbGVnYXRpb24oc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uKQogewotCWlmIChkZWxlZ2F0aW9uLT5jcmVkKQotCQlwdXRfcnBjY3JlZChkZWxlZ2F0aW9uLT5jcmVkKTsKIAlrZnJlZShkZWxlZ2F0aW9uKTsKIH0KIApAQCAtMzcsNiArMzUsMTAgQEAKIAogc3RhdGljIHZvaWQgbmZzX2ZyZWVfZGVsZWdhdGlvbihzdHJ1Y3QgbmZzX2RlbGVnYXRpb24gKmRlbGVnYXRpb24pCiB7CisJaWYgKGRlbGVnYXRpb24tPmNyZWQpIHsKKwkJcHV0X3JwY2NyZWQoZGVsZWdhdGlvbi0+Y3JlZCk7CisJCWRlbGVnYXRpb24tPmNyZWQgPSBOVUxMOworCX0KIAljYWxsX3JjdSgmZGVsZWdhdGlvbi0+cmN1LCBuZnNfZnJlZV9kZWxlZ2F0aW9uX2NhbGxiYWNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2RpcmVjdC5jIGIvZnMvbmZzL2RpcmVjdC5jCmluZGV4IGU2YWNlMGQuLjk5NDNhNzUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXJlY3QuYworKysgYi9mcy9uZnMvZGlyZWN0LmMKQEAgLTQwNywxNSArNDA3LDE4IEBACiAJCXBvcyArPSB2ZWMtPmlvdl9sZW47CiAJfQogCisJLyoKKwkgKiBJZiBubyBieXRlcyB3ZXJlIHN0YXJ0ZWQsIHJldHVybiB0aGUgZXJyb3IsIGFuZCBsZXQgdGhlCisJICogZ2VuZXJpYyBsYXllciBoYW5kbGUgdGhlIGNvbXBsZXRpb24uCisJICovCisJaWYgKHJlcXVlc3RlZF9ieXRlcyA9PSAwKSB7CisJCW5mc19kaXJlY3RfcmVxX3JlbGVhc2UoZHJlcSk7CisJCXJldHVybiByZXN1bHQgPCAwID8gcmVzdWx0IDogLUVJTzsKKwl9CisKIAlpZiAocHV0X2RyZXEoZHJlcSkpCiAJCW5mc19kaXJlY3RfY29tcGxldGUoZHJlcSk7Ci0KLQlpZiAocmVxdWVzdGVkX2J5dGVzICE9IDApCi0JCXJldHVybiAwOwotCi0JaWYgKHJlc3VsdCA8IDApCi0JCXJldHVybiByZXN1bHQ7Ci0JcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG5mc19kaXJlY3RfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LApAQCAtODQxLDE1ICs4NDQsMTggQEAKIAkJcG9zICs9IHZlYy0+aW92X2xlbjsKIAl9CiAKKwkvKgorCSAqIElmIG5vIGJ5dGVzIHdlcmUgc3RhcnRlZCwgcmV0dXJuIHRoZSBlcnJvciwgYW5kIGxldCB0aGUKKwkgKiBnZW5lcmljIGxheWVyIGhhbmRsZSB0aGUgY29tcGxldGlvbi4KKwkgKi8KKwlpZiAocmVxdWVzdGVkX2J5dGVzID09IDApIHsKKwkJbmZzX2RpcmVjdF9yZXFfcmVsZWFzZShkcmVxKTsKKwkJcmV0dXJuIHJlc3VsdCA8IDAgPyByZXN1bHQgOiAtRUlPOworCX0KKwogCWlmIChwdXRfZHJlcShkcmVxKSkKIAkJbmZzX2RpcmVjdF93cml0ZV9jb21wbGV0ZShkcmVxLCBkcmVxLT5pbm9kZSk7Ci0KLQlpZiAocmVxdWVzdGVkX2J5dGVzICE9IDApCi0JCXJldHVybiAwOwotCi0JaWYgKHJlc3VsdCA8IDApCi0JCXJldHVybiByZXN1bHQ7Ci0JcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG5mc19kaXJlY3Rfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggZDg1MTI0Mi4uMWNjNjAwZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTg4MSw5ICs4ODEsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBuZnNfd2NjX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5mc193Y2NfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisJdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVDSEFOR0UpCiAJCQkmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ0hBTkdFKQpAQCAtODkxLDI1ICs4OTIsMzIgQEAKIAkJbmZzaS0+Y2hhbmdlX2F0dHIgPSBmYXR0ci0+Y2hhbmdlX2F0dHI7CiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0RBVEE7CisJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKIAl9CiAJLyogSWYgd2UgaGF2ZSBhdG9taWMgV0NDIGRhdGEsIHdlIG1heSB1cGRhdGUgc29tZSBhdHRyaWJ1dGVzICovCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVDVElNRSkKIAkJCSYmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9DVElNRSkKLQkJCSYmIHRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5wcmVfY3RpbWUpKQotCQkJbWVtY3B5KCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5jdGltZSwgc2l6ZW9mKGlub2RlLT5pX2N0aW1lKSk7CisJCQkmJiB0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+cHJlX2N0aW1lKSkgeworCQltZW1jcHkoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPmN0aW1lLCBzaXplb2YoaW5vZGUtPmlfY3RpbWUpKTsKKwkJcmV0IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSOworCX0KIAogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFTVRJTUUpCiAJCQkmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTVRJTUUpCiAJCQkmJiB0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+cHJlX210aW1lKSkgewotCQkJbWVtY3B5KCZpbm9kZS0+aV9tdGltZSwgJmZhdHRyLT5tdGltZSwgc2l6ZW9mKGlub2RlLT5pX210aW1lKSk7Ci0JCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJCQluZnNpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfREFUQTsKKwkJbWVtY3B5KCZpbm9kZS0+aV9tdGltZSwgJmZhdHRyLT5tdGltZSwgc2l6ZW9mKGlub2RlLT5pX210aW1lKSk7CisJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0RBVEE7CisJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKIAl9CiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVTSVpFKQogCQkJJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1NJWkUpCiAJCQkmJiBpX3NpemVfcmVhZChpbm9kZSkgPT0gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5wcmVfc2l6ZSkKLQkJCSYmIG5mc2ktPm5wYWdlcyA9PSAwKQotCQkJaV9zaXplX3dyaXRlKGlub2RlLCBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnNpemUpKTsKKwkJCSYmIG5mc2ktPm5wYWdlcyA9PSAwKSB7CisJCWlfc2l6ZV93cml0ZShpbm9kZSwgbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKSk7CisJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0xMjIzLDcgKzEyMzEsNyBAQAogCQkJfCBORlNfSU5PX1JFVkFMX1BBR0VDQUNIRSk7CiAKIAkvKiBEbyBhdG9taWMgd2VhayBjYWNoZSBjb25zaXN0ZW5jeSB1cGRhdGVzICovCi0JbmZzX3djY191cGRhdGVfaW5vZGUoaW5vZGUsIGZhdHRyKTsKKwlpbnZhbGlkIHw9IG5mc193Y2NfdXBkYXRlX2lub2RlKGlub2RlLCBmYXR0cik7CiAKIAkvKiBNb3JlIGNhY2hlIGNvbnNpc3RlbmN5IGNoZWNrcyAqLwogCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9DSEFOR0UpIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmgKaW5kZXggNDY0NGYwNC4uY2Y5ZmRiZCAxMDA2NDQKLS0tIGEvZnMvbmZzL2ludGVybmFsLmgKKysrIGIvZnMvbmZzL2ludGVybmFsLmgKQEAgLTEzMyw4ICsxMzMsNyBAQAogZXh0ZXJuIHN0cnVjdCBuZnNfY2xpZW50ICpuZnM0X2ZpbmRfY2xpZW50X25vX2lkZW50KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKTsKIGV4dGVybiBzdHJ1Y3QgbmZzX2NsaWVudCAqbmZzNF9maW5kX2NsaWVudF9pZGVudChpbnQpOwogZXh0ZXJuIHN0cnVjdCBuZnNfY2xpZW50ICoKLW5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKiwKLQkJCSAgIGludCk7CituZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IG5mczRfc2Vzc2lvbmlkICopOwogZXh0ZXJuIHN0cnVjdCBuZnNfc2VydmVyICpuZnNfY3JlYXRlX3NlcnZlcigKIAkJCQkJY29uc3Qgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqLAogCQkJCQlzdHJ1Y3QgbmZzX2ZoICopOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczNhY2wuYyBiL2ZzL25mcy9uZnMzYWNsLmMKaW5kZXggOWY4OGM1Zi4uMjc0MzQyNyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNhY2wuYworKysgYi9mcy9uZnMvbmZzM2FjbC5jCkBAIC0zMTEsOCArMzExLDggQEAKIAlpZiAoIW5mc19zZXJ2ZXJfY2FwYWJsZShpbm9kZSwgTkZTX0NBUF9BQ0xTKSkKIAkJZ290byBvdXQ7CiAKLQkvKiBXZSBhcmUgZG9pbmcgdGhpcyBoZXJlLCBiZWNhdXNlIFhEUiBtYXJzaGFsbGluZyBjYW4gb25seQotCSAgIHJldHVybiAtRU5PTUVNLiAqLworCS8qIFdlIGFyZSBkb2luZyB0aGlzIGhlcmUgYmVjYXVzZSBYRFIgbWFyc2hhbGxpbmcgZG9lcyBub3QKKwkgKiByZXR1cm4gYW55IHJlc3VsdHMsIGl0IEJVR3MuICovCiAJc3RhdHVzID0gLUVOT1NQQzsKIAlpZiAoYWNsICE9IE5VTEwgJiYgYWNsLT5hX2NvdW50ID4gTkZTX0FDTF9NQVhfRU5UUklFUykKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM3hkci5jIGIvZnMvbmZzL25mczN4ZHIuYwppbmRleCAwMWM1ZThiLi4xODNjNmIxIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzM3hkci5jCisrKyBiL2ZzL25mcy9uZnMzeGRyLmMKQEAgLTEzMjgsMTAgKzEzMjgsMTMgQEAKIAogCWVuY29kZV9uZnNfZmgzKHhkciwgTkZTX0ZIKGFyZ3MtPmlub2RlKSk7CiAJZW5jb2RlX3VpbnQzMih4ZHIsIGFyZ3MtPm1hc2spOwotCWlmIChhcmdzLT5ucGFnZXMgIT0gMCkKLQkJeGRyX3dyaXRlX3BhZ2VzKHhkciwgYXJncy0+cGFnZXMsIDAsIGFyZ3MtPmxlbik7CiAKIAliYXNlID0gcmVxLT5ycV9zbGVuOworCWlmIChhcmdzLT5ucGFnZXMgIT0gMCkKKwkJeGRyX3dyaXRlX3BhZ2VzKHhkciwgYXJncy0+cGFnZXMsIDAsIGFyZ3MtPmxlbik7CisJZWxzZQorCQl4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIE5GU19BQ0xfSU5MSU5FX0JVRlNJWkUpOworCiAJZXJyb3IgPSBuZnNhY2xfZW5jb2RlKHhkci0+YnVmLCBiYXNlLCBhcmdzLT5pbm9kZSwKIAkJCSAgICAoYXJncy0+bWFzayAmIE5GU19BQ0wpID8KIAkJCSAgICBhcmdzLT5hY2xfYWNjZXNzIDogTlVMTCwgMSwgMCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYyBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCmluZGV4IDUxZmU2NGFjLi5mNWM5YjEyIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYworKysgYi9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAKIAkvKiBpcHY2IGxlbmd0aCBwbHVzIHBvcnQgaXMgbGVnYWwgKi8KIAlpZiAocmxlbiA+IElORVQ2X0FERFJTVFJMRU4gKyA4KSB7Ci0JCWRwcmludGsoIiVzIEludmFsaWQgYWRkcmVzcywgbGVuZ3RoICVkXG4iLCBfX2Z1bmNfXywKKwkJZHByaW50aygiJXM6IEludmFsaWQgYWRkcmVzcywgbGVuZ3RoICVkXG4iLCBfX2Z1bmNfXywKIAkJCXJsZW4pOwogCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMjI1LDYgKzIyNSwxMSBAQAogCS8qIHJlcGxhY2UgdGhlIHBvcnQgZG90cyB3aXRoIGRhc2hlcyBmb3IgdGhlIGluNF9wdG9uKCkgZGVsaW1pdGVyKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWNoYXIgKnJlcyA9IHN0cnJjaHIoYnVmLCAnLicpOworCQlpZiAoIXJlcykgeworCQkJZHByaW50aygiJXM6IEZhaWxlZCBmaW5kaW5nIGV4cGVjdGVkIGRvdHMgaW4gcG9ydFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CiAJCSpyZXMgPSAnLSc7CiAJfQogCkBAIC0yNDAsNyArMjQ1LDcgQEAKIAlwb3J0ID0gaHRvbnMoKHRtcFswXSA8PCA4KSB8ICh0bXBbMV0pKTsKIAogCWRzID0gbmZzNF9wbmZzX2RzX2FkZChpbm9kZSwgaXBfYWRkciwgcG9ydCk7Ci0JZHByaW50aygiJXMgRGVjb2RlZCBhZGRyZXNzIGFuZCBwb3J0ICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKKwlkcHJpbnRrKCIlczogRGVjb2RlZCBhZGRyZXNzIGFuZCBwb3J0ICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKIG91dF9mcmVlOgogCWtmcmVlKGJ1Zik7CiBvdXRfZXJyOgpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCA5ZDk5MmIwLi4xZmY3NmFjIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtNTAsNiArNTAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9iY194cHJ0Lmg+CiAjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgIm5mczRfZnMuaCIKICNpbmNsdWRlICJkZWxlZ2F0aW9uLmgiCkBAIC0zMjUxLDYgKzMyNTMsMzUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgYnVmX3RvX3BhZ2VzX25vc2xhYihjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4sCisJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCAqcGdiYXNlKQoreworCXN0cnVjdCBwYWdlICpuZXdwYWdlLCAqKnNwYWdlczsKKwlpbnQgcmMgPSAwOworCXNpemVfdCBsZW47CisJc3BhZ2VzID0gcGFnZXM7CisKKwlkbyB7CisJCWxlbiA9IG1pbihQQUdFX0NBQ0hFX1NJWkUsIGJ1Zmxlbik7CisJCW5ld3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCisJCWlmIChuZXdwYWdlID09IE5VTEwpCisJCQlnb3RvIHVud2luZDsKKwkJbWVtY3B5KHBhZ2VfYWRkcmVzcyhuZXdwYWdlKSwgYnVmLCBsZW4pOworICAgICAgICAgICAgICAgIGJ1ZiArPSBsZW47CisgICAgICAgICAgICAgICAgYnVmbGVuIC09IGxlbjsKKwkJKnBhZ2VzKysgPSBuZXdwYWdlOworCQlyYysrOworCX0gd2hpbGUgKGJ1ZmxlbiAhPSAwKTsKKworCXJldHVybiByYzsKKwordW53aW5kOgorCWZvcig7IHJjID4gMDsgcmMtLSkKKwkJX19mcmVlX3BhZ2Uoc3BhZ2VzW3JjLTFdKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwogc3RydWN0IG5mczRfY2FjaGVkX2FjbCB7CiAJaW50IGNhY2hlZDsKIAlzaXplX3QgbGVuOwpAQCAtMzQxOSwxMyArMzQ1MCwyMyBAQAogCQkucnBjX2FyZ3AJPSAmYXJnLAogCQkucnBjX3Jlc3AJPSAmcmVzLAogCX07Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCiAJaWYgKCFuZnM0X3NlcnZlcl9zdXBwb3J0c19hY2xzKHNlcnZlcikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlpID0gYnVmX3RvX3BhZ2VzX25vc2xhYihidWYsIGJ1ZmxlbiwgYXJnLmFjbF9wYWdlcywgJmFyZy5hY2xfcGdiYXNlKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiBpOwogCW5mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihpbm9kZSk7Ci0JYnVmX3RvX3BhZ2VzKGJ1ZiwgYnVmbGVuLCBhcmcuYWNsX3BhZ2VzLCAmYXJnLmFjbF9wZ2Jhc2UpOwogCXJldCA9IG5mczRfY2FsbF9zeW5jKHNlcnZlciwgJm1zZywgJmFyZywgJnJlcywgMSk7CisKKwkvKgorCSAqIEZyZWUgZWFjaCBwYWdlIGFmdGVyIHR4LCBzbyB0aGUgb25seSByZWYgbGVmdCBpcworCSAqIGhlbGQgYnkgdGhlIG5ldHdvcmsgc3RhY2sKKwkgKi8KKwlmb3IgKDsgaSA+IDA7IGktLSkKKwkJcHV0X3BhZ2UocGFnZXNbaS0xXSk7CisKIAkvKgogCSAqIEFjbCB1cGRhdGUgY2FuIHJlc3VsdCBpbiBpbm9kZSBhdHRyaWJ1dGUgdXBkYXRlLgogCSAqIHNvIG1hcmsgdGhlIGF0dHJpYnV0ZSBjYWNoZSBpbnZhbGlkLgpAQCAtNDU3MiwyNyArNDYxMywxNiBAQAogCSpwID0gaHRvbmwoKHUzMiljbHAtPmNsX2Jvb3RfdGltZS50dl9uc2VjKTsKIAlhcmdzLnZlcmlmaWVyID0gJnZlcmlmaWVyOwogCi0Jd2hpbGUgKDEpIHsKLQkJYXJncy5pZF9sZW4gPSBzY25wcmludGYoYXJncy5pZCwgc2l6ZW9mKGFyZ3MuaWQpLAotCQkJCQkiJXMvJXMgJXUiLAotCQkJCQljbHAtPmNsX2lwYWRkciwKLQkJCQkJcnBjX3BlZXJhZGRyMnN0cihjbHAtPmNsX3JwY2NsaWVudCwKLQkJCQkJCQkgUlBDX0RJU1BMQVlfQUREUiksCi0JCQkJCWNscC0+Y2xfaWRfdW5pcXVpZmllcik7CisJYXJncy5pZF9sZW4gPSBzY25wcmludGYoYXJncy5pZCwgc2l6ZW9mKGFyZ3MuaWQpLAorCQkJCSIlcy8lcy4lcy8ldSIsCisJCQkJY2xwLT5jbF9pcGFkZHIsCisJCQkJaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lLAorCQkJCWluaXRfdXRzbmFtZSgpLT5kb21haW5uYW1lLAorCQkJCWNscC0+Y2xfcnBjY2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3IpOwogCi0JCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOwotCi0JCWlmIChzdGF0dXMgIT0gLU5GUzRFUlJfQ0xJRF9JTlVTRSkKLQkJCWJyZWFrOwotCi0JCWlmIChzaWduYWxsZWQoKSkKLQkJCWJyZWFrOwotCi0JCWlmICgrK2NscC0+Y2xfaWRfdW5pcXVpZmllciA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0Jc3RhdHVzID0gbmZzNF9jaGVja19jbF9leGNoYW5nZV9mbGFncyhjbHAtPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gbmZzNF9jaGVja19jbF9leGNoYW5nZV9mbGFncyhjbHAtPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKIAlkcHJpbnRrKCI8LS0gJXMgc3RhdHVzPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCAyMzM2ZDUzLi5lNjc0MmI1IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC0yMzIsMTIgKzIzMiw2IEBACiAJc3RhdHVzID0gbmZzNF9wcm9jX2NyZWF0ZV9zZXNzaW9uKGNscCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBuZnM0X3NldF9jYWxsYmFja19zZXNzaW9uaWQoY2xwKTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2Vzc2lvbmlkIG5vdCBzZXQuIE5vIGNhbGxiYWNrIHNlcnZpY2VcbiIpOwotCQluZnNfY2FsbGJhY2tfZG93bigxKTsKLQkJc3RhdHVzID0gMDsKLQl9CiAJbmZzNDFfc2V0dXBfc3RhdGVfcmVuZXdhbChjbHApOwogCW5mc19tYXJrX2NsaWVudF9yZWFkeShjbHAsIE5GU19DU19SRUFEWSk7CiBvdXQ6CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCAyYWI4ZTVjLi40ZTJjMTY4IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTYwODYsMTEgKzYwODYsMTEgQEAKIAlfX2JlMzIgKnAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwogCWlmICh1bmxpa2VseSghcCkpCiAJCWdvdG8gb3V0X292ZXJmbG93OwotCWlmICghbnRvaGwoKnArKykpIHsKKwlpZiAoKnAgPT0geGRyX3plcm8pIHsKIAkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CiAJCWlmICh1bmxpa2VseSghcCkpCiAJCQlnb3RvIG91dF9vdmVyZmxvdzsKLQkJaWYgKCFudG9obCgqcCsrKSkKKwkJaWYgKCpwID09IHhkcl96ZXJvKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCWVudHJ5LT5lb2YgPSAxOwogCQlyZXR1cm4gLUVCQURDT09LSUU7CkBAIC02MTAxLDcgKzYxMDEsNyBAQAogCQlnb3RvIG91dF9vdmVyZmxvdzsKIAllbnRyeS0+cHJldl9jb29raWUgPSBlbnRyeS0+Y29va2llOwogCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZlbnRyeS0+Y29va2llKTsKLQllbnRyeS0+bGVuID0gbnRvaGwoKnArKyk7CisJZW50cnktPmxlbiA9IGJlMzJfdG9fY3B1cChwKTsKIAogCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIGVudHJ5LT5sZW4pOwogCWlmICh1bmxpa2VseSghcCkpCkBAIC02MTMyLDkgKzYxMzIsNiBAQAogCWlmIChlbnRyeS0+ZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVFlQRSkKIAkJZW50cnktPmRfdHlwZSA9IG5mc191bW9kZV90b19kdHlwZShlbnRyeS0+ZmF0dHItPm1vZGUpOwogCi0JaWYgKHZlcmlmeV9hdHRyX2xlbih4ZHIsIHAsIGxlbikgPCAwKQotCQlnb3RvIG91dF9vdmVyZmxvdzsKLQogCXJldHVybiAwOwogCiBvdXRfb3ZlcmZsb3c6CmRpZmYgLS1naXQgYS9mcy9uZnMvcG5mcy5jIGIvZnMvbmZzL3BuZnMuYwppbmRleCBiYzQwODk3Li4xYjFiYzFhIDEwMDY0NAotLS0gYS9mcy9uZnMvcG5mcy5jCisrKyBiL2ZzL25mcy9wbmZzLmMKQEAgLTk1MSw3ICs5NTEsNyBAQAogewogCXN0cnVjdCBwbmZzX2RldmljZWlkX2NhY2hlICpsb2NhbCA9IGNscC0+Y2xfZGV2aWRfY2FjaGU7CiAKLQlkcHJpbnRrKCItLT4gJXMgY2xfZGV2aWRfY2FjaGUgJXBcbiIsIF9fZnVuY19fLCBjbHAtPmNsX2RldmlkX2NhY2hlKTsKKwlkcHJpbnRrKCItLT4gJXMgKHslZH0pXG4iLCBfX2Z1bmNfXywgYXRvbWljX3JlYWQoJmxvY2FsLT5kY19yZWYpKTsKIAlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmbG9jYWwtPmRjX3JlZiwgJmNscC0+Y2xfbG9jaykpIHsKIAkJaW50IGk7CiAJCS8qIFZlcmlmeSBjYWNoZSBpcyBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCAxMGQ2NDhlYS4uYzgyNzhmNCAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTkzMiw3ICs5MzIsNyBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKIAkJZGF0YSA9IGxpc3RfZW50cnkobGlzdC5uZXh0LCBzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEsIHBhZ2VzKTsKIAkJbGlzdF9kZWwoJmRhdGEtPnBhZ2VzKTsKLQkJbmZzX3dyaXRlZGF0YV9yZWxlYXNlKGRhdGEpOworCQluZnNfd3JpdGVkYXRhX2ZyZWUoZGF0YSk7CiAJfQogCW5mc19yZWRpcnR5X3JlcXVlc3QocmVxKTsKIAlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL25mc19jb21tb24vbmZzYWNsLmMgYi9mcy9uZnNfY29tbW9uL25mc2FjbC5jCmluZGV4IGZjMWM1MjUuLjg0YzI3ZDYgMTAwNjQ0Ci0tLSBhL2ZzL25mc19jb21tb24vbmZzYWNsLmMKKysrIGIvZnMvbmZzX2NvbW1vbi9uZnNhY2wuYwpAQCAtNDIsNiArNDIsMTEgQEAKIAlnaWRfdCBnaWQ7CiB9OwogCitzdHJ1Y3QgbmZzYWNsX3NpbXBsZV9hY2wgeworCXN0cnVjdCBwb3NpeF9hY2wgYWNsOworCXN0cnVjdCBwb3NpeF9hY2xfZW50cnkgYWNlWzRdOworfTsKKwogc3RhdGljIGludAogeGRyX25mc2FjZV9lbmNvZGUoc3RydWN0IHhkcl9hcnJheTJfZGVzYyAqZGVzYywgdm9pZCAqZWxlbSkKIHsKQEAgLTcyLDkgKzc3LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIGludAotbmZzYWNsX2VuY29kZShzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCBlbmNvZGVfZW50cmllcywgaW50IHR5cGVmbGFnKQorLyoqCisgKiBuZnNhY2xfZW5jb2RlIC0gRW5jb2RlIGFuIE5GU3YzIEFDTAorICoKKyAqIEBidWY6IGRlc3RpbmF0aW9uIHhkcl9idWYgdG8gY29udGFpbiBYRFIgZW5jb2RlZCBBQ0wKKyAqIEBiYXNlOiBieXRlIG9mZnNldCBpbiB4ZHJfYnVmIHdoZXJlIFhEUidkIEFDTCBiZWdpbnMKKyAqIEBpbm9kZTogaW5vZGUgb2YgZmlsZSB3aG9zZSBBQ0wgdGhpcyBpcworICogQGFjbDogcG9zaXhfYWNsIHRvIGVuY29kZQorICogQGVuY29kZV9lbnRyaWVzOiB3aGV0aGVyIHRvIGVuY29kZSBBQ0VzIGFzIHdlbGwKKyAqIEB0eXBlZmxhZzogQUNMIHR5cGU6IE5GU19BQ0xfREVGQVVMVCBvciB6ZXJvCisgKgorICogUmV0dXJucyBzaXplIG9mIGVuY29kZWQgQUNMIGluIGJ5dGVzIG9yIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUuCisgKi8KK2ludCBuZnNhY2xfZW5jb2RlKHN0cnVjdCB4ZHJfYnVmICpidWYsIHVuc2lnbmVkIGludCBiYXNlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IGVuY29kZV9lbnRyaWVzLCBpbnQgdHlwZWZsYWcpCiB7CiAJaW50IGVudHJpZXMgPSAoYWNsICYmIGFjbC0+YV9jb3VudCkgPyBtYXhfdChpbnQsIGFjbC0+YV9jb3VudCwgNCkgOiAwOwogCXN0cnVjdCBuZnNhY2xfZW5jb2RlX2Rlc2MgbmZzYWNsX2Rlc2MgPSB7CkBAIC04OCwxNyArMTA0LDIyIEBACiAJCS51aWQgPSBpbm9kZS0+aV91aWQsCiAJCS5naWQgPSBpbm9kZS0+aV9naWQsCiAJfTsKKwlzdHJ1Y3QgbmZzYWNsX3NpbXBsZV9hY2wgYWNsYnVmOwogCWludCBlcnI7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsMiA9IE5VTEw7CiAKIAlpZiAoZW50cmllcyA+IE5GU19BQ0xfTUFYX0VOVFJJRVMgfHwKIAkgICAgeGRyX2VuY29kZV93b3JkKGJ1ZiwgYmFzZSwgZW50cmllcykpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChlbmNvZGVfZW50cmllcyAmJiBhY2wgJiYgYWNsLT5hX2NvdW50ID09IDMpIHsKLQkJLyogRmFrZSB1cCBhbiBBQ0xfTUFTSyBlbnRyeS4gKi8KLQkJYWNsMiA9IHBvc2l4X2FjbF9hbGxvYyg0LCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFhY2wyKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDIgPSAmYWNsYnVmLmFjbDsKKworCQkvKiBBdm9pZCB0aGUgdXNlIG9mIHBvc2l4X2FjbF9hbGxvYygpLiAgbmZzYWNsX2VuY29kZSgpIGlzCisJCSAqIGludm9rZWQgaW4gY29udGV4dHMgd2hlcmUgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGlzCisJCSAqIGZhdGFsLiAgRm9ydHVuYXRlbHkgdGhpcyBmYWtlIEFDTCBpcyBzbWFsbCBlbm91Z2ggdG8KKwkJICogY29uc3RydWN0IG9uIHRoZSBzdGFjay4gKi8KKwkJbWVtc2V0KGFjbDIsIDAsIHNpemVvZihhY2wyKSk7CisJCXBvc2l4X2FjbF9pbml0KGFjbDIsIDQpOworCiAJCS8qIEluc2VydCBlbnRyaWVzIGluIGNhbm9uaWNhbCBvcmRlcjogb3RoZXIgb3JkZXJzIHNlZW0KIAkJIHRvIGNvbmZ1c2UgU29sYXJpcyBWeEZTLiAqLwogCQlhY2wyLT5hX2VudHJpZXNbMF0gPSBhY2wtPmFfZW50cmllc1swXTsgIC8qIEFDTF9VU0VSX09CSiAqLwpAQCAtMTA5LDggKzEzMCw2IEBACiAJCW5mc2FjbF9kZXNjLmFjbCA9IGFjbDI7CiAJfQogCWVyciA9IHhkcl9lbmNvZGVfYXJyYXkyKGJ1ZiwgYmFzZSArIDQsICZuZnNhY2xfZGVzYy5kZXNjKTsKLQlpZiAoYWNsMikKLQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsMik7CiAJaWYgKCFlcnIpCiAJCWVyciA9IDggKyBuZnNhY2xfZGVzYy5kZXNjLmVsZW1fc2l6ZSAqCiAJCQkgIG5mc2FjbF9kZXNjLmRlc2MuYXJyYXlfbGVuOwpAQCAtMjI0LDkgKzI0MywxOCBAQAogCXJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQKLW5mc2FjbF9kZWNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCAqYWNsY250LAotCSAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKipwYWNsKQorLyoqCisgKiBuZnNhY2xfZGVjb2RlIC0gRGVjb2RlIGFuIE5GU3YzIEFDTAorICoKKyAqIEBidWY6IHhkcl9idWYgY29udGFpbmluZyBYRFInZCBBQ0wgZGF0YSB0byBkZWNvZGUKKyAqIEBiYXNlOiBieXRlIG9mZnNldCBpbiB4ZHJfYnVmIHdoZXJlIFhEUidkIEFDTCBiZWdpbnMKKyAqIEBhY2xjbnQ6IGNvdW50IG9mIEFDRXMgaW4gZGVjb2RlZCBwb3NpeF9hY2wKKyAqIEBwYWNsOiBidWZmZXIgaW4gd2hpY2ggdG8gcGxhY2UgZGVjb2RlZCBwb3NpeF9hY2wKKyAqCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGRlY29kZWQgQUNMIGluIGJ5dGVzLCBvciBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLgorICovCitpbnQgbmZzYWNsX2RlY29kZShzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgaW50ICphY2xjbnQsCisJCSAgc3RydWN0IHBvc2l4X2FjbCAqKnBhY2wpCiB7CiAJc3RydWN0IG5mc2FjbF9kZWNvZGVfZGVzYyBuZnNhY2xfZGVzYyA9IHsKIAkJLmRlc2MgPSB7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRjYWxsYmFjay5jIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwppbmRleCAzYmU5NzVlLi5jZGUzNmNiIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRjYWxsYmFjay5jCisrKyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKQEAgLTQ4NCw3ICs0ODQsNyBAQAogb3V0OgogCXJldHVybiBzdGF0dXM7CiBvdXRfZGVmYXVsdDoKLQlyZXR1cm4gbmZzX2NiX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKKwlyZXR1cm4gbmZzX2NiX3N0YXRfdG9fZXJybm8obmZzZXJyKTsKIH0KIAogLyoKQEAgLTU2NCwxMSArNTY0LDkgQEAKIAlpZiAodW5saWtlbHkoc3RhdHVzKSkKIAkJZ290byBvdXQ7CiAJaWYgKHVubGlrZWx5KG5mc2VyciAhPSBORlM0X09LKSkKLQkJZ290byBvdXRfZGVmYXVsdDsKKwkJc3RhdHVzID0gbmZzX2NiX3N0YXRfdG9fZXJybm8obmZzZXJyKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwotb3V0X2RlZmF1bHQ6Ci0JcmV0dXJuIG5mc19jYl9zdGF0X3RvX2Vycm5vKHN0YXR1cyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRzdGF0ZS5jIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwppbmRleCBkOThkMDIxLi41NGI2MGJmIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKQEAgLTIzMCw5ICsyMzAsNiBAQAogCWRwLT5kbF9jbGllbnQgPSBjbHA7CiAJZ2V0X25mczRfZmlsZShmcCk7CiAJZHAtPmRsX2ZpbGUgPSBmcDsKLQlkcC0+ZGxfdmZzX2ZpbGUgPSBmaW5kX3JlYWRhYmxlX2ZpbGUoZnApOwotCWdldF9maWxlKGRwLT5kbF92ZnNfZmlsZSk7Ci0JZHAtPmRsX2Zsb2NrID0gTlVMTDsKIAlkcC0+ZGxfdHlwZSA9IHR5cGU7CiAJZHAtPmRsX3N0YXRlaWQuc2lfYm9vdCA9IGJvb3RfdGltZTsKIAlkcC0+ZGxfc3RhdGVpZC5zaV9zdGF0ZW93bmVyaWQgPSBjdXJyZW50X2RlbGVnaWQrKzsKQEAgLTI0MSw4ICsyMzgsNiBAQAogCWZoX2NvcHlfc2hhbGxvdygmZHAtPmRsX2ZoLCAmY3VycmVudF9maC0+ZmhfaGFuZGxlKTsKIAlkcC0+ZGxfdGltZSA9IDA7CiAJYXRvbWljX3NldCgmZHAtPmRsX2NvdW50LCAxKTsKLQlsaXN0X2FkZCgmZHAtPmRsX3BlcmZpbGUsICZmcC0+ZmlfZGVsZWdhdGlvbnMpOwotCWxpc3RfYWRkKCZkcC0+ZGxfcGVyY2xudCwgJmNscC0+Y2xfZGVsZWdhdGlvbnMpOwogCUlOSVRfV09SSygmZHAtPmRsX3JlY2FsbC5jYl93b3JrLCBuZnNkNF9kb19jYWxsYmFja19ycGMpOwogCXJldHVybiBkcDsKIH0KQEAgLTI1MywzNiArMjQ4LDMwIEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRwLT5kbF9jb3VudCkpIHsKIAkJZHByaW50aygiTkZTRDogZnJlZWluZyBkcCAlcFxuIixkcCk7CiAJCXB1dF9uZnM0X2ZpbGUoZHAtPmRsX2ZpbGUpOwotCQlmcHV0KGRwLT5kbF92ZnNfZmlsZSk7CiAJCWttZW1fY2FjaGVfZnJlZShkZWxlZ19zbGFiLCBkcCk7CiAJCW51bV9kZWxlZ2F0aW9ucy0tOwogCX0KIH0KIAotLyogUmVtb3ZlIHRoZSBhc3NvY2lhdGVkIGZpbGVfbG9jayBmaXJzdCwgdGhlbiByZW1vdmUgdGhlIGRlbGVnYXRpb24uCi0gKiBsZWFzZV9tb2RpZnkoKSBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBGU19MRUFTRSBmaWxlX2xvY2sgZnJvbQotICogdGhlIGlfZmxvY2sgbGlzdCwgZXZlbnR1YWxseSBjYWxsaW5nIG5mc2QncyBsb2NrX21hbmFnZXIKLSAqIGZsX3JlbGVhc2VfY2FsbGJhY2suCi0gKi8KLXN0YXRpYyB2b2lkCi1uZnM0X2Nsb3NlX2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApCitzdGF0aWMgdm9pZCBuZnM0X3B1dF9kZWxlZ19sZWFzZShzdHJ1Y3QgbmZzNF9maWxlICpmcCkKIHsKLQlkcHJpbnRrKCJORlNEOiBjbG9zZV9kZWxlZ2F0aW9uIGRwICVwXG4iLGRwKTsKLQkvKiBYWFg6IGRvIHdlIGV2ZW4gbmVlZCB0aGlzIGNoZWNrPzogKi8KLQlpZiAoZHAtPmRsX2Zsb2NrKQotCQl2ZnNfc2V0bGVhc2UoZHAtPmRsX3Zmc19maWxlLCBGX1VOTENLLCAmZHAtPmRsX2Zsb2NrKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZnAtPmZpX2RlbGVnZWVzKSkgeworCQl2ZnNfc2V0bGVhc2UoZnAtPmZpX2RlbGVnX2ZpbGUsIEZfVU5MQ0ssICZmcC0+ZmlfbGVhc2UpOworCQlmcC0+ZmlfbGVhc2UgPSBOVUxMOworCQlmcC0+ZmlfZGVsZWdfZmlsZSA9IE5VTEw7CisJfQogfQogCiAvKiBDYWxsZWQgdW5kZXIgdGhlIHN0YXRlIGxvY2suICovCiBzdGF0aWMgdm9pZAogdW5oYXNoX2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApCiB7Ci0JbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3BlcmZpbGUpOwogCWxpc3RfZGVsX2luaXQoJmRwLT5kbF9wZXJjbG50KTsKIAlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZkcC0+ZGxfcGVyZmlsZSk7CiAJbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3JlY2FsbF9scnUpOwogCXNwaW5fdW5sb2NrKCZyZWNhbGxfbG9jayk7Ci0JbmZzNF9jbG9zZV9kZWxlZ2F0aW9uKGRwKTsKKwluZnM0X3B1dF9kZWxlZ19sZWFzZShkcC0+ZGxfZmlsZSk7CiAJbmZzNF9wdXRfZGVsZWdhdGlvbihkcCk7CiB9CiAKQEAgLTk1OCw4ICs5NDcsNiBAQAogCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmY2xwLT5jbF9kZWxlZ2F0aW9ucykpIHsKIAkJZHAgPSBsaXN0X2VudHJ5KGNscC0+Y2xfZGVsZWdhdGlvbnMubmV4dCwgc3RydWN0IG5mczRfZGVsZWdhdGlvbiwgZGxfcGVyY2xudCk7Ci0JCWRwcmludGsoIk5GU0Q6IGV4cGlyZSBjbGllbnQuIGRwICVwLCBmcCAlcFxuIiwgZHAsCi0JCQkJZHAtPmRsX2Zsb2NrKTsKIAkJbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3BlcmNsbnQpOwogCQlsaXN0X21vdmUoJmRwLT5kbF9yZWNhbGxfbHJ1LCAmcmVhcGxpc3QpOwogCX0KQEAgLTIwNzgsNiArMjA2NSw3IEBACiAJCWZwLT5maV9pbm9kZSA9IGlncmFiKGlubyk7CiAJCWZwLT5maV9pZCA9IGN1cnJlbnRfZmlsZWlkKys7CiAJCWZwLT5maV9oYWRfY29uZmxpY3QgPSBmYWxzZTsKKwkJZnAtPmZpX2xlYXNlID0gTlVMTDsKIAkJbWVtc2V0KGZwLT5maV9mZHMsIDAsIHNpemVvZihmcC0+ZmlfZmRzKSk7CiAJCW1lbXNldChmcC0+ZmlfYWNjZXNzLCAwLCBzaXplb2YoZnAtPmZpX2FjY2VzcykpOwogCQlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKQEAgLTIzMjksMjMgKzIzMTcsOCBAQAogCQluZnM0X2ZpbGVfcHV0X2FjY2VzcyhmcCwgT19SRE9OTFkpOwogfQogCi0vKgotICogU3Bhd24gYSB0aHJlYWQgdG8gcGVyZm9ybSBhIHJlY2FsbCBvbiB0aGUgZGVsZWdhdGlvbiByZXByZXNlbnRlZAotICogYnkgdGhlIGxlYXNlIChmaWxlX2xvY2spCi0gKgotICogQ2FsbGVkIGZyb20gYnJlYWtfbGVhc2UoKSB3aXRoIGxvY2tfZmxvY2tzKCkgaGVsZC4KLSAqIE5vdGU6IHdlIGFzc3VtZSBicmVha19sZWFzZSB3aWxsIG9ubHkgY2FsbCB0aGlzICpvbmNlKiBmb3IgYW55IGdpdmVuCi0gKiBsZWFzZS4KLSAqLwotc3RhdGljCi12b2lkIG5mc2RfYnJlYWtfZGVsZWdfY2Ioc3RydWN0IGZpbGVfbG9jayAqZmwpCitzdGF0aWMgdm9pZCBuZnNkX2JyZWFrX29uZV9kZWxlZyhzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCkKIHsKLQlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCA9IChzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICopZmwtPmZsX293bmVyOwotCi0JZHByaW50aygiTkZTRCBuZnNkX2JyZWFrX2RlbGVnX2NiOiBkcCAlcCBmbCAlcFxuIixkcCxmbCk7Ci0JaWYgKCFkcCkKLQkJcmV0dXJuOwotCiAJLyogV2UncmUgYXNzdW1pbmcgdGhlIHN0YXRlIGNvZGUgbmV2ZXIgZHJvcHMgaXRzIHJlZmVyZW5jZQogCSAqIHdpdGhvdXQgZmlyc3QgcmVtb3ZpbmcgdGhlIGxlYXNlLiAgU2luY2Ugd2UncmUgaW4gdGhpcyBsZWFzZQogCSAqIGNhbGxiYWNrIChhbmQgc2luY2UgdGhlIGxlYXNlIGNvZGUgaXMgc2VyaWFsaXplZCBieSB0aGUga2VybmVsCkBAIC0yMzUzLDIyICsyMzI2LDM1IEBACiAJICogaXQncyBzYWZlIHRvIHRha2UgYSByZWZlcmVuY2U6ICovCiAJYXRvbWljX2luYygmZHAtPmRsX2NvdW50KTsKIAotCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmRwLT5kbF9yZWNhbGxfbHJ1LCAmZGVsX3JlY2FsbF9scnUpOwotCXNwaW5fdW5sb2NrKCZyZWNhbGxfbG9jayk7CiAKIAkvKiBvbmx5IHBsYWNlIGRsX3RpbWUgaXMgc2V0LiBwcm90ZWN0ZWQgYnkgbG9ja19mbG9ja3MqLwogCWRwLT5kbF90aW1lID0gZ2V0X3NlY29uZHMoKTsKIAorCW5mc2Q0X2NiX3JlY2FsbChkcCk7Cit9CisKKy8qIENhbGxlZCBmcm9tIGJyZWFrX2xlYXNlKCkgd2l0aCBsb2NrX2Zsb2NrcygpIGhlbGQuICovCitzdGF0aWMgdm9pZCBuZnNkX2JyZWFrX2RlbGVnX2NiKHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCXN0cnVjdCBuZnM0X2ZpbGUgKmZwID0gKHN0cnVjdCBuZnM0X2ZpbGUgKilmbC0+Zmxfb3duZXI7CisJc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHA7CisKKwlCVUdfT04oIWZwKTsKKwkvKiBXZSBhc3N1bWUgYnJlYWtfbGVhc2UgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgbGVhc2U6ICovCisJQlVHX09OKGZwLT5maV9oYWRfY29uZmxpY3QpOwogCS8qCiAJICogV2UgZG9uJ3Qgd2FudCB0aGUgbG9ja3MgY29kZSB0byB0aW1lb3V0IHRoZSBsZWFzZSBmb3IgdXM7Ci0JICogd2UnbGwgcmVtb3ZlIGl0IG91cnNlbGYgaWYgdGhlIGRlbGVnYXRpb24gaXNuJ3QgcmV0dXJuZWQKLQkgKiBpbiB0aW1lLgorCSAqIHdlJ2xsIHJlbW92ZSBpdCBvdXJzZWxmIGlmIGEgZGVsZWdhdGlvbiBpc24ndCByZXR1cm5lZAorCSAqIGluIHRpbWU6CiAJICovCiAJZmwtPmZsX2JyZWFrX3RpbWUgPSAwOwogCi0JZHAtPmRsX2ZpbGUtPmZpX2hhZF9jb25mbGljdCA9IHRydWU7Ci0JbmZzZDRfY2JfcmVjYWxsKGRwKTsKKwlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKKwlmcC0+ZmlfaGFkX2NvbmZsaWN0ID0gdHJ1ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRwLCAmZnAtPmZpX2RlbGVnYXRpb25zLCBkbF9wZXJmaWxlKQorCQluZnNkX2JyZWFrX29uZV9kZWxlZyhkcCk7CisJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKIH0KIAogc3RhdGljCkBAIC0yNDU5LDEzICsyNDQ1LDE1IEBACiBzdGF0aWMgc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqCiBmaW5kX2RlbGVnYXRpb25fZmlsZShzdHJ1Y3QgbmZzNF9maWxlICpmcCwgc3RhdGVpZF90ICpzdGlkKQogewotCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwOworCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwID0gTlVMTDsKIAorCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHAsICZmcC0+ZmlfZGVsZWdhdGlvbnMsIGRsX3BlcmZpbGUpIHsKIAkJaWYgKGRwLT5kbF9zdGF0ZWlkLnNpX3N0YXRlb3duZXJpZCA9PSBzdGlkLT5zaV9zdGF0ZW93bmVyaWQpCi0JCQlyZXR1cm4gZHA7CisJCQlicmVhazsKIAl9Ci0JcmV0dXJuIE5VTEw7CisJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKKwlyZXR1cm4gZHA7CiB9CiAKIGludCBzaGFyZV9hY2Nlc3NfdG9fZmxhZ3ModTMyIHNoYXJlX2FjY2VzcykKQEAgLTI2NDEsNiArMjYyOSw2NiBAQAogCXJldHVybiBjbHAtPmNsX21pbm9ydmVyc2lvbiAmJiBjbHAtPmNsX2NiX3N0YXRlID09IE5GU0Q0X0NCX1VOS05PV047CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrICpuZnM0X2FsbG9jX2luaXRfbGVhc2Uoc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAsIGludCBmbGFnKQoreworCXN0cnVjdCBmaWxlX2xvY2sgKmZsOworCisJZmwgPSBsb2Nrc19hbGxvY19sb2NrKCk7CisJaWYgKCFmbCkKKwkJcmV0dXJuIE5VTEw7CisJbG9ja3NfaW5pdF9sb2NrKGZsKTsKKwlmbC0+ZmxfbG1vcHMgPSAmbmZzZF9sZWFzZV9tbmdfb3BzOworCWZsLT5mbF9mbGFncyA9IEZMX0xFQVNFOworCWZsLT5mbF90eXBlID0gZmxhZyA9PSBORlM0X09QRU5fREVMRUdBVEVfUkVBRD8gRl9SRExDSzogRl9XUkxDSzsKKwlmbC0+ZmxfZW5kID0gT0ZGU0VUX01BWDsKKwlmbC0+Zmxfb3duZXIgPSAoZmxfb3duZXJfdCkoZHAtPmRsX2ZpbGUpOworCWZsLT5mbF9waWQgPSBjdXJyZW50LT50Z2lkOworCXJldHVybiBmbDsKK30KKworc3RhdGljIGludCBuZnM0X3NldGxlYXNlKHN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwLCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3QgbmZzNF9maWxlICpmcCA9IGRwLT5kbF9maWxlOworCXN0cnVjdCBmaWxlX2xvY2sgKmZsOworCWludCBzdGF0dXM7CisKKwlmbCA9IG5mczRfYWxsb2NfaW5pdF9sZWFzZShkcCwgZmxhZyk7CisJaWYgKCFmbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZmwtPmZsX2ZpbGUgPSBmaW5kX3JlYWRhYmxlX2ZpbGUoZnApOworCWxpc3RfYWRkKCZkcC0+ZGxfcGVyY2xudCwgJmRwLT5kbF9jbGllbnQtPmNsX2RlbGVnYXRpb25zKTsKKwlzdGF0dXMgPSB2ZnNfc2V0bGVhc2UoZmwtPmZsX2ZpbGUsIGZsLT5mbF90eXBlLCAmZmwpOworCWlmIChzdGF0dXMpIHsKKwkJbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3BlcmNsbnQpOworCQlsb2Nrc19mcmVlX2xvY2soZmwpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZnAtPmZpX2xlYXNlID0gZmw7CisJZnAtPmZpX2RlbGVnX2ZpbGUgPSBmbC0+ZmxfZmlsZTsKKwlnZXRfZmlsZShmcC0+ZmlfZGVsZWdfZmlsZSk7CisJYXRvbWljX3NldCgmZnAtPmZpX2RlbGVnZWVzLCAxKTsKKwlsaXN0X2FkZCgmZHAtPmRsX3BlcmZpbGUsICZmcC0+ZmlfZGVsZWdhdGlvbnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5mczRfc2V0X2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAsIGludCBmbGFnKQoreworCXN0cnVjdCBuZnM0X2ZpbGUgKmZwID0gZHAtPmRsX2ZpbGU7CisKKwlpZiAoIWZwLT5maV9sZWFzZSkKKwkJcmV0dXJuIG5mczRfc2V0bGVhc2UoZHAsIGZsYWcpOworCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOworCWlmIChmcC0+ZmlfaGFkX2NvbmZsaWN0KSB7CisJCXNwaW5fdW5sb2NrKCZyZWNhbGxfbG9jayk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlhdG9taWNfaW5jKCZmcC0+ZmlfZGVsZWdlZXMpOworCWxpc3RfYWRkKCZkcC0+ZGxfcGVyZmlsZSwgJmZwLT5maV9kZWxlZ2F0aW9ucyk7CisJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKKwlsaXN0X2FkZCgmZHAtPmRsX3BlcmNsbnQsICZkcC0+ZGxfY2xpZW50LT5jbF9kZWxlZ2F0aW9ucyk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBBdHRlbXB0IHRvIGhhbmQgb3V0IGEgZGVsZWdhdGlvbi4KICAqLwpAQCAtMjY1MCw3ICsyNjk4LDYgQEAKIAlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcDsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3AgPSBzdHAtPnN0X3N0YXRlb3duZXI7CiAJaW50IGNiX3VwOwotCXN0cnVjdCBmaWxlX2xvY2sgKmZsOwogCWludCBzdGF0dXMsIGZsYWcgPSAwOwogCiAJY2JfdXAgPSBuZnNkNF9jYl9jaGFubmVsX2dvb2Qoc29wLT5zb19jbGllbnQpOwpAQCAtMjY4MSwzNiArMjcyOCwxMSBAQAogCX0KIAogCWRwID0gYWxsb2NfaW5pdF9kZWxlZyhzb3AtPnNvX2NsaWVudCwgc3RwLCBmaCwgZmxhZyk7Ci0JaWYgKGRwID09IE5VTEwpIHsKLQkJZmxhZyA9IE5GUzRfT1BFTl9ERUxFR0FURV9OT05FOwotCQlnb3RvIG91dDsKLQl9Ci0Jc3RhdHVzID0gLUVOT01FTTsKLQlmbCA9IGxvY2tzX2FsbG9jX2xvY2soKTsKLQlpZiAoIWZsKQotCQlnb3RvIG91dDsKLQlsb2Nrc19pbml0X2xvY2soZmwpOwotCWZsLT5mbF9sbW9wcyA9ICZuZnNkX2xlYXNlX21uZ19vcHM7Ci0JZmwtPmZsX2ZsYWdzID0gRkxfTEVBU0U7Ci0JZmwtPmZsX3R5cGUgPSBmbGFnID09IE5GUzRfT1BFTl9ERUxFR0FURV9SRUFEPyBGX1JETENLOiBGX1dSTENLOwotCWZsLT5mbF9lbmQgPSBPRkZTRVRfTUFYOwotCWZsLT5mbF9vd25lciA9ICAoZmxfb3duZXJfdClkcDsKLQlmbC0+ZmxfZmlsZSA9IGZpbmRfcmVhZGFibGVfZmlsZShzdHAtPnN0X2ZpbGUpOwotCUJVR19PTighZmwtPmZsX2ZpbGUpOwotCWZsLT5mbF9waWQgPSBjdXJyZW50LT50Z2lkOwotCWRwLT5kbF9mbG9jayA9IGZsOwotCi0JLyogdmZzX3NldGxlYXNlIGNoZWNrcyB0byBzZWUgaWYgZGVsZWdhdGlvbiBzaG91bGQgYmUgaGFuZGVkIG91dC4KLQkgKiB0aGUgbG9ja19tYW5hZ2VyIGNhbGxiYWNrIGZsX2NoYW5nZSBpcyB1c2VkCi0JICovCi0JaWYgKChzdGF0dXMgPSB2ZnNfc2V0bGVhc2UoZmwtPmZsX2ZpbGUsIGZsLT5mbF90eXBlLCAmZmwpKSkgewotCQlkcHJpbnRrKCJORlNEOiBzZXRsZWFzZSBmYWlsZWQgWyVkXSwgbm8gZGVsZWdhdGlvblxuIiwgc3RhdHVzKTsKLQkJZHAtPmRsX2Zsb2NrID0gTlVMTDsKLQkJbG9ja3NfZnJlZV9sb2NrKGZsKTsKLQkJdW5oYXNoX2RlbGVnYXRpb24oZHApOwotCQlmbGFnID0gTkZTNF9PUEVOX0RFTEVHQVRFX05PTkU7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoZHAgPT0gTlVMTCkKKwkJZ290byBvdXRfbm9fZGVsZWc7CisJc3RhdHVzID0gbmZzNF9zZXRfZGVsZWdhdGlvbihkcCwgZmxhZyk7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXRfZnJlZTsKIAogCW1lbWNweSgmb3Blbi0+b3BfZGVsZWdhdGVfc3RhdGVpZCwgJmRwLT5kbF9zdGF0ZWlkLCBzaXplb2YoZHAtPmRsX3N0YXRlaWQpKTsKIApAQCAtMjcyMiw2ICsyNzQ0LDEyIEBACiAJCQkmJiBvcGVuLT5vcF9kZWxlZ2F0ZV90eXBlICE9IE5GUzRfT1BFTl9ERUxFR0FURV9OT05FKQogCQlkcHJpbnRrKCJORlNEOiBXQVJOSU5HOiByZWZ1c2luZyBkZWxlZ2F0aW9uIHJlY2xhaW1cbiIpOwogCW9wZW4tPm9wX2RlbGVnYXRlX3R5cGUgPSBmbGFnOworCXJldHVybjsKK291dF9mcmVlOgorCW5mczRfcHV0X2RlbGVnYXRpb24oZHApOworb3V0X25vX2RlbGVnOgorCWZsYWcgPSBORlM0X09QRU5fREVMRUdBVEVfTk9ORTsKKwlnb3RvIG91dDsKIH0KIAogLyoKQEAgLTI5MTYsOCArMjk0NCw2IEBACiAJCQkJdGVzdF92YWwgPSB1OwogCQkJYnJlYWs7CiAJCX0KLQkJZHByaW50aygiTkZTRDogcHVyZ2luZyB1bnVzZWQgZGVsZWdhdGlvbiBkcCAlcCwgZnAgJXBcbiIsCi0JCQkgICAgICAgICAgICBkcCwgZHAtPmRsX2Zsb2NrKTsKIAkJbGlzdF9tb3ZlKCZkcC0+ZGxfcmVjYWxsX2xydSwgJnJlYXBsaXN0KTsKIAl9CiAJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKQEAgLTMxMjgsNyArMzE1NCw3IEBACiAJCQlnb3RvIG91dDsKIAkJcmVuZXdfY2xpZW50KGRwLT5kbF9jbGllbnQpOwogCQlpZiAoZmlscHApIHsKLQkJCSpmaWxwcCA9IGZpbmRfcmVhZGFibGVfZmlsZShkcC0+ZGxfZmlsZSk7CisJCQkqZmlscHAgPSBkcC0+ZGxfZmlsZS0+ZmlfZGVsZWdfZmlsZTsKIAkJCUJVR19PTighKmZpbHBwKTsKIAkJfQogCX0gZWxzZSB7IC8qIG9wZW4gb3IgbG9jayBzdGF0ZWlkICovCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IDk1NjYyOWIuLjEyNzViODYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC0zMTcsOCArMzE3LDggQEAKIAkJUkVBRF9CVUYoZHVtbXkzMik7CiAJCWxlbiArPSAoWERSX1FVQURMRU4oZHVtbXkzMikgPDwgMik7CiAJCVJFQURNRU0oYnVmLCBkdW1teTMyKTsKLQkJaWYgKChob3N0X2VyciA9IG5mc2RfbWFwX25hbWVfdG9fdWlkKGFyZ3AtPnJxc3RwLCBidWYsIGR1bW15MzIsICZpYXR0ci0+aWFfdWlkKSkpCi0JCQlnb3RvIG91dF9uZnNlcnI7CisJCWlmICgoc3RhdHVzID0gbmZzZF9tYXBfbmFtZV90b191aWQoYXJncC0+cnFzdHAsIGJ1ZiwgZHVtbXkzMiwgJmlhdHRyLT5pYV91aWQpKSkKKwkJCXJldHVybiBzdGF0dXM7CiAJCWlhdHRyLT5pYV92YWxpZCB8PSBBVFRSX1VJRDsKIAl9CiAJaWYgKGJtdmFsWzFdICYgRkFUVFI0X1dPUkQxX09XTkVSX0dST1VQKSB7CkBAIC0zMjgsOCArMzI4LDggQEAKIAkJUkVBRF9CVUYoZHVtbXkzMik7CiAJCWxlbiArPSAoWERSX1FVQURMRU4oZHVtbXkzMikgPDwgMik7CiAJCVJFQURNRU0oYnVmLCBkdW1teTMyKTsKLQkJaWYgKChob3N0X2VyciA9IG5mc2RfbWFwX25hbWVfdG9fZ2lkKGFyZ3AtPnJxc3RwLCBidWYsIGR1bW15MzIsICZpYXR0ci0+aWFfZ2lkKSkpCi0JCQlnb3RvIG91dF9uZnNlcnI7CisJCWlmICgoc3RhdHVzID0gbmZzZF9tYXBfbmFtZV90b19naWQoYXJncC0+cnFzdHAsIGJ1ZiwgZHVtbXkzMiwgJmlhdHRyLT5pYV9naWQpKSkKKwkJCXJldHVybiBzdGF0dXM7CiAJCWlhdHRyLT5pYV92YWxpZCB8PSBBVFRSX0dJRDsKIAl9CiAJaWYgKGJtdmFsWzFdICYgRkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTX1NFVCkgewpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9zdGF0ZS5oIGIvZnMvbmZzZC9zdGF0ZS5oCmluZGV4IDMwNzQ2NTYuLjJkMzEyMjQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2Qvc3RhdGUuaAorKysgYi9mcy9uZnNkL3N0YXRlLmgKQEAgLTgzLDggKzgzLDYgQEAKIAlhdG9taWNfdAkJZGxfY291bnQ7ICAgICAgIC8qIHJlZiBjb3VudCAqLwogCXN0cnVjdCBuZnM0X2NsaWVudAkqZGxfY2xpZW50OwogCXN0cnVjdCBuZnM0X2ZpbGUJKmRsX2ZpbGU7Ci0Jc3RydWN0IGZpbGUJCSpkbF92ZnNfZmlsZTsKLQlzdHJ1Y3QgZmlsZV9sb2NrCSpkbF9mbG9jazsKIAl1MzIJCQlkbF90eXBlOwogCXRpbWVfdAkJCWRsX3RpbWU7CiAvKiBGb3IgcmVjYWxsOiAqLwpAQCAtMzc5LDYgKzM3Nyw5IEBACiAJICovCiAJYXRvbWljX3QJCWZpX3JlYWRlcnM7CiAJYXRvbWljX3QJCWZpX3dyaXRlcnM7CisJc3RydWN0IGZpbGUJCSpmaV9kZWxlZ19maWxlOworCXN0cnVjdCBmaWxlX2xvY2sJKmZpX2xlYXNlOworCWF0b21pY190CQlmaV9kZWxlZ2VlczsKIAlzdHJ1Y3QgaW5vZGUJCSpmaV9pbm9kZTsKIAl1MzIgICAgICAgICAgICAgICAgICAgICBmaV9pZDsgICAgICAvKiB1c2VkIHdpdGggc3RhdGVvd25lci0+c29faWQgCiAJCQkJCSAgICAgKiBmb3Igc3RhdGVpZF9oYXNodGJsIGhhc2ggKi8KZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDY0MTExN2YuLmRhMWQ5NzAgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtODA4LDcgKzgwOCw3IEBACiAJCWlmIChyYS0+cF9jb3VudCA9PSAwKQogCQkJZnJhcCA9IHJhcDsKIAl9Ci0JZGVwdGggPSBuZnNkc3RhdHMucmFfc2l6ZSoxMS8xMDsKKwlkZXB0aCA9IG5mc2RzdGF0cy5yYV9zaXplOwogCWlmICghZnJhcCkgewkKIAkJc3Bpbl91bmxvY2soJnJhYi0+cGJfbG9jayk7CiAJCXJldHVybiBOVUxMOwpAQCAtMTc0NCw2ICsxNzQ0LDEzIEBACiAJaG9zdF9lcnIgPSBuZnNkX2JyZWFrX2xlYXNlKG9kZW50cnktPmRfaW5vZGUpOwogCWlmIChob3N0X2VycikKIAkJZ290byBvdXRfZHJvcF93cml0ZTsKKwlpZiAobmRlbnRyeS0+ZF9pbm9kZSkgeworCQlob3N0X2VyciA9IG5mc2RfYnJlYWtfbGVhc2UobmRlbnRyeS0+ZF9pbm9kZSk7CisJCWlmIChob3N0X2VycikKKwkJCWdvdG8gb3V0X2Ryb3Bfd3JpdGU7CisJfQorCWlmIChob3N0X2VycikKKwkJZ290byBvdXRfZHJvcF93cml0ZTsKIAlob3N0X2VyciA9IHZmc19yZW5hbWUoZmRpciwgb2RlbnRyeSwgdGRpciwgbmRlbnRyeSk7CiAJaWYgKCFob3N0X2VycikgewogCQlob3N0X2VyciA9IGNvbW1pdF9tZXRhZGF0YSh0ZmhwKTsKQEAgLTE4MTIsMjIgKzE4MTksMjIgQEAKIAogCWhvc3RfZXJyID0gbW50X3dhbnRfd3JpdGUoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKIAlpZiAoaG9zdF9lcnIpCi0JCWdvdG8gb3V0X25mc2VycjsKKwkJZ290byBvdXRfcHV0OwogCiAJaG9zdF9lcnIgPSBuZnNkX2JyZWFrX2xlYXNlKHJkZW50cnktPmRfaW5vZGUpOwogCWlmIChob3N0X2VycikKLQkJZ290byBvdXRfcHV0OworCQlnb3RvIG91dF9kcm9wX3dyaXRlOwogCWlmICh0eXBlICE9IFNfSUZESVIpCiAJCWhvc3RfZXJyID0gdmZzX3VubGluayhkaXJwLCByZGVudHJ5KTsKIAllbHNlCiAJCWhvc3RfZXJyID0gdmZzX3JtZGlyKGRpcnAsIHJkZW50cnkpOworCWlmICghaG9zdF9lcnIpCisJCWhvc3RfZXJyID0gY29tbWl0X21ldGFkYXRhKGZocCk7CitvdXRfZHJvcF93cml0ZToKKwltbnRfZHJvcF93cml0ZShmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOwogb3V0X3B1dDoKIAlkcHV0KHJkZW50cnkpOwogCi0JaWYgKCFob3N0X2VycikKLQkJaG9zdF9lcnIgPSBjb21taXRfbWV0YWRhdGEoZmhwKTsKLQotCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CiBvdXRfbmZzZXJyOgogCWVyciA9IG5mc2Vycm5vKGhvc3RfZXJyKTsKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idG5vZGUuYyBiL2ZzL25pbGZzMi9idG5vZGUuYwppbmRleCAzODhlOWU4Li44NWY3YmFhIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRub2RlLmMKKysrIGIvZnMvbmlsZnMyL2J0bm9kZS5jCkBAIC0zNSwxMSArMzUsNiBAQAogI2luY2x1ZGUgImJ0bm9kZS5oIgogCiAKLXZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXRfb25jZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYykKLXsKLQluaWxmc19tYXBwaW5nX2luaXRfb25jZShidG5jKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2J0bm9kZV9hb3BzID0gewogCS5zeW5jX3BhZ2UJCT0gYmxvY2tfc3luY19wYWdlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idG5vZGUuaCBiL2ZzL25pbGZzMi9idG5vZGUuaAppbmRleCA3OTAzNzQ5Li4xYjhlYmQ4IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRub2RlLmgKKysrIGIvZnMvbmlsZnMyL2J0bm9kZS5oCkBAIC0zNyw3ICszNyw2IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdiaDsKIH07CiAKLXZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXRfb25jZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKik7CiB2b2lkIG5pbGZzX2J0bm9kZV9jYWNoZV9jbGVhcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHN0cnVjdCBidWZmZXJfaGVhZCAqbmlsZnNfYnRub2RlX2NyZWF0ZV9ibG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYywKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9tZHQuYyBiL2ZzL25pbGZzMi9tZHQuYwppbmRleCA2YTBlMmExLi5hMGJhYmQyIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvbWR0LmMKKysrIGIvZnMvbmlsZnMyL21kdC5jCkBAIC00NTQsOSArNDU0LDkgQEAKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gaW5vZGUtPmlfc2ItPnNfYmRpOwogCiAJSU5JVF9MSVNUX0hFQUQoJnNoYWRvdy0+ZnJvemVuX2J1ZmZlcnMpOwotCW5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKCZzaGFkb3ctPmZyb3plbl9kYXRhKTsKKwlhZGRyZXNzX3NwYWNlX2luaXRfb25jZSgmc2hhZG93LT5mcm96ZW5fZGF0YSk7CiAJbmlsZnNfbWFwcGluZ19pbml0KCZzaGFkb3ctPmZyb3plbl9kYXRhLCBiZGksICZzaGFkb3dfbWFwX2FvcHMpOwotCW5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKCZzaGFkb3ctPmZyb3plbl9idG5vZGVzKTsKKwlhZGRyZXNzX3NwYWNlX2luaXRfb25jZSgmc2hhZG93LT5mcm96ZW5fYnRub2Rlcyk7CiAJbmlsZnNfbWFwcGluZ19pbml0KCZzaGFkb3ctPmZyb3plbl9idG5vZGVzLCBiZGksICZzaGFkb3dfbWFwX2FvcHMpOwogCW1pLT5taV9zaGFkb3cgPSBzaGFkb3c7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmFtZWkuYyBiL2ZzL25pbGZzMi9uYW1laS5jCmluZGV4IDk4MDM0MjcuLjE2MTc5MWQgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uYW1laS5jCisrKyBiL2ZzL25pbGZzMi9uYW1laS5jCkBAIC0zOTcsNyArMzk3LDYgQEAKIAkJbmV3X2RlID0gbmlsZnNfZmluZF9lbnRyeShuZXdfZGlyLCAmbmV3X2RlbnRyeS0+ZF9uYW1lLCAmbmV3X3BhZ2UpOwogCQlpZiAoIW5ld19kZSkKIAkJCWdvdG8gb3V0X2RpcjsKLQkJaW5jX25saW5rKG9sZF9pbm9kZSk7CiAJCW5pbGZzX3NldF9saW5rKG5ld19kaXIsIG5ld19kZSwgbmV3X3BhZ2UsIG9sZF9pbm9kZSk7CiAJCW5pbGZzX21hcmtfaW5vZGVfZGlydHkobmV3X2Rpcik7CiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKQEAgLTQxMSwxMyArNDEwLDkgQEAKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IE5JTEZTX0xJTktfTUFYKQogCQkJCWdvdG8gb3V0X2RpcjsKIAkJfQotCQlpbmNfbmxpbmsob2xkX2lub2RlKTsKIAkJZXJyID0gbmlsZnNfYWRkX2xpbmsobmV3X2RlbnRyeSwgb2xkX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJZHJvcF9ubGluayhvbGRfaW5vZGUpOwotCQkJbmlsZnNfbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOworCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZGlyOwotCQl9CiAJCWlmIChkaXJfZGUpIHsKIAkJCWluY19ubGluayhuZXdfZGlyKTsKIAkJCW5pbGZzX21hcmtfaW5vZGVfZGlydHkobmV3X2Rpcik7CkBAIC00MzEsNyArNDI2LDYgQEAKIAlvbGRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAKIAluaWxmc19kZWxldGVfZW50cnkob2xkX2RlLCBvbGRfcGFnZSk7Ci0JZHJvcF9ubGluayhvbGRfaW5vZGUpOwogCiAJaWYgKGRpcl9kZSkgewogCQluaWxmc19zZXRfbGluayhvbGRfaW5vZGUsIGRpcl9kZSwgZGlyX3BhZ2UsIG5ld19kaXIpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3BhZ2UuYyBiL2ZzL25pbGZzMi9wYWdlLmMKaW5kZXggMGM0MzI0MS4uYTU4NWIzNSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3BhZ2UuYworKysgYi9mcy9uaWxmczIvcGFnZS5jCkBAIC00OTIsMTkgKzQ5Miw2IEBACiAJcmV0dXJuIG5jOwogfQogCi12b2lkIG5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQotewotCW1lbXNldChtYXBwaW5nLCAwLCBzaXplb2YoKm1hcHBpbmcpKTsKLQlJTklUX1JBRElYX1RSRUUoJm1hcHBpbmctPnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPnByaXZhdGVfbGlzdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnByaXZhdGVfbG9jayk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmbWFwcGluZy0+aV9tbWFwX2xvY2spOwotCUlOSVRfUkFXX1BSSU9fVFJFRV9ST09UKCZtYXBwaW5nLT5pX21tYXApOwotCUlOSVRfTElTVF9IRUFEKCZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyKTsKLX0KLQogdm9pZCBuaWxmc19tYXBwaW5nX2luaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLAogCQkJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYW9wcykKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9wYWdlLmggYi9mcy9uaWxmczIvcGFnZS5oCmluZGV4IDYyMmRmMjcuLjJhMDA5NTMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9wYWdlLmgKKysrIGIvZnMvbmlsZnMyL3BhZ2UuaApAQCAtNjEsNyArNjEsNiBAQAogaW50IG5pbGZzX2NvcHlfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CiB2b2lkIG5pbGZzX2NvcHlfYmFja19wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHZvaWQgbmlsZnNfY2xlYXJfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7Ci12b2lkIG5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKIHZvaWQgbmlsZnNfbWFwcGluZ19pbml0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwKIAkJCWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgKmFvcHMpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ21lbnQuYyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKaW5kZXggNTVlYmFlNS4uMmRlOWY2MyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ21lbnQuYworKysgYi9mcy9uaWxmczIvc2VnbWVudC5jCkBAIC00MzAsNyArNDMwLDggQEAKIAluaWxmc19zZWdjdG9yX21hcF9zZWdzdW1fZW50cnkoCiAJCXNjaSwgJnNjaS0+c2NfYmluZm9fcHRyLCBzaXplb2Yoc3RydWN0IG5pbGZzX2ZpbmZvKSk7CiAKLQlpZiAoaW5vZGUtPmlfc2IgJiYgIXRlc3RfYml0KE5JTEZTX1NDX0hBVkVfREVMVEEsICZzY2ktPnNjX2ZsYWdzKSkKKwlpZiAoTklMRlNfSShpbm9kZSktPmlfcm9vdCAmJgorCSAgICAhdGVzdF9iaXQoTklMRlNfU0NfSEFWRV9ERUxUQSwgJnNjaS0+c2NfZmxhZ3MpKQogCQlzZXRfYml0KE5JTEZTX1NDX0hBVkVfREVMVEEsICZzY2ktPnNjX2ZsYWdzKTsKIAkvKiBza2lwIGZpbmZvICovCiB9CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc3VwZXIuYyBiL2ZzL25pbGZzMi9zdXBlci5jCmluZGV4IDA5OTRmNmE3Li4xNjczYjNkIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc3VwZXIuYworKysgYi9mcy9uaWxmczIvc3VwZXIuYwpAQCAtNzA0LDcgKzcwNCw4IEBACiAJc2JwWzBdLT5zX3N0YXRlID0KIAkJY3B1X3RvX2xlMTYobGUxNl90b19jcHUoc2JwWzBdLT5zX3N0YXRlKSAmIH5OSUxGU19WQUxJRF9GUyk7CiAJLyogc3luY2hyb25pemUgc2JwWzFdIHdpdGggc2JwWzBdICovCi0JbWVtY3B5KHNicFsxXSwgc2JwWzBdLCBuaWxmcy0+bnNfc2JzaXplKTsKKwlpZiAoc2JwWzFdKQorCQltZW1jcHkoc2JwWzFdLCBzYnBbMF0sIG5pbGZzLT5uc19zYnNpemUpOwogCXJldHVybiBuaWxmc19jb21taXRfc3VwZXIoc2JpLCBOSUxGU19TQl9DT01NSVRfQUxMKTsKIH0KIApAQCAtMTI3OCw3ICsxMjc5LDcgQEAKICNpZmRlZiBDT05GSUdfTklMRlNfWEFUVFIKIAlpbml0X3J3c2VtKCZpaS0+eGF0dHJfc2VtKTsKICNlbmRpZgotCW5pbGZzX2J0bm9kZV9jYWNoZV9pbml0X29uY2UoJmlpLT5pX2J0bm9kZV9jYWNoZSk7CisJYWRkcmVzc19zcGFjZV9pbml0X29uY2UoJmlpLT5pX2J0bm9kZV9jYWNoZSk7CiAJaWktPmlfYm1hcCA9ICZpaS0+aV9ibWFwX2RhdGE7CiAJaW5vZGVfaW5pdF9vbmNlKCZpaS0+dmZzX2lub2RlKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmMgYi9mcy9udGZzL21mdC5jCmluZGV4IGI1NzJiNjcuLjMyNmU3NDcgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbWZ0LmMKKysrIGIvZnMvbnRmcy9tZnQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKgogICogbWZ0LmMgLSBOVEZTIGtlcm5lbCBtZnQgcmVjb3JkIG9wZXJhdGlvbnMuIFBhcnQgb2YgdGhlIExpbnV4LU5URlMgcHJvamVjdC4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNiBBbnRvbiBBbHRhcGFybWFrb3YKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDExIEFudG9uIEFsdGFwYXJtYWtvdiBhbmQgVHV4ZXJhIEluYy4KICAqIENvcHlyaWdodCAoYykgMjAwMiBSaWNoYXJkIFJ1c3NvbgogICoKICAqIFRoaXMgcHJvZ3JhbS9pbmNsdWRlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNTc2LDYgKzI1NzYsOCBAQAogCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAlpZiAoYmFzZV9uaSkgeworCQlNRlRfUkVDT1JEICptX3RtcDsKKwogCQkvKgogCQkgKiBTZXR1cCB0aGUgYmFzZSBtZnQgcmVjb3JkIGluIHRoZSBleHRlbnQgbWZ0IHJlY29yZC4gIFRoaXMKIAkJICogY29tcGxldGVzIGluaXRpYWxpemF0aW9uIG9mIHRoZSBhbGxvY2F0ZWQgZXh0ZW50IG1mdCByZWNvcmQKQEAgLTI1ODgsMTEgKzI1OTAsMTEgQEAKIAkJICogYXR0YWNoIGl0IHRvIHRoZSBiYXNlIGlub2RlIEBiYXNlX25pIGFuZCBtYXAsIHBpbiwgYW5kIGxvY2sKIAkJICogaXRzLCBpLmUuIHRoZSBhbGxvY2F0ZWQsIG1mdCByZWNvcmQuCiAJCSAqLwotCQltID0gbWFwX2V4dGVudF9tZnRfcmVjb3JkKGJhc2VfbmksIGJpdCwgJm5pKTsKLQkJaWYgKElTX0VSUihtKSkgeworCQltX3RtcCA9IG1hcF9leHRlbnRfbWZ0X3JlY29yZChiYXNlX25pLCBiaXQsICZuaSk7CisJCWlmIChJU19FUlIobV90bXApKSB7CiAJCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gbWFwIGFsbG9jYXRlZCBleHRlbnQgIgogCQkJCQkibWZ0IHJlY29yZCAweCVsbHguIiwgKGxvbmcgbG9uZyliaXQpOwotCQkJZXJyID0gUFRSX0VSUihtKTsKKwkJCWVyciA9IFBUUl9FUlIobV90bXApOwogCQkJLyogU2V0IHRoZSBtZnQgcmVjb3JkIGl0c2VsZiBub3QgaW4gdXNlLiAqLwogCQkJbS0+ZmxhZ3MgJj0gY3B1X3RvX2xlMTYoCiAJCQkJCX5sZTE2X3RvX2NwdShNRlRfUkVDT1JEX0lOX1VTRSkpOwpAQCAtMjYwMyw2ICsyNjA1LDcgQEAKIAkJCW50ZnNfdW5tYXBfcGFnZShwYWdlKTsKIAkJCWdvdG8gdW5kb19tZnRibXBfYWxsb2M7CiAJCX0KKwkJQlVHX09OKG0gIT0gbV90bXApOwogCQkvKgogCQkgKiBNYWtlIHN1cmUgdGhlIGFsbG9jYXRlZCBtZnQgcmVjb3JkIGlzIHdyaXR0ZW4gb3V0IHRvIGRpc2suCiAJCSAqIE5vIG5lZWQgdG8gc2V0IHRoZSBpbm9kZSBkaXJ0eSBiZWNhdXNlIHRoZSBjYWxsZXIgaXMgZ29pbmcKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuaCBiL2ZzL29jZnMyL2pvdXJuYWwuaAppbmRleCA0M2U1NmI5Li42MTgwZGExIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9qb3VybmFsLmgKKysrIGIvZnMvb2NmczIvam91cm5hbC5oCkBAIC00MDUsOSArNDA1LDkgQEAKIAkgICAgICAgb2NmczJfcXVvdGFfdHJhbnNfY3JlZGl0cyhzYik7CiB9CiAKLS8qIGRhdGEgYmxvY2sgZm9yIG5ldyBkaXIvc3ltbGluaywgMiBmb3IgYml0bWFwIHVwZGF0ZXMgKGJpdG1hcCBmZSArCi0gKiBiaXRtYXAgYmxvY2sgZm9yIHRoZSBuZXcgYml0KSBkeF9yb290IHVwZGF0ZSBmb3IgZnJlZSBsaXN0ICovCi0jZGVmaW5lIE9DRlMyX0RJUl9MSU5LX0FERElUSU9OQUxfQ1JFRElUUyAoMSArIDIgKyAxKQorLyogZGF0YSBibG9jayBmb3IgbmV3IGRpci9zeW1saW5rLCBhbGxvY2F0aW9uIG9mIGRpcmVjdG9yeSBibG9jaywgZHhfcm9vdAorICogdXBkYXRlIGZvciBmcmVlIGxpc3QgKi8KKyNkZWZpbmUgT0NGUzJfRElSX0xJTktfQURESVRJT05BTF9DUkVESVRTICgxICsgT0NGUzJfU1VCQUxMT0NfQUxMT0MgKyAxKQogCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9hZGRfZGlyX2luZGV4X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jIGIvZnMvb2NmczIvcmVmY291bnR0cmVlLmMKaW5kZXggYjVmOTE2MC4uMTllYmM1YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmMKKysrIGIvZnMvb2NmczIvcmVmY291bnR0cmVlLmMKQEAgLTMyMjgsNyArMzIyOCw3IEBACiAJCQkJCXUzMiBudW1fY2x1c3RlcnMsIHVuc2lnbmVkIGludCBlX2ZsYWdzKQogewogCWludCByZXQsIGRlbGV0ZSwgaW5kZXgsIGNyZWRpdHMgPSAgMDsKLQl1MzIgbmV3X2JpdCwgbmV3X2xlbjsKKwl1MzIgbmV3X2JpdCwgbmV3X2xlbiwgb3JpZ19udW1fY2x1c3RlcnM7CiAJdW5zaWduZWQgaW50IHNldF9sZW47CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihzYik7CiAJaGFuZGxlX3QgKmhhbmRsZTsKQEAgLTMyNjEsNiArMzI2MSw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCW9yaWdfbnVtX2NsdXN0ZXJzID0gbnVtX2NsdXN0ZXJzOworCiAJd2hpbGUgKG51bV9jbHVzdGVycykgewogCQlyZXQgPSBvY2ZzMl9nZXRfcmVmY291bnRfcmVjKHJlZl9jaSwgY29udGV4dC0+cmVmX3Jvb3RfYmgsCiAJCQkJCSAgICAgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsCkBAIC0zMzQ4LDcgKzMzNTAsOCBAQAogCSAqIGluIHdyaXRlLWJhY2sgbW9kZS4KIAkgKi8KIAlpZiAoY29udGV4dC0+Z2V0X2NsdXN0ZXJzID09IG9jZnMyX2RpX2dldF9jbHVzdGVycykgewotCQlyZXQgPSBvY2ZzMl9jb3dfc3luY193cml0ZWJhY2soc2IsIGNvbnRleHQsIGNwb3MsIG51bV9jbHVzdGVycyk7CisJCXJldCA9IG9jZnMyX2Nvd19zeW5jX3dyaXRlYmFjayhzYiwgY29udGV4dCwgY3BvcywKKwkJCQkJICAgICAgIG9yaWdfbnVtX2NsdXN0ZXJzKTsKIAkJaWYgKHJldCkKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAl9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdXBlci5jIGIvZnMvb2NmczIvc3VwZXIuYwppbmRleCAzOGY5ODZkLi4zNmM0MjNmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdXBlci5jCisrKyBiL2ZzL29jZnMyL3N1cGVyLmMKQEAgLTEzMTYsNyArMTMxNiw3IEBACiAJCQkgICAgICAgc3RydWN0IG1vdW50X29wdGlvbnMgKm1vcHQsCiAJCQkgICAgICAgaW50IGlzX3JlbW91bnQpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzLCB1c2VyX3N0YWNrID0gMDsKIAljaGFyICpwOwogCXUzMiB0bXA7CiAKQEAgLTE0NTksNiArMTQ1OSwxNSBAQAogCQkJbWVtY3B5KG1vcHQtPmNsdXN0ZXJfc3RhY2ssIGFyZ3NbMF0uZnJvbSwKIAkJCSAgICAgICBPQ0ZTMl9TVEFDS19MQUJFTF9MRU4pOwogCQkJbW9wdC0+Y2x1c3Rlcl9zdGFja1tPQ0ZTMl9TVEFDS19MQUJFTF9MRU5dID0gJ1wwJzsKKwkJCS8qCisJCQkgKiBPcGVuIGNvZGUgdGhlIG1lbWNtcCBoZXJlIGFzIHdlIGRvbid0IGhhdmUKKwkJCSAqIGFuIG9zYiB0byBwYXNzIHRvCisJCQkgKiBvY2ZzMl91c2Vyc3BhY2Vfc3RhY2soKS4KKwkJCSAqLworCQkJaWYgKG1lbWNtcChtb3B0LT5jbHVzdGVyX3N0YWNrLAorCQkJCSAgIE9DRlMyX0NMQVNTSUNfQ0xVU1RFUl9TVEFDSywKKwkJCQkgICBPQ0ZTMl9TVEFDS19MQUJFTF9MRU4pKQorCQkJCXVzZXJfc3RhY2sgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2lub2RlNjQ6CiAJCQltb3B0LT5tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfSU5PREU2NDsKQEAgLTE1MTQsMTMgKzE1MjMsMTYgQEAKIAkJfQogCX0KIAotCS8qIEVuc3VyZSBvbmx5IG9uZSBoZWFydGJlYXQgbW9kZSAqLwotCXRtcCA9IG1vcHQtPm1vdW50X29wdCAmIChPQ0ZTMl9NT1VOVF9IQl9MT0NBTCB8IE9DRlMyX01PVU5UX0hCX0dMT0JBTCB8Ci0JCQkJIE9DRlMyX01PVU5UX0hCX05PTkUpOwotCWlmIChod2VpZ2h0MzIodG1wKSAhPSAxKSB7Ci0JCW1sb2coTUxfRVJST1IsICJJbnZhbGlkIGhlYXJ0YmVhdCBtb3VudCBvcHRpb25zXG4iKTsKLQkJc3RhdHVzID0gMDsKLQkJZ290byBiYWlsOworCWlmICh1c2VyX3N0YWNrID09IDApIHsKKwkJLyogRW5zdXJlIG9ubHkgb25lIGhlYXJ0YmVhdCBtb2RlICovCisJCXRtcCA9IG1vcHQtPm1vdW50X29wdCAmIChPQ0ZTMl9NT1VOVF9IQl9MT0NBTCB8CisJCQkJCSBPQ0ZTMl9NT1VOVF9IQl9HTE9CQUwgfAorCQkJCQkgT0NGUzJfTU9VTlRfSEJfTk9ORSk7CisJCWlmIChod2VpZ2h0MzIodG1wKSAhPSAxKSB7CisJCQltbG9nKE1MX0VSUk9SLCAiSW52YWxpZCBoZWFydGJlYXQgbW91bnQgb3B0aW9uc1xuIik7CisJCQlzdGF0dXMgPSAwOworCQkJZ290byBiYWlsOworCQl9CiAJfQogCiAJc3RhdHVzID0gMTsKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCBlNTIzODllLi41YTJjNmViIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC03OTAsNiArNzkwLDggQEAKIAogCS8qIFBpY2sgdXAgdGhlIGZpbHAgZnJvbSB0aGUgb3BlbiBpbnRlbnQgKi8KIAlmaWxwID0gbmQtPmludGVudC5vcGVuLmZpbGU7CisJbmQtPmludGVudC5vcGVuLmZpbGUgPSBOVUxMOworCiAJLyogSGFzIHRoZSBmaWxlc3lzdGVtIGluaXRpYWxpc2VkIHRoZSBmaWxlIGZvciB1cz8gKi8KIAlpZiAoZmlscC0+Zl9wYXRoLmRlbnRyeSA9PSBOVUxMKSB7CiAJCXBhdGhfZ2V0KCZuZC0+cGF0aCk7CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2xkbS5jIGIvZnMvcGFydGl0aW9ucy9sZG0uYwppbmRleCA3ODljNjI1Li5iMTBlMzU0IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2xkbS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbGRtLmMKQEAgLTI1MSw2ICsyNTEsMTEgQEAKIAl9CiAKIAl2bS0+dmJsa19zaXplICAgICA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhICsgMHgwOCk7CisJaWYgKHZtLT52YmxrX3NpemUgPT0gMCkgeworCQlsZG1fZXJyb3IgKCJJbGxlZ2FsIFZCTEsgc2l6ZSIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCiAJdm0tPnZibGtfb2Zmc2V0ICAgPSBnZXRfdW5hbGlnbmVkX2JlMzIoZGF0YSArIDB4MEMpOwogCXZtLT5sYXN0X3ZibGtfc2VxID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEgKyAweDA0KTsKIApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9tYWMuYyBiL2ZzL3BhcnRpdGlvbnMvbWFjLmMKaW5kZXggNjhkNmEyMS4uMTFmNjg4YiAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9tYWMuYworKysgYi9mcy9wYXJ0aXRpb25zL21hYy5jCkBAIC0yOSwxMCArMjksOSBAQAogCiBpbnQgbWFjX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKQogewotCWludCBzbG90ID0gMTsKIAlTZWN0b3Igc2VjdDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwotCWludCBibGssIGJsb2Nrc19pbl9tYXA7CisJaW50IHNsb3QsIGJsb2Nrc19pbl9tYXA7CiAJdW5zaWduZWQgc2Vjc2l6ZTsKICNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAlpbnQgZm91bmRfcm9vdCA9IDA7CkBAIC01OSwxMCArNTgsMTQgQEAKIAkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJCXJldHVybiAwOwkJLyogbm90IGEgTWFjT1MgZGlzayAqLwogCX0KLQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICIgW21hY10iLCBQQUdFX1NJWkUpOwogCWJsb2Nrc19pbl9tYXAgPSBiZTMyX3RvX2NwdShwYXJ0LT5tYXBfY291bnQpOwotCWZvciAoYmxrID0gMTsgYmxrIDw9IGJsb2Nrc19pbl9tYXA7ICsrYmxrKSB7Ci0JCWludCBwb3MgPSBibGsgKiBzZWNzaXplOworCWlmIChibG9ja3NfaW5fbWFwIDwgMCB8fCBibG9ja3NfaW5fbWFwID49IERJU0tfTUFYX1BBUlRTKSB7CisJCXB1dF9kZXZfc2VjdG9yKHNlY3QpOworCQlyZXR1cm4gMDsKKwl9CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiIFttYWNdIiwgUEFHRV9TSVpFKTsKKwlmb3IgKHNsb3QgPSAxOyBzbG90IDw9IGJsb2Nrc19pbl9tYXA7ICsrc2xvdCkgeworCQlpbnQgcG9zID0gc2xvdCAqIHNlY3NpemU7CiAJCXB1dF9kZXZfc2VjdG9yKHNlY3QpOwogCQlkYXRhID0gcmVhZF9wYXJ0X3NlY3RvcihzdGF0ZSwgcG9zLzUxMiwgJnNlY3QpOwogCQlpZiAoIWRhdGEpCkBAIC0xMTMsMTMgKzExNiwxMSBAQAogCQkJfQogCiAJCQlpZiAoZ29vZG5lc3MgPiBmb3VuZF9yb290X2dvb2RuZXNzKSB7Ci0JCQkJZm91bmRfcm9vdCA9IGJsazsKKwkJCQlmb3VuZF9yb290ID0gc2xvdDsKIAkJCQlmb3VuZF9yb290X2dvb2RuZXNzID0gZ29vZG5lc3M7CiAJCQl9CiAJCX0KICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KLQotCQkrK3Nsb3Q7CiAJfQogI2lmZGVmIENPTkZJR19QUENfUE1BQwogCWlmIChmb3VuZF9yb290X2dvb2RuZXNzKQpkaWZmIC0tZ2l0IGEvZnMvcG9zaXhfYWNsLmMgYi9mcy9wb3NpeF9hY2wuYwppbmRleCAzOWRmOTVhLi5iMWNmNmJmIDEwMDY0NAotLS0gYS9mcy9wb3NpeF9hY2wuYworKysgYi9mcy9wb3NpeF9hY2wuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAorRVhQT1JUX1NZTUJPTChwb3NpeF9hY2xfaW5pdCk7CiBFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF9hbGxvYyk7CiBFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF9jbG9uZSk7CiBFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF92YWxpZCk7CkBAIC0zMiw2ICszMywxNiBAQAogRVhQT1JUX1NZTUJPTChwb3NpeF9hY2xfcGVybWlzc2lvbik7CiAKIC8qCisgKiBJbml0IGEgZnJlc2ggcG9zaXhfYWNsCisgKi8KK3ZvaWQKK3Bvc2l4X2FjbF9pbml0KHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IGNvdW50KQoreworCWF0b21pY19zZXQoJmFjbC0+YV9yZWZjb3VudCwgMSk7CisJYWNsLT5hX2NvdW50ID0gY291bnQ7Cit9CisKKy8qCiAgKiBBbGxvY2F0ZSBhIG5ldyBBQ0wgd2l0aCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBlbnRyaWVzLgogICovCiBzdHJ1Y3QgcG9zaXhfYWNsICoKQEAgLTQwLDEwICs1MSw4IEBACiAJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2Yoc3RydWN0IHBvc2l4X2FjbCkgKwogCSAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2Yoc3RydWN0IHBvc2l4X2FjbF9lbnRyeSk7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0ga21hbGxvYyhzaXplLCBmbGFncyk7Ci0JaWYgKGFjbCkgewotCQlhdG9taWNfc2V0KCZhY2wtPmFfcmVmY291bnQsIDEpOwotCQlhY2wtPmFfY291bnQgPSBjb3VudDsKLQl9CisJaWYgKGFjbCkKKwkJcG9zaXhfYWNsX2luaXQoYWNsLCBjb3VudCk7CiAJcmV0dXJuIGFjbDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IGRmMmI3MDMuLjdjOTljMWMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYworKysgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTM1Myw5ICszNTMsNiBAQAogCXRhc2tfY2FwKG0sIHRhc2spOwogCXRhc2tfY3B1c19hbGxvd2VkKG0sIHRhc2spOwogCWNwdXNldF90YXNrX3N0YXR1c19hbGxvd2VkKG0sIHRhc2spOwotI2lmIGRlZmluZWQoQ09ORklHX1MzOTApCi0JdGFza19zaG93X3JlZ3MobSwgdGFzayk7Ci0jZW5kaWYKIAl0YXNrX2NvbnRleHRfc3dpdGNoX2NvdW50cyhtLCB0YXNrKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvY29uc29sZXMuYyBiL2ZzL3Byb2MvY29uc29sZXMuYwppbmRleCBlYWZjMjJhLi5iNzAxZWFhIDEwMDY0NAotLS0gYS9mcy9wcm9jL2NvbnNvbGVzLmMKKysrIGIvZnMvcHJvYy9jb25zb2xlcy5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJc3RydWN0IGNvbnNvbGUgKmNvbjsKIAlsb2ZmX3Qgb2ZmID0gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmb3JfZWFjaF9jb25zb2xlKGNvbikKIAkJaWYgKG9mZisrID09ICpwb3MpCiAJCQlicmVhazsKQEAgLTg0LDcgKzg0LDcgQEAKIAogc3RhdGljIHZvaWQgY19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjb25zb2xlc19vcCA9IHsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMgYi9mcy9wcm9jL3Byb2NfZGV2dHJlZS5jCmluZGV4IGQ5Mzk2YTQuLjkyN2NiZDEgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMKKysrIGIvZnMvcHJvYy9wcm9jX2RldnRyZWUuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAJCXJldHVybjsKIAlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKIAlpZiAocm9vdCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiL3Byb2MvZGV2aWNlLXRyZWU6IGNhbid0IGZpbmQgcm9vdFxuIik7CisJCXByX2RlYnVnKCIvcHJvYy9kZXZpY2UtdHJlZTogY2FuJ3QgZmluZCByb290XG4iKTsKIAkJcmV0dXJuOwogCX0KIAlwcm9jX2RldmljZV90cmVlX2FkZF9ub2RlKHJvb3QsIHByb2NfZGV2aWNlX3RyZWUpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbmFtZWkuYyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKaW5kZXggYmE1ZjUxZS4uNjhmZGY0NSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbmFtZWkuYworKysgYi9mcy9yZWlzZXJmcy9uYW1laS5jCkBAIC03NzEsNyArNzcxLDcgQEAKIAkJCQkJRU1QVFlfRElSX1NJWkVfVjEgOiBFTVBUWV9ESVJfU0laRSwKIAkJCQkJZGVudHJ5LCBpbm9kZSwgJnNlY3VyaXR5KTsKIAlpZiAocmV0dmFsKSB7Ci0JCWRpci0+aV9ubGluay0tOworCQlERUNfRElSX0lOT0RFX05MSU5LKGRpcikKIAkJZ290byBvdXRfZmFpbGVkOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvYmxvY2suYyBiL2ZzL3NxdWFzaGZzL2Jsb2NrLmMKaW5kZXggMmZiMjg4Mi4uOGFiNDhiYyAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvYmxvY2suYworKysgYi9mcy9zcXVhc2hmcy9ibG9jay5jCkBAIC02Myw2ICs2MywxNCBAQAogCQkqbGVuZ3RoID0gKHVuc2lnbmVkIGNoYXIpIGJoLT5iX2RhdGFbKm9mZnNldF0gfAogCQkJKHVuc2lnbmVkIGNoYXIpIGJoLT5iX2RhdGFbKm9mZnNldCArIDFdIDw8IDg7CiAJCSpvZmZzZXQgKz0gMjsKKworCQlpZiAoKm9mZnNldCA9PSBtc2Jsay0+ZGV2Ymxrc2l6ZSkgeworCQkJcHV0X2JoKGJoKTsKKwkJCWJoID0gc2JfYnJlYWQoc2IsICsrKCpjdXJfaW5kZXgpKTsKKwkJCWlmIChiaCA9PSBOVUxMKQorCQkJCXJldHVybiBOVUxMOworCQkJKm9mZnNldCA9IDA7CisJCX0KIAl9CiAKIAlyZXR1cm4gYmg7CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy94el93cmFwcGVyLmMgYi9mcy9zcXVhc2hmcy94el93cmFwcGVyLmMKaW5kZXggODU2NzU2Yy4uYzRlYjQwMCAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMveHpfd3JhcHBlci5jCisrKyBiL2ZzL3NxdWFzaGZzL3h6X3dyYXBwZXIuYwpAQCAtOTUsMTIgKzk1LDYgQEAKIAkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoW2tdKSkKIAkJCQlnb3RvIHJlbGVhc2VfbXV0ZXg7CiAKLQkJCWlmIChhdmFpbCA9PSAwKSB7Ci0JCQkJb2Zmc2V0ID0gMDsKLQkJCQlwdXRfYmgoYmhbaysrXSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KIAkJCXN0cmVhbS0+YnVmLmluID0gYmhba10tPmJfZGF0YSArIG9mZnNldDsKIAkJCXN0cmVhbS0+YnVmLmluX3NpemUgPSBhdmFpbDsKIAkJCXN0cmVhbS0+YnVmLmluX3BvcyA9IDA7CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy96bGliX3dyYXBwZXIuYyBiL2ZzL3NxdWFzaGZzL3psaWJfd3JhcHBlci5jCmluZGV4IDgxOGE1ZTAuLjQ2NjFhZTIgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL3psaWJfd3JhcHBlci5jCisrKyBiL2ZzL3NxdWFzaGZzL3psaWJfd3JhcHBlci5jCkBAIC04MiwxMiArODIsNiBAQAogCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmhba10pKQogCQkJCWdvdG8gcmVsZWFzZV9tdXRleDsKIAotCQkJaWYgKGF2YWlsID09IDApIHsKLQkJCQlvZmZzZXQgPSAwOwotCQkJCXB1dF9iaChiaFtrKytdKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQogCQkJc3RyZWFtLT5uZXh0X2luID0gYmhba10tPmJfZGF0YSArIG9mZnNldDsKIAkJCXN0cmVhbS0+YXZhaWxfaW4gPSBhdmFpbDsKIAkJCW9mZnNldCA9IDA7CmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA3NGUxNDllLi43ZTlkZDRjIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTE3Nyw2ICsxNzcsMTEgQEAKIAlzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnMgPSBzLT5zX3R5cGU7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnMtPnNfYWN0aXZlKSkgewogCQlmcy0+a2lsbF9zYihzKTsKKwkJLyoKKwkJICogV2UgbmVlZCB0byBjYWxsIHJjdV9iYXJyaWVyIHNvIGFsbCB0aGUgZGVsYXllZCByY3UgZnJlZQorCQkgKiBpbm9kZXMgYXJlIGZsdXNoZWQgYmVmb3JlIHdlIHJlbGVhc2UgdGhlIGZzIG1vZHVsZS4KKwkJICovCisJCXJjdV9iYXJyaWVyKCk7CiAJCXB1dF9maWxlc3lzdGVtKGZzKTsKIAkJcHV0X3N1cGVyKHMpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9mcy9zeXN2L25hbWVpLmMgYi9mcy9zeXN2L25hbWVpLmMKaW5kZXggYjQyN2IxMi4uZTQ3NGZiYyAxMDA2NDQKLS0tIGEvZnMvc3lzdi9uYW1laS5jCisrKyBiL2ZzL3N5c3YvbmFtZWkuYwpAQCAtMjQ1LDcgKzI0NSw2IEBACiAJCW5ld19kZSA9IHN5c3ZfZmluZF9lbnRyeShuZXdfZGVudHJ5LCAmbmV3X3BhZ2UpOwogCQlpZiAoIW5ld19kZSkKIAkJCWdvdG8gb3V0X2RpcjsKLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJc3lzdl9zZXRfbGluayhuZXdfZGUsIG5ld19wYWdlLCBvbGRfaW5vZGUpOwogCQluZXdfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCQlpZiAoZGlyX2RlKQpAQCAtMjU3LDE4ICsyNTYsMTUgQEAKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IFNZU1ZfU0IobmV3X2Rpci0+aV9zYiktPnNfbGlua19tYXgpCiAJCQkJZ290byBvdXRfZGlyOwogCQl9Ci0JCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCWVyciA9IHN5c3ZfYWRkX2xpbmsobmV3X2RlbnRyeSwgb2xkX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2RpcjsKLQkJfQogCQlpZiAoZGlyX2RlKQogCQkJaW5vZGVfaW5jX2xpbmtfY291bnQobmV3X2Rpcik7CiAJfQogCiAJc3lzdl9kZWxldGVfZW50cnkob2xkX2RlLCBvbGRfcGFnZSk7Ci0JaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiAKIAlpZiAoZGlyX2RlKSB7CiAJCXN5c3Zfc2V0X2xpbmsoZGlyX2RlLCBkaXJfcGFnZSwgbmV3X2Rpcik7CmRpZmYgLS1naXQgYS9mcy91ZGYvbmFtZWkuYyBiL2ZzL3VkZi9uYW1laS5jCmluZGV4IDJiZTBmOWUuLmI3YzMzOGQgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9uYW1laS5jCisrKyBiL2ZzL3VkZi9uYW1laS5jCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8bGludXgvY3JjLWl0dS10Lmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KIAorZW51bSB7IFVERl9NQVhfTElOS1MgPSAweGZmZmYgfTsKKwogc3RhdGljIGlubGluZSBpbnQgdWRmX21hdGNoKGludCBsZW4xLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lMSwgaW50IGxlbjIsCiAJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZTIpCiB7CkBAIC02NTAsNyArNjUyLDcgQEAKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvOwogCiAJZXJyID0gLUVNTElOSzsKLQlpZiAoZGlyLT5pX25saW5rID49ICgyNTYgPDwgc2l6ZW9mKGRpci0+aV9ubGluaykpIC0gMSkKKwlpZiAoZGlyLT5pX25saW5rID49IFVERl9NQVhfTElOS1MpCiAJCWdvdG8gb3V0OwogCiAJZXJyID0gLUVJTzsKQEAgLTEwMzQsOSArMTAzNiw4IEBACiAJc3RydWN0IGZpbGVJZGVudERlc2MgY2ZpLCAqZmk7CiAJaW50IGVycjsKIAotCWlmIChpbm9kZS0+aV9ubGluayA+PSAoMjU2IDw8IHNpemVvZihpbm9kZS0+aV9ubGluaykpIC0gMSkgeworCWlmIChpbm9kZS0+aV9ubGluayA+PSBVREZfTUFYX0xJTktTKQogCQlyZXR1cm4gLUVNTElOSzsKLQl9CiAKIAlmaSA9IHVkZl9hZGRfZW50cnkoZGlyLCBkZW50cnksICZmaWJoLCAmY2ZpLCAmZXJyKTsKIAlpZiAoIWZpKSB7CkBAIC0xMTMxLDkgKzExMzIsNyBAQAogCQkJZ290byBlbmRfcmVuYW1lOwogCiAJCXJldHZhbCA9IC1FTUxJTks7Ci0JCWlmICghbmV3X2lub2RlICYmCi0JCQluZXdfZGlyLT5pX25saW5rID49Ci0JCQkJKDI1NiA8PCBzaXplb2YobmV3X2Rpci0+aV9ubGluaykpIC0gMSkKKwkJaWYgKCFuZXdfaW5vZGUgJiYgbmV3X2Rpci0+aV9ubGluayA+PSBVREZfTUFYX0xJTktTKQogCQkJZ290byBlbmRfcmVuYW1lOwogCX0KIAlpZiAoIW5maSkgewpkaWZmIC0tZ2l0IGEvZnMvdWZzL25hbWVpLmMgYi9mcy91ZnMvbmFtZWkuYwppbmRleCAxMmYzOWI5Li5kNmY2ODE1IDEwMDY0NAotLS0gYS9mcy91ZnMvbmFtZWkuYworKysgYi9mcy91ZnMvbmFtZWkuYwpAQCAtMzA2LDcgKzMwNiw2IEBACiAJCW5ld19kZSA9IHVmc19maW5kX2VudHJ5KG5ld19kaXIsICZuZXdfZGVudHJ5LT5kX25hbWUsICZuZXdfcGFnZSk7CiAJCWlmICghbmV3X2RlKQogCQkJZ290byBvdXRfZGlyOwotCQlpbm9kZV9pbmNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCQl1ZnNfc2V0X2xpbmsobmV3X2RpciwgbmV3X2RlLCBuZXdfcGFnZSwgb2xkX2lub2RlKTsKIAkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJaWYgKGRpcl9kZSkKQEAgLTMxOCwxMiArMzE3LDkgQEAKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IFVGU19MSU5LX01BWCkKIAkJCQlnb3RvIG91dF9kaXI7CiAJCX0KLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJZXJyID0gdWZzX2FkZF9saW5rKG5ld19kZW50cnksIG9sZF9pbm9kZSk7Ci0JCWlmIChlcnIpIHsKLQkJCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCX0KIAkJaWYgKGRpcl9kZSkKIAkJCWlub2RlX2luY19saW5rX2NvdW50KG5ld19kaXIpOwogCX0KQEAgLTMzMSwxMiArMzI3LDExIEBACiAJLyoKIAkgKiBMaWtlIG1vc3Qgb3RoZXIgVW5peCBzeXN0ZW1zLCBzZXQgdGhlIGN0aW1lIGZvciBpbm9kZXMgb24gYQogIAkgKiByZW5hbWUuCi0JICogaW5vZGVfZGVjX2xpbmtfY291bnQoKSB3aWxsIG1hcmsgdGhlIGlub2RlIGRpcnR5LgogCSAqLwogCW9sZF9pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAKIAl1ZnNfZGVsZXRlX2VudHJ5KG9sZF9kaXIsIG9sZF9kZSwgb2xkX3BhZ2UpOwotCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisJbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOwogCiAJaWYgKGRpcl9kZSkgewogCQl1ZnNfc2V0X2xpbmsob2xkX2lub2RlLCBkaXJfZGUsIGRpcl9wYWdlLCBuZXdfZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2Rpc2NhcmQuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2Rpc2NhcmQuYwppbmRleCAwNTIwMWFlLi5kNjE2MTFjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19kaXNjYXJkLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZGlzY2FyZC5jCkBAIC0xNTIsNiArMTUyLDggQEAKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1YRlNfRVJST1IoRVBFUk0pOworCWlmICghYmxrX3F1ZXVlX2Rpc2NhcmQocSkpCisJCXJldHVybiAtWEZTX0VSUk9SKEVPUE5PVFNVUFApOwogCWlmIChjb3B5X2Zyb21fdXNlcigmcmFuZ2UsIHVyYW5nZSwgc2l6ZW9mKHJhbmdlKSkpCiAJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IGIwNmVkZTEuLjBjYTBlM2MgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtNjk1LDE0ICs2OTUsMTkgQEAKIAl4ZnNfbW91bnRfdAkJKm1wLAogCXZvaWQJCQlfX3VzZXIgKmFyZykKIHsKLQl4ZnNfZnNvcF9nZW9tX3YxX3QJZnNnZW87CisJeGZzX2Zzb3BfZ2VvbV90ICAgICAgICAgZnNnZW87CiAJaW50CQkJZXJyb3I7CiAKLQllcnJvciA9IHhmc19mc19nZW9tZXRyeShtcCwgKHhmc19mc29wX2dlb21fdCAqKSZmc2dlbywgMyk7CisJZXJyb3IgPSB4ZnNfZnNfZ2VvbWV0cnkobXAsICZmc2dlbywgMyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gLWVycm9yOwogCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmc2dlbywgc2l6ZW9mKGZzZ2VvKSkpCisJLyoKKwkgKiBDYWxsZXIgc2hvdWxkIGhhdmUgcGFzc2VkIGFuIGFyZ3VtZW50IG9mIHR5cGUKKwkgKiB4ZnNfZnNvcF9nZW9tX3YxX3QuICBUaGlzIGlzIGEgcHJvcGVyIHN1YnNldCBvZiB0aGUKKwkgKiB4ZnNfZnNvcF9nZW9tX3QgdGhhdCB4ZnNfZnNfZ2VvbWV0cnkoKSBmaWxscyBpbi4KKwkgKi8KKwlpZiAoY29weV90b191c2VyKGFyZywgJmZzZ2VvLCBzaXplb2YoeGZzX2Zzb3BfZ2VvbV92MV90KSkpCiAJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CiAJcmV0dXJuIDA7CiB9CkBAIC05ODUsMTAgKzk5MCwyMiBAQAogCiAJCS8qCiAJCSAqIEV4dGVudCBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYXBwcm9wcmlhdGUgYmxvY2sKLQkJICogc2l6ZSwgaWYgc2V0IGF0IGFsbC4KKwkJICogc2l6ZSwgaWYgc2V0IGF0IGFsbC4gSXQgbXVzdCBhbHNvIGJlIHNtYWxsZXIgdGhhbiB0aGUKKwkJICogbWF4aW11bSBleHRlbnQgc2l6ZSBzdXBwb3J0ZWQgYnkgdGhlIGZpbGVzeXN0ZW0uCisJCSAqCisJCSAqIEFsc28sIGZvciBub24tcmVhbHRpbWUgZmlsZXMsIGxpbWl0IHRoZSBleHRlbnQgc2l6ZSBoaW50IHRvCisJCSAqIGhhbGYgdGhlIHNpemUgb2YgdGhlIEFHcyBpbiB0aGUgZmlsZXN5c3RlbSBzbyBhbGlnbm1lbnQKKwkJICogZG9lc24ndCByZXN1bHQgaW4gZXh0ZW50cyBsYXJnZXIgdGhhbiBhbiBBRy4KIAkJICovCiAJCWlmIChmYS0+ZnN4X2V4dHNpemUgIT0gMCkgewotCQkJeGZzX2V4dGxlbl90CXNpemU7CisJCQl4ZnNfZXh0bGVuX3QgICAgc2l6ZTsKKwkJCXhmc19mc2Jsb2NrX3QgICBleHRzaXplX2ZzYjsKKworCQkJZXh0c2l6ZV9mc2IgPSBYRlNfQl9UT19GU0IobXAsIGZhLT5mc3hfZXh0c2l6ZSk7CisJCQlpZiAoZXh0c2l6ZV9mc2IgPiBNQVhFWFRMRU4pIHsKKwkJCQljb2RlID0gWEZTX0VSUk9SKEVJTlZBTCk7CisJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQl9CiAKIAkJCWlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApIHx8CiAJCQkgICAgKChtYXNrICYgRlNYX1hGTEFHUykgJiYKQEAgLTk5Nyw2ICsxMDE0LDEwIEBACiAJCQkJICAgICAgIG1wLT5tX3NiLnNiX2Jsb2NrbG9nOwogCQkJfSBlbHNlIHsKIAkJCQlzaXplID0gbXAtPm1fc2Iuc2JfYmxvY2tzaXplOworCQkJCWlmIChleHRzaXplX2ZzYiA+IG1wLT5tX3NiLnNiX2FnYmxvY2tzIC8gMikgeworCQkJCQljb2RlID0gWEZTX0VSUk9SKEVJTlZBTCk7CisJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJCX0KIAkJCX0KIAogCQkJaWYgKGZhLT5mc3hfZXh0c2l6ZSAlIHNpemUpIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCBmOGU4NTRiLi4yMDZhMjgxIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCkBAIC0xODYzLDEyICsxODYzLDE0IEBACiAJeGZzX2RxdW90X3QJKmRxcG91dDsKIAl4ZnNfZHF1b3RfdAkqZHFwOwogCWludAkJcmVzdGFydHM7CisJaW50CQlzdGFydGFnYWluOwogCiAJcmVzdGFydHMgPSAwOwogCWRxcG91dCA9IE5VTEw7CiAKIAkvKiBsb2Nrb3JkZXI6IGhhc2hjaGFpbmxvY2ssIGZyZWVsaXN0bG9jaywgbXBsaXN0bG9jaywgZHFsb2NrLCBkcWZsb2NrICovCi1zdGFydGFnYWluOgorYWdhaW46CisJc3RhcnRhZ2FpbiA9IDA7CiAJbXV0ZXhfbG9jaygmeGZzX0dxbS0+cW1fZHFmcmxpc3RfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRxcCwgJnhmc19HcW0tPnFtX2RxZnJsaXN0LCBxX2ZyZWVsaXN0KSB7CkBAIC0xODg1LDEzICsxODg3LDEwIEBACiAJCQlBU1NFUlQoISAoZHFwLT5kcV9mbGFncyAmIFhGU19EUV9JTkFDVElWRSkpOwogCiAJCQl0cmFjZV94ZnNfZHFyZWNsYWltX3dhbnQoZHFwKTsKLQotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQltdXRleF91bmxvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOwotCQkJaWYgKCsrcmVzdGFydHMgPj0gWEZTX1FNX1JFQ0xBSU1fTUFYX1JFU1RBUlRTKQotCQkJCXJldHVybiBOVUxMOwogCQkJWFFNX1NUQVRTX0lOQyh4cW1zdGF0cy54c19xbV9kcXdhbnRzKTsKLQkJCWdvdG8gc3RhcnRhZ2FpbjsKKwkJCXJlc3RhcnRzKys7CisJCQlzdGFydGFnYWluID0gMTsKKwkJCWdvdG8gZHF1bmxvY2s7CiAJCX0KIAogCQkvKgpAQCAtMTkwNiwyMyArMTkwNSwyMCBAQAogCQkJQVNTRVJUKGxpc3RfZW1wdHkoJmRxcC0+cV9tcGxpc3QpKTsKIAkJCWxpc3RfZGVsX2luaXQoJmRxcC0+cV9mcmVlbGlzdCk7CiAJCQl4ZnNfR3FtLT5xbV9kcWZybGlzdF9jbnQtLTsKLQkJCXhmc19kcXVubG9jayhkcXApOwogCQkJZHFwb3V0ID0gZHFwOwogCQkJWFFNX1NUQVRTX0lOQyh4cW1zdGF0cy54c19xbV9kcWluYWN0X3JlY2xhaW1zKTsKLQkJCWJyZWFrOworCQkJZ290byBkcXVubG9jazsKIAkJfQogCiAJCUFTU0VSVChkcXAtPnFfaGFzaCk7CiAJCUFTU0VSVCghbGlzdF9lbXB0eSgmZHFwLT5xX21wbGlzdCkpOwogCiAJCS8qCi0JCSAqIFRyeSB0byBncmFiIHRoZSBmbHVzaCBsb2NrLiBJZiB0aGlzIGRxdW90IGlzIGluIHRoZSBwcm9jZXNzIG9mCi0JCSAqIGdldHRpbmcgZmx1c2hlZCB0byBkaXNrLCB3ZSBkb24ndCB3YW50IHRvIHJlY2xhaW0gaXQuCisJCSAqIFRyeSB0byBncmFiIHRoZSBmbHVzaCBsb2NrLiBJZiB0aGlzIGRxdW90IGlzIGluIHRoZSBwcm9jZXNzCisJCSAqIG9mIGdldHRpbmcgZmx1c2hlZCB0byBkaXNrLCB3ZSBkb24ndCB3YW50IHRvIHJlY2xhaW0gaXQuCiAJCSAqLwotCQlpZiAoIXhmc19kcWZsb2NrX25vd2FpdChkcXApKSB7Ci0JCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJCWlmICgheGZzX2RxZmxvY2tfbm93YWl0KGRxcCkpCisJCQlnb3RvIGRxdW5sb2NrOwogCiAJCS8qCiAJCSAqIFdlIGhhdmUgdGhlIGZsdXNoIGxvY2sgc28gd2Uga25vdyB0aGF0IHRoaXMgaXMgbm90IGluIHRoZQpAQCAtMTk0NCw4ICsxOTQwLDcgQEAKIAkJCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwKIAkJCSJ4ZnNfcW1fZHFyZWNsYWltOiBkcXVvdCAlcCBmbHVzaCBmYWlsZWQiLCBkcXApOwogCQkJfQotCQkJeGZzX2RxdW5sb2NrKGRxcCk7IC8qIGRxZmx1c2ggdW5sb2NrcyBkcWZsb2NrICovCi0JCQljb250aW51ZTsKKwkJCWdvdG8gZHF1bmxvY2s7CiAJCX0KIAogCQkvKgpAQCAtMTk2NywxMyArMTk2Miw4IEBACiAJCSAqLwogCQlpZiAoIW11dGV4X3RyeWxvY2soJm1wLT5tX3F1b3RhaW5mby0+cWlfZHFsaXN0X2xvY2spKSB7CiAJCQlyZXN0YXJ0cysrOwotCQkJbXV0ZXhfdW5sb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jayk7Ci0JCQl4ZnNfZHFmdW5sb2NrKGRxcCk7Ci0JCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQkJCW11dGV4X3VubG9jaygmeGZzX0dxbS0+cW1fZHFmcmxpc3RfbG9jayk7Ci0JCQlpZiAocmVzdGFydHMrKyA+PSBYRlNfUU1fUkVDTEFJTV9NQVhfUkVTVEFSVFMpCi0JCQkJcmV0dXJuIE5VTEw7Ci0JCQlnb3RvIHN0YXJ0YWdhaW47CisJCQlzdGFydGFnYWluID0gMTsKKwkJCWdvdG8gcWh1bmxvY2s7CiAJCX0KIAogCQlBU1NFUlQoZHFwLT5xX25yZWZzID09IDApOwpAQCAtMTk4NiwxNCArMTk3NiwyMCBAQAogCQl4ZnNfR3FtLT5xbV9kcWZybGlzdF9jbnQtLTsKIAkJZHFwb3V0ID0gZHFwOwogCQltdXRleF91bmxvY2soJm1wLT5tX3F1b3RhaW5mby0+cWlfZHFsaXN0X2xvY2spOworcWh1bmxvY2s6CiAJCW11dGV4X3VubG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spOwogZHFmdW5sb2NrOgogCQl4ZnNfZHFmdW5sb2NrKGRxcCk7CitkcXVubG9jazoKIAkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCWlmIChkcXBvdXQpCiAJCQlicmVhazsKIAkJaWYgKHJlc3RhcnRzID49IFhGU19RTV9SRUNMQUlNX01BWF9SRVNUQVJUUykKLQkJCXJldHVybiBOVUxMOworCQkJYnJlYWs7CisJCWlmIChzdGFydGFnYWluKSB7CisJCQltdXRleF91bmxvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOworCQkJZ290byBhZ2FpbjsKKwkJfQogCX0KIAltdXRleF91bmxvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOwogCXJldHVybiBkcXBvdXQ7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmggYi9mcy94ZnMveGZzX2FsbG9jLmgKaW5kZXggMGFiNTZiMy4uZDBiM2JjNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5oCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuaApAQCAtNzUsNiArNzUsMjIgQEAKICNkZWZpbmUgWEZTX0FMTE9DX1NFVF9BU0lERShtcCkgICg0ICsgKChtcCktPm1fc2Iuc2JfYWdjb3VudCAqIDQpKQogCiAvKgorICogV2hlbiBkZWNpZGluZyBob3cgbXVjaCBzcGFjZSB0byBhbGxvY2F0ZSBvdXQgb2YgYW4gQUcsIHdlIGxpbWl0IHRoZQorICogYWxsb2NhdGlvbiBtYXhpbXVtIHNpemUgdG8gdGhlIHNpemUgdGhlIEFHLiBIb3dldmVyLCB3ZSBjYW5ub3QgdXNlIGFsbCB0aGUKKyAqIGJsb2NrcyBpbiB0aGUgQUcgLSBzb21lIGFyZSBwZXJtYW5lbnRseSB1c2VkIGJ5IG1ldGFkYXRhLiBUaGVzZQorICogYmxvY2tzIGFyZSBnZW5lcmFsbHk6CisgKgktIHRoZSBBRyBzdXBlcmJsb2NrLCBBR0YsIEFHSSBhbmQgQUdGTAorICoJLSB0aGUgQUdGIChibm8gYW5kIGNudCkgYW5kIEFHSSBidHJlZSByb290IGJsb2NrcworICoJLSA0IGJsb2NrcyBvbiB0aGUgQUdGTCBhY2NvcmRpbmcgdG8gWEZTX0FMTE9DX1NFVF9BU0lERSgpIGxpbWl0cworICoKKyAqIFRoZSBBRyBoZWFkZXJzIGFyZSBzZWN0b3Igc2l6ZWQsIHNvIHRoZSBhbW91bnQgb2Ygc3BhY2UgdGhleSB0YWtlIHVwIGlzCisgKiBkZXBlbmRlbnQgb24gZmlsZXN5c3RlbSBnZW9tZXRyeS4gVGhlIG90aGVycyBhcmUgYWxsIHNpbmdsZSBibG9ja3MuCisgKi8KKyNkZWZpbmUgWEZTX0FMTE9DX0FHX01BWF9VU0FCTEUobXApCVwKKwkoKG1wKS0+bV9zYi5zYl9hZ2Jsb2NrcyAtIFhGU19CQl9UT19GU0IobXAsIFhGU19GU1NfVE9fQkIobXAsIDQpKSAtIDcpCisKKworLyoKICAqIEFyZ3VtZW50IHN0cnVjdHVyZSBmb3IgeGZzX2FsbG9jIHJvdXRpbmVzLgogICogVGhpcyBpcyB0dXJuZWQgaW50byBhIHN0cnVjdHVyZSB0byBhdm9pZCBoYXZpbmcgMjAgYXJndW1lbnRzIHBhc3NlZAogICogZG93biBzZXZlcmFsIGxldmVscyBvZiB0aGUgc3RhY2suCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy94ZnNfYm1hcC5jCmluZGV4IDQxMTFjZDMuLmRjM2FmZDc3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtMTAzOCwxNyArMTAzOCwzNCBAQAogCQkgKiBGaWxsaW5nIGluIHRoZSBtaWRkbGUgcGFydCBvZiBhIHByZXZpb3VzIGRlbGF5ZWQgYWxsb2NhdGlvbi4KIAkJICogQ29udGlndWl0eSBpcyBpbXBvc3NpYmxlIGhlcmUuCiAJCSAqIFRoaXMgY2FzZSBpcyBhdm9pZGVkIGFsbW9zdCBhbGwgdGhlIHRpbWUuCisJCSAqCisJCSAqIFdlIHN0YXJ0IHdpdGggYSBkZWxheWVkIGFsbG9jYXRpb246CisJCSAqCisJCSAqICtkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkKworCQkgKiAgUFJFViBAIGlkeAorCQkgKgorCSAgICAgICAgICogYW5kIHdlIGFyZSBhbGxvY2F0aW5nOgorCQkgKiAgICAgICAgICAgICAgICAgICAgICtycnJycnJycnJycnJycnJycisKKwkJICoJCQkgICAgICBuZXcKKwkJICoKKwkJICogYW5kIHdlIHNldCBpdCB1cCBmb3IgaW5zZXJ0aW9uIGFzOgorCQkgKiArZGRkZGRkZGRkZGRkZGRkZGRkZCtycnJycnJycnJycnJycnJycitkZGRkZGRkZGRkZGRkZGRkZCsKKwkJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3CisJCSAqICBQUkVWIEAgaWR4ICAgICAgICAgIExFRlQgICAgICAgICAgICAgIFJJR0hUCisJCSAqICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkIGF0IGlkeCArIDEKIAkJICovCiAJCXRlbXAgPSBuZXctPmJyX3N0YXJ0b2ZmIC0gUFJFVi5icl9zdGFydG9mZjsKLQkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCAwLCBfVEhJU19JUF8pOwotCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudChlcCwgdGVtcCk7Ci0JCXJbMF0gPSAqbmV3OwotCQlyWzFdLmJyX3N0YXRlID0gUFJFVi5icl9zdGF0ZTsKLQkJclsxXS5icl9zdGFydGJsb2NrID0gMDsKLQkJclsxXS5icl9zdGFydG9mZiA9IG5ld19lbmRvZmY7CiAJCXRlbXAyID0gUFJFVi5icl9zdGFydG9mZiArIFBSRVYuYnJfYmxvY2tjb3VudCAtIG5ld19lbmRvZmY7Ci0JCXJbMV0uYnJfYmxvY2tjb3VudCA9IHRlbXAyOwotCQl4ZnNfaWV4dF9pbnNlcnQoaXAsIGlkeCArIDEsIDIsICZyWzBdLCBzdGF0ZSk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCwgMCwgX1RISVNfSVBfKTsKKwkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsIHRlbXApOwkvKiB0cnVuY2F0ZSBQUkVWICovCisJCUxFRlQgPSAqbmV3OworCQlSSUdIVC5icl9zdGF0ZSA9IFBSRVYuYnJfc3RhdGU7CisJCVJJR0hULmJyX3N0YXJ0YmxvY2sgPSBudWxsc3RhcnRibG9jaygKKwkJCQkoaW50KXhmc19ibWFwX3dvcnN0X2luZGxlbihpcCwgdGVtcDIpKTsKKwkJUklHSFQuYnJfc3RhcnRvZmYgPSBuZXdfZW5kb2ZmOworCQlSSUdIVC5icl9ibG9ja2NvdW50ID0gdGVtcDI7CisJCS8qIGluc2VydCBMRUZUIChyWzBdKSBhbmQgUklHSFQgKHJbMV0pIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwkJeGZzX2lleHRfaW5zZXJ0KGlwLCBpZHggKyAxLCAyLCAmTEVGVCwgc3RhdGUpOwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHggKyAxOwogCQlpcC0+aV9kLmRpX25leHRlbnRzKys7CiAJCWlmIChjdXIgPT0gTlVMTCkKQEAgLTI0MzAsNyArMjQ0Nyw3IEBACiAJCXN0YXJ0YWcgPSBhZyA9IDA7CiAKIAlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7Ci0Jd2hpbGUgKCpibGVuIDwgYXAtPmFsZW4pIHsKKwl3aGlsZSAoKmJsZW4gPCBhcmdzLT5tYXhsZW4pIHsKIAkJaWYgKCFwYWctPnBhZ2ZfaW5pdCkgewogCQkJZXJyb3IgPSB4ZnNfYWxsb2NfcGFnZl9pbml0KG1wLCBhcmdzLT50cCwgYWcsCiAJCQkJCQkgICAgWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSyk7CkBAIC0yNDUyLDcgKzI0NjksNyBAQAogCQkJbm90aW5pdCA9IDE7CiAKIAkJaWYgKHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGFwLT5pcCkpIHsKLQkJCWlmICgqYmxlbiA+PSBhcC0+YWxlbikKKwkJCWlmICgqYmxlbiA+PSBhcmdzLT5tYXhsZW4pCiAJCQkJYnJlYWs7CiAKIAkJCWlmIChhcC0+dXNlcmRhdGEpIHsKQEAgLTI0OTgsMTQgKzI1MTUsMTQgQEAKIAkgKiBJZiB0aGUgYmVzdCBzZWVuIGxlbmd0aCBpcyBsZXNzIHRoYW4gdGhlIHJlcXVlc3QKIAkgKiBsZW5ndGgsIHVzZSB0aGUgYmVzdCBhcyB0aGUgbWluaW11bS4KIAkgKi8KLQllbHNlIGlmICgqYmxlbiA8IGFwLT5hbGVuKQorCWVsc2UgaWYgKCpibGVuIDwgYXJncy0+bWF4bGVuKQogCQlhcmdzLT5taW5sZW4gPSAqYmxlbjsKIAkvKgotCSAqIE90aGVyd2lzZSB3ZSd2ZSBzZWVuIGFuIGV4dGVudCBhcyBiaWcgYXMgYWxlbiwKKwkgKiBPdGhlcndpc2Ugd2UndmUgc2VlbiBhbiBleHRlbnQgYXMgYmlnIGFzIG1heGxlbiwKIAkgKiB1c2UgdGhhdCBhcyB0aGUgbWluaW11bS4KIAkgKi8KIAllbHNlCi0JCWFyZ3MtPm1pbmxlbiA9IGFwLT5hbGVuOworCQlhcmdzLT5taW5sZW4gPSBhcmdzLT5tYXhsZW47CiAKIAkvKgogCSAqIHNldCB0aGUgZmFpbHVyZSBmYWxsYmFjayBjYXNlIHRvIGxvb2sgaW4gdGhlIHNlbGVjdGVkCkBAIC0yNTczLDcgKzI1OTAsOSBAQAogCWFyZ3MudHAgPSBhcC0+dHA7CiAJYXJncy5tcCA9IG1wOwogCWFyZ3MuZnNibm8gPSBhcC0+cnZhbDsKLQlhcmdzLm1heGxlbiA9IE1JTihhcC0+YWxlbiwgbXAtPm1fc2Iuc2JfYWdibG9ja3MpOworCisJLyogVHJpbSB0aGUgYWxsb2NhdGlvbiBiYWNrIHRvIHRoZSBtYXhpbXVtIGFuIEFHIGNhbiBmaXQuICovCisJYXJncy5tYXhsZW4gPSBNSU4oYXAtPmFsZW4sIFhGU19BTExPQ19BR19NQVhfVVNBQkxFKG1wKSk7CiAJYXJncy5maXJzdGJsb2NrID0gYXAtPmZpcnN0YmxvY2s7CiAJYmxlbiA9IDA7CiAJaWYgKG51bGxmYikgewpAQCAtMjYyMSw3ICsyNjQwLDcgQEAKIAkJCS8qCiAJCQkgKiBBZGp1c3QgZm9yIGFsaWdubWVudAogCQkJICovCi0JCQlpZiAoYmxlbiA+IGFyZ3MuYWxpZ25tZW50ICYmIGJsZW4gPD0gYXAtPmFsZW4pCisJCQlpZiAoYmxlbiA+IGFyZ3MuYWxpZ25tZW50ICYmIGJsZW4gPD0gYXJncy5tYXhsZW4pCiAJCQkJYXJncy5taW5sZW4gPSBibGVuIC0gYXJncy5hbGlnbm1lbnQ7CiAJCQlhcmdzLm1pbmFsaWduc2xvcCA9IDA7CiAJCX0gZWxzZSB7CkBAIC0yNjQwLDcgKzI2NTksNyBAQAogCQkJICogb2YgbWlubGVuK2FsaWdubWVudCtzbG9wIGRvZXNuJ3QgZ28gdXAKIAkJCSAqIGJldHdlZW4gdGhlIGNhbGxzLgogCQkJICovCi0JCQlpZiAoYmxlbiA+IG1wLT5tX2RhbGlnbiAmJiBibGVuIDw9IGFwLT5hbGVuKQorCQkJaWYgKGJsZW4gPiBtcC0+bV9kYWxpZ24gJiYgYmxlbiA8PSBhcmdzLm1heGxlbikKIAkJCQluZXh0bWlubGVuID0gYmxlbiAtIG1wLT5tX2RhbGlnbjsKIAkJCWVsc2UKIAkJCQluZXh0bWlubGVuID0gYXJncy5taW5sZW47CkBAIC00NDg1LDYgKzQ1MDQsMTYgQEAKIAkJCQkvKiBGaWd1cmUgb3V0IHRoZSBleHRlbnQgc2l6ZSwgYWRqdXN0IGFsZW4gKi8KIAkJCQlleHRzeiA9IHhmc19nZXRfZXh0c3pfaGludChpcCk7CiAJCQkJaWYgKGV4dHN6KSB7CisJCQkJCS8qCisJCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkb24ndCBleGNlZWQgYSBzaW5nbGUKKwkJCQkJICogZXh0ZW50IGxlbmd0aCB3aGVuIHdlIGFsaWduIHRoZQorCQkJCQkgKiBleHRlbnQgYnkgcmVkdWNpbmcgbGVuZ3RoIHdlIGFyZQorCQkJCQkgKiBnb2luZyB0byBhbGxvY2F0ZSBieSB0aGUgbWF4aW11bQorCQkJCQkgKiBhbW91bnQgZXh0ZW50IHNpemUgYWxpZ21lbnQgbWF5CisJCQkJCSAqIHJlcXVpcmUuCisJCQkJCSAqLworCQkJCQlhbGVuID0gWEZTX0ZJTEJMS1NfTUlOKGxlbiwKKwkJCQkJCSAgIE1BWEVYVExFTiAtICgyICogZXh0c3ogLSAxKSk7CiAJCQkJCWVycm9yID0geGZzX2JtYXBfZXh0c2l6ZV9hbGlnbihtcCwKIAkJCQkJCQkmZ290LCAmcHJldiwgZXh0c3osCiAJCQkJCQkJcnQsIGVvZiwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwppbmRleCA5OGM2ZjczLi42ZjhjMjFjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCkBAIC00MjcsMTMgKzQyNywxNSBAQAogCiAJCWlmIChyZW1vdmUpIHsKIAkJCS8qCi0JCQkgKiBXZSBoYXZlIHRvIHJlbW92ZSB0aGUgbG9nIGl0ZW0gZnJvbSB0aGUgdHJhbnNhY3Rpb24KLQkJCSAqIGFzIHdlIGFyZSBhYm91dCB0byByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhlCi0JCQkgKiBidWZmZXIuICBJZiB3ZSBkb24ndCwgdGhlIHVubG9jayB0aGF0IG9jY3VycyBsYXRlcgotCQkJICogaW4geGZzX3RyYW5zX3VuY29tbWl0KCkgd2lsbCByeSB0byByZWZlcmVuY2UgdGhlCisJCQkgKiBJZiB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb250ZXh0LCB3ZSBoYXZlIHRvCisJCQkgKiByZW1vdmUgdGhlIGxvZyBpdGVtIGZyb20gdGhlIHRyYW5zYWN0aW9uIGFzIHdlIGFyZQorCQkJICogYWJvdXQgdG8gcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIuICBJZiB3ZQorCQkJICogZG9uJ3QsIHRoZSB1bmxvY2sgdGhhdCBvY2N1cnMgbGF0ZXIgaW4KKwkJCSAqIHhmc190cmFuc191bmNvbW1pdCgpIHdpbGwgdHJ5IHRvIHJlZmVyZW5jZSB0aGUKIAkJCSAqIGJ1ZmZlciB3aGljaCB3ZSBubyBsb25nZXIgaGF2ZSBhIGhvbGQgb24uCiAJCQkgKi8KLQkJCXhmc190cmFuc19kZWxfaXRlbShsaXApOworCQkJaWYgKGxpcC0+bGlfZGVzYykKKwkJCQl4ZnNfdHJhbnNfZGVsX2l0ZW0obGlwKTsKIAogCQkJLyoKIAkJCSAqIFNpbmNlIHRoZSB0cmFuc2FjdGlvbiBubyBsb25nZXIgcmVmZXJzIHRvIHRoZSBidWZmZXIsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYwppbmRleCA3NWYyZWY2Li5kMjJlNjI2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKQEAgLTEzOCw3ICsxMzgsOCBAQAogCiAJaWYgKHJlbW92ZSkgewogCQlBU1NFUlQoIShsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkpOwotCQl4ZnNfdHJhbnNfZGVsX2l0ZW0obGlwKTsKKwkJaWYgKGxpcC0+bGlfZGVzYykKKwkJCXhmc190cmFuc19kZWxfaXRlbShsaXApOwogCQl4ZnNfZWZpX2l0ZW1fZnJlZShlZmlwKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwppbmRleCBjZWM4OWRkLi44NTY2OGVmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Zzb3BzLmMKKysrIGIvZnMveGZzL3hmc19mc29wcy5jCkBAIC01Myw2ICs1Myw5IEBACiAJeGZzX2Zzb3BfZ2VvbV90CQkqZ2VvLAogCWludAkJCW5ld192ZXJzaW9uKQogeworCisJbWVtc2V0KGdlbywgMCwgc2l6ZW9mKCpnZW8pKTsKKwogCWdlby0+YmxvY2tzaXplID0gbXAtPm1fc2Iuc2JfYmxvY2tzaXplOwogCWdlby0+cnRleHRzaXplID0gbXAtPm1fc2Iuc2JfcmV4dHNpemU7CiAJZ2VvLT5hZ2Jsb2NrcyA9IG1wLT5tX3NiLnNiX2FnYmxvY2tzOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hmc19pb21hcC5jCmluZGV4IDU1NTgyYmQuLjhhMGYwNDQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuYworKysgYi9mcy94ZnMveGZzX2lvbWFwLmMKQEAgLTMzNyw3ICszMzcsMTIgQEAKIAkJaW50IHNoaWZ0ID0gMDsKIAkJaW50NjRfdCBmcmVlc3A7CiAKLQkJYWxsb2NfYmxvY2tzID0gWEZTX0JfVE9fRlNCKG1wLCBpcC0+aV9zaXplKTsKKwkJLyoKKwkJICogcm91bmRkb3duX3Bvd19vZl90d28oKSByZXR1cm5zIGFuIHVuZGVmaW5lZCByZXN1bHQKKwkJICogaWYgd2UgcGFzcyBpbiBhbGxvY19ibG9ja3MgPSAwLiBIZW5jZSB0aGUgIisgMSIgdG8KKwkJICogZW5zdXJlIHdlIGFsd2F5cyBwYXNzIGluIGEgbm9uLXplcm8gdmFsdWUuCisJCSAqLworCQlhbGxvY19ibG9ja3MgPSBYRlNfQl9UT19GU0IobXAsIGlwLT5pX3NpemUpICsgMTsKIAkJYWxsb2NfYmxvY2tzID0gWEZTX0ZJTEVPRkZfTUlOKE1BWEVYVExFTiwKIAkJCQkJcm91bmRkb3duX3Bvd19vZl90d28oYWxsb2NfYmxvY2tzKSk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmggYi9mcy94ZnMveGZzX2xvZy5oCmluZGV4IDkxNmViN2QuLjNiZDMyOTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nLmgKKysrIGIvZnMveGZzL3hmc19sb2cuaApAQCAtMTkxLDcgKzE5MSw3IEBACiAKIHhsb2dfdGlkX3QgeGZzX2xvZ19nZXRfdHJhbnNfaWRlbnQoc3RydWN0IHhmc190cmFucyAqdHApOwogCi1pbnQJeGZzX2xvZ19jb21taXRfY2lsKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBzdHJ1Y3QgeGZzX3RyYW5zICp0cCwKK3ZvaWQJeGZzX2xvZ19jb21taXRfY2lsKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBzdHJ1Y3QgeGZzX3RyYW5zICp0cCwKIAkJCQlzdHJ1Y3QgeGZzX2xvZ192ZWMgKmxvZ192ZWN0b3IsCiAJCQkJeGZzX2xzbl90ICpjb21taXRfbHNuLCBpbnQgZmxhZ3MpOwogYm9vbAl4ZnNfbG9nX2l0ZW1faW5fY3VycmVudF9jaGtwdChzdHJ1Y3QgeGZzX2xvZ19pdGVtICpsaXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfY2lsLmMgYi9mcy94ZnMveGZzX2xvZ19jaWwuYwppbmRleCA5ZGM4MTI1Li45Y2E1OWJlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19jaWwuYworKysgYi9mcy94ZnMveGZzX2xvZ19jaWwuYwpAQCAtNTQzLDcgKzU0Myw3IEBACiAKIAllcnJvciA9IHhsb2dfd3JpdGUobG9nLCAmbHZoZHIsIHRpYywgJmN0eC0+c3RhcnRfbHNuLCBOVUxMLCAwKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2Fib3J0OworCQlnb3RvIG91dF9hYm9ydF9mcmVlX3RpY2tldDsKIAogCS8qCiAJICogbm93IHRoYXQgd2UndmUgd3JpdHRlbiB0aGUgY2hlY2twb2ludCBpbnRvIHRoZSBsb2csIHN0cmljdGx5CkBAIC01NjksOCArNTY5LDkgQEAKIAl9CiAJc3Bpbl91bmxvY2soJmNpbC0+eGNfY2lsX2xvY2spOwogCisJLyogeGZzX2xvZ19kb25lIGFsd2F5cyBmcmVlcyB0aGUgdGlja2V0IG9uIGVycm9yLiAqLwogCWNvbW1pdF9sc24gPSB4ZnNfbG9nX2RvbmUobG9nLT5sX21wLCB0aWMsICZjb21taXRfaWNsb2csIDApOwotCWlmIChlcnJvciB8fCBjb21taXRfbHNuID09IC0xKQorCWlmIChjb21taXRfbHNuID09IC0xKQogCQlnb3RvIG91dF9hYm9ydDsKIAogCS8qIGF0dGFjaCBhbGwgdGhlIHRyYW5zYWN0aW9ucyB3LyBidXN5IGV4dGVudHMgdG8gaWNsb2cgKi8KQEAgLTYwMCw2ICs2MDEsOCBAQAogCWttZW1fZnJlZShuZXdfY3R4KTsKIAlyZXR1cm4gMDsKIAorb3V0X2Fib3J0X2ZyZWVfdGlja2V0OgorCXhmc19sb2dfdGlja2V0X3B1dCh0aWMpOwogb3V0X2Fib3J0OgogCXhsb2dfY2lsX2NvbW1pdHRlZChjdHgsIFhGU19MSV9BQk9SVEVEKTsKIAlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CkBAIC02MjIsNyArNjI1LDcgQEAKICAqIGJhY2tncm91bmQgY29tbWl0LCByZXR1cm5zIHdpdGhvdXQgaXQgaGVsZCBvbmNlIGJhY2tncm91bmQgY29tbWl0cyBhcmUKICAqIGFsbG93ZWQgYWdhaW4uCiAgKi8KLWludAordm9pZAogeGZzX2xvZ19jb21taXRfY2lsKAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAogCXN0cnVjdCB4ZnNfdHJhbnMJKnRwLApAQCAtNjM3LDExICs2NDAsNiBAQAogCWlmIChmbGFncyAmIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpCiAJCWxvZ19mbGFncyA9IFhGU19MT0dfUkVMX1BFUk1fUkVTRVJWOwogCi0JaWYgKFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpIHsKLQkJeGxvZ19jaWxfZnJlZV9sb2d2ZWMobG9nX3ZlY3Rvcik7Ci0JCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQl9Ci0KIAkvKgogCSAqIGRvIGFsbCB0aGUgaGFyZCB3b3JrIG9mIGZvcm1hdHRpbmcgaXRlbXMgKGluY2x1ZGluZyBtZW1vcnkKIAkgKiBhbGxvY2F0aW9uKSBvdXRzaWRlIHRoZSBDSUwgY29udGV4dCBsb2NrLiBUaGlzIHByZXZlbnRzIHN0YWxsaW5nIENJTApAQCAtNzAxLDcgKzY5OSw2IEBACiAJICovCiAJaWYgKHB1c2gpCiAJCXhsb2dfY2lsX3B1c2gobG9nLCAwKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnMuYyBiL2ZzL3hmcy94ZnNfdHJhbnMuYwppbmRleCAzM2RiYzRlLi43NjkyMjc5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zLmMKKysrIGIvZnMveGZzL3hmc190cmFucy5jCkBAIC0xNDQ2LDYgKzE0NDYsMTQgQEAKICAqIEJ1bGsgb3BlcmF0aW9uIHZlcnNpb24gb2YgeGZzX3RyYW5zX2NvbW1pdHRlZCB0aGF0IHRha2VzIGEgbG9nIHZlY3RvciBvZgogICogaXRlbXMgdG8gaW5zZXJ0IGludG8gdGhlIEFJTC4gVGhpcyB1c2VzIGJ1bGsgQUlMIGluc2VydGlvbiB0ZWNobmlxdWVzIHRvCiAgKiBtaW5pbWlzZSBsb2NrIHRyYWZmaWMuCisgKgorICogSWYgd2UgYXJlIGNhbGxlZCB3aXRoIHRoZSBhYm9ydGVkIGZsYWcgc2V0LCBpdCBpcyBiZWNhdXNlIGEgbG9nIHdyaXRlIGR1cmluZworICogYSBDSUwgY2hlY2twb2ludCBjb21taXQgaGFzIGZhaWxlZC4gSW4gdGhpcyBjYXNlLCBhbGwgdGhlIGl0ZW1zIGluIHRoZQorICogY2hlY2twb2ludCBoYXZlIGFscmVhZHkgZ29uZSB0aHJvdWdoIElPUF9DT01NSVRFRCBhbmQgSU9QX1VOTE9DSywgd2hpY2gKKyAqIG1lYW5zIHRoYXQgY2hlY2twb2ludCBjb21taXQgYWJvcnQgaGFuZGxpbmcgaXMgdHJlYXRlZCBleGFjdGx5IHRoZSBzYW1lCisgKiBhcyBhbiBpY2xvZyB3cml0ZSBlcnJvciBldmVuIHRob3VnaCB3ZSBoYXZlbid0IHN0YXJ0ZWQgYW55IElPIHlldC4gSGVuY2UgaW4KKyAqIHRoaXMgY2FzZSBhbGwgd2UgbmVlZCB0byBkbyBpcyBJT1BfQ09NTUlUVEVEIHByb2Nlc3NpbmcsIGZvbGxvd2VkIGJ5IGFuCisgKiBJT1BfVU5QSU4oYWJvcnRlZCkgY2FsbC4KICAqLwogdm9pZAogeGZzX3RyYW5zX2NvbW1pdHRlZF9idWxrKApAQCAtMTQ3Miw2ICsxNDgwLDE2IEBACiAJCWlmIChYRlNfTFNOX0NNUChpdGVtX2xzbiwgKHhmc19sc25fdCktMSkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCisJCS8qCisJCSAqIGlmIHdlIGFyZSBhYm9ydGluZyB0aGUgb3BlcmF0aW9uLCBubyBwb2ludCBpbiBpbnNlcnRpbmcgdGhlCisJCSAqIG9iamVjdCBpbnRvIHRoZSBBSUwgYXMgd2UgYXJlIGluIGEgc2h1dGRvd24gc2l0dWF0aW9uLgorCQkgKi8KKwkJaWYgKGFib3J0ZWQpIHsKKwkJCUFTU0VSVChYRlNfRk9SQ0VEX1NIVVRET1dOKGFpbHAtPnhhX21vdW50KSk7CisJCQlJT1BfVU5QSU4obGlwLCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJaWYgKGl0ZW1fbHNuICE9IGNvbW1pdF9sc24pIHsKIAogCQkJLyoKQEAgLTE1MDMsMjAgKzE1MjEsMjQgQEAKIH0KIAogLyoKLSAqIENhbGxlZCBmcm9tIHRoZSB0cmFuc19jb21taXQgY29kZSB3aGVuIHdlIG5vdGljZSB0aGF0Ci0gKiB0aGUgZmlsZXN5c3RlbSBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgZm9yY2VkIHNodXRkb3duLgorICogQ2FsbGVkIGZyb20gdGhlIHRyYW5zX2NvbW1pdCBjb2RlIHdoZW4gd2Ugbm90aWNlIHRoYXQgdGhlIGZpbGVzeXN0ZW0gaXMgaW4KKyAqIHRoZSBtaWRkbGUgb2YgYSBmb3JjZWQgc2h1dGRvd24uCisgKgorICogV2hlbiB3ZSBhcmUgY2FsbGVkIGhlcmUsIHdlIGhhdmUgYWxyZWFkeSBwaW5uZWQgYWxsIHRoZSBpdGVtcyBpbiB0aGUKKyAqIHRyYW5zYWN0aW9uLiBIb3dldmVyLCBuZWl0aGVyIElPUF9DT01NSVRUSU5HIG9yIElPUF9VTkxPQ0sgaGFzIGJlZW4gY2FsbGVkCisgKiBzbyB3ZSBjYW4gc2ltcGx5IHdhbGsgdGhlIGl0ZW1zIGluIHRoZSB0cmFuc2FjdGlvbiwgdW5waW4gdGhlbSB3aXRoIGFuIGFib3J0CisgKiBmbGFnIGFuZCB0aGVuIGZyZWUgdGhlIGl0ZW1zLiBOb3RlIHRoYXQgdW5waW5uaW5nIHRoZSBpdGVtcyBjYW4gcmVzdWx0IGluCisgKiB0aGVtIGJlaW5nIGZyZWVkIGltbWVkaWF0ZWx5LCBzbyB3ZSBuZWVkIHRvIHVzZSBhIHNhZmUgbGlzdCB0cmF2ZXJzYWwgbWV0aG9kCisgKiBoZXJlLgogICovCiBTVEFUSUMgdm9pZAogeGZzX3RyYW5zX3VuY29tbWl0KAogCXN0cnVjdCB4ZnNfdHJhbnMJKnRwLAogCXVpbnQJCQlmbGFncykKIHsKLQlzdHJ1Y3QgeGZzX2xvZ19pdGVtX2Rlc2MgKmxpZHA7CisJc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjICpsaWRwLCAqbjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkobGlkcCwgJnRwLT50X2l0ZW1zLCBsaWRfdHJhbnMpIHsKLQkJLyoKLQkJICogVW5waW4gYWxsIGJ1dCB0aG9zZSB0aGF0IGFyZW4ndCBkaXJ0eS4KLQkJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpZHAsIG4sICZ0cC0+dF9pdGVtcywgbGlkX3RyYW5zKSB7CiAJCWlmIChsaWRwLT5saWRfZmxhZ3MgJiBYRlNfTElEX0RJUlRZKQogCQkJSU9QX1VOUElOKGxpZHAtPmxpZF9pdGVtLCAxKTsKIAl9CkBAIC0xNzMzLDcgKzE3NTUsNiBAQAogCWludAkJCWZsYWdzKQogewogCXN0cnVjdCB4ZnNfbG9nX3ZlYwkqbG9nX3ZlY3RvcjsKLQlpbnQJCQllcnJvcjsKIAogCS8qCiAJICogR2V0IGVhY2ggbG9nIGl0ZW0gdG8gYWxsb2NhdGUgYSB2ZWN0b3Igc3RydWN0dXJlIGZvcgpAQCAtMTc0NCw5ICsxNzY1LDcgQEAKIAlpZiAoIWxvZ192ZWN0b3IpCiAJCXJldHVybiBFTk9NRU07CiAKLQllcnJvciA9IHhmc19sb2dfY29tbWl0X2NpbChtcCwgdHAsIGxvZ192ZWN0b3IsIGNvbW1pdF9sc24sIGZsYWdzKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwl4ZnNfbG9nX2NvbW1pdF9jaWwobXAsIHRwLCBsb2dfdmVjdG9yLCBjb21taXRfbHNuLCBmbGFncyk7CiAKIAljdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKCZ0cC0+dF9wZmxhZ3MsIFBGX0ZTVFJBTlMpOwogCXhmc190cmFuc19mcmVlKHRwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKaW5kZXggMzFiNjE4OC4uYjRiZmUzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKQEAgLTQsNiArNCw4IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2lmZGVmIENPTkZJR19NTVUKIAorI2luY2x1ZGUgPGxpbnV4L21tX3R5cGVzLmg+CisKICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCiBleHRlcm4gaW50IHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCA2ODY0OTMzLi5mZTc3ZTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC0xMjQsNyArMTI0LDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0VWRU5UX1RSQUNJTkcKLSNkZWZpbmUgRlRSQUNFX0VWRU5UUygpCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfZnRyYWNlX2V2ZW50cykgPSAuOwlcCisjZGVmaW5lIEZUUkFDRV9FVkVOVFMoKQkuID0gQUxJR04oOCk7CQkJCQlcCisJCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X2Z0cmFjZV9ldmVudHMpID0gLjsJXAogCQkJKihfZnRyYWNlX2V2ZW50cykJCQkJXAogCQkJVk1MSU5VWF9TWU1CT0woX19zdG9wX2Z0cmFjZV9ldmVudHMpID0gLjsKICNlbHNlCkBAIC0xNDAsNyArMTQxLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotI2RlZmluZSBUUkFDRV9TWVNDQUxMUygpIFZNTElOVVhfU1lNQk9MKF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGEpID0gLjsJXAorI2RlZmluZSBUUkFDRV9TWVNDQUxMUygpIC4gPSBBTElHTig4KTsJCQkJCVwKKwkJCSBWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhKSA9IC47CVwKIAkJCSAqKF9fc3lzY2FsbHNfbWV0YWRhdGEpCQkJCVwKIAkJCSBWTUxJTlVYX1NZTUJPTChfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGEpID0gLjsKICNlbHNlCkBAIC0xNjUsMTAgKzE2Nyw4IEBACiAJQ1BVX0tFRVAoZXhpdC5kYXRhKQkJCQkJCVwKIAlNRU1fS0VFUChpbml0LmRhdGEpCQkJCQkJXAogCU1FTV9LRUVQKGV4aXQuZGF0YSkJCQkJCQlcCi0JLiA9IEFMSUdOKDMyKTsJCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX190cmFjZXBvaW50cykgPSAuOwkJCVwKKwlTVFJVQ1RfQUxJR04oKTsJCQkJCQkJXAogCSooX190cmFjZXBvaW50cykJCQkJCQlcCi0JVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdHJhY2Vwb2ludHMpID0gLjsJCQlcCiAJLyogaW1wbGVtZW50IGR5bmFtaWMgcHJpbnRrIGRlYnVnICovCQkJCVwKIAkuID0gQUxJR04oOCk7CQkJCQkJCVwKIAlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdmVyYm9zZSkgPSAuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTc2LDEzICsxNzYsNyBAQAogCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2UpID0gLjsJCQkJXAogCUxJS0VMWV9QUk9GSUxFKCkJCSAgICAgICAJCQkJXAogCUJSQU5DSF9QUk9GSUxFKCkJCQkJCQlcCi0JVFJBQ0VfUFJJTlRLUygpCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlTVFJVQ1RfQUxJR04oKTsJCQkJCQkJXAotCUZUUkFDRV9FVkVOVFMoKQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JU1RSVUNUX0FMSUdOKCk7CQkJCQkJCVwKLQlUUkFDRV9TWVNDQUxMUygpCisJVFJBQ0VfUFJJTlRLUygpCiAKIC8qCiAgKiBEYXRhIHNlY3Rpb24gaGVscGVycwpAQCAtMjIwLDYgKzIxNCwxMCBAQAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3JvZGF0YSkgPSAuOwkJCVwKIAkJKigucm9kYXRhKSAqKC5yb2RhdGEuKikJCQkJCVwKIAkJKihfX3Zlcm1hZ2ljKQkJLyogS2VybmVsIHZlcnNpb24gbWFnaWMgKi8JXAorCQkuID0gQUxJR04oOCk7CQkJCQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdHJhY2Vwb2ludHNfcHRycykgPSAuOwkJXAorCQkqKF9fdHJhY2Vwb2ludHNfcHRycykJLyogVHJhY2Vwb2ludHM6IHBvaW50ZXIgYXJyYXkgKi9cCisJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlcG9pbnRzX3B0cnMpID0gLjsJCVwKIAkJKihfX21hcmtlcnNfc3RyaW5ncykJLyogTWFya2Vyczogc3RyaW5ncyAqLwkJXAogCQkqKF9fdHJhY2Vwb2ludHNfc3RyaW5ncykvKiBUcmFjZXBvaW50czogc3RyaW5ncyAqLwlcCiAJfQkJCQkJCQkJXApAQCAtMzY0LDYgKzM2MiwxMyBAQAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fcGFyYW0pID0gLjsJCQlcCiAJCSooX19wYXJhbSkJCQkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3BhcmFtKSA9IC47CQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkvKiBCdWlsdC1pbiBtb2R1bGUgdmVyc2lvbnMuICovCQkJCQlcCisJX19tb2R2ZXIgOiBBVChBRERSKF9fbW9kdmVyKSAtIExPQURfT0ZGU0VUKSB7CQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fbW9kdmVyKSA9IC47CQkJXAorCQkqKF9fbW9kdmVyKQkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fbW9kdmVyKSA9IC47CQkJXAogCQkuID0gQUxJR04oKGFsaWduKSk7CQkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fZW5kX3JvZGF0YSkgPSAuOwkJCVwKIAl9CQkJCQkJCQlcCkBAIC00NzUsNiArNDgwLDggQEAKIAlLRVJORUxfQ1RPUlMoKQkJCQkJCQlcCiAJKiguaW5pdC5yb2RhdGEpCQkJCQkJCVwKIAlNQ09VTlRfUkVDKCkJCQkJCQkJXAorCUZUUkFDRV9FVkVOVFMoKQkJCQkJCQlcCisJVFJBQ0VfU1lTQ0FMTFMoKQkJCQkJCVwKIAlERVZfRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKIAlDUFVfRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKIAlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybVAuaCBiL2luY2x1ZGUvZHJtL2RybVAuaAppbmRleCBhNDY5NGM2Li4zNDg4NDNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1QLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtUC5oCkBAIC0xMTAxLDcgKzExMDEsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtZGV2OyAvKio8IFBsYXRmb3JtIGRldmljZSBzdHJ1dHVyZSAqLwogCiAJc3RydWN0IGRybV9zZ19tZW0gKnNnOwkvKio8IFNjYXR0ZXIgZ2F0aGVyIG1lbW9yeSAqLwotCWludCBudW1fY3J0Y3M7ICAgICAgICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgQ1JUQ3Mgb24gdGhpcyBkZXZpY2UgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2NydGNzOyAgICAgICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIENSVENzIG9uIHRoaXMgZGV2aWNlICovCiAJdm9pZCAqZGV2X3ByaXZhdGU7CQkvKio8IGRldmljZSBwcml2YXRlIGRhdGEgKi8KIAl2b2lkICptbV9wcml2YXRlOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICpkZXZfbWFwcGluZzsKQEAgLTEzNjcsNyArMTM2Nyw3IEBACiBleHRlcm4gdTMyIGRybV92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIHUzMiBkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjLAogCQkJCSAgICAgc3RydWN0IHRpbWV2YWwgKnZibGFua3RpbWUpOwotZXh0ZXJuIHZvaWQgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIGJvb2wgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGludCBkcm1fdmJsYW5rX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gdm9pZCBkcm1fdmJsYW5rX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gdm9pZCBkcm1fdmJsYW5rX29mZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAppbmRleCBhY2Q3ZmFkLi44MDFiZTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKQEAgLTI3NSw2ICsyNzUsNyBAQAogCiAvKioKICAqIGRybV9jcnRjX2Z1bmNzIC0gY29udHJvbCBDUlRDcyBmb3IgYSBnaXZlbiBkZXZpY2UKKyAqIEByZXNldDogcmVzZXQgQ1JUQyBhZnRlciBzdGF0ZSBoYXMgYmVlbiBpbnZhbGlkYXRlIChlLmcuIHJlc3VtZSkKICAqIEBkcG1zOiBjb250cm9sIGRpc3BsYXkgcG93ZXIgbGV2ZWxzCiAgKiBAc2F2ZTogc2F2ZSBDUlRDIHN0YXRlCiAgKiBAcmVzb3JlOiByZXN0b3JlIENSVEMgc3RhdGUKQEAgLTMwMiw2ICszMDMsOCBAQAogCXZvaWQgKCpzYXZlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOyAvKiBzdXNwZW5kPyAqLwogCS8qIFJlc3RvcmUgQ1JUQyBzdGF0ZSAqLwogCXZvaWQgKCpyZXN0b3JlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOyAvKiByZXN1bWU/ICovCisJLyogUmVzZXQgQ1JUQyBzdGF0ZSAqLworCXZvaWQgKCpyZXNldCkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIAogCS8qIGN1cnNvciBjb250cm9scyAqLwogCWludCAoKmN1cnNvcl9zZXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCkBAIC0zNzksNiArMzgyLDcgQEAKICAqIEBkcG1zOiBzZXQgcG93ZXIgc3RhdGUgKHNlZSBkcm1fY3J0Y19mdW5jcyBhYm92ZSkKICAqIEBzYXZlOiBzYXZlIGNvbm5lY3RvciBzdGF0ZQogICogQHJlc3RvcmU6IHJlc3RvcmUgY29ubmVjdG9yIHN0YXRlCisgKiBAcmVzZXQ6IHJlc2V0IGNvbm5lY3RvciBhZnRlciBzdGF0ZSBoYXMgYmVlbiBpbnZhbGlkYXRlIChlLmcuIHJlc3VtZSkKICAqIEBtb2RlX3ZhbGlkOiBpcyB0aGlzIG1vZGUgdmFsaWQgb24gdGhlIGdpdmVuIGNvbm5lY3Rvcj8KICAqIEBtb2RlX2ZpeHVwOiB0cnkgdG8gZml4dXAgcHJvcG9zZWQgbW9kZSBmb3IgdGhpcyBjb25uZWN0b3IKICAqIEBtb2RlX3NldDogc2V0IHRoaXMgbW9kZQpAQCAtMzk2LDYgKzQwMCw3IEBACiAJdm9pZCAoKmRwbXMpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGludCBtb2RlKTsKIAl2b2lkICgqc2F2ZSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiAJdm9pZCAoKnJlc3RvcmUpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOworCXZvaWQgKCpyZXNldCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgYW55dGhpbmcgaXMgYXR0YWNoZWQgdG8gdGhlIGNvbm5lY3Rvci4KIAkgKiBAZm9yY2UgaXMgc2V0IHRvIGZhbHNlIHdoaWxzdCBwb2xsaW5nLCB0cnVlIHdoZW4gY2hlY2tpbmcgdGhlCkBAIC00MTMsNiArNDE4LDcgQEAKIH07CiAKIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB7CisJdm9pZCAoKnJlc2V0KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwogCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwogfTsKIApAQCAtNjU2LDYgKzY2Miw3IEBACiAJCQkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiBleHRlcm4gdm9pZCBkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKIGV4dGVybiB2b2lkIGRybV9tb2RlX2NvbmZpZ19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZHJtX21vZGVfY29uZmlnX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfY29uZmlnX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fbW9kZV9zZXRfbmFtZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiBleHRlcm4gYm9vbCBkcm1fbW9kZV9lcXVhbChzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTEsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmggYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggZmUyOWFlMy4uNWZmMTE5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaApAQCAtMjgsNyArMjgsNiBAQAogCXsweDEwMDIsIDB4NDE1NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM1MH0sIFwKIAl7MHgxMDAyLCAweDQyMzcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMyMDB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDQyNDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjIwMH0sIFwKLQl7MHgxMDAyLCAweDQyNDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjIwMH0sIFwKIAl7MHgxMDAyLCAweDQzMzYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMxMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg0MzM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMjAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NDQzNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzIwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWX0sIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaCBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAppbmRleCBlOTVhODZiLi5lNWM2MDdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCkBAIC05MDcsNiArOTA3LDcgQEAKICNkZWZpbmUgUkFERU9OX0lORk9fVElMSU5HX0NPTkZJRwkweDA2CiAjZGVmaW5lIFJBREVPTl9JTkZPX1dBTlRfSFlQRVJaCQkweDA3CiAjZGVmaW5lIFJBREVPTl9JTkZPX1dBTlRfQ01BU0sJCTB4MDggLyogZ2V0IGFjY2VzcyB0byBDTUFTSyBvbiByMzAwICovCisjZGVmaW5lIFJBREVPTl9JTkZPX0NMT0NLX0NSWVNUQUxfRlJFUQkweDA5IC8qIGNsb2NrIGNyeXN0YWwgZnJlcXVlbmN5ICovCiAKIHN0cnVjdCBkcm1fcmFkZW9uX2luZm8gewogCXVpbnQzMl90CQlyZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9rZXlzL3J4cnBjLXR5cGUuaCBiL2luY2x1ZGUva2V5cy9yeHJwYy10eXBlLmgKaW5kZXggNWNiODZjMy4uZmM0ODc1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9rZXlzL3J4cnBjLXR5cGUuaAorKysgYi9pbmNsdWRlL2tleXMvcnhycGMtdHlwZS5oCkBAIC05OSw3ICs5OSw2IEBACiAgKiBzdHJ1Y3R1cmUgb2YgcmF3IHBheWxvYWRzIHBhc3NlZCB0byBhZGRfa2V5KCkgb3IgaW5zdGFudGlhdGUga2V5CiAgKi8KIHN0cnVjdCByeHJwY19rZXlfZGF0YV92MSB7Ci0JdTMyCQlraWZfdmVyc2lvbjsJCS8qIDEgKi8KIAl1MTYJCXNlY3VyaXR5X2luZGV4OwogCXUxNgkJdGlja2V0X2xlbmd0aDsKIAl1MzIJCWV4cGlyeTsJCQkvKiB0aW1lX3QgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggMjI5NmQ4Yi4uYjBhZGE2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTEsNSArMSw2IEBACiBoZWFkZXIteSArPSBieXRlb3JkZXIvCiBoZWFkZXIteSArPSBjYW4vCitoZWFkZXIteSArPSBjYWlmLwogaGVhZGVyLXkgKz0gZHZiLwogaGVhZGVyLXkgKz0gaGRsYy8KIGhlYWRlci15ICs9IGlzZG4vCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA0ZDE4ZmYzLi5kNTA2M2UxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTY5OSw3ICs2OTksNyBAQAogZXh0ZXJuIHZvaWQgYmxrX3N0b3BfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3N5bmNfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgX19ibGtfc3RvcF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7Ci1leHRlcm4gdm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKik7CitleHRlcm4gdm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJvb2wgZm9yY2Vfa2Jsb2NrZCk7CiBleHRlcm4gdm9pZCBibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwogZXh0ZXJuIGludCBibGtfcnFfbWFwX3VzZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKiwKIAkJCSAgIHN0cnVjdCBycV9tYXBfZGF0YSAqLCB2b2lkIF9fdXNlciAqLCB1bnNpZ25lZCBsb25nLApAQCAtMTA4OCw3ICsxMDg4LDYgQEAKIAogc3RydWN0IHdvcmtfc3RydWN0OwogaW50IGtibG9ja2Rfc2NoZWR1bGVfd29yayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLWludCBrYmxvY2tkX3NjaGVkdWxlX2RlbGF5ZWRfd29yayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmssIHVuc2lnbmVkIGxvbmcgZGVsYXkpOwogCiAjaWZkZWYgQ09ORklHX0JMS19DR1JPVVAKIC8qCkBAIC0xMTM2LDcgKzExMzUsNiBAQAogZXh0ZXJuIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3Rocm90bF9leGl0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIGV4dGVybiBpbnQgYmxrX3Rocm90bF9iaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKipiaW8pOwotZXh0ZXJuIHZvaWQgdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgbG9uZyBkZWxheSk7CiBleHRlcm4gdm9pZCB0aHJvdGxfc2h1dGRvd25fdGltZXJfd3Eoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfVEhST1RUTElORyAqLwogc3RhdGljIGlubGluZSBpbnQgYmxrX3Rocm90bF9iaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKipiaW8pCkBAIC0xMTQ2LDcgKzExNDQsNiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGJsa190aHJvdGxfZXhpdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIHRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGxvbmcgZGVsYXkpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgdGhyb3RsX3NodXRkb3duX3RpbWVyX3dxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSB7fQogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaCBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKaW5kZXggMzM5NWNmNy4uYjIyZmIwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCkBAIC0yNDUsNyArMjQ1LDYgQEAKIAogZXh0ZXJuIHZvaWQgYmxrX2R1bXBfY21kKGNoYXIgKmJ1Ziwgc3RydWN0IHJlcXVlc3QgKnJxKTsKIGV4dGVybiB2b2lkIGJsa19maWxsX3J3YnMoY2hhciAqcndicywgdTMyIHJ3LCBpbnQgYnl0ZXMpOwotZXh0ZXJuIHZvaWQgYmxrX2ZpbGxfcndic19ycShjaGFyICpyd2JzLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpOwogCiAjZW5kaWYgLyogQ09ORklHX0VWRU5UX1RSQUNJTkcgJiYgQ09ORklHX0JMT0NLICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FpZi9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L2NhaWYvS2J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5Y2YyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NhaWYvS2J1aWxkCkBAIC0wLDAgKzEsMiBAQAoraGVhZGVyLXkgKz0gY2FpZl9zb2NrZXQuaAoraGVhZGVyLXkgKz0gaWZfY2FpZi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NlcGgvbWVzc2VuZ2VyLmggYi9pbmNsdWRlL2xpbnV4L2NlcGgvbWVzc2VuZ2VyLmgKaW5kZXggYzMwMTFiZS4uMzFkOTFhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZXBoL21lc3Nlbmdlci5oCisrKyBiL2luY2x1ZGUvbGludXgvY2VwaC9tZXNzZW5nZXIuaApAQCAtMTIzLDYgKzEyMyw3IEBACiAjZGVmaW5lIFNPQ0tfQ0xPU0VECTExIC8qIHNvY2tldCBzdGF0ZSBjaGFuZ2VkIHRvIGNsb3NlZCAqLwogI2RlZmluZSBPUEVOSU5HICAgICAgICAgMTMgLyogb3BlbiBjb25uZWN0aW9uIHcvIChwb3NzaWJseSBuZXcpIHBlZXIgKi8KICNkZWZpbmUgREVBRCAgICAgICAgICAgIDE0IC8qIGRlYWQsIGFib3V0IHRvIGtmcmVlICovCisjZGVmaW5lIEJBQ0tPRkYgICAgICAgICAxNQogCiAvKgogICogQSBzaW5nbGUgY29ubmVjdGlvbiB3aXRoIGFub3RoZXIgaG9zdC4KQEAgLTE2MCw3ICsxNjEsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgb3V0X3F1ZXVlOwogCXN0cnVjdCBsaXN0X2hlYWQgb3V0X3NlbnQ7ICAgLyogc2VuZGluZyBvciBzZW50IGJ1dCB1bmFja2VkICovCiAJdTY0IG91dF9zZXE7CQkgICAgIC8qIGxhc3QgbWVzc2FnZSBxdWV1ZWQgZm9yIHNlbmQgKi8KLQlib29sIG91dF9rZWVwYWxpdmVfcGVuZGluZzsKIAogCXU2NCBpbl9zZXEsIGluX3NlcV9hY2tlZDsgIC8qIGxhc3QgbWVzc2FnZSByZWNlaXZlZCwgYWNrZWQgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAppbmRleCA5Nzc0ZmU2Li43NDUzY2ZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaApAQCAtMTM5LDkgKzEzOSw5IEBACiBleHRlcm4gdm9pZCByZWdpc3Rlcl9jb25zb2xlKHN0cnVjdCBjb25zb2xlICopOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2NvbnNvbGUoc3RydWN0IGNvbnNvbGUgKik7CiBleHRlcm4gc3RydWN0IGNvbnNvbGUgKmNvbnNvbGVfZHJpdmVyczsKLWV4dGVybiB2b2lkIGFjcXVpcmVfY29uc29sZV9zZW0odm9pZCk7Ci1leHRlcm4gaW50IHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKHZvaWQpOwotZXh0ZXJuIHZvaWQgcmVsZWFzZV9jb25zb2xlX3NlbSh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbnNvbGVfbG9jayh2b2lkKTsKK2V4dGVybiBpbnQgY29uc29sZV90cnlsb2NrKHZvaWQpOworZXh0ZXJuIHZvaWQgY29uc29sZV91bmxvY2sodm9pZCk7CiBleHRlcm4gdm9pZCBjb25zb2xlX2NvbmRpdGlvbmFsX3NjaGVkdWxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgY29uc29sZV91bmJsYW5rKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCB0dHlfZHJpdmVyICpjb25zb2xlX2RldmljZShpbnQgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjYm5sLmggYi9pbmNsdWRlL2xpbnV4L2RjYm5sLmgKaW5kZXggNjhjZDI0OC4uNjY5MDBlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2JubC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNibmwuaApAQCAtMTAxLDggKzEwMSw4IEBACiAgKi8KIHN0cnVjdCBkY2JfYXBwIHsKIAlfX3U4CXNlbGVjdG9yOwotCV9fdTMyCXByb3RvY29sOwogCV9fdTgJcHJpb3JpdHk7CisJX191MTYJcHJvdG9jb2w7CiB9OwogCiBzdHJ1Y3QgZGNibXNnIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKaW5kZXggZGE3ZTUyYi4uMWVmZmM4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKQEAgLTEwOSw3ICsxMDksNyBAQAogfQogCiAvKgotICogQ2hlY2sgaWYgdGhlIHRhc2sgc2hvdWxkIGJlIGNvdW50ZWQgYXMgZnJlZXplYWJsZSBieSB0aGUgZnJlZXplcgorICogQ2hlY2sgaWYgdGhlIHRhc2sgc2hvdWxkIGJlIGNvdW50ZWQgYXMgZnJlZXphYmxlIGJ5IHRoZSBmcmVlemVyCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGZyZWV6ZXJfc2hvdWxkX3NraXAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDMyYjM4Y2QuLmUzOGI1MGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC02NDksNiArNjQ5LDcgQEAKIAlzcGlubG9ja190CQlwcml2YXRlX2xvY2s7CS8qIGZvciB1c2UgYnkgdGhlIGFkZHJlc3Nfc3BhY2UgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXByaXZhdGVfbGlzdDsJLyogZGl0dG8gKi8KIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqYXNzb2NfbWFwcGluZzsJLyogZGl0dG8gKi8KKwlzdHJ1Y3QgbXV0ZXgJCXVubWFwX211dGV4OyAgICAvKiB0byBwcm90ZWN0IHVubWFwcGluZyAqLwogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKIAkvKgogCSAqIE9uIG1vc3QgYXJjaGl0ZWN0dXJlcyB0aGF0IGFsaWdubWVudCBpcyBhbHJlYWR5IHRoZSBjYXNlOyBidXQKQEAgLTIxMzksNyArMjE0MCw3IEBACiAJCQkJICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7CiBleHRlcm4gaW50IHJldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqKTsKIGV4dGVybiBpbnQgY2hlY2tfZGlza19jaGFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKLWV4dGVybiBpbnQgX19pbnZhbGlkYXRlX2RldmljZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworZXh0ZXJuIGludCBfX2ludmFsaWRhdGVfZGV2aWNlKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgYm9vbCk7CiBleHRlcm4gaW50IGludmFsaWRhdGVfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICosIGludCk7CiAjZW5kaWYKIHVuc2lnbmVkIGxvbmcgaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLApAQCAtMjIyNSw2ICsyMjI2LDcgQEAKIAogZXh0ZXJuIGludCBpbm9kZV9pbml0X2Fsd2F5cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgaW5vZGVfaW5pdF9vbmNlKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGFkZHJlc3Nfc3BhY2VfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIGlncmFiKHN0cnVjdCBpbm9kZSAqKTsKQEAgLTI1NTUsOSArMjU1NywxMiBAQAogCQkgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7CiBpbnQgX19pbml0IGdldF9maWxlc3lzdGVtX2xpc3QoY2hhciAqYnVmKTsKIAorI2RlZmluZSBfX0ZNT0RFX0VYRUMJCSgoX19mb3JjZSBpbnQpIEZNT0RFX0VYRUMpCisjZGVmaW5lIF9fRk1PREVfTk9OT1RJRlkJKChfX2ZvcmNlIGludCkgRk1PREVfTk9OT1RJRlkpCisKICNkZWZpbmUgQUNDX01PREUoeCkgKCJcMDA0XDAwMlwwMDZcMDA2IlsoeCkmT19BQ0NNT0RFXSkKICNkZWZpbmUgT1BFTl9GTU9ERShmbGFnKSAoKF9fZm9yY2UgZm1vZGVfdCkoKChmbGFnICsgMSkgJiBPX0FDQ01PREUpIHwgXAotCQkJCQkgICAgKGZsYWcgJiBGTU9ERV9OT05PVElGWSkpKQorCQkJCQkgICAgKGZsYWcgJiBfX0ZNT0RFX05PTk9USUZZKSkpCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0xJTlVYX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IGEzYjE0OGEuLmRjYTMxNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMjQ5LDcgKzI0OSw3IEBACiAJCQkJCSAoKDEgPDwgWk9ORVNfU0hJRlQpIC0gMSk7CiAKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoYml0KSkKLQkJTUFZQkVfQlVJTERfQlVHX09OKChHRlBfWk9ORV9CQUQgPj4gYml0KSAmIDEpOworCQlCVUlMRF9CVUdfT04oKEdGUF9aT05FX0JBRCA+PiBiaXQpICYgMSk7CiAJZWxzZSB7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCiAJCUJVR19PTigoR0ZQX1pPTkVfQkFEID4+IGJpdCkgJiAxKTsKQEAgLTMzMiwxNiArMzMyLDE5IEBACiAJcmV0dXJuIGFsbG9jX3BhZ2VzX2N1cnJlbnQoZ2ZwX21hc2ssIG9yZGVyKTsKIH0KIGV4dGVybiBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfdm1hKGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIsCi0JCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQlpbnQgbm9kZSk7CiAjZWxzZQogI2RlZmluZSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpIFwKIAkJYWxsb2NfcGFnZXNfbm9kZShudW1hX25vZGVfaWQoKSwgZ2ZwX21hc2ssIG9yZGVyKQotI2RlZmluZSBhbGxvY19wYWdlc192bWEoZ2ZwX21hc2ssIG9yZGVyLCB2bWEsIGFkZHIpCVwKKyNkZWZpbmUgYWxsb2NfcGFnZXNfdm1hKGdmcF9tYXNrLCBvcmRlciwgdm1hLCBhZGRyLCBub2RlKQlcCiAJYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKQogI2VuZGlmCiAjZGVmaW5lIGFsbG9jX3BhZ2UoZ2ZwX21hc2spIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCAwKQotI2RlZmluZSBhbGxvY19wYWdlX3ZtYShnZnBfbWFzaywgdm1hLCBhZGRyKQlcCi0JYWxsb2NfcGFnZXNfdm1hKGdmcF9tYXNrLCAwLCB2bWEsIGFkZHIpCisjZGVmaW5lIGFsbG9jX3BhZ2Vfdm1hKGdmcF9tYXNrLCB2bWEsIGFkZHIpCQkJXAorCWFsbG9jX3BhZ2VzX3ZtYShnZnBfbWFzaywgMCwgdm1hLCBhZGRyLCBudW1hX25vZGVfaWQoKSkKKyNkZWZpbmUgYWxsb2NfcGFnZV92bWFfbm9kZShnZnBfbWFzaywgdm1hLCBhZGRyLCBub2RlKQkJXAorCWFsbG9jX3BhZ2VzX3ZtYShnZnBfbWFzaywgMCwgdm1hLCBhZGRyLCBub2RlKQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX2dldF9mcmVlX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3plcm9lZF9wYWdlKGdmcF90IGdmcF9tYXNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKaW5kZXggOGU2YzhjNC4uZGYyOWM4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKQEAgLTU3LDcgKzU3LDggQEAKIAkgICh0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyAmCQkJCQlcCiAJICAgKDE8PFRSQU5TUEFSRU5UX0hVR0VQQUdFX1JFUV9NQURWX0ZMQUcpICYmCQkJXAogCSAgICgoX192bWEpLT52bV9mbGFncyAmIFZNX0hVR0VQQUdFKSkpICYmCQkJXAotCSAhKChfX3ZtYSktPnZtX2ZsYWdzICYgVk1fTk9IVUdFUEFHRSkpCisJICEoKF9fdm1hKS0+dm1fZmxhZ3MgJiBWTV9OT0hVR0VQQUdFKSAmJgkJCVwKKwkgIWlzX3ZtYV90ZW1wb3Jhcnlfc3RhY2soX192bWEpKQogI2RlZmluZSB0cmFuc3BhcmVudF9odWdlcGFnZV9kZWZyYWcoX192bWEpCQkJCVwKIAkoKHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzICYJCQkJCVwKIAkgICgxPDxUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRkxBRykpIHx8CQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9idTIxMDEzLmggYi9pbmNsdWRlL2xpbnV4L2lucHV0L2J1MjEwMTMuaAppbmRleCBlNDcwZDM4Li4wNWUwMzI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0L2J1MjEwMTMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0L2J1MjEwMTMuaApAQCAtMTIsOCArMTIsNiBAQAogICogQGNzX2VuOglwb2ludGVyIHRvIHRoZSBjcyBlbmFibGUgZnVuY3Rpb24KICAqIEBjc19kaXM6CXBvaW50ZXIgdG8gdGhlIGNzIGRpc2FibGUgZnVuY3Rpb24KICAqIEBpcnFfcmVhZF92YWw6ICAgIHBvaW50ZXIgdG8gcmVhZCB0aGUgcGVuIGlycSB2YWx1ZSBmdW5jdGlvbgotICogQHhfbWF4X3JlczogeG1heCByZXNvbHV0aW9uCi0gKiBAeV9tYXhfcmVzOiB5bWF4IHJlc29sdXRpb24KICAqIEB0b3VjaF94X21heDogdG91Y2ggeCBtYXgKICAqIEB0b3VjaF95X21heDogdG91Y2ggeSBtYXgKICAqIEBjc19waW46IGNoaXAgc2VsZWN0IHBpbgpAQCAtMjksOCArMjcsNiBAQAogCWludCAoKmNzX2VuKShpbnQgcmVzZXRfcGluKTsKIAlpbnQgKCpjc19kaXMpKGludCByZXNldF9waW4pOwogCWludCAoKmlycV9yZWFkX3ZhbCkodm9pZCk7Ci0JaW50IHhfbWF4X3JlczsKLQlpbnQgeV9tYXhfcmVzOwogCWludCB0b3VjaF94X21heDsKIAlpbnQgdG91Y2hfeV9tYXg7CiAJdW5zaWduZWQgaW50IGNzX3BpbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKaW5kZXggNjk3NDc0Ni4uZmU3YzRiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKQEAgLTQsOCArNCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCi0jZGVmaW5lIE1BVFJJWF9NQVhfUk9XUwkJMTYKLSNkZWZpbmUgTUFUUklYX01BWF9DT0xTCQkxNgorI2RlZmluZSBNQVRSSVhfTUFYX1JPV1MJCTMyCisjZGVmaW5lIE1BVFJJWF9NQVhfQ09MUwkJMzIKIAogI2RlZmluZSBLRVkocm93LCBjb2wsIHZhbCkJKCgoKHJvdykgJiAoTUFUUklYX01BWF9ST1dTIC0gMSkpIDw8IDI0KSB8XAogCQkJCSAoKChjb2wpICYgKE1BVFJJWF9NQVhfQ09MUyAtIDEpKSA8PCAxNikgfFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IGFiZGUyNTIuLjgwZmNiNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtNzQsNyArNzQsOCBAQAogCiAjZGVmaW5lIElSUUZfTU9ESUZZX01BU0sJXAogCShJUlFfVFlQRV9TRU5TRV9NQVNLIHwgSVJRX05PUFJPQkUgfCBJUlFfTk9SRVFVRVNUIHwgXAotCSBJUlFfTk9BVVRPRU4gfCBJUlFfTU9WRV9QQ05UWFQgfCBJUlFfTEVWRUwpCisJIElSUV9OT0FVVE9FTiB8IElSUV9NT1ZFX1BDTlRYVCB8IElSUV9MRVZFTCB8IElSUV9OT19CQUxBTkNJTkcgfCBcCisJIElSUV9QRVJfQ1BVKQogCiAjaWZkZWYgQ09ORklHX0lSUV9QRVJfQ1BVCiAjIGRlZmluZSBDSEVDS19JUlFfUEVSX0NQVSh2YXIpICgodmFyKSAmIElSUV9QRVJfQ1BVKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggZDA3ZDgwNS4uMmZlNmU4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC01NzUsMTIgKzU3NSw2IEBACiAJY2hhciBfZlsyMC0yKnNpemVvZihsb25nKS1zaXplb2YoaW50KV07CS8qIFBhZGRpbmc6IGxpYmM1IHVzZXMgdGhpcy4uICovCiB9OwogCi0vKiBGb3JjZSBhIGNvbXBpbGF0aW9uIGVycm9yIGlmIGNvbmRpdGlvbiBpcyB0cnVlICovCi0jZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pICgodm9pZClCVUlMRF9CVUdfT05fWkVSTyhjb25kaXRpb24pKQotCi0vKiBGb3JjZSBhIGNvbXBpbGF0aW9uIGVycm9yIGlmIGNvbmRpdGlvbiBpcyBjb25zdGFudCBhbmQgdHJ1ZSAqLwotI2RlZmluZSBNQVlCRV9CVUlMRF9CVUdfT04oY29uZCkgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyICogISEoY29uZCldKSkKLQogLyogRm9yY2UgYSBjb21waWxhdGlvbiBlcnJvciBpZiBhIGNvbnN0YW50IGV4cHJlc3Npb24gaXMgbm90IGEgcG93ZXIgb2YgMiAqLwogI2RlZmluZSBCVUlMRF9CVUdfT05fTk9UX1BPV0VSX09GXzIobikJCQlcCiAJQlVJTERfQlVHX09OKChuKSA9PSAwIHx8ICgoKG4pICYgKChuKSAtIDEpKSAhPSAwKSkKQEAgLTU5Miw2ICs1ODYsMzIgQEAKICNkZWZpbmUgQlVJTERfQlVHX09OX1pFUk8oZSkgKHNpemVvZihzdHJ1Y3QgeyBpbnQ6LSEhKGUpOyB9KSkKICNkZWZpbmUgQlVJTERfQlVHX09OX05VTEwoZSkgKCh2b2lkICopc2l6ZW9mKHN0cnVjdCB7IGludDotISEoZSk7IH0pKQogCisvKioKKyAqIEJVSUxEX0JVR19PTiAtIGJyZWFrIGNvbXBpbGUgaWYgYSBjb25kaXRpb24gaXMgdHJ1ZS4KKyAqIEBjb25kaXRpb246IHRoZSBjb25kaXRpb24gd2hpY2ggdGhlIGNvbXBpbGVyIHNob3VsZCBrbm93IGlzIGZhbHNlLgorICoKKyAqIElmIHlvdSBoYXZlIHNvbWUgY29kZSB3aGljaCByZWxpZXMgb24gY2VydGFpbiBjb25zdGFudHMgYmVpbmcgZXF1YWwsIG9yCisgKiBvdGhlciBjb21waWxlLXRpbWUtZXZhbHVhdGVkIGNvbmRpdGlvbiwgeW91IHNob3VsZCB1c2UgQlVJTERfQlVHX09OIHRvCisgKiBkZXRlY3QgaWYgc29tZW9uZSBjaGFuZ2VzIGl0LgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGdjYydzIHJlbHVjdGFuY2UgdG8gY3JlYXRlIGEgbmVnYXRpdmUgYXJyYXksIGJ1dAorICogZ2NjIChhcyBvZiA0LjQpIG9ubHkgZW1pdHMgdGhhdCBlcnJvciBmb3Igb2J2aW91cyBjYXNlcyAoZWcuIG5vdCBhcmd1bWVudHMKKyAqIHRvIGlubGluZSBmdW5jdGlvbnMpLiAgU28gYXMgYSBmYWxsYmFjayB3ZSB1c2UgdGhlIG9wdGltaXplcjsgaWYgaXQgY2FuJ3QKKyAqIHByb3ZlIHRoZSBjb25kaXRpb24gaXMgZmFsc2UsIGl0IHdpbGwgY2F1c2UgYSBsaW5rIGVycm9yIG9uIHRoZSB1bmRlZmluZWQKKyAqICJfX2J1aWxkX2J1Z19vbl9mYWlsZWQiLiAgVGhpcyBlcnJvciBtZXNzYWdlIGNhbiBiZSBoYXJkZXIgdG8gdHJhY2sgZG93bgorICogdGhvdWdoLCBoZW5jZSB0aGUgdHdvIGRpZmZlcmVudCBtZXRob2RzLgorICovCisjaWZuZGVmIF9fT1BUSU1JWkVfXworI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKQorI2Vsc2UKK2V4dGVybiBpbnQgX19idWlsZF9idWdfb25fZmFpbGVkOworI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQkoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKTsJXAorCQlpZiAoY29uZGl0aW9uKSBfX2J1aWxkX2J1Z19vbl9mYWlsZWQgPSAxOwlcCisJfSB3aGlsZSgwKQorI2VuZGlmCisKIC8qIFRyYXAgcGFzdGVycyBvZiBfX0ZVTkNUSU9OX18gYXQgY29tcGlsZS10aW1lICovCiAjZGVmaW5lIF9fRlVOQ1RJT05fXyAoX19mdW5jX18pCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2xpc3QuaCBiL2luY2x1ZGUvbGludXgva2xpc3QuaAppbmRleCBlOTFhNGU1Li5hMzcwY2U1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tsaXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rbGlzdC5oCkBAIC0yMiw3ICsyMiw3IEBACiAJc3RydWN0IGxpc3RfaGVhZAlrX2xpc3Q7CiAJdm9pZAkJCSgqZ2V0KShzdHJ1Y3Qga2xpc3Rfbm9kZSAqKTsKIAl2b2lkCQkJKCpwdXQpKHN0cnVjdCBrbGlzdF9ub2RlICopOwotfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKTsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKHNpemVvZih2b2lkICopKSkpOwogCiAjZGVmaW5lIEtMSVNUX0lOSVQoX25hbWUsIF9nZXQsIF9wdXQpCQkJCQlcCiAJeyAua19sb2NrCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoX25hbWUua19sb2NrKSwJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmggYi9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oCmluZGV4IDA4ZDdkYzQuLjM5Zjg0NTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaApAQCAtNzYsNyArNzYsNyBAQAogCQkJCQkJCQkJXAogCQlfbiA9IChsb25nKSAmKChwdHIpLT5uYW1lIyNfZW5kKQkJCVwKIAkJCS0gKGxvbmcpICYoKHB0ciktPm5hbWUjI19iZWdpbik7CQlcCi0JCU1BWUJFX0JVSUxEX0JVR19PTihfbiA8IDApOwkJCQlcCisJCUJVSUxEX0JVR19PTihfbiA8IDApOwkJCQkJXAogCQkJCQkJCQkJXAogCQlrbWVtY2hlY2tfbWFya19pbml0aWFsaXplZCgmKChwdHIpLT5uYW1lIyNfYmVnaW4pLCBfbik7CVwKIAl9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXN0LmggYi9pbmNsdWRlL2xpbnV4L2xpc3QuaAppbmRleCA5YTVmOGE3Li4zYTU0MjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpc3QuaApAQCAtOTYsNiArOTYsMTEgQEAKICAqIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KICAqLwogI2lmbmRlZiBDT05GSUdfREVCVUdfTElTVAorc3RhdGljIGlubGluZSB2b2lkIF9fbGlzdF9kZWxfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCit7CisJX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCiB7CiAJX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOwpAQCAtMTAzLDYgKzEwOCw3IEBACiAJZW50cnktPnByZXYgPSBMSVNUX1BPSVNPTjI7CiB9CiAjZWxzZQorZXh0ZXJuIHZvaWQgX19saXN0X2RlbF9lbnRyeShzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSk7CiBleHRlcm4gdm9pZCBsaXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSk7CiAjZW5kaWYKIApAQCAtMTM1LDcgKzE0MSw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2RlbF9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQogewotCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKKwlfX2xpc3RfZGVsX2VudHJ5KGVudHJ5KTsKIAlJTklUX0xJU1RfSEVBRChlbnRyeSk7CiB9CiAKQEAgLTE0Niw3ICsxNTIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0JX19saXN0X2RlbChsaXN0LT5wcmV2LCBsaXN0LT5uZXh0KTsKKwlfX2xpc3RfZGVsX2VudHJ5KGxpc3QpOwogCWxpc3RfYWRkKGxpc3QsIGhlYWQpOwogfQogCkBAIC0xNTgsNyArMTY0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X21vdmVfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAogCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKLQlfX2xpc3RfZGVsKGxpc3QtPnByZXYsIGxpc3QtPm5leHQpOworCV9fbGlzdF9kZWxfZW50cnkobGlzdCk7CiAJbGlzdF9hZGRfdGFpbChsaXN0LCBoZWFkKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9jb3JlLmgKaW5kZXggM2ZkMzY4NDUuLmVmNGYwYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2NvcmUuaApAQCAtNzEsNiArNzEsNyBAQAogCXUxNiBpcnFfbWFza3NfY2FjaGVbV004OTk0X05VTV9JUlFfUkVHU107CiAKIAkvKiBVc2VkIG92ZXIgc3VzcGVuZC9yZXN1bWUgKi8KKwlib29sIHN1c3BlbmRlZDsKIAl1MTYgbGRvX3JlZ3NbV004OTk0X05VTV9MRE9fUkVHU107CiAJdTE2IGdwaW9fcmVnc1tXTTg5OTRfTlVNX0dQSU9fUkVHU107CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3NoX21tY2lmLmggYi9pbmNsdWRlL2xpbnV4L21tYy9zaF9tbWNpZi5oCmluZGV4IGJmMTczNTAuLjM4ZDM5MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NoX21tY2lmLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvc2hfbW1jaWYuaApAQCAtOTQsMTIgKzk0LDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdTMyIHNoX21tY2lmX3JlYWRsKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHJlZykKIHsKLQlyZXR1cm4gcmVhZGwoYWRkciArIHJlZyk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGFkZHIgKyByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfbW1jaWZfd3JpdGVsKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHJlZywgdTMyIHZhbCkKIHsKLQl3cml0ZWwodmFsLCBhZGRyICsgcmVnKTsKKwlfX3Jhd193cml0ZWwodmFsLCBhZGRyICsgcmVnKTsKIH0KIAogI2RlZmluZSBTSF9NTUNJRl9CQlMgNTEyIC8qIGJvb3QgYmxvY2sgc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggOGIxN2ZkOC4uNWRlNDIwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC01OCw2ICs1OCwxMiBAQAogCXZvaWQgKCpmcmVlKShzdHJ1Y3QgbW9kdWxlICopOwogfTsKIAorc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSB7CisJc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgbWF0dHI7CisJY29uc3QgY2hhciAqbW9kdWxlX25hbWU7CisJY29uc3QgY2hhciAqdmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKHNpemVvZih2b2lkICopKSkpOworCiBzdHJ1Y3QgbW9kdWxlX2tvYmplY3QKIHsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwpAQCAtMTYxLDcgKzE2NywyOCBAQAogICBVc2luZyB0aGlzIGF1dG9tYXRpY2FsbHkgYWRkcyBhIGNoZWNrc3VtIG9mIHRoZSAuYyBmaWxlcyBhbmQgdGhlCiAgIGxvY2FsIGhlYWRlcnMgaW4gInNyY3ZlcnNpb24iLgogKi8KKworI2lmIGRlZmluZWQoTU9EVUxFKSB8fCAhZGVmaW5lZChDT05GSUdfU1lTRlMpCiAjZGVmaW5lIE1PRFVMRV9WRVJTSU9OKF92ZXJzaW9uKSBNT0RVTEVfSU5GTyh2ZXJzaW9uLCBfdmVyc2lvbikKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9WRVJTSU9OKF92ZXJzaW9uKQkJCQkJXAorCWV4dGVybiBzc2l6ZV90IF9fbW9kdmVyX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqLAlcCisJCQkJCSAgICAgc3RydWN0IG1vZHVsZSAqLCBjaGFyICopOwlcCisJc3RhdGljIHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgX19tb2R2ZXJfdmVyc2lvbl9hdHRyCVwKKwlfX3VzZWQJCQkJCQkJCVwKKyAgICBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCJfX21vZHZlciIpLGFsaWduZWQoc2l6ZW9mKHZvaWQgKikpKSkgXAorCT0gewkJCQkJCQkJXAorCQkubWF0dHIJPSB7CQkJCQkJXAorCQkJLmF0dHIJPSB7CQkJCQlcCisJCQkJLm5hbWUJPSAidmVyc2lvbiIsCQkJXAorCQkJCS5tb2RlCT0gU19JUlVHTywJCQlcCisJCQl9LAkJCQkJCVwKKwkJCS5zaG93CT0gX19tb2R2ZXJfdmVyc2lvbl9zaG93LAkJXAorCQl9LAkJCQkJCQlcCisJCS5tb2R1bGVfbmFtZQk9IEtCVUlMRF9NT0ROQU1FLAkJCVwKKwkJLnZlcnNpb24JPSBfdmVyc2lvbiwJCQkJXAorCX0KKyNlbmRpZgogCiAvKiBPcHRpb25hbCBmaXJtd2FyZSBmaWxlIChvciBmaWxlcykgbmVlZGVkIGJ5IHRoZSBtb2R1bGUKICAqIGZvcm1hdCBpcyBzaW1wbHkgZmlybXdhcmUgZmlsZSBuYW1lLiAgTXVsdGlwbGUgZmlybXdhcmUKQEAgLTM1MCw3ICszNzcsNyBAQAogCSAgIGtlZXBpbmcgcG9pbnRlcnMgdG8gdGhpcyBzdHVmZiAqLwogCWNoYXIgKmFyZ3M7CiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCi0Jc3RydWN0IHRyYWNlcG9pbnQgKnRyYWNlcG9pbnRzOworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRyYWNlcG9pbnRzX3B0cnM7CiAJdW5zaWduZWQgaW50IG51bV90cmFjZXBvaW50czsKICNlbmRpZgogI2lmZGVmIEhBVkVfSlVNUF9MQUJFTApAQCAtMzYyLDcgKzM4OSw3IEBACiAJdW5zaWduZWQgaW50IG51bV90cmFjZV9icHJpbnRrX2ZtdDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19FVkVOVF9UUkFDSU5HCi0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp0cmFjZV9ldmVudHM7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICoqdHJhY2VfZXZlbnRzOwogCXVuc2lnbmVkIGludCBudW1fdHJhY2VfZXZlbnRzOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKaW5kZXggMTEyYWRmOC4uMDdiNDE5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaApAQCAtMTYsMTUgKzE2LDE3IEBACiAvKiBDaG9zZW4gc28gdGhhdCBzdHJ1Y3RzIHdpdGggYW4gdW5zaWduZWQgbG9uZyBsaW5lIHVwLiAqLwogI2RlZmluZSBNQVhfUEFSQU1fUFJFRklYX0xFTiAoNjQgLSBzaXplb2YodW5zaWduZWQgbG9uZykpCiAKLSNpZmRlZiBNT0RVTEUKICNkZWZpbmUgX19fbW9kdWxlX2NhdChhLGIpIF9fbW9kXyAjIyBhICMjIGIKICNkZWZpbmUgX19tb2R1bGVfY2F0KGEsYikgX19fbW9kdWxlX2NhdChhLGIpCisjaWZkZWYgTU9EVUxFCiAjZGVmaW5lIF9fTU9EVUxFX0lORk8odGFnLCBuYW1lLCBpbmZvKQkJCQkJICBcCiBzdGF0aWMgY29uc3QgY2hhciBfX21vZHVsZV9jYXQobmFtZSxfX0xJTkVfXylbXQkJCQkgIFwKICAgX191c2VkIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5tb2RpbmZvIiksIHVudXNlZCwgYWxpZ25lZCgxKSkpCSAgXAogICA9IF9fc3RyaW5naWZ5KHRhZykgIj0iIGluZm8KICNlbHNlICAvKiAhTU9EVUxFICovCi0jZGVmaW5lIF9fTU9EVUxFX0lORk8odGFnLCBuYW1lLCBpbmZvKQorLyogVGhpcyBzdHJ1Y3QgaXMgaGVyZSBmb3Igc3ludGFjdGljIGNvaGVyZW5jeSwgaXQgaXMgbm90IHVzZWQgKi8KKyNkZWZpbmUgX19NT0RVTEVfSU5GTyh0YWcsIG5hbWUsIGluZm8pCQkJCQkgIFwKKyAgc3RydWN0IF9fbW9kdWxlX2NhdChuYW1lLF9fTElORV9fKSB7fQogI2VuZGlmCiAjZGVmaW5lIF9fTU9EVUxFX1BBUk1fVFlQRShuYW1lLCBfdHlwZSkJCQkJCSAgXAogICBfX01PRFVMRV9JTkZPKHBhcm10eXBlLCBuYW1lIyN0eXBlLCAjbmFtZSAiOiIgX3R5cGUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oIGIvaW5jbHVkZS9saW51eC9tcm91dGUuaAppbmRleCAwZmE3YTNhLi5iMjFkNTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKQEAgLTE1MCw2ICsxNTAsNyBAQAogZXh0ZXJuIGludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqLCBpbnQsIGNoYXIgX191c2VyICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgY2hhciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKTsKIGV4dGVybiBpbnQgaXBtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOworZXh0ZXJuIGludCBpcG1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBpcF9tcl9pbml0KHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKaW5kZXggNjA5MWFiNy4uOWQyZGViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKQEAgLTEzNiw2ICsxMzYsNyBAQAogZXh0ZXJuIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKiwgaW50LCBjaGFyIF9fdXNlciAqLCBpbnQgX191c2VyICopOwogZXh0ZXJuIGludCBpcDZfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CitleHRlcm4gaW50IGlwNm1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBpcDZfbXJfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGlwNl9tcl9jbGVhbnVwKHZvaWQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzYWNsLmggYi9pbmNsdWRlL2xpbnV4L25mc2FjbC5oCmluZGV4IGYzMjFiNTcuLmZhYmNiMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzYWNsLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNhY2wuaApAQCAtNTEsMTAgKzUxLDEwIEBACiAJcmV0dXJuIHc7CiB9CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQKK2V4dGVybiBpbnQKIG5mc2FjbF9lbmNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgZW5jb2RlX2VudHJpZXMsIGludCB0eXBlZmxhZyk7Ci1leHRlcm4gdW5zaWduZWQgaW50CitleHRlcm4gaW50CiBuZnNhY2xfZGVjb2RlKHN0cnVjdCB4ZHJfYnVmICpidWYsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgKmFjbGNudCwKIAkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICoqcGFjbCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaAppbmRleCAzMmZiODEyLi4xY2E2NDExMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaApAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wcmludGsuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAgCiAvKiBFYWNoIGVzY2FwZWQgZW50cnkgaXMgcHJlZml4ZWQgYnkgRVNDQVBFX0NPREUKQEAgLTE4NiwxMCArMTg4LDE3IEBACiBpbnQgb3Byb2ZpbGVfYWRkX2RhdGE2NChzdHJ1Y3Qgb3BfZW50cnkgKmVudHJ5LCB1NjQgdmFsKTsKIGludCBvcHJvZmlsZV93cml0ZV9jb21taXQoc3RydWN0IG9wX2VudHJ5ICplbnRyeSk7CiAKLSNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKyNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFMKIGludCBfX2luaXQgb3Byb2ZpbGVfcGVyZl9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpOwogdm9pZCBvcHJvZmlsZV9wZXJmX2V4aXQodm9pZCk7CiBjaGFyICpvcF9uYW1lX2Zyb21fcGVyZl9pZCh2b2lkKTsKLSNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgb3Byb2ZpbGVfcGVyZl9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCit7CisJcHJfaW5mbygib3Byb2ZpbGU6IGhhcmR3YXJlIGNvdW50ZXJzIG5vdCBhdmFpbGFibGVcbiIpOworCXJldHVybiAtRU5PREVWOworfQorc3RhdGljIGlubGluZSB2b2lkIG9wcm9maWxlX3BlcmZfZXhpdCh2b2lkKSB7IH0KKyNlbmRpZiAvKiBDT05GSUdfSFdfUEVSRl9FVkVOVFMgKi8KIAogI2VuZGlmIC8qIE9QUk9GSUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG0uaCBiL2luY2x1ZGUvbGludXgvcG0uaAppbmRleCBkZDljN2FiLi4yMTQxNWNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbS5oCkBAIC00MzEsNiArNDMxLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWVudHJ5OwogCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CiAJc3RydWN0IHdha2V1cF9zb3VyY2UJKndha2V1cDsKKyNlbHNlCisJdW5zaWduZWQgaW50CQlzaG91bGRfd2FrZXVwOjE7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogCXN0cnVjdCB0aW1lcl9saXN0CXN1c3BlbmRfdGltZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtX3dha2V1cC5oIGIvaW5jbHVkZS9saW51eC9wbV93YWtldXAuaAppbmRleCA5Y2ZmMDBkLi4wM2E2N2RiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtX3dha2V1cC5oCisrKyBiL2luY2x1ZGUvbGludXgvcG1fd2FrZXVwLmgKQEAgLTEwOSwxMSArMTA5LDYgQEAKIAlyZXR1cm4gZGV2LT5wb3dlci5jYW5fd2FrZXVwOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZGV2aWNlX21heV93YWtldXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBmYWxzZTsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd2FrZXVwX3NvdXJjZV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlyZXR1cm4gTlVMTDsKQEAgLTEzNCwyNCArMTI5LDMyIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV93YWtldXBfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlkZXYtPnBvd2VyLnNob3VsZF93YWtldXAgPSB0cnVlOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2KQogeworCWRldi0+cG93ZXIuc2hvdWxkX3dha2V1cCA9IGZhbHNlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSkKK3sKKwlkZXYtPnBvd2VyLnNob3VsZF93YWtldXAgPSBlbmFibGU7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV9pbml0X3dha2V1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgdmFsKQogewotCWRldi0+cG93ZXIuY2FuX3dha2V1cCA9IHZhbDsKLQlyZXR1cm4gdmFsID8gLUVJTlZBTCA6IDA7CisJZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZShkZXYsIHZhbCk7CisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKGRldiwgdmFsKTsKKwlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGludCBkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBkZXZpY2VfbWF5X3dha2V1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGRldi0+cG93ZXIuY2FuX3dha2V1cCAmJiBkZXYtPnBvd2VyLnNob3VsZF93YWtldXA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3BtX3N0YXlfYXdha2Uoc3RydWN0IHdha2V1cF9zb3VyY2UgKndzKSB7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaCBiL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmgKaW5kZXggZDY4MjgzYS4uNTQyMTFjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oCkBAIC03MSw2ICs3MSw3IEBACiAKIC8qIHBvc2l4X2FjbC5jICovCiAKK2V4dGVybiB2b2lkIHBvc2l4X2FjbF9pbml0KHN0cnVjdCBwb3NpeF9hY2wgKiwgaW50KTsKIGV4dGVybiBzdHJ1Y3QgcG9zaXhfYWNsICpwb3NpeF9hY2xfYWxsb2MoaW50LCBnZnBfdCk7CiBleHRlcm4gc3RydWN0IHBvc2l4X2FjbCAqcG9zaXhfYWNsX2Nsb25lKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKiwgZ2ZwX3QpOwogZXh0ZXJuIGludCBwb3NpeF9hY2xfdmFsaWQoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyYWNlLmggYi9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCmluZGV4IDA5MmEwNGYuLmExMTQ3ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaApAQCAtMTAyLDExICsxMDIsOCBAQAogCiBleHRlcm4gbG9uZyBhcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlcXVlc3QsCiAJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1leHRlcm4gaW50IHB0cmFjZV90cmFjZW1lKHZvaWQpOwogZXh0ZXJuIGludCBwdHJhY2VfcmVhZGRhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgc3JjLCBjaGFyIF9fdXNlciAqZHN0LCBpbnQgbGVuKTsKIGV4dGVybiBpbnQgcHRyYWNlX3dyaXRlZGF0YShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY2hhciBfX3VzZXIgKnNyYywgdW5zaWduZWQgbG9uZyBkc3QsIGludCBsZW4pOwotZXh0ZXJuIGludCBwdHJhY2VfYXR0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKLWV4dGVybiBpbnQgcHRyYWNlX2RldGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiBpbnQgcHRyYWNlX2NoZWNrX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBraWxsKTsKIGV4dGVybiBpbnQgcHRyYWNlX3JlcXVlc3Qoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCmluZGV4IGZjYjk4ODQuLmE1OTMwY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmgKQEAgLTE4Miw2ICsxODIsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIHJlc19jb3VudGVyX2NoZWNrX21hcmdpbiAtIGNoZWNrIGlmIHRoZSBjb3VudGVyIGFsbG93cyBjaGFyZ2luZworICogQGNudDogdGhlIHJlc291cmNlIGNvdW50ZXIgdG8gY2hlY2sKKyAqIEBieXRlczogdGhlIG51bWJlciBvZiBieXRlcyB0byBjaGVjayB0aGUgcmVtYWluaW5nIHNwYWNlIGFnYWluc3QKKyAqCisgKiBSZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBvbiB3aGV0aGVyIHRoZSBjb3VudGVyIGNhbiBiZSBjaGFyZ2VkCisgKiBAYnl0ZXMgb3Igd2hldGhlciB0aGlzIHdvdWxkIGV4Y2VlZCB0aGUgbGltaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCByZXNfY291bnRlcl9jaGVja19tYXJnaW4oc3RydWN0IHJlc19jb3VudGVyICpjbnQsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGJ5dGVzKQoreworCWJvb2wgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY250LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gY250LT5saW1pdCAtIGNudC0+dXNhZ2UgPj0gYnl0ZXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY250LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGlubGluZSBib29sIHJlc19jb3VudGVyX2NoZWNrX3VuZGVyX3NvZnRfbGltaXQoc3RydWN0IHJlc19jb3VudGVyICpjbnQpCiB7CiAJYm9vbCByZXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jpb19yZWdzLmggYi9pbmNsdWRlL2xpbnV4L3Jpb19yZWdzLmgKaW5kZXggZDYzZGNiYS4uOTAyNmIzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yaW9fcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmlvX3JlZ3MuaApAQCAtMTQsMTAgKzE0LDEyIEBACiAjZGVmaW5lIExJTlVYX1JJT19SRUdTX0gKIAogLyoKLSAqIEluIFJhcGlkSU8sIGVhY2ggZGV2aWNlIGhhcyBhIDJNQiBjb25maWd1cmF0aW9uIHNwYWNlIHRoYXQgaXMKKyAqIEluIFJhcGlkSU8sIGVhY2ggZGV2aWNlIGhhcyBhIDE2TUIgY29uZmlndXJhdGlvbiBzcGFjZSB0aGF0IGlzCiAgKiBhY2Nlc3NlZCB2aWEgbWFpbnRlbmFuY2UgdHJhbnNhY3Rpb25zLiAgUG9ydGlvbnMgb2YgY29uZmlndXJhdGlvbgogICogc3BhY2UgYXJlIHN0YW5kYXJkaXplZCBhbmQvb3IgcmVzZXJ2ZWQuCiAgKi8KKyNkZWZpbmUgUklPX01BSU5UX1NQQUNFX1NaCTB4MTAwMDAwMCAvKiAxNk1CIG9mIFJhcGlkSU8gbWFpbmVuYW5jZSBzcGFjZSAqLworCiAjZGVmaW5lIFJJT19ERVZfSURfQ0FSCQkweDAwCS8qIFtJXSBEZXZpY2UgSWRlbnRpdHkgQ0FSICovCiAjZGVmaW5lIFJJT19ERVZfSU5GT19DQVIJMHgwNAkvKiBbSV0gRGV2aWNlIEluZm9ybWF0aW9uIENBUiAqLwogI2RlZmluZSBSSU9fQVNNX0lEX0NBUgkJMHgwOAkvKiBbSV0gQXNzZW1ibHkgSWRlbnRpdHkgQ0FSICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0Yy5oIGIvaW5jbHVkZS9saW51eC9ydGMuaAppbmRleCAzYzk5NWI0Li44OWMzZTUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRjLmgKQEAgLTIwMyw2ICsyMDMsMTggQEAKIAlzdHJ1Y3QgaHJ0aW1lciBwaWVfdGltZXI7IC8qIHN1YiBzZWNvbmQgZXhwLCBzbyBuZWVkcyBocnRpbWVyICovCiAJaW50IHBpZV9lbmFibGVkOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBpcnF3b3JrOworCisKKyNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMCisJc3RydWN0IHdvcmtfc3RydWN0IHVpZV90YXNrOworCXN0cnVjdCB0aW1lcl9saXN0IHVpZV90aW1lcjsKKwkvKiBUaG9zZSBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSBydGMtPmlycV9sb2NrICovCisJdW5zaWduZWQgaW50IG9sZHNlY3M7CisJdW5zaWduZWQgaW50IHVpZV9pcnFfYWN0aXZlOjE7CisJdW5zaWduZWQgaW50IHN0b3BfdWllX3BvbGxpbmc6MTsKKwl1bnNpZ25lZCBpbnQgdWllX3Rhc2tfYWN0aXZlOjE7CisJdW5zaWduZWQgaW50IHVpZV90aW1lcl9hY3RpdmU6MTsKKyNlbmRpZgogfTsKICNkZWZpbmUgdG9fcnRjX2RldmljZShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHJ0Y19kZXZpY2UsIGRldikKIApAQCAtMjM4LDYgKzI1MCw3IEBACiBleHRlcm4gaW50IHJ0Y19kZXZfdXBkYXRlX2lycV9lbmFibGVfZW11bChzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLAogCQkJCQkJdW5zaWduZWQgaW50IGVuYWJsZWQpOwogCit2b2lkIHJ0Y19oYW5kbGVfbGVnYWN5X2lycShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBpbnQgbnVtLCBpbnQgbW9kZSk7CiB2b2lkIHJ0Y19haWVfdXBkYXRlX2lycSh2b2lkICpwcml2YXRlKTsKIHZvaWQgcnRjX3VpZV91cGRhdGVfaXJxKHZvaWQgKnByaXZhdGUpOwogZW51bSBocnRpbWVyX3Jlc3RhcnQgcnRjX3BpZV91cGRhdGVfaXJxKHN0cnVjdCBocnRpbWVyICp0aW1lcik7CkBAIC0yNDYsOCArMjU5LDYgQEAKIGludCBydGNfdW5yZWdpc3RlcihydGNfdGFza190ICp0YXNrKTsKIGludCBydGNfY29udHJvbChydGNfdGFza190ICp0LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKLXZvaWQgcnRjX3RpbWVyX2VucXVldWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lciAqdGltZXIpOwotdm9pZCBydGNfdGltZXJfcmVtb3ZlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKTsKIHZvaWQgcnRjX3RpbWVyX2luaXQoc3RydWN0IHJ0Y190aW1lciAqdGltZXIsIHZvaWQgKCpmKSh2b2lkKiBwKSwgdm9pZCogZGF0YSk7CiBpbnQgcnRjX3RpbWVyX3N0YXJ0KHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIqIHRpbWVyLAogCQkJa3RpbWVfdCBleHBpcmVzLCBrdGltZV90IHBlcmlvZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggZDc0N2Y5NC4uNzc3ZDhhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTc0NCw3ICsxNzQ0LDcgQEAKICNkZWZpbmUgUEZfTUNFX0VBUkxZICAgIDB4MDgwMDAwMDAgICAgICAvKiBFYXJseSBraWxsIGZvciBtY2UgcHJvY2VzcyBwb2xpY3kgKi8KICNkZWZpbmUgUEZfTUVNUE9MSUNZCTB4MTAwMDAwMDAJLyogTm9uLWRlZmF1bHQgTlVNQSBtZW1wb2xpY3kgKi8KICNkZWZpbmUgUEZfTVVURVhfVEVTVEVSCTB4MjAwMDAwMDAJLyogVGhyZWFkIGJlbG9uZ3MgdG8gdGhlIHJ0IG11dGV4IHRlc3RlciAqLwotI2RlZmluZSBQRl9GUkVFWkVSX1NLSVAJMHg0MDAwMDAwMAkvKiBGcmVlemVyIHNob3VsZCBub3QgY291bnQgaXQgYXMgZnJlZXplYWJsZSAqLworI2RlZmluZSBQRl9GUkVFWkVSX1NLSVAJMHg0MDAwMDAwMAkvKiBGcmVlemVyIHNob3VsZCBub3QgY291bnQgaXQgYXMgZnJlZXphYmxlICovCiAjZGVmaW5lIFBGX0ZSRUVaRVJfTk9TSUcgMHg4MDAwMDAwMAkvKiBGcmVlemVyIHdvbid0IHNlbmQgc2lnbmFscyB0byBpdCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IGM2NDJiYjguLmIyYjdmOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTE2NjIsNyArMTY2Miw3IEBACiAJCSAgICBjb25zdCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkJICAgIGNvbnN0IGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCiAJCSAgICBjb25zdCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCk7Ci1pbnQgc2VjdXJpdHlfY2FwYWJsZShpbnQgY2FwKTsKK2ludCBzZWN1cml0eV9jYXBhYmxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBpbnQgY2FwKTsKIGludCBzZWN1cml0eV9yZWFsX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjYXApOwogaW50IHNlY3VyaXR5X3JlYWxfY2FwYWJsZV9ub2F1ZGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY2FwKTsKIGludCBzZWN1cml0eV9zeXNjdGwoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBvcCk7CkBAIC0xODU2LDkgKzE4NTYsOSBAQAogCXJldHVybiBjYXBfY2Fwc2V0KG5ldywgb2xkLCBlZmZlY3RpdmUsIGluaGVyaXRhYmxlLCBwZXJtaXR0ZWQpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9jYXBhYmxlKGludCBjYXApCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9jYXBhYmxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBpbnQgY2FwKQogewotCXJldHVybiBjYXBfY2FwYWJsZShjdXJyZW50LCBjdXJyZW50X2NyZWQoKSwgY2FwLCBTRUNVUklUWV9DQVBfQVVESVQpOworCXJldHVybiBjYXBfY2FwYWJsZShjdXJyZW50LCBjcmVkLCBjYXAsIFNFQ1VSSVRZX0NBUF9BVURJVCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3JlYWxfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGNhcCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2JjX3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2JjX3hwcnQuaAppbmRleCBjNTBiNDU4Li4wODI4ODQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9iY194cHJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvYmNfeHBydC5oCkBAIC00NywxNCArNDcsNiBAQAogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpiY194cHJ0X3NpZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQotewotCWlmIChzdmNfaXNfYmFja2NoYW5uZWwocnFzdHApKQotCQlyZXR1cm4gKHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqKQotCQkJcnFzdHAtPnJxX3NlcnZlci0+c3ZfYmNfeHBydC0+eHB0X2JjX3NpZDsKLQlyZXR1cm4gTlVMTDsKLX0KLQogI2Vsc2UgLyogQ09ORklHX05GU19WNF8xICovCiBzdGF0aWMgaW5saW5lIGludCB4cHJ0X3NldHVwX2JhY2tjaGFubmVsKHN0cnVjdCBycGNfeHBydCAqeHBydCwKIAkJCQkJIHVuc2lnbmVkIGludCBtaW5fcmVxcykKQEAgLTY3LDExICs1OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpiY194cHJ0X3NpZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQotewotCXJldHVybiBOVUxMOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgeHBydF9mcmVlX2JjX3JlcXVlc3Qoc3RydWN0IHJwY19ycXN0ICpyZXEpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaAppbmRleCAwNTk4NzdiLi43YWQ5NzUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0LmgKQEAgLTc3LDcgKzc3LDYgQEAKIAlzaXplX3QJCQl4cHRfcmVtb3RlbGVuOwkvKiBsZW5ndGggb2YgYWRkcmVzcyAqLwogCXN0cnVjdCBycGNfd2FpdF9xdWV1ZQl4cHRfYmNfcGVuZGluZzsJLyogYmFja2NoYW5uZWwgd2FpdCBxdWV1ZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJeHB0X3VzZXJzOwkvKiBjYWxsYmFja3Mgb24gZnJlZSAqLwotCXZvaWQJCQkqeHB0X2JjX3NpZDsJLyogYmFjayBjaGFubmVsIHNlc3Npb24gSUQgKi8KIAogCXN0cnVjdCBuZXQJCSp4cHRfbmV0OwogCXN0cnVjdCBycGNfeHBydAkJKnhwdF9iY194cHJ0OwkvKiBORlN2NC4xIGJhY2tjaGFubmVsICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggMThjZDA2OC4uOTg2NjRkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtMTI1LDM5ICsxMjUsMzcgQEAKIGV4dGVybiBzdHJ1Y3QgdHJhY2VfZXZlbnRfZnVuY3Rpb25zIGV4aXRfc3lzY2FsbF9wcmludF9mdW5jczsKIAogI2RlZmluZSBTWVNDQUxMX1RSQUNFX0VOVEVSX0VWRU5UKHNuYW1lKQkJCQlcCi0Jc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhCQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKSBfX3N5c2NhbGxfbWV0YV8jI3NuYW1lOwkJXAorCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSBfX3N5c2NhbGxfbWV0YV8jI3NuYW1lOwkJXAogCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpCQkJXAogCSAgZXZlbnRfZW50ZXJfIyNzbmFtZSA9IHsJCQkJCVwKIAkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAic3lzX2VudGVyIiNzbmFtZSwJCVwKIAkJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3Nfc3lzY2FsbF9lbnRlciwJXAogCQkuZXZlbnQuZnVuY3MgICAgICAgICAgICA9ICZlbnRlcl9zeXNjYWxsX3ByaW50X2Z1bmNzLAlcCiAJCS5kYXRhCQkJPSAodm9pZCAqKSZfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLFwKIAl9OwkJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKKwkgKl9fZXZlbnRfZW50ZXJfIyNzbmFtZSA9ICZldmVudF9lbnRlcl8jI3NuYW1lOwkJCVwKIAlfX1RSQUNFX0VWRU5UX0ZMQUdTKGVudGVyXyMjc25hbWUsIFRSQUNFX0VWRU5UX0ZMX0NBUF9BTlkpCiAKICNkZWZpbmUgU1lTQ0FMTF9UUkFDRV9FWElUX0VWRU5UKHNuYW1lKQkJCQkJXAotCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YQkJCQkJXAotCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKIAlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKIAkgIGV2ZW50X2V4aXRfIyNzbmFtZSA9IHsJCQkJCVwKIAkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAic3lzX2V4aXQiI3NuYW1lLAkJXAogCQkuY2xhc3MJCQk9ICZldmVudF9jbGFzc19zeXNjYWxsX2V4aXQsCVwKIAkJLmV2ZW50LmZ1bmNzCQk9ICZleGl0X3N5c2NhbGxfcHJpbnRfZnVuY3MsCVwKIAkJLmRhdGEJCQk9ICh2b2lkICopJl9fc3lzY2FsbF9tZXRhXyMjc25hbWUsXAogCX07CQkJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJXAorCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpCQkJXAorCSpfX2V2ZW50X2V4aXRfIyNzbmFtZSA9ICZldmVudF9leGl0XyMjc25hbWU7CQkJXAogCV9fVFJBQ0VfRVZFTlRfRkxBR1MoZXhpdF8jI3NuYW1lLCBUUkFDRV9FVkVOVF9GTF9DQVBfQU5ZKQogCiAjZGVmaW5lIFNZU0NBTExfTUVUQURBVEEoc25hbWUsIG5iKQkJCQlcCiAJU1lTQ0FMTF9UUkFDRV9FTlRFUl9FVkVOVChzbmFtZSk7CQkJXAogCVNZU0NBTExfVFJBQ0VfRVhJVF9FVkVOVChzbmFtZSk7CQkJXAogCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSBfX3VzZWQJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAogCSAgX19zeXNjYWxsX21ldGFfIyNzbmFtZSA9IHsJCQkJXAogCQkubmFtZSAJCT0gInN5cyIjc25hbWUsCQkJXAogCQkubmJfYXJncyAJPSBuYiwJCQkJXApAQCAtMTY2LDE0ICsxNjQsMTUgQEAKIAkJLmVudGVyX2V2ZW50CT0gJmV2ZW50X2VudGVyXyMjc25hbWUsCQlcCiAJCS5leGl0X2V2ZW50CT0gJmV2ZW50X2V4aXRfIyNzbmFtZSwJCVwKIAkJLmVudGVyX2ZpZWxkcwk9IExJU1RfSEVBRF9JTklUKF9fc3lzY2FsbF9tZXRhXyMjc25hbWUuZW50ZXJfZmllbGRzKSwgXAotCX07CisJfTsJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSBfX3VzZWQJCQlcCisJICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3N5c2NhbGxzX21ldGFkYXRhIikpKQlcCisJICpfX3Bfc3lzY2FsbF9tZXRhXyMjc25hbWUgPSAmX19zeXNjYWxsX21ldGFfIyNzbmFtZTsKIAogI2RlZmluZSBTWVNDQUxMX0RFRklORTAoc25hbWUpCQkJCQlcCiAJU1lTQ0FMTF9UUkFDRV9FTlRFUl9FVkVOVChfIyNzbmFtZSk7CQkJXAogCVNZU0NBTExfVFJBQ0VfRVhJVF9FVkVOVChfIyNzbmFtZSk7CQkJXAogCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSBfX3VzZWQJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAogCSAgX19zeXNjYWxsX21ldGFfXyMjc25hbWUgPSB7CQkJCVwKIAkJLm5hbWUgCQk9ICJzeXNfIiNzbmFtZSwJCQlcCiAJCS5uYl9hcmdzIAk9IDAsCQkJCVwKQEAgLTE4MSw2ICsxODAsOSBAQAogCQkuZXhpdF9ldmVudAk9ICZldmVudF9leGl0X18jI3NuYW1lLAkJXAogCQkuZW50ZXJfZmllbGRzCT0gTElTVF9IRUFEX0lOSVQoX19zeXNjYWxsX21ldGFfXyMjc25hbWUuZW50ZXJfZmllbGRzKSwgXAogCX07CQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAorCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAorCSAqX19wX3N5c2NhbGxfbWV0YV8jI3NuYW1lID0gJl9fc3lzY2FsbF9tZXRhX18jI3NuYW1lOwlcCiAJYXNtbGlua2FnZSBsb25nIHN5c18jI3NuYW1lKHZvaWQpCiAjZWxzZQogI2RlZmluZSBTWVNDQUxMX0RFRklORTAobmFtZSkJICAgYXNtbGlua2FnZSBsb25nIHN5c18jI25hbWUodm9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzcnEuaCBiL2luY2x1ZGUvbGludXgvc3lzcnEuaAppbmRleCAzODdmYTdkLi43ZmFmOTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c3JxLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNycS5oCkBAIC0xNyw2ICsxNyw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCisvKiBFbmFibGUvZGlzYWJsZSBTWVNSUSBzdXBwb3J0IGJ5IGRlZmF1bHQgKDA9PW5vLCAxPT15ZXMpLiAqLworI2RlZmluZSBTWVNSUV9ERUZBVUxUX0VOQUJMRQkxCisKIC8qIFBvc3NpYmxlIHZhbHVlcyBvZiBiaXRtYXNrIGZvciBlbmFibGluZyBzeXNycSBmdW5jdGlvbnMgKi8KIC8qIDB4MDAwMSBpcyByZXNlcnZlZCBmb3IgZW5hYmxlIGV2ZXJ5dGhpbmcgKi8KICNkZWZpbmUgU1lTUlFfRU5BQkxFX0xPRwkweDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oIGIvaW5jbHVkZS9saW51eC90aGVybWFsLmgKaW5kZXggODY1MTU1Ni4uZDNlYzg5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aGVybWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC90aGVybWFsLmgKQEAgLTE3Miw2ICsxNzIsMTQgQEAKIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICp0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKiwgdm9pZCAqLAogCQljb25zdCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgKik7CiB2b2lkIHRoZXJtYWxfY29vbGluZ19kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqKTsKKworI2lmZGVmIENPTkZJR19ORVQKIGV4dGVybiBpbnQgZ2VuZXJhdGVfbmV0bGlua19ldmVudCh1MzIgb3JpZywgZW51bSBldmVudHMgZXZlbnQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGdlbmVyYXRlX25ldGxpbmtfZXZlbnQodTMyIG9yaWcsIGVudW0gZXZlbnRzIGV2ZW50KQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX1RIRVJNQUxfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCmluZGV4IGM2ODE0NjEuLjk3Yzg0YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCkBAIC0zMywxMiArMzMsNyBAQAogCXZvaWQgKCpyZWdmdW5jKSh2b2lkKTsKIAl2b2lkICgqdW5yZWdmdW5jKSh2b2lkKTsKIAlzdHJ1Y3QgdHJhY2Vwb2ludF9mdW5jIF9fcmN1ICpmdW5jczsKLX0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsJCS8qCi0JCQkJCSAqIEFsaWduZWQgb24gMzIgYnl0ZXMgYmVjYXVzZSBpdCBpcwotCQkJCQkgKiBnbG9iYWxseSB2aXNpYmxlIGFuZCBnY2MgaGFwcGlseQotCQkJCQkgKiBhbGlnbiB0aGVzZSBvbiB0aGUgc3RydWN0dXJlIHNpemUuCi0JCQkJCSAqIEtlZXAgaW4gc3luYyB3aXRoIHZtbGludXgubGRzLmguCi0JCQkJCSAqLworfTsKIAogLyoKICAqIENvbm5lY3QgYSBwcm9iZSB0byBhIHRyYWNlcG9pbnQuCkBAIC02MSwxNSArNTYsMTUgQEAKIAogc3RydWN0IHRyYWNlcG9pbnRfaXRlciB7CiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwotCXN0cnVjdCB0cmFjZXBvaW50ICp0cmFjZXBvaW50OworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRyYWNlcG9pbnQ7CiB9OwogCiBleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfc3RhcnQoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcik7CiBleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfbmV4dChzdHJ1Y3QgdHJhY2Vwb2ludF9pdGVyICppdGVyKTsKIGV4dGVybiB2b2lkIHRyYWNlcG9pbnRfaXRlcl9zdG9wKHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOwogZXh0ZXJuIHZvaWQgdHJhY2Vwb2ludF9pdGVyX3Jlc2V0KHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOwotZXh0ZXJuIGludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICoqdHJhY2Vwb2ludCwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sIHN0cnVjdCB0cmFjZXBvaW50ICplbmQpOworZXh0ZXJuIGludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKip0cmFjZXBvaW50LAorCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpOwogCiAvKgogICogdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyIG11c3QgYmUgY2FsbGVkIGJldHdlZW4gdGhlIGxhc3QgdHJhY2Vwb2ludApAQCAtODQsMTEgKzc5LDEzIEBACiAjZGVmaW5lIFBBUkFNUyhhcmdzLi4uKSBhcmdzCiAKICNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKLWV4dGVybiB2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKTsKK2V4dGVybgordm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICpiZWdpbiwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sCi0Jc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqYmVnaW4sCisJc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqZW5kKQogeyB9CiAjZW5kaWYgLyogQ09ORklHX1RSQUNFUE9JTlRTICovCiAKQEAgLTE3NCwxMiArMTcxLDIwIEBACiAJewkJCQkJCQkJXAogCX0KIAorLyoKKyAqIFdlIGhhdmUgbm8gZ3VhcmFudGVlIHRoYXQgZ2NjIGFuZCB0aGUgbGlua2VyIHdvbid0IHVwLWFsaWduIHRoZSB0cmFjZXBvaW50CisgKiBzdHJ1Y3R1cmVzLCBzbyB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGl0ZXJhdGlvbgorICogb24gdGhlIHRyYWNlcG9pbnRzLgorICovCiAjZGVmaW5lIERFRklORV9UUkFDRV9GTihuYW1lLCByZWcsIHVucmVnKQkJCQlcCiAJc3RhdGljIGNvbnN0IGNoYXIgX190cHN0cnRhYl8jI25hbWVbXQkJCQlcCiAJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50c19zdHJpbmdzIikpKSA9ICNuYW1lOwlcCiAJc3RydWN0IHRyYWNlcG9pbnQgX190cmFjZXBvaW50XyMjbmFtZQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50cyIpLCBhbGlnbmVkKDMyKSkpID0JXAotCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCAwLCByZWcsIHVucmVnLCBOVUxMIH0KKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzIikpKSA9CQkJXAorCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCAwLCByZWcsIHVucmVnLCBOVUxMIH07CQlcCisJc3RhdGljIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgX190cmFjZXBvaW50X3B0cl8jI25hbWUgX191c2VkCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzX3B0cnMiKSkpID0JCVwKKwkJJl9fdHJhY2Vwb2ludF8jI25hbWU7CiAKICNkZWZpbmUgREVGSU5FX1RSQUNFKG5hbWUpCQkJCQkJXAogCURFRklORV9UUkFDRV9GTihuYW1lLCBOVUxMLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oIGIvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKaW5kZXggNWU4NmRjNy4uODFhOTI3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKQEAgLTg5LDcgKzg5LDcgQEAKIAogI2RlZmluZSBVU0JfQ0RDX0NPTU1fRkVBVFVSRQkweDAxCiAjZGVmaW5lIFVTQl9DRENfQ0FQX0xJTkUJMHgwMgotI2RlZmluZSBVU0JfQ0RDX0NBUF9CUksJMHgwNAorI2RlZmluZSBVU0JfQ0RDX0NBUF9CUksJCTB4MDQKICNkZWZpbmUgVVNCX0NEQ19DQVBfTk9USUZZCTB4MDgKIAogLyogIlVuaW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRvciIgZnJvbSBDREMgc3BlYyA1LjIuMy44ICovCkBAIC0yNzEsNiArMjcxLDExIEBACiAJX19sZTE2CXdMZW5ndGg7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IHVzYl9jZGNfc3BlZWRfY2hhbmdlIHsKKwlfX2xlMzIJRExCaXRSUmF0ZTsJLyogY29udGFpbnMgdGhlIGRvd25saW5rIGJpdCByYXRlIChJTiBwaXBlKSAqLworCV9fbGUzMglVTEJpdFJhdGU7CS8qIGNvbnRhaW5zIHRoZSB1cGxpbmsgYml0IHJhdGUgKE9VVCBwaXBlKSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCkBAIC0yOTIsNyArMjk3LDcgQEAKIAlfX2xlMTYJd05kcE91dERpdmlzb3I7CiAJX19sZTE2CXdOZHBPdXRQYXlsb2FkUmVtYWluZGVyOwogCV9fbGUxNgl3TmRwT3V0QWxpZ25tZW50OwotCV9fbGUxNgl3UGFkZGluZzI7CisJX19sZTE2CXdOdGJPdXRNYXhEYXRhZ3JhbXM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoKQEAgLTMwNyw3ICszMTIsNyBAQAogCV9fbGUxNgl3SGVhZGVyTGVuZ3RoOwogCV9fbGUxNgl3U2VxdWVuY2U7CiAJX19sZTE2CXdCbG9ja0xlbmd0aDsKLQlfX2xlMTYJd0ZwSW5kZXg7CisJX19sZTE2CXdOZHBJbmRleDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMzIgewpAQCAtMzE1LDcgKzMyMCw3IEBACiAJX19sZTE2CXdIZWFkZXJMZW5ndGg7CiAJX19sZTE2CXdTZXF1ZW5jZTsKIAlfX2xlMzIJZHdCbG9ja0xlbmd0aDsKLQlfX2xlMzIJZHdGcEluZGV4OworCV9fbGUzMglkd05kcEluZGV4OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qCkBAIC0zMzcsNyArMzQyLDcgQEAKIHN0cnVjdCB1c2JfY2RjX25jbV9uZHAxNiB7CiAJX19sZTMyCWR3U2lnbmF0dXJlOwogCV9fbGUxNgl3TGVuZ3RoOwotCV9fbGUxNgl3TmV4dEZwSW5kZXg7CisJX19sZTE2CXdOZXh0TmRwSW5kZXg7CiAJc3RydWN0CXVzYl9jZGNfbmNtX2RwZTE2IGRwZTE2WzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTM3NSw2ICszODAsNyBAQAogI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX0VOQ0FQX0NPTU1BTkQJCQkoMSA8PCAyKQogI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX01BWF9EQVRBR1JBTV9TSVpFCQkoMSA8PCAzKQogI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX0NSQ19NT0RFCQkJKDEgPDwgNCkKKyNkZWZpbmUJVVNCX0NEQ19OQ01fTkNBUF9OVEJfSU5QVVRfU0laRQkJCSgxIDw8IDUpCiAKIC8qIENEQyBOQ00gc3ViY2xhc3MgVGFibGUgNi0zOiBOVEIgUGFyYW1ldGVyIFN0cnVjdHVyZSAqLwogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEIxNl9TVVBQT1JURUQJCQkoMSA8PCAwKQpAQCAtMzkyLDYgKzM5OCwxMyBAQAogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEJfTUlOX0lOX1NJWkUJCQkyMDQ4CiAjZGVmaW5lIFVTQl9DRENfTkNNX05UQl9NSU5fT1VUX1NJWkUJCQkyMDQ4CiAKKy8qIE5UQiBJbnB1dCBTaXplIFN0cnVjdHVyZSAqLworc3RydWN0IHVzYl9jZGNfbmNtX25kcF9pbnB1dF9zaXplIHsKKwlfX2xlMzIJZHdOdGJJbk1heFNpemU7CisJX19sZTE2CXdOdGJJbk1heERhdGFncmFtczsKKwlfX2xlMTYJd1Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qIENEQyBOQ00gc3ViY2xhc3MgNi4yLjExIFNldENyY01vZGUgKi8KICNkZWZpbmUgVVNCX0NEQ19OQ01fQ1JDX05PVF9BUFBFTkRFRAkJCTB4MDAKICNkZWZpbmUgVVNCX0NEQ19OQ01fQ1JDX0FQUEVOREVECQkJMHgwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvaGNkLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaAppbmRleCBkZDZlZTQ5Li5hODU0ZmU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaApAQCAtMTEyLDYgKzExMiw3IEBACiAJLyogRmxhZ3MgdGhhdCBnZXQgc2V0IG9ubHkgZHVyaW5nIEhDRCByZWdpc3RyYXRpb24gb3IgcmVtb3ZhbC4gKi8KIAl1bnNpZ25lZAkJcmhfcmVnaXN0ZXJlZDoxOy8qIGlzIHJvb3QgaHViIHJlZ2lzdGVyZWQ/ICovCiAJdW5zaWduZWQJCXJoX3BvbGxhYmxlOjE7CS8qIG1heSB3ZSBwb2xsIHRoZSByb290IGh1Yj8gKi8KKwl1bnNpZ25lZAkJbXNpeF9lbmFibGVkOjE7CS8qIGRyaXZlciBoYXMgTVNJLVggZW5hYmxlZD8gKi8KIAogCS8qIFRoZSBuZXh0IGZsYWcgaXMgYSBzdG9wZ2FwLCB0byBiZSByZW1vdmVkIHdoZW4gYWxsIHRoZSBIQ0RzCiAJICogc3VwcG9ydCB0aGUgbmV3IHJvb3QtaHViIHBvbGxpbmcgbWVjaGFuaXNtLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiX2h3LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaAppbmRleCBiOTJlMTczLi43ZDFiYWJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaApAQCAtMTYsMTIgKzE2LDggQEAKICNpZm5kZWYgX19MSU5VWF9VU0JfR0FER0VUX01TTTcyS19VRENfSF9fCiAjZGVmaW5lIF9fTElOVVhfVVNCX0dBREdFVF9NU003MktfVURDX0hfXwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVNNN1gwMEEKLSNkZWZpbmUgVVNCX1NCVVNDRkcgICAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDA5MCkKLSNlbHNlCiAjZGVmaW5lIFVTQl9BSEJCVVJTVCAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAwOTApCiAjZGVmaW5lIFVTQl9BSEJNT0RFICAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAwOTgpCi0jZW5kaWYKICNkZWZpbmUgVVNCX0NBUExFTkdUSCAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDEwMCkgLyogOCBiaXQgKi8KIAogI2RlZmluZSBVU0JfVVNCQ01EICAgICAgICAgICAoTVNNX1VTQl9CQVNFICsgMHgwMTQwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAppbmRleCAxNmQ2ODJmLi5jOTA0OTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaApAQCAtMzQ3LDYgKzM0Nyw5IEBACiBleHRlcm4gaW50IHVzYl9zZXJpYWxfaGFuZGxlX3N5c3JxX2NoYXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQkJdW5zaWduZWQgaW50IGNoKTsKIGV4dGVybiBpbnQgdXNiX3NlcmlhbF9oYW5kbGVfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnVzYl9wb3J0LAorCQkJCQkgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJIHVuc2lnbmVkIGludCBzdGF0dXMpOwogCiAKIGV4dGVybiBpbnQgdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaAppbmRleCAwMDkzZGQ3Li44MDA2MTdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaApAQCAtMTA5LDcgKzEwOSwxMCBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBmYml0KQogewogCS8qIERpZCB5b3UgZm9yZ2V0IHRvIGZpeCBhc3N1bXB0aW9ucyBvbiBtYXggZmVhdHVyZXM/ICovCi0JTUFZQkVfQlVJTERfQlVHX09OKGZiaXQgPj0gMzIpOworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChmYml0KSkKKwkJQlVJTERfQlVHX09OKGZiaXQgPj0gMzIpOworCWVsc2UKKwkJQlVHX09OKGZiaXQgPj0gMzIpOwogCiAJaWYgKGZiaXQgPCBWSVJUSU9fVFJBTlNQT1JUX0ZfU1RBUlQpCiAJCXZpcnRpb19jaGVja19kcml2ZXJfb2ZmZXJlZF9mZWF0dXJlKHZkZXYsIGZiaXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCmluZGV4IGE4NTA2NGQuLmU0ZDMzMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKQEAgLTcsNyArNyw4IEBACiAgKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KICAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuCiAgKgotICogQ29weXJpZ2h0IChDKSBSZWQgSGF0LCBJbmMuLCAyMDA5LCAyMDEwCisgKiBDb3B5cmlnaHQgKEMpIFJlZCBIYXQsIEluYy4sIDIwMDksIDIwMTAsIDIwMTEKKyAqIENvcHlyaWdodCAoQykgQW1pdCBTaGFoIDxhbWl0LnNoYWhAcmVkaGF0LmNvbT4sIDIwMDksIDIwMTAsIDIwMTEKICAqLwogCiAvKiBGZWF0dXJlIGJpdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDFhYzExNTguLmY3OTk4YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMjUwLDcgKzI1MCw3IEBACiBlbnVtIHsKIAlXUV9OT05fUkVFTlRSQU5UCT0gMSA8PCAwLCAvKiBndWFyYW50ZWUgbm9uLXJlZW50cmFuY2UgKi8KIAlXUV9VTkJPVU5ECQk9IDEgPDwgMSwgLyogbm90IGJvdW5kIHRvIGFueSBjcHUgKi8KLQlXUV9GUkVFWkVBQkxFCQk9IDEgPDwgMiwgLyogZnJlZXplIGR1cmluZyBzdXNwZW5kICovCisJV1FfRlJFRVpBQkxFCQk9IDEgPDwgMiwgLyogZnJlZXplIGR1cmluZyBzdXNwZW5kICovCiAJV1FfTUVNX1JFQ0xBSU0JCT0gMSA8PCAzLCAvKiBtYXkgYmUgdXNlZCBmb3IgbWVtb3J5IHJlY2xhaW0gKi8KIAlXUV9ISUdIUFJJCQk9IDEgPDwgNCwgLyogaGlnaCBwcmlvcml0eSAqLwogCVdRX0NQVV9JTlRFTlNJVkUJPSAxIDw8IDUsIC8qIGNwdSBpbnN0ZW5zaXZlIHdvcmtxdWV1ZSAqLwpAQCAtMzE4LDcgKzMxOCw3IEBACiAvKioKICAqIGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlIC0gYWxsb2NhdGUgYW4gb3JkZXJlZCB3b3JrcXVldWUKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSB3b3JrcXVldWUKLSAqIEBmbGFnczogV1FfKiBmbGFncyAob25seSBXUV9GUkVFWkVBQkxFIGFuZCBXUV9NRU1fUkVDTEFJTSBhcmUgbWVhbmluZ2Z1bCkKKyAqIEBmbGFnczogV1FfKiBmbGFncyAob25seSBXUV9GUkVFWkFCTEUgYW5kIFdRX01FTV9SRUNMQUlNIGFyZSBtZWFuaW5nZnVsKQogICoKICAqIEFsbG9jYXRlIGFuIG9yZGVyZWQgd29ya3F1ZXVlLiAgQW4gb3JkZXJlZCB3b3JrcXVldWUgZXhlY3V0ZXMgYXQKICAqIG1vc3Qgb25lIHdvcmsgaXRlbSBhdCBhbnkgZ2l2ZW4gdGltZSBpbiB0aGUgcXVldWVkIG9yZGVyLiAgVGhleSBhcmUKQEAgLTMzNSw4ICszMzUsOCBAQAogCiAjZGVmaW5lIGNyZWF0ZV93b3JrcXVldWUobmFtZSkJCQkJCVwKIAlhbGxvY193b3JrcXVldWUoKG5hbWUpLCBXUV9NRU1fUkVDTEFJTSwgMSkKLSNkZWZpbmUgY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKG5hbWUpCQkJXAotCWFsbG9jX3dvcmtxdWV1ZSgobmFtZSksIFdRX0ZSRUVaRUFCTEUgfCBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDEpCisjZGVmaW5lIGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKG5hbWUpCQkJXAorCWFsbG9jX3dvcmtxdWV1ZSgobmFtZSksIFdRX0ZSRUVaQUJMRSB8IFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMSkKICNkZWZpbmUgY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUobmFtZSkJCQlcCiAJYWxsb2Nfd29ya3F1ZXVlKChuYW1lKSwgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLCAxKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IGEyOWZlYjAuLmQyY2Y4ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC0xODQsNiArMTg0LDcgQEAKIAlfX3UzMgkJIGxpbmtfbW9kZTsKIAlfX3U4ICAgICAgICAgICAgIGF1dGhfdHlwZTsKIAlfX3U4ICAgICAgICAgICAgIHNlY19sZXZlbDsKKwlfX3U4CQkgcGVuZGluZ19zZWNfbGV2ZWw7CiAJX191OCAgICAgICAgICAgICBwb3dlcl9zYXZlOwogCV9fdTE2ICAgICAgICAgICAgZGlzY190aW1lb3V0OwogCXVuc2lnbmVkIGxvbmcJIHBlbmQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCmluZGV4IDhhNjRiODEuLmI0YzdjMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCkBAIC0xOTUsNyArMTk1LDggQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGdlbmxtc2dfY2FuY2VsKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcikKIHsKLQlubG1zZ19jYW5jZWwoc2tiLCBoZHIgLSBHRU5MX0hEUkxFTiAtIE5MTVNHX0hEUkxFTik7CisJaWYgKGhkcikKKwkJbmxtc2dfY2FuY2VsKHNrYiwgaGRyIC0gR0VOTF9IRFJMRU4gLSBOTE1TR19IRFJMRU4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCA0YTNjZDJjLi45NmU1MGUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC04OSw2ICs4OSwxOCBAQAogI2RlZmluZSBJUFY2X0FERFJfU0NPUEVfR0xPQkFMCQkweDBlCiAKIC8qCisgKglBZGRyIGZsYWdzCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIElQVjZfQUREUl9NQ19GTEFHX1RSQU5TSUVOVChhKQlcCisJKChhKS0+czZfYWRkclsxXSAmIDB4MTApCisjZGVmaW5lIElQVjZfQUREUl9NQ19GTEFHX1BSRUZJWChhKQlcCisJKChhKS0+czZfYWRkclsxXSAmIDB4MjApCisjZGVmaW5lIElQVjZfQUREUl9NQ19GTEFHX1JFTkRFWlZPVVMoYSkJXAorCSgoYSktPnM2X2FkZHJbMV0gJiAweDQwKQorI2VuZGlmCisKKy8qCiAgKglmcmFnbWVudGF0aW9uIGhlYWRlcgogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oCmluZGV4IDk2YmE1ZjcuLjM0OWNlZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaApAQCAtNzcsOSArNzcsNiBAQAogCWlmIChlID09IE5VTEwpCiAJCXJldHVybjsKIAotCWlmICghKGUtPmN0bWFzayAmICgxIDw8IGV2ZW50KSkpCi0JCXJldHVybjsKLQogCXNldF9iaXQoZXZlbnQsICZlLT5jYWNoZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmgKaW5kZXggY2Q4NWIzYi4uZTUwNTM1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmgKQEAgLTIwMSwxOCArMjAxLDggQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQKLW5mX3Rwcm94eV9wdXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCi17Ci0JLyogVElNRV9XQUlUIGluZXQgc29ja2V0cyBoYXZlIHRvIGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgKi8KLQlpZiAoKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgJiYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSkKLQkJaW5ldF90d3NrX3B1dChpbmV0X3R3c2soc2spKTsKLQllbHNlCi0JCXNvY2tfcHV0KHNrKTsKLX0KLQogLyogYXNzaWduIGEgc29ja2V0IHRvIHRoZSBza2IgLS0gY29uc3VtZXMgc2sgKi8KLWludAordm9pZAogbmZfdHByb3h5X2Fzc2lnbl9zb2NrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzayk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKaW5kZXggZTllZWU5OS4uMDRmODU1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC0xOTksNyArMTk5LDcgQEAKIAogc3RydWN0IHFkaXNjX3NrYl9jYiB7CiAJdW5zaWduZWQgaW50CQlwa3RfbGVuOwotCWNoYXIJCQlkYXRhW107CisJbG9uZwkJCWRhdGFbXTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IHFkaXNjX3FsZW4oc3RydWN0IFFkaXNjICpxKQpAQCAtNDQ1LDcgKzQ0NSw2IEBACiB7CiAJX19za2JfcXVldWVfdGFpbChsaXN0LCBza2IpOwogCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiB9CkBAIC00NjAsOCArNDU5LDEwIEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCk7CiAKLQlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkKKwlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkgewogCQlzY2gtPnFzdGF0cy5iYWNrbG9nIC09IHFkaXNjX3BrdF9sZW4oc2tiKTsKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CisJfQogCiAJcmV0dXJuIHNrYjsKIH0KQEAgLTQ3NCwxMCArNDc1LDExIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3FkaXNjX3F1ZXVlX2Ryb3BfaGVhZChzdHJ1Y3QgUWRpc2MgKnNjaCwKIAkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19xZGlzY19kZXF1ZXVlX2hlYWQoc2NoLCBsaXN0KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZShsaXN0KTsKIAogCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7CiAJCXVuc2lnbmVkIGludCBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7CisJCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gbGVuOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIGxlbjsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggZDg4NGQyNi4uYmMxY2Y3ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTc1Myw2ICs3NTMsOCBAQAogCQkJCQlpbnQgbGV2ZWwsCiAJCQkJCWludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLAogCQkJCQlpbnQgX191c2VyICpvcHRpb24pOworCWludAkJCSgqY29tcGF0X2lvY3RsKShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKICNlbmRpZgogCWludAkJCSgqc2VuZG1zZykoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9kcy5oIGIvaW5jbHVkZS9wY21jaWEvZHMuaAppbmRleCA4NDc5YjY2Li4zZmQ1MDY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9kcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2RzLmgKQEAgLTI2MSw2ICsyNjEsNyBAQAogI2RlZmluZSBDT05GX0VOQUJMRV9FU1IgICAgICAgICAweDAwMDgKICNkZWZpbmUgQ09ORl9FTkFCTEVfSU9DQVJECTB4MDAxMCAvKiBhdXRvLWVuYWJsZWQgaWYgSU8gcmVzb3VyY2VzIG9yIElSUQogCQkJCQkqIChDT05GX0VOQUJMRV9JUlEpIGluIHVzZSAqLworI2RlZmluZSBDT05GX0VOQUJMRV9aVkNBUkQJMHgwMDIwCiAKIC8qIGZsYWdzIHVzZWQgYnkgcGNtY2lhX2xvb3BfY29uZmlnKCkgYXV0b2NvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgQ09ORl9BVVRPX0NIRUNLX1ZDQwkweDAxMDAgLyogY2hlY2sgZm9yIG1hdGNoaW5nIFZjYz8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaS5oCmluZGV4IDY0OGQyMzMuLmI3NmQ0MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2kuaApAQCAtOSw2ICs5LDcgQEAKICNkZWZpbmUgX1NDU0lfU0NTSV9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKIHN0cnVjdCBzY3NpX2NtbmQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvd204OTAzLmggYi9pbmNsdWRlL3NvdW5kL3dtODkwMy5oCmluZGV4IGI0YTBkYjIzLi4xZWVlYmQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3dtODkwMy5oCisrKyBiL2luY2x1ZGUvc291bmQvd204OTAzLmgKQEAgLTE3LDEzICsxNyw5IEBACiAvKgogICogUjYgKDB4MDYpIC0gTWljIEJpYXMgQ29udHJvbCAwCiAgKi8KLSNkZWZpbmUgV004OTAzX01JQ0RFVF9IWVNUX0VOQSAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlDREVUX0hZU1RfRU5BICovCi0jZGVmaW5lIFdNODkwM19NSUNERVRfSFlTVF9FTkFfTUFTSyAgICAgICAgICAgICAweDAwODAgIC8qIE1JQ0RFVF9IWVNUX0VOQSAqLwotI2RlZmluZSBXTTg5MDNfTUlDREVUX0hZU1RfRU5BX1NISUZUICAgICAgICAgICAgICAgICA3ICAvKiBNSUNERVRfSFlTVF9FTkEgKi8KLSNkZWZpbmUgV004OTAzX01JQ0RFVF9IWVNUX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogTUlDREVUX0hZU1RfRU5BICovCi0jZGVmaW5lIFdNODkwM19NSUNERVRfVEhSX01BU0sgICAgICAgICAgICAgICAgICAweDAwNzAgIC8qIE1JQ0RFVF9USFIgLSBbNjo0XSAqLwotI2RlZmluZSBXTTg5MDNfTUlDREVUX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBNSUNERVRfVEhSIC0gWzY6NF0gKi8KLSNkZWZpbmUgV004OTAzX01JQ0RFVF9USFJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMyAgLyogTUlDREVUX1RIUiAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwM19NSUNERVRfVEhSX01BU0sgICAgICAgICAgICAgICAgICAweDAwMzAgIC8qIE1JQ0RFVF9USFIgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDNfTUlDREVUX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBNSUNERVRfVEhSIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTAzX01JQ0RFVF9USFJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogTUlDREVUX1RIUiAtIFs1OjRdICovCiAjZGVmaW5lIFdNODkwM19NSUNTSE9SVF9USFJfTUFTSyAgICAgICAgICAgICAgICAweDAwMEMgIC8qIE1JQ1NIT1JUX1RIUiAtIFszOjJdICovCiAjZGVmaW5lIFdNODkwM19NSUNTSE9SVF9USFJfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIE1JQ1NIT1JUX1RIUiAtIFszOjJdICovCiAjZGVmaW5lIFdNODkwM19NSUNTSE9SVF9USFJfV0lEVEggICAgICAgICAgICAgICAgICAgIDIgIC8qIE1JQ1NIT1JUX1RIUiAtIFszOjJdICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYXNlLmggYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYXNlLmgKaW5kZXggMDdmZGZiNi4uMDgyOGI2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oCisrKyBiL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaApAQCAtOCw3ICs4LDYgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgotI2luY2x1ZGUgInRhcmdldF9jb3JlX21pYi5oIgogCiAjZGVmaW5lIFRBUkdFVF9DT1JFX01PRF9WRVJTSU9OCQkidjQuMC4wLXJjNiIKICNkZWZpbmUgU0hVVERPV05fU0lHUwkoc2lnbWFzayhTSUdLSUxMKXxzaWdtYXNrKFNJR0lOVCl8c2lnbWFzayhTSUdBQlJUKSkKQEAgLTE5NSw2ICsxOTQsMjEgQEAKIAlTQU1fVEFTS19BVFRSX0VNVUxBVEVECiB9IHQxMF90YXNrX2F0dHJfaW5kZXhfdDsKIAorLyoKKyAqIFVzZWQgZm9yIHRhcmdldCBTQ1NJIHN0YXRpc3RpY3MKKyAqLwordHlwZWRlZiBlbnVtIHsKKwlTQ1NJX0lOU1RfSU5ERVgsCisJU0NTSV9ERVZJQ0VfSU5ERVgsCisJU0NTSV9BVVRIX0lOVFJfSU5ERVgsCisJU0NTSV9JTkRFWF9UWVBFX01BWAorfSBzY3NpX2luZGV4X3Q7CisKK3N0cnVjdCBzY3NpX2luZGV4X3RhYmxlIHsKKwlzcGlubG9ja190CWxvY2s7CisJdTMyCQlzY3NpX21pYl9pbmRleFtTQ1NJX0lOREVYX1RZUEVfTUFYXTsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCiBzdHJ1Y3Qgc2VfY21kOwogCiBzdHJ1Y3QgdDEwX2FsdWEgewpAQCAtNTc4LDggKzU5Miw2IEBACiAJc3BpbmxvY2tfdAkJc3RhdHNfbG9jazsKIAkvKiBVc2VkIGZvciBQUiBTUEVDX0lfUFQ9MSBhbmQgUkVHSVNURVJfQU5EX01PVkUgKi8KIAlhdG9taWNfdAkJYWNsX3ByX3JlZl9jb3VudDsKLQkvKiBVc2VkIGZvciBNSUIgYWNjZXNzICovCi0JYXRvbWljX3QJCW1pYl9yZWZfY291bnQ7CiAJc3RydWN0IHNlX2Rldl9lbnRyeQkqZGV2aWNlX2xpc3Q7CiAJc3RydWN0IHNlX3Nlc3Npb24JKm5hY2xfc2VzczsKIAlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGc7CkBAIC01OTUsOCArNjA3LDYgQEAKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCiBzdHJ1Y3Qgc2Vfc2Vzc2lvbiB7Ci0JLyogVXNlZCBmb3IgTUlCIGFjY2VzcyAqLwotCWF0b21pY190CQltaWJfcmVmX2NvdW50OwogCXU2NAkJCXNlc3NfYmluX2lzaWQ7CiAJc3RydWN0IHNlX25vZGVfYWNsCSpzZV9ub2RlX2FjbDsKIAlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGc7CkBAIC04MDYsNyArODE2LDYgQEAKIAkvKiBWaXJ0dWFsIGlTQ1NJIGRldmljZXMgYXR0YWNoZWQuICovCiAJdTMyCQkJZGV2X2NvdW50OwogCXUzMgkJCWhiYV9pbmRleDsKLQlhdG9taWNfdAkJZGV2X21pYl9hY2Nlc3NfY291bnQ7CiAJYXRvbWljX3QJCWxvYWRfYmFsYW5jZV9xdWV1ZTsKIAlhdG9taWNfdAkJbGVmdF9xdWV1ZV9kZXB0aDsKIAkvKiBNYXhpbXVtIHF1ZXVlIGRlcHRoIHRoZSBIQkEgY2FuIGhhbmRsZS4gKi8KQEAgLTg0NSw2ICs4NTQsMTIgQEAKIAogI2RlZmluZSBTRV9MVU4oYykJCSgoc3RydWN0IHNlX2x1biAqKShjKS0+c2VfbHVuKQogCitzdHJ1Y3Qgc2NzaV9wb3J0X3N0YXRzIHsKKyAgICAgICB1NjQgICAgIGNtZF9wZHVzOworICAgICAgIHU2NCAgICAgdHhfZGF0YV9vY3RldHM7CisgICAgICAgdTY0ICAgICByeF9kYXRhX29jdGV0czsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCiBzdHJ1Y3Qgc2VfcG9ydCB7CiAJLyogUkVMQVRJVkUgVEFSR0VUIFBPUlQgSURFTlRJRkVSICovCiAJdTE2CQlzZXBfcnRwaTsKQEAgLTg2Nyw2ICs4ODIsNyBAQAogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKIHN0cnVjdCBzZV90cGdfbnAgeworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnRwZ19ucF9wYXJlbnQ7CiAJc3RydWN0IGNvbmZpZ19ncm91cAl0cGdfbnBfZ3JvdXA7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmggYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuaAppbmRleCA2NmY0NGU1Li4yNDY5NDA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuaAorKysgYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuaApAQCAtMTExLDYgKzExMSw4IEBACiAKIGV4dGVybiBpbnQgaW5pdF9zZV9nbG9iYWwodm9pZCk7CiBleHRlcm4gdm9pZCByZWxlYXNlX3NlX2dsb2JhbCh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfc2NzaV9pbmRleF90YWJsZSh2b2lkKTsKK2V4dGVybiB1MzIgc2NzaV9nZXRfbmV3X2luZGV4KHNjc2lfaW5kZXhfdCk7CiBleHRlcm4gdm9pZCB0cmFuc3BvcnRfaW5pdF9xdWV1ZV9vYmooc3RydWN0IHNlX3F1ZXVlX29iaiAqKTsKIGV4dGVybiBpbnQgdHJhbnNwb3J0X3N1YnN5c3RlbV9jaGVja19pbml0KHZvaWQpOwogZXh0ZXJuIGludCB0cmFuc3BvcnRfc3Vic3lzdGVtX3JlZ2lzdGVyKHN0cnVjdCBzZV9zdWJzeXN0ZW1fYXBpICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKaW5kZXggYWJhNDIxZC4uNzhmMThhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCkBAIC0zMSw3ICszMSw3IEBACiAJCQkJCTAgOiBibGtfcnFfc2VjdG9ycyhycSk7CiAJCV9fZW50cnktPmVycm9ycyAgICA9IHJxLT5lcnJvcnM7CiAKLQkJYmxrX2ZpbGxfcndic19ycShfX2VudHJ5LT5yd2JzLCBycSk7CisJCWJsa19maWxsX3J3YnMoX19lbnRyeS0+cndicywgcnEtPmNtZF9mbGFncywgYmxrX3JxX2J5dGVzKHJxKSk7CiAJCWJsa19kdW1wX2NtZChfX2dldF9zdHIoY21kKSwgcnEpOwogCSksCiAKQEAgLTExOCw3ICsxMTgsNyBAQAogCQlfX2VudHJ5LT5ieXRlcyAgICAgPSAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSA/CiAJCQkJCWJsa19ycV9ieXRlcyhycSkgOiAwOwogCi0JCWJsa19maWxsX3J3YnNfcnEoX19lbnRyeS0+cndicywgcnEpOworCQlibGtfZmlsbF9yd2JzKF9fZW50cnktPnJ3YnMsIHJxLT5jbWRfZmxhZ3MsIGJsa19ycV9ieXRlcyhycSkpOwogCQlibGtfZHVtcF9jbWQoX19nZXRfc3RyKGNtZCksIHJxKTsKIAkJbWVtY3B5KF9fZW50cnktPmNvbW0sIGN1cnJlbnQtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOwogCSksCkBAIC01NjMsNyArNTYzLDcgQEAKIAkJX19lbnRyeS0+bnJfc2VjdG9yCT0gYmxrX3JxX3NlY3RvcnMocnEpOwogCQlfX2VudHJ5LT5vbGRfZGV2CT0gZGV2OwogCQlfX2VudHJ5LT5vbGRfc2VjdG9yCT0gZnJvbTsKLQkJYmxrX2ZpbGxfcndic19ycShfX2VudHJ5LT5yd2JzLCBycSk7CisJCWJsa19maWxsX3J3YnMoX19lbnRyeS0+cndicywgcnEtPmNtZF9mbGFncywgYmxrX3JxX2J5dGVzKHJxKSk7CiAJKSwKIAogCVRQX3ByaW50aygiJWQsJWQgJXMgJWxsdSArICV1IDwtICglZCwlZCkgJWxsdSIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAppbmRleCBlMTY2MTBjLi4zZTY4MzY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKQEAgLTQ0NiwxNCArNDQ2LDE2IEBACiAgKgkucmVnCQkJPSBmdHJhY2VfZXZlbnRfcmVnLAogICogfTsKICAqCi0gKiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAotICogX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQotICogX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XzxjYWxsPiA9IHsKKyAqIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfPGNhbGw+ID0gewogICoJLm5hbWUJCQk9ICI8Y2FsbD4iLAogICoJLmNsYXNzCQkJPSBldmVudF9jbGFzc188dGVtcGxhdGU+LAogICoJLmV2ZW50CQkJPSAmZnRyYWNlX2V2ZW50X3R5cGVfPGNhbGw+LAogICoJLnByaW50X2ZtdAkJPSBwcmludF9mbXRfPGNhbGw+LAogICogfTsKKyAqIC8vIGl0cyBvbmx5IHNhZmUgdG8gdXNlIHBvaW50ZXJzIHdoZW4gZG9pbmcgbGlua2VyIHRyaWNrcyB0bworICogLy8gY3JlYXRlIGFuIGFycmF5LgorICogc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQKKyAqIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSAqX19ldmVudF88Y2FsbD4gPSAmZXZlbnRfPGNhbGw+OwogICoKICAqLwogCkBAIC01NzksMjggKzU4MSwyOCBAQAogI3VuZGVmIERFRklORV9FVkVOVAogI2RlZmluZSBERUZJTkVfRVZFTlQodGVtcGxhdGUsIGNhbGwsIHByb3RvLCBhcmdzKQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCi1fX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAotX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkIGV2ZW50XyMjY2FsbCA9IHsJCQlcCiAJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCiAJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3NfIyN0ZW1wbGF0ZSwJCVwKIAkuZXZlbnQuZnVuY3MJCT0gJmZ0cmFjZV9ldmVudF90eXBlX2Z1bmNzXyMjdGVtcGxhdGUsCVwKIAkucHJpbnRfZm10CQk9IHByaW50X2ZtdF8jI3RlbXBsYXRlLAkJCVwKLX07Cit9OwkJCQkJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgKl9fZXZlbnRfIyNjYWxsID0gJmV2ZW50XyMjY2FsbAogCiAjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MsIHByaW50KQkJXAogCQkJCQkJCQkJXAogc3RhdGljIGNvbnN0IGNoYXIgcHJpbnRfZm10XyMjY2FsbFtdID0gcHJpbnQ7CQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCi1fX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAotX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkIGV2ZW50XyMjY2FsbCA9IHsJCQlcCiAJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCiAJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3NfIyN0ZW1wbGF0ZSwJCVwKIAkuZXZlbnQuZnVuY3MJCT0gJmZ0cmFjZV9ldmVudF90eXBlX2Z1bmNzXyMjY2FsbCwJXAogCS5wcmludF9mbXQJCT0gcHJpbnRfZm10XyMjY2FsbCwJCQlcCi19Cit9OwkJCQkJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgKl9fZXZlbnRfIyNjYWxsID0gJmV2ZW50XyMjY2FsbAogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIApkaWZmIC0tZ2l0IGEvaW5pdC9jYWxpYnJhdGUuYyBiL2luaXQvY2FsaWJyYXRlLmMKaW5kZXggNmViNDhlNS4uMjRmZTAyMiAxMDA2NDQKLS0tIGEvaW5pdC9jYWxpYnJhdGUuYworKysgYi9pbml0L2NhbGlicmF0ZS5jCkBAIC02Niw3ICs2Niw3IEBACiAJCXByZV9zdGFydCA9IDA7CiAJCXJlYWRfY3VycmVudF90aW1lcigmc3RhcnQpOwogCQlzdGFydF9qaWZmaWVzID0gamlmZmllczsKLQkJd2hpbGUgKGppZmZpZXMgPD0gKHN0YXJ0X2ppZmZpZXMgKyAxKSkgeworCQl3aGlsZSAodGltZV9iZWZvcmVfZXEoamlmZmllcywgc3RhcnRfamlmZmllcyArIDEpKSB7CiAJCQlwcmVfc3RhcnQgPSBzdGFydDsKIAkJCXJlYWRfY3VycmVudF90aW1lcigmc3RhcnQpOwogCQl9CkBAIC03NCw4ICs3NCw4IEBACiAKIAkJcHJlX2VuZCA9IDA7CiAJCWVuZCA9IHBvc3Rfc3RhcnQ7Ci0JCXdoaWxlIChqaWZmaWVzIDw9Ci0JCSAgICAgICAoc3RhcnRfamlmZmllcyArIDEgKyBERUxBWV9DQUxJQlJBVElPTl9USUNLUykpIHsKKwkJd2hpbGUgKHRpbWVfYmVmb3JlX2VxKGppZmZpZXMsIHN0YXJ0X2ppZmZpZXMgKyAxICsKKwkJCQkJICAgICAgIERFTEFZX0NBTElCUkFUSU9OX1RJQ0tTKSkgewogCQkJcHJlX2VuZCA9IGVuZDsKIAkJCXJlYWRfY3VycmVudF90aW1lcigmZW5kKTsKIAkJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2NhcGFiaWxpdHkuYyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKaW5kZXggMmYwNTMwMy4uOWU5Mzg1ZiAxMDA2NDQKLS0tIGEva2VybmVsL2NhcGFiaWxpdHkuYworKysgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCkBAIC0zMDYsNyArMzA2LDcgQEAKIAkJQlVHKCk7CiAJfQogCi0JaWYgKHNlY3VyaXR5X2NhcGFibGUoY2FwKSA9PSAwKSB7CisJaWYgKHNlY3VyaXR5X2NhcGFibGUoY3VycmVudF9jcmVkKCksIGNhcCkgPT0gMCkgewogCQljdXJyZW50LT5mbGFncyB8PSBQRl9TVVBFUlBSSVY7CiAJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHVzZXQuYyBiL2tlcm5lbC9jcHVzZXQuYwppbmRleCA0MzQ5OTM1Li5lOTJlOTgxIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1c2V0LmMKKysrIGIva2VybmVsL2NwdXNldC5jCkBAIC0xNTc1LDggKzE1NzUsMTAgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAl0cmlhbGNzID0gYWxsb2NfdHJpYWxfY3B1c2V0KGNzKTsKLQlpZiAoIXRyaWFsY3MpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghdHJpYWxjcykgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAKIAlzd2l0Y2ggKGNmdC0+cHJpdmF0ZSkgewogCWNhc2UgRklMRV9DUFVMSVNUOgpAQCAtMTU5MSw2ICsxNTkzLDcgQEAKIAl9CiAKIAlmcmVlX3RyaWFsX2NwdXNldCh0cmlhbGNzKTsKK291dDoKIAljZ3JvdXBfdW5sb2NrKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jcmVkLmMgYi9rZXJuZWwvY3JlZC5jCmluZGV4IDZhMWFhMDAuLjNhOWQ2ZGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcmVkLmMKKysrIGIva2VybmVsL2NyZWQuYwpAQCAtMjUyLDEzICsyNTIsMTMgQEAKICNlbmRpZgogCiAJYXRvbWljX3NldCgmbmV3LT51c2FnZSwgMSk7CisjaWZkZWYgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTCisJbmV3LT5tYWdpYyA9IENSRURfTUFHSUM7CisjZW5kaWYKIAogCWlmIChzZWN1cml0eV9jcmVkX2FsbG9jX2JsYW5rKG5ldywgR0ZQX0tFUk5FTCkgPCAwKQogCQlnb3RvIGVycm9yOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTCi0JbmV3LT5tYWdpYyA9IENSRURfTUFHSUM7Ci0jZW5kaWYKIAlyZXR1cm4gbmV3OwogCiBlcnJvcjoKQEAgLTY1Nyw2ICs2NTcsOCBAQAogCXZhbGlkYXRlX2NyZWRzKG9sZCk7CiAKIAkqbmV3ID0gKm9sZDsKKwlhdG9taWNfc2V0KCZuZXctPnVzYWdlLCAxKTsKKwlzZXRfY3JlZF9zdWJzY3JpYmVycyhuZXcsIDApOwogCWdldF91aWQobmV3LT51c2VyKTsKIAlnZXRfZ3JvdXBfaW5mbyhuZXctPmdyb3VwX2luZm8pOwogCkBAIC02NzQsOCArNjc2LDYgQEAKIAlpZiAoc2VjdXJpdHlfcHJlcGFyZV9jcmVkcyhuZXcsIG9sZCwgR0ZQX0tFUk5FTCkgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JYXRvbWljX3NldCgmbmV3LT51c2FnZSwgMSk7Ci0Jc2V0X2NyZWRfc3Vic2NyaWJlcnMobmV3LCAwKTsKIAlwdXRfY3JlZChvbGQpOwogCXZhbGlkYXRlX2NyZWRzKG5ldyk7CiAJcmV0dXJuIG5ldzsKQEAgLTc0OCw3ICs3NDgsMTEgQEAKIAlpZiAoY3JlZC0+bWFnaWMgIT0gQ1JFRF9NQUdJQykKIAkJcmV0dXJuIHRydWU7CiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgKLQlpZiAoc2VsaW51eF9pc19lbmFibGVkKCkpIHsKKwkvKgorCSAqIGNyZWQtPnNlY3VyaXR5ID09IE5VTEwgaWYgc2VjdXJpdHlfY3JlZF9hbGxvY19ibGFuaygpIG9yCisJICogc2VjdXJpdHlfcHJlcGFyZV9jcmVkcygpIHJldHVybmVkIGFuIGVycm9yLgorCSAqLworCWlmIChzZWxpbnV4X2lzX2VuYWJsZWQoKSAmJiBjcmVkLT5zZWN1cml0eSkgewogCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGNyZWQtPnNlY3VyaXR5IDwgUEFHRV9TSVpFKQogCQkJcmV0dXJuIHRydWU7CiAJCWlmICgoKih1MzIgKiljcmVkLT5zZWN1cml0eSAmIDB4ZmZmZmZmMDApID09CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2ludGVybmFscy5oIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaAppbmRleCA0NTcxYWU3Li45OWMzYmM4IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2ludGVybmFscy5oCisrKyBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKQEAgLTMsNiArMywxMiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaXJxZGVzYy5oPgogCisjaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKKyMgZGVmaW5lIElSUV9CSVRNQVBfQklUUwkoTlJfSVJRUyArIDgxOTYpCisjZWxzZQorIyBkZWZpbmUgSVJRX0JJVE1BUF9CSVRTCU5SX0lSUVMKKyNlbmRpZgorCiBleHRlcm4gaW50IG5vaXJxZGVidWc7CiAKICNkZWZpbmUgaXJxX2RhdGFfdG9fZGVzYyhkYXRhKQljb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGlycV9kZXNjLCBpcnFfZGF0YSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaXJxZGVzYy5jIGIva2VybmVsL2lycS9pcnFkZXNjLmMKaW5kZXggMjgyZjIwMi4uMjAzOWJlYSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9pcnFkZXNjLmMKKysrIGIva2VybmVsL2lycS9pcnFkZXNjLmMKQEAgLTk0LDcgKzk0LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKG5yX2lycXMpOwogCiBzdGF0aWMgREVGSU5FX01VVEVYKHNwYXJzZV9pcnFfbG9jayk7Ci1zdGF0aWMgREVDTEFSRV9CSVRNQVAoYWxsb2NhdGVkX2lycXMsIE5SX0lSUVMpOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGFsbG9jYXRlZF9pcnFzLCBJUlFfQklUTUFQX0JJVFMpOwogCiAjaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKIApAQCAtMjE3LDYgKzIxNywxNSBAQAogCWluaXRjbnQgPSBhcmNoX3Byb2JlX25yX2lycXMoKTsKIAlwcmludGsoS0VSTl9JTkZPICJOUl9JUlFTOiVkIG5yX2lycXM6JWQgJWRcbiIsIE5SX0lSUVMsIG5yX2lycXMsIGluaXRjbnQpOwogCisJaWYgKFdBUk5fT04obnJfaXJxcyA+IElSUV9CSVRNQVBfQklUUykpCisJCW5yX2lycXMgPSBJUlFfQklUTUFQX0JJVFM7CisKKwlpZiAoV0FSTl9PTihpbml0Y250ID4gSVJRX0JJVE1BUF9CSVRTKSkKKwkJaW5pdGNudCA9IElSUV9CSVRNQVBfQklUUzsKKworCWlmIChpbml0Y250ID4gbnJfaXJxcykKKwkJbnJfaXJxcyA9IGluaXRjbnQ7CisKIAlmb3IgKGkgPSAwOyBpIDwgaW5pdGNudDsgaSsrKSB7CiAJCWRlc2MgPSBhbGxvY19kZXNjKGksIG5vZGUpOwogCQlzZXRfYml0KGksIGFsbG9jYXRlZF9pcnFzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDBjYWE1OWYuLjkwMzNjMWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAKIAlpZiAocmV0dmFsKQogCQlrZnJlZShhY3Rpb24pOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NISVJRCisjaWZkZWYgQ09ORklHX0RFQlVHX1NISVJRX0ZJWE1FCiAJaWYgKCFyZXR2YWwgJiYgKGlycWZsYWdzICYgSVJRRl9TSEFSRUQpKSB7CiAJCS8qCiAJCSAqIEl0J3MgYSBzaGFyZWQgSVJRIC0tIHRoZSBkcml2ZXIgb3VnaHQgdG8gYmUgcHJlcGFyZWQgZm9yIGl0CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jIGIva2VybmVsL2lycS9taWdyYXRpb24uYwppbmRleCAxZDI1NDE5Li40NDFmZDYyIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCisrKyBiL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKQEAgLTU2LDYgKzU2LDcgQEAKIHZvaWQgbW92ZV9uYXRpdmVfaXJxKGludCBpcnEpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlib29sIG1hc2tlZDsKIAogCWlmIChsaWtlbHkoIShkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSkpCiAJCXJldHVybjsKQEAgLTYzLDggKzY0LDE1IEBACiAJaWYgKHVubGlrZWx5KGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpCiAJCXJldHVybjsKIAotCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CisJLyoKKwkgKiBCZSBjYXJlZnVsIHZzLiBhbHJlYWR5IG1hc2tlZCBpbnRlcnJ1cHRzLiBJZiB0aGlzIGlzIGEKKwkgKiB0aHJlYWRlZCBpbnRlcnJ1cHQgd2l0aCBPTkVTSE9UIHNldCwgd2UgY2FuIGVuZCB1cCB3aXRoIGFuCisJICogaW50ZXJydXB0IHN0b3JtLgorCSAqLworCW1hc2tlZCA9IGRlc2MtPnN0YXR1cyAmIElSUV9NQVNLRUQ7CisJaWYgKCFtYXNrZWQpCisJCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CiAJbW92ZV9tYXNrZWRfaXJxKGlycSk7Ci0JZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX3VubWFzaygmZGVzYy0+aXJxX2RhdGEpOworCWlmICghbWFza2VkKQorCQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfdW5tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcmVzZW5kLmMgYi9rZXJuZWwvaXJxL3Jlc2VuZC5jCmluZGV4IDg5MTExNWEuLmRjNDkzNTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvcmVzZW5kLmMKKysrIGIva2VybmVsL2lycS9yZXNlbmQuYwpAQCAtMjMsNyArMjMsNyBAQAogI2lmZGVmIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQKIAogLyogQml0bWFwIHRvIGhhbmRsZSBzb2Z0d2FyZSByZXNlbmQgb2YgaW50ZXJydXB0czogKi8KLXN0YXRpYyBERUNMQVJFX0JJVE1BUChpcnFzX3Jlc2VuZCwgTlJfSVJRUyk7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAoaXJxc19yZXNlbmQsIElSUV9CSVRNQVBfQklUUyk7CiAKIC8qCiAgKiBSdW4gc29mdHdhcmUgcmVzZW5kcyBvZiBJUlEncwpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDM0ZTAwYjcuLmVmYTI5MGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTI0NjAsOSArMjQ2MCw5IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUwotCW1vZC0+dHJhY2Vwb2ludHMgPSBzZWN0aW9uX29ianMoaW5mbywgIl9fdHJhY2Vwb2ludHMiLAotCQkJCQlzaXplb2YoKm1vZC0+dHJhY2Vwb2ludHMpLAotCQkJCQkmbW9kLT5udW1fdHJhY2Vwb2ludHMpOworCW1vZC0+dHJhY2Vwb2ludHNfcHRycyA9IHNlY3Rpb25fb2JqcyhpbmZvLCAiX190cmFjZXBvaW50c19wdHJzIiwKKwkJCQkJICAgICBzaXplb2YoKm1vZC0+dHJhY2Vwb2ludHNfcHRycyksCisJCQkJCSAgICAgJm1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKICNlbmRpZgogI2lmZGVmIEhBVkVfSlVNUF9MQUJFTAogCW1vZC0+anVtcF9lbnRyaWVzID0gc2VjdGlvbl9vYmpzKGluZm8sICJfX2p1bXBfdGFibGUiLApAQCAtMzM5Myw3ICszMzkzLDcgQEAKIAkJICAgc3RydWN0IG1vZHZlcnNpb25faW5mbyAqdmVyLAogCQkgICBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCwKIAkJICAgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmtzLAotCQkgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHApCisJCSAgIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRwKQogewogfQogRVhQT1JUX1NZTUJPTChtb2R1bGVfbGF5b3V0KTsKQEAgLTM0MDcsOCArMzQwNyw4IEBACiAJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJm1vZHVsZXMsIGxpc3QpCiAJCWlmICghbW9kLT50YWludHMpCi0JCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzLAotCQkJCW1vZC0+dHJhY2Vwb2ludHMgKyBtb2QtPm51bV90cmFjZXBvaW50cyk7CisJCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzX3B0cnMsCisJCQkJbW9kLT50cmFjZXBvaW50c19wdHJzICsgbW9kLT5udW1fdHJhY2Vwb2ludHMpOwogCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKIH0KIApAQCAtMzQzMiw4ICszNDMyLDggQEAKIAkJCWVsc2UgaWYgKGl0ZXJfbW9kID4gaXRlci0+bW9kdWxlKQogCQkJCWl0ZXItPnRyYWNlcG9pbnQgPSBOVUxMOwogCQkJZm91bmQgPSB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKCZpdGVyLT50cmFjZXBvaW50LAotCQkJCWl0ZXJfbW9kLT50cmFjZXBvaW50cywKLQkJCQlpdGVyX21vZC0+dHJhY2Vwb2ludHMKKwkJCQlpdGVyX21vZC0+dHJhY2Vwb2ludHNfcHRycywKKwkJCQlpdGVyX21vZC0+dHJhY2Vwb2ludHNfcHRycwogCQkJCQkrIGl0ZXJfbW9kLT5udW1fdHJhY2Vwb2ludHMpOwogCQkJaWYgKGZvdW5kKSB7CiAJCQkJaXRlci0+bW9kdWxlID0gaXRlcl9tb2Q7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFyYW1zLmMgYi9rZXJuZWwvcGFyYW1zLmMKaW5kZXggMDgxMDdkMS4uMGRhMTQxMSAxMDA2NDQKLS0tIGEva2VybmVsL3BhcmFtcy5jCisrKyBiL2tlcm5lbC9wYXJhbXMuYwpAQCAtNzE5LDkgKzcxOSw3IEBACiAJCQlwYXJhbXNbaV0ub3BzLT5mcmVlKHBhcmFtc1tpXS5hcmcpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQga2VybmVsX2FkZF9zeXNmc19wYXJhbShjb25zdCBjaGFyICpuYW1lLAotCQkJCQkgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwKLQkJCQkJICB1bnNpZ25lZCBpbnQgbmFtZV9za2lwKQorc3RhdGljIHN0cnVjdCBtb2R1bGVfa29iamVjdCAqIF9faW5pdCBsb2NhdGVfbW9kdWxlX2tvYmplY3QoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgbW9kdWxlX2tvYmplY3QgKm1rOwogCXN0cnVjdCBrb2JqZWN0ICprb2JqOwpAQCAtNzI5LDEwICs3MjcsNyBAQAogCiAJa29iaiA9IGtzZXRfZmluZF9vYmoobW9kdWxlX2tzZXQsIG5hbWUpOwogCWlmIChrb2JqKSB7Ci0JCS8qIFdlIGFscmVhZHkgaGF2ZSBvbmUuICBSZW1vdmUgcGFyYW1zIHNvIHdlIGNhbiBhZGQgbW9yZS4gKi8KIAkJbWsgPSB0b19tb2R1bGVfa29iamVjdChrb2JqKTsKLQkJLyogV2UgbmVlZCB0byByZW1vdmUgaXQgYmVmb3JlIGFkZGluZyBwYXJhbWV0ZXJzLiAqLwotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJm1rLT5rb2JqLCAmbWstPm1wLT5ncnApOwogCX0gZWxzZSB7CiAJCW1rID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1vZHVsZV9rb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CiAJCUJVR19PTighbWspOwpAQCAtNzQzLDE1ICs3MzgsMzYgQEAKIAkJCQkJICAgIiVzIiwgbmFtZSk7CiAJCWlmIChlcnIpIHsKIAkJCWtvYmplY3RfcHV0KCZtay0+a29iaik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIk1vZHVsZSAnJXMnIGZhaWxlZCBhZGQgdG8gc3lzZnMsICIKLQkJCSAgICAgICAiZXJyb3IgbnVtYmVyICVkXG4iLCBuYW1lLCBlcnIpOwotCQkJcHJpbnRrKEtFUk5fRVJSCSJUaGUgc3lzdGVtIHdpbGwgYmUgdW5zdGFibGUgbm93LlxuIik7Ci0JCQlyZXR1cm47CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiTW9kdWxlICclcycgZmFpbGVkIGFkZCB0byBzeXNmcywgZXJyb3IgbnVtYmVyICVkXG4iLAorCQkJCW5hbWUsIGVycik7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiVGhlIHN5c3RlbSB3aWxsIGJlIHVuc3RhYmxlIG5vdy5cbiIpOworCQkJcmV0dXJuIE5VTEw7CiAJCX0KLQkJLyogU28gdGhhdCBleGl0IHBhdGggaXMgZXZlbi4gKi8KKworCQkvKiBTbyB0aGF0IHdlIGhvbGQgcmVmZXJlbmNlIGluIGJvdGggY2FzZXMuICovCiAJCWtvYmplY3RfZ2V0KCZtay0+a29iaik7CiAJfQogCisJcmV0dXJuIG1rOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQga2VybmVsX2FkZF9zeXNmc19wYXJhbShjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwKKwkJCQkJICB1bnNpZ25lZCBpbnQgbmFtZV9za2lwKQoreworCXN0cnVjdCBtb2R1bGVfa29iamVjdCAqbWs7CisJaW50IGVycjsKKworCW1rID0gbG9jYXRlX21vZHVsZV9rb2JqZWN0KG5hbWUpOworCWlmICghbWspCisJCXJldHVybjsKKworCS8qIFdlIG5lZWQgdG8gcmVtb3ZlIG9sZCBwYXJhbWV0ZXJzIGJlZm9yZSBhZGRpbmcgbW9yZS4gKi8KKwlpZiAobWstPm1wKQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJm1rLT5rb2JqLCAmbWstPm1wLT5ncnApOworCiAJLyogVGhlc2Ugc2hvdWxkIG5vdCBmYWlsIGF0IGJvb3QuICovCiAJZXJyID0gYWRkX3N5c2ZzX3BhcmFtKG1rLCBrcGFyYW0sIGtwYXJhbS0+bmFtZSArIG5hbWVfc2tpcCk7CiAJQlVHX09OKGVycik7CkBAIC03OTYsNiArODEyLDMyIEBACiAJfQogfQogCitzc2l6ZV90IF9fbW9kdmVyX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbWF0dHIsCisJCQkgICAgICBzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbW9kdWxlX3ZlcnNpb25fYXR0cmlidXRlICp2YXR0ciA9CisJCWNvbnRhaW5lcl9vZihtYXR0ciwgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSwgbWF0dHIpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHZhdHRyLT52ZXJzaW9uKTsKK30KKworZXh0ZXJuIHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgX19zdGFydF9fX21vZHZlcltdLCBfX3N0b3BfX19tb2R2ZXJbXTsKKworc3RhdGljIHZvaWQgX19pbml0IHZlcnNpb25fc3lzZnNfYnVpbHRpbih2b2lkKQoreworCWNvbnN0IHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgKnZhdHRyOworCXN0cnVjdCBtb2R1bGVfa29iamVjdCAqbWs7CisJaW50IGVycjsKKworCWZvciAodmF0dHIgPSBfX3N0YXJ0X19fbW9kdmVyOyB2YXR0ciA8IF9fc3RvcF9fX21vZHZlcjsgdmF0dHIrKykgeworCQltayA9IGxvY2F0ZV9tb2R1bGVfa29iamVjdCh2YXR0ci0+bW9kdWxlX25hbWUpOworCQlpZiAobWspIHsKKwkJCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZtay0+a29iaiwgJnZhdHRyLT5tYXR0ci5hdHRyKTsKKwkJCWtvYmplY3RfdWV2ZW50KCZtay0+a29iaiwgS09CSl9BREQpOworCQkJa29iamVjdF9wdXQoJm1rLT5rb2JqKTsKKwkJfQorCX0KK30KIAogLyogbW9kdWxlLXJlbGF0ZWQgc3lzZnMgc3R1ZmYgKi8KIApAQCAtODc1LDYgKzkxNyw3IEBACiAJfQogCW1vZHVsZV9zeXNmc19pbml0aWFsaXplZCA9IDE7CiAKKwl2ZXJzaW9uX3N5c2ZzX2J1aWx0aW4oKTsKIAlwYXJhbV9zeXNmc19idWlsdGluKCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDg0NTIyYzcuLjY1NjIyMmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtNzgyLDYgKzc4MiwxMCBAQAogCXJhd19zcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7CiB9CiAKKyNkZWZpbmUgTUFYX0lOVEVSUlVQVFMgKH4wVUxMKQorCitzdGF0aWMgdm9pZCBwZXJmX2xvZ190aHJvdHRsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBlbmFibGUpOworCiBzdGF0aWMgaW50CiBldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiAJCSBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LApAQCAtNzk0LDYgKzc5OCwxNyBAQAogCiAJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkU7CiAJZXZlbnQtPm9uY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyoKKwkgKiBVbnRocm90dGxlIGV2ZW50cywgc2luY2Ugd2Ugc2NoZWR1bGVkIHdlIG1pZ2h0IGhhdmUgbWlzc2VkIHNldmVyYWwKKwkgKiB0aWNrcyBhbHJlYWR5LCBhbHNvIGZvciBhIGhlYXZpbHkgc2NoZWR1bGluZyB0YXNrIHRoZXJlIGlzIGxpdHRsZQorCSAqIGd1YXJhbnRlZSBpdCdsbCBnZXQgYSB0aWNrIGluIGEgdGltZWx5IG1hbm5lci4KKwkgKi8KKwlpZiAodW5saWtlbHkoZXZlbnQtPmh3LmludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMpKSB7CisJCXBlcmZfbG9nX3Rocm90dGxlKGV2ZW50LCAxKTsKKwkJZXZlbnQtPmh3LmludGVycnVwdHMgPSAwOworCX0KKwogCS8qCiAJICogVGhlIG5ldyBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlIHR1cm4gaXQgb24gaW4gdGhlIGhhcmR3YXJlOgogCSAqLwpAQCAtMTU5NiwxMCArMTYxMSw2IEBACiAJfQogfQogCi0jZGVmaW5lIE1BWF9JTlRFUlJVUFRTICh+MFVMTCkKLQotc3RhdGljIHZvaWQgcGVyZl9sb2dfdGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZW5hYmxlKTsKLQogc3RhdGljIHU2NCBwZXJmX2NhbGN1bGF0ZV9wZXJpb2Qoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgbnNlYywgdTY0IGNvdW50KQogewogCXU2NCBmcmVxdWVuY3kgPSBldmVudC0+YXR0ci5zYW1wbGVfZnJlcTsKQEAgLTE5MDEsMTEgKzE5MTIsMTIgQEAKIAkJcmV0dXJuOwogCiAJcmF3X3NwaW5fbG9jaygmY3R4LT5sb2NrKTsKLQl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7CisJaWYgKGN0eC0+aXNfYWN0aXZlKQorCQl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7CiAJdXBkYXRlX2V2ZW50X3RpbWVzKGV2ZW50KTsKKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQorCQlldmVudC0+cG11LT5yZWFkKGV2ZW50KTsKIAlyYXdfc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Ci0KLQlldmVudC0+cG11LT5yZWFkKGV2ZW50KTsKIH0KIAogc3RhdGljIGlubGluZSB1NjQgcGVyZl9ldmVudF9jb3VudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCkBAIC0xOTk5LDggKzIwMTEsNyBAQAogCSAqIGFjY2Vzc2VkIGZyb20gTk1JLiBVc2UgYSB0ZW1wb3JhcnkgbWFudWFsIHBlciBjcHUgYWxsb2NhdGlvbgogCSAqIHVudGlsIHRoYXQgZ2V0cyBzb3J0ZWQgb3V0LgogCSAqLwotCXNpemUgPSBzaXplb2YoKmVudHJpZXMpICsgc2l6ZW9mKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqKSAqCi0JCW51bV9wb3NzaWJsZV9jcHVzKCk7CisJc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBjYWxsY2hhaW5fY3B1c19lbnRyaWVzLCBjcHVfZW50cmllc1tucl9jcHVfaWRzXSk7CiAKIAllbnRyaWVzID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVudHJpZXMpCkBAIC0yMjAxLDEzICsyMjEyLDYgQEAKIAlpZiAoIXRhc2spCiAJCXJldHVybiBFUlJfUFRSKC1FU1JDSCk7CiAKLQkvKgotCSAqIENhbid0IGF0dGFjaCBldmVudHMgdG8gYSBkeWluZyB0YXNrLgotCSAqLwotCWVyciA9IC1FU1JDSDsKLQlpZiAodGFzay0+ZmxhZ3MgJiBQRl9FWElUSU5HKQotCQlnb3RvIGVycm91dDsKLQogCS8qIFJldXNlIHB0cmFjZSBwZXJtaXNzaW9uIGNoZWNrcyBmb3Igbm93LiAqLwogCWVyciA9IC1FQUNDRVM7CiAJaWYgKCFwdHJhY2VfbWF5X2FjY2Vzcyh0YXNrLCBQVFJBQ0VfTU9ERV9SRUFEKSkKQEAgLTIyNjgsMTQgKzIyNzIsMjcgQEAKIAogCQlnZXRfY3R4KGN0eCk7CiAKLQkJaWYgKGNtcHhjaGcoJnRhc2stPnBlcmZfZXZlbnRfY3R4cFtjdHhuXSwgTlVMTCwgY3R4KSkgewotCQkJLyoKLQkJCSAqIFdlIHJhY2VkIHdpdGggc29tZSBvdGhlciB0YXNrOyB1c2UKLQkJCSAqIHRoZSBjb250ZXh0IHRoZXkgc2V0LgotCQkJICovCisJCWVyciA9IDA7CisJCW11dGV4X2xvY2soJnRhc2stPnBlcmZfZXZlbnRfbXV0ZXgpOworCQkvKgorCQkgKiBJZiBpdCBoYXMgYWxyZWFkeSBwYXNzZWQgcGVyZl9ldmVudF9leGl0X3Rhc2soKS4KKwkJICogd2UgbXVzdCBzZWUgUEZfRVhJVElORywgaXQgdGFrZXMgdGhpcyBtdXRleCB0b28uCisJCSAqLworCQlpZiAodGFzay0+ZmxhZ3MgJiBQRl9FWElUSU5HKQorCQkJZXJyID0gLUVTUkNIOworCQllbHNlIGlmICh0YXNrLT5wZXJmX2V2ZW50X2N0eHBbY3R4bl0pCisJCQllcnIgPSAtRUFHQUlOOworCQllbHNlCisJCQlyY3VfYXNzaWduX3BvaW50ZXIodGFzay0+cGVyZl9ldmVudF9jdHhwW2N0eG5dLCBjdHgpOworCQltdXRleF91bmxvY2soJnRhc2stPnBlcmZfZXZlbnRfbXV0ZXgpOworCisJCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiAJCQlrZnJlZShjdHgpOwotCQkJZ290byByZXRyeTsKKworCQkJaWYgKGVyciA9PSAtRUFHQUlOKQorCQkJCWdvdG8gcmV0cnk7CisJCQlnb3RvIGVycm91dDsKIAkJfQogCX0KIApAQCAtNTM3NCw2ICs1MzkxLDggQEAKIAlnb3RvIG91dDsKIH0KIAorc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBjcHVjdHhfbXV0ZXg7CisKIGludCBwZXJmX3BtdV9yZWdpc3RlcihzdHJ1Y3QgcG11ICpwbXUsIGNoYXIgKm5hbWUsIGludCB0eXBlKQogewogCWludCBjcHUsIHJldDsKQEAgLTU0MjIsNiArNTQ0MSw3IEBACiAKIAkJY3B1Y3R4ID0gcGVyX2NwdV9wdHIocG11LT5wbXVfY3B1X2NvbnRleHQsIGNwdSk7CiAJCV9fcGVyZl9ldmVudF9pbml0X2NvbnRleHQoJmNwdWN0eC0+Y3R4KTsKKwkJbG9ja2RlcF9zZXRfY2xhc3MoJmNwdWN0eC0+Y3R4Lm11dGV4LCAmY3B1Y3R4X211dGV4KTsKIAkJY3B1Y3R4LT5jdHgudHlwZSA9IGNwdV9jb250ZXh0OwogCQljcHVjdHgtPmN0eC5wbXUgPSBwbXU7CiAJCWNwdWN0eC0+amlmZmllc19pbnRlcnZhbCA9IDE7CkBAIC02MTI3LDcgKzYxNDcsNyBAQAogCSAqIHNjaGVkdWxlZCwgc28gd2UgYXJlIG5vdyBzYWZlIGZyb20gcmVzY2hlZHVsaW5nIGNoYW5naW5nCiAJICogb3VyIGNvbnRleHQuCiAJICovCi0JY2hpbGRfY3R4ID0gY2hpbGQtPnBlcmZfZXZlbnRfY3R4cFtjdHhuXTsKKwljaGlsZF9jdHggPSByY3VfZGVyZWZlcmVuY2VfcmF3KGNoaWxkLT5wZXJmX2V2ZW50X2N0eHBbY3R4bl0pOwogCXRhc2tfY3R4X3NjaGVkX291dChjaGlsZF9jdHgsIEVWRU5UX0FMTCk7CiAKIAkvKgpAQCAtNjQ0MCwxMSArNjQ2MCw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCWNoaWxkLT5wZXJmX2V2ZW50X2N0eHBbY3R4bl0gPSBOVUxMOwotCi0JbXV0ZXhfaW5pdCgmY2hpbGQtPnBlcmZfZXZlbnRfbXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjaGlsZC0+cGVyZl9ldmVudF9saXN0KTsKLQogCWlmIChsaWtlbHkoIXBhcmVudC0+cGVyZl9ldmVudF9jdHhwW2N0eG5dKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTY1MzMsNiArNjU0OCwxMCBAQAogewogCWludCBjdHhuLCByZXQ7CiAKKwltZW1zZXQoY2hpbGQtPnBlcmZfZXZlbnRfY3R4cCwgMCwgc2l6ZW9mKGNoaWxkLT5wZXJmX2V2ZW50X2N0eHApKTsKKwltdXRleF9pbml0KCZjaGlsZC0+cGVyZl9ldmVudF9tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNoaWxkLT5wZXJmX2V2ZW50X2xpc3QpOworCiAJZm9yX2VhY2hfdGFza19jb250ZXh0X25yKGN0eG4pIHsKIAkJcmV0ID0gcGVyZl9ldmVudF9pbml0X2NvbnRleHQoY2hpbGQsIGN0eG4pOwogCQlpZiAocmV0KQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMKaW5kZXggN2I1ZGI2YS4uNzAxODUzMCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYworKysgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCkBAIC0zMjYsNyArMzI2LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgcG1fc3RhcnRfd29ya3F1ZXVlKHZvaWQpCiB7Ci0JcG1fd3EgPSBhbGxvY193b3JrcXVldWUoInBtIiwgV1FfRlJFRVpFQUJMRSwgMCk7CisJcG1fd3EgPSBhbGxvY193b3JrcXVldWUoInBtIiwgV1FfRlJFRVpBQkxFLCAwKTsKIAogCXJldHVybiBwbV93cSA/IDAgOiAtRU5PTUVNOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKaW5kZXggZDZkMmExMC4uMGNmM2EyNyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYworKysgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KICNkZWZpbmUgVElNRU9VVAkoMjAgKiBIWikKIAotc3RhdGljIGlubGluZSBpbnQgZnJlZXplYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKQorc3RhdGljIGlubGluZSBpbnQgZnJlZXphYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApCiB7CiAJaWYgKChwID09IGN1cnJlbnQpIHx8CiAJICAgIChwLT5mbGFncyAmIFBGX05PRlJFRVpFKSB8fApAQCAtNTMsNyArNTMsNyBAQAogCQl0b2RvID0gMDsKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJZG9fZWFjaF90aHJlYWQoZywgcCkgewotCQkJaWYgKGZyb3plbihwKSB8fCAhZnJlZXplYWJsZShwKSkKKwkJCWlmIChmcm96ZW4ocCkgfHwgIWZyZWV6YWJsZShwKSkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKCFmcmVlemVfdGFzayhwLCBzaWdfb25seSkpCkBAIC0xNjcsNyArMTY3LDcgQEAKIAogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJZG9fZWFjaF90aHJlYWQoZywgcCkgewotCQlpZiAoIWZyZWV6ZWFibGUocCkpCisJCWlmICghZnJlZXphYmxlKHApKQogCQkJY29udGludWU7CiAKIAkJaWYgKG5vc2lnX29ubHkgJiYgc2hvdWxkX3NlbmRfc2lnbmFsKHApKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwppbmRleCAwZGFjNzVlLi42NGRiNjQ4IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYworKysgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwpAQCAtMTUxOSwxMSArMTUxOSw4IEBACiBzd3N1c3BfYWxsb2Moc3RydWN0IG1lbW9yeV9iaXRtYXAgKm9yaWdfYm0sIHN0cnVjdCBtZW1vcnlfYml0bWFwICpjb3B5X2JtLAogCQl1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHVuc2lnbmVkIGludCBucl9oaWdobWVtKQogewotCWludCBlcnJvciA9IDA7Ci0KIAlpZiAobnJfaGlnaG1lbSA+IDApIHsKLQkJZXJyb3IgPSBnZXRfaGlnaG1lbV9idWZmZXIoUEdfQU5ZKTsKLQkJaWYgKGVycm9yKQorCQlpZiAoZ2V0X2hpZ2htZW1fYnVmZmVyKFBHX0FOWSkpCiAJCQlnb3RvIGVycl9vdXQ7CiAJCWlmIChucl9oaWdobWVtID4gYWxsb2NfaGlnaG1lbSkgewogCQkJbnJfaGlnaG1lbSAtPSBhbGxvY19oaWdobWVtOwpAQCAtMTU0Niw3ICsxNTQzLDcgQEAKIAogIGVycl9vdXQ6CiAJc3dzdXNwX2ZyZWUoKTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIGFzbWxpbmthZ2UgaW50IHN3c3VzcF9zYXZlKHZvaWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggNTNkOWE5ZS4uMzYyMzE1MiAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtOTcsNyArOTcsNyBAQAogLyoKICAqIGxvZ2J1Zl9sb2NrIHByb3RlY3RzIGxvZ19idWYsIGxvZ19zdGFydCwgbG9nX2VuZCwgY29uX3N0YXJ0IGFuZCBsb2dnZWRfY2hhcnMKICAqIEl0IGlzIGFsc28gdXNlZCBpbiBpbnRlcmVzdGluZyB3YXlzIHRvIHByb3ZpZGUgaW50ZXJsb2NraW5nIGluCi0gKiByZWxlYXNlX2NvbnNvbGVfc2VtKCkuCisgKiBjb25zb2xlX3VubG9jaygpOy4KICAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhsb2didWZfbG9jayk7CiAKQEAgLTI2MiwyNSArMjYyLDQ3IEBACiBpbnQgZG1lc2dfcmVzdHJpY3Q7CiAjZW5kaWYKIAorc3RhdGljIGludCBzeXNsb2dfYWN0aW9uX3Jlc3RyaWN0ZWQoaW50IHR5cGUpCit7CisJaWYgKGRtZXNnX3Jlc3RyaWN0KQorCQlyZXR1cm4gMTsKKwkvKiBVbmxlc3MgcmVzdHJpY3RlZCwgd2UgYWxsb3cgInJlYWQgYWxsIiBhbmQgImdldCBidWZmZXIgc2l6ZSIgZm9yIGV2ZXJ5Ym9keSAqLworCXJldHVybiB0eXBlICE9IFNZU0xPR19BQ1RJT05fUkVBRF9BTEwgJiYgdHlwZSAhPSBTWVNMT0dfQUNUSU9OX1NJWkVfQlVGRkVSOworfQorCitzdGF0aWMgaW50IGNoZWNrX3N5c2xvZ19wZXJtaXNzaW9ucyhpbnQgdHlwZSwgYm9vbCBmcm9tX2ZpbGUpCit7CisJLyoKKwkgKiBJZiB0aGlzIGlzIGZyb20gL3Byb2Mva21zZyBhbmQgd2UndmUgYWxyZWFkeSBvcGVuZWQgaXQsIHRoZW4gd2UndmUKKwkgKiBhbHJlYWR5IGRvbmUgdGhlIGNhcGFiaWxpdGllcyBjaGVja3MgYXQgb3BlbiB0aW1lLgorCSAqLworCWlmIChmcm9tX2ZpbGUgJiYgdHlwZSAhPSBTWVNMT0dfQUNUSU9OX09QRU4pCisJCXJldHVybiAwOworCisJaWYgKHN5c2xvZ19hY3Rpb25fcmVzdHJpY3RlZCh0eXBlKSkgeworCQlpZiAoY2FwYWJsZShDQVBfU1lTTE9HKSkKKwkJCXJldHVybiAwOworCQkvKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBhY2NlcHQgQ0FQX1NZU19BRE1JTiB0b28sIHdpdGggYSB3YXJuaW5nICovCisJCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CisJCQlXQVJOX09OQ0UoMSwgIkF0dGVtcHQgdG8gYWNjZXNzIHN5c2xvZyB3aXRoIENBUF9TWVNfQURNSU4gIgorCQkJCSAiYnV0IG5vIENBUF9TWVNMT0cgKGRlcHJlY2F0ZWQpLlxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gLUVQRVJNOworCX0KKwlyZXR1cm4gMDsKK30KKwogaW50IGRvX3N5c2xvZyhpbnQgdHlwZSwgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGxlbiwgYm9vbCBmcm9tX2ZpbGUpCiB7CiAJdW5zaWduZWQgaSwgaiwgbGltaXQsIGNvdW50OwogCWludCBkb19jbGVhciA9IDA7CiAJY2hhciBjOwotCWludCBlcnJvciA9IDA7CisJaW50IGVycm9yOwogCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGZyb20gL3Byb2Mva21zZyB3ZSBvbmx5IGRvIHRoZSBjYXBhYmlsaXRpZXMgY2hlY2tzCi0JICogYXQgb3BlbiB0aW1lLgotCSAqLwotCWlmICh0eXBlID09IFNZU0xPR19BQ1RJT05fT1BFTiB8fCAhZnJvbV9maWxlKSB7Ci0JCWlmIChkbWVzZ19yZXN0cmljdCAmJiAhY2FwYWJsZShDQVBfU1lTTE9HKSkKLQkJCWdvdG8gd2FybjsgLyogc3dpdGNoIHRvIHJldHVybiAtRVBFUk0gYWZ0ZXIgMi42LjM5ICovCi0JCWlmICgodHlwZSAhPSBTWVNMT0dfQUNUSU9OX1JFQURfQUxMICYmCi0JCSAgICAgdHlwZSAhPSBTWVNMT0dfQUNUSU9OX1NJWkVfQlVGRkVSKSAmJgotCQkgICAgIWNhcGFibGUoQ0FQX1NZU0xPRykpCi0JCQlnb3RvIHdhcm47IC8qIHN3aXRjaCB0byByZXR1cm4gLUVQRVJNIGFmdGVyIDIuNi4zOSAqLwotCX0KKwllcnJvciA9IGNoZWNrX3N5c2xvZ19wZXJtaXNzaW9ucyh0eXBlLCBmcm9tX2ZpbGUpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CiAKIAllcnJvciA9IHNlY3VyaXR5X3N5c2xvZyh0eXBlKTsKIAlpZiAoZXJyb3IpCkBAIC00MjMsMTIgKzQ0NSw2IEBACiAJfQogb3V0OgogCXJldHVybiBlcnJvcjsKLXdhcm46Ci0JLyogcmVtb3ZlIGFmdGVyIDIuNi4zOSAqLwotCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlXQVJOX09OQ0UoMSwgIkF0dGVtcHQgdG8gYWNjZXNzIHN5c2xvZyB3aXRoIENBUF9TWVNfQURNSU4gIgotCQkgICJidXQgbm8gQ0FQX1NZU0xPRyAoZGVwcmVjYXRlZCBhbmQgZGVuaWVkKS5cbiIpOwotCXJldHVybiAtRVBFUk07CiB9CiAKIFNZU0NBTExfREVGSU5FMyhzeXNsb2csIGludCwgdHlwZSwgY2hhciBfX3VzZXIgKiwgYnVmLCBpbnQsIGxlbikKQEAgLTUwMSw3ICs1MTcsNyBAQAogLyoKICAqIENhbGwgdGhlIGNvbnNvbGUgZHJpdmVycywgYXNraW5nIHRoZW0gdG8gd3JpdGUgb3V0CiAgKiBsb2dfYnVmW3N0YXJ0XSB0byBsb2dfYnVmW2VuZCAtIDFdLgotICogVGhlIGNvbnNvbGVfc2VtIG11c3QgYmUgaGVsZC4KKyAqIFRoZSBjb25zb2xlX2xvY2sgbXVzdCBiZSBoZWxkLgogICovCiBzdGF0aWMgdm9pZCBjYWxsX2NvbnNvbGVfZHJpdmVycyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQogewpAQCAtNjA0LDExICs2MjAsMTEgQEAKICAqCiAgKiBUaGlzIGlzIHByaW50aygpLiAgSXQgY2FuIGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0LiAgV2Ugd2FudCBpdCB0byB3b3JrLgogICoKLSAqIFdlIHRyeSB0byBncmFiIHRoZSBjb25zb2xlX3NlbS4gIElmIHdlIHN1Y2NlZWQsIGl0J3MgZWFzeSAtIHdlIGxvZyB0aGUgb3V0cHV0IGFuZAorICogV2UgdHJ5IHRvIGdyYWIgdGhlIGNvbnNvbGVfbG9jay4gIElmIHdlIHN1Y2NlZWQsIGl0J3MgZWFzeSAtIHdlIGxvZyB0aGUgb3V0cHV0IGFuZAogICogY2FsbCB0aGUgY29uc29sZSBkcml2ZXJzLiAgSWYgd2UgZmFpbCB0byBnZXQgdGhlIHNlbWFwaG9yZSB3ZSBwbGFjZSB0aGUgb3V0cHV0CiAgKiBpbnRvIHRoZSBsb2cgYnVmZmVyIGFuZCByZXR1cm4uICBUaGUgY3VycmVudCBob2xkZXIgb2YgdGhlIGNvbnNvbGVfc2VtIHdpbGwKLSAqIG5vdGljZSB0aGUgbmV3IG91dHB1dCBpbiByZWxlYXNlX2NvbnNvbGVfc2VtKCkgYW5kIHdpbGwgc2VuZCBpdCB0byB0aGUKLSAqIGNvbnNvbGVzIGJlZm9yZSByZWxlYXNpbmcgdGhlIHNlbWFwaG9yZS4KKyAqIG5vdGljZSB0aGUgbmV3IG91dHB1dCBpbiBjb25zb2xlX3VubG9jaygpOyBhbmQgd2lsbCBzZW5kIGl0IHRvIHRoZQorICogY29uc29sZXMgYmVmb3JlIHJlbGVhc2luZyB0aGUgbG9jay4KICAqCiAgKiBPbmUgZWZmZWN0IG9mIHRoaXMgZGVmZXJyZWQgcHJpbnRpbmcgaXMgdGhhdCBjb2RlIHdoaWNoIGNhbGxzIHByaW50aygpIGFuZAogICogdGhlbiBjaGFuZ2VzIGNvbnNvbGVfbG9nbGV2ZWwgbWF5IGJyZWFrLiBUaGlzIGlzIGJlY2F1c2UgY29uc29sZV9sb2dsZXZlbApAQCAtNjU5LDE5ICs2NzUsMTkgQEAKIC8qCiAgKiBUcnkgdG8gZ2V0IGNvbnNvbGUgb3duZXJzaGlwIHRvIGFjdHVhbGx5IHNob3cgdGhlIGtlcm5lbAogICogbWVzc2FnZXMgZnJvbSBhICdwcmludGsnLiBSZXR1cm4gdHJ1ZSAoYW5kIHdpdGggdGhlCi0gKiBjb25zb2xlX3NlbWFwaG9yZSBoZWxkLCBhbmQgJ2NvbnNvbGVfbG9ja2VkJyBzZXQpIGlmIGl0CisgKiBjb25zb2xlX2xvY2sgaGVsZCwgYW5kICdjb25zb2xlX2xvY2tlZCcgc2V0KSBpZiBpdAogICogaXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlLgogICoKICAqIFRoaXMgZ2V0cyBjYWxsZWQgd2l0aCB0aGUgJ2xvZ2J1Zl9sb2NrJyBzcGlubG9jayBoZWxkIGFuZAogICogaW50ZXJydXB0cyBkaXNhYmxlZC4gSXQgc2hvdWxkIHJldHVybiB3aXRoICdsb2NrYnVmX2xvY2snCiAgKiByZWxlYXNlZCBidXQgaW50ZXJydXB0cyBzdGlsbCBkaXNhYmxlZC4KICAqLwotc3RhdGljIGludCBhY3F1aXJlX2NvbnNvbGVfc2VtYXBob3JlX2Zvcl9wcmludGsodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbnQgY29uc29sZV90cnlsb2NrX2Zvcl9wcmludGsodW5zaWduZWQgaW50IGNwdSkKIAlfX3JlbGVhc2VzKCZsb2didWZfbG9jaykKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWlmICghdHJ5X2FjcXVpcmVfY29uc29sZV9zZW0oKSkgeworCWlmIChjb25zb2xlX3RyeWxvY2soKSkgewogCQlyZXR2YWwgPSAxOwogCiAJCS8qCkBAIC04MjcsMTIgKzg0MywxMiBAQAogCSAqIGFjdHVhbCBtYWdpYyAocHJpbnQgb3V0IGJ1ZmZlcnMsIHdha2UgdXAga2xvZ2QsCiAJICogZXRjKS4gCiAJICoKLQkgKiBUaGUgYWNxdWlyZV9jb25zb2xlX3NlbWFwaG9yZV9mb3JfcHJpbnRrKCkgZnVuY3Rpb24KKwkgKiBUaGUgY29uc29sZV90cnlsb2NrX2Zvcl9wcmludGsoKSBmdW5jdGlvbgogCSAqIHdpbGwgcmVsZWFzZSAnbG9nYnVmX2xvY2snIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdAogCSAqIGFjdHVhbGx5IGdldHMgdGhlIHNlbWFwaG9yZSBvciBub3QuCiAJICovCi0JaWYgKGFjcXVpcmVfY29uc29sZV9zZW1hcGhvcmVfZm9yX3ByaW50ayh0aGlzX2NwdSkpCi0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwlpZiAoY29uc29sZV90cnlsb2NrX2Zvcl9wcmludGsodGhpc19jcHUpKQorCQljb25zb2xlX3VubG9jaygpOwogCiAJbG9ja2RlcF9vbigpOwogb3V0X3Jlc3RvcmVfaXJxczoKQEAgLTk5Myw3ICsxMDA5LDcgQEAKIAlpZiAoIWNvbnNvbGVfc3VzcGVuZF9lbmFibGVkKQogCQlyZXR1cm47CiAJcHJpbnRrKCJTdXNwZW5kaW5nIGNvbnNvbGUocykgKHVzZSBub19jb25zb2xlX3N1c3BlbmQgdG8gZGVidWcpXG4iKTsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJY29uc29sZV9zdXNwZW5kZWQgPSAxOwogCXVwKCZjb25zb2xlX3NlbSk7CiB9CkBAIC0xMDA0LDcgKzEwMjAsNyBAQAogCQlyZXR1cm47CiAJZG93bigmY29uc29sZV9zZW0pOwogCWNvbnNvbGVfc3VzcGVuZGVkID0gMDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogLyoqCkBAIC0xMDI3LDIxICsxMDQzLDIxIEBACiAJY2FzZSBDUFVfRFlJTkc6CiAJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAl9CiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAogLyoqCi0gKiBhY3F1aXJlX2NvbnNvbGVfc2VtIC0gbG9jayB0aGUgY29uc29sZSBzeXN0ZW0gZm9yIGV4Y2x1c2l2ZSB1c2UuCisgKiBjb25zb2xlX2xvY2sgLSBsb2NrIHRoZSBjb25zb2xlIHN5c3RlbSBmb3IgZXhjbHVzaXZlIHVzZS4KICAqCi0gKiBBY3F1aXJlcyBhIHNlbWFwaG9yZSB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGNhbGxlciBoYXMKKyAqIEFjcXVpcmVzIGEgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGNhbGxlciBoYXMKICAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc3lzdGVtIGFuZCB0aGUgY29uc29sZV9kcml2ZXJzIGxpc3QuCiAgKgogICogQ2FuIHNsZWVwLCByZXR1cm5zIG5vdGhpbmcuCiAgKi8KLXZvaWQgYWNxdWlyZV9jb25zb2xlX3NlbSh2b2lkKQordm9pZCBjb25zb2xlX2xvY2sodm9pZCkKIHsKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCWRvd24oJmNvbnNvbGVfc2VtKTsKQEAgLTEwNTAsMjEgKzEwNjYsMjkgQEAKIAljb25zb2xlX2xvY2tlZCA9IDE7CiAJY29uc29sZV9tYXlfc2NoZWR1bGUgPSAxOwogfQotRVhQT1JUX1NZTUJPTChhY3F1aXJlX2NvbnNvbGVfc2VtKTsKK0VYUE9SVF9TWU1CT0woY29uc29sZV9sb2NrKTsKIAotaW50IHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKHZvaWQpCisvKioKKyAqIGNvbnNvbGVfdHJ5bG9jayAtIHRyeSB0byBsb2NrIHRoZSBjb25zb2xlIHN5c3RlbSBmb3IgZXhjbHVzaXZlIHVzZS4KKyAqCisgKiBUcmllZCB0byBhY3F1aXJlIGEgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGNhbGxlciBoYXMKKyAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc3lzdGVtIGFuZCB0aGUgY29uc29sZV9kcml2ZXJzIGxpc3QuCisgKgorICogcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIGFuZCAwIG9uIGZhaWx1cmUgdG8gYWNxdWlyZSB0aGUgbG9jay4KKyAqLworaW50IGNvbnNvbGVfdHJ5bG9jayh2b2lkKQogewogCWlmIChkb3duX3RyeWxvY2soJmNvbnNvbGVfc2VtKSkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKIAlpZiAoY29uc29sZV9zdXNwZW5kZWQpIHsKIAkJdXAoJmNvbnNvbGVfc2VtKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKIAl9CiAJY29uc29sZV9sb2NrZWQgPSAxOwogCWNvbnNvbGVfbWF5X3NjaGVkdWxlID0gMDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KLUVYUE9SVF9TWU1CT0wodHJ5X2FjcXVpcmVfY29uc29sZV9zZW0pOworRVhQT1JUX1NZTUJPTChjb25zb2xlX3RyeWxvY2spOwogCiBpbnQgaXNfY29uc29sZV9sb2NrZWQodm9pZCkKIHsKQEAgLTEwOTUsMjAgKzExMTksMjAgQEAKIH0KIAogLyoqCi0gKiByZWxlYXNlX2NvbnNvbGVfc2VtIC0gdW5sb2NrIHRoZSBjb25zb2xlIHN5c3RlbQorICogY29uc29sZV91bmxvY2sgLSB1bmxvY2sgdGhlIGNvbnNvbGUgc3lzdGVtCiAgKgotICogUmVsZWFzZXMgdGhlIHNlbWFwaG9yZSB3aGljaCB0aGUgY2FsbGVyIGhvbGRzIG9uIHRoZSBjb25zb2xlIHN5c3RlbQorICogUmVsZWFzZXMgdGhlIGNvbnNvbGVfbG9jayB3aGljaCB0aGUgY2FsbGVyIGhvbGRzIG9uIHRoZSBjb25zb2xlIHN5c3RlbQogICogYW5kIHRoZSBjb25zb2xlIGRyaXZlciBsaXN0LgogICoKLSAqIFdoaWxlIHRoZSBzZW1hcGhvcmUgd2FzIGhlbGQsIGNvbnNvbGUgb3V0cHV0IG1heSBoYXZlIGJlZW4gYnVmZmVyZWQKLSAqIGJ5IHByaW50aygpLiAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgcmVsZWFzZV9jb25zb2xlX3NlbSgpIGVtaXRzCi0gKiB0aGUgb3V0cHV0IHByaW9yIHRvIHJlbGVhc2luZyB0aGUgc2VtYXBob3JlLgorICogV2hpbGUgdGhlIGNvbnNvbGVfbG9jayB3YXMgaGVsZCwgY29uc29sZSBvdXRwdXQgbWF5IGhhdmUgYmVlbiBidWZmZXJlZAorICogYnkgcHJpbnRrKCkuICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBjb25zb2xlX3VubG9jaygpOyBlbWl0cworICogdGhlIG91dHB1dCBwcmlvciB0byByZWxlYXNpbmcgdGhlIGxvY2suCiAgKgogICogSWYgdGhlcmUgaXMgb3V0cHV0IHdhaXRpbmcgZm9yIGtsb2dkLCB3ZSB3YWtlIGl0IHVwLgogICoKLSAqIHJlbGVhc2VfY29uc29sZV9zZW0oKSBtYXkgYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuCisgKiBjb25zb2xlX3VubG9jaygpOyBtYXkgYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuCiAgKi8KLXZvaWQgcmVsZWFzZV9jb25zb2xlX3NlbSh2b2lkKQordm9pZCBjb25zb2xlX3VubG9jayh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgX2Nvbl9zdGFydCwgX2xvZ19lbmQ7CkBAIC0xMTQxLDcgKzExNjUsNyBAQAogCWlmICh3YWtlX2tsb2dkKQogCQl3YWtlX3VwX2tsb2dkKCk7CiB9Ci1FWFBPUlRfU1lNQk9MKHJlbGVhc2VfY29uc29sZV9zZW0pOworRVhQT1JUX1NZTUJPTChjb25zb2xlX3VubG9jayk7CiAKIC8qKgogICogY29uc29sZV9jb25kaXRpb25hbF9zY2hlZHVsZSAtIHlpZWxkIHRoZSBDUFUgaWYgcmVxdWlyZWQKQEAgLTExNTAsNyArMTE3NCw3IEBACiAgKiBpZiB0aGlzIENQVSBzaG91bGQgeWllbGQgdGhlIENQVSB0byBhbm90aGVyIHRhc2ssIGRvCiAgKiBzbyBoZXJlLgogICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGhpbiBhY3F1aXJlX2NvbnNvbGVfc2VtKCkuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gY29uc29sZV9sb2NrKCk7LgogICovCiB2b2lkIF9fc2NoZWQgY29uc29sZV9jb25kaXRpb25hbF9zY2hlZHVsZSh2b2lkKQogewpAQCAtMTE3MSwxNCArMTE5NSwxNCBAQAogCQlpZiAoZG93bl90cnlsb2NrKCZjb25zb2xlX3NlbSkgIT0gMCkKIAkJCXJldHVybjsKIAl9IGVsc2UKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAogCWNvbnNvbGVfbG9ja2VkID0gMTsKIAljb25zb2xlX21heV9zY2hlZHVsZSA9IDA7CiAJZm9yX2VhY2hfY29uc29sZShjKQogCQlpZiAoKGMtPmZsYWdzICYgQ09OX0VOQUJMRUQpICYmIGMtPnVuYmxhbmspCiAJCQljLT51bmJsYW5rKCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKIC8qCkBAIC0xMTg5LDcgKzEyMTMsNyBAQAogCXN0cnVjdCBjb25zb2xlICpjOwogCXN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIgPSBOVUxMOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZvcl9lYWNoX2NvbnNvbGUoYykgewogCQlpZiAoIWMtPmRldmljZSkKIAkJCWNvbnRpbnVlOwpAQCAtMTE5Nyw3ICsxMjIxLDcgQEAKIAkJaWYgKGRyaXZlcikKIAkJCWJyZWFrOwogCX0KLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gZHJpdmVyOwogfQogCkBAIC0xMjA4LDE3ICsxMjMyLDE3IEBACiAgKi8KIHZvaWQgY29uc29sZV9zdG9wKHN0cnVjdCBjb25zb2xlICpjb25zb2xlKQogewotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAljb25zb2xlLT5mbGFncyAmPSB+Q09OX0VOQUJMRUQ7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MKGNvbnNvbGVfc3RvcCk7CiAKIHZvaWQgY29uc29sZV9zdGFydChzdHJ1Y3QgY29uc29sZSAqY29uc29sZSkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJY29uc29sZS0+ZmxhZ3MgfD0gQ09OX0VOQUJMRUQ7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MKGNvbnNvbGVfc3RhcnQpOwogCkBAIC0xMzQwLDcgKzEzNjQsNyBAQAogCSAqCVB1dCB0aGlzIGNvbnNvbGUgaW4gdGhlIGxpc3QgLSBrZWVwIHRoZQogCSAqCXByZWZlcnJlZCBkcml2ZXIgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuCiAJICovCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmICgobmV3Y29uLT5mbGFncyAmIENPTl9DT05TREVWKSB8fCBjb25zb2xlX2RyaXZlcnMgPT0gTlVMTCkgewogCQluZXdjb24tPm5leHQgPSBjb25zb2xlX2RyaXZlcnM7CiAJCWNvbnNvbGVfZHJpdmVycyA9IG5ld2NvbjsKQEAgLTEzNTIsMTQgKzEzNzYsMTQgQEAKIAl9CiAJaWYgKG5ld2Nvbi0+ZmxhZ3MgJiBDT05fUFJJTlRCVUZGRVIpIHsKIAkJLyoKLQkJICogcmVsZWFzZV9jb25zb2xlX3NlbSgpIHdpbGwgcHJpbnQgb3V0IHRoZSBidWZmZXJlZCBtZXNzYWdlcworCQkgKiBjb25zb2xlX3VubG9jaygpOyB3aWxsIHByaW50IG91dCB0aGUgYnVmZmVyZWQgbWVzc2FnZXMKIAkJICogZm9yIHVzLgogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7CiAJCWNvbl9zdGFydCA9IGxvZ19zdGFydDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9nYnVmX2xvY2ssIGZsYWdzKTsKIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJY29uc29sZV9zeXNmc19ub3RpZnkoKTsKIAogCS8qCkBAIC0xMzk2LDcgKzE0MjAsNyBAQAogCQlyZXR1cm4gYnJhaWxsZV91bnJlZ2lzdGVyX2NvbnNvbGUoY29uc29sZSk7CiAjZW5kaWYKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAoY29uc29sZV9kcml2ZXJzID09IGNvbnNvbGUpIHsKIAkJY29uc29sZV9kcml2ZXJzPWNvbnNvbGUtPm5leHQ7CiAJCXJlcyA9IDA7CkBAIC0xNDE4LDcgKzE0NDIsNyBAQAogCWlmIChjb25zb2xlX2RyaXZlcnMgIT0gTlVMTCAmJiBjb25zb2xlLT5mbGFncyAmIENPTl9DT05TREVWKQogCQljb25zb2xlX2RyaXZlcnMtPmZsYWdzIHw9IENPTl9DT05TREVWOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJY29uc29sZV9zeXNmc19ub3RpZnkoKTsKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3B0cmFjZS5jIGIva2VybmVsL3B0cmFjZS5jCmluZGV4IDk5YmJhYTMuLmUyMzAyZTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wdHJhY2UuYworKysgYi9rZXJuZWwvcHRyYWNlLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogCXJldHVybiAhZXJyOwogfQogCi1pbnQgcHRyYWNlX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitzdGF0aWMgaW50IHB0cmFjZV9hdHRhY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCWludCByZXR2YWw7CiAKQEAgLTIxOSw3ICsyMTksNyBAQAogICogUGVyZm9ybXMgY2hlY2tzIGFuZCBzZXRzIFBUX1BUUkFDRUQuCiAgKiBTaG91bGQgYmUgdXNlZCBieSBhbGwgcHRyYWNlIGltcGxlbWVudGF0aW9ucyBmb3IgUFRSQUNFX1RSQUNFTUUuCiAgKi8KLWludCBwdHJhY2VfdHJhY2VtZSh2b2lkKQorc3RhdGljIGludCBwdHJhY2VfdHJhY2VtZSh2b2lkKQogewogCWludCByZXQgPSAtRVBFUk07CiAKQEAgLTI5Myw3ICsyOTMsNyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotaW50IHB0cmFjZV9kZXRhY2goc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IGRhdGEpCitzdGF0aWMgaW50IHB0cmFjZV9kZXRhY2goc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IGRhdGEpCiB7CiAJYm9vbCBkZWFkID0gZmFsc2U7CiAKQEAgLTMxMyw3ICszMTMsNyBAQAogCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKIAkJZGVhZCA9IF9fcHRyYWNlX2RldGFjaChjdXJyZW50LCBjaGlsZCk7CiAJCWlmICghY2hpbGQtPmV4aXRfc3RhdGUpCi0JCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOworCQkJd2FrZV91cF9zdGF0ZShjaGlsZCwgVEFTS19UUkFDRUQgfCBUQVNLX1NUT1BQRUQpOwogCX0KIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggNzdlOTE2Ni4uMGMyNmUyZCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC02OTksNyArNjk5LDggQEAKIAljZnNfcnEtPm5yX3J1bm5pbmctLTsKIH0KIAotI2lmIGRlZmluZWQgQ09ORklHX1NNUCAmJiBkZWZpbmVkIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKKyMgaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHZvaWQgdXBkYXRlX2Nmc19ycV9sb2FkX2NvbnRyaWJ1dGlvbihzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsCiAJCQkJCSAgICBpbnQgZ2xvYmFsX3VwZGF0ZSkKIHsKQEAgLTcyMSwxMCArNzIyLDEwIEBACiAJdTY0IG5vdywgZGVsdGE7CiAJdW5zaWduZWQgbG9uZyBsb2FkID0gY2ZzX3JxLT5sb2FkLndlaWdodDsKIAotCWlmICghY2ZzX3JxKQorCWlmIChjZnNfcnEtPnRnID09ICZyb290X3Rhc2tfZ3JvdXApCiAJCXJldHVybjsKIAotCW5vdyA9IHJxX29mKGNmc19ycSktPmNsb2NrOworCW5vdyA9IHJxX29mKGNmc19ycSktPmNsb2NrX3Rhc2s7CiAJZGVsdGEgPSBub3cgLSBjZnNfcnEtPmxvYWRfc3RhbXA7CiAKIAkvKiB0cnVuY2F0ZSBsb2FkIGhpc3RvcnkgYXQgNCBpZGxlIHBlcmlvZHMgKi8KQEAgLTc2Miw2ICs3NjMsNTEgQEAKIAkJbGlzdF9kZWxfbGVhZl9jZnNfcnEoY2ZzX3JxKTsKIH0KIAorc3RhdGljIGxvbmcgY2FsY19jZnNfc2hhcmVzKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHRhc2tfZ3JvdXAgKnRnLAorCQkJCWxvbmcgd2VpZ2h0X2RlbHRhKQoreworCWxvbmcgbG9hZF93ZWlnaHQsIGxvYWQsIHNoYXJlczsKKworCWxvYWQgPSBjZnNfcnEtPmxvYWQud2VpZ2h0ICsgd2VpZ2h0X2RlbHRhOworCisJbG9hZF93ZWlnaHQgPSBhdG9taWNfcmVhZCgmdGctPmxvYWRfd2VpZ2h0KTsKKwlsb2FkX3dlaWdodCAtPSBjZnNfcnEtPmxvYWRfY29udHJpYnV0aW9uOworCWxvYWRfd2VpZ2h0ICs9IGxvYWQ7CisKKwlzaGFyZXMgPSAodGctPnNoYXJlcyAqIGxvYWQpOworCWlmIChsb2FkX3dlaWdodCkKKwkJc2hhcmVzIC89IGxvYWRfd2VpZ2h0OworCisJaWYgKHNoYXJlcyA8IE1JTl9TSEFSRVMpCisJCXNoYXJlcyA9IE1JTl9TSEFSRVM7CisJaWYgKHNoYXJlcyA+IHRnLT5zaGFyZXMpCisJCXNoYXJlcyA9IHRnLT5zaGFyZXM7CisKKwlyZXR1cm4gc2hhcmVzOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZW50aXR5X3NoYXJlc190aWNrKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKK3sKKwlpZiAoY2ZzX3JxLT5sb2FkX3VuYWNjX2V4ZWNfdGltZSA+IHN5c2N0bF9zY2hlZF9zaGFyZXNfd2luZG93KSB7CisJCXVwZGF0ZV9jZnNfbG9hZChjZnNfcnEsIDApOworCQl1cGRhdGVfY2ZzX3NoYXJlcyhjZnNfcnEsIDApOworCX0KK30KKyMgZWxzZSAvKiBDT05GSUdfU01QICovCitzdGF0aWMgdm9pZCB1cGRhdGVfY2ZzX2xvYWQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBpbnQgZ2xvYmFsX3VwZGF0ZSkKK3sKK30KKworc3RhdGljIGlubGluZSBsb25nIGNhbGNfY2ZzX3NoYXJlcyhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCB0YXNrX2dyb3VwICp0ZywKKwkJCQlsb25nIHdlaWdodF9kZWx0YSkKK3sKKwlyZXR1cm4gdGctPnNoYXJlczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9lbnRpdHlfc2hhcmVzX3RpY2soc3RydWN0IGNmc19ycSAqY2ZzX3JxKQoreworfQorIyBlbmRpZiAvKiBDT05GSUdfU01QICovCiBzdGF0aWMgdm9pZCByZXdlaWdodF9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwKIAkJCSAgICB1bnNpZ25lZCBsb25nIHdlaWdodCkKIHsKQEAgLTc4Miw0MSArODI4LDIwIEBACiB7CiAJc3RydWN0IHRhc2tfZ3JvdXAgKnRnOwogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlOwotCWxvbmcgbG9hZF93ZWlnaHQsIGxvYWQsIHNoYXJlczsKLQotCWlmICghY2ZzX3JxKQotCQlyZXR1cm47CisJbG9uZyBzaGFyZXM7CiAKIAl0ZyA9IGNmc19ycS0+dGc7CiAJc2UgPSB0Zy0+c2VbY3B1X29mKHJxX29mKGNmc19ycSkpXTsKIAlpZiAoIXNlKQogCQlyZXR1cm47Ci0KLQlsb2FkID0gY2ZzX3JxLT5sb2FkLndlaWdodCArIHdlaWdodF9kZWx0YTsKLQotCWxvYWRfd2VpZ2h0ID0gYXRvbWljX3JlYWQoJnRnLT5sb2FkX3dlaWdodCk7Ci0JbG9hZF93ZWlnaHQgLT0gY2ZzX3JxLT5sb2FkX2NvbnRyaWJ1dGlvbjsKLQlsb2FkX3dlaWdodCArPSBsb2FkOwotCi0Jc2hhcmVzID0gKHRnLT5zaGFyZXMgKiBsb2FkKTsKLQlpZiAobG9hZF93ZWlnaHQpCi0JCXNoYXJlcyAvPSBsb2FkX3dlaWdodDsKLQotCWlmIChzaGFyZXMgPCBNSU5fU0hBUkVTKQotCQlzaGFyZXMgPSBNSU5fU0hBUkVTOwotCWlmIChzaGFyZXMgPiB0Zy0+c2hhcmVzKQotCQlzaGFyZXMgPSB0Zy0+c2hhcmVzOworI2lmbmRlZiBDT05GSUdfU01QCisJaWYgKGxpa2VseShzZS0+bG9hZC53ZWlnaHQgPT0gdGctPnNoYXJlcykpCisJCXJldHVybjsKKyNlbmRpZgorCXNoYXJlcyA9IGNhbGNfY2ZzX3NoYXJlcyhjZnNfcnEsIHRnLCB3ZWlnaHRfZGVsdGEpOwogCiAJcmV3ZWlnaHRfZW50aXR5KGNmc19ycV9vZihzZSksIHNlLCBzaGFyZXMpOwogfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfZW50aXR5X3NoYXJlc190aWNrKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKLXsKLQlpZiAoY2ZzX3JxLT5sb2FkX3VuYWNjX2V4ZWNfdGltZSA+IHN5c2N0bF9zY2hlZF9zaGFyZXNfd2luZG93KSB7Ci0JCXVwZGF0ZV9jZnNfbG9hZChjZnNfcnEsIDApOwotCQl1cGRhdGVfY2ZzX3NoYXJlcyhjZnNfcnEsIDApOwotCX0KLX0KICNlbHNlIC8qIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICovCiBzdGF0aWMgdm9pZCB1cGRhdGVfY2ZzX2xvYWQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBpbnQgZ2xvYmFsX3VwZGF0ZSkKIHsKQEAgLTE0MDQsNyArMTQyOSw3IEBACiAKIHN0YXRpYyBpbnQgd2FrZV9hZmZpbmUoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHN5bmMpCiB7Ci0JdW5zaWduZWQgbG9uZyB0aGlzX2xvYWQsIGxvYWQ7CisJczY0IHRoaXNfbG9hZCwgbG9hZDsKIAlpbnQgaWR4LCB0aGlzX2NwdSwgcHJldl9jcHU7CiAJdW5zaWduZWQgbG9uZyB0bF9wZXJfdGFzazsKIAlzdHJ1Y3QgdGFza19ncm91cCAqdGc7CkBAIC0xNDQzLDggKzE0NjgsOCBAQAogCSAqIE90aGVyd2lzZSBjaGVjayBpZiBlaXRoZXIgY3B1cyBhcmUgbmVhciBlbm91Z2ggaW4gbG9hZCB0byBhbGxvdyB0aGlzCiAJICogdGFzayB0byBiZSB3b2tlbiBvbiB0aGlzX2NwdS4KIAkgKi8KLQlpZiAodGhpc19sb2FkKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdGhpc19lZmZfbG9hZCwgcHJldl9lZmZfbG9hZDsKKwlpZiAodGhpc19sb2FkID4gMCkgeworCQlzNjQgdGhpc19lZmZfbG9hZCwgcHJldl9lZmZfbG9hZDsKIAogCQl0aGlzX2VmZl9sb2FkID0gMTAwOwogCQl0aGlzX2VmZl9sb2FkICo9IHBvd2VyX29mKHByZXZfY3B1KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggYzkxNGVjNy4uYWQ2MjY3NyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTYyNSw3ICs2MjUsNyBAQAogCXN0cnVjdCBydF9ycSAqcnRfcnEgPSBydF9ycV9vZl9zZShydF9zZSk7CiAJdTY0IGRlbHRhX2V4ZWM7CiAKLQlpZiAoIXRhc2tfaGFzX3J0X3BvbGljeShjdXJyKSkKKwlpZiAoY3Vyci0+c2NoZWRfY2xhc3MgIT0gJnJ0X3NjaGVkX2NsYXNzKQogCQlyZXR1cm47CiAKIAlkZWx0YV9leGVjID0gcnEtPmNsb2NrX3Rhc2sgLSBjdXJyLT5zZS5leGVjX3N0YXJ0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDMxYjcxYTIuLjE4ZGE3MDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTEzODUsNyArMTM4NSw4IEBACiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKSwgKnRjcmVkOwogCiAJdGNyZWQgPSBfX3Rhc2tfY3JlZCh0YXNrKTsKLQlpZiAoKGNyZWQtPnVpZCAhPSB0Y3JlZC0+ZXVpZCB8fAorCWlmIChjdXJyZW50ICE9IHRhc2sgJiYKKwkgICAgKGNyZWQtPnVpZCAhPSB0Y3JlZC0+ZXVpZCB8fAogCSAgICAgY3JlZC0+dWlkICE9IHRjcmVkLT5zdWlkIHx8CiAJICAgICBjcmVkLT51aWQgIT0gdGNyZWQtPnVpZCAgfHwKIAkgICAgIGNyZWQtPmdpZCAhPSB0Y3JlZC0+ZWdpZCB8fApkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IGJjODZiYjMuLjBmMWJkODMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTE3MCw3ICsxNzAsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKLXN0YXRpYyBpbnQgX19zeXNycV9lbmFibGVkOyAvKiBOb3RlOiBzeXNycSBjb2RlIGlzZXMgaXQncyBvd24gcHJpdmF0ZSBjb3B5ICovCisvKiBOb3RlOiBzeXNycSBjb2RlIHVzZXMgaXQncyBvd24gcHJpdmF0ZSBjb3B5ICovCitzdGF0aWMgaW50IF9fc3lzcnFfZW5hYmxlZCA9IFNZU1JRX0RFRkFVTFRfRU5BQkxFOwogCiBzdGF0aWMgaW50IHN5c3JxX3N5c2N0bF9oYW5kbGVyKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAkJCQl2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jIGIva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYwppbmRleCA0OGIyNzYxLi5hM2I1YWZmIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKQEAgLTYwMCw0ICs2MDAsMTQgQEAKIAlyZXR1cm4gdGlja19icm9hZGNhc3RfZGV2aWNlLm1vZGUgPT0gVElDS0RFVl9NT0RFX09ORVNIT1Q7CiB9CiAKKy8qCisgKiBDaGVjayB3aGV0aGVyIHRoZSBicm9hZGNhc3QgZGV2aWNlIHN1cHBvcnRzIG9uZXNob3QuCisgKi8KK2Jvb2wgdGlja19icm9hZGNhc3Rfb25lc2hvdF9hdmFpbGFibGUodm9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpiYyA9IHRpY2tfYnJvYWRjYXN0X2RldmljZS5ldnRkZXY7CisKKwlyZXR1cm4gYmMgPyBiYy0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9PTkVTSE9UIDogZmFsc2U7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1jb21tb24uYyBiL2tlcm5lbC90aW1lL3RpY2stY29tbW9uLmMKaW5kZXggMDUxYmM4MC4uZWQyMjhlZiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1jb21tb24uYworKysgYi9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jCkBAIC01MSw3ICs1MSwxMSBAQAogewogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiA9IF9fdGhpc19jcHVfcmVhZCh0aWNrX2NwdV9kZXZpY2UuZXZ0ZGV2KTsKIAotCXJldHVybiBkZXYgJiYgKGRldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9PTkVTSE9UKTsKKwlpZiAoIWRldiB8fCAhKGRldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9PTkVTSE9UKSkKKwkJcmV0dXJuIDA7CisJaWYgKCEoZGV2LT5mZWF0dXJlcyAmIENMT0NLX0VWVF9GRUFUX0MzU1RPUCkpCisJCXJldHVybiAxOworCXJldHVybiB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X2F2YWlsYWJsZSgpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oIGIva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oCmluZGV4IDI5MGVlZmIuLmY2NWQzYTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaAorKysgYi9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmgKQEAgLTM2LDYgKzM2LDcgQEAKIGV4dGVybiBpbnQgdGlja19yZXN1bWVfYnJvYWRjYXN0X29uZXNob3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmMpOwogZXh0ZXJuIGludCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X2FjdGl2ZSh2b2lkKTsKIGV4dGVybiB2b2lkIHRpY2tfY2hlY2tfb25lc2hvdF9icm9hZGNhc3QoaW50IGNwdSk7Citib29sIHRpY2tfYnJvYWRjYXN0X29uZXNob3RfYXZhaWxhYmxlKHZvaWQpOwogIyBlbHNlIC8qIEJST0FEQ0FTVCAqLwogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfYnJvYWRjYXN0X3NldHVwX29uZXNob3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmMpCiB7CkBAIC00Niw2ICs0Nyw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19zaHV0ZG93bl9icm9hZGNhc3Rfb25lc2hvdCh1bnNpZ25lZCBpbnQgKmNwdXApIHsgfQogc3RhdGljIGlubGluZSBpbnQgdGlja19icm9hZGNhc3Rfb25lc2hvdF9hY3RpdmUodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfY2hlY2tfb25lc2hvdF9icm9hZGNhc3QoaW50IGNwdSkgeyB9CitzdGF0aWMgaW5saW5lIGJvb2wgdGlja19icm9hZGNhc3Rfb25lc2hvdF9hdmFpbGFibGUodm9pZCkgeyByZXR1cm4gdHJ1ZTsgfQogIyBlbmRpZiAvKiAhQlJPQURDQVNUICovCiAKICNlbHNlIC8qICFPTkVTSE9UICovCkBAIC03Niw2ICs3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIGludCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X2FjdGl2ZSh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgdGlja19icm9hZGNhc3Rfb25lc2hvdF9hdmFpbGFibGUodm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZiAvKiAhVElDS19PTkVTSE9UICovCiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKaW5kZXggM2UyMTZlMC4uYzU1ZWEyNCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwpAQCAtNjQyLDggKzY0Miw3IEBACiAJfQogCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIE5PSHogbW9kZSBvbiBDUFUgIyVkXG4iLAotCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIE5PSHogbW9kZSBvbiBDUFUgIyVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogfQogCiAvKgpAQCAtNzk1LDggKzc5NCwxMCBAQAogCX0KIAogI2lmZGVmIENPTkZJR19OT19IWgotCWlmICh0aWNrX25vaHpfZW5hYmxlZCkKKwlpZiAodGlja19ub2h6X2VuYWJsZWQpIHsKIAkJdHMtPm5vaHpfbW9kZSA9IE5PSFpfTU9ERV9ISUdIUkVTOworCQlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBOT0h6IG1vZGUgb24gQ1BVICMlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl9CiAjZW5kaWYKIH0KICNlbmRpZiAvKiBISUdIX1JFU19USU1FUlMgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwppbmRleCAzMmExOWY5Li4zMjU4NDU1IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKKysrIGIva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCkBAIC00MSw3ICs0MSw3IEBACiAJY2hhciBzeW1uYW1lW0tTWU1fTkFNRV9MRU5dOwogCiAJaWYgKGxvb2t1cF9zeW1ib2xfbmFtZSgodW5zaWduZWQgbG9uZylzeW0sIHN5bW5hbWUpIDwgMCkKLQkJU0VRX3ByaW50ZihtLCAiPCVwPiIsIHN5bSk7CisJCVNFUV9wcmludGYobSwgIjwlcEs+Iiwgc3ltKTsKIAllbHNlCiAJCVNFUV9wcmludGYobSwgIiVzIiwgc3ltbmFtZSk7CiB9CkBAIC0xMTIsNyArMTEyLDcgQEAKIHN0YXRpYyB2b2lkCiBwcmludF9iYXNlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSwgdTY0IG5vdykKIHsKLQlTRVFfcHJpbnRmKG0sICIgIC5iYXNlOiAgICAgICAlcFxuIiwgYmFzZSk7CisJU0VRX3ByaW50ZihtLCAiICAuYmFzZTogICAgICAgJXBLXG4iLCBiYXNlKTsKIAlTRVFfcHJpbnRmKG0sICIgIC5pbmRleDogICAgICAlZFxuIiwKIAkJCWJhc2UtPmluZGV4KTsKIAlTRVFfcHJpbnRmKG0sICIgIC5yZXNvbHV0aW9uOiAlTHUgbnNlY3NcbiIsCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IDQzY2E5OTMuLmQ2NDU5OTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC05NTksNyArOTU5LDcgQEAKICAqCiAgKiBTeW5jaHJvbml6YXRpb24gcnVsZXM6IENhbGxlcnMgbXVzdCBwcmV2ZW50IHJlc3RhcnRpbmcgb2YgdGhlIHRpbWVyLAogICogb3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgbWVhbmluZ2xlc3MuIEl0IG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tCi0gKiBoYXJkaXJxIGNvbnRleHRzLiBUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgbG9ja3Mgd2hpY2ggd291bGQgcHJldmVudAorICogaW50ZXJydXB0IGNvbnRleHRzLiBUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgbG9ja3Mgd2hpY2ggd291bGQgcHJldmVudAogICogY29tcGxldGlvbiBvZiB0aGUgdGltZXIncyBoYW5kbGVyLiBUaGUgdGltZXIncyBoYW5kbGVyIG11c3Qgbm90IGNhbGwKICAqIGFkZF90aW1lcl9vbigpLiBVcG9uIGV4aXQgdGhlIHRpbWVyIGlzIG5vdCBxdWV1ZWQgYW5kIHRoZSBoYW5kbGVyIGlzCiAgKiBub3QgcnVubmluZyBvbiBhbnkgQ1BVLgpAQCAtOTY5LDEwICs5NjksMTIgQEAKIGludCBkZWxfdGltZXJfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiB7CiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKLQlsb2NhbF9iaF9kaXNhYmxlKCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlsb2NrX21hcF9hY3F1aXJlKCZ0aW1lci0+bG9ja2RlcF9tYXApOwogCWxvY2tfbWFwX3JlbGVhc2UoJnRpbWVyLT5sb2NrZGVwX21hcCk7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogI2VuZGlmCiAJLyoKIAkgKiBkb24ndCB1c2UgaXQgaW4gaGFyZGlycSBjb250ZXh0LCBiZWNhdXNlIGl0CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCmluZGV4IDE1MzU2MmQuLmNiYWZlZDcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC0xMzgsNiArMTM4LDEzIEBACiAJCSAgICAgIWJsa190cmFjZXJfZW5hYmxlZCkpCiAJCXJldHVybjsKIAorCS8qCisJICogSWYgdGhlIEJMS19UQ19OT1RJRlkgYWN0aW9uIG1hc2sgaXNuJ3Qgc2V0LCBkb24ndCBzZW5kIGFueSBub3RlCisJICogbWVzc2FnZSB0byB0aGUgdHJhY2UuCisJICovCisJaWYgKCEoYnQtPmFjdF9tYXNrICYgQkxLX1RDX05PVElGWSkpCisJCXJldHVybjsKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlidWYgPSBwZXJfY3B1X3B0cihidC0+bXNnX2RhdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJdmFfc3RhcnQoYXJncywgZm10KTsKQEAgLTE4MjAsMjEgKzE4MjcsNSBAQAogCXJ3YnNbaV0gPSAnXDAnOwogfQogCi12b2lkIGJsa19maWxsX3J3YnNfcnEoY2hhciAqcndicywgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCWludCBydyA9IHJxLT5jbWRfZmxhZ3MgJiAweDAzOwotCWludCBieXRlczsKLQotCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpCi0JCXJ3IHw9IFJFUV9ESVNDQVJEOwotCi0JaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfU0VDVVJFKQotCQlydyB8PSBSRVFfU0VDVVJFOwotCi0JYnl0ZXMgPSBibGtfcnFfYnl0ZXMocnEpOwotCi0JYmxrX2ZpbGxfcndicyhyd2JzLCBydywgYnl0ZXMpOwotfQotCiAjZW5kaWYgLyogQ09ORklHX0VWRU5UX1RSQUNJTkcgKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCmluZGV4IDM1ZmRlMDkuLjVmNDk5ZTA0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCkBAIC0xMjg0LDcgKzEyODQsNyBAQAogc3RhdGljIHZvaWQgdHJhY2VfbW9kdWxlX2FkZF9ldmVudHMoc3RydWN0IG1vZHVsZSAqbW9kKQogewogCXN0cnVjdCBmdHJhY2VfbW9kdWxlX2ZpbGVfb3BzICpmaWxlX29wcyA9IE5VTEw7Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCAqc3RhcnQsICplbmQ7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICoqY2FsbCwgKipzdGFydCwgKiplbmQ7CiAKIAlzdGFydCA9IG1vZC0+dHJhY2VfZXZlbnRzOwogCWVuZCA9IG1vZC0+dHJhY2VfZXZlbnRzICsgbW9kLT5udW1fdHJhY2VfZXZlbnRzOwpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKIAkJcmV0dXJuOwogCiAJZm9yX2VhY2hfZXZlbnQoY2FsbCwgc3RhcnQsIGVuZCkgewotCQlfX3RyYWNlX2FkZF9ldmVudF9jYWxsKGNhbGwsIG1vZCwKKwkJX190cmFjZV9hZGRfZXZlbnRfY2FsbCgqY2FsbCwgbW9kLAogCQkJCSAgICAgICAmZmlsZV9vcHMtPmlkLCAmZmlsZV9vcHMtPmVuYWJsZSwKIAkJCQkgICAgICAgJmZpbGVfb3BzLT5maWx0ZXIsICZmaWxlX29wcy0+Zm9ybWF0KTsKIAl9CkBAIC0xMzY3LDggKzEzNjcsOCBAQAogCS5wcmlvcml0eSA9IDAsCiB9OwogCi1leHRlcm4gc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fc3RhcnRfZnRyYWNlX2V2ZW50c1tdOwotZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3N0b3BfZnRyYWNlX2V2ZW50c1tdOworZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqX19zdGFydF9mdHJhY2VfZXZlbnRzW107CitleHRlcm4gc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpfX3N0b3BfZnRyYWNlX2V2ZW50c1tdOwogCiBzdGF0aWMgY2hhciBib290dXBfZXZlbnRfYnVmW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhOwogCkBAIC0xMzg0LDcgKzEzODQsNyBAQAogCiBzdGF0aWMgX19pbml0IGludCBldmVudF90cmFjZV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsOworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKmNhbGw7CiAJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CiAJc3RydWN0IGRlbnRyeSAqZW50cnk7CiAJc3RydWN0IGRlbnRyeSAqZF9ldmVudHM7CkBAIC0xNDMwLDcgKzE0MzAsNyBAQAogCQlwcl93YXJuaW5nKCJ0cmFjaW5nOiBGYWlsZWQgdG8gYWxsb2NhdGUgY29tbW9uIGZpZWxkcyIpOwogCiAJZm9yX2VhY2hfZXZlbnQoY2FsbCwgX19zdGFydF9mdHJhY2VfZXZlbnRzLCBfX3N0b3BfZnRyYWNlX2V2ZW50cykgewotCQlfX3RyYWNlX2FkZF9ldmVudF9jYWxsKGNhbGwsIE5VTEwsICZmdHJhY2VfZXZlbnRfaWRfZm9wcywKKwkJX190cmFjZV9hZGRfZXZlbnRfY2FsbCgqY2FsbCwgTlVMTCwgJmZ0cmFjZV9ldmVudF9pZF9mb3BzLAogCQkJCSAgICAgICAmZnRyYWNlX2VuYWJsZV9mb3BzLAogCQkJCSAgICAgICAmZnRyYWNlX2V2ZW50X2ZpbHRlcl9mb3BzLAogCQkJCSAgICAgICAmZnRyYWNlX2V2ZW50X2Zvcm1hdF9mb3BzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwppbmRleCA0Yjc0ZDcxLi5iYmVlYzMxIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCkBAIC0xNjEsMTMgKzE2MSwxMyBAQAogCS5maWVsZHMJCQk9IExJU1RfSEVBRF9JTklUKGV2ZW50X2NsYXNzX2Z0cmFjZV8jI2NhbGwuZmllbGRzKSxcCiB9OwkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCQlcCi1fX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAotX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKK3N0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQgZXZlbnRfIyNjYWxsID0gewkJCVwKIAkubmFtZQkJCT0gI2NhbGwsCQkJCVwKIAkuZXZlbnQudHlwZQkJPSBldHlwZSwJCQkJXAogCS5jbGFzcwkJCT0gJmV2ZW50X2NsYXNzX2Z0cmFjZV8jI2NhbGwsCQlcCiAJLnByaW50X2ZtdAkJPSBwcmludCwJCQkJXAogfTsJCQkJCQkJCQlcCitzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQkJXAorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpICpfX2V2ZW50XyMjY2FsbCA9ICZldmVudF8jI2NhbGw7CiAKICNpbmNsdWRlICJ0cmFjZV9lbnRyaWVzLmgiCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCmluZGV4IGI3MDY1MjkuLjVjOWZlMDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCkBAIC01NSwyMCArNTUsMjEgQEAKIAkucmF3X2luaXQJPSBpbml0X3N5c2NhbGxfdHJhY2UsCiB9OwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhW107Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGFbXTsKK2V4dGVybiBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YVtdOworZXh0ZXJuIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGFbXTsKIAogc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICoqc3lzY2FsbHNfbWV0YWRhdGE7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZmluZF9zeXNjYWxsX21ldGEodW5zaWduZWQgbG9uZyBzeXNjYWxsKQorc3RhdGljIF9faW5pdCBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqCitmaW5kX3N5c2NhbGxfbWV0YSh1bnNpZ25lZCBsb25nIHN5c2NhbGwpCiB7Ci0Jc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN0YXJ0OwotCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzdG9wOworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICoqc3RhcnQ7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKipzdG9wOwogCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CiAKIAotCXN0YXJ0ID0gKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YTsKLQlzdG9wID0gKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhOworCXN0YXJ0ID0gX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YTsKKwlzdG9wID0gX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhOwogCWthbGxzeW1zX2xvb2t1cChzeXNjYWxsLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOwogCiAJZm9yICggOyBzdGFydCA8IHN0b3A7IHN0YXJ0KyspIHsKQEAgLTc4LDggKzc5LDggQEAKIAkJICogd2l0aCAiU3lTIiBpbnN0ZWFkIG9mICJzeXMiLCBsZWFkaW5nIHRvIGFuIHVud2FudGVkCiAJCSAqIG1pc21hdGNoLgogCQkgKi8KLQkJaWYgKHN0YXJ0LT5uYW1lICYmICFzdHJjbXAoc3RhcnQtPm5hbWUgKyAzLCBzdHIgKyAzKSkKLQkJCXJldHVybiBzdGFydDsKKwkJaWYgKCgqc3RhcnQpLT5uYW1lICYmICFzdHJjbXAoKCpzdGFydCktPm5hbWUgKyAzLCBzdHIgKyAzKSkKKwkJCXJldHVybiAqc3RhcnQ7CiAJfQogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlcG9pbnQuYyBiL2tlcm5lbC90cmFjZXBvaW50LmMKaW5kZXggZTk1ZWU3Zi4uNjgxODdhZiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlcG9pbnQuYworKysgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9qdW1wX2xhYmVsLmg+CiAKLWV4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCBfX3N0YXJ0X19fdHJhY2Vwb2ludHNbXTsKLWV4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCBfX3N0b3BfX190cmFjZXBvaW50c1tdOworZXh0ZXJuIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgX19zdGFydF9fX3RyYWNlcG9pbnRzX3B0cnNbXTsKK2V4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0IF9fc3RvcF9fX3RyYWNlcG9pbnRzX3B0cnNbXTsKIAogLyogU2V0IHRvIDEgdG8gZW5hYmxlIHRyYWNlcG9pbnQgZGVidWcgb3V0cHV0ICovCiBzdGF0aWMgY29uc3QgaW50IHRyYWNlcG9pbnRfZGVidWc7CkBAIC0yOTgsMTAgKzI5OCwxMCBAQAogICoKICAqIFVwZGF0ZXMgdGhlIHByb2JlIGNhbGxiYWNrIGNvcnJlc3BvbmRpbmcgdG8gYSByYW5nZSBvZiB0cmFjZXBvaW50cy4KICAqLwotdm9pZAotdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKQordm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICpiZWdpbiwKKwkJCQkgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpCiB7Ci0Jc3RydWN0IHRyYWNlcG9pbnQgKml0ZXI7CisJc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqaXRlcjsKIAlzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSAqbWFya19lbnRyeTsKIAogCWlmICghYmVnaW4pCkBAIC0zMDksMTIgKzMwOSwxMiBAQAogCiAJbXV0ZXhfbG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOwogCWZvciAoaXRlciA9IGJlZ2luOyBpdGVyIDwgZW5kOyBpdGVyKyspIHsKLQkJbWFya19lbnRyeSA9IGdldF90cmFjZXBvaW50KGl0ZXItPm5hbWUpOworCQltYXJrX2VudHJ5ID0gZ2V0X3RyYWNlcG9pbnQoKCppdGVyKS0+bmFtZSk7CiAJCWlmIChtYXJrX2VudHJ5KSB7Ci0JCQlzZXRfdHJhY2Vwb2ludCgmbWFya19lbnRyeSwgaXRlciwKKwkJCXNldF90cmFjZXBvaW50KCZtYXJrX2VudHJ5LCAqaXRlciwKIAkJCQkJISFtYXJrX2VudHJ5LT5yZWZjb3VudCk7CiAJCX0gZWxzZSB7Ci0JCQlkaXNhYmxlX3RyYWNlcG9pbnQoaXRlcik7CisJCQlkaXNhYmxlX3RyYWNlcG9pbnQoKml0ZXIpOwogCQl9CiAJfQogCW11dGV4X3VubG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOwpAQCAtMzI2LDggKzMyNiw4IEBACiBzdGF0aWMgdm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZXModm9pZCkKIHsKIAkvKiBDb3JlIGtlcm5lbCB0cmFjZXBvaW50cyAqLwotCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKF9fc3RhcnRfX190cmFjZXBvaW50cywKLQkJX19zdG9wX19fdHJhY2Vwb2ludHMpOworCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKF9fc3RhcnRfX190cmFjZXBvaW50c19wdHJzLAorCQlfX3N0b3BfX190cmFjZXBvaW50c19wdHJzKTsKIAkvKiB0cmFjZXBvaW50cyBpbiBtb2R1bGVzLiAqLwogCW1vZHVsZV91cGRhdGVfdHJhY2Vwb2ludHMoKTsKIH0KQEAgLTUxNCw4ICs1MTQsOCBAQAogICogV2lsbCByZXR1cm4gdGhlIGZpcnN0IHRyYWNlcG9pbnQgaW4gdGhlIHJhbmdlIGlmIHRoZSBpbnB1dCB0cmFjZXBvaW50IGlzCiAgKiBOVUxMLgogICovCi1pbnQgdHJhY2Vwb2ludF9nZXRfaXRlcl9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqKnRyYWNlcG9pbnQsCi0Jc3RydWN0IHRyYWNlcG9pbnQgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKQoraW50IHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqKnRyYWNlcG9pbnQsCisJc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqYmVnaW4sIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmVuZCkKIHsKIAlpZiAoISp0cmFjZXBvaW50ICYmIGJlZ2luICE9IGVuZCkgewogCQkqdHJhY2Vwb2ludCA9IGJlZ2luOwpAQCAtNTM0LDcgKzUzNCw4IEBACiAJLyogQ29yZSBrZXJuZWwgdHJhY2Vwb2ludHMgKi8KIAlpZiAoIWl0ZXItPm1vZHVsZSkgewogCQlmb3VuZCA9IHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2UoJml0ZXItPnRyYWNlcG9pbnQsCi0JCQkJX19zdGFydF9fX3RyYWNlcG9pbnRzLCBfX3N0b3BfX190cmFjZXBvaW50cyk7CisJCQkJX19zdGFydF9fX3RyYWNlcG9pbnRzX3B0cnMsCisJCQkJX19zdG9wX19fdHJhY2Vwb2ludHNfcHRycyk7CiAJCWlmIChmb3VuZCkKIAkJCWdvdG8gZW5kOwogCX0KQEAgLTU4NSw4ICs1ODYsOCBAQAogCXN3aXRjaCAodmFsKSB7CiAJY2FzZSBNT0RVTEVfU1RBVEVfQ09NSU5HOgogCWNhc2UgTU9EVUxFX1NUQVRFX0dPSU5HOgotCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzLAotCQkJbW9kLT50cmFjZXBvaW50cyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKKwkJdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT50cmFjZXBvaW50c19wdHJzLAorCQkJbW9kLT50cmFjZXBvaW50c19wdHJzICsgbW9kLT5udW1fdHJhY2Vwb2ludHMpOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvd2F0Y2hkb2cuYyBiL2tlcm5lbC93YXRjaGRvZy5jCmluZGV4IGQ3ZWJkZjQuLjE4YmIxNTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93YXRjaGRvZy5jCisrKyBiL2tlcm5lbC93YXRjaGRvZy5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCi1pbnQgd2F0Y2hkb2dfZW5hYmxlZDsKK2ludCB3YXRjaGRvZ19lbmFibGVkID0gMTsKIGludCBfX3JlYWRfbW9zdGx5IHNvZnRsb2NrdXBfdGhyZXNoID0gNjA7CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB3YXRjaGRvZ190b3VjaF90cyk7CkBAIC00Myw5ICs0Myw2IEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfZXZlbnQgKiwgd2F0Y2hkb2dfZXYpOwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgbm9fd2F0Y2hkb2c7Ci0KLQogLyogYm9vdCBjb21tYW5kcyAqLwogLyoKICAqIFNob3VsZCB3ZSBwYW5pYyB3aGVuIGEgc29mdC1sb2NrdXAgb3IgaGFyZC1sb2NrdXAgb2NjdXJzOgpAQCAtNTgsNyArNTUsNyBAQAogCWlmICghc3RybmNtcChzdHIsICJwYW5pYyIsIDUpKQogCQloYXJkbG9ja3VwX3BhbmljID0gMTsKIAllbHNlIGlmICghc3RybmNtcChzdHIsICIwIiwgMSkpCi0JCW5vX3dhdGNoZG9nID0gMTsKKwkJd2F0Y2hkb2dfZW5hYmxlZCA9IDA7CiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJubWlfd2F0Y2hkb2c9IiwgaGFyZGxvY2t1cF9wYW5pY19zZXR1cCk7CkBAIC03Nyw3ICs3NCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG5vd2F0Y2hkb2dfc2V0dXAoY2hhciAqc3RyKQogewotCW5vX3dhdGNoZG9nID0gMTsKKwl3YXRjaGRvZ19lbmFibGVkID0gMDsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoIm5vd2F0Y2hkb2ciLCBub3dhdGNoZG9nX3NldHVwKTsKQEAgLTg1LDcgKzgyLDcgQEAKIC8qIGRlcHJlY2F0ZWQgKi8KIHN0YXRpYyBpbnQgX19pbml0IG5vc29mdGxvY2t1cF9zZXR1cChjaGFyICpzdHIpCiB7Ci0Jbm9fd2F0Y2hkb2cgPSAxOworCXdhdGNoZG9nX2VuYWJsZWQgPSAwOwogCXJldHVybiAxOwogfQogX19zZXR1cCgibm9zb2Z0bG9ja3VwIiwgbm9zb2Z0bG9ja3VwX3NldHVwKTsKQEAgLTM2Niw4ICszNjMsMTQgQEAKIAkJZ290byBvdXRfc2F2ZTsKIAl9CiAKLQlwcmludGsoS0VSTl9FUlIgIk5NSSB3YXRjaGRvZyBkaXNhYmxlZCBmb3IgY3B1JWk6IHVuYWJsZSB0byBjcmVhdGUgcGVyZiBldmVudDogJWxkXG4iLAotCSAgICAgICBjcHUsIFBUUl9FUlIoZXZlbnQpKTsKKworCS8qIHZhcnkgdGhlIEtFUk4gbGV2ZWwgYmFzZWQgb24gdGhlIHJldHVybmVkIGVycm5vICovCisJaWYgKFBUUl9FUlIoZXZlbnQpID09IC1FT1BOT1RTVVBQKQorCQlwcmludGsoS0VSTl9JTkZPICJOTUkgd2F0Y2hkb2cgZGlzYWJsZWQgKGNwdSVpKTogbm90IHN1cHBvcnRlZCAobm8gTEFQSUM/KVxuIiwgY3B1KTsKKwllbHNlIGlmIChQVFJfRVJSKGV2ZW50KSA9PSAtRU5PRU5UKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJOTUkgd2F0Y2hkb2cgZGlzYWJsZWQgKGNwdSVpKTogaGFyZHdhcmUgZXZlbnRzIG5vdCBlbmFibGVkXG4iLCBjcHUpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJOTUkgd2F0Y2hkb2cgZGlzYWJsZWQgKGNwdSVpKTogdW5hYmxlIHRvIGNyZWF0ZSBwZXJmIGV2ZW50OiAlbGRcbiIsIGNwdSwgUFRSX0VSUihldmVudCkpOwogCXJldHVybiBQVFJfRVJSKGV2ZW50KTsKIAogCS8qIHN1Y2Nlc3MgcGF0aCAqLwpAQCAtNDMyLDkgKzQzNSw2IEBACiAJCXdha2VfdXBfcHJvY2VzcyhwKTsKIAl9CiAKLQkvKiBpZiBhbnkgY3B1IHN1Y2NlZWRzLCB3YXRjaGRvZyBpcyBjb25zaWRlcmVkIGVuYWJsZWQgZm9yIHRoZSBzeXN0ZW0gKi8KLQl3YXRjaGRvZ19lbmFibGVkID0gMTsKLQogCXJldHVybiAwOwogfQogCkBAIC00NjIsMTIgKzQ2MiwxNiBAQAogc3RhdGljIHZvaWQgd2F0Y2hkb2dfZW5hYmxlX2FsbF9jcHVzKHZvaWQpCiB7CiAJaW50IGNwdTsKLQlpbnQgcmVzdWx0ID0gMDsKKworCXdhdGNoZG9nX2VuYWJsZWQgPSAwOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCXJlc3VsdCArPSB3YXRjaGRvZ19lbmFibGUoY3B1KTsKKwkJaWYgKCF3YXRjaGRvZ19lbmFibGUoY3B1KSkKKwkJCS8qIGlmIGFueSBjcHUgc3VjY2VlZHMsIHdhdGNoZG9nIGlzIGNvbnNpZGVyZWQKKwkJCSAgIGVuYWJsZWQgZm9yIHRoZSBzeXN0ZW0gKi8KKwkJCXdhdGNoZG9nX2VuYWJsZWQgPSAxOwogCi0JaWYgKHJlc3VsdCkKKwlpZiAoIXdhdGNoZG9nX2VuYWJsZWQpCiAJCXByaW50ayhLRVJOX0VSUiAid2F0Y2hkb2c6IGZhaWxlZCB0byBiZSBlbmFibGVkIG9uIHNvbWUgY3B1c1xuIik7CiAKIH0KQEAgLTQ3Niw5ICs0ODAsNiBAQAogewogCWludCBjcHU7CiAKLQlpZiAobm9fd2F0Y2hkb2cpCi0JCXJldHVybjsKLQogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQl3YXRjaGRvZ19kaXNhYmxlKGNwdSk7CiAKQEAgLTQ5OCwxMCArNDk5LDEyIEBACiB7CiAJcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVuZ3RoLCBwcG9zKTsKIAotCWlmICh3YXRjaGRvZ19lbmFibGVkKQotCQl3YXRjaGRvZ19lbmFibGVfYWxsX2NwdXMoKTsKLQllbHNlCi0JCXdhdGNoZG9nX2Rpc2FibGVfYWxsX2NwdXMoKTsKKwlpZiAod3JpdGUpIHsKKwkJaWYgKHdhdGNoZG9nX2VuYWJsZWQpCisJCQl3YXRjaGRvZ19lbmFibGVfYWxsX2NwdXMoKTsKKwkJZWxzZQorCQkJd2F0Y2hkb2dfZGlzYWJsZV9hbGxfY3B1cygpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNTMwLDcgKzUzMyw4IEBACiAJCWJyZWFrOwogCWNhc2UgQ1BVX09OTElORToKIAljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgotCQllcnIgPSB3YXRjaGRvZ19lbmFibGUoaG90Y3B1KTsKKwkJaWYgKHdhdGNoZG9nX2VuYWJsZWQpCisJCQllcnIgPSB3YXRjaGRvZ19lbmFibGUoaG90Y3B1KTsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CkBAIC01NTUsOSArNTU5LDYgQEAKIAl2b2lkICpjcHUgPSAodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgZXJyOwogCi0JaWYgKG5vX3dhdGNoZG9nKQotCQlyZXR1cm47Ci0KIAllcnIgPSBjcHVfY2FsbGJhY2soJmNwdV9uZmIsIENQVV9VUF9QUkVQQVJFLCBjcHUpOwogCVdBUk5fT04obm90aWZpZXJfdG9fZXJybm8oZXJyKSk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCAxMTg2OWZhLi5lZTY1NzhiIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC03OSw3ICs3OSw5IEBACiAJTUFYX0lETEVfV09SS0VSU19SQVRJTwk9IDQsCQkvKiAxLzQgb2YgYnVzeSBjYW4gYmUgaWRsZSAqLwogCUlETEVfV09SS0VSX1RJTUVPVVQJPSAzMDAgKiBIWiwJLyoga2VlcCBpZGxlIG9uZXMgZm9yIDUgbWlucyAqLwogCi0JTUFZREFZX0lOSVRJQUxfVElNRU9VVAk9IEhaIC8gMTAwLAkvKiBjYWxsIGZvciBoZWxwIGFmdGVyIDEwbXMgKi8KKwlNQVlEQVlfSU5JVElBTF9USU1FT1VUICA9IEhaIC8gMTAwID49IDIgPyBIWiAvIDEwMCA6IDIsCisJCQkJCQkvKiBjYWxsIGZvciBoZWxwIGFmdGVyIDEwbXMKKwkJCQkJCSAgIChtaW4gdHdvIHRpY2tzKSAqLwogCU1BWURBWV9JTlRFUlZBTAkJPSBIWiAvIDEwLAkvKiBhbmQgdGhlbiBldmVyeSAxMDBtcyAqLwogCUNSRUFURV9DT09MRE9XTgkJPSBIWiwJCS8qIHRpbWUgdG8gYnJlYXRoIGFmdGVyIGZhaWwgKi8KIAlUUlVTVEVFX0NPT0xET1dOCT0gSFogLyAxMCwJLyogZm9yIHRydXN0ZWUgZHJhaW5pbmcgKi8KQEAgLTIwNDcsNiArMjA0OSwxNSBAQAogCQkJCW1vdmVfbGlua2VkX3dvcmtzKHdvcmssIHNjaGVkdWxlZCwgJm4pOwogCiAJCXByb2Nlc3Nfc2NoZWR1bGVkX3dvcmtzKHJlc2N1ZXIpOworCisJCS8qCisJCSAqIExlYXZlIHRoaXMgZ2N3cS4gIElmIGtlZXBfd29ya2luZygpIGlzICV0cnVlLCBub3RpZnkgYQorCQkgKiByZWd1bGFyIHdvcmtlcjsgb3RoZXJ3aXNlLCB3ZSBlbmQgdXAgd2l0aCAwIGNvbmN1cnJlbmN5CisJCSAqIGFuZCBzdGFsbGluZyB0aGUgZXhlY3V0aW9uLgorCQkgKi8KKwkJaWYgKGtlZXBfd29ya2luZyhnY3dxKSkKKwkJCXdha2VfdXBfd29ya2VyKGdjd3EpOworCiAJCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CiAJfQogCkBAIC0yOTU2LDcgKzI5NjcsNyBAQAogCSAqLwogCXNwaW5fbG9jaygmd29ya3F1ZXVlX2xvY2spOwogCi0JaWYgKHdvcmtxdWV1ZV9mcmVlemluZyAmJiB3cS0+ZmxhZ3MgJiBXUV9GUkVFWkVBQkxFKQorCWlmICh3b3JrcXVldWVfZnJlZXppbmcgJiYgd3EtPmZsYWdzICYgV1FfRlJFRVpBQkxFKQogCQlmb3JfZWFjaF9jd3FfY3B1KGNwdSwgd3EpCiAJCQlnZXRfY3dxKGNwdSwgd3EpLT5tYXhfYWN0aXZlID0gMDsKIApAQCAtMzA2OCw3ICszMDc5LDcgQEAKIAogCQlzcGluX2xvY2tfaXJxKCZnY3dxLT5sb2NrKTsKIAotCQlpZiAoISh3cS0+ZmxhZ3MgJiBXUV9GUkVFWkVBQkxFKSB8fAorCQlpZiAoISh3cS0+ZmxhZ3MgJiBXUV9GUkVFWkFCTEUpIHx8CiAJCSAgICAhKGdjd3EtPmZsYWdzICYgR0NXUV9GUkVFWklORykpCiAJCQlnZXRfY3dxKGdjd3EtPmNwdSwgd3EpLT5tYXhfYWN0aXZlID0gbWF4X2FjdGl2ZTsKIApAQCAtMzMxOCw3ICszMzI5LDcgQEAKIAkgKiB3YW50IHRvIGdldCBpdCBvdmVyIHdpdGggQVNBUCAtIHNwYW0gcmVzY3VlcnMsIHdha2UgdXAgYXMKIAkgKiBtYW55IGlkbGVycyBhcyBuZWNlc3NhcnkgYW5kIGNyZWF0ZSBuZXcgb25lcyB0aWxsIHRoZQogCSAqIHdvcmtsaXN0IGlzIGVtcHR5LiAgTm90ZSB0aGF0IGlmIHRoZSBnY3dxIGlzIGZyb3plbiwgdGhlcmUKLQkgKiBtYXkgYmUgZnJvemVuIHdvcmtzIGluIGZyZWV6ZWFibGUgY3dxcy4gIERvbid0IGRlY2xhcmUKKwkgKiBtYXkgYmUgZnJvemVuIHdvcmtzIGluIGZyZWV6YWJsZSBjd3FzLiAgRG9uJ3QgZGVjbGFyZQogCSAqIGNvbXBsZXRpb24gd2hpbGUgZnJvemVuLgogCSAqLwogCXdoaWxlIChnY3dxLT5ucl93b3JrZXJzICE9IGdjd3EtPm5yX2lkbGUgfHwKQEAgLTM1NzYsOSArMzU4Nyw5IEBACiAvKioKICAqIGZyZWV6ZV93b3JrcXVldWVzX2JlZ2luIC0gYmVnaW4gZnJlZXppbmcgd29ya3F1ZXVlcwogICoKLSAqIFN0YXJ0IGZyZWV6aW5nIHdvcmtxdWV1ZXMuICBBZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIGFsbAotICogZnJlZXplYWJsZSB3b3JrcXVldWVzIHdpbGwgcXVldWUgbmV3IHdvcmtzIHRvIHRoZWlyIGZyb3plbl93b3JrcwotICogbGlzdCBpbnN0ZWFkIG9mIGdjd3EtPndvcmtsaXN0LgorICogU3RhcnQgZnJlZXppbmcgd29ya3F1ZXVlcy4gIEFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgYWxsIGZyZWV6YWJsZQorICogd29ya3F1ZXVlcyB3aWxsIHF1ZXVlIG5ldyB3b3JrcyB0byB0aGVpciBmcm96ZW5fd29ya3MgbGlzdCBpbnN0ZWFkIG9mCisgKiBnY3dxLT53b3JrbGlzdC4KICAqCiAgKiBDT05URVhUOgogICogR3JhYnMgYW5kIHJlbGVhc2VzIHdvcmtxdWV1ZV9sb2NrIGFuZCBnY3dxLT5sb2NrJ3MuCkBAIC0zNjA0LDcgKzM2MTUsNyBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdxLCAmd29ya3F1ZXVlcywgbGlzdCkgewogCQkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EgPSBnZXRfY3dxKGNwdSwgd3EpOwogCi0JCQlpZiAoY3dxICYmIHdxLT5mbGFncyAmIFdRX0ZSRUVaRUFCTEUpCisJCQlpZiAoY3dxICYmIHdxLT5mbGFncyAmIFdRX0ZSRUVaQUJMRSkKIAkJCQljd3EtPm1heF9hY3RpdmUgPSAwOwogCQl9CiAKQEAgLTM2MTUsNyArMzYyNiw3IEBACiB9CiAKIC8qKgotICogZnJlZXplX3dvcmtxdWV1ZXNfYnVzeSAtIGFyZSBmcmVlemVhYmxlIHdvcmtxdWV1ZXMgc3RpbGwgYnVzeT8KKyAqIGZyZWV6ZV93b3JrcXVldWVzX2J1c3kgLSBhcmUgZnJlZXphYmxlIHdvcmtxdWV1ZXMgc3RpbGwgYnVzeT8KICAqCiAgKiBDaGVjayB3aGV0aGVyIGZyZWV6aW5nIGlzIGNvbXBsZXRlLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAogICogYmV0d2VlbiBmcmVlemVfd29ya3F1ZXVlc19iZWdpbigpIGFuZCB0aGF3X3dvcmtxdWV1ZXMoKS4KQEAgLTM2MjQsOCArMzYzNSw4IEBACiAgKiBHcmFicyBhbmQgcmVsZWFzZXMgd29ya3F1ZXVlX2xvY2suCiAgKgogICogUkVUVVJOUzoKLSAqICV0cnVlIGlmIHNvbWUgZnJlZXplYWJsZSB3b3JrcXVldWVzIGFyZSBzdGlsbCBidXN5LiAgJWZhbHNlIGlmCi0gKiBmcmVlemluZyBpcyBjb21wbGV0ZS4KKyAqICV0cnVlIGlmIHNvbWUgZnJlZXphYmxlIHdvcmtxdWV1ZXMgYXJlIHN0aWxsIGJ1c3kuICAlZmFsc2UgaWYgZnJlZXppbmcKKyAqIGlzIGNvbXBsZXRlLgogICovCiBib29sIGZyZWV6ZV93b3JrcXVldWVzX2J1c3kodm9pZCkKIHsKQEAgLTM2NDUsNyArMzY1Niw3IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkod3EsICZ3b3JrcXVldWVzLCBsaXN0KSB7CiAJCQlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSA9IGdldF9jd3EoY3B1LCB3cSk7CiAKLQkJCWlmICghY3dxIHx8ICEod3EtPmZsYWdzICYgV1FfRlJFRVpFQUJMRSkpCisJCQlpZiAoIWN3cSB8fCAhKHdxLT5mbGFncyAmIFdRX0ZSRUVaQUJMRSkpCiAJCQkJY29udGludWU7CiAKIAkJCUJVR19PTihjd3EtPm5yX2FjdGl2ZSA8IDApOwpAQCAtMzY5MCw3ICszNzAxLDcgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3cSwgJndvcmtxdWV1ZXMsIGxpc3QpIHsKIAkJCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxID0gZ2V0X2N3cShjcHUsIHdxKTsKIAotCQkJaWYgKCFjd3EgfHwgISh3cS0+ZmxhZ3MgJiBXUV9GUkVFWkVBQkxFKSkKKwkJCWlmICghY3dxIHx8ICEod3EtPmZsYWdzICYgV1FfRlJFRVpBQkxFKSkKIAkJCQljb250aW51ZTsKIAogCQkJLyogcmVzdG9yZSBtYXhfYWN0aXZlIGFuZCByZXBvcHVsYXRlIHdvcmtsaXN0ICovCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDM5NjdjMjM1Li4yYjk3NDE4IDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtODA1LDcgKzgwNSw3IEBACiBjb25maWcgRlJBTUVfUE9JTlRFUgogCWJvb2wgIkNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIGZyYW1lIHBvaW50ZXJzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFwKLQkJKENSSVMgfHwgTTY4SyB8fCBNNjhLTk9NTVUgfHwgRlJWIHx8IFVNTCB8fCBcCisJCShDUklTIHx8IE02OEsgfHwgRlJWIHx8IFVNTCB8fCBcCiAJCSBBVlIzMiB8fCBTVVBFUkggfHwgQkxBQ0tGSU4gfHwgTU4xMDMwMCkgfHwgXAogCQlBUkNIX1dBTlRfRlJBTUVfUE9JTlRFUlMKIAlkZWZhdWx0IHkgaWYgKERFQlVHX0lORk8gJiYgVU1MKSB8fCBBUkNIX1dBTlRfRlJBTUVfUE9JTlRFUlMKZGlmZiAtLWdpdCBhL2xpYi9saXN0X2RlYnVnLmMgYi9saWIvbGlzdF9kZWJ1Zy5jCmluZGV4IDM0NGM3MTAuLmI4MDI5YTUgMTAwNjQ0Ci0tLSBhL2xpYi9saXN0X2RlYnVnLmMKKysrIGIvbGliL2xpc3RfZGVidWcuYwpAQCAtMzUsNiArMzUsMzEgQEAKIH0KIEVYUE9SVF9TWU1CT0woX19saXN0X2FkZCk7CiAKK3ZvaWQgX19saXN0X2RlbF9lbnRyeShzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LCAqbmV4dDsKKworCXByZXYgPSBlbnRyeS0+cHJldjsKKwluZXh0ID0gZW50cnktPm5leHQ7CisKKwlpZiAoV0FSTihuZXh0ID09IExJU1RfUE9JU09OMSwKKwkJImxpc3RfZGVsIGNvcnJ1cHRpb24sICVwLT5uZXh0IGlzIExJU1RfUE9JU09OMSAoJXApXG4iLAorCQllbnRyeSwgTElTVF9QT0lTT04xKSB8fAorCSAgICBXQVJOKHByZXYgPT0gTElTVF9QT0lTT04yLAorCQkibGlzdF9kZWwgY29ycnVwdGlvbiwgJXAtPnByZXYgaXMgTElTVF9QT0lTT04yICglcClcbiIsCisJCWVudHJ5LCBMSVNUX1BPSVNPTjIpIHx8CisJICAgIFdBUk4ocHJldi0+bmV4dCAhPSBlbnRyeSwKKwkJImxpc3RfZGVsIGNvcnJ1cHRpb24uIHByZXYtPm5leHQgc2hvdWxkIGJlICVwLCAiCisJCSJidXQgd2FzICVwXG4iLCBlbnRyeSwgcHJldi0+bmV4dCkgfHwKKwkgICAgV0FSTihuZXh0LT5wcmV2ICE9IGVudHJ5LAorCQkibGlzdF9kZWwgY29ycnVwdGlvbi4gbmV4dC0+cHJldiBzaG91bGQgYmUgJXAsICIKKwkJImJ1dCB3YXMgJXBcbiIsIGVudHJ5LCBuZXh0LT5wcmV2KSkKKwkJcmV0dXJuOworCisJX19saXN0X2RlbChwcmV2LCBuZXh0KTsKK30KK0VYUE9SVF9TWU1CT0woX19saXN0X2RlbF9lbnRyeSk7CisKIC8qKgogICogbGlzdF9kZWwgLSBkZWxldGVzIGVudHJ5IGZyb20gbGlzdC4KICAqIEBlbnRyeTogdGhlIGVsZW1lbnQgdG8gZGVsZXRlIGZyb20gdGhlIGxpc3QuCkBAIC00MywxOSArNjgsNyBAQAogICovCiB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQogewotCVdBUk4oZW50cnktPm5leHQgPT0gTElTVF9QT0lTT04xLAotCQkibGlzdF9kZWwgY29ycnVwdGlvbiwgbmV4dCBpcyBMSVNUX1BPSVNPTjEgKCVwKVxuIiwKLQkJTElTVF9QT0lTT04xKTsKLQlXQVJOKGVudHJ5LT5uZXh0ICE9IExJU1RfUE9JU09OMSAmJiBlbnRyeS0+cHJldiA9PSBMSVNUX1BPSVNPTjIsCi0JCSJsaXN0X2RlbCBjb3JydXB0aW9uLCBwcmV2IGlzIExJU1RfUE9JU09OMiAoJXApXG4iLAotCQlMSVNUX1BPSVNPTjIpOwotCVdBUk4oZW50cnktPnByZXYtPm5leHQgIT0gZW50cnksCi0JCSJsaXN0X2RlbCBjb3JydXB0aW9uLiBwcmV2LT5uZXh0IHNob3VsZCBiZSAlcCwgIgotCQkiYnV0IHdhcyAlcFxuIiwgZW50cnksIGVudHJ5LT5wcmV2LT5uZXh0KTsKLQlXQVJOKGVudHJ5LT5uZXh0LT5wcmV2ICE9IGVudHJ5LAotCQkibGlzdF9kZWwgY29ycnVwdGlvbi4gbmV4dC0+cHJldiBzaG91bGQgYmUgJXAsICIKLQkJImJ1dCB3YXMgJXBcbiIsIGVudHJ5LCBlbnRyeS0+bmV4dC0+cHJldik7Ci0JX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOworCV9fbGlzdF9kZWxfZW50cnkoZW50cnkpOwogCWVudHJ5LT5uZXh0ID0gTElTVF9QT0lTT04xOwogCWVudHJ5LT5wcmV2ID0gTElTVF9QT0lTT04yOwogfQpkaWZmIC0tZ2l0IGEvbGliL25sYXR0ci5jIGIvbGliL25sYXR0ci5jCmluZGV4IDUwMjFjYmMuLmFjMDlmMjIgMTAwNjQ0Ci0tLSBhL2xpYi9ubGF0dHIuYworKysgYi9saWIvbmxhdHRyLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogewogCWludCBpLCBsZW4gPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyssIHArKykgewogCQlpZiAocC0+bGVuKQogCQkJbGVuICs9IG5sYV90b3RhbF9zaXplKHAtPmxlbik7CiAJCWVsc2UgaWYgKG5sYV9hdHRyX21pbmxlbltwLT50eXBlXSkKZGlmZiAtLWdpdCBhL2xpYi9yYWRpeC10cmVlLmMgYi9saWIvcmFkaXgtdHJlZS5jCmluZGV4IDUwODZiYjkuLjdlYTJlMDMgMTAwNjQ0Ci0tLSBhL2xpYi9yYWRpeC10cmVlLmMKKysrIGIvbGliL3JhZGl4LXRyZWUuYwpAQCAtNzM2LDEwICs3MzYsMTEgQEAKIAkJfQogCX0KIAkvKgotCSAqIFRoZSBpZnRhZyBtdXN0IGhhdmUgYmVlbiBzZXQgc29tZXdoZXJlIGJlY2F1c2Ugb3RoZXJ3aXNlCi0JICogd2Ugd291bGQgcmV0dXJuIGltbWVkaWF0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24KKwkgKiBXZSBuZWVkIG5vdCB0byB0YWcgdGhlIHJvb3QgdGFnIGlmIHRoZXJlIGlzIG5vIHRhZyB3aGljaCBpcyBzZXQgd2l0aAorCSAqIHNldHRhZyB3aXRoaW4gdGhlIHJhbmdlIGZyb20gKmZpcnN0X2luZGV4cCB0byBsYXN0X2luZGV4LgogCSAqLwotCXJvb3RfdGFnX3NldChyb290LCBzZXR0YWcpOworCWlmICh0YWdnZWQgPiAwKQorCQlyb290X3RhZ19zZXQocm9vdCwgc2V0dGFnKTsKIAkqZmlyc3RfaW5kZXhwID0gaW5kZXg7CiAKIAlyZXR1cm4gdGFnZ2VkOwpkaWZmIC0tZ2l0IGEvbGliL3JidHJlZS5jIGIvbGliL3JidHJlZS5jCmluZGV4IDQ2OTNmNzkuLmExNmJlMTkgMTAwNjQ0Ci0tLSBhL2xpYi9yYnRyZWUuYworKysgYi9saWIvcmJ0cmVlLmMKQEAgLTMxNSw2ICszMTUsNyBAQAogCiAJcmJfYXVnbWVudF9wYXRoKG5vZGUsIGZ1bmMsIGRhdGEpOwogfQorRVhQT1JUX1NZTUJPTChyYl9hdWdtZW50X2luc2VydCk7CiAKIC8qCiAgKiBiZWZvcmUgcmVtb3ZpbmcgdGhlIG5vZGUsIGZpbmQgdGhlIGRlZXBlc3Qgbm9kZSBvbiB0aGUgcmViYWxhbmNlIHBhdGgKQEAgLTM0MCw2ICszNDEsNyBAQAogCiAJcmV0dXJuIGRlZXBlc3Q7CiB9CitFWFBPUlRfU1lNQk9MKHJiX2F1Z21lbnRfZXJhc2VfYmVnaW4pOwogCiAvKgogICogYWZ0ZXIgcmVtb3ZhbCwgdXBkYXRlIHRoZSB0cmVlIHRvIGFjY291bnQgZm9yIHRoZSByZW1vdmVkIGVudHJ5CkBAIC0zNTAsNiArMzUyLDcgQEAKIAlpZiAobm9kZSkKIAkJcmJfYXVnbWVudF9wYXRoKG5vZGUsIGZ1bmMsIGRhdGEpOwogfQorRVhQT1JUX1NZTUJPTChyYl9hdWdtZW50X2VyYXNlX2VuZCk7CiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IG5vZGUgKGluIHNvcnQgb3JkZXIpIG9mIHRoZSB0cmVlLgpkaWZmIC0tZ2l0IGEvbGliL3N3aW90bGIuYyBiL2xpYi9zd2lvdGxiLmMKaW5kZXggYzQ3YmJlMS4uOTNjYTA4YiAxMDA2NDQKLS0tIGEvbGliL3N3aW90bGIuYworKysgYi9saWIvc3dpb3RsYi5jCkBAIC02ODYsOCArNjg2LDEwIEBACiAJLyoKIAkgKiBFbnN1cmUgdGhhdCB0aGUgYWRkcmVzcyByZXR1cm5lZCBpcyBETUEnYmxlCiAJICovCi0JaWYgKCFkbWFfY2FwYWJsZShkZXYsIGRldl9hZGRyLCBzaXplKSkKLQkJcGFuaWMoIm1hcF9zaW5nbGU6IGJvdW5jZSBidWZmZXIgaXMgbm90IERNQSdibGUiKTsKKwlpZiAoIWRtYV9jYXBhYmxlKGRldiwgZGV2X2FkZHIsIHNpemUpKSB7CisJCXN3aW90bGJfdGJsX3VubWFwX3NpbmdsZShkZXYsIG1hcCwgc2l6ZSwgZGlyKTsKKwkJZGV2X2FkZHIgPSBzd2lvdGxiX3ZpcnRfdG9fYnVzKGRldiwgaW9fdGxiX292ZXJmbG93X2J1ZmZlcik7CisJfQogCiAJcmV0dXJuIGRldl9hZGRyOwogfQpkaWZmIC0tZ2l0IGEvbGliL3RleHRzZWFyY2guYyBiL2xpYi90ZXh0c2VhcmNoLmMKaW5kZXggZDYwODMzMS4uZTBjYzAxNCAxMDA2NDQKLS0tIGEvbGliL3RleHRzZWFyY2guYworKysgYi9saWIvdGV4dHNlYXJjaC5jCkBAIC0xMyw3ICsxMyw3IEBACiAgKgogICogSU5UUk9EVUNUSU9OCiAgKgotICogICBUaGUgdGV4dHNlYXJjaCBpbmZyYXN0cnVjdHVyZSBwcm92aWRlcyB0ZXh0IHNlYXJjaGluZyBmYWNpdGlsaWVzIGZvcgorICogICBUaGUgdGV4dHNlYXJjaCBpbmZyYXN0cnVjdHVyZSBwcm92aWRlcyB0ZXh0IHNlYXJjaGluZyBmYWNpbGl0aWVzIGZvcgogICogICBib3RoIGxpbmVhciBhbmQgbm9uLWxpbmVhciBkYXRhLiBJbmRpdmlkdWFsIHNlYXJjaCBhbGdvcml0aG1zIGFyZQogICogICBpbXBsZW1lbnRlZCBpbiBtb2R1bGVzIGFuZCBjaG9zZW4gYnkgdGhlIHVzZXIuCiAgKgpAQCAtNDMsNyArNDMsNyBAQAogICogICAgICAgdG8gdGhlIGFsZ29yaXRobSB0byBzdG9yZSBwZXJzaXN0ZW50IHZhcmlhYmxlcy4KICAqICAgKDQpIENvcmUgZXZlbnR1YWxseSByZXNldHMgdGhlIHNlYXJjaCBvZmZzZXQgYW5kIGZvcndhcmRzIHRoZSBmaW5kKCkKICAqICAgICAgIHJlcXVlc3QgdG8gdGhlIGFsZ29yaXRobS4KLSAqICAgKDUpIEFsZ29yaXRobSBjYWxscyBnZXRfbmV4dF9ibG9jaygpIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGNvbnRpbm91c2x5CisgKiAgICg1KSBBbGdvcml0aG0gY2FsbHMgZ2V0X25leHRfYmxvY2soKSBwcm92aWRlZCBieSB0aGUgdXNlciBjb250aW51b3VzbHkKICAqICAgICAgIHRvIGZldGNoIHRoZSBkYXRhIHRvIGJlIHNlYXJjaGVkIGluIGJsb2NrIGJ5IGJsb2NrLgogICogICAoNikgQWxnb3JpdGhtIGludm9rZXMgZmluaXNoKCkgYWZ0ZXIgdGhlIGxhc3QgY2FsbCB0byBnZXRfbmV4dF9ibG9jawogICogICAgICAgdG8gY2xlYW4gdXAgYW55IGxlZnRvdmVycyBmcm9tIGdldF9uZXh0X2Jsb2NrLiAoT3B0aW9uYWwpCkBAIC01OCwxNSArNTgsMTUgQEAKICAqICAgdGhlIHBhdHRlcm4gdG8gbG9vayBmb3IgYW5kIGZsYWdzLiBBcyBhIGZsYWcsIHlvdSBjYW4gc2V0IFRTX0lHTk9SRUNBU0UKICAqICAgdG8gcGVyZm9ybSBjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nLiBCdXQgaXQgbWlnaHQgc2xvdyBkb3duCiAgKiAgIHBlcmZvcm1hbmNlIG9mIGFsZ29yaXRobSwgc28geW91IHNob3VsZCB1c2UgaXQgYXQgb3duIHlvdXIgcmlzay4KLSAqICAgVGhlIHJldHVybmVkIGNvbmZpZ3VyYXRpb24gbWF5IHRoZW4gYmUgdXNlZCBmb3IgYW4gYXJiaXRhcnkKKyAqICAgVGhlIHJldHVybmVkIGNvbmZpZ3VyYXRpb24gbWF5IHRoZW4gYmUgdXNlZCBmb3IgYW4gYXJiaXRyYXJ5CiAgKiAgIGFtb3VudCBvZiB0aW1lcyBhbmQgZXZlbiBpbiBwYXJhbGxlbCBhcyBsb25nIGFzIGEgc2VwYXJhdGUgc3RydWN0CiAgKiAgIHRzX3N0YXRlIHZhcmlhYmxlIGlzIHByb3ZpZGVkIHRvIGV2ZXJ5IGluc3RhbmNlLgogICoKICAqICAgVGhlIGFjdHVhbCBzZWFyY2ggaXMgcGVyZm9ybWVkIGJ5IGVpdGhlciBjYWxsaW5nIHRleHRzZWFyY2hfZmluZF8tCiAgKiAgIGNvbnRpbnVvdXMoKSBmb3IgbGluZWFyIGRhdGEgb3IgYnkgcHJvdmlkaW5nIGFuIG93biBnZXRfbmV4dF9ibG9jaygpCiAgKiAgIGltcGxlbWVudGF0aW9uIGFuZCBjYWxsaW5nIHRleHRzZWFyY2hfZmluZCgpLiBCb3RoIGZ1bmN0aW9ucyByZXR1cm4KLSAqICAgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBwYXRlcm4gb3IgVUlOVF9NQVggaWYKLSAqICAgbm8gbWF0Y2ggd2FzIGZvdW5kLiBTdWJzZXF1ZW50IG9jY3VyZW5jZXMgY2FuIGJlIGZvdW5kIGJ5IGNhbGxpbmcKKyAqICAgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBwYXR0ZXJuIG9yIFVJTlRfTUFYIGlmCisgKiAgIG5vIG1hdGNoIHdhcyBmb3VuZC4gU3Vic2VxdWVudCBvY2N1cnJlbmNlcyBjYW4gYmUgZm91bmQgYnkgY2FsbGluZwogICogICB0ZXh0c2VhcmNoX25leHQoKSByZWdhcmRsZXNzIG9mIHRoZSBsaW5lYXJpdHkgb2YgdGhlIGRhdGEuCiAgKgogICogICBPbmNlIHlvdSdyZSBkb25lIHVzaW5nIGEgY29uZmlndXJhdGlvbiBpdCBtdXN0IGJlIGdpdmVuIGJhY2sgdmlhCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCAzYWQ0ODNiLi5lOWMwYzYxIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTE3OSw3ICsxNzksNyBAQAogY29uZmlnIENPTVBBQ1RJT04KIAlib29sICJBbGxvdyBmb3IgbWVtb3J5IGNvbXBhY3Rpb24iCiAJc2VsZWN0IE1JR1JBVElPTgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEhVR0VUTEJfUEFHRSAmJiBNTVUKKwlkZXBlbmRzIG9uIE1NVQogCWhlbHAKIAkgIEFsbG93cyB0aGUgY29tcGFjdGlvbiBvZiBtZW1vcnkgZm9yIHRoZSBhbGxvY2F0aW9uIG9mIGh1Z2UgcGFnZXMuCiAKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGUxODc0NTQuLmRiZTk5YTUgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKKysrIGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNjUwLDEwICs2NTAsMTAgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqYWxsb2NfaHVnZXBhZ2Vfdm1hKGludCBkZWZyYWcsCiAJCQkJCSAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGhhZGRyKQorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGhhZGRyLCBpbnQgbmQpCiB7CiAJcmV0dXJuIGFsbG9jX3BhZ2VzX3ZtYShhbGxvY19odWdlcGFnZV9nZnBtYXNrKGRlZnJhZyksCi0JCQkgICAgICAgSFBBR0VfUE1EX09SREVSLCB2bWEsIGhhZGRyKTsKKwkJCSAgICAgICBIUEFHRV9QTURfT1JERVIsIHZtYSwgaGFkZHIsIG5kKTsKIH0KIAogI2lmbmRlZiBDT05GSUdfTlVNQQpAQCAtNjc4LDcgKzY3OCw3IEBACiAJCWlmICh1bmxpa2VseShraHVnZXBhZ2VkX2VudGVyKHZtYSkpKQogCQkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKIAkJcGFnZSA9IGFsbG9jX2h1Z2VwYWdlX3ZtYSh0cmFuc3BhcmVudF9odWdlcGFnZV9kZWZyYWcodm1hKSwKLQkJCQkJICB2bWEsIGhhZGRyKTsKKwkJCQkJICB2bWEsIGhhZGRyLCBudW1hX25vZGVfaWQoKSk7CiAJCWlmICh1bmxpa2VseSghcGFnZSkpCiAJCQlnb3RvIG91dDsKIAkJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfbmV3cGFnZV9jaGFyZ2UocGFnZSwgbW0sIEdGUF9LRVJORUwpKSkgewpAQCAtNzk5LDggKzc5OSw4IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEhQQUdFX1BNRF9OUjsgaSsrKSB7Ci0JCXBhZ2VzW2ldID0gYWxsb2NfcGFnZV92bWEoR0ZQX0hJR0hVU0VSX01PVkFCTEUsCi0JCQkJCSAgdm1hLCBhZGRyZXNzKTsKKwkJcGFnZXNbaV0gPSBhbGxvY19wYWdlX3ZtYV9ub2RlKEdGUF9ISUdIVVNFUl9NT1ZBQkxFLAorCQkJCQkgICAgICAgdm1hLCBhZGRyZXNzLCBwYWdlX3RvX25pZChwYWdlKSk7CiAJCWlmICh1bmxpa2VseSghcGFnZXNbaV0gfHwKIAkJCSAgICAgbWVtX2Nncm91cF9uZXdwYWdlX2NoYXJnZShwYWdlc1tpXSwgbW0sCiAJCQkJCQkgICAgICAgR0ZQX0tFUk5FTCkpKSB7CkBAIC05MDIsNyArOTAyLDcgQEAKIAlpZiAodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZW5hYmxlZCh2bWEpICYmCiAJICAgICF0cmFuc3BhcmVudF9odWdlcGFnZV9kZWJ1Z19jb3coKSkKIAkJbmV3X3BhZ2UgPSBhbGxvY19odWdlcGFnZV92bWEodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZGVmcmFnKHZtYSksCi0JCQkJCSAgICAgIHZtYSwgaGFkZHIpOworCQkJCQkgICAgICB2bWEsIGhhZGRyLCBudW1hX25vZGVfaWQoKSk7CiAJZWxzZQogCQluZXdfcGFnZSA9IE5VTEw7CiAKQEAgLTExNjIsNyArMTE2MiwxMiBAQAogCQkvKiBhZnRlciBjbGVhcmluZyBQYWdlVGFpbCB0aGUgZ3VwIHJlZmNvdW50IGNhbiBiZSByZWxlYXNlZCAqLwogCQlzbXBfbWIoKTsKIAotCQlwYWdlX3RhaWwtPmZsYWdzICY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7CisJCS8qCisJCSAqIHJldGFpbiBod3BvaXNvbiBmbGFnIG9mIHRoZSBwb2lzb25lZCB0YWlsIHBhZ2U6CisJCSAqICAgZml4IGZvciB0aGUgdW5zdWl0YWJsZSBwcm9jZXNzIGtpbGxlZCBvbiBHdWVzdCBNYWNoaW5lKEtWTSkKKwkJICogICBieSB0aGUgbWVtb3J5LWZhaWx1cmUuCisJCSAqLworCQlwYWdlX3RhaWwtPmZsYWdzICY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVAgfCBfX1BHX0hXUE9JU09OOwogCQlwYWdlX3RhaWwtPmZsYWdzIHw9IChwYWdlLT5mbGFncyAmCiAJCQkJICAgICAoKDFMIDw8IFBHX3JlZmVyZW5jZWQpIHwKIAkJCQkgICAgICAoMUwgPDwgUEdfc3dhcGJhY2tlZCkgfApAQCAtMTc0MCw3ICsxNzQ1LDggQEAKIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2h1Z2VfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQkgICAgICAgc3RydWN0IHBhZ2UgKipocGFnZSwKLQkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKKwkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgICAgICBpbnQgbm9kZSkKIHsKIAlwZ2RfdCAqcGdkOwogCXB1ZF90ICpwdWQ7CkBAIC0xNzY4LDcgKzE3NzQsOCBAQAogCSAqIG1tYXBfc2VtIGluIHJlYWQgbW9kZSBpcyBnb29kIGlkZWEgYWxzbyB0byBhbGxvdyBncmVhdGVyCiAJICogc2NhbGFiaWxpdHkuCiAJICovCi0JbmV3X3BhZ2UgPSBhbGxvY19odWdlcGFnZV92bWEoa2h1Z2VwYWdlZF9kZWZyYWcoKSwgdm1hLCBhZGRyZXNzKTsKKwluZXdfcGFnZSA9IGFsbG9jX2h1Z2VwYWdlX3ZtYShraHVnZXBhZ2VkX2RlZnJhZygpLCB2bWEsIGFkZHJlc3MsCisJCQkJICAgICAgbm9kZSk7CiAJaWYgKHVubGlrZWx5KCFuZXdfcGFnZSkpIHsKIAkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJKmhwYWdlID0gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTE4MDYsNiArMTgxMyw4IEBACiAJLyogVk1fUEZOTUFQIHZtYXMgbWF5IGhhdmUgdm1fb3BzIG51bGwgYnV0IHZtX2ZpbGUgc2V0ICovCiAJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzIHx8IHZtYS0+dm1fZmlsZSkKIAkJZ290byBvdXQ7CisJaWYgKGlzX3ZtYV90ZW1wb3Jhcnlfc3RhY2sodm1hKSkKKwkJZ290byBvdXQ7CiAJVk1fQlVHX09OKGlzX2xpbmVhcl9wZm5fbWFwcGluZyh2bWEpIHx8IGlzX3Bmbl9tYXBwaW5nKHZtYSkpOwogCiAJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcmVzcyk7CkBAIC0xODQ3LDcgKzE4NTYsNiBAQAogCQlzZXRfcG1kX2F0KG1tLCBhZGRyZXNzLCBwbWQsIF9wbWQpOwogCQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJCWFub25fdm1hX3VubG9jayh2bWEtPmFub25fdm1hKTsKLQkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKG5ld19wYWdlKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xODkzLDYgKzE5MDEsNyBAQAogCXJldHVybjsKIAogb3V0OgorCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShuZXdfcGFnZSk7CiAjaWZkZWYgQ09ORklHX05VTUEKIAlwdXRfcGFnZShuZXdfcGFnZSk7CiAjZW5kaWYKQEAgLTE5MTIsNiArMTkyMSw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBfYWRkcmVzczsKIAlzcGlubG9ja190ICpwdGw7CisJaW50IG5vZGUgPSAtMTsKIAogCVZNX0JVR19PTihhZGRyZXNzICYgfkhQQUdFX1BNRF9NQVNLKTsKIApAQCAtMTk0Miw2ICsxOTUyLDEzIEBACiAJCXBhZ2UgPSB2bV9ub3JtYWxfcGFnZSh2bWEsIF9hZGRyZXNzLCBwdGV2YWwpOwogCQlpZiAodW5saWtlbHkoIXBhZ2UpKQogCQkJZ290byBvdXRfdW5tYXA7CisJCS8qCisJCSAqIENob3NlIHRoZSBub2RlIG9mIHRoZSBmaXJzdCBwYWdlLiBUaGlzIGNvdWxkCisJCSAqIGJlIG1vcmUgc29waGlzdGljYXRlZCBhbmQgbG9vayBhdCBtb3JlIHBhZ2VzLAorCQkgKiBidXQgaXNuJ3QgZm9yIG5vdy4KKwkJICovCisJCWlmIChub2RlID09IC0xKQorCQkJbm9kZSA9IHBhZ2VfdG9fbmlkKHBhZ2UpOwogCQlWTV9CVUdfT04oUGFnZUNvbXBvdW5kKHBhZ2UpKTsKIAkJaWYgKCFQYWdlTFJVKHBhZ2UpIHx8IFBhZ2VMb2NrZWQocGFnZSkgfHwgIVBhZ2VBbm9uKHBhZ2UpKQogCQkJZ290byBvdXRfdW5tYXA7CkBAIC0xOTU4LDcgKzE5NzUsNyBAQAogCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOwogCWlmIChyZXQpCiAJCS8qIGNvbGxhcHNlX2h1Z2VfcGFnZSB3aWxsIHJldHVybiB3aXRoIHRoZSBtbWFwX3NlbSByZWxlYXNlZCAqLwotCQljb2xsYXBzZV9odWdlX3BhZ2UobW0sIGFkZHJlc3MsIGhwYWdlLCB2bWEpOworCQljb2xsYXBzZV9odWdlX3BhZ2UobW0sIGFkZHJlc3MsIGhwYWdlLCB2bWEsIG5vZGUpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0yMDI3LDMyICsyMDQ0LDI3IEBACiAJCWlmICgoISh2bWEtPnZtX2ZsYWdzICYgVk1fSFVHRVBBR0UpICYmCiAJCSAgICAgIWtodWdlcGFnZWRfYWx3YXlzKCkpIHx8CiAJCSAgICAodm1hLT52bV9mbGFncyAmIFZNX05PSFVHRVBBR0UpKSB7CisJCXNraXA6CiAJCQlwcm9ncmVzcysrOwogCQkJY29udGludWU7CiAJCX0KLQogCQkvKiBWTV9QRk5NQVAgdm1hcyBtYXkgaGF2ZSB2bV9vcHMgbnVsbCBidXQgdm1fZmlsZSBzZXQgKi8KLQkJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzIHx8IHZtYS0+dm1fZmlsZSkgewotCQkJa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MgPSB2bWEtPnZtX2VuZDsKLQkJCXByb2dyZXNzKys7Ci0JCQljb250aW51ZTsKLQkJfQorCQlpZiAoIXZtYS0+YW5vbl92bWEgfHwgdm1hLT52bV9vcHMgfHwgdm1hLT52bV9maWxlKQorCQkJZ290byBza2lwOworCQlpZiAoaXNfdm1hX3RlbXBvcmFyeV9zdGFjayh2bWEpKQorCQkJZ290byBza2lwOworCiAJCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCBpc19wZm5fbWFwcGluZyh2bWEpKTsKIAogCQloc3RhcnQgPSAodm1hLT52bV9zdGFydCArIH5IUEFHRV9QTURfTUFTSykgJiBIUEFHRV9QTURfTUFTSzsKIAkJaGVuZCA9IHZtYS0+dm1fZW5kICYgSFBBR0VfUE1EX01BU0s7Ci0JCWlmIChoc3RhcnQgPj0gaGVuZCkgewotCQkJcHJvZ3Jlc3MrKzsKLQkJCWNvbnRpbnVlOwotCQl9CisJCWlmIChoc3RhcnQgPj0gaGVuZCkKKwkJCWdvdG8gc2tpcDsKKwkJaWYgKGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzID4gaGVuZCkKKwkJCWdvdG8gc2tpcDsKIAkJaWYgKGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzIDwgaHN0YXJ0KQogCQkJa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MgPSBoc3RhcnQ7Ci0JCWlmIChraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyA+IGhlbmQpIHsKLQkJCWtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzID0gaGVuZCArIEhQQUdFX1BNRF9TSVpFOwotCQkJcHJvZ3Jlc3MrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCUJVR19PTihraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyAmIH5IUEFHRV9QTURfTUFTSyk7CisJCVZNX0JVR19PTihraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyAmIH5IUEFHRV9QTURfTUFTSyk7CiAKIAkJd2hpbGUgKGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzIDwgaGVuZCkgewogCQkJaW50IHJldDsKQEAgLTIwODEsNyArMjA5Myw3IEBACiBicmVha291dGVybG9vcF9tbWFwX3NlbToKIAogCXNwaW5fbG9jaygma2h1Z2VwYWdlZF9tbV9sb2NrKTsKLQlCVUdfT04oa2h1Z2VwYWdlZF9zY2FuLm1tX3Nsb3QgIT0gbW1fc2xvdCk7CisJVk1fQlVHX09OKGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ICE9IG1tX3Nsb3QpOwogCS8qCiAJICogUmVsZWFzZSB0aGUgY3VycmVudCBtbV9zbG90IGlmIHRoaXMgbW0gaXMgYWJvdXQgdG8gZGllLCBvcgogCSAqIGlmIHdlIHNjYW5uZWQgYWxsIHZtYXMgb2YgdGhpcyBtbS4KQEAgLTIyMzYsOSArMjI0OCw5IEBACiAKIAlmb3IgKDs7KSB7CiAJCW11dGV4X3VubG9jaygma2h1Z2VwYWdlZF9tdXRleCk7Ci0JCUJVR19PTihraHVnZXBhZ2VkX3RocmVhZCAhPSBjdXJyZW50KTsKKwkJVk1fQlVHX09OKGtodWdlcGFnZWRfdGhyZWFkICE9IGN1cnJlbnQpOwogCQlraHVnZXBhZ2VkX2xvb3AoKTsKLQkJQlVHX09OKGtodWdlcGFnZWRfdGhyZWFkICE9IGN1cnJlbnQpOworCQlWTV9CVUdfT04oa2h1Z2VwYWdlZF90aHJlYWQgIT0gY3VycmVudCk7CiAKIAkJbXV0ZXhfbG9jaygma2h1Z2VwYWdlZF9tdXRleCk7CiAJCWlmICgha2h1Z2VwYWdlZF9lbmFibGVkKCkpCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay10ZXN0LmMgYi9tbS9rbWVtbGVhay10ZXN0LmMKaW5kZXggMTc3YTUxNi4uZmYwZDk3NyAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWstdGVzdC5jCisrKyBiL21tL2ttZW1sZWFrLXRlc3QuYwpAQCAtNzUsMTMgKzc1LDExIEBACiAJICogYWZ0ZXIgdGhlIG1vZHVsZSBpcyByZW1vdmVkLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCWVsZW0gPSBrbWFsbG9jKHNpemVvZigqZWxlbSksIEdGUF9LRVJORUwpOwotCQlwcl9pbmZvKCJrbWVtbGVhazoga21hbGxvYyhzaXplb2YoKmVsZW0pKSA9ICVwXG4iLCBlbGVtKTsKKwkJZWxlbSA9IGt6YWxsb2Moc2l6ZW9mKCplbGVtKSwgR0ZQX0tFUk5FTCk7CisJCXByX2luZm8oImttZW1sZWFrOiBremFsbG9jKHNpemVvZigqZWxlbSkpID0gJXBcbiIsIGVsZW0pOwogCQlpZiAoIWVsZW0pCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJbWVtc2V0KGVsZW0sIDAsIHNpemVvZigqZWxlbSkpOwogCQlJTklUX0xJU1RfSEVBRCgmZWxlbS0+bGlzdCk7Ci0KIAkJbGlzdF9hZGRfdGFpbCgmZWxlbS0+bGlzdCwgJnRlc3RfbGlzdCk7CiAJfQogCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuYwppbmRleCBiZDliYzIxLi44NDIyNWYzIDEwMDY0NAotLS0gYS9tbS9rbWVtbGVhay5jCisrKyBiL21tL2ttZW1sZWFrLmMKQEAgLTExMyw3ICsxMTMsOSBAQAogI2RlZmluZSBCWVRFU19QRVJfUE9JTlRFUglzaXplb2Yodm9pZCAqKQogCiAvKiBHRlAgYml0bWFzayBmb3Iga21lbWxlYWsgaW50ZXJuYWwgYWxsb2NhdGlvbnMgKi8KLSNkZWZpbmUgR0ZQX0tNRU1MRUFLX01BU0sJKEdGUF9LRVJORUwgfCBHRlBfQVRPTUlDKQorI2RlZmluZSBnZnBfa21lbWxlYWtfbWFzayhnZnApCSgoKGdmcCkgJiAoR0ZQX0tFUk5FTCB8IEdGUF9BVE9NSUMpKSB8IFwKKwkJCQkgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MgfCBcCisJCQkJIF9fR0ZQX05PV0FSTikKIAogLyogc2Nhbm5pbmcgYXJlYSBpbnNpZGUgYSBtZW1vcnkgYmxvY2sgKi8KIHN0cnVjdCBrbWVtbGVha19zY2FuX2FyZWEgewpAQCAtNTExLDkgKzUxMywxMCBAQAogCXN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDsKIAlzdHJ1Y3QgcHJpb190cmVlX25vZGUgKm5vZGU7CiAKLQlvYmplY3QgPSBrbWVtX2NhY2hlX2FsbG9jKG9iamVjdF9jYWNoZSwgZ2ZwICYgR0ZQX0tNRU1MRUFLX01BU0spOworCW9iamVjdCA9IGttZW1fY2FjaGVfYWxsb2Mob2JqZWN0X2NhY2hlLCBnZnBfa21lbWxlYWtfbWFzayhnZnApKTsKIAlpZiAoIW9iamVjdCkgewotCQlrbWVtbGVha19zdG9wKCJDYW5ub3QgYWxsb2NhdGUgYSBrbWVtbGVha19vYmplY3Qgc3RydWN0dXJlXG4iKTsKKwkJcHJfd2FybmluZygiQ2Fubm90IGFsbG9jYXRlIGEga21lbWxlYWtfb2JqZWN0IHN0cnVjdHVyZVxuIik7CisJCWttZW1sZWFrX2Rpc2FibGUoKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC03MzQsOSArNzM3LDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWFyZWEgPSBrbWVtX2NhY2hlX2FsbG9jKHNjYW5fYXJlYV9jYWNoZSwgZ2ZwICYgR0ZQX0tNRU1MRUFLX01BU0spOworCWFyZWEgPSBrbWVtX2NhY2hlX2FsbG9jKHNjYW5fYXJlYV9jYWNoZSwgZ2ZwX2ttZW1sZWFrX21hc2soZ2ZwKSk7CiAJaWYgKCFhcmVhKSB7Ci0JCWttZW1sZWFrX3dhcm4oIkNhbm5vdCBhbGxvY2F0ZSBhIHNjYW4gYXJlYVxuIik7CisJCXByX3dhcm5pbmcoIkNhbm5vdCBhbGxvY2F0ZSBhIHNjYW4gYXJlYVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmMKaW5kZXggYmRiYTI0NS4uNDYxOGZkYSAxMDA2NDQKLS0tIGEvbW0vbWVtYmxvY2suYworKysgYi9tbS9tZW1ibG9jay5jCkBAIC0xMzcsOCArMTM3LDYgQEAKIAogCUJVR19PTigwID09IHNpemUpOwogCi0Jc2l6ZSA9IG1lbWJsb2NrX2FsaWduX3VwKHNpemUsIGFsaWduKTsKLQogCS8qIFB1bXAgdXAgbWF4X2FkZHIgKi8KIAlpZiAoZW5kID09IE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUpCiAJCWVuZCA9IG1lbWJsb2NrLmN1cnJlbnRfbGltaXQ7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggZGI3NmVmNy4uZGE1M2EyNSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNjEyLDggKzYxMiwxMCBAQAogCS8qIHBhZ2VpbiBvZiBhIGJpZyBwYWdlIGlzIGFuIGV2ZW50LiBTbywgaWdub3JlIHBhZ2Ugc2l6ZSAqLwogCWlmIChucl9wYWdlcyA+IDApCiAJCV9fdGhpc19jcHVfaW5jKG1lbS0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9TVEFUX1BHUEdJTl9DT1VOVF0pOwotCWVsc2UKKwllbHNlIHsKIAkJX190aGlzX2NwdV9pbmMobWVtLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX1NUQVRfUEdQR09VVF9DT1VOVF0pOworCQlucl9wYWdlcyA9IC1ucl9wYWdlczsgLyogZm9yIGV2ZW50ICovCisJfQogCiAJX190aGlzX2NwdV9hZGQobWVtLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX0VWRU5UU10sIG5yX3BhZ2VzKTsKIApAQCAtMTExMSw2ICsxMTEzLDIzIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCisvKioKKyAqIG1lbV9jZ3JvdXBfY2hlY2tfbWFyZ2luIC0gY2hlY2sgaWYgdGhlIG1lbW9yeSBjZ3JvdXAgYWxsb3dzIGNoYXJnaW5nCisgKiBAbWVtOiBtZW1vcnkgY2dyb3VwIHRvIGNoZWNrCisgKiBAYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIGNhbGxlciBpbnRlbmRzIHRvIGNoYXJnZQorICoKKyAqIFJldHVybnMgYSBib29sZWFuIHZhbHVlIG9uIHdoZXRoZXIgQG1lbSBjYW4gYmUgY2hhcmdlZCBAYnl0ZXMgb3IKKyAqIHdoZXRoZXIgdGhpcyB3b3VsZCBleGNlZWQgdGhlIGxpbWl0LgorICovCitzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX2NoZWNrX21hcmdpbihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCB1bnNpZ25lZCBsb25nIGJ5dGVzKQoreworCWlmICghcmVzX2NvdW50ZXJfY2hlY2tfbWFyZ2luKCZtZW0tPnJlcywgYnl0ZXMpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGRvX3N3YXBfYWNjb3VudCAmJiAhcmVzX2NvdW50ZXJfY2hlY2tfbWFyZ2luKCZtZW0tPm1lbXN3LCBieXRlcykpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJc3RydWN0IGNncm91cCAqY2dycCA9IG1lbWNnLT5jc3MuY2dyb3VwOwpAQCAtMTgzMiwyNyArMTg1MSwzOSBAQAogCQlpZiAobGlrZWx5KCFyZXQpKQogCQkJcmV0dXJuIENIQVJHRV9PSzsKIAorCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIGNzaXplKTsKIAkJbWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fcmVzX2NvdW50ZXIoZmFpbF9yZXMsIG1lbXN3KTsKIAkJZmxhZ3MgfD0gTUVNX0NHUk9VUF9SRUNMQUlNX05PU1dBUDsKIAl9IGVsc2UKIAkJbWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fcmVzX2NvdW50ZXIoZmFpbF9yZXMsIHJlcyk7Ci0KLQlpZiAoY3NpemUgPiBQQUdFX1NJWkUpIC8qIGNoYW5nZSBjc2l6ZSBhbmQgcmV0cnkgKi8KKwkvKgorCSAqIGNzaXplIGNhbiBiZSBlaXRoZXIgYSBodWdlIHBhZ2UgKEhQQUdFX1NJWkUpLCBhIGJhdGNoIG9mCisJICogcmVndWxhciBwYWdlcyAoQ0hBUkdFX1NJWkUpLCBvciBhIHNpbmdsZSByZWd1bGFyIHBhZ2UKKwkgKiAoUEFHRV9TSVpFKS4KKwkgKgorCSAqIE5ldmVyIHJlY2xhaW0gb24gYmVoYWxmIG9mIG9wdGlvbmFsIGJhdGNoaW5nLCByZXRyeSB3aXRoIGEKKwkgKiBzaW5nbGUgcGFnZSBpbnN0ZWFkLgorCSAqLworCWlmIChjc2l6ZSA9PSBDSEFSR0VfU0laRSkKIAkJcmV0dXJuIENIQVJHRV9SRVRSWTsKIAogCWlmICghKGdmcF9tYXNrICYgX19HRlBfV0FJVCkpCiAJCXJldHVybiBDSEFSR0VfV09VTERCTE9DSzsKIAogCXJldCA9IG1lbV9jZ3JvdXBfaGllcmFyY2hpY2FsX3JlY2xhaW0obWVtX292ZXJfbGltaXQsIE5VTEwsCi0JCQkJCWdmcF9tYXNrLCBmbGFncyk7CisJCQkJCSAgICAgIGdmcF9tYXNrLCBmbGFncyk7CisJaWYgKG1lbV9jZ3JvdXBfY2hlY2tfbWFyZ2luKG1lbV9vdmVyX2xpbWl0LCBjc2l6ZSkpCisJCXJldHVybiBDSEFSR0VfUkVUUlk7CiAJLyoKLQkgKiB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKCkgbWlnaHQgbm90IGdpdmUgdXMgYSBmdWxsCi0JICogcGljdHVyZSBvZiByZWNsYWltLiBTb21lIHBhZ2VzIGFyZSByZWNsYWltZWQgYW5kIG1pZ2h0IGJlCi0JICogbW92ZWQgdG8gc3dhcCBjYWNoZSBvciBqdXN0IHVubWFwcGVkIGZyb20gdGhlIGNncm91cC4KLQkgKiBDaGVjayB0aGUgbGltaXQgYWdhaW4gdG8gc2VlIGlmIHRoZSByZWNsYWltIHJlZHVjZWQgdGhlCi0JICogY3VycmVudCB1c2FnZSBvZiB0aGUgY2dyb3VwIGJlZm9yZSBnaXZpbmcgdXAKKwkgKiBFdmVuIHRob3VnaCB0aGUgbGltaXQgaXMgZXhjZWVkZWQgYXQgdGhpcyBwb2ludCwgcmVjbGFpbQorCSAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlCisJICogYmVmb3JlIGtpbGxpbmcgdGhlIHRhc2suCisJICoKKwkgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlcgorCSAqIHVubGlrZWx5IHRvIHN1Y2NlZWQgc28gY2xvc2UgdG8gdGhlIGxpbWl0LCBhbmQgd2UgZmFsbCBiYWNrCisJICogdG8gcmVndWxhciBwYWdlcyBhbnl3YXkgaW4gY2FzZSBvZiBmYWlsdXJlLgogCSAqLwotCWlmIChyZXQgfHwgbWVtX2Nncm91cF9jaGVja191bmRlcl9saW1pdChtZW1fb3Zlcl9saW1pdCkpCisJaWYgKGNzaXplID09IFBBR0VfU0laRSAmJiByZXQpCiAJCXJldHVybiBDSEFSR0VfUkVUUlk7CiAKIAkvKgpAQCAtMjE0NCw2ICsyMTc1LDggQEAKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnRhaWxfcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAodGFpbCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCisJCXJldHVybjsKIAkvKgogCSAqIFdlIGhhdmUgbm8gcmFjZXMgd2l0aCBjaGFyZ2UvdW5jaGFyZ2UgYnV0IHdpbGwgaGF2ZSByYWNlcyB3aXRoCiAJICogcGFnZSBzdGF0ZSBhY2NvdW50aW5nLgpAQCAtMjIzMyw3ICsyMjY2LDEyIEBACiB7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQorCS8qCisJICogVGhlIHBhZ2UgaXMgaXNvbGF0ZWQgZnJvbSBMUlUuIFNvLCBjb2xsYXBzZSBmdW5jdGlvbgorCSAqIHdpbGwgbm90IGhhbmRsZSB0aGlzIHBhZ2UuIEJ1dCBwYWdlIHNwbGl0dGluZyBjYW4gaGFwcGVuLgorCSAqIERvIHRoaXMgY2hlY2sgdW5kZXIgY29tcG91bmRfcGFnZV9sb2NrKCkuIFRoZSBjYWxsZXIgc2hvdWxkCisJICogaG9sZCBpdC4KKwkgKi8KIAlpZiAoKGNoYXJnZV9zaXplID4gUEFHRV9TSVpFKSAmJiAhUGFnZVRyYW5zSHVnZShwYy0+cGFnZSkpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTIyNjUsNyArMjMwMyw3IEBACiAJc3RydWN0IGNncm91cCAqY2cgPSBjaGlsZC0+Y3NzLmNncm91cDsKIAlzdHJ1Y3QgY2dyb3VwICpwY2cgPSBjZy0+cGFyZW50OwogCXN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQ7Ci0JaW50IGNoYXJnZSA9IFBBR0VfU0laRTsKKwlpbnQgcGFnZV9zaXplID0gUEFHRV9TSVpFOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIApAQCAtMjI3OCwyMyArMjMxNiwyNiBAQAogCQlnb3RvIG91dDsKIAlpZiAoaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkKIAkJZ290byBwdXQ7Ci0JLyogVGhlIHBhZ2UgaXMgaXNvbGF0ZWQgZnJvbSBMUlUgYW5kIHdlIGhhdmUgbm8gcmFjZSB3aXRoIHNwbGl0dGluZyAqLwotCWNoYXJnZSA9IFBBR0VfU0laRSA8PCBjb21wb3VuZF9vcmRlcihwYWdlKTsKKworCWlmIChQYWdlVHJhbnNIdWdlKHBhZ2UpKQorCQlwYWdlX3NpemUgPSBIUEFHRV9TSVpFOwogCiAJcGFyZW50ID0gbWVtX2Nncm91cF9mcm9tX2NvbnQocGNnKTsKLQlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShOVUxMLCBnZnBfbWFzaywgJnBhcmVudCwgZmFsc2UsIGNoYXJnZSk7CisJcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UoTlVMTCwgZ2ZwX21hc2ssCisJCQkJJnBhcmVudCwgZmFsc2UsIHBhZ2Vfc2l6ZSk7CiAJaWYgKHJldCB8fCAhcGFyZW50KQogCQlnb3RvIHB1dF9iYWNrOwogCi0JaWYgKGNoYXJnZSA+IFBBR0VfU0laRSkKKwlpZiAocGFnZV9zaXplID4gUEFHRV9TSVpFKQogCQlmbGFncyA9IGNvbXBvdW5kX2xvY2tfaXJxc2F2ZShwYWdlKTsKIAotCXJldCA9IG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHBjLCBjaGlsZCwgcGFyZW50LCB0cnVlLCBjaGFyZ2UpOworCXJldCA9IG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHBjLCBjaGlsZCwgcGFyZW50LCB0cnVlLCBwYWdlX3NpemUpOwogCWlmIChyZXQpCi0JCW1lbV9jZ3JvdXBfY2FuY2VsX2NoYXJnZShwYXJlbnQsIGNoYXJnZSk7Ci1wdXRfYmFjazoKLQlpZiAoY2hhcmdlID4gUEFHRV9TSVpFKQorCQltZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UocGFyZW50LCBwYWdlX3NpemUpOworCisJaWYgKHBhZ2Vfc2l6ZSA+IFBBR0VfU0laRSkKIAkJY29tcG91bmRfdW5sb2NrX2lycXJlc3RvcmUocGFnZSwgZmxhZ3MpOworcHV0X2JhY2s6CiAJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIHB1dDoKIAlwdXRfcGFnZShwYWdlKTsKQEAgLTIzMTIsMTMgKzIzNTMsMTkgQEAKIAkJCQlnZnBfdCBnZnBfbWFzaywgZW51bSBjaGFyZ2VfdHlwZSBjdHlwZSkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtID0gTlVMTDsKLQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwotCWludCByZXQ7CiAJaW50IHBhZ2Vfc2l6ZSA9IFBBR0VfU0laRTsKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOworCWJvb2wgb29tID0gdHJ1ZTsKKwlpbnQgcmV0OwogCiAJaWYgKFBhZ2VUcmFuc0h1Z2UocGFnZSkpIHsKIAkJcGFnZV9zaXplIDw8PSBjb21wb3VuZF9vcmRlcihwYWdlKTsKIAkJVk1fQlVHX09OKCFQYWdlVHJhbnNIdWdlKHBhZ2UpKTsKKwkJLyoKKwkJICogTmV2ZXIgT09NLWtpbGwgYSBwcm9jZXNzIGZvciBhIGh1Z2UgcGFnZS4gIFRoZQorCQkgKiBmYXVsdCBoYW5kbGVyIHdpbGwgZmFsbCBiYWNrIHRvIHJlZ3VsYXIgcGFnZXMuCisJCSAqLworCQlvb20gPSBmYWxzZTsKIAl9CiAKIAlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKQEAgLTIzMjcsNyArMjM3NCw3IEBACiAJCXJldHVybiAwOwogCXByZWZldGNodyhwYyk7CiAKLQlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShtbSwgZ2ZwX21hc2ssICZtZW0sIHRydWUsIHBhZ2Vfc2l6ZSk7CisJcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UobW0sIGdmcF9tYXNrLCAmbWVtLCBvb20sIHBhZ2Vfc2l6ZSk7CiAJaWYgKHJldCB8fCAhbWVtKQogCQlyZXR1cm4gcmV0OwogCkBAIC01MDEzLDkgKzUwNjAsOSBAQAogc3RhdGljIGludCBfX2luaXQgZW5hYmxlX3N3YXBfYWNjb3VudChjaGFyICpzKQogewogCS8qIGNvbnNpZGVyIGVuYWJsZWQgaWYgbm8gcGFyYW1ldGVyIG9yIDEgaXMgZ2l2ZW4gKi8KLQlpZiAoIXMgfHwgIXN0cmNtcChzLCAiMSIpKQorCWlmICghKCpzKSB8fCAhc3RyY21wKHMsICI9MSIpKQogCQlyZWFsbHlfZG9fc3dhcF9hY2NvdW50ID0gMTsKLQllbHNlIGlmICghc3RyY21wKHMsICIwIikpCisJZWxzZSBpZiAoIXN0cmNtcChzLCAiPTAiKSkKIAkJcmVhbGx5X2RvX3N3YXBfYWNjb3VudCA9IDA7CiAJcmV0dXJuIDE7CiB9CkBAIC01MDIzLDcgKzUwNzAsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX3N3YXBfYWNjb3VudChjaGFyICpzKQogewotCWVuYWJsZV9zd2FwX2FjY291bnQoIjAiKTsKKwlwcmludGtfb25jZSgibm9zd2FwYWNjb3VudCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMi42LjQwLiBVc2Ugc3dhcGFjY291bnQ9MCBpbnN0ZWFkXG4iKTsKKwllbmFibGVfc3dhcF9hY2NvdW50KCI9MCIpOwogCXJldHVybiAxOwogfQogX19zZXR1cCgibm9zd2FwYWNjb3VudCIsIGRpc2FibGVfc3dhcF9hY2NvdW50KTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDU0OGZiZDcuLjAyMDdjMmYgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMjMzLDggKzIzMyw4IEBACiAJfQogCiAJLyoKLQkgKiBPbmx5IGFsbCBzaHJpbmtfc2xhYiBoZXJlICh3aGljaCB3b3VsZCBhbHNvCi0JICogc2hyaW5rIG90aGVyIGNhY2hlcykgaWYgYWNjZXNzIGlzIG5vdCBwb3RlbnRpYWxseSBmYXRhbC4KKwkgKiBPbmx5IGNhbGwgc2hyaW5rX3NsYWIgaGVyZSAod2hpY2ggd291bGQgYWxzbyBzaHJpbmsgb3RoZXIgY2FjaGVzKSBpZgorCSAqIGFjY2VzcyBpcyBub3QgcG90ZW50aWFsbHkgZmF0YWwuCiAJICovCiAJaWYgKGFjY2VzcykgewogCQlpbnQgbnI7CkBAIC0zODYsOCArMzg2LDYgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAlzdHJ1Y3QgYW5vbl92bWEgKmF2OwogCi0JaWYgKCFQYWdlSHVnZShwYWdlKSAmJiB1bmxpa2VseShzcGxpdF9odWdlX3BhZ2UocGFnZSkpKQotCQlyZXR1cm47CiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlhdiA9IHBhZ2VfbG9ja19hbm9uX3ZtYShwYWdlKTsKIAlpZiAoYXYgPT0gTlVMTCkJLyogTm90IGFjdHVhbGx5IG1hcHBlZCBhbnltb3JlICovCkBAIC04NTYsNiArODU0LDcgQEAKIAlpbnQgcmV0OwogCWludCBraWxsID0gMTsKIAlzdHJ1Y3QgcGFnZSAqaHBhZ2UgPSBjb21wb3VuZF9oZWFkKHApOworCXN0cnVjdCBwYWdlICpwcGFnZTsKIAogCWlmIChQYWdlUmVzZXJ2ZWQocCkgfHwgUGFnZVNsYWIocCkpCiAJCXJldHVybiBTV0FQX1NVQ0NFU1M7CkBAIC04OTcsNiArODk2LDQ0IEBACiAJfQogCiAJLyoKKwkgKiBwcGFnZTogcG9pc29uZWQgcGFnZQorCSAqICAgaWYgcCBpcyByZWd1bGFyIHBhZ2UoNGsgcGFnZSkKKwkgKiAgICAgICAgcHBhZ2UgPT0gcmVhbCBwb2lzb25lZCBwYWdlOworCSAqICAgZWxzZSBwIGlzIGh1Z2V0bGIgb3IgVEhQLCBwcGFnZSA9PSBoZWFkIHBhZ2UuCisJICovCisJcHBhZ2UgPSBocGFnZTsKKworCWlmIChQYWdlVHJhbnNIdWdlKGhwYWdlKSkgeworCQkvKgorCQkgKiBWZXJpZnkgdGhhdCB0aGlzIGlzbid0IGEgaHVnZXRsYmZzIGhlYWQgcGFnZSwgdGhlIGNoZWNrIGZvcgorCQkgKiBQYWdlQW5vbiBpcyBqdXN0IGZvciBhdm9pZCB0cmlwcGluZyBhIHNwbGl0X2h1Z2VfcGFnZQorCQkgKiBpbnRlcm5hbCBkZWJ1ZyBjaGVjaywgYXMgc3BsaXRfaHVnZV9wYWdlIHJlZnVzZXMgdG8gZGVhbCB3aXRoCisJCSAqIGFueXRoaW5nIHRoYXQgaXNuJ3QgYW4gYW5vbiBwYWdlLiBQYWdlQW5vbiBjYW4ndCBnbyBhd2F5IGZybworCQkgKiB1bmRlciB1cyBiZWNhdXNlIHdlIGhvbGQgYSByZWZjb3VudCBvbiB0aGUgaHBhZ2UsIHdpdGhvdXQgYQorCQkgKiByZWZjb3VudCBvbiB0aGUgaHBhZ2UuIHNwbGl0X2h1Z2VfcGFnZSBjYW4ndCBiZSBzYWZlbHkgY2FsbGVkCisJCSAqIGluIHRoZSBmaXJzdCBwbGFjZSwgaGF2aW5nIGEgcmVmY291bnQgb24gdGhlIHRhaWwgaXNuJ3QKKwkJICogZW5vdWdoICogdG8gYmUgc2FmZS4KKwkJICovCisJCWlmICghUGFnZUh1Z2UoaHBhZ2UpICYmIFBhZ2VBbm9uKGhwYWdlKSkgeworCQkJaWYgKHVubGlrZWx5KHNwbGl0X2h1Z2VfcGFnZShocGFnZSkpKSB7CisJCQkJLyoKKwkJCQkgKiBGSVhNRTogaWYgc3BsaXR0aW5nIFRIUCBpcyBmYWlsZWQsIGl0IGlzCisJCQkJICogYmV0dGVyIHRvIHN0b3AgdGhlIGZvbGxvd2luZyBvcGVyYXRpb24gcmF0aGVyCisJCQkJICogdGhhbiBjYXVzaW5nIHBhbmljIGJ5IHVubWFwcGluZy4gU3lzdGVtIG1pZ2h0CisJCQkJICogc3Vydml2ZSBpZiB0aGUgcGFnZSBpcyBmcmVlZCBsYXRlci4KKwkJCQkgKi8KKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJCSJNQ0UgJSNseDogZmFpbGVkIHRvIHNwbGl0IFRIUFxuIiwgcGZuKTsKKworCQkJCUJVR19PTighUGFnZUhXUG9pc29uKHApKTsKKwkJCQlyZXR1cm4gU1dBUF9GQUlMOworCQkJfQorCQkJLyogVEhQIGlzIHNwbGl0LCBzbyBwcGFnZSBzaG91bGQgYmUgdGhlIHJlYWwgcG9pc29uZWQgcGFnZS4gKi8KKwkJCXBwYWdlID0gcDsKKwkJfQorCX0KKworCS8qCiAJICogRmlyc3QgY29sbGVjdCBhbGwgdGhlIHByb2Nlc3NlcyB0aGF0IGhhdmUgdGhlIHBhZ2UKIAkgKiBtYXBwZWQgaW4gZGlydHkgZm9ybS4gIFRoaXMgaGFzIHRvIGJlIGRvbmUgYmVmb3JlIHRyeV90b191bm1hcCwKIAkgKiBiZWNhdXNlIHR0dSB0YWtlcyB0aGUgcm1hcCBkYXRhIHN0cnVjdHVyZXMgZG93bi4KQEAgLTkwNSwxMiArOTQyLDE4IEBACiAJICogdGhlcmUncyBub3RoaW5nIHRoYXQgY2FuIGJlIGRvbmUuCiAJICovCiAJaWYgKGtpbGwpCi0JCWNvbGxlY3RfcHJvY3MoaHBhZ2UsICZ0b2tpbGwpOworCQljb2xsZWN0X3Byb2NzKHBwYWdlLCAmdG9raWxsKTsKIAotCXJldCA9IHRyeV90b191bm1hcChocGFnZSwgdHR1KTsKKwlpZiAoaHBhZ2UgIT0gcHBhZ2UpCisJCWxvY2tfcGFnZV9ub3N5bmMocHBhZ2UpOworCisJcmV0ID0gdHJ5X3RvX3VubWFwKHBwYWdlLCB0dHUpOwogCWlmIChyZXQgIT0gU1dBUF9TVUNDRVNTKQogCQlwcmludGsoS0VSTl9FUlIgIk1DRSAlI2x4OiBmYWlsZWQgdG8gdW5tYXAgcGFnZSAobWFwY291bnQ9JWQpXG4iLAotCQkJCXBmbiwgcGFnZV9tYXBjb3VudChocGFnZSkpOworCQkJCXBmbiwgcGFnZV9tYXBjb3VudChwcGFnZSkpOworCisJaWYgKGhwYWdlICE9IHBwYWdlKQorCQl1bmxvY2tfcGFnZShwcGFnZSk7CiAKIAkvKgogCSAqIE5vdyB0aGF0IHRoZSBkaXJ0eSBiaXQgaGFzIGJlZW4gcHJvcGFnYXRlZCB0byB0aGUKQEAgLTkyMSw3ICs5NjQsNyBAQAogCSAqIHVzZSBhIG1vcmUgZm9yY2UtZnVsbCB1bmNhdGNoYWJsZSBraWxsIHRvIHByZXZlbnQKIAkgKiBhbnkgYWNjZXNzZXMgdG8gdGhlIHBvaXNvbmVkIG1lbW9yeS4KIAkgKi8KLQlraWxsX3Byb2NzX2FvKCZ0b2tpbGwsICEhUGFnZURpcnR5KGhwYWdlKSwgdHJhcG5vLAorCWtpbGxfcHJvY3NfYW8oJnRva2lsbCwgISFQYWdlRGlydHkocHBhZ2UpLCB0cmFwbm8sCiAJCSAgICAgIHJldCAhPSBTV0FQX1NVQ0NFU1MsIHAsIHBmbik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTAyMiwxOSArMTA2NSwyMiBAQAogCSAqIFRoZSBjaGVjayAodW5uZWNlc3NhcmlseSkgaWdub3JlcyBMUlUgcGFnZXMgYmVpbmcgaXNvbGF0ZWQgYW5kCiAJICogd2Fsa2VkIGJ5IHRoZSBwYWdlIHJlY2xhaW0gY29kZSwgaG93ZXZlciB0aGF0J3Mgbm90IGEgYmlnIGxvc3MuCiAJICovCi0JaWYgKCFQYWdlTFJVKHApICYmICFQYWdlSHVnZShwKSkKLQkJc2hha2VfcGFnZShwLCAwKTsKLQlpZiAoIVBhZ2VMUlUocCkgJiYgIVBhZ2VIdWdlKHApKSB7Ci0JCS8qCi0JCSAqIHNoYWtlX3BhZ2UgY291bGQgaGF2ZSB0dXJuZWQgaXQgZnJlZS4KLQkJICovCi0JCWlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHsKLQkJCWFjdGlvbl9yZXN1bHQocGZuLCAiZnJlZSBidWRkeSwgMm5kIHRyeSIsIERFTEFZRUQpOwotCQkJcmV0dXJuIDA7CisJaWYgKCFQYWdlSHVnZShwKSAmJiAhUGFnZVRyYW5zQ29tcG91bmQocCkpIHsKKwkJaWYgKCFQYWdlTFJVKHApKQorCQkJc2hha2VfcGFnZShwLCAwKTsKKwkJaWYgKCFQYWdlTFJVKHApKSB7CisJCQkvKgorCQkJICogc2hha2VfcGFnZSBjb3VsZCBoYXZlIHR1cm5lZCBpdCBmcmVlLgorCQkJICovCisJCQlpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHApKSB7CisJCQkJYWN0aW9uX3Jlc3VsdChwZm4sICJmcmVlIGJ1ZGR5LCAybmQgdHJ5IiwKKwkJCQkJCURFTEFZRUQpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJYWN0aW9uX3Jlc3VsdChwZm4sICJub24gTFJVIiwgSUdOT1JFRCk7CisJCQlwdXRfcGFnZShwKTsKKwkJCXJldHVybiAtRUJVU1k7CiAJCX0KLQkJYWN0aW9uX3Jlc3VsdChwZm4sICJub24gTFJVIiwgSUdOT1JFRCk7Ci0JCXB1dF9wYWdlKHApOwotCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCS8qCkBAIC0xMDY0LDcgKzExMTAsNyBAQAogCSAqIEZvciBlcnJvciBvbiB0aGUgdGFpbCBwYWdlLCB3ZSBzaG91bGQgc2V0IFBHX2h3cG9pc29uCiAJICogb24gdGhlIGhlYWQgcGFnZSB0byBzaG93IHRoYXQgdGhlIGh1Z2VwYWdlIGlzIGh3cG9pc29uZWQKIAkgKi8KLQlpZiAoUGFnZVRhaWwocCkgJiYgVGVzdFNldFBhZ2VIV1BvaXNvbihocGFnZSkpIHsKKwlpZiAoUGFnZUh1Z2UocCkgJiYgUGFnZVRhaWwocCkgJiYgVGVzdFNldFBhZ2VIV1BvaXNvbihocGFnZSkpIHsKIAkJYWN0aW9uX3Jlc3VsdChwZm4sICJodWdlcGFnZSBhbHJlYWR5IGhhcmR3YXJlIHBvaXNvbmVkIiwKIAkJCQlJR05PUkVEKTsKIAkJdW5sb2NrX3BhZ2UoaHBhZ2UpOwpAQCAtMTI5NSw3ICsxMzQxLDEwIEBACiAJcmV0ID0gbWlncmF0ZV9odWdlX3BhZ2VzKCZwYWdlbGlzdCwgbmV3X3BhZ2UsIE1QT0xfTUZfTU9WRV9BTEwsIDAsCiAJCQkJdHJ1ZSk7CiAJaWYgKHJldCkgewotCQlwdXRiYWNrX2xydV9wYWdlcygmcGFnZWxpc3QpOworCQlzdHJ1Y3QgcGFnZSAqcGFnZTEsICpwYWdlMjsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UxLCBwYWdlMiwgJnBhZ2VsaXN0LCBscnUpCisJCQlwdXRfcGFnZShwYWdlMSk7CisKIAkJcHJfZGVidWcoInNvZnQgb2ZmbGluZTogJSNseDogbWlncmF0aW9uIGZhaWxlZCAlZCwgdHlwZSAlbHhcbiIsCiAJCQkgcGZuLCByZXQsIHBhZ2UtPmZsYWdzKTsKIAkJaWYgKHJldCA+IDApCkBAIC0xNDE5LDYgKzE0NjgsNyBAQAogCQlyZXQgPSBtaWdyYXRlX3BhZ2VzKCZwYWdlbGlzdCwgbmV3X3BhZ2UsIE1QT0xfTUZfTU9WRV9BTEwsCiAJCQkJCQkJCTAsIHRydWUpOwogCQlpZiAocmV0KSB7CisJCQlwdXRiYWNrX2xydV9wYWdlcygmcGFnZWxpc3QpOwogCQkJcHJfaW5mbygic29mdCBvZmZsaW5lOiAlI2x4OiBtaWdyYXRpb24gZmFpbGVkICVkLCB0eXBlICVseFxuIiwKIAkJCQlwZm4sIHJldCwgcGFnZS0+ZmxhZ3MpOwogCQkJaWYgKHJldCA+IDApCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDMxMjUwZmEuLjU4MjM2OTggMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC0yMjE5LDcgKzIyMTksNiBAQAogCQkJCQkJCSAmcHRsKTsKIAkJCWlmICghcHRlX3NhbWUoKnBhZ2VfdGFibGUsIG9yaWdfcHRlKSkgewogCQkJCXVubG9ja19wYWdlKG9sZF9wYWdlKTsKLQkJCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2xkX3BhZ2UpOwogCQkJCWdvdG8gdW5sb2NrOwogCQkJfQogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKQEAgLTIyODksNyArMjI4OCw2IEBACiAJCQkJCQkJICZwdGwpOwogCQkJaWYgKCFwdGVfc2FtZSgqcGFnZV90YWJsZSwgb3JpZ19wdGUpKSB7CiAJCQkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOwotCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShvbGRfcGFnZSk7CiAJCQkJZ290byB1bmxvY2s7CiAJCQl9CiAKQEAgLTIzNjcsMTYgKzIzNjUsNiBAQAogCX0KIAlfX1NldFBhZ2VVcHRvZGF0ZShuZXdfcGFnZSk7CiAKLQkvKgotCSAqIERvbid0IGxldCBhbm90aGVyIHRhc2ssIHdpdGggcG9zc2libHkgdW5sb2NrZWQgdm1hLAotCSAqIGtlZXAgdGhlIG1sb2NrZWQgcGFnZS4KLQkgKi8KLQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpICYmIG9sZF9wYWdlKSB7Ci0JCWxvY2tfcGFnZShvbGRfcGFnZSk7CS8qIGZvciBMUlUgbWFuaXB1bGF0aW9uICovCi0JCWNsZWFyX3BhZ2VfbWxvY2sob2xkX3BhZ2UpOwotCQl1bmxvY2tfcGFnZShvbGRfcGFnZSk7Ci0JfQotCiAJaWYgKG1lbV9jZ3JvdXBfbmV3cGFnZV9jaGFyZ2UobmV3X3BhZ2UsIG1tLCBHRlBfS0VSTkVMKSkKIAkJZ290byBvb21fZnJlZV9uZXc7CiAKQEAgLTI0NDQsMTAgKzI0MzIsMjAgQEAKIAogCWlmIChuZXdfcGFnZSkKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKG5ld19wYWdlKTsKLQlpZiAob2xkX3BhZ2UpCi0JCXBhZ2VfY2FjaGVfcmVsZWFzZShvbGRfcGFnZSk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOworCWlmIChvbGRfcGFnZSkgeworCQkvKgorCQkgKiBEb24ndCBsZXQgYW5vdGhlciB0YXNrLCB3aXRoIHBvc3NpYmx5IHVubG9ja2VkIHZtYSwKKwkJICoga2VlcCB0aGUgbWxvY2tlZCBwYWdlLgorCQkgKi8KKwkJaWYgKChyZXQgJiBWTV9GQVVMVF9XUklURSkgJiYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpKSB7CisJCQlsb2NrX3BhZ2Uob2xkX3BhZ2UpOwkvKiBMUlUgbWFuaXB1bGF0aW9uICovCisJCQltdW5sb2NrX3ZtYV9wYWdlKG9sZF9wYWdlKTsKKwkJCXVubG9ja19wYWdlKG9sZF9wYWdlKTsKKwkJfQorCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2xkX3BhZ2UpOworCX0KIAlyZXR1cm4gcmV0Owogb29tX2ZyZWVfbmV3OgogCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXdfcGFnZSk7CkBAIC0yNjUwLDYgKzI2NDgsNyBAQAogCQlkZXRhaWxzLmxhc3RfaW5kZXggPSBVTE9OR19NQVg7CiAJZGV0YWlscy5pX21tYXBfbG9jayA9ICZtYXBwaW5nLT5pX21tYXBfbG9jazsKIAorCW11dGV4X2xvY2soJm1hcHBpbmctPnVubWFwX211dGV4KTsKIAlzcGluX2xvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKIAogCS8qIFByb3RlY3QgYWdhaW5zdCBlbmRsZXNzIHVubWFwcGluZyBsb29wcyAqLwpAQCAtMjY2Niw2ICsyNjY1LDcgQEAKIAlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpKSkKIAkJdW5tYXBfbWFwcGluZ19yYW5nZV9saXN0KCZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyLCAmZGV0YWlscyk7CiAJc3Bpbl91bmxvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKKwltdXRleF91bmxvY2soJm1hcHBpbmctPnVubWFwX211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0wodW5tYXBfbWFwcGluZ19yYW5nZSk7CiAKQEAgLTMwNTMsMTIgKzMwNTMsNiBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJY2hhcmdlZCA9IDE7Ci0JCQkvKgotCQkJICogRG9uJ3QgbGV0IGFub3RoZXIgdGFzaywgd2l0aCBwb3NzaWJseSB1bmxvY2tlZCB2bWEsCi0JCQkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCi0JCQkgKi8KLQkJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQotCQkJCWNsZWFyX3BhZ2VfbWxvY2sodm1mLnBhZ2UpOwogCQkJY29weV91c2VyX2hpZ2hwYWdlKHBhZ2UsIHZtZi5wYWdlLCBhZGRyZXNzLCB2bWEpOwogCQkJX19TZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDM2OGZjOWQuLmI1M2VjOTkgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC0xNTI0LDEwICsxNTI0LDkgQEAKIH0KIAogLyogUmV0dXJuIGEgem9uZWxpc3QgaW5kaWNhdGVkIGJ5IGdmcCBmb3Igbm9kZSByZXByZXNlbnRpbmcgYSBtZW1wb2xpY3kgKi8KLXN0YXRpYyBzdHJ1Y3Qgem9uZWxpc3QgKnBvbGljeV96b25lbGlzdChnZnBfdCBnZnAsIHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBzdHJ1Y3Qgem9uZWxpc3QgKnBvbGljeV96b25lbGlzdChnZnBfdCBnZnAsIHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSwKKwlpbnQgbmQpCiB7Ci0JaW50IG5kID0gbnVtYV9ub2RlX2lkKCk7Ci0KIAlzd2l0Y2ggKHBvbGljeS0+bW9kZSkgewogCWNhc2UgTVBPTF9QUkVGRVJSRUQ6CiAJCWlmICghKHBvbGljeS0+ZmxhZ3MgJiBNUE9MX0ZfTE9DQUwpKQpAQCAtMTY3OSw3ICsxNjc4LDcgQEAKIAkJemwgPSBub2RlX3pvbmVsaXN0KGludGVybGVhdmVfbmlkKCptcG9sLCB2bWEsIGFkZHIsCiAJCQkJaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZV92bWEodm1hKSkpLCBnZnBfZmxhZ3MpOwogCX0gZWxzZSB7Ci0JCXpsID0gcG9saWN5X3pvbmVsaXN0KGdmcF9mbGFncywgKm1wb2wpOworCQl6bCA9IHBvbGljeV96b25lbGlzdChnZnBfZmxhZ3MsICptcG9sLCBudW1hX25vZGVfaWQoKSk7CiAJCWlmICgoKm1wb2wpLT5tb2RlID09IE1QT0xfQklORCkKIAkJCSpub2RlbWFzayA9ICYoKm1wb2wpLT52Lm5vZGVzOwogCX0KQEAgLTE4MjAsNyArMTgxOSw3IEBACiAgKi8KIHN0cnVjdCBwYWdlICoKIGFsbG9jX3BhZ2VzX3ZtYShnZnBfdCBnZnAsIGludCBvcmRlciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkcikKKwkJdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSkKIHsKIAlzdHJ1Y3QgbWVtcG9saWN5ICpwb2wgPSBnZXRfdm1hX3BvbGljeShjdXJyZW50LCB2bWEsIGFkZHIpOwogCXN0cnVjdCB6b25lbGlzdCAqemw7CkBAIC0xODMwLDEzICsxODI5LDEzIEBACiAJaWYgKHVubGlrZWx5KHBvbC0+bW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpKSB7CiAJCXVuc2lnbmVkIG5pZDsKIAotCQluaWQgPSBpbnRlcmxlYXZlX25pZChwb2wsIHZtYSwgYWRkciwgUEFHRV9TSElGVCk7CisJCW5pZCA9IGludGVybGVhdmVfbmlkKHBvbCwgdm1hLCBhZGRyLCBQQUdFX1NISUZUICsgb3JkZXIpOwogCQltcG9sX2NvbmRfcHV0KHBvbCk7CiAJCXBhZ2UgPSBhbGxvY19wYWdlX2ludGVybGVhdmUoZ2ZwLCBvcmRlciwgbmlkKTsKIAkJcHV0X21lbXNfYWxsb3dlZCgpOwogCQlyZXR1cm4gcGFnZTsKIAl9Ci0JemwgPSBwb2xpY3lfem9uZWxpc3QoZ2ZwLCBwb2wpOworCXpsID0gcG9saWN5X3pvbmVsaXN0KGdmcCwgcG9sLCBub2RlKTsKIAlpZiAodW5saWtlbHkobXBvbF9uZWVkc19jb25kX3JlZihwb2wpKSkgewogCQkvKgogCQkgKiBzbG93IHBhdGg6IHJlZiBjb3VudGVkIHNoYXJlZCBwb2xpY3kKQEAgLTE4OTIsNyArMTg5MSw4IEBACiAJCXBhZ2UgPSBhbGxvY19wYWdlX2ludGVybGVhdmUoZ2ZwLCBvcmRlciwgaW50ZXJsZWF2ZV9ub2Rlcyhwb2wpKTsKIAllbHNlCiAJCXBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vZGVtYXNrKGdmcCwgb3JkZXIsCi0JCQlwb2xpY3lfem9uZWxpc3QoZ2ZwLCBwb2wpLCBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wpKTsKKwkJCQlwb2xpY3lfem9uZWxpc3QoZ2ZwLCBwb2wsIG51bWFfbm9kZV9pZCgpKSwKKwkJCQlwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wpKTsKIAlwdXRfbWVtc19hbGxvd2VkKCk7CiAJcmV0dXJuIHBhZ2U7CiB9CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggNDZmZThjYy4uMzUyZGU1NTUgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTc3Miw2ICs3NzIsNyBAQAogdW5sb2NrOgogCXVubG9ja19wYWdlKHBhZ2UpOwogCittb3ZlX25ld3BhZ2U6CiAJaWYgKHJjICE9IC1FQUdBSU4pIHsKICAJCS8qCiAgCQkgKiBBIHBhZ2UgdGhhdCBoYXMgYmVlbiBtaWdyYXRlZCBoYXMgYWxsIHJlZmVyZW5jZXMKQEAgLTc4NSw4ICs3ODYsNiBAQAogCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOwogCX0KIAotbW92ZV9uZXdwYWdlOgotCiAJLyoKIAkgKiBNb3ZlIHRoZSBuZXcgcGFnZSB0byB0aGUgTFJVLiBJZiBtaWdyYXRpb24gd2FzIG5vdCBzdWNjZXNzZnVsCiAJICogdGhlbiB0aGlzIHdpbGwgZnJlZSB0aGUgcGFnZS4KQEAgLTg4OCw3ICs4ODcsNyBAQAogICogYXJlIG1vdmFibGUgYW55bW9yZSBiZWNhdXNlIHRvIGhhcyBiZWNvbWUgZW1wdHkKICAqIG9yIG5vIHJldHJ5YWJsZSBwYWdlcyBleGlzdCBhbnltb3JlLgogICogQ2FsbGVyIHNob3VsZCBjYWxsIHB1dGJhY2tfbHJ1X3BhZ2VzIHRvIHJldHVybiBwYWdlcyB0byB0aGUgTFJVCi0gKiBvciBmcmVlIGxpc3QuCisgKiBvciBmcmVlIGxpc3Qgb25seSBpZiByZXQgIT0gMC4KICAqCiAgKiBSZXR1cm46IE51bWJlciBvZiBwYWdlcyBub3QgbWlncmF0ZWQgb3IgZXJyb3IgY29kZS4KICAqLwpAQCAtOTgxLDEwICs5ODAsNiBAQAogCX0KIAlyYyA9IDA7CiBvdXQ6Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgcGFnZTIsIGZyb20sIGxydSkKLQkJcHV0X3BhZ2UocGFnZSk7Ci0KIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMTI5MiwxNCArMTI4NywxNCBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJLyogRmluZCB0aGUgbW1fc3RydWN0ICovCi0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJdGFzayA9IHBpZCA/IGZpbmRfdGFza19ieV92cGlkKHBpZCkgOiBjdXJyZW50OwogCWlmICghdGFzaykgewotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVTUkNIOwogCX0KIAltbSA9IGdldF90YXNrX21tKHRhc2spOwotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmICghbW0pCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbW0vbWxvY2suYyBiL21tL21sb2NrLmMKaW5kZXggMTNlODFlZS4uYzM5MjRjN2YgMTAwNjQ0Ci0tLSBhL21tL21sb2NrLmMKKysrIGIvbW0vbWxvY2suYwpAQCAtMTc4LDYgKzE3OCwxMyBAQAogCWlmICgodm1hLT52bV9mbGFncyAmIChWTV9XUklURSB8IFZNX1NIQVJFRCkpID09IFZNX1dSSVRFKQogCQlndXBfZmxhZ3MgfD0gRk9MTF9XUklURTsKIAorCS8qCisJICogV2Ugd2FudCBtbG9jayB0byBzdWNjZWVkIGZvciByZWdpb25zIHRoYXQgaGF2ZSBhbnkgcGVybWlzc2lvbnMKKwkgKiBvdGhlciB0aGFuIFBST1RfTk9ORS4KKwkgKi8KKwlpZiAodm1hLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDKSkKKwkJZ3VwX2ZsYWdzIHw9IEZPTExfRk9SQ0U7CisKIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkKIAkJZ3VwX2ZsYWdzIHw9IEZPTExfTUxPQ0s7CiAKZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmMKaW5kZXggOTkyNWI2My4uMWRlOThkNCAxMDA2NDQKLS0tIGEvbW0vbXJlbWFwLmMKKysrIGIvbW0vbXJlbWFwLmMKQEAgLTk0LDkgKzk0LDcgQEAKIAkJICovCiAJCW1hcHBpbmcgPSB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZzsKIAkJc3Bpbl9sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7Ci0JCWlmIChuZXdfdm1hLT52bV90cnVuY2F0ZV9jb3VudCAmJgotCQkgICAgbmV3X3ZtYS0+dm1fdHJ1bmNhdGVfY291bnQgIT0gdm1hLT52bV90cnVuY2F0ZV9jb3VudCkKLQkJCW5ld192bWEtPnZtX3RydW5jYXRlX2NvdW50ID0gMDsKKwkJbmV3X3ZtYS0+dm1fdHJ1bmNhdGVfY291bnQgPSAwOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggOTBjMTQzOS4uY2RlZjFkNCAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMTA4OCw4ICsxMDg4LDEwIEBACiAJCXBzZXQgPSBwZXJfY3B1X3B0cih6b25lLT5wYWdlc2V0LCBjcHUpOwogCiAJCXBjcCA9ICZwc2V0LT5wY3A7Ci0JCWZyZWVfcGNwcGFnZXNfYnVsayh6b25lLCBwY3AtPmNvdW50LCBwY3ApOwotCQlwY3AtPmNvdW50ID0gMDsKKwkJaWYgKHBjcC0+Y291bnQpIHsKKwkJCWZyZWVfcGNwcGFnZXNfYnVsayh6b25lLCBwY3AtPmNvdW50LCBwY3ApOworCQkJcGNwLT5jb3VudCA9IDA7CisJCX0KIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KIH0KQEAgLTIwMzQsNiArMjAzNiwxNCBAQAogCSAqLwogCWFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzKGdmcF9tYXNrKTsKIAorCS8qCisJICogRmluZCB0aGUgdHJ1ZSBwcmVmZXJyZWQgem9uZSBpZiB0aGUgYWxsb2NhdGlvbiBpcyB1bmNvbnN0cmFpbmVkIGJ5CisJICogY3B1c2V0cy4KKwkgKi8KKwlpZiAoIShhbGxvY19mbGFncyAmIEFMTE9DX0NQVVNFVCkgJiYgIW5vZGVtYXNrKQorCQlmaXJzdF96b25lc196b25lbGlzdCh6b25lbGlzdCwgaGlnaF96b25laWR4LCBOVUxMLAorCQkJCQkmcHJlZmVycmVkX3pvbmUpOworCiAJLyogVGhpcyBpcyB0aGUgbGFzdCBjaGFuY2UsIGluIGdlbmVyYWwsIGJlZm9yZSB0aGUgZ290byBub3BhZ2UuICovCiAJcGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX21hc2ssIG5vZGVtYXNrLCBvcmRlciwgem9uZWxpc3QsCiAJCQloaWdoX3pvbmVpZHgsIGFsbG9jX2ZsYWdzICYgfkFMTE9DX05PX1dBVEVSTUFSS1MsCkBAIC0yMTkyLDcgKzIyMDIsOSBAQAogCiAJZ2V0X21lbXNfYWxsb3dlZCgpOwogCS8qIFRoZSBwcmVmZXJyZWQgem9uZSBpcyB1c2VkIGZvciBzdGF0aXN0aWNzIGxhdGVyICovCi0JZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwgbm9kZW1hc2ssICZwcmVmZXJyZWRfem9uZSk7CisJZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwKKwkJCQlub2RlbWFzayA/IDogJmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCwKKwkJCQkmcHJlZmVycmVkX3pvbmUpOwogCWlmICghcHJlZmVycmVkX3pvbmUpIHsKIAkJcHV0X21lbXNfYWxsb3dlZCgpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTUzNjQsMTAgKzUzNzYsOSBAQAogCWZvciAoZm91bmQgPSAwLCBpdGVyID0gMDsgaXRlciA8IHBhZ2VibG9ja19ucl9wYWdlczsgaXRlcisrKSB7CiAJCXVuc2lnbmVkIGxvbmcgY2hlY2sgPSBwZm4gKyBpdGVyOwogCi0JCWlmICghcGZuX3ZhbGlkX3dpdGhpbihjaGVjaykpIHsKLQkJCWl0ZXIrKzsKKwkJaWYgKCFwZm5fdmFsaWRfd2l0aGluKGNoZWNrKSkKIAkJCWNvbnRpbnVlOwotCQl9CisKIAkJcGFnZSA9IHBmbl90b19wYWdlKGNoZWNrKTsKIAkJaWYgKCFwYWdlX2NvdW50KHBhZ2UpKSB7CiAJCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKQpkaWZmIC0tZ2l0IGEvbW0vcGd0YWJsZS1nZW5lcmljLmMgYi9tbS9wZ3RhYmxlLWdlbmVyaWMuYwppbmRleCAwMzY5ZjViLi5lYjY2M2ZiIDEwMDY0NAotLS0gYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYworKysgYi9tbS9wZ3RhYmxlLWdlbmVyaWMuYwpAQCAtNiw2ICs2LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMTAgIExpbnVzIFRvcnZhbGRzCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgogCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCAwN2E0NThkLi4wMzQxYzU3IDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTE5NDAsNyArMTk0MCw3IEBACiAKIAllcnJvciA9IC1FSU5WQUw7CiAJaWYgKFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpIHsKLQkJYmRldiA9IElfQkRFVihpbm9kZSk7CisJCWJkZXYgPSBiZGdyYWIoSV9CREVWKGlub2RlKSk7CiAJCWVycm9yID0gYmxrZGV2X2dldChiZGV2LCBGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUgfCBGTU9ERV9FWENMLAogCQkJCSAgIHN5c19zd2Fwb24pOwogCQlpZiAoZXJyb3IgPCAwKSB7CmRpZmYgLS1naXQgYS9tbS90cnVuY2F0ZS5jIGIvbW0vdHJ1bmNhdGUuYwppbmRleCA0OWZlYjQ2Li5kNjQyOTZiIDEwMDY0NAotLS0gYS9tbS90cnVuY2F0ZS5jCisrKyBiL21tL3RydW5jYXRlLmMKQEAgLTIyNSw2ICsyMjUsNyBAQAogCW5leHQgPSBzdGFydDsKIAl3aGlsZSAobmV4dCA8PSBlbmQgJiYKIAkgICAgICAgcGFnZXZlY19sb29rdXAoJnB2ZWMsIG1hcHBpbmcsIG5leHQsIFBBR0VWRUNfU0laRSkpIHsKKwkJbWVtX2Nncm91cF91bmNoYXJnZV9zdGFydCgpOwogCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudCgmcHZlYyk7IGkrKykgewogCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLnBhZ2VzW2ldOwogCQkJcGdvZmZfdCBwYWdlX2luZGV4ID0gcGFnZS0+aW5kZXg7CkBAIC0yNDcsNiArMjQ4LDcgQEAKIAkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQl9CiAJCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisJCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfZW5kKCk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIApkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmNWQ5MGRlLi42NzcxZWE3IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtMTg0MSwxNiArMTg0MSwyOCBAQAogCWlmICghKHNjLT5yZWNsYWltX21vZGUgJiBSRUNMQUlNX01PREVfQ09NUEFDVElPTikpCiAJCXJldHVybiBmYWxzZTsKIAotCS8qCi0JICogSWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0gYW5kIGhhdmUgc2Nhbm5lZCB0aGUgZnVsbCBsaXN0LCBzdG9wLgotCSAqIE5PVEU6IENoZWNraW5nIGp1c3QgbnJfcmVjbGFpbWVkIHdvdWxkIGV4aXQgcmVjbGFpbS9jb21wYWN0aW9uIGZhcgotCSAqICAgICAgIGZhc3RlciBidXQgb2J2aW91c2x5IHdvdWxkIGJlIGxlc3MgbGlrZWx5IHRvIHN1Y2NlZWQKLQkgKiAgICAgICBhbGxvY2F0aW9uLiBJZiB0aGlzIGlzIGRlc2lyYWJsZSwgdXNlIEdGUF9SRVBFQVQgdG8gZGVjaWRlCi0JICogICAgICAgaWYgYm90aCByZWNsYWltZWQgYW5kIHNjYW5uZWQgc2hvdWxkIGJlIGNoZWNrZWQgb3IganVzdAotCSAqICAgICAgIHJlY2xhaW1lZAotCSAqLwotCWlmICghbnJfcmVjbGFpbWVkICYmICFucl9zY2FubmVkKQotCQlyZXR1cm4gZmFsc2U7CisJLyogQ29uc2lkZXIgc3RvcHBpbmcgZGVwZW5kaW5nIG9uIHNjYW4gYW5kIHJlY2xhaW0gYWN0aXZpdHkgKi8KKwlpZiAoc2MtPmdmcF9tYXNrICYgX19HRlBfUkVQRUFUKSB7CisJCS8qCisJCSAqIEZvciBfX0dGUF9SRVBFQVQgYWxsb2NhdGlvbnMsIHN0b3AgcmVjbGFpbWluZyBpZiB0aGUKKwkJICogZnVsbCBMUlUgbGlzdCBoYXMgYmVlbiBzY2FubmVkIGFuZCB3ZSBhcmUgc3RpbGwgZmFpbGluZworCQkgKiB0byByZWNsYWltIHBhZ2VzLiBUaGlzIGZ1bGwgTFJVIHNjYW4gaXMgcG90ZW50aWFsbHkKKwkJICogZXhwZW5zaXZlIGJ1dCBhIF9fR0ZQX1JFUEVBVCBjYWxsZXIgcmVhbGx5IHdhbnRzIHRvIHN1Y2NlZWQKKwkJICovCisJCWlmICghbnJfcmVjbGFpbWVkICYmICFucl9zY2FubmVkKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEZvciBub24tX19HRlBfUkVQRUFUIGFsbG9jYXRpb25zIHdoaWNoIGNhbiBwcmVzdW1hYmx5CisJCSAqIGZhaWwgd2l0aG91dCBjb25zZXF1ZW5jZSwgc3RvcCBpZiB3ZSBmYWlsZWQgdG8gcmVjbGFpbQorCQkgKiBhbnkgcGFnZXMgZnJvbSB0aGUgbGFzdCBTV0FQX0NMVVNURVJfTUFYIG51bWJlciBvZgorCQkgKiBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZC4gVGhpcyB3aWxsIHJldHVybiB0byB0aGUKKwkJICogY2FsbGVyIGZhc3RlciBhdCB0aGUgcmlzayByZWNsYWltL2NvbXBhY3Rpb24gYW5kCisJCSAqIHRoZSByZXN1bHRpbmcgYWxsb2NhdGlvbiBhdHRlbXB0IGZhaWxzCisJCSAqLworCQlpZiAoIW5yX3JlY2xhaW1lZCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgbm90IHJlY2xhaW1lZCBlbm91Z2ggcGFnZXMgZm9yIGNvbXBhY3Rpb24gYW5kIHRoZQpAQCAtMTg4MiwxMiArMTg5NCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgbnJbTlJfTFJVX0xJU1RTXTsKIAl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW47CiAJZW51bSBscnVfbGlzdCBsOwotCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkOworCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLCBucl9zY2FubmVkOwogCXVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSA9IHNjLT5ucl90b19yZWNsYWltOwotCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZCA9IHNjLT5ucl9zY2FubmVkOwogCiByZXN0YXJ0OgogCW5yX3JlY2xhaW1lZCA9IDA7CisJbnJfc2Nhbm5lZCA9IHNjLT5ucl9zY2FubmVkOwogCWdldF9zY2FuX2NvdW50KHpvbmUsIHNjLCBuciwgcHJpb3JpdHkpOwogCiAJd2hpbGUgKG5yW0xSVV9JTkFDVElWRV9BTk9OXSB8fCBucltMUlVfQUNUSVZFX0ZJTEVdIHx8CkBAIC0yMDgzLDcgKzIwOTUsOCBAQAogCQkJc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lOwogCiAJCQlmaXJzdF96b25lc196b25lbGlzdCh6b25lbGlzdCwgZ2ZwX3pvbmUoc2MtPmdmcF9tYXNrKSwKLQkJCQkJCQlOVUxMLCAmcHJlZmVycmVkX3pvbmUpOworCQkJCQkJJmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCwKKwkJCQkJCSZwcmVmZXJyZWRfem9uZSk7CiAJCQl3YWl0X2lmZl9jb25nZXN0ZWQocHJlZmVycmVkX3pvbmUsIEJMS19SV19BU1lOQywgSFovMTApOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdW5pY2FzdC5jIGIvbmV0L2JhdG1hbi1hZHYvdW5pY2FzdC5jCmluZGV4IGVlNDFmZWYuLmQxYTYxMTMgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYworKysgYi9uZXQvYmF0bWFuLWFkdi91bmljYXN0LmMKQEAgLTUwLDEyICs1MCwxMiBAQAogCQlza2IgPSB0ZnAtPnNrYjsKIAl9CiAKKwlpZiAoc2tiX2xpbmVhcml6ZShza2IpIDwgMCB8fCBza2JfbGluZWFyaXplKHRtcF9za2IpIDwgMCkKKwkJZ290byBlcnI7CisKIAlza2JfcHVsbCh0bXBfc2tiLCBzaXplb2Yoc3RydWN0IHVuaWNhc3RfZnJhZ19wYWNrZXQpKTsKLQlpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIHRtcF9za2ItPmxlbiwgR0ZQX0FUT01JQykgPCAwKSB7Ci0JCS8qIGZyZWUgYnVmZmVyZWQgc2tiLCBza2Igd2lsbCBiZSBmcmVlZCBsYXRlciAqLwotCQlrZnJlZV9za2IodGZwLT5za2IpOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCB0bXBfc2tiLT5sZW4sIEdGUF9BVE9NSUMpIDwgMCkKKwkJZ290byBlcnI7CiAKIAkvKiBtb3ZlIGZyZWUgZW50cnkgdG8gZW5kICovCiAJdGZwLT5za2IgPSBOVUxMOwpAQCAtNzAsNiArNzAsMTEgQEAKIAl1bmljYXN0X3BhY2tldC0+cGFja2V0X3R5cGUgPSBCQVRfVU5JQ0FTVDsKIAogCXJldHVybiBza2I7CisKK2VycjoKKwkvKiBmcmVlIGJ1ZmZlcmVkIHNrYiwgc2tiIHdpbGwgYmUgZnJlZWQgbGF0ZXIgKi8KKwlrZnJlZV9za2IodGZwLT5za2IpOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBmcmFnX2NyZWF0ZV9lbnRyeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdmlzLmMgYi9uZXQvYmF0bWFuLWFkdi92aXMuYwppbmRleCBjZDRjNDIzLi5kZTEwMjJjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi92aXMuYworKysgYi9uZXQvYmF0bWFuLWFkdi92aXMuYwpAQCAtNjQsNiArNjQsNyBAQAogCiAJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT52aXNfbGlzdF9sb2NrKTsKIAlrZnJlZV9za2IoaW5mby0+c2tiX3BhY2tldCk7CisJa2ZyZWUoaW5mbyk7CiB9CiAKIC8qIENvbXBhcmUgdHdvIHZpcyBwYWNrZXRzLCB1c2VkIGJ5IHRoZSBoYXNoaW5nIGFsZ29yaXRobSAqLwpAQCAtMjY4LDEwICsyNjksMTAgQEAKIAkJCQlidWZmX3BvcyArPSBzcHJpbnRmKGJ1ZmYgKyBidWZmX3BvcywgIiVwTSwiLAogCQkJCQkJZW50cnktPmFkZHIpOwogCi0JCQkJZm9yIChpID0gMDsgaSA8IHBhY2tldC0+ZW50cmllczsgaSsrKQorCQkJCWZvciAoaiA9IDA7IGogPCBwYWNrZXQtPmVudHJpZXM7IGorKykKIAkJCQkJYnVmZl9wb3MgKz0gdmlzX2RhdGFfcmVhZF9lbnRyeSgKIAkJCQkJCQlidWZmICsgYnVmZl9wb3MsCi0JCQkJCQkJJmVudHJpZXNbaV0sCisJCQkJCQkJJmVudHJpZXNbal0sCiAJCQkJCQkJZW50cnktPmFkZHIsCiAJCQkJCQkJZW50cnktPnByaW1hcnkpOwogCkBAIC00NDQsNyArNDQ1LDcgQEAKIAkJCSAgICAgIGluZm8pOwogCWlmIChoYXNoX2FkZGVkIDwgMCkgewogCQkvKiBkaWQgbm90IHdvcmsgKGZvciBzb21lIHJlYXNvbikgKi8KLQkJa3JlZl9wdXQoJm9sZF9pbmZvLT5yZWZjb3VudCwgZnJlZV9pbmZvKTsKKwkJa3JlZl9wdXQoJmluZm8tPnJlZmNvdW50LCBmcmVlX2luZm8pOwogCQlpbmZvID0gTlVMTDsKIAl9CiAKQEAgLTgxNSw3ICs4MTYsNyBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9CiAJCWNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmssIHN0cnVjdCBiYXRfcHJpdiwgdmlzX3dvcmspOwotCXN0cnVjdCB2aXNfaW5mbyAqaW5mbywgKnRlbXA7CisJc3RydWN0IHZpc19pbmZvICppbmZvOwogCiAJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2hhc2hfbG9jayk7CiAJcHVyZ2VfdmlzX3BhY2tldHMoYmF0X3ByaXYpOwpAQCAtODI1LDggKzgyNiw5IEBACiAJCXNlbmRfbGlzdF9hZGQoYmF0X3ByaXYsIGJhdF9wcml2LT5teV92aXNfaW5mbyk7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGluZm8sIHRlbXAsICZiYXRfcHJpdi0+dmlzX3NlbmRfbGlzdCwKLQkJCQkgc2VuZF9saXN0KSB7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZiYXRfcHJpdi0+dmlzX3NlbmRfbGlzdCkpIHsKKwkJaW5mbyA9IGxpc3RfZmlyc3RfZW50cnkoJmJhdF9wcml2LT52aXNfc2VuZF9saXN0LAorCQkJCQl0eXBlb2YoKmluZm8pLCBzZW5kX2xpc3QpOwogCiAJCWtyZWZfZ2V0KCZpbmZvLT5yZWZjb3VudCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2hhc2hfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKaW5kZXggNmI5MGE0MS4uOTljZDhkOSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwpAQCAtMzc5LDE0ICszNzksMTAgQEAKIAloY2lfY29ubl9ob2xkKGFjbCk7CiAKIAlpZiAoYWNsLT5zdGF0ZSA9PSBCVF9PUEVOIHx8IGFjbC0+c3RhdGUgPT0gQlRfQ0xPU0VEKSB7Ci0JCWFjbC0+c2VjX2xldmVsID0gc2VjX2xldmVsOworCQlhY2wtPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKwkJYWNsLT5wZW5kaW5nX3NlY19sZXZlbCA9IHNlY19sZXZlbDsKIAkJYWNsLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CiAJCWhjaV9hY2xfY29ubmVjdChhY2wpOwotCX0gZWxzZSB7Ci0JCWlmIChhY2wtPnNlY19sZXZlbCA8IHNlY19sZXZlbCkKLQkJCWFjbC0+c2VjX2xldmVsID0gc2VjX2xldmVsOwotCQlpZiAoYWNsLT5hdXRoX3R5cGUgPCBhdXRoX3R5cGUpCi0JCQlhY2wtPmF1dGhfdHlwZSA9IGF1dGhfdHlwZTsKIAl9CiAKIAlpZiAodHlwZSA9PSBBQ0xfTElOSykKQEAgLTQ0MiwxMSArNDM4LDE3IEBACiB7CiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKKwlpZiAoY29ubi0+cGVuZGluZ19zZWNfbGV2ZWwgPiBzZWNfbGV2ZWwpCisJCXNlY19sZXZlbCA9IGNvbm4tPnBlbmRpbmdfc2VjX2xldmVsOworCiAJaWYgKHNlY19sZXZlbCA+IGNvbm4tPnNlY19sZXZlbCkKLQkJY29ubi0+c2VjX2xldmVsID0gc2VjX2xldmVsOworCQljb25uLT5wZW5kaW5nX3NlY19sZXZlbCA9IHNlY19sZXZlbDsKIAllbHNlIGlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fQVVUSCkKIAkJcmV0dXJuIDE7CiAKKwkvKiBNYWtlIHN1cmUgd2UgcHJlc2VydmUgYW4gZXhpc3RpbmcgTUlUTSByZXF1aXJlbWVudCovCisJYXV0aF90eXBlIHw9IChjb25uLT5hdXRoX3R5cGUgJiAweDAxKTsKKwogCWNvbm4tPmF1dGhfdHlwZSA9IGF1dGhfdHlwZTsKIAogCWlmICghdGVzdF9hbmRfc2V0X2JpdChIQ0lfQ09OTl9BVVRIX1BFTkQsICZjb25uLT5wZW5kKSkgewpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCmluZGV4IDhiNjAyZDguLjljNDU0MWIgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKQEAgLTEwMTEsNiArMTAxMSwxMCBAQAogCiAJZGVzdHJveV93b3JrcXVldWUoaGRldi0+d29ya3F1ZXVlKTsKIAorCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKwloY2lfYmxhY2tsaXN0X2NsZWFyKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCiAJX19oY2lfZGV2X3B1dChoZGV2KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggMzgxMDAxNy4uYTI5MDg1NCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC02OTIsMTMgKzY5MiwxMyBAQAogCWlmIChjb25uLT5zdGF0ZSAhPSBCVF9DT05GSUcgfHwgIWNvbm4tPm91dCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoY29ubi0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX1NEUCkKKwlpZiAoY29ubi0+cGVuZGluZ19zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfU0RQKQogCQlyZXR1cm4gMDsKIAogCS8qIE9ubHkgcmVxdWVzdCBhdXRoZW50aWNhdGlvbiBmb3IgU1NQIGNvbm5lY3Rpb25zIG9yIG5vbi1TU1AKIAkgKiBkZXZpY2VzIHdpdGggc2VjX2xldmVsIEhJR0ggKi8KIAlpZiAoIShoZGV2LT5zc3BfbW9kZSA+IDAgJiYgY29ubi0+c3NwX21vZGUgPiAwKSAmJgotCQkJCQljb25uLT5zZWNfbGV2ZWwgIT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJCQljb25uLT5wZW5kaW5nX3NlY19sZXZlbCAhPSBCVF9TRUNVUklUWV9ISUdIKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwpAQCAtMTA5NSw5ICsxMDk1LDEwIEBACiAKIAljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSkpOwogCWlmIChjb25uKSB7Ci0JCWlmICghZXYtPnN0YXR1cykKKwkJaWYgKCFldi0+c3RhdHVzKSB7CiAJCQljb25uLT5saW5rX21vZGUgfD0gSENJX0xNX0FVVEg7Ci0JCWVsc2UKKwkJCWNvbm4tPnNlY19sZXZlbCA9IGNvbm4tPnBlbmRpbmdfc2VjX2xldmVsOworCQl9IGVsc2UKIAkJCWNvbm4tPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKIAogCQljbGVhcl9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKaW5kZXggYzc5MWZjZC4uNjc1NjE0ZSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcC5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwpAQCAtMzA1LDMzICszMDUsNDQgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTggbDJjYXBfZ2V0X2F1dGhfdHlwZShzdHJ1Y3Qgc29jayAqc2spCit7CisJaWYgKHNrLT5za190eXBlID09IFNPQ0tfUkFXKSB7CisJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJcmV0dXJuIEhDSV9BVF9ERURJQ0FURURfQk9ORElOR19NSVRNOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCXJldHVybiBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkc7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gSENJX0FUX05PX0JPTkRJTkc7CisJCX0KKwl9IGVsc2UgaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IGNwdV90b19sZTE2KDB4MDAwMSkpIHsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykKKwkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfU0RQOworCisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQorCQkJcmV0dXJuIEhDSV9BVF9OT19CT05ESU5HX01JVE07CisJCWVsc2UKKwkJCXJldHVybiBIQ0lfQVRfTk9fQk9ORElORzsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCXJldHVybiBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE07CisJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQkJcmV0dXJuIEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gSENJX0FUX05PX0JPTkRJTkc7CisJCX0KKwl9Cit9CisKIC8qIFNlcnZpY2UgbGV2ZWwgc2VjdXJpdHkgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKIAlfX3U4IGF1dGhfdHlwZTsKIAotCWlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7Ci0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkdfTUlUTTsKLQkJZWxzZQotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0KLQkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykKLQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfU0RQOwotCX0gZWxzZSB7Ci0JCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKLQkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgotCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgotCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElORzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJfQotCX0KKwlhdXRoX3R5cGUgPSBsMmNhcF9nZXRfYXV0aF90eXBlKHNrKTsKIAogCXJldHVybiBoY2lfY29ubl9zZWN1cml0eShjb25uLT5oY29uLCBsMmNhcF9waShzayktPnNlY19sZXZlbCwKIAkJCQkJCQkJYXV0aF90eXBlKTsKQEAgLTg0OCw2ICs4NTksNyBAQAogCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NFQ19CTE9DSzsKIAkJCWVsc2UKIAkJCQlyZXN1bHQgPSBMMkNBUF9DUl9CQURfUFNNOworCQkJc2stPnNrX3N0YXRlID0gQlRfRElTQ09OTjsKIAogCQkJcnNwLnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CiAJCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKQEAgLTEwNjgsMzkgKzEwODAsNyBAQAogCiAJZXJyID0gLUVOT01FTTsKIAotCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1JBVykgewotCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9ERURJQ0FURURfQk9ORElOR19NSVRNOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgotCQkJYXV0aF90eXBlID0gSENJX0FUX0RFRElDQVRFRF9CT05ESU5HOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIGlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7Ci0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkdfTUlUTTsKLQkJZWxzZQotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0KLQkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykKLQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfU0RQOwotCX0gZWxzZSB7Ci0JCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKLQkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgotCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgotCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElORzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJfQotCX0KKwlhdXRoX3R5cGUgPSBsMmNhcF9nZXRfYXV0aF90eXBlKHNrKTsKIAogCWhjb24gPSBoY2lfY29ubmVjdChoZGV2LCBBQ0xfTElOSywgZHN0LAogCQkJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCwgYXV0aF90eXBlKTsKQEAgLTExMjcsNyArMTEwNyw4IEBACiAJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCAmJgogCQkJCXNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKSB7CiAJCQlsMmNhcF9zb2NrX2NsZWFyX3RpbWVyKHNrKTsKLQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKKwkJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpCisJCQkJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVEVEOwogCQl9IGVsc2UKIAkJCWwyY2FwX2RvX3N0YXJ0KHNrKTsKIAl9CkBAIC0xODkzLDggKzE4NzQsOCBAQAogCQlpZiAocGktPm1vZGUgPT0gTDJDQVBfTU9ERV9TVFJFQU1JTkcpIHsKIAkJCWwyY2FwX3N0cmVhbWluZ19zZW5kKHNrKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVNT1RFX0JVU1kgJiYKLQkJCQkJcGktPmNvbm5fc3RhdGUgJiYgTDJDQVBfQ09OTl9XQUlUX0YpIHsKKwkJCWlmICgocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKSAmJgorCQkJCQkocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikpIHsKIAkJCQllcnIgPSBsZW47CiAJCQkJYnJlYWs7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggZmY4YWFhNy4uNmI4Mzc3NiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtMTE2NCw3ICsxMTY0LDggQEAKIAkJCSAqIGluaXRpYXRvciByZmNvbW1fcHJvY2Vzc19yeCBhbHJlYWR5IGNhbGxzCiAJCQkgKiByZmNvbW1fc2Vzc2lvbl9wdXQoKSAqLwogCQkJaWYgKHMtPnNvY2stPnNrLT5za19zdGF0ZSAhPSBCVF9DTE9TRUQpCi0JCQkJcmZjb21tX3Nlc3Npb25fcHV0KHMpOworCQkJCWlmIChsaXN0X2VtcHR5KCZzLT5kbGNzKSkKKwkJCQkJcmZjb21tX3Nlc3Npb25fcHV0KHMpOwogCQkJYnJlYWs7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCmluZGV4IDI1NzVjMmQuLmQ3YjlhZjQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCkBAIC03MjcsNyArNzI3LDkgQEAKIAkJCWJyZWFrOwogCQl9CiAKKwkJdHR5X3VubG9jaygpOwogCQlzY2hlZHVsZSgpOworCQl0dHlfbG9jaygpOwogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZkZXYtPndhaXQsICZ3YWl0KTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZmRiLmMgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCmluZGV4IDI4NzIzOTMuLjg4NDg1Y2MgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZmRiLmMKKysrIGIvbmV0L2JyaWRnZS9icl9mZGIuYwpAQCAtMzI4LDEyICszMjgsMTIgQEAKIAlmZGIgPSBrbWVtX2NhY2hlX2FsbG9jKGJyX2ZkYl9jYWNoZSwgR0ZQX0FUT01JQyk7CiAJaWYgKGZkYikgewogCQltZW1jcHkoZmRiLT5hZGRyLmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKLQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZmZGItPmhsaXN0LCBoZWFkKTsKLQogCQlmZGItPmRzdCA9IHNvdXJjZTsKIAkJZmRiLT5pc19sb2NhbCA9IGlzX2xvY2FsOwogCQlmZGItPmlzX3N0YXRpYyA9IGlzX2xvY2FsOwogCQlmZGItPmFnZWluZ190aW1lciA9IGppZmZpZXM7CisKKwkJaGxpc3RfYWRkX2hlYWRfcmN1KCZmZGItPmhsaXN0LCBoZWFkKTsKIAl9CiAJcmV0dXJuIGZkYjsKIH0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwppbmRleCA2ZjZkOGUxLi44OGU0YWE5IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMKKysrIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCkBAIC04MCw3ICs4MCw3IEBACiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGRlc3QpKSB7CiAJCW1kc3QgPSBicl9tZGJfZ2V0KGJyLCBza2IpOwogCQlpZiAobWRzdCB8fCBCUl9JTlBVVF9TS0JfQ0JfTVJPVVRFUlNfT05MWShza2IpKSB7Ci0JCQlpZiAoKG1kc3QgJiYgIWhsaXN0X3VuaGFzaGVkKCZtZHN0LT5tZ2xpc3QpKSB8fAorCQkJaWYgKChtZHN0ICYmIG1kc3QtPm1nbGlzdCkgfHwKIAkJCSAgICBicl9tdWx0aWNhc3RfaXNfcm91dGVyKGJyKSkKIAkJCQlza2IyID0gc2tiOwogCQkJYnJfbXVsdGljYXN0X2ZvcndhcmQobWRzdCwgc2tiLCBza2IyKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCmluZGV4IGY3MDFhMjEuLjAzMGEwMDIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKKysrIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwpAQCAtMzcsMTAgKzM3LDkgQEAKIAlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKFgsIGxvY2tkZXBfaXNfaGVsZCgmYnItPm11bHRpY2FzdF9sb2NrKSkKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotc3RhdGljIGlubGluZSBpbnQgaXB2Nl9pc19sb2NhbF9tdWx0aWNhc3QoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQorc3RhdGljIGlubGluZSBpbnQgaXB2Nl9pc190cmFuc2llbnRfbXVsdGljYXN0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKLQlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChhZGRyKSAmJgotCSAgICBJUFY2X0FERFJfTUNfU0NPUEUoYWRkcikgPD0gSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTCkKKwlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChhZGRyKSAmJiBJUFY2X0FERFJfTUNfRkxBR19UUkFOU0lFTlQoYWRkcikpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtMjMyLDggKzIzMSw3IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpIHx8IHRpbWVyX3BlbmRpbmcoJm1wLT50aW1lcikpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCFobGlzdF91bmhhc2hlZCgmbXAtPm1nbGlzdCkpCi0JCWhsaXN0X2RlbF9pbml0KCZtcC0+bWdsaXN0KTsKKwltcC0+bWdsaXN0ID0gZmFsc2U7CiAKIAlpZiAobXAtPnBvcnRzKQogCQlnb3RvIG91dDsKQEAgLTI3Niw3ICsyNzQsNyBAQAogCQlkZWxfdGltZXIoJnAtPnF1ZXJ5X3RpbWVyKTsKIAkJY2FsbF9yY3VfYmgoJnAtPnJjdSwgYnJfbXVsdGljYXN0X2ZyZWVfcGcpOwogCi0JCWlmICghbXAtPnBvcnRzICYmIGhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSAmJgorCQlpZiAoIW1wLT5wb3J0cyAmJiAhbXAtPm1nbGlzdCAmJgogCQkgICAgbmV0aWZfcnVubmluZyhici0+ZGV2KSkKIAkJCW1vZF90aW1lcigmbXAtPnRpbWVyLCBqaWZmaWVzKTsKIApAQCAtNDM2LDcgKzQzNCw2IEBACiAJZXRoID0gZXRoX2hkcihza2IpOwogCiAJbWVtY3B5KGV0aC0+aF9zb3VyY2UsIGJyLT5kZXYtPmRldl9hZGRyLCA2KTsKLQlpcHY2X2V0aF9tY19tYXAoZ3JvdXAsIGV0aC0+aF9kZXN0KTsKIAlldGgtPmhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTsKIAlza2JfcHV0KHNrYiwgc2l6ZW9mKCpldGgpKTsKIApAQCAtNDQ4LDggKzQ0NSwxMCBAQAogCWlwNmgtPnBheWxvYWRfbGVuID0gaHRvbnMoOCArIHNpemVvZigqbWxkcSkpOwogCWlwNmgtPm5leHRoZHIgPSBJUFBST1RPX0hPUE9QVFM7CiAJaXA2aC0+aG9wX2xpbWl0ID0gMTsKLQlpcHY2X2FkZHJfc2V0KCZpcDZoLT5zYWRkciwgMCwgMCwgMCwgMCk7CisJaXB2Nl9kZXZfZ2V0X3NhZGRyKGRldl9uZXQoYnItPmRldiksIGJyLT5kZXYsICZpcDZoLT5kYWRkciwgMCwKKwkJCSAgICZpcDZoLT5zYWRkcik7CiAJaXB2Nl9hZGRyX3NldCgmaXA2aC0+ZGFkZHIsIGh0b25sKDB4ZmYwMjAwMDApLCAwLCAwLCBodG9ubCgxKSk7CisJaXB2Nl9ldGhfbWNfbWFwKCZpcDZoLT5kYWRkciwgZXRoLT5oX2Rlc3QpOwogCiAJaG9wb3B0ID0gKHU4ICopKGlwNmggKyAxKTsKIAlob3BvcHRbMF0gPSBJUFBST1RPX0lDTVBWNjsJCS8qIG5leHQgaGRyICovCkBAIC01MjgsNyArNTI3LDcgQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBtcC0+YnI7CiAKIAlzcGluX2xvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7Ci0JaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpIHx8IGhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSB8fAorCWlmICghbmV0aWZfcnVubmluZyhici0+ZGV2KSB8fCAhbXAtPm1nbGlzdCB8fAogCSAgICBtcC0+cXVlcmllc19zZW50ID49IGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQpCiAJCWdvdG8gb3V0OwogCkBAIC03MTksNyArNzE4LDcgQEAKIAkJZ290byBlcnI7CiAKIAlpZiAoIXBvcnQpIHsKLQkJaGxpc3RfYWRkX2hlYWQoJm1wLT5tZ2xpc3QsICZici0+bWdsaXN0KTsKKwkJbXAtPm1nbGlzdCA9IHRydWU7CiAJCW1vZF90aW1lcigmbXAtPnRpbWVyLCBub3cgKyBici0+bXVsdGljYXN0X21lbWJlcnNoaXBfaW50ZXJ2YWwpOwogCQlnb3RvIG91dDsKIAl9CkBAIC03ODEsMTEgKzc4MCwxMSBAQAogewogCXN0cnVjdCBicl9pcCBicl9ncm91cDsKIAotCWlmIChpcHY2X2lzX2xvY2FsX211bHRpY2FzdChncm91cCkpCisJaWYgKCFpcHY2X2lzX3RyYW5zaWVudF9tdWx0aWNhc3QoZ3JvdXApKQogCQlyZXR1cm4gMDsKIAogCWlwdjZfYWRkcl9jb3B5KCZicl9ncm91cC51LmlwNiwgZ3JvdXApOwotCWJyX2dyb3VwLnByb3RvID0gaHRvbnMoRVRIX1BfSVApOworCWJyX2dyb3VwLnByb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7CiAKIAlyZXR1cm4gYnJfbXVsdGljYXN0X2FkZF9ncm91cChiciwgcG9ydCwgJmJyX2dyb3VwKTsKIH0KQEAgLTEwMTQsMTggKzEwMTMsMTkgQEAKIAogCQluc3JjcyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsCiAJCQkJCSAgIGxlbiArIG9mZnNldG9mKHN0cnVjdCBtbGQyX2dyZWMsCi0JCQkJCQkJICBncmVjX21jYSksCisJCQkJCQkJICBncmVjX25zcmNzKSwKIAkJCQkJICAgc2l6ZW9mKF9uc3JjcyksICZfbnNyY3MpOwogCQlpZiAoIW5zcmNzKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwKIAkJCQkgICBsZW4gKyBzaXplb2YoKmdyZWMpICsKLQkJCQkgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAqICgqbnNyY3MpKSkKKwkJCQkgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAqIG50b2hzKCpuc3JjcykpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJZ3JlYyA9IChzdHJ1Y3QgbWxkMl9ncmVjICopKHNrYi0+ZGF0YSArIGxlbik7Ci0JCWxlbiArPSBzaXplb2YoKmdyZWMpICsgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikgKiAoKm5zcmNzKTsKKwkJbGVuICs9IHNpemVvZigqZ3JlYykgKworCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikgKiBudG9ocygqbnNyY3MpOwogCiAJCS8qIFdlIHRyZWF0IHRoZXNlIGFzIE1MRHYxIHJlcG9ydHMgZm9yIG5vdy4gKi8KIAkJc3dpdGNoIChncmVjLT5ncmVjX3R5cGUpIHsKQEAgLTExNjUsNyArMTE2NSw3IEBACiAKIAltYXhfZGVsYXkgKj0gYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudDsKIAotCWlmICghaGxpc3RfdW5oYXNoZWQoJm1wLT5tZ2xpc3QpICYmCisJaWYgKG1wLT5tZ2xpc3QgJiYKIAkgICAgKHRpbWVyX3BlbmRpbmcoJm1wLT50aW1lcikgPwogCSAgICAgdGltZV9hZnRlcihtcC0+dGltZXIuZXhwaXJlcywgbm93ICsgbWF4X2RlbGF5KSA6CiAJICAgICB0cnlfdG9fZGVsX3RpbWVyX3N5bmMoJm1wLT50aW1lcikgPj0gMCkpCkBAIC0xMTc3LDcgKzExNzcsNyBAQAogCQlpZiAodGltZXJfcGVuZGluZygmcC0+dGltZXIpID8KIAkJICAgIHRpbWVfYWZ0ZXIocC0+dGltZXIuZXhwaXJlcywgbm93ICsgbWF4X2RlbGF5KSA6CiAJCSAgICB0cnlfdG9fZGVsX3RpbWVyX3N5bmMoJnAtPnRpbWVyKSA+PSAwKQotCQkJbW9kX3RpbWVyKCZtcC0+dGltZXIsIG5vdyArIG1heF9kZWxheSk7CisJCQltb2RfdGltZXIoJnAtPnRpbWVyLCBub3cgKyBtYXhfZGVsYXkpOwogCX0KIAogb3V0OgpAQCAtMTIzNiw3ICsxMjM2LDcgQEAKIAkJZ290byBvdXQ7CiAKIAltYXhfZGVsYXkgKj0gYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudDsKLQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSAmJgorCWlmIChtcC0+bWdsaXN0ICYmCiAJICAgICh0aW1lcl9wZW5kaW5nKCZtcC0+dGltZXIpID8KIAkgICAgIHRpbWVfYWZ0ZXIobXAtPnRpbWVyLmV4cGlyZXMsIG5vdyArIG1heF9kZWxheSkgOgogCSAgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZtcC0+dGltZXIpID49IDApKQpAQCAtMTI0OCw3ICsxMjQ4LDcgQEAKIAkJaWYgKHRpbWVyX3BlbmRpbmcoJnAtPnRpbWVyKSA/CiAJCSAgICB0aW1lX2FmdGVyKHAtPnRpbWVyLmV4cGlyZXMsIG5vdyArIG1heF9kZWxheSkgOgogCQkgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZwLT50aW1lcikgPj0gMCkKLQkJCW1vZF90aW1lcigmbXAtPnRpbWVyLCBub3cgKyBtYXhfZGVsYXkpOworCQkJbW9kX3RpbWVyKCZwLT50aW1lciwgbm93ICsgbWF4X2RlbGF5KTsKIAl9CiAKIG91dDoKQEAgLTEyODMsNyArMTI4Myw3IEBACiAJCSAgICAgYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbDsKIAogCWlmICghcG9ydCkgewotCQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSAmJgorCQlpZiAobXAtPm1nbGlzdCAmJgogCQkgICAgKHRpbWVyX3BlbmRpbmcoJm1wLT50aW1lcikgPwogCQkgICAgIHRpbWVfYWZ0ZXIobXAtPnRpbWVyLmV4cGlyZXMsIHRpbWUpIDoKIAkJICAgICB0cnlfdG9fZGVsX3RpbWVyX3N5bmMoJm1wLT50aW1lcikgPj0gMCkpIHsKQEAgLTEzNDEsNyArMTM0MSw3IEBACiB7CiAJc3RydWN0IGJyX2lwIGJyX2dyb3VwOwogCi0JaWYgKGlwdjZfaXNfbG9jYWxfbXVsdGljYXN0KGdyb3VwKSkKKwlpZiAoIWlwdjZfaXNfdHJhbnNpZW50X211bHRpY2FzdChncm91cCkpCiAJCXJldHVybjsKIAogCWlwdjZfYWRkcl9jb3B5KCZicl9ncm91cC51LmlwNiwgZ3JvdXApOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAppbmRleCA4NGFhYzc3Li40ZTFiNjIwIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAorKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaApAQCAtODQsMTMgKzg0LDEzIEBACiBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkKIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQkJaGxpc3RbMl07Ci0Jc3RydWN0IGhsaXN0X25vZGUJCW1nbGlzdDsKIAlzdHJ1Y3QgbmV0X2JyaWRnZQkJKmJyOwogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgX19yY3UgKnBvcnRzOwogCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QJCXF1ZXJ5X3RpbWVyOwogCXN0cnVjdCBicl9pcAkJCWFkZHI7CisJYm9vbAkJCQltZ2xpc3Q7CiAJdTMyCQkJCXF1ZXJpZXNfc2VudDsKIH07CiAKQEAgLTIzOCw3ICsyMzgsNiBAQAogCXNwaW5sb2NrX3QJCQltdWx0aWNhc3RfbG9jazsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlIF9fcmN1ICptZGI7CiAJc3RydWN0IGhsaXN0X2hlYWQJCXJvdXRlcl9saXN0OwotCXN0cnVjdCBobGlzdF9oZWFkCQltZ2xpc3Q7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJbXVsdGljYXN0X3JvdXRlcl90aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJbXVsdGljYXN0X3F1ZXJpZXJfdGltZXI7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jaG5sX25ldC5jIGIvbmV0L2NhaWYvY2hubF9uZXQuYwppbmRleCBmYTlkYWIzLi42MDA4ZDZkIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jaG5sX25ldC5jCisrKyBiL25ldC9jYWlmL2NobmxfbmV0LmMKQEAgLTM5NCw5ICszOTQsNyBAQAogCXByaXYtPmNvbm5fcmVxLnNvY2thZGRyLnUuZGdtLmNvbm5lY3Rpb25faWQgPSAtMTsKIAlwcml2LT5mbG93ZW5hYmxlZCA9IGZhbHNlOwogCi0JQVNTRVJUX1JUTkwoKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5uZXRtZ210X3dxKTsKLQlsaXN0X2FkZCgmcHJpdi0+bGlzdF9maWVsZCwgJmNobmxfbmV0X2xpc3QpOwogfQogCiAKQEAgLTQ1Myw2ICs0NTEsOCBAQAogCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOwogCWlmIChyZXQpCiAJCXByX3dhcm4oImRldmljZSBydG1sIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCWVsc2UKKwkJbGlzdF9hZGQoJmNhaWZkZXYtPmxpc3RfZmllbGQsICZjaG5sX25ldF9saXN0KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXIuYyBiL25ldC9jZXBoL21lc3Nlbmdlci5jCmluZGV4IGRmZjYzM2QuLjA1ZjM1NzggMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21lc3Nlbmdlci5jCisrKyBiL25ldC9jZXBoL21lc3Nlbmdlci5jCkBAIC0yNTIsOCArMjUyLDEyIEBACiB7CiAJc3RydWN0IGt2ZWMgaW92ID0ge2J1ZiwgbGVufTsKIAlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsgLm1zZ19mbGFncyA9IE1TR19ET05UV0FJVCB8IE1TR19OT1NJR05BTCB9OworCWludCByOwogCi0JcmV0dXJuIGtlcm5lbF9yZWN2bXNnKHNvY2ssICZtc2csICZpb3YsIDEsIGxlbiwgbXNnLm1zZ19mbGFncyk7CisJciA9IGtlcm5lbF9yZWN2bXNnKHNvY2ssICZtc2csICZpb3YsIDEsIGxlbiwgbXNnLm1zZ19mbGFncyk7CisJaWYgKHIgPT0gLUVBR0FJTikKKwkJciA9IDA7CisJcmV0dXJuIHI7CiB9CiAKIC8qCkBAIC0yNjQsMTMgKzI2OCwxNyBAQAogCQkgICAgIHNpemVfdCBrdmxlbiwgc2l6ZV90IGxlbiwgaW50IG1vcmUpCiB7CiAJc3RydWN0IG1zZ2hkciBtc2cgPSB7IC5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQgfCBNU0dfTk9TSUdOQUwgfTsKKwlpbnQgcjsKIAogCWlmIChtb3JlKQogCQltc2cubXNnX2ZsYWdzIHw9IE1TR19NT1JFOwogCWVsc2UKIAkJbXNnLm1zZ19mbGFncyB8PSBNU0dfRU9SOyAgLyogc3VwZXJmbHVvdXMsIGJ1dCB3aGF0IHRoZSBoZWxsICovCiAKLQlyZXR1cm4ga2VybmVsX3NlbmRtc2coc29jaywgJm1zZywgaW92LCBrdmxlbiwgbGVuKTsKKwlyID0ga2VybmVsX3NlbmRtc2coc29jaywgJm1zZywgaW92LCBrdmxlbiwgbGVuKTsKKwlpZiAociA9PSAtRUFHQUlOKQorCQlyID0gMDsKKwlyZXR1cm4gcjsKIH0KIAogCkBAIC0zMjgsNyArMzM2LDYgQEAKIAkJY2VwaF9tc2dfcHV0KGNvbi0+b3V0X21zZyk7CiAJCWNvbi0+b3V0X21zZyA9IE5VTEw7CiAJfQotCWNvbi0+b3V0X2tlZXBhbGl2ZV9wZW5kaW5nID0gZmFsc2U7CiAJY29uLT5pbl9zZXEgPSAwOwogCWNvbi0+aW5fc2VxX2Fja2VkID0gMDsKIH0KQEAgLTg0Nyw2ICs4NTQsOCBAQAogCQkgICAgKG1zZy0+cGFnZXMgfHwgbXNnLT5wYWdlbGlzdCB8fCBtc2ctPmJpbyB8fCBpbl90cmFpbCkpCiAJCQlrdW5tYXAocGFnZSk7CiAKKwkJaWYgKHJldCA9PSAtRUFHQUlOKQorCQkJcmV0ID0gMDsKIAkJaWYgKHJldCA8PSAwKQogCQkJZ290byBvdXQ7CiAKQEAgLTEyMzgsOCArMTI0Nyw2IEBACiAJCSAgICAgY29uLT5hdXRoX3JldHJ5KTsKIAkJaWYgKGNvbi0+YXV0aF9yZXRyeSA9PSAyKSB7CiAJCQljb24tPmVycm9yX21zZyA9ICJjb25uZWN0IGF1dGhvcml6YXRpb24gZmFpbHVyZSI7Ci0JCQlyZXNldF9jb25uZWN0aW9uKGNvbik7Ci0JCQlzZXRfYml0KENMT1NFRCwgJmNvbi0+c3RhdGUpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWNvbi0+YXV0aF9yZXRyeSA9IDE7CkBAIC0xNzA1LDE0ICsxNzEyLDYgQEAKIAogCS8qIG9wZW4gdGhlIHNvY2tldCBmaXJzdD8gKi8KIAlpZiAoY29uLT5zb2NrID09IE5VTEwpIHsKLQkJLyoKLQkJICogaWYgd2Ugd2VyZSBTVEFOREJZIGFuZCBhcmUgcmVjb25uZWN0aW5nIF90aGlzXwotCQkgKiBjb25uZWN0aW9uLCBidW1wIGNvbm5lY3Rfc2VxIG5vdy4gIEFsd2F5cyBidW1wCi0JCSAqIGdsb2JhbF9zZXEuCi0JCSAqLwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNUQU5EQlksICZjb24tPnN0YXRlKSkKLQkJCWNvbi0+Y29ubmVjdF9zZXErKzsKLQogCQlwcmVwYXJlX3dyaXRlX2Jhbm5lcihtc2dyLCBjb24pOwogCQlwcmVwYXJlX3dyaXRlX2Nvbm5lY3QobXNnciwgY29uLCAxKTsKIAkJcHJlcGFyZV9yZWFkX2Jhbm5lcihjb24pOwpAQCAtMTczNywxNiArMTczNiwxMiBAQAogCWlmIChjb24tPm91dF9za2lwKSB7CiAJCXJldCA9IHdyaXRlX3BhcnRpYWxfc2tpcChjb24pOwogCQlpZiAocmV0IDw9IDApCi0JCQlnb3RvIGRvbmU7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkb3V0KCJ0cnlfd3JpdGUgd3JpdGVfcGFydGlhbF9za2lwIGVyciAlZFxuIiwgcmV0KTsKLQkJCWdvdG8gZG9uZTsKLQkJfQorCQkJZ290byBvdXQ7CiAJfQogCWlmIChjb24tPm91dF9rdmVjX2xlZnQpIHsKIAkJcmV0ID0gd3JpdGVfcGFydGlhbF9rdmVjKGNvbik7CiAJCWlmIChyZXQgPD0gMCkKLQkJCWdvdG8gZG9uZTsKKwkJCWdvdG8gb3V0OwogCX0KIAogCS8qIG1zZyBwYWdlcz8gKi8KQEAgLTE3NjEsMTEgKzE3NTYsMTEgQEAKIAkJaWYgKHJldCA9PSAxKQogCQkJZ290byBtb3JlX2t2ZWM7ICAvKiB3ZSBuZWVkIHRvIHNlbmQgdGhlIGZvb3RlciwgdG9vISAqLwogCQlpZiAocmV0ID09IDApCi0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRvdXQoInRyeV93cml0ZSB3cml0ZV9wYXJ0aWFsX21zZ19wYWdlcyBlcnIgJWRcbiIsCiAJCQkgICAgIHJldCk7Ci0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIApAQCAtMTc4OSwxMCArMTc4NCw5IEBACiAJLyogTm90aGluZyB0byBkbyEgKi8KIAljbGVhcl9iaXQoV1JJVEVfUEVORElORywgJmNvbi0+c3RhdGUpOwogCWRvdXQoInRyeV93cml0ZSBub3RoaW5nIGVsc2UgdG8gd3JpdGUuXG4iKTsKLWRvbmU6CiAJcmV0ID0gMDsKIG91dDoKLQlkb3V0KCJ0cnlfd3JpdGUgZG9uZSBvbiAlcFxuIiwgY29uKTsKKwlkb3V0KCJ0cnlfd3JpdGUgZG9uZSBvbiAlcCByZXQgJWRcbiIsIGNvbiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODIxLDE5ICsxODE1LDE3IEBACiAJCQlkb3V0KCJ0cnlfcmVhZCBjb25uZWN0aW5nXG4iKTsKIAkJCXJldCA9IHJlYWRfcGFydGlhbF9iYW5uZXIoY29uKTsKIAkJCWlmIChyZXQgPD0gMCkKLQkJCQlnb3RvIGRvbmU7Ci0JCQlpZiAocHJvY2Vzc19iYW5uZXIoY29uKSA8IDApIHsKLQkJCQlyZXQgPSAtMTsKIAkJCQlnb3RvIG91dDsKLQkJCX0KKwkJCXJldCA9IHByb2Nlc3NfYmFubmVyKGNvbik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKIAkJfQogCQlyZXQgPSByZWFkX3BhcnRpYWxfY29ubmVjdChjb24pOwogCQlpZiAocmV0IDw9IDApCi0JCQlnb3RvIGRvbmU7Ci0JCWlmIChwcm9jZXNzX2Nvbm5lY3QoY29uKSA8IDApIHsKLQkJCXJldCA9IC0xOwogCQkJZ290byBvdXQ7Ci0JCX0KKwkJcmV0ID0gcHJvY2Vzc19jb25uZWN0KGNvbik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CiAJCWdvdG8gbW9yZTsKIAl9CiAKQEAgLTE4NDgsNyArMTg0MCw3IEBACiAJCWRvdXQoInNraXBwaW5nICVkIC8gJWQgYnl0ZXNcbiIsIHNraXAsIC1jb24tPmluX2Jhc2VfcG9zKTsKIAkJcmV0ID0gY2VwaF90Y3BfcmVjdm1zZyhjb24tPnNvY2ssIGJ1Ziwgc2tpcCk7CiAJCWlmIChyZXQgPD0gMCkKLQkJCWdvdG8gZG9uZTsKKwkJCWdvdG8gb3V0OwogCQljb24tPmluX2Jhc2VfcG9zICs9IHJldDsKIAkJaWYgKGNvbi0+aW5fYmFzZV9wb3MpCiAJCQlnb3RvIG1vcmU7CkBAIC0xODU5LDcgKzE4NTEsNyBAQAogCQkgKi8KIAkJcmV0ID0gY2VwaF90Y3BfcmVjdm1zZyhjb24tPnNvY2ssICZjb24tPmluX3RhZywgMSk7CiAJCWlmIChyZXQgPD0gMCkKLQkJCWdvdG8gZG9uZTsKKwkJCWdvdG8gb3V0OwogCQlkb3V0KCJ0cnlfcmVhZCBnb3QgdGFnICVkXG4iLCAoaW50KWNvbi0+aW5fdGFnKTsKIAkJc3dpdGNoIChjb24tPmluX3RhZykgewogCQljYXNlIENFUEhfTVNHUl9UQUdfTVNHOgpAQCAtMTg3MCw3ICsxODYyLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIENFUEhfTVNHUl9UQUdfQ0xPU0U6CiAJCQlzZXRfYml0KENMT1NFRCwgJmNvbi0+c3RhdGUpOyAgIC8qIGZpeG1lICovCi0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAkJZGVmYXVsdDoKIAkJCWdvdG8gYmFkX3RhZzsKIAkJfQpAQCAtMTg4MiwxMyArMTg3NCwxMiBAQAogCQkJY2FzZSAtRUJBRE1TRzoKIAkJCQljb24tPmVycm9yX21zZyA9ICJiYWQgY3JjIjsKIAkJCQlyZXQgPSAtRUlPOwotCQkJCWdvdG8gb3V0OworCQkJCWJyZWFrOwogCQkJY2FzZSAtRUlPOgogCQkJCWNvbi0+ZXJyb3JfbXNnID0gImlvIGVycm9yIjsKLQkJCQlnb3RvIG91dDsKLQkJCWRlZmF1bHQ6Ci0JCQkJZ290byBkb25lOworCQkJCWJyZWFrOwogCQkJfQorCQkJZ290byBvdXQ7CiAJCX0KIAkJaWYgKGNvbi0+aW5fdGFnID09IENFUEhfTVNHUl9UQUdfUkVBRFkpCiAJCQlnb3RvIG1vcmU7CkBAIC0xODk4LDE1ICsxODg5LDEzIEBACiAJaWYgKGNvbi0+aW5fdGFnID09IENFUEhfTVNHUl9UQUdfQUNLKSB7CiAJCXJldCA9IHJlYWRfcGFydGlhbF9hY2soY29uKTsKIAkJaWYgKHJldCA8PSAwKQotCQkJZ290byBkb25lOworCQkJZ290byBvdXQ7CiAJCXByb2Nlc3NfYWNrKGNvbik7CiAJCWdvdG8gbW9yZTsKIAl9CiAKLWRvbmU6Ci0JcmV0ID0gMDsKIG91dDoKLQlkb3V0KCJ0cnlfcmVhZCBkb25lIG9uICVwXG4iLCBjb24pOworCWRvdXQoInRyeV9yZWFkIGRvbmUgb24gJXAgcmV0ICVkXG4iLCBjb24sIHJldCk7CiAJcmV0dXJuIHJldDsKIAogYmFkX3RhZzoKQEAgLTE5NTEsNyArMTk0MCwyNCBAQAogCQkJCQkJICAgd29yay53b3JrKTsKIAogCW11dGV4X2xvY2soJmNvbi0+bXV0ZXgpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQkFDS09GRiwgJmNvbi0+c3RhdGUpKSB7CisJCWRvdXQoImNvbl93b3JrICVwIGJhY2tpbmcgb2ZmXG4iLCBjb24pOworCQlpZiAocXVldWVfZGVsYXllZF93b3JrKGNlcGhfbXNncl93cSwgJmNvbi0+d29yaywKKwkJCQkgICAgICAgcm91bmRfamlmZmllc19yZWxhdGl2ZShjb24tPmRlbGF5KSkpIHsKKwkJCWRvdXQoImNvbl93b3JrICVwIGJhY2tvZmYgJWx1XG4iLCBjb24sIGNvbi0+ZGVsYXkpOworCQkJbXV0ZXhfdW5sb2NrKCZjb24tPm11dGV4KTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCWNvbi0+b3BzLT5wdXQoY29uKTsKKwkJCWRvdXQoImNvbl93b3JrICVwIEZBSUxFRCB0byBiYWNrIG9mZiAlbHVcbiIsIGNvbiwKKwkJCSAgICAgY29uLT5kZWxheSk7CisJCX0KKwl9CiAKKwlpZiAodGVzdF9iaXQoU1RBTkRCWSwgJmNvbi0+c3RhdGUpKSB7CisJCWRvdXQoImNvbl93b3JrICVwIFNUQU5EQllcbiIsIGNvbik7CisJCWdvdG8gZG9uZTsKKwl9CiAJaWYgKHRlc3RfYml0KENMT1NFRCwgJmNvbi0+c3RhdGUpKSB7IC8qIGUuZy4gaWYgd2UgYXJlIHJlcGxhY2VkICovCiAJCWRvdXQoImNvbl93b3JrIENMT1NFRFxuIik7CiAJCWNvbl9jbG9zZV9zb2NrZXQoY29uKTsKQEAgLTIwMDgsMTAgKzIwMTQsMTIgQEAKIAkvKiBSZXF1ZXVlIGFueXRoaW5nIHRoYXQgaGFzbid0IGJlZW4gYWNrZWQgKi8KIAlsaXN0X3NwbGljZV9pbml0KCZjb24tPm91dF9zZW50LCAmY29uLT5vdXRfcXVldWUpOwogCi0JLyogSWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzIGluIHRoZSBxdWV1ZSwgcGxhY2UgdGhlIGNvbm5lY3Rpb24KLQkgKiBpbiBhIFNUQU5EQlkgc3RhdGUgKGkuZS4sIGRvbid0IHRyeSB0byByZWNvbm5lY3QganVzdCB5ZXQpLiAqLwotCWlmIChsaXN0X2VtcHR5KCZjb24tPm91dF9xdWV1ZSkgJiYgIWNvbi0+b3V0X2tlZXBhbGl2ZV9wZW5kaW5nKSB7Ci0JCWRvdXQoImZhdWx0IHNldHRpbmcgU1RBTkRCWVxuIik7CisJLyogSWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzIHF1ZXVlZCBvciBrZWVwYWxpdmUgcGVuZGluZywgcGxhY2UKKwkgKiB0aGUgY29ubmVjdGlvbiBpbiBhIFNUQU5EQlkgc3RhdGUgKi8KKwlpZiAobGlzdF9lbXB0eSgmY29uLT5vdXRfcXVldWUpICYmCisJICAgICF0ZXN0X2JpdChLRUVQQUxJVkVfUEVORElORywgJmNvbi0+c3RhdGUpKSB7CisJCWRvdXQoImZhdWx0ICVwIHNldHRpbmcgU1RBTkRCWSBjbGVhcmluZyBXUklURV9QRU5ESU5HXG4iLCBjb24pOworCQljbGVhcl9iaXQoV1JJVEVfUEVORElORywgJmNvbi0+c3RhdGUpOwogCQlzZXRfYml0KFNUQU5EQlksICZjb24tPnN0YXRlKTsKIAl9IGVsc2UgewogCQkvKiByZXRyeSBhZnRlciBhIGRlbGF5LiAqLwpAQCAtMjAxOSwxMSArMjAyNywyNCBAQAogCQkJY29uLT5kZWxheSA9IEJBU0VfREVMQVlfSU5URVJWQUw7CiAJCWVsc2UgaWYgKGNvbi0+ZGVsYXkgPCBNQVhfREVMQVlfSU5URVJWQUwpCiAJCQljb24tPmRlbGF5ICo9IDI7Ci0JCWRvdXQoImZhdWx0IHF1ZXVlaW5nICVwIGRlbGF5ICVsdVxuIiwgY29uLCBjb24tPmRlbGF5KTsKIAkJY29uLT5vcHMtPmdldChjb24pOwogCQlpZiAocXVldWVfZGVsYXllZF93b3JrKGNlcGhfbXNncl93cSwgJmNvbi0+d29yaywKLQkJCQkgICAgICAgcm91bmRfamlmZmllc19yZWxhdGl2ZShjb24tPmRlbGF5KSkgPT0gMCkKKwkJCQkgICAgICAgcm91bmRfamlmZmllc19yZWxhdGl2ZShjb24tPmRlbGF5KSkpIHsKKwkJCWRvdXQoImZhdWx0IHF1ZXVlZCAlcCBkZWxheSAlbHVcbiIsIGNvbiwgY29uLT5kZWxheSk7CisJCX0gZWxzZSB7CiAJCQljb24tPm9wcy0+cHV0KGNvbik7CisJCQlkb3V0KCJmYXVsdCBmYWlsZWQgdG8gcXVldWUgJXAgZGVsYXkgJWx1LCBiYWNrb2ZmXG4iLAorCQkJICAgICBjb24sIGNvbi0+ZGVsYXkpOworCQkJLyoKKwkJCSAqIEluIG1hbnkgY2FzZXMgd2Ugc2VlIGEgc29ja2V0IHN0YXRlIGNoYW5nZQorCQkJICogd2hpbGUgY29uX3dvcmsgaXMgcnVubmluZyBhbmQgZW5kIHVwCisJCQkgKiBxdWV1aW5nIChub24tZGVsYXllZCkgd29yaywgc3VjaCB0aGF0IHdlCisJCQkgKiBjYW4ndCBiYWNrb2ZmIHdpdGggYSBkZWxheS4gIFNldCBhIGZsYWcgc28KKwkJCSAqIHRoYXQgd2hlbiBjb25fd29yayByZXN0YXJ0cyB3ZSBzY2hlZHVsZSB0aGUKKwkJCSAqIGRlbGF5IHRoZW4uCisJCQkgKi8KKwkJCXNldF9iaXQoQkFDS09GRiwgJmNvbi0+c3RhdGUpOworCQl9CiAJfQogCiBvdXRfdW5sb2NrOgpAQCAtMjA5NCw2ICsyMTE1LDE5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNlcGhfbWVzc2VuZ2VyX2Rlc3Ryb3kpOwogCitzdGF0aWMgdm9pZCBjbGVhcl9zdGFuZGJ5KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbikKK3sKKwkvKiBjb21lIGJhY2sgZnJvbSBTVEFOREJZPyAqLworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU1RBTkRCWSwgJmNvbi0+c3RhdGUpKSB7CisJCW11dGV4X2xvY2soJmNvbi0+bXV0ZXgpOworCQlkb3V0KCJjbGVhcl9zdGFuZGJ5ICVwIGFuZCArK2Nvbm5lY3Rfc2VxXG4iLCBjb24pOworCQljb24tPmNvbm5lY3Rfc2VxKys7CisJCVdBUk5fT04odGVzdF9iaXQoV1JJVEVfUEVORElORywgJmNvbi0+c3RhdGUpKTsKKwkJV0FSTl9PTih0ZXN0X2JpdChLRUVQQUxJVkVfUEVORElORywgJmNvbi0+c3RhdGUpKTsKKwkJbXV0ZXhfdW5sb2NrKCZjb24tPm11dGV4KTsKKwl9Cit9CisKIC8qCiAgKiBRdWV1ZSB1cCBhbiBvdXRnb2luZyBtZXNzYWdlIG9uIHRoZSBnaXZlbiBjb25uZWN0aW9uLgogICovCkBAIC0yMTI2LDYgKzIxNjAsNyBAQAogCiAJLyogaWYgdGhlcmUgd2Fzbid0IGFueXRoaW5nIHdhaXRpbmcgdG8gc2VuZCBiZWZvcmUsIHF1ZXVlCiAJICogbmV3IHdvcmsgKi8KKwljbGVhcl9zdGFuZGJ5KGNvbik7CiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoV1JJVEVfUEVORElORywgJmNvbi0+c3RhdGUpID09IDApCiAJCXF1ZXVlX2Nvbihjb24pOwogfQpAQCAtMjE5MSw2ICsyMjI2LDggQEAKICAqLwogdm9pZCBjZXBoX2Nvbl9rZWVwYWxpdmUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKQogeworCWRvdXQoImNvbl9rZWVwYWxpdmUgJXBcbiIsIGNvbik7CisJY2xlYXJfc3RhbmRieShjb24pOwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KEtFRVBBTElWRV9QRU5ESU5HLCAmY29uLT5zdGF0ZSkgPT0gMCAmJgogCSAgICB0ZXN0X2FuZF9zZXRfYml0KFdSSVRFX1BFTkRJTkcsICZjb24tPnN0YXRlKSA9PSAwKQogCQlxdWV1ZV9jb24oY29uKTsKZGlmZiAtLWdpdCBhL25ldC9jZXBoL3BhZ2V2ZWMuYyBiL25ldC9jZXBoL3BhZ2V2ZWMuYwppbmRleCAxYTA0MGU2Li5jZDljMjFkIDEwMDY0NAotLS0gYS9uZXQvY2VwaC9wYWdldmVjLmMKKysrIGIvbmV0L2NlcGgvcGFnZXZlYy5jCkBAIC0xNiwyMiArMTYsMzAgQEAKIAkJCQkJICBpbnQgbnVtX3BhZ2VzLCBib29sIHdyaXRlX3BhZ2UpCiB7CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKLQlpbnQgcmM7CisJaW50IGdvdCA9IDA7CisJaW50IHJjID0gMDsKIAogCXBhZ2VzID0ga21hbGxvYyhzaXplb2YoKnBhZ2VzKSAqIG51bV9wYWdlcywgR0ZQX05PRlMpOwogCWlmICghcGFnZXMpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCXJjID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sICh1bnNpZ25lZCBsb25nKWRhdGEsCi0JCQkgICAgbnVtX3BhZ2VzLCB3cml0ZV9wYWdlLCAwLCBwYWdlcywgTlVMTCk7CisJd2hpbGUgKGdvdCA8IG51bV9wYWdlcykgeworCQlyYyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpZGF0YSArICgodW5zaWduZWQgbG9uZylnb3QgKiBQQUdFX1NJWkUpLAorCQkgICAgbnVtX3BhZ2VzIC0gZ290LCB3cml0ZV9wYWdlLCAwLCBwYWdlcyArIGdvdCwgTlVMTCk7CisJCWlmIChyYyA8IDApCisJCQlicmVhazsKKwkJQlVHX09OKHJjID09IDApOworCQlnb3QgKz0gcmM7CisJfQogCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JaWYgKHJjIDwgbnVtX3BhZ2VzKQorCWlmIChyYyA8IDApCiAJCWdvdG8gZmFpbDsKIAlyZXR1cm4gcGFnZXM7CiAKIGZhaWw6Ci0JY2VwaF9wdXRfcGFnZV92ZWN0b3IocGFnZXMsIHJjID4gMCA/IHJjIDogMCwgZmFsc2UpOworCWNlcGhfcHV0X3BhZ2VfdmVjdG9yKHBhZ2VzLCBnb3QsIGZhbHNlKTsKIAlyZXR1cm4gRVJSX1BUUihyYyk7CiB9CiBFWFBPUlRfU1lNQk9MKGNlcGhfZ2V0X2RpcmVjdF9wYWdlX3ZlY3Rvcik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDdjNmE0NmYuLjhhZTY2MzEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC03NDksNyArNzQ5LDggQEAKICAqCUBoYTogaGFyZHdhcmUgYWRkcmVzcwogICoKICAqCVNlYXJjaCBmb3IgYW4gaW50ZXJmYWNlIGJ5IE1BQyBhZGRyZXNzLiBSZXR1cm5zIE5VTEwgaWYgdGhlIGRldmljZQotICoJaXMgbm90IGZvdW5kIG9yIGEgcG9pbnRlciB0byB0aGUgZGV2aWNlLiBUaGUgY2FsbGVyIG11c3QgaG9sZCBSQ1UKKyAqCWlzIG5vdCBmb3VuZCBvciBhIHBvaW50ZXIgdG8gdGhlIGRldmljZS4KKyAqCVRoZSBjYWxsZXIgbXVzdCBob2xkIFJDVSBvciBSVE5MLgogICoJVGhlIHJldHVybmVkIGRldmljZSBoYXMgbm90IGhhZCBpdHMgcmVmIGNvdW50IGluY3JlYXNlZAogICoJYW5kIHRoZSBjYWxsZXIgbXVzdCB0aGVyZWZvcmUgYmUgY2FyZWZ1bCBhYm91dCBsb2NraW5nCiAgKgpAQCAtMTI3OSwxMCArMTI4MCwxMyBAQAogCiBzdGF0aWMgaW50IF9fZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJaW50IHJldHZhbDsKIAlMSVNUX0hFQUQoc2luZ2xlKTsKIAogCWxpc3RfYWRkKCZkZXYtPnVucmVnX2xpc3QsICZzaW5nbGUpOwotCXJldHVybiBfX2Rldl9jbG9zZV9tYW55KCZzaW5nbGUpOworCXJldHZhbCA9IF9fZGV2X2Nsb3NlX21hbnkoJnNpbmdsZSk7CisJbGlzdF9kZWwoJnNpbmdsZSk7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogaW50IGRldl9jbG9zZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCkBAIC0xMzI0LDcgKzEzMjgsNyBAQAogCiAJbGlzdF9hZGQoJmRldi0+dW5yZWdfbGlzdCwgJnNpbmdsZSk7CiAJZGV2X2Nsb3NlX21hbnkoJnNpbmdsZSk7Ci0KKwlsaXN0X2RlbCgmc2luZ2xlKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2Nsb3NlKTsKQEAgLTI1NjIsNyArMjU2Niw4IEBACiAKIAltYXAgPSByY3VfZGVyZWZlcmVuY2UocnhxdWV1ZS0+cnBzX21hcCk7CiAJaWYgKG1hcCkgewotCQlpZiAobWFwLT5sZW4gPT0gMSkgeworCQlpZiAobWFwLT5sZW4gPT0gMSAmJgorCQkgICAgIXJjdV9kZXJlZmVyZW5jZV9yYXcocnhxdWV1ZS0+cnBzX2Zsb3dfdGFibGUpKSB7CiAJCQl0Y3B1ID0gbWFwLT5jcHVzWzBdOwogCQkJaWYgKGNwdV9vbmxpbmUodGNwdSkpCiAJCQkJY3B1ID0gdGNwdTsKQEAgLTM0MjMsNiArMzQyOCw4IEBACiAJX19za2JfcHVsbChza2IsIHNrYl9oZWFkbGVuKHNrYikpOwogCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOIC0gc2tiX2hlYWRyb29tKHNrYikpOwogCXNrYi0+dmxhbl90Y2kgPSAwOworCXNrYi0+ZGV2ID0gbmFwaS0+ZGV2OworCXNrYi0+c2tiX2lpZiA9IDA7CiAKIAluYXBpLT5za2IgPSBza2I7CiB9CkBAIC01MDU5LDYgKzUwNjYsNyBAQAogCiAJbGlzdF9hZGQoJmRldi0+dW5yZWdfbGlzdCwgJnNpbmdsZSk7CiAJcm9sbGJhY2tfcmVnaXN0ZXJlZF9tYW55KCZzaW5nbGUpOworCWxpc3RfZGVsKCZzaW5nbGUpOwogfQogCiB1bnNpZ25lZCBsb25nIG5ldGRldl9maXhfZmVhdHVyZXModW5zaWduZWQgbG9uZyBmZWF0dXJlcywgY29uc3QgY2hhciAqbmFtZSkKQEAgLTU2NTYsMTggKzU2NjQsNiBAQAogCiAJZGV2X25ldF9zZXQoZGV2LCAmaW5pdF9uZXQpOwogCi0JZGV2LT5udW1fdHhfcXVldWVzID0gdHhxczsKLQlkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9IHR4cXM7Ci0JaWYgKG5ldGlmX2FsbG9jX25ldGRldl9xdWV1ZXMoZGV2KSkKLQkJZ290byBmcmVlX3BjcHU7Ci0KLSNpZmRlZiBDT05GSUdfUlBTCi0JZGV2LT5udW1fcnhfcXVldWVzID0gcnhxczsKLQlkZXYtPnJlYWxfbnVtX3J4X3F1ZXVlcyA9IHJ4cXM7Ci0JaWYgKG5ldGlmX2FsbG9jX3J4X3F1ZXVlcyhkZXYpKQotCQlnb3RvIGZyZWVfcGNwdTsKLSNlbmRpZgotCiAJZGV2LT5nc29fbWF4X3NpemUgPSBHU09fTUFYX1NJWkU7CiAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5ldGh0b29sX250dXBsZV9saXN0Lmxpc3QpOwpAQCAtNTY3Nyw5ICs1NjczLDI2IEBACiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+bGlua193YXRjaF9saXN0KTsKIAlkZXYtPnByaXZfZmxhZ3MgPSBJRkZfWE1JVF9EU1RfUkVMRUFTRTsKIAlzZXR1cChkZXYpOworCisJZGV2LT5udW1fdHhfcXVldWVzID0gdHhxczsKKwlkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9IHR4cXM7CisJaWYgKG5ldGlmX2FsbG9jX25ldGRldl9xdWV1ZXMoZGV2KSkKKwkJZ290byBmcmVlX2FsbDsKKworI2lmZGVmIENPTkZJR19SUFMKKwlkZXYtPm51bV9yeF9xdWV1ZXMgPSByeHFzOworCWRldi0+cmVhbF9udW1fcnhfcXVldWVzID0gcnhxczsKKwlpZiAobmV0aWZfYWxsb2NfcnhfcXVldWVzKGRldikpCisJCWdvdG8gZnJlZV9hbGw7CisjZW5kaWYKKwogCXN0cmNweShkZXYtPm5hbWUsIG5hbWUpOwogCXJldHVybiBkZXY7CiAKK2ZyZWVfYWxsOgorCWZyZWVfbmV0ZGV2KGRldik7CisJcmV0dXJuIE5VTEw7CisKIGZyZWVfcGNwdToKIAlmcmVlX3BlcmNwdShkZXYtPnBjcHVfcmVmY250KTsKIAlrZnJlZShkZXYtPl90eCk7CkBAIC02MjA3LDYgKzYyMjAsNyBAQAogCQl9CiAJfQogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmRldl9raWxsX2xpc3QpOworCWxpc3RfZGVsKCZkZXZfa2lsbF9saXN0KTsKIAlydG5sX3VubG9jaygpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jIGIvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYwppbmRleCA1MDhmOWMxLi4xMzNmZDIyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jCisrKyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShoYSwgJmZyb21fbGlzdC0+bGlzdCwgbGlzdCkgewogCQl0eXBlID0gYWRkcl90eXBlID8gYWRkcl90eXBlIDogaGEtPnR5cGU7Ci0JCV9faHdfYWRkcl9kZWwodG9fbGlzdCwgaGEtPmFkZHIsIGFkZHJfbGVuLCBhZGRyX3R5cGUpOworCQlfX2h3X2FkZHJfZGVsKHRvX2xpc3QsIGhhLT5hZGRyLCBhZGRyX2xlbiwgdHlwZSk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChfX2h3X2FkZHJfZGVsX211bHRpcGxlKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2V0aHRvb2wuYyBiL25ldC9jb3JlL2V0aHRvb2wuYwppbmRleCAxNzc0MTc4Li5mZjIzMDI5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9ldGh0b29sLmMKKysrIGIvbmV0L2NvcmUvZXRodG9vbC5jCkBAIC04MTcsNyArODE3LDcgQEAKIAlpZiAocmVncy5sZW4gPiByZWdsZW4pCiAJCXJlZ3MubGVuID0gcmVnbGVuOwogCi0JcmVnYnVmID0gdm1hbGxvYyhyZWdsZW4pOworCXJlZ2J1ZiA9IHZ6YWxsb2MocmVnbGVuKTsKIAlpZiAoIXJlZ2J1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggNzUwZGI1Ny4uMmQ2NWM2YiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTExMjEsOCArMTEyMSw3IEBACiAJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJCQlpZiAoYWZfb3BzLT52YWxpZGF0ZV9saW5rX2FmKSB7Ci0JCQkJZXJyID0gYWZfb3BzLT52YWxpZGF0ZV9saW5rX2FmKGRldiwKLQkJCQkJCQl0YltJRkxBX0FGX1NQRUNdKTsKKwkJCQllcnIgPSBhZl9vcHMtPnZhbGlkYXRlX2xpbmtfYWYoZGV2LCBhZik7CiAJCQkJaWYgKGVyciA8IDApCiAJCQkJCXJldHVybiBlcnI7CiAJCQl9CkBAIC0xNjcyLDYgKzE2NzEsOSBAQAogCQkJc25wcmludGYoaWZuYW1lLCBJRk5BTVNJWiwgIiVzJSVkIiwgb3BzLT5raW5kKTsKIAogCQlkZXN0X25ldCA9IHJ0bmxfbGlua19nZXRfbmV0KG5ldCwgdGIpOworCQlpZiAoSVNfRVJSKGRlc3RfbmV0KSkKKwkJCXJldHVybiBQVFJfRVJSKGRlc3RfbmV0KTsKKwogCQlkZXYgPSBydG5sX2NyZWF0ZV9saW5rKG5ldCwgZGVzdF9uZXQsIGlmbmFtZSwgb3BzLCB0Yik7CiAKIAkJaWYgKElTX0VSUihkZXYpKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBkMzFiYjM2Li5kODgzZGNjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMjEwLDYgKzIxMCw3IEBACiAJc2hpbmZvID0gc2tiX3NoaW5mbyhza2IpOwogCW1lbXNldChzaGluZm8sIDAsIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sIGRhdGFyZWYpKTsKIAlhdG9taWNfc2V0KCZzaGluZm8tPmRhdGFyZWYsIDEpOworCWttZW1jaGVja19hbm5vdGF0ZV92YXJpYWJsZShzaGluZm8tPmRlc3RydWN0b3JfYXJnKTsKIAogCWlmIChmY2xvbmUpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKmNoaWxkID0gc2tiICsgMTsKQEAgLTI3NDQsOCArMjc0NSwxMiBAQAogCiBtZXJnZToKIAlpZiAob2Zmc2V0ID4gaGVhZGxlbikgewotCQlza2JpbmZvLT5mcmFnc1swXS5wYWdlX29mZnNldCArPSBvZmZzZXQgLSBoZWFkbGVuOwotCQlza2JpbmZvLT5mcmFnc1swXS5zaXplIC09IG9mZnNldCAtIGhlYWRsZW47CisJCXVuc2lnbmVkIGludCBlYXQgPSBvZmZzZXQgLSBoZWFkbGVuOworCisJCXNrYmluZm8tPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0ICs9IGVhdDsKKwkJc2tiaW5mby0+ZnJhZ3NbMF0uc2l6ZSAtPSBlYXQ7CisJCXNrYi0+ZGF0YV9sZW4gLT0gZWF0OworCQlza2ItPmxlbiAtPSBlYXQ7CiAJCW9mZnNldCA9IGhlYWRsZW47CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvZGNiL2RjYm5sLmMgYi9uZXQvZGNiL2RjYm5sLmMKaW5kZXggZDkwMGFiOS4uYzQ0MzQ4YSAxMDA2NDQKLS0tIGEvbmV0L2RjYi9kY2JubC5jCisrKyBiL25ldC9kY2IvZGNibmwuYwpAQCAtNTgzLDcgKzU4Myw3IEBACiAJdTggdXAsIGlkdHlwZTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCWlmICghdGJbRENCX0FUVFJfQVBQXSB8fCAhbmV0ZGV2LT5kY2JubF9vcHMtPmdldGFwcCkKKwlpZiAoIXRiW0RDQl9BVFRSX0FQUF0pCiAJCWdvdG8gb3V0OwogCiAJcmV0ID0gbmxhX3BhcnNlX25lc3RlZChhcHBfdGIsIERDQl9BUFBfQVRUUl9NQVgsIHRiW0RDQl9BVFRSX0FQUF0sCkBAIC02MDQsNyArNjA0LDE2IEBACiAJCWdvdG8gb3V0OwogCiAJaWQgPSBubGFfZ2V0X3UxNihhcHBfdGJbRENCX0FQUF9BVFRSX0lEXSk7Ci0JdXAgPSBuZXRkZXYtPmRjYm5sX29wcy0+Z2V0YXBwKG5ldGRldiwgaWR0eXBlLCBpZCk7CisKKwlpZiAobmV0ZGV2LT5kY2JubF9vcHMtPmdldGFwcCkgeworCQl1cCA9IG5ldGRldi0+ZGNibmxfb3BzLT5nZXRhcHAobmV0ZGV2LCBpZHR5cGUsIGlkKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgZGNiX2FwcCBhcHAgPSB7CisJCQkJCS5zZWxlY3RvciA9IGlkdHlwZSwKKwkJCQkJLnByb3RvY29sID0gaWQsCisJCQkJICAgICB9OworCQl1cCA9IGRjYl9nZXRhcHAobmV0ZGV2LCAmYXBwKTsKKwl9CiAKIAkvKiBzZW5kIHRoaXMgYmFjayAqLwogCWRjYm5sX3NrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOwpAQCAtNjE3LDYgKzYyNiw5IEBACiAJZGNiLT5jbWQgPSBEQ0JfQ01EX0dBUFA7CiAKIAlhcHBfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KGRjYm5sX3NrYiwgRENCX0FUVFJfQVBQKTsKKwlpZiAoIWFwcF9uZXN0KQorCQlnb3RvIG91dF9jYW5jZWw7CisKIAlyZXQgPSBubGFfcHV0X3U4KGRjYm5sX3NrYiwgRENCX0FQUF9BVFRSX0lEVFlQRSwgaWR0eXBlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9jYW5jZWw7CkBAIC0xMTgxLDcgKzExOTMsNyBAQAogCQkJZ290byBlcnI7CiAJfQogCi0JaWYgKGllZWVbRENCX0FUVFJfSUVFRV9QRkNdICYmIG9wcy0+aWVlZV9zZXRldHMpIHsKKwlpZiAoaWVlZVtEQ0JfQVRUUl9JRUVFX1BGQ10gJiYgb3BzLT5pZWVlX3NldHBmYykgewogCQlzdHJ1Y3QgaWVlZV9wZmMgKnBmYyA9IG5sYV9kYXRhKGllZWVbRENCX0FUVFJfSUVFRV9QRkNdKTsKIAkJZXJyID0gb3BzLT5pZWVlX3NldHBmYyhuZXRkZXYsIHBmYyk7CiAJCWlmIChlcnIpCkBAIC0xNjA0LDYgKzE2MTYsMTAgQEAKIHU4IGRjYl9zZXRhcHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGRjYl9hcHAgKm5ldykKIHsKIAlzdHJ1Y3QgZGNiX2FwcF90eXBlICppdHI7CisJc3RydWN0IGRjYl9hcHBfdHlwZSBldmVudDsKKworCW1lbWNweSgmZXZlbnQubmFtZSwgZGV2LT5uYW1lLCBzaXplb2YoZXZlbnQubmFtZSkpOworCW1lbWNweSgmZXZlbnQuYXBwLCBuZXcsIHNpemVvZihldmVudC5hcHApKTsKIAogCXNwaW5fbG9jaygmZGNiX2xvY2spOwogCS8qIFNlYXJjaCBmb3IgZXhpc3RpbmcgbWF0Y2ggYW5kIHJlcGxhY2UgKi8KQEAgLTE2MzUsNyArMTY1MSw3IEBACiAJfQogb3V0OgogCXNwaW5fdW5sb2NrKCZkY2JfbG9jayk7Ci0JY2FsbF9kY2JldmVudF9ub3RpZmllcnMoRENCX0FQUF9FVkVOVCwgbmV3KTsKKwljYWxsX2RjYmV2ZW50X25vdGlmaWVycyhEQ0JfQVBQX0VWRU5ULCAmZXZlbnQpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkY2Jfc2V0YXBwKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lucHV0LmMgYi9uZXQvZGNjcC9pbnB1dC5jCmluZGV4IDhjZGUwMDkuLjQyMjJlN2EgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lucHV0LmMKKysrIGIvbmV0L2RjY3AvaW5wdXQuYwpAQCAtNjE0LDYgKzYxNCw5IEBACiAJCS8qIENhbGxlciAoZGNjcF92NF9kb19yY3YpIHdpbGwgc2VuZCBSZXNldCAqLwogCQlkY2ItPmRjY3BkX3Jlc2V0X2NvZGUgPSBEQ0NQX1JFU0VUX0NPREVfTk9fQ09OTkVDVElPTjsKIAkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChzay0+c2tfc3RhdGUgPT0gRENDUF9DTE9TRUQpIHsKKwkJZGNiLT5kY2NwZF9yZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX05PX0NPTk5FQ1RJT047CisJCXJldHVybiAxOwogCX0KIAogCWlmIChzay0+c2tfc3RhdGUgIT0gRENDUF9SRVFVRVNUSU5HICYmIHNrLT5za19zdGF0ZSAhPSBEQ0NQX1JFU1BPTkQpIHsKQEAgLTY2OCwxMCArNjcxLDYgQEAKIAl9CiAKIAlzd2l0Y2ggKHNrLT5za19zdGF0ZSkgewotCWNhc2UgRENDUF9DTE9TRUQ6Ci0JCWRjYi0+ZGNjcGRfcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9OT19DT05ORUNUSU9OOwotCQlyZXR1cm4gMTsKLQogCWNhc2UgRENDUF9SRVFVRVNUSU5HOgogCQlxdWV1ZWQgPSBkY2NwX3Jjdl9yZXF1ZXN0X3NlbnRfc3RhdGVfcHJvY2Vzcyhzaywgc2tiLCBkaCwgbGVuKTsKIAkJaWYgKHF1ZXVlZCA+PSAwKQpkaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwppbmRleCA3Mzk0MzVhLi5jZmE3YTVlIDEwMDY0NAotLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYworKysgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwpAQCAtNjcsOCArNjcsOSBAQAogCXNpemVfdCByZXN1bHRfbGVuID0gMDsKIAljb25zdCBjaGFyICpkYXRhID0gX2RhdGEsICplbmQsICpvcHQ7CiAKLQlrZW50ZXIoIiUlJWQsJXMsJyVzJywlenUiLAotCSAgICAgICBrZXktPnNlcmlhbCwga2V5LT5kZXNjcmlwdGlvbiwgZGF0YSwgZGF0YWxlbik7CisJa2VudGVyKCIlJSVkLCVzLCclKi4qcycsJXp1IiwKKwkgICAgICAga2V5LT5zZXJpYWwsIGtleS0+ZGVzY3JpcHRpb24sCisJICAgICAgIChpbnQpZGF0YWxlbiwgKGludClkYXRhbGVuLCBkYXRhLCBkYXRhbGVuKTsKIAogCWlmIChkYXRhbGVuIDw9IDEgfHwgIWRhdGEgfHwgZGF0YVtkYXRhbGVuIC0gMV0gIT0gJ1wwJykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMTcsNiArMjE4LDE5IEBACiAJCXNlcV9wcmludGYobSwgIjogJXUiLCBrZXktPmRhdGFsZW4pOwogfQogCisvKgorICogcmVhZCB0aGUgRE5TIGRhdGEKKyAqIC0gdGhlIGtleSdzIHNlbWFwaG9yZSBpcyByZWFkLWxvY2tlZAorICovCitzdGF0aWMgbG9uZyBkbnNfcmVzb2x2ZXJfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksCisJCQkgICAgICBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKQoreworCWlmIChrZXktPnR5cGVfZGF0YS54WzBdKQorCQlyZXR1cm4ga2V5LT50eXBlX2RhdGEueFswXTsKKworCXJldHVybiB1c2VyX3JlYWQoa2V5LCBidWZmZXIsIGJ1Zmxlbik7Cit9CisKIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9kbnNfcmVzb2x2ZXIgPSB7CiAJLm5hbWUJCT0gImRuc19yZXNvbHZlciIsCiAJLmluc3RhbnRpYXRlCT0gZG5zX3Jlc29sdmVyX2luc3RhbnRpYXRlLApAQCAtMjI0LDcgKzIzOCw3IEBACiAJLnJldm9rZQkJPSB1c2VyX3Jldm9rZSwKIAkuZGVzdHJveQk9IHVzZXJfZGVzdHJveSwKIAkuZGVzY3JpYmUJPSBkbnNfcmVzb2x2ZXJfZGVzY3JpYmUsCi0JLnJlYWQJCT0gdXNlcl9yZWFkLAorCS5yZWFkCQk9IGRuc19yZXNvbHZlcl9yZWFkLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9kbnNfcmVzb2x2ZXIodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9kc2EvZHNhLmMgYi9uZXQvZHNhL2RzYS5jCmluZGV4IDBjODc3YTcuLjNmYjE0YjcgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvZHNhLmMKKysrIGIvbmV0L2RzYS9kc2EuYwpAQCAtNDI4LDcgKzQyOCw3IEBACiB9CiBtb2R1bGVfZXhpdChkc2FfY2xlYW51cF9tb2R1bGUpOwogCi1NT0RVTEVfQVVUSE9SKCJMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4iKQorTU9EVUxFX0FVVEhPUigiTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSBzd2l0Y2ggY2hpcHMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06ZHNhIik7CmRpZmYgLS1naXQgYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwppbmRleCAxNWRjYzFhLi4wYzI4MjYzIDEwMDY0NAotLS0gYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCisrKyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKQEAgLTI2NSwxMyArMjY1LDEzIEBACiBzdGF0aWMgaW50IGVjb25ldF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBzb2NrYWRkcl9lYyAqc2FkZHI9KHN0cnVjdCBzb2NrYWRkcl9lYyAqKW1zZy0+bXNnX25hbWU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZWNfYWRkciBhZGRyOwogCWludCBlcnI7CiAJdW5zaWduZWQgY2hhciBwb3J0LCBjYjsKICNpZiBkZWZpbmVkKENPTkZJR19FQ09ORVRfQVVOVURQKSB8fCBkZWZpbmVkKENPTkZJR19FQ09ORVRfTkFUSVZFKQorCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGVjX2NiICplYjsKICNlbmRpZgpAQCAtNDg4LDEwICs0ODgsMTAgQEAKIAogZXJyb3JfZnJlZV9idWY6CiAJdmZyZWUodXNlcmJ1Zik7CitlcnJvcjoKICNlbHNlCiAJZXJyID0gLUVQUk9UT1RZUEU7CiAjZW5kaWYKLQllcnJvcjoKIAltdXRleF91bmxvY2soJmVjb25ldF9tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IGYyYjYxMTAuLjQ1Yjg5ZDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTg4MCw2ICs4ODAsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0woaW5ldF9pb2N0bCk7CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitpbnQgaW5ldF9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJaW50IGVyciA9IC1FTk9JT0NUTENNRDsKKworCWlmIChzay0+c2tfcHJvdC0+Y29tcGF0X2lvY3RsKQorCQllcnIgPSBzay0+c2tfcHJvdC0+Y29tcGF0X2lvY3RsKHNrLCBjbWQsIGFyZyk7CisKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldF9zdHJlYW1fb3BzID0gewogCS5mYW1pbHkJCSAgID0gUEZfSU5FVCwKIAkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCkBAIC05MDMsNiArOTE2LDcgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCisJLmNvbXBhdF9pb2N0bAkgICA9IGluZXRfY29tcGF0X2lvY3RsLAogI2VuZGlmCiB9OwogRVhQT1JUX1NZTUJPTChpbmV0X3N0cmVhbV9vcHMpOwpAQCAtOTI5LDYgKzk0Myw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorCS5jb21wYXRfaW9jdGwJICAgPSBpbmV0X2NvbXBhdF9pb2N0bCwKICNlbmRpZgogfTsKIEVYUE9SVF9TWU1CT0woaW5ldF9kZ3JhbV9vcHMpOwpAQCAtOTU5LDYgKzk3NCw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorCS5jb21wYXRfaW9jdGwJICAgPSBpbmV0X2NvbXBhdF9pb2N0bCwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCAwNGM4YjY5Li43OTI3NTg5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtMTAxNywxNCArMTAxNywxMyBAQAogCQlJUFY0X0RFVkNPTkZfQUxMKG5ldCwgUFJPWFlfQVJQKSA9IG9uOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKF9faW5fZGV2X2dldF9yY3UoZGV2KSkgewotCQlJTl9ERVZfQ09ORl9TRVQoX19pbl9kZXZfZ2V0X3JjdShkZXYpLCBQUk9YWV9BUlAsIG9uKTsKKwlpZiAoX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSkgeworCQlJTl9ERVZfQ09ORl9TRVQoX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSwgUFJPWFlfQVJQLCBvbik7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVOWElPOwogfQogCi0vKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqLwogc3RhdGljIGludCBhcnBfcmVxX3NldF9wdWJsaWMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwcmVxICpyLAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTIzMywxMCArMTIzMiwxMCBAQAogCWlmICghKHIuYXJwX2ZsYWdzICYgQVRGX05FVE1BU0spKQogCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZyLmFycF9uZXRtYXNrKS0+c2luX2FkZHIuc19hZGRyID0KIAkJCQkJCQkgICBodG9ubCgweEZGRkZGRkZGVUwpOwotCXJjdV9yZWFkX2xvY2soKTsKKwlydG5sX2xvY2soKTsKIAlpZiAoci5hcnBfZGV2WzBdKSB7CiAJCWVyciA9IC1FTk9ERVY7Ci0JCWRldiA9IGRldl9nZXRfYnlfbmFtZV9yY3UobmV0LCByLmFycF9kZXYpOworCQlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIHIuYXJwX2Rldik7CiAJCWlmIChkZXYgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCkBAIC0xMjYzLDcgKzEyNjIsNyBAQAogCQlicmVhazsKIAl9CiBvdXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJcnRubF91bmxvY2soKTsKIAlpZiAoY21kID09IFNJT0NHQVJQICYmICFlcnIgJiYgY29weV90b191c2VyKGFyZywgJnIsIHNpemVvZihyKSkpCiAJCWVyciA9IC1FRkFVTFQ7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCA3NDhjYjViLi5kZjQ2MTZmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0xMDMwLDYgKzEwMzAsMjEgQEAKIAlyZXR1cm4gbXR1ID49IDY4OwogfQogCitzdGF0aWMgdm9pZCBpbmV0ZGV2X3NlbmRfZ3JhdHVpdG91c19hcnAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2KQorCit7CisJc3RydWN0IGluX2lmYWRkciAqaWZhID0gaW5fZGV2LT5pZmFfbGlzdDsKKworCWlmICghaWZhKQorCQlyZXR1cm47CisKKwlhcnBfc2VuZChBUlBPUF9SRVFVRVNULCBFVEhfUF9BUlAsCisJCSBpZmEtPmlmYV9hZGRyZXNzLCBkZXYsCisJCSBpZmEtPmlmYV9hZGRyZXNzLCBOVUxMLAorCQkgZGV2LT5kZXZfYWRkciwgTlVMTCk7Cit9CisKIC8qIENhbGxlZCBvbmx5IHVuZGVyIFJUTkwgc2VtYXBob3JlICovCiAKIHN0YXRpYyBpbnQgaW5ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCkBAIC0xMDgyLDE4ICsxMDk3LDEzIEBACiAJCX0KIAkJaXBfbWNfdXAoaW5fZGV2KTsKIAkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBORVRERVZfTk9USUZZX1BFRVJTOgogCWNhc2UgTkVUREVWX0NIQU5HRUFERFI6CisJCWlmICghSU5fREVWX0FSUF9OT1RJRlkoaW5fZGV2KSkKKwkJCWJyZWFrOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIE5FVERFVl9OT1RJRllfUEVFUlM6CiAJCS8qIFNlbmQgZ3JhdHVpdG91cyBBUlAgdG8gbm90aWZ5IG9mIGxpbmsgY2hhbmdlICovCi0JCWlmIChJTl9ERVZfQVJQX05PVElGWShpbl9kZXYpKSB7Ci0JCQlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSBpbl9kZXYtPmlmYV9saXN0OwotCi0JCQlpZiAoaWZhKQotCQkJCWFycF9zZW5kKEFSUE9QX1JFUVVFU1QsIEVUSF9QX0FSUCwKLQkJCQkJIGlmYS0+aWZhX2FkZHJlc3MsIGRldiwKLQkJCQkJIGlmYS0+aWZhX2FkZHJlc3MsIE5VTEwsCi0JCQkJCSBkZXYtPmRldl9hZGRyLCBOVUxMKTsKLQkJfQorCQlpbmV0ZGV2X3NlbmRfZ3JhdHVpdG91c19hcnAoZGV2LCBpbl9kZXYpOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9ET1dOOgogCQlpcF9tY19kb3duKGluX2Rldik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYyBiL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jCmluZGV4IGM1YWY5MDkuLjNjOGRmYTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jCkBAIC01MDUsNyArNTA1LDkgQEAKIAkJCX0KIAogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJCQlpbmV0X3R3c2tfZGVzY2hlZHVsZSh0dywgdHdkcik7CisJCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJCWluZXRfdHdza19wdXQodHcpOwogCQkJZ290byByZXN0YXJ0X3JjdTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldHBlZXIuYyBiL25ldC9pcHY0L2luZXRwZWVyLmMKaW5kZXggZDliYzg1Ny4uYTk2ZTY1NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldHBlZXIuYworKysgYi9uZXQvaXB2NC9pbmV0cGVlci5jCkBAIC00NzUsNyArNDc1LDcgQEAKIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsIGludCBjcmVhdGUpCiB7CiAJc3RydWN0IGluZXRfcGVlciBfX3JjdSAqKnN0YWNrW1BFRVJfTUFYREVQVEhdLCAqKipzdGFja3B0cjsKLQlzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UgPSBmYW1pbHlfdG9fYmFzZShBRl9JTkVUKTsKKwlzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UgPSBmYW1pbHlfdG9fYmFzZShkYWRkci0+ZmFtaWx5KTsKIAlzdHJ1Y3QgaW5ldF9wZWVyICpwOwogCiAJLyogTG9vayB1cCBmb3IgdGhlIGFkZHJlc3MgcXVpY2tseSwgbG9ja2xlc3MuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jCmluZGV4IGViNjhhMGUuLjY2MTNlZGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2dyZS5jCisrKyBiL25ldC9pcHY0L2lwX2dyZS5jCkBAIC03NzUsNiArNzc1LDcgQEAKIAkJCS5mbDRfZHN0ID0gZHN0LAogCQkJLmZsNF9zcmMgPSB0aXBoLT5zYWRkciwKIAkJCS5mbDRfdG9zID0gUlRfVE9TKHRvcyksCisJCQkucHJvdG8gPSBJUFBST1RPX0dSRSwKIAkJCS5mbF9ncmVfa2V5ID0gdHVubmVsLT5wYXJtcy5vX2tleQogCQl9OwogCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksICZydCwgJmZsKSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDNmM2E5YWYuLjhiNjVhMTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bmV0L2lwaXAuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgpAQCAtMTQzNCw2ICsxNDM1LDgxIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RydWN0IGNvbXBhdF9zaW9jX3NnX3JlcSB7CisJc3RydWN0IGluX2FkZHIgc3JjOworCXN0cnVjdCBpbl9hZGRyIGdycDsKKwljb21wYXRfdWxvbmdfdCBwa3RjbnQ7CisJY29tcGF0X3Vsb25nX3QgYnl0ZWNudDsKKwljb21wYXRfdWxvbmdfdCB3cm9uZ19pZjsKK307CisKK3N0cnVjdCBjb21wYXRfc2lvY192aWZfcmVxIHsKKwl2aWZpX3QJdmlmaTsJCS8qIFdoaWNoIGlmYWNlICovCisJY29tcGF0X3Vsb25nX3QgaWNvdW50OworCWNvbXBhdF91bG9uZ190IG9jb3VudDsKKwljb21wYXRfdWxvbmdfdCBpYnl0ZXM7CisJY29tcGF0X3Vsb25nX3Qgb2J5dGVzOworfTsKKworaW50IGlwbXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgY29tcGF0X3Npb2Nfc2dfcmVxIHNyOworCXN0cnVjdCBjb21wYXRfc2lvY192aWZfcmVxIHZyOworCXN0cnVjdCB2aWZfZGV2aWNlICp2aWY7CisJc3RydWN0IG1mY19jYWNoZSAqYzsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisJc3RydWN0IG1yX3RhYmxlICptcnQ7CisKKwltcnQgPSBpcG1yX2dldF90YWJsZShuZXQsIHJhd19zayhzayktPmlwbXJfdGFibGUgPyA6IFJUX1RBQkxFX0RFRkFVTFQpOworCWlmIChtcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0dFVFZJRkNOVDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2ciwgYXJnLCBzaXplb2YodnIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodnIudmlmaSA+PSBtcnQtPm1heHZpZikKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZWFkX2xvY2soJm1ydF9sb2NrKTsKKwkJdmlmID0gJm1ydC0+dmlmX3RhYmxlW3ZyLnZpZmldOworCQlpZiAoVklGX0VYSVNUUyhtcnQsIHZyLnZpZmkpKSB7CisJCQl2ci5pY291bnQgPSB2aWYtPnBrdF9pbjsKKwkJCXZyLm9jb3VudCA9IHZpZi0+cGt0X291dDsKKwkJCXZyLmlieXRlcyA9IHZpZi0+Ynl0ZXNfaW47CisJCQl2ci5vYnl0ZXMgPSB2aWYtPmJ5dGVzX291dDsKKwkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdnIsIHNpemVvZih2cikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWNhc2UgU0lPQ0dFVFNHQ05UOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnNyLCBhcmcsIHNpemVvZihzcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQljID0gaXBtcl9jYWNoZV9maW5kKG1ydCwgc3Iuc3JjLnNfYWRkciwgc3IuZ3JwLnNfYWRkcik7CisJCWlmIChjKSB7CisJCQlzci5wa3RjbnQgPSBjLT5tZmNfdW4ucmVzLnBrdDsKKwkJCXNyLmJ5dGVjbnQgPSBjLT5tZmNfdW4ucmVzLmJ5dGVzOworCQkJc3Iud3JvbmdfaWYgPSBjLT5tZmNfdW4ucmVzLndyb25nX2lmOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmc3IsIHNpemVvZihzcikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KK30KKyNlbmRpZgorCiAKIHN0YXRpYyBpbnQgaXBtcl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0X21hbmdsZS5jCmluZGV4IGI4ZGRjYzQuLmE1ZTUyYTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0X21hbmdsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0X21hbmdsZS5jCkBAIC02MCwxMiArNjAsMTIgQEAKIAogCWlmIChtYW5nbGUtPmZsYWdzICYgfkFSUFRfTUFOR0xFX01BU0sgfHwKIAkgICAgIShtYW5nbGUtPmZsYWdzICYgQVJQVF9NQU5HTEVfTUFTSykpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobWFuZ2xlLT50YXJnZXQgIT0gTkZfRFJPUCAmJiBtYW5nbGUtPnRhcmdldCAhPSBORl9BQ0NFUFQgJiYKIAkgICBtYW5nbGUtPnRhcmdldCAhPSBYVF9DT05USU5VRSkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiB0cnVlOworCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgYXJwdF9tYW5nbGVfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IGEzZDVhYjcuLjYzOTBiYTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCiBzdGF0aWMgc3RydWN0IHJhd19oYXNoaW5mbyByYXdfdjRfaGFzaGluZm8gPSB7CiAJLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQocmF3X3Y0X2hhc2hpbmZvLmxvY2spLApAQCAtODM4LDYgKzgzOSwyMyBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbnQgY29tcGF0X3Jhd19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DT1VUUToKKwljYXNlIFNJT0NJTlE6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJZGVmYXVsdDoKKyNpZmRlZiBDT05GSUdfSVBfTVJPVVRFCisJCXJldHVybiBpcG1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpOworI2Vsc2UKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKyNlbmRpZgorCX0KK30KKyNlbmRpZgorCiBzdHJ1Y3QgcHJvdG8gcmF3X3Byb3QgPSB7CiAJLm5hbWUJCSAgID0gIlJBVyIsCiAJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLApAQCAtODYwLDYgKzg3OCw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9yYXdfc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfcmF3X2dldHNvY2tvcHQsCisJLmNvbXBhdF9pb2N0bAkgICA9IGNvbXBhdF9yYXdfaW9jdGwsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDM1MWRjNGUuLjZlZDY2MDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMjcwNyw2ICsyNzA3LDExIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9ibGFja2hvbGVfZGVmYXVsdF9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBpcHY0X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBtdHUpCiB7CiB9CkBAIC0yNzE2LDYgKzI3MjEsOCBAQAogCS5wcm90b2NvbAkJPQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmRlc3Ryb3kJCT0JaXB2NF9kc3RfZGVzdHJveSwKIAkuY2hlY2sJCQk9CWlwdjRfYmxhY2tob2xlX2RzdF9jaGVjaywKKwkuZGVmYXVsdF9tdHUJCT0JaXB2NF9ibGFja2hvbGVfZGVmYXVsdF9tdHUsCisJLmRlZmF1bHRfYWR2bXNzCQk9CWlwdjRfZGVmYXVsdF9hZHZtc3MsCiAJLnVwZGF0ZV9wbXR1CQk9CWlwdjRfcnRfYmxhY2tob2xlX3VwZGF0ZV9wbXR1LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAyNTQ5YjI5Li42NWY2YzA0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtMTIyMiw3ICsxMjIyLDcgQEAKIAl9CiAKIAkvKiBELVNBQ0sgZm9yIGFscmVhZHkgZm9yZ290dGVuIGRhdGEuLi4gRG8gZHVtYiBjb3VudGluZy4gKi8KLQlpZiAoZHVwX3NhY2sgJiYKKwlpZiAoZHVwX3NhY2sgJiYgdHAtPnVuZG9fbWFya2VyICYmIHRwLT51bmRvX3JldHJhbnMgJiYKIAkgICAgIWFmdGVyKGVuZF9zZXFfMCwgcHJpb3Jfc25kX3VuYSkgJiYKIAkgICAgYWZ0ZXIoZW5kX3NlcV8wLCB0cC0+dW5kb19tYXJrZXIpKQogCQl0cC0+dW5kb19yZXRyYW5zLS07CkBAIC0xMjk5LDcgKzEyOTksOCBAQAogCiAJLyogQWNjb3VudCBELVNBQ0sgZm9yIHJldHJhbnNtaXR0ZWQgcGFja2V0LiAqLwogCWlmIChkdXBfc2FjayAmJiAoc2Fja2VkICYgVENQQ0JfUkVUUkFOUykpIHsKLQkJaWYgKGFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSwgdHAtPnVuZG9fbWFya2VyKSkKKwkJaWYgKHRwLT51bmRvX21hcmtlciAmJiB0cC0+dW5kb19yZXRyYW5zICYmCisJCSAgICBhZnRlcihUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEsIHRwLT51bmRvX21hcmtlcikpCiAJCQl0cC0+dW5kb19yZXRyYW5zLS07CiAJCWlmIChzYWNrZWQgJiBUQ1BDQl9TQUNLRURfQUNLRUQpCiAJCQlzdGF0ZS0+cmVvcmQgPSBtaW4oZmFja19jb3VudCwgc3RhdGUtPnJlb3JkKTsKQEAgLTQzOTksNyArNDQwMCw3IEBACiAJCQlpZiAoIXNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgMCwgdHAtPnVjb3B5LmlvdiwgY2h1bmspKSB7CiAJCQkJdHAtPnVjb3B5LmxlbiAtPSBjaHVuazsKIAkJCQl0cC0+Y29waWVkX3NlcSArPSBjaHVuazsKLQkJCQllYXRlbiA9IChjaHVuayA9PSBza2ItPmxlbiAmJiAhdGgtPmZpbik7CisJCQkJZWF0ZW4gPSAoY2h1bmsgPT0gc2tiLT5sZW4pOwogCQkJCXRjcF9yY3Zfc3BhY2VfYWRqdXN0KHNrKTsKIAkJCX0KIAkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IDg1NmY2ODQuLjAyZjU4M2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtMTk5NCw3ICsxOTk0LDYgQEAKIAkJCQl9CiAJCQkJcmVxID0gcmVxLT5kbF9uZXh0OwogCQkJfQotCQkJc3QtPm9mZnNldCA9IDA7CiAJCQlpZiAoKytzdC0+c2J1Y2tldCA+PSBpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5saXN0ZW5fb3B0LT5ucl90YWJsZV9lbnRyaWVzKQogCQkJCWJyZWFrOwogZ2V0X3JlcToKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCA0MDZmMzIwLi5kZmE1YmViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC0yMTYyLDcgKzIxNjIsNyBAQAogCQlpZiAoIXRwLT5yZXRyYW5zX3N0YW1wKQogCQkJdHAtPnJldHJhbnNfc3RhbXAgPSBUQ1BfU0tCX0NCKHNrYiktPndoZW47CiAKLQkJdHAtPnVuZG9fcmV0cmFucysrOworCQl0cC0+dW5kb19yZXRyYW5zICs9IHRjcF9za2JfcGNvdW50KHNrYik7CiAKIAkJLyogc25kX254dCBpcyBzdG9yZWQgdG8gZGV0ZWN0IGxvc3Mgb2YgcmV0cmFuc21pdHRlZCBzZWdtZW50LAogCQkgKiBzZWUgdGNwX2lucHV0LmMgdGNwX3NhY2t0YWdfd3JpdGVfcXVldWUoKS4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDI0YTFjZjEuLmZkNjc4MmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjY2MSwxNCArMjY2MSwxMiBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYTsKLQlMSVNUX0hFQUQoa2VlcF9saXN0KTsKLQlpbnQgc3RhdGU7CisJaW50IHN0YXRlLCBpOwogCiAJQVNTRVJUX1JUTkwoKTsKIAotCS8qIEZsdXNoIHJvdXRlcyBpZiBkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCBvciBpdCBpcyBub3QgbG9vcGJhY2sgKi8KLQlpZiAoaG93IHx8ICEoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykpCi0JCXJ0Nl9pZmRvd24obmV0LCBkZXYpOworCXJ0Nl9pZmRvd24obmV0LCBkZXYpOworCW5laWdoX2lmZG93bigmbmRfdGJsLCBkZXYpOwogCiAJaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTsKIAlpZiAoaWRldiA9PSBOVUxMKQpAQCAtMjY4OSw2ICsyNjg3LDIzIEBACiAKIAl9CiAKKwkvKiBTdGVwIDI6IGNsZWFyIGhhc2ggdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSU42X0FERFJfSFNJWkU7IGkrKykgeworCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaCA9ICZpbmV0Nl9hZGRyX2xzdFtpXTsKKwkJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwkJc3Bpbl9sb2NrX2JoKCZhZGRyY29uZl9oYXNoX2xvY2spOworCXJlc3RhcnQ6CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpZmEsIG4sIGgsIGFkZHJfbHN0KSB7CisJCQlpZiAoaWZhLT5pZGV2ID09IGlkZXYpIHsKKwkJCQlobGlzdF9kZWxfaW5pdF9yY3UoJmlmYS0+YWRkcl9sc3QpOworCQkJCWFkZHJjb25mX2RlbF90aW1lcihpZmEpOworCQkJCWdvdG8gcmVzdGFydDsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19iaCgmYWRkcmNvbmZfaGFzaF9sb2NrKTsKKwl9CisKIAl3cml0ZV9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAogCS8qIFN0ZXAgMjogY2xlYXIgZmxhZ3MgZm9yIHN0YXRlbGVzcyBhZGRyY29uZiAqLwpAQCAtMjcyMiw1MiArMjczNywyMyBAQAogCQkJCSAgICAgICBzdHJ1Y3QgaW5ldDZfaWZhZGRyLCBpZl9saXN0KTsKIAkJYWRkcmNvbmZfZGVsX3RpbWVyKGlmYSk7CiAKLQkJLyogSWYganVzdCBkb2luZyBsaW5rIGRvd24sIGFuZCBhZGRyZXNzIGlzIHBlcm1hbmVudAotCQkgICBhbmQgbm90IGxpbmstbG9jYWwsIHRoZW4gcmV0YWluIGl0LiAqLwotCQlpZiAoIWhvdyAmJgotCQkgICAgKGlmYS0+ZmxhZ3MmSUZBX0ZfUEVSTUFORU5UKSAmJgotCQkgICAgIShpcHY2X2FkZHJfdHlwZSgmaWZhLT5hZGRyKSAmIElQVjZfQUREUl9MSU5LTE9DQUwpKSB7Ci0JCQlsaXN0X21vdmVfdGFpbCgmaWZhLT5pZl9saXN0LCAma2VlcF9saXN0KTsKKwkJbGlzdF9kZWwoJmlmYS0+aWZfbGlzdCk7CiAKLQkJCS8qIElmIG5vdCBkb2luZyBEQUQgb24gdGhpcyBhZGRyZXNzLCBqdXN0IGtlZXAgaXQuICovCi0JCQlpZiAoKGRldi0+ZmxhZ3MmKElGRl9OT0FSUHxJRkZfTE9PUEJBQ0spKSB8fAotCQkJICAgIGlkZXYtPmNuZi5hY2NlcHRfZGFkIDw9IDAgfHwKLQkJCSAgICAoaWZhLT5mbGFncyAmIElGQV9GX05PREFEKSkKLQkJCQljb250aW51ZTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAotCQkJLyogSWYgaXQgd2FzIHRlbnRhdGl2ZSBhbHJlYWR5LCBubyBuZWVkIHRvIG5vdGlmeSAqLwotCQkJaWYgKGlmYS0+ZmxhZ3MgJiBJRkFfRl9URU5UQVRJVkUpCi0JCQkJY29udGludWU7CisJCXNwaW5fbG9ja19iaCgmaWZhLT5zdGF0ZV9sb2NrKTsKKwkJc3RhdGUgPSBpZmEtPnN0YXRlOworCQlpZmEtPnN0YXRlID0gSU5FVDZfSUZBRERSX1NUQVRFX0RFQUQ7CisJCXNwaW5fdW5sb2NrX2JoKCZpZmEtPnN0YXRlX2xvY2spOwogCi0JCQkvKiBGbGFnIGl0IGZvciBsYXRlciByZXN0b3JhdGlvbiB3aGVuIGxpbmsgY29tZXMgdXAgKi8KLQkJCWlmYS0+ZmxhZ3MgfD0gSUZBX0ZfVEVOVEFUSVZFOwotCQkJaWZhLT5zdGF0ZSA9IElORVQ2X0lGQUREUl9TVEFURV9EQUQ7Ci0JCX0gZWxzZSB7Ci0JCQlsaXN0X2RlbCgmaWZhLT5pZl9saXN0KTsKLQotCQkJLyogY2xlYXIgaGFzaCB0YWJsZSAqLwotCQkJc3Bpbl9sb2NrX2JoKCZhZGRyY29uZl9oYXNoX2xvY2spOwotCQkJaGxpc3RfZGVsX2luaXRfcmN1KCZpZmEtPmFkZHJfbHN0KTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZhZGRyY29uZl9oYXNoX2xvY2spOwotCi0JCQl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwotCQkJc3Bpbl9sb2NrX2JoKCZpZmEtPnN0YXRlX2xvY2spOwotCQkJc3RhdGUgPSBpZmEtPnN0YXRlOwotCQkJaWZhLT5zdGF0ZSA9IElORVQ2X0lGQUREUl9TVEFURV9ERUFEOwotCQkJc3Bpbl91bmxvY2tfYmgoJmlmYS0+c3RhdGVfbG9jayk7Ci0KLQkJCWlmIChzdGF0ZSAhPSBJTkVUNl9JRkFERFJfU1RBVEVfREVBRCkgewotCQkJCV9faXB2Nl9pZmFfbm90aWZ5KFJUTV9ERUxBRERSLCBpZmEpOwotCQkJCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZpbmV0NmFkZHJfY2hhaW4sCi0JCQkJCQkJICAgTkVUREVWX0RPV04sIGlmYSk7Ci0JCQl9Ci0KLQkJCWluNl9pZmFfcHV0KGlmYSk7Ci0JCQl3cml0ZV9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKKwkJaWYgKHN0YXRlICE9IElORVQ2X0lGQUREUl9TVEFURV9ERUFEKSB7CisJCQlfX2lwdjZfaWZhX25vdGlmeShSVE1fREVMQUREUiwgaWZhKTsKKwkJCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZpbmV0NmFkZHJfY2hhaW4sIE5FVERFVl9ET1dOLCBpZmEpOwogCQl9Ci0JfQorCQlpbjZfaWZhX3B1dChpZmEpOwogCi0JbGlzdF9zcGxpY2UoJmtlZXBfbGlzdCwgJmlkZXYtPmFkZHJfbGlzdCk7CisJCXdyaXRlX2xvY2tfYmgoJmlkZXYtPmxvY2spOworCX0KIAogCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAKQEAgLTQxNTYsOCArNDE0Miw3IEBACiAJCWFkZHJjb25mX2xlYXZlX3NvbGljdChpZnAtPmlkZXYsICZpZnAtPmFkZHIpOwogCQlkc3RfaG9sZCgmaWZwLT5ydC0+ZHN0KTsKIAotCQlpZiAoaWZwLT5zdGF0ZSA9PSBJTkVUNl9JRkFERFJfU1RBVEVfREVBRCAmJgotCQkgICAgaXA2X2RlbF9ydChpZnAtPnJ0KSkKKwkJaWYgKGlwNl9kZWxfcnQoaWZwLT5ydCkpCiAJCQlkc3RfZnJlZSgmaWZwLT5ydC0+ZHN0KTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmMKaW5kZXggOWZhYjI3NC4uMGUxZDUzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYworKysgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CkBAIC0xODA0LDYgKzE4MDUsODAgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdHJ1Y3QgY29tcGF0X3Npb2Nfc2dfcmVxNiB7CisJc3RydWN0IHNvY2thZGRyX2luNiBzcmM7CisJc3RydWN0IHNvY2thZGRyX2luNiBncnA7CisJY29tcGF0X3Vsb25nX3QgcGt0Y250OworCWNvbXBhdF91bG9uZ190IGJ5dGVjbnQ7CisJY29tcGF0X3Vsb25nX3Qgd3JvbmdfaWY7Cit9OworCitzdHJ1Y3QgY29tcGF0X3Npb2NfbWlmX3JlcTYgeworCW1pZmlfdAltaWZpOworCWNvbXBhdF91bG9uZ190IGljb3VudDsKKwljb21wYXRfdWxvbmdfdCBvY291bnQ7CisJY29tcGF0X3Vsb25nX3QgaWJ5dGVzOworCWNvbXBhdF91bG9uZ190IG9ieXRlczsKK307CisKK2ludCBpcDZtcl9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBjb21wYXRfc2lvY19zZ19yZXE2IHNyOworCXN0cnVjdCBjb21wYXRfc2lvY19taWZfcmVxNiB2cjsKKwlzdHJ1Y3QgbWlmX2RldmljZSAqdmlmOworCXN0cnVjdCBtZmM2X2NhY2hlICpjOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKwlzdHJ1Y3QgbXI2X3RhYmxlICptcnQ7CisKKwltcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS0+aXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTsKKwlpZiAobXJ0ID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHRVRNSUZDTlRfSU42OgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnZyLCBhcmcsIHNpemVvZih2cikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh2ci5taWZpID49IG1ydC0+bWF4dmlmKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlYWRfbG9jaygmbXJ0X2xvY2spOworCQl2aWYgPSAmbXJ0LT52aWY2X3RhYmxlW3ZyLm1pZmldOworCQlpZiAoTUlGX0VYSVNUUyhtcnQsIHZyLm1pZmkpKSB7CisJCQl2ci5pY291bnQgPSB2aWYtPnBrdF9pbjsKKwkJCXZyLm9jb3VudCA9IHZpZi0+cGt0X291dDsKKwkJCXZyLmlieXRlcyA9IHZpZi0+Ynl0ZXNfaW47CisJCQl2ci5vYnl0ZXMgPSB2aWYtPmJ5dGVzX291dDsKKwkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdnIsIHNpemVvZih2cikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWNhc2UgU0lPQ0dFVFNHQ05UX0lONjoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzciwgYXJnLCBzaXplb2Yoc3IpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJlYWRfbG9jaygmbXJ0X2xvY2spOworCQljID0gaXA2bXJfY2FjaGVfZmluZChtcnQsICZzci5zcmMuc2luNl9hZGRyLCAmc3IuZ3JwLnNpbjZfYWRkcik7CisJCWlmIChjKSB7CisJCQlzci5wa3RjbnQgPSBjLT5tZmNfdW4ucmVzLnBrdDsKKwkJCXNyLmJ5dGVjbnQgPSBjLT5tZmNfdW4ucmVzLmJ5dGVzOworCQkJc3Iud3JvbmdfaWYgPSBjLT5tZmNfdW4ucmVzLndyb25nX2lmOworCQkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKworCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZzciwgc2l6ZW9mKHNyKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisjZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgaXA2bXJfZm9yd2FyZDJfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCmluZGV4IDA5Yzg4ODkuLmRlMzM4MDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCkBAIC00MTAsNyArNDEwLDcgQEAKIAkJaWYgKHAgIT0gTlVMTCkgewogCQkJc2JfYWRkKG0sICIlMDJ4IiwgKnArKyk7CiAJCQlmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspCi0JCQkJc2JfYWRkKG0sICI6JTAyeCIsIHBbaV0pOworCQkJCXNiX2FkZChtLCAiOiUwMngiLCAqcCsrKTsKIAkJfQogCQlzYl9hZGQobSwgIiAiKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCA4NmMzOTUyLi5jNWIwOTE1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CiAKQEAgLTExNTcsNiArMTE1OCwyMyBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbnQgY29tcGF0X3Jhd3Y2X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NPVVRROgorCWNhc2UgU0lPQ0lOUToKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwlkZWZhdWx0OgorI2lmZGVmIENPTkZJR19JUFY2X01ST1VURQorCQlyZXR1cm4gaXA2bXJfY29tcGF0X2lvY3RsKHNrLCBjbWQsIGNvbXBhdF9wdHIoYXJnKSk7CisjZWxzZQorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworI2VuZGlmCisJfQorfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHJhd3Y2X2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KQogewogCWlmIChpbmV0X3NrKHNrKS0+aW5ldF9udW0gPT0gSVBQUk9UT19SQVcpCkBAIC0xMjE1LDYgKzEyMzMsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfcmF3djZfc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfcmF3djZfZ2V0c29ja29wdCwKKwkuY29tcGF0X2lvY3RsCSAgID0gY29tcGF0X3Jhd3Y2X2lvY3RsLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCAzNzNiZDA0Li45MDQzMTJlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTcyLDggKzcyLDYgQEAKICNkZWZpbmUgUlQ2X1RSQUNFKHguLi4pIGRvIHsgOyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZpbmUgQ0xPTkVfT0ZGTElOS19ST1VURSAwCi0KIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKiBpcDZfcnRfY29weShzdHJ1Y3QgcnQ2X2luZm8gKm9ydCk7CiBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeQkqaXA2X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBjb29raWUpOwogc3RhdGljIHVuc2lnbmVkIGludAkgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7CkBAIC0xMTUsNiArMTEzLDExIEBACiAJLmxvY2FsX291dAkJPQlfX2lwNl9sb2NhbF9vdXQsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9ibGFja2hvbGVfZGVmYXVsdF9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBpcDZfcnRfYmxhY2tob2xlX3VwZGF0ZV9wbXR1KHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIG10dSkKIHsKIH0KQEAgLTEyNCw2ICsxMjcsOCBAQAogCS5wcm90b2NvbAkJPQljcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKIAkuZGVzdHJveQkJPQlpcDZfZHN0X2Rlc3Ryb3ksCiAJLmNoZWNrCQkJPQlpcDZfZHN0X2NoZWNrLAorCS5kZWZhdWx0X210dQkJPQlpcDZfYmxhY2tob2xlX2RlZmF1bHRfbXR1LAorCS5kZWZhdWx0X2Fkdm1zcwkJPQlpcDZfZGVmYXVsdF9hZHZtc3MsCiAJLnVwZGF0ZV9wbXR1CQk9CWlwNl9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCiB9OwogCkBAIC0xOTYsNyArMjAxLDYgQEAKIAkJaW42X2Rldl9wdXQoaWRldik7CiAJfQogCWlmIChwZWVyKSB7Ci0JCUJVR19PTighKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0NBQ0hFKSk7CiAJCXJ0LT5ydDZpX3BlZXIgPSBOVUxMOwogCQlpbmV0X3B1dHBlZXIocGVlcik7CiAJfQpAQCAtMjA2LDkgKzIxMCw2IEBACiB7CiAJc3RydWN0IGluZXRfcGVlciAqcGVlcjsKIAotCWlmIChXQVJOX09OKCEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfQ0FDSEUpKSkKLQkJcmV0dXJuOwotCiAJcGVlciA9IGluZXRfZ2V0cGVlcl92NigmcnQtPnJ0NmlfZHN0LmFkZHIsIGNyZWF0ZSk7CiAJaWYgKHBlZXIgJiYgY21weGNoZygmcnQtPnJ0NmlfcGVlciwgTlVMTCwgcGVlcikgIT0gTlVMTCkKIAkJaW5ldF9wdXRwZWVyKHBlZXIpOwpAQCAtNzM4LDEzICs3MzksOCBAQAogCiAJaWYgKCFydC0+cnQ2aV9uZXh0aG9wICYmICEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfTk9ORVhUSE9QKSkKIAkJbnJ0ID0gcnQ2X2FsbG9jX2NvdyhydCwgJmZsLT5mbDZfZHN0LCAmZmwtPmZsNl9zcmMpOwotCWVsc2UgewotI2lmIENMT05FX09GRkxJTktfUk9VVEUKKwllbHNlCiAJCW5ydCA9IHJ0Nl9hbGxvY19jbG9uZShydCwgJmZsLT5mbDZfZHN0KTsKLSNlbHNlCi0JCWdvdG8gb3V0MjsKLSNlbmRpZgotCX0KIAogCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAlydCA9IG5ydCA/IDogbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OwpAQCAtMjU2MSwxNCArMjU1NywxNiBAQAogaW50IGlwdjZfc3lzY3RsX3J0Y2FjaGVfZmx1c2goY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwKIAkJCSAgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtPm5zcHJveHktPm5ldF9uczsKLQlpbnQgZGVsYXkgPSBuZXQtPmlwdjYuc3lzY3RsLmZsdXNoX2RlbGF5OwotCWlmICh3cml0ZSkgewotCQlwcm9jX2RvaW50dmVjKGN0bCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7Ci0JCWZpYjZfcnVuX2djKGRlbGF5IDw9IDAgPyB+MFVMIDogKHVuc2lnbmVkIGxvbmcpZGVsYXksIG5ldCk7Ci0JCXJldHVybiAwOwotCX0gZWxzZQorCXN0cnVjdCBuZXQgKm5ldDsKKwlpbnQgZGVsYXk7CisJaWYgKCF3cml0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXQgPSAoc3RydWN0IG5ldCAqKWN0bC0+ZXh0cmExOworCWRlbGF5ID0gbmV0LT5pcHY2LnN5c2N0bC5mbHVzaF9kZWxheTsKKwlwcm9jX2RvaW50dmVjKGN0bCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJZmliNl9ydW5fZ2MoZGVsYXkgPD0gMCA/IH4wVUwgOiAodW5zaWduZWQgbG9uZylkZWxheSwgbmV0KTsKKwlyZXR1cm4gMDsKIH0KIAogY3RsX3RhYmxlIGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGVbXSA9IHsKQEAgLTI2NTUsNiArMjY1Myw3IEBACiAKIAlpZiAodGFibGUpIHsKIAkJdGFibGVbMF0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmZsdXNoX2RlbGF5OworCQl0YWJsZVswXS5leHRyYTEgPSBuZXQ7CiAJCXRhYmxlWzFdLmRhdGEgPSAmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzLmdjX3RocmVzaDsKIAkJdGFibGVbMl0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9tYXhfc2l6ZTsKIAkJdGFibGVbM10uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9nY19taW5faW50ZXJ2YWw7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCmluZGV4IGZhMWQ4ZjQuLjdjYjY1ZWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bmV0L2FkZHJjb25mLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfZnJhZy5oPgogCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBlbXB0eVsxXTsKKwogc3RhdGljIGN0bF90YWJsZSBpcHY2X3RhYmxlX3RlbXBsYXRlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAicm91dGUiLApAQCAtMzUsNiArMzcsMTIgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMKIAl9LAorCXsKKwkJLnByb2NuYW1lCT0gIm5laWdoIiwKKwkJLm1heGxlbgkJPSAwLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gZW1wdHksCisJfSwKIAl7IH0KIH07CiAKQEAgLTE1Miw3ICsxNjAsNiBAQAogCiBpbnQgaXB2Nl9zdGF0aWNfc3lzY3RsX3JlZ2lzdGVyKHZvaWQpCiB7Ci0Jc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZW1wdHlbMV07CiAJaXA2X2Jhc2UgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMobmV0X2lwdjZfY3RsX3BhdGgsIGVtcHR5KTsKIAlpZiAoaXA2X2Jhc2UgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IDdlNzQwMjMuLmRhODc0MjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC05OCw2ICs5OCwxMCBAQAogCWlmICgheGRzdC0+dS5ydDYucnQ2aV9pZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXhkc3QtPnUucnQ2LnJ0NmlfcGVlciA9IHJ0LT5ydDZpX3BlZXI7CisJaWYgKHJ0LT5ydDZpX3BlZXIpCisJCWF0b21pY19pbmMoJnJ0LT5ydDZpX3BlZXItPnJlZmNudCk7CisKIAkvKiBTaGVpdC4uLiBJIHJlbWVtYmVyIEkgZGlkIHRoaXMgcmlnaHQuIEFwcGFyZW50bHksCiAJICogaXQgd2FzIG1hZ2ljYWxseSBsb3N0LCBzbyB0aGlzIGNvZGUgbmVlZHMgYXVkaXQgKi8KIAl4ZHN0LT51LnJ0Ni5ydDZpX2ZsYWdzID0gcnQtPnJ0NmlfZmxhZ3MgJiAoUlRGX0FOWUNBU1QgfApAQCAtMjE2LDYgKzIyMCw4IEBACiAKIAlpZiAobGlrZWx5KHhkc3QtPnUucnQ2LnJ0NmlfaWRldikpCiAJCWluNl9kZXZfcHV0KHhkc3QtPnUucnQ2LnJ0NmlfaWRldik7CisJaWYgKGxpa2VseSh4ZHN0LT51LnJ0Ni5ydDZpX3BlZXIpKQorCQlpbmV0X3B1dHBlZXIoeGRzdC0+dS5ydDYucnQ2aV9wZWVyKTsKIAl4ZnJtX2RzdF9kZXN0cm95KHhkc3QpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggNGJjOGE5Mi4uOWNkNzNiMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtMTgyMiw2ICsxODIyLDcgQEAKIAkJKmNvb2tpZSBePSAyOwogCQlJRUVFODAyMTFfU0tCX0NCKHNrYiktPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfVFhfT0ZGQ0hBTjsKIAkJbG9jYWwtPmh3X3JvY19za2IgPSBza2I7CisJCWxvY2FsLT5od19yb2Nfc2tiX2Zvcl9zdGF0dXMgPSBza2I7CiAJCW11dGV4X3VubG9jaygmbG9jYWwtPm10eCk7CiAKIAkJcmV0dXJuIDA7CkBAIC0xODc1LDYgKzE4NzYsNyBAQAogCQlpZiAocmV0ID09IDApIHsKIAkJCWtmcmVlX3NrYihsb2NhbC0+aHdfcm9jX3NrYik7CiAJCQlsb2NhbC0+aHdfcm9jX3NrYiA9IE5VTEw7CisJCQlsb2NhbC0+aHdfcm9jX3NrYl9mb3Jfc3RhdHVzID0gTlVMTDsKIAkJfQogCiAJCW11dGV4X3VubG9jaygmbG9jYWwtPm10eCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IGM0N2Q3YzAuLjUzM2ZkMzIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC05NTMsNyArOTUzLDcgQEAKIAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqaHdfcm9jX2NoYW5uZWw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmh3X3JvY19kZXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKmh3X3JvY19za2I7CisJc3RydWN0IHNrX2J1ZmYgKmh3X3JvY19za2IsICpod19yb2Nfc2tiX2Zvcl9zdGF0dXM7CiAJc3RydWN0IHdvcmtfc3RydWN0IGh3X3JvY19zdGFydCwgaHdfcm9jX2RvbmU7CiAJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBod19yb2NfY2hhbm5lbF90eXBlOwogCXVuc2lnbmVkIGludCBod19yb2NfZHVyYXRpb247CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IDhhY2JhNDUuLjdhMTBhOGQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC0xMjI5LDYgKzEyMjksNyBAQAogCX0KIAltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KCZ1bnJlZ19saXN0KTsKKwlsaXN0X2RlbCgmdW5yZWdfbGlzdCk7CiB9CiAKIHN0YXRpYyB1MzIgaWVlZTgwMjExX2lkbGVfb2ZmKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggNDVmYmI5ZS4uYzljZWI0ZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYworKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC0xMDMzLDYgKzEwMzMsMTIgQEAKIAlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCiAJCXJldHVybjsKIAorCS8qCisJICogSW4gY2FzZSB3ZSByZWNlaXZlIGZyYW1lcyBhZnRlciBkaXNhc3NvY2lhdGlvbi4KKwkgKi8KKwlpZiAoIXNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkKQorCQlyZXR1cm47CisKIAlpZWVlODAyMTFfc3RhX3Jlc2V0X2Nvbm5fbW9uaXRvcihzZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGF0dXMuYyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuYwppbmRleCAzOGE3OTcyLi4wNzFhYzk1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhdHVzLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCkBAIC0zMjMsNiArMzIzLDcgQEAKIAogCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9OTDgwMjExX0ZSQU1FX1RYKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisJCXU2NCBjb29raWUgPSAodW5zaWduZWQgbG9uZylza2I7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh3aywgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKQEAgLTMzNCw4ICszMzUsMTIgQEAKIAkJCWJyZWFrOwogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOworCQlpZiAobG9jYWwtPmh3X3JvY19za2JfZm9yX3N0YXR1cyA9PSBza2IpIHsKKwkJCWNvb2tpZSA9IGxvY2FsLT5od19yb2NfY29va2llIF4gMjsKKwkJCWxvY2FsLT5od19yb2Nfc2tiX2Zvcl9zdGF0dXMgPSBOVUxMOworCQl9CiAJCWNmZzgwMjExX21nbXRfdHhfc3RhdHVzKAotCQkJc2tiLT5kZXYsICh1bnNpZ25lZCBsb25nKSBza2IsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQlza2ItPmRldiwgY29va2llLCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJISEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spLCBHRlBfQVRPTUlDKTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggNTk1MGUzYS4uYjBiZWFhNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKKysrIGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTE1NDcsNyArMTU0Nyw3IEBACiAJCXNrYl9vcnBoYW4oc2tiKTsKIAl9CiAKLQlpZiAoc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSkKKwlpZiAoc2tiX2Nsb25lZChza2IpKQogCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0+dHhfZXhwYW5kX3NrYl9oZWFkX2Nsb25lZCk7CiAJZWxzZSBpZiAoaGVhZF9uZWVkIHx8IHRhaWxfbmVlZCkKIAkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X2V4cGFuZF9za2JfaGVhZCk7CkBAIC0yMjMwLDYgKzIyMzAsOSBAQAogCiAJc2RhdGEgPSB2aWZfdG9fc2RhdGEodmlmKTsKIAorCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQorCQlnb3RvIG91dDsKKwogCWlmICh0aW1fb2Zmc2V0KQogCQkqdGltX29mZnNldCA9IDA7CiAJaWYgKHRpbV9sZW5ndGgpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuYwppbmRleCBjZjY4NzAwLi5kMDM2NTk3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jCisrKyBiL25ldC9tYWM4MDIxMS91dGlsLmMKQEAgLTEyMTAsNyArMTIxMCw5IEBACiAJCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfQVNTT0M7CisJCQltdXRleF9sb2NrKCZzZGF0YS0+dS5tZ2QubXR4KTsKIAkJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBjaGFuZ2VkKTsKKwkJCW11dGV4X3VubG9jaygmc2RhdGEtPnUubWdkLm10eCk7CiAJCQlicmVhazsKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfSUJTUzsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmMKaW5kZXggMzJmY2JlMi4uNGFhNjE0YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9jb3JlLmMKQEAgLTEzMyw2ICsxMzMsNyBAQAogCiAJCS8qIE9wdGltaXphdGlvbjogd2UgZG9uJ3QgbmVlZCB0byBob2xkIG1vZHVsZQogCQkgICByZWZlcmVuY2UgaGVyZSwgc2luY2UgZnVuY3Rpb24gY2FuJ3Qgc2xlZXAuIC0tUlIgKi8KK3JlcGVhdDoKIAkJdmVyZGljdCA9IGVsZW0tPmhvb2soaG9vaywgc2tiLCBpbmRldiwgb3V0ZGV2LCBva2ZuKTsKIAkJaWYgKHZlcmRpY3QgIT0gTkZfQUNDRVBUKSB7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwpAQCAtMTQ1LDcgKzE0Niw3IEBACiAjZW5kaWYKIAkJCWlmICh2ZXJkaWN0ICE9IE5GX1JFUEVBVCkKIAkJCQlyZXR1cm4gdmVyZGljdDsKLQkJCSppID0gKCppKS0+cHJldjsKKwkJCWdvdG8gcmVwZWF0OwogCQl9CiAJfQogCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKaW5kZXggMjJmN2FkNS4uYmE5OGUxMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwpAQCAtODA4LDkgKzgwOCw5IEBACiAJZGVzdC0+dV90aHJlc2hvbGQgPSB1ZGVzdC0+dV90aHJlc2hvbGQ7CiAJZGVzdC0+bF90aHJlc2hvbGQgPSB1ZGVzdC0+bF90aHJlc2hvbGQ7CiAKLQlzcGluX2xvY2soJmRlc3QtPmRzdF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmRlc3QtPmRzdF9sb2NrKTsKIAlpcF92c19kc3RfcmVzZXQoZGVzdCk7Ci0Jc3Bpbl91bmxvY2soJmRlc3QtPmRzdF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmZGVzdC0+ZHN0X2xvY2spOwogCiAJaWYgKGFkZCkKIAkJaXBfdnNfbmV3X2VzdGltYXRvcigmZGVzdC0+c3RhdHMpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IGU2MTUxMTkuLjg0ZjRmY2MgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTk0Miw4ICs5NDIsMTUgQEAKIAlpZiAoc2V0X3JlcGx5ICYmICF0ZXN0X2FuZF9zZXRfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmN0LT5zdGF0dXMpKQogCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9SRVBMWSwgY3QpOwogb3V0OgotCWlmICh0bXBsKQotCQluZl9jdF9wdXQodG1wbCk7CisJaWYgKHRtcGwpIHsKKwkJLyogU3BlY2lhbCBjYXNlOiB3ZSBoYXZlIHRvIHJlcGVhdCB0aGlzIGhvb2ssIGFzc2lnbiB0aGUKKwkJICogdGVtcGxhdGUgYWdhaW4gdG8gdGhpcyBwYWNrZXQuIFdlIGFzc3VtZSB0aGF0IHRoaXMgcGFja2V0CisJCSAqIGhhcyBubyBjb25udHJhY2sgYXNzaWduZWQuIFRoaXMgaXMgdXNlZCBieSBuZl9jdF90Y3AuICovCisJCWlmIChyZXQgPT0gTkZfUkVQRUFUKQorCQkJc2tiLT5uZmN0ID0gKHN0cnVjdCBuZl9jb25udHJhY2sgKil0bXBsOworCQllbHNlCisJCQluZl9jdF9wdXQodG1wbCk7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmMKaW5kZXggNTcwMmRlMy4uNjNhMWI5MSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmMKQEAgLTYzLDYgKzYzLDkgQEAKIAkJICogdGhpcyBkb2VzIG5vdCBoYXJtIGFuZCBpdCBoYXBwZW5zIHZlcnkgcmFyZWx5LiAqLwogCQl1bnNpZ25lZCBsb25nIG1pc3NlZCA9IGUtPm1pc3NlZDsKIAorCQlpZiAoISgoZXZlbnRzIHwgbWlzc2VkKSAmIGUtPmN0bWFzaykpCisJCQlnb3RvIG91dF91bmxvY2s7CisKIAkJcmV0ID0gbm90aWZ5LT5mY24oZXZlbnRzIHwgbWlzc2VkLCAmaXRlbSk7CiAJCWlmICh1bmxpa2VseShyZXQgPCAwIHx8IG1pc3NlZCkpIHsKIAkJCXNwaW5fbG9ja19iaCgmY3QtPmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDkzMjk3YWEuLmVlYWQ5ZGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTY2Nyw2ICs2NjcsNyBAQAogCQkJaWYgKGN0bmV0bGlua19maWxsX2luZm8oc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkJCWNiLT5ubGgtPm5sbXNnX3NlcSwKIAkJCQkJCUlQQ1ROTF9NU0dfQ1RfTkVXLCBjdCkgPCAwKSB7CisJCQkJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOwogCQkJCWNiLT5hcmdzWzFdID0gKHVuc2lnbmVkIGxvbmcpY3Q7CiAJCQkJZ290byBvdXQ7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuYwppbmRleCBiMDczOTNlLi45MTgxNjk5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKQEAgLTg1LDYgKzg1LDggQEAKIAogaW50IG5mX2xvZ19iaW5kX3BmKHVfaW50OF90IHBmLCBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpCiB7CisJaWYgKHBmID49IEFSUkFZX1NJWkUobmZfbG9nZ2VycykpCisJCXJldHVybiAtRUlOVkFMOwogCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CiAJaWYgKF9fZmluZF9sb2dnZXIocGYsIGxvZ2dlci0+bmFtZSkgPT0gTlVMTCkgewogCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CkBAIC05OCw2ICsxMDAsOCBAQAogCiB2b2lkIG5mX2xvZ191bmJpbmRfcGYodV9pbnQ4X3QgcGYpCiB7CisJaWYgKHBmID49IEFSUkFZX1NJWkUobmZfbG9nZ2VycykpCisJCXJldHVybjsKIAltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW3BmXSwgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jCmluZGV4IDRkODdiZWYuLjQ3NGQ2MjEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMKQEAgLTI4LDI2ICsyOCwyMyBAQAogCXNrYi0+ZGVzdHJ1Y3RvciA9IE5VTEw7CiAKIAlpZiAoc2spCi0JCW5mX3Rwcm94eV9wdXRfc29jayhzayk7CisJCXNvY2tfcHV0KHNrKTsKIH0KIAogLyogY29uc3VtZXMgc2sgKi8KLWludAordm9pZAogbmZfdHByb3h5X2Fzc2lnbl9zb2NrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIHsKLQlib29sIHRyYW5zcGFyZW50ID0gKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSA/Ci0JCQkJaW5ldF90d3NrKHNrKS0+dHdfdHJhbnNwYXJlbnQgOgotCQkJCWluZXRfc2soc2spLT50cmFuc3BhcmVudDsKKwkvKiBhc3NpZ25pbmcgdHcgc29ja2V0cyBjb21wbGljYXRlcyB0aGluZ3M7IG1vc3QKKwkgKiBza2ItPnNrLT5YIGNoZWNrcyB3b3VsZCBoYXZlIHRvIHRlc3Qgc2stPnNrX3N0YXRlIGZpcnN0ICovCisJaWYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSB7CisJCWluZXRfdHdza19wdXQoaW5ldF90d3NrKHNrKSk7CisJCXJldHVybjsKKwl9CiAKLQlpZiAodHJhbnNwYXJlbnQpIHsKLQkJc2tiX29ycGhhbihza2IpOwotCQlza2ItPnNrID0gc2s7Ci0JCXNrYi0+ZGVzdHJ1Y3RvciA9IG5mX3Rwcm94eV9kZXN0cnVjdG9yOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UKLQkJbmZfdHByb3h5X3B1dF9zb2NrKHNrKTsKLQotCXJldHVybiAwOworCXNrYl9vcnBoYW4oc2tiKTsKKwlza2ItPnNrID0gc2s7CisJc2tiLT5kZXN0cnVjdG9yID0gbmZfdHByb3h5X2Rlc3RydWN0b3I7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl90cHJveHlfYXNzaWduX3NvY2spOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jIGIvbmV0L25ldGZpbHRlci94dF9UUFJPWFkuYwppbmRleCA2NDA2NzhmLi5kY2ZkNTdlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmMKQEAgLTMzLDYgKzMzLDIwIEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9UUFJPWFkuaD4KIAorc3RhdGljIGJvb2wgdHByb3h5X3NrX2lzX3RyYW5zcGFyZW50KHN0cnVjdCBzb2NrICpzaykKK3sKKwlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9USU1FX1dBSVQpIHsKKwkJaWYgKGluZXRfc2soc2spLT50cmFuc3BhcmVudCkKKwkJCXJldHVybiB0cnVlOworCQlzb2NrX3B1dChzayk7CisJfSBlbHNlIHsKKwkJaWYgKGluZXRfdHdzayhzayktPnR3X3RyYW5zcGFyZW50KQorCQkJcmV0dXJuIHRydWU7CisJCWluZXRfdHdza19wdXQoaW5ldF90d3NrKHNrKSk7CisJfQorCXJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIGlubGluZSBfX2JlMzIKIHRwcm94eV9sYWRkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHVzZXJfbGFkZHIsIF9fYmUzMiBkYWRkcikKIHsKQEAgLTE0MSw3ICsxNTUsNyBAQAogCQkJCQkgICBza2ItPmRldiwgTkZUX0xPT0tVUF9MSVNURU5FUik7CiAKIAkvKiBOT1RFOiBhc3NpZ25fc29jayBjb25zdW1lcyBvdXIgc2sgcmVmZXJlbmNlICovCi0JaWYgKHNrICYmIG5mX3Rwcm94eV9hc3NpZ25fc29jayhza2IsIHNrKSkgeworCWlmIChzayAmJiB0cHJveHlfc2tfaXNfdHJhbnNwYXJlbnQoc2spKSB7CiAJCS8qIFRoaXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgdGFyZ2V0LCBidXQgd2UgZG9uJ3QgZG8gbXVsdGlwbGUKIAkJICAgdGFyZ2V0cyBvbiB0aGUgc2FtZSBydWxlIHlldCAqLwogCQlza2ItPm1hcmsgPSAoc2tiLT5tYXJrICYgfm1hcmtfbWFzaykgXiBtYXJrX3ZhbHVlOwpAQCAtMTQ5LDYgKzE2Myw4IEBACiAJCXByX2RlYnVnKCJyZWRpcmVjdGluZzogcHJvdG8gJWhodSAlcEk0OiVodSAtPiAlcEk0OiVodSwgbWFyazogJXhcbiIsCiAJCQkgaXBoLT5wcm90b2NvbCwgJmlwaC0+ZGFkZHIsIG50b2hzKGhwLT5kZXN0KSwKIAkJCSAmbGFkZHIsIG50b2hzKGxwb3J0KSwgc2tiLT5tYXJrKTsKKworCQluZl90cHJveHlfYXNzaWduX3NvY2soc2tiLCBzayk7CiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCkBAIC0zMDYsNyArMzIyLDcgQEAKIAkJCQkJICAgcGFyLT5pbiwgTkZUX0xPT0tVUF9MSVNURU5FUik7CiAKIAkvKiBOT1RFOiBhc3NpZ25fc29jayBjb25zdW1lcyBvdXIgc2sgcmVmZXJlbmNlICovCi0JaWYgKHNrICYmIG5mX3Rwcm94eV9hc3NpZ25fc29jayhza2IsIHNrKSkgeworCWlmIChzayAmJiB0cHJveHlfc2tfaXNfdHJhbnNwYXJlbnQoc2spKSB7CiAJCS8qIFRoaXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgdGFyZ2V0LCBidXQgd2UgZG9uJ3QgZG8gbXVsdGlwbGUKIAkJICAgdGFyZ2V0cyBvbiB0aGUgc2FtZSBydWxlIHlldCAqLwogCQlza2ItPm1hcmsgPSAoc2tiLT5tYXJrICYgfnRnaS0+bWFya19tYXNrKSBeIHRnaS0+bWFya192YWx1ZTsKQEAgLTMxNCw2ICszMzAsOCBAQAogCQlwcl9kZWJ1ZygicmVkaXJlY3Rpbmc6IHByb3RvICVoaHUgJXBJNjolaHUgLT4gJXBJNjolaHUsIG1hcms6ICV4XG4iLAogCQkJIHRwcm90bywgJmlwaC0+c2FkZHIsIG50b2hzKGhwLT5zb3VyY2UpLAogCQkJIGxhZGRyLCBudG9ocyhscG9ydCksIHNrYi0+bWFyayk7CisKKwkJbmZfdHByb3h5X2Fzc2lnbl9zb2NrKHNrYiwgc2spOwogCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwppbmRleCA4OGY3YzM1Li43M2MzM2E0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwpAQCAtNTMsMTUgKzUzLDEzIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1pcHJhbmdlX2lwdjZfc3ViKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpiKQoraXByYW5nZV9pcHY2X2x0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpiKQogewogCXVuc2lnbmVkIGludCBpOwotCWludCByOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgewotCQlyID0gbnRvaGwoYS0+czZfYWRkcjMyW2ldKSAtIG50b2hsKGItPnM2X2FkZHIzMltpXSk7Ci0JCWlmIChyICE9IDApCi0JCQlyZXR1cm4gcjsKKwkJaWYgKGEtPnM2X2FkZHIzMltpXSAhPSBiLT5zNl9hZGRyMzJbaV0pCisJCQlyZXR1cm4gbnRvaGwoYS0+czZfYWRkcjMyW2ldKSA8IG50b2hsKGItPnM2X2FkZHIzMltpXSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03NSwxNSArNzMsMTUgQEAKIAlib29sIG07CiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQykgewotCQltICA9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWluLmluNikgPCAwOwotCQltIHw9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWF4LmluNikgPiAwOworCQltICA9IGlwcmFuZ2VfaXB2Nl9sdCgmaXBoLT5zYWRkciwgJmluZm8tPnNyY19taW4uaW42KTsKKwkJbSB8PSBpcHJhbmdlX2lwdjZfbHQoJmluZm8tPnNyY19tYXguaW42LCAmaXBoLT5zYWRkcik7CiAJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlYpOwogCQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKLQkJbSAgPSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21pbi5pbjYpIDwgMDsKLQkJbSB8PSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21heC5pbjYpID4gMDsKKwkJbSAgPSBpcHJhbmdlX2lwdjZfbHQoJmlwaC0+ZGFkZHIsICZpbmZvLT5kc3RfbWluLmluNik7CisJCW0gfD0gaXByYW5nZV9pcHY2X2x0KCZpbmZvLT5kc3RfbWF4LmluNiwgJmlwaC0+ZGFkZHIpOwogCQltIF49ICEhKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1RfSU5WKTsKIAkJaWYgKG0pCiAJCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3NvY2tldC5jIGIvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYwppbmRleCAwMGQ2YWU4My4uOWNjNDYzNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NvY2tldC5jCkBAIC0zNSw2ICszNSwxNSBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjZW5kaWYKIAorc3RhdGljIHZvaWQKK3h0X3NvY2tldF9wdXRfc2soc3RydWN0IHNvY2sgKnNrKQoreworCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkKKwkJaW5ldF90d3NrX3B1dChpbmV0X3R3c2soc2spKTsKKwllbHNlCisJCXNvY2tfcHV0KHNrKTsKK30KKwogc3RhdGljIGludAogZXh0cmFjdF9pY21wNF9maWVsZHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgIHU4ICpwcm90b2NvbCwKQEAgLTE2NCw3ICsxNzMsNyBAQAogCQkJCSAgICAgICAoc2stPnNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQgJiYKIAkJCQkJaW5ldF90d3NrKHNrKS0+dHdfdHJhbnNwYXJlbnQpKTsKIAotCQluZl90cHJveHlfcHV0X3NvY2soc2spOworCQl4dF9zb2NrZXRfcHV0X3NrKHNrKTsKIAogCQlpZiAod2lsZGNhcmQgfHwgIXRyYW5zcGFyZW50KQogCQkJc2sgPSBOVUxMOwpAQCAtMjk4LDcgKzMwNyw3IEBACiAJCQkJICAgICAgIChzay0+c2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCAmJgogCQkJCQlpbmV0X3R3c2soc2spLT50d190cmFuc3BhcmVudCkpOwogCi0JCW5mX3Rwcm94eV9wdXRfc29jayhzayk7CisJCXh0X3NvY2tldF9wdXRfc2soc2spOwogCiAJCWlmICh3aWxkY2FyZCB8fCAhdHJhbnNwYXJlbnQpCiAJCQlzayA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggNDc4MTgxZC4uMWY5MjQ1OSAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtMTQwNyw3ICsxNDA3LDcgQEAKIAlpbnQgbm9ibG9jayA9IGZsYWdzJk1TR19ET05UV0FJVDsKIAlzaXplX3QgY29waWVkOwogCXN0cnVjdCBza19idWZmICpza2IsICpkYXRhX3NrYjsKLQlpbnQgZXJyOworCWludCBlcnIsIHJldDsKIAogCWlmIChmbGFncyZNU0dfT09CKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0xNDcwLDggKzE0NzAsMTMgQEAKIAogCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOwogCi0JaWYgKG5say0+Y2IgJiYgYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA8PSBzay0+c2tfcmN2YnVmIC8gMikKLQkJbmV0bGlua19kdW1wKHNrKTsKKwlpZiAobmxrLT5jYiAmJiBhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpIDw9IHNrLT5za19yY3ZidWYgLyAyKSB7CisJCXJldCA9IG5ldGxpbmtfZHVtcChzayk7CisJCWlmIChyZXQpIHsKKwkJCXNrLT5za19lcnIgPSByZXQ7CisJCQlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKKwkJfQorCX0KIAogCXNjbV9yZWN2KHNvY2ssIG1zZywgc2lvY2ItPnNjbSwgZmxhZ3MpOwogb3V0OgpAQCAtMTczNiw2ICsxNzQxLDcgQEAKIAlzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2I7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sazsKKwlpbnQgcmV0OwogCiAJY2IgPSBremFsbG9jKHNpemVvZigqY2IpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2IgPT0gTlVMTCkKQEAgLTE3NjQsOSArMTc3MCwxMyBAQAogCW5say0+Y2IgPSBjYjsKIAltdXRleF91bmxvY2sobmxrLT5jYl9tdXRleCk7CiAKLQluZXRsaW5rX2R1bXAoc2spOworCXJldCA9IG5ldGxpbmtfZHVtcChzayk7CisKIAlzb2NrX3B1dChzayk7CiAKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJLyogV2Ugc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYSBkdW1wLCBieSByZXR1cm5pbmcgLUVJTlRSIHdlCiAJICogc2lnbmFsIG5vdCB0byBzZW5kIEFDSyBldmVuIGlmIGl0IHdhcyByZXF1ZXN0ZWQuCiAJICovCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItaW5wdXQuYyBiL25ldC9yeHJwYy9hci1pbnB1dC5jCmluZGV4IDg5MzE1MDAuLjFhMmIwNjMzIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItaW5wdXQuYworKysgYi9uZXQvcnhycGMvYXItaW5wdXQuYwpAQCAtNDIzLDYgKzQyMyw3IEBACiAJCQlnb3RvIHByb3RvY29sX2Vycm9yOwogCQl9CiAKKwljYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX0FDS0FMTDoKIAljYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX0FDSzoKIAkJLyogQUNLIHByb2Nlc3NpbmcgaXMgZG9uZSBpbiBwcm9jZXNzIGNvbnRleHQgKi8KIAkJcmVhZF9sb2NrX2JoKCZjYWxsLT5zdGF0ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1rZXkuYyBiL25ldC9yeHJwYy9hci1rZXkuYwppbmRleCA1ZWUxNmYwLi5kNzYzNzkzIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXIta2V5LmMKKysrIGIvbmV0L3J4cnBjL2FyLWtleS5jCkBAIC04OSwxMSArODksMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCXBsZW4gLT0gc2l6ZW9mKCp0b2tlbik7Ci0JdG9rZW4gPSBrbWFsbG9jKHNpemVvZigqdG9rZW4pLCBHRlBfS0VSTkVMKTsKKwl0b2tlbiA9IGt6YWxsb2Moc2l6ZW9mKCp0b2tlbiksIEdGUF9LRVJORUwpOwogCWlmICghdG9rZW4pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdG9rZW4tPmthZCA9IGttYWxsb2MocGxlbiwgR0ZQX0tFUk5FTCk7CisJdG9rZW4tPmthZCA9IGt6YWxsb2MocGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0b2tlbi0+a2FkKSB7CiAJCWtmcmVlKHRva2VuKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03MzEsMTAgKzczMSwxMCBAQAogCQlnb3RvIGVycm9yOwogCiAJcmV0ID0gLUVOT01FTTsKLQl0b2tlbiA9IGttYWxsb2Moc2l6ZW9mKCp0b2tlbiksIEdGUF9LRVJORUwpOworCXRva2VuID0ga3phbGxvYyhzaXplb2YoKnRva2VuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0b2tlbikKIAkJZ290byBlcnJvcjsKLQl0b2tlbi0+a2FkID0ga21hbGxvYyhwbGVuLCBHRlBfS0VSTkVMKTsKKwl0b2tlbi0+a2FkID0ga3phbGxvYyhwbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRva2VuLT5rYWQpCiAJCWdvdG8gZXJyb3JfZnJlZTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYnEuYyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKaW5kZXggYzgwZDFjMi4uNWY2M2VjNSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYnEuYworKysgYi9uZXQvc2NoZWQvc2NoX2NicS5jCkBAIC0zOTAsNyArMzkwLDYgQEAKIAlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2wtPnEpOwogCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewogCQlzY2gtPnEucWxlbisrOwotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJY2JxX21hcmtfdG9wbGV2ZWwocSwgY2wpOwogCQlpZiAoIWNsLT5uZXh0X2FsaXZlKQogCQkJY2JxX2FjdGl2YXRlX2NsYXNzKGNsKTsKQEAgLTY0OSw3ICs2NDgsNiBAQAogCQlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2wtPnEpOwogCQlpZiAocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpIHsKIAkJCXNjaC0+cS5xbGVuKys7Ci0JCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCWlmICghY2wtPm5leHRfYWxpdmUpCiAJCQkJY2JxX2FjdGl2YXRlX2NsYXNzKGNsKTsKIAkJCXJldHVybiAwOwpAQCAtOTcxLDYgKzk2OSw3IEBACiAKIAkJc2tiID0gY2JxX2RlcXVldWVfMShzY2gpOwogCQlpZiAoc2tiKSB7CisJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCXNjaC0+cS5xbGVuLS07CiAJCQlzY2gtPmZsYWdzICY9IH5UQ1FfRl9USFJPVFRMRUQ7CiAJCQlyZXR1cm4gc2tiOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmMKaW5kZXggZGU1NWU2NC4uNmI3ZmU0YSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuYworKysgYi9uZXQvc2NoZWQvc2NoX2Ryci5jCkBAIC0zNzYsNyArMzc2LDYgQEAKIAl9CiAKIAlic3RhdHNfdXBkYXRlKCZjbC0+YnN0YXRzLCBza2IpOwotCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCiAJc2NoLT5xLnFsZW4rKzsKIAlyZXR1cm4gZXJyOwpAQCAtNDAzLDYgKzQwMiw3IEBACiAJCQlza2IgPSBxZGlzY19kZXF1ZXVlX3BlZWtlZChjbC0+cWRpc2MpOwogCQkJaWYgKGNsLT5xZGlzYy0+cS5xbGVuID09IDApCiAJCQkJbGlzdF9kZWwoJmNsLT5hbGlzdCk7CisJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCXNjaC0+cS5xbGVuLS07CiAJCQlyZXR1cm4gc2tiOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2RzbWFyay5jIGIvbmV0L3NjaGVkL3NjaF9kc21hcmsuYwppbmRleCA2MGY0YmRkLi4wZjdiZjNmIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2RzbWFyay5jCisrKyBiL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMKQEAgLTI2MCw3ICsyNjAsNiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCXNjaC0+cS5xbGVuKys7CiAKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKQEAgLTI4Myw2ICsyODIsNyBAQAogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbi0tOwogCiAJaW5kZXggPSBza2ItPnRjX2luZGV4ICYgKHAtPmluZGljZXMgLSAxKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZmlmby5jIGIvbmV0L3NjaGVkL3NjaF9maWZvLmMKaW5kZXggYWE0ZDYzMy4uZDQ2OGI0NyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9maWZvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9maWZvLmMKQEAgLTQ2LDE3ICs0NiwxNCBAQAogCiBzdGF0aWMgaW50IHBmaWZvX3RhaWxfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MqIHNjaCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2hlYWQ7CiAJc3RydWN0IGZpZm9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAogCWlmIChsaWtlbHkoc2tiX3F1ZXVlX2xlbigmc2NoLT5xKSA8IHEtPmxpbWl0KSkKIAkJcmV0dXJuIHFkaXNjX2VucXVldWVfdGFpbChza2IsIHNjaCk7CiAKIAkvKiBxdWV1ZSBmdWxsLCByZW1vdmUgb25lIHNrYiB0byBmdWxmaWxsIHRoZSBsaW1pdCAqLwotCXNrYl9oZWFkID0gcWRpc2NfZGVxdWV1ZV9oZWFkKHNjaCk7CisJX19xZGlzY19xdWV1ZV9kcm9wX2hlYWQoc2NoLCAmc2NoLT5xKTsKIAlzY2gtPnFzdGF0cy5kcm9wcysrOwotCWtmcmVlX3NrYihza2JfaGVhZCk7Ci0KIAlxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpOwogCiAJcmV0dXJuIE5FVF9YTUlUX0NOOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCAzNGRjNTk4Li4xYmM2OTgwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtODM5LDYgKzgzOSw3IEBACiAKIAlsaXN0X2FkZCgmZGV2LT51bnJlZ19saXN0LCAmc2luZ2xlKTsKIAlkZXZfZGVhY3RpdmF0ZV9tYW55KCZzaW5nbGUpOworCWxpc3RfZGVsKCZzaW5nbGUpOwogfQogCiBzdGF0aWMgdm9pZCBkZXZfaW5pdF9zY2hlZHVsZXJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKaW5kZXggMmU0NTc5MS4uMTRhNzk5ZGUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCkBAIC0xNjAwLDcgKzE2MDAsNiBAQAogCQlzZXRfYWN0aXZlKGNsLCBxZGlzY19wa3RfbGVuKHNrYikpOwogCiAJYnN0YXRzX3VwZGF0ZSgmY2wtPmJzdGF0cywgc2tiKTsKLQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbisrOwogCiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CkBAIC0xNjY2LDYgKzE2NjUsNyBAQAogCX0KIAogCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbi0tOwogCiAJcmV0dXJuIHNrYjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaHRiLmMgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCmluZGV4IDk4NGMxYjAuLmZjMTJmZTYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaHRiLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuYwpAQCAtNTc0LDcgKzU3NCw2IEBACiAJfQogCiAJc2NoLT5xLnFsZW4rKzsKLQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIH0KIApAQCAtODQyLDcgKzg0MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaHRiX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwogCWludCBsZXZlbDsKIAlwc2NoZWRfdGltZV90IG5leHRfZXZlbnQ7CkBAIC04NTEsNiArODUwLDggQEAKIAkvKiB0cnkgdG8gZGVxdWV1ZSBkaXJlY3QgcGFja2V0cyBhcyBoaWdoIHByaW8gKCEpIHRvIG1pbmltaXplIGNwdSB3b3JrICovCiAJc2tiID0gX19za2JfZGVxdWV1ZSgmcS0+ZGlyZWN0X3F1ZXVlKTsKIAlpZiAoc2tiICE9IE5VTEwpIHsKK29rOgorCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJc2NoLT5mbGFncyAmPSB+VENRX0ZfVEhST1RUTEVEOwogCQlzY2gtPnEucWxlbi0tOwogCQlyZXR1cm4gc2tiOwpAQCAtODg0LDExICs4ODUsOCBAQAogCQkJaW50IHByaW8gPSBmZnoobSk7CiAJCQltIHw9IDEgPDwgcHJpbzsKIAkJCXNrYiA9IGh0Yl9kZXF1ZXVlX3RyZWUocSwgcHJpbywgbGV2ZWwpOwotCQkJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKLQkJCQlzY2gtPnEucWxlbi0tOwotCQkJCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKLQkJCQlnb3RvIGZpbjsKLQkJCX0KKwkJCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKQorCQkJCWdvdG8gb2s7CiAJCX0KIAl9CiAJc2NoLT5xc3RhdHMub3ZlcmxpbWl0cysrOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKaW5kZXggMjFmMTNkYS4uNDM2YTJlNyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYworKysgYi9uZXQvc2NoZWQvc2NoX211bHRpcS5jCkBAIC04Myw3ICs4Myw2IEBACiAKIAlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgcWRpc2MpOwogCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJc2NoLT5xLnFsZW4rKzsKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAJfQpAQCAtMTEyLDYgKzExMSw3IEBACiAJCQlxZGlzYyA9IHEtPnF1ZXVlc1txLT5jdXJiYW5kXTsKIAkJCXNrYiA9IHFkaXNjLT5kZXF1ZXVlKHFkaXNjKTsKIAkJCWlmIChza2IpIHsKKwkJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCQlzY2gtPnEucWxlbi0tOwogCQkJCXJldHVybiBza2I7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKaW5kZXggMWM0YmNlOC4uNmEzMDA2YiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwpAQCAtMjQwLDcgKzI0MCw2IEBACiAKIAlpZiAobGlrZWx5KHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSkgewogCQlzY2gtPnEucWxlbisrOwotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAl9IGVsc2UgaWYgKG5ldF94bWl0X2Ryb3BfY291bnQocmV0KSkgewogCQlzY2gtPnFzdGF0cy5kcm9wcysrOwogCX0KQEAgLTI4OSw2ICsyODgsNyBAQAogCQkJCXNrYi0+dHN0YW1wLnR2NjQgPSAwOwogI2VuZGlmCiAJCQlwcl9kZWJ1ZygibmV0ZW1fZGVxdWV1ZTogcmV0dXJuIHNrYj0lcFxuIiwgc2tiKTsKKwkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJc2NoLT5xLnFsZW4tLTsKIAkJCXJldHVybiBza2I7CiAJCX0KQEAgLTQ3Niw3ICs0NzYsNiBAQAogCQlfX3NrYl9xdWV1ZV9hZnRlcihsaXN0LCBza2IsIG5za2IpOwogCiAJCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihuc2tiKTsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIG5za2IpOwogCiAJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogCX0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcHJpby5jIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKaW5kZXggOTY2MTU4ZC4uZmJkNzEwZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKQEAgLTg0LDcgKzg0LDYgQEAKIAogCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBxZGlzYyk7CiAJaWYgKHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSB7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlzY2gtPnEucWxlbisrOwogCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIAl9CkBAIC0xMTYsNiArMTE1LDcgQEAKIAkJc3RydWN0IFFkaXNjICpxZGlzYyA9IHEtPnF1ZXVlc1twcmlvXTsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjLT5kZXF1ZXVlKHFkaXNjKTsKIAkJaWYgKHNrYikgeworCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQlzY2gtPnEucWxlbi0tOwogCQkJcmV0dXJuIHNrYjsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9yZWQuYyBiL25ldC9zY2hlZC9zY2hfcmVkLmMKaW5kZXggYTYwMDljNS4uOWY5OGRiZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9yZWQuYworKysgYi9uZXQvc2NoZWQvc2NoX3JlZC5jCkBAIC05NCw3ICs5NCw2IEBACiAKIAlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2hpbGQpOwogCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpKSB7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlzY2gtPnEucWxlbisrOwogCX0gZWxzZSBpZiAobmV0X3htaXRfZHJvcF9jb3VudChyZXQpKSB7CiAJCXEtPnN0YXRzLnBkcm9wKys7CkBAIC0xMTQsMTEgKzExMywxMyBAQAogCXN0cnVjdCBRZGlzYyAqY2hpbGQgPSBxLT5xZGlzYzsKIAogCXNrYiA9IGNoaWxkLT5kZXF1ZXVlKGNoaWxkKTsKLQlpZiAoc2tiKQorCWlmIChza2IpIHsKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXNjaC0+cS5xbGVuLS07Ci0JZWxzZSBpZiAoIXJlZF9pc19pZGxpbmcoJnEtPnBhcm1zKSkKLQkJcmVkX3N0YXJ0X29mX2lkbGVfcGVyaW9kKCZxLT5wYXJtcyk7Ci0KKwl9IGVsc2UgeworCQlpZiAoIXJlZF9pc19pZGxpbmcoJnEtPnBhcm1zKSkKKwkJCXJlZF9zdGFydF9vZl9pZGxlX3BlcmlvZCgmcS0+cGFybXMpOworCX0KIAlyZXR1cm4gc2tiOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwppbmRleCAyMzllYzUzLi5lZGVhOGNlIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jCisrKyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKQEAgLTQwMiwxMCArNDAyLDggQEAKIAkJcS0+dGFpbCA9IHNsb3Q7CiAJCXNsb3QtPmFsbG90ID0gcS0+c2NhbGVkX3F1YW50dW07CiAJfQotCWlmICgrK3NjaC0+cS5xbGVuIDw9IHEtPmxpbWl0KSB7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOworCWlmICgrK3NjaC0+cS5xbGVuIDw9IHEtPmxpbWl0KQogCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKLQl9CiAKIAlzZnFfZHJvcChzY2gpOwogCXJldHVybiBORVRfWE1JVF9DTjsKQEAgLTQ0NSw2ICs0NDMsNyBAQAogCX0KIAlza2IgPSBzbG90X2RlcXVldWVfaGVhZChzbG90KTsKIAlzZnFfZGVjKHEsIGEpOworCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCXNjaC0+cS5xbGVuLS07CiAJc2NoLT5xc3RhdHMuYmFja2xvZyAtPSBxZGlzY19wa3RfbGVuKHNrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGJmLmMgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCmluZGV4IDc3NTY1ZTcuLmU5MzE2NTggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGJmLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90YmYuYwpAQCAtMTM0LDcgKzEzNCw2IEBACiAJfQogCiAJc2NoLT5xLnFsZW4rKzsKLQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIH0KIApAQCAtMTg3LDYgKzE4Niw3IEBACiAJCQlxLT5wdG9rZW5zID0gcHRva3M7CiAJCQlzY2gtPnEucWxlbi0tOwogCQkJc2NoLT5mbGFncyAmPSB+VENRX0ZfVEhST1RUTEVEOworCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQlyZXR1cm4gc2tiOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGVxbC5jIGIvbmV0L3NjaGVkL3NjaF90ZXFsLmMKaW5kZXggODRjZTQ4ZS4uZDg0ZTczMiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90ZXFsLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90ZXFsLmMKQEAgLTg3LDcgKzg3LDYgQEAKIAogCWlmIChxLT5xLnFsZW4gPCBkZXYtPnR4X3F1ZXVlX2xlbikgewogCQlfX3NrYl9xdWV1ZV90YWlsKCZxLT5xLCBza2IpOwotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAJfQogCkBAIC0xMTEsNiArMTEwLDggQEAKIAkJCWRhdC0+bS0+c2xhdmVzID0gc2NoOwogCQkJbmV0aWZfd2FrZV9xdWV1ZShtKTsKIAkJfQorCX0gZWxzZSB7CisJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCX0KIAlzY2gtPnEucWxlbiA9IGRhdC0+cS5xbGVuICsgZGF0X3F1ZXVlLT5xZGlzYy0+cS5xbGVuOwogCXJldHVybiBza2I7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKaW5kZXggMmNjNDZmMC4uYjIzNDI4ZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwpAQCAtMjAyOSwxMSArMjAyOSwxMSBAQAogCQkJKmVycnAgPSBzY3RwX21ha2Vfb3BfZXJyb3JfZml4ZWQoYXNvYywgY2h1bmspOwogCiAJCWlmICgqZXJycCkgewotCQkJc2N0cF9pbml0X2NhdXNlX2ZpeGVkKCplcnJwLCBTQ1RQX0VSUk9SX1VOS05PV05fUEFSQU0sCi0JCQkJCVdPUkRfUk9VTkQobnRvaHMocGFyYW0ucC0+bGVuZ3RoKSkpOwotCQkJc2N0cF9hZGR0b19jaHVua19maXhlZCgqZXJycCwKLQkJCQkJV09SRF9ST1VORChudG9ocyhwYXJhbS5wLT5sZW5ndGgpKSwKLQkJCQkJcGFyYW0udik7CisJCQlpZiAoIXNjdHBfaW5pdF9jYXVzZV9maXhlZCgqZXJycCwgU0NUUF9FUlJPUl9VTktOT1dOX1BBUkFNLAorCQkJCQlXT1JEX1JPVU5EKG50b2hzKHBhcmFtLnAtPmxlbmd0aCkpKSkKKwkJCQlzY3RwX2FkZHRvX2NodW5rX2ZpeGVkKCplcnJwLAorCQkJCQkJV09SRF9ST1VORChudG9ocyhwYXJhbS5wLT5sZW5ndGgpKSwKKwkJCQkJCXBhcmFtLnYpOwogCQl9IGVsc2UgewogCQkJLyogSWYgdGhlcmUgaXMgbm8gbWVtb3J5IGZvciBnZW5lcmF0aW5nIHRoZSBFUlJPUgogCQkJICogcmVwb3J0IGFzIHNwZWNpZmllZCwgYW4gQUJPUlQgd2lsbCBiZSB0cmlnZ2VyZWQKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKaW5kZXggN2JkM2JiYi4uZDgwMmU5NCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKQEAgLTE2MDksOSArMTYwOSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHN2Y19iY19zb2NrX2ZyZWUoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KQogewotCWlmICh4cHJ0KSB7Ci0JCWtmcmVlKHhwcnQtPnhwdF9iY19zaWQpOworCWlmICh4cHJ0KQogCQlrZnJlZShjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KSk7Ci0JfQogfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCAzZTVkYmQ0Li5kMTEyZjAzIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwpAQCAtODAyLDExICs4MDIsMTEgQEAKIAkJCXJldHVybiBmcmVxOwogCQlpZiAoZnJlcSA9PSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXdkZXZfbG9jayh3ZGV2KTsKIAkJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQl3ZGV2X2xvY2sod2Rldik7CiAJCWVyciA9IGNmZzgwMjExX3NldF9mcmVxKHJkZXYsIHdkZXYsIGZyZXEsIE5MODAyMTFfQ0hBTl9OT19IVCk7Ci0JCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwogCQl3ZGV2X3VubG9jayh3ZGV2KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CiAJCXJldHVybiBlcnI7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jIGIvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jCmluZGV4IDU1MTg3YzguLjQwNjIwNzUgMTAwNjQ0Ci0tLSBhL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYworKysgYi9uZXQveDI1L3gyNV9mYWNpbGl0aWVzLmMKQEAgLTI3LDkgKzI3LDE5IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQveDI1Lmg+CiAKLS8qCi0gKiBQYXJzZSBhIHNldCBvZiBmYWNpbGl0aWVzIGludG8gdGhlIGZhY2lsaXRpZXMgc3RydWN0dXJlcy4gVW5yZWNvZ25pc2VkCi0gKglmYWNpbGl0aWVzIGFyZSB3cml0dGVuIHRvIHRoZSBkZWJ1ZyBsb2cgZmlsZS4KKy8qKgorICogeDI1X3BhcnNlX2ZhY2lsaXRpZXMgLSBQYXJzZSBmYWNpbGl0aWVzIGZyb20gc2tiIGludG8gdGhlIGZhY2lsaXRpZXMgc3RydWN0cworICoKKyAqIEBza2I6IHNrX2J1ZmYgdG8gcGFyc2UKKyAqIEBmYWNpbGl0aWVzOiBSZWd1bGFyIGZhY2lsaXRlcywgdXBkYXRlZCBhcyBmYWNpbGl0aWVzIGFyZSBmb3VuZAorICogQGR0ZV9mYWNzOiBJVFUgRFRFIGZhY2lsaXRpZXMsIHVwZGF0ZWQgYXMgRFRFIGZhY2lsaXRpZXMgYXJlIGZvdW5kCisgKiBAdmNfZmFjX21hc2s6IG1hc2sgaXMgdXBkYXRlZCB3aXRoIGFsbCBmYWNpbGl0aWVzIGZvdW5kCisgKgorICogUmV0dXJuIGNvZGVzOgorICogIC0xIC0gUGFyc2luZyBlcnJvciwgY2FsbGVyIHNob3VsZCBkcm9wIGNhbGwgYW5kIGNsZWFuIHVwCisgKiAgIDAgLSBQYXJzZSBPSywgdGhpcyBza2IgaGFzIG5vIGZhY2lsaXRpZXMKKyAqICA+MCAtIFBhcnNlIE9LLCByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGZhY2lsaXRpZXMgaGVhZGVyCisgKgogICovCiBpbnQgeDI1X3BhcnNlX2ZhY2lsaXRpZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHgyNV9mYWNpbGl0aWVzICpmYWNpbGl0aWVzLAogCQlzdHJ1Y3QgeDI1X2R0ZV9mYWNpbGl0aWVzICpkdGVfZmFjcywgdW5zaWduZWQgbG9uZyAqdmNfZmFjX21hc2spCkBAIC02Miw3ICs3Miw3IEBACiAJCXN3aXRjaCAoKnAgJiBYMjVfRkFDX0NMQVNTX01BU0spIHsKIAkJY2FzZSBYMjVfRkFDX0NMQVNTX0E6CiAJCQlpZiAobGVuIDwgMikKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gLTE7CiAJCQlzd2l0Y2ggKCpwKSB7CiAJCQljYXNlIFgyNV9GQUNfUkVWRVJTRToKIAkJCQlpZigocFsxXSAmIDB4ODEpID09IDB4ODEpIHsKQEAgLTEwNyw3ICsxMTcsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgWDI1X0ZBQ19DTEFTU19COgogCQkJaWYgKGxlbiA8IDMpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIC0xOwogCQkJc3dpdGNoICgqcCkgewogCQkJY2FzZSBYMjVfRkFDX1BBQ0tFVF9TSVpFOgogCQkJCWZhY2lsaXRpZXMtPnBhY3NpemVfaW4gID0gcFsxXTsKQEAgLTEzMCw3ICsxNDAsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgWDI1X0ZBQ19DTEFTU19DOgogCQkJaWYgKGxlbiA8IDQpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIC0xOwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIlguMjU6IHVua25vd24gZmFjaWxpdHkgJTAyWCwgIgogCQkJICAgICAgICJ2YWx1ZXMgJTAyWCwgJTAyWCwgJTAyWFxuIiwKIAkJCSAgICAgICBwWzBdLCBwWzFdLCBwWzJdLCBwWzNdKTsKQEAgLTEzOSwxOCArMTQ5LDE4IEBACiAJCQlicmVhazsKIAkJY2FzZSBYMjVfRkFDX0NMQVNTX0Q6CiAJCQlpZiAobGVuIDwgcFsxXSArIDIpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIC0xOwogCQkJc3dpdGNoICgqcCkgewogCQkJY2FzZSBYMjVfRkFDX0NBTExJTkdfQUU6CiAJCQkJaWYgKHBbMV0gPiBYMjVfTUFYX0RURV9GQUNJTF9MRU4gfHwgcFsxXSA8PSAxKQotCQkJCQlyZXR1cm4gMDsKKwkJCQkJcmV0dXJuIC0xOwogCQkJCWR0ZV9mYWNzLT5jYWxsaW5nX2xlbiA9IHBbMl07CiAJCQkJbWVtY3B5KGR0ZV9mYWNzLT5jYWxsaW5nX2FlLCAmcFszXSwgcFsxXSAtIDEpOwogCQkJCSp2Y19mYWNfbWFzayB8PSBYMjVfTUFTS19DQUxMSU5HX0FFOwogCQkJCWJyZWFrOwogCQkJY2FzZSBYMjVfRkFDX0NBTExFRF9BRToKIAkJCQlpZiAocFsxXSA+IFgyNV9NQVhfRFRFX0ZBQ0lMX0xFTiB8fCBwWzFdIDw9IDEpCi0JCQkJCXJldHVybiAwOworCQkJCQlyZXR1cm4gLTE7CiAJCQkJZHRlX2ZhY3MtPmNhbGxlZF9sZW4gPSBwWzJdOwogCQkJCW1lbWNweShkdGVfZmFjcy0+Y2FsbGVkX2FlLCAmcFszXSwgcFsxXSAtIDEpOwogCQkJCSp2Y19mYWNfbWFzayB8PSBYMjVfTUFTS19DQUxMRURfQUU7CmRpZmYgLS1naXQgYS9uZXQveDI1L3gyNV9pbi5jIGIvbmV0L3gyNS94MjVfaW4uYwppbmRleCBmNzI5ZjAyLi4xNWRlNjVmIDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV9pbi5jCisrKyBiL25ldC94MjUveDI1X2luLmMKQEAgLTkxLDEwICs5MSwxMCBAQAogewogCXN0cnVjdCB4MjVfYWRkcmVzcyBzb3VyY2VfYWRkciwgZGVzdF9hZGRyOwogCWludCBsZW47CisJc3RydWN0IHgyNV9zb2NrICp4MjUgPSB4MjVfc2soc2spOwogCiAJc3dpdGNoIChmcmFtZXR5cGUpIHsKIAkJY2FzZSBYMjVfQ0FMTF9BQ0NFUFRFRDogewotCQkJc3RydWN0IHgyNV9zb2NrICp4MjUgPSB4MjVfc2soc2spOwogCiAJCQl4MjVfc3RvcF90aW1lcihzayk7CiAJCQl4MjUtPmNvbmRpdGlvbiA9IDB4MDA7CkBAIC0xMTMsMTQgKzExMywxNiBAQAogCQkJCQkJJmRlc3RfYWRkcik7CiAJCQlpZiAobGVuID4gMCkKIAkJCQlza2JfcHVsbChza2IsIGxlbik7CisJCQllbHNlIGlmIChsZW4gPCAwKQorCQkJCWdvdG8gb3V0X2NsZWFyOwogCiAJCQlsZW4gPSB4MjVfcGFyc2VfZmFjaWxpdGllcyhza2IsICZ4MjUtPmZhY2lsaXRpZXMsCiAJCQkJCQkmeDI1LT5kdGVfZmFjaWxpdGllcywKIAkJCQkJCSZ4MjUtPnZjX2ZhY2lsX21hc2spOwogCQkJaWYgKGxlbiA+IDApCiAJCQkJc2tiX3B1bGwoc2tiLCBsZW4pOwotCQkJZWxzZQotCQkJCXJldHVybiAtMTsKKwkJCWVsc2UgaWYgKGxlbiA8IDApCisJCQkJZ290byBvdXRfY2xlYXI7CiAJCQkvKgogCQkJICoJQ29weSBhbnkgQ2FsbCBVc2VyIERhdGEuCiAJCQkgKi8KQEAgLTE0NCw2ICsxNDYsMTIgQEAKIAl9CiAKIAlyZXR1cm4gMDsKKworb3V0X2NsZWFyOgorCXgyNV93cml0ZV9pbnRlcm5hbChzaywgWDI1X0NMRUFSX1JFUVVFU1QpOworCXgyNS0+c3RhdGUgPSBYMjVfU1RBVEVfMjsKKwl4MjVfc3RhcnRfdDIzdGltZXIoc2spOworCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfbGluay5jIGIvbmV0L3gyNS94MjVfbGluay5jCmluZGV4IDRjYmM5NDIuLjIxMzA2OTIgMTAwNjQ0Ci0tLSBhL25ldC94MjUveDI1X2xpbmsuYworKysgYi9uZXQveDI1L3gyNV9saW5rLmMKQEAgLTM5Niw5ICszOTYsMTIgQEAKIAl3cml0ZV9sb2NrX2JoKCZ4MjVfbmVpZ2hfbGlzdF9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgdG1wLCAmeDI1X25laWdoX2xpc3QpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwogCQluYiA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCB4MjVfbmVpZ2gsIG5vZGUpOworCQlkZXYgPSBuYi0+ZGV2OwogCQlfX3gyNV9yZW1vdmVfbmVpZ2gobmIpOwotCQlkZXZfcHV0KG5iLT5kZXYpOworCQlkZXZfcHV0KGRldik7CiAJfQogCXdyaXRlX3VubG9ja19iaCgmeDI1X25laWdoX2xpc3RfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCA4YjNlZjQwLi42NDU5NTg4IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTEzNDAsMTAgKzEzNDAsMTMgQEAKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9Ci0JeGRzdCA9IGRzdF9hbGxvYyhkc3Rfb3BzKSA/OiBFUlJfUFRSKC1FTk9CVUZTKTsKKwl4ZHN0ID0gZHN0X2FsbG9jKGRzdF9vcHMpOwogCXhmcm1fcG9saWN5X3B1dF9hZmluZm8oYWZpbmZvKTsKIAotCXhkc3QtPmZsby5vcHMgPSAmeGZybV9idW5kbGVfZmNfb3BzOworCWlmIChsaWtlbHkoeGRzdCkpCisJCXhkc3QtPmZsby5vcHMgPSAmeGZybV9idW5kbGVfZmNfb3BzOworCWVsc2UKKwkJeGRzdCA9IEVSUl9QVFIoLUVOT0JVRlMpOwogCiAJcmV0dXJuIHhkc3Q7CiB9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jIGIvc2NyaXB0cy9iYXNpYy9maXhkZXAuYwppbmRleCBjOWExNmFiLi42Yzk0YzZjIDEwMDY0NAotLS0gYS9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jCisrKyBiL3NjcmlwdHMvYmFzaWMvZml4ZGVwLmMKQEAgLTMxNSw2ICszMTUsNyBAQAogCWNoYXIgKmVuZCA9IG0gKyBsZW47CiAJY2hhciAqcDsKIAljaGFyIHNbUEFUSF9NQVhdOworCWludCBmaXJzdDsKIAogCXAgPSBzdHJjaHIobSwgJzonKTsKIAlpZiAoIXApIHsKQEAgLTMyNyw2ICszMjgsNyBAQAogCiAJY2xlYXJfY29uZmlnKCk7CiAKKwlmaXJzdCA9IDE7CiAJd2hpbGUgKG0gPCBlbmQpIHsKIAkJd2hpbGUgKG0gPCBlbmQgJiYgKCptID09ICcgJyB8fCAqbSA9PSAnXFwnIHx8ICptID09ICdcbicpKQogCQkJbSsrOwpAQCAtMzQwLDkgKzM0MiwxNyBAQAogCQlpZiAoc3RycmNtcChzLCAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCIpICYmCiAJCSAgICBzdHJyY21wKHMsICJhcmNoL3VtL2luY2x1ZGUvdW1sLWNvbmZpZy5oIikgJiYKIAkJICAgIHN0cnJjbXAocywgIi52ZXIiKSkgewotCQkJcHJpbnRmKCIgICVzIFxcXG4iLCBzKTsKKwkJCS8qCisJCQkgKiBEbyBub3Qgb3V0cHV0IHRoZSBmaXJzdCBkZXBlbmRlbmN5ICh0aGUKKwkJCSAqIHNvdXJjZSBmaWxlKSwgc28gdGhhdCBrYnVpbGQgaXMgbm90IGNvbmZ1c2VkCisJCQkgKiBpZiBhIC5jIGZpbGUgaXMgcmV3cml0dGVuIGludG8gLlMgb3IgdmljZQorCQkJICogdmVyc2EuCisJCQkgKi8KKwkJCWlmICghZmlyc3QpCisJCQkJcHJpbnRmKCIgICVzIFxcXG4iLCBzKTsKIAkJCWRvX2NvbmZpZ19maWxlKHMpOwogCQl9CisJCWZpcnN0ID0gMDsKIAkJbSA9IHAgKyAxOwogCX0KIAlwcmludGYoIlxuJXM6ICQoZGVwc18lcylcblxuIiwgdGFyZ2V0LCB0YXJnZXQpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViCmluZGV4IGIwYjIzNTcuLmY2Y2JjM2QgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9idWlsZGRlYgorKysgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGRkZWIKQEAgLTIzOCwxMiArMjM4LDEyIEBACiBmaQogCiAjIEJ1aWxkIGhlYWRlciBwYWNrYWdlCi1maW5kIC4gLW5hbWUgTWFrZWZpbGUgLW8gLW5hbWUgS2NvbmZpZ1wqIC1vIC1uYW1lIFwqLnBsID4gL3RtcC9maWxlcyQkCi1maW5kIGFyY2gveDg2L2luY2x1ZGUgaW5jbHVkZSBzY3JpcHRzIC10eXBlIGYgPj4gL3RtcC9maWxlcyQkCisoY2QgJHNyY3RyZWU7IGZpbmQgLiAtbmFtZSBNYWtlZmlsZSAtbyAtbmFtZSBLY29uZmlnXCogLW8gLW5hbWUgXCoucGwgPiAvdG1wL2ZpbGVzJCQpCisoY2QgJHNyY3RyZWU7IGZpbmQgYXJjaC8kU1JDQVJDSC9pbmNsdWRlIGluY2x1ZGUgc2NyaXB0cyAtdHlwZSBmID4+IC90bXAvZmlsZXMkJCkKIChjZCAkb2JqdHJlZTsgZmluZCAuY29uZmlnIE1vZHVsZS5zeW12ZXJzIGluY2x1ZGUgc2NyaXB0cyAtdHlwZSBmID4+IC90bXAvb2JqZmlsZXMkJCkKIGRlc3RkaXI9JGtlcm5lbF9oZWFkZXJzX2Rpci91c3Ivc3JjL2xpbnV4LWhlYWRlcnMtJHZlcnNpb24KIG1rZGlyIC1wICIkZGVzdGRpciIKLXRhciAtYyAtZiAtIC1UIC90bXAvZmlsZXMkJCB8IChjZCAkZGVzdGRpcjsgdGFyIC14ZiAtKQorKGNkICRzcmN0cmVlOyB0YXIgLWMgLWYgLSAtVCAvdG1wL2ZpbGVzJCQpIHwgKGNkICRkZXN0ZGlyOyB0YXIgLXhmIC0pCiAoY2QgJG9ianRyZWU7IHRhciAtYyAtZiAtIC1UIC90bXAvb2JqZmlsZXMkJCkgfCAoY2QgJGRlc3RkaXI7IHRhciAteGYgLSkKIHJtIC1mIC90bXAvZmlsZXMkJCAvdG1wL29iamZpbGVzJCQKIGFyY2g9JChkcGtnIC0tcHJpbnQtYXJjaGl0ZWN0dXJlKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9NYWtlZmlsZSBiL3NlY3VyaXR5L2tleXMvTWFrZWZpbGUKaW5kZXggNmM5NDEwNS4uMWJmMDkwYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9NYWtlZmlsZQorKysgYi9zZWN1cml0eS9rZXlzL01ha2VmaWxlCkBAIC0xMyw4ICsxMyw4IEBACiAJcmVxdWVzdF9rZXlfYXV0aC5vIFwKIAl1c2VyX2RlZmluZWQubwogCi1vYmotJChDT05GSUdfVFJVU1RFRF9LRVlTKSArPSB0cnVzdGVkX2RlZmluZWQubwotb2JqLSQoQ09ORklHX0VOQ1JZUFRFRF9LRVlTKSArPSBlbmNyeXB0ZWRfZGVmaW5lZC5vCitvYmotJChDT05GSUdfVFJVU1RFRF9LRVlTKSArPSB0cnVzdGVkLm8KK29iai0kKENPTkZJR19FTkNSWVBURURfS0VZUykgKz0gZW5jcnlwdGVkLm8KIG9iai0kKENPTkZJR19LRVlTX0NPTVBBVCkgKz0gY29tcGF0Lm8KIG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KIG9iai0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bC5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZF9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHNlY3VyaXR5L2tleXMvZW5jcnlwdGVkX2RlZmluZWQuYwpyZW5hbWUgdG8gc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuYwppbmRleCAyODc5MWE2Li45ZTdlNGNlIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZF9kZWZpbmVkLmMKKysrIGIvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuYwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KICNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CiAKLSNpbmNsdWRlICJlbmNyeXB0ZWRfZGVmaW5lZC5oIgorI2luY2x1ZGUgImVuY3J5cHRlZC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciBLRVlfVFJVU1RFRF9QUkVGSVhbXSA9ICJ0cnVzdGVkOiI7CiBzdGF0aWMgY29uc3QgY2hhciBLRVlfVVNFUl9QUkVGSVhbXSA9ICJ1c2VyOiI7CkBAIC04ODgsNiArODg4LDcgQEAKIG91dDoKIAllbmNyeXB0ZWRfc2hhc2hfcmVsZWFzZSgpOwogCXJldHVybiByZXQ7CisKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfZW5jcnlwdGVkKHZvaWQpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZF9kZWZpbmVkLmggYi9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzZWN1cml0eS9rZXlzL2VuY3J5cHRlZF9kZWZpbmVkLmgKcmVuYW1lIHRvIHNlY3VyaXR5L2tleXMvZW5jcnlwdGVkLmgKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaCBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaAppbmRleCBlZGZhNTBkLi5hNTJhYTdjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKKysrIGIvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCkBAIC04NywxMyArODcsMTMgQEAKIGV4dGVybiBpbnQgX19rZXlfbGlua19iZWdpbihzdHJ1Y3Qga2V5ICprZXlyaW5nLAogCQkJICAgIGNvbnN0IHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKIAkJCSAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKLQkJCSAgICBzdHJ1Y3Qga2V5cmluZ19saXN0ICoqX3ByZWFsbG9jKTsKKwkJCSAgICB1bnNpZ25lZCBsb25nICpfcHJlYWxsb2MpOwogZXh0ZXJuIGludCBfX2tleV9saW5rX2NoZWNrX2xpdmVfa2V5KHN0cnVjdCBrZXkgKmtleXJpbmcsIHN0cnVjdCBrZXkgKmtleSk7CiBleHRlcm4gdm9pZCBfX2tleV9saW5rKHN0cnVjdCBrZXkgKmtleXJpbmcsIHN0cnVjdCBrZXkgKmtleSwKLQkJICAgICAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKipfcHJlYWxsb2MpOworCQkgICAgICAgdW5zaWduZWQgbG9uZyAqX3ByZWFsbG9jKTsKIGV4dGVybiB2b2lkIF9fa2V5X2xpbmtfZW5kKHN0cnVjdCBrZXkgKmtleXJpbmcsCiAJCQkgICBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCi0JCQkgICBzdHJ1Y3Qga2V5cmluZ19saXN0ICpwcmVhbGxvYyk7CisJCQkgICB1bnNpZ25lZCBsb25nIHByZWFsbG9jKTsKIAogZXh0ZXJuIGtleV9yZWZfdCBfX2tleXJpbmdfc2VhcmNoX29uZShrZXlfcmVmX3Qga2V5cmluZ19yZWYsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGtleV90eXBlICp0eXBlLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXkuYyBiL3NlY3VyaXR5L2tleXMva2V5LmMKaW5kZXggODRkNGViNS4uMWMyZDQzZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXkuYworKysgYi9zZWN1cml0eS9rZXlzL2tleS5jCkBAIC00MTUsNyArNDE1LDcgQEAKIAkJCQkgICAgICBzaXplX3QgZGF0YWxlbiwKIAkJCQkgICAgICBzdHJ1Y3Qga2V5ICprZXlyaW5nLAogCQkJCSAgICAgIHN0cnVjdCBrZXkgKmF1dGhrZXksCi0JCQkJICAgICAgc3RydWN0IGtleXJpbmdfbGlzdCAqKl9wcmVhbGxvYykKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nICpfcHJlYWxsb2MpCiB7CiAJaW50IHJldCwgYXdha2VuOwogCkBAIC00ODEsNyArNDgxLDcgQEAKIAkJCSAgICAgc3RydWN0IGtleSAqa2V5cmluZywKIAkJCSAgICAgc3RydWN0IGtleSAqYXV0aGtleSkKIHsKLQlzdHJ1Y3Qga2V5cmluZ19saXN0ICpwcmVhbGxvYzsKKwl1bnNpZ25lZCBsb25nIHByZWFsbG9jOwogCWludCByZXQ7CiAKIAlpZiAoa2V5cmluZykgewpAQCAtNTI2LDcgKzUyNiw3IEBACiAJCQlzdHJ1Y3Qga2V5ICprZXlyaW5nLAogCQkJc3RydWN0IGtleSAqYXV0aGtleSkKIHsKLQlzdHJ1Y3Qga2V5cmluZ19saXN0ICpwcmVhbGxvYzsKKwl1bnNpZ25lZCBsb25nIHByZWFsbG9jOwogCXN0cnVjdCB0aW1lc3BlYyBub3c7CiAJaW50IHJldCwgYXdha2VuLCBsaW5rX3JldCA9IDA7CiAKQEAgLTgxNCw3ICs4MTQsNyBAQAogCQkJICAgICAgIGtleV9wZXJtX3QgcGVybSwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jOworCXVuc2lnbmVkIGxvbmcgcHJlYWxsb2M7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKIAlzdHJ1Y3Qga2V5X3R5cGUgKmt0eXBlOwogCXN0cnVjdCBrZXkgKmtleXJpbmcsICprZXkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwppbmRleCA5MjAyNGVkLi41NjIwZjA4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYworKysgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwpAQCAtMjUsNiArMjUsOCBAQAogCQkoa2V5cmluZyktPnBheWxvYWQuc3Vic2NyaXB0aW9ucywJCQlcCiAJCXJ3c2VtX2lzX2xvY2tlZCgoc3RydWN0IHJ3X3NlbWFwaG9yZSAqKSYoa2V5cmluZyktPnNlbSkpKQogCisjZGVmaW5lIEtFWV9MSU5LX0ZJWFFVT1RBIDFVTAorCiAvKgogICogV2hlbiBwbHVtYmluZyB0aGUgZGVwdGhzIG9mIHRoZSBrZXkgdHJlZSwgdGhpcyBzZXRzIGEgaGFyZCBsaW1pdAogICogc2V0IG9uIGhvdyBkZWVwIHdlJ3JlIHdpbGxpbmcgdG8gZ28uCkBAIC02OTksMTEgKzcwMSwxMSBAQAogICogUHJlYWxsb2NhdGUgbWVtb3J5IHNvIHRoYXQgYSBrZXkgY2FuIGJlIGxpbmtlZCBpbnRvIHRvIGEga2V5cmluZy4KICAqLwogaW50IF9fa2V5X2xpbmtfYmVnaW4oc3RydWN0IGtleSAqa2V5cmluZywgY29uc3Qgc3RydWN0IGtleV90eXBlICp0eXBlLAotCQkgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAotCQkgICAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKipfcHJlYWxsb2MpCisJCSAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sIHVuc2lnbmVkIGxvbmcgKl9wcmVhbGxvYykKIAlfX2FjcXVpcmVzKCZrZXlyaW5nLT5zZW0pCiB7CiAJc3RydWN0IGtleXJpbmdfbGlzdCAqa2xpc3QsICpua2xpc3Q7CisJdW5zaWduZWQgbG9uZyBwcmVhbGxvYzsKIAl1bnNpZ25lZCBtYXg7CiAJc2l6ZV90IHNpemU7CiAJaW50IGxvb3AsIHJldDsKQEAgLTc0Niw2ICs3NDgsNyBAQAogCiAJCQkJLyogbm90ZSByZXBsYWNlbWVudCBzbG90ICovCiAJCQkJa2xpc3QtPmRlbGtleSA9IG5rbGlzdC0+ZGVsa2V5ID0gbG9vcDsKKwkJCQlwcmVhbGxvYyA9ICh1bnNpZ25lZCBsb25nKW5rbGlzdDsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCX0KQEAgLTc2MCw2ICs3NjMsNyBAQAogCWlmIChrbGlzdCAmJiBrbGlzdC0+bmtleXMgPCBrbGlzdC0+bWF4a2V5cykgewogCQkvKiB0aGVyZSdzIHN1ZmZpY2llbnQgc2xhY2sgc3BhY2UgdG8gYXBwZW5kIGRpcmVjdGx5ICovCiAJCW5rbGlzdCA9IE5VTEw7CisJCXByZWFsbG9jID0gS0VZX0xJTktfRklYUVVPVEE7CiAJfSBlbHNlIHsKIAkJLyogZ3JvdyB0aGUga2V5IGxpc3QgKi8KIAkJbWF4ID0gNDsKQEAgLTc5NCw4ICs3OTgsOSBAQAogCQlua2xpc3QtPmtleXNbbmtsaXN0LT5kZWxrZXldID0gTlVMTDsKIAl9CiAKKwlwcmVhbGxvYyA9ICh1bnNpZ25lZCBsb25nKW5rbGlzdCB8IEtFWV9MSU5LX0ZJWFFVT1RBOwogZG9uZToKLQkqX3ByZWFsbG9jID0gbmtsaXN0OworCSpfcHJlYWxsb2MgPSBwcmVhbGxvYzsKIAlrbGVhdmUoIiA9IDAiKTsKIAlyZXR1cm4gMDsKIApAQCAtODM2LDEyICs4NDEsMTIgQEAKICAqIGNvbWJpbmF0aW9uLgogICovCiB2b2lkIF9fa2V5X2xpbmsoc3RydWN0IGtleSAqa2V5cmluZywgc3RydWN0IGtleSAqa2V5LAotCQlzdHJ1Y3Qga2V5cmluZ19saXN0ICoqX3ByZWFsbG9jKQorCQl1bnNpZ25lZCBsb25nICpfcHJlYWxsb2MpCiB7CiAJc3RydWN0IGtleXJpbmdfbGlzdCAqa2xpc3QsICpua2xpc3Q7CiAKLQlua2xpc3QgPSAqX3ByZWFsbG9jOwotCSpfcHJlYWxsb2MgPSBOVUxMOworCW5rbGlzdCA9IChzdHJ1Y3Qga2V5cmluZ19saXN0ICopKCpfcHJlYWxsb2MgJiB+S0VZX0xJTktfRklYUVVPVEEpOworCSpfcHJlYWxsb2MgPSAwOwogCiAJa2VudGVyKCIlZCwlZCwlcCIsIGtleXJpbmctPnNlcmlhbCwga2V5LT5zZXJpYWwsIG5rbGlzdCk7CiAKQEAgLTg4MSwyMCArODg2LDIyIEBACiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIF9fa2V5X2xpbmtfYmVnaW4oKSBoYXZpbmcgYmVpbmcgY2FsbGVkLgogICovCiB2b2lkIF9fa2V5X2xpbmtfZW5kKHN0cnVjdCBrZXkgKmtleXJpbmcsIHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKLQkJICAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jKQorCQkgICAgdW5zaWduZWQgbG9uZyBwcmVhbGxvYykKIAlfX3JlbGVhc2VzKCZrZXlyaW5nLT5zZW0pCiB7CiAJQlVHX09OKHR5cGUgPT0gTlVMTCk7CiAJQlVHX09OKHR5cGUtPm5hbWUgPT0gTlVMTCk7Ci0Ja2VudGVyKCIlZCwlcywlcCIsIGtleXJpbmctPnNlcmlhbCwgdHlwZS0+bmFtZSwgcHJlYWxsb2MpOworCWtlbnRlcigiJWQsJXMsJWx4Iiwga2V5cmluZy0+c2VyaWFsLCB0eXBlLT5uYW1lLCBwcmVhbGxvYyk7CiAKIAlpZiAodHlwZSA9PSAma2V5X3R5cGVfa2V5cmluZykKIAkJdXBfd3JpdGUoJmtleXJpbmdfc2VyaWFsaXNlX2xpbmtfc2VtKTsKIAogCWlmIChwcmVhbGxvYykgewotCQlrZnJlZShwcmVhbGxvYyk7Ci0JCWtleV9wYXlsb2FkX3Jlc2VydmUoa2V5cmluZywKLQkJCQkgICAga2V5cmluZy0+ZGF0YWxlbiAtIEtFWVFVT1RBX0xJTktfQllURVMpOworCQlpZiAocHJlYWxsb2MgJiBLRVlfTElOS19GSVhRVU9UQSkKKwkJCWtleV9wYXlsb2FkX3Jlc2VydmUoa2V5cmluZywKKwkJCQkJICAgIGtleXJpbmctPmRhdGFsZW4gLQorCQkJCQkgICAgS0VZUVVPVEFfTElOS19CWVRFUyk7CisJCWtmcmVlKChzdHJ1Y3Qga2V5cmluZ19saXN0ICopKHByZWFsbG9jICYgfktFWV9MSU5LX0ZJWFFVT1RBKSk7CiAJfQogCXVwX3dyaXRlKCZrZXlyaW5nLT5zZW0pOwogfQpAQCAtOTIxLDcgKzkyOCw3IEBACiAgKi8KIGludCBrZXlfbGluayhzdHJ1Y3Qga2V5ICprZXlyaW5nLCBzdHJ1Y3Qga2V5ICprZXkpCiB7Ci0Jc3RydWN0IGtleXJpbmdfbGlzdCAqcHJlYWxsb2M7CisJdW5zaWduZWQgbG9uZyBwcmVhbGxvYzsKIAlpbnQgcmV0OwogCiAJa2V5X2NoZWNrKGtleXJpbmcpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCmluZGV4IDlhN2ZiMzkuLmEzZGMwZDQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYworKysgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKQEAgLTM1Miw4ICszNTIsOCBAQAogCQkJICAgICAgIHN0cnVjdCBrZXlfdXNlciAqdXNlciwKIAkJCSAgICAgICBzdHJ1Y3Qga2V5ICoqX2tleSkKIHsKLQlzdHJ1Y3Qga2V5cmluZ19saXN0ICpwcmVhbGxvYzsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOworCXVuc2lnbmVkIGxvbmcgcHJlYWxsb2M7CiAJc3RydWN0IGtleSAqa2V5OwogCWtleV9yZWZfdCBrZXlfcmVmOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3RydXN0ZWRfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc2VjdXJpdHkva2V5cy90cnVzdGVkX2RlZmluZWQuYwpyZW5hbWUgdG8gc2VjdXJpdHkva2V5cy90cnVzdGVkLmMKaW5kZXggMjgzNmM2ZC4uODNmYzkyZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy90cnVzdGVkX2RlZmluZWQuYworKysgYi9zZWN1cml0eS9rZXlzL3RydXN0ZWQuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RwbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RwbV9jb21tYW5kLmg+CiAKLSNpbmNsdWRlICJ0cnVzdGVkX2RlZmluZWQuaCIKKyNpbmNsdWRlICJ0cnVzdGVkLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIGhtYWNfYWxnW10gPSAiaG1hYyhzaGExKSI7CiBzdGF0aWMgY29uc3QgY2hhciBoYXNoX2FsZ1tdID0gInNoYTEiOwpAQCAtMTAzMiw2ICsxMDMyLDcgQEAKIAlyZXQgPSBkYXRhYmxvYl9wYXJzZShkYXRhYmxvYiwgbmV3X3AsIG5ld19vKTsKIAlpZiAocmV0ICE9IE9wdF91cGRhdGUpIHsKIAkJcmV0ID0gLUVJTlZBTDsKKwkJa2ZyZWUobmV3X3ApOwogCQlnb3RvIG91dDsKIAl9CiAJLyogY29weSBvbGQga2V5IHZhbHVlcywgYW5kIHJlc2VhbCB3aXRoIG5ldyBwY3JzICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3RydXN0ZWRfZGVmaW5lZC5oIGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNlY3VyaXR5L2tleXMvdHJ1c3RlZF9kZWZpbmVkLmgKcmVuYW1lIHRvIHNlY3VyaXR5L2tleXMvdHJ1c3RlZC5oCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCA3MzllNDAzLi43YjczMDhhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTE1NCwxMCArMTU0LDkgQEAKIAkJCQkgICAgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIH0KIAotaW50IHNlY3VyaXR5X2NhcGFibGUoaW50IGNhcCkKK2ludCBzZWN1cml0eV9jYXBhYmxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBpbnQgY2FwKQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPmNhcGFibGUoY3VycmVudCwgY3VycmVudF9jcmVkKCksIGNhcCwKLQkJCQkgICAgIFNFQ1VSSVRZX0NBUF9BVURJVCk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+Y2FwYWJsZShjdXJyZW50LCBjcmVkLCBjYXAsIFNFQ1VSSVRZX0NBUF9BVURJVCk7CiB9CiAKIGludCBzZWN1cml0eV9yZWFsX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjYXApCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggZTI3NmViNC4uYzhkNjk5MiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMzE5OCw3ICszMTk4LDExIEBACiB7CiAJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gY3JlZC0+c2VjdXJpdHk7CiAKLQlCVUdfT04oKHVuc2lnbmVkIGxvbmcpIGNyZWQtPnNlY3VyaXR5IDwgUEFHRV9TSVpFKTsKKwkvKgorCSAqIGNyZWQtPnNlY3VyaXR5ID09IE5VTEwgaWYgc2VjdXJpdHlfY3JlZF9hbGxvY19ibGFuaygpIG9yCisJICogc2VjdXJpdHlfcHJlcGFyZV9jcmVkcygpIHJldHVybmVkIGFuIGVycm9yLgorCSAqLworCUJVR19PTihjcmVkLT5zZWN1cml0eSAmJiAodW5zaWduZWQgbG9uZykgY3JlZC0+c2VjdXJpdHkgPCBQQUdFX1NJWkUpOwogCWNyZWQtPnNlY3VyaXR5ID0gKHZvaWQgKikgMHg3VUw7CiAJa2ZyZWUodHNlYyk7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbmRpdGlvbmFsLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbmRpdGlvbmFsLmMKaW5kZXggYzNmODQ1Yy4uYTUzMzczMiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9jb25kaXRpb25hbC5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvY29uZGl0aW9uYWwuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJcC0+Ym9vbF92YWxfdG9fc3RydWN0ID0gKHN0cnVjdCBjb25kX2Jvb2xfZGF0dW0gKiopCiAJCWttYWxsb2MocC0+cF9ib29scy5ucHJpbSAqIHNpemVvZihzdHJ1Y3QgY29uZF9ib29sX2RhdHVtICopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXAtPmJvb2xfdmFsX3RvX3N0cnVjdCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCmluZGV4IGJlOWRlMzguLjU3MzYzNTYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKQEAgLTUwMSw4ICs1MDEsOCBAQAogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKLQlyYyA9IC1FTk9NRU07Ci0JaWYgKGNvbmRfaW5pdF9ib29sX2luZGV4ZXMocCkpCisJcmMgPSBjb25kX2luaXRfYm9vbF9pbmRleGVzKHApOworCWlmIChyYykKIAkJZ290byBvdXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1lNX05VTTsgaSsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vYWFjaS5jIGIvc291bmQvYXJtL2FhY2kuYwppbmRleCA5MWFjYzlhLi43YzFmYzY0IDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vYWFjaS5jCisrKyBiL3NvdW5kL2FybS9hYWNpLmMKQEAgLTMwLDYgKzMwLDggQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRQkiYWFjaS1wbDA0MSIKIAorI2RlZmluZSBGUkFNRV9QRVJJT0RfVVMJMjEKKwogLyoKICAqIFBNIHN1cHBvcnQgaXMgbm90IGNvbXBsZXRlLiAgVHVybiBpdCBvZmYuCiAgKi8KQEAgLTQ4LDcgKzUwLDExIEBACiAJaWYgKHYgJiBTTEZSXzFSWFYpCiAJCXJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX1NMMVJYKTsKIAotCXdyaXRlbChtYWluY3IsIGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CisJaWYgKG1haW5jciAhPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpKSB7CisJCXdyaXRlbChtYWluY3IsIGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CisJCXJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CisJCXVkZWxheSgxKTsKKwl9CiB9CiAKIC8qCkBAIC02NCw4ICs3MCw4IEBACiAJCQkgICAgdW5zaWduZWQgc2hvcnQgdmFsKQogewogCXN0cnVjdCBhYWNpICphYWNpID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworCWludCB0aW1lb3V0OwogCXUzMiB2OwotCWludCB0aW1lb3V0ID0gNTAwMDsKIAogCWlmIChhYzk3LT5udW0gPj0gNCkKIAkJcmV0dXJuOwpAQCAtODEsMTQgKzg3LDE3IEBACiAJd3JpdGVsKHZhbCA8PCA0LCBhYWNpLT5iYXNlICsgQUFDSV9TTDJUWCk7CiAJd3JpdGVsKHJlZyA8PCAxMiwgYWFjaS0+YmFzZSArIEFBQ0lfU0wxVFgpOwogCi0JLyoKLQkgKiBXYWl0IGZvciB0aGUgdHJhbnNtaXNzaW9uIG9mIGJvdGggc2xvdHMgdG8gY29tcGxldGUuCi0JICovCisJLyogSW5pdGlhbGx5LCB3YWl0IG9uZSBmcmFtZSBwZXJpb2QgKi8KKwl1ZGVsYXkoRlJBTUVfUEVSSU9EX1VTKTsKKworCS8qIEFuZCB0aGVuIHdhaXQgYW4gYWRkaXRpb25hbCBlaWdodCBmcmFtZSBwZXJpb2RzIGZvciBpdCB0byBiZSBzZW50ICovCisJdGltZW91dCA9IEZSQU1FX1BFUklPRF9VUyAqIDg7CiAJZG8geworCQl1ZGVsYXkoMSk7CiAJCXYgPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9TTEZSKTsKIAl9IHdoaWxlICgodiAmIChTTEZSXzFUWEJ8U0xGUl8yVFhCKSkgJiYgLS10aW1lb3V0KTsKIAotCWlmICghdGltZW91dCkKKwlpZiAodiAmIChTTEZSXzFUWEJ8U0xGUl8yVFhCKSkKIAkJZGV2X2VycigmYWFjaS0+ZGV2LT5kZXYsCiAJCQkidGltZW91dCB3YWl0aW5nIGZvciB3cml0ZSB0byBjb21wbGV0ZVxuIik7CiAKQEAgLTEwMSw5ICsxMTAsOCBAQAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGFhY2lfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnKQogewogCXN0cnVjdCBhYWNpICphYWNpID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworCWludCB0aW1lb3V0LCByZXRyaWVzID0gMTA7CiAJdTMyIHY7Ci0JaW50IHRpbWVvdXQgPSA1MDAwOwotCWludCByZXRyaWVzID0gMTA7CiAKIAlpZiAoYWM5Ny0+bnVtID49IDQpCiAJCXJldHVybiB+MDsKQEAgLTExNywzNSArMTI1LDM0IEBACiAJICovCiAJd3JpdGVsKChyZWcgPDwgMTIpIHwgKDEgPDwgMTkpLCBhYWNpLT5iYXNlICsgQUFDSV9TTDFUWCk7CiAKLQkvKgotCSAqIFdhaXQgZm9yIHRoZSB0cmFuc21pc3Npb24gdG8gY29tcGxldGUuCi0JICovCisJLyogSW5pdGlhbGx5LCB3YWl0IG9uZSBmcmFtZSBwZXJpb2QgKi8KKwl1ZGVsYXkoRlJBTUVfUEVSSU9EX1VTKTsKKworCS8qIEFuZCB0aGVuIHdhaXQgYW4gYWRkaXRpb25hbCBlaWdodCBmcmFtZSBwZXJpb2RzIGZvciBpdCB0byBiZSBzZW50ICovCisJdGltZW91dCA9IEZSQU1FX1BFUklPRF9VUyAqIDg7CiAJZG8geworCQl1ZGVsYXkoMSk7CiAJCXYgPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9TTEZSKTsKIAl9IHdoaWxlICgodiAmIFNMRlJfMVRYQikgJiYgLS10aW1lb3V0KTsKIAotCWlmICghdGltZW91dCkgeworCWlmICh2ICYgU0xGUl8xVFhCKSB7CiAJCWRldl9lcnIoJmFhY2ktPmRldi0+ZGV2LCAidGltZW91dCBvbiBzbG90IDEgVFggYnVzeVxuIik7CiAJCXYgPSB+MDsKIAkJZ290byBvdXQ7CiAJfQogCi0JLyoKLQkgKiBHaXZlIHRoZSBBQyc5NyBjb2RlYyBtb3JlIHRoYW4gZW5vdWdoIHRpbWUKLQkgKiB0byByZXNwb25kLiAoNDJ1cyA9IH4yIGZyYW1lcyBhdCA0OGtIei4pCi0JICovCi0JdWRlbGF5KDQyKTsKKwkvKiBOb3cgd2FpdCBmb3IgdGhlIHJlc3BvbnNlIGZyYW1lICovCisJdWRlbGF5KEZSQU1FX1BFUklPRF9VUyk7CiAKLQkvKgotCSAqIFdhaXQgZm9yIHNsb3QgMiB0byBpbmRpY2F0ZSBkYXRhLgotCSAqLwotCXRpbWVvdXQgPSA1MDAwOworCS8qIEFuZCB0aGVuIHdhaXQgYW4gYWRkaXRpb25hbCBlaWdodCBmcmFtZSBwZXJpb2RzIGZvciBkYXRhICovCisJdGltZW91dCA9IEZSQU1FX1BFUklPRF9VUyAqIDg7CiAJZG8geworCQl1ZGVsYXkoMSk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCQl2ID0gcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfU0xGUikgJiAoU0xGUl8xUlhWfFNMRlJfMlJYVik7CiAJfSB3aGlsZSAoKHYgIT0gKFNMRlJfMVJYVnxTTEZSXzJSWFYpKSAmJiAtLXRpbWVvdXQpOwogCi0JaWYgKCF0aW1lb3V0KSB7CisJaWYgKHYgIT0gKFNMRlJfMVJYVnxTTEZSXzJSWFYpKSB7CiAJCWRldl9lcnIoJmFhY2ktPmRldi0+ZGV2LCAidGltZW91dCBvbiBSWCB2YWxpZFxuIik7CiAJCXYgPSB+MDsKIAkJZ290byBvdXQ7CkBAIC0xNzksNiArMTg2LDcgQEAKIAlpbnQgdGltZW91dCA9IDUwMDA7CiAKIAlkbyB7CisJCXVkZWxheSgxKTsKIAkJdmFsID0gcmVhZGwoYWFjaXJ1bi0+YmFzZSArIEFBQ0lfU1IpOwogCX0gd2hpbGUgKHZhbCAmIG1hc2sgJiYgdGltZW91dC0tKTsKIH0KQEAgLTg3NCw3ICs4ODIsNyBAQAogCSAqIEdpdmUgdGhlIEFDJzk3IGNvZGVjIG1vcmUgdGhhbiBlbm91Z2ggdGltZQogCSAqIHRvIHdha2UgdXAuICg0MnVzID0gfjIgZnJhbWVzIGF0IDQ4a0h6LikKIAkgKi8KLQl1ZGVsYXkoNDIpOworCXVkZWxheShGUkFNRV9QRVJJT0RfVVMgKiAyKTsKIAogCXJldCA9IHNuZF9hYzk3X2J1cyhhYWNpLT5jYXJkLCAwLCAmYWFjaV9idXNfb3BzLCBhYWNpLCAmYWM5N19idXMpOwogCWlmIChyZXQpCkBAIC05ODksNiArOTk3LDggQEAKIAkgKiBkaXNhYmxpbmcgdGhlIGNoYW5uZWwgZG9lc24ndCBjbGVhciB0aGUgRklGTy4KIAkgKi8KIAl3cml0ZWwoYWFjaS0+bWFpbmNyICYgfk1BSU5DUl9JRSwgYWFjaS0+YmFzZSArIEFBQ0lfTUFJTkNSKTsKKwlyZWFkbChhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOworCXVkZWxheSgxKTsKIAl3cml0ZWwoYWFjaS0+bWFpbmNyLCBhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL2FjOTdjLmMgYi9zb3VuZC9hdG1lbC9hYzk3Yy5jCmluZGV4IDEwYzNhODcuLmIzMTA3MDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2F0bWVsL2FjOTdjLmMKKysrIGIvc291bmQvYXRtZWwvYWM5N2MuYwpAQCAtMzMsOSArMzMsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9kd19kbWFjLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NwdS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIAorI2lmZGVmIENPTkZJR19BUkNIX0FUOTEKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImFjOTdjLmgiCiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9ocnRpbWVyLmMgYi9zb3VuZC9jb3JlL2hydGltZXIuYwppbmRleCA3NzMwNTc1Li5iOGIzMWM0IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2hydGltZXIuYworKysgYi9zb3VuZC9jb3JlL2hydGltZXIuYwpAQCAtNDUsMTIgKzQ1LDEzIEBACiB7CiAJc3RydWN0IHNuZF9ocnRpbWVyICpzdGltZSA9IGNvbnRhaW5lcl9vZihocnQsIHN0cnVjdCBzbmRfaHJ0aW1lciwgaHJ0KTsKIAlzdHJ1Y3Qgc25kX3RpbWVyICp0ID0gc3RpbWUtPnRpbWVyOworCXVuc2lnbmVkIGxvbmcgb3J1bnM7CiAKIAlpZiAoIWF0b21pY19yZWFkKCZzdGltZS0+cnVubmluZykpCiAJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIAotCWhydGltZXJfZm9yd2FyZF9ub3coaHJ0LCBuc190b19rdGltZSh0LT5zdGlja3MgKiByZXNvbHV0aW9uKSk7Ci0Jc25kX3RpbWVyX2ludGVycnVwdChzdGltZS0+dGltZXIsIHQtPnN0aWNrcyk7CisJb3J1bnMgPSBocnRpbWVyX2ZvcndhcmRfbm93KGhydCwgbnNfdG9fa3RpbWUodC0+c3RpY2tzICogcmVzb2x1dGlvbikpOworCXNuZF90aW1lcl9pbnRlcnJ1cHQoc3RpbWUtPnRpbWVyLCB0LT5zdGlja3MgKiBvcnVucyk7CiAKIAlpZiAoIWF0b21pY19yZWFkKCZzdGltZS0+cnVubmluZykpCiAJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKQEAgLTEwNCw3ICsxMDUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF90aW1lcl9oYXJkd2FyZSBocnRpbWVyX2h3ID0gewotCS5mbGFncyA9CVNORFJWX1RJTUVSX0hXX0FVVE8sCisJLmZsYWdzID0JU05EUlZfVElNRVJfSFdfQVVUTyB8IFNORFJWX1RJTUVSX0hXX1RBU0tMRVQsCiAJLm9wZW4gPQkJc25kX2hydGltZXJfb3BlbiwKIAkuY2xvc2UgPQlzbmRfaHJ0aW1lcl9jbG9zZSwKIAkuc3RhcnQgPQlzbmRfaHJ0aW1lcl9zdGFydCwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvamFjay5jIGIvc291bmQvY29yZS9qYWNrLmMKaW5kZXggNDkwMmFlNS4uNTNiNTNlOSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9qYWNrLmMKKysrIGIvc291bmQvY29yZS9qYWNrLmMKQEAgLTE0MSw2ICsxNDEsNyBAQAogCiBmYWlsX2lucHV0OgogCWlucHV0X2ZyZWVfZGV2aWNlKGphY2stPmlucHV0X2Rldik7CisJa2ZyZWUoamFjay0+aWQpOwogCWtmcmVlKGphY2spOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL210cGF2LmMgYi9zb3VuZC9kcml2ZXJzL210cGF2LmMKaW5kZXggZGEwMzU5Ny4uNWM0MjZkZiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tdHBhdi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbXRwYXYuYwpAQCAtNTUsMTQgKzU1LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KLQogLyoKICAqICAgICAgZ2xvYmFscwogICovCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvTWFrZWZpbGUgYi9zb3VuZC9vc3MvTWFrZWZpbGUKaW5kZXggOTZmMTRkYy4uOTBmZmI5OSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL01ha2VmaWxlCisrKyBiL3NvdW5kL29zcy9NYWtlZmlsZQpAQCAtODcsNyArODcsNyBAQAogCSQob2JqKS9iaW4yaGV4IHBzc19zeW50aCA8ICQ8ID4gJEAKIGVsc2UKICAgICAkKG9iaikvcHNzX2Jvb3QuaDoKLQkoCQkJCQkJCVwKKwkkKFEpKAkJCQkJCQlcCiAJICAgIGVjaG8gJ3N0YXRpYyB1bnNpZ25lZCBjaGFyICogcHNzX3N5bnRoID0gTlVMTDsnOwlcCiAJICAgIGVjaG8gJ3N0YXRpYyBpbnQgcHNzX3N5bnRoTGVuID0gMDsnOwkJXAogCSkgPiAkQApAQCAtMTAyLDcgKzEwMiw3IEBACiAJJChvYmopL2hleDJoZXggLWkgdHJpeF9ib290IDwgJDwgPiAkQAogZWxzZQogICAgICQob2JqKS90cml4X2Jvb3QuaDoKLQkoCQkJCQkJCVwKKwkkKFEpKAkJCQkJCQlcCiAJICAgIGVjaG8gJ3N0YXRpYyB1bnNpZ25lZCBjaGFyICogdHJpeF9ib290ID0gTlVMTDsnOwlcCiAJICAgIGVjaG8gJ3N0YXRpYyBpbnQgdHJpeF9ib290X2xlbiA9IDA7JzsJCVwKIAkpID4gJEAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYwppbmRleCAyM2Y0OWYzLi4xNmMwYmRmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCkBAIC0xMjUyLDExICsxMjUyLDE5IEBACiBzdGF0aWMgaW50IGlubGluZSB2b3J0ZXhfYWRiZG1hX2dldGxpbmVhcnBvcyh2b3J0ZXhfdCAqIHZvcnRleCwgaW50IGFkYmRtYSkKIHsKIAlzdHJlYW1fdCAqZG1hID0gJnZvcnRleC0+ZG1hX2FkYlthZGJkbWFdOwotCWludCB0ZW1wOworCWludCB0ZW1wLCBwYWdlLCBkZWx0YTsKIAogCXRlbXAgPSBod3JlYWQodm9ydGV4LT5tbWlvLCBWT1JURVhfQURCRE1BX1NUQVQgKyAoYWRiZG1hIDw8IDIpKTsKLQl0ZW1wID0gKGRtYS0+cGVyaW9kX3ZpcnQgKiBkbWEtPnBlcmlvZF9ieXRlcykgKyAodGVtcCAmIChkbWEtPnBlcmlvZF9ieXRlcyAtIDEpKTsKLQlyZXR1cm4gdGVtcDsKKwlwYWdlID0gKHRlbXAgJiBBREJfU1VCQlVGX01BU0spID4+IEFEQl9TVUJCVUZfU0hJRlQ7CisJaWYgKGRtYS0+bnJfcGVyaW9kcyA+PSA0KQorCQlkZWx0YSA9IChwYWdlIC0gZG1hLT5wZXJpb2RfcmVhbCkgJiAzOworCWVsc2UgeworCQlkZWx0YSA9IChwYWdlIC0gZG1hLT5wZXJpb2RfcmVhbCk7CisJCWlmIChkZWx0YSA8IDApCisJCQlkZWx0YSArPSBkbWEtPm5yX3BlcmlvZHM7CisJfQorCXJldHVybiAoZG1hLT5wZXJpb2RfdmlydCArIGRlbHRhKSAqIGRtYS0+cGVyaW9kX2J5dGVzCisJCSsgKHRlbXAgJiAoZG1hLT5wZXJpb2RfYnl0ZXMgLSAxKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZvcnRleF9hZGJkbWFfc3RhcnRmaWZvKHZvcnRleF90ICogdm9ydGV4LCBpbnQgYWRiZG1hKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggNjExNzU5NS4uNTczNTk0YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguYworKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCkBAIC05NzksMzEgKzk3OSwyNSBAQAogCiAJc25kX2F6ZjMzMjhfZGJnY2FsbGVudGVyKCk7CiAJc3dpdGNoIChiaXRyYXRlKSB7Ci0jZGVmaW5lIEFaRl9GTVRfWExBVEUoaW5fZnJlcSwgb3V0X2JpdHMpIFwKLQlkbyB7IFwKLQkJY2FzZSBBWkZfRlJFUV8gIyMgaW5fZnJlcTogXAotCQkJZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfICMjIG91dF9iaXRzOyBcCi0JCQlicmVhazsgXAotCX0gd2hpbGUgKDApOwotCUFaRl9GTVRfWExBVEUoNDAwMCwgU1VTUEVDVEVEXzQwMDApCi0JQVpGX0ZNVF9YTEFURSg0ODAwLCBTVVNQRUNURURfNDgwMCkKLQkvKiB0aGUgQVpGMzMyOCBuYW1lcyBpdCAiNTUxMCIgZm9yIHNvbWUgc3RyYW5nZSByZWFzb246ICovCi0JQVpGX0ZNVF9YTEFURSg1NTEyLCA1NTEwKQotCUFaRl9GTVRfWExBVEUoNjYyMCwgNjYyMCkKLQlBWkZfRk1UX1hMQVRFKDgwMDAsIDgwMDApCi0JQVpGX0ZNVF9YTEFURSg5NjAwLCA5NjAwKQotCUFaRl9GTVRfWExBVEUoMTEwMjUsIDExMDI1KQotCUFaRl9GTVRfWExBVEUoMTMyNDAsIFNVU1BFQ1RFRF8xMzI0MCkKLQlBWkZfRk1UX1hMQVRFKDE2MDAwLCAxNjAwMCkKLQlBWkZfRk1UX1hMQVRFKDIyMDUwLCAyMjA1MCkKLQlBWkZfRk1UX1hMQVRFKDMyMDAwLCAzMjAwMCkKKwljYXNlIEFaRl9GUkVRXzQwMDA6ICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV9TVVNQRUNURURfNDAwMDsgYnJlYWs7CisJY2FzZSBBWkZfRlJFUV80ODAwOiAgZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfU1VTUEVDVEVEXzQ4MDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfNTUxMjoKKwkJLyogdGhlIEFaRjMzMjggbmFtZXMgaXQgIjU1MTAiIGZvciBzb21lIHN0cmFuZ2UgcmVhc29uICovCisJCQkgICAgIGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzU1MTA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfNjYyMDogIGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzY2MjA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfODAwMDogIGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzgwMDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfOTYwMDogIGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzk2MDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfMTEwMjU6IGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzExMDI1OyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzEzMjQwOiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV9TVVNQRUNURURfMTMyNDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfMTYwMDA6IGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzE2MDAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzIyMDUwOiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV8yMjA1MDsgYnJlYWs7CisJY2FzZSBBWkZfRlJFUV8zMjAwMDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfMzIwMDA7IGJyZWFrOwogCWRlZmF1bHQ6CiAJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJ1bmtub3duIGJpdHJhdGUgJWQsIGFzc3VtaW5nIDQ0LjFrSHohXG4iLCBiaXRyYXRlKTsKIAkJLyogZmFsbC10aHJvdWdoICovCi0JQVpGX0ZNVF9YTEFURSg0NDEwMCwgNDQxMDApCi0JQVpGX0ZNVF9YTEFURSg0ODAwMCwgNDgwMDApCi0JQVpGX0ZNVF9YTEFURSg2NjIwMCwgU1VTUEVDVEVEXzY2MjAwKQotI3VuZGVmIEFaRl9GTVRfWExBVEUKKwljYXNlIEFaRl9GUkVRXzQ0MTAwOiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV80NDEwMDsgYnJlYWs7CisJY2FzZSBBWkZfRlJFUV80ODAwMDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfNDgwMDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfNjYyMDA6IGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRX1NVU1BFQ1RFRF82NjIwMDsgYnJlYWs7CiAJfQogCS8qIHZhbCA9IDB4ZmYwNzsgM20yNy45OTNzICg2NTMwMUh6OyAtPiA2NDAwMEh6Pz8/KSBobW0sIDY2MTIwLCA2NTk2NywgNjYxMjMgKi8KIAkvKiB2YWwgPSAweGZmMDk7IDE3bTE1LjA5OHMgKDEzMTIzLDQ3OEh6OyAtPiAxMjAwMEh6Pz8/KSBobW0sIDEzMjM3LjJIej8gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jIGIvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMKaW5kZXggNGE2NjM0Ny4uNzRiMDU2MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMKQEAgLTM4MSw3ICszODEsNyBAQAogCXNuZF9wcmludF9wY21fcmF0ZXMoYS0+cmF0ZXMsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCiAJaWYgKGEtPmZvcm1hdCA9PSBBVURJT19DT0RJTkdfVFlQRV9MUENNKQotCQlzbmRfcHJpbnRfcGNtX2JpdHMoYS0+c2FtcGxlX2JpdHMsIGJ1ZjIgKyA4LCBzaXplb2YoYnVmMiAtIDgpKTsKKwkJc25kX3ByaW50X3BjbV9iaXRzKGEtPnNhbXBsZV9iaXRzLCBidWYyICsgOCwgc2l6ZW9mKGJ1ZjIpIC0gOCk7CiAJZWxzZSBpZiAoYS0+bWF4X2JpdHJhdGUpCiAJCXNucHJpbnRmKGJ1ZjIsIHNpemVvZihidWYyKSwKIAkJCQkiLCBtYXggYml0cmF0ZSA9ICVkIiwgYS0+bWF4X2JpdHJhdGUpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggMmU5MWE5OS4uZmNlZGFkOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC0yMzA4LDYgKzIzMDgsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxM2QsICJBU1VTIFA1QUQyIiwgUE9TX0ZJWF9MUElCKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWIzLCAiQVNVUyIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFlNywgIkFTVVMgTTJWIiwgUE9TX0ZJWF9MUElCKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4NDEwLCAiQVNVUyIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTA2OSwgIlNvbnkgVlBDUzExVjlFIiwgUE9TX0ZJWF9MUElCKSwKIAlTTkRfUENJX1FVSVJLKDB4MTEwNiwgMHgzMjg4LCAiQVNVUyBNMlYtTVggU0UiLCBQT1NfRklYX0xQSUIpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMTAsICJUb3NoaWJhIEExMDAtMjU5IiwgUE9TX0ZJWF9MUElCKSwKQEAgLTI3MDMsNyArMjcwNCw3IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUEFUQ0hfTE9BREVSCi0JaWYgKHBhdGNoW2Rldl0pIHsKKwlpZiAocGF0Y2hbZGV2XSAmJiAqcGF0Y2hbZGV2XSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNGWCAiQXBwbHlpbmcgcGF0Y2ggZmlybXdhcmUgJyVzJ1xuIiwKIAkJCSAgIHBhdGNoW2Rldl0pOwogCQllcnIgPSBzbmRfaGRhX2xvYWRfcGF0Y2goY2hpcC0+YnVzLCBwYXRjaFtkZXZdKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCmluZGV4IGEwN2IwMzEuLjA2Nzk4MmY0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKQEAgLTEwMzksOSArMTAzOSwxMSBAQAogCXsweDExLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4MDAwOH0sCiAJezB4MTEsIEFDX1ZFUkJfU0VUX1BST0NfU1RBVEUsIDB4MDB9LAogCisjaWYgMCAvKiBEb24ndCB0byBzZXQgdG8gRDMgYXMgd2UgYXJlIGluIHBvd2VyLXVwIHNlcXVlbmNlICovCiAJezB4MDcsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCAweDAzfSwgLyogUy9QRElGIFJ4OiBEMyAqLwogCXsweDA4LCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgMHgwM30sIC8qIFMvUERJRiBUeDogRDMgKi8KIAkvKnsweDAxLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgMHgwM30sKi8gLyogQUZHOiBEMyBUaGlzIGlzIGFscmVhZHkgaGFuZGxlZCAqLworI2VuZGlmCiAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IDliYjAzMGEuLjRkNTAwNGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTg1LDYgKzg1LDcgQEAKIAl1bnNpZ25lZCBpbnQgYXV0b19taWM7CiAJaW50IGF1dG9fbWljX2V4dDsJCS8qIGF1dG9jZmcuaW5wdXRzW10gaW5kZXggZm9yIGV4dCBtaWMgKi8KIAl1bnNpZ25lZCBpbnQgbmVlZF9kYWNfZml4OworCWhkYV9uaWRfdCBzbGF2ZV9kaWdfb3V0c1syXTsKIAogCS8qIGNhcHR1cmUgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX2FkY19uaWRzOwpAQCAtMTI3LDYgKzEyOCw3IEBACiAJdW5zaWduZWQgaW50IGlkZWFwYWQ6MTsKIAl1bnNpZ25lZCBpbnQgdGhpbmtwYWQ6MTsKIAl1bnNpZ25lZCBpbnQgaHBfbGFwdG9wOjE7CisJdW5zaWduZWQgaW50IGFzdXM6MTsKIAogCXVuc2lnbmVkIGludCBleHRfbWljX3ByZXNlbnQ7CiAJdW5zaWduZWQgaW50IHJlY29yZGluZzsKQEAgLTM1Miw2ICszNTQsOCBAQAogCQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0ubmlkID0KIAkJCQlzcGVjLT5kaWdfaW5fbmlkOwogCQl9CisJCWlmIChzcGVjLT5zbGF2ZV9kaWdfb3V0c1swXSkKKwkJCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHNwZWMtPnNsYXZlX2RpZ19vdXRzOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDAzLDEwICs0MDcsMTYgQEAKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYzsKIAlzdHJ1Y3QgY29uZXhhbnRfamFjayAqamFjazsKIAljb25zdCBjaGFyICpuYW1lOwotCWludCBlcnI7CisJaW50IGksIGVycjsKIAogCXNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzbmRfYXJyYXlfaW5pdCgmc3BlYy0+amFja3MsIHNpemVvZigqamFjayksIDMyKTsKKworCWphY2sgPSBzcGVjLT5qYWNrcy5saXN0OworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5qYWNrcy51c2VkOyBpKyssIGphY2srKykKKwkJaWYgKGphY2stPm5pZCA9PSBuaWQpCisJCQlyZXR1cm4gMCA7IC8qIGFscmVhZHkgcHJlc2VudCAqLworCiAJamFjayA9IHNuZF9hcnJheV9uZXcoJnNwZWMtPmphY2tzKTsKIAluYW1lID0gKHR5cGUgPT0gU05EX0pBQ0tfSEVBRFBIT05FKSA/ICJIZWFkcGhvbmUiIDogIk1pYyIgOwogCkBAIC0yMTAwLDcgKzIxMTAsNyBAQAogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2RhY19uaWRzWzFdID0geyAweDEwIH07CiBzdGF0aWMgaGRhX25pZF90IGN4dDUwNjZfYWRjX25pZHNbM10gPSB7IDB4MTQsIDB4MTUsIDB4MTYgfTsKIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA2Nl9jYXBzcmNfbmlkc1sxXSA9IHsgMHgxNyB9OwotI2RlZmluZSBDWFQ1MDY2X1NQRElGX09VVAkweDIxCitzdGF0aWMgaGRhX25pZF90IGN4dDUwNjZfZGlnb3V0X3Bpbl9uaWRzWzJdID0geyAweDIwLCAweDIyIH07CiAKIC8qIE9MUEMncyBtaWNyb3Bob25lIHBvcnQgaXMgREMgY291cGxlZCBmb3IgdXNlIHdpdGggZXh0ZXJuYWwgc2Vuc29ycywKICAqIHRoZXJlZm9yZSB3ZSB1c2UgYSA1MCUgbWljIGJpYXMgaW4gb3JkZXIgdG8gY2VudGVyIHRoZSBpbnB1dCBzaWduYWwgd2l0aApAQCAtMjMxMiw2ICsyMzIyLDE5IEBACiAJfQogfQogCisKKy8qIHRvZ2dsZSBpbnB1dCBvZiBidWlsdC1pbiBkaWdpdGFsIG1pYyBhbmQgbWljIGphY2sgYXBwcm9wcmlhdGVseSAqLworc3RhdGljIHZvaWQgY3h0NTA2Nl9hc3VzX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQ7CisKKwlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxYik7CisJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGV4dGVybmFsIG1pY3JvcGhvbmUgcHJlc2VudD0lZFxuIiwgcHJlc2VudCk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNywgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCisJCQkgICAgcHJlc2VudCA/IDEgOiAwKTsKK30KKworCiAvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gZGlnaXRhbCBtaWMgYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNjZfaHBfbGFwdG9wX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0yMzg3LDYgKzI0MTAsMjMgQEAKIAljeHQ1MDY2X3VwZGF0ZV9zcGVha2VyKGNvZGVjKTsKIH0KIAorLyogRGlzcGF0Y2ggdGhlIHJpZ2h0IG1pYyBhdXRvc3dpdGNoIGZ1bmN0aW9uICovCitzdGF0aWMgdm9pZCBjeHQ1MDY2X2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCWlmIChzcGVjLT5kZWxsX3Zvc3RybykKKwkJY3h0NTA2Nl92b3N0cm9fYXV0b21pYyhjb2RlYyk7CisJZWxzZSBpZiAoc3BlYy0+aWRlYXBhZCkKKwkJY3h0NTA2Nl9pZGVhcGFkX2F1dG9taWMoY29kZWMpOworCWVsc2UgaWYgKHNwZWMtPnRoaW5rcGFkKQorCQljeHQ1MDY2X3RoaW5rcGFkX2F1dG9taWMoY29kZWMpOworCWVsc2UgaWYgKHNwZWMtPmhwX2xhcHRvcCkKKwkJY3h0NTA2Nl9ocF9sYXB0b3BfYXV0b21pYyhjb2RlYyk7CisJZWxzZSBpZiAoc3BlYy0+YXN1cykKKwkJY3h0NTA2Nl9hc3VzX2F1dG9taWMoY29kZWMpOworfQorCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgamFjayBzZW5zaW5nICovCiBzdGF0aWMgdm9pZCBjeHQ1MDY2X29scGNfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCiB7CkBAIC0yNDA1LDYwICsyNDQ1LDE5IEBACiB9CiAKIC8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBqYWNrIHNlbnNpbmcgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNjZfdm9zdHJvX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQorc3RhdGljIHZvaWQgY3h0NTA2Nl91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKIHsKLQlzbmRfcHJpbnRkZCgiQ1hUNTA2Nl92b3N0cm86IHVuc29sIGV2ZW50ICV4ICgleClcbiIsIHJlcywgcmVzID4+IDI2KTsKKwlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogdW5zb2wgZXZlbnQgJXggKCV4KVxuIiwgcmVzLCByZXMgPj4gMjYpOwogCXN3aXRjaCAocmVzID4+IDI2KSB7CiAJY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKIAkJY3h0NTA2Nl9ocF9hdXRvbXV0ZShjb2RlYyk7CiAJCWJyZWFrOwogCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgotCQljeHQ1MDY2X3Zvc3Ryb19hdXRvbWljKGNvZGVjKTsKKwkJY3h0NTA2Nl9hdXRvbWljKGNvZGVjKTsKIAkJYnJlYWs7CiAJfQogfQogCi0vKiB1bnNvbGljaXRlZCBldmVudCBmb3IgamFjayBzZW5zaW5nICovCi1zdGF0aWMgdm9pZCBjeHQ1MDY2X2lkZWFwYWRfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCi17Ci0Jc25kX3ByaW50ZGQoIkNYVDUwNjZfaWRlYXBhZDogdW5zb2wgZXZlbnQgJXggKCV4KVxuIiwgcmVzLCByZXMgPj4gMjYpOwotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKLQkJY3h0NTA2Nl9ocF9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgotCQljeHQ1MDY2X2lkZWFwYWRfYXV0b21pYyhjb2RlYyk7Ci0JCWJyZWFrOwotCX0KLX0KLQotLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLwotc3RhdGljIHZvaWQgY3h0NTA2Nl9ocF9sYXB0b3BfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCi17Ci0Jc25kX3ByaW50ZGQoIkNYVDUwNjZfaHBfbGFwdG9wOiB1bnNvbCBldmVudCAleCAoJXgpXG4iLCByZXMsIHJlcyA+PiAyNik7Ci0Jc3dpdGNoIChyZXMgPj4gMjYpIHsKLQljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgotCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBDT05FWEFOVF9NSUNfRVZFTlQ6Ci0JCWN4dDUwNjZfaHBfbGFwdG9wX2F1dG9taWMoY29kZWMpOwotCQlicmVhazsKLQl9Ci19Ci0KLS8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBqYWNrIHNlbnNpbmcgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNjZfdGhpbmtwYWRfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCi17Ci0Jc25kX3ByaW50ZGQoIkNYVDUwNjZfdGhpbmtwYWQ6IHVuc29sIGV2ZW50ICV4ICgleClcbiIsIHJlcywgcmVzID4+IDI2KTsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6Ci0JCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwotCQlicmVhazsKLQljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKLQkJY3h0NTA2Nl90aGlua3BhZF9hdXRvbWljKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQotfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA2Nl9hbmFsb2dfbWljX2Jvb3N0ID0gewogCS5udW1faXRlbXMgPSA1LApAQCAtMjYzMyw2ICsyNjMyLDI3IEBACiAJc3BlYy0+cmVjb3JkaW5nID0gMDsKIH0KIAorc3RhdGljIHZvaWQgY29uZXhhbnRfY2hlY2tfZGlnX291dHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgIGhkYV9uaWRfdCAqZGlnX3BpbnMsCisJCQkJICAgIGludCBudW1fcGlucykKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWhkYV9uaWRfdCAqbmlkX2xvYyA9ICZzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGluczsgaSsrLCBkaWdfcGlucysrKSB7CisJCXVuc2lnbmVkIGludCBjZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsICpkaWdfcGlucyk7CisJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoY2ZnKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsICpkaWdfcGlucywgbmlkX2xvYywgMSkgIT0gMSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3BlYy0+c2xhdmVfZGlnX291dHNbMF0pCisJCQluaWRfbG9jKys7CisJCWVsc2UKKwkJCW5pZF9sb2MgPSBzcGVjLT5zbGF2ZV9kaWdfb3V0czsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDY2X2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSA0LAogCS5pdGVtcyA9IHsKQEAgLTMwMzksMjAgKzMwNTksMTEgQEAKIC8qIGluaXRpYWxpemUgamFjay1zZW5zaW5nLCB0b28gKi8KIHN0YXRpYyBpbnQgY3h0NTA2Nl9pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0KIAlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogaW5pdFxuIik7CiAJY29uZXhhbnRfaW5pdChjb2RlYyk7CiAJaWYgKGNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQpIHsKIAkJY3h0NTA2Nl9ocF9hdXRvbXV0ZShjb2RlYyk7Ci0JCWlmIChzcGVjLT5kZWxsX3Zvc3RybykKLQkJCWN4dDUwNjZfdm9zdHJvX2F1dG9taWMoY29kZWMpOwotCQllbHNlIGlmIChzcGVjLT5pZGVhcGFkKQotCQkJY3h0NTA2Nl9pZGVhcGFkX2F1dG9taWMoY29kZWMpOwotCQllbHNlIGlmIChzcGVjLT50aGlua3BhZCkKLQkJCWN4dDUwNjZfdGhpbmtwYWRfYXV0b21pYyhjb2RlYyk7Ci0JCWVsc2UgaWYgKHNwZWMtPmhwX2xhcHRvcCkKLQkJCWN4dDUwNjZfaHBfbGFwdG9wX2F1dG9taWMoY29kZWMpOworCQljeHQ1MDY2X2F1dG9taWMoY29kZWMpOwogCX0KIAljeHQ1MDY2X3NldF9taWNfYm9vc3QoY29kZWMpOwogCXJldHVybiAwOwpAQCAtMzA4MCw2ICszMDkxLDcgQEAKIAlDWFQ1MDY2X0RFTExfVk9TVFJPLAkvKiBEZWxsIFZvc3RybyAxMDE1aSAqLwogCUNYVDUwNjZfSURFQVBBRCwJLyogTGVub3ZvIElkZWFQYWQgVTE1MCAqLwogCUNYVDUwNjZfVEhJTktQQUQsCS8qIExlbm92byBUaGlua1BhZCBUNDEwcywgb3RoZXJzPyAqLworCUNYVDUwNjZfQVNVUywJCS8qIEFzdXMgSzUySlUsIExlbm92byBHNTYwIC0gSW50IG1pYyBhdCAweDFhIGFuZCBFeHQgbWljIGF0IDB4MWIgKi8KIAlDWFQ1MDY2X0hQX0xBUFRPUCwgICAgICAvKiBIUCBMYXB0b3AgKi8KIAlDWFQ1MDY2X01PREVMUwogfTsKQEAgLTMwOTEsNiArMzEwMyw3IEBACiAJW0NYVDUwNjZfREVMTF9WT1NUUk9dCT0gImRlbGwtdm9zdHJvIiwKIAlbQ1hUNTA2Nl9JREVBUEFEXQk9ICJpZGVhcGFkIiwKIAlbQ1hUNTA2Nl9USElOS1BBRF0JPSAidGhpbmtwYWQiLAorCVtDWFQ1MDY2X0FTVVNdCQk9ICJhc3VzIiwKIAlbQ1hUNTA2Nl9IUF9MQVBUT1BdCT0gImhwLWxhcHRvcCIsCiB9OwogCkBAIC0zMTAxLDggKzMxMTQsMTIgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDAxLCAiRGVsbCBWb3N0cm8gMTAxNCIsIENYVDUwNjZfREVMTF9WT1NUUk8pLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA0MDIsICJEZWxsIFZvc3RybyIsIENYVDUwNjZfREVMTF9WT1NUUk8pLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA0MDgsICJEZWxsIEluc3Bpcm9uIE9uZSAxOVQiLCBDWFQ1MDY2X0lERUFQQUQpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA1MGYsICJEZWxsIEluc3Bpcm9uIiwgQ1hUNTA2Nl9JREVBUEFEKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNTEwLCAiRGVsbCBWb3N0cm8iLCBDWFQ1MDY2X0lERUFQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDM2MGIsICJIUCBHNjAiLCBDWFQ1MDY2X0hQX0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNmMywgIkFzdXMgQTUySiIsIENYVDUwNjZfSFBfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2YzLCAiQXN1cyBBNTJKIiwgQ1hUNTA2Nl9BU1VTKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjQzLCAiQXN1cyBLNTJKVSIsIENYVDUwNjZfQVNVUyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk5MywgIkFzdXMgVTUwRiIsIENYVDUwNjZfQVNVUyksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYxZSwgIlRvc2hpYmEgU2F0ZWxsaXRlIEM2NTBEIiwgQ1hUNTA2Nl9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjUwLCAiVG9zaGliYSBTYXRlbGxpdGUgUDUwMC1QU1BHU0MtMDE4MDBUIiwgQ1hUNTA2Nl9PTFBDX1hPXzFfNSksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmZlMCwgIlRvc2hpYmEgU2F0ZWxsaXRlIFBybyBUMTMwLTE1RiIsIENYVDUwNjZfT0xQQ19YT18xXzUpLApAQCAtMzExMSw3ICszMTI4LDkgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTUyZCwgMHgwODMzLCAiT0xQQyBYTy0xLjUiLCBDWFQ1MDY2X09MUENfWE9fMV81KSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGYyLCAiTGVub3ZvIFQ0MDBzIiwgQ1hUNTA2Nl9USElOS1BBRCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFjNSwgIlRoaW5rcGFkIEVkZ2UgMTMiLCBDWFQ1MDY2X1RISU5LUEFEKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWM2LCAiVGhpbmtwYWQgRWRnZSAxMyIsIENYVDUwNjZfQVNVUyksCiAgCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxNWUsICJMZW5vdm8gVGhpbmtwYWQiLCBDWFQ1MDY2X1RISU5LUEFEKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzOGFmLCAiTGVub3ZvIEc1NjAiLCBDWFQ1MDY2X0FTVVMpLAogCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTdhYSwgIkxlbm92byIsIENYVDUwNjZfSURFQVBBRCksIC8qIEZhbGxiYWNrIGZvciBMZW5vdm9zIHdpdGhvdXQgZG9jayBtaWMgKi8KIAl7fQogfTsKQEAgLTMxMzMsNyArMzE1Miw4IEBACiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoY3h0NTA2Nl9kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBjeHQ1MDY2X2RhY19uaWRzOwotCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQ1hUNTA2Nl9TUERJRl9PVVQ7CisJY29uZXhhbnRfY2hlY2tfZGlnX291dHMoY29kZWMsIGN4dDUwNjZfZGlnb3V0X3Bpbl9uaWRzLAorCSAgICBBUlJBWV9TSVpFKGN4dDUwNjZfZGlnb3V0X3Bpbl9uaWRzKSk7CiAJc3BlYy0+bnVtX2FkY19uaWRzID0gMTsKIAlzcGVjLT5hZGNfbmlkcyA9IGN4dDUwNjZfYWRjX25pZHM7CiAJc3BlYy0+Y2Fwc3JjX25pZHMgPSBjeHQ1MDY2X2NhcHNyY19uaWRzOwpAQCAtMzE2NywxNyArMzE4NywyMCBAQAogCQlzcGVjLT5udW1faW5pdF92ZXJicysrOwogCQlzcGVjLT5kZWxsX2F1dG9tdXRlID0gMTsKIAkJYnJlYWs7CisJY2FzZSBDWFQ1MDY2X0FTVVM6CiAJY2FzZSBDWFQ1MDY2X0hQX0xBUFRPUDoKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA2Nl9pbml0OwotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl9ocF9sYXB0b3BfZXZlbnQ7CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X3Vuc29sX2V2ZW50OwogCQlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzXSA9CiAJCQljeHQ1MDY2X2luaXRfdmVyYnNfaHBfbGFwdG9wOwogCQlzcGVjLT5udW1faW5pdF92ZXJicysrOwotCQlzcGVjLT5ocF9sYXB0b3AgPSAxOworCQlzcGVjLT5ocF9sYXB0b3AgPSBib2FyZF9jb25maWcgPT0gQ1hUNTA2Nl9IUF9MQVBUT1A7CisJCXNwZWMtPmFzdXMgPSBib2FyZF9jb25maWcgPT0gQ1hUNTA2Nl9BU1VTOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJzOwogCQkvKiBubyBTL1BESUYgb3V0ICovCi0JCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKKwkJaWYgKGJvYXJkX2NvbmZpZyA9PSBDWFQ1MDY2X0hQX0xBUFRPUCkKKwkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKIAkJLyogaW5wdXQgc291cmNlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgKi8KIAkJc3BlYy0+aW5wdXRfbXV4ID0gTlVMTDsKIAkJc3BlYy0+cG9ydF9kX21vZGUgPSAwOwpAQCAtMzIwNyw3ICszMjMwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDY2X0RFTExfVk9TVFJPOgogCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDY2X2luaXQ7Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X3Zvc3Ryb19ldmVudDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfdW5zb2xfZXZlbnQ7CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfdm9zdHJvOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CkBAIC0zMjI0LDcgKzMyNDcsNyBAQAogCQlicmVhazsKIAljYXNlIENYVDUwNjZfSURFQVBBRDoKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA2Nl9pbml0OwotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl9pZGVhcGFkX2V2ZW50OworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl91bnNvbF9ldmVudDsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3RlcjsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKIAkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNjZfaW5pdF92ZXJic19pZGVhcGFkOwpAQCAtMzI0MCw3ICszMjYzLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDY2X1RISU5LUEFEOgogCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDY2X2luaXQ7Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X3RoaW5rcGFkX2V2ZW50OworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl91bnNvbF9ldmVudDsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3RlcjsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKIAkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNjZfaW5pdF92ZXJic190aGlua3BhZDsKQEAgLTMzODksNyArMzQxMiw3IEBACiAJCX0KIAl9CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5wcml2YXRlX2RhY19uaWRzOwotCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IG51bXMgKiAyOworCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAogCWlmIChjZmctPmhwX291dHMgPiAwKQogCQlzcGVjLT5hdXRvX211dGUgPSAxOwpAQCAtMzcwOCw5ICszNzMxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeF9hdXRvX2FkZF92b2x1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmJhc2VuYW1lLAorc3RhdGljIGludCBjeF9hdXRvX2FkZF92b2x1bWVfaWR4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpiYXNlbmFtZSwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmRpciwgaW50IGNpZHgsCi0JCQkgICAgICBoZGFfbmlkX3QgbmlkLCBpbnQgaGRhX2RpcikKKwkJCSAgICAgIGhkYV9uaWRfdCBuaWQsIGludCBoZGFfZGlyLCBpbnQgYW1wX2lkeCkKIHsKIAlzdGF0aWMgY2hhciBuYW1lWzMyXTsKIAlzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcga25ld1tdID0gewpAQCAtMzcyMiw3ICszNzQ1LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKLQkJa25ld1tpXS5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsIGhkYV9kaXIpOworCQlrbmV3W2ldLnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgYW1wX2lkeCwKKwkJCQkJCQkgICAgaGRhX2Rpcik7CiAJCWtuZXdbaV0uc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRzsKIAkJa25ld1tpXS5pbmRleCA9IGNpZHg7CiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzJXMgJXMiLCBiYXNlbmFtZSwgZGlyLCBzZnhbaV0pOwpAQCAtMzczOCw2ICszNzYyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBjeF9hdXRvX2FkZF92b2x1bWUoY29kZWMsIHN0ciwgZGlyLCBjaWR4LCBuaWQsIGhkYV9kaXIpCQlcCisJY3hfYXV0b19hZGRfdm9sdW1lX2lkeChjb2RlYywgc3RyLCBkaXIsIGNpZHgsIG5pZCwgaGRhX2RpciwgMCkKKwogI2RlZmluZSBjeF9hdXRvX2FkZF9wYl92b2x1bWUoY29kZWMsIG5pZCwgc3RyLCBpZHgpCQkJXAogCWN4X2F1dG9fYWRkX3ZvbHVtZShjb2RlYywgc3RyLCAiIFBsYXliYWNrIiwgaWR4LCBuaWQsIEhEQV9PVVRQVVQpCiAKQEAgLTM3ODcsMjkgKzM4MTQsNjAgQEAKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZyA9ICZzcGVjLT5hdXRvY2ZnOwogCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2xhYmVsOwotCWludCBpLCBlcnIsIGNpZHg7CisJaW50IGksIGVyciwgY2lkeCwgY29ubl9sZW47CisJaGRhX25pZF90IGNvbm5bSERBX01BWF9DT05ORUNUSU9OU107CiAKLQllcnIgPSBjeF9hdXRvX2FkZF92b2x1bWUoY29kZWMsICJDYXB0dXJlIiwgIiIsIDAsIHNwZWMtPmFkY19uaWRzWzBdLAotCQkJCSBIREFfSU5QVVQpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCWludCBtdWx0aV9hZGNfdm9sdW1lID0gMDsgLyogSWYgdGhlIEFEQyBuaWQgaGFzIHNldmVyYWwgaW5wdXQgdm9sdW1lcyAqLworCWludCBhZGNfbmlkID0gc3BlYy0+YWRjX25pZHNbMF07CisKKwljb25uX2xlbiA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBhZGNfbmlkLCBjb25uLAorCQkJCQkgICBIREFfTUFYX0NPTk5FQ1RJT05TKTsKKwlpZiAoY29ubl9sZW4gPCAwKQorCQlyZXR1cm4gY29ubl9sZW47CisKKwltdWx0aV9hZGNfdm9sdW1lID0gY2ZnLT5udW1faW5wdXRzID4gMSAmJiBjb25uX2xlbiA+IDE7CisJaWYgKCFtdWx0aV9hZGNfdm9sdW1lKSB7CisJCWVyciA9IGN4X2F1dG9fYWRkX3ZvbHVtZShjb2RlYywgIkNhcHR1cmUiLCAiIiwgMCwgYWRjX25pZCwKKwkJCQkJIEhEQV9JTlBVVCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAlwcmV2X2xhYmVsID0gTlVMTDsKIAljaWR4ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5udW1faW5wdXRzOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IGNmZy0+aW5wdXRzW2ldLnBpbjsKIAkJY29uc3QgY2hhciAqbGFiZWw7Ci0JCWlmICghKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfSU5fQU1QKSkKKwkJaW50IGo7CisJCWludCBwaW5fYW1wID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9JTl9BTVA7CisJCWlmICghcGluX2FtcCAmJiAhbXVsdGlfYWRjX3ZvbHVtZSkKIAkJCWNvbnRpbnVlOworCiAJCWxhYmVsID0gaGRhX2dldF9hdXRvY2ZnX2lucHV0X2xhYmVsKGNvZGVjLCBjZmcsIGkpOwogCQlpZiAobGFiZWwgPT0gcHJldl9sYWJlbCkKIAkJCWNpZHgrKzsKIAkJZWxzZQogCQkJY2lkeCA9IDA7CiAJCXByZXZfbGFiZWwgPSBsYWJlbDsKLQkJZXJyID0gY3hfYXV0b19hZGRfdm9sdW1lKGNvZGVjLCBsYWJlbCwgIiBDYXB0dXJlIiwgY2lkeCwKLQkJCQkJIG5pZCwgSERBX0lOUFVUKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOworCisJCWlmIChwaW5fYW1wKSB7CisJCQllcnIgPSBjeF9hdXRvX2FkZF92b2x1bWUoY29kZWMsIGxhYmVsLCAiIEJvb3N0IiwgY2lkeCwKKwkJCQkJCSBuaWQsIEhEQV9JTlBVVCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJaWYgKCFtdWx0aV9hZGNfdm9sdW1lKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCBjb25uX2xlbjsgaisrKSB7CisJCQlpZiAoY29ubltqXSA9PSBuaWQpIHsKKwkJCQllcnIgPSBjeF9hdXRvX2FkZF92b2x1bWVfaWR4KGNvZGVjLCBsYWJlbCwKKwkJCQkgICAgIiBDYXB0dXJlIiwgY2lkeCwgYWRjX25pZCwgSERBX0lOUFVULCBqKTsKKwkJCQlpZiAoZXJyIDwgMCkKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTM4ODEsNiArMzkzOSw4IEBACiAJICAucGF0Y2ggPSBwYXRjaF9jeHQ1MDY2IH0sCiAJeyAuaWQgPSAweDE0ZjE1MDY5LCAubmFtZSA9ICJDWDIwNTg1IiwKIAkgIC5wYXRjaCA9IHBhdGNoX2N4dDUwNjYgfSwKKwl7IC5pZCA9IDB4MTRmMTUwNmUsIC5uYW1lID0gIkNYMjA1OTAiLAorCSAgLnBhdGNoID0gcGF0Y2hfY3h0NTA2NiB9LAogCXsgLmlkID0gMHgxNGYxNTA5NywgLm5hbWUgPSAiQ1gyMDYzMSIsCiAJICAucGF0Y2ggPSBwYXRjaF9jb25leGFudF9hdXRvIH0sCiAJeyAuaWQgPSAweDE0ZjE1MDk4LCAubmFtZSA9ICJDWDIwNjMyIiwKQEAgLTM5MDcsNiArMzk2Nyw3IEBACiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTRmMTUwNjciKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxNGYxNTA2OCIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjE0ZjE1MDY5Iik7CitNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTRmMTUwNmUiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxNGYxNTA5NyIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjE0ZjE1MDk4Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTRmMTUwYTEiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMKaW5kZXggMmQ1YjgzZi4uZWMwZmEyZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMKQEAgLTY0Miw2ICs2NDIsNyBAQAogCQkJaGRtaV9haS0+dmVyCQk9IDB4MDE7CiAJCQloZG1pX2FpLT5sZW4JCT0gMHgwYTsKIAkJCWhkbWlfYWktPkNDMDJfQ1Q0Nwk9IGNoYW5uZWxzIC0gMTsKKwkJCWhkbWlfYWktPkNBCQk9IGNhOwogCQkJaGRtaV9jaGVja3N1bV9hdWRpb19pbmZvZnJhbWUoaGRtaV9haSk7CiAJCX0gZWxzZSBpZiAoc3BlYy0+c2lua19lbGRbaV0uY29ubl90eXBlID09IDEpIHsgLyogRGlzcGxheVBvcnQgKi8KIAkJCXN0cnVjdCBkcF9hdWRpb19pbmZvZnJhbWUgKmRwX2FpOwpAQCAtNjUxLDYgKzY1Miw3IEBACiAJCQlkcF9haS0+bGVuCQk9IDB4MWI7CiAJCQlkcF9haS0+dmVyCQk9IDB4MTEgPDwgMjsKIAkJCWRwX2FpLT5DQzAyX0NUNDcJPSBjaGFubmVscyAtIDE7CisJCQlkcF9haS0+Q0EJCT0gY2E7CiAJCX0gZWxzZSB7CiAJCQlzbmRfcHJpbnRkKCJIRE1JOiB1bmtub3duIGNvbm5lY3Rpb24gdHlwZSBhdCBwaW4gJWRcbiIsCiAJCQkJICAgcGluX25pZCk7CkBAIC0xNjMyLDYgKzE2MzQsOSBAQAogeyAuaWQgPSAweDEwZGUwMDEyLCAubmFtZSA9ICJHUFUgMTIgSERNSS9EUCIsCS5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2hfODkgfSwKIHsgLmlkID0gMHgxMGRlMDAxMywgLm5hbWUgPSAiR1BVIDEzIEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzg5IH0sCiB7IC5pZCA9IDB4MTBkZTAwMTQsIC5uYW1lID0gIkdQVSAxNCBIRE1JL0RQIiwJLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF84OSB9LAoreyAuaWQgPSAweDEwZGUwMDE1LCAubmFtZSA9ICJHUFUgMTUgSERNSS9EUCIsCS5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2hfODkgfSwKK3sgLmlkID0gMHgxMGRlMDAxNiwgLm5hbWUgPSAiR1BVIDE2IEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzg5IH0sCisvKiAxNyBpcyBrbm93biB0byBiZSBhYnNlbnQgKi8KIHsgLmlkID0gMHgxMGRlMDAxOCwgLm5hbWUgPSAiR1BVIDE4IEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzg5IH0sCiB7IC5pZCA9IDB4MTBkZTAwMTksIC5uYW1lID0gIkdQVSAxOSBIRE1JL0RQIiwJLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF84OSB9LAogeyAuaWQgPSAweDEwZGUwMDFhLCAubmFtZSA9ICJHUFUgMWEgSERNSS9EUCIsCS5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2hfODkgfSwKQEAgLTE2NzQsNiArMTY3OSw4IEBACiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMTIiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAxMyIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDE0Iik7CitNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMTUiKTsKK01PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAxNiIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDE4Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMTkiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAxYSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCBiZTRkZjRjLi40MjYxYmI4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMTEzMywxMSArMTEzMyw4IEBACiAJCW5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1tpXTsKIAkJaWYgKCFuaWQpCiAJCQlicmVhazsKLQkJaWYgKHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIG5pZCkpIHsKLQkJCXNwZWMtPmphY2tfcHJlc2VudCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQlhbGNfcmVwb3J0X2phY2soY29kZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1tpXSk7CisJCWFsY19yZXBvcnRfamFjayhjb2RlYywgbmlkKTsKKwkJc3BlYy0+amFja19wcmVzZW50IHw9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIG5pZCk7CiAJfQogCiAJbXV0ZSA9IHNwZWMtPmphY2tfcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDA7CkBAIC0yMjkwLDYgKzIyODcsMjkgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg4X2FjZXJfYXNwaXJlXzQ5MzBnX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIlN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiU3Vycm91bmQgUGxheWJhY2sgU3dpdGNoIiwgMHgwZCwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLCAweDBmLCAyLCAweDAsCisJCUhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGYsIDIsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJMRkUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZiwgMSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFX01PTk8oIkxGRSBQbGF5YmFjayBTd2l0Y2giLCAweDBmLCAxLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIlNpZGUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJTaWRlIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ19taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKQEAgLTEwMzU5LDcgKzEwMzc5LDcgQEAKIAkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAJfSwKIAlbQUxDODg4X0FDRVJfQVNQSVJFXzQ5MzBHXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODg4X2Jhc2VfbWl4ZXIsCisJCS5taXhlcnMgPSB7IGFsYzg4OF9hY2VyX2FzcGlyZV80OTMwZ19taXhlciwKIAkJCQlhbGM4ODNfY2htb2RlX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4ODNfaW5pdF92ZXJicywgYWxjODgwX2dwaW8xX2luaXRfdmVyYnMsCiAJCQkJYWxjODg4X2FjZXJfYXNwaXJlXzQ5MzBnX3ZlcmJzIH0sCkBAIC0xNDk1NCw5ICsxNDk3NCwxMSBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwODQsICJTb255IFZBSU8iLCBBTEMyNzVfRklYVVBfU09OWV9IV0VRKSwKIAlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwNGQsICJTb255IFZBSU8iLCBBTEMyNjlfRklYVVBfU09OWV9WQUlPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDcwLCAiRGVsbCBNMTAxeiIsIEFMQzI2OV9GSVhVUF9ERUxMX00xMDFaKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWI4LCAiVGhpbmtwYWQgRWRnZSAxNCIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWU5LCAiVGhpbmtwYWQgRWRnZSAxNCIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGYyLCAiVGhpbmtwYWQgU0w0MTAvNTEwIiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxNWUsICJUaGlua3BhZCBMNTEyIiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxYjgsICJUaGlua3BhZCBFZGdlIDE0IiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxY2EsICJUaGlua3BhZCBMNDEyIiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxZTksICJUaGlua3BhZCBFZGdlIDE1IiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDFhMTMsICJBc3VzIEc3M0p3IiwgQUxDMjY5X0ZJWFVQX0FTVVNfRzczSlcpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDllNTQsICJMRU5PVk8gTkIiLCBBTEMyNjlfRklYVVBfTEVOT1ZPX0VBUEQpLAogCXt9CkBAIC0xNDk5MCw3ICsxNTAxMiw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFlMywgIkFTVVMgVTMzSmMiLCBBTEMyNjlWQl9BTUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjczLCAiQVNVUyBVTDgwSnQiLCBBTEMyNjlWQl9BTUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjgzLCAiQVNVUyBVNTNKYyIsIEFMQzI2OV9BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMmIzLCAiQVNVUyBOODJKdiIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMmIzLCAiQVNVUyBOODJKViIsIEFMQzI2OVZCX0FNSUMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyZDMsICJBU1VTIE42MUp2IiwgQUxDMjY5X0FNSUMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzYTMsICJBU1VTIFVMMzBWdCIsIEFMQzI2OV9BTUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzczLCAiQVNVUyBHNzNKWCIsIEFMQzI2OV9BTUlDKSwKQEAgLTE4ODAwLDYgKzE4ODIyLDcgQEAKIAkJCQkJQUxDNjYyXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxODU0LCAweGYwMDAsIDB4MjAwMCwgIkFTVVMgSDEzLTIwMHgiLAogCQkJICAgQUxDNjYzX0FTVVNfSDEzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTk5MSwgMHg1NjI4LCAiT3JkaXNzaW1vIEVWRSIsIEFMQzY2Ml9MRU5PVk9fMTAxRSksCiAJe30KIH07CiAKQEAgLTE5NDkyLDYgKzE5NTE1LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM2NjJfZml4dXBfdGJsW10gPSB7CisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDMwOCwgIkFjZXIgQXNwaXJlIDg5NDJHIiwgQUxDNjYyX0ZJWFVQX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDM4YiwgIkFjZXIgQXNwaXJlIDg5NDNHIiwgQUxDNjYyX0ZJWFVQX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzA1MSwgIlNhbXN1bmcgUjcyMCIsIEFMQzY2Ml9GSVhVUF9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzOGFmLCAiTGVub3ZvIElkZWFwYWQgWTU1MFAiLCBBTEM2NjJfRklYVVBfSURFQVBBRCksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggOWVhNDhiNC4uYmQ3YjEyMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtNTg2LDcgKzU4NiwxMiBAQAogCTB4MGYsIDB4MTAsIDB4MTEsIDB4MWYsIDB4MjAsCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODh4eHhfcGluX25pZHNbMTBdID0geworc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDg3eHh4X3Bpbl9uaWRzWzZdID0geworCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsCisJMHgwZiwgMHgxMSwKK307CisKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4OHh4eF9waW5fbmlkc1s4XSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweDBkLAogCTB4MGYsIDB4MTEsIDB4MWYsIDB4MjAsCiB9OwpAQCAtNTQzMCwxMiArNTQzNSwxMyBAQAogCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgewogCWNhc2UgMHgxMTFkNzZkMToKIAljYXNlIDB4MTExZDc2ZDk6CisJY2FzZSAweDExMWQ3NmU1OgogCQlzcGVjLT5kbWljX25pZHMgPSBzdGFjOTJoZDg3Yl9kbWljX25pZHM7CiAJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5Mnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKIAkJCQlzdGFjOTJoZDg3Yl9kbWljX25pZHMsCiAJCQkJU1RBQzkySEQ4N0JfTlVNX0RNSUNTKTsKLQkJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkODh4eHhfcGluX25pZHMpOwotCQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkODh4eHhfcGluX25pZHM7CisJCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDg3eHh4X3Bpbl9uaWRzKTsKKwkJc3BlYy0+cGluX25pZHMgPSBzdGFjOTJoZDg3eHh4X3Bpbl9uaWRzOwogCQlzcGVjLT5tb25vX25pZCA9IDA7CiAJCXNwZWMtPm51bV9wd3JzID0gMDsKIAkJYnJlYWs7CkBAIC01NDQzLDYgKzU0NDksNyBAQAogCWNhc2UgMHgxMTFkNzY2NzoKIAljYXNlIDB4MTExZDc2Njg6CiAJY2FzZSAweDExMWQ3NjY5OgorCWNhc2UgMHgxMTFkNzZlMzoKIAkJc3BlYy0+bnVtX2RtaWNzID0gc3RhYzkyeHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAogCQkJCXN0YWM5MmhkODh4eHhfZG1pY19uaWRzLAogCQkJCVNUQUM5MkhEODhYWFhfTlVNX0RNSUNTKTsKQEAgLTYzODcsNiArNjM5NCw4IEBACiAJeyAuaWQgPSAweDExMWQ3NmNkLCAubmFtZSA9ICI5MkhEODlGMiIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkNzN4eCB9LAogCXsgLmlkID0gMHgxMTFkNzZjZSwgLm5hbWUgPSAiOTJIRDg5RjEiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDczeHggfSwKIAl7IC5pZCA9IDB4MTExZDc2ZTAsIC5uYW1lID0gIjkySEQ5MUJYWCIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkODN4eHh9LAorCXsgLmlkID0gMHgxMTFkNzZlMywgLm5hbWUgPSAiOTJIRDk4QlhYIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCisJeyAuaWQgPSAweDExMWQ3NmU1LCAubmFtZSA9ICI5MkhEOTlCWFgiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKIAl7IC5pZCA9IDB4MTExZDc2ZTcsIC5uYW1lID0gIjkySEQ5MEJYWCIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkODN4eHh9LAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwppbmRleCBhNzZjMzI2Li42M2IwMDU0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKQEAgLTU2Nyw3ICs1NjcsNyBAQAogCQloZGFfbmlkX3QgbmlkID0gY2ZnLT5pbnB1dHNbaV0ucGluOwogCQlpZiAoc3BlYy0+c21hcnQ1MV9lbmFibGVkICYmIGlzX3NtYXJ0NTFfcGlucyhzcGVjLCBuaWQpKQogCQkJY3RsID0gUElOX09VVDsKLQkJZWxzZSBpZiAoaSA9PSBBVVRPX1BJTl9NSUMpCisJCWVsc2UgaWYgKGNmZy0+aW5wdXRzW2ldLnR5cGUgPT0gQVVUT19QSU5fTUlDKQogCQkJY3RsID0gUElOX1ZSRUY1MDsKIAkJZWxzZQogCQkJY3RsID0gUElOX0lOOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uaCBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKaW5kZXggYzJhZTYzZC4uZjUzODk3YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uaAorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCkBAIC05Miw2ICs5Miw4IEBACiAJdm9pZCAoKnVwZGF0ZV9kYWNfdm9sdW1lKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKIAl2b2lkICgqdXBkYXRlX2RhY19tdXRlKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKIAl2b2lkICgqdXBkYXRlX2NlbnRlcl9sZmVfbWl4KShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCBib29sIG1peGVkKTsKKwl1bnNpZ25lZCBpbnQgKCphZGp1c3RfZGFjX3JvdXRpbmcpKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJCSAgIHVuc2lnbmVkIGludCBwbGF5X3JvdXRpbmcpOwogCXZvaWQgKCpncGlvX2NoYW5nZWQpKHN0cnVjdCBveHlnZW4gKmNoaXApOwogCXZvaWQgKCp1YXJ0X2lucHV0KShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKIAl2b2lkICgqYWM5N19zd2l0Y2gpKHN0cnVjdCBveHlnZW4gKmNoaXAsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9taXhlci5jIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5fbWl4ZXIuYwppbmRleCA5YmZmMTRkLi4yNmM3ZThiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9taXhlci5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX21peGVyLmMKQEAgLTE4MCw2ICsxODAsOCBAQAogCQkJICAgICgxIDw8IE9YWUdFTl9QTEFZX0RBQzFfU09VUkNFX1NISUZUKSB8CiAJCQkgICAgKDIgPDwgT1hZR0VOX1BMQVlfREFDMl9TT1VSQ0VfU0hJRlQpIHwKIAkJCSAgICAoMyA8PCBPWFlHRU5fUExBWV9EQUMzX1NPVVJDRV9TSElGVCk7CisJaWYgKGNoaXAtPm1vZGVsLmFkanVzdF9kYWNfcm91dGluZykKKwkJcmVnX3ZhbHVlID0gY2hpcC0+bW9kZWwuYWRqdXN0X2RhY19yb3V0aW5nKGNoaXAsIHJlZ192YWx1ZSk7CiAJb3h5Z2VuX3dyaXRlMTZfbWFza2VkKGNoaXAsIE9YWUdFTl9QTEFZX1JPVVRJTkcsIHJlZ192YWx1ZSwKIAkJCSAgICAgIE9YWUdFTl9QTEFZX0RBQzBfU09VUkNFX01BU0sgfAogCQkJICAgICAgT1hZR0VOX1BMQVlfREFDMV9TT1VSQ0VfTUFTSyB8CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2NzNDN4eC5jIGIvc291bmQvcGNpL294eWdlbi94b25hcl9jczQzeHguYwppbmRleCA5ZjcyZDQyLi4yNTI3MTkxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2NzNDN4eC5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfY3M0M3h4LmMKQEAgLTM5Miw3ICszOTIsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJc25kX2lwcmludGYoYnVmZmVyLCAiXG5DUzQzOTg6IDc/Iik7Ci0JZm9yIChpID0gMjsgaSA8PSA4OyArK2kpCisJZm9yIChpID0gMjsgaSA8IDg7ICsraSkKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiICUwMngiLCBkYXRhLT5jczQzOThfcmVnc1tpXSk7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIAlkdW1wX2NzNDM2MmFfcmVnaXN0ZXJzKGRhdGEsIGJ1ZmZlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2RnLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2RnLmMKaW5kZXggZTFmYTYwMi4uYmM2ZWI1OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi94b25hcl9kZy5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfZGcuYwpAQCAtMjQsNiArMjQsMTEgQEAKICAqCiAgKiAgIFNQSSAwIC0+IENTNDI0NQogICoKKyAqICAgScKyUyAxIC0+IENTNDI0NQorICogICBJwrJTIDIgLT4gQ1M0MzYxIChjZW50ZXIvTEZFKQorICogICBJwrJTIDMgLT4gQ1M0MzYxIChzdXJyb3VuZCkKKyAqICAgScKyUyA0IC0+IENTNDM2MSAoZnJvbnQpCisgKgogICogICBHUElPIDMgPC0gPwogICogICBHUElPIDQgPC0gaGVhZHBob25lIGRldGVjdAogICogICBHUElPIDUgLT4gcm91dGUgaW5wdXQgamFjayB0byBsaW5lLWluICgwKSBvciBtaWMtaW4gKDEpCkBAIC0zNiw2ICs0MSw3IEBACiAgKiAgIGlucHV0IDEgPC0gYXV4CiAgKiAgIGlucHV0IDIgPC0gZnJvbnQgbWljCiAgKiAgIGlucHV0IDQgPC0gbGluZS9taWMKKyAqICAgREFDIG91dCAtPiBoZWFkcGhvbmVzCiAgKiAgIGF1eCBvdXQgLT4gZnJvbnQgcGFuZWwgaGVhZHBob25lcwogICovCiAKQEAgLTIwNyw2ICsyMTMsMzUgQEAKIAljczQyNDVfd3JpdGVfY2FjaGVkKGNoaXAsIENTNDI0NV9BRENfQ1RSTCwgdmFsdWUpOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzaGlmdF9iaXRzKHVuc2lnbmVkIGludCB2YWx1ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgc2hpZnRfZnJvbSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgc2hpZnRfdG8sCisJCQkJICAgICAgdW5zaWduZWQgaW50IG1hc2spCit7CisJaWYgKHNoaWZ0X2Zyb20gPCBzaGlmdF90bykKKwkJcmV0dXJuICh2YWx1ZSA8PCAoc2hpZnRfdG8gLSBzaGlmdF9mcm9tKSkgJiBtYXNrOworCWVsc2UKKwkJcmV0dXJuICh2YWx1ZSA+PiAoc2hpZnRfZnJvbSAtIHNoaWZ0X3RvKSkgJiBtYXNrOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFkanVzdF9kZ19kYWNfcm91dGluZyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCQkgIHVuc2lnbmVkIGludCBwbGF5X3JvdXRpbmcpCit7CisJcmV0dXJuIChwbGF5X3JvdXRpbmcgJiBPWFlHRU5fUExBWV9EQUMwX1NPVVJDRV9NQVNLKSB8CisJICAgICAgIHNoaWZ0X2JpdHMocGxheV9yb3V0aW5nLAorCQkJICBPWFlHRU5fUExBWV9EQUMyX1NPVVJDRV9TSElGVCwKKwkJCSAgT1hZR0VOX1BMQVlfREFDMV9TT1VSQ0VfU0hJRlQsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzFfU09VUkNFX01BU0spIHwKKwkgICAgICAgc2hpZnRfYml0cyhwbGF5X3JvdXRpbmcsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzFfU09VUkNFX1NISUZULAorCQkJICBPWFlHRU5fUExBWV9EQUMyX1NPVVJDRV9TSElGVCwKKwkJCSAgT1hZR0VOX1BMQVlfREFDMl9TT1VSQ0VfTUFTSykgfAorCSAgICAgICBzaGlmdF9iaXRzKHBsYXlfcm91dGluZywKKwkJCSAgT1hZR0VOX1BMQVlfREFDMF9TT1VSQ0VfU0hJRlQsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzNfU09VUkNFX1NISUZULAorCQkJICBPWFlHRU5fUExBWV9EQUMzX1NPVVJDRV9NQVNLKTsKK30KKwogc3RhdGljIGludCBvdXRwdXRfc3dpdGNoX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAogCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQogewpAQCAtNTU3LDYgKzU5Miw3IEBACiAJLnJlc3VtZSA9IGRnX3Jlc3VtZSwKIAkuc2V0X2RhY19wYXJhbXMgPSBzZXRfY3M0MjQ1X2RhY19wYXJhbXMsCiAJLnNldF9hZGNfcGFyYW1zID0gc2V0X2NzNDI0NV9hZGNfcGFyYW1zLAorCS5hZGp1c3RfZGFjX3JvdXRpbmcgPSBhZGp1c3RfZGdfZGFjX3JvdXRpbmcsCiAJLmR1bXBfcmVnaXN0ZXJzID0gZHVtcF9jczQyNDVfcmVnaXN0ZXJzLAogCS5tb2RlbF9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGRnKSwKIAkuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmggYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5oCmluZGV4IGJkMjZlMDkuLjZjZTlhZDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmgKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuaApAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBfX1BEQVVESU9DRl9ICiAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS92eC92eHBfb3BzLmMgYi9zb3VuZC9wY21jaWEvdngvdnhwX29wcy5jCmluZGV4IDk4OWUwNGEuLmZlMzNlMTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS92eC92eHBfb3BzLmMKKysrIGIvc291bmQvcGNtY2lhL3Z4L3Z4cF9vcHMuYwpAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJ2eHBvY2tldC5oIgogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9zbmQtc29jLWFmZWI5MjYwLmMgYi9zb3VuZC9zb2MvYXRtZWwvc25kLXNvYy1hZmViOTI2MC5jCmluZGV4IGRhMjIwOGUuLjVlNGQ0OTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9zbmQtc29jLWFmZWI5MjYwLmMKKysrIGIvc291bmQvc29jL2F0bWVsL3NuZC1zb2MtYWZlYjkyNjAuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJLmNwdV9kYWlfbmFtZSA9ICJhdG1lbC1zc2MtZGFpLjAiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ0bHYzMjBhaWMyMy1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJhdG1lbF9wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gInRsdjMyMGFpYzIzLWNvZGVjLjAtMHgxYSIsCisJLmNvZGVjX25hbWUgPSAidGx2MzIwYWljMjMtY29kZWMuMC0wMDFhIiwKIAkuaW5pdCA9IGFmZWI5MjYwX3RsdjMyMGFpYzIzX2luaXQsCiAJLm9wcyA9ICZhZmViOTI2MF9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNzbTI2MDIuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zc20yNjAyLmMKaW5kZXggZTkwMmIyNC4uYWQyODY2MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNzbTI2MDIuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3NtMjYwMi5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAkuY3B1X2RhaV9uYW1lID0gImJmNXh4LWkycyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gInNzbTI2MDItaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAiYmY1eHgtcGNtLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJzc20yNjAyLWNvZGVjLjAtMHgxYiIsCisJLmNvZGVjX25hbWUgPSAic3NtMjYwMi1jb2RlYy4wLTAwMWIiLAogCS5vcHMgPSAmYmY1eHhfc3NtMjYwMl9vcHMsCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2NxOTN2Yy5jIGIvc291bmQvc29jL2NvZGVjcy9jcTkzdmMuYwppbmRleCA0NmRiZmQwLi4zNDdhNTY3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2NxOTN2Yy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3E5M3ZjLmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogCiBzdGF0aWMgaW50IGNxOTN2Y19wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IGRhdmluY2lfdmMgKmRhdmluY2lfdmMgPSBjb2RlYy0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBkYXZpbmNpX3ZjICpkYXZpbmNpX3ZjID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlkYXZpbmNpX3ZjLT5jcTkzdmMuY29kZWMgPSBjb2RlYzsKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gZGF2aW5jaV92YzsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jIGIvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmMKaW5kZXggMDNkMWU4Ni4uMGJiNDI0YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmMKQEAgLTM2Nyw5ICszNjcsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHU4IGN4MjA0NDJfcmVnOworCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIGN4MjA0NDJfY29kZWNfZGV2ID0gewogCS5wcm9iZSA9IAljeDIwNDQyX2NvZGVjX3Byb2JlLAogCS5yZW1vdmUgPSAJY3gyMDQ0Ml9jb2RlY19yZW1vdmUsCisJLnJlZ19jYWNoZV9kZWZhdWx0ID0gJmN4MjA0NDJfcmVnLAogCS5yZWdfY2FjaGVfc2l6ZSA9IDEsCiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTgpLAogCS5yZWFkID0gY3gyMDQ0Ml9yZWFkX3JlZ19jYWNoZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCmluZGV4IDk4NzQ3NmEuLjAxN2Q5OWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwpAQCAtMTQ4Miw3ICsxNDgyLDcgQEAKIAkJCSAgICBXTTg5MDNfTUlDREVUX0VJTlQgfCBXTTg5MDNfTUlDU0hSVF9FSU5ULAogCQkJICAgIGlycV9tYXNrKTsKIAotCWlmIChkZXQgJiYgc2hydCkgeworCWlmIChkZXQgfHwgc2hydCkgewogCQkvKiBFbmFibGUgbWljIGRldGVjdGlvbiwgdGhpcyBtYXkgbm90IGhhdmUgYmVlbiBzZXQgdGhyb3VnaAogCQkgKiBwbGF0Zm9ybSBkYXRhIChlZywgaWYgdGhlIGRlZmF1bHRzIGFyZSBPSykuICovCiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5oCmluZGV4IGU4NDkwZjMuLmUzZWMyNDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuaApAQCAtMTY1LDcgKzE2NSw3IEBACiAKICNkZWZpbmUgV004OTAzX1ZNSURfUkVTXzUwSyAgICAgICAgICAgICAgICAgICAgICAgICAgMgogI2RlZmluZSBXTTg5MDNfVk1JRF9SRVNfMjUwSyAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFdNODkwM19WTUlEX1JFU181SyAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004OTAzX1ZNSURfUkVTXzVLICAgICAgICAgICAgICAgICAgICAgICAgICAgNgogCiAvKgogICogUjggKDB4MDgpIC0gQW5hbG9ndWUgREFDIDAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCmluZGV4IDI0N2E2YTkuLjRhZmJlM2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwpAQCAtMTA3LDYgKzEwNywxMiBAQAogCiAJaW50IHJldmlzaW9uOwogCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhOworCisJdW5zaWduZWQgaW50IGFpZjFjbGtfZW5hYmxlOjE7CisJdW5zaWduZWQgaW50IGFpZjJjbGtfZW5hYmxlOjE7CisKKwl1bnNpZ25lZCBpbnQgYWlmMWNsa19kaXNhYmxlOjE7CisJdW5zaWduZWQgaW50IGFpZjJjbGtfZGlzYWJsZToxOwogfTsKIAogc3RhdGljIGludCB3bTg5OTRfcmVhZGFibGUodW5zaWduZWQgaW50IHJlZykKQEAgLTEwMDQsNiArMTAxMCwxMTAgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgbGF0ZV9lbmFibGVfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQlpZiAod204OTk0LT5haWYxY2xrX2VuYWJsZSkgeworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfQ0xPQ0tJTkdfMSwKKwkJCQkJICAgIFdNODk5NF9BSUYxQ0xLX0VOQV9NQVNLLAorCQkJCQkgICAgV004OTk0X0FJRjFDTEtfRU5BKTsKKwkJCXdtODk5NC0+YWlmMWNsa19lbmFibGUgPSAwOworCQl9CisJCWlmICh3bTg5OTQtPmFpZjJjbGtfZW5hYmxlKSB7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMl9DTE9DS0lOR18xLAorCQkJCQkgICAgV004OTk0X0FJRjJDTEtfRU5BX01BU0ssCisJCQkJCSAgICBXTTg5OTRfQUlGMkNMS19FTkEpOworCQkJd204OTk0LT5haWYyY2xrX2VuYWJsZSA9IDA7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGF0ZV9kaXNhYmxlX2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQlpZiAod204OTk0LT5haWYxY2xrX2Rpc2FibGUpIHsKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEsCisJCQkJCSAgICBXTTg5OTRfQUlGMUNMS19FTkFfTUFTSywgMCk7CisJCQl3bTg5OTQtPmFpZjFjbGtfZGlzYWJsZSA9IDA7CisJCX0KKwkJaWYgKHdtODk5NC0+YWlmMmNsa19kaXNhYmxlKSB7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMl9DTE9DS0lOR18xLAorCQkJCQkgICAgV004OTk0X0FJRjJDTEtfRU5BX01BU0ssIDApOworCQkJd204OTk0LT5haWYyY2xrX2Rpc2FibGUgPSAwOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFpZjFjbGtfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCSAgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQl3bTg5OTQtPmFpZjFjbGtfZW5hYmxlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCXdtODk5NC0+YWlmMWNsa19kaXNhYmxlID0gMTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWlmMmNsa19ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCXdtODk5NC0+YWlmMmNsa19lbmFibGUgPSAxOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJd204OTk0LT5haWYyY2xrX2Rpc2FibGUgPSAxOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGNfbXV4X2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkgICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCWxhdGVfZW5hYmxlX2V2KHcsIGtjb250cm9sLCBldmVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFjX2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJdW5zaWduZWQgaW50IG1hc2sgPSAxIDw8IHctPnNoaWZ0OworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwKKwkJCSAgICBtYXNrLCBtYXNrKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKmhwX211eF90ZXh0W10gPSB7CiAJIk1peGVyIiwKIAkiREFDIiwKQEAgLTEyNzIsNiArMTM4Miw1OSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjJkYWNyX3NyY19tdXggPQogCVNPQ19EQVBNX0VOVU0oIkFJRjJEQUNSIE11eCIsIGFpZjJkYWNyX3NyY19lbnVtKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9sYXRlY2xrX3JldmRfd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGMUNMSyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgYWlmMWNsa19ldiwKKwlTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCitTTkRfU09DX0RBUE1fU1VQUExZKCJBSUYyQ0xLIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBhaWYyY2xrX2V2LAorCVNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworU05EX1NPQ19EQVBNX1BHQV9FKCJMYXRlIERBQzFMIEVuYWJsZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJbGF0ZV9lbmFibGVfZXYsIFNORF9TT0NfREFQTV9QUkVfUE1VKSwKK1NORF9TT0NfREFQTV9QR0FfRSgiTGF0ZSBEQUMxUiBFbmFibGUgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCWxhdGVfZW5hYmxlX2V2LCBTTkRfU09DX0RBUE1fUFJFX1BNVSksCitTTkRfU09DX0RBUE1fUEdBX0UoIkxhdGUgREFDMkwgRW5hYmxlIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwlsYXRlX2VuYWJsZV9ldiwgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorU05EX1NPQ19EQVBNX1BHQV9FKCJMYXRlIERBQzJSIEVuYWJsZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJbGF0ZV9lbmFibGVfZXYsIFNORF9TT0NfREFQTV9QUkVfUE1VKSwKKworU05EX1NPQ19EQVBNX1BPU1QoIkxhdGUgRGlzYWJsZSBQR0EiLCBsYXRlX2Rpc2FibGVfZXYpCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTk0X2xhdGVjbGtfd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGMUNMSyIsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEsIDAsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGMkNMSyIsIFdNODk5NF9BSUYyX0NMT0NLSU5HXzEsIDAsIDAsIE5VTEwsIDApCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTk0X2RhY19yZXZkX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9EQUNfRSgiREFDMkwiLCBOVUxMLCBTTkRfU09DX05PUE0sIDMsIDAsCisJZGFjX2V2LCBTTkRfU09DX0RBUE1fUFJFX1BNVSksCitTTkRfU09DX0RBUE1fREFDX0UoIkRBQzJSIiwgTlVMTCwgU05EX1NPQ19OT1BNLCAyLCAwLAorCWRhY19ldiwgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorU05EX1NPQ19EQVBNX0RBQ19FKCJEQUMxTCIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMSwgMCwKKwlkYWNfZXYsIFNORF9TT0NfREFQTV9QUkVfUE1VKSwKK1NORF9TT0NfREFQTV9EQUNfRSgiREFDMVIiLCBOVUxMLCBTTkRfU09DX05PUE0sIDAsIDAsCisJZGFjX2V2LCBTTkRfU09DX0RBUE1fUFJFX1BNVSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTk0X2RhY193aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fREFDKCJEQUMyTCIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDMsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDMVIiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAyLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQzFMIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMSwgMCksCitTTkRfU09DX0RBUE1fREFDKCJEQUMxUiIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDAsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9hZGNfcmV2ZF93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fTVVYX0UoIkFEQ0wgTXV4IiwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMSwgMCwgJmFkY2xfbXV4LAorCQkgICBhZGNfbXV4X2V2LCBTTkRfU09DX0RBUE1fUFJFX1BNVSksCitTTkRfU09DX0RBUE1fTVVYX0UoIkFEQ1IgTXV4IiwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMCwgMCwgJmFkY3JfbXV4LAorCQkgICBhZGNfbXV4X2V2LCBTTkRfU09DX0RBUE1fUFJFX1BNVSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTk0X2FkY193aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fTVVYKCJBRENMIE11eCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDEsIDAsICZhZGNsX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJBRENSIE11eCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDAsIDAsICZhZGNyX211eCksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTk0X2RhcG1fd2lkZ2V0c1tdID0gewogU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDMURBVCIpLAogU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDMkRBVCIpLApAQCAtMTI4NCwxMiArMTQ0Nyw5IEBACiBTTkRfU09DX0RBUE1fU1VQUExZKCJEU1AyQ0xLIiwgV004OTk0X0NMT0NLSU5HXzEsIDIsIDAsIE5VTEwsIDApLAogU05EX1NPQ19EQVBNX1NVUFBMWSgiRFNQSU5UQ0xLIiwgV004OTk0X0NMT0NLSU5HXzEsIDEsIDAsIE5VTEwsIDApLAogCi1TTkRfU09DX0RBUE1fU1VQUExZKCJBSUYxQ0xLIiwgV004OTk0X0FJRjFfQ0xPQ0tJTkdfMSwgMCwgMCwgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fU1VQUExZKCJBSUYyQ0xLIiwgV004OTk0X0FJRjJfQ0xPQ0tJTkdfMSwgMCwgMCwgTlVMTCwgMCksCi0KLVNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMUwiLCAiQUlGMSBDYXB0dXJlIiwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMUwiLCBOVUxMLAogCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDksIDApLAotU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMxUiIsICJBSUYxIENhcHR1cmUiLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMxUiIsIE5VTEwsCiAJCSAgICAgMCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgOCwgMCksCiBTTkRfU09DX0RBUE1fQUlGX0lOX0UoIkFJRjFEQUMxTCIsIE5VTEwsIDAsCiAJCSAgICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDksIDAsIHdtODk1OF9haWZfZXYsCkBAIC0xMjk4LDkgKzE0NTgsOSBAQAogCQkgICAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCA4LCAwLCB3bTg5NThfYWlmX2V2LAogCQkgICAgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAogCi1TTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzJMIiwgIkFJRjEgQ2FwdHVyZSIsCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzJMIiwgTlVMTCwKIAkJICAgICAwLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAxMSwgMCksCi1TTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzJSIiwgIkFJRjEgQ2FwdHVyZSIsCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzJSIiwgTlVMTCwKIAkJICAgICAwLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAxMCwgMCksCiBTTkRfU09DX0RBUE1fQUlGX0lOX0UoIkFJRjFEQUMyTCIsIE5VTEwsIDAsCiAJCSAgICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDExLCAwLCB3bTg5NThfYWlmX2V2LApAQCAtMTM0NSw2ICsxNTA1LDcgQEAKIAogU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMURBQ0RBVCIsICJBSUYxIFBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKIFNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJEQUNEQVQiLCAiQUlGMiBQbGF5YmFjayIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQ0RBVCIsICJBSUYxIENhcHR1cmUiLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAogU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjJBRENEQVQiLCAiQUlGMiBDYXB0dXJlIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKIAogU05EX1NPQ19EQVBNX01VWCgiQUlGMURBQyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWYxZGFjX211eCksCkBAIC0xMzY4LDE0ICsxNTI5LDYgQEAKIFNORF9TT0NfREFQTV9BREMoIkFEQ0wiLCBOVUxMLCBTTkRfU09DX05PUE0sIDEsIDApLAogU05EX1NPQ19EQVBNX0FEQygiQURDUiIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMCwgMCksCiAKLVNORF9TT0NfREFQTV9NVVgoIkFEQ0wgTXV4IiwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMSwgMCwgJmFkY2xfbXV4KSwKLVNORF9TT0NfREFQTV9NVVgoIkFEQ1IgTXV4IiwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMCwgMCwgJmFkY3JfbXV4KSwKLQotU05EX1NPQ19EQVBNX0RBQygiREFDMkwiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAzLCAwKSwKLVNORF9TT0NfREFQTV9EQUMoIkRBQzJSIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMiwgMCksCi1TTkRfU09DX0RBUE1fREFDKCJEQUMxTCIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDEsIDApLAotU05EX1NPQ19EQVBNX0RBQygiREFDMVIiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAwLCAwKSwKLQogU05EX1NPQ19EQVBNX01VWCgiTGVmdCBIZWFkcGhvbmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmaHBsX211eCksCiBTTkRfU09DX0RBUE1fTVVYKCJSaWdodCBIZWFkcGhvbmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmaHByX211eCksCiAKQEAgLTE1MTUsMTQgKzE2NjgsMTIgQEAKIAl7ICJBSUYyQURDIE11eCIsICJBSUYzREFDREFUIiwgIkFJRjNBRENEQVQiIH0sCiAKIAkvKiBEQUMxIGlucHV0cyAqLwotCXsgIkRBQzFMIiwgTlVMTCwgIkRBQzFMIE1peGVyIiB9LAogCXsgIkRBQzFMIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNMIiB9LAogCXsgIkRBQzFMIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJMIiB9LAogCXsgIkRBQzFMIE1peGVyIiwgIkFJRjEuMSBTd2l0Y2giLCAiQUlGMURBQzFMIiB9LAogCXsgIkRBQzFMIE1peGVyIiwgIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgIkxlZnQgU2lkZXRvbmUiIH0sCiAJeyAiREFDMUwgTWl4ZXIiLCAiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgIlJpZ2h0IFNpZGV0b25lIiB9LAogCi0JeyAiREFDMVIiLCBOVUxMLCAiREFDMVIgTWl4ZXIiIH0sCiAJeyAiREFDMVIgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ1IiIH0sCiAJeyAiREFDMVIgTWl4ZXIiLCAiQUlGMS4yIFN3aXRjaCIsICJBSUYxREFDMlIiIH0sCiAJeyAiREFDMVIgTWl4ZXIiLCAiQUlGMS4xIFN3aXRjaCIsICJBSUYxREFDMVIiIH0sCkBAIC0xNTMxLDcgKzE2ODIsNiBAQAogCiAJLyogREFDMi9BSUYyIG91dHB1dHMgICovCiAJeyAiQUlGMkFEQ0wiLCBOVUxMLCAiQUlGMkRBQzJMIE1peGVyIiB9LAotCXsgIkRBQzJMIiwgTlVMTCwgIkFJRjJEQUMyTCBNaXhlciIgfSwKIAl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ0wiIH0sCiAJeyAiQUlGMkRBQzJMIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJMIiB9LAogCXsgIkFJRjJEQUMyTCBNaXhlciIsICJBSUYxLjEgU3dpdGNoIiwgIkFJRjFEQUMxTCIgfSwKQEAgLTE1MzksMTMgKzE2ODksMTcgQEAKIAl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgIlJpZ2h0IFNpZGV0b25lIiB9LAogCiAJeyAiQUlGMkFEQ1IiLCBOVUxMLCAiQUlGMkRBQzJSIE1peGVyIiB9LAotCXsgIkRBQzJSIiwgTlVMTCwgIkFJRjJEQUMyUiBNaXhlciIgfSwKIAl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ1IiIH0sCiAJeyAiQUlGMkRBQzJSIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJSIiB9LAogCXsgIkFJRjJEQUMyUiBNaXhlciIsICJBSUYxLjEgU3dpdGNoIiwgIkFJRjFEQUMxUiIgfSwKIAl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCAiTGVmdCBTaWRldG9uZSIgfSwKIAl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgIlJpZ2h0IFNpZGV0b25lIiB9LAogCisJeyAiQUlGMUFEQ0RBVCIsIE5VTEwsICJBSUYxQURDMUwiIH0sCisJeyAiQUlGMUFEQ0RBVCIsIE5VTEwsICJBSUYxQURDMVIiIH0sCisJeyAiQUlGMUFEQ0RBVCIsIE5VTEwsICJBSUYxQURDMkwiIH0sCisJeyAiQUlGMUFEQ0RBVCIsIE5VTEwsICJBSUYxQURDMlIiIH0sCisKIAl7ICJBSUYyQURDREFUIiwgTlVMTCwgIkFJRjJBREMgTXV4IiB9LAogCiAJLyogQUlGMyBvdXRwdXQgKi8KQEAgLTE1NzgsNiArMTczMiwzMSBAQAogCXsgIlJpZ2h0IEhlYWRwaG9uZSBNdXgiLCAiREFDIiwgIkRBQzFSIiB9LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTk0X2xhdGVjbGtfcmV2ZF9pbnRlcmNvbltdID0geworCXsgIkRBQzFMIiwgTlVMTCwgIkxhdGUgREFDMUwgRW5hYmxlIFBHQSIgfSwKKwl7ICJMYXRlIERBQzFMIEVuYWJsZSBQR0EiLCBOVUxMLCAiREFDMUwgTWl4ZXIiIH0sCisJeyAiREFDMVIiLCBOVUxMLCAiTGF0ZSBEQUMxUiBFbmFibGUgUEdBIiB9LAorCXsgIkxhdGUgREFDMVIgRW5hYmxlIFBHQSIsIE5VTEwsICJEQUMxUiBNaXhlciIgfSwKKwl7ICJEQUMyTCIsIE5VTEwsICJMYXRlIERBQzJMIEVuYWJsZSBQR0EiIH0sCisJeyAiTGF0ZSBEQUMyTCBFbmFibGUgUEdBIiwgTlVMTCwgIkFJRjJEQUMyTCBNaXhlciIgfSwKKwl7ICJEQUMyUiIsIE5VTEwsICJMYXRlIERBQzJSIEVuYWJsZSBQR0EiIH0sCisJeyAiTGF0ZSBEQUMyUiBFbmFibGUgUEdBIiwgTlVMTCwgIkFJRjJEQUMyUiBNaXhlciIgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTk0X2xhdGVjbGtfaW50ZXJjb25bXSA9IHsKKwl7ICJEQUMxTCIsIE5VTEwsICJEQUMxTCBNaXhlciIgfSwKKwl7ICJEQUMxUiIsIE5VTEwsICJEQUMxUiBNaXhlciIgfSwKKwl7ICJEQUMyTCIsIE5VTEwsICJBSUYyREFDMkwgTWl4ZXIiIH0sCisJeyAiREFDMlIiLCBOVUxMLCAiQUlGMkRBQzJSIE1peGVyIiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTk0X3JldmRfaW50ZXJjb25bXSA9IHsKKwl7ICJBSUYxREFDREFUIiwgTlVMTCwgIkFJRjJEQUNEQVQiIH0sCisJeyAiQUlGMkRBQ0RBVCIsIE5VTEwsICJBSUYxREFDREFUIiB9LAorCXsgIkFJRjFBRENEQVQiLCBOVUxMLCAiQUlGMkFEQ0RBVCIgfSwKKwl7ICJBSUYyQURDREFUIiwgTlVMTCwgIkFJRjFBRENEQVQiIH0sCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB3bTg5OTRfaW50ZXJjb25bXSA9IHsKIAl7ICJBSUYyREFDTCIsIE5VTEwsICJBSUYyREFDIE11eCIgfSwKIAl7ICJBSUYyREFDUiIsIE5VTEwsICJBSUYyREFDIE11eCIgfSwKQEAgLTIzODYsNyArMjU2NSw3IEBACiAJZWxzZQogCQl2YWwgPSAwOwogCi0JcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywgbWFzaywgcmVnKTsKKwlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLCBtYXNrLCB2YWwpOwogfQogCiAjZGVmaW5lIFdNODk5NF9SQVRFUyBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCkBAIC0yNTAxLDYgKzI2ODAsMjIgQEAKIHsKIAlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCWludCBpLCByZXQ7CisJdW5zaWduZWQgaW50IHZhbCwgbWFzazsKKworCWlmICh3bTg5OTQtPnJldmlzaW9uIDwgNCkgeworCQkvKiBmb3JjZSBhIEhXIHJlYWQgKi8KKwkJdmFsID0gd204OTk0X3JlZ19yZWFkKGNvZGVjLT5jb250cm9sX2RhdGEsCisJCQkJICAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSk7CisKKwkJLyogbW9kaWZ5IHRoZSBjYWNoZSBvbmx5ICovCisJCWNvZGVjLT5jYWNoZV9vbmx5ID0gMTsKKwkJbWFzayA9ICBXTTg5OTRfREFDMVJfRU5BIHwgV004OTk0X0RBQzFMX0VOQSB8CisJCQlXTTg5OTRfREFDMlJfRU5BIHwgV004OTk0X0RBQzJMX0VOQTsKKwkJdmFsICY9IG1hc2s7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsCisJCQkJICAgIG1hc2ssIHZhbCk7CisJCWNvZGVjLT5jYWNoZV9vbmx5ID0gMDsKKwl9CiAKIAkvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgKi8KIAlyZXQgPSBzbmRfc29jX2NhY2hlX3N5bmMoY29kZWMpOwpAQCAtMjgzNCwxMSArMzAyOSwxMCBAQAogCQlyZXBvcnQgfD0gU05EX0pBQ0tfQlROXzU7CiAKIGRvbmU6Ci0Jc25kX3NvY19qYWNrX3JlcG9ydCh3bTg5OTQtPm1pY2RldFswXS5qYWNrLAorCXNuZF9zb2NfamFja19yZXBvcnQod204OTk0LT5taWNkZXRbMF0uamFjaywgcmVwb3J0LAogCQkJICAgIFNORF9KQUNLX0JUTl8wIHwgU05EX0pBQ0tfQlROXzEgfCBTTkRfSkFDS19CVE5fMiB8CiAJCQkgICAgU05EX0pBQ0tfQlROXzMgfCBTTkRfSkFDS19CVE5fNCB8IFNORF9KQUNLX0JUTl81IHwKLQkJCSAgICBTTkRfSkFDS19NSUNST1BIT05FIHwgU05EX0pBQ0tfVklERU9PVVQsCi0JCQkgICAgcmVwb3J0KTsKKwkJCSAgICBTTkRfSkFDS19NSUNST1BIT05FIHwgU05EX0pBQ0tfVklERU9PVVQpOwogfQogCiAvKioKQEAgLTMxMTIsNiArMzMwNiwyMSBAQAogCWNhc2UgV004OTk0OgogCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk5NF9zcGVjaWZpY19kYXBtX3dpZGdldHMsCiAJCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfc3BlY2lmaWNfZGFwbV93aWRnZXRzKSk7CisJCWlmICh3bTg5OTQtPnJldmlzaW9uIDwgNCkgeworCQkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5OTRfbGF0ZWNsa19yZXZkX3dpZGdldHMsCisJCQkJCQkgIEFSUkFZX1NJWkUod204OTk0X2xhdGVjbGtfcmV2ZF93aWRnZXRzKSk7CisJCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk5NF9hZGNfcmV2ZF93aWRnZXRzLAorCQkJCQkJICBBUlJBWV9TSVpFKHdtODk5NF9hZGNfcmV2ZF93aWRnZXRzKSk7CisJCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk5NF9kYWNfcmV2ZF93aWRnZXRzLAorCQkJCQkJICBBUlJBWV9TSVpFKHdtODk5NF9kYWNfcmV2ZF93aWRnZXRzKSk7CisJCX0gZWxzZSB7CisJCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk5NF9sYXRlY2xrX3dpZGdldHMsCisJCQkJCQkgIEFSUkFZX1NJWkUod204OTk0X2xhdGVjbGtfd2lkZ2V0cykpOworCQkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5OTRfYWRjX3dpZGdldHMsCisJCQkJCQkgIEFSUkFZX1NJWkUod204OTk0X2FkY193aWRnZXRzKSk7CisJCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk5NF9kYWNfd2lkZ2V0cywKKwkJCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfZGFjX3dpZGdldHMpKTsKKwkJfQogCQlicmVhazsKIAljYXNlIFdNODk1ODoKIAkJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk1OF9zbmRfY29udHJvbHMsCkBAIC0zMTI5LDYgKzMzMzgsMTYgQEAKIAljYXNlIFdNODk5NDoKIAkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTk0X2ludGVyY29uLAogCQkJCQlBUlJBWV9TSVpFKHdtODk5NF9pbnRlcmNvbikpOworCisJCWlmICh3bTg5OTQtPnJldmlzaW9uIDwgNCkgeworCQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTk0X3JldmRfaW50ZXJjb24sCisJCQkJCQlBUlJBWV9TSVpFKHdtODk5NF9yZXZkX2ludGVyY29uKSk7CisJCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCB3bTg5OTRfbGF0ZWNsa19yZXZkX2ludGVyY29uLAorCQkJCQkJQVJSQVlfU0laRSh3bTg5OTRfbGF0ZWNsa19yZXZkX2ludGVyY29uKSk7CisJCX0gZWxzZSB7CisJCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCB3bTg5OTRfbGF0ZWNsa19pbnRlcmNvbiwKKwkJCQkJCUFSUkFZX1NJWkUod204OTk0X2xhdGVjbGtfaW50ZXJjb24pKTsKKwkJfQogCQlicmVhazsKIAljYXNlIFdNODk1ODoKIAkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTU4X2ludGVyY29uLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTUuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMKaW5kZXggNjA0NWNiZC4uNjA4Yzg0YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTUuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NS5jCkBAIC0xMjIzLDcgKzEyMjMsNyBAQAogCWVsc2UKIAkJdmFsID0gMDsKIAotCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIHJlZyk7CisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywgbWFzaywgdmFsKTsKIH0KIAogLyogVGhlIHNpemUgaW4gYml0cyBvZiB0aGUgRkxMIGRpdmlkZSBtdWx0aXBsaWVkIGJ5IDEwCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTkwODEuYwppbmRleCA0MzgyNWIyLi5jY2U3MDRjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC0xMzQxLDYgKzEzNDIsMTAgQEAKIAl3bTkwODEtPmNvbnRyb2xfdHlwZSA9IFNORF9TT0NfSTJDOwogCXdtOTA4MS0+Y29udHJvbF9kYXRhID0gaTJjOwogCisJaWYgKGRldl9nZXRfcGxhdGRhdGEoJmkyYy0+ZGV2KSkKKwkJbWVtY3B5KCZ3bTkwODEtPnJldHVuZSwgZGV2X2dldF9wbGF0ZGF0YSgmaTJjLT5kZXYpLAorCQkgICAgICAgc2l6ZW9mKHdtOTA4MS0+cmV0dW5lKSk7CisKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZpMmMtPmRldiwKIAkJCSZzb2NfY29kZWNfZGV2X3dtOTA4MSwgJndtOTA4MV9kYWksIDEpOwogCWlmIChyZXQgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwppbmRleCBjNDY2OTgyLi41MTY4OTI3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwpAQCAtOTEsNiArOTEsNyBAQAogc3RhdGljIHZvaWQgY2FsaWJyYXRlX2RjX3NlcnZvKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgd21faHVic19kYXRhICpodWJzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJczggb2Zmc2V0OwogCXUxNiByZWcsIHJlZ19sLCByZWdfciwgZGNzX2NmZzsKIAogCS8qIElmIHdlJ3JlIHVzaW5nIGEgZGlnaXRhbCBvbmx5IHBhdGggYW5kIGhhdmUgYSBwcmV2aW91c2x5CkBAIC0xNDksMTYgKzE1MCwxNCBAQAogCQkJaHVicy0+ZGNzX2NvZGVzKTsKIAogCQkvKiBIUE9VVDFMICovCi0JCWlmIChyZWdfbCArIGh1YnMtPmRjc19jb2RlcyA+IDAgJiYKLQkJICAgIHJlZ19sICsgaHVicy0+ZGNzX2NvZGVzIDwgMHhmZikKLQkJCXJlZ19sICs9IGh1YnMtPmRjc19jb2RlczsKLQkJZGNzX2NmZyA9IHJlZ19sIDw8IFdNODk5M19EQ1NfREFDX1dSX1ZBTF8xX1NISUZUOworCQlvZmZzZXQgPSByZWdfbDsKKwkJb2Zmc2V0ICs9IGh1YnMtPmRjc19jb2RlczsKKwkJZGNzX2NmZyA9ICh1OClvZmZzZXQgPDwgV004OTkzX0RDU19EQUNfV1JfVkFMXzFfU0hJRlQ7CiAKIAkJLyogSFBPVVQxUiAqLwotCQlpZiAocmVnX3IgKyBodWJzLT5kY3NfY29kZXMgPiAwICYmCi0JCSAgICByZWdfciArIGh1YnMtPmRjc19jb2RlcyA8IDB4ZmYpCi0JCQlyZWdfciArPSBodWJzLT5kY3NfY29kZXM7Ci0JCWRjc19jZmcgfD0gcmVnX3I7CisJCW9mZnNldCA9IHJlZ19yOworCQlvZmZzZXQgKz0gaHVicy0+ZGNzX2NvZGVzOworCQlkY3NfY2ZnIHw9ICh1OClvZmZzZXQ7CiAKIAkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRENTIHJlc3VsdDogJXhcbiIsIGRjc19jZmcpOwogCkBAIC02NzUsNiArNjc0LDkgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGFuYWxvZ3VlX3JvdXRlc1tdID0geworCXsgIk1JQ0JJQVMxIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiTUlDQklBUzIiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwogCXsgIklOMUwgUEdBIiwgIklOMUxQIFN3aXRjaCIsICJJTjFMUCIgfSwKIAl7ICJJTjFMIFBHQSIsICJJTjFMTiBTd2l0Y2giLCAiSU4xTE4iIH0sCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCmluZGV4IDBjMmQ2YmEuLmZlNzk4NDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYwpAQCAtMjE4LDEyICsyMTgsMjQgQEAKIAkJLm9wcyA9ICZldm1fc3BkaWZfb3BzLAogCX0sCiB9Owotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGRhOHh4X2V2bV9kYWkgPSB7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBkYTgzMF9ldm1fZGFpID0geworCS5uYW1lID0gIlRMVjMyMEFJQzNYIiwKKwkuc3RyZWFtX25hbWUgPSAiQUlDM1giLAorCS5jcHVfZGFpX25hbWUgPSAiZGF2aW5jaS1tY2FzcC4xIiwKKwkuY29kZWNfZGFpX25hbWUgPSAidGx2MzIwYWljM3gtaGlmaSIsCisJLmNvZGVjX25hbWUgPSAidGx2MzIwYWljM3gtY29kZWMuMS0wMDE4IiwKKwkucGxhdGZvcm1fbmFtZSA9ICJkYXZpbmNpLXBjbS1hdWRpbyIsCisJLmluaXQgPSBldm1fYWljM3hfaW5pdCwKKwkub3BzID0gJmV2bV9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZGE4NTBfZXZtX2RhaSA9IHsKIAkubmFtZSA9ICJUTFYzMjBBSUMzWCIsCiAJLnN0cmVhbV9uYW1lID0gIkFJQzNYIiwKIAkuY3B1X2RhaV9uYW1lPSAiZGF2aW5jaS1tY2FzcC4wIiwKIAkuY29kZWNfZGFpX25hbWUgPSAidGx2MzIwYWljM3gtaGlmaSIsCi0JLmNvZGVjX25hbWUgPSAidGx2MzIwYWljM3gtY29kZWMuMC0wMDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ0bHYzMjBhaWMzeC1jb2RlYy4xLTAwMTgiLAogCS5wbGF0Zm9ybV9uYW1lID0gImRhdmluY2ktcGNtLWF1ZGlvIiwKIAkuaW5pdCA9IGV2bV9haWMzeF9pbml0LAogCS5vcHMgPSAmZXZtX29wcywKQEAgLTI1OSwxMyArMjcxLDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGRhODMwX3NuZF9zb2NfY2FyZCA9IHsKIAkubmFtZSA9ICJEQTgzMC9PTUFQLUwxMzcgRVZNIiwKLQkuZGFpX2xpbmsgPSAmZGE4eHhfZXZtX2RhaSwKKwkuZGFpX2xpbmsgPSAmZGE4MzBfZXZtX2RhaSwKIAkubnVtX2xpbmtzID0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGRhODUwX3NuZF9zb2NfY2FyZCA9IHsKIAkubmFtZSA9ICJEQTg1MC9PTUFQLUwxMzggRVZNIiwKLQkuZGFpX2xpbmsgPSAmZGE4eHhfZXZtX2RhaSwKKwkuZGFpX2xpbmsgPSAmZGE4NTBfZXZtX2RhaSwKIAkubnVtX2xpbmtzID0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jIGIvc291bmQvc29jL2lteC9ldWtyZWEtdGx2MzIwLmMKaW5kZXggZTIwYzllMS4uMWU5YmNjYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2lteC9ldWtyZWEtdGx2MzIwLmMKKysrIGIvc291bmQvc29jL2lteC9ldWtyZWEtdGx2MzIwLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAkubmFtZQkJPSAidGx2MzIwYWljMjMiLAogCS5zdHJlYW1fbmFtZQk9ICJUTFYzMjBBSUMyMyIsCiAJLmNvZGVjX2RhaV9uYW1lCT0gInRsdjMyMGFpYzIzLWhpZmkiLAotCS5wbGF0Zm9ybV9uYW1lCT0gImlteC1wY20tYXVkaW8uMCIsCisJLnBsYXRmb3JtX25hbWUJPSAiaW14LWZpcS1wY20tYXVkaW8uMCIsCiAJLmNvZGVjX25hbWUJPSAidGx2MzIwYWljMjMtY29kZWMuMC0wMDFhIiwKIAkuY3B1X2RhaV9uYW1lCT0gImlteC1zc2kuMCIsCiAJLm9wcwkJPSAmZXVrcmVhX3RsdjMyMF9zbmRfb3BzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMgYi9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYwppbmRleCAyMTAxYmRjLi4zMTY3YmU2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYworKysgYi9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYwpAQCAtNTA3LDggKzUwNyw2IEBACiAJLyogU2V0IHVwIGRpZ2l0YWwgbXV0ZSBpZiBub3QgcHJvdmlkZWQgYnkgdGhlIGNvZGVjICovCiAJaWYgKCFjb2RlY19kYWktPmRyaXZlci0+b3BzKSB7CiAJCWNvZGVjX2RhaS0+ZHJpdmVyLT5vcHMgPSAmYW1zX2RlbHRhX2RhaV9vcHM7Ci0JfSBlbHNlIGlmICghY29kZWNfZGFpLT5kcml2ZXItPm9wcy0+ZGlnaXRhbF9tdXRlKSB7Ci0JCWNvZGVjX2RhaS0+ZHJpdmVyLT5vcHMtPmRpZ2l0YWxfbXV0ZSA9IGFtc19kZWx0YV9kaWdpdGFsX211dGU7CiAJfSBlbHNlIHsKIAkJYW1zX2RlbHRhX29wcy5zdGFydHVwID0gYW1zX2RlbHRhX3N0YXJ0dXA7CiAJCWFtc19kZWx0YV9vcHMuc2h1dGRvd24gPSBhbXNfZGVsdGFfc2h1dGRvd247CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2NvcmdpLmMgYi9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKaW5kZXggZmM1OTJmMC4uNzg0Y2ZmNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9jb3JnaS5jCisrKyBiL3NvdW5kL3NvYy9weGEvY29yZ2kuYwpAQCAtMzA3LDEwICszMDcsMTAgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBjb3JnaV9kYWkgPSB7CiAJLm5hbWUgPSAiV004NzMxIiwKIAkuc3RyZWFtX25hbWUgPSAiV004NzMxIiwKLQkuY3B1X2RhaV9uYW1lID0gInB4YS1pczItZGFpIiwKKwkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1pMnMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg3MzEtaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAid204NzMxLWNvZGVjLTAuMDAxYSIsCisJLmNvZGVjX25hbWUgPSAid204NzMxLWNvZGVjLTAuMDAxYiIsCiAJLmluaXQgPSBjb3JnaV93bTg3MzFfaW5pdCwKIAkub3BzID0gJmNvcmdpX29wcywKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U3NDBfd205NzA1LmMgYi9zb3VuZC9zb2MvcHhhL2U3NDBfd205NzA1LmMKaW5kZXggMjgzMzNlNy4uZGM2NTY1MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jCisrKyBiL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJewogCQkubmFtZSA9ICJBQzk3IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMCIsCisJCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTciLAogCQkuY29kZWNfZGFpX25hbWUgPSAid205NzA1LWhpZmkiLAogCQkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKIAkJLmNvZGVjX25hbWUgPSAid205NzA1LWNvZGVjIiwKQEAgLTEyNiw3ICsxMjYsNyBAQAogCXsKIAkJLm5hbWUgPSAiQUM5NyBBdXgiLAogCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAotCQkuY3B1X2RhaV9uYW1lID0gInB4YS1hYzk3LjEiLAorCQkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3LWF1eCIsCiAJCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MDUtYXV4IiwKIAkJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJCS5jb2RlY19uYW1lID0gIndtOTcwNS1jb2RlYyIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMgYi9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMKaW5kZXggMDFiZjMxNi4uNTE4OTdmYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9lNzUwX3dtOTcwNS5jCisrKyBiL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYwpAQCAtOTksNyArOTksNyBAQAogCXsKIAkJLm5hbWUgPSAiQUM5NyIsCiAJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAotCQkuY3B1X2RhaV9uYW1lID0gInB4YS1hYzk3LjAiLAorCQkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3IiwKIAkJLmNvZGVjX2RhaV9uYW1lID0gIndtOTcwNS1oaWZpIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJCS5jb2RlY19uYW1lID0gIndtOTcwNS1jb2RlYyIsCkBAIC0xMDksNyArMTA5LDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4xIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCQkuY29kZWNfZGFpX25hbWUgPSJ3bTk3MDUtYXV4IiwKIAkJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJCS5jb2RlY19uYW1lID0gIndtOTcwNS1jb2RlYyIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMgYi9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMKaW5kZXggYzZhMzdjNmUuLjA1M2VkMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvZTgwMF93bTk3MTIuYworKysgYi9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTciLAogCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4wIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5NyIsCiAJCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MTItaGlmaSIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCQkuY29kZWNfbmFtZSA9ICJ3bTk3MTItY29kZWMiLApAQCAtOTgsNyArOTgsNyBAQAogCXsKIAkJLm5hbWUgPSAiQUM5NyBBdXgiLAogCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAotCQkuY3B1X2RhaV9uYW1lID0gInB4YS1hYzk3LjEiLAorCQkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3LWF1eCIsCiAJCS5jb2RlY19kYWlfbmFtZSA9IndtOTcxMi1hdXgiLAogCQkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKIAkJLmNvZGVjX25hbWUgPSAid205NzEyLWNvZGVjIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jIGIvc291bmQvc29jL3B4YS9lbS14MjcwLmMKaW5kZXggZmMyMmU2ZS4uYjEzYTQyNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9lbS14MjcwLmMKKysrIGIvc291bmQvc29jL3B4YS9lbS14MjcwLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTciLAogCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4wIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5NyIsCiAJCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MTItaGlmaSIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCQkuY29kZWNfbmFtZSA9ICJ3bTk3MTItY29kZWMiLApAQCAtNDUsNyArNDUsNyBAQAogCXsKIAkJLm5hbWUgPSAiQUM5NyBBdXgiLAogCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAotCQkuY3B1X2RhaV9uYW1lID0gInB4YS1hYzk3LjEiLAorCQkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3LWF1eCIsCiAJCS5jb2RlY19kYWlfbmFtZSA9IndtOTcxMi1hdXgiLAogCQkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKIAkJLmNvZGVjX25hbWUgPSAid205NzEyLWNvZGVjIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYyBiL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYwppbmRleCAwZDcwZmM4Li4zOGNhNjc1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMKKysrIGIvc291bmQvc29jL3B4YS9taW9hNzAxX3dtOTcxMy5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTciLAogCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4wIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5NyIsCiAJCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MTMtaGlmaSIsCiAJCS5jb2RlY19uYW1lID0gIndtOTcxMy1jb2RlYyIsCiAJCS5pbml0ID0gbWlvYTcwMV93bTk3MTNfaW5pdCwKQEAgLTE3Miw3ICsxNzIsNyBAQAogCXsKIAkJLm5hbWUgPSAiQUM5NyBBdXgiLAogCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAotCQkuY3B1X2RhaV9uYW1lID0gInB4YS1hYzk3LjEiLAorCQkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3LWF1eCIsCiAJCS5jb2RlY19kYWlfbmFtZSA9IndtOTcxMy1hdXgiLAogCQkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtY29kZWMiLAogCQkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jIGIvc291bmQvc29jL3B4YS9wYWxtMjd4LmMKaW5kZXggODU3ZGI5Ni4uNTA0ZTQwMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9wYWxtMjd4LmMKKysrIGIvc291bmQvc29jL3B4YS9wYWxtMjd4LmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogewogCS5uYW1lID0gIkFDOTcgSGlGaSIsCiAJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4wIiwKKwkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3IiwKIAkuY29kZWNfZGFpX25hbWUgPSAgIndtOTcxMi1oaWZpIiwKIAkuY29kZWNfbmFtZSA9ICJ3bTk3MTItY29kZWMiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLApAQCAtMTQxLDcgKzE0MSw3IEBACiB7CiAJLm5hbWUgPSAiQUM5NyBBdXgiLAogCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEF1eCIsCi0JLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4xIiwKKwkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3LWF1eCIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtOTcxMi1hdXgiLAogCS5jb2RlY19uYW1lID0gIndtOTcxMi1jb2RlYyIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwppbmRleCA2Mjk4ZWUxLi5hN2Q0OTk5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCisrKyBiL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWkycyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODczMS1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3MzEtY29kZWMuMC0wMDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3MzEtY29kZWMuMC0wMDFiIiwKIAkuaW5pdCA9IHBvb2RsZV93bTg3MzFfaW5pdCwKIAkub3BzID0gJnBvb2RsZV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9zcGl0ei5jIGIvc291bmQvc29jL3B4YS9zcGl0ei5jCmluZGV4IGMyYWNiNjkuLjhlMTU3MTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvc3BpdHouYworKysgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKQEAgLTMxNSwxMCArMzE1LDEwIEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc3BpdHpfZGFpID0gewogCS5uYW1lID0gIndtODc1MCIsCiAJLnN0cmVhbV9uYW1lID0gIldNODc1MCIsCi0JLmNwdV9kYWlfbmFtZSA9ICJweGEtaXMyIiwKKwkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1pMnMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg3NTAtaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAid204NzUwLWNvZGVjLjAtMDAxYSIsCisJLmNvZGVjX25hbWUgPSAid204NzUwLWNvZGVjLjAtMDAxYiIsCiAJLmluaXQgPSBzcGl0el93bTg3NTBfaW5pdCwKIAkub3BzID0gJnNwaXR6X29wcywKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Rvc2EuYyBiL3NvdW5kL3NvYy9weGEvdG9zYS5jCmluZGV4IGY3NTgwNGUuLjRiNmU1ZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvdG9zYS5jCisrKyBiL3NvdW5kL3NvYy9weGEvdG9zYS5jCkBAIC0yMTksNyArMjE5LDcgQEAKIHsKIAkubmFtZSA9ICJBQzk3IiwKIAkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKLQkuY3B1X2RhaV9uYW1lID0gInB4YS1hYzk3LjAiLAorCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTciLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MTItaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJLmNvZGVjX25hbWUgPSAid205NzEyLWNvZGVjIiwKQEAgLTIyOSw3ICsyMjksNyBAQAogewogCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMSIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MTItYXV4IiwKIAkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKIAkuY29kZWNfbmFtZSA9ICJ3bTk3MTItY29kZWMiLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS96eWxvbml0ZS5jIGIvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCmluZGV4IGIyMjJhN2QuLjI1YmJhMTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYworKysgYi9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAogCS5jb2RlY19uYW1lID0gIndtOTcxMy1jb2RlYyIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCi0JLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4wIiwKKwkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3IiwKIAkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtaGlmaSIsCiAJLmluaXQgPSB6eWxvbml0ZV93bTk3MTNfaW5pdCwKIH0sCkBAIC0xNzUsNyArMTc1LDcgQEAKIAkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAogCS5jb2RlY19uYW1lID0gIndtOTcxMy1jb2RlYyIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCi0JLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4xIiwKKwkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3LWF1eCIsCiAJLmNvZGVjX25hbWUgPSAid205NzEzLWF1eCIsCiB9LAogewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M19ndGEwMl93bTg3NTMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfZ3RhMDJfd204NzUzLmMKaW5kZXggM2VlYzYxMC4uMGQwYWUyYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M19ndGEwMl93bTg3NTMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX2d0YTAyX3dtODc1My5jCkBAIC0zOTcsMTEgKzM5NywxMSBAQAogeyAvKiBIaWZpIFBsYXliYWNrIC0gZm9yIHNpbWlsYXRpb3VzIHVzZSB3aXRoIHZvaWNlIGJlbG93ICovCiAJLm5hbWUgPSAiV004NzUzIiwKIAkuc3RyZWFtX25hbWUgPSAiV004NzUzIEhpRmkiLAotCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1pMnMiLAorCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1paXMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg3NTMtaGlmaSIsCiAJLmluaXQgPSBuZW8xOTczX2d0YTAyX3dtODc1M19pbml0LAogCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODc1My1jb2RlYy4wLTB4MWEiLAorCS5jb2RlY19uYW1lID0gIndtODc1My1jb2RlYy4wLTAwMWEiLAogCS5vcHMgPSAmbmVvMTk3M19ndGEwMl9oaWZpX29wcywKIH0sCiB7IC8qIFZvaWNlIHZpYSBCVCAqLwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJLmNwdV9kYWlfbmFtZSA9ICJibHVldG9vdGgtZGFpIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUzLXZvaWNlIiwKIAkub3BzID0gJm5lbzE5NzNfZ3RhMDJfdm9pY2Vfb3BzLAotCS5jb2RlY19uYW1lID0gIndtODc1My1jb2RlYy4wLTB4MWEiLAorCS5jb2RlY19uYW1lID0gIndtODc1My1jb2RlYy4wLTAwMWEiLAogCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAogfSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jIGIvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYwppbmRleCBjN2EyNDUxLi5kMjA4MTVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfd204NzUzLmMKQEAgLTU1OSw5ICs1NTksOSBAQAogCS5uYW1lID0gIldNODc1MyIsCiAJLnN0cmVhbV9uYW1lID0gIldNODc1MyBIaUZpIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKLQkuY3B1X2RhaV9uYW1lID0gInMzYzI0eHgtaTJzIiwKKwkuY3B1X2RhaV9uYW1lID0gInMzYzI0eHgtaWlzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUzLWhpZmkiLAotCS5jb2RlY19uYW1lID0gIndtODc1My1jb2RlYy4wLTB4MWEiLAorCS5jb2RlY19uYW1lID0gIndtODc1My1jb2RlYy4wLTAwMWEiLAogCS5pbml0ID0gbmVvMTk3M193bTg3NTNfaW5pdCwKIAkub3BzID0gJm5lbzE5NzNfaGlmaV9vcHMsCiB9LApAQCAtNTcxLDcgKzU3MSw3IEBACiAJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCiAJLmNwdV9kYWlfbmFtZSA9ICJibHVldG9vdGgtZGFpIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUzLXZvaWNlIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkub3BzID0gJm5lbzE5NzNfdm9pY2Vfb3BzLAogfSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX2hlcm1lcy5jCmluZGV4IGJiNDI5MmUuLjA4ZmNhYWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX2hlcm1lcy5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX2hlcm1lcy5jCkBAIC05NCw4ICs5NCw4IEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc2ltdGVjX2RhaV9haWMzMyA9IHsKIAkubmFtZQkJPSAidGx2MzIwYWljMzMiLAogCS5zdHJlYW1fbmFtZQk9ICJUTFYzMjBBSUMzMyIsCi0JLmNvZGVjX25hbWUJPSAidGx2MzIwYWljM3gtY29kZWMuMC0weDFhIiwKLQkuY3B1X2RhaV9uYW1lCT0gInMzYzI0eHgtaTJzIiwKKwkuY29kZWNfbmFtZQk9ICJ0bHYzMjBhaWMzeC1jb2RlYy4wLTAwMWEiLAorCS5jcHVfZGFpX25hbWUJPSAiczNjMjR4eC1paXMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ0bHYzMjBhaWMzeC1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZQk9ICJzYW1zdW5nLWF1ZGlvIiwKIAkuaW5pdAkJPSBzaW10ZWNfaGVybWVzX2luaXQsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYwppbmRleCBmYmJhNGUzLi4xMTZlM2U2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLmMKQEAgLTg1LDggKzg1LDggQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBzaW10ZWNfZGFpX2FpYzIzID0gewogCS5uYW1lCQk9ICJ0bHYzMjBhaWMyMyIsCiAJLnN0cmVhbV9uYW1lCT0gIlRMVjMyMEFJQzIzIiwKLQkuY29kZWNfbmFtZQk9ICJ0bHYzMjBhaWMzeC1jb2RlYy4wLTB4MWEiLAotCS5jcHVfZGFpX25hbWUJPSAiczNjMjR4eC1pMnMiLAorCS5jb2RlY19uYW1lCT0gInRsdjMyMGFpYzN4LWNvZGVjLjAtMDAxYSIsCisJLmNwdV9kYWlfbmFtZQk9ICJzM2MyNHh4LWlpcyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gInRsdjMyMGFpYzN4LWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lCT0gInNhbXN1bmctYXVkaW8iLAogCS5pbml0CQk9IHNpbXRlY190bHYzMjBhaWMyM19pbml0LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3VkYTEzNHguYwppbmRleCBjZGM4ZWNiLi4yYzA5ZTkzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3VkYTEzNHguYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3VkYTEzNHguYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJLnN0cmVhbV9uYW1lID0gIlVEQTEzNFgiLAogCS5jb2RlY19uYW1lID0gInVkYTEzNHgtaGlmaSIsCiAJLmNvZGVjX2RhaV9uYW1lID0gInVkYTEzNHgtaGlmaSIsCi0JLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWkycyIsCisJLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWlpcyIsCiAJLm9wcyA9ICZzM2MyNHh4X3VkYTEzNHhfb3BzLAogCS5wbGF0Zm9ybV9uYW1lCT0gInNhbXN1bmctYXVkaW8iLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY29yZS5jIGIvc291bmQvc29jL3NvYy1jb3JlLmMKaW5kZXggYmFjNzI5MS4uYzNmNmYxZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC0xNDQ5LDYgKzE0NDksNyBAQAogCQlydGQgPSAmY2FyZC0+cnRkX2F1eFtudW1dOwogCQluYW1lID0gYXV4X2Rldi0+bmFtZTsKIAl9CisJcnRkLT5jYXJkID0gY2FyZDsKIAogCS8qIG1hY2hpbmUgY29udHJvbHMsIHJvdXRlcyBhbmQgd2lkZ2V0cyBhcmUgbm90IHByZWZpeGVkICovCiAJdGVtcCA9IGNvZGVjLT5uYW1lX3ByZWZpeDsKQEAgLTE0NzEsNyArMTQ3Miw2IEBACiAKIAkvKiByZWdpc3RlciB0aGUgcnRkIGRldmljZSAqLwogCXJ0ZC0+Y29kZWMgPSBjb2RlYzsKLQlydGQtPmNhcmQgPSBjYXJkOwogCXJ0ZC0+ZGV2LnBhcmVudCA9IGNhcmQtPmRldjsKIAlydGQtPmRldi5yZWxlYXNlID0gcnRkX3JlbGVhc2U7CiAJcnRkLT5kZXYuaW5pdF9uYW1lID0gbmFtZTsKQEAgLTE2NjQsOSArMTY2NCw2IEBACiAJZ290byBvdXQ7CiAKIGZvdW5kOgotCWlmICghdHJ5X21vZHVsZV9nZXQoY29kZWMtPmRldi0+ZHJpdmVyLT5vd25lcikpCi0JCXJldHVybiAtRU5PREVWOwotCiAJcmV0ID0gc29jX3Byb2JlX2NvZGVjKGNhcmQsIGNvZGVjKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggNDk5NzMwYS4uMjVlNTQyMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTcxMiw3ICs3MTIsMTUgQEAKIAkJICAgICFwYXRoLT5jb25uZWN0ZWQocGF0aC0+c291cmNlLCBwYXRoLT5zaW5rKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChwYXRoLT5zaW5rICYmIHBhdGgtPnNpbmstPnBvd2VyX2NoZWNrICYmCisJCWlmICghcGF0aC0+c2luaykKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYXRoLT5zaW5rLT5mb3JjZSkgeworCQkJcG93ZXIgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocGF0aC0+c2luay0+cG93ZXJfY2hlY2sgJiYKIAkJICAgIHBhdGgtPnNpbmstPnBvd2VyX2NoZWNrKHBhdGgtPnNpbmspKSB7CiAJCQlwb3dlciA9IDE7CiAJCQlicmVhazsKQEAgLTE2MjcsNiArMTYzNSw3IEBACiBpbnQgc25kX3NvY19kYXBtX25ld193aWRnZXRzKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKKwl1bnNpZ25lZCBpbnQgdmFsOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmZGFwbS0+Y2FyZC0+d2lkZ2V0cywgbGlzdCkKIAl7CkBAIC0xNjc1LDYgKzE2ODQsMTggQEAKIAkJY2FzZSBzbmRfc29jX2RhcG1fcG9zdDoKIAkJCWJyZWFrOwogCQl9CisKKwkJLyogUmVhZCB0aGUgaW5pdGlhbCBwb3dlciBzdGF0ZSBmcm9tIHRoZSBkZXZpY2UgKi8KKwkJaWYgKHctPnJlZyA+PSAwKSB7CisJCQl2YWwgPSBzbmRfc29jX3JlYWQody0+Y29kZWMsIHctPnJlZyk7CisJCQl2YWwgJj0gMSA8PCB3LT5zaGlmdDsKKwkJCWlmICh3LT5pbnZlcnQpCisJCQkJdmFsID0gIXZhbDsKKworCQkJaWYgKHZhbCkKKwkJCQl3LT5wb3dlciA9IDE7CisJCX0KKwogCQl3LT5uZXcgPSAxOwogCX0KIApAQCAtMTc0Miw3ICsxNzYzLDcgQEAKIAlpbnQgbWF4ID0gbWMtPm1heDsKIAl1bnNpZ25lZCBpbnQgbWFzayA9ICgxIDw8IGZscyhtYXgpKSAtIDE7CiAJdW5zaWduZWQgaW50IGludmVydCA9IG1jLT5pbnZlcnQ7Ci0JdW5zaWduZWQgaW50IHZhbCwgdmFsX21hc2s7CisJdW5zaWduZWQgaW50IHZhbDsKIAlpbnQgY29ubmVjdCwgY2hhbmdlOwogCXN0cnVjdCBzbmRfc29jX2RhcG1fdXBkYXRlIHVwZGF0ZTsKIApAQCAtMTc1MCwxMyArMTc3MSwxMyBAQAogCiAJaWYgKGludmVydCkKIAkJdmFsID0gbWF4IC0gdmFsOwotCXZhbF9tYXNrID0gbWFzayA8PCBzaGlmdDsKKwltYXNrID0gbWFzayA8PCBzaGlmdDsKIAl2YWwgPSB2YWwgPDwgc2hpZnQ7CiAKIAltdXRleF9sb2NrKCZ3aWRnZXQtPmNvZGVjLT5tdXRleCk7CiAJd2lkZ2V0LT52YWx1ZSA9IHZhbDsKIAotCWNoYW5nZSA9IHNuZF9zb2NfdGVzdF9iaXRzKHdpZGdldC0+Y29kZWMsIHJlZywgdmFsX21hc2ssIHZhbCk7CisJY2hhbmdlID0gc25kX3NvY190ZXN0X2JpdHMod2lkZ2V0LT5jb2RlYywgcmVnLCBtYXNrLCB2YWwpOwogCWlmIChjaGFuZ2UpIHsKIAkJaWYgKHZhbCkKIAkJCS8qIG5ldyBjb25uZWN0aW9uICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYyBiL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCmluZGV4IDY4Yjk3NDcuLjY2ZWFiYWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCkBAIC03ODUsNyArNzg1LDcgQEAKIAl9CiAKIAlkZXYtPnBjbS0+cHJpdmF0ZV9kYXRhID0gZGV2OwotCXN0cmNweShkZXYtPnBjbS0+bmFtZSwgZGV2LT5wcm9kdWN0X25hbWUpOworCXN0cmxjcHkoZGV2LT5wY20tPm5hbWUsIGRldi0+cHJvZHVjdF9uYW1lLCBzaXplb2YoZGV2LT5wY20tPm5hbWUpKTsKIAogCW1lbXNldChkZXYtPnN1Yl9wbGF5YmFjaywgMCwgc2l6ZW9mKGRldi0+c3ViX3BsYXliYWNrKSk7CiAJbWVtc2V0KGRldi0+c3ViX2NhcHR1cmUsIDAsIHNpemVvZihkZXYtPnN1Yl9jYXB0dXJlKSk7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvbWlkaS5jIGIvc291bmQvdXNiL2NhaWFxL21pZGkuYwppbmRleCAyZjIxOGM3Li5hMWE0NzA4OCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL21pZGkuYworKysgYi9zb3VuZC91c2IvY2FpYXEvbWlkaS5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXN0cmNweShybWlkaS0+bmFtZSwgZGV2aWNlLT5wcm9kdWN0X25hbWUpOworCXN0cmxjcHkocm1pZGktPm5hbWUsIGRldmljZS0+cHJvZHVjdF9uYW1lLCBzaXplb2Yocm1pZGktPm5hbWUpKTsKIAogCXJtaWRpLT5pbmZvX2ZsYWdzID0gU05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDsKIAlybWlkaS0+cHJpdmF0ZV9kYXRhID0gZGV2aWNlOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhcmQuYyBiL3NvdW5kL3VzYi9jYXJkLmMKaW5kZXggODAwZjdjYi4uYzBmODI3MGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYXJkLmMKKysrIGIvc291bmQvdXNiL2NhcmQuYwpAQCAtMzIzLDYgKzMyMyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCW11dGV4X2luaXQoJmNoaXAtPnNodXRkb3duX211dGV4KTsKIAljaGlwLT5pbmRleCA9IGlkeDsKIAljaGlwLT5kZXYgPSBkZXY7CiAJY2hpcC0+Y2FyZCA9IGNhcmQ7CkBAIC01MzEsNiArNTMyLDcgQEAKIAljaGlwID0gcHRyOwogCWNhcmQgPSBjaGlwLT5jYXJkOwogCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5zaHV0ZG93bl9tdXRleCk7CiAJY2hpcC0+c2h1dGRvd24gPSAxOwogCWNoaXAtPm51bV9pbnRlcmZhY2VzLS07CiAJaWYgKGNoaXAtPm51bV9pbnRlcmZhY2VzIDw9IDApIHsKQEAgLTU0OCw5ICs1NTAsMTEgQEAKIAkJCXNuZF91c2JfbWl4ZXJfZGlzY29ubmVjdChwKTsKIAkJfQogCQl1c2JfY2hpcFtjaGlwLT5pbmRleF0gPSBOVUxMOworCQltdXRleF91bmxvY2soJmNoaXAtPnNodXRkb3duX211dGV4KTsKIAkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCXNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoY2FyZCk7CiAJfSBlbHNlIHsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zaHV0ZG93bl9tdXRleCk7CiAJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCX0KIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taXhlci5jIGIvc291bmQvdXNiL21peGVyLmMKaW5kZXggN2RmODliMy4uODVhZjYwNSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL21peGVyLmMKKysrIGIvc291bmQvdXNiL21peGVyLmMKQEAgLTk1LDcgKzk1LDcgQEAKIH07CiAKIAotLypFLW11IDAyMDIoMDQwNCkgZVh0ZW5zaW9uIFVuaXQoWFUpIGNvbnRyb2wqLworLypFLW11IDAyMDIvMDQwNC8wMjA0IGVYdGVuc2lvbiBVbml0KFhVKSBjb250cm9sKi8KIGVudW0gewogCVVTQl9YVV9DTE9DS19SQVRFIAkJPSAweGUzMDEsCiAJVVNCX1hVX0NMT0NLX1NPVVJDRQkJPSAweGUzMDIsCkBAIC0xNTY2LDcgKzE1NjYsNyBAQAogCQkJY3ZhbC0+aW5pdGlhbGl6ZWQgPSAxOwogCQl9IGVsc2UgewogCQkJaWYgKHR5cGUgPT0gVVNCX1hVX0NMT0NLX1JBVEUpIHsKLQkJCQkvKiBFLU11IFVTQiAwNDA0LzAyMDIvVHJhY2tlclByZQorCQkJCS8qIEUtTXUgVVNCIDA0MDQvMDIwMi9UcmFja2VyUHJlLzAyMDQKIAkJCQkgKiBzYW1wbGVyYXRlIGNvbnRyb2wgcXVpcmsKIAkJCQkgKi8KIAkJCQljdmFsLT5taW4gPSAwOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3BjbS5jIGIvc291bmQvdXNiL3BjbS5jCmluZGV4IDQxMzI1MjIuLmUzZjY4MDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9wY20uYworKysgYi9zb3VuZC91c2IvcGNtLmMKQEAgLTM2MSw2ICszNjEsNyBAQAogCX0KIAogCWlmIChjaGFuZ2VkKSB7CisJCW11dGV4X2xvY2soJnN1YnMtPnN0cmVhbS0+Y2hpcC0+c2h1dGRvd25fbXV0ZXgpOwogCQkvKiBmb3JtYXQgY2hhbmdlZCAqLwogCQlzbmRfdXNiX3JlbGVhc2Vfc3Vic3RyZWFtX3VyYnMoc3VicywgMCk7CiAJCS8qIGluZmx1ZW5jZWQ6IHBlcmlvZF9ieXRlcywgY2hhbm5lbHMsIHJhdGUsIGZvcm1hdCwgKi8KQEAgLTM2OCw2ICszNjksNyBAQAogCQkJCQkJICBwYXJhbXNfcmF0ZShod19wYXJhbXMpLAogCQkJCQkJICBzbmRfcGNtX2Zvcm1hdF9waHlzaWNhbF93aWR0aChwYXJhbXNfZm9ybWF0KGh3X3BhcmFtcykpICoKIAkJCQkJCQlwYXJhbXNfY2hhbm5lbHMoaHdfcGFyYW1zKSk7CisJCW11dGV4X3VubG9jaygmc3Vicy0+c3RyZWFtLT5jaGlwLT5zaHV0ZG93bl9tdXRleCk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTM4NSw4ICszODcsOSBAQAogCXN1YnMtPmN1cl9hdWRpb2ZtdCA9IE5VTEw7CiAJc3Vicy0+Y3VyX3JhdGUgPSAwOwogCXN1YnMtPnBlcmlvZF9ieXRlcyA9IDA7Ci0JaWYgKCFzdWJzLT5zdHJlYW0tPmNoaXAtPnNodXRkb3duKQotCQlzbmRfdXNiX3JlbGVhc2Vfc3Vic3RyZWFtX3VyYnMoc3VicywgMCk7CisJbXV0ZXhfbG9jaygmc3Vicy0+c3RyZWFtLT5jaGlwLT5zaHV0ZG93bl9tdXRleCk7CisJc25kX3VzYl9yZWxlYXNlX3N1YnN0cmVhbV91cmJzKHN1YnMsIDApOworCW11dGV4X3VubG9jaygmc3Vicy0+c3RyZWFtLT5jaGlwLT5zaHV0ZG93bl9tdXRleCk7CiAJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtKTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3F1aXJrcy10YWJsZS5oIGIvc291bmQvdXNiL3F1aXJrcy10YWJsZS5oCmluZGV4IDM1OTk5ODcuLjkyMWE4NmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaAorKysgYi9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmgKQEAgLTc5LDYgKzc5LDEzIEBACiAJLmlkUHJvZHVjdCA9IDB4M2YwYSwKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAogfSwKK3sKKwkvKiBFLU11IDAyMDQgVVNCICovCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJLmlkVmVuZG9yID0gMHgwNDFlLAorCS5pZFByb2R1Y3QgPSAweDNmMTksCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKK30sCiAKIC8qCiAgKiBMb2dpdGVjaCBRdWlja0NhbTogYkRldmljZUNsYXNzIGlzIHZlbmRvci1zcGVjaWZpYywgc28gZ2VuZXJpYyBpbnRlcmZhY2UKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9xdWlya3MuYyBiL3NvdW5kL3VzYi9xdWlya3MuYwppbmRleCBjZjhiZjA4Li5lMzE0Y2RiIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcXVpcmtzLmMKKysrIGIvc291bmQvdXNiL3F1aXJrcy5jCkBAIC01MzIsNyArNTMyLDcgQEAKIH0KIAogLyoKLSAqIEZvciBFLU11IDA0MDRVU0IvMDIwMlVTQi9UcmFja2VyUHJlIHNhbXBsZSByYXRlIHNob3VsZCBiZSBzZXQgZm9yIGRldmljZSwKKyAqIEZvciBFLU11IDA0MDRVU0IvMDIwMlVTQi9UcmFja2VyUHJlLzAyMDQgc2FtcGxlIHJhdGUgc2hvdWxkIGJlIHNldCBmb3IgZGV2aWNlLAogICogbm90IGZvciBpbnRlcmZhY2UuCiAgKi8KIApAQCAtNTg5LDYgKzU4OSw3IEBACiAJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDNmMDIpOiAvKiBFLU11IDAyMDIgVVNCICovCiAJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDNmMDQpOiAvKiBFLU11IDA0MDQgVVNCICovCiAJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDNmMGEpOiAvKiBFLU11IFRyYWNrZXIgUHJlICovCisJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDNmMTkpOiAvKiBFLU11IDAyMDQgVVNCICovCiAJCXNldF9mb3JtYXRfZW11X3F1aXJrKHN1YnMsIGZtdCk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5oIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKaW5kZXggZGIzZWIyMS4uNmU2NmZmZiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmgKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKQEAgLTM2LDYgKzM2LDcgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJdTMyIHVzYl9pZDsKIAlpbnQgc2h1dGRvd247CisJc3RydWN0IG11dGV4IHNodXRkb3duX211dGV4OwogCXVuc2lnbmVkIGludCB0eGZyX3F1aXJrOjE7IC8qIFN1YmZyYW1lIGJvdW5kYXJpZXMgb24gdHJhbnNmZXJzICovCiAJaW50IG51bV9pbnRlcmZhY2VzOwogCWludCBudW1fc3VzcGVuZGVkX2ludGY7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCAyYjUzODdkLi43MTQxYzQyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTIwNCwxMyArMjA0LDExIEBACiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2luaXQtc2VsZgogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdwYWNrZWQKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XcmVkdW5kYW50LWRlY2xzCi1FWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3N0YWNrLXByb3RlY3RvcgogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdzdHJpY3QtYWxpYXNpbmc9MwogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdzd2l0Y2gtZGVmYXVsdAogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdzd2l0Y2gtZW51bQogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVduby1zeXN0ZW0taGVhZGVycwogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVd1bmRlZgotRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVd2b2xhdGlsZS1yZWdpc3Rlci12YXIKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xd3JpdGUtc3RyaW5ncwogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdiYWQtZnVuY3Rpb24tY2FzdAogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucwpAQCAtMjk0LDYgKzI5MiwxMyBAQAogCUNGTEFHUyA6PSAkKENGTEFHUykgLWZzdGFjay1wcm90ZWN0b3ItYWxsCiBlbmRpZgogCitpZmVxICgkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX0hFTExPKSwtV2Vycm9yIC1Xc3RhY2stcHJvdGVjdG9yKSx5KQorICAgICAgIENGTEFHUyA6PSAkKENGTEFHUykgLVdzdGFjay1wcm90ZWN0b3IKK2VuZGlmCisKK2lmZXEgKCQoY2FsbCB0cnktY2MsJChTT1VSQ0VfSEVMTE8pLC1XZXJyb3IgLVd2b2xhdGlsZS1yZWdpc3Rlci12YXIpLHkpCisgICAgICAgQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhcgorZW5kaWYKIAogIyMjIC0tLSBFTkQgQ09ORklHVVJBVElPTiBTRUNUSU9OIC0tLQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCmluZGV4IGMwNTZjZGMuLjg4Nzk0NjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCkBAIC0yMTIsNyArMjEyLDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCW9mZnNldCA9IHN0YXJ0ICsgaTsKLQkJc3ByaW50ZihjbWQsICJhZGRyMmxpbmUgLWUgJXMgJTAxNmxseCIsIGZpbGVuYW1lLCBvZmZzZXQpOworCQlzcHJpbnRmKGNtZCwgImFkZHIybGluZSAtZSAlcyAlMDE2IiBQUkl4NjQsIGZpbGVuYW1lLCBvZmZzZXQpOwogCQlmcCA9IHBvcGVuKGNtZCwgInIiKTsKIAkJaWYgKCFmcCkKIAkJCWNvbnRpbnVlOwpAQCAtMjcwLDkgKzI3MCw5IEBACiAKIAlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGxlbjsgKytvZmZzZXQpCiAJCWlmIChoLT5pcFtvZmZzZXRdICE9IDApCi0JCQlwcmludGYoIiUqTHg6ICVMdVxuIiwgQklUU19QRVJfTE9ORyAvIDIsCisJCQlwcmludGYoIiUqIiBQUkl4NjQgIjogJSIgUFJJdTY0ICJcbiIsIEJJVFNfUEVSX0xPTkcgLyAyLAogCQkJICAgICAgIHN5bS0+c3RhcnQgKyBvZmZzZXQsIGgtPmlwW29mZnNldF0pOwotCXByaW50ZigiJSpzOiAlTHVcbiIsIEJJVFNfUEVSX0xPTkcgLyAyLCAiaC0+c3VtIiwgaC0+c3VtKTsKKwlwcmludGYoIiUqczogJSIgUFJJdTY0ICJcbiIsIEJJVFNfUEVSX0xPTkcgLyAyLCAiaC0+c3VtIiwgaC0+c3VtKTsKIH0KIAogc3RhdGljIGludCBoaXN0X2VudHJ5X190dHlfYW5ub3RhdGUoc3RydWN0IGhpc3RfZW50cnkgKmhlKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKaW5kZXggZGVmN2RkYy4uZDk3MjU2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYworKysgYi90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCkBAIC0zNzEsMTAgKzM3MSwxMCBAQAogCQkJYWRkciA9IGRhdGEtPnB0cjsKIAogCQlpZiAoc3ltICE9IE5VTEwpCi0JCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMrJUx4Iiwgc3ltLT5uYW1lLAorCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzKyUiIFBSSXg2NCAiIiwgc3ltLT5uYW1lLAogCQkJCSBhZGRyIC0gbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpKTsKIAkJZWxzZQotCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUjTHgiLCBhZGRyKTsKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlIyIgUFJJeDY0ICIiLCBhZGRyKTsKIAkJcHJpbnRmKCIgJS0zNHMgfCIsIGJ1Zik7CiAKIAkJcHJpbnRmKCIgJTlsbHUvJS01bHUgfCAlOWxsdS8lLTVsdSB8ICU4bHUgfCAlOGx1IHwgJTYuM2YlJVxuIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMgYi90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCmluZGV4IGI5YzZlNTQuLjJiMzZkZWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYwpAQCAtNzgyLDkgKzc4Miw5IEBACiAJCXByX2luZm8oIiUxMHUgIiwgc3QtPm5yX2FjcXVpcmVkKTsKIAkJcHJfaW5mbygiJTEwdSAiLCBzdC0+bnJfY29udGVuZGVkKTsKIAotCQlwcl9pbmZvKCIlMTVsbHUgIiwgc3QtPndhaXRfdGltZV90b3RhbCk7Ci0JCXByX2luZm8oIiUxNWxsdSAiLCBzdC0+d2FpdF90aW1lX21heCk7Ci0JCXByX2luZm8oIiUxNWxsdSAiLCBzdC0+d2FpdF90aW1lX21pbiA9PSBVTExPTkdfTUFYID8KKwkJcHJfaW5mbygiJTE1IiBQUkl1NjQgIiAiLCBzdC0+d2FpdF90aW1lX3RvdGFsKTsKKwkJcHJfaW5mbygiJTE1IiBQUkl1NjQgIiAiLCBzdC0+d2FpdF90aW1lX21heCk7CisJCXByX2luZm8oIiUxNSIgUFJJdTY0ICIgIiwgc3QtPndhaXRfdGltZV9taW4gPT0gVUxMT05HX01BWCA/CiAJCSAgICAgICAwIDogc3QtPndhaXRfdGltZV9taW4pOwogCQlwcl9pbmZvKCJcbiIpOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwppbmRleCBmY2QyOWU4Li42MGNhYzZmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCkBAIC03NTksOCArNzU5LDggQEAKIAkJcGVyZl9zZXNzaW9uX19wcm9jZXNzX21hY2hpbmVzKHNlc3Npb24sIGV2ZW50X19zeW50aGVzaXplX2d1ZXN0X29zKTsKIAogCWlmICghc3lzdGVtX3dpZGUpCi0JCWV2ZW50X19zeW50aGVzaXplX3RocmVhZCh0YXJnZXRfdGlkLCBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LAotCQkJCQkgc2Vzc2lvbik7CisJCWV2ZW50X19zeW50aGVzaXplX3RocmVhZF9tYXAodGhyZWFkcywgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwKKwkJCQkJICAgICBzZXNzaW9uKTsKIAllbHNlCiAJCWV2ZW50X19zeW50aGVzaXplX3RocmVhZHMocHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwgc2Vzc2lvbik7CiAKQEAgLTgxNyw3ICs4MTcsNyBAQAogCSAqIEFwcHJveGltYXRlIFJJUCBldmVudCBzaXplOiAyNCBieXRlcy4KIAkgKi8KIAlmcHJpbnRmKHN0ZGVyciwKLQkJIlsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSAlLjNmIE1CICVzICh+JWxsZCBzYW1wbGVzKSBdXG4iLAorCQkiWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlICUuM2YgTUIgJXMgKH4lIiBQUkl1NjQgIiBzYW1wbGVzKSBdXG4iLAogCQkoZG91YmxlKWJ5dGVzX3dyaXR0ZW4gLyAxMDI0LjAgLyAxMDI0LjAsCiAJCW91dHB1dF9uYW1lLAogCQlieXRlc193cml0dGVuIC8gMjQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCmluZGV4IDc1MTgzYTQuLmMyN2UzMWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCQkJCQkgICBldmVudC0+cmVhZC52YWx1ZSk7CiAJfQogCi0JZHVtcF9wcmludGYoIjogJWQgJWQgJXMgJUx1XG4iLCBldmVudC0+cmVhZC5waWQsIGV2ZW50LT5yZWFkLnRpZCwKKwlkdW1wX3ByaW50ZigiOiAlZCAlZCAlcyAlIiBQUkl1NjQgIlxuIiwgZXZlbnQtPnJlYWQucGlkLCBldmVudC0+cmVhZC50aWQsCiAJCSAgICBhdHRyID8gX19ldmVudF9uYW1lKGF0dHItPnR5cGUsIGF0dHItPmNvbmZpZykgOiAiRkFJTCIsCiAJCSAgICBldmVudC0+cmVhZC52YWx1ZSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKaW5kZXggMjllN2ZmZDguLjI5YWNiODk0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJfQogCXJ1bl9tZWFzdXJlbWVudF9vdmVyaGVhZCA9IG1pbl9kZWx0YTsKIAotCXByaW50ZigicnVuIG1lYXN1cmVtZW50IG92ZXJoZWFkOiAlTGQgbnNlY3NcbiIsIG1pbl9kZWx0YSk7CisJcHJpbnRmKCJydW4gbWVhc3VyZW1lbnQgb3ZlcmhlYWQ6ICUiIFBSSXU2NCAiIG5zZWNzXG4iLCBtaW5fZGVsdGEpOwogfQogCiBzdGF0aWMgdm9pZCBjYWxpYnJhdGVfc2xlZXBfbWVhc3VyZW1lbnRfb3ZlcmhlYWQodm9pZCkKQEAgLTIxMSw3ICsyMTEsNyBAQAogCW1pbl9kZWx0YSAtPSAxMDAwMDsKIAlzbGVlcF9tZWFzdXJlbWVudF9vdmVyaGVhZCA9IG1pbl9kZWx0YTsKIAotCXByaW50Zigic2xlZXAgbWVhc3VyZW1lbnQgb3ZlcmhlYWQ6ICVMZCBuc2Vjc1xuIiwgbWluX2RlbHRhKTsKKwlwcmludGYoInNsZWVwIG1lYXN1cmVtZW50IG92ZXJoZWFkOiAlIiBQUkl1NjQgIiBuc2Vjc1xuIiwgbWluX2RlbHRhKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzY2hlZF9hdG9tICoKQEAgLTYxNywxMyArNjE3LDEzIEBACiAJYnVybl9uc2VjcygxZTYpOwogCVQxID0gZ2V0X25zZWNzKCk7CiAKLQlwcmludGYoInRoZSBydW4gdGVzdCB0b29rICVMZCBuc2Vjc1xuIiwgVDEtVDApOworCXByaW50ZigidGhlIHJ1biB0ZXN0IHRvb2sgJSIgUFJJdTY0ICIgbnNlY3NcbiIsIFQxIC0gVDApOwogCiAJVDAgPSBnZXRfbnNlY3MoKTsKIAlzbGVlcF9uc2VjcygxZTYpOwogCVQxID0gZ2V0X25zZWNzKCk7CiAKLQlwcmludGYoInRoZSBzbGVlcCB0ZXN0IHRvb2sgJUxkIG5zZWNzXG4iLCBUMS1UMCk7CisJcHJpbnRmKCJ0aGUgc2xlZXAgdGVzdCB0b29rICUiIFBSSXU2NCAiIG5zZWNzXG4iLCBUMSAtIFQwKTsKIH0KIAogI2RlZmluZSBGSUxMX0ZJRUxEKHB0ciwgZmllbGQsIGV2ZW50LCBkYXRhKQlcCkBAIC04MTYsMTAgKzgxNiwxMCBAQAogCQlkZWx0YSA9IDA7CiAKIAlpZiAoZGVsdGEgPCAwKQotCQlkaWUoImhtLCBkZWx0YTogJUxkIDwgMCA/XG4iLCBkZWx0YSk7CisJCWRpZSgiaG0sIGRlbHRhOiAlIiBQUkl1NjQgIiA8IDAgP1xuIiwgZGVsdGEpOwogCiAJaWYgKHZlcmJvc2UpIHsKLQkJcHJpbnRmKCIgLi4uIHN3aXRjaCBmcm9tICVzLyVkIHRvICVzLyVkIFtyYW4gJUxkIG5zZWNzXVxuIiwKKwkJcHJpbnRmKCIgLi4uIHN3aXRjaCBmcm9tICVzLyVkIHRvICVzLyVkIFtyYW4gJSIgUFJJdTY0ICIgbnNlY3NdXG4iLAogCQkJc3dpdGNoX2V2ZW50LT5wcmV2X2NvbW0sIHN3aXRjaF9ldmVudC0+cHJldl9waWQsCiAJCQlzd2l0Y2hfZXZlbnQtPm5leHRfY29tbSwgc3dpdGNoX2V2ZW50LT5uZXh0X3BpZCwKIAkJCWRlbHRhKTsKQEAgLTEwNDgsNyArMTA0OCw3IEBACiAJCWRlbHRhID0gMDsKIAogCWlmIChkZWx0YSA8IDApCi0JCWRpZSgiaG0sIGRlbHRhOiAlTGQgPCAwID9cbiIsIGRlbHRhKTsKKwkJZGllKCJobSwgZGVsdGE6ICUiIFBSSXU2NCAiIDwgMCA/XG4iLCBkZWx0YSk7CiAKIAogCXNjaGVkX291dCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzd2l0Y2hfZXZlbnQtPnByZXZfcGlkKTsKQEAgLTEyMjEsNyArMTIyMSw3IEBACiAKIAlhdmcgPSB3b3JrX2xpc3QtPnRvdGFsX2xhdCAvIHdvcmtfbGlzdC0+bmJfYXRvbXM7CiAKLQlwcmludGYoInwlMTEuM2YgbXMgfCU5bGx1IHwgYXZnOiU5LjNmIG1zIHwgbWF4OiU5LjNmIG1zIHwgbWF4IGF0OiAlOS42ZiBzXG4iLAorCXByaW50ZigifCUxMS4zZiBtcyB8JTkiIFBSSXU2NCAiIHwgYXZnOiU5LjNmIG1zIHwgbWF4OiU5LjNmIG1zIHwgbWF4IGF0OiAlOS42ZiBzXG4iLAogCSAgICAgIChkb3VibGUpd29ya19saXN0LT50b3RhbF9ydW50aW1lIC8gMWU2LAogCQkgd29ya19saXN0LT5uYl9hdG9tcywgKGRvdWJsZSlhdmcgLyAxZTYsCiAJCSAoZG91YmxlKXdvcmtfbGlzdC0+bWF4X2xhdCAvIDFlNiwKQEAgLTE0MjMsNyArMTQyMyw3IEBACiAJCWRlbHRhID0gMDsKIAogCWlmIChkZWx0YSA8IDApCi0JCWRpZSgiaG0sIGRlbHRhOiAlTGQgPCAwID9cbiIsIGRlbHRhKTsKKwkJZGllKCJobSwgZGVsdGE6ICUiIFBSSXU2NCAiIDwgMCA/XG4iLCBkZWx0YSk7CiAKIAogCXNjaGVkX291dCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzd2l0Y2hfZXZlbnQtPnByZXZfcGlkKTsKQEAgLTE3MTMsNyArMTcxMyw3IEBACiAJfQogCiAJcHJpbnRmKCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCXByaW50ZigiICBUT1RBTDogICAgICAgICAgICAgICAgfCUxMS4zZiBtcyB8JTlMZCB8XG4iLAorCXByaW50ZigiICBUT1RBTDogICAgICAgICAgICAgICAgfCUxMS4zZiBtcyB8JTkiIFBSSXU2NCAiIHxcbiIsCiAJCShkb3VibGUpYWxsX3J1bnRpbWUvMWU2LCBhbGxfY291bnQpOwogCiAJcHJpbnRmKCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYwppbmRleCAxNTBhNjA2Li5iNzY2YzJhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jCkBAIC03Nyw4ICs3Nyw4IEBACiAJaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSB7CiAJCWlmIChkZWJ1Z19tb2RlKSB7CiAJCQlpZiAoc2FtcGxlLT50aW1lIDwgbGFzdF90aW1lc3RhbXApIHsKLQkJCQlwcl9lcnIoIlNhbXBsZXMgbWlzb3JkZXJlZCwgcHJldmlvdXM6ICVsbHUgIgotCQkJCQkidGhpczogJWxsdVxuIiwgbGFzdF90aW1lc3RhbXAsCisJCQkJcHJfZXJyKCJTYW1wbGVzIG1pc29yZGVyZWQsIHByZXZpb3VzOiAlIiBQUkl1NjQKKwkJCQkJIiB0aGlzOiAlIiBQUkl1NjQgIlxuIiwgbGFzdF90aW1lc3RhbXAsCiAJCQkJCXNhbXBsZS0+dGltZSk7CiAJCQkJbnJfdW5vcmRlcmVkKys7CiAJCQl9CkBAIC0xMjYsNyArMTI2LDcgQEAKIAlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCiAJaWYgKGRlYnVnX21vZGUpCi0JCXByX2VycigiTWlzb3JkZXJlZCB0aW1lc3RhbXBzOiAlbGx1XG4iLCBucl91bm9yZGVyZWQpOworCQlwcl9lcnIoIk1pc29yZGVyZWQgdGltZXN0YW1wczogJSIgUFJJdTY0ICJcbiIsIG5yX3Vub3JkZXJlZCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggMGZmMTFkOS4uYTQ4MmExOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC0yMDYsOCArMjA2LDggQEAKIAkJdXBkYXRlX3N0YXRzKCZwcy0+cmVzX3N0YXRzW2ldLCBjb3VudFtpXSk7CiAKIAlpZiAodmVyYm9zZSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlTGQgJUxkICVMZFxuIiwgZXZlbnRfbmFtZShjb3VudGVyKSwKLQkJCQljb3VudFswXSwgY291bnRbMV0sIGNvdW50WzJdKTsKKwkJZnByaW50ZihzdGRlcnIsICIlczogJSIgUFJJdTY0ICIgJSIgUFJJdTY0ICIgJSIgUFJJdTY0ICJcbiIsCisJCQlldmVudF9uYW1lKGNvdW50ZXIpLCBjb3VudFswXSwgY291bnRbMV0sIGNvdW50WzJdKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKaW5kZXggZWQ1Njk2MS4uNWRjZGJhNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJCQlpZiAobGxhYnMoc2tldykgPCBwYWdlX3NpemUpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJcHJfZGVidWcoIiUjTHg6IGRpZmYgZW5kIGFkZHIgZm9yICVzIHY6ICUjTHggazogJSNMeFxuIiwKKwkJCQlwcl9kZWJ1ZygiJSMiIFBSSXg2NCAiOiBkaWZmIGVuZCBhZGRyIGZvciAlcyB2OiAlIyIgUFJJeDY0ICIgazogJSMiIFBSSXg2NCAiXG4iLAogCQkJCQkgc3ltLT5zdGFydCwgc3ltLT5uYW1lLCBzeW0tPmVuZCwgcGFpci0+ZW5kKTsKIAkJCX0gZWxzZSB7CiAJCQkJc3RydWN0IHJiX25vZGUgKm5uZDsKQEAgLTE2OCwxMSArMTY4LDExIEBACiAJCQkJCWdvdG8gZGV0b3VyOwogCQkJCX0KIAotCQkJCXByX2RlYnVnKCIlI0x4OiBkaWZmIG5hbWUgdjogJXMgazogJXNcbiIsCisJCQkJcHJfZGVidWcoIiUjIiBQUkl4NjQgIjogZGlmZiBuYW1lIHY6ICVzIGs6ICVzXG4iLAogCQkJCQkgc3ltLT5zdGFydCwgc3ltLT5uYW1lLCBwYWlyLT5uYW1lKTsKIAkJCX0KIAkJfSBlbHNlCi0JCQlwcl9kZWJ1ZygiJSNMeDogJXMgbm90IG9uIGthbGxzeW1zXG4iLCBzeW0tPnN0YXJ0LCBzeW0tPm5hbWUpOworCQkJcHJfZGVidWcoIiUjIiBQUkl4NjQgIjogJXMgbm90IG9uIGthbGxzeW1zXG4iLCBzeW0tPnN0YXJ0LCBzeW0tPm5hbWUpOwogCiAJCWVyciA9IC0xOwogCX0KQEAgLTIxMSwxMCArMjExLDEwIEBACiAKIAkJaWYgKHBhaXItPnN0YXJ0ID09IHBvcy0+c3RhcnQpIHsKIAkJCXBhaXItPnByaXYgPSAxOwotCQkJcHJfaW5mbygiICVMeC0lTHggJUx4ICVzIGluIGthbGxzeW1zIGFzIiwKKwkJCXByX2luZm8oIiAlIiBQUkl4NjQgIi0lIiBQUkl4NjQgIiAlIiBQUkl4NjQgIiAlcyBpbiBrYWxsc3ltcyBhcyIsCiAJCQkJcG9zLT5zdGFydCwgcG9zLT5lbmQsIHBvcy0+cGdvZmYsIHBvcy0+ZHNvLT5uYW1lKTsKIAkJCWlmIChwb3MtPnBnb2ZmICE9IHBhaXItPnBnb2ZmIHx8IHBvcy0+ZW5kICE9IHBhaXItPmVuZCkKLQkJCQlwcl9pbmZvKCI6IFxuKiVMeC0lTHggJUx4IiwKKwkJCQlwcl9pbmZvKCI6IFxuKiUiIFBSSXg2NCAiLSUiIFBSSXg2NCAiICUiIFBSSXg2NCAiIiwKIAkJCQkJcGFpci0+c3RhcnQsIHBhaXItPmVuZCwgcGFpci0+cGdvZmYpOwogCQkJcHJfaW5mbygiICVzXG4iLCBwYWlyLT5kc28tPm5hbWUpOwogCQkJcGFpci0+cHJpdiA9IDE7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAl9CiAKIAlpZiAoZXZzZWwtPmNvdW50cy0+Y3B1WzBdLnZhbCAhPSBucl9vcGVuX2NhbGxzKSB7Ci0JCXByX2RlYnVnKCJwZXJmX2V2c2VsX19yZWFkX29uX2NwdTogZXhwZWN0ZWQgdG8gaW50ZXJjZXB0ICVkIGNhbGxzLCBnb3QgJUxkXG4iLAorCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHU6IGV4cGVjdGVkIHRvIGludGVyY2VwdCAlZCBjYWxscywgZ290ICUiIFBSSXU2NCAiXG4iLAogCQkJIG5yX29wZW5fY2FsbHMsIGV2c2VsLT5jb3VudHMtPmNwdVswXS52YWwpOwogCQlnb3RvIG91dF9jbG9zZV9mZDsKIAl9CkBAIC0zMzIsOCArMzMyLDcgQEAKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOwogCXVuc2lnbmVkIGludCBucl9vcGVuX2NhbGxzID0gMTExLCBpOwotCWNwdV9zZXRfdCAqY3B1X3NldDsKLQlzaXplX3QgY3B1X3NldF9zaXplOworCWNwdV9zZXRfdCBjcHVfc2V0OwogCWludCBpZCA9IHRyYWNlX2V2ZW50X19pZCgic3lzX2VudGVyX29wZW4iKTsKIAogCWlmIChpZCA8IDApIHsKQEAgLTM1MywxMyArMzUyLDggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWNwdV9zZXQgPSBDUFVfQUxMT0MoY3B1cy0+bnIpOwogCi0JaWYgKGNwdV9zZXQgPT0gTlVMTCkKLQkJZ290byBvdXRfdGhyZWFkX21hcF9kZWxldGU7Ci0KLQljcHVfc2V0X3NpemUgPSBDUFVfQUxMT0NfU0laRShjcHVzLT5ucik7Ci0JQ1BVX1pFUk9fUyhjcHVfc2V0X3NpemUsIGNwdV9zZXQpOworCUNQVV9aRVJPKCZjcHVfc2V0KTsKIAogCW1lbXNldCgmYXR0ciwgMCwgc2l6ZW9mKGF0dHIpKTsKIAlhdHRyLnR5cGUgPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDsKQEAgLTM2Nyw3ICszNjEsNyBAQAogCWV2c2VsID0gcGVyZl9ldnNlbF9fbmV3KCZhdHRyLCAwKTsKIAlpZiAoZXZzZWwgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fbmV3XG4iKTsKLQkJZ290byBvdXRfY3B1X2ZyZWU7CisJCWdvdG8gb3V0X3RocmVhZF9tYXBfZGVsZXRlOwogCX0KIAogCWlmIChwZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzKSA8IDApIHsKQEAgLTM3OSwxNCArMzczLDI5IEBACiAKIAlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXMtPm5yOyArK2NwdSkgewogCQl1bnNpZ25lZCBpbnQgbmNhbGxzID0gbnJfb3Blbl9jYWxscyArIGNwdTsKKwkJLyoKKwkJICogWFhYIGV2ZW50dWFsbHkgbGlmdCB0aGlzIHJlc3RyaWN0aW9uIGluIGEgd2F5IHRoYXQKKwkJICoga2VlcHMgcGVyZiBidWlsZGluZyBvbiBvbGRlciBnbGliYyBpbnN0YWxsYXRpb25zCisJCSAqIHdpdGhvdXQgQ1BVX0FMTE9DLiAxMDI0IGNwdXMgaW4gMjAxMCBzdGlsbCBzZWVtcworCQkgKiBhIHJlYXNvbmFibGUgdXBwZXIgbGltaXQgdGhvIDotKQorCQkgKi8KKwkJaWYgKGNwdXMtPm1hcFtjcHVdID49IENQVV9TRVRTSVpFKSB7CisJCQlwcl9kZWJ1ZygiSWdub3JpbmcgQ1BVICVkXG4iLCBjcHVzLT5tYXBbY3B1XSk7CisJCQljb250aW51ZTsKKwkJfQogCi0JCUNQVV9TRVQoY3B1LCBjcHVfc2V0KTsKLQkJc2NoZWRfc2V0YWZmaW5pdHkoMCwgY3B1X3NldF9zaXplLCBjcHVfc2V0KTsKKwkJQ1BVX1NFVChjcHVzLT5tYXBbY3B1XSwgJmNwdV9zZXQpOworCQlpZiAoc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNwdV9zZXQpLCAmY3B1X3NldCkgPCAwKSB7CisJCQlwcl9kZWJ1Zygic2NoZWRfc2V0YWZmaW5pdHkoKSBmYWlsZWQgb24gQ1BVICVkOiAlcyAiLAorCQkJCSBjcHVzLT5tYXBbY3B1XSwKKwkJCQkgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWdvdG8gb3V0X2Nsb3NlX2ZkOworCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBuY2FsbHM7ICsraSkgewogCQkJZmQgPSBvcGVuKCIvZXRjL3Bhc3N3ZCIsIE9fUkRPTkxZKTsKIAkJCWNsb3NlKGZkKTsKIAkJfQotCQlDUFVfQ0xSKGNwdSwgY3B1X3NldCk7CisJCUNQVV9DTFIoY3B1cy0+bWFwW2NwdV0sICZjcHVfc2V0KTsKIAl9CiAKIAkvKgpAQCAtNDAyLDYgKzQxMSw5IEBACiAJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVzLT5ucjsgKytjcHUpIHsKIAkJdW5zaWduZWQgaW50IGV4cGVjdGVkOwogCisJCWlmIChjcHVzLT5tYXBbY3B1XSA+PSBDUFVfU0VUU0laRSkKKwkJCWNvbnRpbnVlOworCiAJCWlmIChwZXJmX2V2c2VsX19yZWFkX29uX2NwdShldnNlbCwgY3B1LCAwKSA8IDApIHsKIAkJCXByX2RlYnVnKCJwZXJmX2V2c2VsX19vcGVuX3JlYWRfb25fY3B1XG4iKTsKIAkJCWdvdG8gb3V0X2Nsb3NlX2ZkOwpAQCAtNDA5LDggKzQyMSw4IEBACiAKIAkJZXhwZWN0ZWQgPSBucl9vcGVuX2NhbGxzICsgY3B1OwogCQlpZiAoZXZzZWwtPmNvdW50cy0+Y3B1W2NwdV0udmFsICE9IGV4cGVjdGVkKSB7Ci0JCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHU6IGV4cGVjdGVkIHRvIGludGVyY2VwdCAlZCBjYWxscyBvbiBjcHUgJWQsIGdvdCAlTGRcbiIsCi0JCQkJIGV4cGVjdGVkLCBjcHUsIGV2c2VsLT5jb3VudHMtPmNwdVtjcHVdLnZhbCk7CisJCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHU6IGV4cGVjdGVkIHRvIGludGVyY2VwdCAlZCBjYWxscyBvbiBjcHUgJWQsIGdvdCAlIiBQUkl1NjQgIlxuIiwKKwkJCQkgZXhwZWN0ZWQsIGNwdXMtPm1hcFtjcHVdLCBldnNlbC0+Y291bnRzLT5jcHVbY3B1XS52YWwpOwogCQkJZ290byBvdXRfY2xvc2VfZmQ7CiAJCX0KIAl9CkBAIC00MjAsOCArNDMyLDYgQEAKIAlwZXJmX2V2c2VsX19jbG9zZV9mZChldnNlbCwgMSwgdGhyZWFkcy0+bnIpOwogb3V0X2V2c2VsX2RlbGV0ZToKIAlwZXJmX2V2c2VsX19kZWxldGUoZXZzZWwpOwotb3V0X2NwdV9mcmVlOgotCUNQVV9GUkVFKGNwdV9zZXQpOwogb3V0X3RocmVhZF9tYXBfZGVsZXRlOgogCXRocmVhZF9tYXBfX2RlbGV0ZSh0aHJlYWRzKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCmluZGV4IDc0NmNmMDMuLjBhY2U3ODYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKQEAgLTI2NCw5ICsyNjQsNiBAQAogCQljLT5zdGFydF90aW1lID0gc3RhcnQ7CiAJaWYgKHAtPnN0YXJ0X3RpbWUgPT0gMCB8fCBwLT5zdGFydF90aW1lID4gc3RhcnQpCiAJCXAtPnN0YXJ0X3RpbWUgPSBzdGFydDsKLQotCWlmIChjcHUgPiBudW1jcHVzKQotCQludW1jcHVzID0gY3B1OwogfQogCiAjZGVmaW5lIE1BWF9DUFVTIDQwOTYKQEAgLTUxMSw2ICs1MDgsOSBAQAogCQlpZiAoIWV2ZW50X3N0cikKIAkJCXJldHVybiAwOwogCisJCWlmIChzYW1wbGUtPmNwdSA+IG51bWNwdXMpCisJCQludW1jcHVzID0gc2FtcGxlLT5jcHU7CisKIAkJaWYgKHN0cmNtcChldmVudF9zdHIsICJwb3dlcjpjcHVfaWRsZSIpID09IDApIHsKIAkJCXN0cnVjdCBwb3dlcl9wcm9jZXNzb3JfZW50cnkgKnBwZSA9ICh2b2lkICopdGU7CiAJCQlpZiAocHBlLT5zdGF0ZSA9PSAodTMyKVBXUl9FVkVOVF9FWElUKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDA1MzQ0YzYuLjVhMjlkOWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx0aW1lLmg+CkBAIC0yMTQsNyArMjE1LDcgQEAKIAlsZW4gPSBzeW0tPmVuZCAtIHN5bS0+c3RhcnQ7CiAKIAlzcHJpbnRmKGNvbW1hbmQsCi0JCSJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0lIzAqTHggLS1zdG9wLWFkZHJlc3M9JSMwKkx4IC1kUyAlcyIsCisJCSJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0lIzAqIiBQUkl4NjQgIiAtLXN0b3AtYWRkcmVzcz0lIzAqIiBQUkl4NjQgIiAtZFMgJXMiLAogCQlCSVRTX1BFUl9MT05HIC8gNCwgbWFwX19yaXBfMm9iamR1bXAobWFwLCBzeW0tPnN0YXJ0KSwKIAkJQklUU19QRVJfTE9ORyAvIDQsIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5lbmQpLCBwYXRoKTsKIApAQCAtMzA4LDcgKzMwOSw3IEBACiAJc3RydWN0IHNvdXJjZV9saW5lICpsaW5lOwogCWNoYXIgcGF0dGVybltQQVRURVJOX0xFTiArIDFdOwogCi0Jc3ByaW50ZihwYXR0ZXJuLCAiJTAqTHggPCIsIEJJVFNfUEVSX0xPTkcgLyA0LAorCXNwcmludGYocGF0dGVybiwgIiUwKiIgUFJJeDY0ICIgPCIsIEJJVFNfUEVSX0xPTkcgLyA0LAogCQltYXBfX3JpcF8yb2JqZHVtcChzeW1lLT5tYXAsIHN5bWJvbC0+c3RhcnQpKTsKIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c3JjLT5sb2NrKTsKQEAgLTUzNyw3ICs1MzgsNyBAQAogCWlmIChucl9jb3VudGVycyA9PSAxIHx8ICFkaXNwbGF5X3dlaWdodGVkKSB7CiAJCXN0cnVjdCBwZXJmX2V2c2VsICpmaXJzdDsKIAkJZmlyc3QgPSBsaXN0X2VudHJ5KGV2c2VsX2xpc3QubmV4dCwgc3RydWN0IHBlcmZfZXZzZWwsIG5vZGUpOwotCQlwcmludGYoIiVMZCIsIGZpcnN0LT5hdHRyLnNhbXBsZV9wZXJpb2QpOworCQlwcmludGYoIiUiIFBSSXU2NCwgKHVpbnQ2NF90KWZpcnN0LT5hdHRyLnNhbXBsZV9wZXJpb2QpOwogCQlpZiAoZnJlcSkKIAkJCXByaW50ZigiSHogIik7CiAJCWVsc2UKQEAgLTY0MCw3ICs2NDEsNyBAQAogCiAJCXBlcmNlbnRfY29sb3JfZnByaW50ZihzdGRvdXQsICIlNC4xZiUlIiwgcGNudCk7CiAJCWlmICh2ZXJib3NlKQotCQkJcHJpbnRmKCIgJTAxNmxseCIsIHN5bS0+c3RhcnQpOworCQkJcHJpbnRmKCIgJTAxNiIgUFJJeDY0LCBzeW0tPnN0YXJ0KTsKIAkJcHJpbnRmKCIgJS0qLipzIiwgc3ltX3dpZHRoLCBzeW1fd2lkdGgsIHN5bS0+bmFtZSk7CiAJCXByaW50ZigiICUtKi4qc1xuIiwgZHNvX3dpZHRoLCBkc29fd2lkdGgsCiAJCSAgICAgICBkc29fd2lkdGggPj0gc3ltZS0+bWFwLT5kc28tPmxvbmdfbmFtZV9sZW4gPwpAQCAtMTMwNSw3ICsxMzA2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAodGFyZ2V0X3RpZCAhPSAtMSkKLQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF90aWQsIGV2ZW50X19wcm9jZXNzLCBzZXNzaW9uKTsKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkX21hcCh0aHJlYWRzLCBldmVudF9fcHJvY2Vzcywgc2Vzc2lvbik7CiAJZWxzZQogCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGV2ZW50X19wcm9jZXNzLCBzZXNzaW9uKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCAyMzAyZWMwLi41MGQwYTkzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtMjYzLDExICsyNjMsMTIgQEAKIAkJCQkJICAgICBwcm9jZXNzLCBzZXNzaW9uKTsKIH0KIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsIGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKLQkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK2ludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRfbWFwKHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLAorCQkJCSBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJZXZlbnRfdCAqY29tbV9ldmVudCwgKm1tYXBfZXZlbnQ7Ci0JaW50IGVyciA9IC0xOworCWludCBlcnIgPSAtMSwgdGhyZWFkOwogCiAJY29tbV9ldmVudCA9IG1hbGxvYyhzaXplb2YoY29tbV9ldmVudC0+Y29tbSkgKyBzZXNzaW9uLT5pZF9oZHJfc2l6ZSk7CiAJaWYgKGNvbW1fZXZlbnQgPT0gTlVMTCkKQEAgLTI3Nyw4ICsyNzgsMTUgQEAKIAlpZiAobW1hcF9ldmVudCA9PSBOVUxMKQogCQlnb3RvIG91dF9mcmVlX2NvbW07CiAKLQllcnIgPSBfX2V2ZW50X19zeW50aGVzaXplX3RocmVhZChjb21tX2V2ZW50LCBtbWFwX2V2ZW50LCBwaWQsCi0JCQkJCSBwcm9jZXNzLCBzZXNzaW9uKTsKKwllcnIgPSAwOworCWZvciAodGhyZWFkID0gMDsgdGhyZWFkIDwgdGhyZWFkcy0+bnI7ICsrdGhyZWFkKSB7CisJCWlmIChfX2V2ZW50X19zeW50aGVzaXplX3RocmVhZChjb21tX2V2ZW50LCBtbWFwX2V2ZW50LAorCQkJCQkgICAgICAgdGhyZWFkcy0+bWFwW3RocmVhZF0sCisJCQkJCSAgICAgICBwcm9jZXNzLCBzZXNzaW9uKSkgeworCQkJZXJyID0gLTE7CisJCQlicmVhazsKKwkJfQorCX0KIAlmcmVlKG1tYXBfZXZlbnQpOwogb3V0X2ZyZWVfY29tbToKIAlmcmVlKGNvbW1fZXZlbnQpOwpAQCAtNDU5LDcgKzQ2Nyw4IEBACiBpbnQgZXZlbnRfX3Byb2Nlc3NfbG9zdChldmVudF90ICpzZWxmLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSBfX3VzZWQsCiAJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewotCWR1bXBfcHJpbnRmKCI6IGlkOiVMZDogbG9zdDolTGRcbiIsIHNlbGYtPmxvc3QuaWQsIHNlbGYtPmxvc3QubG9zdCk7CisJZHVtcF9wcmludGYoIjogaWQ6JSIgUFJJdTY0ICI6IGxvc3Q6JSIgUFJJdTY0ICJcbiIsCisJCSAgICBzZWxmLT5sb3N0LmlkLCBzZWxmLT5sb3N0Lmxvc3QpOwogCXNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX2xvc3QgKz0gc2VsZi0+bG9zdC5sb3N0OwogCXJldHVybiAwOwogfQpAQCAtNTc1LDcgKzU4NCw3IEBACiAJdTggY3B1bW9kZSA9IHNlbGYtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAJaW50IHJldCA9IDA7CiAKLQlkdW1wX3ByaW50ZigiICVkLyVkOiBbJSNMeCglI0x4KSBAICUjTHhdOiAlc1xuIiwKKwlkdW1wX3ByaW50ZigiICVkLyVkOiBbJSMiIFBSSXg2NCAiKCUjIiBQUkl4NjQgIikgQCAlIyIgUFJJeDY0ICJdOiAlc1xuIiwKIAkJCXNlbGYtPm1tYXAucGlkLCBzZWxmLT5tbWFwLnRpZCwgc2VsZi0+bW1hcC5zdGFydCwKIAkJCXNlbGYtPm1tYXAubGVuLCBzZWxmLT5tbWFwLnBnb2ZmLCBzZWxmLT5tbWFwLmZpbGVuYW1lKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCAyYjdlOTE5Li5jYzdiNTJmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtMTM1LDE0ICsxMzUsMTYgQEAKIHZvaWQgZXZlbnRfX3ByaW50X3RvdGFscyh2b2lkKTsKIAogc3RydWN0IHBlcmZfc2Vzc2lvbjsKK3N0cnVjdCB0aHJlYWRfbWFwOwogCiB0eXBlZGVmIGludCAoKmV2ZW50X19oYW5kbGVyX3N5bnRoX3QpKGV2ZW50X3QgKmV2ZW50LCAKIAkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIHR5cGVkZWYgaW50ICgqZXZlbnRfX2hhbmRsZXJfdCkoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlLAogCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogCi1pbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAotCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKK2ludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRfbWFwKHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLAorCQkJCSBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiBpbnQgZXZlbnRfX3N5bnRoZXNpemVfa2VybmVsX21tYXAoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwppbmRleCBmNWNmZWQ2Li5kODU3NWQzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwpAQCAtOTAsNyArOTAsNyBAQAogCWludCBjcHUsIHRocmVhZDsKIAlzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICphZ2dyID0gJmV2c2VsLT5jb3VudHMtPmFnZ3IsIGNvdW50OwogCi0JYWdnci0+dmFsID0gMDsKKwlhZ2dyLT52YWwgPSBhZ2dyLT5lbmEgPSBhZ2dyLT5ydW4gPSAwOwogCiAJZm9yIChjcHUgPSAwOyBjcHUgPCBuY3B1czsgY3B1KyspIHsKIAkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCBudGhyZWFkczsgdGhyZWFkKyspIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCA5ODlmYTJkLi5mNmE5MjllIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC03OTgsOCArNzk4LDggQEAKIAkJCQkgICAgICBpbnQgZmVhdCwgaW50IGZkKQogewogCWlmIChsc2VlayhmZCwgc2VsZi0+b2Zmc2V0LCBTRUVLX1NFVCkgPT0gKG9mZl90KS0xKSB7Ci0JCXByX2RlYnVnKCJGYWlsZWQgdG8gbHNlZWsgdG8gJUxkIG9mZnNldCBmb3IgZmVhdHVyZSAlZCwgIgotCQkJICJjb250aW51aW5nLi4uXG4iLCBzZWxmLT5vZmZzZXQsIGZlYXQpOworCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxzZWVrIHRvICUiIFBSSXU2NCAiIG9mZnNldCBmb3IgZmVhdHVyZSAiCisJCQkgICIlZCwgY29udGludWluZy4uLlxuIiwgc2VsZi0+b2Zmc2V0LCBmZWF0KTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGlzdC5jIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuYwppbmRleCBjNzQ5YmE2Li5kZjUxNTYwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKQEAgLTU4NSw2ICs1ODUsNyBAQAogewogCXN0cnVjdCBzb3J0X2VudHJ5ICpzZTsKIAl1NjQgcGVyaW9kLCB0b3RhbCwgcGVyaW9kX3N5cywgcGVyaW9kX3VzLCBwZXJpb2RfZ3Vlc3Rfc3lzLCBwZXJpb2RfZ3Vlc3RfdXM7CisJdTY0IG5yX2V2ZW50czsKIAljb25zdCBjaGFyICpzZXAgPSBzeW1ib2xfY29uZi5maWVsZF9zZXA7CiAJaW50IHJldDsKIApAQCAtNTkzLDYgKzU5NCw3IEBACiAKIAlpZiAocGFpcl9oaXN0cykgewogCQlwZXJpb2QgPSBzZWxmLT5wYWlyID8gc2VsZi0+cGFpci0+cGVyaW9kIDogMDsKKwkJbnJfZXZlbnRzID0gc2VsZi0+cGFpciA/IHNlbGYtPnBhaXItPm5yX2V2ZW50cyA6IDA7CiAJCXRvdGFsID0gcGFpcl9oaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kOwogCQlwZXJpb2Rfc3lzID0gc2VsZi0+cGFpciA/IHNlbGYtPnBhaXItPnBlcmlvZF9zeXMgOiAwOwogCQlwZXJpb2RfdXMgPSBzZWxmLT5wYWlyID8gc2VsZi0+cGFpci0+cGVyaW9kX3VzIDogMDsKQEAgLTYwMCw2ICs2MDIsNyBAQAogCQlwZXJpb2RfZ3Vlc3RfdXMgPSBzZWxmLT5wYWlyID8gc2VsZi0+cGFpci0+cGVyaW9kX2d1ZXN0X3VzIDogMDsKIAl9IGVsc2UgewogCQlwZXJpb2QgPSBzZWxmLT5wZXJpb2Q7CisJCW5yX2V2ZW50cyA9IHNlbGYtPm5yX2V2ZW50czsKIAkJdG90YWwgPSBzZXNzaW9uX3RvdGFsOwogCQlwZXJpb2Rfc3lzID0gc2VsZi0+cGVyaW9kX3N5czsKIAkJcGVyaW9kX3VzID0gc2VsZi0+cGVyaW9kX3VzOwpAQCAtNjM2LDEzICs2MzksMTMgQEAKIAkJCX0KIAkJfQogCX0gZWxzZQotCQlyZXQgPSBzbnByaW50ZihzLCBzaXplLCBzZXAgPyAiJWxsZCIgOiAiJTEybGxkICIsIHBlcmlvZCk7CisJCXJldCA9IHNucHJpbnRmKHMsIHNpemUsIHNlcCA/ICIlIiBQUkl1NjQgOiAiJTEyIiBQUkl1NjQgIiAiLCBwZXJpb2QpOwogCiAJaWYgKHN5bWJvbF9jb25mLnNob3dfbnJfc2FtcGxlcykgewogCQlpZiAoc2VwKQotCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlYyVsbGQiLCAqc2VwLCBwZXJpb2QpOworCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlYyUiIFBSSXU2NCwgKnNlcCwgbnJfZXZlbnRzKTsKIAkJZWxzZQotCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlMTFsbGQiLCBwZXJpb2QpOworCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlMTEiIFBSSXU2NCwgbnJfZXZlbnRzKTsKIAl9CiAKIAlpZiAocGFpcl9oaXN0cykgewpAQCAtOTcxLDcgKzk3NCw3IEBACiAJc3ltX3NpemUgPSBzeW0tPmVuZCAtIHN5bS0+c3RhcnQ7CiAJb2Zmc2V0ID0gaXAgLSBzeW0tPnN0YXJ0OwogCi0JcHJfZGVidWczKCIlczogaXA9JSNMeFxuIiwgX19mdW5jX18sIHNlbGYtPm1zLm1hcC0+dW5tYXBfaXAoc2VsZi0+bXMubWFwLCBpcCkpOworCXByX2RlYnVnMygiJXM6IGlwPSUjIiBQUkl4NjQgIlxuIiwgX19mdW5jX18sIHNlbGYtPm1zLm1hcC0+dW5tYXBfaXAoc2VsZi0+bXMubWFwLCBpcCkpOwogCiAJaWYgKG9mZnNldCA+PSBzeW1fc2l6ZSkKIAkJcmV0dXJuIDA7CkBAIC05ODAsOCArOTgzLDkgQEAKIAloLT5zdW0rKzsKIAloLT5pcFtvZmZzZXRdKys7CiAKLQlwcl9kZWJ1ZzMoIiUjTHggJXM6IHBlcmlvZCsrIFtpcDogJSNMeCwgJSNMeF0gPT4gJUxkXG4iLCBzZWxmLT5tcy5zeW0tPnN0YXJ0LAotCQkgIHNlbGYtPm1zLnN5bS0+bmFtZSwgaXAsIGlwIC0gc2VsZi0+bXMuc3ltLT5zdGFydCwgaC0+aXBbb2Zmc2V0XSk7CisJcHJfZGVidWczKCIlIyIgUFJJeDY0ICIgJXM6IHBlcmlvZCsrIFtpcDogJSMiIFBSSXg2NCAiLCAlIyIgUFJJeDY0CisJCSAgIl0gPT4gJSIgUFJJdTY0ICJcbiIsIHNlbGYtPm1zLnN5bS0+c3RhcnQsIHNlbGYtPm1zLnN5bS0+bmFtZSwKKwkJICBpcCwgaXAgLSBzZWxmLT5tcy5zeW0tPnN0YXJ0LCBoLT5pcFtvZmZzZXRdKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEzMiw3ICsxMTM2LDcgQEAKIAkJZ290byBvdXRfZnJlZV9maWxlbmFtZTsKIAl9CiAKLQlwcl9kZWJ1ZygiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSUjTHgsIGVuZD0lI0x4XG4iLCBfX2Z1bmNfXywKKwlwcl9kZWJ1ZygiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSUjIiBQUkl4NjQgIiwgZW5kPSUjIiBQUkl4NjQgIlxuIiwgX19mdW5jX18sCiAJCSBmaWxlbmFtZSwgc3ltLT5uYW1lLCBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCksCiAJCSBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpKTsKIApAQCAtMTE0Miw3ICsxMTQ2LDcgQEAKIAkJIGRzbywgZHNvLT5sb25nX25hbWUsIHN5bSwgc3ltLT5uYW1lKTsKIAogCXNucHJpbnRmKGNvbW1hbmQsIHNpemVvZihjb21tYW5kKSwKLQkJICJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0weCUwMTZMeCAtLXN0b3AtYWRkcmVzcz0weCUwMTZMeCAtZFMgLUMgJXN8Z3JlcCAtdiAlc3xleHBhbmQiLAorCQkgIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNiIgUFJJeDY0ICIgLS1zdG9wLWFkZHJlc3M9MHglMDE2IiBQUkl4NjQgIiAtZFMgLUMgJXN8Z3JlcCAtdiAlc3xleHBhbmQiLAogCQkgbWFwX19yaXBfMm9iamR1bXAobWFwLCBzeW0tPnN0YXJ0KSwKIAkJIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5lbmQpLAogCQkgc3ltZnNfZmlsZW5hbWUsIGZpbGVuYW1lKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggOGJlMGI5Ni4uMzA1Yzg0OCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9QRVJGX0xJTlVYX0JJVE9QU19IXwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vaHdlaWdodC5oPgogCiAjZGVmaW5lIEJJVFNfUEVSX0xPTkcgX19XT1JEU0laRQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hcC5jIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCmluZGV4IDNhN2ViNmUuLmExNmVjYWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvbWFwLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSAic3ltYm9sLmgiCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTk1LDcgKzE5Niw3IEBACiAKIHNpemVfdCBtYXBfX2ZwcmludGYoc3RydWN0IG1hcCAqc2VsZiwgRklMRSAqZnApCiB7Ci0JcmV0dXJuIGZwcmludGYoZnAsICIgJUx4LSVMeCAlTHggJXNcbiIsCisJcmV0dXJuIGZwcmludGYoZnAsICIgJSIgUFJJeDY0ICItJSIgUFJJeDY0ICIgJSIgUFJJeDY0ICIgJXNcbiIsCiAJCSAgICAgICBzZWxmLT5zdGFydCwgc2VsZi0+ZW5kLCBzZWxmLT5wZ29mZiwgc2VsZi0+ZHNvLT5uYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IGJjMjczMmUuLjEzNWY2OWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogCXN0YXRpYyBjaGFyIGJ1ZlszMl07CiAKIAlpZiAodHlwZSA9PSBQRVJGX1RZUEVfUkFXKSB7Ci0JCXNwcmludGYoYnVmLCAicmF3IDB4JWxseCIsIGNvbmZpZyk7CisJCXNwcmludGYoYnVmLCAicmF3IDB4JSIgUFJJeDY0LCBjb25maWcpOwogCQlyZXR1cm4gYnVmOwogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCmluZGV4IGI4MmNhZmIuLjQ1OGUzZWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaAorKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKQEAgLTIzLDcgKzIzLDcgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cmFjZXBvaW50X2lkX3RvX3BhdGgodTY0IGNvbmZpZyk7Ci1leHRlcm4gYm9vbCBoYXZlX3RyYWNlcG9pbnRzKHN0cnVjdCBsaXN0X2hlYWQgKmV2c2VsX2xpc3QpOworZXh0ZXJuIGJvb2wgaGF2ZV90cmFjZXBvaW50cyhzdHJ1Y3QgbGlzdF9oZWFkICpldmxpc3QpOwogCiBleHRlcm4gaW50CQkJbnJfY291bnRlcnM7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKaW5kZXggMTI4YWFhYi4uNmUyOWQ5YyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCXN5bSA9IF9fZmluZF9rZXJuZWxfZnVuY3Rpb25fYnlfbmFtZSh0cC0+c3ltYm9sLCAmbWFwKTsKIAlpZiAoc3ltKSB7CiAJCWFkZHIgPSBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCArIHRwLT5vZmZzZXQpOwotCQlwcl9kZWJ1ZygidHJ5IHRvIGZpbmQgJXMrJWxkQCVsbHhcbiIsIHRwLT5zeW1ib2wsCisJCXByX2RlYnVnKCJ0cnkgdG8gZmluZCAlcyslbGRAJSIgUFJJeDY0ICJcbiIsIHRwLT5zeW1ib2wsCiAJCQkgdHAtPm9mZnNldCwgYWRkcik7CiAJCXJldCA9IGZpbmRfcGVyZl9wcm9iZV9wb2ludCgodW5zaWduZWQgbG9uZylhZGRyLCBwcCk7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKaW5kZXggMzEzZGFjMi4uMTA1ZjAwYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC02NTIsMTAgKzY1MiwxMSBAQAogewogCXVuc2lnbmVkIGludCBpOwogCi0JcHJpbnRmKCIuLi4gY2hhaW46IG5yOiVMdVxuIiwgc2FtcGxlLT5jYWxsY2hhaW4tPm5yKTsKKwlwcmludGYoIi4uLiBjaGFpbjogbnI6JSIgUFJJdTY0ICJcbiIsIHNhbXBsZS0+Y2FsbGNoYWluLT5ucik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2FtcGxlLT5jYWxsY2hhaW4tPm5yOyBpKyspCi0JCXByaW50ZigiLi4uLi4gJTJkOiAlMDE2THhcbiIsIGksIHNhbXBsZS0+Y2FsbGNoYWluLT5pcHNbaV0pOworCQlwcmludGYoIi4uLi4uICUyZDogJTAxNiIgUFJJeDY0ICJcbiIsCisJCSAgICAgICBpLCBzYW1wbGUtPmNhbGxjaGFpbi0+aXBzW2ldKTsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19wcmludF90c3RhbXAoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKQEAgLTY3Miw3ICs2NzMsNyBAQAogCQlwcmludGYoIiV1ICIsIHNhbXBsZS0+Y3B1KTsKIAogCWlmIChzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpCi0JCXByaW50ZigiJUx1ICIsIHNhbXBsZS0+dGltZSk7CisJCXByaW50ZigiJSIgUFJJdTY0ICIgIiwgc2FtcGxlLT50aW1lKTsKIH0KIAogc3RhdGljIHZvaWQgZHVtcF9ldmVudChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBldmVudF90ICpldmVudCwKQEAgLTY4MSwxNiArNjgyLDE2IEBACiAJaWYgKCFkdW1wX3RyYWNlKQogCQlyZXR1cm47CiAKLQlwcmludGYoIlxuJSNMeCBbJSN4XTogZXZlbnQ6ICVkXG4iLCBmaWxlX29mZnNldCwgZXZlbnQtPmhlYWRlci5zaXplLAotCSAgICAgICBldmVudC0+aGVhZGVyLnR5cGUpOworCXByaW50ZigiXG4lIyIgUFJJeDY0ICIgWyUjeF06IGV2ZW50OiAlZFxuIiwKKwkgICAgICAgZmlsZV9vZmZzZXQsIGV2ZW50LT5oZWFkZXIuc2l6ZSwgZXZlbnQtPmhlYWRlci50eXBlKTsKIAogCXRyYWNlX2V2ZW50KGV2ZW50KTsKIAogCWlmIChzYW1wbGUpCiAJCXBlcmZfc2Vzc2lvbl9fcHJpbnRfdHN0YW1wKHNlc3Npb24sIGV2ZW50LCBzYW1wbGUpOwogCi0JcHJpbnRmKCIlI0x4IFslI3hdOiBQRVJGX1JFQ09SRF8lcyIsIGZpbGVfb2Zmc2V0LCBldmVudC0+aGVhZGVyLnNpemUsCi0JICAgICAgIGV2ZW50X19nZXRfZXZlbnRfbmFtZShldmVudC0+aGVhZGVyLnR5cGUpKTsKKwlwcmludGYoIiUjIiBQUkl4NjQgIiBbJSN4XTogUEVSRl9SRUNPUkRfJXMiLCBmaWxlX29mZnNldCwKKwkgICAgICAgZXZlbnQtPmhlYWRlci5zaXplLCBldmVudF9fZ2V0X2V2ZW50X25hbWUoZXZlbnQtPmhlYWRlci50eXBlKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBfc2FtcGxlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIGV2ZW50X3QgKmV2ZW50LApAQCAtNjk5LDggKzcwMCw5IEBACiAJaWYgKCFkdW1wX3RyYWNlKQogCQlyZXR1cm47CiAKLQlwcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCSAgICAgICBzYW1wbGUtPnBpZCwgc2FtcGxlLT50aWQsIHNhbXBsZS0+aXAsIHNhbXBsZS0+cGVyaW9kKTsKKwlwcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSMiIFBSSXg2NCAiIHBlcmlvZDogJSIgUFJJdTY0ICJcbiIsCisJICAgICAgIGV2ZW50LT5oZWFkZXIubWlzYywgc2FtcGxlLT5waWQsIHNhbXBsZS0+dGlkLCBzYW1wbGUtPmlwLAorCSAgICAgICBzYW1wbGUtPnBlcmlvZCk7CiAKIAlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pCiAJCWNhbGxjaGFpbl9fcHJpbnRmKHNhbXBsZSk7CkBAIC04NDMsOCArODQ1LDggQEAKIHsKIAlpZiAob3BzLT5sb3N0ID09IGV2ZW50X19wcm9jZXNzX2xvc3QgJiYKIAkgICAgc2Vzc2lvbi0+aGlzdHMuc3RhdHMudG90YWxfbG9zdCAhPSAwKSB7Ci0JCXVpX193YXJuaW5nKCJQcm9jZXNzZWQgJUx1IGV2ZW50cyBhbmQgTE9TVCAlTHUhXG5cbiIKLQkJCSAgICAiQ2hlY2sgSU8vQ1BVIG92ZXJsb2FkIVxuXG4iLAorCQl1aV9fd2FybmluZygiUHJvY2Vzc2VkICUiIFBSSXU2NCAiIGV2ZW50cyBhbmQgTE9TVCAlIiBQUkl1NjQKKwkJCSAgICAiIVxuXG5DaGVjayBJTy9DUFUgb3ZlcmxvYWQhXG5cbiIsCiAJCQkgICAgc2Vzc2lvbi0+aGlzdHMuc3RhdHMudG90YWxfcGVyaW9kLAogCQkJICAgIHNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX2xvc3QpOwogCX0KQEAgLTkxOCw3ICs5MjAsNyBAQAogCiAJaWYgKHNpemUgPT0gMCB8fAogCSAgICAoc2tpcCA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudChzZWxmLCAmZXZlbnQsIG9wcywgaGVhZCkpIDwgMCkgewotCQlkdW1wX3ByaW50ZigiJSNMeCBbJSN4XTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCisJCWR1bXBfcHJpbnRmKCIlIyIgUFJJeDY0ICIgWyUjeF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAogCQkJICAgIGhlYWQsIGV2ZW50LmhlYWRlci5zaXplLCBldmVudC5oZWFkZXIudHlwZSk7CiAJCS8qCiAJCSAqIGFzc3VtZSB3ZSBsb3N0IHRyYWNrIG9mIHRoZSBzdHJlYW0sIGNoZWNrIGFsaWdubWVudCwgYW5kCkBAIC0xMDIzLDcgKzEwMjUsNyBAQAogCiAJaWYgKHNpemUgPT0gMCB8fAogCSAgICBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnQoc2Vzc2lvbiwgZXZlbnQsIG9wcywgZmlsZV9wb3MpIDwgMCkgewotCQlkdW1wX3ByaW50ZigiJSNMeCBbJSN4XTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCisJCWR1bXBfcHJpbnRmKCIlIyIgUFJJeDY0ICIgWyUjeF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAogCQkJICAgIGZpbGVfb2Zmc2V0ICsgaGVhZCwgZXZlbnQtPmhlYWRlci5zaXplLAogCQkJICAgIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAJCS8qCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKaW5kZXggYjM2MzdkYi4uOTZjODY2MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYwpAQCAtMTIsNiArMTIsNyBAQAogICogb2YgdGhlIExpY2Vuc2UuCiAgKi8KIAorI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTQzLDExICs0NCwxMSBAQAogCXJldHVybiBjcHUyc2xvdChjcHUpICogU0xPVF9NVUxUOwogfQogCi1zdGF0aWMgZG91YmxlIHRpbWUycGl4ZWxzKHU2NCB0aW1lKQorc3RhdGljIGRvdWJsZSB0aW1lMnBpeGVscyh1NjQgX190aW1lKQogewogCWRvdWJsZSBYOwogCi0JWCA9IDEuMCAqIHN2Z19wYWdlX3dpZHRoICogKHRpbWUgLSBmaXJzdF90aW1lKSAvIChsYXN0X3RpbWUgLSBmaXJzdF90aW1lKTsKKwlYID0gMS4wICogc3ZnX3BhZ2Vfd2lkdGggKiAoX190aW1lIC0gZmlyc3RfdGltZSkgLyAobGFzdF90aW1lIC0gZmlyc3RfdGltZSk7CiAJcmV0dXJuIFg7CiB9CiAKQEAgLTk0LDcgKzk1LDcgQEAKIAogCXRvdGFsX2hlaWdodCA9ICgxICsgcm93cyArIGNwdTJzbG90KGNwdXMpKSAqIFNMT1RfTVVMVDsKIAlmcHJpbnRmKHN2Z2ZpbGUsICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgc3RhbmRhbG9uZT1cIm5vXCI/PiBcbiIpOwotCWZwcmludGYoc3ZnZmlsZSwgIjxzdmcgd2lkdGg9XCIlaVwiIGhlaWdodD1cIiVsbHVcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuIiwgc3ZnX3BhZ2Vfd2lkdGgsIHRvdGFsX2hlaWdodCk7CisJZnByaW50ZihzdmdmaWxlLCAiPHN2ZyB3aWR0aD1cIiVpXCIgaGVpZ2h0PVwiJSIgUFJJdTY0ICJcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuIiwgc3ZnX3BhZ2Vfd2lkdGgsIHRvdGFsX2hlaWdodCk7CiAKIAlmcHJpbnRmKHN2Z2ZpbGUsICI8ZGVmcz5cbiAgPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxuICAgIDwhW0NEQVRBW1xuIik7CiAKQEAgLTQ1NSw5ICs0NTYsOSBAQAogCQlyZXR1cm47CiAKIAlzdmdfbGVnZW5kYV9ib3goMCwJIlJ1bm5pbmciLCAic2FtcGxlIik7Ci0Jc3ZnX2xlZ2VuZGFfYm94KDEwMCwJIklkbGUiLCJyZWN0LmMxIik7Ci0Jc3ZnX2xlZ2VuZGFfYm94KDIwMCwJIkRlZXBlciBJZGxlIiwgInJlY3QuYzMiKTsKLQlzdmdfbGVnZW5kYV9ib3goMzUwLAkiRGVlcGVzdCBJZGxlIiwgInJlY3QuYzYiKTsKKwlzdmdfbGVnZW5kYV9ib3goMTAwLAkiSWRsZSIsImMxIik7CisJc3ZnX2xlZ2VuZGFfYm94KDIwMCwJIkRlZXBlciBJZGxlIiwgImMzIik7CisJc3ZnX2xlZ2VuZGFfYm94KDM1MCwJIkRlZXBlc3QgSWRsZSIsICJjNiIpOwogCXN2Z19sZWdlbmRhX2JveCg1NTAsCSJTbGVlcGluZyIsICJwcm9jZXNzMiIpOwogCXN2Z19sZWdlbmRhX2JveCg2NTAsCSJXYWl0aW5nIGZvciBjcHUiLCAid2FpdGluZyIpOwogCXN2Z19sZWdlbmRhX2JveCg4MDAsCSJCbG9ja2VkIG9uIElPIiwgImJsb2NrZWQiKTsKQEAgLTQ4Myw3ICs0ODQsNyBAQAogCQkJY29sb3IgPSAxMjg7CiAJCX0KIAotCQlmcHJpbnRmKHN2Z2ZpbGUsICI8bGluZSB4MT1cIiU0LjhmXCIgeTE9XCIlNC4yZlwiIHgyPVwiJTQuOGZcIiB5Mj1cIiVsbHVcIiBzdHlsZT1cInN0cm9rZTpyZ2IoJWksJWksJWkpO3N0cm9rZS13aWR0aDolMS4zZlwiLz5cbiIsCisJCWZwcmludGYoc3ZnZmlsZSwgIjxsaW5lIHgxPVwiJTQuOGZcIiB5MT1cIiU0LjJmXCIgeDI9XCIlNC44ZlwiIHkyPVwiJSIgUFJJdTY0ICJcIiBzdHlsZT1cInN0cm9rZTpyZ2IoJWksJWksJWkpO3N0cm9rZS13aWR0aDolMS4zZlwiLz5cbiIsCiAJCQl0aW1lMnBpeGVscyhpKSwgU0xPVF9NVUxULzIsIHRpbWUycGl4ZWxzKGkpLCB0b3RhbF9oZWlnaHQsIGNvbG9yLCBjb2xvciwgY29sb3IsIHRoaWNrbmVzcyk7CiAKIAkJaSArPSAxMDAwMDAwMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwppbmRleCAxNWNjZmJhLi43ODIxZDBlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgImJ1aWxkLWlkLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJzeW1ib2wuaCIKQEAgLTE1Myw3ICsxNTQsNyBAQAogCXNlbGYtPmJpbmRpbmcgPSBiaW5kaW5nOwogCXNlbGYtPm5hbWVsZW4gPSBuYW1lbGVuIC0gMTsKIAotCXByX2RlYnVnNCgiJXM6ICVzICUjTHgtJSNMeFxuIiwgX19mdW5jX18sIG5hbWUsIHN0YXJ0LCBzZWxmLT5lbmQpOworCXByX2RlYnVnNCgiJXM6ICVzICUjIiBQUkl4NjQgIi0lIyIgUFJJeDY0ICJcbiIsIF9fZnVuY19fLCBuYW1lLCBzdGFydCwgc2VsZi0+ZW5kKTsKIAogCW1lbWNweShzZWxmLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKIApAQCAtMTY3LDcgKzE2OCw3IEBACiAKIHN0YXRpYyBzaXplX3Qgc3ltYm9sX19mcHJpbnRmKHN0cnVjdCBzeW1ib2wgKnNlbGYsIEZJTEUgKmZwKQogewotCXJldHVybiBmcHJpbnRmKGZwLCAiICVsbHgtJWxseCAlYyAlc1xuIiwKKwlyZXR1cm4gZnByaW50ZihmcCwgIiAlIiBQUkl4NjQgIi0lIiBQUkl4NjQgIiAlYyAlc1xuIiwKIAkJICAgICAgIHNlbGYtPnN0YXJ0LCBzZWxmLT5lbmQsCiAJCSAgICAgICBzZWxmLT5iaW5kaW5nID09IFNUQl9HTE9CQUwgPyAnZycgOgogCQkgICAgICAgc2VsZi0+YmluZGluZyA9PSBTVEJfTE9DQUwgID8gJ2wnIDogJ3cnLApAQCAtMTE2MSw2ICsxMTYyLDEzIEBACiAKIAkJc2VjdGlvbl9uYW1lID0gZWxmX3NlY19fbmFtZSgmc2hkciwgc2Vjc3Rycyk7CiAKKwkJLyogT24gQVJNLCBzeW1ib2xzIGZvciB0aHVtYiBmdW5jdGlvbnMgaGF2ZSAxIGFkZGVkIHRvCisJCSAqIHRoZSBzeW1ib2wgYWRkcmVzcyBhcyBhIGZsYWcgLSByZW1vdmUgaXQgKi8KKwkJaWYgKChlaGRyLmVfbWFjaGluZSA9PSBFTV9BUk0pICYmCisJCSAgICAobWFwLT50eXBlID09IE1BUF9fRlVOQ1RJT04pICYmCisJCSAgICAoc3ltLnN0X3ZhbHVlICYgMSkpCisJCQktLXN5bS5zdF92YWx1ZTsKKwogCQlpZiAoc2VsZi0+a2VybmVsICE9IERTT19UWVBFX1VTRVIgfHwga21vZHVsZSkgewogCQkJY2hhciBkc29fbmFtZVtQQVRIX01BWF07CiAKQEAgLTEyMDgsOCArMTIxNiw4IEBACiAJCX0KIAogCQlpZiAoY3Vycl9kc28tPmFkanVzdF9zeW1ib2xzKSB7Ci0JCQlwcl9kZWJ1ZzQoIiVzOiBhZGp1c3Rpbmcgc3ltYm9sOiBzdF92YWx1ZTogJSNMeCAiCi0JCQkJICAic2hfYWRkcjogJSNMeCBzaF9vZmZzZXQ6ICUjTHhcbiIsIF9fZnVuY19fLAorCQkJcHJfZGVidWc0KCIlczogYWRqdXN0aW5nIHN5bWJvbDogc3RfdmFsdWU6ICUjIiBQUkl4NjQgIiAiCisJCQkJICAic2hfYWRkcjogJSMiIFBSSXg2NCAiIHNoX29mZnNldDogJSMiIFBSSXg2NCAiXG4iLCBfX2Z1bmNfXywKIAkJCQkgICh1NjQpc3ltLnN0X3ZhbHVlLCAodTY0KXNoZHIuc2hfYWRkciwKIAkJCQkgICh1NjQpc2hkci5zaF9vZmZzZXQpOwogCQkJc3ltLnN0X3ZhbHVlIC09IHNoZHIuc2hfYWRkciAtIHNoZHIuc2hfb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3R5cGVzLmggYi90b29scy9wZXJmL3V0aWwvdHlwZXMuaAppbmRleCA3ZDZiODMzLi41ZjM2ODlhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHlwZXMuaAorKysgYi90b29scy9wZXJmL3V0aWwvdHlwZXMuaApAQCAtMSwxMiArMSwxNCBAQAogI2lmbmRlZiBfX1BFUkZfVFlQRVNfSAogI2RlZmluZSBfX1BFUkZfVFlQRVNfSAogCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKIC8qCi0gKiBXZSBkZWZpbmUgdTY0IGFzIHVuc2lnbmVkIGxvbmcgbG9uZyBmb3IgZXZlcnkgYXJjaGl0ZWN0dXJlCi0gKiBzbyB0aGF0IHdlIGNhbiBwcmludCBpdCB3aXRoICVMeCB3aXRob3V0IGdldHRpbmcgd2FybmluZ3MuCisgKiBXZSBkZWZpbmUgdTY0IGFzIHVpbnQ2NF90IGZvciBldmVyeSBhcmNoaXRlY3R1cmUKKyAqIHNvIHRoYXQgd2UgY2FuIHByaW50IGl0IHdpdGggIiUiUFJJeDY0IHdpdGhvdXQgZ2V0dGluZyB3YXJuaW5ncy4KICAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OwotdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nICAgczY0OwordHlwZWRlZiB1aW50NjRfdAkgICB1NjQ7Cit0eXBlZGVmIGludDY0X3QJCSAgIHM2NDsKIHR5cGVkZWYgdW5zaWduZWQgaW50CSAgIHUzMjsKIHR5cGVkZWYgc2lnbmVkIGludAkgICBzMzI7CiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgIHUxNjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKaW5kZXggZWJkYThjMy4uNjBjNDYzYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKQEAgLTM1MCw3ICszNTAsNyBAQAogCWlmIChzZWxmLT5tcy5zeW0pCiAJCXJldHVybiBzZWxmLT5tcy5zeW0tPm5hbWU7CiAKLQlzbnByaW50ZihiZiwgYmZzaXplLCAiJSNMeCIsIHNlbGYtPmlwKTsKKwlzbnByaW50ZihiZiwgYmZzaXplLCAiJSMiIFBSSXg2NCwgc2VsZi0+aXApOwogCXJldHVybiBiZjsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL21hcC5jIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL21hcC5jCmluZGV4IGUzNTQzN2QuLmU1MTU4MzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9tYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvdWkvYnJvd3NlcnMvbWFwLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSAiLi4vbGlic2xhbmcuaCIKICNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPHN5cy90dHlkZWZhdWx0cy5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC01Nyw3ICs1OCw3IEBACiAJaW50IHdpZHRoOwogCiAJdWlfYnJvd3Nlcl9fc2V0X3BlcmNlbnRfY29sb3Ioc2VsZiwgMCwgY3VycmVudF9lbnRyeSk7Ci0Jc2xzbWdfcHJpbnRmKCIlKmxseCAlKmxseCAlYyAiLAorCXNsc21nX3ByaW50ZigiJSoiIFBSSXg2NCAiICUqIiBQUkl4NjQgIiAlYyAiLAogCQkgICAgIG1iLT5hZGRybGVuLCBzeW0tPnN0YXJ0LCBtYi0+YWRkcmxlbiwgc3ltLT5lbmQsCiAJCSAgICAgc3ltLT5iaW5kaW5nID09IFNUQl9HTE9CQUwgPyAnZycgOgogCQkgICAgIHN5bS0+YmluZGluZyA9PSBTVEJfTE9DQUwgID8gJ2wnIDogJ3cnKTsKQEAgLTE1MCw2ICsxNTEsNiBAQAogCQkrK21iLmIubnJfZW50cmllczsKIAl9CiAKLQltYi5hZGRybGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVsbHgiLCBtYXhhZGRyKTsKKwltYi5hZGRybGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiUiIFBSSXg2NCwgbWF4YWRkcik7CiAJcmV0dXJuIG1hcF9icm93c2VyX19ydW4oJm1iKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYyBiL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYwppbmRleCBjZmE1NWQ2Li5iZGQzMzQ3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkJaWYgKHdpZHRoID4gdGlkd2lkdGgpCiAJCQl0aWR3aWR0aCA9IHdpZHRoOwogCQlmb3IgKGogPSAwOyBqIDwgdmFsdWVzLT5jb3VudGVyczsgaisrKSB7Ci0JCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlTHUiLCB2YWx1ZXMtPnZhbHVlW2ldW2pdKTsKKwkJCXdpZHRoID0gc25wcmludGYoTlVMTCwgMCwgIiUiIFBSSXU2NCwgdmFsdWVzLT52YWx1ZVtpXVtqXSk7CiAJCQlpZiAod2lkdGggPiBjb3VudGVyd2lkdGhbal0pCiAJCQkJY291bnRlcndpZHRoW2pdID0gd2lkdGg7CiAJCX0KQEAgLTE2NSw3ICsxNjUsNyBAQAogCQlmcHJpbnRmKGZwLCAiICAlKmQgICUqZCIsIHBpZHdpZHRoLCB2YWx1ZXMtPnBpZFtpXSwKIAkJCXRpZHdpZHRoLCB2YWx1ZXMtPnRpZFtpXSk7CiAJCWZvciAoaiA9IDA7IGogPCB2YWx1ZXMtPmNvdW50ZXJzOyBqKyspCi0JCQlmcHJpbnRmKGZwLCAiICAlKkx1IiwKKwkJCWZwcmludGYoZnAsICIgICUqIiBQUkl1NjQsCiAJCQkJY291bnRlcndpZHRoW2pdLCB2YWx1ZXMtPnZhbHVlW2ldW2pdKTsKIAkJZnByaW50ZihmcCwgIlxuIik7CiAJfQpAQCAtMTk2LDEzICsxOTYsMTMgQEAKIAkJd2lkdGggPSBzdHJsZW4odmFsdWVzLT5jb3VudGVybmFtZVtqXSk7CiAJCWlmICh3aWR0aCA+IG5hbWV3aWR0aCkKIAkJCW5hbWV3aWR0aCA9IHdpZHRoOwotCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlbGx4IiwgdmFsdWVzLT5jb3VudGVycmF3aWRbal0pOworCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlIiBQUkl4NjQsIHZhbHVlcy0+Y291bnRlcnJhd2lkW2pdKTsKIAkJaWYgKHdpZHRoID4gcmF3d2lkdGgpCiAJCQlyYXd3aWR0aCA9IHdpZHRoOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLT50aHJlYWRzOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IHZhbHVlcy0+Y291bnRlcnM7IGorKykgewotCQkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJUx1IiwgdmFsdWVzLT52YWx1ZVtpXVtqXSk7CisJCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlIiBQUkl1NjQsIHZhbHVlcy0+dmFsdWVbaV1bal0pOwogCQkJaWYgKHdpZHRoID4gY291bnR3aWR0aCkKIAkJCQljb3VudHdpZHRoID0gd2lkdGg7CiAJCX0KQEAgLTIxNCw3ICsyMTQsNyBAQAogCQljb3VudHdpZHRoLCAiQ291bnQiKTsKIAlmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLT50aHJlYWRzOyBpKyspCiAJCWZvciAoaiA9IDA7IGogPCB2YWx1ZXMtPmNvdW50ZXJzOyBqKyspCi0JCQlmcHJpbnRmKGZwLCAiICAlKmQgICUqZCAgJSpzICAlKmxseCAgJSpMdVxuIiwKKwkJCWZwcmludGYoZnAsICIgICUqZCAgJSpkICAlKnMgICUqIiBQUkl4NjQgIiAgJSoiIFBSSXU2NCwKIAkJCQlwaWR3aWR0aCwgdmFsdWVzLT5waWRbaV0sCiAJCQkJdGlkd2lkdGgsIHZhbHVlcy0+dGlkW2ldLAogCQkJCW5hbWV3aWR0aCwgdmFsdWVzLT5jb3VudGVybmFtZVtqXSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMgYi90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jCmluZGV4IDRjNjk4M2QuLjM2MmEwY2IgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMKKysrIGIvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC90dXJib3N0YXQuYwpAQCAtNzIsNyArNzIsNyBAQAogCiBpbnQgbnVtX2NwdXM7CiAKLXR5cGVkZWYgc3RydWN0IHBlcl9jcHVfY291bnRlcnMgeworc3RydWN0IGNvdW50ZXJzIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdHNjOwkJLyogcGVyIHRocmVhZCAqLwogCXVuc2lnbmVkIGxvbmcgbG9uZyBhcGVyZjsJLyogcGVyIHRocmVhZCAqLwogCXVuc2lnbmVkIGxvbmcgbG9uZyBtcGVyZjsJLyogcGVyIHRocmVhZCAqLwpAQCAtODgsMTMgKzg4LDEzIEBACiAJaW50IHBrZzsKIAlpbnQgY29yZTsKIAlpbnQgY3B1OwotCXN0cnVjdCBwZXJfY3B1X2NvdW50ZXJzICpuZXh0OwotfSBQQ0M7CisJc3RydWN0IGNvdW50ZXJzICpuZXh0OworfTsKIAotUENDICpwY2NfZXZlbjsKLVBDQyAqcGNjX29kZDsKLVBDQyAqcGNjX2RlbHRhOwotUENDICpwY2NfYXZlcmFnZTsKK3N0cnVjdCBjb3VudGVycyAqY250X2V2ZW47CitzdHJ1Y3QgY291bnRlcnMgKmNudF9vZGQ7CitzdHJ1Y3QgY291bnRlcnMgKmNudF9kZWx0YTsKK3N0cnVjdCBjb3VudGVycyAqY250X2F2ZXJhZ2U7CiBzdHJ1Y3QgdGltZXZhbCB0dl9ldmVuOwogc3RydWN0IHRpbWV2YWwgdHZfb2RkOwogc3RydWN0IHRpbWV2YWwgdHZfZGVsdGE7CkBAIC0xMjUsNyArMTI1LDcgQEAKIAlyZXR1cm4gbXNyOwogfQogCi12b2lkIHByaW50X2hlYWRlcigpCit2b2lkIHByaW50X2hlYWRlcih2b2lkKQogewogCWlmIChzaG93X3BrZykKIAkJZnByaW50ZihzdGRlcnIsICJwa2cgIik7CkBAIC0xNjAsMzkgKzE2MCwzOSBAQAogCXB1dGMoJ1xuJywgc3RkZXJyKTsKIH0KIAotdm9pZCBkdW1wX3BjYyhQQ0MgKnBjYykKK3ZvaWQgZHVtcF9jbnQoc3RydWN0IGNvdW50ZXJzICpjbnQpCiB7Ci0JZnByaW50ZihzdGRlcnIsICJwYWNrYWdlOiAlZCAiLCBwY2MtPnBrZyk7Ci0JZnByaW50ZihzdGRlcnIsICJjb3JlOjogJWQgIiwgcGNjLT5jb3JlKTsKLQlmcHJpbnRmKHN0ZGVyciwgIkNQVTogJWQgIiwgcGNjLT5jcHUpOwotCWZwcmludGYoc3RkZXJyLCAiVFNDOiAlMDE2bGxYXG4iLCBwY2MtPnRzYyk7Ci0JZnByaW50ZihzdGRlcnIsICJjMzogJTAxNmxsWFxuIiwgcGNjLT5jMyk7Ci0JZnByaW50ZihzdGRlcnIsICJjNjogJTAxNmxsWFxuIiwgcGNjLT5jNik7Ci0JZnByaW50ZihzdGRlcnIsICJjNzogJTAxNmxsWFxuIiwgcGNjLT5jNyk7Ci0JZnByaW50ZihzdGRlcnIsICJhcGVyZjogJTAxNmxsWFxuIiwgcGNjLT5hcGVyZik7Ci0JZnByaW50ZihzdGRlcnIsICJwYzI6ICUwMTZsbFhcbiIsIHBjYy0+cGMyKTsKLQlmcHJpbnRmKHN0ZGVyciwgInBjMzogJTAxNmxsWFxuIiwgcGNjLT5wYzMpOwotCWZwcmludGYoc3RkZXJyLCAicGM2OiAlMDE2bGxYXG4iLCBwY2MtPnBjNik7Ci0JZnByaW50ZihzdGRlcnIsICJwYzc6ICUwMTZsbFhcbiIsIHBjYy0+cGM3KTsKLQlmcHJpbnRmKHN0ZGVyciwgIm1zcjB4JXg6ICUwMTZsbFhcbiIsIGV4dHJhX21zcl9vZmZzZXQsIHBjYy0+ZXh0cmFfbXNyKTsKKwlmcHJpbnRmKHN0ZGVyciwgInBhY2thZ2U6ICVkICIsIGNudC0+cGtnKTsKKwlmcHJpbnRmKHN0ZGVyciwgImNvcmU6OiAlZCAiLCBjbnQtPmNvcmUpOworCWZwcmludGYoc3RkZXJyLCAiQ1BVOiAlZCAiLCBjbnQtPmNwdSk7CisJZnByaW50ZihzdGRlcnIsICJUU0M6ICUwMTZsbFhcbiIsIGNudC0+dHNjKTsKKwlmcHJpbnRmKHN0ZGVyciwgImMzOiAlMDE2bGxYXG4iLCBjbnQtPmMzKTsKKwlmcHJpbnRmKHN0ZGVyciwgImM2OiAlMDE2bGxYXG4iLCBjbnQtPmM2KTsKKwlmcHJpbnRmKHN0ZGVyciwgImM3OiAlMDE2bGxYXG4iLCBjbnQtPmM3KTsKKwlmcHJpbnRmKHN0ZGVyciwgImFwZXJmOiAlMDE2bGxYXG4iLCBjbnQtPmFwZXJmKTsKKwlmcHJpbnRmKHN0ZGVyciwgInBjMjogJTAxNmxsWFxuIiwgY250LT5wYzIpOworCWZwcmludGYoc3RkZXJyLCAicGMzOiAlMDE2bGxYXG4iLCBjbnQtPnBjMyk7CisJZnByaW50ZihzdGRlcnIsICJwYzY6ICUwMTZsbFhcbiIsIGNudC0+cGM2KTsKKwlmcHJpbnRmKHN0ZGVyciwgInBjNzogJTAxNmxsWFxuIiwgY250LT5wYzcpOworCWZwcmludGYoc3RkZXJyLCAibXNyMHgleDogJTAxNmxsWFxuIiwgZXh0cmFfbXNyX29mZnNldCwgY250LT5leHRyYV9tc3IpOwogfQogCi12b2lkIGR1bXBfbGlzdChQQ0MgKnBjYykKK3ZvaWQgZHVtcF9saXN0KHN0cnVjdCBjb3VudGVycyAqY250KQogewotCXByaW50ZigiZHVtcF9saXN0IDB4JXBcbiIsIHBjYyk7CisJcHJpbnRmKCJkdW1wX2xpc3QgMHglcFxuIiwgY250KTsKIAotCWZvciAoOyBwY2M7IHBjYyA9IHBjYy0+bmV4dCkKLQkJZHVtcF9wY2MocGNjKTsKKwlmb3IgKDsgY250OyBjbnQgPSBjbnQtPm5leHQpCisJCWR1bXBfY250KGNudCk7CiB9CiAKLXZvaWQgcHJpbnRfcGNjKFBDQyAqcCkKK3ZvaWQgcHJpbnRfY250KHN0cnVjdCBjb3VudGVycyAqcCkKIHsKIAlkb3VibGUgaW50ZXJ2YWxfZmxvYXQ7CiAKIAlpbnRlcnZhbF9mbG9hdCA9IHR2X2RlbHRhLnR2X3NlYyArIHR2X2RlbHRhLnR2X3VzZWMvMTAwMDAwMC4wOwogCiAJLyogdG9wb2xvZ3kgY29sdW1ucywgcHJpbnQgYmxhbmtzIG9uIDFzdCAoYXZlcmFnZSkgbGluZSAqLwotCWlmIChwID09IHBjY19hdmVyYWdlKSB7CisJaWYgKHAgPT0gY250X2F2ZXJhZ2UpIHsKIAkJaWYgKHNob3dfcGtnKQogCQkJZnByaW50ZihzdGRlcnIsICIgICAgIik7CiAJCWlmIChzaG93X2NvcmUpCkBAIC0yNjIsMjQgKzI2MiwyNCBAQAogCXB1dGMoJ1xuJywgc3RkZXJyKTsKIH0KIAotdm9pZCBwcmludF9jb3VudGVycyhQQ0MgKmNudCkKK3ZvaWQgcHJpbnRfY291bnRlcnMoc3RydWN0IGNvdW50ZXJzICpjb3VudGVycykKIHsKLQlQQ0MgKnBjYzsKKwlzdHJ1Y3QgY291bnRlcnMgKmNudDsKIAogCXByaW50X2hlYWRlcigpOwogCiAJaWYgKG51bV9jcHVzID4gMSkKLQkJcHJpbnRfcGNjKHBjY19hdmVyYWdlKTsKKwkJcHJpbnRfY250KGNudF9hdmVyYWdlKTsKIAotCWZvciAocGNjID0gY250OyBwY2MgIT0gTlVMTDsgcGNjID0gcGNjLT5uZXh0KQotCQlwcmludF9wY2MocGNjKTsKKwlmb3IgKGNudCA9IGNvdW50ZXJzOyBjbnQgIT0gTlVMTDsgY250ID0gY250LT5uZXh0KQorCQlwcmludF9jbnQoY250KTsKIAogfQogCiAjZGVmaW5lIFNVQlRSQUNUX0NPVU5URVIoYWZ0ZXIsIGJlZm9yZSwgZGVsdGEpIChkZWx0YSA9IChhZnRlciAtIGJlZm9yZSksIChiZWZvcmUgPiBhZnRlcikpCiAKLQotaW50IGNvbXB1dGVfZGVsdGEoUENDICphZnRlciwgUENDICpiZWZvcmUsIFBDQyAqZGVsdGEpCitpbnQgY29tcHV0ZV9kZWx0YShzdHJ1Y3QgY291bnRlcnMgKmFmdGVyLAorCXN0cnVjdCBjb3VudGVycyAqYmVmb3JlLCBzdHJ1Y3QgY291bnRlcnMgKmRlbHRhKQogewogCWludCBlcnJvcnMgPSAwOwogCWludCBwZXJmX2VyciA9IDA7CkBAIC0zOTEsMjAgKzM5MSwyMCBAQAogCQlkZWx0YS0+ZXh0cmFfbXNyID0gYWZ0ZXItPmV4dHJhX21zcjsKIAkJaWYgKGVycm9ycykgewogCQkJZnByaW50ZihzdGRlcnIsICJFUlJPUiBjcHUlZCBiZWZvcmU6XG4iLCBiZWZvcmUtPmNwdSk7Ci0JCQlkdW1wX3BjYyhiZWZvcmUpOworCQkJZHVtcF9jbnQoYmVmb3JlKTsKIAkJCWZwcmludGYoc3RkZXJyLCAiRVJST1IgY3B1JWQgYWZ0ZXI6XG4iLCBiZWZvcmUtPmNwdSk7Ci0JCQlkdW1wX3BjYyhhZnRlcik7CisJCQlkdW1wX2NudChhZnRlcik7CiAJCQllcnJvcnMgPSAwOwogCQl9CiAJfQogCXJldHVybiAwOwogfQogCi12b2lkIGNvbXB1dGVfYXZlcmFnZShQQ0MgKmRlbHRhLCBQQ0MgKmF2ZykKK3ZvaWQgY29tcHV0ZV9hdmVyYWdlKHN0cnVjdCBjb3VudGVycyAqZGVsdGEsIHN0cnVjdCBjb3VudGVycyAqYXZnKQogewotCVBDQyAqc3VtOworCXN0cnVjdCBjb3VudGVycyAqc3VtOwogCi0Jc3VtID0gY2FsbG9jKDEsIHNpemVvZihQQ0MpKTsKKwlzdW0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb3VudGVycykpOwogCWlmIChzdW0gPT0gTlVMTCkgewogCQlwZXJyb3IoImNhbGxvYyBzdW0iKTsKIAkJZXhpdCgxKTsKQEAgLTQzOCwzNSArNDM4LDM0IEBACiAJZnJlZShzdW0pOwogfQogCi12b2lkIGdldF9jb3VudGVycyhQQ0MgKnBjYykKK3ZvaWQgZ2V0X2NvdW50ZXJzKHN0cnVjdCBjb3VudGVycyAqY250KQogewotCWZvciAoIDsgcGNjOyBwY2MgPSBwY2MtPm5leHQpIHsKLQkJcGNjLT50c2MgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfVFNDKTsKKwlmb3IgKCA7IGNudDsgY250ID0gY250LT5uZXh0KSB7CisJCWNudC0+dHNjID0gZ2V0X21zcihjbnQtPmNwdSwgTVNSX1RTQyk7CiAJCWlmIChkb19uaG1fY3N0YXRlcykKLQkJCXBjYy0+YzMgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfQ09SRV9DM19SRVNJREVOQ1kpOworCQkJY250LT5jMyA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9DT1JFX0MzX1JFU0lERU5DWSk7CiAJCWlmIChkb19uaG1fY3N0YXRlcykKLQkJCXBjYy0+YzYgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfQ09SRV9DNl9SRVNJREVOQ1kpOworCQkJY250LT5jNiA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9DT1JFX0M2X1JFU0lERU5DWSk7CiAJCWlmIChkb19zbmJfY3N0YXRlcykKLQkJCXBjYy0+YzcgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfQ09SRV9DN19SRVNJREVOQ1kpOworCQkJY250LT5jNyA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9DT1JFX0M3X1JFU0lERU5DWSk7CiAJCWlmIChoYXNfYXBlcmYpCi0JCQlwY2MtPmFwZXJmID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX0FQRVJGKTsKKwkJCWNudC0+YXBlcmYgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfQVBFUkYpOwogCQlpZiAoaGFzX2FwZXJmKQotCQkJcGNjLT5tcGVyZiA9IGdldF9tc3IocGNjLT5jcHUsIE1TUl9NUEVSRik7CisJCQljbnQtPm1wZXJmID0gZ2V0X21zcihjbnQtPmNwdSwgTVNSX01QRVJGKTsKIAkJaWYgKGRvX3NuYl9jc3RhdGVzKQotCQkJcGNjLT5wYzIgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfUEtHX0MyX1JFU0lERU5DWSk7CisJCQljbnQtPnBjMiA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9QS0dfQzJfUkVTSURFTkNZKTsKIAkJaWYgKGRvX25obV9jc3RhdGVzKQotCQkJcGNjLT5wYzMgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfUEtHX0MzX1JFU0lERU5DWSk7CisJCQljbnQtPnBjMyA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9QS0dfQzNfUkVTSURFTkNZKTsKIAkJaWYgKGRvX25obV9jc3RhdGVzKQotCQkJcGNjLT5wYzYgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfUEtHX0M2X1JFU0lERU5DWSk7CisJCQljbnQtPnBjNiA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9QS0dfQzZfUkVTSURFTkNZKTsKIAkJaWYgKGRvX3NuYl9jc3RhdGVzKQotCQkJcGNjLT5wYzcgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfUEtHX0M3X1JFU0lERU5DWSk7CisJCQljbnQtPnBjNyA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9QS0dfQzdfUkVTSURFTkNZKTsKIAkJaWYgKGV4dHJhX21zcl9vZmZzZXQpCi0JCQlwY2MtPmV4dHJhX21zciA9IGdldF9tc3IocGNjLT5jcHUsIGV4dHJhX21zcl9vZmZzZXQpOworCQkJY250LT5leHRyYV9tc3IgPSBnZXRfbXNyKGNudC0+Y3B1LCBleHRyYV9tc3Jfb2Zmc2V0KTsKIAl9CiB9CiAKLQotdm9pZCBwcmludF9uZWhhbGVtX2luZm8oKQordm9pZCBwcmludF9uZWhhbGVtX2luZm8odm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbXNyOwogCXVuc2lnbmVkIGludCByYXRpbzsKQEAgLTUxNCwzOCArNTEzLDM4IEBACiAKIH0KIAotdm9pZCBmcmVlX2NvdW50ZXJfbGlzdChQQ0MgKmxpc3QpCit2b2lkIGZyZWVfY291bnRlcl9saXN0KHN0cnVjdCBjb3VudGVycyAqbGlzdCkKIHsKLQlQQ0MgKnA7CisJc3RydWN0IGNvdW50ZXJzICpwOwogCiAJZm9yIChwID0gbGlzdDsgcDsgKSB7Ci0JCVBDQyAqZnJlZV9tZTsKKwkJc3RydWN0IGNvdW50ZXJzICpmcmVlX21lOwogCiAJCWZyZWVfbWUgPSBwOwogCQlwID0gcC0+bmV4dDsKIAkJZnJlZShmcmVlX21lKTsKIAl9Ci0JcmV0dXJuOwogfQogCiB2b2lkIGZyZWVfYWxsX2NvdW50ZXJzKHZvaWQpCiB7Ci0JZnJlZV9jb3VudGVyX2xpc3QocGNjX2V2ZW4pOwotCXBjY19ldmVuID0gTlVMTDsKKwlmcmVlX2NvdW50ZXJfbGlzdChjbnRfZXZlbik7CisJY250X2V2ZW4gPSBOVUxMOwogCi0JZnJlZV9jb3VudGVyX2xpc3QocGNjX29kZCk7Ci0JcGNjX29kZCA9IE5VTEw7CisJZnJlZV9jb3VudGVyX2xpc3QoY250X29kZCk7CisJY250X29kZCA9IE5VTEw7CiAKLQlmcmVlX2NvdW50ZXJfbGlzdChwY2NfZGVsdGEpOwotCXBjY19kZWx0YSA9IE5VTEw7CisJZnJlZV9jb3VudGVyX2xpc3QoY250X2RlbHRhKTsKKwljbnRfZGVsdGEgPSBOVUxMOwogCi0JZnJlZV9jb3VudGVyX2xpc3QocGNjX2F2ZXJhZ2UpOwotCXBjY19hdmVyYWdlID0gTlVMTDsKKwlmcmVlX2NvdW50ZXJfbGlzdChjbnRfYXZlcmFnZSk7CisJY250X2F2ZXJhZ2UgPSBOVUxMOwogfQogCi12b2lkIGluc2VydF9jcHVfY291bnRlcnMoUENDICoqbGlzdCwgUENDICpuZXcpCit2b2lkIGluc2VydF9jb3VudGVycyhzdHJ1Y3QgY291bnRlcnMgKipsaXN0LAorCXN0cnVjdCBjb3VudGVycyAqbmV3KQogewotCVBDQyAqcHJldjsKKwlzdHJ1Y3QgY291bnRlcnMgKnByZXY7CiAKIAkvKgogCSAqIGxpc3Qgd2FzIGVtcHR5CkBAIC01OTQsMTggKzU5MywxNiBAQAogCSAqLwogCW5ldy0+bmV4dCA9IHByZXYtPm5leHQ7CiAJcHJldi0+bmV4dCA9IG5ldzsKLQotCXJldHVybjsKIH0KIAotdm9pZCBhbGxvY19uZXdfY3B1X2NvdW50ZXJzKGludCBwa2csIGludCBjb3JlLCBpbnQgY3B1KQordm9pZCBhbGxvY19uZXdfY291bnRlcnMoaW50IHBrZywgaW50IGNvcmUsIGludCBjcHUpCiB7Ci0JUENDICpuZXc7CisJc3RydWN0IGNvdW50ZXJzICpuZXc7CiAKIAlpZiAodmVyYm9zZSA+IDEpCiAJCXByaW50ZigicGtnJWQgY29yZSVkLCBjcHUlZFxuIiwgcGtnLCBjb3JlLCBjcHUpOwogCi0JbmV3ID0gKFBDQyAqKWNhbGxvYygxLCBzaXplb2YoUENDKSk7CisJbmV3ID0gKHN0cnVjdCBjb3VudGVycyAqKWNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNvdW50ZXJzKSk7CiAJaWYgKG5ldyA9PSBOVUxMKSB7CiAJCXBlcnJvcigiY2FsbG9jIik7CiAJCWV4aXQoMSk7CkBAIC02MTMsOSArNjEwLDEwIEBACiAJbmV3LT5wa2cgPSBwa2c7CiAJbmV3LT5jb3JlID0gY29yZTsKIAluZXctPmNwdSA9IGNwdTsKLQlpbnNlcnRfY3B1X2NvdW50ZXJzKCZwY2Nfb2RkLCBuZXcpOworCWluc2VydF9jb3VudGVycygmY250X29kZCwgbmV3KTsKIAotCW5ldyA9IChQQ0MgKiljYWxsb2MoMSwgc2l6ZW9mKFBDQykpOworCW5ldyA9IChzdHJ1Y3QgY291bnRlcnMgKiljYWxsb2MoMSwKKwkJc2l6ZW9mKHN0cnVjdCBjb3VudGVycykpOwogCWlmIChuZXcgPT0gTlVMTCkgewogCQlwZXJyb3IoImNhbGxvYyIpOwogCQlleGl0KDEpOwpAQCAtNjIzLDkgKzYyMSw5IEBACiAJbmV3LT5wa2cgPSBwa2c7CiAJbmV3LT5jb3JlID0gY29yZTsKIAluZXctPmNwdSA9IGNwdTsKLQlpbnNlcnRfY3B1X2NvdW50ZXJzKCZwY2NfZXZlbiwgbmV3KTsKKwlpbnNlcnRfY291bnRlcnMoJmNudF9ldmVuLCBuZXcpOwogCi0JbmV3ID0gKFBDQyAqKWNhbGxvYygxLCBzaXplb2YoUENDKSk7CisJbmV3ID0gKHN0cnVjdCBjb3VudGVycyAqKWNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNvdW50ZXJzKSk7CiAJaWYgKG5ldyA9PSBOVUxMKSB7CiAJCXBlcnJvcigiY2FsbG9jIik7CiAJCWV4aXQoMSk7CkBAIC02MzMsOSArNjMxLDkgQEAKIAluZXctPnBrZyA9IHBrZzsKIAluZXctPmNvcmUgPSBjb3JlOwogCW5ldy0+Y3B1ID0gY3B1OwotCWluc2VydF9jcHVfY291bnRlcnMoJnBjY19kZWx0YSwgbmV3KTsKKwlpbnNlcnRfY291bnRlcnMoJmNudF9kZWx0YSwgbmV3KTsKIAotCW5ldyA9IChQQ0MgKiljYWxsb2MoMSwgc2l6ZW9mKFBDQykpOworCW5ldyA9IChzdHJ1Y3QgY291bnRlcnMgKiljYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb3VudGVycykpOwogCWlmIChuZXcgPT0gTlVMTCkgewogCQlwZXJyb3IoImNhbGxvYyIpOwogCQlleGl0KDEpOwpAQCAtNjQzLDcgKzY0MSw3IEBACiAJbmV3LT5wa2cgPSBwa2c7CiAJbmV3LT5jb3JlID0gY29yZTsKIAluZXctPmNwdSA9IGNwdTsKLQlwY2NfYXZlcmFnZSA9IG5ldzsKKwljbnRfYXZlcmFnZSA9IG5ldzsKIH0KIAogaW50IGdldF9waHlzaWNhbF9wYWNrYWdlX2lkKGludCBjcHUpCkBAIC03MTksNyArNzE3LDcgQEAKIHsKIAlwcmludGYoInR1cmJvc3RhdDogdG9wb2xvZ3kgY2hhbmdlZCwgcmUtaW5pdGlhbGl6aW5nLlxuIik7CiAJZnJlZV9hbGxfY291bnRlcnMoKTsKLQludW1fY3B1cyA9IGZvcl9hbGxfY3B1cyhhbGxvY19uZXdfY3B1X2NvdW50ZXJzKTsKKwludW1fY3B1cyA9IGZvcl9hbGxfY3B1cyhhbGxvY19uZXdfY291bnRlcnMpOwogCW5lZWRfcmVpbml0aWFsaXplID0gMDsKIAlwcmludGYoIm51bV9jcHVzIGlzIG5vdyAlZFxuIiwgbnVtX2NwdXMpOwogfQpAQCAtNzI4LDcgKzcyNiw3IEBACiAvKgogICogY2hlY2sgdG8gc2VlIGlmIGEgY3B1IGNhbWUgb24tbGluZQogICovCi12b2lkIHZlcmlmeV9udW1fY3B1cygpCit2b2lkIHZlcmlmeV9udW1fY3B1cyh2b2lkKQogewogCWludCBuZXdfbnVtX2NwdXM7CiAKQEAgLTc0MCwxNCArNzM4LDEyIEBACiAJCQkJbnVtX2NwdXMsIG5ld19udW1fY3B1cyk7CiAJCW5lZWRfcmVpbml0aWFsaXplID0gMTsKIAl9Ci0KLQlyZXR1cm47CiB9CiAKIHZvaWQgdHVyYm9zdGF0X2xvb3AoKQogewogcmVzdGFydDoKLQlnZXRfY291bnRlcnMocGNjX2V2ZW4pOworCWdldF9jb3VudGVycyhjbnRfZXZlbik7CiAJZ2V0dGltZW9mZGF5KCZ0dl9ldmVuLCAoc3RydWN0IHRpbWV6b25lICopTlVMTCk7CiAKIAl3aGlsZSAoMSkgewpAQCAtNzU3LDI0ICs3NTMsMjQgQEAKIAkJCWdvdG8gcmVzdGFydDsKIAkJfQogCQlzbGVlcChpbnRlcnZhbF9zZWMpOwotCQlnZXRfY291bnRlcnMocGNjX29kZCk7CisJCWdldF9jb3VudGVycyhjbnRfb2RkKTsKIAkJZ2V0dGltZW9mZGF5KCZ0dl9vZGQsIChzdHJ1Y3QgdGltZXpvbmUgKilOVUxMKTsKIAotCQljb21wdXRlX2RlbHRhKHBjY19vZGQsIHBjY19ldmVuLCBwY2NfZGVsdGEpOworCQljb21wdXRlX2RlbHRhKGNudF9vZGQsIGNudF9ldmVuLCBjbnRfZGVsdGEpOwogCQl0aW1lcnN1YigmdHZfb2RkLCAmdHZfZXZlbiwgJnR2X2RlbHRhKTsKLQkJY29tcHV0ZV9hdmVyYWdlKHBjY19kZWx0YSwgcGNjX2F2ZXJhZ2UpOwotCQlwcmludF9jb3VudGVycyhwY2NfZGVsdGEpOworCQljb21wdXRlX2F2ZXJhZ2UoY250X2RlbHRhLCBjbnRfYXZlcmFnZSk7CisJCXByaW50X2NvdW50ZXJzKGNudF9kZWx0YSk7CiAJCWlmIChuZWVkX3JlaW5pdGlhbGl6ZSkgewogCQkJcmVfaW5pdGlhbGl6ZSgpOwogCQkJZ290byByZXN0YXJ0OwogCQl9CiAJCXNsZWVwKGludGVydmFsX3NlYyk7Ci0JCWdldF9jb3VudGVycyhwY2NfZXZlbik7CisJCWdldF9jb3VudGVycyhjbnRfZXZlbik7CiAJCWdldHRpbWVvZmRheSgmdHZfZXZlbiwgKHN0cnVjdCB0aW1lem9uZSAqKU5VTEwpOwotCQljb21wdXRlX2RlbHRhKHBjY19ldmVuLCBwY2Nfb2RkLCBwY2NfZGVsdGEpOworCQljb21wdXRlX2RlbHRhKGNudF9ldmVuLCBjbnRfb2RkLCBjbnRfZGVsdGEpOwogCQl0aW1lcnN1YigmdHZfZXZlbiwgJnR2X29kZCwgJnR2X2RlbHRhKTsKLQkJY29tcHV0ZV9hdmVyYWdlKHBjY19kZWx0YSwgcGNjX2F2ZXJhZ2UpOwotCQlwcmludF9jb3VudGVycyhwY2NfZGVsdGEpOworCQljb21wdXRlX2F2ZXJhZ2UoY250X2RlbHRhLCBjbnRfYXZlcmFnZSk7CisJCXByaW50X2NvdW50ZXJzKGNudF9kZWx0YSk7CiAJfQogfQogCkBAIC04OTIsNyArODg4LDcgQEAKIAkgKiB0aGlzIGNoZWNrIGlzIHZhbGlkIGZvciBib3RoIEludGVsIGFuZCBBTUQKIAkgKi8KIAlhc20oImNwdWlkIiA6ICI9YSIgKGVheCksICI9YiIgKGVieCksICI9YyIgKGVjeCksICI9ZCIgKGVkeCkgOiAiYSIgKDB4ODAwMDAwMDcpKTsKLQloYXNfaW52YXJpYW50X3RzYyA9IGVkeCAmJiAoMSA8PCA4KTsKKwloYXNfaW52YXJpYW50X3RzYyA9IGVkeCAmICgxIDw8IDgpOwogCiAJaWYgKCFoYXNfaW52YXJpYW50X3RzYykgewogCQlmcHJpbnRmKHN0ZGVyciwgIk5vIGludmFyaWFudCBUU0NcbiIpOwpAQCAtOTA1LDcgKzkwMSw3IEBACiAJICovCiAKIAlhc20oImNwdWlkIiA6ICI9YSIgKGVheCksICI9YiIgKGVieCksICI9YyIgKGVjeCksICI9ZCIgKGVkeCkgOiAiYSIgKDB4NikpOwotCWhhc19hcGVyZiA9IGVjeCAmJiAoMSA8PCAwKTsKKwloYXNfYXBlcmYgPSBlY3ggJiAoMSA8PCAwKTsKIAlpZiAoIWhhc19hcGVyZikgewogCQlmcHJpbnRmKHN0ZGVyciwgIk5vIEFQRVJGIE1TUlxuIik7CiAJCWV4aXQoMSk7CkBAIC05NTIsNyArOTQ4LDcgQEAKIAljaGVja19kZXZfbXNyKCk7CiAJY2hlY2tfc3VwZXJfdXNlcigpOwogCi0JbnVtX2NwdXMgPSBmb3JfYWxsX2NwdXMoYWxsb2NfbmV3X2NwdV9jb3VudGVycyk7CisJbnVtX2NwdXMgPSBmb3JfYWxsX2NwdXMoYWxsb2NfbmV3X2NvdW50ZXJzKTsKIAogCWlmICh2ZXJib3NlKQogCQlwcmludF9uZWhhbGVtX2luZm8oKTsKQEAgLTk2Miw3ICs5NTgsNyBAQAogewogCWludCByZXR2YWw7CiAJcGlkX3QgY2hpbGRfcGlkOwotCWdldF9jb3VudGVycyhwY2NfZXZlbik7CisJZ2V0X2NvdW50ZXJzKGNudF9ldmVuKTsKIAlnZXR0aW1lb2ZkYXkoJnR2X2V2ZW4sIChzdHJ1Y3QgdGltZXpvbmUgKilOVUxMKTsKIAogCWNoaWxkX3BpZCA9IGZvcmsoKTsKQEAgLTk4NSwxNCArOTgxLDE0IEBACiAJCQlleGl0KDEpOwogCQl9CiAJfQotCWdldF9jb3VudGVycyhwY2Nfb2RkKTsKKwlnZXRfY291bnRlcnMoY250X29kZCk7CiAJZ2V0dGltZW9mZGF5KCZ0dl9vZGQsIChzdHJ1Y3QgdGltZXpvbmUgKilOVUxMKTsKLQlyZXR2YWwgPSBjb21wdXRlX2RlbHRhKHBjY19vZGQsIHBjY19ldmVuLCBwY2NfZGVsdGEpOworCXJldHZhbCA9IGNvbXB1dGVfZGVsdGEoY250X29kZCwgY250X2V2ZW4sIGNudF9kZWx0YSk7CiAKIAl0aW1lcnN1YigmdHZfb2RkLCAmdHZfZXZlbiwgJnR2X2RlbHRhKTsKLQljb21wdXRlX2F2ZXJhZ2UocGNjX2RlbHRhLCBwY2NfYXZlcmFnZSk7CisJY29tcHV0ZV9hdmVyYWdlKGNudF9kZWx0YSwgY250X2F2ZXJhZ2UpOwogCWlmICghcmV0dmFsKQotCQlwcmludF9jb3VudGVycyhwY2NfZGVsdGEpOworCQlwcmludF9jb3VudGVycyhjbnRfZGVsdGEpOwogCiAJZnByaW50ZihzdGRlcnIsICIlLjZmIHNlY1xuIiwgdHZfZGVsdGEudHZfc2VjICsgdHZfZGVsdGEudHZfdXNlYy8xMDAwMDAwLjApOzsKIAo=